<?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>57068</bug_id>
          
          <creation_ts>2011-03-24 17:15:12 -0700</creation_ts>
          <short_desc>[GTK] [WebKit2] Implement a basic WebKitTestRunner</short_desc>
          <delta_ts>2011-05-31 16:35:41 -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>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>56866</dependson>
    
    <dependson>57067</dependson>
          <blocked>58242</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>alex</cc>
    
    <cc>amruthraj</cc>
    
    <cc>cgarcia</cc>
    
    <cc>ravi.kasibhatla</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>373218</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-24 17:15:12 -0700</bug_when>
    <thetext>WebKitTestRunner is required to run tests on WebKit2. We should work much more on WebKit2 without it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376765</commentid>
    <comment_count>1</comment_count>
      <attachid>87634</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-30 16:08:14 -0700</bug_when>
    <thetext>Created attachment 87634
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382788</commentid>
    <comment_count>2</comment_count>
      <attachid>88932</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-09 13:38:23 -0700</bug_when>
    <thetext>Created attachment 88932
Patch for ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382789</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-09 13:40:50 -0700</bug_when>
    <thetext>Attachment 88932 did not pass style-queue:

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

Tools/WebKitTestRunner/gtk/main.cpp:28:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Tools/WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:51:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 2 in 20 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>382878</commentid>
    <comment_count>4</comment_count>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-04-10 05:58:04 -0700</bug_when>
    <thetext>Adding myself to the cc list</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383053</commentid>
    <comment_count>5</comment_count>
      <attachid>88932</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-04-11 00:00:27 -0700</bug_when>
    <thetext>Comment on attachment 88932
Patch for ToT

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

&gt; Tools/WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:52
&gt; +    g_object_set(settings, &quot;gtk-xft-rgba&quot;, &quot;none&quot;, NULL);

While calling g_object_set() again? you can just add &quot;gtk-xft-rgba&quot;, &quot;none&quot; to the first g_object_set call.

&gt; Tools/WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:176
&gt; +    inititializeFontConfigSetting();

isn&apos;t this function X11 specific?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383208</commentid>
    <comment_count>6</comment_count>
      <attachid>88932</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-11 09:22:01 -0700</bug_when>
    <thetext>Comment on attachment 88932
Patch for ToT

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

&gt;&gt; Tools/WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:52
&gt;&gt; +    g_object_set(settings, &quot;gtk-xft-rgba&quot;, &quot;none&quot;, NULL);
&gt; 
&gt; While calling g_object_set() again? you can just add &quot;gtk-xft-rgba&quot;, &quot;none&quot; to the first g_object_set call.

Ah, right, this should move up into the previous block. For a particular test it needs to move, but I&apos;m not sure if it&apos;s possible to get the test name at this point in the file.

&gt;&gt; Tools/WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:176
&gt;&gt; +    inititializeFontConfigSetting();
&gt; 
&gt; isn&apos;t this function X11 specific?

It&apos;s specific to ports that use FontConfig. As far as I know we are phasing out non-FontConfig builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383317</commentid>
    <comment_count>7</comment_count>
      <attachid>89039</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-11 11:41:11 -0700</bug_when>
    <thetext>Created attachment 89039
Patch taking Carlos&apos; suggestion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383321</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-11 11:44:14 -0700</bug_when>
    <thetext>Attachment 89039 did not pass style-queue:

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

Tools/WebKitTestRunner/gtk/main.cpp:28:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Tools/WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:52:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 2 in 20 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>383808</commentid>
    <comment_count>9</comment_count>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-04-11 21:45:34 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=88932&amp;action=review

Great Patch :)

&gt; Tools/WebKitTestRunner/GNUmakefile.am:24
&gt; +	-include Tools/WebKitTestRunner/WebKitTestRunnerPrefix.h \

Are these Prefix headers now required to be included in makefiles since we are including config.h anyways in all files as first header?

&gt; Tools/WebKitTestRunner/GNUmakefile.am:44
&gt; +	$(WINMM_LIBS)

Why do we require WINMM libs for GTK port?

&gt; Tools/WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:114
&gt; +    };

Instead of listing all fonts, can we use the env variable WEBKIT_TEST_FONTS, which is used in DRT as well as other WebKit2 ports? It simplifies the code here a lot.

&gt; Tools/WebKitTestRunner/InjectedBundle/gtk/LayoutTestControllerGtk.cpp:35
&gt; +static gboolean waitToDumpWatchdogTimerIntervalCallback(gpointer)

Can we name it as waitToDumpWatchdogTimerFired() itself?

&gt; Tools/WebKitTestRunner/InjectedBundle/gtk/LayoutTestControllerGtk.cpp:38
&gt; +    return TRUE;

Shouldn&apos;t this be FALSE? Who will cancel it since it will be firing continuously?

&gt; Tools/WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:43
&gt; +    gtk_widget_size_allocate(m_window, &amp;size);

Why are we not using gtk_widget_set_size_request() since it does both window_resize &amp; size_allocate?

&gt; Tools/WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:60
&gt; +

Ditto.

&gt; Tools/WebKitTestRunner/gtk/TestControllerGtk.cpp:65
&gt; +    cancelTimeout();

Shouldn&apos;t the cancelTimeout() here based on the bool condition sent in platformRunUntil()? All other ports run until the bool goes false on which they cancel the timer. Isn&apos;t it so?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383960</commentid>
    <comment_count>10</comment_count>
      <attachid>89039</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-04-12 06:03:05 -0700</bug_when>
    <thetext>Comment on attachment 89039
Patch taking Carlos&apos; suggestion


Looks good, still checking what happens and why it stalls when starting to test, but somme comments already.

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

&gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPageGtk.cpp:-124
&gt; -bool WebPage::platformCanHandleRequest(const WebCore::ResourceRequest&amp;)
&gt; -{
&gt; -    // FIXME: Implement
&gt; -    return true;
&gt; -}
&gt; -

Why we should remove this function?

&gt; Tools/WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:79
&gt; +    gint depth;
&gt; +    gdk_window_get_geometry(gtk_widget_get_window(GTK_WIDGET(m_window)),
&gt; +                            &amp;geometry.x, &amp;geometry.y, &amp;geometry.width, &amp;geometry.height, &amp;depth);

Apparently gdk_window_get_geomtry does not include depth as a parameter in gtk+3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384554</commentid>
    <comment_count>11</comment_count>
      <attachid>89315</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-12 17:32:31 -0700</bug_when>
    <thetext>Created attachment 89315
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384557</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-12 17:35:12 -0700</bug_when>
    <thetext>Attachment 89315 did not pass style-queue:

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

Tools/WebKitTestRunner/gtk/main.cpp:28:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Tools/WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:52:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 2 in 20 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>384565</commentid>
    <comment_count>13</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-12 17:41:37 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88932&amp;action=review

Thanks for the comments!

&gt; &gt; Tools/WebKitTestRunner/GNUmakefile.am:24
&gt; &gt; +	-include Tools/WebKitTestRunner/WebKitTestRunnerPrefix.h \
&gt; Are these Prefix headers now required to be included in makefiles since we are including config.h anyways in all files as first header?

I think it&apos;s good to set up the prefix header even if it isn&apos;t strictly necessary now. It might be useful later and we want the ports to be as similar as possible.

&gt; &gt; Tools/WebKitTestRunner/GNUmakefile.am:44
&gt; &gt; +	$(WINMM_LIBS)
&gt; Why do we require WINMM libs for GTK port?

This is required for GTK+ builds on Windows. Perhaps this could be moved to the library itself, but that should happen in another patch.

&gt; &gt; Tools/WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:114
&gt; &gt; +    };
&gt; Instead of listing all fonts, can we use the env variable WEBKIT_TEST_FONTS, which is used in DRT as well as other WebKit2 ports? It simplifies the code here a lot.

It&apos;s possible that we could move some of this to a helper function and compile it into both the DRT and the WKTR, but some of it must still be different. I&apos;d prefer to have as much of the logic be in the harness rather than the harness-script (old-run-webkit-tests), since we have to write it twice (for new-run-webkit-tests as well).

&gt; &gt; Tools/WebKitTestRunner/InjectedBundle/gtk/LayoutTestControllerGtk.cpp:35
&gt; &gt; +static gboolean waitToDumpWatchdogTimerIntervalCallback(gpointer)
&gt; Can we name it as waitToDumpWatchdogTimerFired() itself?

I&apos;ve renamed this to waitToDumpWatchdogTimerCallback to simplify things. I prefer having the &quot;Callback&quot; suffix on GSignal callbacks to be more precise. :)

&gt; &gt; Tools/WebKitTestRunner/InjectedBundle/gtk/LayoutTestControllerGtk.cpp:38
&gt; &gt; +    return TRUE;
&gt; Shouldn&apos;t this be FALSE? Who will cancel it since it will be firing continuously?

It should! Fixed.

&gt; &gt; Tools/WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:43
&gt; &gt; +    gtk_widget_size_allocate(m_window, &amp;size);
&gt; Why are we not using gtk_widget_set_size_request() since it does both window_resize &amp; size_allocate?

The documentation for gtk_widget_set_size_request says &quot;Sets the minimum size of a widget; that is, the widget&apos;s size request will be width by height. &quot;

&gt; &gt; Tools/WebKitTestRunner/gtk/TestControllerGtk.cpp:65
&gt; &gt; +    cancelTimeout();
&gt; Shouldn&apos;t the cancelTimeout() here based on the bool condition sent in platformRunUntil()? All other ports run until the bool goes false on which they cancel the timer. Isn&apos;t it so?

The Qt port ignores the boolean parameter as well. I think it&apos;s just a nicety for ports that work more like the Mac port where the main loop runs directly in the platformRunUntil method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384567</commentid>
    <comment_count>14</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-12 17:42:33 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 89039 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=89039&amp;action=review

Thanks for your comments!

&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPageGtk.cpp:-124
&gt; &gt; -bool WebPage::platformCanHandleRequest(const WebCore::ResourceRequest&amp;)
&gt; &gt; -{
&gt; &gt; -    // FIXME: Implement
&gt; &gt; -    return true;
&gt; &gt; -}
&gt; &gt; -
&gt; 
&gt; Why we should remove this function?

Sorry, this snuck in from a previous version of the patch. I&apos;ve removed this change.

&gt; 
&gt; &gt; Tools/WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:79
&gt; &gt; +    gint depth;
&gt; &gt; +    gdk_window_get_geometry(gtk_widget_get_window(GTK_WIDGET(m_window)),
&gt; &gt; +                            &amp;geometry.x, &amp;geometry.y, &amp;geometry.width, &amp;geometry.height, &amp;depth);
&gt; 
&gt; Apparently gdk_window_get_geomtry does not include depth as a parameter in gtk+3.

I&apos;ve #ifdeffed this section for GTK+ 3.x. Nice find.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389084</commentid>
    <comment_count>15</comment_count>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-04-19 23:41:49 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=89315&amp;action=review

Looks all set for r+. Just couple of minor comments.

&gt; Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h:61
&gt; +typedef ::GModule* PlatformBundle;

Can&apos;t we define both the typedef here itself instead of 2 separate blocks?

&gt; Tools/WebKitTestRunner/gtk/TestInvocationGtk.cpp:32
&gt; +{

I guess the argument should be WKImageRef. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389372</commentid>
    <comment_count>16</comment_count>
      <attachid>90371</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-20 11:23:00 -0700</bug_when>
    <thetext>Created attachment 90371
Patch using WKImageRef</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389373</commentid>
    <comment_count>17</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-20 11:24:07 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=89315&amp;action=review

&gt; &gt; Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h:61
&gt; &gt; +typedef ::GModule* PlatformBundle;
&gt; Can&apos;t we define both the typedef here itself instead of 2 separate blocks?

I attempted this, but GCC was unhappy with it.

&gt; &gt; Tools/WebKitTestRunner/gtk/TestInvocationGtk.cpp:32
&gt; &gt; +{
&gt; I guess the argument should be WKImageRef. :)

Fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389376</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-20 11:25:35 -0700</bug_when>
    <thetext>Attachment 90371 did not pass style-queue:

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

Tools/WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:52:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 1 in 20 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>389387</commentid>
    <comment_count>19</comment_count>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-04-20 11:34:22 -0700</bug_when>
    <thetext>r+ for me. :)
(In reply to comment #17)
&gt; (In reply to comment #15)
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=89315&amp;action=review
&gt; 
&gt; &gt; &gt; Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h:61
&gt; &gt; &gt; +typedef ::GModule* PlatformBundle;
&gt; &gt; Can&apos;t we define both the typedef here itself instead of 2 separate blocks?
&gt; 
&gt; I attempted this, but GCC was unhappy with it.
&gt; 
&gt; &gt; &gt; Tools/WebKitTestRunner/gtk/TestInvocationGtk.cpp:32
&gt; &gt; &gt; +{
&gt; &gt; I guess the argument should be WKImageRef. :)
&gt; 
&gt; Fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393073</commentid>
    <comment_count>20</comment_count>
      <attachid>90371</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-04-26 16:52:04 -0700</bug_when>
    <thetext>Comment on attachment 90371
Patch using WKImageRef

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

&gt; Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h:61
&gt; -typedef void* PlatformBundle;
&gt; +typedef ::GModule* PlatformBundle;

I&apos;m surprised the :: is needed.

&gt; Source/WebKit2/WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp:41
&gt; +    m_platformBundle = g_module_open(fileSystemRepresentation(m_path).data(), G_MODULE_BIND_LOCAL);

Do we need to close this ever?

&gt; Tools/Scripts/old-run-webkit-tests:1710
&gt; +    } elsif (isGtk()) {
&gt; +        push @extraPlatforms, &quot;gtk&quot; if $platform eq &quot;gtk-wk2&quot;;
&gt;      }

This doesn&apos;t look right. You should modify buildPlatformHierarchy instead, similar to what is done for win-wk2 and mac-wk2.

Do you want to modify readSkippedFiles, too, to fall back to mac-wk2 like win-wk2 and qt-wk2 do?

&gt; Tools/Scripts/run-launcher:73
&gt;      if (isGtk()) {
&gt; -        $launcherPath = catdir($launcherPath, &quot;Programs&quot;, &quot;GtkLauncher&quot;);
&gt; +        if (isWK2()) {
&gt; +            $launcherPath = catdir($launcherPath, &quot;Programs&quot;, &quot;MiniBrowser&quot;);
&gt; +        } else {
&gt; +            $launcherPath = catdir($launcherPath, &quot;Programs&quot;, &quot;GtkLauncher&quot;);
&gt; +        }
&gt;      }

This seems somewhat orthogonal.

&gt; Tools/WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:43
&gt; +{
&gt; +
&gt; +    GtkSettings* settings = gtk_settings_get_default();

Extra newline in here.

&gt; Tools/WebKitTestRunner/gtk/TestControllerGtk.cpp:80
&gt; +    const char* bundlePath = g_getenv(&quot;TEST_RUNNER_INJECTED_BUNDLE_FILENAME&quot;);
&gt; +    if (!bundlePath) {
&gt; +        fprintf(stderr, &quot;TEST_RUNNER_INJECTED_BUNDLE_FILENAME environment variable not found\n&quot;);
&gt; +        exit(0);
&gt; +    }
&gt; +
&gt; +    gsize bytesWritten;
&gt; +    GOwnPtr&lt;char&gt; utf8BundlePath(g_filename_to_utf8(bundlePath, -1, 0, &amp;bytesWritten, 0));
&gt; +    m_injectedBundlePath = WKStringCreateWithUTF8CString(utf8BundlePath.get());

Is it not possible to find the injected bundle using a path relative to the test runner?

I think you&apos;re leaking m_injectedBundlePath.

&gt; Tools/WebKitTestRunner/gtk/TestControllerGtk.cpp:86
&gt; +    // This is called after initializeInjectedBundlePath.
&gt; +    m_testPluginDirectory = m_injectedBundlePath;

You could assert that m_injectedBundlePath is initialized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393737</commentid>
    <comment_count>21</comment_count>
      <attachid>91330</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-27 13:12:21 -0700</bug_when>
    <thetext>Created attachment 91330
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393740</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-27 13:15:22 -0700</bug_when>
    <thetext>Attachment 91330 did not pass style-queue:

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

Tools/WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:51:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 1 in 19 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>393741</commentid>
    <comment_count>23</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-27 13:20:25 -0700</bug_when>
    <thetext>(In reply to comment #20)

Thank you very much for the review! I&apos;ve attached an updated patch.

&gt; (From update of attachment 90371 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=90371&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h:61
&gt; &gt; -typedef void* PlatformBundle;
&gt; &gt; +typedef ::GModule* PlatformBundle;
&gt; 
&gt; I&apos;m surprised the :: is needed.

Sadly, it is. Attempts to remove it have been unsuccessful. 

&gt; &gt; Source/WebKit2/WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp:41
&gt; &gt; +    m_platformBundle = g_module_open(fileSystemRepresentation(m_path).data(), G_MODULE_BIND_LOCAL);
&gt; Do we need to close this ever?

Closing the module will make the symbols unavailable. It stays open much like the Mac implementation. It seems that the lifetime of InjectedBundle is for the extent of the WebProcess?

&gt; &gt; Tools/Scripts/old-run-webkit-tests:1710
&gt; &gt; +    } elsif (isGtk()) {
&gt; &gt; +        push @extraPlatforms, &quot;gtk&quot; if $platform eq &quot;gtk-wk2&quot;;
&gt; &gt;      }
&gt; 
&gt; This doesn&apos;t look right. You should modify buildPlatformHierarchy instead, similar to what is done for win-wk2 and mac-wk2.

Fixed!

&gt; Do you want to modify readSkippedFiles, too, to fall back to mac-wk2 like win-wk2 and qt-wk2 do?

I think we are still exploring how our test situation looks.  Hopefully we can share the skipped list in the future like the Qt port.

&gt; &gt; Tools/Scripts/run-launcher:73
&gt; &gt;      if (isGtk()) {
&gt; &gt; -        $launcherPath = catdir($launcherPath, &quot;Programs&quot;, &quot;GtkLauncher&quot;);
&gt; &gt; +        if (isWK2()) {
&gt; &gt; +            $launcherPath = catdir($launcherPath, &quot;Programs&quot;, &quot;MiniBrowser&quot;);
&gt; &gt; +        } else {
&gt; &gt; +            $launcherPath = catdir($launcherPath, &quot;Programs&quot;, &quot;GtkLauncher&quot;);
&gt; &gt; +        }
&gt; &gt;      }
&gt; This seems somewhat orthogonal.

I added because the old-run-webkit-tests script executes run-launcher to show the results. Right now this produces an error because we build WebKit1 separately. In the future we&apos;d like to build them together, so maybe this change is not needed in the end. It can certainly be in a separate patch though. I&apos;ve removed it.

&gt; &gt; Tools/WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:43
&gt; &gt; +{
&gt; &gt; +
&gt; &gt; +    GtkSettings* settings = gtk_settings_get_default();
&gt; Extra newline in here.

Fixed!

&gt; &gt; Tools/WebKitTestRunner/gtk/TestControllerGtk.cpp:80
&gt; &gt; +    const char* bundlePath = g_getenv(&quot;TEST_RUNNER_INJECTED_BUNDLE_FILENAME&quot;);
&gt; &gt; +    if (!bundlePath) {
&gt; &gt; +        fprintf(stderr, &quot;TEST_RUNNER_INJECTED_BUNDLE_FILENAME environment variable not found\n&quot;);
&gt; &gt; +        exit(0);
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    gsize bytesWritten;
&gt; &gt; +    GOwnPtr&lt;char&gt; utf8BundlePath(g_filename_to_utf8(bundlePath, -1, 0, &amp;bytesWritten, 0));
&gt; &gt; +    m_injectedBundlePath = WKStringCreateWithUTF8CString(utf8BundlePath.get());
&gt; 
&gt; Is it not possible to find the injected bundle using a path relative to the test runner?

It&apos;s actually non-trivial to find the binary path in a cross-platform way. We&apos;ve punted on this, much like Qt.

&gt; I think you&apos;re leaking m_injectedBundlePath.

You&apos;re right! I&apos;ve fixed it in my patch and I will try to write a patch to fix the Qt code.

&gt; &gt; Tools/WebKitTestRunner/gtk/TestControllerGtk.cpp:86
&gt; &gt; +    // This is called after initializeInjectedBundlePath.
&gt; &gt; +    m_testPluginDirectory = m_injectedBundlePath;
&gt; You could assert that m_injectedBundlePath is initialized.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412789</commentid>
    <comment_count>24</comment_count>
      <attachid>91330</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-05-31 12:31:51 -0700</bug_when>
    <thetext>Comment on attachment 91330
Patch

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

&gt; Tools/Scripts/webkitdirs.pm:636
&gt; +        foreach (@libraries) {
&gt; +            my $library = &quot;$configurationProductDir/.libs/&quot; . $_  . $extension;

I think it&apos;s slightly more readable to use an explicit variable instead of the implicit $_. &quot;foreach my $libraryName (@libraries) {&quot;

&gt; Tools/Scripts/webkitdirs.pm:639
&gt; +            if (-e $library) {
&gt; +                return $library;
&gt; +            }

I&apos;d write this as a one-liner: return $library if -e $library;

&gt; Tools/Scripts/webkitdirs.pm:1996
&gt; +        return system &quot;$productDir/Programs/WebKitTestRunner&quot;, @ARGV;

This won&apos;t do the right thing if $productDir contains a space and @ARGV is empty. (The shell will split $productDir on the space and try to execute a bogus path instead of WTR.) One way to avoid that is:

my @args = (&quot;$productDir/Programs/WebKitTestRunner&quot;, @ARGV);
return system { $args[0] } @args;

&gt; Tools/WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:121
&gt; +        for (size_t path = 0; path &lt; 2; path++) {
&gt; +
&gt; +            if (g_file_test(fontPaths[font][path], G_FILE_TEST_EXISTS)) {

Extra newline in here.

You could use an early continue instead of nesting code inside this if.

&gt; Tools/WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:133
&gt; +        if (!found)
&gt; +            g_error(&quot;Could not find font at %s. Either install this font or file a bug &quot;
&gt; +                    &quot;at http://bugs.webkit.org if it is installed in another location.&quot;,
&gt; +                    fontPaths[font][0]);

This needs braces because it is multiple lines (even though it&apos;s only a single statement).

&gt; Tools/WebKitTestRunner/InjectedBundle/gtk/InjectedBundleGtk.cpp:39
&gt; +}
&gt; +
&gt; +
&gt; +void InjectedBundle::platformInitialize(WKTypeRef)

Extra newline in here.

&gt; Tools/WebKitTestRunner/InjectedBundle/gtk/LayoutTestControllerGtk.cpp:66
&gt; +JSRetainPtr&lt;JSStringRef&gt; LayoutTestController::pathToLocalResource(JSStringRef url)
&gt; +{
&gt; +    return JSStringRetain(url); 
&gt; +}

This causes a leak. If you remove the JSStringRetain call you should be fine. (JSRetainPtr does it for you.)

&gt; Tools/WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:52
&gt; +    gtk_widget_destroy(m_window);

Will this destroy m_view, too?

&gt; Tools/WebKitTestRunner/gtk/main.cpp:33
&gt; +    WTR::TestController controller(argc, const_cast&lt;const char**&gt;(argv));

I&apos;m surprised the const_cast is required.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412981</commentid>
    <comment_count>25</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-05-31 16:34:56 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 91330 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=91330&amp;action=review

Thanks for the review!

&gt; 
&gt; &gt; Tools/Scripts/webkitdirs.pm:636
&gt; &gt; +        foreach (@libraries) {
&gt; &gt; +            my $library = &quot;$configurationProductDir/.libs/&quot; . $_  . $extension;
&gt; 
&gt; I think it&apos;s slightly more readable to use an explicit variable instead of the implicit $_. &quot;foreach my $libraryName (@libraries) {&quot;

Okay. I&apos;ve fixed this.

&gt; 
&gt; &gt; Tools/Scripts/webkitdirs.pm:639
&gt; &gt; +            if (-e $library) {
&gt; &gt; +                return $library;
&gt; &gt; +            }
&gt; 
&gt; I&apos;d write this as a one-liner: return $library if -e $library;

Fixed.

&gt; 
&gt; &gt; Tools/Scripts/webkitdirs.pm:1996
&gt; &gt; +        return system &quot;$productDir/Programs/WebKitTestRunner&quot;, @ARGV;
&gt; 
&gt; This won&apos;t do the right thing if $productDir contains a space and @ARGV is empty. (The shell will split $productDir on the space and try to execute a bogus path instead of WTR.) One way to avoid that is:
&gt; 
&gt; my @args = (&quot;$productDir/Programs/WebKitTestRunner&quot;, @ARGV);
&gt; return system { $args[0] } @args;

Fixed. Note that this bug exists for the Mac port too.
 
&gt; &gt; Tools/WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:121
&gt; &gt; +        for (size_t path = 0; path &lt; 2; path++) {
&gt; &gt; +
&gt; &gt; +            if (g_file_test(fontPaths[font][path], G_FILE_TEST_EXISTS)) {
&gt; 
&gt; Extra newline in here.
&gt; 
&gt; You could use an early continue instead of nesting code inside this if.

Fixed.

&gt; &gt; Tools/WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:133
&gt; &gt; +        if (!found)
&gt; &gt; +            g_error(&quot;Could not find font at %s. Either install this font or file a bug &quot;
&gt; &gt; +                    &quot;at http://bugs.webkit.org if it is installed in another location.&quot;,
&gt; &gt; +                    fontPaths[font][0]);
&gt; 
&gt; This needs braces because it is multiple lines (even though it&apos;s only a single statement).

Fixed.

&gt; &gt; Tools/WebKitTestRunner/InjectedBundle/gtk/InjectedBundleGtk.cpp:39
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +
&gt; &gt; +void InjectedBundle::platformInitialize(WKTypeRef)
&gt; 
&gt; Extra newline in here.

Fixed.

&gt; &gt; Tools/WebKitTestRunner/InjectedBundle/gtk/LayoutTestControllerGtk.cpp:66
&gt; &gt; +JSRetainPtr&lt;JSStringRef&gt; LayoutTestController::pathToLocalResource(JSStringRef url)
&gt; &gt; +{
&gt; &gt; +    return JSStringRetain(url); 
&gt; &gt; +}
&gt; 
&gt; This causes a leak. If you remove the JSStringRetain call you should be fine. (JSRetainPtr does it for you.)

Fixed. Nice catch.

&gt; &gt; Tools/WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:52
&gt; &gt; +    gtk_widget_destroy(m_window);
&gt; 
&gt; Will this destroy m_view, too?

Yep!

&gt; &gt; Tools/WebKitTestRunner/gtk/main.cpp:33
&gt; &gt; +    WTR::TestController controller(argc, const_cast&lt;const char**&gt;(argv));
&gt; 
&gt; I&apos;m surprised the const_cast is required.

Yep, the compile fails without it. :(

../../Tools/WebKitTestRunner/gtk/main.cpp: In function ‘int main(int, char**)’:
../../Tools/WebKitTestRunner/gtk/main.cpp:34:46: error: invalid conversion from ‘char**’ to ‘const char**’
../../Tools/WebKitTestRunner/gtk/main.cpp:34:46: error:   initializing argument 2 of ‘WTR::TestController::TestController(int, const char**)’</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412982</commentid>
    <comment_count>26</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-05-31 16:35:41 -0700</bug_when>
    <thetext>Committed r87760: &lt;http://trac.webkit.org/changeset/87760&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87634</attachid>
            <date>2011-03-30 16:08:14 -0700</date>
            <delta_ts>2011-04-09 13:38:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57068-20110330160814.patch</filename>
            <type>text/plain</type>
            <size>43546</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODIzNzUKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCBlMmI3OGUyMjZhZGQwYmEyNWEyN2ZkM2Y4MzUxOTY3YTRkOWM1Yzk0Li5mYTQ3
YzIwZTZhMWFhZDM5NDRjN2EwOTQ3NjZmNTdmOTc0NzQwZDk4IDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDMtMzAgIE1hcnRpbiBS
b2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFtXZWJLaXQyXSBJbXBsZW1lbnQgYSBiYXNp
YyBXZWJLaXRUZXN0UnVubmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NzA2OAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZGVkIHJlZmVy
ZW5jZSB0byBXZWJLaXRUZXN0UnVubmVyIEdOVW1ha2VmaWxlLgorCiAyMDExLTAzLTA4ICBWYW1z
aGlrcmlzaG5hLlllbGxlbmtpICA8dmFtc2hpQG1vdG9yb2xhLmNvbT4gYW5kIEFsZWphbmRybyBH
LiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCmRpZmYgLS1naXQgYS9HTlVtYWtlZmlsZS5hbSBiL0dOVW1ha2VmaWxlLmFtCmlu
ZGV4IGFmNTQ4OTFhYTEyNjNhYTZiOTc5OTNmZjJjYTkwNWVhMDFjMWRkMDUuLjhjNTAyZjAzNDZj
YmVhMDUzNmFjYmIwNmQwZmNjYzY2NTg0NmQyMDQgMTAwNjQ0Ci0tLSBhL0dOVW1ha2VmaWxlLmFt
CisrKyBiL0dOVW1ha2VmaWxlLmFtCkBAIC0yMzAsNiArMjMwLDcgQEAgaW5jbHVkZSBTb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQogaWYgRU5BQkxFX1dFQktJVDIKIGluY2x1ZGUgU291cmNl
L1dlYktpdDIvR05VbWFrZWZpbGUuYW0KIGluY2x1ZGUgVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0dO
VW1ha2VmaWxlLmFtCitpbmNsdWRlIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvR05VbWFrZWZpbGUu
YW0KICMgW0dUS10gUmVmYWN0b3IgdGhlIHRyYW5zbGF0aW9ucyBub3cgdGhhdCB3ZSBoYXZlIHdl
YmtpdDIKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1MTUzCiBz
dGFtcC1wbzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwppbmRleCAwYjg1MTc5NDZhMDBmNTcyMTc3OTljMDkyNWNiNjljZGRh
OTNmYWYxLi44MGFkOWY5NmY0YjJkZmY5YjM0Y2U4MTBmMzExNmFhZTJjMzU2MjM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDMtMzAgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2Jp
bnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFtHVEtdIFtXZWJLaXQyXSBJbXBsZW1lbnQgYSBiYXNpYyBXZWJLaXRUZXN0UnVu
bmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzA2
OAorCisgICAgICAgIEFkZGVkIEluamVjdGVkQnVuZGxlIHN1cHBvcnQgZm9yIEdUSysuCisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmg6IEFkZGVk
IHR5cGVkZWYgZm9yIEdUSysuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9n
dGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwOiBBZGRlZCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAg
KFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OmxvYWQpOiAKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0
ZWRCdW5kbGU6OmFjdGl2YXRlTWFjRm9udEFzY2VudEhhY2spOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHA6IFJlbW92ZSB1bm5lY2Vzc2FyeSBtZXRob2Qg
ZGVmaW5pdGlvbi4KKwogMjAxMS0wMy0xMSAgIEFtcnV0aCBSYWogIDxhbXJ1dGhyYWpAbW90b3Jv
bGEuY29tPiBhbmQgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKaW5kZXgg
Njg5NjY2OWQ3MGVmMjM3OTNmMmY0MjExZDAxNDhhNmM5NzhlY2YxYi4uMjljNGIzYmYzMjAyMzQz
MTk0YWUyMzBlMDkyZTk4OTNlMGY4YWZiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaApAQCAtMzksNiAr
MzksMTAgQEAKICNpbmNsdWRlIDxRTGlicmFyeT4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oR1RL
KQordHlwZWRlZiBzdHJ1Y3QgX0dNb2R1bGUgR01vZHVsZTsKKyNlbmRpZgorCiBuYW1lc3BhY2Ug
Q29yZUlQQyB7CiAgICAgY2xhc3MgQXJndW1lbnREZWNvZGVyOwogICAgIGNsYXNzIENvbm5lY3Rp
b247CkBAIC01NCw3ICs1OCw3IEBAIHR5cGVkZWYgSE1PRFVMRSBQbGF0Zm9ybUJ1bmRsZTsKICNl
bGlmIFBMQVRGT1JNKFFUKQogdHlwZWRlZiBRTGlicmFyeSBQbGF0Zm9ybUJ1bmRsZTsKICNlbGlm
IFBMQVRGT1JNKEdUSykKLXR5cGVkZWYgdm9pZCogUGxhdGZvcm1CdW5kbGU7Cit0eXBlZGVmIDo6
R01vZHVsZSogUGxhdGZvcm1CdW5kbGU7CiAjZW5kaWYKIAogY2xhc3MgSW1tdXRhYmxlQXJyYXk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL2d0
ay9JbmplY3RlZEJ1bmRsZUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL2d0ay9JbmplY3RlZEJ1bmRsZUd0ay5jcHAKaW5kZXggYmJmMjRlNDNiN2RmZGQw
NjliOGQ4YTM2OGNhNDE5MjJjMDEyYzk1Ny4uY2ExYTQzZjhjZGM1YWVlN2ZlMjk2YzFjZjY3NmYy
ZDcxNzcxYmJhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvZ3RrL0luamVjdGVkQnVuZGxlR3RrLmNwcApAQCAtMjks
MjAgKzI5LDMzIEBACiAKICNpbmNsdWRlICJXS0J1bmRsZUFQSUNhc3QuaCIKICNpbmNsdWRlICJX
S0J1bmRsZUluaXRpYWxpemUuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKLWJvb2wgSW5qZWN0ZWRCdW5kbGU6OmxvYWQoQVBJT2JqZWN0KikKK2Jvb2wgSW5qZWN0ZWRC
dW5kbGU6OmxvYWQoQVBJT2JqZWN0KiBpbml0aWFsaXphdGlvblVzZXJEYXRhKQogewotICAgIHJl
dHVybiBmYWxzZTsKKyAgICBtX3BsYXRmb3JtQnVuZGxlID0gZ19tb2R1bGVfb3BlbihmaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24obV9wYXRoKS5kYXRhKCksIEdfTU9EVUxFX0JJTkRfTE9DQUwpOwor
ICAgIGlmICghbV9wbGF0Zm9ybUJ1bmRsZSkgeworICAgICAgICBnX3dhcm5pbmcoIkVycm9yIGxv
YWRpbmcgdGhlIGluamVjdGVkIGJ1bmRsZSAoJXMpOiAlcyIsIG1fcGF0aC51dGY4KCkuZGF0YSgp
LCBnX21vZHVsZV9lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IFdLQnVuZGxlSW5pdGlhbGl6ZUZ1bmN0aW9uUHRyIGluaXRpYWxpemVGdW5jdGlvbiA9IDA7Cisg
ICAgaWYgKCFnX21vZHVsZV9zeW1ib2wobV9wbGF0Zm9ybUJ1bmRsZSwgIldLQnVuZGxlSW5pdGlh
bGl6ZSIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmaW5pdGlhbGl6ZUZ1bmN0aW9uKSkgfHwg
IWluaXRpYWxpemVGdW5jdGlvbikgeworICAgICAgICBnX3dhcm5pbmcoIkVycm9yIGxvYWRpbmcg
V0tCdW5kbGVJbml0aWFsaXplIHN5bWJvbCBmcm9tIGluamVjdGVkIGJ1bmRsZS4iKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGluaXRpYWxpemVGdW5jdGlvbih0b0FQSSh0
aGlzKSwgdG9BUEkoaW5pdGlhbGl6YXRpb25Vc2VyRGF0YSkpOworICAgIHJldHVybiB0cnVlOwog
fQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjphY3RpdmF0ZU1hY0ZvbnRBc2NlbnRIYWNrKCkKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3Bw
CmluZGV4IDEwNzA4NWRhYjBjNmNkM2I1Nzc3ODZmYzlhNjc2MzliNTFlZWYzOWQuLjE0MjE5OGU4
ZWY4NTk2NmZiZjM4YzIxOTk4ZmViZmZiNmZiODEwNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcApAQCAtMjM2LDExICsy
MzYsNCBAQCBTdHJpbmcgV2ViUGFnZTo6Y2FjaGVkUmVzcG9uc2VNSU1FVHlwZUZvclVSTChjb25z
dCBXZWJDb3JlOjpLVVJMJikKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLWJvb2wgV2ViUGFn
ZTo6Y2FuSGFuZGxlUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKQotewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biB0cnVlOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmMzkxZWM3YzA1MmVjOGNkOGUzMDIxNTg5
ZDcwNmY0NWI3MTliODY1Li4yZjQ2MDgyYmUyZDkzYjdmNWYxZTUyMTA1NDZhMjhmMDhhMzA2NjU2
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjkgQEAKKzIwMTEtMDMtMzAgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtHVEtdIFtXZWJLaXQyXSBJbXBsZW1lbnQgYSBiYXNpYyBXZWJLaXRUZXN0UnVubmVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzA2OAorCisgICAg
ICAgIEFkZCBhbiBpbXBsZW1lbnRhdGlvbiBvZiBXZWJLaXRUZXN0UnVubmVyIGZvciBHVEsrLgor
CisgICAgICAgICogU2NyaXB0cy9idWlsZC13ZWJraXR0ZXN0cnVubmVyOiBBZGRlZCBrbm93bGVk
Z2Ugb2YgR1RLKyBUZXN0UnVubmVyLgorICAgICAgICAqIFNjcmlwdHMvb2xkLXJ1bi13ZWJraXQt
dGVzdHM6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvcnVuLWxhdW5jaGVyOiBEaXR0by4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdGRpcnMucG06IERpdHRvLgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvR05VbWFrZWZpbGUuYW06IEFkZGVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9BY3RpdmF0ZUZvbnRzR3RrLmNwcDogQWRk
ZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0
ZWRCdW5kbGVHdGsuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL2d0ay9JbmplY3RlZEJ1bmRsZUd0ay5jcHAuCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL2d0
ay9JbmplY3RlZEJ1bmRsZUd0ay5jcHAuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9QbGF0
Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2d0ay9QbGF0Zm9ybVdl
YlZpZXdHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0
Q29udHJvbGxlckd0ay5jcHA6IEFkZGVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvZ3Rr
L1Rlc3RJbnZvY2F0aW9uR3RrLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwLgorICAgICAgICAo
V1RSOjpUZXN0SW52b2NhdGlvbjo6ZHVtcFBpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQpOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvZ3RrL21haW4uY3BwOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL2d0ay9JbmplY3RlZEJ1bmRsZUd0
ay5jcHAuCisgICAgICAgIChtYWluKTogQWRkZWQuCisKIDIwMTEtMDMtMDggIFZhbXNoaWtyaXNo
bmEuWWVsbGVua2kgIDx2YW1zaGlAbW90b3JvbGEuY29tPiBhbmQgQWxlamFuZHJvIEcuIENhc3Ry
byAgPGFsZXhAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0dGVzdHJ1bm5lciBiL1Rv
b2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0dGVzdHJ1bm5lcgppbmRleCBlOTZkZDZhMzczNDc3ZTJk
ZGY0ODg0NTAxNWI4OWJiNGU0MzA3M2U1Li5mMDNjMTc5OWE3N2ZlZTMzZjgzZjlmODk1OGUxYWZh
YzA2ZTk1NGU4IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdHRlc3RydW5u
ZXIKKysrIGIvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXR0ZXN0cnVubmVyCkBAIC02Myw4ICs2
Myw4IEBAIGlmIChpc0FwcGxlTWFjV2ViS2l0KCkpIHsKICAgICAkcmVzdWx0ID0gYnVpbGRYQ29k
ZVByb2plY3QoIldlYktpdFRlc3RSdW5uZXIiLCAkY2xlYW4sIFhjb2RlT3B0aW9ucygpLCBAQVJH
Vik7CiB9IGVsc2lmIChpc0FwcGxlV2luV2ViS2l0KCkpIHsKICAgICAkcmVzdWx0ID0gYnVpbGRW
aXN1YWxTdHVkaW9Qcm9qZWN0KCJXZWJLaXRUZXN0UnVubmVyLnNsbiIsICRjbGVhbik7Ci19IGVs
c2lmIChpc1F0KCkpIHsKLSAgICAjIFF0IGJ1aWxkcyBldmVyeXRoaW5nIGluIG9uZSBzaG90LiBO
byBuZWVkIHRvIGJ1aWxkIGFueXRoaW5nIGhlcmUuCit9IGVsc2lmIChpc1F0KCkgfHwgaXNHdGso
KSkgeworICAgICMgUXQgYW5kIEdUSysgYnVpbGQgZXZlcnl0aGluZyBpbiBvbmUgc2hvdC4gTm8g
bmVlZCB0byBidWlsZCBhbnl0aGluZyBoZXJlLgogICAgICRyZXN1bHQgPSAwOwogfSBlbHNlIHsK
ICAgICBkaWUgIldlYktpdFRlc3RSdW5uZXIgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRm
b3JtLlxuIjsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHMg
Yi9Ub29scy9TY3JpcHRzL29sZC1ydW4td2Via2l0LXRlc3RzCmluZGV4IGZlOWJkZDA2YWVkNTFm
MTU4NjY5YWVlZDIwMGFjMjcxOThmMGRiY2UuLjkyNmUxZDBiOTJlZGJlMTNhNDZiYjU4ZGVjMDNj
NDcwZmFiYWJmMGQgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVz
dHMKKysrIGIvVG9vbHMvU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cwpAQCAtMzc5LDYgKzM3
OSw5IEBAIGlmICgkdXNlV2ViS2l0VGVzdFJ1bm5lcikgewogICAgIH0gZWxzaWYgKGlzUXQoKSkg
ewogICAgICAgICAkcmVhbFBsYXRmb3JtID0gJHBsYXRmb3JtOwogICAgICAgICAkcGxhdGZvcm0g
PSAicXQtd2syIjsKKyAgICB9IGVsc2lmIChpc0d0aygpKSB7CisgICAgICAgICRyZWFsUGxhdGZv
cm0gPSAkcGxhdGZvcm07CisgICAgICAgICRwbGF0Zm9ybSA9ICJndGstd2syIjsKICAgICB9CiB9
CiAKQEAgLTExNjQsNiArMTE2Nyw3IEBAIGNsb3NlIEhUTUw7CiBteSBAY29uZmlndXJhdGlvbkFy
Z3MgPSBhcmd1bWVudHNGb3JDb25maWd1cmF0aW9uKCk7CiAKIGlmIChpc0d0aygpKSB7CisgIHB1
c2goQGNvbmZpZ3VyYXRpb25BcmdzLCAnLTInKSBpZiAkdXNlV2ViS2l0VGVzdFJ1bm5lcjsKICAg
c3lzdGVtICJUb29scy9TY3JpcHRzL3J1bi1sYXVuY2hlciIsIEBjb25maWd1cmF0aW9uQXJncywg
ImZpbGU6Ly8iLiR0ZXN0UmVzdWx0cyBpZiAkbGF1bmNoU2FmYXJpOwogfSBlbHNpZiAoaXNRdCgp
KSB7CiAgIHVuc2hpZnQgQGNvbmZpZ3VyYXRpb25BcmdzLCBxdygtZ3JhcGhpY3NzeXN0ZW0gcmFz
dGVyIC1zdHlsZSB3aW5kb3dzKTsKQEAgLTE0OTcsNiArMTUwMSwxMSBAQCBzdWIgb3BlbkR1bXBU
b29sKCkKICAgICBpZiAoaXNHdGsoKSkgewogICAgICAgICAkQ0xFQU5fRU5We0dUS19NT0RVTEVT
fSA9ICJnYWlsIjsKICAgICAgICAgJENMRUFOX0VOVntXRUJLSVRfSU5TUEVDVE9SX1BBVEh9ID0g
IiRwcm9kdWN0RGlyL3Jlc291cmNlcy9pbnNwZWN0b3IiOworCisgICAgICAgIGlmICgkdXNlV2Vi
S2l0VGVzdFJ1bm5lcikgeworICAgICAgICAgICAgbXkgJGluamVjdGVkQnVuZGxlUGF0aCA9IHBy
b2R1Y3REaXIoKSAuICIvTGlicmFyaWVzLy5saWJzL2xpYlRlc3RSdW5uZXJJbmplY3RlZEJ1bmRs
ZSI7CisgICAgICAgICAgICAkQ0xFQU5fRU5We1RFU1RfUlVOTkVSX0lOSkVDVEVEX0JVTkRMRV9G
SUxFTkFNRX0gPSAkaW5qZWN0ZWRCdW5kbGVQYXRoOworICAgICAgICB9CiAgICAgfQogCiAgICAg
aWYgKGlzUXQoKSkgewpAQCAtMTY5MCw2ICsxNjk5LDggQEAgc3ViIGV4cGVjdGVkRGlyZWN0b3J5
Rm9yVGVzdCgkOyQ7JCkKICAgICBpZiAoaXNBcHBsZVdpbldlYktpdCgpKSB7CiAgICAgICAgIHB1
c2ggQGV4dHJhUGxhdGZvcm1zLCAibWFjLXdrMiIgaWYgJHBsYXRmb3JtIGVxICJ3aW4td2syIjsK
ICAgICAgICAgcHVzaCBAZXh0cmFQbGF0Zm9ybXMsIHF3KG1hYy1zbm93bGVvcGFyZCBtYWMpOwor
ICAgIH0gZWxzaWYgKGlzR3RrKCkpIHsKKyAgICAgICAgcHVzaCBAZXh0cmFQbGF0Zm9ybXMsICJn
dGsiIGlmICRwbGF0Zm9ybSBlcSAiZ3RrLXdrMiI7CiAgICAgfQogICAKICAgICBwdXNoIEBkaXJl
Y3RvcmllcywgbWFwIHsgY2F0ZGlyKCRwbGF0Zm9ybUJhc2VEaXJlY3RvcnksICRfKSB9IEBleHRy
YVBsYXRmb3JtczsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWxhdW5jaGVyIGIvVG9v
bHMvU2NyaXB0cy9ydW4tbGF1bmNoZXIKaW5kZXggNzMxZmJjMDRjMWJiNTgwMGRlY2E0OGFjMjg3
M2U1ZWE4ZGU2OGM1Mi4uMDBjNzE1ZDQ3NTQ2YWZkMDAwZGY0YmRkODM5YzA3MGY3OTQ2Nzc4OCAx
MDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tbGF1bmNoZXIKKysrIGIvVG9vbHMvU2NyaXB0
cy9ydW4tbGF1bmNoZXIKQEAgLTY1LDcgKzY1LDExIEBAIGlmIChpc1F0KCkpIHsKIH0gZWxzZSB7
CiAKICAgICBpZiAoaXNHdGsoKSkgewotICAgICAgICAkbGF1bmNoZXJQYXRoID0gY2F0ZGlyKCRs
YXVuY2hlclBhdGgsICJQcm9ncmFtcyIsICJHdGtMYXVuY2hlciIpOworICAgICAgICBpZiAoaXNX
SzIoKSkgeworICAgICAgICAgICAgJGxhdW5jaGVyUGF0aCA9IGNhdGRpcigkbGF1bmNoZXJQYXRo
LCAiUHJvZ3JhbXMiLCAiTWluaUJyb3dzZXIiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICRsYXVuY2hlclBhdGggPSBjYXRkaXIoJGxhdW5jaGVyUGF0aCwgIlByb2dyYW1zIiwgIkd0
a0xhdW5jaGVyIik7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKGlzRWZsKCkpIHsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0ZGlycy5wbQppbmRleCA0ODYzOTkzOTM3YmZmNGQ0YmE1MmQ0NjIzODNiZTFmZmYzOTNk
ZjY5Li4xZGIyYjc3NDZhZmMwOTk4OTIxMWYyZjlhNjljYmI3MDNhMGI0MzRiIDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRk
aXJzLnBtCkBAIC02MzAsMTIgKzYzMCwxNyBAQCBzdWIgYnVpbHREeWxpYlBhdGhGb3JOYW1lCiAg
ICAgICAgIHJldHVybiAiJGNvbmZpZ3VyYXRpb25Qcm9kdWN0RGlyL2xpYnd4d2Via2l0LmR5bGli
IjsKICAgICB9CiAgICAgaWYgKGlzR3RrKCkpIHsKLSAgICAgICAgbXkgJGxpYnJhcnlEaXIgPSAi
JGNvbmZpZ3VyYXRpb25Qcm9kdWN0RGlyLy5saWJzLyI7Ci0gICAgICAgIG15ICRleHRlbnNpb24g
PSBpc0RhcndpbigpID8gImR5bGliIiA6ICJzbyI7Ci0gICAgICAgIGlmICgtZSAkbGlicmFyeURp
ciAuICJsaWJ3ZWJraXRndGstMy4wLiRleHRlbnNpb24iKSB7Ci0gICAgICAgICAgICByZXR1cm4g
JGxpYnJhcnlEaXIgLiAibGlid2Via2l0Z3RrLTMuMC4kZXh0ZW5zaW9uIjsKKyAgICAgICAgIyBX
ZWJLaXRHVEsrIGZvciBHVEsyLCBXZWJLaXRHVEsrIGZvciBHVEszLCBhbmQgV2ViS2l0MiByZXNw
ZWN0aXZlbHkuCisgICAgICAgIG15IEBsaWJyYXJpZXMgPSAoImxpYndlYmtpdGd0ay0xLjAiLCAi
bGlid2Via2l0Z3RrLTMuMCIsICJsaWJ3ZWJraXQyZ3RrLTEuMCIpOworICAgICAgICBteSAkZXh0
ZW5zaW9uID0gaXNEYXJ3aW4oKSA/ICIuZHlsaWIiIDogIi5zbyI7CisKKyAgICAgICAgZm9yZWFj
aCAoQGxpYnJhcmllcykgeworICAgICAgICAgICAgbXkgJGxpYnJhcnkgPSAiJGNvbmZpZ3VyYXRp
b25Qcm9kdWN0RGlyLy5saWJzLyIgLiAkXyAgLiAkZXh0ZW5zaW9uOworICAgICAgICAgICAgaWYg
KC1lICRsaWJyYXJ5KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICRsaWJyYXJ5OworICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAkbGlicmFyeURpciAuICJsaWJ3ZWJr
aXRndGstMS4wLiRleHRlbnNpb24iOworICAgICAgICByZXR1cm4gIk5vdEZvdW5kIjsKICAgICB9
CiAgICAgaWYgKGlzRWZsKCkpIHsKICAgICAgICAgcmV0dXJuICIkY29uZmlndXJhdGlvblByb2R1
Y3REaXIvJGxpYnJhcnlOYW1lLy4uL1dlYktpdC9saWJld2Via2l0LnNvIjsKQEAgLTE5NjQsNiAr
MTk2OSwxMiBAQCBzdWIgcnVuV2ViS2l0VGVzdFJ1bm5lcgogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgcmV0dXJuIHN5c3RlbSAkd2ViS2l0VGVzdFJ1bm5lclBhdGgsIEBBUkdWOwogICAg
ICAgICB9CisgICAgfSBlbHNpZiAoaXNHdGsoKSkgeworICAgICAgICBteSAkcHJvZHVjdERpciA9
IHByb2R1Y3REaXIoKTsKKyAgICAgICAgbXkgJGluamVjdGVkQnVuZGxlUGF0aCA9ICIkcHJvZHVj
dERpci9MaWJyYXJpZXMvLmxpYnMvbGliVGVzdFJ1bm5lckluamVjdGVkQnVuZGxlIjsKKyAgICAg
ICAgcHJpbnQgIlN0YXJ0aW5nIFdlYktpdFRlc3RSdW5uZXIgd2l0aCBURVNUX1JVTk5FUl9JTkpF
Q1RFRF9CVU5ETEVfRklMRU5BTUUgc2V0IHRvIHBvaW50IHRvICRpbmplY3RlZEJ1bmRsZVBhdGgu
XG4iOworICAgICAgICAkRU5We1RFU1RfUlVOTkVSX0lOSkVDVEVEX0JVTkRMRV9GSUxFTkFNRX0g
PSAkaW5qZWN0ZWRCdW5kbGVQYXRoOworICAgICAgICByZXR1cm4gc3lzdGVtICIkcHJvZHVjdERp
ci9Qcm9ncmFtcy9XZWJLaXRUZXN0UnVubmVyIiwgQEFSR1Y7CiAgICAgfQogCiAgICAgcmV0dXJu
IDE7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dOVW1ha2VmaWxlLmFtIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HTlVtYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MmM3ODRl
ZWM3ZDZmNTQxMTQ1MzMwZGE4MmRlMWYxZTM5YTg1Y2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9HTlVtYWtlZmlsZS5hbQpAQCAtMCwwICsxLDEyMCBAQAorQlVJ
TFRfU09VUkNFUyArPSBcCisJZ2VuZXJhdGUtd2Via2l0dGVzdHJ1bm5lci1mb3J3YXJkaW5nLWhl
YWRlcnMKKworZ2VuZXJhdGUtd2Via2l0dGVzdHJ1bm5lci1mb3J3YXJkaW5nLWhlYWRlcnM6ICQo
V2ViS2l0MikvU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwgJChQcm9ncmFt
c19XZWJLaXRUZXN0UnVubmVyX1NPVVJDRVMpCisJJChBTV9WX0dFTikkKFBFUkwpICQ8ICQoc3Jj
ZGlyKS9Ub29scy9XZWJLaXRUZXN0UnVubmVyICQoR0VOU09VUkNFU19XRUJLSVQyKS9pbmNsdWRl
IGd0aworCSQoQU1fVl9HRU4pJChQRVJMKSAkPCAkKHNyY2RpcikvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lciAkKEdFTlNPVVJDRVNfV0VCS0lUMikvaW5jbHVkZSBzb3VwCisKK25vaW5zdF9QUk9HUkFN
UyArPSBcCisJUHJvZ3JhbXMvV2ViS2l0VGVzdFJ1bm5lcgorCitQcm9ncmFtc19XZWJLaXRUZXN0
UnVubmVyX1NPVVJDRVMgPSBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvbWFpbi5jcHAg
XAorCVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1BsYXRmb3JtV2ViVmlld0d0ay5jcHAgXAor
CVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250cm9sbGVyR3RrLmNwcCBcCisJVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVzdEludm9jYXRpb25HdGsuY3BwIFwKKwlUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oIFwKKwlUb29scy9XZWJLaXRUZXN0UnVu
bmVyL1N0cmluZ0Z1bmN0aW9ucy5oIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmNwcCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oIFwK
KwlUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcCBcCisJVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5oCisKK1Byb2dyYW1zX1dlYktpdFRlc3RSdW5u
ZXJfQ1BQRkxBR1MgPSBcCisJLWluY2x1ZGUgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRU
ZXN0UnVubmVyUHJlZml4LmggXAorCS1JJChzcmNkaXIpL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIg
XAorCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvaW5jbHVkZSBcCisJ
JChnbG9iYWxfY3BwZmxhZ3MpIFwKKwkkKGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBcCisJJChH
TE9CQUxERVBTX0NGTEFHUykgXAorCSQoQ0FJUk9fQ0ZMQUdTKSBcCisJJChHVEtfQ0ZMQUdTKSBc
CisJJChMSUJTT1VQX0NGTEFHUykKK1Byb2dyYW1zX1dlYktpdFRlc3RSdW5uZXJfQ1hYRkxBR1Mg
PSAkKGdsb2JhbF9jeHhmbGFncykKK1Byb2dyYW1zX1dlYktpdFRlc3RSdW5uZXJfQ0ZMQUdTID0g
JChnbG9iYWxfY2ZsYWdzKQorCitQcm9ncmFtc19XZWJLaXRUZXN0UnVubmVyX0xEQUREID0gXAor
CWxpYndlYmtpdDJndGstQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19B
UElfTUlOT1JfVkVSU0lPTkAubGEgXAorCSQoR0xPQkFMREVQU19MSUJTKSBcCisJJChDQUlST19M
SUJTKSBcCisJJChHVEtfTElCUykgXAorCSQoR0xJQl9MSUJTKSBcCisJJChMSUJTT1VQX0xJQlMp
IFwKKwkkKEZSRUVUWVBFX0xJQlMpIFwKKwkkKFdJTk1NX0xJQlMpCisKK1Byb2dyYW1zX1dlYktp
dFRlc3RSdW5uZXJfTERGTEFHUyA9IFwKKwktbm8tZmFzdC1pbnN0YWxsIFwKKwktbm8taW5zdGFs
bAorCisjIFRoZSBJbmplY3RlZEJ1bmRsZSBsaWJyYXJ5IGFsbG93cyB0aGUgcmVuZGVyIHByb2Nl
c3MgdG8gbG9hZCBoYXJuZXNzIGNvZGUuCitub2luc3RfTFRMSUJSQVJJRVMgKz0gTGlicmFyaWVz
L2xpYlRlc3RSdW5uZXJJbmplY3RlZEJ1bmRsZS5sYQorCitpbmplY3RlZF9idW5kbGVfYnVpbHRf
c291cmNlcyA9IFwKKwlEZXJpdmVkU291cmNlcy9JbmplY3RlZEJ1bmRsZS9KU0V2ZW50U2VuZGlu
Z0NvbnRyb2xsZXIuY3BwIFwKKwlEZXJpdmVkU291cmNlcy9JbmplY3RlZEJ1bmRsZS9KU0dDQ29u
dHJvbGxlci5jcHAgXAorCURlcml2ZWRTb3VyY2VzL0luamVjdGVkQnVuZGxlL0pTTGF5b3V0VGVz
dENvbnRyb2xsZXIuY3BwCitCVUlMVF9TT1VSQ0VTICs9ICQoaW5qZWN0ZWRfYnVuZGxlX2J1aWx0
X3NvdXJjZXMpCisKK0xpYnJhcmllc19saWJUZXN0UnVubmVySW5qZWN0ZWRCdW5kbGVfbGFfU09V
UkNFUyA9IFwKKwkkKGluamVjdGVkX2J1bmRsZV9idWlsdF9zb3VyY2VzKSBcCisJVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY3RpdmF0ZUZvbnRzLmggXAorCVRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvSlNXcmFwcGFibGUuaCBcCisJ
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9KU1dyYXBwZXIu
Y3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0pT
V3JhcHBlci5oIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50
U2VuZGluZ0NvbnRyb2xsZXIuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5oIFwKKwlUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL2d0ay9BY3RpdmF0ZUZvbnRzR3RrLmNwcCBcCisJVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwIFwK
KwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9MYXlvdXRUZXN0Q29u
dHJvbGxlckd0ay5jcHAgXAorCVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGUuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlLmggXAorCVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGVNYWluLmNwcCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5oIFwKKwlUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcCBcCisJ
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxl
ci5oCisKK0xpYnJhcmllc19saWJUZXN0UnVubmVySW5qZWN0ZWRCdW5kbGVfbGFfTERGTEFHUyA9
IFwKKwktcnBhdGggJHtzaGVsbCBwd2R9LyQodG9wX2J1aWxkZGlyKS8uLi91bml4L1Rlc3ROZXRz
Y2FwZVBsdWdpbi8ubGlicyBcCisJJChub191bmRlZmluZWQpIFwKKwktYXZvaWQtdmVyc2lvbiBc
CisJLW1vZHVsZQorCitMaWJyYXJpZXNfbGliVGVzdFJ1bm5lckluamVjdGVkQnVuZGxlX2xhX0NQ
UEZMQUdTID0gXAorCS1ERk9OVFNfQ09ORl9ESVI9XCIke3NoZWxsIHB3ZH0vJHtzcmNkaXJ9L1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9mb250c1wiIFwKKwktaW5jbHVkZSBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXJQcmVmaXguaCBcCisJLUkkKHNyY2RpcikvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lciBcCisJLUkkKHNyY2RpcikvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZSBcCisJLUkkKHNyY2RpcikvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9CaW5kaW5ncyBcCisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMv
SW5qZWN0ZWRCdW5kbGUgXAorCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dDIvaW5jbHVkZSBcCisJJChnbG9iYWxfY3BwZmxhZ3MpIFwKKwkkKGphdmFzY3JpcHRjb3JlX2Nw
cGZsYWdzKSBcCisJJChHTE9CQUxERVBTX0NGTEFHUykgXAorCSQoQ0FJUk9fQ0ZMQUdTKSBcCisJ
JChHTElCX0NGTEFHUykgXAorCSQoR1RLX0NGTEFHUykgXAorCSQoTElCU09VUF9DRkxBR1MpCitM
aWJyYXJpZXNfbGliVGVzdFJ1bm5lckluamVjdGVkQnVuZGxlX2xhX0NYWEZMQUdTID0gJChnbG9i
YWxfY3h4ZmxhZ3MpCitMaWJyYXJpZXNfbGliVGVzdFJ1bm5lckluamVjdGVkQnVuZGxlX2xhX0NG
TEFHUyA9ICQoZ2xvYmFsX2NmbGFncykKKworY29kZV9nZW5lcmF0aW9uX2RlcGVuZGVuY2llcyA9
IFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVH
ZW5lcmF0b3JUZXN0UnVubmVyLnBtIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3IucG0gXAorCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURM
UGFyc2VyLnBtIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFN0cnVjdHVy
ZS5wbSBcCisJU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JbkZpbGVzUGFyc2VyLnBt
IFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBs
CisKK0Rlcml2ZWRTb3VyY2VzL0luamVjdGVkQnVuZGxlL0pTJS5jcHA6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvJS5pZGwgJChjb2RlX2dlbmVyYXRpb25f
ZGVwZW5kZW5jaWVzKQorCSQoQU1fVl9HRU4pJChQRVJMKSBcCisJCS1JICQoc3JjZGlyKS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzIFwKKwkJLUkgJChzcmNkaXIpL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MgXAorCQkkKHNyY2RpcikvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCBcCisJCS0tZGVm
aW5lcyBcIlwiIC0tZ2VuZXJhdG9yIFRlc3RSdW5uZXIgXAorCQktLWluY2x1ZGUgJChzcmNkaXIp
L1Rvb2xzL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzIFwKKwkJLS1vdXRwdXREaXIgJCh0b3BfYnVp
bGRkaXIpL0Rlcml2ZWRTb3VyY2VzL0luamVjdGVkQnVuZGxlIFwKKwkJJDwKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xs
ZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENv
bnRyb2xsZXIuaAppbmRleCBiMzdmMTAyMjgzZjNjOWRhYmNjOTk1OWU2MjJkZTIwZGQzYzMwMmJj
Li4wZjM5ZDc1ZjY4NzgxOTMwYmM4MDVhN2YyMzA3MDI1ZWVkNzEyNTE2IDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVy
LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0
Q29udHJvbGxlci5oCkBAIC00MCw2ICs0MCw4IEBAIHR5cGVkZWYgVUlOVF9QVFIgUGxhdGZvcm1U
aW1lclJlZjsKICNlbGlmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPFFUaW1lcj4KIHR5cGVkZWYg
UVRpbWVyIFBsYXRmb3JtVGltZXJSZWY7CisjZWxpZiBQTEFURk9STShHVEspCit0eXBlZGVmIHVu
c2lnbmVkIGludCBQbGF0Zm9ybVRpbWVyUmVmOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXVFIgewpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvQWN0
aXZhdGVGb250c0d0ay5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L2d0ay9BY3RpdmF0ZUZvbnRzR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZmFlZmM4NzhmNDhiMzk2YTEw
N2Q2MTkyZjcxMTJkOTE1NDc3ZWM5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvQWN0aXZhdGVGb250c0d0ay5jcHAKQEAgLTAsMCAr
MSwxNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisg
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWN0aXZhdGVG
b250cy5oIgorCisjaW5jbHVkZSA8Zm9udGNvbmZpZy9mb250Y29uZmlnLmg+CisjaW5jbHVkZSA8
Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKworbmFtZXNwYWNl
IFdUUiB7CisKK3ZvaWQgaW5pdGlhbGl6ZUd0a1NldHRpbmdzKCkKK3sKKworICAgIEd0a1NldHRp
bmdzKiBzZXR0aW5ncyA9IGd0a19zZXR0aW5nc19nZXRfZGVmYXVsdCgpOworICAgIGlmICghc2V0
dGluZ3MpCisgICAgICAgIHJldHVybjsKKyAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsIAorICAg
ICAgICAgICAgICAgICAiZ3RrLXhmdC1kcGkiLCA5ODMwNCwKKyAgICAgICAgICAgICAgICAgImd0
ay14ZnQtYW50aWFsaWFzIiwgMSwKKyAgICAgICAgICAgICAgICAgImd0ay14ZnQtaGludGluZyIs
IDAsCisgICAgICAgICAgICAgICAgICJndGstZm9udC1uYW1lIiwgIkxpYmVyYXRpb24gU2FucyAx
MiIsCisgICAgICAgICAgICAgICAgICJndGstdGhlbWUtbmFtZSIsICJSYWxlaWdoIiwgTlVMTCk7
CisgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAiZ3RrLXhmdC1yZ2JhIiwgIm5vbmUiLCBOVUxM
KTsKK30KKwordm9pZCBpbml0aXRpYWxpemVGb250Q29uZmlnU2V0dGluZygpCit7CisgICAgRmNJ
bml0KCk7CisKKyAgICAvLyBJZiBhIHRlc3QgcmVzdWx0ZWQgYSBmb250IGJlaW5nIGFkZGVkIG9y
IHJlbW92ZWQgdmlhIHRoZSBAZm9udC1mYWNlIHJ1bGUsIHRoZW4KKyAgICAvLyB3ZSB3YW50IHRv
IHJlc2V0IHRoZSBGb250Q29uZmlnIGNvbmZpZ3VyYXRpb24gdG8gcHJldmVudCBpdCBmcm9tIGFm
ZmVjdGluZyBvdGhlciB0ZXN0cy4KKyAgICBzdGF0aWMgaW50IG51bUZvbnRzID0gMDsKKyAgICBG
Y0ZvbnRTZXQqIGFwcEZvbnRTZXQgPSBGY0NvbmZpZ0dldEZvbnRzKDAsIEZjU2V0QXBwbGljYXRp
b24pOworICAgIGlmIChhcHBGb250U2V0ICYmIG51bUZvbnRzICYmIGFwcEZvbnRTZXQtPm5mb250
ID09IG51bUZvbnRzKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBMb2FkIG91ciBjb25maWd1
cmF0aW9uIGZpbGUsIHdoaWNoIHNldHMgdXAgcHJvcGVyIGFsaWFzZXMgZm9yIGZhbWlseQorICAg
IC8vIG5hbWVzIGxpa2Ugc2Fucywgc2VyaWYgYW5kIG1vbm9zcGFjZS4KKyAgICBGY0NvbmZpZyog
Y29uZmlnID0gRmNDb25maWdDcmVhdGUoKTsKKyAgICBHT3duUHRyPGdjaGFyPiBmb250Q29uZmln
RmlsZW5hbWUoZ19idWlsZF9maWxlbmFtZShGT05UU19DT05GX0RJUiwgImZvbnRzLmNvbmYiLCBO
VUxMKSk7CisgICAgaWYgKCFnX2ZpbGVfdGVzdChmb250Q29uZmlnRmlsZW5hbWUuZ2V0KCksIEdf
RklMRV9URVNUX0lTX1JFR1VMQVIpKQorICAgICAgICBnX2Vycm9yKCJDYW5ub3QgZmluZCBmb250
cy5jb25mIGF0ICVzXG4iLCBmb250Q29uZmlnRmlsZW5hbWUuZ2V0KCkpOworICAgIGlmICghRmND
b25maWdQYXJzZUFuZExvYWQoY29uZmlnLCByZWludGVycHJldF9jYXN0PEZjQ2hhcjgqPihmb250
Q29uZmlnRmlsZW5hbWUuZ2V0KCkpLCB0cnVlKSkKKyAgICAgICAgZ19lcnJvcigiQ291bGRuJ3Qg
bG9hZCBmb250IGNvbmZpZ3VyYXRpb24gZmlsZSBmcm9tOiAlcyIsIGZvbnRDb25maWdGaWxlbmFt
ZS5nZXQoKSk7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZm9udFBhdGhzW11bMl0g
PSB7CisgICAgICAgIHsgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWxpYmVyYXRpb24v
TGliZXJhdGlvbk1vbm8tQm9sZEl0YWxpYy50dGYiLAorICAgICAgICAgICIvdXNyL3NoYXJlL2Zv
bnRzL2xpYmVyYXRpb24vTGliZXJhdGlvbk1vbm8tQm9sZEl0YWxpYy50dGYiLCB9LAorICAgICAg
ICB7ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1saWJlcmF0aW9uL0xpYmVyYXRpb25N
b25vLUJvbGQudHRmIiwKKyAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy9saWJlcmF0aW9uL0xp
YmVyYXRpb25Nb25vLUJvbGQudHRmIiwgfSwKKyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy90
cnVldHlwZS90dGYtbGliZXJhdGlvbi9MaWJlcmF0aW9uTW9uby1JdGFsaWMudHRmIiwKKyAgICAg
ICAgICAiL3Vzci9zaGFyZS9mb250cy9saWJlcmF0aW9uL0xpYmVyYXRpb25Nb25vLUl0YWxpYy50
dGYiLCB9LAorICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1saWJlcmF0
aW9uL0xpYmVyYXRpb25Nb25vLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgICAiL3Vzci9zaGFyZS9m
b250cy9saWJlcmF0aW9uL0xpYmVyYXRpb25Nb25vLVJlZ3VsYXIudHRmIiwgfSwKKyAgICAgICAg
eyAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtbGliZXJhdGlvbi9MaWJlcmF0aW9uU2Fu
cy1Cb2xkSXRhbGljLnR0ZiIsCisgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvbGliZXJhdGlv
bi9MaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljLnR0ZiIsIH0sCisgICAgICAgIHsgIi91c3Ivc2hh
cmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWxpYmVyYXRpb24vTGliZXJhdGlvblNhbnMtQm9sZC50dGYi
LAorICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL2xpYmVyYXRpb24vTGliZXJhdGlvblNhbnMt
Qm9sZC50dGYiLCB9LAorICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1s
aWJlcmF0aW9uL0xpYmVyYXRpb25TYW5zLUl0YWxpYy50dGYiLAorICAgICAgICAgICIvdXNyL3No
YXJlL2ZvbnRzL2xpYmVyYXRpb24vTGliZXJhdGlvblNhbnMtSXRhbGljLnR0ZiIsIH0sCisgICAg
ICAgIHsgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWxpYmVyYXRpb24vTGliZXJhdGlv
blNhbnMtUmVndWxhci50dGYiLAorICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL2xpYmVyYXRp
b24vTGliZXJhdGlvblNhbnMtUmVndWxhci50dGYiLCB9LAorICAgICAgICB7ICIvdXNyL3NoYXJl
L2ZvbnRzL3RydWV0eXBlL3R0Zi1saWJlcmF0aW9uL0xpYmVyYXRpb25TZXJpZi1Cb2xkSXRhbGlj
LnR0ZiIsCisgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvbGliZXJhdGlvbi9MaWJlcmF0aW9u
U2VyaWYtQm9sZEl0YWxpYy50dGYiLCB9LAorICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL3Ry
dWV0eXBlL3R0Zi1saWJlcmF0aW9uL0xpYmVyYXRpb25TZXJpZi1Cb2xkLnR0ZiIsCisgICAgICAg
ICAgIi91c3Ivc2hhcmUvZm9udHMvbGliZXJhdGlvbi9MaWJlcmF0aW9uU2VyaWYtQm9sZC50dGYi
LCB9LAorICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1saWJlcmF0aW9u
L0xpYmVyYXRpb25TZXJpZi1JdGFsaWMudHRmIiwKKyAgICAgICAgICAiL3Vzci9zaGFyZS9mb250
cy9saWJlcmF0aW9uL0xpYmVyYXRpb25TZXJpZi1JdGFsaWMudHRmIiwgfSwKKyAgICAgICAgeyAi
L3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtbGliZXJhdGlvbi9MaWJlcmF0aW9uU2VyaWYt
UmVndWxhci50dGYiLAorICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL2xpYmVyYXRpb24vTGli
ZXJhdGlvblNlcmlmLVJlZ3VsYXIudHRmIiwgfSwKKyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250
cy90cnVldHlwZS90dGYtZGVqYXZ1L0RlamFWdVNhbnMudHRmIiwKKyAgICAgICAgICAiL3Vzci9z
aGFyZS9mb250cy9kZWphdnUvRGVqYVZ1U2Fucy50dGYiLCB9LAorICAgICAgICB7ICIvdXNyL3No
YXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1kZWphdnUvRGVqYVZ1U2VyaWYudHRmIiwKKyAgICAgICAg
ICAiL3Vzci9zaGFyZS9mb250cy9kZWphdnUvRGVqYVZ1U2VyaWYudHRmIiwgfSwKKworICAgICAg
ICAvLyBNYXRoTUwgdGVzdHMgcmVxdWlyZSB0aGUgU1RJWCBmb250cy4KKyAgICAgICAgeyAiL3Vz
ci9zaGFyZS9mb250cy9vcGVudHlwZS9zdGl4L1NUSVhHZW5lcmFsLm90ZiIsCisgICAgICAgICAg
Ii91c3Ivc2hhcmUvZm9udHMvc3RpeC9TVElYR2VuZXJhbC5vdGYiIH0sCisgICAgICAgIHsgIi91
c3Ivc2hhcmUvZm9udHMvb3BlbnR5cGUvc3RpeC9TVElYR2VuZXJhbEJvbEl0YS5vdGYiLAorICAg
ICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3N0aXgvU1RJWEdlbmVyYWxCb2xJdGEub3RmIiB9LAor
ICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL29wZW50eXBlL3N0aXgvU1RJWEdlbmVyYWxCb2wu
b3RmIiwKKyAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy9zdGl4L1NUSVhHZW5lcmFsQm9sLm90
ZiIgfSwKKyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy9vcGVudHlwZS9zdGl4L1NUSVhHZW5l
cmFsSXRhbGljLm90ZiIsCisgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvc3RpeC9TVElYR2Vu
ZXJhbEl0YWxpYy5vdGYiIH0KKyAgICB9OworCisgICAgLy8gVE9ETzogU29tZSB0ZXN0cyB1c2Ug
THVjaWRhLiBXZSBzaG91bGQgbG9hZCB0aGVzZSBhcyB3ZWxsLCBvbmNlIGl0IGJlY29tZXMKKyAg
ICAvLyBjbGVhciBob3cgdG8gaW5zdGFsbCB0aGVzZSBmb250cyBlYXNpbHkgb24gRmVkb3JhLgor
ICAgIGZvciAoc2l6ZV90IGZvbnQgPSAwOyBmb250IDwgR19OX0VMRU1FTlRTKGZvbnRQYXRocyk7
IGZvbnQrKykgeworICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgIGZvciAoc2l6
ZV90IHBhdGggPSAwOyBwYXRoIDwgMjsgcGF0aCsrKSB7CisKKyAgICAgICAgICAgIGlmIChnX2Zp
bGVfdGVzdChmb250UGF0aHNbZm9udF1bcGF0aF0sIEdfRklMRV9URVNUX0VYSVNUUykpIHsKKyAg
ICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCFGY0NvbmZp
Z0FwcEZvbnRBZGRGaWxlKGNvbmZpZywgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGY0NoYXI4Kj4o
Zm9udFBhdGhzW2ZvbnRdW3BhdGhdKSkpCisgICAgICAgICAgICAgICAgICAgIGdfZXJyb3IoIkNv
dWxkIG5vdCBsb2FkIGZvbnQgYXQgJXMhIiwgZm9udFBhdGhzW2ZvbnRdW3BhdGhdKTsKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIGdfZXJyb3Io
IkNvdWxkIG5vdCBmaW5kIGZvbnQgYXQgJXMuIEVpdGhlciBpbnN0YWxsIHRoaXMgZm9udCBvciBm
aWxlIGEgYnVnICIKKyAgICAgICAgICAgICAgICAgICAgImF0IGh0dHA6Ly9idWdzLndlYmtpdC5v
cmcgaWYgaXQgaXMgaW5zdGFsbGVkIGluIGFub3RoZXIgbG9jYXRpb24uIiwKKyAgICAgICAgICAg
ICAgICAgICAgZm9udFBhdGhzW2ZvbnRdWzBdKTsKKyAgICB9CisKKyAgICAvLyBBaGVtIGlzIHVz
ZWQgYnkgbWFueSBsYXlvdXQgdGVzdHMuCisgICAgR093blB0cjxnY2hhcj4gYWhlbUZvbnRGaWxl
bmFtZShnX2J1aWxkX2ZpbGVuYW1lKEZPTlRTX0NPTkZfRElSLCAiQUhFTV9fX18uVFRGIiwgTlVM
TCkpOworICAgIGlmICghRmNDb25maWdBcHBGb250QWRkRmlsZShjb25maWcsIHJlaW50ZXJwcmV0
X2Nhc3Q8RmNDaGFyOCo+KGFoZW1Gb250RmlsZW5hbWUuZ2V0KCkpKSkKKyAgICAgICAgZ19lcnJv
cigiQ291bGQgbm90IGxvYWQgZm9udCBhdCAlcyEiLCBhaGVtRm9udEZpbGVuYW1lLmdldCgpKTsg
CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZm9udEZpbGVuYW1lc1tdID0geworICAgICAgICAi
Q29sb3JCaXRzLnR0ZiIsCisgICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyMTAwLnR0ZiIsCisg
ICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0ZiIsCisgICAgICAgICJXZWJLaXRXZWln
aHRXYXRjaGVyMzAwLnR0ZiIsCisgICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyNDAwLnR0ZiIs
CisgICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyNTAwLnR0ZiIsCisgICAgICAgICJXZWJLaXRX
ZWlnaHRXYXRjaGVyNjAwLnR0ZiIsCisgICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyNzAwLnR0
ZiIsCisgICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyODAwLnR0ZiIsCisgICAgICAgICJXZWJL
aXRXZWlnaHRXYXRjaGVyOTAwLnR0ZiIsCisgICAgICAgIDAKKyAgICB9OworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGZvbnRGaWxlbmFtZXNbaV07ICsraSkgeworICAgICAgICBHT3duUHRyPGdj
aGFyPiBmb250RmlsZW5hbWUoZ19idWlsZF9maWxlbmFtZShGT05UU19DT05GX0RJUiwgIi4uIiwg
Ii4uIiwgImZvbnRzIiwgZm9udEZpbGVuYW1lc1tpXSwgTlVMTCkpOworICAgICAgICBpZiAoIUZj
Q29uZmlnQXBwRm9udEFkZEZpbGUoY29uZmlnLCByZWludGVycHJldF9jYXN0PEZjQ2hhcjgqPihm
b250RmlsZW5hbWUuZ2V0KCkpKSkKKyAgICAgICAgICAgIGdfZXJyb3IoIkNvdWxkIG5vdCBsb2Fk
IGZvbnQgYXQgJXMhIiwgZm9udEZpbGVuYW1lLmdldCgpKTsgCisgICAgfQorCisgICAgLy8gQSBm
b250IHdpdGggbm8gdmFsaWQgRm9udGNvbmZpZyBlbmNvZGluZyB0byB0ZXN0IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzQ1MgorICAgIEdPd25QdHI8Z2NoYXI+IGZv
bnRXaXRoTm9WYWxpZEVuY29kaW5nRmlsZW5hbWUoZ19idWlsZF9maWxlbmFtZShGT05UU19DT05G
X0RJUiwgIkZvbnRXaXRoTm9WYWxpZEVuY29kaW5nLmZvbiIsIE5VTEwpKTsKKyAgICBpZiAoIUZj
Q29uZmlnQXBwRm9udEFkZEZpbGUoY29uZmlnLCByZWludGVycHJldF9jYXN0PEZjQ2hhcjgqPihm
b250V2l0aE5vVmFsaWRFbmNvZGluZ0ZpbGVuYW1lLmdldCgpKSkpCisgICAgICAgIGdfZXJyb3Io
IkNvdWxkIG5vdCBsb2FkIGZvbnQgYXQgJXMhIiwgZm9udFdpdGhOb1ZhbGlkRW5jb2RpbmdGaWxl
bmFtZS5nZXQoKSk7IAorCisgICAgaWYgKCFGY0NvbmZpZ1NldEN1cnJlbnQoY29uZmlnKSkKKyAg
ICAgICAgZ19lcnJvcigiQ291bGQgbm90IHNldCB0aGUgY3VycmVudCBmb250IGNvbmZpZ3VyYXRp
b24hIik7CisKKyAgICBudW1Gb250cyA9IEZjQ29uZmlnR2V0Rm9udHMoY29uZmlnLCBGY1NldEFw
cGxpY2F0aW9uKS0+bmZvbnQ7Cit9CisKK3ZvaWQgYWN0aXZhdGVGb250cygpCit7CisgICAgaW5p
dGlhbGl6ZUd0a1NldHRpbmdzKCk7CisgICAgaW5pdGl0aWFsaXplRm9udENvbmZpZ1NldHRpbmco
KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiODBh
ZWExYmQ0MTJlMTBjOTk4NDU4ZWJhYjZiOWNmNDA0MjViYmYKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9JbmplY3RlZEJ1bmRsZUd0
ay5jcHAKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMu
TC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluamVjdGVkQnVu
ZGxlLmgiCisKK25hbWVzcGFjZSBXVFIgeworCitzdGF0aWMgdm9pZCBsb2dIYW5kbGVyKGNvbnN0
IGdjaGFyKiBkb21haW4sIEdMb2dMZXZlbEZsYWdzIGxldmVsLCBjb25zdCBnY2hhciogbWVzc2Fn
ZSwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAobGV2ZWwgPCBHX0xPR19MRVZFTF9ERUJVRykK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbWVzc2FnZSk7Cit9CisKKwordm9pZCBJ
bmplY3RlZEJ1bmRsZTo6cGxhdGZvcm1Jbml0aWFsaXplKFdLVHlwZVJlZikKK3sKKyAgICAvLyBT
b21lIHBsdWdpbnMgbWlnaHQgdHJ5IHRvIHVzZSB0aGUgR0xpYiBsb2dnZXIgZm9yIHByaW50aW5n
IGRlYnVnIG1lc3NhZ2VzLiBUaGlzCisgICAgLy8gd2lsbCBjYXVzZSB0ZXN0cyB0byBmYWlsIGJl
Y2F1c2Ugb2YgdW5leHBlY3RlZCBvdXRwdXQuIFdlIHNxdWVsY2ggYWxsIGRlYnVnCisgICAgLy8g
bWVzc2FnZXMgc2VudCB0byB0aGUgbG9nZ2VyLgorICAgIGdfbG9nX3NldF9kZWZhdWx0X2hhbmRs
ZXIobG9nSGFuZGxlciwgMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvTGF5b3V0VGVzdENvbnRy
b2xsZXJHdGsuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsv
TGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYwMzI0YWE5M2E2NTJhOWQw
MzY3YWM2YjE5M2NjMTNjMWJlNjNmZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAK
QEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9s
bGVyLmgiCisKKyNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgorI2luY2x1ZGUgPGdsaWIuaD4K
KworbmFtZXNwYWNlIFdUUiB7CisKK3N0YXRpYyBnYm9vbGVhbiB3YWl0VG9EdW1wV2F0Y2hkb2dU
aW1lckludGVydmFsQ2FsbGJhY2soZ3BvaW50ZXIpCit7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmly
ZWQoKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
cGxhdGZvcm1Jbml0aWFsaXplKCkKK3sKKyAgICBtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyID0g
MDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aW52YWxpZGF0ZVdhaXRUb0R1bXBX
YXRjaGRvZ1RpbWVyKCkKK3sKKyAgICBpZiAoIW1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIpCisg
ICAgICAgIHJldHVybjsKKyAgICBnX3NvdXJjZV9yZW1vdmUobV93YWl0VG9EdW1wV2F0Y2hkb2dU
aW1lcik7CisgICAgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lciA9IDA7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcklmTmVl
ZGVkKCkKK3sKKyAgICBpZiAobV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lciA9IGdfdGltZW91dF9hZGQod2Fp
dFRvRHVtcFdhdGNoZG9nVGltZXJJbnRlcnZhbCAqIDEwMDAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdFRvRHVtcFdhdGNoZG9nVGltZXJJbnRlcnZh
bENhbGxiYWNrLCAwKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAppbmRleCA5NzM5ZDQyMTc5OTk1OWU4NTNlOGI0ZGY3MjBj
ZGQzMjkzNzk4OGRiLi5jYmM0OGU0OTU4MDA5ZjU1OTM3YThiM2YxOGY4MzZlOTRiYjU3YjQyIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCisrKyBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKQEAgLTQ2LDYgKzQ2LDEw
IEBAIHR5cGVkZWYgTlNXaW5kb3cqIFBsYXRmb3JtV2luZG93OwogI2VsaWYgZGVmaW5lZChXSU4z
MikgfHwgZGVmaW5lZChfV0lOMzIpCiB0eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9ybVdLVmlldzsK
IHR5cGVkZWYgSFdORCBQbGF0Zm9ybVdpbmRvdzsKKyNlbGlmIGRlZmluZWQoQlVJTERJTkdfR1RL
X18pCit0eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0a1dpZGdldDsKK3R5cGVkZWYgV0tWaWV3
UmVmIFBsYXRmb3JtV0tWaWV3OwordHlwZWRlZiBHdGtXaWRnZXQqIFBsYXRmb3JtV2luZG93Owog
I2VuZGlmCiAKIG5hbWVzcGFjZSBXVFIgewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9ndGsvUGxhdGZvcm1XZWJWaWV3R3RrLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
Z3RrL1BsYXRmb3JtV2ViVmlld0d0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWNhNzk2MDFmM2YzZGZmZTcy
NjU2NGE0ZDYxZmVhN2M4OTFhYWNkNwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvZ3RrL1BsYXRmb3JtV2ViVmlld0d0ay5jcHAKQEAgLTAsMCArMSw5NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIK
KworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdUUiB7CisKK1BsYXRmb3JtV2Vi
Vmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJl
ZiBwYWdlR3JvdXApCisgICAgOiBtX3ZpZXcoV0tWaWV3Q3JlYXRlKGNvbnRleHQsIHBhZ2VHcm91
cCkpCisgICAgLCBtX3dpbmRvdyhndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1BPUFVQKSkKK3sK
KyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fd2luZG93KSwgV0tWaWV3R2V0
V2luZG93KG1fdmlldykpOworCisgICAgZ3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhtX3dp
bmRvdyksIDgwMCwgNjAwKTsKKyAgICBHdGtBbGxvY2F0aW9uIHNpemUgPSB7IDAsIDAsIDgwMCwg
NjAwIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKG1fd2luZG93LCAmc2l6ZSk7Cisg
ICAgZ3RrX3dpZGdldF9zaG93X2FsbChtX3dpbmRvdyk7CisKKyAgICB3aGlsZSAoZ3RrX2V2ZW50
c19wZW5kaW5nKCkpCisgICAgICAgIGd0a19tYWluX2l0ZXJhdGlvbigpOworfQorCitQbGF0Zm9y
bVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcoKQoreworICAgIGd0a193aWRnZXRfZGVzdHJveSht
X3dpbmRvdyk7Cit9CisKK3ZvaWQgUGxhdGZvcm1XZWJWaWV3OjpyZXNpemVUbyh1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQoreworICAgIGd0a193aW5kb3dfcmVzaXplKEdUS19XSU5E
T1cobV93aW5kb3cpLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBHdGtBbGxvY2F0aW9uIHNpemUgPSB7
IDAsIDAsIHdpZHRoLCBoZWlnaHQgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUobV93
aW5kb3csICZzaXplKTsKKworICAgIHdoaWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSkKKyAgICAg
ICAgZ3RrX21haW5faXRlcmF0aW9uKCk7Cit9CisKK1dLUGFnZVJlZiBQbGF0Zm9ybVdlYlZpZXc6
OnBhZ2UoKQoreworICAgIHJldHVybiBXS1ZpZXdHZXRQYWdlKG1fdmlldyk7Cit9CisKK3ZvaWQg
UGxhdGZvcm1XZWJWaWV3Ojpmb2N1cygpCit7Cit9CisKK1dLUmVjdCBQbGF0Zm9ybVdlYlZpZXc6
OndpbmRvd0ZyYW1lKCkKK3sKKyAgICBHdGtBbGxvY2F0aW9uIGdlb21ldHJ5OworICAgIGdpbnQg
ZGVwdGg7CisgICAgZ2RrX3dpbmRvd19nZXRfZ2VvbWV0cnkoZ3RrX3dpZGdldF9nZXRfd2luZG93
KEdUS19XSURHRVQobV93aW5kb3cpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2Vv
bWV0cnkueCwgJmdlb21ldHJ5LnksICZnZW9tZXRyeS53aWR0aCwgJmdlb21ldHJ5LmhlaWdodCwg
JmRlcHRoKTsKKworICAgIFdLUmVjdCBmcmFtZTsKKyAgICBmcmFtZS5vcmlnaW4ueCA9IGdlb21l
dHJ5Lng7CisgICAgZnJhbWUub3JpZ2luLnkgPSBnZW9tZXRyeS55OworICAgIGZyYW1lLnNpemUu
d2lkdGggPSBnZW9tZXRyeS53aWR0aDsKKyAgICBmcmFtZS5zaXplLmhlaWdodCA9IGdlb21ldHJ5
LmhlaWdodDsKKyAgICByZXR1cm4gZnJhbWU7Cit9CisKK3ZvaWQgUGxhdGZvcm1XZWJWaWV3Ojpz
ZXRXaW5kb3dGcmFtZShXS1JlY3QgZnJhbWUpCit7CisgICAgZ3RrX3dpbmRvd19tb3ZlKEdUS19X
SU5ET1cobV93aW5kb3cpLCBmcmFtZS5vcmlnaW4ueCwgZnJhbWUub3JpZ2luLnkpOworICAgIHJl
c2l6ZVRvKGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVpZ2h0KTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV1RSCisKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rl
c3RDb250cm9sbGVyR3RrLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250
cm9sbGVyR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOGI5NmJkOTgzNWQzZGM0YjRjM2FhODgxMTkyNmVk
MjExODFmMWJmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsv
VGVzdENvbnRyb2xsZXJHdGsuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm0uaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXVFIgeworCitzdGF0aWMgZ3VpbnQgZ1RpbWVv
dXRTb3VyY2VJZCA9IDA7CisKK3N0YXRpYyB2b2lkIGNhbmNlbFRpbWVvdXQoKQoreworICAgIGlm
ICghZ1RpbWVvdXRTb3VyY2VJZCkKKyAgICAgICAgcmV0dXJuOworICAgIGdfc291cmNlX3JlbW92
ZShnVGltZW91dFNvdXJjZUlkKTsKKyAgICBnVGltZW91dFNvdXJjZUlkID0gMDsKK30KKwordm9p
ZCBUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZSgpCit7CisgICAgZ3RrX21haW5fcXVpdCgpOwor
ICAgIGNhbmNlbFRpbWVvdXQoKTsKK30KKwordm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1J
bml0aWFsaXplKCkKK3sKK30KKworc3RhdGljIGdib29sZWFuIHRpbWVvdXRDYWxsYmFjayhncG9p
bnRlcikKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkZBSUw6IFRlc3RDb250cm9sbGVyUnVuTG9v
cCB0aW1lZCBvdXQuXG4iKTsKKyAgICBndGtfbWFpbl9xdWl0KCk7CisgICAgcmV0dXJuIEZBTFNF
OworfQorCit2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJ1blVudGlsKGJvb2wmLCBkb3Vi
bGUgdGltZW91dCkKK3sKKyAgICBjYW5jZWxUaW1lb3V0KCk7CisgICAgZ1RpbWVvdXRTb3VyY2VJ
ZCA9IGdfdGltZW91dF9hZGQodGltZW91dCAqIDEwMDAsIHRpbWVvdXRDYWxsYmFjaywgMCk7Cisg
ICAgZ3RrX21haW4oKTsKK30KKwordm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZUluamVj
dGVkQnVuZGxlUGF0aCgpCit7CisgICAgY29uc3QgY2hhciogYnVuZGxlUGF0aCA9IGdfZ2V0ZW52
KCJURVNUX1JVTk5FUl9JTkpFQ1RFRF9CVU5ETEVfRklMRU5BTUUiKTsKKyAgICBpZiAoIWJ1bmRs
ZVBhdGgpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJURVNUX1JVTk5FUl9JTkpFQ1RFRF9C
VU5ETEVfRklMRU5BTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgbm90IGZvdW5kXG4iKTsKKyAgICAg
ICAgZXhpdCgwKTsKKyAgICB9CisKKyAgICBnc2l6ZSBieXRlc1dyaXR0ZW47CisgICAgR093blB0
cjxjaGFyPiB1dGY4QnVuZGxlUGF0aChnX2ZpbGVuYW1lX3RvX3V0ZjgoYnVuZGxlUGF0aCwgLTEs
IDAsICZieXRlc1dyaXR0ZW4sIDApKTsKKyAgICBtX2luamVjdGVkQnVuZGxlUGF0aCA9IFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHV0ZjhCdW5kbGVQYXRoLmdldCgpKTsKK30KKwordm9p
ZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZVRlc3RQbHVnaW5EaXJlY3RvcnkoKQoreworICAg
IC8vIFRoaXMgaXMgY2FsbGVkIGFmdGVyIGluaXRpYWxpemVJbmplY3RlZEJ1bmRsZVBhdGguCisg
ICAgbV90ZXN0UGx1Z2luRGlyZWN0b3J5ID0gbV9pbmplY3RlZEJ1bmRsZVBhdGg7Cit9CisKK3Zv
aWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKQoreworfQorCit2
b2lkIFRlc3RDb250cm9sbGVyOjpydW5Nb2RhbChQbGF0Zm9ybVdlYlZpZXcqKQoreworICAgIC8v
IEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCB0aGlzIHRvIHRlc3Qgc2hvd01vZGFsRGlhbG9nLgor
fQorCitjb25zdCBjaGFyKiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1MaWJyYXJ5UGF0aEZvclRl
c3RpbmcoKQoreworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RJbnZvY2F0aW9uR3RrLmNwcCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RJbnZvY2F0aW9uR3RrLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42YTcxZGEyYThiZjY0NGZhMDczNTk4YzY2M2IwNTcyMmRjYWZiMTkwCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVzdEludm9jYXRpb25HdGsuY3Bw
CkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVGVzdEludm9jYXRpb24uaCIKKworbmFtZXNwYWNlIFdUUiB7CisKK3ZvaWQgVGVzdElu
dm9jYXRpb246OmR1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKGNvbnN0IE9wYXF1ZVdL
SW1hZ2UqKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvZ3RrL21haW4uY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsv
bWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTlhODQzOTZhNjRiNTRiYTJjZTA2Njc1NDk4Njc5YjljZGNh
YTI2ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL21haW4u
Y3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMu
TC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVGVzdENvbnRy
b2xsZXIuaCIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGd0a19p
bml0KCZhcmdjLCAmYXJndik7CisgICAgV1RSOjpUZXN0Q29udHJvbGxlciBjb250cm9sbGVyKGFy
Z2MsIGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcioqPihhcmd2KSk7CisgICAgcmV0dXJuIDA7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88932</attachid>
            <date>2011-04-09 13:38:23 -0700</date>
            <delta_ts>2011-04-11 11:41:04 -0700</delta_ts>
            <desc>Patch for ToT</desc>
            <filename>bug-57068-20110409133822.patch</filename>
            <type>text/plain</type>
            <size>43384</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMzODEKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCBkNzEyNTJiZWE0ZWFjMDc0ZjM0MTg5OTFjYjk0ZjM5NDc1ZjFjZDA2Li5hYWJj
NmNhODc3ZjA3ZGQxMjliM2Q5ZGY2MzljYzZiYTk3ODJiODQ0IDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDMtMzAgIE1hcnRpbiBS
b2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFtXZWJLaXQyXSBJbXBsZW1lbnQgYSBiYXNp
YyBXZWJLaXRUZXN0UnVubmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NzA2OAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZGVkIHJlZmVy
ZW5jZSB0byBXZWJLaXRUZXN0UnVubmVyIEdOVW1ha2VmaWxlLgorCiAyMDExLTA0LTA5ICBLZWl0
aCBLeXppdmF0ICA8a2VpdGgua3l6aXZhdEBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgTGFzemxvIEdvbWJvcy4KZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZp
bGUuYW0KaW5kZXggYWY1NDg5MWFhMTI2M2FhNmI5Nzk5M2ZmMmNhOTA1ZWEwMWMxZGQwNS4uOGM1
MDJmMDM0NmNiZWEwNTM2YWNiYjA2ZDBmY2NjNjY1ODQ2ZDIwNCAxMDA2NDQKLS0tIGEvR05VbWFr
ZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0KQEAgLTIzMCw2ICsyMzAsNyBAQCBpbmNsdWRl
IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCiBpZiBFTkFCTEVfV0VCS0lUMgogaW5jbHVk
ZSBTb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQogaW5jbHVkZSBUb29scy9NaW5pQnJvd3Nl
ci9ndGsvR05VbWFrZWZpbGUuYW0KK2luY2x1ZGUgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HTlVt
YWtlZmlsZS5hbQogIyBbR1RLXSBSZWZhY3RvciB0aGUgdHJhbnNsYXRpb25zIG5vdyB0aGF0IHdl
IGhhdmUgd2Via2l0MgogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTUxNTMKIHN0YW1wLXBvOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDA4OTRhNGU4MzZiODJmZDc4ZDJiOWFlOTRk
NmRiYmIwNTNiZGQyZGIuLjRiMjZkZmU1YTM1NTgwZmY5NjkzYzVkNGVmODIyMDkzODdkYzhkOTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMS0wMy0zMCAgTWFydGluIFJvYmluc29u
ICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW0dUS10gW1dlYktpdDJdIEltcGxlbWVudCBhIGJhc2ljIFdlYktp
dFRlc3RSdW5uZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU3MDY4CisKKyAgICAgICAgQWRkZWQgSW5qZWN0ZWRCdW5kbGUgc3VwcG9ydCBmb3IgR1RL
Ky4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
aDogQWRkZWQgdHlwZWRlZiBmb3IgR1RLKy4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL2d0ay9JbmplY3RlZEJ1bmRsZUd0ay5jcHA6IEFkZGVkIGltcGxlbWVudGF0aW9uLgor
ICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6bG9hZCk6IAorICAgICAgICAoV2ViS2l0
OjpJbmplY3RlZEJ1bmRsZTo6YWN0aXZhdGVNYWNGb250QXNjZW50SGFjayk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcDogUmVtb3ZlIHVubmVjZXNzYXJ5
IG1ldGhvZCBkZWZpbml0aW9uLgorCiAyMDExLTA0LTA4ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8
YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZS5oCmluZGV4IDY3NTVhMzlkZGE2ZDFiNjgxNmQ5OTE5MDEwYWUwNWQ0ZTA4YmY5ZTgu
LjMzZGViMzM1ZGZjZGNjOTM4ZjM4MWJjNzk2ZTY4YTQzZDcxNTBiZTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlLmgKQEAgLTM5LDYgKzM5LDEwIEBACiAjaW5jbHVkZSA8UUxpYnJhcnk+CiAjZW5kaWYKIAor
I2lmIFBMQVRGT1JNKEdUSykKK3R5cGVkZWYgc3RydWN0IF9HTW9kdWxlIEdNb2R1bGU7CisjZW5k
aWYKKwogbmFtZXNwYWNlIENvcmVJUEMgewogICAgIGNsYXNzIEFyZ3VtZW50RGVjb2RlcjsKICAg
ICBjbGFzcyBDb25uZWN0aW9uOwpAQCAtNTQsNyArNTgsNyBAQCB0eXBlZGVmIEhNT0RVTEUgUGxh
dGZvcm1CdW5kbGU7CiAjZWxpZiBQTEFURk9STShRVCkKIHR5cGVkZWYgUUxpYnJhcnkgUGxhdGZv
cm1CdW5kbGU7CiAjZWxpZiBQTEFURk9STShHVEspCi10eXBlZGVmIHZvaWQqIFBsYXRmb3JtQnVu
ZGxlOwordHlwZWRlZiA6OkdNb2R1bGUqIFBsYXRmb3JtQnVuZGxlOwogI2VuZGlmCiAKIGNsYXNz
IEltbXV0YWJsZUFycmF5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwCmluZGV4
IGJiZjI0ZTQzYjdkZmRkMDY5YjhkOGEzNjhjYTQxOTIyYzAxMmM5NTcuLmNhMWE0M2Y4Y2RjNWFl
ZTdmZTI5NmMxY2Y2NzZmMmQ3MTc3MWJiYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvZ3RrL0luamVjdGVkQnVuZGxlR3RrLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL2d0ay9JbmplY3RlZEJ1bmRs
ZUd0ay5jcHAKQEAgLTI5LDIwICsyOSwzMyBAQAogCiAjaW5jbHVkZSAiV0tCdW5kbGVBUElDYXN0
LmgiCiAjaW5jbHVkZSAiV0tCdW5kbGVJbml0aWFsaXplLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9O
b3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi1ib29sIEluamVjdGVkQnVuZGxlOjpsb2FkKEFQSU9iamVjdCop
Citib29sIEluamVjdGVkQnVuZGxlOjpsb2FkKEFQSU9iamVjdCogaW5pdGlhbGl6YXRpb25Vc2Vy
RGF0YSkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgbV9wbGF0Zm9ybUJ1bmRsZSA9IGdfbW9k
dWxlX29wZW4oZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKG1fcGF0aCkuZGF0YSgpLCBHX01PRFVM
RV9CSU5EX0xPQ0FMKTsKKyAgICBpZiAoIW1fcGxhdGZvcm1CdW5kbGUpIHsKKyAgICAgICAgZ193
YXJuaW5nKCJFcnJvciBsb2FkaW5nIHRoZSBpbmplY3RlZCBidW5kbGUgKCVzKTogJXMiLCBtX3Bh
dGgudXRmOCgpLmRhdGEoKSwgZ19tb2R1bGVfZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBXS0J1bmRsZUluaXRpYWxpemVGdW5jdGlvblB0ciBpbml0aWFsaXpl
RnVuY3Rpb24gPSAwOworICAgIGlmICghZ19tb2R1bGVfc3ltYm9sKG1fcGxhdGZvcm1CdW5kbGUs
ICJXS0J1bmRsZUluaXRpYWxpemUiLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmluaXRpYWxp
emVGdW5jdGlvbikpIHx8ICFpbml0aWFsaXplRnVuY3Rpb24pIHsKKyAgICAgICAgZ193YXJuaW5n
KCJFcnJvciBsb2FkaW5nIFdLQnVuZGxlSW5pdGlhbGl6ZSBzeW1ib2wgZnJvbSBpbmplY3RlZCBi
dW5kbGUuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbml0aWFsaXpl
RnVuY3Rpb24odG9BUEkodGhpcyksIHRvQVBJKGluaXRpYWxpemF0aW9uVXNlckRhdGEpKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6YWN0aXZhdGVNYWNGb250
QXNjZW50SGFjaygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Z3RrL1dlYlBhZ2VHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0
ay9XZWJQYWdlR3RrLmNwcAppbmRleCA1N2M5OTc3MWQ0NDE4MDVmNGVkZjk2ZWE1Y2ZmN2UxMDNh
YjIzYmZkLi4yMDRhMzNjYWRjMWRlMTg2NmNiY2UwMjgxZTZjNjNkYjkzZTEzMjhiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5j
cHAKQEAgLTExNiwxMCArMTE2LDQgQEAgU3RyaW5nIFdlYlBhZ2U6OmNhY2hlZFJlc3BvbnNlTUlN
RVR5cGVGb3JVUkwoY29uc3QgV2ViQ29yZTo6S1VSTCYpCiAgICAgcmV0dXJuIFN0cmluZygpOwog
fQogCi1ib29sIFdlYlBhZ2U6OnBsYXRmb3JtQ2FuSGFuZGxlUmVxdWVzdChjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGIwMmFlY2IyMzlmMTlmNDJmY2QzN2Zi
ZGVkZTJjNTE5MTJkZGEwNy4uMzJlYjA5NDk5ZjVkZGViODM5YWM5MGFlY2I2OTFkZTg1MDVlNDA3
OCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI5IEBACisyMDExLTAzLTMwICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdh
bGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbR1RLXSBbV2ViS2l0Ml0gSW1wbGVtZW50IGEgYmFzaWMgV2ViS2l0VGVzdFJ1bm5lcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTcwNjgKKworICAg
ICAgICBBZGQgYW4gaW1wbGVtZW50YXRpb24gb2YgV2ViS2l0VGVzdFJ1bm5lciBmb3IgR1RLKy4K
KworICAgICAgICAqIFNjcmlwdHMvYnVpbGQtd2Via2l0dGVzdHJ1bm5lcjogQWRkZWQga25vd2xl
ZGdlIG9mIEdUSysgVGVzdFJ1bm5lci4KKyAgICAgICAgKiBTY3JpcHRzL29sZC1ydW4td2Via2l0
LXRlc3RzOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3J1bi1sYXVuY2hlcjogRGl0dG8uCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRkaXJzLnBtOiBEaXR0by4KKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL0dOVW1ha2VmaWxlLmFtOiBBZGRlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvQWN0aXZhdGVGb250c0d0ay5jcHA6IEFk
ZGVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZ3RrL0luamVj
dGVkQnVuZGxlR3RrLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwLgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9n
dGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxh
dGZvcm1XZWJWaWV3Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9ndGsvUGxhdGZvcm1X
ZWJWaWV3R3RrLmNwcDogQWRkZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVz
dENvbnRyb2xsZXJHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2d0
ay9UZXN0SW52b2NhdGlvbkd0ay5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvZ3RrL0luamVjdGVkQnVuZGxlR3RrLmNwcC4KKyAgICAgICAg
KFdUUjo6VGVzdEludm9jYXRpb246OmR1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2d0ay9tYWluLmNwcDogQ29waWVkIGZyb20gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVH
dGsuY3BwLgorICAgICAgICAobWFpbik6IEFkZGVkLgorCiAyMDExLTA0LTA5ICBLZWl0aCBLeXpp
dmF0ICA8a2VpdGgua3l6aXZhdEBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTGFz
emxvIEdvbWJvcy4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0dGVzdHJ1
bm5lciBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0dGVzdHJ1bm5lcgppbmRleCBlOTZkZDZh
MzczNDc3ZTJkZGY0ODg0NTAxNWI4OWJiNGU0MzA3M2U1Li5mMDNjMTc5OWE3N2ZlZTMzZjgzZjlm
ODk1OGUxYWZhYzA2ZTk1NGU4IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtp
dHRlc3RydW5uZXIKKysrIGIvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXR0ZXN0cnVubmVyCkBA
IC02Myw4ICs2Myw4IEBAIGlmIChpc0FwcGxlTWFjV2ViS2l0KCkpIHsKICAgICAkcmVzdWx0ID0g
YnVpbGRYQ29kZVByb2plY3QoIldlYktpdFRlc3RSdW5uZXIiLCAkY2xlYW4sIFhjb2RlT3B0aW9u
cygpLCBAQVJHVik7CiB9IGVsc2lmIChpc0FwcGxlV2luV2ViS2l0KCkpIHsKICAgICAkcmVzdWx0
ID0gYnVpbGRWaXN1YWxTdHVkaW9Qcm9qZWN0KCJXZWJLaXRUZXN0UnVubmVyLnNsbiIsICRjbGVh
bik7Ci19IGVsc2lmIChpc1F0KCkpIHsKLSAgICAjIFF0IGJ1aWxkcyBldmVyeXRoaW5nIGluIG9u
ZSBzaG90LiBObyBuZWVkIHRvIGJ1aWxkIGFueXRoaW5nIGhlcmUuCit9IGVsc2lmIChpc1F0KCkg
fHwgaXNHdGsoKSkgeworICAgICMgUXQgYW5kIEdUSysgYnVpbGQgZXZlcnl0aGluZyBpbiBvbmUg
c2hvdC4gTm8gbmVlZCB0byBidWlsZCBhbnl0aGluZyBoZXJlLgogICAgICRyZXN1bHQgPSAwOwog
fSBlbHNlIHsKICAgICBkaWUgIldlYktpdFRlc3RSdW5uZXIgaXMgbm90IHN1cHBvcnRlZCBvbiB0
aGlzIHBsYXRmb3JtLlxuIjsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJr
aXQtdGVzdHMgYi9Ub29scy9TY3JpcHRzL29sZC1ydW4td2Via2l0LXRlc3RzCmluZGV4IDUxZjA4
M2YzYTE0NjM0Mjg5MGY3NjA1MzFlNTkxMjA2NTE2ODNmZTcuLjM3NWY5YTMxOGYwMDk2ZTA5N2Y4
N2M5NTRiMTU0M2MyOWQyNGQ1MTcgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13
ZWJraXQtdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cwpAQCAt
MzgwLDYgKzM4MCw5IEBAIGlmICgkdXNlV2ViS2l0VGVzdFJ1bm5lcikgewogICAgIH0gZWxzaWYg
KGlzUXQoKSkgewogICAgICAgICAkcmVhbFBsYXRmb3JtID0gJHBsYXRmb3JtOwogICAgICAgICAk
cGxhdGZvcm0gPSAicXQtd2syIjsKKyAgICB9IGVsc2lmIChpc0d0aygpKSB7CisgICAgICAgICRy
ZWFsUGxhdGZvcm0gPSAkcGxhdGZvcm07CisgICAgICAgICRwbGF0Zm9ybSA9ICJndGstd2syIjsK
ICAgICB9CiB9CiAKQEAgLTExNzYsNiArMTE3OSw3IEBAIGNsb3NlIEhUTUw7CiBteSBAY29uZmln
dXJhdGlvbkFyZ3MgPSBhcmd1bWVudHNGb3JDb25maWd1cmF0aW9uKCk7CiAKIGlmIChpc0d0aygp
KSB7CisgIHB1c2goQGNvbmZpZ3VyYXRpb25BcmdzLCAnLTInKSBpZiAkdXNlV2ViS2l0VGVzdFJ1
bm5lcjsKICAgc3lzdGVtICJUb29scy9TY3JpcHRzL3J1bi1sYXVuY2hlciIsIEBjb25maWd1cmF0
aW9uQXJncywgImZpbGU6Ly8iLiR0ZXN0UmVzdWx0cyBpZiAkbGF1bmNoU2FmYXJpOwogfSBlbHNp
ZiAoaXNRdCgpKSB7CiAgIHVuc2hpZnQgQGNvbmZpZ3VyYXRpb25BcmdzLCBxdygtZ3JhcGhpY3Nz
eXN0ZW0gcmFzdGVyIC1zdHlsZSB3aW5kb3dzKTsKQEAgLTE1MDMsNiArMTUwNywxMSBAQCBzdWIg
b3BlbkR1bXBUb29sKCkKICAgICBpZiAoaXNHdGsoKSkgewogICAgICAgICAkQ0xFQU5fRU5We0dU
S19NT0RVTEVTfSA9ICJnYWlsIjsKICAgICAgICAgJENMRUFOX0VOVntXRUJLSVRfSU5TUEVDVE9S
X1BBVEh9ID0gIiRwcm9kdWN0RGlyL3Jlc291cmNlcy9pbnNwZWN0b3IiOworCisgICAgICAgIGlm
ICgkdXNlV2ViS2l0VGVzdFJ1bm5lcikgeworICAgICAgICAgICAgbXkgJGluamVjdGVkQnVuZGxl
UGF0aCA9IHByb2R1Y3REaXIoKSAuICIvTGlicmFyaWVzLy5saWJzL2xpYlRlc3RSdW5uZXJJbmpl
Y3RlZEJ1bmRsZSI7CisgICAgICAgICAgICAkQ0xFQU5fRU5We1RFU1RfUlVOTkVSX0lOSkVDVEVE
X0JVTkRMRV9GSUxFTkFNRX0gPSAkaW5qZWN0ZWRCdW5kbGVQYXRoOworICAgICAgICB9CiAgICAg
fQogCiAgICAgaWYgKGlzUXQoKSkgewpAQCAtMTY5Niw2ICsxNzA1LDggQEAgc3ViIGV4cGVjdGVk
RGlyZWN0b3J5Rm9yVGVzdCgkOyQ7JCkKICAgICBpZiAoaXNBcHBsZVdpbldlYktpdCgpKSB7CiAg
ICAgICAgIHB1c2ggQGV4dHJhUGxhdGZvcm1zLCAibWFjLXdrMiIgaWYgJHBsYXRmb3JtIGVxICJ3
aW4td2syIjsKICAgICAgICAgcHVzaCBAZXh0cmFQbGF0Zm9ybXMsIHF3KG1hYy1zbm93bGVvcGFy
ZCBtYWMpOworICAgIH0gZWxzaWYgKGlzR3RrKCkpIHsKKyAgICAgICAgcHVzaCBAZXh0cmFQbGF0
Zm9ybXMsICJndGsiIGlmICRwbGF0Zm9ybSBlcSAiZ3RrLXdrMiI7CiAgICAgfQogICAKICAgICBw
dXNoIEBkaXJlY3RvcmllcywgbWFwIHsgY2F0ZGlyKCRwbGF0Zm9ybUJhc2VEaXJlY3RvcnksICRf
KSB9IEBleHRyYVBsYXRmb3JtczsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWxhdW5j
aGVyIGIvVG9vbHMvU2NyaXB0cy9ydW4tbGF1bmNoZXIKaW5kZXggNzMxZmJjMDRjMWJiNTgwMGRl
Y2E0OGFjMjg3M2U1ZWE4ZGU2OGM1Mi4uMDBjNzE1ZDQ3NTQ2YWZkMDAwZGY0YmRkODM5YzA3MGY3
OTQ2Nzc4OCAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tbGF1bmNoZXIKKysrIGIvVG9v
bHMvU2NyaXB0cy9ydW4tbGF1bmNoZXIKQEAgLTY1LDcgKzY1LDExIEBAIGlmIChpc1F0KCkpIHsK
IH0gZWxzZSB7CiAKICAgICBpZiAoaXNHdGsoKSkgewotICAgICAgICAkbGF1bmNoZXJQYXRoID0g
Y2F0ZGlyKCRsYXVuY2hlclBhdGgsICJQcm9ncmFtcyIsICJHdGtMYXVuY2hlciIpOworICAgICAg
ICBpZiAoaXNXSzIoKSkgeworICAgICAgICAgICAgJGxhdW5jaGVyUGF0aCA9IGNhdGRpcigkbGF1
bmNoZXJQYXRoLCAiUHJvZ3JhbXMiLCAiTWluaUJyb3dzZXIiKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICRsYXVuY2hlclBhdGggPSBjYXRkaXIoJGxhdW5jaGVyUGF0aCwgIlByb2dy
YW1zIiwgIkd0a0xhdW5jaGVyIik7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKGlz
RWZsKCkpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0ZGlycy5wbQppbmRleCA4YzAzZjNiOTMzZWY0NDMzZmE0N2M3NWQwZDNl
OTBmYzU5MTYyN2U2Li41ZDQ4NTZlYmMwMjBlMTE2ZjM3N2RjYWFkZGQ2Yzc0NzA3YTFlYWJkIDEw
MDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRkaXJzLnBtCkBAIC02MzAsMTIgKzYzMCwxNyBAQCBzdWIgYnVpbHREeWxpYlBhdGhG
b3JOYW1lCiAgICAgICAgIHJldHVybiAiJGNvbmZpZ3VyYXRpb25Qcm9kdWN0RGlyL2xpYnd4d2Vi
a2l0LmR5bGliIjsKICAgICB9CiAgICAgaWYgKGlzR3RrKCkpIHsKLSAgICAgICAgbXkgJGxpYnJh
cnlEaXIgPSAiJGNvbmZpZ3VyYXRpb25Qcm9kdWN0RGlyLy5saWJzLyI7Ci0gICAgICAgIG15ICRl
eHRlbnNpb24gPSBpc0RhcndpbigpID8gImR5bGliIiA6ICJzbyI7Ci0gICAgICAgIGlmICgtZSAk
bGlicmFyeURpciAuICJsaWJ3ZWJraXRndGstMy4wLiRleHRlbnNpb24iKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gJGxpYnJhcnlEaXIgLiAibGlid2Via2l0Z3RrLTMuMC4kZXh0ZW5zaW9uIjsKKyAg
ICAgICAgIyBXZWJLaXRHVEsrIGZvciBHVEsyLCBXZWJLaXRHVEsrIGZvciBHVEszLCBhbmQgV2Vi
S2l0MiByZXNwZWN0aXZlbHkuCisgICAgICAgIG15IEBsaWJyYXJpZXMgPSAoImxpYndlYmtpdGd0
ay0xLjAiLCAibGlid2Via2l0Z3RrLTMuMCIsICJsaWJ3ZWJraXQyZ3RrLTEuMCIpOworICAgICAg
ICBteSAkZXh0ZW5zaW9uID0gaXNEYXJ3aW4oKSA/ICIuZHlsaWIiIDogIi5zbyI7CisKKyAgICAg
ICAgZm9yZWFjaCAoQGxpYnJhcmllcykgeworICAgICAgICAgICAgbXkgJGxpYnJhcnkgPSAiJGNv
bmZpZ3VyYXRpb25Qcm9kdWN0RGlyLy5saWJzLyIgLiAkXyAgLiAkZXh0ZW5zaW9uOworICAgICAg
ICAgICAgaWYgKC1lICRsaWJyYXJ5KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICRsaWJyYXJ5
OworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAkbGlicmFyeURpciAu
ICJsaWJ3ZWJraXRndGstMS4wLiRleHRlbnNpb24iOworICAgICAgICByZXR1cm4gIk5vdEZvdW5k
IjsKICAgICB9CiAgICAgaWYgKGlzRWZsKCkpIHsKICAgICAgICAgcmV0dXJuICIkY29uZmlndXJh
dGlvblByb2R1Y3REaXIvJGxpYnJhcnlOYW1lLy4uL1dlYktpdC9saWJld2Via2l0LnNvIjsKQEAg
LTE5NjMsNiArMTk2OCwxMiBAQCBzdWIgcnVuV2ViS2l0VGVzdFJ1bm5lcgogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgcmV0dXJuIHN5c3RlbSAkd2ViS2l0VGVzdFJ1bm5lclBhdGgsIEBB
UkdWOwogICAgICAgICB9CisgICAgfSBlbHNpZiAoaXNHdGsoKSkgeworICAgICAgICBteSAkcHJv
ZHVjdERpciA9IHByb2R1Y3REaXIoKTsKKyAgICAgICAgbXkgJGluamVjdGVkQnVuZGxlUGF0aCA9
ICIkcHJvZHVjdERpci9MaWJyYXJpZXMvLmxpYnMvbGliVGVzdFJ1bm5lckluamVjdGVkQnVuZGxl
IjsKKyAgICAgICAgcHJpbnQgIlN0YXJ0aW5nIFdlYktpdFRlc3RSdW5uZXIgd2l0aCBURVNUX1JV
Tk5FUl9JTkpFQ1RFRF9CVU5ETEVfRklMRU5BTUUgc2V0IHRvIHBvaW50IHRvICRpbmplY3RlZEJ1
bmRsZVBhdGguXG4iOworICAgICAgICAkRU5We1RFU1RfUlVOTkVSX0lOSkVDVEVEX0JVTkRMRV9G
SUxFTkFNRX0gPSAkaW5qZWN0ZWRCdW5kbGVQYXRoOworICAgICAgICByZXR1cm4gc3lzdGVtICIk
cHJvZHVjdERpci9Qcm9ncmFtcy9XZWJLaXRUZXN0UnVubmVyIiwgQEFSR1Y7CiAgICAgfQogCiAg
ICAgcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dOVW1ha2Vm
aWxlLmFtIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HTlVtYWtlZmlsZS5hbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42MmM3ODRlZWM3ZDZmNTQxMTQ1MzMwZGE4MmRlMWYxZTM5YTg1Y2Y2Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HTlVtYWtlZmlsZS5hbQpAQCAtMCwwICsxLDEy
MCBAQAorQlVJTFRfU09VUkNFUyArPSBcCisJZ2VuZXJhdGUtd2Via2l0dGVzdHJ1bm5lci1mb3J3
YXJkaW5nLWhlYWRlcnMKKworZ2VuZXJhdGUtd2Via2l0dGVzdHJ1bm5lci1mb3J3YXJkaW5nLWhl
YWRlcnM6ICQoV2ViS2l0MikvU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwg
JChQcm9ncmFtc19XZWJLaXRUZXN0UnVubmVyX1NPVVJDRVMpCisJJChBTV9WX0dFTikkKFBFUkwp
ICQ8ICQoc3JjZGlyKS9Ub29scy9XZWJLaXRUZXN0UnVubmVyICQoR0VOU09VUkNFU19XRUJLSVQy
KS9pbmNsdWRlIGd0aworCSQoQU1fVl9HRU4pJChQRVJMKSAkPCAkKHNyY2RpcikvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lciAkKEdFTlNPVVJDRVNfV0VCS0lUMikvaW5jbHVkZSBzb3VwCisKK25vaW5z
dF9QUk9HUkFNUyArPSBcCisJUHJvZ3JhbXMvV2ViS2l0VGVzdFJ1bm5lcgorCitQcm9ncmFtc19X
ZWJLaXRUZXN0UnVubmVyX1NPVVJDRVMgPSBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsv
bWFpbi5jcHAgXAorCVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1BsYXRmb3JtV2ViVmlld0d0
ay5jcHAgXAorCVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250cm9sbGVyR3RrLmNw
cCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVzdEludm9jYXRpb25HdGsuY3BwIFwK
KwlUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oIFwKKwlUb29scy9XZWJL
aXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmNwcCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5oIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcCBcCisJ
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5oCisKK1Byb2dyYW1zX1dlYktp
dFRlc3RSdW5uZXJfQ1BQRkxBR1MgPSBcCisJLWluY2x1ZGUgVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9XZWJLaXRUZXN0UnVubmVyUHJlZml4LmggXAorCS1JJChzcmNkaXIpL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIgXAorCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvaW5j
bHVkZSBcCisJJChnbG9iYWxfY3BwZmxhZ3MpIFwKKwkkKGphdmFzY3JpcHRjb3JlX2NwcGZsYWdz
KSBcCisJJChHTE9CQUxERVBTX0NGTEFHUykgXAorCSQoQ0FJUk9fQ0ZMQUdTKSBcCisJJChHVEtf
Q0ZMQUdTKSBcCisJJChMSUJTT1VQX0NGTEFHUykKK1Byb2dyYW1zX1dlYktpdFRlc3RSdW5uZXJf
Q1hYRkxBR1MgPSAkKGdsb2JhbF9jeHhmbGFncykKK1Byb2dyYW1zX1dlYktpdFRlc3RSdW5uZXJf
Q0ZMQUdTID0gJChnbG9iYWxfY2ZsYWdzKQorCitQcm9ncmFtc19XZWJLaXRUZXN0UnVubmVyX0xE
QUREID0gXAorCWxpYndlYmtpdDJndGstQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdF
QktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEgXAorCSQoR0xPQkFMREVQU19MSUJTKSBcCisJ
JChDQUlST19MSUJTKSBcCisJJChHVEtfTElCUykgXAorCSQoR0xJQl9MSUJTKSBcCisJJChMSUJT
T1VQX0xJQlMpIFwKKwkkKEZSRUVUWVBFX0xJQlMpIFwKKwkkKFdJTk1NX0xJQlMpCisKK1Byb2dy
YW1zX1dlYktpdFRlc3RSdW5uZXJfTERGTEFHUyA9IFwKKwktbm8tZmFzdC1pbnN0YWxsIFwKKwkt
bm8taW5zdGFsbAorCisjIFRoZSBJbmplY3RlZEJ1bmRsZSBsaWJyYXJ5IGFsbG93cyB0aGUgcmVu
ZGVyIHByb2Nlc3MgdG8gbG9hZCBoYXJuZXNzIGNvZGUuCitub2luc3RfTFRMSUJSQVJJRVMgKz0g
TGlicmFyaWVzL2xpYlRlc3RSdW5uZXJJbmplY3RlZEJ1bmRsZS5sYQorCitpbmplY3RlZF9idW5k
bGVfYnVpbHRfc291cmNlcyA9IFwKKwlEZXJpdmVkU291cmNlcy9JbmplY3RlZEJ1bmRsZS9KU0V2
ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwIFwKKwlEZXJpdmVkU291cmNlcy9JbmplY3RlZEJ1bmRs
ZS9KU0dDQ29udHJvbGxlci5jcHAgXAorCURlcml2ZWRTb3VyY2VzL0luamVjdGVkQnVuZGxlL0pT
TGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCitCVUlMVF9TT1VSQ0VTICs9ICQoaW5qZWN0ZWRfYnVu
ZGxlX2J1aWx0X3NvdXJjZXMpCisKK0xpYnJhcmllc19saWJUZXN0UnVubmVySW5qZWN0ZWRCdW5k
bGVfbGFfU09VUkNFUyA9IFwKKwkkKGluamVjdGVkX2J1bmRsZV9idWlsdF9zb3VyY2VzKSBcCisJ
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY3RpdmF0ZUZvbnRzLmggXAor
CVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvSlNXcmFwcGFi
bGUuaCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9K
U1dyYXBwZXIuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Jp
bmRpbmdzL0pTV3JhcHBlci5oIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaCBcCisJVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuY3BwIFwKKwlUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5oIFwKKwlUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9BY3RpdmF0ZUZvbnRzR3RrLmNwcCBcCisJ
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVH
dGsuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9MYXlv
dXRUZXN0Q29udHJvbGxlckd0ay5jcHAgXAorCVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmggXAorCVRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVNYWluLmNwcCBcCisJVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwIFwKKwlUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5oIFwKKwlU
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVy
LmNwcCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0
Q29udHJvbGxlci5oCisKK0xpYnJhcmllc19saWJUZXN0UnVubmVySW5qZWN0ZWRCdW5kbGVfbGFf
TERGTEFHUyA9IFwKKwktcnBhdGggJHtzaGVsbCBwd2R9LyQodG9wX2J1aWxkZGlyKS8uLi91bml4
L1Rlc3ROZXRzY2FwZVBsdWdpbi8ubGlicyBcCisJJChub191bmRlZmluZWQpIFwKKwktYXZvaWQt
dmVyc2lvbiBcCisJLW1vZHVsZQorCitMaWJyYXJpZXNfbGliVGVzdFJ1bm5lckluamVjdGVkQnVu
ZGxlX2xhX0NQUEZMQUdTID0gXAorCS1ERk9OVFNfQ09ORl9ESVI9XCIke3NoZWxsIHB3ZH0vJHtz
cmNkaXJ9L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9mb250c1wiIFwKKwktaW5jbHVkZSBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXJQcmVmaXguaCBcCisJLUkkKHNyY2Rp
cikvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lciBcCisJLUkkKHNyY2RpcikvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZSBcCisJLUkkKHNyY2RpcikvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncyBcCisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZl
ZFNvdXJjZXMvSW5qZWN0ZWRCdW5kbGUgXAorCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvaW5jbHVkZSBcCisJJChnbG9iYWxfY3BwZmxhZ3MpIFwKKwkkKGphdmFzY3Jp
cHRjb3JlX2NwcGZsYWdzKSBcCisJJChHTE9CQUxERVBTX0NGTEFHUykgXAorCSQoQ0FJUk9fQ0ZM
QUdTKSBcCisJJChHTElCX0NGTEFHUykgXAorCSQoR1RLX0NGTEFHUykgXAorCSQoTElCU09VUF9D
RkxBR1MpCitMaWJyYXJpZXNfbGliVGVzdFJ1bm5lckluamVjdGVkQnVuZGxlX2xhX0NYWEZMQUdT
ID0gJChnbG9iYWxfY3h4ZmxhZ3MpCitMaWJyYXJpZXNfbGliVGVzdFJ1bm5lckluamVjdGVkQnVu
ZGxlX2xhX0NGTEFHUyA9ICQoZ2xvYmFsX2NmbGFncykKKworY29kZV9nZW5lcmF0aW9uX2RlcGVu
ZGVuY2llcyA9IFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRp
bmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0gXAorCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvSURMUGFyc2VyLnBtIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lE
TFN0cnVjdHVyZS5wbSBcCisJU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JbkZpbGVz
UGFyc2VyLnBtIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJp
bmRpbmdzLnBsCisKK0Rlcml2ZWRTb3VyY2VzL0luamVjdGVkQnVuZGxlL0pTJS5jcHA6IFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvJS5pZGwgJChjb2RlX2dl
bmVyYXRpb25fZGVwZW5kZW5jaWVzKQorCSQoQU1fVl9HRU4pJChQRVJMKSBcCisJCS1JICQoc3Jj
ZGlyKS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzIFwKKwkJLUkgJChzcmNkaXIpL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MgXAorCQkkKHNyY2Rp
cikvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCBc
CisJCS0tZGVmaW5lcyBcIlwiIC0tZ2VuZXJhdG9yIFRlc3RSdW5uZXIgXAorCQktLWluY2x1ZGUg
JChzcmNkaXIpL1Rvb2xzL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzIFwKKwkJLS1vdXRwdXREaXIg
JCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL0luamVjdGVkQnVuZGxlIFwKKwkJJDwKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVz
dENvbnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5
b3V0VGVzdENvbnRyb2xsZXIuaAppbmRleCBjYzFiODVlNTE3YzAyOGJlZjhhZjEzYTUxNzk4OGEz
MmZlNTc4ZGYwLi5lNzdjYWQ4OGEwMmYwZjhjZjExMzRkMDE1M2Y3YjAwNmE5NDIwM2I3IDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RD
b250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5oCkBAIC00MCw2ICs0MCw4IEBAIHR5cGVkZWYgVUlOVF9QVFIg
UGxhdGZvcm1UaW1lclJlZjsKICNlbGlmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPFFUaW1lcj4K
IHR5cGVkZWYgUVRpbWVyIFBsYXRmb3JtVGltZXJSZWY7CisjZWxpZiBQTEFURk9STShHVEspCit0
eXBlZGVmIHVuc2lnbmVkIGludCBQbGF0Zm9ybVRpbWVyUmVmOwogI2VuZGlmCiAKIG5hbWVzcGFj
ZSBXVFIgewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9ndGsvQWN0aXZhdGVGb250c0d0ay5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL2d0ay9BY3RpdmF0ZUZvbnRzR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZmFlZmM4Nzhm
NDhiMzk2YTEwN2Q2MTkyZjcxMTJkOTE1NDc3ZWM5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvQWN0aXZhdGVGb250c0d0ay5jcHAK
QEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QWN0aXZhdGVGb250cy5oIgorCisjaW5jbHVkZSA8Zm9udGNvbmZpZy9mb250Y29uZmlnLmg+Cisj
aW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKwor
bmFtZXNwYWNlIFdUUiB7CisKK3ZvaWQgaW5pdGlhbGl6ZUd0a1NldHRpbmdzKCkKK3sKKworICAg
IEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a19zZXR0aW5nc19nZXRfZGVmYXVsdCgpOworICAg
IGlmICghc2V0dGluZ3MpCisgICAgICAgIHJldHVybjsKKyAgICBnX29iamVjdF9zZXQoc2V0dGlu
Z3MsIAorICAgICAgICAgICAgICAgICAiZ3RrLXhmdC1kcGkiLCA5ODMwNCwKKyAgICAgICAgICAg
ICAgICAgImd0ay14ZnQtYW50aWFsaWFzIiwgMSwKKyAgICAgICAgICAgICAgICAgImd0ay14ZnQt
aGludGluZyIsIDAsCisgICAgICAgICAgICAgICAgICJndGstZm9udC1uYW1lIiwgIkxpYmVyYXRp
b24gU2FucyAxMiIsCisgICAgICAgICAgICAgICAgICJndGstdGhlbWUtbmFtZSIsICJSYWxlaWdo
IiwgTlVMTCk7CisgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAiZ3RrLXhmdC1yZ2JhIiwgIm5v
bmUiLCBOVUxMKTsKK30KKwordm9pZCBpbml0aXRpYWxpemVGb250Q29uZmlnU2V0dGluZygpCit7
CisgICAgRmNJbml0KCk7CisKKyAgICAvLyBJZiBhIHRlc3QgcmVzdWx0ZWQgYSBmb250IGJlaW5n
IGFkZGVkIG9yIHJlbW92ZWQgdmlhIHRoZSBAZm9udC1mYWNlIHJ1bGUsIHRoZW4KKyAgICAvLyB3
ZSB3YW50IHRvIHJlc2V0IHRoZSBGb250Q29uZmlnIGNvbmZpZ3VyYXRpb24gdG8gcHJldmVudCBp
dCBmcm9tIGFmZmVjdGluZyBvdGhlciB0ZXN0cy4KKyAgICBzdGF0aWMgaW50IG51bUZvbnRzID0g
MDsKKyAgICBGY0ZvbnRTZXQqIGFwcEZvbnRTZXQgPSBGY0NvbmZpZ0dldEZvbnRzKDAsIEZjU2V0
QXBwbGljYXRpb24pOworICAgIGlmIChhcHBGb250U2V0ICYmIG51bUZvbnRzICYmIGFwcEZvbnRT
ZXQtPm5mb250ID09IG51bUZvbnRzKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBMb2FkIG91
ciBjb25maWd1cmF0aW9uIGZpbGUsIHdoaWNoIHNldHMgdXAgcHJvcGVyIGFsaWFzZXMgZm9yIGZh
bWlseQorICAgIC8vIG5hbWVzIGxpa2Ugc2Fucywgc2VyaWYgYW5kIG1vbm9zcGFjZS4KKyAgICBG
Y0NvbmZpZyogY29uZmlnID0gRmNDb25maWdDcmVhdGUoKTsKKyAgICBHT3duUHRyPGdjaGFyPiBm
b250Q29uZmlnRmlsZW5hbWUoZ19idWlsZF9maWxlbmFtZShGT05UU19DT05GX0RJUiwgImZvbnRz
LmNvbmYiLCBOVUxMKSk7CisgICAgaWYgKCFnX2ZpbGVfdGVzdChmb250Q29uZmlnRmlsZW5hbWUu
Z2V0KCksIEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKQorICAgICAgICBnX2Vycm9yKCJDYW5ub3Qg
ZmluZCBmb250cy5jb25mIGF0ICVzXG4iLCBmb250Q29uZmlnRmlsZW5hbWUuZ2V0KCkpOworICAg
IGlmICghRmNDb25maWdQYXJzZUFuZExvYWQoY29uZmlnLCByZWludGVycHJldF9jYXN0PEZjQ2hh
cjgqPihmb250Q29uZmlnRmlsZW5hbWUuZ2V0KCkpLCB0cnVlKSkKKyAgICAgICAgZ19lcnJvcigi
Q291bGRuJ3QgbG9hZCBmb250IGNvbmZpZ3VyYXRpb24gZmlsZSBmcm9tOiAlcyIsIGZvbnRDb25m
aWdGaWxlbmFtZS5nZXQoKSk7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZm9udFBh
dGhzW11bMl0gPSB7CisgICAgICAgIHsgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWxp
YmVyYXRpb24vTGliZXJhdGlvbk1vbm8tQm9sZEl0YWxpYy50dGYiLAorICAgICAgICAgICIvdXNy
L3NoYXJlL2ZvbnRzL2xpYmVyYXRpb24vTGliZXJhdGlvbk1vbm8tQm9sZEl0YWxpYy50dGYiLCB9
LAorICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1saWJlcmF0aW9uL0xp
YmVyYXRpb25Nb25vLUJvbGQudHRmIiwKKyAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy9saWJl
cmF0aW9uL0xpYmVyYXRpb25Nb25vLUJvbGQudHRmIiwgfSwKKyAgICAgICAgeyAiL3Vzci9zaGFy
ZS9mb250cy90cnVldHlwZS90dGYtbGliZXJhdGlvbi9MaWJlcmF0aW9uTW9uby1JdGFsaWMudHRm
IiwKKyAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy9saWJlcmF0aW9uL0xpYmVyYXRpb25Nb25v
LUl0YWxpYy50dGYiLCB9LAorICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0
Zi1saWJlcmF0aW9uL0xpYmVyYXRpb25Nb25vLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgICAiL3Vz
ci9zaGFyZS9mb250cy9saWJlcmF0aW9uL0xpYmVyYXRpb25Nb25vLVJlZ3VsYXIudHRmIiwgfSwK
KyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtbGliZXJhdGlvbi9MaWJl
cmF0aW9uU2Fucy1Cb2xkSXRhbGljLnR0ZiIsCisgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMv
bGliZXJhdGlvbi9MaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljLnR0ZiIsIH0sCisgICAgICAgIHsg
Ii91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWxpYmVyYXRpb24vTGliZXJhdGlvblNhbnMt
Qm9sZC50dGYiLAorICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL2xpYmVyYXRpb24vTGliZXJh
dGlvblNhbnMtQm9sZC50dGYiLCB9LAorICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0
eXBlL3R0Zi1saWJlcmF0aW9uL0xpYmVyYXRpb25TYW5zLUl0YWxpYy50dGYiLAorICAgICAgICAg
ICIvdXNyL3NoYXJlL2ZvbnRzL2xpYmVyYXRpb24vTGliZXJhdGlvblNhbnMtSXRhbGljLnR0ZiIs
IH0sCisgICAgICAgIHsgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWxpYmVyYXRpb24v
TGliZXJhdGlvblNhbnMtUmVndWxhci50dGYiLAorICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRz
L2xpYmVyYXRpb24vTGliZXJhdGlvblNhbnMtUmVndWxhci50dGYiLCB9LAorICAgICAgICB7ICIv
dXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1saWJlcmF0aW9uL0xpYmVyYXRpb25TZXJpZi1C
b2xkSXRhbGljLnR0ZiIsCisgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvbGliZXJhdGlvbi9M
aWJlcmF0aW9uU2VyaWYtQm9sZEl0YWxpYy50dGYiLCB9LAorICAgICAgICB7ICIvdXNyL3NoYXJl
L2ZvbnRzL3RydWV0eXBlL3R0Zi1saWJlcmF0aW9uL0xpYmVyYXRpb25TZXJpZi1Cb2xkLnR0ZiIs
CisgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvbGliZXJhdGlvbi9MaWJlcmF0aW9uU2VyaWYt
Qm9sZC50dGYiLCB9LAorICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1s
aWJlcmF0aW9uL0xpYmVyYXRpb25TZXJpZi1JdGFsaWMudHRmIiwKKyAgICAgICAgICAiL3Vzci9z
aGFyZS9mb250cy9saWJlcmF0aW9uL0xpYmVyYXRpb25TZXJpZi1JdGFsaWMudHRmIiwgfSwKKyAg
ICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtbGliZXJhdGlvbi9MaWJlcmF0
aW9uU2VyaWYtUmVndWxhci50dGYiLAorICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL2xpYmVy
YXRpb24vTGliZXJhdGlvblNlcmlmLVJlZ3VsYXIudHRmIiwgfSwKKyAgICAgICAgeyAiL3Vzci9z
aGFyZS9mb250cy90cnVldHlwZS90dGYtZGVqYXZ1L0RlamFWdVNhbnMudHRmIiwKKyAgICAgICAg
ICAiL3Vzci9zaGFyZS9mb250cy9kZWphdnUvRGVqYVZ1U2Fucy50dGYiLCB9LAorICAgICAgICB7
ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1kZWphdnUvRGVqYVZ1U2VyaWYudHRmIiwK
KyAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy9kZWphdnUvRGVqYVZ1U2VyaWYudHRmIiwgfSwK
KworICAgICAgICAvLyBNYXRoTUwgdGVzdHMgcmVxdWlyZSB0aGUgU1RJWCBmb250cy4KKyAgICAg
ICAgeyAiL3Vzci9zaGFyZS9mb250cy9vcGVudHlwZS9zdGl4L1NUSVhHZW5lcmFsLm90ZiIsCisg
ICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvc3RpeC9TVElYR2VuZXJhbC5vdGYiIH0sCisgICAg
ICAgIHsgIi91c3Ivc2hhcmUvZm9udHMvb3BlbnR5cGUvc3RpeC9TVElYR2VuZXJhbEJvbEl0YS5v
dGYiLAorICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3N0aXgvU1RJWEdlbmVyYWxCb2xJdGEu
b3RmIiB9LAorICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL29wZW50eXBlL3N0aXgvU1RJWEdl
bmVyYWxCb2wub3RmIiwKKyAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy9zdGl4L1NUSVhHZW5l
cmFsQm9sLm90ZiIgfSwKKyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy9vcGVudHlwZS9zdGl4
L1NUSVhHZW5lcmFsSXRhbGljLm90ZiIsCisgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvc3Rp
eC9TVElYR2VuZXJhbEl0YWxpYy5vdGYiIH0KKyAgICB9OworCisgICAgLy8gVE9ETzogU29tZSB0
ZXN0cyB1c2UgTHVjaWRhLiBXZSBzaG91bGQgbG9hZCB0aGVzZSBhcyB3ZWxsLCBvbmNlIGl0IGJl
Y29tZXMKKyAgICAvLyBjbGVhciBob3cgdG8gaW5zdGFsbCB0aGVzZSBmb250cyBlYXNpbHkgb24g
RmVkb3JhLgorICAgIGZvciAoc2l6ZV90IGZvbnQgPSAwOyBmb250IDwgR19OX0VMRU1FTlRTKGZv
bnRQYXRocyk7IGZvbnQrKykgeworICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAg
IGZvciAoc2l6ZV90IHBhdGggPSAwOyBwYXRoIDwgMjsgcGF0aCsrKSB7CisKKyAgICAgICAgICAg
IGlmIChnX2ZpbGVfdGVzdChmb250UGF0aHNbZm9udF1bcGF0aF0sIEdfRklMRV9URVNUX0VYSVNU
UykpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYg
KCFGY0NvbmZpZ0FwcEZvbnRBZGRGaWxlKGNvbmZpZywgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBG
Y0NoYXI4Kj4oZm9udFBhdGhzW2ZvbnRdW3BhdGhdKSkpCisgICAgICAgICAgICAgICAgICAgIGdf
ZXJyb3IoIkNvdWxkIG5vdCBsb2FkIGZvbnQgYXQgJXMhIiwgZm9udFBhdGhzW2ZvbnRdW3BhdGhd
KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAg
IGdfZXJyb3IoIkNvdWxkIG5vdCBmaW5kIGZvbnQgYXQgJXMuIEVpdGhlciBpbnN0YWxsIHRoaXMg
Zm9udCBvciBmaWxlIGEgYnVnICIKKyAgICAgICAgICAgICAgICAgICAgImF0IGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcgaWYgaXQgaXMgaW5zdGFsbGVkIGluIGFub3RoZXIgbG9jYXRpb24uIiwKKyAg
ICAgICAgICAgICAgICAgICAgZm9udFBhdGhzW2ZvbnRdWzBdKTsKKyAgICB9CisKKyAgICAvLyBB
aGVtIGlzIHVzZWQgYnkgbWFueSBsYXlvdXQgdGVzdHMuCisgICAgR093blB0cjxnY2hhcj4gYWhl
bUZvbnRGaWxlbmFtZShnX2J1aWxkX2ZpbGVuYW1lKEZPTlRTX0NPTkZfRElSLCAiQUhFTV9fX18u
VFRGIiwgTlVMTCkpOworICAgIGlmICghRmNDb25maWdBcHBGb250QWRkRmlsZShjb25maWcsIHJl
aW50ZXJwcmV0X2Nhc3Q8RmNDaGFyOCo+KGFoZW1Gb250RmlsZW5hbWUuZ2V0KCkpKSkKKyAgICAg
ICAgZ19lcnJvcigiQ291bGQgbm90IGxvYWQgZm9udCBhdCAlcyEiLCBhaGVtRm9udEZpbGVuYW1l
LmdldCgpKTsgCisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZm9udEZpbGVuYW1lc1tdID0gewor
ICAgICAgICAiQ29sb3JCaXRzLnR0ZiIsCisgICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyMTAw
LnR0ZiIsCisgICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0ZiIsCisgICAgICAgICJX
ZWJLaXRXZWlnaHRXYXRjaGVyMzAwLnR0ZiIsCisgICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVy
NDAwLnR0ZiIsCisgICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyNTAwLnR0ZiIsCisgICAgICAg
ICJXZWJLaXRXZWlnaHRXYXRjaGVyNjAwLnR0ZiIsCisgICAgICAgICJXZWJLaXRXZWlnaHRXYXRj
aGVyNzAwLnR0ZiIsCisgICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyODAwLnR0ZiIsCisgICAg
ICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZiIsCisgICAgICAgIDAKKyAgICB9OworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGZvbnRGaWxlbmFtZXNbaV07ICsraSkgeworICAgICAgICBH
T3duUHRyPGdjaGFyPiBmb250RmlsZW5hbWUoZ19idWlsZF9maWxlbmFtZShGT05UU19DT05GX0RJ
UiwgIi4uIiwgIi4uIiwgImZvbnRzIiwgZm9udEZpbGVuYW1lc1tpXSwgTlVMTCkpOworICAgICAg
ICBpZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUoY29uZmlnLCByZWludGVycHJldF9jYXN0PEZj
Q2hhcjgqPihmb250RmlsZW5hbWUuZ2V0KCkpKSkKKyAgICAgICAgICAgIGdfZXJyb3IoIkNvdWxk
IG5vdCBsb2FkIGZvbnQgYXQgJXMhIiwgZm9udEZpbGVuYW1lLmdldCgpKTsgCisgICAgfQorCisg
ICAgLy8gQSBmb250IHdpdGggbm8gdmFsaWQgRm9udGNvbmZpZyBlbmNvZGluZyB0byB0ZXN0IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzQ1MgorICAgIEdPd25QdHI8
Z2NoYXI+IGZvbnRXaXRoTm9WYWxpZEVuY29kaW5nRmlsZW5hbWUoZ19idWlsZF9maWxlbmFtZShG
T05UU19DT05GX0RJUiwgIkZvbnRXaXRoTm9WYWxpZEVuY29kaW5nLmZvbiIsIE5VTEwpKTsKKyAg
ICBpZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUoY29uZmlnLCByZWludGVycHJldF9jYXN0PEZj
Q2hhcjgqPihmb250V2l0aE5vVmFsaWRFbmNvZGluZ0ZpbGVuYW1lLmdldCgpKSkpCisgICAgICAg
IGdfZXJyb3IoIkNvdWxkIG5vdCBsb2FkIGZvbnQgYXQgJXMhIiwgZm9udFdpdGhOb1ZhbGlkRW5j
b2RpbmdGaWxlbmFtZS5nZXQoKSk7IAorCisgICAgaWYgKCFGY0NvbmZpZ1NldEN1cnJlbnQoY29u
ZmlnKSkKKyAgICAgICAgZ19lcnJvcigiQ291bGQgbm90IHNldCB0aGUgY3VycmVudCBmb250IGNv
bmZpZ3VyYXRpb24hIik7CisKKyAgICBudW1Gb250cyA9IEZjQ29uZmlnR2V0Rm9udHMoY29uZmln
LCBGY1NldEFwcGxpY2F0aW9uKS0+bmZvbnQ7Cit9CisKK3ZvaWQgYWN0aXZhdGVGb250cygpCit7
CisgICAgaW5pdGlhbGl6ZUd0a1NldHRpbmdzKCk7CisgICAgaW5pdGl0aWFsaXplRm9udENvbmZp
Z1NldHRpbmcoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmJiODBhZWExYmQ0MTJlMTBjOTk4NDU4ZWJhYjZiOWNmNDA0MjViYmYKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9JbmplY3Rl
ZEJ1bmRsZUd0ay5jcHAKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklu
amVjdGVkQnVuZGxlLmgiCisKK25hbWVzcGFjZSBXVFIgeworCitzdGF0aWMgdm9pZCBsb2dIYW5k
bGVyKGNvbnN0IGdjaGFyKiBkb21haW4sIEdMb2dMZXZlbEZsYWdzIGxldmVsLCBjb25zdCBnY2hh
ciogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAobGV2ZWwgPCBHX0xPR19MRVZF
TF9ERUJVRykKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbWVzc2FnZSk7Cit9CisK
Kwordm9pZCBJbmplY3RlZEJ1bmRsZTo6cGxhdGZvcm1Jbml0aWFsaXplKFdLVHlwZVJlZikKK3sK
KyAgICAvLyBTb21lIHBsdWdpbnMgbWlnaHQgdHJ5IHRvIHVzZSB0aGUgR0xpYiBsb2dnZXIgZm9y
IHByaW50aW5nIGRlYnVnIG1lc3NhZ2VzLiBUaGlzCisgICAgLy8gd2lsbCBjYXVzZSB0ZXN0cyB0
byBmYWlsIGJlY2F1c2Ugb2YgdW5leHBlY3RlZCBvdXRwdXQuIFdlIHNxdWVsY2ggYWxsIGRlYnVn
CisgICAgLy8gbWVzc2FnZXMgc2VudCB0byB0aGUgbG9nZ2VyLgorICAgIGdfbG9nX3NldF9kZWZh
dWx0X2hhbmRsZXIobG9nSGFuZGxlciwgMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdUUgpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvTGF5b3V0
VGVzdENvbnRyb2xsZXJHdGsuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYwMzI0YWE5
M2E2NTJhOWQwMzY3YWM2YjE5M2NjMTNjMWJlNjNmZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxl
ckd0ay5jcHAKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlh
IFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheW91dFRl
c3RDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgorI2luY2x1ZGUg
PGdsaWIuaD4KKworbmFtZXNwYWNlIFdUUiB7CisKK3N0YXRpYyBnYm9vbGVhbiB3YWl0VG9EdW1w
V2F0Y2hkb2dUaW1lckludGVydmFsQ2FsbGJhY2soZ3BvaW50ZXIpCit7CisgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPndhaXRUb0R1bXBXYXRjaGRv
Z1RpbWVyRmlyZWQoKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cGxhdGZvcm1Jbml0aWFsaXplKCkKK3sKKyAgICBtX3dhaXRUb0R1bXBXYXRjaGRv
Z1RpbWVyID0gMDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aW52YWxpZGF0ZVdh
aXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkKK3sKKyAgICBpZiAoIW1fd2FpdFRvRHVtcFdhdGNoZG9n
VGltZXIpCisgICAgICAgIHJldHVybjsKKyAgICBnX3NvdXJjZV9yZW1vdmUobV93YWl0VG9EdW1w
V2F0Y2hkb2dUaW1lcik7CisgICAgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lciA9IDA7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemVXYWl0VG9EdW1wV2F0Y2hkb2dU
aW1lcklmTmVlZGVkKCkKK3sKKyAgICBpZiAobV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lciA9IGdfdGltZW91
dF9hZGQod2FpdFRvRHVtcFdhdGNoZG9nVGltZXJJbnRlcnZhbCAqIDEwMDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdFRvRHVtcFdhdGNoZG9nVGlt
ZXJJbnRlcnZhbENhbGxiYWNrLCAwKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAppbmRleCA5NzM5ZDQyMTc5OTk1OWU4NTNl
OGI0ZGY3MjBjZGQzMjkzNzk4OGRiLi5jYmM0OGU0OTU4MDA5ZjU1OTM3YThiM2YxOGY4MzZlOTRi
YjU3YjQyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmll
dy5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKQEAgLTQ2
LDYgKzQ2LDEwIEBAIHR5cGVkZWYgTlNXaW5kb3cqIFBsYXRmb3JtV2luZG93OwogI2VsaWYgZGVm
aW5lZChXSU4zMikgfHwgZGVmaW5lZChfV0lOMzIpCiB0eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9y
bVdLVmlldzsKIHR5cGVkZWYgSFdORCBQbGF0Zm9ybVdpbmRvdzsKKyNlbGlmIGRlZmluZWQoQlVJ
TERJTkdfR1RLX18pCit0eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0a1dpZGdldDsKK3R5cGVk
ZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwordHlwZWRlZiBHdGtXaWRnZXQqIFBsYXRmb3Jt
V2luZG93OwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXVFIgewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9ndGsvUGxhdGZvcm1XZWJWaWV3R3RrLmNwcCBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvZ3RrL1BsYXRmb3JtV2ViVmlld0d0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWNhNzk2MDFm
M2YzZGZmZTcyNjU2NGE0ZDYxZmVhN2M4OTFhYWNkNwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvZ3RrL1BsYXRmb3JtV2ViVmlld0d0ay5jcHAKQEAgLTAsMCArMSw5
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdl
YlZpZXcuaCIKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdUUiB7CisKK1Bs
YXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1Bh
Z2VHcm91cFJlZiBwYWdlR3JvdXApCisgICAgOiBtX3ZpZXcoV0tWaWV3Q3JlYXRlKGNvbnRleHQs
IHBhZ2VHcm91cCkpCisgICAgLCBtX3dpbmRvdyhndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1BP
UFVQKSkKK3sKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fd2luZG93KSwg
V0tWaWV3R2V0V2luZG93KG1fdmlldykpOworCisgICAgZ3RrX3dpbmRvd19yZXNpemUoR1RLX1dJ
TkRPVyhtX3dpbmRvdyksIDgwMCwgNjAwKTsKKyAgICBHdGtBbGxvY2F0aW9uIHNpemUgPSB7IDAs
IDAsIDgwMCwgNjAwIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKG1fd2luZG93LCAm
c2l6ZSk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbChtX3dpbmRvdyk7CisKKyAgICB3aGlsZSAo
Z3RrX2V2ZW50c19wZW5kaW5nKCkpCisgICAgICAgIGd0a19tYWluX2l0ZXJhdGlvbigpOworfQor
CitQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcoKQoreworICAgIGd0a193aWRnZXRf
ZGVzdHJveShtX3dpbmRvdyk7Cit9CisKK3ZvaWQgUGxhdGZvcm1XZWJWaWV3OjpyZXNpemVUbyh1
bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQoreworICAgIGd0a193aW5kb3dfcmVzaXpl
KEdUS19XSU5ET1cobV93aW5kb3cpLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBHdGtBbGxvY2F0aW9u
IHNpemUgPSB7IDAsIDAsIHdpZHRoLCBoZWlnaHQgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxs
b2NhdGUobV93aW5kb3csICZzaXplKTsKKworICAgIHdoaWxlIChndGtfZXZlbnRzX3BlbmRpbmco
KSkKKyAgICAgICAgZ3RrX21haW5faXRlcmF0aW9uKCk7Cit9CisKK1dLUGFnZVJlZiBQbGF0Zm9y
bVdlYlZpZXc6OnBhZ2UoKQoreworICAgIHJldHVybiBXS1ZpZXdHZXRQYWdlKG1fdmlldyk7Cit9
CisKK3ZvaWQgUGxhdGZvcm1XZWJWaWV3Ojpmb2N1cygpCit7Cit9CisKK1dLUmVjdCBQbGF0Zm9y
bVdlYlZpZXc6OndpbmRvd0ZyYW1lKCkKK3sKKyAgICBHdGtBbGxvY2F0aW9uIGdlb21ldHJ5Owor
ICAgIGdpbnQgZGVwdGg7CisgICAgZ2RrX3dpbmRvd19nZXRfZ2VvbWV0cnkoZ3RrX3dpZGdldF9n
ZXRfd2luZG93KEdUS19XSURHRVQobV93aW5kb3cpKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmZ2VvbWV0cnkueCwgJmdlb21ldHJ5LnksICZnZW9tZXRyeS53aWR0aCwgJmdlb21ldHJ5
LmhlaWdodCwgJmRlcHRoKTsKKworICAgIFdLUmVjdCBmcmFtZTsKKyAgICBmcmFtZS5vcmlnaW4u
eCA9IGdlb21ldHJ5Lng7CisgICAgZnJhbWUub3JpZ2luLnkgPSBnZW9tZXRyeS55OworICAgIGZy
YW1lLnNpemUud2lkdGggPSBnZW9tZXRyeS53aWR0aDsKKyAgICBmcmFtZS5zaXplLmhlaWdodCA9
IGdlb21ldHJ5LmhlaWdodDsKKyAgICByZXR1cm4gZnJhbWU7Cit9CisKK3ZvaWQgUGxhdGZvcm1X
ZWJWaWV3OjpzZXRXaW5kb3dGcmFtZShXS1JlY3QgZnJhbWUpCit7CisgICAgZ3RrX3dpbmRvd19t
b3ZlKEdUS19XSU5ET1cobV93aW5kb3cpLCBmcmFtZS5vcmlnaW4ueCwgZnJhbWUub3JpZ2luLnkp
OworICAgIHJlc2l6ZVRvKGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVpZ2h0KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RSCisKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvZ3RrL1Rlc3RDb250cm9sbGVyR3RrLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3Rr
L1Rlc3RDb250cm9sbGVyR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOGI5NmJkOTgzNWQzZGM0YjRjM2Fh
ODgxMTkyNmVkMjExODFmMWJmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9ndGsvVGVzdENvbnRyb2xsZXJHdGsuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXVFIgeworCitzdGF0aWMgZ3Vp
bnQgZ1RpbWVvdXRTb3VyY2VJZCA9IDA7CisKK3N0YXRpYyB2b2lkIGNhbmNlbFRpbWVvdXQoKQor
eworICAgIGlmICghZ1RpbWVvdXRTb3VyY2VJZCkKKyAgICAgICAgcmV0dXJuOworICAgIGdfc291
cmNlX3JlbW92ZShnVGltZW91dFNvdXJjZUlkKTsKKyAgICBnVGltZW91dFNvdXJjZUlkID0gMDsK
K30KKwordm9pZCBUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZSgpCit7CisgICAgZ3RrX21haW5f
cXVpdCgpOworICAgIGNhbmNlbFRpbWVvdXQoKTsKK30KKwordm9pZCBUZXN0Q29udHJvbGxlcjo6
cGxhdGZvcm1Jbml0aWFsaXplKCkKK3sKK30KKworc3RhdGljIGdib29sZWFuIHRpbWVvdXRDYWxs
YmFjayhncG9pbnRlcikKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkZBSUw6IFRlc3RDb250cm9s
bGVyUnVuTG9vcCB0aW1lZCBvdXQuXG4iKTsKKyAgICBndGtfbWFpbl9xdWl0KCk7CisgICAgcmV0
dXJuIEZBTFNFOworfQorCit2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJ1blVudGlsKGJv
b2wmLCBkb3VibGUgdGltZW91dCkKK3sKKyAgICBjYW5jZWxUaW1lb3V0KCk7CisgICAgZ1RpbWVv
dXRTb3VyY2VJZCA9IGdfdGltZW91dF9hZGQodGltZW91dCAqIDEwMDAsIHRpbWVvdXRDYWxsYmFj
aywgMCk7CisgICAgZ3RrX21haW4oKTsKK30KKwordm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlh
bGl6ZUluamVjdGVkQnVuZGxlUGF0aCgpCit7CisgICAgY29uc3QgY2hhciogYnVuZGxlUGF0aCA9
IGdfZ2V0ZW52KCJURVNUX1JVTk5FUl9JTkpFQ1RFRF9CVU5ETEVfRklMRU5BTUUiKTsKKyAgICBp
ZiAoIWJ1bmRsZVBhdGgpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJURVNUX1JVTk5FUl9J
TkpFQ1RFRF9CVU5ETEVfRklMRU5BTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgbm90IGZvdW5kXG4i
KTsKKyAgICAgICAgZXhpdCgwKTsKKyAgICB9CisKKyAgICBnc2l6ZSBieXRlc1dyaXR0ZW47Cisg
ICAgR093blB0cjxjaGFyPiB1dGY4QnVuZGxlUGF0aChnX2ZpbGVuYW1lX3RvX3V0ZjgoYnVuZGxl
UGF0aCwgLTEsIDAsICZieXRlc1dyaXR0ZW4sIDApKTsKKyAgICBtX2luamVjdGVkQnVuZGxlUGF0
aCA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHV0ZjhCdW5kbGVQYXRoLmdldCgpKTsK
K30KKwordm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZVRlc3RQbHVnaW5EaXJlY3Rvcnko
KQoreworICAgIC8vIFRoaXMgaXMgY2FsbGVkIGFmdGVyIGluaXRpYWxpemVJbmplY3RlZEJ1bmRs
ZVBhdGguCisgICAgbV90ZXN0UGx1Z2luRGlyZWN0b3J5ID0gbV9pbmplY3RlZEJ1bmRsZVBhdGg7
Cit9CisKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKQor
eworfQorCit2b2lkIFRlc3RDb250cm9sbGVyOjpydW5Nb2RhbChQbGF0Zm9ybVdlYlZpZXcqKQor
eworICAgIC8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCB0aGlzIHRvIHRlc3Qgc2hvd01vZGFs
RGlhbG9nLgorfQorCitjb25zdCBjaGFyKiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1MaWJyYXJ5
UGF0aEZvclRlc3RpbmcoKQoreworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RJbnZvY2F0aW9u
R3RrLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RJbnZvY2F0aW9uR3RrLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42YTcxZGEyYThiZjY0NGZhMDczNTk4YzY2M2IwNTcyMmRjYWZiMTkwCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVzdEludm9jYXRp
b25HdGsuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVGVzdEludm9jYXRpb24uaCIKKworbmFtZXNwYWNlIFdUUiB7CisKK3Zv
aWQgVGVzdEludm9jYXRpb246OmR1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKGNvbnN0
IE9wYXF1ZVdLSW1hZ2UqKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL21haW4uY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9ndGsvbWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTlhODQzOTZhNjRiNTRiYTJjZTA2Njc1NDk4
Njc5YjljZGNhYTI2ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
Z3RrL21haW4uY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
VGVzdENvbnRyb2xsZXIuaCIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQorewor
ICAgIGd0a19pbml0KCZhcmdjLCAmYXJndik7CisgICAgV1RSOjpUZXN0Q29udHJvbGxlciBjb250
cm9sbGVyKGFyZ2MsIGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcioqPihhcmd2KSk7CisgICAgcmV0dXJu
IDA7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89039</attachid>
            <date>2011-04-11 11:41:11 -0700</date>
            <delta_ts>2011-04-12 17:32:18 -0700</delta_ts>
            <desc>Patch taking Carlos&apos; suggestion</desc>
            <filename>bug-57068-20110411114108.patch</filename>
            <type>text/plain</type>
            <size>43367</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMzODEKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCBkNzEyNTJiZWE0ZWFjMDc0ZjM0MTg5OTFjYjk0ZjM5NDc1ZjFjZDA2Li5hYWJj
NmNhODc3ZjA3ZGQxMjliM2Q5ZGY2MzljYzZiYTk3ODJiODQ0IDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDMtMzAgIE1hcnRpbiBS
b2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFtXZWJLaXQyXSBJbXBsZW1lbnQgYSBiYXNp
YyBXZWJLaXRUZXN0UnVubmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NzA2OAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZGVkIHJlZmVy
ZW5jZSB0byBXZWJLaXRUZXN0UnVubmVyIEdOVW1ha2VmaWxlLgorCiAyMDExLTA0LTA5ICBLZWl0
aCBLeXppdmF0ICA8a2VpdGgua3l6aXZhdEBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgTGFzemxvIEdvbWJvcy4KZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZp
bGUuYW0KaW5kZXggYWY1NDg5MWFhMTI2M2FhNmI5Nzk5M2ZmMmNhOTA1ZWEwMWMxZGQwNS4uOGM1
MDJmMDM0NmNiZWEwNTM2YWNiYjA2ZDBmY2NjNjY1ODQ2ZDIwNCAxMDA2NDQKLS0tIGEvR05VbWFr
ZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0KQEAgLTIzMCw2ICsyMzAsNyBAQCBpbmNsdWRl
IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCiBpZiBFTkFCTEVfV0VCS0lUMgogaW5jbHVk
ZSBTb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQogaW5jbHVkZSBUb29scy9NaW5pQnJvd3Nl
ci9ndGsvR05VbWFrZWZpbGUuYW0KK2luY2x1ZGUgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HTlVt
YWtlZmlsZS5hbQogIyBbR1RLXSBSZWZhY3RvciB0aGUgdHJhbnNsYXRpb25zIG5vdyB0aGF0IHdl
IGhhdmUgd2Via2l0MgogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTUxNTMKIHN0YW1wLXBvOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDA4OTRhNGU4MzZiODJmZDc4ZDJiOWFlOTRk
NmRiYmIwNTNiZGQyZGIuLjRiMjZkZmU1YTM1NTgwZmY5NjkzYzVkNGVmODIyMDkzODdkYzhkOTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMS0wMy0zMCAgTWFydGluIFJvYmluc29u
ICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW0dUS10gW1dlYktpdDJdIEltcGxlbWVudCBhIGJhc2ljIFdlYktp
dFRlc3RSdW5uZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU3MDY4CisKKyAgICAgICAgQWRkZWQgSW5qZWN0ZWRCdW5kbGUgc3VwcG9ydCBmb3IgR1RL
Ky4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
aDogQWRkZWQgdHlwZWRlZiBmb3IgR1RLKy4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL2d0ay9JbmplY3RlZEJ1bmRsZUd0ay5jcHA6IEFkZGVkIGltcGxlbWVudGF0aW9uLgor
ICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6bG9hZCk6IAorICAgICAgICAoV2ViS2l0
OjpJbmplY3RlZEJ1bmRsZTo6YWN0aXZhdGVNYWNGb250QXNjZW50SGFjayk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcDogUmVtb3ZlIHVubmVjZXNzYXJ5
IG1ldGhvZCBkZWZpbml0aW9uLgorCiAyMDExLTA0LTA4ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8
YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZS5oCmluZGV4IDY3NTVhMzlkZGE2ZDFiNjgxNmQ5OTE5MDEwYWUwNWQ0ZTA4YmY5ZTgu
LjMzZGViMzM1ZGZjZGNjOTM4ZjM4MWJjNzk2ZTY4YTQzZDcxNTBiZTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlLmgKQEAgLTM5LDYgKzM5LDEwIEBACiAjaW5jbHVkZSA8UUxpYnJhcnk+CiAjZW5kaWYKIAor
I2lmIFBMQVRGT1JNKEdUSykKK3R5cGVkZWYgc3RydWN0IF9HTW9kdWxlIEdNb2R1bGU7CisjZW5k
aWYKKwogbmFtZXNwYWNlIENvcmVJUEMgewogICAgIGNsYXNzIEFyZ3VtZW50RGVjb2RlcjsKICAg
ICBjbGFzcyBDb25uZWN0aW9uOwpAQCAtNTQsNyArNTgsNyBAQCB0eXBlZGVmIEhNT0RVTEUgUGxh
dGZvcm1CdW5kbGU7CiAjZWxpZiBQTEFURk9STShRVCkKIHR5cGVkZWYgUUxpYnJhcnkgUGxhdGZv
cm1CdW5kbGU7CiAjZWxpZiBQTEFURk9STShHVEspCi10eXBlZGVmIHZvaWQqIFBsYXRmb3JtQnVu
ZGxlOwordHlwZWRlZiA6OkdNb2R1bGUqIFBsYXRmb3JtQnVuZGxlOwogI2VuZGlmCiAKIGNsYXNz
IEltbXV0YWJsZUFycmF5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwCmluZGV4
IGJiZjI0ZTQzYjdkZmRkMDY5YjhkOGEzNjhjYTQxOTIyYzAxMmM5NTcuLmNhMWE0M2Y4Y2RjNWFl
ZTdmZTI5NmMxY2Y2NzZmMmQ3MTc3MWJiYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvZ3RrL0luamVjdGVkQnVuZGxlR3RrLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL2d0ay9JbmplY3RlZEJ1bmRs
ZUd0ay5jcHAKQEAgLTI5LDIwICsyOSwzMyBAQAogCiAjaW5jbHVkZSAiV0tCdW5kbGVBUElDYXN0
LmgiCiAjaW5jbHVkZSAiV0tCdW5kbGVJbml0aWFsaXplLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9O
b3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi1ib29sIEluamVjdGVkQnVuZGxlOjpsb2FkKEFQSU9iamVjdCop
Citib29sIEluamVjdGVkQnVuZGxlOjpsb2FkKEFQSU9iamVjdCogaW5pdGlhbGl6YXRpb25Vc2Vy
RGF0YSkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgbV9wbGF0Zm9ybUJ1bmRsZSA9IGdfbW9k
dWxlX29wZW4oZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKG1fcGF0aCkuZGF0YSgpLCBHX01PRFVM
RV9CSU5EX0xPQ0FMKTsKKyAgICBpZiAoIW1fcGxhdGZvcm1CdW5kbGUpIHsKKyAgICAgICAgZ193
YXJuaW5nKCJFcnJvciBsb2FkaW5nIHRoZSBpbmplY3RlZCBidW5kbGUgKCVzKTogJXMiLCBtX3Bh
dGgudXRmOCgpLmRhdGEoKSwgZ19tb2R1bGVfZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBXS0J1bmRsZUluaXRpYWxpemVGdW5jdGlvblB0ciBpbml0aWFsaXpl
RnVuY3Rpb24gPSAwOworICAgIGlmICghZ19tb2R1bGVfc3ltYm9sKG1fcGxhdGZvcm1CdW5kbGUs
ICJXS0J1bmRsZUluaXRpYWxpemUiLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmluaXRpYWxp
emVGdW5jdGlvbikpIHx8ICFpbml0aWFsaXplRnVuY3Rpb24pIHsKKyAgICAgICAgZ193YXJuaW5n
KCJFcnJvciBsb2FkaW5nIFdLQnVuZGxlSW5pdGlhbGl6ZSBzeW1ib2wgZnJvbSBpbmplY3RlZCBi
dW5kbGUuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbml0aWFsaXpl
RnVuY3Rpb24odG9BUEkodGhpcyksIHRvQVBJKGluaXRpYWxpemF0aW9uVXNlckRhdGEpKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6YWN0aXZhdGVNYWNGb250
QXNjZW50SGFjaygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Z3RrL1dlYlBhZ2VHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0
ay9XZWJQYWdlR3RrLmNwcAppbmRleCA1N2M5OTc3MWQ0NDE4MDVmNGVkZjk2ZWE1Y2ZmN2UxMDNh
YjIzYmZkLi4yMDRhMzNjYWRjMWRlMTg2NmNiY2UwMjgxZTZjNjNkYjkzZTEzMjhiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5j
cHAKQEAgLTExNiwxMCArMTE2LDQgQEAgU3RyaW5nIFdlYlBhZ2U6OmNhY2hlZFJlc3BvbnNlTUlN
RVR5cGVGb3JVUkwoY29uc3QgV2ViQ29yZTo6S1VSTCYpCiAgICAgcmV0dXJuIFN0cmluZygpOwog
fQogCi1ib29sIFdlYlBhZ2U6OnBsYXRmb3JtQ2FuSGFuZGxlUmVxdWVzdChjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGIwMmFlY2IyMzlmMTlmNDJmY2QzN2Zi
ZGVkZTJjNTE5MTJkZGEwNy4uMzJlYjA5NDk5ZjVkZGViODM5YWM5MGFlY2I2OTFkZTg1MDVlNDA3
OCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI5IEBACisyMDExLTAzLTMwICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdh
bGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbR1RLXSBbV2ViS2l0Ml0gSW1wbGVtZW50IGEgYmFzaWMgV2ViS2l0VGVzdFJ1bm5lcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTcwNjgKKworICAg
ICAgICBBZGQgYW4gaW1wbGVtZW50YXRpb24gb2YgV2ViS2l0VGVzdFJ1bm5lciBmb3IgR1RLKy4K
KworICAgICAgICAqIFNjcmlwdHMvYnVpbGQtd2Via2l0dGVzdHJ1bm5lcjogQWRkZWQga25vd2xl
ZGdlIG9mIEdUSysgVGVzdFJ1bm5lci4KKyAgICAgICAgKiBTY3JpcHRzL29sZC1ydW4td2Via2l0
LXRlc3RzOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3J1bi1sYXVuY2hlcjogRGl0dG8uCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRkaXJzLnBtOiBEaXR0by4KKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL0dOVW1ha2VmaWxlLmFtOiBBZGRlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvQWN0aXZhdGVGb250c0d0ay5jcHA6IEFk
ZGVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZ3RrL0luamVj
dGVkQnVuZGxlR3RrLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwLgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9n
dGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxh
dGZvcm1XZWJWaWV3Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9ndGsvUGxhdGZvcm1X
ZWJWaWV3R3RrLmNwcDogQWRkZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVz
dENvbnRyb2xsZXJHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2d0
ay9UZXN0SW52b2NhdGlvbkd0ay5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvZ3RrL0luamVjdGVkQnVuZGxlR3RrLmNwcC4KKyAgICAgICAg
KFdUUjo6VGVzdEludm9jYXRpb246OmR1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2d0ay9tYWluLmNwcDogQ29waWVkIGZyb20gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVH
dGsuY3BwLgorICAgICAgICAobWFpbik6IEFkZGVkLgorCiAyMDExLTA0LTA5ICBLZWl0aCBLeXpp
dmF0ICA8a2VpdGgua3l6aXZhdEBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTGFz
emxvIEdvbWJvcy4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0dGVzdHJ1
bm5lciBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0dGVzdHJ1bm5lcgppbmRleCBlOTZkZDZh
MzczNDc3ZTJkZGY0ODg0NTAxNWI4OWJiNGU0MzA3M2U1Li5mMDNjMTc5OWE3N2ZlZTMzZjgzZjlm
ODk1OGUxYWZhYzA2ZTk1NGU4IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtp
dHRlc3RydW5uZXIKKysrIGIvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXR0ZXN0cnVubmVyCkBA
IC02Myw4ICs2Myw4IEBAIGlmIChpc0FwcGxlTWFjV2ViS2l0KCkpIHsKICAgICAkcmVzdWx0ID0g
YnVpbGRYQ29kZVByb2plY3QoIldlYktpdFRlc3RSdW5uZXIiLCAkY2xlYW4sIFhjb2RlT3B0aW9u
cygpLCBAQVJHVik7CiB9IGVsc2lmIChpc0FwcGxlV2luV2ViS2l0KCkpIHsKICAgICAkcmVzdWx0
ID0gYnVpbGRWaXN1YWxTdHVkaW9Qcm9qZWN0KCJXZWJLaXRUZXN0UnVubmVyLnNsbiIsICRjbGVh
bik7Ci19IGVsc2lmIChpc1F0KCkpIHsKLSAgICAjIFF0IGJ1aWxkcyBldmVyeXRoaW5nIGluIG9u
ZSBzaG90LiBObyBuZWVkIHRvIGJ1aWxkIGFueXRoaW5nIGhlcmUuCit9IGVsc2lmIChpc1F0KCkg
fHwgaXNHdGsoKSkgeworICAgICMgUXQgYW5kIEdUSysgYnVpbGQgZXZlcnl0aGluZyBpbiBvbmUg
c2hvdC4gTm8gbmVlZCB0byBidWlsZCBhbnl0aGluZyBoZXJlLgogICAgICRyZXN1bHQgPSAwOwog
fSBlbHNlIHsKICAgICBkaWUgIldlYktpdFRlc3RSdW5uZXIgaXMgbm90IHN1cHBvcnRlZCBvbiB0
aGlzIHBsYXRmb3JtLlxuIjsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJr
aXQtdGVzdHMgYi9Ub29scy9TY3JpcHRzL29sZC1ydW4td2Via2l0LXRlc3RzCmluZGV4IDUxZjA4
M2YzYTE0NjM0Mjg5MGY3NjA1MzFlNTkxMjA2NTE2ODNmZTcuLjM3NWY5YTMxOGYwMDk2ZTA5N2Y4
N2M5NTRiMTU0M2MyOWQyNGQ1MTcgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13
ZWJraXQtdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cwpAQCAt
MzgwLDYgKzM4MCw5IEBAIGlmICgkdXNlV2ViS2l0VGVzdFJ1bm5lcikgewogICAgIH0gZWxzaWYg
KGlzUXQoKSkgewogICAgICAgICAkcmVhbFBsYXRmb3JtID0gJHBsYXRmb3JtOwogICAgICAgICAk
cGxhdGZvcm0gPSAicXQtd2syIjsKKyAgICB9IGVsc2lmIChpc0d0aygpKSB7CisgICAgICAgICRy
ZWFsUGxhdGZvcm0gPSAkcGxhdGZvcm07CisgICAgICAgICRwbGF0Zm9ybSA9ICJndGstd2syIjsK
ICAgICB9CiB9CiAKQEAgLTExNzYsNiArMTE3OSw3IEBAIGNsb3NlIEhUTUw7CiBteSBAY29uZmln
dXJhdGlvbkFyZ3MgPSBhcmd1bWVudHNGb3JDb25maWd1cmF0aW9uKCk7CiAKIGlmIChpc0d0aygp
KSB7CisgIHB1c2goQGNvbmZpZ3VyYXRpb25BcmdzLCAnLTInKSBpZiAkdXNlV2ViS2l0VGVzdFJ1
bm5lcjsKICAgc3lzdGVtICJUb29scy9TY3JpcHRzL3J1bi1sYXVuY2hlciIsIEBjb25maWd1cmF0
aW9uQXJncywgImZpbGU6Ly8iLiR0ZXN0UmVzdWx0cyBpZiAkbGF1bmNoU2FmYXJpOwogfSBlbHNp
ZiAoaXNRdCgpKSB7CiAgIHVuc2hpZnQgQGNvbmZpZ3VyYXRpb25BcmdzLCBxdygtZ3JhcGhpY3Nz
eXN0ZW0gcmFzdGVyIC1zdHlsZSB3aW5kb3dzKTsKQEAgLTE1MDMsNiArMTUwNywxMSBAQCBzdWIg
b3BlbkR1bXBUb29sKCkKICAgICBpZiAoaXNHdGsoKSkgewogICAgICAgICAkQ0xFQU5fRU5We0dU
S19NT0RVTEVTfSA9ICJnYWlsIjsKICAgICAgICAgJENMRUFOX0VOVntXRUJLSVRfSU5TUEVDVE9S
X1BBVEh9ID0gIiRwcm9kdWN0RGlyL3Jlc291cmNlcy9pbnNwZWN0b3IiOworCisgICAgICAgIGlm
ICgkdXNlV2ViS2l0VGVzdFJ1bm5lcikgeworICAgICAgICAgICAgbXkgJGluamVjdGVkQnVuZGxl
UGF0aCA9IHByb2R1Y3REaXIoKSAuICIvTGlicmFyaWVzLy5saWJzL2xpYlRlc3RSdW5uZXJJbmpl
Y3RlZEJ1bmRsZSI7CisgICAgICAgICAgICAkQ0xFQU5fRU5We1RFU1RfUlVOTkVSX0lOSkVDVEVE
X0JVTkRMRV9GSUxFTkFNRX0gPSAkaW5qZWN0ZWRCdW5kbGVQYXRoOworICAgICAgICB9CiAgICAg
fQogCiAgICAgaWYgKGlzUXQoKSkgewpAQCAtMTY5Niw2ICsxNzA1LDggQEAgc3ViIGV4cGVjdGVk
RGlyZWN0b3J5Rm9yVGVzdCgkOyQ7JCkKICAgICBpZiAoaXNBcHBsZVdpbldlYktpdCgpKSB7CiAg
ICAgICAgIHB1c2ggQGV4dHJhUGxhdGZvcm1zLCAibWFjLXdrMiIgaWYgJHBsYXRmb3JtIGVxICJ3
aW4td2syIjsKICAgICAgICAgcHVzaCBAZXh0cmFQbGF0Zm9ybXMsIHF3KG1hYy1zbm93bGVvcGFy
ZCBtYWMpOworICAgIH0gZWxzaWYgKGlzR3RrKCkpIHsKKyAgICAgICAgcHVzaCBAZXh0cmFQbGF0
Zm9ybXMsICJndGsiIGlmICRwbGF0Zm9ybSBlcSAiZ3RrLXdrMiI7CiAgICAgfQogICAKICAgICBw
dXNoIEBkaXJlY3RvcmllcywgbWFwIHsgY2F0ZGlyKCRwbGF0Zm9ybUJhc2VEaXJlY3RvcnksICRf
KSB9IEBleHRyYVBsYXRmb3JtczsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWxhdW5j
aGVyIGIvVG9vbHMvU2NyaXB0cy9ydW4tbGF1bmNoZXIKaW5kZXggNzMxZmJjMDRjMWJiNTgwMGRl
Y2E0OGFjMjg3M2U1ZWE4ZGU2OGM1Mi4uMDBjNzE1ZDQ3NTQ2YWZkMDAwZGY0YmRkODM5YzA3MGY3
OTQ2Nzc4OCAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tbGF1bmNoZXIKKysrIGIvVG9v
bHMvU2NyaXB0cy9ydW4tbGF1bmNoZXIKQEAgLTY1LDcgKzY1LDExIEBAIGlmIChpc1F0KCkpIHsK
IH0gZWxzZSB7CiAKICAgICBpZiAoaXNHdGsoKSkgewotICAgICAgICAkbGF1bmNoZXJQYXRoID0g
Y2F0ZGlyKCRsYXVuY2hlclBhdGgsICJQcm9ncmFtcyIsICJHdGtMYXVuY2hlciIpOworICAgICAg
ICBpZiAoaXNXSzIoKSkgeworICAgICAgICAgICAgJGxhdW5jaGVyUGF0aCA9IGNhdGRpcigkbGF1
bmNoZXJQYXRoLCAiUHJvZ3JhbXMiLCAiTWluaUJyb3dzZXIiKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICRsYXVuY2hlclBhdGggPSBjYXRkaXIoJGxhdW5jaGVyUGF0aCwgIlByb2dy
YW1zIiwgIkd0a0xhdW5jaGVyIik7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKGlz
RWZsKCkpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0ZGlycy5wbQppbmRleCA4YzAzZjNiOTMzZWY0NDMzZmE0N2M3NWQwZDNl
OTBmYzU5MTYyN2U2Li41ZDQ4NTZlYmMwMjBlMTE2ZjM3N2RjYWFkZGQ2Yzc0NzA3YTFlYWJkIDEw
MDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRkaXJzLnBtCkBAIC02MzAsMTIgKzYzMCwxNyBAQCBzdWIgYnVpbHREeWxpYlBhdGhG
b3JOYW1lCiAgICAgICAgIHJldHVybiAiJGNvbmZpZ3VyYXRpb25Qcm9kdWN0RGlyL2xpYnd4d2Vi
a2l0LmR5bGliIjsKICAgICB9CiAgICAgaWYgKGlzR3RrKCkpIHsKLSAgICAgICAgbXkgJGxpYnJh
cnlEaXIgPSAiJGNvbmZpZ3VyYXRpb25Qcm9kdWN0RGlyLy5saWJzLyI7Ci0gICAgICAgIG15ICRl
eHRlbnNpb24gPSBpc0RhcndpbigpID8gImR5bGliIiA6ICJzbyI7Ci0gICAgICAgIGlmICgtZSAk
bGlicmFyeURpciAuICJsaWJ3ZWJraXRndGstMy4wLiRleHRlbnNpb24iKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gJGxpYnJhcnlEaXIgLiAibGlid2Via2l0Z3RrLTMuMC4kZXh0ZW5zaW9uIjsKKyAg
ICAgICAgIyBXZWJLaXRHVEsrIGZvciBHVEsyLCBXZWJLaXRHVEsrIGZvciBHVEszLCBhbmQgV2Vi
S2l0MiByZXNwZWN0aXZlbHkuCisgICAgICAgIG15IEBsaWJyYXJpZXMgPSAoImxpYndlYmtpdGd0
ay0xLjAiLCAibGlid2Via2l0Z3RrLTMuMCIsICJsaWJ3ZWJraXQyZ3RrLTEuMCIpOworICAgICAg
ICBteSAkZXh0ZW5zaW9uID0gaXNEYXJ3aW4oKSA/ICIuZHlsaWIiIDogIi5zbyI7CisKKyAgICAg
ICAgZm9yZWFjaCAoQGxpYnJhcmllcykgeworICAgICAgICAgICAgbXkgJGxpYnJhcnkgPSAiJGNv
bmZpZ3VyYXRpb25Qcm9kdWN0RGlyLy5saWJzLyIgLiAkXyAgLiAkZXh0ZW5zaW9uOworICAgICAg
ICAgICAgaWYgKC1lICRsaWJyYXJ5KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICRsaWJyYXJ5
OworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAkbGlicmFyeURpciAu
ICJsaWJ3ZWJraXRndGstMS4wLiRleHRlbnNpb24iOworICAgICAgICByZXR1cm4gIk5vdEZvdW5k
IjsKICAgICB9CiAgICAgaWYgKGlzRWZsKCkpIHsKICAgICAgICAgcmV0dXJuICIkY29uZmlndXJh
dGlvblByb2R1Y3REaXIvJGxpYnJhcnlOYW1lLy4uL1dlYktpdC9saWJld2Via2l0LnNvIjsKQEAg
LTE5NjMsNiArMTk2OCwxMiBAQCBzdWIgcnVuV2ViS2l0VGVzdFJ1bm5lcgogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgcmV0dXJuIHN5c3RlbSAkd2ViS2l0VGVzdFJ1bm5lclBhdGgsIEBB
UkdWOwogICAgICAgICB9CisgICAgfSBlbHNpZiAoaXNHdGsoKSkgeworICAgICAgICBteSAkcHJv
ZHVjdERpciA9IHByb2R1Y3REaXIoKTsKKyAgICAgICAgbXkgJGluamVjdGVkQnVuZGxlUGF0aCA9
ICIkcHJvZHVjdERpci9MaWJyYXJpZXMvLmxpYnMvbGliVGVzdFJ1bm5lckluamVjdGVkQnVuZGxl
IjsKKyAgICAgICAgcHJpbnQgIlN0YXJ0aW5nIFdlYktpdFRlc3RSdW5uZXIgd2l0aCBURVNUX1JV
Tk5FUl9JTkpFQ1RFRF9CVU5ETEVfRklMRU5BTUUgc2V0IHRvIHBvaW50IHRvICRpbmplY3RlZEJ1
bmRsZVBhdGguXG4iOworICAgICAgICAkRU5We1RFU1RfUlVOTkVSX0lOSkVDVEVEX0JVTkRMRV9G
SUxFTkFNRX0gPSAkaW5qZWN0ZWRCdW5kbGVQYXRoOworICAgICAgICByZXR1cm4gc3lzdGVtICIk
cHJvZHVjdERpci9Qcm9ncmFtcy9XZWJLaXRUZXN0UnVubmVyIiwgQEFSR1Y7CiAgICAgfQogCiAg
ICAgcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dOVW1ha2Vm
aWxlLmFtIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HTlVtYWtlZmlsZS5hbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42MmM3ODRlZWM3ZDZmNTQxMTQ1MzMwZGE4MmRlMWYxZTM5YTg1Y2Y2Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HTlVtYWtlZmlsZS5hbQpAQCAtMCwwICsxLDEy
MCBAQAorQlVJTFRfU09VUkNFUyArPSBcCisJZ2VuZXJhdGUtd2Via2l0dGVzdHJ1bm5lci1mb3J3
YXJkaW5nLWhlYWRlcnMKKworZ2VuZXJhdGUtd2Via2l0dGVzdHJ1bm5lci1mb3J3YXJkaW5nLWhl
YWRlcnM6ICQoV2ViS2l0MikvU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwg
JChQcm9ncmFtc19XZWJLaXRUZXN0UnVubmVyX1NPVVJDRVMpCisJJChBTV9WX0dFTikkKFBFUkwp
ICQ8ICQoc3JjZGlyKS9Ub29scy9XZWJLaXRUZXN0UnVubmVyICQoR0VOU09VUkNFU19XRUJLSVQy
KS9pbmNsdWRlIGd0aworCSQoQU1fVl9HRU4pJChQRVJMKSAkPCAkKHNyY2RpcikvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lciAkKEdFTlNPVVJDRVNfV0VCS0lUMikvaW5jbHVkZSBzb3VwCisKK25vaW5z
dF9QUk9HUkFNUyArPSBcCisJUHJvZ3JhbXMvV2ViS2l0VGVzdFJ1bm5lcgorCitQcm9ncmFtc19X
ZWJLaXRUZXN0UnVubmVyX1NPVVJDRVMgPSBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsv
bWFpbi5jcHAgXAorCVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1BsYXRmb3JtV2ViVmlld0d0
ay5jcHAgXAorCVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250cm9sbGVyR3RrLmNw
cCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVzdEludm9jYXRpb25HdGsuY3BwIFwK
KwlUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oIFwKKwlUb29scy9XZWJL
aXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmNwcCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5oIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcCBcCisJ
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5oCisKK1Byb2dyYW1zX1dlYktp
dFRlc3RSdW5uZXJfQ1BQRkxBR1MgPSBcCisJLWluY2x1ZGUgVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9XZWJLaXRUZXN0UnVubmVyUHJlZml4LmggXAorCS1JJChzcmNkaXIpL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIgXAorCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvaW5j
bHVkZSBcCisJJChnbG9iYWxfY3BwZmxhZ3MpIFwKKwkkKGphdmFzY3JpcHRjb3JlX2NwcGZsYWdz
KSBcCisJJChHTE9CQUxERVBTX0NGTEFHUykgXAorCSQoQ0FJUk9fQ0ZMQUdTKSBcCisJJChHVEtf
Q0ZMQUdTKSBcCisJJChMSUJTT1VQX0NGTEFHUykKK1Byb2dyYW1zX1dlYktpdFRlc3RSdW5uZXJf
Q1hYRkxBR1MgPSAkKGdsb2JhbF9jeHhmbGFncykKK1Byb2dyYW1zX1dlYktpdFRlc3RSdW5uZXJf
Q0ZMQUdTID0gJChnbG9iYWxfY2ZsYWdzKQorCitQcm9ncmFtc19XZWJLaXRUZXN0UnVubmVyX0xE
QUREID0gXAorCWxpYndlYmtpdDJndGstQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdF
QktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEgXAorCSQoR0xPQkFMREVQU19MSUJTKSBcCisJ
JChDQUlST19MSUJTKSBcCisJJChHVEtfTElCUykgXAorCSQoR0xJQl9MSUJTKSBcCisJJChMSUJT
T1VQX0xJQlMpIFwKKwkkKEZSRUVUWVBFX0xJQlMpIFwKKwkkKFdJTk1NX0xJQlMpCisKK1Byb2dy
YW1zX1dlYktpdFRlc3RSdW5uZXJfTERGTEFHUyA9IFwKKwktbm8tZmFzdC1pbnN0YWxsIFwKKwkt
bm8taW5zdGFsbAorCisjIFRoZSBJbmplY3RlZEJ1bmRsZSBsaWJyYXJ5IGFsbG93cyB0aGUgcmVu
ZGVyIHByb2Nlc3MgdG8gbG9hZCBoYXJuZXNzIGNvZGUuCitub2luc3RfTFRMSUJSQVJJRVMgKz0g
TGlicmFyaWVzL2xpYlRlc3RSdW5uZXJJbmplY3RlZEJ1bmRsZS5sYQorCitpbmplY3RlZF9idW5k
bGVfYnVpbHRfc291cmNlcyA9IFwKKwlEZXJpdmVkU291cmNlcy9JbmplY3RlZEJ1bmRsZS9KU0V2
ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwIFwKKwlEZXJpdmVkU291cmNlcy9JbmplY3RlZEJ1bmRs
ZS9KU0dDQ29udHJvbGxlci5jcHAgXAorCURlcml2ZWRTb3VyY2VzL0luamVjdGVkQnVuZGxlL0pT
TGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCitCVUlMVF9TT1VSQ0VTICs9ICQoaW5qZWN0ZWRfYnVu
ZGxlX2J1aWx0X3NvdXJjZXMpCisKK0xpYnJhcmllc19saWJUZXN0UnVubmVySW5qZWN0ZWRCdW5k
bGVfbGFfU09VUkNFUyA9IFwKKwkkKGluamVjdGVkX2J1bmRsZV9idWlsdF9zb3VyY2VzKSBcCisJ
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY3RpdmF0ZUZvbnRzLmggXAor
CVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvSlNXcmFwcGFi
bGUuaCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9K
U1dyYXBwZXIuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Jp
bmRpbmdzL0pTV3JhcHBlci5oIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaCBcCisJVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuY3BwIFwKKwlUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5oIFwKKwlUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9BY3RpdmF0ZUZvbnRzR3RrLmNwcCBcCisJ
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVH
dGsuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9MYXlv
dXRUZXN0Q29udHJvbGxlckd0ay5jcHAgXAorCVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmggXAorCVRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVNYWluLmNwcCBcCisJVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwIFwKKwlUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5oIFwKKwlU
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVy
LmNwcCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0
Q29udHJvbGxlci5oCisKK0xpYnJhcmllc19saWJUZXN0UnVubmVySW5qZWN0ZWRCdW5kbGVfbGFf
TERGTEFHUyA9IFwKKwktcnBhdGggJHtzaGVsbCBwd2R9LyQodG9wX2J1aWxkZGlyKS8uLi91bml4
L1Rlc3ROZXRzY2FwZVBsdWdpbi8ubGlicyBcCisJJChub191bmRlZmluZWQpIFwKKwktYXZvaWQt
dmVyc2lvbiBcCisJLW1vZHVsZQorCitMaWJyYXJpZXNfbGliVGVzdFJ1bm5lckluamVjdGVkQnVu
ZGxlX2xhX0NQUEZMQUdTID0gXAorCS1ERk9OVFNfQ09ORl9ESVI9XCIke3NoZWxsIHB3ZH0vJHtz
cmNkaXJ9L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9mb250c1wiIFwKKwktaW5jbHVkZSBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXJQcmVmaXguaCBcCisJLUkkKHNyY2Rp
cikvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lciBcCisJLUkkKHNyY2RpcikvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZSBcCisJLUkkKHNyY2RpcikvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncyBcCisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZl
ZFNvdXJjZXMvSW5qZWN0ZWRCdW5kbGUgXAorCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvaW5jbHVkZSBcCisJJChnbG9iYWxfY3BwZmxhZ3MpIFwKKwkkKGphdmFzY3Jp
cHRjb3JlX2NwcGZsYWdzKSBcCisJJChHTE9CQUxERVBTX0NGTEFHUykgXAorCSQoQ0FJUk9fQ0ZM
QUdTKSBcCisJJChHTElCX0NGTEFHUykgXAorCSQoR1RLX0NGTEFHUykgXAorCSQoTElCU09VUF9D
RkxBR1MpCitMaWJyYXJpZXNfbGliVGVzdFJ1bm5lckluamVjdGVkQnVuZGxlX2xhX0NYWEZMQUdT
ID0gJChnbG9iYWxfY3h4ZmxhZ3MpCitMaWJyYXJpZXNfbGliVGVzdFJ1bm5lckluamVjdGVkQnVu
ZGxlX2xhX0NGTEFHUyA9ICQoZ2xvYmFsX2NmbGFncykKKworY29kZV9nZW5lcmF0aW9uX2RlcGVu
ZGVuY2llcyA9IFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRp
bmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0gXAorCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvSURMUGFyc2VyLnBtIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lE
TFN0cnVjdHVyZS5wbSBcCisJU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JbkZpbGVz
UGFyc2VyLnBtIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJp
bmRpbmdzLnBsCisKK0Rlcml2ZWRTb3VyY2VzL0luamVjdGVkQnVuZGxlL0pTJS5jcHA6IFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvJS5pZGwgJChjb2RlX2dl
bmVyYXRpb25fZGVwZW5kZW5jaWVzKQorCSQoQU1fVl9HRU4pJChQRVJMKSBcCisJCS1JICQoc3Jj
ZGlyKS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzIFwKKwkJLUkgJChzcmNkaXIpL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MgXAorCQkkKHNyY2Rp
cikvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCBc
CisJCS0tZGVmaW5lcyBcIlwiIC0tZ2VuZXJhdG9yIFRlc3RSdW5uZXIgXAorCQktLWluY2x1ZGUg
JChzcmNkaXIpL1Rvb2xzL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzIFwKKwkJLS1vdXRwdXREaXIg
JCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL0luamVjdGVkQnVuZGxlIFwKKwkJJDwKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVz
dENvbnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5
b3V0VGVzdENvbnRyb2xsZXIuaAppbmRleCBjYzFiODVlNTE3YzAyOGJlZjhhZjEzYTUxNzk4OGEz
MmZlNTc4ZGYwLi5lNzdjYWQ4OGEwMmYwZjhjZjExMzRkMDE1M2Y3YjAwNmE5NDIwM2I3IDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RD
b250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5oCkBAIC00MCw2ICs0MCw4IEBAIHR5cGVkZWYgVUlOVF9QVFIg
UGxhdGZvcm1UaW1lclJlZjsKICNlbGlmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPFFUaW1lcj4K
IHR5cGVkZWYgUVRpbWVyIFBsYXRmb3JtVGltZXJSZWY7CisjZWxpZiBQTEFURk9STShHVEspCit0
eXBlZGVmIHVuc2lnbmVkIGludCBQbGF0Zm9ybVRpbWVyUmVmOwogI2VuZGlmCiAKIG5hbWVzcGFj
ZSBXVFIgewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9ndGsvQWN0aXZhdGVGb250c0d0ay5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL2d0ay9BY3RpdmF0ZUZvbnRzR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MDMzM2I2Y2Q0
MjI3YTUyMDRjYjc0YjgyMmVlOWNhOWExZWRiYzFmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvQWN0aXZhdGVGb250c0d0ay5jcHAK
QEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QWN0aXZhdGVGb250cy5oIgorCisjaW5jbHVkZSA8Zm9udGNvbmZpZy9mb250Y29uZmlnLmg+Cisj
aW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKwor
bmFtZXNwYWNlIFdUUiB7CisKK3ZvaWQgaW5pdGlhbGl6ZUd0a1NldHRpbmdzKCkKK3sKKworICAg
IEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a19zZXR0aW5nc19nZXRfZGVmYXVsdCgpOworICAg
IGlmICghc2V0dGluZ3MpCisgICAgICAgIHJldHVybjsKKyAgICBnX29iamVjdF9zZXQoc2V0dGlu
Z3MsIAorICAgICAgICAgICAgICAgICAiZ3RrLXhmdC1kcGkiLCA5ODMwNCwKKyAgICAgICAgICAg
ICAgICAgImd0ay14ZnQtYW50aWFsaWFzIiwgMSwKKyAgICAgICAgICAgICAgICAgImd0ay14ZnQt
aGludGluZyIsIDAsCisgICAgICAgICAgICAgICAgICJndGstZm9udC1uYW1lIiwgIkxpYmVyYXRp
b24gU2FucyAxMiIsCisgICAgICAgICAgICAgICAgICJndGstdGhlbWUtbmFtZSIsICJSYWxlaWdo
IiwKKyAgICAgICAgICAgICAgICAgImd0ay14ZnQtcmdiYSIsICJub25lIiwgTlVMTCk7Cit9CisK
K3ZvaWQgaW5pdGl0aWFsaXplRm9udENvbmZpZ1NldHRpbmcoKQoreworICAgIEZjSW5pdCgpOwor
CisgICAgLy8gSWYgYSB0ZXN0IHJlc3VsdGVkIGEgZm9udCBiZWluZyBhZGRlZCBvciByZW1vdmVk
IHZpYSB0aGUgQGZvbnQtZmFjZSBydWxlLCB0aGVuCisgICAgLy8gd2Ugd2FudCB0byByZXNldCB0
aGUgRm9udENvbmZpZyBjb25maWd1cmF0aW9uIHRvIHByZXZlbnQgaXQgZnJvbSBhZmZlY3Rpbmcg
b3RoZXIgdGVzdHMuCisgICAgc3RhdGljIGludCBudW1Gb250cyA9IDA7CisgICAgRmNGb250U2V0
KiBhcHBGb250U2V0ID0gRmNDb25maWdHZXRGb250cygwLCBGY1NldEFwcGxpY2F0aW9uKTsKKyAg
ICBpZiAoYXBwRm9udFNldCAmJiBudW1Gb250cyAmJiBhcHBGb250U2V0LT5uZm9udCA9PSBudW1G
b250cykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTG9hZCBvdXIgY29uZmlndXJhdGlvbiBm
aWxlLCB3aGljaCBzZXRzIHVwIHByb3BlciBhbGlhc2VzIGZvciBmYW1pbHkKKyAgICAvLyBuYW1l
cyBsaWtlIHNhbnMsIHNlcmlmIGFuZCBtb25vc3BhY2UuCisgICAgRmNDb25maWcqIGNvbmZpZyA9
IEZjQ29uZmlnQ3JlYXRlKCk7CisgICAgR093blB0cjxnY2hhcj4gZm9udENvbmZpZ0ZpbGVuYW1l
KGdfYnVpbGRfZmlsZW5hbWUoRk9OVFNfQ09ORl9ESVIsICJmb250cy5jb25mIiwgTlVMTCkpOwor
ICAgIGlmICghZ19maWxlX3Rlc3QoZm9udENvbmZpZ0ZpbGVuYW1lLmdldCgpLCBHX0ZJTEVfVEVT
VF9JU19SRUdVTEFSKSkKKyAgICAgICAgZ19lcnJvcigiQ2Fubm90IGZpbmQgZm9udHMuY29uZiBh
dCAlc1xuIiwgZm9udENvbmZpZ0ZpbGVuYW1lLmdldCgpKTsKKyAgICBpZiAoIUZjQ29uZmlnUGFy
c2VBbmRMb2FkKGNvbmZpZywgcmVpbnRlcnByZXRfY2FzdDxGY0NoYXI4Kj4oZm9udENvbmZpZ0Zp
bGVuYW1lLmdldCgpKSwgdHJ1ZSkpCisgICAgICAgIGdfZXJyb3IoIkNvdWxkbid0IGxvYWQgZm9u
dCBjb25maWd1cmF0aW9uIGZpbGUgZnJvbTogJXMiLCBmb250Q29uZmlnRmlsZW5hbWUuZ2V0KCkp
OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGZvbnRQYXRoc1tdWzJdID0geworICAg
ICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1saWJlcmF0aW9uL0xpYmVyYXRp
b25Nb25vLUJvbGRJdGFsaWMudHRmIiwKKyAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy9saWJl
cmF0aW9uL0xpYmVyYXRpb25Nb25vLUJvbGRJdGFsaWMudHRmIiwgfSwKKyAgICAgICAgeyAiL3Vz
ci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtbGliZXJhdGlvbi9MaWJlcmF0aW9uTW9uby1Cb2xk
LnR0ZiIsCisgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvbGliZXJhdGlvbi9MaWJlcmF0aW9u
TW9uby1Cb2xkLnR0ZiIsIH0sCisgICAgICAgIHsgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUv
dHRmLWxpYmVyYXRpb24vTGliZXJhdGlvbk1vbm8tSXRhbGljLnR0ZiIsCisgICAgICAgICAgIi91
c3Ivc2hhcmUvZm9udHMvbGliZXJhdGlvbi9MaWJlcmF0aW9uTW9uby1JdGFsaWMudHRmIiwgfSwK
KyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtbGliZXJhdGlvbi9MaWJl
cmF0aW9uTW9uby1SZWd1bGFyLnR0ZiIsCisgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvbGli
ZXJhdGlvbi9MaWJlcmF0aW9uTW9uby1SZWd1bGFyLnR0ZiIsIH0sCisgICAgICAgIHsgIi91c3Iv
c2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWxpYmVyYXRpb24vTGliZXJhdGlvblNhbnMtQm9sZEl0
YWxpYy50dGYiLAorICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL2xpYmVyYXRpb24vTGliZXJh
dGlvblNhbnMtQm9sZEl0YWxpYy50dGYiLCB9LAorICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRz
L3RydWV0eXBlL3R0Zi1saWJlcmF0aW9uL0xpYmVyYXRpb25TYW5zLUJvbGQudHRmIiwKKyAgICAg
ICAgICAiL3Vzci9zaGFyZS9mb250cy9saWJlcmF0aW9uL0xpYmVyYXRpb25TYW5zLUJvbGQudHRm
IiwgfSwKKyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtbGliZXJhdGlv
bi9MaWJlcmF0aW9uU2Fucy1JdGFsaWMudHRmIiwKKyAgICAgICAgICAiL3Vzci9zaGFyZS9mb250
cy9saWJlcmF0aW9uL0xpYmVyYXRpb25TYW5zLUl0YWxpYy50dGYiLCB9LAorICAgICAgICB7ICIv
dXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1saWJlcmF0aW9uL0xpYmVyYXRpb25TYW5zLVJl
Z3VsYXIudHRmIiwKKyAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy9saWJlcmF0aW9uL0xpYmVy
YXRpb25TYW5zLVJlZ3VsYXIudHRmIiwgfSwKKyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy90
cnVldHlwZS90dGYtbGliZXJhdGlvbi9MaWJlcmF0aW9uU2VyaWYtQm9sZEl0YWxpYy50dGYiLAor
ICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL2xpYmVyYXRpb24vTGliZXJhdGlvblNlcmlmLUJv
bGRJdGFsaWMudHRmIiwgfSwKKyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90
dGYtbGliZXJhdGlvbi9MaWJlcmF0aW9uU2VyaWYtQm9sZC50dGYiLAorICAgICAgICAgICIvdXNy
L3NoYXJlL2ZvbnRzL2xpYmVyYXRpb24vTGliZXJhdGlvblNlcmlmLUJvbGQudHRmIiwgfSwKKyAg
ICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtbGliZXJhdGlvbi9MaWJlcmF0
aW9uU2VyaWYtSXRhbGljLnR0ZiIsCisgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvbGliZXJh
dGlvbi9MaWJlcmF0aW9uU2VyaWYtSXRhbGljLnR0ZiIsIH0sCisgICAgICAgIHsgIi91c3Ivc2hh
cmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWxpYmVyYXRpb24vTGliZXJhdGlvblNlcmlmLVJlZ3VsYXIu
dHRmIiwKKyAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy9saWJlcmF0aW9uL0xpYmVyYXRpb25T
ZXJpZi1SZWd1bGFyLnR0ZiIsIH0sCisgICAgICAgIHsgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5
cGUvdHRmLWRlamF2dS9EZWphVnVTYW5zLnR0ZiIsCisgICAgICAgICAgIi91c3Ivc2hhcmUvZm9u
dHMvZGVqYXZ1L0RlamFWdVNhbnMudHRmIiwgfSwKKyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250
cy90cnVldHlwZS90dGYtZGVqYXZ1L0RlamFWdVNlcmlmLnR0ZiIsCisgICAgICAgICAgIi91c3Iv
c2hhcmUvZm9udHMvZGVqYXZ1L0RlamFWdVNlcmlmLnR0ZiIsIH0sCisKKyAgICAgICAgLy8gTWF0
aE1MIHRlc3RzIHJlcXVpcmUgdGhlIFNUSVggZm9udHMuCisgICAgICAgIHsgIi91c3Ivc2hhcmUv
Zm9udHMvb3BlbnR5cGUvc3RpeC9TVElYR2VuZXJhbC5vdGYiLAorICAgICAgICAgICIvdXNyL3No
YXJlL2ZvbnRzL3N0aXgvU1RJWEdlbmVyYWwub3RmIiB9LAorICAgICAgICB7ICIvdXNyL3NoYXJl
L2ZvbnRzL29wZW50eXBlL3N0aXgvU1RJWEdlbmVyYWxCb2xJdGEub3RmIiwKKyAgICAgICAgICAi
L3Vzci9zaGFyZS9mb250cy9zdGl4L1NUSVhHZW5lcmFsQm9sSXRhLm90ZiIgfSwKKyAgICAgICAg
eyAiL3Vzci9zaGFyZS9mb250cy9vcGVudHlwZS9zdGl4L1NUSVhHZW5lcmFsQm9sLm90ZiIsCisg
ICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvc3RpeC9TVElYR2VuZXJhbEJvbC5vdGYiIH0sCisg
ICAgICAgIHsgIi91c3Ivc2hhcmUvZm9udHMvb3BlbnR5cGUvc3RpeC9TVElYR2VuZXJhbEl0YWxp
Yy5vdGYiLAorICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3N0aXgvU1RJWEdlbmVyYWxJdGFs
aWMub3RmIiB9CisgICAgfTsKKworICAgIC8vIFRPRE86IFNvbWUgdGVzdHMgdXNlIEx1Y2lkYS4g
V2Ugc2hvdWxkIGxvYWQgdGhlc2UgYXMgd2VsbCwgb25jZSBpdCBiZWNvbWVzCisgICAgLy8gY2xl
YXIgaG93IHRvIGluc3RhbGwgdGhlc2UgZm9udHMgZWFzaWx5IG9uIEZlZG9yYS4KKyAgICBmb3Ig
KHNpemVfdCBmb250ID0gMDsgZm9udCA8IEdfTl9FTEVNRU5UUyhmb250UGF0aHMpOyBmb250Kysp
IHsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBmb3IgKHNpemVfdCBwYXRo
ID0gMDsgcGF0aCA8IDI7IHBhdGgrKykgeworCisgICAgICAgICAgICBpZiAoZ19maWxlX3Rlc3Qo
Zm9udFBhdGhzW2ZvbnRdW3BhdGhdLCBHX0ZJTEVfVEVTVF9FWElTVFMpKSB7CisgICAgICAgICAg
ICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICghRmNDb25maWdBcHBGb250
QWRkRmlsZShjb25maWcsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGZvbnRQYXRo
c1tmb250XVtwYXRoXSkpKQorICAgICAgICAgICAgICAgICAgICBnX2Vycm9yKCJDb3VsZCBub3Qg
bG9hZCBmb250IGF0ICVzISIsIGZvbnRQYXRoc1tmb250XVtwYXRoXSk7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgICAgICBnX2Vycm9yKCJDb3VsZCBu
b3QgZmluZCBmb250IGF0ICVzLiBFaXRoZXIgaW5zdGFsbCB0aGlzIGZvbnQgb3IgZmlsZSBhIGJ1
ZyAiCisgICAgICAgICAgICAgICAgICAgICJhdCBodHRwOi8vYnVncy53ZWJraXQub3JnIGlmIGl0
IGlzIGluc3RhbGxlZCBpbiBhbm90aGVyIGxvY2F0aW9uLiIsCisgICAgICAgICAgICAgICAgICAg
IGZvbnRQYXRoc1tmb250XVswXSk7CisgICAgfQorCisgICAgLy8gQWhlbSBpcyB1c2VkIGJ5IG1h
bnkgbGF5b3V0IHRlc3RzLgorICAgIEdPd25QdHI8Z2NoYXI+IGFoZW1Gb250RmlsZW5hbWUoZ19i
dWlsZF9maWxlbmFtZShGT05UU19DT05GX0RJUiwgIkFIRU1fX19fLlRURiIsIE5VTEwpKTsKKyAg
ICBpZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUoY29uZmlnLCByZWludGVycHJldF9jYXN0PEZj
Q2hhcjgqPihhaGVtRm9udEZpbGVuYW1lLmdldCgpKSkpCisgICAgICAgIGdfZXJyb3IoIkNvdWxk
IG5vdCBsb2FkIGZvbnQgYXQgJXMhIiwgYWhlbUZvbnRGaWxlbmFtZS5nZXQoKSk7IAorCisgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGZvbnRGaWxlbmFtZXNbXSA9IHsKKyAgICAgICAgIkNvbG9yQml0
cy50dGYiLAorICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjEwMC50dGYiLAorICAgICAgICAi
V2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50dGYiLAorICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hl
cjMwMC50dGYiLAorICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjQwMC50dGYiLAorICAgICAg
ICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjUwMC50dGYiLAorICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0
Y2hlcjYwMC50dGYiLAorICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjcwMC50dGYiLAorICAg
ICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGYiLAorICAgICAgICAiV2ViS2l0V2VpZ2h0
V2F0Y2hlcjkwMC50dGYiLAorICAgICAgICAwCisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBmb250RmlsZW5hbWVzW2ldOyArK2kpIHsKKyAgICAgICAgR093blB0cjxnY2hhcj4gZm9u
dEZpbGVuYW1lKGdfYnVpbGRfZmlsZW5hbWUoRk9OVFNfQ09ORl9ESVIsICIuLiIsICIuLiIsICJm
b250cyIsIGZvbnRGaWxlbmFtZXNbaV0sIE5VTEwpKTsKKyAgICAgICAgaWYgKCFGY0NvbmZpZ0Fw
cEZvbnRBZGRGaWxlKGNvbmZpZywgcmVpbnRlcnByZXRfY2FzdDxGY0NoYXI4Kj4oZm9udEZpbGVu
YW1lLmdldCgpKSkpCisgICAgICAgICAgICBnX2Vycm9yKCJDb3VsZCBub3QgbG9hZCBmb250IGF0
ICVzISIsIGZvbnRGaWxlbmFtZS5nZXQoKSk7IAorICAgIH0KKworICAgIC8vIEEgZm9udCB3aXRo
IG5vIHZhbGlkIEZvbnRjb25maWcgZW5jb2RpbmcgdG8gdGVzdCBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc0NTIKKyAgICBHT3duUHRyPGdjaGFyPiBmb250V2l0aE5v
VmFsaWRFbmNvZGluZ0ZpbGVuYW1lKGdfYnVpbGRfZmlsZW5hbWUoRk9OVFNfQ09ORl9ESVIsICJG
b250V2l0aE5vVmFsaWRFbmNvZGluZy5mb24iLCBOVUxMKSk7CisgICAgaWYgKCFGY0NvbmZpZ0Fw
cEZvbnRBZGRGaWxlKGNvbmZpZywgcmVpbnRlcnByZXRfY2FzdDxGY0NoYXI4Kj4oZm9udFdpdGhO
b1ZhbGlkRW5jb2RpbmdGaWxlbmFtZS5nZXQoKSkpKQorICAgICAgICBnX2Vycm9yKCJDb3VsZCBu
b3QgbG9hZCBmb250IGF0ICVzISIsIGZvbnRXaXRoTm9WYWxpZEVuY29kaW5nRmlsZW5hbWUuZ2V0
KCkpOyAKKworICAgIGlmICghRmNDb25maWdTZXRDdXJyZW50KGNvbmZpZykpCisgICAgICAgIGdf
ZXJyb3IoIkNvdWxkIG5vdCBzZXQgdGhlIGN1cnJlbnQgZm9udCBjb25maWd1cmF0aW9uISIpOwor
CisgICAgbnVtRm9udHMgPSBGY0NvbmZpZ0dldEZvbnRzKGNvbmZpZywgRmNTZXRBcHBsaWNhdGlv
biktPm5mb250OworfQorCit2b2lkIGFjdGl2YXRlRm9udHMoKQoreworICAgIGluaXRpYWxpemVH
dGtTZXR0aW5ncygpOworICAgIGluaXRpdGlhbGl6ZUZvbnRDb25maWdTZXR0aW5nKCk7Cit9CisK
K30KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZ3Rr
L0luamVjdGVkQnVuZGxlR3RrLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvZ3RrL0luamVjdGVkQnVuZGxlR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYjgwYWVhMWJkNDEy
ZTEwYzk5ODQ1OGViYWI2YjljZjQwNDI1YmJmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwCkBA
IC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgor
CituYW1lc3BhY2UgV1RSIHsKKworc3RhdGljIHZvaWQgbG9nSGFuZGxlcihjb25zdCBnY2hhciog
ZG9tYWluLCBHTG9nTGV2ZWxGbGFncyBsZXZlbCwgY29uc3QgZ2NoYXIqIG1lc3NhZ2UsIGdwb2lu
dGVyIGRhdGEpCit7CisgICAgaWYgKGxldmVsIDwgR19MT0dfTEVWRUxfREVCVUcpCisgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1lc3NhZ2UpOworfQorCisKK3ZvaWQgSW5qZWN0ZWRC
dW5kbGU6OnBsYXRmb3JtSW5pdGlhbGl6ZShXS1R5cGVSZWYpCit7CisgICAgLy8gU29tZSBwbHVn
aW5zIG1pZ2h0IHRyeSB0byB1c2UgdGhlIEdMaWIgbG9nZ2VyIGZvciBwcmludGluZyBkZWJ1ZyBt
ZXNzYWdlcy4gVGhpcworICAgIC8vIHdpbGwgY2F1c2UgdGVzdHMgdG8gZmFpbCBiZWNhdXNlIG9m
IHVuZXhwZWN0ZWQgb3V0cHV0LiBXZSBzcXVlbGNoIGFsbCBkZWJ1ZworICAgIC8vIG1lc3NhZ2Vz
IHNlbnQgdG8gdGhlIGxvZ2dlci4KKyAgICBnX2xvZ19zZXRfZGVmYXVsdF9oYW5kbGVyKGxvZ0hh
bmRsZXIsIDApOworfQorCit9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3Rr
LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZ3RrL0xheW91dFRl
c3RDb250cm9sbGVyR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMDMyNGFhOTNhNjUyYTlkMDM2N2FjNmIx
OTNjYzEzYzFiZTYzZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCkBAIC0wLDAg
KzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgor
CisjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKKyNpbmNsdWRlIDxnbGliLmg+CisKK25hbWVz
cGFjZSBXVFIgeworCitzdGF0aWMgZ2Jvb2xlYW4gd2FpdFRvRHVtcFdhdGNoZG9nVGltZXJJbnRl
cnZhbENhbGxiYWNrKGdwb2ludGVyKQoreworICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5s
YXlvdXRUZXN0Q29udHJvbGxlcigpLT53YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7Cisg
ICAgcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBsYXRmb3Jt
SW5pdGlhbGl6ZSgpCit7CisgICAgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lciA9IDA7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmludmFsaWRhdGVXYWl0VG9EdW1wV2F0Y2hkb2dU
aW1lcigpCit7CisgICAgaWYgKCFtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKQorICAgICAgICBy
ZXR1cm47CisgICAgZ19zb3VyY2VfcmVtb3ZlKG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIpOwor
ICAgIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIgPSAwOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjppbml0aWFsaXplV2FpdFRvRHVtcFdhdGNoZG9nVGltZXJJZk5lZWRlZCgpCit7
CisgICAgaWYgKG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIgPSBnX3RpbWVvdXRfYWRkKHdhaXRUb0R1bXBX
YXRjaGRvZ1RpbWVySW50ZXJ2YWwgKiAxMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVySW50ZXJ2YWxDYWxsYmFj
aywgMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxh
dGZvcm1XZWJWaWV3LmgKaW5kZXggOTczOWQ0MjE3OTk5NTllODUzZThiNGRmNzIwY2RkMzI5Mzc5
ODhkYi4uY2JjNDhlNDk1ODAwOWY1NTkzN2E4YjNmMThmODM2ZTk0YmI1N2I0MiAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCkBAIC00Niw2ICs0NiwxMCBAQCB0eXBl
ZGVmIE5TV2luZG93KiBQbGF0Zm9ybVdpbmRvdzsKICNlbGlmIGRlZmluZWQoV0lOMzIpIHx8IGRl
ZmluZWQoX1dJTjMyKQogdHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1XS1ZpZXc7CiB0eXBlZGVm
IEhXTkQgUGxhdGZvcm1XaW5kb3c7CisjZWxpZiBkZWZpbmVkKEJVSUxESU5HX0dUS19fKQordHlw
ZWRlZiBzdHJ1Y3QgX0d0a1dpZGdldCBHdGtXaWRnZXQ7Cit0eXBlZGVmIFdLVmlld1JlZiBQbGF0
Zm9ybVdLVmlldzsKK3R5cGVkZWYgR3RrV2lkZ2V0KiBQbGF0Zm9ybVdpbmRvdzsKICNlbmRpZgog
CiBuYW1lc3BhY2UgV1RSIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3Rr
L1BsYXRmb3JtV2ViVmlld0d0ay5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9QbGF0
Zm9ybVdlYlZpZXdHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjYTc5NjAxZjNmM2RmZmU3MjY1NjRhNGQ2
MWZlYTdjODkxYWFjZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2d0ay9QbGF0Zm9ybVdlYlZpZXdHdGsuY3BwCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCisKKyNpbmNs
dWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXVFIgeworCitQbGF0Zm9ybVdlYlZpZXc6OlBs
YXRmb3JtV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdy
b3VwKQorICAgIDogbV92aWV3KFdLVmlld0NyZWF0ZShjb250ZXh0LCBwYWdlR3JvdXApKQorICAg
ICwgbV93aW5kb3coZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19QT1BVUCkpCit7CisgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3dpbmRvdyksIFdLVmlld0dldFdpbmRvdyht
X3ZpZXcpKTsKKworICAgIGd0a193aW5kb3dfcmVzaXplKEdUS19XSU5ET1cobV93aW5kb3cpLCA4
MDAsIDYwMCk7CisgICAgR3RrQWxsb2NhdGlvbiBzaXplID0geyAwLCAwLCA4MDAsIDYwMCB9Owor
ICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShtX3dpbmRvdywgJnNpemUpOworICAgIGd0a193
aWRnZXRfc2hvd19hbGwobV93aW5kb3cpOworCisgICAgd2hpbGUgKGd0a19ldmVudHNfcGVuZGlu
ZygpKQorICAgICAgICBndGtfbWFpbl9pdGVyYXRpb24oKTsKK30KKworUGxhdGZvcm1XZWJWaWV3
Ojp+UGxhdGZvcm1XZWJWaWV3KCkKK3sKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV93aW5kb3cp
OworfQorCit2b2lkIFBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8odW5zaWduZWQgd2lkdGgsIHVu
c2lnbmVkIGhlaWdodCkKK3sKKyAgICBndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9XKG1fd2lu
ZG93KSwgd2lkdGgsIGhlaWdodCk7CisgICAgR3RrQWxsb2NhdGlvbiBzaXplID0geyAwLCAwLCB3
aWR0aCwgaGVpZ2h0IH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKG1fd2luZG93LCAm
c2l6ZSk7CisKKyAgICB3aGlsZSAoZ3RrX2V2ZW50c19wZW5kaW5nKCkpCisgICAgICAgIGd0a19t
YWluX2l0ZXJhdGlvbigpOworfQorCitXS1BhZ2VSZWYgUGxhdGZvcm1XZWJWaWV3OjpwYWdlKCkK
K3sKKyAgICByZXR1cm4gV0tWaWV3R2V0UGFnZShtX3ZpZXcpOworfQorCit2b2lkIFBsYXRmb3Jt
V2ViVmlldzo6Zm9jdXMoKQoreworfQorCitXS1JlY3QgUGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dG
cmFtZSgpCit7CisgICAgR3RrQWxsb2NhdGlvbiBnZW9tZXRyeTsKKyAgICBnaW50IGRlcHRoOwor
ICAgIGdka193aW5kb3dfZ2V0X2dlb21ldHJ5KGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lE
R0VUKG1fd2luZG93KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdlb21ldHJ5Lngs
ICZnZW9tZXRyeS55LCAmZ2VvbWV0cnkud2lkdGgsICZnZW9tZXRyeS5oZWlnaHQsICZkZXB0aCk7
CisKKyAgICBXS1JlY3QgZnJhbWU7CisgICAgZnJhbWUub3JpZ2luLnggPSBnZW9tZXRyeS54Owor
ICAgIGZyYW1lLm9yaWdpbi55ID0gZ2VvbWV0cnkueTsKKyAgICBmcmFtZS5zaXplLndpZHRoID0g
Z2VvbWV0cnkud2lkdGg7CisgICAgZnJhbWUuc2l6ZS5oZWlnaHQgPSBnZW9tZXRyeS5oZWlnaHQ7
CisgICAgcmV0dXJuIGZyYW1lOworfQorCit2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2V0V2luZG93
RnJhbWUoV0tSZWN0IGZyYW1lKQoreworICAgIGd0a193aW5kb3dfbW92ZShHVEtfV0lORE9XKG1f
d2luZG93KSwgZnJhbWUub3JpZ2luLngsIGZyYW1lLm9yaWdpbi55KTsKKyAgICByZXNpemVUbyhm
cmFtZS5zaXplLndpZHRoLCBmcmFtZS5zaXplLmhlaWdodCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdUUgorCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJv
bGxlckd0ay5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJvbGxlckd0
ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZThiOTZiZDk4MzVkM2RjNGI0YzNhYTg4MTE5MjZlZDIxMTgxZjFi
ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250
cm9sbGVyR3RrLmNwcApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+Cisj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV1RSIHsKKworc3RhdGljIGd1aW50IGdUaW1lb3V0U291cmNl
SWQgPSAwOworCitzdGF0aWMgdm9pZCBjYW5jZWxUaW1lb3V0KCkKK3sKKyAgICBpZiAoIWdUaW1l
b3V0U291cmNlSWQpCisgICAgICAgIHJldHVybjsKKyAgICBnX3NvdXJjZV9yZW1vdmUoZ1RpbWVv
dXRTb3VyY2VJZCk7CisgICAgZ1RpbWVvdXRTb3VyY2VJZCA9IDA7Cit9CisKK3ZvaWQgVGVzdENv
bnRyb2xsZXI6Om5vdGlmeURvbmUoKQoreworICAgIGd0a19tYWluX3F1aXQoKTsKKyAgICBjYW5j
ZWxUaW1lb3V0KCk7Cit9CisKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6
ZSgpCit7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB0aW1lb3V0Q2FsbGJhY2soZ3BvaW50ZXIpCit7
CisgICAgZnByaW50ZihzdGRlcnIsICJGQUlMOiBUZXN0Q29udHJvbGxlclJ1bkxvb3AgdGltZWQg
b3V0LlxuIik7CisgICAgZ3RrX21haW5fcXVpdCgpOworICAgIHJldHVybiBGQUxTRTsKK30KKwor
dm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SdW5VbnRpbChib29sJiwgZG91YmxlIHRpbWVv
dXQpCit7CisgICAgY2FuY2VsVGltZW91dCgpOworICAgIGdUaW1lb3V0U291cmNlSWQgPSBnX3Rp
bWVvdXRfYWRkKHRpbWVvdXQgKiAxMDAwLCB0aW1lb3V0Q2FsbGJhY2ssIDApOworICAgIGd0a19t
YWluKCk7Cit9CisKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemVJbmplY3RlZEJ1bmRs
ZVBhdGgoKQoreworICAgIGNvbnN0IGNoYXIqIGJ1bmRsZVBhdGggPSBnX2dldGVudigiVEVTVF9S
VU5ORVJfSU5KRUNURURfQlVORExFX0ZJTEVOQU1FIik7CisgICAgaWYgKCFidW5kbGVQYXRoKSB7
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVEVTVF9SVU5ORVJfSU5KRUNURURfQlVORExFX0ZJ
TEVOQU1FIGVudmlyb25tZW50IHZhcmlhYmxlIG5vdCBmb3VuZFxuIik7CisgICAgICAgIGV4aXQo
MCk7CisgICAgfQorCisgICAgZ3NpemUgYnl0ZXNXcml0dGVuOworICAgIEdPd25QdHI8Y2hhcj4g
dXRmOEJ1bmRsZVBhdGgoZ19maWxlbmFtZV90b191dGY4KGJ1bmRsZVBhdGgsIC0xLCAwLCAmYnl0
ZXNXcml0dGVuLCAwKSk7CisgICAgbV9pbmplY3RlZEJ1bmRsZVBhdGggPSBXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyh1dGY4QnVuZGxlUGF0aC5nZXQoKSk7Cit9CisKK3ZvaWQgVGVzdENv
bnRyb2xsZXI6OmluaXRpYWxpemVUZXN0UGx1Z2luRGlyZWN0b3J5KCkKK3sKKyAgICAvLyBUaGlz
IGlzIGNhbGxlZCBhZnRlciBpbml0aWFsaXplSW5qZWN0ZWRCdW5kbGVQYXRoLgorICAgIG1fdGVz
dFBsdWdpbkRpcmVjdG9yeSA9IG1faW5qZWN0ZWRCdW5kbGVQYXRoOworfQorCit2b2lkIFRlc3RD
b250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVDb250ZXh0KCkKK3sKK30KKwordm9pZCBUZXN0
Q29udHJvbGxlcjo6cnVuTW9kYWwoUGxhdGZvcm1XZWJWaWV3KikKK3sKKyAgICAvLyBGSVhNRTog
TmVlZCB0byBpbXBsZW1lbnQgdGhpcyB0byB0ZXN0IHNob3dNb2RhbERpYWxvZy4KK30KKworY29u
c3QgY2hhciogVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtTGlicmFyeVBhdGhGb3JUZXN0aW5nKCkK
K3sKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0SW52b2NhdGlvbkd0ay5jcHAgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0SW52b2NhdGlvbkd0ay5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmE3
MWRhMmE4YmY2NDRmYTA3MzU5OGM2NjNiMDU3MjJkY2FmYjE5MAotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RJbnZvY2F0aW9uR3RrLmNwcApAQCAtMCww
ICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRl
c3RJbnZvY2F0aW9uLmgiCisKK25hbWVzcGFjZSBXVFIgeworCit2b2lkIFRlc3RJbnZvY2F0aW9u
OjpkdW1wUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZChjb25zdCBPcGFxdWVXS0ltYWdlKikK
K3sKK30KKworfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2d0ay9tYWluLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL21haW4uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmU5YTg0Mzk2YTY0YjU0YmEyY2UwNjY3NTQ5ODY3OWI5Y2RjYWEyNmUKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9tYWluLmNwcApAQCAt
MCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgi
CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfaW5pdCgmYXJn
YywgJmFyZ3YpOworICAgIFdUUjo6VGVzdENvbnRyb2xsZXIgY29udHJvbGxlcihhcmdjLCBjb25z
dF9jYXN0PGNvbnN0IGNoYXIqKj4oYXJndikpOworICAgIHJldHVybiAwOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89315</attachid>
            <date>2011-04-12 17:32:31 -0700</date>
            <delta_ts>2011-04-20 11:22:58 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>bug-57068-20110412173221.patch</filename>
            <type>text/plain</type>
            <size>42962</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMzODEKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCBkNzEyNTJiZWE0ZWFjMDc0ZjM0MTg5OTFjYjk0ZjM5NDc1ZjFjZDA2Li5hYWJj
NmNhODc3ZjA3ZGQxMjliM2Q5ZGY2MzljYzZiYTk3ODJiODQ0IDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDMtMzAgIE1hcnRpbiBS
b2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFtXZWJLaXQyXSBJbXBsZW1lbnQgYSBiYXNp
YyBXZWJLaXRUZXN0UnVubmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NzA2OAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZGVkIHJlZmVy
ZW5jZSB0byBXZWJLaXRUZXN0UnVubmVyIEdOVW1ha2VmaWxlLgorCiAyMDExLTA0LTA5ICBLZWl0
aCBLeXppdmF0ICA8a2VpdGgua3l6aXZhdEBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgTGFzemxvIEdvbWJvcy4KZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZp
bGUuYW0KaW5kZXggYWY1NDg5MWFhMTI2M2FhNmI5Nzk5M2ZmMmNhOTA1ZWEwMWMxZGQwNS4uOGM1
MDJmMDM0NmNiZWEwNTM2YWNiYjA2ZDBmY2NjNjY1ODQ2ZDIwNCAxMDA2NDQKLS0tIGEvR05VbWFr
ZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0KQEAgLTIzMCw2ICsyMzAsNyBAQCBpbmNsdWRl
IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCiBpZiBFTkFCTEVfV0VCS0lUMgogaW5jbHVk
ZSBTb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQogaW5jbHVkZSBUb29scy9NaW5pQnJvd3Nl
ci9ndGsvR05VbWFrZWZpbGUuYW0KK2luY2x1ZGUgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HTlVt
YWtlZmlsZS5hbQogIyBbR1RLXSBSZWZhY3RvciB0aGUgdHJhbnNsYXRpb25zIG5vdyB0aGF0IHdl
IGhhdmUgd2Via2l0MgogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTUxNTMKIHN0YW1wLXBvOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDA4OTRhNGU4MzZiODJmZDc4ZDJiOWFlOTRk
NmRiYmIwNTNiZGQyZGIuLjRiMjZkZmU1YTM1NTgwZmY5NjkzYzVkNGVmODIyMDkzODdkYzhkOTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMS0wMy0zMCAgTWFydGluIFJvYmluc29u
ICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW0dUS10gW1dlYktpdDJdIEltcGxlbWVudCBhIGJhc2ljIFdlYktp
dFRlc3RSdW5uZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU3MDY4CisKKyAgICAgICAgQWRkZWQgSW5qZWN0ZWRCdW5kbGUgc3VwcG9ydCBmb3IgR1RL
Ky4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
aDogQWRkZWQgdHlwZWRlZiBmb3IgR1RLKy4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL2d0ay9JbmplY3RlZEJ1bmRsZUd0ay5jcHA6IEFkZGVkIGltcGxlbWVudGF0aW9uLgor
ICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6bG9hZCk6IAorICAgICAgICAoV2ViS2l0
OjpJbmplY3RlZEJ1bmRsZTo6YWN0aXZhdGVNYWNGb250QXNjZW50SGFjayk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcDogUmVtb3ZlIHVubmVjZXNzYXJ5
IG1ldGhvZCBkZWZpbml0aW9uLgorCiAyMDExLTA0LTA4ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8
YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZS5oCmluZGV4IDY3NTVhMzlkZGE2ZDFiNjgxNmQ5OTE5MDEwYWUwNWQ0ZTA4YmY5ZTgu
LjMzZGViMzM1ZGZjZGNjOTM4ZjM4MWJjNzk2ZTY4YTQzZDcxNTBiZTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlLmgKQEAgLTM5LDYgKzM5LDEwIEBACiAjaW5jbHVkZSA8UUxpYnJhcnk+CiAjZW5kaWYKIAor
I2lmIFBMQVRGT1JNKEdUSykKK3R5cGVkZWYgc3RydWN0IF9HTW9kdWxlIEdNb2R1bGU7CisjZW5k
aWYKKwogbmFtZXNwYWNlIENvcmVJUEMgewogICAgIGNsYXNzIEFyZ3VtZW50RGVjb2RlcjsKICAg
ICBjbGFzcyBDb25uZWN0aW9uOwpAQCAtNTQsNyArNTgsNyBAQCB0eXBlZGVmIEhNT0RVTEUgUGxh
dGZvcm1CdW5kbGU7CiAjZWxpZiBQTEFURk9STShRVCkKIHR5cGVkZWYgUUxpYnJhcnkgUGxhdGZv
cm1CdW5kbGU7CiAjZWxpZiBQTEFURk9STShHVEspCi10eXBlZGVmIHZvaWQqIFBsYXRmb3JtQnVu
ZGxlOwordHlwZWRlZiA6OkdNb2R1bGUqIFBsYXRmb3JtQnVuZGxlOwogI2VuZGlmCiAKIGNsYXNz
IEltbXV0YWJsZUFycmF5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwCmluZGV4
IGJiZjI0ZTQzYjdkZmRkMDY5YjhkOGEzNjhjYTQxOTIyYzAxMmM5NTcuLmNhMWE0M2Y4Y2RjNWFl
ZTdmZTI5NmMxY2Y2NzZmMmQ3MTc3MWJiYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvZ3RrL0luamVjdGVkQnVuZGxlR3RrLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL2d0ay9JbmplY3RlZEJ1bmRs
ZUd0ay5jcHAKQEAgLTI5LDIwICsyOSwzMyBAQAogCiAjaW5jbHVkZSAiV0tCdW5kbGVBUElDYXN0
LmgiCiAjaW5jbHVkZSAiV0tCdW5kbGVJbml0aWFsaXplLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9O
b3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi1ib29sIEluamVjdGVkQnVuZGxlOjpsb2FkKEFQSU9iamVjdCop
Citib29sIEluamVjdGVkQnVuZGxlOjpsb2FkKEFQSU9iamVjdCogaW5pdGlhbGl6YXRpb25Vc2Vy
RGF0YSkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgbV9wbGF0Zm9ybUJ1bmRsZSA9IGdfbW9k
dWxlX29wZW4oZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKG1fcGF0aCkuZGF0YSgpLCBHX01PRFVM
RV9CSU5EX0xPQ0FMKTsKKyAgICBpZiAoIW1fcGxhdGZvcm1CdW5kbGUpIHsKKyAgICAgICAgZ193
YXJuaW5nKCJFcnJvciBsb2FkaW5nIHRoZSBpbmplY3RlZCBidW5kbGUgKCVzKTogJXMiLCBtX3Bh
dGgudXRmOCgpLmRhdGEoKSwgZ19tb2R1bGVfZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBXS0J1bmRsZUluaXRpYWxpemVGdW5jdGlvblB0ciBpbml0aWFsaXpl
RnVuY3Rpb24gPSAwOworICAgIGlmICghZ19tb2R1bGVfc3ltYm9sKG1fcGxhdGZvcm1CdW5kbGUs
ICJXS0J1bmRsZUluaXRpYWxpemUiLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmluaXRpYWxp
emVGdW5jdGlvbikpIHx8ICFpbml0aWFsaXplRnVuY3Rpb24pIHsKKyAgICAgICAgZ193YXJuaW5n
KCJFcnJvciBsb2FkaW5nIFdLQnVuZGxlSW5pdGlhbGl6ZSBzeW1ib2wgZnJvbSBpbmplY3RlZCBi
dW5kbGUuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbml0aWFsaXpl
RnVuY3Rpb24odG9BUEkodGhpcyksIHRvQVBJKGluaXRpYWxpemF0aW9uVXNlckRhdGEpKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6YWN0aXZhdGVNYWNGb250
QXNjZW50SGFjaygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggZGIwMmFlY2IyMzlmMTlmNDJmY2QzN2ZiZGVkZTJjNTE5MTJkZGEwNy4uMzJlYjA5NDk5
ZjVkZGViODM5YWM5MGFlY2I2OTFkZTg1MDVlNDA3OCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTAzLTMwICBN
YXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBbV2ViS2l0Ml0gSW1wbGVtZW50
IGEgYmFzaWMgV2ViS2l0VGVzdFJ1bm5lcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTcwNjgKKworICAgICAgICBBZGQgYW4gaW1wbGVtZW50YXRpb24g
b2YgV2ViS2l0VGVzdFJ1bm5lciBmb3IgR1RLKy4KKworICAgICAgICAqIFNjcmlwdHMvYnVpbGQt
d2Via2l0dGVzdHJ1bm5lcjogQWRkZWQga25vd2xlZGdlIG9mIEdUSysgVGVzdFJ1bm5lci4KKyAg
ICAgICAgKiBTY3JpcHRzL29sZC1ydW4td2Via2l0LXRlc3RzOiBEaXR0by4KKyAgICAgICAgKiBT
Y3JpcHRzL3J1bi1sYXVuY2hlcjogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRkaXJz
LnBtOiBEaXR0by4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0dOVW1ha2VmaWxlLmFtOiBB
ZGRlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRl
c3RDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9ndGsvQWN0aXZhdGVGb250c0d0ay5jcHA6IEFkZGVkLgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvZ3RrL0luamVjdGVkQnVuZGxlR3RrLmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRC
dW5kbGVHdGsuY3BwLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
Z3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwLgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3Lmg6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9ndGsvUGxhdGZvcm1XZWJWaWV3R3RrLmNwcDogQWRkZWQuCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVzdENvbnRyb2xsZXJHdGsuY3BwOiBBZGRlZC4K
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0SW52b2NhdGlvbkd0ay5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvZ3RrL0lu
amVjdGVkQnVuZGxlR3RrLmNwcC4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmR1bXBQ
aXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L2d0ay9tYWluLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwLgorICAgICAgICAobWFpbik6IEFk
ZGVkLgorCiAyMDExLTA0LTA5ICBLZWl0aCBLeXppdmF0ICA8a2VpdGgua3l6aXZhdEBub2tpYS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTGFzemxvIEdvbWJvcy4KZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0dGVzdHJ1bm5lciBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQt
d2Via2l0dGVzdHJ1bm5lcgppbmRleCBlOTZkZDZhMzczNDc3ZTJkZGY0ODg0NTAxNWI4OWJiNGU0
MzA3M2U1Li5mMDNjMTc5OWE3N2ZlZTMzZjgzZjlmODk1OGUxYWZhYzA2ZTk1NGU4IDEwMDc1NQot
LS0gYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdHRlc3RydW5uZXIKKysrIGIvVG9vbHMvU2Ny
aXB0cy9idWlsZC13ZWJraXR0ZXN0cnVubmVyCkBAIC02Myw4ICs2Myw4IEBAIGlmIChpc0FwcGxl
TWFjV2ViS2l0KCkpIHsKICAgICAkcmVzdWx0ID0gYnVpbGRYQ29kZVByb2plY3QoIldlYktpdFRl
c3RSdW5uZXIiLCAkY2xlYW4sIFhjb2RlT3B0aW9ucygpLCBAQVJHVik7CiB9IGVsc2lmIChpc0Fw
cGxlV2luV2ViS2l0KCkpIHsKICAgICAkcmVzdWx0ID0gYnVpbGRWaXN1YWxTdHVkaW9Qcm9qZWN0
KCJXZWJLaXRUZXN0UnVubmVyLnNsbiIsICRjbGVhbik7Ci19IGVsc2lmIChpc1F0KCkpIHsKLSAg
ICAjIFF0IGJ1aWxkcyBldmVyeXRoaW5nIGluIG9uZSBzaG90LiBObyBuZWVkIHRvIGJ1aWxkIGFu
eXRoaW5nIGhlcmUuCit9IGVsc2lmIChpc1F0KCkgfHwgaXNHdGsoKSkgeworICAgICMgUXQgYW5k
IEdUSysgYnVpbGQgZXZlcnl0aGluZyBpbiBvbmUgc2hvdC4gTm8gbmVlZCB0byBidWlsZCBhbnl0
aGluZyBoZXJlLgogICAgICRyZXN1bHQgPSAwOwogfSBlbHNlIHsKICAgICBkaWUgIldlYktpdFRl
c3RSdW5uZXIgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLlxuIjsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHMgYi9Ub29scy9TY3JpcHRzL29s
ZC1ydW4td2Via2l0LXRlc3RzCmluZGV4IDUxZjA4M2YzYTE0NjM0Mjg5MGY3NjA1MzFlNTkxMjA2
NTE2ODNmZTcuLjM3NWY5YTMxOGYwMDk2ZTA5N2Y4N2M5NTRiMTU0M2MyOWQyNGQ1MTcgMTAwNzU1
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHMKKysrIGIvVG9vbHMvU2Ny
aXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cwpAQCAtMzgwLDYgKzM4MCw5IEBAIGlmICgkdXNlV2Vi
S2l0VGVzdFJ1bm5lcikgewogICAgIH0gZWxzaWYgKGlzUXQoKSkgewogICAgICAgICAkcmVhbFBs
YXRmb3JtID0gJHBsYXRmb3JtOwogICAgICAgICAkcGxhdGZvcm0gPSAicXQtd2syIjsKKyAgICB9
IGVsc2lmIChpc0d0aygpKSB7CisgICAgICAgICRyZWFsUGxhdGZvcm0gPSAkcGxhdGZvcm07Cisg
ICAgICAgICRwbGF0Zm9ybSA9ICJndGstd2syIjsKICAgICB9CiB9CiAKQEAgLTExNzYsNiArMTE3
OSw3IEBAIGNsb3NlIEhUTUw7CiBteSBAY29uZmlndXJhdGlvbkFyZ3MgPSBhcmd1bWVudHNGb3JD
b25maWd1cmF0aW9uKCk7CiAKIGlmIChpc0d0aygpKSB7CisgIHB1c2goQGNvbmZpZ3VyYXRpb25B
cmdzLCAnLTInKSBpZiAkdXNlV2ViS2l0VGVzdFJ1bm5lcjsKICAgc3lzdGVtICJUb29scy9TY3Jp
cHRzL3J1bi1sYXVuY2hlciIsIEBjb25maWd1cmF0aW9uQXJncywgImZpbGU6Ly8iLiR0ZXN0UmVz
dWx0cyBpZiAkbGF1bmNoU2FmYXJpOwogfSBlbHNpZiAoaXNRdCgpKSB7CiAgIHVuc2hpZnQgQGNv
bmZpZ3VyYXRpb25BcmdzLCBxdygtZ3JhcGhpY3NzeXN0ZW0gcmFzdGVyIC1zdHlsZSB3aW5kb3dz
KTsKQEAgLTE1MDMsNiArMTUwNywxMSBAQCBzdWIgb3BlbkR1bXBUb29sKCkKICAgICBpZiAoaXNH
dGsoKSkgewogICAgICAgICAkQ0xFQU5fRU5We0dUS19NT0RVTEVTfSA9ICJnYWlsIjsKICAgICAg
ICAgJENMRUFOX0VOVntXRUJLSVRfSU5TUEVDVE9SX1BBVEh9ID0gIiRwcm9kdWN0RGlyL3Jlc291
cmNlcy9pbnNwZWN0b3IiOworCisgICAgICAgIGlmICgkdXNlV2ViS2l0VGVzdFJ1bm5lcikgewor
ICAgICAgICAgICAgbXkgJGluamVjdGVkQnVuZGxlUGF0aCA9IHByb2R1Y3REaXIoKSAuICIvTGli
cmFyaWVzLy5saWJzL2xpYlRlc3RSdW5uZXJJbmplY3RlZEJ1bmRsZSI7CisgICAgICAgICAgICAk
Q0xFQU5fRU5We1RFU1RfUlVOTkVSX0lOSkVDVEVEX0JVTkRMRV9GSUxFTkFNRX0gPSAkaW5qZWN0
ZWRCdW5kbGVQYXRoOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGlzUXQoKSkgewpAQCAt
MTY5Niw2ICsxNzA1LDggQEAgc3ViIGV4cGVjdGVkRGlyZWN0b3J5Rm9yVGVzdCgkOyQ7JCkKICAg
ICBpZiAoaXNBcHBsZVdpbldlYktpdCgpKSB7CiAgICAgICAgIHB1c2ggQGV4dHJhUGxhdGZvcm1z
LCAibWFjLXdrMiIgaWYgJHBsYXRmb3JtIGVxICJ3aW4td2syIjsKICAgICAgICAgcHVzaCBAZXh0
cmFQbGF0Zm9ybXMsIHF3KG1hYy1zbm93bGVvcGFyZCBtYWMpOworICAgIH0gZWxzaWYgKGlzR3Rr
KCkpIHsKKyAgICAgICAgcHVzaCBAZXh0cmFQbGF0Zm9ybXMsICJndGsiIGlmICRwbGF0Zm9ybSBl
cSAiZ3RrLXdrMiI7CiAgICAgfQogICAKICAgICBwdXNoIEBkaXJlY3RvcmllcywgbWFwIHsgY2F0
ZGlyKCRwbGF0Zm9ybUJhc2VEaXJlY3RvcnksICRfKSB9IEBleHRyYVBsYXRmb3JtczsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWxhdW5jaGVyIGIvVG9vbHMvU2NyaXB0cy9ydW4tbGF1
bmNoZXIKaW5kZXggNzMxZmJjMDRjMWJiNTgwMGRlY2E0OGFjMjg3M2U1ZWE4ZGU2OGM1Mi4uMDBj
NzE1ZDQ3NTQ2YWZkMDAwZGY0YmRkODM5YzA3MGY3OTQ2Nzc4OCAxMDA3NTUKLS0tIGEvVG9vbHMv
U2NyaXB0cy9ydW4tbGF1bmNoZXIKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tbGF1bmNoZXIKQEAg
LTY1LDcgKzY1LDExIEBAIGlmIChpc1F0KCkpIHsKIH0gZWxzZSB7CiAKICAgICBpZiAoaXNHdGso
KSkgewotICAgICAgICAkbGF1bmNoZXJQYXRoID0gY2F0ZGlyKCRsYXVuY2hlclBhdGgsICJQcm9n
cmFtcyIsICJHdGtMYXVuY2hlciIpOworICAgICAgICBpZiAoaXNXSzIoKSkgeworICAgICAgICAg
ICAgJGxhdW5jaGVyUGF0aCA9IGNhdGRpcigkbGF1bmNoZXJQYXRoLCAiUHJvZ3JhbXMiLCAiTWlu
aUJyb3dzZXIiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICRsYXVuY2hlclBhdGgg
PSBjYXRkaXIoJGxhdW5jaGVyUGF0aCwgIlByb2dyYW1zIiwgIkd0a0xhdW5jaGVyIik7CisgICAg
ICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKGlzRWZsKCkpIHsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0ZGlycy5wbSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQppbmRl
eCA4YzAzZjNiOTMzZWY0NDMzZmE0N2M3NWQwZDNlOTBmYzU5MTYyN2U2Li41ZDQ4NTZlYmMwMjBl
MTE2ZjM3N2RjYWFkZGQ2Yzc0NzA3YTFlYWJkIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdGRpcnMucG0KKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCkBAIC02MzAsMTIg
KzYzMCwxNyBAQCBzdWIgYnVpbHREeWxpYlBhdGhGb3JOYW1lCiAgICAgICAgIHJldHVybiAiJGNv
bmZpZ3VyYXRpb25Qcm9kdWN0RGlyL2xpYnd4d2Via2l0LmR5bGliIjsKICAgICB9CiAgICAgaWYg
KGlzR3RrKCkpIHsKLSAgICAgICAgbXkgJGxpYnJhcnlEaXIgPSAiJGNvbmZpZ3VyYXRpb25Qcm9k
dWN0RGlyLy5saWJzLyI7Ci0gICAgICAgIG15ICRleHRlbnNpb24gPSBpc0RhcndpbigpID8gImR5
bGliIiA6ICJzbyI7Ci0gICAgICAgIGlmICgtZSAkbGlicmFyeURpciAuICJsaWJ3ZWJraXRndGst
My4wLiRleHRlbnNpb24iKSB7Ci0gICAgICAgICAgICByZXR1cm4gJGxpYnJhcnlEaXIgLiAibGli
d2Via2l0Z3RrLTMuMC4kZXh0ZW5zaW9uIjsKKyAgICAgICAgIyBXZWJLaXRHVEsrIGZvciBHVEsy
LCBXZWJLaXRHVEsrIGZvciBHVEszLCBhbmQgV2ViS2l0MiByZXNwZWN0aXZlbHkuCisgICAgICAg
IG15IEBsaWJyYXJpZXMgPSAoImxpYndlYmtpdGd0ay0xLjAiLCAibGlid2Via2l0Z3RrLTMuMCIs
ICJsaWJ3ZWJraXQyZ3RrLTEuMCIpOworICAgICAgICBteSAkZXh0ZW5zaW9uID0gaXNEYXJ3aW4o
KSA/ICIuZHlsaWIiIDogIi5zbyI7CisKKyAgICAgICAgZm9yZWFjaCAoQGxpYnJhcmllcykgewor
ICAgICAgICAgICAgbXkgJGxpYnJhcnkgPSAiJGNvbmZpZ3VyYXRpb25Qcm9kdWN0RGlyLy5saWJz
LyIgLiAkXyAgLiAkZXh0ZW5zaW9uOworICAgICAgICAgICAgaWYgKC1lICRsaWJyYXJ5KSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICRsaWJyYXJ5OworICAgICAgICAgICAgfQogICAgICAgICB9
Ci0gICAgICAgIHJldHVybiAkbGlicmFyeURpciAuICJsaWJ3ZWJraXRndGstMS4wLiRleHRlbnNp
b24iOworICAgICAgICByZXR1cm4gIk5vdEZvdW5kIjsKICAgICB9CiAgICAgaWYgKGlzRWZsKCkp
IHsKICAgICAgICAgcmV0dXJuICIkY29uZmlndXJhdGlvblByb2R1Y3REaXIvJGxpYnJhcnlOYW1l
Ly4uL1dlYktpdC9saWJld2Via2l0LnNvIjsKQEAgLTE5NjMsNiArMTk2OCwxMiBAQCBzdWIgcnVu
V2ViS2l0VGVzdFJ1bm5lcgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmV0dXJuIHN5
c3RlbSAkd2ViS2l0VGVzdFJ1bm5lclBhdGgsIEBBUkdWOwogICAgICAgICB9CisgICAgfSBlbHNp
ZiAoaXNHdGsoKSkgeworICAgICAgICBteSAkcHJvZHVjdERpciA9IHByb2R1Y3REaXIoKTsKKyAg
ICAgICAgbXkgJGluamVjdGVkQnVuZGxlUGF0aCA9ICIkcHJvZHVjdERpci9MaWJyYXJpZXMvLmxp
YnMvbGliVGVzdFJ1bm5lckluamVjdGVkQnVuZGxlIjsKKyAgICAgICAgcHJpbnQgIlN0YXJ0aW5n
IFdlYktpdFRlc3RSdW5uZXIgd2l0aCBURVNUX1JVTk5FUl9JTkpFQ1RFRF9CVU5ETEVfRklMRU5B
TUUgc2V0IHRvIHBvaW50IHRvICRpbmplY3RlZEJ1bmRsZVBhdGguXG4iOworICAgICAgICAkRU5W
e1RFU1RfUlVOTkVSX0lOSkVDVEVEX0JVTkRMRV9GSUxFTkFNRX0gPSAkaW5qZWN0ZWRCdW5kbGVQ
YXRoOworICAgICAgICByZXR1cm4gc3lzdGVtICIkcHJvZHVjdERpci9Qcm9ncmFtcy9XZWJLaXRU
ZXN0UnVubmVyIiwgQEFSR1Y7CiAgICAgfQogCiAgICAgcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0dOVW1ha2VmaWxlLmFtIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9HTlVtYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MmM3ODRlZWM3ZDZmNTQxMTQ1MzMwZGE4
MmRlMWYxZTM5YTg1Y2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9HTlVtYWtlZmlsZS5hbQpAQCAtMCwwICsxLDEyMCBAQAorQlVJTFRfU09VUkNFUyArPSBcCisJ
Z2VuZXJhdGUtd2Via2l0dGVzdHJ1bm5lci1mb3J3YXJkaW5nLWhlYWRlcnMKKworZ2VuZXJhdGUt
d2Via2l0dGVzdHJ1bm5lci1mb3J3YXJkaW5nLWhlYWRlcnM6ICQoV2ViS2l0MikvU2NyaXB0cy9n
ZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwgJChQcm9ncmFtc19XZWJLaXRUZXN0UnVubmVy
X1NPVVJDRVMpCisJJChBTV9WX0dFTikkKFBFUkwpICQ8ICQoc3JjZGlyKS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyICQoR0VOU09VUkNFU19XRUJLSVQyKS9pbmNsdWRlIGd0aworCSQoQU1fVl9HRU4p
JChQRVJMKSAkPCAkKHNyY2RpcikvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lciAkKEdFTlNPVVJDRVNf
V0VCS0lUMikvaW5jbHVkZSBzb3VwCisKK25vaW5zdF9QUk9HUkFNUyArPSBcCisJUHJvZ3JhbXMv
V2ViS2l0VGVzdFJ1bm5lcgorCitQcm9ncmFtc19XZWJLaXRUZXN0UnVubmVyX1NPVVJDRVMgPSBc
CisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvbWFpbi5jcHAgXAorCVRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvZ3RrL1BsYXRmb3JtV2ViVmlld0d0ay5jcHAgXAorCVRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvZ3RrL1Rlc3RDb250cm9sbGVyR3RrLmNwcCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9ndGsvVGVzdEludm9jYXRpb25HdGsuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL1Bs
YXRmb3JtV2ViVmlldy5oIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9u
cy5oIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBcCisJVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oIFwKKwlUb29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
SW52b2NhdGlvbi5oCisKK1Byb2dyYW1zX1dlYktpdFRlc3RSdW5uZXJfQ1BQRkxBR1MgPSBcCisJ
LWluY2x1ZGUgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyUHJlZml4Lmgg
XAorCS1JJChzcmNkaXIpL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIgXAorCS1JJCh0b3BfYnVpbGRk
aXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvaW5jbHVkZSBcCisJJChnbG9iYWxfY3BwZmxhZ3Mp
IFwKKwkkKGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBcCisJJChHTE9CQUxERVBTX0NGTEFHUykg
XAorCSQoQ0FJUk9fQ0ZMQUdTKSBcCisJJChHVEtfQ0ZMQUdTKSBcCisJJChMSUJTT1VQX0NGTEFH
UykKK1Byb2dyYW1zX1dlYktpdFRlc3RSdW5uZXJfQ1hYRkxBR1MgPSAkKGdsb2JhbF9jeHhmbGFn
cykKK1Byb2dyYW1zX1dlYktpdFRlc3RSdW5uZXJfQ0ZMQUdTID0gJChnbG9iYWxfY2ZsYWdzKQor
CitQcm9ncmFtc19XZWJLaXRUZXN0UnVubmVyX0xEQUREID0gXAorCWxpYndlYmtpdDJndGstQFdF
QktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAu
bGEgXAorCSQoR0xPQkFMREVQU19MSUJTKSBcCisJJChDQUlST19MSUJTKSBcCisJJChHVEtfTElC
UykgXAorCSQoR0xJQl9MSUJTKSBcCisJJChMSUJTT1VQX0xJQlMpIFwKKwkkKEZSRUVUWVBFX0xJ
QlMpIFwKKwkkKFdJTk1NX0xJQlMpCisKK1Byb2dyYW1zX1dlYktpdFRlc3RSdW5uZXJfTERGTEFH
UyA9IFwKKwktbm8tZmFzdC1pbnN0YWxsIFwKKwktbm8taW5zdGFsbAorCisjIFRoZSBJbmplY3Rl
ZEJ1bmRsZSBsaWJyYXJ5IGFsbG93cyB0aGUgcmVuZGVyIHByb2Nlc3MgdG8gbG9hZCBoYXJuZXNz
IGNvZGUuCitub2luc3RfTFRMSUJSQVJJRVMgKz0gTGlicmFyaWVzL2xpYlRlc3RSdW5uZXJJbmpl
Y3RlZEJ1bmRsZS5sYQorCitpbmplY3RlZF9idW5kbGVfYnVpbHRfc291cmNlcyA9IFwKKwlEZXJp
dmVkU291cmNlcy9JbmplY3RlZEJ1bmRsZS9KU0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwIFwK
KwlEZXJpdmVkU291cmNlcy9JbmplY3RlZEJ1bmRsZS9KU0dDQ29udHJvbGxlci5jcHAgXAorCURl
cml2ZWRTb3VyY2VzL0luamVjdGVkQnVuZGxlL0pTTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCitC
VUlMVF9TT1VSQ0VTICs9ICQoaW5qZWN0ZWRfYnVuZGxlX2J1aWx0X3NvdXJjZXMpCisKK0xpYnJh
cmllc19saWJUZXN0UnVubmVySW5qZWN0ZWRCdW5kbGVfbGFfU09VUkNFUyA9IFwKKwkkKGluamVj
dGVkX2J1bmRsZV9idWlsdF9zb3VyY2VzKSBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9BY3RpdmF0ZUZvbnRzLmggXAorCVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvQmluZGluZ3MvSlNXcmFwcGFibGUuaCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9KU1dyYXBwZXIuY3BwIFwKKwlUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0pTV3JhcHBlci5oIFwKKwlUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIu
Y3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGlu
Z0NvbnRyb2xsZXIuaCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9H
Q0NvbnRyb2xsZXIuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0dDQ29udHJvbGxlci5oIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L2d0ay9BY3RpdmF0ZUZvbnRzR3RrLmNwcCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAgXAor
CVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3Bw
IFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxl
LmggXAorCVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGVNYWluLmNwcCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZVBhZ2UuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlUGFnZS5oIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCisKK0xpYnJhcmllc19s
aWJUZXN0UnVubmVySW5qZWN0ZWRCdW5kbGVfbGFfTERGTEFHUyA9IFwKKwktcnBhdGggJHtzaGVs
bCBwd2R9LyQodG9wX2J1aWxkZGlyKS8uLi91bml4L1Rlc3ROZXRzY2FwZVBsdWdpbi8ubGlicyBc
CisJJChub191bmRlZmluZWQpIFwKKwktYXZvaWQtdmVyc2lvbiBcCisJLW1vZHVsZQorCitMaWJy
YXJpZXNfbGliVGVzdFJ1bm5lckluamVjdGVkQnVuZGxlX2xhX0NQUEZMQUdTID0gXAorCS1ERk9O
VFNfQ09ORl9ESVI9XCIke3NoZWxsIHB3ZH0vJHtzcmNkaXJ9L1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2d0ay9mb250c1wiIFwKKwktaW5jbHVkZSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRl
c3RSdW5uZXJQcmVmaXguaCBcCisJLUkkKHNyY2RpcikvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lciBc
CisJLUkkKHNyY2RpcikvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZSBcCisJ
LUkkKHNyY2RpcikvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5n
cyBcCisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvSW5qZWN0ZWRCdW5kbGUgXAor
CS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvaW5jbHVkZSBcCisJJChn
bG9iYWxfY3BwZmxhZ3MpIFwKKwkkKGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBcCisJJChHTE9C
QUxERVBTX0NGTEFHUykgXAorCSQoQ0FJUk9fQ0ZMQUdTKSBcCisJJChHTElCX0NGTEFHUykgXAor
CSQoR1RLX0NGTEFHUykgXAorCSQoTElCU09VUF9DRkxBR1MpCitMaWJyYXJpZXNfbGliVGVzdFJ1
bm5lckluamVjdGVkQnVuZGxlX2xhX0NYWEZMQUdTID0gJChnbG9iYWxfY3h4ZmxhZ3MpCitMaWJy
YXJpZXNfbGliVGVzdFJ1bm5lckluamVjdGVkQnVuZGxlX2xhX0NGTEFHUyA9ICQoZ2xvYmFsX2Nm
bGFncykKKworY29kZV9nZW5lcmF0aW9uX2RlcGVuZGVuY2llcyA9IFwKKwlUb29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVy
LnBtIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0g
XAorCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFN0cnVjdHVyZS5wbSBcCisJU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JbkZpbGVzUGFyc2VyLnBtIFwKKwlTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsCisKK0Rlcml2ZWRTb3VyY2Vz
L0luamVjdGVkQnVuZGxlL0pTJS5jcHA6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvQmluZGluZ3MvJS5pZGwgJChjb2RlX2dlbmVyYXRpb25fZGVwZW5kZW5jaWVzKQorCSQo
QU1fVl9HRU4pJChQRVJMKSBcCisJCS1JICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzIFwKKwkJLUkgJChzcmNkaXIpL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvQmluZGluZ3MgXAorCQkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCBcCisJCS0tZGVmaW5lcyBcIlwiIC0tZ2VuZXJh
dG9yIFRlc3RSdW5uZXIgXAorCQktLWluY2x1ZGUgJChzcmNkaXIpL1Rvb2xzL0luamVjdGVkQnVu
ZGxlL0JpbmRpbmdzIFwKKwkJLS1vdXRwdXREaXIgJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3Vy
Y2VzL0luamVjdGVkQnVuZGxlIFwKKwkJJDwKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAppbmRleCBj
YzFiODVlNTE3YzAyOGJlZjhhZjEzYTUxNzk4OGEzMmZlNTc4ZGYwLi5lNzdjYWQ4OGEwMmYwZjhj
ZjExMzRkMDE1M2Y3YjAwNmE5NDIwM2I3IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCkBAIC00
MCw2ICs0MCw4IEBAIHR5cGVkZWYgVUlOVF9QVFIgUGxhdGZvcm1UaW1lclJlZjsKICNlbGlmIFBM
QVRGT1JNKFFUKQogI2luY2x1ZGUgPFFUaW1lcj4KIHR5cGVkZWYgUVRpbWVyIFBsYXRmb3JtVGlt
ZXJSZWY7CisjZWxpZiBQTEFURk9STShHVEspCit0eXBlZGVmIHVuc2lnbmVkIGludCBQbGF0Zm9y
bVRpbWVyUmVmOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXVFIgewpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvQWN0aXZhdGVGb250c0d0ay5jcHAg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9BY3RpdmF0ZUZvbnRz
R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40MDMzM2I2Y2Q0MjI3YTUyMDRjYjc0YjgyMmVlOWNhOWExZWRi
YzFmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9ndGsvQWN0aXZhdGVGb250c0d0ay5jcHAKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWN0aXZhdGVGb250cy5oIgorCisjaW5jbHVk
ZSA8Zm9udGNvbmZpZy9mb250Y29uZmlnLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKworbmFtZXNwYWNlIFdUUiB7CisKK3ZvaWQgaW5p
dGlhbGl6ZUd0a1NldHRpbmdzKCkKK3sKKworICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0
a19zZXR0aW5nc19nZXRfZGVmYXVsdCgpOworICAgIGlmICghc2V0dGluZ3MpCisgICAgICAgIHJl
dHVybjsKKyAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsIAorICAgICAgICAgICAgICAgICAiZ3Rr
LXhmdC1kcGkiLCA5ODMwNCwKKyAgICAgICAgICAgICAgICAgImd0ay14ZnQtYW50aWFsaWFzIiwg
MSwKKyAgICAgICAgICAgICAgICAgImd0ay14ZnQtaGludGluZyIsIDAsCisgICAgICAgICAgICAg
ICAgICJndGstZm9udC1uYW1lIiwgIkxpYmVyYXRpb24gU2FucyAxMiIsCisgICAgICAgICAgICAg
ICAgICJndGstdGhlbWUtbmFtZSIsICJSYWxlaWdoIiwKKyAgICAgICAgICAgICAgICAgImd0ay14
ZnQtcmdiYSIsICJub25lIiwgTlVMTCk7Cit9CisKK3ZvaWQgaW5pdGl0aWFsaXplRm9udENvbmZp
Z1NldHRpbmcoKQoreworICAgIEZjSW5pdCgpOworCisgICAgLy8gSWYgYSB0ZXN0IHJlc3VsdGVk
IGEgZm9udCBiZWluZyBhZGRlZCBvciByZW1vdmVkIHZpYSB0aGUgQGZvbnQtZmFjZSBydWxlLCB0
aGVuCisgICAgLy8gd2Ugd2FudCB0byByZXNldCB0aGUgRm9udENvbmZpZyBjb25maWd1cmF0aW9u
IHRvIHByZXZlbnQgaXQgZnJvbSBhZmZlY3Rpbmcgb3RoZXIgdGVzdHMuCisgICAgc3RhdGljIGlu
dCBudW1Gb250cyA9IDA7CisgICAgRmNGb250U2V0KiBhcHBGb250U2V0ID0gRmNDb25maWdHZXRG
b250cygwLCBGY1NldEFwcGxpY2F0aW9uKTsKKyAgICBpZiAoYXBwRm9udFNldCAmJiBudW1Gb250
cyAmJiBhcHBGb250U2V0LT5uZm9udCA9PSBudW1Gb250cykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gTG9hZCBvdXIgY29uZmlndXJhdGlvbiBmaWxlLCB3aGljaCBzZXRzIHVwIHByb3BlciBh
bGlhc2VzIGZvciBmYW1pbHkKKyAgICAvLyBuYW1lcyBsaWtlIHNhbnMsIHNlcmlmIGFuZCBtb25v
c3BhY2UuCisgICAgRmNDb25maWcqIGNvbmZpZyA9IEZjQ29uZmlnQ3JlYXRlKCk7CisgICAgR093
blB0cjxnY2hhcj4gZm9udENvbmZpZ0ZpbGVuYW1lKGdfYnVpbGRfZmlsZW5hbWUoRk9OVFNfQ09O
Rl9ESVIsICJmb250cy5jb25mIiwgTlVMTCkpOworICAgIGlmICghZ19maWxlX3Rlc3QoZm9udENv
bmZpZ0ZpbGVuYW1lLmdldCgpLCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSkKKyAgICAgICAgZ19l
cnJvcigiQ2Fubm90IGZpbmQgZm9udHMuY29uZiBhdCAlc1xuIiwgZm9udENvbmZpZ0ZpbGVuYW1l
LmdldCgpKTsKKyAgICBpZiAoIUZjQ29uZmlnUGFyc2VBbmRMb2FkKGNvbmZpZywgcmVpbnRlcnBy
ZXRfY2FzdDxGY0NoYXI4Kj4oZm9udENvbmZpZ0ZpbGVuYW1lLmdldCgpKSwgdHJ1ZSkpCisgICAg
ICAgIGdfZXJyb3IoIkNvdWxkbid0IGxvYWQgZm9udCBjb25maWd1cmF0aW9uIGZpbGUgZnJvbTog
JXMiLCBmb250Q29uZmlnRmlsZW5hbWUuZ2V0KCkpOworCisgICAgc3RhdGljIGNvbnN0IGNoYXIg
KmNvbnN0IGZvbnRQYXRoc1tdWzJdID0geworICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL3Ry
dWV0eXBlL3R0Zi1saWJlcmF0aW9uL0xpYmVyYXRpb25Nb25vLUJvbGRJdGFsaWMudHRmIiwKKyAg
ICAgICAgICAiL3Vzci9zaGFyZS9mb250cy9saWJlcmF0aW9uL0xpYmVyYXRpb25Nb25vLUJvbGRJ
dGFsaWMudHRmIiwgfSwKKyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYt
bGliZXJhdGlvbi9MaWJlcmF0aW9uTW9uby1Cb2xkLnR0ZiIsCisgICAgICAgICAgIi91c3Ivc2hh
cmUvZm9udHMvbGliZXJhdGlvbi9MaWJlcmF0aW9uTW9uby1Cb2xkLnR0ZiIsIH0sCisgICAgICAg
IHsgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWxpYmVyYXRpb24vTGliZXJhdGlvbk1v
bm8tSXRhbGljLnR0ZiIsCisgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvbGliZXJhdGlvbi9M
aWJlcmF0aW9uTW9uby1JdGFsaWMudHRmIiwgfSwKKyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250
cy90cnVldHlwZS90dGYtbGliZXJhdGlvbi9MaWJlcmF0aW9uTW9uby1SZWd1bGFyLnR0ZiIsCisg
ICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvbGliZXJhdGlvbi9MaWJlcmF0aW9uTW9uby1SZWd1
bGFyLnR0ZiIsIH0sCisgICAgICAgIHsgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWxp
YmVyYXRpb24vTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYy50dGYiLAorICAgICAgICAgICIvdXNy
L3NoYXJlL2ZvbnRzL2xpYmVyYXRpb24vTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYy50dGYiLCB9
LAorICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1saWJlcmF0aW9uL0xp
YmVyYXRpb25TYW5zLUJvbGQudHRmIiwKKyAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy9saWJl
cmF0aW9uL0xpYmVyYXRpb25TYW5zLUJvbGQudHRmIiwgfSwKKyAgICAgICAgeyAiL3Vzci9zaGFy
ZS9mb250cy90cnVldHlwZS90dGYtbGliZXJhdGlvbi9MaWJlcmF0aW9uU2Fucy1JdGFsaWMudHRm
IiwKKyAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy9saWJlcmF0aW9uL0xpYmVyYXRpb25TYW5z
LUl0YWxpYy50dGYiLCB9LAorICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0
Zi1saWJlcmF0aW9uL0xpYmVyYXRpb25TYW5zLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgICAiL3Vz
ci9zaGFyZS9mb250cy9saWJlcmF0aW9uL0xpYmVyYXRpb25TYW5zLVJlZ3VsYXIudHRmIiwgfSwK
KyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtbGliZXJhdGlvbi9MaWJl
cmF0aW9uU2VyaWYtQm9sZEl0YWxpYy50dGYiLAorICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRz
L2xpYmVyYXRpb24vTGliZXJhdGlvblNlcmlmLUJvbGRJdGFsaWMudHRmIiwgfSwKKyAgICAgICAg
eyAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtbGliZXJhdGlvbi9MaWJlcmF0aW9uU2Vy
aWYtQm9sZC50dGYiLAorICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL2xpYmVyYXRpb24vTGli
ZXJhdGlvblNlcmlmLUJvbGQudHRmIiwgfSwKKyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy90
cnVldHlwZS90dGYtbGliZXJhdGlvbi9MaWJlcmF0aW9uU2VyaWYtSXRhbGljLnR0ZiIsCisgICAg
ICAgICAgIi91c3Ivc2hhcmUvZm9udHMvbGliZXJhdGlvbi9MaWJlcmF0aW9uU2VyaWYtSXRhbGlj
LnR0ZiIsIH0sCisgICAgICAgIHsgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWxpYmVy
YXRpb24vTGliZXJhdGlvblNlcmlmLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgICAiL3Vzci9zaGFy
ZS9mb250cy9saWJlcmF0aW9uL0xpYmVyYXRpb25TZXJpZi1SZWd1bGFyLnR0ZiIsIH0sCisgICAg
ICAgIHsgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWRlamF2dS9EZWphVnVTYW5zLnR0
ZiIsCisgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvZGVqYXZ1L0RlamFWdVNhbnMudHRmIiwg
fSwKKyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtZGVqYXZ1L0RlamFW
dVNlcmlmLnR0ZiIsCisgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvZGVqYXZ1L0RlamFWdVNl
cmlmLnR0ZiIsIH0sCisKKyAgICAgICAgLy8gTWF0aE1MIHRlc3RzIHJlcXVpcmUgdGhlIFNUSVgg
Zm9udHMuCisgICAgICAgIHsgIi91c3Ivc2hhcmUvZm9udHMvb3BlbnR5cGUvc3RpeC9TVElYR2Vu
ZXJhbC5vdGYiLAorICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3N0aXgvU1RJWEdlbmVyYWwu
b3RmIiB9LAorICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL29wZW50eXBlL3N0aXgvU1RJWEdl
bmVyYWxCb2xJdGEub3RmIiwKKyAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy9zdGl4L1NUSVhH
ZW5lcmFsQm9sSXRhLm90ZiIgfSwKKyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy9vcGVudHlw
ZS9zdGl4L1NUSVhHZW5lcmFsQm9sLm90ZiIsCisgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMv
c3RpeC9TVElYR2VuZXJhbEJvbC5vdGYiIH0sCisgICAgICAgIHsgIi91c3Ivc2hhcmUvZm9udHMv
b3BlbnR5cGUvc3RpeC9TVElYR2VuZXJhbEl0YWxpYy5vdGYiLAorICAgICAgICAgICIvdXNyL3No
YXJlL2ZvbnRzL3N0aXgvU1RJWEdlbmVyYWxJdGFsaWMub3RmIiB9CisgICAgfTsKKworICAgIC8v
IFRPRE86IFNvbWUgdGVzdHMgdXNlIEx1Y2lkYS4gV2Ugc2hvdWxkIGxvYWQgdGhlc2UgYXMgd2Vs
bCwgb25jZSBpdCBiZWNvbWVzCisgICAgLy8gY2xlYXIgaG93IHRvIGluc3RhbGwgdGhlc2UgZm9u
dHMgZWFzaWx5IG9uIEZlZG9yYS4KKyAgICBmb3IgKHNpemVfdCBmb250ID0gMDsgZm9udCA8IEdf
Tl9FTEVNRU5UUyhmb250UGF0aHMpOyBmb250KyspIHsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZh
bHNlOworICAgICAgICBmb3IgKHNpemVfdCBwYXRoID0gMDsgcGF0aCA8IDI7IHBhdGgrKykgewor
CisgICAgICAgICAgICBpZiAoZ19maWxlX3Rlc3QoZm9udFBhdGhzW2ZvbnRdW3BhdGhdLCBHX0ZJ
TEVfVEVTVF9FWElTVFMpKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIGlmICghRmNDb25maWdBcHBGb250QWRkRmlsZShjb25maWcsIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGZvbnRQYXRoc1tmb250XVtwYXRoXSkpKQorICAgICAgICAg
ICAgICAgICAgICBnX2Vycm9yKCJDb3VsZCBub3QgbG9hZCBmb250IGF0ICVzISIsIGZvbnRQYXRo
c1tmb250XVtwYXRoXSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghZm91bmQp
CisgICAgICAgICAgICBnX2Vycm9yKCJDb3VsZCBub3QgZmluZCBmb250IGF0ICVzLiBFaXRoZXIg
aW5zdGFsbCB0aGlzIGZvbnQgb3IgZmlsZSBhIGJ1ZyAiCisgICAgICAgICAgICAgICAgICAgICJh
dCBodHRwOi8vYnVncy53ZWJraXQub3JnIGlmIGl0IGlzIGluc3RhbGxlZCBpbiBhbm90aGVyIGxv
Y2F0aW9uLiIsCisgICAgICAgICAgICAgICAgICAgIGZvbnRQYXRoc1tmb250XVswXSk7CisgICAg
fQorCisgICAgLy8gQWhlbSBpcyB1c2VkIGJ5IG1hbnkgbGF5b3V0IHRlc3RzLgorICAgIEdPd25Q
dHI8Z2NoYXI+IGFoZW1Gb250RmlsZW5hbWUoZ19idWlsZF9maWxlbmFtZShGT05UU19DT05GX0RJ
UiwgIkFIRU1fX19fLlRURiIsIE5VTEwpKTsKKyAgICBpZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZp
bGUoY29uZmlnLCByZWludGVycHJldF9jYXN0PEZjQ2hhcjgqPihhaGVtRm9udEZpbGVuYW1lLmdl
dCgpKSkpCisgICAgICAgIGdfZXJyb3IoIkNvdWxkIG5vdCBsb2FkIGZvbnQgYXQgJXMhIiwgYWhl
bUZvbnRGaWxlbmFtZS5nZXQoKSk7IAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZvbnRGaWxl
bmFtZXNbXSA9IHsKKyAgICAgICAgIkNvbG9yQml0cy50dGYiLAorICAgICAgICAiV2ViS2l0V2Vp
Z2h0V2F0Y2hlcjEwMC50dGYiLAorICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50dGYi
LAorICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjMwMC50dGYiLAorICAgICAgICAiV2ViS2l0
V2VpZ2h0V2F0Y2hlcjQwMC50dGYiLAorICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjUwMC50
dGYiLAorICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjYwMC50dGYiLAorICAgICAgICAiV2Vi
S2l0V2VpZ2h0V2F0Y2hlcjcwMC50dGYiLAorICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjgw
MC50dGYiLAorICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGYiLAorICAgICAgICAw
CisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBmb250RmlsZW5hbWVzW2ldOyArK2kp
IHsKKyAgICAgICAgR093blB0cjxnY2hhcj4gZm9udEZpbGVuYW1lKGdfYnVpbGRfZmlsZW5hbWUo
Rk9OVFNfQ09ORl9ESVIsICIuLiIsICIuLiIsICJmb250cyIsIGZvbnRGaWxlbmFtZXNbaV0sIE5V
TEwpKTsKKyAgICAgICAgaWYgKCFGY0NvbmZpZ0FwcEZvbnRBZGRGaWxlKGNvbmZpZywgcmVpbnRl
cnByZXRfY2FzdDxGY0NoYXI4Kj4oZm9udEZpbGVuYW1lLmdldCgpKSkpCisgICAgICAgICAgICBn
X2Vycm9yKCJDb3VsZCBub3QgbG9hZCBmb250IGF0ICVzISIsIGZvbnRGaWxlbmFtZS5nZXQoKSk7
IAorICAgIH0KKworICAgIC8vIEEgZm9udCB3aXRoIG5vIHZhbGlkIEZvbnRjb25maWcgZW5jb2Rp
bmcgdG8gdGVzdCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc0NTIK
KyAgICBHT3duUHRyPGdjaGFyPiBmb250V2l0aE5vVmFsaWRFbmNvZGluZ0ZpbGVuYW1lKGdfYnVp
bGRfZmlsZW5hbWUoRk9OVFNfQ09ORl9ESVIsICJGb250V2l0aE5vVmFsaWRFbmNvZGluZy5mb24i
LCBOVUxMKSk7CisgICAgaWYgKCFGY0NvbmZpZ0FwcEZvbnRBZGRGaWxlKGNvbmZpZywgcmVpbnRl
cnByZXRfY2FzdDxGY0NoYXI4Kj4oZm9udFdpdGhOb1ZhbGlkRW5jb2RpbmdGaWxlbmFtZS5nZXQo
KSkpKQorICAgICAgICBnX2Vycm9yKCJDb3VsZCBub3QgbG9hZCBmb250IGF0ICVzISIsIGZvbnRX
aXRoTm9WYWxpZEVuY29kaW5nRmlsZW5hbWUuZ2V0KCkpOyAKKworICAgIGlmICghRmNDb25maWdT
ZXRDdXJyZW50KGNvbmZpZykpCisgICAgICAgIGdfZXJyb3IoIkNvdWxkIG5vdCBzZXQgdGhlIGN1
cnJlbnQgZm9udCBjb25maWd1cmF0aW9uISIpOworCisgICAgbnVtRm9udHMgPSBGY0NvbmZpZ0dl
dEZvbnRzKGNvbmZpZywgRmNTZXRBcHBsaWNhdGlvbiktPm5mb250OworfQorCit2b2lkIGFjdGl2
YXRlRm9udHMoKQoreworICAgIGluaXRpYWxpemVHdGtTZXR0aW5ncygpOworICAgIGluaXRpdGlh
bGl6ZUZvbnRDb25maWdTZXR0aW5nKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZ3RrL0luamVjdGVkQnVuZGxlR3RrLmNwcCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZ3RrL0luamVjdGVkQnVuZGxlR3Rr
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iYjgwYWVhMWJkNDEyZTEwYzk5ODQ1OGViYWI2YjljZjQwNDI1YmJm
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgorCituYW1lc3BhY2UgV1RSIHsKKworc3RhdGlj
IHZvaWQgbG9nSGFuZGxlcihjb25zdCBnY2hhciogZG9tYWluLCBHTG9nTGV2ZWxGbGFncyBsZXZl
bCwgY29uc3QgZ2NoYXIqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKGxldmVs
IDwgR19MT0dfTEVWRUxfREVCVUcpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1l
c3NhZ2UpOworfQorCisKK3ZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBsYXRmb3JtSW5pdGlhbGl6ZShX
S1R5cGVSZWYpCit7CisgICAgLy8gU29tZSBwbHVnaW5zIG1pZ2h0IHRyeSB0byB1c2UgdGhlIEdM
aWIgbG9nZ2VyIGZvciBwcmludGluZyBkZWJ1ZyBtZXNzYWdlcy4gVGhpcworICAgIC8vIHdpbGwg
Y2F1c2UgdGVzdHMgdG8gZmFpbCBiZWNhdXNlIG9mIHVuZXhwZWN0ZWQgb3V0cHV0LiBXZSBzcXVl
bGNoIGFsbCBkZWJ1ZworICAgIC8vIG1lc3NhZ2VzIHNlbnQgdG8gdGhlIGxvZ2dlci4KKyAgICBn
X2xvZ19zZXRfZGVmYXVsdF9oYW5kbGVyKGxvZ0hhbmRsZXIsIDApOworfQorCit9IC8vIG5hbWVz
cGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kMDAzNmRkNTkyZDg4YmJjMDM1YzQyNTU1MjhmNTFjY2JhOGRkODg3Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvTGF5b3V0
VGVzdENvbnRyb2xsZXJHdGsuY3BwCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUu
aCIKKyNpbmNsdWRlIDxnbGliLmg+CisKK25hbWVzcGFjZSBXVFIgeworCitzdGF0aWMgZ2Jvb2xl
YW4gd2FpdFRvRHVtcFdhdGNoZG9nVGltZXJDYWxsYmFjayhncG9pbnRlcikKK3sKKyAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+d2FpdFRvRHVtcFdh
dGNoZG9nVGltZXJGaXJlZCgpOworICAgIHJldHVybiBGQUxTRTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Jbml0aWFsaXplKCkKK3sKKyAgICBtX3dhaXRUb0R1bXBX
YXRjaGRvZ1RpbWVyID0gMDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aW52YWxp
ZGF0ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkKK3sKKyAgICBpZiAoIW1fd2FpdFRvRHVtcFdh
dGNoZG9nVGltZXIpCisgICAgICAgIHJldHVybjsKKyAgICBnX3NvdXJjZV9yZW1vdmUobV93YWl0
VG9EdW1wV2F0Y2hkb2dUaW1lcik7CisgICAgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lciA9IDA7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemVXYWl0VG9EdW1wV2F0
Y2hkb2dUaW1lcklmTmVlZGVkKCkKK3sKKyAgICBpZiAobV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1l
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lciA9IGdf
dGltZW91dF9hZGQod2FpdFRvRHVtcFdhdGNoZG9nVGltZXJJbnRlcnZhbCAqIDEwMDAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdFRvRHVtcFdhdGNo
ZG9nVGltZXJDYWxsYmFjaywgMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKaW5kZXggOTczOWQ0MjE3OTk5NTllODUzZThi
NGRmNzIwY2RkMzI5Mzc5ODhkYi4uY2JjNDhlNDk1ODAwOWY1NTkzN2E4YjNmMThmODM2ZTk0YmI1
N2I0MiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcu
aAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCkBAIC00Niw2
ICs0NiwxMCBAQCB0eXBlZGVmIE5TV2luZG93KiBQbGF0Zm9ybVdpbmRvdzsKICNlbGlmIGRlZmlu
ZWQoV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyKQogdHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1X
S1ZpZXc7CiB0eXBlZGVmIEhXTkQgUGxhdGZvcm1XaW5kb3c7CisjZWxpZiBkZWZpbmVkKEJVSUxE
SU5HX0dUS19fKQordHlwZWRlZiBzdHJ1Y3QgX0d0a1dpZGdldCBHdGtXaWRnZXQ7Cit0eXBlZGVm
IFdLVmlld1JlZiBQbGF0Zm9ybVdLVmlldzsKK3R5cGVkZWYgR3RrV2lkZ2V0KiBQbGF0Zm9ybVdp
bmRvdzsKICNlbmRpZgogCiBuYW1lc3BhY2UgV1RSIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvZ3RrL1BsYXRmb3JtV2ViVmlld0d0ay5jcHAgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2d0ay9QbGF0Zm9ybVdlYlZpZXdHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4ZjA4NTc2MTBm
NTE4MWQ5NzU3ZDdhZGIzYTk5NTQxM2IxZTg1ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2d0ay9QbGF0Zm9ybVdlYlZpZXdHdGsuY3BwCkBAIC0wLDAgKzEsMTAx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2Vi
Vmlldy5oIgorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCituYW1lc3BhY2UgV1RSIHsKKworUGxh
dGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFn
ZUdyb3VwUmVmIHBhZ2VHcm91cCkKKyAgICA6IG1fdmlldyhXS1ZpZXdDcmVhdGUoY29udGV4dCwg
cGFnZUdyb3VwKSkKKyAgICAsIG1fd2luZG93KGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9Q
VVApKQoreworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV93aW5kb3cpLCBX
S1ZpZXdHZXRXaW5kb3cobV92aWV3KSk7CisKKyAgICBHdGtBbGxvY2F0aW9uIHNpemUgPSB7IDAs
IDAsIDgwMCwgNjAwIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKG1fd2luZG93LCAm
c2l6ZSk7CisgICAgZ3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhtX3dpbmRvdyksIDgwMCwg
NjAwKTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKG1fd2luZG93KTsKKworICAgIHdoaWxlIChn
dGtfZXZlbnRzX3BlbmRpbmcoKSkKKyAgICAgICAgZ3RrX21haW5faXRlcmF0aW9uKCk7Cit9CisK
K1BsYXRmb3JtV2ViVmlldzo6flBsYXRmb3JtV2ViVmlldygpCit7CisgICAgZ3RrX3dpZGdldF9k
ZXN0cm95KG1fd2luZG93KTsKK30KKwordm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKHVu
c2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCit7CisgICAgR3RrQWxsb2NhdGlvbiBzaXpl
ID0geyAwLCAwLCB3aWR0aCwgaGVpZ2h0IH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRl
KG1fd2luZG93LCAmc2l6ZSk7CisgICAgZ3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhtX3dp
bmRvdyksIHdpZHRoLCBoZWlnaHQpOworCisgICAgd2hpbGUgKGd0a19ldmVudHNfcGVuZGluZygp
KQorICAgICAgICBndGtfbWFpbl9pdGVyYXRpb24oKTsKK30KKworV0tQYWdlUmVmIFBsYXRmb3Jt
V2ViVmlldzo6cGFnZSgpCit7CisgICAgcmV0dXJuIFdLVmlld0dldFBhZ2UobV92aWV3KTsKK30K
Kwordm9pZCBQbGF0Zm9ybVdlYlZpZXc6OmZvY3VzKCkKK3sKK30KKworV0tSZWN0IFBsYXRmb3Jt
V2ViVmlldzo6d2luZG93RnJhbWUoKQoreworICAgIEd0a0FsbG9jYXRpb24gZ2VvbWV0cnk7Cisj
aWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBnaW50IGRlcHRoOworICAgIGdka193aW5kb3df
Z2V0X2dlb21ldHJ5KGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKG1fd2luZG93KSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdlb21ldHJ5LngsICZnZW9tZXRyeS55LCAm
Z2VvbWV0cnkud2lkdGgsICZnZW9tZXRyeS5oZWlnaHQsICZkZXB0aCk7CisjZWxzZQorICAgIGdk
a193aW5kb3dfZ2V0X2dlb21ldHJ5KGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKG1f
d2luZG93KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdlb21ldHJ5LngsICZnZW9t
ZXRyeS55LCAmZ2VvbWV0cnkud2lkdGgsICZnZW9tZXRyeS5oZWlnaHQpOworI2VuZGlmCisKKyAg
ICBXS1JlY3QgZnJhbWU7CisgICAgZnJhbWUub3JpZ2luLnggPSBnZW9tZXRyeS54OworICAgIGZy
YW1lLm9yaWdpbi55ID0gZ2VvbWV0cnkueTsKKyAgICBmcmFtZS5zaXplLndpZHRoID0gZ2VvbWV0
cnkud2lkdGg7CisgICAgZnJhbWUuc2l6ZS5oZWlnaHQgPSBnZW9tZXRyeS5oZWlnaHQ7CisgICAg
cmV0dXJuIGZyYW1lOworfQorCit2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2V0V2luZG93RnJhbWUo
V0tSZWN0IGZyYW1lKQoreworICAgIGd0a193aW5kb3dfbW92ZShHVEtfV0lORE9XKG1fd2luZG93
KSwgZnJhbWUub3JpZ2luLngsIGZyYW1lLm9yaWdpbi55KTsKKyAgICByZXNpemVUbyhmcmFtZS5z
aXplLndpZHRoLCBmcmFtZS5zaXplLmhlaWdodCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdUUgor
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJvbGxlckd0
ay5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJvbGxlckd0ay5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZThiOTZiZDk4MzVkM2RjNGI0YzNhYTg4MTE5MjZlZDIxMTgxZjFiZgotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250cm9sbGVy
R3RrLmNwcApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlh
IFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJUZXN0Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgV1RSIHsKKworc3RhdGljIGd1aW50IGdUaW1lb3V0U291cmNlSWQgPSAw
OworCitzdGF0aWMgdm9pZCBjYW5jZWxUaW1lb3V0KCkKK3sKKyAgICBpZiAoIWdUaW1lb3V0U291
cmNlSWQpCisgICAgICAgIHJldHVybjsKKyAgICBnX3NvdXJjZV9yZW1vdmUoZ1RpbWVvdXRTb3Vy
Y2VJZCk7CisgICAgZ1RpbWVvdXRTb3VyY2VJZCA9IDA7Cit9CisKK3ZvaWQgVGVzdENvbnRyb2xs
ZXI6Om5vdGlmeURvbmUoKQoreworICAgIGd0a19tYWluX3F1aXQoKTsKKyAgICBjYW5jZWxUaW1l
b3V0KCk7Cit9CisKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCit7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB0aW1lb3V0Q2FsbGJhY2soZ3BvaW50ZXIpCit7CisgICAg
ZnByaW50ZihzdGRlcnIsICJGQUlMOiBUZXN0Q29udHJvbGxlclJ1bkxvb3AgdGltZWQgb3V0Llxu
Iik7CisgICAgZ3RrX21haW5fcXVpdCgpOworICAgIHJldHVybiBGQUxTRTsKK30KKwordm9pZCBU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SdW5VbnRpbChib29sJiwgZG91YmxlIHRpbWVvdXQpCit7
CisgICAgY2FuY2VsVGltZW91dCgpOworICAgIGdUaW1lb3V0U291cmNlSWQgPSBnX3RpbWVvdXRf
YWRkKHRpbWVvdXQgKiAxMDAwLCB0aW1lb3V0Q2FsbGJhY2ssIDApOworICAgIGd0a19tYWluKCk7
Cit9CisKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemVJbmplY3RlZEJ1bmRsZVBhdGgo
KQoreworICAgIGNvbnN0IGNoYXIqIGJ1bmRsZVBhdGggPSBnX2dldGVudigiVEVTVF9SVU5ORVJf
SU5KRUNURURfQlVORExFX0ZJTEVOQU1FIik7CisgICAgaWYgKCFidW5kbGVQYXRoKSB7CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiVEVTVF9SVU5ORVJfSU5KRUNURURfQlVORExFX0ZJTEVOQU1F
IGVudmlyb25tZW50IHZhcmlhYmxlIG5vdCBmb3VuZFxuIik7CisgICAgICAgIGV4aXQoMCk7Cisg
ICAgfQorCisgICAgZ3NpemUgYnl0ZXNXcml0dGVuOworICAgIEdPd25QdHI8Y2hhcj4gdXRmOEJ1
bmRsZVBhdGgoZ19maWxlbmFtZV90b191dGY4KGJ1bmRsZVBhdGgsIC0xLCAwLCAmYnl0ZXNXcml0
dGVuLCAwKSk7CisgICAgbV9pbmplY3RlZEJ1bmRsZVBhdGggPSBXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyh1dGY4QnVuZGxlUGF0aC5nZXQoKSk7Cit9CisKK3ZvaWQgVGVzdENvbnRyb2xs
ZXI6OmluaXRpYWxpemVUZXN0UGx1Z2luRGlyZWN0b3J5KCkKK3sKKyAgICAvLyBUaGlzIGlzIGNh
bGxlZCBhZnRlciBpbml0aWFsaXplSW5qZWN0ZWRCdW5kbGVQYXRoLgorICAgIG1fdGVzdFBsdWdp
bkRpcmVjdG9yeSA9IG1faW5qZWN0ZWRCdW5kbGVQYXRoOworfQorCit2b2lkIFRlc3RDb250cm9s
bGVyOjpwbGF0Zm9ybUluaXRpYWxpemVDb250ZXh0KCkKK3sKK30KKwordm9pZCBUZXN0Q29udHJv
bGxlcjo6cnVuTW9kYWwoUGxhdGZvcm1XZWJWaWV3KikKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0
byBpbXBsZW1lbnQgdGhpcyB0byB0ZXN0IHNob3dNb2RhbERpYWxvZy4KK30KKworY29uc3QgY2hh
ciogVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtTGlicmFyeVBhdGhGb3JUZXN0aW5nKCkKK3sKKyAg
ICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0SW52b2NhdGlvbkd0ay5jcHAgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2d0ay9UZXN0SW52b2NhdGlvbkd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmE3MWRhMmE4
YmY2NDRmYTA3MzU5OGM2NjNiMDU3MjJkY2FmYjE5MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RJbnZvY2F0aW9uR3RrLmNwcApAQCAtMCwwICsxLDM1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RJbnZv
Y2F0aW9uLmgiCisKK25hbWVzcGFjZSBXVFIgeworCit2b2lkIFRlc3RJbnZvY2F0aW9uOjpkdW1w
UGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZChjb25zdCBPcGFxdWVXS0ltYWdlKikKK3sKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2d0ay9tYWluLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL21haW4uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmU5YTg0Mzk2YTY0YjU0YmEyY2UwNjY3NTQ5ODY3OWI5Y2RjYWEyNmUKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9tYWluLmNwcApAQCAtMCwwICsx
LDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCisKK2lu
dCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfaW5pdCgmYXJnYywgJmFy
Z3YpOworICAgIFdUUjo6VGVzdENvbnRyb2xsZXIgY29udHJvbGxlcihhcmdjLCBjb25zdF9jYXN0
PGNvbnN0IGNoYXIqKj4oYXJndikpOworICAgIHJldHVybiAwOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90371</attachid>
            <date>2011-04-20 11:23:00 -0700</date>
            <delta_ts>2011-04-27 13:12:01 -0700</delta_ts>
            <desc>Patch using WKImageRef</desc>
            <filename>bug-57068-20110420112300.patch</filename>
            <type>text/plain</type>
            <size>42958</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMzODEKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCBkNzEyNTJiZWE0ZWFjMDc0ZjM0MTg5OTFjYjk0ZjM5NDc1ZjFjZDA2Li5hYWJj
NmNhODc3ZjA3ZGQxMjliM2Q5ZGY2MzljYzZiYTk3ODJiODQ0IDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDMtMzAgIE1hcnRpbiBS
b2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFtXZWJLaXQyXSBJbXBsZW1lbnQgYSBiYXNp
YyBXZWJLaXRUZXN0UnVubmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NzA2OAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZGVkIHJlZmVy
ZW5jZSB0byBXZWJLaXRUZXN0UnVubmVyIEdOVW1ha2VmaWxlLgorCiAyMDExLTA0LTA5ICBLZWl0
aCBLeXppdmF0ICA8a2VpdGgua3l6aXZhdEBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgTGFzemxvIEdvbWJvcy4KZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZp
bGUuYW0KaW5kZXggYWY1NDg5MWFhMTI2M2FhNmI5Nzk5M2ZmMmNhOTA1ZWEwMWMxZGQwNS4uOGM1
MDJmMDM0NmNiZWEwNTM2YWNiYjA2ZDBmY2NjNjY1ODQ2ZDIwNCAxMDA2NDQKLS0tIGEvR05VbWFr
ZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0KQEAgLTIzMCw2ICsyMzAsNyBAQCBpbmNsdWRl
IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCiBpZiBFTkFCTEVfV0VCS0lUMgogaW5jbHVk
ZSBTb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQogaW5jbHVkZSBUb29scy9NaW5pQnJvd3Nl
ci9ndGsvR05VbWFrZWZpbGUuYW0KK2luY2x1ZGUgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HTlVt
YWtlZmlsZS5hbQogIyBbR1RLXSBSZWZhY3RvciB0aGUgdHJhbnNsYXRpb25zIG5vdyB0aGF0IHdl
IGhhdmUgd2Via2l0MgogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTUxNTMKIHN0YW1wLXBvOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDA4OTRhNGU4MzZiODJmZDc4ZDJiOWFlOTRk
NmRiYmIwNTNiZGQyZGIuLjRiMjZkZmU1YTM1NTgwZmY5NjkzYzVkNGVmODIyMDkzODdkYzhkOTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMS0wMy0zMCAgTWFydGluIFJvYmluc29u
ICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW0dUS10gW1dlYktpdDJdIEltcGxlbWVudCBhIGJhc2ljIFdlYktp
dFRlc3RSdW5uZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU3MDY4CisKKyAgICAgICAgQWRkZWQgSW5qZWN0ZWRCdW5kbGUgc3VwcG9ydCBmb3IgR1RL
Ky4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
aDogQWRkZWQgdHlwZWRlZiBmb3IgR1RLKy4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL2d0ay9JbmplY3RlZEJ1bmRsZUd0ay5jcHA6IEFkZGVkIGltcGxlbWVudGF0aW9uLgor
ICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6bG9hZCk6IAorICAgICAgICAoV2ViS2l0
OjpJbmplY3RlZEJ1bmRsZTo6YWN0aXZhdGVNYWNGb250QXNjZW50SGFjayk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcDogUmVtb3ZlIHVubmVjZXNzYXJ5
IG1ldGhvZCBkZWZpbml0aW9uLgorCiAyMDExLTA0LTA4ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8
YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZS5oCmluZGV4IDY3NTVhMzlkZGE2ZDFiNjgxNmQ5OTE5MDEwYWUwNWQ0ZTA4YmY5ZTgu
LjMzZGViMzM1ZGZjZGNjOTM4ZjM4MWJjNzk2ZTY4YTQzZDcxNTBiZTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlLmgKQEAgLTM5LDYgKzM5LDEwIEBACiAjaW5jbHVkZSA8UUxpYnJhcnk+CiAjZW5kaWYKIAor
I2lmIFBMQVRGT1JNKEdUSykKK3R5cGVkZWYgc3RydWN0IF9HTW9kdWxlIEdNb2R1bGU7CisjZW5k
aWYKKwogbmFtZXNwYWNlIENvcmVJUEMgewogICAgIGNsYXNzIEFyZ3VtZW50RGVjb2RlcjsKICAg
ICBjbGFzcyBDb25uZWN0aW9uOwpAQCAtNTQsNyArNTgsNyBAQCB0eXBlZGVmIEhNT0RVTEUgUGxh
dGZvcm1CdW5kbGU7CiAjZWxpZiBQTEFURk9STShRVCkKIHR5cGVkZWYgUUxpYnJhcnkgUGxhdGZv
cm1CdW5kbGU7CiAjZWxpZiBQTEFURk9STShHVEspCi10eXBlZGVmIHZvaWQqIFBsYXRmb3JtQnVu
ZGxlOwordHlwZWRlZiA6OkdNb2R1bGUqIFBsYXRmb3JtQnVuZGxlOwogI2VuZGlmCiAKIGNsYXNz
IEltbXV0YWJsZUFycmF5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwCmluZGV4
IGJiZjI0ZTQzYjdkZmRkMDY5YjhkOGEzNjhjYTQxOTIyYzAxMmM5NTcuLmNhMWE0M2Y4Y2RjNWFl
ZTdmZTI5NmMxY2Y2NzZmMmQ3MTc3MWJiYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvZ3RrL0luamVjdGVkQnVuZGxlR3RrLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL2d0ay9JbmplY3RlZEJ1bmRs
ZUd0ay5jcHAKQEAgLTI5LDIwICsyOSwzMyBAQAogCiAjaW5jbHVkZSAiV0tCdW5kbGVBUElDYXN0
LmgiCiAjaW5jbHVkZSAiV0tCdW5kbGVJbml0aWFsaXplLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9O
b3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi1ib29sIEluamVjdGVkQnVuZGxlOjpsb2FkKEFQSU9iamVjdCop
Citib29sIEluamVjdGVkQnVuZGxlOjpsb2FkKEFQSU9iamVjdCogaW5pdGlhbGl6YXRpb25Vc2Vy
RGF0YSkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgbV9wbGF0Zm9ybUJ1bmRsZSA9IGdfbW9k
dWxlX29wZW4oZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKG1fcGF0aCkuZGF0YSgpLCBHX01PRFVM
RV9CSU5EX0xPQ0FMKTsKKyAgICBpZiAoIW1fcGxhdGZvcm1CdW5kbGUpIHsKKyAgICAgICAgZ193
YXJuaW5nKCJFcnJvciBsb2FkaW5nIHRoZSBpbmplY3RlZCBidW5kbGUgKCVzKTogJXMiLCBtX3Bh
dGgudXRmOCgpLmRhdGEoKSwgZ19tb2R1bGVfZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBXS0J1bmRsZUluaXRpYWxpemVGdW5jdGlvblB0ciBpbml0aWFsaXpl
RnVuY3Rpb24gPSAwOworICAgIGlmICghZ19tb2R1bGVfc3ltYm9sKG1fcGxhdGZvcm1CdW5kbGUs
ICJXS0J1bmRsZUluaXRpYWxpemUiLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmluaXRpYWxp
emVGdW5jdGlvbikpIHx8ICFpbml0aWFsaXplRnVuY3Rpb24pIHsKKyAgICAgICAgZ193YXJuaW5n
KCJFcnJvciBsb2FkaW5nIFdLQnVuZGxlSW5pdGlhbGl6ZSBzeW1ib2wgZnJvbSBpbmplY3RlZCBi
dW5kbGUuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbml0aWFsaXpl
RnVuY3Rpb24odG9BUEkodGhpcyksIHRvQVBJKGluaXRpYWxpemF0aW9uVXNlckRhdGEpKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6YWN0aXZhdGVNYWNGb250
QXNjZW50SGFjaygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggZGIwMmFlY2IyMzlmMTlmNDJmY2QzN2ZiZGVkZTJjNTE5MTJkZGEwNy4uMzJlYjA5NDk5
ZjVkZGViODM5YWM5MGFlY2I2OTFkZTg1MDVlNDA3OCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTAzLTMwICBN
YXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBbV2ViS2l0Ml0gSW1wbGVtZW50
IGEgYmFzaWMgV2ViS2l0VGVzdFJ1bm5lcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTcwNjgKKworICAgICAgICBBZGQgYW4gaW1wbGVtZW50YXRpb24g
b2YgV2ViS2l0VGVzdFJ1bm5lciBmb3IgR1RLKy4KKworICAgICAgICAqIFNjcmlwdHMvYnVpbGQt
d2Via2l0dGVzdHJ1bm5lcjogQWRkZWQga25vd2xlZGdlIG9mIEdUSysgVGVzdFJ1bm5lci4KKyAg
ICAgICAgKiBTY3JpcHRzL29sZC1ydW4td2Via2l0LXRlc3RzOiBEaXR0by4KKyAgICAgICAgKiBT
Y3JpcHRzL3J1bi1sYXVuY2hlcjogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRkaXJz
LnBtOiBEaXR0by4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0dOVW1ha2VmaWxlLmFtOiBB
ZGRlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRl
c3RDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9ndGsvQWN0aXZhdGVGb250c0d0ay5jcHA6IEFkZGVkLgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvZ3RrL0luamVjdGVkQnVuZGxlR3RrLmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRC
dW5kbGVHdGsuY3BwLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
Z3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwLgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3Lmg6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9ndGsvUGxhdGZvcm1XZWJWaWV3R3RrLmNwcDogQWRkZWQuCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVzdENvbnRyb2xsZXJHdGsuY3BwOiBBZGRlZC4K
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0SW52b2NhdGlvbkd0ay5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvZ3RrL0lu
amVjdGVkQnVuZGxlR3RrLmNwcC4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmR1bXBQ
aXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L2d0ay9tYWluLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwLgorICAgICAgICAobWFpbik6IEFk
ZGVkLgorCiAyMDExLTA0LTA5ICBLZWl0aCBLeXppdmF0ICA8a2VpdGgua3l6aXZhdEBub2tpYS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTGFzemxvIEdvbWJvcy4KZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0dGVzdHJ1bm5lciBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQt
d2Via2l0dGVzdHJ1bm5lcgppbmRleCBlOTZkZDZhMzczNDc3ZTJkZGY0ODg0NTAxNWI4OWJiNGU0
MzA3M2U1Li5mMDNjMTc5OWE3N2ZlZTMzZjgzZjlmODk1OGUxYWZhYzA2ZTk1NGU4IDEwMDc1NQot
LS0gYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdHRlc3RydW5uZXIKKysrIGIvVG9vbHMvU2Ny
aXB0cy9idWlsZC13ZWJraXR0ZXN0cnVubmVyCkBAIC02Myw4ICs2Myw4IEBAIGlmIChpc0FwcGxl
TWFjV2ViS2l0KCkpIHsKICAgICAkcmVzdWx0ID0gYnVpbGRYQ29kZVByb2plY3QoIldlYktpdFRl
c3RSdW5uZXIiLCAkY2xlYW4sIFhjb2RlT3B0aW9ucygpLCBAQVJHVik7CiB9IGVsc2lmIChpc0Fw
cGxlV2luV2ViS2l0KCkpIHsKICAgICAkcmVzdWx0ID0gYnVpbGRWaXN1YWxTdHVkaW9Qcm9qZWN0
KCJXZWJLaXRUZXN0UnVubmVyLnNsbiIsICRjbGVhbik7Ci19IGVsc2lmIChpc1F0KCkpIHsKLSAg
ICAjIFF0IGJ1aWxkcyBldmVyeXRoaW5nIGluIG9uZSBzaG90LiBObyBuZWVkIHRvIGJ1aWxkIGFu
eXRoaW5nIGhlcmUuCit9IGVsc2lmIChpc1F0KCkgfHwgaXNHdGsoKSkgeworICAgICMgUXQgYW5k
IEdUSysgYnVpbGQgZXZlcnl0aGluZyBpbiBvbmUgc2hvdC4gTm8gbmVlZCB0byBidWlsZCBhbnl0
aGluZyBoZXJlLgogICAgICRyZXN1bHQgPSAwOwogfSBlbHNlIHsKICAgICBkaWUgIldlYktpdFRl
c3RSdW5uZXIgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLlxuIjsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHMgYi9Ub29scy9TY3JpcHRzL29s
ZC1ydW4td2Via2l0LXRlc3RzCmluZGV4IDUxZjA4M2YzYTE0NjM0Mjg5MGY3NjA1MzFlNTkxMjA2
NTE2ODNmZTcuLjM3NWY5YTMxOGYwMDk2ZTA5N2Y4N2M5NTRiMTU0M2MyOWQyNGQ1MTcgMTAwNzU1
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHMKKysrIGIvVG9vbHMvU2Ny
aXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cwpAQCAtMzgwLDYgKzM4MCw5IEBAIGlmICgkdXNlV2Vi
S2l0VGVzdFJ1bm5lcikgewogICAgIH0gZWxzaWYgKGlzUXQoKSkgewogICAgICAgICAkcmVhbFBs
YXRmb3JtID0gJHBsYXRmb3JtOwogICAgICAgICAkcGxhdGZvcm0gPSAicXQtd2syIjsKKyAgICB9
IGVsc2lmIChpc0d0aygpKSB7CisgICAgICAgICRyZWFsUGxhdGZvcm0gPSAkcGxhdGZvcm07Cisg
ICAgICAgICRwbGF0Zm9ybSA9ICJndGstd2syIjsKICAgICB9CiB9CiAKQEAgLTExNzYsNiArMTE3
OSw3IEBAIGNsb3NlIEhUTUw7CiBteSBAY29uZmlndXJhdGlvbkFyZ3MgPSBhcmd1bWVudHNGb3JD
b25maWd1cmF0aW9uKCk7CiAKIGlmIChpc0d0aygpKSB7CisgIHB1c2goQGNvbmZpZ3VyYXRpb25B
cmdzLCAnLTInKSBpZiAkdXNlV2ViS2l0VGVzdFJ1bm5lcjsKICAgc3lzdGVtICJUb29scy9TY3Jp
cHRzL3J1bi1sYXVuY2hlciIsIEBjb25maWd1cmF0aW9uQXJncywgImZpbGU6Ly8iLiR0ZXN0UmVz
dWx0cyBpZiAkbGF1bmNoU2FmYXJpOwogfSBlbHNpZiAoaXNRdCgpKSB7CiAgIHVuc2hpZnQgQGNv
bmZpZ3VyYXRpb25BcmdzLCBxdygtZ3JhcGhpY3NzeXN0ZW0gcmFzdGVyIC1zdHlsZSB3aW5kb3dz
KTsKQEAgLTE1MDMsNiArMTUwNywxMSBAQCBzdWIgb3BlbkR1bXBUb29sKCkKICAgICBpZiAoaXNH
dGsoKSkgewogICAgICAgICAkQ0xFQU5fRU5We0dUS19NT0RVTEVTfSA9ICJnYWlsIjsKICAgICAg
ICAgJENMRUFOX0VOVntXRUJLSVRfSU5TUEVDVE9SX1BBVEh9ID0gIiRwcm9kdWN0RGlyL3Jlc291
cmNlcy9pbnNwZWN0b3IiOworCisgICAgICAgIGlmICgkdXNlV2ViS2l0VGVzdFJ1bm5lcikgewor
ICAgICAgICAgICAgbXkgJGluamVjdGVkQnVuZGxlUGF0aCA9IHByb2R1Y3REaXIoKSAuICIvTGli
cmFyaWVzLy5saWJzL2xpYlRlc3RSdW5uZXJJbmplY3RlZEJ1bmRsZSI7CisgICAgICAgICAgICAk
Q0xFQU5fRU5We1RFU1RfUlVOTkVSX0lOSkVDVEVEX0JVTkRMRV9GSUxFTkFNRX0gPSAkaW5qZWN0
ZWRCdW5kbGVQYXRoOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGlzUXQoKSkgewpAQCAt
MTY5Niw2ICsxNzA1LDggQEAgc3ViIGV4cGVjdGVkRGlyZWN0b3J5Rm9yVGVzdCgkOyQ7JCkKICAg
ICBpZiAoaXNBcHBsZVdpbldlYktpdCgpKSB7CiAgICAgICAgIHB1c2ggQGV4dHJhUGxhdGZvcm1z
LCAibWFjLXdrMiIgaWYgJHBsYXRmb3JtIGVxICJ3aW4td2syIjsKICAgICAgICAgcHVzaCBAZXh0
cmFQbGF0Zm9ybXMsIHF3KG1hYy1zbm93bGVvcGFyZCBtYWMpOworICAgIH0gZWxzaWYgKGlzR3Rr
KCkpIHsKKyAgICAgICAgcHVzaCBAZXh0cmFQbGF0Zm9ybXMsICJndGsiIGlmICRwbGF0Zm9ybSBl
cSAiZ3RrLXdrMiI7CiAgICAgfQogICAKICAgICBwdXNoIEBkaXJlY3RvcmllcywgbWFwIHsgY2F0
ZGlyKCRwbGF0Zm9ybUJhc2VEaXJlY3RvcnksICRfKSB9IEBleHRyYVBsYXRmb3JtczsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWxhdW5jaGVyIGIvVG9vbHMvU2NyaXB0cy9ydW4tbGF1
bmNoZXIKaW5kZXggNzMxZmJjMDRjMWJiNTgwMGRlY2E0OGFjMjg3M2U1ZWE4ZGU2OGM1Mi4uMDBj
NzE1ZDQ3NTQ2YWZkMDAwZGY0YmRkODM5YzA3MGY3OTQ2Nzc4OCAxMDA3NTUKLS0tIGEvVG9vbHMv
U2NyaXB0cy9ydW4tbGF1bmNoZXIKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tbGF1bmNoZXIKQEAg
LTY1LDcgKzY1LDExIEBAIGlmIChpc1F0KCkpIHsKIH0gZWxzZSB7CiAKICAgICBpZiAoaXNHdGso
KSkgewotICAgICAgICAkbGF1bmNoZXJQYXRoID0gY2F0ZGlyKCRsYXVuY2hlclBhdGgsICJQcm9n
cmFtcyIsICJHdGtMYXVuY2hlciIpOworICAgICAgICBpZiAoaXNXSzIoKSkgeworICAgICAgICAg
ICAgJGxhdW5jaGVyUGF0aCA9IGNhdGRpcigkbGF1bmNoZXJQYXRoLCAiUHJvZ3JhbXMiLCAiTWlu
aUJyb3dzZXIiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICRsYXVuY2hlclBhdGgg
PSBjYXRkaXIoJGxhdW5jaGVyUGF0aCwgIlByb2dyYW1zIiwgIkd0a0xhdW5jaGVyIik7CisgICAg
ICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKGlzRWZsKCkpIHsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0ZGlycy5wbSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQppbmRl
eCA4YzAzZjNiOTMzZWY0NDMzZmE0N2M3NWQwZDNlOTBmYzU5MTYyN2U2Li41ZDQ4NTZlYmMwMjBl
MTE2ZjM3N2RjYWFkZGQ2Yzc0NzA3YTFlYWJkIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdGRpcnMucG0KKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCkBAIC02MzAsMTIg
KzYzMCwxNyBAQCBzdWIgYnVpbHREeWxpYlBhdGhGb3JOYW1lCiAgICAgICAgIHJldHVybiAiJGNv
bmZpZ3VyYXRpb25Qcm9kdWN0RGlyL2xpYnd4d2Via2l0LmR5bGliIjsKICAgICB9CiAgICAgaWYg
KGlzR3RrKCkpIHsKLSAgICAgICAgbXkgJGxpYnJhcnlEaXIgPSAiJGNvbmZpZ3VyYXRpb25Qcm9k
dWN0RGlyLy5saWJzLyI7Ci0gICAgICAgIG15ICRleHRlbnNpb24gPSBpc0RhcndpbigpID8gImR5
bGliIiA6ICJzbyI7Ci0gICAgICAgIGlmICgtZSAkbGlicmFyeURpciAuICJsaWJ3ZWJraXRndGst
My4wLiRleHRlbnNpb24iKSB7Ci0gICAgICAgICAgICByZXR1cm4gJGxpYnJhcnlEaXIgLiAibGli
d2Via2l0Z3RrLTMuMC4kZXh0ZW5zaW9uIjsKKyAgICAgICAgIyBXZWJLaXRHVEsrIGZvciBHVEsy
LCBXZWJLaXRHVEsrIGZvciBHVEszLCBhbmQgV2ViS2l0MiByZXNwZWN0aXZlbHkuCisgICAgICAg
IG15IEBsaWJyYXJpZXMgPSAoImxpYndlYmtpdGd0ay0xLjAiLCAibGlid2Via2l0Z3RrLTMuMCIs
ICJsaWJ3ZWJraXQyZ3RrLTEuMCIpOworICAgICAgICBteSAkZXh0ZW5zaW9uID0gaXNEYXJ3aW4o
KSA/ICIuZHlsaWIiIDogIi5zbyI7CisKKyAgICAgICAgZm9yZWFjaCAoQGxpYnJhcmllcykgewor
ICAgICAgICAgICAgbXkgJGxpYnJhcnkgPSAiJGNvbmZpZ3VyYXRpb25Qcm9kdWN0RGlyLy5saWJz
LyIgLiAkXyAgLiAkZXh0ZW5zaW9uOworICAgICAgICAgICAgaWYgKC1lICRsaWJyYXJ5KSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICRsaWJyYXJ5OworICAgICAgICAgICAgfQogICAgICAgICB9
Ci0gICAgICAgIHJldHVybiAkbGlicmFyeURpciAuICJsaWJ3ZWJraXRndGstMS4wLiRleHRlbnNp
b24iOworICAgICAgICByZXR1cm4gIk5vdEZvdW5kIjsKICAgICB9CiAgICAgaWYgKGlzRWZsKCkp
IHsKICAgICAgICAgcmV0dXJuICIkY29uZmlndXJhdGlvblByb2R1Y3REaXIvJGxpYnJhcnlOYW1l
Ly4uL1dlYktpdC9saWJld2Via2l0LnNvIjsKQEAgLTE5NjMsNiArMTk2OCwxMiBAQCBzdWIgcnVu
V2ViS2l0VGVzdFJ1bm5lcgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmV0dXJuIHN5
c3RlbSAkd2ViS2l0VGVzdFJ1bm5lclBhdGgsIEBBUkdWOwogICAgICAgICB9CisgICAgfSBlbHNp
ZiAoaXNHdGsoKSkgeworICAgICAgICBteSAkcHJvZHVjdERpciA9IHByb2R1Y3REaXIoKTsKKyAg
ICAgICAgbXkgJGluamVjdGVkQnVuZGxlUGF0aCA9ICIkcHJvZHVjdERpci9MaWJyYXJpZXMvLmxp
YnMvbGliVGVzdFJ1bm5lckluamVjdGVkQnVuZGxlIjsKKyAgICAgICAgcHJpbnQgIlN0YXJ0aW5n
IFdlYktpdFRlc3RSdW5uZXIgd2l0aCBURVNUX1JVTk5FUl9JTkpFQ1RFRF9CVU5ETEVfRklMRU5B
TUUgc2V0IHRvIHBvaW50IHRvICRpbmplY3RlZEJ1bmRsZVBhdGguXG4iOworICAgICAgICAkRU5W
e1RFU1RfUlVOTkVSX0lOSkVDVEVEX0JVTkRMRV9GSUxFTkFNRX0gPSAkaW5qZWN0ZWRCdW5kbGVQ
YXRoOworICAgICAgICByZXR1cm4gc3lzdGVtICIkcHJvZHVjdERpci9Qcm9ncmFtcy9XZWJLaXRU
ZXN0UnVubmVyIiwgQEFSR1Y7CiAgICAgfQogCiAgICAgcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0dOVW1ha2VmaWxlLmFtIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9HTlVtYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MmM3ODRlZWM3ZDZmNTQxMTQ1MzMwZGE4
MmRlMWYxZTM5YTg1Y2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9HTlVtYWtlZmlsZS5hbQpAQCAtMCwwICsxLDEyMCBAQAorQlVJTFRfU09VUkNFUyArPSBcCisJ
Z2VuZXJhdGUtd2Via2l0dGVzdHJ1bm5lci1mb3J3YXJkaW5nLWhlYWRlcnMKKworZ2VuZXJhdGUt
d2Via2l0dGVzdHJ1bm5lci1mb3J3YXJkaW5nLWhlYWRlcnM6ICQoV2ViS2l0MikvU2NyaXB0cy9n
ZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwgJChQcm9ncmFtc19XZWJLaXRUZXN0UnVubmVy
X1NPVVJDRVMpCisJJChBTV9WX0dFTikkKFBFUkwpICQ8ICQoc3JjZGlyKS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyICQoR0VOU09VUkNFU19XRUJLSVQyKS9pbmNsdWRlIGd0aworCSQoQU1fVl9HRU4p
JChQRVJMKSAkPCAkKHNyY2RpcikvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lciAkKEdFTlNPVVJDRVNf
V0VCS0lUMikvaW5jbHVkZSBzb3VwCisKK25vaW5zdF9QUk9HUkFNUyArPSBcCisJUHJvZ3JhbXMv
V2ViS2l0VGVzdFJ1bm5lcgorCitQcm9ncmFtc19XZWJLaXRUZXN0UnVubmVyX1NPVVJDRVMgPSBc
CisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvbWFpbi5jcHAgXAorCVRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvZ3RrL1BsYXRmb3JtV2ViVmlld0d0ay5jcHAgXAorCVRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvZ3RrL1Rlc3RDb250cm9sbGVyR3RrLmNwcCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9ndGsvVGVzdEludm9jYXRpb25HdGsuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL1Bs
YXRmb3JtV2ViVmlldy5oIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9u
cy5oIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBcCisJVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oIFwKKwlUb29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
SW52b2NhdGlvbi5oCisKK1Byb2dyYW1zX1dlYktpdFRlc3RSdW5uZXJfQ1BQRkxBR1MgPSBcCisJ
LWluY2x1ZGUgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyUHJlZml4Lmgg
XAorCS1JJChzcmNkaXIpL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIgXAorCS1JJCh0b3BfYnVpbGRk
aXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvaW5jbHVkZSBcCisJJChnbG9iYWxfY3BwZmxhZ3Mp
IFwKKwkkKGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBcCisJJChHTE9CQUxERVBTX0NGTEFHUykg
XAorCSQoQ0FJUk9fQ0ZMQUdTKSBcCisJJChHVEtfQ0ZMQUdTKSBcCisJJChMSUJTT1VQX0NGTEFH
UykKK1Byb2dyYW1zX1dlYktpdFRlc3RSdW5uZXJfQ1hYRkxBR1MgPSAkKGdsb2JhbF9jeHhmbGFn
cykKK1Byb2dyYW1zX1dlYktpdFRlc3RSdW5uZXJfQ0ZMQUdTID0gJChnbG9iYWxfY2ZsYWdzKQor
CitQcm9ncmFtc19XZWJLaXRUZXN0UnVubmVyX0xEQUREID0gXAorCWxpYndlYmtpdDJndGstQFdF
QktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAu
bGEgXAorCSQoR0xPQkFMREVQU19MSUJTKSBcCisJJChDQUlST19MSUJTKSBcCisJJChHVEtfTElC
UykgXAorCSQoR0xJQl9MSUJTKSBcCisJJChMSUJTT1VQX0xJQlMpIFwKKwkkKEZSRUVUWVBFX0xJ
QlMpIFwKKwkkKFdJTk1NX0xJQlMpCisKK1Byb2dyYW1zX1dlYktpdFRlc3RSdW5uZXJfTERGTEFH
UyA9IFwKKwktbm8tZmFzdC1pbnN0YWxsIFwKKwktbm8taW5zdGFsbAorCisjIFRoZSBJbmplY3Rl
ZEJ1bmRsZSBsaWJyYXJ5IGFsbG93cyB0aGUgcmVuZGVyIHByb2Nlc3MgdG8gbG9hZCBoYXJuZXNz
IGNvZGUuCitub2luc3RfTFRMSUJSQVJJRVMgKz0gTGlicmFyaWVzL2xpYlRlc3RSdW5uZXJJbmpl
Y3RlZEJ1bmRsZS5sYQorCitpbmplY3RlZF9idW5kbGVfYnVpbHRfc291cmNlcyA9IFwKKwlEZXJp
dmVkU291cmNlcy9JbmplY3RlZEJ1bmRsZS9KU0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwIFwK
KwlEZXJpdmVkU291cmNlcy9JbmplY3RlZEJ1bmRsZS9KU0dDQ29udHJvbGxlci5jcHAgXAorCURl
cml2ZWRTb3VyY2VzL0luamVjdGVkQnVuZGxlL0pTTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCitC
VUlMVF9TT1VSQ0VTICs9ICQoaW5qZWN0ZWRfYnVuZGxlX2J1aWx0X3NvdXJjZXMpCisKK0xpYnJh
cmllc19saWJUZXN0UnVubmVySW5qZWN0ZWRCdW5kbGVfbGFfU09VUkNFUyA9IFwKKwkkKGluamVj
dGVkX2J1bmRsZV9idWlsdF9zb3VyY2VzKSBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9BY3RpdmF0ZUZvbnRzLmggXAorCVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvQmluZGluZ3MvSlNXcmFwcGFibGUuaCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9KU1dyYXBwZXIuY3BwIFwKKwlUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0pTV3JhcHBlci5oIFwKKwlUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIu
Y3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGlu
Z0NvbnRyb2xsZXIuaCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9H
Q0NvbnRyb2xsZXIuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0dDQ29udHJvbGxlci5oIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L2d0ay9BY3RpdmF0ZUZvbnRzR3RrLmNwcCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAgXAor
CVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3Bw
IFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxl
LmggXAorCVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGVNYWluLmNwcCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZVBhZ2UuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlUGFnZS5oIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCisKK0xpYnJhcmllc19s
aWJUZXN0UnVubmVySW5qZWN0ZWRCdW5kbGVfbGFfTERGTEFHUyA9IFwKKwktcnBhdGggJHtzaGVs
bCBwd2R9LyQodG9wX2J1aWxkZGlyKS8uLi91bml4L1Rlc3ROZXRzY2FwZVBsdWdpbi8ubGlicyBc
CisJJChub191bmRlZmluZWQpIFwKKwktYXZvaWQtdmVyc2lvbiBcCisJLW1vZHVsZQorCitMaWJy
YXJpZXNfbGliVGVzdFJ1bm5lckluamVjdGVkQnVuZGxlX2xhX0NQUEZMQUdTID0gXAorCS1ERk9O
VFNfQ09ORl9ESVI9XCIke3NoZWxsIHB3ZH0vJHtzcmNkaXJ9L1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2d0ay9mb250c1wiIFwKKwktaW5jbHVkZSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRl
c3RSdW5uZXJQcmVmaXguaCBcCisJLUkkKHNyY2RpcikvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lciBc
CisJLUkkKHNyY2RpcikvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZSBcCisJ
LUkkKHNyY2RpcikvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5n
cyBcCisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvSW5qZWN0ZWRCdW5kbGUgXAor
CS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvaW5jbHVkZSBcCisJJChn
bG9iYWxfY3BwZmxhZ3MpIFwKKwkkKGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBcCisJJChHTE9C
QUxERVBTX0NGTEFHUykgXAorCSQoQ0FJUk9fQ0ZMQUdTKSBcCisJJChHTElCX0NGTEFHUykgXAor
CSQoR1RLX0NGTEFHUykgXAorCSQoTElCU09VUF9DRkxBR1MpCitMaWJyYXJpZXNfbGliVGVzdFJ1
bm5lckluamVjdGVkQnVuZGxlX2xhX0NYWEZMQUdTID0gJChnbG9iYWxfY3h4ZmxhZ3MpCitMaWJy
YXJpZXNfbGliVGVzdFJ1bm5lckluamVjdGVkQnVuZGxlX2xhX0NGTEFHUyA9ICQoZ2xvYmFsX2Nm
bGFncykKKworY29kZV9nZW5lcmF0aW9uX2RlcGVuZGVuY2llcyA9IFwKKwlUb29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVy
LnBtIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0g
XAorCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFN0cnVjdHVyZS5wbSBcCisJU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JbkZpbGVzUGFyc2VyLnBtIFwKKwlTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsCisKK0Rlcml2ZWRTb3VyY2Vz
L0luamVjdGVkQnVuZGxlL0pTJS5jcHA6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvQmluZGluZ3MvJS5pZGwgJChjb2RlX2dlbmVyYXRpb25fZGVwZW5kZW5jaWVzKQorCSQo
QU1fVl9HRU4pJChQRVJMKSBcCisJCS1JICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzIFwKKwkJLUkgJChzcmNkaXIpL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvQmluZGluZ3MgXAorCQkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCBcCisJCS0tZGVmaW5lcyBcIlwiIC0tZ2VuZXJh
dG9yIFRlc3RSdW5uZXIgXAorCQktLWluY2x1ZGUgJChzcmNkaXIpL1Rvb2xzL0luamVjdGVkQnVu
ZGxlL0JpbmRpbmdzIFwKKwkJLS1vdXRwdXREaXIgJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3Vy
Y2VzL0luamVjdGVkQnVuZGxlIFwKKwkJJDwKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAppbmRleCBj
YzFiODVlNTE3YzAyOGJlZjhhZjEzYTUxNzk4OGEzMmZlNTc4ZGYwLi5lNzdjYWQ4OGEwMmYwZjhj
ZjExMzRkMDE1M2Y3YjAwNmE5NDIwM2I3IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCkBAIC00
MCw2ICs0MCw4IEBAIHR5cGVkZWYgVUlOVF9QVFIgUGxhdGZvcm1UaW1lclJlZjsKICNlbGlmIFBM
QVRGT1JNKFFUKQogI2luY2x1ZGUgPFFUaW1lcj4KIHR5cGVkZWYgUVRpbWVyIFBsYXRmb3JtVGlt
ZXJSZWY7CisjZWxpZiBQTEFURk9STShHVEspCit0eXBlZGVmIHVuc2lnbmVkIGludCBQbGF0Zm9y
bVRpbWVyUmVmOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXVFIgewpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvQWN0aXZhdGVGb250c0d0ay5jcHAg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9BY3RpdmF0ZUZvbnRz
R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40MDMzM2I2Y2Q0MjI3YTUyMDRjYjc0YjgyMmVlOWNhOWExZWRi
YzFmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9ndGsvQWN0aXZhdGVGb250c0d0ay5jcHAKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWN0aXZhdGVGb250cy5oIgorCisjaW5jbHVk
ZSA8Zm9udGNvbmZpZy9mb250Y29uZmlnLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKworbmFtZXNwYWNlIFdUUiB7CisKK3ZvaWQgaW5p
dGlhbGl6ZUd0a1NldHRpbmdzKCkKK3sKKworICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0
a19zZXR0aW5nc19nZXRfZGVmYXVsdCgpOworICAgIGlmICghc2V0dGluZ3MpCisgICAgICAgIHJl
dHVybjsKKyAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsIAorICAgICAgICAgICAgICAgICAiZ3Rr
LXhmdC1kcGkiLCA5ODMwNCwKKyAgICAgICAgICAgICAgICAgImd0ay14ZnQtYW50aWFsaWFzIiwg
MSwKKyAgICAgICAgICAgICAgICAgImd0ay14ZnQtaGludGluZyIsIDAsCisgICAgICAgICAgICAg
ICAgICJndGstZm9udC1uYW1lIiwgIkxpYmVyYXRpb24gU2FucyAxMiIsCisgICAgICAgICAgICAg
ICAgICJndGstdGhlbWUtbmFtZSIsICJSYWxlaWdoIiwKKyAgICAgICAgICAgICAgICAgImd0ay14
ZnQtcmdiYSIsICJub25lIiwgTlVMTCk7Cit9CisKK3ZvaWQgaW5pdGl0aWFsaXplRm9udENvbmZp
Z1NldHRpbmcoKQoreworICAgIEZjSW5pdCgpOworCisgICAgLy8gSWYgYSB0ZXN0IHJlc3VsdGVk
IGEgZm9udCBiZWluZyBhZGRlZCBvciByZW1vdmVkIHZpYSB0aGUgQGZvbnQtZmFjZSBydWxlLCB0
aGVuCisgICAgLy8gd2Ugd2FudCB0byByZXNldCB0aGUgRm9udENvbmZpZyBjb25maWd1cmF0aW9u
IHRvIHByZXZlbnQgaXQgZnJvbSBhZmZlY3Rpbmcgb3RoZXIgdGVzdHMuCisgICAgc3RhdGljIGlu
dCBudW1Gb250cyA9IDA7CisgICAgRmNGb250U2V0KiBhcHBGb250U2V0ID0gRmNDb25maWdHZXRG
b250cygwLCBGY1NldEFwcGxpY2F0aW9uKTsKKyAgICBpZiAoYXBwRm9udFNldCAmJiBudW1Gb250
cyAmJiBhcHBGb250U2V0LT5uZm9udCA9PSBudW1Gb250cykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gTG9hZCBvdXIgY29uZmlndXJhdGlvbiBmaWxlLCB3aGljaCBzZXRzIHVwIHByb3BlciBh
bGlhc2VzIGZvciBmYW1pbHkKKyAgICAvLyBuYW1lcyBsaWtlIHNhbnMsIHNlcmlmIGFuZCBtb25v
c3BhY2UuCisgICAgRmNDb25maWcqIGNvbmZpZyA9IEZjQ29uZmlnQ3JlYXRlKCk7CisgICAgR093
blB0cjxnY2hhcj4gZm9udENvbmZpZ0ZpbGVuYW1lKGdfYnVpbGRfZmlsZW5hbWUoRk9OVFNfQ09O
Rl9ESVIsICJmb250cy5jb25mIiwgTlVMTCkpOworICAgIGlmICghZ19maWxlX3Rlc3QoZm9udENv
bmZpZ0ZpbGVuYW1lLmdldCgpLCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSkKKyAgICAgICAgZ19l
cnJvcigiQ2Fubm90IGZpbmQgZm9udHMuY29uZiBhdCAlc1xuIiwgZm9udENvbmZpZ0ZpbGVuYW1l
LmdldCgpKTsKKyAgICBpZiAoIUZjQ29uZmlnUGFyc2VBbmRMb2FkKGNvbmZpZywgcmVpbnRlcnBy
ZXRfY2FzdDxGY0NoYXI4Kj4oZm9udENvbmZpZ0ZpbGVuYW1lLmdldCgpKSwgdHJ1ZSkpCisgICAg
ICAgIGdfZXJyb3IoIkNvdWxkbid0IGxvYWQgZm9udCBjb25maWd1cmF0aW9uIGZpbGUgZnJvbTog
JXMiLCBmb250Q29uZmlnRmlsZW5hbWUuZ2V0KCkpOworCisgICAgc3RhdGljIGNvbnN0IGNoYXIg
KmNvbnN0IGZvbnRQYXRoc1tdWzJdID0geworICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL3Ry
dWV0eXBlL3R0Zi1saWJlcmF0aW9uL0xpYmVyYXRpb25Nb25vLUJvbGRJdGFsaWMudHRmIiwKKyAg
ICAgICAgICAiL3Vzci9zaGFyZS9mb250cy9saWJlcmF0aW9uL0xpYmVyYXRpb25Nb25vLUJvbGRJ
dGFsaWMudHRmIiwgfSwKKyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYt
bGliZXJhdGlvbi9MaWJlcmF0aW9uTW9uby1Cb2xkLnR0ZiIsCisgICAgICAgICAgIi91c3Ivc2hh
cmUvZm9udHMvbGliZXJhdGlvbi9MaWJlcmF0aW9uTW9uby1Cb2xkLnR0ZiIsIH0sCisgICAgICAg
IHsgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWxpYmVyYXRpb24vTGliZXJhdGlvbk1v
bm8tSXRhbGljLnR0ZiIsCisgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvbGliZXJhdGlvbi9M
aWJlcmF0aW9uTW9uby1JdGFsaWMudHRmIiwgfSwKKyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250
cy90cnVldHlwZS90dGYtbGliZXJhdGlvbi9MaWJlcmF0aW9uTW9uby1SZWd1bGFyLnR0ZiIsCisg
ICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvbGliZXJhdGlvbi9MaWJlcmF0aW9uTW9uby1SZWd1
bGFyLnR0ZiIsIH0sCisgICAgICAgIHsgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWxp
YmVyYXRpb24vTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYy50dGYiLAorICAgICAgICAgICIvdXNy
L3NoYXJlL2ZvbnRzL2xpYmVyYXRpb24vTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYy50dGYiLCB9
LAorICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1saWJlcmF0aW9uL0xp
YmVyYXRpb25TYW5zLUJvbGQudHRmIiwKKyAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy9saWJl
cmF0aW9uL0xpYmVyYXRpb25TYW5zLUJvbGQudHRmIiwgfSwKKyAgICAgICAgeyAiL3Vzci9zaGFy
ZS9mb250cy90cnVldHlwZS90dGYtbGliZXJhdGlvbi9MaWJlcmF0aW9uU2Fucy1JdGFsaWMudHRm
IiwKKyAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy9saWJlcmF0aW9uL0xpYmVyYXRpb25TYW5z
LUl0YWxpYy50dGYiLCB9LAorICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0
Zi1saWJlcmF0aW9uL0xpYmVyYXRpb25TYW5zLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgICAiL3Vz
ci9zaGFyZS9mb250cy9saWJlcmF0aW9uL0xpYmVyYXRpb25TYW5zLVJlZ3VsYXIudHRmIiwgfSwK
KyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtbGliZXJhdGlvbi9MaWJl
cmF0aW9uU2VyaWYtQm9sZEl0YWxpYy50dGYiLAorICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRz
L2xpYmVyYXRpb24vTGliZXJhdGlvblNlcmlmLUJvbGRJdGFsaWMudHRmIiwgfSwKKyAgICAgICAg
eyAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtbGliZXJhdGlvbi9MaWJlcmF0aW9uU2Vy
aWYtQm9sZC50dGYiLAorICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL2xpYmVyYXRpb24vTGli
ZXJhdGlvblNlcmlmLUJvbGQudHRmIiwgfSwKKyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy90
cnVldHlwZS90dGYtbGliZXJhdGlvbi9MaWJlcmF0aW9uU2VyaWYtSXRhbGljLnR0ZiIsCisgICAg
ICAgICAgIi91c3Ivc2hhcmUvZm9udHMvbGliZXJhdGlvbi9MaWJlcmF0aW9uU2VyaWYtSXRhbGlj
LnR0ZiIsIH0sCisgICAgICAgIHsgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWxpYmVy
YXRpb24vTGliZXJhdGlvblNlcmlmLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgICAiL3Vzci9zaGFy
ZS9mb250cy9saWJlcmF0aW9uL0xpYmVyYXRpb25TZXJpZi1SZWd1bGFyLnR0ZiIsIH0sCisgICAg
ICAgIHsgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWRlamF2dS9EZWphVnVTYW5zLnR0
ZiIsCisgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvZGVqYXZ1L0RlamFWdVNhbnMudHRmIiwg
fSwKKyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtZGVqYXZ1L0RlamFW
dVNlcmlmLnR0ZiIsCisgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvZGVqYXZ1L0RlamFWdVNl
cmlmLnR0ZiIsIH0sCisKKyAgICAgICAgLy8gTWF0aE1MIHRlc3RzIHJlcXVpcmUgdGhlIFNUSVgg
Zm9udHMuCisgICAgICAgIHsgIi91c3Ivc2hhcmUvZm9udHMvb3BlbnR5cGUvc3RpeC9TVElYR2Vu
ZXJhbC5vdGYiLAorICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3N0aXgvU1RJWEdlbmVyYWwu
b3RmIiB9LAorICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL29wZW50eXBlL3N0aXgvU1RJWEdl
bmVyYWxCb2xJdGEub3RmIiwKKyAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy9zdGl4L1NUSVhH
ZW5lcmFsQm9sSXRhLm90ZiIgfSwKKyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy9vcGVudHlw
ZS9zdGl4L1NUSVhHZW5lcmFsQm9sLm90ZiIsCisgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMv
c3RpeC9TVElYR2VuZXJhbEJvbC5vdGYiIH0sCisgICAgICAgIHsgIi91c3Ivc2hhcmUvZm9udHMv
b3BlbnR5cGUvc3RpeC9TVElYR2VuZXJhbEl0YWxpYy5vdGYiLAorICAgICAgICAgICIvdXNyL3No
YXJlL2ZvbnRzL3N0aXgvU1RJWEdlbmVyYWxJdGFsaWMub3RmIiB9CisgICAgfTsKKworICAgIC8v
IFRPRE86IFNvbWUgdGVzdHMgdXNlIEx1Y2lkYS4gV2Ugc2hvdWxkIGxvYWQgdGhlc2UgYXMgd2Vs
bCwgb25jZSBpdCBiZWNvbWVzCisgICAgLy8gY2xlYXIgaG93IHRvIGluc3RhbGwgdGhlc2UgZm9u
dHMgZWFzaWx5IG9uIEZlZG9yYS4KKyAgICBmb3IgKHNpemVfdCBmb250ID0gMDsgZm9udCA8IEdf
Tl9FTEVNRU5UUyhmb250UGF0aHMpOyBmb250KyspIHsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZh
bHNlOworICAgICAgICBmb3IgKHNpemVfdCBwYXRoID0gMDsgcGF0aCA8IDI7IHBhdGgrKykgewor
CisgICAgICAgICAgICBpZiAoZ19maWxlX3Rlc3QoZm9udFBhdGhzW2ZvbnRdW3BhdGhdLCBHX0ZJ
TEVfVEVTVF9FWElTVFMpKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIGlmICghRmNDb25maWdBcHBGb250QWRkRmlsZShjb25maWcsIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGZvbnRQYXRoc1tmb250XVtwYXRoXSkpKQorICAgICAgICAg
ICAgICAgICAgICBnX2Vycm9yKCJDb3VsZCBub3QgbG9hZCBmb250IGF0ICVzISIsIGZvbnRQYXRo
c1tmb250XVtwYXRoXSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghZm91bmQp
CisgICAgICAgICAgICBnX2Vycm9yKCJDb3VsZCBub3QgZmluZCBmb250IGF0ICVzLiBFaXRoZXIg
aW5zdGFsbCB0aGlzIGZvbnQgb3IgZmlsZSBhIGJ1ZyAiCisgICAgICAgICAgICAgICAgICAgICJh
dCBodHRwOi8vYnVncy53ZWJraXQub3JnIGlmIGl0IGlzIGluc3RhbGxlZCBpbiBhbm90aGVyIGxv
Y2F0aW9uLiIsCisgICAgICAgICAgICAgICAgICAgIGZvbnRQYXRoc1tmb250XVswXSk7CisgICAg
fQorCisgICAgLy8gQWhlbSBpcyB1c2VkIGJ5IG1hbnkgbGF5b3V0IHRlc3RzLgorICAgIEdPd25Q
dHI8Z2NoYXI+IGFoZW1Gb250RmlsZW5hbWUoZ19idWlsZF9maWxlbmFtZShGT05UU19DT05GX0RJ
UiwgIkFIRU1fX19fLlRURiIsIE5VTEwpKTsKKyAgICBpZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZp
bGUoY29uZmlnLCByZWludGVycHJldF9jYXN0PEZjQ2hhcjgqPihhaGVtRm9udEZpbGVuYW1lLmdl
dCgpKSkpCisgICAgICAgIGdfZXJyb3IoIkNvdWxkIG5vdCBsb2FkIGZvbnQgYXQgJXMhIiwgYWhl
bUZvbnRGaWxlbmFtZS5nZXQoKSk7IAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZvbnRGaWxl
bmFtZXNbXSA9IHsKKyAgICAgICAgIkNvbG9yQml0cy50dGYiLAorICAgICAgICAiV2ViS2l0V2Vp
Z2h0V2F0Y2hlcjEwMC50dGYiLAorICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50dGYi
LAorICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjMwMC50dGYiLAorICAgICAgICAiV2ViS2l0
V2VpZ2h0V2F0Y2hlcjQwMC50dGYiLAorICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjUwMC50
dGYiLAorICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjYwMC50dGYiLAorICAgICAgICAiV2Vi
S2l0V2VpZ2h0V2F0Y2hlcjcwMC50dGYiLAorICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjgw
MC50dGYiLAorICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGYiLAorICAgICAgICAw
CisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBmb250RmlsZW5hbWVzW2ldOyArK2kp
IHsKKyAgICAgICAgR093blB0cjxnY2hhcj4gZm9udEZpbGVuYW1lKGdfYnVpbGRfZmlsZW5hbWUo
Rk9OVFNfQ09ORl9ESVIsICIuLiIsICIuLiIsICJmb250cyIsIGZvbnRGaWxlbmFtZXNbaV0sIE5V
TEwpKTsKKyAgICAgICAgaWYgKCFGY0NvbmZpZ0FwcEZvbnRBZGRGaWxlKGNvbmZpZywgcmVpbnRl
cnByZXRfY2FzdDxGY0NoYXI4Kj4oZm9udEZpbGVuYW1lLmdldCgpKSkpCisgICAgICAgICAgICBn
X2Vycm9yKCJDb3VsZCBub3QgbG9hZCBmb250IGF0ICVzISIsIGZvbnRGaWxlbmFtZS5nZXQoKSk7
IAorICAgIH0KKworICAgIC8vIEEgZm9udCB3aXRoIG5vIHZhbGlkIEZvbnRjb25maWcgZW5jb2Rp
bmcgdG8gdGVzdCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc0NTIK
KyAgICBHT3duUHRyPGdjaGFyPiBmb250V2l0aE5vVmFsaWRFbmNvZGluZ0ZpbGVuYW1lKGdfYnVp
bGRfZmlsZW5hbWUoRk9OVFNfQ09ORl9ESVIsICJGb250V2l0aE5vVmFsaWRFbmNvZGluZy5mb24i
LCBOVUxMKSk7CisgICAgaWYgKCFGY0NvbmZpZ0FwcEZvbnRBZGRGaWxlKGNvbmZpZywgcmVpbnRl
cnByZXRfY2FzdDxGY0NoYXI4Kj4oZm9udFdpdGhOb1ZhbGlkRW5jb2RpbmdGaWxlbmFtZS5nZXQo
KSkpKQorICAgICAgICBnX2Vycm9yKCJDb3VsZCBub3QgbG9hZCBmb250IGF0ICVzISIsIGZvbnRX
aXRoTm9WYWxpZEVuY29kaW5nRmlsZW5hbWUuZ2V0KCkpOyAKKworICAgIGlmICghRmNDb25maWdT
ZXRDdXJyZW50KGNvbmZpZykpCisgICAgICAgIGdfZXJyb3IoIkNvdWxkIG5vdCBzZXQgdGhlIGN1
cnJlbnQgZm9udCBjb25maWd1cmF0aW9uISIpOworCisgICAgbnVtRm9udHMgPSBGY0NvbmZpZ0dl
dEZvbnRzKGNvbmZpZywgRmNTZXRBcHBsaWNhdGlvbiktPm5mb250OworfQorCit2b2lkIGFjdGl2
YXRlRm9udHMoKQoreworICAgIGluaXRpYWxpemVHdGtTZXR0aW5ncygpOworICAgIGluaXRpdGlh
bGl6ZUZvbnRDb25maWdTZXR0aW5nKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZ3RrL0luamVjdGVkQnVuZGxlR3RrLmNwcCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZ3RrL0luamVjdGVkQnVuZGxlR3Rr
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iYjgwYWVhMWJkNDEyZTEwYzk5ODQ1OGViYWI2YjljZjQwNDI1YmJm
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgorCituYW1lc3BhY2UgV1RSIHsKKworc3RhdGlj
IHZvaWQgbG9nSGFuZGxlcihjb25zdCBnY2hhciogZG9tYWluLCBHTG9nTGV2ZWxGbGFncyBsZXZl
bCwgY29uc3QgZ2NoYXIqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKGxldmVs
IDwgR19MT0dfTEVWRUxfREVCVUcpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1l
c3NhZ2UpOworfQorCisKK3ZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBsYXRmb3JtSW5pdGlhbGl6ZShX
S1R5cGVSZWYpCit7CisgICAgLy8gU29tZSBwbHVnaW5zIG1pZ2h0IHRyeSB0byB1c2UgdGhlIEdM
aWIgbG9nZ2VyIGZvciBwcmludGluZyBkZWJ1ZyBtZXNzYWdlcy4gVGhpcworICAgIC8vIHdpbGwg
Y2F1c2UgdGVzdHMgdG8gZmFpbCBiZWNhdXNlIG9mIHVuZXhwZWN0ZWQgb3V0cHV0LiBXZSBzcXVl
bGNoIGFsbCBkZWJ1ZworICAgIC8vIG1lc3NhZ2VzIHNlbnQgdG8gdGhlIGxvZ2dlci4KKyAgICBn
X2xvZ19zZXRfZGVmYXVsdF9oYW5kbGVyKGxvZ0hhbmRsZXIsIDApOworfQorCit9IC8vIG5hbWVz
cGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kMDAzNmRkNTkyZDg4YmJjMDM1YzQyNTU1MjhmNTFjY2JhOGRkODg3Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvTGF5b3V0
VGVzdENvbnRyb2xsZXJHdGsuY3BwCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUu
aCIKKyNpbmNsdWRlIDxnbGliLmg+CisKK25hbWVzcGFjZSBXVFIgeworCitzdGF0aWMgZ2Jvb2xl
YW4gd2FpdFRvRHVtcFdhdGNoZG9nVGltZXJDYWxsYmFjayhncG9pbnRlcikKK3sKKyAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+d2FpdFRvRHVtcFdh
dGNoZG9nVGltZXJGaXJlZCgpOworICAgIHJldHVybiBGQUxTRTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Jbml0aWFsaXplKCkKK3sKKyAgICBtX3dhaXRUb0R1bXBX
YXRjaGRvZ1RpbWVyID0gMDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aW52YWxp
ZGF0ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkKK3sKKyAgICBpZiAoIW1fd2FpdFRvRHVtcFdh
dGNoZG9nVGltZXIpCisgICAgICAgIHJldHVybjsKKyAgICBnX3NvdXJjZV9yZW1vdmUobV93YWl0
VG9EdW1wV2F0Y2hkb2dUaW1lcik7CisgICAgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lciA9IDA7
Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemVXYWl0VG9EdW1wV2F0
Y2hkb2dUaW1lcklmTmVlZGVkKCkKK3sKKyAgICBpZiAobV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1l
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lciA9IGdf
dGltZW91dF9hZGQod2FpdFRvRHVtcFdhdGNoZG9nVGltZXJJbnRlcnZhbCAqIDEwMDAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdFRvRHVtcFdhdGNo
ZG9nVGltZXJDYWxsYmFjaywgMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKaW5kZXggOTczOWQ0MjE3OTk5NTllODUzZThi
NGRmNzIwY2RkMzI5Mzc5ODhkYi4uY2JjNDhlNDk1ODAwOWY1NTkzN2E4YjNmMThmODM2ZTk0YmI1
N2I0MiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcu
aAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCkBAIC00Niw2
ICs0NiwxMCBAQCB0eXBlZGVmIE5TV2luZG93KiBQbGF0Zm9ybVdpbmRvdzsKICNlbGlmIGRlZmlu
ZWQoV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyKQogdHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1X
S1ZpZXc7CiB0eXBlZGVmIEhXTkQgUGxhdGZvcm1XaW5kb3c7CisjZWxpZiBkZWZpbmVkKEJVSUxE
SU5HX0dUS19fKQordHlwZWRlZiBzdHJ1Y3QgX0d0a1dpZGdldCBHdGtXaWRnZXQ7Cit0eXBlZGVm
IFdLVmlld1JlZiBQbGF0Zm9ybVdLVmlldzsKK3R5cGVkZWYgR3RrV2lkZ2V0KiBQbGF0Zm9ybVdp
bmRvdzsKICNlbmRpZgogCiBuYW1lc3BhY2UgV1RSIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvZ3RrL1BsYXRmb3JtV2ViVmlld0d0ay5jcHAgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2d0ay9QbGF0Zm9ybVdlYlZpZXdHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4ZjA4NTc2MTBm
NTE4MWQ5NzU3ZDdhZGIzYTk5NTQxM2IxZTg1ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2d0ay9QbGF0Zm9ybVdlYlZpZXdHdGsuY3BwCkBAIC0wLDAgKzEsMTAx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2Vi
Vmlldy5oIgorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCituYW1lc3BhY2UgV1RSIHsKKworUGxh
dGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFn
ZUdyb3VwUmVmIHBhZ2VHcm91cCkKKyAgICA6IG1fdmlldyhXS1ZpZXdDcmVhdGUoY29udGV4dCwg
cGFnZUdyb3VwKSkKKyAgICAsIG1fd2luZG93KGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9Q
VVApKQoreworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV93aW5kb3cpLCBX
S1ZpZXdHZXRXaW5kb3cobV92aWV3KSk7CisKKyAgICBHdGtBbGxvY2F0aW9uIHNpemUgPSB7IDAs
IDAsIDgwMCwgNjAwIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKG1fd2luZG93LCAm
c2l6ZSk7CisgICAgZ3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhtX3dpbmRvdyksIDgwMCwg
NjAwKTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKG1fd2luZG93KTsKKworICAgIHdoaWxlIChn
dGtfZXZlbnRzX3BlbmRpbmcoKSkKKyAgICAgICAgZ3RrX21haW5faXRlcmF0aW9uKCk7Cit9CisK
K1BsYXRmb3JtV2ViVmlldzo6flBsYXRmb3JtV2ViVmlldygpCit7CisgICAgZ3RrX3dpZGdldF9k
ZXN0cm95KG1fd2luZG93KTsKK30KKwordm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKHVu
c2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCit7CisgICAgR3RrQWxsb2NhdGlvbiBzaXpl
ID0geyAwLCAwLCB3aWR0aCwgaGVpZ2h0IH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRl
KG1fd2luZG93LCAmc2l6ZSk7CisgICAgZ3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhtX3dp
bmRvdyksIHdpZHRoLCBoZWlnaHQpOworCisgICAgd2hpbGUgKGd0a19ldmVudHNfcGVuZGluZygp
KQorICAgICAgICBndGtfbWFpbl9pdGVyYXRpb24oKTsKK30KKworV0tQYWdlUmVmIFBsYXRmb3Jt
V2ViVmlldzo6cGFnZSgpCit7CisgICAgcmV0dXJuIFdLVmlld0dldFBhZ2UobV92aWV3KTsKK30K
Kwordm9pZCBQbGF0Zm9ybVdlYlZpZXc6OmZvY3VzKCkKK3sKK30KKworV0tSZWN0IFBsYXRmb3Jt
V2ViVmlldzo6d2luZG93RnJhbWUoKQoreworICAgIEd0a0FsbG9jYXRpb24gZ2VvbWV0cnk7Cisj
aWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBnaW50IGRlcHRoOworICAgIGdka193aW5kb3df
Z2V0X2dlb21ldHJ5KGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKG1fd2luZG93KSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdlb21ldHJ5LngsICZnZW9tZXRyeS55LCAm
Z2VvbWV0cnkud2lkdGgsICZnZW9tZXRyeS5oZWlnaHQsICZkZXB0aCk7CisjZWxzZQorICAgIGdk
a193aW5kb3dfZ2V0X2dlb21ldHJ5KGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKG1f
d2luZG93KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdlb21ldHJ5LngsICZnZW9t
ZXRyeS55LCAmZ2VvbWV0cnkud2lkdGgsICZnZW9tZXRyeS5oZWlnaHQpOworI2VuZGlmCisKKyAg
ICBXS1JlY3QgZnJhbWU7CisgICAgZnJhbWUub3JpZ2luLnggPSBnZW9tZXRyeS54OworICAgIGZy
YW1lLm9yaWdpbi55ID0gZ2VvbWV0cnkueTsKKyAgICBmcmFtZS5zaXplLndpZHRoID0gZ2VvbWV0
cnkud2lkdGg7CisgICAgZnJhbWUuc2l6ZS5oZWlnaHQgPSBnZW9tZXRyeS5oZWlnaHQ7CisgICAg
cmV0dXJuIGZyYW1lOworfQorCit2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2V0V2luZG93RnJhbWUo
V0tSZWN0IGZyYW1lKQoreworICAgIGd0a193aW5kb3dfbW92ZShHVEtfV0lORE9XKG1fd2luZG93
KSwgZnJhbWUub3JpZ2luLngsIGZyYW1lLm9yaWdpbi55KTsKKyAgICByZXNpemVUbyhmcmFtZS5z
aXplLndpZHRoLCBmcmFtZS5zaXplLmhlaWdodCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdUUgor
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJvbGxlckd0
ay5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJvbGxlckd0ay5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZThiOTZiZDk4MzVkM2RjNGI0YzNhYTg4MTE5MjZlZDIxMTgxZjFiZgotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250cm9sbGVy
R3RrLmNwcApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlh
IFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJUZXN0Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgV1RSIHsKKworc3RhdGljIGd1aW50IGdUaW1lb3V0U291cmNlSWQgPSAw
OworCitzdGF0aWMgdm9pZCBjYW5jZWxUaW1lb3V0KCkKK3sKKyAgICBpZiAoIWdUaW1lb3V0U291
cmNlSWQpCisgICAgICAgIHJldHVybjsKKyAgICBnX3NvdXJjZV9yZW1vdmUoZ1RpbWVvdXRTb3Vy
Y2VJZCk7CisgICAgZ1RpbWVvdXRTb3VyY2VJZCA9IDA7Cit9CisKK3ZvaWQgVGVzdENvbnRyb2xs
ZXI6Om5vdGlmeURvbmUoKQoreworICAgIGd0a19tYWluX3F1aXQoKTsKKyAgICBjYW5jZWxUaW1l
b3V0KCk7Cit9CisKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCit7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB0aW1lb3V0Q2FsbGJhY2soZ3BvaW50ZXIpCit7CisgICAg
ZnByaW50ZihzdGRlcnIsICJGQUlMOiBUZXN0Q29udHJvbGxlclJ1bkxvb3AgdGltZWQgb3V0Llxu
Iik7CisgICAgZ3RrX21haW5fcXVpdCgpOworICAgIHJldHVybiBGQUxTRTsKK30KKwordm9pZCBU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SdW5VbnRpbChib29sJiwgZG91YmxlIHRpbWVvdXQpCit7
CisgICAgY2FuY2VsVGltZW91dCgpOworICAgIGdUaW1lb3V0U291cmNlSWQgPSBnX3RpbWVvdXRf
YWRkKHRpbWVvdXQgKiAxMDAwLCB0aW1lb3V0Q2FsbGJhY2ssIDApOworICAgIGd0a19tYWluKCk7
Cit9CisKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemVJbmplY3RlZEJ1bmRsZVBhdGgo
KQoreworICAgIGNvbnN0IGNoYXIqIGJ1bmRsZVBhdGggPSBnX2dldGVudigiVEVTVF9SVU5ORVJf
SU5KRUNURURfQlVORExFX0ZJTEVOQU1FIik7CisgICAgaWYgKCFidW5kbGVQYXRoKSB7CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiVEVTVF9SVU5ORVJfSU5KRUNURURfQlVORExFX0ZJTEVOQU1F
IGVudmlyb25tZW50IHZhcmlhYmxlIG5vdCBmb3VuZFxuIik7CisgICAgICAgIGV4aXQoMCk7Cisg
ICAgfQorCisgICAgZ3NpemUgYnl0ZXNXcml0dGVuOworICAgIEdPd25QdHI8Y2hhcj4gdXRmOEJ1
bmRsZVBhdGgoZ19maWxlbmFtZV90b191dGY4KGJ1bmRsZVBhdGgsIC0xLCAwLCAmYnl0ZXNXcml0
dGVuLCAwKSk7CisgICAgbV9pbmplY3RlZEJ1bmRsZVBhdGggPSBXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyh1dGY4QnVuZGxlUGF0aC5nZXQoKSk7Cit9CisKK3ZvaWQgVGVzdENvbnRyb2xs
ZXI6OmluaXRpYWxpemVUZXN0UGx1Z2luRGlyZWN0b3J5KCkKK3sKKyAgICAvLyBUaGlzIGlzIGNh
bGxlZCBhZnRlciBpbml0aWFsaXplSW5qZWN0ZWRCdW5kbGVQYXRoLgorICAgIG1fdGVzdFBsdWdp
bkRpcmVjdG9yeSA9IG1faW5qZWN0ZWRCdW5kbGVQYXRoOworfQorCit2b2lkIFRlc3RDb250cm9s
bGVyOjpwbGF0Zm9ybUluaXRpYWxpemVDb250ZXh0KCkKK3sKK30KKwordm9pZCBUZXN0Q29udHJv
bGxlcjo6cnVuTW9kYWwoUGxhdGZvcm1XZWJWaWV3KikKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0
byBpbXBsZW1lbnQgdGhpcyB0byB0ZXN0IHNob3dNb2RhbERpYWxvZy4KK30KKworY29uc3QgY2hh
ciogVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtTGlicmFyeVBhdGhGb3JUZXN0aW5nKCkKK3sKKyAg
ICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0SW52b2NhdGlvbkd0ay5jcHAgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2d0ay9UZXN0SW52b2NhdGlvbkd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjg1MjBhYmM2
OTQ0MjY2N2I3YzE1YWUxZjNlYWNlYzk4MzljZWZlZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RJbnZvY2F0aW9uR3RrLmNwcApAQCAtMCwwICsxLDM1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RJbnZv
Y2F0aW9uLmgiCisKK25hbWVzcGFjZSBXVFIgeworCit2b2lkIFRlc3RJbnZvY2F0aW9uOjpkdW1w
UGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZChXS0ltYWdlUmVmIGltYWdlKQoreworfQorCit9
IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3Rr
L21haW4uY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvbWFpbi5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZTlhODQzOTZhNjRiNTRiYTJjZTA2Njc1NDk4Njc5YjljZGNhYTI2ZQotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL21haW4uY3BwCkBAIC0wLDAgKzEsMzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKKworaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGd0a19pbml0KCZhcmdjLCAmYXJndik7
CisgICAgV1RSOjpUZXN0Q29udHJvbGxlciBjb250cm9sbGVyKGFyZ2MsIGNvbnN0X2Nhc3Q8Y29u
c3QgY2hhcioqPihhcmd2KSk7CisgICAgcmV0dXJuIDA7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91330</attachid>
            <date>2011-04-27 13:12:21 -0700</date>
            <delta_ts>2011-05-31 12:31:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57068-20110427131221.patch</filename>
            <type>text/plain</type>
            <size>42444</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODUwNzEKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCAzODQwOTllMDFjMDI2MTFmYTM1ZTY2NDQ5Mjc5NjExYjU4MTVhZjFkLi41Yzkw
M2VhY2QxOTBkOTIxNmIyMWQyNTFkZWE2ZDg0NTkyMjdhNDM3IDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDMtMzAgIE1hcnRpbiBS
b2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFtXZWJLaXQyXSBJbXBsZW1lbnQgYSBiYXNp
YyBXZWJLaXRUZXN0UnVubmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NzA2OAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZGVkIHJlZmVy
ZW5jZSB0byBXZWJLaXRUZXN0UnVubmVyIEdOVW1ha2VmaWxlLgorCiAyMDExLTA0LTI3ICBZaSBT
aGVuICA8eWkuNC5zaGVuQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRo
IFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFr
ZWZpbGUuYW0KaW5kZXggYWY1NDg5MWFhMTI2M2FhNmI5Nzk5M2ZmMmNhOTA1ZWEwMWMxZGQwNS4u
OGM1MDJmMDM0NmNiZWEwNTM2YWNiYjA2ZDBmY2NjNjY1ODQ2ZDIwNCAxMDA2NDQKLS0tIGEvR05V
bWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0KQEAgLTIzMCw2ICsyMzAsNyBAQCBpbmNs
dWRlIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCiBpZiBFTkFCTEVfV0VCS0lUMgogaW5j
bHVkZSBTb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQogaW5jbHVkZSBUb29scy9NaW5pQnJv
d3Nlci9ndGsvR05VbWFrZWZpbGUuYW0KK2luY2x1ZGUgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9H
TlVtYWtlZmlsZS5hbQogIyBbR1RLXSBSZWZhY3RvciB0aGUgdHJhbnNsYXRpb25zIG5vdyB0aGF0
IHdlIGhhdmUgd2Via2l0MgogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTUxNTMKIHN0YW1wLXBvOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDM0Y2E4NDg5MjU0ZTEwM2FlMzk2NjU2
MjZlMWNkODAyYWE1M2JiMzUuLjY4OTgxYjc0MDEzYjk4ZDRlMThkNWQ3MTM0MGZlNzEzNGU1Nzgx
ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMS0wMy0zMCAgTWFydGluIFJvYmlu
c29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW0dUS10gW1dlYktpdDJdIEltcGxlbWVudCBhIGJhc2ljIFdl
YktpdFRlc3RSdW5uZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU3MDY4CisKKyAgICAgICAgQWRkZWQgSW5qZWN0ZWRCdW5kbGUgc3VwcG9ydCBmb3Ig
R1RLKy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuaDogQWRkZWQgdHlwZWRlZiBmb3IgR1RLKy4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL2d0ay9JbmplY3RlZEJ1bmRsZUd0ay5jcHA6IEFkZGVkIGltcGxlbWVudGF0aW9u
LgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6bG9hZCk6IAorICAgICAgICAoV2Vi
S2l0OjpJbmplY3RlZEJ1bmRsZTo6YWN0aXZhdGVNYWNGb250QXNjZW50SGFjayk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcDogUmVtb3ZlIHVubmVjZXNz
YXJ5IG1ldGhvZCBkZWZpbml0aW9uLgorCiAyMDExLTA0LTI3ICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9i
aW5zb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlLmgKaW5kZXggMjBhMGY2OGVlM2ViNTg4ZmI0NjJmYTMzNTlh
NGQyYmMwNWI0MDk4Ny4uM2I1NDlkYzQ3NGZkODNhYTFmZjEyMzk0ZGY2NWZiNTMyYjFmZmUwOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuaApAQCAtMzksNiArMzksMTAgQEAKICNpbmNsdWRlIDxRTGlicmFy
eT4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oR1RLKQordHlwZWRlZiBzdHJ1Y3QgX0dNb2R1bGUg
R01vZHVsZTsKKyNlbmRpZgorCiBuYW1lc3BhY2UgQ29yZUlQQyB7CiAgICAgY2xhc3MgQXJndW1l
bnREZWNvZGVyOwogICAgIGNsYXNzIENvbm5lY3Rpb247CkBAIC01NCw3ICs1OCw3IEBAIHR5cGVk
ZWYgSE1PRFVMRSBQbGF0Zm9ybUJ1bmRsZTsKICNlbGlmIFBMQVRGT1JNKFFUKQogdHlwZWRlZiBR
TGlicmFyeSBQbGF0Zm9ybUJ1bmRsZTsKICNlbGlmIFBMQVRGT1JNKEdUSykKLXR5cGVkZWYgdm9p
ZCogUGxhdGZvcm1CdW5kbGU7Cit0eXBlZGVmIDo6R01vZHVsZSogUGxhdGZvcm1CdW5kbGU7CiAj
ZW5kaWYKIAogY2xhc3MgSW1tdXRhYmxlQXJyYXk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL2d0ay9JbmplY3RlZEJ1bmRsZUd0ay5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL2d0ay9JbmplY3RlZEJ1bmRs
ZUd0ay5jcHAKaW5kZXggYmJmMjRlNDNiN2RmZGQwNjliOGQ4YTM2OGNhNDE5MjJjMDEyYzk1Ny4u
Y2ExYTQzZjhjZGM1YWVlN2ZlMjk2YzFjZjY3NmYyZDcxNzcxYmJhMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVH
dGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvZ3Rr
L0luamVjdGVkQnVuZGxlR3RrLmNwcApAQCAtMjksMjAgKzI5LDMzIEBACiAKICNpbmNsdWRlICJX
S0J1bmRsZUFQSUNhc3QuaCIKICNpbmNsdWRlICJXS0J1bmRsZUluaXRpYWxpemUuaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lz
dGVtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWJvb2wgSW5qZWN0ZWRCdW5kbGU6Omxv
YWQoQVBJT2JqZWN0KikKK2Jvb2wgSW5qZWN0ZWRCdW5kbGU6OmxvYWQoQVBJT2JqZWN0KiBpbml0
aWFsaXphdGlvblVzZXJEYXRhKQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3BsYXRmb3Jt
QnVuZGxlID0gZ19tb2R1bGVfb3BlbihmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24obV9wYXRoKS5k
YXRhKCksIEdfTU9EVUxFX0JJTkRfTE9DQUwpOworICAgIGlmICghbV9wbGF0Zm9ybUJ1bmRsZSkg
eworICAgICAgICBnX3dhcm5pbmcoIkVycm9yIGxvYWRpbmcgdGhlIGluamVjdGVkIGJ1bmRsZSAo
JXMpOiAlcyIsIG1fcGF0aC51dGY4KCkuZGF0YSgpLCBnX21vZHVsZV9lcnJvcigpKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFdLQnVuZGxlSW5pdGlhbGl6ZUZ1bmN0aW9u
UHRyIGluaXRpYWxpemVGdW5jdGlvbiA9IDA7CisgICAgaWYgKCFnX21vZHVsZV9zeW1ib2wobV9w
bGF0Zm9ybUJ1bmRsZSwgIldLQnVuZGxlSW5pdGlhbGl6ZSIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCoqPigmaW5pdGlhbGl6ZUZ1bmN0aW9uKSkgfHwgIWluaXRpYWxpemVGdW5jdGlvbikgeworICAg
ICAgICBnX3dhcm5pbmcoIkVycm9yIGxvYWRpbmcgV0tCdW5kbGVJbml0aWFsaXplIHN5bWJvbCBm
cm9tIGluamVjdGVkIGJ1bmRsZS4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGluaXRpYWxpemVGdW5jdGlvbih0b0FQSSh0aGlzKSwgdG9BUEkoaW5pdGlhbGl6YXRpb25V
c2VyRGF0YSkpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjph
Y3RpdmF0ZU1hY0ZvbnRBc2NlbnRIYWNrKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCAwMGMwOTI4MzA3N2YyZGRkZDVmMzljYmM4ZTBiZmE1NTE4NGMx
YTBjLi4xMWQyYmY5YjQ2NzczOGZiY2MyNGM0OTJmOGFkNDFkNDMyYTk2ZWI5IDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAK
KzIwMTEtMDMtMzAgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFtXZWJL
aXQyXSBJbXBsZW1lbnQgYSBiYXNpYyBXZWJLaXRUZXN0UnVubmVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzA2OAorCisgICAgICAgIEFkZCBhbiBp
bXBsZW1lbnRhdGlvbiBvZiBXZWJLaXRUZXN0UnVubmVyIGZvciBHVEsrLgorCisgICAgICAgICog
U2NyaXB0cy9idWlsZC13ZWJraXR0ZXN0cnVubmVyOiBBZGRlZCBrbm93bGVkZ2Ugb2YgR1RLKyBU
ZXN0UnVubmVyLgorICAgICAgICAqIFNjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHM6IERpdHRv
LgorICAgICAgICAqIFNjcmlwdHMvcnVuLWxhdW5jaGVyOiBEaXR0by4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdGRpcnMucG06IERpdHRvLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvR05V
bWFrZWZpbGUuYW06IEFkZGVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL2d0ay9BY3RpdmF0ZUZvbnRzR3RrLmNwcDogQWRkZWQuCisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L2d0ay9JbmplY3RlZEJ1bmRsZUd0ay5jcHAuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL2d0ay9JbmplY3RlZEJ1
bmRsZUd0ay5jcHAuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcu
aDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2d0ay9QbGF0Zm9ybVdlYlZpZXdHdGsuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJvbGxlckd0
ay5jcHA6IEFkZGVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RJbnZvY2F0
aW9uR3RrLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwLgorICAgICAgICAoV1RSOjpUZXN0SW52
b2NhdGlvbjo6ZHVtcFBpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQpOgorICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvZ3RrL21haW4uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL2d0ay9JbmplY3RlZEJ1bmRsZUd0ay5jcHAuCisgICAg
ICAgIChtYWluKTogQWRkZWQuCisKIDIwMTEtMDQtMjcgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJr
aXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1paGFpIFBhcnBhcml0YS4KZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0dGVzdHJ1bm5lciBiL1Rvb2xzL1NjcmlwdHMv
YnVpbGQtd2Via2l0dGVzdHJ1bm5lcgppbmRleCBlOTZkZDZhMzczNDc3ZTJkZGY0ODg0NTAxNWI4
OWJiNGU0MzA3M2U1Li5mMDNjMTc5OWE3N2ZlZTMzZjgzZjlmODk1OGUxYWZhYzA2ZTk1NGU4IDEw
MDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdHRlc3RydW5uZXIKKysrIGIvVG9v
bHMvU2NyaXB0cy9idWlsZC13ZWJraXR0ZXN0cnVubmVyCkBAIC02Myw4ICs2Myw4IEBAIGlmIChp
c0FwcGxlTWFjV2ViS2l0KCkpIHsKICAgICAkcmVzdWx0ID0gYnVpbGRYQ29kZVByb2plY3QoIldl
YktpdFRlc3RSdW5uZXIiLCAkY2xlYW4sIFhjb2RlT3B0aW9ucygpLCBAQVJHVik7CiB9IGVsc2lm
IChpc0FwcGxlV2luV2ViS2l0KCkpIHsKICAgICAkcmVzdWx0ID0gYnVpbGRWaXN1YWxTdHVkaW9Q
cm9qZWN0KCJXZWJLaXRUZXN0UnVubmVyLnNsbiIsICRjbGVhbik7Ci19IGVsc2lmIChpc1F0KCkp
IHsKLSAgICAjIFF0IGJ1aWxkcyBldmVyeXRoaW5nIGluIG9uZSBzaG90LiBObyBuZWVkIHRvIGJ1
aWxkIGFueXRoaW5nIGhlcmUuCit9IGVsc2lmIChpc1F0KCkgfHwgaXNHdGsoKSkgeworICAgICMg
UXQgYW5kIEdUSysgYnVpbGQgZXZlcnl0aGluZyBpbiBvbmUgc2hvdC4gTm8gbmVlZCB0byBidWls
ZCBhbnl0aGluZyBoZXJlLgogICAgICRyZXN1bHQgPSAwOwogfSBlbHNlIHsKICAgICBkaWUgIldl
YktpdFRlc3RSdW5uZXIgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLlxuIjsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHMgYi9Ub29scy9TY3Jp
cHRzL29sZC1ydW4td2Via2l0LXRlc3RzCmluZGV4IGViNTA0NmE0ZTBmYTgwNDlmNjlhNzk1OGM4
N2VlODE1OTI2ZjQwYTkuLjdhNjA4OTAyNjJjMWFhMmIzODRiMTZmYWU1ODcwNTM0MDc0OGU1N2Yg
MTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHMKKysrIGIvVG9v
bHMvU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cwpAQCAtMzg3LDYgKzM4Nyw5IEBAIGlmICgk
dXNlV2ViS2l0VGVzdFJ1bm5lcikgewogICAgIH0gZWxzaWYgKGlzUXQoKSkgewogICAgICAgICAk
cmVhbFBsYXRmb3JtID0gJHBsYXRmb3JtOwogICAgICAgICAkcGxhdGZvcm0gPSAicXQtd2syIjsK
KyAgICB9IGVsc2lmIChpc0d0aygpKSB7CisgICAgICAgICRyZWFsUGxhdGZvcm0gPSAkcGxhdGZv
cm07CisgICAgICAgICRwbGF0Zm9ybSA9ICJndGstd2syIjsKICAgICB9CiB9CiAKQEAgLTExODAs
NiArMTE4Myw3IEBAIGNsb3NlIEhUTUw7CiBteSBAY29uZmlndXJhdGlvbkFyZ3MgPSBhcmd1bWVu
dHNGb3JDb25maWd1cmF0aW9uKCk7CiAKIGlmIChpc0d0aygpKSB7CisgIHB1c2goQGNvbmZpZ3Vy
YXRpb25BcmdzLCAnLTInKSBpZiAkdXNlV2ViS2l0VGVzdFJ1bm5lcjsKICAgc3lzdGVtICJUb29s
cy9TY3JpcHRzL3J1bi1sYXVuY2hlciIsIEBjb25maWd1cmF0aW9uQXJncywgImZpbGU6Ly8iLiR0
ZXN0UmVzdWx0cyBpZiAkbGF1bmNoU2FmYXJpOwogfSBlbHNpZiAoaXNRdCgpKSB7CiAgIHVuc2hp
ZnQgQGNvbmZpZ3VyYXRpb25BcmdzLCBxdygtZ3JhcGhpY3NzeXN0ZW0gcmFzdGVyIC1zdHlsZSB3
aW5kb3dzKTsKQEAgLTE1MDcsNiArMTUxMSwxMSBAQCBzdWIgb3BlbkR1bXBUb29sKCkKICAgICBp
ZiAoaXNHdGsoKSkgewogICAgICAgICAkQ0xFQU5fRU5We0dUS19NT0RVTEVTfSA9ICJnYWlsIjsK
ICAgICAgICAgJENMRUFOX0VOVntXRUJLSVRfSU5TUEVDVE9SX1BBVEh9ID0gIiRwcm9kdWN0RGly
L3Jlc291cmNlcy9pbnNwZWN0b3IiOworCisgICAgICAgIGlmICgkdXNlV2ViS2l0VGVzdFJ1bm5l
cikgeworICAgICAgICAgICAgbXkgJGluamVjdGVkQnVuZGxlUGF0aCA9IHByb2R1Y3REaXIoKSAu
ICIvTGlicmFyaWVzLy5saWJzL2xpYlRlc3RSdW5uZXJJbmplY3RlZEJ1bmRsZSI7CisgICAgICAg
ICAgICAkQ0xFQU5fRU5We1RFU1RfUlVOTkVSX0lOSkVDVEVEX0JVTkRMRV9GSUxFTkFNRX0gPSAk
aW5qZWN0ZWRCdW5kbGVQYXRoOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGlzUXQoKSkg
ewpAQCAtMjE2NSw2ICsyMTc0LDkgQEAgc3ViIGJ1aWxkUGxhdGZvcm1SZXN1bHRIaWVyYXJjaHko
KQogICAgIH0gZWxzaWYgKCRwbGF0Zm9ybSA9fiAvXnF0LS8pIHsKICAgICAgICAgcHVzaCBAcGxh
dGZvcm1zLCAkcGxhdGZvcm07CiAgICAgICAgIHB1c2ggQHBsYXRmb3JtcywgInF0IjsKKyAgICB9
IGVsc2lmICgkcGxhdGZvcm0gPX4gL15ndGstLykgeworICAgICAgICBwdXNoIEBwbGF0Zm9ybXMs
ICRwbGF0Zm9ybTsKKyAgICAgICAgcHVzaCBAcGxhdGZvcm1zLCAiZ3RrIjsKICAgICB9IGVsc2Ug
ewogICAgICAgICBAcGxhdGZvcm1zID0gJHBsYXRmb3JtOwogICAgIH0KZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQpp
bmRleCBiOWI4MjhkM2JkNGU4MGIzMmEzZjZkMTI3ZTNmODhjNDU3ZjA0ZDcyLi5hYTA2YzNmZTJj
ZjljZDRlM2FhMTMyZTBlOWJlNDM3MjRmOWY2MGQ5IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdGRpcnMucG0KKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCkBAIC02Mjgs
MTIgKzYyOCwxNyBAQCBzdWIgYnVpbHREeWxpYlBhdGhGb3JOYW1lCiAgICAgICAgIHJldHVybiAi
JGNvbmZpZ3VyYXRpb25Qcm9kdWN0RGlyL2xpYnd4d2Via2l0LmR5bGliIjsKICAgICB9CiAgICAg
aWYgKGlzR3RrKCkpIHsKLSAgICAgICAgbXkgJGxpYnJhcnlEaXIgPSAiJGNvbmZpZ3VyYXRpb25Q
cm9kdWN0RGlyLy5saWJzLyI7Ci0gICAgICAgIG15ICRleHRlbnNpb24gPSBpc0RhcndpbigpID8g
ImR5bGliIiA6ICJzbyI7Ci0gICAgICAgIGlmICgtZSAkbGlicmFyeURpciAuICJsaWJ3ZWJraXRn
dGstMy4wLiRleHRlbnNpb24iKSB7Ci0gICAgICAgICAgICByZXR1cm4gJGxpYnJhcnlEaXIgLiAi
bGlid2Via2l0Z3RrLTMuMC4kZXh0ZW5zaW9uIjsKKyAgICAgICAgIyBXZWJLaXRHVEsrIGZvciBH
VEsyLCBXZWJLaXRHVEsrIGZvciBHVEszLCBhbmQgV2ViS2l0MiByZXNwZWN0aXZlbHkuCisgICAg
ICAgIG15IEBsaWJyYXJpZXMgPSAoImxpYndlYmtpdGd0ay0xLjAiLCAibGlid2Via2l0Z3RrLTMu
MCIsICJsaWJ3ZWJraXQyZ3RrLTEuMCIpOworICAgICAgICBteSAkZXh0ZW5zaW9uID0gaXNEYXJ3
aW4oKSA/ICIuZHlsaWIiIDogIi5zbyI7CisKKyAgICAgICAgZm9yZWFjaCAoQGxpYnJhcmllcykg
eworICAgICAgICAgICAgbXkgJGxpYnJhcnkgPSAiJGNvbmZpZ3VyYXRpb25Qcm9kdWN0RGlyLy5s
aWJzLyIgLiAkXyAgLiAkZXh0ZW5zaW9uOworICAgICAgICAgICAgaWYgKC1lICRsaWJyYXJ5KSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuICRsaWJyYXJ5OworICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiAkbGlicmFyeURpciAuICJsaWJ3ZWJraXRndGstMS4wLiRleHRl
bnNpb24iOworICAgICAgICByZXR1cm4gIk5vdEZvdW5kIjsKICAgICB9CiAgICAgaWYgKGlzRWZs
KCkpIHsKICAgICAgICAgcmV0dXJuICIkY29uZmlndXJhdGlvblByb2R1Y3REaXIvJGxpYnJhcnlO
YW1lLy4uL1dlYktpdC9saWJld2Via2l0LnNvIjsKQEAgLTE5ODMsNiArMTk4OCwxMiBAQCBzdWIg
cnVuV2ViS2l0VGVzdFJ1bm5lcgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmV0dXJu
IHN5c3RlbSAkd2ViS2l0VGVzdFJ1bm5lclBhdGgsIEBBUkdWOwogICAgICAgICB9CisgICAgfSBl
bHNpZiAoaXNHdGsoKSkgeworICAgICAgICBteSAkcHJvZHVjdERpciA9IHByb2R1Y3REaXIoKTsK
KyAgICAgICAgbXkgJGluamVjdGVkQnVuZGxlUGF0aCA9ICIkcHJvZHVjdERpci9MaWJyYXJpZXMv
LmxpYnMvbGliVGVzdFJ1bm5lckluamVjdGVkQnVuZGxlIjsKKyAgICAgICAgcHJpbnQgIlN0YXJ0
aW5nIFdlYktpdFRlc3RSdW5uZXIgd2l0aCBURVNUX1JVTk5FUl9JTkpFQ1RFRF9CVU5ETEVfRklM
RU5BTUUgc2V0IHRvIHBvaW50IHRvICRpbmplY3RlZEJ1bmRsZVBhdGguXG4iOworICAgICAgICAk
RU5We1RFU1RfUlVOTkVSX0lOSkVDVEVEX0JVTkRMRV9GSUxFTkFNRX0gPSAkaW5qZWN0ZWRCdW5k
bGVQYXRoOworICAgICAgICByZXR1cm4gc3lzdGVtICIkcHJvZHVjdERpci9Qcm9ncmFtcy9XZWJL
aXRUZXN0UnVubmVyIiwgQEFSR1Y7CiAgICAgfQogCiAgICAgcmV0dXJuIDE7CmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dOVW1ha2VmaWxlLmFtIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9HTlVtYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MmM3ODRlZWM3ZDZmNTQxMTQ1MzMw
ZGE4MmRlMWYxZTM5YTg1Y2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9HTlVtYWtlZmlsZS5hbQpAQCAtMCwwICsxLDEyMCBAQAorQlVJTFRfU09VUkNFUyArPSBc
CisJZ2VuZXJhdGUtd2Via2l0dGVzdHJ1bm5lci1mb3J3YXJkaW5nLWhlYWRlcnMKKworZ2VuZXJh
dGUtd2Via2l0dGVzdHJ1bm5lci1mb3J3YXJkaW5nLWhlYWRlcnM6ICQoV2ViS2l0MikvU2NyaXB0
cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwgJChQcm9ncmFtc19XZWJLaXRUZXN0UnVu
bmVyX1NPVVJDRVMpCisJJChBTV9WX0dFTikkKFBFUkwpICQ8ICQoc3JjZGlyKS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyICQoR0VOU09VUkNFU19XRUJLSVQyKS9pbmNsdWRlIGd0aworCSQoQU1fVl9H
RU4pJChQRVJMKSAkPCAkKHNyY2RpcikvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lciAkKEdFTlNPVVJD
RVNfV0VCS0lUMikvaW5jbHVkZSBzb3VwCisKK25vaW5zdF9QUk9HUkFNUyArPSBcCisJUHJvZ3Jh
bXMvV2ViS2l0VGVzdFJ1bm5lcgorCitQcm9ncmFtc19XZWJLaXRUZXN0UnVubmVyX1NPVVJDRVMg
PSBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvbWFpbi5jcHAgXAorCVRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvZ3RrL1BsYXRmb3JtV2ViVmlld0d0ay5jcHAgXAorCVRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvZ3RrL1Rlc3RDb250cm9sbGVyR3RrLmNwcCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9ndGsvVGVzdEludm9jYXRpb25HdGsuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVy
L1BsYXRmb3JtV2ViVmlldy5oIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0
aW9ucy5oIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBcCisJ
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oIFwKKwlUb29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0SW52b2NhdGlvbi5oCisKK1Byb2dyYW1zX1dlYktpdFRlc3RSdW5uZXJfQ1BQRkxBR1MgPSBc
CisJLWluY2x1ZGUgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyUHJlZml4
LmggXAorCS1JJChzcmNkaXIpL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIgXAorCS1JJCh0b3BfYnVp
bGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvaW5jbHVkZSBcCisJJChnbG9iYWxfY3BwZmxh
Z3MpIFwKKwkkKGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBcCisJJChHTE9CQUxERVBTX0NGTEFH
UykgXAorCSQoQ0FJUk9fQ0ZMQUdTKSBcCisJJChHVEtfQ0ZMQUdTKSBcCisJJChMSUJTT1VQX0NG
TEFHUykKK1Byb2dyYW1zX1dlYktpdFRlc3RSdW5uZXJfQ1hYRkxBR1MgPSAkKGdsb2JhbF9jeHhm
bGFncykKK1Byb2dyYW1zX1dlYktpdFRlc3RSdW5uZXJfQ0ZMQUdTID0gJChnbG9iYWxfY2ZsYWdz
KQorCitQcm9ncmFtc19XZWJLaXRUZXN0UnVubmVyX0xEQUREID0gXAorCWxpYndlYmtpdDJndGst
QFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lP
TkAubGEgXAorCSQoR0xPQkFMREVQU19MSUJTKSBcCisJJChDQUlST19MSUJTKSBcCisJJChHVEtf
TElCUykgXAorCSQoR0xJQl9MSUJTKSBcCisJJChMSUJTT1VQX0xJQlMpIFwKKwkkKEZSRUVUWVBF
X0xJQlMpIFwKKwkkKFdJTk1NX0xJQlMpCisKK1Byb2dyYW1zX1dlYktpdFRlc3RSdW5uZXJfTERG
TEFHUyA9IFwKKwktbm8tZmFzdC1pbnN0YWxsIFwKKwktbm8taW5zdGFsbAorCisjIFRoZSBJbmpl
Y3RlZEJ1bmRsZSBsaWJyYXJ5IGFsbG93cyB0aGUgcmVuZGVyIHByb2Nlc3MgdG8gbG9hZCBoYXJu
ZXNzIGNvZGUuCitub2luc3RfTFRMSUJSQVJJRVMgKz0gTGlicmFyaWVzL2xpYlRlc3RSdW5uZXJJ
bmplY3RlZEJ1bmRsZS5sYQorCitpbmplY3RlZF9idW5kbGVfYnVpbHRfc291cmNlcyA9IFwKKwlE
ZXJpdmVkU291cmNlcy9JbmplY3RlZEJ1bmRsZS9KU0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3Bw
IFwKKwlEZXJpdmVkU291cmNlcy9JbmplY3RlZEJ1bmRsZS9KU0dDQ29udHJvbGxlci5jcHAgXAor
CURlcml2ZWRTb3VyY2VzL0luamVjdGVkQnVuZGxlL0pTTGF5b3V0VGVzdENvbnRyb2xsZXIuY3Bw
CitCVUlMVF9TT1VSQ0VTICs9ICQoaW5qZWN0ZWRfYnVuZGxlX2J1aWx0X3NvdXJjZXMpCisKK0xp
YnJhcmllc19saWJUZXN0UnVubmVySW5qZWN0ZWRCdW5kbGVfbGFfU09VUkNFUyA9IFwKKwkkKGlu
amVjdGVkX2J1bmRsZV9idWlsdF9zb3VyY2VzKSBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9BY3RpdmF0ZUZvbnRzLmggXAorCVRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvSlNXcmFwcGFibGUuaCBcCisJVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9KU1dyYXBwZXIuY3BwIFwKKwlUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0pTV3JhcHBlci5oIFwKKwlU
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xs
ZXIuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXIuaCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9HQ0NvbnRyb2xsZXIuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0dDQ29udHJvbGxlci5oIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL2d0ay9BY3RpdmF0ZUZvbnRzR3RrLmNwcCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9ndGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwIFwKKwlUb29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAg
XAorCVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
Y3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlLmggXAorCVRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGVNYWluLmNwcCBcCisJVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZVBhZ2UuY3BwIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5oIFwKKwlUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcCBcCisJVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCisKK0xpYnJhcmll
c19saWJUZXN0UnVubmVySW5qZWN0ZWRCdW5kbGVfbGFfTERGTEFHUyA9IFwKKwktcnBhdGggJHtz
aGVsbCBwd2R9LyQodG9wX2J1aWxkZGlyKS8uLi91bml4L1Rlc3ROZXRzY2FwZVBsdWdpbi8ubGli
cyBcCisJJChub191bmRlZmluZWQpIFwKKwktYXZvaWQtdmVyc2lvbiBcCisJLW1vZHVsZQorCitM
aWJyYXJpZXNfbGliVGVzdFJ1bm5lckluamVjdGVkQnVuZGxlX2xhX0NQUEZMQUdTID0gXAorCS1E
Rk9OVFNfQ09ORl9ESVI9XCIke3NoZWxsIHB3ZH0vJHtzcmNkaXJ9L1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2d0ay9mb250c1wiIFwKKwktaW5jbHVkZSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktp
dFRlc3RSdW5uZXJQcmVmaXguaCBcCisJLUkkKHNyY2RpcikvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ciBcCisJLUkkKHNyY2RpcikvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZSBc
CisJLUkkKHNyY2RpcikvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5k
aW5ncyBcCisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvSW5qZWN0ZWRCdW5kbGUg
XAorCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvaW5jbHVkZSBcCisJ
JChnbG9iYWxfY3BwZmxhZ3MpIFwKKwkkKGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBcCisJJChH
TE9CQUxERVBTX0NGTEFHUykgXAorCSQoQ0FJUk9fQ0ZMQUdTKSBcCisJJChHTElCX0NGTEFHUykg
XAorCSQoR1RLX0NGTEFHUykgXAorCSQoTElCU09VUF9DRkxBR1MpCitMaWJyYXJpZXNfbGliVGVz
dFJ1bm5lckluamVjdGVkQnVuZGxlX2xhX0NYWEZMQUdTID0gJChnbG9iYWxfY3h4ZmxhZ3MpCitM
aWJyYXJpZXNfbGliVGVzdFJ1bm5lckluamVjdGVkQnVuZGxlX2xhX0NGTEFHUyA9ICQoZ2xvYmFs
X2NmbGFncykKKworY29kZV9nZW5lcmF0aW9uX2RlcGVuZGVuY2llcyA9IFwKKwlUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVu
bmVyLnBtIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3Iu
cG0gXAorCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtIFwKKwlT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFN0cnVjdHVyZS5wbSBcCisJU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JbkZpbGVzUGFyc2VyLnBtIFwKKwlTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsCisKK0Rlcml2ZWRTb3Vy
Y2VzL0luamVjdGVkQnVuZGxlL0pTJS5jcHA6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvQmluZGluZ3MvJS5pZGwgJChjb2RlX2dlbmVyYXRpb25fZGVwZW5kZW5jaWVzKQor
CSQoQU1fVl9HRU4pJChQRVJMKSBcCisJCS1JICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzIFwKKwkJLUkgJChzcmNkaXIpL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvQmluZGluZ3MgXAorCQkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCBcCisJCS0tZGVmaW5lcyBcIlwiIC0tZ2Vu
ZXJhdG9yIFRlc3RSdW5uZXIgXAorCQktLWluY2x1ZGUgJChzcmNkaXIpL1Rvb2xzL0luamVjdGVk
QnVuZGxlL0JpbmRpbmdzIFwKKwkJLS1vdXRwdXREaXIgJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRT
b3VyY2VzL0luamVjdGVkQnVuZGxlIFwKKwkJJDwKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAppbmRl
eCA2MGZlYzExNmY0NDQxNWVlOWRhODI0NTA3ZWE1Yzk3ZTIwOTcwYzljLi4zMzU4MzZjYTcwMDc0
Mzc4YzM5MmVlMGQyMWNmY2M3MDczNGNmN2FkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmgKKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCkBA
IC00MCw2ICs0MCw4IEBAIHR5cGVkZWYgVUlOVF9QVFIgUGxhdGZvcm1UaW1lclJlZjsKICNlbGlm
IFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPFFUaW1lcj4KIHR5cGVkZWYgUVRpbWVyIFBsYXRmb3Jt
VGltZXJSZWY7CisjZWxpZiBQTEFURk9STShHVEspCit0eXBlZGVmIHVuc2lnbmVkIGludCBQbGF0
Zm9ybVRpbWVyUmVmOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXVFIgewpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9ndGsvQWN0aXZhdGVGb250c0d0ay5j
cHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9BY3RpdmF0ZUZv
bnRzR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOGEzYjQ2MDA2NTEyZTY4NTI3YTFiYWNiYjA2NGI5NmZj
NWE4MWRkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9ndGsvQWN0aXZhdGVGb250c0d0ay5jcHAKQEAgLTAsMCArMSwxNzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMu
TC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWN0aXZhdGVGb250cy5oIgorCisjaW5j
bHVkZSA8Zm9udGNvbmZpZy9mb250Y29uZmlnLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKworbmFtZXNwYWNlIFdUUiB7CisKK3ZvaWQg
aW5pdGlhbGl6ZUd0a1NldHRpbmdzKCkKK3sKKyAgICBHdGtTZXR0aW5ncyogc2V0dGluZ3MgPSBn
dGtfc2V0dGluZ3NfZ2V0X2RlZmF1bHQoKTsKKyAgICBpZiAoIXNldHRpbmdzKQorICAgICAgICBy
ZXR1cm47CisgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAKKyAgICAgICAgICAgICAgICAgImd0
ay14ZnQtZHBpIiwgOTgzMDQsCisgICAgICAgICAgICAgICAgICJndGsteGZ0LWFudGlhbGlhcyIs
IDEsCisgICAgICAgICAgICAgICAgICJndGsteGZ0LWhpbnRpbmciLCAwLAorICAgICAgICAgICAg
ICAgICAiZ3RrLWZvbnQtbmFtZSIsICJMaWJlcmF0aW9uIFNhbnMgMTIiLAorICAgICAgICAgICAg
ICAgICAiZ3RrLXRoZW1lLW5hbWUiLCAiUmFsZWlnaCIsCisgICAgICAgICAgICAgICAgICJndGst
eGZ0LXJnYmEiLCAibm9uZSIsIE5VTEwpOworfQorCit2b2lkIGluaXRpdGlhbGl6ZUZvbnRDb25m
aWdTZXR0aW5nKCkKK3sKKyAgICBGY0luaXQoKTsKKworICAgIC8vIElmIGEgdGVzdCByZXN1bHRl
ZCBhIGZvbnQgYmVpbmcgYWRkZWQgb3IgcmVtb3ZlZCB2aWEgdGhlIEBmb250LWZhY2UgcnVsZSwg
dGhlbgorICAgIC8vIHdlIHdhbnQgdG8gcmVzZXQgdGhlIEZvbnRDb25maWcgY29uZmlndXJhdGlv
biB0byBwcmV2ZW50IGl0IGZyb20gYWZmZWN0aW5nIG90aGVyIHRlc3RzLgorICAgIHN0YXRpYyBp
bnQgbnVtRm9udHMgPSAwOworICAgIEZjRm9udFNldCogYXBwRm9udFNldCA9IEZjQ29uZmlnR2V0
Rm9udHMoMCwgRmNTZXRBcHBsaWNhdGlvbik7CisgICAgaWYgKGFwcEZvbnRTZXQgJiYgbnVtRm9u
dHMgJiYgYXBwRm9udFNldC0+bmZvbnQgPT0gbnVtRm9udHMpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIExvYWQgb3VyIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2hpY2ggc2V0cyB1cCBwcm9wZXIg
YWxpYXNlcyBmb3IgZmFtaWx5CisgICAgLy8gbmFtZXMgbGlrZSBzYW5zLCBzZXJpZiBhbmQgbW9u
b3NwYWNlLgorICAgIEZjQ29uZmlnKiBjb25maWcgPSBGY0NvbmZpZ0NyZWF0ZSgpOworICAgIEdP
d25QdHI8Z2NoYXI+IGZvbnRDb25maWdGaWxlbmFtZShnX2J1aWxkX2ZpbGVuYW1lKEZPTlRTX0NP
TkZfRElSLCAiZm9udHMuY29uZiIsIE5VTEwpKTsKKyAgICBpZiAoIWdfZmlsZV90ZXN0KGZvbnRD
b25maWdGaWxlbmFtZS5nZXQoKSwgR19GSUxFX1RFU1RfSVNfUkVHVUxBUikpCisgICAgICAgIGdf
ZXJyb3IoIkNhbm5vdCBmaW5kIGZvbnRzLmNvbmYgYXQgJXNcbiIsIGZvbnRDb25maWdGaWxlbmFt
ZS5nZXQoKSk7CisgICAgaWYgKCFGY0NvbmZpZ1BhcnNlQW5kTG9hZChjb25maWcsIHJlaW50ZXJw
cmV0X2Nhc3Q8RmNDaGFyOCo+KGZvbnRDb25maWdGaWxlbmFtZS5nZXQoKSksIHRydWUpKQorICAg
ICAgICBnX2Vycm9yKCJDb3VsZG4ndCBsb2FkIGZvbnQgY29uZmlndXJhdGlvbiBmaWxlIGZyb206
ICVzIiwgZm9udENvbmZpZ0ZpbGVuYW1lLmdldCgpKTsKKworICAgIHN0YXRpYyBjb25zdCBjaGFy
ICpjb25zdCBmb250UGF0aHNbXVsyXSA9IHsKKyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy90
cnVldHlwZS90dGYtbGliZXJhdGlvbi9MaWJlcmF0aW9uTW9uby1Cb2xkSXRhbGljLnR0ZiIsCisg
ICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvbGliZXJhdGlvbi9MaWJlcmF0aW9uTW9uby1Cb2xk
SXRhbGljLnR0ZiIsIH0sCisgICAgICAgIHsgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRm
LWxpYmVyYXRpb24vTGliZXJhdGlvbk1vbm8tQm9sZC50dGYiLAorICAgICAgICAgICIvdXNyL3No
YXJlL2ZvbnRzL2xpYmVyYXRpb24vTGliZXJhdGlvbk1vbm8tQm9sZC50dGYiLCB9LAorICAgICAg
ICB7ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1saWJlcmF0aW9uL0xpYmVyYXRpb25N
b25vLUl0YWxpYy50dGYiLAorICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL2xpYmVyYXRpb24v
TGliZXJhdGlvbk1vbm8tSXRhbGljLnR0ZiIsIH0sCisgICAgICAgIHsgIi91c3Ivc2hhcmUvZm9u
dHMvdHJ1ZXR5cGUvdHRmLWxpYmVyYXRpb24vTGliZXJhdGlvbk1vbm8tUmVndWxhci50dGYiLAor
ICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL2xpYmVyYXRpb24vTGliZXJhdGlvbk1vbm8tUmVn
dWxhci50dGYiLCB9LAorICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1s
aWJlcmF0aW9uL0xpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMudHRmIiwKKyAgICAgICAgICAiL3Vz
ci9zaGFyZS9mb250cy9saWJlcmF0aW9uL0xpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMudHRmIiwg
fSwKKyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtbGliZXJhdGlvbi9M
aWJlcmF0aW9uU2Fucy1Cb2xkLnR0ZiIsCisgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvbGli
ZXJhdGlvbi9MaWJlcmF0aW9uU2Fucy1Cb2xkLnR0ZiIsIH0sCisgICAgICAgIHsgIi91c3Ivc2hh
cmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWxpYmVyYXRpb24vTGliZXJhdGlvblNhbnMtSXRhbGljLnR0
ZiIsCisgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvbGliZXJhdGlvbi9MaWJlcmF0aW9uU2Fu
cy1JdGFsaWMudHRmIiwgfSwKKyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90
dGYtbGliZXJhdGlvbi9MaWJlcmF0aW9uU2Fucy1SZWd1bGFyLnR0ZiIsCisgICAgICAgICAgIi91
c3Ivc2hhcmUvZm9udHMvbGliZXJhdGlvbi9MaWJlcmF0aW9uU2Fucy1SZWd1bGFyLnR0ZiIsIH0s
CisgICAgICAgIHsgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWxpYmVyYXRpb24vTGli
ZXJhdGlvblNlcmlmLUJvbGRJdGFsaWMudHRmIiwKKyAgICAgICAgICAiL3Vzci9zaGFyZS9mb250
cy9saWJlcmF0aW9uL0xpYmVyYXRpb25TZXJpZi1Cb2xkSXRhbGljLnR0ZiIsIH0sCisgICAgICAg
IHsgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWxpYmVyYXRpb24vTGliZXJhdGlvblNl
cmlmLUJvbGQudHRmIiwKKyAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy9saWJlcmF0aW9uL0xp
YmVyYXRpb25TZXJpZi1Cb2xkLnR0ZiIsIH0sCisgICAgICAgIHsgIi91c3Ivc2hhcmUvZm9udHMv
dHJ1ZXR5cGUvdHRmLWxpYmVyYXRpb24vTGliZXJhdGlvblNlcmlmLUl0YWxpYy50dGYiLAorICAg
ICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL2xpYmVyYXRpb24vTGliZXJhdGlvblNlcmlmLUl0YWxp
Yy50dGYiLCB9LAorICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1saWJl
cmF0aW9uL0xpYmVyYXRpb25TZXJpZi1SZWd1bGFyLnR0ZiIsCisgICAgICAgICAgIi91c3Ivc2hh
cmUvZm9udHMvbGliZXJhdGlvbi9MaWJlcmF0aW9uU2VyaWYtUmVndWxhci50dGYiLCB9LAorICAg
ICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1kZWphdnUvRGVqYVZ1U2Fucy50
dGYiLAorICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL2RlamF2dS9EZWphVnVTYW5zLnR0ZiIs
IH0sCisgICAgICAgIHsgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWRlamF2dS9EZWph
VnVTZXJpZi50dGYiLAorICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL2RlamF2dS9EZWphVnVT
ZXJpZi50dGYiLCB9LAorCisgICAgICAgIC8vIE1hdGhNTCB0ZXN0cyByZXF1aXJlIHRoZSBTVElY
IGZvbnRzLgorICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRzL29wZW50eXBlL3N0aXgvU1RJWEdl
bmVyYWwub3RmIiwKKyAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy9zdGl4L1NUSVhHZW5lcmFs
Lm90ZiIgfSwKKyAgICAgICAgeyAiL3Vzci9zaGFyZS9mb250cy9vcGVudHlwZS9zdGl4L1NUSVhH
ZW5lcmFsQm9sSXRhLm90ZiIsCisgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvc3RpeC9TVElY
R2VuZXJhbEJvbEl0YS5vdGYiIH0sCisgICAgICAgIHsgIi91c3Ivc2hhcmUvZm9udHMvb3BlbnR5
cGUvc3RpeC9TVElYR2VuZXJhbEJvbC5vdGYiLAorICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRz
L3N0aXgvU1RJWEdlbmVyYWxCb2wub3RmIiB9LAorICAgICAgICB7ICIvdXNyL3NoYXJlL2ZvbnRz
L29wZW50eXBlL3N0aXgvU1RJWEdlbmVyYWxJdGFsaWMub3RmIiwKKyAgICAgICAgICAiL3Vzci9z
aGFyZS9mb250cy9zdGl4L1NUSVhHZW5lcmFsSXRhbGljLm90ZiIgfQorICAgIH07CisKKyAgICAv
LyBUT0RPOiBTb21lIHRlc3RzIHVzZSBMdWNpZGEuIFdlIHNob3VsZCBsb2FkIHRoZXNlIGFzIHdl
bGwsIG9uY2UgaXQgYmVjb21lcworICAgIC8vIGNsZWFyIGhvdyB0byBpbnN0YWxsIHRoZXNlIGZv
bnRzIGVhc2lseSBvbiBGZWRvcmEuCisgICAgZm9yIChzaXplX3QgZm9udCA9IDA7IGZvbnQgPCBH
X05fRUxFTUVOVFMoZm9udFBhdGhzKTsgZm9udCsrKSB7CisgICAgICAgIGJvb2wgZm91bmQgPSBm
YWxzZTsKKyAgICAgICAgZm9yIChzaXplX3QgcGF0aCA9IDA7IHBhdGggPCAyOyBwYXRoKyspIHsK
KworICAgICAgICAgICAgaWYgKGdfZmlsZV90ZXN0KGZvbnRQYXRoc1tmb250XVtwYXRoXSwgR19G
SUxFX1RFU1RfRVhJU1RTKSkgeworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBpZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUoY29uZmlnLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IEZjQ2hhcjgqPihmb250UGF0aHNbZm9udF1bcGF0aF0pKSkKKyAgICAgICAg
ICAgICAgICAgICAgZ19lcnJvcigiQ291bGQgbm90IGxvYWQgZm9udCBhdCAlcyEiLCBmb250UGF0
aHNbZm9udF1bcGF0aF0pOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZvdW5k
KQorICAgICAgICAgICAgZ19lcnJvcigiQ291bGQgbm90IGZpbmQgZm9udCBhdCAlcy4gRWl0aGVy
IGluc3RhbGwgdGhpcyBmb250IG9yIGZpbGUgYSBidWcgIgorICAgICAgICAgICAgICAgICAgICAi
YXQgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZyBpZiBpdCBpcyBpbnN0YWxsZWQgaW4gYW5vdGhlciBs
b2NhdGlvbi4iLAorICAgICAgICAgICAgICAgICAgICBmb250UGF0aHNbZm9udF1bMF0pOworICAg
IH0KKworICAgIC8vIEFoZW0gaXMgdXNlZCBieSBtYW55IGxheW91dCB0ZXN0cy4KKyAgICBHT3du
UHRyPGdjaGFyPiBhaGVtRm9udEZpbGVuYW1lKGdfYnVpbGRfZmlsZW5hbWUoRk9OVFNfQ09ORl9E
SVIsICJBSEVNX19fXy5UVEYiLCBOVUxMKSk7CisgICAgaWYgKCFGY0NvbmZpZ0FwcEZvbnRBZGRG
aWxlKGNvbmZpZywgcmVpbnRlcnByZXRfY2FzdDxGY0NoYXI4Kj4oYWhlbUZvbnRGaWxlbmFtZS5n
ZXQoKSkpKQorICAgICAgICBnX2Vycm9yKCJDb3VsZCBub3QgbG9hZCBmb250IGF0ICVzISIsIGFo
ZW1Gb250RmlsZW5hbWUuZ2V0KCkpOyAKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmb250Rmls
ZW5hbWVzW10gPSB7CisgICAgICAgICJDb2xvckJpdHMudHRmIiwKKyAgICAgICAgIldlYktpdFdl
aWdodFdhdGNoZXIxMDAudHRmIiwKKyAgICAgICAgIldlYktpdFdlaWdodFdhdGNoZXIyMDAudHRm
IiwKKyAgICAgICAgIldlYktpdFdlaWdodFdhdGNoZXIzMDAudHRmIiwKKyAgICAgICAgIldlYktp
dFdlaWdodFdhdGNoZXI0MDAudHRmIiwKKyAgICAgICAgIldlYktpdFdlaWdodFdhdGNoZXI1MDAu
dHRmIiwKKyAgICAgICAgIldlYktpdFdlaWdodFdhdGNoZXI2MDAudHRmIiwKKyAgICAgICAgIldl
YktpdFdlaWdodFdhdGNoZXI3MDAudHRmIiwKKyAgICAgICAgIldlYktpdFdlaWdodFdhdGNoZXI4
MDAudHRmIiwKKyAgICAgICAgIldlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmIiwKKyAgICAgICAg
MAorICAgIH07CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgZm9udEZpbGVuYW1lc1tpXTsgKytp
KSB7CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IGZvbnRGaWxlbmFtZShnX2J1aWxkX2ZpbGVuYW1l
KEZPTlRTX0NPTkZfRElSLCAiLi4iLCAiLi4iLCAiZm9udHMiLCBmb250RmlsZW5hbWVzW2ldLCBO
VUxMKSk7CisgICAgICAgIGlmICghRmNDb25maWdBcHBGb250QWRkRmlsZShjb25maWcsIHJlaW50
ZXJwcmV0X2Nhc3Q8RmNDaGFyOCo+KGZvbnRGaWxlbmFtZS5nZXQoKSkpKQorICAgICAgICAgICAg
Z19lcnJvcigiQ291bGQgbm90IGxvYWQgZm9udCBhdCAlcyEiLCBmb250RmlsZW5hbWUuZ2V0KCkp
OyAKKyAgICB9CisKKyAgICAvLyBBIGZvbnQgd2l0aCBubyB2YWxpZCBGb250Y29uZmlnIGVuY29k
aW5nIHRvIHRlc3QgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NDUy
CisgICAgR093blB0cjxnY2hhcj4gZm9udFdpdGhOb1ZhbGlkRW5jb2RpbmdGaWxlbmFtZShnX2J1
aWxkX2ZpbGVuYW1lKEZPTlRTX0NPTkZfRElSLCAiRm9udFdpdGhOb1ZhbGlkRW5jb2RpbmcuZm9u
IiwgTlVMTCkpOworICAgIGlmICghRmNDb25maWdBcHBGb250QWRkRmlsZShjb25maWcsIHJlaW50
ZXJwcmV0X2Nhc3Q8RmNDaGFyOCo+KGZvbnRXaXRoTm9WYWxpZEVuY29kaW5nRmlsZW5hbWUuZ2V0
KCkpKSkKKyAgICAgICAgZ19lcnJvcigiQ291bGQgbm90IGxvYWQgZm9udCBhdCAlcyEiLCBmb250
V2l0aE5vVmFsaWRFbmNvZGluZ0ZpbGVuYW1lLmdldCgpKTsgCisKKyAgICBpZiAoIUZjQ29uZmln
U2V0Q3VycmVudChjb25maWcpKQorICAgICAgICBnX2Vycm9yKCJDb3VsZCBub3Qgc2V0IHRoZSBj
dXJyZW50IGZvbnQgY29uZmlndXJhdGlvbiEiKTsKKworICAgIG51bUZvbnRzID0gRmNDb25maWdH
ZXRGb250cyhjb25maWcsIEZjU2V0QXBwbGljYXRpb24pLT5uZm9udDsKK30KKwordm9pZCBhY3Rp
dmF0ZUZvbnRzKCkKK3sKKyAgICBpbml0aWFsaXplR3RrU2V0dGluZ3MoKTsKKyAgICBpbml0aXRp
YWxpemVGb250Q29uZmlnU2V0dGluZygpOworfQorCit9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9JbmplY3RlZEJ1bmRsZUd0ay5jcHAgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2d0ay9JbmplY3RlZEJ1bmRsZUd0
ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYmI4MGFlYTFiZDQxMmUxMGM5OTg0NThlYmFiNmI5Y2Y0MDQyNWJi
ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvZ3RrL0luamVjdGVkQnVuZGxlR3RrLmNwcApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKKworbmFtZXNwYWNlIFdUUiB7CisKK3N0YXRp
YyB2b2lkIGxvZ0hhbmRsZXIoY29uc3QgZ2NoYXIqIGRvbWFpbiwgR0xvZ0xldmVsRmxhZ3MgbGV2
ZWwsIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKQoreworICAgIGlmIChsZXZl
bCA8IEdfTE9HX0xFVkVMX0RFQlVHKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBt
ZXNzYWdlKTsKK30KKworCit2b2lkIEluamVjdGVkQnVuZGxlOjpwbGF0Zm9ybUluaXRpYWxpemUo
V0tUeXBlUmVmKQoreworICAgIC8vIFNvbWUgcGx1Z2lucyBtaWdodCB0cnkgdG8gdXNlIHRoZSBH
TGliIGxvZ2dlciBmb3IgcHJpbnRpbmcgZGVidWcgbWVzc2FnZXMuIFRoaXMKKyAgICAvLyB3aWxs
IGNhdXNlIHRlc3RzIHRvIGZhaWwgYmVjYXVzZSBvZiB1bmV4cGVjdGVkIG91dHB1dC4gV2Ugc3F1
ZWxjaCBhbGwgZGVidWcKKyAgICAvLyBtZXNzYWdlcyBzZW50IHRvIHRoZSBsb2dnZXIuCisgICAg
Z19sb2dfc2V0X2RlZmF1bHRfaGFuZGxlcihsb2dIYW5kbGVyLCAwKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOTA2ZDdhYjNlZTI3YzI1ZTc4OGU1NmJiMzliNzhlMWVlNjFjNmIyMgotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZ3RrL0xheW91
dFRlc3RDb250cm9sbGVyR3RrLmNwcApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkluamVjdGVkQnVuZGxl
LmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorCituYW1lc3BhY2UgV1RSIHsKKworc3RhdGljIGdib29s
ZWFuIHdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyQ2FsbGJhY2soZ3BvaW50ZXIpCit7CisgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPndhaXRUb0R1bXBX
YXRjaGRvZ1RpbWVyRmlyZWQoKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCit7CisgICAgbV93YWl0VG9EdW1w
V2F0Y2hkb2dUaW1lciA9IDA7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmludmFs
aWRhdGVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcigpCit7CisgICAgaWYgKCFtX3dhaXRUb0R1bXBX
YXRjaGRvZ1RpbWVyKQorICAgICAgICByZXR1cm47CisgICAgZ19zb3VyY2VfcmVtb3ZlKG1fd2Fp
dFRvRHVtcFdhdGNoZG9nVGltZXIpOworICAgIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIgPSAw
OworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplV2FpdFRvRHVtcFdh
dGNoZG9nVGltZXJJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fd2FpdFRvRHVtcFdhdGNoZG9nVGlt
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIgPSBn
X3RpbWVvdXRfYWRkKHdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVySW50ZXJ2YWwgKiAxMDAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRUb0R1bXBXYXRj
aGRvZ1RpbWVyQ2FsbGJhY2ssIDApOworfQorCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2UoSlNTdHJpbmdSZWYgdXJsKQor
eworICAgIHJldHVybiBKU1N0cmluZ1JldGFpbih1cmwpOyAKK30KKworCit9IC8vIG5hbWVzcGFj
ZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3
LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCmluZGV4IDk3Mzlk
NDIxNzk5OTU5ZTg1M2U4YjRkZjcyMGNkZDMyOTM3OTg4ZGIuLmNiYzQ4ZTQ5NTgwMDlmNTU5Mzdh
OGIzZjE4ZjgzNmU5NGJiNTdiNDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
UGxhdGZvcm1XZWJWaWV3LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdl
YlZpZXcuaApAQCAtNDYsNiArNDYsMTAgQEAgdHlwZWRlZiBOU1dpbmRvdyogUGxhdGZvcm1XaW5k
b3c7CiAjZWxpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMikKIHR5cGVkZWYgV0tW
aWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBIV05EIFBsYXRmb3JtV2luZG93OworI2Vs
aWYgZGVmaW5lZChCVUlMRElOR19HVEtfXykKK3R5cGVkZWYgc3RydWN0IF9HdGtXaWRnZXQgR3Rr
V2lkZ2V0OwordHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1XS1ZpZXc7Cit0eXBlZGVmIEd0a1dp
ZGdldCogUGxhdGZvcm1XaW5kb3c7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdUUiB7CmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9QbGF0Zm9ybVdlYlZpZXdHdGsuY3BwIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvUGxhdGZvcm1XZWJWaWV3R3RrLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wOGYwODU3NjEwZjUxODFkOTc1N2Q3YWRiM2E5OTU0MTNiMWU4NWQ1Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvUGxhdGZvcm1XZWJWaWV3R3RrLmNw
cApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBv
ZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNw
YWNlIFdUUiB7CisKK1BsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLQ29udGV4dFJl
ZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXApCisgICAgOiBtX3ZpZXcoV0tWaWV3
Q3JlYXRlKGNvbnRleHQsIHBhZ2VHcm91cCkpCisgICAgLCBtX3dpbmRvdyhndGtfd2luZG93X25l
dyhHVEtfV0lORE9XX1BPUFVQKSkKK3sKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJ
TkVSKG1fd2luZG93KSwgV0tWaWV3R2V0V2luZG93KG1fdmlldykpOworCisgICAgR3RrQWxsb2Nh
dGlvbiBzaXplID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxv
Y2F0ZShtX3dpbmRvdywgJnNpemUpOworICAgIGd0a193aW5kb3dfcmVzaXplKEdUS19XSU5ET1co
bV93aW5kb3cpLCA4MDAsIDYwMCk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbChtX3dpbmRvdyk7
CisKKyAgICB3aGlsZSAoZ3RrX2V2ZW50c19wZW5kaW5nKCkpCisgICAgICAgIGd0a19tYWluX2l0
ZXJhdGlvbigpOworfQorCitQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcoKQorewor
ICAgIGd0a193aWRnZXRfZGVzdHJveShtX3dpbmRvdyk7Cit9CisKK3ZvaWQgUGxhdGZvcm1XZWJW
aWV3OjpyZXNpemVUbyh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQoreworICAgIEd0
a0FsbG9jYXRpb24gc2l6ZSA9IHsgMCwgMCwgd2lkdGgsIGhlaWdodCB9OworICAgIGd0a193aWRn
ZXRfc2l6ZV9hbGxvY2F0ZShtX3dpbmRvdywgJnNpemUpOworICAgIGd0a193aW5kb3dfcmVzaXpl
KEdUS19XSU5ET1cobV93aW5kb3cpLCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHdoaWxlIChndGtf
ZXZlbnRzX3BlbmRpbmcoKSkKKyAgICAgICAgZ3RrX21haW5faXRlcmF0aW9uKCk7Cit9CisKK1dL
UGFnZVJlZiBQbGF0Zm9ybVdlYlZpZXc6OnBhZ2UoKQoreworICAgIHJldHVybiBXS1ZpZXdHZXRQ
YWdlKG1fdmlldyk7Cit9CisKK3ZvaWQgUGxhdGZvcm1XZWJWaWV3Ojpmb2N1cygpCit7Cit9CisK
K1dLUmVjdCBQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd0ZyYW1lKCkKK3sKKyAgICBHdGtBbGxvY2F0
aW9uIGdlb21ldHJ5OworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgZ2ludCBkZXB0aDsK
KyAgICBnZGtfd2luZG93X2dldF9nZW9tZXRyeShndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJ
REdFVChtX3dpbmRvdykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnZW9tZXRyeS54
LCAmZ2VvbWV0cnkueSwgJmdlb21ldHJ5LndpZHRoLCAmZ2VvbWV0cnkuaGVpZ2h0LCAmZGVwdGgp
OworI2Vsc2UKKyAgICBnZGtfd2luZG93X2dldF9nZW9tZXRyeShndGtfd2lkZ2V0X2dldF93aW5k
b3coR1RLX1dJREdFVChtX3dpbmRvdykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZn
ZW9tZXRyeS54LCAmZ2VvbWV0cnkueSwgJmdlb21ldHJ5LndpZHRoLCAmZ2VvbWV0cnkuaGVpZ2h0
KTsKKyNlbmRpZgorCisgICAgV0tSZWN0IGZyYW1lOworICAgIGZyYW1lLm9yaWdpbi54ID0gZ2Vv
bWV0cnkueDsKKyAgICBmcmFtZS5vcmlnaW4ueSA9IGdlb21ldHJ5Lnk7CisgICAgZnJhbWUuc2l6
ZS53aWR0aCA9IGdlb21ldHJ5LndpZHRoOworICAgIGZyYW1lLnNpemUuaGVpZ2h0ID0gZ2VvbWV0
cnkuaGVpZ2h0OworICAgIHJldHVybiBmcmFtZTsKK30KKwordm9pZCBQbGF0Zm9ybVdlYlZpZXc6
OnNldFdpbmRvd0ZyYW1lKFdLUmVjdCBmcmFtZSkKK3sKKyAgICBndGtfd2luZG93X21vdmUoR1RL
X1dJTkRPVyhtX3dpbmRvdyksIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSk7CisgICAg
cmVzaXplVG8oZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXVFIKKwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsv
VGVzdENvbnRyb2xsZXJHdGsuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVzdENv
bnRyb2xsZXJHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgzYWFlODc1NzMwOGUyNDlmYmFkM2ZmZjhjODk3
MzcxOTczZWU5NmIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2d0
ay9UZXN0Q29udHJvbGxlckd0ay5jcHAKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdUUiB7CisKK3N0YXRpYyBndWludCBnVGlt
ZW91dFNvdXJjZUlkID0gMDsKKworc3RhdGljIHZvaWQgY2FuY2VsVGltZW91dCgpCit7CisgICAg
aWYgKCFnVGltZW91dFNvdXJjZUlkKQorICAgICAgICByZXR1cm47CisgICAgZ19zb3VyY2VfcmVt
b3ZlKGdUaW1lb3V0U291cmNlSWQpOworICAgIGdUaW1lb3V0U291cmNlSWQgPSAwOworfQorCit2
b2lkIFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKCkKK3sKKyAgICBndGtfbWFpbl9xdWl0KCk7
CisgICAgY2FuY2VsVGltZW91dCgpOworfQorCit2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9y
bUluaXRpYWxpemUoKQoreworfQorCitzdGF0aWMgZ2Jvb2xlYW4gdGltZW91dENhbGxiYWNrKGdw
b2ludGVyKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiRkFJTDogVGVzdENvbnRyb2xsZXJSdW5M
b29wIHRpbWVkIG91dC5cbiIpOworICAgIGd0a19tYWluX3F1aXQoKTsKKyAgICByZXR1cm4gRkFM
U0U7Cit9CisKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUnVuVW50aWwoYm9vbCYsIGRv
dWJsZSB0aW1lb3V0KQoreworICAgIGNhbmNlbFRpbWVvdXQoKTsKKyAgICBnVGltZW91dFNvdXJj
ZUlkID0gZ190aW1lb3V0X2FkZCh0aW1lb3V0ICogMTAwMCwgdGltZW91dENhbGxiYWNrLCAwKTsK
KyAgICBndGtfbWFpbigpOworfQorCit2b2lkIFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplSW5q
ZWN0ZWRCdW5kbGVQYXRoKCkKK3sKKyAgICBjb25zdCBjaGFyKiBidW5kbGVQYXRoID0gZ19nZXRl
bnYoIlRFU1RfUlVOTkVSX0lOSkVDVEVEX0JVTkRMRV9GSUxFTkFNRSIpOworICAgIGlmICghYnVu
ZGxlUGF0aCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRFU1RfUlVOTkVSX0lOSkVDVEVE
X0JVTkRMRV9GSUxFTkFNRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBub3QgZm91bmRcbiIpOworICAg
ICAgICBleGl0KDApOworICAgIH0KKworICAgIGdzaXplIGJ5dGVzV3JpdHRlbjsKKyAgICBHT3du
UHRyPGNoYXI+IHV0ZjhCdW5kbGVQYXRoKGdfZmlsZW5hbWVfdG9fdXRmOChidW5kbGVQYXRoLCAt
MSwgMCwgJmJ5dGVzV3JpdHRlbiwgMCkpOworICAgIG1faW5qZWN0ZWRCdW5kbGVQYXRoLmFkb3B0
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHV0ZjhCdW5kbGVQYXRoLmdldCgpKSk7Cit9
CisKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemVUZXN0UGx1Z2luRGlyZWN0b3J5KCkK
K3sKKyAgICAvLyBUaGlzIGlzIGNhbGxlZCBhZnRlciBpbml0aWFsaXplSW5qZWN0ZWRCdW5kbGVQ
YXRoLgorICAgIEFTU0VSVChtX2luamVjdGVkQnVuZGxlUGF0aCk7CisgICAgbV90ZXN0UGx1Z2lu
RGlyZWN0b3J5ID0gbV9pbmplY3RlZEJ1bmRsZVBhdGg7Cit9CisKK3ZvaWQgVGVzdENvbnRyb2xs
ZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKQoreworfQorCit2b2lkIFRlc3RDb250cm9s
bGVyOjpydW5Nb2RhbChQbGF0Zm9ybVdlYlZpZXcqKQoreworICAgIC8vIEZJWE1FOiBOZWVkIHRv
IGltcGxlbWVudCB0aGlzIHRvIHRlc3Qgc2hvd01vZGFsRGlhbG9nLgorfQorCitjb25zdCBjaGFy
KiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1MaWJyYXJ5UGF0aEZvclRlc3RpbmcoKQoreworICAg
IHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RJbnZvY2F0aW9uR3RrLmNwcCBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvZ3RrL1Rlc3RJbnZvY2F0aW9uR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iODUyMGFiYzY5
NDQyNjY3YjdjMTVhZTFmM2VhY2VjOTgzOWNlZmVmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVzdEludm9jYXRpb25HdGsuY3BwCkBAIC0wLDAgKzEsMzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEludm9j
YXRpb24uaCIKKworbmFtZXNwYWNlIFdUUiB7CisKK3ZvaWQgVGVzdEludm9jYXRpb246OmR1bXBQ
aXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKFdLSW1hZ2VSZWYgaW1hZ2UpCit7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsv
bWFpbi5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9tYWluLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lOWE4NDM5NmE2NGI1NGJhMmNlMDY2NzU0OTg2NzliOWNkY2FhMjZlCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvbWFpbi5jcHAKQEAgLTAsMCArMSwzNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgorCitpbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX2luaXQoJmFyZ2MsICZhcmd2KTsK
KyAgICBXVFI6OlRlc3RDb250cm9sbGVyIGNvbnRyb2xsZXIoYXJnYywgY29uc3RfY2FzdDxjb25z
dCBjaGFyKio+KGFyZ3YpKTsKKyAgICByZXR1cm4gMDsKK30K
</data>
<flag name="review"
          id="84157"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>