<?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>56200</bug_id>
          
          <creation_ts>2011-03-11 09:11:49 -0800</creation_ts>
          <short_desc>[GTK] WebKitIconDatabase doesn&apos;t keep icons cached</short_desc>
          <delta_ts>2012-03-16 06:35:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Christian Dywan">christian</reporter>
          <assigned_to name="Sergio Villar Senin">svillar</assigned_to>
          <cc>beidson</cc>
    
    <cc>cgarcia</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pnormand</cc>
    
    <cc>svillar</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>366034</commentid>
    <comment_count>0</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2011-03-11 09:11:49 -0800</bug_when>
    <thetext>So you use WebKitIconDatabase to load icons, open a few sites and it works beautifully.

Then you quit.

Then you run the browser again and the icons are gone.

I thought this should either work by itself, until the hardcoded number of 25 icons is reached
or if I added WebCore::iconDatabase().retainIconForPageURL(pageURL) into webkit_icon_database_get_icon_pixbuf but this has no effect.

So I&apos;m not sure what I&apos;m missing, but clearly always removing all icons like this is nonsense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367066</commentid>
    <comment_count>1</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2011-03-14 10:57:17 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; So you use WebKitIconDatabase to load icons, open a few sites and it works beautifully.
&gt; 
&gt; Then you quit.
&gt; 
&gt; Then you run the browser again and the icons are gone.
&gt; 
&gt; I thought this should either work by itself, until the hardcoded number of 25 icons is reached
&gt; or if I added WebCore::iconDatabase().retainIconForPageURL(pageURL) into webkit_icon_database_get_icon_pixbuf but this has no effect.
&gt; 
&gt; So I&apos;m not sure what I&apos;m missing, but clearly always removing all icons like this is nonsense.

I don&apos;t know what browser you&apos;re using but if it&apos;s epiphany then I have to tell you that it has its own icon cache and actually does not make use of the webkit&apos;s icon cache. I&apos;ll work on that, because if it makes sense we could likely remove epy&apos;s cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367277</commentid>
    <comment_count>2</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2011-03-14 15:06:20 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; (In reply to comment #0)
&gt; &gt; So you use WebKitIconDatabase to load icons, open a few sites and it works beautifully.
&gt; &gt; Then you quit.
&gt; &gt; Then you run the browser again and the icons are gone.
&gt; I don&apos;t know what browser you&apos;re using but if it&apos;s epiphany then I have to tell you that it has
&gt; its own icon cache and actually does not make use of the webkit&apos;s icon cache. I&apos;ll work on that,
&gt; because if it makes sense we could likely remove epy&apos;s cache.

I know very well that nobody uses that cache because I committed it only last tuesday ;-)

I locally modified Midori to use it. I know about Epiphany&apos;s cache and I would indeed recommend it to switch once this issue and bug 56201 are resolved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369008</commentid>
    <comment_count>3</comment_count>
      <attachid>86047</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2011-03-17 05:01:06 -0700</bug_when>
    <thetext>Created attachment 86047
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370430</commentid>
    <comment_count>4</comment_count>
      <attachid>86328</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2011-03-21 10:00:04 -0700</bug_when>
    <thetext>Created attachment 86328
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370434</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-21 10:04:38 -0700</bug_when>
    <thetext>Attachment 86328 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/platform/graphics/BitmapIma...&quot; exit_code: 1

Source/WebKit/gtk/webkit/webkitwebview.h:402:  Extra space between guint and size  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:72:  Extra space between guint and size  [whitespace/declaration] [3]
Total errors found: 2 in 14 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>370454</commentid>
    <comment_count>6</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2011-03-21 10:35:00 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=86328) [details]
&gt; Patch

An undesirable side effect of the patch is that the icon database is not shared by default, ie. the current behavior is to use the same database path unless explicitly overridden.

One idea: add a webkit_icon_database_get_default_path().

Another idea: don&apos;t cleanup by default, so the app can retain pages and allow cleanup when it makes sense. So it would be reduced from


_delay_database_cleanup
_set_path
_retain_icon_for_uri
_allow_database_cleanup

to

_retain_icon_for_uri
_allow_database_cleanup

Btw I think the &quot;database&quot; in the method name is redundant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371332</commentid>
    <comment_count>7</comment_count>
      <attachid>86328</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2011-03-22 05:01:22 -0700</bug_when>
    <thetext>Comment on attachment 86328
Patch

The patch is wrong as gdk_pixbuf_get_from_surface does not scale the pixbufs as I thought, it just return the part of the surface of the given size</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372555</commentid>
    <comment_count>8</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2011-03-23 17:18:07 -0700</bug_when>
    <thetext>Since I just saw it due to a commit: we may need to manually handle private mode, according to http://trac.webkit.org/changeset/81824/trunk/Source/WebKit/mac/Misc/WebIconDatabase.mm we need to call it from web settings. Not quite related to this bug, but I wouldn&apos;t want to forget it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372774</commentid>
    <comment_count>9</comment_count>
      <attachid>86765</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2011-03-24 06:23:59 -0700</bug_when>
    <thetext>Created attachment 86765
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372775</commentid>
    <comment_count>10</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2011-03-24 06:26:45 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=86765) [details]
&gt; Patch

Just a few comments about my last path:

   * the database is disabled by default, users must enable it
   * there is a default directory that will be used unless changed by caller
   * Not sure about some &quot;Since:&quot; comments, for example should I replace the ones whose API has changed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377064</commentid>
    <comment_count>11</comment_count>
      <attachid>87701</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2011-03-31 04:50:55 -0700</bug_when>
    <thetext>Created attachment 87701
New API for WebKitIconDatabase

New version after last beidson&apos;s changes in the IconDatabase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377065</commentid>
    <comment_count>12</comment_count>
      <attachid>87702</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2011-03-31 04:51:54 -0700</bug_when>
    <thetext>Created attachment 87702
Remove &quot;icon-loaded&quot; signal from the WebKitIconDatabase

I think we no longer need this signal after the new &quot;icon-changed&quot; signal I added in the previous patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377066</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-31 04:53:17 -0700</bug_when>
    <thetext>Attachment 87701 did not pass style-queue:

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

Source/WebKit/gtk/webkit/webkitwebview.h:402:  Extra space between guint and size  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:61:  Extra space between gboolean and enabled  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:80:  Extra space between guint and size  [whitespace/declaration] [3]
Total errors found: 3 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377116</commentid>
    <comment_count>14</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2011-03-31 06:50:01 -0700</bug_when>
    <thetext>BTW another positive side effect of this patch is that WebCore will no longer issue a request for the favicon cache of every webpage the users visit. Right now, WebKitGtk+ always asks for favicon.ico for every web page because clients are not opening the IconDatabase, and yes, it does not matter that the client has a built-in favicon cache, WebCore will always ask for the favicon if the IconDatabase is not used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380747</commentid>
    <comment_count>15</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2011-04-06 12:59:47 -0700</bug_when>
    <thetext>Care to comment on my suggestions in comments #6 and #8? I don&apos;t necessarily expect you to like my ideas but it would be nice to discuss this :-)


+ // WebKit1 only has a single &quot;icon did change&quot; notification.

What exactly does this mean? I do see several functions there for different notifications. Or is that comment copied from another port?

For what I want, one signal is completely sufficient.

+ * your program will tipically do:
+ * webkit_icon_database_delay_database_cleanup(). Tipically this

Spanglish ;-) &quot;typically&quot;

+     * WebKitIconDatabase::icons-removed:

The method to achieve this is called &quot;clear&quot;, I think this should be &quot;cleared&quot; accordingly.

+#if ENABLE(ICONDATABASE)

Most of the code is not wrapped in conditionals, and as far as I&apos;m concerned it&apos;s not sensible to allow excluding this.

+ * webkit_icon_database_is_enabled:

I suggest to call this _get_enabled analogous to _set_enabled. Going by GTK+ as a role model _is_foo is used for read-only values that can&apos;t be changed.

+ * Requires an enabled database.

Personally I feel this is redundant/ obvious. But no strong opinion, if in doubt better to be more verbose than too curt.

+     * WebKitIconDatabase::icon-changed:

So effectively this is

icon-loaded (frame, uri) → icon-changed (uri)

Why are you dropping the frame argument?
Isn&apos;t this inconsitent with icon-loaded in WebKitWebView now?

I think this should be squashed in one change OR do the whole signal change in one patch.

+ * webkit_icon_database_retain_icon_for_uri:

Perhaps g_return_if_fail (!webkit_icon_database_get_enabled ()); here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381304</commentid>
    <comment_count>16</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2011-04-07 07:00:00 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Care to comment on my suggestions in comments #6 and #8? I don&apos;t necessarily expect you to like my ideas but it would be nice to discuss this :-)

Sure, I just somehow forget about them after rebasing the patch against the last changes. Regarding comment #6 I just somehow followed the current behaviour of WebCore when designing the API. Apart from that having an &quot;allow&quot; without a &quot;disable&quot; is like a &quot;set&quot; without a &quot;get&quot; :). And about comment #8 you mentioned that it was not related so I didn&apos;t take a closer look at it.

&gt; + // WebKit1 only has a single &quot;icon did change&quot; notification.
&gt; 
&gt; What exactly does this mean? I do see several functions there for different notifications. Or is that comment copied from another port?

Sure I think I took it accidentally from the mac port, but anyway, I think that having a single signal is more than enough for the moment, we could think about adding more if needed in the future.
 
&gt; For what I want, one signal is completely sufficient.
&gt; 
&gt; + * your program will tipically do:
&gt; + * webkit_icon_database_delay_database_cleanup(). Tipically this
&gt; 
&gt; Spanglish ;-) &quot;typically&quot;

:)
 
&gt; +     * WebKitIconDatabase::icons-removed:
&gt; 
&gt; The method to achieve this is called &quot;clear&quot;, I think this should be &quot;cleared&quot; accordingly.

Yeah well, at the same time the IconDatabase method is called removeAllIcons, I guess that&apos;s why I chose that name but if you think it&apos;s clearer I can change it
 
&gt; +#if ENABLE(ICONDATABASE)
&gt; 
&gt; Most of the code is not wrapped in conditionals, and as far as I&apos;m concerned it&apos;s not sensible to allow excluding this.

Should be wrapped actually, but since none of our code is I guess I can remove it.

&gt; + * webkit_icon_database_is_enabled:
&gt; 
&gt; I suggest to call this _get_enabled analogous to _set_enabled. Going by GTK+ as a role model _is_foo is used for read-only values that can&apos;t be changed.

Fair enough, looks sensible to me.
 
&gt; + * Requires an enabled database.
&gt; 
&gt; Personally I feel this is redundant/ obvious. But no strong opinion, if in doubt better to be more verbose than too curt.

I think it&apos;s better to keep it just to state it very clearly that you have to follow the right steps to get it working.

&gt; +     * WebKitIconDatabase::icon-changed:
&gt; 
&gt; So effectively this is
&gt; 
&gt; icon-loaded (frame, uri) → icon-changed (uri)
&gt; 
&gt; Why are you dropping the frame argument?
&gt; Isn&apos;t this inconsitent with icon-loaded in WebKitWebView now?

Basically because I wanted to have just 1 signal that could be used both from the IconDatabaseClient and the FrameLoaderClient. I think it&apos;s better to keep the icon database away from any UI-like element like the frames. If you want to listen to a change in a favicon for a specific webview you can still use the icon-loaded signal.

&gt; I think this should be squashed in one change OR do the whole signal change in one patch.

Sure, I just split them for reviewing purpouses to state clearly that replacing the other signal is not a requirement for the main patch

&gt; + * webkit_icon_database_retain_icon_for_uri:
&gt; 
&gt; Perhaps g_return_if_fail (!webkit_icon_database_get_enabled ()); here?

Good catch!. Thx for the review Christian!!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382105</commentid>
    <comment_count>17</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2011-04-08 02:48:27 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; &gt; + * webkit_icon_database_retain_icon_for_uri:
&gt; &gt; 
&gt; &gt; Perhaps g_return_if_fail (!webkit_icon_database_get_enabled ()); here?
&gt; 
&gt; Good catch!. Thx for the review Christian!!!

:m actually I&apos;m handling this in the body of the function as a valid case. Whether we add it to all the functions that require a enabled database or to none of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392833</commentid>
    <comment_count>18</comment_count>
      <attachid>87702</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-26 15:35:14 -0700</bug_when>
    <thetext>Comment on attachment 87702
Remove &quot;icon-loaded&quot; signal from the WebKitIconDatabase

This one is missing a ChangeLog and might be better to merge this with your first patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392836</commentid>
    <comment_count>19</comment_count>
      <attachid>87701</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-26 15:36:25 -0700</bug_when>
    <thetext>Comment on attachment 87701
New API for WebKitIconDatabase

As I said in person, this patch is awesome. Other than the nits that I mentioned I would switch to representing the IconDatabaseClient virtual methods with three separate signals though. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397932</commentid>
    <comment_count>20</comment_count>
      <attachid>92245</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2011-05-04 08:25:06 -0700</bug_when>
    <thetext>Created attachment 92245
Patch

New version with the changes suggested by Martin that I was able to remember :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397935</commentid>
    <comment_count>21</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-04 08:27:52 -0700</bug_when>
    <thetext>Attachment 92245 did not pass style-queue:

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

Source/WebKit/gtk/webkit/webkitwebview.h:402:  Extra space between guint and size  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:61:  Extra space between gboolean and enabled  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:80:  Extra space between guint and size  [whitespace/declaration] [3]
Total errors found: 3 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397969</commentid>
    <comment_count>22</comment_count>
      <attachid>92245</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-05-04 09:33:20 -0700</bug_when>
    <thetext>Comment on attachment 92245
Patch

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

Seems like a very important change, though it&apos;s an API break. I&apos;d really like to get Xan and Gustavo to sign off on this one as well. r- for now for the nits.

&gt; Source/WebKit/gtk/WebCoreSupport/IconDatabaseClientGtk.cpp:57
&gt; +}
&gt; +void IconDatabaseClientGtk::didChangeIconForPageURL(const String&amp; pageURL)

Need an extra space here for my sanity. ;)

&gt; Source/WebKit/gtk/WebCoreSupport/IconDatabaseClientGtk.h:33
&gt; +namespace WebCore {
&gt; +class IconDatabase;
&gt; +}; // namespace WebCore

I don&apos;t think you need this forward declaration.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:64
&gt; + * Every icon in the database has a retain count.  If an icon has a
&gt; + * retain count greater than 0, it will be written to disk for later
&gt; + * use. If an icon&apos;s retain count equals zero it will be removed from
&gt; + * disk.  The retain count is not persistent across launches. If the
&gt; + * WebKit client wishes to retain an icon it should retain the icon
&gt; + * once for every launch.  This is best done at initialization time
&gt; + * before the database begins removing icons.  To make sure that the
&gt; + * database does not remove unretained icons prematurely, call
&gt; + * webkit_icon_database_delay_database_cleanup() until all desired
&gt; + * icons are retained.  Once all are retained, call
&gt; + * webkit_icon_database_allow_database_cleanup().

Some of these sentences have two spaces after them and some one. Please use one everywhere.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:192
&gt; +            (GSignalFlags)G_SIGNAL_RUN_LAST,

Should use a static_cast here.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:196
&gt; +            0,
&gt; +            NULL,
&gt; +            NULL,
&gt; +            g_cclosure_marshal_VOID__STRING,

All NULLs should be zero unless that produces a warning.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:218
&gt;              (GSignalFlags)G_SIGNAL_RUN_LAST,

static_cast

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:236
&gt; +     * After receiving this signal
&gt; +     * webkit_icon_database_get_icon_pixbuf() will successfully return
&gt; +     * the icon data associatted with the provided page URI.

Maybe even this one out a little bit.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:242
&gt; +            (GSignalFlags)G_SIGNAL_RUN_LAST,

static_cast

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:259
&gt; +            (GSignalFlags)G_SIGNAL_RUN_LAST,

static_cast

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:275
&gt; +    // Disabled by default

Might want to say here why it&apos;s disabled by default.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:301
&gt; +        // Do not use set_path(), otherwise we could end up calling
&gt; +        // startupIconDatabase twice.

You can make this one line.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:436
&gt; + * be cached then it should listen to icon-changed signal in order to
&gt; + * know when the icon data is actually available. Otherwise if the
&gt; + * icon need to be retrieved from an external resource the client
&gt; + * should connect to icon-changed signal.

Shouldn&apos;t a developer listen for the icon-data-imported-signal? I&apos;m not sure I fully understand the last sentence. :/

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:499
&gt; + * want to keep and once all are retained call allowDatabaseCleanup to

allowDatabaseCleanup -&gt; webkit_icon_database_allow_cleanup

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:543
&gt; +                                              const gchar*        page_uri)

Please use WebKit coding conventions here. So this declaration should be:
void void webkit_icon_database_retain_icon_for_uri(WebKitIconDatabase* database, const gchar* pageURI)
{

}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398021</commentid>
    <comment_count>23</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2011-05-04 10:09:54 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 92245 [details])
&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:436
&gt; &gt; + * be cached then it should listen to icon-changed signal in order to
&gt; &gt; + * know when the icon data is actually available. Otherwise if the
&gt; &gt; + * icon need to be retrieved from an external resource the client
&gt; &gt; + * should connect to icon-changed signal.
&gt; 
&gt; Shouldn&apos;t a developer listen for the icon-data-imported-signal? I&apos;m not sure I fully understand the last sentence. :/

You&apos;re definitely right Martin, it is just that I forgot to change that paragraph in the last version of my patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398022</commentid>
    <comment_count>24</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2011-05-04 10:10:57 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 92245 [details])
&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:436
&gt; &gt; + * be cached then it should listen to icon-changed signal in order to
&gt; &gt; + * know when the icon data is actually available. Otherwise if the
&gt; &gt; + * icon need to be retrieved from an external resource the client
&gt; &gt; + * should connect to icon-changed signal.
&gt; 
&gt; Shouldn&apos;t a developer listen for the icon-data-imported-signal? I&apos;m not sure I fully understand the last sentence. :/

You&apos;re definitely right Martin, it is just that I forgot to change that paragraph in the last version of my patch.

BTW I&apos;m not sure about what I should use for the &quot;Since:&quot; section of the documentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398057</commentid>
    <comment_count>25</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-05-04 10:44:28 -0700</bug_when>
    <thetext>(In reply to comment #24)

&gt; You&apos;re definitely right Martin, it is just that I forgot to change that paragraph in the last version of my patch.
&gt; 
&gt; BTW I&apos;m not sure about what I should use for the &quot;Since:&quot; section of the documentation.

That might depend a bit on how we handle the API break.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398664</commentid>
    <comment_count>26</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2011-05-05 05:06:36 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; 
&gt; &gt; You&apos;re definitely right Martin, it is just that I forgot to change that paragraph in the last version of my patch.
&gt; &gt; 
&gt; &gt; BTW I&apos;m not sure about what I should use for the &quot;Since:&quot; section of the documentation.
&gt; 
&gt; That might depend a bit on how we handle the API break.

Xan?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402814</commentid>
    <comment_count>27</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2011-05-12 06:49:46 -0700</bug_when>
    <thetext>Adding Gustavo just in case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406555</commentid>
    <comment_count>28</comment_count>
      <attachid>92245</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-05-19 11:47:11 -0700</bug_when>
    <thetext>Comment on attachment 92245
Patch

I think this kind of API break is something we should avoid. Unfortunately it doesn&apos;t seem to be trivial to do... if we want to remove that signal and change the signature of the get_icon_pixbuf API for 1.6.x we should deprecate them in 1.4.x and add the new stuff, but without breaking it would be great though.

So, would it be feasible to keep the signal and the methods, and initialize the icon database if it is not yet initialized when the a request is initiated? The new APIs look good to me, anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406950</commentid>
    <comment_count>29</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2011-05-20 01:49:22 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (From update of attachment 92245 [details])
&gt; I think this kind of API break is something we should avoid. Unfortunately it doesn&apos;t seem to be trivial to do... if we want to remove that signal and change the signature of the get_icon_pixbuf API for 1.6.x we should deprecate them in 1.4.x and add the new stuff, but without breaking it would be great though.

The removal of the signal and the change of the get_icon_pixbuf API are not mandatory. We can make everything work without those changes. Just that IMO that signal becomes unnecessary (while adding confusion to users IMHO) and having a size attribute in the get_icon_pixbuf gives us a bit more of flexibility, but that&apos;s all.

&gt; So, would it be feasible to keep the signal and the methods, and initialize the icon database if it is not yet initialized when the a request is initiated? The new APIs look good to me, anyway.

It is not possible because you have to let clients retain their icons. In order to do this you have to have an open database. But by opening the database, you are allowing the cleanup process to start removing icons, so you have to previously delay that cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406974</commentid>
    <comment_count>30</comment_count>
      <attachid>92245</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-05-20 03:12:08 -0700</bug_when>
    <thetext>Comment on attachment 92245
Patch

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

All the Since: should be 1.5.1, I agree we have to deprecate the old signal, we cannot just remove it. Also, as I say, it&apos;s not clear to me that we should not provide some easy way for apps to just say &quot;I want persistent icons, store them here &lt;path&gt;&quot;; the stuff that we require every app to do seems like the default behavior that most of them will want to enable anyway.

&gt; Source/WebKit/gtk/WebCoreSupport/IconDatabaseClientGtk.cpp:23
&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

We use LGPL2+ for the stuff we write unless we have a good reason not to, AFAIK.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:212
&gt; +     * this signal.

Why would I ever want to know about only the URI? Can&apos;t the data signal just carry the URI too?

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:227
&gt; +     * WebKitIconDatabase::icon-uri-imported:

Should be icon-data-imported

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:492
&gt; + * webkit_icon_database_database_cleanup:

Missing &apos;delay&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406975</commentid>
    <comment_count>31</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-05-20 03:13:14 -0700</bug_when>
    <thetext>Er, ignore the &quot;As I said&quot; bit in the previous comment. That was me talking with Sergio on jabber.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406977</commentid>
    <comment_count>32</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-05-20 03:19:39 -0700</bug_when>
    <thetext>To expand a bit:

- A common behavior I see would be something along the lines of. I want favicons stored, use this directory as storage point. You can dispose of them after X days if they are unused, I don&apos;t care too much about anything else. I think this likely covers 99% of the apps.

- If someone else wants to do something more complicated I guess they should be able to override things, and then probably providing detailed APIs like this patch does makes sense. Epiphany might be one of those cases, since we might need custom storage of favicons for performace reasons at some point.

I guess my point is: I think what this patch provides seems like a barebones/detailed kind of API, which is OK, but I wonder if it makes sense to request every app to develop their own thing when we could cover most use cases with some code on the webkit side. Those are my 2 cents anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407050</commentid>
    <comment_count>33</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-05-20 06:38:03 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; To expand a bit:
&gt; 
&gt; - A common behavior I see would be something along the lines of. I want favicons stored, use this directory as storage point. You can dispose of them after X days if they are unused, I don&apos;t care too much about anything else. I think this likely covers 99% of the apps.
&gt; 
&gt; - If someone else wants to do something more complicated I guess they should be able to override things, and then probably providing detailed APIs like this patch does makes sense. Epiphany might be one of those cases, since we might need custom storage of favicons for performace reasons at some point.
&gt; 
&gt; I guess my point is: I think what this patch provides seems like a barebones/detailed kind of API, which is OK, but I wonder if it makes sense to request every app to develop their own thing when we could cover most use cases with some code on the webkit side. Those are my 2 cents anyway.

I agree that it may make sense to provide an easy icon cache API. Perhaps we should wait a release or two after the pushing the &quot;bare bones&quot; icon database API to guage interest. Providing convenience APIs over what the Mac API provides is somewhat of a risk due to situations where we design ourselves between a rock and a hard place -- like the previous icon database API. I think we should approach such convenience layers with a good deal of caution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414745</commentid>
    <comment_count>34</comment_count>
      <attachid>95879</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2011-06-03 02:57:10 -0700</bug_when>
    <thetext>Created attachment 95879
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431911</commentid>
    <comment_count>35</comment_count>
      <attachid>95879</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-07-04 06:32:14 -0700</bug_when>
    <thetext>Comment on attachment 95879
Patch

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

I agree with Xan, 99% of the users (if not 100%) don&apos;t need this API, we could enable a persistent cache transparently by default, since I think it&apos;s the expected behaviour. It&apos;s what webkit2 does, indeed, see http://trac.webkit.org/browser/trunk/Source/WebKit2/UIProcess/WebIconDatabase.cpp#L63.
We could do the same in webkit_icon_database_set_path():


    WebCore::IconDatabase::delayDatabaseCleanup();
    WebCore::iconDatabase().setEnabled(true);
    if (!WebCore::iconDatabase().open(WebCore::filenameToString(path), WebCore::IconDatabase::defaultDatabaseFilename())) {
        WebCore::IconDatabase::allowDatabaseCleanup();
        return;
    }

    database-&gt;priv-&gt;path.set(g_strdup(path));

&gt; Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp:933
&gt; +    // TODO: remove this block. Deprecated signal.
&gt;      const gchar* frameURI = webkit_web_frame_get_uri(m_frame);
&gt;      WebKitIconDatabase* database = webkit_get_icon_database();
&gt;      g_signal_emit_by_name(database, &quot;icon-loaded&quot;, m_frame, frameURI);

I&apos;m not sure I&apos;ve understood how the icon database works, but I don&apos;t think icon-loaded is the same than any of the new signals added by this patch. dispatchDidReceiveIcon() will be called also when the icon is not loaded because it&apos;s already in the database, so probably the name is not correct, since the icon hasn&apos;t been loaded and synchronousIconForPageURL() might return NULL indeed. The difference is that this will be called always during loading, while icon-data-imported won&apos;t be emitted unless you explicitely ask for the icon.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:319
&gt; +    WebCore::iconDatabase().open(webkit_icon_database_get_path(database),
&gt; +                                 IconDatabase::defaultDatabaseFilename());

We should probably check the result of open(), since it might fail and return false.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:406
&gt; + * As the WebKit&apos;s IconDatabase loads the icon data asynchronously and
&gt; + * in a per-demand basis, this method could return NULL even if the
&gt; + * icon is actually cached. If the caller knows that the icon is
&gt; + * cached then it should listen to icon-data-imported signal in order
&gt; + * to know when the icon data is actually available.

That&apos;s not enough I think, you should call synchronousIconForPageURL() at least once to trigger a new readFromDatabase() that will notify the client calling didImportIconDataForPageURL(). This is very confusing, the fact is that this method looks synchronous, but it&apos;s actually asynchronous. I think we could add an async version 

void webkit_icon_database_get_icon_pixbuf_async(WebKitIconDatabase* database, const gchar* pageURI,  GCancellable* cancellable,  GAsyncReadyCallback callback, gpointer userData);
GdkPixbuf* webkit_icon_database_get_icon_pixbuf_finish(WebKitIconDatabase* database,  GAsyncResult* result,  GError **error);

and add a real sync implementation to the existing method.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:415
&gt; -GdkPixbuf* webkit_icon_database_get_icon_pixbuf(WebKitIconDatabase* database, const gchar* pageURI)
&gt; +GdkPixbuf* webkit_icon_database_get_icon_pixbuf(WebKitIconDatabase* database, const gchar* pageURI, guint size)

Instead of breaking the API we could simply add a new version webkit_icon_database_get_icon_pixbuf_with_size() or add a comment to the docs suggesting to use gdk_pixbuf_scale_simple() to resize the icon if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431938</commentid>
    <comment_count>36</comment_count>
      <attachid>95879</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-07-04 08:22:12 -0700</bug_when>
    <thetext>Comment on attachment 95879
Patch

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

&gt; Source/WebKit/gtk/GNUmakefile.am:198
&gt; +	Source/WebKit/gtk/WebCoreSupport/IconDatabaseClientGtk.cpp \
&gt; +	Source/WebKit/gtk/WebCoreSupport/IconDatabaseClientGtk.h \

Thse files are missing in the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432222</commentid>
    <comment_count>37</comment_count>
      <attachid>99704</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-07-05 05:07:17 -0700</bug_when>
    <thetext>Created attachment 99704
Another patch

I&apos;ve noticed that there&apos;s FrameLoaderClient::registerForIconNotification() which is called when the icon is in the database, but its data is not yet available. In that case we can register a notification request in the database, and when notified call FrameLoaderClient::dispatchDidReceiveIcon(). This way we can make sure that webkit_icon_database_get_icon_pixbuf() will always return a valid pixbuf when called in the icon-loaded callback. The patch also adds support for favicons to GtkLauncher, although we should probably add a unit test for this too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435072</commentid>
    <comment_count>38</comment_count>
      <attachid>100340</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-07-11 11:51:30 -0700</bug_when>
    <thetext>Created attachment 100340
Updated patch

This patch adds async api to get a pixbuf, since Xan told me it&apos;s required by ephy history and bookmarks that need an api to get a pixbuf without having to connect to icon-loaded signal. It also fixes some docs comments, and adds unit tests for WebIconDatabase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435074</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-11 11:54:12 -0700</bug_when>
    <thetext>Attachment 100340 did not pass style-queue:

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

WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit/gtk/tests/testicondatabase.c&quot;
Source/WebKit/gtk/webkit/webkiticondatabase.h:76:  Extra space between GCancellable* and cancellable  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:78:  Extra space between gpointer and user_data  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:82:  Extra space between GAsyncResult* and result  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:83:  Extra space between GError** and error  [whitespace/declaration] [3]
Total errors found: 4 in 9 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>435557</commentid>
    <comment_count>40</comment_count>
      <attachid>100461</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-07-12 03:46:40 -0700</bug_when>
    <thetext>Created attachment 100461
Updated patch

Fixed a possible use of m_cancelled_id unitnializaed in webkiticondatabaseprivate.h and renamed it to m_cancelledId to follow coding style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435558</commentid>
    <comment_count>41</comment_count>
      <attachid>100462</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-07-12 03:48:36 -0700</bug_when>
    <thetext>Created attachment 100462
Updated patch

Sorry, I sumbitted the same patch again instead of the updated one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435559</commentid>
    <comment_count>42</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-12 03:49:09 -0700</bug_when>
    <thetext>Attachment 100461 did not pass style-queue:

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

WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit/gtk/tests/testicondatabase.c&quot;
Source/WebKit/gtk/webkit/webkiticondatabase.h:76:  Extra space between GCancellable* and cancellable  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:78:  Extra space between gpointer and user_data  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:82:  Extra space between GAsyncResult* and result  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:83:  Extra space between GError** and error  [whitespace/declaration] [3]
Total errors found: 4 in 9 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>435560</commentid>
    <comment_count>43</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-12 03:50:19 -0700</bug_when>
    <thetext>Attachment 100462 did not pass style-queue:

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

WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit/gtk/tests/testicondatabase.c&quot;
Source/WebKit/gtk/webkit/webkiticondatabase.h:76:  Extra space between GCancellable* and cancellable  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:78:  Extra space between gpointer and user_data  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:82:  Extra space between GAsyncResult* and result  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:83:  Extra space between GError** and error  [whitespace/declaration] [3]
Total errors found: 4 in 9 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>436138</commentid>
    <comment_count>44</comment_count>
      <attachid>100462</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-07-12 18:32:14 -0700</bug_when>
    <thetext>Comment on attachment 100462
Updated patch

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

I like this patch a great deal. I was initially a bit worried about the approach of hiding the behavior of the WebCore icon cache.  After seeing it done in WebKit2, I think it&apos;s a great idea.

&gt; Source/WebKit/gtk/tests/testicondatabase.c:3
&gt; +/*
&gt; + * Copyright (C) 2011 Igalia S.L.
&gt; + *

Please use WebKit style naming for this file.

&gt; Source/WebKit/gtk/tests/testicondatabase.c:29
&gt; +static void delete_db_file_if_exists(const gchar *db_path)

Instead of &quot;db&quot; this should be &quot;database&quot;

&gt; Source/WebKit/gtk/tests/testicondatabase.c:34
&gt; +    gchar* db_filename = g_build_filename(db_path, &quot;WebpageIcons.db&quot;, NULL);

Webpage -&gt; WebPage to match the typical naming convention in WebKit.

&gt; Source/WebKit/gtk/tests/testicondatabase.c:59
&gt; +    GError* error = NULL;

NULL -&gt; 0

&gt; Source/WebKit/gtk/tests/testicondatabase.c:108
&gt; +    g_signal_connect(view, &quot;icon-loaded&quot;, G_CALLBACK (idle_quit_loop_cb), NULL);

Extra space after G_CALLBACK

&gt; Source/WebKit/gtk/tests/testicondatabase.c:118
&gt; +    WebKitIconDatabase* icon_database = webkit_get_icon_database();
&gt; +    webkit_icon_database_get_icon_pixbuf_async(icon_database, &quot;http://www.google.com/&quot;, NULL,
&gt; +                                               icon_database_get_icon_valid_callback, user_data);

No need to cache icon database.

&gt; Source/WebKit/gtk/tests/testicondatabase.c:124
&gt; +    WebKitIconDatabase* icon_database = webkit_get_icon_database();

Ditto.

&gt; Source/WebKit/gtk/tests/testicondatabase.c:132
&gt; +{
&gt; +    WebKitIconDatabase* icon_database = webkit_get_icon_database();

Ditto

&gt; Source/WebKit/gtk/tests/testicondatabase.c:148
&gt; +    /* Load google to make sure favicon is added to database */

This sentence is missing a period.

&gt; Source/WebKit/gtk/tests/testicondatabase.c:166
&gt; +    webkit_icon_database_set_path(icon_database, NULL);

NULL -&gt; 0

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:87
&gt; +    GList* pendingIcons;
&gt; +    gboolean importFinished;

Please use bool here instead of gboolean. It looks like these values are not initialized during instance initialization. I believe you should do that regardless of whether anything currently depends on it. Would prefer pendingIcons to be called pendingIconRequests and for it to be a WTF::Vector.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:277
&gt; +static GdkPixbuf* get_icon_pixbuf(WebKitIconDatabase* database, const String&amp; pageURL)

Should be called something like getIconPixbufSynchronously.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:332
&gt; +            GSimpleAsyncResult* result = request-&gt;asyncResult();
&gt; +            ASSERT(result);
&gt; +            database-&gt;priv-&gt;pendingIcons = g_list_remove_link(database-&gt;priv-&gt;pendingIcons, icons);
&gt; +            g_simple_async_result_set_error(result, G_IO_ERROR, G_IO_ERROR_CANCELLED, &quot;%s&quot;, &quot;Operation was cancelled&quot;);
&gt; +            g_simple_async_result_complete(result);
&gt; +            delete request;
&gt; +            g_list_free(icons);
&gt; +            break;

Can this be a helper in PendingIconRequest?

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:361
&gt; + * This is an asynchronous method. When the operation is finished, callback will
&gt; + * be invoked. You can then call webkit_icon_database_get_icon_pixbuf_finish()
&gt; + * to get the result of the operation.
&gt; + * See also webkit_icon_database_get_icon_pixbuf().

Do you think it&apos;s useful to mention why you want to load icons asynchronously here?

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:379
&gt; +    if (cancellable) {
&gt; +        request-&gt;m_cancellable = cancellable;
&gt; +        request-&gt;m_cancelledId = g_cancellable_connect(cancellable, G_CALLBACK(webkit_icon_database_get_icon_pixbuf_cancelled), request, 0);
&gt; +        g_object_set_data_full(G_OBJECT(result.get()), &quot;cancellable&quot;, g_object_ref(cancellable), static_cast&lt;GDestroyNotify&gt;(g_object_unref));
&gt; +    }
&gt; +

I believe you should just pass the cancellable to the PendingIconRequest constructor and make all this the responsibility of the constructor.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:383
&gt; +    String pageURL = String::fromUTF8(pageURI);
&gt; +    GdkPixbuf* pixbuf = get_icon_pixbuf(database, pageURL);

No need to cache pageURL.


&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:394
&gt; +    delete request;

Wish there was a better way to handle this than manual memory management. It&apos;s probably okay though. :)

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:433
&gt; +        if (request-&gt;pageURI() == pageURI) {

Please use an early continue here instead of nesting.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:441
&gt; +            database-&gt;priv-&gt;pendingIcons = g_list_remove_link(database-&gt;priv-&gt;pendingIcons, icons);
&gt; +            if (request-&gt;frameLoaderClient())
&gt; +                request-&gt;frameLoaderClient()-&gt;dispatchDidReceiveIcon();
&gt; +            else if (request-&gt;asyncResult()) {
&gt; +                GSimpleAsyncResult* result = request-&gt;asyncResult();
&gt; +                g_simple_async_result_set_op_res_gpointer(result, get_icon_pixbuf(database, pageURI), 0);
&gt; +                g_simple_async_result_complete(result);
&gt; +            }

Can we move this to a helper in PendingIconRequest?

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:453
&gt; +    PendingIconRequest* request = new PendingIconRequest(pageURI, client);
&gt; +    database-&gt;priv-&gt;pendingIcons = g_list_prepend(database-&gt;priv-&gt;pendingIcons, request);

No need to cache request.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:493
&gt; +            if (result) {
&gt; +                g_simple_async_result_set_op_res_gpointer(result, 0, 0);
&gt; +                g_simple_async_result_complete(result);
&gt; +            }

I like the idea of pushing this kind of code into methods in PendingIconRequest.

&gt; Source/WebKit/gtk/webkit/webkiticondatabaseprivate.h:30
&gt; +#include &quot;FrameLoaderClient.h&quot;
&gt; +#include &quot;GRefPtr.h&quot;
&gt; +#include &quot;IconDatabaseClient.h&quot;
&gt; +#include &quot;webkitglobals.h&quot;
&gt; +
&gt; +namespace WebCore {
&gt; +class FrameLoaderClient;
&gt; +class IconDatabaseClient;

Why both include headers and forward declare FrameLoaderClient and IconDatabaseClient?

&gt; Source/WebKit/gtk/webkit/webkiticondatabaseprivate.h:38
&gt; +void _webkit_icon_database_register_for_icon_notification(WebKitIconDatabase*, const gchar* pageURI, WebCore::FrameLoaderClient*);
&gt; +void _webkit_icon_database_unregister_for_icon_notification(WebKitIconDatabase*, const gchar* pageURI, WebCore::FrameLoaderClient*);
&gt; +void _webkit_icon_database_process_pending_icons_for_uri(WebKitIconDatabase*, const String&amp; pageURI);
&gt; +void _webkit_icon_database_import_finished(WebKitIconDatabase*);
&gt; +}

We&apos;ve been using WebKit-style naming for private methods.

&gt; Source/WebKit/gtk/webkit/webkiticondatabaseprivate.h:54
&gt; +class IconDatabaseClientGtk : public WebCore::IconDatabaseClient {
&gt; +    public:
&gt; +    // IconDatabaseClient interface
&gt; +    virtual bool performImport() { return true; }
&gt; +    virtual void didRemoveAllIcons() { };
&gt; +    virtual void didImportIconURLForPageURL(const String&amp;) { };
&gt; +    virtual void didImportIconDataForPageURL(const String&amp; URL)
&gt; +    {
&gt; +        _webkit_icon_database_process_pending_icons_for_uri(webkit_get_icon_database(), URL);
&gt; +    }
&gt; +    virtual void didChangeIconForPageURL(const String&amp;) { };
&gt; +    virtual void didFinishURLImport() { _webkit_icon_database_import_finished(webkit_get_icon_database()); }
&gt; +};

This is only used in one file so it shouldn&apos;t be in the header. _webkit_icon_database_process_pending_icons_for_uri and _webkit_icon_database_import_finished can then become static.

&gt; Source/WebKit/gtk/webkit/webkiticondatabaseprivate.h:62
&gt; +struct PendingIconRequest {
&gt; +public:
&gt; +    PendingIconRequest(const char* pageURI, WebCore::FrameLoaderClient* frameLoaderClient)
&gt; +        : m_pageURI(pageURI)
&gt; +        , m_frameLoaderClient(frameLoaderClient)
&gt; +        , m_asyncResult(0)
&gt; +        , m_cancellable(0)

This class is only used in one file, so it should not be in a header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436142</commentid>
    <comment_count>45</comment_count>
      <attachid>100462</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-07-12 18:36:51 -0700</bug_when>
    <thetext>Comment on attachment 100462
Updated patch

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

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:476
&gt; +{
&gt; +    database-&gt;priv-&gt;importFinished = TRUE;
&gt; +

Let&apos;s assert that we are on the UI thread here and in other places where it matters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436285</commentid>
    <comment_count>46</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-07-13 00:01:16 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; (From update of attachment 100462 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=100462&amp;action=review
&gt; 
&gt; I like this patch a great deal. I was initially a bit worried about the approach of hiding the behavior of the WebCore icon cache.  After seeing it done in WebKit2, I think it&apos;s a great idea.
&gt; 
&gt; &gt; Source/WebKit/gtk/tests/testicondatabase.c:3
&gt; &gt; +/*
&gt; &gt; + * Copyright (C) 2011 Igalia S.L.
&gt; &gt; + *
&gt; 
&gt; Please use WebKit style naming for this file.

I thought it wasn&apos;t necessary for unit tests, they are indeed ignored by the check-webkit-style script and other unit tests don&apos;t follow the style either. 

&gt; &gt; Source/WebKit/gtk/tests/testicondatabase.c:34
&gt; &gt; +    gchar* db_filename = g_build_filename(db_path, &quot;WebpageIcons.db&quot;, NULL);
&gt; 
&gt; Webpage -&gt; WebPage to match the typical naming convention in WebKit.

This is not possible, WebpageIcons.db is the name used by WebCore, webkit_icon_database_set_path() sets the directory, not the full path.

&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:87
&gt; &gt; +    GList* pendingIcons;
&gt; &gt; +    gboolean importFinished;
&gt; 
&gt; Please use bool here instead of gboolean. It looks like these values are not initialized during instance initialization.

Yes they are initialized, instances are allocated with g_slice_alloc0() by glib, the private struct is part of the instance.

&gt; I believe you should do that regardless of whether anything currently depends on it. Would prefer pendingIcons to be called pendingIconRequests and for it to be a WTF::Vector.
&gt; 
&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:277
&gt; &gt; +static GdkPixbuf* get_icon_pixbuf(WebKitIconDatabase* database, const String&amp; pageURL)
&gt; 
&gt; Should be called something like getIconPixbufSynchronously.
&gt; 
&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:332
&gt; &gt; +            GSimpleAsyncResult* result = request-&gt;asyncResult();
&gt; &gt; +            ASSERT(result);
&gt; &gt; +            database-&gt;priv-&gt;pendingIcons = g_list_remove_link(database-&gt;priv-&gt;pendingIcons, icons);
&gt; &gt; +            g_simple_async_result_set_error(result, G_IO_ERROR, G_IO_ERROR_CANCELLED, &quot;%s&quot;, &quot;Operation was cancelled&quot;);
&gt; &gt; +            g_simple_async_result_complete(result);
&gt; &gt; +            delete request;
&gt; &gt; +            g_list_free(icons);
&gt; &gt; +            break;
&gt; 
&gt; Can this be a helper in PendingIconRequest?

I&apos;m not sure, we need to remove the request from the list and delete it, the request itself can&apos;t be removed from the list unless we pass the list somehow to the PendingIconRequest.

&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:361
&gt; &gt; + * This is an asynchronous method. When the operation is finished, callback will
&gt; &gt; + * be invoked. You can then call webkit_icon_database_get_icon_pixbuf_finish()
&gt; &gt; + * to get the result of the operation.
&gt; &gt; + * See also webkit_icon_database_get_icon_pixbuf().
&gt; 
&gt; Do you think it&apos;s useful to mention why you want to load icons asynchronously here?

Sure.

&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:379
&gt; &gt; +    if (cancellable) {
&gt; &gt; +        request-&gt;m_cancellable = cancellable;
&gt; &gt; +        request-&gt;m_cancelledId = g_cancellable_connect(cancellable, G_CALLBACK(webkit_icon_database_get_icon_pixbuf_cancelled), request, 0);
&gt; &gt; +        g_object_set_data_full(G_OBJECT(result.get()), &quot;cancellable&quot;, g_object_ref(cancellable), static_cast&lt;GDestroyNotify&gt;(g_object_unref));
&gt; &gt; +    }
&gt; &gt; +
&gt; 
&gt; I believe you should just pass the cancellable to the PendingIconRequest constructor and make all this the responsibility of the constructor.

We need to connect the signal and the callback is part of WebKitIconDatabase, that&apos;s why it&apos;s here. 

&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:383
&gt; &gt; +    String pageURL = String::fromUTF8(pageURI);
&gt; &gt; +    GdkPixbuf* pixbuf = get_icon_pixbuf(database, pageURL);
&gt; 
&gt; No need to cache pageURL.
&gt; 
&gt; 
&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:394
&gt; &gt; +    delete request;
&gt; 
&gt; Wish there was a better way to handle this than manual memory management. It&apos;s probably okay though. :)
&gt; 
&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:433
&gt; &gt; +        if (request-&gt;pageURI() == pageURI) {
&gt; 
&gt; Please use an early continue here instead of nesting.
&gt; 
&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:441
&gt; &gt; +            database-&gt;priv-&gt;pendingIcons = g_list_remove_link(database-&gt;priv-&gt;pendingIcons, icons);
&gt; &gt; +            if (request-&gt;frameLoaderClient())
&gt; &gt; +                request-&gt;frameLoaderClient()-&gt;dispatchDidReceiveIcon();
&gt; &gt; +            else if (request-&gt;asyncResult()) {
&gt; &gt; +                GSimpleAsyncResult* result = request-&gt;asyncResult();
&gt; &gt; +                g_simple_async_result_set_op_res_gpointer(result, get_icon_pixbuf(database, pageURI), 0);
&gt; &gt; +                g_simple_async_result_complete(result);
&gt; &gt; +            }
&gt; 
&gt; Can we move this to a helper in PendingIconRequest?

We would need to check whether it&apos;s an async request here, to pass the pixbuf to the helper, since for a frame loader request we don&apos;t want to create a pixbuf here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436468</commentid>
    <comment_count>47</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-07-13 09:06:40 -0700</bug_when>
    <thetext>(In reply to comment #46)

&gt; &gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:277
&gt; &gt; &gt; +static GdkPixbuf* get_icon_pixbuf(WebKitIconDatabase* database, const String&amp; pageURL)
&gt; &gt; 
&gt; &gt; Should be called something like getIconPixbufSynchronously.
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:332
&gt; &gt; &gt; +            GSimpleAsyncResult* result = request-&gt;asyncResult();
&gt; &gt; &gt; +            ASSERT(result);
&gt; &gt; &gt; +            database-&gt;priv-&gt;pendingIcons = g_list_remove_link(database-&gt;priv-&gt;pendingIcons, icons);
&gt; &gt; &gt; +            g_simple_async_result_set_error(result, G_IO_ERROR, G_IO_ERROR_CANCELLED, &quot;%s&quot;, &quot;Operation was cancelled&quot;);
&gt; &gt; &gt; +            g_simple_async_result_complete(result);
&gt; &gt; &gt; +            delete request;
&gt; &gt; &gt; +            g_list_free(icons);
&gt; &gt; &gt; +            break;
&gt; &gt; 
&gt; &gt; Can this be a helper in PendingIconRequest?
&gt; 
&gt; I&apos;m not sure, we need to remove the request from the list and delete it, the request itself can&apos;t be removed from the list unless we pass the list somehow to the PendingIconRequest.

Perhaps the list of PendingIconRequests should just be a static member on PendingIconRequest.


&gt; &gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:379
&gt; &gt; &gt; +    if (cancellable) {
&gt; &gt; &gt; +        request-&gt;m_cancellable = cancellable;
&gt; &gt; &gt; +        request-&gt;m_cancelledId = g_cancellable_connect(cancellable, G_CALLBACK(webkit_icon_database_get_icon_pixbuf_cancelled), request, 0);
&gt; &gt; &gt; +        g_object_set_data_full(G_OBJECT(result.get()), &quot;cancellable&quot;, g_object_ref(cancellable), static_cast&lt;GDestroyNotify&gt;(g_object_unref));
&gt; &gt; &gt; +    }
&gt; &gt; &gt; +
&gt; &gt; 
&gt; &gt; I believe you should just pass the cancellable to the PendingIconRequest constructor and make all this the responsibility of the constructor.
&gt; 
&gt; We need to connect the signal and the callback is part of WebKitIconDatabase, that&apos;s why it&apos;s here. 

Later, I suggested moving PendingIconRequest entirely into webkiticondatabase.cpp, so this shouldn&apos;t be an issue.


&gt; &gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:441
&gt; &gt; &gt; +            database-&gt;priv-&gt;pendingIcons = g_list_remove_link(database-&gt;priv-&gt;pendingIcons, icons);
&gt; &gt; &gt; +            if (request-&gt;frameLoaderClient())
&gt; &gt; &gt; +                request-&gt;frameLoaderClient()-&gt;dispatchDidReceiveIcon();
&gt; &gt; &gt; +            else if (request-&gt;asyncResult()) {
&gt; &gt; &gt; +                GSimpleAsyncResult* result = request-&gt;asyncResult();
&gt; &gt; &gt; +                g_simple_async_result_set_op_res_gpointer(result, get_icon_pixbuf(database, pageURI), 0);
&gt; &gt; &gt; +                g_simple_async_result_complete(result);
&gt; &gt; &gt; +            }
&gt; &gt; 
&gt; &gt; Can we move this to a helper in PendingIconRequest?
&gt; 
&gt; We would need to check whether it&apos;s an async request here, to pass the pixbuf to the helper, since for a frame loader request we don&apos;t want to create a pixbuf here.

You could just pass the database and an argument to the helper.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436772</commentid>
    <comment_count>48</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-07-13 16:58:46 -0700</bug_when>
    <thetext>Just ported (most of) Ephy to this. Seems to work OK, a couple of things:

- A getter with the icon_uri might be useful in some cases. Since we allow to get the icon uri for a given page uri, it seems to make sense to have it if possible. At least it would have allowed a more direct conversion in Epiphany, but I&apos;m not sure that this is a representative case.

- Scaling. The EphyFaviconCache kept icons scaled to the size we use in ephy. WebKit just gives you the original icon. If you want some scaling (as ephy does), you&apos;ll need to keep a local cache with the scaled icon around. Maybe it makes sense to be able to tell to WebKit that you want icons in a given size and it will do it for you? Otherwise I&apos;ll do it in ephy.

Nothing else. Most of the ephy code really expected sync APIs, but since this is an implementation limitation in WebKit we&apos;ll have to live with it :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436773</commentid>
    <comment_count>49</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-07-13 17:00:23 -0700</bug_when>
    <thetext>Oh, an (unrelated) bug. When loading pages from the page cache ::icon-loaded is not fired, so we don&apos;t get a favicon. Should fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436988</commentid>
    <comment_count>50</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-07-14 00:58:26 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; Just ported (most of) Ephy to this. Seems to work OK, a couple of things:

great! :-)

&gt; - A getter with the icon_uri might be useful in some cases. Since we allow to get the icon uri for a given page uri, it seems to make sense to have it if possible. At least it would have allowed a more direct conversion in Epiphany, but I&apos;m not sure that this is a representative case.

There&apos;s webkit_icon_database_get_icon_uri(), or what do you mean? In that case you will always have an uri when the database have been imported, so you can call it in the get_icon_pixbuf_async() callback to make sure.

&gt; - Scaling. The EphyFaviconCache kept icons scaled to the size we use in ephy. WebKit just gives you the original icon. If you want some scaling (as ephy does), you&apos;ll need to keep a local cache with the scaled icon around. Maybe it makes sense to be able to tell to WebKit that you want icons in a given size and it will do it for you? Otherwise I&apos;ll do it in ephy.

WebCore doesn&apos;t scale the icons, if we add api for that it would be the same but calling gdk_pixbuf_scale_simple() like sergio&apos;s patch did. So, I&apos;m not sure it&apos;s worth adding more API for that, we can simply add a comment in the docs saying that the icon can be scaled using gdk pixbuf api. This way the user can scale it with any of the GdkInterpType, instead of forcing it, or even any other scale method by getting the pixels. 

&gt; 
&gt; Nothing else. Most of the ephy code really expected sync APIs, but since this is an implementation limitation in WebKit we&apos;ll have to live with it :)

If you are getting the icons from a thread and you really want to use a sync API because you are not going to block the UI we can add a sync implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437018</commentid>
    <comment_count>51</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-07-14 03:01:25 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; (From update of attachment 100462 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=100462&amp;action=review
&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:87
&gt; &gt; +    GList* pendingIcons;
&gt; &gt; +    gboolean importFinished;
&gt; 
&gt; Please use bool here instead of gboolean. It looks like these values are not initialized during instance initialization. I believe you should do that regardless of whether anything currently depends on it. Would prefer pendingIcons to be called pendingIconRequests and for it to be a WTF::Vector.

is it possible to remove items from a vector while iterating? that&apos;s why I used a GList. Maybe a Deque instead of a Vector would work, but I still don&apos;t see the problem of using a GList, where we can remove any item without having to move all others (like Deque does)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437027</commentid>
    <comment_count>52</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-07-14 04:39:00 -0700</bug_when>
    <thetext>(In reply to comment #50)
&gt; &gt; - A getter with the icon_uri might be useful in some cases. Since we allow to get the icon uri for a given page uri, it seems to make sense to have it if possible. At least it would have allowed a more direct conversion in Epiphany, but I&apos;m not sure that this is a representative case.
&gt; 
&gt; There&apos;s webkit_icon_database_get_icon_uri(), or what do you mean? In that case you will always have an uri when the database have been imported, so you can call it in the get_icon_pixbuf_async() callback to make sure.

I mean a getter with the icon URI instead of the page URI, in case you only have the former. This was the case sometimes in ephy, and it seems it could be useful in some situations. This depends on the WebCore db allowing to do this though.

&gt; 
&gt; &gt; - Scaling. The EphyFaviconCache kept icons scaled to the size we use in ephy. WebKit just gives you the original icon. If you want some scaling (as ephy does), you&apos;ll need to keep a local cache with the scaled icon around. Maybe it makes sense to be able to tell to WebKit that you want icons in a given size and it will do it for you? Otherwise I&apos;ll do it in ephy.
&gt; 
&gt; WebCore doesn&apos;t scale the icons, if we add api for that it would be the same but calling gdk_pixbuf_scale_simple() like sergio&apos;s patch did. So, I&apos;m not sure it&apos;s worth adding more API for that, we can simply add a comment in the docs saying that the icon can be scaled using gdk pixbuf api. This way the user can scale it with any of the GdkInterpType, instead of forcing it, or even any other scale method by getting the pixels.

The thing is that this will force a secondary cache in some (most?) applications, which seems to somewhat defeat the idea of giving an API that covers 99% of the use cases. I think telling WebKitGTK+ that you want your icons as 16x16 or whatever, and having WebKitGTK+ keep a cache of its own with the scaled versions might make sense. In either case either WebKit or ephy will have to do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437044</commentid>
    <comment_count>53</comment_count>
      <attachid>100799</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-07-14 06:01:21 -0700</bug_when>
    <thetext>Created attachment 100799
New patch according to review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437074</commentid>
    <comment_count>54</comment_count>
      <attachid>100799</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-07-14 07:23:52 -0700</bug_when>
    <thetext>Comment on attachment 100799
New patch according to review

Much better =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437101</commentid>
    <comment_count>55</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-07-14 08:40:22 -0700</bug_when>
    <thetext>(In reply to comment #51)

&gt; is it possible to remove items from a vector while iterating? that&apos;s why I used a GList. Maybe a Deque instead of a Vector would work, but I still don&apos;t see the problem of using a GList, where we can remove any item without having to move all others (like Deque does)

You often need to access the pendingIconRequests for a particular pageURI, so it makes sense to store them it as a HashMap of Vectors on the pageURI. When you need to remove one particular request, you don&apos;t have to worry about iterating after removal. When you have to delete all requests, you can simply remove that Vector from the hash.

One benefit I see right away is that perhaps you can use OwnPtr to store the elements in the Vector. That way you can avoid manual memory management.

Here&apos;s the data structure I mentioned: HashMap&lt;Vector&lt;OwnPtr&lt;PendingIconRquest&gt; &gt; &gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437103</commentid>
    <comment_count>56</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-07-14 08:40:58 -0700</bug_when>
    <thetext>(In reply to comment #55)

&gt; Here&apos;s the data structure I mentioned: HashMap&lt;Vector&lt;OwnPtr&lt;PendingIconRquest&gt; &gt; &gt;

Sorry. This should be  HashMap&lt;const char*, Vector&lt;OwnPtr&lt;PendingIconRquest&gt; &gt; &gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440890</commentid>
    <comment_count>57</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-07-22 03:04:56 -0700</bug_when>
    <thetext>(In reply to comment #56)
&gt; (In reply to comment #55)
&gt; 
&gt; &gt; Here&apos;s the data structure I mentioned: HashMap&lt;Vector&lt;OwnPtr&lt;PendingIconRquest&gt; &gt; &gt;
&gt; 
&gt; Sorry. This should be  HashMap&lt;const char*, Vector&lt;OwnPtr&lt;PendingIconRquest&gt; &gt; &gt;

I&apos;ve tried with that but I can&apos;t make it build, wouldn&apos;t it be better to use this?

HashMap&lt;String, Vector&lt;OwnPtr&lt;PendingIconRequest&gt; &gt;* &gt;

The only problem I see is that we would still have to manually delete the vector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>441809</commentid>
    <comment_count>58</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-07-25 13:04:17 -0700</bug_when>
    <thetext>(In reply to comment #57)

&gt; I&apos;ve tried with that but I can&apos;t make it build, wouldn&apos;t it be better to use this?

That&apos;s pretty odd. What build error did you see?

&gt; HashMap&lt;String, Vector&lt;OwnPtr&lt;PendingIconRequest&gt; &gt;* &gt;

&gt; The only problem I see is that we would still have to manually delete the vector.

Hrm. That doesn&apos;t seem like it should be necessary. :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442865</commentid>
    <comment_count>59</comment_count>
      <attachid>102130</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-07-27 05:15:07 -0700</bug_when>
    <thetext>Created attachment 102130
New patch

It uses HashMap&lt;String, Vector&lt;OwnPtr&lt;PendingIconRequest&gt; &gt;* &gt; instead of GList* for the pending icon requests as suggested by Martin. It also completes the operation in an idle when the icon is already available in webkit_icon_database_get_icon_pixbuf_async() to make sure the function is always async, and it doesn&apos;t leak the icon when the operation is cancelled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442866</commentid>
    <comment_count>60</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-27 05:18:54 -0700</bug_when>
    <thetext>Attachment 102130 did not pass style-queue:

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

WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit/gtk/tests/testicondatabase.c&quot;
Source/WebKit/gtk/webkit/webkiticondatabase.h:76:  Extra space between GCancellable* and cancellable  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:78:  Extra space between gpointer and user_data  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:82:  Extra space between GAsyncResult* and result  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:83:  Extra space between GError** and error  [whitespace/declaration] [3]
Total errors found: 4 in 9 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>443870</commentid>
    <comment_count>61</comment_count>
      <attachid>102130</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-07-29 03:33:39 -0700</bug_when>
    <thetext>Comment on attachment 102130
New patch

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

This seems good to me. I have a few suggestions below, but I r+ from me otherwise. We should wait until Xan can test this and approve it before the final r+.

&gt; Source/WebKit/gtk/tests/testicondatabase.c:21
&gt; +

No newline needed here.

&gt; Source/WebKit/gtk/tests/testicondatabase.c:27
&gt; +GMainLoop *loop;

I think it&apos;s possible just to use the default main loop instead of this interior main loop.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:78
&gt; +    public:

Typically the public/private/protected labels aren&apos;t indented in WebKit code.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:183
&gt; +    HashMap&lt;String, Vector&lt;OwnPtr&lt;PendingIconRequest&gt; &gt;* &gt; pendingIconRequests;

Do you mind adding typedefs for Vector&lt;OwnPtr&lt;PendingIconRequest&gt; &gt;* and  HashMap&lt;String, Vector&lt;OwnPtr&lt;PendingIconRequest&gt; &gt;* &gt; to decrease the verbosity of the code?

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:438
&gt; +    String pageURL = request-&gt;pageURI();

I think you should make pageURL be a String&amp; instead to avoid a String copy. You could also define it above along with &quot;database&quot; and use it in when assigning &quot;icons.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449817</commentid>
    <comment_count>62</comment_count>
      <attachid>102130</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-08-11 09:24:00 -0700</bug_when>
    <thetext>Comment on attachment 102130
New patch

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

A few comments on the test

&gt; Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp:664
&gt; +    const gchar* frameURI = webkit_web_frame_get_uri(m_frame);

Xan doesn&apos;t like gchar, s/gchar/char/

&gt; Source/WebKit/gtk/tests/testicondatabase.c:145
&gt; +    loadURI(&quot;http://www.google.com/&quot;);

That is fine, but ideally we should have a SoupServer providing the page and the favicon to avoid having the test depend on externalities like latency and broken network.

&gt; Source/WebKit/gtk/tests/testicondatabase.c:166
&gt; +    gchar *iconURI = webkit_icon_database_get_icon_uri(webkit_get_icon_database(), &quot;http://www.google.com/&quot;);
&gt; +    g_assert_cmpstr(iconURI, ==, &quot;http://www.google.es/favicon.ico&quot;);

Hrm... this is not going to work. The bots are not necessarily going to be redirected to google.es, nor am I =) So I guess check for the presence of google and having favicon.ico as the suffix, or just use the same approach as testmimehandling.c, and get a SoupServer up!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450324</commentid>
    <comment_count>63</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-08-11 23:56:50 -0700</bug_when>
    <thetext>(In reply to comment #62)
&gt; (From update of attachment 102130 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=102130&amp;action=review
&gt; 
&gt; A few comments on the test
&gt; 
&gt; &gt; Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp:664
&gt; &gt; +    const gchar* frameURI = webkit_web_frame_get_uri(m_frame);
&gt; 
&gt; Xan doesn&apos;t like gchar, s/gchar/char/

Ok.

&gt; &gt; Source/WebKit/gtk/tests/testicondatabase.c:145
&gt; &gt; +    loadURI(&quot;http://www.google.com/&quot;);
&gt; 
&gt; That is fine, but ideally we should have a SoupServer providing the page and the favicon to avoid having the test depend on externalities like latency and broken network.

I&apos;ll try that way. 

&gt; &gt; Source/WebKit/gtk/tests/testicondatabase.c:166
&gt; &gt; +    gchar *iconURI = webkit_icon_database_get_icon_uri(webkit_get_icon_database(), &quot;http://www.google.com/&quot;);
&gt; &gt; +    g_assert_cmpstr(iconURI, ==, &quot;http://www.google.es/favicon.ico&quot;);
&gt; 
&gt; Hrm... this is not going to work. The bots are not necessarily going to be redirected to google.es, nor am I =) So I guess check for the presence of google and having favicon.ico as the suffix, or just use the same approach as testmimehandling.c, and get a SoupServer up!

oops :-P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461073</commentid>
    <comment_count>64</comment_count>
      <attachid>102130</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-02 00:30:06 -0700</bug_when>
    <thetext>Comment on attachment 102130
New patch

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

&gt;&gt; Source/WebKit/gtk/tests/testicondatabase.c:27
&gt;&gt; +GMainLoop *loop;
&gt; 
&gt; I think it&apos;s possible just to use the default main loop instead of this interior main loop.

What&apos;s the default main loop?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461187</commentid>
    <comment_count>65</comment_count>
      <attachid>106123</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-02 06:15:18 -0700</bug_when>
    <thetext>Created attachment 106123
Updated patch

It uses a soup server for the tests and fixes other issues commented by Gustavo and Martin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461188</commentid>
    <comment_count>66</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-02 06:18:31 -0700</bug_when>
    <thetext>Attachment 106123 did not pass style-queue:

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

WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit/gtk/tests/testicondatabase.c&quot;
Source/WebKit/gtk/webkit/webkiticondatabase.h:76:  Extra space between GCancellable* and cancellable  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:78:  Extra space between gpointer and user_data  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:82:  Extra space between GAsyncResult* and result  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:83:  Extra space between GError** and error  [whitespace/declaration] [3]
Total errors found: 4 in 9 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>462580</commentid>
    <comment_count>67</comment_count>
      <attachid>102130</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-06 09:14:34 -0700</bug_when>
    <thetext>Comment on attachment 102130
New patch

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

&gt;&gt;&gt; Source/WebKit/gtk/tests/testicondatabase.c:27
&gt;&gt;&gt; +GMainLoop *loop;
&gt;&gt; 
&gt;&gt; I think it&apos;s possible just to use the default main loop instead of this interior main loop.
&gt; 
&gt; What&apos;s the default main loop?

There should already be a main loop running. For instance, in testatk.c it manually spins the default GMainContext. I&apos;m not sure if this approach is feasible here. What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463209</commentid>
    <comment_count>68</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-07 00:39:19 -0700</bug_when>
    <thetext>(In reply to comment #67)
&gt; (From update of attachment 102130 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=102130&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit/gtk/tests/testicondatabase.c:27
&gt; &gt;&gt;&gt; +GMainLoop *loop;
&gt; &gt;&gt; 
&gt; &gt;&gt; I think it&apos;s possible just to use the default main loop instead of this interior main loop.
&gt; &gt; 
&gt; &gt; What&apos;s the default main loop?
&gt; 
&gt; There should already be a main loop running. For instance, in testatk.c it manually spins the default GMainContext. I&apos;m not sure if this approach is feasible here. What do you think?

No, there isn&apos;t any main loop running, that&apos;s why testak needs to manually iterate the default GMainContext. I don&apos;t know why testatk needs this, but I think it&apos;s easier to use a GMainLoop like most of the other tests do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484951</commentid>
    <comment_count>69</comment_count>
      <attachid>106123</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-16 23:34:45 -0700</bug_when>
    <thetext>Comment on attachment 106123
Updated patch

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

Sorry for the long wait for the review. r-, because of some nits and modifying a hash while iterating through it. If you fix all this little stuff though, it&apos;s r+. We just need another review to approve the API.

&gt; Source/WebKit/gtk/ChangeLog:7
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +

Please put a short overview of your change here.

&gt; Source/WebKit/gtk/ChangeLog:47
&gt; +        (server_callback):
&gt; +        (deleteDatabaseFileIfExists):
&gt; +        (testWebkitIconDatabaseSetPath):
&gt; +        (iconDatabaseGetIconValidCallback):
&gt; +        (iconDatabaseGetIconInvalidCallback):
&gt; +        (iconDatabaseGetIconCancelledCallback):
&gt; +        (idleQuitLoopCallback):
&gt; +        (loadURI):
&gt; +        (iconDatabaseGetIconValidIdle):
&gt; +        (iconDatabaseGetIconInvalidIdle):
&gt; +        (iconDatabaseGetIconCancelledIdle):
&gt; +        (testWebkitIconDatabaseGetIconAsync):
&gt; +        (testWebkitIconDatabaseGetIconURI):
&gt; +        (testWebkitIconDatabaseRemoveAll):
&gt; +        (testWebkitIconDatabaseCloseDatabase):
&gt; +        (main):
&gt; +        * webkit/webkiticondatabase.cpp:
&gt; +        (IconDatabaseClientGtk::performImport):
&gt; +        (IconDatabaseClientGtk::didRemoveAllIcons):
&gt; +        (IconDatabaseClientGtk::didImportIconURLForPageURL):
&gt; +        (IconDatabaseClientGtk::didImportIconDataForPageURL):
&gt; +        (IconDatabaseClientGtk::didChangeIconForPageURL):
&gt; +        (IconDatabaseClientGtk::didFinishURLImport):
&gt; +        (PendingIconRequest::PendingIconRequest):
&gt; +        (PendingIconRequest::~PendingIconRequest):
&gt; +        (PendingIconRequest::pageURI):
&gt; +        (PendingIconRequest::frameLoaderClient):
&gt; +        (PendingIconRequest::asyncResult):
&gt; +        (PendingIconRequest::asyncResultComplete):
&gt; +        (PendingIconRequest::asyncResultCompleteInIdle):
&gt; +        (PendingIconRequest::asyncResultCancel):
&gt; +        (PendingIconRequest::frameLoaderDispatchDidReceiveIcon):
&gt; +        (webkitIconDatabaseIconLoaded): Retain the icon when loaded to

Sicne the method descriptions are all empty, they are just noise. In these situations I think it&apos;s fine to just leave the filename.

&gt; Source/WebKit/gtk/tests/testicondatabase.c:33
&gt; +static void
&gt; +server_callback(SoupServer *server, SoupMessage *msg,
&gt; +                const char *path, GHashTable *query,
&gt; +                SoupClientContext *context, gpointer data)

Extra newlines here. No need to split the signature across multiple lines.

&gt; Source/WebKit/gtk/tests/testicondatabase.c:89
&gt; +    GError *error = 0;

0 should be NULL here.

&gt; Source/WebKit/gtk/tests/testicondatabase.c:142
&gt; +    webkit_web_view_load_uri(view, uri);
&gt; +    //    g_signal_connect(view, &quot;icon-loaded&quot;, G_CALLBACK(idleQuitLoopCallback), NULL);
&gt; +    g_signal_connect(view, &quot;notify::load-status&quot;, G_CALLBACK(idleQuitLoopCallback), NULL);

If this line isn&apos;t needed, just remove it instead of commenting it out.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:71
&gt; +struct PendingIconRequest;

You should say:

class PendingIconRequest.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:146
&gt; +        g_simple_async_result_set_error(m_asyncResult.get(), G_IO_ERROR, G_IO_ERROR_CANCELLED, &quot;%s&quot;, &quot;Operation was cancelled&quot;);

The string &quot;Operation was cancelled&quot; is missing the l10n underscore.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:181
&gt; +typedef HashMap&lt;String, PendingIconRequestVector* &gt; PendingIconRequestMap;

Extra space after PendingIconRequestVector*

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:392
&gt; +    // We must pass something greater than 0, 0 to get a pixbuf.

0, 0 -&gt; 0x0 or 0 by 0

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:440
&gt; +    database-&gt;priv-&gt;pendingIconRequests.remove(pageURL);
&gt; +    delete requests;

I think I&apos;d rather this take an iterator or just a pageURI, but not both the value and the index. Maybe just a pageURI. You could do:

iterator toDelete = pendingIconRequests.remove(pageURL);
delete toDelete-&gt;second;
database-&gt;priv-&gt;pendingIconRequests.remove(toDelete);

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:467
&gt; +static void webkitIconDatabaseGetIconPixbufCancelled(GCancellable* cancellable, PendingIconRequest* request)
&gt; +{
&gt; +    // Handle cancelled in a in idle since it might be called from any thread.
&gt; +    g_idle_add(getIconPixbufCancelledIdle, request);
&gt; +}

I think it would be better to use the wtf::callOnMainThread here.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:483
&gt; + * This is an asynchronous method. When the operation is finished, callback will
&gt; + * be invoked. You can then call webkit_icon_database_get_icon_pixbuf_finish()
&gt; + * to get the result of the operation.
&gt; + * See also webkit_icon_database_get_icon_pixbuf().

I&apos;m not sure I like the use of GIO style APIs here. At this point though, we should get this patch in and then reconsider the APIs for WebKit2.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:485
&gt; + * Since: 1.5.3

This will need to change now. :(

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:495
&gt; +    String pageURL(String::fromUTF8(pageURI));

I think the preferred style is:  String pageURL = String::fromUTF8(pageURI);

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:505
&gt; +        // Import is ongoing, there might be an icon.

I think a comment like: &quot; Import is ongoing, the icon we want might load later.&quot; would be less confusing.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:527
&gt; + * Since: 1.5.3

Should change again.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:539
&gt; +        g_set_error_literal(error, G_IO_ERROR, G_IO_ERROR_CANCELLED, &quot;Operation was cancelled&quot;);

I think &quot;Operation was  cancelled&quot; needs to be prefixed by an underscore for l10n.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:544
&gt; +    return icon ? static_cast&lt;GdkPixbuf*&gt;(g_object_ref(icon)) : 0;

I think it&apos;s clearer here to use an early return:
if (!icon)
    return 0;
return g_object_ref(icon);

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:547
&gt; +void webkitIconDatabaseRegisterForIconNotification(WebKitIconDatabase* database, const gchar* pageURI, WebCore::FrameLoaderClient* client)

I&apos;d rather this took a const String&amp; pageURI instead of converting it here and in webkitIconDatabaseUnregisterForIconNotification.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:557
&gt; +void webkitIconDatabaseUnregisterForIconNotification(WebKitIconDatabase* database, const gchar* pageURI, WebCore::FrameLoaderClient* client)
&gt; +{
&gt; +    String pageURL(String::fromUTF8(pageURI));

Ditto.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:601
&gt; +    // requests we only need to delete the request so that icon-loaded won&apos;t be emitted.
&gt; +    PendingIconRequestMap::const_iterator end = database-&gt;priv-&gt;pendingIconRequests.end();
&gt; +    for (PendingIconRequestMap::const_iterator iter = database-&gt;priv-&gt;pendingIconRequests.begin(); iter != end; ++iter) {
&gt; +        String iconURL = WebCore::iconDatabase().synchronousIconURLForPageURL(iter-&gt;first);
&gt; +        if (!iconURL.isEmpty())
&gt; +            continue;
&gt; +
&gt; +        PendingIconRequestVector* icons = iter-&gt;second;
&gt; +        for (size_t i = 0; i &lt; icons-&gt;size(); ++i) {
&gt; +            PendingIconRequest* request = icons-&gt;at(i).get();
&gt; +            if (request-&gt;asyncResult())
&gt; +                request-&gt;asyncResultComplete(0);
&gt; +        }
&gt; +
&gt; +        webkitIconDatabaseDeleteRequests(database, icons, iter-&gt;first);

I&apos;m not sure it&apos;s safe to modify the HashSet while you are using an iterator to it. Better to keep a list of defunct pageURIs and then delete them afterward.

&gt; Source/WebKit/gtk/webkit/webkiticondatabaseprivate.h:30
&gt; +extern &quot;C&quot; {
&gt; +void webkitIconDatabaseRegisterForIconNotification(WebKitIconDatabase*, const gchar* pageURI, WebCore::FrameLoaderClient*);
&gt; +void webkitIconDatabaseUnregisterForIconNotification(WebKitIconDatabase*, const gchar* pageURI, WebCore::FrameLoaderClient*);
&gt; +}

Please omit the extern &quot;C&quot;. It&apos;s fine that these are mangled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545485</commentid>
    <comment_count>70</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-30 15:25:16 -0800</bug_when>
    <thetext>This bug has gone epic.  I recommend creating a new bug with an updated patch if you wish to continue work on this.  It requires too much mental effort to figure out what&apos;s going on here, drastically reducing the chance of a successful review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545514</commentid>
    <comment_count>71</comment_count>
      <attachid>95879</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-30 15:50:34 -0800</bug_when>
    <thetext>Comment on attachment 95879
Patch

Cleared review? from attachment 95879 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558272</commentid>
    <comment_count>72</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-16 09:35:52 -0800</bug_when>
    <thetext>reopening as I resumed the work on this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558457</commentid>
    <comment_count>73</comment_count>
      <attachid>127433</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-16 13:01:25 -0800</bug_when>
    <thetext>Created attachment 127433
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558458</commentid>
    <comment_count>74</comment_count>
      <attachid>127433</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-16 13:07:21 -0800</bug_when>
    <thetext>Comment on attachment 127433
Patch

Attachment 127433 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11541154</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559009</commentid>
    <comment_count>75</comment_count>
      <attachid>127545</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-17 00:46:25 -0800</bug_when>
    <thetext>Created attachment 127545
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559012</commentid>
    <comment_count>76</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-17 00:49:58 -0800</bug_when>
    <thetext>(In reply to comment #75)
&gt; Created an attachment (id=127545) [details]
&gt; Patch

The previous patch had an error in the gtk-doc and the two new API functions were missing from webkitgtk-sections.txt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559025</commentid>
    <comment_count>77</comment_count>
      <attachid>127545</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-17 01:20:18 -0800</bug_when>
    <thetext>Comment on attachment 127545
Patch

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

This looks quite good in general but I think a more experienced reviewer should look at it, this is not exactly my field of expertise. You might also want to use 2012 in the copyright headers :)

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:465
&gt; +    // Handle cancelled in a in idle since it might be called from any thread.

you mean &quot;in an idle&quot; I guess?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571917</commentid>
    <comment_count>78</comment_count>
      <attachid>130396</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-03-06 09:45:05 -0800</bug_when>
    <thetext>Created attachment 130396
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571919</commentid>
    <comment_count>79</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-03-06 09:47:38 -0800</bug_when>
    <thetext>(In reply to comment #78)
&gt; Created an attachment (id=130396) [details]
&gt; Patch

I&apos;ve just realized that I forgot to change the libtool versions. What was the policy anyway?

BTW this patch does not purge retained icons yet. I&apos;ll try to come up with something now but I uploaded this because I&apos;m not sure that is a blocker (unless we&apos;d like to add some API for that).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571924</commentid>
    <comment_count>80</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-06 09:50:14 -0800</bug_when>
    <thetext>Attachment 130396 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/gtk/ChangeLog&apos;, u&apos;Source/Web...&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit/gtk/tests/testicondatabase.c&quot;
Source/WebKit/gtk/webkit/webkitwebview.h:435:  Extra space between guint and width  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitwebview.h:436:  Extra space between guint and height  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:72:  Extra space between guint and width  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:73:  Extra space between guint and height  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:78:  Extra space between guint and width  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:79:  Extra space between guint and height  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:80:  Extra space between GCancellable* and cancellable  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:82:  Extra space between gpointer and user_data  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:86:  Extra space between GAsyncResult* and result  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:87:  Extra space between GError** and error  [whitespace/declaration] [3]
Total errors found: 10 in 13 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>571973</commentid>
    <comment_count>81</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-06 10:43:37 -0800</bug_when>
    <thetext>I think it&apos;s important that we don&apos;t let the database grow indefinitely. We also need to figure out how Epiphany can reasonably use such an API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572078</commentid>
    <comment_count>82</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-03-06 12:52:45 -0800</bug_when>
    <thetext>(In reply to comment #81)
&gt; I think it&apos;s important that we don&apos;t let the database grow indefinitely. We also need to figure out how Epiphany can reasonably use such an API.

No problem, I&apos;m working on that. It&apos;d be quite easy in fact. Do you think we should any any API for that or just set a fixed amount of time?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572117</commentid>
    <comment_count>83</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-06 13:42:33 -0800</bug_when>
    <thetext>(In reply to comment #82)

&gt; No problem, I&apos;m working on that. It&apos;d be quite easy in fact. Do you think we should any any API for that or just set a fixed amount of time?

I think it makes sense for the application to have control over when icons are released.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572639</commentid>
    <comment_count>84</comment_count>
      <attachid>130396</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-07 00:29:18 -0800</bug_when>
    <thetext>Comment on attachment 130396
Patch

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

Not a thorough, review, but here are a couple things I noticed...

&gt; Source/WebKit/gtk/tests/testicondatabase.c:2
&gt; + * Copyright (C) 2011 Igalia S.L.

All these copyrights should be 2012 now.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:268
&gt; +      * main frame of a page.See #WebKitWebView::icon-loaded if you

Missing a space after the period.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572728</commentid>
    <comment_count>85</comment_count>
      <attachid>130396</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2012-03-07 02:44:34 -0800</bug_when>
    <thetext>Comment on attachment 130396
Patch

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

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:413
&gt; +        pixbuf = gdk_pixbuf_scale_simple(pixbuf.get(), width, height, GDK_INTERP_BILINEAR);

OK, so the icon is cached at the original size, and we rescale it every single time. This does not seem to be a great solution. Probably the UI is going to show it again and again at a given size, and resizing it every single time makes no sense. So we should either cache it scaled, or make it very explicit that the client should cache it on their side.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:433
&gt; + * maximum available size for the icon.

This is missing from the _async method.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:510
&gt; + * See also webkit_icon_database_get_icon_pixbuf_sync().

Should mention at what size the icon is cached, if at all.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:521
&gt; +                                                                             reinterpret_cast&lt;gpointer&gt;(webkit_icon_database_get_icon_pixbuf)));

I&apos;m just reading the documentation here, but it seems you should be passing an async. function here, not the sync one. If it&apos;s only used as a &apos;tag&apos; I guess it&apos;s not important, but shrug.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:540
&gt; +        // Import is ongoing, there icon we want might load later.

s/there/the/ ? Not totally sure what you want to say here though, tbh.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:549
&gt; +        webkitIconDatabaseDeleteRequests(database, icons, pageURL);

Hrm, OK, I guess I&apos;m not getting how this works, but why do you remove the request immediately after asking it to be completed in an idle? Because it&apos;s no longer pending?

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:567
&gt; +    g_warn_if_fail(g_simple_async_result_get_source_tag(simpleResult) == webkit_icon_database_get_icon_pixbuf);

Shouldn&apos;t this be an error (g_return_if_fail)? And the same comment about the sync vs. async I guess.

&gt; Source/WebKit/gtk/webkit/webkiticondatabaseprivate.h:25
&gt; +}

This is not needed?

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:5048
&gt; + * and call this method in the callback.

Hrm, so isn&apos;t this a bit duplicated with the sync. method in the icon database? Is it just meant to be a helper method? I&apos;m not sure it&apos;s worth breaking the API for this. Also, here or elsewhere it should be explained what happens with the icon of the size you have requested: does webkit cache it at the original size, the new one, both?

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:5051
&gt;   * be resized before it is displayed.

It seems this comment is obsolete now.

&gt; Tools/GtkLauncher/main.c:219
&gt; +    g_free(iconDatabasePath);

If everybody is going to have to do this perhaps we should have a way of enabling/disabling the db different than setting the path, and a default path that is exactly this. If you then want to set another path, you can do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572867</commentid>
    <comment_count>86</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-03-07 07:12:39 -0800</bug_when>
    <thetext>(In reply to comment #85)
&gt; (From update of attachment 130396 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=130396&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:413
&gt; &gt; +        pixbuf = gdk_pixbuf_scale_simple(pixbuf.get(), width, height, GDK_INTERP_BILINEAR);
&gt; 
&gt; OK, so the icon is cached at the original size, and we rescale it every single time. This does not seem to be a great solution. Probably the UI is going to show it again and again at a given size, and resizing it every single time makes no sense. So we should either cache it scaled, or make it very explicit that the client should cache it on their side.

I&apos;m fine with any solution.

&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:433
&gt; &gt; + * maximum available size for the icon.
&gt; 
&gt; This is missing from the _async method.

Indeed.

&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:510
&gt; &gt; + * See also webkit_icon_database_get_icon_pixbuf_sync().
&gt; 
&gt; Should mention at what size the icon is cached, if at all.

OK.
 
&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:521
&gt; &gt; +                                                                             reinterpret_cast&lt;gpointer&gt;(webkit_icon_database_get_icon_pixbuf)));
&gt; 
&gt; I&apos;m just reading the documentation here, but it seems you should be passing an async. function here, not the sync one. If it&apos;s only used as a &apos;tag&apos; I guess it&apos;s not important, but shrug.

True.

&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:540
&gt; &gt; +        // Import is ongoing, there icon we want might load later.
&gt; 
&gt; s/there/the/ ? Not totally sure what you want to say here though, tbh.

It&apos;s &quot;the&quot;.

&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:549
&gt; &gt; +        webkitIconDatabaseDeleteRequests(database, icons, pageURL);
&gt; 
&gt; Hrm, OK, I guess I&apos;m not getting how this works, but why do you remove the request immediately after asking it to be completed in an idle? Because it&apos;s no longer pending?

Exactly, is no longer pending because it&apos;s already resolved. Just waiting for the idle to be fired.

&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:567
&gt; &gt; +    g_warn_if_fail(g_simple_async_result_get_source_tag(simpleResult) == webkit_icon_database_get_icon_pixbuf);
&gt; 
&gt; Shouldn&apos;t this be an error (g_return_if_fail)? And the same comment about the sync vs. async I guess.

It should.

&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabaseprivate.h:25
&gt; &gt; +}
&gt; 
&gt; This is not needed?

Oops I left it there by mistake. There were some other calls before.

&gt; &gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:5048
&gt; &gt; + * and call this method in the callback.
&gt; 
&gt; Hrm, so isn&apos;t this a bit duplicated with the sync. method in the icon database? Is it just meant to be a helper method? I&apos;m not sure it&apos;s worth breaking the API for this. Also, here or elsewhere it should be explained what happens with the icon of the size you have requested: does webkit cache it at the original size, the new one, both?

Well that method was there before. The difference with the one in the icon database is that the webview returns the url of the icon instead of the page&apos;s. Regarding the size WK only caches the icon at its original size.

&gt; &gt; Tools/GtkLauncher/main.c:219
&gt; &gt; +    g_free(iconDatabasePath);
&gt; 
&gt; If everybody is going to have to do this perhaps we should have a way of enabling/disabling the db different than setting the path, and a default path that is exactly this. If you then want to set another path, you can do that.

I kind of disagree with that. Take into account that apps that use WK as a mere document viewer wouldn&apos;t be most likely interested in favicons.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572980</commentid>
    <comment_count>87</comment_count>
      <attachid>130639</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-03-07 09:53:24 -0800</bug_when>
    <thetext>Created attachment 130639
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572982</commentid>
    <comment_count>88</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-07 09:56:27 -0800</bug_when>
    <thetext>Attachment 130639 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/gtk/ChangeLog&apos;, u&apos;Source/Web...&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit/gtk/tests/testicondatabase.c&quot;
Source/WebKit/gtk/webkit/webkitwebview.h:435:  Extra space between guint and width  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitwebview.h:436:  Extra space between guint and height  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:73:  Extra space between guint and width  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:74:  Extra space between guint and height  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:79:  Extra space between guint and width  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:80:  Extra space between guint and height  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:81:  Extra space between GCancellable* and cancellable  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:83:  Extra space between gpointer and user_data  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:87:  Extra space between GAsyncResult* and result  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkiticondatabase.h:88:  Extra space between GError** and error  [whitespace/declaration] [3]
Total errors found: 10 in 14 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>573186</commentid>
    <comment_count>89</comment_count>
      <attachid>130683</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-03-07 13:36:18 -0800</bug_when>
    <thetext>Created attachment 130683
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573191</commentid>
    <comment_count>90</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-07 13:39:35 -0800</bug_when>
    <thetext>Attachment 130683 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/gtk/ChangeLog&apos;, u&apos;Source/Web...&quot; exit_code: 1
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:73:  Extra space between guint and width  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:74:  Extra space between guint and height  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:79:  Extra space between guint and width  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:80:  Extra space between guint and height  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:81:  Extra space between GCancellable* and cancellable  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:82:  Extra space between GAsyncReadyCallback and callback  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:83:  Extra space between gpointer and user_data  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:87:  Extra space between GAsyncResult* and result  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:88:  Extra space between GError** and error  [whitespace/declaration] [3]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit/gtk/tests/testfavicondatabase.c&quot;
Source/WebKit/gtk/webkit/webkitwebview.h:438:  Extra space between guint and width  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitwebview.h:439:  Extra space between guint and height  [whitespace/declaration] [3]
Total errors found: 11 in 18 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>573255</commentid>
    <comment_count>91</comment_count>
      <attachid>130683</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-07 14:40:54 -0800</bug_when>
    <thetext>Comment on attachment 130683
Patch

Attachment 130683 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11849389</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574744</commentid>
    <comment_count>92</comment_count>
      <attachid>130683</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2012-03-09 02:06:37 -0800</bug_when>
    <thetext>Comment on attachment 130683
Patch

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

Looks good to me. I think maybe you could split the expiration stuff in a second patch, since it&apos;s an improvement over the first iteration and would make it easier to review it. I&apos;m marking r- to not be the  &quot;scumbag reviewer&quot; that makes comments and does not mark the patch.

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:46
&gt; + * SECTION:webkitwebdatabase

webkitfavicondatabase

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:47
&gt; + * @short_description: A WebKit web application database

Hrm, a favicon database right? Copy&amp;pasta error I guess.

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:51
&gt; + * the same icon database.

I don&apos;t think it makes much sense to use browser UI terms to explain what a favicon is here. Just explain in technically, or not at all.

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:54
&gt; + * loaded, you will need to set an icon database path using

s/loaded/stored/ ?

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:60
&gt; + * images found into the memory cache if possible.

And I&apos;d put the paragraph about enabling storage after this.

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:112
&gt; +    }

Hrm, I suppose you need to define this because C++ complains otherwise?

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:136
&gt; +            return;

What does it mean exactly to &apos;return;&apos; from a ctor? Shouldn&apos;t you ASSERT or something?

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:139
&gt; +        g_object_set_data_full(G_OBJECT(result), &quot;cancellable&quot;, g_object_ref(cancellable), static_cast&lt;GDestroyNotify&gt;(g_object_unref));

Hrm, why do you need to do this if the class has both objects as members?

Added later: OK, you use it in _finish. Where is it unrefed exactly?

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:221
&gt; +}

This is doing nothing ,no need to define it.

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:283
&gt; +      * only need the favicon of a particular #WebKitWebView.

This is confusing. Is it only for the main frame or any frame? @frame_uri: says &quot;the frame&quot; and later you say main frame.

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:307
&gt; +    new (database-&gt;priv) WebKitFaviconDatabasePrivate();

Hrm, isn&apos;t this smashing the stuff you get from database-&gt;priv ? If you are using the new() thing do you need the GObject system?

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:314
&gt; +    if (database-&gt;priv-&gt;expirationTimesDatabase) {

if (!database-&gt;...) and early return?

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:356
&gt; +{

Perhaps check with argc before accessing argv[0], just in case.

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:370
&gt; +    int lastValidTime = (int) currentTime() - ICON_EXPIRATION_TIME;

No space for the casting, right?

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:496
&gt; + * to WebKitFaviconDatabase::icon-loaded and call this in the callback.

s/call this/use this function/?

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:500
&gt; + * different size the icon will be scaled on every single call to this

I&apos;d say better &quot;will be scaled each time you call this function&quot;.

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:618
&gt; +

Can we add a comment here about removing the request we just created? It&apos;s confusing otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574814</commentid>
    <comment_count>93</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-03-09 04:42:41 -0800</bug_when>
    <thetext>(In reply to comment #92)
&gt; (From update of attachment 130683 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=130683&amp;action=review
&gt; 
&gt; Looks good to me. I think maybe you could split the expiration stuff in a second patch, since it&apos;s an improvement over the first iteration and would make it easier to review it. I&apos;m marking r- to not be the  &quot;scumbag reviewer&quot; that makes comments and does not mark the patch.

OK.

&gt; &gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:54
&gt; &gt; + * loaded, you will need to set an icon database path using
&gt; 
&gt; s/loaded/stored/ ?

Actually both. Will change that.

&gt; &gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:112
&gt; &gt; +    }
&gt; 
&gt; Hrm, I suppose you need to define this because C++ complains otherwise?

Yes because they&apos;re pure virtual functions in the interface.
 
&gt; &gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:136
&gt; &gt; +            return;
&gt; 
&gt; What does it mean exactly to &apos;return;&apos; from a ctor? Shouldn&apos;t you ASSERT or something?

Absolutely, will add an ASSERT

&gt; &gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:139
&gt; &gt; +        g_object_set_data_full(G_OBJECT(result), &quot;cancellable&quot;, g_object_ref(cancellable), static_cast&lt;GDestroyNotify&gt;(g_object_unref));
&gt; 
&gt; Hrm, why do you need to do this if the class has both objects as members?
&gt; 
&gt; Added later: OK, you use it in _finish. Where is it unrefed exactly?

The destroy notify function will do that once the async result is finalized.

&gt; &gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:283
&gt; &gt; +      * only need the favicon of a particular #WebKitWebView.
&gt; 
&gt; This is confusing. Is it only for the main frame or any frame? @frame_uri: says &quot;the frame&quot; and later you say main frame.

it&apos;s only the main frame. I&apos;ll try to rephrase it.
 
&gt; &gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:307
&gt; &gt; +    new (database-&gt;priv) WebKitFaviconDatabasePrivate();
&gt; 
&gt; Hrm, isn&apos;t this smashing the stuff you get from database-&gt;priv ? If you are using the new() thing do you need the GObject system?

AFAIK the placement new syntax just uses the memory you have previously allocated.

&gt; &gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:356
&gt; &gt; +{
&gt; 
&gt; Perhaps check with argc before accessing argv[0], just in case.

Well the callback won&apos;t be called if there is no matching row, and a select needs at least one row. Anyway I guess we can put an ASSERT there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574831</commentid>
    <comment_count>94</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2012-03-09 05:19:40 -0800</bug_when>
    <thetext>(In reply to comment #93)
&gt; &gt; Hrm, isn&apos;t this smashing the stuff you get from database-&gt;priv ? If you are using the new() thing do you need the GObject system?
&gt; 
&gt; AFAIK the placement new syntax just uses the memory you have previously allocated.

Ah, but it calls the ctor so that you can use C++ magic, I guess. I think I was already confused by this once back in the day!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576307</commentid>
    <comment_count>95</comment_count>
      <attachid>131361</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-03-12 11:23:41 -0700</bug_when>
    <thetext>Created attachment 131361
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576311</commentid>
    <comment_count>96</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-12 11:26:20 -0700</bug_when>
    <thetext>Attachment 131361 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/gtk/ChangeLog&apos;, u&apos;Source/Web...&quot; exit_code: 1
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:73:  Extra space between guint and width  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:74:  Extra space between guint and height  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:79:  Extra space between guint and width  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:80:  Extra space between guint and height  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:81:  Extra space between GCancellable* and cancellable  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:82:  Extra space between GAsyncReadyCallback and callback  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:83:  Extra space between gpointer and user_data  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:87:  Extra space between GAsyncResult* and result  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:88:  Extra space between GError** and error  [whitespace/declaration] [3]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit/gtk/tests/testfavicondatabase.c&quot;
Source/WebKit/gtk/webkit/webkitwebview.h:438:  Extra space between guint and width  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitwebview.h:439:  Extra space between guint and height  [whitespace/declaration] [3]
Total errors found: 11 in 18 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>576462</commentid>
    <comment_count>97</comment_count>
      <attachid>131361</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-12 13:31:50 -0700</bug_when>
    <thetext>Comment on attachment 131361
Patch

Attachment 131361 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11947044</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578541</commentid>
    <comment_count>98</comment_count>
      <attachid>131879</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-03-14 10:34:29 -0700</bug_when>
    <thetext>Created attachment 131879
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578580</commentid>
    <comment_count>99</comment_count>
      <attachid>131879</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2012-03-14 11:20:21 -0700</bug_when>
    <thetext>Comment on attachment 131879
Patch

Attachment 131879 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11951312</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578798</commentid>
    <comment_count>100</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-14 14:45:27 -0700</bug_when>
    <thetext>Attachment 131879 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/gtk/ChangeLog&apos;, u&apos;Source/Web...&quot; exit_code: 1
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:73:  Extra space between guint and width  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:74:  Extra space between guint and height  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:79:  Extra space between guint and width  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:80:  Extra space between guint and height  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:81:  Extra space between GCancellable* and cancellable  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:82:  Extra space between GAsyncReadyCallback and callback  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:83:  Extra space between gpointer and user_data  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:87:  Extra space between GAsyncResult* and result  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitfavicondatabase.h:88:  Extra space between GError** and error  [whitespace/declaration] [3]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit/gtk/tests/testfavicondatabase.c&quot;
Source/WebKit/gtk/webkit/webkitwebview.h:438:  Extra space between guint and width  [whitespace/declaration] [3]
Source/WebKit/gtk/webkit/webkitwebview.h:439:  Extra space between guint and height  [whitespace/declaration] [3]
Total errors found: 11 in 18 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>579271</commentid>
    <comment_count>101</comment_count>
      <attachid>131879</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2012-03-15 04:27:09 -0700</bug_when>
    <thetext>Comment on attachment 131879
Patch

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

I think this patch is basically OK as it is, I just have a few minor nitpicks. So in principle r1/2=me, waiting for Martin or other reviewer to jump in.

&gt; Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp:806
&gt; +    // IconController load icons only for the main frame.

s/load/loads/

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:68
&gt; +    }

You are leaking databaseFilename if the unlink works.

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:269
&gt; +      * only need the favicon of a particular #WebKitWebView.

Isn&apos;t this just the same? What&apos;s the difference between the favicon for the mainframe and the view?

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:273
&gt; +      * of the favicon.

This seems more like the actual difference between the signals.

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:493
&gt; + * @cancellable: A #GCancellable or %NULL.

Also (allow-none), right?

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:586
&gt; +    return static_cast&lt;GdkPixbuf*&gt;(g_object_ref(icon));

I checked briefly the life cycle of this and it seems you could just return the icon as-is here and remove the extra g_object_unref destroy notifies when setting up things?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579534</commentid>
    <comment_count>102</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-03-15 11:13:14 -0700</bug_when>
    <thetext>(In reply to comment #101)
&gt; (From update of attachment 131879 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131879&amp;action=review
&gt; 
&gt; I think this patch is basically OK as it is, I just have a few minor nitpicks. So in principle r1/2=me, waiting for Martin or other reviewer to jump in.

Thx Xan for the review. I fixed locally the issues you mentioned (plus a couple of missing &quot;allow-none&quot;). Let&apos;s see if some other reviewer approves it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579991</commentid>
    <comment_count>103</comment_count>
      <attachid>131879</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-15 18:16:07 -0700</bug_when>
    <thetext>Comment on attachment 131879
Patch

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

Okay. Looks good. I see lots of style errors so be sure to run check-webkit-style directly on the new files to find the rest of them. Please fix them all before landing and considering addressing the lingering questions Xan and I have.

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:26
&gt; +#define ICON_SIZE 16

You shoulduse const int gIconSize here instead of a #define.

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:30
&gt; +GMainLoop *loop;
&gt; +char* base_uri;

Asterisk craziness!

base_uri -&gt; baseURI

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:33
&gt; +static void
&gt; +server_callback(SoupServer *server, SoupMessage *msg, const char *path, GHashTable *query, SoupClientContext *context, gpointer data)

Even though this is C code, you should still use WebKit coding style so this declaration should be on one line and you should use camelCase and non-abbreviated names so:

server_callback -&gt; serverCallback
msg -&gt; message

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:45
&gt; +
&gt; +    if (g_str_equal(path, &quot;/favicon.ico&quot;)) {

You should define length and contents here, right before you use them.

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:73
&gt; +static void testWebKitFaviconDatabaseSetPath(void)

Omit the void argument here.

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:89
&gt; +static void faviconDatabaseGetFaviconValidCallback(GObject *sourceObject, GAsyncResult *result, gpointer userData)

faviconDatabaseGetValidFaviconCallback?

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:102
&gt; +static void faviconDatabaseGetFaviconInvalidCallback(GObject *sourceObject, GAsyncResult *result, gpointer userData)

faviconDatabaseGetInvalidFaviconCallback?

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:127
&gt; +static inline void mainLoopQuitIfLoadCompleted(gboolean* iconOrPageLoaded)

quitMainLoopIfLoadCompleted

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:135
&gt; +static void idleQuitLoopCallback(WebKitWebView *webView, GParamSpec *pspec, gboolean* iconOrPageLoaded)

pspec -&gt; paramSpec

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:143
&gt; +static void webkitWebViewIconLoaded(WebKitFaviconDatabase* database, const char* frameURI, gboolean* iconOrPageLoaded)

The asterisks are in the wrong place here.

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:163
&gt; +static gboolean faviconDatabaseGetFaviconValidIdle(gpointer userData)

faviconDatabaseGetValidFaviconIdle

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:167
&gt; +    webkit_favicon_database_get_favicon_pixbuf(webkit_get_favicon_database(), base_uri,
&gt; +					       ICON_SIZE, ICON_SIZE, NULL,
&gt; +					       faviconDatabaseGetFaviconValidCallback, userData);

The indentation seems off here.

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:171
&gt; +static gboolean faviconDatabaseGetFaviconInvalidIdle(gpointer userData)

faviconDatabaseGetInvalidFaviconIdle

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:176
&gt; +					       ICON_SIZE, ICON_SIZE, NULL,
&gt; +					       faviconDatabaseGetFaviconInvalidCallback, userData);
&gt; +    return FALSE;

The indetation looks off here as well.

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:184
&gt; +    webkit_favicon_database_get_favicon_pixbuf(webkit_get_favicon_database(), base_uri,
&gt; +					       ICON_SIZE, ICON_SIZE, cancellable,
&gt; +					       faviconDatabaseGetFaviconCancelledCallback, userData);

Ditto.

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:190
&gt; +static void testWebKitFaviconDatabaseGetFavicon(void)

Omit the second &quot;void&quot;

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:196
&gt; +    /* Load uri to make sure favicon is added to database */

Missing a period on this comment.

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:246
&gt; +    SoupServer* server;

Define this where you first use it:

SoupServer *server = soup_server...

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:247
&gt; +    SoupURI* soup_uri;

soup_uri -&gt; soupURI

Your asterisk is in the wrong place. Define this where you first use it.

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:249
&gt; +    gtk_test_init(&amp;argc, &amp;argv, 0);

You should use NULL here instead of 0. This could very well crash a 64-bit machine.

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:252
&gt; +    /* Hopefully make test independent of the path it&apos;s called from. */
&gt; +    testutils_relative_chdir(&quot;Source/WebKit/gtk/tests/resources/test.html&quot;, argv[0]);

Hopefully make test -&gt; This hopefully makes the test

You might double-check that this works during make distcheck

&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:254
&gt; +    server = soup_server_new(SOUP_SERVER_PORT, 0, NULL);

What does it meant to pass zero for the port here? That might deserve a comment.

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:48
&gt; + * a particular Web page or Web site.

In this circumstance, web is not typically capitalized. You can probably just say:

#WebKitFaviconDatabase provides access to the icons associated with web sites.

The way it is now suggests that each page or site has multiple icons.

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:52
&gt; + * images found into the memory cache if possible.

into the memory cache -&gt; into a memory cache

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:57
&gt; + * The database is disabled by default. In order for icons to be
&gt; + * stored and accessed, you will need to set an icon database path
&gt; + * using webkit_favicon_database_set_path(). Disable the database
&gt; + * again passing %NULL to the previous call.

I think it&apos;s good to be explicit that when the database is enabled, the in memory cache is also frozen to an on-disk database. It&apos;s a bit unclear. You should probably put that clarification at the end of the previous paragraph.

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:61
&gt; + * If WebKitWebSettings::enable-private-browsing is %TRUE new icons
&gt; + * won&apos;t be added to the database on disk and no existing icons will
&gt; + * be deleted from it.

What about the in-memory cache?

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:64
&gt; + * Icons will be automatically purged after 4 days without being
&gt; + * used.

Is this still true?

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:81
&gt; +

Extra newline here.

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:87
&gt; +    // Called when the an icon is requested while the initial
&gt; +    // import is going on.

Called when the an icon -&gt; Called when an icon

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:165
&gt; +    String m_pageURI;

This is not API, so this should probably be call m_pageURL and the accessor updated to match.

&gt;&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:269
&gt;&gt; +      * only need the favicon of a particular #WebKitWebView.
&gt; 
&gt; Isn&apos;t this just the same? What&apos;s the difference between the favicon for the mainframe and the view?

I guess he&apos;s making the distinction between something that can happen to any WebView and a particular instance of a WebView. Agree that it&apos;s a bit unclear here. Perhaps change  

See #WebKitWebView::icon-loaded if you only need the favicon of a particular #WebKitWebView.

to

This signal is fired if an icon is loaded on any #WebKitWebView. If you are only interested in a particular #WebKitWebView see #WebKitWebView::icon-loaded.

&gt;&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:273
&gt;&gt; +      * of the favicon.
&gt; 
&gt; This seems more like the actual difference between the signals.

Out of curiosity, what&apos;s the reason for this difference? It seems very arbitrary.

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:283
&gt; +                                                              0,
&gt; +                                                              NULL,
&gt; +                                                              NULL,
&gt; +                                                              webkit_marshal_VOID__STRING,

ELIMINATE NULL. ;)

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:314
&gt; + **/

I think you can omit the first asterisk.

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:341
&gt; + **/

Ditto.

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:350
&gt; +    if (!(path &amp;&amp; path[0])) {

I think that popping open a nice cold can of DeMorgan&apos;s Law on this makes it a little clearer:

if (!path || !path[0]) {

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:378
&gt; + **/

Can remove one asterisk.

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:407
&gt; +    if (width &amp;&amp; height &amp;&amp; (icon-&gt;width() != (int) width || icon-&gt;height() != (int) height))

Please use static_cast here instead of C-style casts.

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:427
&gt; + * If (@width, @height) is (0, 0) then this method will return the

I think this reads better as &quot;If @width and @height are both zero.&quot; (0, 0) can be confused as vector notation.

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:500
&gt; + * webkit_favicon_database_try_get_favicon_pixbuf() is that it always return the

always return -&gt; always returns

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:509
&gt; + * If (@width, @height) is (0, 0) then this method will return the

Same comment as above.

&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:540
&gt; +    GdkPixbuf* pixbuf = getIconPixbufSynchronously(database, pageURL, 16, 16);

Why do you pass 16 pixels here for the width and height? Won&apos;t this resize the icon to something other than @width and @height?

&gt;&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:586
&gt;&gt; +    return static_cast&lt;GdkPixbuf*&gt;(g_object_ref(icon));
&gt; 
&gt; I checked briefly the life cycle of this and it seems you could just return the icon as-is here and remove the extra g_object_unref destroy notifies when setting up things?

Good point. If you remove the new reference be sure to change the annotation above.

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:5176
&gt; +    webkitWebViewRegisterForIconNotification(webView, FALSE);

You should use false here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580310</commentid>
    <comment_count>104</comment_count>
      <attachid>131879</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-03-16 02:42:12 -0700</bug_when>
    <thetext>Comment on attachment 131879
Patch

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

Thanks for the review, and sorry for all the style errors. The check-webkit-style script ignore the unit tests, that&apos;s why I haven&apos;t paid much attention to that file.

&gt;&gt; Source/WebKit/gtk/tests/testfavicondatabase.c:254
&gt;&gt; +    server = soup_server_new(SOUP_SERVER_PORT, 0, NULL);
&gt; 
&gt; What does it meant to pass zero for the port here? That might deserve a comment.

Nothing special. We do it for every unit test.

&gt;&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:61
&gt;&gt; + * be deleted from it.
&gt; 
&gt; What about the in-memory cache?

Added a comment clarifying this. The in-memory cache keeps storing the icons during the execution.

&gt;&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:64
&gt;&gt; + * used.
&gt; 
&gt; Is this still true?

It&apos;s not. I forgot to remove it when I split the patch.

&gt;&gt;&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:273
&gt;&gt;&gt; +      * of the favicon.
&gt;&gt; 
&gt;&gt; This seems more like the actual difference between the signals.
&gt; 
&gt; Out of curiosity, what&apos;s the reason for this difference? It seems very arbitrary.

No reason AFAIK. That difference was there in the old IconDatabase.

&gt;&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:540
&gt;&gt; +    GdkPixbuf* pixbuf = getIconPixbufSynchronously(database, pageURL, 16, 16);
&gt; 
&gt; Why do you pass 16 pixels here for the width and height? Won&apos;t this resize the icon to something other than @width and @height?

Although it indeed looks like it will resize the icon, the truth is that WebCore never does that and blindly ignores the width and height passed as arguments. We just need to pass values &gt;0 and we&apos;ll get the maximum available size for the icon. Anyway I&apos;ll replace them with width and height and add a comment explaining this (I thought I had written that somewhere)

&gt;&gt;&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:586
&gt;&gt;&gt; +    return static_cast&lt;GdkPixbuf*&gt;(g_object_ref(icon));
&gt;&gt; 
&gt;&gt; I checked briefly the life cycle of this and it seems you could just return the icon as-is here and remove the extra g_object_unref destroy notifies when setting up things?
&gt; 
&gt; Good point. If you remove the new reference be sure to change the annotation above.

Why? It&apos;s still a new reference. We are just saving a ref/unref cycle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580360</commentid>
    <comment_count>105</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-03-16 04:18:16 -0700</bug_when>
    <thetext>(In reply to comment #104)
&gt; (From update of attachment 131879 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131879&amp;action=review
&gt; &gt;&gt; Source/WebKit/gtk/webkit/webkitfavicondatabase.cpp:540
&gt; &gt;&gt; +    GdkPixbuf* pixbuf = getIconPixbufSynchronously(database, pageURL, 16, 16);
&gt; &gt; 
&gt; &gt; Why do you pass 16 pixels here for the width and height? Won&apos;t this resize the icon to something other than @width and @height?
&gt; 
&gt; Although it indeed looks like it will resize the icon, the truth is that WebCore never does that and blindly ignores the width and height passed as arguments. We just need to pass values &gt;0 and we&apos;ll get the maximum available size for the icon. Anyway I&apos;ll replace them with width and height and add a comment explaining this (I thought I had written that somewhere)

Actually I found that we were not using the size provided by the caller in one case (when asking for icons before the database import). Fixed that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580455</commentid>
    <comment_count>106</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-03-16 06:35:04 -0700</bug_when>
    <thetext>Committed r110999: &lt;http://trac.webkit.org/changeset/110999&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86047</attachid>
            <date>2011-03-17 05:01:06 -0700</date>
            <delta_ts>2011-03-21 09:59:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56200-20110317130104.patch</filename>
            <type>text/plain</type>
            <size>6880</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODEyMjcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCBjMmRmNzcxMTJl
NTZlYzAzMzQwMDM1MTg2YjlkMTYxYTEyNjdlZTFlLi5hMWFlYWNiNjAyOWU3OGIyYWQwNTM3ZjAw
ZmY3M2MyYjQ2NmU0ZTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEt
MDMtMTcgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gV2ViS2l0SWNv
bkRhdGFiYXNlIGRvZXNuJmFwb3M7dCBrZWVwIGljb25zIGNhY2hlZAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyMDAKKworICAgICAgICBBZGRlZCBu
ZXcgQVBJIHRvIGFsbG93IGFwcHMgdG8gcmV0YWluIFVSTHMgaW4gdGhlIEljb25EYXRhYmFzZS4K
KworICAgICAgICBUaGlzIHBhdGNoIGFsc28gcmVtb3ZlcyB0aGUgSWNvbkRhdGFiYXNlIG9wZW5p
bmcgZnJvbSBXZWJLaXRHdGsrLCBhcHBzCisgICAgICAgIHNob3VsZCBkbyB0aGF0LiBJZiB3ZSBv
cGVuIHRoZSBkYXRhYmFzZSBpbiBXZWJLaXQgYXBwcyB3b24ndCBoYXZlIHRoZSBjaGFuY2UKKyAg
ICAgICAgdG8gZGVsYXkgZGF0YWJhc2UgY2xlYW51cCB0byByZXRhaW4gaWNvbnMgdGhleSBhcmUg
aW50ZXJlc3RlZCBpbi4KKworICAgICAgICAqIHdlYmtpdC93ZWJraXRnbG9iYWxzLmNwcDoKKyAg
ICAgICAgKHdlYmtpdEluaXQpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRpY29uZGF0YWJhc2Uu
Y3BwOgorICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2VfZGVsYXlfZGF0YWJhc2VfY2xlYW51
cCk6CisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9hbGxvd19kYXRhYmFzZV9jbGVhbnVw
KToKKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX3JldGFpbl9pY29uX2Zvcl91cmkpOgor
ICAgICAgICAqIHdlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuaDoKKwogMjAxMS0wMy0xNSAgSWx5
YSBTaGVybWFuICA8aXNoZXJtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFRvbnkgQ2hhbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
Z2xvYmFscy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5jcHAK
aW5kZXggYjhkOGIxZjdkYmZlMWU0ZDljOTYyMGY5NDg2NmU2MTI5MDJkZDQxNi4uODZmZWM2ZTAz
ZDdkY2MyOGVmNzEzNjY4MDQzNWZkNTM4NDc0NTdjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRnbG9iYWxzLmNwcApAQCAtMjcyLDggKzI3Miw2IEBAIHZvaWQgd2Via2l0SW5p
dCgpCiAgICAgUGFnZUdyb3VwOjpzZXRTaG91bGRUcmFja1Zpc2l0ZWRMaW5rcyh0cnVlKTsKIAog
ICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPnNldEhlbHBlcihXZWJLaXQ6OnBh
c3RlYm9hcmRIZWxwZXJJbnN0YW5jZSgpKTsKLSAgICBHT3duUHRyPGdjaGFyPiBpY29uRGF0YWJh
c2VQYXRoKGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdXNlcl9kYXRhX2RpcigpLCAid2Via2l0Iiwg
Imljb25kYXRhYmFzZSIsIE5VTEwpKTsKLSAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0
aCh3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKSwgaWNvbkRhdGFiYXNlUGF0aC5nZXQoKSk7CiAK
ICAgICBTb3VwU2Vzc2lvbiogc2Vzc2lvbiA9IHdlYmtpdF9nZXRfZGVmYXVsdF9zZXNzaW9uKCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJh
c2UuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAK
aW5kZXggYzE1NjJiMDNiZTUyZTQyZGY5NjdmY2EwZGYzNGQyZmM3NzY5ZjEwNS4uMzM3OWJiNDU3
NmMzMmM0NzlhOWNjZGFmZWNkNDQ1NmNkMDUyYjJkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKQEAgLTUxLDYgKzUxLDMyIEBACiAgKiB3
aWxsIGJlIGVtaXR0ZWQgd2hlbiBhbnkgaWNvbiBpcyBmb3VuZCBhbmQgbG9hZGVkLgogICogT2xk
IEljb25zIGFyZSBhdXRvbWF0aWNhbGx5IGNsZWFuZWQgdXAgYWZ0ZXIgNCBkYXlzLgogICoKKyAq
IEV2ZXJ5IGljb24gaW4gdGhlIGRhdGFiYXNlIGhhcyBhIHJldGFpbiBjb3VudC4gIElmIGFuIGlj
b24gaGFzIGEKKyAqIHJldGFpbiBjb3VudCBncmVhdGVyIHRoYW4gMCwgaXQgd2lsbCBiZSB3cml0
dGVuIHRvIGRpc2sgZm9yIGxhdGVyCisgKiB1c2UuIElmIGFuIGljb24ncyByZXRhaW4gY291bnQg
ZXF1YWxzIHplcm8gaXQgd2lsbCBiZSByZW1vdmVkIGZyb20KKyAqIGRpc2suICBUaGUgcmV0YWlu
IGNvdW50IGlzIG5vdCBwZXJzaXN0ZW50IGFjcm9zcyBsYXVuY2hlcy4gSWYgdGhlCisgKiBXZWJL
aXQgY2xpZW50IHdpc2hlcyB0byByZXRhaW4gYW4gaWNvbiBpdCBzaG91bGQgcmV0YWluIHRoZSBp
Y29uCisgKiBvbmNlIGZvciBldmVyeSBsYXVuY2guICBUaGlzIGlzIGJlc3QgZG9uZSBhdCBpbml0
aWFsaXphdGlvbiB0aW1lCisgKiBiZWZvcmUgdGhlIGRhdGFiYXNlIGJlZ2lucyByZW1vdmluZyBp
Y29ucy4gIFRvIG1ha2Ugc3VyZSB0aGF0IHRoZQorICogZGF0YWJhc2UgZG9lcyBub3QgcmVtb3Zl
IHVucmV0YWluZWQgaWNvbnMgcHJlbWF0dXJlbHksIGNhbGwKKyAqIHdlYmtpdF9pY29uX2RhdGFi
YXNlX2RlbGF5X2RhdGFiYXNlX2NsZWFudXAoKSB1bnRpbCBhbGwgZGVzaXJlZAorICogaWNvbnMg
YXJlIHJldGFpbmVkLiAgT25jZSBhbGwgYXJlIHJldGFpbmVkLCBjYWxsCisgKiB3ZWJraXRfaWNv
bl9kYXRhYmFzZV9hbGxvd19kYXRhYmFzZV9jbGVhbnVwKCkuCisgKgorICogU28gaWYgeW91IHdh
bnQgdG8gaGF2ZSBhIHBlcnNpc3RlbnQgaWNvbiBkYXRhYmFzZSBhY3Jvc3MgbGF1bmNoZXMKKyAq
IHlvdXIgcHJvZ3JhbSB3aWxsIHRpcGljYWxseSBkbzoKKyAqIHxbCisgKiBkYXRhYmFzZSA9IHdl
YmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOworICogd2Via2l0X2ljb25fZGF0YWJhc2VfZGVsYXlf
ZGF0YWJhc2VfY2xlYW51cChkYXRhYmFzZSk7CisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRf
cGF0aChkYXRhYmFzZSwgZGF0YWJhc2VfcGF0aCk7CisgKgorICogLy8gVGhpcyB3aWxsIGJlIGxp
a2VseSBhIGxvb3Agb3ZlciBhIGxpc3Qgb2YgVVJMcy4gSW4gdGhlIGNhc2Ugb2YgYSBicm93c2Vy
CisgKiAvLyB0aG9zZSBVUkxzIHdvdWxkIGJlIHRoZSBnbG9iYWwgaGlzdG9yeSBpdGVtcywgYm9v
a21hcmtzLCBldGMuLi4KKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX3JldGFpbl9pY29uX2Zvcl91
cmkoZGF0YWJhc2UsIHBhZ2VfdXJsX29mX2ljb25feW91X3dhbnRfdG9fcmV0YWluKTsKKyAqCisg
KiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9hbGxvd19kYXRhYmFzZV9jbGVhbnVwKGRhdGFiYXNlKTsK
KyAqIF18CisgKgogICogd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgoKSBjYW4gYmUgdXNl
ZCB0byBjaGFuZ2UgdGhlIGxvY2F0aW9uCiAgKiBvZiB0aGUgZGF0YWJhc2UgYW5kIGFsc28gdG8g
ZGlzYWJsZSBpdCBieSBwYXNzaW5nICVOVUxMLgogICoKQEAgLTMxNSwzICszNDEsNjIgQEAgdm9p
ZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhcihXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNl
KQogICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLnJlbW92ZUFsbEljb25zKCk7CiB9CiAKKy8q
KgorICogd2Via2l0X2ljb25fZGF0YWJhc2VfZGVsYXlfZGF0YWJhc2VfY2xlYW51cDoKKyAqIEBk
YXRhYmFzZTogYSAjV2ViS2l0SWNvbkRhdGFiYXNlCisgKgorICogVXNlIHRoaXMgbWV0aG9kIHRv
IG1ha2Ugc3VyZSB0aGF0IHRoZSBkYXRhYmFzZSBkb2VzIG5vdCByZW1vdmUKKyAqIHVucmV0YWlu
ZWQgaWNvbnMgcHJlbWF0dXJlbHkuIEJ5IGRlZmF1bHQgZGF0YWJhc2UgY2xlYW51cCB3aWxsIGJl
CisgKiBzdGFydGVkIGFmdGVyIG9wZW5pbmcgdGhlIGRhdGFiYXNlLCB1bmxlc3Mgd2UgZXhwbGlj
aXRseSBkZWxheQorICogaXQuIFVzZSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9yZXRhaW5faWNvbl9m
b3JfdXJpKCkgZm9yIGVhY2ggaWNvbiB5b3UKKyAqIHdhbnQgdG8ga2VlcCBhbmQgb25jZSBhbGwg
YXJlIHJldGFpbmVkIGNhbGwgYWxsb3dEYXRhYmFzZUNsZWFudXAgdG8KKyAqIHJldmVydCB0aGUg
ZWZmZWN0cyBvZiB0aGlzIGNhbGwuCisgKgorICogU2luY2UgMS4zLjEzCisgKiovCit2b2lkIHdl
YmtpdF9pY29uX2RhdGFiYXNlX2RlbGF5X2RhdGFiYXNlX2NsZWFudXAoV2ViS2l0SWNvbkRhdGFi
YXNlKiBkYXRhYmFzZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19JQ09OX0RB
VEFCQVNFKGRhdGFiYXNlKSk7CisKKyAgICBXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmRlbGF5RGF0
YWJhc2VDbGVhbnVwKCk7Cit9CisKKy8qKgorICogd2Via2l0X2ljb25fZGF0YWJhc2VfYWxsb3df
ZGF0YWJhc2VfY2xlYW51cDoKKyAqIEBkYXRhYmFzZTogYSAjV2ViS2l0SWNvbkRhdGFiYXNlCisg
KgorICogUmV2ZXJ0cyB0aGUgZWZmZWN0IG9mCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9kZWxh
eV9kYXRhYmFzZV9jbGVhbnVwKCkuIFRpcGljYWxseSB0aGlzCisgKiBmdW5jdGlvbiB3aWxsIGJl
IGNhbGxlZCBhZnRlciBhbGwgdGhlIHJlcXVpcmVkIGljb25zIGFyZSByZXRhaW5lZAorICogKHVz
ZSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9yZXRhaW5faWNvbl9mb3JfdXJpKCkgZm9yIHRoYXQpLgor
ICoKKyAqIFNpbmNlIDEuMy4xMworICoqLwordm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9hbGxv
d19kYXRhYmFzZV9jbGVhbnVwKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShkYXRhYmFzZSkpOworCisg
ICAgV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjphbGxvd0RhdGFiYXNlQ2xlYW51cCgpOworfQorCisv
KioKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX3JldGFpbl9pY29uX2Zvcl91cmk6CisgKiBAZGF0
YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQorICogQHBhZ2VfdXJpOiB0aGUgVVJMIG9mIHRo
ZSB3ZWIgcGFnZSB0aGUgaWNvbiBiZWxvbmdzIHRvCisgKgorICogTm90ZSB0aGF0IHRoaXMgY2Fs
bCB3aWxsIG5vdCBiZSBlZmZlY3RpdmUgdW5sZXNzIHRoZSBkYXRhYmFzZSBpcworICogZW5hYmxl
ZCwgaS5lLCB5b3UgaGF2ZSB0byBjYWxsIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKCkg
dG8KKyAqIG9wZW4gYW5kIGVuYWJsZSBpdCBiZWZvcmUgdHJ5aW5nIHRvIHJldGFpbiBhbnkgaWNv
bi4KKyAqCisgKiBTaW5jZSAxLjMuMTMKKyAqKi8KK3ZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2Vf
cmV0YWluX2ljb25fZm9yX3VyaShXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiAgICAg
ICAgcGFnZV91cmkpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRB
QkFTRShkYXRhYmFzZSkpOworCisgICAgaWYgKCFXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5pc0Vu
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCku
cmV0YWluSWNvbkZvclBhZ2VVUkwoU3RyaW5nOjpmcm9tVVRGOChwYWdlX3VyaSkpOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oIGIv
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oCmluZGV4IDdmZTVh
Y2Q3YzczMjAwMzBhMzc0MTI3MDkxODAzNTJmYTAxODhmMTUuLjZkNDk0YWJiYWJkZjlkNzJhYTM4
YzczZWY1YjFhNzI0NmQxYjFiMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRpY29uZGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0aWNvbmRhdGFiYXNlLmgKQEAgLTczLDYgKzczLDE2IEBAIHdlYmtpdF9pY29uX2RhdGFiYXNl
X2dldF9pY29uX3BpeGJ1ZiAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsCiBXRUJL
SVRfQVBJIHZvaWQKIHdlYmtpdF9pY29uX2RhdGFiYXNlX2NsZWFyICAgICAgICAgICAgICAgKFdl
YktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpOwogCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9p
Y29uX2RhdGFiYXNlX3JldGFpbl9pY29uX2Zvcl91cmkgKFdlYktpdEljb25EYXRhYmFzZSogZGF0
YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn
Y2hhciogICAgICAgIHBhZ2VfdXJpKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfaWNvbl9k
YXRhYmFzZV9kZWxheV9kYXRhYmFzZV9jbGVhbnVwIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFi
YXNlKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfaWNvbl9kYXRhYmFzZV9hbGxvd19kYXRh
YmFzZV9jbGVhbnVwIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKTsKKwogR19FTkRfREVD
TFMKIAogI2VuZGlmIC8qIHdlYmtpdGljb25kYXRhYmFzZV9oICovCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86328</attachid>
            <date>2011-03-21 10:00:04 -0700</date>
            <delta_ts>2011-03-22 05:01:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56200-20110321180001.patch</filename>
            <type>text/plain</type>
            <size>17542</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE0NzUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4IDA3Y2IxMmE3OWJkODhhZmY0NGZiZjg1NGMwMDQ4
Yjg0ODc3ZGU3M2IuLjIyN2YxYzEzMDc4N2Y3YmIyYWRkMTA5OTg3YWJjZDNiNjU2NDdjY2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApAQCAt
MTUyLDcgKzE1Miw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKQotICAg
IHZpcnR1YWwgR2RrUGl4YnVmKiBnZXRHZGtQaXhidWYoKTsKKyAgICB2aXJ0dWFsIEdka1BpeGJ1
ZiogZ2V0R2RrUGl4YnVmKHVpbnQgc2l6ZSk7CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgTmF0aXZl
SW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSB7IHJldHVybiBmcmFtZUF0SW5k
ZXgoY3VycmVudEZyYW1lKCkpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2UuaAppbmRleCA1YzJiNzE1M2ZlYWU5Y2E4Y2NiNjUzODhiZTg4Y2IwNjUzOWFhYWZmLi41ZjRh
OTk5MWYzNjkwYjc2ZDdlNWYwY2E1NTk4Y2U5Y2RmYTY0ZjkxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKQEAgLTE0Niw3ICsxNDYsNyBAQCBwdWJsaWM6CiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKEdUSykKLSAgICB2aXJ0dWFsIEdka1BpeGJ1ZiogZ2V0R2RrUGl4
YnVmKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgR2RrUGl4YnVmKiBnZXRHZGtQaXhidWYo
dWludCBzaXplKSB7IHJldHVybiAwOyB9CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2U+IGxv
YWRQbGF0Zm9ybVRoZW1lSWNvbihjb25zdCBjaGFyKiBuYW1lLCBpbnQgc2l6ZSk7CiAjZW5kaWYK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0Nh
aXJvVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9H
ZGtDYWlyb1V0aWxpdGllcy5jcHAKaW5kZXggZDgwMThhMzBmMGM0MWUwZTRjZTVkY2MzODRhOTUx
OWY1NDcwNDVkOS4uMDAxZWM1NzQwMzY5ODk4OGNmMjM2M2RjZTgyY2IxMWFiOWUxZTVhZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRp
bGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2Rr
Q2Fpcm9VdGlsaXRpZXMuY3BwCkBAIC0zMCwxMCArMzAsMTAgQEAKICNpbmNsdWRlIDxjYWlyby5o
PgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KIAotR2RrUGl4YnVmKiBjYWlyb0ltYWdlU3VyZmFjZVRv
R2RrUGl4YnVmKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKK0dka1BpeGJ1ZiogY2Fpcm9JbWFn
ZVN1cmZhY2VUb0dka1BpeGJ1ZihjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIHVpbnQgc2l6ZSkK
IHsKICAgICByZXR1cm4gZ2RrX3BpeGJ1Zl9nZXRfZnJvbV9zdXJmYWNlKHN1cmZhY2UsIDAsIDAs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF93aWR0aChzdXJmYWNlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID8gc2l6ZSA6IGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZSA/IHNpemUgOiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQo
c3VyZmFjZSkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9HZGtDYWlyb1V0aWxpdGllcy5oCmluZGV4IGZmNWIzZWRlZmMxMTFkYjk0NmUz
MmFjODFkMGZjMmEwNTBjZTAyNmYuLjQwYmZiMTJhYTAxODZkZThiYTAxNmFlODE5NTI4NGJjYjlh
MDBlYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9H
ZGtDYWlyb1V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9HZGtDYWlyb1V0aWxpdGllcy5oCkBAIC0yNiw2ICsyNiw2IEBACiAjaWZuZGVmIEdka0Nh
aXJvVXRpbGl0aWVzX2gKICNkZWZpbmUgR2RrQ2Fpcm9VdGlsaXRpZXNfaAogCi1HZGtQaXhidWYq
IGNhaXJvSW1hZ2VTdXJmYWNlVG9HZGtQaXhidWYoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKTsK
K0dka1BpeGJ1ZiogY2Fpcm9JbWFnZVN1cmZhY2VUb0dka1BpeGJ1ZihjYWlyb19zdXJmYWNlX3Qq
ICwgdWludCBzaXplKTsKIAogI2VuZGlmIC8vIEdka0NhaXJvVXRpbGl0aWVzX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsu
Y3BwCmluZGV4IDNkYTBmOWIyNmU3ZDBlMzhhZmFiZmJmNmNjYjk4YTJiNzVjMGYxZTAuLjllODk5
NmVmMGFmMmU2YWFiZDVhMWU5OTA1NDU4YzM2YTk2ODg1YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcApAQCAt
NDUsNyArNDUsNyBAQCBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkpIGNvbgogICAgIGlmICh0eXBlICE9ICJq
cGVnIiAmJiB0eXBlICE9ICJwbmciICYmIHR5cGUgIT0gInRpZmYiICYmIHR5cGUgIT0gImljbyIg
JiYgdHlwZSAhPSAiYm1wIikKICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwogCi0gICAgR1JlZlB0
cjxHZGtQaXhidWY+IHBpeGJ1ZiA9IGNhaXJvSW1hZ2VTdXJmYWNlVG9HZGtQaXhidWYobV9kYXRh
Lm1fc3VyZmFjZSk7CisgICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZiA9IGNhaXJvSW1hZ2VT
dXJmYWNlVG9HZGtQaXhidWYobV9kYXRhLm1fc3VyZmFjZSwgMCk7CiAgICAgaWYgKCFwaXhidWYp
CiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9JbWFnZUd0ay5jcHAKaW5kZXggNjIzYWNlNjEyNDdiNDI1NzFiMWIx
MDgyODdlZDI2YjlhMzIyZTE1YS4uY2QwMDYzYmJmZTI4YWMwM2QwYzc0YjIyZWUxZTc4ZDk5YWU1
MDIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0lt
YWdlR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1h
Z2VHdGsuY3BwCkBAIC0xNTAsOSArMTUwLDkgQEAgUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2U6Omxv
YWRQbGF0Zm9ybVRoZW1lSWNvbihjb25zdCBjaGFyKiBuYW1lLCBpbnQgc2l6ZSkKICAgICByZXR1
cm4gbG9hZEltYWdlRnJvbUZpbGUoZ2V0VGhlbWVJY29uRmlsZU5hbWUobmFtZSwgc2l6ZSkpOwog
fQogCi1HZGtQaXhidWYqIEJpdG1hcEltYWdlOjpnZXRHZGtQaXhidWYoKQorR2RrUGl4YnVmKiBC
aXRtYXBJbWFnZTo6Z2V0R2RrUGl4YnVmKHVpbnQgc2l6ZSkKIHsKLSAgICByZXR1cm4gY2Fpcm9J
bWFnZVN1cmZhY2VUb0dka1BpeGJ1ZihmcmFtZUF0SW5kZXgoY3VycmVudEZyYW1lKCkpKTsKKyAg
ICByZXR1cm4gY2Fpcm9JbWFnZVN1cmZhY2VUb0dka1BpeGJ1ZihmcmFtZUF0SW5kZXgoY3VycmVu
dEZyYW1lKCkpLCBzaXplKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
Q2xpcGJvYXJkR3RrLmNwcAppbmRleCAyNDU4MGVhMzVmZTZhOTkzYmVkY2I2MjU2YzQ5ZTUyYTdj
Y2JlZjdiLi4xYTBmMWIwNDk0YWRlZDAwNjQ4ODdiNmQ3YWY5OTJjZDY5Y2NhYjVhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcApAQCAtMjkxLDcgKzI5
MSw3IEBAIHZvaWQgQ2xpcGJvYXJkR3RrOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVu
dCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjCiAgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2Ut
PmlzTG9hZGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBw
aXhidWYgPSBhZG9wdEdSZWYoaW1hZ2UtPmltYWdlKCktPmdldEdka1BpeGJ1ZigpKTsKKyAgICBH
UmVmUHRyPEdka1BpeGJ1Zj4gcGl4YnVmID0gYWRvcHRHUmVmKGltYWdlLT5pbWFnZSgpLT5nZXRH
ZGtQaXhidWYoMCkpOwogICAgIGlmICghcGl4YnVmKQogICAgICAgICByZXR1cm47CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5jcHAKaW5kZXggOWM1YzE2YzE4MThmMDRh
MjJlNjg5YTc2YzZhNDAwN2U0ZDQ3NTMyNi4uMzU4ZDZjOTY5ZjBlODczZjk0OGY4NTQzNjZiYzhj
NzkyMzA4YmJkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0N1cnNv
ckd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5jcHAK
QEAgLTYyLDcgKzYyLDcgQEAgc3RhdGljIEdSZWZQdHI8R2RrQ3Vyc29yPiBjcmVhdGVOYW1lZEN1
cnNvcihDdXN0b21DdXJzb3JUeXBlIGN1cnNvclR5cGUpCiBzdGF0aWMgR1JlZlB0cjxHZGtDdXJz
b3I+IGNyZWF0ZUN1c3RvbUN1cnNvcihJbWFnZSogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBob3RT
cG90KQogewogICAgIEludFBvaW50IGVmZmVjdGl2ZUhvdFNwb3QgPSBkZXRlcm1pbmVIb3RTcG90
KGltYWdlLCBob3RTcG90KTsKLSAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gcGl4YnVmID0gYWRvcHRH
UmVmKGltYWdlLT5nZXRHZGtQaXhidWYoKSk7CisgICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1
ZiA9IGFkb3B0R1JlZihpbWFnZS0+Z2V0R2RrUGl4YnVmKDApKTsKICAgICByZXR1cm4gYWRvcHRH
UmVmKGdka19jdXJzb3JfbmV3X2Zyb21fcGl4YnVmKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCks
IHBpeGJ1Zi5nZXQoKSwgZWZmZWN0aXZlSG90U3BvdC54KCksIGVmZmVjdGl2ZUhvdFNwb3QueSgp
KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJv
YXJkR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNw
cAppbmRleCA0Y2Q1ZGMwZWM3Mzk3ODg1MWYwNjFkNDNlODAwZmMxMTBmNmI3NzYyLi43M2JlMDI2
MGEwZmMyM2E1MmFmMGE2NTBkN2FkZTY5ZDQzMThhMDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBQ
YXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJp
bmcmKQogICAgIEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZSgpOwogICAgIEFTU0VS
VChpbWFnZSk7CiAKLSAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gcGl4YnVmID0gYWRvcHRHUmVmKGlt
YWdlLT5nZXRHZGtQaXhidWYoKSk7CisgICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZiA9IGFk
b3B0R1JlZihpbWFnZS0+Z2V0R2RrUGl4YnVmKDApKTsKICAgICBEYXRhT2JqZWN0R3RrKiBkYXRh
T2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7CiAgICAgZGF0
YU9iamVjdC0+c2V0SW1hZ2UocGl4YnVmLmdldCgpKTsKICAgICBtX2hlbHBlci0+d3JpdGVDbGlw
Ym9hcmRDb250ZW50cyhjbGlwYm9hcmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDA4YmY3YWIyNTEw
YTA4NjcyMmM4N2RkN2MxMWQ5MzY4MGY0ODdmMzQuLmJiMmJlNGZkODUxYWZlZGUyNTAyYjQ1MDQw
YTIyYWIyYTI5MGY2ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMS0w
My0xNyAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBXZWJLaXRJY29u
RGF0YWJhc2UgZG9lc24mYXBvczt0IGtlZXAgaWNvbnMgY2FjaGVkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjIwMAorCisgICAgICAgIEFkZGVkIG5l
dyBBUEkgdG8gYWxsb3cgYXBwcyB0byByZXRhaW4gVVJMcyBpbiB0aGUgSWNvbkRhdGFiYXNlLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyByZW1vdmVzIHRoZSBJY29uRGF0YWJhc2Ugb3Blbmlu
ZyBmcm9tIFdlYktpdEd0ayssIGFwcHMKKyAgICAgICAgc2hvdWxkIGRvIHRoYXQuIElmIHdlIG9w
ZW4gdGhlIGRhdGFiYXNlIGluIFdlYktpdCBhcHBzIHdvbid0IGhhdmUgdGhlIGNoYW5jZQorICAg
ICAgICB0byBkZWxheSBkYXRhYmFzZSBjbGVhbnVwIHRvIHJldGFpbiBpY29ucyB0aGV5IGFyZSBp
bnRlcmVzdGVkIGluLgorCisgICAgICAgICogd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwOgorICAg
ICAgICAod2Via2l0SW5pdCk6CisgICAgICAgICogd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5j
cHA6CisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9kZWxheV9kYXRhYmFzZV9jbGVhbnVw
KToKKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX2FsbG93X2RhdGFiYXNlX2NsZWFudXAp
OgorICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2VfcmV0YWluX2ljb25fZm9yX3VyaSk6Cisg
ICAgICAgICogd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oOgorCiAyMDExLTAzLTE2ICBKb3Nl
cGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
S2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0Z2xvYmFscy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0Z2xvYmFscy5jcHAKaW5kZXggYjhkOGIxZjdkYmZlMWU0ZDljOTYyMGY5NDg2NmU2MTI5MDJk
ZDQxNi4uODZmZWM2ZTAzZDdkY2MyOGVmNzEzNjY4MDQzNWZkNTM4NDc0NTdjMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcApAQCAtMjcyLDggKzI3Miw2IEBA
IHZvaWQgd2Via2l0SW5pdCgpCiAgICAgUGFnZUdyb3VwOjpzZXRTaG91bGRUcmFja1Zpc2l0ZWRM
aW5rcyh0cnVlKTsKIAogICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPnNldEhl
bHBlcihXZWJLaXQ6OnBhc3RlYm9hcmRIZWxwZXJJbnN0YW5jZSgpKTsKLSAgICBHT3duUHRyPGdj
aGFyPiBpY29uRGF0YWJhc2VQYXRoKGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdXNlcl9kYXRhX2Rp
cigpLCAid2Via2l0IiwgImljb25kYXRhYmFzZSIsIE5VTEwpKTsKLSAgICB3ZWJraXRfaWNvbl9k
YXRhYmFzZV9zZXRfcGF0aCh3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKSwgaWNvbkRhdGFiYXNl
UGF0aC5nZXQoKSk7CiAKICAgICBTb3VwU2Vzc2lvbiogc2Vzc2lvbiA9IHdlYmtpdF9nZXRfZGVm
YXVsdF9zZXNzaW9uKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRpY29uZGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGlj
b25kYXRhYmFzZS5jcHAKaW5kZXggYzE1NjJiMDNiZTUyZTQyZGY5NjdmY2EwZGYzNGQyZmM3NzY5
ZjEwNS4uNTZhYTUxMmE1ZWRmNzA3MWQ2Mjk0NWE0OGJjNTgxOTZjZjY0MzlkNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKQEAgLTUxLDYg
KzUxLDMyIEBACiAgKiB3aWxsIGJlIGVtaXR0ZWQgd2hlbiBhbnkgaWNvbiBpcyBmb3VuZCBhbmQg
bG9hZGVkLgogICogT2xkIEljb25zIGFyZSBhdXRvbWF0aWNhbGx5IGNsZWFuZWQgdXAgYWZ0ZXIg
NCBkYXlzLgogICoKKyAqIEV2ZXJ5IGljb24gaW4gdGhlIGRhdGFiYXNlIGhhcyBhIHJldGFpbiBj
b3VudC4gIElmIGFuIGljb24gaGFzIGEKKyAqIHJldGFpbiBjb3VudCBncmVhdGVyIHRoYW4gMCwg
aXQgd2lsbCBiZSB3cml0dGVuIHRvIGRpc2sgZm9yIGxhdGVyCisgKiB1c2UuIElmIGFuIGljb24n
cyByZXRhaW4gY291bnQgZXF1YWxzIHplcm8gaXQgd2lsbCBiZSByZW1vdmVkIGZyb20KKyAqIGRp
c2suICBUaGUgcmV0YWluIGNvdW50IGlzIG5vdCBwZXJzaXN0ZW50IGFjcm9zcyBsYXVuY2hlcy4g
SWYgdGhlCisgKiBXZWJLaXQgY2xpZW50IHdpc2hlcyB0byByZXRhaW4gYW4gaWNvbiBpdCBzaG91
bGQgcmV0YWluIHRoZSBpY29uCisgKiBvbmNlIGZvciBldmVyeSBsYXVuY2guICBUaGlzIGlzIGJl
c3QgZG9uZSBhdCBpbml0aWFsaXphdGlvbiB0aW1lCisgKiBiZWZvcmUgdGhlIGRhdGFiYXNlIGJl
Z2lucyByZW1vdmluZyBpY29ucy4gIFRvIG1ha2Ugc3VyZSB0aGF0IHRoZQorICogZGF0YWJhc2Ug
ZG9lcyBub3QgcmVtb3ZlIHVucmV0YWluZWQgaWNvbnMgcHJlbWF0dXJlbHksIGNhbGwKKyAqIHdl
YmtpdF9pY29uX2RhdGFiYXNlX2RlbGF5X2RhdGFiYXNlX2NsZWFudXAoKSB1bnRpbCBhbGwgZGVz
aXJlZAorICogaWNvbnMgYXJlIHJldGFpbmVkLiAgT25jZSBhbGwgYXJlIHJldGFpbmVkLCBjYWxs
CisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9hbGxvd19kYXRhYmFzZV9jbGVhbnVwKCkuCisgKgor
ICogU28gaWYgeW91IHdhbnQgdG8gaGF2ZSBhIHBlcnNpc3RlbnQgaWNvbiBkYXRhYmFzZSBhY3Jv
c3MgbGF1bmNoZXMKKyAqIHlvdXIgcHJvZ3JhbSB3aWxsIHRpcGljYWxseSBkbzoKKyAqIHxbCisg
KiBkYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOworICogd2Via2l0X2ljb25f
ZGF0YWJhc2VfZGVsYXlfZGF0YWJhc2VfY2xlYW51cChkYXRhYmFzZSk7CisgKiB3ZWJraXRfaWNv
bl9kYXRhYmFzZV9zZXRfcGF0aChkYXRhYmFzZSwgZGF0YWJhc2VfcGF0aCk7CisgKgorICogLy8g
VGhpcyB3aWxsIGJlIGxpa2VseSBhIGxvb3Agb3ZlciBhIGxpc3Qgb2YgVVJMcy4gSW4gdGhlIGNh
c2Ugb2YgYSBicm93c2VyCisgKiAvLyB0aG9zZSBVUkxzIHdvdWxkIGJlIHRoZSBnbG9iYWwgaGlz
dG9yeSBpdGVtcywgYm9va21hcmtzLCBldGMuLi4KKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX3Jl
dGFpbl9pY29uX2Zvcl91cmkoZGF0YWJhc2UsIHBhZ2VfdXJsX29mX2ljb25feW91X3dhbnRfdG9f
cmV0YWluKTsKKyAqCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9hbGxvd19kYXRhYmFzZV9jbGVh
bnVwKGRhdGFiYXNlKTsKKyAqIF18CisgKgogICogd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3Bh
dGgoKSBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIGxvY2F0aW9uCiAgKiBvZiB0aGUgZGF0YWJh
c2UgYW5kIGFsc28gdG8gZGlzYWJsZSBpdCBieSBwYXNzaW5nICVOVUxMLgogICoKQEAgLTI2OCw2
ICsyOTQsNyBAQCBnY2hhciogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpKFdlYktp
dEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGdjaAogICogd2Via2l0X2ljb25fZGF0YWJh
c2VfZ2V0X2ljb25fcGl4YnVmOgogICogQGRhdGFiYXNlOiBhICNXZWJLaXRJY29uRGF0YWJhc2UK
ICAqIEBwYWdlX3VyaTogVVJJIG9mIHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIGljb24KKyAqIEBz
aXplOiB0aGUgZGVzaXJlZCB3aWR0aCBhbmQgbGVuZ3RoIGZvciB0aGUgaWNvbgogICoKICAqIE9i
dGFpbnMgYSAjR2RrUGl4YnVmIG9mIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZSBVUkks
IG9yCiAgKiBhIGRlZmF1bHQgaWNvbiBpZiB0aGVyZSBpcyBubyBpY29uIGZvciB0aGUgZ2l2ZW4g
cGFnZS4gVXNlCkBAIC0yODMsNyArMzEwLDcgQEAgZ2NoYXIqIHdlYmtpdF9pY29uX2RhdGFiYXNl
X2dldF9pY29uX3VyaShXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBnY2gKICAq
CiAgKiBTaW5jZTogMS4zLjEzCiAgKiovCi1HZGtQaXhidWYqIHdlYmtpdF9pY29uX2RhdGFiYXNl
X2dldF9pY29uX3BpeGJ1ZihXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBnY2hh
ciogcGFnZVVSSSkKK0dka1BpeGJ1Ziogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4
YnVmKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGdjaGFyKiBwYWdlVVJJLCBn
dWludCBzaXplKQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19JQ09OX0RB
VEFCQVNFKGRhdGFiYXNlKSwgMCk7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocGFnZVVSSSwg
MCk7CkBAIC0yOTQsOSArMzIxLDEwIEBAIEdka1BpeGJ1Ziogd2Via2l0X2ljb25fZGF0YWJhc2Vf
Z2V0X2ljb25fcGl4YnVmKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvCiAgICAgV2Vi
Q29yZTo6SW1hZ2UqIGljb24gPSBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5pY29uRm9yUGFnZVVS
TChwYWdlVVJMLCBXZWJDb3JlOjpJbnRTaXplKDE2LCAxNikpOwogICAgIGlmICghaWNvbikKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgR2RrUGl4YnVmKiBwaXhidWYgPSBpY29uLT5nZXRHZGtQaXhi
dWYoKTsKKyAgICBHZGtQaXhidWYqIHBpeGJ1ZiA9IGljb24tPmdldEdka1BpeGJ1ZihzaXplKTsK
ICAgICBpZiAoIXBpeGJ1ZikKICAgICAgICAgcmV0dXJuIDA7CisKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8R2RrUGl4YnVmKj4oZ19vYmplY3RfcmVmKHBpeGJ1ZikpOwogfQogCkBAIC0zMTUsMyAr
MzQzLDYyIEBAIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2VfY2xlYXIoV2ViS2l0SWNvbkRhdGFi
YXNlKiBkYXRhYmFzZSkKICAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5yZW1vdmVBbGxJY29u
cygpOwogfQogCisvKioKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2RlbGF5X2RhdGFiYXNlX2Ns
ZWFudXA6CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQorICoKKyAqIFVzZSB0
aGlzIG1ldGhvZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZGF0YWJhc2UgZG9lcyBub3QgcmVtb3Zl
CisgKiB1bnJldGFpbmVkIGljb25zIHByZW1hdHVyZWx5LiBCeSBkZWZhdWx0IGRhdGFiYXNlIGNs
ZWFudXAgd2lsbCBiZQorICogc3RhcnRlZCBhZnRlciBvcGVuaW5nIHRoZSBkYXRhYmFzZSwgdW5s
ZXNzIHdlIGV4cGxpY2l0bHkgZGVsYXkKKyAqIGl0LiBVc2Ugd2Via2l0X2ljb25fZGF0YWJhc2Vf
cmV0YWluX2ljb25fZm9yX3VyaSgpIGZvciBlYWNoIGljb24geW91CisgKiB3YW50IHRvIGtlZXAg
YW5kIG9uY2UgYWxsIGFyZSByZXRhaW5lZCBjYWxsIGFsbG93RGF0YWJhc2VDbGVhbnVwIHRvCisg
KiByZXZlcnQgdGhlIGVmZmVjdHMgb2YgdGhpcyBjYWxsLgorICoKKyAqIFNpbmNlIDEuMy4xMwor
ICoqLwordm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9kZWxheV9kYXRhYmFzZV9jbGVhbnVwKFdl
YktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfSUNPTl9EQVRBQkFTRShkYXRhYmFzZSkpOworCisgICAgV2ViQ29yZTo6SWNvbkRhdGFi
YXNlOjpkZWxheURhdGFiYXNlQ2xlYW51cCgpOworfQorCisvKioKKyAqIHdlYmtpdF9pY29uX2Rh
dGFiYXNlX2FsbG93X2RhdGFiYXNlX2NsZWFudXA6CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdElj
b25EYXRhYmFzZQorICoKKyAqIFJldmVydHMgdGhlIGVmZmVjdCBvZgorICogd2Via2l0X2ljb25f
ZGF0YWJhc2VfZGVsYXlfZGF0YWJhc2VfY2xlYW51cCgpLiBUaXBpY2FsbHkgdGhpcworICogZnVu
Y3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgYWxsIHRoZSByZXF1aXJlZCBpY29ucyBhcmUgcmV0
YWluZWQKKyAqICh1c2Ugd2Via2l0X2ljb25fZGF0YWJhc2VfcmV0YWluX2ljb25fZm9yX3VyaSgp
IGZvciB0aGF0KS4KKyAqCisgKiBTaW5jZSAxLjMuMTMKKyAqKi8KK3ZvaWQgd2Via2l0X2ljb25f
ZGF0YWJhc2VfYWxsb3dfZGF0YWJhc2VfY2xlYW51cChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFi
YXNlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0
YWJhc2UpKTsKKworICAgIFdlYkNvcmU6Okljb25EYXRhYmFzZTo6YWxsb3dEYXRhYmFzZUNsZWFu
dXAoKTsKK30KKworLyoqCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9yZXRhaW5faWNvbl9mb3Jf
dXJpOgorICogQGRhdGFiYXNlOiBhICNXZWJLaXRJY29uRGF0YWJhc2UKKyAqIEBwYWdlX3VyaTog
dGhlIFVSTCBvZiB0aGUgd2ViIHBhZ2UgdGhlIGljb24gYmVsb25ncyB0bworICoKKyAqIE5vdGUg
dGhhdCB0aGlzIGNhbGwgd2lsbCBub3QgYmUgZWZmZWN0aXZlIHVubGVzcyB0aGUgZGF0YWJhc2Ug
aXMKKyAqIGVuYWJsZWQsIGkuZSwgeW91IGhhdmUgdG8gY2FsbCB3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9zZXRfcGF0aCgpIHRvCisgKiBvcGVuIGFuZCBlbmFibGUgaXQgYmVmb3JlIHRyeWluZyB0byBy
ZXRhaW4gYW55IGljb24uCisgKgorICogU2luY2UgMS4zLjEzCisgKiovCit2b2lkIHdlYmtpdF9p
Y29uX2RhdGFiYXNlX3JldGFpbl9pY29uX2Zvcl91cmkoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRh
YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBnY2hhciogICAgICAgIHBhZ2VfdXJpKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpKTsKKworICAgIGlmICghV2ViQ29yZTo6aWNvbkRh
dGFiYXNlKCkuaXNFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkNvcmU6Omlj
b25EYXRhYmFzZSgpLnJldGFpbkljb25Gb3JQYWdlVVJMKFN0cmluZzo6ZnJvbVVURjgocGFnZV91
cmkpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29u
ZGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2Uu
aAppbmRleCA3ZmU1YWNkN2M3MzIwMDMwYTM3NDEyNzA5MTgwMzUyZmEwMTg4ZjE1Li5iOWI3MzMx
YzQ3YWNiNDA1NGQ1NjFhYzNjYTM2NmE3YTVjZGRhN2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oCkBAIC02OCwxMSArNjgsMjIgQEAgd2Via2l0
X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpICAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBk
YXRhYmFzZSwKIAogV0VCS0lUX0FQSSBHZGtQaXhidWYqCiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9n
ZXRfaWNvbl9waXhidWYgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAgICBw
YWdlX3VyaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBnY2hhciogICAgICAgIHBhZ2VfdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICBzaXplKTsKIAogV0VCS0lUX0FQSSB2b2lk
CiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhciAgICAgICAgICAgICAgIChXZWJLaXRJY29uRGF0
YWJhc2UqIGRhdGFiYXNlKTsKIAorV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9yZXRhaW5faWNvbl9mb3JfdXJpIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAg
ICBwYWdlX3VyaSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2ljb25fZGF0YWJhc2VfZGVs
YXlfZGF0YWJhc2VfY2xlYW51cCAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSk7CisKK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2ljb25fZGF0YWJhc2VfYWxsb3dfZGF0YWJhc2VfY2xlYW51
cCAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRp
ZiAvKiB3ZWJraXRpY29uZGF0YWJhc2VfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnZpZXcuY3BwCmluZGV4IDQ2YjFiODllYWRlZjY3ZTU1ZmQwOTAwNDRiNWJiNWEwZmJi
MzYyNzcuLjZlODVlN2I4MGE1ZGI4NTNkNTcwNWZjODM2YjJlZDVlZGU3MGIxYTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTUwNzQsNiArNTA3NCw3
IEBAIEdfQ09OU1RfUkVUVVJOIGdjaGFyKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCiAvKioKICAqIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl9w
aXhidWY6CiAgKiBAd2ViVmlldzogdGhlICNXZWJLaXRXZWJWaWV3IG9iamVjdAorICogQHNpemU6
IHRoZSBkZXNpcmVkIGxlbmd0aCBhbmQgd2lkdGggZm9yIHRoZSBpY29uCiAgKgogICogT2J0YWlu
cyBhICNHZGtQaXhidWYgb2YgdGhlIGZhdmljb24gZm9yIHRoZSBnaXZlbiAjV2ViS2l0V2ViVmll
dywgb3IKICAqIGEgZGVmYXVsdCBpY29uIGlmIHRoZXJlIGlzIG5vIGljb24gZm9yIHRoZSBnaXZl
biBwYWdlLiBVc2UKQEAgLTUwODEsMjEgKzUwODIsMjAgQEAgR19DT05TVF9SRVRVUk4gZ2NoYXIq
IHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAq
IFVzdWFsbHkgeW91IHdhbnQgdG8gY29ubmVjdCB0byBXZWJLaXRXZWJWaWV3OjppY29uLWxvYWRl
ZCBhbmQgY2FsbCB0aGlzCiAgKiBtZXRob2QgaW4gdGhlIGNhbGxiYWNrLgogICoKLSAqIFRoZSBw
aXhidWYgd2lsbCBoYXZlIHRoZSBsYXJnZXN0IHNpemUgcHJvdmlkZWQgYnkgdGhlIHNlcnZlciBh
bmQgc2hvdWxkCi0gKiBiZSByZXNpemVkIGJlZm9yZSBpdCBpcyBkaXNwbGF5ZWQuCi0gKiBTZWUg
YWxzbyB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoKS4KKyAqIElmIEBzaXpl
IGlzIDAgdGhlbiB0aGUgcGl4YnVmIHdpbGwgaGF2ZSB0aGUgbGFyZ2VzdCBzaXplIHByb3ZpZGVk
CisgKiBieSB0aGUgc2VydmVyLiBTZWUgYWxzbyB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl9waXhidWYoKS4KICAqCiAgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IHJlZmVy
ZW5jZSB0byBhICNHZGtQaXhidWYsIG9yICVOVUxMCiAgKgogICogU2luY2U6IDEuMy4xMwogICov
Ci1HZGtQaXhidWYqIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl9waXhidWYoV2ViS2l0V2ViVmll
dyogd2ViVmlldykKK0dka1BpeGJ1Ziogd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3BpeGJ1ZihX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBndWludCBzaXplKQogewogICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgMCk7CiAKICAgICBjb25zdCBnY2hh
ciogcGFnZVVSSSA9IHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpOwogICAgIFdlYktp
dEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKLSAg
ICByZXR1cm4gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmKGRhdGFiYXNlLCBw
YWdlVVJJKTsKKyAgICByZXR1cm4gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVm
KGRhdGFiYXNlLCBwYWdlVVJJLCBzaXplKTsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnZpZXcuaAppbmRleCAzOGM5YTcwMjI0MjUxMjgzYTJmN2IzOTk2MmUyYjkxMWZj
ODUwNTEyLi4zNDE4NzMwYjcyMTljMTU4NmIyZDQ3MjQyODA3ZTRlODQyNTQxZTBkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKQEAgLTM5OCw3ICszOTgsOCBAQCBX
RUJLSVRfQVBJIEdfQ09OU1RfUkVUVVJOIGdjaGFyICoKIHdlYmtpdF93ZWJfdmlld19nZXRfaWNv
bl91cmkgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldyk7
CiAKIFdFQktJVF9BUEkgR2RrUGl4YnVmICoKLXdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl9waXhi
dWYgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldyk7Cit3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2ljb25fcGl4YnVmICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmll
dyAgICAgICAgKndlYlZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgIHNpemUpOwogCiBXRUJLSVRfQVBJIFdl
YktpdERPTURvY3VtZW50ICoKIHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50ICAgICAg
ICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86765</attachid>
            <date>2011-03-24 06:23:59 -0700</date>
            <delta_ts>2011-03-31 04:50:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56200-20110324142349.patch</filename>
            <type>text/plain</type>
            <size>28459</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE1OTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCA0ODc1MmJjY2Ri
YjEzMmZhZjkyYzc0YzYxYTU1MzU5MDQxYmRkNmI4Li43OGE4ODFhNzJhZGJhMDcwYmQzOWI0ZTM4
NWIxMDJmODIzOTFiNWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTEt
MDMtMjQgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gV2ViS2l0SWNv
bkRhdGFiYXNlIGRvZXNuJ3Qga2VlcCBpY29ucyBjYWNoZWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MjAwCisKKyAgICAgICAgQWRkZWQgbmV3IEFQ
SSB0byBhbGxvdyBhcHBzIHRvIHJldGFpbiBVUkxzIGluIHRoZSBJY29uRGF0YWJhc2UuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhbHNvIHJlbW92ZXMgdGhlIEljb25EYXRhYmFzZSBvcGVuaW5nIGZy
b20gV2ViS2l0R3RrKywgYXBwcworICAgICAgICBzaG91bGQgZG8gdGhhdC4gSWYgd2Ugb3BlbiB0
aGUgZGF0YWJhc2UgaW4gV2ViS2l0IGFwcHMgd29uJ3QgaGF2ZSB0aGUgY2hhbmNlCisgICAgICAg
IHRvIGRlbGF5IGRhdGFiYXNlIGNsZWFudXAgdG8gcmV0YWluIGljb25zIHRoZXkgYXJlIGludGVy
ZXN0ZWQgaW4uCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9JY29uRGF0YWJhc2VDbGllbnRHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKGRpc3Bh
dGNoRGlkQWRkSWNvbkZvclBhZ2VVUkxJbklkbGUpOgorICAgICAgICAoZGlzcGF0Y2hEaWRSZW1v
dmVBbGxJY29uc0luSWRsZSk6CisgICAgICAgIChJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpc3Bh
dGNoRGlkUmVtb3ZlQWxsSWNvbnMpOgorICAgICAgICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpk
aXNwYXRjaERpZEFkZEljb25Gb3JQYWdlVVJMKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9J
Y29uRGF0YWJhc2VDbGllbnRHdGsuaDogQWRkZWQuCisgICAgICAgICogd2Via2l0L3dlYmtpdGds
b2JhbHMuY3BwOgorICAgICAgICAod2Via2l0SW5pdCk6CisgICAgICAgICogd2Via2l0L3dlYmtp
dGljb25kYXRhYmFzZS5jcHA6CisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGFzc19p
bml0KToKKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX2luaXQpOgorICAgICAgICAoZGVm
YXVsdENsaWVudCk6CisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0aCk6Cisg
ICAgICAgIChjbG9zZUljb25EYXRhYmFzZU9uRXhpdCk6CisgICAgICAgIChzdGFydFVwSWNvbkRh
dGFiYXNlKToKKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX2lzX2VuYWJsZWQpOgorICAg
ICAgICAod2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X2VuYWJsZWQpOgorICAgICAgICAod2Via2l0
X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgpOgorICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2Vf
Z2V0X2ljb25fdXJpKToKKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3Bp
eGJ1Zik6CisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhcik6CisgICAgICAgICh3
ZWJraXRfaWNvbl9kYXRhYmFzZV9kZWxheV9jbGVhbnVwKToKKyAgICAgICAgKHdlYmtpdF9pY29u
X2RhdGFiYXNlX2FsbG93X2NsZWFudXApOgorICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2Vf
cmV0YWluX2ljb25fZm9yX3VyaSk6CisgICAgICAgICogd2Via2l0L3dlYmtpdGljb25kYXRhYmFz
ZS5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHdlYmtp
dF93ZWJfdmlld19nZXRfaWNvbl9waXhidWYpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2
aWV3Lmg6CisKIDIwMTEtMDMtMjEgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdC9ndGsv
R05VbWFrZWZpbGUuYW0KaW5kZXggNzAzMGVhODg3MzE2ZDk4MTRlYTcyOGI0ZDc1YjI0MGY0ZTY5
OWI0Ny4uYmU3MWNkMzRkOTM4YzRiZDg3YTI3MmExNzQyZjlhOTNkOTVhNGVkZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdC9n
dGsvR05VbWFrZWZpbGUuYW0KQEAgLTE4OSw2ICsxODksOCBAQCB3ZWJraXRndGtfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29u
dGV4dEd0ay5oIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVu
VmlkZW9Db250cm9sbGVyLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5oIFwKKwlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9JY29uRGF0YWJhc2VDbGllbnRHdGsuY3BwIFwKKwlTb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9JY29uRGF0YWJhc2VDbGllbnRHdGsuaCBcCiAJU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmNwcCBcCiAJU291cmNlL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmggXAogCVNvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1Bhc3RlYm9hcmRIZWxwZXJHdGsuY3BwIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ljb25EYXRhYmFzZUNsaWVudEd0
ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JY29uRGF0YWJhc2VDbGll
bnRHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0YWY5MTM2MTlkODNhY2ZiYjE2YzczYjU1YTJjZjcxNGY1
OGRkNjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9JY29uRGF0YWJhc2VDbGllbnRHdGsuY3BwCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSWNvbkRhdGFiYXNlQ2xpZW50R3RrLmgiCisKKyNpbmNsdWRlICJJY29uRGF0YWJh
c2UuaCIKKyNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzLmgiCisjaW5jbHVkZSA8Z2RrL2dkay5oPgor
I2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworc3RhdGljIGdib29s
ZWFuIGRpc3BhdGNoRGlkQWRkSWNvbkZvclBhZ2VVUkxJbklkbGUoZ3BvaW50ZXIgdXNlckRhdGEp
Cit7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgp
LCAiaWNvbi1hZGRlZCIsIHN0YXRpY19jYXN0PGNoYXIqPih1c2VyRGF0YSkpOworICAgIHJldHVy
biBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuIGRpc3BhdGNoRGlkUmVtb3ZlQWxsSWNvbnNJ
bklkbGUoZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdl
YmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpLCAiaWNvbnMtcmVtb3ZlZCIpOworICAgIHJldHVybiBG
QUxTRTsKK30KKwordm9pZCBJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpc3BhdGNoRGlkUmVtb3Zl
QWxsSWNvbnMoKQoreworICAgIC8vIERpc3BhdGNoIHRoZSBzaWduYWwgaW50byB0aGUgbWFpbiBs
b29wCisgICAgZ2RrX3RocmVhZHNfYWRkX2lkbGUoZGlzcGF0Y2hEaWRSZW1vdmVBbGxJY29uc0lu
SWRsZSwgMCk7Cit9CisKK3ZvaWQgSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpkaXNwYXRjaERpZEFk
ZEljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgcGFnZVVSTCkKK3sKKyAgICAvLyBEaXNwYXRj
aCB0aGUgc2lnbmFsIGludG8gdGhlIG1haW4gbG9vcAorICAgIGdka190aHJlYWRzX2FkZF9pZGxl
X2Z1bGwoR19QUklPUklUWV9ERUZBVUxUX0lETEUsIGRpc3BhdGNoRGlkQWRkSWNvbkZvclBhZ2VV
UkxJbklkbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3N0cmR1cChwYWdlVVJM
LnV0ZjgoKS5kYXRhKCkpLCBnX2ZyZWUpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvSWNvbkRhdGFiYXNlQ2xpZW50R3RrLmggYi9Tb3VyY2UvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9JY29uRGF0YWJhc2VDbGllbnRHdGsuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
NTBmYTIzN2ZlMDUzNzQ1Y2IwZTBjZjNhMDI5NmFkZWE5YTY2NmViCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSWNvbkRhdGFiYXNlQ2xpZW50R3Rr
LmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5M
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFdURl9JY29uRGF0YWJhc2VDbGllbnRHdGtfaAorI2RlZmluZSBX
VEZfSWNvbkRhdGFiYXNlQ2xpZW50R3RrX2gKKworI2luY2x1ZGUgIkljb25EYXRhYmFzZUNsaWVu
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJY29uRGF0YWJhc2U7Cit9OyAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVz
cGFjZSBXVEY7CisKK2NsYXNzIEljb25EYXRhYmFzZUNsaWVudEd0ayA6IHB1YmxpYyBXZWJDb3Jl
OjpJY29uRGF0YWJhc2VDbGllbnQgeworCitwdWJsaWM6CisgICAgLy8gSWNvbkRhdGFiYXNlQ2xp
ZW50IGludGVyZmFjZQorICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlbW92ZUFsbEljb25z
KCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQWRkSWNvbkZvclBhZ2VVUkwoY29uc3Qg
V1RGOjpTdHJpbmcmKTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGdsb2JhbHMuY3BwCmluZGV4IGI4ZDhiMWY3ZGJmZTFlNGQ5Yzk2MjBmOTQ4NjZlNjEyOTAy
ZGQ0MTYuLjg2ZmVjNmUwM2Q3ZGNjMjhlZjcxMzY2ODA0MzVmZDUzODQ3NDU3YzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5jcHAKQEAgLTI3Miw4ICsyNzIsNiBA
QCB2b2lkIHdlYmtpdEluaXQoKQogICAgIFBhZ2VHcm91cDo6c2V0U2hvdWxkVHJhY2tWaXNpdGVk
TGlua3ModHJ1ZSk7CiAKICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT5zZXRI
ZWxwZXIoV2ViS2l0OjpwYXN0ZWJvYXJkSGVscGVySW5zdGFuY2UoKSk7Ci0gICAgR093blB0cjxn
Y2hhcj4gaWNvbkRhdGFiYXNlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9k
aXIoKSwgIndlYmtpdCIsICJpY29uZGF0YWJhc2UiLCBOVUxMKSk7Ci0gICAgd2Via2l0X2ljb25f
ZGF0YWJhc2Vfc2V0X3BhdGgod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCksIGljb25EYXRhYmFz
ZVBhdGguZ2V0KCkpOwogCiAgICAgU291cFNlc3Npb24qIHNlc3Npb24gPSB3ZWJraXRfZ2V0X2Rl
ZmF1bHRfc2Vzc2lvbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0aWNvbmRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRp
Y29uZGF0YWJhc2UuY3BwCmluZGV4IDg4MTE2MjM3YTNmMDExNDNkYTM5NTNkOTRhMDFkOTI5NWRj
ZTFhNTkuLmM2NjA3YTg1YzQyMzBlY2Y0NDM2NjM3YTQzMWQyZGNjOTk5MzIyYzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuY3BwCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBDaHJpc3RpYW4gRHl3YW4gPGNocmlz
dGlhbkBsYW5lZG8uY29tPgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTIwLDEwICsyMSw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAid2Via2l0aWNvbmRhdGFiYXNlLmgiCiAKLSNpbmNsdWRlICJEYXRhYmFzZURldGFp
bHMuaCIKLSNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVt
LmgiCiAjaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSWNvbkRhdGFiYXNlQ2xp
ZW50R3RrLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5j
bHVkZSAid2Via2l0Z2xvYmFsc3ByaXZhdGUuaCIKQEAgLTQyLDggKzQyLDkgQEAKICAqIGluIHRh
YiBsYWJlbHMsIHdpbmRvdyBjYXB0aW9ucyBvciBib29rbWFya3MuIEFsbCB2aWV3cyBzaGFyZQog
ICogdGhlIHNhbWUgaWNvbiBkYXRhYmFzZS4KICAqCi0gKiBUaGUgaWNvbiBkYXRhYmFzZSBpcyBl
bmFibGVkIGJ5IGRlZmF1bHQgYW5kIHN0b3JlZCBpbgotICogfi8ubG9jYWwvc2hhcmUvd2Via2l0
L2ljb25kYXRhYmFzZSwgZGVwZW5kaW5nIG9uIFhER19EQVRBX0hPTUUuCisgKiBUaGUgaWNvbiBk
YXRhYmFzZSBtdXN0IGJlIGV4cGxpY2l0bHkgZW5hYmxlZC4gSWYgbm8gZGF0YWJhc2UgcGF0aAor
ICogaXMgc3BlY2lmaWVkIHRoZW4gaXQgd2lsbCB1c2Ugfi8ubG9jYWwvc2hhcmUvd2Via2l0L2lj
b25kYXRhYmFzZSBieQorICogZGVmYXVsdCwgZGVwZW5kaW5nIG9uIFhER19EQVRBX0hPTUUuCiAg
KgogICogV2ViS2l0IHdpbGwgYXV0b21hdGljYWxseSBsb29rIGZvciBhdmFpbGFibGUgaWNvbnMg
aW4gbGluayBlbGVtZW50cwogICogb24gb3BlbmVkIHBhZ2VzIGFzIHdlbGwgYXMgYW4gZXhpc3Rp
bmcgZmF2aWNvbi5pY28gYW5kIGxvYWQgdGhlCkBAIC01MSw2ICs1MiwzMiBAQAogICogd2lsbCBi
ZSBlbWl0dGVkIHdoZW4gYW55IGljb24gaXMgZm91bmQgYW5kIGxvYWRlZC4KICAqIE9sZCBJY29u
cyBhcmUgYXV0b21hdGljYWxseSBjbGVhbmVkIHVwIGFmdGVyIDQgZGF5cy4KICAqCisgKiBFdmVy
eSBpY29uIGluIHRoZSBkYXRhYmFzZSBoYXMgYSByZXRhaW4gY291bnQuICBJZiBhbiBpY29uIGhh
cyBhCisgKiByZXRhaW4gY291bnQgZ3JlYXRlciB0aGFuIDAsIGl0IHdpbGwgYmUgd3JpdHRlbiB0
byBkaXNrIGZvciBsYXRlcgorICogdXNlLiBJZiBhbiBpY29uJ3MgcmV0YWluIGNvdW50IGVxdWFs
cyB6ZXJvIGl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tCisgKiBkaXNrLiAgVGhlIHJldGFpbiBjb3Vu
dCBpcyBub3QgcGVyc2lzdGVudCBhY3Jvc3MgbGF1bmNoZXMuIElmIHRoZQorICogV2ViS2l0IGNs
aWVudCB3aXNoZXMgdG8gcmV0YWluIGFuIGljb24gaXQgc2hvdWxkIHJldGFpbiB0aGUgaWNvbgor
ICogb25jZSBmb3IgZXZlcnkgbGF1bmNoLiAgVGhpcyBpcyBiZXN0IGRvbmUgYXQgaW5pdGlhbGl6
YXRpb24gdGltZQorICogYmVmb3JlIHRoZSBkYXRhYmFzZSBiZWdpbnMgcmVtb3ZpbmcgaWNvbnMu
ICBUbyBtYWtlIHN1cmUgdGhhdCB0aGUKKyAqIGRhdGFiYXNlIGRvZXMgbm90IHJlbW92ZSB1bnJl
dGFpbmVkIGljb25zIHByZW1hdHVyZWx5LCBjYWxsCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9k
ZWxheV9kYXRhYmFzZV9jbGVhbnVwKCkgdW50aWwgYWxsIGRlc2lyZWQKKyAqIGljb25zIGFyZSBy
ZXRhaW5lZC4gIE9uY2UgYWxsIGFyZSByZXRhaW5lZCwgY2FsbAorICogd2Via2l0X2ljb25fZGF0
YWJhc2VfYWxsb3dfZGF0YWJhc2VfY2xlYW51cCgpLgorICoKKyAqIFNvIGlmIHlvdSB3YW50IHRv
IGhhdmUgYSBwZXJzaXN0ZW50IGljb24gZGF0YWJhc2UgYWNyb3NzIGxhdW5jaGVzCisgKiB5b3Vy
IHByb2dyYW0gd2lsbCB0aXBpY2FsbHkgZG86CisgKiB8WworICogZGF0YWJhc2UgPSB3ZWJraXRf
Z2V0X2ljb25fZGF0YWJhc2UoKTsKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2RlbGF5X2RhdGFi
YXNlX2NsZWFudXAoZGF0YWJhc2UpOworICogd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X2VuYWJs
ZWQoZGF0YWJhc2UsIFRSVUUpOworICoKKyAqIC8vIFRoaXMgd2lsbCBiZSBsaWtlbHkgYSBsb29w
IG92ZXIgYSBsaXN0IG9mIFVSTHMuIEluIHRoZSBjYXNlIG9mIGEgYnJvd3NlcgorICogLy8gdGhv
c2UgVVJMcyB3b3VsZCBiZSB0aGUgZ2xvYmFsIGhpc3RvcnkgaXRlbXMsIGJvb2ttYXJrcywgZXRj
Li4uCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9yZXRhaW5faWNvbl9mb3JfdXJpKGRhdGFiYXNl
LCBwYWdlX3VybF9vZl9pY29uX3lvdV93YW50X3RvX3JldGFpbik7CisgKgorICogd2Via2l0X2lj
b25fZGF0YWJhc2VfYWxsb3dfZGF0YWJhc2VfY2xlYW51cChkYXRhYmFzZSk7CisgKiBdfAorICoK
ICAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKCkgY2FuIGJlIHVzZWQgdG8gY2hhbmdl
IHRoZSBsb2NhdGlvbgogICogb2YgdGhlIGRhdGFiYXNlIGFuZCBhbHNvIHRvIGRpc2FibGUgaXQg
YnkgcGFzc2luZyAlTlVMTC4KICAqCkBAIC03MSw2ICs5OCw4IEBAIGVudW0gewogCiBlbnVtIHsK
ICAgICBJQ09OX0xPQURFRCwKKyAgICBJQ09OX0FEREVELAorICAgIElDT05TX1JFTU9WRUQsCiAK
ICAgICBMQVNUX1NJR05BTAogfTsKQEAgLTE3Miw2ICsyMDEsNDQgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0X2ljb25fZGF0YWJhc2VfY2xhc3NfaW5pdChXZWJLaXRJY29uRGF0YWJhc2VDbGFzcyoga2xh
c3MpCiAgICAgICAgICAgICBXRUJLSVRfVFlQRV9XRUJfRlJBTUUsCiAgICAgICAgICAgICBHX1RZ
UEVfU1RSSU5HKTsKIAorICAgIC8qKgorICAgICAqIFdlYktpdEljb25EYXRhYmFzZTo6aWNvbi1h
ZGRlZDoKKyAgICAgKiBAZGF0YWJhc2U6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBp
cyBlbWl0dGVkCisgICAgICogQHBhZ2VfdXJpOiB0aGUgVVJJIG9mIHRoZSBwYWdlIHRoZSBpY29u
IHdhcyByZWFkIGZvcgorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVu
IGEgY2FjaGVkIGZhdmljb24gb24gZGlzayBpcyBsb2FkZWQKKyAgICAgKiBpbnRvIG1lbW9yeSBh
bmQgbWFkZSBhdmFpbGFibGUgZm9yIGFwcHMuIE5vdGUgdGhhdAorICAgICAqIHdlYmtpdF9pY29u
X2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZigpIHdvdWxkIHJldHVybiBOVUxMIGV2ZW4KKyAgICAg
KiBpZiB0aGUgaWNvbiBpcyBhY3R1YWxseSBjYWNoZWQgdW50aWwgdGhpcyBzaWduYWwgaXMgZW1p
dHRlZC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuMTQKKyAgICAgKi8KKyAgICB3ZWJraXRf
aWNvbl9kYXRhYmFzZV9zaWduYWxzW0lDT05fQURERURdID0gZ19zaWduYWxfbmV3KCJpY29uLWFk
ZGVkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGtsYXNzKSwKKyAgICAgICAgICAg
IChHU2lnbmFsRmxhZ3MpR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAwLAorICAgICAg
ICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21h
cnNoYWxfVk9JRF9fU1RSSU5HLAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCisgICAgICAg
ICAgICBHX1RZUEVfU1RSSU5HKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdEljb25EYXRhYmFz
ZTo6aWNvbnMtcmVtb3ZlZDoKKyAgICAgKiBAZGF0YWJhc2U6IHRoZSBvYmplY3Qgb24gd2hpY2gg
dGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0
dGVkIHdoZW4gYWxsIHRoZSBpY29ucyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBkYWJhdGFzZQorICAg
ICAqIFNpbmNlOiAxLjMuMTQKKyAgICAgKi8KKyAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zaWdu
YWxzW0lDT05TX1JFTU9WRURdID0gZ19zaWduYWxfbmV3KCJpY29ucy1yZW1vdmVkIiwKKyAgICAg
ICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGtsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxh
Z3MpR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgTlVMTCwK
KyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9f
Vk9JRCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsKKwogICAgIGdfdHlwZV9jbGFzc19h
ZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdEljb25EYXRhYmFzZVByaXZhdGUpKTsKIH0K
IApAQCAtMTgwLDYgKzI0NywxOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9p
bml0KFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpCiAgICAgZGF0YWJhc2UtPnByaXYgPSBH
X1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoZGF0YWJhc2UsIFdFQktJVF9UWVBFX0lDT05fREFU
QUJBU0UsIFdlYktpdEljb25EYXRhYmFzZVByaXZhdGUpOwogICAgIC8vICdwbGFjZW1lbnQgbmV3
IHN5bnRheCcsIHNlZSB3ZWJraXR3ZWJ2aWV3LmNwcAogICAgIG5ldyAoZGF0YWJhc2UtPnByaXYp
IFdlYktpdEljb25EYXRhYmFzZVByaXZhdGUoKTsKKworICAgIC8vIERpc2FibGVkIGJ5IGRlZmF1
bHQKKyAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5zZXRFbmFibGVkKGZhbHNlKTsKK30KKwor
c3RhdGljIEljb25EYXRhYmFzZUNsaWVudEd0ayogZGVmYXVsdENsaWVudCgpCit7CisjaWYgRU5B
QkxFKElDT05EQVRBQkFTRSkKKyAgICBzdGF0aWMgSWNvbkRhdGFiYXNlQ2xpZW50R3RrKiBkZWZh
dWx0Q2xpZW50ID0gbmV3IEljb25EYXRhYmFzZUNsaWVudEd0aygpOworICAgIHJldHVybiBkZWZh
dWx0Q2xpZW50OworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgogfQogCiAvKioKQEAgLTE4
OCw3ICsyNjgsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9pbml0KFdlYktp
dEljb25EYXRhYmFzZSogZGF0YWJhc2UpCiAgKgogICogRGV0ZXJtaW5lcyB0aGUgYWJzb2x1dGUg
cGF0aCB0byB0aGUgZGF0YWJhc2UgZm9sZGVyIG9uIGRpc2suCiAgKgotICogUmV0dXJuczogdGhl
IGFic29sdXRlIHBhdGggb2YgdGhlIGRhdGFiYXNlIGZvbGRlciwgb3IgJU5VTEwKKyAqIFJldHVy
bnM6IHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBkYXRhYmFzZSBmb2xkZXIKICAqCiAgKiBTaW5j
ZTogMS4zLjEzCiAgKiovCkBAIC0xOTYsMTQgKzI3Niw2NiBAQCBHX0NPTlNUX1JFVFVSTiBnY2hh
ciogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3BhdGgoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRh
YmFzZQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19JQ09OX0RBVEFCQVNF
KGRhdGFiYXNlKSwgMCk7CiAKKyAgICBpZiAoIWRhdGFiYXNlLT5wcml2LT5wYXRoLmdldCgpKSB7
CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IGljb25EYXRhYmFzZVBhdGgoZ19idWlsZF9maWxlbmFt
ZShnX2dldF91c2VyX2RhdGFfZGlyKCksICJ3ZWJraXQiLCAiaWNvbmRhdGFiYXNlIiwgTlVMTCkp
OworICAgICAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aChkYXRhYmFzZSwgaWNvbkRh
dGFiYXNlUGF0aC5nZXQoKSk7CisgICAgfQorCiAgICAgcmV0dXJuIGRhdGFiYXNlLT5wcml2LT5w
YXRoLmdldCgpOwogfQogCiBzdGF0aWMgdm9pZCBjbG9zZUljb25EYXRhYmFzZU9uRXhpdCgpCiB7
Ci0gICAgaWYgKFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLmlzRW5hYmxlZCgpKSB7CisgICAgV2Vi
Q29yZTo6aWNvbkRhdGFiYXNlKCkuY2xvc2UoKTsKK30KKworc3RhdGljIHZvaWQgc3RhcnRVcElj
b25EYXRhYmFzZShXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAgIFdlYkNvcmU6
Omljb25EYXRhYmFzZSgpLnNldENsaWVudChkZWZhdWx0Q2xpZW50KCkpOworICAgIFdlYkNvcmU6
Omljb25EYXRhYmFzZSgpLm9wZW4oV2ViQ29yZTo6ZmlsZW5hbWVUb1N0cmluZyh3ZWJraXRfaWNv
bl9kYXRhYmFzZV9nZXRfcGF0aChkYXRhYmFzZSkpKTsKKworICAgIHN0YXRpYyBib29sIGluaXRp
YWxpemVkID0gZmFsc2U7CisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBhdGV4aXQo
Y2xvc2VJY29uRGF0YWJhc2VPbkV4aXQpOworICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7Cisg
ICAgfQorfQorCisvKioKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2lzX2VuYWJsZWQ6CisgKiBA
ZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQorICoKKyAqIFdoZXRoZXIgb3Igbm90IHRo
ZSBpY29uIGRhdGFiYXNlIGlzIGVuYWJsZWQKKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBk
YXRhYmFzZSBpcyBlbmFibGVkLCBGQUxTRSBvdGhlcndpc2UKKyAqCisgKiBTaW5jZTogMS4zLjE0
CisgKiovCitnYm9vbGVhbiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9pc19lbmFibGVkKFdlYktpdElj
b25EYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6Omljb25EYXRhYmFz
ZSgpLmlzRW5hYmxlZCgpOworfQorCisvKioKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9l
bmFibGVkOgorICogQGRhdGFiYXNlOiBhICNXZWJLaXRJY29uRGF0YWJhc2UKKyAqIEBlbmFibGVk
OiBUUlVFIHRvIGVuYWJsZSB0aGUgZGF0YWJhc2UsIEZBTFNFIHRvIGRpc2FibGUgaXQKKyAqCisg
KiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBpY29uIGRhdGFiYXNlLiBXZWJLaXQgd2lsbCBvcGVu
IGFuZCByZWFkCisgKiB0aGUgaWNvbiBkYXRhYmFzZSBhcyBzb29uIGFzIGl0IGlzIGVuYWJsZWQu
IE5vdGUgdGhhdCBtb3N0IG9mCisgKiAjV2ViS2l0SWNvbkRhdGFiYXNlIG1ldGhvZHMgcmVxdWly
ZSB0aGUgZGF0YWJhc2UgdG8gYmUgZW5hYmxlZC4KKyAqCisgKiBTaW5jZTogMS4zLjE0CisgKiov
Cit2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9lbmFibGVkKFdlYktpdEljb25EYXRhYmFz
ZSogZGF0YWJhc2UsIGdib29sZWFuIGVuYWJsZWQpCit7CisgICAgZ2Jvb2xlYW4gY3VycmVudGx5
RW5hYmxlZCA9IHdlYmtpdF9pY29uX2RhdGFiYXNlX2lzX2VuYWJsZWQoZGF0YWJhc2UpOworCisg
ICAgaWYgKGN1cnJlbnRseUVuYWJsZWQgJiYgIWVuYWJsZWQpCiAgICAgICAgIFdlYkNvcmU6Omlj
b25EYXRhYmFzZSgpLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICBXZWJDb3JlOjppY29uRGF0
YWJhc2UoKS5jbG9zZSgpOworICAgIGVsc2UgaWYgKCFjdXJyZW50bHlFbmFibGVkICYmIGVuYWJs
ZWQpIHsKKyAgICAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc2V0RW5hYmxlZCh0cnVlKTsK
KyAgICAgICAgc3RhcnRVcEljb25EYXRhYmFzZShkYXRhYmFzZSk7CiAgICAgfQogfQogCkBAIC0y
MTQsMzMgKzM0NiwyMCBAQCBzdGF0aWMgdm9pZCBjbG9zZUljb25EYXRhYmFzZU9uRXhpdCgpCiAg
KgogICogU3BlY2lmaWVzIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBkYXRhYmFzZSBmb2xkZXIg
b24gZGlzay4KICAqCi0gKiBQYXNzaW5nICVOVUxMIG9yICIiIGRpc2FibGVzIHRoZSBpY29uIGRh
dGFiYXNlLgotICoKICAqIFNpbmNlOiAxLjMuMTMKICAqKi8KIHZvaWQgd2Via2l0X2ljb25fZGF0
YWJhc2Vfc2V0X3BhdGgoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIq
IHBhdGgpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShk
YXRhYmFzZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwocGF0aCk7CiAKLSAgICBpZiAoZGF0YWJh
c2UtPnByaXYtPnBhdGguZ2V0KCkpCisgICAgaWYgKGdfc3RyY21wMChwYXRoLCBkYXRhYmFzZS0+
cHJpdi0+cGF0aC5nZXQoKSkpCiAgICAgICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLmNsb3Nl
KCk7CiAKLSAgICBpZiAoIShwYXRoICYmIHBhdGhbMF0pKSB7Ci0gICAgICAgIGRhdGFiYXNlLT5w
cml2LT5wYXRoLnNldCgwKTsKLSAgICAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc2V0RW5h
YmxlZChmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBkYXRhYmFzZS0+cHJp
di0+cGF0aC5zZXQoZ19zdHJkdXAocGF0aCkpOwogCi0gICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNl
KCkuc2V0RW5hYmxlZCh0cnVlKTsKLSAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5vcGVuKFdl
YkNvcmU6OmZpbGVuYW1lVG9TdHJpbmcoZGF0YWJhc2UtPnByaXYtPnBhdGguZ2V0KCkpKTsKLQot
ICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgaWYgKCFpbml0aWFsaXpl
ZCkgewotICAgICAgICBhdGV4aXQoY2xvc2VJY29uRGF0YWJhc2VPbkV4aXQpOwotICAgICAgICBp
bml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQorICAgIGlmIChXZWJDb3JlOjppY29uRGF0YWJhc2Uo
KS5pc0VuYWJsZWQoKSkKKyAgICAgICAgc3RhcnRVcEljb25EYXRhYmFzZShkYXRhYmFzZSk7CiB9
CiAKIC8qKgpAQCAtMjQ4LDEwICszNjcsMTMgQEAgdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9z
ZXRfcGF0aChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBnY2hhciogcGEKICAq
IEBkYXRhYmFzZTogYSAjV2ViS2l0SWNvbkRhdGFiYXNlCiAgKiBAcGFnZV91cmk6IFVSSSBvZiB0
aGUgcGFnZSBjb250YWluaW5nIHRoZSBpY29uCiAgKgotICogT2J0YWlucyB0aGUgVVJJIGZvciB0
aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVuIHBhZ2UgVVJJLgotICogU2VlIGFsc28gd2Via2l0X3dl
Yl92aWV3X2dldF9pY29uX3VyaSgpLgorICogT2J0YWlucyB0aGUgVVJJIGZvciB0aGUgZmF2aWNv
biBmb3IgdGhlIGdpdmVuIHBhZ2UgVVJJLiBTZWUgYWxzbworICogd2Via2l0X3dlYl92aWV3X2dl
dF9pY29uX3VyaSgpLgorICoKKyAqIFJlcXVpcmVzIGFuIGVuYWJsZWQgZGF0YWJhc2UuCiAgKgot
ICogUmV0dXJuczogYSBuZXdseSBhbGxvY2F0ZWQgVVJJIGZvciB0aGUgZmF2aWNvbiwgb3IgJU5V
TEwKKyAqIFJldHVybnM6IGEgbmV3bHkgYWxsb2NhdGVkIFVSSSBmb3IgdGhlIGZhdmljb24sIG9y
ICVOVUxMIGlmIHRoZQorICogaWNvbiBpcyBub3QgY2FjaGVkIG9yIHRoZSBkYXRhYmFzZSBpcyBu
b3QgZW5hYmxlZC4KICAqCiAgKiBTaW5jZTogMS4zLjEzCiAgKiovCkBAIC0yNjAsNiArMzgyLDkg
QEAgZ2NoYXIqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3VyaShXZWJLaXRJY29uRGF0
YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBnY2gKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfSUNPTl9EQVRBQkFTRShkYXRhYmFzZSksIDApOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKHBhZ2VVUkksIDApOwogCisgICAgaWYgKCFXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5pc0Vu
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBTdHJpbmcgcGFnZVVSTCA9IFN0cmlu
Zzo6ZnJvbVVURjgocGFnZVVSSSk7CiAgICAgcmV0dXJuIGdfc3RyZHVwKFdlYkNvcmU6Omljb25E
YXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwocGFnZVVSTCkudXRmOCgpLmRh
dGEoKSk7CiB9CkBAIC0yNjgsMjYgKzM5Myw0MSBAQCBnY2hhciogd2Via2l0X2ljb25fZGF0YWJh
c2VfZ2V0X2ljb25fdXJpKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGdjaAog
ICogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmOgogICogQGRhdGFiYXNlOiBh
ICNXZWJLaXRJY29uRGF0YWJhc2UKICAqIEBwYWdlX3VyaTogVVJJIG9mIHRoZSBwYWdlIGNvbnRh
aW5pbmcgdGhlIGljb24KKyAqIEBzaXplOiB0aGUgZGVzaXJlZCB3aWR0aCBhbmQgbGVuZ3RoIGZv
ciB0aGUgaWNvbgorICoKKyAqIE9idGFpbnMgYSAjR2RrUGl4YnVmIG9mIHRoZSBmYXZpY29uIGZv
ciB0aGUgZ2l2ZW4gcGFnZSBVUkksIG9yIGEKKyAqIGRlZmF1bHQgaWNvbiBpZiB0aGVyZSBpcyBu
byBpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZS4gVXNlCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9n
ZXRfaWNvbl91cmkoKSBpZiB5b3UgbmVlZCB0byBkaXN0aW5ndWlzaAorICogdGhlc2UgY2FzZXMu
ICBVc3VhbGx5IHlvdSB3YW50IHRvIGNvbm5lY3QgdG8KKyAqIFdlYktpdEljb25EYXRhYmFzZTo6
aWNvbi1sb2FkZWQgYW5kL29yCisgKiBXZWJLaXRJY29uRGF0YWJhc2U6Omljb24tYWRkZWQgYW5k
IGNhbGwgdGhpcyBtZXRob2QgaW4gdGhlCisgKiBjYWxsYmFjay4KICAqCi0gKiBPYnRhaW5zIGEg
I0dka1BpeGJ1ZiBvZiB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVuIHBhZ2UgVVJJLCBvcgotICog
YSBkZWZhdWx0IGljb24gaWYgdGhlcmUgaXMgbm8gaWNvbiBmb3IgdGhlIGdpdmVuIHBhZ2UuIFVz
ZQotICogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpKCkgaWYgeW91IG5lZWQgdG8g
ZGlzdGluZ3Vpc2ggdGhlc2UgY2FzZXMuCi0gKiBVc3VhbGx5IHlvdSB3YW50IHRvIGNvbm5lY3Qg
dG8gV2ViS2l0SWNvbkRhdGFiYXNlOjppY29uLWxvYWRlZCBhbmQgY2FsbCB0aGlzCi0gKiBtZXRo
b2QgaW4gdGhlIGNhbGxiYWNrLgorICogQXMgdGhlIFdlYktpdCdzIEljb25EYXRhYmFzZSBsb2Fk
cyB0aGUgaWNvbiBkYXRhIGFzeW5jaHJvbm91c2x5IGFuZAorICogaW4gYSBwZXItZGVtYW5kIGJh
c2lzLCB0aGlzIG1ldGhvZCBjb3VsZCByZXR1cm4gTlVMTCBldmVuIGlmIHRoZQorICogaWNvbiBp
cyBhY3R1YWxseSBjYWNoZWQuIElmIHRoZSBjYWxsZXIga25vd3MgdGhhdCB0aGUgaWNvbiBzaG91
bGQKKyAqIGJlIGNhY2hlZCB0aGVuIGl0IHNob3VsZCBsaXN0ZW4gdG8gaWNvbi1hZGRlZCBzaWdu
YWwgaW4gb3JkZXIgdG8KKyAqIGtub3cgd2hlbiB0aGUgaWNvbiBkYXRhIGlzIGFjdHVhbGx5IGF2
YWlsYWJsZS4gT3RoZXJ3aXNlIGlmIHRoZQorICogaWNvbiBuZWVkIHRvIGJlIHJldHJpZXZlZCBm
cm9tIGFuIGV4dGVybmFsIHJlc291cmNlIHRoZSBjbGllbnQKKyAqIHNob3VsZCBjb25uZWN0IHRv
IGljb24tbG9hZGVkIHNpZ25hbC4KICAqCi0gKiBUaGUgcGl4YnVmIHdpbGwgaGF2ZSB0aGUgbGFy
Z2VzdCBzaXplIHByb3ZpZGVkIGJ5IHRoZSBzZXJ2ZXIgYW5kIHNob3VsZAotICogYmUgcmVzaXpl
ZCBiZWZvcmUgaXQgaXMgZGlzcGxheWVkLgotICogU2VlIGFsc28gd2Via2l0X3dlYl92aWV3X2dl
dF9pY29uX3BpeGJ1ZigpLgorICogUmVxdWlyZXMgYW4gZW5hYmxlZCBkYXRhYmFzZS4KKyAqCisg
KiBJZiBAc2l6ZSBpcyAwIHRoZSBwaXhidWYgd2lsbCBoYXZlIHRoZSBsYXJnZXN0IHNpemUgcHJv
dmlkZWQgYnkgdGhlCisgKiBzZXJ2ZXIuIFNlZSBhbHNvIHdlYmtpdF93ZWJfdmlld19nZXRfaWNv
bl9waXhidWYoKS4KICAqCiAgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IHJlZmVy
ZW5jZSB0byBhICNHZGtQaXhidWYsIG9yICVOVUxMCiAgKgogICogU2luY2U6IDEuMy4xMwogICoq
LwotR2RrUGl4YnVmKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoV2ViS2l0
SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkkpCitHZGtQaXhidWYq
IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZihXZWJLaXRJY29uRGF0YWJhc2Uq
IGRhdGFiYXNlLCBjb25zdCBnY2hhciogcGFnZVVSSSwgZ3VpbnQgc2l6ZSkKIHsKICAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShkYXRhYmFzZSksIDApOwog
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHBhZ2VVUkksIDApOwogCisgICAgaWYgKCFXZWJDb3Jl
OjppY29uRGF0YWJhc2UoKS5pc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBT
dHJpbmcgcGFnZVVSTCA9IFN0cmluZzo6ZnJvbVVURjgocGFnZVVSSSk7CiAgICAgLy8gVGhlIGV4
YWN0IHNpemUgd2UgcGFzcyBpcyBpcnJlbGV2YW50IHRvIHRoZSBXZWJDb3JlOjppY29uRGF0YWJh
c2UgY29kZS4KICAgICAvLyBXZSBtdXN0IHBhc3Mgc29tZXRoaW5nIGdyZWF0ZXIgdGhhbiAwLCAw
IHRvIGdldCBhIHBpeGJ1Zi4KQEAgLTI5Nyw3ICs0MzcsMTEgQEAgR2RrUGl4YnVmKiB3ZWJraXRf
aWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSwgY28KICAgICBHZGtQaXhidWYqIHBpeGJ1ZiA9IGljb24tPmdldEdka1BpeGJ1ZigpOwogICAg
IGlmICghcGl4YnVmKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
R2RrUGl4YnVmKj4oZ19vYmplY3RfcmVmKHBpeGJ1ZikpOworCisgICAgaWYgKCFzaXplKQorICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R2RrUGl4YnVmKj4oZ19vYmplY3RfcmVmKHBpeGJ1Zikp
OworCisgICAgcmV0dXJuIGdka19waXhidWZfc2NhbGVfc2ltcGxlKHBpeGJ1Ziwgc2l6ZSwgc2l6
ZSwgR0RLX0lOVEVSUF9CSUxJTkVBUik7CiB9CiAKIC8qKgpAQCAtMzA2LDEyICs0NTAsNzggQEAg
R2RrUGl4YnVmKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoV2ViS2l0SWNv
bkRhdGFiYXNlKiBkYXRhYmFzZSwgY28KICAqCiAgKiBDbGVhcnMgYWxsIGljb25zIGZyb20gdGhl
IGRhdGFiYXNlLgogICoKKyAqIFJlcXVpcmVzIGFuIGVuYWJsZWQgZGF0YWJhc2UuCisgKgogICog
U2luY2U6IDEuMy4xMwogICoqLwogdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhcihXZWJL
aXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpKTsKIAorICAgIGlmICghV2ViQ29yZTo6aWNvbkRh
dGFiYXNlKCkuaXNFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIFdlYkNvcmU6Omlj
b25EYXRhYmFzZSgpLnJlbW92ZUFsbEljb25zKCk7CiB9CiAKKy8qKgorICogd2Via2l0X2ljb25f
ZGF0YWJhc2VfZGF0YWJhc2VfY2xlYW51cDoKKyAqIEBkYXRhYmFzZTogYSAjV2ViS2l0SWNvbkRh
dGFiYXNlCisgKgorICogVXNlIHRoaXMgbWV0aG9kIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBkYXRh
YmFzZSBkb2VzIG5vdCByZW1vdmUKKyAqIHVucmV0YWluZWQgaWNvbnMgcHJlbWF0dXJlbHkuIEJ5
IGRlZmF1bHQgZGF0YWJhc2UgY2xlYW51cCB3aWxsIGJlCisgKiBzdGFydGVkIGFmdGVyIG9wZW5p
bmcgdGhlIGRhdGFiYXNlLCB1bmxlc3Mgd2UgZXhwbGljaXRseSBkZWxheQorICogaXQuIFVzZSB3
ZWJraXRfaWNvbl9kYXRhYmFzZV9yZXRhaW5faWNvbl9mb3JfdXJpKCkgZm9yIGVhY2ggaWNvbiB5
b3UKKyAqIHdhbnQgdG8ga2VlcCBhbmQgb25jZSBhbGwgYXJlIHJldGFpbmVkIGNhbGwgYWxsb3dE
YXRhYmFzZUNsZWFudXAgdG8KKyAqIHJldmVydCB0aGUgZWZmZWN0cyBvZiB0aGlzIGNhbGwuCisg
KgorICogU2luY2UgMS4zLjE0CisgKiovCit2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX2RlbGF5
X2NsZWFudXAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9JU19JQ09OX0RBVEFCQVNFKGRhdGFiYXNlKSk7CisKKyAgICBXZWJDb3Jl
OjpJY29uRGF0YWJhc2U6OmRlbGF5RGF0YWJhc2VDbGVhbnVwKCk7Cit9CisKKy8qKgorICogd2Vi
a2l0X2ljb25fZGF0YWJhc2VfYWxsb3dfY2xlYW51cDoKKyAqIEBkYXRhYmFzZTogYSAjV2ViS2l0
SWNvbkRhdGFiYXNlCisgKgorICogUmV2ZXJ0cyB0aGUgZWZmZWN0IG9mCisgKiB3ZWJraXRfaWNv
bl9kYXRhYmFzZV9kZWxheV9kYXRhYmFzZV9jbGVhbnVwKCkuIFRpcGljYWxseSB0aGlzCisgKiBm
dW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBhbGwgdGhlIHJlcXVpcmVkIGljb25zIGFyZSBy
ZXRhaW5lZAorICogKHVzZSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9yZXRhaW5faWNvbl9mb3JfdXJp
KCkgZm9yIHRoYXQpLgorICoKKyAqIFNpbmNlIDEuMy4xNAorICoqLwordm9pZCB3ZWJraXRfaWNv
bl9kYXRhYmFzZV9hbGxvd19jbGVhbnVwKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpCit7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShkYXRhYmFzZSkp
OworCisgICAgV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjphbGxvd0RhdGFiYXNlQ2xlYW51cCgpOwor
fQorCisvKioKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX3JldGFpbl9pY29uX2Zvcl91cmk6Cisg
KiBAZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQorICogQHBhZ2VfdXJpOiB0aGUgVVJM
IG9mIHRoZSB3ZWIgcGFnZSB0aGUgaWNvbiBiZWxvbmdzIHRvCisgKgorICogTm90ZSB0aGF0IHRo
aXMgY2FsbCB3aWxsIG5vdCBiZSBlZmZlY3RpdmUgdW5sZXNzIHRoZSBkYXRhYmFzZSBpcworICog
ZW5hYmxlZCwgaS5lLCB5b3UgaGF2ZSB0byBjYWxsIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9w
YXRoKCkgdG8KKyAqIG9wZW4gYW5kIGVuYWJsZSBpdCBiZWZvcmUgdHJ5aW5nIHRvIHJldGFpbiBh
bnkgaWNvbi4KKyAqCisgKiBSZXF1aXJlcyBhbiBlbmFibGVkIGRhdGFiYXNlLgorICoKKyAqIFNp
bmNlIDEuMy4xNAorICoqLwordm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9yZXRhaW5faWNvbl9m
b3JfdXJpKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAgICBwYWdlX3VyaSkK
K3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19JQ09OX0RBVEFCQVNFKGRhdGFiYXNl
KSk7CisKKyAgICBpZiAoIVdlYkNvcmU6Omljb25EYXRhYmFzZSgpLmlzRW5hYmxlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5yZXRhaW5JY29uRm9y
UGFnZVVSTChTdHJpbmc6OmZyb21VVEY4KHBhZ2VfdXJpKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmgKaW5kZXggN2ZlNWFjZDdjNzMyMDAzMGEz
NzQxMjcwOTE4MDM1MmZhMDE4OGYxNS4uOTQ1NzNiZGIxMjU4Mzg0ZmE4YzFhM2EzNGZmM2Y0MzIw
MmI1NzNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25k
YXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJh
c2UuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ2hyaXN0aWFu
IER5d2FuIDxjaHJpc3RpYW5AbGFuZWRvLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01NSw2ICs1NiwxMyBAQCBzdHJ1Y3QgX1dl
YktpdEljb25EYXRhYmFzZUNsYXNzIHsKIFdFQktJVF9BUEkgR1R5cGUKIHdlYmtpdF9pY29uX2Rh
dGFiYXNlX2dldF90eXBlICAgICAgICAgICAgKHZvaWQpOwogCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9pY29uX2RhdGFiYXNlX3NldF9lbmFibGVkICAgICAgICAgKFdlYktpdEljb25EYXRhYmFz
ZSogZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
Ym9vbGVhbiAgICAgICAgICAgIGVuYWJsZWQpOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJr
aXRfaWNvbl9kYXRhYmFzZV9pc19lbmFibGVkICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2Uq
IGRhdGFiYXNlKTsKKwogV0VCS0lUX0FQSSBHX0NPTlNUX1JFVFVSTiBnY2hhcioKIHdlYmtpdF9p
Y29uX2RhdGFiYXNlX2dldF9wYXRoICAgICAgICAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0
YWJhc2UpOwogCkBAIC02OCwxMSArNzYsMjIgQEAgd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2lj
b25fdXJpICAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKIAogV0VCS0lUX0FQ
SSBHZGtQaXhidWYqCiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYgICAgIChX
ZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAgICBwYWdlX3VyaSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhZ2Vf
dXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAg
ICAgICAgICAgICBzaXplKTsKIAogV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9jbGVhciAgICAgICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKTsKIAor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfaWNvbl9kYXRhYmFzZV9yZXRhaW5faWNvbl9mb3JfdXJp
IChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAgICBwYWdlX3VyaSk7CisKK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2ljb25fZGF0YWJhc2VfZGVsYXlfY2xlYW51cCAgICAgICAoV2Vi
S2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2lj
b25fZGF0YWJhc2VfYWxsb3dfY2xlYW51cCAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRh
YmFzZSk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZiAvKiB3ZWJraXRpY29uZGF0YWJhc2VfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCmluZGV4IGU2MDlk
MzE4YjVlNDJhZDQ4Y2RkOWZiZDkxYTFlZjdlNmJjY2JlMmYuLjIxYmJlZWJhOGFlNWQzMTE4NjY4
Y2Y0MTVmNDgxZjVhMzM2ZThlZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vidmlldy5jcHAKQEAgLTUwNzQsNiArNTA3NCw3IEBAIEdfQ09OU1RfUkVUVVJOIGdjaGFyKiB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAvKioK
ICAqIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl9waXhidWY6CiAgKiBAd2ViVmlldzogdGhlICNX
ZWJLaXRXZWJWaWV3IG9iamVjdAorICogQHNpemU6IHRoZSBkZXNpcmVkIGxlbmd0aCBhbmQgd2lk
dGggZm9yIHRoZSBpY29uCiAgKgogICogT2J0YWlucyBhICNHZGtQaXhidWYgb2YgdGhlIGZhdmlj
b24gZm9yIHRoZSBnaXZlbiAjV2ViS2l0V2ViVmlldywgb3IKICAqIGEgZGVmYXVsdCBpY29uIGlm
IHRoZXJlIGlzIG5vIGljb24gZm9yIHRoZSBnaXZlbiBwYWdlLiBVc2UKQEAgLTUwODEsMjEgKzUw
ODIsMjAgQEAgR19DT05TVF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91
cmkoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAqIFVzdWFsbHkgeW91IHdhbnQgdG8gY29ubmVj
dCB0byBXZWJLaXRXZWJWaWV3OjppY29uLWxvYWRlZCBhbmQgY2FsbCB0aGlzCiAgKiBtZXRob2Qg
aW4gdGhlIGNhbGxiYWNrLgogICoKLSAqIFRoZSBwaXhidWYgd2lsbCBoYXZlIHRoZSBsYXJnZXN0
IHNpemUgcHJvdmlkZWQgYnkgdGhlIHNlcnZlciBhbmQgc2hvdWxkCi0gKiBiZSByZXNpemVkIGJl
Zm9yZSBpdCBpcyBkaXNwbGF5ZWQuCi0gKiBTZWUgYWxzbyB3ZWJraXRfaWNvbl9kYXRhYmFzZV9n
ZXRfaWNvbl9waXhidWYoKS4KKyAqIElmIEBzaXplIGlzIDAgdGhlbiB0aGUgcGl4YnVmIHdpbGwg
aGF2ZSB0aGUgbGFyZ2VzdCBzaXplIHByb3ZpZGVkCisgKiBieSB0aGUgc2VydmVyLiBTZWUgYWxz
byB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoKS4KICAqCiAgKiBSZXR1cm5z
OiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IHJlZmVyZW5jZSB0byBhICNHZGtQaXhidWYsIG9yICVO
VUxMCiAgKgogICogU2luY2U6IDEuMy4xMwogICovCi1HZGtQaXhidWYqIHdlYmtpdF93ZWJfdmll
d19nZXRfaWNvbl9waXhidWYoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK0dka1BpeGJ1Ziogd2Vi
a2l0X3dlYl92aWV3X2dldF9pY29uX3BpeGJ1ZihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBndWlu
dCBzaXplKQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3
ZWJWaWV3KSwgMCk7CiAKICAgICBjb25zdCBnY2hhciogcGFnZVVSSSA9IHdlYmtpdF93ZWJfdmll
d19nZXRfdXJpKHdlYlZpZXcpOwogICAgIFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3
ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKLSAgICByZXR1cm4gd2Via2l0X2ljb25fZGF0YWJh
c2VfZ2V0X2ljb25fcGl4YnVmKGRhdGFiYXNlLCBwYWdlVVJJKTsKKyAgICByZXR1cm4gd2Via2l0
X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmKGRhdGFiYXNlLCBwYWdlVVJJLCBzaXplKTsK
IH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmll
dy5oIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAppbmRleCAzOGM5
YTcwMjI0MjUxMjgzYTJmN2IzOTk2MmUyYjkxMWZjODUwNTEyLi4zNDE4NzMwYjcyMTljMTU4NmIy
ZDQ3MjQyODA3ZTRlODQyNTQxZTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmgKQEAgLTM5OCw3ICszOTgsOCBAQCBXRUJLSVRfQVBJIEdfQ09OU1RfUkVUVVJOIGdj
aGFyICoKIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkgICAgICAgICAgICAgICAgICAgIChX
ZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldyk7CiAKIFdFQktJVF9BUEkgR2RrUGl4YnVmICoK
LXdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl9waXhidWYgICAgICAgICAgICAgICAgIChXZWJLaXRX
ZWJWaWV3ICAgICAgICAqd2ViVmlldyk7Cit3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fcGl4YnVm
ICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYlZpZXcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAg
ICAgICAgIHNpemUpOwogCiBXRUJLSVRfQVBJIFdlYktpdERPTURvY3VtZW50ICoKIHdlYmtpdF93
ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50ICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAg
ICAgICAqd2ViVmlldyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87701</attachid>
            <date>2011-03-31 04:50:55 -0700</date>
            <delta_ts>2011-05-04 08:25:06 -0700</delta_ts>
            <desc>New API for WebKitIconDatabase</desc>
            <filename>0001-Added-some-new-API-for-WebKitIconDatabase.patch</filename>
            <type>text/plain</type>
            <size>30086</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSAyMTE4MzY0ZjQ4YjBhOGE1N2JlODFjYmI0OTNiMjM5NWRkMTFhMmNlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFdlZCwgMjMgTWFyIDIwMTEgMTk6NDY6MDMgKzAxMDAKU3ViamVjdDogW1BBVENI
IDEvMl0gQWRkZWQgc29tZSBuZXcgQVBJIGZvciBXZWJLaXRJY29uRGF0YWJhc2UKIFdvcmtpbmcg
YWZ0ZXIgbGFzdCBiZWlkc29uIGNoYW5nZXMKCi0tLQogU291cmNlL1dlYktpdC9ndGsvQ2hhbmdl
TG9nICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQzICsrKwogU291cmNlL1dlYktpdC9ndGsv
R05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgfCAgICAyICsKIC4uLi9ndGsvV2ViQ29y
ZVN1cHBvcnQvSWNvbkRhdGFiYXNlQ2xpZW50R3RrLmNwcCAgIHwgICA3MyArKysrKwogLi4uL2d0
ay9XZWJDb3JlU3VwcG9ydC9JY29uRGF0YWJhc2VDbGllbnRHdGsuaCAgICAgfCAgIDUwICsrKysK
IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcCAgICAgICAgIHwgICAg
MiAtCiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcCAgICB8
ICAyOTggKysrKysrKysrKysrKysrKystLS0KIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRpY29uZGF0YWJhc2UuaCAgICAgIHwgICAyMSArKy0KIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmNwcCAgICAgICAgIHwgICAxMCArLQogU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnZpZXcuaCAgICAgICAgICAgfCAgICAzICstCiA5IGZpbGVzIGNoYW5n
ZWQsIDQ1NiBpbnNlcnRpb25zKCspLCA0NiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JY29uRGF0YWJhc2VDbGllbnRHdGsu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
SWNvbkRhdGFiYXNlQ2xpZW50R3RrLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggMDVjMTVkNC4uMTUy
ZWM5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDExLTAzLTI0ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFdlYktpdEljb25EYXRhYmFzZSBk
b2Vzbid0IGtlZXAgaWNvbnMgY2FjaGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01NjIwMAorCisgICAgICAgIEFkZGVkIG5ldyBBUEkgdG8gYWxsb3cg
YXBwcyB0byByZXRhaW4gVVJMcyBpbiB0aGUgSWNvbkRhdGFiYXNlLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggYWxzbyByZW1vdmVzIHRoZSBJY29uRGF0YWJhc2Ugb3BlbmluZyBmcm9tIFdlYktpdEd0
ayssIGFwcHMKKyAgICAgICAgc2hvdWxkIGRvIHRoYXQuIElmIHdlIG9wZW4gdGhlIGRhdGFiYXNl
IGluIFdlYktpdCBhcHBzIHdvbid0IGhhdmUgdGhlIGNoYW5jZQorICAgICAgICB0byBkZWxheSBk
YXRhYmFzZSBjbGVhbnVwIHRvIHJldGFpbiBpY29ucyB0aGV5IGFyZSBpbnRlcmVzdGVkIGluLgor
CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvSWNv
bkRhdGFiYXNlQ2xpZW50R3RrLmNwcDogQWRkZWQuCisgICAgICAgIChkaXNwYXRjaERpZEFkZElj
b25Gb3JQYWdlVVJMSW5JZGxlKToKKyAgICAgICAgKGRpc3BhdGNoRGlkUmVtb3ZlQWxsSWNvbnNJ
bklkbGUpOgorICAgICAgICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpkaXNwYXRjaERpZFJlbW92
ZUFsbEljb25zKToKKyAgICAgICAgKEljb25EYXRhYmFzZUNsaWVudEd0azo6ZGlzcGF0Y2hEaWRB
ZGRJY29uRm9yUGFnZVVSTCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvSWNvbkRhdGFiYXNl
Q2xpZW50R3RrLmg6IEFkZGVkLgorICAgICAgICAqIHdlYmtpdC93ZWJraXRnbG9iYWxzLmNwcDoK
KyAgICAgICAgKHdlYmtpdEluaXQpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRpY29uZGF0YWJh
c2UuY3BwOgorICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2VfY2xhc3NfaW5pdCk6CisgICAg
ICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9pbml0KToKKyAgICAgICAgKGRlZmF1bHRDbGllbnQp
OgorICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3BhdGgpOgorICAgICAgICAoY2xv
c2VJY29uRGF0YWJhc2VPbkV4aXQpOgorICAgICAgICAoc3RhcnRVcEljb25EYXRhYmFzZSk6Cisg
ICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9pc19lbmFibGVkKToKKyAgICAgICAgKHdlYmtp
dF9pY29uX2RhdGFiYXNlX3NldF9lbmFibGVkKToKKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFi
YXNlX3NldF9wYXRoKToKKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3Vy
aSk6CisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYpOgorICAg
ICAgICAod2Via2l0X2ljb25fZGF0YWJhc2VfY2xlYXIpOgorICAgICAgICAod2Via2l0X2ljb25f
ZGF0YWJhc2VfZGVsYXlfY2xlYW51cCk6CisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9h
bGxvd19jbGVhbnVwKToKKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX3JldGFpbl9pY29u
X2Zvcl91cmkpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuaDoKKyAgICAg
ICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2ljb25fcGl4YnVmKToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5oOgorCiAy
MDExLTAzLTI5ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBVbnJldmlld2VkLCBkaXNhYmxlIGFuIGFzc2VydCBpbiB0ZXN0d2VidmlldyBkdWUgdG8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dl
YktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggNzAzMGVhOC4uYmU3MWNkMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdC9n
dGsvR05VbWFrZWZpbGUuYW0KQEAgLTE4OSw2ICsxODksOCBAQCB3ZWJraXRndGtfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3JraW5nQ29u
dGV4dEd0ay5oIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVu
VmlkZW9Db250cm9sbGVyLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5oIFwKKwlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9JY29uRGF0YWJhc2VDbGllbnRHdGsuY3BwIFwKKwlTb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9JY29uRGF0YWJhc2VDbGllbnRHdGsuaCBcCiAJU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmNwcCBcCiAJU291cmNlL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmggXAogCVNvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1Bhc3RlYm9hcmRIZWxwZXJHdGsuY3BwIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ljb25EYXRhYmFzZUNsaWVudEd0
ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JY29uRGF0YWJhc2VDbGll
bnRHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZDE0MWUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JY29uRGF0
YWJhc2VDbGllbnRHdGsuY3BwCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SWNvbkRhdGFiYXNlQ2xpZW50R3RrLmgiCisKKyNpbmNsdWRlICJJY29uRGF0YWJhc2UuaCIKKyNp
bmNsdWRlICJ3ZWJraXRnbG9iYWxzLmgiCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUg
PGdsaWIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworI2lmIEVOQUJMRShJQ09OREFUQUJB
U0UpCisKK2Jvb2wgSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpwZXJmb3JtSW1wb3J0KCkKK3sKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpZFJlbW92
ZUFsbEljb25zKCkKK3sKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod2Via2l0X2dldF9pY29u
X2RhdGFiYXNlKCksICJpY29ucy1yZW1vdmVkIik7Cit9CisKK3ZvaWQgSWNvbkRhdGFiYXNlQ2xp
ZW50R3RrOjpkaWRJbXBvcnRJY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIHBhZ2VVUkwp
Cit7CisgICAgLy8gVGhpcyBpcyBhIHF1aWNrIG5vdGlmaWNhdGlvbiB0aGF0IGlzIGxpa2VseSB0
byBmaXJlIGluIGEgcmFwaWRseSBpdGVyYXRpbmcgbG9vcAorICAgIC8vIFRoZXJlZm9yZSB3ZSBs
ZXQgV2ViQ29yZSBoYW5kbGUgYXV0b3JlbGVhc2UgYnkgZHJhaW5pbmcgaXRzIHBvb2wgImZyb20g
dGltZSB0byB0aW1lIgorICAgIC8vIGluc3RlYWQgb2YgdXMgZG9pbmcgaXQgZXZlcnkgaXRlcmF0
aW9uCisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgp
LCAiaWNvbi1jaGFuZ2VkIiwgcGFnZVVSTC51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBJY29u
RGF0YWJhc2VDbGllbnRHdGs6OmRpZEltcG9ydEljb25EYXRhRm9yUGFnZVVSTChjb25zdCBTdHJp
bmcmIHBhZ2VVUkwpCit7CisgICAgLy8gV2ViS2l0MSBvbmx5IGhhcyBhIHNpbmdsZSAiaWNvbiBk
aWQgY2hhbmdlIiBub3RpZmljYXRpb24uCisgICAgZGlkSW1wb3J0SWNvblVSTEZvclBhZ2VVUkwo
cGFnZVVSTCk7Cit9Cit2b2lkIEljb25EYXRhYmFzZUNsaWVudEd0azo6ZGlkQ2hhbmdlSWNvbkZv
clBhZ2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVVJMKQoreworICAgIC8vIFdlYktpdDEgb25seSBo
YXMgYSBzaW5nbGUgImljb24gZGlkIGNoYW5nZSIgbm90aWZpY2F0aW9uLgorICAgIGRpZEltcG9y
dEljb25VUkxGb3JQYWdlVVJMKHBhZ2VVUkwpOworfQorCit2b2lkIEljb25EYXRhYmFzZUNsaWVu
dEd0azo6ZGlkRmluaXNoVVJMSW1wb3J0KCkKK3sKK30KKworI2VuZGlmIC8vIEVOQUJMRShJQ09O
REFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9J
Y29uRGF0YWJhc2VDbGllbnRHdGsuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0ljb25EYXRhYmFzZUNsaWVudEd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjAxZTU3NzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9JY29uRGF0YWJhc2VDbGllbnRHdGsuaApAQCAtMCwwICsxLDUwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGX0ljb25E
YXRhYmFzZUNsaWVudEd0a19oCisjZGVmaW5lIFdURl9JY29uRGF0YWJhc2VDbGllbnRHdGtfaAor
CisjaW5jbHVkZSAiSWNvbkRhdGFiYXNlQ2xpZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIEljb25EYXRhYmFzZTsKK307IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworY2xhc3MgSWNvbkRhdGFi
YXNlQ2xpZW50R3RrIDogcHVibGljIFdlYkNvcmU6Okljb25EYXRhYmFzZUNsaWVudCB7CisKK3B1
YmxpYzoKKyAgICAvLyBJY29uRGF0YWJhc2VDbGllbnQgaW50ZXJmYWNlCisgICAgdmlydHVhbCBi
b29sIHBlcmZvcm1JbXBvcnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlQWxsSWNvbnMo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkSW1wb3J0SWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3Ry
aW5nJik7CisgICAgdmlydHVhbCB2b2lkIGRpZEltcG9ydEljb25EYXRhRm9yUGFnZVVSTChjb25z
dCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwoY29u
c3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaFVSTEltcG9ydCgpOworfTsK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xv
YmFscy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5jcHAKaW5k
ZXggYjhkOGIxZi4uODZmZWM2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGdsb2JhbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRn
bG9iYWxzLmNwcApAQCAtMjcyLDggKzI3Miw2IEBAIHZvaWQgd2Via2l0SW5pdCgpCiAgICAgUGFn
ZUdyb3VwOjpzZXRTaG91bGRUcmFja1Zpc2l0ZWRMaW5rcyh0cnVlKTsKIAogICAgIFBhc3RlYm9h
cmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPnNldEhlbHBlcihXZWJLaXQ6OnBhc3RlYm9hcmRIZWxw
ZXJJbnN0YW5jZSgpKTsKLSAgICBHT3duUHRyPGdjaGFyPiBpY29uRGF0YWJhc2VQYXRoKGdfYnVp
bGRfZmlsZW5hbWUoZ19nZXRfdXNlcl9kYXRhX2RpcigpLCAid2Via2l0IiwgImljb25kYXRhYmFz
ZSIsIE5VTEwpKTsKLSAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aCh3ZWJraXRfZ2V0
X2ljb25fZGF0YWJhc2UoKSwgaWNvbkRhdGFiYXNlUGF0aC5nZXQoKSk7CiAKICAgICBTb3VwU2Vz
c2lvbiogc2Vzc2lvbiA9IHdlYmtpdF9nZXRfZGVmYXVsdF9zZXNzaW9uKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuY3BwIGIvU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKaW5kZXggMzk3YmQ1
MS4uYzU0ZWMyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGlj
b25kYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25k
YXRhYmFzZS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIENo
cmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQGxhbmVkby5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsMTAgKzIxLDkgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJ3ZWJraXRpY29uZGF0YWJhc2UuaCIKIAotI2lu
Y2x1ZGUgIkRhdGFiYXNlRGV0YWlscy5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgog
I2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJJY29uRGF0YWJhc2UuaCIKKyNpbmNs
dWRlICJJY29uRGF0YWJhc2VDbGllbnRHdGsuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1
ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgpAQCAtNDIs
OCArNDIsOSBAQAogICogaW4gdGFiIGxhYmVscywgd2luZG93IGNhcHRpb25zIG9yIGJvb2ttYXJr
cy4gQWxsIHZpZXdzIHNoYXJlCiAgKiB0aGUgc2FtZSBpY29uIGRhdGFiYXNlLgogICoKLSAqIFRo
ZSBpY29uIGRhdGFiYXNlIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhbmQgc3RvcmVkIGluCi0gKiB+
Ly5sb2NhbC9zaGFyZS93ZWJraXQvaWNvbmRhdGFiYXNlLCBkZXBlbmRpbmcgb24gWERHX0RBVEFf
SE9NRS4KKyAqIFRoZSBpY29uIGRhdGFiYXNlIG11c3QgYmUgZXhwbGljaXRseSBlbmFibGVkLiBJ
ZiBubyBkYXRhYmFzZSBwYXRoCisgKiBpcyBzcGVjaWZpZWQgdGhlbiBpdCB3aWxsIHVzZSB+Ly5s
b2NhbC9zaGFyZS93ZWJraXQvaWNvbmRhdGFiYXNlIGJ5CisgKiBkZWZhdWx0LCBkZXBlbmRpbmcg
b24gWERHX0RBVEFfSE9NRS4KICAqCiAgKiBXZWJLaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGxvb2sg
Zm9yIGF2YWlsYWJsZSBpY29ucyBpbiBsaW5rIGVsZW1lbnRzCiAgKiBvbiBvcGVuZWQgcGFnZXMg
YXMgd2VsbCBhcyBhbiBleGlzdGluZyBmYXZpY29uLmljbyBhbmQgbG9hZCB0aGUKQEAgLTUxLDYg
KzUyLDMyIEBACiAgKiB3aWxsIGJlIGVtaXR0ZWQgd2hlbiBhbnkgaWNvbiBpcyBmb3VuZCBhbmQg
bG9hZGVkLgogICogT2xkIEljb25zIGFyZSBhdXRvbWF0aWNhbGx5IGNsZWFuZWQgdXAgYWZ0ZXIg
NCBkYXlzLgogICoKKyAqIEV2ZXJ5IGljb24gaW4gdGhlIGRhdGFiYXNlIGhhcyBhIHJldGFpbiBj
b3VudC4gIElmIGFuIGljb24gaGFzIGEKKyAqIHJldGFpbiBjb3VudCBncmVhdGVyIHRoYW4gMCwg
aXQgd2lsbCBiZSB3cml0dGVuIHRvIGRpc2sgZm9yIGxhdGVyCisgKiB1c2UuIElmIGFuIGljb24n
cyByZXRhaW4gY291bnQgZXF1YWxzIHplcm8gaXQgd2lsbCBiZSByZW1vdmVkIGZyb20KKyAqIGRp
c2suICBUaGUgcmV0YWluIGNvdW50IGlzIG5vdCBwZXJzaXN0ZW50IGFjcm9zcyBsYXVuY2hlcy4g
SWYgdGhlCisgKiBXZWJLaXQgY2xpZW50IHdpc2hlcyB0byByZXRhaW4gYW4gaWNvbiBpdCBzaG91
bGQgcmV0YWluIHRoZSBpY29uCisgKiBvbmNlIGZvciBldmVyeSBsYXVuY2guICBUaGlzIGlzIGJl
c3QgZG9uZSBhdCBpbml0aWFsaXphdGlvbiB0aW1lCisgKiBiZWZvcmUgdGhlIGRhdGFiYXNlIGJl
Z2lucyByZW1vdmluZyBpY29ucy4gIFRvIG1ha2Ugc3VyZSB0aGF0IHRoZQorICogZGF0YWJhc2Ug
ZG9lcyBub3QgcmVtb3ZlIHVucmV0YWluZWQgaWNvbnMgcHJlbWF0dXJlbHksIGNhbGwKKyAqIHdl
YmtpdF9pY29uX2RhdGFiYXNlX2RlbGF5X2RhdGFiYXNlX2NsZWFudXAoKSB1bnRpbCBhbGwgZGVz
aXJlZAorICogaWNvbnMgYXJlIHJldGFpbmVkLiAgT25jZSBhbGwgYXJlIHJldGFpbmVkLCBjYWxs
CisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9hbGxvd19kYXRhYmFzZV9jbGVhbnVwKCkuCisgKgor
ICogU28gaWYgeW91IHdhbnQgdG8gaGF2ZSBhIHBlcnNpc3RlbnQgaWNvbiBkYXRhYmFzZSBhY3Jv
c3MgbGF1bmNoZXMKKyAqIHlvdXIgcHJvZ3JhbSB3aWxsIHRpcGljYWxseSBkbzoKKyAqIHxbCisg
KiBkYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOworICogd2Via2l0X2ljb25f
ZGF0YWJhc2VfZGVsYXlfZGF0YWJhc2VfY2xlYW51cChkYXRhYmFzZSk7CisgKiB3ZWJraXRfaWNv
bl9kYXRhYmFzZV9zZXRfZW5hYmxlZChkYXRhYmFzZSwgVFJVRSk7CisgKgorICogLy8gVGhpcyB3
aWxsIGJlIGxpa2VseSBhIGxvb3Agb3ZlciBhIGxpc3Qgb2YgVVJMcy4gSW4gdGhlIGNhc2Ugb2Yg
YSBicm93c2VyCisgKiAvLyB0aG9zZSBVUkxzIHdvdWxkIGJlIHRoZSBnbG9iYWwgaGlzdG9yeSBp
dGVtcywgYm9va21hcmtzLCBldGMuLi4KKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX3JldGFpbl9p
Y29uX2Zvcl91cmkoZGF0YWJhc2UsIHBhZ2VfdXJsX29mX2ljb25feW91X3dhbnRfdG9fcmV0YWlu
KTsKKyAqCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9hbGxvd19kYXRhYmFzZV9jbGVhbnVwKGRh
dGFiYXNlKTsKKyAqIF18CisgKgogICogd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgoKSBj
YW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIGxvY2F0aW9uCiAgKiBvZiB0aGUgZGF0YWJhc2UgYW5k
IGFsc28gdG8gZGlzYWJsZSBpdCBieSBwYXNzaW5nICVOVUxMLgogICoKQEAgLTcxLDYgKzk4LDgg
QEAgZW51bSB7CiAKIGVudW0gewogICAgIElDT05fTE9BREVELAorICAgIElDT05fQ0hBTkdFRCwK
KyAgICBJQ09OU19SRU1PVkVELAogCiAgICAgTEFTVF9TSUdOQUwKIH07CkBAIC0xNzIsNiArMjAx
LDU0IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX2NsYXNzX2luaXQoV2ViS2l0
SWNvbkRhdGFiYXNlQ2xhc3MqIGtsYXNzKQogICAgICAgICAgICAgV0VCS0lUX1RZUEVfV0VCX0ZS
QU1FLAogICAgICAgICAgICAgR19UWVBFX1NUUklORyk7CiAKKyAgICAvKioKKyAgICAgKiBXZWJL
aXRJY29uRGF0YWJhc2U6Omljb24tY2hhbmdlZDoKKyAgICAgKiBAZGF0YWJhc2U6IHRoZSBvYmpl
Y3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQHBhZ2VfdXJpOiB0aGUg
VVJJIG9mIHRoZSBwYWdlIHRoZSBpY29uIHdhcyByZWFkIGZvcgorICAgICAqCisgICAgICogVGhp
cyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIHRoZSBsb2FkIHN0YXR1cyBvZiBhbiBpY29uCisgICAg
ICogY2hhbmdlcy4gQXMgaXQgY2FuIGJlIHNlZW4gaW4gSWNvbkRhdGFiYXNlQ2xpZW50R3RrLmNw
cCB0aGlzCisgICAgICogbWVhbnMgdGhyZWUgZGlmZmVyZW50IHNpdHVhdGlvbnM6CisgICAgICog
PHNpbXBsZWxpc3Q+CisgICAgICogICA8bWVtYmVyPkljb24gVVJMIHdhcyBpbXBvcnRlZCBpbnRv
IHRoZSBkYXRhYmFzZTwvbWVtYmVyPgorICAgICAqICAgPG1lbWJlcj5JY29uIGRhdGEgd2FzIGlt
cG9ydGVkIGludG8gdGhlIGRhdGFiYXNlPC9tZW1iZXI+CisgICAgICogICA8bWVtYmVyPkljb24g
aGFzIGFjdHVhbGx5IGNoYW5nZWQgaW4gdGhlIGRhdGFiYXNlPC9tZW1iZXI+CisgICAgICogPC9z
aW1wbGVsaXN0PgorICAgICAqCisgICAgICogTm90ZSB0aGF0IHdlYmtpdF9pY29uX2RhdGFiYXNl
X2dldF9pY29uX3BpeGJ1ZigpIHdpbGwgcmV0dXJuCisgICAgICogTlVMTCB1bnRpbCB0aGUgaWNv
biBkYXRhIGlzIGltcG9ydGVkIGluIHRoZSBkYXRhYmFzZSBldmVuIGlmCisgICAgICogdGhlIGlj
b24gdXJsIGlzIGFjdHVhbGx5IGltcG9ydGVkICh0aGlzIG1lYW5zIHRoYXQKKyAgICAgKiB3ZWJr
aXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmkoKSBjb3VsZCByZXR1cm4gYSB2YWxpZCB1cmkK
KyAgICAgKiB3aGlsZSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoKSByZXR1
cm5zIE5VTEwpLgorICAgICAqCisgICAgICogU2luY2U6IDEuMy4xNAorICAgICAqLworICAgIHdl
YmtpdF9pY29uX2RhdGFiYXNlX3NpZ25hbHNbSUNPTl9DSEFOR0VEXSA9IGdfc2lnbmFsX25ldygi
aWNvbi1jaGFuZ2VkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGtsYXNzKSwKKyAg
ICAgICAgICAgIChHU2lnbmFsRmxhZ3MpR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAw
LAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBnX2Nj
bG9zdXJlX21hcnNoYWxfVk9JRF9fU1RSSU5HLAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDEs
CisgICAgICAgICAgICBHX1RZUEVfU1RSSU5HKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdElj
b25EYXRhYmFzZTo6aWNvbnMtcmVtb3ZlZDoKKyAgICAgKiBAZGF0YWJhc2U6IHRoZSBvYmplY3Qg
b24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25h
bCBpcyBlbWl0dGVkIHdoZW4gYWxsIHRoZSBpY29ucyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBkYWJh
dGFzZQorICAgICAqIFNpbmNlOiAxLjMuMTQKKyAgICAgKi8KKyAgICB3ZWJraXRfaWNvbl9kYXRh
YmFzZV9zaWduYWxzW0lDT05TX1JFTU9WRURdID0gZ19zaWduYWxfbmV3KCJpY29ucy1yZW1vdmVk
IiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGtsYXNzKSwKKyAgICAgICAgICAgIChH
U2lnbmFsRmxhZ3MpR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAwLAorICAgICAgICAg
ICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNo
YWxfVk9JRF9fVk9JRCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsKKwogICAgIGdfdHlw
ZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdEljb25EYXRhYmFzZVByaXZh
dGUpKTsKIH0KIApAQCAtMTgwLDYgKzI1NywxOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfaWNvbl9k
YXRhYmFzZV9pbml0KFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpCiAgICAgZGF0YWJhc2Ut
PnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoZGF0YWJhc2UsIFdFQktJVF9UWVBF
X0lDT05fREFUQUJBU0UsIFdlYktpdEljb25EYXRhYmFzZVByaXZhdGUpOwogICAgIC8vICdwbGFj
ZW1lbnQgbmV3IHN5bnRheCcsIHNlZSB3ZWJraXR3ZWJ2aWV3LmNwcAogICAgIG5ldyAoZGF0YWJh
c2UtPnByaXYpIFdlYktpdEljb25EYXRhYmFzZVByaXZhdGUoKTsKKworICAgIC8vIERpc2FibGVk
IGJ5IGRlZmF1bHQKKyAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5zZXRFbmFibGVkKGZhbHNl
KTsKK30KKworc3RhdGljIEljb25EYXRhYmFzZUNsaWVudEd0ayogZGVmYXVsdENsaWVudCgpCit7
CisjaWYgRU5BQkxFKElDT05EQVRBQkFTRSkKKyAgICBzdGF0aWMgSWNvbkRhdGFiYXNlQ2xpZW50
R3RrKiBkZWZhdWx0Q2xpZW50ID0gbmV3IEljb25EYXRhYmFzZUNsaWVudEd0aygpOworICAgIHJl
dHVybiBkZWZhdWx0Q2xpZW50OworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgogfQogCiAv
KioKQEAgLTE4OCw3ICsyNzgsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9p
bml0KFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpCiAgKgogICogRGV0ZXJtaW5lcyB0aGUg
YWJzb2x1dGUgcGF0aCB0byB0aGUgZGF0YWJhc2UgZm9sZGVyIG9uIGRpc2suCiAgKgotICogUmV0
dXJuczogdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGRhdGFiYXNlIGZvbGRlciwgb3IgJU5VTEwK
KyAqIFJldHVybnM6IHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBkYXRhYmFzZSBmb2xkZXIKICAq
CiAgKiBTaW5jZTogMS4zLjEzCiAgKiovCkBAIC0xOTYsMTQgKzI4Niw3MCBAQCBHX0NPTlNUX1JF
VFVSTiBnY2hhciogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3BhdGgoV2ViS2l0SWNvbkRhdGFi
YXNlKiBkYXRhYmFzZQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19JQ09O
X0RBVEFCQVNFKGRhdGFiYXNlKSwgMCk7CiAKKyAgICBpZiAoIWRhdGFiYXNlLT5wcml2LT5wYXRo
LmdldCgpKSB7CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IGljb25EYXRhYmFzZVBhdGgoZ19idWls
ZF9maWxlbmFtZShnX2dldF91c2VyX2RhdGFfZGlyKCksICJ3ZWJraXQiLCAiaWNvbmRhdGFiYXNl
IiwgTlVMTCkpOworCisgICAgICAgIC8vIERvIG5vdCB1c2Ugc2V0X3BhdGgoKSwgb3RoZXJ3aXNl
IHdlIGNvdWxkIGVuZCB1cCBjYWxsaW5nCisgICAgICAgIC8vIHN0YXJ0dXBJY29uRGF0YWJhc2Ug
dHdpY2UuCisgICAgICAgIGRhdGFiYXNlLT5wcml2LT5wYXRoLnNldChnX3N0cmR1cChpY29uRGF0
YWJhc2VQYXRoLmdldCgpKSk7CisgICAgfQorCiAgICAgcmV0dXJuIGRhdGFiYXNlLT5wcml2LT5w
YXRoLmdldCgpOwogfQogCiBzdGF0aWMgdm9pZCBjbG9zZUljb25EYXRhYmFzZU9uRXhpdCgpCiB7
Ci0gICAgaWYgKFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLmlzRW5hYmxlZCgpKSB7CisgICAgV2Vi
Q29yZTo6aWNvbkRhdGFiYXNlKCkuY2xvc2UoKTsKK30KKworc3RhdGljIHZvaWQgc3RhcnRVcElj
b25EYXRhYmFzZShXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAgIFdlYkNvcmU6
Omljb25EYXRhYmFzZSgpLnNldENsaWVudChkZWZhdWx0Q2xpZW50KCkpOworICAgIFdlYkNvcmU6
Omljb25EYXRhYmFzZSgpLm9wZW4od2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3BhdGgoZGF0YWJh
c2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWNvbkRhdGFiYXNlOjpkZWZh
dWx0RGF0YWJhc2VGaWxlbmFtZSgpKTsKKworICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0g
ZmFsc2U7CisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBhdGV4aXQoY2xvc2VJY29u
RGF0YWJhc2VPbkV4aXQpOworICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorfQor
CisvKioKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2lzX2VuYWJsZWQ6CisgKiBAZGF0YWJhc2U6
IGEgI1dlYktpdEljb25EYXRhYmFzZQorICoKKyAqIFdoZXRoZXIgb3Igbm90IHRoZSBpY29uIGRh
dGFiYXNlIGlzIGVuYWJsZWQKKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBkYXRhYmFzZSBp
cyBlbmFibGVkLCBGQUxTRSBvdGhlcndpc2UKKyAqCisgKiBTaW5jZTogMS4zLjE0CisgKiovCitn
Ym9vbGVhbiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9pc19lbmFibGVkKFdlYktpdEljb25EYXRhYmFz
ZSogZGF0YWJhc2UpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLmlzRW5h
YmxlZCgpOworfQorCisvKioKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9lbmFibGVkOgor
ICogQGRhdGFiYXNlOiBhICNXZWJLaXRJY29uRGF0YWJhc2UKKyAqIEBlbmFibGVkOiBUUlVFIHRv
IGVuYWJsZSB0aGUgZGF0YWJhc2UsIEZBTFNFIHRvIGRpc2FibGUgaXQKKyAqCisgKiBFbmFibGVz
IG9yIGRpc2FibGVzIHRoZSBpY29uIGRhdGFiYXNlLiBXZWJLaXQgd2lsbCBvcGVuIGFuZCByZWFk
CisgKiB0aGUgaWNvbiBkYXRhYmFzZSBhcyBzb29uIGFzIGl0IGlzIGVuYWJsZWQuIE5vdGUgdGhh
dCBtb3N0IG9mCisgKiAjV2ViS2l0SWNvbkRhdGFiYXNlIG1ldGhvZHMgcmVxdWlyZSB0aGUgZGF0
YWJhc2UgdG8gYmUgZW5hYmxlZC4KKyAqCisgKiBTaW5jZTogMS4zLjE0CisgKiovCit2b2lkIHdl
YmtpdF9pY29uX2RhdGFiYXNlX3NldF9lbmFibGVkKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJh
c2UsIGdib29sZWFuIGVuYWJsZWQpCit7CisgICAgZ2Jvb2xlYW4gY3VycmVudGx5RW5hYmxlZCA9
IHdlYmtpdF9pY29uX2RhdGFiYXNlX2lzX2VuYWJsZWQoZGF0YWJhc2UpOworCisgICAgaWYgKGN1
cnJlbnRseUVuYWJsZWQgJiYgIWVuYWJsZWQpCiAgICAgICAgIFdlYkNvcmU6Omljb25EYXRhYmFz
ZSgpLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5j
bG9zZSgpOworICAgIGVsc2UgaWYgKCFjdXJyZW50bHlFbmFibGVkICYmIGVuYWJsZWQpIHsKKyAg
ICAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAg
c3RhcnRVcEljb25EYXRhYmFzZShkYXRhYmFzZSk7CiAgICAgfQogfQogCkBAIC0yMTQsMzMgKzM2
MCwyMCBAQCBzdGF0aWMgdm9pZCBjbG9zZUljb25EYXRhYmFzZU9uRXhpdCgpCiAgKgogICogU3Bl
Y2lmaWVzIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBkYXRhYmFzZSBmb2xkZXIgb24gZGlzay4K
ICAqCi0gKiBQYXNzaW5nICVOVUxMIG9yICIiIGRpc2FibGVzIHRoZSBpY29uIGRhdGFiYXNlLgot
ICoKICAqIFNpbmNlOiAxLjMuMTMKICAqKi8KIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0
X3BhdGgoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhdGgpCiB7
CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShkYXRhYmFzZSkp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwocGF0aCk7CiAKLSAgICBpZiAoZGF0YWJhc2UtPnByaXYt
PnBhdGguZ2V0KCkpCisgICAgaWYgKGdfc3RyY21wMChwYXRoLCBkYXRhYmFzZS0+cHJpdi0+cGF0
aC5nZXQoKSkpCiAgICAgICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLmNsb3NlKCk7CiAKLSAg
ICBpZiAoIShwYXRoICYmIHBhdGhbMF0pKSB7Ci0gICAgICAgIGRhdGFiYXNlLT5wcml2LT5wYXRo
LnNldCgwKTsKLSAgICAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc2V0RW5hYmxlZChmYWxz
ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBkYXRhYmFzZS0+cHJpdi0+cGF0aC5z
ZXQoZ19zdHJkdXAocGF0aCkpOwogCi0gICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc2V0RW5h
YmxlZCh0cnVlKTsKLSAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5vcGVuKFdlYkNvcmU6OmZp
bGVuYW1lVG9TdHJpbmcoZGF0YWJhc2UtPnByaXYtPnBhdGguZ2V0KCkpLCBXZWJDb3JlOjpJY29u
RGF0YWJhc2U6OmRlZmF1bHREYXRhYmFzZUZpbGVuYW1lKCkpOwotCi0gICAgc3RhdGljIGJvb2wg
aW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIGF0
ZXhpdChjbG9zZUljb25EYXRhYmFzZU9uRXhpdCk7Ci0gICAgICAgIGluaXRpYWxpemVkID0gdHJ1
ZTsKLSAgICB9CisgICAgaWYgKFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLmlzRW5hYmxlZCgpKQor
ICAgICAgICBzdGFydFVwSWNvbkRhdGFiYXNlKGRhdGFiYXNlKTsKIH0KIAogLyoqCkBAIC0yNDgs
MTAgKzM4MSwxMyBAQCB2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKFdlYktpdElj
b25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGdjaGFyKiBwYQogICogQGRhdGFiYXNlOiBhICNX
ZWJLaXRJY29uRGF0YWJhc2UKICAqIEBwYWdlX3VyaTogVVJJIG9mIHRoZSBwYWdlIGNvbnRhaW5p
bmcgdGhlIGljb24KICAqCi0gKiBPYnRhaW5zIHRoZSBVUkkgZm9yIHRoZSBmYXZpY29uIGZvciB0
aGUgZ2l2ZW4gcGFnZSBVUkkuCi0gKiBTZWUgYWxzbyB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25f
dXJpKCkuCisgKiBPYnRhaW5zIHRoZSBVUkkgZm9yIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4g
cGFnZSBVUkkuIFNlZSBhbHNvCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKCkuCisg
KgorICogUmVxdWlyZXMgYW4gZW5hYmxlZCBkYXRhYmFzZS4KICAqCi0gKiBSZXR1cm5zOiBhIG5l
d2x5IGFsbG9jYXRlZCBVUkkgZm9yIHRoZSBmYXZpY29uLCBvciAlTlVMTAorICogUmV0dXJuczog
YSBuZXdseSBhbGxvY2F0ZWQgVVJJIGZvciB0aGUgZmF2aWNvbiwgb3IgJU5VTEwgaWYgdGhlCisg
KiBpY29uIGlzIG5vdCBjYWNoZWQgb3IgdGhlIGRhdGFiYXNlIGlzIG5vdCBlbmFibGVkLgogICoK
ICAqIFNpbmNlOiAxLjMuMTMKICAqKi8KQEAgLTI2MCw2ICszOTYsOSBAQCBnY2hhciogd2Via2l0
X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2Us
IGNvbnN0IGdjaAogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19JQ09OX0RBVEFC
QVNFKGRhdGFiYXNlKSwgMCk7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocGFnZVVSSSwgMCk7
CiAKKyAgICBpZiAoIVdlYkNvcmU6Omljb25EYXRhYmFzZSgpLmlzRW5hYmxlZCgpKQorICAgICAg
ICByZXR1cm4gMDsKKwogICAgIFN0cmluZyBwYWdlVVJMID0gU3RyaW5nOjpmcm9tVVRGOChwYWdl
VVJJKTsKICAgICByZXR1cm4gZ19zdHJkdXAoV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc3luY2hy
b25vdXNJY29uVVJMRm9yUGFnZVVSTChwYWdlVVJMKS51dGY4KCkuZGF0YSgpKTsKIH0KQEAgLTI2
OCwyNiArNDA3LDQxIEBAIGdjaGFyKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmko
V2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoCiAgKiB3ZWJraXRfaWNvbl9k
YXRhYmFzZV9nZXRfaWNvbl9waXhidWY6CiAgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRh
YmFzZQogICogQHBhZ2VfdXJpOiBVUkkgb2YgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbgor
ICogQHNpemU6IHRoZSBkZXNpcmVkIHdpZHRoIGFuZCBsZW5ndGggZm9yIHRoZSBpY29uCisgKgor
ICogT2J0YWlucyBhICNHZGtQaXhidWYgb2YgdGhlIGZhdmljb24gZm9yIHRoZSBnaXZlbiBwYWdl
IFVSSSwgb3IgYQorICogZGVmYXVsdCBpY29uIGlmIHRoZXJlIGlzIG5vIGljb24gZm9yIHRoZSBn
aXZlbiBwYWdlLiBVc2UKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3VyaSgpIGlm
IHlvdSBuZWVkIHRvIGRpc3Rpbmd1aXNoCisgKiB0aGVzZSBjYXNlcy4gIFVzdWFsbHkgeW91IHdh
bnQgdG8gY29ubmVjdCB0bworICogV2ViS2l0SWNvbkRhdGFiYXNlOjppY29uLWxvYWRlZCBhbmQv
b3IKKyAqIFdlYktpdEljb25EYXRhYmFzZTo6aWNvbi1jaGFuZ2VkIGFuZCBjYWxsIHRoaXMgbWV0
aG9kIGluIHRoZQorICogY2FsbGJhY2suCisgKgorICogQXMgdGhlIFdlYktpdCdzIEljb25EYXRh
YmFzZSBsb2FkcyB0aGUgaWNvbiBkYXRhIGFzeW5jaHJvbm91c2x5IGFuZAorICogaW4gYSBwZXIt
ZGVtYW5kIGJhc2lzLCB0aGlzIG1ldGhvZCBjb3VsZCByZXR1cm4gTlVMTCBldmVuIGlmIHRoZQor
ICogaWNvbiBpcyBhY3R1YWxseSBjYWNoZWQuIElmIHRoZSBjYWxsZXIga25vd3MgdGhhdCB0aGUg
aWNvbiBzaG91bGQKKyAqIGJlIGNhY2hlZCB0aGVuIGl0IHNob3VsZCBsaXN0ZW4gdG8gaWNvbi1j
aGFuZ2VkIHNpZ25hbCBpbiBvcmRlciB0bworICoga25vdyB3aGVuIHRoZSBpY29uIGRhdGEgaXMg
YWN0dWFsbHkgYXZhaWxhYmxlLiBPdGhlcndpc2UgaWYgdGhlCisgKiBpY29uIG5lZWQgdG8gYmUg
cmV0cmlldmVkIGZyb20gYW4gZXh0ZXJuYWwgcmVzb3VyY2UgdGhlIGNsaWVudAorICogc2hvdWxk
IGNvbm5lY3QgdG8gaWNvbi1sb2FkZWQgc2lnbmFsLgogICoKLSAqIE9idGFpbnMgYSAjR2RrUGl4
YnVmIG9mIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZSBVUkksIG9yCi0gKiBhIGRlZmF1
bHQgaWNvbiBpZiB0aGVyZSBpcyBubyBpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZS4gVXNlCi0gKiB3
ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmkoKSBpZiB5b3UgbmVlZCB0byBkaXN0aW5n
dWlzaCB0aGVzZSBjYXNlcy4KLSAqIFVzdWFsbHkgeW91IHdhbnQgdG8gY29ubmVjdCB0byBXZWJL
aXRJY29uRGF0YWJhc2U6Omljb24tbG9hZGVkIGFuZCBjYWxsIHRoaXMKLSAqIG1ldGhvZCBpbiB0
aGUgY2FsbGJhY2suCisgKiBSZXF1aXJlcyBhbiBlbmFibGVkIGRhdGFiYXNlLgogICoKLSAqIFRo
ZSBwaXhidWYgd2lsbCBoYXZlIHRoZSBsYXJnZXN0IHNpemUgcHJvdmlkZWQgYnkgdGhlIHNlcnZl
ciBhbmQgc2hvdWxkCi0gKiBiZSByZXNpemVkIGJlZm9yZSBpdCBpcyBkaXNwbGF5ZWQuCi0gKiBT
ZWUgYWxzbyB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fcGl4YnVmKCkuCisgKiBJZiBAc2l6ZSBp
cyAwIHRoZSBwaXhidWYgd2lsbCBoYXZlIHRoZSBsYXJnZXN0IHNpemUgcHJvdmlkZWQgYnkgdGhl
CisgKiBzZXJ2ZXIuIFNlZSBhbHNvIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl9waXhidWYoKS4K
ICAqCiAgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IHJlZmVyZW5jZSB0byBhICNH
ZGtQaXhidWYsIG9yICVOVUxMCiAgKgogICogU2luY2U6IDEuMy4xMwogICoqLwotR2RrUGl4YnVm
KiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoV2ViS2l0SWNvbkRhdGFiYXNl
KiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkkpCitHZGtQaXhidWYqIHdlYmtpdF9pY29u
X2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZihXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBj
b25zdCBnY2hhciogcGFnZVVSSSwgZ3VpbnQgc2l6ZSkKIHsKICAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShkYXRhYmFzZSksIDApOwogICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHBhZ2VVUkksIDApOwogCisgICAgaWYgKCFXZWJDb3JlOjppY29uRGF0YWJh
c2UoKS5pc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBTdHJpbmcgcGFnZVVS
TCA9IFN0cmluZzo6ZnJvbVVURjgocGFnZVVSSSk7CiAgICAgLy8gVGhlIGV4YWN0IHNpemUgd2Ug
cGFzcyBpcyBpcnJlbGV2YW50IHRvIHRoZSBXZWJDb3JlOjppY29uRGF0YWJhc2UgY29kZS4KICAg
ICAvLyBXZSBtdXN0IHBhc3Mgc29tZXRoaW5nIGdyZWF0ZXIgdGhhbiAwLCAwIHRvIGdldCBhIHBp
eGJ1Zi4KQEAgLTI5Nyw3ICs0NTEsMTEgQEAgR2RrUGl4YnVmKiB3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9nZXRfaWNvbl9waXhidWYoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY28KICAgICBH
ZGtQaXhidWYqIHBpeGJ1ZiA9IGljb24tPmdldEdka1BpeGJ1ZigpOwogICAgIGlmICghcGl4YnVm
KQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R2RrUGl4YnVmKj4o
Z19vYmplY3RfcmVmKHBpeGJ1ZikpOworCisgICAgaWYgKCFzaXplKQorICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8R2RrUGl4YnVmKj4oZ19vYmplY3RfcmVmKHBpeGJ1ZikpOworCisgICAgcmV0
dXJuIGdka19waXhidWZfc2NhbGVfc2ltcGxlKHBpeGJ1Ziwgc2l6ZSwgc2l6ZSwgR0RLX0lOVEVS
UF9CSUxJTkVBUik7CiB9CiAKIC8qKgpAQCAtMzA2LDEyICs0NjQsNzggQEAgR2RrUGl4YnVmKiB3
ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoV2ViS2l0SWNvbkRhdGFiYXNlKiBk
YXRhYmFzZSwgY28KICAqCiAgKiBDbGVhcnMgYWxsIGljb25zIGZyb20gdGhlIGRhdGFiYXNlLgog
ICoKKyAqIFJlcXVpcmVzIGFuIGVuYWJsZWQgZGF0YWJhc2UuCisgKgogICogU2luY2U6IDEuMy4x
MwogICoqLwogdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhcihXZWJLaXRJY29uRGF0YWJh
c2UqIGRhdGFiYXNlKQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0lDT05fREFU
QUJBU0UoZGF0YWJhc2UpKTsKIAorICAgIGlmICghV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuaXNF
bmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgp
LnJlbW92ZUFsbEljb25zKCk7CiB9CiAKKy8qKgorICogd2Via2l0X2ljb25fZGF0YWJhc2VfZGF0
YWJhc2VfY2xlYW51cDoKKyAqIEBkYXRhYmFzZTogYSAjV2ViS2l0SWNvbkRhdGFiYXNlCisgKgor
ICogVXNlIHRoaXMgbWV0aG9kIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBkYXRhYmFzZSBkb2VzIG5v
dCByZW1vdmUKKyAqIHVucmV0YWluZWQgaWNvbnMgcHJlbWF0dXJlbHkuIEJ5IGRlZmF1bHQgZGF0
YWJhc2UgY2xlYW51cCB3aWxsIGJlCisgKiBzdGFydGVkIGFmdGVyIG9wZW5pbmcgdGhlIGRhdGFi
YXNlLCB1bmxlc3Mgd2UgZXhwbGljaXRseSBkZWxheQorICogaXQuIFVzZSB3ZWJraXRfaWNvbl9k
YXRhYmFzZV9yZXRhaW5faWNvbl9mb3JfdXJpKCkgZm9yIGVhY2ggaWNvbiB5b3UKKyAqIHdhbnQg
dG8ga2VlcCBhbmQgb25jZSBhbGwgYXJlIHJldGFpbmVkIGNhbGwgYWxsb3dEYXRhYmFzZUNsZWFu
dXAgdG8KKyAqIHJldmVydCB0aGUgZWZmZWN0cyBvZiB0aGlzIGNhbGwuCisgKgorICogU2luY2Ug
MS4zLjE0CisgKiovCit2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX2RlbGF5X2NsZWFudXAoV2Vi
S2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9JU19JQ09OX0RBVEFCQVNFKGRhdGFiYXNlKSk7CisKKyAgICBXZWJDb3JlOjpJY29uRGF0YWJh
c2U6OmRlbGF5RGF0YWJhc2VDbGVhbnVwKCk7Cit9CisKKy8qKgorICogd2Via2l0X2ljb25fZGF0
YWJhc2VfYWxsb3dfY2xlYW51cDoKKyAqIEBkYXRhYmFzZTogYSAjV2ViS2l0SWNvbkRhdGFiYXNl
CisgKgorICogUmV2ZXJ0cyB0aGUgZWZmZWN0IG9mCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9k
ZWxheV9kYXRhYmFzZV9jbGVhbnVwKCkuIFRpcGljYWxseSB0aGlzCisgKiBmdW5jdGlvbiB3aWxs
IGJlIGNhbGxlZCBhZnRlciBhbGwgdGhlIHJlcXVpcmVkIGljb25zIGFyZSByZXRhaW5lZAorICog
KHVzZSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9yZXRhaW5faWNvbl9mb3JfdXJpKCkgZm9yIHRoYXQp
LgorICoKKyAqIFNpbmNlIDEuMy4xNAorICoqLwordm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9h
bGxvd19jbGVhbnVwKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShkYXRhYmFzZSkpOworCisgICAgV2Vi
Q29yZTo6SWNvbkRhdGFiYXNlOjphbGxvd0RhdGFiYXNlQ2xlYW51cCgpOworfQorCisvKioKKyAq
IHdlYmtpdF9pY29uX2RhdGFiYXNlX3JldGFpbl9pY29uX2Zvcl91cmk6CisgKiBAZGF0YWJhc2U6
IGEgI1dlYktpdEljb25EYXRhYmFzZQorICogQHBhZ2VfdXJpOiB0aGUgVVJMIG9mIHRoZSB3ZWIg
cGFnZSB0aGUgaWNvbiBiZWxvbmdzIHRvCisgKgorICogTm90ZSB0aGF0IHRoaXMgY2FsbCB3aWxs
IG5vdCBiZSBlZmZlY3RpdmUgdW5sZXNzIHRoZSBkYXRhYmFzZSBpcworICogZW5hYmxlZCwgaS5l
LCB5b3UgaGF2ZSB0byBjYWxsIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKCkgdG8KKyAq
IG9wZW4gYW5kIGVuYWJsZSBpdCBiZWZvcmUgdHJ5aW5nIHRvIHJldGFpbiBhbnkgaWNvbi4KKyAq
CisgKiBSZXF1aXJlcyBhbiBlbmFibGVkIGRhdGFiYXNlLgorICoKKyAqIFNpbmNlIDEuMy4xNAor
ICoqLwordm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9yZXRhaW5faWNvbl9mb3JfdXJpKFdlYktp
dEljb25EYXRhYmFzZSogZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAgICBwYWdlX3VyaSkKK3sKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9JU19JQ09OX0RBVEFCQVNFKGRhdGFiYXNlKSk7CisKKyAgICBp
ZiAoIVdlYkNvcmU6Omljb25EYXRhYmFzZSgpLmlzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5yZXRhaW5JY29uRm9yUGFnZVVSTChTdHJp
bmc6OmZyb21VVEY4KHBhZ2VfdXJpKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0aWNvbmRhdGFiYXNlLmgKaW5kZXggN2ZlNWFjZC4uOTQ1NzNiZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuaApAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AbGFu
ZWRvLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC01NSw2ICs1NiwxMyBAQCBzdHJ1Y3QgX1dlYktpdEljb25EYXRhYmFzZUNsYXNz
IHsKIFdFQktJVF9BUEkgR1R5cGUKIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF90eXBlICAgICAg
ICAgICAgKHZvaWQpOwogCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9pY29uX2RhdGFiYXNlX3Nl
dF9lbmFibGVkICAgICAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICAgIGVu
YWJsZWQpOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfaWNvbl9kYXRhYmFzZV9pc19l
bmFibGVkICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKTsKKwogV0VCS0lU
X0FQSSBHX0NPTlNUX1JFVFVSTiBnY2hhcioKIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9wYXRo
ICAgICAgICAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpOwogCkBAIC02OCwxMSAr
NzYsMjIgQEAgd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpICAgICAgICAoV2ViS2l0
SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKIAogV0VCS0lUX0FQSSBHZGtQaXhidWYqCiB3ZWJraXRf
aWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRh
dGFiYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Z2NoYXIqICAgICAgICBwYWdlX3VyaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhZ2VfdXJpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICBzaXplKTsKIAog
V0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhciAgICAgICAgICAgICAg
IChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKTsKIAorV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfaWNvbl9kYXRhYmFzZV9yZXRhaW5faWNvbl9mb3JfdXJpIChXZWJLaXRJY29uRGF0YWJhc2Uq
IGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2NoYXIqICAgICAgICBwYWdlX3VyaSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2lj
b25fZGF0YWJhc2VfZGVsYXlfY2xlYW51cCAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRh
YmFzZSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2ljb25fZGF0YWJhc2VfYWxsb3dfY2xl
YW51cCAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSk7CisKIEdfRU5EX0RFQ0xT
CiAKICNlbmRpZiAvKiB3ZWJraXRpY29uZGF0YWJhc2VfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCmluZGV4IDE3NjM3Y2MuLjc5NGM1ZTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTUwNzIsNiArNTA3Miw3
IEBAIEdfQ09OU1RfUkVUVVJOIGdjaGFyKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCiAvKioKICAqIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl9w
aXhidWY6CiAgKiBAd2ViVmlldzogdGhlICNXZWJLaXRXZWJWaWV3IG9iamVjdAorICogQHNpemU6
IHRoZSBkZXNpcmVkIGxlbmd0aCBhbmQgd2lkdGggZm9yIHRoZSBpY29uCiAgKgogICogT2J0YWlu
cyBhICNHZGtQaXhidWYgb2YgdGhlIGZhdmljb24gZm9yIHRoZSBnaXZlbiAjV2ViS2l0V2ViVmll
dywgb3IKICAqIGEgZGVmYXVsdCBpY29uIGlmIHRoZXJlIGlzIG5vIGljb24gZm9yIHRoZSBnaXZl
biBwYWdlLiBVc2UKQEAgLTUwNzksMjEgKzUwODAsMjAgQEAgR19DT05TVF9SRVRVUk4gZ2NoYXIq
IHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAq
IFVzdWFsbHkgeW91IHdhbnQgdG8gY29ubmVjdCB0byBXZWJLaXRXZWJWaWV3OjppY29uLWxvYWRl
ZCBhbmQgY2FsbCB0aGlzCiAgKiBtZXRob2QgaW4gdGhlIGNhbGxiYWNrLgogICoKLSAqIFRoZSBw
aXhidWYgd2lsbCBoYXZlIHRoZSBsYXJnZXN0IHNpemUgcHJvdmlkZWQgYnkgdGhlIHNlcnZlciBh
bmQgc2hvdWxkCi0gKiBiZSByZXNpemVkIGJlZm9yZSBpdCBpcyBkaXNwbGF5ZWQuCi0gKiBTZWUg
YWxzbyB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoKS4KKyAqIElmIEBzaXpl
IGlzIDAgdGhlbiB0aGUgcGl4YnVmIHdpbGwgaGF2ZSB0aGUgbGFyZ2VzdCBzaXplIHByb3ZpZGVk
CisgKiBieSB0aGUgc2VydmVyLiBTZWUgYWxzbyB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl9waXhidWYoKS4KICAqCiAgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IHJlZmVy
ZW5jZSB0byBhICNHZGtQaXhidWYsIG9yICVOVUxMCiAgKgogICogU2luY2U6IDEuMy4xMwogICov
Ci1HZGtQaXhidWYqIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl9waXhidWYoV2ViS2l0V2ViVmll
dyogd2ViVmlldykKK0dka1BpeGJ1Ziogd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3BpeGJ1ZihX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBndWludCBzaXplKQogewogICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgMCk7CiAKICAgICBjb25zdCBnY2hh
ciogcGFnZVVSSSA9IHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpOwogICAgIFdlYktp
dEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKLSAg
ICByZXR1cm4gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmKGRhdGFiYXNlLCBw
YWdlVVJJKTsKKyAgICByZXR1cm4gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVm
KGRhdGFiYXNlLCBwYWdlVVJJLCBzaXplKTsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnZpZXcuaAppbmRleCAzOGM5YTcwLi4zNDE4NzMwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKQEAgLTM5OCw3ICszOTgsOCBAQCBXRUJLSVRfQVBJ
IEdfQ09OU1RfUkVUVVJOIGdjaGFyICoKIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkgICAg
ICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldyk7CiAKIFdFQktJ
VF9BUEkgR2RrUGl4YnVmICoKLXdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl9waXhidWYgICAgICAg
ICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldyk7Cit3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2ljb25fcGl4YnVmICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAg
KndlYlZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ3VpbnQgICAgICAgICAgICAgICAgIHNpemUpOwogCiBXRUJLSVRfQVBJIFdlYktpdERPTURv
Y3VtZW50ICoKIHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50ICAgICAgICAgICAgICAg
IChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldyk7Ci0tIAoxLjcuNC4xCgo=
</data>
<flag name="review"
          id="80137"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87702</attachid>
            <date>2011-03-31 04:51:54 -0700</date>
            <delta_ts>2011-05-04 08:25:06 -0700</delta_ts>
            <desc>Remove &quot;icon-loaded&quot; signal from the WebKitIconDatabase</desc>
            <filename>0002-Removed-icon-loaded-from-WebKitIconDatabase.patch</filename>
            <type>text/plain</type>
            <size>4108</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSA2YTU0N2NiNDgwMjdmYjA0OTE3ZjMzNjIyZjE2NjA2YTg3MTNhNzg2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFRodSwgMzEgTWFyIDIwMTEgMTM6MzY6MzUgKzAyMDAKU3ViamVjdDogW1BBVENI
IDIvMl0gUmVtb3ZlZCBpY29uLWxvYWRlZCBmcm9tIFdlYktpdEljb25EYXRhYmFzZQoKLS0tCiAu
Li4vZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcCAgICB8ICAgIDQg
LS0KIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuY3BwICAgIHwg
ICAzMyArKy0tLS0tLS0tLS0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMo
KyksIDM0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAppbmRleCBjYThiZjlhLi5jMDEw
NTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCkBAIC05MjcsMTAgKzkyNyw2IEBAIHZvaWQgRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKQogICAgIGlmIChtX2xvYWRpbmdF
cnJvclBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IGdjaGFyKiBmcmFtZVVSSSA9
IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3VyaShtX2ZyYW1lKTsKLSAgICBXZWJLaXRJY29uRGF0YWJh
c2UqIGRhdGFiYXNlID0gd2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCk7Ci0gICAgZ19zaWduYWxf
ZW1pdF9ieV9uYW1lKGRhdGFiYXNlLCAiaWNvbi1sb2FkZWQiLCBtX2ZyYW1lLCBmcmFtZVVSSSk7
Ci0KICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1l
KTsKIAogICAgIC8vIEF2b2lkIHJlcG9ydGluZyBmYXZpY29ucyBmb3Igbm9uLW1haW4gZnJhbWVz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcApp
bmRleCBjNTRlYzIwLi4yODZmMDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0aWNvbmRhdGFiYXNlLmNwcApAQCAtNDgsOSArNDgsOCBAQAogICoKICAqIFdlYktpdCB3
aWxsIGF1dG9tYXRpY2FsbHkgbG9vayBmb3IgYXZhaWxhYmxlIGljb25zIGluIGxpbmsgZWxlbWVu
dHMKICAqIG9uIG9wZW5lZCBwYWdlcyBhcyB3ZWxsIGFzIGFuIGV4aXN0aW5nIGZhdmljb24uaWNv
IGFuZCBsb2FkIHRoZQotICogaW1hZ2VzIGZvdW5kIGludG8gdGhlIG1lbW9yeSBjYWNoZSBpZiBw
b3NzaWJsZS4gVGhlIHNpZ25hbCAiaWNvbi1sb2FkZWQiCi0gKiB3aWxsIGJlIGVtaXR0ZWQgd2hl
biBhbnkgaWNvbiBpcyBmb3VuZCBhbmQgbG9hZGVkLgotICogT2xkIEljb25zIGFyZSBhdXRvbWF0
aWNhbGx5IGNsZWFuZWQgdXAgYWZ0ZXIgNCBkYXlzLgorICogaW1hZ2VzIGZvdW5kIGludG8gdGhl
IG1lbW9yeSBjYWNoZSBpZiBwb3NzaWJsZS4gT2xkIEljb25zIGFyZQorICogYXV0b21hdGljYWxs
eSBjbGVhbmVkIHVwIGFmdGVyIDQgZGF5cy4KICAqCiAgKiBFdmVyeSBpY29uIGluIHRoZSBkYXRh
YmFzZSBoYXMgYSByZXRhaW4gY291bnQuICBJZiBhbiBpY29uIGhhcyBhCiAgKiByZXRhaW4gY291
bnQgZ3JlYXRlciB0aGFuIDAsIGl0IHdpbGwgYmUgd3JpdHRlbiB0byBkaXNrIGZvciBsYXRlcgpA
QCAtOTcsNyArOTYsNiBAQCBlbnVtIHsKIH07CiAKIGVudW0gewotICAgIElDT05fTE9BREVELAog
ICAgIElDT05fQ0hBTkdFRCwKICAgICBJQ09OU19SRU1PVkVELAogCkBAIC0xNzgsMzAgKzE3Niw2
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX2NsYXNzX2luaXQoV2ViS2l0SWNv
bkRhdGFiYXNlQ2xhc3MqIGtsYXNzKQogICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKIAogICAgIC8qKgotICAgICAqIFdlYktpdEljb25EYXRhYmFzZTo6aWNvbi1sb2Fk
ZWQ6Ci0gICAgICogQGRhdGFiYXNlOiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMg
ZW1pdHRlZAotICAgICAqIEBmcmFtZTogdGhlIGZyYW1lIGNvbnRhaW5pbmcgdGhlIGljb24KLSAg
ICAgKiBAZnJhbWVfdXJpOiB0aGUgVVJJIG9mIHRoZSBmcmFtZSBjb250YWluaW5nIHRoZSBpY29u
Ci0gICAgICoKLSAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYSBmYXZpY29uIGlz
IGF2YWlsYWJsZSBmb3IgYSBwYWdlLAotICAgICAqIG9yIGEgY2hpbGQgZnJhbWUuCi0gICAgICog
U2VlIFdlYktpdFdlYlZpZXc6Omljb24tbG9hZGVkIGlmIHlvdSBvbmx5IG5lZWQgdGhlIGZhdmlj
b24gZm9yCi0gICAgICogdGhlIG1haW4gZnJhbWUgb2YgYSBwYXJ0aWN1bGFyICNXZWJLaXRXZWJW
aWV3LgotICAgICAqCi0gICAgICogU2luY2U6IDEuMy4xMwotICAgICAqLwotICAgIHdlYmtpdF9p
Y29uX2RhdGFiYXNlX3NpZ25hbHNbSUNPTl9MT0FERURdID0gZ19zaWduYWxfbmV3KCJpY29uLWxv
YWRlZCIsCi0gICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhrbGFzcyksCi0gICAgICAgICAg
ICAoR1NpZ25hbEZsYWdzKUdfU0lHTkFMX1JVTl9MQVNULAotICAgICAgICAgICAgMCwKLSAgICAg
ICAgICAgIE5VTEwsCi0gICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgd2Via2l0X21hcnNo
YWxfVk9JRF9fT0JKRUNUX1NUUklORywKLSAgICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAotICAg
ICAgICAgICAgV0VCS0lUX1RZUEVfV0VCX0ZSQU1FLAotICAgICAgICAgICAgR19UWVBFX1NUUklO
Ryk7Ci0KLSAgICAvKioKICAgICAgKiBXZWJLaXRJY29uRGF0YWJhc2U6Omljb24tY2hhbmdlZDoK
ICAgICAgKiBAZGF0YWJhc2U6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0
dGVkCiAgICAgICogQHBhZ2VfdXJpOiB0aGUgVVJJIG9mIHRoZSBwYWdlIHRoZSBpY29uIHdhcyBy
ZWFkIGZvcgpAQCAtNDEzLDcgKzM4Nyw2IEBAIGdjaGFyKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9n
ZXRfaWNvbl91cmkoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoCiAgKiBk
ZWZhdWx0IGljb24gaWYgdGhlcmUgaXMgbm8gaWNvbiBmb3IgdGhlIGdpdmVuIHBhZ2UuIFVzZQog
ICogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpKCkgaWYgeW91IG5lZWQgdG8gZGlz
dGluZ3Vpc2gKICAqIHRoZXNlIGNhc2VzLiAgVXN1YWxseSB5b3Ugd2FudCB0byBjb25uZWN0IHRv
Ci0gKiBXZWJLaXRJY29uRGF0YWJhc2U6Omljb24tbG9hZGVkIGFuZC9vcgogICogV2ViS2l0SWNv
bkRhdGFiYXNlOjppY29uLWNoYW5nZWQgYW5kIGNhbGwgdGhpcyBtZXRob2QgaW4gdGhlCiAgKiBj
YWxsYmFjay4KICAqCkBAIC00MjMsNyArMzk2LDcgQEAgZ2NoYXIqIHdlYmtpdF9pY29uX2RhdGFi
YXNlX2dldF9pY29uX3VyaShXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBnY2gK
ICAqIGJlIGNhY2hlZCB0aGVuIGl0IHNob3VsZCBsaXN0ZW4gdG8gaWNvbi1jaGFuZ2VkIHNpZ25h
bCBpbiBvcmRlciB0bwogICoga25vdyB3aGVuIHRoZSBpY29uIGRhdGEgaXMgYWN0dWFsbHkgYXZh
aWxhYmxlLiBPdGhlcndpc2UgaWYgdGhlCiAgKiBpY29uIG5lZWQgdG8gYmUgcmV0cmlldmVkIGZy
b20gYW4gZXh0ZXJuYWwgcmVzb3VyY2UgdGhlIGNsaWVudAotICogc2hvdWxkIGNvbm5lY3QgdG8g
aWNvbi1sb2FkZWQgc2lnbmFsLgorICogc2hvdWxkIGNvbm5lY3QgdG8gaWNvbi1jaGFuZ2VkIHNp
Z25hbC4KICAqCiAgKiBSZXF1aXJlcyBhbiBlbmFibGVkIGRhdGFiYXNlLgogICoKLS0gCjEuNy40
LjEKCg==
</data>
<flag name="review"
          id="80138"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92245</attachid>
            <date>2011-05-04 08:25:06 -0700</date>
            <delta_ts>2011-06-03 02:56:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-favicon.patch</filename>
            <type>text/plain</type>
            <size>32672</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSAxYTM3NzI2ZDg0NmYyYTQ0ZGYwYWYwYTc2Mjc0OWEyNmMyNzhjYmY5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFdlZCwgNCBNYXkgMjAxMSAxNzowMzozOCArMDIwMApTdWJqZWN0OiBbUEFUQ0hd
IGZhdmljb24KCi0tLQogU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDQ2ICsrKwogU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0gICAg
ICAgICAgICAgICAgICAgfCAgICAyICsKIC4uLi9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRHdGsuY3BwICAgIHwgICAgNCAtCiAuLi4vZ3RrL1dlYkNvcmVTdXBwb3J0L0ljb25E
YXRhYmFzZUNsaWVudEd0ay5jcHAgICB8ICAgNjQgKysrKwogLi4uL2d0ay9XZWJDb3JlU3VwcG9y
dC9JY29uRGF0YWJhc2VDbGllbnRHdGsuaCAgICAgfCAgIDUwICsrKwogU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwICAgICAgICAgfCAgICAyIC0KIFNvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuY3BwICAgIHwgIDM0MiArKysrKysrKysr
KysrKysrLS0tCiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmgg
ICAgICB8ICAgMjEgKystCiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5j
cHAgICAgICAgICB8ICAgMTAgKy0KIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2
aWV3LmggICAgICAgICAgIHwgICAgMyArLQogMTAgZmlsZXMgY2hhbmdlZCwgNDc3IGluc2VydGlv
bnMoKyksIDY3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0ljb25EYXRhYmFzZUNsaWVudEd0ay5jcHAKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JY29uRGF0YWJhc2VDbGll
bnRHdGsuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCAyZDI1NzY4Li5jYjczMmNlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTEtMDMtMjQgIFNlcmdpbyBWaWxsYXIgU2VuaW4g
IDxzdmlsbGFyQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgW0dUS10gV2ViS2l0SWNvbkRhdGFiYXNlIGRvZXNuJ3Qga2VlcCBpY29u
cyBjYWNoZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU2MjAwCisKKyAgICAgICAgQWRkZWQgbmV3IEFQSSB0byBhbGxvdyBhcHBzIHRvIHJldGFpbiBV
UkxzIGluIHRoZSBJY29uRGF0YWJhc2UuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIHJlbW92
ZXMgdGhlIEljb25EYXRhYmFzZSBvcGVuaW5nIGZyb20gV2ViS2l0R3RrKywgYXBwcworICAgICAg
ICBzaG91bGQgZG8gdGhhdC4gSWYgd2Ugb3BlbiB0aGUgZGF0YWJhc2UgaW4gV2ViS2l0IGFwcHMg
d29uJ3QgaGF2ZSB0aGUgY2hhbmNlCisgICAgICAgIHRvIGRlbGF5IGRhdGFiYXNlIGNsZWFudXAg
dG8gcmV0YWluIGljb25zIHRoZXkgYXJlIGludGVyZXN0ZWQgaW4uCisKKyAgICAgICAgTGFzdCBi
dXQgbm90IGxlYXN0LCAiaWNvbi1sb2FkZWQiIHNpZ25hbCBpcyByZW1vdmVkIGZyb20KKyAgICAg
ICAgV2ViS2l0SWNvbkRhdGFiYXNlIGFzIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuCisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JY29uRGF0YWJh
c2VDbGllbnRHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKGRpc3BhdGNoRGlkQWRkSWNvbkZvclBh
Z2VVUkxJbklkbGUpOgorICAgICAgICAoZGlzcGF0Y2hEaWRSZW1vdmVBbGxJY29uc0luSWRsZSk6
CisgICAgICAgIChJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpc3BhdGNoRGlkUmVtb3ZlQWxsSWNv
bnMpOgorICAgICAgICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpkaXNwYXRjaERpZEFkZEljb25G
b3JQYWdlVVJMKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JY29uRGF0YWJhc2VDbGllbnRH
dGsuaDogQWRkZWQuCisgICAgICAgICogd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwOgorICAgICAg
ICAod2Via2l0SW5pdCk6CisgICAgICAgICogd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHA6
CisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGFzc19pbml0KToKKyAgICAgICAgKHdl
YmtpdF9pY29uX2RhdGFiYXNlX2luaXQpOgorICAgICAgICAoZGVmYXVsdENsaWVudCk6CisgICAg
ICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0aCk6CisgICAgICAgIChjbG9zZUljb25E
YXRhYmFzZU9uRXhpdCk6CisgICAgICAgIChzdGFydFVwSWNvbkRhdGFiYXNlKToKKyAgICAgICAg
KHdlYmtpdF9pY29uX2RhdGFiYXNlX2lzX2VuYWJsZWQpOgorICAgICAgICAod2Via2l0X2ljb25f
ZGF0YWJhc2Vfc2V0X2VuYWJsZWQpOgorICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0
X3BhdGgpOgorICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpKToKKyAg
ICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zik6CisgICAgICAgICh3
ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhcik6CisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9kZWxheV9jbGVhbnVwKToKKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX2FsbG93X2Ns
ZWFudXApOgorICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2VfcmV0YWluX2ljb25fZm9yX3Vy
aSk6CisgICAgICAgICogd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oOgorICAgICAgICAqIHdl
YmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19nZXRfaWNv
bl9waXhidWYpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3Lmg6CisKIDIwMTEtMDQt
MjkgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE1hcnRpbiBSb2JpbnNvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2Vm
aWxlLmFtIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggMzVmODFlOC4u
ZTdmNjYzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KKysr
IGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KQEAgLTE5MCw2ICsxOTAsOCBAQCB3
ZWJraXRndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnJhbWVOZXR3b3JraW5nQ29udGV4dEd0ay5oIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcCBcCiAJU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5oIFwKKwlTb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JY29uRGF0YWJhc2VDbGllbnRHdGsuY3BwIFwKKwlT
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JY29uRGF0YWJhc2VDbGllbnRHdGsuaCBc
CiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmNw
cCBcCiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3Rr
LmggXAogCVNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1Bhc3RlYm9hcmRIZWxwZXJH
dGsuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAppbmRleCAzOWMwM2M5Li5lYWQxNTU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0
ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRHdGsuY3BwCkBAIC05MjcsMTAgKzkyNyw2IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKQogICAgIGlmIChtX2xvYWRpbmdFcnJvclBhZ2UpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IGdjaGFyKiBmcmFtZVVSSSA9IHdlYmtpdF93ZWJf
ZnJhbWVfZ2V0X3VyaShtX2ZyYW1lKTsKLSAgICBXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNl
ID0gd2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCk7Ci0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1l
KGRhdGFiYXNlLCAiaWNvbi1sb2FkZWQiLCBtX2ZyYW1lLCBmcmFtZVVSSSk7Ci0KICAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3ID0gZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKTsKIAogICAgIC8v
IEF2b2lkIHJlcG9ydGluZyBmYXZpY29ucyBmb3Igbm9uLW1haW4gZnJhbWVzLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSWNvbkRhdGFiYXNlQ2xpZW50R3Rr
LmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ljb25EYXRhYmFzZUNsaWVu
dEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRkZDQxMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ljb25EYXRh
YmFzZUNsaWVudEd0ay5jcHAKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
Y29uRGF0YWJhc2VDbGllbnRHdGsuaCIKKworI2luY2x1ZGUgIkljb25EYXRhYmFzZS5oIgorI2lu
Y2x1ZGUgIndlYmtpdGdsb2JhbHMuaCIKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8
Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV1RGOworCitib29sIEljb25EYXRhYmFzZUNsaWVu
dEd0azo6cGVyZm9ybUltcG9ydCgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSWNv
bkRhdGFiYXNlQ2xpZW50R3RrOjpkaWRSZW1vdmVBbGxJY29ucygpCit7CisgICAgZ19zaWduYWxf
ZW1pdF9ieV9uYW1lKHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpLCAiaWNvbnMtcmVtb3ZlZCIp
OworfQorCit2b2lkIEljb25EYXRhYmFzZUNsaWVudEd0azo6ZGlkSW1wb3J0SWNvblVSTEZvclBh
Z2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVVJMKQoreworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFt
ZSh3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKSwgImljb24tdXJpLWltcG9ydGVkIiwgcGFnZVVS
TC51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpZElt
cG9ydEljb25EYXRhRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7CisgICAgZ19z
aWduYWxfZW1pdF9ieV9uYW1lKHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpLCAiaWNvbi1kYXRh
LWltcG9ydGVkIiwgcGFnZVVSTC51dGY4KCkuZGF0YSgpKTsKK30KK3ZvaWQgSWNvbkRhdGFiYXNl
Q2xpZW50R3RrOjpkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIHBhZ2VVUkwp
Cit7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgp
LCAiaWNvbi1jaGFuZ2VkIiwgcGFnZVVSTC51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBJY29u
RGF0YWJhc2VDbGllbnRHdGs6OmRpZEZpbmlzaFVSTEltcG9ydCgpCit7Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JY29uRGF0YWJhc2VDbGllbnRHdGsu
aCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ljb25EYXRhYmFzZUNsaWVudEd0
ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMzcwOGMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JY29uRGF0YWJhc2VD
bGllbnRHdGsuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEln
YWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSWNvbkRhdGFiYXNlQ2xpZW50R3RrX2gKKyNkZWZp
bmUgSWNvbkRhdGFiYXNlQ2xpZW50R3RrX2gKKworI2luY2x1ZGUgIkljb25EYXRhYmFzZUNsaWVu
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJY29uRGF0YWJhc2U7Cit9OyAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVz
cGFjZSBXVEY7CisKK2NsYXNzIEljb25EYXRhYmFzZUNsaWVudEd0ayA6IHB1YmxpYyBXZWJDb3Jl
OjpJY29uRGF0YWJhc2VDbGllbnQgeworCitwdWJsaWM6CisgICAgLy8gSWNvbkRhdGFiYXNlQ2xp
ZW50IGludGVyZmFjZQorICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtSW1wb3J0KCk7CisgICAgdmly
dHVhbCB2b2lkIGRpZFJlbW92ZUFsbEljb25zKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEltcG9y
dEljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRJ
bXBvcnRJY29uRGF0YUZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lk
IGRpZENoYW5nZUljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRGaW5pc2hVUkxJbXBvcnQoKTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwIGIvU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwCmluZGV4IGI4ZDhiMWYuLjg2ZmVjNmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5jcHAKQEAgLTI3Miw4ICsyNzIsNiBA
QCB2b2lkIHdlYmtpdEluaXQoKQogICAgIFBhZ2VHcm91cDo6c2V0U2hvdWxkVHJhY2tWaXNpdGVk
TGlua3ModHJ1ZSk7CiAKICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT5zZXRI
ZWxwZXIoV2ViS2l0OjpwYXN0ZWJvYXJkSGVscGVySW5zdGFuY2UoKSk7Ci0gICAgR093blB0cjxn
Y2hhcj4gaWNvbkRhdGFiYXNlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9k
aXIoKSwgIndlYmtpdCIsICJpY29uZGF0YWJhc2UiLCBOVUxMKSk7Ci0gICAgd2Via2l0X2ljb25f
ZGF0YWJhc2Vfc2V0X3BhdGgod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCksIGljb25EYXRhYmFz
ZVBhdGguZ2V0KCkpOwogCiAgICAgU291cFNlc3Npb24qIHNlc3Npb24gPSB3ZWJraXRfZ2V0X2Rl
ZmF1bHRfc2Vzc2lvbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0aWNvbmRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRp
Y29uZGF0YWJhc2UuY3BwCmluZGV4IDM5N2JkNTEuLjI4NDJkOTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuY3BwCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBsYW5l
ZG8uY29tPgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTIwLDEwICsyMSw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
d2Via2l0aWNvbmRhdGFiYXNlLmgiCiAKLSNpbmNsdWRlICJEYXRhYmFzZURldGFpbHMuaCIKLSNp
bmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5j
bHVkZSAiSWNvbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSWNvbkRhdGFiYXNlQ2xpZW50R3RrLmgi
CiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAid2Vi
a2l0Z2xvYmFsc3ByaXZhdGUuaCIKQEAgLTQyLDE0ICs0Miw0MCBAQAogICogaW4gdGFiIGxhYmVs
cywgd2luZG93IGNhcHRpb25zIG9yIGJvb2ttYXJrcy4gQWxsIHZpZXdzIHNoYXJlCiAgKiB0aGUg
c2FtZSBpY29uIGRhdGFiYXNlLgogICoKLSAqIFRoZSBpY29uIGRhdGFiYXNlIGlzIGVuYWJsZWQg
YnkgZGVmYXVsdCBhbmQgc3RvcmVkIGluCi0gKiB+Ly5sb2NhbC9zaGFyZS93ZWJraXQvaWNvbmRh
dGFiYXNlLCBkZXBlbmRpbmcgb24gWERHX0RBVEFfSE9NRS4KKyAqIFRoZSBpY29uIGRhdGFiYXNl
IG11c3QgYmUgZXhwbGljaXRseSBlbmFibGVkLiBJZiBubyBkYXRhYmFzZSBwYXRoCisgKiBpcyBz
cGVjaWZpZWQgdGhlbiBpdCB3aWxsIHVzZSB+Ly5sb2NhbC9zaGFyZS93ZWJraXQvaWNvbmRhdGFi
YXNlIGJ5CisgKiBkZWZhdWx0LCBkZXBlbmRpbmcgb24gWERHX0RBVEFfSE9NRS4KICAqCiAgKiBX
ZWJLaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGxvb2sgZm9yIGF2YWlsYWJsZSBpY29ucyBpbiBsaW5r
IGVsZW1lbnRzCiAgKiBvbiBvcGVuZWQgcGFnZXMgYXMgd2VsbCBhcyBhbiBleGlzdGluZyBmYXZp
Y29uLmljbyBhbmQgbG9hZCB0aGUKLSAqIGltYWdlcyBmb3VuZCBpbnRvIHRoZSBtZW1vcnkgY2Fj
aGUgaWYgcG9zc2libGUuIFRoZSBzaWduYWwgImljb24tbG9hZGVkIgotICogd2lsbCBiZSBlbWl0
dGVkIHdoZW4gYW55IGljb24gaXMgZm91bmQgYW5kIGxvYWRlZC4KLSAqIE9sZCBJY29ucyBhcmUg
YXV0b21hdGljYWxseSBjbGVhbmVkIHVwIGFmdGVyIDQgZGF5cy4KKyAqIGltYWdlcyBmb3VuZCBp
bnRvIHRoZSBtZW1vcnkgY2FjaGUgaWYgcG9zc2libGUuIE9sZCBJY29ucyBhcmUKKyAqIGF1dG9t
YXRpY2FsbHkgY2xlYW5lZCB1cCBhZnRlciA0IGRheXMuCisgKgorICogRXZlcnkgaWNvbiBpbiB0
aGUgZGF0YWJhc2UgaGFzIGEgcmV0YWluIGNvdW50LiAgSWYgYW4gaWNvbiBoYXMgYQorICogcmV0
YWluIGNvdW50IGdyZWF0ZXIgdGhhbiAwLCBpdCB3aWxsIGJlIHdyaXR0ZW4gdG8gZGlzayBmb3Ig
bGF0ZXIKKyAqIHVzZS4gSWYgYW4gaWNvbidzIHJldGFpbiBjb3VudCBlcXVhbHMgemVybyBpdCB3
aWxsIGJlIHJlbW92ZWQgZnJvbQorICogZGlzay4gIFRoZSByZXRhaW4gY291bnQgaXMgbm90IHBl
cnNpc3RlbnQgYWNyb3NzIGxhdW5jaGVzLiBJZiB0aGUKKyAqIFdlYktpdCBjbGllbnQgd2lzaGVz
IHRvIHJldGFpbiBhbiBpY29uIGl0IHNob3VsZCByZXRhaW4gdGhlIGljb24KKyAqIG9uY2UgZm9y
IGV2ZXJ5IGxhdW5jaC4gIFRoaXMgaXMgYmVzdCBkb25lIGF0IGluaXRpYWxpemF0aW9uIHRpbWUK
KyAqIGJlZm9yZSB0aGUgZGF0YWJhc2UgYmVnaW5zIHJlbW92aW5nIGljb25zLiAgVG8gbWFrZSBz
dXJlIHRoYXQgdGhlCisgKiBkYXRhYmFzZSBkb2VzIG5vdCByZW1vdmUgdW5yZXRhaW5lZCBpY29u
cyBwcmVtYXR1cmVseSwgY2FsbAorICogd2Via2l0X2ljb25fZGF0YWJhc2VfZGVsYXlfZGF0YWJh
c2VfY2xlYW51cCgpIHVudGlsIGFsbCBkZXNpcmVkCisgKiBpY29ucyBhcmUgcmV0YWluZWQuICBP
bmNlIGFsbCBhcmUgcmV0YWluZWQsIGNhbGwKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2FsbG93
X2RhdGFiYXNlX2NsZWFudXAoKS4KKyAqCisgKiBTbyBpZiB5b3Ugd2FudCB0byBoYXZlIGEgcGVy
c2lzdGVudCBpY29uIGRhdGFiYXNlIGFjcm9zcyBsYXVuY2hlcworICogeW91ciBwcm9ncmFtIHdp
bGwgdHlwaWNhbGx5IGRvOgorICogfFsKKyAqIGRhdGFiYXNlID0gd2Via2l0X2dldF9pY29uX2Rh
dGFiYXNlKCk7CisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9kZWxheV9kYXRhYmFzZV9jbGVhbnVw
KGRhdGFiYXNlKTsKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9lbmFibGVkKGRhdGFiYXNl
LCBUUlVFKTsKKyAqCisgKiAvLyBUaGlzIHdpbGwgYmUgbGlrZWx5IGEgbG9vcCBvdmVyIGEgbGlz
dCBvZiBVUklzLiBJbiB0aGUgY2FzZSBvZiBhIGJyb3dzZXIKKyAqIC8vIHRob3NlIFVSSXMgd291
bGQgYmUgdGhlIGdsb2JhbCBoaXN0b3J5IGl0ZW1zLCBib29rbWFya3MsIGV0Yy4uLgorICogd2Vi
a2l0X2ljb25fZGF0YWJhc2VfcmV0YWluX2ljb25fZm9yX3VyaShkYXRhYmFzZSwgcGFnZV91cmlf
b2ZfaWNvbl95b3Vfd2FudF90b19yZXRhaW4pOworICoKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNl
X2FsbG93X2RhdGFiYXNlX2NsZWFudXAoZGF0YWJhc2UpOworICogXXwKICAqCiAgKiB3ZWJraXRf
aWNvbl9kYXRhYmFzZV9zZXRfcGF0aCgpIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgbG9jYXRp
b24KICAqIG9mIHRoZSBkYXRhYmFzZSBhbmQgYWxzbyB0byBkaXNhYmxlIGl0IGJ5IHBhc3Npbmcg
JU5VTEwuCkBAIC03MCw3ICs5NiwxMCBAQCBlbnVtIHsKIH07CiAKIGVudW0gewotICAgIElDT05f
TE9BREVELAorICAgIElDT05fQ0hBTkdFRCwKKyAgICBJQ09OX1VSSV9JTVBPUlRFRCwKKyAgICBJ
Q09OX0RBVEFfSU1QT1JURUQsCisgICAgSUNPTlNfUkVNT1ZFRCwKIAogICAgIExBU1RfU0lHTkFM
CiB9OwpAQCAtMTQ5LDI5ICsxNzgsOTEgQEAgc3RhdGljIHZvaWQgd2Via2l0X2ljb25fZGF0YWJh
c2VfY2xhc3NfaW5pdChXZWJLaXRJY29uRGF0YWJhc2VDbGFzcyoga2xhc3MpCiAgICAgICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwogCiAgICAgLyoqCi0gICAgICogV2ViS2l0
SWNvbkRhdGFiYXNlOjppY29uLWxvYWRlZDoKKyAgICAgKiBXZWJLaXRJY29uRGF0YWJhc2U6Omlj
b24tY2hhbmdlZDoKICAgICAgKiBAZGF0YWJhc2U6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNp
Z25hbCBpcyBlbWl0dGVkCi0gICAgICogQGZyYW1lOiB0aGUgZnJhbWUgY29udGFpbmluZyB0aGUg
aWNvbgotICAgICAqIEBmcmFtZV91cmk6IHRoZSBVUkkgb2YgdGhlIGZyYW1lIGNvbnRhaW5pbmcg
dGhlIGljb24KKyAgICAgKiBAcGFnZV91cmk6IHRoZSBVUkkgb2YgdGhlIHBhZ2UgdGhlIGljb24g
d2FzIHJlYWQgZm9yCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4g
dGhlIGljb24gZm9yIGEgcGFydGljdWxhciBVUkwKKyAgICAgKiBjaGFuZ2VzIGluIHRoZSBkYXRh
YmFzZS4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuMTQKKyAgICAgKi8KKyAgICB3ZWJraXRf
aWNvbl9kYXRhYmFzZV9zaWduYWxzW0lDT05fQ0hBTkdFRF0gPSBnX3NpZ25hbF9uZXcoImljb24t
Y2hhbmdlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhrbGFzcyksCisgICAgICAg
ICAgICAoR1NpZ25hbEZsYWdzKUdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgZ19jY2xvc3Vy
ZV9tYXJzaGFsX1ZPSURfX1NUUklORywKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAg
ICAgICAgICAgR19UWVBFX1NUUklORyk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRJY29uRGF0
YWJhc2U6Omljb24tdXJpLWltcG9ydGVkOgorICAgICAqIEBkYXRhYmFzZTogdGhlIG9iamVjdCBv
biB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAcGFnZV91cmk6IHRoZSBVUkkg
b2YgdGhlIHBhZ2UgdGhlIGljb24gd2FzIHJlYWQgZm9yCisgICAgICoKKyAgICAgKiBUaGlzIHNp
Z25hbCBpcyBlbWl0dGVkIHdoZW4gdGhlIGljb24gZGF0YWJhc2UgaW1wb3J0cyB0aGUgVVJJCisg
ICAgICogb2YgdGhlIGljb24gYXNzb2NpYXRlZCB3aXRoIHNvbWUgcGFnZS4KICAgICAgKgotICAg
ICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBhIGZhdmljb24gaXMgYXZhaWxhYmxlIGZv
ciBhIHBhZ2UsCi0gICAgICogb3IgYSBjaGlsZCBmcmFtZS4KLSAgICAgKiBTZWUgV2ViS2l0V2Vi
Vmlldzo6aWNvbi1sb2FkZWQgaWYgeW91IG9ubHkgbmVlZCB0aGUgZmF2aWNvbiBmb3IKLSAgICAg
KiB0aGUgbWFpbiBmcmFtZSBvZiBhIHBhcnRpY3VsYXIgI1dlYktpdFdlYlZpZXcuCisgICAgICog
Tm90ZSB0aGF0IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZigpIHdpbGwgc3Rp
bGwKKyAgICAgKiByZXR1cm4gTlVMTCB1bnRpbCB0aGUgaWNvbiBkYXRhIGlzIGFjdHVhbGx5IGlt
cG9ydGVkIGluIHRoZQorICAgICAqIGRhdGFiYXNlLiBJZiB5b3UganVzdCB3YW50IHRvIGtub3cg
d2hlbiB0aGUgaWNvbiBkYXRhIGlzCisgICAgICogYXZhaWxhYmxlIHRoZW4gYmV0dGVyIGxpc3Rl
biB0byAiaWNvbi1kYXRhLWltcG9ydGVkIiBpbnN0ZWFkIG9mCisgICAgICogdGhpcyBzaWduYWwu
CiAgICAgICoKLSAgICAgKiBTaW5jZTogMS4zLjEzCisgICAgICogU2luY2U6IDEuMy4xNAogICAg
ICAqLwotICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NpZ25hbHNbSUNPTl9MT0FERURdID0gZ19z
aWduYWxfbmV3KCJpY29uLWxvYWRlZCIsCisgICAgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2lnbmFs
c1tJQ09OX1VSSV9JTVBPUlRFRF0gPSBnX3NpZ25hbF9uZXcoImljb24tdXJpLWltcG9ydGVkIiwK
ICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGtsYXNzKSwKICAgICAgICAgICAgIChHU2ln
bmFsRmxhZ3MpR19TSUdOQUxfUlVOX0xBU1QsCiAgICAgICAgICAgICAwLAogICAgICAgICAgICAg
TlVMTCwKICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9WT0lE
X19PQkpFQ1RfU1RSSU5HLAotICAgICAgICAgICAgR19UWVBFX05PTkUsIDIsCi0gICAgICAgICAg
ICBXRUJLSVRfVFlQRV9XRUJfRlJBTUUsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxf
Vk9JRF9fU1RSSU5HLAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCiAgICAgICAgICAgICBH
X1RZUEVfU1RSSU5HKTsKIAorICAgIC8qKgorICAgICAqIFdlYktpdEljb25EYXRhYmFzZTo6aWNv
bi11cmktaW1wb3J0ZWQ6CisgICAgICogQGRhdGFiYXNlOiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRo
ZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEBwYWdlX3VyaTogdGhlIFVSSSBvZiB0aGUgcGFn
ZSB0aGUgaWNvbiB3YXMgcmVhZCBmb3IKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVt
aXR0ZWQgd2hlbiB0aGUgaWNvbiBkYXRhYmFzZSBpbXBvcnRzIHRoZQorICAgICAqIGFjdHVhbCBk
YXRhIG9mIGFuIGljb24uCisgICAgICoKKyAgICAgKiBBZnRlciByZWNlaXZpbmcgdGhpcyBzaWdu
YWwKKyAgICAgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoKSB3aWxsIHN1
Y2Nlc3NmdWxseSByZXR1cm4KKyAgICAgKiB0aGUgaWNvbiBkYXRhIGFzc29jaWF0dGVkIHdpdGgg
dGhlIHByb3ZpZGVkIHBhZ2UgVVJJLgorICAgICAqCisgICAgICogU2luY2U6IDEuMy4xNAorICAg
ICAqLworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NpZ25hbHNbSUNPTl9EQVRBX0lNUE9SVEVE
XSA9IGdfc2lnbmFsX25ldygiaWNvbi1kYXRhLWltcG9ydGVkIiwKKyAgICAgICAgICAgIEdfVFlQ
RV9GUk9NX0NMQVNTKGtsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpR19TSUdOQUxf
UlVOX0xBU1QsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAg
IE5VTEwsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fU1RSSU5HLAorICAg
ICAgICAgICAgR19UWVBFX05PTkUsIDEsCisgICAgICAgICAgICBHX1RZUEVfU1RSSU5HKTsKKwor
ICAgIC8qKgorICAgICAqIFdlYktpdEljb25EYXRhYmFzZTo6aWNvbnMtcmVtb3ZlZDoKKyAgICAg
KiBAZGF0YWJhc2U6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisg
ICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYWxsIHRoZSBpY29ucyBh
cmUgcmVtb3ZlZCBmcm9tIHRoZSBkYWJhdGFzZQorICAgICAqIFNpbmNlOiAxLjMuMTQKKyAgICAg
Ki8KKyAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zaWduYWxzW0lDT05TX1JFTU9WRURdID0gZ19z
aWduYWxfbmV3KCJpY29ucy1yZW1vdmVkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNT
KGtsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpR19TSUdOQUxfUlVOX0xBU1QsCisg
ICAgICAgICAgICAwLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAg
ICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwKKyAgICAgICAgICAgIEdfVFlQ
RV9OT05FLCAwKTsKKwogICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9m
KFdlYktpdEljb25EYXRhYmFzZVByaXZhdGUpKTsKIH0KIApAQCAtMTgwLDYgKzI3MSwxNSBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9pbml0KFdlYktpdEljb25EYXRhYmFzZSog
ZGF0YWJhc2UpCiAgICAgZGF0YWJhc2UtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZB
VEUoZGF0YWJhc2UsIFdFQktJVF9UWVBFX0lDT05fREFUQUJBU0UsIFdlYktpdEljb25EYXRhYmFz
ZVByaXZhdGUpOwogICAgIC8vICdwbGFjZW1lbnQgbmV3IHN5bnRheCcsIHNlZSB3ZWJraXR3ZWJ2
aWV3LmNwcAogICAgIG5ldyAoZGF0YWJhc2UtPnByaXYpIFdlYktpdEljb25EYXRhYmFzZVByaXZh
dGUoKTsKKworICAgIC8vIERpc2FibGVkIGJ5IGRlZmF1bHQKKyAgICBXZWJDb3JlOjppY29uRGF0
YWJhc2UoKS5zZXRFbmFibGVkKGZhbHNlKTsKK30KKworc3RhdGljIEljb25EYXRhYmFzZUNsaWVu
dEd0ayogZGVmYXVsdENsaWVudCgpCit7CisgICAgc3RhdGljIEljb25EYXRhYmFzZUNsaWVudEd0
ayogZGVmYXVsdENsaWVudCA9IG5ldyBJY29uRGF0YWJhc2VDbGllbnRHdGsoKTsKKyAgICByZXR1
cm4gZGVmYXVsdENsaWVudDsKIH0KIAogLyoqCkBAIC0xODgsNyArMjg4LDcgQEAgc3RhdGljIHZv
aWQgd2Via2l0X2ljb25fZGF0YWJhc2VfaW5pdChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNl
KQogICoKICAqIERldGVybWluZXMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGRhdGFiYXNlIGZv
bGRlciBvbiBkaXNrLgogICoKLSAqIFJldHVybnM6IHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBk
YXRhYmFzZSBmb2xkZXIsIG9yICVOVUxMCisgKiBSZXR1cm5zOiB0aGUgYWJzb2x1dGUgcGF0aCBv
ZiB0aGUgZGF0YWJhc2UgZm9sZGVyCiAgKgogICogU2luY2U6IDEuMy4xMwogICoqLwpAQCAtMTk2
LDE0ICsyOTYsNjggQEAgR19DT05TVF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF9pY29uX2RhdGFiYXNl
X2dldF9wYXRoKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UKIHsKICAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShkYXRhYmFzZSksIDApOwogCisgICAg
aWYgKCFkYXRhYmFzZS0+cHJpdi0+cGF0aC5nZXQoKSkgeworICAgICAgICAvLyBEbyBub3QgdXNl
IHNldF9wYXRoKCksIG90aGVyd2lzZSB3ZSBjb3VsZCBlbmQgdXAgY2FsbGluZworICAgICAgICAv
LyBzdGFydHVwSWNvbkRhdGFiYXNlIHR3aWNlLgorICAgICAgICBkYXRhYmFzZS0+cHJpdi0+cGF0
aC5zZXQoZ19idWlsZF9maWxlbmFtZShnX2dldF91c2VyX2RhdGFfZGlyKCksICJ3ZWJraXQiLCAi
aWNvbmRhdGFiYXNlIiwgTlVMTCkpOworICAgIH0KKwogICAgIHJldHVybiBkYXRhYmFzZS0+cHJp
di0+cGF0aC5nZXQoKTsKIH0KIAogc3RhdGljIHZvaWQgY2xvc2VJY29uRGF0YWJhc2VPbkV4aXQo
KQogewotICAgIGlmIChXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5pc0VuYWJsZWQoKSkgeworICAg
IFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLmNsb3NlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0
VXBJY29uRGF0YWJhc2UoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBXZWJD
b3JlOjppY29uRGF0YWJhc2UoKS5zZXRDbGllbnQoZGVmYXVsdENsaWVudCgpKTsKKyAgICBXZWJD
b3JlOjppY29uRGF0YWJhc2UoKS5vcGVuKHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9wYXRoKGRh
dGFiYXNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEljb25EYXRhYmFzZTo6
ZGVmYXVsdERhdGFiYXNlRmlsZW5hbWUoKSk7CisKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXpl
ZCA9IGZhbHNlOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgYXRleGl0KGNsb3Nl
SWNvbkRhdGFiYXNlT25FeGl0KTsKKyAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH0K
K30KKworLyoqCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfZW5hYmxlZDoKKyAqIEBkYXRh
YmFzZTogYSAjV2ViS2l0SWNvbkRhdGFiYXNlCisgKgorICogV2hldGhlciBvciBub3QgdGhlIGlj
b24gZGF0YWJhc2UgaXMgZW5hYmxlZAorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIGRhdGFi
YXNlIGlzIGVuYWJsZWQsIEZBTFNFIG90aGVyd2lzZQorICoKKyAqIFNpbmNlOiAxLjMuMTQKKyAq
Ki8KK2dib29sZWFuIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9lbmFibGVkKFdlYktpdEljb25E
YXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6Omljb25EYXRhYmFzZSgp
LmlzRW5hYmxlZCgpOworfQorCisvKioKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9lbmFi
bGVkOgorICogQGRhdGFiYXNlOiBhICNXZWJLaXRJY29uRGF0YWJhc2UKKyAqIEBlbmFibGVkOiBU
UlVFIHRvIGVuYWJsZSB0aGUgZGF0YWJhc2UsIEZBTFNFIHRvIGRpc2FibGUgaXQKKyAqCisgKiBF
bmFibGVzIG9yIGRpc2FibGVzIHRoZSBpY29uIGRhdGFiYXNlLiBXZWJLaXQgd2lsbCBvcGVuIGFu
ZCByZWFkCisgKiB0aGUgaWNvbiBkYXRhYmFzZSBhcyBzb29uIGFzIGl0IGlzIGVuYWJsZWQuIE5v
dGUgdGhhdCBtb3N0IG9mCisgKiAjV2ViS2l0SWNvbkRhdGFiYXNlIG1ldGhvZHMgcmVxdWlyZSB0
aGUgZGF0YWJhc2UgdG8gYmUgZW5hYmxlZC4KKyAqCisgKiBTaW5jZTogMS4zLjE0CisgKiovCit2
b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9lbmFibGVkKFdlYktpdEljb25EYXRhYmFzZSog
ZGF0YWJhc2UsIGdib29sZWFuIGVuYWJsZWQpCit7CisgICAgZ2Jvb2xlYW4gY3VycmVudGx5RW5h
YmxlZCA9IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9lbmFibGVkKGRhdGFiYXNlKTsKKworICAg
IGlmIChjdXJyZW50bHlFbmFibGVkICYmICFlbmFibGVkKQogICAgICAgICBXZWJDb3JlOjppY29u
RGF0YWJhc2UoKS5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgV2ViQ29yZTo6aWNvbkRhdGFi
YXNlKCkuY2xvc2UoKTsKKyAgICBlbHNlIGlmICghY3VycmVudGx5RW5hYmxlZCAmJiBlbmFibGVk
KSB7CisgICAgICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLnNldEVuYWJsZWQodHJ1ZSk7Cisg
ICAgICAgIHN0YXJ0VXBJY29uRGF0YWJhc2UoZGF0YWJhc2UpOwogICAgIH0KIH0KIApAQCAtMjEy
LDM1ICszNjYsMjUgQEAgc3RhdGljIHZvaWQgY2xvc2VJY29uRGF0YWJhc2VPbkV4aXQoKQogICog
QGRhdGFiYXNlOiBhICNXZWJLaXRJY29uRGF0YWJhc2UKICAqIEBwYXRoOiBhbiBhYnNvbHV0ZSBw
YXRoIHRvIHRoZSBpY29uIGRhdGFiYXNlIGZvbGRlcgogICoKLSAqIFNwZWNpZmllcyB0aGUgYWJz
b2x1dGUgcGF0aCB0byB0aGUgZGF0YWJhc2UgZm9sZGVyIG9uIGRpc2suCi0gKgotICogUGFzc2lu
ZyAlTlVMTCBvciAiIiBkaXNhYmxlcyB0aGUgaWNvbiBkYXRhYmFzZS4KKyAqIFNwZWNpZmllcyB0
aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZGF0YWJhc2UgZm9sZGVyIG9uIGRpc2suIElmCisgKiBh
bm90aGVyIGRhdGFiYXNlIGlzIGFscmVhZHkgb3BlbmVkIGluIGEgZGlmZmVyZW50IGxvY2F0aW9u
IHRoaXMKKyAqIGNhbGwgd2lsbCByZXN1bHQgaW4gdGhlIGNsb3Npbmcgb2YgdGhlIHByZXZpb3Vz
IGRhdGFiYXNlIGFuZCB0aGUKKyAqIG9wZW5pbmcgb2YgdGhlIG9uZSBpbiB0aGUgbmV3IGxvY2F0
aW9uLgogICoKICAqIFNpbmNlOiAxLjMuMTMKICAqKi8KIHZvaWQgd2Via2l0X2ljb25fZGF0YWJh
c2Vfc2V0X3BhdGgoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBh
dGgpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShkYXRh
YmFzZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwocGF0aCk7CiAKLSAgICBpZiAoZGF0YWJhc2Ut
PnByaXYtPnBhdGguZ2V0KCkpCisgICAgaWYgKGdfc3RyY21wMChwYXRoLCBkYXRhYmFzZS0+cHJp
di0+cGF0aC5nZXQoKSkpCiAgICAgICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLmNsb3NlKCk7
CiAKLSAgICBpZiAoIShwYXRoICYmIHBhdGhbMF0pKSB7Ci0gICAgICAgIGRhdGFiYXNlLT5wcml2
LT5wYXRoLnNldCgwKTsKLSAgICAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc2V0RW5hYmxl
ZChmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBkYXRhYmFzZS0+cHJpdi0+
cGF0aC5zZXQoZ19zdHJkdXAocGF0aCkpOwogCi0gICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCku
c2V0RW5hYmxlZCh0cnVlKTsKLSAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5vcGVuKFdlYkNv
cmU6OmZpbGVuYW1lVG9TdHJpbmcoZGF0YWJhc2UtPnByaXYtPnBhdGguZ2V0KCkpLCBXZWJDb3Jl
OjpJY29uRGF0YWJhc2U6OmRlZmF1bHREYXRhYmFzZUZpbGVuYW1lKCkpOwotCi0gICAgc3RhdGlj
IGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAg
ICAgIGF0ZXhpdChjbG9zZUljb25EYXRhYmFzZU9uRXhpdCk7Ci0gICAgICAgIGluaXRpYWxpemVk
ID0gdHJ1ZTsKLSAgICB9CisgICAgaWYgKFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLmlzRW5hYmxl
ZCgpKQorICAgICAgICBzdGFydFVwSWNvbkRhdGFiYXNlKGRhdGFiYXNlKTsKIH0KIAogLyoqCkBA
IC0yNDgsMTAgKzM5MiwxMyBAQCB2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKFdl
YktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGdjaGFyKiBwYQogICogQGRhdGFiYXNl
OiBhICNXZWJLaXRJY29uRGF0YWJhc2UKICAqIEBwYWdlX3VyaTogVVJJIG9mIHRoZSBwYWdlIGNv
bnRhaW5pbmcgdGhlIGljb24KICAqCi0gKiBPYnRhaW5zIHRoZSBVUkkgZm9yIHRoZSBmYXZpY29u
IGZvciB0aGUgZ2l2ZW4gcGFnZSBVUkkuCi0gKiBTZWUgYWxzbyB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2ljb25fdXJpKCkuCisgKiBPYnRhaW5zIHRoZSBVUkkgZm9yIHRoZSBmYXZpY29uIGZvciB0aGUg
Z2l2ZW4gcGFnZSBVUkkuIFNlZSBhbHNvCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJp
KCkuCiAgKgotICogUmV0dXJuczogYSBuZXdseSBhbGxvY2F0ZWQgVVJJIGZvciB0aGUgZmF2aWNv
biwgb3IgJU5VTEwKKyAqIFJlcXVpcmVzIGFuIGVuYWJsZWQgZGF0YWJhc2UuCisgKgorICogUmV0
dXJuczogYSBuZXdseSBhbGxvY2F0ZWQgVVJJIGZvciB0aGUgZmF2aWNvbiwgb3IgJU5VTEwgaWYg
dGhlCisgKiBpY29uIGlzIG5vdCBjYWNoZWQgb3IgdGhlIGRhdGFiYXNlIGlzIG5vdCBlbmFibGVk
LgogICoKICAqIFNpbmNlOiAxLjMuMTMKICAqKi8KQEAgLTI2MCw2ICs0MDcsOSBAQCBnY2hhciog
d2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpKFdlYktpdEljb25EYXRhYmFzZSogZGF0
YWJhc2UsIGNvbnN0IGdjaAogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19JQ09O
X0RBVEFCQVNFKGRhdGFiYXNlKSwgMCk7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocGFnZVVS
SSwgMCk7CiAKKyAgICBpZiAoIVdlYkNvcmU6Omljb25EYXRhYmFzZSgpLmlzRW5hYmxlZCgpKQor
ICAgICAgICByZXR1cm4gMDsKKwogICAgIFN0cmluZyBwYWdlVVJMID0gU3RyaW5nOjpmcm9tVVRG
OChwYWdlVVJJKTsKICAgICByZXR1cm4gZ19zdHJkdXAoV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCku
c3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChwYWdlVVJMKS51dGY4KCkuZGF0YSgpKTsKIH0K
QEAgLTI2OCwyNiArNDE4LDQwIEBAIGdjaGFyKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl91cmkoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoCiAgKiB3ZWJraXRf
aWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWY6CiAgKiBAZGF0YWJhc2U6IGEgI1dlYktpdElj
b25EYXRhYmFzZQogICogQHBhZ2VfdXJpOiBVUkkgb2YgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUg
aWNvbgorICogQHNpemU6IHRoZSBkZXNpcmVkIHdpZHRoIGFuZCBsZW5ndGggZm9yIHRoZSBpY29u
CisgKgorICogT2J0YWlucyBhICNHZGtQaXhidWYgb2YgdGhlIGZhdmljb24gZm9yIHRoZSBnaXZl
biBwYWdlIFVSSSwgb3IgYQorICogZGVmYXVsdCBpY29uIGlmIHRoZXJlIGlzIG5vIGljb24gZm9y
IHRoZSBnaXZlbiBwYWdlLiBVc2UKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3Vy
aSgpIGlmIHlvdSBuZWVkIHRvIGRpc3Rpbmd1aXNoCisgKiB0aGVzZSBjYXNlcy4gIFVzdWFsbHkg
eW91IHdhbnQgdG8gY29ubmVjdCB0bworICogV2ViS2l0SWNvbkRhdGFiYXNlOjppY29uLWNoYW5n
ZWQgYW5kIGNhbGwgdGhpcyBtZXRob2QgaW4gdGhlCisgKiBjYWxsYmFjay4KICAqCi0gKiBPYnRh
aW5zIGEgI0dka1BpeGJ1ZiBvZiB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVuIHBhZ2UgVVJJLCBv
cgotICogYSBkZWZhdWx0IGljb24gaWYgdGhlcmUgaXMgbm8gaWNvbiBmb3IgdGhlIGdpdmVuIHBh
Z2UuIFVzZQotICogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpKCkgaWYgeW91IG5l
ZWQgdG8gZGlzdGluZ3Vpc2ggdGhlc2UgY2FzZXMuCi0gKiBVc3VhbGx5IHlvdSB3YW50IHRvIGNv
bm5lY3QgdG8gV2ViS2l0SWNvbkRhdGFiYXNlOjppY29uLWxvYWRlZCBhbmQgY2FsbCB0aGlzCi0g
KiBtZXRob2QgaW4gdGhlIGNhbGxiYWNrLgorICogQXMgdGhlIFdlYktpdCdzIEljb25EYXRhYmFz
ZSBsb2FkcyB0aGUgaWNvbiBkYXRhIGFzeW5jaHJvbm91c2x5IGFuZAorICogaW4gYSBwZXItZGVt
YW5kIGJhc2lzLCB0aGlzIG1ldGhvZCBjb3VsZCByZXR1cm4gTlVMTCBldmVuIGlmIHRoZQorICog
aWNvbiBpcyBhY3R1YWxseSBjYWNoZWQuIElmIHRoZSBjYWxsZXIga25vd3MgdGhhdCB0aGUgaWNv
biBzaG91bGQKKyAqIGJlIGNhY2hlZCB0aGVuIGl0IHNob3VsZCBsaXN0ZW4gdG8gaWNvbi1jaGFu
Z2VkIHNpZ25hbCBpbiBvcmRlciB0bworICoga25vdyB3aGVuIHRoZSBpY29uIGRhdGEgaXMgYWN0
dWFsbHkgYXZhaWxhYmxlLiBPdGhlcndpc2UgaWYgdGhlCisgKiBpY29uIG5lZWQgdG8gYmUgcmV0
cmlldmVkIGZyb20gYW4gZXh0ZXJuYWwgcmVzb3VyY2UgdGhlIGNsaWVudAorICogc2hvdWxkIGNv
bm5lY3QgdG8gaWNvbi1jaGFuZ2VkIHNpZ25hbC4KICAqCi0gKiBUaGUgcGl4YnVmIHdpbGwgaGF2
ZSB0aGUgbGFyZ2VzdCBzaXplIHByb3ZpZGVkIGJ5IHRoZSBzZXJ2ZXIgYW5kIHNob3VsZAotICog
YmUgcmVzaXplZCBiZWZvcmUgaXQgaXMgZGlzcGxheWVkLgotICogU2VlIGFsc28gd2Via2l0X3dl
Yl92aWV3X2dldF9pY29uX3BpeGJ1ZigpLgorICogUmVxdWlyZXMgYW4gZW5hYmxlZCBkYXRhYmFz
ZS4KKyAqCisgKiBJZiBAc2l6ZSBpcyAwIHRoZSBwaXhidWYgd2lsbCBoYXZlIHRoZSBsYXJnZXN0
IHNpemUgcHJvdmlkZWQgYnkgdGhlCisgKiBzZXJ2ZXIuIFNlZSBhbHNvIHdlYmtpdF93ZWJfdmll
d19nZXRfaWNvbl9waXhidWYoKS4KICAqCiAgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEg
bmV3IHJlZmVyZW5jZSB0byBhICNHZGtQaXhidWYsIG9yICVOVUxMCiAgKgogICogU2luY2U6IDEu
My4xMwogICoqLwotR2RrUGl4YnVmKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhi
dWYoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkkpCitH
ZGtQaXhidWYqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZihXZWJLaXRJY29u
RGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBnY2hhciogcGFnZVVSSSwgZ3VpbnQgc2l6ZSkKIHsK
ICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShkYXRhYmFz
ZSksIDApOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHBhZ2VVUkksIDApOwogCisgICAgaWYg
KCFXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5pc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKICAgICBTdHJpbmcgcGFnZVVSTCA9IFN0cmluZzo6ZnJvbVVURjgocGFnZVVSSSk7CiAgICAg
Ly8gVGhlIGV4YWN0IHNpemUgd2UgcGFzcyBpcyBpcnJlbGV2YW50IHRvIHRoZSBXZWJDb3JlOjpp
Y29uRGF0YWJhc2UgY29kZS4KICAgICAvLyBXZSBtdXN0IHBhc3Mgc29tZXRoaW5nIGdyZWF0ZXIg
dGhhbiAwLCAwIHRvIGdldCBhIHBpeGJ1Zi4KQEAgLTI5Nyw3ICs0NjEsMTEgQEAgR2RrUGl4YnVm
KiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoV2ViS2l0SWNvbkRhdGFiYXNl
KiBkYXRhYmFzZSwgY28KICAgICBHZGtQaXhidWYqIHBpeGJ1ZiA9IGljb24tPmdldEdka1BpeGJ1
ZigpOwogICAgIGlmICghcGl4YnVmKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8R2RrUGl4YnVmKj4oZ19vYmplY3RfcmVmKHBpeGJ1ZikpOworCisgICAgaWYgKCFz
aXplKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R2RrUGl4YnVmKj4oZ19vYmplY3RfcmVm
KHBpeGJ1ZikpOworCisgICAgcmV0dXJuIGdka19waXhidWZfc2NhbGVfc2ltcGxlKHBpeGJ1Ziwg
c2l6ZSwgc2l6ZSwgR0RLX0lOVEVSUF9CSUxJTkVBUik7CiB9CiAKIC8qKgpAQCAtMzA2LDEyICs0
NzQsNzggQEAgR2RrUGl4YnVmKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYo
V2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY28KICAqCiAgKiBDbGVhcnMgYWxsIGljb25z
IGZyb20gdGhlIGRhdGFiYXNlLgogICoKKyAqIFJlcXVpcmVzIGFuIGVuYWJsZWQgZGF0YWJhc2Uu
CisgKgogICogU2luY2U6IDEuMy4xMwogICoqLwogdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9j
bGVhcihXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpKTsKIAorICAgIGlmICghV2ViQ29y
ZTo6aWNvbkRhdGFiYXNlKCkuaXNFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIFdl
YkNvcmU6Omljb25EYXRhYmFzZSgpLnJlbW92ZUFsbEljb25zKCk7CiB9CiAKKy8qKgorICogd2Vi
a2l0X2ljb25fZGF0YWJhc2VfZGF0YWJhc2VfY2xlYW51cDoKKyAqIEBkYXRhYmFzZTogYSAjV2Vi
S2l0SWNvbkRhdGFiYXNlCisgKgorICogVXNlIHRoaXMgbWV0aG9kIHRvIG1ha2Ugc3VyZSB0aGF0
IHRoZSBkYXRhYmFzZSBkb2VzIG5vdCByZW1vdmUKKyAqIHVucmV0YWluZWQgaWNvbnMgcHJlbWF0
dXJlbHkuIEJ5IGRlZmF1bHQgZGF0YWJhc2UgY2xlYW51cCB3aWxsIGJlCisgKiBzdGFydGVkIGFm
dGVyIG9wZW5pbmcgdGhlIGRhdGFiYXNlLCB1bmxlc3Mgd2UgZXhwbGljaXRseSBkZWxheQorICog
aXQuIFVzZSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9yZXRhaW5faWNvbl9mb3JfdXJpKCkgZm9yIGVh
Y2ggaWNvbiB5b3UKKyAqIHdhbnQgdG8ga2VlcCBhbmQgb25jZSBhbGwgYXJlIHJldGFpbmVkIGNh
bGwgYWxsb3dEYXRhYmFzZUNsZWFudXAgdG8KKyAqIHJldmVydCB0aGUgZWZmZWN0cyBvZiB0aGlz
IGNhbGwuCisgKgorICogU2luY2UgMS4zLjE0CisgKiovCit2b2lkIHdlYmtpdF9pY29uX2RhdGFi
YXNlX2RlbGF5X2NsZWFudXAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19JQ09OX0RBVEFCQVNFKGRhdGFiYXNlKSk7CisKKyAg
ICBXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmRlbGF5RGF0YWJhc2VDbGVhbnVwKCk7Cit9CisKKy8q
KgorICogd2Via2l0X2ljb25fZGF0YWJhc2VfYWxsb3dfY2xlYW51cDoKKyAqIEBkYXRhYmFzZTog
YSAjV2ViS2l0SWNvbkRhdGFiYXNlCisgKgorICogUmV2ZXJ0cyB0aGUgZWZmZWN0IG9mCisgKiB3
ZWJraXRfaWNvbl9kYXRhYmFzZV9kZWxheV9kYXRhYmFzZV9jbGVhbnVwKCkuIFR5cGljYWxseSB0
aGlzCisgKiBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBhbGwgdGhlIHJlcXVpcmVkIGlj
b25zIGFyZSByZXRhaW5lZAorICogKHVzZSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9yZXRhaW5faWNv
bl9mb3JfdXJpKCkgZm9yIHRoYXQpLgorICoKKyAqIFNpbmNlIDEuMy4xNAorICoqLwordm9pZCB3
ZWJraXRfaWNvbl9kYXRhYmFzZV9hbGxvd19jbGVhbnVwKFdlYktpdEljb25EYXRhYmFzZSogZGF0
YWJhc2UpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShk
YXRhYmFzZSkpOworCisgICAgV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjphbGxvd0RhdGFiYXNlQ2xl
YW51cCgpOworfQorCisvKioKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX3JldGFpbl9pY29uX2Zv
cl91cmk6CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQorICogQHBhZ2VfdXJp
OiB0aGUgVVJMIG9mIHRoZSB3ZWIgcGFnZSB0aGUgaWNvbiBiZWxvbmdzIHRvCisgKgorICogTm90
ZSB0aGF0IHRoaXMgY2FsbCB3aWxsIG5vdCBiZSBlZmZlY3RpdmUgdW5sZXNzIHRoZSBkYXRhYmFz
ZSBpcworICogZW5hYmxlZCwgaS5lLCB5b3UgaGF2ZSB0byBjYWxsIHdlYmtpdF9pY29uX2RhdGFi
YXNlX3NldF9wYXRoKCkgdG8KKyAqIG9wZW4gYW5kIGVuYWJsZSBpdCBiZWZvcmUgdHJ5aW5nIHRv
IHJldGFpbiBhbnkgaWNvbi4KKyAqCisgKiBSZXF1aXJlcyBhbiBlbmFibGVkIGRhdGFiYXNlLgor
ICoKKyAqIFNpbmNlIDEuMy4xNAorICoqLwordm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9yZXRh
aW5faWNvbl9mb3JfdXJpKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAgICBw
YWdlX3VyaSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19JQ09OX0RBVEFCQVNF
KGRhdGFiYXNlKSk7CisKKyAgICBpZiAoIVdlYkNvcmU6Omljb25EYXRhYmFzZSgpLmlzRW5hYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5yZXRh
aW5JY29uRm9yUGFnZVVSTChTdHJpbmc6OmZyb21VVEY4KHBhZ2VfdXJpKSk7Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmggYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmgKaW5kZXggN2ZlNWFjZC4u
YTEwMGNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25k
YXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJh
c2UuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ2hyaXN0aWFu
IER5d2FuIDxjaHJpc3RpYW5AbGFuZWRvLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01NSw2ICs1NiwxMyBAQCBzdHJ1Y3QgX1dl
YktpdEljb25EYXRhYmFzZUNsYXNzIHsKIFdFQktJVF9BUEkgR1R5cGUKIHdlYmtpdF9pY29uX2Rh
dGFiYXNlX2dldF90eXBlICAgICAgICAgICAgKHZvaWQpOwogCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9pY29uX2RhdGFiYXNlX3NldF9lbmFibGVkICAgICAgICAgKFdlYktpdEljb25EYXRhYmFz
ZSogZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
Ym9vbGVhbiAgICAgICAgICAgIGVuYWJsZWQpOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJr
aXRfaWNvbl9kYXRhYmFzZV9nZXRfZW5hYmxlZCAgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2Uq
IGRhdGFiYXNlKTsKKwogV0VCS0lUX0FQSSBHX0NPTlNUX1JFVFVSTiBnY2hhcioKIHdlYmtpdF9p
Y29uX2RhdGFiYXNlX2dldF9wYXRoICAgICAgICAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0
YWJhc2UpOwogCkBAIC02OCwxMSArNzYsMjIgQEAgd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2lj
b25fdXJpICAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKIAogV0VCS0lUX0FQ
SSBHZGtQaXhidWYqCiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYgICAgIChX
ZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAgICBwYWdlX3VyaSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhZ2Vf
dXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAg
ICAgICAgICAgICBzaXplKTsKIAogV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9jbGVhciAgICAgICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKTsKIAor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfaWNvbl9kYXRhYmFzZV9yZXRhaW5faWNvbl9mb3JfdXJp
IChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAgICBwYWdlX3VyaSk7CisKK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2ljb25fZGF0YWJhc2VfZGVsYXlfY2xlYW51cCAgICAgICAoV2Vi
S2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2lj
b25fZGF0YWJhc2VfYWxsb3dfY2xlYW51cCAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRh
YmFzZSk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZiAvKiB3ZWJraXRpY29uZGF0YWJhc2VfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCmluZGV4IDEyYWM3
NTkuLmRkOTQyYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5j
cHAKQEAgLTQ5OTUsNiArNDk5NSw3IEBAIEdfQ09OU1RfUkVUVVJOIGdjaGFyKiB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2ljb25fdXJpKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAvKioKICAqIHdlYmtp
dF93ZWJfdmlld19nZXRfaWNvbl9waXhidWY6CiAgKiBAd2ViVmlldzogdGhlICNXZWJLaXRXZWJW
aWV3IG9iamVjdAorICogQHNpemU6IHRoZSBkZXNpcmVkIGhlaWdodCBhbmQgd2lkdGggZm9yIHRo
ZSBpY29uCiAgKgogICogT2J0YWlucyBhICNHZGtQaXhidWYgb2YgdGhlIGZhdmljb24gZm9yIHRo
ZSBnaXZlbiAjV2ViS2l0V2ViVmlldywgb3IKICAqIGEgZGVmYXVsdCBpY29uIGlmIHRoZXJlIGlz
IG5vIGljb24gZm9yIHRoZSBnaXZlbiBwYWdlLiBVc2UKQEAgLTUwMDIsMjEgKzUwMDMsMjAgQEAg
R19DT05TVF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkoV2ViS2l0
V2ViVmlldyogd2ViVmlldykKICAqIFVzdWFsbHkgeW91IHdhbnQgdG8gY29ubmVjdCB0byBXZWJL
aXRXZWJWaWV3OjppY29uLWxvYWRlZCBhbmQgY2FsbCB0aGlzCiAgKiBtZXRob2QgaW4gdGhlIGNh
bGxiYWNrLgogICoKLSAqIFRoZSBwaXhidWYgd2lsbCBoYXZlIHRoZSBsYXJnZXN0IHNpemUgcHJv
dmlkZWQgYnkgdGhlIHNlcnZlciBhbmQgc2hvdWxkCi0gKiBiZSByZXNpemVkIGJlZm9yZSBpdCBp
cyBkaXNwbGF5ZWQuCi0gKiBTZWUgYWxzbyB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9w
aXhidWYoKS4KKyAqIElmIEBzaXplIGlzIDAgdGhlbiB0aGUgcGl4YnVmIHdpbGwgaGF2ZSB0aGUg
bGFyZ2VzdCBzaXplIHByb3ZpZGVkCisgKiBieSB0aGUgc2VydmVyLiBTZWUgYWxzbyB3ZWJraXRf
aWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoKS4KICAqCiAgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgZnVsbCk6IGEgbmV3IHJlZmVyZW5jZSB0byBhICNHZGtQaXhidWYsIG9yICVOVUxMCiAgKgog
ICogU2luY2U6IDEuMy4xMwogICovCi1HZGtQaXhidWYqIHdlYmtpdF93ZWJfdmlld19nZXRfaWNv
bl9waXhidWYoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK0dka1BpeGJ1Ziogd2Via2l0X3dlYl92
aWV3X2dldF9pY29uX3BpeGJ1ZihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBndWludCBzaXplKQog
ewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwg
MCk7CiAKICAgICBjb25zdCBnY2hhciogcGFnZVVSSSA9IHdlYmtpdF93ZWJfdmlld19nZXRfdXJp
KHdlYlZpZXcpOwogICAgIFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfZ2V0
X2ljb25fZGF0YWJhc2UoKTsKLSAgICByZXR1cm4gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2lj
b25fcGl4YnVmKGRhdGFiYXNlLCBwYWdlVVJJKTsKKyAgICByZXR1cm4gd2Via2l0X2ljb25fZGF0
YWJhc2VfZ2V0X2ljb25fcGl4YnVmKGRhdGFiYXNlLCBwYWdlVVJJLCBzaXplKTsKIH0KIAogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oIGIvU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAppbmRleCAzOGM5YTcwLi4zNDE4
NzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKQEAgLTM5OCw3
ICszOTgsOCBAQCBXRUJLSVRfQVBJIEdfQ09OU1RfUkVUVVJOIGdjaGFyICoKIHdlYmtpdF93ZWJf
dmlld19nZXRfaWNvbl91cmkgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAg
ICAqd2ViVmlldyk7CiAKIFdFQktJVF9BUEkgR2RrUGl4YnVmICoKLXdlYmtpdF93ZWJfdmlld19n
ZXRfaWNvbl9waXhidWYgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2Vi
Vmlldyk7Cit3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fcGl4YnVmICAgICAgICAgICAgICAgICAo
V2ViS2l0V2ViVmlldyAgICAgICAgKndlYlZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgIHNpemUpOwogCiBX
RUJLSVRfQVBJIFdlYktpdERPTURvY3VtZW50ICoKIHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2Rv
Y3VtZW50ICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldyk7Ci0t
IAoxLjcuNC4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95879</attachid>
            <date>2011-06-03 02:57:10 -0700</date>
            <delta_ts>2012-01-30 15:50:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56200-20110603115705.patch</filename>
            <type>text/plain</type>
            <size>25260</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc4MDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCBkZTA5YWYzMjRj
ZTkzODQwNzVlOGJlNDQ5M2Y5NTNjNGRkMTJiMWEwLi5kMTQ1NGE5YmE2NDdjZWFjNjQxM2VjNGMz
MjZiNzE2ZjA0Njg4ODYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTEt
MDMtMjQgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gV2ViS2l0SWNv
bkRhdGFiYXNlIGRvZXNuJ3Qga2VlcCBpY29ucyBjYWNoZWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MjAwCisKKyAgICAgICAgQWRkZWQgbmV3IEFQ
SSB0byBhbGxvdyBhcHBzIHRvIHJldGFpbiBVUkxzIGluIHRoZSBJY29uRGF0YWJhc2UuCisKKyAg
ICAgICAgVGhyZWUgbmV3IHNpZ25hbHMgYWRkZWQ6IFdlYktpdEljb25EYXRhYmFzZTo6aWNvbi1j
aGFuZ2VkLAorICAgICAgICBXZWJLaXRJY29uRGF0YWJhc2U6Omljb24tZGF0YS1pbXBvcnRlZCwK
KyAgICAgICAgV2ViS2l0SWNvbkRhdGFiYXNlOjppY29ucy1yZW1vdmVkLiBBbHNvCisgICAgICAg
IFdlYktpdEljb25EYXRhYmFzZTo6aWNvbi1sb2FkZWQgd2FzIGRlcHJlY2F0ZWQuCisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JY29uRGF0YWJh
c2VDbGllbnRHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKGRpc3BhdGNoRGlkQWRkSWNvbkZvclBh
Z2VVUkxJbklkbGUpOgorICAgICAgICAoZGlzcGF0Y2hEaWRSZW1vdmVBbGxJY29uc0luSWRsZSk6
CisgICAgICAgIChJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpc3BhdGNoRGlkUmVtb3ZlQWxsSWNv
bnMpOgorICAgICAgICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpkaXNwYXRjaERpZEFkZEljb25G
b3JQYWdlVVJMKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JY29uRGF0YWJhc2VDbGllbnRH
dGsuaDogQWRkZWQuCisgICAgICAgICogd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwOgorICAgICAg
ICAod2Via2l0SW5pdCk6CisgICAgICAgICogd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHA6
CisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGFzc19pbml0KToKKyAgICAgICAgKHdl
YmtpdF9pY29uX2RhdGFiYXNlX2luaXQpOgorICAgICAgICAoZGVmYXVsdENsaWVudCk6CisgICAg
ICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0aCk6CisgICAgICAgIChjbG9zZUljb25E
YXRhYmFzZU9uRXhpdCk6CisgICAgICAgIChzdGFydFVwSWNvbkRhdGFiYXNlKToKKyAgICAgICAg
KHdlYmtpdF9pY29uX2RhdGFiYXNlX2lzX2VuYWJsZWQpOgorICAgICAgICAod2Via2l0X2ljb25f
ZGF0YWJhc2Vfc2V0X2VuYWJsZWQpOgorICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0
X3BhdGgpOgorICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpKToKKyAg
ICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zik6CisgICAgICAgICh3
ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhcik6CisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9kZWxheV9jbGVhbnVwKToKKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX2FsbG93X2Ns
ZWFudXApOgorICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2VfcmV0YWluX2ljb25fZm9yX3Vy
aSk6CisgICAgICAgICogd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oOgorICAgICAgICAqIHdl
YmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19nZXRfaWNv
bl9waXhidWYpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3Lmg6CisKIDIwMTEtMDUt
MzEgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0K
aW5kZXggNDZlNDgyM2VlMTE2ZDRiYzVkMTQ3N2RiZTNjNmIxNzNjMjRmMWE0ZS4uZDEyZmU1ZjIy
YjUyMmUzMjZmYzdmNDQ2Y2Y3ODgzYTJiYjNjMWU2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUu
YW0KQEAgLTE5NCw2ICsxOTQsOCBAQCB3ZWJraXRndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5oIFwKIAlT
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9HdGtBZGp1c3RtZW50V2F0Y2hlci5jcHAg
XAogCVNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0d0a0FkanVzdG1lbnRXYXRjaGVy
LmggXAorCVNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ljb25EYXRhYmFzZUNsaWVu
dEd0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ljb25EYXRhYmFz
ZUNsaWVudEd0ay5oIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0
b3JDbGllbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNw
ZWN0b3JDbGllbnRHdGsuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvUGFz
dGVib2FyZEhlbHBlckd0ay5jcHAgXApAQCAtMjEwLDYgKzIxMiw3IEBAIHdlYmtpdGd0a19zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aGl0dGVzdHJlc3VsdC5j
cHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0cHJpdmF0
ZS5oIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcCBc
CisJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZXByaXZhdGUuaCBc
CiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmNwcCBcCiAJ
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0cHJpdmF0ZS5oIFwK
IAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3Jlc3BvbnNlLmNwcCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudEd0ay5jcHAKaW5kZXggNTMwNzU2YmIzMGEyNGQ2YzlhYzAxODA1NjRhOGJjNWI0NTg2
NjRmMy4uMjU1NjVjYWZhNjhhZjg2YmQ4ZTRjNDUwOGJiZTM4Y2RmNTJhNmUyZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50R3RrLmNwcApAQCAtOTI3LDYgKzkyNyw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoRGlkUmVjZWl2ZUljb24oKQogICAgIGlmIChtX2xvYWRpbmdFcnJvclBhZ2UpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIC8vIFRPRE86IHJlbW92ZSB0aGlzIGJsb2NrLiBEZXByZWNhdGVk
IHNpZ25hbC4KICAgICBjb25zdCBnY2hhciogZnJhbWVVUkkgPSB3ZWJraXRfd2ViX2ZyYW1lX2dl
dF91cmkobV9mcmFtZSk7CiAgICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtp
dF9nZXRfaWNvbl9kYXRhYmFzZSgpOwogICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShkYXRhYmFz
ZSwgImljb24tbG9hZGVkIiwgbV9mcmFtZSwgZnJhbWVVUkkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwIGIvU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwCmluZGV4IDkxMTYxNGMzM2JjMTc1ZjMzYzJiNWVmODk5
ZGU3Y2EzNzUxODlhMWQuLjUzMGQxNjgyY2ZjZTlkMzdiYTVjMTc4MTE2MzVhMTU4Yzc3MGM3YWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5jcHAKQEAgLTQxLDYg
KzQxLDcgQEAKICNpbmNsdWRlICJ3ZWJraXRhcHBsaWNhdGlvbmNhY2hlLmgiCiAjaW5jbHVkZSAi
d2Via2l0Z2xvYmFsc3ByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXRpY29uZGF0YWJhc2UuaCIK
KyNpbmNsdWRlICJ3ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0
c291cGF1dGhkaWFsb2cuaCIKICNpbmNsdWRlICJ3ZWJraXR3ZWJkYXRhYmFzZS5oIgogI2luY2x1
ZGUgIndlYmtpdHdlYnBsdWdpbmRhdGFiYXNlcHJpdmF0ZS5oIgpAQCAtMjM4LDkgKzIzOSwxNCBA
QCBXZWJLaXRJY29uRGF0YWJhc2UqIHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpCiAgICAgd2Vi
a2l0SW5pdCgpOwogCiAgICAgc3RhdGljIFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSAw
OwotICAgIGlmICghZGF0YWJhc2UpCisgICAgaWYgKCFkYXRhYmFzZSkgewogICAgICAgICBkYXRh
YmFzZSA9IFdFQktJVF9JQ09OX0RBVEFCQVNFKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9JQ09O
X0RBVEFCQVNFLCBOVUxMKSk7CiAKKyAgICAgICAgLy8gRGVsYXkgZGF0YWJhc2UgY2xlYW51cCBi
eSBkZWZhdWx0IGFuZCBlbmFibGUgdGhlIGRhdGFiYXNlCisgICAgICAgIHdlYmtpdF9pY29uX2Rh
dGFiYXNlX2RlbGF5X2NsZWFudXAoZGF0YWJhc2UpOworICAgICAgICB3ZWJraXRfaWNvbl9kYXRh
YmFzZV9zZXRfZW5hYmxlZChkYXRhYmFzZSwgVFJVRSk7CisgICAgfQorCiAgICAgcmV0dXJuIGRh
dGFiYXNlOwogfQogCkBAIC0yNzQsOCArMjgwLDYgQEAgdm9pZCB3ZWJraXRJbml0KCkKICAgICBQ
YWdlR3JvdXA6OnNldFNob3VsZFRyYWNrVmlzaXRlZExpbmtzKHRydWUpOwogCiAgICAgUGFzdGVi
b2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+c2V0SGVscGVyKFdlYktpdDo6cGFzdGVib2FyZEhl
bHBlckluc3RhbmNlKCkpOwotICAgIEdPd25QdHI8Z2NoYXI+IGljb25EYXRhYmFzZVBhdGgoZ19i
dWlsZF9maWxlbmFtZShnX2dldF91c2VyX2RhdGFfZGlyKCksICJ3ZWJraXQiLCAiaWNvbmRhdGFi
YXNlIiwgTlVMTCkpOwotICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKHdlYmtpdF9n
ZXRfaWNvbl9kYXRhYmFzZSgpLCBpY29uRGF0YWJhc2VQYXRoLmdldCgpKTsKIAogICAgIFNvdXBT
ZXNzaW9uKiBzZXNzaW9uID0gd2Via2l0X2dldF9kZWZhdWx0X3Nlc3Npb24oKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcAppbmRleCAzOTdi
ZDUxYzI1MjJjNDE0NGFkYTUxMTIwYWUwYzJlMzcxZTI1MThhLi5jNzUwOTBkODEyMDEwNTcwMmZm
NGM1MWRkOTk5ZjBmOTE2ZDI0M2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0aWNvbmRhdGFiYXNlLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AbGFuZWRvLmNvbT4KKyAqIENvcHly
aWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xOSwxMSAr
MjAsMTEgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIndlYmtpdGljb25kYXRh
YmFzZS5oIgorI2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFzZXByaXZhdGUuaCIKIAotI2luY2x1
ZGUgIkRhdGFiYXNlRGV0YWlscy5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgogI2lu
Y2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJJY29uRGF0YWJhc2UuaCIKKyNpbmNsdWRl
ICJJY29uRGF0YWJhc2VDbGllbnRHdGsuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUg
IkludFNpemUuaCIKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgpAQCAtNDIsMTcg
KzQzLDQ2IEBACiAgKiBpbiB0YWIgbGFiZWxzLCB3aW5kb3cgY2FwdGlvbnMgb3IgYm9va21hcmtz
LiBBbGwgdmlld3Mgc2hhcmUKICAqIHRoZSBzYW1lIGljb24gZGF0YWJhc2UuCiAgKgotICogVGhl
IGljb24gZGF0YWJhc2UgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGFuZCBzdG9yZWQgaW4KLSAqIH4v
LmxvY2FsL3NoYXJlL3dlYmtpdC9pY29uZGF0YWJhc2UsIGRlcGVuZGluZyBvbiBYREdfREFUQV9I
T01FLgorICogVGhlIGljb24gZGF0YWJhc2UgbXVzdCBiZSBleHBsaWNpdGx5IGVuYWJsZWQuIElm
IG5vIGRhdGFiYXNlIHBhdGgKKyAqIGlzIHNwZWNpZmllZCB0aGVuIGl0IHdpbGwgdXNlIH4vLmxv
Y2FsL3NoYXJlL3dlYmtpdC9pY29uZGF0YWJhc2UgYnkKKyAqIGRlZmF1bHQsIGRlcGVuZGluZyBv
biBYREdfREFUQV9IT01FLgogICoKICAqIFdlYktpdCB3aWxsIGF1dG9tYXRpY2FsbHkgbG9vayBm
b3IgYXZhaWxhYmxlIGljb25zIGluIGxpbmsgZWxlbWVudHMKICAqIG9uIG9wZW5lZCBwYWdlcyBh
cyB3ZWxsIGFzIGFuIGV4aXN0aW5nIGZhdmljb24uaWNvIGFuZCBsb2FkIHRoZQotICogaW1hZ2Vz
IGZvdW5kIGludG8gdGhlIG1lbW9yeSBjYWNoZSBpZiBwb3NzaWJsZS4gVGhlIHNpZ25hbCAiaWNv
bi1sb2FkZWQiCi0gKiB3aWxsIGJlIGVtaXR0ZWQgd2hlbiBhbnkgaWNvbiBpcyBmb3VuZCBhbmQg
bG9hZGVkLgotICogT2xkIEljb25zIGFyZSBhdXRvbWF0aWNhbGx5IGNsZWFuZWQgdXAgYWZ0ZXIg
NCBkYXlzLgorICogaW1hZ2VzIGZvdW5kIGludG8gdGhlIG1lbW9yeSBjYWNoZSBpZiBwb3NzaWJs
ZS4gT2xkIEljb25zIGFyZQorICogYXV0b21hdGljYWxseSBjbGVhbmVkIHVwIGFmdGVyIDQgZGF5
cy4KICAqCi0gKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aCgpIGNhbiBiZSB1c2VkIHRv
IGNoYW5nZSB0aGUgbG9jYXRpb24KLSAqIG9mIHRoZSBkYXRhYmFzZSBhbmQgYWxzbyB0byBkaXNh
YmxlIGl0IGJ5IHBhc3NpbmcgJU5VTEwuCisgKiBFdmVyeSBpY29uIGluIHRoZSBkYXRhYmFzZSBo
YXMgYSByZXRhaW4gY291bnQuIElmIGFuIGljb24gaGFzIGEKKyAqIHJldGFpbiBjb3VudCBncmVh
dGVyIHRoYW4gMCwgaXQgd2lsbCBiZSB3cml0dGVuIHRvIGRpc2sgZm9yIGxhdGVyCisgKiB1c2Uu
IElmIGFuIGljb24ncyByZXRhaW4gY291bnQgZXF1YWxzIHplcm8gaXQgd2lsbCBiZSByZW1vdmVk
IGZyb20KKyAqIGRpc2suIFRoZSByZXRhaW4gY291bnQgaXMgbm90IHBlcnNpc3RlbnQgYWNyb3Nz
IGxhdW5jaGVzLiBJZiB0aGUKKyAqIFdlYktpdCBjbGllbnQgd2lzaGVzIHRvIHJldGFpbiBhbiBp
Y29uIGl0IHNob3VsZCByZXRhaW4gdGhlIGljb24KKyAqIG9uY2UgZm9yIGV2ZXJ5IGxhdW5jaC4g
VGhpcyBpcyBiZXN0IGRvbmUgYXQgaW5pdGlhbGl6YXRpb24gdGltZQorICogYmVmb3JlIHRoZSBk
YXRhYmFzZSBiZWdpbnMgcmVtb3ZpbmcgaWNvbnMuIE1vc3Qgb2YgdGhlIGFwcHMgdXNpbmcKKyAq
IHRoaXMgZGF0YWJhc2Ugd2lsbCBsaWtlbHkgd2FudCBhIHBlcnNpc3RlbnQgc3RvcmFnZSBmb3Ig
dGhlaXIKKyAqIGZhdmljb25zLCB0aGF0J3Mgd2h5IFdlYktpdEd0aysgd2lsbCBub3QgY2xlYW51
cCB0aGUgaWNvbiBkYXRhYmFzZQorICogb24gc3RhcnR1cCBieSBkZWZhdWx0LiBJZiBjbGllbnRz
IHdhbnQgdGhlIGRhdGFiYXNlIHRvIHJlbW92ZQorICogbm9uLXJldGFpbmVkIGljb25zIHRoZW4g
dGhleSBtdXN0IGV4cGxpY2l0bHkgY2FsbAorICogd2Via2l0X2ljb25fZGF0YWJhc2VfYWxsb3df
Y2xlYW51cCgpOworICoKKyAqIENsaWVudHMgd2lsbCBtb3N0IGxpa2VseSBkbyBvbiBzdGFydHVw
OgorICoKKyAqIDxpbmZvcm1hbGV4YW1wbGU+PHByb2dyYW1saXN0aW5nPgorICogZGF0YWJhc2Ug
PSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKKyAqCisgKiAvLyBMb29wIG92ZXIgYSBsaXN0
IG9mIFVSSXMgdG8gYmUgcmV0YWluZWQuIEluIHRoZSBjYXNlIG9mIGEgYnJvd3NlcgorICogLy8g
dGhvc2UgVVJJcyB3b3VsZCB0eXBpY2FsbHkgYmUgaGlzdG9yeSBpdGVtcywgYm9va21hcmtzLCBl
dGMuLi4KKyAqIGZvciAoaSA9IDA7IGkgPCBudW1fdXJsczsgaSsrKQorICogICAgIHdlYmtpdF9p
Y29uX2RhdGFiYXNlX3JldGFpbl9pY29uX2Zvcl91cmkgKGRhdGFiYXNlLCB1cmlfbGlzdFtpXSk7
CisgKgorICogLy8gQWxsb3cgZGF0YWJhc2UgYXV0b21hdGljIGNsZWFudXAKKyAqIHdlYmtpdF9p
Y29uX2RhdGFiYXNlX2FsbG93X2NsZWFudXAgKCk7CisgKiA8L3Byb2dyYW1saXN0aW5nPjwvaW5m
b3JtYWxleGFtcGxlPgorICoKKyAqIEJ5IGRvaW5nIHRoYXQgdGhlIGljb24gZGF0YWJhc2Ugd2ls
bCBwdXJnZSBhbGwgdGhlIG9sZCBpY29ucyB0aGF0CisgKiB3ZXJlIG5vdCByZXRhaW5lZC4gQ2xp
ZW50cyBtaWdodCBhbHNvIGRlY2lkZSBub3QgdG8gcmV0YWluIGljb25zIGlmCisgKiB0aGV5IGFy
ZSBub3QgZ29pbmcgdG8gYWxsb3cgdGhlIGRhdGFiYXNlIGF1dG9tYXRpYyBjbGVhbnVwLiBOb3Rl
CisgKiB0aGF0IGluIHRoaXMgY2FzZSB0aGUgc2l6ZSBvZiB0aGUgZGF0YWJhc2UgY2FuIGdyb3cg
aW5kZWZpbml0ZWx5LgogICoKICAqIElmIFdlYktpdFdlYlNldHRpbmdzOjplbmFibGUtcHJpdmF0
ZS1icm93c2luZyBpcyAlVFJVRSBuZXcgaWNvbnMKICAqIHdvbid0IGJlIGFkZGVkIHRvIHRoZSBk
YXRhYmFzZSBvbiBkaXNrIGFuZCBubyBleGlzdGluZyBpY29ucyB3aWxsCkBAIC03MSw2ICsxMDEs
OSBAQCBlbnVtIHsKIAogZW51bSB7CiAgICAgSUNPTl9MT0FERUQsCisgICAgSUNPTl9DSEFOR0VE
LAorICAgIElDT05fREFUQV9JTVBPUlRFRCwKKyAgICBJQ09OU19SRU1PVkVELAogCiAgICAgTEFT
VF9TSUdOQUwKIH07CkBAIC0xNTksNyArMTkyLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X2ljb25f
ZGF0YWJhc2VfY2xhc3NfaW5pdChXZWJLaXRJY29uRGF0YWJhc2VDbGFzcyoga2xhc3MpCiAgICAg
ICogU2VlIFdlYktpdFdlYlZpZXc6Omljb24tbG9hZGVkIGlmIHlvdSBvbmx5IG5lZWQgdGhlIGZh
dmljb24gZm9yCiAgICAgICogdGhlIG1haW4gZnJhbWUgb2YgYSBwYXJ0aWN1bGFyICNXZWJLaXRX
ZWJWaWV3LgogICAgICAqCi0gICAgICogU2luY2U6IDEuMy4xMworICAgICAqIERlcHJlY2F0ZWQ6
IFVzZSBXZWJLaXRJY29uRGF0YWJhc2U6Omljb24tZGF0YS1pbXBvcnRlZCBpbnN0ZWFkCiAgICAg
ICovCiAgICAgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2lnbmFsc1tJQ09OX0xPQURFRF0gPSBnX3Np
Z25hbF9uZXcoImljb24tbG9hZGVkIiwKICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGts
YXNzKSwKQEAgLTE3Miw2ICsyMDUsNjUgQEAgc3RhdGljIHZvaWQgd2Via2l0X2ljb25fZGF0YWJh
c2VfY2xhc3NfaW5pdChXZWJLaXRJY29uRGF0YWJhc2VDbGFzcyoga2xhc3MpCiAgICAgICAgICAg
ICBXRUJLSVRfVFlQRV9XRUJfRlJBTUUsCiAgICAgICAgICAgICBHX1RZUEVfU1RSSU5HKTsKIAor
ICAgIC8qKgorICAgICAqIFdlYktpdEljb25EYXRhYmFzZTo6aWNvbi1jaGFuZ2VkOgorICAgICAq
IEBkYXRhYmFzZTogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAg
ICAgKiBAcGFnZV91cmk6IHRoZSBVUkkgb2YgdGhlIHBhZ2UgdGhlIGljb24gd2FzIHJlYWQgZm9y
CisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gdGhlIGljb24gZm9y
IGEgcGFydGljdWxhciBVUkwKKyAgICAgKiBjaGFuZ2VzIGluIHRoZSBkYXRhYmFzZS4KKyAgICAg
KgorICAgICAqIFNpbmNlOiAxLjUuMQorICAgICAqLworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNl
X3NpZ25hbHNbSUNPTl9DSEFOR0VEXSA9IGdfc2lnbmFsX25ldygiaWNvbi1jaGFuZ2VkIiwKKyAg
ICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGtsYXNzKSwKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PEdTaWduYWxGbGFncz4oR19TSUdOQUxfUlVOX0xBU1QpLAorICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJz
aGFsX1ZPSURfX1NUUklORywKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAgICAg
ICAgR19UWVBFX1NUUklORyk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRJY29uRGF0YWJhc2U6
Omljb24tZGF0YS1pbXBvcnRlZDoKKyAgICAgKiBAZGF0YWJhc2U6IHRoZSBvYmplY3Qgb24gd2hp
Y2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQHBhZ2VfdXJpOiB0aGUgVVJJIG9mIHRo
ZSBwYWdlIHRoZSBpY29uIHdhcyByZWFkIGZvcgorICAgICAqCisgICAgICogVGhpcyBzaWduYWwg
aXMgZW1pdHRlZCB3aGVuIHRoZSBpY29uIGRhdGFiYXNlIGltcG9ydHMgdGhlCisgICAgICogYWN0
dWFsIGRhdGEgb2YgYW4gaWNvbi4KKyAgICAgKgorICAgICAqIEFmdGVyIHJlY2VpdmluZyB0aGlz
IHNpZ25hbCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoKQorICAgICAqIHdp
bGwgc3VjY2Vzc2Z1bGx5IHJldHVybiB0aGUgaWNvbiBkYXRhIGFzc29jaWF0dGVkIHdpdGggdGhl
IHByb3ZpZGVkIHBhZ2UgVVJJLgorICAgICAqCisgICAgICogU2luY2U6IDEuNS4xCisgICAgICov
CisgICAgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2lnbmFsc1tJQ09OX0RBVEFfSU1QT1JURURdID0g
Z19zaWduYWxfbmV3KCJpY29uLWRhdGEtaW1wb3J0ZWQiLAorICAgICAgICAgICAgR19UWVBFX0ZS
T01fQ0xBU1Moa2xhc3MpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1NpZ25hbEZsYWdzPihH
X1NJR05BTF9SVU5fTEFTVCksCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAg
ICAgICAgIDAsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fU1RSSU5HLAor
ICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCisgICAgICAgICAgICBHX1RZUEVfU1RSSU5HKTsK
KworICAgIC8qKgorICAgICAqIFdlYktpdEljb25EYXRhYmFzZTo6aWNvbnMtcmVtb3ZlZDoKKyAg
ICAgKiBAZGF0YWJhc2U6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVk
CisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYWxsIHRoZSBpY29u
cyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBkYWJhdGFzZQorICAgICAqIFNpbmNlOiAxLjUuMQorICAg
ICAqLworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NpZ25hbHNbSUNPTlNfUkVNT1ZFRF0gPSBn
X3NpZ25hbF9uZXcoImljb25zLXJlbW92ZWQiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xB
U1Moa2xhc3MpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1NpZ25hbEZsYWdzPihHX1NJR05B
TF9SVU5fTEFTVCksCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAg
IDAsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwKKyAgICAgICAg
ICAgIEdfVFlQRV9OT05FLCAwKTsKKwogICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFz
cywgc2l6ZW9mKFdlYktpdEljb25EYXRhYmFzZVByaXZhdGUpKTsKIH0KIApAQCAtMTgwLDYgKzI3
MiwxNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9pbml0KFdlYktpdEljb25E
YXRhYmFzZSogZGF0YWJhc2UpCiAgICAgZGF0YWJhc2UtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0Vf
R0VUX1BSSVZBVEUoZGF0YWJhc2UsIFdFQktJVF9UWVBFX0lDT05fREFUQUJBU0UsIFdlYktpdElj
b25EYXRhYmFzZVByaXZhdGUpOwogICAgIC8vICdwbGFjZW1lbnQgbmV3IHN5bnRheCcsIHNlZSB3
ZWJraXR3ZWJ2aWV3LmNwcAogICAgIG5ldyAoZGF0YWJhc2UtPnByaXYpIFdlYktpdEljb25EYXRh
YmFzZVByaXZhdGUoKTsKKworICAgIC8vIERpc2FibGUgaWNvbiBkYXRhYmFzZSBieSBkZWZhdWx0
IGJlY2F1c2Ugd2Ugd2FudCB0byBkZWxheSB0aGUKKyAgICAvLyBkYXRhYmFzZSBjbGVhbnVwIGlu
IG9yZGVyIHRvIGFsbG93IGNsaWVudHMgdG8gcmV0YWluIHRoZSBpY29ucworICAgIC8vIHRoZXkg
YXJlIGludGVyZXN0ZWQgaW4uCisgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc2V0RW5hYmxl
ZChmYWxzZSk7Cit9CisKK3N0YXRpYyBJY29uRGF0YWJhc2VDbGllbnRHdGsqIGRlZmF1bHRDbGll
bnQoKQoreworICAgIHN0YXRpYyBJY29uRGF0YWJhc2VDbGllbnRHdGsqIGRlZmF1bHRDbGllbnQg
PSBuZXcgSWNvbkRhdGFiYXNlQ2xpZW50R3RrKCk7CisgICAgcmV0dXJuIGRlZmF1bHRDbGllbnQ7
CiB9CiAKIC8qKgpAQCAtMTg4LDcgKzI5MSw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9pY29uX2Rh
dGFiYXNlX2luaXQoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKICAqCiAgKiBEZXRlcm1p
bmVzIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBkYXRhYmFzZSBmb2xkZXIgb24gZGlzay4KICAq
Ci0gKiBSZXR1cm5zOiB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgZGF0YWJhc2UgZm9sZGVyLCBv
ciAlTlVMTAorICogUmV0dXJuczogdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGRhdGFiYXNlIGZv
bGRlcgogICoKICAqIFNpbmNlOiAxLjMuMTMKICAqKi8KQEAgLTE5NiwxNCArMjk5LDQxIEBAIEdf
Q09OU1RfUkVUVVJOIGdjaGFyKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0aChXZWJLaXRJ
Y29uRGF0YWJhc2UqIGRhdGFiYXNlCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpLCAwKTsKIAorICAgIGlmICghZGF0YWJhc2UtPnBy
aXYtPnBhdGguZ2V0KCkpIHsKKyAgICAgICAgLy8gRG8gbm90IHVzZSBzZXRfcGF0aCgpLCBvdGhl
cndpc2Ugd2UgY291bGQgZW5kIHVwIGNhbGxpbmcgc3RhcnR1cEljb25EYXRhYmFzZSB0d2ljZS4K
KyAgICAgICAgZGF0YWJhc2UtPnByaXYtPnBhdGguc2V0KGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRf
dXNlcl9kYXRhX2RpcigpLCAid2Via2l0IiwgImljb25kYXRhYmFzZSIsIE5VTEwpKTsKKyAgICB9
CisKICAgICByZXR1cm4gZGF0YWJhc2UtPnByaXYtPnBhdGguZ2V0KCk7CiB9CiAKIHN0YXRpYyB2
b2lkIGNsb3NlSWNvbkRhdGFiYXNlT25FeGl0KCkKIHsKLSAgICBpZiAoV2ViQ29yZTo6aWNvbkRh
dGFiYXNlKCkuaXNFbmFibGVkKCkpIHsKKyAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5jbG9z
ZSgpOworfQorCitzdGF0aWMgdm9pZCBzdGFydFVwSWNvbkRhdGFiYXNlKFdlYktpdEljb25EYXRh
YmFzZSogZGF0YWJhc2UpCit7CisgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc2V0Q2xpZW50
KGRlZmF1bHRDbGllbnQoKSk7CisgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkub3Blbih3ZWJr
aXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0aChkYXRhYmFzZSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJY29uRGF0YWJhc2U6OmRlZmF1bHREYXRhYmFzZUZpbGVuYW1lKCkpOwor
CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWluaXRpYWxp
emVkKSB7CisgICAgICAgIGF0ZXhpdChjbG9zZUljb25EYXRhYmFzZU9uRXhpdCk7CisgICAgICAg
IGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgd2Via2l0X2ljb25fZGF0YWJh
c2Vfc2V0X2VuYWJsZWQoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgZ2Jvb2xlYW4gZW5h
YmxlZCkKK3sKKyAgICBnYm9vbGVhbiBjdXJyZW50bHlFbmFibGVkID0gV2ViQ29yZTo6aWNvbkRh
dGFiYXNlKCkuaXNFbmFibGVkKCk7CisKKyAgICBpZiAoY3VycmVudGx5RW5hYmxlZCAmJiAhZW5h
YmxlZCkKICAgICAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc2V0RW5hYmxlZChmYWxzZSk7
Ci0gICAgICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLmNsb3NlKCk7CisgICAgZWxzZSBpZiAo
IWN1cnJlbnRseUVuYWJsZWQgJiYgZW5hYmxlZCkgeworICAgICAgICBXZWJDb3JlOjppY29uRGF0
YWJhc2UoKS5zZXRFbmFibGVkKHRydWUpOworICAgICAgICBzdGFydFVwSWNvbkRhdGFiYXNlKGRh
dGFiYXNlKTsKICAgICB9CiB9CiAKQEAgLTIxMiwzNSArMzQyLDI1IEBAIHN0YXRpYyB2b2lkIGNs
b3NlSWNvbkRhdGFiYXNlT25FeGl0KCkKICAqIEBkYXRhYmFzZTogYSAjV2ViS2l0SWNvbkRhdGFi
YXNlCiAgKiBAcGF0aDogYW4gYWJzb2x1dGUgcGF0aCB0byB0aGUgaWNvbiBkYXRhYmFzZSBmb2xk
ZXIKICAqCi0gKiBTcGVjaWZpZXMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGRhdGFiYXNlIGZv
bGRlciBvbiBkaXNrLgotICoKLSAqIFBhc3NpbmcgJU5VTEwgb3IgIiIgZGlzYWJsZXMgdGhlIGlj
b24gZGF0YWJhc2UuCisgKiBTcGVjaWZpZXMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGRhdGFi
YXNlIGZvbGRlciBvbiBkaXNrLiBJZgorICogYW5vdGhlciBkYXRhYmFzZSBpcyBhbHJlYWR5IG9w
ZW5lZCBpbiBhIGRpZmZlcmVudCBsb2NhdGlvbiB0aGlzCisgKiBjYWxsIHdpbGwgcmVzdWx0IGlu
IHRoZSBjbG9zaW5nIG9mIHRoZSBwcmV2aW91cyBkYXRhYmFzZSBhbmQgdGhlCisgKiBvcGVuaW5n
IG9mIHRoZSBvbmUgaW4gdGhlIG5ldyBsb2NhdGlvbi4KICAqCiAgKiBTaW5jZTogMS4zLjEzCiAg
KiovCiB2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKFdlYktpdEljb25EYXRhYmFz
ZSogZGF0YWJhc2UsIGNvbnN0IGdjaGFyKiBwYXRoKQogewotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9JU19JQ09OX0RBVEFCQVNFIChkYXRhYmFzZSkpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwocGF0aCk7CiAKLSAgICBpZiAoZGF0YWJhc2UtPnByaXYtPnBhdGguZ2V0KCkpCisgICAgaWYg
KGdfc3RyY21wMChwYXRoLCBkYXRhYmFzZS0+cHJpdi0+cGF0aC5nZXQoKSkpCiAgICAgICAgIFdl
YkNvcmU6Omljb25EYXRhYmFzZSgpLmNsb3NlKCk7CiAKLSAgICBpZiAoIShwYXRoICYmIHBhdGhb
MF0pKSB7Ci0gICAgICAgIGRhdGFiYXNlLT5wcml2LT5wYXRoLnNldCgwKTsKLSAgICAgICAgV2Vi
Q29yZTo6aWNvbkRhdGFiYXNlKCkuc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICBkYXRhYmFzZS0+cHJpdi0+cGF0aC5zZXQoZ19zdHJkdXAocGF0aCkpOwog
Ci0gICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc2V0RW5hYmxlZCh0cnVlKTsKLSAgICBXZWJD
b3JlOjppY29uRGF0YWJhc2UoKS5vcGVuKFdlYkNvcmU6OmZpbGVuYW1lVG9TdHJpbmcoZGF0YWJh
c2UtPnByaXYtPnBhdGguZ2V0KCkpLCBXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmRlZmF1bHREYXRh
YmFzZUZpbGVuYW1lKCkpOwotCi0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsK
LSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIGF0ZXhpdChjbG9zZUljb25EYXRhYmFz
ZU9uRXhpdCk7Ci0gICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICB9CisgICAgaWYgKFdl
YkNvcmU6Omljb25EYXRhYmFzZSgpLmlzRW5hYmxlZCgpKQorICAgICAgICBzdGFydFVwSWNvbkRh
dGFiYXNlKGRhdGFiYXNlKTsKIH0KIAogLyoqCkBAIC0yNDgsMTAgKzM2OCwxMSBAQCB2b2lkIHdl
YmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2Us
IGNvbnN0IGdjaGFyKiBwYQogICogQGRhdGFiYXNlOiBhICNXZWJLaXRJY29uRGF0YWJhc2UKICAq
IEBwYWdlX3VyaTogVVJJIG9mIHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIGljb24KICAqCi0gKiBP
YnRhaW5zIHRoZSBVUkkgZm9yIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZSBVUkkuCi0g
KiBTZWUgYWxzbyB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKCkuCisgKiBPYnRhaW5zIHRo
ZSBVUkkgZm9yIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZSBVUkkuIFNlZSBhbHNvCisg
KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKCkuCiAgKgotICogUmV0dXJuczogYSBuZXds
eSBhbGxvY2F0ZWQgVVJJIGZvciB0aGUgZmF2aWNvbiwgb3IgJU5VTEwKKyAqIFJldHVybnM6IGEg
bmV3bHkgYWxsb2NhdGVkIFVSSSBmb3IgdGhlIGZhdmljb24sIG9yICVOVUxMIGlmIHRoZQorICog
aWNvbiBpcyBub3QgY2FjaGVkIG9yIHRoZSBkYXRhYmFzZSBpcyBub3QgZW5hYmxlZC4KICAqCiAg
KiBTaW5jZTogMS4zLjEzCiAgKiovCkBAIC0yNjAsNiArMzgxLDkgQEAgZ2NoYXIqIHdlYmtpdF9p
Y29uX2RhdGFiYXNlX2dldF9pY29uX3VyaShXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBj
b25zdCBnY2gKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFT
RShkYXRhYmFzZSksIDApOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHBhZ2VVUkksIDApOwog
CisgICAgaWYgKCFXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5pc0VuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKICAgICBTdHJpbmcgcGFnZVVSTCA9IFN0cmluZzo6ZnJvbVVURjgocGFnZVVS
SSk7CiAgICAgcmV0dXJuIGdfc3RyZHVwKFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLnN5bmNocm9u
b3VzSWNvblVSTEZvclBhZ2VVUkwocGFnZVVSTCkudXRmOCgpLmRhdGEoKSk7CiB9CkBAIC0yNjgs
MjYgKzM5MiwzNCBAQCBnY2hhciogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpKFdl
YktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGdjaAogICogd2Via2l0X2ljb25fZGF0
YWJhc2VfZ2V0X2ljb25fcGl4YnVmOgogICogQGRhdGFiYXNlOiBhICNXZWJLaXRJY29uRGF0YWJh
c2UKICAqIEBwYWdlX3VyaTogVVJJIG9mIHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIGljb24KKyAq
IEBzaXplOiB0aGUgZGVzaXJlZCB3aWR0aCBhbmQgbGVuZ3RoIGZvciB0aGUgaWNvbgogICoKLSAq
IE9idGFpbnMgYSAjR2RrUGl4YnVmIG9mIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZSBV
UkksIG9yCi0gKiBhIGRlZmF1bHQgaWNvbiBpZiB0aGVyZSBpcyBubyBpY29uIGZvciB0aGUgZ2l2
ZW4gcGFnZS4gVXNlCi0gKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmkoKSBpZiB5
b3UgbmVlZCB0byBkaXN0aW5ndWlzaCB0aGVzZSBjYXNlcy4KLSAqIFVzdWFsbHkgeW91IHdhbnQg
dG8gY29ubmVjdCB0byBXZWJLaXRJY29uRGF0YWJhc2U6Omljb24tbG9hZGVkIGFuZCBjYWxsIHRo
aXMKLSAqIG1ldGhvZCBpbiB0aGUgY2FsbGJhY2suCisgKiBPYnRhaW5zIGEgI0dka1BpeGJ1ZiBv
ZiB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVuIHBhZ2UgVVJJLCBvciBhCisgKiBkZWZhdWx0IGlj
b24gaWYgdGhlcmUgaXMgbm8gaWNvbiBmb3IgdGhlIGdpdmVuIHBhZ2UuIFVzZQorICogd2Via2l0
X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpKCkgdG8gY2hlY2sgdGhlIGFjdHVhbCBVUkkgb2Yg
dGhlCisgKiByZXR1cm5lZCBpY29uLgogICoKLSAqIFRoZSBwaXhidWYgd2lsbCBoYXZlIHRoZSBs
YXJnZXN0IHNpemUgcHJvdmlkZWQgYnkgdGhlIHNlcnZlciBhbmQgc2hvdWxkCi0gKiBiZSByZXNp
emVkIGJlZm9yZSBpdCBpcyBkaXNwbGF5ZWQuCi0gKiBTZWUgYWxzbyB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2ljb25fcGl4YnVmKCkuCisgKiBBcyB0aGUgV2ViS2l0J3MgSWNvbkRhdGFiYXNlIGxvYWRz
IHRoZSBpY29uIGRhdGEgYXN5bmNocm9ub3VzbHkgYW5kCisgKiBpbiBhIHBlci1kZW1hbmQgYmFz
aXMsIHRoaXMgbWV0aG9kIGNvdWxkIHJldHVybiBOVUxMIGV2ZW4gaWYgdGhlCisgKiBpY29uIGlz
IGFjdHVhbGx5IGNhY2hlZC4gSWYgdGhlIGNhbGxlciBrbm93cyB0aGF0IHRoZSBpY29uIGlzCisg
KiBjYWNoZWQgdGhlbiBpdCBzaG91bGQgbGlzdGVuIHRvIGljb24tZGF0YS1pbXBvcnRlZCBzaWdu
YWwgaW4gb3JkZXIKKyAqIHRvIGtub3cgd2hlbiB0aGUgaWNvbiBkYXRhIGlzIGFjdHVhbGx5IGF2
YWlsYWJsZS4KKyAqCisgKiBJZiBAc2l6ZSBpcyAwIHRoZSBwaXhidWYgd2lsbCBoYXZlIHRoZSBs
YXJnZXN0IHNpemUgcHJvdmlkZWQgYnkgdGhlCisgKiBzZXJ2ZXIuIFNlZSBhbHNvIHdlYmtpdF93
ZWJfdmlld19nZXRfaWNvbl9waXhidWYoKS4KICAqCiAgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVs
bCk6IGEgbmV3IHJlZmVyZW5jZSB0byBhICNHZGtQaXhidWYsIG9yICVOVUxMCiAgKgogICogU2lu
Y2U6IDEuMy4xMwogICoqLwotR2RrUGl4YnVmKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl9waXhidWYoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VV
UkkpCitHZGtQaXhidWYqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZihXZWJL
aXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBnY2hhciogcGFnZVVSSSwgZ3VpbnQgc2l6
ZSkKIHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShk
YXRhYmFzZSksIDApOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHBhZ2VVUkksIDApOwogCisg
ICAgaWYgKCFXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5pc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKICAgICBTdHJpbmcgcGFnZVVSTCA9IFN0cmluZzo6ZnJvbVVURjgocGFnZVVSSSk7
CiAgICAgLy8gVGhlIGV4YWN0IHNpemUgd2UgcGFzcyBpcyBpcnJlbGV2YW50IHRvIHRoZSBXZWJD
b3JlOjppY29uRGF0YWJhc2UgY29kZS4KICAgICAvLyBXZSBtdXN0IHBhc3Mgc29tZXRoaW5nIGdy
ZWF0ZXIgdGhhbiAwLCAwIHRvIGdldCBhIHBpeGJ1Zi4KQEAgLTI5Nyw3ICs0MjksMTEgQEAgR2Rr
UGl4YnVmKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoV2ViS2l0SWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSwgY28KICAgICBHZGtQaXhidWYqIHBpeGJ1ZiA9IGljb24tPmdldEdk
a1BpeGJ1ZigpOwogICAgIGlmICghcGl4YnVmKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8R2RrUGl4YnVmKj4oZ19vYmplY3RfcmVmKHBpeGJ1ZikpOworCisgICAg
aWYgKCFzaXplKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R2RrUGl4YnVmKj4oZ19vYmpl
Y3RfcmVmKHBpeGJ1ZikpOworCisgICAgcmV0dXJuIGdka19waXhidWZfc2NhbGVfc2ltcGxlKHBp
eGJ1Ziwgc2l6ZSwgc2l6ZSwgR0RLX0lOVEVSUF9CSUxJTkVBUik7CiB9CiAKIC8qKgpAQCAtMzEy
LDYgKzQ0OCw1MSBAQCB2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX2NsZWFyKFdlYktpdEljb25E
YXRhYmFzZSogZGF0YWJhc2UpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfSUNP
Tl9EQVRBQkFTRShkYXRhYmFzZSkpOwogCisgICAgaWYgKCFXZWJDb3JlOjppY29uRGF0YWJhc2Uo
KS5pc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgV2ViQ29yZTo6aWNvbkRhdGFi
YXNlKCkucmVtb3ZlQWxsSWNvbnMoKTsKIH0KIAordm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9k
ZWxheV9jbGVhbnVwKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgV2ViQ29y
ZTo6SWNvbkRhdGFiYXNlOjpkZWxheURhdGFiYXNlQ2xlYW51cCgpOworfQorCisvKioKKyAqIHdl
YmtpdF9pY29uX2RhdGFiYXNlX2FsbG93X2NsZWFudXA6CisgKiBAZGF0YWJhc2U6IGEgI1dlYktp
dEljb25EYXRhYmFzZQorICoKKyAqIEFsbG93cyB0aGUgZGF0YWJhc2UgdG8gY2xlYW4gbm9uIHJl
dGFpbmVkIGljb25zLiBUeXBpY2FsbHkgdGhpcworICogZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQg
YWZ0ZXIgYWxsIHRoZSByZXF1aXJlZCBpY29ucyBhcmUgcmV0YWluZWQKKyAqICh1c2Ugd2Via2l0
X2ljb25fZGF0YWJhc2VfcmV0YWluX2ljb25fZm9yX3VyaSgpIGZvciB0aGF0KS4KKyAqCisgKiBT
aW5jZSAxLjUuMQorICoqLwordm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9hbGxvd19jbGVhbnVw
KFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfSVNfSUNPTl9EQVRBQkFTRShkYXRhYmFzZSkpOworCisgICAgV2ViQ29yZTo6SWNvbkRh
dGFiYXNlOjphbGxvd0RhdGFiYXNlQ2xlYW51cCgpOworfQorCisvKioKKyAqIHdlYmtpdF9pY29u
X2RhdGFiYXNlX3JldGFpbl9pY29uX2Zvcl91cmk6CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdElj
b25EYXRhYmFzZQorICogQHBhZ2VfdXJpOiB0aGUgVVJMIG9mIHRoZSB3ZWIgcGFnZSB0aGUgaWNv
biBiZWxvbmdzIHRvCisgKgorICogSW5zdHJ1Y3RzIHRoZSBpY29uIGRhdGFiYXNlIG5vdCB0byBw
dXJnZSB0aGUgaWNvbiBvZiB0aGUgcHJvdmlkZWQKKyAqIEBwYWdlX3VyaS4gQ2xpZW50cyB3aWxs
IG1vc3QgbGlrZWx5IGNhbGwgd2Via2l0X2ljb25fZGF0YWJhc2VfYWxsb3dfY2xlYW51cCgpCisg
KiBhZnRlciByZXRhaW5pbmcgYWxsIHRoZSBpY29ucyB0aGV5IGFyZSBpbnRlcmVzdGVkIGluLgor
ICoKKyAqIFNpbmNlIDEuNS4xCisgKiovCit2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX3JldGFp
bl9pY29uX2Zvcl91cmkoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIq
IHBhZ2VfdXJpKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0lDT05fREFUQUJB
U0UoZGF0YWJhc2UpKTsKKworICAgIGlmICghV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuaXNFbmFi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLnJl
dGFpbkljb25Gb3JQYWdlVVJMKFN0cmluZzo6ZnJvbVVURjgocGFnZV91cmkpKTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuaCBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuaAppbmRleCA3ZmU1YWNk
N2M3MzIwMDMwYTM3NDEyNzA5MTgwMzUyZmEwMTg4ZjE1Li44YjQwZDg1NzQ5MWJlZmQ1NDk2ZTdl
OTBmNTU3YjcyN2M5ZTc1MzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0aWNvbmRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dGljb25kYXRhYmFzZS5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
MSBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBsYW5lZG8uY29tPgorICogQ29weXJpZ2h0IChD
KSAyMDExIElnYWxpYSBTLkwuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTY4LDExICs2OSwxOSBA
QCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmkgICAgICAgIChXZWJLaXRJY29uRGF0
YWJhc2UqIGRhdGFiYXNlLAogCiBXRUJLSVRfQVBJIEdka1BpeGJ1ZioKIHdlYmtpdF9pY29uX2Rh
dGFiYXNlX2dldF9pY29uX3BpeGJ1ZiAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2Us
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciog
ICAgICAgIHBhZ2VfdXJpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdjaGFyKiAgICAgICAgcGFnZV91cmksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgIHNpemUpOwogCiBXRUJLSVRf
QVBJIHZvaWQKIHdlYmtpdF9pY29uX2RhdGFiYXNlX2NsZWFyICAgICAgICAgICAgICAgKFdlYktp
dEljb25EYXRhYmFzZSogZGF0YWJhc2UpOwogCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9pY29u
X2RhdGFiYXNlX3JldGFpbl9pY29uX2Zvcl91cmkgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJh
c2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hh
ciogICAgICAgIHBhZ2VfdXJpKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfaWNvbl9kYXRh
YmFzZV9hbGxvd19jbGVhbnVwICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKTsK
KwogR19FTkRfREVDTFMKIAogI2VuZGlmIC8qIHdlYmtpdGljb25kYXRhYmFzZV9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKaW5kZXggNTFjMjgyN2Q2ODE5
NTNmYTc1OGQ4OGVlZDc2NjQ5YWY5YTQxMmRiZC4uZmQ0MTViOTk2YTM4NzVlZGJhZjIyNGFmZjA3
MWQ2YTRiYmFjMDYyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmNwcApAQCAtNDk4Niw2ICs0OTg2LDcgQEAgR19DT05TVF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF93
ZWJfdmlld19nZXRfaWNvbl91cmkoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIC8qKgogICogd2Vi
a2l0X3dlYl92aWV3X2dldF9pY29uX3BpeGJ1ZjoKICAqIEB3ZWJWaWV3OiB0aGUgI1dlYktpdFdl
YlZpZXcgb2JqZWN0CisgKiBAc2l6ZTogdGhlIGRlc2lyZWQgaGVpZ2h0IGFuZCB3aWR0aCBmb3Ig
dGhlIGljb24KICAqCiAgKiBPYnRhaW5zIGEgI0dka1BpeGJ1ZiBvZiB0aGUgZmF2aWNvbiBmb3Ig
dGhlIGdpdmVuICNXZWJLaXRXZWJWaWV3LCBvcgogICogYSBkZWZhdWx0IGljb24gaWYgdGhlcmUg
aXMgbm8gaWNvbiBmb3IgdGhlIGdpdmVuIHBhZ2UuIFVzZQpAQCAtNDk5MywyMSArNDk5NCwyMCBA
QCBHX0NPTlNUX1JFVFVSTiBnY2hhciogd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3VyaShXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3KQogICogVXN1YWxseSB5b3Ugd2FudCB0byBjb25uZWN0IHRvIFdl
YktpdFdlYlZpZXc6Omljb24tbG9hZGVkIGFuZCBjYWxsIHRoaXMKICAqIG1ldGhvZCBpbiB0aGUg
Y2FsbGJhY2suCiAgKgotICogVGhlIHBpeGJ1ZiB3aWxsIGhhdmUgdGhlIGxhcmdlc3Qgc2l6ZSBw
cm92aWRlZCBieSB0aGUgc2VydmVyIGFuZCBzaG91bGQKLSAqIGJlIHJlc2l6ZWQgYmVmb3JlIGl0
IGlzIGRpc3BsYXllZC4KLSAqIFNlZSBhbHNvIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29u
X3BpeGJ1ZigpLgorICogSWYgQHNpemUgaXMgMCB0aGVuIHRoZSBwaXhidWYgd2lsbCBoYXZlIHRo
ZSBsYXJnZXN0IHNpemUgcHJvdmlkZWQKKyAqIGJ5IHRoZSBzZXJ2ZXIuIFNlZSBhbHNvIHdlYmtp
dF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZigpLgogICoKICAqIFJldHVybnM6ICh0cmFu
c2ZlciBmdWxsKTogYSBuZXcgcmVmZXJlbmNlIHRvIGEgI0dka1BpeGJ1Ziwgb3IgJU5VTEwKICAq
CiAgKiBTaW5jZTogMS4zLjEzCiAgKi8KLUdka1BpeGJ1Ziogd2Via2l0X3dlYl92aWV3X2dldF9p
Y29uX3BpeGJ1ZihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQorR2RrUGl4YnVmKiB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2ljb25fcGl4YnVmKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGd1aW50IHNpemUp
CiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcp
LCAwKTsKIAogICAgIGNvbnN0IGdjaGFyKiBwYWdlVVJJID0gd2Via2l0X3dlYl92aWV3X2dldF91
cmkod2ViVmlldyk7CiAgICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9n
ZXRfaWNvbl9kYXRhYmFzZSgpOwotICAgIHJldHVybiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRf
aWNvbl9waXhidWYoZGF0YWJhc2UsIHBhZ2VVUkkpOworICAgIHJldHVybiB3ZWJraXRfaWNvbl9k
YXRhYmFzZV9nZXRfaWNvbl9waXhidWYoZGF0YWJhc2UsIHBhZ2VVUkksIHNpemUpOwogfQogCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmggYi9T
b3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCmluZGV4IDM4YzlhNzAyMjQy
NTEyODNhMmY3YjM5OTYyZTJiOTExZmM4NTA1MTIuLjM0MTg3MzBiNzIxOWMxNTg2YjJkNDcyNDI4
MDdlNGU4NDI1NDFlMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJ2aWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcu
aApAQCAtMzk4LDcgKzM5OCw4IEBAIFdFQktJVF9BUEkgR19DT05TVF9SRVRVUk4gZ2NoYXIgKgog
d2Via2l0X3dlYl92aWV3X2dldF9pY29uX3VyaSAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdl
YlZpZXcgICAgICAgICp3ZWJWaWV3KTsKIAogV0VCS0lUX0FQSSBHZGtQaXhidWYgKgotd2Via2l0
X3dlYl92aWV3X2dldF9pY29uX3BpeGJ1ZiAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcg
ICAgICAgICp3ZWJWaWV3KTsKK3dlYmtpdF93ZWJfdmlld19nZXRfaWNvbl9waXhidWYgICAgICAg
ICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAg
c2l6ZSk7CiAKIFdFQktJVF9BUEkgV2ViS2l0RE9NRG9jdW1lbnQgKgogd2Via2l0X3dlYl92aWV3
X2dldF9kb21fZG9jdW1lbnQgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3
ZWJWaWV3KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99704</attachid>
            <date>2011-07-05 05:07:17 -0700</date>
            <delta_ts>2011-07-11 11:51:30 -0700</delta_ts>
            <desc>Another patch</desc>
            <filename>persistent-icons.diff</filename>
            <type>text/plain</type>
            <size>12465</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwppbmRleCAzNTU5YTMzLi41YzE1ZDc1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzggQEAKKzIwMTEtMDctMDUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFdlYktpdEljb25EYXRhYmFzZSBkb2Vzbid0
IGtlZXAgaWNvbnMgY2FjaGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NjIwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6cmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0
aW9uKTogV2hlbiB0aGUKKyAgICAgICAgaWNvbiBpcyBpbiB0aGUgZGF0YWJhc2UsIGJ1dCB0aGUg
ZGF0YSBpcyBub3Qgc3RpbGwgYXZhaWxhYmxlLAorICAgICAgICByZWdpc3RlciBhIG5vdGlmaWNh
dGlvbiB0byBkaXNwYXRjaCByZWNlaXZlZCBpY29uIHdoZW4gdGhlIGljb24KKyAgICAgICAgZGF0
YSBpcyBhdmFpbGFibGUuCisgICAgICAgICogd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHA6
CisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aCk6IERlbGF5IGRhdGFiYXNl
IGNsZWFudXAgYnkgZGVmYXVsdAorICAgICAgICB0byBtYWtlIGljb25zIHBlcnNpc3RlbnQgaW4g
dGhlIGRhdGFiYXNlLgorICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4
YnVmKTogRml4IGEKKyAgICAgICAgbGVhay4gSW1hZ2U6OmdldEdka1BpeGJ1ZigpIHJldHVybnMg
YSBuZXdseSBjcmVhdGVkIHBpeGJ1Ziwgc28gd2UKKyAgICAgICAgZG9uJ3QgbmVlZCB0byByZWZl
cmVuY2UgaXQuCisgICAgICAgIChfd2Via2l0X2ljb25fZGF0YWJhc2VfcHJvY2Vzc19wZW5kaW5n
X2ljb25zX2Zvcl91cmkpOiBOb3RpZnkgdGhlCisgICAgICAgIGljb24gaXMgYXZhaWxhYmxlIGJ5
IGNhbGxpbmcgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKS4KKyAg
ICAgICAgKF93ZWJraXRfaWNvbl9kYXRhYmFzZV9yZWdpc3Rlcl9mb3JfaWNvbl9ub3RpZmljYXRp
b24pOiBSZWdpc3RlcgorICAgICAgICBmcmFtZSBsb2FkZXIgdG8gYmUgbm90aWZpZWQgd2hlbiB0
aGUgaWNvbiBkYXRhIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgKF93ZWJraXRfaWNvbl9kYXRhYmFz
ZV91bnJlZ2lzdGVyX2Zvcl9pY29uX25vdGlmaWNhdGlvbik6CisgICAgICAgIFVucmVnaXN0ZXIg
YSBub3RpZmljYXRpb24gcmVxdWVzdC4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0aWNvbmRhdGFi
YXNlcHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlQ2xpZW50
R3RrOjpwZXJmb3JtSW1wb3J0KToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlQ2xpZW50
R3RrOjpkaWRSZW1vdmVBbGxJY29ucyk6CisgICAgICAgIChXZWJLaXQ6Okljb25EYXRhYmFzZUNs
aWVudEd0azo6ZGlkSW1wb3J0SWNvblVSTEZvclBhZ2VVUkwpOgorICAgICAgICAoV2ViS2l0OjpJ
Y29uRGF0YWJhc2VDbGllbnRHdGs6OmRpZEltcG9ydEljb25EYXRhRm9yUGFnZVVSTCk6CisgICAg
ICAgIChXZWJLaXQ6Okljb25EYXRhYmFzZUNsaWVudEd0azo6ZGlkQ2hhbmdlSWNvbkZvclBhZ2VV
UkwpOgorICAgICAgICAoV2ViS2l0OjpJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpZEZpbmlzaFVS
TEltcG9ydCk6CisgICAgICAgIChXZWJLaXQ6OlBlbmRpbmdJY29uUmVxdWVzdDo6UGVuZGluZ0lj
b25SZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6UGVuZGluZ0ljb25SZXF1ZXN0OjpwYWdlVVJJ
KToKKyAgICAgICAgKFdlYktpdDo6UGVuZGluZ0ljb25SZXF1ZXN0OjpmcmFtZUxvYWRlckNsaWVu
dCk6CisKIDIwMTEtMDctMDEgIEpvb25lIEh1ciAgPGpvb25lLmh1ckBjb2xsYWJvcmEuY28udWs+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgpkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGY5NTczMjYuLmY1MjAyMzAgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNyBAQAorMjAxMS0wNy0wNSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW0dUS10gV2ViS2l0SWNvbkRhdGFiYXNlIGRvZXNuJ3Qga2VlcCBp
Y29ucyBjYWNoZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU2MjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHN1cHBvcnQgZm9yIGZhdmljb25zIGluIEd0a0xhdW5jaGVyLgorCisgICAgICAgICog
R3RrTGF1bmNoZXIvbWFpbi5jOgorICAgICAgICAoYWN0aXZhdGVVcmlFbnRyeUNiKToKKyAgICAg
ICAgKGljb25Mb2FkZWRDYik6CisgICAgICAgIChjcmVhdGVCcm93c2VyKToKKwogMjAxMS0wNy0w
MyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjkwMzQ3LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwIGIvU291cmNlL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCmluZGV4IDMx
NjQyNWMuLjQ3NjM5ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKQEAgLTY3LDYgKzY3LDcgQEAKICNp
bmNsdWRlICJ3ZWJraXRnbG9iYWxzLmgiCiAjaW5jbHVkZSAid2Via2l0Z2xvYmFsc3ByaXZhdGUu
aCIKICNpbmNsdWRlICJ3ZWJraXRpY29uZGF0YWJhc2UuaCIKKyNpbmNsdWRlICJ3ZWJraXRpY29u
ZGF0YWJhc2Vwcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0bmV0d29ya3JlcXVlc3QuaCIKICNp
bmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVxdWVzdHByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXRu
ZXR3b3JrcmVzcG9uc2UuaCIKQEAgLTc2NSw3ICs3NjYsMTIgQEAgdm9pZCBGcmFtZUxvYWRlckNs
aWVudDo6ZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbigpIGNvbnN0CiAKIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnQ6OnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29sIHNob3VsZFJlZ2lzdGVy
KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgY29uc3QgZ2NoYXIqIGZyYW1lVVJJID0g
d2Via2l0X3dlYl9mcmFtZV9nZXRfdXJpKG1fZnJhbWUpOworICAgIFdlYktpdEljb25EYXRhYmFz
ZSogZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKKyAgICBpZiAoc2hvdWxk
UmVnaXN0ZXIpCisgICAgICAgIF93ZWJraXRfaWNvbl9kYXRhYmFzZV9yZWdpc3Rlcl9mb3JfaWNv
bl9ub3RpZmljYXRpb24oZGF0YWJhc2UsIGZyYW1lVVJJLCB0aGlzKTsKKyAgICBlbHNlCisgICAg
ICAgIF93ZWJraXRfaWNvbl9kYXRhYmFzZV91bnJlZ2lzdGVyX2Zvcl9pY29uX25vdGlmaWNhdGlv
bihkYXRhYmFzZSwgZnJhbWVVUkksIHRoaXMpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
OjpzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5KGJvb2wgcmVhZHkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuY3BwCmluZGV4IDM4M2IwODEuLjU2ZDcz
MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJh
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2Uu
Y3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbnRT
aXplLmgiCiAjaW5jbHVkZSAid2Via2l0Z2xvYmFsc3ByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJr
aXRpY29uZGF0YWJhc2Vwcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgogI2lu
Y2x1ZGUgIndlYmtpdHNlY3VyaXR5b3JpZ2lucHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdHdl
YmZyYW1lLmgiCkBAIC03NywxMCArNzgsMTIgQEAgZW51bSB7CiAKIHN0YXRpYyBndWludCB3ZWJr
aXRfaWNvbl9kYXRhYmFzZV9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKIAotR19ERUZJ
TkVfVFlQRShXZWJLaXRJY29uRGF0YWJhc2UsIHdlYmtpdF9pY29uX2RhdGFiYXNlLCBHX1RZUEVf
T0JKRUNUKTsKK0dfREVGSU5FX1RZUEUoV2ViS2l0SWNvbkRhdGFiYXNlLCB3ZWJraXRfaWNvbl9k
YXRhYmFzZSwgR19UWVBFX09CSkVDVCkKIAogc3RydWN0IF9XZWJLaXRJY29uRGF0YWJhc2VQcml2
YXRlIHsKICAgICBHT3duUHRyPGdjaGFyPiBwYXRoOworICAgIEljb25EYXRhYmFzZUNsaWVudEd0
ayBpY29uRGF0YWJhc2VDbGllbnQ7CisgICAgR0xpc3QqIHBlbmRpbmdJY29uczsKIH07CiAKIHN0
YXRpYyB2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkK
QEAgLTIzMyw4ICsyMzYsMTUgQEAgdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aChX
ZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBnY2hhciogcGEKIAogICAgIGRhdGFi
YXNlLT5wcml2LT5wYXRoLnNldChnX3N0cmR1cChwYXRoKSk7CiAKKyAgICBXZWJDb3JlOjppY29u
RGF0YWJhc2UoKS5zZXRDbGllbnQoJmRhdGFiYXNlLT5wcml2LT5pY29uRGF0YWJhc2VDbGllbnQp
OworICAgIFdlYkNvcmU6Okljb25EYXRhYmFzZTo6ZGVsYXlEYXRhYmFzZUNsZWFudXAoKTsKICAg
ICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5zZXRFbmFibGVkKHRydWUpOwotICAgIFdlYkNvcmU6
Omljb25EYXRhYmFzZSgpLm9wZW4oV2ViQ29yZTo6ZmlsZW5hbWVUb1N0cmluZyhkYXRhYmFzZS0+
cHJpdi0+cGF0aC5nZXQoKSksIFdlYkNvcmU6Okljb25EYXRhYmFzZTo6ZGVmYXVsdERhdGFiYXNl
RmlsZW5hbWUoKSk7CisgICAgaWYgKCFXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5vcGVuKFdlYkNv
cmU6OmZpbGVuYW1lVG9TdHJpbmcocGF0aCksIFdlYkNvcmU6Okljb25EYXRhYmFzZTo6ZGVmYXVs
dERhdGFiYXNlRmlsZW5hbWUoKSkpIHsKKyAgICAgICAgV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjph
bGxvd0RhdGFiYXNlQ2xlYW51cCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGF0
YWJhc2UtPnByaXYtPnBhdGguc2V0KGdfc3RyZHVwKHBhdGgpKTsKIAogICAgIHN0YXRpYyBib29s
IGluaXRpYWxpemVkID0gZmFsc2U7CiAgICAgaWYgKCFpbml0aWFsaXplZCkgewpAQCAtMjkyLDEy
ICszMDIsNDcgQEAgR2RrUGl4YnVmKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhi
dWYoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY28KICAgICAvLyBUaGUgZXhhY3Qgc2l6
ZSB3ZSBwYXNzIGlzIGlycmVsZXZhbnQgdG8gdGhlIFdlYkNvcmU6Omljb25EYXRhYmFzZSBjb2Rl
LgogICAgIC8vIFdlIG11c3QgcGFzcyBzb21ldGhpbmcgZ3JlYXRlciB0aGFuIDAsIDAgdG8gZ2V0
IGEgcGl4YnVmLgogICAgIFdlYkNvcmU6OkltYWdlKiBpY29uID0gV2ViQ29yZTo6aWNvbkRhdGFi
YXNlKCkuc3luY2hyb25vdXNJY29uRm9yUGFnZVVSTChwYWdlVVJMLCBXZWJDb3JlOjpJbnRTaXpl
KDE2LCAxNikpOwotICAgIGlmICghaWNvbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgR2RrUGl4
YnVmKiBwaXhidWYgPSBpY29uLT5nZXRHZGtQaXhidWYoKTsKLSAgICBpZiAoIXBpeGJ1ZikKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEdka1BpeGJ1Zio+KGdfb2Jq
ZWN0X3JlZihwaXhidWYpKTsKKyAgICByZXR1cm4gaWNvbiA/IGljb24tPmdldEdka1BpeGJ1Zigp
IDogMDsKK30KKwordm9pZCBfd2Via2l0X2ljb25fZGF0YWJhc2VfcHJvY2Vzc19wZW5kaW5nX2lj
b25zX2Zvcl91cmkoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBw
YWdlVVJJKQoreworICAgIEdMaXN0KiBpY29ucyA9IGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNv
bnM7CisgICAgd2hpbGUgKGljb25zKSB7CisgICAgICAgIEdMaXN0KiBuZXh0ID0gZ19saXN0X25l
eHQoaWNvbnMpOworCisgICAgICAgIFBlbmRpbmdJY29uUmVxdWVzdCogcmVxdWVzdCA9IHN0YXRp
Y19jYXN0PFBlbmRpbmdJY29uUmVxdWVzdCo+KGljb25zLT5kYXRhKTsKKyAgICAgICAgaWYgKHJl
cXVlc3QtPnBhZ2VVUkkoKSA9PSBwYWdlVVJJKSB7CisgICAgICAgICAgICBkYXRhYmFzZS0+cHJp
di0+cGVuZGluZ0ljb25zID0gZ19saXN0X3JlbW92ZV9saW5rKGRhdGFiYXNlLT5wcml2LT5wZW5k
aW5nSWNvbnMsIGljb25zKTsKKyAgICAgICAgICAgIHJlcXVlc3QtPmZyYW1lTG9hZGVyQ2xpZW50
KCktPmRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKTsKKyAgICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0
OworICAgICAgICAgICAgZ19saXN0X2ZyZWUoaWNvbnMpOworICAgICAgICB9CisKKyAgICAgICAg
aWNvbnMgPSBuZXh0OworICAgIH0KK30KKwordm9pZCBfd2Via2l0X2ljb25fZGF0YWJhc2VfcmVn
aXN0ZXJfZm9yX2ljb25fbm90aWZpY2F0aW9uKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2Us
IGNvbnN0IGdjaGFyKiBwYWdlVVJJLCBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudCogY2xpZW50
KQoreworICAgIFBlbmRpbmdJY29uUmVxdWVzdCogcmVxdWVzdCA9IG5ldyBQZW5kaW5nSWNvblJl
cXVlc3QocGFnZVVSSSwgY2xpZW50KTsKKyAgICBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25z
ID0gZ19saXN0X3ByZXBlbmQoZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29ucywgcmVxdWVzdCk7
Cit9CisKK3ZvaWQgX3dlYmtpdF9pY29uX2RhdGFiYXNlX3VucmVnaXN0ZXJfZm9yX2ljb25fbm90
aWZpY2F0aW9uKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGdjaGFyKiBwYWdl
VVJJLCBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudCogY2xpZW50KQoreworICAgIEdMaXN0KiBp
Y29ucyA9IGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvbnM7CisgICAgd2hpbGUgKGljb25zKSB7
CisgICAgICAgIEdMaXN0KiBuZXh0ID0gZ19saXN0X25leHQoaWNvbnMpOworCisgICAgICAgIFBl
bmRpbmdJY29uUmVxdWVzdCogcmVxdWVzdCA9IHN0YXRpY19jYXN0PFBlbmRpbmdJY29uUmVxdWVz
dCo+KGljb25zLT5kYXRhKTsKKyAgICAgICAgaWYgKHJlcXVlc3QtPnBhZ2VVUkkoKSA9PSBwYWdl
VVJJICYmIHJlcXVlc3QtPmZyYW1lTG9hZGVyQ2xpZW50KCkgPT0gY2xpZW50KSB7CisgICAgICAg
ICAgICBkZWxldGUgcmVxdWVzdDsKKyAgICAgICAgICAgIGdfbGlzdF9mcmVlKGljb25zKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGljb25zID0gbmV4dDsKKyAgICB9CiB9CiAKIC8qKgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZXByaXZhdGUu
aCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU1ODA4NAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRl
LmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIHdlYmtpdGljb25kYXRhYmFzZXByaXZhdGVfaAorI2RlZmluZSB3ZWJraXRpY29u
ZGF0YWJhc2Vwcml2YXRlX2gKKworI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5j
bHVkZSAiSWNvbkRhdGFiYXNlQ2xpZW50LmgiCisjaW5jbHVkZSAid2Via2l0Z2xvYmFscy5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBGcmFtZUxvYWRlckNsaWVudDsKK2NsYXNzIElj
b25EYXRhYmFzZUNsaWVudDsKK30KKworZXh0ZXJuICJDIiB7Cit2b2lkIF93ZWJraXRfaWNvbl9k
YXRhYmFzZV9yZWdpc3Rlcl9mb3JfaWNvbl9ub3RpZmljYXRpb24oV2ViS2l0SWNvbkRhdGFiYXNl
KiwgY29uc3QgZ2NoYXIqIHBhZ2VVUkksIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50Kik7Cit2
b2lkIF93ZWJraXRfaWNvbl9kYXRhYmFzZV91bnJlZ2lzdGVyX2Zvcl9pY29uX25vdGlmaWNhdGlv
bihXZWJLaXRJY29uRGF0YWJhc2UqLCBjb25zdCBnY2hhciogcGFnZVVSSSwgV2ViQ29yZTo6RnJh
bWVMb2FkZXJDbGllbnQqKTsKK3ZvaWQgX3dlYmtpdF9pY29uX2RhdGFiYXNlX3Byb2Nlc3NfcGVu
ZGluZ19pY29uc19mb3JfdXJpKFdlYktpdEljb25EYXRhYmFzZSosIGNvbnN0IFN0cmluZyYgcGFn
ZVVSSSk7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBJY29uRGF0YWJhc2VDbGll
bnRHdGsgOiBwdWJsaWMgV2ViQ29yZTo6SWNvbkRhdGFiYXNlQ2xpZW50IHsKKyAgICBwdWJsaWM6
CisgICAgLy8gSWNvbkRhdGFiYXNlQ2xpZW50IGludGVyZmFjZQorICAgIHZpcnR1YWwgYm9vbCBw
ZXJmb3JtSW1wb3J0KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZW1v
dmVBbGxJY29ucygpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkSW1wb3J0SWNvblVSTEZvclBh
Z2VVUkwoY29uc3QgU3RyaW5nJikgeyB9OworICAgIHZpcnR1YWwgdm9pZCBkaWRJbXBvcnRJY29u
RGF0YUZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBVUkwpCisgICAgeworICAgICAgICBfd2Via2l0
X2ljb25fZGF0YWJhc2VfcHJvY2Vzc19wZW5kaW5nX2ljb25zX2Zvcl91cmkod2Via2l0X2dldF9p
Y29uX2RhdGFiYXNlKCksIFVSTCk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VJ
Y29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGRpZEZp
bmlzaFVSTEltcG9ydCgpIHsgfTsKK307CisKK3N0cnVjdCBQZW5kaW5nSWNvblJlcXVlc3Qgewor
cHVibGljOgorICAgIFBlbmRpbmdJY29uUmVxdWVzdChjb25zdCBjaGFyKiBwYWdlVVJJLCBXZWJD
b3JlOjpGcmFtZUxvYWRlckNsaWVudCogZnJhbWVMb2FkZXJDbGllbnQpCisgICAgICAgIDogbV9w
YWdlVVJJKHBhZ2VVUkkpCisgICAgICAgICwgbV9mcmFtZUxvYWRlckNsaWVudChmcmFtZUxvYWRl
ckNsaWVudCkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgU3RyaW5nJiBwYWdlVVJJKCkgeyBy
ZXR1cm4gbV9wYWdlVVJJOyB9CisgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQqIGZyYW1l
TG9hZGVyQ2xpZW50KCkgeyByZXR1cm4gbV9mcmFtZUxvYWRlckNsaWVudDsgfQorCitwcml2YXRl
OgorICAgIFN0cmluZyBtX3BhZ2VVUkk7CisgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQq
IG1fZnJhbWVMb2FkZXJDbGllbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIHdlYmtpdGljb25kYXRhYmFzZXByaXZhdGVfaApkaWZmIC0tZ2l0IGEvVG9vbHMvR3Rr
TGF1bmNoZXIvbWFpbi5jIGIvVG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCmluZGV4IGVkYzhlMmYu
LmE2MDRlYjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0d0a0xhdW5jaGVyL21haW4uYworKysgYi9Ub29s
cy9HdGtMYXVuY2hlci9tYWluLmMKQEAgLTQwLDYgKzQwLDcgQEAgc3RhdGljIHZvaWQgYWN0aXZh
dGVVcmlFbnRyeUNiKEd0a1dpZGdldCogZW50cnksIGdwb2ludGVyIGRhdGEpCiAgICAgV2ViS2l0
V2ViVmlldyAqd2ViVmlldyA9IGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGVudHJ5KSwgIndl
Yi12aWV3Iik7CiAgICAgY29uc3QgZ2NoYXIqIHVyaSA9IGd0a19lbnRyeV9nZXRfdGV4dChHVEtf
RU5UUlkoZW50cnkpKTsKICAgICBnX2Fzc2VydCh1cmkpOworICAgIGd0a19lbnRyeV9zZXRfaWNv
bl9mcm9tX3BpeGJ1ZihHVEtfRU5UUlkoZW50cnkpLCBHVEtfRU5UUllfSUNPTl9QUklNQVJZLCAw
KTsKICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViVmlldywgdXJpKTsKIH0KIApAQCAt
MTI1LDYgKzEyNiwxNCBAQCBzdGF0aWMgZ2Jvb2xlYW4gY2xvc2VXZWJWaWV3Q2IoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgR3RrV2lkZ2V0KiB3aW5kb3cpCiAgICAgZ3RrX3dpZGdldF9kZXN0cm95
KHdpbmRvdyk7CiAgICAgcmV0dXJuIFRSVUU7CiB9CisKK3N0YXRpYyB2b2lkIGljb25Mb2FkZWRD
YihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiBpY29uVVJJLCBHdGtXaWRnZXQq
IHVyaUVudHJ5KQoreworICAgIEdka1BpeGJ1ZiAqaWNvbiA9IHdlYmtpdF9pY29uX2RhdGFiYXNl
X2dldF9pY29uX3BpeGJ1Zih3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKSwgd2Via2l0X3dlYl92
aWV3X2dldF91cmkod2ViVmlldykpOworICAgIGd0a19lbnRyeV9zZXRfaWNvbl9mcm9tX3BpeGJ1
ZihHVEtfRU5UUlkodXJpRW50cnkpLCBHVEtfRU5UUllfSUNPTl9QUklNQVJZLCBpY29uKTsKKyAg
ICBpZiAoaWNvbikKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoaWNvbik7Cit9CiAjZW5kaWYKIAog
c3RhdGljIEd0a1dpZGdldCogY3JlYXRlQnJvd3NlcihHdGtXaWRnZXQqIHdpbmRvdywgR3RrV2lk
Z2V0KiB1cmlFbnRyeSwgR3RrV2lkZ2V0KiBzdGF0dXNiYXIsIFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcpCkBAIC0xMzgsNiArMTQ3LDcgQEAgc3RhdGljIEd0a1dpZGdldCogY3JlYXRlQnJvd3NlcihH
dGtXaWRnZXQqIHdpbmRvdywgR3RrV2lkZ2V0KiB1cmlFbnRyeSwgR3RrV2lkZ2UKICAgICBnX3Np
Z25hbF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6OnRpdGxlIiwgR19DQUxMQkFDSyhub3RpZnlU
aXRsZUNiKSwgd2luZG93KTsKICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6
OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhub3RpZnlMb2FkU3RhdHVzQ2IpLCB1cmlFbnRyeSk7
CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojpwcm9ncmVzcyIsIEdfQ0FM
TEJBQ0sobm90aWZ5UHJvZ3Jlc3NDYiksIHdpbmRvdyk7CisgICAgZ19zaWduYWxfY29ubmVjdCh3
ZWJWaWV3LCAiaWNvbi1sb2FkZWQiLCBHX0NBTExCQUNLKGljb25Mb2FkZWRDYiksIHVyaUVudHJ5
KTsKICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJob3ZlcmluZy1vdmVyLWxpbmsiLCBH
X0NBTExCQUNLKGxpbmtIb3ZlckNiKSwgc3RhdHVzYmFyKTsKICAgICBnX3NpZ25hbF9jb25uZWN0
KHdlYlZpZXcsICJjcmVhdGUtd2ViLXZpZXciLCBHX0NBTExCQUNLKGNyZWF0ZVdlYlZpZXdDYiks
IHdpbmRvdyk7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAid2ViLXZpZXctcmVhZHki
LCBHX0NBTExCQUNLKHdlYlZpZXdSZWFkeUNiKSwgd2luZG93KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100340</attachid>
            <date>2011-07-11 11:51:30 -0700</date>
            <delta_ts>2011-07-12 03:46:40 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>icon-database2.diff</filename>
            <type>text/plain</type>
            <size>36175</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwppbmRleCA4MzA4ZTk1Li42NWNjNjVjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNzEgQEAKKzIwMTEtMDctMTEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFdlYktpdEljb25EYXRhYmFzZSBkb2Vzbid0
IGtlZXAgaWNvbnMgY2FjaGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NjIwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24u
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6cmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0
aW9uKTogV2hlbiB0aGUKKyAgICAgICAgaWNvbiBpcyBpbiB0aGUgZGF0YWJhc2UsIGJ1dCB0aGUg
ZGF0YSBpcyBub3Qgc3RpbGwgYXZhaWxhYmxlLAorICAgICAgICByZWdpc3RlciBhIG5vdGlmaWNh
dGlvbiB0byBkaXNwYXRjaCByZWNlaXZlZCBpY29uIHdoZW4gdGhlIGljb24KKyAgICAgICAgZGF0
YSBpcyBhdmFpbGFibGUuCisgICAgICAgICogdGVzdHMvdGVzdGljb25kYXRhYmFzZS5jOiBBZGRl
ZC4KKyAgICAgICAgKGRlbGV0ZV9kYl9maWxlX2lmX2V4aXN0cyk6CisgICAgICAgICh0ZXN0X3dl
YmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKToKKyAgICAgICAgKGljb25fZGF0YWJhc2VfZ2V0
X2ljb25fdmFsaWRfY2FsbGJhY2spOgorICAgICAgICAoaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9p
bnZhbGlkX2NhbGxiYWNrKToKKyAgICAgICAgKGljb25fZGF0YWJhc2VfZ2V0X2ljb25fY2FuY2Vs
bGVkX2NhbGxiYWNrKToKKyAgICAgICAgKGlkbGVfcXVpdF9sb29wX2NiKToKKyAgICAgICAgKGxv
YWRfdXJpKToKKyAgICAgICAgKGljb25fZGF0YWJhc2VfZ2V0X2ljb25fdmFsaWRfaWRsZSk6Cisg
ICAgICAgIChpY29uX2RhdGFiYXNlX2dldF9pY29uX2ludmFsaWRfaWRsZSk6CisgICAgICAgIChp
Y29uX2RhdGFiYXNlX2dldF9pY29uX2NhbmNlbGxlZF9pZGxlKToKKyAgICAgICAgKHRlc3Rfd2Vi
a2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fYXN5bmMpOgorICAgICAgICAodGVzdF93ZWJraXRf
aWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmkpOgorICAgICAgICAodGVzdF93ZWJraXRfaWNvbl9k
YXRhYmFzZV9yZW1vdmVfYWxsKToKKyAgICAgICAgKHRlc3Rfd2Via2l0X2ljb25fZGF0YWJhc2Vf
Y2xvc2VfZGIpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogd2Via2l0L3dlYmtpdGljb25k
YXRhYmFzZS5jcHA6CisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aCk6IERl
bGF5IGRhdGFiYXNlIGNsZWFudXAgYnkgZGVmYXVsdAorICAgICAgICB0byBtYWtlIGljb25zIHBl
cnNpc3RlbnQgaW4gdGhlIGRhdGFiYXNlLgorICAgICAgICAoZ2V0X2ljb25fcGl4YnVmKTogSGVs
cGVyIGZ1bmN0aW9uIHRvIGNhbGwKKyAgICAgICAgSWNvbkRhdGFiYXNlOjpzeW5jaHJvbm91c0lj
b25VUkxGb3JQYWdlVVJMKCkuCisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl9waXhidWYpOiBGaXggZG9jIGNvbW1lbnRzLgorICAgICAgICAoZ2V0X2ljb25fcGl4YnVmX2Nh
bmNlbGxlZF9pZGxlKTogTWFyayBvcGVyYXRpb24gYXMgY2FuY2VsbGVkIGFuZAorICAgICAgICBj
b21wbGV0ZSBpdC4KKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1
Zl9jYW5jZWxsZWQpOgorICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4
YnVmX2FzeW5jKTogTmV3IG1ldGhvZCB0bworICAgICAgICBhc3luY2hyb25vdXNseSBnZXQgYW4g
aWNvbi4KKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5p
c2gpOiBGaW5pc2hlcyBhbgorICAgICAgICBvcGVyYXRpb24gc3RhcnRlZCB3aXRoIHdlYmtpdF9p
Y29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYygpLgorICAgICAgICAoX3dlYmtpdF9p
Y29uX2RhdGFiYXNlX3Byb2Nlc3NfcGVuZGluZ19pY29uc19mb3JfdXJpKTogUHJvY2VzcworICAg
ICAgICBwZW5kaW5nIHJlcXVlc3RzIGZvciB0aGUgZ2l2ZW4gdXJpLCBmb3IgYXN5bmMgb3BlcmF0
aW9uIHJlcXVlc3RzIGl0CisgICAgICAgIGNvbXBsZXRlcyB0aGUgb3BlcmF0aW9uLCB3aGlsZSBm
b3IgZnJhbWUgbG9hZGVyIHJlcXVlc3RzIGl0IGNhbGxzCisgICAgICAgIEZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERpZFJlY2VpdmVJY29uKCkgdG8gbm90aWZ5IHRoZSBmcmFtZQorICAgICAg
ICBsb2FkZXIgdGhhdCBoZSBpY29uIGlzIG5vdyBhdmFpbGFibGUuCisgICAgICAgIChfd2Via2l0
X2ljb25fZGF0YWJhc2VfcmVnaXN0ZXJfZm9yX2ljb25fbm90aWZpY2F0aW9uKTogUmVnaXN0ZXIK
KyAgICAgICAgZnJhbWUgbG9hZGVyIHRvIGJlIG5vdGlmaWVkIHdoZW4gdGhlIGljb24gZGF0YSBp
cyBhdmFpbGFibGUuCisgICAgICAgIChfd2Via2l0X2ljb25fZGF0YWJhc2VfdW5yZWdpc3Rlcl9m
b3JfaWNvbl9ub3RpZmljYXRpb24pOgorICAgICAgICBVbnJlZ2lzdGVyIGEgZnJhbWUgbG9hZGVy
IG5vdGlmaWNhdGlvbiByZXF1ZXN0LgorICAgICAgICAoX3dlYmtpdF9pY29uX2RhdGFiYXNlX2lt
cG9ydF9maW5pc2hlZCk6IFdoZW4gaW1wb3J0IGlzIGZpbmlzaGVkLAorICAgICAgICBjaGVjayBw
ZW5kaW5nIHJlcXVlc3RzIHRvIHByb2Nlc3MgYW5kIGRlbGV0ZSB0aGUgb25lcyB0aGF0IGFzayBm
b3IKKyAgICAgICAgYW4gaWNvbiB0aGF0IGRvZXNuJ3QgZXhpc3QgaW4gZGF0YWJhc2UuCisgICAg
ICAgICogd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oOgorICAgICAgICAqIHdlYmtpdC93ZWJr
aXRpY29uZGF0YWJhc2Vwcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJY29uRGF0
YWJhc2VDbGllbnRHdGs6OnBlcmZvcm1JbXBvcnQpOgorICAgICAgICAoV2ViS2l0OjpJY29uRGF0
YWJhc2VDbGllbnRHdGs6OmRpZFJlbW92ZUFsbEljb25zKToKKyAgICAgICAgKFdlYktpdDo6SWNv
bkRhdGFiYXNlQ2xpZW50R3RrOjpkaWRJbXBvcnRJY29uVVJMRm9yUGFnZVVSTCk6CisgICAgICAg
IChXZWJLaXQ6Okljb25EYXRhYmFzZUNsaWVudEd0azo6ZGlkSW1wb3J0SWNvbkRhdGFGb3JQYWdl
VVJMKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpkaWRDaGFuZ2VJ
Y29uRm9yUGFnZVVSTCk6CisgICAgICAgIChXZWJLaXQ6Okljb25EYXRhYmFzZUNsaWVudEd0azo6
ZGlkRmluaXNoVVJMSW1wb3J0KToKKyAgICAgICAgKFdlYktpdDo6UGVuZGluZ0ljb25SZXF1ZXN0
OjpQZW5kaW5nSWNvblJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpQZW5kaW5nSWNvblJlcXVl
c3Q6On5QZW5kaW5nSWNvblJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpQZW5kaW5nSWNvblJl
cXVlc3Q6OnBhZ2VVUkkpOgorICAgICAgICAoV2ViS2l0OjpQZW5kaW5nSWNvblJlcXVlc3Q6OmZy
YW1lTG9hZGVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6UGVuZGluZ0ljb25SZXF1ZXN0Ojph
c3luY1Jlc3VsdCk6CisKIDIwMTEtMDctMDggIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGd1c3Rh
dm8ubm9yb25oYUBjb2xsYWJvcmEuY29tPgogCiAgICAgICAgIFtHVEtdIHRlc3R3ZWJ2aWV3IEFQ
SSB0ZXN0IGZhaWxzIGFmdGVyIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzkwNDcx
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTFl
MzJmNC4uNTQxMzViYyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTA3LTExICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBXZWJLaXRJY29uRGF0YWJh
c2UgZG9lc24ndCBrZWVwIGljb25zIGNhY2hlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyMDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZmF2aWNvbnMgaW4gR3RrTGF1bmNo
ZXIuCisKKyAgICAgICAgKiBHdGtMYXVuY2hlci9tYWluLmM6CisgICAgICAgIChhY3RpdmF0ZVVy
aUVudHJ5Q2IpOgorICAgICAgICAoaWNvbkxvYWRlZENiKToKKyAgICAgICAgKGNyZWF0ZUJyb3dz
ZXIpOgorCiAyMDExLTA3LTEwICBLZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBMZXQgcGx1Z2lucyBwYXJ0aWNpcGF0ZSBpbiBmb3JtIHN1Ym1pc3Npb24K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dl
YktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggNTFjN2M3Zi4uZmQ3ZjBhZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdC9n
dGsvR05VbWFrZWZpbGUuYW0KQEAgLTIxNiw2ICsyMTYsNyBAQCB3ZWJraXRndGtfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuY3BwIFwK
IAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aGl0dGVzdHJlc3VsdHByaXZhdGUuaCBc
CiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAgXAorCVNv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlLmggXAogCVNv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5jcHAgXAogCVNvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdHByaXZhdGUuaCBcCiAJU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXNwb25zZS5jcHAgXApAQCAtNDMy
LDYgKzQzMyw3IEBAIFRFU1RfUFJPR1MgKz0gXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0ZG9t
ZG9td2luZG93IFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdGRvbW5vZGUgXAogCVByb2dyYW1z
L3VuaXR0ZXN0cy90ZXN0aHR0cGJhY2tlbmQgXAorCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0aWNv
bmRhdGFiYXNlIFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdGxvYWRpbmcgXAogCVByb2dyYW1z
L3VuaXR0ZXN0cy90ZXN0Z2xvYmFscyBcCiAJUHJvZ3JhbXMvdW5pdHRlc3RzL3Rlc3RtaW1laGFu
ZGxpbmcgXApAQCAtNDc5LDYgKzQ4MSwxMSBAQCBQcm9ncmFtc191bml0dGVzdHNfdGVzdGh0dHBi
YWNrZW5kX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKIFByb2dyYW1zX3VuaXR0ZXN0
c190ZXN0aHR0cGJhY2tlbmRfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKIFByb2dyYW1z
X3VuaXR0ZXN0c190ZXN0aHR0cGJhY2tlbmRfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxh
Z3MpCiAKK1Byb2dyYW1zX3VuaXR0ZXN0c190ZXN0aWNvbmRhdGFiYXNlX1NPVVJDRVMgPSBTb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0aWNvbmRhdGFiYXNlLmMKK1Byb2dyYW1zX3VuaXR0ZXN0
c190ZXN0aWNvbmRhdGFiYXNlX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKK1Byb2dy
YW1zX3VuaXR0ZXN0c190ZXN0aWNvbmRhdGFiYXNlX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRh
ZGQpCitQcm9ncmFtc191bml0dGVzdHNfdGVzdGljb25kYXRhYmFzZV9MREZMQUdTID0gJCh3ZWJr
aXRfdGVzdHNfbGRmbGFncykKKwogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RnbG9iYWxzX1NPVVJD
RVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Z2xvYmFscy5jCiBQcm9ncmFtc191bml0
dGVzdHNfdGVzdGdsb2JhbHNfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQogUHJvZ3Jh
bXNfdW5pdHRlc3RzX3Rlc3RnbG9iYWxzX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudEd0ay5jcHAKaW5kZXggMzE2NDI1Yy4uNDc2Mzk4OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNw
cApAQCAtNjcsNiArNjcsNyBAQAogI2luY2x1ZGUgIndlYmtpdGdsb2JhbHMuaCIKICNpbmNsdWRl
ICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFzZS5o
IgorI2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFzZXByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJr
aXRuZXR3b3JrcmVxdWVzdC5oIgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmtyZXF1ZXN0cHJpdmF0
ZS5oIgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmtyZXNwb25zZS5oIgpAQCAtNzY1LDcgKzc2Niwx
MiBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKCkg
Y29uc3QKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6cmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0
aW9uKGJvb2wgc2hvdWxkUmVnaXN0ZXIpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBj
b25zdCBnY2hhciogZnJhbWVVUkkgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF91cmkobV9mcmFtZSk7
CisgICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRh
YmFzZSgpOworICAgIGlmIChzaG91bGRSZWdpc3RlcikKKyAgICAgICAgX3dlYmtpdF9pY29uX2Rh
dGFiYXNlX3JlZ2lzdGVyX2Zvcl9pY29uX25vdGlmaWNhdGlvbihkYXRhYmFzZSwgZnJhbWVVUkks
IHRoaXMpOworICAgIGVsc2UKKyAgICAgICAgX3dlYmtpdF9pY29uX2RhdGFiYXNlX3VucmVnaXN0
ZXJfZm9yX2ljb25fbm90aWZpY2F0aW9uKGRhdGFiYXNlLCBmcmFtZVVSSSwgdGhpcyk7CiB9CiAK
IHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9vbCBy
ZWFkeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RpY29uZGF0YWJh
c2UuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RpY29uZGF0YWJhc2UuYwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzdhNmMyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGljb25kYXRhYmFzZS5jCkBAIC0wLDAgKzEsMjI3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJ0ZXN0
X3V0aWxzLmgiCisKKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPGd0ay9ndGsu
aD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigy
LCAxNCwgMCkKK0dNYWluTG9vcCogbG9vcDsKKworc3RhdGljIHZvaWQgZGVsZXRlX2RiX2ZpbGVf
aWZfZXhpc3RzKGNvbnN0IGdjaGFyICpkYl9wYXRoKQoreworICAgIGlmICghZ19maWxlX3Rlc3Qo
ZGJfcGF0aCwgR19GSUxFX1RFU1RfSVNfRElSKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2No
YXIqIGRiX2ZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZShkYl9wYXRoLCAiV2VicGFnZUljb25z
LmRiIiwgTlVMTCk7CisgICAgaWYgKGdfdW5saW5rKGRiX2ZpbGVuYW1lKSA9PSAtMSkgeworICAg
ICAgICBnX2ZyZWUoZGJfZmlsZW5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Z19ybWRpcihkYl9wYXRoKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfaWNvbl9kYXRh
YmFzZV9zZXRfcGF0aCh2b2lkKQoreworICAgIGdjaGFyICpkYl9wYXRoID0gZ19idWlsZF9maWxl
bmFtZShnX2dldF90bXBfZGlyKCksICJ3ZWJraXQtdGVzdGljb25kYXRhYmFzZSIsIE5VTEwpOwor
ICAgIGRlbGV0ZV9kYl9maWxlX2lmX2V4aXN0cyhkYl9wYXRoKTsKKworICAgIFdlYktpdEljb25E
YXRhYmFzZSogaWNvbl9kYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOworICAg
IHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKGljb25fZGF0YWJhc2UsIGRiX3BhdGgpOwor
CisgICAgZ19hc3NlcnRfY21wc3RyKGRiX3BhdGgsID09LCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9n
ZXRfcGF0aChpY29uX2RhdGFiYXNlKSk7CisKKyAgICBnX2ZyZWUoZGJfcGF0aCk7Cit9CisKK3N0
YXRpYyB2b2lkIGljb25fZGF0YWJhc2VfZ2V0X2ljb25fdmFsaWRfY2FsbGJhY2soR09iamVjdCog
c291cmNlX29iamVjdCwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIGdwb2ludGVyIHVzZXJfZGF0YSkK
K3sKKyAgICBnYm9vbGVhbiogYmVlbl9oZXJlID0gKGdib29sZWFuKil1c2VyX2RhdGE7CisgICAg
R0Vycm9yKiBlcnJvciA9IE5VTEw7CisgICAgR2RrUGl4YnVmKiBpY29uID0gd2Via2l0X2ljb25f
ZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2ZpbmlzaChXRUJLSVRfSUNPTl9EQVRBQkFTRShzb3Vy
Y2Vfb2JqZWN0KSwgcmVzdWx0LCAmZXJyb3IpOworICAgIGdfYXNzZXJ0KGljb24pOworICAgIGdf
b2JqZWN0X3VucmVmKGljb24pOworCisgICAgKmJlZW5faGVyZSA9IFRSVUU7CisKKyAgICBnX21h
aW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMgdm9pZCBpY29uX2RhdGFiYXNlX2dldF9p
Y29uX2ludmFsaWRfY2FsbGJhY2soR09iamVjdCogc291cmNlX29iamVjdCwgR0FzeW5jUmVzdWx0
ICpyZXN1bHQsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgICBnYm9vbGVhbiogYmVlbl9oZXJl
ID0gKGdib29sZWFuKil1c2VyX2RhdGE7CisgICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7CisgICAg
R2RrUGl4YnVmKiBpY29uID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2Zp
bmlzaChXRUJLSVRfSUNPTl9EQVRBQkFTRShzb3VyY2Vfb2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Ip
OworICAgIGdfYXNzZXJ0KCFpY29uKTsKKworICAgICpiZWVuX2hlcmUgPSBUUlVFOworCisgICAg
Z19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIHZvaWQgaWNvbl9kYXRhYmFzZV9n
ZXRfaWNvbl9jYW5jZWxsZWRfY2FsbGJhY2soR09iamVjdCogc291cmNlX29iamVjdCwgR0FzeW5j
UmVzdWx0ICpyZXN1bHQsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgICBnYm9vbGVhbiogYmVl
bl9oZXJlID0gKGdib29sZWFuKil1c2VyX2RhdGE7CisgICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7
CisgICAgR2RrUGl4YnVmKiBpY29uID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4
YnVmX2ZpbmlzaChXRUJLSVRfSUNPTl9EQVRBQkFTRShzb3VyY2Vfb2JqZWN0KSwgcmVzdWx0LCAm
ZXJyb3IpOworICAgIGdfYXNzZXJ0KCFpY29uKTsKKyAgICBnX2Fzc2VydChlcnJvciAmJiBnX2Vy
cm9yX21hdGNoZXMoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSk7CisK
KyAgICAqYmVlbl9oZXJlID0gVFJVRTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Cit9
CisKK3N0YXRpYyB2b2lkIGlkbGVfcXVpdF9sb29wX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3
LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBnX21haW5fbG9vcF9x
dWl0KGxvb3ApOworfQorCitzdGF0aWMgdm9pZCBsb2FkX3VyaShjb25zdCBnY2hhciogdXJpKQor
eworICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19QT1BV
UCk7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5k
b3cpLCBHVEtfV0lER0VUKHZpZXcpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7
CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgdXJpKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0KHZpZXcsICJpY29uLWxvYWRlZCIsIEdfQ0FMTEJBQ0sgKGlkbGVfcXVpdF9sb29w
X2NiKSwgTlVMTCk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ3RrX3dpZGdl
dF9kZXN0cm95KHdpbmRvdyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBpY29uX2RhdGFiYXNlX2dl
dF9pY29uX3ZhbGlkX2lkbGUoZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICAgIFdlYktpdEljb25E
YXRhYmFzZSogaWNvbl9kYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOworICAg
IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYyhpY29uX2RhdGFiYXNl
LCAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGljb25fZGF0YWJhc2VfZ2V0X2ljb25fdmFsaWRfY2Fs
bGJhY2ssIHVzZXJfZGF0YSk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9pbnZhbGlkX2lkbGUoZ3BvaW50ZXIgdXNlcl9kYXRh
KQoreworICAgIFdlYktpdEljb25EYXRhYmFzZSogaWNvbl9kYXRhYmFzZSA9IHdlYmtpdF9nZXRf
aWNvbl9kYXRhYmFzZSgpOworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1
Zl9hc3luYyhpY29uX2RhdGFiYXNlLCAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnLyIsIE5VTEws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25fZGF0
YWJhc2VfZ2V0X2ljb25faW52YWxpZF9jYWxsYmFjaywgdXNlcl9kYXRhKTsKKyAgICByZXR1cm4g
RkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBpY29uX2RhdGFiYXNlX2dldF9pY29uX2NhbmNl
bGxlZF9pZGxlKGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgICBXZWJLaXRJY29uRGF0YWJhc2Uq
IGljb25fZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKKyAgICBHQ2FuY2Vs
bGFibGUgKmNhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKKyAgICB3ZWJraXRfaWNv
bl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmMoaWNvbl9kYXRhYmFzZSwgImh0dHA6Ly93
d3cuZ29vZ2xlLmNvbSIsIGNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpY29uX2RhdGFiYXNlX2dldF9pY29uX2NhbmNlbGxlZF9jYWxs
YmFjaywgdXNlcl9kYXRhKTsKKyAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChjYW5jZWxsYWJsZSk7
CisgICAgZ19vYmplY3RfdW5yZWYoY2FuY2VsbGFibGUpOworICAgIHJldHVybiBGQUxTRTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9hc3luYyh2
b2lkKQoreworICAgIFdlYktpdEljb25EYXRhYmFzZSogaWNvbl9kYXRhYmFzZSA9IHdlYmtpdF9n
ZXRfaWNvbl9kYXRhYmFzZSgpOworICAgIGdib29sZWFuIGJlZW5fdG9faWNvbl9jYjsKKworICAg
IGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICAvKiBMb2FkIGdvb2ds
ZSB0byBtYWtlIHN1cmUgZmF2aWNvbiBpcyBhZGRlZCB0byBkYXRhYmFzZSAqLworICAgIGxvYWRf
dXJpKCJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIik7CisKKyAgICBiZWVuX3RvX2ljb25fY2IgPSBG
QUxTRTsKKyAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYylpY29uX2RhdGFiYXNlX2dldF9pY29u
X3ZhbGlkX2lkbGUsICZiZWVuX3RvX2ljb25fY2IpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29w
KTsKKyAgICBnX2Fzc2VydChiZWVuX3RvX2ljb25fY2IpOworCisgICAgYmVlbl90b19pY29uX2Ni
ID0gRkFMU0U7CisgICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMpaWNvbl9kYXRhYmFzZV9nZXRf
aWNvbl9pbnZhbGlkX2lkbGUsICZiZWVuX3RvX2ljb25fY2IpOworICAgIGdfbWFpbl9sb29wX3J1
bihsb29wKTsKKyAgICBnX2Fzc2VydChiZWVuX3RvX2ljb25fY2IpOworCisgICAgLyogQ2xvc2Ug
dGhlIGRhdGFiYXNlIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBnZXQgYW4gaWNvbi4gVGhpcyBpcyBu
b3Qgc3VwcG9zZWQgdG8gaGFwcGVuLAorICAgICAqIHNvIHRoYXQgZXJyb3IgaXMgbm90IGhhbmRs
ZWQsIGl0J3MganVzdCB1c2VkIGhlcmUgdG8gbWFrZSBzdXJlIHRoZSBjYWxsYmFjayBpcyBuZXZl
cgorICAgICAqIGNhbGxlZCBzbyB0aGF0IHdlIGNhbiB0ZXN0IGNhbmNlbGxhdGlvbi4KKyAgICAg
Ki8KKyAgICBnY2hhciAqZGJfcGF0aCA9IGdfc3RyZHVwKHdlYmtpdF9pY29uX2RhdGFiYXNlX2dl
dF9wYXRoKGljb25fZGF0YWJhc2UpKTsKKyAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0
aChpY29uX2RhdGFiYXNlLCBOVUxMKTsKKworICAgIGJlZW5fdG9faWNvbl9jYiA9IEZBTFNFOwor
ICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWljb25fZGF0YWJhc2VfZ2V0X2ljb25fY2FuY2Vs
bGVkX2lkbGUsICZiZWVuX3RvX2ljb25fY2IpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsK
KyAgICBnX2Fzc2VydChiZWVuX3RvX2ljb25fY2IpOworCisgICAgd2Via2l0X2ljb25fZGF0YWJh
c2Vfc2V0X3BhdGgoaWNvbl9kYXRhYmFzZSwgZGJfcGF0aCk7CisgICAgZ19mcmVlKGRiX3BhdGgp
OworCisgICAgLyogR2l2ZSBzb21lIHRpbWUgZm9yIHRoZSBkYXRhYmFzZSB0byBsb2FkICovCisg
ICAgZ191c2xlZXAoMTAwMDApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9pY29uX2Rh
dGFiYXNlX2dldF9pY29uX3VyaSh2b2lkKQoreworICAgIFdlYktpdEljb25EYXRhYmFzZSogaWNv
bl9kYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOworICAgIGdjaGFyKiBpY29u
X3VyaSA9IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3VyaShpY29uX2RhdGFiYXNlLCAi
aHR0cDovL3d3dy5nb29nbGUuY29tLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uX3VyaSwg
PT0sICJodHRwOi8vd3d3Lmdvb2dsZS5lcy9mYXZpY29uLmljbyIpOworICAgIGdfZnJlZShpY29u
X3VyaSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2ljb25fZGF0YWJhc2VfcmVtb3Zl
X2FsbCh2b2lkKQoreworICAgIFdlYktpdEljb25EYXRhYmFzZSogaWNvbl9kYXRhYmFzZSA9IHdl
YmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX2NsZWFy
KGljb25fZGF0YWJhc2UpOworICAgIGdjaGFyKiBpY29uX3VyaSA9IHdlYmtpdF9pY29uX2RhdGFi
YXNlX2dldF9pY29uX3VyaShpY29uX2RhdGFiYXNlLCAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIp
OworICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uX3VyaSwgPT0sICIiKTsKKyAgICBnX2ZyZWUoaWNv
bl91cmkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9pY29uX2RhdGFiYXNlX2Nsb3Nl
X2RiKHZvaWQpCit7CisgICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBpY29uX2RhdGFiYXNlID0gd2Vi
a2l0X2dldF9pY29uX2RhdGFiYXNlKCk7CisgICAgZ2NoYXIgKmRiX3BhdGggPSBnX3N0cmR1cCh3
ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0aChpY29uX2RhdGFiYXNlKSk7CisgICAgd2Via2l0
X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgoaWNvbl9kYXRhYmFzZSwgTlVMTCk7CisgICAgZGVsZXRl
X2RiX2ZpbGVfaWZfZXhpc3RzKGRiX3BhdGgpOworICAgIGdfZnJlZShkYl9wYXRoKTsKK30KKwor
aW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGdfdGhyZWFkX2luaXQoTlVM
TCk7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0
X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi93ZWJraXQvaWNvbmRhdGFiYXNlL3NldC1wYXRoIiwgdGVzdF93ZWJraXRfaWNvbl9kYXRh
YmFzZV9zZXRfcGF0aCk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2ljb25kYXRhYmFz
ZS9pY29uLWFzeW5jIiwgdGVzdF93ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9hc3luYyk7
CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2ljb25kYXRhYmFzZS9pY29uLXVyaSIsIHRl
c3Rfd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpKTsKKyAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi93ZWJraXQvaWNvbmRhdGFiYXNlL3JlbW92ZS1hbGwiLCB0ZXN0X3dlYmtpdF9pY29uX2Rh
dGFiYXNlX3JlbW92ZV9hbGwpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9pY29uZGF0
YWJhc2UvY2xvc2UtZGIiLCB0ZXN0X3dlYmtpdF9pY29uX2RhdGFiYXNlX2Nsb3NlX2RiKTsKKwor
ICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9CisjZWxzZQoraW50IG1haW4oaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KQoreworICAgIGdfY3JpdGljYWwoIllvdSB3aWxsIG5lZWQgZ3RrLTIuMTQuMCB0
byBydW4gdGhlIHVuaXQgdGVzdHMuIERvaW5nIG5vdGhpbmcgbm93LiIpOworICAgIHJldHVybiAw
OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRpY29uZGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25k
YXRhYmFzZS5jcHAKaW5kZXggMzgzYjA4MS4uMzU4MTJlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNp
bmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJ3ZWJraXRn
bG9iYWxzcHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFzZXByaXZhdGUuaCIK
ICNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCiAjaW5jbHVkZSAid2Via2l0c2VjdXJpdHlvcmln
aW5wcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0d2ViZnJhbWUuaCIKQEAgLTc3LDEwICs3OCwx
MyBAQCBlbnVtIHsKIAogc3RhdGljIGd1aW50IHdlYmtpdF9pY29uX2RhdGFiYXNlX3NpZ25hbHNb
TEFTVF9TSUdOQUxdID0geyAwLCB9OwogCi1HX0RFRklORV9UWVBFKFdlYktpdEljb25EYXRhYmFz
ZSwgd2Via2l0X2ljb25fZGF0YWJhc2UsIEdfVFlQRV9PQkpFQ1QpOworR19ERUZJTkVfVFlQRShX
ZWJLaXRJY29uRGF0YWJhc2UsIHdlYmtpdF9pY29uX2RhdGFiYXNlLCBHX1RZUEVfT0JKRUNUKQog
CiBzdHJ1Y3QgX1dlYktpdEljb25EYXRhYmFzZVByaXZhdGUgewogICAgIEdPd25QdHI8Z2NoYXI+
IHBhdGg7CisgICAgSWNvbkRhdGFiYXNlQ2xpZW50R3RrIGljb25EYXRhYmFzZUNsaWVudDsKKyAg
ICBHTGlzdCogcGVuZGluZ0ljb25zOworICAgIGdib29sZWFuIGltcG9ydEZpbmlzaGVkOwogfTsK
IAogc3RhdGljIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2VfZmluYWxpemUoR09iamVjdCogb2Jq
ZWN0KQpAQCAtMjI1LDE2ICsyMjksMjIgQEAgdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRf
cGF0aChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBnY2hhciogcGEKICAgICBp
ZiAoZGF0YWJhc2UtPnByaXYtPnBhdGguZ2V0KCkpCiAgICAgICAgIFdlYkNvcmU6Omljb25EYXRh
YmFzZSgpLmNsb3NlKCk7CiAKKyAgICBkYXRhYmFzZS0+cHJpdi0+aW1wb3J0RmluaXNoZWQgPSBG
QUxTRTsKICAgICBpZiAoIShwYXRoICYmIHBhdGhbMF0pKSB7CiAgICAgICAgIGRhdGFiYXNlLT5w
cml2LT5wYXRoLnNldCgwKTsKICAgICAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc2V0RW5h
YmxlZChmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBkYXRhYmFzZS0+cHJp
di0+cGF0aC5zZXQoZ19zdHJkdXAocGF0aCkpOwotCisgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNl
KCkuc2V0Q2xpZW50KCZkYXRhYmFzZS0+cHJpdi0+aWNvbkRhdGFiYXNlQ2xpZW50KTsKKyAgICBX
ZWJDb3JlOjpJY29uRGF0YWJhc2U6OmRlbGF5RGF0YWJhc2VDbGVhbnVwKCk7CiAgICAgV2ViQ29y
ZTo6aWNvbkRhdGFiYXNlKCkuc2V0RW5hYmxlZCh0cnVlKTsKLSAgICBXZWJDb3JlOjppY29uRGF0
YWJhc2UoKS5vcGVuKFdlYkNvcmU6OmZpbGVuYW1lVG9TdHJpbmcoZGF0YWJhc2UtPnByaXYtPnBh
dGguZ2V0KCkpLCBXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmRlZmF1bHREYXRhYmFzZUZpbGVuYW1l
KCkpOworICAgIGlmICghV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkub3BlbihXZWJDb3JlOjpmaWxl
bmFtZVRvU3RyaW5nKHBhdGgpLCBXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmRlZmF1bHREYXRhYmFz
ZUZpbGVuYW1lKCkpKSB7CisgICAgICAgIFdlYkNvcmU6Okljb25EYXRhYmFzZTo6YWxsb3dEYXRh
YmFzZUNsZWFudXAoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRhdGFiYXNlLT5w
cml2LT5wYXRoLnNldChnX3N0cmR1cChwYXRoKSk7CiAKICAgICBzdGF0aWMgYm9vbCBpbml0aWFs
aXplZCA9IGZhbHNlOwogICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKQEAgLTI2NCwyMiArMjc0LDMy
IEBAIGdjaGFyKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmkoV2ViS2l0SWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoCiAgICAgcmV0dXJuIGdfc3RyZHVwKFdlYkNvcmU6
Omljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwocGFnZVVSTCkudXRm
OCgpLmRhdGEoKSk7CiB9CiAKK3N0YXRpYyBHZGtQaXhidWYqIGdldF9pY29uX3BpeGJ1ZihXZWJL
aXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7CisgICAg
Ly8gVGhlIGV4YWN0IHNpemUgd2UgcGFzcyBpcyBpcnJlbGV2YW50IHRvIHRoZSBXZWJDb3JlOjpp
Y29uRGF0YWJhc2UgY29kZS4KKyAgICAvLyBXZSBtdXN0IHBhc3Mgc29tZXRoaW5nIGdyZWF0ZXIg
dGhhbiAwLCAwIHRvIGdldCBhIHBpeGJ1Zi4KKyAgICBXZWJDb3JlOjpJbWFnZSogaWNvbiA9IFdl
YkNvcmU6Omljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwocGFnZVVSTCwg
V2ViQ29yZTo6SW50U2l6ZSgxNiwgMTYpKTsKKyAgICByZXR1cm4gaWNvbiA/IGljb24tPmdldEdk
a1BpeGJ1ZigpIDogMDsKK30KKwogLyoqCiAgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl9waXhidWY6CiAgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQogICogQHBhZ2Vf
dXJpOiBVUkkgb2YgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbgogICoKLSAqIE9idGFpbnMg
YSAjR2RrUGl4YnVmIG9mIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZSBVUkksIG9yCi0g
KiBhIGRlZmF1bHQgaWNvbiBpZiB0aGVyZSBpcyBubyBpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZS4g
VXNlCisgKiBPYnRhaW5zIGEgI0dka1BpeGJ1ZiBvZiB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVu
IHBhZ2UgVVJJLCBvciAlTlVMTAorICogaWYgdGhlcmUgaXMgbm8gaWNvbiBmb3IgdGhlIGdpdmVu
IHBhZ2Ugb3IgaXQgaGFzbid0IGJlZW4gbG9hZGVkIHlldC4gVXNlCiAgKiB3ZWJraXRfaWNvbl9k
YXRhYmFzZV9nZXRfaWNvbl91cmkoKSBpZiB5b3UgbmVlZCB0byBkaXN0aW5ndWlzaCB0aGVzZSBj
YXNlcy4KLSAqIFVzdWFsbHkgeW91IHdhbnQgdG8gY29ubmVjdCB0byBXZWJLaXRJY29uRGF0YWJh
c2U6Omljb24tbG9hZGVkIGFuZCBjYWxsIHRoaXMKLSAqIG1ldGhvZCBpbiB0aGUgY2FsbGJhY2su
CisgKiBUbyBtYWtlIHN1cmUgdGhpcyBtZXRob2QgcmV0dXJuIHdpbGwgcmV0dXJuIGEgdmFsaWQg
aWNvbiwgd2hlbiB0aGUgZ2l2ZW4gVVJJCisgKiBoYXMgb25lLCB5b3Ugc2hvdWxkIGNvbm5lY3Qg
dG8gV2ViS2l0SWNvbkRhdGFiYXNlOjppY29uLWxvYWRlZCBhbmQgY2FsbCB0aGlzCisgKiBtZXRo
b2QgaW4gdGhlIGNhbGxiYWNrLiBTZWUgYWxzbyB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl9waXhidWZfYXN5bmMoKS4KICAqCiAgKiBUaGUgcGl4YnVmIHdpbGwgaGF2ZSB0aGUgbGFyZ2Vz
dCBzaXplIHByb3ZpZGVkIGJ5IHRoZSBzZXJ2ZXIgYW5kIHNob3VsZAogICogYmUgcmVzaXplZCBi
ZWZvcmUgaXQgaXMgZGlzcGxheWVkLgogICogU2VlIGFsc28gd2Via2l0X3dlYl92aWV3X2dldF9p
Y29uX3BpeGJ1ZigpLgogICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgcmVm
ZXJlbmNlIHRvIGEgI0dka1BpeGJ1Ziwgb3IgJU5VTEwKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBm
dWxsKTogYSBuZXcgcmVmZXJlbmNlIHRvIGEgI0dka1BpeGJ1Ziwgb3IgJU5VTEwgaWYgdGhlIGdp
dmVuCisgKiBVUkkgZG9lc24ndCBoYXZlIGFuIGljb24gb3IgaXQgaGFzbid0IGJlZW4gbG9hZGVk
IHlldC4KICAqCiAgKiBTaW5jZTogMS4zLjEzCiAgKiovCkBAIC0yODksMTUgKzMwOSwxOTMgQEAg
R2RrUGl4YnVmKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoV2ViS2l0SWNv
bkRhdGFiYXNlKiBkYXRhYmFzZSwgY28KICAgICBnX3JldHVybl92YWxfaWZfZmFpbChwYWdlVVJJ
LCAwKTsKIAogICAgIFN0cmluZyBwYWdlVVJMID0gU3RyaW5nOjpmcm9tVVRGOChwYWdlVVJJKTsK
LSAgICAvLyBUaGUgZXhhY3Qgc2l6ZSB3ZSBwYXNzIGlzIGlycmVsZXZhbnQgdG8gdGhlIFdlYkNv
cmU6Omljb25EYXRhYmFzZSBjb2RlLgotICAgIC8vIFdlIG11c3QgcGFzcyBzb21ldGhpbmcgZ3Jl
YXRlciB0aGFuIDAsIDAgdG8gZ2V0IGEgcGl4YnVmLgotICAgIFdlYkNvcmU6OkltYWdlKiBpY29u
ID0gV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNJY29uRm9yUGFnZVVSTChwYWdl
VVJMLCBXZWJDb3JlOjpJbnRTaXplKDE2LCAxNikpOwotICAgIGlmICghaWNvbikKKyAgICByZXR1
cm4gZ2V0X2ljb25fcGl4YnVmKGRhdGFiYXNlLCBwYWdlVVJMKTsKK30KKworc3RhdGljIGdib29s
ZWFuIGdldF9pY29uX3BpeGJ1Zl9jYW5jZWxsZWRfaWRsZShncG9pbnRlciB1c2VyRGF0YSkKK3sK
KyAgICBQZW5kaW5nSWNvblJlcXVlc3QqIHJlcXVlc3QgPSBzdGF0aWNfY2FzdDxQZW5kaW5nSWNv
blJlcXVlc3QqPih1c2VyRGF0YSk7CisKKyAgICBXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNl
ID0gd2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCk7CisgICAgR0xpc3QqIGljb25zID0gZGF0YWJh
c2UtPnByaXYtPnBlbmRpbmdJY29uczsKKyAgICB3aGlsZSAoaWNvbnMpIHsKKyAgICAgICAgR0xp
c3QqIG5leHQgPSBnX2xpc3RfbmV4dChpY29ucyk7CisKKyAgICAgICAgaWYgKHJlcXVlc3QgPT0g
aWNvbnMtPmRhdGEpIHsKKyAgICAgICAgICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogcmVzdWx0ID0g
cmVxdWVzdC0+YXN5bmNSZXN1bHQoKTsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQpOworICAg
ICAgICAgICAgZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29ucyA9IGdfbGlzdF9yZW1vdmVfbGlu
ayhkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25zLCBpY29ucyk7CisgICAgICAgICAgICBnX3Np
bXBsZV9hc3luY19yZXN1bHRfc2V0X2Vycm9yKHJlc3VsdCwgR19JT19FUlJPUiwgR19JT19FUlJP
Ul9DQU5DRUxMRUQsICIlcyIsICJPcGVyYXRpb24gd2FzIGNhbmNlbGxlZCIpOworICAgICAgICAg
ICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlKHJlc3VsdCk7CisgICAgICAgICAgICBk
ZWxldGUgcmVxdWVzdDsKKyAgICAgICAgICAgIGdfbGlzdF9mcmVlKGljb25zKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWNvbnMgPSBuZXh0OworICAgIH0KKwor
ICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2Vf
Z2V0X2ljb25fcGl4YnVmX2NhbmNlbGxlZChHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBQZW5k
aW5nSWNvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgLyogSGFuZGxlIGNhbmNlbGxlZCBpbiBh
IGluIGlkbGUgc2luY2UgaXQgbWlnaHQgYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZCAqLworICAg
IGdfaWRsZV9hZGQoZ2V0X2ljb25fcGl4YnVmX2NhbmNlbGxlZF9pZGxlLCByZXF1ZXN0KTsKK30K
KworLyoqCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmM6Cisg
KiBAZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQorICogQHBhZ2VfdXJpOiBVUkkgb2Yg
dGhlIHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbgorICogQGNhbmNlbGxhYmxlOiBBICNHQ2FuY2Vs
bGFibGUgb3IgJU5VTEwuCisgKiBAY2FsbGJhY2s6IChhbGxvdy1ub25lKTogQSAjR0FzeW5jUmVh
ZHlDYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMKKyAqICAgICAgICAgICAgc2F0
aXNmaWVkIG9yICVOVUxMIGlmIHlvdSBkb24ndCBjYXJlIGFib3V0IHRoZSByZXN1bHQuCisgKiBA
dXNlcl9kYXRhOiBUaGUgZGF0YSB0byBwYXNzIHRvIEBjYWxsYmFjay4KKyAqCisgKiBBc3luY2hy
b25vdXNseSBvYnRhaW5zIGEgI0dka1BpeGJ1ZiBvZiB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVu
IHBhZ2UgVVJJLgorICoKKyAqIFRoaXMgaXMgYW4gYXN5bmNocm9ub3VzIG1ldGhvZC4gV2hlbiB0
aGUgb3BlcmF0aW9uIGlzIGZpbmlzaGVkLCBjYWxsYmFjayB3aWxsCisgKiBiZSBpbnZva2VkLiBZ
b3UgY2FuIHRoZW4gY2FsbCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfZmlu
aXNoKCkKKyAqIHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKiBTZWUgYWxz
byB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoKS4KKyAqCisgKiBTaW5jZTog
MS41LjIKKyAqKi8KK3ZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2Fz
eW5jKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGdjaGFyKiBwYWdlVVJJLCBH
Q2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywg
Z3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfSUNP
Tl9EQVRBQkFTRShkYXRhYmFzZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwocGFnZVVSSSk7CisK
KyAgICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gcmVzdWx0ID0gYWRvcHRHUmVmKGdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9uZXcoR19PQkpFQ1QoZGF0YWJhc2UpLCBjYWxsYmFjaywgdXNlckRh
dGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KHdlYmtp
dF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYykpKTsKKworICAgIFBlbmRpbmdJ
Y29uUmVxdWVzdCogcmVxdWVzdCA9IG5ldyBQZW5kaW5nSWNvblJlcXVlc3QocGFnZVVSSSwgcmVz
dWx0LmdldCgpKTsKKyAgICBpZiAoY2FuY2VsbGFibGUpIHsKKyAgICAgICAgcmVxdWVzdC0+bV9j
YW5jZWxsYWJsZSA9IGNhbmNlbGxhYmxlOworICAgICAgICByZXF1ZXN0LT5tX2NhbmNlbGxlZF9p
ZCA9IGdfY2FuY2VsbGFibGVfY29ubmVjdChjYW5jZWxsYWJsZSwgR19DQUxMQkFDSyh3ZWJraXRf
aWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfY2FuY2VsbGVkKSwgcmVxdWVzdCwgMCk7Cisg
ICAgICAgIGdfb2JqZWN0X3NldF9kYXRhX2Z1bGwoR19PQkpFQ1QocmVzdWx0LmdldCgpKSwgImNh
bmNlbGxhYmxlIiwgZ19vYmplY3RfcmVmKGNhbmNlbGxhYmxlKSwgc3RhdGljX2Nhc3Q8R0Rlc3Ry
b3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSk7CisgICAgfQorCisgICAgLy8gUmVnaXN0ZXIgaWNv
biByZXF1ZXN0IGJlZm9yZSBhc2tpbmcgZm9yIHRoZSBpY29uIHRvIGF2b2lkIHJhY2UgY29uZGl0
aW9ucy4KKyAgICBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25zID0gZ19saXN0X3ByZXBlbmQo
ZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29ucywgcmVxdWVzdCk7CisgICAgU3RyaW5nIHBhZ2VV
UkwgPSBTdHJpbmc6OmZyb21VVEY4KHBhZ2VVUkkpOworICAgIEdka1BpeGJ1ZiogcGl4YnVmID0g
Z2V0X2ljb25fcGl4YnVmKGRhdGFiYXNlLCBwYWdlVVJMKTsKKyAgICBpZiAoIXBpeGJ1ZiAmJiAh
ZGF0YWJhc2UtPnByaXYtPmltcG9ydEZpbmlzaGVkKSB7CisgICAgICAgIC8qIEltcG9ydCBpcyBv
bmdvaW5nLCB0aGVyZSBtaWdodCBiZSBhbiBpY29uICovCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlcihyZXN1bHQu
Z2V0KCksIHBpeGJ1ZiwgMCk7CisgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlKHJl
c3VsdC5nZXQoKSk7CisKKyAgICBBU1NFUlQoZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29ucy0+
ZGF0YSA9PSByZXF1ZXN0KTsKKyAgICBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25zID0gZ19s
aXN0X2RlbGV0ZV9saW5rKGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvbnMsIGRhdGFiYXNlLT5w
cml2LT5wZW5kaW5nSWNvbnMpOworICAgIGRlbGV0ZSByZXF1ZXN0OworfQorCisvKioKKyAqIHdl
YmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5pc2g6CisgKiBAZGF0YWJhc2U6
IGEgI1dlYktpdEljb25EYXRhYmFzZQorICogQHJlc3VsdDogQSAjR0FzeW5jUmVzdWx0IG9idGFp
bmVkIGZyb20gdGhlICNHQXN5bmNSZWFkeUNhbGxiYWNrIHBhc3NlZCB0byB3ZWJraXRfaWNvbl9k
YXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmMoKQorICogQGVycm9yOiBSZXR1cm4gbG9jYXRp
b24gZm9yIGVycm9yIG9yICVOVUxMLgorICoKKyAqIEZpbmlzaGVzIGFuIG9wZXJhdGlvbiBzdGFy
dGVkIHdpdGggd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2FzeW5jKCkuCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyByZWZlcmVuY2UgdG8gYSAjR2Rr
UGl4YnVmLCBvciAlTlVMTC4KKyAqCisgKiBTaW5jZTogMS41LjIKKyAqLworR2RrUGl4YnVmKiB3
ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfZmluaXNoKFdlYktpdEljb25EYXRh
YmFzZSogZGF0YWJhc2UsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBHRXJyb3IqKiBlcnJvcikKK3sK
KyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIHNpbXBsZVJlc3VsdCA9IEdfU0lNUExFX0FTWU5DX1JF
U1VMVChyZXN1bHQpOworICAgIGdfd2Fybl9pZl9mYWlsKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9n
ZXRfc291cmNlX3RhZyhzaW1wbGVSZXN1bHQpID09IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9p
Y29uX3BpeGJ1Zl9hc3luYyk7CisKKyAgICBpZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Byb3Bh
Z2F0ZV9lcnJvcihzaW1wbGVSZXN1bHQsIGVycm9yKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
R2RrUGl4YnVmKiBwaXhidWYgPSBpY29uLT5nZXRHZGtQaXhidWYoKTsKLSAgICBpZiAoIXBpeGJ1
ZikKKworICAgIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUgPSBzdGF0aWNfY2FzdDxHQ2FuY2Vs
bGFibGUqPihnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChzaW1wbGVSZXN1bHQpLCAiY2FuY2Vs
bGFibGUiKSk7CisgICAgaWYgKGNhbmNlbGxhYmxlICYmIGdfY2FuY2VsbGFibGVfaXNfY2FuY2Vs
bGVkKGNhbmNlbGxhYmxlKSkgeworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBH
X0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCwgIk9wZXJhdGlvbiB3YXMgY2FuY2VsbGVk
Iik7CiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxHZGtQaXhidWYq
PihnX29iamVjdF9yZWYocGl4YnVmKSk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEdka1BpeGJ1Zio+KGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dwb2ludGVyKHNp
bXBsZVJlc3VsdCkpOworfQorCit2b2lkIF93ZWJraXRfaWNvbl9kYXRhYmFzZV9wcm9jZXNzX3Bl
bmRpbmdfaWNvbnNfZm9yX3VyaShXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBT
dHJpbmcmIHBhZ2VVUkkpCit7CisgICAgR0xpc3QqIGljb25zID0gZGF0YWJhc2UtPnByaXYtPnBl
bmRpbmdJY29uczsKKyAgICB3aGlsZSAoaWNvbnMpIHsKKyAgICAgICAgR0xpc3QqIG5leHQgPSBn
X2xpc3RfbmV4dChpY29ucyk7CisKKyAgICAgICAgUGVuZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0
ID0gc3RhdGljX2Nhc3Q8UGVuZGluZ0ljb25SZXF1ZXN0Kj4oaWNvbnMtPmRhdGEpOworICAgICAg
ICBpZiAocmVxdWVzdC0+cGFnZVVSSSgpID09IHBhZ2VVUkkpIHsKKyAgICAgICAgICAgIGRhdGFi
YXNlLT5wcml2LT5wZW5kaW5nSWNvbnMgPSBnX2xpc3RfcmVtb3ZlX2xpbmsoZGF0YWJhc2UtPnBy
aXYtPnBlbmRpbmdJY29ucywgaWNvbnMpOworICAgICAgICAgICAgaWYgKHJlcXVlc3QtPmZyYW1l
TG9hZGVyQ2xpZW50KCkpCisgICAgICAgICAgICAgICAgcmVxdWVzdC0+ZnJhbWVMb2FkZXJDbGll
bnQoKS0+ZGlzcGF0Y2hEaWRSZWNlaXZlSWNvbigpOworICAgICAgICAgICAgZWxzZSBpZiAocmVx
dWVzdC0+YXN5bmNSZXN1bHQoKSkgeworICAgICAgICAgICAgICAgIEdTaW1wbGVBc3luY1Jlc3Vs
dCogcmVzdWx0ID0gcmVxdWVzdC0+YXN5bmNSZXN1bHQoKTsKKyAgICAgICAgICAgICAgICBnX3Np
bXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlcihyZXN1bHQsIGdldF9pY29uX3Bp
eGJ1ZihkYXRhYmFzZSwgcGFnZVVSSSksIDApOworICAgICAgICAgICAgICAgIGdfc2ltcGxlX2Fz
eW5jX3Jlc3VsdF9jb21wbGV0ZShyZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZGVsZXRlIHJlcXVlc3Q7CisgICAgICAgICAgICBnX2xpc3RfZnJlZShpY29ucyk7CisgICAgICAg
IH0KKworICAgICAgICBpY29ucyA9IG5leHQ7CisgICAgfQorfQorCit2b2lkIF93ZWJraXRfaWNv
bl9kYXRhYmFzZV9yZWdpc3Rlcl9mb3JfaWNvbl9ub3RpZmljYXRpb24oV2ViS2l0SWNvbkRhdGFi
YXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkksIFdlYkNvcmU6OkZyYW1lTG9hZGVy
Q2xpZW50KiBjbGllbnQpCit7CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0ID0gbmV3
IFBlbmRpbmdJY29uUmVxdWVzdChwYWdlVVJJLCBjbGllbnQpOworICAgIGRhdGFiYXNlLT5wcml2
LT5wZW5kaW5nSWNvbnMgPSBnX2xpc3RfcHJlcGVuZChkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0lj
b25zLCByZXF1ZXN0KTsKK30KKwordm9pZCBfd2Via2l0X2ljb25fZGF0YWJhc2VfdW5yZWdpc3Rl
cl9mb3JfaWNvbl9ub3RpZmljYXRpb24oV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29u
c3QgZ2NoYXIqIHBhZ2VVUkksIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50KiBjbGllbnQpCit7
CisgICAgR0xpc3QqIGljb25zID0gZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uczsKKyAgICB3
aGlsZSAoaWNvbnMpIHsKKyAgICAgICAgR0xpc3QqIG5leHQgPSBnX2xpc3RfbmV4dChpY29ucyk7
CisKKyAgICAgICAgUGVuZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0ID0gc3RhdGljX2Nhc3Q8UGVu
ZGluZ0ljb25SZXF1ZXN0Kj4oaWNvbnMtPmRhdGEpOworICAgICAgICBpZiAocmVxdWVzdC0+cGFn
ZVVSSSgpID09IHBhZ2VVUkkgJiYgcmVxdWVzdC0+ZnJhbWVMb2FkZXJDbGllbnQoKSA9PSBjbGll
bnQpIHsKKyAgICAgICAgICAgIGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvbnMgPSBnX2xpc3Rf
cmVtb3ZlX2xpbmsoZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29ucywgaWNvbnMpOworICAgICAg
ICAgICAgZGVsZXRlIHJlcXVlc3Q7CisgICAgICAgICAgICBnX2xpc3RfZnJlZShpY29ucyk7Cisg
ICAgICAgIH0KKworICAgICAgICBpY29ucyA9IG5leHQ7CisgICAgfQorfQorCit2b2lkIF93ZWJr
aXRfaWNvbl9kYXRhYmFzZV9pbXBvcnRfZmluaXNoZWQoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRh
YmFzZSkKK3sKKyAgICBkYXRhYmFzZS0+cHJpdi0+aW1wb3J0RmluaXNoZWQgPSBUUlVFOworCisg
ICAgLy8gSW1wb3J0IGlzIGNvbXBsZXRlLCBwcm9jZXNzIHBlbmRpbmcgcmVxdWVzdHMgZm9yIHBh
Z2VzIHRoYXQgYXJlIG5vdCBpbiB0aGUgZGF0YWJhc2UsCisgICAgLy8gc2luY2UgZGlkSW1wb3J0
SWNvbkRhdGFGb3JQYWdlVVJMKCkgd2lsbCBuZXZlciBiZSBjYWxsZWQgZm9yIHRoZW0uCisgICAg
Ly8gRm9yIGFzeW5jIHJlcXVlc3RzIHdlIG5lZWQgdG8gY29tcGxldGUgdGhlIG9wZXJhdGlvbiwg
d2hpbGUgZm9yIGZyYW1lIGxvYWRlcgorICAgIC8vIHJlcXVlc3RzIHdlIG9ubHkgbmVlZCB0byBk
ZWxldGUgdGhlIHJlcXVlc3Qgc28gdGhhdCBpY29uLWxvYWRlZCB3b24ndCBiZSBlbWl0dGVkLgor
ICAgIEdMaXN0KiBpY29ucyA9IGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvbnM7CisgICAgd2hp
bGUgKGljb25zKSB7CisgICAgICAgIEdMaXN0KiBuZXh0ID0gZ19saXN0X25leHQoaWNvbnMpOwor
CisgICAgICAgIFBlbmRpbmdJY29uUmVxdWVzdCogcmVxdWVzdCA9IHN0YXRpY19jYXN0PFBlbmRp
bmdJY29uUmVxdWVzdCo+KGljb25zLT5kYXRhKTsKKyAgICAgICAgU3RyaW5nIGljb25VUkwgPSBX
ZWJDb3JlOjppY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKHJlcXVl
c3QtPnBhZ2VVUkkoKSk7CisgICAgICAgIGlmIChpY29uVVJMLmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29ucyA9IGdfbGlzdF9yZW1vdmVfbGluayhk
YXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25zLCBpY29ucyk7CisgICAgICAgICAgICBHU2ltcGxl
QXN5bmNSZXN1bHQqIHJlc3VsdCA9IHJlcXVlc3QtPmFzeW5jUmVzdWx0KCk7CisgICAgICAgICAg
ICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Nl
dF9vcF9yZXNfZ3BvaW50ZXIocmVzdWx0LCAwLCAwKTsKKyAgICAgICAgICAgICAgICBnX3NpbXBs
ZV9hc3luY19yZXN1bHRfY29tcGxldGUocmVzdWx0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGRlbGV0ZSByZXF1ZXN0OworICAgICAgICAgICAgZ19saXN0X2ZyZWUoaWNvbnMpOworICAg
ICAgICB9CisgICAgICAgIGljb25zID0gbmV4dDsKKyAgICB9CiB9CiAKIC8qKgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oIGIvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oCmluZGV4IDVlYWQ2MDMuLjVi
Y2QyMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0
YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNl
LmgKQEAgLTUzLDI1ICs1MywzNyBAQCBzdHJ1Y3QgX1dlYktpdEljb25EYXRhYmFzZUNsYXNzIHsK
IH07CiAKIFdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF90eXBlICAg
ICAgICAgICAgKHZvaWQpOword2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3R5cGUgICAgICAgICAg
ICAgICh2b2lkKTsKIAogV0VCS0lUX0FQSSBjb25zdCBnY2hhcioKLXdlYmtpdF9pY29uX2RhdGFi
YXNlX2dldF9wYXRoICAgICAgICAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpOwor
d2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3BhdGggICAgICAgICAgICAgIChXZWJLaXRJY29uRGF0
YWJhc2UqIGRhdGFiYXNlKTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfaWNvbl9kYXRhYmFz
ZV9zZXRfcGF0aCAgICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAg
ICBwYXRoKTsKK3dlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoICAgICAgICAgICAgICAoV2Vi
S2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAgICBwYXRoKTsKIAogV0VCS0lUX0FQSSBn
Y2hhcioKLXdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3VyaSAgICAgICAgKFdlYktpdElj
b25EYXRhYmFzZSogZGF0YWJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhZ2VfdXJpKTsKK3dlYmtpdF9pY29uX2RhdGFi
YXNlX2dldF9pY29uX3VyaSAgICAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIq
ICAgICAgICBwYWdlX3VyaSk7CiAKIFdFQktJVF9BUEkgR2RrUGl4YnVmKgotd2Via2l0X2ljb25f
ZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFy
KiAgICAgICAgcGFnZV91cmkpOword2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVm
ICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhZ2VfdXJpKTsK
IAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhciAgICAgICAgICAg
ICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKTsKK3dlYmtpdF9pY29uX2RhdGFiYXNl
X2dldF9pY29uX3BpeGJ1Zl9hc3luYyAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAg
ICAgICBwYWdlX3VyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0NhbmNlbGxhYmxlKiAgICAgICBjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAg
ICAgICB1c2VyX2RhdGEpOworCitXRUJLSVRfQVBJIEdka1BpeGJ1ZioKK3dlYmtpdF9pY29uX2Rh
dGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5pc2goV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVz
dWx0KiAgICAgICByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdFcnJvcioqICAgICAgICAgICAgZXJyb3IpOworCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9pY29uX2RhdGFiYXNlX2NsZWFyICAgICAgICAgICAgICAgICAoV2ViS2l0SWNvbkRhdGFi
YXNlKiBkYXRhYmFzZSk7CiAKIEdfRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmRlNDgwNTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlcHJpdmF0ZS5oCkBAIC0wLDAgKzEsOTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXRp
Y29uZGF0YWJhc2Vwcml2YXRlX2gKKyNkZWZpbmUgd2Via2l0aWNvbmRhdGFiYXNlcHJpdmF0ZV9o
CisKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIkdSZWZQdHIuaCIK
KyNpbmNsdWRlICJJY29uRGF0YWJhc2VDbGllbnQuaCIKKyNpbmNsdWRlICJ3ZWJraXRnbG9iYWxz
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEZyYW1lTG9hZGVyQ2xpZW50OworY2xh
c3MgSWNvbkRhdGFiYXNlQ2xpZW50OworfQorCitleHRlcm4gIkMiIHsKK3ZvaWQgX3dlYmtpdF9p
Y29uX2RhdGFiYXNlX3JlZ2lzdGVyX2Zvcl9pY29uX25vdGlmaWNhdGlvbihXZWJLaXRJY29uRGF0
YWJhc2UqLCBjb25zdCBnY2hhciogcGFnZVVSSSwgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQq
KTsKK3ZvaWQgX3dlYmtpdF9pY29uX2RhdGFiYXNlX3VucmVnaXN0ZXJfZm9yX2ljb25fbm90aWZp
Y2F0aW9uKFdlYktpdEljb25EYXRhYmFzZSosIGNvbnN0IGdjaGFyKiBwYWdlVVJJLCBXZWJDb3Jl
OjpGcmFtZUxvYWRlckNsaWVudCopOwordm9pZCBfd2Via2l0X2ljb25fZGF0YWJhc2VfcHJvY2Vz
c19wZW5kaW5nX2ljb25zX2Zvcl91cmkoV2ViS2l0SWNvbkRhdGFiYXNlKiwgY29uc3QgU3RyaW5n
JiBwYWdlVVJJKTsKK3ZvaWQgX3dlYmtpdF9pY29uX2RhdGFiYXNlX2ltcG9ydF9maW5pc2hlZChX
ZWJLaXRJY29uRGF0YWJhc2UqKTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIElj
b25EYXRhYmFzZUNsaWVudEd0ayA6IHB1YmxpYyBXZWJDb3JlOjpJY29uRGF0YWJhc2VDbGllbnQg
eworICAgIHB1YmxpYzoKKyAgICAvLyBJY29uRGF0YWJhc2VDbGllbnQgaW50ZXJmYWNlCisgICAg
dmlydHVhbCBib29sIHBlcmZvcm1JbXBvcnQoKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVh
bCB2b2lkIGRpZFJlbW92ZUFsbEljb25zKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBkaWRJbXBv
cnRJY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKSB7IH07CisgICAgdmlydHVhbCB2b2lk
IGRpZEltcG9ydEljb25EYXRhRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIFVSTCkKKyAgICB7Cisg
ICAgICAgIF93ZWJraXRfaWNvbl9kYXRhYmFzZV9wcm9jZXNzX3BlbmRpbmdfaWNvbnNfZm9yX3Vy
aSh3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKSwgVVJMKTsKKyAgICB9CisgICAgdmlydHVhbCB2
b2lkIGRpZENoYW5nZUljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpIHsgfTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkRmluaXNoVVJMSW1wb3J0KCkgeyBfd2Via2l0X2ljb25fZGF0YWJhc2VfaW1w
b3J0X2ZpbmlzaGVkKHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpKTsgfQorfTsKKworc3RydWN0
IFBlbmRpbmdJY29uUmVxdWVzdCB7CitwdWJsaWM6CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0KGNv
bnN0IGNoYXIqIHBhZ2VVUkksIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50KiBmcmFtZUxvYWRl
ckNsaWVudCkKKyAgICAgICAgOiBtX3BhZ2VVUkkocGFnZVVSSSkKKyAgICAgICAgLCBtX2ZyYW1l
TG9hZGVyQ2xpZW50KGZyYW1lTG9hZGVyQ2xpZW50KQorICAgICAgICAsIG1fYXN5bmNSZXN1bHQo
MCkKKyAgICB7CisgICAgfQorCisgICAgUGVuZGluZ0ljb25SZXF1ZXN0KGNvbnN0IGNoYXIqIHBh
Z2VVUkksIEdTaW1wbGVBc3luY1Jlc3VsdCogcmVzdWx0KQorICAgICAgICA6IG1fcGFnZVVSSShw
YWdlVVJJKQorICAgICAgICAsIG1fZnJhbWVMb2FkZXJDbGllbnQoMCkKKyAgICAgICAgLCBtX2Fz
eW5jUmVzdWx0KHJlc3VsdCkKKyAgICB7CisgICAgfQorCisgICAgflBlbmRpbmdJY29uUmVxdWVz
dCgpCisgICAgeworICAgICAgICBpZiAobV9jYW5jZWxsZWRfaWQgPiAwKQorICAgICAgICAgICAg
Z19jYW5jZWxsYWJsZV9kaXNjb25uZWN0KG1fY2FuY2VsbGFibGUuZ2V0KCksIG1fY2FuY2VsbGVk
X2lkKTsKKyAgICB9CisKKyAgICBjb25zdCBTdHJpbmcmIHBhZ2VVUkkoKSB7IHJldHVybiBtX3Bh
Z2VVUkk7IH0KKyAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudCogZnJhbWVMb2FkZXJDbGll
bnQoKSB7IHJldHVybiBtX2ZyYW1lTG9hZGVyQ2xpZW50OyB9CisgICAgR1NpbXBsZUFzeW5jUmVz
dWx0KiBhc3luY1Jlc3VsdCgpIHsgcmV0dXJuIG1fYXN5bmNSZXN1bHQuZ2V0KCk7IH0KKworICAg
IFN0cmluZyBtX3BhZ2VVUkk7CisgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQqIG1fZnJh
bWVMb2FkZXJDbGllbnQ7CisgICAgR1JlZlB0cjxHU2ltcGxlQXN5bmNSZXN1bHQ+IG1fYXN5bmNS
ZXN1bHQ7CisgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2FuY2VsbGFibGU7CisgICAgZ3Vs
b25nIG1fY2FuY2VsbGVkX2lkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyB3ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0d0a0xh
dW5jaGVyL21haW4uYyBiL1Rvb2xzL0d0a0xhdW5jaGVyL21haW4uYwppbmRleCBlZGM4ZTJmLi5h
NjA0ZWI1IDEwMDY0NAotLS0gYS9Ub29scy9HdGtMYXVuY2hlci9tYWluLmMKKysrIGIvVG9vbHMv
R3RrTGF1bmNoZXIvbWFpbi5jCkBAIC00MCw2ICs0MCw3IEBAIHN0YXRpYyB2b2lkIGFjdGl2YXRl
VXJpRW50cnlDYihHdGtXaWRnZXQqIGVudHJ5LCBncG9pbnRlciBkYXRhKQogICAgIFdlYktpdFdl
YlZpZXcgKndlYlZpZXcgPSBnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChlbnRyeSksICJ3ZWIt
dmlldyIpOwogICAgIGNvbnN0IGdjaGFyKiB1cmkgPSBndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VO
VFJZKGVudHJ5KSk7CiAgICAgZ19hc3NlcnQodXJpKTsKKyAgICBndGtfZW50cnlfc2V0X2ljb25f
ZnJvbV9waXhidWYoR1RLX0VOVFJZKGVudHJ5KSwgR1RLX0VOVFJZX0lDT05fUFJJTUFSWSwgMCk7
CiAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHdlYlZpZXcsIHVyaSk7CiB9CiAKQEAgLTEy
NSw2ICsxMjYsMTQgQEAgc3RhdGljIGdib29sZWFuIGNsb3NlV2ViVmlld0NiKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIEd0a1dpZGdldCogd2luZG93KQogICAgIGd0a193aWRnZXRfZGVzdHJveSh3
aW5kb3cpOwogICAgIHJldHVybiBUUlVFOwogfQorCitzdGF0aWMgdm9pZCBpY29uTG9hZGVkQ2Io
V2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciogaWNvblVSSSwgR3RrV2lkZ2V0KiB1
cmlFbnRyeSkKK3sKKyAgICBHZGtQaXhidWYgKmljb24gPSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9n
ZXRfaWNvbl9waXhidWYod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCksIHdlYmtpdF93ZWJfdmll
d19nZXRfdXJpKHdlYlZpZXcpKTsKKyAgICBndGtfZW50cnlfc2V0X2ljb25fZnJvbV9waXhidWYo
R1RLX0VOVFJZKHVyaUVudHJ5KSwgR1RLX0VOVFJZX0lDT05fUFJJTUFSWSwgaWNvbik7CisgICAg
aWYgKGljb24pCisgICAgICAgIGdfb2JqZWN0X3VucmVmKGljb24pOworfQogI2VuZGlmCiAKIHN0
YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZUJyb3dzZXIoR3RrV2lkZ2V0KiB3aW5kb3csIEd0a1dpZGdl
dCogdXJpRW50cnksIEd0a1dpZGdldCogc3RhdHVzYmFyLCBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
KQpAQCAtMTM4LDYgKzE0Nyw3IEBAIHN0YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZUJyb3dzZXIoR3Rr
V2lkZ2V0KiB3aW5kb3csIEd0a1dpZGdldCogdXJpRW50cnksIEd0a1dpZGdlCiAgICAgZ19zaWdu
YWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojp0aXRsZSIsIEdfQ0FMTEJBQ0sobm90aWZ5VGl0
bGVDYiksIHdpbmRvdyk7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojps
b2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobm90aWZ5TG9hZFN0YXR1c0NiKSwgdXJpRW50cnkpOwog
ICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgIm5vdGlmeTo6cHJvZ3Jlc3MiLCBHX0NBTExC
QUNLKG5vdGlmeVByb2dyZXNzQ2IpLCB3aW5kb3cpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2Vi
VmlldywgImljb24tbG9hZGVkIiwgR19DQUxMQkFDSyhpY29uTG9hZGVkQ2IpLCB1cmlFbnRyeSk7
CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiaG92ZXJpbmctb3Zlci1saW5rIiwgR19D
QUxMQkFDSyhsaW5rSG92ZXJDYiksIHN0YXR1c2Jhcik7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3
ZWJWaWV3LCAiY3JlYXRlLXdlYi12aWV3IiwgR19DQUxMQkFDSyhjcmVhdGVXZWJWaWV3Q2IpLCB3
aW5kb3cpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgIndlYi12aWV3LXJlYWR5Iiwg
R19DQUxMQkFDSyh3ZWJWaWV3UmVhZHlDYiksIHdpbmRvdyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100461</attachid>
            <date>2011-07-12 03:46:40 -0700</date>
            <delta_ts>2011-07-12 03:48:36 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>icon-database3.diff</filename>
            <type>text/plain</type>
            <size>36175</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwppbmRleCA4MzA4ZTk1Li42NWNjNjVjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNzEgQEAKKzIwMTEtMDctMTEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFdlYktpdEljb25EYXRhYmFzZSBkb2Vzbid0
IGtlZXAgaWNvbnMgY2FjaGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NjIwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24u
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6cmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0
aW9uKTogV2hlbiB0aGUKKyAgICAgICAgaWNvbiBpcyBpbiB0aGUgZGF0YWJhc2UsIGJ1dCB0aGUg
ZGF0YSBpcyBub3Qgc3RpbGwgYXZhaWxhYmxlLAorICAgICAgICByZWdpc3RlciBhIG5vdGlmaWNh
dGlvbiB0byBkaXNwYXRjaCByZWNlaXZlZCBpY29uIHdoZW4gdGhlIGljb24KKyAgICAgICAgZGF0
YSBpcyBhdmFpbGFibGUuCisgICAgICAgICogdGVzdHMvdGVzdGljb25kYXRhYmFzZS5jOiBBZGRl
ZC4KKyAgICAgICAgKGRlbGV0ZV9kYl9maWxlX2lmX2V4aXN0cyk6CisgICAgICAgICh0ZXN0X3dl
YmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKToKKyAgICAgICAgKGljb25fZGF0YWJhc2VfZ2V0
X2ljb25fdmFsaWRfY2FsbGJhY2spOgorICAgICAgICAoaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9p
bnZhbGlkX2NhbGxiYWNrKToKKyAgICAgICAgKGljb25fZGF0YWJhc2VfZ2V0X2ljb25fY2FuY2Vs
bGVkX2NhbGxiYWNrKToKKyAgICAgICAgKGlkbGVfcXVpdF9sb29wX2NiKToKKyAgICAgICAgKGxv
YWRfdXJpKToKKyAgICAgICAgKGljb25fZGF0YWJhc2VfZ2V0X2ljb25fdmFsaWRfaWRsZSk6Cisg
ICAgICAgIChpY29uX2RhdGFiYXNlX2dldF9pY29uX2ludmFsaWRfaWRsZSk6CisgICAgICAgIChp
Y29uX2RhdGFiYXNlX2dldF9pY29uX2NhbmNlbGxlZF9pZGxlKToKKyAgICAgICAgKHRlc3Rfd2Vi
a2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fYXN5bmMpOgorICAgICAgICAodGVzdF93ZWJraXRf
aWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmkpOgorICAgICAgICAodGVzdF93ZWJraXRfaWNvbl9k
YXRhYmFzZV9yZW1vdmVfYWxsKToKKyAgICAgICAgKHRlc3Rfd2Via2l0X2ljb25fZGF0YWJhc2Vf
Y2xvc2VfZGIpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogd2Via2l0L3dlYmtpdGljb25k
YXRhYmFzZS5jcHA6CisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aCk6IERl
bGF5IGRhdGFiYXNlIGNsZWFudXAgYnkgZGVmYXVsdAorICAgICAgICB0byBtYWtlIGljb25zIHBl
cnNpc3RlbnQgaW4gdGhlIGRhdGFiYXNlLgorICAgICAgICAoZ2V0X2ljb25fcGl4YnVmKTogSGVs
cGVyIGZ1bmN0aW9uIHRvIGNhbGwKKyAgICAgICAgSWNvbkRhdGFiYXNlOjpzeW5jaHJvbm91c0lj
b25VUkxGb3JQYWdlVVJMKCkuCisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl9waXhidWYpOiBGaXggZG9jIGNvbW1lbnRzLgorICAgICAgICAoZ2V0X2ljb25fcGl4YnVmX2Nh
bmNlbGxlZF9pZGxlKTogTWFyayBvcGVyYXRpb24gYXMgY2FuY2VsbGVkIGFuZAorICAgICAgICBj
b21wbGV0ZSBpdC4KKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1
Zl9jYW5jZWxsZWQpOgorICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4
YnVmX2FzeW5jKTogTmV3IG1ldGhvZCB0bworICAgICAgICBhc3luY2hyb25vdXNseSBnZXQgYW4g
aWNvbi4KKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5p
c2gpOiBGaW5pc2hlcyBhbgorICAgICAgICBvcGVyYXRpb24gc3RhcnRlZCB3aXRoIHdlYmtpdF9p
Y29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYygpLgorICAgICAgICAoX3dlYmtpdF9p
Y29uX2RhdGFiYXNlX3Byb2Nlc3NfcGVuZGluZ19pY29uc19mb3JfdXJpKTogUHJvY2VzcworICAg
ICAgICBwZW5kaW5nIHJlcXVlc3RzIGZvciB0aGUgZ2l2ZW4gdXJpLCBmb3IgYXN5bmMgb3BlcmF0
aW9uIHJlcXVlc3RzIGl0CisgICAgICAgIGNvbXBsZXRlcyB0aGUgb3BlcmF0aW9uLCB3aGlsZSBm
b3IgZnJhbWUgbG9hZGVyIHJlcXVlc3RzIGl0IGNhbGxzCisgICAgICAgIEZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERpZFJlY2VpdmVJY29uKCkgdG8gbm90aWZ5IHRoZSBmcmFtZQorICAgICAg
ICBsb2FkZXIgdGhhdCBoZSBpY29uIGlzIG5vdyBhdmFpbGFibGUuCisgICAgICAgIChfd2Via2l0
X2ljb25fZGF0YWJhc2VfcmVnaXN0ZXJfZm9yX2ljb25fbm90aWZpY2F0aW9uKTogUmVnaXN0ZXIK
KyAgICAgICAgZnJhbWUgbG9hZGVyIHRvIGJlIG5vdGlmaWVkIHdoZW4gdGhlIGljb24gZGF0YSBp
cyBhdmFpbGFibGUuCisgICAgICAgIChfd2Via2l0X2ljb25fZGF0YWJhc2VfdW5yZWdpc3Rlcl9m
b3JfaWNvbl9ub3RpZmljYXRpb24pOgorICAgICAgICBVbnJlZ2lzdGVyIGEgZnJhbWUgbG9hZGVy
IG5vdGlmaWNhdGlvbiByZXF1ZXN0LgorICAgICAgICAoX3dlYmtpdF9pY29uX2RhdGFiYXNlX2lt
cG9ydF9maW5pc2hlZCk6IFdoZW4gaW1wb3J0IGlzIGZpbmlzaGVkLAorICAgICAgICBjaGVjayBw
ZW5kaW5nIHJlcXVlc3RzIHRvIHByb2Nlc3MgYW5kIGRlbGV0ZSB0aGUgb25lcyB0aGF0IGFzayBm
b3IKKyAgICAgICAgYW4gaWNvbiB0aGF0IGRvZXNuJ3QgZXhpc3QgaW4gZGF0YWJhc2UuCisgICAg
ICAgICogd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oOgorICAgICAgICAqIHdlYmtpdC93ZWJr
aXRpY29uZGF0YWJhc2Vwcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJY29uRGF0
YWJhc2VDbGllbnRHdGs6OnBlcmZvcm1JbXBvcnQpOgorICAgICAgICAoV2ViS2l0OjpJY29uRGF0
YWJhc2VDbGllbnRHdGs6OmRpZFJlbW92ZUFsbEljb25zKToKKyAgICAgICAgKFdlYktpdDo6SWNv
bkRhdGFiYXNlQ2xpZW50R3RrOjpkaWRJbXBvcnRJY29uVVJMRm9yUGFnZVVSTCk6CisgICAgICAg
IChXZWJLaXQ6Okljb25EYXRhYmFzZUNsaWVudEd0azo6ZGlkSW1wb3J0SWNvbkRhdGFGb3JQYWdl
VVJMKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpkaWRDaGFuZ2VJ
Y29uRm9yUGFnZVVSTCk6CisgICAgICAgIChXZWJLaXQ6Okljb25EYXRhYmFzZUNsaWVudEd0azo6
ZGlkRmluaXNoVVJMSW1wb3J0KToKKyAgICAgICAgKFdlYktpdDo6UGVuZGluZ0ljb25SZXF1ZXN0
OjpQZW5kaW5nSWNvblJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpQZW5kaW5nSWNvblJlcXVl
c3Q6On5QZW5kaW5nSWNvblJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpQZW5kaW5nSWNvblJl
cXVlc3Q6OnBhZ2VVUkkpOgorICAgICAgICAoV2ViS2l0OjpQZW5kaW5nSWNvblJlcXVlc3Q6OmZy
YW1lTG9hZGVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6UGVuZGluZ0ljb25SZXF1ZXN0Ojph
c3luY1Jlc3VsdCk6CisKIDIwMTEtMDctMDggIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGd1c3Rh
dm8ubm9yb25oYUBjb2xsYWJvcmEuY29tPgogCiAgICAgICAgIFtHVEtdIHRlc3R3ZWJ2aWV3IEFQ
SSB0ZXN0IGZhaWxzIGFmdGVyIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzkwNDcx
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTFl
MzJmNC4uNTQxMzViYyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTA3LTExICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBXZWJLaXRJY29uRGF0YWJh
c2UgZG9lc24ndCBrZWVwIGljb25zIGNhY2hlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyMDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZmF2aWNvbnMgaW4gR3RrTGF1bmNo
ZXIuCisKKyAgICAgICAgKiBHdGtMYXVuY2hlci9tYWluLmM6CisgICAgICAgIChhY3RpdmF0ZVVy
aUVudHJ5Q2IpOgorICAgICAgICAoaWNvbkxvYWRlZENiKToKKyAgICAgICAgKGNyZWF0ZUJyb3dz
ZXIpOgorCiAyMDExLTA3LTEwICBLZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBMZXQgcGx1Z2lucyBwYXJ0aWNpcGF0ZSBpbiBmb3JtIHN1Ym1pc3Npb24K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dl
YktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggNTFjN2M3Zi4uZmQ3ZjBhZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdC9n
dGsvR05VbWFrZWZpbGUuYW0KQEAgLTIxNiw2ICsyMTYsNyBAQCB3ZWJraXRndGtfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuY3BwIFwK
IAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aGl0dGVzdHJlc3VsdHByaXZhdGUuaCBc
CiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAgXAorCVNv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlLmggXAogCVNv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5jcHAgXAogCVNvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdHByaXZhdGUuaCBcCiAJU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXNwb25zZS5jcHAgXApAQCAtNDMy
LDYgKzQzMyw3IEBAIFRFU1RfUFJPR1MgKz0gXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0ZG9t
ZG9td2luZG93IFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdGRvbW5vZGUgXAogCVByb2dyYW1z
L3VuaXR0ZXN0cy90ZXN0aHR0cGJhY2tlbmQgXAorCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0aWNv
bmRhdGFiYXNlIFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdGxvYWRpbmcgXAogCVByb2dyYW1z
L3VuaXR0ZXN0cy90ZXN0Z2xvYmFscyBcCiAJUHJvZ3JhbXMvdW5pdHRlc3RzL3Rlc3RtaW1laGFu
ZGxpbmcgXApAQCAtNDc5LDYgKzQ4MSwxMSBAQCBQcm9ncmFtc191bml0dGVzdHNfdGVzdGh0dHBi
YWNrZW5kX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKIFByb2dyYW1zX3VuaXR0ZXN0
c190ZXN0aHR0cGJhY2tlbmRfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKIFByb2dyYW1z
X3VuaXR0ZXN0c190ZXN0aHR0cGJhY2tlbmRfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxh
Z3MpCiAKK1Byb2dyYW1zX3VuaXR0ZXN0c190ZXN0aWNvbmRhdGFiYXNlX1NPVVJDRVMgPSBTb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0aWNvbmRhdGFiYXNlLmMKK1Byb2dyYW1zX3VuaXR0ZXN0
c190ZXN0aWNvbmRhdGFiYXNlX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKK1Byb2dy
YW1zX3VuaXR0ZXN0c190ZXN0aWNvbmRhdGFiYXNlX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRh
ZGQpCitQcm9ncmFtc191bml0dGVzdHNfdGVzdGljb25kYXRhYmFzZV9MREZMQUdTID0gJCh3ZWJr
aXRfdGVzdHNfbGRmbGFncykKKwogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RnbG9iYWxzX1NPVVJD
RVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Z2xvYmFscy5jCiBQcm9ncmFtc191bml0
dGVzdHNfdGVzdGdsb2JhbHNfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQogUHJvZ3Jh
bXNfdW5pdHRlc3RzX3Rlc3RnbG9iYWxzX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudEd0ay5jcHAKaW5kZXggMzE2NDI1Yy4uNDc2Mzk4OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNw
cApAQCAtNjcsNiArNjcsNyBAQAogI2luY2x1ZGUgIndlYmtpdGdsb2JhbHMuaCIKICNpbmNsdWRl
ICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFzZS5o
IgorI2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFzZXByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJr
aXRuZXR3b3JrcmVxdWVzdC5oIgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmtyZXF1ZXN0cHJpdmF0
ZS5oIgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmtyZXNwb25zZS5oIgpAQCAtNzY1LDcgKzc2Niwx
MiBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKCkg
Y29uc3QKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6cmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0
aW9uKGJvb2wgc2hvdWxkUmVnaXN0ZXIpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBj
b25zdCBnY2hhciogZnJhbWVVUkkgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF91cmkobV9mcmFtZSk7
CisgICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRh
YmFzZSgpOworICAgIGlmIChzaG91bGRSZWdpc3RlcikKKyAgICAgICAgX3dlYmtpdF9pY29uX2Rh
dGFiYXNlX3JlZ2lzdGVyX2Zvcl9pY29uX25vdGlmaWNhdGlvbihkYXRhYmFzZSwgZnJhbWVVUkks
IHRoaXMpOworICAgIGVsc2UKKyAgICAgICAgX3dlYmtpdF9pY29uX2RhdGFiYXNlX3VucmVnaXN0
ZXJfZm9yX2ljb25fbm90aWZpY2F0aW9uKGRhdGFiYXNlLCBmcmFtZVVSSSwgdGhpcyk7CiB9CiAK
IHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9vbCBy
ZWFkeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RpY29uZGF0YWJh
c2UuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RpY29uZGF0YWJhc2UuYwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzdhNmMyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGljb25kYXRhYmFzZS5jCkBAIC0wLDAgKzEsMjI3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJ0ZXN0
X3V0aWxzLmgiCisKKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPGd0ay9ndGsu
aD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigy
LCAxNCwgMCkKK0dNYWluTG9vcCogbG9vcDsKKworc3RhdGljIHZvaWQgZGVsZXRlX2RiX2ZpbGVf
aWZfZXhpc3RzKGNvbnN0IGdjaGFyICpkYl9wYXRoKQoreworICAgIGlmICghZ19maWxlX3Rlc3Qo
ZGJfcGF0aCwgR19GSUxFX1RFU1RfSVNfRElSKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2No
YXIqIGRiX2ZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZShkYl9wYXRoLCAiV2VicGFnZUljb25z
LmRiIiwgTlVMTCk7CisgICAgaWYgKGdfdW5saW5rKGRiX2ZpbGVuYW1lKSA9PSAtMSkgeworICAg
ICAgICBnX2ZyZWUoZGJfZmlsZW5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Z19ybWRpcihkYl9wYXRoKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfaWNvbl9kYXRh
YmFzZV9zZXRfcGF0aCh2b2lkKQoreworICAgIGdjaGFyICpkYl9wYXRoID0gZ19idWlsZF9maWxl
bmFtZShnX2dldF90bXBfZGlyKCksICJ3ZWJraXQtdGVzdGljb25kYXRhYmFzZSIsIE5VTEwpOwor
ICAgIGRlbGV0ZV9kYl9maWxlX2lmX2V4aXN0cyhkYl9wYXRoKTsKKworICAgIFdlYktpdEljb25E
YXRhYmFzZSogaWNvbl9kYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOworICAg
IHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKGljb25fZGF0YWJhc2UsIGRiX3BhdGgpOwor
CisgICAgZ19hc3NlcnRfY21wc3RyKGRiX3BhdGgsID09LCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9n
ZXRfcGF0aChpY29uX2RhdGFiYXNlKSk7CisKKyAgICBnX2ZyZWUoZGJfcGF0aCk7Cit9CisKK3N0
YXRpYyB2b2lkIGljb25fZGF0YWJhc2VfZ2V0X2ljb25fdmFsaWRfY2FsbGJhY2soR09iamVjdCog
c291cmNlX29iamVjdCwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIGdwb2ludGVyIHVzZXJfZGF0YSkK
K3sKKyAgICBnYm9vbGVhbiogYmVlbl9oZXJlID0gKGdib29sZWFuKil1c2VyX2RhdGE7CisgICAg
R0Vycm9yKiBlcnJvciA9IE5VTEw7CisgICAgR2RrUGl4YnVmKiBpY29uID0gd2Via2l0X2ljb25f
ZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2ZpbmlzaChXRUJLSVRfSUNPTl9EQVRBQkFTRShzb3Vy
Y2Vfb2JqZWN0KSwgcmVzdWx0LCAmZXJyb3IpOworICAgIGdfYXNzZXJ0KGljb24pOworICAgIGdf
b2JqZWN0X3VucmVmKGljb24pOworCisgICAgKmJlZW5faGVyZSA9IFRSVUU7CisKKyAgICBnX21h
aW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMgdm9pZCBpY29uX2RhdGFiYXNlX2dldF9p
Y29uX2ludmFsaWRfY2FsbGJhY2soR09iamVjdCogc291cmNlX29iamVjdCwgR0FzeW5jUmVzdWx0
ICpyZXN1bHQsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgICBnYm9vbGVhbiogYmVlbl9oZXJl
ID0gKGdib29sZWFuKil1c2VyX2RhdGE7CisgICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7CisgICAg
R2RrUGl4YnVmKiBpY29uID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2Zp
bmlzaChXRUJLSVRfSUNPTl9EQVRBQkFTRShzb3VyY2Vfb2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Ip
OworICAgIGdfYXNzZXJ0KCFpY29uKTsKKworICAgICpiZWVuX2hlcmUgPSBUUlVFOworCisgICAg
Z19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIHZvaWQgaWNvbl9kYXRhYmFzZV9n
ZXRfaWNvbl9jYW5jZWxsZWRfY2FsbGJhY2soR09iamVjdCogc291cmNlX29iamVjdCwgR0FzeW5j
UmVzdWx0ICpyZXN1bHQsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgICBnYm9vbGVhbiogYmVl
bl9oZXJlID0gKGdib29sZWFuKil1c2VyX2RhdGE7CisgICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7
CisgICAgR2RrUGl4YnVmKiBpY29uID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4
YnVmX2ZpbmlzaChXRUJLSVRfSUNPTl9EQVRBQkFTRShzb3VyY2Vfb2JqZWN0KSwgcmVzdWx0LCAm
ZXJyb3IpOworICAgIGdfYXNzZXJ0KCFpY29uKTsKKyAgICBnX2Fzc2VydChlcnJvciAmJiBnX2Vy
cm9yX21hdGNoZXMoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSk7CisK
KyAgICAqYmVlbl9oZXJlID0gVFJVRTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Cit9
CisKK3N0YXRpYyB2b2lkIGlkbGVfcXVpdF9sb29wX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3
LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBnX21haW5fbG9vcF9x
dWl0KGxvb3ApOworfQorCitzdGF0aWMgdm9pZCBsb2FkX3VyaShjb25zdCBnY2hhciogdXJpKQor
eworICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19QT1BV
UCk7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5k
b3cpLCBHVEtfV0lER0VUKHZpZXcpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7
CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgdXJpKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0KHZpZXcsICJpY29uLWxvYWRlZCIsIEdfQ0FMTEJBQ0sgKGlkbGVfcXVpdF9sb29w
X2NiKSwgTlVMTCk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ3RrX3dpZGdl
dF9kZXN0cm95KHdpbmRvdyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBpY29uX2RhdGFiYXNlX2dl
dF9pY29uX3ZhbGlkX2lkbGUoZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICAgIFdlYktpdEljb25E
YXRhYmFzZSogaWNvbl9kYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOworICAg
IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYyhpY29uX2RhdGFiYXNl
LCAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGljb25fZGF0YWJhc2VfZ2V0X2ljb25fdmFsaWRfY2Fs
bGJhY2ssIHVzZXJfZGF0YSk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9pbnZhbGlkX2lkbGUoZ3BvaW50ZXIgdXNlcl9kYXRh
KQoreworICAgIFdlYktpdEljb25EYXRhYmFzZSogaWNvbl9kYXRhYmFzZSA9IHdlYmtpdF9nZXRf
aWNvbl9kYXRhYmFzZSgpOworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1
Zl9hc3luYyhpY29uX2RhdGFiYXNlLCAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnLyIsIE5VTEws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25fZGF0
YWJhc2VfZ2V0X2ljb25faW52YWxpZF9jYWxsYmFjaywgdXNlcl9kYXRhKTsKKyAgICByZXR1cm4g
RkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBpY29uX2RhdGFiYXNlX2dldF9pY29uX2NhbmNl
bGxlZF9pZGxlKGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgICBXZWJLaXRJY29uRGF0YWJhc2Uq
IGljb25fZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKKyAgICBHQ2FuY2Vs
bGFibGUgKmNhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKKyAgICB3ZWJraXRfaWNv
bl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmMoaWNvbl9kYXRhYmFzZSwgImh0dHA6Ly93
d3cuZ29vZ2xlLmNvbSIsIGNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpY29uX2RhdGFiYXNlX2dldF9pY29uX2NhbmNlbGxlZF9jYWxs
YmFjaywgdXNlcl9kYXRhKTsKKyAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChjYW5jZWxsYWJsZSk7
CisgICAgZ19vYmplY3RfdW5yZWYoY2FuY2VsbGFibGUpOworICAgIHJldHVybiBGQUxTRTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9hc3luYyh2
b2lkKQoreworICAgIFdlYktpdEljb25EYXRhYmFzZSogaWNvbl9kYXRhYmFzZSA9IHdlYmtpdF9n
ZXRfaWNvbl9kYXRhYmFzZSgpOworICAgIGdib29sZWFuIGJlZW5fdG9faWNvbl9jYjsKKworICAg
IGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICAvKiBMb2FkIGdvb2ds
ZSB0byBtYWtlIHN1cmUgZmF2aWNvbiBpcyBhZGRlZCB0byBkYXRhYmFzZSAqLworICAgIGxvYWRf
dXJpKCJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIik7CisKKyAgICBiZWVuX3RvX2ljb25fY2IgPSBG
QUxTRTsKKyAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYylpY29uX2RhdGFiYXNlX2dldF9pY29u
X3ZhbGlkX2lkbGUsICZiZWVuX3RvX2ljb25fY2IpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29w
KTsKKyAgICBnX2Fzc2VydChiZWVuX3RvX2ljb25fY2IpOworCisgICAgYmVlbl90b19pY29uX2Ni
ID0gRkFMU0U7CisgICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMpaWNvbl9kYXRhYmFzZV9nZXRf
aWNvbl9pbnZhbGlkX2lkbGUsICZiZWVuX3RvX2ljb25fY2IpOworICAgIGdfbWFpbl9sb29wX3J1
bihsb29wKTsKKyAgICBnX2Fzc2VydChiZWVuX3RvX2ljb25fY2IpOworCisgICAgLyogQ2xvc2Ug
dGhlIGRhdGFiYXNlIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBnZXQgYW4gaWNvbi4gVGhpcyBpcyBu
b3Qgc3VwcG9zZWQgdG8gaGFwcGVuLAorICAgICAqIHNvIHRoYXQgZXJyb3IgaXMgbm90IGhhbmRs
ZWQsIGl0J3MganVzdCB1c2VkIGhlcmUgdG8gbWFrZSBzdXJlIHRoZSBjYWxsYmFjayBpcyBuZXZl
cgorICAgICAqIGNhbGxlZCBzbyB0aGF0IHdlIGNhbiB0ZXN0IGNhbmNlbGxhdGlvbi4KKyAgICAg
Ki8KKyAgICBnY2hhciAqZGJfcGF0aCA9IGdfc3RyZHVwKHdlYmtpdF9pY29uX2RhdGFiYXNlX2dl
dF9wYXRoKGljb25fZGF0YWJhc2UpKTsKKyAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0
aChpY29uX2RhdGFiYXNlLCBOVUxMKTsKKworICAgIGJlZW5fdG9faWNvbl9jYiA9IEZBTFNFOwor
ICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWljb25fZGF0YWJhc2VfZ2V0X2ljb25fY2FuY2Vs
bGVkX2lkbGUsICZiZWVuX3RvX2ljb25fY2IpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsK
KyAgICBnX2Fzc2VydChiZWVuX3RvX2ljb25fY2IpOworCisgICAgd2Via2l0X2ljb25fZGF0YWJh
c2Vfc2V0X3BhdGgoaWNvbl9kYXRhYmFzZSwgZGJfcGF0aCk7CisgICAgZ19mcmVlKGRiX3BhdGgp
OworCisgICAgLyogR2l2ZSBzb21lIHRpbWUgZm9yIHRoZSBkYXRhYmFzZSB0byBsb2FkICovCisg
ICAgZ191c2xlZXAoMTAwMDApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9pY29uX2Rh
dGFiYXNlX2dldF9pY29uX3VyaSh2b2lkKQoreworICAgIFdlYktpdEljb25EYXRhYmFzZSogaWNv
bl9kYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOworICAgIGdjaGFyKiBpY29u
X3VyaSA9IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3VyaShpY29uX2RhdGFiYXNlLCAi
aHR0cDovL3d3dy5nb29nbGUuY29tLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uX3VyaSwg
PT0sICJodHRwOi8vd3d3Lmdvb2dsZS5lcy9mYXZpY29uLmljbyIpOworICAgIGdfZnJlZShpY29u
X3VyaSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2ljb25fZGF0YWJhc2VfcmVtb3Zl
X2FsbCh2b2lkKQoreworICAgIFdlYktpdEljb25EYXRhYmFzZSogaWNvbl9kYXRhYmFzZSA9IHdl
YmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX2NsZWFy
KGljb25fZGF0YWJhc2UpOworICAgIGdjaGFyKiBpY29uX3VyaSA9IHdlYmtpdF9pY29uX2RhdGFi
YXNlX2dldF9pY29uX3VyaShpY29uX2RhdGFiYXNlLCAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIp
OworICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uX3VyaSwgPT0sICIiKTsKKyAgICBnX2ZyZWUoaWNv
bl91cmkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9pY29uX2RhdGFiYXNlX2Nsb3Nl
X2RiKHZvaWQpCit7CisgICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBpY29uX2RhdGFiYXNlID0gd2Vi
a2l0X2dldF9pY29uX2RhdGFiYXNlKCk7CisgICAgZ2NoYXIgKmRiX3BhdGggPSBnX3N0cmR1cCh3
ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0aChpY29uX2RhdGFiYXNlKSk7CisgICAgd2Via2l0
X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgoaWNvbl9kYXRhYmFzZSwgTlVMTCk7CisgICAgZGVsZXRl
X2RiX2ZpbGVfaWZfZXhpc3RzKGRiX3BhdGgpOworICAgIGdfZnJlZShkYl9wYXRoKTsKK30KKwor
aW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGdfdGhyZWFkX2luaXQoTlVM
TCk7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0
X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi93ZWJraXQvaWNvbmRhdGFiYXNlL3NldC1wYXRoIiwgdGVzdF93ZWJraXRfaWNvbl9kYXRh
YmFzZV9zZXRfcGF0aCk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2ljb25kYXRhYmFz
ZS9pY29uLWFzeW5jIiwgdGVzdF93ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9hc3luYyk7
CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2ljb25kYXRhYmFzZS9pY29uLXVyaSIsIHRl
c3Rfd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpKTsKKyAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi93ZWJraXQvaWNvbmRhdGFiYXNlL3JlbW92ZS1hbGwiLCB0ZXN0X3dlYmtpdF9pY29uX2Rh
dGFiYXNlX3JlbW92ZV9hbGwpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9pY29uZGF0
YWJhc2UvY2xvc2UtZGIiLCB0ZXN0X3dlYmtpdF9pY29uX2RhdGFiYXNlX2Nsb3NlX2RiKTsKKwor
ICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9CisjZWxzZQoraW50IG1haW4oaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KQoreworICAgIGdfY3JpdGljYWwoIllvdSB3aWxsIG5lZWQgZ3RrLTIuMTQuMCB0
byBydW4gdGhlIHVuaXQgdGVzdHMuIERvaW5nIG5vdGhpbmcgbm93LiIpOworICAgIHJldHVybiAw
OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRpY29uZGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25k
YXRhYmFzZS5jcHAKaW5kZXggMzgzYjA4MS4uMzU4MTJlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNp
bmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJ3ZWJraXRn
bG9iYWxzcHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFzZXByaXZhdGUuaCIK
ICNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCiAjaW5jbHVkZSAid2Via2l0c2VjdXJpdHlvcmln
aW5wcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0d2ViZnJhbWUuaCIKQEAgLTc3LDEwICs3OCwx
MyBAQCBlbnVtIHsKIAogc3RhdGljIGd1aW50IHdlYmtpdF9pY29uX2RhdGFiYXNlX3NpZ25hbHNb
TEFTVF9TSUdOQUxdID0geyAwLCB9OwogCi1HX0RFRklORV9UWVBFKFdlYktpdEljb25EYXRhYmFz
ZSwgd2Via2l0X2ljb25fZGF0YWJhc2UsIEdfVFlQRV9PQkpFQ1QpOworR19ERUZJTkVfVFlQRShX
ZWJLaXRJY29uRGF0YWJhc2UsIHdlYmtpdF9pY29uX2RhdGFiYXNlLCBHX1RZUEVfT0JKRUNUKQog
CiBzdHJ1Y3QgX1dlYktpdEljb25EYXRhYmFzZVByaXZhdGUgewogICAgIEdPd25QdHI8Z2NoYXI+
IHBhdGg7CisgICAgSWNvbkRhdGFiYXNlQ2xpZW50R3RrIGljb25EYXRhYmFzZUNsaWVudDsKKyAg
ICBHTGlzdCogcGVuZGluZ0ljb25zOworICAgIGdib29sZWFuIGltcG9ydEZpbmlzaGVkOwogfTsK
IAogc3RhdGljIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2VfZmluYWxpemUoR09iamVjdCogb2Jq
ZWN0KQpAQCAtMjI1LDE2ICsyMjksMjIgQEAgdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRf
cGF0aChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBnY2hhciogcGEKICAgICBp
ZiAoZGF0YWJhc2UtPnByaXYtPnBhdGguZ2V0KCkpCiAgICAgICAgIFdlYkNvcmU6Omljb25EYXRh
YmFzZSgpLmNsb3NlKCk7CiAKKyAgICBkYXRhYmFzZS0+cHJpdi0+aW1wb3J0RmluaXNoZWQgPSBG
QUxTRTsKICAgICBpZiAoIShwYXRoICYmIHBhdGhbMF0pKSB7CiAgICAgICAgIGRhdGFiYXNlLT5w
cml2LT5wYXRoLnNldCgwKTsKICAgICAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc2V0RW5h
YmxlZChmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBkYXRhYmFzZS0+cHJp
di0+cGF0aC5zZXQoZ19zdHJkdXAocGF0aCkpOwotCisgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNl
KCkuc2V0Q2xpZW50KCZkYXRhYmFzZS0+cHJpdi0+aWNvbkRhdGFiYXNlQ2xpZW50KTsKKyAgICBX
ZWJDb3JlOjpJY29uRGF0YWJhc2U6OmRlbGF5RGF0YWJhc2VDbGVhbnVwKCk7CiAgICAgV2ViQ29y
ZTo6aWNvbkRhdGFiYXNlKCkuc2V0RW5hYmxlZCh0cnVlKTsKLSAgICBXZWJDb3JlOjppY29uRGF0
YWJhc2UoKS5vcGVuKFdlYkNvcmU6OmZpbGVuYW1lVG9TdHJpbmcoZGF0YWJhc2UtPnByaXYtPnBh
dGguZ2V0KCkpLCBXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmRlZmF1bHREYXRhYmFzZUZpbGVuYW1l
KCkpOworICAgIGlmICghV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkub3BlbihXZWJDb3JlOjpmaWxl
bmFtZVRvU3RyaW5nKHBhdGgpLCBXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmRlZmF1bHREYXRhYmFz
ZUZpbGVuYW1lKCkpKSB7CisgICAgICAgIFdlYkNvcmU6Okljb25EYXRhYmFzZTo6YWxsb3dEYXRh
YmFzZUNsZWFudXAoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRhdGFiYXNlLT5w
cml2LT5wYXRoLnNldChnX3N0cmR1cChwYXRoKSk7CiAKICAgICBzdGF0aWMgYm9vbCBpbml0aWFs
aXplZCA9IGZhbHNlOwogICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKQEAgLTI2NCwyMiArMjc0LDMy
IEBAIGdjaGFyKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmkoV2ViS2l0SWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoCiAgICAgcmV0dXJuIGdfc3RyZHVwKFdlYkNvcmU6
Omljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwocGFnZVVSTCkudXRm
OCgpLmRhdGEoKSk7CiB9CiAKK3N0YXRpYyBHZGtQaXhidWYqIGdldF9pY29uX3BpeGJ1ZihXZWJL
aXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7CisgICAg
Ly8gVGhlIGV4YWN0IHNpemUgd2UgcGFzcyBpcyBpcnJlbGV2YW50IHRvIHRoZSBXZWJDb3JlOjpp
Y29uRGF0YWJhc2UgY29kZS4KKyAgICAvLyBXZSBtdXN0IHBhc3Mgc29tZXRoaW5nIGdyZWF0ZXIg
dGhhbiAwLCAwIHRvIGdldCBhIHBpeGJ1Zi4KKyAgICBXZWJDb3JlOjpJbWFnZSogaWNvbiA9IFdl
YkNvcmU6Omljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwocGFnZVVSTCwg
V2ViQ29yZTo6SW50U2l6ZSgxNiwgMTYpKTsKKyAgICByZXR1cm4gaWNvbiA/IGljb24tPmdldEdk
a1BpeGJ1ZigpIDogMDsKK30KKwogLyoqCiAgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl9waXhidWY6CiAgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQogICogQHBhZ2Vf
dXJpOiBVUkkgb2YgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbgogICoKLSAqIE9idGFpbnMg
YSAjR2RrUGl4YnVmIG9mIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZSBVUkksIG9yCi0g
KiBhIGRlZmF1bHQgaWNvbiBpZiB0aGVyZSBpcyBubyBpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZS4g
VXNlCisgKiBPYnRhaW5zIGEgI0dka1BpeGJ1ZiBvZiB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVu
IHBhZ2UgVVJJLCBvciAlTlVMTAorICogaWYgdGhlcmUgaXMgbm8gaWNvbiBmb3IgdGhlIGdpdmVu
IHBhZ2Ugb3IgaXQgaGFzbid0IGJlZW4gbG9hZGVkIHlldC4gVXNlCiAgKiB3ZWJraXRfaWNvbl9k
YXRhYmFzZV9nZXRfaWNvbl91cmkoKSBpZiB5b3UgbmVlZCB0byBkaXN0aW5ndWlzaCB0aGVzZSBj
YXNlcy4KLSAqIFVzdWFsbHkgeW91IHdhbnQgdG8gY29ubmVjdCB0byBXZWJLaXRJY29uRGF0YWJh
c2U6Omljb24tbG9hZGVkIGFuZCBjYWxsIHRoaXMKLSAqIG1ldGhvZCBpbiB0aGUgY2FsbGJhY2su
CisgKiBUbyBtYWtlIHN1cmUgdGhpcyBtZXRob2QgcmV0dXJuIHdpbGwgcmV0dXJuIGEgdmFsaWQg
aWNvbiwgd2hlbiB0aGUgZ2l2ZW4gVVJJCisgKiBoYXMgb25lLCB5b3Ugc2hvdWxkIGNvbm5lY3Qg
dG8gV2ViS2l0SWNvbkRhdGFiYXNlOjppY29uLWxvYWRlZCBhbmQgY2FsbCB0aGlzCisgKiBtZXRo
b2QgaW4gdGhlIGNhbGxiYWNrLiBTZWUgYWxzbyB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl9waXhidWZfYXN5bmMoKS4KICAqCiAgKiBUaGUgcGl4YnVmIHdpbGwgaGF2ZSB0aGUgbGFyZ2Vz
dCBzaXplIHByb3ZpZGVkIGJ5IHRoZSBzZXJ2ZXIgYW5kIHNob3VsZAogICogYmUgcmVzaXplZCBi
ZWZvcmUgaXQgaXMgZGlzcGxheWVkLgogICogU2VlIGFsc28gd2Via2l0X3dlYl92aWV3X2dldF9p
Y29uX3BpeGJ1ZigpLgogICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgcmVm
ZXJlbmNlIHRvIGEgI0dka1BpeGJ1Ziwgb3IgJU5VTEwKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBm
dWxsKTogYSBuZXcgcmVmZXJlbmNlIHRvIGEgI0dka1BpeGJ1Ziwgb3IgJU5VTEwgaWYgdGhlIGdp
dmVuCisgKiBVUkkgZG9lc24ndCBoYXZlIGFuIGljb24gb3IgaXQgaGFzbid0IGJlZW4gbG9hZGVk
IHlldC4KICAqCiAgKiBTaW5jZTogMS4zLjEzCiAgKiovCkBAIC0yODksMTUgKzMwOSwxOTMgQEAg
R2RrUGl4YnVmKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoV2ViS2l0SWNv
bkRhdGFiYXNlKiBkYXRhYmFzZSwgY28KICAgICBnX3JldHVybl92YWxfaWZfZmFpbChwYWdlVVJJ
LCAwKTsKIAogICAgIFN0cmluZyBwYWdlVVJMID0gU3RyaW5nOjpmcm9tVVRGOChwYWdlVVJJKTsK
LSAgICAvLyBUaGUgZXhhY3Qgc2l6ZSB3ZSBwYXNzIGlzIGlycmVsZXZhbnQgdG8gdGhlIFdlYkNv
cmU6Omljb25EYXRhYmFzZSBjb2RlLgotICAgIC8vIFdlIG11c3QgcGFzcyBzb21ldGhpbmcgZ3Jl
YXRlciB0aGFuIDAsIDAgdG8gZ2V0IGEgcGl4YnVmLgotICAgIFdlYkNvcmU6OkltYWdlKiBpY29u
ID0gV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNJY29uRm9yUGFnZVVSTChwYWdl
VVJMLCBXZWJDb3JlOjpJbnRTaXplKDE2LCAxNikpOwotICAgIGlmICghaWNvbikKKyAgICByZXR1
cm4gZ2V0X2ljb25fcGl4YnVmKGRhdGFiYXNlLCBwYWdlVVJMKTsKK30KKworc3RhdGljIGdib29s
ZWFuIGdldF9pY29uX3BpeGJ1Zl9jYW5jZWxsZWRfaWRsZShncG9pbnRlciB1c2VyRGF0YSkKK3sK
KyAgICBQZW5kaW5nSWNvblJlcXVlc3QqIHJlcXVlc3QgPSBzdGF0aWNfY2FzdDxQZW5kaW5nSWNv
blJlcXVlc3QqPih1c2VyRGF0YSk7CisKKyAgICBXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNl
ID0gd2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCk7CisgICAgR0xpc3QqIGljb25zID0gZGF0YWJh
c2UtPnByaXYtPnBlbmRpbmdJY29uczsKKyAgICB3aGlsZSAoaWNvbnMpIHsKKyAgICAgICAgR0xp
c3QqIG5leHQgPSBnX2xpc3RfbmV4dChpY29ucyk7CisKKyAgICAgICAgaWYgKHJlcXVlc3QgPT0g
aWNvbnMtPmRhdGEpIHsKKyAgICAgICAgICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogcmVzdWx0ID0g
cmVxdWVzdC0+YXN5bmNSZXN1bHQoKTsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQpOworICAg
ICAgICAgICAgZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29ucyA9IGdfbGlzdF9yZW1vdmVfbGlu
ayhkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25zLCBpY29ucyk7CisgICAgICAgICAgICBnX3Np
bXBsZV9hc3luY19yZXN1bHRfc2V0X2Vycm9yKHJlc3VsdCwgR19JT19FUlJPUiwgR19JT19FUlJP
Ul9DQU5DRUxMRUQsICIlcyIsICJPcGVyYXRpb24gd2FzIGNhbmNlbGxlZCIpOworICAgICAgICAg
ICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlKHJlc3VsdCk7CisgICAgICAgICAgICBk
ZWxldGUgcmVxdWVzdDsKKyAgICAgICAgICAgIGdfbGlzdF9mcmVlKGljb25zKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWNvbnMgPSBuZXh0OworICAgIH0KKwor
ICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2Vf
Z2V0X2ljb25fcGl4YnVmX2NhbmNlbGxlZChHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBQZW5k
aW5nSWNvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgLyogSGFuZGxlIGNhbmNlbGxlZCBpbiBh
IGluIGlkbGUgc2luY2UgaXQgbWlnaHQgYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZCAqLworICAg
IGdfaWRsZV9hZGQoZ2V0X2ljb25fcGl4YnVmX2NhbmNlbGxlZF9pZGxlLCByZXF1ZXN0KTsKK30K
KworLyoqCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmM6Cisg
KiBAZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQorICogQHBhZ2VfdXJpOiBVUkkgb2Yg
dGhlIHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbgorICogQGNhbmNlbGxhYmxlOiBBICNHQ2FuY2Vs
bGFibGUgb3IgJU5VTEwuCisgKiBAY2FsbGJhY2s6IChhbGxvdy1ub25lKTogQSAjR0FzeW5jUmVh
ZHlDYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMKKyAqICAgICAgICAgICAgc2F0
aXNmaWVkIG9yICVOVUxMIGlmIHlvdSBkb24ndCBjYXJlIGFib3V0IHRoZSByZXN1bHQuCisgKiBA
dXNlcl9kYXRhOiBUaGUgZGF0YSB0byBwYXNzIHRvIEBjYWxsYmFjay4KKyAqCisgKiBBc3luY2hy
b25vdXNseSBvYnRhaW5zIGEgI0dka1BpeGJ1ZiBvZiB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVu
IHBhZ2UgVVJJLgorICoKKyAqIFRoaXMgaXMgYW4gYXN5bmNocm9ub3VzIG1ldGhvZC4gV2hlbiB0
aGUgb3BlcmF0aW9uIGlzIGZpbmlzaGVkLCBjYWxsYmFjayB3aWxsCisgKiBiZSBpbnZva2VkLiBZ
b3UgY2FuIHRoZW4gY2FsbCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfZmlu
aXNoKCkKKyAqIHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKiBTZWUgYWxz
byB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoKS4KKyAqCisgKiBTaW5jZTog
MS41LjIKKyAqKi8KK3ZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2Fz
eW5jKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGdjaGFyKiBwYWdlVVJJLCBH
Q2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywg
Z3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfSUNP
Tl9EQVRBQkFTRShkYXRhYmFzZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwocGFnZVVSSSk7CisK
KyAgICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gcmVzdWx0ID0gYWRvcHRHUmVmKGdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9uZXcoR19PQkpFQ1QoZGF0YWJhc2UpLCBjYWxsYmFjaywgdXNlckRh
dGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KHdlYmtp
dF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYykpKTsKKworICAgIFBlbmRpbmdJ
Y29uUmVxdWVzdCogcmVxdWVzdCA9IG5ldyBQZW5kaW5nSWNvblJlcXVlc3QocGFnZVVSSSwgcmVz
dWx0LmdldCgpKTsKKyAgICBpZiAoY2FuY2VsbGFibGUpIHsKKyAgICAgICAgcmVxdWVzdC0+bV9j
YW5jZWxsYWJsZSA9IGNhbmNlbGxhYmxlOworICAgICAgICByZXF1ZXN0LT5tX2NhbmNlbGxlZF9p
ZCA9IGdfY2FuY2VsbGFibGVfY29ubmVjdChjYW5jZWxsYWJsZSwgR19DQUxMQkFDSyh3ZWJraXRf
aWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfY2FuY2VsbGVkKSwgcmVxdWVzdCwgMCk7Cisg
ICAgICAgIGdfb2JqZWN0X3NldF9kYXRhX2Z1bGwoR19PQkpFQ1QocmVzdWx0LmdldCgpKSwgImNh
bmNlbGxhYmxlIiwgZ19vYmplY3RfcmVmKGNhbmNlbGxhYmxlKSwgc3RhdGljX2Nhc3Q8R0Rlc3Ry
b3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSk7CisgICAgfQorCisgICAgLy8gUmVnaXN0ZXIgaWNv
biByZXF1ZXN0IGJlZm9yZSBhc2tpbmcgZm9yIHRoZSBpY29uIHRvIGF2b2lkIHJhY2UgY29uZGl0
aW9ucy4KKyAgICBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25zID0gZ19saXN0X3ByZXBlbmQo
ZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29ucywgcmVxdWVzdCk7CisgICAgU3RyaW5nIHBhZ2VV
UkwgPSBTdHJpbmc6OmZyb21VVEY4KHBhZ2VVUkkpOworICAgIEdka1BpeGJ1ZiogcGl4YnVmID0g
Z2V0X2ljb25fcGl4YnVmKGRhdGFiYXNlLCBwYWdlVVJMKTsKKyAgICBpZiAoIXBpeGJ1ZiAmJiAh
ZGF0YWJhc2UtPnByaXYtPmltcG9ydEZpbmlzaGVkKSB7CisgICAgICAgIC8qIEltcG9ydCBpcyBv
bmdvaW5nLCB0aGVyZSBtaWdodCBiZSBhbiBpY29uICovCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlcihyZXN1bHQu
Z2V0KCksIHBpeGJ1ZiwgMCk7CisgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlKHJl
c3VsdC5nZXQoKSk7CisKKyAgICBBU1NFUlQoZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29ucy0+
ZGF0YSA9PSByZXF1ZXN0KTsKKyAgICBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25zID0gZ19s
aXN0X2RlbGV0ZV9saW5rKGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvbnMsIGRhdGFiYXNlLT5w
cml2LT5wZW5kaW5nSWNvbnMpOworICAgIGRlbGV0ZSByZXF1ZXN0OworfQorCisvKioKKyAqIHdl
YmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5pc2g6CisgKiBAZGF0YWJhc2U6
IGEgI1dlYktpdEljb25EYXRhYmFzZQorICogQHJlc3VsdDogQSAjR0FzeW5jUmVzdWx0IG9idGFp
bmVkIGZyb20gdGhlICNHQXN5bmNSZWFkeUNhbGxiYWNrIHBhc3NlZCB0byB3ZWJraXRfaWNvbl9k
YXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmMoKQorICogQGVycm9yOiBSZXR1cm4gbG9jYXRp
b24gZm9yIGVycm9yIG9yICVOVUxMLgorICoKKyAqIEZpbmlzaGVzIGFuIG9wZXJhdGlvbiBzdGFy
dGVkIHdpdGggd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2FzeW5jKCkuCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyByZWZlcmVuY2UgdG8gYSAjR2Rr
UGl4YnVmLCBvciAlTlVMTC4KKyAqCisgKiBTaW5jZTogMS41LjIKKyAqLworR2RrUGl4YnVmKiB3
ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfZmluaXNoKFdlYktpdEljb25EYXRh
YmFzZSogZGF0YWJhc2UsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBHRXJyb3IqKiBlcnJvcikKK3sK
KyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIHNpbXBsZVJlc3VsdCA9IEdfU0lNUExFX0FTWU5DX1JF
U1VMVChyZXN1bHQpOworICAgIGdfd2Fybl9pZl9mYWlsKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9n
ZXRfc291cmNlX3RhZyhzaW1wbGVSZXN1bHQpID09IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9p
Y29uX3BpeGJ1Zl9hc3luYyk7CisKKyAgICBpZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Byb3Bh
Z2F0ZV9lcnJvcihzaW1wbGVSZXN1bHQsIGVycm9yKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
R2RrUGl4YnVmKiBwaXhidWYgPSBpY29uLT5nZXRHZGtQaXhidWYoKTsKLSAgICBpZiAoIXBpeGJ1
ZikKKworICAgIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUgPSBzdGF0aWNfY2FzdDxHQ2FuY2Vs
bGFibGUqPihnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChzaW1wbGVSZXN1bHQpLCAiY2FuY2Vs
bGFibGUiKSk7CisgICAgaWYgKGNhbmNlbGxhYmxlICYmIGdfY2FuY2VsbGFibGVfaXNfY2FuY2Vs
bGVkKGNhbmNlbGxhYmxlKSkgeworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBH
X0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCwgIk9wZXJhdGlvbiB3YXMgY2FuY2VsbGVk
Iik7CiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxHZGtQaXhidWYq
PihnX29iamVjdF9yZWYocGl4YnVmKSk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEdka1BpeGJ1Zio+KGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dwb2ludGVyKHNp
bXBsZVJlc3VsdCkpOworfQorCit2b2lkIF93ZWJraXRfaWNvbl9kYXRhYmFzZV9wcm9jZXNzX3Bl
bmRpbmdfaWNvbnNfZm9yX3VyaShXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBT
dHJpbmcmIHBhZ2VVUkkpCit7CisgICAgR0xpc3QqIGljb25zID0gZGF0YWJhc2UtPnByaXYtPnBl
bmRpbmdJY29uczsKKyAgICB3aGlsZSAoaWNvbnMpIHsKKyAgICAgICAgR0xpc3QqIG5leHQgPSBn
X2xpc3RfbmV4dChpY29ucyk7CisKKyAgICAgICAgUGVuZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0
ID0gc3RhdGljX2Nhc3Q8UGVuZGluZ0ljb25SZXF1ZXN0Kj4oaWNvbnMtPmRhdGEpOworICAgICAg
ICBpZiAocmVxdWVzdC0+cGFnZVVSSSgpID09IHBhZ2VVUkkpIHsKKyAgICAgICAgICAgIGRhdGFi
YXNlLT5wcml2LT5wZW5kaW5nSWNvbnMgPSBnX2xpc3RfcmVtb3ZlX2xpbmsoZGF0YWJhc2UtPnBy
aXYtPnBlbmRpbmdJY29ucywgaWNvbnMpOworICAgICAgICAgICAgaWYgKHJlcXVlc3QtPmZyYW1l
TG9hZGVyQ2xpZW50KCkpCisgICAgICAgICAgICAgICAgcmVxdWVzdC0+ZnJhbWVMb2FkZXJDbGll
bnQoKS0+ZGlzcGF0Y2hEaWRSZWNlaXZlSWNvbigpOworICAgICAgICAgICAgZWxzZSBpZiAocmVx
dWVzdC0+YXN5bmNSZXN1bHQoKSkgeworICAgICAgICAgICAgICAgIEdTaW1wbGVBc3luY1Jlc3Vs
dCogcmVzdWx0ID0gcmVxdWVzdC0+YXN5bmNSZXN1bHQoKTsKKyAgICAgICAgICAgICAgICBnX3Np
bXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlcihyZXN1bHQsIGdldF9pY29uX3Bp
eGJ1ZihkYXRhYmFzZSwgcGFnZVVSSSksIDApOworICAgICAgICAgICAgICAgIGdfc2ltcGxlX2Fz
eW5jX3Jlc3VsdF9jb21wbGV0ZShyZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZGVsZXRlIHJlcXVlc3Q7CisgICAgICAgICAgICBnX2xpc3RfZnJlZShpY29ucyk7CisgICAgICAg
IH0KKworICAgICAgICBpY29ucyA9IG5leHQ7CisgICAgfQorfQorCit2b2lkIF93ZWJraXRfaWNv
bl9kYXRhYmFzZV9yZWdpc3Rlcl9mb3JfaWNvbl9ub3RpZmljYXRpb24oV2ViS2l0SWNvbkRhdGFi
YXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkksIFdlYkNvcmU6OkZyYW1lTG9hZGVy
Q2xpZW50KiBjbGllbnQpCit7CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0ID0gbmV3
IFBlbmRpbmdJY29uUmVxdWVzdChwYWdlVVJJLCBjbGllbnQpOworICAgIGRhdGFiYXNlLT5wcml2
LT5wZW5kaW5nSWNvbnMgPSBnX2xpc3RfcHJlcGVuZChkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0lj
b25zLCByZXF1ZXN0KTsKK30KKwordm9pZCBfd2Via2l0X2ljb25fZGF0YWJhc2VfdW5yZWdpc3Rl
cl9mb3JfaWNvbl9ub3RpZmljYXRpb24oV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29u
c3QgZ2NoYXIqIHBhZ2VVUkksIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50KiBjbGllbnQpCit7
CisgICAgR0xpc3QqIGljb25zID0gZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uczsKKyAgICB3
aGlsZSAoaWNvbnMpIHsKKyAgICAgICAgR0xpc3QqIG5leHQgPSBnX2xpc3RfbmV4dChpY29ucyk7
CisKKyAgICAgICAgUGVuZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0ID0gc3RhdGljX2Nhc3Q8UGVu
ZGluZ0ljb25SZXF1ZXN0Kj4oaWNvbnMtPmRhdGEpOworICAgICAgICBpZiAocmVxdWVzdC0+cGFn
ZVVSSSgpID09IHBhZ2VVUkkgJiYgcmVxdWVzdC0+ZnJhbWVMb2FkZXJDbGllbnQoKSA9PSBjbGll
bnQpIHsKKyAgICAgICAgICAgIGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvbnMgPSBnX2xpc3Rf
cmVtb3ZlX2xpbmsoZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29ucywgaWNvbnMpOworICAgICAg
ICAgICAgZGVsZXRlIHJlcXVlc3Q7CisgICAgICAgICAgICBnX2xpc3RfZnJlZShpY29ucyk7Cisg
ICAgICAgIH0KKworICAgICAgICBpY29ucyA9IG5leHQ7CisgICAgfQorfQorCit2b2lkIF93ZWJr
aXRfaWNvbl9kYXRhYmFzZV9pbXBvcnRfZmluaXNoZWQoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRh
YmFzZSkKK3sKKyAgICBkYXRhYmFzZS0+cHJpdi0+aW1wb3J0RmluaXNoZWQgPSBUUlVFOworCisg
ICAgLy8gSW1wb3J0IGlzIGNvbXBsZXRlLCBwcm9jZXNzIHBlbmRpbmcgcmVxdWVzdHMgZm9yIHBh
Z2VzIHRoYXQgYXJlIG5vdCBpbiB0aGUgZGF0YWJhc2UsCisgICAgLy8gc2luY2UgZGlkSW1wb3J0
SWNvbkRhdGFGb3JQYWdlVVJMKCkgd2lsbCBuZXZlciBiZSBjYWxsZWQgZm9yIHRoZW0uCisgICAg
Ly8gRm9yIGFzeW5jIHJlcXVlc3RzIHdlIG5lZWQgdG8gY29tcGxldGUgdGhlIG9wZXJhdGlvbiwg
d2hpbGUgZm9yIGZyYW1lIGxvYWRlcgorICAgIC8vIHJlcXVlc3RzIHdlIG9ubHkgbmVlZCB0byBk
ZWxldGUgdGhlIHJlcXVlc3Qgc28gdGhhdCBpY29uLWxvYWRlZCB3b24ndCBiZSBlbWl0dGVkLgor
ICAgIEdMaXN0KiBpY29ucyA9IGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvbnM7CisgICAgd2hp
bGUgKGljb25zKSB7CisgICAgICAgIEdMaXN0KiBuZXh0ID0gZ19saXN0X25leHQoaWNvbnMpOwor
CisgICAgICAgIFBlbmRpbmdJY29uUmVxdWVzdCogcmVxdWVzdCA9IHN0YXRpY19jYXN0PFBlbmRp
bmdJY29uUmVxdWVzdCo+KGljb25zLT5kYXRhKTsKKyAgICAgICAgU3RyaW5nIGljb25VUkwgPSBX
ZWJDb3JlOjppY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKHJlcXVl
c3QtPnBhZ2VVUkkoKSk7CisgICAgICAgIGlmIChpY29uVVJMLmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29ucyA9IGdfbGlzdF9yZW1vdmVfbGluayhk
YXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25zLCBpY29ucyk7CisgICAgICAgICAgICBHU2ltcGxl
QXN5bmNSZXN1bHQqIHJlc3VsdCA9IHJlcXVlc3QtPmFzeW5jUmVzdWx0KCk7CisgICAgICAgICAg
ICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Nl
dF9vcF9yZXNfZ3BvaW50ZXIocmVzdWx0LCAwLCAwKTsKKyAgICAgICAgICAgICAgICBnX3NpbXBs
ZV9hc3luY19yZXN1bHRfY29tcGxldGUocmVzdWx0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGRlbGV0ZSByZXF1ZXN0OworICAgICAgICAgICAgZ19saXN0X2ZyZWUoaWNvbnMpOworICAg
ICAgICB9CisgICAgICAgIGljb25zID0gbmV4dDsKKyAgICB9CiB9CiAKIC8qKgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oIGIvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oCmluZGV4IDVlYWQ2MDMuLjVi
Y2QyMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0
YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNl
LmgKQEAgLTUzLDI1ICs1MywzNyBAQCBzdHJ1Y3QgX1dlYktpdEljb25EYXRhYmFzZUNsYXNzIHsK
IH07CiAKIFdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF90eXBlICAg
ICAgICAgICAgKHZvaWQpOword2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3R5cGUgICAgICAgICAg
ICAgICh2b2lkKTsKIAogV0VCS0lUX0FQSSBjb25zdCBnY2hhcioKLXdlYmtpdF9pY29uX2RhdGFi
YXNlX2dldF9wYXRoICAgICAgICAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpOwor
d2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3BhdGggICAgICAgICAgICAgIChXZWJLaXRJY29uRGF0
YWJhc2UqIGRhdGFiYXNlKTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfaWNvbl9kYXRhYmFz
ZV9zZXRfcGF0aCAgICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAg
ICBwYXRoKTsKK3dlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoICAgICAgICAgICAgICAoV2Vi
S2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAgICBwYXRoKTsKIAogV0VCS0lUX0FQSSBn
Y2hhcioKLXdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3VyaSAgICAgICAgKFdlYktpdElj
b25EYXRhYmFzZSogZGF0YWJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhZ2VfdXJpKTsKK3dlYmtpdF9pY29uX2RhdGFi
YXNlX2dldF9pY29uX3VyaSAgICAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIq
ICAgICAgICBwYWdlX3VyaSk7CiAKIFdFQktJVF9BUEkgR2RrUGl4YnVmKgotd2Via2l0X2ljb25f
ZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFy
KiAgICAgICAgcGFnZV91cmkpOword2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVm
ICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhZ2VfdXJpKTsK
IAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhciAgICAgICAgICAg
ICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKTsKK3dlYmtpdF9pY29uX2RhdGFiYXNl
X2dldF9pY29uX3BpeGJ1Zl9hc3luYyAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAg
ICAgICBwYWdlX3VyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0NhbmNlbGxhYmxlKiAgICAgICBjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAg
ICAgICB1c2VyX2RhdGEpOworCitXRUJLSVRfQVBJIEdka1BpeGJ1ZioKK3dlYmtpdF9pY29uX2Rh
dGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5pc2goV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVz
dWx0KiAgICAgICByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdFcnJvcioqICAgICAgICAgICAgZXJyb3IpOworCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9pY29uX2RhdGFiYXNlX2NsZWFyICAgICAgICAgICAgICAgICAoV2ViS2l0SWNvbkRhdGFi
YXNlKiBkYXRhYmFzZSk7CiAKIEdfRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmRlNDgwNTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlcHJpdmF0ZS5oCkBAIC0wLDAgKzEsOTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXRp
Y29uZGF0YWJhc2Vwcml2YXRlX2gKKyNkZWZpbmUgd2Via2l0aWNvbmRhdGFiYXNlcHJpdmF0ZV9o
CisKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIkdSZWZQdHIuaCIK
KyNpbmNsdWRlICJJY29uRGF0YWJhc2VDbGllbnQuaCIKKyNpbmNsdWRlICJ3ZWJraXRnbG9iYWxz
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEZyYW1lTG9hZGVyQ2xpZW50OworY2xh
c3MgSWNvbkRhdGFiYXNlQ2xpZW50OworfQorCitleHRlcm4gIkMiIHsKK3ZvaWQgX3dlYmtpdF9p
Y29uX2RhdGFiYXNlX3JlZ2lzdGVyX2Zvcl9pY29uX25vdGlmaWNhdGlvbihXZWJLaXRJY29uRGF0
YWJhc2UqLCBjb25zdCBnY2hhciogcGFnZVVSSSwgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQq
KTsKK3ZvaWQgX3dlYmtpdF9pY29uX2RhdGFiYXNlX3VucmVnaXN0ZXJfZm9yX2ljb25fbm90aWZp
Y2F0aW9uKFdlYktpdEljb25EYXRhYmFzZSosIGNvbnN0IGdjaGFyKiBwYWdlVVJJLCBXZWJDb3Jl
OjpGcmFtZUxvYWRlckNsaWVudCopOwordm9pZCBfd2Via2l0X2ljb25fZGF0YWJhc2VfcHJvY2Vz
c19wZW5kaW5nX2ljb25zX2Zvcl91cmkoV2ViS2l0SWNvbkRhdGFiYXNlKiwgY29uc3QgU3RyaW5n
JiBwYWdlVVJJKTsKK3ZvaWQgX3dlYmtpdF9pY29uX2RhdGFiYXNlX2ltcG9ydF9maW5pc2hlZChX
ZWJLaXRJY29uRGF0YWJhc2UqKTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIElj
b25EYXRhYmFzZUNsaWVudEd0ayA6IHB1YmxpYyBXZWJDb3JlOjpJY29uRGF0YWJhc2VDbGllbnQg
eworICAgIHB1YmxpYzoKKyAgICAvLyBJY29uRGF0YWJhc2VDbGllbnQgaW50ZXJmYWNlCisgICAg
dmlydHVhbCBib29sIHBlcmZvcm1JbXBvcnQoKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVh
bCB2b2lkIGRpZFJlbW92ZUFsbEljb25zKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBkaWRJbXBv
cnRJY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKSB7IH07CisgICAgdmlydHVhbCB2b2lk
IGRpZEltcG9ydEljb25EYXRhRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIFVSTCkKKyAgICB7Cisg
ICAgICAgIF93ZWJraXRfaWNvbl9kYXRhYmFzZV9wcm9jZXNzX3BlbmRpbmdfaWNvbnNfZm9yX3Vy
aSh3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKSwgVVJMKTsKKyAgICB9CisgICAgdmlydHVhbCB2
b2lkIGRpZENoYW5nZUljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpIHsgfTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkRmluaXNoVVJMSW1wb3J0KCkgeyBfd2Via2l0X2ljb25fZGF0YWJhc2VfaW1w
b3J0X2ZpbmlzaGVkKHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpKTsgfQorfTsKKworc3RydWN0
IFBlbmRpbmdJY29uUmVxdWVzdCB7CitwdWJsaWM6CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0KGNv
bnN0IGNoYXIqIHBhZ2VVUkksIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50KiBmcmFtZUxvYWRl
ckNsaWVudCkKKyAgICAgICAgOiBtX3BhZ2VVUkkocGFnZVVSSSkKKyAgICAgICAgLCBtX2ZyYW1l
TG9hZGVyQ2xpZW50KGZyYW1lTG9hZGVyQ2xpZW50KQorICAgICAgICAsIG1fYXN5bmNSZXN1bHQo
MCkKKyAgICB7CisgICAgfQorCisgICAgUGVuZGluZ0ljb25SZXF1ZXN0KGNvbnN0IGNoYXIqIHBh
Z2VVUkksIEdTaW1wbGVBc3luY1Jlc3VsdCogcmVzdWx0KQorICAgICAgICA6IG1fcGFnZVVSSShw
YWdlVVJJKQorICAgICAgICAsIG1fZnJhbWVMb2FkZXJDbGllbnQoMCkKKyAgICAgICAgLCBtX2Fz
eW5jUmVzdWx0KHJlc3VsdCkKKyAgICB7CisgICAgfQorCisgICAgflBlbmRpbmdJY29uUmVxdWVz
dCgpCisgICAgeworICAgICAgICBpZiAobV9jYW5jZWxsZWRfaWQgPiAwKQorICAgICAgICAgICAg
Z19jYW5jZWxsYWJsZV9kaXNjb25uZWN0KG1fY2FuY2VsbGFibGUuZ2V0KCksIG1fY2FuY2VsbGVk
X2lkKTsKKyAgICB9CisKKyAgICBjb25zdCBTdHJpbmcmIHBhZ2VVUkkoKSB7IHJldHVybiBtX3Bh
Z2VVUkk7IH0KKyAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudCogZnJhbWVMb2FkZXJDbGll
bnQoKSB7IHJldHVybiBtX2ZyYW1lTG9hZGVyQ2xpZW50OyB9CisgICAgR1NpbXBsZUFzeW5jUmVz
dWx0KiBhc3luY1Jlc3VsdCgpIHsgcmV0dXJuIG1fYXN5bmNSZXN1bHQuZ2V0KCk7IH0KKworICAg
IFN0cmluZyBtX3BhZ2VVUkk7CisgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQqIG1fZnJh
bWVMb2FkZXJDbGllbnQ7CisgICAgR1JlZlB0cjxHU2ltcGxlQXN5bmNSZXN1bHQ+IG1fYXN5bmNS
ZXN1bHQ7CisgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2FuY2VsbGFibGU7CisgICAgZ3Vs
b25nIG1fY2FuY2VsbGVkX2lkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyB3ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0d0a0xh
dW5jaGVyL21haW4uYyBiL1Rvb2xzL0d0a0xhdW5jaGVyL21haW4uYwppbmRleCBlZGM4ZTJmLi5h
NjA0ZWI1IDEwMDY0NAotLS0gYS9Ub29scy9HdGtMYXVuY2hlci9tYWluLmMKKysrIGIvVG9vbHMv
R3RrTGF1bmNoZXIvbWFpbi5jCkBAIC00MCw2ICs0MCw3IEBAIHN0YXRpYyB2b2lkIGFjdGl2YXRl
VXJpRW50cnlDYihHdGtXaWRnZXQqIGVudHJ5LCBncG9pbnRlciBkYXRhKQogICAgIFdlYktpdFdl
YlZpZXcgKndlYlZpZXcgPSBnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChlbnRyeSksICJ3ZWIt
dmlldyIpOwogICAgIGNvbnN0IGdjaGFyKiB1cmkgPSBndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VO
VFJZKGVudHJ5KSk7CiAgICAgZ19hc3NlcnQodXJpKTsKKyAgICBndGtfZW50cnlfc2V0X2ljb25f
ZnJvbV9waXhidWYoR1RLX0VOVFJZKGVudHJ5KSwgR1RLX0VOVFJZX0lDT05fUFJJTUFSWSwgMCk7
CiAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHdlYlZpZXcsIHVyaSk7CiB9CiAKQEAgLTEy
NSw2ICsxMjYsMTQgQEAgc3RhdGljIGdib29sZWFuIGNsb3NlV2ViVmlld0NiKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIEd0a1dpZGdldCogd2luZG93KQogICAgIGd0a193aWRnZXRfZGVzdHJveSh3
aW5kb3cpOwogICAgIHJldHVybiBUUlVFOwogfQorCitzdGF0aWMgdm9pZCBpY29uTG9hZGVkQ2Io
V2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciogaWNvblVSSSwgR3RrV2lkZ2V0KiB1
cmlFbnRyeSkKK3sKKyAgICBHZGtQaXhidWYgKmljb24gPSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9n
ZXRfaWNvbl9waXhidWYod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCksIHdlYmtpdF93ZWJfdmll
d19nZXRfdXJpKHdlYlZpZXcpKTsKKyAgICBndGtfZW50cnlfc2V0X2ljb25fZnJvbV9waXhidWYo
R1RLX0VOVFJZKHVyaUVudHJ5KSwgR1RLX0VOVFJZX0lDT05fUFJJTUFSWSwgaWNvbik7CisgICAg
aWYgKGljb24pCisgICAgICAgIGdfb2JqZWN0X3VucmVmKGljb24pOworfQogI2VuZGlmCiAKIHN0
YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZUJyb3dzZXIoR3RrV2lkZ2V0KiB3aW5kb3csIEd0a1dpZGdl
dCogdXJpRW50cnksIEd0a1dpZGdldCogc3RhdHVzYmFyLCBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
KQpAQCAtMTM4LDYgKzE0Nyw3IEBAIHN0YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZUJyb3dzZXIoR3Rr
V2lkZ2V0KiB3aW5kb3csIEd0a1dpZGdldCogdXJpRW50cnksIEd0a1dpZGdlCiAgICAgZ19zaWdu
YWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojp0aXRsZSIsIEdfQ0FMTEJBQ0sobm90aWZ5VGl0
bGVDYiksIHdpbmRvdyk7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojps
b2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobm90aWZ5TG9hZFN0YXR1c0NiKSwgdXJpRW50cnkpOwog
ICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgIm5vdGlmeTo6cHJvZ3Jlc3MiLCBHX0NBTExC
QUNLKG5vdGlmeVByb2dyZXNzQ2IpLCB3aW5kb3cpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2Vi
VmlldywgImljb24tbG9hZGVkIiwgR19DQUxMQkFDSyhpY29uTG9hZGVkQ2IpLCB1cmlFbnRyeSk7
CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiaG92ZXJpbmctb3Zlci1saW5rIiwgR19D
QUxMQkFDSyhsaW5rSG92ZXJDYiksIHN0YXR1c2Jhcik7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3
ZWJWaWV3LCAiY3JlYXRlLXdlYi12aWV3IiwgR19DQUxMQkFDSyhjcmVhdGVXZWJWaWV3Q2IpLCB3
aW5kb3cpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgIndlYi12aWV3LXJlYWR5Iiwg
R19DQUxMQkFDSyh3ZWJWaWV3UmVhZHlDYiksIHdpbmRvdyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100462</attachid>
            <date>2011-07-12 03:48:36 -0700</date>
            <delta_ts>2011-07-14 06:01:21 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>icon-database3.diff</filename>
            <type>text/plain</type>
            <size>36283</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwppbmRleCA4MzA4ZTk1Li42NWNjNjVjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNzEgQEAKKzIwMTEtMDctMTEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFdlYktpdEljb25EYXRhYmFzZSBkb2Vzbid0
IGtlZXAgaWNvbnMgY2FjaGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NjIwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24u
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6cmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0
aW9uKTogV2hlbiB0aGUKKyAgICAgICAgaWNvbiBpcyBpbiB0aGUgZGF0YWJhc2UsIGJ1dCB0aGUg
ZGF0YSBpcyBub3Qgc3RpbGwgYXZhaWxhYmxlLAorICAgICAgICByZWdpc3RlciBhIG5vdGlmaWNh
dGlvbiB0byBkaXNwYXRjaCByZWNlaXZlZCBpY29uIHdoZW4gdGhlIGljb24KKyAgICAgICAgZGF0
YSBpcyBhdmFpbGFibGUuCisgICAgICAgICogdGVzdHMvdGVzdGljb25kYXRhYmFzZS5jOiBBZGRl
ZC4KKyAgICAgICAgKGRlbGV0ZV9kYl9maWxlX2lmX2V4aXN0cyk6CisgICAgICAgICh0ZXN0X3dl
YmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKToKKyAgICAgICAgKGljb25fZGF0YWJhc2VfZ2V0
X2ljb25fdmFsaWRfY2FsbGJhY2spOgorICAgICAgICAoaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9p
bnZhbGlkX2NhbGxiYWNrKToKKyAgICAgICAgKGljb25fZGF0YWJhc2VfZ2V0X2ljb25fY2FuY2Vs
bGVkX2NhbGxiYWNrKToKKyAgICAgICAgKGlkbGVfcXVpdF9sb29wX2NiKToKKyAgICAgICAgKGxv
YWRfdXJpKToKKyAgICAgICAgKGljb25fZGF0YWJhc2VfZ2V0X2ljb25fdmFsaWRfaWRsZSk6Cisg
ICAgICAgIChpY29uX2RhdGFiYXNlX2dldF9pY29uX2ludmFsaWRfaWRsZSk6CisgICAgICAgIChp
Y29uX2RhdGFiYXNlX2dldF9pY29uX2NhbmNlbGxlZF9pZGxlKToKKyAgICAgICAgKHRlc3Rfd2Vi
a2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fYXN5bmMpOgorICAgICAgICAodGVzdF93ZWJraXRf
aWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmkpOgorICAgICAgICAodGVzdF93ZWJraXRfaWNvbl9k
YXRhYmFzZV9yZW1vdmVfYWxsKToKKyAgICAgICAgKHRlc3Rfd2Via2l0X2ljb25fZGF0YWJhc2Vf
Y2xvc2VfZGIpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogd2Via2l0L3dlYmtpdGljb25k
YXRhYmFzZS5jcHA6CisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aCk6IERl
bGF5IGRhdGFiYXNlIGNsZWFudXAgYnkgZGVmYXVsdAorICAgICAgICB0byBtYWtlIGljb25zIHBl
cnNpc3RlbnQgaW4gdGhlIGRhdGFiYXNlLgorICAgICAgICAoZ2V0X2ljb25fcGl4YnVmKTogSGVs
cGVyIGZ1bmN0aW9uIHRvIGNhbGwKKyAgICAgICAgSWNvbkRhdGFiYXNlOjpzeW5jaHJvbm91c0lj
b25VUkxGb3JQYWdlVVJMKCkuCisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl9waXhidWYpOiBGaXggZG9jIGNvbW1lbnRzLgorICAgICAgICAoZ2V0X2ljb25fcGl4YnVmX2Nh
bmNlbGxlZF9pZGxlKTogTWFyayBvcGVyYXRpb24gYXMgY2FuY2VsbGVkIGFuZAorICAgICAgICBj
b21wbGV0ZSBpdC4KKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1
Zl9jYW5jZWxsZWQpOgorICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4
YnVmX2FzeW5jKTogTmV3IG1ldGhvZCB0bworICAgICAgICBhc3luY2hyb25vdXNseSBnZXQgYW4g
aWNvbi4KKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5p
c2gpOiBGaW5pc2hlcyBhbgorICAgICAgICBvcGVyYXRpb24gc3RhcnRlZCB3aXRoIHdlYmtpdF9p
Y29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYygpLgorICAgICAgICAoX3dlYmtpdF9p
Y29uX2RhdGFiYXNlX3Byb2Nlc3NfcGVuZGluZ19pY29uc19mb3JfdXJpKTogUHJvY2VzcworICAg
ICAgICBwZW5kaW5nIHJlcXVlc3RzIGZvciB0aGUgZ2l2ZW4gdXJpLCBmb3IgYXN5bmMgb3BlcmF0
aW9uIHJlcXVlc3RzIGl0CisgICAgICAgIGNvbXBsZXRlcyB0aGUgb3BlcmF0aW9uLCB3aGlsZSBm
b3IgZnJhbWUgbG9hZGVyIHJlcXVlc3RzIGl0IGNhbGxzCisgICAgICAgIEZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERpZFJlY2VpdmVJY29uKCkgdG8gbm90aWZ5IHRoZSBmcmFtZQorICAgICAg
ICBsb2FkZXIgdGhhdCBoZSBpY29uIGlzIG5vdyBhdmFpbGFibGUuCisgICAgICAgIChfd2Via2l0
X2ljb25fZGF0YWJhc2VfcmVnaXN0ZXJfZm9yX2ljb25fbm90aWZpY2F0aW9uKTogUmVnaXN0ZXIK
KyAgICAgICAgZnJhbWUgbG9hZGVyIHRvIGJlIG5vdGlmaWVkIHdoZW4gdGhlIGljb24gZGF0YSBp
cyBhdmFpbGFibGUuCisgICAgICAgIChfd2Via2l0X2ljb25fZGF0YWJhc2VfdW5yZWdpc3Rlcl9m
b3JfaWNvbl9ub3RpZmljYXRpb24pOgorICAgICAgICBVbnJlZ2lzdGVyIGEgZnJhbWUgbG9hZGVy
IG5vdGlmaWNhdGlvbiByZXF1ZXN0LgorICAgICAgICAoX3dlYmtpdF9pY29uX2RhdGFiYXNlX2lt
cG9ydF9maW5pc2hlZCk6IFdoZW4gaW1wb3J0IGlzIGZpbmlzaGVkLAorICAgICAgICBjaGVjayBw
ZW5kaW5nIHJlcXVlc3RzIHRvIHByb2Nlc3MgYW5kIGRlbGV0ZSB0aGUgb25lcyB0aGF0IGFzayBm
b3IKKyAgICAgICAgYW4gaWNvbiB0aGF0IGRvZXNuJ3QgZXhpc3QgaW4gZGF0YWJhc2UuCisgICAg
ICAgICogd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oOgorICAgICAgICAqIHdlYmtpdC93ZWJr
aXRpY29uZGF0YWJhc2Vwcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJY29uRGF0
YWJhc2VDbGllbnRHdGs6OnBlcmZvcm1JbXBvcnQpOgorICAgICAgICAoV2ViS2l0OjpJY29uRGF0
YWJhc2VDbGllbnRHdGs6OmRpZFJlbW92ZUFsbEljb25zKToKKyAgICAgICAgKFdlYktpdDo6SWNv
bkRhdGFiYXNlQ2xpZW50R3RrOjpkaWRJbXBvcnRJY29uVVJMRm9yUGFnZVVSTCk6CisgICAgICAg
IChXZWJLaXQ6Okljb25EYXRhYmFzZUNsaWVudEd0azo6ZGlkSW1wb3J0SWNvbkRhdGFGb3JQYWdl
VVJMKToKKyAgICAgICAgKFdlYktpdDo6SWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpkaWRDaGFuZ2VJ
Y29uRm9yUGFnZVVSTCk6CisgICAgICAgIChXZWJLaXQ6Okljb25EYXRhYmFzZUNsaWVudEd0azo6
ZGlkRmluaXNoVVJMSW1wb3J0KToKKyAgICAgICAgKFdlYktpdDo6UGVuZGluZ0ljb25SZXF1ZXN0
OjpQZW5kaW5nSWNvblJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpQZW5kaW5nSWNvblJlcXVl
c3Q6On5QZW5kaW5nSWNvblJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpQZW5kaW5nSWNvblJl
cXVlc3Q6OnBhZ2VVUkkpOgorICAgICAgICAoV2ViS2l0OjpQZW5kaW5nSWNvblJlcXVlc3Q6OmZy
YW1lTG9hZGVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6UGVuZGluZ0ljb25SZXF1ZXN0Ojph
c3luY1Jlc3VsdCk6CisKIDIwMTEtMDctMDggIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGd1c3Rh
dm8ubm9yb25oYUBjb2xsYWJvcmEuY29tPgogCiAgICAgICAgIFtHVEtdIHRlc3R3ZWJ2aWV3IEFQ
SSB0ZXN0IGZhaWxzIGFmdGVyIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzkwNDcx
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTFl
MzJmNC4uNTQxMzViYyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTA3LTExICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBXZWJLaXRJY29uRGF0YWJh
c2UgZG9lc24ndCBrZWVwIGljb25zIGNhY2hlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyMDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZmF2aWNvbnMgaW4gR3RrTGF1bmNo
ZXIuCisKKyAgICAgICAgKiBHdGtMYXVuY2hlci9tYWluLmM6CisgICAgICAgIChhY3RpdmF0ZVVy
aUVudHJ5Q2IpOgorICAgICAgICAoaWNvbkxvYWRlZENiKToKKyAgICAgICAgKGNyZWF0ZUJyb3dz
ZXIpOgorCiAyMDExLTA3LTEwICBLZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBMZXQgcGx1Z2lucyBwYXJ0aWNpcGF0ZSBpbiBmb3JtIHN1Ym1pc3Npb24K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dl
YktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggNTFjN2M3Zi4uZmQ3ZjBhZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdC9n
dGsvR05VbWFrZWZpbGUuYW0KQEAgLTIxNiw2ICsyMTYsNyBAQCB3ZWJraXRndGtfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuY3BwIFwK
IAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aGl0dGVzdHJlc3VsdHByaXZhdGUuaCBc
CiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAgXAorCVNv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlLmggXAogCVNv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5jcHAgXAogCVNvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdHByaXZhdGUuaCBcCiAJU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXNwb25zZS5jcHAgXApAQCAtNDMy
LDYgKzQzMyw3IEBAIFRFU1RfUFJPR1MgKz0gXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0ZG9t
ZG9td2luZG93IFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdGRvbW5vZGUgXAogCVByb2dyYW1z
L3VuaXR0ZXN0cy90ZXN0aHR0cGJhY2tlbmQgXAorCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0aWNv
bmRhdGFiYXNlIFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdGxvYWRpbmcgXAogCVByb2dyYW1z
L3VuaXR0ZXN0cy90ZXN0Z2xvYmFscyBcCiAJUHJvZ3JhbXMvdW5pdHRlc3RzL3Rlc3RtaW1laGFu
ZGxpbmcgXApAQCAtNDc5LDYgKzQ4MSwxMSBAQCBQcm9ncmFtc191bml0dGVzdHNfdGVzdGh0dHBi
YWNrZW5kX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKIFByb2dyYW1zX3VuaXR0ZXN0
c190ZXN0aHR0cGJhY2tlbmRfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKIFByb2dyYW1z
X3VuaXR0ZXN0c190ZXN0aHR0cGJhY2tlbmRfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxh
Z3MpCiAKK1Byb2dyYW1zX3VuaXR0ZXN0c190ZXN0aWNvbmRhdGFiYXNlX1NPVVJDRVMgPSBTb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0aWNvbmRhdGFiYXNlLmMKK1Byb2dyYW1zX3VuaXR0ZXN0
c190ZXN0aWNvbmRhdGFiYXNlX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKK1Byb2dy
YW1zX3VuaXR0ZXN0c190ZXN0aWNvbmRhdGFiYXNlX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRh
ZGQpCitQcm9ncmFtc191bml0dGVzdHNfdGVzdGljb25kYXRhYmFzZV9MREZMQUdTID0gJCh3ZWJr
aXRfdGVzdHNfbGRmbGFncykKKwogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RnbG9iYWxzX1NPVVJD
RVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Z2xvYmFscy5jCiBQcm9ncmFtc191bml0
dGVzdHNfdGVzdGdsb2JhbHNfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQogUHJvZ3Jh
bXNfdW5pdHRlc3RzX3Rlc3RnbG9iYWxzX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudEd0ay5jcHAKaW5kZXggMzE2NDI1Yy4uNDc2Mzk4OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNw
cApAQCAtNjcsNiArNjcsNyBAQAogI2luY2x1ZGUgIndlYmtpdGdsb2JhbHMuaCIKICNpbmNsdWRl
ICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFzZS5o
IgorI2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFzZXByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJr
aXRuZXR3b3JrcmVxdWVzdC5oIgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmtyZXF1ZXN0cHJpdmF0
ZS5oIgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmtyZXNwb25zZS5oIgpAQCAtNzY1LDcgKzc2Niwx
MiBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKCkg
Y29uc3QKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6cmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0
aW9uKGJvb2wgc2hvdWxkUmVnaXN0ZXIpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBj
b25zdCBnY2hhciogZnJhbWVVUkkgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF91cmkobV9mcmFtZSk7
CisgICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRh
YmFzZSgpOworICAgIGlmIChzaG91bGRSZWdpc3RlcikKKyAgICAgICAgX3dlYmtpdF9pY29uX2Rh
dGFiYXNlX3JlZ2lzdGVyX2Zvcl9pY29uX25vdGlmaWNhdGlvbihkYXRhYmFzZSwgZnJhbWVVUkks
IHRoaXMpOworICAgIGVsc2UKKyAgICAgICAgX3dlYmtpdF9pY29uX2RhdGFiYXNlX3VucmVnaXN0
ZXJfZm9yX2ljb25fbm90aWZpY2F0aW9uKGRhdGFiYXNlLCBmcmFtZVVSSSwgdGhpcyk7CiB9CiAK
IHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9vbCBy
ZWFkeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RpY29uZGF0YWJh
c2UuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RpY29uZGF0YWJhc2UuYwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzdhNmMyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGljb25kYXRhYmFzZS5jCkBAIC0wLDAgKzEsMjI3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJ0ZXN0
X3V0aWxzLmgiCisKKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPGd0ay9ndGsu
aD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigy
LCAxNCwgMCkKK0dNYWluTG9vcCogbG9vcDsKKworc3RhdGljIHZvaWQgZGVsZXRlX2RiX2ZpbGVf
aWZfZXhpc3RzKGNvbnN0IGdjaGFyICpkYl9wYXRoKQoreworICAgIGlmICghZ19maWxlX3Rlc3Qo
ZGJfcGF0aCwgR19GSUxFX1RFU1RfSVNfRElSKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2No
YXIqIGRiX2ZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZShkYl9wYXRoLCAiV2VicGFnZUljb25z
LmRiIiwgTlVMTCk7CisgICAgaWYgKGdfdW5saW5rKGRiX2ZpbGVuYW1lKSA9PSAtMSkgeworICAg
ICAgICBnX2ZyZWUoZGJfZmlsZW5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Z19ybWRpcihkYl9wYXRoKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfaWNvbl9kYXRh
YmFzZV9zZXRfcGF0aCh2b2lkKQoreworICAgIGdjaGFyICpkYl9wYXRoID0gZ19idWlsZF9maWxl
bmFtZShnX2dldF90bXBfZGlyKCksICJ3ZWJraXQtdGVzdGljb25kYXRhYmFzZSIsIE5VTEwpOwor
ICAgIGRlbGV0ZV9kYl9maWxlX2lmX2V4aXN0cyhkYl9wYXRoKTsKKworICAgIFdlYktpdEljb25E
YXRhYmFzZSogaWNvbl9kYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOworICAg
IHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKGljb25fZGF0YWJhc2UsIGRiX3BhdGgpOwor
CisgICAgZ19hc3NlcnRfY21wc3RyKGRiX3BhdGgsID09LCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9n
ZXRfcGF0aChpY29uX2RhdGFiYXNlKSk7CisKKyAgICBnX2ZyZWUoZGJfcGF0aCk7Cit9CisKK3N0
YXRpYyB2b2lkIGljb25fZGF0YWJhc2VfZ2V0X2ljb25fdmFsaWRfY2FsbGJhY2soR09iamVjdCog
c291cmNlX29iamVjdCwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIGdwb2ludGVyIHVzZXJfZGF0YSkK
K3sKKyAgICBnYm9vbGVhbiogYmVlbl9oZXJlID0gKGdib29sZWFuKil1c2VyX2RhdGE7CisgICAg
R0Vycm9yKiBlcnJvciA9IE5VTEw7CisgICAgR2RrUGl4YnVmKiBpY29uID0gd2Via2l0X2ljb25f
ZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2ZpbmlzaChXRUJLSVRfSUNPTl9EQVRBQkFTRShzb3Vy
Y2Vfb2JqZWN0KSwgcmVzdWx0LCAmZXJyb3IpOworICAgIGdfYXNzZXJ0KGljb24pOworICAgIGdf
b2JqZWN0X3VucmVmKGljb24pOworCisgICAgKmJlZW5faGVyZSA9IFRSVUU7CisKKyAgICBnX21h
aW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMgdm9pZCBpY29uX2RhdGFiYXNlX2dldF9p
Y29uX2ludmFsaWRfY2FsbGJhY2soR09iamVjdCogc291cmNlX29iamVjdCwgR0FzeW5jUmVzdWx0
ICpyZXN1bHQsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgICBnYm9vbGVhbiogYmVlbl9oZXJl
ID0gKGdib29sZWFuKil1c2VyX2RhdGE7CisgICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7CisgICAg
R2RrUGl4YnVmKiBpY29uID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2Zp
bmlzaChXRUJLSVRfSUNPTl9EQVRBQkFTRShzb3VyY2Vfb2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Ip
OworICAgIGdfYXNzZXJ0KCFpY29uKTsKKworICAgICpiZWVuX2hlcmUgPSBUUlVFOworCisgICAg
Z19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIHZvaWQgaWNvbl9kYXRhYmFzZV9n
ZXRfaWNvbl9jYW5jZWxsZWRfY2FsbGJhY2soR09iamVjdCogc291cmNlX29iamVjdCwgR0FzeW5j
UmVzdWx0ICpyZXN1bHQsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgICBnYm9vbGVhbiogYmVl
bl9oZXJlID0gKGdib29sZWFuKil1c2VyX2RhdGE7CisgICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7
CisgICAgR2RrUGl4YnVmKiBpY29uID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4
YnVmX2ZpbmlzaChXRUJLSVRfSUNPTl9EQVRBQkFTRShzb3VyY2Vfb2JqZWN0KSwgcmVzdWx0LCAm
ZXJyb3IpOworICAgIGdfYXNzZXJ0KCFpY29uKTsKKyAgICBnX2Fzc2VydChlcnJvciAmJiBnX2Vy
cm9yX21hdGNoZXMoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSk7CisK
KyAgICAqYmVlbl9oZXJlID0gVFJVRTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Cit9
CisKK3N0YXRpYyB2b2lkIGlkbGVfcXVpdF9sb29wX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3
LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBnX21haW5fbG9vcF9x
dWl0KGxvb3ApOworfQorCitzdGF0aWMgdm9pZCBsb2FkX3VyaShjb25zdCBnY2hhciogdXJpKQor
eworICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19QT1BV
UCk7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5k
b3cpLCBHVEtfV0lER0VUKHZpZXcpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7
CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgdXJpKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0KHZpZXcsICJpY29uLWxvYWRlZCIsIEdfQ0FMTEJBQ0sgKGlkbGVfcXVpdF9sb29w
X2NiKSwgTlVMTCk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ3RrX3dpZGdl
dF9kZXN0cm95KHdpbmRvdyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBpY29uX2RhdGFiYXNlX2dl
dF9pY29uX3ZhbGlkX2lkbGUoZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICAgIFdlYktpdEljb25E
YXRhYmFzZSogaWNvbl9kYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOworICAg
IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYyhpY29uX2RhdGFiYXNl
LCAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGljb25fZGF0YWJhc2VfZ2V0X2ljb25fdmFsaWRfY2Fs
bGJhY2ssIHVzZXJfZGF0YSk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9pbnZhbGlkX2lkbGUoZ3BvaW50ZXIgdXNlcl9kYXRh
KQoreworICAgIFdlYktpdEljb25EYXRhYmFzZSogaWNvbl9kYXRhYmFzZSA9IHdlYmtpdF9nZXRf
aWNvbl9kYXRhYmFzZSgpOworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1
Zl9hc3luYyhpY29uX2RhdGFiYXNlLCAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnLyIsIE5VTEws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25fZGF0
YWJhc2VfZ2V0X2ljb25faW52YWxpZF9jYWxsYmFjaywgdXNlcl9kYXRhKTsKKyAgICByZXR1cm4g
RkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBpY29uX2RhdGFiYXNlX2dldF9pY29uX2NhbmNl
bGxlZF9pZGxlKGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgICBXZWJLaXRJY29uRGF0YWJhc2Uq
IGljb25fZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKKyAgICBHQ2FuY2Vs
bGFibGUgKmNhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKKyAgICB3ZWJraXRfaWNv
bl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmMoaWNvbl9kYXRhYmFzZSwgImh0dHA6Ly93
d3cuZ29vZ2xlLmNvbSIsIGNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpY29uX2RhdGFiYXNlX2dldF9pY29uX2NhbmNlbGxlZF9jYWxs
YmFjaywgdXNlcl9kYXRhKTsKKyAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChjYW5jZWxsYWJsZSk7
CisgICAgZ19vYmplY3RfdW5yZWYoY2FuY2VsbGFibGUpOworICAgIHJldHVybiBGQUxTRTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9hc3luYyh2
b2lkKQoreworICAgIFdlYktpdEljb25EYXRhYmFzZSogaWNvbl9kYXRhYmFzZSA9IHdlYmtpdF9n
ZXRfaWNvbl9kYXRhYmFzZSgpOworICAgIGdib29sZWFuIGJlZW5fdG9faWNvbl9jYjsKKworICAg
IGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICAvKiBMb2FkIGdvb2ds
ZSB0byBtYWtlIHN1cmUgZmF2aWNvbiBpcyBhZGRlZCB0byBkYXRhYmFzZSAqLworICAgIGxvYWRf
dXJpKCJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIik7CisKKyAgICBiZWVuX3RvX2ljb25fY2IgPSBG
QUxTRTsKKyAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYylpY29uX2RhdGFiYXNlX2dldF9pY29u
X3ZhbGlkX2lkbGUsICZiZWVuX3RvX2ljb25fY2IpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29w
KTsKKyAgICBnX2Fzc2VydChiZWVuX3RvX2ljb25fY2IpOworCisgICAgYmVlbl90b19pY29uX2Ni
ID0gRkFMU0U7CisgICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMpaWNvbl9kYXRhYmFzZV9nZXRf
aWNvbl9pbnZhbGlkX2lkbGUsICZiZWVuX3RvX2ljb25fY2IpOworICAgIGdfbWFpbl9sb29wX3J1
bihsb29wKTsKKyAgICBnX2Fzc2VydChiZWVuX3RvX2ljb25fY2IpOworCisgICAgLyogQ2xvc2Ug
dGhlIGRhdGFiYXNlIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBnZXQgYW4gaWNvbi4gVGhpcyBpcyBu
b3Qgc3VwcG9zZWQgdG8gaGFwcGVuLAorICAgICAqIHNvIHRoYXQgZXJyb3IgaXMgbm90IGhhbmRs
ZWQsIGl0J3MganVzdCB1c2VkIGhlcmUgdG8gbWFrZSBzdXJlIHRoZSBjYWxsYmFjayBpcyBuZXZl
cgorICAgICAqIGNhbGxlZCBzbyB0aGF0IHdlIGNhbiB0ZXN0IGNhbmNlbGxhdGlvbi4KKyAgICAg
Ki8KKyAgICBnY2hhciAqZGJfcGF0aCA9IGdfc3RyZHVwKHdlYmtpdF9pY29uX2RhdGFiYXNlX2dl
dF9wYXRoKGljb25fZGF0YWJhc2UpKTsKKyAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0
aChpY29uX2RhdGFiYXNlLCBOVUxMKTsKKworICAgIGJlZW5fdG9faWNvbl9jYiA9IEZBTFNFOwor
ICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWljb25fZGF0YWJhc2VfZ2V0X2ljb25fY2FuY2Vs
bGVkX2lkbGUsICZiZWVuX3RvX2ljb25fY2IpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsK
KyAgICBnX2Fzc2VydChiZWVuX3RvX2ljb25fY2IpOworCisgICAgd2Via2l0X2ljb25fZGF0YWJh
c2Vfc2V0X3BhdGgoaWNvbl9kYXRhYmFzZSwgZGJfcGF0aCk7CisgICAgZ19mcmVlKGRiX3BhdGgp
OworCisgICAgLyogR2l2ZSBzb21lIHRpbWUgZm9yIHRoZSBkYXRhYmFzZSB0byBsb2FkICovCisg
ICAgZ191c2xlZXAoMTAwMDApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9pY29uX2Rh
dGFiYXNlX2dldF9pY29uX3VyaSh2b2lkKQoreworICAgIFdlYktpdEljb25EYXRhYmFzZSogaWNv
bl9kYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOworICAgIGdjaGFyKiBpY29u
X3VyaSA9IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3VyaShpY29uX2RhdGFiYXNlLCAi
aHR0cDovL3d3dy5nb29nbGUuY29tLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uX3VyaSwg
PT0sICJodHRwOi8vd3d3Lmdvb2dsZS5lcy9mYXZpY29uLmljbyIpOworICAgIGdfZnJlZShpY29u
X3VyaSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2ljb25fZGF0YWJhc2VfcmVtb3Zl
X2FsbCh2b2lkKQoreworICAgIFdlYktpdEljb25EYXRhYmFzZSogaWNvbl9kYXRhYmFzZSA9IHdl
YmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX2NsZWFy
KGljb25fZGF0YWJhc2UpOworICAgIGdjaGFyKiBpY29uX3VyaSA9IHdlYmtpdF9pY29uX2RhdGFi
YXNlX2dldF9pY29uX3VyaShpY29uX2RhdGFiYXNlLCAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIp
OworICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uX3VyaSwgPT0sICIiKTsKKyAgICBnX2ZyZWUoaWNv
bl91cmkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9pY29uX2RhdGFiYXNlX2Nsb3Nl
X2RiKHZvaWQpCit7CisgICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBpY29uX2RhdGFiYXNlID0gd2Vi
a2l0X2dldF9pY29uX2RhdGFiYXNlKCk7CisgICAgZ2NoYXIgKmRiX3BhdGggPSBnX3N0cmR1cCh3
ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0aChpY29uX2RhdGFiYXNlKSk7CisgICAgd2Via2l0
X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgoaWNvbl9kYXRhYmFzZSwgTlVMTCk7CisgICAgZGVsZXRl
X2RiX2ZpbGVfaWZfZXhpc3RzKGRiX3BhdGgpOworICAgIGdfZnJlZShkYl9wYXRoKTsKK30KKwor
aW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGdfdGhyZWFkX2luaXQoTlVM
TCk7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0
X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi93ZWJraXQvaWNvbmRhdGFiYXNlL3NldC1wYXRoIiwgdGVzdF93ZWJraXRfaWNvbl9kYXRh
YmFzZV9zZXRfcGF0aCk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2ljb25kYXRhYmFz
ZS9pY29uLWFzeW5jIiwgdGVzdF93ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9hc3luYyk7
CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2ljb25kYXRhYmFzZS9pY29uLXVyaSIsIHRl
c3Rfd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpKTsKKyAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi93ZWJraXQvaWNvbmRhdGFiYXNlL3JlbW92ZS1hbGwiLCB0ZXN0X3dlYmtpdF9pY29uX2Rh
dGFiYXNlX3JlbW92ZV9hbGwpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9pY29uZGF0
YWJhc2UvY2xvc2UtZGIiLCB0ZXN0X3dlYmtpdF9pY29uX2RhdGFiYXNlX2Nsb3NlX2RiKTsKKwor
ICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9CisjZWxzZQoraW50IG1haW4oaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KQoreworICAgIGdfY3JpdGljYWwoIllvdSB3aWxsIG5lZWQgZ3RrLTIuMTQuMCB0
byBydW4gdGhlIHVuaXQgdGVzdHMuIERvaW5nIG5vdGhpbmcgbm93LiIpOworICAgIHJldHVybiAw
OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRpY29uZGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25k
YXRhYmFzZS5jcHAKaW5kZXggMzgzYjA4MS4uYzdkMDgwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNp
bmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJ3ZWJraXRn
bG9iYWxzcHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFzZXByaXZhdGUuaCIK
ICNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCiAjaW5jbHVkZSAid2Via2l0c2VjdXJpdHlvcmln
aW5wcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0d2ViZnJhbWUuaCIKQEAgLTc3LDEwICs3OCwx
MyBAQCBlbnVtIHsKIAogc3RhdGljIGd1aW50IHdlYmtpdF9pY29uX2RhdGFiYXNlX3NpZ25hbHNb
TEFTVF9TSUdOQUxdID0geyAwLCB9OwogCi1HX0RFRklORV9UWVBFKFdlYktpdEljb25EYXRhYmFz
ZSwgd2Via2l0X2ljb25fZGF0YWJhc2UsIEdfVFlQRV9PQkpFQ1QpOworR19ERUZJTkVfVFlQRShX
ZWJLaXRJY29uRGF0YWJhc2UsIHdlYmtpdF9pY29uX2RhdGFiYXNlLCBHX1RZUEVfT0JKRUNUKQog
CiBzdHJ1Y3QgX1dlYktpdEljb25EYXRhYmFzZVByaXZhdGUgewogICAgIEdPd25QdHI8Z2NoYXI+
IHBhdGg7CisgICAgSWNvbkRhdGFiYXNlQ2xpZW50R3RrIGljb25EYXRhYmFzZUNsaWVudDsKKyAg
ICBHTGlzdCogcGVuZGluZ0ljb25zOworICAgIGdib29sZWFuIGltcG9ydEZpbmlzaGVkOwogfTsK
IAogc3RhdGljIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2VfZmluYWxpemUoR09iamVjdCogb2Jq
ZWN0KQpAQCAtMjI1LDE2ICsyMjksMjIgQEAgdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRf
cGF0aChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBnY2hhciogcGEKICAgICBp
ZiAoZGF0YWJhc2UtPnByaXYtPnBhdGguZ2V0KCkpCiAgICAgICAgIFdlYkNvcmU6Omljb25EYXRh
YmFzZSgpLmNsb3NlKCk7CiAKKyAgICBkYXRhYmFzZS0+cHJpdi0+aW1wb3J0RmluaXNoZWQgPSBG
QUxTRTsKICAgICBpZiAoIShwYXRoICYmIHBhdGhbMF0pKSB7CiAgICAgICAgIGRhdGFiYXNlLT5w
cml2LT5wYXRoLnNldCgwKTsKICAgICAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc2V0RW5h
YmxlZChmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBkYXRhYmFzZS0+cHJp
di0+cGF0aC5zZXQoZ19zdHJkdXAocGF0aCkpOwotCisgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNl
KCkuc2V0Q2xpZW50KCZkYXRhYmFzZS0+cHJpdi0+aWNvbkRhdGFiYXNlQ2xpZW50KTsKKyAgICBX
ZWJDb3JlOjpJY29uRGF0YWJhc2U6OmRlbGF5RGF0YWJhc2VDbGVhbnVwKCk7CiAgICAgV2ViQ29y
ZTo6aWNvbkRhdGFiYXNlKCkuc2V0RW5hYmxlZCh0cnVlKTsKLSAgICBXZWJDb3JlOjppY29uRGF0
YWJhc2UoKS5vcGVuKFdlYkNvcmU6OmZpbGVuYW1lVG9TdHJpbmcoZGF0YWJhc2UtPnByaXYtPnBh
dGguZ2V0KCkpLCBXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmRlZmF1bHREYXRhYmFzZUZpbGVuYW1l
KCkpOworICAgIGlmICghV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkub3BlbihXZWJDb3JlOjpmaWxl
bmFtZVRvU3RyaW5nKHBhdGgpLCBXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmRlZmF1bHREYXRhYmFz
ZUZpbGVuYW1lKCkpKSB7CisgICAgICAgIFdlYkNvcmU6Okljb25EYXRhYmFzZTo6YWxsb3dEYXRh
YmFzZUNsZWFudXAoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRhdGFiYXNlLT5w
cml2LT5wYXRoLnNldChnX3N0cmR1cChwYXRoKSk7CiAKICAgICBzdGF0aWMgYm9vbCBpbml0aWFs
aXplZCA9IGZhbHNlOwogICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKQEAgLTI2NCwyMiArMjc0LDMy
IEBAIGdjaGFyKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmkoV2ViS2l0SWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoCiAgICAgcmV0dXJuIGdfc3RyZHVwKFdlYkNvcmU6
Omljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwocGFnZVVSTCkudXRm
OCgpLmRhdGEoKSk7CiB9CiAKK3N0YXRpYyBHZGtQaXhidWYqIGdldF9pY29uX3BpeGJ1ZihXZWJL
aXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7CisgICAg
Ly8gVGhlIGV4YWN0IHNpemUgd2UgcGFzcyBpcyBpcnJlbGV2YW50IHRvIHRoZSBXZWJDb3JlOjpp
Y29uRGF0YWJhc2UgY29kZS4KKyAgICAvLyBXZSBtdXN0IHBhc3Mgc29tZXRoaW5nIGdyZWF0ZXIg
dGhhbiAwLCAwIHRvIGdldCBhIHBpeGJ1Zi4KKyAgICBXZWJDb3JlOjpJbWFnZSogaWNvbiA9IFdl
YkNvcmU6Omljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwocGFnZVVSTCwg
V2ViQ29yZTo6SW50U2l6ZSgxNiwgMTYpKTsKKyAgICByZXR1cm4gaWNvbiA/IGljb24tPmdldEdk
a1BpeGJ1ZigpIDogMDsKK30KKwogLyoqCiAgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl9waXhidWY6CiAgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQogICogQHBhZ2Vf
dXJpOiBVUkkgb2YgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbgogICoKLSAqIE9idGFpbnMg
YSAjR2RrUGl4YnVmIG9mIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZSBVUkksIG9yCi0g
KiBhIGRlZmF1bHQgaWNvbiBpZiB0aGVyZSBpcyBubyBpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZS4g
VXNlCisgKiBPYnRhaW5zIGEgI0dka1BpeGJ1ZiBvZiB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVu
IHBhZ2UgVVJJLCBvciAlTlVMTAorICogaWYgdGhlcmUgaXMgbm8gaWNvbiBmb3IgdGhlIGdpdmVu
IHBhZ2Ugb3IgaXQgaGFzbid0IGJlZW4gbG9hZGVkIHlldC4gVXNlCiAgKiB3ZWJraXRfaWNvbl9k
YXRhYmFzZV9nZXRfaWNvbl91cmkoKSBpZiB5b3UgbmVlZCB0byBkaXN0aW5ndWlzaCB0aGVzZSBj
YXNlcy4KLSAqIFVzdWFsbHkgeW91IHdhbnQgdG8gY29ubmVjdCB0byBXZWJLaXRJY29uRGF0YWJh
c2U6Omljb24tbG9hZGVkIGFuZCBjYWxsIHRoaXMKLSAqIG1ldGhvZCBpbiB0aGUgY2FsbGJhY2su
CisgKiBUbyBtYWtlIHN1cmUgdGhpcyBtZXRob2QgcmV0dXJuIHdpbGwgcmV0dXJuIGEgdmFsaWQg
aWNvbiwgd2hlbiB0aGUgZ2l2ZW4gVVJJCisgKiBoYXMgb25lLCB5b3Ugc2hvdWxkIGNvbm5lY3Qg
dG8gV2ViS2l0SWNvbkRhdGFiYXNlOjppY29uLWxvYWRlZCBhbmQgY2FsbCB0aGlzCisgKiBtZXRo
b2QgaW4gdGhlIGNhbGxiYWNrLiBTZWUgYWxzbyB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl9waXhidWZfYXN5bmMoKS4KICAqCiAgKiBUaGUgcGl4YnVmIHdpbGwgaGF2ZSB0aGUgbGFyZ2Vz
dCBzaXplIHByb3ZpZGVkIGJ5IHRoZSBzZXJ2ZXIgYW5kIHNob3VsZAogICogYmUgcmVzaXplZCBi
ZWZvcmUgaXQgaXMgZGlzcGxheWVkLgogICogU2VlIGFsc28gd2Via2l0X3dlYl92aWV3X2dldF9p
Y29uX3BpeGJ1ZigpLgogICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgcmVm
ZXJlbmNlIHRvIGEgI0dka1BpeGJ1Ziwgb3IgJU5VTEwKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBm
dWxsKTogYSBuZXcgcmVmZXJlbmNlIHRvIGEgI0dka1BpeGJ1Ziwgb3IgJU5VTEwgaWYgdGhlIGdp
dmVuCisgKiBVUkkgZG9lc24ndCBoYXZlIGFuIGljb24gb3IgaXQgaGFzbid0IGJlZW4gbG9hZGVk
IHlldC4KICAqCiAgKiBTaW5jZTogMS4zLjEzCiAgKiovCkBAIC0yODksMTUgKzMwOSwxOTMgQEAg
R2RrUGl4YnVmKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoV2ViS2l0SWNv
bkRhdGFiYXNlKiBkYXRhYmFzZSwgY28KICAgICBnX3JldHVybl92YWxfaWZfZmFpbChwYWdlVVJJ
LCAwKTsKIAogICAgIFN0cmluZyBwYWdlVVJMID0gU3RyaW5nOjpmcm9tVVRGOChwYWdlVVJJKTsK
LSAgICAvLyBUaGUgZXhhY3Qgc2l6ZSB3ZSBwYXNzIGlzIGlycmVsZXZhbnQgdG8gdGhlIFdlYkNv
cmU6Omljb25EYXRhYmFzZSBjb2RlLgotICAgIC8vIFdlIG11c3QgcGFzcyBzb21ldGhpbmcgZ3Jl
YXRlciB0aGFuIDAsIDAgdG8gZ2V0IGEgcGl4YnVmLgotICAgIFdlYkNvcmU6OkltYWdlKiBpY29u
ID0gV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNJY29uRm9yUGFnZVVSTChwYWdl
VVJMLCBXZWJDb3JlOjpJbnRTaXplKDE2LCAxNikpOwotICAgIGlmICghaWNvbikKKyAgICByZXR1
cm4gZ2V0X2ljb25fcGl4YnVmKGRhdGFiYXNlLCBwYWdlVVJMKTsKK30KKworc3RhdGljIGdib29s
ZWFuIGdldF9pY29uX3BpeGJ1Zl9jYW5jZWxsZWRfaWRsZShncG9pbnRlciB1c2VyRGF0YSkKK3sK
KyAgICBQZW5kaW5nSWNvblJlcXVlc3QqIHJlcXVlc3QgPSBzdGF0aWNfY2FzdDxQZW5kaW5nSWNv
blJlcXVlc3QqPih1c2VyRGF0YSk7CisKKyAgICBXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNl
ID0gd2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCk7CisgICAgR0xpc3QqIGljb25zID0gZGF0YWJh
c2UtPnByaXYtPnBlbmRpbmdJY29uczsKKyAgICB3aGlsZSAoaWNvbnMpIHsKKyAgICAgICAgR0xp
c3QqIG5leHQgPSBnX2xpc3RfbmV4dChpY29ucyk7CisKKyAgICAgICAgaWYgKHJlcXVlc3QgPT0g
aWNvbnMtPmRhdGEpIHsKKyAgICAgICAgICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogcmVzdWx0ID0g
cmVxdWVzdC0+YXN5bmNSZXN1bHQoKTsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQpOworICAg
ICAgICAgICAgZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29ucyA9IGdfbGlzdF9yZW1vdmVfbGlu
ayhkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25zLCBpY29ucyk7CisgICAgICAgICAgICBnX3Np
bXBsZV9hc3luY19yZXN1bHRfc2V0X2Vycm9yKHJlc3VsdCwgR19JT19FUlJPUiwgR19JT19FUlJP
Ul9DQU5DRUxMRUQsICIlcyIsICJPcGVyYXRpb24gd2FzIGNhbmNlbGxlZCIpOworICAgICAgICAg
ICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlKHJlc3VsdCk7CisgICAgICAgICAgICBk
ZWxldGUgcmVxdWVzdDsKKyAgICAgICAgICAgIGdfbGlzdF9mcmVlKGljb25zKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWNvbnMgPSBuZXh0OworICAgIH0KKwor
ICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2Vf
Z2V0X2ljb25fcGl4YnVmX2NhbmNlbGxlZChHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBQZW5k
aW5nSWNvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgLyogSGFuZGxlIGNhbmNlbGxlZCBpbiBh
IGluIGlkbGUgc2luY2UgaXQgbWlnaHQgYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZCAqLworICAg
IGdfaWRsZV9hZGQoZ2V0X2ljb25fcGl4YnVmX2NhbmNlbGxlZF9pZGxlLCByZXF1ZXN0KTsKK30K
KworLyoqCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmM6Cisg
KiBAZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQorICogQHBhZ2VfdXJpOiBVUkkgb2Yg
dGhlIHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbgorICogQGNhbmNlbGxhYmxlOiBBICNHQ2FuY2Vs
bGFibGUgb3IgJU5VTEwuCisgKiBAY2FsbGJhY2s6IChhbGxvdy1ub25lKTogQSAjR0FzeW5jUmVh
ZHlDYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMKKyAqICAgICAgICAgICAgc2F0
aXNmaWVkIG9yICVOVUxMIGlmIHlvdSBkb24ndCBjYXJlIGFib3V0IHRoZSByZXN1bHQuCisgKiBA
dXNlcl9kYXRhOiBUaGUgZGF0YSB0byBwYXNzIHRvIEBjYWxsYmFjay4KKyAqCisgKiBBc3luY2hy
b25vdXNseSBvYnRhaW5zIGEgI0dka1BpeGJ1ZiBvZiB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVu
IHBhZ2UgVVJJLgorICoKKyAqIFRoaXMgaXMgYW4gYXN5bmNocm9ub3VzIG1ldGhvZC4gV2hlbiB0
aGUgb3BlcmF0aW9uIGlzIGZpbmlzaGVkLCBjYWxsYmFjayB3aWxsCisgKiBiZSBpbnZva2VkLiBZ
b3UgY2FuIHRoZW4gY2FsbCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfZmlu
aXNoKCkKKyAqIHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKiBTZWUgYWxz
byB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoKS4KKyAqCisgKiBTaW5jZTog
MS41LjIKKyAqKi8KK3ZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2Fz
eW5jKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGdjaGFyKiBwYWdlVVJJLCBH
Q2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywg
Z3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfSUNP
Tl9EQVRBQkFTRShkYXRhYmFzZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwocGFnZVVSSSk7CisK
KyAgICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gcmVzdWx0ID0gYWRvcHRHUmVmKGdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9uZXcoR19PQkpFQ1QoZGF0YWJhc2UpLCBjYWxsYmFjaywgdXNlckRh
dGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KHdlYmtp
dF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYykpKTsKKworICAgIFBlbmRpbmdJ
Y29uUmVxdWVzdCogcmVxdWVzdCA9IG5ldyBQZW5kaW5nSWNvblJlcXVlc3QocGFnZVVSSSwgcmVz
dWx0LmdldCgpKTsKKyAgICBpZiAoY2FuY2VsbGFibGUpIHsKKyAgICAgICAgcmVxdWVzdC0+bV9j
YW5jZWxsYWJsZSA9IGNhbmNlbGxhYmxlOworICAgICAgICByZXF1ZXN0LT5tX2NhbmNlbGxlZElk
ID0gZ19jYW5jZWxsYWJsZV9jb25uZWN0KGNhbmNlbGxhYmxlLCBHX0NBTExCQUNLKHdlYmtpdF9p
Y29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9jYW5jZWxsZWQpLCByZXF1ZXN0LCAwKTsKKyAg
ICAgICAgZ19vYmplY3Rfc2V0X2RhdGFfZnVsbChHX09CSkVDVChyZXN1bHQuZ2V0KCkpLCAiY2Fu
Y2VsbGFibGUiLCBnX29iamVjdF9yZWYoY2FuY2VsbGFibGUpLCBzdGF0aWNfY2FzdDxHRGVzdHJv
eU5vdGlmeT4oZ19vYmplY3RfdW5yZWYpKTsKKyAgICB9CisKKyAgICAvLyBSZWdpc3RlciBpY29u
IHJlcXVlc3QgYmVmb3JlIGFza2luZyBmb3IgdGhlIGljb24gdG8gYXZvaWQgcmFjZSBjb25kaXRp
b25zLgorICAgIGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvbnMgPSBnX2xpc3RfcHJlcGVuZChk
YXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25zLCByZXF1ZXN0KTsKKyAgICBTdHJpbmcgcGFnZVVS
TCA9IFN0cmluZzo6ZnJvbVVURjgocGFnZVVSSSk7CisgICAgR2RrUGl4YnVmKiBwaXhidWYgPSBn
ZXRfaWNvbl9waXhidWYoZGF0YWJhc2UsIHBhZ2VVUkwpOworICAgIGlmICghcGl4YnVmICYmICFk
YXRhYmFzZS0+cHJpdi0+aW1wb3J0RmluaXNoZWQpIHsKKyAgICAgICAgLyogSW1wb3J0IGlzIG9u
Z29pbmcsIHRoZXJlIG1pZ2h0IGJlIGFuIGljb24gKi8KKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyKHJlc3VsdC5n
ZXQoKSwgcGl4YnVmLCAwKTsKKyAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUocmVz
dWx0LmdldCgpKTsKKworICAgIEFTU0VSVChkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25zLT5k
YXRhID09IHJlcXVlc3QpOworICAgIGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvbnMgPSBnX2xp
c3RfZGVsZXRlX2xpbmsoZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29ucywgZGF0YWJhc2UtPnBy
aXYtPnBlbmRpbmdJY29ucyk7CisgICAgZGVsZXRlIHJlcXVlc3Q7Cit9CisKKy8qKgorICogd2Vi
a2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2ZpbmlzaDoKKyAqIEBkYXRhYmFzZTog
YSAjV2ViS2l0SWNvbkRhdGFiYXNlCisgKiBAcmVzdWx0OiBBICNHQXN5bmNSZXN1bHQgb2J0YWlu
ZWQgZnJvbSB0aGUgI0dBc3luY1JlYWR5Q2FsbGJhY2sgcGFzc2VkIHRvIHdlYmtpdF9pY29uX2Rh
dGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYygpCisgKiBAZXJyb3I6IFJldHVybiBsb2NhdGlv
biBmb3IgZXJyb3Igb3IgJU5VTEwuCisgKgorICogRmluaXNoZXMgYW4gb3BlcmF0aW9uIHN0YXJ0
ZWQgd2l0aCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmMoKS4KKyAq
CisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IHJlZmVyZW5jZSB0byBhICNHZGtQ
aXhidWYsIG9yICVOVUxMLgorICoKKyAqIFNpbmNlOiAxLjUuMgorICovCitHZGtQaXhidWYqIHdl
YmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5pc2goV2ViS2l0SWNvbkRhdGFi
YXNlKiBkYXRhYmFzZSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIEdFcnJvcioqIGVycm9yKQorewor
ICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogc2ltcGxlUmVzdWx0ID0gR19TSU1QTEVfQVNZTkNfUkVT
VUxUKHJlc3VsdCk7CisgICAgZ193YXJuX2lmX2ZhaWwoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dl
dF9zb3VyY2VfdGFnKHNpbXBsZVJlc3VsdCkgPT0gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2lj
b25fcGl4YnVmX2FzeW5jKTsKKworICAgIGlmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfcHJvcGFn
YXRlX2Vycm9yKHNpbXBsZVJlc3VsdCwgZXJyb3IpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBH
ZGtQaXhidWYqIHBpeGJ1ZiA9IGljb24tPmdldEdka1BpeGJ1ZigpOwotICAgIGlmICghcGl4YnVm
KQorCisgICAgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSA9IHN0YXRpY19jYXN0PEdDYW5jZWxs
YWJsZSo+KGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKHNpbXBsZVJlc3VsdCksICJjYW5jZWxs
YWJsZSIpKTsKKyAgICBpZiAoY2FuY2VsbGFibGUgJiYgZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxs
ZWQoY2FuY2VsbGFibGUpKSB7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIEdf
SU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVELCAiT3BlcmF0aW9uIHdhcyBjYW5jZWxsZWQi
KTsKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEdka1BpeGJ1Zio+
KGdfb2JqZWN0X3JlZihwaXhidWYpKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
R2RrUGl4YnVmKj4oZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIoc2lt
cGxlUmVzdWx0KSk7Cit9CisKK3ZvaWQgX3dlYmtpdF9pY29uX2RhdGFiYXNlX3Byb2Nlc3NfcGVu
ZGluZ19pY29uc19mb3JfdXJpKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IFN0
cmluZyYgcGFnZVVSSSkKK3sKKyAgICBHTGlzdCogaWNvbnMgPSBkYXRhYmFzZS0+cHJpdi0+cGVu
ZGluZ0ljb25zOworICAgIHdoaWxlIChpY29ucykgeworICAgICAgICBHTGlzdCogbmV4dCA9IGdf
bGlzdF9uZXh0KGljb25zKTsKKworICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3QqIHJlcXVlc3Qg
PSBzdGF0aWNfY2FzdDxQZW5kaW5nSWNvblJlcXVlc3QqPihpY29ucy0+ZGF0YSk7CisgICAgICAg
IGlmIChyZXF1ZXN0LT5wYWdlVVJJKCkgPT0gcGFnZVVSSSkgeworICAgICAgICAgICAgZGF0YWJh
c2UtPnByaXYtPnBlbmRpbmdJY29ucyA9IGdfbGlzdF9yZW1vdmVfbGluayhkYXRhYmFzZS0+cHJp
di0+cGVuZGluZ0ljb25zLCBpY29ucyk7CisgICAgICAgICAgICBpZiAocmVxdWVzdC0+ZnJhbWVM
b2FkZXJDbGllbnQoKSkKKyAgICAgICAgICAgICAgICByZXF1ZXN0LT5mcmFtZUxvYWRlckNsaWVu
dCgpLT5kaXNwYXRjaERpZFJlY2VpdmVJY29uKCk7CisgICAgICAgICAgICBlbHNlIGlmIChyZXF1
ZXN0LT5hc3luY1Jlc3VsdCgpKSB7CisgICAgICAgICAgICAgICAgR1NpbXBsZUFzeW5jUmVzdWx0
KiByZXN1bHQgPSByZXF1ZXN0LT5hc3luY1Jlc3VsdCgpOworICAgICAgICAgICAgICAgIGdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyKHJlc3VsdCwgZ2V0X2ljb25fcGl4
YnVmKGRhdGFiYXNlLCBwYWdlVVJJKSwgMCk7CisgICAgICAgICAgICAgICAgZ19zaW1wbGVfYXN5
bmNfcmVzdWx0X2NvbXBsZXRlKHJlc3VsdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBk
ZWxldGUgcmVxdWVzdDsKKyAgICAgICAgICAgIGdfbGlzdF9mcmVlKGljb25zKTsKKyAgICAgICAg
fQorCisgICAgICAgIGljb25zID0gbmV4dDsKKyAgICB9Cit9CisKK3ZvaWQgX3dlYmtpdF9pY29u
X2RhdGFiYXNlX3JlZ2lzdGVyX2Zvcl9pY29uX25vdGlmaWNhdGlvbihXZWJLaXRJY29uRGF0YWJh
c2UqIGRhdGFiYXNlLCBjb25zdCBnY2hhciogcGFnZVVSSSwgV2ViQ29yZTo6RnJhbWVMb2FkZXJD
bGllbnQqIGNsaWVudCkKK3sKKyAgICBQZW5kaW5nSWNvblJlcXVlc3QqIHJlcXVlc3QgPSBuZXcg
UGVuZGluZ0ljb25SZXF1ZXN0KHBhZ2VVUkksIGNsaWVudCk7CisgICAgZGF0YWJhc2UtPnByaXYt
PnBlbmRpbmdJY29ucyA9IGdfbGlzdF9wcmVwZW5kKGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNv
bnMsIHJlcXVlc3QpOworfQorCit2b2lkIF93ZWJraXRfaWNvbl9kYXRhYmFzZV91bnJlZ2lzdGVy
X2Zvcl9pY29uX25vdGlmaWNhdGlvbihXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25z
dCBnY2hhciogcGFnZVVSSSwgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQqIGNsaWVudCkKK3sK
KyAgICBHTGlzdCogaWNvbnMgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25zOworICAgIHdo
aWxlIChpY29ucykgeworICAgICAgICBHTGlzdCogbmV4dCA9IGdfbGlzdF9uZXh0KGljb25zKTsK
KworICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3QqIHJlcXVlc3QgPSBzdGF0aWNfY2FzdDxQZW5k
aW5nSWNvblJlcXVlc3QqPihpY29ucy0+ZGF0YSk7CisgICAgICAgIGlmIChyZXF1ZXN0LT5wYWdl
VVJJKCkgPT0gcGFnZVVSSSAmJiByZXF1ZXN0LT5mcmFtZUxvYWRlckNsaWVudCgpID09IGNsaWVu
dCkgeworICAgICAgICAgICAgZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29ucyA9IGdfbGlzdF9y
ZW1vdmVfbGluayhkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25zLCBpY29ucyk7CisgICAgICAg
ICAgICBkZWxldGUgcmVxdWVzdDsKKyAgICAgICAgICAgIGdfbGlzdF9mcmVlKGljb25zKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGljb25zID0gbmV4dDsKKyAgICB9Cit9CisKK3ZvaWQgX3dlYmtp
dF9pY29uX2RhdGFiYXNlX2ltcG9ydF9maW5pc2hlZChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFi
YXNlKQoreworICAgIGRhdGFiYXNlLT5wcml2LT5pbXBvcnRGaW5pc2hlZCA9IFRSVUU7CisKKyAg
ICAvLyBJbXBvcnQgaXMgY29tcGxldGUsIHByb2Nlc3MgcGVuZGluZyByZXF1ZXN0cyBmb3IgcGFn
ZXMgdGhhdCBhcmUgbm90IGluIHRoZSBkYXRhYmFzZSwKKyAgICAvLyBzaW5jZSBkaWRJbXBvcnRJ
Y29uRGF0YUZvclBhZ2VVUkwoKSB3aWxsIG5ldmVyIGJlIGNhbGxlZCBmb3IgdGhlbS4KKyAgICAv
LyBGb3IgYXN5bmMgcmVxdWVzdHMgd2UgbmVlZCB0byBjb21wbGV0ZSB0aGUgb3BlcmF0aW9uLCB3
aGlsZSBmb3IgZnJhbWUgbG9hZGVyCisgICAgLy8gcmVxdWVzdHMgd2Ugb25seSBuZWVkIHRvIGRl
bGV0ZSB0aGUgcmVxdWVzdCBzbyB0aGF0IGljb24tbG9hZGVkIHdvbid0IGJlIGVtaXR0ZWQuCisg
ICAgR0xpc3QqIGljb25zID0gZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uczsKKyAgICB3aGls
ZSAoaWNvbnMpIHsKKyAgICAgICAgR0xpc3QqIG5leHQgPSBnX2xpc3RfbmV4dChpY29ucyk7CisK
KyAgICAgICAgUGVuZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0ID0gc3RhdGljX2Nhc3Q8UGVuZGlu
Z0ljb25SZXF1ZXN0Kj4oaWNvbnMtPmRhdGEpOworICAgICAgICBTdHJpbmcgaWNvblVSTCA9IFdl
YkNvcmU6Omljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwocmVxdWVz
dC0+cGFnZVVSSSgpKTsKKyAgICAgICAgaWYgKGljb25VUkwuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25zID0gZ19saXN0X3JlbW92ZV9saW5rKGRh
dGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvbnMsIGljb25zKTsKKyAgICAgICAgICAgIEdTaW1wbGVB
c3luY1Jlc3VsdCogcmVzdWx0ID0gcmVxdWVzdC0+YXN5bmNSZXN1bHQoKTsKKyAgICAgICAgICAg
IGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0
X29wX3Jlc19ncG9pbnRlcihyZXN1bHQsIDAsIDApOworICAgICAgICAgICAgICAgIGdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9jb21wbGV0ZShyZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZGVsZXRlIHJlcXVlc3Q7CisgICAgICAgICAgICBnX2xpc3RfZnJlZShpY29ucyk7CisgICAg
ICAgIH0KKyAgICAgICAgaWNvbnMgPSBuZXh0OworICAgIH0KIH0KIAogLyoqCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmggYi9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmgKaW5kZXggNWVhZDYwMy4uNWJj
ZDIzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRh
YmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2Uu
aApAQCAtNTMsMjUgKzUzLDM3IEBAIHN0cnVjdCBfV2ViS2l0SWNvbkRhdGFiYXNlQ2xhc3Mgewog
fTsKIAogV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3R5cGUgICAg
ICAgICAgICAodm9pZCk7Cit3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfdHlwZSAgICAgICAgICAg
ICAgKHZvaWQpOwogCiBXRUJLSVRfQVBJIGNvbnN0IGdjaGFyKgotd2Via2l0X2ljb25fZGF0YWJh
c2VfZ2V0X3BhdGggICAgICAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSk7Cit3
ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0aCAgICAgICAgICAgICAgKFdlYktpdEljb25EYXRh
YmFzZSogZGF0YWJhc2UpOwogCiBXRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9pY29uX2RhdGFiYXNl
X3NldF9wYXRoICAgICAgICAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAg
IHBhdGgpOword2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGggICAgICAgICAgICAgIChXZWJL
aXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhdGgpOwogCiBXRUJLSVRfQVBJIGdj
aGFyKgotd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpICAgICAgICAoV2ViS2l0SWNv
bkRhdGFiYXNlKiBkYXRhYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdjaGFyKiAgICAgICAgcGFnZV91cmkpOword2Via2l0X2ljb25fZGF0YWJh
c2VfZ2V0X2ljb25fdXJpICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciog
ICAgICAgIHBhZ2VfdXJpKTsKIAogV0VCS0lUX0FQSSBHZGtQaXhidWYqCi13ZWJraXRfaWNvbl9k
YXRhYmFzZV9nZXRfaWNvbl9waXhidWYgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIq
ICAgICAgICBwYWdlX3VyaSk7Cit3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYg
ICAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiAgICAgICAgcGFnZV91cmkpOwog
CiBXRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9pY29uX2RhdGFiYXNlX2NsZWFyICAgICAgICAgICAg
ICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpOword2Via2l0X2ljb25fZGF0YWJhc2Vf
Z2V0X2ljb25fcGl4YnVmX2FzeW5jIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAg
ICAgIHBhZ2VfdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQ2FuY2VsbGFibGUqICAgICAgIGNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAg
ICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgR2RrUGl4YnVmKgord2Via2l0X2ljb25fZGF0
YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2ZpbmlzaChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1
bHQqICAgICAgIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0Vycm9yKiogICAgICAgICAgICBlcnJvcik7CisKK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2ljb25fZGF0YWJhc2VfY2xlYXIgICAgICAgICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJh
c2UqIGRhdGFiYXNlKTsKIAogR19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZXByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMjlkMDgzZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlLmgKQEAgLTAsMCArMSw5NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIHdlYmtpdGlj
b25kYXRhYmFzZXByaXZhdGVfaAorI2RlZmluZSB3ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlX2gK
KworI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiR1JlZlB0ci5oIgor
I2luY2x1ZGUgIkljb25EYXRhYmFzZUNsaWVudC5oIgorI2luY2x1ZGUgIndlYmtpdGdsb2JhbHMu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRnJhbWVMb2FkZXJDbGllbnQ7CitjbGFz
cyBJY29uRGF0YWJhc2VDbGllbnQ7Cit9CisKK2V4dGVybiAiQyIgewordm9pZCBfd2Via2l0X2lj
b25fZGF0YWJhc2VfcmVnaXN0ZXJfZm9yX2ljb25fbm90aWZpY2F0aW9uKFdlYktpdEljb25EYXRh
YmFzZSosIGNvbnN0IGdjaGFyKiBwYWdlVVJJLCBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudCop
Owordm9pZCBfd2Via2l0X2ljb25fZGF0YWJhc2VfdW5yZWdpc3Rlcl9mb3JfaWNvbl9ub3RpZmlj
YXRpb24oV2ViS2l0SWNvbkRhdGFiYXNlKiwgY29uc3QgZ2NoYXIqIHBhZ2VVUkksIFdlYkNvcmU6
OkZyYW1lTG9hZGVyQ2xpZW50Kik7Cit2b2lkIF93ZWJraXRfaWNvbl9kYXRhYmFzZV9wcm9jZXNz
X3BlbmRpbmdfaWNvbnNfZm9yX3VyaShXZWJLaXRJY29uRGF0YWJhc2UqLCBjb25zdCBTdHJpbmcm
IHBhZ2VVUkkpOwordm9pZCBfd2Via2l0X2ljb25fZGF0YWJhc2VfaW1wb3J0X2ZpbmlzaGVkKFdl
YktpdEljb25EYXRhYmFzZSopOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgSWNv
bkRhdGFiYXNlQ2xpZW50R3RrIDogcHVibGljIFdlYkNvcmU6Okljb25EYXRhYmFzZUNsaWVudCB7
CisgICAgcHVibGljOgorICAgIC8vIEljb25EYXRhYmFzZUNsaWVudCBpbnRlcmZhY2UKKyAgICB2
aXJ0dWFsIGJvb2wgcGVyZm9ybUltcG9ydCgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVtb3ZlQWxsSWNvbnMoKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGRpZEltcG9y
dEljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkSW1wb3J0SWNvbkRhdGFGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgVVJMKQorICAgIHsKKyAg
ICAgICAgX3dlYmtpdF9pY29uX2RhdGFiYXNlX3Byb2Nlc3NfcGVuZGluZ19pY29uc19mb3JfdXJp
KHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpLCBVUkwpOworICAgIH0KKyAgICB2aXJ0dWFsIHZv
aWQgZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJikgeyB9OworICAgIHZpcnR1
YWwgdm9pZCBkaWRGaW5pc2hVUkxJbXBvcnQoKSB7IF93ZWJraXRfaWNvbl9kYXRhYmFzZV9pbXBv
cnRfZmluaXNoZWQod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCkpOyB9Cit9OworCitzdHJ1Y3Qg
UGVuZGluZ0ljb25SZXF1ZXN0IHsKK3B1YmxpYzoKKyAgICBQZW5kaW5nSWNvblJlcXVlc3QoY29u
c3QgY2hhciogcGFnZVVSSSwgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQqIGZyYW1lTG9hZGVy
Q2xpZW50KQorICAgICAgICA6IG1fcGFnZVVSSShwYWdlVVJJKQorICAgICAgICAsIG1fZnJhbWVM
b2FkZXJDbGllbnQoZnJhbWVMb2FkZXJDbGllbnQpCisgICAgICAgICwgbV9hc3luY1Jlc3VsdCgw
KQorICAgICAgICAsIG1fY2FuY2VsbGFibGUoMCkKKyAgICAgICAgLCBtX2NhbmNlbGxlZElkKDAp
CisgICAgeworICAgIH0KKworICAgIFBlbmRpbmdJY29uUmVxdWVzdChjb25zdCBjaGFyKiBwYWdl
VVJJLCBHU2ltcGxlQXN5bmNSZXN1bHQqIHJlc3VsdCkKKyAgICAgICAgOiBtX3BhZ2VVUkkocGFn
ZVVSSSkKKyAgICAgICAgLCBtX2ZyYW1lTG9hZGVyQ2xpZW50KDApCisgICAgICAgICwgbV9hc3lu
Y1Jlc3VsdChyZXN1bHQpCisgICAgICAgICwgbV9jYW5jZWxsYWJsZSgwKQorICAgICAgICAsIG1f
Y2FuY2VsbGVkSWQoMCkKKyAgICB7CisgICAgfQorCisgICAgflBlbmRpbmdJY29uUmVxdWVzdCgp
CisgICAgeworICAgICAgICBpZiAobV9jYW5jZWxsZWRJZCA+IDApCisgICAgICAgICAgICBnX2Nh
bmNlbGxhYmxlX2Rpc2Nvbm5lY3QobV9jYW5jZWxsYWJsZS5nZXQoKSwgbV9jYW5jZWxsZWRJZCk7
CisgICAgfQorCisgICAgY29uc3QgU3RyaW5nJiBwYWdlVVJJKCkgeyByZXR1cm4gbV9wYWdlVVJJ
OyB9CisgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQqIGZyYW1lTG9hZGVyQ2xpZW50KCkg
eyByZXR1cm4gbV9mcmFtZUxvYWRlckNsaWVudDsgfQorICAgIEdTaW1wbGVBc3luY1Jlc3VsdCog
YXN5bmNSZXN1bHQoKSB7IHJldHVybiBtX2FzeW5jUmVzdWx0LmdldCgpOyB9CisKKyAgICBTdHJp
bmcgbV9wYWdlVVJJOworICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50KiBtX2ZyYW1lTG9h
ZGVyQ2xpZW50OworICAgIEdSZWZQdHI8R1NpbXBsZUFzeW5jUmVzdWx0PiBtX2FzeW5jUmVzdWx0
OworICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOworICAgIGd1bG9uZyBt
X2NhbmNlbGxlZElkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyB3
ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0d0a0xhdW5jaGVy
L21haW4uYyBiL1Rvb2xzL0d0a0xhdW5jaGVyL21haW4uYwppbmRleCBlZGM4ZTJmLi5hNjA0ZWI1
IDEwMDY0NAotLS0gYS9Ub29scy9HdGtMYXVuY2hlci9tYWluLmMKKysrIGIvVG9vbHMvR3RrTGF1
bmNoZXIvbWFpbi5jCkBAIC00MCw2ICs0MCw3IEBAIHN0YXRpYyB2b2lkIGFjdGl2YXRlVXJpRW50
cnlDYihHdGtXaWRnZXQqIGVudHJ5LCBncG9pbnRlciBkYXRhKQogICAgIFdlYktpdFdlYlZpZXcg
KndlYlZpZXcgPSBnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChlbnRyeSksICJ3ZWItdmlldyIp
OwogICAgIGNvbnN0IGdjaGFyKiB1cmkgPSBndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZKGVu
dHJ5KSk7CiAgICAgZ19hc3NlcnQodXJpKTsKKyAgICBndGtfZW50cnlfc2V0X2ljb25fZnJvbV9w
aXhidWYoR1RLX0VOVFJZKGVudHJ5KSwgR1RLX0VOVFJZX0lDT05fUFJJTUFSWSwgMCk7CiAgICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHdlYlZpZXcsIHVyaSk7CiB9CiAKQEAgLTEyNSw2ICsx
MjYsMTQgQEAgc3RhdGljIGdib29sZWFuIGNsb3NlV2ViVmlld0NiKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIEd0a1dpZGdldCogd2luZG93KQogICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5kb3cp
OwogICAgIHJldHVybiBUUlVFOwogfQorCitzdGF0aWMgdm9pZCBpY29uTG9hZGVkQ2IoV2ViS2l0
V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciogaWNvblVSSSwgR3RrV2lkZ2V0KiB1cmlFbnRy
eSkKK3sKKyAgICBHZGtQaXhidWYgKmljb24gPSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl9waXhidWYod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCksIHdlYmtpdF93ZWJfdmlld19nZXRf
dXJpKHdlYlZpZXcpKTsKKyAgICBndGtfZW50cnlfc2V0X2ljb25fZnJvbV9waXhidWYoR1RLX0VO
VFJZKHVyaUVudHJ5KSwgR1RLX0VOVFJZX0lDT05fUFJJTUFSWSwgaWNvbik7CisgICAgaWYgKGlj
b24pCisgICAgICAgIGdfb2JqZWN0X3VucmVmKGljb24pOworfQogI2VuZGlmCiAKIHN0YXRpYyBH
dGtXaWRnZXQqIGNyZWF0ZUJyb3dzZXIoR3RrV2lkZ2V0KiB3aW5kb3csIEd0a1dpZGdldCogdXJp
RW50cnksIEd0a1dpZGdldCogc3RhdHVzYmFyLCBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQpAQCAt
MTM4LDYgKzE0Nyw3IEBAIHN0YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZUJyb3dzZXIoR3RrV2lkZ2V0
KiB3aW5kb3csIEd0a1dpZGdldCogdXJpRW50cnksIEd0a1dpZGdlCiAgICAgZ19zaWduYWxfY29u
bmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojp0aXRsZSIsIEdfQ0FMTEJBQ0sobm90aWZ5VGl0bGVDYiks
IHdpbmRvdyk7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0
YXR1cyIsIEdfQ0FMTEJBQ0sobm90aWZ5TG9hZFN0YXR1c0NiKSwgdXJpRW50cnkpOwogICAgIGdf
c2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgIm5vdGlmeTo6cHJvZ3Jlc3MiLCBHX0NBTExCQUNLKG5v
dGlmeVByb2dyZXNzQ2IpLCB3aW5kb3cpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywg
Imljb24tbG9hZGVkIiwgR19DQUxMQkFDSyhpY29uTG9hZGVkQ2IpLCB1cmlFbnRyeSk7CiAgICAg
Z19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiaG92ZXJpbmctb3Zlci1saW5rIiwgR19DQUxMQkFD
SyhsaW5rSG92ZXJDYiksIHN0YXR1c2Jhcik7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3
LCAiY3JlYXRlLXdlYi12aWV3IiwgR19DQUxMQkFDSyhjcmVhdGVXZWJWaWV3Q2IpLCB3aW5kb3cp
OwogICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgIndlYi12aWV3LXJlYWR5IiwgR19DQUxM
QkFDSyh3ZWJWaWV3UmVhZHlDYiksIHdpbmRvdyk7Cg==
</data>
<flag name="review"
          id="95129"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100799</attachid>
            <date>2011-07-14 06:01:21 -0700</date>
            <delta_ts>2011-07-27 05:15:07 -0700</delta_ts>
            <desc>New patch according to review</desc>
            <filename>database-icons4.diff</filename>
            <type>text/plain</type>
            <size>36282</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwppbmRleCA1NzlmOTE4Li41ZTAyODcyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNzMgQEAKKzIwMTEtMDctMTQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFdlYktpdEljb25EYXRhYmFzZSBkb2Vzbid0
IGtlZXAgaWNvbnMgY2FjaGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NjIwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24u
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6cmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0
aW9uKTogV2hlbiB0aGUKKyAgICAgICAgaWNvbiBpcyBpbiB0aGUgZGF0YWJhc2UsIGJ1dCB0aGUg
ZGF0YSBpcyBub3Qgc3RpbGwgYXZhaWxhYmxlLAorICAgICAgICByZWdpc3RlciBhIG5vdGlmaWNh
dGlvbiB0byBkaXNwYXRjaCByZWNlaXZlZCBpY29uIHdoZW4gdGhlIGljb24KKyAgICAgICAgZGF0
YSBpcyBhdmFpbGFibGUuCisgICAgICAgICogdGVzdHMvdGVzdGljb25kYXRhYmFzZS5jOiBBZGRl
ZC4KKyAgICAgICAgKGRlbGV0ZURhdGFiYXNlRmlsZUlmRXhpc3RzKToKKyAgICAgICAgKHRlc3RX
ZWJraXRJY29uRGF0YWJhc2VTZXRQYXRoKToKKyAgICAgICAgKGljb25EYXRhYmFzZUdldEljb25W
YWxpZENhbGxiYWNrKToKKyAgICAgICAgKGljb25EYXRhYmFzZUdldEljb25JbnZhbGlkQ2FsbGJh
Y2spOgorICAgICAgICAoaWNvbkRhdGFiYXNlR2V0SWNvbkNhbmNlbGxlZENhbGxiYWNrKToKKyAg
ICAgICAgKGlkbGVRdWl0TG9vcENhbGxiYWNrKToKKyAgICAgICAgKGxvYWRVUkkpOgorICAgICAg
ICAoaWNvbkRhdGFiYXNlR2V0SWNvblZhbGlkSWRsZSk6CisgICAgICAgIChpY29uRGF0YWJhc2VH
ZXRJY29uSW52YWxpZElkbGUpOgorICAgICAgICAoaWNvbkRhdGFiYXNlR2V0SWNvbkNhbmNlbGxl
ZElkbGUpOgorICAgICAgICAodGVzdFdlYmtpdEljb25EYXRhYmFzZUdldEljb25Bc3luYyk6Cisg
ICAgICAgICh0ZXN0V2Via2l0SWNvbkRhdGFiYXNlR2V0SWNvblVSSSk6CisgICAgICAgICh0ZXN0
V2Via2l0SWNvbkRhdGFiYXNlUmVtb3ZlQWxsKToKKyAgICAgICAgKHRlc3RXZWJraXRJY29uRGF0
YWJhc2VDbG9zZURhdGFiYXNlKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIHdlYmtpdC93
ZWJraXRpY29uZGF0YWJhc2UuY3BwOgorICAgICAgICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpw
ZXJmb3JtSW1wb3J0KToKKyAgICAgICAgKEljb25EYXRhYmFzZUNsaWVudEd0azo6ZGlkUmVtb3Zl
QWxsSWNvbnMpOgorICAgICAgICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpkaWRJbXBvcnRJY29u
VVJMRm9yUGFnZVVSTCk6CisgICAgICAgIChJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpZEltcG9y
dEljb25EYXRhRm9yUGFnZVVSTCk6CisgICAgICAgIChJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRp
ZENoYW5nZUljb25Gb3JQYWdlVVJMKToKKyAgICAgICAgKEljb25EYXRhYmFzZUNsaWVudEd0azo6
ZGlkRmluaXNoVVJMSW1wb3J0KToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6UGVuZGlu
Z0ljb25SZXF1ZXN0KToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6flBlbmRpbmdJY29u
UmVxdWVzdCk6CisgICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OnBhZ2VVUkkpOgorICAgICAg
ICAoUGVuZGluZ0ljb25SZXF1ZXN0OjpmcmFtZUxvYWRlckNsaWVudCk6CisgICAgICAgIChQZW5k
aW5nSWNvblJlcXVlc3Q6OmFzeW5jUmVzdWx0KToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVz
dDo6YXN5bmNSZXN1bHRDb21wbGV0ZSk6CisgICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OmFz
eW5jUmVzdWx0Q2FuY2VsKToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6ZnJhbWVMb2Fk
ZXJEaXNwYXRjaERpZFJlY2VpdmVJY29uKToKKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNl
X3NldF9wYXRoKTogRGVsYXkgZGF0YWJhc2UgY2xlYW51cCBieSBkZWZhdWx0CisgICAgICAgIHRv
IG1ha2UgaWNvbnMgcGVyc2lzdGVudCBpbiB0aGUgZGF0YWJhc2UuCisgICAgICAgIChnZXRJY29u
UGl4YnVmU3luY2hyb25vdXNseSk6IEhlbHBlciBmdW5jdGlvbiB0byBjYWxsCisgICAgICAgIElj
b25EYXRhYmFzZTo6c3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTCgpLgorICAgICAgICAod2Vi
a2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmKTogRml4IGRvYyBjb21tZW50cy4KKyAg
ICAgICAgKGdldEljb25QaXhidWZDYW5jZWxsZWRJZGxlKTogQ2FuY2VsIHRoZSByZXF1ZXN0Lgor
ICAgICAgICAod2Via2l0SWNvbkRhdGFiYXNlR2V0SWNvblBpeGJ1ZkNhbmNlbGxlZCk6CisgICAg
ICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmMpOiBOZXcgbWV0
aG9kIHRvIGdldCBhbgorICAgICAgICBpY29uIGFzeW5jaHJvbm91c2x5LgorICAgICAgICAod2Vi
a2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2ZpbmlzaCk6IEZpbmlzaGVzIGFuCisg
ICAgICAgIG9wZXJhdGlvbiBzdGFydGVkIHdpdGggd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2lj
b25fcGl4YnVmX2FzeW5jKCkuCisgICAgICAgICh3ZWJraXRJY29uRGF0YWJhc2VSZWdpc3RlckZv
ckljb25Ob3RpZmljYXRpb24pOiBSZWdpc3RlciBmcmFtZQorICAgICAgICBsb2FkZXIgdG8gYmUg
bm90aWZpZWQgd2hlbiB0aGUgaWNvbiBkYXRhIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgKHdlYmtp
dEljb25EYXRhYmFzZVVucmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKTogVW5yZWdpc3RlciBh
CisgICAgICAgIGZyYW1lIGxvYWRlciBub3RpZmljYXRpb24gcmVxdWVzdC4KKyAgICAgICAgKHdl
YmtpdEljb25EYXRhYmFzZVByb2Nlc3NQZW5kaW5nSWNvbnNGb3JVUkkpOiBQcm9jZXNzIHBlbmRp
bmcKKyAgICAgICAgcmVxdWVzdHMgZm9yIHRoZSBnaXZlbiB1cmksIGZvciBhc3luYyBvcGVyYXRp
b24gcmVxdWVzdHMgaXQKKyAgICAgICAgY29tcGxldGVzIHRoZSBvcGVyYXRpb24sIHdoaWxlIGZv
ciBmcmFtZSBsb2FkZXIgcmVxdWVzdHMgaXQgY2FsbHMKKyAgICAgICAgRnJhbWVMb2FkZXJDbGll
bnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKSB0byBub3RpZnkgdGhlIGZyYW1lCisgICAgICAg
IGxvYWRlciB0aGF0IGhlIGljb24gaXMgbm93IGF2YWlsYWJsZS4KKyAgICAgICAgKHdlYmtpdElj
b25EYXRhYmFzZUltcG9ydEZpbmlzaGVkKTogV2hlbiBpbXBvcnQgaXMgZmluaXNoZWQsIGNoZWNr
CisgICAgICAgIHBlbmRpbmcgcmVxdWVzdHMgdG8gcHJvY2VzcyBhbmQgZGVsZXRlIHRoZSBvbmVz
IHRoYXQgYXNrIGZvciBhbgorICAgICAgICBpY29uIHRoYXQgZG9lc24ndCBleGlzdCBpbiBkYXRh
YmFzZS4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmg6CisgICAgICAgICog
d2Via2l0L3dlYmtpdGljb25kYXRhYmFzZXByaXZhdGUuaDogQWRkZWQuCisKIDIwMTEtMDctMTIg
IEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KIAogICAgICAgICBBcHBsaWNh
dGlvbkNhY2hlIHVwZGF0ZSBzaG91bGQgbm90IGltbWVkaWF0ZWx5IGZhaWwgd2hlbiByZWFjaGlu
ZyBwZXItb3JpZ2luIHF1b3RhCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggOTlhZTc3Ny4uMDg0NDAwYSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTA3LTE0ICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RL
XSBXZWJLaXRJY29uRGF0YWJhc2UgZG9lc24ndCBrZWVwIGljb25zIGNhY2hlZAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyMDAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZmF2
aWNvbnMgaW4gR3RrTGF1bmNoZXIuCisKKyAgICAgICAgKiBHdGtMYXVuY2hlci9tYWluLmM6Cisg
ICAgICAgIChhY3RpdmF0ZVVyaUVudHJ5Q2IpOgorICAgICAgICAoaWNvbkxvYWRlZENiKToKKyAg
ICAgICAgKGNyZWF0ZUJyb3dzZXIpOgorCiAyMDExLTA3LTEzICBFcmljIFNlaWRlbCAgPGVyaWNA
d2Via2l0Lm9yZz4KIAogICAgICAgICBNb3ZlIHdlYmtpdHB5IG9mZiBvZiBsb29zZSBtb2Nrcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2Vi
S2l0L2d0ay9HTlVtYWtlZmlsZS5hbQppbmRleCA1MWM3YzdmLi5mZDdmMGFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0L2d0
ay9HTlVtYWtlZmlsZS5hbQpAQCAtMjE2LDYgKzIxNiw3IEBAIHdlYmtpdGd0a19zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aGl0dGVzdHJlc3VsdC5jcHAgXAog
CVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0cHJpdmF0ZS5oIFwK
IAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcCBcCisJU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZXByaXZhdGUuaCBcCiAJU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmNwcCBcCiAJU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0cHJpdmF0ZS5oIFwKIAlTb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3Jlc3BvbnNlLmNwcCBcCkBAIC00MzIs
NiArNDMzLDcgQEAgVEVTVF9QUk9HUyArPSBcCiAJUHJvZ3JhbXMvdW5pdHRlc3RzL3Rlc3Rkb21k
b213aW5kb3cgXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0ZG9tbm9kZSBcCiAJUHJvZ3JhbXMv
dW5pdHRlc3RzL3Rlc3RodHRwYmFja2VuZCBcCisJUHJvZ3JhbXMvdW5pdHRlc3RzL3Rlc3RpY29u
ZGF0YWJhc2UgXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0bG9hZGluZyBcCiAJUHJvZ3JhbXMv
dW5pdHRlc3RzL3Rlc3RnbG9iYWxzIFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdG1pbWVoYW5k
bGluZyBcCkBAIC00NzksNiArNDgxLDExIEBAIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0aHR0cGJh
Y2tlbmRfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQogUHJvZ3JhbXNfdW5pdHRlc3Rz
X3Rlc3RodHRwYmFja2VuZF9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQogUHJvZ3JhbXNf
dW5pdHRlc3RzX3Rlc3RodHRwYmFja2VuZF9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFn
cykKIAorUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RpY29uZGF0YWJhc2VfU09VUkNFUyA9IFNvdXJj
ZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RpY29uZGF0YWJhc2UuYworUHJvZ3JhbXNfdW5pdHRlc3Rz
X3Rlc3RpY29uZGF0YWJhc2VfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQorUHJvZ3Jh
bXNfdW5pdHRlc3RzX3Rlc3RpY29uZGF0YWJhc2VfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFk
ZCkKK1Byb2dyYW1zX3VuaXR0ZXN0c190ZXN0aWNvbmRhdGFiYXNlX0xERkxBR1MgPSAkKHdlYmtp
dF90ZXN0c19sZGZsYWdzKQorCiBQcm9ncmFtc191bml0dGVzdHNfdGVzdGdsb2JhbHNfU09VUkNF
UyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RnbG9iYWxzLmMKIFByb2dyYW1zX3VuaXR0
ZXN0c190ZXN0Z2xvYmFsc19DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCiBQcm9ncmFt
c191bml0dGVzdHNfdGVzdGdsb2JhbHNfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50R3RrLmNwcAppbmRleCAzMTY0MjVjLi5hMjJiNmU5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3Bw
CkBAIC02Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSAid2Via2l0Z2xvYmFscy5oIgogI2luY2x1ZGUg
IndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0aWNvbmRhdGFiYXNlLmgi
CisjaW5jbHVkZSAid2Via2l0aWNvbmRhdGFiYXNlcHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtp
dG5ldHdvcmtyZXF1ZXN0LmgiCiAjaW5jbHVkZSAid2Via2l0bmV0d29ya3JlcXVlc3Rwcml2YXRl
LmgiCiAjaW5jbHVkZSAid2Via2l0bmV0d29ya3Jlc3BvbnNlLmgiCkBAIC03NjUsNyArNzY2LDEy
IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24oKSBj
b25zdAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpyZWdpc3RlckZvckljb25Ob3RpZmljYXRp
b24oYm9vbCBzaG91bGRSZWdpc3RlcikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGNv
bnN0IGdjaGFyKiBmcmFtZVVSSSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3VyaShtX2ZyYW1lKTsK
KyAgICBXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X2dldF9pY29uX2RhdGFi
YXNlKCk7CisgICAgaWYgKHNob3VsZFJlZ2lzdGVyKQorICAgICAgICB3ZWJraXRJY29uRGF0YWJh
c2VSZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oZGF0YWJhc2UsIGZyYW1lVVJJLCB0aGlzKTsK
KyAgICBlbHNlCisgICAgICAgIHdlYmtpdEljb25EYXRhYmFzZVVucmVnaXN0ZXJGb3JJY29uTm90
aWZpY2F0aW9uKGRhdGFiYXNlLCBmcmFtZVVSSSwgdGhpcyk7CiB9CiAKIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnQ6OnNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9vbCByZWFkeSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RpY29uZGF0YWJhc2UuYyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RpY29uZGF0YWJhc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4yYzBhMTg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdGljb25kYXRhYmFzZS5jCkBAIC0wLDAgKzEsMjIzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCisKKyNp
bmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0Lmg+CisKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNCwgMCkKK0dNYWlu
TG9vcCAqbG9vcDsKKworc3RhdGljIHZvaWQgZGVsZXRlRGF0YWJhc2VGaWxlSWZFeGlzdHMoY29u
c3QgZ2NoYXIgKmRhdGFiYXNlUGF0aCkKK3sKKyAgICBpZiAoIWdfZmlsZV90ZXN0KGRhdGFiYXNl
UGF0aCwgR19GSUxFX1RFU1RfSVNfRElSKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2NoYXIg
KmRhdGFiYXNlRmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lKGRhdGFiYXNlUGF0aCwgIldlYnBh
Z2VJY29ucy5kYiIsIE5VTEwpOworICAgIGlmIChnX3VubGluayhkYXRhYmFzZUZpbGVuYW1lKSA9
PSAtMSkgeworICAgICAgICBnX2ZyZWUoZGF0YWJhc2VGaWxlbmFtZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBnX3JtZGlyKGRhdGFiYXNlUGF0aCk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RXZWJraXRJY29uRGF0YWJhc2VTZXRQYXRoKHZvaWQpCit7CisgICAgZ2NoYXIgKmRhdGFi
YXNlUGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdG1wX2RpcigpLCAid2Via2l0LXRlc3Rp
Y29uZGF0YWJhc2UiLCBOVUxMKTsKKyAgICBkZWxldGVEYXRhYmFzZUZpbGVJZkV4aXN0cyhkYXRh
YmFzZVBhdGgpOworCisgICAgV2ViS2l0SWNvbkRhdGFiYXNlICpkYXRhYmFzZSA9IHdlYmtpdF9n
ZXRfaWNvbl9kYXRhYmFzZSgpOworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKGRh
dGFiYXNlLCBkYXRhYmFzZVBhdGgpOworCisgICAgZ19hc3NlcnRfY21wc3RyKGRhdGFiYXNlUGF0
aCwgPT0sIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9wYXRoKGRhdGFiYXNlKSk7CisKKyAgICBn
X2ZyZWUoZGF0YWJhc2VQYXRoKTsKK30KKworc3RhdGljIHZvaWQgaWNvbkRhdGFiYXNlR2V0SWNv
blZhbGlkQ2FsbGJhY2soR09iamVjdCAqc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlc3Vs
dCwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ2Jvb2xlYW4gKmJlZW5IZXJlID0gKGdib29s
ZWFuKil1c2VyRGF0YTsKKyAgICBHRXJyb3IgKmVycm9yID0gMDsKKyAgICBHZGtQaXhidWYgKmlj
b24gPSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfZmluaXNoKFdFQktJVF9J
Q09OX0RBVEFCQVNFKHNvdXJjZU9iamVjdCksIHJlc3VsdCwgJmVycm9yKTsKKyAgICBnX2Fzc2Vy
dChpY29uKTsKKyAgICBnX29iamVjdF91bnJlZihpY29uKTsKKworICAgICpiZWVuSGVyZSA9IFRS
VUU7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMgdm9pZCBpY29u
RGF0YWJhc2VHZXRJY29uSW52YWxpZENhbGxiYWNrKEdPYmplY3QgKnNvdXJjZU9iamVjdCwgR0Fz
eW5jUmVzdWx0ICpyZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdib29sZWFuICpi
ZWVuSGVyZSA9IChnYm9vbGVhbiopdXNlckRhdGE7CisgICAgR0Vycm9yICplcnJvciA9IDA7Cisg
ICAgR2RrUGl4YnVmICppY29uID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVm
X2ZpbmlzaChXRUJLSVRfSUNPTl9EQVRBQkFTRShzb3VyY2VPYmplY3QpLCByZXN1bHQsICZlcnJv
cik7CisgICAgZ19hc3NlcnQoIWljb24pOworCisgICAgKmJlZW5IZXJlID0gVFJVRTsKKworICAg
IGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGljb25EYXRhYmFzZUdl
dEljb25DYW5jZWxsZWRDYWxsYmFjayhHT2JqZWN0ICpzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3Vs
dCAqcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnYm9vbGVhbiAqYmVlbkhlcmUg
PSAoZ2Jvb2xlYW4qKXVzZXJEYXRhOworICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworICAgIEdk
a1BpeGJ1ZiAqaWNvbiA9IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5p
c2goV0VCS0lUX0lDT05fREFUQUJBU0Uoc291cmNlT2JqZWN0KSwgcmVzdWx0LCAmZXJyb3IpOwor
ICAgIGdfYXNzZXJ0KCFpY29uKTsKKyAgICBnX2Fzc2VydChlcnJvciAmJiBnX2Vycm9yX21hdGNo
ZXMoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSk7CisKKyAgICAqYmVl
bkhlcmUgPSBUUlVFOworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGlj
IHZvaWQgaWRsZVF1aXRMb29wQ2FsbGJhY2soV2ViS2l0V2ViVmlldyAqd2ViX3ZpZXcsIEdQYXJh
bVNwZWMgKnBzcGVjLCBncG9pbnRlciBkYXRhKQoreworICAgIGdfbWFpbl9sb29wX3F1aXQobG9v
cCk7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRVUkkoY29uc3QgZ2NoYXIgKnVyaSkKK3sKKyAgICBH
dGtXaWRnZXQgKndpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOworICAg
IFdlYktpdFdlYlZpZXcgKnZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25l
dygpKTsKKworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgR1RL
X1dJREdFVCh2aWV3KSk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworCisgICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsIHVyaSk7CisgICAgZ19zaWduYWxfY29ubmVj
dCh2aWV3LCAiaWNvbi1sb2FkZWQiLCBHX0NBTExCQUNLKGlkbGVRdWl0TG9vcENhbGxiYWNrKSwg
TlVMTCk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ3RrX3dpZGdldF9kZXN0
cm95KHdpbmRvdyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBpY29uRGF0YWJhc2VHZXRJY29uVmFs
aWRJZGxlKGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dl
dF9pY29uX3BpeGJ1Zl9hc3luYyh3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKSwgImh0dHA6Ly93
d3cuZ29vZ2xlLmNvbS8iLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpY29uRGF0YWJhc2VHZXRJY29uVmFsaWRDYWxsYmFjaywgdXNlckRhdGEp
OworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuIGljb25EYXRhYmFzZUdl
dEljb25JbnZhbGlkSWRsZShncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICB3ZWJraXRfaWNvbl9k
YXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmMod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCks
ICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvIiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbkRhdGFiYXNlR2V0SWNvbkludmFsaWRDYWxs
YmFjaywgdXNlckRhdGEpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFu
IGljb25EYXRhYmFzZUdldEljb25DYW5jZWxsZWRJZGxlKGdwb2ludGVyIHVzZXJEYXRhKQorewor
ICAgIEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGUgPSBnX2NhbmNlbGxhYmxlX25ldygpOworICAg
IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYyh3ZWJraXRfZ2V0X2lj
b25fZGF0YWJhc2UoKSwgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbSIsIGNhbmNlbGxhYmxlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uRGF0YWJhc2VH
ZXRJY29uQ2FuY2VsbGVkQ2FsbGJhY2ssIHVzZXJEYXRhKTsKKyAgICBnX2NhbmNlbGxhYmxlX2Nh
bmNlbChjYW5jZWxsYWJsZSk7CisgICAgZ19vYmplY3RfdW5yZWYoY2FuY2VsbGFibGUpOworICAg
IHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEljb25EYXRhYmFzZUdl
dEljb25Bc3luYyh2b2lkKQoreworICAgIFdlYktpdEljb25EYXRhYmFzZSAqZGF0YWJhc2UgPSB3
ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKKyAgICBnYm9vbGVhbiBiZWVuVG9JY29uQ2FsbGJh
Y2s7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgLyog
TG9hZCBnb29nbGUgdG8gbWFrZSBzdXJlIGZhdmljb24gaXMgYWRkZWQgdG8gZGF0YWJhc2UgKi8K
KyAgICBsb2FkVVJJKCJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIik7CisKKyAgICBiZWVuVG9JY29u
Q2FsbGJhY2sgPSBGQUxTRTsKKyAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYylpY29uRGF0YWJh
c2VHZXRJY29uVmFsaWRJZGxlLCAmYmVlblRvSWNvbkNhbGxiYWNrKTsKKyAgICBnX21haW5fbG9v
cF9ydW4obG9vcCk7CisgICAgZ19hc3NlcnQoYmVlblRvSWNvbkNhbGxiYWNrKTsKKworICAgIGJl
ZW5Ub0ljb25DYWxsYmFjayA9IEZBTFNFOworICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWlj
b25EYXRhYmFzZUdldEljb25JbnZhbGlkSWRsZSwgJmJlZW5Ub0ljb25DYWxsYmFjayk7CisgICAg
Z19tYWluX2xvb3BfcnVuKGxvb3ApOworICAgIGdfYXNzZXJ0KGJlZW5Ub0ljb25DYWxsYmFjayk7
CisKKyAgICAvKiBDbG9zZSB0aGUgZGF0YWJhc2UgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGdldCBh
biBpY29uLiBUaGlzIGlzIG5vdCBzdXBwb3NlZCB0byBoYXBwZW4sCisgICAgICogc28gdGhhdCBl
cnJvciBpcyBub3QgaGFuZGxlZCwgaXQncyBqdXN0IHVzZWQgaGVyZSB0byBtYWtlIHN1cmUgdGhl
IGNhbGxiYWNrIGlzIG5ldmVyCisgICAgICogY2FsbGVkIHNvIHRoYXQgd2UgY2FuIHRlc3QgY2Fu
Y2VsbGF0aW9uLgorICAgICAqLworICAgIGdjaGFyICpkYXRhYmFzZVBhdGggPSBnX3N0cmR1cCh3
ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0aChkYXRhYmFzZSkpOworICAgIHdlYmtpdF9pY29u
X2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCBOVUxMKTsKKworICAgIGJlZW5Ub0ljb25DYWxs
YmFjayA9IEZBTFNFOworICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWljb25EYXRhYmFzZUdl
dEljb25DYW5jZWxsZWRJZGxlLCAmYmVlblRvSWNvbkNhbGxiYWNrKTsKKyAgICBnX21haW5fbG9v
cF9ydW4obG9vcCk7CisgICAgZ19hc3NlcnQoYmVlblRvSWNvbkNhbGxiYWNrKTsKKworICAgIHdl
YmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCBkYXRhYmFzZVBhdGgpOworICAg
IGdfZnJlZShkYXRhYmFzZVBhdGgpOworCisgICAgLyogR2l2ZSBzb21lIHRpbWUgZm9yIHRoZSBk
YXRhYmFzZSB0byBsb2FkICovCisgICAgZ191c2xlZXAoMTAwMDApOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0V2Via2l0SWNvbkRhdGFiYXNlR2V0SWNvblVSSSh2b2lkKQoreworICAgIGdjaGFyICpp
Y29uVVJJID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpKHdlYmtpdF9nZXRfaWNv
bl9kYXRhYmFzZSgpLCAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihpY29uVVJJLCA9PSwgImh0dHA6Ly93d3cuZ29vZ2xlLmVzL2Zhdmljb24uaWNvIik7Cisg
ICAgZ19mcmVlKGljb25VUkkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0SWNvbkRhdGFi
YXNlUmVtb3ZlQWxsKHZvaWQpCit7CisgICAgV2ViS2l0SWNvbkRhdGFiYXNlICpkYXRhYmFzZSA9
IHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX2Ns
ZWFyKGRhdGFiYXNlKTsKKyAgICBnY2hhciAqaWNvblVSSSA9IHdlYmtpdF9pY29uX2RhdGFiYXNl
X2dldF9pY29uX3VyaShkYXRhYmFzZSwgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIoaWNvblVSSSwgPT0sICIiKTsKKyAgICBnX2ZyZWUoaWNvblVSSSk7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRJY29uRGF0YWJhc2VDbG9zZURhdGFiYXNlKHZvaWQp
Cit7CisgICAgV2ViS2l0SWNvbkRhdGFiYXNlICpkYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9k
YXRhYmFzZSgpOworICAgIGdjaGFyICpkYXRhYmFzZVBhdGggPSBnX3N0cmR1cCh3ZWJraXRfaWNv
bl9kYXRhYmFzZV9nZXRfcGF0aChkYXRhYmFzZSkpOworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNl
X3NldF9wYXRoKGRhdGFiYXNlLCAwKTsKKyAgICBkZWxldGVEYXRhYmFzZUZpbGVJZkV4aXN0cyhk
YXRhYmFzZVBhdGgpOworICAgIGdfZnJlZShkYXRhYmFzZVBhdGgpOworfQorCitpbnQgbWFpbihp
bnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgZ190aHJlYWRfaW5pdCgwKTsKKyAgICBndGtf
dGVzdF9pbml0KCZhcmdjLCAmYXJndiwgMCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBz
Oi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9pY29u
ZGF0YWJhc2Uvc2V0LXBhdGgiLCB0ZXN0V2Via2l0SWNvbkRhdGFiYXNlU2V0UGF0aCk7CisgICAg
Z190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2ljb25kYXRhYmFzZS9pY29uLWFzeW5jIiwgdGVzdFdl
YmtpdEljb25EYXRhYmFzZUdldEljb25Bc3luYyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Vi
a2l0L2ljb25kYXRhYmFzZS9pY29uLXVyaSIsIHRlc3RXZWJraXRJY29uRGF0YWJhc2VHZXRJY29u
VVJJKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvaWNvbmRhdGFiYXNlL3JlbW92ZS1h
bGwiLCB0ZXN0V2Via2l0SWNvbkRhdGFiYXNlUmVtb3ZlQWxsKTsKKyAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi93ZWJraXQvaWNvbmRhdGFiYXNlL2Nsb3NlLWRiIiwgdGVzdFdlYmtpdEljb25EYXRhYmFz
ZUNsb3NlRGF0YWJhc2UpOworCisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30KKyNlbHNlCitp
bnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgZ19jcml0aWNhbCgiWW91IHdp
bGwgbmVlZCBndGstMi4xNC4wIHRvIHJ1biB0aGUgdW5pdCB0ZXN0cy4gRG9pbmcgbm90aGluZyBu
b3cuIik7CisgICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcAppbmRleCAzODNiMDgxLi5kMjVkMWExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcApA
QCAtMjMsMTAgKzIzLDE1IEBACiAjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCiAjaW5jbHVk
ZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUg
IkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiR1JlZlB0ci5oIgogI2luY2x1ZGUgIklj
b25EYXRhYmFzZS5oIgorI2luY2x1ZGUgIkljb25EYXRhYmFzZUNsaWVudC5oIgogI2luY2x1ZGUg
IkltYWdlLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIndlYmtpdGdsb2JhbHMu
aCIKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdGlj
b25kYXRhYmFzZXByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCiAjaW5jbHVk
ZSAid2Via2l0c2VjdXJpdHlvcmlnaW5wcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0d2ViZnJh
bWUuaCIKQEAgLTYzLDYgKzY4LDk1IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKK3N0
cnVjdCBQZW5kaW5nSWNvblJlcXVlc3Q7CisKK3N0YXRpYyB2b2lkIHdlYmtpdEljb25EYXRhYmFz
ZVByb2Nlc3NQZW5kaW5nSWNvbnNGb3JVUkkoV2ViS2l0SWNvbkRhdGFiYXNlKiwgY29uc3QgU3Ry
aW5nJiBwYWdlVVJJKTsKK3N0YXRpYyB2b2lkIHdlYmtpdEljb25EYXRhYmFzZUltcG9ydEZpbmlz
aGVkKFdlYktpdEljb25EYXRhYmFzZSopOworc3RhdGljIHZvaWQgd2Via2l0SWNvbkRhdGFiYXNl
R2V0SWNvblBpeGJ1ZkNhbmNlbGxlZChHQ2FuY2VsbGFibGUqLCBQZW5kaW5nSWNvblJlcXVlc3Qq
KTsKKworY2xhc3MgSWNvbkRhdGFiYXNlQ2xpZW50R3RrIDogcHVibGljIFdlYkNvcmU6Okljb25E
YXRhYmFzZUNsaWVudCB7CisgICAgcHVibGljOgorICAgIC8vIEljb25EYXRhYmFzZUNsaWVudCBp
bnRlcmZhY2UKKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybUltcG9ydCgpIHsgcmV0dXJuIHRydWU7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlQWxsSWNvbnMoKSB7IH07CisgICAgdmlydHVh
bCB2b2lkIGRpZEltcG9ydEljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpIHsgfTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkSW1wb3J0SWNvbkRhdGFGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYg
VVJMKQorICAgIHsKKyAgICAgICAgd2Via2l0SWNvbkRhdGFiYXNlUHJvY2Vzc1BlbmRpbmdJY29u
c0ZvclVSSSh3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKSwgVVJMKTsKKyAgICB9CisgICAgdmly
dHVhbCB2b2lkIGRpZENoYW5nZUljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpIHsgfTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoVVJMSW1wb3J0KCkKKyAgICB7CisgICAgICAgIHdlYmtp
dEljb25EYXRhYmFzZUltcG9ydEZpbmlzaGVkKHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpKTsK
KyAgICB9Cit9OworCitzdHJ1Y3QgUGVuZGluZ0ljb25SZXF1ZXN0IHsKK3B1YmxpYzoKKyAgICBQ
ZW5kaW5nSWNvblJlcXVlc3QoY29uc3QgY2hhciogcGFnZVVSSSwgV2ViQ29yZTo6RnJhbWVMb2Fk
ZXJDbGllbnQqIGZyYW1lTG9hZGVyQ2xpZW50KQorICAgICAgICA6IG1fcGFnZVVSSShwYWdlVVJJ
KQorICAgICAgICAsIG1fZnJhbWVMb2FkZXJDbGllbnQoZnJhbWVMb2FkZXJDbGllbnQpCisgICAg
ICAgICwgbV9hc3luY1Jlc3VsdCgwKQorICAgICAgICAsIG1fY2FuY2VsbGFibGUoMCkKKyAgICAg
ICAgLCBtX2NhbmNlbGxlZElkKDApCisgICAgeworICAgIH0KKworICAgIFBlbmRpbmdJY29uUmVx
dWVzdChjb25zdCBjaGFyKiBwYWdlVVJJLCBHU2ltcGxlQXN5bmNSZXN1bHQqIHJlc3VsdCwgR0Nh
bmNlbGxhYmxlKiBjYW5jZWxsYWJsZSkKKyAgICAgICAgOiBtX3BhZ2VVUkkocGFnZVVSSSkKKyAg
ICAgICAgLCBtX2ZyYW1lTG9hZGVyQ2xpZW50KDApCisgICAgICAgICwgbV9hc3luY1Jlc3VsdChy
ZXN1bHQpCisgICAgICAgICwgbV9jYW5jZWxsYWJsZShjYW5jZWxsYWJsZSkKKyAgICAgICAgLCBt
X2NhbmNlbGxlZElkKDApCisgICAgeworICAgICAgICBpZiAoIWNhbmNlbGxhYmxlKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIG1fY2FuY2VsbGVkSWQgPSBnX2NhbmNlbGxhYmxlX2Nv
bm5lY3QoY2FuY2VsbGFibGUsIEdfQ0FMTEJBQ0sod2Via2l0SWNvbkRhdGFiYXNlR2V0SWNvblBp
eGJ1ZkNhbmNlbGxlZCksIHRoaXMsIDApOworICAgICAgICBnX29iamVjdF9zZXRfZGF0YV9mdWxs
KEdfT0JKRUNUKHJlc3VsdCksICJjYW5jZWxsYWJsZSIsIGdfb2JqZWN0X3JlZihjYW5jZWxsYWJs
ZSksIHN0YXRpY19jYXN0PEdEZXN0cm95Tm90aWZ5PihnX29iamVjdF91bnJlZikpOworICAgIH0K
KworICAgIH5QZW5kaW5nSWNvblJlcXVlc3QoKQorICAgIHsKKyAgICAgICAgaWYgKG1fY2FuY2Vs
bGVkSWQgPiAwKQorICAgICAgICAgICAgZ19jYW5jZWxsYWJsZV9kaXNjb25uZWN0KG1fY2FuY2Vs
bGFibGUuZ2V0KCksIG1fY2FuY2VsbGVkSWQpOworICAgIH0KKworICAgIGNvbnN0IFN0cmluZyYg
cGFnZVVSSSgpIHsgcmV0dXJuIG1fcGFnZVVSSTsgfQorICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVy
Q2xpZW50KiBmcmFtZUxvYWRlckNsaWVudCgpIHsgcmV0dXJuIG1fZnJhbWVMb2FkZXJDbGllbnQ7
IH0KKyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIGFzeW5jUmVzdWx0KCkgeyByZXR1cm4gbV9hc3lu
Y1Jlc3VsdC5nZXQoKTsgfQorCisgICAgdm9pZCBhc3luY1Jlc3VsdENvbXBsZXRlKEdka1BpeGJ1
ZiogaWNvbikKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2FzeW5jUmVzdWx0KTsKKyAgICAgICAg
Z19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3BvaW50ZXIobV9hc3luY1Jlc3VsdC5n
ZXQoKSwgaWNvbiwgMCk7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZSht
X2FzeW5jUmVzdWx0LmdldCgpKTsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorCisgICAg
dm9pZCBhc3luY1Jlc3VsdENhbmNlbCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9hc3luY1Jl
c3VsdCk7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZXJyb3IobV9hc3luY1Jl
c3VsdC5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQsICIlcyIsICJPcGVy
YXRpb24gd2FzIGNhbmNlbGxlZCIpOworICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29t
cGxldGUobV9hc3luY1Jlc3VsdC5nZXQoKSk7CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIH0K
KworICAgIHZvaWQgZnJhbWVMb2FkZXJEaXNwYXRjaERpZFJlY2VpdmVJY29uKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX2ZyYW1lTG9hZGVyQ2xpZW50KTsKKyAgICAgICAgbV9mcmFtZUxvYWRl
ckNsaWVudC0+ZGlzcGF0Y2hEaWRSZWNlaXZlSWNvbigpOworICAgICAgICBkZWxldGUgdGhpczsK
KyAgICB9CisKKyAgICBTdHJpbmcgbV9wYWdlVVJJOworICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVy
Q2xpZW50KiBtX2ZyYW1lTG9hZGVyQ2xpZW50OworICAgIEdSZWZQdHI8R1NpbXBsZUFzeW5jUmVz
dWx0PiBtX2FzeW5jUmVzdWx0OworICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxh
YmxlOworICAgIGd1bG9uZyBtX2NhbmNlbGxlZElkOworfTsKKworCiBlbnVtIHsKICAgICBQUk9Q
XzAsCiAKQEAgLTc3LDEwICsxNzEsMTMgQEAgZW51bSB7CiAKIHN0YXRpYyBndWludCB3ZWJraXRf
aWNvbl9kYXRhYmFzZV9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKIAotR19ERUZJTkVf
VFlQRShXZWJLaXRJY29uRGF0YWJhc2UsIHdlYmtpdF9pY29uX2RhdGFiYXNlLCBHX1RZUEVfT0JK
RUNUKTsKK0dfREVGSU5FX1RZUEUoV2ViS2l0SWNvbkRhdGFiYXNlLCB3ZWJraXRfaWNvbl9kYXRh
YmFzZSwgR19UWVBFX09CSkVDVCkKIAogc3RydWN0IF9XZWJLaXRJY29uRGF0YWJhc2VQcml2YXRl
IHsKICAgICBHT3duUHRyPGdjaGFyPiBwYXRoOworICAgIEljb25EYXRhYmFzZUNsaWVudEd0ayBp
Y29uRGF0YWJhc2VDbGllbnQ7CisgICAgR0xpc3QqIHBlbmRpbmdJY29uUmVxdWVzdHM7CisgICAg
Ym9vbCBpbXBvcnRGaW5pc2hlZDsKIH07CiAKIHN0YXRpYyB2b2lkIHdlYmtpdF9pY29uX2RhdGFi
YXNlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKQEAgLTIyNSwxNiArMzIyLDIyIEBAIHZvaWQg
d2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSwgY29uc3QgZ2NoYXIqIHBhCiAgICAgaWYgKGRhdGFiYXNlLT5wcml2LT5wYXRoLmdldCgpKQog
ICAgICAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5jbG9zZSgpOwogCisgICAgZGF0YWJhc2Ut
PnByaXYtPmltcG9ydEZpbmlzaGVkID0gZmFsc2U7CiAgICAgaWYgKCEocGF0aCAmJiBwYXRoWzBd
KSkgewogICAgICAgICBkYXRhYmFzZS0+cHJpdi0+cGF0aC5zZXQoMCk7CiAgICAgICAgIFdlYkNv
cmU6Omljb25EYXRhYmFzZSgpLnNldEVuYWJsZWQoZmFsc2UpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgZGF0YWJhc2UtPnByaXYtPnBhdGguc2V0KGdfc3RyZHVwKHBhdGgpKTsKLQor
ICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLnNldENsaWVudCgmZGF0YWJhc2UtPnByaXYtPmlj
b25EYXRhYmFzZUNsaWVudCk7CisgICAgV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpkZWxheURhdGFi
YXNlQ2xlYW51cCgpOwogICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLnNldEVuYWJsZWQodHJ1
ZSk7Ci0gICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkub3BlbihXZWJDb3JlOjpmaWxlbmFtZVRv
U3RyaW5nKGRhdGFiYXNlLT5wcml2LT5wYXRoLmdldCgpKSwgV2ViQ29yZTo6SWNvbkRhdGFiYXNl
OjpkZWZhdWx0RGF0YWJhc2VGaWxlbmFtZSgpKTsKKyAgICBpZiAoIVdlYkNvcmU6Omljb25EYXRh
YmFzZSgpLm9wZW4oV2ViQ29yZTo6ZmlsZW5hbWVUb1N0cmluZyhwYXRoKSwgV2ViQ29yZTo6SWNv
bkRhdGFiYXNlOjpkZWZhdWx0RGF0YWJhc2VGaWxlbmFtZSgpKSkgeworICAgICAgICBXZWJDb3Jl
OjpJY29uRGF0YWJhc2U6OmFsbG93RGF0YWJhc2VDbGVhbnVwKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBkYXRhYmFzZS0+cHJpdi0+cGF0aC5zZXQoZ19zdHJkdXAocGF0aCkpOwog
CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICBpZiAoIWluaXRpYWxp
emVkKSB7CkBAIC0yNjQsMjIgKzM2NywzMiBAQCBnY2hhciogd2Via2l0X2ljb25fZGF0YWJhc2Vf
Z2V0X2ljb25fdXJpKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGdjaAogICAg
IHJldHVybiBnX3N0cmR1cChXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25V
UkxGb3JQYWdlVVJMKHBhZ2VVUkwpLnV0ZjgoKS5kYXRhKCkpOwogfQogCitzdGF0aWMgR2RrUGl4
YnVmKiBnZXRJY29uUGl4YnVmU3luY2hyb25vdXNseShXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFi
YXNlLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7CisgICAgLy8gVGhlIGV4YWN0IHNpemUgd2Ug
cGFzcyBpcyBpcnJlbGV2YW50IHRvIHRoZSBXZWJDb3JlOjppY29uRGF0YWJhc2UgY29kZS4KKyAg
ICAvLyBXZSBtdXN0IHBhc3Mgc29tZXRoaW5nIGdyZWF0ZXIgdGhhbiAwLCAwIHRvIGdldCBhIHBp
eGJ1Zi4KKyAgICBXZWJDb3JlOjpJbWFnZSogaWNvbiA9IFdlYkNvcmU6Omljb25EYXRhYmFzZSgp
LnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwocGFnZVVSTCwgV2ViQ29yZTo6SW50U2l6ZSgxNiwg
MTYpKTsKKyAgICByZXR1cm4gaWNvbiA/IGljb24tPmdldEdka1BpeGJ1ZigpIDogMDsKK30KKwog
LyoqCiAgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWY6CiAgKiBAZGF0YWJh
c2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQogICogQHBhZ2VfdXJpOiBVUkkgb2YgdGhlIHBhZ2Ug
Y29udGFpbmluZyB0aGUgaWNvbgogICoKLSAqIE9idGFpbnMgYSAjR2RrUGl4YnVmIG9mIHRoZSBm
YXZpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZSBVUkksIG9yCi0gKiBhIGRlZmF1bHQgaWNvbiBpZiB0
aGVyZSBpcyBubyBpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZS4gVXNlCisgKiBPYnRhaW5zIGEgI0dk
a1BpeGJ1ZiBvZiB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVuIHBhZ2UgVVJJLCBvciAlTlVMTAor
ICogaWYgdGhlcmUgaXMgbm8gaWNvbiBmb3IgdGhlIGdpdmVuIHBhZ2Ugb3IgaXQgaGFzbid0IGJl
ZW4gbG9hZGVkIHlldC4gVXNlCiAgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmko
KSBpZiB5b3UgbmVlZCB0byBkaXN0aW5ndWlzaCB0aGVzZSBjYXNlcy4KLSAqIFVzdWFsbHkgeW91
IHdhbnQgdG8gY29ubmVjdCB0byBXZWJLaXRJY29uRGF0YWJhc2U6Omljb24tbG9hZGVkIGFuZCBj
YWxsIHRoaXMKLSAqIG1ldGhvZCBpbiB0aGUgY2FsbGJhY2suCisgKiBUbyBtYWtlIHN1cmUgdGhp
cyBtZXRob2QgcmV0dXJuIHdpbGwgcmV0dXJuIGEgdmFsaWQgaWNvbiwgd2hlbiB0aGUgZ2l2ZW4g
VVJJCisgKiBoYXMgb25lLCB5b3Ugc2hvdWxkIGNvbm5lY3QgdG8gV2ViS2l0SWNvbkRhdGFiYXNl
OjppY29uLWxvYWRlZCBhbmQgY2FsbCB0aGlzCisgKiBtZXRob2QgaW4gdGhlIGNhbGxiYWNrLiBT
ZWUgYWxzbyB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmMoKS4KICAq
CiAgKiBUaGUgcGl4YnVmIHdpbGwgaGF2ZSB0aGUgbGFyZ2VzdCBzaXplIHByb3ZpZGVkIGJ5IHRo
ZSBzZXJ2ZXIgYW5kIHNob3VsZAogICogYmUgcmVzaXplZCBiZWZvcmUgaXQgaXMgZGlzcGxheWVk
LgogICogU2VlIGFsc28gd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3BpeGJ1ZigpLgogICoKLSAq
IFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgcmVmZXJlbmNlIHRvIGEgI0dka1BpeGJ1
Ziwgb3IgJU5VTEwKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgcmVmZXJlbmNl
IHRvIGEgI0dka1BpeGJ1Ziwgb3IgJU5VTEwgaWYgdGhlIGdpdmVuCisgKiBVUkkgZG9lc24ndCBo
YXZlIGFuIGljb24gb3IgaXQgaGFzbid0IGJlZW4gbG9hZGVkIHlldC4KICAqCiAgKiBTaW5jZTog
MS4zLjEzCiAgKiovCkBAIC0yODksMTUgKzQwMiwxNzcgQEAgR2RrUGl4YnVmKiB3ZWJraXRfaWNv
bl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwg
Y28KICAgICBnX3JldHVybl92YWxfaWZfZmFpbChwYWdlVVJJLCAwKTsKIAogICAgIFN0cmluZyBw
YWdlVVJMID0gU3RyaW5nOjpmcm9tVVRGOChwYWdlVVJJKTsKLSAgICAvLyBUaGUgZXhhY3Qgc2l6
ZSB3ZSBwYXNzIGlzIGlycmVsZXZhbnQgdG8gdGhlIFdlYkNvcmU6Omljb25EYXRhYmFzZSBjb2Rl
LgotICAgIC8vIFdlIG11c3QgcGFzcyBzb21ldGhpbmcgZ3JlYXRlciB0aGFuIDAsIDAgdG8gZ2V0
IGEgcGl4YnVmLgotICAgIFdlYkNvcmU6OkltYWdlKiBpY29uID0gV2ViQ29yZTo6aWNvbkRhdGFi
YXNlKCkuc3luY2hyb25vdXNJY29uRm9yUGFnZVVSTChwYWdlVVJMLCBXZWJDb3JlOjpJbnRTaXpl
KDE2LCAxNikpOwotICAgIGlmICghaWNvbikKKyAgICByZXR1cm4gZ2V0SWNvblBpeGJ1ZlN5bmNo
cm9ub3VzbHkoZGF0YWJhc2UsIHBhZ2VVUkwpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gZ2V0SWNv
blBpeGJ1ZkNhbmNlbGxlZElkbGUoZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgUGVuZGluZ0lj
b25SZXF1ZXN0KiByZXF1ZXN0ID0gc3RhdGljX2Nhc3Q8UGVuZGluZ0ljb25SZXF1ZXN0Kj4odXNl
ckRhdGEpOworCisgICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9nZXRf
aWNvbl9kYXRhYmFzZSgpOworICAgIEdMaXN0KiBpY29ucyA9IGRhdGFiYXNlLT5wcml2LT5wZW5k
aW5nSWNvblJlcXVlc3RzOworICAgIHdoaWxlIChpY29ucykgeworICAgICAgICBHTGlzdCogbmV4
dCA9IGdfbGlzdF9uZXh0KGljb25zKTsKKworICAgICAgICBpZiAocmVxdWVzdCA9PSBpY29ucy0+
ZGF0YSkgeworICAgICAgICAgICAgZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMg
PSBnX2xpc3RfcmVtb3ZlX2xpbmsoZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMs
IGljb25zKTsKKyAgICAgICAgICAgIHJlcXVlc3QtPmFzeW5jUmVzdWx0Q2FuY2VsKCk7CisgICAg
ICAgICAgICBnX2xpc3RfZnJlZShpY29ucyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGljb25zID0gbmV4dDsKKyAgICB9CisKKyAgICByZXR1cm4gRkFMU0U7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdEljb25EYXRhYmFzZUdldEljb25QaXhidWZDYW5jZWxsZWQo
R0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgUGVuZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0KQor
eworICAgIC8qIEhhbmRsZSBjYW5jZWxsZWQgaW4gYSBpbiBpZGxlIHNpbmNlIGl0IG1pZ2h0IGJl
IGNhbGxlZCBmcm9tIGFueSB0aHJlYWQgKi8KKyAgICBnX2lkbGVfYWRkKGdldEljb25QaXhidWZD
YW5jZWxsZWRJZGxlLCByZXF1ZXN0KTsKK30KKworLyoqCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9nZXRfaWNvbl9waXhidWZfYXN5bmM6CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRh
YmFzZQorICogQHBhZ2VfdXJpOiBVUkkgb2YgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbgor
ICogQGNhbmNlbGxhYmxlOiBBICNHQ2FuY2VsbGFibGUgb3IgJU5VTEwuCisgKiBAY2FsbGJhY2s6
IChhbGxvdy1ub25lKTogQSAjR0FzeW5jUmVhZHlDYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHJl
cXVlc3QgaXMKKyAqICAgICAgICAgICAgc2F0aXNmaWVkIG9yICVOVUxMIGlmIHlvdSBkb24ndCBj
YXJlIGFib3V0IHRoZSByZXN1bHQuCisgKiBAdXNlcl9kYXRhOiBUaGUgZGF0YSB0byBwYXNzIHRv
IEBjYWxsYmFjay4KKyAqCisgKiBBc3luY2hyb25vdXNseSBvYnRhaW5zIGEgI0dka1BpeGJ1ZiBv
ZiB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVuIHBhZ2UgVVJJLgorICoKKyAqIFRoaXMgaXMgYW4g
YXN5bmNocm9ub3VzIG1ldGhvZC4gV2hlbiB0aGUgb3BlcmF0aW9uIGlzIGZpbmlzaGVkLCBjYWxs
YmFjayB3aWxsCisgKiBiZSBpbnZva2VkLiBZb3UgY2FuIHRoZW4gY2FsbCB3ZWJraXRfaWNvbl9k
YXRhYmFzZV9nZXRfaWNvbl9waXhidWZfZmluaXNoKCkKKyAqIHRvIGdldCB0aGUgcmVzdWx0IG9m
IHRoZSBvcGVyYXRpb24uCisgKiBTZWUgYWxzbyB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl9waXhidWYoKS4KKyAqCisgKiBTaW5jZTogMS41LjIKKyAqKi8KK3ZvaWQgd2Via2l0X2ljb25f
ZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2FzeW5jKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJh
c2UsIGNvbnN0IGdjaGFyKiBwYWdlVVJJLCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCAgR0Fz
eW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShkYXRhYmFzZSkpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwocGFnZVVSSSk7CisKKyAgICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3Vs
dD4gcmVzdWx0ID0gYWRvcHRHUmVmKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcoR19PQkpFQ1Qo
ZGF0YWJhc2UpLCBjYWxsYmFjaywgdXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1
Zl9hc3luYykpKTsKKworICAgIFBlbmRpbmdJY29uUmVxdWVzdCogcmVxdWVzdCA9IG5ldyBQZW5k
aW5nSWNvblJlcXVlc3QocGFnZVVSSSwgcmVzdWx0LmdldCgpLCBjYW5jZWxsYWJsZSk7CisKKyAg
ICAvLyBSZWdpc3RlciBpY29uIHJlcXVlc3QgYmVmb3JlIGFza2luZyBmb3IgdGhlIGljb24gdG8g
YXZvaWQgcmFjZSBjb25kaXRpb25zLgorICAgIGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJl
cXVlc3RzID0gZ19saXN0X3ByZXBlbmQoZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVz
dHMsIHJlcXVlc3QpOworICAgIEdka1BpeGJ1ZiogcGl4YnVmID0gZ2V0SWNvblBpeGJ1ZlN5bmNo
cm9ub3VzbHkoZGF0YWJhc2UsIFN0cmluZzo6ZnJvbVVURjgocGFnZVVSSSkpOworICAgIGlmICgh
cGl4YnVmICYmICFkYXRhYmFzZS0+cHJpdi0+aW1wb3J0RmluaXNoZWQpIHsKKyAgICAgICAgLy8g
SW1wb3J0IGlzIG9uZ29pbmcsIHRoZXJlIG1pZ2h0IGJlIGFuIGljb24uCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBBU1NFUlQoZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVz
dHMtPmRhdGEgPT0gcmVxdWVzdCk7CisgICAgZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVx
dWVzdHMgPSBnX2xpc3RfZGVsZXRlX2xpbmsoZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVx
dWVzdHMsIGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzKTsKKyAgICByZXF1ZXN0
LT5hc3luY1Jlc3VsdENvbXBsZXRlKHBpeGJ1Zik7Cit9CisKKy8qKgorICogd2Via2l0X2ljb25f
ZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2ZpbmlzaDoKKyAqIEBkYXRhYmFzZTogYSAjV2ViS2l0
SWNvbkRhdGFiYXNlCisgKiBAcmVzdWx0OiBBICNHQXN5bmNSZXN1bHQgb2J0YWluZWQgZnJvbSB0
aGUgI0dBc3luY1JlYWR5Q2FsbGJhY2sgcGFzc2VkIHRvIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dl
dF9pY29uX3BpeGJ1Zl9hc3luYygpCisgKiBAZXJyb3I6IFJldHVybiBsb2NhdGlvbiBmb3IgZXJy
b3Igb3IgJU5VTEwuCisgKgorICogRmluaXNoZXMgYW4gb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3
ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmMoKS4KKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IHJlZmVyZW5jZSB0byBhICNHZGtQaXhidWYsIG9y
ICVOVUxMLgorICoKKyAqIFNpbmNlOiAxLjUuMgorICovCitHZGtQaXhidWYqIHdlYmtpdF9pY29u
X2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5pc2goV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRh
YmFzZSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIEdFcnJvcioqIGVycm9yKQoreworICAgIEdTaW1w
bGVBc3luY1Jlc3VsdCogc2ltcGxlUmVzdWx0ID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUKHJlc3Vs
dCk7CisgICAgZ193YXJuX2lmX2ZhaWwoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9zb3VyY2Vf
dGFnKHNpbXBsZVJlc3VsdCkgPT0gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVm
X2FzeW5jKTsKKworICAgIGlmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfcHJvcGFnYXRlX2Vycm9y
KHNpbXBsZVJlc3VsdCwgZXJyb3IpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBHZGtQaXhidWYq
IHBpeGJ1ZiA9IGljb24tPmdldEdka1BpeGJ1ZigpOwotICAgIGlmICghcGl4YnVmKQorCisgICAg
R0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSA9IHN0YXRpY19jYXN0PEdDYW5jZWxsYWJsZSo+KGdf
b2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKHNpbXBsZVJlc3VsdCksICJjYW5jZWxsYWJsZSIpKTsK
KyAgICBpZiAoY2FuY2VsbGFibGUgJiYgZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoY2FuY2Vs
bGFibGUpKSB7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIEdfSU9fRVJST1Is
IEdfSU9fRVJST1JfQ0FOQ0VMTEVELCAiT3BlcmF0aW9uIHdhcyBjYW5jZWxsZWQiKTsKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEdka1BpeGJ1Zio+KGdfb2JqZWN0
X3JlZihwaXhidWYpKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R2RrUGl4YnVm
Kj4oZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIoc2ltcGxlUmVzdWx0
KSk7Cit9CisKK3ZvaWQgd2Via2l0SWNvbkRhdGFiYXNlUmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0
aW9uKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGdjaGFyKiBwYWdlVVJJLCBX
ZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudCogY2xpZW50KQoreworICAgIGRhdGFiYXNlLT5wcml2
LT5wZW5kaW5nSWNvblJlcXVlc3RzID0gZ19saXN0X3ByZXBlbmQoZGF0YWJhc2UtPnByaXYtPnBl
bmRpbmdJY29uUmVxdWVzdHMsIG5ldyBQZW5kaW5nSWNvblJlcXVlc3QocGFnZVVSSSwgY2xpZW50
KSk7Cit9CisKK3ZvaWQgd2Via2l0SWNvbkRhdGFiYXNlVW5yZWdpc3RlckZvckljb25Ob3RpZmlj
YXRpb24oV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkks
IFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgR0xpc3QqIGljb25z
ID0gZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHM7CisgICAgd2hpbGUgKGljb25z
KSB7CisgICAgICAgIEdMaXN0KiBuZXh0ID0gZ19saXN0X25leHQoaWNvbnMpOworCisgICAgICAg
IFBlbmRpbmdJY29uUmVxdWVzdCogcmVxdWVzdCA9IHN0YXRpY19jYXN0PFBlbmRpbmdJY29uUmVx
dWVzdCo+KGljb25zLT5kYXRhKTsKKyAgICAgICAgaWYgKHJlcXVlc3QtPnBhZ2VVUkkoKSA9PSBw
YWdlVVJJICYmIHJlcXVlc3QtPmZyYW1lTG9hZGVyQ2xpZW50KCkgPT0gY2xpZW50KSB7CisgICAg
ICAgICAgICBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cyA9IGdfbGlzdF9yZW1v
dmVfbGluayhkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cywgaWNvbnMpOworICAg
ICAgICAgICAgZGVsZXRlIHJlcXVlc3Q7CisgICAgICAgICAgICBnX2xpc3RfZnJlZShpY29ucyk7
CisgICAgICAgIH0KKworICAgICAgICBpY29ucyA9IG5leHQ7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRJY29uRGF0YWJhc2VQcm9jZXNzUGVuZGluZ0ljb25zRm9yVVJJKFdlYktpdElj
b25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgcGFnZVVSSSkKK3sKKyAgICBHTGlz
dCogaWNvbnMgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0czsKKyAgICB3aGls
ZSAoaWNvbnMpIHsKKyAgICAgICAgR0xpc3QqIG5leHQgPSBnX2xpc3RfbmV4dChpY29ucyk7CisK
KyAgICAgICAgUGVuZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0ID0gc3RhdGljX2Nhc3Q8UGVuZGlu
Z0ljb25SZXF1ZXN0Kj4oaWNvbnMtPmRhdGEpOworICAgICAgICBpZiAocmVxdWVzdC0+cGFnZVVS
SSgpICE9IHBhZ2VVUkkpIHsKKyAgICAgICAgICAgIGljb25zID0gbmV4dDsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJ
Y29uUmVxdWVzdHMgPSBnX2xpc3RfcmVtb3ZlX2xpbmsoZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJ
Y29uUmVxdWVzdHMsIGljb25zKTsKKyAgICAgICAgaWYgKHJlcXVlc3QtPmZyYW1lTG9hZGVyQ2xp
ZW50KCkpCisgICAgICAgICAgICByZXF1ZXN0LT5mcmFtZUxvYWRlckRpc3BhdGNoRGlkUmVjZWl2
ZUljb24oKTsKKyAgICAgICAgZWxzZSBpZiAocmVxdWVzdC0+YXN5bmNSZXN1bHQoKSkKKyAgICAg
ICAgICAgIHJlcXVlc3QtPmFzeW5jUmVzdWx0Q29tcGxldGUoZ2V0SWNvblBpeGJ1ZlN5bmNocm9u
b3VzbHkoZGF0YWJhc2UsIHBhZ2VVUkkpKTsKKyAgICAgICAgZ19saXN0X2ZyZWUoaWNvbnMpOwor
CisgICAgICAgIGljb25zID0gbmV4dDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdElj
b25EYXRhYmFzZUltcG9ydEZpbmlzaGVkKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpCit7
CisgICAgZGF0YWJhc2UtPnByaXYtPmltcG9ydEZpbmlzaGVkID0gdHJ1ZTsKKworICAgIC8vIElt
cG9ydCBpcyBjb21wbGV0ZSwgcHJvY2VzcyBwZW5kaW5nIHJlcXVlc3RzIGZvciBwYWdlcyB0aGF0
IGFyZSBub3QgaW4gdGhlIGRhdGFiYXNlLAorICAgIC8vIHNpbmNlIGRpZEltcG9ydEljb25EYXRh
Rm9yUGFnZVVSTCgpIHdpbGwgbmV2ZXIgYmUgY2FsbGVkIGZvciB0aGVtLgorICAgIC8vIEZvciBh
c3luYyByZXF1ZXN0cyB3ZSBuZWVkIHRvIGNvbXBsZXRlIHRoZSBvcGVyYXRpb24sIHdoaWxlIGZv
ciBmcmFtZSBsb2FkZXIKKyAgICAvLyByZXF1ZXN0cyB3ZSBvbmx5IG5lZWQgdG8gZGVsZXRlIHRo
ZSByZXF1ZXN0IHNvIHRoYXQgaWNvbi1sb2FkZWQgd29uJ3QgYmUgZW1pdHRlZC4KKyAgICBHTGlz
dCogaWNvbnMgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0czsKKyAgICB3aGls
ZSAoaWNvbnMpIHsKKyAgICAgICAgR0xpc3QqIG5leHQgPSBnX2xpc3RfbmV4dChpY29ucyk7CisK
KyAgICAgICAgUGVuZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0ID0gc3RhdGljX2Nhc3Q8UGVuZGlu
Z0ljb25SZXF1ZXN0Kj4oaWNvbnMtPmRhdGEpOworICAgICAgICBTdHJpbmcgaWNvblVSTCA9IFdl
YkNvcmU6Omljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwocmVxdWVz
dC0+cGFnZVVSSSgpKTsKKyAgICAgICAgaWYgKGljb25VUkwuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cyA9IGdfbGlzdF9yZW1vdmVf
bGluayhkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cywgaWNvbnMpOworICAgICAg
ICAgICAgaWYgKHJlcXVlc3QtPmFzeW5jUmVzdWx0KCkpCisgICAgICAgICAgICAgICAgcmVxdWVz
dC0+YXN5bmNSZXN1bHRDb21wbGV0ZSgwKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBkZWxldGUgcmVxdWVzdDsKKworICAgICAgICAgICAgZ19saXN0X2ZyZWUoaWNvbnMpOwor
ICAgICAgICB9CisgICAgICAgIGljb25zID0gbmV4dDsKKyAgICB9CiB9CiAKIC8qKgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oIGIvU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oCmluZGV4IDVlYWQ2MDMu
LjViY2QyMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29u
ZGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFi
YXNlLmgKQEAgLTUzLDI1ICs1MywzNyBAQCBzdHJ1Y3QgX1dlYktpdEljb25EYXRhYmFzZUNsYXNz
IHsKIH07CiAKIFdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF90eXBl
ICAgICAgICAgICAgKHZvaWQpOword2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3R5cGUgICAgICAg
ICAgICAgICh2b2lkKTsKIAogV0VCS0lUX0FQSSBjb25zdCBnY2hhcioKLXdlYmtpdF9pY29uX2Rh
dGFiYXNlX2dldF9wYXRoICAgICAgICAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2Up
Oword2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3BhdGggICAgICAgICAgICAgIChXZWJLaXRJY29u
RGF0YWJhc2UqIGRhdGFiYXNlKTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfaWNvbl9kYXRh
YmFzZV9zZXRfcGF0aCAgICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAg
ICAgICBwYXRoKTsKK3dlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoICAgICAgICAgICAgICAo
V2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAgICBwYXRoKTsKIAogV0VCS0lUX0FQ
SSBnY2hhcioKLXdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3VyaSAgICAgICAgKFdlYktp
dEljb25EYXRhYmFzZSogZGF0YWJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhZ2VfdXJpKTsKK3dlYmtpdF9pY29uX2Rh
dGFiYXNlX2dldF9pY29uX3VyaSAgICAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2No
YXIqICAgICAgICBwYWdlX3VyaSk7CiAKIFdFQktJVF9BUEkgR2RrUGl4YnVmKgotd2Via2l0X2lj
b25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRh
YmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdj
aGFyKiAgICAgICAgcGFnZV91cmkpOword2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4
YnVmICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhZ2VfdXJp
KTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhciAgICAgICAg
ICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKTsKK3dlYmtpdF9pY29uX2RhdGFi
YXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYyAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIq
ICAgICAgICBwYWdlX3VyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0NhbmNlbGxhYmxlKiAgICAgICBjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAg
ICAgICAgICB1c2VyX2RhdGEpOworCitXRUJLSVRfQVBJIEdka1BpeGJ1ZioKK3dlYmtpdF9pY29u
X2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5pc2goV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRh
YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5j
UmVzdWx0KiAgICAgICByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdFcnJvcioqICAgICAgICAgICAgZXJyb3IpOworCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9pY29uX2RhdGFiYXNlX2NsZWFyICAgICAgICAgICAgICAgICAoV2ViS2l0SWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSk7CiAKIEdfRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YjQzMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlcHJpdmF0ZS5oCkBAIC0wLDAgKzEs
MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJr
aXRpY29uZGF0YWJhc2Vwcml2YXRlX2gKKyNkZWZpbmUgd2Via2l0aWNvbmRhdGFiYXNlcHJpdmF0
ZV9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEZyYW1lTG9hZGVyQ2xpZW50OworfQor
CitleHRlcm4gIkMiIHsKK3ZvaWQgd2Via2l0SWNvbkRhdGFiYXNlUmVnaXN0ZXJGb3JJY29uTm90
aWZpY2F0aW9uKFdlYktpdEljb25EYXRhYmFzZSosIGNvbnN0IGdjaGFyKiBwYWdlVVJJLCBXZWJD
b3JlOjpGcmFtZUxvYWRlckNsaWVudCopOwordm9pZCB3ZWJraXRJY29uRGF0YWJhc2VVbnJlZ2lz
dGVyRm9ySWNvbk5vdGlmaWNhdGlvbihXZWJLaXRJY29uRGF0YWJhc2UqLCBjb25zdCBnY2hhciog
cGFnZVVSSSwgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQqKTsKK30KKworI2VuZGlmIC8vIHdl
YmtpdGljb25kYXRhYmFzZXByaXZhdGVfaApkaWZmIC0tZ2l0IGEvVG9vbHMvR3RrTGF1bmNoZXIv
bWFpbi5jIGIvVG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCmluZGV4IGVkYzhlMmYuLmE2MDRlYjUg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0d0a0xhdW5jaGVyL21haW4uYworKysgYi9Ub29scy9HdGtMYXVu
Y2hlci9tYWluLmMKQEAgLTQwLDYgKzQwLDcgQEAgc3RhdGljIHZvaWQgYWN0aXZhdGVVcmlFbnRy
eUNiKEd0a1dpZGdldCogZW50cnksIGdwb2ludGVyIGRhdGEpCiAgICAgV2ViS2l0V2ViVmlldyAq
d2ViVmlldyA9IGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGVudHJ5KSwgIndlYi12aWV3Iik7
CiAgICAgY29uc3QgZ2NoYXIqIHVyaSA9IGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5UUlkoZW50
cnkpKTsKICAgICBnX2Fzc2VydCh1cmkpOworICAgIGd0a19lbnRyeV9zZXRfaWNvbl9mcm9tX3Bp
eGJ1ZihHVEtfRU5UUlkoZW50cnkpLCBHVEtfRU5UUllfSUNPTl9QUklNQVJZLCAwKTsKICAgICB3
ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViVmlldywgdXJpKTsKIH0KIApAQCAtMTI1LDYgKzEy
NiwxNCBAQCBzdGF0aWMgZ2Jvb2xlYW4gY2xvc2VXZWJWaWV3Q2IoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgR3RrV2lkZ2V0KiB3aW5kb3cpCiAgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7
CiAgICAgcmV0dXJuIFRSVUU7CiB9CisKK3N0YXRpYyB2b2lkIGljb25Mb2FkZWRDYihXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiBpY29uVVJJLCBHdGtXaWRnZXQqIHVyaUVudHJ5
KQoreworICAgIEdka1BpeGJ1ZiAqaWNvbiA9IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29u
X3BpeGJ1Zih3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKSwgd2Via2l0X3dlYl92aWV3X2dldF91
cmkod2ViVmlldykpOworICAgIGd0a19lbnRyeV9zZXRfaWNvbl9mcm9tX3BpeGJ1ZihHVEtfRU5U
UlkodXJpRW50cnkpLCBHVEtfRU5UUllfSUNPTl9QUklNQVJZLCBpY29uKTsKKyAgICBpZiAoaWNv
bikKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoaWNvbik7Cit9CiAjZW5kaWYKIAogc3RhdGljIEd0
a1dpZGdldCogY3JlYXRlQnJvd3NlcihHdGtXaWRnZXQqIHdpbmRvdywgR3RrV2lkZ2V0KiB1cmlF
bnRyeSwgR3RrV2lkZ2V0KiBzdGF0dXNiYXIsIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCkBAIC0x
MzgsNiArMTQ3LDcgQEAgc3RhdGljIEd0a1dpZGdldCogY3JlYXRlQnJvd3NlcihHdGtXaWRnZXQq
IHdpbmRvdywgR3RrV2lkZ2V0KiB1cmlFbnRyeSwgR3RrV2lkZ2UKICAgICBnX3NpZ25hbF9jb25u
ZWN0KHdlYlZpZXcsICJub3RpZnk6OnRpdGxlIiwgR19DQUxMQkFDSyhub3RpZnlUaXRsZUNiKSwg
d2luZG93KTsKICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6OmxvYWQtc3Rh
dHVzIiwgR19DQUxMQkFDSyhub3RpZnlMb2FkU3RhdHVzQ2IpLCB1cmlFbnRyeSk7CiAgICAgZ19z
aWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojpwcm9ncmVzcyIsIEdfQ0FMTEJBQ0sobm90
aWZ5UHJvZ3Jlc3NDYiksIHdpbmRvdyk7CisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAi
aWNvbi1sb2FkZWQiLCBHX0NBTExCQUNLKGljb25Mb2FkZWRDYiksIHVyaUVudHJ5KTsKICAgICBn
X3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJob3ZlcmluZy1vdmVyLWxpbmsiLCBHX0NBTExCQUNL
KGxpbmtIb3ZlckNiKSwgc3RhdHVzYmFyKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcs
ICJjcmVhdGUtd2ViLXZpZXciLCBHX0NBTExCQUNLKGNyZWF0ZVdlYlZpZXdDYiksIHdpbmRvdyk7
CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAid2ViLXZpZXctcmVhZHkiLCBHX0NBTExC
QUNLKHdlYlZpZXdSZWFkeUNiKSwgd2luZG93KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102130</attachid>
            <date>2011-07-27 05:15:07 -0700</date>
            <delta_ts>2011-09-06 09:14:34 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>icon-database4.diff</filename>
            <type>text/plain</type>
            <size>37023</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwppbmRleCAxMWYyNzFkLi4yMDUwOWJkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNzggQEAKKzIwMTEtMDctMjcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFdlYktpdEljb25EYXRhYmFzZSBkb2Vzbid0
IGtlZXAgaWNvbnMgY2FjaGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NjIwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24u
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6cmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0
aW9uKTogV2hlbiB0aGUKKyAgICAgICAgaWNvbiBpcyBpbiB0aGUgZGF0YWJhc2UsIGJ1dCB0aGUg
ZGF0YSBpcyBub3Qgc3RpbGwgYXZhaWxhYmxlLAorICAgICAgICByZWdpc3RlciBhIG5vdGlmaWNh
dGlvbiB0byBkaXNwYXRjaCByZWNlaXZlZCBpY29uIHdoZW4gdGhlIGljb24KKyAgICAgICAgZGF0
YSBpcyBhdmFpbGFibGUuCisgICAgICAgICogdGVzdHMvdGVzdGljb25kYXRhYmFzZS5jOiBBZGRl
ZC4KKyAgICAgICAgKGRlbGV0ZURhdGFiYXNlRmlsZUlmRXhpc3RzKToKKyAgICAgICAgKHRlc3RX
ZWJraXRJY29uRGF0YWJhc2VTZXRQYXRoKToKKyAgICAgICAgKGljb25EYXRhYmFzZUdldEljb25W
YWxpZENhbGxiYWNrKToKKyAgICAgICAgKGljb25EYXRhYmFzZUdldEljb25JbnZhbGlkQ2FsbGJh
Y2spOgorICAgICAgICAoaWNvbkRhdGFiYXNlR2V0SWNvbkNhbmNlbGxlZENhbGxiYWNrKToKKyAg
ICAgICAgKGlkbGVRdWl0TG9vcENhbGxiYWNrKToKKyAgICAgICAgKGxvYWRVUkkpOgorICAgICAg
ICAoaWNvbkRhdGFiYXNlR2V0SWNvblZhbGlkSWRsZSk6CisgICAgICAgIChpY29uRGF0YWJhc2VH
ZXRJY29uSW52YWxpZElkbGUpOgorICAgICAgICAoaWNvbkRhdGFiYXNlR2V0SWNvbkNhbmNlbGxl
ZElkbGUpOgorICAgICAgICAodGVzdFdlYmtpdEljb25EYXRhYmFzZUdldEljb25Bc3luYyk6Cisg
ICAgICAgICh0ZXN0V2Via2l0SWNvbkRhdGFiYXNlR2V0SWNvblVSSSk6CisgICAgICAgICh0ZXN0
V2Via2l0SWNvbkRhdGFiYXNlUmVtb3ZlQWxsKToKKyAgICAgICAgKHRlc3RXZWJraXRJY29uRGF0
YWJhc2VDbG9zZURhdGFiYXNlKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIHdlYmtpdC93
ZWJraXRpY29uZGF0YWJhc2UuY3BwOgorICAgICAgICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpw
ZXJmb3JtSW1wb3J0KToKKyAgICAgICAgKEljb25EYXRhYmFzZUNsaWVudEd0azo6ZGlkUmVtb3Zl
QWxsSWNvbnMpOgorICAgICAgICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpkaWRJbXBvcnRJY29u
VVJMRm9yUGFnZVVSTCk6CisgICAgICAgIChJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpZEltcG9y
dEljb25EYXRhRm9yUGFnZVVSTCk6CisgICAgICAgIChJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRp
ZENoYW5nZUljb25Gb3JQYWdlVVJMKToKKyAgICAgICAgKEljb25EYXRhYmFzZUNsaWVudEd0azo6
ZGlkRmluaXNoVVJMSW1wb3J0KToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6UGVuZGlu
Z0ljb25SZXF1ZXN0KToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6flBlbmRpbmdJY29u
UmVxdWVzdCk6CisgICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OnBhZ2VVUkkpOgorICAgICAg
ICAoUGVuZGluZ0ljb25SZXF1ZXN0OjpmcmFtZUxvYWRlckNsaWVudCk6CisgICAgICAgIChQZW5k
aW5nSWNvblJlcXVlc3Q6OmFzeW5jUmVzdWx0KToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVz
dDo6YXN5bmNSZXN1bHRDb21wbGV0ZSk6CisgICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OmFz
eW5jUmVzdWx0Q29tcGxldGVJbklkbGUpOgorICAgICAgICAoUGVuZGluZ0ljb25SZXF1ZXN0Ojph
c3luY1Jlc3VsdENhbmNlbCk6CisgICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OmZyYW1lTG9h
ZGVyRGlzcGF0Y2hEaWRSZWNlaXZlSWNvbik6CisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9zZXRfcGF0aCk6IERlbGF5IGRhdGFiYXNlIGNsZWFudXAgYnkgZGVmYXVsdAorICAgICAgICB0
byBtYWtlIGljb25zIHBlcnNpc3RlbnQgaW4gdGhlIGRhdGFiYXNlLgorICAgICAgICAoZ2V0SWNv
blBpeGJ1ZlN5bmNocm9ub3VzbHkpOiBIZWxwZXIgZnVuY3Rpb24gdG8gY2FsbAorICAgICAgICBJ
Y29uRGF0YWJhc2U6OnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoKS4KKyAgICAgICAgKHdl
YmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zik6IEZpeCBkb2MgY29tbWVudHMuCisg
ICAgICAgICh3ZWJraXRJY29uRGF0YWJhc2VHZXRPckNyZWF0ZVJlcXVlc3RzKTogSGVscGVyIGZ1
bmN0aW9uIHRvIGdldAorICAgICAgICB0aGUgdmVjdG9yIG9mIHBlbmRpbmcgcmVxdWVzdHMgZm9y
IHRoZSBnaXZlbiB1cmkuCisgICAgICAgICh3ZWJraXRJY29uRGF0YWJhc2VEZWxldGVSZXF1ZXN0
cyk6IEhlbHBlciBmdW5jdGlvbiB0byByZW1vdmUgdGhlCisgICAgICAgIHZlY3RvciBvZiBwZW5k
aW5nIHJlcXVlc3RzIGZvciB0aGUgZ2l2ZW4gdXJpLgorICAgICAgICAoZ2V0SWNvblBpeGJ1ZkNh
bmNlbGxlZElkbGUpOiBDYW5jZWwgdGhlIHJlcXVlc3QuCisgICAgICAgICh3ZWJraXRJY29uRGF0
YWJhc2VHZXRJY29uUGl4YnVmQ2FuY2VsbGVkKToKKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFi
YXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYyk6IE5ldyBtZXRob2QgdG8gZ2V0IGFuCisgICAgICAg
IGljb24gYXN5bmNocm9ub3VzbHkuCisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRf
aWNvbl9waXhidWZfZmluaXNoKTogRmluaXNoZXMgYW4KKyAgICAgICAgb3BlcmF0aW9uIHN0YXJ0
ZWQgd2l0aCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmMoKS4KKyAg
ICAgICAgKHdlYmtpdEljb25EYXRhYmFzZVJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbik6IFJl
Z2lzdGVyIGZyYW1lCisgICAgICAgIGxvYWRlciB0byBiZSBub3RpZmllZCB3aGVuIHRoZSBpY29u
IGRhdGEgaXMgYXZhaWxhYmxlLgorICAgICAgICAod2Via2l0SWNvbkRhdGFiYXNlVW5yZWdpc3Rl
ckZvckljb25Ob3RpZmljYXRpb24pOiBVbnJlZ2lzdGVyIGEKKyAgICAgICAgZnJhbWUgbG9hZGVy
IG5vdGlmaWNhdGlvbiByZXF1ZXN0LgorICAgICAgICAod2Via2l0SWNvbkRhdGFiYXNlUHJvY2Vz
c1BlbmRpbmdJY29uc0ZvclVSSSk6IFByb2Nlc3MgcGVuZGluZworICAgICAgICByZXF1ZXN0cyBm
b3IgdGhlIGdpdmVuIHVyaSwgZm9yIGFzeW5jIG9wZXJhdGlvbiByZXF1ZXN0cyBpdAorICAgICAg
ICBjb21wbGV0ZXMgdGhlIG9wZXJhdGlvbiwgd2hpbGUgZm9yIGZyYW1lIGxvYWRlciByZXF1ZXN0
cyBpdCBjYWxscworICAgICAgICBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZl
SWNvbigpIHRvIG5vdGlmeSB0aGUgZnJhbWUKKyAgICAgICAgbG9hZGVyIHRoYXQgaGUgaWNvbiBp
cyBub3cgYXZhaWxhYmxlLgorICAgICAgICAod2Via2l0SWNvbkRhdGFiYXNlSW1wb3J0RmluaXNo
ZWQpOiBXaGVuIGltcG9ydCBpcyBmaW5pc2hlZCwgY2hlY2sKKyAgICAgICAgcGVuZGluZyByZXF1
ZXN0cyB0byBwcm9jZXNzIGFuZCBkZWxldGUgdGhlIG9uZXMgdGhhdCBhc2sgZm9yIGFuCisgICAg
ICAgIGljb24gdGhhdCBkb2Vzbid0IGV4aXN0IGluIGRhdGFiYXNlLgorICAgICAgICAqIHdlYmtp
dC93ZWJraXRpY29uZGF0YWJhc2UuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0aWNvbmRhdGFi
YXNlcHJpdmF0ZS5oOiBBZGRlZC4KKwogMjAxMS0wNi0wNyAgTWFydGluIFJvYmluc29uICA8bXJv
Ymluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR3VzdGF2byBOb3Jvbmhh
IFNpbHZhLgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IDg2OTQ2MWIuLmRmNGRlOGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0wNy0yNyAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gV2ViS2l0SWNv
bkRhdGFiYXNlIGRvZXNuJ3Qga2VlcCBpY29ucyBjYWNoZWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGZhdmljb25zIGluIEd0
a0xhdW5jaGVyLgorCisgICAgICAgICogR3RrTGF1bmNoZXIvbWFpbi5jOgorICAgICAgICAoYWN0
aXZhdGVVcmlFbnRyeUNiKToKKyAgICAgICAgKGljb25Mb2FkZWRDYik6CisgICAgICAgIChjcmVh
dGVCcm93c2VyKToKKwogMjAxMS0wNy0yNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4IFdlYktpdEd0ayBidWlsZCB3
aXRoIEdUSysgMy54IGFmdGVyIHI5MTcwNy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXgg
NDc2ZjcyYy4uNTljZDE5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZp
bGUuYW0KKysrIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KQEAgLTIxOCw2ICsy
MTgsNyBAQCB3ZWJraXRndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGhpdHRlc3RyZXN1bHQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0aGl0dGVzdHJlc3VsdHByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGljb25kYXRhYmFzZS5jcHAgXAorCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRp
Y29uZGF0YWJhc2Vwcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRu
ZXR3b3JrcmVxdWVzdC5jcHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3
b3JrcmVxdWVzdHByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5l
dHdvcmtyZXNwb25zZS5jcHAgXApAQCAtNDM0LDYgKzQzNSw3IEBAIFRFU1RfUFJPR1MgKz0gXAog
CVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0ZG9tZG9td2luZG93IFwKIAlQcm9ncmFtcy91bml0dGVz
dHMvdGVzdGRvbW5vZGUgXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0aHR0cGJhY2tlbmQgXAor
CVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0aWNvbmRhdGFiYXNlIFwKIAlQcm9ncmFtcy91bml0dGVz
dHMvdGVzdGxvYWRpbmcgXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0Z2xvYmFscyBcCiAJUHJv
Z3JhbXMvdW5pdHRlc3RzL3Rlc3RtaW1laGFuZGxpbmcgXApAQCAtNDgxLDYgKzQ4MywxMSBAQCBQ
cm9ncmFtc191bml0dGVzdHNfdGVzdGh0dHBiYWNrZW5kX0NGTEFHUyA9ICQod2Via2l0X3Rlc3Rz
X2NmbGFncykKIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0aHR0cGJhY2tlbmRfTERBREQgPSAkKHdl
YmtpdF90ZXN0c19sZGFkZCkKIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0aHR0cGJhY2tlbmRfTERG
TEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCiAKK1Byb2dyYW1zX3VuaXR0ZXN0c190ZXN0
aWNvbmRhdGFiYXNlX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0aWNvbmRh
dGFiYXNlLmMKK1Byb2dyYW1zX3VuaXR0ZXN0c190ZXN0aWNvbmRhdGFiYXNlX0NGTEFHUyA9ICQo
d2Via2l0X3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX3VuaXR0ZXN0c190ZXN0aWNvbmRhdGFiYXNl
X0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCitQcm9ncmFtc191bml0dGVzdHNfdGVzdGlj
b25kYXRhYmFzZV9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKKwogUHJvZ3JhbXNf
dW5pdHRlc3RzX3Rlc3RnbG9iYWxzX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90
ZXN0Z2xvYmFscy5jCiBQcm9ncmFtc191bml0dGVzdHNfdGVzdGdsb2JhbHNfQ0ZMQUdTID0gJCh3
ZWJraXRfdGVzdHNfY2ZsYWdzKQogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RnbG9iYWxzX0xEQURE
ID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKaW5kZXggMjZjNTM0ZS4u
OWUwOGU2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcApAQCAtNjcsNiArNjcsNyBAQAogI2luY2x1ZGUg
IndlYmtpdGdsb2JhbHMuaCIKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgIndlYmtpdGljb25kYXRhYmFzZS5oIgorI2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFz
ZXByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVxdWVzdC5oIgogI2luY2x1ZGUg
IndlYmtpdG5ldHdvcmtyZXF1ZXN0cHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmty
ZXNwb25zZS5oIgpAQCAtNjYwLDcgKzY2MSwxMiBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpk
aWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKCkgY29uc3QKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVu
dDo6cmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKGJvb2wgc2hvdWxkUmVnaXN0ZXIpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBjb25zdCBnY2hhciogZnJhbWVVUkkgPSB3ZWJraXRf
d2ViX2ZyYW1lX2dldF91cmkobV9mcmFtZSk7CisgICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRh
YmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOworICAgIGlmIChzaG91bGRSZWdpc3Rl
cikKKyAgICAgICAgd2Via2l0SWNvbkRhdGFiYXNlUmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9u
KGRhdGFiYXNlLCBmcmFtZVVSSSwgdGhpcyk7CisgICAgZWxzZQorICAgICAgICB3ZWJraXRJY29u
RGF0YWJhc2VVbnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihkYXRhYmFzZSwgZnJhbWVVUkks
IHRoaXMpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzZXRNYWluRnJhbWVEb2N1bWVu
dFJlYWR5KGJvb2wgcmVhZHkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90
ZXN0aWNvbmRhdGFiYXNlLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0aWNvbmRhdGFi
YXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg4NzBlZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RpY29uZGF0YWJhc2UuYwpA
QCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAidGVzdF91dGlscy5oIgorCisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNs
dWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCisjaWYgR1RLX0NI
RUNLX1ZFUlNJT04oMiwgMTQsIDApCitHTWFpbkxvb3AgKmxvb3A7CisKK3N0YXRpYyB2b2lkIGRl
bGV0ZURhdGFiYXNlRmlsZUlmRXhpc3RzKGNvbnN0IGdjaGFyICpkYXRhYmFzZVBhdGgpCit7Cisg
ICAgaWYgKCFnX2ZpbGVfdGVzdChkYXRhYmFzZVBhdGgsIEdfRklMRV9URVNUX0lTX0RJUikpCisg
ICAgICAgIHJldHVybjsKKworICAgIGdjaGFyICpkYXRhYmFzZUZpbGVuYW1lID0gZ19idWlsZF9m
aWxlbmFtZShkYXRhYmFzZVBhdGgsICJXZWJwYWdlSWNvbnMuZGIiLCBOVUxMKTsKKyAgICBpZiAo
Z191bmxpbmsoZGF0YWJhc2VGaWxlbmFtZSkgPT0gLTEpIHsKKyAgICAgICAgZ19mcmVlKGRhdGFi
YXNlRmlsZW5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZ19ybWRpcihkYXRh
YmFzZVBhdGgpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0SWNvbkRhdGFiYXNlU2V0UGF0
aCh2b2lkKQoreworICAgIGdjaGFyICpkYXRhYmFzZVBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKGdf
Z2V0X3RtcF9kaXIoKSwgIndlYmtpdC10ZXN0aWNvbmRhdGFiYXNlIiwgTlVMTCk7CisgICAgZGVs
ZXRlRGF0YWJhc2VGaWxlSWZFeGlzdHMoZGF0YWJhc2VQYXRoKTsKKworICAgIFdlYktpdEljb25E
YXRhYmFzZSAqZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKKyAgICB3ZWJr
aXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aChkYXRhYmFzZSwgZGF0YWJhc2VQYXRoKTsKKworICAg
IGdfYXNzZXJ0X2NtcHN0cihkYXRhYmFzZVBhdGgsID09LCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9n
ZXRfcGF0aChkYXRhYmFzZSkpOworCisgICAgZ19mcmVlKGRhdGFiYXNlUGF0aCk7Cit9CisKK3N0
YXRpYyB2b2lkIGljb25EYXRhYmFzZUdldEljb25WYWxpZENhbGxiYWNrKEdPYmplY3QgKnNvdXJj
ZU9iamVjdCwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAg
IGdib29sZWFuICpiZWVuSGVyZSA9IChnYm9vbGVhbiopdXNlckRhdGE7CisgICAgR0Vycm9yICpl
cnJvciA9IDA7CisgICAgR2RrUGl4YnVmICppY29uID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0
X2ljb25fcGl4YnVmX2ZpbmlzaChXRUJLSVRfSUNPTl9EQVRBQkFTRShzb3VyY2VPYmplY3QpLCBy
ZXN1bHQsICZlcnJvcik7CisgICAgZ19hc3NlcnQoaWNvbik7CisgICAgZ19vYmplY3RfdW5yZWYo
aWNvbik7CisKKyAgICAqYmVlbkhlcmUgPSBUUlVFOworCisgICAgZ19tYWluX2xvb3BfcXVpdChs
b29wKTsKK30KKworc3RhdGljIHZvaWQgaWNvbkRhdGFiYXNlR2V0SWNvbkludmFsaWRDYWxsYmFj
ayhHT2JqZWN0ICpzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBncG9pbnRlciB1
c2VyRGF0YSkKK3sKKyAgICBnYm9vbGVhbiAqYmVlbkhlcmUgPSAoZ2Jvb2xlYW4qKXVzZXJEYXRh
OworICAgIEdFcnJvciAqZXJyb3IgPSAwOworICAgIEdka1BpeGJ1ZiAqaWNvbiA9IHdlYmtpdF9p
Y29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5pc2goV0VCS0lUX0lDT05fREFUQUJBU0Uo
c291cmNlT2JqZWN0KSwgcmVzdWx0LCAmZXJyb3IpOworICAgIGdfYXNzZXJ0KCFpY29uKTsKKwor
ICAgICpiZWVuSGVyZSA9IFRSVUU7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworfQor
CitzdGF0aWMgdm9pZCBpY29uRGF0YWJhc2VHZXRJY29uQ2FuY2VsbGVkQ2FsbGJhY2soR09iamVj
dCAqc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEp
Cit7CisgICAgZ2Jvb2xlYW4gKmJlZW5IZXJlID0gKGdib29sZWFuKil1c2VyRGF0YTsKKyAgICBH
RXJyb3IgKmVycm9yID0gTlVMTDsKKyAgICBHZGtQaXhidWYgKmljb24gPSB3ZWJraXRfaWNvbl9k
YXRhYmFzZV9nZXRfaWNvbl9waXhidWZfZmluaXNoKFdFQktJVF9JQ09OX0RBVEFCQVNFKHNvdXJj
ZU9iamVjdCksIHJlc3VsdCwgJmVycm9yKTsKKyAgICBnX2Fzc2VydCghaWNvbik7CisgICAgZ19h
c3NlcnQoZXJyb3IgJiYgZ19lcnJvcl9tYXRjaGVzKGVycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VS
Uk9SX0NBTkNFTExFRCkpOworCisgICAgKmJlZW5IZXJlID0gVFJVRTsKKworICAgIGdfbWFpbl9s
b29wX3F1aXQobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGlkbGVRdWl0TG9vcENhbGxiYWNrKFdl
YktpdFdlYlZpZXcgKndlYl92aWV3LCBHUGFyYW1TcGVjICpwc3BlYywgZ3BvaW50ZXIgZGF0YSkK
K3sKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMgdm9pZCBsb2FkVVJJ
KGNvbnN0IGdjaGFyICp1cmkpCit7CisgICAgR3RrV2lkZ2V0ICp3aW5kb3cgPSBndGtfd2luZG93
X25ldyhHVEtfV0lORE9XX1BPUFVQKTsKKyAgICBXZWJLaXRXZWJWaWV3ICp2aWV3ID0gV0VCS0lU
X1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisKKyAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIEdUS19XSURHRVQodmlldykpOworICAgIGd0a193aWRn
ZXRfc2hvd19hbGwod2luZG93KTsKKworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3
LCB1cmkpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QodmlldywgImljb24tbG9hZGVkIiwgR19DQUxM
QkFDSyhpZGxlUXVpdExvb3BDYWxsYmFjayksIE5VTEwpOworICAgIGdfbWFpbl9sb29wX3J1bihs
b29wKTsKKworICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gaWNvbkRhdGFiYXNlR2V0SWNvblZhbGlkSWRsZShncG9pbnRlciB1c2VyRGF0YSkKK3sK
KyAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmMod2Via2l0X2dl
dF9pY29uX2RhdGFiYXNlKCksICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIiwgTlVMTCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbkRhdGFiYXNlR2V0
SWNvblZhbGlkQ2FsbGJhY2ssIHVzZXJEYXRhKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiBpY29uRGF0YWJhc2VHZXRJY29uSW52YWxpZElkbGUoZ3BvaW50ZXIgdXNl
ckRhdGEpCit7CisgICAgd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2FzeW5j
KHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpLCAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnLyIs
IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlj
b25EYXRhYmFzZUdldEljb25JbnZhbGlkQ2FsbGJhY2ssIHVzZXJEYXRhKTsKKyAgICByZXR1cm4g
RkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBpY29uRGF0YWJhc2VHZXRJY29uQ2FuY2VsbGVk
SWRsZShncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxl
ID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKKyAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl9waXhidWZfYXN5bmMod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCksICJodHRwOi8vd3d3Lmdv
b2dsZS5jb20iLCBjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWNvbkRhdGFiYXNlR2V0SWNvbkNhbmNlbGxlZENhbGxiYWNrLCB1c2Vy
RGF0YSk7CisgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwoY2FuY2VsbGFibGUpOworICAgIGdfb2Jq
ZWN0X3VucmVmKGNhbmNlbGxhYmxlKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RXZWJraXRJY29uRGF0YWJhc2VHZXRJY29uQXN5bmModm9pZCkKK3sKKyAgICBnYm9v
bGVhbiBiZWVuVG9JY29uQ2FsbGJhY2s7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5V
TEwsIFRSVUUpOworCisgICAgLyogTG9hZCBnb29nbGUgdG8gbWFrZSBzdXJlIGZhdmljb24gaXMg
YWRkZWQgdG8gZGF0YWJhc2UgKi8KKyAgICBsb2FkVVJJKCJodHRwOi8vd3d3Lmdvb2dsZS5jb20v
Iik7CisKKyAgICBiZWVuVG9JY29uQ2FsbGJhY2sgPSBGQUxTRTsKKyAgICBnX2lkbGVfYWRkKChH
U291cmNlRnVuYylpY29uRGF0YWJhc2VHZXRJY29uVmFsaWRJZGxlLCAmYmVlblRvSWNvbkNhbGxi
YWNrKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisgICAgZ19hc3NlcnQoYmVlblRvSWNv
bkNhbGxiYWNrKTsKKworICAgIGJlZW5Ub0ljb25DYWxsYmFjayA9IEZBTFNFOworICAgIGdfaWRs
ZV9hZGQoKEdTb3VyY2VGdW5jKWljb25EYXRhYmFzZUdldEljb25JbnZhbGlkSWRsZSwgJmJlZW5U
b0ljb25DYWxsYmFjayk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworICAgIGdfYXNzZXJ0
KGJlZW5Ub0ljb25DYWxsYmFjayk7CisKKyAgICBiZWVuVG9JY29uQ2FsbGJhY2sgPSBGQUxTRTsK
KyAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYylpY29uRGF0YWJhc2VHZXRJY29uQ2FuY2VsbGVk
SWRsZSwgJmJlZW5Ub0ljb25DYWxsYmFjayk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwor
ICAgIGdfYXNzZXJ0KGJlZW5Ub0ljb25DYWxsYmFjayk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RX
ZWJraXRJY29uRGF0YWJhc2VHZXRJY29uVVJJKHZvaWQpCit7CisgICAgZ2NoYXIgKmljb25VUkkg
PSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmkod2Via2l0X2dldF9pY29uX2RhdGFi
YXNlKCksICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIik7CisgICAgZ19hc3NlcnRfY21wc3RyKGlj
b25VUkksID09LCAiaHR0cDovL3d3dy5nb29nbGUuZXMvZmF2aWNvbi5pY28iKTsKKyAgICBnX2Zy
ZWUoaWNvblVSSSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRJY29uRGF0YWJhc2VSZW1v
dmVBbGwodm9pZCkKK3sKKyAgICBXZWJLaXRJY29uRGF0YWJhc2UgKmRhdGFiYXNlID0gd2Via2l0
X2dldF9pY29uX2RhdGFiYXNlKCk7CisgICAgd2Via2l0X2ljb25fZGF0YWJhc2VfY2xlYXIoZGF0
YWJhc2UpOworICAgIGdjaGFyICppY29uVVJJID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2lj
b25fdXJpKGRhdGFiYXNlLCAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIpOworICAgIGdfYXNzZXJ0
X2NtcHN0cihpY29uVVJJLCA9PSwgIiIpOworICAgIGdfZnJlZShpY29uVVJJKTsKK30KKworc3Rh
dGljIHZvaWQgdGVzdFdlYmtpdEljb25EYXRhYmFzZUNsb3NlRGF0YWJhc2Uodm9pZCkKK3sKKyAg
ICBXZWJLaXRJY29uRGF0YWJhc2UgKmRhdGFiYXNlID0gd2Via2l0X2dldF9pY29uX2RhdGFiYXNl
KCk7CisgICAgZ2NoYXIgKmRhdGFiYXNlUGF0aCA9IGdfc3RyZHVwKHdlYmtpdF9pY29uX2RhdGFi
YXNlX2dldF9wYXRoKGRhdGFiYXNlKSk7CisgICAgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3Bh
dGgoZGF0YWJhc2UsIDApOworICAgIGRlbGV0ZURhdGFiYXNlRmlsZUlmRXhpc3RzKGRhdGFiYXNl
UGF0aCk7CisgICAgZ19mcmVlKGRhdGFiYXNlUGF0aCk7Cit9CisKK2ludCBtYWluKGludCBhcmdj
LCBjaGFyICoqYXJndikKK3sKKyAgICBnX3RocmVhZF9pbml0KDApOworICAgIGd0a190ZXN0X2lu
aXQoJmFyZ2MsICZhcmd2LCAwKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2ljb25kYXRhYmFz
ZS9zZXQtcGF0aCIsIHRlc3RXZWJraXRJY29uRGF0YWJhc2VTZXRQYXRoKTsKKyAgICBnX3Rlc3Rf
YWRkX2Z1bmMoIi93ZWJraXQvaWNvbmRhdGFiYXNlL2ljb24tYXN5bmMiLCB0ZXN0V2Via2l0SWNv
bkRhdGFiYXNlR2V0SWNvbkFzeW5jKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvaWNv
bmRhdGFiYXNlL2ljb24tdXJpIiwgdGVzdFdlYmtpdEljb25EYXRhYmFzZUdldEljb25VUkkpOwor
ICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9pY29uZGF0YWJhc2UvcmVtb3ZlLWFsbCIsIHRl
c3RXZWJraXRJY29uRGF0YWJhc2VSZW1vdmVBbGwpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC9pY29uZGF0YWJhc2UvY2xvc2UtZGIiLCB0ZXN0V2Via2l0SWNvbkRhdGFiYXNlQ2xvc2VE
YXRhYmFzZSk7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQorI2Vsc2UKK2ludCBtYWlu
KGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBnX2NyaXRpY2FsKCJZb3Ugd2lsbCBuZWVk
IGd0ay0yLjE0LjAgdG8gcnVuIHRoZSB1bml0IHRlc3RzLiBEb2luZyBub3RoaW5nIG5vdy4iKTsK
KyAgICByZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRpY29uZGF0YWJhc2UuY3BwCmluZGV4IDM4M2IwODEuLjg0MTczNDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuY3BwCkBAIC0yMywx
MCArMjMsMTUgQEAKICNpbmNsdWRlICJEYXRhYmFzZURldGFpbHMuaCIKICNpbmNsdWRlICJEYXRh
YmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJHUmVmUHRyLmgiCiAjaW5jbHVkZSAiSWNvbkRhdGFi
YXNlLmgiCisjaW5jbHVkZSAiSWNvbkRhdGFiYXNlQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2Uu
aCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAid2Via2l0Z2xvYmFscy5oIgogI2lu
Y2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0aWNvbmRhdGFi
YXNlcHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKICNpbmNsdWRlICJ3ZWJr
aXRzZWN1cml0eW9yaWdpbnByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXR3ZWJmcmFtZS5oIgpA
QCAtNjMsNiArNjgsOTkgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAorc3RydWN0IFBl
bmRpbmdJY29uUmVxdWVzdDsKKworc3RhdGljIHZvaWQgd2Via2l0SWNvbkRhdGFiYXNlUHJvY2Vz
c1BlbmRpbmdJY29uc0ZvclVSSShXZWJLaXRJY29uRGF0YWJhc2UqLCBjb25zdCBTdHJpbmcmIHBh
Z2VVUkkpOworc3RhdGljIHZvaWQgd2Via2l0SWNvbkRhdGFiYXNlSW1wb3J0RmluaXNoZWQoV2Vi
S2l0SWNvbkRhdGFiYXNlKik7CitzdGF0aWMgdm9pZCB3ZWJraXRJY29uRGF0YWJhc2VHZXRJY29u
UGl4YnVmQ2FuY2VsbGVkKEdDYW5jZWxsYWJsZSosIFBlbmRpbmdJY29uUmVxdWVzdCopOworCitj
bGFzcyBJY29uRGF0YWJhc2VDbGllbnRHdGsgOiBwdWJsaWMgV2ViQ29yZTo6SWNvbkRhdGFiYXNl
Q2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgLy8gSWNvbkRhdGFiYXNlQ2xpZW50IGludGVyZmFj
ZQorICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtSW1wb3J0KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAg
IHZpcnR1YWwgdm9pZCBkaWRSZW1vdmVBbGxJY29ucygpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkSW1wb3J0SWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJikgeyB9OworICAgIHZpcnR1
YWwgdm9pZCBkaWRJbXBvcnRJY29uRGF0YUZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBVUkwpCisg
ICAgeworICAgICAgICB3ZWJraXRJY29uRGF0YWJhc2VQcm9jZXNzUGVuZGluZ0ljb25zRm9yVVJJ
KHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpLCBVUkwpOworICAgIH0KKyAgICB2aXJ0dWFsIHZv
aWQgZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJikgeyB9OworICAgIHZpcnR1
YWwgdm9pZCBkaWRGaW5pc2hVUkxJbXBvcnQoKQorICAgIHsKKyAgICAgICAgd2Via2l0SWNvbkRh
dGFiYXNlSW1wb3J0RmluaXNoZWQod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCkpOworICAgIH0K
K307CisKK3N0cnVjdCBQZW5kaW5nSWNvblJlcXVlc3QgeworcHVibGljOgorICAgIFBlbmRpbmdJ
Y29uUmVxdWVzdChjb25zdCBTdHJpbmcmIHBhZ2VVUkksIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xp
ZW50KiBmcmFtZUxvYWRlckNsaWVudCkKKyAgICAgICAgOiBtX3BhZ2VVUkkocGFnZVVSSSkKKyAg
ICAgICAgLCBtX2ZyYW1lTG9hZGVyQ2xpZW50KGZyYW1lTG9hZGVyQ2xpZW50KQorICAgICAgICAs
IG1fYXN5bmNSZXN1bHQoMCkKKyAgICAgICAgLCBtX2NhbmNlbGxhYmxlKDApCisgICAgICAgICwg
bV9jYW5jZWxsZWRJZCgwKQorICAgIHsKKyAgICB9CisKKyAgICBQZW5kaW5nSWNvblJlcXVlc3Qo
Y29uc3QgU3RyaW5nJiBwYWdlVVJJLCBHU2ltcGxlQXN5bmNSZXN1bHQqIHJlc3VsdCwgR0NhbmNl
bGxhYmxlKiBjYW5jZWxsYWJsZSkKKyAgICAgICAgOiBtX3BhZ2VVUkkocGFnZVVSSSkKKyAgICAg
ICAgLCBtX2ZyYW1lTG9hZGVyQ2xpZW50KDApCisgICAgICAgICwgbV9hc3luY1Jlc3VsdChyZXN1
bHQpCisgICAgICAgICwgbV9jYW5jZWxsYWJsZShjYW5jZWxsYWJsZSkKKyAgICAgICAgLCBtX2Nh
bmNlbGxlZElkKDApCisgICAgeworICAgICAgICBpZiAoIWNhbmNlbGxhYmxlKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIG1fY2FuY2VsbGVkSWQgPSBnX2NhbmNlbGxhYmxlX2Nvbm5l
Y3QoY2FuY2VsbGFibGUsIEdfQ0FMTEJBQ0sod2Via2l0SWNvbkRhdGFiYXNlR2V0SWNvblBpeGJ1
ZkNhbmNlbGxlZCksIHRoaXMsIDApOworICAgICAgICBnX29iamVjdF9zZXRfZGF0YV9mdWxsKEdf
T0JKRUNUKHJlc3VsdCksICJjYW5jZWxsYWJsZSIsIGdfb2JqZWN0X3JlZihjYW5jZWxsYWJsZSks
IHN0YXRpY19jYXN0PEdEZXN0cm95Tm90aWZ5PihnX29iamVjdF91bnJlZikpOworICAgIH0KKwor
ICAgIH5QZW5kaW5nSWNvblJlcXVlc3QoKQorICAgIHsKKyAgICAgICAgaWYgKG1fY2FuY2VsbGVk
SWQgPiAwKQorICAgICAgICAgICAgZ19jYW5jZWxsYWJsZV9kaXNjb25uZWN0KG1fY2FuY2VsbGFi
bGUuZ2V0KCksIG1fY2FuY2VsbGVkSWQpOworICAgIH0KKworICAgIGNvbnN0IFN0cmluZyYgcGFn
ZVVSSSgpIHsgcmV0dXJuIG1fcGFnZVVSSTsgfQorICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xp
ZW50KiBmcmFtZUxvYWRlckNsaWVudCgpIHsgcmV0dXJuIG1fZnJhbWVMb2FkZXJDbGllbnQ7IH0K
KyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIGFzeW5jUmVzdWx0KCkgeyByZXR1cm4gbV9hc3luY1Jl
c3VsdC5nZXQoKTsgfQorCisgICAgdm9pZCBhc3luY1Jlc3VsdENvbXBsZXRlKEdka1BpeGJ1Ziog
aWNvbikKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2FzeW5jUmVzdWx0KTsKKyAgICAgICAgZ19z
aW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3BvaW50ZXIobV9hc3luY1Jlc3VsdC5nZXQo
KSwgaWNvbiwgaWNvbiA/IHN0YXRpY19jYXN0PEdEZXN0cm95Tm90aWZ5PihnX29iamVjdF91bnJl
ZikgOiAwKTsKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlKG1fYXN5bmNS
ZXN1bHQuZ2V0KCkpOworICAgIH0KKworICAgIHZvaWQgYXN5bmNSZXN1bHRDb21wbGV0ZUluSWRs
ZShHZGtQaXhidWYqIGljb24pCisgICAgeworICAgICAgICBBU1NFUlQobV9hc3luY1Jlc3VsdCk7
CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyKG1fYXN5
bmNSZXN1bHQuZ2V0KCksIGljb24sIGljb24gPyBzdGF0aWNfY2FzdDxHRGVzdHJveU5vdGlmeT4o
Z19vYmplY3RfdW5yZWYpIDogMCk7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21w
bGV0ZV9pbl9pZGxlKG1fYXN5bmNSZXN1bHQuZ2V0KCkpOworICAgIH0KKworICAgIHZvaWQgYXN5
bmNSZXN1bHRDYW5jZWwoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYXN5bmNSZXN1bHQpOwor
ICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Vycm9yKG1fYXN5bmNSZXN1bHQuZ2V0
KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVELCAiJXMiLCAiT3BlcmF0aW9uIHdh
cyBjYW5jZWxsZWQiKTsKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlKG1f
YXN5bmNSZXN1bHQuZ2V0KCkpOworICAgIH0KKworICAgIHZvaWQgZnJhbWVMb2FkZXJEaXNwYXRj
aERpZFJlY2VpdmVJY29uKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2ZyYW1lTG9hZGVyQ2xp
ZW50KTsKKyAgICAgICAgbV9mcmFtZUxvYWRlckNsaWVudC0+ZGlzcGF0Y2hEaWRSZWNlaXZlSWNv
bigpOworICAgIH0KKworICAgIFN0cmluZyBtX3BhZ2VVUkk7CisgICAgV2ViQ29yZTo6RnJhbWVM
b2FkZXJDbGllbnQqIG1fZnJhbWVMb2FkZXJDbGllbnQ7CisgICAgR1JlZlB0cjxHU2ltcGxlQXN5
bmNSZXN1bHQ+IG1fYXN5bmNSZXN1bHQ7CisgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2Fu
Y2VsbGFibGU7CisgICAgZ3Vsb25nIG1fY2FuY2VsbGVkSWQ7Cit9OworCisKIGVudW0gewogICAg
IFBST1BfMCwKIApAQCAtNzcsMTAgKzE3NSwxMyBAQCBlbnVtIHsKIAogc3RhdGljIGd1aW50IHdl
YmtpdF9pY29uX2RhdGFiYXNlX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OwogCi1HX0RF
RklORV9UWVBFKFdlYktpdEljb25EYXRhYmFzZSwgd2Via2l0X2ljb25fZGF0YWJhc2UsIEdfVFlQ
RV9PQkpFQ1QpOworR19ERUZJTkVfVFlQRShXZWJLaXRJY29uRGF0YWJhc2UsIHdlYmtpdF9pY29u
X2RhdGFiYXNlLCBHX1RZUEVfT0JKRUNUKQogCiBzdHJ1Y3QgX1dlYktpdEljb25EYXRhYmFzZVBy
aXZhdGUgewogICAgIEdPd25QdHI8Z2NoYXI+IHBhdGg7CisgICAgSWNvbkRhdGFiYXNlQ2xpZW50
R3RrIGljb25EYXRhYmFzZUNsaWVudDsKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPE93blB0
cjxQZW5kaW5nSWNvblJlcXVlc3Q+ID4qID4gcGVuZGluZ0ljb25SZXF1ZXN0czsKKyAgICBib29s
IGltcG9ydEZpbmlzaGVkOwogfTsKIAogc3RhdGljIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2Vf
ZmluYWxpemUoR09iamVjdCogb2JqZWN0KQpAQCAtMjI1LDE2ICszMjYsMjIgQEAgdm9pZCB3ZWJr
aXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBj
b25zdCBnY2hhciogcGEKICAgICBpZiAoZGF0YWJhc2UtPnByaXYtPnBhdGguZ2V0KCkpCiAgICAg
ICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLmNsb3NlKCk7CiAKKyAgICBkYXRhYmFzZS0+cHJp
di0+aW1wb3J0RmluaXNoZWQgPSBmYWxzZTsKICAgICBpZiAoIShwYXRoICYmIHBhdGhbMF0pKSB7
CiAgICAgICAgIGRhdGFiYXNlLT5wcml2LT5wYXRoLnNldCgwKTsKICAgICAgICAgV2ViQ29yZTo6
aWNvbkRhdGFiYXNlKCkuc2V0RW5hYmxlZChmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBkYXRhYmFzZS0+cHJpdi0+cGF0aC5zZXQoZ19zdHJkdXAocGF0aCkpOwotCisgICAg
V2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc2V0Q2xpZW50KCZkYXRhYmFzZS0+cHJpdi0+aWNvbkRh
dGFiYXNlQ2xpZW50KTsKKyAgICBXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmRlbGF5RGF0YWJhc2VD
bGVhbnVwKCk7CiAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc2V0RW5hYmxlZCh0cnVlKTsK
LSAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5vcGVuKFdlYkNvcmU6OmZpbGVuYW1lVG9TdHJp
bmcoZGF0YWJhc2UtPnByaXYtPnBhdGguZ2V0KCkpLCBXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmRl
ZmF1bHREYXRhYmFzZUZpbGVuYW1lKCkpOworICAgIGlmICghV2ViQ29yZTo6aWNvbkRhdGFiYXNl
KCkub3BlbihXZWJDb3JlOjpmaWxlbmFtZVRvU3RyaW5nKHBhdGgpLCBXZWJDb3JlOjpJY29uRGF0
YWJhc2U6OmRlZmF1bHREYXRhYmFzZUZpbGVuYW1lKCkpKSB7CisgICAgICAgIFdlYkNvcmU6Oklj
b25EYXRhYmFzZTo6YWxsb3dEYXRhYmFzZUNsZWFudXAoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGRhdGFiYXNlLT5wcml2LT5wYXRoLnNldChnX3N0cmR1cChwYXRoKSk7CiAKICAg
ICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwogICAgIGlmICghaW5pdGlhbGl6ZWQp
IHsKQEAgLTI2NCwyMiArMzcxLDMyIEBAIGdjaGFyKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRf
aWNvbl91cmkoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoCiAgICAgcmV0
dXJuIGdfc3RyZHVwKFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvblVSTEZv
clBhZ2VVUkwocGFnZVVSTCkudXRmOCgpLmRhdGEoKSk7CiB9CiAKK3N0YXRpYyBHZGtQaXhidWYq
IGdldEljb25QaXhidWZTeW5jaHJvbm91c2x5KFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2Us
IGNvbnN0IFN0cmluZyYgcGFnZVVSTCkKK3sKKyAgICAvLyBUaGUgZXhhY3Qgc2l6ZSB3ZSBwYXNz
IGlzIGlycmVsZXZhbnQgdG8gdGhlIFdlYkNvcmU6Omljb25EYXRhYmFzZSBjb2RlLgorICAgIC8v
IFdlIG11c3QgcGFzcyBzb21ldGhpbmcgZ3JlYXRlciB0aGFuIDAsIDAgdG8gZ2V0IGEgcGl4YnVm
LgorICAgIFdlYkNvcmU6OkltYWdlKiBpY29uID0gV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc3lu
Y2hyb25vdXNJY29uRm9yUGFnZVVSTChwYWdlVVJMLCBXZWJDb3JlOjpJbnRTaXplKDE2LCAxNikp
OworICAgIHJldHVybiBpY29uID8gaWNvbi0+Z2V0R2RrUGl4YnVmKCkgOiAwOworfQorCiAvKioK
ICAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZjoKICAqIEBkYXRhYmFzZTog
YSAjV2ViS2l0SWNvbkRhdGFiYXNlCiAgKiBAcGFnZV91cmk6IFVSSSBvZiB0aGUgcGFnZSBjb250
YWluaW5nIHRoZSBpY29uCiAgKgotICogT2J0YWlucyBhICNHZGtQaXhidWYgb2YgdGhlIGZhdmlj
b24gZm9yIHRoZSBnaXZlbiBwYWdlIFVSSSwgb3IKLSAqIGEgZGVmYXVsdCBpY29uIGlmIHRoZXJl
IGlzIG5vIGljb24gZm9yIHRoZSBnaXZlbiBwYWdlLiBVc2UKKyAqIE9idGFpbnMgYSAjR2RrUGl4
YnVmIG9mIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZSBVUkksIG9yICVOVUxMCisgKiBp
ZiB0aGVyZSBpcyBubyBpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZSBvciBpdCBoYXNuJ3QgYmVlbiBs
b2FkZWQgeWV0LiBVc2UKICAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3VyaSgpIGlm
IHlvdSBuZWVkIHRvIGRpc3Rpbmd1aXNoIHRoZXNlIGNhc2VzLgotICogVXN1YWxseSB5b3Ugd2Fu
dCB0byBjb25uZWN0IHRvIFdlYktpdEljb25EYXRhYmFzZTo6aWNvbi1sb2FkZWQgYW5kIGNhbGwg
dGhpcwotICogbWV0aG9kIGluIHRoZSBjYWxsYmFjay4KKyAqIFRvIG1ha2Ugc3VyZSB0aGlzIG1l
dGhvZCByZXR1cm4gd2lsbCByZXR1cm4gYSB2YWxpZCBpY29uLCB3aGVuIHRoZSBnaXZlbiBVUkkK
KyAqIGhhcyBvbmUsIHlvdSBzaG91bGQgY29ubmVjdCB0byBXZWJLaXRJY29uRGF0YWJhc2U6Omlj
b24tbG9hZGVkIGFuZCBjYWxsIHRoaXMKKyAqIG1ldGhvZCBpbiB0aGUgY2FsbGJhY2suIFNlZSBh
bHNvIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYygpLgogICoKICAq
IFRoZSBwaXhidWYgd2lsbCBoYXZlIHRoZSBsYXJnZXN0IHNpemUgcHJvdmlkZWQgYnkgdGhlIHNl
cnZlciBhbmQgc2hvdWxkCiAgKiBiZSByZXNpemVkIGJlZm9yZSBpdCBpcyBkaXNwbGF5ZWQuCiAg
KiBTZWUgYWxzbyB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fcGl4YnVmKCkuCiAgKgotICogUmV0
dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyByZWZlcmVuY2UgdG8gYSAjR2RrUGl4YnVmLCBv
ciAlTlVMTAorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyByZWZlcmVuY2UgdG8g
YSAjR2RrUGl4YnVmLCBvciAlTlVMTCBpZiB0aGUgZ2l2ZW4KKyAqIFVSSSBkb2Vzbid0IGhhdmUg
YW4gaWNvbiBvciBpdCBoYXNuJ3QgYmVlbiBsb2FkZWQgeWV0LgogICoKICAqIFNpbmNlOiAxLjMu
MTMKICAqKi8KQEAgLTI4OCwxNiArNDA1LDE4NiBAQCBHZGtQaXhidWYqIHdlYmtpdF9pY29uX2Rh
dGFiYXNlX2dldF9pY29uX3BpeGJ1ZihXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjbwog
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19JQ09OX0RBVEFCQVNFKGRhdGFiYXNl
KSwgMCk7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocGFnZVVSSSwgMCk7CiAKLSAgICBTdHJp
bmcgcGFnZVVSTCA9IFN0cmluZzo6ZnJvbVVURjgocGFnZVVSSSk7Ci0gICAgLy8gVGhlIGV4YWN0
IHNpemUgd2UgcGFzcyBpcyBpcnJlbGV2YW50IHRvIHRoZSBXZWJDb3JlOjppY29uRGF0YWJhc2Ug
Y29kZS4KLSAgICAvLyBXZSBtdXN0IHBhc3Mgc29tZXRoaW5nIGdyZWF0ZXIgdGhhbiAwLCAwIHRv
IGdldCBhIHBpeGJ1Zi4KLSAgICBXZWJDb3JlOjpJbWFnZSogaWNvbiA9IFdlYkNvcmU6Omljb25E
YXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwocGFnZVVSTCwgV2ViQ29yZTo6SW50
U2l6ZSgxNiwgMTYpKTsKLSAgICBpZiAoIWljb24pCisgICAgcmV0dXJuIGdldEljb25QaXhidWZT
eW5jaHJvbm91c2x5KGRhdGFiYXNlLCBTdHJpbmc6OmZyb21VVEY4KHBhZ2VVUkkpKTsKK30KKwor
c3RhdGljIFZlY3RvcjxPd25QdHI8UGVuZGluZ0ljb25SZXF1ZXN0PiA+KiB3ZWJraXRJY29uRGF0
YWJhc2VHZXRPckNyZWF0ZVJlcXVlc3RzKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNv
bnN0IFN0cmluZyYgcGFnZVVSTCkKK3sKKyAgICBWZWN0b3I8T3duUHRyPFBlbmRpbmdJY29uUmVx
dWVzdD4gPiogaWNvbnMgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5nZXQo
cGFnZVVSTCk7CisgICAgaWYgKCFpY29ucykgeworICAgICAgICBpY29ucyA9IG5ldyBWZWN0b3I8
T3duUHRyPFBlbmRpbmdJY29uUmVxdWVzdD4gPjsKKyAgICAgICAgZGF0YWJhc2UtPnByaXYtPnBl
bmRpbmdJY29uUmVxdWVzdHMuc2V0KHBhZ2VVUkwsIGljb25zKTsKKyAgICB9CisKKyAgICByZXR1
cm4gaWNvbnM7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEljb25EYXRhYmFzZURlbGV0ZVJlcXVl
c3RzKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIFZlY3RvcjxPd25QdHI8UGVuZGluZ0lj
b25SZXF1ZXN0PiA+KiByZXF1ZXN0cywgY29uc3QgU3RyaW5nJiBwYWdlVVJMKQoreworICAgIGRh
dGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLnJlbW92ZShwYWdlVVJMKTsKKyAgICBk
ZWxldGUgcmVxdWVzdHM7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBnZXRJY29uUGl4YnVmQ2FuY2Vs
bGVkSWRsZShncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBQZW5kaW5nSWNvblJlcXVlc3QqIHJl
cXVlc3QgPSBzdGF0aWNfY2FzdDxQZW5kaW5nSWNvblJlcXVlc3QqPih1c2VyRGF0YSk7CisgICAg
cmVxdWVzdC0+YXN5bmNSZXN1bHRDYW5jZWwoKTsKKworICAgIFdlYktpdEljb25EYXRhYmFzZSog
ZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKKyAgICBWZWN0b3I8T3duUHRy
PFBlbmRpbmdJY29uUmVxdWVzdD4gPiogaWNvbnMgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0lj
b25SZXF1ZXN0cy5nZXQocmVxdWVzdC0+cGFnZVVSSSgpKTsKKyAgICBpZiAoIWljb25zKQorICAg
ICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBTdHJpbmcgcGFnZVVSTCA9IHJlcXVlc3QtPnBhZ2VV
UkkoKTsKKyAgICBzaXplX3QgaXRlbUluZGV4ID0gaWNvbnMtPmZpbmQocmVxdWVzdCk7CisgICAg
aWYgKGl0ZW1JbmRleCAhPSBub3RGb3VuZCkKKyAgICAgICAgaWNvbnMtPnJlbW92ZShpdGVtSW5k
ZXgpOworICAgIGlmIChpY29ucy0+aXNFbXB0eSgpKQorICAgICAgICB3ZWJraXRJY29uRGF0YWJh
c2VEZWxldGVSZXF1ZXN0cyhkYXRhYmFzZSwgaWNvbnMsIHBhZ2VVUkwpOworCisgICAgcmV0dXJu
IEZBTFNFOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRJY29uRGF0YWJhc2VHZXRJY29uUGl4YnVm
Q2FuY2VsbGVkKEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIFBlbmRpbmdJY29uUmVxdWVzdCog
cmVxdWVzdCkKK3sKKyAgICAvLyBIYW5kbGUgY2FuY2VsbGVkIGluIGEgaW4gaWRsZSBzaW5jZSBp
dCBtaWdodCBiZSBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkLgorICAgIGdfaWRsZV9hZGQoZ2V0SWNv
blBpeGJ1ZkNhbmNlbGxlZElkbGUsIHJlcXVlc3QpOworfQorCisvKioKKyAqIHdlYmtpdF9pY29u
X2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYzoKKyAqIEBkYXRhYmFzZTogYSAjV2ViS2l0
SWNvbkRhdGFiYXNlCisgKiBAcGFnZV91cmk6IFVSSSBvZiB0aGUgcGFnZSBjb250YWluaW5nIHRo
ZSBpY29uCisgKiBAY2FuY2VsbGFibGU6IEEgI0dDYW5jZWxsYWJsZSBvciAlTlVMTC4KKyAqIEBj
YWxsYmFjazogKGFsbG93LW5vbmUpOiBBICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRvIGNhbGwgd2hl
biB0aGUgcmVxdWVzdCBpcworICogICAgICAgICAgICBzYXRpc2ZpZWQgb3IgJU5VTEwgaWYgeW91
IGRvbid0IGNhcmUgYWJvdXQgdGhlIHJlc3VsdC4KKyAqIEB1c2VyX2RhdGE6IFRoZSBkYXRhIHRv
IHBhc3MgdG8gQGNhbGxiYWNrLgorICoKKyAqIEFzeW5jaHJvbm91c2x5IG9idGFpbnMgYSAjR2Rr
UGl4YnVmIG9mIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZSBVUkkuCisgKgorICogVGhp
cyBpcyBhbiBhc3luY2hyb25vdXMgbWV0aG9kLiBXaGVuIHRoZSBvcGVyYXRpb24gaXMgZmluaXNo
ZWQsIGNhbGxiYWNrIHdpbGwKKyAqIGJlIGludm9rZWQuIFlvdSBjYW4gdGhlbiBjYWxsIHdlYmtp
dF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5pc2goKQorICogdG8gZ2V0IHRoZSBy
ZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAqIFNlZSBhbHNvIHdlYmtpdF9pY29uX2RhdGFiYXNl
X2dldF9pY29uX3BpeGJ1ZigpLgorICoKKyAqIFNpbmNlOiAxLjUuMgorICoqLwordm9pZCB3ZWJr
aXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmMoV2ViS2l0SWNvbkRhdGFiYXNl
KiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkksIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFi
bGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHBhZ2VVUkkpOworCisgICAgR1JlZlB0cjxHU2ltcGxlQXN5
bmNSZXN1bHQ+IHJlc3VsdCA9IGFkb3B0R1JlZihnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3KEdf
T0JKRUNUKGRhdGFiYXNlKSwgY2FsbGJhY2ssIHVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWludGVycHJldF9jYXN0PGdwb2ludGVyPih3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl9waXhidWZfYXN5bmMpKSk7CisKKyAgICBTdHJpbmcgcGFnZVVSTChTdHJpbmc6OmZyb21VVEY4
KHBhZ2VVUkkpKTsKKyAgICBQZW5kaW5nSWNvblJlcXVlc3QqIHJlcXVlc3QgPSBuZXcgUGVuZGlu
Z0ljb25SZXF1ZXN0KHBhZ2VVUkwsIHJlc3VsdC5nZXQoKSwgY2FuY2VsbGFibGUpOworCisgICAg
Ly8gUmVnaXN0ZXIgaWNvbiByZXF1ZXN0IGJlZm9yZSBhc2tpbmcgZm9yIHRoZSBpY29uIHRvIGF2
b2lkIHJhY2UgY29uZGl0aW9ucy4KKyAgICBWZWN0b3I8T3duUHRyPFBlbmRpbmdJY29uUmVxdWVz
dD4gPiogaWNvbnMgPSB3ZWJraXRJY29uRGF0YWJhc2VHZXRPckNyZWF0ZVJlcXVlc3RzKGRhdGFi
YXNlLCBwYWdlVVJMKTsKKyAgICBBU1NFUlQoaWNvbnMpOworICAgIGljb25zLT5hcHBlbmQoYWRv
cHRQdHIocmVxdWVzdCkpOworCisgICAgR2RrUGl4YnVmKiBwaXhidWYgPSBnZXRJY29uUGl4YnVm
U3luY2hyb25vdXNseShkYXRhYmFzZSwgcGFnZVVSTCk7CisgICAgaWYgKCFwaXhidWYgJiYgIWRh
dGFiYXNlLT5wcml2LT5pbXBvcnRGaW5pc2hlZCkgeworICAgICAgICAvLyBJbXBvcnQgaXMgb25n
b2luZywgdGhlcmUgbWlnaHQgYmUgYW4gaWNvbi4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHJlcXVlc3QtPmFzeW5jUmVzdWx0Q29tcGxldGVJbklkbGUocGl4YnVmKTsKKworICAgIEFT
U0VSVChpY29ucy0+bGFzdCgpLmdldCgpID09IHJlcXVlc3QpOworICAgIGljb25zLT5yZW1vdmVM
YXN0KCk7CisgICAgaWYgKGljb25zLT5pc0VtcHR5KCkpCisgICAgICAgIHdlYmtpdEljb25EYXRh
YmFzZURlbGV0ZVJlcXVlc3RzKGRhdGFiYXNlLCBpY29ucywgcGFnZVVSTCk7Cit9CisKKy8qKgor
ICogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2ZpbmlzaDoKKyAqIEBkYXRh
YmFzZTogYSAjV2ViS2l0SWNvbkRhdGFiYXNlCisgKiBAcmVzdWx0OiBBICNHQXN5bmNSZXN1bHQg
b2J0YWluZWQgZnJvbSB0aGUgI0dBc3luY1JlYWR5Q2FsbGJhY2sgcGFzc2VkIHRvIHdlYmtpdF9p
Y29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYygpCisgKiBAZXJyb3I6IFJldHVybiBs
b2NhdGlvbiBmb3IgZXJyb3Igb3IgJU5VTEwuCisgKgorICogRmluaXNoZXMgYW4gb3BlcmF0aW9u
IHN0YXJ0ZWQgd2l0aCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmMo
KS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IHJlZmVyZW5jZSB0byBh
ICNHZGtQaXhidWYsIG9yICVOVUxMLgorICoKKyAqIFNpbmNlOiAxLjUuMgorICovCitHZGtQaXhi
dWYqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5pc2goV2ViS2l0SWNv
bkRhdGFiYXNlKiBkYXRhYmFzZSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIEdFcnJvcioqIGVycm9y
KQoreworICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogc2ltcGxlUmVzdWx0ID0gR19TSU1QTEVfQVNZ
TkNfUkVTVUxUKHJlc3VsdCk7CisgICAgZ193YXJuX2lmX2ZhaWwoZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X2dldF9zb3VyY2VfdGFnKHNpbXBsZVJlc3VsdCkgPT0gd2Via2l0X2ljb25fZGF0YWJhc2Vf
Z2V0X2ljb25fcGl4YnVmX2FzeW5jKTsKKworICAgIGlmIChnX3NpbXBsZV9hc3luY19yZXN1bHRf
cHJvcGFnYXRlX2Vycm9yKHNpbXBsZVJlc3VsdCwgZXJyb3IpKQogICAgICAgICByZXR1cm4gMDsK
LSAgICBHZGtQaXhidWYqIHBpeGJ1ZiA9IGljb24tPmdldEdka1BpeGJ1ZigpOwotICAgIGlmICgh
cGl4YnVmKQorCisgICAgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSA9IHN0YXRpY19jYXN0PEdD
YW5jZWxsYWJsZSo+KGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKHNpbXBsZVJlc3VsdCksICJj
YW5jZWxsYWJsZSIpKTsKKyAgICBpZiAoY2FuY2VsbGFibGUgJiYgZ19jYW5jZWxsYWJsZV9pc19j
YW5jZWxsZWQoY2FuY2VsbGFibGUpKSB7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJy
b3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVELCAiT3BlcmF0aW9uIHdhcyBjYW5j
ZWxsZWQiKTsKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEdka1Bp
eGJ1Zio+KGdfb2JqZWN0X3JlZihwaXhidWYpKTsKKyAgICB9CisKKyAgICBHZGtQaXhidWYqIGlj
b24gPSBzdGF0aWNfY2FzdDxHZGtQaXhidWYqPihnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29w
X3Jlc19ncG9pbnRlcihzaW1wbGVSZXN1bHQpKTsKKyAgICByZXR1cm4gaWNvbiA/IHN0YXRpY19j
YXN0PEdka1BpeGJ1Zio+KGdfb2JqZWN0X3JlZihpY29uKSkgOiAwOworfQorCit2b2lkIHdlYmtp
dEljb25EYXRhYmFzZVJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihXZWJLaXRJY29uRGF0YWJh
c2UqIGRhdGFiYXNlLCBjb25zdCBnY2hhciogcGFnZVVSSSwgV2ViQ29yZTo6RnJhbWVMb2FkZXJD
bGllbnQqIGNsaWVudCkKK3sKKyAgICBTdHJpbmcgcGFnZVVSTChTdHJpbmc6OmZyb21VVEY4KHBh
Z2VVUkkpKTsKKyAgICBWZWN0b3I8T3duUHRyPFBlbmRpbmdJY29uUmVxdWVzdD4gPiogaWNvbnMg
PSB3ZWJraXRJY29uRGF0YWJhc2VHZXRPckNyZWF0ZVJlcXVlc3RzKGRhdGFiYXNlLCBwYWdlVVJM
KTsKKyAgICBBU1NFUlQoaWNvbnMpOworICAgIGljb25zLT5hcHBlbmQoYWRvcHRQdHIobmV3IFBl
bmRpbmdJY29uUmVxdWVzdChwYWdlVVJMLCBjbGllbnQpKSk7Cit9CisKK3ZvaWQgd2Via2l0SWNv
bkRhdGFiYXNlVW5yZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oV2ViS2l0SWNvbkRhdGFiYXNl
KiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkksIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xp
ZW50KiBjbGllbnQpCit7CisgICAgU3RyaW5nIHBhZ2VVUkwoU3RyaW5nOjpmcm9tVVRGOChwYWdl
VVJJKSk7CisgICAgVmVjdG9yPE93blB0cjxQZW5kaW5nSWNvblJlcXVlc3Q+ID4qIGljb25zID0g
ZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMuZ2V0KHBhZ2VVUkwpOworICAgIGlm
ICghaWNvbnMpCisgICAgICAgIHJldHVybjsKKyAgICB3ZWJraXRJY29uRGF0YWJhc2VEZWxldGVS
ZXF1ZXN0cyhkYXRhYmFzZSwgaWNvbnMsIHBhZ2VVUkwpOworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRJY29uRGF0YWJhc2VQcm9jZXNzUGVuZGluZ0ljb25zRm9yVVJJKFdlYktpdEljb25EYXRhYmFz
ZSogZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCkKK3sKKyAgICBWZWN0b3I8T3duUHRy
PFBlbmRpbmdJY29uUmVxdWVzdD4gPiogaWNvbnMgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0lj
b25SZXF1ZXN0cy5nZXQocGFnZVVSTCk7CisgICAgaWYgKCFpY29ucykKKyAgICAgICAgcmV0dXJu
OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpY29ucy0+c2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgUGVuZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0ID0gaWNvbnMtPmF0KGkpLmdldCgpOwor
ICAgICAgICBpZiAocmVxdWVzdC0+ZnJhbWVMb2FkZXJDbGllbnQoKSkKKyAgICAgICAgICAgIHJl
cXVlc3QtPmZyYW1lTG9hZGVyRGlzcGF0Y2hEaWRSZWNlaXZlSWNvbigpOworICAgICAgICBlbHNl
IGlmIChyZXF1ZXN0LT5hc3luY1Jlc3VsdCgpKQorICAgICAgICAgICAgcmVxdWVzdC0+YXN5bmNS
ZXN1bHRDb21wbGV0ZShnZXRJY29uUGl4YnVmU3luY2hyb25vdXNseShkYXRhYmFzZSwgcGFnZVVS
TCkpOworICAgIH0KKyAgICB3ZWJraXRJY29uRGF0YWJhc2VEZWxldGVSZXF1ZXN0cyhkYXRhYmFz
ZSwgaWNvbnMsIHBhZ2VVUkwpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRJY29uRGF0YWJhc2VJ
bXBvcnRGaW5pc2hlZChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAgIGRhdGFi
YXNlLT5wcml2LT5pbXBvcnRGaW5pc2hlZCA9IHRydWU7CisKKyAgICAvLyBJbXBvcnQgaXMgY29t
cGxldGUsIHByb2Nlc3MgcGVuZGluZyByZXF1ZXN0cyBmb3IgcGFnZXMgdGhhdCBhcmUgbm90IGlu
IHRoZSBkYXRhYmFzZSwKKyAgICAvLyBzaW5jZSBkaWRJbXBvcnRJY29uRGF0YUZvclBhZ2VVUkwo
KSB3aWxsIG5ldmVyIGJlIGNhbGxlZCBmb3IgdGhlbS4KKyAgICAvLyBGb3IgYXN5bmMgcmVxdWVz
dHMgd2UgbmVlZCB0byBjb21wbGV0ZSB0aGUgb3BlcmF0aW9uLCB3aGlsZSBmb3IgZnJhbWUgbG9h
ZGVyCisgICAgLy8gcmVxdWVzdHMgd2Ugb25seSBuZWVkIHRvIGRlbGV0ZSB0aGUgcmVxdWVzdCBz
byB0aGF0IGljb24tbG9hZGVkIHdvbid0IGJlIGVtaXR0ZWQuCisgICAgSGFzaE1hcDxTdHJpbmcs
IFZlY3RvcjxPd25QdHI8UGVuZGluZ0ljb25SZXF1ZXN0PiA+KiA+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5lbmQoKTsKKyAgICBmb3Ig
KEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8T3duUHRyPFBlbmRpbmdJY29uUmVxdWVzdD4gPiogPjo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3Rz
LmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgU3RyaW5nIGljb25VUkwg
PSBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKGl0
ZXItPmZpcnN0KTsKKyAgICAgICAgaWYgKCFpY29uVVJMLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIFZlY3RvcjxPd25QdHI8UGVuZGluZ0ljb25SZXF1ZXN0PiA+
KiBpY29ucyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
Y29ucy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFBlbmRpbmdJY29uUmVxdWVzdCogcmVx
dWVzdCA9IGljb25zLT5hdChpKS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5hc3lu
Y1Jlc3VsdCgpKQorICAgICAgICAgICAgICAgIHJlcXVlc3QtPmFzeW5jUmVzdWx0Q29tcGxldGUo
MCk7CisgICAgICAgIH0KKworICAgICAgICB3ZWJraXRJY29uRGF0YWJhc2VEZWxldGVSZXF1ZXN0
cyhkYXRhYmFzZSwgaWNvbnMsIGl0ZXItPmZpcnN0KTsKKyAgICB9CiB9CiAKIC8qKgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oIGIvU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oCmluZGV4IDVlYWQ2MDMu
LjViY2QyMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29u
ZGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFi
YXNlLmgKQEAgLTUzLDI1ICs1MywzNyBAQCBzdHJ1Y3QgX1dlYktpdEljb25EYXRhYmFzZUNsYXNz
IHsKIH07CiAKIFdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF90eXBl
ICAgICAgICAgICAgKHZvaWQpOword2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3R5cGUgICAgICAg
ICAgICAgICh2b2lkKTsKIAogV0VCS0lUX0FQSSBjb25zdCBnY2hhcioKLXdlYmtpdF9pY29uX2Rh
dGFiYXNlX2dldF9wYXRoICAgICAgICAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2Up
Oword2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3BhdGggICAgICAgICAgICAgIChXZWJLaXRJY29u
RGF0YWJhc2UqIGRhdGFiYXNlKTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfaWNvbl9kYXRh
YmFzZV9zZXRfcGF0aCAgICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAg
ICAgICBwYXRoKTsKK3dlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoICAgICAgICAgICAgICAo
V2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAgICBwYXRoKTsKIAogV0VCS0lUX0FQ
SSBnY2hhcioKLXdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3VyaSAgICAgICAgKFdlYktp
dEljb25EYXRhYmFzZSogZGF0YWJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhZ2VfdXJpKTsKK3dlYmtpdF9pY29uX2Rh
dGFiYXNlX2dldF9pY29uX3VyaSAgICAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2No
YXIqICAgICAgICBwYWdlX3VyaSk7CiAKIFdFQktJVF9BUEkgR2RrUGl4YnVmKgotd2Via2l0X2lj
b25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRh
YmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdj
aGFyKiAgICAgICAgcGFnZV91cmkpOword2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4
YnVmICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhZ2VfdXJp
KTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhciAgICAgICAg
ICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKTsKK3dlYmtpdF9pY29uX2RhdGFi
YXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYyAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIq
ICAgICAgICBwYWdlX3VyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0NhbmNlbGxhYmxlKiAgICAgICBjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAg
ICAgICAgICB1c2VyX2RhdGEpOworCitXRUJLSVRfQVBJIEdka1BpeGJ1ZioKK3dlYmtpdF9pY29u
X2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5pc2goV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRh
YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5j
UmVzdWx0KiAgICAgICByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdFcnJvcioqICAgICAgICAgICAgZXJyb3IpOworCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9pY29uX2RhdGFiYXNlX2NsZWFyICAgICAgICAgICAgICAgICAoV2ViS2l0SWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSk7CiAKIEdfRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YjQzMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlcHJpdmF0ZS5oCkBAIC0wLDAgKzEs
MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJr
aXRpY29uZGF0YWJhc2Vwcml2YXRlX2gKKyNkZWZpbmUgd2Via2l0aWNvbmRhdGFiYXNlcHJpdmF0
ZV9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEZyYW1lTG9hZGVyQ2xpZW50OworfQor
CitleHRlcm4gIkMiIHsKK3ZvaWQgd2Via2l0SWNvbkRhdGFiYXNlUmVnaXN0ZXJGb3JJY29uTm90
aWZpY2F0aW9uKFdlYktpdEljb25EYXRhYmFzZSosIGNvbnN0IGdjaGFyKiBwYWdlVVJJLCBXZWJD
b3JlOjpGcmFtZUxvYWRlckNsaWVudCopOwordm9pZCB3ZWJraXRJY29uRGF0YWJhc2VVbnJlZ2lz
dGVyRm9ySWNvbk5vdGlmaWNhdGlvbihXZWJLaXRJY29uRGF0YWJhc2UqLCBjb25zdCBnY2hhciog
cGFnZVVSSSwgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQqKTsKK30KKworI2VuZGlmIC8vIHdl
YmtpdGljb25kYXRhYmFzZXByaXZhdGVfaApkaWZmIC0tZ2l0IGEvVG9vbHMvR3RrTGF1bmNoZXIv
bWFpbi5jIGIvVG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCmluZGV4IGVkYzhlMmYuLmE2MDRlYjUg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0d0a0xhdW5jaGVyL21haW4uYworKysgYi9Ub29scy9HdGtMYXVu
Y2hlci9tYWluLmMKQEAgLTQwLDYgKzQwLDcgQEAgc3RhdGljIHZvaWQgYWN0aXZhdGVVcmlFbnRy
eUNiKEd0a1dpZGdldCogZW50cnksIGdwb2ludGVyIGRhdGEpCiAgICAgV2ViS2l0V2ViVmlldyAq
d2ViVmlldyA9IGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGVudHJ5KSwgIndlYi12aWV3Iik7
CiAgICAgY29uc3QgZ2NoYXIqIHVyaSA9IGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5UUlkoZW50
cnkpKTsKICAgICBnX2Fzc2VydCh1cmkpOworICAgIGd0a19lbnRyeV9zZXRfaWNvbl9mcm9tX3Bp
eGJ1ZihHVEtfRU5UUlkoZW50cnkpLCBHVEtfRU5UUllfSUNPTl9QUklNQVJZLCAwKTsKICAgICB3
ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViVmlldywgdXJpKTsKIH0KIApAQCAtMTI1LDYgKzEy
NiwxNCBAQCBzdGF0aWMgZ2Jvb2xlYW4gY2xvc2VXZWJWaWV3Q2IoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgR3RrV2lkZ2V0KiB3aW5kb3cpCiAgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7
CiAgICAgcmV0dXJuIFRSVUU7CiB9CisKK3N0YXRpYyB2b2lkIGljb25Mb2FkZWRDYihXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiBpY29uVVJJLCBHdGtXaWRnZXQqIHVyaUVudHJ5
KQoreworICAgIEdka1BpeGJ1ZiAqaWNvbiA9IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29u
X3BpeGJ1Zih3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKSwgd2Via2l0X3dlYl92aWV3X2dldF91
cmkod2ViVmlldykpOworICAgIGd0a19lbnRyeV9zZXRfaWNvbl9mcm9tX3BpeGJ1ZihHVEtfRU5U
UlkodXJpRW50cnkpLCBHVEtfRU5UUllfSUNPTl9QUklNQVJZLCBpY29uKTsKKyAgICBpZiAoaWNv
bikKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoaWNvbik7Cit9CiAjZW5kaWYKIAogc3RhdGljIEd0
a1dpZGdldCogY3JlYXRlQnJvd3NlcihHdGtXaWRnZXQqIHdpbmRvdywgR3RrV2lkZ2V0KiB1cmlF
bnRyeSwgR3RrV2lkZ2V0KiBzdGF0dXNiYXIsIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCkBAIC0x
MzgsNiArMTQ3LDcgQEAgc3RhdGljIEd0a1dpZGdldCogY3JlYXRlQnJvd3NlcihHdGtXaWRnZXQq
IHdpbmRvdywgR3RrV2lkZ2V0KiB1cmlFbnRyeSwgR3RrV2lkZ2UKICAgICBnX3NpZ25hbF9jb25u
ZWN0KHdlYlZpZXcsICJub3RpZnk6OnRpdGxlIiwgR19DQUxMQkFDSyhub3RpZnlUaXRsZUNiKSwg
d2luZG93KTsKICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6OmxvYWQtc3Rh
dHVzIiwgR19DQUxMQkFDSyhub3RpZnlMb2FkU3RhdHVzQ2IpLCB1cmlFbnRyeSk7CiAgICAgZ19z
aWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojpwcm9ncmVzcyIsIEdfQ0FMTEJBQ0sobm90
aWZ5UHJvZ3Jlc3NDYiksIHdpbmRvdyk7CisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAi
aWNvbi1sb2FkZWQiLCBHX0NBTExCQUNLKGljb25Mb2FkZWRDYiksIHVyaUVudHJ5KTsKICAgICBn
X3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJob3ZlcmluZy1vdmVyLWxpbmsiLCBHX0NBTExCQUNL
KGxpbmtIb3ZlckNiKSwgc3RhdHVzYmFyKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcs
ICJjcmVhdGUtd2ViLXZpZXciLCBHX0NBTExCQUNLKGNyZWF0ZVdlYlZpZXdDYiksIHdpbmRvdyk7
CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAid2ViLXZpZXctcmVhZHkiLCBHX0NBTExC
QUNLKHdlYlZpZXdSZWFkeUNiKSwgd2luZG93KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106123</attachid>
            <date>2011-09-02 06:15:18 -0700</date>
            <delta_ts>2012-02-16 13:01:15 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>icon-database.diff</filename>
            <type>text/plain</type>
            <size>39962</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwppbmRleCBlZjIwZGVlLi45ZDE1MmZjZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDgyIEBACisyMDExLTA5LTAyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBXZWJLaXRJY29uRGF0YWJhc2UgZG9lc24n
dCBrZWVwIGljb25zIGNhY2hlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTYyMDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0aW9u
LgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6OnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNh
dGlvbik6IFdoZW4gdGhlCisgICAgICAgIGljb24gaXMgaW4gdGhlIGRhdGFiYXNlLCBidXQgdGhl
IGRhdGEgaXMgbm90IHN0aWxsIGF2YWlsYWJsZSwKKyAgICAgICAgcmVnaXN0ZXIgYSBub3RpZmlj
YXRpb24gdG8gZGlzcGF0Y2ggcmVjZWl2ZWQgaWNvbiB3aGVuIHRoZSBpY29uCisgICAgICAgIGRh
dGEgaXMgYXZhaWxhYmxlLgorICAgICAgICAqIHRlc3RzL3Rlc3RpY29uZGF0YWJhc2UuYzogQWRk
ZWQuCisgICAgICAgIChzZXJ2ZXJfY2FsbGJhY2spOgorICAgICAgICAoZGVsZXRlRGF0YWJhc2VG
aWxlSWZFeGlzdHMpOgorICAgICAgICAodGVzdFdlYmtpdEljb25EYXRhYmFzZVNldFBhdGgpOgor
ICAgICAgICAoaWNvbkRhdGFiYXNlR2V0SWNvblZhbGlkQ2FsbGJhY2spOgorICAgICAgICAoaWNv
bkRhdGFiYXNlR2V0SWNvbkludmFsaWRDYWxsYmFjayk6CisgICAgICAgIChpY29uRGF0YWJhc2VH
ZXRJY29uQ2FuY2VsbGVkQ2FsbGJhY2spOgorICAgICAgICAoaWRsZVF1aXRMb29wQ2FsbGJhY2sp
OgorICAgICAgICAobG9hZFVSSSk6CisgICAgICAgIChpY29uRGF0YWJhc2VHZXRJY29uVmFsaWRJ
ZGxlKToKKyAgICAgICAgKGljb25EYXRhYmFzZUdldEljb25JbnZhbGlkSWRsZSk6CisgICAgICAg
IChpY29uRGF0YWJhc2VHZXRJY29uQ2FuY2VsbGVkSWRsZSk6CisgICAgICAgICh0ZXN0V2Via2l0
SWNvbkRhdGFiYXNlR2V0SWNvbkFzeW5jKToKKyAgICAgICAgKHRlc3RXZWJraXRJY29uRGF0YWJh
c2VHZXRJY29uVVJJKToKKyAgICAgICAgKHRlc3RXZWJraXRJY29uRGF0YWJhc2VSZW1vdmVBbGwp
OgorICAgICAgICAodGVzdFdlYmtpdEljb25EYXRhYmFzZUNsb3NlRGF0YWJhc2UpOgorICAgICAg
ICAobWFpbik6CisgICAgICAgICogd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHA6CisgICAg
ICAgIChJY29uRGF0YWJhc2VDbGllbnRHdGs6OnBlcmZvcm1JbXBvcnQpOgorICAgICAgICAoSWNv
bkRhdGFiYXNlQ2xpZW50R3RrOjpkaWRSZW1vdmVBbGxJY29ucyk6CisgICAgICAgIChJY29uRGF0
YWJhc2VDbGllbnRHdGs6OmRpZEltcG9ydEljb25VUkxGb3JQYWdlVVJMKToKKyAgICAgICAgKElj
b25EYXRhYmFzZUNsaWVudEd0azo6ZGlkSW1wb3J0SWNvbkRhdGFGb3JQYWdlVVJMKToKKyAgICAg
ICAgKEljb25EYXRhYmFzZUNsaWVudEd0azo6ZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwpOgorICAg
ICAgICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpkaWRGaW5pc2hVUkxJbXBvcnQpOgorICAgICAg
ICAoUGVuZGluZ0ljb25SZXF1ZXN0OjpQZW5kaW5nSWNvblJlcXVlc3QpOgorICAgICAgICAoUGVu
ZGluZ0ljb25SZXF1ZXN0Ojp+UGVuZGluZ0ljb25SZXF1ZXN0KToKKyAgICAgICAgKFBlbmRpbmdJ
Y29uUmVxdWVzdDo6cGFnZVVSSSk6CisgICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OmZyYW1l
TG9hZGVyQ2xpZW50KToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6YXN5bmNSZXN1bHQp
OgorICAgICAgICAoUGVuZGluZ0ljb25SZXF1ZXN0Ojphc3luY1Jlc3VsdENvbXBsZXRlKToKKyAg
ICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6YXN5bmNSZXN1bHRDb21wbGV0ZUluSWRsZSk6Cisg
ICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OmFzeW5jUmVzdWx0Q2FuY2VsKToKKyAgICAgICAg
KFBlbmRpbmdJY29uUmVxdWVzdDo6ZnJhbWVMb2FkZXJEaXNwYXRjaERpZFJlY2VpdmVJY29uKToK
KyAgICAgICAgKHdlYmtpdEljb25EYXRhYmFzZUljb25Mb2FkZWQpOiBSZXRhaW4gdGhlIGljb24g
d2hlbiBsb2FkZWQgdG8KKyAgICAgICAgbWFrZSBzdXJlIGl0J2xsIGJlIGF2YWlsYWJsZSB3aGVu
IHJlcXVlc3RlZCBsYXRlci4KKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX2luaXQpOgor
ICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgpOiBEZWxheSBkYXRhYmFzZSBj
bGVhbnVwIGJ5IGRlZmF1bHQKKyAgICAgICAgdG8gbWFrZSBpY29ucyBwZXJzaXN0ZW50IGluIHRo
ZSBkYXRhYmFzZS4KKyAgICAgICAgKGdldEljb25QaXhidWZTeW5jaHJvbm91c2x5KTogSGVscGVy
IGZ1bmN0aW9uIHRvIGNhbGwKKyAgICAgICAgSWNvbkRhdGFiYXNlOjpzeW5jaHJvbm91c0ljb25V
UkxGb3JQYWdlVVJMKCkuCisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9w
aXhidWYpOiBGaXggZG9jIGNvbW1lbnRzLgorICAgICAgICAod2Via2l0SWNvbkRhdGFiYXNlR2V0
T3JDcmVhdGVSZXF1ZXN0cyk6IEhlbHBlciBmdW5jdGlvbiB0byBnZXQKKyAgICAgICAgdGhlIHZl
Y3RvciBvZiBwZW5kaW5nIHJlcXVlc3RzIGZvciB0aGUgZ2l2ZW4gdXJpLgorICAgICAgICAod2Vi
a2l0SWNvbkRhdGFiYXNlRGVsZXRlUmVxdWVzdHMpOiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVtb3Zl
IHRoZQorICAgICAgICB2ZWN0b3Igb2YgcGVuZGluZyByZXF1ZXN0cyBmb3IgdGhlIGdpdmVuIHVy
aS4KKyAgICAgICAgKGdldEljb25QaXhidWZDYW5jZWxsZWRJZGxlKTogQ2FuY2VsIHRoZSByZXF1
ZXN0LgorICAgICAgICAod2Via2l0SWNvbkRhdGFiYXNlR2V0SWNvblBpeGJ1ZkNhbmNlbGxlZCk6
CisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmMpOiBO
ZXcgbWV0aG9kIHRvIGdldCBhbgorICAgICAgICBpY29uIGFzeW5jaHJvbm91c2x5LgorICAgICAg
ICAod2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2ZpbmlzaCk6IEZpbmlzaGVz
IGFuCisgICAgICAgIG9wZXJhdGlvbiBzdGFydGVkIHdpdGggd2Via2l0X2ljb25fZGF0YWJhc2Vf
Z2V0X2ljb25fcGl4YnVmX2FzeW5jKCkuCisgICAgICAgICh3ZWJraXRJY29uRGF0YWJhc2VSZWdp
c3RlckZvckljb25Ob3RpZmljYXRpb24pOiBSZWdpc3RlciBmcmFtZQorICAgICAgICBsb2FkZXIg
dG8gYmUgbm90aWZpZWQgd2hlbiB0aGUgaWNvbiBkYXRhIGlzIGF2YWlsYWJsZS4KKyAgICAgICAg
KHdlYmtpdEljb25EYXRhYmFzZVVucmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKTogVW5yZWdp
c3RlciBhCisgICAgICAgIGZyYW1lIGxvYWRlciBub3RpZmljYXRpb24gcmVxdWVzdC4KKyAgICAg
ICAgKHdlYmtpdEljb25EYXRhYmFzZVByb2Nlc3NQZW5kaW5nSWNvbnNGb3JVUkkpOiBQcm9jZXNz
IHBlbmRpbmcKKyAgICAgICAgcmVxdWVzdHMgZm9yIHRoZSBnaXZlbiB1cmksIGZvciBhc3luYyBv
cGVyYXRpb24gcmVxdWVzdHMgaXQKKyAgICAgICAgY29tcGxldGVzIHRoZSBvcGVyYXRpb24sIHdo
aWxlIGZvciBmcmFtZSBsb2FkZXIgcmVxdWVzdHMgaXQgY2FsbHMKKyAgICAgICAgRnJhbWVMb2Fk
ZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKSB0byBub3RpZnkgdGhlIGZyYW1lCisg
ICAgICAgIGxvYWRlciB0aGF0IGhlIGljb24gaXMgbm93IGF2YWlsYWJsZS4KKyAgICAgICAgKHdl
YmtpdEljb25EYXRhYmFzZUltcG9ydEZpbmlzaGVkKTogV2hlbiBpbXBvcnQgaXMgZmluaXNoZWQs
IGNoZWNrCisgICAgICAgIHBlbmRpbmcgcmVxdWVzdHMgdG8gcHJvY2VzcyBhbmQgZGVsZXRlIHRo
ZSBvbmVzIHRoYXQgYXNrIGZvciBhbgorICAgICAgICBpY29uIHRoYXQgZG9lc24ndCBleGlzdCBp
biBkYXRhYmFzZS4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmg6CisgICAg
ICAgICogd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZXByaXZhdGUuaDogQWRkZWQuCisKIDIwMTEt
MDgtMzAgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI5NDE0Miwgcjk0MTQ0LCByOTQxNDUsIGFuZCBy
OTQxNDguCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggMTVjNzU2My4uZmEzYWE4ZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTA5LTAyICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBXZWJLaXRJY29u
RGF0YWJhc2UgZG9lc24ndCBrZWVwIGljb25zIGNhY2hlZAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyMDAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZmF2aWNvbnMgaW4gR3Rr
TGF1bmNoZXIuCisKKyAgICAgICAgKiBHdGtMYXVuY2hlci9tYWluLmM6CisgICAgICAgIChhY3Rp
dmF0ZVVyaUVudHJ5Q2IpOgorICAgICAgICAoaWNvbkxvYWRlZENiKToKKyAgICAgICAgKGNyZWF0
ZUJyb3dzZXIpOgorCiAyMDExLTA5LTAxICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAK
ICAgICAgICAgRml4IHRoZSBidWlsZCBieSBhZGRpbmcgc29tZSBtb3JlIG1pc3NpbmcgcmV0dXJu
IHR5cGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0gYi9T
b3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQppbmRleCAxMTQxYmVlLi4wM2MxMGRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQpAQCAtMjE3LDYgKzIxNyw3IEBAIHdlYmtpdGd0a19z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aGl0dGVzdHJlc3Vs
dC5jcHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0cHJp
dmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNw
cCBcCisJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZXByaXZhdGUu
aCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmNwcCBc
CiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0cHJpdmF0ZS5o
IFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3Jlc3BvbnNlLmNwcCBc
CkBAIC00MzEsNiArNDMyLDcgQEAgVEVTVF9QUk9HUyArPSBcCiAJUHJvZ3JhbXMvdW5pdHRlc3Rz
L3Rlc3Rkb21kb213aW5kb3cgXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0ZG9tbm9kZSBcCiAJ
UHJvZ3JhbXMvdW5pdHRlc3RzL3Rlc3RodHRwYmFja2VuZCBcCisJUHJvZ3JhbXMvdW5pdHRlc3Rz
L3Rlc3RpY29uZGF0YWJhc2UgXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0bG9hZGluZyBcCiAJ
UHJvZ3JhbXMvdW5pdHRlc3RzL3Rlc3RnbG9iYWxzIFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVz
dG1pbWVoYW5kbGluZyBcCkBAIC00NzgsNiArNDgwLDExIEBAIFByb2dyYW1zX3VuaXR0ZXN0c190
ZXN0aHR0cGJhY2tlbmRfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQogUHJvZ3JhbXNf
dW5pdHRlc3RzX3Rlc3RodHRwYmFja2VuZF9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQog
UHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RodHRwYmFja2VuZF9MREZMQUdTID0gJCh3ZWJraXRfdGVz
dHNfbGRmbGFncykKIAorUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RpY29uZGF0YWJhc2VfU09VUkNF
UyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RpY29uZGF0YWJhc2UuYyBTb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMKK1Byb2dyYW1zX3VuaXR0ZXN0c190ZXN0aWNvbmRh
dGFiYXNlX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX3VuaXR0ZXN0
c190ZXN0aWNvbmRhdGFiYXNlX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCitQcm9ncmFt
c191bml0dGVzdHNfdGVzdGljb25kYXRhYmFzZV9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRm
bGFncykKKwogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RnbG9iYWxzX1NPVVJDRVMgPSBTb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0Z2xvYmFscy5jCiBQcm9ncmFtc191bml0dGVzdHNfdGVzdGds
b2JhbHNfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQogUHJvZ3JhbXNfdW5pdHRlc3Rz
X3Rlc3RnbG9iYWxzX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5j
cHAKaW5kZXggYzk0ODYwMi4uZDU4OTk1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcApAQCAtNjgsNiAr
NjgsNyBAQAogI2luY2x1ZGUgIndlYmtpdGdsb2JhbHMuaCIKICNpbmNsdWRlICJ3ZWJraXRnbG9i
YWxzcHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFzZS5oIgorI2luY2x1ZGUg
IndlYmtpdGljb25kYXRhYmFzZXByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVx
dWVzdC5oIgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmtyZXF1ZXN0cHJpdmF0ZS5oIgogI2luY2x1
ZGUgIndlYmtpdG5ldHdvcmtyZXNwb25zZS5oIgpAQCAtNjYxLDcgKzY2MiwxMiBAQCB2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50OjpkaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKCkgY29uc3QKIAogdm9p
ZCBGcmFtZUxvYWRlckNsaWVudDo6cmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKGJvb2wgc2hv
dWxkUmVnaXN0ZXIpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBjb25zdCBnY2hhciog
ZnJhbWVVUkkgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF91cmkobV9mcmFtZSk7CisgICAgV2ViS2l0
SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOworICAg
IGlmIChzaG91bGRSZWdpc3RlcikKKyAgICAgICAgd2Via2l0SWNvbkRhdGFiYXNlUmVnaXN0ZXJG
b3JJY29uTm90aWZpY2F0aW9uKGRhdGFiYXNlLCBmcmFtZVVSSSwgdGhpcyk7CisgICAgZWxzZQor
ICAgICAgICB3ZWJraXRJY29uRGF0YWJhc2VVbnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihk
YXRhYmFzZSwgZnJhbWVVUkksIHRoaXMpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpz
ZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5KGJvb2wgcmVhZHkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0aWNvbmRhdGFiYXNlLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90
ZXN0cy90ZXN0aWNvbmRhdGFiYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYTM5NjJjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rl
c3RpY29uZGF0YWJhc2UuYwpAQCAtMCwwICsxLDI2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAidGVzdF91dGlscy5oIgorI2luY2x1ZGUgPGdsaWIv
Z3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworI2lmIEdUS19DSEVDS19WRVJTSU9OKDIsIDE0LCAw
KQorR01haW5Mb29wICpsb29wOworY2hhciogYmFzZV91cmk7CisKK3N0YXRpYyB2b2lkCitzZXJ2
ZXJfY2FsbGJhY2soU291cFNlcnZlciAqc2VydmVyLCBTb3VwTWVzc2FnZSAqbXNnLAorICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUgKnF1ZXJ5LAorICAgICAgICAg
ICAgICAgIFNvdXBDbGllbnRDb250ZXh0ICpjb250ZXh0LCBncG9pbnRlciBkYXRhKQoreworICAg
IGNoYXIqIGNvbnRlbnRzOworICAgIGdzaXplIGxlbmd0aDsKKworICAgIGlmIChtc2ctPm1ldGhv
ZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bXNnLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19PSyk7CisK
KyAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9mYXZpY29uLmljbyIpKSB7CisgICAgICAgIEdF
cnJvciogZXJyb3IgPSBOVUxMOworCisgICAgICAgIGdfZmlsZV9nZXRfY29udGVudHMoImJsYW5r
LmljbyIsICZjb250ZW50cywgJmxlbmd0aCwgJmVycm9yKTsKKyAgICAgICAgZ19hc3NlcnQoIWVy
cm9yKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb250ZW50cyA9IGdfc3RyZHVwKCI8aHRtbD48
Ym9keT50ZXN0PC9ib2R5PjwvaHRtbD4iKTsKKyAgICAgICAgbGVuZ3RoID0gc3RybGVuKGNvbnRl
bnRzKTsKKyAgICB9CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25z
ZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsKKyAgICBzb3VwX21l
c3NhZ2VfYm9keV9jb21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOworfQorCitzdGF0aWMgdm9p
ZCBkZWxldGVEYXRhYmFzZUZpbGVJZkV4aXN0cyhjb25zdCBjaGFyICpkYXRhYmFzZVBhdGgpCit7
CisgICAgaWYgKCFnX2ZpbGVfdGVzdChkYXRhYmFzZVBhdGgsIEdfRklMRV9URVNUX0lTX0RJUikp
CisgICAgICAgIHJldHVybjsKKworICAgIGNoYXIgKmRhdGFiYXNlRmlsZW5hbWUgPSBnX2J1aWxk
X2ZpbGVuYW1lKGRhdGFiYXNlUGF0aCwgIldlYnBhZ2VJY29ucy5kYiIsIE5VTEwpOworICAgIGlm
IChnX3VubGluayhkYXRhYmFzZUZpbGVuYW1lKSA9PSAtMSkgeworICAgICAgICBnX2ZyZWUoZGF0
YWJhc2VGaWxlbmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBnX3JtZGlyKGRh
dGFiYXNlUGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRJY29uRGF0YWJhc2VTZXRQ
YXRoKHZvaWQpCit7CisgICAgY2hhciAqZGF0YWJhc2VQYXRoID0gZ19idWlsZF9maWxlbmFtZShn
X2dldF90bXBfZGlyKCksICJ3ZWJraXQtdGVzdGljb25kYXRhYmFzZSIsIE5VTEwpOworICAgIGRl
bGV0ZURhdGFiYXNlRmlsZUlmRXhpc3RzKGRhdGFiYXNlUGF0aCk7CisKKyAgICBXZWJLaXRJY29u
RGF0YWJhc2UgKmRhdGFiYXNlID0gd2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCk7CisgICAgd2Vi
a2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgoZGF0YWJhc2UsIGRhdGFiYXNlUGF0aCk7CisKKyAg
ICBnX2Fzc2VydF9jbXBzdHIoZGF0YWJhc2VQYXRoLCA9PSwgd2Via2l0X2ljb25fZGF0YWJhc2Vf
Z2V0X3BhdGgoZGF0YWJhc2UpKTsKKworICAgIGdfZnJlZShkYXRhYmFzZVBhdGgpOworfQorCitz
dGF0aWMgdm9pZCBpY29uRGF0YWJhc2VHZXRJY29uVmFsaWRDYWxsYmFjayhHT2JqZWN0ICpzb3Vy
Y2VPYmplY3QsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAg
ICBnYm9vbGVhbiAqYmVlbkhlcmUgPSAoZ2Jvb2xlYW4qKXVzZXJEYXRhOworICAgIEdFcnJvciAq
ZXJyb3IgPSAwOworICAgIEdka1BpeGJ1ZiAqaWNvbiA9IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dl
dF9pY29uX3BpeGJ1Zl9maW5pc2goV0VCS0lUX0lDT05fREFUQUJBU0Uoc291cmNlT2JqZWN0KSwg
cmVzdWx0LCAmZXJyb3IpOworICAgIGdfYXNzZXJ0KGljb24pOworICAgIGdfb2JqZWN0X3VucmVm
KGljb24pOworCisgICAgKmJlZW5IZXJlID0gVFJVRTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQo
bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGljb25EYXRhYmFzZUdldEljb25JbnZhbGlkQ2FsbGJh
Y2soR09iamVjdCAqc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgZ3BvaW50ZXIg
dXNlckRhdGEpCit7CisgICAgZ2Jvb2xlYW4gKmJlZW5IZXJlID0gKGdib29sZWFuKil1c2VyRGF0
YTsKKyAgICBHRXJyb3IgKmVycm9yID0gMDsKKyAgICBHZGtQaXhidWYgKmljb24gPSB3ZWJraXRf
aWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfZmluaXNoKFdFQktJVF9JQ09OX0RBVEFCQVNF
KHNvdXJjZU9iamVjdCksIHJlc3VsdCwgJmVycm9yKTsKKyAgICBnX2Fzc2VydCghaWNvbik7CisK
KyAgICAqYmVlbkhlcmUgPSBUUlVFOworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30K
Kworc3RhdGljIHZvaWQgaWNvbkRhdGFiYXNlR2V0SWNvbkNhbmNlbGxlZENhbGxiYWNrKEdPYmpl
Y3QgKnNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRh
KQoreworICAgIGdib29sZWFuICpiZWVuSGVyZSA9IChnYm9vbGVhbiopdXNlckRhdGE7CisgICAg
R0Vycm9yICplcnJvciA9IE5VTEw7CisgICAgR2RrUGl4YnVmICppY29uID0gd2Via2l0X2ljb25f
ZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2ZpbmlzaChXRUJLSVRfSUNPTl9EQVRBQkFTRShzb3Vy
Y2VPYmplY3QpLCByZXN1bHQsICZlcnJvcik7CisgICAgZ19hc3NlcnQoIWljb24pOworICAgIGdf
YXNzZXJ0KGVycm9yICYmIGdfZXJyb3JfbWF0Y2hlcyhlcnJvciwgR19JT19FUlJPUiwgR19JT19F
UlJPUl9DQU5DRUxMRUQpKTsKKworICAgICpiZWVuSGVyZSA9IFRSVUU7CisKKyAgICBnX21haW5f
bG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMgdm9pZCBpZGxlUXVpdExvb3BDYWxsYmFjayhX
ZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBHUGFyYW1TcGVjICpwc3BlYywgZ3BvaW50ZXIgZGF0YSkK
K3sKKyAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9h
ZF9zdGF0dXMod2ViVmlldyk7CisKKyAgICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FEX0ZJTklT
SEVEIHx8IHN0YXR1cyA9PSBXRUJLSVRfTE9BRF9GQUlMRUQpCisgICAgICAgIGdfbWFpbl9sb29w
X3F1aXQobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRVUkkoY29uc3QgY2hhciAqdXJpKQor
eworICAgIEd0a1dpZGdldCAqd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19QT1BV
UCk7CisgICAgV2ViS2l0V2ViVmlldyAqdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5k
b3cpLCBHVEtfV0lER0VUKHZpZXcpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7
CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgdXJpKTsKKyAgICAvLyAgICBn
X3NpZ25hbF9jb25uZWN0KHZpZXcsICJpY29uLWxvYWRlZCIsIEdfQ0FMTEJBQ0soaWRsZVF1aXRM
b29wQ2FsbGJhY2spLCBOVUxMKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcsICJub3RpZnk6
OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhpZGxlUXVpdExvb3BDYWxsYmFjayksIE5VTEwpOwor
ICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5k
b3cpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gaWNvbkRhdGFiYXNlR2V0SWNvblZhbGlkSWRsZShn
cG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9w
aXhidWZfYXN5bmMod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCksIGJhc2VfdXJpLCBOVUxMLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uRGF0YWJh
c2VHZXRJY29uVmFsaWRDYWxsYmFjaywgdXNlckRhdGEpOworICAgIHJldHVybiBGQUxTRTsKK30K
Kworc3RhdGljIGdib29sZWFuIGljb25EYXRhYmFzZUdldEljb25JbnZhbGlkSWRsZShncG9pbnRl
ciB1c2VyRGF0YSkKK3sKKyAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZf
YXN5bmMod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCksICJodHRwOi8vd3d3LndlYmtpdGd0ay5v
cmcvIiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWNvbkRhdGFiYXNlR2V0SWNvbkludmFsaWRDYWxsYmFjaywgdXNlckRhdGEpOworICAgIHJl
dHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuIGljb25EYXRhYmFzZUdldEljb25DYW5j
ZWxsZWRJZGxlKGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIEdDYW5jZWxsYWJsZSAqY2FuY2Vs
bGFibGUgPSBnX2NhbmNlbGxhYmxlX25ldygpOworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dl
dF9pY29uX3BpeGJ1Zl9hc3luYyh3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKSwgYmFzZV91cmks
IGNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpY29uRGF0YWJhc2VHZXRJY29uQ2FuY2VsbGVkQ2FsbGJhY2ssIHVzZXJEYXRhKTsKKyAg
ICBnX2NhbmNlbGxhYmxlX2NhbmNlbChjYW5jZWxsYWJsZSk7CisgICAgZ19vYmplY3RfdW5yZWYo
Y2FuY2VsbGFibGUpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdl
YmtpdEljb25EYXRhYmFzZUdldEljb25Bc3luYyh2b2lkKQoreworICAgIGdib29sZWFuIGJlZW5U
b0ljb25DYWxsYmFjazsKKworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7
CisKKyAgICAvKiBMb2FkIHVyaSB0byBtYWtlIHN1cmUgZmF2aWNvbiBpcyBhZGRlZCB0byBkYXRh
YmFzZSAqLworICAgIGxvYWRVUkkoYmFzZV91cmkpOworCisgICAgYmVlblRvSWNvbkNhbGxiYWNr
ID0gRkFMU0U7CisgICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMpaWNvbkRhdGFiYXNlR2V0SWNv
blZhbGlkSWRsZSwgJmJlZW5Ub0ljb25DYWxsYmFjayk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxv
b3ApOworICAgIGdfYXNzZXJ0KGJlZW5Ub0ljb25DYWxsYmFjayk7CisKKyAgICBiZWVuVG9JY29u
Q2FsbGJhY2sgPSBGQUxTRTsKKyAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYylpY29uRGF0YWJh
c2VHZXRJY29uSW52YWxpZElkbGUsICZiZWVuVG9JY29uQ2FsbGJhY2spOworICAgIGdfbWFpbl9s
b29wX3J1bihsb29wKTsKKyAgICBnX2Fzc2VydChiZWVuVG9JY29uQ2FsbGJhY2spOworCisgICAg
YmVlblRvSWNvbkNhbGxiYWNrID0gRkFMU0U7CisgICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMp
aWNvbkRhdGFiYXNlR2V0SWNvbkNhbmNlbGxlZElkbGUsICZiZWVuVG9JY29uQ2FsbGJhY2spOwor
ICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKyAgICBnX2Fzc2VydChiZWVuVG9JY29uQ2FsbGJh
Y2spOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0SWNvbkRhdGFiYXNlR2V0SWNvblVSSSh2
b2lkKQoreworICAgIGNoYXIgKmljb25VUkkgPSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl91cmkod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCksIGJhc2VfdXJpKTsKKyAgICBjaGFyICpl
eHBlY3RlZFVSSSA9IGdfc3RyZHVwX3ByaW50ZigiJXNmYXZpY29uLmljbyIsIGJhc2VfdXJpKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIoaWNvblVSSSwgPT0sIGV4cGVjdGVkVVJJKTsKKyAgICBnX2Zy
ZWUoZXhwZWN0ZWRVUkkpOworICAgIGdfZnJlZShpY29uVVJJKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdFdlYmtpdEljb25EYXRhYmFzZVJlbW92ZUFsbCh2b2lkKQoreworICAgIFdlYktpdEljb25E
YXRhYmFzZSAqZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKKyAgICB3ZWJr
aXRfaWNvbl9kYXRhYmFzZV9jbGVhcihkYXRhYmFzZSk7CisgICAgY2hhciAqaWNvblVSSSA9IHdl
YmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3VyaShkYXRhYmFzZSwgYmFzZV91cmkpOworICAg
IGdfYXNzZXJ0X2NtcHN0cihpY29uVVJJLCA9PSwgIiIpOworICAgIGdfZnJlZShpY29uVVJJKTsK
K30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEljb25EYXRhYmFzZUNsb3NlRGF0YWJhc2Uodm9p
ZCkKK3sKKyAgICBXZWJLaXRJY29uRGF0YWJhc2UgKmRhdGFiYXNlID0gd2Via2l0X2dldF9pY29u
X2RhdGFiYXNlKCk7CisgICAgY2hhciAqZGF0YWJhc2VQYXRoID0gZ19zdHJkdXAod2Via2l0X2lj
b25fZGF0YWJhc2VfZ2V0X3BhdGgoZGF0YWJhc2UpKTsKKyAgICB3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9zZXRfcGF0aChkYXRhYmFzZSwgMCk7CisgICAgZGVsZXRlRGF0YWJhc2VGaWxlSWZFeGlzdHMo
ZGF0YWJhc2VQYXRoKTsKKyAgICBnX2ZyZWUoZGF0YWJhc2VQYXRoKTsKK30KKworaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIFNvdXBTZXJ2ZXIqIHNlcnZlcjsKKyAgICBT
b3VwVVJJKiBzb3VwX3VyaTsKKworICAgIGdfdGhyZWFkX2luaXQoMCk7CisgICAgZ3RrX3Rlc3Rf
aW5pdCgmYXJnYywgJmFyZ3YsIDApOworCisgICAgLyogSG9wZWZ1bGx5IG1ha2UgdGVzdCBpbmRl
cGVuZGVudCBvZiB0aGUgcGF0aCBpdCdzIGNhbGxlZCBmcm9tLiAqLworICAgIHRlc3R1dGlsc19y
ZWxhdGl2ZV9jaGRpcigiU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QuaHRt
bCIsIGFyZ3ZbMF0pOworCisgICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVS
X1BPUlQsIDAsIE5VTEwpOworICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIpOworCisg
ICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJfY2FsbGJhY2ss
IE5VTEwsIE5VTEwpOworCisgICAgc291cF91cmkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcu
MC4wLjEvIik7CisgICAgc291cF91cmlfc2V0X3BvcnQoc291cF91cmksIHNvdXBfc2VydmVyX2dl
dF9wb3J0KHNlcnZlcikpOworCisgICAgYmFzZV91cmkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291
cF91cmksIEZBTFNFKTsKKyAgICBzb3VwX3VyaV9mcmVlKHNvdXBfdXJpKTsKKworICAgIGdfdGVz
dF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L2ljb25kYXRhYmFzZS9zZXQtcGF0aCIsIHRlc3RXZWJraXRJY29uRGF0YWJh
c2VTZXRQYXRoKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvaWNvbmRhdGFiYXNlL2lj
b24tYXN5bmMiLCB0ZXN0V2Via2l0SWNvbkRhdGFiYXNlR2V0SWNvbkFzeW5jKTsKKyAgICBnX3Rl
c3RfYWRkX2Z1bmMoIi93ZWJraXQvaWNvbmRhdGFiYXNlL2ljb24tdXJpIiwgdGVzdFdlYmtpdElj
b25EYXRhYmFzZUdldEljb25VUkkpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9pY29u
ZGF0YWJhc2UvcmVtb3ZlLWFsbCIsIHRlc3RXZWJraXRJY29uRGF0YWJhc2VSZW1vdmVBbGwpOwor
ICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9pY29uZGF0YWJhc2UvY2xvc2UtZGIiLCB0ZXN0
V2Via2l0SWNvbkRhdGFiYXNlQ2xvc2VEYXRhYmFzZSk7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1
bigpOworfQorI2Vsc2UKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBn
X2NyaXRpY2FsKCJZb3Ugd2lsbCBuZWVkIGd0ay0yLjE0LjAgdG8gcnVuIHRoZSB1bml0IHRlc3Rz
LiBEb2luZyBub3RoaW5nIG5vdy4iKTsKKyAgICByZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuY3BwCmluZGV4IDM4
M2IwODEuLjFkZTg3ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRpY29uZGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRp
Y29uZGF0YWJhc2UuY3BwCkBAIC0yMywxMCArMjMsMTUgQEAKICNpbmNsdWRlICJEYXRhYmFzZURl
dGFpbHMuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJGaWxlU3lz
dGVtLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJHUmVmUHRy
LmgiCiAjaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSWNvbkRhdGFiYXNlQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVk
ZSAid2Via2l0Z2xvYmFscy5oIgogI2luY2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCisj
aW5jbHVkZSAid2Via2l0aWNvbmRhdGFiYXNlcHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdG1h
cnNoYWwuaCIKICNpbmNsdWRlICJ3ZWJraXRzZWN1cml0eW9yaWdpbnByaXZhdGUuaCIKICNpbmNs
dWRlICJ3ZWJraXR3ZWJmcmFtZS5oIgpAQCAtNjMsNiArNjgsOTkgQEAKIAogdXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKIAorc3RydWN0IFBlbmRpbmdJY29uUmVxdWVzdDsKKworc3RhdGljIHZvaWQg
d2Via2l0SWNvbkRhdGFiYXNlUHJvY2Vzc1BlbmRpbmdJY29uc0ZvclVSSShXZWJLaXRJY29uRGF0
YWJhc2UqLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkkpOworc3RhdGljIHZvaWQgd2Via2l0SWNvbkRh
dGFiYXNlSW1wb3J0RmluaXNoZWQoV2ViS2l0SWNvbkRhdGFiYXNlKik7CitzdGF0aWMgdm9pZCB3
ZWJraXRJY29uRGF0YWJhc2VHZXRJY29uUGl4YnVmQ2FuY2VsbGVkKEdDYW5jZWxsYWJsZSosIFBl
bmRpbmdJY29uUmVxdWVzdCopOworCitjbGFzcyBJY29uRGF0YWJhc2VDbGllbnRHdGsgOiBwdWJs
aWMgV2ViQ29yZTo6SWNvbkRhdGFiYXNlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICAvLyBJY29uRGF0
YWJhc2VDbGllbnQgaW50ZXJmYWNlCisgICAgdmlydHVhbCBib29sIHBlcmZvcm1JbXBvcnQoKSB7
IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZUFsbEljb25zKCkgeyB9
OworICAgIHZpcnR1YWwgdm9pZCBkaWRJbXBvcnRJY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJp
bmcmKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGRpZEltcG9ydEljb25EYXRhRm9yUGFnZVVSTChj
b25zdCBTdHJpbmcmIFVSTCkKKyAgICB7CisgICAgICAgIHdlYmtpdEljb25EYXRhYmFzZVByb2Nl
c3NQZW5kaW5nSWNvbnNGb3JVUkkod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCksIFVSTCk7Cisg
ICAgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTChjb25zdCBTdHJp
bmcmKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaFVSTEltcG9ydCgpCisgICAgewor
ICAgICAgICB3ZWJraXRJY29uRGF0YWJhc2VJbXBvcnRGaW5pc2hlZCh3ZWJraXRfZ2V0X2ljb25f
ZGF0YWJhc2UoKSk7CisgICAgfQorfTsKKworc3RydWN0IFBlbmRpbmdJY29uUmVxdWVzdCB7Citw
dWJsaWM6CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0KGNvbnN0IFN0cmluZyYgcGFnZVVSSSwgV2Vi
Q29yZTo6RnJhbWVMb2FkZXJDbGllbnQqIGZyYW1lTG9hZGVyQ2xpZW50KQorICAgICAgICA6IG1f
cGFnZVVSSShwYWdlVVJJKQorICAgICAgICAsIG1fZnJhbWVMb2FkZXJDbGllbnQoZnJhbWVMb2Fk
ZXJDbGllbnQpCisgICAgICAgICwgbV9hc3luY1Jlc3VsdCgwKQorICAgICAgICAsIG1fY2FuY2Vs
bGFibGUoMCkKKyAgICAgICAgLCBtX2NhbmNlbGxlZElkKDApCisgICAgeworICAgIH0KKworICAg
IFBlbmRpbmdJY29uUmVxdWVzdChjb25zdCBTdHJpbmcmIHBhZ2VVUkksIEdTaW1wbGVBc3luY1Jl
c3VsdCogcmVzdWx0LCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlKQorICAgICAgICA6IG1fcGFn
ZVVSSShwYWdlVVJJKQorICAgICAgICAsIG1fZnJhbWVMb2FkZXJDbGllbnQoMCkKKyAgICAgICAg
LCBtX2FzeW5jUmVzdWx0KHJlc3VsdCkKKyAgICAgICAgLCBtX2NhbmNlbGxhYmxlKGNhbmNlbGxh
YmxlKQorICAgICAgICAsIG1fY2FuY2VsbGVkSWQoMCkKKyAgICB7CisgICAgICAgIGlmICghY2Fu
Y2VsbGFibGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9jYW5jZWxsZWRJZCA9
IGdfY2FuY2VsbGFibGVfY29ubmVjdChjYW5jZWxsYWJsZSwgR19DQUxMQkFDSyh3ZWJraXRJY29u
RGF0YWJhc2VHZXRJY29uUGl4YnVmQ2FuY2VsbGVkKSwgdGhpcywgMCk7CisgICAgICAgIGdfb2Jq
ZWN0X3NldF9kYXRhX2Z1bGwoR19PQkpFQ1QocmVzdWx0KSwgImNhbmNlbGxhYmxlIiwgZ19vYmpl
Y3RfcmVmKGNhbmNlbGxhYmxlKSwgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0
X3VucmVmKSk7CisgICAgfQorCisgICAgflBlbmRpbmdJY29uUmVxdWVzdCgpCisgICAgeworICAg
ICAgICBpZiAobV9jYW5jZWxsZWRJZCA+IDApCisgICAgICAgICAgICBnX2NhbmNlbGxhYmxlX2Rp
c2Nvbm5lY3QobV9jYW5jZWxsYWJsZS5nZXQoKSwgbV9jYW5jZWxsZWRJZCk7CisgICAgfQorCisg
ICAgY29uc3QgU3RyaW5nJiBwYWdlVVJJKCkgeyByZXR1cm4gbV9wYWdlVVJJOyB9CisgICAgV2Vi
Q29yZTo6RnJhbWVMb2FkZXJDbGllbnQqIGZyYW1lTG9hZGVyQ2xpZW50KCkgeyByZXR1cm4gbV9m
cmFtZUxvYWRlckNsaWVudDsgfQorICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogYXN5bmNSZXN1bHQo
KSB7IHJldHVybiBtX2FzeW5jUmVzdWx0LmdldCgpOyB9CisKKyAgICB2b2lkIGFzeW5jUmVzdWx0
Q29tcGxldGUoR2RrUGl4YnVmKiBpY29uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYXN5bmNS
ZXN1bHQpOworICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRl
cihtX2FzeW5jUmVzdWx0LmdldCgpLCBpY29uLCBpY29uID8gc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lO
b3RpZnk+KGdfb2JqZWN0X3VucmVmKSA6IDApOworICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1
bHRfY29tcGxldGUobV9hc3luY1Jlc3VsdC5nZXQoKSk7CisgICAgfQorCisgICAgdm9pZCBhc3lu
Y1Jlc3VsdENvbXBsZXRlSW5JZGxlKEdka1BpeGJ1ZiogaWNvbikKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX2FzeW5jUmVzdWx0KTsKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9v
cF9yZXNfZ3BvaW50ZXIobV9hc3luY1Jlc3VsdC5nZXQoKSwgaWNvbiwgaWNvbiA/IHN0YXRpY19j
YXN0PEdEZXN0cm95Tm90aWZ5PihnX29iamVjdF91bnJlZikgOiAwKTsKKyAgICAgICAgZ19zaW1w
bGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUobV9hc3luY1Jlc3VsdC5nZXQoKSk7Cisg
ICAgfQorCisgICAgdm9pZCBhc3luY1Jlc3VsdENhbmNlbCgpCisgICAgeworICAgICAgICBBU1NF
UlQobV9hc3luY1Jlc3VsdCk7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZXJy
b3IobV9hc3luY1Jlc3VsdC5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQs
ICIlcyIsICJPcGVyYXRpb24gd2FzIGNhbmNlbGxlZCIpOworICAgICAgICBnX3NpbXBsZV9hc3lu
Y19yZXN1bHRfY29tcGxldGUobV9hc3luY1Jlc3VsdC5nZXQoKSk7CisgICAgfQorCisgICAgdm9p
ZCBmcmFtZUxvYWRlckRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fZnJhbWVMb2FkZXJDbGllbnQpOworICAgICAgICBtX2ZyYW1lTG9hZGVyQ2xpZW50LT5k
aXNwYXRjaERpZFJlY2VpdmVJY29uKCk7CisgICAgfQorCisgICAgU3RyaW5nIG1fcGFnZVVSSTsK
KyAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudCogbV9mcmFtZUxvYWRlckNsaWVudDsKKyAg
ICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gbV9hc3luY1Jlc3VsdDsKKyAgICBHUmVmUHRy
PEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKKyAgICBndWxvbmcgbV9jYW5jZWxsZWRJZDsK
K307CisKKwogZW51bSB7CiAgICAgUFJPUF8wLAogCkBAIC03NywxMiArMTc1LDI3IEBAIGVudW0g
ewogCiBzdGF0aWMgZ3VpbnQgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2lnbmFsc1tMQVNUX1NJR05B
TF0gPSB7IDAsIH07CiAKLUdfREVGSU5FX1RZUEUoV2ViS2l0SWNvbkRhdGFiYXNlLCB3ZWJraXRf
aWNvbl9kYXRhYmFzZSwgR19UWVBFX09CSkVDVCk7CitHX0RFRklORV9UWVBFKFdlYktpdEljb25E
YXRhYmFzZSwgd2Via2l0X2ljb25fZGF0YWJhc2UsIEdfVFlQRV9PQkpFQ1QpCisKK3R5cGVkZWYg
VmVjdG9yPE93blB0cjxQZW5kaW5nSWNvblJlcXVlc3Q+ID4gUGVuZGluZ0ljb25SZXF1ZXN0VmVj
dG9yOwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiA+
IFBlbmRpbmdJY29uUmVxdWVzdE1hcDsKIAogc3RydWN0IF9XZWJLaXRJY29uRGF0YWJhc2VQcml2
YXRlIHsKICAgICBHT3duUHRyPGdjaGFyPiBwYXRoOworICAgIEljb25EYXRhYmFzZUNsaWVudEd0
ayBpY29uRGF0YWJhc2VDbGllbnQ7CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0TWFwIHBlbmRpbmdJ
Y29uUmVxdWVzdHM7CisgICAgYm9vbCBpbXBvcnRGaW5pc2hlZDsKIH07CiAKK3N0YXRpYyB2b2lk
IHdlYmtpdEljb25EYXRhYmFzZUljb25Mb2FkZWQoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSwgV2ViS2l0V2ViRnJhbWUqLCBjb25zdCBjaGFyKiBmcmFtZVVSSSkKK3sKKyAgICAvLyBSZXRh
aW4gdGhlIGljb24gd2hlbiBsb2FkZWQgdG8gbWFrZSBzdXJlIGl0J2xsIGJlIGF2YWlsYWJsZQor
ICAgIC8vIHdoZW4gcmVxdWVzdGVkIGxhdGVyIGJ5IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9p
Y29uX3BpeGJ1ZiooKS4KKyAgICAvLyBJY29uIHJlY29yZHMgYXJlIHJlZmNvdW50ZWQsIHNvIHdl
IGp1c3Qga2VlcCBvdXIgb3duIHJlZmVyZW5jZSB0byBtYWtlIHN1cmUKKyAgICAvLyB0aGUgaWNv
biByZWNvcmQgaXMgbm90IGRlbGV0ZWQuCisgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkucmV0
YWluSWNvbkZvclBhZ2VVUkwoU3RyaW5nOjpmcm9tVVRGOChmcmFtZVVSSSkpOworfQorCiBzdGF0
aWMgdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiB7
CiAgICAgLy8gQ2FsbCBDKysgZGVzdHJ1Y3RvcnMsIHRoZSByZXZlcnNlIG9mICdwbGFjZW1lbnQg
bmV3IHN5bnRheCcKQEAgLTE4MCw2ICsyOTMsOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfaWNvbl9k
YXRhYmFzZV9pbml0KFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpCiAgICAgZGF0YWJhc2Ut
PnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoZGF0YWJhc2UsIFdFQktJVF9UWVBF
X0lDT05fREFUQUJBU0UsIFdlYktpdEljb25EYXRhYmFzZVByaXZhdGUpOwogICAgIC8vICdwbGFj
ZW1lbnQgbmV3IHN5bnRheCcsIHNlZSB3ZWJraXR3ZWJ2aWV3LmNwcAogICAgIG5ldyAoZGF0YWJh
c2UtPnByaXYpIFdlYktpdEljb25EYXRhYmFzZVByaXZhdGUoKTsKKworICAgIC8vIENvbm5lY3Qg
dG8gb3VyIG93biBpY29uLWxvYWRlZCBzaWduYWwsIHNpbmNlIHRoZXJlIGFyZSBubyBtZW1iZXIg
Zm9yIGl0IGNsYXNzIHN0cnVjdC4KKyAgICBnX3NpZ25hbF9jb25uZWN0KGRhdGFiYXNlLCAiaWNv
bi1sb2FkZWQiLCBHX0NBTExCQUNLKHdlYmtpdEljb25EYXRhYmFzZUljb25Mb2FkZWQpLCAwKTsK
IH0KIAogLyoqCkBAIC0yMjUsMTYgKzM0MSwyMiBAQCB2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNl
X3NldF9wYXRoKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGdjaGFyKiBwYQog
ICAgIGlmIChkYXRhYmFzZS0+cHJpdi0+cGF0aC5nZXQoKSkKICAgICAgICAgV2ViQ29yZTo6aWNv
bkRhdGFiYXNlKCkuY2xvc2UoKTsKIAorICAgIGRhdGFiYXNlLT5wcml2LT5pbXBvcnRGaW5pc2hl
ZCA9IGZhbHNlOwogICAgIGlmICghKHBhdGggJiYgcGF0aFswXSkpIHsKICAgICAgICAgZGF0YWJh
c2UtPnByaXYtPnBhdGguc2V0KDApOwogICAgICAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5z
ZXRFbmFibGVkKGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGRhdGFiYXNl
LT5wcml2LT5wYXRoLnNldChnX3N0cmR1cChwYXRoKSk7Ci0KKyAgICBXZWJDb3JlOjppY29uRGF0
YWJhc2UoKS5zZXRDbGllbnQoJmRhdGFiYXNlLT5wcml2LT5pY29uRGF0YWJhc2VDbGllbnQpOwor
ICAgIFdlYkNvcmU6Okljb25EYXRhYmFzZTo6ZGVsYXlEYXRhYmFzZUNsZWFudXAoKTsKICAgICBX
ZWJDb3JlOjppY29uRGF0YWJhc2UoKS5zZXRFbmFibGVkKHRydWUpOwotICAgIFdlYkNvcmU6Omlj
b25EYXRhYmFzZSgpLm9wZW4oV2ViQ29yZTo6ZmlsZW5hbWVUb1N0cmluZyhkYXRhYmFzZS0+cHJp
di0+cGF0aC5nZXQoKSksIFdlYkNvcmU6Okljb25EYXRhYmFzZTo6ZGVmYXVsdERhdGFiYXNlRmls
ZW5hbWUoKSk7CisgICAgaWYgKCFXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5vcGVuKFdlYkNvcmU6
OmZpbGVuYW1lVG9TdHJpbmcocGF0aCksIFdlYkNvcmU6Okljb25EYXRhYmFzZTo6ZGVmYXVsdERh
dGFiYXNlRmlsZW5hbWUoKSkpIHsKKyAgICAgICAgV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjphbGxv
d0RhdGFiYXNlQ2xlYW51cCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGF0YWJh
c2UtPnByaXYtPnBhdGguc2V0KGdfc3RyZHVwKHBhdGgpKTsKIAogICAgIHN0YXRpYyBib29sIGlu
aXRpYWxpemVkID0gZmFsc2U7CiAgICAgaWYgKCFpbml0aWFsaXplZCkgewpAQCAtMjY0LDIyICsz
ODYsMzIgQEAgZ2NoYXIqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3VyaShXZWJLaXRJ
Y29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBnY2gKICAgICByZXR1cm4gZ19zdHJkdXAoV2Vi
Q29yZTo6aWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChwYWdlVVJM
KS51dGY4KCkuZGF0YSgpKTsKIH0KIAorc3RhdGljIEdka1BpeGJ1ZiogZ2V0SWNvblBpeGJ1ZlN5
bmNocm9ub3VzbHkoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBw
YWdlVVJMKQoreworICAgIC8vIFRoZSBleGFjdCBzaXplIHdlIHBhc3MgaXMgaXJyZWxldmFudCB0
byB0aGUgV2ViQ29yZTo6aWNvbkRhdGFiYXNlIGNvZGUuCisgICAgLy8gV2UgbXVzdCBwYXNzIHNv
bWV0aGluZyBncmVhdGVyIHRoYW4gMCwgMCB0byBnZXQgYSBwaXhidWYuCisgICAgV2ViQ29yZTo6
SW1hZ2UqIGljb24gPSBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25Gb3JQ
YWdlVVJMKHBhZ2VVUkwsIFdlYkNvcmU6OkludFNpemUoMTYsIDE2KSk7CisgICAgcmV0dXJuIGlj
b24gPyBpY29uLT5nZXRHZGtQaXhidWYoKSA6IDA7Cit9CisKIC8qKgogICogd2Via2l0X2ljb25f
ZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmOgogICogQGRhdGFiYXNlOiBhICNXZWJLaXRJY29uRGF0
YWJhc2UKICAqIEBwYWdlX3VyaTogVVJJIG9mIHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIGljb24K
ICAqCi0gKiBPYnRhaW5zIGEgI0dka1BpeGJ1ZiBvZiB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVu
IHBhZ2UgVVJJLCBvcgotICogYSBkZWZhdWx0IGljb24gaWYgdGhlcmUgaXMgbm8gaWNvbiBmb3Ig
dGhlIGdpdmVuIHBhZ2UuIFVzZQorICogT2J0YWlucyBhICNHZGtQaXhidWYgb2YgdGhlIGZhdmlj
b24gZm9yIHRoZSBnaXZlbiBwYWdlIFVSSSwgb3IgJU5VTEwKKyAqIGlmIHRoZXJlIGlzIG5vIGlj
b24gZm9yIHRoZSBnaXZlbiBwYWdlIG9yIGl0IGhhc24ndCBiZWVuIGxvYWRlZCB5ZXQuIFVzZQog
ICogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpKCkgaWYgeW91IG5lZWQgdG8gZGlz
dGluZ3Vpc2ggdGhlc2UgY2FzZXMuCi0gKiBVc3VhbGx5IHlvdSB3YW50IHRvIGNvbm5lY3QgdG8g
V2ViS2l0SWNvbkRhdGFiYXNlOjppY29uLWxvYWRlZCBhbmQgY2FsbCB0aGlzCi0gKiBtZXRob2Qg
aW4gdGhlIGNhbGxiYWNrLgorICogVG8gbWFrZSBzdXJlIHRoaXMgbWV0aG9kIHJldHVybiB3aWxs
IHJldHVybiBhIHZhbGlkIGljb24sIHdoZW4gdGhlIGdpdmVuIFVSSQorICogaGFzIG9uZSwgeW91
IHNob3VsZCBjb25uZWN0IHRvIFdlYktpdEljb25EYXRhYmFzZTo6aWNvbi1sb2FkZWQgYW5kIGNh
bGwgdGhpcworICogbWV0aG9kIGluIHRoZSBjYWxsYmFjay4gU2VlIGFsc28gd2Via2l0X2ljb25f
ZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2FzeW5jKCkuCiAgKgogICogVGhlIHBpeGJ1ZiB3aWxs
IGhhdmUgdGhlIGxhcmdlc3Qgc2l6ZSBwcm92aWRlZCBieSB0aGUgc2VydmVyIGFuZCBzaG91bGQK
ICAqIGJlIHJlc2l6ZWQgYmVmb3JlIGl0IGlzIGRpc3BsYXllZC4KICAqIFNlZSBhbHNvIHdlYmtp
dF93ZWJfdmlld19nZXRfaWNvbl9waXhidWYoKS4KICAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIg
ZnVsbCk6IGEgbmV3IHJlZmVyZW5jZSB0byBhICNHZGtQaXhidWYsIG9yICVOVUxMCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IHJlZmVyZW5jZSB0byBhICNHZGtQaXhidWYsIG9y
ICVOVUxMIGlmIHRoZSBnaXZlbgorICogVVJJIGRvZXNuJ3QgaGF2ZSBhbiBpY29uIG9yIGl0IGhh
c24ndCBiZWVuIGxvYWRlZCB5ZXQuCiAgKgogICogU2luY2U6IDEuMy4xMwogICoqLwpAQCAtMjg4
LDE2ICs0MjAsMTg2IEBAIEdka1BpeGJ1Ziogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25f
cGl4YnVmKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvCiAgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpLCAwKTsKICAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChwYWdlVVJJLCAwKTsKIAotICAgIFN0cmluZyBwYWdlVVJMID0gU3Ry
aW5nOjpmcm9tVVRGOChwYWdlVVJJKTsKLSAgICAvLyBUaGUgZXhhY3Qgc2l6ZSB3ZSBwYXNzIGlz
IGlycmVsZXZhbnQgdG8gdGhlIFdlYkNvcmU6Omljb25EYXRhYmFzZSBjb2RlLgotICAgIC8vIFdl
IG11c3QgcGFzcyBzb21ldGhpbmcgZ3JlYXRlciB0aGFuIDAsIDAgdG8gZ2V0IGEgcGl4YnVmLgot
ICAgIFdlYkNvcmU6OkltYWdlKiBpY29uID0gV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc3luY2hy
b25vdXNJY29uRm9yUGFnZVVSTChwYWdlVVJMLCBXZWJDb3JlOjpJbnRTaXplKDE2LCAxNikpOwot
ICAgIGlmICghaWNvbikKKyAgICByZXR1cm4gZ2V0SWNvblBpeGJ1ZlN5bmNocm9ub3VzbHkoZGF0
YWJhc2UsIFN0cmluZzo6ZnJvbVVURjgocGFnZVVSSSkpOworfQorCitzdGF0aWMgUGVuZGluZ0lj
b25SZXF1ZXN0VmVjdG9yKiB3ZWJraXRJY29uRGF0YWJhc2VHZXRPckNyZWF0ZVJlcXVlc3RzKFdl
YktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCkKK3sKKyAg
ICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gZGF0YWJhc2UtPnByaXYtPnBlbmRp
bmdJY29uUmVxdWVzdHMuZ2V0KHBhZ2VVUkwpOworICAgIGlmICghaWNvbnMpIHsKKyAgICAgICAg
aWNvbnMgPSBuZXcgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yOworICAgICAgICBkYXRhYmFzZS0+
cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5zZXQocGFnZVVSTCwgaWNvbnMpOworICAgIH0KKwor
ICAgIHJldHVybiBpY29uczsKK30KKworc3RhdGljIHZvaWQgd2Via2l0SWNvbkRhdGFiYXNlRGVs
ZXRlUmVxdWVzdHMoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgUGVuZGluZ0ljb25SZXF1
ZXN0VmVjdG9yKiByZXF1ZXN0cywgY29uc3QgU3RyaW5nJiBwYWdlVVJMKQoreworICAgIGRhdGFi
YXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLnJlbW92ZShwYWdlVVJMKTsKKyAgICBkZWxl
dGUgcmVxdWVzdHM7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBnZXRJY29uUGl4YnVmQ2FuY2VsbGVk
SWRsZShncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBQZW5kaW5nSWNvblJlcXVlc3QqIHJlcXVl
c3QgPSBzdGF0aWNfY2FzdDxQZW5kaW5nSWNvblJlcXVlc3QqPih1c2VyRGF0YSk7CisgICAgcmVx
dWVzdC0+YXN5bmNSZXN1bHRDYW5jZWwoKTsKKworICAgIGNvbnN0IFN0cmluZyYgcGFnZVVSTCA9
IHJlcXVlc3QtPnBhZ2VVUkkoKTsKKyAgICBXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlID0g
d2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCk7CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9y
KiBpY29ucyA9IGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmdldChwYWdlVVJM
KTsKKyAgICBpZiAoIWljb25zKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBzaXplX3Qg
aXRlbUluZGV4ID0gaWNvbnMtPmZpbmQocmVxdWVzdCk7CisgICAgaWYgKGl0ZW1JbmRleCAhPSBu
b3RGb3VuZCkKKyAgICAgICAgaWNvbnMtPnJlbW92ZShpdGVtSW5kZXgpOworICAgIGlmIChpY29u
cy0+aXNFbXB0eSgpKQorICAgICAgICB3ZWJraXRJY29uRGF0YWJhc2VEZWxldGVSZXF1ZXN0cyhk
YXRhYmFzZSwgaWNvbnMsIHBhZ2VVUkwpOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRJY29uRGF0YWJhc2VHZXRJY29uUGl4YnVmQ2FuY2VsbGVkKEdDYW5jZWxs
YWJsZSogY2FuY2VsbGFibGUsIFBlbmRpbmdJY29uUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICAv
LyBIYW5kbGUgY2FuY2VsbGVkIGluIGEgaW4gaWRsZSBzaW5jZSBpdCBtaWdodCBiZSBjYWxsZWQg
ZnJvbSBhbnkgdGhyZWFkLgorICAgIGdfaWRsZV9hZGQoZ2V0SWNvblBpeGJ1ZkNhbmNlbGxlZElk
bGUsIHJlcXVlc3QpOworfQorCisvKioKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29u
X3BpeGJ1Zl9hc3luYzoKKyAqIEBkYXRhYmFzZTogYSAjV2ViS2l0SWNvbkRhdGFiYXNlCisgKiBA
cGFnZV91cmk6IFVSSSBvZiB0aGUgcGFnZSBjb250YWluaW5nIHRoZSBpY29uCisgKiBAY2FuY2Vs
bGFibGU6IEEgI0dDYW5jZWxsYWJsZSBvciAlTlVMTC4KKyAqIEBjYWxsYmFjazogKGFsbG93LW5v
bmUpOiBBICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgcmVxdWVzdCBpcwor
ICogICAgICAgICAgICBzYXRpc2ZpZWQgb3IgJU5VTEwgaWYgeW91IGRvbid0IGNhcmUgYWJvdXQg
dGhlIHJlc3VsdC4KKyAqIEB1c2VyX2RhdGE6IFRoZSBkYXRhIHRvIHBhc3MgdG8gQGNhbGxiYWNr
LgorICoKKyAqIEFzeW5jaHJvbm91c2x5IG9idGFpbnMgYSAjR2RrUGl4YnVmIG9mIHRoZSBmYXZp
Y29uIGZvciB0aGUgZ2l2ZW4gcGFnZSBVUkkuCisgKgorICogVGhpcyBpcyBhbiBhc3luY2hyb25v
dXMgbWV0aG9kLiBXaGVuIHRoZSBvcGVyYXRpb24gaXMgZmluaXNoZWQsIGNhbGxiYWNrIHdpbGwK
KyAqIGJlIGludm9rZWQuIFlvdSBjYW4gdGhlbiBjYWxsIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dl
dF9pY29uX3BpeGJ1Zl9maW5pc2goKQorICogdG8gZ2V0IHRoZSByZXN1bHQgb2YgdGhlIG9wZXJh
dGlvbi4KKyAqIFNlZSBhbHNvIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zigp
LgorICoKKyAqIFNpbmNlOiAxLjUuMworICoqLwordm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9n
ZXRfaWNvbl9waXhidWZfYXN5bmMoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3Qg
Z2NoYXIqIHBhZ2VVUkksIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2Fs
bGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHBhZ2VVUkkpOworCisgICAgR1JlZlB0cjxHU2ltcGxlQXN5bmNSZXN1bHQ+IHJlc3VsdCA9
IGFkb3B0R1JlZihnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3KEdfT0JKRUNUKGRhdGFiYXNlKSwg
Y2FsbGJhY2ssIHVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0
PGdwb2ludGVyPih3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmMpKSk7
CisKKyAgICBTdHJpbmcgcGFnZVVSTChTdHJpbmc6OmZyb21VVEY4KHBhZ2VVUkkpKTsKKyAgICBQ
ZW5kaW5nSWNvblJlcXVlc3QqIHJlcXVlc3QgPSBuZXcgUGVuZGluZ0ljb25SZXF1ZXN0KHBhZ2VV
UkwsIHJlc3VsdC5nZXQoKSwgY2FuY2VsbGFibGUpOworCisgICAgLy8gUmVnaXN0ZXIgaWNvbiBy
ZXF1ZXN0IGJlZm9yZSBhc2tpbmcgZm9yIHRoZSBpY29uIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9u
cy4KKyAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gd2Via2l0SWNvbkRhdGFi
YXNlR2V0T3JDcmVhdGVSZXF1ZXN0cyhkYXRhYmFzZSwgcGFnZVVSTCk7CisgICAgQVNTRVJUKGlj
b25zKTsKKyAgICBpY29ucy0+YXBwZW5kKGFkb3B0UHRyKHJlcXVlc3QpKTsKKworICAgIEdka1Bp
eGJ1ZiogcGl4YnVmID0gZ2V0SWNvblBpeGJ1ZlN5bmNocm9ub3VzbHkoZGF0YWJhc2UsIHBhZ2VV
UkwpOworICAgIGlmICghcGl4YnVmICYmICFkYXRhYmFzZS0+cHJpdi0+aW1wb3J0RmluaXNoZWQp
IHsKKyAgICAgICAgLy8gSW1wb3J0IGlzIG9uZ29pbmcsIHRoZXJlIG1pZ2h0IGJlIGFuIGljb24u
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByZXF1ZXN0LT5hc3luY1Jlc3VsdENvbXBs
ZXRlSW5JZGxlKHBpeGJ1Zik7CisKKyAgICBBU1NFUlQoaWNvbnMtPmxhc3QoKS5nZXQoKSA9PSBy
ZXF1ZXN0KTsKKyAgICBpY29ucy0+cmVtb3ZlTGFzdCgpOworICAgIGlmIChpY29ucy0+aXNFbXB0
eSgpKQorICAgICAgICB3ZWJraXRJY29uRGF0YWJhc2VEZWxldGVSZXF1ZXN0cyhkYXRhYmFzZSwg
aWNvbnMsIHBhZ2VVUkwpOworfQorCisvKioKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9p
Y29uX3BpeGJ1Zl9maW5pc2g6CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQor
ICogQHJlc3VsdDogQSAjR0FzeW5jUmVzdWx0IG9idGFpbmVkIGZyb20gdGhlICNHQXN5bmNSZWFk
eUNhbGxiYWNrIHBhc3NlZCB0byB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZf
YXN5bmMoKQorICogQGVycm9yOiBSZXR1cm4gbG9jYXRpb24gZm9yIGVycm9yIG9yICVOVUxMLgor
ICoKKyAqIEZpbmlzaGVzIGFuIG9wZXJhdGlvbiBzdGFydGVkIHdpdGggd2Via2l0X2ljb25fZGF0
YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2FzeW5jKCkuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVy
IGZ1bGwpOiBhIG5ldyByZWZlcmVuY2UgdG8gYSAjR2RrUGl4YnVmLCBvciAlTlVMTC4KKyAqCisg
KiBTaW5jZTogMS41LjMKKyAqLworR2RrUGl4YnVmKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRf
aWNvbl9waXhidWZfZmluaXNoKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIEdBc3luY1Jl
c3VsdCogcmVzdWx0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBHU2ltcGxlQXN5bmNSZXN1bHQq
IHNpbXBsZVJlc3VsdCA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVChyZXN1bHQpOworICAgIGdfd2Fy
bl9pZl9mYWlsKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfc291cmNlX3RhZyhzaW1wbGVSZXN1
bHQpID09IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYyk7CisKKyAg
ICBpZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Byb3BhZ2F0ZV9lcnJvcihzaW1wbGVSZXN1bHQs
IGVycm9yKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgR2RrUGl4YnVmKiBwaXhidWYgPSBpY29u
LT5nZXRHZGtQaXhidWYoKTsKLSAgICBpZiAoIXBpeGJ1ZikKKworICAgIEdDYW5jZWxsYWJsZSog
Y2FuY2VsbGFibGUgPSBzdGF0aWNfY2FzdDxHQ2FuY2VsbGFibGUqPihnX29iamVjdF9nZXRfZGF0
YShHX09CSkVDVChzaW1wbGVSZXN1bHQpLCAiY2FuY2VsbGFibGUiKSk7CisgICAgaWYgKGNhbmNl
bGxhYmxlICYmIGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGNhbmNlbGxhYmxlKSkgeworICAg
ICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NB
TkNFTExFRCwgIk9wZXJhdGlvbiB3YXMgY2FuY2VsbGVkIik7CiAgICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHZGtQaXhidWYqPihnX29iamVjdF9yZWYocGl4YnVmKSk7
CisgICAgfQorCisgICAgR2RrUGl4YnVmKiBpY29uID0gc3RhdGljX2Nhc3Q8R2RrUGl4YnVmKj4o
Z19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIoc2ltcGxlUmVzdWx0KSk7
CisgICAgcmV0dXJuIGljb24gPyBzdGF0aWNfY2FzdDxHZGtQaXhidWYqPihnX29iamVjdF9yZWYo
aWNvbikpIDogMDsKK30KKwordm9pZCB3ZWJraXRJY29uRGF0YWJhc2VSZWdpc3RlckZvckljb25O
b3RpZmljYXRpb24oV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBh
Z2VVUkksIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgU3RyaW5n
IHBhZ2VVUkwoU3RyaW5nOjpmcm9tVVRGOChwYWdlVVJJKSk7CisgICAgUGVuZGluZ0ljb25SZXF1
ZXN0VmVjdG9yKiBpY29ucyA9IHdlYmtpdEljb25EYXRhYmFzZUdldE9yQ3JlYXRlUmVxdWVzdHMo
ZGF0YWJhc2UsIHBhZ2VVUkwpOworICAgIEFTU0VSVChpY29ucyk7CisgICAgaWNvbnMtPmFwcGVu
ZChhZG9wdFB0cihuZXcgUGVuZGluZ0ljb25SZXF1ZXN0KHBhZ2VVUkwsIGNsaWVudCkpKTsKK30K
Kwordm9pZCB3ZWJraXRJY29uRGF0YWJhc2VVbnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihX
ZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBnY2hhciogcGFnZVVSSSwgV2ViQ29y
ZTo6RnJhbWVMb2FkZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICBTdHJpbmcgcGFnZVVSTChTdHJp
bmc6OmZyb21VVEY4KHBhZ2VVUkkpKTsKKyAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGlj
b25zID0gZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMuZ2V0KHBhZ2VVUkwpOwor
ICAgIGlmICghaWNvbnMpCisgICAgICAgIHJldHVybjsKKyAgICB3ZWJraXRJY29uRGF0YWJhc2VE
ZWxldGVSZXF1ZXN0cyhkYXRhYmFzZSwgaWNvbnMsIHBhZ2VVUkwpOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRJY29uRGF0YWJhc2VQcm9jZXNzUGVuZGluZ0ljb25zRm9yVVJJKFdlYktpdEljb25E
YXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCkKK3sKKyAgICBQZW5kaW5n
SWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVx
dWVzdHMuZ2V0KHBhZ2VVUkwpOworICAgIGlmICghaWNvbnMpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWNvbnMtPnNpemUoKTsgKytpKSB7CisgICAgICAg
IFBlbmRpbmdJY29uUmVxdWVzdCogcmVxdWVzdCA9IGljb25zLT5hdChpKS5nZXQoKTsKKyAgICAg
ICAgaWYgKHJlcXVlc3QtPmZyYW1lTG9hZGVyQ2xpZW50KCkpCisgICAgICAgICAgICByZXF1ZXN0
LT5mcmFtZUxvYWRlckRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKTsKKyAgICAgICAgZWxzZSBpZiAo
cmVxdWVzdC0+YXN5bmNSZXN1bHQoKSkKKyAgICAgICAgICAgIHJlcXVlc3QtPmFzeW5jUmVzdWx0
Q29tcGxldGUoZ2V0SWNvblBpeGJ1ZlN5bmNocm9ub3VzbHkoZGF0YWJhc2UsIHBhZ2VVUkwpKTsK
KyAgICB9CisgICAgd2Via2l0SWNvbkRhdGFiYXNlRGVsZXRlUmVxdWVzdHMoZGF0YWJhc2UsIGlj
b25zLCBwYWdlVVJMKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0SWNvbkRhdGFiYXNlSW1wb3J0
RmluaXNoZWQoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBkYXRhYmFzZS0+
cHJpdi0+aW1wb3J0RmluaXNoZWQgPSB0cnVlOworCisgICAgLy8gSW1wb3J0IGlzIGNvbXBsZXRl
LCBwcm9jZXNzIHBlbmRpbmcgcmVxdWVzdHMgZm9yIHBhZ2VzIHRoYXQgYXJlIG5vdCBpbiB0aGUg
ZGF0YWJhc2UsCisgICAgLy8gc2luY2UgZGlkSW1wb3J0SWNvbkRhdGFGb3JQYWdlVVJMKCkgd2ls
bCBuZXZlciBiZSBjYWxsZWQgZm9yIHRoZW0uCisgICAgLy8gRm9yIGFzeW5jIHJlcXVlc3RzIHdl
IG5lZWQgdG8gY29tcGxldGUgdGhlIG9wZXJhdGlvbiwgd2hpbGUgZm9yIGZyYW1lIGxvYWRlcgor
ICAgIC8vIHJlcXVlc3RzIHdlIG9ubHkgbmVlZCB0byBkZWxldGUgdGhlIHJlcXVlc3Qgc28gdGhh
dCBpY29uLWxvYWRlZCB3b24ndCBiZSBlbWl0dGVkLgorICAgIFBlbmRpbmdJY29uUmVxdWVzdE1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVz
dHMuZW5kKCk7CisgICAgZm9yIChQZW5kaW5nSWNvblJlcXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5iZWdpbigpOyBpdGVy
ICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIFN0cmluZyBpY29uVVJMID0gV2ViQ29yZTo6aWNv
bkRhdGFiYXNlKCkuc3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChpdGVyLT5maXJzdCk7Cisg
ICAgICAgIGlmICghaWNvblVSTC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gaXRlci0+c2Vjb25kOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGljb25zLT5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgUGVuZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0ID0gaWNvbnMtPmF0KGkpLmdldCgp
OworICAgICAgICAgICAgaWYgKHJlcXVlc3QtPmFzeW5jUmVzdWx0KCkpCisgICAgICAgICAgICAg
ICAgcmVxdWVzdC0+YXN5bmNSZXN1bHRDb21wbGV0ZSgwKTsKKyAgICAgICAgfQorCisgICAgICAg
IHdlYmtpdEljb25EYXRhYmFzZURlbGV0ZVJlcXVlc3RzKGRhdGFiYXNlLCBpY29ucywgaXRlci0+
Zmlyc3QpOworICAgIH0KIH0KIAogLyoqCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0aWNvbmRhdGFiYXNlLmgKaW5kZXggNWVhZDYwMy4uNWJjZDIzNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuaApAQCAtNTMsMjUgKzUzLDM3IEBA
IHN0cnVjdCBfV2ViS2l0SWNvbkRhdGFiYXNlQ2xhc3MgewogfTsKIAogV0VCS0lUX0FQSSBHVHlw
ZQotd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3R5cGUgICAgICAgICAgICAodm9pZCk7Cit3ZWJr
aXRfaWNvbl9kYXRhYmFzZV9nZXRfdHlwZSAgICAgICAgICAgICAgKHZvaWQpOwogCiBXRUJLSVRf
QVBJIGNvbnN0IGdjaGFyKgotd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3BhdGggICAgICAgICAg
ICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSk7Cit3ZWJraXRfaWNvbl9kYXRhYmFzZV9n
ZXRfcGF0aCAgICAgICAgICAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpOwogCiBX
RUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoICAgICAgICAgICAg
KFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhdGgpOword2Via2l0X2ljb25f
ZGF0YWJhc2Vfc2V0X3BhdGggICAgICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFi
YXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn
Y2hhciogICAgICAgIHBhdGgpOwogCiBXRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2ljb25fZGF0
YWJhc2VfZ2V0X2ljb25fdXJpICAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiAg
ICAgICAgcGFnZV91cmkpOword2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpICAgICAg
ICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhZ2VfdXJpKTsKIAog
V0VCS0lUX0FQSSBHZGtQaXhidWYqCi13ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhi
dWYgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAgICBwYWdlX3VyaSk7Cit3
ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYgICAgICAgKFdlYktpdEljb25EYXRh
YmFzZSogZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdjaGFyKiAgICAgICAgcGFnZV91cmkpOwogCiBXRUJLSVRfQVBJIHZvaWQKLXdl
YmtpdF9pY29uX2RhdGFiYXNlX2NsZWFyICAgICAgICAgICAgICAgKFdlYktpdEljb25EYXRhYmFz
ZSogZGF0YWJhc2UpOword2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2FzeW5j
IChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhZ2VfdXJpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUqICAgICAg
IGNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dF
QktJVF9BUEkgR2RrUGl4YnVmKgord2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVm
X2ZpbmlzaChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQqICAgICAgIHJlc3VsdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yKiogICAgICAg
ICAgICBlcnJvcik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2ljb25fZGF0YWJhc2VfY2xl
YXIgICAgICAgICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKTsKIAogR19F
TkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGlj
b25kYXRhYmFzZXByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29u
ZGF0YWJhc2Vwcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRi
NDMxOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRp
Y29uZGF0YWJhc2Vwcml2YXRlLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIHdlYmtpdGljb25kYXRhYmFzZXByaXZhdGVfaAor
I2RlZmluZSB3ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlX2gKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgRnJhbWVMb2FkZXJDbGllbnQ7Cit9CisKK2V4dGVybiAiQyIgewordm9pZCB3ZWJr
aXRJY29uRGF0YWJhc2VSZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oV2ViS2l0SWNvbkRhdGFi
YXNlKiwgY29uc3QgZ2NoYXIqIHBhZ2VVUkksIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50Kik7
Cit2b2lkIHdlYmtpdEljb25EYXRhYmFzZVVucmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKFdl
YktpdEljb25EYXRhYmFzZSosIGNvbnN0IGdjaGFyKiBwYWdlVVJJLCBXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudCopOworfQorCisjZW5kaWYgLy8gd2Via2l0aWNvbmRhdGFiYXNlcHJpdmF0ZV9o
CmRpZmYgLS1naXQgYS9Ub29scy9HdGtMYXVuY2hlci9tYWluLmMgYi9Ub29scy9HdGtMYXVuY2hl
ci9tYWluLmMKaW5kZXggODkxNmNjOS4uNjBlNmU1MSAxMDA2NDQKLS0tIGEvVG9vbHMvR3RrTGF1
bmNoZXIvbWFpbi5jCisrKyBiL1Rvb2xzL0d0a0xhdW5jaGVyL21haW4uYwpAQCAtNDAsNiArNDAs
NyBAQCBzdGF0aWMgdm9pZCBhY3RpdmF0ZVVyaUVudHJ5Q2IoR3RrV2lkZ2V0KiBlbnRyeSwgZ3Bv
aW50ZXIgZGF0YSkKICAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3ID0gZ19vYmplY3RfZ2V0X2Rh
dGEoR19PQkpFQ1QoZW50cnkpLCAid2ViLXZpZXciKTsKICAgICBjb25zdCBnY2hhciogdXJpID0g
Z3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShlbnRyeSkpOwogICAgIGdfYXNzZXJ0KHVyaSk7
CisgICAgZ3RrX2VudHJ5X3NldF9pY29uX2Zyb21fcGl4YnVmKEdUS19FTlRSWShlbnRyeSksIEdU
S19FTlRSWV9JQ09OX1BSSU1BUlksIDApOwogICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh3
ZWJWaWV3LCB1cmkpOwogfQogCkBAIC0xMjUsNiArMTI2LDE0IEBAIHN0YXRpYyBnYm9vbGVhbiBj
bG9zZVdlYlZpZXdDYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHdGtXaWRnZXQqIHdpbmRvdykK
ICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKICAgICByZXR1cm4gVFJVRTsKIH0KKwor
c3RhdGljIHZvaWQgaWNvbkxvYWRlZENiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNo
YXIqIGljb25VUkksIEd0a1dpZGdldCogdXJpRW50cnkpCit7CisgICAgR2RrUGl4YnVmICppY29u
ID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmKHdlYmtpdF9nZXRfaWNvbl9k
YXRhYmFzZSgpLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3KSk7CisgICAgZ3RrX2Vu
dHJ5X3NldF9pY29uX2Zyb21fcGl4YnVmKEdUS19FTlRSWSh1cmlFbnRyeSksIEdUS19FTlRSWV9J
Q09OX1BSSU1BUlksIGljb24pOworICAgIGlmIChpY29uKQorICAgICAgICBnX29iamVjdF91bnJl
ZihpY29uKTsKK30KICNlbmRpZgogCiBzdGF0aWMgR3RrV2lkZ2V0KiBjcmVhdGVCcm93c2VyKEd0
a1dpZGdldCogd2luZG93LCBHdGtXaWRnZXQqIHVyaUVudHJ5LCBHdGtXaWRnZXQqIHN0YXR1c2Jh
ciwgV2ViS2l0V2ViVmlldyogd2ViVmlldykKQEAgLTEzOCw2ICsxNDcsNyBAQCBzdGF0aWMgR3Rr
V2lkZ2V0KiBjcmVhdGVCcm93c2VyKEd0a1dpZGdldCogd2luZG93LCBHdGtXaWRnZXQqIHVyaUVu
dHJ5LCBHdGtXaWRnZQogICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgIm5vdGlmeTo6dGl0
bGUiLCBHX0NBTExCQUNLKG5vdGlmeVRpdGxlQ2IpLCB3aW5kb3cpOwogICAgIGdfc2lnbmFsX2Nv
bm5lY3Qod2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKG5vdGlmeUxv
YWRTdGF0dXNDYiksIHVyaUVudHJ5KTsKICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJu
b3RpZnk6OnByb2dyZXNzIiwgR19DQUxMQkFDSyhub3RpZnlQcm9ncmVzc0NiKSwgd2luZG93KTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJpY29uLWxvYWRlZCIsIEdfQ0FMTEJBQ0so
aWNvbkxvYWRlZENiKSwgdXJpRW50cnkpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywg
ImhvdmVyaW5nLW92ZXItbGluayIsIEdfQ0FMTEJBQ0sobGlua0hvdmVyQ2IpLCBzdGF0dXNiYXIp
OwogICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgImNyZWF0ZS13ZWItdmlldyIsIEdfQ0FM
TEJBQ0soY3JlYXRlV2ViVmlld0NiKSwgd2luZG93KTsKICAgICBnX3NpZ25hbF9jb25uZWN0KHdl
YlZpZXcsICJ3ZWItdmlldy1yZWFkeSIsIEdfQ0FMTEJBQ0sod2ViVmlld1JlYWR5Q2IpLCB3aW5k
b3cpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127433</attachid>
            <date>2012-02-16 13:01:25 -0800</date>
            <delta_ts>2012-02-17 00:46:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56200-20120216220123.patch</filename>
            <type>text/plain</type>
            <size>41619</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3OTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggMzE0MDgzMjdm
NmMwZTA1ZGM1N2YwMDkzYzhjNDYzZjJiMWMyYzFlNy4uMTBmZGNlNThlMzQ4YzE3MzAxNWQ2MGYy
YTk1YWE1YjFkZGRmYTYxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDEx
LTA5LTAyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4gYW5kIFNl
cmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10g
V2ViS2l0SWNvbkRhdGFiYXNlIGRvZXNuJ3Qga2VlcCBpY29ucyBjYWNoZWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MjAwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRk
IG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50
OjpyZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24pOiBXaGVuIHRoZQorICAgICAgICBpY29uIGlz
IGluIHRoZSBkYXRhYmFzZSwgYnV0IHRoZSBkYXRhIGlzIG5vdCBzdGlsbCBhdmFpbGFibGUsCisg
ICAgICAgIHJlZ2lzdGVyIGEgbm90aWZpY2F0aW9uIHRvIGRpc3BhdGNoIHJlY2VpdmVkIGljb24g
d2hlbiB0aGUgaWNvbgorICAgICAgICBkYXRhIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgKiB0ZXN0
cy90ZXN0aWNvbmRhdGFiYXNlLmM6IEFkZGVkLgorICAgICAgICAoc2VydmVyX2NhbGxiYWNrKToK
KyAgICAgICAgKGRlbGV0ZURhdGFiYXNlRmlsZUlmRXhpc3RzKToKKyAgICAgICAgKHRlc3RXZWJr
aXRJY29uRGF0YWJhc2VTZXRQYXRoKToKKyAgICAgICAgKGljb25EYXRhYmFzZUdldEljb25WYWxp
ZENhbGxiYWNrKToKKyAgICAgICAgKGljb25EYXRhYmFzZUdldEljb25JbnZhbGlkQ2FsbGJhY2sp
OgorICAgICAgICAoaWNvbkRhdGFiYXNlR2V0SWNvbkNhbmNlbGxlZENhbGxiYWNrKToKKyAgICAg
ICAgKGlkbGVRdWl0TG9vcENhbGxiYWNrKToKKyAgICAgICAgKGxvYWRVUkkpOgorICAgICAgICAo
aWNvbkRhdGFiYXNlR2V0SWNvblZhbGlkSWRsZSk6CisgICAgICAgIChpY29uRGF0YWJhc2VHZXRJ
Y29uSW52YWxpZElkbGUpOgorICAgICAgICAoaWNvbkRhdGFiYXNlR2V0SWNvbkNhbmNlbGxlZElk
bGUpOgorICAgICAgICAodGVzdFdlYmtpdEljb25EYXRhYmFzZUdldEljb25Bc3luYyk6CisgICAg
ICAgICh0ZXN0V2Via2l0SWNvbkRhdGFiYXNlR2V0SWNvblVSSSk6CisgICAgICAgICh0ZXN0V2Vi
a2l0SWNvbkRhdGFiYXNlUmVtb3ZlQWxsKToKKyAgICAgICAgKHRlc3RXZWJraXRJY29uRGF0YWJh
c2VDbG9zZURhdGFiYXNlKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIHdlYmtpdC93ZWJr
aXRpY29uZGF0YWJhc2UuY3BwOgorICAgICAgICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpwZXJm
b3JtSW1wb3J0KToKKyAgICAgICAgKEljb25EYXRhYmFzZUNsaWVudEd0azo6ZGlkUmVtb3ZlQWxs
SWNvbnMpOgorICAgICAgICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpkaWRJbXBvcnRJY29uVVJM
Rm9yUGFnZVVSTCk6CisgICAgICAgIChJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpZEltcG9ydElj
b25EYXRhRm9yUGFnZVVSTCk6CisgICAgICAgIChJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpZENo
YW5nZUljb25Gb3JQYWdlVVJMKToKKyAgICAgICAgKEljb25EYXRhYmFzZUNsaWVudEd0azo6ZGlk
RmluaXNoVVJMSW1wb3J0KToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6UGVuZGluZ0lj
b25SZXF1ZXN0KToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6flBlbmRpbmdJY29uUmVx
dWVzdCk6CisgICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OnBhZ2VVUkkpOgorICAgICAgICAo
UGVuZGluZ0ljb25SZXF1ZXN0OjpmcmFtZUxvYWRlckNsaWVudCk6CisgICAgICAgIChQZW5kaW5n
SWNvblJlcXVlc3Q6OmFzeW5jUmVzdWx0KToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6
YXN5bmNSZXN1bHRDb21wbGV0ZSk6CisgICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OmFzeW5j
UmVzdWx0Q29tcGxldGVJbklkbGUpOgorICAgICAgICAoUGVuZGluZ0ljb25SZXF1ZXN0Ojphc3lu
Y1Jlc3VsdENhbmNlbCk6CisgICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OmZyYW1lTG9hZGVy
RGlzcGF0Y2hEaWRSZWNlaXZlSWNvbik6CisgICAgICAgICh3ZWJraXRJY29uRGF0YWJhc2VJY29u
TG9hZGVkKTogUmV0YWluIHRoZSBpY29uIHdoZW4gbG9hZGVkIHRvCisgICAgICAgIG1ha2Ugc3Vy
ZSBpdCdsbCBiZSBhdmFpbGFibGUgd2hlbiByZXF1ZXN0ZWQgbGF0ZXIuCisgICAgICAgICh3ZWJr
aXRfaWNvbl9kYXRhYmFzZV9pbml0KToKKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX3Nl
dF9wYXRoKTogRGVsYXkgZGF0YWJhc2UgY2xlYW51cCBieSBkZWZhdWx0CisgICAgICAgIHRvIG1h
a2UgaWNvbnMgcGVyc2lzdGVudCBpbiB0aGUgZGF0YWJhc2UuCisgICAgICAgIChnZXRJY29uUGl4
YnVmU3luY2hyb25vdXNseSk6IEhlbHBlciBmdW5jdGlvbiB0byBjYWxsCisgICAgICAgIEljb25E
YXRhYmFzZTo6c3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTCgpLgorICAgICAgICAod2Via2l0
X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmKTogRml4IGRvYyBjb21tZW50cy4KKyAgICAg
ICAgKHdlYmtpdEljb25EYXRhYmFzZUdldE9yQ3JlYXRlUmVxdWVzdHMpOiBIZWxwZXIgZnVuY3Rp
b24gdG8gZ2V0CisgICAgICAgIHRoZSB2ZWN0b3Igb2YgcGVuZGluZyByZXF1ZXN0cyBmb3IgdGhl
IGdpdmVuIHVyaS4KKyAgICAgICAgKHdlYmtpdEljb25EYXRhYmFzZURlbGV0ZVJlcXVlc3RzKTog
SGVscGVyIGZ1bmN0aW9uIHRvIHJlbW92ZSB0aGUKKyAgICAgICAgdmVjdG9yIG9mIHBlbmRpbmcg
cmVxdWVzdHMgZm9yIHRoZSBnaXZlbiB1cmkuCisgICAgICAgIChnZXRJY29uUGl4YnVmQ2FuY2Vs
bGVkSWRsZSk6IENhbmNlbCB0aGUgcmVxdWVzdC4KKyAgICAgICAgKHdlYmtpdEljb25EYXRhYmFz
ZUdldEljb25QaXhidWZDYW5jZWxsZWQpOgorICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2Vf
Z2V0X2ljb25fcGl4YnVmX2FzeW5jKTogTmV3IG1ldGhvZCB0byBnZXQgYW4KKyAgICAgICAgaWNv
biBhc3luY2hyb25vdXNseS4KKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29u
X3BpeGJ1Zl9maW5pc2gpOiBGaW5pc2hlcyBhbgorICAgICAgICBvcGVyYXRpb24gc3RhcnRlZCB3
aXRoIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYygpLgorICAgICAg
ICAod2Via2l0SWNvbkRhdGFiYXNlUmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKTogUmVnaXN0
ZXIgZnJhbWUKKyAgICAgICAgbG9hZGVyIHRvIGJlIG5vdGlmaWVkIHdoZW4gdGhlIGljb24gZGF0
YSBpcyBhdmFpbGFibGUuCisgICAgICAgICh3ZWJraXRJY29uRGF0YWJhc2VVbnJlZ2lzdGVyRm9y
SWNvbk5vdGlmaWNhdGlvbik6IFVucmVnaXN0ZXIgYQorICAgICAgICBmcmFtZSBsb2FkZXIgbm90
aWZpY2F0aW9uIHJlcXVlc3QuCisgICAgICAgICh3ZWJraXRJY29uRGF0YWJhc2VQcm9jZXNzUGVu
ZGluZ0ljb25zRm9yVVJJKTogUHJvY2VzcyBwZW5kaW5nCisgICAgICAgIHJlcXVlc3RzIGZvciB0
aGUgZ2l2ZW4gdXJpLCBmb3IgYXN5bmMgb3BlcmF0aW9uIHJlcXVlc3RzIGl0CisgICAgICAgIGNv
bXBsZXRlcyB0aGUgb3BlcmF0aW9uLCB3aGlsZSBmb3IgZnJhbWUgbG9hZGVyIHJlcXVlc3RzIGl0
IGNhbGxzCisgICAgICAgIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVJY29u
KCkgdG8gbm90aWZ5IHRoZSBmcmFtZQorICAgICAgICBsb2FkZXIgdGhhdCBoZSBpY29uIGlzIG5v
dyBhdmFpbGFibGUuCisgICAgICAgICh3ZWJraXRJY29uRGF0YWJhc2VJbXBvcnRGaW5pc2hlZCk6
IFdoZW4gaW1wb3J0IGlzIGZpbmlzaGVkLCBjaGVjaworICAgICAgICBwZW5kaW5nIHJlcXVlc3Rz
IHRvIHByb2Nlc3MgYW5kIGRlbGV0ZSB0aGUgb25lcyB0aGF0IGFzayBmb3IgYW4KKyAgICAgICAg
aWNvbiB0aGF0IGRvZXNuJ3QgZXhpc3QgaW4gZGF0YWJhc2UuCisgICAgICAgICogd2Via2l0L3dl
YmtpdGljb25kYXRhYmFzZS5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRpY29uZGF0YWJhc2Vw
cml2YXRlLmg6IEFkZGVkLgorCiAyMDEyLTAyLTE2ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3Zp
bGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtzb3VwXSBNb3ZlIGltcG9ydGFudCBTb3VwU2Vz
c2lvbiBmZWF0dXJlIGluaXRpYWxpemF0aW9uIHRvIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZp
bGUuYW0KaW5kZXggNTY3ZDc5YmI5MDM1NGZkMWRhNDI4NGM1ZWZhYmJjZmFjNjFiYWVhZi4uNzc5
ZWNjYmZhYzA0ODY0NmEzZDQ4Mzg4NjkxMzRkODZjNjhjMmMwNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFr
ZWZpbGUuYW0KQEAgLTIyNyw2ICsyMjcsNyBAQCB3ZWJraXRndGtfc291cmNlcyArPSBcCiAJU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuY3BwIFwKIAlTb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aGl0dGVzdHJlc3VsdHByaXZhdGUuaCBcCiAJU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAgXAorCVNvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlLmggXAogCVNvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5jcHAgXAogCVNvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdHByaXZhdGUuaCBcCiAJU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXNwb25zZS5jcHAgXApAQCAtNDQ1LDYgKzQ0Niw3
IEBAIFRFU1RfUFJPR1MgKz0gXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0ZG9tZG9td2luZG93
IFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdGRvbW5vZGUgXAogCVByb2dyYW1zL3VuaXR0ZXN0
cy90ZXN0aHR0cGJhY2tlbmQgXAorCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0aWNvbmRhdGFiYXNl
IFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdGxvYWRpbmcgXAogCVByb2dyYW1zL3VuaXR0ZXN0
cy90ZXN0Z2xvYmFscyBcCiAJUHJvZ3JhbXMvdW5pdHRlc3RzL3Rlc3RtaW1laGFuZGxpbmcgXApA
QCAtNDkzLDYgKzQ5NSwxMSBAQCBQcm9ncmFtc191bml0dGVzdHNfdGVzdGh0dHBiYWNrZW5kX0NG
TEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0aHR0
cGJhY2tlbmRfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKIFByb2dyYW1zX3VuaXR0ZXN0
c190ZXN0aHR0cGJhY2tlbmRfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCiAKK1By
b2dyYW1zX3VuaXR0ZXN0c190ZXN0aWNvbmRhdGFiYXNlX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0
L2d0ay90ZXN0cy90ZXN0aWNvbmRhdGFiYXNlLmMgU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dF91dGlscy5jCitQcm9ncmFtc191bml0dGVzdHNfdGVzdGljb25kYXRhYmFzZV9DRkxBR1MgPSAk
KHdlYmtpdF90ZXN0c19jZmxhZ3MpCitQcm9ncmFtc191bml0dGVzdHNfdGVzdGljb25kYXRhYmFz
ZV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Rp
Y29uZGF0YWJhc2VfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCisKIFByb2dyYW1z
X3VuaXR0ZXN0c190ZXN0Z2xvYmFsc19TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdGdsb2JhbHMuYwogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RnbG9iYWxzX0NGTEFHUyA9ICQo
d2Via2l0X3Rlc3RzX2NmbGFncykKIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0Z2xvYmFsc19MREFE
RCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCmluZGV4IGQ0ODM1Yjcx
NDY2MTRkZjQ2ODZiOTI5YTgxNDQ2YjRmNWM1MDQ5MjcuLjA2ZWU0YmNmOTkzNDI2ZjdhNzYyNjAw
MzY2N2E0ODdlMjAxMzM0MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKQEAgLTY3LDYgKzY3LDcgQEAK
ICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzLmgiCiAjaW5jbHVkZSAid2Via2l0Z2xvYmFsc3ByaXZh
dGUuaCIKICNpbmNsdWRlICJ3ZWJraXRpY29uZGF0YWJhc2UuaCIKKyNpbmNsdWRlICJ3ZWJraXRp
Y29uZGF0YWJhc2Vwcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0bmV0d29ya3JlcXVlc3QuaCIK
ICNpbmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVxdWVzdHByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJr
aXRuZXR3b3JrcmVzcG9uc2UuaCIKQEAgLTYyNCw3ICs2MjUsMTIgQEAgdm9pZCBGcmFtZUxvYWRl
ckNsaWVudDo6ZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbigpIGNvbnN0CiAKIHZvaWQgRnJhbWVM
b2FkZXJDbGllbnQ6OnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29sIHNob3VsZFJlZ2lz
dGVyKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgU3RyaW5nIGZyYW1lVVJJID0gU3Ry
aW5nOjpmcm9tVVRGOCh3ZWJraXRfd2ViX2ZyYW1lX2dldF91cmkobV9mcmFtZSkpOworICAgIFdl
YktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsK
KyAgICBpZiAoc2hvdWxkUmVnaXN0ZXIpCisgICAgICAgIHdlYmtpdEljb25EYXRhYmFzZVJlZ2lz
dGVyRm9ySWNvbk5vdGlmaWNhdGlvbihkYXRhYmFzZSwgZnJhbWVVUkksIHRoaXMpOworICAgIGVs
c2UKKyAgICAgICAgd2Via2l0SWNvbkRhdGFiYXNlVW5yZWdpc3RlckZvckljb25Ob3RpZmljYXRp
b24oZGF0YWJhc2UsIGZyYW1lVVJJLCB0aGlzKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVu
dDo6c2V0TWFpbkZyYW1lRG9jdW1lbnRSZWFkeShib29sIHJlYWR5KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGljb25kYXRhYmFzZS5jIGIvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdGljb25kYXRhYmFzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmMDZhZWYzNzY2ODFlMzZh
NDc0MzA4Nzk5ZGM4YTRiZjMwZTgzOWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L2d0ay90ZXN0cy90ZXN0aWNvbmRhdGFiYXNlLmMKQEAgLTAsMCArMSwyODAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgInRlc3RfdXRpbHMuaCIKKyNp
bmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxz
dHJpbmcuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKyNpZiBHVEtfQ0hFQ0tfVkVS
U0lPTigyLCAxNCwgMCkKK0dNYWluTG9vcCAqbG9vcDsKK2NoYXIqIGJhc2VfdXJpOworCitzdGF0
aWMgdm9pZAorc2VydmVyX2NhbGxiYWNrKFNvdXBTZXJ2ZXIgKnNlcnZlciwgU291cE1lc3NhZ2Ug
Km1zZywgY29uc3QgY2hhciAqcGF0aCwgR0hhc2hUYWJsZSAqcXVlcnksIFNvdXBDbGllbnRDb250
ZXh0ICpjb250ZXh0LCBncG9pbnRlciBkYXRhKQoreworICAgIGNoYXIqIGNvbnRlbnRzOworICAg
IGdzaXplIGxlbmd0aDsKKworICAgIGlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQp
IHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19OT1Rf
SU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdl
X3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICBpZiAoZ19zdHJfZXF1YWwo
cGF0aCwgIi9mYXZpY29uLmljbyIpKSB7CisgICAgICAgIEdFcnJvciogZXJyb3IgPSBOVUxMOwor
CisgICAgICAgIGdfZmlsZV9nZXRfY29udGVudHMoImJsYW5rLmljbyIsICZjb250ZW50cywgJmxl
bmd0aCwgJmVycm9yKTsKKyAgICAgICAgZ19hc3NlcnQoIWVycm9yKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBjb250ZW50cyA9IGdfc3RyZHVwKCI8aHRtbD48Ym9keT50ZXN0PC9ib2R5PjwvaHRt
bD4iKTsKKyAgICAgICAgbGVuZ3RoID0gc3RybGVuKGNvbnRlbnRzKTsKKyAgICB9CisKKyAgICBz
b3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9U
QUtFLCBjb250ZW50cywgbGVuZ3RoKTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSht
c2ctPnJlc3BvbnNlX2JvZHkpOworfQorCitzdGF0aWMgdm9pZCBkZWxldGVEYXRhYmFzZUZpbGVJ
ZkV4aXN0cyhjb25zdCBjaGFyICpkYXRhYmFzZVBhdGgpCit7CisgICAgaWYgKCFnX2ZpbGVfdGVz
dChkYXRhYmFzZVBhdGgsIEdfRklMRV9URVNUX0lTX0RJUikpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGNoYXIgKmRhdGFiYXNlRmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lKGRhdGFiYXNlUGF0
aCwgIldlYnBhZ2VJY29ucy5kYiIsIE5VTEwpOworICAgIGlmIChnX3VubGluayhkYXRhYmFzZUZp
bGVuYW1lKSA9PSAtMSkgeworICAgICAgICBnX2ZyZWUoZGF0YWJhc2VGaWxlbmFtZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBnX3JtZGlyKGRhdGFiYXNlUGF0aCk7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RXZWJraXRJY29uRGF0YWJhc2VTZXRQYXRoKHZvaWQpCit7CisgICAgY2hh
ciAqZGF0YWJhc2VQYXRoID0gZ19idWlsZF9maWxlbmFtZShnX2dldF90bXBfZGlyKCksICJ3ZWJr
aXQtdGVzdGljb25kYXRhYmFzZSIsIE5VTEwpOworICAgIGRlbGV0ZURhdGFiYXNlRmlsZUlmRXhp
c3RzKGRhdGFiYXNlUGF0aCk7CisKKyAgICBXZWJLaXRJY29uRGF0YWJhc2UgKmRhdGFiYXNlID0g
d2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCk7CisgICAgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0
X3BhdGgoZGF0YWJhc2UsIGRhdGFiYXNlUGF0aCk7CisKKyAgICBnX2Fzc2VydF9jbXBzdHIoZGF0
YWJhc2VQYXRoLCA9PSwgd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3BhdGgoZGF0YWJhc2UpKTsK
KworICAgIGdfZnJlZShkYXRhYmFzZVBhdGgpOworfQorCisvLyBTZWUgdGhlIGNvbW1lbnQgaW4g
bWFpbigpIGZ1bmN0aW9uIHRoYXQgZ29lcyB3aXRoIHRoaXMgc2FtZSBndWFyZC4KKyNpZmRlZiBO
REVCVUcKKworc3RhdGljIHZvaWQgaWNvbkRhdGFiYXNlR2V0SWNvblZhbGlkQ2FsbGJhY2soR09i
amVjdCAqc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgZ3BvaW50ZXIgdXNlckRh
dGEpCit7CisgICAgZ2Jvb2xlYW4gKmJlZW5IZXJlID0gKGdib29sZWFuKil1c2VyRGF0YTsKKyAg
ICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKyAgICBHZGtQaXhidWYgKmljb24gPSB3ZWJraXRfaWNv
bl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfZmluaXNoKFdFQktJVF9JQ09OX0RBVEFCQVNFKHNv
dXJjZU9iamVjdCksIHJlc3VsdCwgJmVycm9yKTsKKyAgICBnX2Fzc2VydChpY29uKTsKKyAgICBn
X29iamVjdF91bnJlZihpY29uKTsKKworICAgICpiZWVuSGVyZSA9IFRSVUU7CisKKyAgICBnX21h
aW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMgdm9pZCBpY29uRGF0YWJhc2VHZXRJY29u
SW52YWxpZENhbGxiYWNrKEdPYmplY3QgKnNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0ICpyZXN1
bHQsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdib29sZWFuICpiZWVuSGVyZSA9IChnYm9v
bGVhbiopdXNlckRhdGE7CisgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisgICAgR2RrUGl4YnVm
ICppY29uID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2ZpbmlzaChXRUJL
SVRfSUNPTl9EQVRBQkFTRShzb3VyY2VPYmplY3QpLCByZXN1bHQsICZlcnJvcik7CisgICAgZ19h
c3NlcnQoIWljb24pOworCisgICAgKmJlZW5IZXJlID0gVFJVRTsKKworICAgIGdfbWFpbl9sb29w
X3F1aXQobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGljb25EYXRhYmFzZUdldEljb25DYW5jZWxs
ZWRDYWxsYmFjayhHT2JqZWN0ICpzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBn
cG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnYm9vbGVhbiAqYmVlbkhlcmUgPSAoZ2Jvb2xlYW4q
KXVzZXJEYXRhOworICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworICAgIEdka1BpeGJ1ZiAqaWNv
biA9IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5pc2goV0VCS0lUX0lD
T05fREFUQUJBU0Uoc291cmNlT2JqZWN0KSwgcmVzdWx0LCAmZXJyb3IpOworICAgIGdfYXNzZXJ0
KCFpY29uKTsKKyAgICBnX2Fzc2VydChlcnJvciAmJiBnX2Vycm9yX21hdGNoZXMoZXJyb3IsIEdf
SU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSk7CisKKyAgICAqYmVlbkhlcmUgPSBUUlVF
OworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lk
IG1haW5Mb29wUXVpdElmTG9hZENvbXBsZXRlZChnYm9vbGVhbiogaWNvbk9yUGFnZUxvYWRlZCkK
K3sKKyAgICBpZiAoKmljb25PclBhZ2VMb2FkZWQpCisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
bG9vcCk7CisgICAgZWxzZQorICAgICAgICAqaWNvbk9yUGFnZUxvYWRlZCA9IFRSVUU7Cit9CisK
K3N0YXRpYyB2b2lkIGlkbGVRdWl0TG9vcENhbGxiYWNrKFdlYktpdFdlYlZpZXcgKndlYlZpZXcs
IEdQYXJhbVNwZWMgKnBzcGVjLCBnYm9vbGVhbiogaWNvbk9yUGFnZUxvYWRlZCkKK3sKKyAgICBX
ZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMo
d2ViVmlldyk7CisKKyAgICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FEX0ZJTklTSEVEIHx8IHN0
YXR1cyA9PSBXRUJLSVRfTE9BRF9GQUlMRUQpCisgICAgICAgIG1haW5Mb29wUXVpdElmTG9hZENv
bXBsZXRlZChpY29uT3JQYWdlTG9hZGVkKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0SWNvbkRh
dGFiYXNlSWNvbkxvYWRlZChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBXZWJLaXRXZWJG
cmFtZSogd2ViRnJhbWUsIGNvbnN0IGNoYXIqIGZyYW1lVVJJLCBnYm9vbGVhbiogaWNvbk9yUGFn
ZUxvYWRlZCkKK3sKKyAgICBtYWluTG9vcFF1aXRJZkxvYWRDb21wbGV0ZWQoaWNvbk9yUGFnZUxv
YWRlZCk7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRVUkkoY29uc3QgY2hhciAqdXJpKQoreworICAg
IFdlYktpdFdlYlZpZXcgKnZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25l
dygpKTsKKyAgICBnYm9vbGVhbiBpY29uT3JQYWdlTG9hZGVkID0gRkFMU0U7CisKKyAgICB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgdXJpKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
dmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGlkbGVRdWl0TG9vcENhbGxi
YWNrKSwgJmljb25PclBhZ2VMb2FkZWQpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2Via2l0X2dl
dF9pY29uX2RhdGFiYXNlKCksICJpY29uLWxvYWRlZCIsIEdfQ0FMTEJBQ0sod2Via2l0SWNvbkRh
dGFiYXNlSWNvbkxvYWRlZCksICZpY29uT3JQYWdlTG9hZGVkKTsKKworICAgIGdfbWFpbl9sb29w
X3J1bihsb29wKTsKK30KKworc3RhdGljIGdib29sZWFuIGljb25EYXRhYmFzZUdldEljb25WYWxp
ZElkbGUoZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0
X2ljb25fcGl4YnVmX2FzeW5jKHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpLCBiYXNlX3VyaSwg
TlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNv
bkRhdGFiYXNlR2V0SWNvblZhbGlkQ2FsbGJhY2ssIHVzZXJEYXRhKTsKKyAgICByZXR1cm4gRkFM
U0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBpY29uRGF0YWJhc2VHZXRJY29uSW52YWxpZElkbGUo
Z3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25f
cGl4YnVmX2FzeW5jKHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpLCAiaHR0cDovL3d3dy53ZWJr
aXRndGsub3JnLyIsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGljb25EYXRhYmFzZUdldEljb25JbnZhbGlkQ2FsbGJhY2ssIHVzZXJEYXRhKTsK
KyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBpY29uRGF0YWJhc2VHZXRJ
Y29uQ2FuY2VsbGVkSWRsZShncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBHQ2FuY2VsbGFibGUg
KmNhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKKyAgICB3ZWJraXRfaWNvbl9kYXRh
YmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmMod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCksIGJh
c2VfdXJpLCBjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWNvbkRhdGFiYXNlR2V0SWNvbkNhbmNlbGxlZENhbGxiYWNrLCB1c2VyRGF0
YSk7CisgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwoY2FuY2VsbGFibGUpOworICAgIGdfb2JqZWN0
X3VucmVmKGNhbmNlbGxhYmxlKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RXZWJraXRJY29uRGF0YWJhc2VHZXRJY29uQXN5bmModm9pZCkKK3sKKyAgICBnYm9vbGVh
biBiZWVuVG9JY29uQ2FsbGJhY2s7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEws
IFRSVUUpOworCisgICAgLyogTG9hZCB1cmkgdG8gbWFrZSBzdXJlIGZhdmljb24gaXMgYWRkZWQg
dG8gZGF0YWJhc2UgKi8KKyAgICBsb2FkVVJJKGJhc2VfdXJpKTsKKworICAgIGJlZW5Ub0ljb25D
YWxsYmFjayA9IEZBTFNFOworICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWljb25EYXRhYmFz
ZUdldEljb25WYWxpZElkbGUsICZiZWVuVG9JY29uQ2FsbGJhY2spOworICAgIGdfbWFpbl9sb29w
X3J1bihsb29wKTsKKyAgICBnX2Fzc2VydChiZWVuVG9JY29uQ2FsbGJhY2spOworCisgICAgYmVl
blRvSWNvbkNhbGxiYWNrID0gRkFMU0U7CisgICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMpaWNv
bkRhdGFiYXNlR2V0SWNvbkludmFsaWRJZGxlLCAmYmVlblRvSWNvbkNhbGxiYWNrKTsKKyAgICBn
X21haW5fbG9vcF9ydW4obG9vcCk7CisgICAgZ19hc3NlcnQoYmVlblRvSWNvbkNhbGxiYWNrKTsK
KworICAgIGJlZW5Ub0ljb25DYWxsYmFjayA9IEZBTFNFOworICAgIGdfaWRsZV9hZGQoKEdTb3Vy
Y2VGdW5jKWljb25EYXRhYmFzZUdldEljb25DYW5jZWxsZWRJZGxlLCAmYmVlblRvSWNvbkNhbGxi
YWNrKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisgICAgZ19hc3NlcnQoYmVlblRvSWNv
bkNhbGxiYWNrKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEljb25EYXRhYmFzZUdldElj
b25VUkkodm9pZCkKK3sKKyAgICBjaGFyICppY29uVVJJID0gd2Via2l0X2ljb25fZGF0YWJhc2Vf
Z2V0X2ljb25fdXJpKHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpLCBiYXNlX3VyaSk7CisgICAg
Y2hhciAqZXhwZWN0ZWRVUkkgPSBnX3N0cmR1cF9wcmludGYoIiVzZmF2aWNvbi5pY28iLCBiYXNl
X3VyaSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGljb25VUkksID09LCBleHBlY3RlZFVSSSk7Cisg
ICAgZ19mcmVlKGV4cGVjdGVkVVJJKTsKKyAgICBnX2ZyZWUoaWNvblVSSSk7Cit9CisKKyNlbmRp
ZgorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0SWNvbkRhdGFiYXNlUmVtb3ZlQWxsKHZvaWQpCit7
CisgICAgV2ViS2l0SWNvbkRhdGFiYXNlICpkYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRh
YmFzZSgpOworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX2NsZWFyKGRhdGFiYXNlKTsKKyAgICBj
aGFyICppY29uVVJJID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpKGRhdGFiYXNl
LCBiYXNlX3VyaSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGljb25VUkksID09LCAiIik7CisgICAg
Z19mcmVlKGljb25VUkkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0SWNvbkRhdGFiYXNl
Q2xvc2VEYXRhYmFzZSh2b2lkKQoreworICAgIFdlYktpdEljb25EYXRhYmFzZSAqZGF0YWJhc2Ug
PSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKKyAgICBjaGFyICpkYXRhYmFzZVBhdGggPSBn
X3N0cmR1cCh3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0aChkYXRhYmFzZSkpOworICAgIHdl
YmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCAwKTsKKyAgICBkZWxldGVEYXRh
YmFzZUZpbGVJZkV4aXN0cyhkYXRhYmFzZVBhdGgpOworICAgIGdfZnJlZShkYXRhYmFzZVBhdGgp
OworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgU291cFNlcnZl
ciogc2VydmVyOworICAgIFNvdXBVUkkqIHNvdXBfdXJpOworCisgICAgZ3RrX3Rlc3RfaW5pdCgm
YXJnYywgJmFyZ3YsIDApOworCisgICAgLyogSG9wZWZ1bGx5IG1ha2UgdGVzdCBpbmRlcGVuZGVu
dCBvZiB0aGUgcGF0aCBpdCdzIGNhbGxlZCBmcm9tLiAqLworICAgIHRlc3R1dGlsc19yZWxhdGl2
ZV9jaGRpcigiU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QuaHRtbCIsIGFy
Z3ZbMF0pOworCisgICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVSX1BPUlQs
IDAsIE5VTEwpOworICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIpOworCisgICAgc291
cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJfY2FsbGJhY2ssIE5VTEws
IE5VTEwpOworCisgICAgc291cF91cmkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEv
Iik7CisgICAgc291cF91cmlfc2V0X3BvcnQoc291cF91cmksIHNvdXBfc2VydmVyX2dldF9wb3J0
KHNlcnZlcikpOworCisgICAgYmFzZV91cmkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF91cmks
IEZBTFNFKTsKKyAgICBzb3VwX3VyaV9mcmVlKHNvdXBfdXJpKTsKKworICAgIGdfdGVzdF9idWdf
YmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L2ljb25kYXRhYmFzZS9zZXQtcGF0aCIsIHRlc3RXZWJraXRJY29uRGF0YWJhc2VTZXRQ
YXRoKTsKKworICAgIC8vIFRoZXNlIHR3byB0ZXN0cyB3aWxsIHRyaWdnZXIgYW4gQVNTRVJUSU9O
IG9uIGRlYnVnIGJ1aWxkcyBkdWUKKyAgICAvLyB0byBodHRwOi8vd2Via2l0Lm9yZy9iLzY3NTgy
LiBSZW1vdmUgdGhlIGd1YXJkcyBvbmNlIHRoZSBidWcgaXMgZml4ZWQuCisjaWZkZWYgTkRFQlVH
CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2ljb25kYXRhYmFzZS9pY29uLWFzeW5jIiwg
dGVzdFdlYmtpdEljb25EYXRhYmFzZUdldEljb25Bc3luYyk7CisgICAgZ190ZXN0X2FkZF9mdW5j
KCIvd2Via2l0L2ljb25kYXRhYmFzZS9pY29uLXVyaSIsIHRlc3RXZWJraXRJY29uRGF0YWJhc2VH
ZXRJY29uVVJJKTsKKyNlbmRpZgorCisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2ljb25k
YXRhYmFzZS9yZW1vdmUtYWxsIiwgdGVzdFdlYmtpdEljb25EYXRhYmFzZVJlbW92ZUFsbCk7Cisg
ICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2ljb25kYXRhYmFzZS9jbG9zZS1kYiIsIHRlc3RX
ZWJraXRJY29uRGF0YWJhc2VDbG9zZURhdGFiYXNlKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVu
KCk7Cit9CisjZWxzZQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGdf
Y3JpdGljYWwoIllvdSB3aWxsIG5lZWQgZ3RrLTIuMTQuMCB0byBydW4gdGhlIHVuaXQgdGVzdHMu
IERvaW5nIG5vdGhpbmcgbm93LiIpOworICAgIHJldHVybiAwOworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuY3BwIGIv
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKaW5kZXggMzgz
YjA4MTdlY2JhZWUzMTc0ZTVlZjdlYzdlOTQxNWI4NDM3YzE0My4uMzQ5Zjc0MDhlNTk1MDMxNzY5
NTI4ODI3YTQ1MDQ3NGFjM2JiZDlkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKQEAgLTIzLDE0ICsyMywyMCBAQAogI2luY2x1ZGUgIkRh
dGFiYXNlRGV0YWlscy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgogI2luY2x1ZGUg
IkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUg
IkdSZWZQdHIuaCIKICNpbmNsdWRlICJJY29uRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJJY29uRGF0
YWJhc2VDbGllbnQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIK
KyNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzLmgiCiAjaW5jbHVkZSAid2Via2l0Z2xvYmFsc3ByaXZh
dGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlLmgiCiAjaW5jbHVkZSAi
d2Via2l0bWFyc2hhbC5oIgogI2luY2x1ZGUgIndlYmtpdHNlY3VyaXR5b3JpZ2lucHJpdmF0ZS5o
IgogI2luY2x1ZGUgIndlYmtpdHdlYmZyYW1lLmgiCiAjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIu
aD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dP
d25QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTYzLDYgKzY5LDk5
IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKK2NsYXNzIFBlbmRpbmdJY29uUmVxdWVz
dDsKKworc3RhdGljIHZvaWQgd2Via2l0SWNvbkRhdGFiYXNlUHJvY2Vzc1BlbmRpbmdJY29uc0Zv
clVSSShXZWJLaXRJY29uRGF0YWJhc2UqLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkkpOworc3RhdGlj
IHZvaWQgd2Via2l0SWNvbkRhdGFiYXNlSW1wb3J0RmluaXNoZWQoV2ViS2l0SWNvbkRhdGFiYXNl
Kik7CitzdGF0aWMgdm9pZCB3ZWJraXRJY29uRGF0YWJhc2VHZXRJY29uUGl4YnVmQ2FuY2VsbGVk
KEdDYW5jZWxsYWJsZSosIFBlbmRpbmdJY29uUmVxdWVzdCopOworCitjbGFzcyBJY29uRGF0YWJh
c2VDbGllbnRHdGsgOiBwdWJsaWMgV2ViQ29yZTo6SWNvbkRhdGFiYXNlQ2xpZW50IHsKK3B1Ymxp
YzoKKyAgICAvLyBJY29uRGF0YWJhc2VDbGllbnQgaW50ZXJmYWNlCisgICAgdmlydHVhbCBib29s
IHBlcmZvcm1JbXBvcnQoKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJl
bW92ZUFsbEljb25zKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBkaWRJbXBvcnRJY29uVVJMRm9y
UGFnZVVSTChjb25zdCBTdHJpbmcmKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGRpZEltcG9ydElj
b25EYXRhRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIFVSTCkKKyAgICB7CisgICAgICAgIHdlYmtp
dEljb25EYXRhYmFzZVByb2Nlc3NQZW5kaW5nSWNvbnNGb3JVUkkod2Via2l0X2dldF9pY29uX2Rh
dGFiYXNlKCksIFVSTCk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VJY29uRm9y
UGFnZVVSTChjb25zdCBTdHJpbmcmKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaFVS
TEltcG9ydCgpCisgICAgeworICAgICAgICB3ZWJraXRJY29uRGF0YWJhc2VJbXBvcnRGaW5pc2hl
ZCh3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKSk7CisgICAgfQorfTsKKworY2xhc3MgUGVuZGlu
Z0ljb25SZXF1ZXN0IHsKK3B1YmxpYzoKKyAgICBQZW5kaW5nSWNvblJlcXVlc3QoY29uc3QgU3Ry
aW5nJiBwYWdlVVJJLCBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudCogZnJhbWVMb2FkZXJDbGll
bnQpCisgICAgICAgIDogbV9wYWdlVVJJKHBhZ2VVUkkpCisgICAgICAgICwgbV9mcmFtZUxvYWRl
ckNsaWVudChmcmFtZUxvYWRlckNsaWVudCkKKyAgICAgICAgLCBtX2FzeW5jUmVzdWx0KDApCisg
ICAgICAgICwgbV9jYW5jZWxsYWJsZSgwKQorICAgICAgICAsIG1fY2FuY2VsbGVkSWQoMCkKKyAg
ICB7CisgICAgfQorCisgICAgUGVuZGluZ0ljb25SZXF1ZXN0KGNvbnN0IFN0cmluZyYgcGFnZVVS
SSwgR1NpbXBsZUFzeW5jUmVzdWx0KiByZXN1bHQsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUp
CisgICAgICAgIDogbV9wYWdlVVJJKHBhZ2VVUkkpCisgICAgICAgICwgbV9mcmFtZUxvYWRlckNs
aWVudCgwKQorICAgICAgICAsIG1fYXN5bmNSZXN1bHQocmVzdWx0KQorICAgICAgICAsIG1fY2Fu
Y2VsbGFibGUoY2FuY2VsbGFibGUpCisgICAgICAgICwgbV9jYW5jZWxsZWRJZCgwKQorICAgIHsK
KyAgICAgICAgaWYgKCFjYW5jZWxsYWJsZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBtX2NhbmNlbGxlZElkID0gZ19jYW5jZWxsYWJsZV9jb25uZWN0KGNhbmNlbGxhYmxlLCBHX0NB
TExCQUNLKHdlYmtpdEljb25EYXRhYmFzZUdldEljb25QaXhidWZDYW5jZWxsZWQpLCB0aGlzLCAw
KTsKKyAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGFfZnVsbChHX09CSkVDVChyZXN1bHQpLCAiY2Fu
Y2VsbGFibGUiLCBnX29iamVjdF9yZWYoY2FuY2VsbGFibGUpLCBzdGF0aWNfY2FzdDxHRGVzdHJv
eU5vdGlmeT4oZ19vYmplY3RfdW5yZWYpKTsKKyAgICB9CisKKyAgICB+UGVuZGluZ0ljb25SZXF1
ZXN0KCkKKyAgICB7CisgICAgICAgIGlmIChtX2NhbmNlbGxlZElkID4gMCkKKyAgICAgICAgICAg
IGdfY2FuY2VsbGFibGVfZGlzY29ubmVjdChtX2NhbmNlbGxhYmxlLmdldCgpLCBtX2NhbmNlbGxl
ZElkKTsKKyAgICB9CisKKyAgICBjb25zdCBTdHJpbmcmIHBhZ2VVUkkoKSB7IHJldHVybiBtX3Bh
Z2VVUkk7IH0KKyAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudCogZnJhbWVMb2FkZXJDbGll
bnQoKSB7IHJldHVybiBtX2ZyYW1lTG9hZGVyQ2xpZW50OyB9CisgICAgR1NpbXBsZUFzeW5jUmVz
dWx0KiBhc3luY1Jlc3VsdCgpIHsgcmV0dXJuIG1fYXN5bmNSZXN1bHQuZ2V0KCk7IH0KKworICAg
IHZvaWQgYXN5bmNSZXN1bHRDb21wbGV0ZShHZGtQaXhidWYqIGljb24pCisgICAgeworICAgICAg
ICBBU1NFUlQobV9hc3luY1Jlc3VsdCk7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9z
ZXRfb3BfcmVzX2dwb2ludGVyKG1fYXN5bmNSZXN1bHQuZ2V0KCksIGljb24sIGljb24gPyBzdGF0
aWNfY2FzdDxHRGVzdHJveU5vdGlmeT4oZ19vYmplY3RfdW5yZWYpIDogMCk7CisgICAgICAgIGdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZShtX2FzeW5jUmVzdWx0LmdldCgpKTsKKyAgICB9
CisKKyAgICB2b2lkIGFzeW5jUmVzdWx0Q29tcGxldGVJbklkbGUoR2RrUGl4YnVmKiBpY29uKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYXN5bmNSZXN1bHQpOworICAgICAgICBnX3NpbXBsZV9h
c3luY19yZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlcihtX2FzeW5jUmVzdWx0LmdldCgpLCBpY29u
LCBpY29uID8gc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSA6IDAp
OworICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5faWRsZShtX2FzeW5j
UmVzdWx0LmdldCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGFzeW5jUmVzdWx0Q2FuY2VsKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX2FzeW5jUmVzdWx0KTsKKyAgICAgICAgZ19zaW1wbGVfYXN5
bmNfcmVzdWx0X3NldF9lcnJvcihtX2FzeW5jUmVzdWx0LmdldCgpLCBHX0lPX0VSUk9SLCBHX0lP
X0VSUk9SX0NBTkNFTExFRCwgIiVzIiwgXygiT3BlcmF0aW9uIHdhcyBjYW5jZWxsZWQiKSk7Cisg
ICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZShtX2FzeW5jUmVzdWx0LmdldCgp
KTsKKyAgICB9CisKKyAgICB2b2lkIGZyYW1lTG9hZGVyRGlzcGF0Y2hEaWRSZWNlaXZlSWNvbigp
CisgICAgeworICAgICAgICBBU1NFUlQobV9mcmFtZUxvYWRlckNsaWVudCk7CisgICAgICAgIG1f
ZnJhbWVMb2FkZXJDbGllbnQtPmRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKTsKKyAgICB9CisKKyAg
ICBTdHJpbmcgbV9wYWdlVVJJOworICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50KiBtX2Zy
YW1lTG9hZGVyQ2xpZW50OworICAgIEdSZWZQdHI8R1NpbXBsZUFzeW5jUmVzdWx0PiBtX2FzeW5j
UmVzdWx0OworICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOworICAgIGd1
bG9uZyBtX2NhbmNlbGxlZElkOworfTsKKworCiBlbnVtIHsKICAgICBQUk9QXzAsCiAKQEAgLTc3
LDEyICsxNzYsMjcgQEAgZW51bSB7CiAKIHN0YXRpYyBndWludCB3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKIAotR19ERUZJTkVfVFlQRShXZWJLaXRJ
Y29uRGF0YWJhc2UsIHdlYmtpdF9pY29uX2RhdGFiYXNlLCBHX1RZUEVfT0JKRUNUKTsKK0dfREVG
SU5FX1RZUEUoV2ViS2l0SWNvbkRhdGFiYXNlLCB3ZWJraXRfaWNvbl9kYXRhYmFzZSwgR19UWVBF
X09CSkVDVCkKKwordHlwZWRlZiBWZWN0b3I8T3duUHRyPFBlbmRpbmdJY29uUmVxdWVzdD4gPiBQ
ZW5kaW5nSWNvblJlcXVlc3RWZWN0b3I7Cit0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBQZW5kaW5n
SWNvblJlcXVlc3RWZWN0b3IqPiBQZW5kaW5nSWNvblJlcXVlc3RNYXA7CiAKIHN0cnVjdCBfV2Vi
S2l0SWNvbkRhdGFiYXNlUHJpdmF0ZSB7CiAgICAgR093blB0cjxnY2hhcj4gcGF0aDsKKyAgICBJ
Y29uRGF0YWJhc2VDbGllbnRHdGsgaWNvbkRhdGFiYXNlQ2xpZW50OworICAgIFBlbmRpbmdJY29u
UmVxdWVzdE1hcCBwZW5kaW5nSWNvblJlcXVlc3RzOworICAgIGJvb2wgaW1wb3J0RmluaXNoZWQ7
CiB9OwogCitzdGF0aWMgdm9pZCB3ZWJraXRJY29uRGF0YWJhc2VJY29uTG9hZGVkKFdlYktpdElj
b25EYXRhYmFzZSogZGF0YWJhc2UsIFdlYktpdFdlYkZyYW1lKiwgY29uc3QgY2hhciogZnJhbWVV
UkkpCit7CisgICAgLy8gUmV0YWluIHRoZSBpY29uIHdoZW4gbG9hZGVkIHRvIG1ha2Ugc3VyZSBp
dCdsbCBiZSBhdmFpbGFibGUKKyAgICAvLyB3aGVuIHJlcXVlc3RlZCBsYXRlciBieSB3ZWJraXRf
aWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYqKCkuCisgICAgLy8gSWNvbiByZWNvcmRzIGFy
ZSByZWZjb3VudGVkLCBzbyB3ZSBqdXN0IGtlZXAgb3VyIG93biByZWZlcmVuY2UgdG8gbWFrZSBz
dXJlCisgICAgLy8gdGhlIGljb24gcmVjb3JkIGlzIG5vdCBkZWxldGVkLgorICAgIFdlYkNvcmU6
Omljb25EYXRhYmFzZSgpLnJldGFpbkljb25Gb3JQYWdlVVJMKFN0cmluZzo6ZnJvbVVURjgoZnJh
bWVVUkkpKTsKK30KKwogc3RhdGljIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2VfZmluYWxpemUo
R09iamVjdCogb2JqZWN0KQogewogICAgIC8vIENhbGwgQysrIGRlc3RydWN0b3JzLCB0aGUgcmV2
ZXJzZSBvZiAncGxhY2VtZW50IG5ldyBzeW50YXgnCkBAIC0xODAsNiArMjk0LDkgQEAgc3RhdGlj
IHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2VfaW5pdChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFi
YXNlKQogICAgIGRhdGFiYXNlLT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKGRh
dGFiYXNlLCBXRUJLSVRfVFlQRV9JQ09OX0RBVEFCQVNFLCBXZWJLaXRJY29uRGF0YWJhc2VQcml2
YXRlKTsKICAgICAvLyAncGxhY2VtZW50IG5ldyBzeW50YXgnLCBzZWUgd2Via2l0d2Vidmlldy5j
cHAKICAgICBuZXcgKGRhdGFiYXNlLT5wcml2KSBXZWJLaXRJY29uRGF0YWJhc2VQcml2YXRlKCk7
CisKKyAgICAvLyBDb25uZWN0IHRvIG91ciBvd24gaWNvbi1sb2FkZWQgc2lnbmFsLCBzaW5jZSB0
aGVyZSBhcmUgbm8gbWVtYmVyIGZvciBpdCBjbGFzcyBzdHJ1Y3QuCisgICAgZ19zaWduYWxfY29u
bmVjdChkYXRhYmFzZSwgImljb24tbG9hZGVkIiwgR19DQUxMQkFDSyh3ZWJraXRJY29uRGF0YWJh
c2VJY29uTG9hZGVkKSwgMCk7CiB9CiAKIC8qKgpAQCAtMjI1LDE2ICszNDIsMjIgQEAgdm9pZCB3
ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNl
LCBjb25zdCBnY2hhciogcGEKICAgICBpZiAoZGF0YWJhc2UtPnByaXYtPnBhdGguZ2V0KCkpCiAg
ICAgICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLmNsb3NlKCk7CiAKKyAgICBkYXRhYmFzZS0+
cHJpdi0+aW1wb3J0RmluaXNoZWQgPSBmYWxzZTsKICAgICBpZiAoIShwYXRoICYmIHBhdGhbMF0p
KSB7CiAgICAgICAgIGRhdGFiYXNlLT5wcml2LT5wYXRoLnNldCgwKTsKICAgICAgICAgV2ViQ29y
ZTo6aWNvbkRhdGFiYXNlKCkuc2V0RW5hYmxlZChmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBkYXRhYmFzZS0+cHJpdi0+cGF0aC5zZXQoZ19zdHJkdXAocGF0aCkpOwotCisg
ICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc2V0Q2xpZW50KCZkYXRhYmFzZS0+cHJpdi0+aWNv
bkRhdGFiYXNlQ2xpZW50KTsKKyAgICBXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmRlbGF5RGF0YWJh
c2VDbGVhbnVwKCk7CiAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc2V0RW5hYmxlZCh0cnVl
KTsKLSAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5vcGVuKFdlYkNvcmU6OmZpbGVuYW1lVG9T
dHJpbmcoZGF0YWJhc2UtPnByaXYtPnBhdGguZ2V0KCkpLCBXZWJDb3JlOjpJY29uRGF0YWJhc2U6
OmRlZmF1bHREYXRhYmFzZUZpbGVuYW1lKCkpOworICAgIGlmICghV2ViQ29yZTo6aWNvbkRhdGFi
YXNlKCkub3BlbihXZWJDb3JlOjpmaWxlbmFtZVRvU3RyaW5nKHBhdGgpLCBXZWJDb3JlOjpJY29u
RGF0YWJhc2U6OmRlZmF1bHREYXRhYmFzZUZpbGVuYW1lKCkpKSB7CisgICAgICAgIFdlYkNvcmU6
Okljb25EYXRhYmFzZTo6YWxsb3dEYXRhYmFzZUNsZWFudXAoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGRhdGFiYXNlLT5wcml2LT5wYXRoLnNldChnX3N0cmR1cChwYXRoKSk7CiAK
ICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwogICAgIGlmICghaW5pdGlhbGl6
ZWQpIHsKQEAgLTI1OSwyNyArMzgyLDM4IEBAIGdjaGFyKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9n
ZXRfaWNvbl91cmkoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoCiB7CiAg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2Up
LCAwKTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChwYWdlVVJJLCAwKTsKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogCiAgICAgU3RyaW5nIHBhZ2VVUkwgPSBTdHJpbmc6OmZyb21VVEY4
KHBhZ2VVUkkpOwogICAgIHJldHVybiBnX3N0cmR1cChXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5z
eW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKHBhZ2VVUkwpLnV0ZjgoKS5kYXRhKCkpOwogfQog
CitzdGF0aWMgR2RrUGl4YnVmKiBnZXRJY29uUGl4YnVmU3luY2hyb25vdXNseShXZWJLaXRJY29u
RGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICAvLyBUaGUgZXhhY3Qgc2l6ZSB3ZSBwYXNzIGlzIGlycmVs
ZXZhbnQgdG8gdGhlIFdlYkNvcmU6Omljb25EYXRhYmFzZSBjb2RlLgorICAgIC8vIFdlIG11c3Qg
cGFzcyBzb21ldGhpbmcgZ3JlYXRlciB0aGFuIDB4MCB0byBnZXQgYSBwaXhidWYuCisgICAgV2Vi
Q29yZTo6SW1hZ2UqIGljb24gPSBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0lj
b25Gb3JQYWdlVVJMKHBhZ2VVUkwsIFdlYkNvcmU6OkludFNpemUoMTYsIDE2KSk7CisgICAgcmV0
dXJuIGljb24gPyBpY29uLT5nZXRHZGtQaXhidWYoKSA6IDA7Cit9CisKIC8qKgogICogd2Via2l0
X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmOgogICogQGRhdGFiYXNlOiBhICNXZWJLaXRJ
Y29uRGF0YWJhc2UKICAqIEBwYWdlX3VyaTogVVJJIG9mIHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhl
IGljb24KICAqCi0gKiBPYnRhaW5zIGEgI0dka1BpeGJ1ZiBvZiB0aGUgZmF2aWNvbiBmb3IgdGhl
IGdpdmVuIHBhZ2UgVVJJLCBvcgotICogYSBkZWZhdWx0IGljb24gaWYgdGhlcmUgaXMgbm8gaWNv
biBmb3IgdGhlIGdpdmVuIHBhZ2UuIFVzZQorICogT2J0YWlucyBhICNHZGtQaXhidWYgb2YgdGhl
IGZhdmljb24gZm9yIHRoZSBnaXZlbiBwYWdlIFVSSSwgb3IgJU5VTEwKKyAqIGlmIHRoZXJlIGlz
IG5vIGljb24gZm9yIHRoZSBnaXZlbiBwYWdlIG9yIGl0IGhhc24ndCBiZWVuIGxvYWRlZCB5ZXQu
IFVzZQogICogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpKCkgaWYgeW91IG5lZWQg
dG8gZGlzdGluZ3Vpc2ggdGhlc2UgY2FzZXMuCi0gKiBVc3VhbGx5IHlvdSB3YW50IHRvIGNvbm5l
Y3QgdG8gV2ViS2l0SWNvbkRhdGFiYXNlOjppY29uLWxvYWRlZCBhbmQgY2FsbCB0aGlzCisgKiBU
byBtYWtlIHN1cmUgdGhpcyBtZXRob2QgcmV0dXJuIHdpbGwgcmV0dXJuIGEgdmFsaWQgaWNvbiwg
d2hlbiB0aGUgZ2l2ZW4gVVJJCisgKiBoYXMgb25lLCB5b3Ugc2hvdWxkIGNvbm5lY3QgdG8gV2Vi
S2l0SWNvbkRhdGFiYXNlOjppY29uLWxvYWRlZCBhbmQgY2FsbCB0aGlzCiAgKiBtZXRob2QgaW4g
dGhlIGNhbGxiYWNrLgogICoKICAqIFRoZSBwaXhidWYgd2lsbCBoYXZlIHRoZSBsYXJnZXN0IHNp
emUgcHJvdmlkZWQgYnkgdGhlIHNlcnZlciBhbmQgc2hvdWxkCiAgKiBiZSByZXNpemVkIGJlZm9y
ZSBpdCBpcyBkaXNwbGF5ZWQuCi0gKiBTZWUgYWxzbyB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25f
cGl4YnVmKCkuCiAgKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyByZWZlcmVu
Y2UgdG8gYSAjR2RrUGl4YnVmLCBvciAlTlVMTAorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwp
OiBhIG5ldyByZWZlcmVuY2UgdG8gYSAjR2RrUGl4YnVmLCBvciAlTlVMTCBpZiB0aGUgZ2l2ZW4K
KyAqIFVSSSBkb2Vzbid0IGhhdmUgYW4gaWNvbiBvciBpdCBoYXNuJ3QgYmVlbiBsb2FkZWQgeWV0
LgogICoKICAqIFNpbmNlOiAxLjMuMTMKICAqKi8KQEAgLTI4OCwxNiArNDIyLDE5MCBAQCBHZGtQ
aXhidWYqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZihXZWJLaXRJY29uRGF0
YWJhc2UqIGRhdGFiYXNlLCBjbwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19J
Q09OX0RBVEFCQVNFKGRhdGFiYXNlKSwgMCk7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocGFn
ZVVSSSwgMCk7CiAKKyAgICByZXR1cm4gZ2V0SWNvblBpeGJ1ZlN5bmNocm9ub3VzbHkoZGF0YWJh
c2UsIFN0cmluZzo6ZnJvbVVURjgocGFnZVVSSSkpOworfQorCitzdGF0aWMgUGVuZGluZ0ljb25S
ZXF1ZXN0VmVjdG9yKiB3ZWJraXRJY29uRGF0YWJhc2VHZXRPckNyZWF0ZVJlcXVlc3RzKFdlYktp
dEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCkKK3sKKyAgICBQ
ZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJ
Y29uUmVxdWVzdHMuZ2V0KHBhZ2VVUkwpOworICAgIGlmICghaWNvbnMpIHsKKyAgICAgICAgaWNv
bnMgPSBuZXcgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yOworICAgICAgICBkYXRhYmFzZS0+cHJp
di0+cGVuZGluZ0ljb25SZXF1ZXN0cy5zZXQocGFnZVVSTCwgaWNvbnMpOworICAgIH0KKworICAg
IHJldHVybiBpY29uczsKK30KKworc3RhdGljIHZvaWQgd2Via2l0SWNvbkRhdGFiYXNlRGVsZXRl
UmVxdWVzdHMoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgUGVuZGluZ0ljb25SZXF1ZXN0
VmVjdG9yKiByZXF1ZXN0cywgY29uc3QgU3RyaW5nJiBwYWdlVVJMKQoreworICAgIGRhdGFiYXNl
LT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLnJlbW92ZShwYWdlVVJMKTsKKyAgICBkZWxldGUg
cmVxdWVzdHM7Cit9CisKK3N0YXRpYyB2b2lkIGdldEljb25QaXhidWZDYW5jZWxsZWQodm9pZCog
dXNlckRhdGEpCit7CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0ID0gc3RhdGljX2Nh
c3Q8UGVuZGluZ0ljb25SZXF1ZXN0Kj4odXNlckRhdGEpOworICAgIHJlcXVlc3QtPmFzeW5jUmVz
dWx0Q2FuY2VsKCk7CisKKyAgICBjb25zdCBTdHJpbmcmIHBhZ2VVUkwgPSByZXF1ZXN0LT5wYWdl
VVJJKCk7CisgICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNv
bl9kYXRhYmFzZSgpOworICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciogaWNvbnMgPSBkYXRh
YmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5nZXQocGFnZVVSTCk7CisgICAgaWYgKCFp
Y29ucykKKyAgICAgICAgcmV0dXJuOworCisgICAgc2l6ZV90IGl0ZW1JbmRleCA9IGljb25zLT5m
aW5kKHJlcXVlc3QpOworICAgIGlmIChpdGVtSW5kZXggIT0gbm90Rm91bmQpCisgICAgICAgIGlj
b25zLT5yZW1vdmUoaXRlbUluZGV4KTsKKyAgICBpZiAoaWNvbnMtPmlzRW1wdHkoKSkKKyAgICAg
ICAgd2Via2l0SWNvbkRhdGFiYXNlRGVsZXRlUmVxdWVzdHMoZGF0YWJhc2UsIGljb25zLCBwYWdl
VVJMKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0SWNvbkRhdGFiYXNlR2V0SWNvblBpeGJ1ZkNh
bmNlbGxlZChHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBQZW5kaW5nSWNvblJlcXVlc3QqIHJl
cXVlc3QpCit7CisgICAgLy8gSGFuZGxlIGNhbmNlbGxlZCBpbiBhIGluIGlkbGUgc2luY2UgaXQg
bWlnaHQgYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZC4KKyAgICBjYWxsT25NYWluVGhyZWFkKGdl
dEljb25QaXhidWZDYW5jZWxsZWQsIHJlcXVlc3QpOworfQorCisvKioKKyAqIHdlYmtpdF9pY29u
X2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZjoKKyAqIEBkYXRhYmFzZTogYSAjV2ViS2l0SWNvbkRh
dGFiYXNlCisgKiBAcGFnZV91cmk6IFVSSSBvZiB0aGUgcGFnZSBjb250YWluaW5nIHRoZSBpY29u
CisgKiBAY2FuY2VsbGFibGU6IEEgI0dDYW5jZWxsYWJsZSBvciAlTlVMTC4KKyAqIEBjYWxsYmFj
azogKGFsbG93LW5vbmUpOiBBICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUg
cmVxdWVzdCBpcworICogICAgICAgICAgICBzYXRpc2ZpZWQgb3IgJU5VTEwgaWYgeW91IGRvbid0
IGNhcmUgYWJvdXQgdGhlIHJlc3VsdC4KKyAqIEB1c2VyX2RhdGE6IFRoZSBkYXRhIHRvIHBhc3Mg
dG8gQGNhbGxiYWNrLgorICoKKyAqIEFzeW5jaHJvbm91c2x5IG9idGFpbnMgYSAjR2RrUGl4YnVm
IG9mIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZSBVUkkuCisgKgorICogVGhpcyBpcyBh
biBhc3luY2hyb25vdXMgbWV0aG9kLiBXaGVuIHRoZSBvcGVyYXRpb24gaXMgZmluaXNoZWQsIGNh
bGxiYWNrIHdpbGwKKyAqIGJlIGludm9rZWQuIFlvdSBjYW4gdGhlbiBjYWxsIHdlYmtpdF9pY29u
X2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5pc2goKQorICogdG8gZ2V0IHRoZSByZXN1bHQg
b2YgdGhlIG9wZXJhdGlvbi4KKyAqIFNlZSBhbHNvIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9p
Y29uX3BpeGJ1ZigpLgorICoKKyAqIFNpbmNlOiAxLjcuNgorICoqLwordm9pZCB3ZWJraXRfaWNv
bl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmMoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRh
YmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkksIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdB
c3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHBhZ2VVUkkpOworCisgICAgR1JlZlB0cjxHU2ltcGxlQXN5bmNSZXN1
bHQ+IHJlc3VsdCA9IGFkb3B0R1JlZihnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3KEdfT0JKRUNU
KGRhdGFiYXNlKSwgY2FsbGJhY2ssIHVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWlu
dGVycHJldF9jYXN0PGdwb2ludGVyPih3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhi
dWYpKSk7CisKICAgICBTdHJpbmcgcGFnZVVSTCA9IFN0cmluZzo6ZnJvbVVURjgocGFnZVVSSSk7
Ci0gICAgLy8gVGhlIGV4YWN0IHNpemUgd2UgcGFzcyBpcyBpcnJlbGV2YW50IHRvIHRoZSBXZWJD
b3JlOjppY29uRGF0YWJhc2UgY29kZS4KLSAgICAvLyBXZSBtdXN0IHBhc3Mgc29tZXRoaW5nIGdy
ZWF0ZXIgdGhhbiAwLCAwIHRvIGdldCBhIHBpeGJ1Zi4KLSAgICBXZWJDb3JlOjpJbWFnZSogaWNv
biA9IFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwocGFn
ZVVSTCwgV2ViQ29yZTo6SW50U2l6ZSgxNiwgMTYpKTsKLSAgICBpZiAoIWljb24pCisgICAgUGVu
ZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0ID0gbmV3IFBlbmRpbmdJY29uUmVxdWVzdChwYWdlVVJM
LCByZXN1bHQuZ2V0KCksIGNhbmNlbGxhYmxlKTsKKworICAgIC8vIFJlZ2lzdGVyIGljb24gcmVx
dWVzdCBiZWZvcmUgYXNraW5nIGZvciB0aGUgaWNvbiB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMu
CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBpY29ucyA9IHdlYmtpdEljb25EYXRhYmFz
ZUdldE9yQ3JlYXRlUmVxdWVzdHMoZGF0YWJhc2UsIHBhZ2VVUkwpOworICAgIEFTU0VSVChpY29u
cyk7CisgICAgaWNvbnMtPmFwcGVuZChhZG9wdFB0cihyZXF1ZXN0KSk7CisKKyAgICBHZGtQaXhi
dWYqIHBpeGJ1ZiA9IGdldEljb25QaXhidWZTeW5jaHJvbm91c2x5KGRhdGFiYXNlLCBwYWdlVVJM
KTsKKyAgICBpZiAoIXBpeGJ1ZiAmJiAhZGF0YWJhc2UtPnByaXYtPmltcG9ydEZpbmlzaGVkKSB7
CisgICAgICAgIC8vIEltcG9ydCBpcyBvbmdvaW5nLCB0aGVyZSBpY29uIHdlIHdhbnQgbWlnaHQg
bG9hZCBsYXRlci4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJlcXVlc3QtPmFzeW5j
UmVzdWx0Q29tcGxldGVJbklkbGUocGl4YnVmKTsKKworICAgIEFTU0VSVChpY29ucy0+bGFzdCgp
LmdldCgpID09IHJlcXVlc3QpOworICAgIGljb25zLT5yZW1vdmVMYXN0KCk7CisgICAgaWYgKGlj
b25zLT5pc0VtcHR5KCkpCisgICAgICAgIHdlYmtpdEljb25EYXRhYmFzZURlbGV0ZVJlcXVlc3Rz
KGRhdGFiYXNlLCBpY29ucywgcGFnZVVSTCk7Cit9CisKKy8qKgorICogd2Via2l0X2ljb25fZGF0
YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2ZpbmlzaDoKKyAqIEBkYXRhYmFzZTogYSAjV2ViS2l0SWNv
bkRhdGFiYXNlCisgKiBAcmVzdWx0OiBBICNHQXN5bmNSZXN1bHQgb2J0YWluZWQgZnJvbSB0aGUg
I0dBc3luY1JlYWR5Q2FsbGJhY2sgcGFzc2VkIHRvIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9p
Y29uX3BpeGJ1Zl9hc3luYygpCisgKiBAZXJyb3I6IFJldHVybiBsb2NhdGlvbiBmb3IgZXJyb3Ig
b3IgJU5VTEwuCisgKgorICogRmluaXNoZXMgYW4gb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJr
aXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmMoKS4KKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IHJlZmVyZW5jZSB0byBhICNHZGtQaXhidWYsIG9yICVO
VUxMLgorICoKKyAqIFNpbmNlOiAxLjcuNgorICovCitHZGtQaXhidWYqIHdlYmtpdF9pY29uX2Rh
dGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5pc2goV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIEdFcnJvcioqIGVycm9yKQoreworICAgIEdTaW1wbGVB
c3luY1Jlc3VsdCogc2ltcGxlUmVzdWx0ID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUKHJlc3VsdCk7
CisgICAgZ193YXJuX2lmX2ZhaWwoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9zb3VyY2VfdGFn
KHNpbXBsZVJlc3VsdCkgPT0gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmKTsK
KworICAgIGlmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfcHJvcGFnYXRlX2Vycm9yKHNpbXBsZVJl
c3VsdCwgZXJyb3IpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBHZGtQaXhidWYqIHBpeGJ1ZiA9
IGljb24tPmdldEdka1BpeGJ1ZigpOwotICAgIGlmICghcGl4YnVmKQorCisgICAgR0NhbmNlbGxh
YmxlKiBjYW5jZWxsYWJsZSA9IHN0YXRpY19jYXN0PEdDYW5jZWxsYWJsZSo+KGdfb2JqZWN0X2dl
dF9kYXRhKEdfT0JKRUNUKHNpbXBsZVJlc3VsdCksICJjYW5jZWxsYWJsZSIpKTsKKyAgICBpZiAo
Y2FuY2VsbGFibGUgJiYgZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoY2FuY2VsbGFibGUpKSB7
CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJS
T1JfQ0FOQ0VMTEVELCBfKCJPcGVyYXRpb24gd2FzIGNhbmNlbGxlZCIpKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCisgICAgR2RrUGl4YnVmKiBpY29uID0gc3RhdGljX2Nhc3Q8R2RrUGl4
YnVmKj4oZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIoc2ltcGxlUmVz
dWx0KSk7CisgICAgaWYgKCFpY29uKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8R2RrUGl4YnVmKj4oZ19vYmplY3RfcmVmKHBpeGJ1ZikpOworCisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEdka1BpeGJ1Zio+KGdfb2JqZWN0X3JlZihpY29uKSk7Cit9CisKK3ZvaWQg
d2Via2l0SWNvbkRhdGFiYXNlUmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKFdlYktpdEljb25E
YXRhYmFzZSogZGF0YWJhc2UsIFN0cmluZyAmcGFnZVVSSSwgV2ViQ29yZTo6RnJhbWVMb2FkZXJD
bGllbnQqIGNsaWVudCkKK3sKKyAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0g
d2Via2l0SWNvbkRhdGFiYXNlR2V0T3JDcmVhdGVSZXF1ZXN0cyhkYXRhYmFzZSwgcGFnZVVSSSk7
CisgICAgQVNTRVJUKGljb25zKTsKKyAgICBpY29ucy0+YXBwZW5kKGFkb3B0UHRyKG5ldyBQZW5k
aW5nSWNvblJlcXVlc3QocGFnZVVSSSwgY2xpZW50KSkpOworfQorCit2b2lkIHdlYmtpdEljb25E
YXRhYmFzZVVucmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKFdlYktpdEljb25EYXRhYmFzZSog
ZGF0YWJhc2UsIFN0cmluZyAmcGFnZVVSSSwgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQqIGNs
aWVudCkKK3sKKyAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gZGF0YWJhc2Ut
PnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMuZ2V0KHBhZ2VVUkkpOworICAgIGlmICghaWNvbnMp
CisgICAgICAgIHJldHVybjsKKyAgICB3ZWJraXRJY29uRGF0YWJhc2VEZWxldGVSZXF1ZXN0cyhk
YXRhYmFzZSwgaWNvbnMsIHBhZ2VVUkkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRJY29uRGF0
YWJhc2VQcm9jZXNzUGVuZGluZ0ljb25zRm9yVVJJKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJh
c2UsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCkKK3sKKyAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0
b3IqIGljb25zID0gZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMuZ2V0KHBhZ2VV
UkwpOworICAgIGlmICghaWNvbnMpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgaWNvbnMtPnNpemUoKTsgKytpKSB7CisgICAgICAgIFBlbmRpbmdJY29uUmVx
dWVzdCogcmVxdWVzdCA9IGljb25zLT5hdChpKS5nZXQoKTsKKyAgICAgICAgaWYgKHJlcXVlc3Qt
PmZyYW1lTG9hZGVyQ2xpZW50KCkpCisgICAgICAgICAgICByZXF1ZXN0LT5mcmFtZUxvYWRlckRp
c3BhdGNoRGlkUmVjZWl2ZUljb24oKTsKKyAgICAgICAgZWxzZSBpZiAocmVxdWVzdC0+YXN5bmNS
ZXN1bHQoKSkKKyAgICAgICAgICAgIHJlcXVlc3QtPmFzeW5jUmVzdWx0Q29tcGxldGUoZ2V0SWNv
blBpeGJ1ZlN5bmNocm9ub3VzbHkoZGF0YWJhc2UsIHBhZ2VVUkwpKTsKKyAgICB9CisgICAgd2Vi
a2l0SWNvbkRhdGFiYXNlRGVsZXRlUmVxdWVzdHMoZGF0YWJhc2UsIGljb25zLCBwYWdlVVJMKTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0SWNvbkRhdGFiYXNlSW1wb3J0RmluaXNoZWQoV2ViS2l0
SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIGRhdGFiYXNlLT5wcml2LT5pbXBvcnRGaW5pc2hlZCA9IHRydWU7CisKKyAgICAvLyBJbXBv
cnQgaXMgY29tcGxldGUsIHByb2Nlc3MgcGVuZGluZyByZXF1ZXN0cyBmb3IgcGFnZXMgdGhhdCBh
cmUgbm90IGluIHRoZSBkYXRhYmFzZSwKKyAgICAvLyBzaW5jZSBkaWRJbXBvcnRJY29uRGF0YUZv
clBhZ2VVUkwoKSB3aWxsIG5ldmVyIGJlIGNhbGxlZCBmb3IgdGhlbS4KKyAgICAvLyBGb3IgYXN5
bmMgcmVxdWVzdHMgd2UgbmVlZCB0byBjb21wbGV0ZSB0aGUgb3BlcmF0aW9uLCB3aGlsZSBmb3Ig
ZnJhbWUgbG9hZGVyCisgICAgLy8gcmVxdWVzdHMgd2Ugb25seSBuZWVkIHRvIGRlbGV0ZSB0aGUg
cmVxdWVzdCBzbyB0aGF0IGljb24tbG9hZGVkIHdvbid0IGJlIGVtaXR0ZWQuCisgICAgVmVjdG9y
PFN0cmluZz4gdG9EZWxldGVVUkxzOworICAgIFBlbmRpbmdJY29uUmVxdWVzdE1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMuZW5kKCk7
CisgICAgZm9yIChQZW5kaW5nSWNvblJlcXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBk
YXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5iZWdpbigpOyBpdGVyICE9IGVuZDsg
KytpdGVyKSB7CisgICAgICAgIFN0cmluZyBpY29uVVJMID0gV2ViQ29yZTo6aWNvbkRhdGFiYXNl
KCkuc3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChpdGVyLT5maXJzdCk7CisgICAgICAgIGlm
ICghaWNvblVSTC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBQ
ZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gaXRlci0+c2Vjb25kOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGljb25zLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
UGVuZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0ID0gaWNvbnMtPmF0KGkpLmdldCgpOworICAgICAg
ICAgICAgaWYgKHJlcXVlc3QtPmFzeW5jUmVzdWx0KCkpCisgICAgICAgICAgICAgICAgcmVxdWVz
dC0+YXN5bmNSZXN1bHRDb21wbGV0ZSgwKTsKKyAgICAgICAgfQorCisgICAgICAgIHRvRGVsZXRl
VVJMcy5hcHBlbmQoaXRlci0+Zmlyc3QpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdG9EZWxldGVVUkxzLnNpemUoKTsgKytpKQorICAgICAgICB3ZWJraXRJY29uRGF0YWJh
c2VEZWxldGVSZXF1ZXN0cyhkYXRhYmFzZSwgZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVx
dWVzdHMuZ2V0KHRvRGVsZXRlVVJMc1tpXSksIHRvRGVsZXRlVVJMc1tpXSk7CiB9CiAKIC8qKgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5o
IGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oCmluZGV4IDVl
YWQ2MDNhYmRkZjEyNGUzNmQyZjVhZGM2MjJhYjU1ZjM4YzE4YmIuLjkwYjZkYzY2MDI1MjQzMjI1
ZjhkMmMyNWI0MWI2MTFhMzAyYWU2NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRpY29uZGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0aWNvbmRhdGFiYXNlLmgKQEAgLTUzLDI1ICs1MywzNyBAQCBzdHJ1Y3QgX1dlYktpdElj
b25EYXRhYmFzZUNsYXNzIHsKIH07CiAKIFdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF9pY29uX2Rh
dGFiYXNlX2dldF90eXBlICAgICAgICAgICAgKHZvaWQpOword2Via2l0X2ljb25fZGF0YWJhc2Vf
Z2V0X3R5cGUgICAgICAgICAgICAgICAodm9pZCk7CiAKIFdFQktJVF9BUEkgY29uc3QgZ2NoYXIq
Ci13ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0aCAgICAgICAgICAgIChXZWJLaXRJY29uRGF0
YWJhc2UqIGRhdGFiYXNlKTsKK3dlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9wYXRoICAgICAgICAg
ICAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpOwogCiBXRUJLSVRfQVBJIHZvaWQK
LXdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoICAgICAgICAgICAgKFdlYktpdEljb25EYXRh
YmFzZSogZGF0YWJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBnY2hhciogICAgICAgIHBhdGgpOword2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3Bh
dGggICAgICAgICAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiAgICAgICAg
cGF0aCk7CiAKIFdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl91cmkgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAgICBwYWdlX3Vy
aSk7Cit3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmkgICAgICAgICAgIChXZWJLaXRJ
Y29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAgICBwYWdlX3VyaSk7CiAKIFdFQktJVF9BUEkg
R2RrUGl4YnVmKgotd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmICAgICAoV2Vi
S2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiAgICAgICAgcGFnZV91cmkpOword2Via2l0X2ljb25f
ZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmICAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRh
YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGdjaGFyKiAgICAgICAgcGFnZV91cmkpOwogCiBXRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9pY29u
X2RhdGFiYXNlX2NsZWFyICAgICAgICAgICAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJh
c2UpOword2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2FzeW5jICAoV2ViS2l0
SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiAgICAgICAgcGFnZV91cmksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUqICAgICAgIGNhbmNl
bGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Fz
eW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgdXNlcl9kYXRhKTsKKworV0VCS0lU
X0FQSSBHZGtQaXhidWYqCit3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfZmlu
aXNoIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0KiAgICAgICByZXN1bHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IqKiAgICAgICAg
ICAgIGVycm9yKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVh
ciAgICAgICAgICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKTsKIAogR19F
TkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGlj
b25kYXRhYmFzZXByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29u
ZGF0YWJhc2Vwcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTE5ZDNkYTQ5N2ZkOWEyMmI2N2VlZTcwN2Qy
ZjQ3YjQwMDM2NzliOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIHdlYmtpdGljb25kYXRhYmFzZXBy
aXZhdGVfaAorI2RlZmluZSB3ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlX2gKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgRnJhbWVMb2FkZXJDbGllbnQ7Cit9CisKK3ZvaWQgd2Via2l0SWNv
bkRhdGFiYXNlUmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKFdlYktpdEljb25EYXRhYmFzZSos
IFN0cmluZyAmcGFnZVVSSSwgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQqKTsKK3ZvaWQgd2Vi
a2l0SWNvbkRhdGFiYXNlVW5yZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oV2ViS2l0SWNvbkRh
dGFiYXNlKiwgU3RyaW5nICZwYWdlVVJJLCBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudCopOwor
CisjZW5kaWYgLy8gd2Via2l0aWNvbmRhdGFiYXNlcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDdiZTY4YjVmODUxYjJlYWJlNTNj
NTZlNDY4MTllMGNlMTQ0MTM5MS4uOTMxZTFiMGVmMGEzN2JiYWFlZGRmYzkxZGY1MWE4YzM0Nzg2
ZmI3MiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE3IEBACisyMDExLTA5LTAyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4gYW5kIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dUS10gV2ViS2l0SWNvbkRhdGFiYXNlIGRvZXNuJ3Qga2VlcCBpY29u
cyBjYWNoZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU2MjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIHN1cHBvcnQgZm9yIGZhdmljb25zIGluIEd0a0xhdW5jaGVyLgorCisgICAgICAgICogR3Rr
TGF1bmNoZXIvbWFpbi5jOgorICAgICAgICAoYWN0aXZhdGVVcmlFbnRyeUNiKToKKyAgICAgICAg
KGljb25Mb2FkZWRDYik6CisgICAgICAgIChjcmVhdGVCcm93c2VyKToKKwogMjAxMi0wMi0xNiAg
Q3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBuZXcg
UXQgcGVyZm9ybWFuY2UgdGVzdGVyIGJvdCB0byBidWlsZC53ZWJraXQub3JnCmRpZmYgLS1naXQg
YS9Ub29scy9HdGtMYXVuY2hlci9tYWluLmMgYi9Ub29scy9HdGtMYXVuY2hlci9tYWluLmMKaW5k
ZXggZmJlODMzMWUxODcxZTZiZmY5YzM4ZTQ5YmFlZTE5YzcyMTFhOWMxZi4uYTdkMDZiYjFiNGYx
MDMzZmVmYTIyNWEwYmNjNTVjY2UxMGVlZjM4MSAxMDA2NDQKLS0tIGEvVG9vbHMvR3RrTGF1bmNo
ZXIvbWFpbi5jCisrKyBiL1Rvb2xzL0d0a0xhdW5jaGVyL21haW4uYwpAQCAtNDAsNiArNDAsNyBA
QCBzdGF0aWMgdm9pZCBhY3RpdmF0ZVVyaUVudHJ5Q2IoR3RrV2lkZ2V0KiBlbnRyeSwgZ3BvaW50
ZXIgZGF0YSkKICAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3ID0gZ19vYmplY3RfZ2V0X2RhdGEo
R19PQkpFQ1QoZW50cnkpLCAid2ViLXZpZXciKTsKICAgICBjb25zdCBnY2hhciogdXJpID0gZ3Rr
X2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShlbnRyeSkpOwogICAgIGdfYXNzZXJ0KHVyaSk7Cisg
ICAgZ3RrX2VudHJ5X3NldF9pY29uX2Zyb21fcGl4YnVmKEdUS19FTlRSWShlbnRyeSksIEdUS19F
TlRSWV9JQ09OX1BSSU1BUlksIDApOwogICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh3ZWJW
aWV3LCB1cmkpOwogfQogCkBAIC0xMzQsNiArMTM1LDE0IEBAIHN0YXRpYyBnYm9vbGVhbiBydW5N
b2RhbERpYWxvZ0NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEd0a1dpZGdldCogb3BlbmVyV2lu
ZG93CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKK3N0YXRpYyB2b2lkIGljb25Mb2FkZWRDYihXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiBpY29uVVJJLCBHdGtXaWRnZXQqIHVyaUVu
dHJ5KQoreworICAgIEdka1BpeGJ1ZiAqaWNvbiA9IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9p
Y29uX3BpeGJ1Zih3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKSwgd2Via2l0X3dlYl92aWV3X2dl
dF91cmkod2ViVmlldykpOworICAgIGd0a19lbnRyeV9zZXRfaWNvbl9mcm9tX3BpeGJ1ZihHVEtf
RU5UUlkodXJpRW50cnkpLCBHVEtfRU5UUllfSUNPTl9QUklNQVJZLCBpY29uKTsKKyAgICBpZiAo
aWNvbikKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoaWNvbik7Cit9CisKIHN0YXRpYyBHdGtXaWRn
ZXQqIGNyZWF0ZUJyb3dzZXIoR3RrV2lkZ2V0KiB3aW5kb3csIEd0a1dpZGdldCogdXJpRW50cnks
IEd0a1dpZGdldCogc3RhdHVzYmFyLCBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHdGtXaWRnZXQq
IG9wZW5lcldpbmRvdykKIHsKICAgICBHdGtXaWRnZXQgKnNjcm9sbGVkV2luZG93ID0gZ3RrX3Nj
cm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7CkBAIC0xNDQsNiArMTUzLDcgQEAgc3RhdGlj
IEd0a1dpZGdldCogY3JlYXRlQnJvd3NlcihHdGtXaWRnZXQqIHdpbmRvdywgR3RrV2lkZ2V0KiB1
cmlFbnRyeSwgR3RrV2lkZ2UKICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6
OnRpdGxlIiwgR19DQUxMQkFDSyhub3RpZnlUaXRsZUNiKSwgd2luZG93KTsKICAgICBnX3NpZ25h
bF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhub3Rp
ZnlMb2FkU3RhdHVzQ2IpLCB1cmlFbnRyeSk7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3
LCAibm90aWZ5Ojpwcm9ncmVzcyIsIEdfQ0FMTEJBQ0sobm90aWZ5UHJvZ3Jlc3NDYiksIHdpbmRv
dyk7CisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiaWNvbi1sb2FkZWQiLCBHX0NBTExC
QUNLKGljb25Mb2FkZWRDYiksIHVyaUVudHJ5KTsKICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZp
ZXcsICJob3ZlcmluZy1vdmVyLWxpbmsiLCBHX0NBTExCQUNLKGxpbmtIb3ZlckNiKSwgc3RhdHVz
YmFyKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJjcmVhdGUtd2ViLXZpZXciLCBH
X0NBTExCQUNLKGNyZWF0ZVdlYlZpZXdDYiksIHdpbmRvdyk7CiAgICAgZ19zaWduYWxfY29ubmVj
dCh3ZWJWaWV3LCAid2ViLXZpZXctcmVhZHkiLCBHX0NBTExCQUNLKHdlYlZpZXdSZWFkeUNiKSwg
d2luZG93KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127545</attachid>
            <date>2012-02-17 00:46:25 -0800</date>
            <delta_ts>2012-03-06 09:44:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56200-20120217094623.patch</filename>
            <type>text/plain</type>
            <size>42250</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3OTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggMzE0MDgzMjdm
NmMwZTA1ZGM1N2YwMDkzYzhjNDYzZjJiMWMyYzFlNy4uMTBmZGNlNThlMzQ4YzE3MzAxNWQ2MGYy
YTk1YWE1YjFkZGRmYTYxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDEx
LTA5LTAyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4gYW5kIFNl
cmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10g
V2ViS2l0SWNvbkRhdGFiYXNlIGRvZXNuJ3Qga2VlcCBpY29ucyBjYWNoZWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MjAwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRk
IG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50
OjpyZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24pOiBXaGVuIHRoZQorICAgICAgICBpY29uIGlz
IGluIHRoZSBkYXRhYmFzZSwgYnV0IHRoZSBkYXRhIGlzIG5vdCBzdGlsbCBhdmFpbGFibGUsCisg
ICAgICAgIHJlZ2lzdGVyIGEgbm90aWZpY2F0aW9uIHRvIGRpc3BhdGNoIHJlY2VpdmVkIGljb24g
d2hlbiB0aGUgaWNvbgorICAgICAgICBkYXRhIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgKiB0ZXN0
cy90ZXN0aWNvbmRhdGFiYXNlLmM6IEFkZGVkLgorICAgICAgICAoc2VydmVyX2NhbGxiYWNrKToK
KyAgICAgICAgKGRlbGV0ZURhdGFiYXNlRmlsZUlmRXhpc3RzKToKKyAgICAgICAgKHRlc3RXZWJr
aXRJY29uRGF0YWJhc2VTZXRQYXRoKToKKyAgICAgICAgKGljb25EYXRhYmFzZUdldEljb25WYWxp
ZENhbGxiYWNrKToKKyAgICAgICAgKGljb25EYXRhYmFzZUdldEljb25JbnZhbGlkQ2FsbGJhY2sp
OgorICAgICAgICAoaWNvbkRhdGFiYXNlR2V0SWNvbkNhbmNlbGxlZENhbGxiYWNrKToKKyAgICAg
ICAgKGlkbGVRdWl0TG9vcENhbGxiYWNrKToKKyAgICAgICAgKGxvYWRVUkkpOgorICAgICAgICAo
aWNvbkRhdGFiYXNlR2V0SWNvblZhbGlkSWRsZSk6CisgICAgICAgIChpY29uRGF0YWJhc2VHZXRJ
Y29uSW52YWxpZElkbGUpOgorICAgICAgICAoaWNvbkRhdGFiYXNlR2V0SWNvbkNhbmNlbGxlZElk
bGUpOgorICAgICAgICAodGVzdFdlYmtpdEljb25EYXRhYmFzZUdldEljb25Bc3luYyk6CisgICAg
ICAgICh0ZXN0V2Via2l0SWNvbkRhdGFiYXNlR2V0SWNvblVSSSk6CisgICAgICAgICh0ZXN0V2Vi
a2l0SWNvbkRhdGFiYXNlUmVtb3ZlQWxsKToKKyAgICAgICAgKHRlc3RXZWJraXRJY29uRGF0YWJh
c2VDbG9zZURhdGFiYXNlKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIHdlYmtpdC93ZWJr
aXRpY29uZGF0YWJhc2UuY3BwOgorICAgICAgICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpwZXJm
b3JtSW1wb3J0KToKKyAgICAgICAgKEljb25EYXRhYmFzZUNsaWVudEd0azo6ZGlkUmVtb3ZlQWxs
SWNvbnMpOgorICAgICAgICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpkaWRJbXBvcnRJY29uVVJM
Rm9yUGFnZVVSTCk6CisgICAgICAgIChJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpZEltcG9ydElj
b25EYXRhRm9yUGFnZVVSTCk6CisgICAgICAgIChJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpZENo
YW5nZUljb25Gb3JQYWdlVVJMKToKKyAgICAgICAgKEljb25EYXRhYmFzZUNsaWVudEd0azo6ZGlk
RmluaXNoVVJMSW1wb3J0KToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6UGVuZGluZ0lj
b25SZXF1ZXN0KToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6flBlbmRpbmdJY29uUmVx
dWVzdCk6CisgICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OnBhZ2VVUkkpOgorICAgICAgICAo
UGVuZGluZ0ljb25SZXF1ZXN0OjpmcmFtZUxvYWRlckNsaWVudCk6CisgICAgICAgIChQZW5kaW5n
SWNvblJlcXVlc3Q6OmFzeW5jUmVzdWx0KToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6
YXN5bmNSZXN1bHRDb21wbGV0ZSk6CisgICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OmFzeW5j
UmVzdWx0Q29tcGxldGVJbklkbGUpOgorICAgICAgICAoUGVuZGluZ0ljb25SZXF1ZXN0Ojphc3lu
Y1Jlc3VsdENhbmNlbCk6CisgICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OmZyYW1lTG9hZGVy
RGlzcGF0Y2hEaWRSZWNlaXZlSWNvbik6CisgICAgICAgICh3ZWJraXRJY29uRGF0YWJhc2VJY29u
TG9hZGVkKTogUmV0YWluIHRoZSBpY29uIHdoZW4gbG9hZGVkIHRvCisgICAgICAgIG1ha2Ugc3Vy
ZSBpdCdsbCBiZSBhdmFpbGFibGUgd2hlbiByZXF1ZXN0ZWQgbGF0ZXIuCisgICAgICAgICh3ZWJr
aXRfaWNvbl9kYXRhYmFzZV9pbml0KToKKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX3Nl
dF9wYXRoKTogRGVsYXkgZGF0YWJhc2UgY2xlYW51cCBieSBkZWZhdWx0CisgICAgICAgIHRvIG1h
a2UgaWNvbnMgcGVyc2lzdGVudCBpbiB0aGUgZGF0YWJhc2UuCisgICAgICAgIChnZXRJY29uUGl4
YnVmU3luY2hyb25vdXNseSk6IEhlbHBlciBmdW5jdGlvbiB0byBjYWxsCisgICAgICAgIEljb25E
YXRhYmFzZTo6c3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTCgpLgorICAgICAgICAod2Via2l0
X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmKTogRml4IGRvYyBjb21tZW50cy4KKyAgICAg
ICAgKHdlYmtpdEljb25EYXRhYmFzZUdldE9yQ3JlYXRlUmVxdWVzdHMpOiBIZWxwZXIgZnVuY3Rp
b24gdG8gZ2V0CisgICAgICAgIHRoZSB2ZWN0b3Igb2YgcGVuZGluZyByZXF1ZXN0cyBmb3IgdGhl
IGdpdmVuIHVyaS4KKyAgICAgICAgKHdlYmtpdEljb25EYXRhYmFzZURlbGV0ZVJlcXVlc3RzKTog
SGVscGVyIGZ1bmN0aW9uIHRvIHJlbW92ZSB0aGUKKyAgICAgICAgdmVjdG9yIG9mIHBlbmRpbmcg
cmVxdWVzdHMgZm9yIHRoZSBnaXZlbiB1cmkuCisgICAgICAgIChnZXRJY29uUGl4YnVmQ2FuY2Vs
bGVkSWRsZSk6IENhbmNlbCB0aGUgcmVxdWVzdC4KKyAgICAgICAgKHdlYmtpdEljb25EYXRhYmFz
ZUdldEljb25QaXhidWZDYW5jZWxsZWQpOgorICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2Vf
Z2V0X2ljb25fcGl4YnVmX2FzeW5jKTogTmV3IG1ldGhvZCB0byBnZXQgYW4KKyAgICAgICAgaWNv
biBhc3luY2hyb25vdXNseS4KKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29u
X3BpeGJ1Zl9maW5pc2gpOiBGaW5pc2hlcyBhbgorICAgICAgICBvcGVyYXRpb24gc3RhcnRlZCB3
aXRoIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYygpLgorICAgICAg
ICAod2Via2l0SWNvbkRhdGFiYXNlUmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKTogUmVnaXN0
ZXIgZnJhbWUKKyAgICAgICAgbG9hZGVyIHRvIGJlIG5vdGlmaWVkIHdoZW4gdGhlIGljb24gZGF0
YSBpcyBhdmFpbGFibGUuCisgICAgICAgICh3ZWJraXRJY29uRGF0YWJhc2VVbnJlZ2lzdGVyRm9y
SWNvbk5vdGlmaWNhdGlvbik6IFVucmVnaXN0ZXIgYQorICAgICAgICBmcmFtZSBsb2FkZXIgbm90
aWZpY2F0aW9uIHJlcXVlc3QuCisgICAgICAgICh3ZWJraXRJY29uRGF0YWJhc2VQcm9jZXNzUGVu
ZGluZ0ljb25zRm9yVVJJKTogUHJvY2VzcyBwZW5kaW5nCisgICAgICAgIHJlcXVlc3RzIGZvciB0
aGUgZ2l2ZW4gdXJpLCBmb3IgYXN5bmMgb3BlcmF0aW9uIHJlcXVlc3RzIGl0CisgICAgICAgIGNv
bXBsZXRlcyB0aGUgb3BlcmF0aW9uLCB3aGlsZSBmb3IgZnJhbWUgbG9hZGVyIHJlcXVlc3RzIGl0
IGNhbGxzCisgICAgICAgIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVJY29u
KCkgdG8gbm90aWZ5IHRoZSBmcmFtZQorICAgICAgICBsb2FkZXIgdGhhdCBoZSBpY29uIGlzIG5v
dyBhdmFpbGFibGUuCisgICAgICAgICh3ZWJraXRJY29uRGF0YWJhc2VJbXBvcnRGaW5pc2hlZCk6
IFdoZW4gaW1wb3J0IGlzIGZpbmlzaGVkLCBjaGVjaworICAgICAgICBwZW5kaW5nIHJlcXVlc3Rz
IHRvIHByb2Nlc3MgYW5kIGRlbGV0ZSB0aGUgb25lcyB0aGF0IGFzayBmb3IgYW4KKyAgICAgICAg
aWNvbiB0aGF0IGRvZXNuJ3QgZXhpc3QgaW4gZGF0YWJhc2UuCisgICAgICAgICogd2Via2l0L3dl
YmtpdGljb25kYXRhYmFzZS5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRpY29uZGF0YWJhc2Vw
cml2YXRlLmg6IEFkZGVkLgorCiAyMDEyLTAyLTE2ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3Zp
bGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtzb3VwXSBNb3ZlIGltcG9ydGFudCBTb3VwU2Vz
c2lvbiBmZWF0dXJlIGluaXRpYWxpemF0aW9uIHRvIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZp
bGUuYW0KaW5kZXggNTY3ZDc5YmI5MDM1NGZkMWRhNDI4NGM1ZWZhYmJjZmFjNjFiYWVhZi4uNzc5
ZWNjYmZhYzA0ODY0NmEzZDQ4Mzg4NjkxMzRkODZjNjhjMmMwNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFr
ZWZpbGUuYW0KQEAgLTIyNyw2ICsyMjcsNyBAQCB3ZWJraXRndGtfc291cmNlcyArPSBcCiAJU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuY3BwIFwKIAlTb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aGl0dGVzdHJlc3VsdHByaXZhdGUuaCBcCiAJU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAgXAorCVNvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlLmggXAogCVNvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5jcHAgXAogCVNvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdHByaXZhdGUuaCBcCiAJU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXNwb25zZS5jcHAgXApAQCAtNDQ1LDYgKzQ0Niw3
IEBAIFRFU1RfUFJPR1MgKz0gXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0ZG9tZG9td2luZG93
IFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdGRvbW5vZGUgXAogCVByb2dyYW1zL3VuaXR0ZXN0
cy90ZXN0aHR0cGJhY2tlbmQgXAorCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0aWNvbmRhdGFiYXNl
IFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdGxvYWRpbmcgXAogCVByb2dyYW1zL3VuaXR0ZXN0
cy90ZXN0Z2xvYmFscyBcCiAJUHJvZ3JhbXMvdW5pdHRlc3RzL3Rlc3RtaW1laGFuZGxpbmcgXApA
QCAtNDkzLDYgKzQ5NSwxMSBAQCBQcm9ncmFtc191bml0dGVzdHNfdGVzdGh0dHBiYWNrZW5kX0NG
TEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0aHR0
cGJhY2tlbmRfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKIFByb2dyYW1zX3VuaXR0ZXN0
c190ZXN0aHR0cGJhY2tlbmRfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCiAKK1By
b2dyYW1zX3VuaXR0ZXN0c190ZXN0aWNvbmRhdGFiYXNlX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0
L2d0ay90ZXN0cy90ZXN0aWNvbmRhdGFiYXNlLmMgU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dF91dGlscy5jCitQcm9ncmFtc191bml0dGVzdHNfdGVzdGljb25kYXRhYmFzZV9DRkxBR1MgPSAk
KHdlYmtpdF90ZXN0c19jZmxhZ3MpCitQcm9ncmFtc191bml0dGVzdHNfdGVzdGljb25kYXRhYmFz
ZV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Rp
Y29uZGF0YWJhc2VfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCisKIFByb2dyYW1z
X3VuaXR0ZXN0c190ZXN0Z2xvYmFsc19TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdGdsb2JhbHMuYwogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RnbG9iYWxzX0NGTEFHUyA9ICQo
d2Via2l0X3Rlc3RzX2NmbGFncykKIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0Z2xvYmFsc19MREFE
RCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCmluZGV4IGQ0ODM1Yjcx
NDY2MTRkZjQ2ODZiOTI5YTgxNDQ2YjRmNWM1MDQ5MjcuLjA2ZWU0YmNmOTkzNDI2ZjdhNzYyNjAw
MzY2N2E0ODdlMjAxMzM0MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKQEAgLTY3LDYgKzY3LDcgQEAK
ICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzLmgiCiAjaW5jbHVkZSAid2Via2l0Z2xvYmFsc3ByaXZh
dGUuaCIKICNpbmNsdWRlICJ3ZWJraXRpY29uZGF0YWJhc2UuaCIKKyNpbmNsdWRlICJ3ZWJraXRp
Y29uZGF0YWJhc2Vwcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0bmV0d29ya3JlcXVlc3QuaCIK
ICNpbmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVxdWVzdHByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJr
aXRuZXR3b3JrcmVzcG9uc2UuaCIKQEAgLTYyNCw3ICs2MjUsMTIgQEAgdm9pZCBGcmFtZUxvYWRl
ckNsaWVudDo6ZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbigpIGNvbnN0CiAKIHZvaWQgRnJhbWVM
b2FkZXJDbGllbnQ6OnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29sIHNob3VsZFJlZ2lz
dGVyKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgU3RyaW5nIGZyYW1lVVJJID0gU3Ry
aW5nOjpmcm9tVVRGOCh3ZWJraXRfd2ViX2ZyYW1lX2dldF91cmkobV9mcmFtZSkpOworICAgIFdl
YktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsK
KyAgICBpZiAoc2hvdWxkUmVnaXN0ZXIpCisgICAgICAgIHdlYmtpdEljb25EYXRhYmFzZVJlZ2lz
dGVyRm9ySWNvbk5vdGlmaWNhdGlvbihkYXRhYmFzZSwgZnJhbWVVUkksIHRoaXMpOworICAgIGVs
c2UKKyAgICAgICAgd2Via2l0SWNvbkRhdGFiYXNlVW5yZWdpc3RlckZvckljb25Ob3RpZmljYXRp
b24oZGF0YWJhc2UsIGZyYW1lVVJJLCB0aGlzKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVu
dDo6c2V0TWFpbkZyYW1lRG9jdW1lbnRSZWFkeShib29sIHJlYWR5KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGstc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktp
dC9ndGsvZG9jcy93ZWJraXRndGstc2VjdGlvbnMudHh0CmluZGV4IDRhMzU4ZTgzZGJmOTFjMzBi
OGRkMjVmZmE1YzJhYjlhOTgzNTZiMGIuLjhkNDJkODIxMjNlODNmMDdiYzgzOTQ2NTEwYmI1YzAw
YzA5YmM2NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLXNl
Y3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9kb2NzL3dlYmtpdGd0ay1zZWN0aW9u
cy50eHQKQEAgLTY1Nyw2ICs2NTcsOCBAQCB3ZWJraXRfcG9saWN5X2Vycm9yX3F1YXJrCiBXZWJL
aXRJY29uRGF0YWJhc2UKIHdlYmtpdF9pY29uX2RhdGFiYXNlX2NsZWFyCiB3ZWJraXRfaWNvbl9k
YXRhYmFzZV9nZXRfaWNvbl9waXhidWYKK3dlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3Bp
eGJ1Zl9hc3luYword2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2ZpbmlzaAog
d2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpCiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9n
ZXRfcGF0aAogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3R5cGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RpY29uZGF0YWJhc2UuYyBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L3Rlc3RzL3Rlc3RpY29uZGF0YWJhc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZjA2YWVmMzc2NjgxZTM2YTQ3
NDMwODc5OWRjOGE0YmYzMGU4MzlkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdGljb25kYXRhYmFzZS5jCkBAIC0wLDAgKzEsMjgwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCisjaW5j
bHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8c3Ry
aW5nLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCisjaWYgR1RLX0NIRUNLX1ZFUlNJ
T04oMiwgMTQsIDApCitHTWFpbkxvb3AgKmxvb3A7CitjaGFyKiBiYXNlX3VyaTsKKworc3RhdGlj
IHZvaWQKK3NlcnZlcl9jYWxsYmFjayhTb3VwU2VydmVyICpzZXJ2ZXIsIFNvdXBNZXNzYWdlICpt
c2csIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUgKnF1ZXJ5LCBTb3VwQ2xpZW50Q29udGV4
dCAqY29udGV4dCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBjaGFyKiBjb250ZW50czsKKyAgICBn
c2l6ZSBsZW5ndGg7CisKKyAgICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7
CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfTk9UX0lN
UExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9z
ZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfT0spOworCisgICAgaWYgKGdfc3RyX2VxdWFsKHBh
dGgsICIvZmF2aWNvbi5pY28iKSkgeworICAgICAgICBHRXJyb3IqIGVycm9yID0gTlVMTDsKKwor
ICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKCJibGFuay5pY28iLCAmY29udGVudHMsICZsZW5n
dGgsICZlcnJvcik7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvcik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgY29udGVudHMgPSBnX3N0cmR1cCgiPGh0bWw+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+
Iik7CisgICAgICAgIGxlbmd0aCA9IHN0cmxlbihjb250ZW50cyk7CisgICAgfQorCisgICAgc291
cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFL
RSwgY29udGVudHMsIGxlbmd0aCk7CisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobXNn
LT5yZXNwb25zZV9ib2R5KTsKK30KKworc3RhdGljIHZvaWQgZGVsZXRlRGF0YWJhc2VGaWxlSWZF
eGlzdHMoY29uc3QgY2hhciAqZGF0YWJhc2VQYXRoKQoreworICAgIGlmICghZ19maWxlX3Rlc3Qo
ZGF0YWJhc2VQYXRoLCBHX0ZJTEVfVEVTVF9JU19ESVIpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBjaGFyICpkYXRhYmFzZUZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZShkYXRhYmFzZVBhdGgs
ICJXZWJwYWdlSWNvbnMuZGIiLCBOVUxMKTsKKyAgICBpZiAoZ191bmxpbmsoZGF0YWJhc2VGaWxl
bmFtZSkgPT0gLTEpIHsKKyAgICAgICAgZ19mcmVlKGRhdGFiYXNlRmlsZW5hbWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgZ19ybWRpcihkYXRhYmFzZVBhdGgpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0V2Via2l0SWNvbkRhdGFiYXNlU2V0UGF0aCh2b2lkKQoreworICAgIGNoYXIg
KmRhdGFiYXNlUGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdG1wX2RpcigpLCAid2Via2l0
LXRlc3RpY29uZGF0YWJhc2UiLCBOVUxMKTsKKyAgICBkZWxldGVEYXRhYmFzZUZpbGVJZkV4aXN0
cyhkYXRhYmFzZVBhdGgpOworCisgICAgV2ViS2l0SWNvbkRhdGFiYXNlICpkYXRhYmFzZSA9IHdl
YmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9w
YXRoKGRhdGFiYXNlLCBkYXRhYmFzZVBhdGgpOworCisgICAgZ19hc3NlcnRfY21wc3RyKGRhdGFi
YXNlUGF0aCwgPT0sIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9wYXRoKGRhdGFiYXNlKSk7CisK
KyAgICBnX2ZyZWUoZGF0YWJhc2VQYXRoKTsKK30KKworLy8gU2VlIHRoZSBjb21tZW50IGluIG1h
aW4oKSBmdW5jdGlvbiB0aGF0IGdvZXMgd2l0aCB0aGlzIHNhbWUgZ3VhcmQuCisjaWZkZWYgTkRF
QlVHCisKK3N0YXRpYyB2b2lkIGljb25EYXRhYmFzZUdldEljb25WYWxpZENhbGxiYWNrKEdPYmpl
Y3QgKnNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRh
KQoreworICAgIGdib29sZWFuICpiZWVuSGVyZSA9IChnYm9vbGVhbiopdXNlckRhdGE7CisgICAg
R0Vycm9yICplcnJvciA9IE5VTEw7CisgICAgR2RrUGl4YnVmICppY29uID0gd2Via2l0X2ljb25f
ZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2ZpbmlzaChXRUJLSVRfSUNPTl9EQVRBQkFTRShzb3Vy
Y2VPYmplY3QpLCByZXN1bHQsICZlcnJvcik7CisgICAgZ19hc3NlcnQoaWNvbik7CisgICAgZ19v
YmplY3RfdW5yZWYoaWNvbik7CisKKyAgICAqYmVlbkhlcmUgPSBUUlVFOworCisgICAgZ19tYWlu
X2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIHZvaWQgaWNvbkRhdGFiYXNlR2V0SWNvbklu
dmFsaWRDYWxsYmFjayhHT2JqZWN0ICpzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCAqcmVzdWx0
LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnYm9vbGVhbiAqYmVlbkhlcmUgPSAoZ2Jvb2xl
YW4qKXVzZXJEYXRhOworICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworICAgIEdka1BpeGJ1ZiAq
aWNvbiA9IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5pc2goV0VCS0lU
X0lDT05fREFUQUJBU0Uoc291cmNlT2JqZWN0KSwgcmVzdWx0LCAmZXJyb3IpOworICAgIGdfYXNz
ZXJ0KCFpY29uKTsKKworICAgICpiZWVuSGVyZSA9IFRSVUU7CisKKyAgICBnX21haW5fbG9vcF9x
dWl0KGxvb3ApOworfQorCitzdGF0aWMgdm9pZCBpY29uRGF0YWJhc2VHZXRJY29uQ2FuY2VsbGVk
Q2FsbGJhY2soR09iamVjdCAqc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgZ3Bv
aW50ZXIgdXNlckRhdGEpCit7CisgICAgZ2Jvb2xlYW4gKmJlZW5IZXJlID0gKGdib29sZWFuKil1
c2VyRGF0YTsKKyAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKyAgICBHZGtQaXhidWYgKmljb24g
PSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfZmluaXNoKFdFQktJVF9JQ09O
X0RBVEFCQVNFKHNvdXJjZU9iamVjdCksIHJlc3VsdCwgJmVycm9yKTsKKyAgICBnX2Fzc2VydCgh
aWNvbik7CisgICAgZ19hc3NlcnQoZXJyb3IgJiYgZ19lcnJvcl9tYXRjaGVzKGVycm9yLCBHX0lP
X0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCkpOworCisgICAgKmJlZW5IZXJlID0gVFJVRTsK
KworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBt
YWluTG9vcFF1aXRJZkxvYWRDb21wbGV0ZWQoZ2Jvb2xlYW4qIGljb25PclBhZ2VMb2FkZWQpCit7
CisgICAgaWYgKCppY29uT3JQYWdlTG9hZGVkKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxv
b3ApOworICAgIGVsc2UKKyAgICAgICAgKmljb25PclBhZ2VMb2FkZWQgPSBUUlVFOworfQorCitz
dGF0aWMgdm9pZCBpZGxlUXVpdExvb3BDYWxsYmFjayhXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBH
UGFyYW1TcGVjICpwc3BlYywgZ2Jvb2xlYW4qIGljb25PclBhZ2VMb2FkZWQpCit7CisgICAgV2Vi
S2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdl
YlZpZXcpOworCisgICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCB8fCBzdGF0
dXMgPT0gV0VCS0lUX0xPQURfRkFJTEVEKQorICAgICAgICBtYWluTG9vcFF1aXRJZkxvYWRDb21w
bGV0ZWQoaWNvbk9yUGFnZUxvYWRlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEljb25EYXRh
YmFzZUljb25Mb2FkZWQoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgV2ViS2l0V2ViRnJh
bWUqIHdlYkZyYW1lLCBjb25zdCBjaGFyKiBmcmFtZVVSSSwgZ2Jvb2xlYW4qIGljb25PclBhZ2VM
b2FkZWQpCit7CisgICAgbWFpbkxvb3BRdWl0SWZMb2FkQ29tcGxldGVkKGljb25PclBhZ2VMb2Fk
ZWQpOworfQorCitzdGF0aWMgdm9pZCBsb2FkVVJJKGNvbnN0IGNoYXIgKnVyaSkKK3sKKyAgICBX
ZWJLaXRXZWJWaWV3ICp2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXco
KSk7CisgICAgZ2Jvb2xlYW4gaWNvbk9yUGFnZUxvYWRlZCA9IEZBTFNFOworCisgICAgd2Via2l0
X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsIHVyaSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHZp
ZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhpZGxlUXVpdExvb3BDYWxsYmFj
ayksICZpY29uT3JQYWdlTG9hZGVkKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYmtpdF9nZXRf
aWNvbl9kYXRhYmFzZSgpLCAiaWNvbi1sb2FkZWQiLCBHX0NBTExCQUNLKHdlYmtpdEljb25EYXRh
YmFzZUljb25Mb2FkZWQpLCAmaWNvbk9yUGFnZUxvYWRlZCk7CisKKyAgICBnX21haW5fbG9vcF9y
dW4obG9vcCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBpY29uRGF0YWJhc2VHZXRJY29uVmFsaWRJ
ZGxlKGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9p
Y29uX3BpeGJ1Zl9hc3luYyh3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKSwgYmFzZV91cmksIE5V
TEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25E
YXRhYmFzZUdldEljb25WYWxpZENhbGxiYWNrLCB1c2VyRGF0YSk7CisgICAgcmV0dXJuIEZBTFNF
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gaWNvbkRhdGFiYXNlR2V0SWNvbkludmFsaWRJZGxlKGdw
b2ludGVyIHVzZXJEYXRhKQoreworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3Bp
eGJ1Zl9hc3luYyh3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKSwgImh0dHA6Ly93d3cud2Via2l0
Z3RrLm9yZy8iLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpY29uRGF0YWJhc2VHZXRJY29uSW52YWxpZENhbGxiYWNrLCB1c2VyRGF0YSk7Cisg
ICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gaWNvbkRhdGFiYXNlR2V0SWNv
bkNhbmNlbGxlZElkbGUoZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgR0NhbmNlbGxhYmxlICpj
YW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3KCk7CisgICAgd2Via2l0X2ljb25fZGF0YWJh
c2VfZ2V0X2ljb25fcGl4YnVmX2FzeW5jKHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpLCBiYXNl
X3VyaSwgY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGljb25EYXRhYmFzZUdldEljb25DYW5jZWxsZWRDYWxsYmFjaywgdXNlckRhdGEp
OworICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKGNhbmNlbGxhYmxlKTsKKyAgICBnX29iamVjdF91
bnJlZihjYW5jZWxsYWJsZSk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0V2Via2l0SWNvbkRhdGFiYXNlR2V0SWNvbkFzeW5jKHZvaWQpCit7CisgICAgZ2Jvb2xlYW4g
YmVlblRvSWNvbkNhbGxiYWNrOworCisgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBU
UlVFKTsKKworICAgIC8qIExvYWQgdXJpIHRvIG1ha2Ugc3VyZSBmYXZpY29uIGlzIGFkZGVkIHRv
IGRhdGFiYXNlICovCisgICAgbG9hZFVSSShiYXNlX3VyaSk7CisKKyAgICBiZWVuVG9JY29uQ2Fs
bGJhY2sgPSBGQUxTRTsKKyAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYylpY29uRGF0YWJhc2VH
ZXRJY29uVmFsaWRJZGxlLCAmYmVlblRvSWNvbkNhbGxiYWNrKTsKKyAgICBnX21haW5fbG9vcF9y
dW4obG9vcCk7CisgICAgZ19hc3NlcnQoYmVlblRvSWNvbkNhbGxiYWNrKTsKKworICAgIGJlZW5U
b0ljb25DYWxsYmFjayA9IEZBTFNFOworICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWljb25E
YXRhYmFzZUdldEljb25JbnZhbGlkSWRsZSwgJmJlZW5Ub0ljb25DYWxsYmFjayk7CisgICAgZ19t
YWluX2xvb3BfcnVuKGxvb3ApOworICAgIGdfYXNzZXJ0KGJlZW5Ub0ljb25DYWxsYmFjayk7CisK
KyAgICBiZWVuVG9JY29uQ2FsbGJhY2sgPSBGQUxTRTsKKyAgICBnX2lkbGVfYWRkKChHU291cmNl
RnVuYylpY29uRGF0YWJhc2VHZXRJY29uQ2FuY2VsbGVkSWRsZSwgJmJlZW5Ub0ljb25DYWxsYmFj
ayk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworICAgIGdfYXNzZXJ0KGJlZW5Ub0ljb25D
YWxsYmFjayk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRJY29uRGF0YWJhc2VHZXRJY29u
VVJJKHZvaWQpCit7CisgICAgY2hhciAqaWNvblVSSSA9IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dl
dF9pY29uX3VyaSh3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKSwgYmFzZV91cmkpOworICAgIGNo
YXIgKmV4cGVjdGVkVVJJID0gZ19zdHJkdXBfcHJpbnRmKCIlc2Zhdmljb24uaWNvIiwgYmFzZV91
cmkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uVVJJLCA9PSwgZXhwZWN0ZWRVUkkpOworICAg
IGdfZnJlZShleHBlY3RlZFVSSSk7CisgICAgZ19mcmVlKGljb25VUkkpOworfQorCisjZW5kaWYK
Kworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEljb25EYXRhYmFzZVJlbW92ZUFsbCh2b2lkKQorewor
ICAgIFdlYktpdEljb25EYXRhYmFzZSAqZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJh
c2UoKTsKKyAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhcihkYXRhYmFzZSk7CisgICAgY2hh
ciAqaWNvblVSSSA9IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3VyaShkYXRhYmFzZSwg
YmFzZV91cmkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uVVJJLCA9PSwgIiIpOworICAgIGdf
ZnJlZShpY29uVVJJKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEljb25EYXRhYmFzZUNs
b3NlRGF0YWJhc2Uodm9pZCkKK3sKKyAgICBXZWJLaXRJY29uRGF0YWJhc2UgKmRhdGFiYXNlID0g
d2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCk7CisgICAgY2hhciAqZGF0YWJhc2VQYXRoID0gZ19z
dHJkdXAod2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3BhdGgoZGF0YWJhc2UpKTsKKyAgICB3ZWJr
aXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aChkYXRhYmFzZSwgMCk7CisgICAgZGVsZXRlRGF0YWJh
c2VGaWxlSWZFeGlzdHMoZGF0YWJhc2VQYXRoKTsKKyAgICBnX2ZyZWUoZGF0YWJhc2VQYXRoKTsK
K30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIFNvdXBTZXJ2ZXIq
IHNlcnZlcjsKKyAgICBTb3VwVVJJKiBzb3VwX3VyaTsKKworICAgIGd0a190ZXN0X2luaXQoJmFy
Z2MsICZhcmd2LCAwKTsKKworICAgIC8qIEhvcGVmdWxseSBtYWtlIHRlc3QgaW5kZXBlbmRlbnQg
b2YgdGhlIHBhdGggaXQncyBjYWxsZWQgZnJvbS4gKi8KKyAgICB0ZXN0dXRpbHNfcmVsYXRpdmVf
Y2hkaXIoIlNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0Lmh0bWwiLCBhcmd2
WzBdKTsKKworICAgIHNlcnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAw
LCBOVUxMKTsKKyAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKKworICAgIHNvdXBf
c2VydmVyX2FkZF9oYW5kbGVyKHNlcnZlciwgTlVMTCwgc2VydmVyX2NhbGxiYWNrLCBOVUxMLCBO
VUxMKTsKKworICAgIHNvdXBfdXJpID0gc291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4xLyIp
OworICAgIHNvdXBfdXJpX3NldF9wb3J0KHNvdXBfdXJpLCBzb3VwX3NlcnZlcl9nZXRfcG9ydChz
ZXJ2ZXIpKTsKKworICAgIGJhc2VfdXJpID0gc291cF91cmlfdG9fc3RyaW5nKHNvdXBfdXJpLCBG
QUxTRSk7CisgICAgc291cF91cmlfZnJlZShzb3VwX3VyaSk7CisKKyAgICBnX3Rlc3RfYnVnX2Jh
c2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC9pY29uZGF0YWJhc2Uvc2V0LXBhdGgiLCB0ZXN0V2Via2l0SWNvbkRhdGFiYXNlU2V0UGF0
aCk7CisKKyAgICAvLyBUaGVzZSB0d28gdGVzdHMgd2lsbCB0cmlnZ2VyIGFuIEFTU0VSVElPTiBv
biBkZWJ1ZyBidWlsZHMgZHVlCisgICAgLy8gdG8gaHR0cDovL3dlYmtpdC5vcmcvYi82NzU4Mi4g
UmVtb3ZlIHRoZSBndWFyZHMgb25jZSB0aGUgYnVnIGlzIGZpeGVkLgorI2lmZGVmIE5ERUJVRwor
ICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9pY29uZGF0YWJhc2UvaWNvbi1hc3luYyIsIHRl
c3RXZWJraXRJY29uRGF0YWJhc2VHZXRJY29uQXN5bmMpOworICAgIGdfdGVzdF9hZGRfZnVuYygi
L3dlYmtpdC9pY29uZGF0YWJhc2UvaWNvbi11cmkiLCB0ZXN0V2Via2l0SWNvbkRhdGFiYXNlR2V0
SWNvblVSSSk7CisjZW5kaWYKKworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9pY29uZGF0
YWJhc2UvcmVtb3ZlLWFsbCIsIHRlc3RXZWJraXRJY29uRGF0YWJhc2VSZW1vdmVBbGwpOworICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9pY29uZGF0YWJhc2UvY2xvc2UtZGIiLCB0ZXN0V2Vi
a2l0SWNvbkRhdGFiYXNlQ2xvc2VEYXRhYmFzZSk7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigp
OworfQorI2Vsc2UKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBnX2Ny
aXRpY2FsKCJZb3Ugd2lsbCBuZWVkIGd0ay0yLjE0LjAgdG8gcnVuIHRoZSB1bml0IHRlc3RzLiBE
b2luZyBub3RoaW5nIG5vdy4iKTsKKyAgICByZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuY3BwCmluZGV4IDM4M2Iw
ODE3ZWNiYWVlMzE3NGU1ZWY3ZWM3ZTk0MTViODQzN2MxNDMuLjdhYzhmZjM0YjkyNDAzNWY2MTE1
YjQ5YjFlNWI3ZDkyYWE2NjkwNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRpY29uZGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRpY29uZGF0YWJhc2UuY3BwCkBAIC0yMywxNCArMjMsMjAgQEAKICNpbmNsdWRlICJEYXRh
YmFzZURldGFpbHMuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJG
aWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJH
UmVmUHRyLmgiCiAjaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSWNvbkRhdGFi
YXNlQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisj
aW5jbHVkZSAid2Via2l0Z2xvYmFscy5oIgogI2luY2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRl
LmgiCisjaW5jbHVkZSAid2Via2l0aWNvbmRhdGFiYXNlcHJpdmF0ZS5oIgogI2luY2x1ZGUgIndl
YmtpdG1hcnNoYWwuaCIKICNpbmNsdWRlICJ3ZWJraXRzZWN1cml0eW9yaWdpbnByaXZhdGUuaCIK
ICNpbmNsdWRlICJ3ZWJraXR3ZWJmcmFtZS5oIgogI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+
CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3du
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC02Myw2ICs2OSw5OSBA
QAogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCitjbGFzcyBQZW5kaW5nSWNvblJlcXVlc3Q7
CisKK3N0YXRpYyB2b2lkIHdlYmtpdEljb25EYXRhYmFzZVByb2Nlc3NQZW5kaW5nSWNvbnNGb3JV
UkkoV2ViS2l0SWNvbkRhdGFiYXNlKiwgY29uc3QgU3RyaW5nJiBwYWdlVVJJKTsKK3N0YXRpYyB2
b2lkIHdlYmtpdEljb25EYXRhYmFzZUltcG9ydEZpbmlzaGVkKFdlYktpdEljb25EYXRhYmFzZSop
Oworc3RhdGljIHZvaWQgd2Via2l0SWNvbkRhdGFiYXNlR2V0SWNvblBpeGJ1ZkNhbmNlbGxlZChH
Q2FuY2VsbGFibGUqLCBQZW5kaW5nSWNvblJlcXVlc3QqKTsKKworY2xhc3MgSWNvbkRhdGFiYXNl
Q2xpZW50R3RrIDogcHVibGljIFdlYkNvcmU6Okljb25EYXRhYmFzZUNsaWVudCB7CitwdWJsaWM6
CisgICAgLy8gSWNvbkRhdGFiYXNlQ2xpZW50IGludGVyZmFjZQorICAgIHZpcnR1YWwgYm9vbCBw
ZXJmb3JtSW1wb3J0KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZW1v
dmVBbGxJY29ucygpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkSW1wb3J0SWNvblVSTEZvclBh
Z2VVUkwoY29uc3QgU3RyaW5nJikgeyB9OworICAgIHZpcnR1YWwgdm9pZCBkaWRJbXBvcnRJY29u
RGF0YUZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBVUkwpCisgICAgeworICAgICAgICB3ZWJraXRJ
Y29uRGF0YWJhc2VQcm9jZXNzUGVuZGluZ0ljb25zRm9yVVJJKHdlYmtpdF9nZXRfaWNvbl9kYXRh
YmFzZSgpLCBVUkwpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlSWNvbkZvclBh
Z2VVUkwoY29uc3QgU3RyaW5nJikgeyB9OworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hVUkxJ
bXBvcnQoKQorICAgIHsKKyAgICAgICAgd2Via2l0SWNvbkRhdGFiYXNlSW1wb3J0RmluaXNoZWQo
d2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCkpOworICAgIH0KK307CisKK2NsYXNzIFBlbmRpbmdJ
Y29uUmVxdWVzdCB7CitwdWJsaWM6CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0KGNvbnN0IFN0cmlu
ZyYgcGFnZVVSSSwgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQqIGZyYW1lTG9hZGVyQ2xpZW50
KQorICAgICAgICA6IG1fcGFnZVVSSShwYWdlVVJJKQorICAgICAgICAsIG1fZnJhbWVMb2FkZXJD
bGllbnQoZnJhbWVMb2FkZXJDbGllbnQpCisgICAgICAgICwgbV9hc3luY1Jlc3VsdCgwKQorICAg
ICAgICAsIG1fY2FuY2VsbGFibGUoMCkKKyAgICAgICAgLCBtX2NhbmNlbGxlZElkKDApCisgICAg
eworICAgIH0KKworICAgIFBlbmRpbmdJY29uUmVxdWVzdChjb25zdCBTdHJpbmcmIHBhZ2VVUkks
IEdTaW1wbGVBc3luY1Jlc3VsdCogcmVzdWx0LCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlKQor
ICAgICAgICA6IG1fcGFnZVVSSShwYWdlVVJJKQorICAgICAgICAsIG1fZnJhbWVMb2FkZXJDbGll
bnQoMCkKKyAgICAgICAgLCBtX2FzeW5jUmVzdWx0KHJlc3VsdCkKKyAgICAgICAgLCBtX2NhbmNl
bGxhYmxlKGNhbmNlbGxhYmxlKQorICAgICAgICAsIG1fY2FuY2VsbGVkSWQoMCkKKyAgICB7Cisg
ICAgICAgIGlmICghY2FuY2VsbGFibGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
bV9jYW5jZWxsZWRJZCA9IGdfY2FuY2VsbGFibGVfY29ubmVjdChjYW5jZWxsYWJsZSwgR19DQUxM
QkFDSyh3ZWJraXRJY29uRGF0YWJhc2VHZXRJY29uUGl4YnVmQ2FuY2VsbGVkKSwgdGhpcywgMCk7
CisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhX2Z1bGwoR19PQkpFQ1QocmVzdWx0KSwgImNhbmNl
bGxhYmxlIiwgZ19vYmplY3RfcmVmKGNhbmNlbGxhYmxlKSwgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lO
b3RpZnk+KGdfb2JqZWN0X3VucmVmKSk7CisgICAgfQorCisgICAgflBlbmRpbmdJY29uUmVxdWVz
dCgpCisgICAgeworICAgICAgICBpZiAobV9jYW5jZWxsZWRJZCA+IDApCisgICAgICAgICAgICBn
X2NhbmNlbGxhYmxlX2Rpc2Nvbm5lY3QobV9jYW5jZWxsYWJsZS5nZXQoKSwgbV9jYW5jZWxsZWRJ
ZCk7CisgICAgfQorCisgICAgY29uc3QgU3RyaW5nJiBwYWdlVVJJKCkgeyByZXR1cm4gbV9wYWdl
VVJJOyB9CisgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQqIGZyYW1lTG9hZGVyQ2xpZW50
KCkgeyByZXR1cm4gbV9mcmFtZUxvYWRlckNsaWVudDsgfQorICAgIEdTaW1wbGVBc3luY1Jlc3Vs
dCogYXN5bmNSZXN1bHQoKSB7IHJldHVybiBtX2FzeW5jUmVzdWx0LmdldCgpOyB9CisKKyAgICB2
b2lkIGFzeW5jUmVzdWx0Q29tcGxldGUoR2RrUGl4YnVmKiBpY29uKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fYXN5bmNSZXN1bHQpOworICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0
X29wX3Jlc19ncG9pbnRlcihtX2FzeW5jUmVzdWx0LmdldCgpLCBpY29uLCBpY29uID8gc3RhdGlj
X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSA6IDApOworICAgICAgICBnX3Np
bXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUobV9hc3luY1Jlc3VsdC5nZXQoKSk7CisgICAgfQor
CisgICAgdm9pZCBhc3luY1Jlc3VsdENvbXBsZXRlSW5JZGxlKEdka1BpeGJ1ZiogaWNvbikKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX2FzeW5jUmVzdWx0KTsKKyAgICAgICAgZ19zaW1wbGVfYXN5
bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3BvaW50ZXIobV9hc3luY1Jlc3VsdC5nZXQoKSwgaWNvbiwg
aWNvbiA/IHN0YXRpY19jYXN0PEdEZXN0cm95Tm90aWZ5PihnX29iamVjdF91bnJlZikgOiAwKTsK
KyAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUobV9hc3luY1Jl
c3VsdC5nZXQoKSk7CisgICAgfQorCisgICAgdm9pZCBhc3luY1Jlc3VsdENhbmNlbCgpCisgICAg
eworICAgICAgICBBU1NFUlQobV9hc3luY1Jlc3VsdCk7CisgICAgICAgIGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9zZXRfZXJyb3IobV9hc3luY1Jlc3VsdC5nZXQoKSwgR19JT19FUlJPUiwgR19JT19F
UlJPUl9DQU5DRUxMRUQsICIlcyIsIF8oIk9wZXJhdGlvbiB3YXMgY2FuY2VsbGVkIikpOworICAg
ICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUobV9hc3luY1Jlc3VsdC5nZXQoKSk7
CisgICAgfQorCisgICAgdm9pZCBmcmFtZUxvYWRlckRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZnJhbWVMb2FkZXJDbGllbnQpOworICAgICAgICBtX2Zy
YW1lTG9hZGVyQ2xpZW50LT5kaXNwYXRjaERpZFJlY2VpdmVJY29uKCk7CisgICAgfQorCisgICAg
U3RyaW5nIG1fcGFnZVVSSTsKKyAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudCogbV9mcmFt
ZUxvYWRlckNsaWVudDsKKyAgICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gbV9hc3luY1Jl
c3VsdDsKKyAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKKyAgICBndWxv
bmcgbV9jYW5jZWxsZWRJZDsKK307CisKKwogZW51bSB7CiAgICAgUFJPUF8wLAogCkBAIC03Nywx
MiArMTc2LDI3IEBAIGVudW0gewogCiBzdGF0aWMgZ3VpbnQgd2Via2l0X2ljb25fZGF0YWJhc2Vf
c2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CiAKLUdfREVGSU5FX1RZUEUoV2ViS2l0SWNv
bkRhdGFiYXNlLCB3ZWJraXRfaWNvbl9kYXRhYmFzZSwgR19UWVBFX09CSkVDVCk7CitHX0RFRklO
RV9UWVBFKFdlYktpdEljb25EYXRhYmFzZSwgd2Via2l0X2ljb25fZGF0YWJhc2UsIEdfVFlQRV9P
QkpFQ1QpCisKK3R5cGVkZWYgVmVjdG9yPE93blB0cjxQZW5kaW5nSWNvblJlcXVlc3Q+ID4gUGVu
ZGluZ0ljb25SZXF1ZXN0VmVjdG9yOwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUGVuZGluZ0lj
b25SZXF1ZXN0VmVjdG9yKj4gUGVuZGluZ0ljb25SZXF1ZXN0TWFwOwogCiBzdHJ1Y3QgX1dlYktp
dEljb25EYXRhYmFzZVByaXZhdGUgewogICAgIEdPd25QdHI8Z2NoYXI+IHBhdGg7CisgICAgSWNv
bkRhdGFiYXNlQ2xpZW50R3RrIGljb25EYXRhYmFzZUNsaWVudDsKKyAgICBQZW5kaW5nSWNvblJl
cXVlc3RNYXAgcGVuZGluZ0ljb25SZXF1ZXN0czsKKyAgICBib29sIGltcG9ydEZpbmlzaGVkOwog
fTsKIAorc3RhdGljIHZvaWQgd2Via2l0SWNvbkRhdGFiYXNlSWNvbkxvYWRlZChXZWJLaXRJY29u
RGF0YWJhc2UqIGRhdGFiYXNlLCBXZWJLaXRXZWJGcmFtZSosIGNvbnN0IGNoYXIqIGZyYW1lVVJJ
KQoreworICAgIC8vIFJldGFpbiB0aGUgaWNvbiB3aGVuIGxvYWRlZCB0byBtYWtlIHN1cmUgaXQn
bGwgYmUgYXZhaWxhYmxlCisgICAgLy8gd2hlbiByZXF1ZXN0ZWQgbGF0ZXIgYnkgd2Via2l0X2lj
b25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmKigpLgorICAgIC8vIEljb24gcmVjb3JkcyBhcmUg
cmVmY291bnRlZCwgc28gd2UganVzdCBrZWVwIG91ciBvd24gcmVmZXJlbmNlIHRvIG1ha2Ugc3Vy
ZQorICAgIC8vIHRoZSBpY29uIHJlY29yZCBpcyBub3QgZGVsZXRlZC4KKyAgICBXZWJDb3JlOjpp
Y29uRGF0YWJhc2UoKS5yZXRhaW5JY29uRm9yUGFnZVVSTChTdHJpbmc6OmZyb21VVEY4KGZyYW1l
VVJJKSk7Cit9CisKIHN0YXRpYyB2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX2ZpbmFsaXplKEdP
YmplY3QqIG9iamVjdCkKIHsKICAgICAvLyBDYWxsIEMrKyBkZXN0cnVjdG9ycywgdGhlIHJldmVy
c2Ugb2YgJ3BsYWNlbWVudCBuZXcgc3ludGF4JwpAQCAtMTgwLDYgKzI5NCw5IEBAIHN0YXRpYyB2
b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX2luaXQoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSkKICAgICBkYXRhYmFzZS0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShkYXRh
YmFzZSwgV0VCS0lUX1RZUEVfSUNPTl9EQVRBQkFTRSwgV2ViS2l0SWNvbkRhdGFiYXNlUHJpdmF0
ZSk7CiAgICAgLy8gJ3BsYWNlbWVudCBuZXcgc3ludGF4Jywgc2VlIHdlYmtpdHdlYnZpZXcuY3Bw
CiAgICAgbmV3IChkYXRhYmFzZS0+cHJpdikgV2ViS2l0SWNvbkRhdGFiYXNlUHJpdmF0ZSgpOwor
CisgICAgLy8gQ29ubmVjdCB0byBvdXIgb3duIGljb24tbG9hZGVkIHNpZ25hbCwgc2luY2UgdGhl
cmUgYXJlIG5vIG1lbWJlciBmb3IgaXQgY2xhc3Mgc3RydWN0LgorICAgIGdfc2lnbmFsX2Nvbm5l
Y3QoZGF0YWJhc2UsICJpY29uLWxvYWRlZCIsIEdfQ0FMTEJBQ0sod2Via2l0SWNvbkRhdGFiYXNl
SWNvbkxvYWRlZCksIDApOwogfQogCiAvKioKQEAgLTIyNSwxNiArMzQyLDIyIEBAIHZvaWQgd2Vi
a2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwg
Y29uc3QgZ2NoYXIqIHBhCiAgICAgaWYgKGRhdGFiYXNlLT5wcml2LT5wYXRoLmdldCgpKQogICAg
ICAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5jbG9zZSgpOwogCisgICAgZGF0YWJhc2UtPnBy
aXYtPmltcG9ydEZpbmlzaGVkID0gZmFsc2U7CiAgICAgaWYgKCEocGF0aCAmJiBwYXRoWzBdKSkg
ewogICAgICAgICBkYXRhYmFzZS0+cHJpdi0+cGF0aC5zZXQoMCk7CiAgICAgICAgIFdlYkNvcmU6
Omljb25EYXRhYmFzZSgpLnNldEVuYWJsZWQoZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgZGF0YWJhc2UtPnByaXYtPnBhdGguc2V0KGdfc3RyZHVwKHBhdGgpKTsKLQorICAg
IFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLnNldENsaWVudCgmZGF0YWJhc2UtPnByaXYtPmljb25E
YXRhYmFzZUNsaWVudCk7CisgICAgV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpkZWxheURhdGFiYXNl
Q2xlYW51cCgpOwogICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLnNldEVuYWJsZWQodHJ1ZSk7
Ci0gICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkub3BlbihXZWJDb3JlOjpmaWxlbmFtZVRvU3Ry
aW5nKGRhdGFiYXNlLT5wcml2LT5wYXRoLmdldCgpKSwgV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpk
ZWZhdWx0RGF0YWJhc2VGaWxlbmFtZSgpKTsKKyAgICBpZiAoIVdlYkNvcmU6Omljb25EYXRhYmFz
ZSgpLm9wZW4oV2ViQ29yZTo6ZmlsZW5hbWVUb1N0cmluZyhwYXRoKSwgV2ViQ29yZTo6SWNvbkRh
dGFiYXNlOjpkZWZhdWx0RGF0YWJhc2VGaWxlbmFtZSgpKSkgeworICAgICAgICBXZWJDb3JlOjpJ
Y29uRGF0YWJhc2U6OmFsbG93RGF0YWJhc2VDbGVhbnVwKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBkYXRhYmFzZS0+cHJpdi0+cGF0aC5zZXQoZ19zdHJkdXAocGF0aCkpOwogCiAg
ICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICBpZiAoIWluaXRpYWxpemVk
KSB7CkBAIC0yNTksMjcgKzM4MiwzOCBAQCBnY2hhciogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0
X2ljb25fdXJpKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGdjaAogewogICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19JQ09OX0RBVEFCQVNFKGRhdGFiYXNlKSwg
MCk7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocGFnZVVSSSwgMCk7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKIAogICAgIFN0cmluZyBwYWdlVVJMID0gU3RyaW5nOjpmcm9tVVRGOChw
YWdlVVJJKTsKICAgICByZXR1cm4gZ19zdHJkdXAoV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc3lu
Y2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChwYWdlVVJMKS51dGY4KCkuZGF0YSgpKTsKIH0KIAor
c3RhdGljIEdka1BpeGJ1ZiogZ2V0SWNvblBpeGJ1ZlN5bmNocm9ub3VzbHkoV2ViS2l0SWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBwYWdlVVJMKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgLy8gVGhlIGV4YWN0IHNpemUgd2UgcGFzcyBpcyBpcnJlbGV2
YW50IHRvIHRoZSBXZWJDb3JlOjppY29uRGF0YWJhc2UgY29kZS4KKyAgICAvLyBXZSBtdXN0IHBh
c3Mgc29tZXRoaW5nIGdyZWF0ZXIgdGhhbiAweDAgdG8gZ2V0IGEgcGl4YnVmLgorICAgIFdlYkNv
cmU6OkltYWdlKiBpY29uID0gV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNJY29u
Rm9yUGFnZVVSTChwYWdlVVJMLCBXZWJDb3JlOjpJbnRTaXplKDE2LCAxNikpOworICAgIHJldHVy
biBpY29uID8gaWNvbi0+Z2V0R2RrUGl4YnVmKCkgOiAwOworfQorCiAvKioKICAqIHdlYmtpdF9p
Y29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZjoKICAqIEBkYXRhYmFzZTogYSAjV2ViS2l0SWNv
bkRhdGFiYXNlCiAgKiBAcGFnZV91cmk6IFVSSSBvZiB0aGUgcGFnZSBjb250YWluaW5nIHRoZSBp
Y29uCiAgKgotICogT2J0YWlucyBhICNHZGtQaXhidWYgb2YgdGhlIGZhdmljb24gZm9yIHRoZSBn
aXZlbiBwYWdlIFVSSSwgb3IKLSAqIGEgZGVmYXVsdCBpY29uIGlmIHRoZXJlIGlzIG5vIGljb24g
Zm9yIHRoZSBnaXZlbiBwYWdlLiBVc2UKKyAqIE9idGFpbnMgYSAjR2RrUGl4YnVmIG9mIHRoZSBm
YXZpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZSBVUkksIG9yICVOVUxMCisgKiBpZiB0aGVyZSBpcyBu
byBpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZSBvciBpdCBoYXNuJ3QgYmVlbiBsb2FkZWQgeWV0LiBV
c2UKICAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3VyaSgpIGlmIHlvdSBuZWVkIHRv
IGRpc3Rpbmd1aXNoIHRoZXNlIGNhc2VzLgotICogVXN1YWxseSB5b3Ugd2FudCB0byBjb25uZWN0
IHRvIFdlYktpdEljb25EYXRhYmFzZTo6aWNvbi1sb2FkZWQgYW5kIGNhbGwgdGhpcworICogVG8g
bWFrZSBzdXJlIHRoaXMgbWV0aG9kIHJldHVybiB3aWxsIHJldHVybiBhIHZhbGlkIGljb24sIHdo
ZW4gdGhlIGdpdmVuIFVSSQorICogaGFzIG9uZSwgeW91IHNob3VsZCBjb25uZWN0IHRvIFdlYktp
dEljb25EYXRhYmFzZTo6aWNvbi1sb2FkZWQgYW5kIGNhbGwgdGhpcwogICogbWV0aG9kIGluIHRo
ZSBjYWxsYmFjay4KICAqCiAgKiBUaGUgcGl4YnVmIHdpbGwgaGF2ZSB0aGUgbGFyZ2VzdCBzaXpl
IHByb3ZpZGVkIGJ5IHRoZSBzZXJ2ZXIgYW5kIHNob3VsZAogICogYmUgcmVzaXplZCBiZWZvcmUg
aXQgaXMgZGlzcGxheWVkLgotICogU2VlIGFsc28gd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3Bp
eGJ1ZigpLgogICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgcmVmZXJlbmNl
IHRvIGEgI0dka1BpeGJ1Ziwgb3IgJU5VTEwKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTog
YSBuZXcgcmVmZXJlbmNlIHRvIGEgI0dka1BpeGJ1Ziwgb3IgJU5VTEwgaWYgdGhlIGdpdmVuCisg
KiBVUkkgZG9lc24ndCBoYXZlIGFuIGljb24gb3IgaXQgaGFzbid0IGJlZW4gbG9hZGVkIHlldC4K
ICAqCiAgKiBTaW5jZTogMS4zLjEzCiAgKiovCkBAIC0yODgsMTYgKzQyMiwxOTAgQEAgR2RrUGl4
YnVmKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoV2ViS2l0SWNvbkRhdGFi
YXNlKiBkYXRhYmFzZSwgY28KICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfSUNP
Tl9EQVRBQkFTRShkYXRhYmFzZSksIDApOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHBhZ2VV
UkksIDApOwogCisgICAgcmV0dXJuIGdldEljb25QaXhidWZTeW5jaHJvbm91c2x5KGRhdGFiYXNl
LCBTdHJpbmc6OmZyb21VVEY4KHBhZ2VVUkkpKTsKK30KKworc3RhdGljIFBlbmRpbmdJY29uUmVx
dWVzdFZlY3Rvciogd2Via2l0SWNvbkRhdGFiYXNlR2V0T3JDcmVhdGVSZXF1ZXN0cyhXZWJLaXRJ
Y29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7CisgICAgUGVu
ZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBpY29ucyA9IGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNv
blJlcXVlc3RzLmdldChwYWdlVVJMKTsKKyAgICBpZiAoIWljb25zKSB7CisgICAgICAgIGljb25z
ID0gbmV3IFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvcjsKKyAgICAgICAgZGF0YWJhc2UtPnByaXYt
PnBlbmRpbmdJY29uUmVxdWVzdHMuc2V0KHBhZ2VVUkwsIGljb25zKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gaWNvbnM7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEljb25EYXRhYmFzZURlbGV0ZVJl
cXVlc3RzKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIFBlbmRpbmdJY29uUmVxdWVzdFZl
Y3RvciogcmVxdWVzdHMsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCkKK3sKKyAgICBkYXRhYmFzZS0+
cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5yZW1vdmUocGFnZVVSTCk7CisgICAgZGVsZXRlIHJl
cXVlc3RzOworfQorCitzdGF0aWMgdm9pZCBnZXRJY29uUGl4YnVmQ2FuY2VsbGVkKHZvaWQqIHVz
ZXJEYXRhKQoreworICAgIFBlbmRpbmdJY29uUmVxdWVzdCogcmVxdWVzdCA9IHN0YXRpY19jYXN0
PFBlbmRpbmdJY29uUmVxdWVzdCo+KHVzZXJEYXRhKTsKKyAgICByZXF1ZXN0LT5hc3luY1Jlc3Vs
dENhbmNlbCgpOworCisgICAgY29uc3QgU3RyaW5nJiBwYWdlVVJMID0gcmVxdWVzdC0+cGFnZVVS
SSgpOworICAgIFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25f
ZGF0YWJhc2UoKTsKKyAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gZGF0YWJh
c2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMuZ2V0KHBhZ2VVUkwpOworICAgIGlmICghaWNv
bnMpCisgICAgICAgIHJldHVybjsKKworICAgIHNpemVfdCBpdGVtSW5kZXggPSBpY29ucy0+Zmlu
ZChyZXF1ZXN0KTsKKyAgICBpZiAoaXRlbUluZGV4ICE9IG5vdEZvdW5kKQorICAgICAgICBpY29u
cy0+cmVtb3ZlKGl0ZW1JbmRleCk7CisgICAgaWYgKGljb25zLT5pc0VtcHR5KCkpCisgICAgICAg
IHdlYmtpdEljb25EYXRhYmFzZURlbGV0ZVJlcXVlc3RzKGRhdGFiYXNlLCBpY29ucywgcGFnZVVS
TCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEljb25EYXRhYmFzZUdldEljb25QaXhidWZDYW5j
ZWxsZWQoR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgUGVuZGluZ0ljb25SZXF1ZXN0KiByZXF1
ZXN0KQoreworICAgIC8vIEhhbmRsZSBjYW5jZWxsZWQgaW4gYSBpbiBpZGxlIHNpbmNlIGl0IG1p
Z2h0IGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQuCisgICAgY2FsbE9uTWFpblRocmVhZChnZXRJ
Y29uUGl4YnVmQ2FuY2VsbGVkLCByZXF1ZXN0KTsKK30KKworLyoqCisgKiB3ZWJraXRfaWNvbl9k
YXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmM6CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdElj
b25EYXRhYmFzZQorICogQHBhZ2VfdXJpOiBVUkkgb2YgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUg
aWNvbgorICogQGNhbmNlbGxhYmxlOiBBICNHQ2FuY2VsbGFibGUgb3IgJU5VTEwuCisgKiBAY2Fs
bGJhY2s6IChhbGxvdy1ub25lKTogQSAjR0FzeW5jUmVhZHlDYWxsYmFjayB0byBjYWxsIHdoZW4g
dGhlIHJlcXVlc3QgaXMKKyAqICAgICAgICAgICAgc2F0aXNmaWVkIG9yICVOVUxMIGlmIHlvdSBk
b24ndCBjYXJlIGFib3V0IHRoZSByZXN1bHQuCisgKiBAdXNlcl9kYXRhOiBUaGUgZGF0YSB0byBw
YXNzIHRvIEBjYWxsYmFjay4KKyAqCisgKiBBc3luY2hyb25vdXNseSBvYnRhaW5zIGEgI0dka1Bp
eGJ1ZiBvZiB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVuIHBhZ2UgVVJJLgorICoKKyAqIFRoaXMg
aXMgYW4gYXN5bmNocm9ub3VzIG1ldGhvZC4gV2hlbiB0aGUgb3BlcmF0aW9uIGlzIGZpbmlzaGVk
LCBjYWxsYmFjayB3aWxsCisgKiBiZSBpbnZva2VkLiBZb3UgY2FuIHRoZW4gY2FsbCB3ZWJraXRf
aWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfZmluaXNoKCkKKyAqIHRvIGdldCB0aGUgcmVz
dWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKiBTZWUgYWxzbyB3ZWJraXRfaWNvbl9kYXRhYmFzZV9n
ZXRfaWNvbl9waXhidWYoKS4KKyAqCisgKiBTaW5jZTogMS43LjYKKyAqKi8KK3ZvaWQgd2Via2l0
X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2FzeW5jKFdlYktpdEljb25EYXRhYmFzZSog
ZGF0YWJhc2UsIGNvbnN0IGdjaGFyKiBwYWdlVVJJLCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxl
LCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19JQ09OX0RBVEFCQVNFKGRhdGFiYXNlKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChwYWdlVVJJKTsKKworICAgIEdSZWZQdHI8R1NpbXBsZUFzeW5j
UmVzdWx0PiByZXN1bHQgPSBhZG9wdEdSZWYoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyhHX09C
SkVDVChkYXRhYmFzZSksIGNhbGxiYWNrLCB1c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4od2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25f
cGl4YnVmKSkpOworCiAgICAgU3RyaW5nIHBhZ2VVUkwgPSBTdHJpbmc6OmZyb21VVEY4KHBhZ2VV
UkkpOwotICAgIC8vIFRoZSBleGFjdCBzaXplIHdlIHBhc3MgaXMgaXJyZWxldmFudCB0byB0aGUg
V2ViQ29yZTo6aWNvbkRhdGFiYXNlIGNvZGUuCi0gICAgLy8gV2UgbXVzdCBwYXNzIHNvbWV0aGlu
ZyBncmVhdGVyIHRoYW4gMCwgMCB0byBnZXQgYSBwaXhidWYuCi0gICAgV2ViQ29yZTo6SW1hZ2Uq
IGljb24gPSBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25Gb3JQYWdlVVJM
KHBhZ2VVUkwsIFdlYkNvcmU6OkludFNpemUoMTYsIDE2KSk7Ci0gICAgaWYgKCFpY29uKQorICAg
IFBlbmRpbmdJY29uUmVxdWVzdCogcmVxdWVzdCA9IG5ldyBQZW5kaW5nSWNvblJlcXVlc3QocGFn
ZVVSTCwgcmVzdWx0LmdldCgpLCBjYW5jZWxsYWJsZSk7CisKKyAgICAvLyBSZWdpc3RlciBpY29u
IHJlcXVlc3QgYmVmb3JlIGFza2luZyBmb3IgdGhlIGljb24gdG8gYXZvaWQgcmFjZSBjb25kaXRp
b25zLgorICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciogaWNvbnMgPSB3ZWJraXRJY29uRGF0
YWJhc2VHZXRPckNyZWF0ZVJlcXVlc3RzKGRhdGFiYXNlLCBwYWdlVVJMKTsKKyAgICBBU1NFUlQo
aWNvbnMpOworICAgIGljb25zLT5hcHBlbmQoYWRvcHRQdHIocmVxdWVzdCkpOworCisgICAgR2Rr
UGl4YnVmKiBwaXhidWYgPSBnZXRJY29uUGl4YnVmU3luY2hyb25vdXNseShkYXRhYmFzZSwgcGFn
ZVVSTCk7CisgICAgaWYgKCFwaXhidWYgJiYgIWRhdGFiYXNlLT5wcml2LT5pbXBvcnRGaW5pc2hl
ZCkgeworICAgICAgICAvLyBJbXBvcnQgaXMgb25nb2luZywgdGhlcmUgaWNvbiB3ZSB3YW50IG1p
Z2h0IGxvYWQgbGF0ZXIuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByZXF1ZXN0LT5h
c3luY1Jlc3VsdENvbXBsZXRlSW5JZGxlKHBpeGJ1Zik7CisKKyAgICBBU1NFUlQoaWNvbnMtPmxh
c3QoKS5nZXQoKSA9PSByZXF1ZXN0KTsKKyAgICBpY29ucy0+cmVtb3ZlTGFzdCgpOworICAgIGlm
IChpY29ucy0+aXNFbXB0eSgpKQorICAgICAgICB3ZWJraXRJY29uRGF0YWJhc2VEZWxldGVSZXF1
ZXN0cyhkYXRhYmFzZSwgaWNvbnMsIHBhZ2VVUkwpOworfQorCisvKioKKyAqIHdlYmtpdF9pY29u
X2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5pc2g6CisgKiBAZGF0YWJhc2U6IGEgI1dlYktp
dEljb25EYXRhYmFzZQorICogQHJlc3VsdDogQSAjR0FzeW5jUmVzdWx0IG9idGFpbmVkIGZyb20g
dGhlICNHQXN5bmNSZWFkeUNhbGxiYWNrIHBhc3NlZCB0byB3ZWJraXRfaWNvbl9kYXRhYmFzZV9n
ZXRfaWNvbl9waXhidWZfYXN5bmMoKQorICogQGVycm9yOiBSZXR1cm4gbG9jYXRpb24gZm9yIGVy
cm9yIG9yICVOVUxMLgorICoKKyAqIEZpbmlzaGVzIGFuIG9wZXJhdGlvbiBzdGFydGVkIHdpdGgg
d2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2FzeW5jKCkuCisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyByZWZlcmVuY2UgdG8gYSAjR2RrUGl4YnVmLCBv
ciAlTlVMTC4KKyAqCisgKiBTaW5jZTogMS43LjYKKyAqLworR2RrUGl4YnVmKiB3ZWJraXRfaWNv
bl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfZmluaXNoKFdlYktpdEljb25EYXRhYmFzZSogZGF0
YWJhc2UsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBHU2lt
cGxlQXN5bmNSZXN1bHQqIHNpbXBsZVJlc3VsdCA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVChyZXN1
bHQpOworICAgIGdfd2Fybl9pZl9mYWlsKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfc291cmNl
X3RhZyhzaW1wbGVSZXN1bHQpID09IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1
Zik7CisKKyAgICBpZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Byb3BhZ2F0ZV9lcnJvcihzaW1w
bGVSZXN1bHQsIGVycm9yKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgR2RrUGl4YnVmKiBwaXhi
dWYgPSBpY29uLT5nZXRHZGtQaXhidWYoKTsKLSAgICBpZiAoIXBpeGJ1ZikKKworICAgIEdDYW5j
ZWxsYWJsZSogY2FuY2VsbGFibGUgPSBzdGF0aWNfY2FzdDxHQ2FuY2VsbGFibGUqPihnX29iamVj
dF9nZXRfZGF0YShHX09CSkVDVChzaW1wbGVSZXN1bHQpLCAiY2FuY2VsbGFibGUiKSk7CisgICAg
aWYgKGNhbmNlbGxhYmxlICYmIGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGNhbmNlbGxhYmxl
KSkgeworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBHX0lPX0VSUk9SLCBHX0lP
X0VSUk9SX0NBTkNFTExFRCwgXygiT3BlcmF0aW9uIHdhcyBjYW5jZWxsZWQiKSk7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKworICAgIEdka1BpeGJ1ZiogaWNvbiA9IHN0YXRpY19jYXN0PEdk
a1BpeGJ1Zio+KGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dwb2ludGVyKHNpbXBs
ZVJlc3VsdCkpOworICAgIGlmICghaWNvbikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PEdka1BpeGJ1Zio+KGdfb2JqZWN0X3JlZihwaXhidWYpKTsKKworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxHZGtQaXhidWYqPihnX29iamVjdF9yZWYoaWNvbikpOworfQorCit2
b2lkIHdlYmtpdEljb25EYXRhYmFzZVJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihXZWJLaXRJ
Y29uRGF0YWJhc2UqIGRhdGFiYXNlLCBTdHJpbmcgJnBhZ2VVUkksIFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBpY29u
cyA9IHdlYmtpdEljb25EYXRhYmFzZUdldE9yQ3JlYXRlUmVxdWVzdHMoZGF0YWJhc2UsIHBhZ2VV
UkkpOworICAgIEFTU0VSVChpY29ucyk7CisgICAgaWNvbnMtPmFwcGVuZChhZG9wdFB0cihuZXcg
UGVuZGluZ0ljb25SZXF1ZXN0KHBhZ2VVUkksIGNsaWVudCkpKTsKK30KKwordm9pZCB3ZWJraXRJ
Y29uRGF0YWJhc2VVbnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihXZWJLaXRJY29uRGF0YWJh
c2UqIGRhdGFiYXNlLCBTdHJpbmcgJnBhZ2VVUkksIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50
KiBjbGllbnQpCit7CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBpY29ucyA9IGRhdGFi
YXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmdldChwYWdlVVJJKTsKKyAgICBpZiAoIWlj
b25zKQorICAgICAgICByZXR1cm47CisgICAgd2Via2l0SWNvbkRhdGFiYXNlRGVsZXRlUmVxdWVz
dHMoZGF0YWJhc2UsIGljb25zLCBwYWdlVVJJKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0SWNv
bkRhdGFiYXNlUHJvY2Vzc1BlbmRpbmdJY29uc0ZvclVSSShXZWJLaXRJY29uRGF0YWJhc2UqIGRh
dGFiYXNlLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0
VmVjdG9yKiBpY29ucyA9IGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmdldChw
YWdlVVJMKTsKKyAgICBpZiAoIWljb25zKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGljb25zLT5zaXplKCk7ICsraSkgeworICAgICAgICBQZW5kaW5nSWNv
blJlcXVlc3QqIHJlcXVlc3QgPSBpY29ucy0+YXQoaSkuZ2V0KCk7CisgICAgICAgIGlmIChyZXF1
ZXN0LT5mcmFtZUxvYWRlckNsaWVudCgpKQorICAgICAgICAgICAgcmVxdWVzdC0+ZnJhbWVMb2Fk
ZXJEaXNwYXRjaERpZFJlY2VpdmVJY29uKCk7CisgICAgICAgIGVsc2UgaWYgKHJlcXVlc3QtPmFz
eW5jUmVzdWx0KCkpCisgICAgICAgICAgICByZXF1ZXN0LT5hc3luY1Jlc3VsdENvbXBsZXRlKGdl
dEljb25QaXhidWZTeW5jaHJvbm91c2x5KGRhdGFiYXNlLCBwYWdlVVJMKSk7CisgICAgfQorICAg
IHdlYmtpdEljb25EYXRhYmFzZURlbGV0ZVJlcXVlc3RzKGRhdGFiYXNlLCBpY29ucywgcGFnZVVS
TCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEljb25EYXRhYmFzZUltcG9ydEZpbmlzaGVkKFdl
YktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBkYXRhYmFzZS0+cHJpdi0+aW1wb3J0RmluaXNoZWQgPSB0cnVlOworCisgICAgLy8g
SW1wb3J0IGlzIGNvbXBsZXRlLCBwcm9jZXNzIHBlbmRpbmcgcmVxdWVzdHMgZm9yIHBhZ2VzIHRo
YXQgYXJlIG5vdCBpbiB0aGUgZGF0YWJhc2UsCisgICAgLy8gc2luY2UgZGlkSW1wb3J0SWNvbkRh
dGFGb3JQYWdlVVJMKCkgd2lsbCBuZXZlciBiZSBjYWxsZWQgZm9yIHRoZW0uCisgICAgLy8gRm9y
IGFzeW5jIHJlcXVlc3RzIHdlIG5lZWQgdG8gY29tcGxldGUgdGhlIG9wZXJhdGlvbiwgd2hpbGUg
Zm9yIGZyYW1lIGxvYWRlcgorICAgIC8vIHJlcXVlc3RzIHdlIG9ubHkgbmVlZCB0byBkZWxldGUg
dGhlIHJlcXVlc3Qgc28gdGhhdCBpY29uLWxvYWRlZCB3b24ndCBiZSBlbWl0dGVkLgorICAgIFZl
Y3RvcjxTdHJpbmc+IHRvRGVsZXRlVVJMczsKKyAgICBQZW5kaW5nSWNvblJlcXVlc3RNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmVu
ZCgpOworICAgIGZvciAoUGVuZGluZ0ljb25SZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVy
ID0gZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMuYmVnaW4oKTsgaXRlciAhPSBl
bmQ7ICsraXRlcikgeworICAgICAgICBTdHJpbmcgaWNvblVSTCA9IFdlYkNvcmU6Omljb25EYXRh
YmFzZSgpLnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoaXRlci0+Zmlyc3QpOworICAgICAg
ICBpZiAoIWljb25VUkwuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBpY29ucyA9IGl0ZXItPnNlY29uZDsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpY29ucy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIFBlbmRpbmdJY29uUmVxdWVzdCogcmVxdWVzdCA9IGljb25zLT5hdChpKS5nZXQoKTsKKyAg
ICAgICAgICAgIGlmIChyZXF1ZXN0LT5hc3luY1Jlc3VsdCgpKQorICAgICAgICAgICAgICAgIHJl
cXVlc3QtPmFzeW5jUmVzdWx0Q29tcGxldGUoMCk7CisgICAgICAgIH0KKworICAgICAgICB0b0Rl
bGV0ZVVSTHMuYXBwZW5kKGl0ZXItPmZpcnN0KTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHRvRGVsZXRlVVJMcy5zaXplKCk7ICsraSkKKyAgICAgICAgd2Via2l0SWNvbkRh
dGFiYXNlRGVsZXRlUmVxdWVzdHMoZGF0YWJhc2UsIGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNv
blJlcXVlc3RzLmdldCh0b0RlbGV0ZVVSTHNbaV0pLCB0b0RlbGV0ZVVSTHNbaV0pOwogfQogCiAv
KioKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJh
c2UuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuaAppbmRl
eCA1ZWFkNjAzYWJkZGYxMjRlMzZkMmY1YWRjNjIyYWI1NWYzOGMxOGJiLi45MGI2ZGM2NjAyNTI0
MzIyNWY4ZDJjMjViNDFiNjExYTMwMmFlNjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGljb25kYXRhYmFzZS5oCkBAIC01MywyNSArNTMsMzcgQEAgc3RydWN0IF9XZWJL
aXRJY29uRGF0YWJhc2VDbGFzcyB7CiB9OwogCiBXRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfaWNv
bl9kYXRhYmFzZV9nZXRfdHlwZSAgICAgICAgICAgICh2b2lkKTsKK3dlYmtpdF9pY29uX2RhdGFi
YXNlX2dldF90eXBlICAgICAgICAgICAgICAgKHZvaWQpOwogCiBXRUJLSVRfQVBJIGNvbnN0IGdj
aGFyKgotd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3BhdGggICAgICAgICAgICAoV2ViS2l0SWNv
bkRhdGFiYXNlKiBkYXRhYmFzZSk7Cit3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0aCAgICAg
ICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKTsKIAogV0VCS0lUX0FQSSB2
b2lkCi13ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aCAgICAgICAgICAgIChXZWJLaXRJY29u
RGF0YWJhc2UqIGRhdGFiYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2NoYXIqICAgICAgICBwYXRoKTsKK3dlYmtpdF9pY29uX2RhdGFiYXNlX3Nl
dF9wYXRoICAgICAgICAgICAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAg
ICAgIHBhdGgpOwogCiBXRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0
X2ljb25fdXJpICAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiAgICAgICAgcGFn
ZV91cmkpOword2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpICAgICAgICAgICAoV2Vi
S2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiAgICAgICAgcGFnZV91cmkpOwogCiBXRUJLSVRf
QVBJIEdka1BpeGJ1ZioKLXdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZiAgICAg
KFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhZ2VfdXJpKTsKK3dlYmtpdF9p
Y29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZiAgICAgICAgKFdlYktpdEljb25EYXRhYmFzZSog
ZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnY2hhciogICAgICAgIHBhZ2VfdXJpKTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRf
aWNvbl9kYXRhYmFzZV9jbGVhciAgICAgICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRh
dGFiYXNlKTsKK3dlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYyAgKFdl
YktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhZ2VfdXJpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlKiAgICAgICBj
YW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dF
QktJVF9BUEkgR2RrUGl4YnVmKgord2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVm
X2ZpbmlzaCAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCogICAgICAgcmVzdWx0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yKiogICAg
ICAgICAgICBlcnJvcik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2ljb25fZGF0YWJhc2Vf
Y2xlYXIgICAgICAgICAgICAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSk7CiAK
IEdfRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRpY29uZGF0YWJhc2Vwcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
aWNvbmRhdGFiYXNlcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxOWQzZGE0OTdmZDlhMjJiNjdlZWU3
MDdkMmY0N2I0MDAzNjc5YjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlcHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXRpY29uZGF0YWJh
c2Vwcml2YXRlX2gKKyNkZWZpbmUgd2Via2l0aWNvbmRhdGFiYXNlcHJpdmF0ZV9oCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK2NsYXNzIEZyYW1lTG9hZGVyQ2xpZW50OworfQorCit2b2lkIHdlYmtp
dEljb25EYXRhYmFzZVJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihXZWJLaXRJY29uRGF0YWJh
c2UqLCBTdHJpbmcgJnBhZ2VVUkksIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50Kik7Cit2b2lk
IHdlYmtpdEljb25EYXRhYmFzZVVucmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKFdlYktpdElj
b25EYXRhYmFzZSosIFN0cmluZyAmcGFnZVVSSSwgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQq
KTsKKworI2VuZGlmIC8vIHdlYmtpdGljb25kYXRhYmFzZXByaXZhdGVfaApkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDQ3YmU2OGI1Zjg1MWIyZWFi
ZTUzYzU2ZTQ2ODE5ZTBjZTE0NDEzOTEuLjkzMWUxYjBlZjBhMzdiYmFhZWRkZmM5MWRmNTFhOGMz
NDc4NmZiNzIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0wOS0wMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+IGFuZCBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHVEtdIFdlYktpdEljb25EYXRhYmFzZSBkb2Vzbid0IGtlZXAg
aWNvbnMgY2FjaGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NjIwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBzdXBwb3J0IGZvciBmYXZpY29ucyBpbiBHdGtMYXVuY2hlci4KKworICAgICAgICAq
IEd0a0xhdW5jaGVyL21haW4uYzoKKyAgICAgICAgKGFjdGl2YXRlVXJpRW50cnlDYik6CisgICAg
ICAgIChpY29uTG9hZGVkQ2IpOgorICAgICAgICAoY3JlYXRlQnJvd3Nlcik6CisKIDIwMTItMDIt
MTYgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQg
bmV3IFF0IHBlcmZvcm1hbmNlIHRlc3RlciBib3QgdG8gYnVpbGQud2Via2l0Lm9yZwpkaWZmIC0t
Z2l0IGEvVG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jIGIvVG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5j
CmluZGV4IGZiZTgzMzFlMTg3MWU2YmZmOWMzOGU0OWJhZWUxOWM3MjExYTljMWYuLmE3ZDA2YmIx
YjRmMTAzM2ZlZmEyMjVhMGJjYzU1Y2NlMTBlZWYzODEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0d0a0xh
dW5jaGVyL21haW4uYworKysgYi9Ub29scy9HdGtMYXVuY2hlci9tYWluLmMKQEAgLTQwLDYgKzQw
LDcgQEAgc3RhdGljIHZvaWQgYWN0aXZhdGVVcmlFbnRyeUNiKEd0a1dpZGdldCogZW50cnksIGdw
b2ludGVyIGRhdGEpCiAgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldyA9IGdfb2JqZWN0X2dldF9k
YXRhKEdfT0JKRUNUKGVudHJ5KSwgIndlYi12aWV3Iik7CiAgICAgY29uc3QgZ2NoYXIqIHVyaSA9
IGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5UUlkoZW50cnkpKTsKICAgICBnX2Fzc2VydCh1cmkp
OworICAgIGd0a19lbnRyeV9zZXRfaWNvbl9mcm9tX3BpeGJ1ZihHVEtfRU5UUlkoZW50cnkpLCBH
VEtfRU5UUllfSUNPTl9QUklNQVJZLCAwKTsKICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmko
d2ViVmlldywgdXJpKTsKIH0KIApAQCAtMTM0LDYgKzEzNSwxNCBAQCBzdGF0aWMgZ2Jvb2xlYW4g
cnVuTW9kYWxEaWFsb2dDYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHdGtXaWRnZXQqIG9wZW5l
cldpbmRvdwogICAgIHJldHVybiBUUlVFOwogfQogCitzdGF0aWMgdm9pZCBpY29uTG9hZGVkQ2Io
V2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciogaWNvblVSSSwgR3RrV2lkZ2V0KiB1
cmlFbnRyeSkKK3sKKyAgICBHZGtQaXhidWYgKmljb24gPSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9n
ZXRfaWNvbl9waXhidWYod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCksIHdlYmtpdF93ZWJfdmll
d19nZXRfdXJpKHdlYlZpZXcpKTsKKyAgICBndGtfZW50cnlfc2V0X2ljb25fZnJvbV9waXhidWYo
R1RLX0VOVFJZKHVyaUVudHJ5KSwgR1RLX0VOVFJZX0lDT05fUFJJTUFSWSwgaWNvbik7CisgICAg
aWYgKGljb24pCisgICAgICAgIGdfb2JqZWN0X3VucmVmKGljb24pOworfQorCiBzdGF0aWMgR3Rr
V2lkZ2V0KiBjcmVhdGVCcm93c2VyKEd0a1dpZGdldCogd2luZG93LCBHdGtXaWRnZXQqIHVyaUVu
dHJ5LCBHdGtXaWRnZXQqIHN0YXR1c2JhciwgV2ViS2l0V2ViVmlldyogd2ViVmlldywgR3RrV2lk
Z2V0KiBvcGVuZXJXaW5kb3cpCiB7CiAgICAgR3RrV2lkZ2V0ICpzY3JvbGxlZFdpbmRvdyA9IGd0
a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpOwpAQCAtMTQ0LDYgKzE1Myw3IEBAIHN0
YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZUJyb3dzZXIoR3RrV2lkZ2V0KiB3aW5kb3csIEd0a1dpZGdl
dCogdXJpRW50cnksIEd0a1dpZGdlCiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibm90
aWZ5Ojp0aXRsZSIsIEdfQ0FMTEJBQ0sobm90aWZ5VGl0bGVDYiksIHdpbmRvdyk7CiAgICAgZ19z
aWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0so
bm90aWZ5TG9hZFN0YXR1c0NiKSwgdXJpRW50cnkpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2Vi
VmlldywgIm5vdGlmeTo6cHJvZ3Jlc3MiLCBHX0NBTExCQUNLKG5vdGlmeVByb2dyZXNzQ2IpLCB3
aW5kb3cpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgImljb24tbG9hZGVkIiwgR19D
QUxMQkFDSyhpY29uTG9hZGVkQ2IpLCB1cmlFbnRyeSk7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3
ZWJWaWV3LCAiaG92ZXJpbmctb3Zlci1saW5rIiwgR19DQUxMQkFDSyhsaW5rSG92ZXJDYiksIHN0
YXR1c2Jhcik7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiY3JlYXRlLXdlYi12aWV3
IiwgR19DQUxMQkFDSyhjcmVhdGVXZWJWaWV3Q2IpLCB3aW5kb3cpOwogICAgIGdfc2lnbmFsX2Nv
bm5lY3Qod2ViVmlldywgIndlYi12aWV3LXJlYWR5IiwgR19DQUxMQkFDSyh3ZWJWaWV3UmVhZHlD
YiksIHdpbmRvdyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130396</attachid>
            <date>2012-03-06 09:45:05 -0800</date>
            <delta_ts>2012-03-07 09:53:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56200-20120306184503.patch</filename>
            <type>text/plain</type>
            <size>55809</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5NTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggMGQ0ODQ4Mzhi
MGYwNGY2ZDJmZjFjYTU4ZGI0MWQ0OGFjZjg1NDM3ZC4uNjNjZWVkZGFiYjQ1MTk3ZjA0MWYxZWE0
Mzk0Y2UzYjlhNDY2YjZlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkzIEBACisyMDEy
LTAzLTA2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4gYW5kIFNl
cmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10g
V2ViS2l0SWNvbkRhdGFiYXNlIGRvZXNuJ3Qga2VlcCBpY29ucyBjYWNoZWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MjAwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRk
ZWQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGll
bnQ6OnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbik6IGluc3RydWN0CisgICAgICAgIHRoZSBX
ZWJWaWV3IHRvIGxpc3RlbiB0byBJY29uRGF0YWJhc2UncyBub3RpZmljYXRpb25zLgorICAgICAg
ICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlSWNvbik6IGFz
ayBib3RoCisgICAgICAgIFdlYlZpZXcgYW5kIEljb25EYXRhYmFzZSB0byBpc3N1ZSBub3RpZmlj
YXRpb25zIGZvciBhIG5ldyBpY29uLgorICAgICAgICAqIGRvY3Mvd2Via2l0Z3RrLXNlY3Rpb25z
LnR4dDoKKyAgICAgICAgKiB0ZXN0cy90ZXN0aWNvbmRhdGFiYXNlLmM6IEFkZGVkLgorICAgICAg
ICAoc2VydmVyX2NhbGxiYWNrKToKKyAgICAgICAgKGRlbGV0ZURhdGFiYXNlRmlsZUlmRXhpc3Rz
KToKKyAgICAgICAgKHRlc3RXZWJraXRJY29uRGF0YWJhc2VTZXRQYXRoKToKKyAgICAgICAgKGlj
b25EYXRhYmFzZUdldEljb25WYWxpZENhbGxiYWNrKToKKyAgICAgICAgKGljb25EYXRhYmFzZUdl
dEljb25JbnZhbGlkQ2FsbGJhY2spOgorICAgICAgICAoaWNvbkRhdGFiYXNlR2V0SWNvbkNhbmNl
bGxlZENhbGxiYWNrKToKKyAgICAgICAgKG1haW5Mb29wUXVpdElmTG9hZENvbXBsZXRlZCk6Cisg
ICAgICAgIChpZGxlUXVpdExvb3BDYWxsYmFjayk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3SWNv
bkxvYWRlZCk6CisgICAgICAgIChsb2FkVVJJKToKKyAgICAgICAgKGljb25EYXRhYmFzZUdldElj
b25WYWxpZElkbGUpOgorICAgICAgICAoaWNvbkRhdGFiYXNlR2V0SWNvbkludmFsaWRJZGxlKToK
KyAgICAgICAgKGljb25EYXRhYmFzZUdldEljb25DYW5jZWxsZWRJZGxlKToKKyAgICAgICAgKHRl
c3RXZWJraXRJY29uRGF0YWJhc2VHZXRJY29uQXN5bmMpOgorICAgICAgICAodGVzdFdlYmtpdElj
b25EYXRhYmFzZUdldEljb25VUkkpOgorICAgICAgICAodGVzdFdlYmtpdEljb25EYXRhYmFzZVJl
bW92ZUFsbCk6CisgICAgICAgICh0ZXN0V2Via2l0SWNvbkRhdGFiYXNlQ2xvc2VEYXRhYmFzZSk6
CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNw
cDoKKyAgICAgICAgKEljb25EYXRhYmFzZUNsaWVudEd0ayk6IEljb25EYXRhYmFzZUNsaWVudCBp
bXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKEljb25EYXRhYmFzZUNsaWVudEd0azo6cGVyZm9ybUlt
cG9ydCk6CisgICAgICAgIChJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpZFJlbW92ZUFsbEljb25z
KToKKyAgICAgICAgKEljb25EYXRhYmFzZUNsaWVudEd0azo6ZGlkSW1wb3J0SWNvblVSTEZvclBh
Z2VVUkwpOgorICAgICAgICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpkaWRJbXBvcnRJY29uRGF0
YUZvclBhZ2VVUkwpOgorICAgICAgICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpkaWRDaGFuZ2VJ
Y29uRm9yUGFnZVVSTCk6CisgICAgICAgIChJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpZEZpbmlz
aFVSTEltcG9ydCk6CisgICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3QpOiBtYWNoaW5lcnkgZm9y
IGFzeW5jaHJvbm91cyBjYWxscy4KKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6UGVuZGlu
Z0ljb25SZXF1ZXN0KToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6flBlbmRpbmdJY29u
UmVxdWVzdCk6CisgICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OnBhZ2VVUkkpOgorICAgICAg
ICAoUGVuZGluZ0ljb25SZXF1ZXN0Ojphc3luY1Jlc3VsdCk6CisgICAgICAgIChQZW5kaW5nSWNv
blJlcXVlc3Q6OmFzeW5jUmVzdWx0Q2FuY2VsKToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVz
dDo6YXN5bmNSZXN1bHRDb21wbGV0ZUluSWRsZSk6CisgICAgICAgIChQZW5kaW5nSWNvblJlcXVl
c3Q6OmFzeW5jUmVzdWx0Q29tcGxldGUpOgorICAgICAgICAoX1dlYktpdEljb25EYXRhYmFzZVBy
aXZhdGUpOgorICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2VfY2xhc3NfaW5pdCk6CisgICAg
ICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9pbml0KToKKyAgICAgICAgKHdlYmtpdEljb25EYXRh
YmFzZURpc3BhdGNoRGlkUmVjZWl2ZUljb24pOiAicHJvdGVjdGVkIiBtZXRob2QKKyAgICAgICAg
Y2FsbGVkIGJ5IHRoZSBGcmFtZUxvYWRlckNsaWVudCB0byBpbmZvcm0gYWJvdXQgbmV3IGljb25z
LgorICAgICAgICAoY2xvc2VJY29uRGF0YWJhc2VPbkV4aXQpOgorICAgICAgICAod2Via2l0X2lj
b25fZGF0YWJhc2Vfc2V0X3BhdGgpOiBvcGVucyB0aGUgZGF0YWJhc2UgZGVsYXlpbmcgdGhlCisg
ICAgICAgIGNsZWFudXAgb2YgaWNvbnMgdW50aWwgdGhlIGltcG9ydCBpcyBjb21wbGV0ZS4KKyAg
ICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3VyaSk6IGl0IG5vdyByZXR1cm5z
IE5VTEwgaWYgdGhlCisgICAgICAgIGljb24gaXMgbm90IGluIHRoZSBkYXRhYmFzZS4KKyAgICAg
ICAgKGdldEljb25QaXhidWZTeW5jaHJvbm91c2x5KTogaGVscGVyIGZ1bmN0aW9uIHRvIGNhbGwK
KyAgICAgICAgSWNvbkRhdGFiYXNlOjpzeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKCkuCisg
ICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYpOiBhZGRlZCBoZWln
aHQgYW5kIHdpZHRoCisgICAgICAgIHBhcmFtZXRlcnMuCisgICAgICAgICh3ZWJraXRJY29uRGF0
YWJhc2VHZXRPckNyZWF0ZVJlcXVlc3RzKTogaGVscGVyIGZ1bmN0aW9uIHRvIGdldAorICAgICAg
ICB0aGUgdmVjdG9yIG9mIHBlbmRpbmcgcmVxdWVzdHMgZm9yIHRoZSBnaXZlbiB1cmkuCisgICAg
ICAgICh3ZWJraXRJY29uRGF0YWJhc2VEZWxldGVSZXF1ZXN0cyk6IGhlbHBlciBmdW5jdGlvbiB0
byByZW1vdmUgdGhlCisgICAgICAgIHZlY3RvciBvZiBwZW5kaW5nIHJlcXVlc3RzIGZvciB0aGUg
Z2l2ZW4gdXJpLgorICAgICAgICAoZ2V0SWNvblBpeGJ1ZkNhbmNlbGxlZCk6CisgICAgICAgICh3
ZWJraXRJY29uRGF0YWJhc2VHZXRJY29uUGl4YnVmQ2FuY2VsbGVkKToKKyAgICAgICAgKHdlYmtp
dF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYyk6IG5ldyBtZXRob2QgdG8KKyAg
ICAgICAgYXN5bmNocm9ub3VzbHkgcmV0cmlldmUgaWNvbnMgZnJvbSB0aGUgZGF0YWJhc2UuCisg
ICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfZmluaXNoKTogZmlu
aXNoZXMgYW4KKyAgICAgICAgb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJraXRfaWNvbl9kYXRh
YmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmMoKS4KKyAgICAgICAgKHdlYmtpdEljb25EYXRhYmFz
ZVByb2Nlc3NQZW5kaW5nSWNvbnNGb3JVUkkpOiBwcm9jZXNzIHBlbmRpbmcKKyAgICAgICAgcmVx
dWVzdHMgb25jZSB0aGUgaW1wb3J0IGlzIGZpbmlzaGVkLgorICAgICAgICAod2Via2l0SWNvbkRh
dGFiYXNlSW1wb3J0RmluaXNoZWQpOiBjaGVjayBwZW5kaW5nIHJlcXVlc3RzIGFuZAorICAgICAg
ICBkZWxldGUgdGhvc2UgdGhhdCBhc2sgZm9yIGljb25zIHRoYXQgZG8gbm90IGV4aXN0IGluIHRo
ZSBkYXRhYmFzZS4KKyAgICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX2NsZWFyKToKKyAgICAg
ICAgKiB3ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmg6CisgICAgICAgICogd2Via2l0L3dlYmtp
dGljb25kYXRhYmFzZXByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2ljb25fcGl4YnVmKTogYWRkZWQgd2lkdGggYW5kIGhlaWdodCBwYXJhbWV0ZXJzLgorICAg
ICAgICAod2Via2l0V2ViVmlld0ljb25Mb2FkZWQpOiBkaXNwYXRjaCB0aGUgaWNvbi1sb2FkZWQg
c2lnbmFsIHdoZW4KKyAgICAgICAgcmVxdWVzdGVkIGJ5IHRoZSBGcmFtZUxvYWRlckNsaWVudC4K
KyAgICAgICAgKHdlYmtpdFdlYlZpZXdSZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24pOiBzdGFy
dHMvc3RvcHMgbGlzdGVuaW5nCisgICAgICAgIHRvIGljb24gZGF0YWJhc2Ugbm90aWZpY2F0aW9u
cy4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5oOgorICAgICAgICAqIHdlYmtpdC93
ZWJraXR3ZWJ2aWV3cHJpdmF0ZS5oOiBhZGRlZAorCiAyMDEyLTAzLTAxICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBTaW1wbGlmeSB0
aGUgY29kZSB0byBhZGp1c3QgZm9udCBzaXplcyBkZXBlbmRpbmcgb24gc2NyZWVuIERQSQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0
L2d0ay9HTlVtYWtlZmlsZS5hbQppbmRleCAwNjliNWIwYTVhOTgzMGM1NjUyZmE0MjYyNDgwM2Rm
ODA3ZjVjYWM1Li41YjlhN2JjZDc4ZGFjYmFkNzU4M2JkMmY1MjA4ZGJkNDljNzVkYmZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay9HTlVtYWtlZmlsZS5hbQpAQCAtMjI3LDYgKzIyNyw3IEBAIHdlYmtpdGd0a19zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aGl0dGVzdHJlc3VsdC5j
cHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0cHJpdmF0
ZS5oIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcCBc
CisJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZXByaXZhdGUuaCBc
CiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmNwcCBcCiAJ
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0cHJpdmF0ZS5oIFwK
IAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3Jlc3BvbnNlLmNwcCBcCkBA
IC00NDAsNiArNDQxLDcgQEAgVEVTVF9QUk9HUyArPSBcCiAJUHJvZ3JhbXMvdW5pdHRlc3RzL3Rl
c3Rkb21kb213aW5kb3cgXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0ZG9tbm9kZSBcCiAJUHJv
Z3JhbXMvdW5pdHRlc3RzL3Rlc3RodHRwYmFja2VuZCBcCisJUHJvZ3JhbXMvdW5pdHRlc3RzL3Rl
c3RpY29uZGF0YWJhc2UgXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0bG9hZGluZyBcCiAJUHJv
Z3JhbXMvdW5pdHRlc3RzL3Rlc3RnbG9iYWxzIFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdG1p
bWVoYW5kbGluZyBcCkBAIC00ODgsNiArNDkwLDExIEBAIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0
aHR0cGJhY2tlbmRfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQogUHJvZ3JhbXNfdW5p
dHRlc3RzX3Rlc3RodHRwYmFja2VuZF9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQogUHJv
Z3JhbXNfdW5pdHRlc3RzX3Rlc3RodHRwYmFja2VuZF9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNf
bGRmbGFncykKIAorUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RpY29uZGF0YWJhc2VfU09VUkNFUyA9
IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RpY29uZGF0YWJhc2UuYyBTb3VyY2UvV2ViS2l0
L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMKK1Byb2dyYW1zX3VuaXR0ZXN0c190ZXN0aWNvbmRhdGFi
YXNlX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX3VuaXR0ZXN0c190
ZXN0aWNvbmRhdGFiYXNlX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCitQcm9ncmFtc191
bml0dGVzdHNfdGVzdGljb25kYXRhYmFzZV9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFn
cykKKwogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RnbG9iYWxzX1NPVVJDRVMgPSBTb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0Z2xvYmFscy5jCiBQcm9ncmFtc191bml0dGVzdHNfdGVzdGdsb2Jh
bHNfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rl
c3RnbG9iYWxzX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAgYi9T
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAK
aW5kZXggNDJhNDk0NTgzOTZjZmNlM2Q3MDdlMDY5ODE3MDBmNmI5ODEyYWRiZC4uYjMyZmIyMWE1
NzIzNGI2ZTJhYjE4ODBhOGY3MDFiNDkyMGQ2NTA2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcApAQCAt
NjgsNiArNjgsNyBAQAogI2luY2x1ZGUgIndlYmtpdGdsb2JhbHMuaCIKICNpbmNsdWRlICJ3ZWJr
aXRnbG9iYWxzcHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFzZS5oIgorI2lu
Y2x1ZGUgIndlYmtpdGljb25kYXRhYmFzZXByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXRuZXR3
b3JrcmVxdWVzdC5oIgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmtyZXF1ZXN0cHJpdmF0ZS5oIgog
I2luY2x1ZGUgIndlYmtpdG5ldHdvcmtyZXNwb25zZS5oIgpAQCAtNjI1LDcgKzYyNiw3IEBAIHZv
aWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24oKSBjb25zdAog
CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpyZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oYm9v
bCBzaG91bGRSZWdpc3RlcikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHdlYmtpdFdl
YlZpZXdSZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1l
KSwgc2hvdWxkUmVnaXN0ZXIpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzZXRNYWlu
RnJhbWVEb2N1bWVudFJlYWR5KGJvb2wgcmVhZHkpCkBAIC04MDIsMTggKzgwMywxNCBAQCB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVJY29uKCkKICAgICBpZiAobV9s
b2FkaW5nRXJyb3JQYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBnY2hhciogZnJh
bWVVUkkgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF91cmkobV9mcmFtZSk7Ci0gICAgV2ViS2l0SWNv
bkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOwotICAgIGdf
c2lnbmFsX2VtaXRfYnlfbmFtZShkYXRhYmFzZSwgImljb24tbG9hZGVkIiwgbV9mcmFtZSwgZnJh
bWVVUkkpOwotCisgICAgLy8gSWNvbkNvbnRyb2xsZXIgbG9hZCBpY29ucyBvbmx5IGZvciB0aGUg
bWFpbiBmcmFtZS4KICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gZ2V0Vmlld0Zyb21GcmFt
ZShtX2ZyYW1lKTsKKyAgICBBU1NFUlQobV9mcmFtZSA9PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21h
aW5fZnJhbWUod2ViVmlldykpOwogCi0gICAgLy8gQXZvaWQgcmVwb3J0aW5nIGZhdmljb25zIGZv
ciBub24tbWFpbiBmcmFtZXMuCi0gICAgaWYgKG1fZnJhbWUgIT0gd2Via2l0X3dlYl92aWV3X2dl
dF9tYWluX2ZyYW1lKHdlYlZpZXcpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnX29iamVjdF9u
b3RpZnkoR19PQkpFQ1Qod2ViVmlldyksICJpY29uLXVyaSIpOwotICAgIGdfc2lnbmFsX2VtaXRf
YnlfbmFtZSh3ZWJWaWV3LCAiaWNvbi1sb2FkZWQiLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25f
dXJpKHdlYlZpZXcpKTsKKyAgICBjb25zdCBjaGFyKiBmcmFtZVVSSSA9IHdlYmtpdF93ZWJfZnJh
bWVfZ2V0X3VyaShtX2ZyYW1lKTsKKyAgICBXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlID0g
d2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCk7CisgICAgd2Via2l0SWNvbkRhdGFiYXNlRGlzcGF0
Y2hEaWRSZWNlaXZlSWNvbihkYXRhYmFzZSwgZnJhbWVVUkkpOworICAgIHdlYmtpdFdlYlZpZXdJ
Y29uTG9hZGVkKGRhdGFiYXNlLCB3ZWJraXRfd2ViX2ZyYW1lX2dldF91cmkobV9mcmFtZSksIHdl
YlZpZXcpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFN0YXJ0UHJv
dmlzaW9uYWxMb2FkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0
Z3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLXNlY3Rp
b25zLnR4dAppbmRleCA0YTM1OGU4M2RiZjkxYzMwYjhkZDI1ZmZhNWMyYWI5YTk4MzU2YjBiLi44
ZDQyZDgyMTIzZTgzZjA3YmM4Mzk0NjUxMGJiNWMwMGMwOWJjNjY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay9kb2NzL3dlYmtpdGd0ay1zZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dl
YktpdC9ndGsvZG9jcy93ZWJraXRndGstc2VjdGlvbnMudHh0CkBAIC02NTcsNiArNjU3LDggQEAg
d2Via2l0X3BvbGljeV9lcnJvcl9xdWFyawogV2ViS2l0SWNvbkRhdGFiYXNlCiB3ZWJraXRfaWNv
bl9kYXRhYmFzZV9jbGVhcgogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmCit3
ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmMKK3dlYmtpdF9pY29uX2Rh
dGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5pc2gKIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9p
Y29uX3VyaQogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3BhdGgKIHdlYmtpdF9pY29uX2RhdGFi
YXNlX2dldF90eXBlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0aWNv
bmRhdGFiYXNlLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0aWNvbmRhdGFiYXNlLmMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMTc3NDYzNDdmOWNiZTU2YzVmODY4Nzk3NTA5Nzk2ZTQ5YjViODMwNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RpY29uZGF0YWJhc2Uu
YwpAQCAtMCwwICsxLDI4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAidGVzdF91dGlscy5oIgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5j
bHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXQuaD4KKworI2RlZmluZSBJQ09OX1NJWkUgMTYKKworI2lmIEdUS19DSEVDS19WRVJTSU9O
KDIsIDE0LCAwKQorR01haW5Mb29wICpsb29wOworY2hhciogYmFzZV91cmk7CisKK3N0YXRpYyB2
b2lkCitzZXJ2ZXJfY2FsbGJhY2soU291cFNlcnZlciAqc2VydmVyLCBTb3VwTWVzc2FnZSAqbXNn
LCBjb25zdCBjaGFyICpwYXRoLCBHSGFzaFRhYmxlICpxdWVyeSwgU291cENsaWVudENvbnRleHQg
KmNvbnRleHQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgY2hhciogY29udGVudHM7CisgICAgZ3Np
emUgbGVuZ3RoOworCisgICAgaWYgKG1zZy0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewor
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX05PVF9JTVBM
RU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzb3VwX21lc3NhZ2Vfc2V0
X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX09LKTsKKworICAgIGlmIChnX3N0cl9lcXVhbChwYXRo
LCAiL2Zhdmljb24uaWNvIikpIHsKKyAgICAgICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7CisKKyAg
ICAgICAgZ19maWxlX2dldF9jb250ZW50cygiYmxhbmsuaWNvIiwgJmNvbnRlbnRzLCAmbGVuZ3Ro
LCAmZXJyb3IpOworICAgICAgICBnX2Fzc2VydCghZXJyb3IpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGNvbnRlbnRzID0gZ19zdHJkdXAoIjxodG1sPjxib2R5PnRlc3Q8L2JvZHk+PC9odG1sPiIp
OworICAgICAgICBsZW5ndGggPSBzdHJsZW4oY29udGVudHMpOworICAgIH0KKworICAgIHNvdXBf
bWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0Us
IGNvbnRlbnRzLCBsZW5ndGgpOworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1zZy0+
cmVzcG9uc2VfYm9keSk7Cit9CisKK3N0YXRpYyB2b2lkIGRlbGV0ZURhdGFiYXNlRmlsZUlmRXhp
c3RzKGNvbnN0IGNoYXIgKmRhdGFiYXNlUGF0aCkKK3sKKyAgICBpZiAoIWdfZmlsZV90ZXN0KGRh
dGFiYXNlUGF0aCwgR19GSUxFX1RFU1RfSVNfRElSKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2hhciAqZGF0YWJhc2VGaWxlbmFtZSA9IGdfYnVpbGRfZmlsZW5hbWUoZGF0YWJhc2VQYXRoLCAi
V2VicGFnZUljb25zLmRiIiwgTlVMTCk7CisgICAgaWYgKGdfdW5saW5rKGRhdGFiYXNlRmlsZW5h
bWUpID09IC0xKSB7CisgICAgICAgIGdfZnJlZShkYXRhYmFzZUZpbGVuYW1lKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGdfcm1kaXIoZGF0YWJhc2VQYXRoKTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdFdlYmtpdEljb25EYXRhYmFzZVNldFBhdGgodm9pZCkKK3sKKyAgICBjaGFyICpk
YXRhYmFzZVBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3RtcF9kaXIoKSwgIndlYmtpdC10
ZXN0aWNvbmRhdGFiYXNlIiwgTlVMTCk7CisgICAgZGVsZXRlRGF0YWJhc2VGaWxlSWZFeGlzdHMo
ZGF0YWJhc2VQYXRoKTsKKworICAgIFdlYktpdEljb25EYXRhYmFzZSAqZGF0YWJhc2UgPSB3ZWJr
aXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKKyAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0
aChkYXRhYmFzZSwgZGF0YWJhc2VQYXRoKTsKKworICAgIGdfYXNzZXJ0X2NtcHN0cihkYXRhYmFz
ZVBhdGgsID09LCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0aChkYXRhYmFzZSkpOworCisg
ICAgZ19mcmVlKGRhdGFiYXNlUGF0aCk7Cit9CisKKy8vIFNlZSB0aGUgY29tbWVudCBpbiBtYWlu
KCkgZnVuY3Rpb24gdGhhdCBnb2VzIHdpdGggdGhpcyBzYW1lIGd1YXJkLgorI2lmZGVmIE5ERUJV
RworCitzdGF0aWMgdm9pZCBpY29uRGF0YWJhc2VHZXRJY29uVmFsaWRDYWxsYmFjayhHT2JqZWN0
ICpzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkK
K3sKKyAgICBnYm9vbGVhbiAqYmVlbkhlcmUgPSAoZ2Jvb2xlYW4qKXVzZXJEYXRhOworICAgIEdF
cnJvciAqZXJyb3IgPSBOVUxMOworICAgIEdka1BpeGJ1ZiAqaWNvbiA9IHdlYmtpdF9pY29uX2Rh
dGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5pc2goV0VCS0lUX0lDT05fREFUQUJBU0Uoc291cmNl
T2JqZWN0KSwgcmVzdWx0LCAmZXJyb3IpOworICAgIGdfYXNzZXJ0KGljb24pOworICAgIGdfb2Jq
ZWN0X3VucmVmKGljb24pOworCisgICAgKmJlZW5IZXJlID0gVFJVRTsKKworICAgIGdfbWFpbl9s
b29wX3F1aXQobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGljb25EYXRhYmFzZUdldEljb25JbnZh
bGlkQ2FsbGJhY2soR09iamVjdCAqc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwg
Z3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ2Jvb2xlYW4gKmJlZW5IZXJlID0gKGdib29sZWFu
Kil1c2VyRGF0YTsKKyAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKyAgICBHZGtQaXhidWYgKmlj
b24gPSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfZmluaXNoKFdFQktJVF9J
Q09OX0RBVEFCQVNFKHNvdXJjZU9iamVjdCksIHJlc3VsdCwgJmVycm9yKTsKKyAgICBnX2Fzc2Vy
dCghaWNvbik7CisKKyAgICAqYmVlbkhlcmUgPSBUUlVFOworCisgICAgZ19tYWluX2xvb3BfcXVp
dChsb29wKTsKK30KKworc3RhdGljIHZvaWQgaWNvbkRhdGFiYXNlR2V0SWNvbkNhbmNlbGxlZENh
bGxiYWNrKEdPYmplY3QgKnNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIGdwb2lu
dGVyIHVzZXJEYXRhKQoreworICAgIGdib29sZWFuICpiZWVuSGVyZSA9IChnYm9vbGVhbiopdXNl
ckRhdGE7CisgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisgICAgR2RrUGl4YnVmICppY29uID0g
d2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2ZpbmlzaChXRUJLSVRfSUNPTl9E
QVRBQkFTRShzb3VyY2VPYmplY3QpLCByZXN1bHQsICZlcnJvcik7CisgICAgZ19hc3NlcnQoIWlj
b24pOworICAgIGdfYXNzZXJ0KGVycm9yICYmIGdfZXJyb3JfbWF0Y2hlcyhlcnJvciwgR19JT19F
UlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKTsKKworICAgICpiZWVuSGVyZSA9IFRSVUU7CisK
KyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFp
bkxvb3BRdWl0SWZMb2FkQ29tcGxldGVkKGdib29sZWFuKiBpY29uT3JQYWdlTG9hZGVkKQorewor
ICAgIGlmICgqaWNvbk9yUGFnZUxvYWRlZCkKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29w
KTsKKyAgICBlbHNlCisgICAgICAgICppY29uT3JQYWdlTG9hZGVkID0gVFJVRTsKK30KKworc3Rh
dGljIHZvaWQgaWRsZVF1aXRMb29wQ2FsbGJhY2soV2ViS2l0V2ViVmlldyAqd2ViVmlldywgR1Bh
cmFtU3BlYyAqcHNwZWMsIGdib29sZWFuKiBpY29uT3JQYWdlTG9hZGVkKQoreworICAgIFdlYktp
dExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJW
aWV3KTsKKworICAgIGlmIChzdGF0dXMgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQgfHwgc3RhdHVz
ID09IFdFQktJVF9MT0FEX0ZBSUxFRCkKKyAgICAgICAgbWFpbkxvb3BRdWl0SWZMb2FkQ29tcGxl
dGVkKGljb25PclBhZ2VMb2FkZWQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3SWNv
bkxvYWRlZChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBjaGFyKiBmcmFtZVVS
SSwgZ2Jvb2xlYW4qIGljb25PclBhZ2VMb2FkZWQpCit7CisgICAgbWFpbkxvb3BRdWl0SWZMb2Fk
Q29tcGxldGVkKGljb25PclBhZ2VMb2FkZWQpOworfQorCitzdGF0aWMgdm9pZCBsb2FkVVJJKGNv
bnN0IGNoYXIgKnVyaSkKK3sKKyAgICBXZWJLaXRXZWJWaWV3ICp2aWV3ID0gV0VCS0lUX1dFQl9W
SUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ2Jvb2xlYW4gaWNvbk9yUGFnZUxvYWRl
ZCA9IEZBTFNFOworCisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsIHVyaSk7CisK
KyAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxM
QkFDSyhpZGxlUXVpdExvb3BDYWxsYmFjayksICZpY29uT3JQYWdlTG9hZGVkKTsKKyAgICBnX3Np
Z25hbF9jb25uZWN0KHZpZXcsICJpY29uLWxvYWRlZCIsIEdfQ0FMTEJBQ0sod2Via2l0V2ViVmll
d0ljb25Mb2FkZWQpLCAmaWNvbk9yUGFnZUxvYWRlZCk7CisKKyAgICBnX21haW5fbG9vcF9ydW4o
bG9vcCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBpY29uRGF0YWJhc2VHZXRJY29uVmFsaWRJZGxl
KGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29u
X3BpeGJ1Zl9hc3luYyh3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKSwgYmFzZV91cmksCisJCQkJ
CSAgICAgICBJQ09OX1NJWkUsIElDT05fU0laRSwgTlVMTCwKKwkJCQkJICAgICAgIGljb25EYXRh
YmFzZUdldEljb25WYWxpZENhbGxiYWNrLCB1c2VyRGF0YSk7CisgICAgcmV0dXJuIEZBTFNFOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gaWNvbkRhdGFiYXNlR2V0SWNvbkludmFsaWRJZGxlKGdwb2lu
dGVyIHVzZXJEYXRhKQoreworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1
Zl9hc3luYyh3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKSwgImh0dHA6Ly93d3cud2Via2l0Z3Rr
Lm9yZy8iLAorCQkJCQkgICAgICAgSUNPTl9TSVpFLCBJQ09OX1NJWkUsIE5VTEwsCisJCQkJCSAg
ICAgICBpY29uRGF0YWJhc2VHZXRJY29uSW52YWxpZENhbGxiYWNrLCB1c2VyRGF0YSk7CisgICAg
cmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gaWNvbkRhdGFiYXNlR2V0SWNvbkNh
bmNlbGxlZElkbGUoZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgR0NhbmNlbGxhYmxlICpjYW5j
ZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3KCk7CisgICAgd2Via2l0X2ljb25fZGF0YWJhc2Vf
Z2V0X2ljb25fcGl4YnVmX2FzeW5jKHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpLCBiYXNlX3Vy
aSwKKwkJCQkJICAgICAgIElDT05fU0laRSwgSUNPTl9TSVpFLCBjYW5jZWxsYWJsZSwKKwkJCQkJ
ICAgICAgIGljb25EYXRhYmFzZUdldEljb25DYW5jZWxsZWRDYWxsYmFjaywgdXNlckRhdGEpOwor
ICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKGNhbmNlbGxhYmxlKTsKKyAgICBnX29iamVjdF91bnJl
ZihjYW5jZWxsYWJsZSk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
V2Via2l0SWNvbkRhdGFiYXNlR2V0SWNvbkFzeW5jKHZvaWQpCit7CisgICAgZ2Jvb2xlYW4gYmVl
blRvSWNvbkNhbGxiYWNrOworCisgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVF
KTsKKworICAgIC8qIExvYWQgdXJpIHRvIG1ha2Ugc3VyZSBmYXZpY29uIGlzIGFkZGVkIHRvIGRh
dGFiYXNlICovCisgICAgbG9hZFVSSShiYXNlX3VyaSk7CisKKyAgICBiZWVuVG9JY29uQ2FsbGJh
Y2sgPSBGQUxTRTsKKyAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYylpY29uRGF0YWJhc2VHZXRJ
Y29uVmFsaWRJZGxlLCAmYmVlblRvSWNvbkNhbGxiYWNrKTsKKyAgICBnX21haW5fbG9vcF9ydW4o
bG9vcCk7CisgICAgZ19hc3NlcnQoYmVlblRvSWNvbkNhbGxiYWNrKTsKKworICAgIGJlZW5Ub0lj
b25DYWxsYmFjayA9IEZBTFNFOworICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWljb25EYXRh
YmFzZUdldEljb25JbnZhbGlkSWRsZSwgJmJlZW5Ub0ljb25DYWxsYmFjayk7CisgICAgZ19tYWlu
X2xvb3BfcnVuKGxvb3ApOworICAgIGdfYXNzZXJ0KGJlZW5Ub0ljb25DYWxsYmFjayk7CisKKyAg
ICBiZWVuVG9JY29uQ2FsbGJhY2sgPSBGQUxTRTsKKyAgICBnX2lkbGVfYWRkKChHU291cmNlRnVu
YylpY29uRGF0YWJhc2VHZXRJY29uQ2FuY2VsbGVkSWRsZSwgJmJlZW5Ub0ljb25DYWxsYmFjayk7
CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworICAgIGdfYXNzZXJ0KGJlZW5Ub0ljb25DYWxs
YmFjayk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRJY29uRGF0YWJhc2VHZXRJY29uVVJJ
KHZvaWQpCit7CisgICAgY2hhciAqaWNvblVSSSA9IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9p
Y29uX3VyaSh3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKSwgYmFzZV91cmkpOworICAgIGNoYXIg
KmV4cGVjdGVkVVJJID0gZ19zdHJkdXBfcHJpbnRmKCIlc2Zhdmljb24uaWNvIiwgYmFzZV91cmkp
OworICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uVVJJLCA9PSwgZXhwZWN0ZWRVUkkpOworICAgIGdf
ZnJlZShleHBlY3RlZFVSSSk7CisgICAgZ19mcmVlKGljb25VUkkpOworfQorCisjZW5kaWYKKwor
c3RhdGljIHZvaWQgdGVzdFdlYmtpdEljb25EYXRhYmFzZVJlbW92ZUFsbCh2b2lkKQoreworICAg
IFdlYktpdEljb25EYXRhYmFzZSAqZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2Uo
KTsKKyAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhcihkYXRhYmFzZSk7CisgICAgY2hhciAq
aWNvblVSSSA9IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3VyaShkYXRhYmFzZSwgYmFz
ZV91cmkpOworICAgIGdfYXNzZXJ0KCFpY29uVVJJKTsKKyAgICBnX2ZyZWUoaWNvblVSSSk7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRJY29uRGF0YWJhc2VDbG9zZURhdGFiYXNlKHZvaWQp
Cit7CisgICAgV2ViS2l0SWNvbkRhdGFiYXNlICpkYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9k
YXRhYmFzZSgpOworICAgIGNoYXIgKmRhdGFiYXNlUGF0aCA9IGdfc3RyZHVwKHdlYmtpdF9pY29u
X2RhdGFiYXNlX2dldF9wYXRoKGRhdGFiYXNlKSk7CisgICAgd2Via2l0X2ljb25fZGF0YWJhc2Vf
c2V0X3BhdGgoZGF0YWJhc2UsIDApOworICAgIGRlbGV0ZURhdGFiYXNlRmlsZUlmRXhpc3RzKGRh
dGFiYXNlUGF0aCk7CisgICAgZ19mcmVlKGRhdGFiYXNlUGF0aCk7Cit9CisKK2ludCBtYWluKGlu
dCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBTb3VwU2VydmVyKiBzZXJ2ZXI7CisgICAgU291
cFVSSSogc291cF91cmk7CisKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgMCk7CisK
KyAgICAvKiBIb3BlZnVsbHkgbWFrZSB0ZXN0IGluZGVwZW5kZW50IG9mIHRoZSBwYXRoIGl0J3Mg
Y2FsbGVkIGZyb20uICovCisgICAgdGVzdHV0aWxzX3JlbGF0aXZlX2NoZGlyKCJTb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC5odG1sIiwgYXJndlswXSk7CisKKyAgICBzZXJ2
ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwgTlVMTCk7CisgICAgc291
cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7CisKKyAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxl
cihzZXJ2ZXIsIE5VTEwsIHNlcnZlcl9jYWxsYmFjaywgTlVMTCwgTlVMTCk7CisKKyAgICBzb3Vw
X3VyaSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKKyAgICBzb3VwX3VyaV9z
ZXRfcG9ydChzb3VwX3VyaSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7CisKKyAgICBi
YXNlX3VyaSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX3VyaSwgRkFMU0UpOworICAgIHNvdXBf
dXJpX2ZyZWUoc291cF91cmkpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvaWNvbmRhdGFiYXNl
L3NldC1wYXRoIiwgdGVzdFdlYmtpdEljb25EYXRhYmFzZVNldFBhdGgpOworCisgICAgLy8gVGhl
c2UgdHdvIHRlc3RzIHdpbGwgdHJpZ2dlciBhbiBBU1NFUlRJT04gb24gZGVidWcgYnVpbGRzIGR1
ZQorICAgIC8vIHRvIGh0dHA6Ly93ZWJraXQub3JnL2IvNjc1ODIuIFJlbW92ZSB0aGUgZ3VhcmRz
IG9uY2UgdGhlIGJ1ZyBpcyBmaXhlZC4KKyNpZmRlZiBOREVCVUcKKyAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi93ZWJraXQvaWNvbmRhdGFiYXNlL2ljb24tYXN5bmMiLCB0ZXN0V2Via2l0SWNvbkRhdGFi
YXNlR2V0SWNvbkFzeW5jKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvaWNvbmRhdGFi
YXNlL2ljb24tdXJpIiwgdGVzdFdlYmtpdEljb25EYXRhYmFzZUdldEljb25VUkkpOworI2VuZGlm
CisKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvaWNvbmRhdGFiYXNlL3JlbW92ZS1hbGwi
LCB0ZXN0V2Via2l0SWNvbkRhdGFiYXNlUmVtb3ZlQWxsKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvaWNvbmRhdGFiYXNlL2Nsb3NlLWRiIiwgdGVzdFdlYmtpdEljb25EYXRhYmFzZUNs
b3NlRGF0YWJhc2UpOworCisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30KKyNlbHNlCitpbnQg
bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgZ19jcml0aWNhbCgiWW91IHdpbGwg
bmVlZCBndGstMi4xNC4wIHRvIHJ1biB0aGUgdW5pdCB0ZXN0cy4gRG9pbmcgbm90aGluZyBub3cu
Iik7CisgICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcAppbmRleCAzODNiMDgxN2VjYmFlZTMxNzRlNWVm
N2VjN2U5NDE1Yjg0MzdjMTQzLi5kZDYzNDE0YjE0YzhjNzY4M2Y2MGYyMDIxM2M5MjAxY2M4YWE1
ZjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFi
YXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNl
LmNwcApAQCAtMjMsMTQgKzIzLDE5IEBACiAjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCiAj
aW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2lu
Y2x1ZGUgIkdSZWZQdHIuaCIKICNpbmNsdWRlICJJY29uRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJJ
Y29uRGF0YWJhc2VDbGllbnQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFNp
emUuaCIKKyNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzLmgiCiAjaW5jbHVkZSAid2Via2l0Z2xvYmFs
c3ByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlLmgiCiAjaW5j
bHVkZSAid2Via2l0bWFyc2hhbC5oIgogI2luY2x1ZGUgIndlYmtpdHNlY3VyaXR5b3JpZ2lucHJp
dmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdHdlYmZyYW1lLmgiCiAjaW5jbHVkZSA8Z2xpYi9naTE4
bi1saWIuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTQyLDI2
ICs0NywxMjUgQEAKICAqIGluIHRhYiBsYWJlbHMsIHdpbmRvdyBjYXB0aW9ucyBvciBib29rbWFy
a3MuIEFsbCB2aWV3cyBzaGFyZQogICogdGhlIHNhbWUgaWNvbiBkYXRhYmFzZS4KICAqCi0gKiBU
aGUgaWNvbiBkYXRhYmFzZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYW5kIHN0b3JlZCBpbgotICog
fi8ubG9jYWwvc2hhcmUvd2Via2l0L2ljb25kYXRhYmFzZSwgZGVwZW5kaW5nIG9uIFhER19EQVRB
X0hPTUUuCisgKiBUaGUgZGF0YWJhc2UgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gSW4gb3JkZXIg
Zm9yIGljb25zIHRvIGJlCisgKiBsb2FkZWQsIHlvdSB3aWxsIG5lZWQgdG8gc2V0IGFuIGljb24g
ZGF0YWJhc2UgcGF0aCB1c2luZworICogd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgoKS4g
RGlzYWJsZSB0aGUgZGF0YWJhc2UgYWdhaW4gcGFzc2luZworICogJU5VTEwgdG8gdGhlIHByZXZp
b3VzIGNhbGwuCiAgKgogICogV2ViS2l0IHdpbGwgYXV0b21hdGljYWxseSBsb29rIGZvciBhdmFp
bGFibGUgaWNvbnMgaW4gbGluayBlbGVtZW50cwogICogb24gb3BlbmVkIHBhZ2VzIGFzIHdlbGwg
YXMgYW4gZXhpc3RpbmcgZmF2aWNvbi5pY28gYW5kIGxvYWQgdGhlCi0gKiBpbWFnZXMgZm91bmQg
aW50byB0aGUgbWVtb3J5IGNhY2hlIGlmIHBvc3NpYmxlLiBUaGUgc2lnbmFsICJpY29uLWxvYWRl
ZCIKLSAqIHdpbGwgYmUgZW1pdHRlZCB3aGVuIGFueSBpY29uIGlzIGZvdW5kIGFuZCBsb2FkZWQu
Ci0gKiBPbGQgSWNvbnMgYXJlIGF1dG9tYXRpY2FsbHkgY2xlYW5lZCB1cCBhZnRlciA0IGRheXMu
Ci0gKgotICogd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgoKSBjYW4gYmUgdXNlZCB0byBj
aGFuZ2UgdGhlIGxvY2F0aW9uCi0gKiBvZiB0aGUgZGF0YWJhc2UgYW5kIGFsc28gdG8gZGlzYWJs
ZSBpdCBieSBwYXNzaW5nICVOVUxMLgorICogaW1hZ2VzIGZvdW5kIGludG8gdGhlIG1lbW9yeSBj
YWNoZSBpZiBwb3NzaWJsZS4KICAqCiAgKiBJZiBXZWJLaXRXZWJTZXR0aW5nczo6ZW5hYmxlLXBy
aXZhdGUtYnJvd3NpbmcgaXMgJVRSVUUgbmV3IGljb25zCiAgKiB3b24ndCBiZSBhZGRlZCB0byB0
aGUgZGF0YWJhc2Ugb24gZGlzayBhbmQgbm8gZXhpc3RpbmcgaWNvbnMgd2lsbAogICogYmUgZGVs
ZXRlZCBmcm9tIGl0LgogICoKLSAqIFNpbmNlOiAxLjMuMTMKKyAqIFNpbmNlOiAxLjgKICAqLwog
CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2Ns
YXNzIFBlbmRpbmdJY29uUmVxdWVzdDsKKworc3RhdGljIHZvaWQgd2Via2l0SWNvbkRhdGFiYXNl
UHJvY2Vzc1BlbmRpbmdJY29uc0ZvclVSSShXZWJLaXRJY29uRGF0YWJhc2UqLCBjb25zdCBTdHJp
bmcmIHBhZ2VVUkkpOworc3RhdGljIHZvaWQgd2Via2l0SWNvbkRhdGFiYXNlSW1wb3J0RmluaXNo
ZWQoV2ViS2l0SWNvbkRhdGFiYXNlKik7CitzdGF0aWMgdm9pZCB3ZWJraXRJY29uRGF0YWJhc2VH
ZXRJY29uUGl4YnVmQ2FuY2VsbGVkKEdDYW5jZWxsYWJsZSosIFBlbmRpbmdJY29uUmVxdWVzdCop
OworCitjbGFzcyBJY29uRGF0YWJhc2VDbGllbnRHdGsgOiBwdWJsaWMgSWNvbkRhdGFiYXNlQ2xp
ZW50IHsKK3B1YmxpYzoKKworICAgIC8vIEljb25EYXRhYmFzZUNsaWVudCBpbnRlcmZhY2UKKyAg
ICB2aXJ0dWFsIGJvb2wgcGVyZm9ybUltcG9ydCgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVtb3ZlQWxsSWNvbnMoKSB7IH07CisKKyAgICAvLyBDYWxsZWQgd2hlbiB0
aGUgYW4gaWNvbiBpcyByZXF1ZXN0ZWQgd2hpbGUgdGhlIGluaXRpYWwKKyAgICAvLyBpbXBvcnQg
aXMgZ29pbmcgb24uCisgICAgdmlydHVhbCB2b2lkIGRpZEltcG9ydEljb25VUkxGb3JQYWdlVVJM
KGNvbnN0IFN0cmluZyYgVVJMKSB7IH07CisKKyAgICAvLyBDYWxsZWQgd2hlbmV2ZXIgYSByZXRh
aW5lZCBpY29uIGlzIHJlYWQgZnJvbSBkYXRhYmFzZS4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkSW1w
b3J0SWNvbkRhdGFGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgVVJMKQorICAgIHsKKyAgICAgICAg
Ly8gV2UgbmVlZCB0byBlbWl0IHRoaXMgaGVyZSBiZWNhdXNlIHdlYmtpdEljb25EYXRhYmFzZURp
c3BhdGNoRGlkUmVjZWl2ZUljb24oKQorICAgICAgICAvLyBpcyBvbmx5IGNhbGxlZCBmb3IgaWNv
bnMgdGhhdCBoYXZlIGp1c3QgYmVpbmcgZG93bmxvYWRlZCwgYW5kIHRoaXMgaXMgY2FsbGVkCisg
ICAgICAgIC8vIHdoZW4gaWNvbiBkYXRhIGlzIGltcG9ydGVkIGZyb20gdGhlIGRhdGFiYXNlLgor
ICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCks
ICJpY29uLWxvYWRlZCIsIFVSTC51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICB3ZWJraXRJY29u
RGF0YWJhc2VQcm9jZXNzUGVuZGluZ0ljb25zRm9yVVJJKHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFz
ZSgpLCBVUkwpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VJY29uRm9yUGFn
ZVVSTChjb25zdCBTdHJpbmcmIFVSTCkKKyAgICB7CisgICAgICAgIC8vIENhbGxlZCB3aGVuIHRo
ZSBJY29uTG9hZGVyIChpLmUuIGlzIG5vdCBvYnRhaW5lZCBmcm9tIHRoZQorICAgICAgICAvLyBp
Y29uIGRhdGFiYXNlKSByZXRyaWV2ZXMgYW4gaWNvbiBmb3IgYW4gVVJMLgorICAgICAgICBkaWRJ
bXBvcnRJY29uRGF0YUZvclBhZ2VVUkwoVVJMKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkRmluaXNoVVJMSW1wb3J0KCkKKyAgICB7CisgICAgICAgIHdlYmtpdEljb25EYXRhYmFzZUlt
cG9ydEZpbmlzaGVkKHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpKTsKKworICAgICAgICAvLyBO
b3cgdGhhdCBldmVyeXRoaW5nIGlzIGltcG9ydGVkIGVuYWJsZSBwcnVuaW5nIG9mIG9sZAorICAg
ICAgICAvLyBpY29ucy4gTm8gaWNvbiB3aWxsIGJlIHJlbW92ZWQgZHVyaW5nIHRoZSBpbXBvcnQg
cHJvY2VzcworICAgICAgICAvLyBiZWNhdXNlIHdlIGRpc2FibGUgY2xlYW51cHMgYmVmb3JlIG9w
ZW5pbmcgdGhlIGRhdGFiYXNlLgorICAgICAgICBJY29uRGF0YWJhc2U6OmFsbG93RGF0YWJhc2VD
bGVhbnVwKCk7CisgICAgfQorfTsKKworY2xhc3MgUGVuZGluZ0ljb25SZXF1ZXN0IHsKK3B1Ymxp
YzoKKyAgICBQZW5kaW5nSWNvblJlcXVlc3QoY29uc3QgU3RyaW5nJiBwYWdlVVJJLCBHU2ltcGxl
QXN5bmNSZXN1bHQqIHJlc3VsdCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgSW50U2l6ZSBp
Y29uU2l6ZSkKKyAgICAgICAgOiBtX3BhZ2VVUkkocGFnZVVSSSkKKyAgICAgICAgLCBtX2FzeW5j
UmVzdWx0KHJlc3VsdCkKKyAgICAgICAgLCBtX2NhbmNlbGxhYmxlKGNhbmNlbGxhYmxlKQorICAg
ICAgICAsIG1fY2FuY2VsbGVkSWQoMCkKKyAgICAgICAgLCBtX2ljb25TaXplKGljb25TaXplKQor
ICAgIHsKKyAgICAgICAgaWYgKCFjYW5jZWxsYWJsZSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBtX2NhbmNlbGxlZElkID0gZ19jYW5jZWxsYWJsZV9jb25uZWN0KGNhbmNlbGxhYmxl
LCBHX0NBTExCQUNLKHdlYmtpdEljb25EYXRhYmFzZUdldEljb25QaXhidWZDYW5jZWxsZWQpLCB0
aGlzLCAwKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGFfZnVsbChHX09CSkVDVChyZXN1bHQp
LCAiY2FuY2VsbGFibGUiLCBnX29iamVjdF9yZWYoY2FuY2VsbGFibGUpLCBzdGF0aWNfY2FzdDxH
RGVzdHJveU5vdGlmeT4oZ19vYmplY3RfdW5yZWYpKTsKKyAgICB9CisKKyAgICB+UGVuZGluZ0lj
b25SZXF1ZXN0KCkKKyAgICB7CisgICAgICAgIGlmIChtX2NhbmNlbGxlZElkID4gMCkKKyAgICAg
ICAgICAgIGdfY2FuY2VsbGFibGVfZGlzY29ubmVjdChtX2NhbmNlbGxhYmxlLmdldCgpLCBtX2Nh
bmNlbGxlZElkKTsKKyAgICB9CisKKyAgICBjb25zdCBTdHJpbmcmIHBhZ2VVUkkoKSB7IHJldHVy
biBtX3BhZ2VVUkk7IH0KKyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIGFzeW5jUmVzdWx0KCkgeyBy
ZXR1cm4gbV9hc3luY1Jlc3VsdC5nZXQoKTsgfQorCisgICAgdm9pZCBhc3luY1Jlc3VsdENhbmNl
bCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9hc3luY1Jlc3VsdCk7CisgICAgICAgIGdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9zZXRfZXJyb3IobV9hc3luY1Jlc3VsdC5nZXQoKSwgR19JT19FUlJP
UiwgR19JT19FUlJPUl9DQU5DRUxMRUQsICIlcyIsIF8oIk9wZXJhdGlvbiB3YXMgY2FuY2VsbGVk
IikpOworICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUobV9hc3luY1Jlc3Vs
dC5nZXQoKSk7CisgICAgfQorCisgICAgdm9pZCBhc3luY1Jlc3VsdENvbXBsZXRlSW5JZGxlKEdk
a1BpeGJ1ZiogaWNvbikKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2FzeW5jUmVzdWx0KTsKKyAg
ICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3BvaW50ZXIobV9hc3luY1Jl
c3VsdC5nZXQoKSwgaWNvbiwgaWNvbiA/IHN0YXRpY19jYXN0PEdEZXN0cm95Tm90aWZ5PihnX29i
amVjdF91bnJlZikgOiAwKTsKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRl
X2luX2lkbGUobV9hc3luY1Jlc3VsdC5nZXQoKSk7CisgICAgfQorCisgICAgdm9pZCBhc3luY1Jl
c3VsdENvbXBsZXRlKEdka1BpeGJ1ZiogaWNvbikKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2Fz
eW5jUmVzdWx0KTsKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3Bv
aW50ZXIobV9hc3luY1Jlc3VsdC5nZXQoKSwgaWNvbiwgaWNvbiA/IHN0YXRpY19jYXN0PEdEZXN0
cm95Tm90aWZ5PihnX29iamVjdF91bnJlZikgOiAwKTsKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNf
cmVzdWx0X2NvbXBsZXRlKG1fYXN5bmNSZXN1bHQuZ2V0KCkpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBTdHJpbmcgbV9wYWdlVVJJOworICAgIEdSZWZQdHI8R1NpbXBsZUFzeW5jUmVzdWx0PiBt
X2FzeW5jUmVzdWx0OworICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOwor
ICAgIGd1bG9uZyBtX2NhbmNlbGxlZElkOworICAgIEludFNpemUgbV9pY29uU2l6ZTsKK307CisK
IAogZW51bSB7CiAgICAgUFJPUF8wLApAQCAtNzcsMTAgKzE4MSwxNiBAQCBlbnVtIHsKIAogc3Rh
dGljIGd1aW50IHdlYmtpdF9pY29uX2RhdGFiYXNlX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAw
LCB9OwogCi1HX0RFRklORV9UWVBFKFdlYktpdEljb25EYXRhYmFzZSwgd2Via2l0X2ljb25fZGF0
YWJhc2UsIEdfVFlQRV9PQkpFQ1QpOworR19ERUZJTkVfVFlQRShXZWJLaXRJY29uRGF0YWJhc2Us
IHdlYmtpdF9pY29uX2RhdGFiYXNlLCBHX1RZUEVfT0JKRUNUKQorCit0eXBlZGVmIFZlY3RvcjxP
d25QdHI8UGVuZGluZ0ljb25SZXF1ZXN0PiA+IFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvcjsKK3R5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFBlbmRpbmdJY29uUmVxdWVzdFZlY3Rvcio+IFBlbmRpbmdJ
Y29uUmVxdWVzdE1hcDsKIAogc3RydWN0IF9XZWJLaXRJY29uRGF0YWJhc2VQcml2YXRlIHsKICAg
ICBHT3duUHRyPGdjaGFyPiBwYXRoOworICAgIEljb25EYXRhYmFzZUNsaWVudEd0ayBpY29uRGF0
YWJhc2VDbGllbnQ7CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0TWFwIHBlbmRpbmdJY29uUmVxdWVz
dHM7CisgICAgYm9vbCBpbXBvcnRGaW5pc2hlZDsKIH07CiAKIHN0YXRpYyB2b2lkIHdlYmtpdF9p
Y29uX2RhdGFiYXNlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKQEAgLTE0NiwzMSArMjU2LDMz
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX2NsYXNzX2luaXQoV2ViS2l0SWNv
bkRhdGFiYXNlQ2xhc3MqIGtsYXNzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXygiUGF0aCIpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGFic29sdXRlIHBhdGgg
b2YgdGhlIGljb24gZGF0YWJhc2UgZm9sZGVyIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIC8qKgotICAgICAqIFdlYktpdEljb25EYXRh
YmFzZTo6aWNvbi1sb2FkZWQ6Ci0gICAgICogQGRhdGFiYXNlOiB0aGUgb2JqZWN0IG9uIHdoaWNo
IHRoZSBzaWduYWwgaXMgZW1pdHRlZAotICAgICAqIEBmcmFtZTogdGhlIGZyYW1lIGNvbnRhaW5p
bmcgdGhlIGljb24KLSAgICAgKiBAZnJhbWVfdXJpOiB0aGUgVVJJIG9mIHRoZSBmcmFtZSBjb250
YWluaW5nIHRoZSBpY29uCi0gICAgICoKLSAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdo
ZW4gYSBmYXZpY29uIGlzIGF2YWlsYWJsZSBmb3IgYSBwYWdlLAotICAgICAqIG9yIGEgY2hpbGQg
ZnJhbWUuCi0gICAgICogU2VlIFdlYktpdFdlYlZpZXc6Omljb24tbG9hZGVkIGlmIHlvdSBvbmx5
IG5lZWQgdGhlIGZhdmljb24gZm9yCi0gICAgICogdGhlIG1haW4gZnJhbWUgb2YgYSBwYXJ0aWN1
bGFyICNXZWJLaXRXZWJWaWV3LgotICAgICAqCi0gICAgICogU2luY2U6IDEuMy4xMwotICAgICAq
LwotICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NpZ25hbHNbSUNPTl9MT0FERURdID0gZ19zaWdu
YWxfbmV3KCJpY29uLWxvYWRlZCIsCi0gICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhrbGFz
cyksCi0gICAgICAgICAgICAoR1NpZ25hbEZsYWdzKUdfU0lHTkFMX1JVTl9MQVNULAotICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICBOVUxMLAotICAgICAgICAg
ICAgd2Via2l0X21hcnNoYWxfVk9JRF9fT0JKRUNUX1NUUklORywKLSAgICAgICAgICAgIEdfVFlQ
RV9OT05FLCAyLAotICAgICAgICAgICAgV0VCS0lUX1RZUEVfV0VCX0ZSQU1FLAotICAgICAgICAg
ICAgR19UWVBFX1NUUklORyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKworICAgICAv
KioKKyAgICAgICogV2ViS2l0SWNvbkRhdGFiYXNlOjppY29uLWxvYWRlZDoKKyAgICAgICogQGRh
dGFiYXNlOiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAg
KiBAZnJhbWVfdXJpOiB0aGUgVVJJIG9mIHRoZSBmcmFtZSBjb250YWluaW5nIHRoZSBpY29uCisg
ICAgICAqCisgICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBhIGZhdmljb24gaXMg
YXZhaWxhYmxlIGZvciB0aGUKKyAgICAgICogbWFpbiBmcmFtZSBvZiBhIHBhZ2UuU2VlICNXZWJL
aXRXZWJWaWV3OjppY29uLWxvYWRlZCBpZiB5b3UKKyAgICAgICogb25seSBuZWVkIHRoZSBmYXZp
Y29uIG9mIGEgcGFydGljdWxhciAjV2ViS2l0V2ViVmlldy4KKyAgICAgICoKKyAgICAgICogTm90
ZSB0aGF0IHRoaXMgc2lnbmFsIGNhcnJpZXMgdGhlIFVSSSBvZiB0aGUgZnJhbWUgdGhhdCBsb2Fk
cworICAgICAgKiB0aGUgaWNvbiwgd2hpbGUgI1dlYktpdFdlYlZpZXc6Omljb24tbG9hZGVkIHBy
b3ZpZGVzIHRoZSBVUkkKKyAgICAgICogb2YgdGhlIGZhdmljb24uCisgICAgICAqCisgICAgICAq
IFNpbmNlOiAxLjgKKyAgICAgICovCisgICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NpZ25hbHNb
SUNPTl9MT0FERURdID0gZ19zaWduYWxfbmV3KCJpY29uLWxvYWRlZCIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9G
Uk9NX0NMQVNTKGtsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKEdTaWduYWxGbGFncylHX1NJR05BTF9SVU5fTEFTVCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfVk9J
RF9fU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1NUUklORyk7CiAK
ICAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRJY29uRGF0
YWJhc2VQcml2YXRlKSk7CiB9CkBAIC0xNzgsMTAgKzI5MCwxOCBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRfaWNvbl9kYXRhYmFzZV9jbGFzc19pbml0KFdlYktpdEljb25EYXRhYmFzZUNsYXNzKiBrbGFz
cykKIHN0YXRpYyB2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX2luaXQoV2ViS2l0SWNvbkRhdGFi
YXNlKiBkYXRhYmFzZSkKIHsKICAgICBkYXRhYmFzZS0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURShkYXRhYmFzZSwgV0VCS0lUX1RZUEVfSUNPTl9EQVRBQkFTRSwgV2ViS2l0SWNv
bkRhdGFiYXNlUHJpdmF0ZSk7Ci0gICAgLy8gJ3BsYWNlbWVudCBuZXcgc3ludGF4Jywgc2VlIHdl
YmtpdHdlYnZpZXcuY3BwCiAgICAgbmV3IChkYXRhYmFzZS0+cHJpdikgV2ViS2l0SWNvbkRhdGFi
YXNlUHJpdmF0ZSgpOwogfQogCisvLyBDYWxsZWQgZnJvbSBGcmFtZUxvYWRlckNsaWVudDo6ZGlz
cGF0Y2hEaWRSZWNlaXZlSWNvbigpCit2b2lkIHdlYmtpdEljb25EYXRhYmFzZURpc3BhdGNoRGlk
UmVjZWl2ZUljb24oV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgY2hhciogZnJh
bWVVUkkpCit7CisgICAgZ19zaWduYWxfZW1pdChkYXRhYmFzZSwgd2Via2l0X2ljb25fZGF0YWJh
c2Vfc2lnbmFsc1tJQ09OX0xPQURFRF0sIDAsIGZyYW1lVVJJKTsKKworICAgIC8vIFJldGFpbiB0
aGUgbmV3IGljb24uCisgICAgaWNvbkRhdGFiYXNlKCkucmV0YWluSWNvbkZvclBhZ2VVUkwoU3Ry
aW5nOjpmcm9tVVRGOChmcmFtZVVSSSkpOworfQorCiAvKioKICAqIHdlYmtpdF9pY29uX2RhdGFi
YXNlX2dldF9wYXRoOgogICogQGRhdGFiYXNlOiBhICNXZWJLaXRJY29uRGF0YWJhc2UKQEAgLTIw
MSw5ICszMjEsOSBAQCBjb25zdCBnY2hhciogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3BhdGgo
V2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKIAogc3RhdGljIHZvaWQgY2xvc2VJY29uRGF0
YWJhc2VPbkV4aXQoKQogewotICAgIGlmIChXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5pc0VuYWJs
ZWQoKSkgewotICAgICAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5zZXRFbmFibGVkKGZhbHNl
KTsKLSAgICAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuY2xvc2UoKTsKKyAgICBpZiAoaWNv
bkRhdGFiYXNlKCkuaXNFbmFibGVkKCkpIHsKKyAgICAgICAgaWNvbkRhdGFiYXNlKCkuc2V0RW5h
YmxlZChmYWxzZSk7CisgICAgICAgIGljb25EYXRhYmFzZSgpLmNsb3NlKCk7CiAgICAgfQogfQog
CkBAIC0yMTIsMjkgKzMzMiwzNiBAQCBzdGF0aWMgdm9pZCBjbG9zZUljb25EYXRhYmFzZU9uRXhp
dCgpCiAgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQogICogQHBhdGg6IGFuIGFi
c29sdXRlIHBhdGggdG8gdGhlIGljb24gZGF0YWJhc2UgZm9sZGVyCiAgKgotICogU3BlY2lmaWVz
IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBkYXRhYmFzZSBmb2xkZXIgb24gZGlzay4KKyAqIFNw
ZWNpZmllcyB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZGF0YWJhc2UgZm9sZGVyIG9uIGRpc2su
IFRoZQorICogaWNvbiBkYXRhYmFzZSB3aWxsIG9ubHkgYmUgZW5hYmxlZCBhZnRlciBhIGNhbGwg
dG8gdGhpcyBtZXRob2QuCiAgKgogICogUGFzc2luZyAlTlVMTCBvciAiIiBkaXNhYmxlcyB0aGUg
aWNvbiBkYXRhYmFzZS4KICAqCi0gKiBTaW5jZTogMS4zLjEzCisgKiBTaW5jZTogMS44CiAgKiov
CiB2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKFdlYktpdEljb25EYXRhYmFzZSog
ZGF0YWJhc2UsIGNvbnN0IGdjaGFyKiBwYXRoKQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpKTsKIAogICAgIGlmIChkYXRhYmFzZS0+cHJp
di0+cGF0aC5nZXQoKSkKLSAgICAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuY2xvc2UoKTsK
KyAgICAgICAgaWNvbkRhdGFiYXNlKCkuY2xvc2UoKTsKIAorICAgIGRhdGFiYXNlLT5wcml2LT5p
bXBvcnRGaW5pc2hlZCA9IGZhbHNlOwogICAgIGlmICghKHBhdGggJiYgcGF0aFswXSkpIHsKICAg
ICAgICAgZGF0YWJhc2UtPnByaXYtPnBhdGguc2V0KDApOwotICAgICAgICBXZWJDb3JlOjppY29u
RGF0YWJhc2UoKS5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgaWNvbkRhdGFiYXNlKCkuc2V0
RW5hYmxlZChmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBkYXRhYmFzZS0+
cHJpdi0+cGF0aC5zZXQoZ19zdHJkdXAocGF0aCkpOworICAgIGljb25EYXRhYmFzZSgpLnNldENs
aWVudCgmZGF0YWJhc2UtPnByaXYtPmljb25EYXRhYmFzZUNsaWVudCk7CisgICAgSWNvbkRhdGFi
YXNlOjpkZWxheURhdGFiYXNlQ2xlYW51cCgpOworICAgIGljb25EYXRhYmFzZSgpLnNldEVuYWJs
ZWQodHJ1ZSk7CisgICAgaWYgKCFpY29uRGF0YWJhc2UoKS5vcGVuKGZpbGVuYW1lVG9TdHJpbmco
cGF0aCksIEljb25EYXRhYmFzZTo6ZGVmYXVsdERhdGFiYXNlRmlsZW5hbWUoKSkpIHsKKyAgICAg
ICAgSWNvbkRhdGFiYXNlOjphbGxvd0RhdGFiYXNlQ2xlYW51cCgpOworICAgICAgICByZXR1cm47
CisgICAgfQogCi0gICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc2V0RW5hYmxlZCh0cnVlKTsK
LSAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5vcGVuKFdlYkNvcmU6OmZpbGVuYW1lVG9TdHJp
bmcoZGF0YWJhc2UtPnByaXYtPnBhdGguZ2V0KCkpLCBXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmRl
ZmF1bHREYXRhYmFzZUZpbGVuYW1lKCkpOworICAgIGRhdGFiYXNlLT5wcml2LT5wYXRoLnNldChn
X3N0cmR1cChwYXRoKSk7CiAKICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwog
ICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKQEAgLTI1Myw1MSArMzgwLDI1MCBAQCB2b2lkIHdlYmtp
dF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNv
bnN0IGdjaGFyKiBwYQogICoKICAqIFJldHVybnM6IGEgbmV3bHkgYWxsb2NhdGVkIFVSSSBmb3Ig
dGhlIGZhdmljb24sIG9yICVOVUxMCiAgKgotICogU2luY2U6IDEuMy4xMworICogU2luY2U6IDEu
OAogICoqLwogZ2NoYXIqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3VyaShXZWJLaXRJ
Y29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBnY2hhciogcGFnZVVSSSkKIHsKICAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShkYXRhYmFzZSksIDApOwog
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHBhZ2VVUkksIDApOworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAKLSAgICBTdHJpbmcgcGFnZVVSTCA9IFN0cmluZzo6ZnJvbVVURjgocGFnZVVS
SSk7Ci0gICAgcmV0dXJuIGdfc3RyZHVwKFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLnN5bmNocm9u
b3VzSWNvblVSTEZvclBhZ2VVUkwocGFnZVVSTCkudXRmOCgpLmRhdGEoKSk7CisgICAgU3RyaW5n
IGljb25VUkkgPSBpY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKFN0
cmluZzo6ZnJvbVVURjgocGFnZVVSSSkpOworICAgIGlmIChpY29uVVJJLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gZ19zdHJkdXAoaWNvblVSSS51dGY4KCku
ZGF0YSgpKTsKK30KKworc3RhdGljIEdka1BpeGJ1ZiogZ2V0SWNvblBpeGJ1ZlN5bmNocm9ub3Vz
bHkoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBwYWdlVVJMLCBn
dWludCB3aWR0aCwgZ3VpbnQgaGVpZ2h0KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgLy8gVGhlIGV4YWN0IHNpemUgd2UgcGFzcyBpcyBpcnJlbGV2YW50IHRvIHRoZSBpY29u
RGF0YWJhc2UgY29kZS4KKyAgICAvLyBXZSBtdXN0IHBhc3Mgc29tZXRoaW5nIGdyZWF0ZXIgdGhh
biAweDAgdG8gZ2V0IGEgcGl4YnVmLgorICAgIEltYWdlKiBpY29uID0gaWNvbkRhdGFiYXNlKCku
c3luY2hyb25vdXNJY29uRm9yUGFnZVVSTChwYWdlVVJMLCBJbnRTaXplKDE2LCAxNikpOworICAg
IGlmICghaWNvbikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4g
cGl4YnVmID0gYWRvcHRHUmVmKGljb24tPmdldEdka1BpeGJ1ZigpKTsKKyAgICBpZiAoIXBpeGJ1
ZikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBBIHNpemUgb2YgKDAsIDApIG1lYW5zIHRo
ZSBtYXhpbXVtIGF2YWlsYWJsZSBzaXplLgorICAgIGlmICh3aWR0aCAmJiBoZWlnaHQgJiYgKGlj
b24tPndpZHRoKCkgIT0gKGludCkgd2lkdGggfHwgaWNvbi0+aGVpZ2h0KCkgIT0gKGludCkgaGVp
Z2h0KSkKKyAgICAgICAgcGl4YnVmID0gZ2RrX3BpeGJ1Zl9zY2FsZV9zaW1wbGUocGl4YnVmLmdl
dCgpLCB3aWR0aCwgaGVpZ2h0LCBHREtfSU5URVJQX0JJTElORUFSKTsKKyAgICByZXR1cm4gcGl4
YnVmLmxlYWtSZWYoKTsKIH0KIAogLyoqCiAgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl9waXhidWY6CiAgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQogICogQHBhZ2Vf
dXJpOiBVUkkgb2YgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbgorICogQHdpZHRoOiB0aGUg
ZGVzaXJlZCB3aWR0aCBmb3IgdGhlIGljb24KKyAqIEBoZWlnaHQ6IHRoZSBkZXNpcmVkIGhlaWdo
dCBmb3IgdGhlIGljb24KICAqCiAgKiBPYnRhaW5zIGEgI0dka1BpeGJ1ZiBvZiB0aGUgZmF2aWNv
biBmb3IgdGhlIGdpdmVuIHBhZ2UgVVJJLCBvcgotICogYSBkZWZhdWx0IGljb24gaWYgdGhlcmUg
aXMgbm8gaWNvbiBmb3IgdGhlIGdpdmVuIHBhZ2UuIFVzZQotICogd2Via2l0X2ljb25fZGF0YWJh
c2VfZ2V0X2ljb25fdXJpKCkgaWYgeW91IG5lZWQgdG8gZGlzdGluZ3Vpc2ggdGhlc2UgY2FzZXMu
Ci0gKiBVc3VhbGx5IHlvdSB3YW50IHRvIGNvbm5lY3QgdG8gV2ViS2l0SWNvbkRhdGFiYXNlOjpp
Y29uLWxvYWRlZCBhbmQgY2FsbCB0aGlzCisgKiAlTlVMTCBpZiB0aGVyZSBpcyBubyBpY29uIGZv
ciB0aGUgZ2l2ZW4gcGFnZSBvciBpdCBoYXNuJ3QgYmVlbgorICogbG9hZGVkIGZyb20gZGlzayB5
ZXQuIFVzZSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmkoKSBpZgorICogeW91IG5l
ZWQgdG8gZGlzdGluZ3Vpc2ggdGhlc2UgY2FzZXMuICBUbyBtYWtlIHN1cmUgdGhpcyBtZXRob2QK
KyAqIHJldHVybiB3aWxsIHJldHVybiBhIHZhbGlkIGljb24sIHdoZW4gdGhlIGdpdmVuIFVSSSBo
YXMgb25lLCB5b3UKKyAqIHNob3VsZCBjb25uZWN0IHRvIFdlYktpdEljb25EYXRhYmFzZTo6aWNv
bi1sb2FkZWQgYW5kIGNhbGwgdGhpcwogICogbWV0aG9kIGluIHRoZSBjYWxsYmFjay4KICAqCi0g
KiBUaGUgcGl4YnVmIHdpbGwgaGF2ZSB0aGUgbGFyZ2VzdCBzaXplIHByb3ZpZGVkIGJ5IHRoZSBz
ZXJ2ZXIgYW5kIHNob3VsZAotICogYmUgcmVzaXplZCBiZWZvcmUgaXQgaXMgZGlzcGxheWVkLgot
ICogU2VlIGFsc28gd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3BpeGJ1ZigpLgorICogSWYgKEB3
aWR0aCwgQGhlaWdodCkgaXMgKDAsIDApIHRoZW4gdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhl
CisgKiBtYXhpbXVtIGF2YWlsYWJsZSBzaXplIGZvciB0aGUgaWNvbi4KICAqCiAgKiBSZXR1cm5z
OiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IHJlZmVyZW5jZSB0byBhICNHZGtQaXhidWYsIG9yICVO
VUxMCisgKiBpZiB0aGUgZ2l2ZW4gVVJJIGRvZXNuJ3QgaGF2ZSBhbiBpY29uIG9yIGl0IGhhc24n
dCBiZWVuIGxvYWRlZCB5ZXQuCiAgKgotICogU2luY2U6IDEuMy4xMworICogU2luY2U6IDEuOAog
ICoqLwotR2RrUGl4YnVmKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoV2Vi
S2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkkpCitHZGtQaXhi
dWYqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZihXZWJLaXRJY29uRGF0YWJh
c2UqIGRhdGFiYXNlLCBjb25zdCBnY2hhciogcGFnZVVSSSwgZ3VpbnQgd2lkdGgsIGd1aW50IGhl
aWdodCkKIHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFT
RShkYXRhYmFzZSksIDApOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHBhZ2VVUkksIDApOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCh3aWR0aCAmJiBoZWlnaHQpIHx8ICghd2lkdGggJiYg
IWhlaWdodCksIDApOworCisgICAgcmV0dXJuIGdldEljb25QaXhidWZTeW5jaHJvbm91c2x5KGRh
dGFiYXNlLCBTdHJpbmc6OmZyb21VVEY4KHBhZ2VVUkkpLCB3aWR0aCwgaGVpZ2h0KTsKK30KKwor
c3RhdGljIFBlbmRpbmdJY29uUmVxdWVzdFZlY3Rvciogd2Via2l0SWNvbkRhdGFiYXNlR2V0T3JD
cmVhdGVSZXF1ZXN0cyhXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcm
IHBhZ2VVUkwpCit7CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBpY29ucyA9IGRhdGFi
YXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmdldChwYWdlVVJMKTsKKyAgICBpZiAoIWlj
b25zKSB7CisgICAgICAgIGljb25zID0gbmV3IFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvcjsKKyAg
ICAgICAgZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMuc2V0KHBhZ2VVUkwsIGlj
b25zKTsKKyAgICB9CisKKyAgICByZXR1cm4gaWNvbnM7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dEljb25EYXRhYmFzZURlbGV0ZVJlcXVlc3RzKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2Us
IFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciogcmVxdWVzdHMsIGNvbnN0IFN0cmluZyYgcGFnZVVS
TCkKK3sKKyAgICBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5yZW1vdmUocGFn
ZVVSTCk7CisgICAgZGVsZXRlIHJlcXVlc3RzOworfQorCitzdGF0aWMgdm9pZCBnZXRJY29uUGl4
YnVmQ2FuY2VsbGVkKHZvaWQqIHVzZXJEYXRhKQoreworICAgIFBlbmRpbmdJY29uUmVxdWVzdCog
cmVxdWVzdCA9IHN0YXRpY19jYXN0PFBlbmRpbmdJY29uUmVxdWVzdCo+KHVzZXJEYXRhKTsKKyAg
ICByZXF1ZXN0LT5hc3luY1Jlc3VsdENhbmNlbCgpOworCisgICAgY29uc3QgU3RyaW5nJiBwYWdl
VVJMID0gcmVxdWVzdC0+cGFnZVVSSSgpOworICAgIFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJh
c2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKKyAgICBQZW5kaW5nSWNvblJlcXVlc3RW
ZWN0b3IqIGljb25zID0gZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMuZ2V0KHBh
Z2VVUkwpOworICAgIGlmICghaWNvbnMpCisgICAgICAgIHJldHVybjsKKworICAgIHNpemVfdCBp
dGVtSW5kZXggPSBpY29ucy0+ZmluZChyZXF1ZXN0KTsKKyAgICBpZiAoaXRlbUluZGV4ICE9IG5v
dEZvdW5kKQorICAgICAgICBpY29ucy0+cmVtb3ZlKGl0ZW1JbmRleCk7CisgICAgaWYgKGljb25z
LT5pc0VtcHR5KCkpCisgICAgICAgIHdlYmtpdEljb25EYXRhYmFzZURlbGV0ZVJlcXVlc3RzKGRh
dGFiYXNlLCBpY29ucywgcGFnZVVSTCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEljb25EYXRh
YmFzZUdldEljb25QaXhidWZDYW5jZWxsZWQoR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgUGVu
ZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIC8vIEhhbmRsZSBjYW5jZWxsZWQgaW4g
YSBpbiBpZGxlIHNpbmNlIGl0IG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQuCisgICAg
Y2FsbE9uTWFpblRocmVhZChnZXRJY29uUGl4YnVmQ2FuY2VsbGVkLCByZXF1ZXN0KTsKK30KKwor
LyoqCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmM6CisgKiBA
ZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQorICogQHBhZ2VfdXJpOiBVUkkgb2YgdGhl
IHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbgorICogQHdpZHRoOiB0aGUgZGVzaXJlZCB3aWR0aCBm
b3IgdGhlIGljb24KKyAqIEBoZWlnaHQ6IHRoZSBkZXNpcmVkIGhlaWdodCBmb3IgdGhlIGljb24K
KyAqIEBjYW5jZWxsYWJsZTogQSAjR0NhbmNlbGxhYmxlIG9yICVOVUxMLgorICogQGNhbGxiYWNr
OiAoYWxsb3ctbm9uZSk6IEEgI0dBc3luY1JlYWR5Q2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBy
ZXF1ZXN0IGlzCisgKiAgICAgICAgICAgIHNhdGlzZmllZCBvciAlTlVMTCBpZiB5b3UgZG9uJ3Qg
Y2FyZSBhYm91dCB0aGUgcmVzdWx0LgorICogQHVzZXJfZGF0YTogVGhlIGRhdGEgdG8gcGFzcyB0
byBAY2FsbGJhY2suCisgKgorICogQXN5bmNocm9ub3VzbHkgb2J0YWlucyBhICNHZGtQaXhidWYg
b2YgdGhlIGZhdmljb24gZm9yIHRoZSBnaXZlbgorICogcGFnZSBVUkkuIFRoZSBhZHZhbnRhZ2Ug
b2YgdGhpcyBtZXRob2Qgb3ZlcgorICogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4
YnVmKCkgaXMgdGhhdCBpdCBhbHdheXMgcmV0dXJuIHRoZQorICogY2FjaGVkIGljb24gaWYgaXQn
cyBpbiB0aGUgZGF0YWJhc2UgYXN5bmNocm9ub3VzbHkgd2FpdGluZyBmb3IgdGhlCisgKiBpY29u
IHRvIGJlIHJlYWQgZnJvbSB0aGUgZGF0YWJhc2UuCisgKgorICogVGhpcyBpcyBhbiBhc3luY2hy
b25vdXMgbWV0aG9kLiBXaGVuIHRoZSBvcGVyYXRpb24gaXMgZmluaXNoZWQsIGNhbGxiYWNrIHdp
bGwKKyAqIGJlIGludm9rZWQuIFlvdSBjYW4gdGhlbiBjYWxsIHdlYmtpdF9pY29uX2RhdGFiYXNl
X2dldF9pY29uX3BpeGJ1Zl9maW5pc2goKQorICogdG8gZ2V0IHRoZSByZXN1bHQgb2YgdGhlIG9w
ZXJhdGlvbi4KKyAqIFNlZSBhbHNvIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1
Zl9zeW5jKCkuCisgKgorICogU2luY2U6IDEuOAorICoqLwordm9pZCB3ZWJraXRfaWNvbl9kYXRh
YmFzZV9nZXRfaWNvbl9waXhidWZfYXN5bmMoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwg
Y29uc3QgZ2NoYXIqIHBhZ2VVUkksIGd1aW50IHdpZHRoLCBndWludCBoZWlnaHQsIEdDYW5jZWxs
YWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVy
IHVzZXJEYXRhKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0lDT05fREFUQUJB
U0UoZGF0YWJhc2UpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHBhZ2VVUkkpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoKHdpZHRoICYmIGhlaWdodCkgfHwgKCF3aWR0aCAmJiAhaGVpZ2h0KSk7CisK
KyAgICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gcmVzdWx0ID0gYWRvcHRHUmVmKGdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9uZXcoR19PQkpFQ1QoZGF0YWJhc2UpLCBjYWxsYmFjaywgdXNlckRh
dGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KHdlYmtp
dF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZikpKTsKKworICAgIC8vIElmIHdlIGRvbid0
IGhhdmUgYW4gaWNvbiBmb3IgdGhlIGdpdmVuIFVSSSByZXR1cm4gQVNBUC4KKyAgICBpZiAoZGF0
YWJhc2UtPnByaXYtPmltcG9ydEZpbmlzaGVkICYmIGljb25EYXRhYmFzZSgpLnN5bmNocm9ub3Vz
SWNvblVSTEZvclBhZ2VVUkwoU3RyaW5nOjpmcm9tVVRGOChwYWdlVVJJKSkuaXNFbXB0eSgpKSB7
CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyKHJlc3Vs
dC5nZXQoKSwgMCwgMCk7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9p
bl9pZGxlKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBTdHJp
bmcgcGFnZVVSTCA9IFN0cmluZzo6ZnJvbVVURjgocGFnZVVSSSk7Ci0gICAgLy8gVGhlIGV4YWN0
IHNpemUgd2UgcGFzcyBpcyBpcnJlbGV2YW50IHRvIHRoZSBXZWJDb3JlOjppY29uRGF0YWJhc2Ug
Y29kZS4KLSAgICAvLyBXZSBtdXN0IHBhc3Mgc29tZXRoaW5nIGdyZWF0ZXIgdGhhbiAwLCAwIHRv
IGdldCBhIHBpeGJ1Zi4KLSAgICBXZWJDb3JlOjpJbWFnZSogaWNvbiA9IFdlYkNvcmU6Omljb25E
YXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwocGFnZVVSTCwgV2ViQ29yZTo6SW50
U2l6ZSgxNiwgMTYpKTsKLSAgICBpZiAoIWljb24pCisgICAgUGVuZGluZ0ljb25SZXF1ZXN0KiBy
ZXF1ZXN0ID0gbmV3IFBlbmRpbmdJY29uUmVxdWVzdChwYWdlVVJMLCByZXN1bHQuZ2V0KCksIGNh
bmNlbGxhYmxlLCBJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKKworICAgIC8vIFJlZ2lzdGVyIGlj
b24gcmVxdWVzdCBiZWZvcmUgYXNraW5nIGZvciB0aGUgaWNvbiB0byBhdm9pZCByYWNlIGNvbmRp
dGlvbnMuCisgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBpY29ucyA9IHdlYmtpdEljb25E
YXRhYmFzZUdldE9yQ3JlYXRlUmVxdWVzdHMoZGF0YWJhc2UsIHBhZ2VVUkwpOworICAgIEFTU0VS
VChpY29ucyk7CisgICAgaWNvbnMtPmFwcGVuZChhZG9wdFB0cihyZXF1ZXN0KSk7CisKKyAgICBH
ZGtQaXhidWYqIHBpeGJ1ZiA9IGdldEljb25QaXhidWZTeW5jaHJvbm91c2x5KGRhdGFiYXNlLCBw
YWdlVVJMLCAxNiwgMTYpOworICAgIGlmICghcGl4YnVmICYmICFkYXRhYmFzZS0+cHJpdi0+aW1w
b3J0RmluaXNoZWQpIHsKKyAgICAgICAgLy8gSW1wb3J0IGlzIG9uZ29pbmcsIHRoZXJlIGljb24g
d2Ugd2FudCBtaWdodCBsb2FkIGxhdGVyLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
cmVxdWVzdC0+YXN5bmNSZXN1bHRDb21wbGV0ZUluSWRsZShwaXhidWYpOworCisgICAgQVNTRVJU
KGljb25zLT5sYXN0KCkuZ2V0KCkgPT0gcmVxdWVzdCk7CisgICAgaWNvbnMtPnJlbW92ZUxhc3Qo
KTsKKyAgICBpZiAoaWNvbnMtPmlzRW1wdHkoKSkKKyAgICAgICAgd2Via2l0SWNvbkRhdGFiYXNl
RGVsZXRlUmVxdWVzdHMoZGF0YWJhc2UsIGljb25zLCBwYWdlVVJMKTsKK30KKworLyoqCisgKiB3
ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfZmluaXNoOgorICogQGRhdGFiYXNl
OiBhICNXZWJLaXRJY29uRGF0YWJhc2UKKyAqIEByZXN1bHQ6IEEgI0dBc3luY1Jlc3VsdCBvYnRh
aW5lZCBmcm9tIHRoZSAjR0FzeW5jUmVhZHlDYWxsYmFjayBwYXNzZWQgdG8gd2Via2l0X2ljb25f
ZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2FzeW5jKCkKKyAqIEBlcnJvcjogUmV0dXJuIGxvY2F0
aW9uIGZvciBlcnJvciBvciAlTlVMTC4KKyAqCisgKiBGaW5pc2hlcyBhbiBvcGVyYXRpb24gc3Rh
cnRlZCB3aXRoIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9hc3luYygpLgor
ICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgcmVmZXJlbmNlIHRvIGEgI0dk
a1BpeGJ1Ziwgb3IgJU5VTEwuCisgKgorICogU2luY2U6IDEuOAorICovCitHZGtQaXhidWYqIHdl
YmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5pc2goV2ViS2l0SWNvbkRhdGFi
YXNlKiBkYXRhYmFzZSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIEdFcnJvcioqIGVycm9yKQorewor
ICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogc2ltcGxlUmVzdWx0ID0gR19TSU1QTEVfQVNZTkNfUkVT
VUxUKHJlc3VsdCk7CisgICAgZ193YXJuX2lmX2ZhaWwoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dl
dF9zb3VyY2VfdGFnKHNpbXBsZVJlc3VsdCkgPT0gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2lj
b25fcGl4YnVmKTsKKworICAgIGlmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfcHJvcGFnYXRlX2Vy
cm9yKHNpbXBsZVJlc3VsdCwgZXJyb3IpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBHZGtQaXhi
dWYqIHBpeGJ1ZiA9IGljb24tPmdldEdka1BpeGJ1ZigpOwotICAgIGlmICghcGl4YnVmKQorCisg
ICAgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSA9IHN0YXRpY19jYXN0PEdDYW5jZWxsYWJsZSo+
KGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKHNpbXBsZVJlc3VsdCksICJjYW5jZWxsYWJsZSIp
KTsKKyAgICBpZiAoY2FuY2VsbGFibGUgJiYgZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoY2Fu
Y2VsbGFibGUpKSB7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIEdfSU9fRVJS
T1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVELCBfKCJPcGVyYXRpb24gd2FzIGNhbmNlbGxlZCIpKTsK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEdka1BpeGJ1Zio+KGdf
b2JqZWN0X3JlZihwaXhidWYpKTsKKyAgICB9CisKKyAgICBHZGtQaXhidWYqIGljb24gPSBzdGF0
aWNfY2FzdDxHZGtQaXhidWYqPihnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jlc19ncG9p
bnRlcihzaW1wbGVSZXN1bHQpKTsKKyAgICBpZiAoIWljb24pCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdka1BpeGJ1Zio+KGdfb2JqZWN0X3JlZihpY29uKSk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEljb25EYXRhYmFzZVByb2Nlc3NQZW5kaW5nSWNvbnNG
b3JVUkkoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBwYWdlVVJM
KQoreworICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciogaWNvbnMgPSBkYXRhYmFzZS0+cHJp
di0+cGVuZGluZ0ljb25SZXF1ZXN0cy5nZXQocGFnZVVSTCk7CisgICAgaWYgKCFpY29ucykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpY29ucy0+c2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgUGVuZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0ID0gaWNvbnMtPmF0
KGkpLmdldCgpOworICAgICAgICBpZiAocmVxdWVzdC0+YXN5bmNSZXN1bHQoKSkKKyAgICAgICAg
ICAgIHJlcXVlc3QtPmFzeW5jUmVzdWx0Q29tcGxldGUoZ2V0SWNvblBpeGJ1ZlN5bmNocm9ub3Vz
bHkoZGF0YWJhc2UsIHBhZ2VVUkwsIDE2LCAxNikpOworICAgIH0KKyAgICB3ZWJraXRJY29uRGF0
YWJhc2VEZWxldGVSZXF1ZXN0cyhkYXRhYmFzZSwgaWNvbnMsIHBhZ2VVUkwpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRJY29uRGF0YWJhc2VJbXBvcnRGaW5pc2hlZChXZWJLaXRJY29uRGF0YWJh
c2UqIGRhdGFiYXNlKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgZGF0YWJh
c2UtPnByaXYtPmltcG9ydEZpbmlzaGVkID0gdHJ1ZTsKKworICAgIC8vIEltcG9ydCBpcyBjb21w
bGV0ZSwgcHJvY2VzcyBwZW5kaW5nIHJlcXVlc3RzIGZvciBwYWdlcyB0aGF0IGFyZSBub3QgaW4g
dGhlIGRhdGFiYXNlLAorICAgIC8vIHNpbmNlIGRpZEltcG9ydEljb25EYXRhRm9yUGFnZVVSTCgp
IHdpbGwgbmV2ZXIgYmUgY2FsbGVkIGZvciB0aGVtLgorICAgIC8vIEZvciBhc3luYyByZXF1ZXN0
cyB3ZSBuZWVkIHRvIGNvbXBsZXRlIHRoZSBvcGVyYXRpb24sIHdoaWxlIGZvciBmcmFtZSBsb2Fk
ZXIKKyAgICAvLyByZXF1ZXN0cyB3ZSBvbmx5IG5lZWQgdG8gZGVsZXRlIHRoZSByZXF1ZXN0IHNv
IHRoYXQgaWNvbi1sb2FkZWQgd29uJ3QgYmUgZW1pdHRlZC4KKyAgICBWZWN0b3I8U3RyaW5nPiB0
b0RlbGV0ZVVSTHM7CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5lbmQoKTsKKyAgICBmb3Ig
KFBlbmRpbmdJY29uUmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRhdGFiYXNlLT5w
cml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsK
KyAgICAgICAgU3RyaW5nIGljb25VUkwgPSBpY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25V
UkxGb3JQYWdlVVJMKGl0ZXItPmZpcnN0KTsKKyAgICAgICAgaWYgKCFpY29uVVJMLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFBlbmRpbmdJY29uUmVxdWVzdFZl
Y3RvciogaWNvbnMgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgaWNvbnMtPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3Qq
IHJlcXVlc3QgPSBpY29ucy0+YXQoaSkuZ2V0KCk7CisgICAgICAgICAgICBpZiAocmVxdWVzdC0+
YXN5bmNSZXN1bHQoKSkKKyAgICAgICAgICAgICAgICByZXF1ZXN0LT5hc3luY1Jlc3VsdENvbXBs
ZXRlKDApOworICAgICAgICB9CisKKyAgICAgICAgdG9EZWxldGVVUkxzLmFwcGVuZChpdGVyLT5m
aXJzdCk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0b0RlbGV0ZVVSTHMu
c2l6ZSgpOyArK2kpCisgICAgICAgIHdlYmtpdEljb25EYXRhYmFzZURlbGV0ZVJlcXVlc3RzKGRh
dGFiYXNlLCBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5nZXQodG9EZWxldGVV
UkxzW2ldKSwgdG9EZWxldGVVUkxzW2ldKTsKIH0KIAogLyoqCkBAIC0zMTIsNiArNjM4LDYgQEAg
dm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhcihXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFi
YXNlKQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0
YWJhc2UpKTsKIAotICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLnJlbW92ZUFsbEljb25zKCk7
CisgICAgaWNvbkRhdGFiYXNlKCkucmVtb3ZlQWxsSWNvbnMoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oIGIvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oCmluZGV4IDVlYWQ2MDNhYmRkZjEy
NGUzNmQyZjVhZGM2MjJhYjU1ZjM4YzE4YmIuLjFiMDczNGYwZThlNWY0YzNjYzNhOWMxZmYyMDVi
NjY5Mzc4OGI3Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRp
Y29uZGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRh
dGFiYXNlLmgKQEAgLTUzLDI1ICs1Myw0MSBAQCBzdHJ1Y3QgX1dlYktpdEljb25EYXRhYmFzZUNs
YXNzIHsKIH07CiAKIFdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF90
eXBlICAgICAgICAgICAgKHZvaWQpOword2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3R5cGUgICAg
ICAgICAgICAgICAodm9pZCk7CiAKIFdFQktJVF9BUEkgY29uc3QgZ2NoYXIqCi13ZWJraXRfaWNv
bl9kYXRhYmFzZV9nZXRfcGF0aCAgICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFi
YXNlKTsKK3dlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9wYXRoICAgICAgICAgICAgICAgKFdlYktp
dEljb25EYXRhYmFzZSogZGF0YWJhc2UpOwogCiBXRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9pY29u
X2RhdGFiYXNlX3NldF9wYXRoICAgICAgICAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJh
c2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hh
ciogICAgICAgIHBhdGgpOword2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGggICAgICAgICAg
ICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiAgICAgICAgcGF0aCk7CiAKIFdF
QktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmkgICAgICAg
IChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAgICBwYWdlX3VyaSk7Cit3ZWJraXRf
aWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmkgICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2Uq
IGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2NoYXIqICAgICAgICBwYWdlX3VyaSk7CiAKIFdFQktJVF9BUEkgR2RrUGl4YnVmKgot
d2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmICAgICAoV2ViS2l0SWNvbkRhdGFi
YXNlKiBkYXRhYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdjaGFyKiAgICAgICAgcGFnZV91cmkpOword2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0
X2ljb25fcGl4YnVmICAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiAgICAg
ICAgcGFnZV91cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBndWludCAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICBoZWlnaHQpOwogCiBXRUJLSVRf
QVBJIHZvaWQKLXdlYmtpdF9pY29uX2RhdGFiYXNlX2NsZWFyICAgICAgICAgICAgICAgKFdlYktp
dEljb25EYXRhYmFzZSogZGF0YWJhc2UpOword2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25f
cGl4YnVmX2FzeW5jICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiAgICAgICAgcGFn
ZV91cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlu
dCAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICBoZWlnaHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUqICAgICAgIGNhbmNlbGxh
YmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5j
UmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgdXNlcl9kYXRhKTsKKworV0VCS0lUX0FQ
SSBHZGtQaXhidWYqCit3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfZmluaXNo
IChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0KiAgICAgICByZXN1bHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IqKiAgICAgICAgICAg
IGVycm9yKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhciAg
ICAgICAgICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKTsKIAogR19FTkRf
REVDTFMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25k
YXRhYmFzZXByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0
YWJhc2Vwcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTg5YWY4OThjN2Q4NmIzMWQzOGMzMGQxYzg4MGEy
YmU3NWNiY2ZhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIHdlYmtpdGljb25kYXRhYmFzZXByaXZh
dGVfaAorI2RlZmluZSB3ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlX2gKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgRnJhbWVMb2FkZXJDbGllbnQ7Cit9CisKK3ZvaWQgd2Via2l0SWNvbkRh
dGFiYXNlRGlzcGF0Y2hEaWRSZWNlaXZlSWNvbihXZWJLaXRJY29uRGF0YWJhc2UqLCBjb25zdCBj
aGFyKiBmcmFtZVVSSSk7CisKKyNlbmRpZiAvLyB3ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBi
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCAzMTJjMmU1
M2NiMjkzNzc1MWI0ZWFkOGZkZDZhZTljMzg1NWI4NGRiLi5mYzdmYmIxMTVkMTI3ZmFhNzMzNTBh
NTRhNDViZmM5YTc4ZWE4Y2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YnZpZXcuY3BwCkBAIC01MDM2LDEyICs1MDM2LDE2IEBAIGNvbnN0IGdjaGFyKiB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2ljb25fdXJpKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAvKioKICAqIHdlYmtp
dF93ZWJfdmlld19nZXRfaWNvbl9waXhidWY6CiAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2Vi
VmlldyBvYmplY3QKKyAqIEB3aWR0aDogdGhlIGRlc2lyZWQgd2lkdGggZm9yIHRoZSBpY29uCisg
KiBAaGVpZ2h0OiB0aGUgZGVzaXJlZCBoZWlnaHQgZm9yIHRoZSBpY29uCiAgKgotICogT2J0YWlu
cyBhICNHZGtQaXhidWYgb2YgdGhlIGZhdmljb24gZm9yIHRoZSBnaXZlbiAjV2ViS2l0V2ViVmll
dywgb3IKLSAqIGEgZGVmYXVsdCBpY29uIGlmIHRoZXJlIGlzIG5vIGljb24gZm9yIHRoZSBnaXZl
biBwYWdlLiBVc2UKLSAqIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkoKSBpZiB5b3UgbmVl
ZCB0byBkaXN0aW5ndWlzaCB0aGVzZSBjYXNlcy4KLSAqIFVzdWFsbHkgeW91IHdhbnQgdG8gY29u
bmVjdCB0byBXZWJLaXRXZWJWaWV3OjppY29uLWxvYWRlZCBhbmQgY2FsbCB0aGlzCi0gKiBtZXRo
b2QgaW4gdGhlIGNhbGxiYWNrLgorICogT2J0YWlucyBhICNHZGtQaXhidWYgb2YgdGhlIGZhdmlj
b24gZm9yIHRoZSBnaXZlbgorICogI1dlYktpdFdlYlZpZXcuIFRoaXMgd2lsbCByZXR1cm4gJU5V
TEwgaXMgdGhlcmUgaXMgbm8gaWNvbiBmb3IgdGhlCisgKiBjdXJyZW50ICNXZWJLaXRXZWJWaWV3
IG9yIGlmIHRoZSBpY29uIGlzIGluIHRoZSBkYXRhYmFzZSBidXQgbm90CisgKiBhdmFpbGFibGUg
YXQgdGhlIG1vbWVudCBvZiB0aGlzIGNhbGwuIFVzZQorICogd2Via2l0X3dlYl92aWV3X2dldF9p
Y29uX3VyaSgpIGlmIHlvdSBuZWVkIHRvIGRpc3Rpbmd1aXNoIHRoZXNlCisgKiBjYXNlcy4gIFVz
dWFsbHkgeW91IHdhbnQgdG8gY29ubmVjdCB0byBXZWJLaXRXZWJWaWV3OjppY29uLWxvYWRlZAor
ICogYW5kIGNhbGwgdGhpcyBtZXRob2QgaW4gdGhlIGNhbGxiYWNrLgogICoKICAqIFRoZSBwaXhi
dWYgd2lsbCBoYXZlIHRoZSBsYXJnZXN0IHNpemUgcHJvdmlkZWQgYnkgdGhlIHNlcnZlciBhbmQg
c2hvdWxkCiAgKiBiZSByZXNpemVkIGJlZm9yZSBpdCBpcyBkaXNwbGF5ZWQuCkBAIC01MDQ5LDE1
ICs1MDUzLDE1IEBAIGNvbnN0IGdjaGFyKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgKgogICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBh
IG5ldyByZWZlcmVuY2UgdG8gYSAjR2RrUGl4YnVmLCBvciAlTlVMTAogICoKLSAqIFNpbmNlOiAx
LjMuMTMKKyAqIFNpbmNlOiAxLjgKICAqLwotR2RrUGl4YnVmKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2ljb25fcGl4YnVmKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCitHZGtQaXhidWYqIHdlYmtpdF93
ZWJfdmlld19nZXRfaWNvbl9waXhidWYoV2ViS2l0V2ViVmlldyogd2ViVmlldywgZ3VpbnQgd2lk
dGgsIGd1aW50IGhlaWdodCkKIHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
V0VCX1ZJRVcod2ViVmlldyksIDApOwogCiAgICAgY29uc3QgZ2NoYXIqIHBhZ2VVUkkgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3KTsKICAgICBXZWJLaXRJY29uRGF0YWJhc2UqIGRh
dGFiYXNlID0gd2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCk7Ci0gICAgcmV0dXJuIHdlYmtpdF9p
Y29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZihkYXRhYmFzZSwgcGFnZVVSSSk7CisgICAgcmV0
dXJuIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZihkYXRhYmFzZSwgcGFnZVVS
SSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIApAQCAtNTEyOCw2ICs1MTMyLDMxIEBAIHZvaWQgd2Vi
Vmlld0V4aXRGdWxsc2NyZWVuKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAjZW5kaWYKIH0KIAor
I2lmIEVOQUJMRShJQ09OREFUQUJBU0UpCit2b2lkIHdlYmtpdFdlYlZpZXdJY29uTG9hZGVkKFdl
YktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGNoYXIqIGZyYW1lVVJJLCBXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIC8vIFNpbmNlIHdlIGRlZmluaXRlbHkgaGF2ZSBhbiBp
Y29uIHRoZSBXZWJWaWV3IGRvZXNuJ3QgbmVlZCB0bworICAgIC8vIGxpc3RlbiBmb3Igbm90aWZp
Y2F0aW9ucyBhbnkgbG9uZ2VyLgorICAgIHdlYmtpdFdlYlZpZXdSZWdpc3RlckZvckljb25Ob3Rp
ZmljYXRpb24od2ViVmlldywgRkFMU0UpOworCisgICAgLy8gd2Via2l0X3dlYl92aWV3X2dldF9p
Y29uX3VyaSgpIHByb3Blcmx5IHVwZGF0ZXMgdGhlICJpY29uLXVyaSIgcHJvcGVydHkuCisgICAg
Z19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKHdlYlZpZXcpLCAiaWNvbi11cmkiKTsKKyAgICBnX3Np
Z25hbF9lbWl0X2J5X25hbWUod2ViVmlldywgImljb24tbG9hZGVkIiwgd2Via2l0X3dlYl92aWV3
X2dldF9pY29uX3VyaSh3ZWJWaWV3KSk7Cit9CisKK3ZvaWQgd2Via2l0V2ViVmlld1JlZ2lzdGVy
Rm9ySWNvbk5vdGlmaWNhdGlvbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBib29sIHNob3VsZFJl
Z2lzdGVyKQoreworICAgIFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfZ2V0
X2ljb25fZGF0YWJhc2UoKTsKKyAgICBpZiAoc2hvdWxkUmVnaXN0ZXIpIHsKKyAgICAgICAgaWYg
KCFnX3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3RlZChkYXRhYmFzZSwgd2ViVmlldy0+cHJpdi0+
aWNvbkxvYWRlZEhhbmRsZXIpKQorICAgICAgICAgICAgd2ViVmlldy0+cHJpdi0+aWNvbkxvYWRl
ZEhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KGRhdGFiYXNlLCAiaWNvbi1sb2FkZWQiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdfQ0FMTEJBQ0sod2Via2l0V2ViVmlld0ljb25Mb2FkZWQpLCB3ZWJWaWV3KTsKKyAgICB9
IGVsc2UKKyAgICAgICAgaWYgKGdfc2lnbmFsX2hhbmRsZXJfaXNfY29ubmVjdGVkKGRhdGFiYXNl
LCB3ZWJWaWV3LT5wcml2LT5pY29uTG9hZGVkSGFuZGxlcikpCisgICAgICAgICAgICBnX3NpZ25h
bF9oYW5kbGVyX2Rpc2Nvbm5lY3QoZGF0YWJhc2UsIHdlYlZpZXctPnByaXYtPmljb25Mb2FkZWRI
YW5kbGVyKTsKK30KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogV2ViQ29yZTo6UGFn
ZSogY29yZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJ2aWV3LmgKaW5kZXggMmExNWI1M2M2NzY4OWNmNmU3MDMxZWM4ZDkzZDQ1YmU2MTJk
NDRmNC4uZjg4M2RkMDc0ZWU0MTJiNDk1Y2U0MmYxOGM1YjRjM2E0MTBhYWU3MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCkBAIC00MzEsNyArNDMxLDkgQEAgV0VC
S0lUX0FQSSBjb25zdCBnY2hhciAqCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpICAgICAg
ICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYl92aWV3KTsKIAogV0VCS0lU
X0FQSSBHZGtQaXhidWYgKgotd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3BpeGJ1ZiAgICAgICAg
ICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJfdmlldyk7Cit3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2ljb25fcGl4YnVmICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAg
KndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGd1aW50ICAgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgaGVpZ2h0KTsK
IAogV0VCS0lUX0FQSSBXZWJLaXRET01Eb2N1bWVudCAqCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Rv
bV9kb2N1bWVudCAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYl92aWV3
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3cHJp
dmF0ZS5oIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmgK
aW5kZXggNzViYTE0Y2JlYTdhM2E2Mjk1YzhlY2JmMGUwY2ZiOGQ2ZTZmMTk3ZS4uYTY2ZGRjMmVm
YjczOTQzMzlhYzFhMjU3NzBkNDM2ODk4ZDYwZmVjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmgKQEAgLTk5LDYgKzk5LDEwIEBAIHN0cnVj
dCBfV2ViS2l0V2ViVmlld1ByaXZhdGUgewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKICAgICBPd25QdHI8V2ViS2l0OjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dD4gYWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ7CiAjZW5kaWYKKworI2lmIEVOQUJMRShJQ09OREFU
QUJBU0UpCisgICAgZ3Vsb25nIGljb25Mb2FkZWRIYW5kbGVyOworI2VuZGlmCiB9OwogCiB2b2lk
IHdlYmtpdF93ZWJfdmlld19ub3RpZnlfcmVhZHkoV2ViS2l0V2ViVmlldyopOwpAQCAtMTE4LDYg
KzEyMiwxMSBAQCBHdGtNZW51KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHRfbWVudShXZWJL
aXRXZWJWaWV3Kik7CiAKIHZvaWQgd2ViVmlld0VudGVyRnVsbHNjcmVlbihXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBXZWJDb3JlOjpOb2RlKik7CiB2b2lkIHdlYlZpZXdFeGl0RnVsbHNjcmVlbihX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KTsKKworI2lmIEVOQUJMRShJQ09OREFUQUJBU0UpCit2b2lk
IHdlYmtpdFdlYlZpZXdSZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oV2ViS2l0V2ViVmlldyos
IGJvb2wgc2hvdWxkUmVnaXN0ZXIpOwordm9pZCB3ZWJraXRXZWJWaWV3SWNvbkxvYWRlZChXZWJL
aXRJY29uRGF0YWJhc2UqLCBjb25zdCBjaGFyKiBmcmFtZVVSSSwgV2ViS2l0V2ViVmlldyopOwor
I2VuZGlmCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IGFkYTY3NzcwMmIyYzA1MzY4MDdjZGU2YTUzMWIwYzI4MmU4MzQzMWYu
LjZkZmZlYTBjY2Y4YjQwNmIyMDE1YzRjNGEwN2I0Njk2YzgyZDk4YTMgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAx
Mi0wMy0wMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+IGFuZCBT
ZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtd
IFdlYktpdEljb25EYXRhYmFzZSBkb2Vzbid0IGtlZXAgaWNvbnMgY2FjaGVkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjIwMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBmYXZp
Y29ucyBpbiBHdGtMYXVuY2hlci4KKworICAgICAgICAqIEd0a0xhdW5jaGVyL21haW4uYzoKKyAg
ICAgICAgKGFjdGl2YXRlVXJpRW50cnlDYik6CisgICAgICAgIChpY29uTG9hZGVkQ2IpOgorICAg
ICAgICAoY3JlYXRlQnJvd3Nlcik6CisKIDIwMTItMDMtMDEgIEthbGV2IExlbWJlciAgPGthbGV2
bGVtYmVyQGdtYWlsLmNvbT4KIAogICAgICAgICBXZWJLaXRUZXN0UnVubmVyOiBFeHBsaWNpdGx5
IGluY2x1ZGUgdW5pc3RkLmggZm9yIGdjYyA0LjcKZGlmZiAtLWdpdCBhL1Rvb2xzL0d0a0xhdW5j
aGVyL21haW4uYyBiL1Rvb2xzL0d0a0xhdW5jaGVyL21haW4uYwppbmRleCA1ODc0MDVmYzQyMzRm
MWQ3YmU4YTczYzkxM2VkZTJiZGJjZTRiNzExLi40NDk2NjU4NDhhZTU4MmE1MjVhYTM4YzFiNzNi
MGUwOTVlYWJmM2Q5IDEwMDY0NAotLS0gYS9Ub29scy9HdGtMYXVuY2hlci9tYWluLmMKKysrIGIv
VG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCkBAIC00MCw2ICs0MCw3IEBAIHN0YXRpYyB2b2lkIGFj
dGl2YXRlVXJpRW50cnlDYihHdGtXaWRnZXQqIGVudHJ5LCBncG9pbnRlciBkYXRhKQogICAgIFdl
YktpdFdlYlZpZXcgKndlYlZpZXcgPSBnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChlbnRyeSks
ICJ3ZWItdmlldyIpOwogICAgIGNvbnN0IGdjaGFyKiB1cmkgPSBndGtfZW50cnlfZ2V0X3RleHQo
R1RLX0VOVFJZKGVudHJ5KSk7CiAgICAgZ19hc3NlcnQodXJpKTsKKyAgICBndGtfZW50cnlfc2V0
X2ljb25fZnJvbV9waXhidWYoR1RLX0VOVFJZKGVudHJ5KSwgR1RLX0VOVFJZX0lDT05fUFJJTUFS
WSwgMCk7CiAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHdlYlZpZXcsIHVyaSk7CiB9CiAK
QEAgLTE5NSwxNiArMTk2LDMyIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3TGVhdmluZ0Z1bGxT
Y3JlZW4oV2ViS2l0V2ViVmlldyAqd2ViVmlldywgR09iamVjdCAqZWxlbWVuCiAgICAgcmV0dXJu
IEZBTFNFOwogfQogCitzdGF0aWMgdm9pZCBpY29uTG9hZGVkQ2IoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgY29uc3QgY2hhciogaWNvblVSSSwgR3RrV2lkZ2V0KiB1cmlFbnRyeSkKK3sKKyAgICBH
ZGtQaXhidWYgKmljb24gPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fcGl4YnVmKHdlYlZpZXcs
IDE2LCAxNik7CisgICAgaWYgKCFpY29uKQorICAgICAgICByZXR1cm47CisKKyAgICBndGtfZW50
cnlfc2V0X2ljb25fZnJvbV9waXhidWYoR1RLX0VOVFJZKHVyaUVudHJ5KSwgR1RLX0VOVFJZX0lD
T05fUFJJTUFSWSwgaWNvbik7CisgICAgZ19vYmplY3RfdW5yZWYoaWNvbik7Cit9CisKIHN0YXRp
YyBHdGtXaWRnZXQqIGNyZWF0ZUJyb3dzZXIoR3RrV2lkZ2V0KiB3aW5kb3csIEd0a1dpZGdldCog
dXJpRW50cnksIEd0a1dpZGdldCogc3RhdHVzYmFyLCBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBH
dGtXaWRnZXQqIHZib3gpCiB7CisgICAgY2hhciAqaWNvbkRhdGFiYXNlUGF0aDsKICAgICBHdGtX
aWRnZXQgKnNjcm9sbGVkV2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVM
TCk7CiAgICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5E
T1coc2Nyb2xsZWRXaW5kb3cpLCBHVEtfUE9MSUNZX0FVVE9NQVRJQywgR1RLX1BPTElDWV9BVVRP
TUFUSUMpOwogCiAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZFdp
bmRvdyksIEdUS19XSURHRVQod2ViVmlldykpOwogCisgICAgaWNvbkRhdGFiYXNlUGF0aCA9IGdf
YnVpbGRfZmlsZW5hbWUoZ19nZXRfdXNlcl9kYXRhX2RpcigpLCAid2Via2l0IiwgImljb25kYXRh
YmFzZSIsIE5VTEwpOworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKHdlYmtpdF9n
ZXRfaWNvbl9kYXRhYmFzZSgpLCBpY29uRGF0YWJhc2VQYXRoKTsKKyAgICBnX2ZyZWUoaWNvbkRh
dGFiYXNlUGF0aCk7CisKICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6OnRp
dGxlIiwgR19DQUxMQkFDSyhub3RpZnlUaXRsZUNiKSwgd2luZG93KTsKICAgICBnX3NpZ25hbF9j
b25uZWN0KHdlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhub3RpZnlM
b2FkU3RhdHVzQ2IpLCB1cmlFbnRyeSk7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAi
bm90aWZ5Ojpwcm9ncmVzcyIsIEdfQ0FMTEJBQ0sobm90aWZ5UHJvZ3Jlc3NDYiksIHdpbmRvdyk7
CisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiaWNvbi1sb2FkZWQiLCBHX0NBTExCQUNL
KGljb25Mb2FkZWRDYiksIHVyaUVudHJ5KTsKICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcs
ICJob3ZlcmluZy1vdmVyLWxpbmsiLCBHX0NBTExCQUNLKGxpbmtIb3ZlckNiKSwgc3RhdHVzYmFy
KTsKICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJjcmVhdGUtd2ViLXZpZXciLCBHX0NB
TExCQUNLKGNyZWF0ZVdlYlZpZXdDYiksIHdpbmRvdyk7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3
ZWJWaWV3LCAid2ViLXZpZXctcmVhZHkiLCBHX0NBTExCQUNLKHdlYlZpZXdSZWFkeUNiKSwgd2lu
ZG93KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130639</attachid>
            <date>2012-03-07 09:53:24 -0800</date>
            <delta_ts>2012-03-07 13:36:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56200-20120307185321.patch</filename>
            <type>text/plain</type>
            <size>63558</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5NTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggMGQ0ODQ4Mzhi
MGYwNGY2ZDJmZjFjYTU4ZGI0MWQ0OGFjZjg1NDM3ZC4uYzY1MGU3OWI1MmViZDcyZDk4MmQ3YzNh
ZjM0YmMyMmFkOGM5ZTBlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNSBAQAorMjAx
Mi0wMy0wNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+IGFuZCBT
ZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtd
IFdlYktpdEljb25EYXRhYmFzZSBkb2Vzbid0IGtlZXAgaWNvbnMgY2FjaGVkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjIwMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFk
ZGVkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xp
ZW50OjpyZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24pOiBpbnN0cnVjdAorICAgICAgICB0aGUg
V2ViVmlldyB0byBsaXN0ZW4gdG8gSWNvbkRhdGFiYXNlJ3Mgbm90aWZpY2F0aW9ucy4KKyAgICAg
ICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24pOiBh
c2sgYm90aAorICAgICAgICBXZWJWaWV3IGFuZCBJY29uRGF0YWJhc2UgdG8gaXNzdWUgbm90aWZp
Y2F0aW9ucyBmb3IgYSBuZXcgaWNvbi4KKyAgICAgICAgKiBkb2NzL3dlYmtpdGd0ay1zZWN0aW9u
cy50eHQ6IHVwZGF0ZWQgZG9jcy4KKyAgICAgICAgKiB0ZXN0cy90ZXN0aWNvbmRhdGFiYXNlLmM6
IEFkZGVkLgorICAgICAgICAoc2VydmVyX2NhbGxiYWNrKToKKyAgICAgICAgKGRlbGV0ZURhdGFi
YXNlRmlsZUlmRXhpc3RzKToKKyAgICAgICAgKHRlc3RXZWJraXRJY29uRGF0YWJhc2VTZXRQYXRo
KToKKyAgICAgICAgKGljb25EYXRhYmFzZUdldEljb25WYWxpZENhbGxiYWNrKToKKyAgICAgICAg
KGljb25EYXRhYmFzZUdldEljb25JbnZhbGlkQ2FsbGJhY2spOgorICAgICAgICAoaWNvbkRhdGFi
YXNlR2V0SWNvbkNhbmNlbGxlZENhbGxiYWNrKToKKyAgICAgICAgKG1haW5Mb29wUXVpdElmTG9h
ZENvbXBsZXRlZCk6CisgICAgICAgIChpZGxlUXVpdExvb3BDYWxsYmFjayk6CisgICAgICAgICh3
ZWJraXRXZWJWaWV3SWNvbkxvYWRlZCk6CisgICAgICAgIChsb2FkVVJJKToKKyAgICAgICAgKGlj
b25EYXRhYmFzZUdldEljb25WYWxpZElkbGUpOgorICAgICAgICAoaWNvbkRhdGFiYXNlR2V0SWNv
bkludmFsaWRJZGxlKToKKyAgICAgICAgKGljb25EYXRhYmFzZUdldEljb25DYW5jZWxsZWRJZGxl
KToKKyAgICAgICAgKHRlc3RXZWJraXRJY29uRGF0YWJhc2VHZXRJY29uQXN5bmMpOgorICAgICAg
ICAodGVzdFdlYmtpdEljb25EYXRhYmFzZUdldEljb25VUkkpOgorICAgICAgICAodGVzdFdlYmtp
dEljb25EYXRhYmFzZVJlbW92ZUFsbCk6CisgICAgICAgICh0ZXN0V2Via2l0SWNvbkRhdGFiYXNl
Q2xvc2VEYXRhYmFzZSk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0
Z2xvYmFscy5jcHA6CisgICAgICAgICh3ZWJraXRFeGl0KTogdW5yZWYgaWNvbiBkYXRhYmFzZSBv
biBleGl0LgorICAgICAgICAod2Via2l0SW5pdCk6IGRvIG5vdCBsb2FkIGljb25kYXRhYmFzZSBi
eSBkZWZhdWx0LgorICAgICAgICAqIHdlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuY3BwOgorICAg
ICAgICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrKTogSWNvbkRhdGFiYXNlQ2xpZW50IGltcGxlbWVu
dGF0aW9uLgorICAgICAgICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpwZXJmb3JtSW1wb3J0KToK
KyAgICAgICAgKEljb25EYXRhYmFzZUNsaWVudEd0azo6ZGlkUmVtb3ZlQWxsSWNvbnMpOgorICAg
ICAgICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpkaWRJbXBvcnRJY29uVVJMRm9yUGFnZVVSTCk6
CisgICAgICAgIChJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpZEltcG9ydEljb25EYXRhRm9yUGFn
ZVVSTCk6CisgICAgICAgIChJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpZENoYW5nZUljb25Gb3JQ
YWdlVVJMKToKKyAgICAgICAgKEljb25EYXRhYmFzZUNsaWVudEd0azo6ZGlkRmluaXNoVVJMSW1w
b3J0KToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdCk6IG1hY2hpbmVyeSBmb3IgYXN5bmNo
cm9ub3VzIGNhbGxzLgorICAgICAgICAoUGVuZGluZ0ljb25SZXF1ZXN0OjpQZW5kaW5nSWNvblJl
cXVlc3QpOgorICAgICAgICAoUGVuZGluZ0ljb25SZXF1ZXN0Ojp+UGVuZGluZ0ljb25SZXF1ZXN0
KToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6cGFnZVVSSSk6CisgICAgICAgIChQZW5k
aW5nSWNvblJlcXVlc3Q6OmFzeW5jUmVzdWx0KToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVz
dDo6YXN5bmNSZXN1bHRDYW5jZWwpOgorICAgICAgICAoUGVuZGluZ0ljb25SZXF1ZXN0Ojphc3lu
Y1Jlc3VsdENvbXBsZXRlSW5JZGxlKToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6YXN5
bmNSZXN1bHRDb21wbGV0ZSk6CisgICAgICAgIChfV2ViS2l0SWNvbkRhdGFiYXNlUHJpdmF0ZSk6
CisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGFzc19pbml0KToKKyAgICAgICAgKHdl
YmtpdF9pY29uX2RhdGFiYXNlX2luaXQpOgorICAgICAgICAod2Via2l0SWNvbkRhdGFiYXNlRGlz
cGF0Y2hEaWRSZWNlaXZlSWNvbik6ICJwcm90ZWN0ZWQiIG1ldGhvZAorICAgICAgICBjYWxsZWQg
YnkgdGhlIEZyYW1lTG9hZGVyQ2xpZW50IHRvIGluZm9ybSBhYm91dCBuZXcgaWNvbnMuCisgICAg
ICAgIChzZWxlY3RRdWVyeUNhbGxiYWNrKTogcmVsZWFzZXMgZXhwaXJlZCBpY29ucyB0byBsZXQg
SWNvbkRhdGFiYXNlCisgICAgICAgIHBydW5lIHRoZW0uCisgICAgICAgICh3ZWJraXRJY29uRGF0
YWJhc2VQcnVuZUV4cGlyZWRJY29ucyk6IHNlbGVjdHMgdGhlIGljb25zIHRvIGJlCisgICAgICAg
IHBydW5lZCBieSB0aGUgSWNvbkRhdGFiYXNlLgorICAgICAgICAod2Via2l0SWNvbkRhdGFiYXNl
Q2xvc2UpOiBjbG9zZSB0aGUgZGF0YWJhc2UuCisgICAgICAgIChjcmVhdGVFeHBpcmF0aW9uVGlt
ZXNEYXRhYmFzZVRhYmxlSWZOb3RFeGlzdHMpOiBjcmVhdGVzIHRoZQorICAgICAgICBkYXRhYmFz
ZSB1c2VkIHRvIGNvbnRyb2wgZXhwaXJhdGlvbiB0aW1lcy4KKyAgICAgICAgKHdlYmtpdF9pY29u
X2RhdGFiYXNlX3NldF9wYXRoKTogb3BlbnMgdGhlIGRhdGFiYXNlIGRlbGF5aW5nIHRoZQorICAg
ICAgICBjbGVhbnVwIG9mIGljb25zIHVudGlsIHRoZSBpbXBvcnQgaXMgY29tcGxldGUuCisgICAg
ICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmkpOiBpdCBub3cgcmV0dXJucyBO
VUxMIGlmIHRoZQorICAgICAgICBpY29uIGlzIG5vdCBpbiB0aGUgZGF0YWJhc2UuCisgICAgICAg
IChnZXRJY29uUGl4YnVmU3luY2hyb25vdXNseSk6IGhlbHBlciBmdW5jdGlvbiB0byBjYWxsCisg
ICAgICAgIEljb25EYXRhYmFzZTo6c3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTCgpLgorICAg
ICAgICAod2Via2l0X2ljb25fZGF0YWJhc2VfdHJ5X2dldF9pY29uX3BpeGJ1Zik6IHJlbmFtZWQg
ZnJvbQorICAgICAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoKS4gQWRk
ZWQgaGVpZ2h0IGFuZCB3aWR0aAorICAgICAgICBwYXJhbWV0ZXJzLgorICAgICAgICAod2Via2l0
SWNvbkRhdGFiYXNlR2V0T3JDcmVhdGVSZXF1ZXN0cyk6IGhlbHBlciBmdW5jdGlvbiB0byBnZXQK
KyAgICAgICAgdGhlIHZlY3RvciBvZiBwZW5kaW5nIHJlcXVlc3RzIGZvciB0aGUgZ2l2ZW4gdXJp
LgorICAgICAgICAod2Via2l0SWNvbkRhdGFiYXNlRGVsZXRlUmVxdWVzdHMpOiBoZWxwZXIgZnVu
Y3Rpb24gdG8gcmVtb3ZlIHRoZQorICAgICAgICB2ZWN0b3Igb2YgcGVuZGluZyByZXF1ZXN0cyBm
b3IgdGhlIGdpdmVuIHVyaS4KKyAgICAgICAgKGdldEljb25QaXhidWZDYW5jZWxsZWQpOgorICAg
ICAgICAod2Via2l0SWNvbkRhdGFiYXNlR2V0SWNvblBpeGJ1ZkNhbmNlbGxlZCk6CisgICAgICAg
ICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYpOiBuZXcgbWV0aG9kIHRvCisg
ICAgICAgIGFzeW5jaHJvbm91c2x5IHJldHJpZXZlIGljb25zIGZyb20gdGhlIGRhdGFiYXNlLgor
ICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2ZpbmlzaCk6IGZp
bmlzaGVzIGFuCisgICAgICAgIG9wZXJhdGlvbiBzdGFydGVkIHdpdGggd2Via2l0X2ljb25fZGF0
YWJhc2VfZ2V0X2ljb25fcGl4YnVmKCkuCisgICAgICAgICh3ZWJraXRJY29uRGF0YWJhc2VQcm9j
ZXNzUGVuZGluZ0ljb25zRm9yVVJJKTogcHJvY2VzcyBwZW5kaW5nCisgICAgICAgIHJlcXVlc3Rz
IG9uY2UgdGhlIGltcG9ydCBpcyBmaW5pc2hlZC4KKyAgICAgICAgKHdlYmtpdEljb25EYXRhYmFz
ZUltcG9ydEZpbmlzaGVkKTogY2hlY2sgcGVuZGluZyByZXF1ZXN0cyBhbmQKKyAgICAgICAgZGVs
ZXRlIHRob3NlIHRoYXQgYXNrIGZvciBpY29ucyB0aGF0IGRvIG5vdCBleGlzdCBpbiB0aGUgZGF0
YWJhc2UuCisgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhcik6CisgICAgICAgICog
d2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRpY29u
ZGF0YWJhc2Vwcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
d2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3RyeV9n
ZXRfaWNvbl9waXhidWYpOiByZW5hbWVkIGZyb20KKyAgICAgICAgd2Via2l0X3dlYl92aWV3X2dl
dF9pY29uX3BpeGJ1ZigpLiBBbHNvIGFkZGVkIHdpZHRoIGFuZCBoZWlnaHQKKyAgICAgICAgcGFy
YW1ldGVycy4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdJY29uTG9hZGVkKTogZGlzcGF0Y2ggdGhl
IGljb24tbG9hZGVkIHNpZ25hbCB3aGVuCisgICAgICAgIHJlcXVlc3RlZCBieSB0aGUgRnJhbWVM
b2FkZXJDbGllbnQuCisgICAgICAgICh3ZWJraXRXZWJWaWV3UmVnaXN0ZXJGb3JJY29uTm90aWZp
Y2F0aW9uKTogc3RhcnRzL3N0b3BzIGxpc3RlbmluZworICAgICAgICB0byBpY29uIGRhdGFiYXNl
IG5vdGlmaWNhdGlvbnMuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuaDoKKyAgICAg
ICAgKiB3ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaDogYWRkZWQKKwogMjAxMi0wMy0wMSAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dU
S10gU2ltcGxpZnkgdGhlIGNvZGUgdG8gYWRqdXN0IGZvbnQgc2l6ZXMgZGVwZW5kaW5nIG9uIHNj
cmVlbiBEUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIv
U291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggMDY5YjViMGE1YTk4MzBjNTY1
MmZhNDI2MjQ4MDNkZjgwN2Y1Y2FjNS4uNWI5YTdiY2Q3OGRhY2JhZDc1ODNiZDJmNTIwOGRiZDQ5
Yzc1ZGJmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KKysr
IGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KQEAgLTIyNyw2ICsyMjcsNyBAQCB3
ZWJraXRndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGhp
dHRlc3RyZXN1bHQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aGl0dGVz
dHJlc3VsdHByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25k
YXRhYmFzZS5jcHAgXAorCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJh
c2Vwcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVx
dWVzdC5jcHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVz
dHByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXNw
b25zZS5jcHAgXApAQCAtNDQwLDYgKzQ0MSw3IEBAIFRFU1RfUFJPR1MgKz0gXAogCVByb2dyYW1z
L3VuaXR0ZXN0cy90ZXN0ZG9tZG9td2luZG93IFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdGRv
bW5vZGUgXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0aHR0cGJhY2tlbmQgXAorCVByb2dyYW1z
L3VuaXR0ZXN0cy90ZXN0aWNvbmRhdGFiYXNlIFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdGxv
YWRpbmcgXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0Z2xvYmFscyBcCiAJUHJvZ3JhbXMvdW5p
dHRlc3RzL3Rlc3RtaW1laGFuZGxpbmcgXApAQCAtNDg4LDYgKzQ5MCwxMSBAQCBQcm9ncmFtc191
bml0dGVzdHNfdGVzdGh0dHBiYWNrZW5kX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykK
IFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0aHR0cGJhY2tlbmRfTERBREQgPSAkKHdlYmtpdF90ZXN0
c19sZGFkZCkKIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0aHR0cGJhY2tlbmRfTERGTEFHUyA9ICQo
d2Via2l0X3Rlc3RzX2xkZmxhZ3MpCiAKK1Byb2dyYW1zX3VuaXR0ZXN0c190ZXN0aWNvbmRhdGFi
YXNlX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0aWNvbmRhdGFiYXNlLmMg
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdF91dGlscy5jCitQcm9ncmFtc191bml0dGVzdHNf
dGVzdGljb25kYXRhYmFzZV9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCitQcm9ncmFt
c191bml0dGVzdHNfdGVzdGljb25kYXRhYmFzZV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRk
KQorUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RpY29uZGF0YWJhc2VfTERGTEFHUyA9ICQod2Via2l0
X3Rlc3RzX2xkZmxhZ3MpCisKIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0Z2xvYmFsc19TT1VSQ0VT
ID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGdsb2JhbHMuYwogUHJvZ3JhbXNfdW5pdHRl
c3RzX3Rlc3RnbG9iYWxzX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKIFByb2dyYW1z
X3VuaXR0ZXN0c190ZXN0Z2xvYmFsc19MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRHdGsuY3BwCmluZGV4IDQyYTQ5NDU4Mzk2Y2ZjZTNkNzA3ZTA2OTgxNzAwZjZiOTgxMmFk
YmQuLjU4Yzk5YjMwNTJlYmE0NTBkOTg2YzM5OGQ3MDAwODdhNzVhNjZlNmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEd0ay5jcHAKQEAgLTY4LDYgKzY4LDcgQEAKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzLmgiCiAj
aW5jbHVkZSAid2Via2l0Z2xvYmFsc3ByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXRpY29uZGF0
YWJhc2UuaCIKKyNpbmNsdWRlICJ3ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlLmgiCiAjaW5jbHVk
ZSAid2Via2l0bmV0d29ya3JlcXVlc3QuaCIKICNpbmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVxdWVz
dHByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVzcG9uc2UuaCIKQEAgLTYyNSw3
ICs2MjYsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaWRQZXJmb3JtRmlyc3ROYXZpZ2F0
aW9uKCkgY29uc3QKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6cmVnaXN0ZXJGb3JJY29uTm90
aWZpY2F0aW9uKGJvb2wgc2hvdWxkUmVnaXN0ZXIpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICB3ZWJraXRXZWJWaWV3UmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKGdldFZpZXdGcm9t
RnJhbWUobV9mcmFtZSksIHNob3VsZFJlZ2lzdGVyKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNs
aWVudDo6c2V0TWFpbkZyYW1lRG9jdW1lbnRSZWFkeShib29sIHJlYWR5KQpAQCAtODAyLDE4ICs4
MDMsMTQgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlSWNvbigp
CiAgICAgaWYgKG1fbG9hZGluZ0Vycm9yUGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29u
c3QgZ2NoYXIqIGZyYW1lVVJJID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfdXJpKG1fZnJhbWUpOwot
ICAgIFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJh
c2UoKTsKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoZGF0YWJhc2UsICJpY29uLWxvYWRlZCIs
IG1fZnJhbWUsIGZyYW1lVVJJKTsKLQorICAgIC8vIEljb25Db250cm9sbGVyIGxvYWQgaWNvbnMg
b25seSBmb3IgdGhlIG1haW4gZnJhbWUuCiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IGdl
dFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7CisgICAgQVNTRVJUKG1fZnJhbWUgPT0gd2Via2l0X3dl
Yl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpKTsKIAotICAgIC8vIEF2b2lkIHJlcG9ydGlu
ZyBmYXZpY29ucyBmb3Igbm9uLW1haW4gZnJhbWVzLgotICAgIGlmIChtX2ZyYW1lICE9IHdlYmtp
dF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKHdlYlZpZXcpLCAiaWNvbi11cmkiKTsKLSAgICBn
X3NpZ25hbF9lbWl0X2J5X25hbWUod2ViVmlldywgImljb24tbG9hZGVkIiwgd2Via2l0X3dlYl92
aWV3X2dldF9pY29uX3VyaSh3ZWJWaWV3KSk7CisgICAgY29uc3QgY2hhciogZnJhbWVVUkkgPSB3
ZWJraXRfd2ViX2ZyYW1lX2dldF91cmkobV9mcmFtZSk7CisgICAgV2ViS2l0SWNvbkRhdGFiYXNl
KiBkYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOworICAgIHdlYmtpdEljb25E
YXRhYmFzZURpc3BhdGNoRGlkUmVjZWl2ZUljb24oZGF0YWJhc2UsIGZyYW1lVVJJKTsKKyAgICB3
ZWJraXRXZWJWaWV3SWNvbkxvYWRlZChkYXRhYmFzZSwgZnJhbWVVUkksIHdlYlZpZXcpOwogfQog
CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9uYWxMb2Fk
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLXNlY3Rpb25z
LnR4dCBiL1NvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLXNlY3Rpb25zLnR4dAppbmRl
eCA0YTM1OGU4M2RiZjkxYzMwYjhkZDI1ZmZhNWMyYWI5YTk4MzU2YjBiLi43YTdmMmFlY2RjNmJi
MGVkZGE2MGE1ZjdjZTUxNGIxYzJhNmE0MzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0
ay9kb2NzL3dlYmtpdGd0ay1zZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdC9ndGsvZG9j
cy93ZWJraXRndGstc2VjdGlvbnMudHh0CkBAIC00MjMsNyArNDIzLDYgQEAgd2Via2l0X3dlYl92
aWV3X2dldF9lbmNvZGluZwogd2Via2l0X3dlYl92aWV3X2dldF9mb2N1c2VkX2ZyYW1lCiB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2Z1bGxfY29udGVudF96b29tCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2hp
dF90ZXN0X3Jlc3VsdAotd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3BpeGJ1Zgogd2Via2l0X3dl
Yl92aWV3X2dldF9pY29uX3VyaQogd2Via2l0X3dlYl92aWV3X2dldF9pbnNwZWN0b3IKIHdlYmtp
dF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMKQEAgLTQ2OCw2ICs0NjcsNyBAQCB3ZWJraXRfd2Vi
X3ZpZXdfc2V0X3ZpZXdfbW9kZQogd2Via2l0X3dlYl92aWV3X3NldF92aWV3X3NvdXJjZV9tb2Rl
CiB3ZWJraXRfd2ViX3ZpZXdfc2V0X3pvb21fbGV2ZWwKIHdlYmtpdF93ZWJfdmlld19zdG9wX2xv
YWRpbmcKK3dlYmtpdF93ZWJfdmlld190cnlfZ2V0X2ljb25fcGl4YnVmCiB3ZWJraXRfd2ViX3Zp
ZXdfdW5kbwogd2Via2l0X3dlYl92aWV3X3VubWFya190ZXh0X21hdGNoZXMKIHdlYmtpdF93ZWJf
dmlld196b29tX2luCkBAIC02NTcsMTAgKzY1NywxMiBAQCB3ZWJraXRfcG9saWN5X2Vycm9yX3F1
YXJrCiBXZWJLaXRJY29uRGF0YWJhc2UKIHdlYmtpdF9pY29uX2RhdGFiYXNlX2NsZWFyCiB3ZWJr
aXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYKK3dlYmtpdF9pY29uX2RhdGFiYXNlX2dl
dF9pY29uX3BpeGJ1Zl9maW5pc2gKIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3VyaQog
d2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3BhdGgKIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF90
eXBlCiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aAord2Via2l0X2ljb25fZGF0YWJhc2Vf
dHJ5X2dldF9pY29uX3BpeGJ1ZgogPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CiBXRUJLSVRfVFlQRV9J
Q09OX0RBVEFCQVNFCiBXRUJLSVRfSUNPTl9EQVRBQkFTRQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ndGsvdGVzdHMvdGVzdGljb25kYXRhYmFzZS5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVz
dHMvdGVzdGljb25kYXRhYmFzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyMjU5OTQyMGI4MGM0NDYxY2QyOTU1
NjI4Y2VmMzQ2ZGJmM2I4NmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay90
ZXN0cy90ZXN0aWNvbmRhdGFiYXNlLmMKQEAgLTAsMCArMSwyODUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgInRlc3RfdXRpbHMuaCIKKyNpbmNsdWRl
IDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKyNkZWZpbmUgSUNPTl9TSVpFIDE2CisK
KyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNCwgMCkKK0dNYWluTG9vcCAqbG9vcDsKK2NoYXIq
IGJhc2VfdXJpOworCitzdGF0aWMgdm9pZAorc2VydmVyX2NhbGxiYWNrKFNvdXBTZXJ2ZXIgKnNl
cnZlciwgU291cE1lc3NhZ2UgKm1zZywgY29uc3QgY2hhciAqcGF0aCwgR0hhc2hUYWJsZSAqcXVl
cnksIFNvdXBDbGllbnRDb250ZXh0ICpjb250ZXh0LCBncG9pbnRlciBkYXRhKQoreworICAgIGNo
YXIqIGNvbnRlbnRzOworICAgIGdzaXplIGxlbmd0aDsKKworICAgIGlmIChtc2ctPm1ldGhvZCAh
PSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNn
LCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19PSyk7CisKKyAg
ICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9mYXZpY29uLmljbyIpKSB7CisgICAgICAgIEdFcnJv
ciogZXJyb3IgPSBOVUxMOworCisgICAgICAgIGdfZmlsZV9nZXRfY29udGVudHMoImJsYW5rLmlj
byIsICZjb250ZW50cywgJmxlbmd0aCwgJmVycm9yKTsKKyAgICAgICAgZ19hc3NlcnQoIWVycm9y
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb250ZW50cyA9IGdfc3RyZHVwKCI8aHRtbD48Ym9k
eT50ZXN0PC9ib2R5PjwvaHRtbD4iKTsKKyAgICAgICAgbGVuZ3RoID0gc3RybGVuKGNvbnRlbnRz
KTsKKyAgICB9CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9i
b2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsKKyAgICBzb3VwX21lc3Nh
Z2VfYm9keV9jb21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOworfQorCitzdGF0aWMgdm9pZCBk
ZWxldGVEYXRhYmFzZUZpbGVJZkV4aXN0cyhjb25zdCBjaGFyICpkYXRhYmFzZVBhdGgpCit7Cisg
ICAgaWYgKCFnX2ZpbGVfdGVzdChkYXRhYmFzZVBhdGgsIEdfRklMRV9URVNUX0lTX0RJUikpCisg
ICAgICAgIHJldHVybjsKKworICAgIGNoYXIgKmRhdGFiYXNlRmlsZW5hbWUgPSBnX2J1aWxkX2Zp
bGVuYW1lKGRhdGFiYXNlUGF0aCwgIldlYnBhZ2VJY29ucy5kYiIsIE5VTEwpOworICAgIGlmIChn
X3VubGluayhkYXRhYmFzZUZpbGVuYW1lKSA9PSAtMSkgeworICAgICAgICBnX2ZyZWUoZGF0YWJh
c2VGaWxlbmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBnX3JtZGlyKGRhdGFi
YXNlUGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRJY29uRGF0YWJhc2VTZXRQYXRo
KHZvaWQpCit7CisgICAgY2hhciAqZGF0YWJhc2VQYXRoID0gZ19idWlsZF9maWxlbmFtZShnX2dl
dF90bXBfZGlyKCksICJ3ZWJraXQtdGVzdGljb25kYXRhYmFzZSIsIE5VTEwpOworICAgIGRlbGV0
ZURhdGFiYXNlRmlsZUlmRXhpc3RzKGRhdGFiYXNlUGF0aCk7CisKKyAgICBXZWJLaXRJY29uRGF0
YWJhc2UgKmRhdGFiYXNlID0gd2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCk7CisgICAgd2Via2l0
X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgoZGF0YWJhc2UsIGRhdGFiYXNlUGF0aCk7CisKKyAgICBn
X2Fzc2VydF9jbXBzdHIoZGF0YWJhc2VQYXRoLCA9PSwgd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0
X3BhdGgoZGF0YWJhc2UpKTsKKworICAgIGdfZnJlZShkYXRhYmFzZVBhdGgpOworfQorCisvLyBT
ZWUgdGhlIGNvbW1lbnQgaW4gbWFpbigpIGZ1bmN0aW9uIHRoYXQgZ29lcyB3aXRoIHRoaXMgc2Ft
ZSBndWFyZC4KKyNpZmRlZiBOREVCVUcKKworc3RhdGljIHZvaWQgaWNvbkRhdGFiYXNlR2V0SWNv
blZhbGlkQ2FsbGJhY2soR09iamVjdCAqc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlc3Vs
dCwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ2Jvb2xlYW4gKmJlZW5IZXJlID0gKGdib29s
ZWFuKil1c2VyRGF0YTsKKyAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKyAgICBHZGtQaXhidWYg
Kmljb24gPSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWZfZmluaXNoKFdFQktJ
VF9JQ09OX0RBVEFCQVNFKHNvdXJjZU9iamVjdCksIHJlc3VsdCwgJmVycm9yKTsKKyAgICBnX2Fz
c2VydChpY29uKTsKKyAgICBnX29iamVjdF91bnJlZihpY29uKTsKKworICAgICpiZWVuSGVyZSA9
IFRSVUU7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMgdm9pZCBp
Y29uRGF0YWJhc2VHZXRJY29uSW52YWxpZENhbGxiYWNrKEdPYmplY3QgKnNvdXJjZU9iamVjdCwg
R0FzeW5jUmVzdWx0ICpyZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdib29sZWFu
ICpiZWVuSGVyZSA9IChnYm9vbGVhbiopdXNlckRhdGE7CisgICAgR0Vycm9yICplcnJvciA9IE5V
TEw7CisgICAgR2RrUGl4YnVmICppY29uID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25f
cGl4YnVmX2ZpbmlzaChXRUJLSVRfSUNPTl9EQVRBQkFTRShzb3VyY2VPYmplY3QpLCByZXN1bHQs
ICZlcnJvcik7CisgICAgZ19hc3NlcnQoIWljb24pOworCisgICAgKmJlZW5IZXJlID0gVFJVRTsK
KworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGljb25EYXRh
YmFzZUdldEljb25DYW5jZWxsZWRDYWxsYmFjayhHT2JqZWN0ICpzb3VyY2VPYmplY3QsIEdBc3lu
Y1Jlc3VsdCAqcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnYm9vbGVhbiAqYmVl
bkhlcmUgPSAoZ2Jvb2xlYW4qKXVzZXJEYXRhOworICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOwor
ICAgIEdka1BpeGJ1ZiAqaWNvbiA9IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1
Zl9maW5pc2goV0VCS0lUX0lDT05fREFUQUJBU0Uoc291cmNlT2JqZWN0KSwgcmVzdWx0LCAmZXJy
b3IpOworICAgIGdfYXNzZXJ0KCFpY29uKTsKKyAgICBnX2Fzc2VydChlcnJvciAmJiBnX2Vycm9y
X21hdGNoZXMoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSk7CisKKyAg
ICAqYmVlbkhlcmUgPSBUUlVFOworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKwor
c3RhdGljIGlubGluZSB2b2lkIG1haW5Mb29wUXVpdElmTG9hZENvbXBsZXRlZChnYm9vbGVhbiog
aWNvbk9yUGFnZUxvYWRlZCkKK3sKKyAgICBpZiAoKmljb25PclBhZ2VMb2FkZWQpCisgICAgICAg
IGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgZWxzZQorICAgICAgICAqaWNvbk9yUGFnZUxv
YWRlZCA9IFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIGlkbGVRdWl0TG9vcENhbGxiYWNrKFdlYktp
dFdlYlZpZXcgKndlYlZpZXcsIEdQYXJhbVNwZWMgKnBzcGVjLCBnYm9vbGVhbiogaWNvbk9yUGFn
ZUxvYWRlZCkKK3sKKyAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmll
d19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7CisKKyAgICBpZiAoc3RhdHVzID09IFdFQktJVF9M
T0FEX0ZJTklTSEVEIHx8IHN0YXR1cyA9PSBXRUJLSVRfTE9BRF9GQUlMRUQpCisgICAgICAgIG1h
aW5Mb29wUXVpdElmTG9hZENvbXBsZXRlZChpY29uT3JQYWdlTG9hZGVkKTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0V2ViVmlld0ljb25Mb2FkZWQoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSwgY29uc3QgY2hhciogZnJhbWVVUkksIGdib29sZWFuKiBpY29uT3JQYWdlTG9hZGVkKQorewor
ICAgIG1haW5Mb29wUXVpdElmTG9hZENvbXBsZXRlZChpY29uT3JQYWdlTG9hZGVkKTsKK30KKwor
c3RhdGljIHZvaWQgbG9hZFVSSShjb25zdCBjaGFyICp1cmkpCit7CisgICAgV2ViS2l0V2ViVmll
dyAqdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdi
b29sZWFuIGljb25PclBhZ2VMb2FkZWQgPSBGQUxTRTsKKworICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX3VyaSh2aWV3LCB1cmkpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAibm90aWZ5
Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0soaWRsZVF1aXRMb29wQ2FsbGJhY2spLCAmaWNvbk9y
UGFnZUxvYWRlZCk7CisgICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAiaWNvbi1sb2FkZWQiLCBH
X0NBTExCQUNLKHdlYmtpdFdlYlZpZXdJY29uTG9hZGVkKSwgJmljb25PclBhZ2VMb2FkZWQpOwor
CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gaWNvbkRh
dGFiYXNlR2V0SWNvblZhbGlkSWRsZShncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICB3ZWJraXRf
aWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCks
IGJhc2VfdXJpLAorCQkJCQkgSUNPTl9TSVpFLCBJQ09OX1NJWkUsIE5VTEwsCisJCQkJCSBpY29u
RGF0YWJhc2VHZXRJY29uVmFsaWRDYWxsYmFjaywgdXNlckRhdGEpOworICAgIHJldHVybiBGQUxT
RTsKK30KKworc3RhdGljIGdib29sZWFuIGljb25EYXRhYmFzZUdldEljb25JbnZhbGlkSWRsZShn
cG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9w
aXhidWYod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCksICJodHRwOi8vd3d3LndlYmtpdGd0ay5v
cmcvIiwKKwkJCQkJIElDT05fU0laRSwgSUNPTl9TSVpFLCBOVUxMLAorCQkJCQkgaWNvbkRhdGFi
YXNlR2V0SWNvbkludmFsaWRDYWxsYmFjaywgdXNlckRhdGEpOworICAgIHJldHVybiBGQUxTRTsK
K30KKworc3RhdGljIGdib29sZWFuIGljb25EYXRhYmFzZUdldEljb25DYW5jZWxsZWRJZGxlKGdw
b2ludGVyIHVzZXJEYXRhKQoreworICAgIEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGUgPSBnX2Nh
bmNlbGxhYmxlX25ldygpOworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1
Zih3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKSwgYmFzZV91cmksCisJCQkJCSBJQ09OX1NJWkUs
IElDT05fU0laRSwgY2FuY2VsbGFibGUsCisJCQkJCSBpY29uRGF0YWJhc2VHZXRJY29uQ2FuY2Vs
bGVkQ2FsbGJhY2ssIHVzZXJEYXRhKTsKKyAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChjYW5jZWxs
YWJsZSk7CisgICAgZ19vYmplY3RfdW5yZWYoY2FuY2VsbGFibGUpOworICAgIHJldHVybiBGQUxT
RTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEljb25EYXRhYmFzZUdldEljb25Bc3luYyh2
b2lkKQoreworICAgIGdib29sZWFuIGJlZW5Ub0ljb25DYWxsYmFjazsKKworICAgIGxvb3AgPSBn
X21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICAvKiBMb2FkIHVyaSB0byBtYWtlIHN1
cmUgZmF2aWNvbiBpcyBhZGRlZCB0byBkYXRhYmFzZSAqLworICAgIGxvYWRVUkkoYmFzZV91cmkp
OworCisgICAgYmVlblRvSWNvbkNhbGxiYWNrID0gRkFMU0U7CisgICAgZ19pZGxlX2FkZCgoR1Nv
dXJjZUZ1bmMpaWNvbkRhdGFiYXNlR2V0SWNvblZhbGlkSWRsZSwgJmJlZW5Ub0ljb25DYWxsYmFj
ayk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworICAgIGdfYXNzZXJ0KGJlZW5Ub0ljb25D
YWxsYmFjayk7CisKKyAgICBiZWVuVG9JY29uQ2FsbGJhY2sgPSBGQUxTRTsKKyAgICBnX2lkbGVf
YWRkKChHU291cmNlRnVuYylpY29uRGF0YWJhc2VHZXRJY29uSW52YWxpZElkbGUsICZiZWVuVG9J
Y29uQ2FsbGJhY2spOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKyAgICBnX2Fzc2VydChi
ZWVuVG9JY29uQ2FsbGJhY2spOworCisgICAgYmVlblRvSWNvbkNhbGxiYWNrID0gRkFMU0U7Cisg
ICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMpaWNvbkRhdGFiYXNlR2V0SWNvbkNhbmNlbGxlZElk
bGUsICZiZWVuVG9JY29uQ2FsbGJhY2spOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKyAg
ICBnX2Fzc2VydChiZWVuVG9JY29uQ2FsbGJhY2spOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Vi
a2l0SWNvbkRhdGFiYXNlR2V0SWNvblVSSSh2b2lkKQoreworICAgIGNoYXIgKmljb25VUkkgPSB3
ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmkod2Via2l0X2dldF9pY29uX2RhdGFiYXNl
KCksIGJhc2VfdXJpKTsKKyAgICBjaGFyICpleHBlY3RlZFVSSSA9IGdfc3RyZHVwX3ByaW50Zigi
JXNmYXZpY29uLmljbyIsIGJhc2VfdXJpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoaWNvblVSSSwg
PT0sIGV4cGVjdGVkVVJJKTsKKyAgICBnX2ZyZWUoZXhwZWN0ZWRVUkkpOworICAgIGdfZnJlZShp
Y29uVVJJKTsKK30KKworI2VuZGlmCisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRJY29uRGF0YWJh
c2VSZW1vdmVBbGwodm9pZCkKK3sKKyAgICBXZWJLaXRJY29uRGF0YWJhc2UgKmRhdGFiYXNlID0g
d2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCk7CisgICAgd2Via2l0X2ljb25fZGF0YWJhc2VfY2xl
YXIoZGF0YWJhc2UpOworICAgIGNoYXIgKmljb25VUkkgPSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9n
ZXRfaWNvbl91cmkoZGF0YWJhc2UsIGJhc2VfdXJpKTsKKyAgICBnX2Fzc2VydCghaWNvblVSSSk7
CisgICAgZ19mcmVlKGljb25VUkkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0SWNvbkRh
dGFiYXNlQ2xvc2VEYXRhYmFzZSh2b2lkKQoreworICAgIFdlYktpdEljb25EYXRhYmFzZSAqZGF0
YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKKyAgICBjaGFyICpkYXRhYmFzZVBh
dGggPSBnX3N0cmR1cCh3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0aChkYXRhYmFzZSkpOwor
ICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCAwKTsKKyAgICBkZWxl
dGVEYXRhYmFzZUZpbGVJZkV4aXN0cyhkYXRhYmFzZVBhdGgpOworICAgIGdfZnJlZShkYXRhYmFz
ZVBhdGgpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgU291
cFNlcnZlciogc2VydmVyOworICAgIFNvdXBVUkkqIHNvdXBfdXJpOworCisgICAgZ3RrX3Rlc3Rf
aW5pdCgmYXJnYywgJmFyZ3YsIDApOworCisgICAgLyogSG9wZWZ1bGx5IG1ha2UgdGVzdCBpbmRl
cGVuZGVudCBvZiB0aGUgcGF0aCBpdCdzIGNhbGxlZCBmcm9tLiAqLworICAgIHRlc3R1dGlsc19y
ZWxhdGl2ZV9jaGRpcigiU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QuaHRt
bCIsIGFyZ3ZbMF0pOworCisgICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVS
X1BPUlQsIDAsIE5VTEwpOworICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIpOworCisg
ICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJfY2FsbGJhY2ss
IE5VTEwsIE5VTEwpOworCisgICAgc291cF91cmkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcu
MC4wLjEvIik7CisgICAgc291cF91cmlfc2V0X3BvcnQoc291cF91cmksIHNvdXBfc2VydmVyX2dl
dF9wb3J0KHNlcnZlcikpOworCisgICAgYmFzZV91cmkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291
cF91cmksIEZBTFNFKTsKKyAgICBzb3VwX3VyaV9mcmVlKHNvdXBfdXJpKTsKKworICAgIGdfdGVz
dF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L2ljb25kYXRhYmFzZS9zZXQtcGF0aCIsIHRlc3RXZWJraXRJY29uRGF0YWJh
c2VTZXRQYXRoKTsKKworICAgIC8vIFRoZXNlIHR3byB0ZXN0cyB3aWxsIHRyaWdnZXIgYW4gQVNT
RVJUSU9OIG9uIGRlYnVnIGJ1aWxkcyBkdWUKKyAgICAvLyB0byBodHRwOi8vd2Via2l0Lm9yZy9i
LzY3NTgyLiBSZW1vdmUgdGhlIGd1YXJkcyBvbmNlIHRoZSBidWcgaXMgZml4ZWQuCisjaWZkZWYg
TkRFQlVHCisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2ljb25kYXRhYmFzZS9pY29uLWFz
eW5jIiwgdGVzdFdlYmtpdEljb25EYXRhYmFzZUdldEljb25Bc3luYyk7CisgICAgZ190ZXN0X2Fk
ZF9mdW5jKCIvd2Via2l0L2ljb25kYXRhYmFzZS9pY29uLXVyaSIsIHRlc3RXZWJraXRJY29uRGF0
YWJhc2VHZXRJY29uVVJJKTsKKyNlbmRpZgorCisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0
L2ljb25kYXRhYmFzZS9yZW1vdmUtYWxsIiwgdGVzdFdlYmtpdEljb25EYXRhYmFzZVJlbW92ZUFs
bCk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2ljb25kYXRhYmFzZS9jbG9zZS1kYiIs
IHRlc3RXZWJraXRJY29uRGF0YWJhc2VDbG9zZURhdGFiYXNlKTsKKworICAgIHJldHVybiBnX3Rl
c3RfcnVuKCk7Cit9CisjZWxzZQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorewor
ICAgIGdfY3JpdGljYWwoIllvdSB3aWxsIG5lZWQgZ3RrLTIuMTQuMCB0byBydW4gdGhlIHVuaXQg
dGVzdHMuIERvaW5nIG5vdGhpbmcgbm93LiIpOworICAgIHJldHVybiAwOworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcCBi
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcAppbmRleCBiYzVkNzI2
MDRmYzM5ZWY2NjdmNjcwZWM0M2QwZWViOTRmYmRlZjliLi5kMzhjMmY3MTVjZWY2NzYxNWI3YzY1
NDY2ZWZiZmQ3ZjJhZGFlM2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0Z2xvYmFscy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGds
b2JhbHMuY3BwCkBAIC0yNTQsNiArMjU0LDkgQEAgc3RhdGljIEdSZWZQdHI8V2ViS2l0U3BlbGxD
aGVja2VyPiB0ZXh0Q2hlY2tlciA9IDA7CiBzdGF0aWMgdm9pZCB3ZWJraXRFeGl0KCkKIHsKICAg
ICBnX29iamVjdF91bnJlZih3ZWJraXRfZ2V0X2RlZmF1bHRfc2Vzc2lvbigpKTsKKyNpZiBFTkFC
TEUoSUNPTkRBVEFCQVNFKQorICAgIGdfb2JqZWN0X3VucmVmKHdlYmtpdF9nZXRfaWNvbl9kYXRh
YmFzZSgpKTsKKyNlbmRpZgogICAgIHRleHRDaGVja2VyID0gMDsKIH0KIApAQCAtMzI2LDkgKzMy
OSw2IEBAIHZvaWQgd2Via2l0SW5pdCgpCiAKICAgICBQYWdlR3JvdXA6OnNldFNob3VsZFRyYWNr
VmlzaXRlZExpbmtzKHRydWUpOwogCi0gICAgR093blB0cjxnY2hhcj4gaWNvbkRhdGFiYXNlUGF0
aChnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSwgIndlYmtpdCIsICJpY29u
ZGF0YWJhc2UiLCBOVUxMKSk7Ci0gICAgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgod2Vi
a2l0X2dldF9pY29uX2RhdGFiYXNlKCksIGljb25EYXRhYmFzZVBhdGguZ2V0KCkpOwotCiAgICAg
U291cFNlc3Npb24qIHNlc3Npb24gPSB3ZWJraXRfZ2V0X2RlZmF1bHRfc2Vzc2lvbigpOwogCiAg
ICAgU291cFNlc3Npb25GZWF0dXJlKiBhdXRoRGlhbG9nID0gc3RhdGljX2Nhc3Q8U291cFNlc3Np
b25GZWF0dXJlKj4oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1NPVVBfQVVUSF9ESUFMT0csIE5V
TEwpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0
YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5j
cHAKaW5kZXggMzgzYjA4MTdlY2JhZWUzMTc0ZTVlZjdlYzdlOTQxNWI4NDM3YzE0My4uZmQ0ZDc0
MWE3MTc4OTBjZjY0NDM4MDRmM2Y5YjdjNzY3ZTc2MzBhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDExIENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQGxhbmVkby5j
b20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjMsMTQgKzI0LDIxIEBACiAjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCiAjaW5j
bHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1
ZGUgIkdSZWZQdHIuaCIKICNpbmNsdWRlICJJY29uRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJJY29u
RGF0YWJhc2VDbGllbnQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFNpemUu
aCIKKyNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzLmgiCiAjaW5jbHVkZSAid2Via2l0Z2xvYmFsc3By
aXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlLmgiCiAjaW5jbHVk
ZSAid2Via2l0bWFyc2hhbC5oIgogI2luY2x1ZGUgIndlYmtpdHNlY3VyaXR5b3JpZ2lucHJpdmF0
ZS5oIgogI2luY2x1ZGUgIndlYmtpdHdlYmZyYW1lLmgiCiAjaW5jbHVkZSA8Z2xpYi9naTE4bi1s
aWIuaD4KKyNpbmNsdWRlIDxzcWxpdGUzLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3du
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC00MiwyNiArNTAsMTM0
IEBACiAgKiBpbiB0YWIgbGFiZWxzLCB3aW5kb3cgY2FwdGlvbnMgb3IgYm9va21hcmtzLiBBbGwg
dmlld3Mgc2hhcmUKICAqIHRoZSBzYW1lIGljb24gZGF0YWJhc2UuCiAgKgotICogVGhlIGljb24g
ZGF0YWJhc2UgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGFuZCBzdG9yZWQgaW4KLSAqIH4vLmxvY2Fs
L3NoYXJlL3dlYmtpdC9pY29uZGF0YWJhc2UsIGRlcGVuZGluZyBvbiBYREdfREFUQV9IT01FLgor
ICogVGhlIGRhdGFiYXNlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuIEluIG9yZGVyIGZvciBpY29u
cyB0byBiZQorICogbG9hZGVkLCB5b3Ugd2lsbCBuZWVkIHRvIHNldCBhbiBpY29uIGRhdGFiYXNl
IHBhdGggdXNpbmcKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKCkuIERpc2FibGUg
dGhlIGRhdGFiYXNlIGFnYWluIHBhc3NpbmcKKyAqICVOVUxMIHRvIHRoZSBwcmV2aW91cyBjYWxs
LgogICoKICAqIFdlYktpdCB3aWxsIGF1dG9tYXRpY2FsbHkgbG9vayBmb3IgYXZhaWxhYmxlIGlj
b25zIGluIGxpbmsgZWxlbWVudHMKICAqIG9uIG9wZW5lZCBwYWdlcyBhcyB3ZWxsIGFzIGFuIGV4
aXN0aW5nIGZhdmljb24uaWNvIGFuZCBsb2FkIHRoZQotICogaW1hZ2VzIGZvdW5kIGludG8gdGhl
IG1lbW9yeSBjYWNoZSBpZiBwb3NzaWJsZS4gVGhlIHNpZ25hbCAiaWNvbi1sb2FkZWQiCi0gKiB3
aWxsIGJlIGVtaXR0ZWQgd2hlbiBhbnkgaWNvbiBpcyBmb3VuZCBhbmQgbG9hZGVkLgotICogT2xk
IEljb25zIGFyZSBhdXRvbWF0aWNhbGx5IGNsZWFuZWQgdXAgYWZ0ZXIgNCBkYXlzLgotICoKLSAq
IHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKCkgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRo
ZSBsb2NhdGlvbgotICogb2YgdGhlIGRhdGFiYXNlIGFuZCBhbHNvIHRvIGRpc2FibGUgaXQgYnkg
cGFzc2luZyAlTlVMTC4KKyAqIGltYWdlcyBmb3VuZCBpbnRvIHRoZSBtZW1vcnkgY2FjaGUgaWYg
cG9zc2libGUuCiAgKgogICogSWYgV2ViS2l0V2ViU2V0dGluZ3M6OmVuYWJsZS1wcml2YXRlLWJy
b3dzaW5nIGlzICVUUlVFIG5ldyBpY29ucwogICogd29uJ3QgYmUgYWRkZWQgdG8gdGhlIGRhdGFi
YXNlIG9uIGRpc2sgYW5kIG5vIGV4aXN0aW5nIGljb25zIHdpbGwKICAqIGJlIGRlbGV0ZWQgZnJv
bSBpdC4KICAqCi0gKiBTaW5jZTogMS4zLjEzCisgKiBJY29ucyB3aWxsIGJlIGF1dG9tYXRpY2Fs
bHkgcHVyZ2VkIGFmdGVyIDMwIGRheXMgd2l0aG91dCBiZWluZworICogdXNlZC4KKyAqCisgKiBT
aW5jZTogMS44CiAgKi8KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCisvLyBJY29ucyB3aWxsIGV4cGlyZSBhZnRlciAzMCBkYXlzLgorI2RlZmlu
ZSBJQ09OX0VYUElSQVRJT05fVElNRSA2MCo2MCoyNCozMAorCitjbGFzcyBQZW5kaW5nSWNvblJl
cXVlc3Q7CisKK3N0YXRpYyB2b2lkIHdlYmtpdEljb25EYXRhYmFzZVByb2Nlc3NQZW5kaW5nSWNv
bnNGb3JVUkkoV2ViS2l0SWNvbkRhdGFiYXNlKiwgY29uc3QgU3RyaW5nJiBwYWdlVVJJKTsKK3N0
YXRpYyB2b2lkIHdlYmtpdEljb25EYXRhYmFzZUltcG9ydEZpbmlzaGVkKFdlYktpdEljb25EYXRh
YmFzZSopOworc3RhdGljIHZvaWQgd2Via2l0SWNvbkRhdGFiYXNlR2V0SWNvblBpeGJ1ZkNhbmNl
bGxlZChHQ2FuY2VsbGFibGUqLCBQZW5kaW5nSWNvblJlcXVlc3QqKTsKK3N0YXRpYyB2b2lkIHdl
YmtpdEljb25EYXRhYmFzZU5vdGlmeUFuZFVwZGF0ZUV4cGlyYXRpb24oV2ViS2l0SWNvbkRhdGFi
YXNlKiwgY29uc3QgY2hhciogcGFnZVVSSSk7CitzdGF0aWMgdm9pZCB3ZWJraXRJY29uRGF0YWJh
c2VDbG9zZShXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKTsKKworY2xhc3MgSWNvbkRhdGFi
YXNlQ2xpZW50R3RrIDogcHVibGljIEljb25EYXRhYmFzZUNsaWVudCB7CitwdWJsaWM6CisKKyAg
ICAvLyBJY29uRGF0YWJhc2VDbGllbnQgaW50ZXJmYWNlCisgICAgdmlydHVhbCBib29sIHBlcmZv
cm1JbXBvcnQoKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZUFs
bEljb25zKCkgeyB9OworCisgICAgLy8gQ2FsbGVkIHdoZW4gdGhlIGFuIGljb24gaXMgcmVxdWVz
dGVkIHdoaWxlIHRoZSBpbml0aWFsCisgICAgLy8gaW1wb3J0IGlzIGdvaW5nIG9uLgorICAgIHZp
cnR1YWwgdm9pZCBkaWRJbXBvcnRJY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIFVSTCkg
eyB9OworCisgICAgLy8gQ2FsbGVkIHdoZW5ldmVyIGEgcmV0YWluZWQgaWNvbiBpcyByZWFkIGZy
b20gZGF0YWJhc2UuCisgICAgdmlydHVhbCB2b2lkIGRpZEltcG9ydEljb25EYXRhRm9yUGFnZVVS
TChjb25zdCBTdHJpbmcmIFVSTCkKKyAgICB7CisgICAgICAgIFdlYktpdEljb25EYXRhYmFzZSog
ZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKKyAgICAgICAgLy8gV2UgbmVl
ZCB0byBlbWl0IHRoaXMgaGVyZSBiZWNhdXNlIHdlYmtpdEljb25EYXRhYmFzZURpc3BhdGNoRGlk
UmVjZWl2ZUljb24oKQorICAgICAgICAvLyBpcyBvbmx5IGNhbGxlZCBmb3IgaWNvbnMgdGhhdCBo
YXZlIGp1c3QgYmVpbmcgZG93bmxvYWRlZCwgYW5kIHRoaXMgaXMgY2FsbGVkCisgICAgICAgIC8v
IHdoZW4gaWNvbiBkYXRhIGlzIGltcG9ydGVkIGZyb20gdGhlIGRhdGFiYXNlLgorICAgICAgICB3
ZWJraXRJY29uRGF0YWJhc2VOb3RpZnlBbmRVcGRhdGVFeHBpcmF0aW9uKGRhdGFiYXNlLCBVUkwu
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHdlYmtpdEljb25EYXRhYmFzZVByb2Nlc3NQZW5kaW5n
SWNvbnNGb3JVUkkoZGF0YWJhc2UsIFVSTCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRp
ZENoYW5nZUljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgVVJMKQorICAgIHsKKyAgICAgICAg
Ly8gQ2FsbGVkIHdoZW4gdGhlIEljb25Mb2FkZXIgKGkuZS4gaXMgbm90IG9idGFpbmVkIGZyb20g
dGhlCisgICAgICAgIC8vIGljb24gZGF0YWJhc2UpIHJldHJpZXZlcyBhbiBpY29uIGZvciBhbiBV
UkwuCisgICAgICAgIGRpZEltcG9ydEljb25EYXRhRm9yUGFnZVVSTChVUkwpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hVUkxJbXBvcnQoKQorICAgIHsKKyAgICAgICAgV2Vi
S2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOwor
ICAgICAgICB3ZWJraXRJY29uRGF0YWJhc2VJbXBvcnRGaW5pc2hlZChkYXRhYmFzZSk7CisKKyAg
ICAgICAgLy8gTm93IHRoYXQgZXZlcnl0aGluZyBpcyBpbXBvcnRlZCBlbmFibGUgcHJ1bmluZyBv
ZiBvbGQKKyAgICAgICAgLy8gaWNvbnMuIE5vIGljb24gd2lsbCBiZSByZW1vdmVkIGR1cmluZyB0
aGUgaW1wb3J0IHByb2Nlc3MKKyAgICAgICAgLy8gYmVjYXVzZSB3ZSBkaXNhYmxlIGNsZWFudXBz
IGJlZm9yZSBvcGVuaW5nIHRoZSBkYXRhYmFzZS4KKyAgICAgICAgSWNvbkRhdGFiYXNlOjphbGxv
d0RhdGFiYXNlQ2xlYW51cCgpOworICAgIH0KK307CisKK2NsYXNzIFBlbmRpbmdJY29uUmVxdWVz
dCB7CitwdWJsaWM6CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0KGNvbnN0IFN0cmluZyYgcGFnZVVS
SSwgR1NpbXBsZUFzeW5jUmVzdWx0KiByZXN1bHQsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUs
IEludFNpemUgaWNvblNpemUpCisgICAgICAgIDogbV9wYWdlVVJJKHBhZ2VVUkkpCisgICAgICAg
ICwgbV9hc3luY1Jlc3VsdChyZXN1bHQpCisgICAgICAgICwgbV9jYW5jZWxsYWJsZShjYW5jZWxs
YWJsZSkKKyAgICAgICAgLCBtX2NhbmNlbGxlZElkKDApCisgICAgICAgICwgbV9pY29uU2l6ZShp
Y29uU2l6ZSkKKyAgICB7CisgICAgICAgIGlmICghY2FuY2VsbGFibGUpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgbV9jYW5jZWxsZWRJZCA9IGdfY2FuY2VsbGFibGVfY29ubmVjdChj
YW5jZWxsYWJsZSwgR19DQUxMQkFDSyh3ZWJraXRJY29uRGF0YWJhc2VHZXRJY29uUGl4YnVmQ2Fu
Y2VsbGVkKSwgdGhpcywgMCk7CisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhX2Z1bGwoR19PQkpF
Q1QocmVzdWx0KSwgImNhbmNlbGxhYmxlIiwgZ19vYmplY3RfcmVmKGNhbmNlbGxhYmxlKSwgc3Rh
dGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSk7CisgICAgfQorCisgICAg
flBlbmRpbmdJY29uUmVxdWVzdCgpCisgICAgeworICAgICAgICBpZiAobV9jYW5jZWxsZWRJZCA+
IDApCisgICAgICAgICAgICBnX2NhbmNlbGxhYmxlX2Rpc2Nvbm5lY3QobV9jYW5jZWxsYWJsZS5n
ZXQoKSwgbV9jYW5jZWxsZWRJZCk7CisgICAgfQorCisgICAgY29uc3QgU3RyaW5nJiBwYWdlVVJJ
KCkgeyByZXR1cm4gbV9wYWdlVVJJOyB9CisgICAgR1NpbXBsZUFzeW5jUmVzdWx0KiBhc3luY1Jl
c3VsdCgpIHsgcmV0dXJuIG1fYXN5bmNSZXN1bHQuZ2V0KCk7IH0KKworICAgIHZvaWQgYXN5bmNS
ZXN1bHRDYW5jZWwoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYXN5bmNSZXN1bHQpOworICAg
ICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Vycm9yKG1fYXN5bmNSZXN1bHQuZ2V0KCks
IEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVELCAiJXMiLCBfKCJPcGVyYXRpb24gd2Fz
IGNhbmNlbGxlZCIpKTsKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlKG1f
YXN5bmNSZXN1bHQuZ2V0KCkpOworICAgIH0KKworICAgIHZvaWQgYXN5bmNSZXN1bHRDb21wbGV0
ZUluSWRsZShHZGtQaXhidWYqIGljb24pCisgICAgeworICAgICAgICBBU1NFUlQobV9hc3luY1Jl
c3VsdCk7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVy
KG1fYXN5bmNSZXN1bHQuZ2V0KCksIGljb24sIGljb24gPyBzdGF0aWNfY2FzdDxHRGVzdHJveU5v
dGlmeT4oZ19vYmplY3RfdW5yZWYpIDogMCk7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3Vs
dF9jb21wbGV0ZV9pbl9pZGxlKG1fYXN5bmNSZXN1bHQuZ2V0KCkpOworICAgIH0KKworICAgIHZv
aWQgYXN5bmNSZXN1bHRDb21wbGV0ZShHZGtQaXhidWYqIGljb24pCisgICAgeworICAgICAgICBB
U1NFUlQobV9hc3luY1Jlc3VsdCk7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRf
b3BfcmVzX2dwb2ludGVyKG1fYXN5bmNSZXN1bHQuZ2V0KCksIGljb24sIGljb24gPyBzdGF0aWNf
Y2FzdDxHRGVzdHJveU5vdGlmeT4oZ19vYmplY3RfdW5yZWYpIDogMCk7CisgICAgICAgIGdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZShtX2FzeW5jUmVzdWx0LmdldCgpKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgU3RyaW5nIG1fcGFnZVVSSTsKKyAgICBHUmVmUHRyPEdTaW1wbGVBc3lu
Y1Jlc3VsdD4gbV9hc3luY1Jlc3VsdDsKKyAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5j
ZWxsYWJsZTsKKyAgICBndWxvbmcgbV9jYW5jZWxsZWRJZDsKKyAgICBJbnRTaXplIG1faWNvblNp
emU7Cit9OworCiAKIGVudW0gewogICAgIFBST1BfMCwKQEAgLTc3LDE2ICsxOTMsMjUgQEAgZW51
bSB7CiAKIHN0YXRpYyBndWludCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zaWduYWxzW0xBU1RfU0lH
TkFMXSA9IHsgMCwgfTsKIAotR19ERUZJTkVfVFlQRShXZWJLaXRJY29uRGF0YWJhc2UsIHdlYmtp
dF9pY29uX2RhdGFiYXNlLCBHX1RZUEVfT0JKRUNUKTsKK0dfREVGSU5FX1RZUEUoV2ViS2l0SWNv
bkRhdGFiYXNlLCB3ZWJraXRfaWNvbl9kYXRhYmFzZSwgR19UWVBFX09CSkVDVCkKKwordHlwZWRl
ZiBWZWN0b3I8T3duUHRyPFBlbmRpbmdJY29uUmVxdWVzdD4gPiBQZW5kaW5nSWNvblJlcXVlc3RW
ZWN0b3I7Cit0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3Iq
PiBQZW5kaW5nSWNvblJlcXVlc3RNYXA7CiAKIHN0cnVjdCBfV2ViS2l0SWNvbkRhdGFiYXNlUHJp
dmF0ZSB7CiAgICAgR093blB0cjxnY2hhcj4gcGF0aDsKKyAgICBJY29uRGF0YWJhc2VDbGllbnRH
dGsgaWNvbkRhdGFiYXNlQ2xpZW50OworICAgIFBlbmRpbmdJY29uUmVxdWVzdE1hcCBwZW5kaW5n
SWNvblJlcXVlc3RzOworICAgIGJvb2wgaW1wb3J0RmluaXNoZWQ7CisgICAgc3FsaXRlMyogZXhw
aXJhdGlvblRpbWVzRGF0YWJhc2U7CiB9OwogCiBzdGF0aWMgdm9pZCB3ZWJraXRfaWNvbl9kYXRh
YmFzZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgLy8gQ2FsbCBDKysgZGVzdHJ1
Y3RvcnMsIHRoZSByZXZlcnNlIG9mICdwbGFjZW1lbnQgbmV3IHN5bnRheCcKLSAgICBXRUJLSVRf
SUNPTl9EQVRBQkFTRShvYmplY3QpLT5wcml2LT5+V2ViS2l0SWNvbkRhdGFiYXNlUHJpdmF0ZSgp
OworICAgIFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSBXRUJLSVRfSUNPTl9EQVRBQkFT
RShvYmplY3QpOworCisgICAgd2Via2l0SWNvbkRhdGFiYXNlQ2xvc2UoZGF0YWJhc2UpOworICAg
IGRhdGFiYXNlLT5wcml2LT5+V2ViS2l0SWNvbkRhdGFiYXNlUHJpdmF0ZSgpOwogCiAgICAgR19P
QkpFQ1RfQ0xBU1Mod2Via2l0X2ljb25fZGF0YWJhc2VfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUo
b2JqZWN0KTsKIH0KQEAgLTE0NiwzMSArMjcxLDMzIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9pY29u
X2RhdGFiYXNlX2NsYXNzX2luaXQoV2ViS2l0SWNvbkRhdGFiYXNlQ2xhc3MqIGtsYXNzKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygi
UGF0aCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXygiVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGljb24gZGF0YWJhc2UgZm9sZGVy
IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOVUxMLAotICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQot
ICAgIC8qKgotICAgICAqIFdlYktpdEljb25EYXRhYmFzZTo6aWNvbi1sb2FkZWQ6Ci0gICAgICog
QGRhdGFiYXNlOiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAotICAg
ICAqIEBmcmFtZTogdGhlIGZyYW1lIGNvbnRhaW5pbmcgdGhlIGljb24KLSAgICAgKiBAZnJhbWVf
dXJpOiB0aGUgVVJJIG9mIHRoZSBmcmFtZSBjb250YWluaW5nIHRoZSBpY29uCi0gICAgICoKLSAg
ICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYSBmYXZpY29uIGlzIGF2YWlsYWJsZSBm
b3IgYSBwYWdlLAotICAgICAqIG9yIGEgY2hpbGQgZnJhbWUuCi0gICAgICogU2VlIFdlYktpdFdl
YlZpZXc6Omljb24tbG9hZGVkIGlmIHlvdSBvbmx5IG5lZWQgdGhlIGZhdmljb24gZm9yCi0gICAg
ICogdGhlIG1haW4gZnJhbWUgb2YgYSBwYXJ0aWN1bGFyICNXZWJLaXRXZWJWaWV3LgotICAgICAq
Ci0gICAgICogU2luY2U6IDEuMy4xMwotICAgICAqLwotICAgIHdlYmtpdF9pY29uX2RhdGFiYXNl
X3NpZ25hbHNbSUNPTl9MT0FERURdID0gZ19zaWduYWxfbmV3KCJpY29uLWxvYWRlZCIsCi0gICAg
ICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhrbGFzcyksCi0gICAgICAgICAgICAoR1NpZ25hbEZs
YWdzKUdfU0lHTkFMX1JVTl9MQVNULAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIE5VTEws
Ci0gICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfVk9JRF9fT0JK
RUNUX1NUUklORywKLSAgICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAotICAgICAgICAgICAgV0VC
S0lUX1RZUEVfV0VCX0ZSQU1FLAotICAgICAgICAgICAgR19UWVBFX1NUUklORyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKworICAgICAvKioKKyAgICAgICogV2ViS2l0SWNvbkRhdGFi
YXNlOjppY29uLWxvYWRlZDoKKyAgICAgICogQGRhdGFiYXNlOiB0aGUgb2JqZWN0IG9uIHdoaWNo
IHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAgKiBAZnJhbWVfdXJpOiB0aGUgVVJJIG9mIHRo
ZSBmcmFtZSBjb250YWluaW5nIHRoZSBpY29uCisgICAgICAqCisgICAgICAqIFRoaXMgc2lnbmFs
IGlzIGVtaXR0ZWQgd2hlbiBhIGZhdmljb24gaXMgYXZhaWxhYmxlIGZvciB0aGUKKyAgICAgICog
bWFpbiBmcmFtZSBvZiBhIHBhZ2UuIFNlZSAjV2ViS2l0V2ViVmlldzo6aWNvbi1sb2FkZWQgaWYg
eW91CisgICAgICAqIG9ubHkgbmVlZCB0aGUgZmF2aWNvbiBvZiBhIHBhcnRpY3VsYXIgI1dlYktp
dFdlYlZpZXcuCisgICAgICAqCisgICAgICAqIE5vdGUgdGhhdCB0aGlzIHNpZ25hbCBjYXJyaWVz
IHRoZSBVUkkgb2YgdGhlIGZyYW1lIHRoYXQgbG9hZHMKKyAgICAgICogdGhlIGljb24sIHdoaWxl
ICNXZWJLaXRXZWJWaWV3OjppY29uLWxvYWRlZCBwcm92aWRlcyB0aGUgVVJJCisgICAgICAqIG9m
IHRoZSBmYXZpY29uLgorICAgICAgKgorICAgICAgKiBTaW5jZTogMS44CisgICAgICAqLworICAg
ICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zaWduYWxzW0lDT05fTE9BREVEXSA9IGdfc2lnbmFsX25l
dygiaWNvbi1sb2FkZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhrbGFzcyksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChH
U2lnbmFsRmxhZ3MpR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX1NUUklORywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05P
TkUsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcpOwogCiAgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2
YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0SWNvbkRhdGFiYXNlUHJpdmF0ZSkpOwogfQpAQCAtMTc4
LDEwICszMDUsMzYgQEAgc3RhdGljIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2VfY2xhc3NfaW5p
dChXZWJLaXRJY29uRGF0YWJhc2VDbGFzcyoga2xhc3MpCiBzdGF0aWMgdm9pZCB3ZWJraXRfaWNv
bl9kYXRhYmFzZV9pbml0KFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpCiB7CiAgICAgZGF0
YWJhc2UtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoZGF0YWJhc2UsIFdFQktJ
VF9UWVBFX0lDT05fREFUQUJBU0UsIFdlYktpdEljb25EYXRhYmFzZVByaXZhdGUpOwotICAgIC8v
ICdwbGFjZW1lbnQgbmV3IHN5bnRheCcsIHNlZSB3ZWJraXR3ZWJ2aWV3LmNwcAogICAgIG5ldyAo
ZGF0YWJhc2UtPnByaXYpIFdlYktpdEljb25EYXRhYmFzZVByaXZhdGUoKTsKIH0KIAorc3RhdGlj
IHZvaWQgd2Via2l0SWNvbkRhdGFiYXNlTm90aWZ5QW5kVXBkYXRlRXhwaXJhdGlvbihXZWJLaXRJ
Y29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBjaGFyKiBwYWdlVVJJKQoreworICAgIGdfc2ln
bmFsX2VtaXQoZGF0YWJhc2UsIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NpZ25hbHNbSUNPTl9MT0FE
RURdLCAwLCBwYWdlVVJJKTsKKworICAgIGlmIChkYXRhYmFzZS0+cHJpdi0+ZXhwaXJhdGlvblRp
bWVzRGF0YWJhc2UpIHsKKyAgICAgICAgY29uc3QgY2hhciogdXBkYXRlUXVlcnlGb3JtYXQgPSAi
VVBEQVRFIGV4cGlyYXRpb24gU0VUIGV4cGlyZXMgPSAnJWQnIFdIRVJFIHVybCA9ICclcyciOwor
ICAgICAgICBHT3duUHRyPGNoYXI+IHVwZGF0ZVF1ZXJ5KGdfc3RyZHVwX3ByaW50Zih1cGRhdGVR
dWVyeUZvcm1hdCwgKGludCljdXJyZW50VGltZSgpLCBwYWdlVVJJKSk7CisKKyAgICAgICAgaW50
IHJldHZhbCA9IHNxbGl0ZTNfZXhlYyhkYXRhYmFzZS0+cHJpdi0+ZXhwaXJhdGlvblRpbWVzRGF0
YWJhc2UsIHVwZGF0ZVF1ZXJ5LmdldCgpLCAwLCAwLCAwKTsKKyAgICAgICAgaWYgKHJldHZhbCA9
PSBTUUxJVEVfT0sgJiYgIXNxbGl0ZTNfY2hhbmdlcyhkYXRhYmFzZS0+cHJpdi0+ZXhwaXJhdGlv
blRpbWVzRGF0YWJhc2UpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBpbnNlcnRRdWVyeUZv
cm1hdCA9ICJJTlNFUlQgSU5UTyBleHBpcmF0aW9uICh1cmwsIGV4cGlyZXMpIFZBTFVFUyAoJyVz
JywnJWQnKSI7CisgICAgICAgICAgICBHT3duUHRyPGNoYXI+IGluc2VydFF1ZXJ5KGdfc3RyZHVw
X3ByaW50ZihpbnNlcnRRdWVyeUZvcm1hdCwgcGFnZVVSSSwgKGludCljdXJyZW50VGltZSgpKSk7
CisKKyAgICAgICAgICAgIHNxbGl0ZTNfZXhlYyhkYXRhYmFzZS0+cHJpdi0+ZXhwaXJhdGlvblRp
bWVzRGF0YWJhc2UsIGluc2VydFF1ZXJ5LmdldCgpLCAwLCAwLCAwKTsKKyAgICAgICAgfQorICAg
IH0KK30KKworLy8gQ2FsbGVkIGZyb20gRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVj
ZWl2ZUljb24oKQordm9pZCB3ZWJraXRJY29uRGF0YWJhc2VEaXNwYXRjaERpZFJlY2VpdmVJY29u
KFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGNoYXIqIGZyYW1lVVJJKQorewor
ICAgIHdlYmtpdEljb25EYXRhYmFzZU5vdGlmeUFuZFVwZGF0ZUV4cGlyYXRpb24oZGF0YWJhc2Us
IGZyYW1lVVJJKTsKKworICAgIC8vIFJldGFpbiB0aGUgbmV3IGljb24uCisgICAgaWNvbkRhdGFi
YXNlKCkucmV0YWluSWNvbkZvclBhZ2VVUkwoU3RyaW5nOjpmcm9tVVRGOChmcmFtZVVSSSkpOwor
fQorCiAvKioKICAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9wYXRoOgogICogQGRhdGFiYXNl
OiBhICNXZWJLaXRJY29uRGF0YWJhc2UKQEAgLTE5OSwxMSArMzUyLDQ3IEBAIGNvbnN0IGdjaGFy
KiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0aChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFi
YXNlKQogICAgIHJldHVybiBkYXRhYmFzZS0+cHJpdi0+cGF0aC5nZXQoKTsKIH0KIAotc3RhdGlj
IHZvaWQgY2xvc2VJY29uRGF0YWJhc2VPbkV4aXQoKQorc3RhdGljIGludAorc2VsZWN0UXVlcnlD
YWxsYmFjayh2b2lkICp1c2VyRGF0YSwgaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjaGFyICoqY29s
dW1uTmFtZXMpCiB7Ci0gICAgaWYgKFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLmlzRW5hYmxlZCgp
KSB7Ci0gICAgICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLnNldEVuYWJsZWQoZmFsc2UpOwot
ICAgICAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5jbG9zZSgpOworICAgIFN0cmluZyBwYWdl
VVJMID0gU3RyaW5nOjpmcm9tVVRGOChhcmd2WzBdKTsKKyAgICAvLyBZZXMgSSBrbm93IHRoaXMg
c2VlbXMgc3R1cGlkIGJ1dCB3ZSBuZWVkIHRoaXMgdG8gZ2V0IGljb25zCisgICAgLy8gYWN0dWFs
bHkgcHVyZ2VkIGR1ZSB0byBob3cgdGhlIEljb25EYXRhYmFzZSB3b3Jrcy4gSXQgd29uJ3QKKyAg
ICAvLyBkZWxldGUgYW55IGljb24gdGhhdCBpcyBub3QgaW4gYSBsaXN0IHdoaWNoIGNvbnRhaW5z
IGFtb25nCisgICAgLy8gb3RoZXJzIHRoZSBhbHJlYWR5IHJldGFpbmVkIGljb25zLgorICAgIGlj
b25EYXRhYmFzZSgpLnJldGFpbkljb25Gb3JQYWdlVVJMKHBhZ2VVUkwpOworICAgIGljb25EYXRh
YmFzZSgpLnJlbGVhc2VJY29uRm9yUGFnZVVSTChwYWdlVVJMKTsKKworICAgIHJldHVybiAwOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRJY29uRGF0YWJhc2VQcnVuZUV4cGlyZWRJY29ucyhXZWJL
aXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAgIGludCBsYXN0VmFsaWRUaW1lID0gKGlu
dCkgY3VycmVudFRpbWUoKSAtIElDT05fRVhQSVJBVElPTl9USU1FOworICAgIEdPd25QdHI8Y2hh
cj4gc2VsZWN0RGVsZXRlUXVlcnkoZ19zdHJkdXBfcHJpbnRmKCJTRUxFQ1QgdXJsIEZST00gZXhw
aXJhdGlvbiBXSEVSRSBleHBpcmVzIDwgJWQ7IlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiREVMRVRFIEZST00gZXhwaXJhdGlvbiBXSEVSRSBl
eHBpcmVzIDwgJWQ7IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsYXN0VmFsaWRUaW1lLCBsYXN0VmFsaWRUaW1lKSk7CisgICAgc3FsaXRlM19l
eGVjKGRhdGFiYXNlLT5wcml2LT5leHBpcmF0aW9uVGltZXNEYXRhYmFzZSwgc2VsZWN0RGVsZXRl
UXVlcnkuZ2V0KCksIHNlbGVjdFF1ZXJ5Q2FsbGJhY2ssIDAsIDApOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRJY29uRGF0YWJhc2VDbG9zZShXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKQor
eworICAgIGlmIChpY29uRGF0YWJhc2UoKS5pc0VuYWJsZWQoKSkgeworICAgICAgICBzcWxpdGUz
X2Nsb3NlKGRhdGFiYXNlLT5wcml2LT5leHBpcmF0aW9uVGltZXNEYXRhYmFzZSk7CisgICAgICAg
IGljb25EYXRhYmFzZSgpLnNldEVuYWJsZWQoZmFsc2UpOworICAgICAgICBpY29uRGF0YWJhc2Uo
KS5jbG9zZSgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgY3JlYXRlRXhwaXJhdGlvblRpbWVz
RGF0YWJhc2VUYWJsZUlmTm90RXhpc3RzKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpCit7
CisgICAgY29uc3QgY2hhciogY3JlYXRlUXVlcnkgPSAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElT
VFMgZXhwaXJhdGlvbiAiIFwKKyAgICAgICAgIih1cmwgVEVYVCBQUklNQVJZIEtFWSwgZXhwaXJl
cyBJTlRFR0VSKTsiOworCisgICAgaW50IHJldHZhbCA9IHNxbGl0ZTNfZXhlYyhkYXRhYmFzZS0+
cHJpdi0+ZXhwaXJhdGlvblRpbWVzRGF0YWJhc2UsIGNyZWF0ZVF1ZXJ5LCAwLCAwLCAwKTsKKyAg
ICBpZiAocmV0dmFsICE9IFNRTElURV9PSykgeworICAgICAgICBzcWxpdGUzX2Nsb3NlKGRhdGFi
YXNlLT5wcml2LT5leHBpcmF0aW9uVGltZXNEYXRhYmFzZSk7CisgICAgICAgIGRhdGFiYXNlLT5w
cml2LT5leHBpcmF0aW9uVGltZXNEYXRhYmFzZSA9IDA7CiAgICAgfQogfQogCkBAIC0yMTIsMzUg
KzQwMSw0MSBAQCBzdGF0aWMgdm9pZCBjbG9zZUljb25EYXRhYmFzZU9uRXhpdCgpCiAgKiBAZGF0
YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQogICogQHBhdGg6IGFuIGFic29sdXRlIHBhdGgg
dG8gdGhlIGljb24gZGF0YWJhc2UgZm9sZGVyCiAgKgotICogU3BlY2lmaWVzIHRoZSBhYnNvbHV0
ZSBwYXRoIHRvIHRoZSBkYXRhYmFzZSBmb2xkZXIgb24gZGlzay4KKyAqIFNwZWNpZmllcyB0aGUg
YWJzb2x1dGUgcGF0aCB0byB0aGUgZGF0YWJhc2UgZm9sZGVyIG9uIGRpc2suIFRoZQorICogaWNv
biBkYXRhYmFzZSB3aWxsIG9ubHkgYmUgZW5hYmxlZCBhZnRlciBhIGNhbGwgdG8gdGhpcyBtZXRo
b2QuCiAgKgogICogUGFzc2luZyAlTlVMTCBvciAiIiBkaXNhYmxlcyB0aGUgaWNvbiBkYXRhYmFz
ZS4KICAqCi0gKiBTaW5jZTogMS4zLjEzCisgKiBTaW5jZTogMS44CiAgKiovCiB2b2lkIHdlYmtp
dF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNv
bnN0IGdjaGFyKiBwYXRoKQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0lDT05f
REFUQUJBU0UoZGF0YWJhc2UpKTsKIAogICAgIGlmIChkYXRhYmFzZS0+cHJpdi0+cGF0aC5nZXQo
KSkKLSAgICAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuY2xvc2UoKTsKKyAgICAgICAgd2Vi
a2l0SWNvbkRhdGFiYXNlQ2xvc2UoZGF0YWJhc2UpOwogCisgICAgZGF0YWJhc2UtPnByaXYtPmlt
cG9ydEZpbmlzaGVkID0gZmFsc2U7CiAgICAgaWYgKCEocGF0aCAmJiBwYXRoWzBdKSkgewogICAg
ICAgICBkYXRhYmFzZS0+cHJpdi0+cGF0aC5zZXQoMCk7Ci0gICAgICAgIFdlYkNvcmU6Omljb25E
YXRhYmFzZSgpLnNldEVuYWJsZWQoZmFsc2UpOworICAgICAgICBpY29uRGF0YWJhc2UoKS5zZXRF
bmFibGVkKGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGRhdGFiYXNlLT5w
cml2LT5wYXRoLnNldChnX3N0cmR1cChwYXRoKSk7CisgICAgaWNvbkRhdGFiYXNlKCkuc2V0Q2xp
ZW50KCZkYXRhYmFzZS0+cHJpdi0+aWNvbkRhdGFiYXNlQ2xpZW50KTsKKyAgICBJY29uRGF0YWJh
c2U6OmRlbGF5RGF0YWJhc2VDbGVhbnVwKCk7CisgICAgaWNvbkRhdGFiYXNlKCkuc2V0RW5hYmxl
ZCh0cnVlKTsKKyAgICBpZiAoIWljb25EYXRhYmFzZSgpLm9wZW4oZmlsZW5hbWVUb1N0cmluZyhw
YXRoKSwgSWNvbkRhdGFiYXNlOjpkZWZhdWx0RGF0YWJhc2VGaWxlbmFtZSgpKSkgeworICAgICAg
ICBJY29uRGF0YWJhc2U6OmFsbG93RGF0YWJhc2VDbGVhbnVwKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAKLSAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5zZXRFbmFibGVkKHRydWUpOwot
ICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLm9wZW4oV2ViQ29yZTo6ZmlsZW5hbWVUb1N0cmlu
ZyhkYXRhYmFzZS0+cHJpdi0+cGF0aC5nZXQoKSksIFdlYkNvcmU6Okljb25EYXRhYmFzZTo6ZGVm
YXVsdERhdGFiYXNlRmlsZW5hbWUoKSk7CisgICAgZGF0YWJhc2UtPnByaXYtPnBhdGguc2V0KGdf
c3RyZHVwKHBhdGgpKTsKIAotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7Ci0g
ICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBhdGV4aXQoY2xvc2VJY29uRGF0YWJhc2VP
bkV4aXQpOwotICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQorICAgIEdPd25QdHI8
Y2hhcj4gZXhwaXJhdGlvblRpbWVzRGF0YWJhc2VQYXRoKGdfYnVpbGRfZmlsZW5hbWUocGF0aCwg
IkZhdmljb25FeHBpcmF0aW9uLmRiIiwgTlVMTCkpOworICAgIGludCByZXR2YWwgPSBzcWxpdGUz
X29wZW4oZXhwaXJhdGlvblRpbWVzRGF0YWJhc2VQYXRoLmdldCgpLCAmZGF0YWJhc2UtPnByaXYt
PmV4cGlyYXRpb25UaW1lc0RhdGFiYXNlKTsKKyAgICBpZiAocmV0dmFsID09IFNRTElURV9PSykK
KyAgICAgICAgY3JlYXRlRXhwaXJhdGlvblRpbWVzRGF0YWJhc2VUYWJsZUlmTm90RXhpc3RzKGRh
dGFiYXNlKTsKIH0KIAogLyoqCkBAIC0yNTMsNTEgKzQ0OCwyNjAgQEAgdm9pZCB3ZWJraXRfaWNv
bl9kYXRhYmFzZV9zZXRfcGF0aChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBn
Y2hhciogcGEKICAqCiAgKiBSZXR1cm5zOiBhIG5ld2x5IGFsbG9jYXRlZCBVUkkgZm9yIHRoZSBm
YXZpY29uLCBvciAlTlVMTAogICoKLSAqIFNpbmNlOiAxLjMuMTMKKyAqIFNpbmNlOiAxLjgKICAq
Ki8KIGdjaGFyKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmkoV2ViS2l0SWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkkpCiB7CiAgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpLCAwKTsKICAgICBn
X3JldHVybl92YWxfaWZfZmFpbChwYWdlVVJJLCAwKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogCi0gICAgU3RyaW5nIHBhZ2VVUkwgPSBTdHJpbmc6OmZyb21VVEY4KHBhZ2VVUkkpOwot
ICAgIHJldHVybiBnX3N0cmR1cChXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0lj
b25VUkxGb3JQYWdlVVJMKHBhZ2VVUkwpLnV0ZjgoKS5kYXRhKCkpOworICAgIFN0cmluZyBpY29u
VVJJID0gaWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChTdHJpbmc6
OmZyb21VVEY4KHBhZ2VVUkkpKTsKKyAgICBpZiAoaWNvblVSSS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgcmV0dXJuIGdfc3RyZHVwKGljb25VUkkudXRmOCgpLmRhdGEoKSk7
Cit9CisKK3N0YXRpYyBHZGtQaXhidWYqIGdldEljb25QaXhidWZTeW5jaHJvbm91c2x5KFdlYktp
dEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCwgZ3VpbnQgd2lk
dGgsIGd1aW50IGhlaWdodCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIC8v
IFRoZSBleGFjdCBzaXplIHdlIHBhc3MgaXMgaXJyZWxldmFudCB0byB0aGUgaWNvbkRhdGFiYXNl
IGNvZGUuCisgICAgLy8gV2UgbXVzdCBwYXNzIHNvbWV0aGluZyBncmVhdGVyIHRoYW4gMHgwIHRv
IGdldCBhIHBpeGJ1Zi4KKyAgICBJbWFnZSogaWNvbiA9IGljb25EYXRhYmFzZSgpLnN5bmNocm9u
b3VzSWNvbkZvclBhZ2VVUkwocGFnZVVSTCwgSW50U2l6ZSgxNiwgMTYpKTsKKyAgICBpZiAoIWlj
b24pCisgICAgICAgIHJldHVybiAwOworCisgICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZiA9
IGFkb3B0R1JlZihpY29uLT5nZXRHZGtQaXhidWYoKSk7CisgICAgaWYgKCFwaXhidWYpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgLy8gQSBzaXplIG9mICgwLCAwKSBtZWFucyB0aGUgbWF4aW11
bSBhdmFpbGFibGUgc2l6ZS4KKyAgICBpZiAod2lkdGggJiYgaGVpZ2h0ICYmIChpY29uLT53aWR0
aCgpICE9IChpbnQpIHdpZHRoIHx8IGljb24tPmhlaWdodCgpICE9IChpbnQpIGhlaWdodCkpCisg
ICAgICAgIHBpeGJ1ZiA9IGdka19waXhidWZfc2NhbGVfc2ltcGxlKHBpeGJ1Zi5nZXQoKSwgd2lk
dGgsIGhlaWdodCwgR0RLX0lOVEVSUF9CSUxJTkVBUik7CisgICAgcmV0dXJuIHBpeGJ1Zi5sZWFr
UmVmKCk7CiB9CiAKIC8qKgotICogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVm
OgorICogd2Via2l0X2ljb25fZGF0YWJhc2VfdHJ5X2dldF9pY29uX3BpeGJ1ZjoKICAqIEBkYXRh
YmFzZTogYSAjV2ViS2l0SWNvbkRhdGFiYXNlCiAgKiBAcGFnZV91cmk6IFVSSSBvZiB0aGUgcGFn
ZSBjb250YWluaW5nIHRoZSBpY29uCisgKiBAd2lkdGg6IHRoZSBkZXNpcmVkIHdpZHRoIGZvciB0
aGUgaWNvbgorICogQGhlaWdodDogdGhlIGRlc2lyZWQgaGVpZ2h0IGZvciB0aGUgaWNvbgogICoK
ICAqIE9idGFpbnMgYSAjR2RrUGl4YnVmIG9mIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4gcGFn
ZSBVUkksIG9yCi0gKiBhIGRlZmF1bHQgaWNvbiBpZiB0aGVyZSBpcyBubyBpY29uIGZvciB0aGUg
Z2l2ZW4gcGFnZS4gVXNlCi0gKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmkoKSBp
ZiB5b3UgbmVlZCB0byBkaXN0aW5ndWlzaCB0aGVzZSBjYXNlcy4KLSAqIFVzdWFsbHkgeW91IHdh
bnQgdG8gY29ubmVjdCB0byBXZWJLaXRJY29uRGF0YWJhc2U6Omljb24tbG9hZGVkIGFuZCBjYWxs
IHRoaXMKLSAqIG1ldGhvZCBpbiB0aGUgY2FsbGJhY2suCisgKiAlTlVMTCBpZiB0aGVyZSBpcyBu
byBpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZSBvciBpdCBoYXNuJ3QgYmVlbgorICogbG9hZGVkIGZy
b20gZGlzayB5ZXQuIFVzZSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmkoKSBpZgor
ICogeW91IG5lZWQgdG8gZGlzdGluZ3Vpc2ggdGhlc2UgY2FzZXMuICBUbyBtYWtlIHN1cmUgdGhp
cyBtZXRob2Qgd2lsbAorICogcmV0dXJuIGEgdmFsaWQgaWNvbiB3aGVuIHRoZSBnaXZlbiBVUkkg
aGFzIG9uZSwgeW91IHNob3VsZCBjb25uZWN0CisgKiB0byBXZWJLaXRJY29uRGF0YWJhc2U6Omlj
b24tbG9hZGVkIGFuZCBjYWxsIHRoaXMgaW4gdGhlIGNhbGxiYWNrLgogICoKLSAqIFRoZSBwaXhi
dWYgd2lsbCBoYXZlIHRoZSBsYXJnZXN0IHNpemUgcHJvdmlkZWQgYnkgdGhlIHNlcnZlciBhbmQg
c2hvdWxkCi0gKiBiZSByZXNpemVkIGJlZm9yZSBpdCBpcyBkaXNwbGF5ZWQuCi0gKiBTZWUgYWxz
byB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fcGl4YnVmKCkuCisgKiBJZiAoQHdpZHRoLCBAaGVp
Z2h0KSBpcyAoMCwgMCkgdGhlbiB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiB0aGUKKyAqIG1heGlt
dW0gYXZhaWxhYmxlIHNpemUgZm9yIHRoZSBpY29uLiBOb3RlIHRoYXQgaWYgeW91IHNwZWNpZnkg
YQorICogZGlmZmVyZW50IHNpemUgdGhlIGljb24gd2lsbCBiZSBzY2FsZWQgb24gZXZlcnkgc2lu
Z2xlIGNhbGwgdG8gdGhpcworICogbWV0aG9kLgogICoKICAqIFJldHVybnM6ICh0cmFuc2ZlciBm
dWxsKTogYSBuZXcgcmVmZXJlbmNlIHRvIGEgI0dka1BpeGJ1Ziwgb3IgJU5VTEwKKyAqIGlmIHRo
ZSBnaXZlbiBVUkkgZG9lc24ndCBoYXZlIGFuIGljb24gb3IgaXQgaGFzbid0IGJlZW4gbG9hZGVk
IHlldC4KICAqCi0gKiBTaW5jZTogMS4zLjEzCisgKiBTaW5jZTogMS44CiAgKiovCi1HZGtQaXhi
dWYqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZihXZWJLaXRJY29uRGF0YWJh
c2UqIGRhdGFiYXNlLCBjb25zdCBnY2hhciogcGFnZVVSSSkKK0dka1BpeGJ1Ziogd2Via2l0X2lj
b25fZGF0YWJhc2VfdHJ5X2dldF9pY29uX3BpeGJ1ZihXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFi
YXNlLCBjb25zdCBnY2hhciogcGFnZVVSSSwgZ3VpbnQgd2lkdGgsIGd1aW50IGhlaWdodCkKIHsK
ICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShkYXRhYmFz
ZSksIDApOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHBhZ2VVUkksIDApOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKCh3aWR0aCAmJiBoZWlnaHQpIHx8ICghd2lkdGggJiYgIWhlaWdodCks
IDApOworCisgICAgcmV0dXJuIGdldEljb25QaXhidWZTeW5jaHJvbm91c2x5KGRhdGFiYXNlLCBT
dHJpbmc6OmZyb21VVEY4KHBhZ2VVUkkpLCB3aWR0aCwgaGVpZ2h0KTsKK30KKworc3RhdGljIFBl
bmRpbmdJY29uUmVxdWVzdFZlY3Rvciogd2Via2l0SWNvbkRhdGFiYXNlR2V0T3JDcmVhdGVSZXF1
ZXN0cyhXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwp
Cit7CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBpY29ucyA9IGRhdGFiYXNlLT5wcml2
LT5wZW5kaW5nSWNvblJlcXVlc3RzLmdldChwYWdlVVJMKTsKKyAgICBpZiAoIWljb25zKSB7Cisg
ICAgICAgIGljb25zID0gbmV3IFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvcjsKKyAgICAgICAgZGF0
YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMuc2V0KHBhZ2VVUkwsIGljb25zKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gaWNvbnM7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEljb25EYXRh
YmFzZURlbGV0ZVJlcXVlc3RzKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIFBlbmRpbmdJ
Y29uUmVxdWVzdFZlY3RvciogcmVxdWVzdHMsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCkKK3sKKyAg
ICBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5yZW1vdmUocGFnZVVSTCk7Cisg
ICAgZGVsZXRlIHJlcXVlc3RzOworfQorCitzdGF0aWMgdm9pZCBnZXRJY29uUGl4YnVmQ2FuY2Vs
bGVkKHZvaWQqIHVzZXJEYXRhKQoreworICAgIFBlbmRpbmdJY29uUmVxdWVzdCogcmVxdWVzdCA9
IHN0YXRpY19jYXN0PFBlbmRpbmdJY29uUmVxdWVzdCo+KHVzZXJEYXRhKTsKKyAgICByZXF1ZXN0
LT5hc3luY1Jlc3VsdENhbmNlbCgpOworCisgICAgY29uc3QgU3RyaW5nJiBwYWdlVVJMID0gcmVx
dWVzdC0+cGFnZVVSSSgpOworICAgIFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJr
aXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKKyAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGlj
b25zID0gZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMuZ2V0KHBhZ2VVUkwpOwor
ICAgIGlmICghaWNvbnMpCisgICAgICAgIHJldHVybjsKKworICAgIHNpemVfdCBpdGVtSW5kZXgg
PSBpY29ucy0+ZmluZChyZXF1ZXN0KTsKKyAgICBpZiAoaXRlbUluZGV4ICE9IG5vdEZvdW5kKQor
ICAgICAgICBpY29ucy0+cmVtb3ZlKGl0ZW1JbmRleCk7CisgICAgaWYgKGljb25zLT5pc0VtcHR5
KCkpCisgICAgICAgIHdlYmtpdEljb25EYXRhYmFzZURlbGV0ZVJlcXVlc3RzKGRhdGFiYXNlLCBp
Y29ucywgcGFnZVVSTCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEljb25EYXRhYmFzZUdldElj
b25QaXhidWZDYW5jZWxsZWQoR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgUGVuZGluZ0ljb25S
ZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIC8vIEhhbmRsZSBjYW5jZWxsZWQgaW4gYSBpbiBpZGxl
IHNpbmNlIGl0IG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQuCisgICAgY2FsbE9uTWFp
blRocmVhZChnZXRJY29uUGl4YnVmQ2FuY2VsbGVkLCByZXF1ZXN0KTsKK30KKworLyoqCisgKiB3
ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWY6CisgKiBAZGF0YWJhc2U6IGEgI1dl
YktpdEljb25EYXRhYmFzZQorICogQHBhZ2VfdXJpOiBVUkkgb2YgdGhlIHBhZ2UgY29udGFpbmlu
ZyB0aGUgaWNvbgorICogQHdpZHRoOiB0aGUgZGVzaXJlZCB3aWR0aCBmb3IgdGhlIGljb24KKyAq
IEBoZWlnaHQ6IHRoZSBkZXNpcmVkIGhlaWdodCBmb3IgdGhlIGljb24KKyAqIEBjYW5jZWxsYWJs
ZTogQSAjR0NhbmNlbGxhYmxlIG9yICVOVUxMLgorICogQGNhbGxiYWNrOiAoYWxsb3ctbm9uZSk6
IEEgI0dBc3luY1JlYWR5Q2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSByZXF1ZXN0IGlzCisgKiAg
ICAgICAgICAgIHNhdGlzZmllZCBvciAlTlVMTCBpZiB5b3UgZG9uJ3QgY2FyZSBhYm91dCB0aGUg
cmVzdWx0LgorICogQHVzZXJfZGF0YTogVGhlIGRhdGEgdG8gcGFzcyB0byBAY2FsbGJhY2suCisg
KgorICogQXN5bmNocm9ub3VzbHkgb2J0YWlucyBhICNHZGtQaXhidWYgb2YgdGhlIGZhdmljb24g
Zm9yIHRoZSBnaXZlbgorICogcGFnZSBVUkkuIFRoZSBhZHZhbnRhZ2Ugb2YgdGhpcyBtZXRob2Qg
b3ZlcgorICogd2Via2l0X2ljb25fZGF0YWJhc2VfdHJ5X2dldF9pY29uX3BpeGJ1ZigpIGlzIHRo
YXQgaXQgYWx3YXlzIHJldHVybiB0aGUKKyAqIGNhY2hlZCBpY29uIGlmIGl0J3MgaW4gdGhlIGRh
dGFiYXNlIGFzeW5jaHJvbm91c2x5IHdhaXRpbmcgZm9yIHRoZQorICogaWNvbiB0byBiZSByZWFk
IGZyb20gdGhlIGRhdGFiYXNlLgorICoKKyAqIFRoaXMgaXMgYW4gYXN5bmNocm9ub3VzIG1ldGhv
ZC4gV2hlbiB0aGUgb3BlcmF0aW9uIGlzIGZpbmlzaGVkLCBjYWxsYmFjayB3aWxsCisgKiBiZSBp
bnZva2VkLiBZb3UgY2FuIHRoZW4gY2FsbCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9w
aXhidWZfZmluaXNoKCkKKyAqIHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisg
KiBTZWUgYWxzbyB3ZWJraXRfaWNvbl9kYXRhYmFzZV90cnlfZ2V0X2ljb25fcGl4YnVmKCkuCisg
KgorICogSWYgKEB3aWR0aCwgQGhlaWdodCkgaXMgKDAsIDApIHRoZW4gdGhpcyBtZXRob2Qgd2ls
bCByZXR1cm4gdGhlCisgKiBtYXhpbXVtIGF2YWlsYWJsZSBzaXplIGZvciB0aGUgaWNvbi4gTm90
ZSB0aGF0IGlmIHlvdSBzcGVjaWZ5IGEKKyAqIGRpZmZlcmVudCBzaXplIHRoZSBpY29uIHdpbGwg
YmUgc2NhbGVkIG9uIGV2ZXJ5IHNpbmdsZSBjYWxsIHRvIHRoaXMKKyAqIG1ldGhvZC4KKyAqCisg
KiBTaW5jZTogMS44CisgKiovCit2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3Bp
eGJ1ZihXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBnY2hhciogcGFnZVVSSSwg
Z3VpbnQgd2lkdGgsIGd1aW50IGhlaWdodCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0Fz
eW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShkYXRhYmFzZSkpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwocGFnZVVSSSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCgod2lkdGggJiYg
aGVpZ2h0KSB8fCAoIXdpZHRoICYmICFoZWlnaHQpKTsKKworICAgIEdSZWZQdHI8R1NpbXBsZUFz
eW5jUmVzdWx0PiByZXN1bHQgPSBhZG9wdEdSZWYoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyhH
X09CSkVDVChkYXRhYmFzZSksIGNhbGxiYWNrLCB1c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4od2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2lj
b25fcGl4YnVmKSkpOworCisgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbiBpY29uIGZvciB0aGUg
Z2l2ZW4gVVJJIHJldHVybiBBU0FQLgorICAgIGlmIChkYXRhYmFzZS0+cHJpdi0+aW1wb3J0Rmlu
aXNoZWQgJiYgaWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChTdHJp
bmc6OmZyb21VVEY4KHBhZ2VVUkkpKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZ19zaW1wbGVfYXN5
bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3BvaW50ZXIocmVzdWx0LmdldCgpLCAwLCAwKTsKKyAgICAg
ICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUocmVzdWx0LmdldCgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIFN0cmluZyBwYWdlVVJMID0gU3RyaW5nOjpm
cm9tVVRGOChwYWdlVVJJKTsKLSAgICAvLyBUaGUgZXhhY3Qgc2l6ZSB3ZSBwYXNzIGlzIGlycmVs
ZXZhbnQgdG8gdGhlIFdlYkNvcmU6Omljb25EYXRhYmFzZSBjb2RlLgotICAgIC8vIFdlIG11c3Qg
cGFzcyBzb21ldGhpbmcgZ3JlYXRlciB0aGFuIDAsIDAgdG8gZ2V0IGEgcGl4YnVmLgotICAgIFdl
YkNvcmU6OkltYWdlKiBpY29uID0gV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNJ
Y29uRm9yUGFnZVVSTChwYWdlVVJMLCBXZWJDb3JlOjpJbnRTaXplKDE2LCAxNikpOwotICAgIGlm
ICghaWNvbikKKyAgICBQZW5kaW5nSWNvblJlcXVlc3QqIHJlcXVlc3QgPSBuZXcgUGVuZGluZ0lj
b25SZXF1ZXN0KHBhZ2VVUkwsIHJlc3VsdC5nZXQoKSwgY2FuY2VsbGFibGUsIEludFNpemUod2lk
dGgsIGhlaWdodCkpOworCisgICAgLy8gUmVnaXN0ZXIgaWNvbiByZXF1ZXN0IGJlZm9yZSBhc2tp
bmcgZm9yIHRoZSBpY29uIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucy4KKyAgICBQZW5kaW5nSWNv
blJlcXVlc3RWZWN0b3IqIGljb25zID0gd2Via2l0SWNvbkRhdGFiYXNlR2V0T3JDcmVhdGVSZXF1
ZXN0cyhkYXRhYmFzZSwgcGFnZVVSTCk7CisgICAgQVNTRVJUKGljb25zKTsKKyAgICBpY29ucy0+
YXBwZW5kKGFkb3B0UHRyKHJlcXVlc3QpKTsKKworICAgIEdka1BpeGJ1ZiogcGl4YnVmID0gZ2V0
SWNvblBpeGJ1ZlN5bmNocm9ub3VzbHkoZGF0YWJhc2UsIHBhZ2VVUkwsIDE2LCAxNik7CisgICAg
aWYgKCFwaXhidWYgJiYgIWRhdGFiYXNlLT5wcml2LT5pbXBvcnRGaW5pc2hlZCkgeworICAgICAg
ICAvLyBJbml0aWFsIGltcG9ydCBpcyBvbmdvaW5nLCB0aGUgaWNvbiBkYXRhIHdpbGwgYmUgYXZh
aWxhYmxlIGxhdGVyLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVxdWVzdC0+YXN5
bmNSZXN1bHRDb21wbGV0ZUluSWRsZShwaXhidWYpOworCisgICAgQVNTRVJUKGljb25zLT5sYXN0
KCkuZ2V0KCkgPT0gcmVxdWVzdCk7CisgICAgaWNvbnMtPnJlbW92ZUxhc3QoKTsKKyAgICBpZiAo
aWNvbnMtPmlzRW1wdHkoKSkKKyAgICAgICAgd2Via2l0SWNvbkRhdGFiYXNlRGVsZXRlUmVxdWVz
dHMoZGF0YWJhc2UsIGljb25zLCBwYWdlVVJMKTsKK30KKworLyoqCisgKiB3ZWJraXRfaWNvbl9k
YXRhYmFzZV9nZXRfaWNvbl9waXhidWZfZmluaXNoOgorICogQGRhdGFiYXNlOiBhICNXZWJLaXRJ
Y29uRGF0YWJhc2UKKyAqIEByZXN1bHQ6IEEgI0dBc3luY1Jlc3VsdCBvYnRhaW5lZCBmcm9tIHRo
ZSAjR0FzeW5jUmVhZHlDYWxsYmFjayBwYXNzZWQgdG8gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0
X2ljb25fcGl4YnVmKCkKKyAqIEBlcnJvcjogUmV0dXJuIGxvY2F0aW9uIGZvciBlcnJvciBvciAl
TlVMTC4KKyAqCisgKiBGaW5pc2hlcyBhbiBvcGVyYXRpb24gc3RhcnRlZCB3aXRoIHdlYmtpdF9p
Y29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZigpLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBmdWxsKTogYSBuZXcgcmVmZXJlbmNlIHRvIGEgI0dka1BpeGJ1Ziwgb3IgJU5VTEwuCisgKgor
ICogU2luY2U6IDEuOAorICovCitHZGtQaXhidWYqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9p
Y29uX3BpeGJ1Zl9maW5pc2goV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgR0FzeW5jUmVz
dWx0KiByZXN1bHQsIEdFcnJvcioqIGVycm9yKQoreworICAgIEdTaW1wbGVBc3luY1Jlc3VsdCog
c2ltcGxlUmVzdWx0ID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUKHJlc3VsdCk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9zb3VyY2VfdGFnKHNpbXBs
ZVJlc3VsdCkgPT0gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmLCAwKTsKKwor
ICAgIGlmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfcHJvcGFnYXRlX2Vycm9yKHNpbXBsZVJlc3Vs
dCwgZXJyb3IpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBHZGtQaXhidWYqIHBpeGJ1ZiA9IGlj
b24tPmdldEdka1BpeGJ1ZigpOwotICAgIGlmICghcGl4YnVmKQorCisgICAgR0NhbmNlbGxhYmxl
KiBjYW5jZWxsYWJsZSA9IHN0YXRpY19jYXN0PEdDYW5jZWxsYWJsZSo+KGdfb2JqZWN0X2dldF9k
YXRhKEdfT0JKRUNUKHNpbXBsZVJlc3VsdCksICJjYW5jZWxsYWJsZSIpKTsKKyAgICBpZiAoY2Fu
Y2VsbGFibGUgJiYgZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoY2FuY2VsbGFibGUpKSB7Cisg
ICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1Jf
Q0FOQ0VMTEVELCBfKCJPcGVyYXRpb24gd2FzIGNhbmNlbGxlZCIpKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgR2RrUGl4YnVmKiBpY29uID0gc3RhdGljX2Nhc3Q8R2RrUGl4YnVm
Kj4oZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIoc2ltcGxlUmVzdWx0
KSk7CisgICAgaWYgKCFpY29uKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8R2RrUGl4YnVmKj4oZ19vYmplY3RfcmVmKHBpeGJ1ZikpOworCisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEdka1BpeGJ1Zio+KGdfb2JqZWN0X3JlZihpY29uKSk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdEljb25EYXRhYmFzZVByb2Nlc3NQZW5kaW5nSWNvbnNGb3JVUkkoV2ViS2l0SWNv
bkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBwYWdlVVJMKQoreworICAgIFBlbmRp
bmdJY29uUmVxdWVzdFZlY3RvciogaWNvbnMgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25S
ZXF1ZXN0cy5nZXQocGFnZVVSTCk7CisgICAgaWYgKCFpY29ucykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpY29ucy0+c2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgUGVuZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0ID0gaWNvbnMtPmF0KGkpLmdldCgpOworICAg
ICAgICBpZiAocmVxdWVzdC0+YXN5bmNSZXN1bHQoKSkKKyAgICAgICAgICAgIHJlcXVlc3QtPmFz
eW5jUmVzdWx0Q29tcGxldGUoZ2V0SWNvblBpeGJ1ZlN5bmNocm9ub3VzbHkoZGF0YWJhc2UsIHBh
Z2VVUkwsIDE2LCAxNikpOworICAgIH0KKyAgICB3ZWJraXRJY29uRGF0YWJhc2VEZWxldGVSZXF1
ZXN0cyhkYXRhYmFzZSwgaWNvbnMsIHBhZ2VVUkwpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRJ
Y29uRGF0YWJhc2VJbXBvcnRGaW5pc2hlZChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgZGF0YWJhc2UtPnByaXYtPmltcG9y
dEZpbmlzaGVkID0gdHJ1ZTsKKworICAgIC8vIEltcG9ydCBpcyBjb21wbGV0ZSwgcHJvY2VzcyBw
ZW5kaW5nIHJlcXVlc3RzIGZvciBwYWdlcyB0aGF0IGFyZSBub3QgaW4gdGhlIGRhdGFiYXNlLAor
ICAgIC8vIHNpbmNlIGRpZEltcG9ydEljb25EYXRhRm9yUGFnZVVSTCgpIHdpbGwgbmV2ZXIgYmUg
Y2FsbGVkIGZvciB0aGVtLgorICAgIFZlY3RvcjxTdHJpbmc+IHRvRGVsZXRlVVJMczsKKyAgICBQ
ZW5kaW5nSWNvblJlcXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGRhdGFiYXNlLT5wcml2
LT5wZW5kaW5nSWNvblJlcXVlc3RzLmVuZCgpOworICAgIGZvciAoUGVuZGluZ0ljb25SZXF1ZXN0
TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVx
dWVzdHMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBTdHJpbmcgaWNv
blVSTCA9IGljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoaXRlci0+
Zmlyc3QpOworICAgICAgICBpZiAoIWljb25VUkwuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBpY29ucyA9IGl0ZXIt
PnNlY29uZDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpY29ucy0+c2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgIFBlbmRpbmdJY29uUmVxdWVzdCogcmVxdWVzdCA9IGljb25zLT5h
dChpKS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5hc3luY1Jlc3VsdCgpKQorICAg
ICAgICAgICAgICAgIHJlcXVlc3QtPmFzeW5jUmVzdWx0Q29tcGxldGUoMCk7CisgICAgICAgIH0K
KworICAgICAgICB0b0RlbGV0ZVVSTHMuYXBwZW5kKGl0ZXItPmZpcnN0KTsKKyAgICB9CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvRGVsZXRlVVJMcy5zaXplKCk7ICsraSkKKyAgICAg
ICAgd2Via2l0SWNvbkRhdGFiYXNlRGVsZXRlUmVxdWVzdHMoZGF0YWJhc2UsIGRhdGFiYXNlLT5w
cml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmdldCh0b0RlbGV0ZVVSTHNbaV0pLCB0b0RlbGV0ZVVS
THNbaV0pOworCisgICAgLy8gQWxzbyBtYXJrIHRoZSBleHBpcmVkIGljb25zIGZvciBwcnVubmlu
Zy4gV2UgbmVlZCB0byBkbyB0aGlzCisgICAgLy8gQVNBUCBiZWNhdXNlIHBydW5pbmcgY2FuIG9u
bHkgaGFwcGVuIHRoZSBmaXJzdCB0aW1lIHRoZSBvbi1kaXNrCisgICAgLy8gY2FjaGUgaXMgd3Jp
dHRlbiBmb3IgZWFjaCBleGVjdXRpb24uCisgICAgaWYgKGRhdGFiYXNlLT5wcml2LT5leHBpcmF0
aW9uVGltZXNEYXRhYmFzZSkKKyAgICAgICAgd2Via2l0SWNvbkRhdGFiYXNlUHJ1bmVFeHBpcmVk
SWNvbnMoZGF0YWJhc2UpOwogfQogCiAvKioKQEAgLTMxMiw2ICs3MTYsNiBAQCB2b2lkIHdlYmtp
dF9pY29uX2RhdGFiYXNlX2NsZWFyKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpCiB7CiAg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShkYXRhYmFzZSkpOwog
Ci0gICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkucmVtb3ZlQWxsSWNvbnMoKTsKKyAgICBpY29u
RGF0YWJhc2UoKS5yZW1vdmVBbGxJY29ucygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmgKaW5kZXggNWVhZDYwM2FiZGRmMTI0ZTM2ZDJmNWFk
YzYyMmFiNTVmMzhjMThiYi4uZDMyYTM5ZThlZThiYTdjNGQ4OWI0ODVkMzE2NzZhNjUxMjU4MDI2
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFz
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuaApA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ2hyaXN0aWFuIER5d2Fu
IDxjaHJpc3RpYW5AbGFuZWRvLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5M
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01MywyNSArNTQsNDEgQEAgc3RydWN0IF9XZWJLaXRJ
Y29uRGF0YWJhc2VDbGFzcyB7CiB9OwogCiBXRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfaWNvbl9k
YXRhYmFzZV9nZXRfdHlwZSAgICAgICAgICAgICh2b2lkKTsKK3dlYmtpdF9pY29uX2RhdGFiYXNl
X2dldF90eXBlICAgICAgICAgICAgICAgKHZvaWQpOwogCiBXRUJLSVRfQVBJIGNvbnN0IGdjaGFy
Kgotd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3BhdGggICAgICAgICAgICAoV2ViS2l0SWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSk7Cit3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0aCAgICAgICAg
ICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKTsKIAogV0VCS0lUX0FQSSB2b2lk
Ci13ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aCAgICAgICAgICAgIChXZWJLaXRJY29uRGF0
YWJhc2UqIGRhdGFiYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2NoYXIqICAgICAgICBwYXRoKTsKK3dlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9w
YXRoICAgICAgICAgICAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAg
IHBhdGgpOwogCiBXRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2lj
b25fdXJpICAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiAgICAgICAgcGFnZV91
cmkpOword2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpICAgICAgICAgICAoV2ViS2l0
SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiAgICAgICAgcGFnZV91cmkpOwogCiBXRUJLSVRfQVBJ
IEdka1BpeGJ1ZioKLXdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZiAgICAgKFdl
YktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhZ2VfdXJpKTsKK3dlYmtpdF9pY29u
X2RhdGFiYXNlX3RyeV9nZXRfaWNvbl9waXhidWYgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0
YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBnY2hhciogICAgICAgIHBhZ2VfdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgaGVpZ2h0
KTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhciAgICAgICAg
ICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKTsKK3dlYmtpdF9pY29uX2RhdGFi
YXNlX2dldF9pY29uX3BpeGJ1ZiAgICAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2Us
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hh
ciogICAgICAgIHBhZ2VfdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgaGVpZ2h0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlKiAg
ICAgICBjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgIHVzZXJfZGF0YSk7
CisKK1dFQktJVF9BUEkgR2RrUGl4YnVmKgord2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25f
cGl4YnVmX2ZpbmlzaCAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCogICAgICAgcmVz
dWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9y
KiogICAgICAgICAgICBlcnJvcik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2ljb25fZGF0
YWJhc2VfY2xlYXIgICAgICAgICAgICAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSk7CiAKIEdfRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRpY29uZGF0YWJhc2Vwcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0aWNvbmRhdGFiYXNlcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZkOTcxYmRhZWFmZmIyNTRj
N2Y3ZDQ5NmJkNTlmYmU0NjZlYjA4NTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlcHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXRpY29u
ZGF0YWJhc2Vwcml2YXRlX2gKKyNkZWZpbmUgd2Via2l0aWNvbmRhdGFiYXNlcHJpdmF0ZV9oCisK
K3ZvaWQgd2Via2l0SWNvbkRhdGFiYXNlRGlzcGF0Y2hEaWRSZWNlaXZlSWNvbihXZWJLaXRJY29u
RGF0YWJhc2UqLCBjb25zdCBjaGFyKiBmcmFtZVVSSSk7CisKKyNlbmRpZiAvLyB3ZWJraXRpY29u
ZGF0YWJhc2Vwcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmNwcAppbmRleCAzMTJjMmU1M2NiMjkzNzc1MWI0ZWFkOGZkZDZhZTljMzg1NWI4NGRiLi41Y2Y0
MWJhNThmOWI5NGI0OWVkOTZmY2RiNjY3NmMyYjRkYjVlMWE4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCkBAIC0xMSw2ICsxMSw3IEBACiAgKiAgQ29weXJp
Z2h0IChDKSAyMDA5IE1vdmlhbCBDcmVhdGl2ZSBUZWNobm9sb2dpZXMgSW5jLgogICogIENvcHly
aWdodCAoQykgMjAwOSBCb2JieSBQb3dlcnMKICAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUg
SHVyIDxqb29uZUBrbGRwLm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4K
ICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTUwMzQsMzAgKzUwMzUsMzQgQEAgY29uc3QgZ2NoYXIq
IHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIH0K
IAogLyoqCi0gKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fcGl4YnVmOgorICogd2Via2l0X3dl
Yl92aWV3X3RyeV9nZXRfaWNvbl9waXhidWY6CiAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2Vi
VmlldyBvYmplY3QKKyAqIEB3aWR0aDogdGhlIGRlc2lyZWQgd2lkdGggZm9yIHRoZSBpY29uCisg
KiBAaGVpZ2h0OiB0aGUgZGVzaXJlZCBoZWlnaHQgZm9yIHRoZSBpY29uCiAgKgotICogT2J0YWlu
cyBhICNHZGtQaXhidWYgb2YgdGhlIGZhdmljb24gZm9yIHRoZSBnaXZlbiAjV2ViS2l0V2ViVmll
dywgb3IKLSAqIGEgZGVmYXVsdCBpY29uIGlmIHRoZXJlIGlzIG5vIGljb24gZm9yIHRoZSBnaXZl
biBwYWdlLiBVc2UKLSAqIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkoKSBpZiB5b3UgbmVl
ZCB0byBkaXN0aW5ndWlzaCB0aGVzZSBjYXNlcy4KLSAqIFVzdWFsbHkgeW91IHdhbnQgdG8gY29u
bmVjdCB0byBXZWJLaXRXZWJWaWV3OjppY29uLWxvYWRlZCBhbmQgY2FsbCB0aGlzCi0gKiBtZXRo
b2QgaW4gdGhlIGNhbGxiYWNrLgorICogT2J0YWlucyBhICNHZGtQaXhidWYgb2YgdGhlIGZhdmlj
b24gZm9yIHRoZSBnaXZlbgorICogI1dlYktpdFdlYlZpZXcuIFRoaXMgd2lsbCByZXR1cm4gJU5V
TEwgaXMgdGhlcmUgaXMgbm8gaWNvbiBmb3IgdGhlCisgKiBjdXJyZW50ICNXZWJLaXRXZWJWaWV3
IG9yIGlmIHRoZSBpY29uIGlzIGluIHRoZSBkYXRhYmFzZSBidXQgbm90CisgKiBhdmFpbGFibGUg
YXQgdGhlIG1vbWVudCBvZiB0aGlzIGNhbGwuIFVzZQorICogd2Via2l0X3dlYl92aWV3X2dldF9p
Y29uX3VyaSgpIGlmIHlvdSBuZWVkIHRvIGRpc3Rpbmd1aXNoIHRoZXNlCisgKiBjYXNlcy4gIFVz
dWFsbHkgeW91IHdhbnQgdG8gY29ubmVjdCB0byBXZWJLaXRXZWJWaWV3OjppY29uLWxvYWRlZAor
ICogYW5kIGNhbGwgdGhpcyBtZXRob2QgaW4gdGhlIGNhbGxiYWNrLgogICoKLSAqIFRoZSBwaXhi
dWYgd2lsbCBoYXZlIHRoZSBsYXJnZXN0IHNpemUgcHJvdmlkZWQgYnkgdGhlIHNlcnZlciBhbmQg
c2hvdWxkCi0gKiBiZSByZXNpemVkIGJlZm9yZSBpdCBpcyBkaXNwbGF5ZWQuCi0gKiBTZWUgYWxz
byB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoKS4KKyAqIFNlZSBhbHNvIHdl
YmtpdF9pY29uX2RhdGFiYXNlX3RyeV9nZXRfaWNvbl9waXhidWYoKS4gQ29udHJhcnkgdG8gdGhp
cworICogZnVuY3Rpb24gdGhlIGljb24gZGF0YWJhc2Ugb25lIHJldHVybnMgdGhlIFVSTCBvZiB0
aGUgcGFnZQorICogY29udGFpbmluZyB0aGUgaWNvbiBpbnN0ZWFkIG9mIHRoZSBVUkwgb2YgdGhl
IGljb24uCiAgKgogICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyByZWZlcmVuY2Ug
dG8gYSAjR2RrUGl4YnVmLCBvciAlTlVMTAogICoKLSAqIFNpbmNlOiAxLjMuMTMKKyAqIFNpbmNl
OiAxLjgKICAqLwotR2RrUGl4YnVmKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fcGl4YnVmKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCitHZGtQaXhidWYqIHdlYmtpdF93ZWJfdmlld190cnlfZ2V0
X2ljb25fcGl4YnVmKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGd1aW50IHdpZHRoLCBndWludCBo
ZWlnaHQpCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdl
YlZpZXcpLCAwKTsKIAogICAgIGNvbnN0IGdjaGFyKiBwYWdlVVJJID0gd2Via2l0X3dlYl92aWV3
X2dldF91cmkod2ViVmlldyk7CiAgICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdl
YmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOwotICAgIHJldHVybiB3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9nZXRfaWNvbl9waXhidWYoZGF0YWJhc2UsIHBhZ2VVUkkpOworICAgIHJldHVybiB3ZWJraXRf
aWNvbl9kYXRhYmFzZV90cnlfZ2V0X2ljb25fcGl4YnVmKGRhdGFiYXNlLCBwYWdlVVJJLCB3aWR0
aCwgaGVpZ2h0KTsKIH0KIAogCkBAIC01MTI4LDYgKzUxMzMsMzEgQEAgdm9pZCB3ZWJWaWV3RXhp
dEZ1bGxzY3JlZW4oV2ViS2l0V2ViVmlldyogd2ViVmlldykKICNlbmRpZgogfQogCisjaWYgRU5B
QkxFKElDT05EQVRBQkFTRSkKK3ZvaWQgd2Via2l0V2ViVmlld0ljb25Mb2FkZWQoV2ViS2l0SWNv
bkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgY2hhciogZnJhbWVVUkksIFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcpCit7CisgICAgLy8gU2luY2Ugd2UgZGVmaW5pdGVseSBoYXZlIGFuIGljb24gdGhl
IFdlYlZpZXcgZG9lc24ndCBuZWVkIHRvCisgICAgLy8gbGlzdGVuIGZvciBub3RpZmljYXRpb25z
IGFueSBsb25nZXIuCisgICAgd2Via2l0V2ViVmlld1JlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlv
bih3ZWJWaWV3LCBGQUxTRSk7CisKKyAgICAvLyB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJp
KCkgcHJvcGVybHkgdXBkYXRlcyB0aGUgImljb24tdXJpIiBwcm9wZXJ0eS4KKyAgICBnX29iamVj
dF9ub3RpZnkoR19PQkpFQ1Qod2ViVmlldyksICJpY29uLXVyaSIpOworICAgIGdfc2lnbmFsX2Vt
aXRfYnlfbmFtZSh3ZWJWaWV3LCAiaWNvbi1sb2FkZWQiLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2lj
b25fdXJpKHdlYlZpZXcpKTsKK30KKwordm9pZCB3ZWJraXRXZWJWaWV3UmVnaXN0ZXJGb3JJY29u
Tm90aWZpY2F0aW9uKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGJvb2wgc2hvdWxkUmVnaXN0ZXIp
Cit7CisgICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9k
YXRhYmFzZSgpOworICAgIGlmIChzaG91bGRSZWdpc3RlcikgeworICAgICAgICBpZiAoIWdfc2ln
bmFsX2hhbmRsZXJfaXNfY29ubmVjdGVkKGRhdGFiYXNlLCB3ZWJWaWV3LT5wcml2LT5pY29uTG9h
ZGVkSGFuZGxlcikpCisgICAgICAgICAgICB3ZWJWaWV3LT5wcml2LT5pY29uTG9hZGVkSGFuZGxl
ciA9IGdfc2lnbmFsX2Nvbm5lY3QoZGF0YWJhc2UsICJpY29uLWxvYWRlZCIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19D
QUxMQkFDSyh3ZWJraXRXZWJWaWV3SWNvbkxvYWRlZCksIHdlYlZpZXcpOworICAgIH0gZWxzZQor
ICAgICAgICBpZiAoZ19zaWduYWxfaGFuZGxlcl9pc19jb25uZWN0ZWQoZGF0YWJhc2UsIHdlYlZp
ZXctPnByaXYtPmljb25Mb2FkZWRIYW5kbGVyKSkKKyAgICAgICAgICAgIGdfc2lnbmFsX2hhbmRs
ZXJfZGlzY29ubmVjdChkYXRhYmFzZSwgd2ViVmlldy0+cHJpdi0+aWNvbkxvYWRlZEhhbmRsZXIp
OworfQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBXZWJDb3JlOjpQYWdlKiBjb3Jl
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlldy5oIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YnZpZXcuaAppbmRleCAyYTE1YjUzYzY3Njg5Y2Y2ZTcwMzFlYzhkOTNkNDViZTYxMmQ0NGY0Li4z
MWU1YTQ3MDA1YjkxYTI0M2M1OTNlZDVlNWE1ZWNlNDM4MDExZDBkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKQEAgLTQzMSw3ICs0MzEsOSBAQCBXRUJLSVRfQVBJ
IGNvbnN0IGdjaGFyICoKIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkgICAgICAgICAgICAg
ICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViX3ZpZXcpOwogCiBXRUJLSVRfQVBJIEdk
a1BpeGJ1ZiAqCi13ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fcGl4YnVmICAgICAgICAgICAgICAg
ICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYl92aWV3KTsKK3dlYmtpdF93ZWJfdmlld190cnlf
Z2V0X2ljb25fcGl4YnVmICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViX3Zp
ZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vp
bnQgICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgICBoZWlnaHQpOwogCiBXRUJL
SVRfQVBJIFdlYktpdERPTURvY3VtZW50ICoKIHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3Vt
ZW50ICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViX3ZpZXcpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaAppbmRleCA3
NWJhMTRjYmVhN2EzYTYyOTVjOGVjYmYwZTBjZmI4ZDZlNmYxOTdlLi5hNjZkZGMyZWZiNzM5NDMz
OWFjMWEyNTc3MGQ0MzY4OThkNjBmZWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaApAQCAtOTksNiArOTksMTAgQEAgc3RydWN0IF9XZWJL
aXRXZWJWaWV3UHJpdmF0ZSB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAg
IE93blB0cjxXZWJLaXQ6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0PiBhY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQ29udGV4dDsKICNlbmRpZgorCisjaWYgRU5BQkxFKElDT05EQVRBQkFTRSkK
KyAgICBndWxvbmcgaWNvbkxvYWRlZEhhbmRsZXI7CisjZW5kaWYKIH07CiAKIHZvaWQgd2Via2l0
X3dlYl92aWV3X25vdGlmeV9yZWFkeShXZWJLaXRXZWJWaWV3Kik7CkBAIC0xMTgsNiArMTIyLDEx
IEBAIEd0a01lbnUqIHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dF9tZW51KFdlYktpdFdlYlZp
ZXcqKTsKIAogdm9pZCB3ZWJWaWV3RW50ZXJGdWxsc2NyZWVuKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIFdlYkNvcmU6Ok5vZGUqKTsKIHZvaWQgd2ViVmlld0V4aXRGdWxsc2NyZWVuKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpOworCisjaWYgRU5BQkxFKElDT05EQVRBQkFTRSkKK3ZvaWQgd2Via2l0
V2ViVmlld1JlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihXZWJLaXRXZWJWaWV3KiwgYm9vbCBz
aG91bGRSZWdpc3Rlcik7Cit2b2lkIHdlYmtpdFdlYlZpZXdJY29uTG9hZGVkKFdlYktpdEljb25E
YXRhYmFzZSosIGNvbnN0IGNoYXIqIGZyYW1lVVJJLCBXZWJLaXRXZWJWaWV3Kik7CisjZW5kaWYK
IH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cKaW5kZXggYWRhNjc3NzAyYjJjMDUzNjgwN2NkZTZhNTMxYjBjMjgyZTgzNDMxZi4uNmRmZmVh
MGNjZjhiNDA2YjIwMTVjNGM0YTA3YjQ2OTZjODJkOThhMyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTAzLTAy
ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4gYW5kIFNlcmdpbyBW
aWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gV2ViS2l0
SWNvbkRhdGFiYXNlIGRvZXNuJ3Qga2VlcCBpY29ucyBjYWNoZWQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MjAwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGZhdmljb25zIGlu
IEd0a0xhdW5jaGVyLgorCisgICAgICAgICogR3RrTGF1bmNoZXIvbWFpbi5jOgorICAgICAgICAo
YWN0aXZhdGVVcmlFbnRyeUNiKToKKyAgICAgICAgKGljb25Mb2FkZWRDYik6CisgICAgICAgIChj
cmVhdGVCcm93c2VyKToKKwogMjAxMi0wMy0wMSAgS2FsZXYgTGVtYmVyICA8a2FsZXZsZW1iZXJA
Z21haWwuY29tPgogCiAgICAgICAgIFdlYktpdFRlc3RSdW5uZXI6IEV4cGxpY2l0bHkgaW5jbHVk
ZSB1bmlzdGQuaCBmb3IgZ2NjIDQuNwpkaWZmIC0tZ2l0IGEvVG9vbHMvR3RrTGF1bmNoZXIvbWFp
bi5jIGIvVG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCmluZGV4IDU4NzQwNWZjNDIzNGYxZDdiZThh
NzNjOTEzZWRlMmJkYmNlNGI3MTEuLmQ0NDM3M2ZmZTc1Y2ZhOTljNDg0OWIxMGNmOWY3NDVlNWY0
N2I1YTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0d0a0xhdW5jaGVyL21haW4uYworKysgYi9Ub29scy9H
dGtMYXVuY2hlci9tYWluLmMKQEAgLTQwLDYgKzQwLDcgQEAgc3RhdGljIHZvaWQgYWN0aXZhdGVV
cmlFbnRyeUNiKEd0a1dpZGdldCogZW50cnksIGdwb2ludGVyIGRhdGEpCiAgICAgV2ViS2l0V2Vi
VmlldyAqd2ViVmlldyA9IGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGVudHJ5KSwgIndlYi12
aWV3Iik7CiAgICAgY29uc3QgZ2NoYXIqIHVyaSA9IGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5U
UlkoZW50cnkpKTsKICAgICBnX2Fzc2VydCh1cmkpOworICAgIGd0a19lbnRyeV9zZXRfaWNvbl9m
cm9tX3BpeGJ1ZihHVEtfRU5UUlkoZW50cnkpLCBHVEtfRU5UUllfSUNPTl9QUklNQVJZLCAwKTsK
ICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViVmlldywgdXJpKTsKIH0KIApAQCAtMTk1
LDE2ICsxOTYsMzIgQEAgc3RhdGljIGdib29sZWFuIHdlYlZpZXdMZWF2aW5nRnVsbFNjcmVlbihX
ZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBHT2JqZWN0ICplbGVtZW4KICAgICByZXR1cm4gRkFMU0U7
CiB9CiAKK3N0YXRpYyB2b2lkIGljb25Mb2FkZWRDYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBj
b25zdCBjaGFyKiBpY29uVVJJLCBHdGtXaWRnZXQqIHVyaUVudHJ5KQoreworICAgIEdka1BpeGJ1
ZiAqaWNvbiA9IHdlYmtpdF93ZWJfdmlld190cnlfZ2V0X2ljb25fcGl4YnVmKHdlYlZpZXcsIDE2
LCAxNik7CisgICAgaWYgKCFpY29uKQorICAgICAgICByZXR1cm47CisKKyAgICBndGtfZW50cnlf
c2V0X2ljb25fZnJvbV9waXhidWYoR1RLX0VOVFJZKHVyaUVudHJ5KSwgR1RLX0VOVFJZX0lDT05f
UFJJTUFSWSwgaWNvbik7CisgICAgZ19vYmplY3RfdW5yZWYoaWNvbik7Cit9CisKIHN0YXRpYyBH
dGtXaWRnZXQqIGNyZWF0ZUJyb3dzZXIoR3RrV2lkZ2V0KiB3aW5kb3csIEd0a1dpZGdldCogdXJp
RW50cnksIEd0a1dpZGdldCogc3RhdHVzYmFyLCBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHdGtX
aWRnZXQqIHZib3gpCiB7CisgICAgY2hhciAqaWNvbkRhdGFiYXNlUGF0aDsKICAgICBHdGtXaWRn
ZXQgKnNjcm9sbGVkV2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7
CiAgICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1co
c2Nyb2xsZWRXaW5kb3cpLCBHVEtfUE9MSUNZX0FVVE9NQVRJQywgR1RLX1BPTElDWV9BVVRPTUFU
SUMpOwogCiAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZFdpbmRv
dyksIEdUS19XSURHRVQod2ViVmlldykpOwogCisgICAgaWNvbkRhdGFiYXNlUGF0aCA9IGdfYnVp
bGRfZmlsZW5hbWUoZ19nZXRfdXNlcl9kYXRhX2RpcigpLCAid2Via2l0IiwgImljb25kYXRhYmFz
ZSIsIE5VTEwpOworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKHdlYmtpdF9nZXRf
aWNvbl9kYXRhYmFzZSgpLCBpY29uRGF0YWJhc2VQYXRoKTsKKyAgICBnX2ZyZWUoaWNvbkRhdGFi
YXNlUGF0aCk7CisKICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6OnRpdGxl
IiwgR19DQUxMQkFDSyhub3RpZnlUaXRsZUNiKSwgd2luZG93KTsKICAgICBnX3NpZ25hbF9jb25u
ZWN0KHdlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhub3RpZnlMb2Fk
U3RhdHVzQ2IpLCB1cmlFbnRyeSk7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibm90
aWZ5Ojpwcm9ncmVzcyIsIEdfQ0FMTEJBQ0sobm90aWZ5UHJvZ3Jlc3NDYiksIHdpbmRvdyk7Cisg
ICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiaWNvbi1sb2FkZWQiLCBHX0NBTExCQUNLKGlj
b25Mb2FkZWRDYiksIHVyaUVudHJ5KTsKICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJo
b3ZlcmluZy1vdmVyLWxpbmsiLCBHX0NBTExCQUNLKGxpbmtIb3ZlckNiKSwgc3RhdHVzYmFyKTsK
ICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJjcmVhdGUtd2ViLXZpZXciLCBHX0NBTExC
QUNLKGNyZWF0ZVdlYlZpZXdDYiksIHdpbmRvdyk7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJW
aWV3LCAid2ViLXZpZXctcmVhZHkiLCBHX0NBTExCQUNLKHdlYlZpZXdSZWFkeUNiKSwgd2luZG93
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130683</attachid>
            <date>2012-03-07 13:36:18 -0800</date>
            <delta_ts>2012-03-12 11:23:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56200-20120307223616.patch</filename>
            <type>text/plain</type>
            <size>72940</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5NTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggMGQ0ODQ4Mzhi
MGYwNGY2ZDJmZjFjYTU4ZGI0MWQ0OGFjZjg1NDM3ZC4uOTAxYzVhMzU0MWVkYmViNGE1MDQyYWY3
YzBkNzcxNDc4ZDMxNzBlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNiBAQAorMjAx
Mi0wMy0wNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+IGFuZCBT
ZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtd
IFdlYktpdEljb25EYXRhYmFzZSBkb2Vzbid0IGtlZXAgaWNvbnMgY2FjaGVkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjIwMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFk
ZGVkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xp
ZW50OjpyZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24pOiBpbnN0cnVjdAorICAgICAgICB0aGUg
V2ViVmlldyB0byBsaXN0ZW4gdG8gSWNvbkRhdGFiYXNlJ3Mgbm90aWZpY2F0aW9ucy4KKyAgICAg
ICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24pOiBh
c2sgYm90aAorICAgICAgICBXZWJWaWV3IGFuZCBJY29uRGF0YWJhc2UgdG8gaXNzdWUgbm90aWZp
Y2F0aW9ucyBmb3IgYSBuZXcgaWNvbi4KKyAgICAgICAgKiBkb2NzL3dlYmtpdGd0ay1zZWN0aW9u
cy50eHQ6IHVwZGF0ZWQgZG9jcy4KKyAgICAgICAgKiB0ZXN0cy90ZXN0aWNvbmRhdGFiYXNlLmM6
IEFkZGVkLgorICAgICAgICAoc2VydmVyX2NhbGxiYWNrKToKKyAgICAgICAgKGRlbGV0ZURhdGFi
YXNlRmlsZUlmRXhpc3RzKToKKyAgICAgICAgKHRlc3RXZWJraXRJY29uRGF0YWJhc2VTZXRQYXRo
KToKKyAgICAgICAgKGljb25EYXRhYmFzZUdldEljb25WYWxpZENhbGxiYWNrKToKKyAgICAgICAg
KGljb25EYXRhYmFzZUdldEljb25JbnZhbGlkQ2FsbGJhY2spOgorICAgICAgICAoaWNvbkRhdGFi
YXNlR2V0SWNvbkNhbmNlbGxlZENhbGxiYWNrKToKKyAgICAgICAgKG1haW5Mb29wUXVpdElmTG9h
ZENvbXBsZXRlZCk6CisgICAgICAgIChpZGxlUXVpdExvb3BDYWxsYmFjayk6CisgICAgICAgICh3
ZWJraXRXZWJWaWV3SWNvbkxvYWRlZCk6CisgICAgICAgIChsb2FkVVJJKToKKyAgICAgICAgKGZh
dmljb25EYXRhYmFzZUdldEZhdmljb25WYWxpZElkbGUpOgorICAgICAgICAoZmF2aWNvbkRhdGFi
YXNlR2V0RmF2aWNvbkludmFsaWRJZGxlKToKKyAgICAgICAgKGZhdmljb25EYXRhYmFzZUdldEZh
dmljb25DYW5jZWxsZWRJZGxlKToKKyAgICAgICAgKHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VH
ZXRGYXZpY29uKToKKyAgICAgICAgKHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VHZXRGYXZpY29u
VVJJKToKKyAgICAgICAgKHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VSZW1vdmVBbGwpOgorICAg
ICAgICAodGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUNsb3NlRGF0YWJhc2UpOgorICAgICAgICAo
bWFpbik6CisgICAgICAgICogd2Via2l0L3dlYmtpdC5oOiBhZGRlZCBuZXcgQVBJLgorICAgICAg
ICAqIHdlYmtpdC93ZWJraXRkZWZpbmVzLmg6IGFkZGVkIFdlYktpdEZhdmljb25EYXRhYmFzZS4K
KyAgICAgICAgKiB3ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcDoKKyAgICAgICAgKElj
b25EYXRhYmFzZUNsaWVudEd0ayk6IEljb25EYXRhYmFzZUNsaWVudCBpbXBsZW1lbnRhdGlvbi4K
KyAgICAgICAgKEljb25EYXRhYmFzZUNsaWVudEd0azo6cGVyZm9ybUltcG9ydCk6CisgICAgICAg
IChJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpZFJlbW92ZUFsbEljb25zKToKKyAgICAgICAgKElj
b25EYXRhYmFzZUNsaWVudEd0azo6ZGlkSW1wb3J0SWNvblVSTEZvclBhZ2VVUkwpOgorICAgICAg
ICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpkaWRJbXBvcnRJY29uRGF0YUZvclBhZ2VVUkwpOgor
ICAgICAgICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTCk6
CisgICAgICAgIChJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpZEZpbmlzaFVSTEltcG9ydCk6Cisg
ICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3QpOiBtYWNoaW5lcnkgZm9yIGFzeW5jaHJvbm91cyBj
YWxscy4KKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6UGVuZGluZ0ljb25SZXF1ZXN0KToK
KyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6flBlbmRpbmdJY29uUmVxdWVzdCk6CisgICAg
ICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OnBhZ2VVUkkpOgorICAgICAgICAoUGVuZGluZ0ljb25S
ZXF1ZXN0Ojphc3luY1Jlc3VsdCk6CisgICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OmFzeW5j
UmVzdWx0Q2FuY2VsKToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6YXN5bmNSZXN1bHRD
b21wbGV0ZUluSWRsZSk6CisgICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OmFzeW5jUmVzdWx0
Q29tcGxldGUpOgorICAgICAgICAoX1dlYktpdEljb25EYXRhYmFzZVByaXZhdGUpOgorICAgICAg
ICAod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZGlzcG9zZSk6IEdPYmplY3Qgc3R1ZmYuCisgICAg
ICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9zZXRfcHJvcGVydHkpOiBkaXR0by4KKyAgICAg
ICAgKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9wcm9wZXJ0eSk6IGRpdHRvLgorICAgICAg
ICAod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfY2xhc3NfaW5pdCk6IGRpdHRvLgorICAgICAgICAo
d2Via2l0X2Zhdmljb25fZGF0YWJhc2VfaW5pdCk6IGRpdHRvLgorICAgICAgICAod2Via2l0RmF2
aWNvbkRhdGFiYXNlTm90aWZ5QW5kVXBkYXRlRXhwaXJhdGlvbik6IG5vdGlmeSBhYm91dCBuZXcK
KyAgICAgICAgaWNvbnMgYW5kIHVwZGF0ZSBleHBpcmF0aW9uIHRpbWVzLgorICAgICAgICAod2Vi
a2l0RmF2aWNvbkRhdGFiYXNlRGlzcGF0Y2hEaWRSZWNlaXZlSWNvbik6ICJwcm90ZWN0ZWQiIG1l
dGhvZAorICAgICAgICBjYWxsZWQgYnkgdGhlIEZyYW1lTG9hZGVyQ2xpZW50IHRvIGluZm9ybSBh
Ym91dCBuZXcgaWNvbnMuCisgICAgICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfcGF0
aCk6IHJldHJpZXZlcyBkYXRhYmFzZSBwYXRoLgorICAgICAgICAoc2VsZWN0UXVlcnlDYWxsYmFj
ayk6IHJlbGVhc2VzIGV4cGlyZWQgaWNvbnMgdG8gbGV0IEljb25EYXRhYmFzZQorICAgICAgICBw
cnVuZSB0aGVtLgorICAgICAgICAod2Via2l0RmF2aWNvbkRhdGFiYXNlUHJ1bmVFeHBpcmVkSWNv
bnMpOiBzZWxlY3RzIHRoZSBpY29ucyB0byBiZQorICAgICAgICBwcnVuZWQgYnkgdGhlIEljb25E
YXRhYmFzZS4KKyAgICAgICAgKHdlYmtpdEZhdmljb25EYXRhYmFzZUNsb3NlKTogY2xvc2UgdGhl
IGRhdGFiYXNlLgorICAgICAgICAoY3JlYXRlRXhwaXJhdGlvblRpbWVzRGF0YWJhc2VUYWJsZUlm
Tm90RXhpc3RzKTogY3JlYXRlcyB0aGUKKyAgICAgICAgZGF0YWJhc2UgdXNlZCB0byBjb250cm9s
IGV4cGlyYXRpb24gdGltZXMuCisgICAgICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9zZXRf
cGF0aCk6IG9wZW5zIHRoZSBkYXRhYmFzZSBkZWxheWluZyB0aGUKKyAgICAgICAgY2xlYW51cCBv
ZiBpY29ucyB1bnRpbCB0aGUgaW1wb3J0IGlzIGNvbXBsZXRlLgorICAgICAgICAod2Via2l0X2Zh
dmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKTogcmV0dXJucyB0aGUgdXJpIG9mIHRoZQor
ICAgICAgICBmYXZpY29uLgorICAgICAgICAoZ2V0SWNvblBpeGJ1ZlN5bmNocm9ub3VzbHkpOiBo
ZWxwZXIgZnVuY3Rpb24gdG8gY2FsbAorICAgICAgICBJY29uRGF0YWJhc2U6OnN5bmNocm9ub3Vz
SWNvblVSTEZvclBhZ2VVUkwoKS4KKyAgICAgICAgKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3Ry
eV9nZXRfZmF2aWNvbl9waXhidWYpOiByZXR1cm5zIHRoZQorICAgICAgICBmYXZpY29uIGlmIGV4
aXN0cyBhbmQgaXMgbG9hZGVkIGZyb20gZGlzay4KKyAgICAgICAgKHdlYmtpdEZhdmljb25EYXRh
YmFzZUdldE9yQ3JlYXRlUmVxdWVzdHMpOiBoZWxwZXIgZnVuY3Rpb24gdG8gZ2V0CisgICAgICAg
IHRoZSB2ZWN0b3Igb2YgcGVuZGluZyByZXF1ZXN0cyBmb3IgdGhlIGdpdmVuIHVyaS4KKyAgICAg
ICAgKHdlYmtpdGZhdmljb25kYXRhYmFzZURlbGV0ZVJlcXVlc3RzKTogaGVscGVyIGZ1bmN0aW9u
IHRvIHJlbW92ZSB0aGUKKyAgICAgICAgdmVjdG9yIG9mIHBlbmRpbmcgcmVxdWVzdHMgZm9yIHRo
ZSBnaXZlbiB1cmkuCisgICAgICAgIChnZXRJY29uUGl4YnVmQ2FuY2VsbGVkKToKKyAgICAgICAg
KHdlYmtpdEZhdmljb25EYXRhYmFzZUdldEljb25QaXhidWZDYW5jZWxsZWQpOgorICAgICAgICAo
d2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmKTogYXN5bmNocm9ub3Vz
bHkKKyAgICAgICAgcmV0cmlldmUgaWNvbnMgZnJvbSB0aGUgZGF0YWJhc2UuCisgICAgICAgICh3
ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWZfZmluaXNoKTogZmluaXNo
ZXMgYW4KKyAgICAgICAgb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9nZXRfaWNvbl9waXhidWYoKS4KKyAgICAgICAgKHdlYmtpdEZhdmljb25EYXRhYmFzZVByb2Nl
c3NQZW5kaW5nSWNvbnNGb3JVUkkpOiBwcm9jZXNzIHBlbmRpbmcKKyAgICAgICAgcmVxdWVzdHMg
b25jZSB0aGUgaW1wb3J0IGlzIGZpbmlzaGVkLgorICAgICAgICAod2Via2l0RmF2aWNvbkRhdGFi
YXNlSW1wb3J0RmluaXNoZWQpOiBjaGVjayBwZW5kaW5nIHJlcXVlc3RzIGFuZAorICAgICAgICBk
ZWxldGUgdGhvc2UgdGhhdCBhc2sgZm9yIGljb25zIHRoYXQgZG8gbm90IGV4aXN0IGluIHRoZSBk
YXRhYmFzZS4KKyAgICAgICAgKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsZWFyKTogY2xlYXJz
IHRoZSBkYXRhYmFzZS4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmg6
IGFkZGVkLgorICAgICAgICAoX1dlYktpdEZhdmljb25EYXRhYmFzZSk6CisgICAgICAgIChfV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlQ2xhc3MpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRmYXZpY29u
ZGF0YWJhc2Vwcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIHdlYmtpdC93ZWJraXRnbG9iYWxz
LmNwcDoKKyAgICAgICAgKHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSk6IHJldHJpZXZlcyB0
aGUgbmV3CisgICAgICAgIFdlYktpdEZhdmljb25EYXRhYmFzZS4KKyAgICAgICAgKHdlYmtpdEV4
aXQpOiB1bnJlZiBpY29uIGRhdGFiYXNlIG9uIGV4aXQuCisgICAgICAgICogd2Via2l0L3dlYmtp
dGdsb2JhbHMuaDogYWRkZWQgbmV3IEFQSS4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0aWNvbmRh
dGFiYXNlLmNwcDogYWRkZWQgZGVwcmVjYXRpb24gZG9jdW1lbnRhdGlvbi4KKyAgICAgICAgKHdl
YmtpdF9pY29uX2RhdGFiYXNlX2NsYXNzX2luaXQpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld190cnlfZ2V0X2ljb25fcGl4YnVm
KTogbmV3IEFQSSB0aGF0IHVzZXMgdGhlIG5ldworICAgICAgICBXZWJLaXRGYXZpY29uRGF0YWJh
c2UgQVBJLgorICAgICAgICAod2Via2l0V2ViVmlld0ljb25Mb2FkZWQpOiBkaXNwYXRjaCB0aGUg
aWNvbi1sb2FkZWQgc2lnbmFsIHdoZW4KKyAgICAgICAgcmVxdWVzdGVkIGJ5IHRoZSBGcmFtZUxv
YWRlckNsaWVudC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdSZWdpc3RlckZvckljb25Ob3RpZmlj
YXRpb24pOiBzdGFydHMvc3RvcHMgbGlzdGVuaW5nCisgICAgICAgIHRvIGljb24gZGF0YWJhc2Ug
bm90aWZpY2F0aW9ucy4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5oOiBhZGRlZCBu
ZXcgQVBJLgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3cHJpdmF0ZS5oOiBhZGRlZCBz
b21lIHByb3RlY3RlZCBtZXRob2RzLgorCiAyMDEyLTAzLTAxICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBTaW1wbGlmeSB0aGUgY29k
ZSB0byBhZGp1c3QgZm9udCBzaXplcyBkZXBlbmRpbmcgb24gc2NyZWVuIERQSQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0L2d0ay9H
TlVtYWtlZmlsZS5hbQppbmRleCAwNjliNWIwYTVhOTgzMGM1NjUyZmE0MjYyNDgwM2RmODA3ZjVj
YWM1Li4wNGY5YTcwZmEyNzUxNTcxNjA1ZDVlN2ZlYjQ4ZWYwNjc0ZjI4NmM4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0L2d0
ay9HTlVtYWtlZmlsZS5hbQpAQCAtMTIxLDYgKzEyMSw3IEBAIHdlYmtpdGd0a19zdGF0aWNfaF9h
cGkgKz0gXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5l
cy5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2Fk
LmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZXJyb3IuaCBc
CisJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJh
c2UuaCBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnZW9sb2Nh
dGlvbnBvbGljeWRlY2lzaW9uLmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0Z2xvYmFscy5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGhpdHRlc3RyZXN1bHQuaCBcCkBAIC0yMTksNiArMjIwLDggQEAgd2Via2l0Z3RrX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5jcHAg
XAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZHByaXZhdGUuaCBcCiAJ
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGVycm9yLmNwcCBcCisJU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5jcHAgXAorCVNvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2Vwcml2YXRlLmggXAogCVNvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uLmNwcCBcCiAJU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNpb25wcml2
YXRlLmggXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcCBcCkBA
IC00NDAsNiArNDQzLDcgQEAgVEVTVF9QUk9HUyArPSBcCiAJUHJvZ3JhbXMvdW5pdHRlc3RzL3Rl
c3Rkb21kb213aW5kb3cgXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0ZG9tbm9kZSBcCiAJUHJv
Z3JhbXMvdW5pdHRlc3RzL3Rlc3RodHRwYmFja2VuZCBcCisJUHJvZ3JhbXMvdW5pdHRlc3RzL3Rl
c3RmYXZpY29uZGF0YWJhc2UgXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0bG9hZGluZyBcCiAJ
UHJvZ3JhbXMvdW5pdHRlc3RzL3Rlc3RnbG9iYWxzIFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVz
dG1pbWVoYW5kbGluZyBcCkBAIC00ODgsNiArNDkyLDExIEBAIFByb2dyYW1zX3VuaXR0ZXN0c190
ZXN0aHR0cGJhY2tlbmRfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQogUHJvZ3JhbXNf
dW5pdHRlc3RzX3Rlc3RodHRwYmFja2VuZF9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQog
UHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RodHRwYmFja2VuZF9MREZMQUdTID0gJCh3ZWJraXRfdGVz
dHNfbGRmbGFncykKIAorUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RmYXZpY29uZGF0YWJhc2VfU09V
UkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RmYXZpY29uZGF0YWJhc2UuYyBTb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMKK1Byb2dyYW1zX3VuaXR0ZXN0c190ZXN0
ZmF2aWNvbmRhdGFiYXNlX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKK1Byb2dyYW1z
X3VuaXR0ZXN0c190ZXN0ZmF2aWNvbmRhdGFiYXNlX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRh
ZGQpCitQcm9ncmFtc191bml0dGVzdHNfdGVzdGZhdmljb25kYXRhYmFzZV9MREZMQUdTID0gJCh3
ZWJraXRfdGVzdHNfbGRmbGFncykKKwogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RnbG9iYWxzX1NP
VVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Z2xvYmFscy5jCiBQcm9ncmFtc191
bml0dGVzdHNfdGVzdGdsb2JhbHNfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQogUHJv
Z3JhbXNfdW5pdHRlc3RzX3Rlc3RnbG9iYWxzX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEd0ay5jcHAKaW5kZXggNDJhNDk0NTgzOTZjZmNlM2Q3MDdlMDY5ODE3MDBmNmI5
ODEyYWRiZC4uMWY5N2Q4MDk5M2M1YTFkYjcxMDdhOGVlMjRmM2Y5M2JjMWUyYjhiNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRH
dGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50R3RrLmNwcApAQCAtNjUsOSArNjUsMTAgQEAKICNpbmNsdWRlICJTY3JpcHRDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJ3ZWJraXRlcnJvci5oIgor
I2luY2x1ZGUgIndlYmtpdGZhdmljb25kYXRhYmFzZS5oIgorI2luY2x1ZGUgIndlYmtpdGZhdmlj
b25kYXRhYmFzZXByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzLmgiCiAjaW5jbHVk
ZSAid2Via2l0Z2xvYmFsc3ByaXZhdGUuaCIKLSNpbmNsdWRlICJ3ZWJraXRpY29uZGF0YWJhc2Uu
aCIKICNpbmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVxdWVzdC5oIgogI2luY2x1ZGUgIndlYmtpdG5l
dHdvcmtyZXF1ZXN0cHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmtyZXNwb25zZS5o
IgpAQCAtNjI1LDcgKzYyNiw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpZFBlcmZvcm1G
aXJzdE5hdmlnYXRpb24oKSBjb25zdAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpyZWdpc3Rl
ckZvckljb25Ob3RpZmljYXRpb24oYm9vbCBzaG91bGRSZWdpc3RlcikKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHdlYmtpdFdlYlZpZXdSZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24o
Z2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKSwgc2hvdWxkUmVnaXN0ZXIpOwogfQogCiB2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50OjpzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5KGJvb2wgcmVhZHkpCkBA
IC04MDIsMTggKzgwMywxNCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJl
Y2VpdmVJY29uKCkKICAgICBpZiAobV9sb2FkaW5nRXJyb3JQYWdlKQogICAgICAgICByZXR1cm47
CiAKLSAgICBjb25zdCBnY2hhciogZnJhbWVVUkkgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF91cmko
bV9mcmFtZSk7Ci0gICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9nZXRf
aWNvbl9kYXRhYmFzZSgpOwotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShkYXRhYmFzZSwgImlj
b24tbG9hZGVkIiwgbV9mcmFtZSwgZnJhbWVVUkkpOwotCisgICAgLy8gSWNvbkNvbnRyb2xsZXIg
bG9hZCBpY29ucyBvbmx5IGZvciB0aGUgbWFpbiBmcmFtZS4KICAgICBXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3ID0gZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKTsKKyAgICBBU1NFUlQobV9mcmFtZSA9
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldykpOwogCi0gICAgLy8gQXZv
aWQgcmVwb3J0aW5nIGZhdmljb25zIGZvciBub24tbWFpbiBmcmFtZXMuCi0gICAgaWYgKG1fZnJh
bWUgIT0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1Qod2ViVmlldyksICJpY29uLXVy
aSIpOwotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAiaWNvbi1sb2FkZWQiLCB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKHdlYlZpZXcpKTsKKyAgICBjb25zdCBjaGFyKiBm
cmFtZVVSSSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3VyaShtX2ZyYW1lKTsKKyAgICBXZWJLaXRG
YXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCk7
CisgICAgd2Via2l0RmF2aWNvbkRhdGFiYXNlRGlzcGF0Y2hEaWRSZWNlaXZlSWNvbihkYXRhYmFz
ZSwgZnJhbWVVUkkpOworICAgIHdlYmtpdFdlYlZpZXdJY29uTG9hZGVkKGRhdGFiYXNlLCBmcmFt
ZVVSSSwgd2ViVmlldyk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlk
U3RhcnRQcm92aXNpb25hbExvYWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvZG9j
cy93ZWJraXRndGstc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRn
dGstc2VjdGlvbnMudHh0CmluZGV4IDRhMzU4ZTgzZGJmOTFjMzBiOGRkMjVmZmE1YzJhYjlhOTgz
NTZiMGIuLjVkNzI2N2QxNzk1ZTM1ZmRhNjRmMzExNGI1MTg3NzJlOWMxYzRhNWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLXNlY3Rpb25zLnR4dAorKysgYi9T
b3VyY2UvV2ViS2l0L2d0ay9kb2NzL3dlYmtpdGd0ay1zZWN0aW9ucy50eHQKQEAgLTQ2OCw2ICs0
NjgsNyBAQCB3ZWJraXRfd2ViX3ZpZXdfc2V0X3ZpZXdfbW9kZQogd2Via2l0X3dlYl92aWV3X3Nl
dF92aWV3X3NvdXJjZV9tb2RlCiB3ZWJraXRfd2ViX3ZpZXdfc2V0X3pvb21fbGV2ZWwKIHdlYmtp
dF93ZWJfdmlld19zdG9wX2xvYWRpbmcKK3dlYmtpdF93ZWJfdmlld190cnlfZ2V0X2Zhdmljb25f
cGl4YnVmCiB3ZWJraXRfd2ViX3ZpZXdfdW5kbwogd2Via2l0X3dlYl92aWV3X3VubWFya190ZXh0
X21hdGNoZXMKIHdlYmtpdF93ZWJfdmlld196b29tX2luCkBAIC01MTcsNiArNTE4LDcgQEAgd2Vi
a2l0X2dldF93ZWJfcGx1Z2luX2RhdGFiYXNlCiB3ZWJraXRfcmVtb3ZlX2FsbF93ZWJfZGF0YWJh
c2VzCiB3ZWJraXRfc2V0X2RlZmF1bHRfd2ViX2RhdGFiYXNlX3F1b3RhCiB3ZWJraXRfc2V0X3dl
Yl9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aAord2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlCiB3
ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UKIHdlYmtpdF9nZXRfdGV4dF9jaGVja2VyCiB3ZWJraXRf
c2V0X3RleHRfY2hlY2tlcgpAQCAtNjc0LDYgKzY3NiwzMCBAQCBXZWJLaXRJY29uRGF0YWJhc2VQ
cml2YXRlCiA8L1NFQ1RJT04+CiAKIDxTRUNUSU9OPgorPEZJTEU+d2Via2l0ZmF2aWNvbmRhdGFi
YXNlPC9GSUxFPgorPFRJVExFPldlYktpdEZhdmljb25EYXRhYmFzZTwvVElUTEU+CitXZWJLaXRG
YXZpY29uRGF0YWJhc2UKK3dlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsZWFyCit3ZWJraXRfZmF2
aWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYKK3dlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dl
dF9pY29uX3BpeGJ1Zl9maW5pc2gKK3dlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9pY29uX3Vy
aQord2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X3BhdGgKK3dlYmtpdF9mYXZpY29uX2RhdGFi
YXNlX2dldF90eXBlCit3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9zZXRfcGF0aAord2Via2l0X2Zh
dmljb25fZGF0YWJhc2VfdHJ5X2dldF9pY29uX3BpeGJ1ZgorPFNVQlNFQ1RJT04gU3RhbmRhcmQ+
CitXRUJLSVRfVFlQRV9GQVZJQ09OX0RBVEFCQVNFCitXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRQor
V0VCS0lUX0ZBVklDT05fREFUQUJBU0VfQ0xBU1MKK1dFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0dF
VF9DTEFTUworV0VCS0lUX0lTX0ZBVklDT05fREFUQUJBU0UKK1dFQktJVF9JU19GQVZJQ09OX0RB
VEFCQVNFX0NMQVNTCis8U1VCU0VDVElPTiBQcml2YXRlPgorV2ViS2l0RmF2aWNvbkRhdGFiYXNl
Q2xhc3MKK1dlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUKKzwvU0VDVElPTj4KKworPFNFQ1RJ
T04+CiA8RklMRT53ZWJraXRkZWZpbmVzPC9GSUxFPgogV0VCS0lUX0FQSQogV0VCS0lUR1RLX0FQ
SV9WRVJTSU9OCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZmF2aWNv
bmRhdGFiYXNlLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZmF2aWNvbmRhdGFiYXNl
LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uODMwYWI5NDcyYWM0NGNiNjY0OGYxZjU2YTUyZDY1N2NlNmNlNjc0NAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RmYXZpY29uZGF0
YWJhc2UuYwpAQCAtMCwwICsxLDI4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2Fs
aWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAidGVzdF91dGlscy5oIgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdl
YmtpdC93ZWJraXQuaD4KKworI2RlZmluZSBJQ09OX1NJWkUgMTYKKworI2lmIEdUS19DSEVDS19W
RVJTSU9OKDIsIDE0LCAwKQorR01haW5Mb29wICpsb29wOworY2hhciogYmFzZV91cmk7CisKK3N0
YXRpYyB2b2lkCitzZXJ2ZXJfY2FsbGJhY2soU291cFNlcnZlciAqc2VydmVyLCBTb3VwTWVzc2Fn
ZSAqbXNnLCBjb25zdCBjaGFyICpwYXRoLCBHSGFzaFRhYmxlICpxdWVyeSwgU291cENsaWVudENv
bnRleHQgKmNvbnRleHQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgY2hhciogY29udGVudHM7Cisg
ICAgZ3NpemUgbGVuZ3RoOworCisgICAgaWYgKG1zZy0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dF
VCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX05P
VF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzb3VwX21lc3Nh
Z2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX09LKTsKKworICAgIGlmIChnX3N0cl9lcXVh
bChwYXRoLCAiL2Zhdmljb24uaWNvIikpIHsKKyAgICAgICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7
CisKKyAgICAgICAgZ19maWxlX2dldF9jb250ZW50cygiYmxhbmsuaWNvIiwgJmNvbnRlbnRzLCAm
bGVuZ3RoLCAmZXJyb3IpOworICAgICAgICBnX2Fzc2VydCghZXJyb3IpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGNvbnRlbnRzID0gZ19zdHJkdXAoIjxodG1sPjxib2R5PnRlc3Q8L2JvZHk+PC9o
dG1sPiIpOworICAgICAgICBsZW5ndGggPSBzdHJsZW4oY29udGVudHMpOworICAgIH0KKworICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZ
X1RBS0UsIGNvbnRlbnRzLCBsZW5ndGgpOworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRl
KG1zZy0+cmVzcG9uc2VfYm9keSk7Cit9CisKK3N0YXRpYyB2b2lkIGRlbGV0ZURhdGFiYXNlRmls
ZUlmRXhpc3RzKGNvbnN0IGNoYXIgKmRhdGFiYXNlUGF0aCkKK3sKKyAgICBpZiAoIWdfZmlsZV90
ZXN0KGRhdGFiYXNlUGF0aCwgR19GSUxFX1RFU1RfSVNfRElSKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2hhciAqZGF0YWJhc2VGaWxlbmFtZSA9IGdfYnVpbGRfZmlsZW5hbWUoZGF0YWJhc2VQ
YXRoLCAiV2VicGFnZUljb25zLmRiIiwgTlVMTCk7CisgICAgaWYgKGdfdW5saW5rKGRhdGFiYXNl
RmlsZW5hbWUpID09IC0xKSB7CisgICAgICAgIGdfZnJlZShkYXRhYmFzZUZpbGVuYW1lKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGdfcm1kaXIoZGF0YWJhc2VQYXRoKTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZVNldFBhdGgodm9pZCkKK3sKKyAg
ICBjaGFyICpkYXRhYmFzZVBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3RtcF9kaXIoKSwg
IndlYmtpdC10ZXN0ZmF2aWNvbmRhdGFiYXNlIiwgTlVMTCk7CisgICAgZGVsZXRlRGF0YWJhc2VG
aWxlSWZFeGlzdHMoZGF0YWJhc2VQYXRoKTsKKworICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSAq
ZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKTsKKyAgICB3ZWJraXRfZmF2
aWNvbl9kYXRhYmFzZV9zZXRfcGF0aChkYXRhYmFzZSwgZGF0YWJhc2VQYXRoKTsKKworICAgIGdf
YXNzZXJ0X2NtcHN0cihkYXRhYmFzZVBhdGgsID09LCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9n
ZXRfcGF0aChkYXRhYmFzZSkpOworCisgICAgZ19mcmVlKGRhdGFiYXNlUGF0aCk7Cit9CisKKy8v
IFNlZSB0aGUgY29tbWVudCBpbiBtYWluKCkgZnVuY3Rpb24gdGhhdCBnb2VzIHdpdGggdGhpcyBz
YW1lIGd1YXJkLgorI2lmZGVmIE5ERUJVRworCitzdGF0aWMgdm9pZCBmYXZpY29uRGF0YWJhc2VH
ZXRGYXZpY29uVmFsaWRDYWxsYmFjayhHT2JqZWN0ICpzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3Vs
dCAqcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnYm9vbGVhbiAqYmVlbkhlcmUg
PSAoZ2Jvb2xlYW4qKXVzZXJEYXRhOworICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworICAgIEdk
a1BpeGJ1ZiAqaWNvbiA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1
Zl9maW5pc2goV0VCS0lUX0ZBVklDT05fREFUQUJBU0Uoc291cmNlT2JqZWN0KSwgcmVzdWx0LCAm
ZXJyb3IpOworICAgIGdfYXNzZXJ0KGljb24pOworICAgIGdfb2JqZWN0X3VucmVmKGljb24pOwor
CisgICAgKmJlZW5IZXJlID0gVFJVRTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Cit9
CisKK3N0YXRpYyB2b2lkIGZhdmljb25EYXRhYmFzZUdldEZhdmljb25JbnZhbGlkQ2FsbGJhY2so
R09iamVjdCAqc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgZ3BvaW50ZXIgdXNl
ckRhdGEpCit7CisgICAgZ2Jvb2xlYW4gKmJlZW5IZXJlID0gKGdib29sZWFuKil1c2VyRGF0YTsK
KyAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKyAgICBHZGtQaXhidWYgKmljb24gPSB3ZWJraXRf
ZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWZfZmluaXNoKFdFQktJVF9GQVZJQ09O
X0RBVEFCQVNFKHNvdXJjZU9iamVjdCksIHJlc3VsdCwgJmVycm9yKTsKKyAgICBnX2Fzc2VydCgh
aWNvbik7CisKKyAgICAqYmVlbkhlcmUgPSBUUlVFOworCisgICAgZ19tYWluX2xvb3BfcXVpdChs
b29wKTsKK30KKworc3RhdGljIHZvaWQgZmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbkNhbmNlbGxl
ZENhbGxiYWNrKEdPYmplY3QgKnNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIGdw
b2ludGVyIHVzZXJEYXRhKQoreworICAgIGdib29sZWFuICpiZWVuSGVyZSA9IChnYm9vbGVhbiop
dXNlckRhdGE7CisgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisgICAgR2RrUGl4YnVmICppY29u
ID0gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmX2ZpbmlzaChXRUJL
SVRfRkFWSUNPTl9EQVRBQkFTRShzb3VyY2VPYmplY3QpLCByZXN1bHQsICZlcnJvcik7CisgICAg
Z19hc3NlcnQoIWljb24pOworICAgIGdfYXNzZXJ0KGVycm9yICYmIGdfZXJyb3JfbWF0Y2hlcyhl
cnJvciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKTsKKworICAgICpiZWVuSGVy
ZSA9IFRSVUU7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMgaW5s
aW5lIHZvaWQgbWFpbkxvb3BRdWl0SWZMb2FkQ29tcGxldGVkKGdib29sZWFuKiBpY29uT3JQYWdl
TG9hZGVkKQoreworICAgIGlmICgqaWNvbk9yUGFnZUxvYWRlZCkKKyAgICAgICAgZ19tYWluX2xv
b3BfcXVpdChsb29wKTsKKyAgICBlbHNlCisgICAgICAgICppY29uT3JQYWdlTG9hZGVkID0gVFJV
RTsKK30KKworc3RhdGljIHZvaWQgaWRsZVF1aXRMb29wQ2FsbGJhY2soV2ViS2l0V2ViVmlldyAq
d2ViVmlldywgR1BhcmFtU3BlYyAqcHNwZWMsIGdib29sZWFuKiBpY29uT3JQYWdlTG9hZGVkKQor
eworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2Fk
X3N0YXR1cyh3ZWJWaWV3KTsKKworICAgIGlmIChzdGF0dXMgPT0gV0VCS0lUX0xPQURfRklOSVNI
RUQgfHwgc3RhdHVzID09IFdFQktJVF9MT0FEX0ZBSUxFRCkKKyAgICAgICAgbWFpbkxvb3BRdWl0
SWZMb2FkQ29tcGxldGVkKGljb25PclBhZ2VMb2FkZWQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRXZWJWaWV3SWNvbkxvYWRlZChXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25z
dCBjaGFyKiBmcmFtZVVSSSwgZ2Jvb2xlYW4qIGljb25PclBhZ2VMb2FkZWQpCit7CisgICAgbWFp
bkxvb3BRdWl0SWZMb2FkQ29tcGxldGVkKGljb25PclBhZ2VMb2FkZWQpOworfQorCitzdGF0aWMg
dm9pZCBsb2FkVVJJKGNvbnN0IGNoYXIgKnVyaSkKK3sKKyAgICBXZWJLaXRXZWJWaWV3ICp2aWV3
ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ2Jvb2xlYW4g
aWNvbk9yUGFnZUxvYWRlZCA9IEZBTFNFOworCisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJp
KHZpZXcsIHVyaSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcsICJub3RpZnk6OmxvYWQt
c3RhdHVzIiwgR19DQUxMQkFDSyhpZGxlUXVpdExvb3BDYWxsYmFjayksICZpY29uT3JQYWdlTG9h
ZGVkKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcsICJpY29uLWxvYWRlZCIsIEdfQ0FMTEJB
Q0sod2Via2l0V2ViVmlld0ljb25Mb2FkZWQpLCAmaWNvbk9yUGFnZUxvYWRlZCk7CisKKyAgICBn
X21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0
X21hdGNoZWQodmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgJmljb25PclBh
Z2VMb2FkZWQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gZmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNv
blZhbGlkSWRsZShncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICB3ZWJraXRfZmF2aWNvbl9kYXRh
YmFzZV9nZXRfZmF2aWNvbl9waXhidWYod2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCksIGJh
c2VfdXJpLAorCQkJCQkgICAgICAgSUNPTl9TSVpFLCBJQ09OX1NJWkUsIE5VTEwsCisJCQkJCSAg
ICAgICBmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uVmFsaWRDYWxsYmFjaywgdXNlckRhdGEpOwor
ICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuIGZhdmljb25EYXRhYmFzZUdl
dEZhdmljb25JbnZhbGlkSWRsZShncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICB3ZWJraXRfZmF2
aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWYod2Via2l0X2dldF9mYXZpY29uX2RhdGFi
YXNlKCksICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvIiwKKwkJCQkJICAgICAgIElDT05fU0la
RSwgSUNPTl9TSVpFLCBOVUxMLAorCQkJCQkgICAgICAgZmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNv
bkludmFsaWRDYWxsYmFjaywgdXNlckRhdGEpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3Rh
dGljIGdib29sZWFuIGZhdmljb25EYXRhYmFzZUdldEZhdmljb25DYW5jZWxsZWRJZGxlKGdwb2lu
dGVyIHVzZXJEYXRhKQoreworICAgIEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGUgPSBnX2NhbmNl
bGxhYmxlX25ldygpOworICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3Bp
eGJ1Zih3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKSwgYmFzZV91cmksCisJCQkJCSAgICAg
ICBJQ09OX1NJWkUsIElDT05fU0laRSwgY2FuY2VsbGFibGUsCisJCQkJCSAgICAgICBmYXZpY29u
RGF0YWJhc2VHZXRGYXZpY29uQ2FuY2VsbGVkQ2FsbGJhY2ssIHVzZXJEYXRhKTsKKyAgICBnX2Nh
bmNlbGxhYmxlX2NhbmNlbChjYW5jZWxsYWJsZSk7CisgICAgZ19vYmplY3RfdW5yZWYoY2FuY2Vs
bGFibGUpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdEZh
dmljb25EYXRhYmFzZUdldEZhdmljb24odm9pZCkKK3sKKyAgICBnYm9vbGVhbiBiZWVuVG9JY29u
Q2FsbGJhY2s7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisg
ICAgLyogTG9hZCB1cmkgdG8gbWFrZSBzdXJlIGZhdmljb24gaXMgYWRkZWQgdG8gZGF0YWJhc2Ug
Ki8KKyAgICBsb2FkVVJJKGJhc2VfdXJpKTsKKworICAgIGJlZW5Ub0ljb25DYWxsYmFjayA9IEZB
TFNFOworICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZhdmljb25EYXRhYmFzZUdldEZhdmlj
b25WYWxpZElkbGUsICZiZWVuVG9JY29uQ2FsbGJhY2spOworICAgIGdfbWFpbl9sb29wX3J1bihs
b29wKTsKKyAgICBnX2Fzc2VydChiZWVuVG9JY29uQ2FsbGJhY2spOworCisgICAgYmVlblRvSWNv
bkNhbGxiYWNrID0gRkFMU0U7CisgICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMpZmF2aWNvbkRh
dGFiYXNlR2V0RmF2aWNvbkludmFsaWRJZGxlLCAmYmVlblRvSWNvbkNhbGxiYWNrKTsKKyAgICBn
X21haW5fbG9vcF9ydW4obG9vcCk7CisgICAgZ19hc3NlcnQoYmVlblRvSWNvbkNhbGxiYWNrKTsK
KworICAgIGJlZW5Ub0ljb25DYWxsYmFjayA9IEZBTFNFOworICAgIGdfaWRsZV9hZGQoKEdTb3Vy
Y2VGdW5jKWZhdmljb25EYXRhYmFzZUdldEZhdmljb25DYW5jZWxsZWRJZGxlLCAmYmVlblRvSWNv
bkNhbGxiYWNrKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisgICAgZ19hc3NlcnQoYmVl
blRvSWNvbkNhbGxiYWNrKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdEZhdmljb25EYXRh
YmFzZUdldEZhdmljb25VUkkodm9pZCkKK3sKKyAgICBjaGFyICppY29uVVJJID0gd2Via2l0X2Zh
dmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFz
ZSgpLCBiYXNlX3VyaSk7CisgICAgY2hhciAqZXhwZWN0ZWRVUkkgPSBnX3N0cmR1cF9wcmludGYo
IiVzZmF2aWNvbi5pY28iLCBiYXNlX3VyaSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGljb25VUkks
ID09LCBleHBlY3RlZFVSSSk7CisgICAgZ19mcmVlKGV4cGVjdGVkVVJJKTsKKyAgICBnX2ZyZWUo
aWNvblVSSSk7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RmF2aWNvbkRh
dGFiYXNlUmVtb3ZlQWxsKHZvaWQpCit7CisgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlICpkYXRh
YmFzZSA9IHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpOworICAgIHdlYmtpdF9mYXZpY29u
X2RhdGFiYXNlX2NsZWFyKGRhdGFiYXNlKTsKKyAgICBjaGFyICppY29uVVJJID0gd2Via2l0X2Zh
dmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKGRhdGFiYXNlLCBiYXNlX3VyaSk7CisgICAg
Z19hc3NlcnQoIWljb25VUkkpOworICAgIGdfZnJlZShpY29uVVJJKTsKK30KKworc3RhdGljIHZv
aWQgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUNsb3NlRGF0YWJhc2Uodm9pZCkKK3sKKyAgICBX
ZWJLaXRGYXZpY29uRGF0YWJhc2UgKmRhdGFiYXNlID0gd2Via2l0X2dldF9mYXZpY29uX2RhdGFi
YXNlKCk7CisgICAgY2hhciAqZGF0YWJhc2VQYXRoID0gZ19zdHJkdXAod2Via2l0X2Zhdmljb25f
ZGF0YWJhc2VfZ2V0X3BhdGgoZGF0YWJhc2UpKTsKKyAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFz
ZV9zZXRfcGF0aChkYXRhYmFzZSwgMCk7CisgICAgZGVsZXRlRGF0YWJhc2VGaWxlSWZFeGlzdHMo
ZGF0YWJhc2VQYXRoKTsKKyAgICBnX2ZyZWUoZGF0YWJhc2VQYXRoKTsKK30KKworaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIFNvdXBTZXJ2ZXIqIHNlcnZlcjsKKyAgICBT
b3VwVVJJKiBzb3VwX3VyaTsKKworICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCAwKTsK
KworICAgIC8qIEhvcGVmdWxseSBtYWtlIHRlc3QgaW5kZXBlbmRlbnQgb2YgdGhlIHBhdGggaXQn
cyBjYWxsZWQgZnJvbS4gKi8KKyAgICB0ZXN0dXRpbHNfcmVsYXRpdmVfY2hkaXIoIlNvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0Lmh0bWwiLCBhcmd2WzBdKTsKKworICAgIHNl
cnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsKKyAgICBz
b3VwX3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKKworICAgIHNvdXBfc2VydmVyX2FkZF9oYW5k
bGVyKHNlcnZlciwgTlVMTCwgc2VydmVyX2NhbGxiYWNrLCBOVUxMLCBOVUxMKTsKKworICAgIHNv
dXBfdXJpID0gc291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4xLyIpOworICAgIHNvdXBfdXJp
X3NldF9wb3J0KHNvdXBfdXJpLCBzb3VwX3NlcnZlcl9nZXRfcG9ydChzZXJ2ZXIpKTsKKworICAg
IGJhc2VfdXJpID0gc291cF91cmlfdG9fc3RyaW5nKHNvdXBfdXJpLCBGQUxTRSk7CisgICAgc291
cF91cmlfZnJlZShzb3VwX3VyaSk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVn
cy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0
YWJhc2Uvc2V0LXBhdGgiLCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlU2V0UGF0aCk7CisKKyAg
ICAvLyBUaGVzZSB0d28gdGVzdHMgd2lsbCB0cmlnZ2VyIGFuIEFTU0VSVElPTiBvbiBkZWJ1ZyBi
dWlsZHMgZHVlCisgICAgLy8gdG8gaHR0cDovL3dlYmtpdC5vcmcvYi82NzU4Mi4gUmVtb3ZlIHRo
ZSBndWFyZHMgb25jZSB0aGUgYnVnIGlzIGZpeGVkLgorI2lmZGVmIE5ERUJVRworICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0YWJhc2UvZ2V0LWZhdmljb24iLCB0ZXN0V2Vi
S2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Vi
a2l0L2Zhdmljb25kYXRhYmFzZS9nZXQtZmF2aWNvbi11cmkiLCB0ZXN0V2ViS2l0RmF2aWNvbkRh
dGFiYXNlR2V0RmF2aWNvblVSSSk7CisjZW5kaWYKKworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC9mYXZpY29uZGF0YWJhc2UvcmVtb3ZlLWFsbCIsIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJh
c2VSZW1vdmVBbGwpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0YWJh
c2UvY2xvc2UtZGIiLCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlQ2xvc2VEYXRhYmFzZSk7CisK
KyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQorI2Vsc2UKK2ludCBtYWluKGludCBhcmdjLCBj
aGFyICoqYXJndikKK3sKKyAgICBnX2NyaXRpY2FsKCJZb3Ugd2lsbCBuZWVkIGd0ay0yLjE0LjAg
dG8gcnVuIHRoZSB1bml0IHRlc3RzLiBEb2luZyBub3RoaW5nIG5vdy4iKTsKKyAgICByZXR1cm4g
MDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0LmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgKaW5kZXggNzE0NTFiMTUz
NzE0ZDY0NDAzZjY1MmYyYzlmOTFkN2QxNmY5MmJkYy4uYzdlOTVlOGVkNGYwODE2ZGE2OWY2NjM4
NTI4YjgxNDFhNDhiZjhjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaApAQCAtMjcsNiAr
MjcsNyBAQAogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkb20uaD4KICNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0ZG93bmxvYWQuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZW51bXR5cGVzLmg+Cisj
aW5jbHVkZSA8d2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5oPgogI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dl
YmtpdGdsb2JhbHMuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0aGl0dGVzdHJlc3VsdC5oPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKaW5kZXggNjczYmJkZmU2MWQy
NzYxNTdiNGRmNDlkYTdlYzcyOTJjZmRiMDFhOC4uODkwOTliOWI5OGNmZDA5NDY5YTFiYzMxNjI1
NDQ1OGZhNDBkNDgzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dGRlZmluZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5o
CkBAIC0xMDcsNiArMTA3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlBsdWdpbkNsYXNz
IFdlYktpdFdlYlBsdWdpbkNsYXNzOwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNwZWxsQ2hlY2tl
ciBXZWJLaXRTcGVsbENoZWNrZXI7IC8qIGR1bW15IHR5cGVkZWYgKi8KIHR5cGVkZWYgc3RydWN0
IF9XZWJLaXRTcGVsbENoZWNrZXJJbnRlcmZhY2UgV2ViS2l0U3BlbGxDaGVja2VySW50ZXJmYWNl
OwogCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmF2aWNvbkRhdGFiYXNlIFdlYktpdEZhdmljb25E
YXRhYmFzZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGYXZpY29uRGF0YWJhc2VDbGFzcyBXZWJL
aXRGYXZpY29uRGF0YWJhc2VDbGFzczsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2UuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjNlMGMyYzc1YzgwM2YyMzI4MDAwZWE0YjM5MTI0Njg4YzIzNjkzZTkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNl
LmNwcApAQCAtMCwwICsxLDcyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBDaHJpc3Rp
YW4gRHl3YW4gPGNocmlzdGlhbkBsYW5lZG8uY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEyIEln
YWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ3ZWJraXRmYXZpY29uZGF0
YWJhc2UuaCIKKworI2luY2x1ZGUgIkRhdGFiYXNlRGV0YWlscy5oIgorI2luY2x1ZGUgIkRhdGFi
YXNlVHJhY2tlci5oIgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJHUmVmUHRy
LmgiCisjaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSWNvbkRhdGFiYXNlQ2xp
ZW50LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVk
ZSAid2Via2l0ZmF2aWNvbmRhdGFiYXNlcHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdGdsb2Jh
bHMuaCIKKyNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtp
dG1hcnNoYWwuaCIKKyNpbmNsdWRlICJ3ZWJraXRzZWN1cml0eW9yaWdpbnByaXZhdGUuaCIKKyNp
bmNsdWRlICJ3ZWJraXR3ZWJmcmFtZS5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+Cisj
aW5jbHVkZSA8c3FsaXRlMy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworLyoqCisgKiBTRUNUSU9OOndlYmtpdHdl
YmRhdGFiYXNlCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEEgV2ViS2l0IHdlYiBhcHBsaWNhdGlv
biBkYXRhYmFzZQorICoKKyAqICNXZWJLaXRGYXZpY29uRGF0YWJhc2UgcHJvdmlkZXMgYWNjZXNz
IHRvIHdlYnNpdGUgaWNvbnMsIGFzIHNob3duCisgKiBpbiB0YWIgbGFiZWxzLCB3aW5kb3cgY2Fw
dGlvbnMgb3IgYm9va21hcmtzLiBBbGwgdmlld3Mgc2hhcmUKKyAqIHRoZSBzYW1lIGljb24gZGF0
YWJhc2UuCisgKgorICogVGhlIGRhdGFiYXNlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuIEluIG9y
ZGVyIGZvciBpY29ucyB0byBiZQorICogbG9hZGVkLCB5b3Ugd2lsbCBuZWVkIHRvIHNldCBhbiBp
Y29uIGRhdGFiYXNlIHBhdGggdXNpbmcKKyAqIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3NldF9w
YXRoKCkuIERpc2FibGUgdGhlIGRhdGFiYXNlIGFnYWluIHBhc3NpbmcKKyAqICVOVUxMIHRvIHRo
ZSBwcmV2aW91cyBjYWxsLgorICoKKyAqIFdlYktpdCB3aWxsIGF1dG9tYXRpY2FsbHkgbG9vayBm
b3IgYXZhaWxhYmxlIGljb25zIGluIGxpbmsgZWxlbWVudHMKKyAqIG9uIG9wZW5lZCBwYWdlcyBh
cyB3ZWxsIGFzIGFuIGV4aXN0aW5nIGZhdmljb24uaWNvIGFuZCBsb2FkIHRoZQorICogaW1hZ2Vz
IGZvdW5kIGludG8gdGhlIG1lbW9yeSBjYWNoZSBpZiBwb3NzaWJsZS4KKyAqCisgKiBJZiBXZWJL
aXRXZWJTZXR0aW5nczo6ZW5hYmxlLXByaXZhdGUtYnJvd3NpbmcgaXMgJVRSVUUgbmV3IGljb25z
CisgKiB3b24ndCBiZSBhZGRlZCB0byB0aGUgZGF0YWJhc2Ugb24gZGlzayBhbmQgbm8gZXhpc3Rp
bmcgaWNvbnMgd2lsbAorICogYmUgZGVsZXRlZCBmcm9tIGl0LgorICoKKyAqIEljb25zIHdpbGwg
YmUgYXV0b21hdGljYWxseSBwdXJnZWQgYWZ0ZXIgMzAgZGF5cyB3aXRob3V0IGJlaW5nCisgKiB1
c2VkLgorICoKKyAqIFNpbmNlOiAxLjgKKyAqLworCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8vIEljb25zIHdpbGwgZXhwaXJlIGFmdGVyIDMw
IGRheXMuCisjZGVmaW5lIElDT05fRVhQSVJBVElPTl9USU1FIDYwKjYwKjI0KjMwCisKK2NsYXNz
IFBlbmRpbmdJY29uUmVxdWVzdDsKKworc3RhdGljIHZvaWQgd2Via2l0RmF2aWNvbkRhdGFiYXNl
UHJvY2Vzc1BlbmRpbmdJY29uc0ZvclVSSShXZWJLaXRGYXZpY29uRGF0YWJhc2UqLCBjb25zdCBT
dHJpbmcmIHBhZ2VVUkkpOworc3RhdGljIHZvaWQgd2Via2l0RmF2aWNvbkRhdGFiYXNlSW1wb3J0
RmluaXNoZWQoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKik7CitzdGF0aWMgdm9pZCB3ZWJraXRGYXZp
Y29uRGF0YWJhc2VHZXRJY29uUGl4YnVmQ2FuY2VsbGVkKEdDYW5jZWxsYWJsZSosIFBlbmRpbmdJ
Y29uUmVxdWVzdCopOworc3RhdGljIHZvaWQgd2Via2l0RmF2aWNvbkRhdGFiYXNlTm90aWZ5QW5k
VXBkYXRlRXhwaXJhdGlvbihXZWJLaXRGYXZpY29uRGF0YWJhc2UqLCBjb25zdCBjaGFyKiBwYWdl
VVJJKTsKK3N0YXRpYyB2b2lkIHdlYmtpdEZhdmljb25EYXRhYmFzZUNsb3NlKFdlYktpdEZhdmlj
b25EYXRhYmFzZSogZGF0YWJhc2UpOworCitjbGFzcyBJY29uRGF0YWJhc2VDbGllbnRHdGsgOiBw
dWJsaWMgSWNvbkRhdGFiYXNlQ2xpZW50IHsKK3B1YmxpYzoKKworICAgIC8vIEljb25EYXRhYmFz
ZUNsaWVudCBpbnRlcmZhY2UKKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybUltcG9ydCgpIHsgcmV0
dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlQWxsSWNvbnMoKSB7IH07CisK
KyAgICAvLyBDYWxsZWQgd2hlbiB0aGUgYW4gaWNvbiBpcyByZXF1ZXN0ZWQgd2hpbGUgdGhlIGlu
aXRpYWwKKyAgICAvLyBpbXBvcnQgaXMgZ29pbmcgb24uCisgICAgdmlydHVhbCB2b2lkIGRpZElt
cG9ydEljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgVVJMKSB7IH07CisKKyAgICAvLyBD
YWxsZWQgd2hlbmV2ZXIgYSByZXRhaW5lZCBpY29uIGlzIHJlYWQgZnJvbSBkYXRhYmFzZS4KKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkSW1wb3J0SWNvbkRhdGFGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYg
VVJMKQorICAgIHsKKyAgICAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdl
YmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpOworICAgICAgICAvLyBXZSBuZWVkIHRvIGVtaXQg
dGhpcyBoZXJlIGJlY2F1c2Ugd2Via2l0RmF2aWNvbkRhdGFiYXNlRGlzcGF0Y2hEaWRSZWNlaXZl
SWNvbigpCisgICAgICAgIC8vIGlzIG9ubHkgY2FsbGVkIGZvciBpY29ucyB0aGF0IGhhdmUganVz
dCBiZWluZyBkb3dubG9hZGVkLCBhbmQgdGhpcyBpcyBjYWxsZWQKKyAgICAgICAgLy8gd2hlbiBp
Y29uIGRhdGEgaXMgaW1wb3J0ZWQgZnJvbSB0aGUgZGF0YWJhc2UuCisgICAgICAgIHdlYmtpdEZh
dmljb25EYXRhYmFzZU5vdGlmeUFuZFVwZGF0ZUV4cGlyYXRpb24oZGF0YWJhc2UsIFVSTC51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgd2Via2l0RmF2aWNvbkRhdGFiYXNlUHJvY2Vzc1BlbmRpbmdJ
Y29uc0ZvclVSSShkYXRhYmFzZSwgVVJMKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
Q2hhbmdlSWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBVUkwpCisgICAgeworICAgICAgICAv
LyBDYWxsZWQgd2hlbiB0aGUgdGhlIGZhdmljb24gZm9yIGEgcGFydGljdWxhciBVUkwgY2hhbmdl
cy4KKyAgICAgICAgLy8gSXQgZG9lcyBub3QgbWVhbiB0aGF0IHRoZSBuZXcgaWNvbiBkYXRhIGlz
IGF2YWlsYWJsZSB5ZXQuCisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaFVSTElt
cG9ydCgpCisgICAgeworICAgICAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0g
d2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCk7CisgICAgICAgIHdlYmtpdEZhdmljb25EYXRh
YmFzZUltcG9ydEZpbmlzaGVkKGRhdGFiYXNlKTsKKworICAgICAgICAvLyBOb3cgdGhhdCBldmVy
eXRoaW5nIGlzIGltcG9ydGVkIGVuYWJsZSBwcnVuaW5nIG9mIG9sZAorICAgICAgICAvLyBpY29u
cy4gTm8gaWNvbiB3aWxsIGJlIHJlbW92ZWQgZHVyaW5nIHRoZSBpbXBvcnQgcHJvY2VzcworICAg
ICAgICAvLyBiZWNhdXNlIHdlIGRpc2FibGUgY2xlYW51cHMgYmVmb3JlIG9wZW5pbmcgdGhlIGRh
dGFiYXNlLgorICAgICAgICBJY29uRGF0YWJhc2U6OmFsbG93RGF0YWJhc2VDbGVhbnVwKCk7Cisg
ICAgfQorfTsKKworY2xhc3MgUGVuZGluZ0ljb25SZXF1ZXN0IHsKK3B1YmxpYzoKKyAgICBQZW5k
aW5nSWNvblJlcXVlc3QoY29uc3QgU3RyaW5nJiBwYWdlVVJJLCBHU2ltcGxlQXN5bmNSZXN1bHQq
IHJlc3VsdCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgSW50U2l6ZSBpY29uU2l6ZSkKKyAg
ICAgICAgOiBtX3BhZ2VVUkkocGFnZVVSSSkKKyAgICAgICAgLCBtX2FzeW5jUmVzdWx0KHJlc3Vs
dCkKKyAgICAgICAgLCBtX2NhbmNlbGxhYmxlKGNhbmNlbGxhYmxlKQorICAgICAgICAsIG1fY2Fu
Y2VsbGVkSWQoMCkKKyAgICAgICAgLCBtX2ljb25TaXplKGljb25TaXplKQorICAgIHsKKyAgICAg
ICAgaWYgKCFjYW5jZWxsYWJsZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2Nh
bmNlbGxlZElkID0gZ19jYW5jZWxsYWJsZV9jb25uZWN0KGNhbmNlbGxhYmxlLCBHX0NBTExCQUNL
KHdlYmtpdEZhdmljb25EYXRhYmFzZUdldEljb25QaXhidWZDYW5jZWxsZWQpLCB0aGlzLCAwKTsK
KyAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGFfZnVsbChHX09CSkVDVChyZXN1bHQpLCAiY2FuY2Vs
bGFibGUiLCBnX29iamVjdF9yZWYoY2FuY2VsbGFibGUpLCBzdGF0aWNfY2FzdDxHRGVzdHJveU5v
dGlmeT4oZ19vYmplY3RfdW5yZWYpKTsKKyAgICB9CisKKyAgICB+UGVuZGluZ0ljb25SZXF1ZXN0
KCkKKyAgICB7CisgICAgICAgIGlmIChtX2NhbmNlbGxlZElkID4gMCkKKyAgICAgICAgICAgIGdf
Y2FuY2VsbGFibGVfZGlzY29ubmVjdChtX2NhbmNlbGxhYmxlLmdldCgpLCBtX2NhbmNlbGxlZElk
KTsKKyAgICB9CisKKyAgICBjb25zdCBTdHJpbmcmIHBhZ2VVUkkoKSB7IHJldHVybiBtX3BhZ2VV
Ukk7IH0KKyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIGFzeW5jUmVzdWx0KCkgeyByZXR1cm4gbV9h
c3luY1Jlc3VsdC5nZXQoKTsgfQorCisgICAgdm9pZCBhc3luY1Jlc3VsdENhbmNlbCgpCisgICAg
eworICAgICAgICBBU1NFUlQobV9hc3luY1Jlc3VsdCk7CisgICAgICAgIGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9zZXRfZXJyb3IobV9hc3luY1Jlc3VsdC5nZXQoKSwgR19JT19FUlJPUiwgR19JT19F
UlJPUl9DQU5DRUxMRUQsICIlcyIsIF8oIk9wZXJhdGlvbiB3YXMgY2FuY2VsbGVkIikpOworICAg
ICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUobV9hc3luY1Jlc3VsdC5nZXQoKSk7
CisgICAgfQorCisgICAgdm9pZCBhc3luY1Jlc3VsdENvbXBsZXRlSW5JZGxlKEdka1BpeGJ1Ziog
aWNvbikKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2FzeW5jUmVzdWx0KTsKKyAgICAgICAgZ19z
aW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3BvaW50ZXIobV9hc3luY1Jlc3VsdC5nZXQo
KSwgaWNvbiwgaWNvbiA/IHN0YXRpY19jYXN0PEdEZXN0cm95Tm90aWZ5PihnX29iamVjdF91bnJl
ZikgOiAwKTsKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUo
bV9hc3luY1Jlc3VsdC5nZXQoKSk7CisgICAgfQorCisgICAgdm9pZCBhc3luY1Jlc3VsdENvbXBs
ZXRlKEdka1BpeGJ1ZiogaWNvbikKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2FzeW5jUmVzdWx0
KTsKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3BvaW50ZXIobV9h
c3luY1Jlc3VsdC5nZXQoKSwgaWNvbiwgaWNvbiA/IHN0YXRpY19jYXN0PEdEZXN0cm95Tm90aWZ5
PihnX29iamVjdF91bnJlZikgOiAwKTsKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2Nv
bXBsZXRlKG1fYXN5bmNSZXN1bHQuZ2V0KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBTdHJp
bmcgbV9wYWdlVVJJOworICAgIEdSZWZQdHI8R1NpbXBsZUFzeW5jUmVzdWx0PiBtX2FzeW5jUmVz
dWx0OworICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOworICAgIGd1bG9u
ZyBtX2NhbmNlbGxlZElkOworICAgIEludFNpemUgbV9pY29uU2l6ZTsKK307CisKKworZW51bSB7
CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9QQVRILAorfTsKKworZW51bSB7CisgICAgSUNPTl9M
T0FERUQsCisKKyAgICBMQVNUX1NJR05BTAorfTsKKworc3RhdGljIGd1aW50IHdlYmtpdF9mYXZp
Y29uX2RhdGFiYXNlX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OworCitHX0RFRklORV9U
WVBFKFdlYktpdEZhdmljb25EYXRhYmFzZSwgd2Via2l0X2Zhdmljb25fZGF0YWJhc2UsIEdfVFlQ
RV9PQkpFQ1QpCisKK3R5cGVkZWYgVmVjdG9yPE93blB0cjxQZW5kaW5nSWNvblJlcXVlc3Q+ID4g
UGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yOwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUGVuZGlu
Z0ljb25SZXF1ZXN0VmVjdG9yKj4gUGVuZGluZ0ljb25SZXF1ZXN0TWFwOworCitzdHJ1Y3QgX1dl
YktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUgeworICAgIEdPd25QdHI8Z2NoYXI+IHBhdGg7Cisg
ICAgSWNvbkRhdGFiYXNlQ2xpZW50R3RrIGljb25EYXRhYmFzZUNsaWVudDsKKyAgICBQZW5kaW5n
SWNvblJlcXVlc3RNYXAgcGVuZGluZ0ljb25SZXF1ZXN0czsKKyAgICBib29sIGltcG9ydEZpbmlz
aGVkOworICAgIHNxbGl0ZTMqIGV4cGlyYXRpb25UaW1lc0RhdGFiYXNlOworfTsKKworc3RhdGlj
IHZvaWQgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQor
eworICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSBXRUJLSVRfRkFWSUNPTl9E
QVRBQkFTRShvYmplY3QpOworCisgICAgd2Via2l0RmF2aWNvbkRhdGFiYXNlQ2xvc2UoZGF0YWJh
c2UpOworICAgIGRhdGFiYXNlLT5wcml2LT5+V2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZSgp
OworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfcGFyZW50X2Ns
YXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Zhdmljb25f
ZGF0YWJhc2VfZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgR19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X2Zhdmljb25fZGF0YWJhc2VfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmplY3QpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9zZXRfcHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQoreworICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSBXRUJL
SVRfRkFWSUNPTl9EQVRBQkFTRShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wSWQpIHsKKyAg
ICBjYXNlIFBST1BfUEFUSDoKKyAgICAgICAgd2Via2l0X2Zhdmljb25fZGF0YWJhc2Vfc2V0X3Bh
dGgoZGF0YWJhc2UsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wSWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfcHJvcGVydHkoR09iamVjdCogb2Jq
ZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQorewor
ICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSBXRUJLSVRfRkFWSUNPTl9EQVRB
QkFTRShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIFBST1BfUEFU
SDoKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZmF2aWNvbl9kYXRh
YmFzZV9nZXRfcGF0aChkYXRhYmFzZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQs
IHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZmF2aWNvbl9kYXRhYmFzZV9jbGFzc19pbml0KFdlYktpdEZhdmljb25EYXRhYmFzZUNsYXNzKiBr
bGFzcykKK3sKKyAgICB3ZWJraXRJbml0KCk7CisKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RD
bGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmRpc3Bvc2Ug
PSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9kaXNwb3NlOworICAgIGdvYmplY3RDbGFzcy0+Zmlu
YWxpemUgPSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xh
c3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3NldF9wcm9wZXJ0eTsK
KyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNl
X2dldF9wcm9wZXJ0eTsKKworICAgICAvKioKKyAgICAgICogV2ViS2l0RmF2aWNvbkRhdGFiYXNl
OnBhdGg6CisgICAgICAqCisgICAgICAqIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBpY29uIGRh
dGFiYXNlIGZvbGRlci4KKyAgICAgICoKKyAgICAgICogU2luY2U6IDEuOAorICAgICAgKi8KKyAg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsIFBST1BfUEFU
SCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKCJwYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF8oIlBhdGgiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBpY29u
IGRhdGFiYXNlIGZvbGRlciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
CisgICAgIC8qKgorICAgICAgKiBXZWJLaXRGYXZpY29uRGF0YWJhc2U6Omljb24tbG9hZGVkOgor
ICAgICAgKiBAZGF0YWJhc2U6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0
dGVkCisgICAgICAqIEBmcmFtZV91cmk6IHRoZSBVUkkgb2YgdGhlIGZyYW1lIGNvbnRhaW5pbmcg
dGhlIGljb24KKyAgICAgICoKKyAgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIGEg
ZmF2aWNvbiBpcyBhdmFpbGFibGUgZm9yIHRoZQorICAgICAgKiBtYWluIGZyYW1lIG9mIGEgcGFn
ZS4gU2VlICNXZWJLaXRXZWJWaWV3OjppY29uLWxvYWRlZCBpZiB5b3UKKyAgICAgICogb25seSBu
ZWVkIHRoZSBmYXZpY29uIG9mIGEgcGFydGljdWxhciAjV2ViS2l0V2ViVmlldy4KKyAgICAgICoK
KyAgICAgICogTm90ZSB0aGF0IHRoaXMgc2lnbmFsIGNhcnJpZXMgdGhlIFVSSSBvZiB0aGUgZnJh
bWUgdGhhdCBsb2FkcworICAgICAgKiB0aGUgaWNvbiwgd2hpbGUgI1dlYktpdFdlYlZpZXc6Omlj
b24tbG9hZGVkIHByb3ZpZGVzIHRoZSBVUkkKKyAgICAgICogb2YgdGhlIGZhdmljb24uCisgICAg
ICAqCisgICAgICAqIFNpbmNlOiAxLjgKKyAgICAgICovCisgICAgIHdlYmtpdF9mYXZpY29uX2Rh
dGFiYXNlX3NpZ25hbHNbSUNPTl9MT0FERURdID0gZ19zaWduYWxfbmV3KCJpY29uLWxvYWRlZCIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGtsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdTaWduYWxGbGFncylHX1NJ
R05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Vi
a2l0X21hcnNoYWxfVk9JRF9fU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19U
WVBFX1NUUklORyk7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVv
ZihXZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9mYXZpY29uX2RhdGFiYXNlX2luaXQoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkK
K3sKKyAgICBkYXRhYmFzZS0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShkYXRh
YmFzZSwgV0VCS0lUX1RZUEVfRkFWSUNPTl9EQVRBQkFTRSwgV2ViS2l0RmF2aWNvbkRhdGFiYXNl
UHJpdmF0ZSk7CisgICAgbmV3IChkYXRhYmFzZS0+cHJpdikgV2ViS2l0RmF2aWNvbkRhdGFiYXNl
UHJpdmF0ZSgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRGYXZpY29uRGF0YWJhc2VOb3RpZnlB
bmRVcGRhdGVFeHBpcmF0aW9uKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0
IGNoYXIqIHBhZ2VVUkkpCit7CisgICAgZ19zaWduYWxfZW1pdChkYXRhYmFzZSwgd2Via2l0X2Zh
dmljb25fZGF0YWJhc2Vfc2lnbmFsc1tJQ09OX0xPQURFRF0sIDAsIHBhZ2VVUkkpOworCisgICAg
aWYgKGRhdGFiYXNlLT5wcml2LT5leHBpcmF0aW9uVGltZXNEYXRhYmFzZSkgeworICAgICAgICBj
b25zdCBjaGFyKiB1cGRhdGVRdWVyeUZvcm1hdCA9ICJVUERBVEUgZXhwaXJhdGlvbiBTRVQgZXhw
aXJlcyA9ICclZCcgV0hFUkUgdXJsID0gJyVzJyI7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gdXBk
YXRlUXVlcnkoZ19zdHJkdXBfcHJpbnRmKHVwZGF0ZVF1ZXJ5Rm9ybWF0LCAoaW50KWN1cnJlbnRU
aW1lKCksIHBhZ2VVUkkpKTsKKworICAgICAgICBpbnQgcmV0dmFsID0gc3FsaXRlM19leGVjKGRh
dGFiYXNlLT5wcml2LT5leHBpcmF0aW9uVGltZXNEYXRhYmFzZSwgdXBkYXRlUXVlcnkuZ2V0KCks
IDAsIDAsIDApOworICAgICAgICBpZiAocmV0dmFsID09IFNRTElURV9PSyAmJiAhc3FsaXRlM19j
aGFuZ2VzKGRhdGFiYXNlLT5wcml2LT5leHBpcmF0aW9uVGltZXNEYXRhYmFzZSkpIHsKKyAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGluc2VydFF1ZXJ5Rm9ybWF0ID0gIklOU0VSVCBJTlRPIGV4cGly
YXRpb24gKHVybCwgZXhwaXJlcykgVkFMVUVTICgnJXMnLCclZCcpIjsKKyAgICAgICAgICAgIEdP
d25QdHI8Y2hhcj4gaW5zZXJ0UXVlcnkoZ19zdHJkdXBfcHJpbnRmKGluc2VydFF1ZXJ5Rm9ybWF0
LCBwYWdlVVJJLCAoaW50KWN1cnJlbnRUaW1lKCkpKTsKKworICAgICAgICAgICAgc3FsaXRlM19l
eGVjKGRhdGFiYXNlLT5wcml2LT5leHBpcmF0aW9uVGltZXNEYXRhYmFzZSwgaW5zZXJ0UXVlcnku
Z2V0KCksIDAsIDAsIDApOworICAgICAgICB9CisgICAgfQorfQorCisvLyBDYWxsZWQgZnJvbSBG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlSWNvbigpCit2b2lkIHdlYmtpdEZh
dmljb25EYXRhYmFzZURpc3BhdGNoRGlkUmVjZWl2ZUljb24oV2ViS2l0RmF2aWNvbkRhdGFiYXNl
KiBkYXRhYmFzZSwgY29uc3QgY2hhciogZnJhbWVVUkkpCit7CisgICAgd2Via2l0RmF2aWNvbkRh
dGFiYXNlTm90aWZ5QW5kVXBkYXRlRXhwaXJhdGlvbihkYXRhYmFzZSwgZnJhbWVVUkkpOworCisg
ICAgLy8gUmV0YWluIHRoZSBuZXcgaWNvbi4KKyAgICBpY29uRGF0YWJhc2UoKS5yZXRhaW5JY29u
Rm9yUGFnZVVSTChTdHJpbmc6OmZyb21VVEY4KGZyYW1lVVJJKSk7Cit9CisKKy8qKgorICogd2Vi
a2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X3BhdGg6CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEZh
dmljb25EYXRhYmFzZQorICoKKyAqIERldGVybWluZXMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhl
IGRhdGFiYXNlIGZvbGRlciBvbiBkaXNrLgorICoKKyAqIFJldHVybnM6IHRoZSBhYnNvbHV0ZSBw
YXRoIG9mIHRoZSBkYXRhYmFzZSBmb2xkZXIsIG9yICVOVUxMCisgKgorICogU2luY2U6IDEuOAor
ICoqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9wYXRoKFdlYktp
dEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX0ZBVklDT05fREFUQUJBU0UoZGF0YWJhc2UpLCAwKTsKKworICAgIHJldHVybiBk
YXRhYmFzZS0+cHJpdi0+cGF0aC5nZXQoKTsKK30KKworc3RhdGljIGludAorc2VsZWN0UXVlcnlD
YWxsYmFjayh2b2lkICp1c2VyRGF0YSwgaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjaGFyICoqY29s
dW1uTmFtZXMpCit7CisgICAgU3RyaW5nIHBhZ2VVUkwgPSBTdHJpbmc6OmZyb21VVEY4KGFyZ3Zb
MF0pOworICAgIC8vIFllcyBJIGtub3cgdGhpcyBzZWVtcyBzdHVwaWQgYnV0IHdlIG5lZWQgdGhp
cyB0byBnZXQgaWNvbnMKKyAgICAvLyBhY3R1YWxseSBwdXJnZWQgZHVlIHRvIGhvdyB0aGUgSWNv
bkRhdGFiYXNlIHdvcmtzLiBJdCB3b24ndAorICAgIC8vIGRlbGV0ZSBhbnkgaWNvbiB0aGF0IGlz
IG5vdCBpbiBhIGxpc3Qgd2hpY2ggY29udGFpbnMgYW1vbmcKKyAgICAvLyBvdGhlcnMgdGhlIGFs
cmVhZHkgcmV0YWluZWQgaWNvbnMuCisgICAgaWNvbkRhdGFiYXNlKCkucmV0YWluSWNvbkZvclBh
Z2VVUkwocGFnZVVSTCk7CisgICAgaWNvbkRhdGFiYXNlKCkucmVsZWFzZUljb25Gb3JQYWdlVVJM
KHBhZ2VVUkwpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEZhdmlj
b25EYXRhYmFzZVBydW5lRXhwaXJlZEljb25zKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJh
c2UpCit7CisgICAgaW50IGxhc3RWYWxpZFRpbWUgPSAoaW50KSBjdXJyZW50VGltZSgpIC0gSUNP
Tl9FWFBJUkFUSU9OX1RJTUU7CisgICAgR093blB0cjxjaGFyPiBzZWxlY3REZWxldGVRdWVyeShn
X3N0cmR1cF9wcmludGYoIlNFTEVDVCB1cmwgRlJPTSBleHBpcmF0aW9uIFdIRVJFIGV4cGlyZXMg
PCAlZDsiXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJERUxFVEUgRlJPTSBleHBpcmF0aW9uIFdIRVJFIGV4cGlyZXMgPCAlZDsiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWxpZFRp
bWUsIGxhc3RWYWxpZFRpbWUpKTsKKyAgICBzcWxpdGUzX2V4ZWMoZGF0YWJhc2UtPnByaXYtPmV4
cGlyYXRpb25UaW1lc0RhdGFiYXNlLCBzZWxlY3REZWxldGVRdWVyeS5nZXQoKSwgc2VsZWN0UXVl
cnlDYWxsYmFjaywgMCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEZhdmljb25EYXRhYmFz
ZUNsb3NlKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgaWYgKGljb25E
YXRhYmFzZSgpLmlzRW5hYmxlZCgpKSB7CisgICAgICAgIHNxbGl0ZTNfY2xvc2UoZGF0YWJhc2Ut
PnByaXYtPmV4cGlyYXRpb25UaW1lc0RhdGFiYXNlKTsKKyAgICAgICAgaWNvbkRhdGFiYXNlKCku
c2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgIGljb25EYXRhYmFzZSgpLmNsb3NlKCk7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZCBjcmVhdGVFeHBpcmF0aW9uVGltZXNEYXRhYmFzZVRhYmxlSWZO
b3RFeGlzdHMoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBjb25zdCBj
aGFyKiBjcmVhdGVRdWVyeSA9ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBleHBpcmF0aW9u
ICIgXAorICAgICAgICAiKHVybCBURVhUIFBSSU1BUlkgS0VZLCBleHBpcmVzIElOVEVHRVIpOyI7
CisKKyAgICBpbnQgcmV0dmFsID0gc3FsaXRlM19leGVjKGRhdGFiYXNlLT5wcml2LT5leHBpcmF0
aW9uVGltZXNEYXRhYmFzZSwgY3JlYXRlUXVlcnksIDAsIDAsIDApOworICAgIGlmIChyZXR2YWwg
IT0gU1FMSVRFX09LKSB7CisgICAgICAgIHNxbGl0ZTNfY2xvc2UoZGF0YWJhc2UtPnByaXYtPmV4
cGlyYXRpb25UaW1lc0RhdGFiYXNlKTsKKyAgICAgICAgZGF0YWJhc2UtPnByaXYtPmV4cGlyYXRp
b25UaW1lc0RhdGFiYXNlID0gMDsKKyAgICB9Cit9CisKKy8qKgorICogd2Via2l0X2Zhdmljb25f
ZGF0YWJhc2Vfc2V0X3BhdGg6CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEZhdmljb25EYXRhYmFz
ZQorICogQHBhdGg6IGFuIGFic29sdXRlIHBhdGggdG8gdGhlIGljb24gZGF0YWJhc2UgZm9sZGVy
CisgKgorICogU3BlY2lmaWVzIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBkYXRhYmFzZSBmb2xk
ZXIgb24gZGlzay4gVGhlCisgKiBpY29uIGRhdGFiYXNlIHdpbGwgb25seSBiZSBlbmFibGVkIGFm
dGVyIGEgY2FsbCB0byB0aGlzIG1ldGhvZC4KKyAqCisgKiBQYXNzaW5nICVOVUxMIG9yICIiIGRp
c2FibGVzIHRoZSBpY29uIGRhdGFiYXNlLgorICoKKyAqIFNpbmNlOiAxLjgKKyAqKi8KK3ZvaWQg
d2Via2l0X2Zhdmljb25fZGF0YWJhc2Vfc2V0X3BhdGgoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBk
YXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhdGgpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfRkFWSUNPTl9EQVRBQkFTRShkYXRhYmFzZSkpOworCisgICAgLy8gQWx3YXlzIHRyeSB0
byBjbG9zZSBiZWNhdXNlIHRoZSBvbGQgaWNvbmRhdGFiYXNlIGlzIG9wZW5lZCBieSBkZWZhdWx0
LgorICAgIHdlYmtpdEZhdmljb25EYXRhYmFzZUNsb3NlKGRhdGFiYXNlKTsKKworICAgIGRhdGFi
YXNlLT5wcml2LT5pbXBvcnRGaW5pc2hlZCA9IGZhbHNlOworICAgIGlmICghKHBhdGggJiYgcGF0
aFswXSkpIHsKKyAgICAgICAgZGF0YWJhc2UtPnByaXYtPnBhdGguc2V0KDApOworICAgICAgICBp
Y29uRGF0YWJhc2UoKS5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGljb25EYXRhYmFzZSgpLnNldENsaWVudCgmZGF0YWJhc2UtPnByaXYtPmljb25EYXRh
YmFzZUNsaWVudCk7CisgICAgSWNvbkRhdGFiYXNlOjpkZWxheURhdGFiYXNlQ2xlYW51cCgpOwor
ICAgIGljb25EYXRhYmFzZSgpLnNldEVuYWJsZWQodHJ1ZSk7CisgICAgaWYgKCFpY29uRGF0YWJh
c2UoKS5vcGVuKGZpbGVuYW1lVG9TdHJpbmcocGF0aCksIEljb25EYXRhYmFzZTo6ZGVmYXVsdERh
dGFiYXNlRmlsZW5hbWUoKSkpIHsKKyAgICAgICAgSWNvbkRhdGFiYXNlOjphbGxvd0RhdGFiYXNl
Q2xlYW51cCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGF0YWJhc2UtPnByaXYt
PnBhdGguc2V0KGdfc3RyZHVwKHBhdGgpKTsKKworICAgIEdPd25QdHI8Y2hhcj4gZXhwaXJhdGlv
blRpbWVzRGF0YWJhc2VQYXRoKGdfYnVpbGRfZmlsZW5hbWUocGF0aCwgIkZhdmljb25FeHBpcmF0
aW9uLmRiIiwgTlVMTCkpOworICAgIGludCByZXR2YWwgPSBzcWxpdGUzX29wZW4oZXhwaXJhdGlv
blRpbWVzRGF0YWJhc2VQYXRoLmdldCgpLCAmZGF0YWJhc2UtPnByaXYtPmV4cGlyYXRpb25UaW1l
c0RhdGFiYXNlKTsKKyAgICBpZiAocmV0dmFsID09IFNRTElURV9PSykKKyAgICAgICAgY3JlYXRl
RXhwaXJhdGlvblRpbWVzRGF0YWJhc2VUYWJsZUlmTm90RXhpc3RzKGRhdGFiYXNlKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91cmk6CisgKiBAZGF0
YWJhc2U6IGEgI1dlYktpdEZhdmljb25EYXRhYmFzZQorICogQHBhZ2VfdXJpOiBVUkkgb2YgdGhl
IHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbgorICoKKyAqIE9idGFpbnMgdGhlIFVSSSBmb3IgdGhl
IGZhdmljb24gZm9yIHRoZSBnaXZlbiBwYWdlIFVSSS4KKyAqIFNlZSBhbHNvIHdlYmtpdF93ZWJf
dmlld19nZXRfaWNvbl91cmkoKS4KKyAqCisgKiBSZXR1cm5zOiBhIG5ld2x5IGFsbG9jYXRlZCBV
UkkgZm9yIHRoZSBmYXZpY29uLCBvciAlTlVMTAorICoKKyAqIFNpbmNlOiAxLjgKKyAqKi8KK2dj
aGFyKiB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91cmkoV2ViS2l0RmF2aWNv
bkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkkpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZBVklDT05fREFUQUJBU0UoZGF0YWJhc2UpLCAwKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChwYWdlVVJJLCAwKTsKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworCisgICAgU3RyaW5nIGljb25VUkkgPSBpY29uRGF0YWJhc2UoKS5zeW5jaHJv
bm91c0ljb25VUkxGb3JQYWdlVVJMKFN0cmluZzo6ZnJvbVVURjgocGFnZVVSSSkpOworICAgIGlm
IChpY29uVVJJLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZ19z
dHJkdXAoaWNvblVSSS51dGY4KCkuZGF0YSgpKTsKK30KKworc3RhdGljIEdka1BpeGJ1ZiogZ2V0
SWNvblBpeGJ1ZlN5bmNocm9ub3VzbHkoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwg
Y29uc3QgU3RyaW5nJiBwYWdlVVJMLCBndWludCB3aWR0aCwgZ3VpbnQgaGVpZ2h0KQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgLy8gVGhlIGV4YWN0IHNpemUgd2UgcGFzcyBp
cyBpcnJlbGV2YW50IHRvIHRoZSBpY29uRGF0YWJhc2UgY29kZS4KKyAgICAvLyBXZSBtdXN0IHBh
c3Mgc29tZXRoaW5nIGdyZWF0ZXIgdGhhbiAweDAgdG8gZ2V0IGEgcGl4YnVmLgorICAgIEltYWdl
KiBpY29uID0gaWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNJY29uRm9yUGFnZVVSTChwYWdlVVJM
LCBJbnRTaXplKDE2LCAxNikpOworICAgIGlmICghaWNvbikKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gcGl4YnVmID0gYWRvcHRHUmVmKGljb24tPmdldEdka1Bp
eGJ1ZigpKTsKKyAgICBpZiAoIXBpeGJ1ZikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBB
IHNpemUgb2YgKDAsIDApIG1lYW5zIHRoZSBtYXhpbXVtIGF2YWlsYWJsZSBzaXplLgorICAgIGlm
ICh3aWR0aCAmJiBoZWlnaHQgJiYgKGljb24tPndpZHRoKCkgIT0gKGludCkgd2lkdGggfHwgaWNv
bi0+aGVpZ2h0KCkgIT0gKGludCkgaGVpZ2h0KSkKKyAgICAgICAgcGl4YnVmID0gZ2RrX3BpeGJ1
Zl9zY2FsZV9zaW1wbGUocGl4YnVmLmdldCgpLCB3aWR0aCwgaGVpZ2h0LCBHREtfSU5URVJQX0JJ
TElORUFSKTsKKyAgICByZXR1cm4gcGl4YnVmLmxlYWtSZWYoKTsKK30KKworLyoqCisgKiB3ZWJr
aXRfZmF2aWNvbl9kYXRhYmFzZV90cnlfZ2V0X2Zhdmljb25fcGl4YnVmOgorICogQGRhdGFiYXNl
OiBhICNXZWJLaXRGYXZpY29uRGF0YWJhc2UKKyAqIEBwYWdlX3VyaTogVVJJIG9mIHRoZSBwYWdl
IGNvbnRhaW5pbmcgdGhlIGljb24KKyAqIEB3aWR0aDogdGhlIGRlc2lyZWQgd2lkdGggZm9yIHRo
ZSBpY29uCisgKiBAaGVpZ2h0OiB0aGUgZGVzaXJlZCBoZWlnaHQgZm9yIHRoZSBpY29uCisgKgor
ICogT2J0YWlucyBhICNHZGtQaXhidWYgb2YgdGhlIGZhdmljb24gZm9yIHRoZSBnaXZlbiBwYWdl
IFVSSSwgb3IKKyAqICVOVUxMIGlmIHRoZXJlIGlzIG5vIGljb24gZm9yIHRoZSBnaXZlbiBwYWdl
IG9yIGl0IGhhc24ndCBiZWVuCisgKiBsb2FkZWQgZnJvbSBkaXNrIHlldC4gVXNlIHdlYmtpdF9m
YXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaSgpIGlmCisgKiB5b3UgbmVlZCB0byBkaXN0
aW5ndWlzaCB0aGVzZSBjYXNlcy4gIFRvIG1ha2Ugc3VyZSB0aGlzIG1ldGhvZCB3aWxsCisgKiBy
ZXR1cm4gYSB2YWxpZCBpY29uIHdoZW4gdGhlIGdpdmVuIFVSSSBoYXMgb25lLCB5b3Ugc2hvdWxk
IGNvbm5lY3QKKyAqIHRvIFdlYktpdEZhdmljb25EYXRhYmFzZTo6aWNvbi1sb2FkZWQgYW5kIGNh
bGwgdGhpcyBpbiB0aGUgY2FsbGJhY2suCisgKgorICogSWYgKEB3aWR0aCwgQGhlaWdodCkgaXMg
KDAsIDApIHRoZW4gdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlCisgKiBtYXhpbXVtIGF2YWls
YWJsZSBzaXplIGZvciB0aGUgaWNvbi4gTm90ZSB0aGF0IGlmIHlvdSBzcGVjaWZ5IGEKKyAqIGRp
ZmZlcmVudCBzaXplIHRoZSBpY29uIHdpbGwgYmUgc2NhbGVkIG9uIGV2ZXJ5IHNpbmdsZSBjYWxs
IHRvIHRoaXMKKyAqIG1ldGhvZC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEg
bmV3IHJlZmVyZW5jZSB0byBhICNHZGtQaXhidWYsIG9yICVOVUxMCisgKiBpZiB0aGUgZ2l2ZW4g
VVJJIGRvZXNuJ3QgaGF2ZSBhbiBpY29uIG9yIGl0IGhhc24ndCBiZWVuIGxvYWRlZCB5ZXQuCisg
KgorICogU2luY2U6IDEuOAorICoqLworR2RrUGl4YnVmKiB3ZWJraXRfZmF2aWNvbl9kYXRhYmFz
ZV90cnlfZ2V0X2Zhdmljb25fcGl4YnVmKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2Us
IGNvbnN0IGdjaGFyKiBwYWdlVVJJLCBndWludCB3aWR0aCwgZ3VpbnQgaGVpZ2h0KQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GQVZJQ09OX0RBVEFCQVNFKGRhdGFiYXNl
KSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocGFnZVVSSSwgMCk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoKHdpZHRoICYmIGhlaWdodCkgfHwgKCF3aWR0aCAmJiAhaGVpZ2h0KSwg
MCk7CisKKyAgICByZXR1cm4gZ2V0SWNvblBpeGJ1ZlN5bmNocm9ub3VzbHkoZGF0YWJhc2UsIFN0
cmluZzo6ZnJvbVVURjgocGFnZVVSSSksIHdpZHRoLCBoZWlnaHQpOworfQorCitzdGF0aWMgUGVu
ZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiB3ZWJraXRGYXZpY29uRGF0YWJhc2VHZXRPckNyZWF0ZVJl
cXVlc3RzKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgcGFn
ZVVSTCkKK3sKKyAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gZGF0YWJhc2Ut
PnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMuZ2V0KHBhZ2VVUkwpOworICAgIGlmICghaWNvbnMp
IHsKKyAgICAgICAgaWNvbnMgPSBuZXcgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yOworICAgICAg
ICBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5zZXQocGFnZVVSTCwgaWNvbnMp
OworICAgIH0KKworICAgIHJldHVybiBpY29uczsKK30KKworc3RhdGljIHZvaWQgd2Via2l0ZmF2
aWNvbmRhdGFiYXNlRGVsZXRlUmVxdWVzdHMoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSwgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiByZXF1ZXN0cywgY29uc3QgU3RyaW5nJiBwYWdl
VVJMKQoreworICAgIGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLnJlbW92ZShw
YWdlVVJMKTsKKyAgICBkZWxldGUgcmVxdWVzdHM7Cit9CisKK3N0YXRpYyB2b2lkIGdldEljb25Q
aXhidWZDYW5jZWxsZWQodm9pZCogdXNlckRhdGEpCit7CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0
KiByZXF1ZXN0ID0gc3RhdGljX2Nhc3Q8UGVuZGluZ0ljb25SZXF1ZXN0Kj4odXNlckRhdGEpOwor
ICAgIHJlcXVlc3QtPmFzeW5jUmVzdWx0Q2FuY2VsKCk7CisKKyAgICBjb25zdCBTdHJpbmcmIHBh
Z2VVUkwgPSByZXF1ZXN0LT5wYWdlVVJJKCk7CisgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBk
YXRhYmFzZSA9IHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpOworICAgIFBlbmRpbmdJY29u
UmVxdWVzdFZlY3RvciogaWNvbnMgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0
cy5nZXQocGFnZVVSTCk7CisgICAgaWYgKCFpY29ucykKKyAgICAgICAgcmV0dXJuOworCisgICAg
c2l6ZV90IGl0ZW1JbmRleCA9IGljb25zLT5maW5kKHJlcXVlc3QpOworICAgIGlmIChpdGVtSW5k
ZXggIT0gbm90Rm91bmQpCisgICAgICAgIGljb25zLT5yZW1vdmUoaXRlbUluZGV4KTsKKyAgICBp
ZiAoaWNvbnMtPmlzRW1wdHkoKSkKKyAgICAgICAgd2Via2l0ZmF2aWNvbmRhdGFiYXNlRGVsZXRl
UmVxdWVzdHMoZGF0YWJhc2UsIGljb25zLCBwYWdlVVJMKTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0RmF2aWNvbkRhdGFiYXNlR2V0SWNvblBpeGJ1ZkNhbmNlbGxlZChHQ2FuY2VsbGFibGUqIGNh
bmNlbGxhYmxlLCBQZW5kaW5nSWNvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgLy8gSGFuZGxl
IGNhbmNlbGxlZCBpbiBhIGluIGlkbGUgc2luY2UgaXQgbWlnaHQgYmUgY2FsbGVkIGZyb20gYW55
IHRocmVhZC4KKyAgICBjYWxsT25NYWluVGhyZWFkKGdldEljb25QaXhidWZDYW5jZWxsZWQsIHJl
cXVlc3QpOworfQorCisvKioKKyAqIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29u
X3BpeGJ1ZjoKKyAqIEBkYXRhYmFzZTogYSAjV2ViS2l0RmF2aWNvbkRhdGFiYXNlCisgKiBAcGFn
ZV91cmk6IFVSSSBvZiB0aGUgcGFnZSBjb250YWluaW5nIHRoZSBpY29uCisgKiBAd2lkdGg6IHRo
ZSBkZXNpcmVkIHdpZHRoIGZvciB0aGUgaWNvbgorICogQGhlaWdodDogdGhlIGRlc2lyZWQgaGVp
Z2h0IGZvciB0aGUgaWNvbgorICogQGNhbmNlbGxhYmxlOiBBICNHQ2FuY2VsbGFibGUgb3IgJU5V
TEwuCisgKiBAY2FsbGJhY2s6IChhbGxvdy1ub25lKTogQSAjR0FzeW5jUmVhZHlDYWxsYmFjayB0
byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMKKyAqICAgICAgICAgICAgc2F0aXNmaWVkIG9yICVO
VUxMIGlmIHlvdSBkb24ndCBjYXJlIGFib3V0IHRoZSByZXN1bHQuCisgKiBAdXNlcl9kYXRhOiBU
aGUgZGF0YSB0byBwYXNzIHRvIEBjYWxsYmFjay4KKyAqCisgKiBBc3luY2hyb25vdXNseSBvYnRh
aW5zIGEgI0dka1BpeGJ1ZiBvZiB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVuCisgKiBwYWdlIFVS
SS4gVGhlIGFkdmFudGFnZSBvZiB0aGlzIG1ldGhvZCBvdmVyCisgKiB3ZWJraXRfZmF2aWNvbl9k
YXRhYmFzZV90cnlfZ2V0X2Zhdmljb25fcGl4YnVmKCkgaXMgdGhhdCBpdCBhbHdheXMgcmV0dXJu
IHRoZQorICogY2FjaGVkIGljb24gaWYgaXQncyBpbiB0aGUgZGF0YWJhc2UgYXN5bmNocm9ub3Vz
bHkgd2FpdGluZyBmb3IgdGhlCisgKiBpY29uIHRvIGJlIHJlYWQgZnJvbSB0aGUgZGF0YWJhc2Uu
CisgKgorICogVGhpcyBpcyBhbiBhc3luY2hyb25vdXMgbWV0aG9kLiBXaGVuIHRoZSBvcGVyYXRp
b24gaXMgZmluaXNoZWQsIGNhbGxiYWNrIHdpbGwKKyAqIGJlIGludm9rZWQuIFlvdSBjYW4gdGhl
biBjYWxsIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1Zl9maW5pc2go
KQorICogdG8gZ2V0IHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAqIFNlZSBhbHNvIHdl
YmtpdF9mYXZpY29uX2RhdGFiYXNlX3RyeV9nZXRfZmF2aWNvbl9waXhidWYoKS4KKyAqCisgKiBJ
ZiAoQHdpZHRoLCBAaGVpZ2h0KSBpcyAoMCwgMCkgdGhlbiB0aGlzIG1ldGhvZCB3aWxsIHJldHVy
biB0aGUKKyAqIG1heGltdW0gYXZhaWxhYmxlIHNpemUgZm9yIHRoZSBpY29uLiBOb3RlIHRoYXQg
aWYgeW91IHNwZWNpZnkgYQorICogZGlmZmVyZW50IHNpemUgdGhlIGljb24gd2lsbCBiZSBzY2Fs
ZWQgb24gZXZlcnkgc2luZ2xlIGNhbGwgdG8gdGhpcworICogbWV0aG9kLgorICoKKyAqIFNpbmNl
OiAxLjgKKyAqKi8KK3ZvaWQgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4
YnVmKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGdjaGFyKiBwYWdlVVJJ
LCBndWludCB3aWR0aCwgZ3VpbnQgaGVpZ2h0LCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBH
QXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19GQVZJQ09OX0RBVEFCQVNFKGRhdGFiYXNlKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChwYWdlVVJJKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCh3aWR0
aCAmJiBoZWlnaHQpIHx8ICghd2lkdGggJiYgIWhlaWdodCkpOworCisgICAgR1JlZlB0cjxHU2lt
cGxlQXN5bmNSZXN1bHQ+IHJlc3VsdCA9IGFkb3B0R1JlZihnX3NpbXBsZV9hc3luY19yZXN1bHRf
bmV3KEdfT0JKRUNUKGRhdGFiYXNlKSwgY2FsbGJhY2ssIHVzZXJEYXRhLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PGdwb2ludGVyPih3ZWJraXRfZmF2aWNvbl9kYXRhYmFz
ZV9nZXRfZmF2aWNvbl9waXhidWYpKSk7CisKKyAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFuIGlj
b24gZm9yIHRoZSBnaXZlbiBVUkkgcmV0dXJuIEFTQVAuCisgICAgaWYgKGRhdGFiYXNlLT5wcml2
LT5pbXBvcnRGaW5pc2hlZCAmJiBpY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25VUkxGb3JQ
YWdlVVJMKFN0cmluZzo6ZnJvbVVURjgocGFnZVVSSSkpLmlzRW1wdHkoKSkgeworICAgICAgICBn
X3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlcihyZXN1bHQuZ2V0KCksIDAs
IDApOworICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5faWRsZShyZXN1
bHQuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU3RyaW5nIHBhZ2VVUkwg
PSBTdHJpbmc6OmZyb21VVEY4KHBhZ2VVUkkpOworICAgIFBlbmRpbmdJY29uUmVxdWVzdCogcmVx
dWVzdCA9IG5ldyBQZW5kaW5nSWNvblJlcXVlc3QocGFnZVVSTCwgcmVzdWx0LmdldCgpLCBjYW5j
ZWxsYWJsZSwgSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CisKKyAgICAvLyBSZWdpc3RlciBpY29u
IHJlcXVlc3QgYmVmb3JlIGFza2luZyBmb3IgdGhlIGljb24gdG8gYXZvaWQgcmFjZSBjb25kaXRp
b25zLgorICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciogaWNvbnMgPSB3ZWJraXRGYXZpY29u
RGF0YWJhc2VHZXRPckNyZWF0ZVJlcXVlc3RzKGRhdGFiYXNlLCBwYWdlVVJMKTsKKyAgICBBU1NF
UlQoaWNvbnMpOworICAgIGljb25zLT5hcHBlbmQoYWRvcHRQdHIocmVxdWVzdCkpOworCisgICAg
R2RrUGl4YnVmKiBwaXhidWYgPSBnZXRJY29uUGl4YnVmU3luY2hyb25vdXNseShkYXRhYmFzZSwg
cGFnZVVSTCwgMTYsIDE2KTsKKyAgICBpZiAoIXBpeGJ1ZiAmJiAhZGF0YWJhc2UtPnByaXYtPmlt
cG9ydEZpbmlzaGVkKSB7CisgICAgICAgIC8vIEluaXRpYWwgaW1wb3J0IGlzIG9uZ29pbmcsIHRo
ZSBpY29uIGRhdGEgd2lsbCBiZSBhdmFpbGFibGUgbGF0ZXIuCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICByZXF1ZXN0LT5hc3luY1Jlc3VsdENvbXBsZXRlSW5JZGxlKHBpeGJ1Zik7CisK
KyAgICBBU1NFUlQoaWNvbnMtPmxhc3QoKS5nZXQoKSA9PSByZXF1ZXN0KTsKKyAgICBpY29ucy0+
cmVtb3ZlTGFzdCgpOworICAgIGlmIChpY29ucy0+aXNFbXB0eSgpKQorICAgICAgICB3ZWJraXRm
YXZpY29uZGF0YWJhc2VEZWxldGVSZXF1ZXN0cyhkYXRhYmFzZSwgaWNvbnMsIHBhZ2VVUkwpOwor
fQorCisvKioKKyAqIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1Zl9m
aW5pc2g6CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEZhdmljb25EYXRhYmFzZQorICogQHJlc3Vs
dDogQSAjR0FzeW5jUmVzdWx0IG9idGFpbmVkIGZyb20gdGhlICNHQXN5bmNSZWFkeUNhbGxiYWNr
IHBhc3NlZCB0byB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWYoKQor
ICogQGVycm9yOiBSZXR1cm4gbG9jYXRpb24gZm9yIGVycm9yIG9yICVOVUxMLgorICoKKyAqIEZp
bmlzaGVzIGFuIG9wZXJhdGlvbiBzdGFydGVkIHdpdGggd2Via2l0X2Zhdmljb25fZGF0YWJhc2Vf
Z2V0X2Zhdmljb25fcGl4YnVmKCkuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBh
IG5ldyByZWZlcmVuY2UgdG8gYSAjR2RrUGl4YnVmLCBvciAlTlVMTC4KKyAqCisgKiBTaW5jZTog
MS44CisgKi8KK0dka1BpeGJ1Ziogd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25f
cGl4YnVmX2ZpbmlzaChXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBHQXN5bmNSZXN1
bHQqIHJlc3VsdCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgR1NpbXBsZUFzeW5jUmVzdWx0KiBz
aW1wbGVSZXN1bHQgPSBHX1NJTVBMRV9BU1lOQ19SRVNVTFQocmVzdWx0KTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X3NvdXJjZV90YWcoc2ltcGxl
UmVzdWx0KSA9PSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWYsIDAp
OworCisgICAgaWYgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9wcm9wYWdhdGVfZXJyb3Ioc2ltcGxl
UmVzdWx0LCBlcnJvcikpCisgICAgICAgIHJldHVybiAwOworCisgICAgR0NhbmNlbGxhYmxlKiBj
YW5jZWxsYWJsZSA9IHN0YXRpY19jYXN0PEdDYW5jZWxsYWJsZSo+KGdfb2JqZWN0X2dldF9kYXRh
KEdfT0JKRUNUKHNpbXBsZVJlc3VsdCksICJjYW5jZWxsYWJsZSIpKTsKKyAgICBpZiAoY2FuY2Vs
bGFibGUgJiYgZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoY2FuY2VsbGFibGUpKSB7CisgICAg
ICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FO
Q0VMTEVELCBfKCJPcGVyYXRpb24gd2FzIGNhbmNlbGxlZCIpKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgR2RrUGl4YnVmKiBpY29uID0gc3RhdGljX2Nhc3Q8R2RrUGl4YnVmKj4o
Z19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIoc2ltcGxlUmVzdWx0KSk7
CisgICAgaWYgKCFpY29uKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxHZGtQaXhidWYqPihnX29iamVjdF9yZWYoaWNvbikpOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRGYXZpY29uRGF0YWJhc2VQcm9jZXNzUGVuZGluZ0ljb25zRm9yVVJJKFdlYktpdEZhdmlj
b25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCkKK3sKKyAgICBQZW5k
aW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29u
UmVxdWVzdHMuZ2V0KHBhZ2VVUkwpOworICAgIGlmICghaWNvbnMpCisgICAgICAgIHJldHVybjsK
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWNvbnMtPnNpemUoKTsgKytpKSB7CisgICAg
ICAgIFBlbmRpbmdJY29uUmVxdWVzdCogcmVxdWVzdCA9IGljb25zLT5hdChpKS5nZXQoKTsKKyAg
ICAgICAgaWYgKHJlcXVlc3QtPmFzeW5jUmVzdWx0KCkpCisgICAgICAgICAgICByZXF1ZXN0LT5h
c3luY1Jlc3VsdENvbXBsZXRlKGdldEljb25QaXhidWZTeW5jaHJvbm91c2x5KGRhdGFiYXNlLCBw
YWdlVVJMLCAxNiwgMTYpKTsKKyAgICB9CisgICAgd2Via2l0ZmF2aWNvbmRhdGFiYXNlRGVsZXRl
UmVxdWVzdHMoZGF0YWJhc2UsIGljb25zLCBwYWdlVVJMKTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0RmF2aWNvbkRhdGFiYXNlSW1wb3J0RmluaXNoZWQoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBk
YXRhYmFzZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGRhdGFiYXNlLT5w
cml2LT5pbXBvcnRGaW5pc2hlZCA9IHRydWU7CisKKyAgICAvLyBJbXBvcnQgaXMgY29tcGxldGUs
IHByb2Nlc3MgcGVuZGluZyByZXF1ZXN0cyBmb3IgcGFnZXMgdGhhdCBhcmUgbm90IGluIHRoZSBk
YXRhYmFzZSwKKyAgICAvLyBzaW5jZSBkaWRJbXBvcnRJY29uRGF0YUZvclBhZ2VVUkwoKSB3aWxs
IG5ldmVyIGJlIGNhbGxlZCBmb3IgdGhlbS4KKyAgICBWZWN0b3I8U3RyaW5nPiB0b0RlbGV0ZVVS
THM7CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBkYXRh
YmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5lbmQoKTsKKyAgICBmb3IgKFBlbmRpbmdJ
Y29uUmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRhdGFiYXNlLT5wcml2LT5wZW5k
aW5nSWNvblJlcXVlc3RzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAg
U3RyaW5nIGljb25VUkwgPSBpY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdl
VVJMKGl0ZXItPmZpcnN0KTsKKyAgICAgICAgaWYgKCFpY29uVVJMLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciogaWNv
bnMgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWNvbnMt
PnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3QqIHJlcXVlc3Qg
PSBpY29ucy0+YXQoaSkuZ2V0KCk7CisgICAgICAgICAgICBpZiAocmVxdWVzdC0+YXN5bmNSZXN1
bHQoKSkKKyAgICAgICAgICAgICAgICByZXF1ZXN0LT5hc3luY1Jlc3VsdENvbXBsZXRlKDApOwor
ICAgICAgICB9CisKKyAgICAgICAgdG9EZWxldGVVUkxzLmFwcGVuZChpdGVyLT5maXJzdCk7Cisg
ICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0b0RlbGV0ZVVSTHMuc2l6ZSgpOyAr
K2kpCisgICAgICAgIHdlYmtpdGZhdmljb25kYXRhYmFzZURlbGV0ZVJlcXVlc3RzKGRhdGFiYXNl
LCBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5nZXQodG9EZWxldGVVUkxzW2ld
KSwgdG9EZWxldGVVUkxzW2ldKTsKKworICAgIC8vIEFsc28gbWFyayB0aGUgZXhwaXJlZCBpY29u
cyBmb3IgcHJ1bm5pbmcuIFdlIG5lZWQgdG8gZG8gdGhpcworICAgIC8vIEFTQVAgYmVjYXVzZSBw
cnVuaW5nIGNhbiBvbmx5IGhhcHBlbiB0aGUgZmlyc3QgdGltZSB0aGUgb24tZGlzaworICAgIC8v
IGNhY2hlIGlzIHdyaXR0ZW4gZm9yIGVhY2ggZXhlY3V0aW9uLgorICAgIGlmIChkYXRhYmFzZS0+
cHJpdi0+ZXhwaXJhdGlvblRpbWVzRGF0YWJhc2UpCisgICAgICAgIHdlYmtpdEZhdmljb25EYXRh
YmFzZVBydW5lRXhwaXJlZEljb25zKGRhdGFiYXNlKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmF2
aWNvbl9kYXRhYmFzZV9jbGVhcjoKKyAqIEBkYXRhYmFzZTogYSAjV2ViS2l0RmF2aWNvbkRhdGFi
YXNlCisgKgorICogQ2xlYXJzIGFsbCBpY29ucyBmcm9tIHRoZSBkYXRhYmFzZS4KKyAqCisgKiBT
aW5jZTogMS44CisgKiovCit2b2lkIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsZWFyKFdlYktp
dEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfRkFWSUNPTl9EQVRBQkFTRShkYXRhYmFzZSkpOworCisgICAgaWNvbkRhdGFiYXNlKCku
cmVtb3ZlQWxsSWNvbnMoKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGZhdmljb25kYXRhYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk1ZDZiODQ0MjYwOTFlN2I0ZDhiMmI1
MjFiZDI4MzY4NjcxMWQ5MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBsYW5lZG8uY29tPgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgd2Via2l0ZmF2aWNvbmRh
dGFiYXNlX2gKKyNkZWZpbmUgd2Via2l0ZmF2aWNvbmRhdGFiYXNlX2gKKworI2luY2x1ZGUgPGdk
ay1waXhidWYvZ2RrLXBpeGJ1Zi5oPgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVk
ZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdF
QktJVF9UWVBFX0ZBVklDT05fREFUQUJBU0UgICAgICAgICAgICAgKHdlYmtpdF9mYXZpY29uX2Rh
dGFiYXNlX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFKG9iaikg
ICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQ
RV9GQVZJQ09OX0RBVEFCQVNFLCBXZWJLaXRGYXZpY29uRGF0YWJhc2UpKQorI2RlZmluZSBXRUJL
SVRfRkFWSUNPTl9EQVRBQkFTRV9DTEFTUyhrbGFzcykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
Q0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRkFWSUNPTl9EQVRBQkFTRSwgV2ViS2l0RmF2aWNv
bkRhdGFiYXNlQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfRkFWSUNPTl9EQVRBQkFTRShvYmop
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVf
RkFWSUNPTl9EQVRBQkFTRSkpCisjZGVmaW5lIFdFQktJVF9JU19GQVZJQ09OX0RBVEFCQVNFX0NM
QVNTKGtsYXNzKSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQ
RV9GQVZJQ09OX0RBVEFCQVNFKSkKKyNkZWZpbmUgV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfR0VU
X0NMQVNTKG9iaikgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9U
WVBFX0ZBVklDT05fREFUQUJBU0UsIFdlYktpdEZhdmljb25EYXRhYmFzZUNsYXNzKSkKKwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUgV2ViS2l0RmF2aWNvbkRh
dGFiYXNlUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRGYXZpY29uRGF0YWJhc2UgeworICAgIEdP
YmplY3QgcGFyZW50X2luc3RhbmNlOworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0
RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZSogcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0RmF2aWNv
bkRhdGFiYXNlQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICAv
KiBQYWRkaW5nIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisgICAgdm9pZCAoKl93ZWJraXRfcmVz
ZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQyKSAodm9pZCk7Cisg
ICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRf
cmVzZXJ2ZWQ0KSAodm9pZCk7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZmF2aWNv
bl9kYXRhYmFzZV9nZXRfdHlwZSAgICAgICAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQ
SSBjb25zdCBnY2hhcioKK3dlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9wYXRoICAgICAgICAg
ICAgICAgICAgKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UpOworCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3NldF9wYXRoICAgICAgICAgICAgICAgICAg
KFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgICAgIHBhdGgp
OworCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmlj
b25fdXJpICAgICAgICAgICAoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFy
KiAgICAgICAgICAgcGFnZV91cmkpOworCitXRUJLSVRfQVBJIEdka1BpeGJ1ZioKK3dlYmtpdF9m
YXZpY29uX2RhdGFiYXNlX3RyeV9nZXRfZmF2aWNvbl9waXhidWYgICAgKFdlYktpdEZhdmljb25E
YXRhYmFzZSogZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgICAgIHBhZ2VfdXJpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAg
ICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgICAgaGVpZ2h0KTsKKworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWYgICAgICAgIChX
ZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAgICAgICBwYWdlX3Vy
aSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1
aW50ICAgICAgICAgICAgICAgICAgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgIGhlaWdodCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxs
YWJsZSogICAgICAgICAgY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgIGNhbGxiYWNrLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50
ZXIgICAgICAgICAgICAgICB1c2VyX2RhdGEpOworCitXRUJLSVRfQVBJIEdka1BpeGJ1ZioKK3dl
YmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1Zl9maW5pc2ggKFdlYktpdEZh
dmljb25EYXRhYmFzZSogZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQqICAgICAgICAgIHJlc3VsdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvcioqICAg
ICAgICAgICAgICAgZXJyb3IpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9mYXZpY29uX2Rh
dGFiYXNlX2NsZWFyICAgICAgICAgICAgICAgICAgICAgKFdlYktpdEZhdmljb25EYXRhYmFzZSog
ZGF0YWJhc2UpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogd2Via2l0ZmF2aWNvbmRhdGFi
YXNlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZp
Y29uZGF0YWJhc2Vwcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2
aWNvbmRhdGFiYXNlcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3Njc5YTBmMDBkOTJjMTI0ZmM2ZTVi
MmY1OGJlMDc5NTMwMDNkZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlcHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXRmYXZpY29u
ZGF0YWJhc2Vwcml2YXRlX2gKKyNkZWZpbmUgd2Via2l0ZmF2aWNvbmRhdGFiYXNlcHJpdmF0ZV9o
CisKK3ZvaWQgd2Via2l0RmF2aWNvbkRhdGFiYXNlRGlzcGF0Y2hEaWRSZWNlaXZlSWNvbihXZWJL
aXRGYXZpY29uRGF0YWJhc2UqLCBjb25zdCBjaGFyKiBmcmFtZVVSSSk7CisKKyNlbmRpZiAvLyB3
ZWJraXRmYXZpY29uZGF0YWJhc2Vwcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRnbG9iYWxzLmNwcAppbmRleCBiYzVkNzI2MDRmYzM5ZWY2NjdmNjcwZWM0M2QwZWViOTRm
YmRlZjliLi5jMTNkYmI3ZGY3ZmUwNzkyMTUxNzQyMjIyZDM0ZjhlY2IxYjJjZGI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwCkBAIC00MSw2ICs0MSw3IEBA
CiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgogI2luY2x1ZGUgIlJlc291cmNl
UmVzcG9uc2UuaCIKICNpbmNsdWRlICJ3ZWJraXRhcHBsaWNhdGlvbmNhY2hlLmgiCisjaW5jbHVk
ZSAid2Via2l0ZmF2aWNvbmRhdGFiYXNlLmgiCiAjaW5jbHVkZSAid2Via2l0Z2xvYmFsc3ByaXZh
dGUuaCIKICNpbmNsdWRlICJ3ZWJraXRpY29uZGF0YWJhc2UuaCIKICNpbmNsdWRlICJ3ZWJraXRz
b3VwYXV0aGRpYWxvZy5oIgpAQCAtMjM3LDYgKzIzOCw4IEBAIHN0YXRpYyBHdGtXaWRnZXQqIGN1
cnJlbnRUb3BsZXZlbENhbGxiYWNrKFdlYktpdFNvdXBBdXRoRGlhbG9nKiBmZWF0dXJlLCBTb3Vw
TWVzCiAgKiBSZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBub25lKTogdGhlIGN1cnJlbnQgI1dlYktp
dEljb25EYXRhYmFzZQogICoKICAqIFNpbmNlOiAxLjMuMTMKKyAqCisgKiBEZXByZWNhdGVkOiAx
Ljg6IFVzZSB3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKSBpbnN0ZWFkCiAgKi8KIFdlYktp
dEljb25EYXRhYmFzZSogd2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCkKIHsKQEAgLTI0OSwxMSAr
MjUyLDM1IEBAIFdlYktpdEljb25EYXRhYmFzZSogd2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCkK
ICAgICByZXR1cm4gZGF0YWJhc2U7CiB9CiAKKy8qKgorICogd2Via2l0X2dldF9mYXZpY29uX2Rh
dGFiYXNlOgorICoKKyAqIFJldHVybnMgdGhlICNXZWJLaXRGYXZpY29uRGF0YWJhc2UgcHJvdmlk
aW5nIGFjY2VzcyB0byB3ZWJzaXRlCisgKiBpY29ucy4KKyAqCisgKiBSZXR1cm4gdmFsdWU6ICh0
cmFuc2ZlciBub25lKTogdGhlIGN1cnJlbnQgI1dlYktpdEZhdmljb25EYXRhYmFzZQorICoKKyAq
IFNpbmNlOiAxLjgKKyAqLworV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiB3ZWJraXRfZ2V0X2Zhdmlj
b25fZGF0YWJhc2UoKQoreworICAgIHdlYmtpdEluaXQoKTsKKworICAgIHN0YXRpYyBXZWJLaXRG
YXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gMDsKKyAgICBpZiAoIWRhdGFiYXNlKQorICAgICAg
ICBkYXRhYmFzZSA9IFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFKGdfb2JqZWN0X25ldyhXRUJLSVRf
VFlQRV9GQVZJQ09OX0RBVEFCQVNFLCBOVUxMKSk7CisKKyAgICByZXR1cm4gZGF0YWJhc2U7Cit9
CisKIHN0YXRpYyBHUmVmUHRyPFdlYktpdFNwZWxsQ2hlY2tlcj4gdGV4dENoZWNrZXIgPSAwOwog
CiBzdGF0aWMgdm9pZCB3ZWJraXRFeGl0KCkKIHsKICAgICBnX29iamVjdF91bnJlZih3ZWJraXRf
Z2V0X2RlZmF1bHRfc2Vzc2lvbigpKTsKKyNpZiBFTkFCTEUoSUNPTkRBVEFCQVNFKQorICAgIGdf
b2JqZWN0X3VucmVmKHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpKTsKKyNlbmRpZgogICAg
IHRleHRDaGVja2VyID0gMDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGdsb2JhbHMuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9i
YWxzLmgKaW5kZXggOTZkYzgzODUwZWE3YjE4ZDM3YmMwZWUzNTgyNzgyYTM5NGQxNmUwMy4uZjJk
NTk5N2Y4ZDJjOTJlNGUyNzljMTllMWMzNzkzNDQwZjk2NzQxNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0Z2xvYmFscy5oCkBAIC02Miw2ICs2Miw5IEBAIHdlYmtpdF9nZXRfd2Vi
X3BsdWdpbl9kYXRhYmFzZSAgICAgICAgICAgICAgICAgICh2b2lkKTsKIFdFQktJVF9BUEkgV2Vi
S2l0SWNvbkRhdGFiYXNlICoKIHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSAgICAgICAgICAgICAg
ICAgICAgICAgICh2b2lkKTsKIAorV0VCS0lUX0FQSSBXZWJLaXRGYXZpY29uRGF0YWJhc2UgKgor
d2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOwor
CiBXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF9zZXRfY2FjaGVfbW9kZWwgICAgICAgICAgICAgICAg
ICAgICAgICAgIChXZWJLaXRDYWNoZU1vZGVsICAgICBjYWNoZV9tb2RlbCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuY3BwIGIvU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKaW5kZXggMzgzYjA4
MTdlY2JhZWUzMTc0ZTVlZjdlYzdlOTQxNWI4NDM3YzE0My4uZTMyNjlmOWIxOTRjOWNjOGVkMjRl
NTc0ZDg2OGRiNThkOGY2NjIwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGljb25kYXRhYmFzZS5jcHAKQEAgLTU5LDYgKzU5LDggQEAKICAqIGJlIGRlbGV0ZWQgZnJv
bSBpdC4KICAqCiAgKiBTaW5jZTogMS4zLjEzCisgKgorICogRGVwcmVjYXRlZDogMS44OiBVc2Ug
V2ViS2l0RmF2aWNvbkRhdGFiYXNlIGluc3RlYWQuCiAgKi8KIAogdXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKQEAgLTE0MCw2ICsxNDIsOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9jbGFzc19pbml0KFdlYktpdEljb25EYXRhYmFzZUNsYXNzKiBrbGFzcykKICAgICAgICogVGhl
IGFic29sdXRlIHBhdGggb2YgdGhlIGljb24gZGF0YWJhc2UgZm9sZGVyLgogICAgICAgKgogICAg
ICAgKiBTaW5jZTogMS4zLjEzCisgICAgICAqCisgICAgICAqIERlcHJlY2F0ZWQ6IDEuODogVXNl
IFdlYktpdEZhdmljb25EYXRhYmFzZTo6cGF0aCBpbnN0ZWFkLgogICAgICAgKi8KICAgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsIFBST1BfUEFUSCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJw
YXRoIiwKQEAgLTE2MCw2ICsxNjQsOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9jbGFzc19pbml0KFdlYktpdEljb25EYXRhYmFzZUNsYXNzKiBrbGFzcykKICAgICAgKiB0aGUg
bWFpbiBmcmFtZSBvZiBhIHBhcnRpY3VsYXIgI1dlYktpdFdlYlZpZXcuCiAgICAgICoKICAgICAg
KiBTaW5jZTogMS4zLjEzCisgICAgICoKKyAgICAgKiBEZXByZWNhdGVkOiAxLjg6IFVzZSBXZWJL
aXRGYXZpY29uRGF0YWJhc2U6Omljb24tbG9hZGVkIGluc3RlYWQuCiAgICAgICovCiAgICAgd2Vi
a2l0X2ljb25fZGF0YWJhc2Vfc2lnbmFsc1tJQ09OX0xPQURFRF0gPSBnX3NpZ25hbF9uZXcoImlj
b24tbG9hZGVkIiwKICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGtsYXNzKSwKQEAgLTE5
MSw2ICsxOTcsOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9pbml0KFdlYktp
dEljb25EYXRhYmFzZSogZGF0YWJhc2UpCiAgKiBSZXR1cm5zOiB0aGUgYWJzb2x1dGUgcGF0aCBv
ZiB0aGUgZGF0YWJhc2UgZm9sZGVyLCBvciAlTlVMTAogICoKICAqIFNpbmNlOiAxLjMuMTMKKyAq
CisgKiBEZXByZWNhdGVkOiAxLjg6IFVzZSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfcGF0
aCgpIGluc3RlYWQuCiAgKiovCiBjb25zdCBnY2hhciogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0
X3BhdGgoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKIHsKQEAgLTIxNyw2ICsyMjUsOCBA
QCBzdGF0aWMgdm9pZCBjbG9zZUljb25EYXRhYmFzZU9uRXhpdCgpCiAgKiBQYXNzaW5nICVOVUxM
IG9yICIiIGRpc2FibGVzIHRoZSBpY29uIGRhdGFiYXNlLgogICoKICAqIFNpbmNlOiAxLjMuMTMK
KyAqCisgKiBEZXByZWNhdGVkOiAxLjg6IFVzZSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9zZXRf
cGF0aCgpIGluc3RlYWQuCiAgKiovCiB2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRo
KFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGdjaGFyKiBwYXRoKQogewpAQCAt
MjU0LDYgKzI2NCw4IEBAIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgoV2ViS2l0
SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhCiAgKiBSZXR1cm5zOiBhIG5l
d2x5IGFsbG9jYXRlZCBVUkkgZm9yIHRoZSBmYXZpY29uLCBvciAlTlVMTAogICoKICAqIFNpbmNl
OiAxLjMuMTMKKyAqCisgKiBEZXByZWNhdGVkOiAxLjg6IFVzZSB3ZWJraXRfZmF2aWNvbl9kYXRh
YmFzZV9nZXRfZmF2aWNvbl91cmkoKSBpbnN0ZWFkLgogICoqLwogZ2NoYXIqIHdlYmtpdF9pY29u
X2RhdGFiYXNlX2dldF9pY29uX3VyaShXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25z
dCBnY2hhciogcGFnZVVSSSkKIHsKQEAgLTI4Miw2ICsyOTQsOCBAQCBnY2hhciogd2Via2l0X2lj
b25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNv
bnN0IGdjaAogICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyByZWZlcmVuY2UgdG8g
YSAjR2RrUGl4YnVmLCBvciAlTlVMTAogICoKICAqIFNpbmNlOiAxLjMuMTMKKyAqCisgKiBEZXBy
ZWNhdGVkOiAxLjg6IFVzZSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV90cnlfZ2V0X2Zhdmljb25f
cGl4YnVmKCkgaW5zdGVhZC4KICAqKi8KIEdka1BpeGJ1Ziogd2Via2l0X2ljb25fZGF0YWJhc2Vf
Z2V0X2ljb25fcGl4YnVmKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGdjaGFy
KiBwYWdlVVJJKQogewpAQCAtMzA3LDYgKzMyMSw4IEBAIEdka1BpeGJ1Ziogd2Via2l0X2ljb25f
ZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNv
CiAgKiBDbGVhcnMgYWxsIGljb25zIGZyb20gdGhlIGRhdGFiYXNlLgogICoKICAqIFNpbmNlOiAx
LjMuMTMKKyAqCisgKiBEZXByZWNhdGVkOiAxLjg6IFVzZSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFz
ZV9jbGVhcigpIGluc3RlYWQuCiAgKiovCiB2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX2NsZWFy
KFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5jcHAKaW5kZXggMzEyYzJlNTNjYjI5Mzc3NTFiNGVhZDhmZGQ2YWU5
YzM4NTViODRkYi4uYjAzMjY0MDUyOGNlNTMzNWFjMWE3YzY3NDliNTI5N2M1YjUzYjE5MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAtMTEsNiArMTEs
NyBAQAogICogIENvcHlyaWdodCAoQykgMjAwOSBNb3ZpYWwgQ3JlYXRpdmUgVGVjaG5vbG9naWVz
IEluYy4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQm9iYnkgUG93ZXJzCiAgKiAgQ29weXJpZ2h0
IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAy
MDEyIElnYWxpYSBTLkwuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC02Nyw3ICs2OCw2IEBACiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNs
dWRlICJIaXRUZXN0UmVzdWx0LmgiCi0jaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQ2xpZW50R3RrLmgiCiAjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKICNpbmNs
dWRlICJNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmgiCkBAIC04Niw2ICs4Niw3IEBACiAj
aW5jbHVkZSAid2Via2l0ZG93bmxvYWQuaCIKICNpbmNsdWRlICJ3ZWJraXRkb3dubG9hZHByaXZh
dGUuaCIKICNpbmNsdWRlICJ3ZWJraXRlbnVtdHlwZXMuaCIKKyNpbmNsdWRlICJ3ZWJraXRmYXZp
Y29uZGF0YWJhc2UuaCIKICNpbmNsdWRlICJ3ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9u
LmgiCiAjaW5jbHVkZSAid2Via2l0Z2xvYmFsc3ByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXRo
aXR0ZXN0cmVzdWx0cHJpdmF0ZS5oIgpAQCAtNTA1MCw2ICs1MDUxLDggQEAgY29uc3QgZ2NoYXIq
IHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAq
IFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgcmVmZXJlbmNlIHRvIGEgI0dka1BpeGJ1
Ziwgb3IgJU5VTEwKICAqCiAgKiBTaW5jZTogMS4zLjEzCisgKgorICogRGVwcmVjYXRlZDogMS44
OiBVc2Ugd2Via2l0X3dlYl92aWV3X3RyeV9nZXRfZmF2aWNvbl9waXhidWYoKSBpbnN0ZWFkLgog
ICovCiBHZGtQaXhidWYqIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl9waXhidWYoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldykKIHsKQEAgLTUwNjAsNyArNTA2MywzNiBAQCBHZGtQaXhidWYqIHdlYmtp
dF93ZWJfdmlld19nZXRfaWNvbl9waXhidWYoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICBy
ZXR1cm4gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmKGRhdGFiYXNlLCBwYWdl
VVJJKTsKIH0KIAorLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfdHJ5X2dldF9mYXZpY29uX3BpeGJ1
ZjoKKyAqIEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3IG9iamVjdAorICogQHdpZHRoOiB0
aGUgZGVzaXJlZCB3aWR0aCBmb3IgdGhlIGljb24KKyAqIEBoZWlnaHQ6IHRoZSBkZXNpcmVkIGhl
aWdodCBmb3IgdGhlIGljb24KKyAqCisgKiBPYnRhaW5zIGEgI0dka1BpeGJ1ZiBvZiB0aGUgZmF2
aWNvbiBmb3IgdGhlIGdpdmVuCisgKiAjV2ViS2l0V2ViVmlldy4gVGhpcyB3aWxsIHJldHVybiAl
TlVMTCBpcyB0aGVyZSBpcyBubyBpY29uIGZvciB0aGUKKyAqIGN1cnJlbnQgI1dlYktpdFdlYlZp
ZXcgb3IgaWYgdGhlIGljb24gaXMgaW4gdGhlIGRhdGFiYXNlIGJ1dCBub3QKKyAqIGF2YWlsYWJs
ZSBhdCB0aGUgbW9tZW50IG9mIHRoaXMgY2FsbC4gVXNlCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2ljb25fdXJpKCkgaWYgeW91IG5lZWQgdG8gZGlzdGluZ3Vpc2ggdGhlc2UKKyAqIGNhc2VzLiAg
VXN1YWxseSB5b3Ugd2FudCB0byBjb25uZWN0IHRvIFdlYktpdFdlYlZpZXc6Omljb24tbG9hZGVk
CisgKiBhbmQgY2FsbCB0aGlzIG1ldGhvZCBpbiB0aGUgY2FsbGJhY2suCisgKgorICogU2VlIGFs
c28gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfdHJ5X2dldF9mYXZpY29uX3BpeGJ1ZigpLiBDb250
cmFyeQorICogdG8gdGhpcyBmdW5jdGlvbiB0aGUgaWNvbiBkYXRhYmFzZSBvbmUgcmV0dXJucyB0
aGUgVVJMIG9mIHRoZSBwYWdlCisgKiBjb250YWluaW5nIHRoZSBpY29uLgorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgcmVmZXJlbmNlIHRvIGEgI0dka1BpeGJ1Ziwgb3Ig
JU5VTEwKKyAqCisgKiBTaW5jZTogMS44CisgKi8KK0dka1BpeGJ1Ziogd2Via2l0X3dlYl92aWV3
X3RyeV9nZXRfZmF2aWNvbl9waXhidWYoV2ViS2l0V2ViVmlldyogd2ViVmlldywgZ3VpbnQgd2lk
dGgsIGd1aW50IGhlaWdodCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
V0VCX1ZJRVcod2ViVmlldyksIDApOwogCisgICAgY29uc3QgZ2NoYXIqIHBhZ2VVUkkgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3KTsKKyAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2Uq
IGRhdGFiYXNlID0gd2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCk7CisgICAgcmV0dXJuIHdl
YmtpdF9mYXZpY29uX2RhdGFiYXNlX3RyeV9nZXRfZmF2aWNvbl9waXhidWYoZGF0YWJhc2UsIHBh
Z2VVUkksIHdpZHRoLCBoZWlnaHQpOworfQogCiAvKioKICAqIHdlYmtpdF93ZWJfdmlld19nZXRf
ZG9tX2RvY3VtZW50OgpAQCAtNTEyOCw2ICs1MTYwLDMxIEBAIHZvaWQgd2ViVmlld0V4aXRGdWxs
c2NyZWVuKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAjZW5kaWYKIH0KIAorI2lmIEVOQUJMRShJ
Q09OREFUQUJBU0UpCit2b2lkIHdlYmtpdFdlYlZpZXdJY29uTG9hZGVkKFdlYktpdEZhdmljb25E
YXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGNoYXIqIGZyYW1lVVJJLCBXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3KQoreworICAgIC8vIFNpbmNlIHdlIGRlZmluaXRlbHkgaGF2ZSBhbiBpY29uIHRoZSBX
ZWJWaWV3IGRvZXNuJ3QgbmVlZCB0bworICAgIC8vIGxpc3RlbiBmb3Igbm90aWZpY2F0aW9ucyBh
bnkgbG9uZ2VyLgorICAgIHdlYmtpdFdlYlZpZXdSZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24o
d2ViVmlldywgRkFMU0UpOworCisgICAgLy8gd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3VyaSgp
IHByb3Blcmx5IHVwZGF0ZXMgdGhlICJpY29uLXVyaSIgcHJvcGVydHkuCisgICAgZ19vYmplY3Rf
bm90aWZ5KEdfT0JKRUNUKHdlYlZpZXcpLCAiaWNvbi11cmkiKTsKKyAgICBnX3NpZ25hbF9lbWl0
KHdlYlZpZXcsIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW0lDT05fTE9BREVEXSwgMCwgd2Via2l0
X3dlYl92aWV3X2dldF9pY29uX3VyaSh3ZWJWaWV3KSk7Cit9CisKK3ZvaWQgd2Via2l0V2ViVmll
d1JlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBib29s
IHNob3VsZFJlZ2lzdGVyKQoreworICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2Ug
PSB3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKTsKKyAgICBpZiAoc2hvdWxkUmVnaXN0ZXIp
IHsKKyAgICAgICAgaWYgKCFnX3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3RlZChkYXRhYmFzZSwg
d2ViVmlldy0+cHJpdi0+aWNvbkxvYWRlZEhhbmRsZXIpKQorICAgICAgICAgICAgd2ViVmlldy0+
cHJpdi0+aWNvbkxvYWRlZEhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KGRhdGFiYXNlLCAiaWNv
bi1sb2FkZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sod2Via2l0V2ViVmlld0ljb25Mb2FkZWQpLCB3
ZWJWaWV3KTsKKyAgICB9IGVsc2UKKyAgICAgICAgaWYgKGdfc2lnbmFsX2hhbmRsZXJfaXNfY29u
bmVjdGVkKGRhdGFiYXNlLCB3ZWJWaWV3LT5wcml2LT5pY29uTG9hZGVkSGFuZGxlcikpCisgICAg
ICAgICAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QoZGF0YWJhc2UsIHdlYlZpZXctPnBy
aXYtPmljb25Mb2FkZWRIYW5kbGVyKTsKK30KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogV2ViQ29yZTo6UGFnZSogY29yZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaCBiL1NvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKaW5kZXggMmExNWI1M2M2NzY4OWNmNmU3MDMx
ZWM4ZDkzZDQ1YmU2MTJkNDRmNC4uM2ViZTE4Zjg1MjlkM2FkODVmNTFlN2Y2YTIxOWU1Mjg1YzUw
ZWFlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCkBAIC00MzMs
NiArNDMzLDExIEBAIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkgICAgICAgICAgICAgICAg
ICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViX3ZpZXcpCiBXRUJLSVRfQVBJIEdka1BpeGJ1
ZiAqCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fcGl4YnVmICAgICAgICAgICAgICAgICAoV2Vi
S2l0V2ViVmlldyAgICAgICAgKndlYl92aWV3KTsKIAorV0VCS0lUX0FQSSBHZGtQaXhidWYgKgor
d2Via2l0X3dlYl92aWV3X3RyeV9nZXRfZmF2aWNvbl9waXhidWYgICAgICAgICAgKFdlYktpdFdl
YlZpZXcgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgd2lkdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAg
ICAgIGhlaWdodCk7CisKIFdFQktJVF9BUEkgV2ViS2l0RE9NRG9jdW1lbnQgKgogd2Via2l0X3dl
Yl92aWV3X2dldF9kb21fZG9jdW1lbnQgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAg
ICAgICp3ZWJfdmlldyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJ2aWV3cHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YnZpZXdwcml2YXRlLmgKaW5kZXggNzViYTE0Y2JlYTdhM2E2Mjk1YzhlY2JmMGUwY2ZiOGQ2ZTZm
MTk3ZS4uOGZjMWFlOTg2NGQ1MGU5MTU4Njc3Zjk4MWZmNGM4ZDI2M2Y5ZTNhMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmgKKysrIGIv
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmgKQEAgLTk5LDYg
Kzk5LDEwIEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld1ByaXZhdGUgewogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKICAgICBPd25QdHI8V2ViS2l0OjpBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dD4gYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ7CiAjZW5kaWYKKworI2lm
IEVOQUJMRShJQ09OREFUQUJBU0UpCisgICAgZ3Vsb25nIGljb25Mb2FkZWRIYW5kbGVyOworI2Vu
ZGlmCiB9OwogCiB2b2lkIHdlYmtpdF93ZWJfdmlld19ub3RpZnlfcmVhZHkoV2ViS2l0V2ViVmll
dyopOwpAQCAtMTE4LDYgKzEyMiwxMSBAQCBHdGtNZW51KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Nv
bnRleHRfbWVudShXZWJLaXRXZWJWaWV3Kik7CiAKIHZvaWQgd2ViVmlld0VudGVyRnVsbHNjcmVl
bihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJDb3JlOjpOb2RlKik7CiB2b2lkIHdlYlZpZXdF
eGl0RnVsbHNjcmVlbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KTsKKworI2lmIEVOQUJMRShJQ09O
REFUQUJBU0UpCit2b2lkIHdlYmtpdFdlYlZpZXdSZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24o
V2ViS2l0V2ViVmlldyosIGJvb2wgc2hvdWxkUmVnaXN0ZXIpOwordm9pZCB3ZWJraXRXZWJWaWV3
SWNvbkxvYWRlZChXZWJLaXRGYXZpY29uRGF0YWJhc2UqLCBjb25zdCBjaGFyKiBmcmFtZVVSSSwg
V2ViS2l0V2ViVmlldyopOworI2VuZGlmCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGFkYTY3NzcwMmIyYzA1MzY4MDdjZGU2
YTUzMWIwYzI4MmU4MzQzMWYuLjZkZmZlYTBjY2Y4YjQwNmIyMDE1YzRjNGEwN2I0Njk2YzgyZDk4
YTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNyBAQAorMjAxMi0wMy0wMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+IGFuZCBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIFdlYktpdEljb25EYXRhYmFzZSBkb2Vzbid0IGtlZXAgaWNvbnMg
Y2FjaGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NjIwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBzdXBwb3J0IGZvciBmYXZpY29ucyBpbiBHdGtMYXVuY2hlci4KKworICAgICAgICAqIEd0a0xh
dW5jaGVyL21haW4uYzoKKyAgICAgICAgKGFjdGl2YXRlVXJpRW50cnlDYik6CisgICAgICAgIChp
Y29uTG9hZGVkQ2IpOgorICAgICAgICAoY3JlYXRlQnJvd3Nlcik6CisKIDIwMTItMDMtMDEgIEth
bGV2IExlbWJlciAgPGthbGV2bGVtYmVyQGdtYWlsLmNvbT4KIAogICAgICAgICBXZWJLaXRUZXN0
UnVubmVyOiBFeHBsaWNpdGx5IGluY2x1ZGUgdW5pc3RkLmggZm9yIGdjYyA0LjcKZGlmZiAtLWdp
dCBhL1Rvb2xzL0d0a0xhdW5jaGVyL21haW4uYyBiL1Rvb2xzL0d0a0xhdW5jaGVyL21haW4uYwpp
bmRleCA1ODc0MDVmYzQyMzRmMWQ3YmU4YTczYzkxM2VkZTJiZGJjZTRiNzExLi4yYTE0OGIzOTRh
ODhhMzg2ZTE5OTcxN2FmYWMzNTgyYmZiYjg1MDJkIDEwMDY0NAotLS0gYS9Ub29scy9HdGtMYXVu
Y2hlci9tYWluLmMKKysrIGIvVG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCkBAIC00MCw2ICs0MCw3
IEBAIHN0YXRpYyB2b2lkIGFjdGl2YXRlVXJpRW50cnlDYihHdGtXaWRnZXQqIGVudHJ5LCBncG9p
bnRlciBkYXRhKQogICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXcgPSBnX29iamVjdF9nZXRfZGF0
YShHX09CSkVDVChlbnRyeSksICJ3ZWItdmlldyIpOwogICAgIGNvbnN0IGdjaGFyKiB1cmkgPSBn
dGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZKGVudHJ5KSk7CiAgICAgZ19hc3NlcnQodXJpKTsK
KyAgICBndGtfZW50cnlfc2V0X2ljb25fZnJvbV9waXhidWYoR1RLX0VOVFJZKGVudHJ5KSwgR1RL
X0VOVFJZX0lDT05fUFJJTUFSWSwgMCk7CiAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHdl
YlZpZXcsIHVyaSk7CiB9CiAKQEAgLTE5NSwxNiArMTk2LDMyIEBAIHN0YXRpYyBnYm9vbGVhbiB3
ZWJWaWV3TGVhdmluZ0Z1bGxTY3JlZW4oV2ViS2l0V2ViVmlldyAqd2ViVmlldywgR09iamVjdCAq
ZWxlbWVuCiAgICAgcmV0dXJuIEZBTFNFOwogfQogCitzdGF0aWMgdm9pZCBpY29uTG9hZGVkQ2Io
V2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciogaWNvblVSSSwgR3RrV2lkZ2V0KiB1
cmlFbnRyeSkKK3sKKyAgICBHZGtQaXhidWYgKmljb24gPSB3ZWJraXRfd2ViX3ZpZXdfdHJ5X2dl
dF9mYXZpY29uX3BpeGJ1Zih3ZWJWaWV3LCAxNiwgMTYpOworICAgIGlmICghaWNvbikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZ3RrX2VudHJ5X3NldF9pY29uX2Zyb21fcGl4YnVmKEdUS19FTlRS
WSh1cmlFbnRyeSksIEdUS19FTlRSWV9JQ09OX1BSSU1BUlksIGljb24pOworICAgIGdfb2JqZWN0
X3VucmVmKGljb24pOworfQorCiBzdGF0aWMgR3RrV2lkZ2V0KiBjcmVhdGVCcm93c2VyKEd0a1dp
ZGdldCogd2luZG93LCBHdGtXaWRnZXQqIHVyaUVudHJ5LCBHdGtXaWRnZXQqIHN0YXR1c2Jhciwg
V2ViS2l0V2ViVmlldyogd2ViVmlldywgR3RrV2lkZ2V0KiB2Ym94KQogeworICAgIGNoYXIgKmlj
b25EYXRhYmFzZVBhdGg7CiAgICAgR3RrV2lkZ2V0ICpzY3JvbGxlZFdpbmRvdyA9IGd0a19zY3Jv
bGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpOwogICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0
X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkV2luZG93KSwgR1RLX1BPTElDWV9B
VVRPTUFUSUMsIEdUS19QT0xJQ1lfQVVUT01BVElDKTsKIAogICAgIGd0a19jb250YWluZXJfYWRk
KEdUS19DT05UQUlORVIoc2Nyb2xsZWRXaW5kb3cpLCBHVEtfV0lER0VUKHdlYlZpZXcpKTsKIAor
ICAgIGljb25EYXRhYmFzZVBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9k
aXIoKSwgIndlYmtpdCIsICJpY29uZGF0YWJhc2UiLCBOVUxMKTsKKyAgICB3ZWJraXRfZmF2aWNv
bl9kYXRhYmFzZV9zZXRfcGF0aCh3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKSwgaWNvbkRh
dGFiYXNlUGF0aCk7CisgICAgZ19mcmVlKGljb25EYXRhYmFzZVBhdGgpOworCiAgICAgZ19zaWdu
YWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojp0aXRsZSIsIEdfQ0FMTEJBQ0sobm90aWZ5VGl0
bGVDYiksIHdpbmRvdyk7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojps
b2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobm90aWZ5TG9hZFN0YXR1c0NiKSwgdXJpRW50cnkpOwog
ICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgIm5vdGlmeTo6cHJvZ3Jlc3MiLCBHX0NBTExC
QUNLKG5vdGlmeVByb2dyZXNzQ2IpLCB3aW5kb3cpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2Vi
VmlldywgImljb24tbG9hZGVkIiwgR19DQUxMQkFDSyhpY29uTG9hZGVkQ2IpLCB1cmlFbnRyeSk7
CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiaG92ZXJpbmctb3Zlci1saW5rIiwgR19D
QUxMQkFDSyhsaW5rSG92ZXJDYiksIHN0YXR1c2Jhcik7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3
ZWJWaWV3LCAiY3JlYXRlLXdlYi12aWV3IiwgR19DQUxMQkFDSyhjcmVhdGVXZWJWaWV3Q2IpLCB3
aW5kb3cpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgIndlYi12aWV3LXJlYWR5Iiwg
R19DQUxMQkFDSyh3ZWJWaWV3UmVhZHlDYiksIHdpbmRvdyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131361</attachid>
            <date>2012-03-12 11:23:41 -0700</date>
            <delta_ts>2012-03-14 10:34:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56200-20120312192338.patch</filename>
            <type>text/plain</type>
            <size>72799</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggNzk0MGNhM2Nk
NDkwYTNmMGQ0YmRiZWU3Y2M1Yjc5YjU1Y2M2NDRhOS4uYmI4Yzc2YmI5ZTZjNGM3ZGZiOTcyNGQx
NTA0OTBiNmU3MzM5ZjgzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNiBAQAorMjAx
Mi0wMy0wNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+IGFuZCBT
ZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtd
IFdlYktpdEljb25EYXRhYmFzZSBkb2Vzbid0IGtlZXAgaWNvbnMgY2FjaGVkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjIwMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFk
ZGVkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xp
ZW50OjpyZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24pOiBpbnN0cnVjdAorICAgICAgICB0aGUg
V2ViVmlldyB0byBsaXN0ZW4gdG8gSWNvbkRhdGFiYXNlJ3Mgbm90aWZpY2F0aW9ucy4KKyAgICAg
ICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24pOiBh
c2sgYm90aAorICAgICAgICBXZWJWaWV3IGFuZCBJY29uRGF0YWJhc2UgdG8gaXNzdWUgbm90aWZp
Y2F0aW9ucyBmb3IgYSBuZXcgaWNvbi4KKyAgICAgICAgKiBkb2NzL3dlYmtpdGd0ay1zZWN0aW9u
cy50eHQ6IHVwZGF0ZWQgZG9jcy4KKyAgICAgICAgKiB0ZXN0cy90ZXN0aWNvbmRhdGFiYXNlLmM6
IEFkZGVkLgorICAgICAgICAoc2VydmVyX2NhbGxiYWNrKToKKyAgICAgICAgKGRlbGV0ZURhdGFi
YXNlRmlsZUlmRXhpc3RzKToKKyAgICAgICAgKHRlc3RXZWJraXRJY29uRGF0YWJhc2VTZXRQYXRo
KToKKyAgICAgICAgKGljb25EYXRhYmFzZUdldEljb25WYWxpZENhbGxiYWNrKToKKyAgICAgICAg
KGljb25EYXRhYmFzZUdldEljb25JbnZhbGlkQ2FsbGJhY2spOgorICAgICAgICAoaWNvbkRhdGFi
YXNlR2V0SWNvbkNhbmNlbGxlZENhbGxiYWNrKToKKyAgICAgICAgKG1haW5Mb29wUXVpdElmTG9h
ZENvbXBsZXRlZCk6CisgICAgICAgIChpZGxlUXVpdExvb3BDYWxsYmFjayk6CisgICAgICAgICh3
ZWJraXRXZWJWaWV3SWNvbkxvYWRlZCk6CisgICAgICAgIChsb2FkVVJJKToKKyAgICAgICAgKGZh
dmljb25EYXRhYmFzZUdldEZhdmljb25WYWxpZElkbGUpOgorICAgICAgICAoZmF2aWNvbkRhdGFi
YXNlR2V0RmF2aWNvbkludmFsaWRJZGxlKToKKyAgICAgICAgKGZhdmljb25EYXRhYmFzZUdldEZh
dmljb25DYW5jZWxsZWRJZGxlKToKKyAgICAgICAgKHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VH
ZXRGYXZpY29uKToKKyAgICAgICAgKHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VHZXRGYXZpY29u
VVJJKToKKyAgICAgICAgKHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VSZW1vdmVBbGwpOgorICAg
ICAgICAodGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUNsb3NlRGF0YWJhc2UpOgorICAgICAgICAo
bWFpbik6CisgICAgICAgICogd2Via2l0L3dlYmtpdC5oOiBhZGRlZCBuZXcgQVBJLgorICAgICAg
ICAqIHdlYmtpdC93ZWJraXRkZWZpbmVzLmg6IGFkZGVkIFdlYktpdEZhdmljb25EYXRhYmFzZS4K
KyAgICAgICAgKiB3ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcDoKKyAgICAgICAgKElj
b25EYXRhYmFzZUNsaWVudEd0ayk6IEljb25EYXRhYmFzZUNsaWVudCBpbXBsZW1lbnRhdGlvbi4K
KyAgICAgICAgKEljb25EYXRhYmFzZUNsaWVudEd0azo6cGVyZm9ybUltcG9ydCk6CisgICAgICAg
IChJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpZFJlbW92ZUFsbEljb25zKToKKyAgICAgICAgKElj
b25EYXRhYmFzZUNsaWVudEd0azo6ZGlkSW1wb3J0SWNvblVSTEZvclBhZ2VVUkwpOgorICAgICAg
ICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpkaWRJbXBvcnRJY29uRGF0YUZvclBhZ2VVUkwpOgor
ICAgICAgICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTCk6
CisgICAgICAgIChJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpZEZpbmlzaFVSTEltcG9ydCk6Cisg
ICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3QpOiBtYWNoaW5lcnkgZm9yIGFzeW5jaHJvbm91cyBj
YWxscy4KKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6UGVuZGluZ0ljb25SZXF1ZXN0KToK
KyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6flBlbmRpbmdJY29uUmVxdWVzdCk6CisgICAg
ICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OnBhZ2VVUkkpOgorICAgICAgICAoUGVuZGluZ0ljb25S
ZXF1ZXN0Ojphc3luY1Jlc3VsdCk6CisgICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OmFzeW5j
UmVzdWx0Q2FuY2VsKToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6YXN5bmNSZXN1bHRD
b21wbGV0ZUluSWRsZSk6CisgICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OmFzeW5jUmVzdWx0
Q29tcGxldGUpOgorICAgICAgICAoX1dlYktpdEljb25EYXRhYmFzZVByaXZhdGUpOgorICAgICAg
ICAod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZGlzcG9zZSk6IEdPYmplY3Qgc3R1ZmYuCisgICAg
ICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9zZXRfcHJvcGVydHkpOiBkaXR0by4KKyAgICAg
ICAgKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9wcm9wZXJ0eSk6IGRpdHRvLgorICAgICAg
ICAod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfY2xhc3NfaW5pdCk6IGRpdHRvLgorICAgICAgICAo
d2Via2l0X2Zhdmljb25fZGF0YWJhc2VfaW5pdCk6IGRpdHRvLgorICAgICAgICAod2Via2l0RmF2
aWNvbkRhdGFiYXNlTm90aWZ5QW5kVXBkYXRlRXhwaXJhdGlvbik6IG5vdGlmeSBhYm91dCBuZXcK
KyAgICAgICAgaWNvbnMgYW5kIHVwZGF0ZSBleHBpcmF0aW9uIHRpbWVzLgorICAgICAgICAod2Vi
a2l0RmF2aWNvbkRhdGFiYXNlRGlzcGF0Y2hEaWRSZWNlaXZlSWNvbik6ICJwcm90ZWN0ZWQiIG1l
dGhvZAorICAgICAgICBjYWxsZWQgYnkgdGhlIEZyYW1lTG9hZGVyQ2xpZW50IHRvIGluZm9ybSBh
Ym91dCBuZXcgaWNvbnMuCisgICAgICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfcGF0
aCk6IHJldHJpZXZlcyBkYXRhYmFzZSBwYXRoLgorICAgICAgICAoc2VsZWN0UXVlcnlDYWxsYmFj
ayk6IHJlbGVhc2VzIGV4cGlyZWQgaWNvbnMgdG8gbGV0IEljb25EYXRhYmFzZQorICAgICAgICBw
cnVuZSB0aGVtLgorICAgICAgICAod2Via2l0RmF2aWNvbkRhdGFiYXNlUHJ1bmVFeHBpcmVkSWNv
bnMpOiBzZWxlY3RzIHRoZSBpY29ucyB0byBiZQorICAgICAgICBwcnVuZWQgYnkgdGhlIEljb25E
YXRhYmFzZS4KKyAgICAgICAgKHdlYmtpdEZhdmljb25EYXRhYmFzZUNsb3NlKTogY2xvc2UgdGhl
IGRhdGFiYXNlLgorICAgICAgICAoY3JlYXRlRXhwaXJhdGlvblRpbWVzRGF0YWJhc2VUYWJsZUlm
Tm90RXhpc3RzKTogY3JlYXRlcyB0aGUKKyAgICAgICAgZGF0YWJhc2UgdXNlZCB0byBjb250cm9s
IGV4cGlyYXRpb24gdGltZXMuCisgICAgICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9zZXRf
cGF0aCk6IG9wZW5zIHRoZSBkYXRhYmFzZSBkZWxheWluZyB0aGUKKyAgICAgICAgY2xlYW51cCBv
ZiBpY29ucyB1bnRpbCB0aGUgaW1wb3J0IGlzIGNvbXBsZXRlLgorICAgICAgICAod2Via2l0X2Zh
dmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKTogcmV0dXJucyB0aGUgdXJpIG9mIHRoZQor
ICAgICAgICBmYXZpY29uLgorICAgICAgICAoZ2V0SWNvblBpeGJ1ZlN5bmNocm9ub3VzbHkpOiBo
ZWxwZXIgZnVuY3Rpb24gdG8gY2FsbAorICAgICAgICBJY29uRGF0YWJhc2U6OnN5bmNocm9ub3Vz
SWNvblVSTEZvclBhZ2VVUkwoKS4KKyAgICAgICAgKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3Ry
eV9nZXRfZmF2aWNvbl9waXhidWYpOiByZXR1cm5zIHRoZQorICAgICAgICBmYXZpY29uIGlmIGV4
aXN0cyBhbmQgaXMgbG9hZGVkIGZyb20gZGlzay4KKyAgICAgICAgKHdlYmtpdEZhdmljb25EYXRh
YmFzZUdldE9yQ3JlYXRlUmVxdWVzdHMpOiBoZWxwZXIgZnVuY3Rpb24gdG8gZ2V0CisgICAgICAg
IHRoZSB2ZWN0b3Igb2YgcGVuZGluZyByZXF1ZXN0cyBmb3IgdGhlIGdpdmVuIHVyaS4KKyAgICAg
ICAgKHdlYmtpdGZhdmljb25kYXRhYmFzZURlbGV0ZVJlcXVlc3RzKTogaGVscGVyIGZ1bmN0aW9u
IHRvIHJlbW92ZSB0aGUKKyAgICAgICAgdmVjdG9yIG9mIHBlbmRpbmcgcmVxdWVzdHMgZm9yIHRo
ZSBnaXZlbiB1cmkuCisgICAgICAgIChnZXRJY29uUGl4YnVmQ2FuY2VsbGVkKToKKyAgICAgICAg
KHdlYmtpdEZhdmljb25EYXRhYmFzZUdldEljb25QaXhidWZDYW5jZWxsZWQpOgorICAgICAgICAo
d2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmKTogYXN5bmNocm9ub3Vz
bHkKKyAgICAgICAgcmV0cmlldmUgaWNvbnMgZnJvbSB0aGUgZGF0YWJhc2UuCisgICAgICAgICh3
ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWZfZmluaXNoKTogZmluaXNo
ZXMgYW4KKyAgICAgICAgb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9nZXRfaWNvbl9waXhidWYoKS4KKyAgICAgICAgKHdlYmtpdEZhdmljb25EYXRhYmFzZVByb2Nl
c3NQZW5kaW5nSWNvbnNGb3JVUkkpOiBwcm9jZXNzIHBlbmRpbmcKKyAgICAgICAgcmVxdWVzdHMg
b25jZSB0aGUgaW1wb3J0IGlzIGZpbmlzaGVkLgorICAgICAgICAod2Via2l0RmF2aWNvbkRhdGFi
YXNlSW1wb3J0RmluaXNoZWQpOiBjaGVjayBwZW5kaW5nIHJlcXVlc3RzIGFuZAorICAgICAgICBk
ZWxldGUgdGhvc2UgdGhhdCBhc2sgZm9yIGljb25zIHRoYXQgZG8gbm90IGV4aXN0IGluIHRoZSBk
YXRhYmFzZS4KKyAgICAgICAgKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsZWFyKTogY2xlYXJz
IHRoZSBkYXRhYmFzZS4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmg6
IGFkZGVkLgorICAgICAgICAoX1dlYktpdEZhdmljb25EYXRhYmFzZSk6CisgICAgICAgIChfV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlQ2xhc3MpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRmYXZpY29u
ZGF0YWJhc2Vwcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIHdlYmtpdC93ZWJraXRnbG9iYWxz
LmNwcDoKKyAgICAgICAgKHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSk6IHJldHJpZXZlcyB0
aGUgbmV3CisgICAgICAgIFdlYktpdEZhdmljb25EYXRhYmFzZS4KKyAgICAgICAgKHdlYmtpdEV4
aXQpOiB1bnJlZiBpY29uIGRhdGFiYXNlIG9uIGV4aXQuCisgICAgICAgICogd2Via2l0L3dlYmtp
dGdsb2JhbHMuaDogYWRkZWQgbmV3IEFQSS4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0aWNvbmRh
dGFiYXNlLmNwcDogYWRkZWQgZGVwcmVjYXRpb24gZG9jdW1lbnRhdGlvbi4KKyAgICAgICAgKHdl
YmtpdF9pY29uX2RhdGFiYXNlX2NsYXNzX2luaXQpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld190cnlfZ2V0X2ljb25fcGl4YnVm
KTogbmV3IEFQSSB0aGF0IHVzZXMgdGhlIG5ldworICAgICAgICBXZWJLaXRGYXZpY29uRGF0YWJh
c2UgQVBJLgorICAgICAgICAod2Via2l0V2ViVmlld0ljb25Mb2FkZWQpOiBkaXNwYXRjaCB0aGUg
aWNvbi1sb2FkZWQgc2lnbmFsIHdoZW4KKyAgICAgICAgcmVxdWVzdGVkIGJ5IHRoZSBGcmFtZUxv
YWRlckNsaWVudC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdSZWdpc3RlckZvckljb25Ob3RpZmlj
YXRpb24pOiBzdGFydHMvc3RvcHMgbGlzdGVuaW5nCisgICAgICAgIHRvIGljb24gZGF0YWJhc2Ug
bm90aWZpY2F0aW9ucy4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5oOiBhZGRlZCBu
ZXcgQVBJLgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3cHJpdmF0ZS5oOiBhZGRlZCBz
b21lIHByb3RlY3RlZCBtZXRob2RzLgorCiAyMDEyLTAzLTA3ICBLYW5naWwgSGFuICA8a2FuZ2ls
LmhhbkBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRFJUXSBSZW1vdmUgUGxhaW5UZXh0Q29udHJv
bGxlciBpbXBsZW1lbnRhdGlvbnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVt
YWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCmluZGV4IDA2OWI1
YjBhNWE5ODMwYzU2NTJmYTQyNjI0ODAzZGY4MDdmNWNhYzUuLjA0ZjlhNzBmYTI3NTE1NzE2MDVk
NWU3ZmViNDhlZjA2NzRmMjg2YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1h
a2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCkBAIC0xMjEs
NiArMTIxLDcgQEAgd2Via2l0Z3RrX3N0YXRpY19oX2FwaSArPSBcCiAJJChzcmNkaXIpL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggXAogCSQoc3JjZGlyKS9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuaCBcCiAJJChzcmNkaXIpL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRlcnJvci5oIFwKKwkkKHNyY2RpcikvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5oIFwKIAkkKHNyY2RpcikvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNpb24uaCBcCiAJ
JChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmggXAogCSQo
c3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aGl0dGVzdHJlc3VsdC5oIFwK
QEAgLTIxOSw2ICsyMjAsOCBAQCB3ZWJraXRndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGRvd25sb2FkcHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0ZXJyb3IuY3BwIFwKKwlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNv
bmRhdGFiYXNlLmNwcCBcCisJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZhdmljb25k
YXRhYmFzZXByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xv
Y2F0aW9ucG9saWN5ZGVjaXNpb24uY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0Z2VvbG9jYXRpb25wb2xpY3lkZWNpc2lvbnByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwIFwKQEAgLTQ0MCw2ICs0NDMsNyBAQCBURVNUX1BS
T0dTICs9IFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdGRvbWRvbXdpbmRvdyBcCiAJUHJvZ3Jh
bXMvdW5pdHRlc3RzL3Rlc3Rkb21ub2RlIFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdGh0dHBi
YWNrZW5kIFwKKwlQcm9ncmFtcy91bml0dGVzdHMvdGVzdGZhdmljb25kYXRhYmFzZSBcCiAJUHJv
Z3JhbXMvdW5pdHRlc3RzL3Rlc3Rsb2FkaW5nIFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdGds
b2JhbHMgXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0bWltZWhhbmRsaW5nIFwKQEAgLTQ4OCw2
ICs0OTIsMTEgQEAgUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RodHRwYmFja2VuZF9DRkxBR1MgPSAk
KHdlYmtpdF90ZXN0c19jZmxhZ3MpCiBQcm9ncmFtc191bml0dGVzdHNfdGVzdGh0dHBiYWNrZW5k
X0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCiBQcm9ncmFtc191bml0dGVzdHNfdGVzdGh0
dHBiYWNrZW5kX0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQogCitQcm9ncmFtc191
bml0dGVzdHNfdGVzdGZhdmljb25kYXRhYmFzZV9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdGZhdmljb25kYXRhYmFzZS5jIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rf
dXRpbHMuYworUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RmYXZpY29uZGF0YWJhc2VfQ0ZMQUdTID0g
JCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RmYXZpY29uZGF0
YWJhc2VfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKK1Byb2dyYW1zX3VuaXR0ZXN0c190
ZXN0ZmF2aWNvbmRhdGFiYXNlX0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQorCiBQ
cm9ncmFtc191bml0dGVzdHNfdGVzdGdsb2JhbHNfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3Rr
L3Rlc3RzL3Rlc3RnbG9iYWxzLmMKIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0Z2xvYmFsc19DRkxB
R1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCiBQcm9ncmFtc191bml0dGVzdHNfdGVzdGdsb2Jh
bHNfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAppbmRleCA0
MmE0OTQ1ODM5NmNmY2UzZDcwN2UwNjk4MTcwMGY2Yjk4MTJhZGJkLi4xZjk3ZDgwOTkzYzVhMWRi
NzEwN2E4ZWUyNGYzZjkzYmMxZTJiOGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCkBAIC02NSw5ICs2
NSwxMCBAQAogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZXR0aW5n
cy5oIgogI2luY2x1ZGUgIndlYmtpdGVycm9yLmgiCisjaW5jbHVkZSAid2Via2l0ZmF2aWNvbmRh
dGFiYXNlLmgiCisjaW5jbHVkZSAid2Via2l0ZmF2aWNvbmRhdGFiYXNlcHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgIndlYmtpdGdsb2JhbHMuaCIKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5o
IgotI2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFzZS5oIgogI2luY2x1ZGUgIndlYmtpdG5ldHdv
cmtyZXF1ZXN0LmgiCiAjaW5jbHVkZSAid2Via2l0bmV0d29ya3JlcXVlc3Rwcml2YXRlLmgiCiAj
aW5jbHVkZSAid2Via2l0bmV0d29ya3Jlc3BvbnNlLmgiCkBAIC02MjUsNyArNjI2LDcgQEAgdm9p
ZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbigpIGNvbnN0CiAK
IHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29s
IHNob3VsZFJlZ2lzdGVyKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgd2Via2l0V2Vi
Vmlld1JlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUp
LCBzaG91bGRSZWdpc3Rlcik7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5G
cmFtZURvY3VtZW50UmVhZHkoYm9vbCByZWFkeSkKQEAgLTgwMiwxOCArODAzLDE0IEBAIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKQogICAgIGlmIChtX2xv
YWRpbmdFcnJvclBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IGdjaGFyKiBmcmFt
ZVVSSSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3VyaShtX2ZyYW1lKTsKLSAgICBXZWJLaXRJY29u
RGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCk7Ci0gICAgZ19z
aWduYWxfZW1pdF9ieV9uYW1lKGRhdGFiYXNlLCAiaWNvbi1sb2FkZWQiLCBtX2ZyYW1lLCBmcmFt
ZVVSSSk7Ci0KKyAgICAvLyBJY29uQ29udHJvbGxlciBsb2FkIGljb25zIG9ubHkgZm9yIHRoZSBt
YWluIGZyYW1lLgogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1l
KG1fZnJhbWUpOworICAgIEFTU0VSVChtX2ZyYW1lID09IHdlYmtpdF93ZWJfdmlld19nZXRfbWFp
bl9mcmFtZSh3ZWJWaWV3KSk7CiAKLSAgICAvLyBBdm9pZCByZXBvcnRpbmcgZmF2aWNvbnMgZm9y
IG5vbi1tYWluIGZyYW1lcy4KLSAgICBpZiAobV9mcmFtZSAhPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X21haW5fZnJhbWUod2ViVmlldykpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdfb2JqZWN0X25v
dGlmeShHX09CSkVDVCh3ZWJWaWV3KSwgImljb24tdXJpIik7Ci0gICAgZ19zaWduYWxfZW1pdF9i
eV9uYW1lKHdlYlZpZXcsICJpY29uLWxvYWRlZCIsIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91
cmkod2ViVmlldykpOworICAgIGNvbnN0IGNoYXIqIGZyYW1lVVJJID0gd2Via2l0X3dlYl9mcmFt
ZV9nZXRfdXJpKG1fZnJhbWUpOworICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2Ug
PSB3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKTsKKyAgICB3ZWJraXRGYXZpY29uRGF0YWJh
c2VEaXNwYXRjaERpZFJlY2VpdmVJY29uKGRhdGFiYXNlLCBmcmFtZVVSSSk7CisgICAgd2Via2l0
V2ViVmlld0ljb25Mb2FkZWQoZGF0YWJhc2UsIGZyYW1lVVJJLCB3ZWJWaWV3KTsKIH0KIAogdm9p
ZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRTdGFydFByb3Zpc2lvbmFsTG9hZCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9kb2NzL3dlYmtpdGd0ay1zZWN0aW9ucy50eHQg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay9kb2NzL3dlYmtpdGd0ay1zZWN0aW9ucy50eHQKaW5kZXggNGEz
NThlODNkYmY5MWMzMGI4ZGQyNWZmYTVjMmFiOWE5ODM1NmIwYi4uNWQ3MjY3ZDE3OTVlMzVmZGE2
NGYzMTE0YjUxODc3MmU5YzFjNGE1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvZG9j
cy93ZWJraXRndGstc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Vi
a2l0Z3RrLXNlY3Rpb25zLnR4dApAQCAtNDY4LDYgKzQ2OCw3IEBAIHdlYmtpdF93ZWJfdmlld19z
ZXRfdmlld19tb2RlCiB3ZWJraXRfd2ViX3ZpZXdfc2V0X3ZpZXdfc291cmNlX21vZGUKIHdlYmtp
dF93ZWJfdmlld19zZXRfem9vbV9sZXZlbAogd2Via2l0X3dlYl92aWV3X3N0b3BfbG9hZGluZwor
d2Via2l0X3dlYl92aWV3X3RyeV9nZXRfZmF2aWNvbl9waXhidWYKIHdlYmtpdF93ZWJfdmlld191
bmRvCiB3ZWJraXRfd2ViX3ZpZXdfdW5tYXJrX3RleHRfbWF0Y2hlcwogd2Via2l0X3dlYl92aWV3
X3pvb21faW4KQEAgLTUxNyw2ICs1MTgsNyBAQCB3ZWJraXRfZ2V0X3dlYl9wbHVnaW5fZGF0YWJh
c2UKIHdlYmtpdF9yZW1vdmVfYWxsX3dlYl9kYXRhYmFzZXMKIHdlYmtpdF9zZXRfZGVmYXVsdF93
ZWJfZGF0YWJhc2VfcXVvdGEKIHdlYmtpdF9zZXRfd2ViX2RhdGFiYXNlX2RpcmVjdG9yeV9wYXRo
Cit3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UKIHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZQog
d2Via2l0X2dldF90ZXh0X2NoZWNrZXIKIHdlYmtpdF9zZXRfdGV4dF9jaGVja2VyCkBAIC02NzQs
NiArNjc2LDMwIEBAIFdlYktpdEljb25EYXRhYmFzZVByaXZhdGUKIDwvU0VDVElPTj4KIAogPFNF
Q1RJT04+Cis8RklMRT53ZWJraXRmYXZpY29uZGF0YWJhc2U8L0ZJTEU+Cis8VElUTEU+V2ViS2l0
RmF2aWNvbkRhdGFiYXNlPC9USVRMRT4KK1dlYktpdEZhdmljb25EYXRhYmFzZQord2Via2l0X2Zh
dmljb25fZGF0YWJhc2VfY2xlYXIKK3dlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9pY29uX3Bp
eGJ1Zgord2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmX2ZpbmlzaAord2Vi
a2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpCit3ZWJraXRfZmF2aWNvbl9kYXRhYmFz
ZV9nZXRfcGF0aAord2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X3R5cGUKK3dlYmtpdF9mYXZp
Y29uX2RhdGFiYXNlX3NldF9wYXRoCit3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV90cnlfZ2V0X2lj
b25fcGl4YnVmCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dFQktJVF9UWVBFX0ZBVklDT05fREFU
QUJBU0UKK1dFQktJVF9GQVZJQ09OX0RBVEFCQVNFCitXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9D
TEFTUworV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfR0VUX0NMQVNTCitXRUJLSVRfSVNfRkFWSUNP
Tl9EQVRBQkFTRQorV0VCS0lUX0lTX0ZBVklDT05fREFUQUJBU0VfQ0xBU1MKKzxTVUJTRUNUSU9O
IFByaXZhdGU+CitXZWJLaXRGYXZpY29uRGF0YWJhc2VDbGFzcworV2ViS2l0RmF2aWNvbkRhdGFi
YXNlUHJpdmF0ZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KIDxGSUxFPndlYmtpdGRlZmluZXM8
L0ZJTEU+CiBXRUJLSVRfQVBJCiBXRUJLSVRHVEtfQVBJX1ZFUlNJT04KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RmYXZpY29uZGF0YWJhc2UuYyBiL1NvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3RmYXZpY29uZGF0YWJhc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MzBhYjk0NzJh
YzQ0Y2I2NjQ4ZjFmNTZhNTJkNjU3Y2U2Y2U2NzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9ndGsvdGVzdHMvdGVzdGZhdmljb25kYXRhYmFzZS5jCkBAIC0wLDAgKzEsMjg3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJ0ZXN0X3V0
aWxzLmgiCisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+Cisj
aW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCisjZGVmaW5l
IElDT05fU0laRSAxNgorCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTQsIDApCitHTWFpbkxv
b3AgKmxvb3A7CitjaGFyKiBiYXNlX3VyaTsKKworc3RhdGljIHZvaWQKK3NlcnZlcl9jYWxsYmFj
ayhTb3VwU2VydmVyICpzZXJ2ZXIsIFNvdXBNZXNzYWdlICptc2csIGNvbnN0IGNoYXIgKnBhdGgs
IEdIYXNoVGFibGUgKnF1ZXJ5LCBTb3VwQ2xpZW50Q29udGV4dCAqY29udGV4dCwgZ3BvaW50ZXIg
ZGF0YSkKK3sKKyAgICBjaGFyKiBjb250ZW50czsKKyAgICBnc2l6ZSBsZW5ndGg7CisKKyAgICBp
ZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2Fn
ZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9T
VEFUVVNfT0spOworCisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvZmF2aWNvbi5pY28iKSkg
eworICAgICAgICBHRXJyb3IqIGVycm9yID0gTlVMTDsKKworICAgICAgICBnX2ZpbGVfZ2V0X2Nv
bnRlbnRzKCJibGFuay5pY28iLCAmY29udGVudHMsICZsZW5ndGgsICZlcnJvcik7CisgICAgICAg
IGdfYXNzZXJ0KCFlcnJvcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29udGVudHMgPSBnX3N0
cmR1cCgiPGh0bWw+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+Iik7CisgICAgICAgIGxlbmd0aCA9
IHN0cmxlbihjb250ZW50cyk7CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
KG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7
CisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobXNnLT5yZXNwb25zZV9ib2R5KTsKK30K
Kworc3RhdGljIHZvaWQgZGVsZXRlRGF0YWJhc2VGaWxlSWZFeGlzdHMoY29uc3QgY2hhciAqZGF0
YWJhc2VQYXRoKQoreworICAgIGlmICghZ19maWxlX3Rlc3QoZGF0YWJhc2VQYXRoLCBHX0ZJTEVf
VEVTVF9JU19ESVIpKQorICAgICAgICByZXR1cm47CisKKyAgICBjaGFyICpkYXRhYmFzZUZpbGVu
YW1lID0gZ19idWlsZF9maWxlbmFtZShkYXRhYmFzZVBhdGgsICJXZWJwYWdlSWNvbnMuZGIiLCBO
VUxMKTsKKyAgICBpZiAoZ191bmxpbmsoZGF0YWJhc2VGaWxlbmFtZSkgPT0gLTEpIHsKKyAgICAg
ICAgZ19mcmVlKGRhdGFiYXNlRmlsZW5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgZ19ybWRpcihkYXRhYmFzZVBhdGgpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RmF2
aWNvbkRhdGFiYXNlU2V0UGF0aCh2b2lkKQoreworICAgIGNoYXIgKmRhdGFiYXNlUGF0aCA9IGdf
YnVpbGRfZmlsZW5hbWUoZ19nZXRfdG1wX2RpcigpLCAid2Via2l0LXRlc3RmYXZpY29uZGF0YWJh
c2UiLCBOVUxMKTsKKyAgICBkZWxldGVEYXRhYmFzZUZpbGVJZkV4aXN0cyhkYXRhYmFzZVBhdGgp
OworCisgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlICpkYXRhYmFzZSA9IHdlYmtpdF9nZXRfZmF2
aWNvbl9kYXRhYmFzZSgpOworICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3NldF9wYXRoKGRh
dGFiYXNlLCBkYXRhYmFzZVBhdGgpOworCisgICAgZ19hc3NlcnRfY21wc3RyKGRhdGFiYXNlUGF0
aCwgPT0sIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9wYXRoKGRhdGFiYXNlKSk7CisKKyAg
ICBnX2ZyZWUoZGF0YWJhc2VQYXRoKTsKK30KKworLy8gU2VlIHRoZSBjb21tZW50IGluIG1haW4o
KSBmdW5jdGlvbiB0aGF0IGdvZXMgd2l0aCB0aGlzIHNhbWUgZ3VhcmQuCisjaWZkZWYgTkRFQlVH
CisKK3N0YXRpYyB2b2lkIGZhdmljb25EYXRhYmFzZUdldEZhdmljb25WYWxpZENhbGxiYWNrKEdP
YmplY3QgKnNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIGdwb2ludGVyIHVzZXJE
YXRhKQoreworICAgIGdib29sZWFuICpiZWVuSGVyZSA9IChnYm9vbGVhbiopdXNlckRhdGE7Cisg
ICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisgICAgR2RrUGl4YnVmICppY29uID0gd2Via2l0X2Zh
dmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmX2ZpbmlzaChXRUJLSVRfRkFWSUNPTl9E
QVRBQkFTRShzb3VyY2VPYmplY3QpLCByZXN1bHQsICZlcnJvcik7CisgICAgZ19hc3NlcnQoaWNv
bik7CisgICAgZ19vYmplY3RfdW5yZWYoaWNvbik7CisKKyAgICAqYmVlbkhlcmUgPSBUUlVFOwor
CisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIHZvaWQgZmF2aWNvbkRh
dGFiYXNlR2V0RmF2aWNvbkludmFsaWRDYWxsYmFjayhHT2JqZWN0ICpzb3VyY2VPYmplY3QsIEdB
c3luY1Jlc3VsdCAqcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnYm9vbGVhbiAq
YmVlbkhlcmUgPSAoZ2Jvb2xlYW4qKXVzZXJEYXRhOworICAgIEdFcnJvciAqZXJyb3IgPSBOVUxM
OworICAgIEdka1BpeGJ1ZiAqaWNvbiA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZp
Y29uX3BpeGJ1Zl9maW5pc2goV0VCS0lUX0ZBVklDT05fREFUQUJBU0Uoc291cmNlT2JqZWN0KSwg
cmVzdWx0LCAmZXJyb3IpOworICAgIGdfYXNzZXJ0KCFpY29uKTsKKworICAgICpiZWVuSGVyZSA9
IFRSVUU7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMgdm9pZCBm
YXZpY29uRGF0YWJhc2VHZXRGYXZpY29uQ2FuY2VsbGVkQ2FsbGJhY2soR09iamVjdCAqc291cmNl
T2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAg
Z2Jvb2xlYW4gKmJlZW5IZXJlID0gKGdib29sZWFuKil1c2VyRGF0YTsKKyAgICBHRXJyb3IgKmVy
cm9yID0gTlVMTDsKKyAgICBHZGtQaXhidWYgKmljb24gPSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFz
ZV9nZXRfZmF2aWNvbl9waXhidWZfZmluaXNoKFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFKHNvdXJj
ZU9iamVjdCksIHJlc3VsdCwgJmVycm9yKTsKKyAgICBnX2Fzc2VydCghaWNvbik7CisgICAgZ19h
c3NlcnQoZXJyb3IgJiYgZ19lcnJvcl9tYXRjaGVzKGVycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VS
Uk9SX0NBTkNFTExFRCkpOworCisgICAgKmJlZW5IZXJlID0gVFJVRTsKKworICAgIGdfbWFpbl9s
b29wX3F1aXQobG9vcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYWluTG9vcFF1aXRJZkxv
YWRDb21wbGV0ZWQoZ2Jvb2xlYW4qIGljb25PclBhZ2VMb2FkZWQpCit7CisgICAgaWYgKCppY29u
T3JQYWdlTG9hZGVkKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIGVsc2UK
KyAgICAgICAgKmljb25PclBhZ2VMb2FkZWQgPSBUUlVFOworfQorCitzdGF0aWMgdm9pZCBpZGxl
UXVpdExvb3BDYWxsYmFjayhXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBHUGFyYW1TcGVjICpwc3Bl
YywgZ2Jvb2xlYW4qIGljb25PclBhZ2VMb2FkZWQpCit7CisgICAgV2ViS2l0TG9hZFN0YXR1cyBz
dGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOworCisgICAg
aWYgKHN0YXR1cyA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCB8fCBzdGF0dXMgPT0gV0VCS0lUX0xP
QURfRkFJTEVEKQorICAgICAgICBtYWluTG9vcFF1aXRJZkxvYWRDb21wbGV0ZWQoaWNvbk9yUGFn
ZUxvYWRlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdJY29uTG9hZGVkKFdlYktp
dEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGNoYXIqIGZyYW1lVVJJLCBnYm9vbGVh
biogaWNvbk9yUGFnZUxvYWRlZCkKK3sKKyAgICBtYWluTG9vcFF1aXRJZkxvYWRDb21wbGV0ZWQo
aWNvbk9yUGFnZUxvYWRlZCk7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRVUkkoY29uc3QgY2hhciAq
dXJpKQoreworICAgIFdlYktpdFdlYlZpZXcgKnZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0
X3dlYl92aWV3X25ldygpKTsKKyAgICBnYm9vbGVhbiBpY29uT3JQYWdlTG9hZGVkID0gRkFMU0U7
CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgdXJpKTsKKworICAgIGdfc2ln
bmFsX2Nvbm5lY3QodmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGlkbGVR
dWl0TG9vcENhbGxiYWNrKSwgJmljb25PclBhZ2VMb2FkZWQpOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3QodmlldywgImljb24tbG9hZGVkIiwgR19DQUxMQkFDSyh3ZWJraXRXZWJWaWV3SWNvbkxvYWRl
ZCksICZpY29uT3JQYWdlTG9hZGVkKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKwor
ICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZCh2aWV3LCBHX1NJR05BTF9N
QVRDSF9EQVRBLCAwLCAwLCAwLCAwLCAmaWNvbk9yUGFnZUxvYWRlZCk7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiBmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uVmFsaWRJZGxlKGdwb2ludGVyIHVzZXJE
YXRhKQoreworICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1Zih3
ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKSwgYmFzZV91cmksCisJCQkJCSAgICAgICBJQ09O
X1NJWkUsIElDT05fU0laRSwgTlVMTCwKKwkJCQkJICAgICAgIGZhdmljb25EYXRhYmFzZUdldEZh
dmljb25WYWxpZENhbGxiYWNrLCB1c2VyRGF0YSk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gZmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbkludmFsaWRJZGxlKGdwb2lu
dGVyIHVzZXJEYXRhKQoreworICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29u
X3BpeGJ1Zih3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKSwgImh0dHA6Ly93d3cud2Via2l0
Z3RrLm9yZy8iLAorCQkJCQkgICAgICAgSUNPTl9TSVpFLCBJQ09OX1NJWkUsIE5VTEwsCisJCQkJ
CSAgICAgICBmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uSW52YWxpZENhbGxiYWNrLCB1c2VyRGF0
YSk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gZmF2aWNvbkRhdGFi
YXNlR2V0RmF2aWNvbkNhbmNlbGxlZElkbGUoZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgR0Nh
bmNlbGxhYmxlICpjYW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3KCk7CisgICAgd2Via2l0
X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmKHdlYmtpdF9nZXRfZmF2aWNvbl9k
YXRhYmFzZSgpLCBiYXNlX3VyaSwKKwkJCQkJICAgICAgIElDT05fU0laRSwgSUNPTl9TSVpFLCBj
YW5jZWxsYWJsZSwKKwkJCQkJICAgICAgIGZhdmljb25EYXRhYmFzZUdldEZhdmljb25DYW5jZWxs
ZWRDYWxsYmFjaywgdXNlckRhdGEpOworICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKGNhbmNlbGxh
YmxlKTsKKyAgICBnX29iamVjdF91bnJlZihjYW5jZWxsYWJsZSk7CisgICAgcmV0dXJuIEZBTFNF
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbih2
b2lkKQoreworICAgIGdib29sZWFuIGJlZW5Ub0ljb25DYWxsYmFjazsKKworICAgIGxvb3AgPSBn
X21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICAvKiBMb2FkIHVyaSB0byBtYWtlIHN1
cmUgZmF2aWNvbiBpcyBhZGRlZCB0byBkYXRhYmFzZSAqLworICAgIGxvYWRVUkkoYmFzZV91cmkp
OworCisgICAgYmVlblRvSWNvbkNhbGxiYWNrID0gRkFMU0U7CisgICAgZ19pZGxlX2FkZCgoR1Nv
dXJjZUZ1bmMpZmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvblZhbGlkSWRsZSwgJmJlZW5Ub0ljb25D
YWxsYmFjayk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworICAgIGdfYXNzZXJ0KGJlZW5U
b0ljb25DYWxsYmFjayk7CisKKyAgICBiZWVuVG9JY29uQ2FsbGJhY2sgPSBGQUxTRTsKKyAgICBn
X2lkbGVfYWRkKChHU291cmNlRnVuYylmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uSW52YWxpZElk
bGUsICZiZWVuVG9JY29uQ2FsbGJhY2spOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKyAg
ICBnX2Fzc2VydChiZWVuVG9JY29uQ2FsbGJhY2spOworCisgICAgYmVlblRvSWNvbkNhbGxiYWNr
ID0gRkFMU0U7CisgICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMpZmF2aWNvbkRhdGFiYXNlR2V0
RmF2aWNvbkNhbmNlbGxlZElkbGUsICZiZWVuVG9JY29uQ2FsbGJhY2spOworICAgIGdfbWFpbl9s
b29wX3J1bihsb29wKTsKKyAgICBnX2Fzc2VydChiZWVuVG9JY29uQ2FsbGJhY2spOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvblVSSSh2b2lkKQor
eworICAgIGNoYXIgKmljb25VUkkgPSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNv
bl91cmkod2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCksIGJhc2VfdXJpKTsKKyAgICBjaGFy
ICpleHBlY3RlZFVSSSA9IGdfc3RyZHVwX3ByaW50ZigiJXNmYXZpY29uLmljbyIsIGJhc2VfdXJp
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoaWNvblVSSSwgPT0sIGV4cGVjdGVkVVJJKTsKKyAgICBn
X2ZyZWUoZXhwZWN0ZWRVUkkpOworICAgIGdfZnJlZShpY29uVVJJKTsKK30KKworI2VuZGlmCisK
K3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VSZW1vdmVBbGwodm9pZCkKK3sK
KyAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UgKmRhdGFiYXNlID0gd2Via2l0X2dldF9mYXZpY29u
X2RhdGFiYXNlKCk7CisgICAgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfY2xlYXIoZGF0YWJhc2Up
OworICAgIGNoYXIgKmljb25VUkkgPSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNv
bl91cmkoZGF0YWJhc2UsIGJhc2VfdXJpKTsKKyAgICBnX2Fzc2VydCghaWNvblVSSSk7CisgICAg
Z19mcmVlKGljb25VUkkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFi
YXNlQ2xvc2VEYXRhYmFzZSh2b2lkKQoreworICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSAqZGF0
YWJhc2UgPSB3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKTsKKyAgICBjaGFyICpkYXRhYmFz
ZVBhdGggPSBnX3N0cmR1cCh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfcGF0aChkYXRhYmFz
ZSkpOworICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCAwKTsK
KyAgICBkZWxldGVEYXRhYmFzZUZpbGVJZkV4aXN0cyhkYXRhYmFzZVBhdGgpOworICAgIGdfZnJl
ZShkYXRhYmFzZVBhdGgpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7
CisgICAgU291cFNlcnZlciogc2VydmVyOworICAgIFNvdXBVUkkqIHNvdXBfdXJpOworCisgICAg
Z3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIDApOworCisgICAgLyogSG9wZWZ1bGx5IG1ha2Ug
dGVzdCBpbmRlcGVuZGVudCBvZiB0aGUgcGF0aCBpdCdzIGNhbGxlZCBmcm9tLiAqLworICAgIHRl
c3R1dGlsc19yZWxhdGl2ZV9jaGRpcigiU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QuaHRtbCIsIGFyZ3ZbMF0pOworCisgICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNP
VVBfU0VSVkVSX1BPUlQsIDAsIE5VTEwpOworICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2
ZXIpOworCisgICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJf
Y2FsbGJhY2ssIE5VTEwsIE5VTEwpOworCisgICAgc291cF91cmkgPSBzb3VwX3VyaV9uZXcoImh0
dHA6Ly8xMjcuMC4wLjEvIik7CisgICAgc291cF91cmlfc2V0X3BvcnQoc291cF91cmksIHNvdXBf
c2VydmVyX2dldF9wb3J0KHNlcnZlcikpOworCisgICAgYmFzZV91cmkgPSBzb3VwX3VyaV90b19z
dHJpbmcoc291cF91cmksIEZBTFNFKTsKKyAgICBzb3VwX3VyaV9mcmVlKHNvdXBfdXJpKTsKKwor
ICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2Zhdmljb25kYXRhYmFzZS9zZXQtcGF0aCIsIHRlc3RXZWJL
aXRGYXZpY29uRGF0YWJhc2VTZXRQYXRoKTsKKworICAgIC8vIFRoZXNlIHR3byB0ZXN0cyB3aWxs
IHRyaWdnZXIgYW4gQVNTRVJUSU9OIG9uIGRlYnVnIGJ1aWxkcyBkdWUKKyAgICAvLyB0byBodHRw
Oi8vd2Via2l0Lm9yZy9iLzY3NTgyLiBSZW1vdmUgdGhlIGd1YXJkcyBvbmNlIHRoZSBidWcgaXMg
Zml4ZWQuCisjaWZkZWYgTkRFQlVHCisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2Zhdmlj
b25kYXRhYmFzZS9nZXQtZmF2aWNvbiIsIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VHZXRGYXZp
Y29uKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZmF2aWNvbmRhdGFiYXNlL2dldC1m
YXZpY29uLXVyaSIsIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uVVJJKTsKKyNl
bmRpZgorCisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2Zhdmljb25kYXRhYmFzZS9yZW1v
dmUtYWxsIiwgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZVJlbW92ZUFsbCk7CisgICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L2Zhdmljb25kYXRhYmFzZS9jbG9zZS1kYiIsIHRlc3RXZWJLaXRG
YXZpY29uRGF0YWJhc2VDbG9zZURhdGFiYXNlKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7
Cit9CisjZWxzZQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGdfY3Jp
dGljYWwoIllvdSB3aWxsIG5lZWQgZ3RrLTIuMTQuMCB0byBydW4gdGhlIHVuaXQgdGVzdHMuIERv
aW5nIG5vdGhpbmcgbm93LiIpOworICAgIHJldHVybiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaCBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXQuaAppbmRleCA3MTQ1MWIxNTM3MTRkNjQ0MDNmNjUyZjJjOWY5MWQ3ZDE2
ZjkyYmRjLi5jN2U5NWU4ZWQ0ZjA4MTZkYTY5ZjY2Mzg1MjhiODE0MWE0OGJmOGNhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgKKysrIGIvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdC5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8d2Via2l0
L3dlYmtpdGRvbS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkb3dubG9hZC5oPgogI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXRlbnVtdHlwZXMuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZmF2
aWNvbmRhdGFiYXNlLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5
ZGVjaXNpb24uaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Z2xvYmFscy5oPgogI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGRlZmluZXMuaAppbmRleCA2NzNiYmRmZTYxZDI3NjE1N2I0ZGY0OWRhN2VjNzI5MmNmZGIw
MWE4Li44OTA5OWI5Yjk4Y2ZkMDk0NjlhMWJjMzE2MjU0NDU4ZmE0MGQ0ODNhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKQEAgLTEwNyw2ICsxMDcsOSBAQCB0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0V2ViUGx1Z2luQ2xhc3MgV2ViS2l0V2ViUGx1Z2luQ2xhc3M7CiB0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0U3BlbGxDaGVja2VyIFdlYktpdFNwZWxsQ2hlY2tlcjsgLyog
ZHVtbXkgdHlwZWRlZiAqLwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNwZWxsQ2hlY2tlckludGVy
ZmFjZSBXZWJLaXRTcGVsbENoZWNrZXJJbnRlcmZhY2U7CiAKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRGYXZpY29uRGF0YWJhc2UgV2ViS2l0RmF2aWNvbkRhdGFiYXNlOwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdEZhdmljb25EYXRhYmFzZUNsYXNzIFdlYktpdEZhdmljb25EYXRhYmFzZUNsYXNzOwor
CiBHX0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGZhdmljb25kYXRhYmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzk0OTgzYmJhNDM2ZDIyMWQx
MTEwZGMyMjU4YTAxODJhOWRmYWRkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2UuY3BwCkBAIC0wLDAgKzEsNzE5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQGxhbmVk
by5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIndlYmtpdGZhdmljb25kYXRhYmFzZS5oIgorCisjaW5jbHVkZSAiRGF0
YWJhc2VEZXRhaWxzLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCisjaW5jbHVkZSAi
RmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIkdSZWZQdHIuaCIKKyNpbmNsdWRlICJJY29uRGF0YWJh
c2UuaCIKKyNpbmNsdWRlICJJY29uRGF0YWJhc2VDbGllbnQuaCIKKyNpbmNsdWRlICJJbWFnZS5o
IgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJ3ZWJraXRmYXZpY29uZGF0YWJhc2Vw
cml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0Z2xvYmFscy5oIgorI2luY2x1ZGUgIndlYmtpdGds
b2JhbHNwcml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgorI2luY2x1ZGUgIndl
YmtpdHNlY3VyaXR5b3JpZ2lucHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmZyYW1lLmgi
CisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRlIDxzcWxpdGUzLmg+CisjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCisvKioKKyAqIFNFQ1RJT046d2Via2l0ZmF2aWNvbmRhdGFiYXNlCisgKiBAc2hvcnRf
ZGVzY3JpcHRpb246IEEgV2ViS2l0IGZhdmljb24gZGF0YWJhc2UKKyAqCisgKiAjV2ViS2l0RmF2
aWNvbkRhdGFiYXNlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgaWNvbnMgYXNzb2NpYXRlZCB3aXRo
CisgKiBhIHBhcnRpY3VsYXIgV2ViIHBhZ2Ugb3IgV2ViIHNpdGUuCisgKgorICogV2ViS2l0IHdp
bGwgYXV0b21hdGljYWxseSBsb29rIGZvciBhdmFpbGFibGUgaWNvbnMgaW4gbGluayBlbGVtZW50
cworICogb24gb3BlbmVkIHBhZ2VzIGFzIHdlbGwgYXMgYW4gZXhpc3RpbmcgZmF2aWNvbi5pY28g
YW5kIGxvYWQgdGhlCisgKiBpbWFnZXMgZm91bmQgaW50byB0aGUgbWVtb3J5IGNhY2hlIGlmIHBv
c3NpYmxlLgorICoKKyAqIFRoZSBkYXRhYmFzZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LiBJbiBv
cmRlciBmb3IgaWNvbnMgdG8gYmUKKyAqIHN0b3JlZCBhbmQgYWNjZXNzZWQsIHlvdSB3aWxsIG5l
ZWQgdG8gc2V0IGFuIGljb24gZGF0YWJhc2UgcGF0aAorICogdXNpbmcgd2Via2l0X2Zhdmljb25f
ZGF0YWJhc2Vfc2V0X3BhdGgoKS4gRGlzYWJsZSB0aGUgZGF0YWJhc2UKKyAqIGFnYWluIHBhc3Np
bmcgJU5VTEwgdG8gdGhlIHByZXZpb3VzIGNhbGwuCisgKgorICogSWYgV2ViS2l0V2ViU2V0dGlu
Z3M6OmVuYWJsZS1wcml2YXRlLWJyb3dzaW5nIGlzICVUUlVFIG5ldyBpY29ucworICogd29uJ3Qg
YmUgYWRkZWQgdG8gdGhlIGRhdGFiYXNlIG9uIGRpc2sgYW5kIG5vIGV4aXN0aW5nIGljb25zIHdp
bGwKKyAqIGJlIGRlbGV0ZWQgZnJvbSBpdC4KKyAqCisgKiBJY29ucyB3aWxsIGJlIGF1dG9tYXRp
Y2FsbHkgcHVyZ2VkIGFmdGVyIDMwIGRheXMgd2l0aG91dCBiZWluZworICogdXNlZC4KKyAqCisg
KiBTaW5jZTogMS44CisgKi8KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCisvLyBJY29ucyB3aWxsIGV4cGlyZSBhZnRlciAzMCBkYXlzLgorI2Rl
ZmluZSBJQ09OX0VYUElSQVRJT05fVElNRSA2MCo2MCoyNCozMAorCitjbGFzcyBQZW5kaW5nSWNv
blJlcXVlc3Q7CisKK3N0YXRpYyB2b2lkIHdlYmtpdEZhdmljb25EYXRhYmFzZVByb2Nlc3NQZW5k
aW5nSWNvbnNGb3JVUkkoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiwgY29uc3QgU3RyaW5nJiBwYWdl
VVJJKTsKK3N0YXRpYyB2b2lkIHdlYmtpdEZhdmljb25EYXRhYmFzZUltcG9ydEZpbmlzaGVkKFdl
YktpdEZhdmljb25EYXRhYmFzZSopOworc3RhdGljIHZvaWQgd2Via2l0RmF2aWNvbkRhdGFiYXNl
R2V0SWNvblBpeGJ1ZkNhbmNlbGxlZChHQ2FuY2VsbGFibGUqLCBQZW5kaW5nSWNvblJlcXVlc3Qq
KTsKK3N0YXRpYyB2b2lkIHdlYmtpdEZhdmljb25EYXRhYmFzZU5vdGlmeUFuZFVwZGF0ZUV4cGly
YXRpb24oV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiwgY29uc3QgY2hhciogcGFnZVVSSSk7CitzdGF0
aWMgdm9pZCB3ZWJraXRGYXZpY29uRGF0YWJhc2VDbG9zZShXZWJLaXRGYXZpY29uRGF0YWJhc2Uq
IGRhdGFiYXNlKTsKKworY2xhc3MgSWNvbkRhdGFiYXNlQ2xpZW50R3RrIDogcHVibGljIEljb25E
YXRhYmFzZUNsaWVudCB7CitwdWJsaWM6CisKKyAgICAvLyBJY29uRGF0YWJhc2VDbGllbnQgaW50
ZXJmYWNlCisgICAgdmlydHVhbCBib29sIHBlcmZvcm1JbXBvcnQoKSB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZUFsbEljb25zKCkgeyB9OworCisgICAgLy8gQ2Fs
bGVkIHdoZW4gdGhlIGFuIGljb24gaXMgcmVxdWVzdGVkIHdoaWxlIHRoZSBpbml0aWFsCisgICAg
Ly8gaW1wb3J0IGlzIGdvaW5nIG9uLgorICAgIHZpcnR1YWwgdm9pZCBkaWRJbXBvcnRJY29uVVJM
Rm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIFVSTCkgeyB9OworCisgICAgLy8gQ2FsbGVkIHdoZW5l
dmVyIGEgcmV0YWluZWQgaWNvbiBpcyByZWFkIGZyb20gZGF0YWJhc2UuCisgICAgdmlydHVhbCB2
b2lkIGRpZEltcG9ydEljb25EYXRhRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIFVSTCkKKyAgICB7
CisgICAgICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2Zh
dmljb25fZGF0YWJhc2UoKTsKKyAgICAgICAgLy8gV2UgbmVlZCB0byBlbWl0IHRoaXMgaGVyZSBi
ZWNhdXNlIHdlYmtpdEZhdmljb25EYXRhYmFzZURpc3BhdGNoRGlkUmVjZWl2ZUljb24oKQorICAg
ICAgICAvLyBpcyBvbmx5IGNhbGxlZCBmb3IgaWNvbnMgdGhhdCBoYXZlIGp1c3QgYmVpbmcgZG93
bmxvYWRlZCwgYW5kIHRoaXMgaXMgY2FsbGVkCisgICAgICAgIC8vIHdoZW4gaWNvbiBkYXRhIGlz
IGltcG9ydGVkIGZyb20gdGhlIGRhdGFiYXNlLgorICAgICAgICB3ZWJraXRGYXZpY29uRGF0YWJh
c2VOb3RpZnlBbmRVcGRhdGVFeHBpcmF0aW9uKGRhdGFiYXNlLCBVUkwudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIHdlYmtpdEZhdmljb25EYXRhYmFzZVByb2Nlc3NQZW5kaW5nSWNvbnNGb3JVUkko
ZGF0YWJhc2UsIFVSTCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUljb25G
b3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgVVJMKQorICAgIHsKKyAgICAgICAgLy8gQ2FsbGVkIHdo
ZW4gdGhlIHRoZSBmYXZpY29uIGZvciBhIHBhcnRpY3VsYXIgVVJMIGNoYW5nZXMuCisgICAgICAg
IC8vIEl0IGRvZXMgbm90IG1lYW4gdGhhdCB0aGUgbmV3IGljb24gZGF0YSBpcyBhdmFpbGFibGUg
eWV0LgorICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hVUkxJbXBvcnQoKQorICAg
IHsKKyAgICAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9nZXRf
ZmF2aWNvbl9kYXRhYmFzZSgpOworICAgICAgICB3ZWJraXRGYXZpY29uRGF0YWJhc2VJbXBvcnRG
aW5pc2hlZChkYXRhYmFzZSk7CisKKyAgICAgICAgLy8gTm93IHRoYXQgZXZlcnl0aGluZyBpcyBp
bXBvcnRlZCBlbmFibGUgcHJ1bmluZyBvZiBvbGQKKyAgICAgICAgLy8gaWNvbnMuIE5vIGljb24g
d2lsbCBiZSByZW1vdmVkIGR1cmluZyB0aGUgaW1wb3J0IHByb2Nlc3MKKyAgICAgICAgLy8gYmVj
YXVzZSB3ZSBkaXNhYmxlIGNsZWFudXBzIGJlZm9yZSBvcGVuaW5nIHRoZSBkYXRhYmFzZS4KKyAg
ICAgICAgSWNvbkRhdGFiYXNlOjphbGxvd0RhdGFiYXNlQ2xlYW51cCgpOworICAgIH0KK307CisK
K2NsYXNzIFBlbmRpbmdJY29uUmVxdWVzdCB7CitwdWJsaWM6CisgICAgUGVuZGluZ0ljb25SZXF1
ZXN0KGNvbnN0IFN0cmluZyYgcGFnZVVSSSwgR1NpbXBsZUFzeW5jUmVzdWx0KiByZXN1bHQsIEdD
YW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEludFNpemUgaWNvblNpemUpCisgICAgICAgIDogbV9w
YWdlVVJJKHBhZ2VVUkkpCisgICAgICAgICwgbV9hc3luY1Jlc3VsdChyZXN1bHQpCisgICAgICAg
ICwgbV9jYW5jZWxsYWJsZShjYW5jZWxsYWJsZSkKKyAgICAgICAgLCBtX2NhbmNlbGxlZElkKDAp
CisgICAgICAgICwgbV9pY29uU2l6ZShpY29uU2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChjYW5j
ZWxsYWJsZSkgeworICAgICAgICAgICAgbV9jYW5jZWxsZWRJZCA9IGdfY2FuY2VsbGFibGVfY29u
bmVjdChjYW5jZWxsYWJsZSwgR19DQUxMQkFDSyh3ZWJraXRGYXZpY29uRGF0YWJhc2VHZXRJY29u
UGl4YnVmQ2FuY2VsbGVkKSwgdGhpcywgMCk7CisgICAgICAgICAgICBnX29iamVjdF9zZXRfZGF0
YV9mdWxsKEdfT0JKRUNUKHJlc3VsdCksICJjYW5jZWxsYWJsZSIsIGdfb2JqZWN0X3JlZihjYW5j
ZWxsYWJsZSksIHN0YXRpY19jYXN0PEdEZXN0cm95Tm90aWZ5PihnX29iamVjdF91bnJlZikpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgflBlbmRpbmdJY29uUmVxdWVzdCgpCisgICAgeworICAg
ICAgICBpZiAobV9jYW5jZWxsZWRJZCA+IDApCisgICAgICAgICAgICBnX2NhbmNlbGxhYmxlX2Rp
c2Nvbm5lY3QobV9jYW5jZWxsYWJsZS5nZXQoKSwgbV9jYW5jZWxsZWRJZCk7CisgICAgfQorCisg
ICAgY29uc3QgU3RyaW5nJiBwYWdlVVJJKCkgeyByZXR1cm4gbV9wYWdlVVJJOyB9CisgICAgR1Np
bXBsZUFzeW5jUmVzdWx0KiBhc3luY1Jlc3VsdCgpIHsgcmV0dXJuIG1fYXN5bmNSZXN1bHQuZ2V0
KCk7IH0KKworICAgIHZvaWQgYXN5bmNSZXN1bHRDYW5jZWwoKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fYXN5bmNSZXN1bHQpOworICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Vy
cm9yKG1fYXN5bmNSZXN1bHQuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVE
LCAiJXMiLCBfKCJPcGVyYXRpb24gd2FzIGNhbmNlbGxlZCIpKTsKKyAgICAgICAgZ19zaW1wbGVf
YXN5bmNfcmVzdWx0X2NvbXBsZXRlKG1fYXN5bmNSZXN1bHQuZ2V0KCkpOworICAgIH0KKworICAg
IHZvaWQgYXN5bmNSZXN1bHRDb21wbGV0ZUluSWRsZShHZGtQaXhidWYqIGljb24pCisgICAgewor
ICAgICAgICBBU1NFUlQobV9hc3luY1Jlc3VsdCk7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jl
c3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyKG1fYXN5bmNSZXN1bHQuZ2V0KCksIGljb24sIGljb24g
PyBzdGF0aWNfY2FzdDxHRGVzdHJveU5vdGlmeT4oZ19vYmplY3RfdW5yZWYpIDogMCk7CisgICAg
ICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlKG1fYXN5bmNSZXN1bHQu
Z2V0KCkpOworICAgIH0KKworICAgIHZvaWQgYXN5bmNSZXN1bHRDb21wbGV0ZShHZGtQaXhidWYq
IGljb24pCisgICAgeworICAgICAgICBBU1NFUlQobV9hc3luY1Jlc3VsdCk7CisgICAgICAgIGdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyKG1fYXN5bmNSZXN1bHQuZ2V0
KCksIGljb24sIGljb24gPyBzdGF0aWNfY2FzdDxHRGVzdHJveU5vdGlmeT4oZ19vYmplY3RfdW5y
ZWYpIDogMCk7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZShtX2FzeW5j
UmVzdWx0LmdldCgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fcGFnZVVSSTsK
KyAgICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gbV9hc3luY1Jlc3VsdDsKKyAgICBHUmVm
UHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKKyAgICBndWxvbmcgbV9jYW5jZWxsZWRJ
ZDsKKyAgICBJbnRTaXplIG1faWNvblNpemU7Cit9OworCisKK2VudW0geworICAgIFBST1BfMCwK
KworICAgIFBST1BfUEFUSCwKK307CisKK2VudW0geworICAgIElDT05fTE9BREVELAorCisgICAg
TEFTVF9TSUdOQUwKK307CisKK3N0YXRpYyBndWludCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9z
aWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRGYXZp
Y29uRGF0YWJhc2UsIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlLCBHX1RZUEVfT0JKRUNUKQorCit0
eXBlZGVmIFZlY3RvcjxPd25QdHI8UGVuZGluZ0ljb25SZXF1ZXN0PiA+IFBlbmRpbmdJY29uUmVx
dWVzdFZlY3RvcjsKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFBlbmRpbmdJY29uUmVxdWVzdFZl
Y3Rvcio+IFBlbmRpbmdJY29uUmVxdWVzdE1hcDsKKworc3RydWN0IF9XZWJLaXRGYXZpY29uRGF0
YWJhc2VQcml2YXRlIHsKKyAgICBHT3duUHRyPGdjaGFyPiBwYXRoOworICAgIEljb25EYXRhYmFz
ZUNsaWVudEd0ayBpY29uRGF0YWJhc2VDbGllbnQ7CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0TWFw
IHBlbmRpbmdJY29uUmVxdWVzdHM7CisgICAgYm9vbCBpbXBvcnRGaW5pc2hlZDsKKyAgICBzcWxp
dGUzKiBleHBpcmF0aW9uVGltZXNEYXRhYmFzZTsKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9m
YXZpY29uX2RhdGFiYXNlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRG
YXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gV0VCS0lUX0ZBVklDT05fREFUQUJBU0Uob2JqZWN0
KTsKKworICAgIHdlYmtpdEZhdmljb25EYXRhYmFzZUNsb3NlKGRhdGFiYXNlKTsKKyAgICBkYXRh
YmFzZS0+cHJpdi0+fldlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUoKTsKKworICAgIEdfT0JK
RUNUX0NMQVNTKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3BhcmVudF9jbGFzcyktPmZpbmFsaXpl
KG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3NldF9w
cm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgY29uc3QgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRh
YmFzZSA9IFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHBy
b3BJZCkgeworICAgIGNhc2UgUFJPUF9QQVRIOgorICAgICAgICB3ZWJraXRfZmF2aWNvbl9kYXRh
YmFzZV9zZXRfcGF0aChkYXRhYmFzZSwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9wcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCit7CisgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IFdFQktJVF9G
QVZJQ09OX0RBVEFCQVNFKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNh
c2UgUFJPUF9QQVRIOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF9m
YXZpY29uX2RhdGFiYXNlX2dldF9wYXRoKGRhdGFiYXNlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsYXNzX2luaXQoV2ViS2l0RmF2aWNvbkRhdGFi
YXNlQ2xhc3MqIGtsYXNzKQoreworICAgIHdlYmtpdEluaXQoKTsKKworICAgIEdPYmplY3RDbGFz
cyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIGdvYmplY3RDbGFz
cy0+ZmluYWxpemUgPSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9maW5hbGl6ZTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3NldF9wcm9w
ZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9mYXZpY29uX2Rh
dGFiYXNlX2dldF9wcm9wZXJ0eTsKKworICAgICAvKioKKyAgICAgICogV2ViS2l0RmF2aWNvbkRh
dGFiYXNlOnBhdGg6CisgICAgICAqCisgICAgICAqIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBp
Y29uIGRhdGFiYXNlIGZvbGRlci4KKyAgICAgICoKKyAgICAgICogU2luY2U6IDEuOAorICAgICAg
Ki8KKyAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsIFBS
T1BfUEFUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3Nw
ZWNfc3RyaW5nKCJwYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIlBhdGgiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRo
ZSBpY29uIGRhdGFiYXNlIGZvbGRlciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworCisgICAgIC8qKgorICAgICAgKiBXZWJLaXRGYXZpY29uRGF0YWJhc2U6Omljb24tbG9h
ZGVkOgorICAgICAgKiBAZGF0YWJhc2U6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBp
cyBlbWl0dGVkCisgICAgICAqIEBmcmFtZV91cmk6IHRoZSBVUkkgb2YgdGhlIG1haW4gZnJhbWUg
b2YgYSBXZWIgcGFnZSBjb250YWluaW5nCisgICAgICAqIHRoZSBpY29uCisgICAgICAqCisgICAg
ICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBhIGZhdmljb24gaXMgYXZhaWxhYmxlIGZv
ciB0aGUKKyAgICAgICogbWFpbiBmcmFtZSBvZiBhIHBhZ2UuIFNlZSAjV2ViS2l0V2ViVmlldzo6
aWNvbi1sb2FkZWQgaWYgeW91CisgICAgICAqIG9ubHkgbmVlZCB0aGUgZmF2aWNvbiBvZiBhIHBh
cnRpY3VsYXIgI1dlYktpdFdlYlZpZXcuCisgICAgICAqCisgICAgICAqIE5vdGUgdGhhdCB0aGlz
IHNpZ25hbCBjYXJyaWVzIHRoZSBVUkkgb2YgdGhlIGZyYW1lIHRoYXQgbG9hZHMKKyAgICAgICog
dGhlIGljb24sIHdoaWxlICNXZWJLaXRXZWJWaWV3OjppY29uLWxvYWRlZCBwcm92aWRlcyB0aGUg
VVJJCisgICAgICAqIG9mIHRoZSBmYXZpY29uLgorICAgICAgKgorICAgICAgKiBTaW5jZTogMS44
CisgICAgICAqLworICAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9zaWduYWxzW0lDT05fTE9B
REVEXSA9IGdfc2lnbmFsX25ldygiaWNvbi1sb2FkZWQiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFT
UyhrbGFzcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX1NUUklO
RywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR19UWVBFX05PTkUsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcpOworCisgICAgZ190
eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0RmF2aWNvbkRhdGFiYXNl
UHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9pbml0
KFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgZGF0YWJhc2UtPnByaXYg
PSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoZGF0YWJhc2UsIFdFQktJVF9UWVBFX0ZBVklD
T05fREFUQUJBU0UsIFdlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUpOworICAgIG5ldyAoZGF0
YWJhc2UtPnByaXYpIFdlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUoKTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0RmF2aWNvbkRhdGFiYXNlTm90aWZ5QW5kVXBkYXRlRXhwaXJhdGlvbihXZWJL
aXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBjaGFyKiBwYWdlVVJJKQoreworICAg
IGdfc2lnbmFsX2VtaXQoZGF0YWJhc2UsIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3NpZ25hbHNb
SUNPTl9MT0FERURdLCAwLCBwYWdlVVJJKTsKKworICAgIGlmICghZGF0YWJhc2UtPnByaXYtPmV4
cGlyYXRpb25UaW1lc0RhdGFiYXNlKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBjaGFy
KiB1cGRhdGVRdWVyeUZvcm1hdCA9ICJVUERBVEUgZXhwaXJhdGlvbiBTRVQgZXhwaXJlcyA9ICcl
ZCcgV0hFUkUgdXJsID0gJyVzJyI7CisgICAgR093blB0cjxjaGFyPiB1cGRhdGVRdWVyeShnX3N0
cmR1cF9wcmludGYodXBkYXRlUXVlcnlGb3JtYXQsIChpbnQpY3VycmVudFRpbWUoKSwgcGFnZVVS
SSkpOworCisgICAgaW50IHJldHZhbCA9IHNxbGl0ZTNfZXhlYyhkYXRhYmFzZS0+cHJpdi0+ZXhw
aXJhdGlvblRpbWVzRGF0YWJhc2UsIHVwZGF0ZVF1ZXJ5LmdldCgpLCAwLCAwLCAwKTsKKyAgICBp
ZiAocmV0dmFsID09IFNRTElURV9PSyAmJiAhc3FsaXRlM19jaGFuZ2VzKGRhdGFiYXNlLT5wcml2
LT5leHBpcmF0aW9uVGltZXNEYXRhYmFzZSkpIHsKKyAgICAgICAgY29uc3QgY2hhciogaW5zZXJ0
UXVlcnlGb3JtYXQgPSAiSU5TRVJUIElOVE8gZXhwaXJhdGlvbiAodXJsLCBleHBpcmVzKSBWQUxV
RVMgKCclcycsJyVkJykiOworICAgICAgICBHT3duUHRyPGNoYXI+IGluc2VydFF1ZXJ5KGdfc3Ry
ZHVwX3ByaW50ZihpbnNlcnRRdWVyeUZvcm1hdCwgcGFnZVVSSSwgKGludCljdXJyZW50VGltZSgp
KSk7CisKKyAgICAgICAgc3FsaXRlM19leGVjKGRhdGFiYXNlLT5wcml2LT5leHBpcmF0aW9uVGlt
ZXNEYXRhYmFzZSwgaW5zZXJ0UXVlcnkuZ2V0KCksIDAsIDAsIDApOworICAgIH0KK30KKworLy8g
Q2FsbGVkIGZyb20gRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKQor
dm9pZCB3ZWJraXRGYXZpY29uRGF0YWJhc2VEaXNwYXRjaERpZFJlY2VpdmVJY29uKFdlYktpdEZh
dmljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGNoYXIqIGZyYW1lVVJJKQoreworICAgIHdl
YmtpdEZhdmljb25EYXRhYmFzZU5vdGlmeUFuZFVwZGF0ZUV4cGlyYXRpb24oZGF0YWJhc2UsIGZy
YW1lVVJJKTsKKworICAgIC8vIFJldGFpbiB0aGUgbmV3IGljb24uCisgICAgaWNvbkRhdGFiYXNl
KCkucmV0YWluSWNvbkZvclBhZ2VVUkwoU3RyaW5nOjpmcm9tVVRGOChmcmFtZVVSSSkpOworfQor
CisvKioKKyAqIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9wYXRoOgorICogQGRhdGFiYXNl
OiBhICNXZWJLaXRGYXZpY29uRGF0YWJhc2UKKyAqCisgKiBEZXRlcm1pbmVzIHRoZSBhYnNvbHV0
ZSBwYXRoIHRvIHRoZSBkYXRhYmFzZSBmb2xkZXIgb24gZGlzay4KKyAqCisgKiBSZXR1cm5zOiB0
aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgZGF0YWJhc2UgZm9sZGVyLCBvciAlTlVMTAorICoKKyAq
IFNpbmNlOiAxLjgKKyAqKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9n
ZXRfcGF0aChXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GQVZJQ09OX0RBVEFCQVNFKGRhdGFiYXNlKSwgMCk7CisK
KyAgICByZXR1cm4gZGF0YWJhc2UtPnByaXYtPnBhdGguZ2V0KCk7Cit9CisKK3N0YXRpYyBpbnQK
K3NlbGVjdFF1ZXJ5Q2FsbGJhY2sodm9pZCAqdXNlckRhdGEsIGludCBhcmdjLCBjaGFyICoqYXJn
diwgY2hhciAqKmNvbHVtbk5hbWVzKQoreworICAgIEFTU0VSVChhcmdjID09IDEpOworICAgIFN0
cmluZyBwYWdlVVJMID0gU3RyaW5nOjpmcm9tVVRGOChhcmd2WzBdKTsKKyAgICAvLyBZZXMgSSBr
bm93IHRoaXMgc2VlbXMgc3R1cGlkIGJ1dCB3ZSBuZWVkIHRoaXMgdG8gZ2V0IGljb25zCisgICAg
Ly8gYWN0dWFsbHkgcHVyZ2VkIGR1ZSB0byBob3cgdGhlIEljb25EYXRhYmFzZSB3b3Jrcy4gSXQg
d29uJ3QKKyAgICAvLyBkZWxldGUgYW55IGljb24gdGhhdCBpcyBub3QgaW4gYSBsaXN0IHdoaWNo
IGNvbnRhaW5zIGFtb25nCisgICAgLy8gb3RoZXJzIHRoZSBhbHJlYWR5IHJldGFpbmVkIGljb25z
LgorICAgIGljb25EYXRhYmFzZSgpLnJldGFpbkljb25Gb3JQYWdlVVJMKHBhZ2VVUkwpOworICAg
IGljb25EYXRhYmFzZSgpLnJlbGVhc2VJY29uRm9yUGFnZVVSTChwYWdlVVJMKTsKKworICAgIHJl
dHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRGYXZpY29uRGF0YWJhc2VQcnVuZUV4cGly
ZWRJY29ucyhXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAgIGludCBsYXN0
VmFsaWRUaW1lID0gKGludCljdXJyZW50VGltZSgpIC0gSUNPTl9FWFBJUkFUSU9OX1RJTUU7Cisg
ICAgR093blB0cjxjaGFyPiBzZWxlY3REZWxldGVRdWVyeShnX3N0cmR1cF9wcmludGYoIlNFTEVD
VCB1cmwgRlJPTSBleHBpcmF0aW9uIFdIRVJFIGV4cGlyZXMgPCAlZDsiXAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJERUxFVEUgRlJPTSBleHBp
cmF0aW9uIFdIRVJFIGV4cGlyZXMgPCAlZDsiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWxpZFRpbWUsIGxhc3RWYWxpZFRpbWUpKTsK
KyAgICBzcWxpdGUzX2V4ZWMoZGF0YWJhc2UtPnByaXYtPmV4cGlyYXRpb25UaW1lc0RhdGFiYXNl
LCBzZWxlY3REZWxldGVRdWVyeS5nZXQoKSwgc2VsZWN0UXVlcnlDYWxsYmFjaywgMCwgMCk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdEZhdmljb25EYXRhYmFzZUNsb3NlKFdlYktpdEZhdmljb25E
YXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgaWYgKGljb25EYXRhYmFzZSgpLmlzRW5hYmxlZCgp
KSB7CisgICAgICAgIHNxbGl0ZTNfY2xvc2UoZGF0YWJhc2UtPnByaXYtPmV4cGlyYXRpb25UaW1l
c0RhdGFiYXNlKTsKKyAgICAgICAgaWNvbkRhdGFiYXNlKCkuc2V0RW5hYmxlZChmYWxzZSk7Cisg
ICAgICAgIGljb25EYXRhYmFzZSgpLmNsb3NlKCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBj
cmVhdGVFeHBpcmF0aW9uVGltZXNEYXRhYmFzZVRhYmxlSWZOb3RFeGlzdHMoV2ViS2l0RmF2aWNv
bkRhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBjb25zdCBjaGFyKiBjcmVhdGVRdWVyeSA9ICJD
UkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBleHBpcmF0aW9uICIgXAorICAgICAgICAiKHVybCBU
RVhUIFBSSU1BUlkgS0VZLCBleHBpcmVzIElOVEVHRVIpOyI7CisKKyAgICBpbnQgcmV0dmFsID0g
c3FsaXRlM19leGVjKGRhdGFiYXNlLT5wcml2LT5leHBpcmF0aW9uVGltZXNEYXRhYmFzZSwgY3Jl
YXRlUXVlcnksIDAsIDAsIDApOworICAgIGlmIChyZXR2YWwgIT0gU1FMSVRFX09LKSB7CisgICAg
ICAgIHNxbGl0ZTNfY2xvc2UoZGF0YWJhc2UtPnByaXYtPmV4cGlyYXRpb25UaW1lc0RhdGFiYXNl
KTsKKyAgICAgICAgZGF0YWJhc2UtPnByaXYtPmV4cGlyYXRpb25UaW1lc0RhdGFiYXNlID0gMDsK
KyAgICB9Cit9CisKKy8qKgorICogd2Via2l0X2Zhdmljb25fZGF0YWJhc2Vfc2V0X3BhdGg6Cisg
KiBAZGF0YWJhc2U6IGEgI1dlYktpdEZhdmljb25EYXRhYmFzZQorICogQHBhdGg6IGFuIGFic29s
dXRlIHBhdGggdG8gdGhlIGljb24gZGF0YWJhc2UgZm9sZGVyCisgKgorICogU3BlY2lmaWVzIHRo
ZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBkYXRhYmFzZSBmb2xkZXIgb24gZGlzay4gVGhlCisgKiBp
Y29uIGRhdGFiYXNlIHdpbGwgb25seSBiZSBlbmFibGVkIGFmdGVyIGEgY2FsbCB0byB0aGlzIG1l
dGhvZC4KKyAqCisgKiBQYXNzaW5nICVOVUxMIG9yICIiIGRpc2FibGVzIHRoZSBpY29uIGRhdGFi
YXNlLgorICoKKyAqIFNpbmNlOiAxLjgKKyAqKi8KK3ZvaWQgd2Via2l0X2Zhdmljb25fZGF0YWJh
c2Vfc2V0X3BhdGgoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIq
IHBhdGgpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRkFWSUNPTl9EQVRBQkFT
RShkYXRhYmFzZSkpOworCisgICAgLy8gQWx3YXlzIHRyeSB0byBjbG9zZSBiZWNhdXNlIHRoZSBv
bGQgaWNvbmRhdGFiYXNlIGlzIG9wZW5lZCBieSBkZWZhdWx0LgorICAgIHdlYmtpdEZhdmljb25E
YXRhYmFzZUNsb3NlKGRhdGFiYXNlKTsKKworICAgIGRhdGFiYXNlLT5wcml2LT5pbXBvcnRGaW5p
c2hlZCA9IGZhbHNlOworICAgIGlmICghKHBhdGggJiYgcGF0aFswXSkpIHsKKyAgICAgICAgZGF0
YWJhc2UtPnByaXYtPnBhdGguc2V0KDApOworICAgICAgICBpY29uRGF0YWJhc2UoKS5zZXRFbmFi
bGVkKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGljb25EYXRhYmFzZSgp
LnNldENsaWVudCgmZGF0YWJhc2UtPnByaXYtPmljb25EYXRhYmFzZUNsaWVudCk7CisgICAgSWNv
bkRhdGFiYXNlOjpkZWxheURhdGFiYXNlQ2xlYW51cCgpOworICAgIGljb25EYXRhYmFzZSgpLnNl
dEVuYWJsZWQodHJ1ZSk7CisgICAgaWYgKCFpY29uRGF0YWJhc2UoKS5vcGVuKGZpbGVuYW1lVG9T
dHJpbmcocGF0aCksIEljb25EYXRhYmFzZTo6ZGVmYXVsdERhdGFiYXNlRmlsZW5hbWUoKSkpIHsK
KyAgICAgICAgSWNvbkRhdGFiYXNlOjphbGxvd0RhdGFiYXNlQ2xlYW51cCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgZGF0YWJhc2UtPnByaXYtPnBhdGguc2V0KGdfc3RyZHVwKHBh
dGgpKTsKKworICAgIEdPd25QdHI8Y2hhcj4gZXhwaXJhdGlvblRpbWVzRGF0YWJhc2VQYXRoKGdf
YnVpbGRfZmlsZW5hbWUocGF0aCwgIkZhdmljb25FeHBpcmF0aW9uLmRiIiwgTlVMTCkpOworICAg
IGludCByZXR2YWwgPSBzcWxpdGUzX29wZW4oZXhwaXJhdGlvblRpbWVzRGF0YWJhc2VQYXRoLmdl
dCgpLCAmZGF0YWJhc2UtPnByaXYtPmV4cGlyYXRpb25UaW1lc0RhdGFiYXNlKTsKKyAgICBpZiAo
cmV0dmFsID09IFNRTElURV9PSykKKyAgICAgICAgY3JlYXRlRXhwaXJhdGlvblRpbWVzRGF0YWJh
c2VUYWJsZUlmTm90RXhpc3RzKGRhdGFiYXNlKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmF2aWNv
bl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91cmk6CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEZhdmlj
b25EYXRhYmFzZQorICogQHBhZ2VfdXJpOiBVUkkgb2YgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUg
aWNvbgorICoKKyAqIE9idGFpbnMgdGhlIFVSSSBmb3IgdGhlIGZhdmljb24gZm9yIHRoZSBnaXZl
biBwYWdlIFVSSS4KKyAqIFNlZSBhbHNvIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkoKS4K
KyAqCisgKiBSZXR1cm5zOiBhIG5ld2x5IGFsbG9jYXRlZCBVUkkgZm9yIHRoZSBmYXZpY29uLCBv
ciAlTlVMTAorICoKKyAqIFNpbmNlOiAxLjgKKyAqKi8KK2djaGFyKiB3ZWJraXRfZmF2aWNvbl9k
YXRhYmFzZV9nZXRfZmF2aWNvbl91cmkoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwg
Y29uc3QgZ2NoYXIqIHBhZ2VVUkkpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0lTX0ZBVklDT05fREFUQUJBU0UoZGF0YWJhc2UpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChwYWdlVVJJLCAwKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgU3Ry
aW5nIGljb25VUkkgPSBpY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJM
KFN0cmluZzo6ZnJvbVVURjgocGFnZVVSSSkpOworICAgIGlmIChpY29uVVJJLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZ19zdHJkdXAoaWNvblVSSS51dGY4KCku
ZGF0YSgpKTsKK30KKworc3RhdGljIEdka1BpeGJ1ZiogZ2V0SWNvblBpeGJ1ZlN5bmNocm9ub3Vz
bHkoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBwYWdlVVJM
LCBndWludCB3aWR0aCwgZ3VpbnQgaGVpZ2h0KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisKKyAgICAvLyBUaGUgZXhhY3Qgc2l6ZSB3ZSBwYXNzIGlzIGlycmVsZXZhbnQgdG8gdGhl
IGljb25EYXRhYmFzZSBjb2RlLgorICAgIC8vIFdlIG11c3QgcGFzcyBzb21ldGhpbmcgZ3JlYXRl
ciB0aGFuIDB4MCB0byBnZXQgYSBwaXhidWYuCisgICAgSW1hZ2UqIGljb24gPSBpY29uRGF0YWJh
c2UoKS5zeW5jaHJvbm91c0ljb25Gb3JQYWdlVVJMKHBhZ2VVUkwsIEludFNpemUoMTYsIDE2KSk7
CisgICAgaWYgKCFpY29uKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdSZWZQdHI8R2RrUGl4
YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYoaWNvbi0+Z2V0R2RrUGl4YnVmKCkpOworICAgIGlmICgh
cGl4YnVmKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEEgc2l6ZSBvZiAoMCwgMCkgbWVh
bnMgdGhlIG1heGltdW0gYXZhaWxhYmxlIHNpemUuCisgICAgaWYgKHdpZHRoICYmIGhlaWdodCAm
JiAoaWNvbi0+d2lkdGgoKSAhPSAoaW50KSB3aWR0aCB8fCBpY29uLT5oZWlnaHQoKSAhPSAoaW50
KSBoZWlnaHQpKQorICAgICAgICBwaXhidWYgPSBnZGtfcGl4YnVmX3NjYWxlX3NpbXBsZShwaXhi
dWYuZ2V0KCksIHdpZHRoLCBoZWlnaHQsIEdES19JTlRFUlBfQklMSU5FQVIpOworICAgIHJldHVy
biBwaXhidWYubGVha1JlZigpOworfQorCisvKioKKyAqIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNl
X3RyeV9nZXRfZmF2aWNvbl9waXhidWY6CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEZhdmljb25E
YXRhYmFzZQorICogQHBhZ2VfdXJpOiBVUkkgb2YgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgaWNv
bgorICogQHdpZHRoOiB0aGUgZGVzaXJlZCB3aWR0aCBmb3IgdGhlIGljb24KKyAqIEBoZWlnaHQ6
IHRoZSBkZXNpcmVkIGhlaWdodCBmb3IgdGhlIGljb24KKyAqCisgKiBPYnRhaW5zIGEgI0dka1Bp
eGJ1ZiBvZiB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVuIHBhZ2UgVVJJLCBvcgorICogJU5VTEwg
aWYgdGhlcmUgaXMgbm8gaWNvbiBmb3IgdGhlIGdpdmVuIHBhZ2Ugb3IgaXQgaGFzbid0IGJlZW4K
KyAqIGxvYWRlZCBmcm9tIGRpc2sgeWV0LiBVc2Ugd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0
X2Zhdmljb25fdXJpKCkKKyAqIGlmIHlvdSBuZWVkIHRvIGRpc3Rpbmd1aXNoIHRoZXNlIGNhc2Vz
LiAgVG8gbWFrZSBzdXJlIHRoaXMgbWV0aG9kCisgKiB3aWxsIHJldHVybiBhIHZhbGlkIGljb24g
d2hlbiB0aGUgZ2l2ZW4gVVJJIGhhcyBvbmUsIHlvdSBzaG91bGQKKyAqIGNvbm5lY3QgdG8gV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlOjppY29uLWxvYWRlZCBhbmQgdXNlIHRoaXMgZnVuY3Rpb24KKyAq
IGluIHRoZSBjYWxsYmFjay4KKyAqCisgKiBJZiAoQHdpZHRoLCBAaGVpZ2h0KSBpcyAoMCwgMCkg
dGhlbiB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiB0aGUKKyAqIG1heGltdW0gYXZhaWxhYmxlIHNp
emUgZm9yIHRoZSBpY29uLiBOb3RlIHRoYXQgaWYgeW91IHNwZWNpZnkgYQorICogZGlmZmVyZW50
IHNpemUgdGhlIGljb24gd2lsbCBiZSBzY2FsZWQgZWFjaCB0aW1lIHlvdSBjYWxsIHRoaXMKKyAq
IGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgcmVmZXJl
bmNlIHRvIGEgI0dka1BpeGJ1Ziwgb3IgJU5VTEwKKyAqIGlmIHRoZSBnaXZlbiBVUkkgZG9lc24n
dCBoYXZlIGFuIGljb24gb3IgaXQgaGFzbid0IGJlZW4gbG9hZGVkIHlldC4KKyAqCisgKiBTaW5j
ZTogMS44CisgKiovCitHZGtQaXhidWYqIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3RyeV9nZXRf
ZmF2aWNvbl9waXhidWYoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2No
YXIqIHBhZ2VVUkksIGd1aW50IHdpZHRoLCBndWludCBoZWlnaHQpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZBVklDT05fREFUQUJBU0UoZGF0YWJhc2UpLCAwKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChwYWdlVVJJLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbCgod2lkdGggJiYgaGVpZ2h0KSB8fCAoIXdpZHRoICYmICFoZWlnaHQpLCAwKTsKKworICAg
IHJldHVybiBnZXRJY29uUGl4YnVmU3luY2hyb25vdXNseShkYXRhYmFzZSwgU3RyaW5nOjpmcm9t
VVRGOChwYWdlVVJJKSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3N0YXRpYyBQZW5kaW5nSWNvblJl
cXVlc3RWZWN0b3IqIHdlYmtpdEZhdmljb25EYXRhYmFzZUdldE9yQ3JlYXRlUmVxdWVzdHMoV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBwYWdlVVJMKQorewor
ICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciogaWNvbnMgPSBkYXRhYmFzZS0+cHJpdi0+cGVu
ZGluZ0ljb25SZXF1ZXN0cy5nZXQocGFnZVVSTCk7CisgICAgaWYgKCFpY29ucykgeworICAgICAg
ICBpY29ucyA9IG5ldyBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3I7CisgICAgICAgIGRhdGFiYXNl
LT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLnNldChwYWdlVVJMLCBpY29ucyk7CisgICAgfQor
CisgICAgcmV0dXJuIGljb25zOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRmYXZpY29uZGF0YWJh
c2VEZWxldGVSZXF1ZXN0cyhXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBQZW5kaW5n
SWNvblJlcXVlc3RWZWN0b3IqIHJlcXVlc3RzLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7Cisg
ICAgZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMucmVtb3ZlKHBhZ2VVUkwpOwor
ICAgIGRlbGV0ZSByZXF1ZXN0czsKK30KKworc3RhdGljIHZvaWQgZ2V0SWNvblBpeGJ1ZkNhbmNl
bGxlZCh2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBQZW5kaW5nSWNvblJlcXVlc3QqIHJlcXVlc3Qg
PSBzdGF0aWNfY2FzdDxQZW5kaW5nSWNvblJlcXVlc3QqPih1c2VyRGF0YSk7CisgICAgcmVxdWVz
dC0+YXN5bmNSZXN1bHRDYW5jZWwoKTsKKworICAgIGNvbnN0IFN0cmluZyYgcGFnZVVSTCA9IHJl
cXVlc3QtPnBhZ2VVUkkoKTsKKyAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0g
d2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCk7CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVj
dG9yKiBpY29ucyA9IGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmdldChwYWdl
VVJMKTsKKyAgICBpZiAoIWljb25zKQorICAgICAgICByZXR1cm47CisKKyAgICBzaXplX3QgaXRl
bUluZGV4ID0gaWNvbnMtPmZpbmQocmVxdWVzdCk7CisgICAgaWYgKGl0ZW1JbmRleCAhPSBub3RG
b3VuZCkKKyAgICAgICAgaWNvbnMtPnJlbW92ZShpdGVtSW5kZXgpOworICAgIGlmIChpY29ucy0+
aXNFbXB0eSgpKQorICAgICAgICB3ZWJraXRmYXZpY29uZGF0YWJhc2VEZWxldGVSZXF1ZXN0cyhk
YXRhYmFzZSwgaWNvbnMsIHBhZ2VVUkwpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRGYXZpY29u
RGF0YWJhc2VHZXRJY29uUGl4YnVmQ2FuY2VsbGVkKEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUs
IFBlbmRpbmdJY29uUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICAvLyBIYW5kbGUgY2FuY2VsbGVk
IGluIGEgaW4gaWRsZSBzaW5jZSBpdCBtaWdodCBiZSBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkLgor
ICAgIGNhbGxPbk1haW5UaHJlYWQoZ2V0SWNvblBpeGJ1ZkNhbmNlbGxlZCwgcmVxdWVzdCk7Cit9
CisKKy8qKgorICogd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmOgor
ICogQGRhdGFiYXNlOiBhICNXZWJLaXRGYXZpY29uRGF0YWJhc2UKKyAqIEBwYWdlX3VyaTogVVJJ
IG9mIHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIGljb24KKyAqIEB3aWR0aDogdGhlIGRlc2lyZWQg
d2lkdGggZm9yIHRoZSBpY29uCisgKiBAaGVpZ2h0OiB0aGUgZGVzaXJlZCBoZWlnaHQgZm9yIHRo
ZSBpY29uCisgKiBAY2FuY2VsbGFibGU6IEEgI0dDYW5jZWxsYWJsZSBvciAlTlVMTC4KKyAqIEBj
YWxsYmFjazogKGFsbG93LW5vbmUpOiBBICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRvIGNhbGwgd2hl
biB0aGUgcmVxdWVzdCBpcworICogICAgICAgICAgICBzYXRpc2ZpZWQgb3IgJU5VTEwgaWYgeW91
IGRvbid0IGNhcmUgYWJvdXQgdGhlIHJlc3VsdC4KKyAqIEB1c2VyX2RhdGE6IFRoZSBkYXRhIHRv
IHBhc3MgdG8gQGNhbGxiYWNrLgorICoKKyAqIEFzeW5jaHJvbm91c2x5IG9idGFpbnMgYSAjR2Rr
UGl4YnVmIG9mIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4KKyAqIHBhZ2UgVVJJLiBUaGUgYWR2
YW50YWdlIG9mIHRoaXMgbWV0aG9kIG92ZXIKKyAqIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3Ry
eV9nZXRfZmF2aWNvbl9waXhidWYoKSBpcyB0aGF0IGl0IGFsd2F5cyByZXR1cm4gdGhlCisgKiBj
YWNoZWQgaWNvbiBpZiBpdCdzIGluIHRoZSBkYXRhYmFzZSBhc3luY2hyb25vdXNseSB3YWl0aW5n
IGZvciB0aGUKKyAqIGljb24gdG8gYmUgcmVhZCBmcm9tIHRoZSBkYXRhYmFzZS4KKyAqCisgKiBU
aGlzIGlzIGFuIGFzeW5jaHJvbm91cyBtZXRob2QuIFdoZW4gdGhlIG9wZXJhdGlvbiBpcyBmaW5p
c2hlZCwgY2FsbGJhY2sgd2lsbAorICogYmUgaW52b2tlZC4gWW91IGNhbiB0aGVuIGNhbGwgd2Vi
a2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmX2ZpbmlzaCgpCisgKiB0byBn
ZXQgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgorICogU2VlIGFsc28gd2Via2l0X2Zhdmlj
b25fZGF0YWJhc2VfdHJ5X2dldF9mYXZpY29uX3BpeGJ1ZigpLgorICoKKyAqIElmIChAd2lkdGgs
IEBoZWlnaHQpIGlzICgwLCAwKSB0aGVuIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZQorICog
bWF4aW11bSBhdmFpbGFibGUgc2l6ZSBmb3IgdGhlIGljb24uIE5vdGUgdGhhdCBpZiB5b3Ugc3Bl
Y2lmeSBhCisgKiBkaWZmZXJlbnQgc2l6ZSB0aGUgaWNvbiB3aWxsIGJlIHNjYWxlZCBlYWNoIHRp
bWUgeW91IGNhbGwgdGhpcworICogZnVuY3Rpb24uCisgKgorICogU2luY2U6IDEuOAorICoqLwor
dm9pZCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWYoV2ViS2l0RmF2
aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkksIGd1aW50IHdpZHRo
LCBndWludCBoZWlnaHQsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2Fs
bGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0lTX0ZBVklDT05fREFUQUJBU0UoZGF0YWJhc2UpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHBhZ2VVUkkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoKHdpZHRoICYmIGhlaWdodCkg
fHwgKCF3aWR0aCAmJiAhaGVpZ2h0KSk7CisKKyAgICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3Vs
dD4gcmVzdWx0ID0gYWRvcHRHUmVmKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcoR19PQkpFQ1Qo
ZGF0YWJhc2UpLCBjYWxsYmFjaywgdXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29u
X3BpeGJ1ZikpKTsKKworICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW4gaWNvbiBmb3IgdGhlIGdp
dmVuIFVSSSByZXR1cm4gQVNBUC4KKyAgICBpZiAoZGF0YWJhc2UtPnByaXYtPmltcG9ydEZpbmlz
aGVkICYmIGljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoU3RyaW5n
Ojpmcm9tVVRGOChwYWdlVVJJKSkuaXNFbXB0eSgpKSB7CisgICAgICAgIGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyKHJlc3VsdC5nZXQoKSwgMCwgMCk7CisgICAgICAg
IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlKHJlc3VsdC5nZXQoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTdHJpbmcgcGFnZVVSTCA9IFN0cmluZzo6ZnJv
bVVURjgocGFnZVVSSSk7CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0ID0gbmV3IFBl
bmRpbmdJY29uUmVxdWVzdChwYWdlVVJMLCByZXN1bHQuZ2V0KCksIGNhbmNlbGxhYmxlLCBJbnRT
aXplKHdpZHRoLCBoZWlnaHQpKTsKKworICAgIC8vIFJlZ2lzdGVyIGljb24gcmVxdWVzdCBiZWZv
cmUgYXNraW5nIGZvciB0aGUgaWNvbiB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMuCisgICAgUGVu
ZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBpY29ucyA9IHdlYmtpdEZhdmljb25EYXRhYmFzZUdldE9y
Q3JlYXRlUmVxdWVzdHMoZGF0YWJhc2UsIHBhZ2VVUkwpOworICAgIEFTU0VSVChpY29ucyk7Cisg
ICAgaWNvbnMtPmFwcGVuZChhZG9wdFB0cihyZXF1ZXN0KSk7CisKKyAgICBHZGtQaXhidWYqIHBp
eGJ1ZiA9IGdldEljb25QaXhidWZTeW5jaHJvbm91c2x5KGRhdGFiYXNlLCBwYWdlVVJMLCAxNiwg
MTYpOworICAgIGlmICghcGl4YnVmICYmICFkYXRhYmFzZS0+cHJpdi0+aW1wb3J0RmluaXNoZWQp
IHsKKyAgICAgICAgLy8gSW5pdGlhbCBpbXBvcnQgaXMgb25nb2luZywgdGhlIGljb24gZGF0YSB3
aWxsIGJlIGF2YWlsYWJsZSBsYXRlci4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJl
cXVlc3QtPmFzeW5jUmVzdWx0Q29tcGxldGVJbklkbGUocGl4YnVmKTsKKworICAgIC8vIFJlbW92
ZSB0aGUgcmVxdWVzdCB3ZSBoYXZlIGp1c3QgY3JlYXRlZCBhcyBpdCBpc24ndCBwZW5kaW5nCisg
ICAgLy8gYW55bW9yZSBiZWNhdXNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgcGl4YnVmLgorICAgIEFT
U0VSVChpY29ucy0+bGFzdCgpLmdldCgpID09IHJlcXVlc3QpOworICAgIGljb25zLT5yZW1vdmVM
YXN0KCk7CisgICAgaWYgKGljb25zLT5pc0VtcHR5KCkpCisgICAgICAgIHdlYmtpdGZhdmljb25k
YXRhYmFzZURlbGV0ZVJlcXVlc3RzKGRhdGFiYXNlLCBpY29ucywgcGFnZVVSTCk7Cit9CisKKy8q
KgorICogd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmX2ZpbmlzaDoK
KyAqIEBkYXRhYmFzZTogYSAjV2ViS2l0RmF2aWNvbkRhdGFiYXNlCisgKiBAcmVzdWx0OiBBICNH
QXN5bmNSZXN1bHQgb2J0YWluZWQgZnJvbSB0aGUgI0dBc3luY1JlYWR5Q2FsbGJhY2sgcGFzc2Vk
IHRvIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1ZigpCisgKiBAZXJy
b3I6IFJldHVybiBsb2NhdGlvbiBmb3IgZXJyb3Igb3IgJU5VTEwuCisgKgorICogRmluaXNoZXMg
YW4gb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2
aWNvbl9waXhidWYoKS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IHJl
ZmVyZW5jZSB0byBhICNHZGtQaXhidWYsIG9yICVOVUxMLgorICoKKyAqIFNpbmNlOiAxLjgKKyAq
LworR2RrUGl4YnVmKiB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWZf
ZmluaXNoKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UsIEdBc3luY1Jlc3VsdCogcmVz
dWx0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIHNpbXBsZVJl
c3VsdCA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVChyZXN1bHQpOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfc291cmNlX3RhZyhzaW1wbGVSZXN1bHQp
ID09IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1ZiwgMCk7CisKKyAg
ICBpZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Byb3BhZ2F0ZV9lcnJvcihzaW1wbGVSZXN1bHQs
IGVycm9yKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHQ2FuY2VsbGFibGUqIGNhbmNlbGxh
YmxlID0gc3RhdGljX2Nhc3Q8R0NhbmNlbGxhYmxlKj4oZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpF
Q1Qoc2ltcGxlUmVzdWx0KSwgImNhbmNlbGxhYmxlIikpOworICAgIGlmIChjYW5jZWxsYWJsZSAm
JiBnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZChjYW5jZWxsYWJsZSkpIHsKKyAgICAgICAgZ19z
ZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQs
IF8oIk9wZXJhdGlvbiB3YXMgY2FuY2VsbGVkIikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICBHZGtQaXhidWYqIGljb24gPSBzdGF0aWNfY2FzdDxHZGtQaXhidWYqPihnX3NpbXBs
ZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jlc19ncG9pbnRlcihzaW1wbGVSZXN1bHQpKTsKKyAgICBp
ZiAoIWljb24pCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdk
a1BpeGJ1Zio+KGdfb2JqZWN0X3JlZihpY29uKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEZh
dmljb25EYXRhYmFzZVByb2Nlc3NQZW5kaW5nSWNvbnNGb3JVUkkoV2ViS2l0RmF2aWNvbkRhdGFi
YXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBwYWdlVVJMKQoreworICAgIFBlbmRpbmdJY29u
UmVxdWVzdFZlY3RvciogaWNvbnMgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0
cy5nZXQocGFnZVVSTCk7CisgICAgaWYgKCFpY29ucykKKyAgICAgICAgcmV0dXJuOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBpY29ucy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUGVu
ZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0ID0gaWNvbnMtPmF0KGkpLmdldCgpOworICAgICAgICBp
ZiAocmVxdWVzdC0+YXN5bmNSZXN1bHQoKSkKKyAgICAgICAgICAgIHJlcXVlc3QtPmFzeW5jUmVz
dWx0Q29tcGxldGUoZ2V0SWNvblBpeGJ1ZlN5bmNocm9ub3VzbHkoZGF0YWJhc2UsIHBhZ2VVUkws
IDE2LCAxNikpOworICAgIH0KKyAgICB3ZWJraXRmYXZpY29uZGF0YWJhc2VEZWxldGVSZXF1ZXN0
cyhkYXRhYmFzZSwgaWNvbnMsIHBhZ2VVUkwpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRGYXZp
Y29uRGF0YWJhc2VJbXBvcnRGaW5pc2hlZChXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNl
KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgZGF0YWJhc2UtPnByaXYtPmlt
cG9ydEZpbmlzaGVkID0gdHJ1ZTsKKworICAgIC8vIEltcG9ydCBpcyBjb21wbGV0ZSwgcHJvY2Vz
cyBwZW5kaW5nIHJlcXVlc3RzIGZvciBwYWdlcyB0aGF0IGFyZSBub3QgaW4gdGhlIGRhdGFiYXNl
LAorICAgIC8vIHNpbmNlIGRpZEltcG9ydEljb25EYXRhRm9yUGFnZVVSTCgpIHdpbGwgbmV2ZXIg
YmUgY2FsbGVkIGZvciB0aGVtLgorICAgIFZlY3RvcjxTdHJpbmc+IHRvRGVsZXRlVVJMczsKKyAg
ICBQZW5kaW5nSWNvblJlcXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGRhdGFiYXNlLT5w
cml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmVuZCgpOworICAgIGZvciAoUGVuZGluZ0ljb25SZXF1
ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29u
UmVxdWVzdHMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBTdHJpbmcg
aWNvblVSTCA9IGljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoaXRl
ci0+Zmlyc3QpOworICAgICAgICBpZiAoIWljb25VUkwuaXNFbXB0eSgpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBpY29ucyA9IGl0
ZXItPnNlY29uZDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpY29ucy0+c2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgIFBlbmRpbmdJY29uUmVxdWVzdCogcmVxdWVzdCA9IGljb25z
LT5hdChpKS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5hc3luY1Jlc3VsdCgpKQor
ICAgICAgICAgICAgICAgIHJlcXVlc3QtPmFzeW5jUmVzdWx0Q29tcGxldGUoMCk7CisgICAgICAg
IH0KKworICAgICAgICB0b0RlbGV0ZVVSTHMuYXBwZW5kKGl0ZXItPmZpcnN0KTsKKyAgICB9CisK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvRGVsZXRlVVJMcy5zaXplKCk7ICsraSkKKyAg
ICAgICAgd2Via2l0ZmF2aWNvbmRhdGFiYXNlRGVsZXRlUmVxdWVzdHMoZGF0YWJhc2UsIGRhdGFi
YXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmdldCh0b0RlbGV0ZVVSTHNbaV0pLCB0b0Rl
bGV0ZVVSTHNbaV0pOworCisgICAgLy8gQWxzbyBtYXJrIHRoZSBleHBpcmVkIGljb25zIGZvciBw
cnVubmluZy4gV2UgbmVlZCB0byBkbyB0aGlzCisgICAgLy8gQVNBUCBiZWNhdXNlIHBydW5pbmcg
Y2FuIG9ubHkgaGFwcGVuIHRoZSBmaXJzdCB0aW1lIHRoZSBvbi1kaXNrCisgICAgLy8gY2FjaGUg
aXMgd3JpdHRlbiBmb3IgZWFjaCBleGVjdXRpb24uCisgICAgaWYgKGRhdGFiYXNlLT5wcml2LT5l
eHBpcmF0aW9uVGltZXNEYXRhYmFzZSkKKyAgICAgICAgd2Via2l0RmF2aWNvbkRhdGFiYXNlUHJ1
bmVFeHBpcmVkSWNvbnMoZGF0YWJhc2UpOworfQorCisvKioKKyAqIHdlYmtpdF9mYXZpY29uX2Rh
dGFiYXNlX2NsZWFyOgorICogQGRhdGFiYXNlOiBhICNXZWJLaXRGYXZpY29uRGF0YWJhc2UKKyAq
CisgKiBDbGVhcnMgYWxsIGljb25zIGZyb20gdGhlIGRhdGFiYXNlLgorICoKKyAqIFNpbmNlOiAx
LjgKKyAqKi8KK3ZvaWQgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfY2xlYXIoV2ViS2l0RmF2aWNv
bkRhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19G
QVZJQ09OX0RBVEFCQVNFKGRhdGFiYXNlKSk7CisKKyAgICBpY29uRGF0YWJhc2UoKS5yZW1vdmVB
bGxJY29ucygpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0ZmF2aWNvbmRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2
aWNvbmRhdGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTVkNmI4NDQyNjA5MWU3YjRkOGIyYjUyMWJkMjgz
Njg2NzExZDkwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRmYXZpY29uZGF0YWJhc2UuaApAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQGxhbmVkby5jb20+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXRmYXZpY29uZGF0YWJhc2Vf
aAorI2RlZmluZSB3ZWJraXRmYXZpY29uZGF0YWJhc2VfaAorCisjaW5jbHVkZSA8Z2RrLXBpeGJ1
Zi9nZGstcGl4YnVmLmg+CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0ZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZ
UEVfRkFWSUNPTl9EQVRBQkFTRSAgICAgICAgICAgICAod2Via2l0X2Zhdmljb25fZGF0YWJhc2Vf
Z2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0ZBVklDT05fREFUQUJBU0Uob2JqKSAgICAgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0ZBVklD
T05fREFUQUJBU0UsIFdlYktpdEZhdmljb25EYXRhYmFzZSkpCisjZGVmaW5lIFdFQktJVF9GQVZJ
Q09OX0RBVEFCQVNFX0NMQVNTKGtsYXNzKSAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChr
bGFzcyksICBXRUJLSVRfVFlQRV9GQVZJQ09OX0RBVEFCQVNFLCBXZWJLaXRGYXZpY29uRGF0YWJh
c2VDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19GQVZJQ09OX0RBVEFCQVNFKG9iaikgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9GQVZJQ09O
X0RBVEFCQVNFKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0ZBVklDT05fREFUQUJBU0VfQ0xBU1Moa2xh
c3MpICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0ZBVklD
T05fREFUQUJBU0UpKQorI2RlZmluZSBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9HRVRfQ0xBU1Mo
b2JqKSAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfRkFW
SUNPTl9EQVRBQkFTRSwgV2ViS2l0RmF2aWNvbkRhdGFiYXNlQ2xhc3MpKQorCit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZSBXZWJLaXRGYXZpY29uRGF0YWJhc2VQ
cml2YXRlOworCitzdHJ1Y3QgX1dlYktpdEZhdmljb25EYXRhYmFzZSB7CisgICAgR09iamVjdCBw
YXJlbnRfaW5zdGFuY2U7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRGYXZpY29u
RGF0YWJhc2VQcml2YXRlKiBwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRGYXZpY29uRGF0YWJh
c2VDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIC8qIFBhZGRp
bmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEp
ICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lk
ICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZl
ZDQpICh2b2lkKTsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9mYXZpY29uX2RhdGFi
YXNlX2dldF90eXBlICAgICAgICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIGNvbnN0
IGdjaGFyKgord2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X3BhdGggICAgICAgICAgICAgICAg
ICAoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSk7CisKK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2Zhdmljb25fZGF0YWJhc2Vfc2V0X3BhdGggICAgICAgICAgICAgICAgICAoV2ViS2l0
RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiAgICAgICAgICAgcGF0aCk7CisKK1dF
QktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91cmkg
ICAgICAgICAgIChXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAg
ICAgICBwYWdlX3VyaSk7CisKK1dFQktJVF9BUEkgR2RrUGl4YnVmKgord2Via2l0X2Zhdmljb25f
ZGF0YWJhc2VfdHJ5X2dldF9mYXZpY29uX3BpeGJ1ZiAgICAoV2ViS2l0RmF2aWNvbkRhdGFiYXNl
KiBkYXRhYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdjaGFyKiAgICAgICAgICAgcGFnZV91cmksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAg
IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ3VpbnQgICAgICAgICAgICAgICAgICBoZWlnaHQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1ZiAgICAgICAgKFdlYktpdEZh
dmljb25EYXRhYmFzZSogZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgICAgIHBhZ2VfdXJpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAg
ICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgICAgaGVpZ2h0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlKiAg
ICAgICAgICBjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgY2FsbGJhY2ssCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAg
ICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkgR2RrUGl4YnVmKgord2Via2l0X2Zh
dmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmX2ZpbmlzaCAoV2ViS2l0RmF2aWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCogICAgICAgICAgcmVzdWx0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yKiogICAgICAgICAg
ICAgICBlcnJvcik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Zhdmljb25fZGF0YWJhc2Vf
Y2xlYXIgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiB3ZWJraXRmYXZpY29uZGF0YWJhc2VfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZhdmljb25kYXRh
YmFzZXByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0
YWJhc2Vwcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjc2NzlhMGYwMGQ5MmMxMjRmYzZlNWIyZjU4YmUw
Nzk1MzAwM2RkNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRmYXZpY29uZGF0YWJhc2Vwcml2YXRlLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIHdlYmtpdGZhdmljb25kYXRhYmFz
ZXByaXZhdGVfaAorI2RlZmluZSB3ZWJraXRmYXZpY29uZGF0YWJhc2Vwcml2YXRlX2gKKwordm9p
ZCB3ZWJraXRGYXZpY29uRGF0YWJhc2VEaXNwYXRjaERpZFJlY2VpdmVJY29uKFdlYktpdEZhdmlj
b25EYXRhYmFzZSosIGNvbnN0IGNoYXIqIGZyYW1lVVJJKTsKKworI2VuZGlmIC8vIHdlYmtpdGZh
dmljb25kYXRhYmFzZXByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGdsb2JhbHMuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGds
b2JhbHMuY3BwCmluZGV4IGJjNWQ3MjYwNGZjMzllZjY2N2Y2NzBlYzQzZDBlZWI5NGZiZGVmOWIu
LmMxM2RiYjdkZjdmZTA3OTIxNTE3NDIyMjJkMzRmOGVjYjFiMmNkYjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNs
dWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25z
ZS5oIgogI2luY2x1ZGUgIndlYmtpdGFwcGxpY2F0aW9uY2FjaGUuaCIKKyNpbmNsdWRlICJ3ZWJr
aXRmYXZpY29uZGF0YWJhc2UuaCIKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgog
I2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFzZS5oIgogI2luY2x1ZGUgIndlYmtpdHNvdXBhdXRo
ZGlhbG9nLmgiCkBAIC0yMzcsNiArMjM4LDggQEAgc3RhdGljIEd0a1dpZGdldCogY3VycmVudFRv
cGxldmVsQ2FsbGJhY2soV2ViS2l0U291cEF1dGhEaWFsb2cqIGZlYXR1cmUsIFNvdXBNZXMKICAq
IFJldHVybiB2YWx1ZTogKHRyYW5zZmVyIG5vbmUpOiB0aGUgY3VycmVudCAjV2ViS2l0SWNvbkRh
dGFiYXNlCiAgKgogICogU2luY2U6IDEuMy4xMworICoKKyAqIERlcHJlY2F0ZWQ6IDEuODogVXNl
IHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpIGluc3RlYWQKICAqLwogV2ViS2l0SWNvbkRh
dGFiYXNlKiB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKQogewpAQCAtMjQ5LDExICsyNTIsMzUg
QEAgV2ViS2l0SWNvbkRhdGFiYXNlKiB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKQogICAgIHJl
dHVybiBkYXRhYmFzZTsKIH0KIAorLyoqCisgKiB3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2U6
CisgKgorICogUmV0dXJucyB0aGUgI1dlYktpdEZhdmljb25EYXRhYmFzZSBwcm92aWRpbmcgYWNj
ZXNzIHRvIHdlYnNpdGUKKyAqIGljb25zLgorICoKKyAqIFJldHVybiB2YWx1ZTogKHRyYW5zZmVy
IG5vbmUpOiB0aGUgY3VycmVudCAjV2ViS2l0RmF2aWNvbkRhdGFiYXNlCisgKgorICogU2luY2U6
IDEuOAorICovCitXZWJLaXRGYXZpY29uRGF0YWJhc2UqIHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRh
YmFzZSgpCit7CisgICAgd2Via2l0SW5pdCgpOworCisgICAgc3RhdGljIFdlYktpdEZhdmljb25E
YXRhYmFzZSogZGF0YWJhc2UgPSAwOworICAgIGlmICghZGF0YWJhc2UpCisgICAgICAgIGRhdGFi
YXNlID0gV0VCS0lUX0ZBVklDT05fREFUQUJBU0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0ZB
VklDT05fREFUQUJBU0UsIE5VTEwpKTsKKworICAgIHJldHVybiBkYXRhYmFzZTsKK30KKwogc3Rh
dGljIEdSZWZQdHI8V2ViS2l0U3BlbGxDaGVja2VyPiB0ZXh0Q2hlY2tlciA9IDA7CiAKIHN0YXRp
YyB2b2lkIHdlYmtpdEV4aXQoKQogewogICAgIGdfb2JqZWN0X3VucmVmKHdlYmtpdF9nZXRfZGVm
YXVsdF9zZXNzaW9uKCkpOworI2lmIEVOQUJMRShJQ09OREFUQUJBU0UpCisgICAgZ19vYmplY3Rf
dW5yZWYod2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCkpOworI2VuZGlmCiAgICAgdGV4dENo
ZWNrZXIgPSAwOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0Z2xvYmFscy5oIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuaApp
bmRleCA5NmRjODM4NTBlYTdiMThkMzdiYzBlZTM1ODI3ODJhMzk0ZDE2ZTAzLi5mMmQ1OTk3Zjhk
MmM5MmU0ZTI3OWMxOWUxYzM3OTM0NDBmOTY3NDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRnbG9iYWxzLmgKQEAgLTYyLDYgKzYyLDkgQEAgd2Via2l0X2dldF93ZWJfcGx1Z2lu
X2RhdGFiYXNlICAgICAgICAgICAgICAgICAgKHZvaWQpOwogV0VCS0lUX0FQSSBXZWJLaXRJY29u
RGF0YWJhc2UgKgogd2Via2l0X2dldF9pY29uX2RhdGFiYXNlICAgICAgICAgICAgICAgICAgICAg
ICAgKHZvaWQpOwogCitXRUJLSVRfQVBJIFdlYktpdEZhdmljb25EYXRhYmFzZSAqCit3ZWJraXRf
Z2V0X2Zhdmljb25fZGF0YWJhc2UgICAgICAgICAgICAgICAgICAgICAodm9pZCk7CisKIFdFQktJ
VF9BUEkgdm9pZAogd2Via2l0X3NldF9jYWNoZV9tb2RlbCAgICAgICAgICAgICAgICAgICAgICAg
ICAgKFdlYktpdENhY2hlTW9kZWwgICAgIGNhY2hlX21vZGVsKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcAppbmRleCAzODNiMDgxN2VjYmFl
ZTMxNzRlNWVmN2VjN2U5NDE1Yjg0MzdjMTQzLi5lMzI2OWY5YjE5NGM5Y2M4ZWQyNGU1NzRkODY4
ZGI1OGQ4ZjY2MjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
aWNvbmRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNv
bmRhdGFiYXNlLmNwcApAQCAtNTksNiArNTksOCBAQAogICogYmUgZGVsZXRlZCBmcm9tIGl0Lgog
ICoKICAqIFNpbmNlOiAxLjMuMTMKKyAqCisgKiBEZXByZWNhdGVkOiAxLjg6IFVzZSBXZWJLaXRG
YXZpY29uRGF0YWJhc2UgaW5zdGVhZC4KICAqLwogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwpA
QCAtMTQwLDYgKzE0Miw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX2NsYXNz
X2luaXQoV2ViS2l0SWNvbkRhdGFiYXNlQ2xhc3MqIGtsYXNzKQogICAgICAgKiBUaGUgYWJzb2x1
dGUgcGF0aCBvZiB0aGUgaWNvbiBkYXRhYmFzZSBmb2xkZXIuCiAgICAgICAqCiAgICAgICAqIFNp
bmNlOiAxLjMuMTMKKyAgICAgICoKKyAgICAgICogRGVwcmVjYXRlZDogMS44OiBVc2UgV2ViS2l0
RmF2aWNvbkRhdGFiYXNlOjpwYXRoIGluc3RlYWQuCiAgICAgICAqLwogICAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywgUFJPUF9QQVRILAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoInBhdGgiLApA
QCAtMTYwLDYgKzE2NCw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX2NsYXNz
X2luaXQoV2ViS2l0SWNvbkRhdGFiYXNlQ2xhc3MqIGtsYXNzKQogICAgICAqIHRoZSBtYWluIGZy
YW1lIG9mIGEgcGFydGljdWxhciAjV2ViS2l0V2ViVmlldy4KICAgICAgKgogICAgICAqIFNpbmNl
OiAxLjMuMTMKKyAgICAgKgorICAgICAqIERlcHJlY2F0ZWQ6IDEuODogVXNlIFdlYktpdEZhdmlj
b25EYXRhYmFzZTo6aWNvbi1sb2FkZWQgaW5zdGVhZC4KICAgICAgKi8KICAgICB3ZWJraXRfaWNv
bl9kYXRhYmFzZV9zaWduYWxzW0lDT05fTE9BREVEXSA9IGdfc2lnbmFsX25ldygiaWNvbi1sb2Fk
ZWQiLAogICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Moa2xhc3MpLApAQCAtMTkxLDYgKzE5
Nyw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX2luaXQoV2ViS2l0SWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSkKICAqIFJldHVybnM6IHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBk
YXRhYmFzZSBmb2xkZXIsIG9yICVOVUxMCiAgKgogICogU2luY2U6IDEuMy4xMworICoKKyAqIERl
cHJlY2F0ZWQ6IDEuODogVXNlIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9wYXRoKCkgaW5z
dGVhZC4KICAqKi8KIGNvbnN0IGdjaGFyKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0aChX
ZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKQogewpAQCAtMjE3LDYgKzIyNSw4IEBAIHN0YXRp
YyB2b2lkIGNsb3NlSWNvbkRhdGFiYXNlT25FeGl0KCkKICAqIFBhc3NpbmcgJU5VTEwgb3IgIiIg
ZGlzYWJsZXMgdGhlIGljb24gZGF0YWJhc2UuCiAgKgogICogU2luY2U6IDEuMy4xMworICoKKyAq
IERlcHJlY2F0ZWQ6IDEuODogVXNlIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3NldF9wYXRoKCkg
aW5zdGVhZC4KICAqKi8KIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgoV2ViS2l0
SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhdGgpCiB7CkBAIC0yNTQsNiAr
MjY0LDggQEAgdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aChXZWJLaXRJY29uRGF0
YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBnY2hhciogcGEKICAqIFJldHVybnM6IGEgbmV3bHkgYWxs
b2NhdGVkIFVSSSBmb3IgdGhlIGZhdmljb24sIG9yICVOVUxMCiAgKgogICogU2luY2U6IDEuMy4x
MworICoKKyAqIERlcHJlY2F0ZWQ6IDEuODogVXNlIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dl
dF9mYXZpY29uX3VyaSgpIGluc3RlYWQuCiAgKiovCiBnY2hhciogd2Via2l0X2ljb25fZGF0YWJh
c2VfZ2V0X2ljb25fdXJpKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGdjaGFy
KiBwYWdlVVJJKQogewpAQCAtMjgyLDYgKzI5NCw4IEBAIGdjaGFyKiB3ZWJraXRfaWNvbl9kYXRh
YmFzZV9nZXRfaWNvbl91cmkoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2No
CiAgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IHJlZmVyZW5jZSB0byBhICNHZGtQ
aXhidWYsIG9yICVOVUxMCiAgKgogICogU2luY2U6IDEuMy4xMworICoKKyAqIERlcHJlY2F0ZWQ6
IDEuODogVXNlIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3RyeV9nZXRfZmF2aWNvbl9waXhidWYo
KSBpbnN0ZWFkLgogICoqLwogR2RrUGl4YnVmKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl9waXhidWYoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VV
UkkpCiB7CkBAIC0zMDcsNiArMzIxLDggQEAgR2RrUGl4YnVmKiB3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9nZXRfaWNvbl9waXhidWYoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY28KICAqIENs
ZWFycyBhbGwgaWNvbnMgZnJvbSB0aGUgZGF0YWJhc2UuCiAgKgogICogU2luY2U6IDEuMy4xMwor
ICoKKyAqIERlcHJlY2F0ZWQ6IDEuODogVXNlIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsZWFy
KCkgaW5zdGVhZC4KICAqKi8KIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2VfY2xlYXIoV2ViS2l0
SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJ2aWV3LmNwcAppbmRleCA4ODBmMjQ0MzgyOTA2ZTAwYjc2MDc5NzhmYjI0NTgzM2MyZWNi
MmYxLi4wZTY5NmJkNzE5NTJmMDU1NzA1MTBlYmM5NjdlYTAyM2NlZDMyYjJmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCkBAIC0xMSw2ICsxMSw3IEBACiAg
KiAgQ29weXJpZ2h0IChDKSAyMDA5IE1vdmlhbCBDcmVhdGl2ZSBUZWNobm9sb2dpZXMgSW5jLgog
ICogIENvcHlyaWdodCAoQykgMjAwOSBCb2JieSBQb3dlcnMKICAqICBDb3B5cmlnaHQgKEMpIDIw
MTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgSWdh
bGlhIFMuTC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTY3LDcgKzY4LDYgQEAKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgogI2luY2x1ZGUgIkhp
dFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJJY29uRGF0YWJhc2UuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JDbGllbnRHdGsuaCIKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIk1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKQEAgLTg2LDYgKzg2LDcgQEAKICNpbmNsdWRl
ICJ3ZWJraXRkb3dubG9hZC5oIgogI2luY2x1ZGUgIndlYmtpdGRvd25sb2FkcHJpdmF0ZS5oIgog
I2luY2x1ZGUgIndlYmtpdGVudW10eXBlcy5oIgorI2luY2x1ZGUgIndlYmtpdGZhdmljb25kYXRh
YmFzZS5oIgogI2luY2x1ZGUgIndlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNpb24uaCIKICNp
bmNsdWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdGhpdHRlc3Ry
ZXN1bHRwcml2YXRlLmgiCkBAIC01MDYxLDYgKzUwNjIsOCBAQCBjb25zdCBnY2hhciogd2Via2l0
X3dlYl92aWV3X2dldF9pY29uX3VyaShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICogUmV0dXJu
czogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyByZWZlcmVuY2UgdG8gYSAjR2RrUGl4YnVmLCBvciAl
TlVMTAogICoKICAqIFNpbmNlOiAxLjMuMTMKKyAqCisgKiBEZXByZWNhdGVkOiAxLjg6IFVzZSB3
ZWJraXRfd2ViX3ZpZXdfdHJ5X2dldF9mYXZpY29uX3BpeGJ1ZigpIGluc3RlYWQuCiAgKi8KIEdk
a1BpeGJ1Ziogd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3BpeGJ1ZihXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3KQogewpAQCAtNTA3MSw3ICs1MDc0LDM2IEBAIEdka1BpeGJ1Ziogd2Via2l0X3dlYl92
aWV3X2dldF9pY29uX3BpeGJ1ZihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIHJldHVybiB3
ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoZGF0YWJhc2UsIHBhZ2VVUkkpOwog
fQogCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld190cnlfZ2V0X2Zhdmljb25fcGl4YnVmOgorICog
QHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb2JqZWN0CisgKiBAd2lkdGg6IHRoZSBkZXNp
cmVkIHdpZHRoIGZvciB0aGUgaWNvbgorICogQGhlaWdodDogdGhlIGRlc2lyZWQgaGVpZ2h0IGZv
ciB0aGUgaWNvbgorICoKKyAqIE9idGFpbnMgYSAjR2RrUGl4YnVmIG9mIHRoZSBmYXZpY29uIGZv
ciB0aGUgZ2l2ZW4KKyAqICNXZWJLaXRXZWJWaWV3LiBUaGlzIHdpbGwgcmV0dXJuICVOVUxMIGlz
IHRoZXJlIGlzIG5vIGljb24gZm9yIHRoZQorICogY3VycmVudCAjV2ViS2l0V2ViVmlldyBvciBp
ZiB0aGUgaWNvbiBpcyBpbiB0aGUgZGF0YWJhc2UgYnV0IG5vdAorICogYXZhaWxhYmxlIGF0IHRo
ZSBtb21lbnQgb2YgdGhpcyBjYWxsLiBVc2UKKyAqIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91
cmkoKSBpZiB5b3UgbmVlZCB0byBkaXN0aW5ndWlzaCB0aGVzZQorICogY2FzZXMuICBVc3VhbGx5
IHlvdSB3YW50IHRvIGNvbm5lY3QgdG8gV2ViS2l0V2ViVmlldzo6aWNvbi1sb2FkZWQKKyAqIGFu
ZCBjYWxsIHRoaXMgbWV0aG9kIGluIHRoZSBjYWxsYmFjay4KKyAqCisgKiBTZWUgYWxzbyB3ZWJr
aXRfZmF2aWNvbl9kYXRhYmFzZV90cnlfZ2V0X2Zhdmljb25fcGl4YnVmKCkuIENvbnRyYXJ5Cisg
KiB0byB0aGlzIGZ1bmN0aW9uIHRoZSBpY29uIGRhdGFiYXNlIG9uZSByZXR1cm5zIHRoZSBVUkwg
b2YgdGhlIHBhZ2UKKyAqIGNvbnRhaW5pbmcgdGhlIGljb24uCisgKgorICogUmV0dXJuczogKHRy
YW5zZmVyIGZ1bGwpOiBhIG5ldyByZWZlcmVuY2UgdG8gYSAjR2RrUGl4YnVmLCBvciAlTlVMTAor
ICoKKyAqIFNpbmNlOiAxLjgKKyAqLworR2RrUGl4YnVmKiB3ZWJraXRfd2ViX3ZpZXdfdHJ5X2dl
dF9mYXZpY29uX3BpeGJ1ZihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBndWludCB3aWR0aCwgZ3Vp
bnQgaGVpZ2h0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklF
Vyh3ZWJWaWV3KSwgMCk7CiAKKyAgICBjb25zdCBnY2hhciogcGFnZVVSSSA9IHdlYmtpdF93ZWJf
dmlld19nZXRfdXJpKHdlYlZpZXcpOworICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJh
c2UgPSB3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKTsKKyAgICByZXR1cm4gd2Via2l0X2Zh
dmljb25fZGF0YWJhc2VfdHJ5X2dldF9mYXZpY29uX3BpeGJ1ZihkYXRhYmFzZSwgcGFnZVVSSSwg
d2lkdGgsIGhlaWdodCk7Cit9CiAKIC8qKgogICogd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9j
dW1lbnQ6CkBAIC01MTM5LDYgKzUxNzEsMzEgQEAgdm9pZCB3ZWJWaWV3RXhpdEZ1bGxzY3JlZW4o
V2ViS2l0V2ViVmlldyogd2ViVmlldykKICNlbmRpZgogfQogCisjaWYgRU5BQkxFKElDT05EQVRB
QkFTRSkKK3ZvaWQgd2Via2l0V2ViVmlld0ljb25Mb2FkZWQoV2ViS2l0RmF2aWNvbkRhdGFiYXNl
KiBkYXRhYmFzZSwgY29uc3QgY2hhciogZnJhbWVVUkksIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcp
Cit7CisgICAgLy8gU2luY2Ugd2UgZGVmaW5pdGVseSBoYXZlIGFuIGljb24gdGhlIFdlYlZpZXcg
ZG9lc24ndCBuZWVkIHRvCisgICAgLy8gbGlzdGVuIGZvciBub3RpZmljYXRpb25zIGFueSBsb25n
ZXIuCisgICAgd2Via2l0V2ViVmlld1JlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbih3ZWJWaWV3
LCBGQUxTRSk7CisKKyAgICAvLyB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKCkgcHJvcGVy
bHkgdXBkYXRlcyB0aGUgImljb24tdXJpIiBwcm9wZXJ0eS4KKyAgICBnX29iamVjdF9ub3RpZnko
R19PQkpFQ1Qod2ViVmlldyksICJpY29uLXVyaSIpOworICAgIGdfc2lnbmFsX2VtaXQod2ViVmll
dywgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbSUNPTl9MT0FERURdLCAwLCB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2ljb25fdXJpKHdlYlZpZXcpKTsKK30KKwordm9pZCB3ZWJraXRXZWJWaWV3UmVnaXN0
ZXJGb3JJY29uTm90aWZpY2F0aW9uKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGJvb2wgc2hvdWxk
UmVnaXN0ZXIpCit7CisgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtp
dF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpOworICAgIGlmIChzaG91bGRSZWdpc3RlcikgeworICAg
ICAgICBpZiAoIWdfc2lnbmFsX2hhbmRsZXJfaXNfY29ubmVjdGVkKGRhdGFiYXNlLCB3ZWJWaWV3
LT5wcml2LT5pY29uTG9hZGVkSGFuZGxlcikpCisgICAgICAgICAgICB3ZWJWaWV3LT5wcml2LT5p
Y29uTG9hZGVkSGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3QoZGF0YWJhc2UsICJpY29uLWxvYWRl
ZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR19DQUxMQkFDSyh3ZWJraXRXZWJWaWV3SWNvbkxvYWRlZCksIHdlYlZpZXcp
OworICAgIH0gZWxzZQorICAgICAgICBpZiAoZ19zaWduYWxfaGFuZGxlcl9pc19jb25uZWN0ZWQo
ZGF0YWJhc2UsIHdlYlZpZXctPnByaXYtPmljb25Mb2FkZWRIYW5kbGVyKSkKKyAgICAgICAgICAg
IGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChkYXRhYmFzZSwgd2ViVmlldy0+cHJpdi0+aWNv
bkxvYWRlZEhhbmRsZXIpOworfQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBXZWJD
b3JlOjpQYWdlKiBjb3JlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oIGIvU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnZpZXcuaAppbmRleCAyYTE1YjUzYzY3Njg5Y2Y2ZTcwMzFlYzhkOTNk
NDViZTYxMmQ0NGY0Li4zZWJlMThmODUyOWQzYWQ4NWY1MWU3ZjZhMjE5ZTUyODVjNTBlYWU2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKQEAgLTQzMyw2ICs0MzMs
MTEgQEAgd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3VyaSAgICAgICAgICAgICAgICAgICAgKFdl
YktpdFdlYlZpZXcgICAgICAgICp3ZWJfdmlldykKIFdFQktJVF9BUEkgR2RrUGl4YnVmICoKIHdl
YmtpdF93ZWJfdmlld19nZXRfaWNvbl9waXhidWYgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJW
aWV3ICAgICAgICAqd2ViX3ZpZXcpOwogCitXRUJLSVRfQVBJIEdka1BpeGJ1ZiAqCit3ZWJraXRf
d2ViX3ZpZXdfdHJ5X2dldF9mYXZpY29uX3BpeGJ1ZiAgICAgICAgICAoV2ViS2l0V2ViVmlldyAg
ICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgaGVp
Z2h0KTsKKwogV0VCS0lUX0FQSSBXZWJLaXRET01Eb2N1bWVudCAqCiB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2RvbV9kb2N1bWVudCAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndl
Yl92aWV3KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YnZpZXdwcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3By
aXZhdGUuaAppbmRleCAyOTY3ZGE5MmYzNjE0YjNhZTUwNjYyODUyNTkzMmRlMGMzY2I2MjMzLi5l
YjRlZjY1ODUzOTdjMzM3OWZiMDRmNDdiMjEwOWY4MDA5NTY4OGQ0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaApAQCAtOTksNiArOTksMTAg
QEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQogICAgIE93blB0cjxXZWJLaXQ6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250
ZXh0PiBhY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDsKICNlbmRpZgorCisjaWYgRU5BQkxF
KElDT05EQVRBQkFTRSkKKyAgICBndWxvbmcgaWNvbkxvYWRlZEhhbmRsZXI7CisjZW5kaWYKIH07
CiAKIHZvaWQgd2Via2l0X3dlYl92aWV3X25vdGlmeV9yZWFkeShXZWJLaXRXZWJWaWV3Kik7CkBA
IC0xMTgsNiArMTIyLDExIEBAIEd0a01lbnUqIHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dF9t
ZW51KFdlYktpdFdlYlZpZXcqKTsKIAogdm9pZCB3ZWJWaWV3RW50ZXJGdWxsc2NyZWVuKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcsIFdlYkNvcmU6Ok5vZGUqKTsKIHZvaWQgd2ViVmlld0V4aXRGdWxs
c2NyZWVuKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpOworCisjaWYgRU5BQkxFKElDT05EQVRBQkFT
RSkKK3ZvaWQgd2Via2l0V2ViVmlld1JlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihXZWJLaXRX
ZWJWaWV3KiwgYm9vbCBzaG91bGRSZWdpc3Rlcik7Cit2b2lkIHdlYmtpdFdlYlZpZXdJY29uTG9h
ZGVkKFdlYktpdEZhdmljb25EYXRhYmFzZSosIGNvbnN0IGNoYXIqIGZyYW1lVVJJLCBXZWJLaXRX
ZWJWaWV3Kik7CisjZW5kaWYKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMTJlYWRiMzU5Y2QyOGI3ZDhkNTQzZDJkOTkyYjQx
ODE3MDkyMzc0NC4uMzcxZjAyNmU5ZjkzYzg1YzEzMTExOTY3ZTkyOGEzODIyNTcyNzk4MiAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE3IEBACisyMDEyLTAzLTAyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4gYW5kIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dUS10gV2ViS2l0SWNvbkRhdGFiYXNlIGRvZXNuJ3Qga2VlcCBpY29ucyBjYWNoZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MjAwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBv
cnQgZm9yIGZhdmljb25zIGluIEd0a0xhdW5jaGVyLgorCisgICAgICAgICogR3RrTGF1bmNoZXIv
bWFpbi5jOgorICAgICAgICAoYWN0aXZhdGVVcmlFbnRyeUNiKToKKyAgICAgICAgKGljb25Mb2Fk
ZWRDYik6CisgICAgICAgIChjcmVhdGVCcm93c2VyKToKKwogMjAxMi0wMy0wOCAgU2hlcmlmZiBC
b3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjExMDExNS4KZGlmZiAtLWdpdCBhL1Rvb2xzL0d0a0xhdW5jaGVyL21haW4u
YyBiL1Rvb2xzL0d0a0xhdW5jaGVyL21haW4uYwppbmRleCA1ODc0MDVmYzQyMzRmMWQ3YmU4YTcz
YzkxM2VkZTJiZGJjZTRiNzExLi4yYTE0OGIzOTRhODhhMzg2ZTE5OTcxN2FmYWMzNTgyYmZiYjg1
MDJkIDEwMDY0NAotLS0gYS9Ub29scy9HdGtMYXVuY2hlci9tYWluLmMKKysrIGIvVG9vbHMvR3Rr
TGF1bmNoZXIvbWFpbi5jCkBAIC00MCw2ICs0MCw3IEBAIHN0YXRpYyB2b2lkIGFjdGl2YXRlVXJp
RW50cnlDYihHdGtXaWRnZXQqIGVudHJ5LCBncG9pbnRlciBkYXRhKQogICAgIFdlYktpdFdlYlZp
ZXcgKndlYlZpZXcgPSBnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChlbnRyeSksICJ3ZWItdmll
dyIpOwogICAgIGNvbnN0IGdjaGFyKiB1cmkgPSBndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZ
KGVudHJ5KSk7CiAgICAgZ19hc3NlcnQodXJpKTsKKyAgICBndGtfZW50cnlfc2V0X2ljb25fZnJv
bV9waXhidWYoR1RLX0VOVFJZKGVudHJ5KSwgR1RLX0VOVFJZX0lDT05fUFJJTUFSWSwgMCk7CiAg
ICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHdlYlZpZXcsIHVyaSk7CiB9CiAKQEAgLTE5NSwx
NiArMTk2LDMyIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3TGVhdmluZ0Z1bGxTY3JlZW4oV2Vi
S2l0V2ViVmlldyAqd2ViVmlldywgR09iamVjdCAqZWxlbWVuCiAgICAgcmV0dXJuIEZBTFNFOwog
fQogCitzdGF0aWMgdm9pZCBpY29uTG9hZGVkQ2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29u
c3QgY2hhciogaWNvblVSSSwgR3RrV2lkZ2V0KiB1cmlFbnRyeSkKK3sKKyAgICBHZGtQaXhidWYg
Kmljb24gPSB3ZWJraXRfd2ViX3ZpZXdfdHJ5X2dldF9mYXZpY29uX3BpeGJ1Zih3ZWJWaWV3LCAx
NiwgMTYpOworICAgIGlmICghaWNvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgZ3RrX2VudHJ5
X3NldF9pY29uX2Zyb21fcGl4YnVmKEdUS19FTlRSWSh1cmlFbnRyeSksIEdUS19FTlRSWV9JQ09O
X1BSSU1BUlksIGljb24pOworICAgIGdfb2JqZWN0X3VucmVmKGljb24pOworfQorCiBzdGF0aWMg
R3RrV2lkZ2V0KiBjcmVhdGVCcm93c2VyKEd0a1dpZGdldCogd2luZG93LCBHdGtXaWRnZXQqIHVy
aUVudHJ5LCBHdGtXaWRnZXQqIHN0YXR1c2JhciwgV2ViS2l0V2ViVmlldyogd2ViVmlldywgR3Rr
V2lkZ2V0KiB2Ym94KQogeworICAgIGNoYXIgKmljb25EYXRhYmFzZVBhdGg7CiAgICAgR3RrV2lk
Z2V0ICpzY3JvbGxlZFdpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwp
OwogICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9X
KHNjcm9sbGVkV2luZG93KSwgR1RLX1BPTElDWV9BVVRPTUFUSUMsIEdUS19QT0xJQ1lfQVVUT01B
VElDKTsKIAogICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoc2Nyb2xsZWRXaW5k
b3cpLCBHVEtfV0lER0VUKHdlYlZpZXcpKTsKIAorICAgIGljb25EYXRhYmFzZVBhdGggPSBnX2J1
aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSwgIndlYmtpdCIsICJpY29uZGF0YWJh
c2UiLCBOVUxMKTsKKyAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9zZXRfcGF0aCh3ZWJraXRf
Z2V0X2Zhdmljb25fZGF0YWJhc2UoKSwgaWNvbkRhdGFiYXNlUGF0aCk7CisgICAgZ19mcmVlKGlj
b25EYXRhYmFzZVBhdGgpOworCiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5
Ojp0aXRsZSIsIEdfQ0FMTEJBQ0sobm90aWZ5VGl0bGVDYiksIHdpbmRvdyk7CiAgICAgZ19zaWdu
YWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobm90
aWZ5TG9hZFN0YXR1c0NiKSwgdXJpRW50cnkpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmll
dywgIm5vdGlmeTo6cHJvZ3Jlc3MiLCBHX0NBTExCQUNLKG5vdGlmeVByb2dyZXNzQ2IpLCB3aW5k
b3cpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgImljb24tbG9hZGVkIiwgR19DQUxM
QkFDSyhpY29uTG9hZGVkQ2IpLCB1cmlFbnRyeSk7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJW
aWV3LCAiaG92ZXJpbmctb3Zlci1saW5rIiwgR19DQUxMQkFDSyhsaW5rSG92ZXJDYiksIHN0YXR1
c2Jhcik7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiY3JlYXRlLXdlYi12aWV3Iiwg
R19DQUxMQkFDSyhjcmVhdGVXZWJWaWV3Q2IpLCB3aW5kb3cpOwogICAgIGdfc2lnbmFsX2Nvbm5l
Y3Qod2ViVmlldywgIndlYi12aWV3LXJlYWR5IiwgR19DQUxMQkFDSyh3ZWJWaWV3UmVhZHlDYiks
IHdpbmRvdyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131879</attachid>
            <date>2012-03-14 10:34:29 -0700</date>
            <delta_ts>2012-03-16 02:42:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56200-20120314183427.patch</filename>
            <type>text/plain</type>
            <size>69303</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNjcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggYjkxMTgzNzQ3
ZTQ2NTFiYjc0ODA0ZmVmNTYxMTAzMmU4MDBmYmJhZi4uNjQ3MjQwZjVlMjZlYTg1ZjM0YjA2YThl
ZTYzZDhiYjY1NzllMTcyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNiBAQAorMjAx
Mi0wMy0wNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+IGFuZCBT
ZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtd
IFdlYktpdEljb25EYXRhYmFzZSBkb2Vzbid0IGtlZXAgaWNvbnMgY2FjaGVkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjIwMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFk
ZGVkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xp
ZW50OjpyZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24pOiBpbnN0cnVjdAorICAgICAgICB0aGUg
V2ViVmlldyB0byBsaXN0ZW4gdG8gSWNvbkRhdGFiYXNlJ3Mgbm90aWZpY2F0aW9ucy4KKyAgICAg
ICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24pOiBh
c2sgYm90aAorICAgICAgICBXZWJWaWV3IGFuZCBJY29uRGF0YWJhc2UgdG8gaXNzdWUgbm90aWZp
Y2F0aW9ucyBmb3IgYSBuZXcgaWNvbi4KKyAgICAgICAgKiBkb2NzL3dlYmtpdGd0ay1zZWN0aW9u
cy50eHQ6IHVwZGF0ZWQgZG9jcy4KKyAgICAgICAgKiB0ZXN0cy90ZXN0aWNvbmRhdGFiYXNlLmM6
IEFkZGVkLgorICAgICAgICAoc2VydmVyX2NhbGxiYWNrKToKKyAgICAgICAgKGRlbGV0ZURhdGFi
YXNlRmlsZUlmRXhpc3RzKToKKyAgICAgICAgKHRlc3RXZWJraXRJY29uRGF0YWJhc2VTZXRQYXRo
KToKKyAgICAgICAgKGljb25EYXRhYmFzZUdldEljb25WYWxpZENhbGxiYWNrKToKKyAgICAgICAg
KGljb25EYXRhYmFzZUdldEljb25JbnZhbGlkQ2FsbGJhY2spOgorICAgICAgICAoaWNvbkRhdGFi
YXNlR2V0SWNvbkNhbmNlbGxlZENhbGxiYWNrKToKKyAgICAgICAgKG1haW5Mb29wUXVpdElmTG9h
ZENvbXBsZXRlZCk6CisgICAgICAgIChpZGxlUXVpdExvb3BDYWxsYmFjayk6CisgICAgICAgICh3
ZWJraXRXZWJWaWV3SWNvbkxvYWRlZCk6CisgICAgICAgIChsb2FkVVJJKToKKyAgICAgICAgKGZh
dmljb25EYXRhYmFzZUdldEZhdmljb25WYWxpZElkbGUpOgorICAgICAgICAoZmF2aWNvbkRhdGFi
YXNlR2V0RmF2aWNvbkludmFsaWRJZGxlKToKKyAgICAgICAgKGZhdmljb25EYXRhYmFzZUdldEZh
dmljb25DYW5jZWxsZWRJZGxlKToKKyAgICAgICAgKHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VH
ZXRGYXZpY29uKToKKyAgICAgICAgKHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VHZXRGYXZpY29u
VVJJKToKKyAgICAgICAgKHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VSZW1vdmVBbGwpOgorICAg
ICAgICAodGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUNsb3NlRGF0YWJhc2UpOgorICAgICAgICAo
bWFpbik6CisgICAgICAgICogd2Via2l0L3dlYmtpdC5oOiBhZGRlZCBuZXcgQVBJLgorICAgICAg
ICAqIHdlYmtpdC93ZWJraXRkZWZpbmVzLmg6IGFkZGVkIFdlYktpdEZhdmljb25EYXRhYmFzZS4K
KyAgICAgICAgKiB3ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcDoKKyAgICAgICAgKElj
b25EYXRhYmFzZUNsaWVudEd0ayk6IEljb25EYXRhYmFzZUNsaWVudCBpbXBsZW1lbnRhdGlvbi4K
KyAgICAgICAgKEljb25EYXRhYmFzZUNsaWVudEd0azo6cGVyZm9ybUltcG9ydCk6CisgICAgICAg
IChJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpZFJlbW92ZUFsbEljb25zKToKKyAgICAgICAgKElj
b25EYXRhYmFzZUNsaWVudEd0azo6ZGlkSW1wb3J0SWNvblVSTEZvclBhZ2VVUkwpOgorICAgICAg
ICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpkaWRJbXBvcnRJY29uRGF0YUZvclBhZ2VVUkwpOgor
ICAgICAgICAoSWNvbkRhdGFiYXNlQ2xpZW50R3RrOjpkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTCk6
CisgICAgICAgIChJY29uRGF0YWJhc2VDbGllbnRHdGs6OmRpZEZpbmlzaFVSTEltcG9ydCk6Cisg
ICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3QpOiBtYWNoaW5lcnkgZm9yIGFzeW5jaHJvbm91cyBj
YWxscy4KKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6UGVuZGluZ0ljb25SZXF1ZXN0KToK
KyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6flBlbmRpbmdJY29uUmVxdWVzdCk6CisgICAg
ICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OnBhZ2VVUkkpOgorICAgICAgICAoUGVuZGluZ0ljb25S
ZXF1ZXN0Ojphc3luY1Jlc3VsdCk6CisgICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OmFzeW5j
UmVzdWx0Q2FuY2VsKToKKyAgICAgICAgKFBlbmRpbmdJY29uUmVxdWVzdDo6YXN5bmNSZXN1bHRD
b21wbGV0ZUluSWRsZSk6CisgICAgICAgIChQZW5kaW5nSWNvblJlcXVlc3Q6OmFzeW5jUmVzdWx0
Q29tcGxldGUpOgorICAgICAgICAoX1dlYktpdEljb25EYXRhYmFzZVByaXZhdGUpOgorICAgICAg
ICAod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZGlzcG9zZSk6IEdPYmplY3Qgc3R1ZmYuCisgICAg
ICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9zZXRfcHJvcGVydHkpOiBkaXR0by4KKyAgICAg
ICAgKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9wcm9wZXJ0eSk6IGRpdHRvLgorICAgICAg
ICAod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfY2xhc3NfaW5pdCk6IGRpdHRvLgorICAgICAgICAo
d2Via2l0X2Zhdmljb25fZGF0YWJhc2VfaW5pdCk6IGRpdHRvLgorICAgICAgICAod2Via2l0RmF2
aWNvbkRhdGFiYXNlTm90aWZ5QW5kVXBkYXRlRXhwaXJhdGlvbik6IG5vdGlmeSBhYm91dCBuZXcK
KyAgICAgICAgaWNvbnMgYW5kIHVwZGF0ZSBleHBpcmF0aW9uIHRpbWVzLgorICAgICAgICAod2Vi
a2l0RmF2aWNvbkRhdGFiYXNlRGlzcGF0Y2hEaWRSZWNlaXZlSWNvbik6ICJwcm90ZWN0ZWQiIG1l
dGhvZAorICAgICAgICBjYWxsZWQgYnkgdGhlIEZyYW1lTG9hZGVyQ2xpZW50IHRvIGluZm9ybSBh
Ym91dCBuZXcgaWNvbnMuCisgICAgICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfcGF0
aCk6IHJldHJpZXZlcyBkYXRhYmFzZSBwYXRoLgorICAgICAgICAoc2VsZWN0UXVlcnlDYWxsYmFj
ayk6IHJlbGVhc2VzIGV4cGlyZWQgaWNvbnMgdG8gbGV0IEljb25EYXRhYmFzZQorICAgICAgICBw
cnVuZSB0aGVtLgorICAgICAgICAod2Via2l0RmF2aWNvbkRhdGFiYXNlUHJ1bmVFeHBpcmVkSWNv
bnMpOiBzZWxlY3RzIHRoZSBpY29ucyB0byBiZQorICAgICAgICBwcnVuZWQgYnkgdGhlIEljb25E
YXRhYmFzZS4KKyAgICAgICAgKHdlYmtpdEZhdmljb25EYXRhYmFzZUNsb3NlKTogY2xvc2UgdGhl
IGRhdGFiYXNlLgorICAgICAgICAoY3JlYXRlRXhwaXJhdGlvblRpbWVzRGF0YWJhc2VUYWJsZUlm
Tm90RXhpc3RzKTogY3JlYXRlcyB0aGUKKyAgICAgICAgZGF0YWJhc2UgdXNlZCB0byBjb250cm9s
IGV4cGlyYXRpb24gdGltZXMuCisgICAgICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9zZXRf
cGF0aCk6IG9wZW5zIHRoZSBkYXRhYmFzZSBkZWxheWluZyB0aGUKKyAgICAgICAgY2xlYW51cCBv
ZiBpY29ucyB1bnRpbCB0aGUgaW1wb3J0IGlzIGNvbXBsZXRlLgorICAgICAgICAod2Via2l0X2Zh
dmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKTogcmV0dXJucyB0aGUgdXJpIG9mIHRoZQor
ICAgICAgICBmYXZpY29uLgorICAgICAgICAoZ2V0SWNvblBpeGJ1ZlN5bmNocm9ub3VzbHkpOiBo
ZWxwZXIgZnVuY3Rpb24gdG8gY2FsbAorICAgICAgICBJY29uRGF0YWJhc2U6OnN5bmNocm9ub3Vz
SWNvblVSTEZvclBhZ2VVUkwoKS4KKyAgICAgICAgKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3Ry
eV9nZXRfZmF2aWNvbl9waXhidWYpOiByZXR1cm5zIHRoZQorICAgICAgICBmYXZpY29uIGlmIGV4
aXN0cyBhbmQgaXMgbG9hZGVkIGZyb20gZGlzay4KKyAgICAgICAgKHdlYmtpdEZhdmljb25EYXRh
YmFzZUdldE9yQ3JlYXRlUmVxdWVzdHMpOiBoZWxwZXIgZnVuY3Rpb24gdG8gZ2V0CisgICAgICAg
IHRoZSB2ZWN0b3Igb2YgcGVuZGluZyByZXF1ZXN0cyBmb3IgdGhlIGdpdmVuIHVyaS4KKyAgICAg
ICAgKHdlYmtpdGZhdmljb25kYXRhYmFzZURlbGV0ZVJlcXVlc3RzKTogaGVscGVyIGZ1bmN0aW9u
IHRvIHJlbW92ZSB0aGUKKyAgICAgICAgdmVjdG9yIG9mIHBlbmRpbmcgcmVxdWVzdHMgZm9yIHRo
ZSBnaXZlbiB1cmkuCisgICAgICAgIChnZXRJY29uUGl4YnVmQ2FuY2VsbGVkKToKKyAgICAgICAg
KHdlYmtpdEZhdmljb25EYXRhYmFzZUdldEljb25QaXhidWZDYW5jZWxsZWQpOgorICAgICAgICAo
d2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmKTogYXN5bmNocm9ub3Vz
bHkKKyAgICAgICAgcmV0cmlldmUgaWNvbnMgZnJvbSB0aGUgZGF0YWJhc2UuCisgICAgICAgICh3
ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWZfZmluaXNoKTogZmluaXNo
ZXMgYW4KKyAgICAgICAgb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9nZXRfaWNvbl9waXhidWYoKS4KKyAgICAgICAgKHdlYmtpdEZhdmljb25EYXRhYmFzZVByb2Nl
c3NQZW5kaW5nSWNvbnNGb3JVUkkpOiBwcm9jZXNzIHBlbmRpbmcKKyAgICAgICAgcmVxdWVzdHMg
b25jZSB0aGUgaW1wb3J0IGlzIGZpbmlzaGVkLgorICAgICAgICAod2Via2l0RmF2aWNvbkRhdGFi
YXNlSW1wb3J0RmluaXNoZWQpOiBjaGVjayBwZW5kaW5nIHJlcXVlc3RzIGFuZAorICAgICAgICBk
ZWxldGUgdGhvc2UgdGhhdCBhc2sgZm9yIGljb25zIHRoYXQgZG8gbm90IGV4aXN0IGluIHRoZSBk
YXRhYmFzZS4KKyAgICAgICAgKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsZWFyKTogY2xlYXJz
IHRoZSBkYXRhYmFzZS4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmg6
IGFkZGVkLgorICAgICAgICAoX1dlYktpdEZhdmljb25EYXRhYmFzZSk6CisgICAgICAgIChfV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlQ2xhc3MpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRmYXZpY29u
ZGF0YWJhc2Vwcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIHdlYmtpdC93ZWJraXRnbG9iYWxz
LmNwcDoKKyAgICAgICAgKHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSk6IHJldHJpZXZlcyB0
aGUgbmV3CisgICAgICAgIFdlYktpdEZhdmljb25EYXRhYmFzZS4KKyAgICAgICAgKHdlYmtpdEV4
aXQpOiB1bnJlZiBpY29uIGRhdGFiYXNlIG9uIGV4aXQuCisgICAgICAgICogd2Via2l0L3dlYmtp
dGdsb2JhbHMuaDogYWRkZWQgbmV3IEFQSS4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0aWNvbmRh
dGFiYXNlLmNwcDogYWRkZWQgZGVwcmVjYXRpb24gZG9jdW1lbnRhdGlvbi4KKyAgICAgICAgKHdl
YmtpdF9pY29uX2RhdGFiYXNlX2NsYXNzX2luaXQpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld190cnlfZ2V0X2ljb25fcGl4YnVm
KTogbmV3IEFQSSB0aGF0IHVzZXMgdGhlIG5ldworICAgICAgICBXZWJLaXRGYXZpY29uRGF0YWJh
c2UgQVBJLgorICAgICAgICAod2Via2l0V2ViVmlld0ljb25Mb2FkZWQpOiBkaXNwYXRjaCB0aGUg
aWNvbi1sb2FkZWQgc2lnbmFsIHdoZW4KKyAgICAgICAgcmVxdWVzdGVkIGJ5IHRoZSBGcmFtZUxv
YWRlckNsaWVudC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdSZWdpc3RlckZvckljb25Ob3RpZmlj
YXRpb24pOiBzdGFydHMvc3RvcHMgbGlzdGVuaW5nCisgICAgICAgIHRvIGljb24gZGF0YWJhc2Ug
bm90aWZpY2F0aW9ucy4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5oOiBhZGRlZCBu
ZXcgQVBJLgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3cHJpdmF0ZS5oOiBhZGRlZCBz
b21lIHByb3RlY3RlZCBtZXRob2RzLgorCiAyMDEyLTAzLTEzICBBZGFtIEJhcnRoICA8YWJhcnRo
QHdlYmtpdC5vcmc+ICYmIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWx3YXlzIGVuYWJsZSBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2Vi
S2l0L2d0ay9HTlVtYWtlZmlsZS5hbQppbmRleCAwNjliNWIwYTVhOTgzMGM1NjUyZmE0MjYyNDgw
M2RmODA3ZjVjYWM1Li4wNGY5YTcwZmEyNzUxNTcxNjA1ZDVlN2ZlYjQ4ZWYwNjc0ZjI4NmM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQpAQCAtMTIxLDYgKzEyMSw3IEBAIHdlYmtpdGd0a19z
dGF0aWNfaF9hcGkgKz0gXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0ZGVmaW5lcy5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dGRvd25sb2FkLmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
ZXJyb3IuaCBcCisJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZp
Y29uZGF0YWJhc2UuaCBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uLmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuaCBcCkBAIC0yMTksNiArMjIwLDggQEAgd2Vi
a2l0Z3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3du
bG9hZC5jcHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZHByaXZh
dGUuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGVycm9yLmNwcCBcCisJU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5jcHAgXAorCVNvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2Vwcml2YXRlLmggXAogCVNv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uLmNw
cCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVj
aXNpb25wcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxz
LmNwcCBcCkBAIC00NDAsNiArNDQzLDcgQEAgVEVTVF9QUk9HUyArPSBcCiAJUHJvZ3JhbXMvdW5p
dHRlc3RzL3Rlc3Rkb21kb213aW5kb3cgXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0ZG9tbm9k
ZSBcCiAJUHJvZ3JhbXMvdW5pdHRlc3RzL3Rlc3RodHRwYmFja2VuZCBcCisJUHJvZ3JhbXMvdW5p
dHRlc3RzL3Rlc3RmYXZpY29uZGF0YWJhc2UgXAogCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0bG9h
ZGluZyBcCiAJUHJvZ3JhbXMvdW5pdHRlc3RzL3Rlc3RnbG9iYWxzIFwKIAlQcm9ncmFtcy91bml0
dGVzdHMvdGVzdG1pbWVoYW5kbGluZyBcCkBAIC00ODgsNiArNDkyLDExIEBAIFByb2dyYW1zX3Vu
aXR0ZXN0c190ZXN0aHR0cGJhY2tlbmRfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQog
UHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RodHRwYmFja2VuZF9MREFERCA9ICQod2Via2l0X3Rlc3Rz
X2xkYWRkKQogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RodHRwYmFja2VuZF9MREZMQUdTID0gJCh3
ZWJraXRfdGVzdHNfbGRmbGFncykKIAorUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RmYXZpY29uZGF0
YWJhc2VfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RmYXZpY29uZGF0YWJh
c2UuYyBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMKK1Byb2dyYW1zX3VuaXR0
ZXN0c190ZXN0ZmF2aWNvbmRhdGFiYXNlX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykK
K1Byb2dyYW1zX3VuaXR0ZXN0c190ZXN0ZmF2aWNvbmRhdGFiYXNlX0xEQUREID0gJCh3ZWJraXRf
dGVzdHNfbGRhZGQpCitQcm9ncmFtc191bml0dGVzdHNfdGVzdGZhdmljb25kYXRhYmFzZV9MREZM
QUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKKwogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Rn
bG9iYWxzX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Z2xvYmFscy5jCiBQ
cm9ncmFtc191bml0dGVzdHNfdGVzdGdsb2JhbHNfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2Zs
YWdzKQogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RnbG9iYWxzX0xEQUREID0gJCh3ZWJraXRfdGVz
dHNfbGRhZGQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKaW5kZXggNDJhNDk0NTgzOTZjZmNlM2Q3MDdlMDY5
ODE3MDBmNmI5ODEyYWRiZC4uMWY5N2Q4MDk5M2M1YTFkYjcxMDdhOGVlMjRmM2Y5M2JjMWUyYjhi
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50R3RrLmNwcApAQCAtNjUsOSArNjUsMTAgQEAKICNpbmNsdWRlICJTY3Jp
cHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJ3ZWJraXRl
cnJvci5oIgorI2luY2x1ZGUgIndlYmtpdGZhdmljb25kYXRhYmFzZS5oIgorI2luY2x1ZGUgIndl
YmtpdGZhdmljb25kYXRhYmFzZXByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzLmgi
CiAjaW5jbHVkZSAid2Via2l0Z2xvYmFsc3ByaXZhdGUuaCIKLSNpbmNsdWRlICJ3ZWJraXRpY29u
ZGF0YWJhc2UuaCIKICNpbmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVxdWVzdC5oIgogI2luY2x1ZGUg
IndlYmtpdG5ldHdvcmtyZXF1ZXN0cHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmty
ZXNwb25zZS5oIgpAQCAtNjI1LDcgKzYyNiw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRp
ZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24oKSBjb25zdAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
OjpyZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oYm9vbCBzaG91bGRSZWdpc3RlcikKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHdlYmtpdFdlYlZpZXdSZWdpc3RlckZvckljb25Ob3Rp
ZmljYXRpb24oZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKSwgc2hvdWxkUmVnaXN0ZXIpOwogfQog
CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5KGJvb2wg
cmVhZHkpCkBAIC04MDIsMTggKzgwMywxNCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNw
YXRjaERpZFJlY2VpdmVJY29uKCkKICAgICBpZiAobV9sb2FkaW5nRXJyb3JQYWdlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBjb25zdCBnY2hhciogZnJhbWVVUkkgPSB3ZWJraXRfd2ViX2ZyYW1l
X2dldF91cmkobV9mcmFtZSk7Ci0gICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdl
YmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOwotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShkYXRh
YmFzZSwgImljb24tbG9hZGVkIiwgbV9mcmFtZSwgZnJhbWVVUkkpOwotCisgICAgLy8gSWNvbkNv
bnRyb2xsZXIgbG9hZCBpY29ucyBvbmx5IGZvciB0aGUgbWFpbiBmcmFtZS4KICAgICBXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3ID0gZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKTsKKyAgICBBU1NFUlQo
bV9mcmFtZSA9PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldykpOwogCi0g
ICAgLy8gQXZvaWQgcmVwb3J0aW5nIGZhdmljb25zIGZvciBub24tbWFpbiBmcmFtZXMuCi0gICAg
aWYgKG1fZnJhbWUgIT0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1Qod2ViVmlldyks
ICJpY29uLXVyaSIpOwotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAiaWNvbi1s
b2FkZWQiLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKHdlYlZpZXcpKTsKKyAgICBjb25z
dCBjaGFyKiBmcmFtZVVSSSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3VyaShtX2ZyYW1lKTsKKyAg
ICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X2dldF9mYXZpY29uX2Rh
dGFiYXNlKCk7CisgICAgd2Via2l0RmF2aWNvbkRhdGFiYXNlRGlzcGF0Y2hEaWRSZWNlaXZlSWNv
bihkYXRhYmFzZSwgZnJhbWVVUkkpOworICAgIHdlYmtpdFdlYlZpZXdJY29uTG9hZGVkKGRhdGFi
YXNlLCBmcmFtZVVSSSwgd2ViVmlldyk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ndGsvZG9jcy93ZWJraXRndGstc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdC9ndGsvZG9j
cy93ZWJraXRndGstc2VjdGlvbnMudHh0CmluZGV4IDRhMzU4ZTgzZGJmOTFjMzBiOGRkMjVmZmE1
YzJhYjlhOTgzNTZiMGIuLjVkNzI2N2QxNzk1ZTM1ZmRhNjRmMzExNGI1MTg3NzJlOWMxYzRhNWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLXNlY3Rpb25zLnR4
dAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9kb2NzL3dlYmtpdGd0ay1zZWN0aW9ucy50eHQKQEAg
LTQ2OCw2ICs0NjgsNyBAQCB3ZWJraXRfd2ViX3ZpZXdfc2V0X3ZpZXdfbW9kZQogd2Via2l0X3dl
Yl92aWV3X3NldF92aWV3X3NvdXJjZV9tb2RlCiB3ZWJraXRfd2ViX3ZpZXdfc2V0X3pvb21fbGV2
ZWwKIHdlYmtpdF93ZWJfdmlld19zdG9wX2xvYWRpbmcKK3dlYmtpdF93ZWJfdmlld190cnlfZ2V0
X2Zhdmljb25fcGl4YnVmCiB3ZWJraXRfd2ViX3ZpZXdfdW5kbwogd2Via2l0X3dlYl92aWV3X3Vu
bWFya190ZXh0X21hdGNoZXMKIHdlYmtpdF93ZWJfdmlld196b29tX2luCkBAIC01MTcsNiArNTE4
LDcgQEAgd2Via2l0X2dldF93ZWJfcGx1Z2luX2RhdGFiYXNlCiB3ZWJraXRfcmVtb3ZlX2FsbF93
ZWJfZGF0YWJhc2VzCiB3ZWJraXRfc2V0X2RlZmF1bHRfd2ViX2RhdGFiYXNlX3F1b3RhCiB3ZWJr
aXRfc2V0X3dlYl9kYXRhYmFzZV9kaXJlY3RvcnlfcGF0aAord2Via2l0X2dldF9mYXZpY29uX2Rh
dGFiYXNlCiB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UKIHdlYmtpdF9nZXRfdGV4dF9jaGVja2Vy
CiB3ZWJraXRfc2V0X3RleHRfY2hlY2tlcgpAQCAtNjc0LDYgKzY3NiwzMCBAQCBXZWJLaXRJY29u
RGF0YWJhc2VQcml2YXRlCiA8L1NFQ1RJT04+CiAKIDxTRUNUSU9OPgorPEZJTEU+d2Via2l0ZmF2
aWNvbmRhdGFiYXNlPC9GSUxFPgorPFRJVExFPldlYktpdEZhdmljb25EYXRhYmFzZTwvVElUTEU+
CitXZWJLaXRGYXZpY29uRGF0YWJhc2UKK3dlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsZWFyCit3
ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYKK3dlYmtpdF9mYXZpY29uX2Rh
dGFiYXNlX2dldF9pY29uX3BpeGJ1Zl9maW5pc2gKK3dlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dl
dF9pY29uX3VyaQord2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X3BhdGgKK3dlYmtpdF9mYXZp
Y29uX2RhdGFiYXNlX2dldF90eXBlCit3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9zZXRfcGF0aAor
d2Via2l0X2Zhdmljb25fZGF0YWJhc2VfdHJ5X2dldF9pY29uX3BpeGJ1ZgorPFNVQlNFQ1RJT04g
U3RhbmRhcmQ+CitXRUJLSVRfVFlQRV9GQVZJQ09OX0RBVEFCQVNFCitXRUJLSVRfRkFWSUNPTl9E
QVRBQkFTRQorV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfQ0xBU1MKK1dFQktJVF9GQVZJQ09OX0RB
VEFCQVNFX0dFVF9DTEFTUworV0VCS0lUX0lTX0ZBVklDT05fREFUQUJBU0UKK1dFQktJVF9JU19G
QVZJQ09OX0RBVEFCQVNFX0NMQVNTCis8U1VCU0VDVElPTiBQcml2YXRlPgorV2ViS2l0RmF2aWNv
bkRhdGFiYXNlQ2xhc3MKK1dlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUKKzwvU0VDVElPTj4K
KworPFNFQ1RJT04+CiA8RklMRT53ZWJraXRkZWZpbmVzPC9GSUxFPgogV0VCS0lUX0FQSQogV0VC
S0lUR1RLX0FQSV9WRVJTSU9OCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90
ZXN0ZmF2aWNvbmRhdGFiYXNlLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZmF2aWNv
bmRhdGFiYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODMwYWI5NDcyYWM0NGNiNjY0OGYxZjU2YTUyZDY1N2Nl
NmNlNjc0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rm
YXZpY29uZGF0YWJhc2UuYwpAQCAtMCwwICsxLDI4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAidGVzdF91dGlscy5oIgorI2luY2x1ZGUgPGdsaWIv
Z3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworI2RlZmluZSBJQ09OX1NJWkUgMTYKKworI2lmIEdU
S19DSEVDS19WRVJTSU9OKDIsIDE0LCAwKQorR01haW5Mb29wICpsb29wOworY2hhciogYmFzZV91
cmk7CisKK3N0YXRpYyB2b2lkCitzZXJ2ZXJfY2FsbGJhY2soU291cFNlcnZlciAqc2VydmVyLCBT
b3VwTWVzc2FnZSAqbXNnLCBjb25zdCBjaGFyICpwYXRoLCBHSGFzaFRhYmxlICpxdWVyeSwgU291
cENsaWVudENvbnRleHQgKmNvbnRleHQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgY2hhciogY29u
dGVudHM7CisgICAgZ3NpemUgbGVuZ3RoOworCisgICAgaWYgKG1zZy0+bWV0aG9kICE9IFNPVVBf
TUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBf
U1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX09LKTsKKworICAgIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiL2Zhdmljb24uaWNvIikpIHsKKyAgICAgICAgR0Vycm9yKiBlcnJv
ciA9IE5VTEw7CisKKyAgICAgICAgZ19maWxlX2dldF9jb250ZW50cygiYmxhbmsuaWNvIiwgJmNv
bnRlbnRzLCAmbGVuZ3RoLCAmZXJyb3IpOworICAgICAgICBnX2Fzc2VydCghZXJyb3IpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGNvbnRlbnRzID0gZ19zdHJkdXAoIjxodG1sPjxib2R5PnRlc3Q8
L2JvZHk+PC9odG1sPiIpOworICAgICAgICBsZW5ndGggPSBzdHJsZW4oY29udGVudHMpOworICAg
IH0KKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNP
VVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBsZW5ndGgpOworICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2NvbXBsZXRlKG1zZy0+cmVzcG9uc2VfYm9keSk7Cit9CisKK3N0YXRpYyB2b2lkIGRlbGV0ZURh
dGFiYXNlRmlsZUlmRXhpc3RzKGNvbnN0IGNoYXIgKmRhdGFiYXNlUGF0aCkKK3sKKyAgICBpZiAo
IWdfZmlsZV90ZXN0KGRhdGFiYXNlUGF0aCwgR19GSUxFX1RFU1RfSVNfRElSKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgY2hhciAqZGF0YWJhc2VGaWxlbmFtZSA9IGdfYnVpbGRfZmlsZW5hbWUo
ZGF0YWJhc2VQYXRoLCAiV2VicGFnZUljb25zLmRiIiwgTlVMTCk7CisgICAgaWYgKGdfdW5saW5r
KGRhdGFiYXNlRmlsZW5hbWUpID09IC0xKSB7CisgICAgICAgIGdfZnJlZShkYXRhYmFzZUZpbGVu
YW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGdfcm1kaXIoZGF0YWJhc2VQYXRo
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZVNldFBhdGgodm9p
ZCkKK3sKKyAgICBjaGFyICpkYXRhYmFzZVBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3Rt
cF9kaXIoKSwgIndlYmtpdC10ZXN0ZmF2aWNvbmRhdGFiYXNlIiwgTlVMTCk7CisgICAgZGVsZXRl
RGF0YWJhc2VGaWxlSWZFeGlzdHMoZGF0YWJhc2VQYXRoKTsKKworICAgIFdlYktpdEZhdmljb25E
YXRhYmFzZSAqZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKTsKKyAgICB3
ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9zZXRfcGF0aChkYXRhYmFzZSwgZGF0YWJhc2VQYXRoKTsK
KworICAgIGdfYXNzZXJ0X2NtcHN0cihkYXRhYmFzZVBhdGgsID09LCB3ZWJraXRfZmF2aWNvbl9k
YXRhYmFzZV9nZXRfcGF0aChkYXRhYmFzZSkpOworCisgICAgZ19mcmVlKGRhdGFiYXNlUGF0aCk7
Cit9CisKKy8vIFNlZSB0aGUgY29tbWVudCBpbiBtYWluKCkgZnVuY3Rpb24gdGhhdCBnb2VzIHdp
dGggdGhpcyBzYW1lIGd1YXJkLgorI2lmZGVmIE5ERUJVRworCitzdGF0aWMgdm9pZCBmYXZpY29u
RGF0YWJhc2VHZXRGYXZpY29uVmFsaWRDYWxsYmFjayhHT2JqZWN0ICpzb3VyY2VPYmplY3QsIEdB
c3luY1Jlc3VsdCAqcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnYm9vbGVhbiAq
YmVlbkhlcmUgPSAoZ2Jvb2xlYW4qKXVzZXJEYXRhOworICAgIEdFcnJvciAqZXJyb3IgPSBOVUxM
OworICAgIEdka1BpeGJ1ZiAqaWNvbiA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZp
Y29uX3BpeGJ1Zl9maW5pc2goV0VCS0lUX0ZBVklDT05fREFUQUJBU0Uoc291cmNlT2JqZWN0KSwg
cmVzdWx0LCAmZXJyb3IpOworICAgIGdfYXNzZXJ0KGljb24pOworICAgIGdfb2JqZWN0X3VucmVm
KGljb24pOworCisgICAgKmJlZW5IZXJlID0gVFJVRTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQo
bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGZhdmljb25EYXRhYmFzZUdldEZhdmljb25JbnZhbGlk
Q2FsbGJhY2soR09iamVjdCAqc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgZ3Bv
aW50ZXIgdXNlckRhdGEpCit7CisgICAgZ2Jvb2xlYW4gKmJlZW5IZXJlID0gKGdib29sZWFuKil1
c2VyRGF0YTsKKyAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKyAgICBHZGtQaXhidWYgKmljb24g
PSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWZfZmluaXNoKFdFQktJ
VF9GQVZJQ09OX0RBVEFCQVNFKHNvdXJjZU9iamVjdCksIHJlc3VsdCwgJmVycm9yKTsKKyAgICBn
X2Fzc2VydCghaWNvbik7CisKKyAgICAqYmVlbkhlcmUgPSBUUlVFOworCisgICAgZ19tYWluX2xv
b3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIHZvaWQgZmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNv
bkNhbmNlbGxlZENhbGxiYWNrKEdPYmplY3QgKnNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0ICpy
ZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdib29sZWFuICpiZWVuSGVyZSA9IChn
Ym9vbGVhbiopdXNlckRhdGE7CisgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisgICAgR2RrUGl4
YnVmICppY29uID0gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmX2Zp
bmlzaChXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRShzb3VyY2VPYmplY3QpLCByZXN1bHQsICZlcnJv
cik7CisgICAgZ19hc3NlcnQoIWljb24pOworICAgIGdfYXNzZXJ0KGVycm9yICYmIGdfZXJyb3Jf
bWF0Y2hlcyhlcnJvciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKTsKKworICAg
ICpiZWVuSGVyZSA9IFRSVUU7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitz
dGF0aWMgaW5saW5lIHZvaWQgbWFpbkxvb3BRdWl0SWZMb2FkQ29tcGxldGVkKGdib29sZWFuKiBp
Y29uT3JQYWdlTG9hZGVkKQoreworICAgIGlmICgqaWNvbk9yUGFnZUxvYWRlZCkKKyAgICAgICAg
Z19tYWluX2xvb3BfcXVpdChsb29wKTsKKyAgICBlbHNlCisgICAgICAgICppY29uT3JQYWdlTG9h
ZGVkID0gVFJVRTsKK30KKworc3RhdGljIHZvaWQgaWRsZVF1aXRMb29wQ2FsbGJhY2soV2ViS2l0
V2ViVmlldyAqd2ViVmlldywgR1BhcmFtU3BlYyAqcHNwZWMsIGdib29sZWFuKiBpY29uT3JQYWdl
TG9hZGVkKQoreworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3
X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKKworICAgIGlmIChzdGF0dXMgPT0gV0VCS0lUX0xP
QURfRklOSVNIRUQgfHwgc3RhdHVzID09IFdFQktJVF9MT0FEX0ZBSUxFRCkKKyAgICAgICAgbWFp
bkxvb3BRdWl0SWZMb2FkQ29tcGxldGVkKGljb25PclBhZ2VMb2FkZWQpOworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRXZWJWaWV3SWNvbkxvYWRlZChXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFi
YXNlLCBjb25zdCBjaGFyKiBmcmFtZVVSSSwgZ2Jvb2xlYW4qIGljb25PclBhZ2VMb2FkZWQpCit7
CisgICAgbWFpbkxvb3BRdWl0SWZMb2FkQ29tcGxldGVkKGljb25PclBhZ2VMb2FkZWQpOworfQor
CitzdGF0aWMgdm9pZCBsb2FkVVJJKGNvbnN0IGNoYXIgKnVyaSkKK3sKKyAgICBXZWJLaXRXZWJW
aWV3ICp2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAg
Z2Jvb2xlYW4gaWNvbk9yUGFnZUxvYWRlZCA9IEZBTFNFOworCisgICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfdXJpKHZpZXcsIHVyaSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcsICJub3Rp
Znk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhpZGxlUXVpdExvb3BDYWxsYmFjayksICZpY29u
T3JQYWdlTG9hZGVkKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcsICJpY29uLWxvYWRlZCIs
IEdfQ0FMTEJBQ0sod2Via2l0V2ViVmlld0ljb25Mb2FkZWQpLCAmaWNvbk9yUGFnZUxvYWRlZCk7
CisKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X21hdGNoZWQodmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwg
Jmljb25PclBhZ2VMb2FkZWQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gZmF2aWNvbkRhdGFiYXNl
R2V0RmF2aWNvblZhbGlkSWRsZShncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICB3ZWJraXRfZmF2
aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWYod2Via2l0X2dldF9mYXZpY29uX2RhdGFi
YXNlKCksIGJhc2VfdXJpLAorCQkJCQkgICAgICAgSUNPTl9TSVpFLCBJQ09OX1NJWkUsIE5VTEws
CisJCQkJCSAgICAgICBmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uVmFsaWRDYWxsYmFjaywgdXNl
ckRhdGEpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuIGZhdmljb25E
YXRhYmFzZUdldEZhdmljb25JbnZhbGlkSWRsZShncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICB3
ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWYod2Via2l0X2dldF9mYXZp
Y29uX2RhdGFiYXNlKCksICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvIiwKKwkJCQkJICAgICAg
IElDT05fU0laRSwgSUNPTl9TSVpFLCBOVUxMLAorCQkJCQkgICAgICAgZmF2aWNvbkRhdGFiYXNl
R2V0RmF2aWNvbkludmFsaWRDYWxsYmFjaywgdXNlckRhdGEpOworICAgIHJldHVybiBGQUxTRTsK
K30KKworc3RhdGljIGdib29sZWFuIGZhdmljb25EYXRhYmFzZUdldEZhdmljb25DYW5jZWxsZWRJ
ZGxlKGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGUg
PSBnX2NhbmNlbGxhYmxlX25ldygpOworICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9m
YXZpY29uX3BpeGJ1Zih3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKSwgYmFzZV91cmksCisJ
CQkJCSAgICAgICBJQ09OX1NJWkUsIElDT05fU0laRSwgY2FuY2VsbGFibGUsCisJCQkJCSAgICAg
ICBmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uQ2FuY2VsbGVkQ2FsbGJhY2ssIHVzZXJEYXRhKTsK
KyAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChjYW5jZWxsYWJsZSk7CisgICAgZ19vYmplY3RfdW5y
ZWYoY2FuY2VsbGFibGUpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVz
dFdlYktpdEZhdmljb25EYXRhYmFzZUdldEZhdmljb24odm9pZCkKK3sKKyAgICBnYm9vbGVhbiBi
ZWVuVG9JY29uQ2FsbGJhY2s7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRS
VUUpOworCisgICAgLyogTG9hZCB1cmkgdG8gbWFrZSBzdXJlIGZhdmljb24gaXMgYWRkZWQgdG8g
ZGF0YWJhc2UgKi8KKyAgICBsb2FkVVJJKGJhc2VfdXJpKTsKKworICAgIGJlZW5Ub0ljb25DYWxs
YmFjayA9IEZBTFNFOworICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZhdmljb25EYXRhYmFz
ZUdldEZhdmljb25WYWxpZElkbGUsICZiZWVuVG9JY29uQ2FsbGJhY2spOworICAgIGdfbWFpbl9s
b29wX3J1bihsb29wKTsKKyAgICBnX2Fzc2VydChiZWVuVG9JY29uQ2FsbGJhY2spOworCisgICAg
YmVlblRvSWNvbkNhbGxiYWNrID0gRkFMU0U7CisgICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMp
ZmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbkludmFsaWRJZGxlLCAmYmVlblRvSWNvbkNhbGxiYWNr
KTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisgICAgZ19hc3NlcnQoYmVlblRvSWNvbkNh
bGxiYWNrKTsKKworICAgIGJlZW5Ub0ljb25DYWxsYmFjayA9IEZBTFNFOworICAgIGdfaWRsZV9h
ZGQoKEdTb3VyY2VGdW5jKWZhdmljb25EYXRhYmFzZUdldEZhdmljb25DYW5jZWxsZWRJZGxlLCAm
YmVlblRvSWNvbkNhbGxiYWNrKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisgICAgZ19h
c3NlcnQoYmVlblRvSWNvbkNhbGxiYWNrKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdEZh
dmljb25EYXRhYmFzZUdldEZhdmljb25VUkkodm9pZCkKK3sKKyAgICBjaGFyICppY29uVVJJID0g
d2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKHdlYmtpdF9nZXRfZmF2aWNv
bl9kYXRhYmFzZSgpLCBiYXNlX3VyaSk7CisgICAgY2hhciAqZXhwZWN0ZWRVUkkgPSBnX3N0cmR1
cF9wcmludGYoIiVzZmF2aWNvbi5pY28iLCBiYXNlX3VyaSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KGljb25VUkksID09LCBleHBlY3RlZFVSSSk7CisgICAgZ19mcmVlKGV4cGVjdGVkVVJJKTsKKyAg
ICBnX2ZyZWUoaWNvblVSSSk7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0
RmF2aWNvbkRhdGFiYXNlUmVtb3ZlQWxsKHZvaWQpCit7CisgICAgV2ViS2l0RmF2aWNvbkRhdGFi
YXNlICpkYXRhYmFzZSA9IHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpOworICAgIHdlYmtp
dF9mYXZpY29uX2RhdGFiYXNlX2NsZWFyKGRhdGFiYXNlKTsKKyAgICBjaGFyICppY29uVVJJID0g
d2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKGRhdGFiYXNlLCBiYXNlX3Vy
aSk7CisgICAgZ19hc3NlcnQoIWljb25VUkkpOworICAgIGdfZnJlZShpY29uVVJJKTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUNsb3NlRGF0YWJhc2Uodm9pZCkK
K3sKKyAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UgKmRhdGFiYXNlID0gd2Via2l0X2dldF9mYXZp
Y29uX2RhdGFiYXNlKCk7CisgICAgY2hhciAqZGF0YWJhc2VQYXRoID0gZ19zdHJkdXAod2Via2l0
X2Zhdmljb25fZGF0YWJhc2VfZ2V0X3BhdGgoZGF0YWJhc2UpKTsKKyAgICB3ZWJraXRfZmF2aWNv
bl9kYXRhYmFzZV9zZXRfcGF0aChkYXRhYmFzZSwgMCk7CisgICAgZGVsZXRlRGF0YWJhc2VGaWxl
SWZFeGlzdHMoZGF0YWJhc2VQYXRoKTsKKyAgICBnX2ZyZWUoZGF0YWJhc2VQYXRoKTsKK30KKwor
aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIFNvdXBTZXJ2ZXIqIHNlcnZl
cjsKKyAgICBTb3VwVVJJKiBzb3VwX3VyaTsKKworICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZh
cmd2LCAwKTsKKworICAgIC8qIEhvcGVmdWxseSBtYWtlIHRlc3QgaW5kZXBlbmRlbnQgb2YgdGhl
IHBhdGggaXQncyBjYWxsZWQgZnJvbS4gKi8KKyAgICB0ZXN0dXRpbHNfcmVsYXRpdmVfY2hkaXIo
IlNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0Lmh0bWwiLCBhcmd2WzBdKTsK
KworICAgIHNlcnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxM
KTsKKyAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKKworICAgIHNvdXBfc2VydmVy
X2FkZF9oYW5kbGVyKHNlcnZlciwgTlVMTCwgc2VydmVyX2NhbGxiYWNrLCBOVUxMLCBOVUxMKTsK
KworICAgIHNvdXBfdXJpID0gc291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4xLyIpOworICAg
IHNvdXBfdXJpX3NldF9wb3J0KHNvdXBfdXJpLCBzb3VwX3NlcnZlcl9nZXRfcG9ydChzZXJ2ZXIp
KTsKKworICAgIGJhc2VfdXJpID0gc291cF91cmlfdG9fc3RyaW5nKHNvdXBfdXJpLCBGQUxTRSk7
CisgICAgc291cF91cmlfZnJlZShzb3VwX3VyaSk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0
dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9m
YXZpY29uZGF0YWJhc2Uvc2V0LXBhdGgiLCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlU2V0UGF0
aCk7CisKKyAgICAvLyBUaGVzZSB0d28gdGVzdHMgd2lsbCB0cmlnZ2VyIGFuIEFTU0VSVElPTiBv
biBkZWJ1ZyBidWlsZHMgZHVlCisgICAgLy8gdG8gaHR0cDovL3dlYmtpdC5vcmcvYi82NzU4Mi4g
UmVtb3ZlIHRoZSBndWFyZHMgb25jZSB0aGUgYnVnIGlzIGZpeGVkLgorI2lmZGVmIE5ERUJVRwor
ICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0YWJhc2UvZ2V0LWZhdmljb24i
LCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbik7CisgICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L2Zhdmljb25kYXRhYmFzZS9nZXQtZmF2aWNvbi11cmkiLCB0ZXN0V2ViS2l0
RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvblVSSSk7CisjZW5kaWYKKworICAgIGdfdGVzdF9hZGRf
ZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0YWJhc2UvcmVtb3ZlLWFsbCIsIHRlc3RXZWJLaXRGYXZp
Y29uRGF0YWJhc2VSZW1vdmVBbGwpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZp
Y29uZGF0YWJhc2UvY2xvc2UtZGIiLCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlQ2xvc2VEYXRh
YmFzZSk7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQorI2Vsc2UKK2ludCBtYWluKGlu
dCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBnX2NyaXRpY2FsKCJZb3Ugd2lsbCBuZWVkIGd0
ay0yLjE0LjAgdG8gcnVuIHRoZSB1bml0IHRlc3RzLiBEb2luZyBub3RoaW5nIG5vdy4iKTsKKyAg
ICByZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0LmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgKaW5kZXgg
NzE0NTFiMTUzNzE0ZDY0NDAzZjY1MmYyYzlmOTFkN2QxNmY5MmJkYy4uYzdlOTVlOGVkNGYwODE2
ZGE2OWY2NjM4NTI4YjgxNDFhNDhiZjhjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaApA
QCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkb20uaD4KICNpbmNsdWRl
IDx3ZWJraXQvd2Via2l0ZG93bmxvYWQuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZW51bXR5
cGVzLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5oPgogI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uLmg+CiAjaW5jbHVkZSA8
d2Via2l0L3dlYmtpdGdsb2JhbHMuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0aGl0dGVzdHJl
c3VsdC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmlu
ZXMuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKaW5kZXggNjcz
YmJkZmU2MWQyNzYxNTdiNGRmNDlkYTdlYzcyOTJjZmRiMDFhOC4uODkwOTliOWI5OGNmZDA5NDY5
YTFiYzMxNjI1NDQ1OGZhNDBkNDgzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGRlZmluZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
ZGVmaW5lcy5oCkBAIC0xMDcsNiArMTA3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlBs
dWdpbkNsYXNzIFdlYktpdFdlYlBsdWdpbkNsYXNzOwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNw
ZWxsQ2hlY2tlciBXZWJLaXRTcGVsbENoZWNrZXI7IC8qIGR1bW15IHR5cGVkZWYgKi8KIHR5cGVk
ZWYgc3RydWN0IF9XZWJLaXRTcGVsbENoZWNrZXJJbnRlcmZhY2UgV2ViS2l0U3BlbGxDaGVja2Vy
SW50ZXJmYWNlOwogCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmF2aWNvbkRhdGFiYXNlIFdlYktp
dEZhdmljb25EYXRhYmFzZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGYXZpY29uRGF0YWJhc2VD
bGFzcyBXZWJLaXRGYXZpY29uRGF0YWJhc2VDbGFzczsKKwogR19FTkRfREVDTFMKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFi
YXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjEyZmM3ZWI4YTBiMWYzM2Y2NjU4MGM1YjExYjZkMTIxZmQ5MjcyNDAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNv
bmRhdGFiYXNlLmNwcApAQCAtMCwwICsxLDY0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBsYW5lZG8uY29tPgorICogQ29weXJpZ2h0IChD
KSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ3ZWJraXRm
YXZpY29uZGF0YWJhc2UuaCIKKworI2luY2x1ZGUgIkRhdGFiYXNlRGV0YWlscy5oIgorI2luY2x1
ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRl
ICJHUmVmUHRyLmgiCisjaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSWNvbkRh
dGFiYXNlQ2xpZW50LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgi
CisjaW5jbHVkZSAid2Via2l0ZmF2aWNvbmRhdGFiYXNlcHJpdmF0ZS5oIgorI2luY2x1ZGUgIndl
YmtpdGdsb2JhbHMuaCIKKyNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgorI2luY2x1
ZGUgIndlYmtpdG1hcnNoYWwuaCIKKyNpbmNsdWRlICJ3ZWJraXRzZWN1cml0eW9yaWdpbnByaXZh
dGUuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJmcmFtZS5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4t
bGliLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisvKioKKyAqIFNF
Q1RJT046d2Via2l0ZmF2aWNvbmRhdGFiYXNlCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEEgV2Vi
S2l0IGZhdmljb24gZGF0YWJhc2UKKyAqCisgKiAjV2ViS2l0RmF2aWNvbkRhdGFiYXNlIHByb3Zp
ZGVzIGFjY2VzcyB0byB0aGUgaWNvbnMgYXNzb2NpYXRlZCB3aXRoCisgKiBhIHBhcnRpY3VsYXIg
V2ViIHBhZ2Ugb3IgV2ViIHNpdGUuCisgKgorICogV2ViS2l0IHdpbGwgYXV0b21hdGljYWxseSBs
b29rIGZvciBhdmFpbGFibGUgaWNvbnMgaW4gbGluayBlbGVtZW50cworICogb24gb3BlbmVkIHBh
Z2VzIGFzIHdlbGwgYXMgYW4gZXhpc3RpbmcgZmF2aWNvbi5pY28gYW5kIGxvYWQgdGhlCisgKiBp
bWFnZXMgZm91bmQgaW50byB0aGUgbWVtb3J5IGNhY2hlIGlmIHBvc3NpYmxlLgorICoKKyAqIFRo
ZSBkYXRhYmFzZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LiBJbiBvcmRlciBmb3IgaWNvbnMgdG8g
YmUKKyAqIHN0b3JlZCBhbmQgYWNjZXNzZWQsIHlvdSB3aWxsIG5lZWQgdG8gc2V0IGFuIGljb24g
ZGF0YWJhc2UgcGF0aAorICogdXNpbmcgd2Via2l0X2Zhdmljb25fZGF0YWJhc2Vfc2V0X3BhdGgo
KS4gRGlzYWJsZSB0aGUgZGF0YWJhc2UKKyAqIGFnYWluIHBhc3NpbmcgJU5VTEwgdG8gdGhlIHBy
ZXZpb3VzIGNhbGwuCisgKgorICogSWYgV2ViS2l0V2ViU2V0dGluZ3M6OmVuYWJsZS1wcml2YXRl
LWJyb3dzaW5nIGlzICVUUlVFIG5ldyBpY29ucworICogd29uJ3QgYmUgYWRkZWQgdG8gdGhlIGRh
dGFiYXNlIG9uIGRpc2sgYW5kIG5vIGV4aXN0aW5nIGljb25zIHdpbGwKKyAqIGJlIGRlbGV0ZWQg
ZnJvbSBpdC4KKyAqCisgKiBJY29ucyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcHVyZ2VkIGFmdGVy
IDQgZGF5cyB3aXRob3V0IGJlaW5nCisgKiB1c2VkLgorICoKKyAqIFNpbmNlOiAxLjgKKyAqLwor
Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2Ns
YXNzIFBlbmRpbmdJY29uUmVxdWVzdDsKKworc3RhdGljIHZvaWQgd2Via2l0RmF2aWNvbkRhdGFi
YXNlUHJvY2Vzc1BlbmRpbmdJY29uc0ZvclVSSShXZWJLaXRGYXZpY29uRGF0YWJhc2UqLCBjb25z
dCBTdHJpbmcmIHBhZ2VVUkkpOworc3RhdGljIHZvaWQgd2Via2l0RmF2aWNvbkRhdGFiYXNlSW1w
b3J0RmluaXNoZWQoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKik7CitzdGF0aWMgdm9pZCB3ZWJraXRG
YXZpY29uRGF0YWJhc2VHZXRJY29uUGl4YnVmQ2FuY2VsbGVkKEdDYW5jZWxsYWJsZSosIFBlbmRp
bmdJY29uUmVxdWVzdCopOworc3RhdGljIHZvaWQgd2Via2l0RmF2aWNvbkRhdGFiYXNlQ2xvc2Uo
V2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSk7CisKK2NsYXNzIEljb25EYXRhYmFzZUNs
aWVudEd0ayA6IHB1YmxpYyBJY29uRGF0YWJhc2VDbGllbnQgeworcHVibGljOgorCisgICAgLy8g
SWNvbkRhdGFiYXNlQ2xpZW50IGludGVyZmFjZQorICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtSW1w
b3J0KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZW1vdmVBbGxJY29u
cygpIHsgfTsKKworICAgIC8vIENhbGxlZCB3aGVuIHRoZSBhbiBpY29uIGlzIHJlcXVlc3RlZCB3
aGlsZSB0aGUgaW5pdGlhbAorICAgIC8vIGltcG9ydCBpcyBnb2luZyBvbi4KKyAgICB2aXJ0dWFs
IHZvaWQgZGlkSW1wb3J0SWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBVUkwpIHsgfTsK
KworICAgIC8vIENhbGxlZCB3aGVuZXZlciBhIHJldGFpbmVkIGljb24gaXMgcmVhZCBmcm9tIGRh
dGFiYXNlLgorICAgIHZpcnR1YWwgdm9pZCBkaWRJbXBvcnRJY29uRGF0YUZvclBhZ2VVUkwoY29u
c3QgU3RyaW5nJiBVUkwpCisgICAgeworICAgICAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRh
dGFiYXNlID0gd2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCk7CisgICAgICAgIC8vIFdlIG5l
ZWQgdG8gZW1pdCB0aGlzIGhlcmUgYmVjYXVzZSB3ZWJraXRGYXZpY29uRGF0YWJhc2VEaXNwYXRj
aERpZFJlY2VpdmVJY29uKCkKKyAgICAgICAgLy8gaXMgb25seSBjYWxsZWQgZm9yIGljb25zIHRo
YXQgaGF2ZSBqdXN0IGJlaW5nIGRvd25sb2FkZWQsIGFuZCB0aGlzIGlzIGNhbGxlZAorICAgICAg
ICAvLyB3aGVuIGljb24gZGF0YSBpcyBpbXBvcnRlZCBmcm9tIHRoZSBkYXRhYmFzZS4KKyAgICAg
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGRhdGFiYXNlLCAiaWNvbi1sb2FkZWQiLCBVUkwudXRm
OCgpLmRhdGEoKSk7CisKKyAgICAgICAgd2Via2l0RmF2aWNvbkRhdGFiYXNlUHJvY2Vzc1BlbmRp
bmdJY29uc0ZvclVSSShkYXRhYmFzZSwgVVJMKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBVUkwpCisgICAgeworICAgICAg
ICAvLyBDYWxsZWQgd2hlbiB0aGUgdGhlIGZhdmljb24gZm9yIGEgcGFydGljdWxhciBVUkwgY2hh
bmdlcy4KKyAgICAgICAgLy8gSXQgZG9lcyBub3QgbWVhbiB0aGF0IHRoZSBuZXcgaWNvbiBkYXRh
IGlzIGF2YWlsYWJsZSB5ZXQuCisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaFVS
TEltcG9ydCgpCisgICAgeworICAgICAgICB3ZWJraXRGYXZpY29uRGF0YWJhc2VJbXBvcnRGaW5p
c2hlZCh3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKSk7CisKKyAgICAgICAgLy8gTm93IHRo
YXQgZXZlcnl0aGluZyBpcyBpbXBvcnRlZCBlbmFibGUgcHJ1bmluZyBvZiBvbGQKKyAgICAgICAg
Ly8gaWNvbnMuIE5vIGljb24gd2lsbCBiZSByZW1vdmVkIGR1cmluZyB0aGUgaW1wb3J0IHByb2Nl
c3MKKyAgICAgICAgLy8gYmVjYXVzZSB3ZSBkaXNhYmxlIGNsZWFudXBzIGJlZm9yZSBvcGVuaW5n
IHRoZSBkYXRhYmFzZS4KKyAgICAgICAgSWNvbkRhdGFiYXNlOjphbGxvd0RhdGFiYXNlQ2xlYW51
cCgpOworICAgIH0KK307CisKK2NsYXNzIFBlbmRpbmdJY29uUmVxdWVzdCB7CitwdWJsaWM6Cisg
ICAgUGVuZGluZ0ljb25SZXF1ZXN0KGNvbnN0IFN0cmluZyYgcGFnZVVSSSwgR1NpbXBsZUFzeW5j
UmVzdWx0KiByZXN1bHQsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEludFNpemUgaWNvblNp
emUpCisgICAgICAgIDogbV9wYWdlVVJJKHBhZ2VVUkkpCisgICAgICAgICwgbV9hc3luY1Jlc3Vs
dChyZXN1bHQpCisgICAgICAgICwgbV9jYW5jZWxsYWJsZShjYW5jZWxsYWJsZSkKKyAgICAgICAg
LCBtX2NhbmNlbGxlZElkKDApCisgICAgICAgICwgbV9pY29uU2l6ZShpY29uU2l6ZSkKKyAgICB7
CisgICAgICAgIGlmIChjYW5jZWxsYWJsZSkgeworICAgICAgICAgICAgbV9jYW5jZWxsZWRJZCA9
IGdfY2FuY2VsbGFibGVfY29ubmVjdChjYW5jZWxsYWJsZSwgR19DQUxMQkFDSyh3ZWJraXRGYXZp
Y29uRGF0YWJhc2VHZXRJY29uUGl4YnVmQ2FuY2VsbGVkKSwgdGhpcywgMCk7CisgICAgICAgICAg
ICBnX29iamVjdF9zZXRfZGF0YV9mdWxsKEdfT0JKRUNUKHJlc3VsdCksICJjYW5jZWxsYWJsZSIs
IGdfb2JqZWN0X3JlZihjYW5jZWxsYWJsZSksIHN0YXRpY19jYXN0PEdEZXN0cm95Tm90aWZ5Pihn
X29iamVjdF91bnJlZikpOworICAgICAgICB9CisgICAgfQorCisgICAgflBlbmRpbmdJY29uUmVx
dWVzdCgpCisgICAgeworICAgICAgICBpZiAobV9jYW5jZWxsZWRJZCA+IDApCisgICAgICAgICAg
ICBnX2NhbmNlbGxhYmxlX2Rpc2Nvbm5lY3QobV9jYW5jZWxsYWJsZS5nZXQoKSwgbV9jYW5jZWxs
ZWRJZCk7CisgICAgfQorCisgICAgY29uc3QgU3RyaW5nJiBwYWdlVVJJKCkgeyByZXR1cm4gbV9w
YWdlVVJJOyB9CisgICAgR1NpbXBsZUFzeW5jUmVzdWx0KiBhc3luY1Jlc3VsdCgpIHsgcmV0dXJu
IG1fYXN5bmNSZXN1bHQuZ2V0KCk7IH0KKworICAgIHZvaWQgYXN5bmNSZXN1bHRDYW5jZWwoKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYXN5bmNSZXN1bHQpOworICAgICAgICBnX3NpbXBsZV9h
c3luY19yZXN1bHRfc2V0X2Vycm9yKG1fYXN5bmNSZXN1bHQuZ2V0KCksIEdfSU9fRVJST1IsIEdf
SU9fRVJST1JfQ0FOQ0VMTEVELCAiJXMiLCBfKCJPcGVyYXRpb24gd2FzIGNhbmNlbGxlZCIpKTsK
KyAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlKG1fYXN5bmNSZXN1bHQuZ2V0
KCkpOworICAgIH0KKworICAgIHZvaWQgYXN5bmNSZXN1bHRDb21wbGV0ZUluSWRsZShHZGtQaXhi
dWYqIGljb24pCisgICAgeworICAgICAgICBBU1NFUlQobV9hc3luY1Jlc3VsdCk7CisgICAgICAg
IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyKG1fYXN5bmNSZXN1bHQu
Z2V0KCksIGljb24sIGljb24gPyBzdGF0aWNfY2FzdDxHRGVzdHJveU5vdGlmeT4oZ19vYmplY3Rf
dW5yZWYpIDogMCk7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9p
ZGxlKG1fYXN5bmNSZXN1bHQuZ2V0KCkpOworICAgIH0KKworICAgIHZvaWQgYXN5bmNSZXN1bHRD
b21wbGV0ZShHZGtQaXhidWYqIGljb24pCisgICAgeworICAgICAgICBBU1NFUlQobV9hc3luY1Jl
c3VsdCk7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVy
KG1fYXN5bmNSZXN1bHQuZ2V0KCksIGljb24sIGljb24gPyBzdGF0aWNfY2FzdDxHRGVzdHJveU5v
dGlmeT4oZ19vYmplY3RfdW5yZWYpIDogMCk7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3Vs
dF9jb21wbGV0ZShtX2FzeW5jUmVzdWx0LmdldCgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
U3RyaW5nIG1fcGFnZVVSSTsKKyAgICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gbV9hc3lu
Y1Jlc3VsdDsKKyAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKKyAgICBn
dWxvbmcgbV9jYW5jZWxsZWRJZDsKKyAgICBJbnRTaXplIG1faWNvblNpemU7Cit9OworCisKK2Vu
dW0geworICAgIFBST1BfMCwKKworICAgIFBST1BfUEFUSCwKK307CisKK2VudW0geworICAgIElD
T05fTE9BREVELAorCisgICAgTEFTVF9TSUdOQUwKK307CisKK3N0YXRpYyBndWludCB3ZWJraXRf
ZmF2aWNvbl9kYXRhYmFzZV9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKKworR19ERUZJ
TkVfVFlQRShXZWJLaXRGYXZpY29uRGF0YWJhc2UsIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlLCBH
X1RZUEVfT0JKRUNUKQorCit0eXBlZGVmIFZlY3RvcjxPd25QdHI8UGVuZGluZ0ljb25SZXF1ZXN0
PiA+IFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvcjsKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFBl
bmRpbmdJY29uUmVxdWVzdFZlY3Rvcio+IFBlbmRpbmdJY29uUmVxdWVzdE1hcDsKKworc3RydWN0
IF9XZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlIHsKKyAgICBHT3duUHRyPGdjaGFyPiBwYXRo
OworICAgIEljb25EYXRhYmFzZUNsaWVudEd0ayBpY29uRGF0YWJhc2VDbGllbnQ7CisgICAgUGVu
ZGluZ0ljb25SZXF1ZXN0TWFwIHBlbmRpbmdJY29uUmVxdWVzdHM7CisgICAgYm9vbCBpbXBvcnRG
aW5pc2hlZDsKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2ZpbmFs
aXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFi
YXNlID0gV0VCS0lUX0ZBVklDT05fREFUQUJBU0Uob2JqZWN0KTsKKworICAgIHdlYmtpdEZhdmlj
b25EYXRhYmFzZUNsb3NlKGRhdGFiYXNlKTsKKyAgICBkYXRhYmFzZS0+cHJpdi0+fldlYktpdEZh
dmljb25EYXRhYmFzZVByaXZhdGUoKTsKKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9mYXZp
Y29uX2RhdGFiYXNlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmpl
Y3QsIGd1aW50IHByb3BJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMp
Cit7CisgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IFdFQktJVF9GQVZJQ09O
X0RBVEFCQVNFKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJP
UF9QQVRIOgorICAgICAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9zZXRfcGF0aChkYXRhYmFz
ZSwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0
RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFKG9iamVj
dCk7CisKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9QQVRIOgorICAgICAg
ICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9w
YXRoKGRhdGFiYXNlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdf
T0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcHNwZWMpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9mYXZpY29uX2Rh
dGFiYXNlX2NsYXNzX2luaXQoV2ViS2l0RmF2aWNvbkRhdGFiYXNlQ2xhc3MqIGtsYXNzKQorewor
ICAgIHdlYmtpdEluaXQoKTsKKworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19P
QkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRf
ZmF2aWNvbl9kYXRhYmFzZV9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0
eSA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xh
c3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9wcm9wZXJ0eTsK
KworICAgICAvKioKKyAgICAgICogV2ViS2l0RmF2aWNvbkRhdGFiYXNlOnBhdGg6CisgICAgICAq
CisgICAgICAqIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBpY29uIGRhdGFiYXNlIGZvbGRlci4K
KyAgICAgICoKKyAgICAgICogU2luY2U6IDEuOAorICAgICAgKi8KKyAgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsIFBST1BfUEFUSCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJwYXRoIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8o
IlBhdGgiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF8oIlRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBpY29uIGRhdGFiYXNlIGZvbGRl
ciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworCisgICAgIC8qKgorICAg
ICAgKiBXZWJLaXRGYXZpY29uRGF0YWJhc2U6Omljb24tbG9hZGVkOgorICAgICAgKiBAZGF0YWJh
c2U6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICAqIEBm
cmFtZV91cmk6IHRoZSBVUkkgb2YgdGhlIG1haW4gZnJhbWUgb2YgYSBXZWIgcGFnZSBjb250YWlu
aW5nCisgICAgICAqIHRoZSBpY29uCisgICAgICAqCisgICAgICAqIFRoaXMgc2lnbmFsIGlzIGVt
aXR0ZWQgd2hlbiBhIGZhdmljb24gaXMgYXZhaWxhYmxlIGZvciB0aGUKKyAgICAgICogbWFpbiBm
cmFtZSBvZiBhIHBhZ2UuIFNlZSAjV2ViS2l0V2ViVmlldzo6aWNvbi1sb2FkZWQgaWYgeW91Cisg
ICAgICAqIG9ubHkgbmVlZCB0aGUgZmF2aWNvbiBvZiBhIHBhcnRpY3VsYXIgI1dlYktpdFdlYlZp
ZXcuCisgICAgICAqCisgICAgICAqIE5vdGUgdGhhdCB0aGlzIHNpZ25hbCBjYXJyaWVzIHRoZSBV
Ukkgb2YgdGhlIGZyYW1lIHRoYXQgbG9hZHMKKyAgICAgICogdGhlIGljb24sIHdoaWxlICNXZWJL
aXRXZWJWaWV3OjppY29uLWxvYWRlZCBwcm92aWRlcyB0aGUgVVJJCisgICAgICAqIG9mIHRoZSBm
YXZpY29uLgorICAgICAgKgorICAgICAgKiBTaW5jZTogMS44CisgICAgICAqLworICAgICB3ZWJr
aXRfZmF2aWNvbl9kYXRhYmFzZV9zaWduYWxzW0lDT05fTE9BREVEXSA9IGdfc2lnbmFsX25ldygi
aWNvbi1sb2FkZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhrbGFzcyksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHU2ln
bmFsRmxhZ3MpR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V
TEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX1NUUklORywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUs
IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdfVFlQRV9TVFJJTkcpOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRl
KGtsYXNzLCBzaXplb2YoV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZSkpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9pbml0KFdlYktpdEZhdmljb25EYXRhYmFz
ZSogZGF0YWJhc2UpCit7CisgICAgZGF0YWJhc2UtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VU
X1BSSVZBVEUoZGF0YWJhc2UsIFdFQktJVF9UWVBFX0ZBVklDT05fREFUQUJBU0UsIFdlYktpdEZh
dmljb25EYXRhYmFzZVByaXZhdGUpOworICAgIG5ldyAoZGF0YWJhc2UtPnByaXYpIFdlYktpdEZh
dmljb25EYXRhYmFzZVByaXZhdGUoKTsKK30KKworLy8gQ2FsbGVkIGZyb20gRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKQordm9pZCB3ZWJraXRGYXZpY29uRGF0YWJh
c2VEaXNwYXRjaERpZFJlY2VpdmVJY29uKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2Us
IGNvbnN0IGNoYXIqIGZyYW1lVVJJKQoreworICAgIGdfc2lnbmFsX2VtaXQoZGF0YWJhc2UsIHdl
YmtpdF9mYXZpY29uX2RhdGFiYXNlX3NpZ25hbHNbSUNPTl9MT0FERURdLCAwLCBmcmFtZVVSSSk7
CisKKyAgICAvLyBSZXRhaW4gdGhlIG5ldyBpY29uLgorICAgIGljb25EYXRhYmFzZSgpLnJldGFp
bkljb25Gb3JQYWdlVVJMKFN0cmluZzo6ZnJvbVVURjgoZnJhbWVVUkkpKTsKK30KKworLyoqCisg
KiB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfcGF0aDoKKyAqIEBkYXRhYmFzZTogYSAjV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlCisgKgorICogRGV0ZXJtaW5lcyB0aGUgYWJzb2x1dGUgcGF0aCB0
byB0aGUgZGF0YWJhc2UgZm9sZGVyIG9uIGRpc2suCisgKgorICogUmV0dXJuczogdGhlIGFic29s
dXRlIHBhdGggb2YgdGhlIGRhdGFiYXNlIGZvbGRlciwgb3IgJU5VTEwKKyAqCisgKiBTaW5jZTog
MS44CisgKiovCitjb25zdCBnY2hhciogd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X3BhdGgo
V2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfRkFWSUNPTl9EQVRBQkFTRShkYXRhYmFzZSksIDApOworCisgICAgcmV0
dXJuIGRhdGFiYXNlLT5wcml2LT5wYXRoLmdldCgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRG
YXZpY29uRGF0YWJhc2VDbG9zZShXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlKQorewor
ICAgIGlmIChpY29uRGF0YWJhc2UoKS5pc0VuYWJsZWQoKSkgeworICAgICAgICBpY29uRGF0YWJh
c2UoKS5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgaWNvbkRhdGFiYXNlKCkuY2xvc2UoKTsK
KyAgICB9Cit9CisKKy8qKgorICogd2Via2l0X2Zhdmljb25fZGF0YWJhc2Vfc2V0X3BhdGg6Cisg
KiBAZGF0YWJhc2U6IGEgI1dlYktpdEZhdmljb25EYXRhYmFzZQorICogQHBhdGg6IGFuIGFic29s
dXRlIHBhdGggdG8gdGhlIGljb24gZGF0YWJhc2UgZm9sZGVyCisgKgorICogU3BlY2lmaWVzIHRo
ZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBkYXRhYmFzZSBmb2xkZXIgb24gZGlzay4gVGhlCisgKiBp
Y29uIGRhdGFiYXNlIHdpbGwgb25seSBiZSBlbmFibGVkIGFmdGVyIGEgY2FsbCB0byB0aGlzIG1l
dGhvZC4KKyAqCisgKiBQYXNzaW5nICVOVUxMIG9yICIiIGRpc2FibGVzIHRoZSBpY29uIGRhdGFi
YXNlLgorICoKKyAqIFNpbmNlOiAxLjgKKyAqKi8KK3ZvaWQgd2Via2l0X2Zhdmljb25fZGF0YWJh
c2Vfc2V0X3BhdGgoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIq
IHBhdGgpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRkFWSUNPTl9EQVRBQkFT
RShkYXRhYmFzZSkpOworCisgICAgLy8gQWx3YXlzIHRyeSB0byBjbG9zZSBiZWNhdXNlIHRoZSBv
bGQgaWNvbmRhdGFiYXNlIGlzIG9wZW5lZCBieSBkZWZhdWx0LgorICAgIHdlYmtpdEZhdmljb25E
YXRhYmFzZUNsb3NlKGRhdGFiYXNlKTsKKworICAgIGRhdGFiYXNlLT5wcml2LT5pbXBvcnRGaW5p
c2hlZCA9IGZhbHNlOworICAgIGlmICghKHBhdGggJiYgcGF0aFswXSkpIHsKKyAgICAgICAgZGF0
YWJhc2UtPnByaXYtPnBhdGguc2V0KDApOworICAgICAgICBpY29uRGF0YWJhc2UoKS5zZXRFbmFi
bGVkKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGljb25EYXRhYmFzZSgp
LnNldENsaWVudCgmZGF0YWJhc2UtPnByaXYtPmljb25EYXRhYmFzZUNsaWVudCk7CisgICAgSWNv
bkRhdGFiYXNlOjpkZWxheURhdGFiYXNlQ2xlYW51cCgpOworICAgIGljb25EYXRhYmFzZSgpLnNl
dEVuYWJsZWQodHJ1ZSk7CisgICAgaWYgKCFpY29uRGF0YWJhc2UoKS5vcGVuKGZpbGVuYW1lVG9T
dHJpbmcocGF0aCksIEljb25EYXRhYmFzZTo6ZGVmYXVsdERhdGFiYXNlRmlsZW5hbWUoKSkpIHsK
KyAgICAgICAgSWNvbkRhdGFiYXNlOjphbGxvd0RhdGFiYXNlQ2xlYW51cCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgZGF0YWJhc2UtPnByaXYtPnBhdGguc2V0KGdfc3RyZHVwKHBh
dGgpKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91
cmk6CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEZhdmljb25EYXRhYmFzZQorICogQHBhZ2VfdXJp
OiBVUkkgb2YgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbgorICoKKyAqIE9idGFpbnMgdGhl
IFVSSSBmb3IgdGhlIGZhdmljb24gZm9yIHRoZSBnaXZlbiBwYWdlIFVSSS4KKyAqIFNlZSBhbHNv
IHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkoKS4KKyAqCisgKiBSZXR1cm5zOiBhIG5ld2x5
IGFsbG9jYXRlZCBVUkkgZm9yIHRoZSBmYXZpY29uLCBvciAlTlVMTAorICoKKyAqIFNpbmNlOiAx
LjgKKyAqKi8KK2djaGFyKiB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91cmko
V2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkkpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZBVklDT05fREFUQUJBU0UoZGF0
YWJhc2UpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChwYWdlVVJJLCAwKTsKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgU3RyaW5nIGljb25VUkkgPSBpY29uRGF0YWJh
c2UoKS5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKFN0cmluZzo6ZnJvbVVURjgocGFnZVVS
SSkpOworICAgIGlmIChpY29uVVJJLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICByZXR1cm4gZ19zdHJkdXAoaWNvblVSSS51dGY4KCkuZGF0YSgpKTsKK30KKworc3RhdGljIEdk
a1BpeGJ1ZiogZ2V0SWNvblBpeGJ1ZlN5bmNocm9ub3VzbHkoV2ViS2l0RmF2aWNvbkRhdGFiYXNl
KiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBwYWdlVVJMLCBndWludCB3aWR0aCwgZ3VpbnQgaGVp
Z2h0KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBUaGUgZXhhY3Qg
c2l6ZSB3ZSBwYXNzIGlzIGlycmVsZXZhbnQgdG8gdGhlIGljb25EYXRhYmFzZSBjb2RlLgorICAg
IC8vIFdlIG11c3QgcGFzcyBzb21ldGhpbmcgZ3JlYXRlciB0aGFuIDB4MCB0byBnZXQgYSBwaXhi
dWYuCisgICAgSW1hZ2UqIGljb24gPSBpY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25Gb3JQ
YWdlVVJMKHBhZ2VVUkwsIEludFNpemUoMTYsIDE2KSk7CisgICAgaWYgKCFpY29uKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYo
aWNvbi0+Z2V0R2RrUGl4YnVmKCkpOworICAgIGlmICghcGl4YnVmKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIC8vIEEgc2l6ZSBvZiAoMCwgMCkgbWVhbnMgdGhlIG1heGltdW0gYXZhaWxhYmxl
IHNpemUuCisgICAgaWYgKHdpZHRoICYmIGhlaWdodCAmJiAoaWNvbi0+d2lkdGgoKSAhPSAoaW50
KSB3aWR0aCB8fCBpY29uLT5oZWlnaHQoKSAhPSAoaW50KSBoZWlnaHQpKQorICAgICAgICBwaXhi
dWYgPSBnZGtfcGl4YnVmX3NjYWxlX3NpbXBsZShwaXhidWYuZ2V0KCksIHdpZHRoLCBoZWlnaHQs
IEdES19JTlRFUlBfQklMSU5FQVIpOworICAgIHJldHVybiBwaXhidWYubGVha1JlZigpOworfQor
CisvKioKKyAqIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3RyeV9nZXRfZmF2aWNvbl9waXhidWY6
CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEZhdmljb25EYXRhYmFzZQorICogQHBhZ2VfdXJpOiBV
Ukkgb2YgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbgorICogQHdpZHRoOiB0aGUgZGVzaXJl
ZCB3aWR0aCBmb3IgdGhlIGljb24KKyAqIEBoZWlnaHQ6IHRoZSBkZXNpcmVkIGhlaWdodCBmb3Ig
dGhlIGljb24KKyAqCisgKiBPYnRhaW5zIGEgI0dka1BpeGJ1ZiBvZiB0aGUgZmF2aWNvbiBmb3Ig
dGhlIGdpdmVuIHBhZ2UgVVJJLCBvcgorICogJU5VTEwgaWYgdGhlcmUgaXMgbm8gaWNvbiBmb3Ig
dGhlIGdpdmVuIHBhZ2Ugb3IgaXQgaGFzbid0IGJlZW4KKyAqIGxvYWRlZCBmcm9tIGRpc2sgeWV0
LiBVc2Ugd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKCkKKyAqIGlmIHlv
dSBuZWVkIHRvIGRpc3Rpbmd1aXNoIHRoZXNlIGNhc2VzLiAgVG8gbWFrZSBzdXJlIHRoaXMgbWV0
aG9kCisgKiB3aWxsIHJldHVybiBhIHZhbGlkIGljb24gd2hlbiB0aGUgZ2l2ZW4gVVJJIGhhcyBv
bmUsIHlvdSBzaG91bGQKKyAqIGNvbm5lY3QgdG8gV2ViS2l0RmF2aWNvbkRhdGFiYXNlOjppY29u
LWxvYWRlZCBhbmQgdXNlIHRoaXMgZnVuY3Rpb24KKyAqIGluIHRoZSBjYWxsYmFjay4KKyAqCisg
KiBJZiAoQHdpZHRoLCBAaGVpZ2h0KSBpcyAoMCwgMCkgdGhlbiB0aGlzIG1ldGhvZCB3aWxsIHJl
dHVybiB0aGUKKyAqIG1heGltdW0gYXZhaWxhYmxlIHNpemUgZm9yIHRoZSBpY29uLiBOb3RlIHRo
YXQgaWYgeW91IHNwZWNpZnkgYQorICogZGlmZmVyZW50IHNpemUgdGhlIGljb24gd2lsbCBiZSBz
Y2FsZWQgZWFjaCB0aW1lIHlvdSBjYWxsIHRoaXMKKyAqIGZ1bmN0aW9uLgorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgcmVmZXJlbmNlIHRvIGEgI0dka1BpeGJ1Ziwgb3Ig
JU5VTEwKKyAqIGlmIHRoZSBnaXZlbiBVUkkgZG9lc24ndCBoYXZlIGFuIGljb24gb3IgaXQgaGFz
bid0IGJlZW4gbG9hZGVkIHlldC4KKyAqCisgKiBTaW5jZTogMS44CisgKiovCitHZGtQaXhidWYq
IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3RyeV9nZXRfZmF2aWNvbl9waXhidWYoV2ViS2l0RmF2
aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkksIGd1aW50IHdpZHRo
LCBndWludCBoZWlnaHQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZB
VklDT05fREFUQUJBU0UoZGF0YWJhc2UpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChw
YWdlVVJJLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCgod2lkdGggJiYgaGVpZ2h0KSB8
fCAoIXdpZHRoICYmICFoZWlnaHQpLCAwKTsKKworICAgIHJldHVybiBnZXRJY29uUGl4YnVmU3lu
Y2hyb25vdXNseShkYXRhYmFzZSwgU3RyaW5nOjpmcm9tVVRGOChwYWdlVVJJKSwgd2lkdGgsIGhl
aWdodCk7Cit9CisKK3N0YXRpYyBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIHdlYmtpdEZhdmlj
b25EYXRhYmFzZUdldE9yQ3JlYXRlUmVxdWVzdHMoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRh
YmFzZSwgY29uc3QgU3RyaW5nJiBwYWdlVVJMKQoreworICAgIFBlbmRpbmdJY29uUmVxdWVzdFZl
Y3RvciogaWNvbnMgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5nZXQocGFn
ZVVSTCk7CisgICAgaWYgKCFpY29ucykgeworICAgICAgICBpY29ucyA9IG5ldyBQZW5kaW5nSWNv
blJlcXVlc3RWZWN0b3I7CisgICAgICAgIGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVl
c3RzLnNldChwYWdlVVJMLCBpY29ucyk7CisgICAgfQorCisgICAgcmV0dXJuIGljb25zOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRmYXZpY29uZGF0YWJhc2VEZWxldGVSZXF1ZXN0cyhXZWJLaXRG
YXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIHJlcXVl
c3RzLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7CisgICAgZGF0YWJhc2UtPnByaXYtPnBlbmRp
bmdJY29uUmVxdWVzdHMucmVtb3ZlKHBhZ2VVUkwpOworICAgIGRlbGV0ZSByZXF1ZXN0czsKK30K
Kworc3RhdGljIHZvaWQgZ2V0SWNvblBpeGJ1ZkNhbmNlbGxlZCh2b2lkKiB1c2VyRGF0YSkKK3sK
KyAgICBQZW5kaW5nSWNvblJlcXVlc3QqIHJlcXVlc3QgPSBzdGF0aWNfY2FzdDxQZW5kaW5nSWNv
blJlcXVlc3QqPih1c2VyRGF0YSk7CisgICAgcmVxdWVzdC0+YXN5bmNSZXN1bHRDYW5jZWwoKTsK
KworICAgIGNvbnN0IFN0cmluZyYgcGFnZVVSTCA9IHJlcXVlc3QtPnBhZ2VVUkkoKTsKKyAgICBX
ZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X2dldF9mYXZpY29uX2RhdGFi
YXNlKCk7CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBpY29ucyA9IGRhdGFiYXNlLT5w
cml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmdldChwYWdlVVJMKTsKKyAgICBpZiAoIWljb25zKQor
ICAgICAgICByZXR1cm47CisKKyAgICBzaXplX3QgaXRlbUluZGV4ID0gaWNvbnMtPmZpbmQocmVx
dWVzdCk7CisgICAgaWYgKGl0ZW1JbmRleCAhPSBub3RGb3VuZCkKKyAgICAgICAgaWNvbnMtPnJl
bW92ZShpdGVtSW5kZXgpOworICAgIGlmIChpY29ucy0+aXNFbXB0eSgpKQorICAgICAgICB3ZWJr
aXRmYXZpY29uZGF0YWJhc2VEZWxldGVSZXF1ZXN0cyhkYXRhYmFzZSwgaWNvbnMsIHBhZ2VVUkwp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRGYXZpY29uRGF0YWJhc2VHZXRJY29uUGl4YnVmQ2Fu
Y2VsbGVkKEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIFBlbmRpbmdJY29uUmVxdWVzdCogcmVx
dWVzdCkKK3sKKyAgICAvLyBIYW5kbGUgY2FuY2VsbGVkIGluIGEgaW4gaWRsZSBzaW5jZSBpdCBt
aWdodCBiZSBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkLgorICAgIGNhbGxPbk1haW5UaHJlYWQoZ2V0
SWNvblBpeGJ1ZkNhbmNlbGxlZCwgcmVxdWVzdCk7Cit9CisKKy8qKgorICogd2Via2l0X2Zhdmlj
b25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmOgorICogQGRhdGFiYXNlOiBhICNXZWJLaXRG
YXZpY29uRGF0YWJhc2UKKyAqIEBwYWdlX3VyaTogVVJJIG9mIHRoZSBwYWdlIGNvbnRhaW5pbmcg
dGhlIGljb24KKyAqIEB3aWR0aDogdGhlIGRlc2lyZWQgd2lkdGggZm9yIHRoZSBpY29uCisgKiBA
aGVpZ2h0OiB0aGUgZGVzaXJlZCBoZWlnaHQgZm9yIHRoZSBpY29uCisgKiBAY2FuY2VsbGFibGU6
IEEgI0dDYW5jZWxsYWJsZSBvciAlTlVMTC4KKyAqIEBjYWxsYmFjazogKGFsbG93LW5vbmUpOiBB
ICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgcmVxdWVzdCBpcworICogICAg
ICAgICAgICBzYXRpc2ZpZWQgb3IgJU5VTEwgaWYgeW91IGRvbid0IGNhcmUgYWJvdXQgdGhlIHJl
c3VsdC4KKyAqIEB1c2VyX2RhdGE6IFRoZSBkYXRhIHRvIHBhc3MgdG8gQGNhbGxiYWNrLgorICoK
KyAqIEFzeW5jaHJvbm91c2x5IG9idGFpbnMgYSAjR2RrUGl4YnVmIG9mIHRoZSBmYXZpY29uIGZv
ciB0aGUgZ2l2ZW4KKyAqIHBhZ2UgVVJJLiBUaGUgYWR2YW50YWdlIG9mIHRoaXMgbWV0aG9kIG92
ZXIKKyAqIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3RyeV9nZXRfZmF2aWNvbl9waXhidWYoKSBp
cyB0aGF0IGl0IGFsd2F5cyByZXR1cm4gdGhlCisgKiBjYWNoZWQgaWNvbiBpZiBpdCdzIGluIHRo
ZSBkYXRhYmFzZSBhc3luY2hyb25vdXNseSB3YWl0aW5nIGZvciB0aGUKKyAqIGljb24gdG8gYmUg
cmVhZCBmcm9tIHRoZSBkYXRhYmFzZS4KKyAqCisgKiBUaGlzIGlzIGFuIGFzeW5jaHJvbm91cyBt
ZXRob2QuIFdoZW4gdGhlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwgY2FsbGJhY2sgd2lsbAorICog
YmUgaW52b2tlZC4gWW91IGNhbiB0aGVuIGNhbGwgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0
X2Zhdmljb25fcGl4YnVmX2ZpbmlzaCgpCisgKiB0byBnZXQgdGhlIHJlc3VsdCBvZiB0aGUgb3Bl
cmF0aW9uLgorICogU2VlIGFsc28gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfdHJ5X2dldF9mYXZp
Y29uX3BpeGJ1ZigpLgorICoKKyAqIElmIChAd2lkdGgsIEBoZWlnaHQpIGlzICgwLCAwKSB0aGVu
IHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZQorICogbWF4aW11bSBhdmFpbGFibGUgc2l6ZSBm
b3IgdGhlIGljb24uIE5vdGUgdGhhdCBpZiB5b3Ugc3BlY2lmeSBhCisgKiBkaWZmZXJlbnQgc2l6
ZSB0aGUgaWNvbiB3aWxsIGJlIHNjYWxlZCBlYWNoIHRpbWUgeW91IGNhbGwgdGhpcworICogZnVu
Y3Rpb24uCisgKgorICogU2luY2U6IDEuOAorICoqLwordm9pZCB3ZWJraXRfZmF2aWNvbl9kYXRh
YmFzZV9nZXRfZmF2aWNvbl9waXhidWYoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwg
Y29uc3QgZ2NoYXIqIHBhZ2VVUkksIGd1aW50IHdpZHRoLCBndWludCBoZWlnaHQsIEdDYW5jZWxs
YWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVy
IHVzZXJEYXRhKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0ZBVklDT05fREFU
QUJBU0UoZGF0YWJhc2UpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHBhZ2VVUkkpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoKHdpZHRoICYmIGhlaWdodCkgfHwgKCF3aWR0aCAmJiAhaGVpZ2h0KSk7
CisKKyAgICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gcmVzdWx0ID0gYWRvcHRHUmVmKGdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcoR19PQkpFQ1QoZGF0YWJhc2UpLCBjYWxsYmFjaywgdXNl
ckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KHdl
YmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1ZikpKTsKKworICAgIC8vIElm
IHdlIGRvbid0IGhhdmUgYW4gaWNvbiBmb3IgdGhlIGdpdmVuIFVSSSByZXR1cm4gQVNBUC4KKyAg
ICBpZiAoZGF0YWJhc2UtPnByaXYtPmltcG9ydEZpbmlzaGVkICYmIGljb25EYXRhYmFzZSgpLnN5
bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoU3RyaW5nOjpmcm9tVVRGOChwYWdlVVJJKSkuaXNF
bXB0eSgpKSB7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2lu
dGVyKHJlc3VsdC5nZXQoKSwgMCwgMCk7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9j
b21wbGV0ZV9pbl9pZGxlKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBTdHJpbmcgcGFnZVVSTCA9IFN0cmluZzo6ZnJvbVVURjgocGFnZVVSSSk7CisgICAgUGVu
ZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0ID0gbmV3IFBlbmRpbmdJY29uUmVxdWVzdChwYWdlVVJM
LCByZXN1bHQuZ2V0KCksIGNhbmNlbGxhYmxlLCBJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKKwor
ICAgIC8vIFJlZ2lzdGVyIGljb24gcmVxdWVzdCBiZWZvcmUgYXNraW5nIGZvciB0aGUgaWNvbiB0
byBhdm9pZCByYWNlIGNvbmRpdGlvbnMuCisgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBp
Y29ucyA9IHdlYmtpdEZhdmljb25EYXRhYmFzZUdldE9yQ3JlYXRlUmVxdWVzdHMoZGF0YWJhc2Us
IHBhZ2VVUkwpOworICAgIEFTU0VSVChpY29ucyk7CisgICAgaWNvbnMtPmFwcGVuZChhZG9wdFB0
cihyZXF1ZXN0KSk7CisKKyAgICBHZGtQaXhidWYqIHBpeGJ1ZiA9IGdldEljb25QaXhidWZTeW5j
aHJvbm91c2x5KGRhdGFiYXNlLCBwYWdlVVJMLCAxNiwgMTYpOworICAgIGlmICghcGl4YnVmICYm
ICFkYXRhYmFzZS0+cHJpdi0+aW1wb3J0RmluaXNoZWQpIHsKKyAgICAgICAgLy8gSW5pdGlhbCBp
bXBvcnQgaXMgb25nb2luZywgdGhlIGljb24gZGF0YSB3aWxsIGJlIGF2YWlsYWJsZSBsYXRlci4K
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJlcXVlc3QtPmFzeW5jUmVzdWx0Q29tcGxl
dGVJbklkbGUocGl4YnVmKTsKKworICAgIC8vIFJlbW92ZSB0aGUgcmVxdWVzdCB3ZSBoYXZlIGp1
c3QgY3JlYXRlZCBhcyBpdCBpc24ndCBwZW5kaW5nCisgICAgLy8gYW55bW9yZSBiZWNhdXNlIHdl
IGFscmVhZHkgaGF2ZSB0aGUgcGl4YnVmLgorICAgIEFTU0VSVChpY29ucy0+bGFzdCgpLmdldCgp
ID09IHJlcXVlc3QpOworICAgIGljb25zLT5yZW1vdmVMYXN0KCk7CisgICAgaWYgKGljb25zLT5p
c0VtcHR5KCkpCisgICAgICAgIHdlYmtpdGZhdmljb25kYXRhYmFzZURlbGV0ZVJlcXVlc3RzKGRh
dGFiYXNlLCBpY29ucywgcGFnZVVSTCk7Cit9CisKKy8qKgorICogd2Via2l0X2Zhdmljb25fZGF0
YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmX2ZpbmlzaDoKKyAqIEBkYXRhYmFzZTogYSAjV2ViS2l0
RmF2aWNvbkRhdGFiYXNlCisgKiBAcmVzdWx0OiBBICNHQXN5bmNSZXN1bHQgb2J0YWluZWQgZnJv
bSB0aGUgI0dBc3luY1JlYWR5Q2FsbGJhY2sgcGFzc2VkIHRvIHdlYmtpdF9mYXZpY29uX2RhdGFi
YXNlX2dldF9mYXZpY29uX3BpeGJ1ZigpCisgKiBAZXJyb3I6IFJldHVybiBsb2NhdGlvbiBmb3Ig
ZXJyb3Igb3IgJU5VTEwuCisgKgorICogRmluaXNoZXMgYW4gb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0
aCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWYoKS4KKyAqCisgKiBS
ZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IHJlZmVyZW5jZSB0byBhICNHZGtQaXhidWYs
IG9yICVOVUxMLgorICoKKyAqIFNpbmNlOiAxLjgKKyAqLworR2RrUGl4YnVmKiB3ZWJraXRfZmF2
aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWZfZmluaXNoKFdlYktpdEZhdmljb25EYXRh
YmFzZSogZGF0YWJhc2UsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBHRXJyb3IqKiBlcnJvcikKK3sK
KyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIHNpbXBsZVJlc3VsdCA9IEdfU0lNUExFX0FTWU5DX1JF
U1VMVChyZXN1bHQpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGdfc2ltcGxlX2FzeW5jX3Jl
c3VsdF9nZXRfc291cmNlX3RhZyhzaW1wbGVSZXN1bHQpID09IHdlYmtpdF9mYXZpY29uX2RhdGFi
YXNlX2dldF9mYXZpY29uX3BpeGJ1ZiwgMCk7CisKKyAgICBpZiAoZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X3Byb3BhZ2F0ZV9lcnJvcihzaW1wbGVSZXN1bHQsIGVycm9yKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlID0gc3RhdGljX2Nhc3Q8R0NhbmNl
bGxhYmxlKj4oZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1Qoc2ltcGxlUmVzdWx0KSwgImNhbmNl
bGxhYmxlIikpOworICAgIGlmIChjYW5jZWxsYWJsZSAmJiBnX2NhbmNlbGxhYmxlX2lzX2NhbmNl
bGxlZChjYW5jZWxsYWJsZSkpIHsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwg
R19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQsIF8oIk9wZXJhdGlvbiB3YXMgY2FuY2Vs
bGVkIikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBHZGtQaXhidWYqIGljb24g
PSBzdGF0aWNfY2FzdDxHZGtQaXhidWYqPihnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jl
c19ncG9pbnRlcihzaW1wbGVSZXN1bHQpKTsKKyAgICBpZiAoIWljb24pCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdka1BpeGJ1Zio+KGdfb2JqZWN0X3JlZihp
Y29uKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEZhdmljb25EYXRhYmFzZVByb2Nlc3NQZW5k
aW5nSWNvbnNGb3JVUkkoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3Ry
aW5nJiBwYWdlVVJMKQoreworICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciogaWNvbnMgPSBk
YXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5nZXQocGFnZVVSTCk7CisgICAgaWYg
KCFpY29ucykKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
Y29ucy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUGVuZGluZ0ljb25SZXF1ZXN0KiByZXF1ZXN0
ID0gaWNvbnMtPmF0KGkpLmdldCgpOworICAgICAgICBpZiAocmVxdWVzdC0+YXN5bmNSZXN1bHQo
KSkKKyAgICAgICAgICAgIHJlcXVlc3QtPmFzeW5jUmVzdWx0Q29tcGxldGUoZ2V0SWNvblBpeGJ1
ZlN5bmNocm9ub3VzbHkoZGF0YWJhc2UsIHBhZ2VVUkwsIDE2LCAxNikpOworICAgIH0KKyAgICB3
ZWJraXRmYXZpY29uZGF0YWJhc2VEZWxldGVSZXF1ZXN0cyhkYXRhYmFzZSwgaWNvbnMsIHBhZ2VV
UkwpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRGYXZpY29uRGF0YWJhc2VJbXBvcnRGaW5pc2hl
ZChXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgZGF0YWJhc2UtPnByaXYtPmltcG9ydEZpbmlzaGVkID0gdHJ1ZTsKKwor
ICAgIC8vIEltcG9ydCBpcyBjb21wbGV0ZSwgcHJvY2VzcyBwZW5kaW5nIHJlcXVlc3RzIGZvciBw
YWdlcyB0aGF0IGFyZSBub3QgaW4gdGhlIGRhdGFiYXNlLAorICAgIC8vIHNpbmNlIGRpZEltcG9y
dEljb25EYXRhRm9yUGFnZVVSTCgpIHdpbGwgbmV2ZXIgYmUgY2FsbGVkIGZvciB0aGVtLgorICAg
IFZlY3RvcjxTdHJpbmc+IHRvRGVsZXRlVVJMczsKKyAgICBQZW5kaW5nSWNvblJlcXVlc3RNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3Rz
LmVuZCgpOworICAgIGZvciAoUGVuZGluZ0ljb25SZXF1ZXN0TWFwOjpjb25zdF9pdGVyYXRvciBp
dGVyID0gZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMuYmVnaW4oKTsgaXRlciAh
PSBlbmQ7ICsraXRlcikgeworICAgICAgICBTdHJpbmcgaWNvblVSTCA9IGljb25EYXRhYmFzZSgp
LnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoaXRlci0+Zmlyc3QpOworICAgICAgICBpZiAo
IWljb25VUkwuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgUGVu
ZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBpY29ucyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBpY29ucy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFBl
bmRpbmdJY29uUmVxdWVzdCogcmVxdWVzdCA9IGljb25zLT5hdChpKS5nZXQoKTsKKyAgICAgICAg
ICAgIGlmIChyZXF1ZXN0LT5hc3luY1Jlc3VsdCgpKQorICAgICAgICAgICAgICAgIHJlcXVlc3Qt
PmFzeW5jUmVzdWx0Q29tcGxldGUoMCk7CisgICAgICAgIH0KKworICAgICAgICB0b0RlbGV0ZVVS
THMuYXBwZW5kKGl0ZXItPmZpcnN0KTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHRvRGVsZXRlVVJMcy5zaXplKCk7ICsraSkKKyAgICAgICAgd2Via2l0ZmF2aWNvbmRhdGFi
YXNlRGVsZXRlUmVxdWVzdHMoZGF0YWJhc2UsIGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJl
cXVlc3RzLmdldCh0b0RlbGV0ZVVSTHNbaV0pLCB0b0RlbGV0ZVVSTHNbaV0pOworfQorCisvKioK
KyAqIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsZWFyOgorICogQGRhdGFiYXNlOiBhICNXZWJL
aXRGYXZpY29uRGF0YWJhc2UKKyAqCisgKiBDbGVhcnMgYWxsIGljb25zIGZyb20gdGhlIGRhdGFi
YXNlLgorICoKKyAqIFNpbmNlOiAxLjgKKyAqKi8KK3ZvaWQgd2Via2l0X2Zhdmljb25fZGF0YWJh
c2VfY2xlYXIoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9JU19GQVZJQ09OX0RBVEFCQVNFKGRhdGFiYXNlKSk7CisKKyAgICBp
Y29uRGF0YWJhc2UoKS5yZW1vdmVBbGxJY29ucygpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTVkNmI4NDQy
NjA5MWU3YjRkOGIyYjUyMWJkMjgzNjg2NzExZDkwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2UuaApAQCAtMCwwICsxLDk1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFu
QGxhbmVkby5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3
ZWJraXRmYXZpY29uZGF0YWJhc2VfaAorI2RlZmluZSB3ZWJraXRmYXZpY29uZGF0YWJhc2VfaAor
CisjaW5jbHVkZSA8Z2RrLXBpeGJ1Zi9nZGstcGl4YnVmLmg+CisjaW5jbHVkZSA8Z2xpYi1vYmpl
Y3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xT
CisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfRkFWSUNPTl9EQVRBQkFTRSAgICAgICAgICAgICAod2Vi
a2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0ZBVklDT05f
REFUQUJBU0Uob2JqKSAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9i
aiksIFdFQktJVF9UWVBFX0ZBVklDT05fREFUQUJBU0UsIFdlYktpdEZhdmljb25EYXRhYmFzZSkp
CisjZGVmaW5lIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0NMQVNTKGtsYXNzKSAgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9GQVZJQ09OX0RBVEFCQVNF
LCBXZWJLaXRGYXZpY29uRGF0YWJhc2VDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19GQVZJQ09O
X0RBVEFCQVNFKG9iaikgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmop
LCBXRUJLSVRfVFlQRV9GQVZJQ09OX0RBVEFCQVNFKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0ZBVklD
T05fREFUQUJBU0VfQ0xBU1Moa2xhc3MpICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNz
KSwgIFdFQktJVF9UWVBFX0ZBVklDT05fREFUQUJBU0UpKQorI2RlZmluZSBXRUJLSVRfRkFWSUNP
Tl9EQVRBQkFTRV9HRVRfQ0xBU1Mob2JqKSAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChv
YmopLCAgV0VCS0lUX1RZUEVfRkFWSUNPTl9EQVRBQkFTRSwgV2ViS2l0RmF2aWNvbkRhdGFiYXNl
Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZSBX
ZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdEZhdmljb25EYXRh
YmFzZSB7CisgICAgR09iamVjdCBwYXJlbnRfaW5zdGFuY2U7CisKKyAgICAvKjwgcHJpdmF0ZSA+
Ki8KKyAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlKiBwcml2OworfTsKKworc3RydWN0
IF9XZWJLaXRGYXZpY29uRGF0YWJhc2VDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9j
bGFzczsKKworICAgIC8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKyAgICB2b2lk
ICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZl
ZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKKyAgICB2
b2lkICgqX3dlYmtpdF9yZXNlcnZlZDQpICh2b2lkKTsKK307CisKK1dFQktJVF9BUEkgR1R5cGUK
K3dlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF90eXBlICAgICAgICAgICAgICAgICAgKHZvaWQp
OworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyKgord2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0
X3BhdGggICAgICAgICAgICAgICAgICAoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSk7
CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Zhdmljb25fZGF0YWJhc2Vfc2V0X3BhdGggICAg
ICAgICAgICAgICAgICAoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiAg
ICAgICAgICAgcGF0aCk7CisKK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZmF2aWNvbl9kYXRh
YmFzZV9nZXRfZmF2aWNvbl91cmkgICAgICAgICAgIChXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRh
dGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2NoYXIqICAgICAgICAgICBwYWdlX3VyaSk7CisKK1dFQktJVF9BUEkgR2RrUGl4
YnVmKgord2Via2l0X2Zhdmljb25fZGF0YWJhc2VfdHJ5X2dldF9mYXZpY29uX3BpeGJ1ZiAgICAo
V2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiAgICAgICAgICAgcGFnZV91
cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
dWludCAgICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgICBoZWlnaHQpOwor
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3Bp
eGJ1ZiAgICAgICAgKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAg
ICAgICAgIHBhZ2VfdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAg
ICAgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0NhbmNlbGxhYmxlKiAgICAgICAgICBjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sg
ICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJVF9BUEkg
R2RrUGl4YnVmKgord2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmX2Zp
bmlzaCAoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCogICAgICAgICAg
cmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0Vycm9yKiogICAgICAgICAgICAgICBlcnJvcik7CisKK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2Zhdmljb25fZGF0YWJhc2VfY2xlYXIgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0RmF2
aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiB3ZWJr
aXRmYXZpY29uZGF0YWJhc2VfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZXByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2Vwcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjc2NzlhMGYw
MGQ5MmMxMjRmYzZlNWIyZjU4YmUwNzk1MzAwM2RkNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2Vwcml2YXRlLmgKQEAgLTAs
MCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IHdlYmtpdGZhdmljb25kYXRhYmFzZXByaXZhdGVfaAorI2RlZmluZSB3ZWJraXRmYXZpY29uZGF0
YWJhc2Vwcml2YXRlX2gKKwordm9pZCB3ZWJraXRGYXZpY29uRGF0YWJhc2VEaXNwYXRjaERpZFJl
Y2VpdmVJY29uKFdlYktpdEZhdmljb25EYXRhYmFzZSosIGNvbnN0IGNoYXIqIGZyYW1lVVJJKTsK
KworI2VuZGlmIC8vIHdlYmtpdGZhdmljb25kYXRhYmFzZXByaXZhdGVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwIGIvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwCmluZGV4IGJjNWQ3MjYwNGZjMzllZjY2N2Y2
NzBlYzQzZDBlZWI5NGZiZGVmOWIuLmMxM2RiYjdkZjdmZTA3OTIxNTE3NDIyMjJkMzRmOGVjYjFi
MmNkYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxz
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5jcHAKQEAg
LTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCiAjaW5j
bHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIndlYmtpdGFwcGxpY2F0aW9uY2Fj
aGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRmYXZpY29uZGF0YWJhc2UuaCIKICNpbmNsdWRlICJ3ZWJr
aXRnbG9iYWxzcHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFzZS5oIgogI2lu
Y2x1ZGUgIndlYmtpdHNvdXBhdXRoZGlhbG9nLmgiCkBAIC0yMzcsNiArMjM4LDggQEAgc3RhdGlj
IEd0a1dpZGdldCogY3VycmVudFRvcGxldmVsQ2FsbGJhY2soV2ViS2l0U291cEF1dGhEaWFsb2cq
IGZlYXR1cmUsIFNvdXBNZXMKICAqIFJldHVybiB2YWx1ZTogKHRyYW5zZmVyIG5vbmUpOiB0aGUg
Y3VycmVudCAjV2ViS2l0SWNvbkRhdGFiYXNlCiAgKgogICogU2luY2U6IDEuMy4xMworICoKKyAq
IERlcHJlY2F0ZWQ6IDEuODogVXNlIHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpIGluc3Rl
YWQKICAqLwogV2ViS2l0SWNvbkRhdGFiYXNlKiB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKQog
ewpAQCAtMjQ5LDExICsyNTIsMzUgQEAgV2ViS2l0SWNvbkRhdGFiYXNlKiB3ZWJraXRfZ2V0X2lj
b25fZGF0YWJhc2UoKQogICAgIHJldHVybiBkYXRhYmFzZTsKIH0KIAorLyoqCisgKiB3ZWJraXRf
Z2V0X2Zhdmljb25fZGF0YWJhc2U6CisgKgorICogUmV0dXJucyB0aGUgI1dlYktpdEZhdmljb25E
YXRhYmFzZSBwcm92aWRpbmcgYWNjZXNzIHRvIHdlYnNpdGUKKyAqIGljb25zLgorICoKKyAqIFJl
dHVybiB2YWx1ZTogKHRyYW5zZmVyIG5vbmUpOiB0aGUgY3VycmVudCAjV2ViS2l0RmF2aWNvbkRh
dGFiYXNlCisgKgorICogU2luY2U6IDEuOAorICovCitXZWJLaXRGYXZpY29uRGF0YWJhc2UqIHdl
YmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpCit7CisgICAgd2Via2l0SW5pdCgpOworCisgICAg
c3RhdGljIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSAwOworICAgIGlmICghZGF0
YWJhc2UpCisgICAgICAgIGRhdGFiYXNlID0gV0VCS0lUX0ZBVklDT05fREFUQUJBU0UoZ19vYmpl
Y3RfbmV3KFdFQktJVF9UWVBFX0ZBVklDT05fREFUQUJBU0UsIE5VTEwpKTsKKworICAgIHJldHVy
biBkYXRhYmFzZTsKK30KKwogc3RhdGljIEdSZWZQdHI8V2ViS2l0U3BlbGxDaGVja2VyPiB0ZXh0
Q2hlY2tlciA9IDA7CiAKIHN0YXRpYyB2b2lkIHdlYmtpdEV4aXQoKQogewogICAgIGdfb2JqZWN0
X3VucmVmKHdlYmtpdF9nZXRfZGVmYXVsdF9zZXNzaW9uKCkpOworI2lmIEVOQUJMRShJQ09OREFU
QUJBU0UpCisgICAgZ19vYmplY3RfdW5yZWYod2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCkp
OworI2VuZGlmCiAgICAgdGV4dENoZWNrZXIgPSAwOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5oIGIvU291cmNlL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGdsb2JhbHMuaAppbmRleCA5NmRjODM4NTBlYTdiMThkMzdiYzBlZTM1ODI3ODJh
Mzk0ZDE2ZTAzLi5mMmQ1OTk3ZjhkMmM5MmU0ZTI3OWMxOWUxYzM3OTM0NDBmOTY3NDE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmgKQEAgLTYyLDYgKzYyLDkgQEAg
d2Via2l0X2dldF93ZWJfcGx1Z2luX2RhdGFiYXNlICAgICAgICAgICAgICAgICAgKHZvaWQpOwog
V0VCS0lUX0FQSSBXZWJLaXRJY29uRGF0YWJhc2UgKgogd2Via2l0X2dldF9pY29uX2RhdGFiYXNl
ICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOwogCitXRUJLSVRfQVBJIFdlYktpdEZhdmlj
b25EYXRhYmFzZSAqCit3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UgICAgICAgICAgICAgICAg
ICAgICAodm9pZCk7CisKIFdFQktJVF9BUEkgdm9pZAogd2Via2l0X3NldF9jYWNoZV9tb2RlbCAg
ICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdENhY2hlTW9kZWwgICAgIGNhY2hlX21vZGVs
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRh
YmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNw
cAppbmRleCAzODNiMDgxN2VjYmFlZTMxNzRlNWVmN2VjN2U5NDE1Yjg0MzdjMTQzLi5lMzI2OWY5
YjE5NGM5Y2M4ZWQyNGU1NzRkODY4ZGI1OGQ4ZjY2MjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcApAQCAtNTksNiArNTksOCBAQAogICog
YmUgZGVsZXRlZCBmcm9tIGl0LgogICoKICAqIFNpbmNlOiAxLjMuMTMKKyAqCisgKiBEZXByZWNh
dGVkOiAxLjg6IFVzZSBXZWJLaXRGYXZpY29uRGF0YWJhc2UgaW5zdGVhZC4KICAqLwogCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OwpAQCAtMTQwLDYgKzE0Miw4IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dF9pY29uX2RhdGFiYXNlX2NsYXNzX2luaXQoV2ViS2l0SWNvbkRhdGFiYXNlQ2xhc3MqIGtsYXNz
KQogICAgICAgKiBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgaWNvbiBkYXRhYmFzZSBmb2xkZXIu
CiAgICAgICAqCiAgICAgICAqIFNpbmNlOiAxLjMuMTMKKyAgICAgICoKKyAgICAgICogRGVwcmVj
YXRlZDogMS44OiBVc2UgV2ViS2l0RmF2aWNvbkRhdGFiYXNlOjpwYXRoIGluc3RlYWQuCiAgICAg
ICAqLwogICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywg
UFJPUF9QQVRILAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoInBhdGgiLApAQCAtMTYwLDYgKzE2NCw4IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dF9pY29uX2RhdGFiYXNlX2NsYXNzX2luaXQoV2ViS2l0SWNvbkRhdGFiYXNlQ2xhc3MqIGtsYXNz
KQogICAgICAqIHRoZSBtYWluIGZyYW1lIG9mIGEgcGFydGljdWxhciAjV2ViS2l0V2ViVmlldy4K
ICAgICAgKgogICAgICAqIFNpbmNlOiAxLjMuMTMKKyAgICAgKgorICAgICAqIERlcHJlY2F0ZWQ6
IDEuODogVXNlIFdlYktpdEZhdmljb25EYXRhYmFzZTo6aWNvbi1sb2FkZWQgaW5zdGVhZC4KICAg
ICAgKi8KICAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zaWduYWxzW0lDT05fTE9BREVEXSA9IGdf
c2lnbmFsX25ldygiaWNvbi1sb2FkZWQiLAogICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mo
a2xhc3MpLApAQCAtMTkxLDYgKzE5Nyw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9pY29uX2RhdGFi
YXNlX2luaXQoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKICAqIFJldHVybnM6IHRoZSBh
YnNvbHV0ZSBwYXRoIG9mIHRoZSBkYXRhYmFzZSBmb2xkZXIsIG9yICVOVUxMCiAgKgogICogU2lu
Y2U6IDEuMy4xMworICoKKyAqIERlcHJlY2F0ZWQ6IDEuODogVXNlIHdlYmtpdF9mYXZpY29uX2Rh
dGFiYXNlX2dldF9wYXRoKCkgaW5zdGVhZC4KICAqKi8KIGNvbnN0IGdjaGFyKiB3ZWJraXRfaWNv
bl9kYXRhYmFzZV9nZXRfcGF0aChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKQogewpAQCAt
MjE3LDYgKzIyNSw4IEBAIHN0YXRpYyB2b2lkIGNsb3NlSWNvbkRhdGFiYXNlT25FeGl0KCkKICAq
IFBhc3NpbmcgJU5VTEwgb3IgIiIgZGlzYWJsZXMgdGhlIGljb24gZGF0YWJhc2UuCiAgKgogICog
U2luY2U6IDEuMy4xMworICoKKyAqIERlcHJlY2F0ZWQ6IDEuODogVXNlIHdlYmtpdF9mYXZpY29u
X2RhdGFiYXNlX3NldF9wYXRoKCkgaW5zdGVhZC4KICAqKi8KIHZvaWQgd2Via2l0X2ljb25fZGF0
YWJhc2Vfc2V0X3BhdGgoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIq
IHBhdGgpCiB7CkBAIC0yNTQsNiArMjY0LDggQEAgdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9z
ZXRfcGF0aChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBnY2hhciogcGEKICAq
IFJldHVybnM6IGEgbmV3bHkgYWxsb2NhdGVkIFVSSSBmb3IgdGhlIGZhdmljb24sIG9yICVOVUxM
CiAgKgogICogU2luY2U6IDEuMy4xMworICoKKyAqIERlcHJlY2F0ZWQ6IDEuODogVXNlIHdlYmtp
dF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaSgpIGluc3RlYWQuCiAgKiovCiBnY2hh
ciogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpKFdlYktpdEljb25EYXRhYmFzZSog
ZGF0YWJhc2UsIGNvbnN0IGdjaGFyKiBwYWdlVVJJKQogewpAQCAtMjgyLDYgKzI5NCw4IEBAIGdj
aGFyKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmkoV2ViS2l0SWNvbkRhdGFiYXNl
KiBkYXRhYmFzZSwgY29uc3QgZ2NoCiAgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3
IHJlZmVyZW5jZSB0byBhICNHZGtQaXhidWYsIG9yICVOVUxMCiAgKgogICogU2luY2U6IDEuMy4x
MworICoKKyAqIERlcHJlY2F0ZWQ6IDEuODogVXNlIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3Ry
eV9nZXRfZmF2aWNvbl9waXhidWYoKSBpbnN0ZWFkLgogICoqLwogR2RrUGl4YnVmKiB3ZWJraXRf
aWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkkpCiB7CkBAIC0zMDcsNiArMzIxLDggQEAgR2RrUGl4YnVm
KiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoV2ViS2l0SWNvbkRhdGFiYXNl
KiBkYXRhYmFzZSwgY28KICAqIENsZWFycyBhbGwgaWNvbnMgZnJvbSB0aGUgZGF0YWJhc2UuCiAg
KgogICogU2luY2U6IDEuMy4xMworICoKKyAqIERlcHJlY2F0ZWQ6IDEuODogVXNlIHdlYmtpdF9m
YXZpY29uX2RhdGFiYXNlX2NsZWFyKCkgaW5zdGVhZC4KICAqKi8KIHZvaWQgd2Via2l0X2ljb25f
ZGF0YWJhc2VfY2xlYXIoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCBkMjk5MzU3MDJmZWY2NDNm
OGVmNjEzYWQ3ZDMxZWMzZDdkMjBiNjIwLi5kZWUxNjEyYjdhNmEzZmUzOTdmYzU5ZDM4NmNhOTFk
NWMzNmViMmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
dmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
CkBAIC0xMSw2ICsxMSw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IE1vdmlhbCBDcmVhdGl2
ZSBUZWNobm9sb2dpZXMgSW5jLgogICogIENvcHlyaWdodCAoQykgMjAwOSBCb2JieSBQb3dlcnMK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTY3
LDcgKzY4LDYgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVx
dWVzdC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJJY29uRGF0YWJh
c2UuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRHdGsuaCIKICNpbmNsdWRlICJNZW1vcnlD
YWNoZS5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKQEAgLTg2
LDYgKzg2LDcgQEAKICNpbmNsdWRlICJ3ZWJraXRkb3dubG9hZC5oIgogI2luY2x1ZGUgIndlYmtp
dGRvd25sb2FkcHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdGVudW10eXBlcy5oIgorI2luY2x1
ZGUgIndlYmtpdGZhdmljb25kYXRhYmFzZS5oIgogI2luY2x1ZGUgIndlYmtpdGdlb2xvY2F0aW9u
cG9saWN5ZGVjaXNpb24uaCIKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgIndlYmtpdGhpdHRlc3RyZXN1bHRwcml2YXRlLmgiCkBAIC01MDU4LDYgKzUwNTksOCBA
QCBjb25zdCBnY2hhciogd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3VyaShXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3KQogICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyByZWZlcmVuY2Ug
dG8gYSAjR2RrUGl4YnVmLCBvciAlTlVMTAogICoKICAqIFNpbmNlOiAxLjMuMTMKKyAqCisgKiBE
ZXByZWNhdGVkOiAxLjg6IFVzZSB3ZWJraXRfd2ViX3ZpZXdfdHJ5X2dldF9mYXZpY29uX3BpeGJ1
ZigpIGluc3RlYWQuCiAgKi8KIEdka1BpeGJ1Ziogd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3Bp
eGJ1ZihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewpAQCAtNTA2OCw3ICs1MDcxLDM2IEBAIEdk
a1BpeGJ1Ziogd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3BpeGJ1ZihXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3KQogICAgIHJldHVybiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYo
ZGF0YWJhc2UsIHBhZ2VVUkkpOwogfQogCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld190cnlfZ2V0
X2Zhdmljb25fcGl4YnVmOgorICogQHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb2JqZWN0
CisgKiBAd2lkdGg6IHRoZSBkZXNpcmVkIHdpZHRoIGZvciB0aGUgaWNvbgorICogQGhlaWdodDog
dGhlIGRlc2lyZWQgaGVpZ2h0IGZvciB0aGUgaWNvbgorICoKKyAqIE9idGFpbnMgYSAjR2RrUGl4
YnVmIG9mIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4KKyAqICNXZWJLaXRXZWJWaWV3LiBUaGlz
IHdpbGwgcmV0dXJuICVOVUxMIGlzIHRoZXJlIGlzIG5vIGljb24gZm9yIHRoZQorICogY3VycmVu
dCAjV2ViS2l0V2ViVmlldyBvciBpZiB0aGUgaWNvbiBpcyBpbiB0aGUgZGF0YWJhc2UgYnV0IG5v
dAorICogYXZhaWxhYmxlIGF0IHRoZSBtb21lbnQgb2YgdGhpcyBjYWxsLiBVc2UKKyAqIHdlYmtp
dF93ZWJfdmlld19nZXRfaWNvbl91cmkoKSBpZiB5b3UgbmVlZCB0byBkaXN0aW5ndWlzaCB0aGVz
ZQorICogY2FzZXMuICBVc3VhbGx5IHlvdSB3YW50IHRvIGNvbm5lY3QgdG8gV2ViS2l0V2ViVmll
dzo6aWNvbi1sb2FkZWQKKyAqIGFuZCBjYWxsIHRoaXMgbWV0aG9kIGluIHRoZSBjYWxsYmFjay4K
KyAqCisgKiBTZWUgYWxzbyB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV90cnlfZ2V0X2Zhdmljb25f
cGl4YnVmKCkuIENvbnRyYXJ5CisgKiB0byB0aGlzIGZ1bmN0aW9uIHRoZSBpY29uIGRhdGFiYXNl
IG9uZSByZXR1cm5zIHRoZSBVUkwgb2YgdGhlIHBhZ2UKKyAqIGNvbnRhaW5pbmcgdGhlIGljb24u
CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyByZWZlcmVuY2UgdG8gYSAj
R2RrUGl4YnVmLCBvciAlTlVMTAorICoKKyAqIFNpbmNlOiAxLjgKKyAqLworR2RrUGl4YnVmKiB3
ZWJraXRfd2ViX3ZpZXdfdHJ5X2dldF9mYXZpY29uX3BpeGJ1ZihXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBndWludCB3aWR0aCwgZ3VpbnQgaGVpZ2h0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgMCk7CiAKKyAgICBjb25zdCBnY2hhciog
cGFnZVVSSSA9IHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpOworICAgIFdlYktpdEZh
dmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKTsK
KyAgICByZXR1cm4gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfdHJ5X2dldF9mYXZpY29uX3BpeGJ1
ZihkYXRhYmFzZSwgcGFnZVVSSSwgd2lkdGgsIGhlaWdodCk7Cit9CiAKIC8qKgogICogd2Via2l0
X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQ6CkBAIC01MTM2LDYgKzUxNjgsMzEgQEAgdm9pZCB3
ZWJWaWV3RXhpdEZ1bGxzY3JlZW4oV2ViS2l0V2ViVmlldyogd2ViVmlldykKICNlbmRpZgogfQog
CisjaWYgRU5BQkxFKElDT05EQVRBQkFTRSkKK3ZvaWQgd2Via2l0V2ViVmlld0ljb25Mb2FkZWQo
V2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgY2hhciogZnJhbWVVUkksIFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgLy8gU2luY2Ugd2UgZGVmaW5pdGVseSBoYXZl
IGFuIGljb24gdGhlIFdlYlZpZXcgZG9lc24ndCBuZWVkIHRvCisgICAgLy8gbGlzdGVuIGZvciBu
b3RpZmljYXRpb25zIGFueSBsb25nZXIuCisgICAgd2Via2l0V2ViVmlld1JlZ2lzdGVyRm9ySWNv
bk5vdGlmaWNhdGlvbih3ZWJWaWV3LCBGQUxTRSk7CisKKyAgICAvLyB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2ljb25fdXJpKCkgcHJvcGVybHkgdXBkYXRlcyB0aGUgImljb24tdXJpIiBwcm9wZXJ0eS4K
KyAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1Qod2ViVmlldyksICJpY29uLXVyaSIpOworICAg
IGdfc2lnbmFsX2VtaXQod2ViVmlldywgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbSUNPTl9MT0FE
RURdLCAwLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKHdlYlZpZXcpKTsKK30KKwordm9p
ZCB3ZWJraXRXZWJWaWV3UmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsIGJvb2wgc2hvdWxkUmVnaXN0ZXIpCit7CisgICAgV2ViS2l0RmF2aWNvbkRhdGFi
YXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpOworICAgIGlmIChz
aG91bGRSZWdpc3RlcikgeworICAgICAgICBpZiAoIWdfc2lnbmFsX2hhbmRsZXJfaXNfY29ubmVj
dGVkKGRhdGFiYXNlLCB3ZWJWaWV3LT5wcml2LT5pY29uTG9hZGVkSGFuZGxlcikpCisgICAgICAg
ICAgICB3ZWJWaWV3LT5wcml2LT5pY29uTG9hZGVkSGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3Qo
ZGF0YWJhc2UsICJpY29uLWxvYWRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyh3ZWJraXRXZWJWaWV3
SWNvbkxvYWRlZCksIHdlYlZpZXcpOworICAgIH0gZWxzZQorICAgICAgICBpZiAoZ19zaWduYWxf
aGFuZGxlcl9pc19jb25uZWN0ZWQoZGF0YWJhc2UsIHdlYlZpZXctPnByaXYtPmljb25Mb2FkZWRI
YW5kbGVyKSkKKyAgICAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChkYXRhYmFz
ZSwgd2ViVmlldy0+cHJpdi0+aWNvbkxvYWRlZEhhbmRsZXIpOworfQorI2VuZGlmCisKIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBXZWJDb3JlOjpQYWdlKiBjb3JlKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5o
IGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAppbmRleCAyYTE1YjUz
YzY3Njg5Y2Y2ZTcwMzFlYzhkOTNkNDViZTYxMmQ0NGY0Li4zZWJlMThmODUyOWQzYWQ4NWY1MWU3
ZjZhMjE5ZTUyODVjNTBlYWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2Vidmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2
aWV3LmgKQEAgLTQzMyw2ICs0MzMsMTEgQEAgd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3VyaSAg
ICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJfdmlldykKIFdFQktJ
VF9BUEkgR2RrUGl4YnVmICoKIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl9waXhidWYgICAgICAg
ICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViX3ZpZXcpOwogCitXRUJLSVRfQVBJ
IEdka1BpeGJ1ZiAqCit3ZWJraXRfd2ViX3ZpZXdfdHJ5X2dldF9mYXZpY29uX3BpeGJ1ZiAgICAg
ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgICB3aWR0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlu
dCAgICAgICAgICAgICAgICAgaGVpZ2h0KTsKKwogV0VCS0lUX0FQSSBXZWJLaXRET01Eb2N1bWVu
dCAqCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCAgICAgICAgICAgICAgICAoV2Vi
S2l0V2ViVmlldyAgICAgICAgKndlYl92aWV3KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaAppbmRleCAyOTY3ZGE5MmYzNjE0YjNhZTUwNjYy
ODUyNTkzMmRlMGMzY2I2MjMzLi5lYjRlZjY1ODUzOTdjMzM3OWZiMDRmNDdiMjEwOWY4MDA5NTY4
OGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3By
aXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3ByaXZh
dGUuaApAQCAtOTksNiArOTksMTAgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIE93blB0cjxXZWJLaXQ6OkFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0PiBhY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDsK
ICNlbmRpZgorCisjaWYgRU5BQkxFKElDT05EQVRBQkFTRSkKKyAgICBndWxvbmcgaWNvbkxvYWRl
ZEhhbmRsZXI7CisjZW5kaWYKIH07CiAKIHZvaWQgd2Via2l0X3dlYl92aWV3X25vdGlmeV9yZWFk
eShXZWJLaXRXZWJWaWV3Kik7CkBAIC0xMTgsNiArMTIyLDExIEBAIEd0a01lbnUqIHdlYmtpdF93
ZWJfdmlld19nZXRfY29udGV4dF9tZW51KFdlYktpdFdlYlZpZXcqKTsKIAogdm9pZCB3ZWJWaWV3
RW50ZXJGdWxsc2NyZWVuKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYkNvcmU6Ok5vZGUqKTsK
IHZvaWQgd2ViVmlld0V4aXRGdWxsc2NyZWVuKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpOworCisj
aWYgRU5BQkxFKElDT05EQVRBQkFTRSkKK3ZvaWQgd2Via2l0V2ViVmlld1JlZ2lzdGVyRm9ySWNv
bk5vdGlmaWNhdGlvbihXZWJLaXRXZWJWaWV3KiwgYm9vbCBzaG91bGRSZWdpc3Rlcik7Cit2b2lk
IHdlYmtpdFdlYlZpZXdJY29uTG9hZGVkKFdlYktpdEZhdmljb25EYXRhYmFzZSosIGNvbnN0IGNo
YXIqIGZyYW1lVVJJLCBXZWJLaXRXZWJWaWV3Kik7CisjZW5kaWYKIH0KIAogI2VuZGlmCmRpZmYg
LS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTU4YzQ0YTEx
NGU4YzNjOGI1Y2M3YjgyMTdjODcwMzA2YjUwZjFiMy4uNDFiYTg3NmJjYzM1ZjMwZjJlNWY2MTM5
OWVkNDE1ZTEyNzA1ZWQxOCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTAzLTAyICBDYXJsb3MgR2FyY2lhIENh
bXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4gYW5kIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmls
bGFyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gV2ViS2l0SWNvbkRhdGFiYXNlIGRvZXNu
J3Qga2VlcCBpY29ucyBjYWNoZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU2MjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGZhdmljb25zIGluIEd0a0xhdW5jaGVyLgorCisg
ICAgICAgICogR3RrTGF1bmNoZXIvbWFpbi5jOgorICAgICAgICAoYWN0aXZhdGVVcmlFbnRyeUNi
KToKKyAgICAgICAgKGljb25Mb2FkZWRDYik6CisgICAgICAgIChjcmVhdGVCcm93c2VyKToKKwog
MjAxMi0wMy0xMyAgVGhpYWdvIE1hcmNvcyBQLiBTYW50b3MgIDx0aGlhZ28uc2FudG9zQGludGVs
LmNvbT4KIAogICAgICAgICBbRUZMXVtEUlRdIEV4cG9zZSB3aW5kb3cuaW50ZXJuYWxzIG9iamVj
dApkaWZmIC0tZ2l0IGEvVG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jIGIvVG9vbHMvR3RrTGF1bmNo
ZXIvbWFpbi5jCmluZGV4IDU4NzQwNWZjNDIzNGYxZDdiZThhNzNjOTEzZWRlMmJkYmNlNGI3MTEu
LjJhMTQ4YjM5NGE4OGEzODZlMTk5NzE3YWZhYzM1ODJiZmJiODUwMmQgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0d0a0xhdW5jaGVyL21haW4uYworKysgYi9Ub29scy9HdGtMYXVuY2hlci9tYWluLmMKQEAg
LTQwLDYgKzQwLDcgQEAgc3RhdGljIHZvaWQgYWN0aXZhdGVVcmlFbnRyeUNiKEd0a1dpZGdldCog
ZW50cnksIGdwb2ludGVyIGRhdGEpCiAgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldyA9IGdfb2Jq
ZWN0X2dldF9kYXRhKEdfT0JKRUNUKGVudHJ5KSwgIndlYi12aWV3Iik7CiAgICAgY29uc3QgZ2No
YXIqIHVyaSA9IGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5UUlkoZW50cnkpKTsKICAgICBnX2Fz
c2VydCh1cmkpOworICAgIGd0a19lbnRyeV9zZXRfaWNvbl9mcm9tX3BpeGJ1ZihHVEtfRU5UUlko
ZW50cnkpLCBHVEtfRU5UUllfSUNPTl9QUklNQVJZLCAwKTsKICAgICB3ZWJraXRfd2ViX3ZpZXdf
bG9hZF91cmkod2ViVmlldywgdXJpKTsKIH0KIApAQCAtMTk1LDE2ICsxOTYsMzIgQEAgc3RhdGlj
IGdib29sZWFuIHdlYlZpZXdMZWF2aW5nRnVsbFNjcmVlbihXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3
LCBHT2JqZWN0ICplbGVtZW4KICAgICByZXR1cm4gRkFMU0U7CiB9CiAKK3N0YXRpYyB2b2lkIGlj
b25Mb2FkZWRDYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiBpY29uVVJJLCBH
dGtXaWRnZXQqIHVyaUVudHJ5KQoreworICAgIEdka1BpeGJ1ZiAqaWNvbiA9IHdlYmtpdF93ZWJf
dmlld190cnlfZ2V0X2Zhdmljb25fcGl4YnVmKHdlYlZpZXcsIDE2LCAxNik7CisgICAgaWYgKCFp
Y29uKQorICAgICAgICByZXR1cm47CisKKyAgICBndGtfZW50cnlfc2V0X2ljb25fZnJvbV9waXhi
dWYoR1RLX0VOVFJZKHVyaUVudHJ5KSwgR1RLX0VOVFJZX0lDT05fUFJJTUFSWSwgaWNvbik7Cisg
ICAgZ19vYmplY3RfdW5yZWYoaWNvbik7Cit9CisKIHN0YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZUJy
b3dzZXIoR3RrV2lkZ2V0KiB3aW5kb3csIEd0a1dpZGdldCogdXJpRW50cnksIEd0a1dpZGdldCog
c3RhdHVzYmFyLCBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHdGtXaWRnZXQqIHZib3gpCiB7Cisg
ICAgY2hhciAqaWNvbkRhdGFiYXNlUGF0aDsKICAgICBHdGtXaWRnZXQgKnNjcm9sbGVkV2luZG93
ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7CiAgICAgZ3RrX3Njcm9sbGVk
X3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRXaW5kb3cpLCBH
VEtfUE9MSUNZX0FVVE9NQVRJQywgR1RLX1BPTElDWV9BVVRPTUFUSUMpOwogCiAgICAgZ3RrX2Nv
bnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZFdpbmRvdyksIEdUS19XSURHRVQod2Vi
VmlldykpOwogCisgICAgaWNvbkRhdGFiYXNlUGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRf
dXNlcl9kYXRhX2RpcigpLCAid2Via2l0IiwgImljb25kYXRhYmFzZSIsIE5VTEwpOworICAgIHdl
YmtpdF9mYXZpY29uX2RhdGFiYXNlX3NldF9wYXRoKHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFz
ZSgpLCBpY29uRGF0YWJhc2VQYXRoKTsKKyAgICBnX2ZyZWUoaWNvbkRhdGFiYXNlUGF0aCk7CisK
ICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6OnRpdGxlIiwgR19DQUxMQkFD
Syhub3RpZnlUaXRsZUNiKSwgd2luZG93KTsKICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcs
ICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhub3RpZnlMb2FkU3RhdHVzQ2IpLCB1
cmlFbnRyeSk7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojpwcm9ncmVz
cyIsIEdfQ0FMTEJBQ0sobm90aWZ5UHJvZ3Jlc3NDYiksIHdpbmRvdyk7CisgICAgZ19zaWduYWxf
Y29ubmVjdCh3ZWJWaWV3LCAiaWNvbi1sb2FkZWQiLCBHX0NBTExCQUNLKGljb25Mb2FkZWRDYiks
IHVyaUVudHJ5KTsKICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJob3ZlcmluZy1vdmVy
LWxpbmsiLCBHX0NBTExCQUNLKGxpbmtIb3ZlckNiKSwgc3RhdHVzYmFyKTsKICAgICBnX3NpZ25h
bF9jb25uZWN0KHdlYlZpZXcsICJjcmVhdGUtd2ViLXZpZXciLCBHX0NBTExCQUNLKGNyZWF0ZVdl
YlZpZXdDYiksIHdpbmRvdyk7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAid2ViLXZp
ZXctcmVhZHkiLCBHX0NBTExCQUNLKHdlYlZpZXdSZWFkeUNiKSwgd2luZG93KTsK
</data>
<flag name="review"
          id="135334"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
    <flag name="commit-queue"
          id="135345"
          type_id="3"
          status="-"
          setter="gustavo.noronha"
    />
          </attachment>
      

    </bug>

</bugzilla>