<?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>135972</bug_id>
          
          <creation_ts>2014-08-15 05:03:12 -0700</creation_ts>
          <short_desc>[GStreamer] unrelated codecs required to play videos</short_desc>
          <delta_ts>2016-05-19 07:33:10 -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>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=140131</see_also>
          <bug_file_loc>https://www.youtube.com/watch?v=LvCW2BTYkeQ</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>147000</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Catanzaro">mcatanzaro</reporter>
          <assigned_to name="Philippe Normand">pnormand</assigned_to>
          <cc>bugzilla</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>j.isorce</cc>
    
    <cc>mario</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>pnormand</cc>
    
    <cc>slomo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1029320</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2014-08-15 05:03:12 -0700</bug_when>
    <thetext>WebKit can&apos;t play videos on youtube.com (or much anywhere else) in Fedora, which only distributes gst-plugins-good and about half of gst-plugins-bad -- therefore we expect playing MP4 videos to not work, but WebM videos to play fine. For example, [1] is available in WebM so it should work, and it plays fine in Firefox, but it does not work in Epiphany. Attempting to play it in Epiphany brings up an unwanted PackageKit dialog that tries to find an appropriate gstreamer plugin, but fails since it does not exist in Fedora. I think this problem will exist in all Red Hat and SUSE distros, and I bet you&apos;ll be able to reproduce on a Debian distro by removing gst-plugins-libav, which I think is the one that handles H.264.

If I remove &quot;video/mp4&quot; from mimeTypeCache() in MediaPlayerPrivateGStreamer.cpp, the video will then play fine. Maybe this list should not be hardcoded, but mapped to the gstreamer plugins that are actually installed.

[1] https://www.youtube.com/watch?v=LvCW2BTYkeQ</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031073</commentid>
    <comment_count>1</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2014-08-25 02:24:35 -0700</bug_when>
    <thetext>This would basically mean reverting http://trac.webkit.org/changeset/117207</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031135</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2014-08-25 06:26:31 -0700</bug_when>
    <thetext>I think so. Thanks for working on this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031141</commentid>
    <comment_count>3</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2014-08-25 07:20:11 -0700</bug_when>
    <thetext>I&apos;m not really enthusiastic about reverting that and reintroducing all these hacks in the code...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031153</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2014-08-25 08:44:55 -0700</bug_when>
    <thetext>Well ideally gstreamer would give us a list of mime types, but that seems unlikely judging from the comments I&apos;ve found at [1].  Probably mapping between capabilities and mime types is what we have to do. :/  (And a hardcoded list of guesses is not really so much less hacky.)

Anything else we can do to make the videos play? We could hardcode a hack for just MP4 and MP3, I suppose. Or we could have separate hardcoded lists of mime types for the codecs provided by the different gst-plugins packages, and try to detect which packages are installed. These don&apos;t seem better to me....

[1] https://bugs.kde.org/show_bug.cgi?id=267319#c25</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052514</commentid>
    <comment_count>5</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2014-12-04 11:13:46 -0800</bug_when>
    <thetext>We could make the mime type list more dynamic relatively easily. Not by reverting that commit though because the original code was as wrong as the current one on that regard.

Instead of looking at typefinders we should use the GstElementFactory API to check:
- for container formats if a demuxer exists
- for codecs if a decoder exists

Remaining question is: What does e.g. &quot;video/mp4&quot; mean? An MP4 container stream... with which codecs? MPEG-4 Part 2? H264? H263? AAC? MP3? ...?

Is there somewhere a definition of what all these mimetypes actually mean in the context of the web, or is there a way to get more details?
I remember that you usually ask if the browser supports e.g. &apos;video/mp4; codecs=&quot;mp4v.20.8&quot;&apos;, is there an extensive list of what is allowed there?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053033</commentid>
    <comment_count>6</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2014-12-06 10:06:08 -0800</bug_when>
    <thetext>Relevant part of the spec:
http://www.w3.org/html/wg/drafts/html/master/embedded-content.html#mime-types

So considering this, I think the best we could do here would be if we could directly override media.canPlayType() with our own implementation instead of just passing a list of mimetypes we might support to the upper layers.

Inside the media.canPlayType() implementation we could then check directly against the available GStreamer plugins and handle missing mime type details accordingly.

For example for
- video/mp4 we could check if: a) a MP4 demuxer is available, b) at least one video or audio decoder for H264, MPEG-4 Part 2, MP3 or AAC is available. Here we would return &quot;maybe&quot;
- video/mp4,codec=mp4v.20.8&quot; check if: a) a MP4 demuxer is available, b) a MPEG-4 Part 2 video decoder is available. Here we can probably return &quot;probably&quot; instead of &quot;maybe&quot; then


Opinions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053034</commentid>
    <comment_count>7</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2014-12-06 10:06:44 -0800</bug_when>
    <thetext>Note that checking these things against the GStreamer registry is fast if that looks like a possible problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053093</commentid>
    <comment_count>8</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2014-12-07 01:10:13 -0800</bug_when>
    <thetext>So we could just reimplement MediaPlayerPrivateGStreamer::supportsType() in a way that always checks against the available element factories, maybe with caching of results if it becomes a bottleneck.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106069</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-07-01 09:08:49 -0700</bug_when>
    <thetext>Since I don&apos;t understand slomo&apos;s proposed fix :), I am thinking as a very quick workaround to just check if the relevant gstreamer plugin exists on the filesystem and add video/mp4 to the list of supported MIME types only if so. I don&apos;t normally like stupid workarounds, but it&apos;s hard to understate how bad &quot;cannot play any videos&quot; is; it makes it impossible to promote WebKitGTK+ in Red Hat land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114033</commentid>
    <comment_count>10</comment_count>
      <attachid>258010</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-08-01 09:50:57 -0700</bug_when>
    <thetext>Created attachment 258010
hack patch, makes YouTube work in Fedora

Obviously not intended for upstream, but this is what I will use in Fedora until this bug can be fixed properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116013</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-08-08 00:11:39 -0700</bug_when>
    <thetext>Example code from Sebastian, for a non-terrible solution to this (I&apos;m posting it here so that I don&apos;t lose it):

GList *decoder_factories, *h264_decoders;
GstCaps *caps;

decoder_factories = gst_element_factory_list_get_elements (GST_ELEMENT_FACTORY_TYPE_DECODER |
        GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO,
        GST_RANK_MARGINAL);

// Repeat this for all caps you care about

caps = gst_caps_new_empty_simple (&quot;video/x-h264&quot;);
h264_decoders = gst_element_factory_list_filter (decoder_factories, caps, GST_PAD_SINK, FALSE);
gst_caps_unref (caps);

if (h264_decoders != NULL) {
  // found h264 decoder
}

gst_plugin_feature_list_free (h264_decoders);

// end repeat

gst_plugin_feature_list_free (decoder_factories);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1117931</commentid>
    <comment_count>12</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2015-08-15 06:45:52 -0700</bug_when>
    <thetext>You&apos;ll also need to somehow clear the mimeType cache whenever a new plugin is installed so the new decoder factories are also checked and the cache correctly represents the list of supported media types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149944</commentid>
    <comment_count>13</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2015-12-17 02:08:45 -0800</bug_when>
    <thetext>For the record, I&apos;m pasting below the patch that I just applied downstream yesterday that is serving us well for the time being in our particular and controlled scenario.

Notice that I&apos;m not asking for review over it, as I understand that solution is not valid for upstream, just sharing in case it&apos;s useful to someone else. That said, if someone wants to take over on making a real patch, or guiding me on what exactly would be a good enough way to do it, I&apos;m happy to help. 

--- a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
+++ b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
@@ -1690,6 +1690,25 @@ void MediaPlayerPrivateGStreamer::loadin
     m_readyTimerHandler.cancel();
 }
 
+static bool gstRegistryHasDecoder(const String&amp; decoder)
+{
+    GList *decoder_factories, *gst_decoders;
+    GstCaps *caps;
+    bool retval;
+
+    decoder_factories = gst_element_factory_list_get_elements (GST_ELEMENT_FACTORY_TYPE_DECODER | GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO, GST_RANK_MARGINAL);
+    caps = gst_caps_new_empty_simple (decoder.utf8().data());
+    gst_decoders = gst_element_factory_list_filter (decoder_factories, caps, GST_PAD_SINK, FALSE);
+    gst_caps_unref (caps);
+
+    retval = gst_decoders != NULL;
+
+    gst_plugin_feature_list_free (gst_decoders);
+    gst_plugin_feature_list_free (decoder_factories);
+
+    return retval;
+}
+
 static HashSet&lt;String&gt; mimeTypeCache()
 {
     initializeGStreamerAndRegisterWebKitElements();
@@ -1768,7 +1787,6 @@ static HashSet&lt;String&gt; mimeTypeCache()
         &quot;video/flv&quot;,
         &quot;video/mj2&quot;,
         &quot;video/mp2t&quot;,
-        &quot;video/mp4&quot;,
         &quot;video/mpeg&quot;,
         &quot;video/mpegts&quot;,
         &quot;video/ogg&quot;,
@@ -1795,6 +1813,15 @@ static HashSet&lt;String&gt; mimeTypeCache()
     for (unsigned i = 0; i &lt; (sizeof(mimeTypes) / sizeof(*mimeTypes)); ++i)
         cache.add(String(mimeTypes[i]));
 
+    if (gstRegistryHasDecoder(String::fromUTF8(&quot;video/x-h264&quot;)))
+        cache.add(String::fromUTF8(&quot;video/mp4&quot;));
+
     typeListInitialized = true;
     return cache;
 }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149969</commentid>
    <comment_count>14</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-12-17 04:46:58 -0800</bug_when>
    <thetext>I think what we want to do is have mimeTypeCache be initially empty, and add each MIME type based on the result of a call to gstRegistryHasDecoder. The problem is, the MIME types (&quot;video/mp4&quot;) are different than the values we must pass to gstRegistryHasDecoder (&quot;video/x-h264&quot;) -- and there&apos;s not even going to be a 1-1 correspondence here, e.g. in Fedora we will be shipping OpenH264, which handles H.264 as used in WebRTC, but cannot be used to play MP4 videos. We also probably don&apos;t want to claim to support MP4 if, for example, we don&apos;t have support for AAC, since we&apos;d get bug reports that videos play without sound, which users will assume to be our fault. (Red Hat is planning to add MP4 support to OpenH264, but I&apos;m not aware of any plans to license AAC, so this will become a practical problem in the near future.)

So we need someone with serious multimedia experience to think about this. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1192282</commentid>
    <comment_count>15</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2016-05-12 02:07:03 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Relevant part of the spec:
&gt; http://www.w3.org/html/wg/drafts/html/master/embedded-content.html#mime-types
&gt; 
&gt; So considering this, I think the best we could do here would be if we could
&gt; directly override media.canPlayType() with our own implementation instead of
&gt; just passing a list of mimetypes we might support to the upper layers.
&gt; 
&gt; Inside the media.canPlayType() implementation we could then check directly
&gt; against the available GStreamer plugins and handle missing mime type details
&gt; accordingly.
&gt; 
&gt; For example for
&gt; - video/mp4 we could check if: a) a MP4 demuxer is available, b) at least
&gt; one video or audio decoder for H264, MPEG-4 Part 2, MP3 or AAC is available.
&gt; Here we would return &quot;maybe&quot;
&gt; - video/mp4,codec=mp4v.20.8&quot; check if: a) a MP4 demuxer is available, b) a
&gt; MPEG-4 Part 2 video decoder is available. Here we can probably return
&gt; &quot;probably&quot; instead of &quot;maybe&quot; then
&gt; 
&gt; Opinions?

I think this is the way to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193069</commentid>
    <comment_count>16</comment_count>
      <attachid>278929</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-05-14 03:53:27 -0700</bug_when>
    <thetext>Created attachment 278929
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193070</commentid>
    <comment_count>17</comment_count>
      <attachid>278930</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-05-14 03:54:32 -0700</bug_when>
    <thetext>Created attachment 278930
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193071</commentid>
    <comment_count>18</comment_count>
      <attachid>278930</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-05-14 04:26:57 -0700</bug_when>
    <thetext>Comment on attachment 278930
patch

I&apos;ll try a variant without the function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193072</commentid>
    <comment_count>19</comment_count>
      <attachid>278931</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-05-14 04:46:14 -0700</bug_when>
    <thetext>Created attachment 278931
patch

Ah well, a function isn&apos;t easy to avoid here :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193081</commentid>
    <comment_count>20</comment_count>
      <attachid>278931</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-14 08:46:37 -0700</bug_when>
    <thetext>Comment on attachment 278931
patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1675
&gt; +            set.add(String::fromUTF8(&quot;video/quicktime&quot;));

This is an inefficient idiom for WebKit.

Each call to HashSet::add is a large amount of inlined code, so it’s not good to have a function that calls it more than a couple times. Instead it’s important to use a loop or non-inlined helper function. That’s why I had changed this into a loop before, so there’s only a single call to add.

To convert a C literal into a string, the thing to use is either ASCIILiteral or the default constructor, each of which will do the correct thing for all ASCII characters. There is no reason to use String::fromUTF8 unless there are non-ASCII characters involved. It’s less efficient. The benefit of using ASCIILiteral is that the code won’t copy all the characters. Another possibility is to use AtomicString; it’s good for long-lived strings that might also appear as HTML attribute values since the string will be re-used whenever the same string occurs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193082</commentid>
    <comment_count>21</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-14 08:48:52 -0700</bug_when>
    <thetext>When I say “use AtomicString”, I don’t mean actually mean we should change the type of the HashSet value to AtomicString, just that we would construct an AtomicString use it as a plain string. This puts it into the AtomicString hash table, which has a cost in memory and slight performance cost since the table is larger, but guarantees we will share the string with any future AtomicString with the same value, which is the associated benefit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193191</commentid>
    <comment_count>22</comment_count>
      <attachid>278931</attachid>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2016-05-15 00:29:46 -0700</bug_when>
    <thetext>Comment on attachment 278931
patch

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

Generally looks good

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1675
&gt;&gt; +            set.add(String::fromUTF8(&quot;video/quicktime&quot;));
&gt; 
&gt; This is an inefficient idiom for WebKit.
&gt; 
&gt; Each call to HashSet::add is a large amount of inlined code, so it’s not good to have a function that calls it more than a couple times. Instead it’s important to use a loop or non-inlined helper function. That’s why I had changed this into a loop before, so there’s only a single call to add.
&gt; 
&gt; To convert a C literal into a string, the thing to use is either ASCIILiteral or the default constructor, each of which will do the correct thing for all ASCII characters. There is no reason to use String::fromUTF8 unless there are non-ASCII characters involved. It’s less efficient. The benefit of using ASCIILiteral is that the code won’t copy all the characters. Another possibility is to use AtomicString; it’s good for long-lived strings that might also appear as HTML attribute values since the string will be re-used whenever the same string occurs.

You could make this some kind of table for the common cases at least (struct { caps; vector&lt;mimetypes&gt; }), but not for all (especially the container-codec relationships). Or add a non-inlineable wrapper function around HashSet::add() so the code is only included once

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1700
&gt; +            set.add(String::fromUTF8(&quot;video/x-m4v&quot;));

This seems weird. Is video/mp4 and video/x-m4v really always h264? Shouldn&apos;t this be more like video/mp4,codec=mp4v.20.8 or so? And you also need qtdemux to be able to play video/mp4, that is application/x-quicktime

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1709
&gt; +        if (gstRegistryHasElementForMediaType(videoDecoderFactories, &quot;video/mpeg, mpegversion=(int)1&quot;))

mpegversion=2 should also be here, they&apos;re almost the same codec. Also systemstream=false if this is about the video codec and not the container

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1710
&gt; +            set.add(String::fromUTF8(&quot;video/mpeg&quot;));

Is this about the container format or the video codec?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1723
&gt; +                set.add(String::fromUTF8(&quot;video/ogg&quot;));

What about Ogg/Opus?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1770
&gt; +            set.add(String::fromUTF8(&quot;audio/x-wavpack-correction&quot;));

We currently don&apos;t really handle correction files

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1790
&gt; +            if (gstRegistryHasElementForMediaType(videoDecoderFactories, &quot;video/x-vp8&quot;) || gstRegistryHasElementForMediaType(videoDecoderFactories, &quot;video/x-vp9&quot;))

vp10?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1793
&gt; +            if (vorbisSupported)

|| opusSupported?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193208</commentid>
    <comment_count>23</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-05-15 07:44:05 -0700</bug_when>
    <thetext>I will just say: it would be really nice if this functionality could live somewhere in GStreamer. It&apos;s inevitably going to grow stale in WebKit when new content types are added in GStreamer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193209</commentid>
    <comment_count>24</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2016-05-15 08:27:16 -0700</bug_when>
    <thetext>Are these mimetypes actually defined in a meaningful way somewhere? But yes, a mimetype&lt;-&gt;caps mapping would be useful to have somewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193572</commentid>
    <comment_count>25</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2016-05-16 15:50:16 -0700</bug_when>
    <thetext>This is great. Thanks Philip for taking this over!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194222</commentid>
    <comment_count>26</comment_count>
      <attachid>278931</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-05-18 05:52:08 -0700</bug_when>
    <thetext>Comment on attachment 278931
patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1675
&gt;&gt;&gt; +            set.add(String::fromUTF8(&quot;video/quicktime&quot;));
&gt;&gt; 
&gt;&gt; This is an inefficient idiom for WebKit.
&gt;&gt; 
&gt;&gt; Each call to HashSet::add is a large amount of inlined code, so it’s not good to have a function that calls it more than a couple times. Instead it’s important to use a loop or non-inlined helper function. That’s why I had changed this into a loop before, so there’s only a single call to add.
&gt;&gt; 
&gt;&gt; To convert a C literal into a string, the thing to use is either ASCIILiteral or the default constructor, each of which will do the correct thing for all ASCII characters. There is no reason to use String::fromUTF8 unless there are non-ASCII characters involved. It’s less efficient. The benefit of using ASCIILiteral is that the code won’t copy all the characters. Another possibility is to use AtomicString; it’s good for long-lived strings that might also appear as HTML attribute values since the string will be re-used whenever the same string occurs.
&gt; 
&gt; You could make this some kind of table for the common cases at least (struct { caps; vector&lt;mimetypes&gt; }), but not for all (especially the container-codec relationships). Or add a non-inlineable wrapper function around HashSet::add() so the code is only included once

Ok I think I managed to simplify this part of the code, thanks for the suggestions :)

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1700
&gt;&gt; +            set.add(String::fromUTF8(&quot;video/x-m4v&quot;));
&gt; 
&gt; This seems weird. Is video/mp4 and video/x-m4v really always h264? Shouldn&apos;t this be more like video/mp4,codec=mp4v.20.8 or so? And you also need qtdemux to be able to play video/mp4, that is application/x-quicktime

m4v seems to be an Apple-specific variant of mp4 with DRM added on top. We can&apos;t add the codec field in the mime-type, this field is checked separately.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1709
&gt;&gt; +        if (gstRegistryHasElementForMediaType(videoDecoderFactories, &quot;video/mpeg, mpegversion=(int)1&quot;))
&gt; 
&gt; mpegversion=2 should also be here, they&apos;re almost the same codec. Also systemstream=false if this is about the video codec and not the container

Ok

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1710
&gt;&gt; +            set.add(String::fromUTF8(&quot;video/mpeg&quot;));
&gt; 
&gt; Is this about the container format or the video codec?

The codec

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1723
&gt;&gt; +                set.add(String::fromUTF8(&quot;video/ogg&quot;));
&gt; 
&gt; What about Ogg/Opus?

I&apos;m not sure what the mime-type should be.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1770
&gt;&gt; +            set.add(String::fromUTF8(&quot;audio/x-wavpack-correction&quot;));
&gt; 
&gt; We currently don&apos;t really handle correction files

Ok I&apos;ll remove this then

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1790
&gt;&gt; +            if (gstRegistryHasElementForMediaType(videoDecoderFactories, &quot;video/x-vp8&quot;) || gstRegistryHasElementForMediaType(videoDecoderFactories, &quot;video/x-vp9&quot;))
&gt; 
&gt; vp10?

Why not :)

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1793
&gt;&gt; +            if (vorbisSupported)
&gt; 
&gt; || opusSupported?

Yep</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194225</commentid>
    <comment_count>27</comment_count>
      <attachid>279237</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-05-18 06:00:13 -0700</bug_when>
    <thetext>Created attachment 279237
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194227</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-18 06:01:55 -0700</bug_when>
    <thetext>Attachment 279237 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1675:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1676:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1677:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1687:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1688:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1693:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1695:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1698:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1699:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1701:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1703:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1705:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1706:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1707:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1708:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1709:  Missing space inside { }.  [whitespace/braces] [5]
Total errors found: 16 in 4 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>1194228</commentid>
    <comment_count>29</comment_count>
      <attachid>279238</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-05-18 06:10:01 -0700</bug_when>
    <thetext>Created attachment 279238
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194286</commentid>
    <comment_count>30</comment_count>
      <attachid>279238</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2016-05-18 09:12:05 -0700</bug_when>
    <thetext>Comment on attachment 279238
patch

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

&gt; Source/WebCore/ChangeLog:24
&gt; +        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
&gt; +        (WebCore::gstRegistryHasElementForMediaType):
&gt; +        * platform/graphics/gstreamer/GStreamerUtilities.h:
&gt; +        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
&gt; +        (WebCore::mimeTypeSet):
&gt; +        (WebCore::MediaPlayerPrivateGStreamer::getSupportedTypes):
&gt; +        (WebCore::MediaPlayerPrivateGStreamer::supportsType):
&gt; +        (WebCore::mimeTypeCache): Deleted.

Nit: I would be a bit more verbose here.

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerUtilities.cpp:189
&gt; +bool gstRegistryHasElementForMediaType(GList* elementFactories, const char* capsString)

Useless complain: this function should be included in GStreamer, it could be more efficient.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1711
&gt; +            {AudioDecoder, &quot;audio/midi&quot;, {&quot;audio/midi&quot;, &quot;audio/riff-midi&quot;}},
&gt; +            {AudioDecoder, &quot;audio/x-sbc&quot;, { }},
&gt; +            {AudioDecoder, &quot;audio/x-sid&quot;, { }},
&gt; +            {AudioDecoder, &quot;audio/x-flac&quot;, {&quot;audio/x-flac&quot;, &quot;audio/flac&quot;}},
&gt; +            {AudioDecoder, &quot;audio/x-wav&quot;, {&quot;audio/x-wav&quot;, &quot;audio/wav&quot;}},
&gt; +            {AudioDecoder, &quot;audio/x-wavpack&quot;, {&quot;audio/x-wavpack&quot;}},
&gt; +            {AudioDecoder, &quot;audio/x-speex&quot;, {&quot;audio/speex&quot;, &quot;audio/x-speex&quot;}},
&gt; +            {AudioDecoder, &quot;audio/x-ac3&quot;, { }},
&gt; +            {AudioDecoder, &quot;audio/x-eac3&quot;, {&quot;audio/x-ac3&quot;}},
&gt; +            {AudioDecoder, &quot;audio/x-dts&quot;, { }},
&gt; +            {VideoDecoder, &quot;video/x-h264, profile=(string)high&quot;, {&quot;video/mp4&quot;, &quot;video/x-m4v&quot;}},
&gt; +            {VideoDecoder, &quot;video/x-msvideocodec&quot;, {&quot;video/x-msvideo&quot;}},
&gt; +            {VideoDecoder, &quot;video/x-h263&quot;, { }},
&gt; +            {VideoDecoder, &quot;video/mpegts&quot;, { }},
&gt; +            {VideoDecoder, &quot;video/mpeg, mpegversion=(int){1,2}, systemstream=(boolean)false&quot;, {&quot;video/mpeg&quot;}},
&gt; +            {VideoDecoder, &quot;video/x-dirac&quot;, { }},
&gt; +            {VideoDecoder, &quot;video/x-flash-video&quot;, {&quot;video/flv&quot;, &quot;video/x-flv&quot;}},
&gt; +            {Demuxer, &quot;video/quicktime&quot;, { }},
&gt; +            {Demuxer, &quot;video/quicktime, variant=(string)3gpp&quot;, {&quot;video/3gpp&quot;}},
&gt; +            {Demuxer, &quot;application/x-3gp&quot;, { }},
&gt; +            {Demuxer, &quot;video/x-ms-asf&quot;, { }},
&gt; +            {Demuxer, &quot;audio/x-aiff&quot;, { }},
&gt; +            {Demuxer, &quot;application/x-pn-realaudio&quot;, { }},
&gt; +            {Demuxer, &quot;application/vnd.rn-realmedia&quot;, { }},
&gt; +            {Demuxer, &quot;audio/x-wav&quot;, {&quot;audio/x-wav&quot;, &quot;audio/wav&quot;}},
&gt; +            {Demuxer, &quot;application/x-hls&quot;, {&quot;application/vnd.apple.mpegurl&quot;, &quot;application/x-mpegurl&quot;}}

Nit: I haven&apos;t checked in other parts of WK, but I would write these as:

{ Demuxer, &quot;application/x-hls&quot;, { &quot;application/vnd.apple.mpegurl&quot;, &quot;application/x-mpegurl&quot; } }

If I am contradicting any other coding style, feel free to ignore me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194287</commentid>
    <comment_count>31</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2016-05-18 09:14:22 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; Comment on attachment 279238 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=279238&amp;action=review

Btw, all these comments are just nits, no need to wait for any green light from me or anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194713</commentid>
    <comment_count>32</comment_count>
      <attachid>279238</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-05-19 04:05:01 -0700</bug_when>
    <thetext>Comment on attachment 279238
patch

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

&gt;&gt; Source/WebCore/ChangeLog:24
&gt;&gt; +        (WebCore::mimeTypeCache): Deleted.
&gt; 
&gt; Nit: I would be a bit more verbose here.

Okey dokey!

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerUtilities.cpp:189
&gt;&gt; +bool gstRegistryHasElementForMediaType(GList* elementFactories, const char* capsString)
&gt; 
&gt; Useless complain: this function should be included in GStreamer, it could be more efficient.

More efficient?
I don&apos;t know, to be honest. It&apos;s a bit weird to pass a GList* parameter like this usually in GStreamer no? I did it like this so that the factories are initialized/freed once only, in contrast with the first version of this patch.
For now I think it&apos;s fine to have this code in WebKit instead of GStreamer :)

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1711
&gt;&gt; +            {Demuxer, &quot;application/x-hls&quot;, {&quot;application/vnd.apple.mpegurl&quot;, &quot;application/x-mpegurl&quot;}}
&gt; 
&gt; Nit: I haven&apos;t checked in other parts of WK, but I would write these as:
&gt; 
&gt; { Demuxer, &quot;application/x-hls&quot;, { &quot;application/vnd.apple.mpegurl&quot;, &quot;application/x-mpegurl&quot; } }
&gt; 
&gt; If I am contradicting any other coding style, feel free to ignore me.

The style bot didn&apos;t complain so I think I&apos;ll leave this as it is ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194716</commentid>
    <comment_count>33</comment_count>
      <attachid>279379</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-05-19 04:13:19 -0700</bug_when>
    <thetext>Created attachment 279379
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194755</commentid>
    <comment_count>34</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-05-19 07:33:10 -0700</bug_when>
    <thetext>Committed r201163: &lt;http://trac.webkit.org/changeset/201163&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258010</attachid>
            <date>2015-08-01 09:50:57 -0700</date>
            <delta_ts>2016-05-14 03:53:27 -0700</delta_ts>
            <desc>hack patch, makes YouTube work in Fedora</desc>
            <filename>0001-Make-YouTube-videos-work.patch</filename>
            <type>text/plain</type>
            <size>1550</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">RnJvbSAwNzA5NjEwY2IxZTMxN2Q5ZWU3NWYyMDlhNjJiYzVmMDVhM2IzNjI5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWNoYWVsIENhdGFuemFybyA8bWNhdGFuemFyb0BpZ2FsaWEu
Y29tPgpEYXRlOiBTYXQsIDEgQXVnIDIwMTUgMTE6NDk6MjkgLTA1MDAKU3ViamVjdDogW1BBVENI
XSBNYWtlIFlvdVR1YmUgdmlkZW9zIHdvcmsKCi0tLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwICB8IDkgKysrKysrKystCiAx
IGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCA4OTI5ZjJlLi40
MTkzMzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcApAQCAtMTc2Nyw3ICsxNzY3LDcgQEAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBtaW1lVHlw
ZUNhY2hlKCkKICAgICAgICAgInZpZGVvL2ZsdiIsCiAgICAgICAgICJ2aWRlby9tajIiLAogICAg
ICAgICAidmlkZW8vbXAydCIsCi0gICAgICAgICJ2aWRlby9tcDQiLAorLy8gICAgICAgICJ2aWRl
by9tcDQiLAogICAgICAgICAidmlkZW8vbXBlZyIsCiAgICAgICAgICJ2aWRlby9tcGVndHMiLAog
ICAgICAgICAidmlkZW8vb2dnIiwKQEAgLTE3OTQsNiArMTc5NCwxMyBAQCBzdGF0aWMgSGFzaFNl
dDxTdHJpbmc+IG1pbWVUeXBlQ2FjaGUoKQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAo
c2l6ZW9mKG1pbWVUeXBlcykgLyBzaXplb2YoKm1pbWVUeXBlcykpOyArK2kpCiAgICAgICAgIGNh
Y2hlLmFkZChTdHJpbmcobWltZVR5cGVzW2ldKSk7CiAKKyAgICAvLyBIYWNrIHRvIG1ha2UgWW91
VHViZSB3b3JrLCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTcy
CisgICAgZ2ludCBleGl0X3N0YXR1cyA9IDE7CisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVy
cm9yOworICAgIGdib29sZWFuIHN1Y2Nlc3MgPSBnX3NwYXduX2NvbW1hbmRfbGluZV9zeW5jKCJy
cG0gLXFpIGdzdHJlYW1lcjEtbGliYXYiLCBudWxscHRyLCBudWxscHRyLCAmZXhpdF9zdGF0dXMs
ICZlcnJvci5vdXRQdHIoKSk7CisgICAgaWYgKHN1Y2Nlc3MgJiYgIWVycm9yICYmICFleGl0X3N0
YXR1cykKKyAgICAgICAgY2FjaGUuYWRkKFN0cmluZzo6ZnJvbVVURjgoInZpZGVvL21wNCIpKTsK
KwogICAgIHR5cGVMaXN0SW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIHJldHVybiBjYWNoZTsKIH0K
LS0gCjIuNC4zCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278929</attachid>
            <date>2016-05-14 03:53:27 -0700</date>
            <delta_ts>2016-05-14 03:54:32 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>14957</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA2NzRlYzVhNTRiOWY1ZWViYjY5NDMzMWMzZjM5YzgwY2EwNWUyNzQ5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBTYXQsIDE0IE1heSAyMDE2IDEyOjUwOjU5ICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
cGF0Y2gKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgMjUgKysrCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGll
cy5jcHAgICAgICB8ICAxNCArKwogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJVdGls
aXRpZXMuaCAgICAgICAgfCAgIDIgKy0KIC4uLi9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcCAgICAgIHwgMjQ1ICsrKysrKysrKysrKy0tLS0tLS0tLQogNCBmaWxlcyBj
aGFuZ2VkLCAxODYgaW5zZXJ0aW9ucygrKSwgMTAwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCAzZTAzOTE1Li40MTNhZDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTYtMDUt
MTQgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtH
U3RyZWFtZXJdIHVucmVsYXRlZCBjb2RlY3MgcmVxdWlyZWQgdG8gcGxheSB2aWRlb3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTk3MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluc3RlYWQgb2YgaGFy
ZC1jb2RpbmcgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIG1pbWUtdHlwZXMsIGNoZWNrIHRoZQorICAg
ICAgICBkZWNvZGVyIGFuZCBkZW11eGVyIEdTdHJlYW1lciBlbGVtZW50cyBhdmFpbGFibGUgYW5k
IGR5bmFtaWNhbGx5CisgICAgICAgIGJ1aWxkIHRoZSBsaXN0IG9mIG1pbWUtdHlwZXMgYWNjb3Jk
aW5nbHkuIFRoaXMgcGF0Y2ggYWxzbyByZW1vdmVzCisgICAgICAgIHN1cHBvcnQgZm9yIHVuZGVy
LXVzZWQgYW5kIGV4b3RpYyBtaW1lLXR5cGVzLgorCisgICAgICAgIEJhc2VkIG9uIGEgcGF0Y2gg
YnkgTWFyaW8gU2FuY2hleiBQcmFkYS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGV4aXN0aW5n
IG1lZGlhIHRlc3RzIGNvdmVyIHRoaXMgY2hhbmdlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJVdGlsaXRpZXMuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Om1pbWVUeXBlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBwb3J0c1R5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6bWltZVR5cGVDYWNoZSk6IERlbGV0ZWQuCisKIDIwMTYtMDUtMTIgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBEcm9wIFdvcmtlckdsb2JhbFNj
b3BlJ3MgY3VzdG9tIEdldE93blByb3BlcnR5U2xvdCgpIGltcGxlbWVudGF0aW9uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVy
VXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HU3RyZWFtZXJVdGlsaXRpZXMuY3BwCmluZGV4IDc0NThjNmMuLjY2YzQ2MjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJV
dGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9HU3RyZWFtZXJVdGlsaXRpZXMuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaWYgVVNFKEdT
VFJFQU1FUikKICNpbmNsdWRlICJHU3RyZWFtZXJVdGlsaXRpZXMuaCIKIAorI2luY2x1ZGUgIkdS
ZWZQdHJHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAKICNpbmNsdWRlIDxnc3Qv
YXVkaW8vYXVkaW8taW5mby5oPgpAQCAtMTg1LDYgKzE4NiwxOSBAQCBHc3RDbG9ja1RpbWUgdG9H
c3RDbG9ja1RpbWUoZmxvYXQgdGltZSkKICAgICByZXR1cm4gR1NUX1RJTUVWQUxfVE9fVElNRSh0
aW1lVmFsdWUpOwogfQogCitib29sIGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShH
c3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIGNhcHNTdHJpbmcpCit7
CisgICAgR0xpc3QqIGRlY29kZXJGYWN0b3JpZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3Rf
Z2V0X2VsZW1lbnRzKHR5cGUsIEdTVF9SQU5LX01BUkdJTkFMKTsKKyAgICBHUmVmUHRyPEdzdENh
cHM+IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfZnJvbV9zdHJpbmcoY2Fwc1N0cmluZykpOwor
ICAgIEdMaXN0KiBkZWNvZGVycyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9maWx0ZXIoZGVj
b2RlckZhY3RvcmllcywgY2Fwcy5nZXQoKSwgR1NUX1BBRF9TSU5LLCBmYWxzZSk7CisgICAgYm9v
bCByZXN1bHQgPSBkZWNvZGVyczsKKworICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUo
ZGVjb2RlcnMpOworICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUoZGVjb2RlckZhY3Rv
cmllcyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9CiAKICNlbmRpZiAvLyBVU0UoR1NU
UkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dTdHJlYW1lclV0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGllcy5oCmluZGV4IGU5ODBmODMuLmU4M2Jk
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HU3RyZWFtZXJVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVXRpbGl0aWVzLmgKQEAgLTc2LDUgKzc2LDUgQEAgdm9p
ZCB1bm1hcEdzdEJ1ZmZlcihHc3RCdWZmZXIqKTsKIGJvb2wgaW5pdGlhbGl6ZUdTdHJlYW1lcigp
OwogdW5zaWduZWQgZ2V0R3N0UGxheUZsYWcoY29uc3QgY2hhciogbmljayk7CiBHc3RDbG9ja1Rp
bWUgdG9Hc3RDbG9ja1RpbWUoZmxvYXQgdGltZSk7Ci0KK2Jvb2wgZ3N0UmVnaXN0cnlIYXNFbGVt
ZW50Rm9yTWVkaWFUeXBlKEdzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUgdHlwZSwgY29uc3QgY2hh
ciogZGVjb2Rlcik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIuY3BwCmluZGV4IGQ5NzU1MjcuLjA0MmYzMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0xNjYwLDExMyArMTY2MCwxNjAgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5
ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcikKICAgICBtX3JlYWR5VGltZXJIYW5kbGVyLnN0b3AoKTsK
IH0KIAotLy8gRklYTUU6IEluIHdoYXQgc2Vuc2UgaXMgdGhpcyBhICJjYWNoZSI/Ci1zdGF0aWMg
SGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIG1pbWVUeXBlQ2FjaGUo
KQorc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBtaW1l
VHlwZVNldCgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nLCBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBjYWNoZSA9IFtdKCkgeworI2RlZmluZSBfR1NUX1ZJ
REVPX0RFQ09ERVIgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVO
VF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU8KKyNkZWZpbmUgX0dTVF9BVURJT19ERUNPREVSIEdT
VF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREVSIHwgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBF
X01FRElBX0FVRElPCisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmcs
IEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4+IG1pbWVUeXBlcyA9IFtdKCkKKyAgICB7CiAgICAg
ICAgIGluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCk7CiAgICAg
ICAgIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IHNldDsKLSAgICAg
ICAgY29uc3QgY2hhciogbWltZVR5cGVzW10gPSB7Ci0gICAgICAgICAgICAiYXBwbGljYXRpb24v
b2dnIiwKLSAgICAgICAgICAgICJhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3VybCIsCi0gICAg
ICAgICAgICAiYXBwbGljYXRpb24vdm5kLnJuLXJlYWxtZWRpYSIsCi0gICAgICAgICAgICAiYXBw
bGljYXRpb24veC0zZ3AiLAotICAgICAgICAgICAgImFwcGxpY2F0aW9uL3gtcG4tcmVhbGF1ZGlv
IiwKLSAgICAgICAgICAgICJhcHBsaWNhdGlvbi94LW1wZWd1cmwiLAotICAgICAgICAgICAgImF1
ZGlvLzNncHAiLAotICAgICAgICAgICAgImF1ZGlvL2FhYyIsCi0gICAgICAgICAgICAiYXVkaW8v
ZmxhYyIsCi0gICAgICAgICAgICAiYXVkaW8vaUxCQy1zaCIsCi0gICAgICAgICAgICAiYXVkaW8v
bWlkaSIsCi0gICAgICAgICAgICAiYXVkaW8vbW9iaWxlLXhtZiIsCi0gICAgICAgICAgICAiYXVk
aW8vbXAxIiwKLSAgICAgICAgICAgICJhdWRpby9tcDIiLAotICAgICAgICAgICAgImF1ZGlvL21w
MyIsCi0gICAgICAgICAgICAiYXVkaW8vbXA0IiwKLSAgICAgICAgICAgICJhdWRpby9tcGVnIiwK
LSAgICAgICAgICAgICJhdWRpby9vZ2ciLAotICAgICAgICAgICAgImF1ZGlvL29wdXMiLAotICAg
ICAgICAgICAgImF1ZGlvL3FjZWxwIiwKLSAgICAgICAgICAgICJhdWRpby9yaWZmLW1pZGkiLAot
ICAgICAgICAgICAgImF1ZGlvL3NwZWV4IiwKLSAgICAgICAgICAgICJhdWRpby93YXYiLAotICAg
ICAgICAgICAgImF1ZGlvL3dlYm0iLAotICAgICAgICAgICAgImF1ZGlvL3gtYWMzIiwKLSAgICAg
ICAgICAgICJhdWRpby94LWFpZmYiLAotICAgICAgICAgICAgImF1ZGlvL3gtYW1yLW5iLXNoIiwK
LSAgICAgICAgICAgICJhdWRpby94LWFtci13Yi1zaCIsCi0gICAgICAgICAgICAiYXVkaW8veC1h
dSIsCi0gICAgICAgICAgICAiYXVkaW8veC1heSIsCi0gICAgICAgICAgICAiYXVkaW8veC1jZWx0
IiwKLSAgICAgICAgICAgICJhdWRpby94LWR0cyIsCi0gICAgICAgICAgICAiYXVkaW8veC1mbGFj
IiwKLSAgICAgICAgICAgICJhdWRpby94LWdicyIsCi0gICAgICAgICAgICAiYXVkaW8veC1nc20i
LAotICAgICAgICAgICAgImF1ZGlvL3gtZ3ltIiwKLSAgICAgICAgICAgICJhdWRpby94LWltZWxv
ZHkiLAotICAgICAgICAgICAgImF1ZGlvL3gtaXJjYW0iLAotICAgICAgICAgICAgImF1ZGlvL3gt
a3NzIiwKLSAgICAgICAgICAgICJhdWRpby94LW00YSIsCi0gICAgICAgICAgICAiYXVkaW8veC1t
b2QiLAotICAgICAgICAgICAgImF1ZGlvL3gtbXAzIiwKLSAgICAgICAgICAgICJhdWRpby94LW1w
ZWciLAotICAgICAgICAgICAgImF1ZGlvL3gtbXVzZXBhY2siLAotICAgICAgICAgICAgImF1ZGlv
L3gtbmlzdCIsCi0gICAgICAgICAgICAiYXVkaW8veC1uc2YiLAotICAgICAgICAgICAgImF1ZGlv
L3gtcGFyaXMiLAotICAgICAgICAgICAgImF1ZGlvL3gtc2FwIiwKLSAgICAgICAgICAgICJhdWRp
by94LXNiYyIsCi0gICAgICAgICAgICAiYXVkaW8veC1zZHMiLAotICAgICAgICAgICAgImF1ZGlv
L3gtc2hvcnRlbiIsCi0gICAgICAgICAgICAiYXVkaW8veC1zaWQiLAotICAgICAgICAgICAgImF1
ZGlvL3gtc3BjIiwKLSAgICAgICAgICAgICJhdWRpby94LXNwZWV4IiwKLSAgICAgICAgICAgICJh
dWRpby94LXN2eCIsCi0gICAgICAgICAgICAiYXVkaW8veC10dGFmaWxlIiwKLSAgICAgICAgICAg
ICJhdWRpby94LXZnbSIsCi0gICAgICAgICAgICAiYXVkaW8veC12b2MiLAotICAgICAgICAgICAg
ImF1ZGlvL3gtdm9yYmlzK29nZyIsCi0gICAgICAgICAgICAiYXVkaW8veC13NjQiLAotICAgICAg
ICAgICAgImF1ZGlvL3gtd2F2IiwKLSAgICAgICAgICAgICJhdWRpby94LXdhdnBhY2siLAotICAg
ICAgICAgICAgImF1ZGlvL3gtd2F2cGFjay1jb3JyZWN0aW9uIiwKLSAgICAgICAgICAgICJ2aWRl
by8zZ3BwIiwKLSAgICAgICAgICAgICJ2aWRlby9mbHYiLAotICAgICAgICAgICAgInZpZGVvL21q
MiIsCi0gICAgICAgICAgICAidmlkZW8vbXAydCIsCi0gICAgICAgICAgICAidmlkZW8vbXA0IiwK
LSAgICAgICAgICAgICJ2aWRlby9tcGVnIiwKLSAgICAgICAgICAgICJ2aWRlby9tcGVndHMiLAot
ICAgICAgICAgICAgInZpZGVvL29nZyIsCi0gICAgICAgICAgICAidmlkZW8vcXVpY2t0aW1lIiwK
LSAgICAgICAgICAgICJ2aWRlby92aXZvIiwKLSAgICAgICAgICAgICJ2aWRlby93ZWJtIiwKLSAg
ICAgICAgICAgICJ2aWRlby94LWNkeGEiLAotICAgICAgICAgICAgInZpZGVvL3gtZGlyYWMiLAot
ICAgICAgICAgICAgInZpZGVvL3gtZHYiLAotICAgICAgICAgICAgInZpZGVvL3gtZmxpIiwKLSAg
ICAgICAgICAgICJ2aWRlby94LWZsdiIsCi0gICAgICAgICAgICAidmlkZW8veC1oMjYzIiwKLSAg
ICAgICAgICAgICJ2aWRlby94LWl2ZiIsCi0gICAgICAgICAgICAidmlkZW8veC1tNHYiLAotICAg
ICAgICAgICAgInZpZGVvL3gtbWF0cm9za2EiLAotICAgICAgICAgICAgInZpZGVvL3gtbW5nIiwK
LSAgICAgICAgICAgICJ2aWRlby94LW1zLWFzZiIsCi0gICAgICAgICAgICAidmlkZW8veC1tc3Zp
ZGVvIiwKLSAgICAgICAgICAgICJ2aWRlby94LW12ZSIsCi0gICAgICAgICAgICAidmlkZW8veC1u
dXYiLAotICAgICAgICAgICAgInZpZGVvL3gtdmNkIgotICAgICAgICB9OwotICAgICAgICBmb3Ig
KGF1dG8mIHR5cGUgOiBtaW1lVHlwZXMpCi0gICAgICAgICAgICBzZXQuYWRkKHR5cGUpOworCisg
ICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoR1NUX0VMRU1FTlRf
RkFDVE9SWV9UWVBFX0RFTVVYRVIsICJ2aWRlby9xdWlja3RpbWUiKSkKKyAgICAgICAgICAgIHNl
dC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgidmlkZW8vcXVpY2t0aW1lIikpOworCisgICAgICAgIGlm
IChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoR1NUX0VMRU1FTlRfRkFDVE9SWV9U
WVBFX0RFTVVYRVIsICJ2aWRlby9xdWlja3RpbWUsIHZhcmlhbnQ9KHN0cmluZykzZ3BwIikpCisg
ICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoInZpZGVvLzNncHAiKSk7CisKKyAg
ICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShHU1RfRUxFTUVOVF9G
QUNUT1JZX1RZUEVfREVNVVhFUiwgImFwcGxpY2F0aW9uL3gtM2dwIikpCisgICAgICAgICAgICBz
ZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoImFwcGxpY2F0aW9uL3gtM2dwIikpOworCisgICAgICAg
IGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoR1NUX0VMRU1FTlRfRkFDVE9S
WV9UWVBFX0RFTVVYRVIsICJ2aWRlby94LW1zLWFzZiIpKQorICAgICAgICAgICAgc2V0LmFkZChT
dHJpbmc6OmZyb21VVEY4KCJ2aWRlby94LW1zLWFzZiIpKTsKKworICAgICAgICBpZiAoZ3N0UmVn
aXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERU1V
WEVSLCAiYXVkaW8veC1haWZmIikpCisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVU
RjgoImF1ZGlvL3gtYWlmZiIpKTsKKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50
Rm9yTWVkaWFUeXBlKEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERU1VWEVSLCAiYXBwbGljYXRp
b24veC1wbi1yZWFsYXVkaW8iKSkKKyAgICAgICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRG
OCgiYXBwbGljYXRpb24veC1wbi1yZWFsYXVkaW8iKSk7CisKKyAgICAgICAgaWYgKGdzdFJlZ2lz
dHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVNVVhF
UiwgImFwcGxpY2F0aW9uL3ZuZC5ybi1yZWFsbWVkaWEiKSkKKyAgICAgICAgICAgIHNldC5hZGQo
U3RyaW5nOjpmcm9tVVRGOCgiYXBwbGljYXRpb24vdm5kLnJuLXJlYWxtZWRpYSIpKTsKKworICAg
ICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKF9HU1RfVklERU9fREVD
T0RFUiwgInZpZGVvL3gtbXN2aWRlb2NvZGVjIikpCisgICAgICAgICAgICBzZXQuYWRkKFN0cmlu
Zzo6ZnJvbVVURjgoInZpZGVvL3gtbXN2aWRlbyIpKTsKKworICAgICAgICBpZiAoZ3N0UmVnaXN0
cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKF9HU1RfVklERU9fREVDT0RFUiwgInZpZGVvL3gtaDI2
NCIpKSB7CisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoInZpZGVvL21wNCIp
KTsKKyAgICAgICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgidmlkZW8veC1tNHYiKSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFU
eXBlKF9HU1RfVklERU9fREVDT0RFUiwgInZpZGVvL3gtaDI2MyIpKQorICAgICAgICAgICAgc2V0
LmFkZChTdHJpbmc6OmZyb21VVEY4KCJ2aWRlby94LWgyNjMiKSk7CisKKyAgICAgICAgaWYgKGdz
dFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShfR1NUX1ZJREVPX0RFQ09ERVIsICJ2aWRl
by9tcGVndHMiKSkKKyAgICAgICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgidmlkZW8v
bXBlZ3RzIikpOworCisgICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5
cGUoX0dTVF9WSURFT19ERUNPREVSLCAidmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxIikp
CisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoInZpZGVvL21wZWciKSk7CisK
KyAgICAgICAgYm9vbCB2b3JiaXNTdXBwb3J0ZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKGdzdFJl
Z2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVN
VVhFUiwgImFwcGxpY2F0aW9uL29nZyIpKSB7CisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6
ZnJvbVVURjgoImFwcGxpY2F0aW9uL29nZyIpKTsKKworICAgICAgICAgICAgdm9yYmlzU3VwcG9y
dGVkID0gZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKF9HU1RfQVVESU9fREVDT0RF
UiwgImF1ZGlvL3gtdm9yYmlzIik7CisgICAgICAgICAgICBpZiAodm9yYmlzU3VwcG9ydGVkKSB7
CisgICAgICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJhdWRpby9vZ2ciKSk7
CisgICAgICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJhdWRpby94LXZvcmJp
cytvZ2ciKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChnc3RSZWdpc3RyeUhh
c0VsZW1lbnRGb3JNZWRpYVR5cGUoX0dTVF9WSURFT19ERUNPREVSLCAidmlkZW8veC10aGVvcmEi
KSkKKyAgICAgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoInZpZGVvL29nZyIp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgYXVkaW9NcGVnU3VwcG9ydGVkID0gZmFsc2U7
CisgICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoX0dTVF9BVURJ
T19ERUNPREVSLCAiYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0oaW50KVsx
LCAzXSIpKSB7CisgICAgICAgICAgICBhdWRpb01wZWdTdXBwb3J0ZWQgPSB0cnVlOworICAgICAg
ICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJhdWRpby9tcDEiKSk7CisgICAgICAgICAg
ICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoImF1ZGlvL21wMyIpKTsKKyAgICAgICAgICAgIHNl
dC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgiYXVkaW8veC1tcDMiKSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKF9HU1RfQVVESU9fREVD
T0RFUiwgImF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpezIsIDR9IikpIHsKKyAgICAgICAg
ICAgIGF1ZGlvTXBlZ1N1cHBvcnRlZCA9IHRydWU7CisgICAgICAgICAgICBzZXQuYWRkKFN0cmlu
Zzo6ZnJvbVVURjgoImF1ZGlvL2FhYyIpKTsKKyAgICAgICAgICAgIHNldC5hZGQoU3RyaW5nOjpm
cm9tVVRGOCgiYXVkaW8vbXAyIikpOworICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21V
VEY4KCJhdWRpby9tcDQiKSk7CisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgo
ImF1ZGlvL3gtbTRhIikpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1ZGlvTXBlZ1N1cHBv
cnRlZCkgeworICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJhdWRpby9tcGVn
IikpOworICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJhdWRpby94LW1wZWci
KSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVk
aWFUeXBlKF9HU1RfQVVESU9fREVDT0RFUiwgImF1ZGlvL21pZGkiKSkgeworICAgICAgICAgICAg
c2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJhdWRpby9taWRpIikpOworICAgICAgICAgICAgc2V0
LmFkZChTdHJpbmc6OmZyb21VVEY4KCJhdWRpby9yaWZmLW1pZGkiKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKF9HU1RfQVVESU9f
REVDT0RFUiwgImF1ZGlvL3gtc2JjIikpCisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJv
bVVURjgoImF1ZGlvL3gtc2JjIikpOworCisgICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1l
bnRGb3JNZWRpYVR5cGUoX0dTVF9BVURJT19ERUNPREVSLCAiYXVkaW8veC1zaWQiKSkKKyAgICAg
ICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgiYXVkaW8veC1zaWQiKSk7CisKKyAgICAg
ICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShfR1NUX0FVRElPX0RFQ09E
RVIsICJhdWRpby94LWZsYWMiKSkgeworICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21V
VEY4KCJhdWRpby94LWZsYWMiKSk7CisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVU
RjgoImF1ZGlvL2ZsYWMiKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlI
YXNFbGVtZW50Rm9yTWVkaWFUeXBlKF9HU1RfQVVESU9fREVDT0RFUiwgImF1ZGlvL3gtd2F2Iikg
fHwgZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKEdTVF9FTEVNRU5UX0ZBQ1RPUllf
VFlQRV9ERU1VWEVSLCAiYXVkaW8veC13YXYiKSkgeworICAgICAgICAgICAgc2V0LmFkZChTdHJp
bmc6OmZyb21VVEY4KCJhdWRpby93YXYiKSk7CisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6
ZnJvbVVURjgoImF1ZGlvL3gtd2F2IikpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGdzdFJl
Z2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShfR1NUX0FVRElPX0RFQ09ERVIsICJhdWRpby94
LXdhdnBhY2siKSkgeworICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJhdWRp
by94LXdhdnBhY2siKSk7CisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoImF1
ZGlvL3gtd2F2cGFjay1jb3JyZWN0aW9uIikpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGdz
dFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShfR1NUX0FVRElPX0RFQ09ERVIsICJhdWRp
by94LXNwZWV4IikpIHsKKyAgICAgICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgiYXVk
aW8vc3BlZXgiKSk7CisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoImF1ZGlv
L3gtc3BlZXgiKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVt
ZW50Rm9yTWVkaWFUeXBlKF9HU1RfQVVESU9fREVDT0RFUiwgImF1ZGlvL3gtb3B1cyIpKQorICAg
ICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJhdWRpby9vcHVzIikpOworCisgICAg
ICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoX0dTVF9BVURJT19ERUNP
REVSLCAiYXVkaW8veC1hYzMiKSB8fCBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUo
X0dTVF9BVURJT19ERUNPREVSLCAiYXVkaW8veC1lYWMzIikpCisgICAgICAgICAgICBzZXQuYWRk
KFN0cmluZzo6ZnJvbVVURjgoImF1ZGlvL3gtYWMzIikpOworCisgICAgICAgIGlmIChnc3RSZWdp
c3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoX0dTVF9BVURJT19ERUNPREVSLCAiYXVkaW8veC1k
dHMiKSkKKyAgICAgICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgiYXVkaW8veC1kdHMi
KSk7CisKKyAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShHU1Rf
RUxFTUVOVF9GQUNUT1JZX1RZUEVfREVNVVhFUiwgInZpZGVvL3gtbWF0cm9za2EiKSkgeworICAg
ICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJ2aWRlby94LW1hdHJvc2thIikpOwor
CisgICAgICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKF9HU1Rf
VklERU9fREVDT0RFUiwgInZpZGVvL3gtdnA4IikgfHwgZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9y
TWVkaWFUeXBlKF9HU1RfVklERU9fREVDT0RFUiwgInZpZGVvL3gtdnA5IikpCisgICAgICAgICAg
ICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJ2aWRlby93ZWJtIikpOworCisgICAgICAg
ICAgICBpZiAodm9yYmlzU3VwcG9ydGVkKQorICAgICAgICAgICAgICAgIHNldC5hZGQoU3RyaW5n
Ojpmcm9tVVRGOCgiYXVkaW8vd2VibSIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChnc3RS
ZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RF
TVVYRVIsICJhcHBsaWNhdGlvbi94LWhscyIpKSB7CisgICAgICAgICAgICBzZXQuYWRkKFN0cmlu
Zzo6ZnJvbVVURjgoImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsIikpOworICAgICAgICAg
ICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJhcHBsaWNhdGlvbi94LW1wZWd1cmwiKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBl
KF9HU1RfVklERU9fREVDT0RFUiwgInZpZGVvL3gtZGlyYWMiKSkKKyAgICAgICAgICAgIHNldC5h
ZGQoU3RyaW5nOjpmcm9tVVRGOCgidmlkZW8veC1kaXJhYyIpKTsKKworICAgICAgICBpZiAoZ3N0
UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKF9HU1RfVklERU9fREVDT0RFUiwgInZpZGVv
L3gtZmxhc2gtdmlkZW8iKSkgeworICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4
KCJ2aWRlby9mbHYiKSk7CisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoInZp
ZGVvL3gtZmx2IikpOworICAgICAgICB9CisKICAgICAgICAgcmV0dXJuIHNldDsKICAgICB9KCk7
Ci0gICAgcmV0dXJuIGNhY2hlOworICAgIHJldHVybiBtaW1lVHlwZXM7CiB9CiAKIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmlu
ZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgdHlwZXMpCiB7Ci0gICAgdHlwZXMgPSBtaW1l
VHlwZUNhY2hlKCk7CisgICAgdHlwZXMgPSBtaW1lVHlwZVNldCgpOwogfQogCiBNZWRpYVBsYXll
cjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBl
KGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCkBAIC0xNzgw
LDcgKzE4MjcsNyBAQCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRQogICAgICAgICByZXR1cm4gTWVk
aWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOwogCiAgICAgLy8gc3BlYyBzYXlzIHdlIHNob3VsZCBu
b3QgcmV0dXJuICJwcm9iYWJseSIgaWYgdGhlIGNvZGVjcyBzdHJpbmcgaXMgZW1wdHkKLSAgICBp
ZiAobWltZVR5cGVDYWNoZSgpLmNvbnRhaW5zKHBhcmFtZXRlcnMudHlwZSkpCisgICAgaWYgKG1p
bWVUeXBlU2V0KCkuY29udGFpbnMocGFyYW1ldGVycy50eXBlKSkKICAgICAgICAgcmV0dXJuIHBh
cmFtZXRlcnMuY29kZWNzLmlzRW1wdHkoKSA/IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZCA6
IE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZDsKICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90
U3VwcG9ydGVkOwogfQotLSAKMi44LjE=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278930</attachid>
            <date>2016-05-14 03:54:32 -0700</date>
            <delta_ts>2016-05-14 04:46:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>14955</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBlMjE4Yzk2ZWIyOWRjYjA5OWVmMjM0ZDRkOWY1ZTg4NzQ3NTY5NTQ0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBTYXQsIDE0IE1heSAyMDE2IDEyOjUwOjU5ICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
cGF0Y2gKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgMjUgKysrCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGll
cy5jcHAgICAgICB8ICAxNCArKwogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJVdGls
aXRpZXMuaCAgICAgICAgfCAgIDIgKy0KIC4uLi9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcCAgICAgIHwgMjQ1ICsrKysrKysrKysrKy0tLS0tLS0tLQogNCBmaWxlcyBj
aGFuZ2VkLCAxODYgaW5zZXJ0aW9ucygrKSwgMTAwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCAzZTAzOTE1Li40MTNhZDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTYtMDUt
MTQgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtH
U3RyZWFtZXJdIHVucmVsYXRlZCBjb2RlY3MgcmVxdWlyZWQgdG8gcGxheSB2aWRlb3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTk3MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluc3RlYWQgb2YgaGFy
ZC1jb2RpbmcgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIG1pbWUtdHlwZXMsIGNoZWNrIHRoZQorICAg
ICAgICBkZWNvZGVyIGFuZCBkZW11eGVyIEdTdHJlYW1lciBlbGVtZW50cyBhdmFpbGFibGUgYW5k
IGR5bmFtaWNhbGx5CisgICAgICAgIGJ1aWxkIHRoZSBsaXN0IG9mIG1pbWUtdHlwZXMgYWNjb3Jk
aW5nbHkuIFRoaXMgcGF0Y2ggYWxzbyByZW1vdmVzCisgICAgICAgIHN1cHBvcnQgZm9yIHVuZGVy
LXVzZWQgYW5kIGV4b3RpYyBtaW1lLXR5cGVzLgorCisgICAgICAgIEJhc2VkIG9uIGEgcGF0Y2gg
YnkgTWFyaW8gU2FuY2hleiBQcmFkYS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGV4aXN0aW5n
IG1lZGlhIHRlc3RzIGNvdmVyIHRoaXMgY2hhbmdlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJVdGlsaXRpZXMuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Om1pbWVUeXBlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBwb3J0c1R5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6bWltZVR5cGVDYWNoZSk6IERlbGV0ZWQuCisKIDIwMTYtMDUtMTIgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBEcm9wIFdvcmtlckdsb2JhbFNj
b3BlJ3MgY3VzdG9tIEdldE93blByb3BlcnR5U2xvdCgpIGltcGxlbWVudGF0aW9uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVy
VXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HU3RyZWFtZXJVdGlsaXRpZXMuY3BwCmluZGV4IDc0NThjNmMuLjY2YzQ2MjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJV
dGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9HU3RyZWFtZXJVdGlsaXRpZXMuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaWYgVVNFKEdT
VFJFQU1FUikKICNpbmNsdWRlICJHU3RyZWFtZXJVdGlsaXRpZXMuaCIKIAorI2luY2x1ZGUgIkdS
ZWZQdHJHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAKICNpbmNsdWRlIDxnc3Qv
YXVkaW8vYXVkaW8taW5mby5oPgpAQCAtMTg1LDYgKzE4NiwxOSBAQCBHc3RDbG9ja1RpbWUgdG9H
c3RDbG9ja1RpbWUoZmxvYXQgdGltZSkKICAgICByZXR1cm4gR1NUX1RJTUVWQUxfVE9fVElNRSh0
aW1lVmFsdWUpOwogfQogCitib29sIGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShH
c3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIGNhcHNTdHJpbmcpCit7
CisgICAgR0xpc3QqIGRlY29kZXJGYWN0b3JpZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3Rf
Z2V0X2VsZW1lbnRzKHR5cGUsIEdTVF9SQU5LX01BUkdJTkFMKTsKKyAgICBHUmVmUHRyPEdzdENh
cHM+IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfZnJvbV9zdHJpbmcoY2Fwc1N0cmluZykpOwor
ICAgIEdMaXN0KiBkZWNvZGVycyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9maWx0ZXIoZGVj
b2RlckZhY3RvcmllcywgY2Fwcy5nZXQoKSwgR1NUX1BBRF9TSU5LLCBmYWxzZSk7CisgICAgYm9v
bCByZXN1bHQgPSBkZWNvZGVyczsKKworICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUo
ZGVjb2RlcnMpOworICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUoZGVjb2RlckZhY3Rv
cmllcyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9CiAKICNlbmRpZiAvLyBVU0UoR1NU
UkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dTdHJlYW1lclV0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGllcy5oCmluZGV4IGU5ODBmODMuLjNmOTVl
MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HU3RyZWFtZXJVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVXRpbGl0aWVzLmgKQEAgLTc2LDUgKzc2LDUgQEAgdm9p
ZCB1bm1hcEdzdEJ1ZmZlcihHc3RCdWZmZXIqKTsKIGJvb2wgaW5pdGlhbGl6ZUdTdHJlYW1lcigp
OwogdW5zaWduZWQgZ2V0R3N0UGxheUZsYWcoY29uc3QgY2hhciogbmljayk7CiBHc3RDbG9ja1Rp
bWUgdG9Hc3RDbG9ja1RpbWUoZmxvYXQgdGltZSk7Ci0KK2Jvb2wgZ3N0UmVnaXN0cnlIYXNFbGVt
ZW50Rm9yTWVkaWFUeXBlKEdzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUsIGNvbnN0IGNoYXIqIGNh
cHNTdHJpbmcpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmNwcAppbmRleCBkOTc1NTI3Li4wNDJmMzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMTY2MCwxMTMgKzE2NjAsMTYwIEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkaW5nRmFpbGVkKE1lZGlhUGxheWVy
OjpOZXR3b3JrU3RhdGUgZXJyb3IpCiAgICAgbV9yZWFkeVRpbWVySGFuZGxlci5zdG9wKCk7CiB9
CiAKLS8vIEZJWE1FOiBJbiB3aGF0IHNlbnNlIGlzIHRoaXMgYSAiY2FjaGUiPwotc3RhdGljIEhh
c2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBtaW1lVHlwZUNhY2hlKCkK
K3N0YXRpYyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgbWltZVR5
cGVTZXQoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZywgQVND
SUlDYXNlSW5zZW5zaXRpdmVIYXNoPj4gY2FjaGUgPSBbXSgpIHsKKyNkZWZpbmUgX0dTVF9WSURF
T19ERUNPREVSIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREVSIHwgR1NUX0VMRU1FTlRf
RkFDVE9SWV9UWVBFX01FRElBX1ZJREVPCisjZGVmaW5lIF9HU1RfQVVESU9fREVDT0RFUiBHU1Rf
RUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDT0RFUiB8IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9N
RURJQV9BVURJTworCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nLCBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBtaW1lVHlwZXMgPSBbXSgpCisgICAgewogICAgICAg
ICBpbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVtZW50cygpOwogICAgICAg
ICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBzZXQ7Ci0gICAgICAg
IGNvbnN0IGNoYXIqIG1pbWVUeXBlc1tdID0gewotICAgICAgICAgICAgImFwcGxpY2F0aW9uL29n
ZyIsCi0gICAgICAgICAgICAiYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmwiLAotICAgICAg
ICAgICAgImFwcGxpY2F0aW9uL3ZuZC5ybi1yZWFsbWVkaWEiLAotICAgICAgICAgICAgImFwcGxp
Y2F0aW9uL3gtM2dwIiwKLSAgICAgICAgICAgICJhcHBsaWNhdGlvbi94LXBuLXJlYWxhdWRpbyIs
Ci0gICAgICAgICAgICAiYXBwbGljYXRpb24veC1tcGVndXJsIiwKLSAgICAgICAgICAgICJhdWRp
by8zZ3BwIiwKLSAgICAgICAgICAgICJhdWRpby9hYWMiLAotICAgICAgICAgICAgImF1ZGlvL2Zs
YWMiLAotICAgICAgICAgICAgImF1ZGlvL2lMQkMtc2giLAotICAgICAgICAgICAgImF1ZGlvL21p
ZGkiLAotICAgICAgICAgICAgImF1ZGlvL21vYmlsZS14bWYiLAotICAgICAgICAgICAgImF1ZGlv
L21wMSIsCi0gICAgICAgICAgICAiYXVkaW8vbXAyIiwKLSAgICAgICAgICAgICJhdWRpby9tcDMi
LAotICAgICAgICAgICAgImF1ZGlvL21wNCIsCi0gICAgICAgICAgICAiYXVkaW8vbXBlZyIsCi0g
ICAgICAgICAgICAiYXVkaW8vb2dnIiwKLSAgICAgICAgICAgICJhdWRpby9vcHVzIiwKLSAgICAg
ICAgICAgICJhdWRpby9xY2VscCIsCi0gICAgICAgICAgICAiYXVkaW8vcmlmZi1taWRpIiwKLSAg
ICAgICAgICAgICJhdWRpby9zcGVleCIsCi0gICAgICAgICAgICAiYXVkaW8vd2F2IiwKLSAgICAg
ICAgICAgICJhdWRpby93ZWJtIiwKLSAgICAgICAgICAgICJhdWRpby94LWFjMyIsCi0gICAgICAg
ICAgICAiYXVkaW8veC1haWZmIiwKLSAgICAgICAgICAgICJhdWRpby94LWFtci1uYi1zaCIsCi0g
ICAgICAgICAgICAiYXVkaW8veC1hbXItd2Itc2giLAotICAgICAgICAgICAgImF1ZGlvL3gtYXUi
LAotICAgICAgICAgICAgImF1ZGlvL3gtYXkiLAotICAgICAgICAgICAgImF1ZGlvL3gtY2VsdCIs
Ci0gICAgICAgICAgICAiYXVkaW8veC1kdHMiLAotICAgICAgICAgICAgImF1ZGlvL3gtZmxhYyIs
Ci0gICAgICAgICAgICAiYXVkaW8veC1nYnMiLAotICAgICAgICAgICAgImF1ZGlvL3gtZ3NtIiwK
LSAgICAgICAgICAgICJhdWRpby94LWd5bSIsCi0gICAgICAgICAgICAiYXVkaW8veC1pbWVsb2R5
IiwKLSAgICAgICAgICAgICJhdWRpby94LWlyY2FtIiwKLSAgICAgICAgICAgICJhdWRpby94LWtz
cyIsCi0gICAgICAgICAgICAiYXVkaW8veC1tNGEiLAotICAgICAgICAgICAgImF1ZGlvL3gtbW9k
IiwKLSAgICAgICAgICAgICJhdWRpby94LW1wMyIsCi0gICAgICAgICAgICAiYXVkaW8veC1tcGVn
IiwKLSAgICAgICAgICAgICJhdWRpby94LW11c2VwYWNrIiwKLSAgICAgICAgICAgICJhdWRpby94
LW5pc3QiLAotICAgICAgICAgICAgImF1ZGlvL3gtbnNmIiwKLSAgICAgICAgICAgICJhdWRpby94
LXBhcmlzIiwKLSAgICAgICAgICAgICJhdWRpby94LXNhcCIsCi0gICAgICAgICAgICAiYXVkaW8v
eC1zYmMiLAotICAgICAgICAgICAgImF1ZGlvL3gtc2RzIiwKLSAgICAgICAgICAgICJhdWRpby94
LXNob3J0ZW4iLAotICAgICAgICAgICAgImF1ZGlvL3gtc2lkIiwKLSAgICAgICAgICAgICJhdWRp
by94LXNwYyIsCi0gICAgICAgICAgICAiYXVkaW8veC1zcGVleCIsCi0gICAgICAgICAgICAiYXVk
aW8veC1zdngiLAotICAgICAgICAgICAgImF1ZGlvL3gtdHRhZmlsZSIsCi0gICAgICAgICAgICAi
YXVkaW8veC12Z20iLAotICAgICAgICAgICAgImF1ZGlvL3gtdm9jIiwKLSAgICAgICAgICAgICJh
dWRpby94LXZvcmJpcytvZ2ciLAotICAgICAgICAgICAgImF1ZGlvL3gtdzY0IiwKLSAgICAgICAg
ICAgICJhdWRpby94LXdhdiIsCi0gICAgICAgICAgICAiYXVkaW8veC13YXZwYWNrIiwKLSAgICAg
ICAgICAgICJhdWRpby94LXdhdnBhY2stY29ycmVjdGlvbiIsCi0gICAgICAgICAgICAidmlkZW8v
M2dwcCIsCi0gICAgICAgICAgICAidmlkZW8vZmx2IiwKLSAgICAgICAgICAgICJ2aWRlby9tajIi
LAotICAgICAgICAgICAgInZpZGVvL21wMnQiLAotICAgICAgICAgICAgInZpZGVvL21wNCIsCi0g
ICAgICAgICAgICAidmlkZW8vbXBlZyIsCi0gICAgICAgICAgICAidmlkZW8vbXBlZ3RzIiwKLSAg
ICAgICAgICAgICJ2aWRlby9vZ2ciLAotICAgICAgICAgICAgInZpZGVvL3F1aWNrdGltZSIsCi0g
ICAgICAgICAgICAidmlkZW8vdml2byIsCi0gICAgICAgICAgICAidmlkZW8vd2VibSIsCi0gICAg
ICAgICAgICAidmlkZW8veC1jZHhhIiwKLSAgICAgICAgICAgICJ2aWRlby94LWRpcmFjIiwKLSAg
ICAgICAgICAgICJ2aWRlby94LWR2IiwKLSAgICAgICAgICAgICJ2aWRlby94LWZsaSIsCi0gICAg
ICAgICAgICAidmlkZW8veC1mbHYiLAotICAgICAgICAgICAgInZpZGVvL3gtaDI2MyIsCi0gICAg
ICAgICAgICAidmlkZW8veC1pdmYiLAotICAgICAgICAgICAgInZpZGVvL3gtbTR2IiwKLSAgICAg
ICAgICAgICJ2aWRlby94LW1hdHJvc2thIiwKLSAgICAgICAgICAgICJ2aWRlby94LW1uZyIsCi0g
ICAgICAgICAgICAidmlkZW8veC1tcy1hc2YiLAotICAgICAgICAgICAgInZpZGVvL3gtbXN2aWRl
byIsCi0gICAgICAgICAgICAidmlkZW8veC1tdmUiLAotICAgICAgICAgICAgInZpZGVvL3gtbnV2
IiwKLSAgICAgICAgICAgICJ2aWRlby94LXZjZCIKLSAgICAgICAgfTsKLSAgICAgICAgZm9yIChh
dXRvJiB0eXBlIDogbWltZVR5cGVzKQotICAgICAgICAgICAgc2V0LmFkZCh0eXBlKTsKKworICAg
ICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKEdTVF9FTEVNRU5UX0ZB
Q1RPUllfVFlQRV9ERU1VWEVSLCAidmlkZW8vcXVpY2t0aW1lIikpCisgICAgICAgICAgICBzZXQu
YWRkKFN0cmluZzo6ZnJvbVVURjgoInZpZGVvL3F1aWNrdGltZSIpKTsKKworICAgICAgICBpZiAo
Z3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQ
RV9ERU1VWEVSLCAidmlkZW8vcXVpY2t0aW1lLCB2YXJpYW50PShzdHJpbmcpM2dwcCIpKQorICAg
ICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJ2aWRlby8zZ3BwIikpOworCisgICAg
ICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoR1NUX0VMRU1FTlRfRkFD
VE9SWV9UWVBFX0RFTVVYRVIsICJhcHBsaWNhdGlvbi94LTNncCIpKQorICAgICAgICAgICAgc2V0
LmFkZChTdHJpbmc6OmZyb21VVEY4KCJhcHBsaWNhdGlvbi94LTNncCIpKTsKKworICAgICAgICBp
ZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKEdTVF9FTEVNRU5UX0ZBQ1RPUllf
VFlQRV9ERU1VWEVSLCAidmlkZW8veC1tcy1hc2YiKSkKKyAgICAgICAgICAgIHNldC5hZGQoU3Ry
aW5nOjpmcm9tVVRGOCgidmlkZW8veC1tcy1hc2YiKSk7CisKKyAgICAgICAgaWYgKGdzdFJlZ2lz
dHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVNVVhF
UiwgImF1ZGlvL3gtYWlmZiIpKQorICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4
KCJhdWRpby94LWFpZmYiKSk7CisKKyAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZv
ck1lZGlhVHlwZShHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVNVVhFUiwgImFwcGxpY2F0aW9u
L3gtcG4tcmVhbGF1ZGlvIikpCisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgo
ImFwcGxpY2F0aW9uL3gtcG4tcmVhbGF1ZGlvIikpOworCisgICAgICAgIGlmIChnc3RSZWdpc3Ry
eUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFTVVYRVIs
ICJhcHBsaWNhdGlvbi92bmQucm4tcmVhbG1lZGlhIikpCisgICAgICAgICAgICBzZXQuYWRkKFN0
cmluZzo6ZnJvbVVURjgoImFwcGxpY2F0aW9uL3ZuZC5ybi1yZWFsbWVkaWEiKSk7CisKKyAgICAg
ICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShfR1NUX1ZJREVPX0RFQ09E
RVIsICJ2aWRlby94LW1zdmlkZW9jb2RlYyIpKQorICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6
OmZyb21VVEY4KCJ2aWRlby94LW1zdmlkZW8iKSk7CisKKyAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5
SGFzRWxlbWVudEZvck1lZGlhVHlwZShfR1NUX1ZJREVPX0RFQ09ERVIsICJ2aWRlby94LWgyNjQi
KSkgeworICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJ2aWRlby9tcDQiKSk7
CisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoInZpZGVvL3gtbTR2IikpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlw
ZShfR1NUX1ZJREVPX0RFQ09ERVIsICJ2aWRlby94LWgyNjMiKSkKKyAgICAgICAgICAgIHNldC5h
ZGQoU3RyaW5nOjpmcm9tVVRGOCgidmlkZW8veC1oMjYzIikpOworCisgICAgICAgIGlmIChnc3RS
ZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoX0dTVF9WSURFT19ERUNPREVSLCAidmlkZW8v
bXBlZ3RzIikpCisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoInZpZGVvL21w
ZWd0cyIpKTsKKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBl
KF9HU1RfVklERU9fREVDT0RFUiwgInZpZGVvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpMSIpKQor
ICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJ2aWRlby9tcGVnIikpOworCisg
ICAgICAgIGJvb2wgdm9yYmlzU3VwcG9ydGVkID0gZmFsc2U7CisgICAgICAgIGlmIChnc3RSZWdp
c3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFTVVY
RVIsICJhcHBsaWNhdGlvbi9vZ2ciKSkgeworICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZy
b21VVEY4KCJhcHBsaWNhdGlvbi9vZ2ciKSk7CisKKyAgICAgICAgICAgIHZvcmJpc1N1cHBvcnRl
ZCA9IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShfR1NUX0FVRElPX0RFQ09ERVIs
ICJhdWRpby94LXZvcmJpcyIpOworICAgICAgICAgICAgaWYgKHZvcmJpc1N1cHBvcnRlZCkgewor
ICAgICAgICAgICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgiYXVkaW8vb2dnIikpOwor
ICAgICAgICAgICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgiYXVkaW8veC12b3JiaXMr
b2dnIikpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNF
bGVtZW50Rm9yTWVkaWFUeXBlKF9HU1RfVklERU9fREVDT0RFUiwgInZpZGVvL3gtdGhlb3JhIikp
CisgICAgICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJ2aWRlby9vZ2ciKSk7
CisgICAgICAgIH0KKworICAgICAgICBib29sIGF1ZGlvTXBlZ1N1cHBvcnRlZCA9IGZhbHNlOwor
ICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKF9HU1RfQVVESU9f
REVDT0RFUiwgImF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpMSwgbGF5ZXI9KGludClbMSwg
M10iKSkgeworICAgICAgICAgICAgYXVkaW9NcGVnU3VwcG9ydGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgiYXVkaW8vbXAxIikpOworICAgICAgICAgICAg
c2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJhdWRpby9tcDMiKSk7CisgICAgICAgICAgICBzZXQu
YWRkKFN0cmluZzo6ZnJvbVVURjgoImF1ZGlvL3gtbXAzIikpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShfR1NUX0FVRElPX0RFQ09E
RVIsICJhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KXsyLCA0fSIpKSB7CisgICAgICAgICAg
ICBhdWRpb01wZWdTdXBwb3J0ZWQgPSB0cnVlOworICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6
OmZyb21VVEY4KCJhdWRpby9hYWMiKSk7CisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJv
bVVURjgoImF1ZGlvL21wMiIpKTsKKyAgICAgICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRG
OCgiYXVkaW8vbXA0IikpOworICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJh
dWRpby94LW00YSIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdWRpb01wZWdTdXBwb3J0
ZWQpIHsKKyAgICAgICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgiYXVkaW8vbXBlZyIp
KTsKKyAgICAgICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgiYXVkaW8veC1tcGVnIikp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlh
VHlwZShfR1NUX0FVRElPX0RFQ09ERVIsICJhdWRpby9taWRpIikpIHsKKyAgICAgICAgICAgIHNl
dC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgiYXVkaW8vbWlkaSIpKTsKKyAgICAgICAgICAgIHNldC5h
ZGQoU3RyaW5nOjpmcm9tVVRGOCgiYXVkaW8vcmlmZi1taWRpIikpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShfR1NUX0FVRElPX0RF
Q09ERVIsICJhdWRpby94LXNiYyIpKQorICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21V
VEY4KCJhdWRpby94LXNiYyIpKTsKKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50
Rm9yTWVkaWFUeXBlKF9HU1RfQVVESU9fREVDT0RFUiwgImF1ZGlvL3gtc2lkIikpCisgICAgICAg
ICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoImF1ZGlvL3gtc2lkIikpOworCisgICAgICAg
IGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoX0dTVF9BVURJT19ERUNPREVS
LCAiYXVkaW8veC1mbGFjIikpIHsKKyAgICAgICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRG
OCgiYXVkaW8veC1mbGFjIikpOworICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4
KCJhdWRpby9mbGFjIikpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFz
RWxlbWVudEZvck1lZGlhVHlwZShfR1NUX0FVRElPX0RFQ09ERVIsICJhdWRpby94LXdhdiIpIHx8
IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShHU1RfRUxFTUVOVF9GQUNUT1JZX1RZ
UEVfREVNVVhFUiwgImF1ZGlvL3gtd2F2IikpIHsKKyAgICAgICAgICAgIHNldC5hZGQoU3RyaW5n
Ojpmcm9tVVRGOCgiYXVkaW8vd2F2IikpOworICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZy
b21VVEY4KCJhdWRpby94LXdhdiIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChnc3RSZWdp
c3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoX0dTVF9BVURJT19ERUNPREVSLCAiYXVkaW8veC13
YXZwYWNrIikpIHsKKyAgICAgICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgiYXVkaW8v
eC13YXZwYWNrIikpOworICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJhdWRp
by94LXdhdnBhY2stY29ycmVjdGlvbiIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChnc3RS
ZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoX0dTVF9BVURJT19ERUNPREVSLCAiYXVkaW8v
eC1zcGVleCIpKSB7CisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoImF1ZGlv
L3NwZWV4IikpOworICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJhdWRpby94
LXNwZWV4IikpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVu
dEZvck1lZGlhVHlwZShfR1NUX0FVRElPX0RFQ09ERVIsICJhdWRpby94LW9wdXMiKSkKKyAgICAg
ICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgiYXVkaW8vb3B1cyIpKTsKKworICAgICAg
ICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKF9HU1RfQVVESU9fREVDT0RF
UiwgImF1ZGlvL3gtYWMzIikgfHwgZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKF9H
U1RfQVVESU9fREVDT0RFUiwgImF1ZGlvL3gtZWFjMyIpKQorICAgICAgICAgICAgc2V0LmFkZChT
dHJpbmc6OmZyb21VVEY4KCJhdWRpby94LWFjMyIpKTsKKworICAgICAgICBpZiAoZ3N0UmVnaXN0
cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKF9HU1RfQVVESU9fREVDT0RFUiwgImF1ZGlvL3gtZHRz
IikpCisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoImF1ZGlvL3gtZHRzIikp
OworCisgICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoR1NUX0VM
RU1FTlRfRkFDVE9SWV9UWVBFX0RFTVVYRVIsICJ2aWRlby94LW1hdHJvc2thIikpIHsKKyAgICAg
ICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgidmlkZW8veC1tYXRyb3NrYSIpKTsKKwor
ICAgICAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShfR1NUX1ZJ
REVPX0RFQ09ERVIsICJ2aWRlby94LXZwOCIpIHx8IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1l
ZGlhVHlwZShfR1NUX1ZJREVPX0RFQ09ERVIsICJ2aWRlby94LXZwOSIpKQorICAgICAgICAgICAg
ICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgidmlkZW8vd2VibSIpKTsKKworICAgICAgICAg
ICAgaWYgKHZvcmJpc1N1cHBvcnRlZCkKKyAgICAgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6
ZnJvbVVURjgoImF1ZGlvL3dlYm0iKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ3N0UmVn
aXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERU1V
WEVSLCAiYXBwbGljYXRpb24veC1obHMiKSkgeworICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6
OmZyb21VVEY4KCJhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3VybCIpKTsKKyAgICAgICAgICAg
IHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgiYXBwbGljYXRpb24veC1tcGVndXJsIikpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShf
R1NUX1ZJREVPX0RFQ09ERVIsICJ2aWRlby94LWRpcmFjIikpCisgICAgICAgICAgICBzZXQuYWRk
KFN0cmluZzo6ZnJvbVVURjgoInZpZGVvL3gtZGlyYWMiKSk7CisKKyAgICAgICAgaWYgKGdzdFJl
Z2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShfR1NUX1ZJREVPX0RFQ09ERVIsICJ2aWRlby94
LWZsYXNoLXZpZGVvIikpIHsKKyAgICAgICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgi
dmlkZW8vZmx2IikpOworICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJ2aWRl
by94LWZsdiIpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHJldHVybiBzZXQ7CiAgICAgfSgpOwot
ICAgIHJldHVybiBjYWNoZTsKKyAgICByZXR1cm4gbWltZVR5cGVzOwogfQogCiB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmcs
IEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIHR5cGVzKQogewotICAgIHR5cGVzID0gbWltZVR5
cGVDYWNoZSgpOworICAgIHR5cGVzID0gbWltZVR5cGVTZXQoKTsKIH0KIAogTWVkaWFQbGF5ZXI6
OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZShj
b25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQpAQCAtMTc4MCw3
ICsxODI3LDcgQEAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUUKICAgICAgICAgcmV0dXJuIE1lZGlh
UGxheWVyOjpJc05vdFN1cHBvcnRlZDsKIAogICAgIC8vIHNwZWMgc2F5cyB3ZSBzaG91bGQgbm90
IHJldHVybiAicHJvYmFibHkiIGlmIHRoZSBjb2RlY3Mgc3RyaW5nIGlzIGVtcHR5Ci0gICAgaWYg
KG1pbWVUeXBlQ2FjaGUoKS5jb250YWlucyhwYXJhbWV0ZXJzLnR5cGUpKQorICAgIGlmIChtaW1l
VHlwZVNldCgpLmNvbnRhaW5zKHBhcmFtZXRlcnMudHlwZSkpCiAgICAgICAgIHJldHVybiBwYXJh
bWV0ZXJzLmNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5QmVTdXBwb3J0ZWQgOiBN
ZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQ7CiAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1
cHBvcnRlZDsKIH0KLS0gCjIuOC4x
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278931</attachid>
            <date>2016-05-14 04:46:14 -0700</date>
            <delta_ts>2016-05-18 06:00:13 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>15147</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSAxNWI3ZThmYTA2NDdlNzhhNTNjZTE4MGRjODEwNTMyMjNkMDViMzA0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBTYXQsIDE0IE1heSAyMDE2IDEyOjUwOjU5ICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
cGF0Y2gKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgMjUgKysrCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGll
cy5jcHAgICAgICB8ICAxMSArCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxp
dGllcy5oICAgICAgICB8ICAgMiArLQogLi4uL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIuY3BwICAgICAgfCAyNDkgKysrKysrKysrKysrKy0tLS0tLS0tCiA0IGZpbGVzIGNo
YW5nZWQsIDE4NyBpbnNlcnRpb25zKCspLCAxMDAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDNlMDM5MTUuLjQxM2FkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxNi0wNS0x
NCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dT
dHJlYW1lcl0gdW5yZWxhdGVkIGNvZGVjcyByZXF1aXJlZCB0byBwbGF5IHZpZGVvcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTcyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zdGVhZCBvZiBoYXJk
LWNvZGluZyB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgbWltZS10eXBlcywgY2hlY2sgdGhlCisgICAg
ICAgIGRlY29kZXIgYW5kIGRlbXV4ZXIgR1N0cmVhbWVyIGVsZW1lbnRzIGF2YWlsYWJsZSBhbmQg
ZHluYW1pY2FsbHkKKyAgICAgICAgYnVpbGQgdGhlIGxpc3Qgb2YgbWltZS10eXBlcyBhY2NvcmRp
bmdseS4gVGhpcyBwYXRjaCBhbHNvIHJlbW92ZXMKKyAgICAgICAgc3VwcG9ydCBmb3IgdW5kZXIt
dXNlZCBhbmQgZXhvdGljIG1pbWUtdHlwZXMuCisKKyAgICAgICAgQmFzZWQgb24gYSBwYXRjaCBi
eSBNYXJpbyBTYW5jaGV6IFByYWRhLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgZXhpc3Rpbmcg
bWVkaWEgdGVzdHMgY292ZXIgdGhpcyBjaGFuZ2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGllcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bWltZVR5cGVTZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpnZXRTdXBwb3J0ZWRUeXBlcyk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjptaW1lVHlwZUNhY2hlKTogRGVsZXRlZC4KKwogMjAxNi0wNS0xMiAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIERyb3AgV29ya2VyR2xvYmFsU2Nv
cGUncyBjdXN0b20gR2V0T3duUHJvcGVydHlTbG90KCkgaW1wbGVtZW50YXRpb24KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJV
dGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0dTdHJlYW1lclV0aWxpdGllcy5jcHAKaW5kZXggNzQ1OGM2Yy4uNTU5NjExOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0
aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dTdHJlYW1lclV0aWxpdGllcy5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpZiBVU0UoR1NU
UkVBTUVSKQogI2luY2x1ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgogCisjaW5jbHVkZSAiR1Jl
ZlB0ckdTdHJlYW1lci5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKIAogI2luY2x1ZGUgPGdzdC9h
dWRpby9hdWRpby1pbmZvLmg+CkBAIC0xODUsNiArMTg2LDE2IEBAIEdzdENsb2NrVGltZSB0b0dz
dENsb2NrVGltZShmbG9hdCB0aW1lKQogICAgIHJldHVybiBHU1RfVElNRVZBTF9UT19USU1FKHRp
bWVWYWx1ZSk7CiB9CiAKK2Jvb2wgZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKEdM
aXN0KiBlbGVtZW50RmFjdG9yaWVzLCBjb25zdCBjaGFyKiBjYXBzU3RyaW5nKQoreworICAgIEdS
ZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19mcm9tX3N0cmluZyhjYXBz
U3RyaW5nKSk7CisgICAgR0xpc3QqIGNhbmRpZGF0ZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2xp
c3RfZmlsdGVyKGVsZW1lbnRGYWN0b3JpZXMsIGNhcHMuZ2V0KCksIEdTVF9QQURfU0lOSywgZmFs
c2UpOworICAgIGJvb2wgcmVzdWx0ID0gY2FuZGlkYXRlczsKKworICAgIGdzdF9wbHVnaW5fZmVh
dHVyZV9saXN0X2ZyZWUoY2FuZGlkYXRlcyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfQog
CiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJVdGlsaXRpZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJVdGlsaXRpZXMuaApp
bmRleCBlOTgwZjgzLi5mNTVkMGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGllcy5oCkBA
IC03Niw1ICs3Niw1IEBAIHZvaWQgdW5tYXBHc3RCdWZmZXIoR3N0QnVmZmVyKik7CiBib29sIGlu
aXRpYWxpemVHU3RyZWFtZXIoKTsKIHVuc2lnbmVkIGdldEdzdFBsYXlGbGFnKGNvbnN0IGNoYXIq
IG5pY2spOwogR3N0Q2xvY2tUaW1lIHRvR3N0Q2xvY2tUaW1lKGZsb2F0IHRpbWUpOwotCitib29s
IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShHTGlzdCogZWxlbWVudEZhY3Rvcmll
cywgY29uc3QgY2hhciogY2Fwc1N0cmluZyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IGQ5NzU1MjcuLjRjYTkyOGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0xNjYwLDEx
MyArMTY2MCwxNjQgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWRpbmdG
YWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcikKICAgICBtX3JlYWR5VGltZXJI
YW5kbGVyLnN0b3AoKTsKIH0KIAotLy8gRklYTUU6IEluIHdoYXQgc2Vuc2UgaXMgdGhpcyBhICJj
YWNoZSI/Ci1zdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4m
IG1pbWVUeXBlQ2FjaGUoKQorc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNp
dGl2ZUhhc2g+JiBtaW1lVHlwZVNldCgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhh
c2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBjYWNoZSA9IFtdKCkgewor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5z
aXRpdmVIYXNoPj4gbWltZVR5cGVzID0gW10oKQorICAgIHsKICAgICAgICAgaW5pdGlhbGl6ZUdT
dHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMoKTsKICAgICAgICAgSGFzaFNldDxTdHJp
bmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gc2V0OwotICAgICAgICBjb25zdCBjaGFyKiBt
aW1lVHlwZXNbXSA9IHsKLSAgICAgICAgICAgICJhcHBsaWNhdGlvbi9vZ2ciLAotICAgICAgICAg
ICAgImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsIiwKLSAgICAgICAgICAgICJhcHBsaWNh
dGlvbi92bmQucm4tcmVhbG1lZGlhIiwKLSAgICAgICAgICAgICJhcHBsaWNhdGlvbi94LTNncCIs
Ci0gICAgICAgICAgICAiYXBwbGljYXRpb24veC1wbi1yZWFsYXVkaW8iLAotICAgICAgICAgICAg
ImFwcGxpY2F0aW9uL3gtbXBlZ3VybCIsCi0gICAgICAgICAgICAiYXVkaW8vM2dwcCIsCi0gICAg
ICAgICAgICAiYXVkaW8vYWFjIiwKLSAgICAgICAgICAgICJhdWRpby9mbGFjIiwKLSAgICAgICAg
ICAgICJhdWRpby9pTEJDLXNoIiwKLSAgICAgICAgICAgICJhdWRpby9taWRpIiwKLSAgICAgICAg
ICAgICJhdWRpby9tb2JpbGUteG1mIiwKLSAgICAgICAgICAgICJhdWRpby9tcDEiLAotICAgICAg
ICAgICAgImF1ZGlvL21wMiIsCi0gICAgICAgICAgICAiYXVkaW8vbXAzIiwKLSAgICAgICAgICAg
ICJhdWRpby9tcDQiLAotICAgICAgICAgICAgImF1ZGlvL21wZWciLAotICAgICAgICAgICAgImF1
ZGlvL29nZyIsCi0gICAgICAgICAgICAiYXVkaW8vb3B1cyIsCi0gICAgICAgICAgICAiYXVkaW8v
cWNlbHAiLAotICAgICAgICAgICAgImF1ZGlvL3JpZmYtbWlkaSIsCi0gICAgICAgICAgICAiYXVk
aW8vc3BlZXgiLAotICAgICAgICAgICAgImF1ZGlvL3dhdiIsCi0gICAgICAgICAgICAiYXVkaW8v
d2VibSIsCi0gICAgICAgICAgICAiYXVkaW8veC1hYzMiLAotICAgICAgICAgICAgImF1ZGlvL3gt
YWlmZiIsCi0gICAgICAgICAgICAiYXVkaW8veC1hbXItbmItc2giLAotICAgICAgICAgICAgImF1
ZGlvL3gtYW1yLXdiLXNoIiwKLSAgICAgICAgICAgICJhdWRpby94LWF1IiwKLSAgICAgICAgICAg
ICJhdWRpby94LWF5IiwKLSAgICAgICAgICAgICJhdWRpby94LWNlbHQiLAotICAgICAgICAgICAg
ImF1ZGlvL3gtZHRzIiwKLSAgICAgICAgICAgICJhdWRpby94LWZsYWMiLAotICAgICAgICAgICAg
ImF1ZGlvL3gtZ2JzIiwKLSAgICAgICAgICAgICJhdWRpby94LWdzbSIsCi0gICAgICAgICAgICAi
YXVkaW8veC1neW0iLAotICAgICAgICAgICAgImF1ZGlvL3gtaW1lbG9keSIsCi0gICAgICAgICAg
ICAiYXVkaW8veC1pcmNhbSIsCi0gICAgICAgICAgICAiYXVkaW8veC1rc3MiLAotICAgICAgICAg
ICAgImF1ZGlvL3gtbTRhIiwKLSAgICAgICAgICAgICJhdWRpby94LW1vZCIsCi0gICAgICAgICAg
ICAiYXVkaW8veC1tcDMiLAotICAgICAgICAgICAgImF1ZGlvL3gtbXBlZyIsCi0gICAgICAgICAg
ICAiYXVkaW8veC1tdXNlcGFjayIsCi0gICAgICAgICAgICAiYXVkaW8veC1uaXN0IiwKLSAgICAg
ICAgICAgICJhdWRpby94LW5zZiIsCi0gICAgICAgICAgICAiYXVkaW8veC1wYXJpcyIsCi0gICAg
ICAgICAgICAiYXVkaW8veC1zYXAiLAotICAgICAgICAgICAgImF1ZGlvL3gtc2JjIiwKLSAgICAg
ICAgICAgICJhdWRpby94LXNkcyIsCi0gICAgICAgICAgICAiYXVkaW8veC1zaG9ydGVuIiwKLSAg
ICAgICAgICAgICJhdWRpby94LXNpZCIsCi0gICAgICAgICAgICAiYXVkaW8veC1zcGMiLAotICAg
ICAgICAgICAgImF1ZGlvL3gtc3BlZXgiLAotICAgICAgICAgICAgImF1ZGlvL3gtc3Z4IiwKLSAg
ICAgICAgICAgICJhdWRpby94LXR0YWZpbGUiLAotICAgICAgICAgICAgImF1ZGlvL3gtdmdtIiwK
LSAgICAgICAgICAgICJhdWRpby94LXZvYyIsCi0gICAgICAgICAgICAiYXVkaW8veC12b3JiaXMr
b2dnIiwKLSAgICAgICAgICAgICJhdWRpby94LXc2NCIsCi0gICAgICAgICAgICAiYXVkaW8veC13
YXYiLAotICAgICAgICAgICAgImF1ZGlvL3gtd2F2cGFjayIsCi0gICAgICAgICAgICAiYXVkaW8v
eC13YXZwYWNrLWNvcnJlY3Rpb24iLAotICAgICAgICAgICAgInZpZGVvLzNncHAiLAotICAgICAg
ICAgICAgInZpZGVvL2ZsdiIsCi0gICAgICAgICAgICAidmlkZW8vbWoyIiwKLSAgICAgICAgICAg
ICJ2aWRlby9tcDJ0IiwKLSAgICAgICAgICAgICJ2aWRlby9tcDQiLAotICAgICAgICAgICAgInZp
ZGVvL21wZWciLAotICAgICAgICAgICAgInZpZGVvL21wZWd0cyIsCi0gICAgICAgICAgICAidmlk
ZW8vb2dnIiwKLSAgICAgICAgICAgICJ2aWRlby9xdWlja3RpbWUiLAotICAgICAgICAgICAgInZp
ZGVvL3Zpdm8iLAotICAgICAgICAgICAgInZpZGVvL3dlYm0iLAotICAgICAgICAgICAgInZpZGVv
L3gtY2R4YSIsCi0gICAgICAgICAgICAidmlkZW8veC1kaXJhYyIsCi0gICAgICAgICAgICAidmlk
ZW8veC1kdiIsCi0gICAgICAgICAgICAidmlkZW8veC1mbGkiLAotICAgICAgICAgICAgInZpZGVv
L3gtZmx2IiwKLSAgICAgICAgICAgICJ2aWRlby94LWgyNjMiLAotICAgICAgICAgICAgInZpZGVv
L3gtaXZmIiwKLSAgICAgICAgICAgICJ2aWRlby94LW00diIsCi0gICAgICAgICAgICAidmlkZW8v
eC1tYXRyb3NrYSIsCi0gICAgICAgICAgICAidmlkZW8veC1tbmciLAotICAgICAgICAgICAgInZp
ZGVvL3gtbXMtYXNmIiwKLSAgICAgICAgICAgICJ2aWRlby94LW1zdmlkZW8iLAotICAgICAgICAg
ICAgInZpZGVvL3gtbXZlIiwKLSAgICAgICAgICAgICJ2aWRlby94LW51diIsCi0gICAgICAgICAg
ICAidmlkZW8veC12Y2QiCi0gICAgICAgIH07Ci0gICAgICAgIGZvciAoYXV0byYgdHlwZSA6IG1p
bWVUeXBlcykKLSAgICAgICAgICAgIHNldC5hZGQodHlwZSk7CisKKyAgICAgICAgR0xpc3QqIGF1
ZGlvRGVjb2RlckZhY3RvcmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVu
dHMoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZ
X1RZUEVfTUVESUFfQVVESU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKKyAgICAgICAgR0xpc3QqIHZp
ZGVvRGVjb2RlckZhY3RvcmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVu
dHMoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZ
X1RZUEVfTUVESUFfVklERU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKKyAgICAgICAgR0xpc3QqIGRl
bXV4ZXJGYWN0b3JpZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1lbnRzKEdT
VF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERU1VWEVSLCBHU1RfUkFOS19NQVJHSU5BTCk7CisKKyAg
ICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShkZW11eGVyRmFjdG9y
aWVzLCAidmlkZW8vcXVpY2t0aW1lIikpCisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJv
bVVURjgoInZpZGVvL3F1aWNrdGltZSIpKTsKKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNF
bGVtZW50Rm9yTWVkaWFUeXBlKGRlbXV4ZXJGYWN0b3JpZXMsICJ2aWRlby9xdWlja3RpbWUsIHZh
cmlhbnQ9KHN0cmluZykzZ3BwIikpCisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVU
RjgoInZpZGVvLzNncHAiKSk7CisKKyAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZv
ck1lZGlhVHlwZShkZW11eGVyRmFjdG9yaWVzLCAiYXBwbGljYXRpb24veC0zZ3AiKSkKKyAgICAg
ICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgiYXBwbGljYXRpb24veC0zZ3AiKSk7CisK
KyAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShkZW11eGVyRmFj
dG9yaWVzLCAidmlkZW8veC1tcy1hc2YiKSkKKyAgICAgICAgICAgIHNldC5hZGQoU3RyaW5nOjpm
cm9tVVRGOCgidmlkZW8veC1tcy1hc2YiKSk7CisKKyAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFz
RWxlbWVudEZvck1lZGlhVHlwZShkZW11eGVyRmFjdG9yaWVzLCAiYXVkaW8veC1haWZmIikpCisg
ICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoImF1ZGlvL3gtYWlmZiIpKTsKKwor
ICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGRlbXV4ZXJGYWN0
b3JpZXMsICJhcHBsaWNhdGlvbi94LXBuLXJlYWxhdWRpbyIpKQorICAgICAgICAgICAgc2V0LmFk
ZChTdHJpbmc6OmZyb21VVEY4KCJhcHBsaWNhdGlvbi94LXBuLXJlYWxhdWRpbyIpKTsKKworICAg
ICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGRlbXV4ZXJGYWN0b3Jp
ZXMsICJhcHBsaWNhdGlvbi92bmQucm4tcmVhbG1lZGlhIikpCisgICAgICAgICAgICBzZXQuYWRk
KFN0cmluZzo6ZnJvbVVURjgoImFwcGxpY2F0aW9uL3ZuZC5ybi1yZWFsbWVkaWEiKSk7CisKKyAg
ICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZSh2aWRlb0RlY29kZXJG
YWN0b3JpZXMsICJ2aWRlby94LW1zdmlkZW9jb2RlYyIpKQorICAgICAgICAgICAgc2V0LmFkZChT
dHJpbmc6OmZyb21VVEY4KCJ2aWRlby94LW1zdmlkZW8iKSk7CisKKyAgICAgICAgaWYgKGdzdFJl
Z2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZSh2aWRlb0RlY29kZXJGYWN0b3JpZXMsICJ2aWRl
by94LWgyNjQiKSkgeworICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJ2aWRl
by9tcDQiKSk7CisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoInZpZGVvL3gt
bTR2IikpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZv
ck1lZGlhVHlwZSh2aWRlb0RlY29kZXJGYWN0b3JpZXMsICJ2aWRlby94LWgyNjMiKSkKKyAgICAg
ICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgidmlkZW8veC1oMjYzIikpOworCisgICAg
ICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUodmlkZW9EZWNvZGVyRmFj
dG9yaWVzLCAidmlkZW8vbXBlZ3RzIikpCisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJv
bVVURjgoInZpZGVvL21wZWd0cyIpKTsKKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVt
ZW50Rm9yTWVkaWFUeXBlKHZpZGVvRGVjb2RlckZhY3RvcmllcywgInZpZGVvL21wZWcsIG1wZWd2
ZXJzaW9uPShpbnQpMSIpKQorICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJ2
aWRlby9tcGVnIikpOworCisgICAgICAgIGJvb2wgdm9yYmlzU3VwcG9ydGVkID0gZmFsc2U7Cisg
ICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoZGVtdXhlckZhY3Rv
cmllcywgImFwcGxpY2F0aW9uL29nZyIpKSB7CisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6
ZnJvbVVURjgoImFwcGxpY2F0aW9uL29nZyIpKTsKKworICAgICAgICAgICAgdm9yYmlzU3VwcG9y
dGVkID0gZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGF1ZGlvRGVjb2RlckZhY3Rv
cmllcywgImF1ZGlvL3gtdm9yYmlzIik7CisgICAgICAgICAgICBpZiAodm9yYmlzU3VwcG9ydGVk
KSB7CisgICAgICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJhdWRpby9vZ2ci
KSk7CisgICAgICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJhdWRpby94LXZv
cmJpcytvZ2ciKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChnc3RSZWdpc3Ry
eUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUodmlkZW9EZWNvZGVyRmFjdG9yaWVzLCAidmlkZW8veC10
aGVvcmEiKSkKKyAgICAgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoInZpZGVv
L29nZyIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgYXVkaW9NcGVnU3VwcG9ydGVkID0g
ZmFsc2U7CisgICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVk
aW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXll
cj0oaW50KVsxLCAzXSIpKSB7CisgICAgICAgICAgICBhdWRpb01wZWdTdXBwb3J0ZWQgPSB0cnVl
OworICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJhdWRpby9tcDEiKSk7Cisg
ICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoImF1ZGlvL21wMyIpKTsKKyAgICAg
ICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgiYXVkaW8veC1tcDMiKSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGF1ZGlv
RGVjb2RlckZhY3RvcmllcywgImF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpezIsIDR9Iikp
IHsKKyAgICAgICAgICAgIGF1ZGlvTXBlZ1N1cHBvcnRlZCA9IHRydWU7CisgICAgICAgICAgICBz
ZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoImF1ZGlvL2FhYyIpKTsKKyAgICAgICAgICAgIHNldC5h
ZGQoU3RyaW5nOjpmcm9tVVRGOCgiYXVkaW8vbXAyIikpOworICAgICAgICAgICAgc2V0LmFkZChT
dHJpbmc6OmZyb21VVEY4KCJhdWRpby9tcDQiKSk7CisgICAgICAgICAgICBzZXQuYWRkKFN0cmlu
Zzo6ZnJvbVVURjgoImF1ZGlvL3gtbTRhIikpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1
ZGlvTXBlZ1N1cHBvcnRlZCkgeworICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4
KCJhdWRpby9tcGVnIikpOworICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJh
dWRpby94LW1wZWciKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNF
bGVtZW50Rm9yTWVkaWFUeXBlKGF1ZGlvRGVjb2RlckZhY3RvcmllcywgImF1ZGlvL21pZGkiKSkg
eworICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJhdWRpby9taWRpIikpOwor
ICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJhdWRpby9yaWZmLW1pZGkiKSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFU
eXBlKGF1ZGlvRGVjb2RlckZhY3RvcmllcywgImF1ZGlvL3gtc2JjIikpCisgICAgICAgICAgICBz
ZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoImF1ZGlvL3gtc2JjIikpOworCisgICAgICAgIGlmIChn
c3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAi
YXVkaW8veC1zaWQiKSkKKyAgICAgICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgiYXVk
aW8veC1zaWQiKSk7CisKKyAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlh
VHlwZShhdWRpb0RlY29kZXJGYWN0b3JpZXMsICJhdWRpby94LWZsYWMiKSkgeworICAgICAgICAg
ICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJhdWRpby94LWZsYWMiKSk7CisgICAgICAgICAg
ICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoImF1ZGlvL2ZsYWMiKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGF1ZGlvRGVjb2Rl
ckZhY3RvcmllcywgImF1ZGlvL3gtd2F2IikgfHwgZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVk
aWFUeXBlKGRlbXV4ZXJGYWN0b3JpZXMsICJhdWRpby94LXdhdiIpKSB7CisgICAgICAgICAgICBz
ZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoImF1ZGlvL3dhdiIpKTsKKyAgICAgICAgICAgIHNldC5h
ZGQoU3RyaW5nOjpmcm9tVVRGOCgiYXVkaW8veC13YXYiKSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGF1ZGlvRGVjb2RlckZhY3Rv
cmllcywgImF1ZGlvL3gtd2F2cGFjayIpKSB7CisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6
ZnJvbVVURjgoImF1ZGlvL3gtd2F2cGFjayIpKTsKKyAgICAgICAgICAgIHNldC5hZGQoU3RyaW5n
Ojpmcm9tVVRGOCgiYXVkaW8veC13YXZwYWNrLWNvcnJlY3Rpb24iKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGF1ZGlvRGVjb2Rl
ckZhY3RvcmllcywgImF1ZGlvL3gtc3BlZXgiKSkgeworICAgICAgICAgICAgc2V0LmFkZChTdHJp
bmc6OmZyb21VVEY4KCJhdWRpby9zcGVleCIpKTsKKyAgICAgICAgICAgIHNldC5hZGQoU3RyaW5n
Ojpmcm9tVVRGOCgiYXVkaW8veC1zcGVleCIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChn
c3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAi
YXVkaW8veC1vcHVzIikpCisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoImF1
ZGlvL29wdXMiKSk7CisKKyAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlh
VHlwZShhdWRpb0RlY29kZXJGYWN0b3JpZXMsICJhdWRpby94LWFjMyIpIHx8IGdzdFJlZ2lzdHJ5
SGFzRWxlbWVudEZvck1lZGlhVHlwZShhdWRpb0RlY29kZXJGYWN0b3JpZXMsICJhdWRpby94LWVh
YzMiKSkKKyAgICAgICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgiYXVkaW8veC1hYzMi
KSk7CisKKyAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShhdWRp
b0RlY29kZXJGYWN0b3JpZXMsICJhdWRpby94LWR0cyIpKQorICAgICAgICAgICAgc2V0LmFkZChT
dHJpbmc6OmZyb21VVEY4KCJhdWRpby94LWR0cyIpKTsKKworICAgICAgICBpZiAoZ3N0UmVnaXN0
cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGRlbXV4ZXJGYWN0b3JpZXMsICJ2aWRlby94LW1hdHJv
c2thIikpIHsKKyAgICAgICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgidmlkZW8veC1t
YXRyb3NrYSIpKTsKKworICAgICAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1l
ZGlhVHlwZSh2aWRlb0RlY29kZXJGYWN0b3JpZXMsICJ2aWRlby94LXZwOCIpIHx8IGdzdFJlZ2lz
dHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZSh2aWRlb0RlY29kZXJGYWN0b3JpZXMsICJ2aWRlby94
LXZwOSIpKQorICAgICAgICAgICAgICAgIHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgidmlkZW8v
d2VibSIpKTsKKworICAgICAgICAgICAgaWYgKHZvcmJpc1N1cHBvcnRlZCkKKyAgICAgICAgICAg
ICAgICBzZXQuYWRkKFN0cmluZzo6ZnJvbVVURjgoImF1ZGlvL3dlYm0iKSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGRlbXV4ZXJG
YWN0b3JpZXMsICJhcHBsaWNhdGlvbi94LWhscyIpKSB7CisgICAgICAgICAgICBzZXQuYWRkKFN0
cmluZzo6ZnJvbVVURjgoImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsIikpOworICAgICAg
ICAgICAgc2V0LmFkZChTdHJpbmc6OmZyb21VVEY4KCJhcHBsaWNhdGlvbi94LW1wZWd1cmwiKSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFU
eXBlKHZpZGVvRGVjb2RlckZhY3RvcmllcywgInZpZGVvL3gtZGlyYWMiKSkKKyAgICAgICAgICAg
IHNldC5hZGQoU3RyaW5nOjpmcm9tVVRGOCgidmlkZW8veC1kaXJhYyIpKTsKKworICAgICAgICBp
ZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKHZpZGVvRGVjb2RlckZhY3Rvcmll
cywgInZpZGVvL3gtZmxhc2gtdmlkZW8iKSkgeworICAgICAgICAgICAgc2V0LmFkZChTdHJpbmc6
OmZyb21VVEY4KCJ2aWRlby9mbHYiKSk7CisgICAgICAgICAgICBzZXQuYWRkKFN0cmluZzo6ZnJv
bVVURjgoInZpZGVvL3gtZmx2IikpOworICAgICAgICB9CisKKyAgICAgICAgZ3N0X3BsdWdpbl9m
ZWF0dXJlX2xpc3RfZnJlZShhdWRpb0RlY29kZXJGYWN0b3JpZXMpOworICAgICAgICBnc3RfcGx1
Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKHZpZGVvRGVjb2RlckZhY3Rvcmllcyk7CisgICAgICAgIGdz
dF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUoZGVtdXhlckZhY3Rvcmllcyk7CiAgICAgICAgIHJl
dHVybiBzZXQ7CiAgICAgfSgpOwotICAgIHJldHVybiBjYWNoZTsKKyAgICByZXR1cm4gbWltZVR5
cGVzOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Z2V0U3VwcG9ydGVk
VHlwZXMoSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIHR5cGVzKQog
ewotICAgIHR5cGVzID0gbWltZVR5cGVDYWNoZSgpOworICAgIHR5cGVzID0gbWltZVR5cGVTZXQo
KTsKIH0KIAogTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJiBw
YXJhbWV0ZXJzKQpAQCAtMTc4MCw3ICsxODMxLDcgQEAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlw
ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUUK
ICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKIAogICAgIC8vIHNw
ZWMgc2F5cyB3ZSBzaG91bGQgbm90IHJldHVybiAicHJvYmFibHkiIGlmIHRoZSBjb2RlY3Mgc3Ry
aW5nIGlzIGVtcHR5Ci0gICAgaWYgKG1pbWVUeXBlQ2FjaGUoKS5jb250YWlucyhwYXJhbWV0ZXJz
LnR5cGUpKQorICAgIGlmIChtaW1lVHlwZVNldCgpLmNvbnRhaW5zKHBhcmFtZXRlcnMudHlwZSkp
CiAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJzLmNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBsYXll
cjo6TWF5QmVTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQ7CiAgICAgcmV0dXJu
IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKIH0KLS0gCjIuOC4x
</data>
<flag name="review"
          id="303000"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279237</attachid>
            <date>2016-05-18 06:00:13 -0700</date>
            <delta_ts>2016-05-18 06:10:01 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>13748</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBjMjkyNGU3YzlhZmI5MzhjM2Q5MTI5ZTU1OWQxNWM3NjFmMTNkMmMyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBTYXQsIDE0IE1heSAyMDE2IDEyOjUwOjU5ICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
cGF0Y2gKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgMjUgKysrCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGll
cy5jcHAgICAgICB8ICAxMSArKwogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJVdGls
aXRpZXMuaCAgICAgICAgfCAgIDIgKy0KIC4uLi9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcCAgICAgIHwgMjIwICsrKysrKysrKysrKy0tLS0tLS0tLQogNCBmaWxlcyBj
aGFuZ2VkLCAxNTkgaW5zZXJ0aW9ucygrKSwgOTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDNlMDM5MTUuLjQxM2FkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxNi0wNS0x
NCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dT
dHJlYW1lcl0gdW5yZWxhdGVkIGNvZGVjcyByZXF1aXJlZCB0byBwbGF5IHZpZGVvcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTcyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zdGVhZCBvZiBoYXJk
LWNvZGluZyB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgbWltZS10eXBlcywgY2hlY2sgdGhlCisgICAg
ICAgIGRlY29kZXIgYW5kIGRlbXV4ZXIgR1N0cmVhbWVyIGVsZW1lbnRzIGF2YWlsYWJsZSBhbmQg
ZHluYW1pY2FsbHkKKyAgICAgICAgYnVpbGQgdGhlIGxpc3Qgb2YgbWltZS10eXBlcyBhY2NvcmRp
bmdseS4gVGhpcyBwYXRjaCBhbHNvIHJlbW92ZXMKKyAgICAgICAgc3VwcG9ydCBmb3IgdW5kZXIt
dXNlZCBhbmQgZXhvdGljIG1pbWUtdHlwZXMuCisKKyAgICAgICAgQmFzZWQgb24gYSBwYXRjaCBi
eSBNYXJpbyBTYW5jaGV6IFByYWRhLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgZXhpc3Rpbmcg
bWVkaWEgdGVzdHMgY292ZXIgdGhpcyBjaGFuZ2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGllcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bWltZVR5cGVTZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpnZXRTdXBwb3J0ZWRUeXBlcyk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjptaW1lVHlwZUNhY2hlKTogRGVsZXRlZC4KKwogMjAxNi0wNS0xMiAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIERyb3AgV29ya2VyR2xvYmFsU2Nv
cGUncyBjdXN0b20gR2V0T3duUHJvcGVydHlTbG90KCkgaW1wbGVtZW50YXRpb24KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJV
dGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0dTdHJlYW1lclV0aWxpdGllcy5jcHAKaW5kZXggNzQ1OGM2Yy4uNTU5NjExOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0
aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dTdHJlYW1lclV0aWxpdGllcy5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpZiBVU0UoR1NU
UkVBTUVSKQogI2luY2x1ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgogCisjaW5jbHVkZSAiR1Jl
ZlB0ckdTdHJlYW1lci5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKIAogI2luY2x1ZGUgPGdzdC9h
dWRpby9hdWRpby1pbmZvLmg+CkBAIC0xODUsNiArMTg2LDE2IEBAIEdzdENsb2NrVGltZSB0b0dz
dENsb2NrVGltZShmbG9hdCB0aW1lKQogICAgIHJldHVybiBHU1RfVElNRVZBTF9UT19USU1FKHRp
bWVWYWx1ZSk7CiB9CiAKK2Jvb2wgZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKEdM
aXN0KiBlbGVtZW50RmFjdG9yaWVzLCBjb25zdCBjaGFyKiBjYXBzU3RyaW5nKQoreworICAgIEdS
ZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19mcm9tX3N0cmluZyhjYXBz
U3RyaW5nKSk7CisgICAgR0xpc3QqIGNhbmRpZGF0ZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2xp
c3RfZmlsdGVyKGVsZW1lbnRGYWN0b3JpZXMsIGNhcHMuZ2V0KCksIEdTVF9QQURfU0lOSywgZmFs
c2UpOworICAgIGJvb2wgcmVzdWx0ID0gY2FuZGlkYXRlczsKKworICAgIGdzdF9wbHVnaW5fZmVh
dHVyZV9saXN0X2ZyZWUoY2FuZGlkYXRlcyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfQog
CiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJVdGlsaXRpZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJVdGlsaXRpZXMuaApp
bmRleCBlOTgwZjgzLi5mNTVkMGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGllcy5oCkBA
IC03Niw1ICs3Niw1IEBAIHZvaWQgdW5tYXBHc3RCdWZmZXIoR3N0QnVmZmVyKik7CiBib29sIGlu
aXRpYWxpemVHU3RyZWFtZXIoKTsKIHVuc2lnbmVkIGdldEdzdFBsYXlGbGFnKGNvbnN0IGNoYXIq
IG5pY2spOwogR3N0Q2xvY2tUaW1lIHRvR3N0Q2xvY2tUaW1lKGZsb2F0IHRpbWUpOwotCitib29s
IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShHTGlzdCogZWxlbWVudEZhY3Rvcmll
cywgY29uc3QgY2hhciogY2Fwc1N0cmluZyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IGQ5NzU1MjcuLmQ2NmNjZmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0xNjYwLDEx
MyArMTY2MCwxMzcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWRpbmdG
YWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcikKICAgICBtX3JlYWR5VGltZXJI
YW5kbGVyLnN0b3AoKTsKIH0KIAotLy8gRklYTUU6IEluIHdoYXQgc2Vuc2UgaXMgdGhpcyBhICJj
YWNoZSI/Ci1zdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4m
IG1pbWVUeXBlQ2FjaGUoKQorc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNp
dGl2ZUhhc2g+JiBtaW1lVHlwZVNldCgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhh
c2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBjYWNoZSA9IFtdKCkgewor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5z
aXRpdmVIYXNoPj4gbWltZVR5cGVzID0gW10oKQorICAgIHsKICAgICAgICAgaW5pdGlhbGl6ZUdT
dHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMoKTsKICAgICAgICAgSGFzaFNldDxTdHJp
bmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gc2V0OwotICAgICAgICBjb25zdCBjaGFyKiBt
aW1lVHlwZXNbXSA9IHsKLSAgICAgICAgICAgICJhcHBsaWNhdGlvbi9vZ2ciLAotICAgICAgICAg
ICAgImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsIiwKLSAgICAgICAgICAgICJhcHBsaWNh
dGlvbi92bmQucm4tcmVhbG1lZGlhIiwKLSAgICAgICAgICAgICJhcHBsaWNhdGlvbi94LTNncCIs
Ci0gICAgICAgICAgICAiYXBwbGljYXRpb24veC1wbi1yZWFsYXVkaW8iLAotICAgICAgICAgICAg
ImFwcGxpY2F0aW9uL3gtbXBlZ3VybCIsCi0gICAgICAgICAgICAiYXVkaW8vM2dwcCIsCi0gICAg
ICAgICAgICAiYXVkaW8vYWFjIiwKLSAgICAgICAgICAgICJhdWRpby9mbGFjIiwKLSAgICAgICAg
ICAgICJhdWRpby9pTEJDLXNoIiwKLSAgICAgICAgICAgICJhdWRpby9taWRpIiwKLSAgICAgICAg
ICAgICJhdWRpby9tb2JpbGUteG1mIiwKLSAgICAgICAgICAgICJhdWRpby9tcDEiLAotICAgICAg
ICAgICAgImF1ZGlvL21wMiIsCi0gICAgICAgICAgICAiYXVkaW8vbXAzIiwKLSAgICAgICAgICAg
ICJhdWRpby9tcDQiLAotICAgICAgICAgICAgImF1ZGlvL21wZWciLAotICAgICAgICAgICAgImF1
ZGlvL29nZyIsCi0gICAgICAgICAgICAiYXVkaW8vb3B1cyIsCi0gICAgICAgICAgICAiYXVkaW8v
cWNlbHAiLAotICAgICAgICAgICAgImF1ZGlvL3JpZmYtbWlkaSIsCi0gICAgICAgICAgICAiYXVk
aW8vc3BlZXgiLAotICAgICAgICAgICAgImF1ZGlvL3dhdiIsCi0gICAgICAgICAgICAiYXVkaW8v
d2VibSIsCi0gICAgICAgICAgICAiYXVkaW8veC1hYzMiLAotICAgICAgICAgICAgImF1ZGlvL3gt
YWlmZiIsCi0gICAgICAgICAgICAiYXVkaW8veC1hbXItbmItc2giLAotICAgICAgICAgICAgImF1
ZGlvL3gtYW1yLXdiLXNoIiwKLSAgICAgICAgICAgICJhdWRpby94LWF1IiwKLSAgICAgICAgICAg
ICJhdWRpby94LWF5IiwKLSAgICAgICAgICAgICJhdWRpby94LWNlbHQiLAotICAgICAgICAgICAg
ImF1ZGlvL3gtZHRzIiwKLSAgICAgICAgICAgICJhdWRpby94LWZsYWMiLAotICAgICAgICAgICAg
ImF1ZGlvL3gtZ2JzIiwKLSAgICAgICAgICAgICJhdWRpby94LWdzbSIsCi0gICAgICAgICAgICAi
YXVkaW8veC1neW0iLAotICAgICAgICAgICAgImF1ZGlvL3gtaW1lbG9keSIsCi0gICAgICAgICAg
ICAiYXVkaW8veC1pcmNhbSIsCi0gICAgICAgICAgICAiYXVkaW8veC1rc3MiLAotICAgICAgICAg
ICAgImF1ZGlvL3gtbTRhIiwKLSAgICAgICAgICAgICJhdWRpby94LW1vZCIsCi0gICAgICAgICAg
ICAiYXVkaW8veC1tcDMiLAotICAgICAgICAgICAgImF1ZGlvL3gtbXBlZyIsCi0gICAgICAgICAg
ICAiYXVkaW8veC1tdXNlcGFjayIsCi0gICAgICAgICAgICAiYXVkaW8veC1uaXN0IiwKLSAgICAg
ICAgICAgICJhdWRpby94LW5zZiIsCi0gICAgICAgICAgICAiYXVkaW8veC1wYXJpcyIsCi0gICAg
ICAgICAgICAiYXVkaW8veC1zYXAiLAotICAgICAgICAgICAgImF1ZGlvL3gtc2JjIiwKLSAgICAg
ICAgICAgICJhdWRpby94LXNkcyIsCi0gICAgICAgICAgICAiYXVkaW8veC1zaG9ydGVuIiwKLSAg
ICAgICAgICAgICJhdWRpby94LXNpZCIsCi0gICAgICAgICAgICAiYXVkaW8veC1zcGMiLAotICAg
ICAgICAgICAgImF1ZGlvL3gtc3BlZXgiLAotICAgICAgICAgICAgImF1ZGlvL3gtc3Z4IiwKLSAg
ICAgICAgICAgICJhdWRpby94LXR0YWZpbGUiLAotICAgICAgICAgICAgImF1ZGlvL3gtdmdtIiwK
LSAgICAgICAgICAgICJhdWRpby94LXZvYyIsCi0gICAgICAgICAgICAiYXVkaW8veC12b3JiaXMr
b2dnIiwKLSAgICAgICAgICAgICJhdWRpby94LXc2NCIsCi0gICAgICAgICAgICAiYXVkaW8veC13
YXYiLAotICAgICAgICAgICAgImF1ZGlvL3gtd2F2cGFjayIsCi0gICAgICAgICAgICAiYXVkaW8v
eC13YXZwYWNrLWNvcnJlY3Rpb24iLAotICAgICAgICAgICAgInZpZGVvLzNncHAiLAotICAgICAg
ICAgICAgInZpZGVvL2ZsdiIsCi0gICAgICAgICAgICAidmlkZW8vbWoyIiwKLSAgICAgICAgICAg
ICJ2aWRlby9tcDJ0IiwKLSAgICAgICAgICAgICJ2aWRlby9tcDQiLAotICAgICAgICAgICAgInZp
ZGVvL21wZWciLAotICAgICAgICAgICAgInZpZGVvL21wZWd0cyIsCi0gICAgICAgICAgICAidmlk
ZW8vb2dnIiwKLSAgICAgICAgICAgICJ2aWRlby9xdWlja3RpbWUiLAotICAgICAgICAgICAgInZp
ZGVvL3Zpdm8iLAotICAgICAgICAgICAgInZpZGVvL3dlYm0iLAotICAgICAgICAgICAgInZpZGVv
L3gtY2R4YSIsCi0gICAgICAgICAgICAidmlkZW8veC1kaXJhYyIsCi0gICAgICAgICAgICAidmlk
ZW8veC1kdiIsCi0gICAgICAgICAgICAidmlkZW8veC1mbGkiLAotICAgICAgICAgICAgInZpZGVv
L3gtZmx2IiwKLSAgICAgICAgICAgICJ2aWRlby94LWgyNjMiLAotICAgICAgICAgICAgInZpZGVv
L3gtaXZmIiwKLSAgICAgICAgICAgICJ2aWRlby94LW00diIsCi0gICAgICAgICAgICAidmlkZW8v
eC1tYXRyb3NrYSIsCi0gICAgICAgICAgICAidmlkZW8veC1tbmciLAotICAgICAgICAgICAgInZp
ZGVvL3gtbXMtYXNmIiwKLSAgICAgICAgICAgICJ2aWRlby94LW1zdmlkZW8iLAotICAgICAgICAg
ICAgInZpZGVvL3gtbXZlIiwKLSAgICAgICAgICAgICJ2aWRlby94LW51diIsCi0gICAgICAgICAg
ICAidmlkZW8veC12Y2QiCisKKyAgICAgICAgR0xpc3QqIGF1ZGlvRGVjb2RlckZhY3RvcmllcyA9
IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9S
WV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQVVESU8sIEdT
VF9SQU5LX01BUkdJTkFMKTsKKyAgICAgICAgR0xpc3QqIHZpZGVvRGVjb2RlckZhY3RvcmllcyA9
IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9S
WV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU8sIEdT
VF9SQU5LX01BUkdJTkFMKTsKKyAgICAgICAgR0xpc3QqIGRlbXV4ZXJGYWN0b3JpZXMgPSBnc3Rf
ZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1lbnRzKEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQ
RV9ERU1VWEVSLCBHU1RfUkFOS19NQVJHSU5BTCk7CisKKyAgICAgICAgZW51bSBFbGVtZW50VHlw
ZSB7CisgICAgICAgICAgICBBVURJT19ERUNPREVSID0gMCwKKyAgICAgICAgICAgIFZJREVPX0RF
Q09ERVIsCisgICAgICAgICAgICBERU1VWEVSCiAgICAgICAgIH07Ci0gICAgICAgIGZvciAoYXV0
byYgdHlwZSA6IG1pbWVUeXBlcykKLSAgICAgICAgICAgIHNldC5hZGQodHlwZSk7CisgICAgICAg
IHN0cnVjdCBHc3RDYXBzV2ViS2l0TWFwcGluZyB7CisgICAgICAgICAgICBFbGVtZW50VHlwZSBl
bGVtZW50VHlwZTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNhcHNTdHJpbmc7CisgICAgICAg
ICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiB3ZWJraXRNaW1lVHlwZXM7CisgICAgICAgIH07CisK
KyAgICAgICAgVmVjdG9yPEdzdENhcHNXZWJLaXRNYXBwaW5nPiBtYXBwaW5nID0geworICAgICAg
ICAgICAge0FVRElPX0RFQ09ERVIsICJhdWRpby9taWRpIiwgeyJhdWRpby9taWRpIiwgImF1ZGlv
L3JpZmYtbWlkaSJ9fSwKKyAgICAgICAgICAgIHtBVURJT19ERUNPREVSLCAiYXVkaW8veC1zYmMi
LCB7fX0sCisgICAgICAgICAgICB7QVVESU9fREVDT0RFUiwgImF1ZGlvL3gtc2lkIiwge319LAor
ICAgICAgICAgICAge0FVRElPX0RFQ09ERVIsICJhdWRpby94LWZsYWMiLCB7ImF1ZGlvL3gtZmxh
YyIsICJhdWRpby9mbGFjIn19LAorICAgICAgICAgICAge0FVRElPX0RFQ09ERVIsICJhdWRpby94
LXdhdiIsIHsiYXVkaW8veC13YXYiLCAiYXVkaW8vd2F2In19LAorICAgICAgICAgICAge0FVRElP
X0RFQ09ERVIsICJhdWRpby94LXdhdnBhY2siLCB7ImF1ZGlvL3gtd2F2cGFjayJ9fSwKKyAgICAg
ICAgICAgIHtBVURJT19ERUNPREVSLCAiYXVkaW8veC1zcGVleCIsIHsiYXVkaW8vc3BlZXgiLCAi
YXVkaW8veC1zcGVleCJ9fSwKKyAgICAgICAgICAgIHtBVURJT19ERUNPREVSLCAiYXVkaW8veC1h
YzMiLCB7fX0sCisgICAgICAgICAgICB7QVVESU9fREVDT0RFUiwgImF1ZGlvL3gtZWFjMyIsIHsi
YXVkaW8veC1hYzMifX0sCisgICAgICAgICAgICB7QVVESU9fREVDT0RFUiwgImF1ZGlvL3gtZHRz
Iiwge319LAorICAgICAgICAgICAge1ZJREVPX0RFQ09ERVIsICJ2aWRlby94LWgyNjQsIHByb2Zp
bGU9KHN0cmluZyloaWdoIiwgeyJ2aWRlby9tcDQiLCAidmlkZW8veC1tNHYifX0sCisgICAgICAg
ICAgICB7VklERU9fREVDT0RFUiwgInZpZGVvL3gtbXN2aWRlb2NvZGVjIiwgeyJ2aWRlby94LW1z
dmlkZW8ifX0sCisgICAgICAgICAgICB7VklERU9fREVDT0RFUiwgInZpZGVvL3gtaDI2MyIsIHt9
fSwKKyAgICAgICAgICAgIHtWSURFT19ERUNPREVSLCAidmlkZW8vbXBlZ3RzIiwge319LAorICAg
ICAgICAgICAge1ZJREVPX0RFQ09ERVIsICJ2aWRlby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KXsx
LDJ9LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2UiLCB7InZpZGVvL21wZWcifX0sCisgICAg
ICAgICAgICB7VklERU9fREVDT0RFUiwgInZpZGVvL3gtZGlyYWMiLCB7fX0sCisgICAgICAgICAg
ICB7VklERU9fREVDT0RFUiwgInZpZGVvL3gtZmxhc2gtdmlkZW8iLCB7InZpZGVvL2ZsdiIsICJ2
aWRlby94LWZsdiJ9fSwKKyAgICAgICAgICAgIHtERU1VWEVSLCAidmlkZW8vcXVpY2t0aW1lIiwg
e319LAorICAgICAgICAgICAge0RFTVVYRVIsICJ2aWRlby9xdWlja3RpbWUsIHZhcmlhbnQ9KHN0
cmluZykzZ3BwIiwgeyJ2aWRlby8zZ3BwIn19LAorICAgICAgICAgICAge0RFTVVYRVIsICJhcHBs
aWNhdGlvbi94LTNncCIsIHt9fSwKKyAgICAgICAgICAgIHtERU1VWEVSLCAidmlkZW8veC1tcy1h
c2YiLCB7fX0sCisgICAgICAgICAgICB7REVNVVhFUiwgImF1ZGlvL3gtYWlmZiIsIHt9fSwKKyAg
ICAgICAgICAgIHtERU1VWEVSLCAiYXBwbGljYXRpb24veC1wbi1yZWFsYXVkaW8iLCB7fX0sCisg
ICAgICAgICAgICB7REVNVVhFUiwgImFwcGxpY2F0aW9uL3ZuZC5ybi1yZWFsbWVkaWEiLCB7fX0s
CisgICAgICAgICAgICB7REVNVVhFUiwgImF1ZGlvL3gtd2F2IiwgeyJhdWRpby94LXdhdiIsICJh
dWRpby93YXYifX0sCisgICAgICAgICAgICB7REVNVVhFUiwgImFwcGxpY2F0aW9uL3gtaGxzIiwg
eyJhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3VybCIsICJhcHBsaWNhdGlvbi94LW1wZWd1cmwi
fX0KKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKGF1dG8mIGN1cnJlbnQgOiBtYXBwaW5nKSB7
CisgICAgICAgICAgICBHTGlzdCogZmFjdG9yaWVzID0gZGVtdXhlckZhY3RvcmllczsKKyAgICAg
ICAgICAgIGlmIChjdXJyZW50LmVsZW1lbnRUeXBlID09IEFVRElPX0RFQ09ERVIpCisgICAgICAg
ICAgICAgICAgZmFjdG9yaWVzID0gYXVkaW9EZWNvZGVyRmFjdG9yaWVzOworICAgICAgICAgICAg
ZWxzZSBpZiAoY3VycmVudC5lbGVtZW50VHlwZSA9PSBWSURFT19ERUNPREVSKQorICAgICAgICAg
ICAgICAgIGZhY3RvcmllcyA9IHZpZGVvRGVjb2RlckZhY3RvcmllczsKKworICAgICAgICAgICAg
aWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShmYWN0b3JpZXMsIGN1cnJlbnQu
Y2Fwc1N0cmluZykpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnQud2Via2l0TWltZVR5
cGVzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG1p
bWVUeXBlIDogY3VycmVudC53ZWJraXRNaW1lVHlwZXMpCisgICAgICAgICAgICAgICAgICAgICAg
ICBzZXQuYWRkKG1pbWVUeXBlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoY3VycmVudC5jYXBzU3RyaW5nKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wdXNTdXBwb3J0ZWQgPSBmYWxz
ZTsKKyAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShhdWRpb0Rl
Y29kZXJGYWN0b3JpZXMsICJhdWRpby94LW9wdXMiKSkgeworICAgICAgICAgICAgb3B1c1N1cHBv
cnRlZCA9IHRydWU7CisgICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vb3B1
cyIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdm9yYmlzU3VwcG9ydGVkID0gZmFsc2U7
CisgICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoZGVtdXhlckZh
Y3RvcmllcywgImFwcGxpY2F0aW9uL29nZyIpKSB7CisgICAgICAgICAgICBzZXQuYWRkKEF0b21p
Y1N0cmluZygiYXBwbGljYXRpb24vb2dnIikpOworCisgICAgICAgICAgICB2b3JiaXNTdXBwb3J0
ZWQgPSBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFjdG9y
aWVzLCAiYXVkaW8veC12b3JiaXMiKTsKKyAgICAgICAgICAgIGlmICh2b3JiaXNTdXBwb3J0ZWQp
IHsKKyAgICAgICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vb2dnIikpOwor
ICAgICAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby94LXZvcmJpcytvZ2ci
KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1l
bnRGb3JNZWRpYVR5cGUodmlkZW9EZWNvZGVyRmFjdG9yaWVzLCAidmlkZW8veC10aGVvcmEiKSkK
KyAgICAgICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygidmlkZW8vb2dnIikpOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBhdWRpb01wZWdTdXBwb3J0ZWQgPSBmYWxzZTsKKyAgICAg
ICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShhdWRpb0RlY29kZXJGYWN0
b3JpZXMsICJhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTEsIGxheWVyPShpbnQpWzEsIDNd
IikpIHsKKyAgICAgICAgICAgIGF1ZGlvTXBlZ1N1cHBvcnRlZCA9IHRydWU7CisgICAgICAgICAg
ICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vbXAxIikpOworICAgICAgICAgICAgc2V0LmFk
ZChBdG9taWNTdHJpbmcoImF1ZGlvL21wMyIpKTsKKyAgICAgICAgICAgIHNldC5hZGQoQXRvbWlj
U3RyaW5nKCJhdWRpby94LW1wMyIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChnc3RSZWdp
c3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8v
bXBlZywgbXBlZ3ZlcnNpb249KGludCl7MiwgNH0iKSkgeworICAgICAgICAgICAgYXVkaW9NcGVn
U3VwcG9ydGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRp
by9hYWMiKSk7CisgICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vbXAyIikp
OworICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL21wNCIpKTsKKyAgICAg
ICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby94LW00YSIpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChhdWRpb01wZWdTdXBwb3J0ZWQpIHsKKyAgICAgICAgICAgIHNldC5hZGQo
QXRvbWljU3RyaW5nKCJhdWRpby9tcGVnIikpOworICAgICAgICAgICAgc2V0LmFkZChBdG9taWNT
dHJpbmcoImF1ZGlvL3gtbXBlZyIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChnc3RSZWdp
c3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoZGVtdXhlckZhY3RvcmllcywgInZpZGVvL3gtbWF0
cm9za2EiKSkgeworICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoInZpZGVvL3gtbWF0
cm9za2EiKSk7CisKKyAgICAgICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRp
YVR5cGUodmlkZW9EZWNvZGVyRmFjdG9yaWVzLCAidmlkZW8veC12cDgiKQorICAgICAgICAgICAg
ICAgIHx8IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZSh2aWRlb0RlY29kZXJGYWN0
b3JpZXMsICJ2aWRlby94LXZwOSIpCisgICAgICAgICAgICAgICAgfHwgZ3N0UmVnaXN0cnlIYXNF
bGVtZW50Rm9yTWVkaWFUeXBlKHZpZGVvRGVjb2RlckZhY3RvcmllcywgInZpZGVvL3gtdnAxMCIp
KQorICAgICAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJ2aWRlby93ZWJtIikpOwor
CisgICAgICAgICAgICBpZiAodm9yYmlzU3VwcG9ydGVkIHx8IG9wdXNTdXBwb3J0ZWQpCisgICAg
ICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL3dlYm0iKSk7CisgICAgICAg
IH0KKworICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKGF1ZGlvRGVjb2RlckZh
Y3Rvcmllcyk7CisgICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUodmlkZW9EZWNv
ZGVyRmFjdG9yaWVzKTsKKyAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZShkZW11
eGVyRmFjdG9yaWVzKTsKICAgICAgICAgcmV0dXJuIHNldDsKICAgICB9KCk7Ci0gICAgcmV0dXJu
IGNhY2hlOworICAgIHJldHVybiBtaW1lVHlwZXM7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNl
SW5zZW5zaXRpdmVIYXNoPiYgdHlwZXMpCiB7Ci0gICAgdHlwZXMgPSBtaW1lVHlwZUNhY2hlKCk7
CisgICAgdHlwZXMgPSBtaW1lVHlwZVNldCgpOwogfQogCiBNZWRpYVBsYXllcjo6U3VwcG9ydHNU
eXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlh
RW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCkBAIC0xNzgwLDcgKzE4MDQsNyBA
QCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRQogICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6Oklz
Tm90U3VwcG9ydGVkOwogCiAgICAgLy8gc3BlYyBzYXlzIHdlIHNob3VsZCBub3QgcmV0dXJuICJw
cm9iYWJseSIgaWYgdGhlIGNvZGVjcyBzdHJpbmcgaXMgZW1wdHkKLSAgICBpZiAobWltZVR5cGVD
YWNoZSgpLmNvbnRhaW5zKHBhcmFtZXRlcnMudHlwZSkpCisgICAgaWYgKG1pbWVUeXBlU2V0KCku
Y29udGFpbnMocGFyYW1ldGVycy50eXBlKSkKICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnMuY29k
ZWNzLmlzRW1wdHkoKSA/IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZCA6IE1lZGlhUGxheWVy
OjpJc1N1cHBvcnRlZDsKICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOwog
fQotLSAKMi44LjE=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279238</attachid>
            <date>2016-05-18 06:10:01 -0700</date>
            <delta_ts>2016-05-19 04:13:19 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>13740</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBmZGQ1YzczYzU2ZjE3NmU0Y2ZkNzMwYjJlZjZhNGFkZjA4OThiZTFiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBTYXQsIDE0IE1heSAyMDE2IDEyOjUwOjU5ICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
cGF0Y2gKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgMjUgKysrCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGll
cy5jcHAgICAgICB8ICAxMSArKwogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJVdGls
aXRpZXMuaCAgICAgICAgfCAgIDIgKy0KIC4uLi9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcCAgICAgIHwgMjIwICsrKysrKysrKysrKy0tLS0tLS0tLQogNCBmaWxlcyBj
aGFuZ2VkLCAxNTkgaW5zZXJ0aW9ucygrKSwgOTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDNlMDM5MTUuLjQxM2FkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxNi0wNS0x
NCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dT
dHJlYW1lcl0gdW5yZWxhdGVkIGNvZGVjcyByZXF1aXJlZCB0byBwbGF5IHZpZGVvcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTcyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zdGVhZCBvZiBoYXJk
LWNvZGluZyB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgbWltZS10eXBlcywgY2hlY2sgdGhlCisgICAg
ICAgIGRlY29kZXIgYW5kIGRlbXV4ZXIgR1N0cmVhbWVyIGVsZW1lbnRzIGF2YWlsYWJsZSBhbmQg
ZHluYW1pY2FsbHkKKyAgICAgICAgYnVpbGQgdGhlIGxpc3Qgb2YgbWltZS10eXBlcyBhY2NvcmRp
bmdseS4gVGhpcyBwYXRjaCBhbHNvIHJlbW92ZXMKKyAgICAgICAgc3VwcG9ydCBmb3IgdW5kZXIt
dXNlZCBhbmQgZXhvdGljIG1pbWUtdHlwZXMuCisKKyAgICAgICAgQmFzZWQgb24gYSBwYXRjaCBi
eSBNYXJpbyBTYW5jaGV6IFByYWRhLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgZXhpc3Rpbmcg
bWVkaWEgdGVzdHMgY292ZXIgdGhpcyBjaGFuZ2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGllcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bWltZVR5cGVTZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpnZXRTdXBwb3J0ZWRUeXBlcyk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjptaW1lVHlwZUNhY2hlKTogRGVsZXRlZC4KKwogMjAxNi0wNS0xMiAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIERyb3AgV29ya2VyR2xvYmFsU2Nv
cGUncyBjdXN0b20gR2V0T3duUHJvcGVydHlTbG90KCkgaW1wbGVtZW50YXRpb24KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJV
dGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0dTdHJlYW1lclV0aWxpdGllcy5jcHAKaW5kZXggNzQ1OGM2Yy4uNTU5NjExOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0
aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dTdHJlYW1lclV0aWxpdGllcy5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpZiBVU0UoR1NU
UkVBTUVSKQogI2luY2x1ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgogCisjaW5jbHVkZSAiR1Jl
ZlB0ckdTdHJlYW1lci5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKIAogI2luY2x1ZGUgPGdzdC9h
dWRpby9hdWRpby1pbmZvLmg+CkBAIC0xODUsNiArMTg2LDE2IEBAIEdzdENsb2NrVGltZSB0b0dz
dENsb2NrVGltZShmbG9hdCB0aW1lKQogICAgIHJldHVybiBHU1RfVElNRVZBTF9UT19USU1FKHRp
bWVWYWx1ZSk7CiB9CiAKK2Jvb2wgZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKEdM
aXN0KiBlbGVtZW50RmFjdG9yaWVzLCBjb25zdCBjaGFyKiBjYXBzU3RyaW5nKQoreworICAgIEdS
ZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19mcm9tX3N0cmluZyhjYXBz
U3RyaW5nKSk7CisgICAgR0xpc3QqIGNhbmRpZGF0ZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2xp
c3RfZmlsdGVyKGVsZW1lbnRGYWN0b3JpZXMsIGNhcHMuZ2V0KCksIEdTVF9QQURfU0lOSywgZmFs
c2UpOworICAgIGJvb2wgcmVzdWx0ID0gY2FuZGlkYXRlczsKKworICAgIGdzdF9wbHVnaW5fZmVh
dHVyZV9saXN0X2ZyZWUoY2FuZGlkYXRlcyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfQog
CiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJVdGlsaXRpZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJVdGlsaXRpZXMuaApp
bmRleCBlOTgwZjgzLi5mNTVkMGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGllcy5oCkBA
IC03Niw1ICs3Niw1IEBAIHZvaWQgdW5tYXBHc3RCdWZmZXIoR3N0QnVmZmVyKik7CiBib29sIGlu
aXRpYWxpemVHU3RyZWFtZXIoKTsKIHVuc2lnbmVkIGdldEdzdFBsYXlGbGFnKGNvbnN0IGNoYXIq
IG5pY2spOwogR3N0Q2xvY2tUaW1lIHRvR3N0Q2xvY2tUaW1lKGZsb2F0IHRpbWUpOwotCitib29s
IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShHTGlzdCogZWxlbWVudEZhY3Rvcmll
cywgY29uc3QgY2hhciogY2Fwc1N0cmluZyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IGQ5NzU1MjcuLjA1YzNlNDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0xNjYwLDEx
MyArMTY2MCwxMzcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWRpbmdG
YWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcikKICAgICBtX3JlYWR5VGltZXJI
YW5kbGVyLnN0b3AoKTsKIH0KIAotLy8gRklYTUU6IEluIHdoYXQgc2Vuc2UgaXMgdGhpcyBhICJj
YWNoZSI/Ci1zdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4m
IG1pbWVUeXBlQ2FjaGUoKQorc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNp
dGl2ZUhhc2g+JiBtaW1lVHlwZVNldCgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhh
c2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBjYWNoZSA9IFtdKCkgewor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5z
aXRpdmVIYXNoPj4gbWltZVR5cGVzID0gW10oKQorICAgIHsKICAgICAgICAgaW5pdGlhbGl6ZUdT
dHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMoKTsKICAgICAgICAgSGFzaFNldDxTdHJp
bmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gc2V0OwotICAgICAgICBjb25zdCBjaGFyKiBt
aW1lVHlwZXNbXSA9IHsKLSAgICAgICAgICAgICJhcHBsaWNhdGlvbi9vZ2ciLAotICAgICAgICAg
ICAgImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsIiwKLSAgICAgICAgICAgICJhcHBsaWNh
dGlvbi92bmQucm4tcmVhbG1lZGlhIiwKLSAgICAgICAgICAgICJhcHBsaWNhdGlvbi94LTNncCIs
Ci0gICAgICAgICAgICAiYXBwbGljYXRpb24veC1wbi1yZWFsYXVkaW8iLAotICAgICAgICAgICAg
ImFwcGxpY2F0aW9uL3gtbXBlZ3VybCIsCi0gICAgICAgICAgICAiYXVkaW8vM2dwcCIsCi0gICAg
ICAgICAgICAiYXVkaW8vYWFjIiwKLSAgICAgICAgICAgICJhdWRpby9mbGFjIiwKLSAgICAgICAg
ICAgICJhdWRpby9pTEJDLXNoIiwKLSAgICAgICAgICAgICJhdWRpby9taWRpIiwKLSAgICAgICAg
ICAgICJhdWRpby9tb2JpbGUteG1mIiwKLSAgICAgICAgICAgICJhdWRpby9tcDEiLAotICAgICAg
ICAgICAgImF1ZGlvL21wMiIsCi0gICAgICAgICAgICAiYXVkaW8vbXAzIiwKLSAgICAgICAgICAg
ICJhdWRpby9tcDQiLAotICAgICAgICAgICAgImF1ZGlvL21wZWciLAotICAgICAgICAgICAgImF1
ZGlvL29nZyIsCi0gICAgICAgICAgICAiYXVkaW8vb3B1cyIsCi0gICAgICAgICAgICAiYXVkaW8v
cWNlbHAiLAotICAgICAgICAgICAgImF1ZGlvL3JpZmYtbWlkaSIsCi0gICAgICAgICAgICAiYXVk
aW8vc3BlZXgiLAotICAgICAgICAgICAgImF1ZGlvL3dhdiIsCi0gICAgICAgICAgICAiYXVkaW8v
d2VibSIsCi0gICAgICAgICAgICAiYXVkaW8veC1hYzMiLAotICAgICAgICAgICAgImF1ZGlvL3gt
YWlmZiIsCi0gICAgICAgICAgICAiYXVkaW8veC1hbXItbmItc2giLAotICAgICAgICAgICAgImF1
ZGlvL3gtYW1yLXdiLXNoIiwKLSAgICAgICAgICAgICJhdWRpby94LWF1IiwKLSAgICAgICAgICAg
ICJhdWRpby94LWF5IiwKLSAgICAgICAgICAgICJhdWRpby94LWNlbHQiLAotICAgICAgICAgICAg
ImF1ZGlvL3gtZHRzIiwKLSAgICAgICAgICAgICJhdWRpby94LWZsYWMiLAotICAgICAgICAgICAg
ImF1ZGlvL3gtZ2JzIiwKLSAgICAgICAgICAgICJhdWRpby94LWdzbSIsCi0gICAgICAgICAgICAi
YXVkaW8veC1neW0iLAotICAgICAgICAgICAgImF1ZGlvL3gtaW1lbG9keSIsCi0gICAgICAgICAg
ICAiYXVkaW8veC1pcmNhbSIsCi0gICAgICAgICAgICAiYXVkaW8veC1rc3MiLAotICAgICAgICAg
ICAgImF1ZGlvL3gtbTRhIiwKLSAgICAgICAgICAgICJhdWRpby94LW1vZCIsCi0gICAgICAgICAg
ICAiYXVkaW8veC1tcDMiLAotICAgICAgICAgICAgImF1ZGlvL3gtbXBlZyIsCi0gICAgICAgICAg
ICAiYXVkaW8veC1tdXNlcGFjayIsCi0gICAgICAgICAgICAiYXVkaW8veC1uaXN0IiwKLSAgICAg
ICAgICAgICJhdWRpby94LW5zZiIsCi0gICAgICAgICAgICAiYXVkaW8veC1wYXJpcyIsCi0gICAg
ICAgICAgICAiYXVkaW8veC1zYXAiLAotICAgICAgICAgICAgImF1ZGlvL3gtc2JjIiwKLSAgICAg
ICAgICAgICJhdWRpby94LXNkcyIsCi0gICAgICAgICAgICAiYXVkaW8veC1zaG9ydGVuIiwKLSAg
ICAgICAgICAgICJhdWRpby94LXNpZCIsCi0gICAgICAgICAgICAiYXVkaW8veC1zcGMiLAotICAg
ICAgICAgICAgImF1ZGlvL3gtc3BlZXgiLAotICAgICAgICAgICAgImF1ZGlvL3gtc3Z4IiwKLSAg
ICAgICAgICAgICJhdWRpby94LXR0YWZpbGUiLAotICAgICAgICAgICAgImF1ZGlvL3gtdmdtIiwK
LSAgICAgICAgICAgICJhdWRpby94LXZvYyIsCi0gICAgICAgICAgICAiYXVkaW8veC12b3JiaXMr
b2dnIiwKLSAgICAgICAgICAgICJhdWRpby94LXc2NCIsCi0gICAgICAgICAgICAiYXVkaW8veC13
YXYiLAotICAgICAgICAgICAgImF1ZGlvL3gtd2F2cGFjayIsCi0gICAgICAgICAgICAiYXVkaW8v
eC13YXZwYWNrLWNvcnJlY3Rpb24iLAotICAgICAgICAgICAgInZpZGVvLzNncHAiLAotICAgICAg
ICAgICAgInZpZGVvL2ZsdiIsCi0gICAgICAgICAgICAidmlkZW8vbWoyIiwKLSAgICAgICAgICAg
ICJ2aWRlby9tcDJ0IiwKLSAgICAgICAgICAgICJ2aWRlby9tcDQiLAotICAgICAgICAgICAgInZp
ZGVvL21wZWciLAotICAgICAgICAgICAgInZpZGVvL21wZWd0cyIsCi0gICAgICAgICAgICAidmlk
ZW8vb2dnIiwKLSAgICAgICAgICAgICJ2aWRlby9xdWlja3RpbWUiLAotICAgICAgICAgICAgInZp
ZGVvL3Zpdm8iLAotICAgICAgICAgICAgInZpZGVvL3dlYm0iLAotICAgICAgICAgICAgInZpZGVv
L3gtY2R4YSIsCi0gICAgICAgICAgICAidmlkZW8veC1kaXJhYyIsCi0gICAgICAgICAgICAidmlk
ZW8veC1kdiIsCi0gICAgICAgICAgICAidmlkZW8veC1mbGkiLAotICAgICAgICAgICAgInZpZGVv
L3gtZmx2IiwKLSAgICAgICAgICAgICJ2aWRlby94LWgyNjMiLAotICAgICAgICAgICAgInZpZGVv
L3gtaXZmIiwKLSAgICAgICAgICAgICJ2aWRlby94LW00diIsCi0gICAgICAgICAgICAidmlkZW8v
eC1tYXRyb3NrYSIsCi0gICAgICAgICAgICAidmlkZW8veC1tbmciLAotICAgICAgICAgICAgInZp
ZGVvL3gtbXMtYXNmIiwKLSAgICAgICAgICAgICJ2aWRlby94LW1zdmlkZW8iLAotICAgICAgICAg
ICAgInZpZGVvL3gtbXZlIiwKLSAgICAgICAgICAgICJ2aWRlby94LW51diIsCi0gICAgICAgICAg
ICAidmlkZW8veC12Y2QiCisKKyAgICAgICAgR0xpc3QqIGF1ZGlvRGVjb2RlckZhY3RvcmllcyA9
IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9S
WV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQVVESU8sIEdT
VF9SQU5LX01BUkdJTkFMKTsKKyAgICAgICAgR0xpc3QqIHZpZGVvRGVjb2RlckZhY3RvcmllcyA9
IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9S
WV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU8sIEdT
VF9SQU5LX01BUkdJTkFMKTsKKyAgICAgICAgR0xpc3QqIGRlbXV4ZXJGYWN0b3JpZXMgPSBnc3Rf
ZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1lbnRzKEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQ
RV9ERU1VWEVSLCBHU1RfUkFOS19NQVJHSU5BTCk7CisKKyAgICAgICAgZW51bSBFbGVtZW50VHlw
ZSB7CisgICAgICAgICAgICBBdWRpb0RlY29kZXIgPSAwLAorICAgICAgICAgICAgVmlkZW9EZWNv
ZGVyLAorICAgICAgICAgICAgRGVtdXhlcgogICAgICAgICB9OwotICAgICAgICBmb3IgKGF1dG8m
IHR5cGUgOiBtaW1lVHlwZXMpCi0gICAgICAgICAgICBzZXQuYWRkKHR5cGUpOworICAgICAgICBz
dHJ1Y3QgR3N0Q2Fwc1dlYktpdE1hcHBpbmcgeworICAgICAgICAgICAgRWxlbWVudFR5cGUgZWxl
bWVudFR5cGU7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBjYXBzU3RyaW5nOworICAgICAgICAg
ICAgVmVjdG9yPEF0b21pY1N0cmluZz4gd2Via2l0TWltZVR5cGVzOworICAgICAgICB9OworCisg
ICAgICAgIFZlY3RvcjxHc3RDYXBzV2ViS2l0TWFwcGluZz4gbWFwcGluZyA9IHsKKyAgICAgICAg
ICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby9taWRpIiwgeyJhdWRpby9taWRpIiwgImF1ZGlvL3Jp
ZmYtbWlkaSJ9fSwKKyAgICAgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LXNiYyIsIHsg
fX0sCisgICAgICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8veC1zaWQiLCB7IH19LAorICAg
ICAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtZmxhYyIsIHsiYXVkaW8veC1mbGFjIiwg
ImF1ZGlvL2ZsYWMifX0sCisgICAgICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8veC13YXYi
LCB7ImF1ZGlvL3gtd2F2IiwgImF1ZGlvL3dhdiJ9fSwKKyAgICAgICAgICAgIHtBdWRpb0RlY29k
ZXIsICJhdWRpby94LXdhdnBhY2siLCB7ImF1ZGlvL3gtd2F2cGFjayJ9fSwKKyAgICAgICAgICAg
IHtBdWRpb0RlY29kZXIsICJhdWRpby94LXNwZWV4IiwgeyJhdWRpby9zcGVleCIsICJhdWRpby94
LXNwZWV4In19LAorICAgICAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtYWMzIiwgeyB9
fSwKKyAgICAgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LWVhYzMiLCB7ImF1ZGlvL3gt
YWMzIn19LAorICAgICAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtZHRzIiwgeyB9fSwK
KyAgICAgICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRlby94LWgyNjQsIHByb2ZpbGU9KHN0cmlu
ZyloaWdoIiwgeyJ2aWRlby9tcDQiLCAidmlkZW8veC1tNHYifX0sCisgICAgICAgICAgICB7Vmlk
ZW9EZWNvZGVyLCAidmlkZW8veC1tc3ZpZGVvY29kZWMiLCB7InZpZGVvL3gtbXN2aWRlbyJ9fSwK
KyAgICAgICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRlby94LWgyNjMiLCB7IH19LAorICAgICAg
ICAgICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL21wZWd0cyIsIHsgfX0sCisgICAgICAgICAgICB7
VmlkZW9EZWNvZGVyLCAidmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCl7MSwyfSwgc3lzdGVt
c3RyZWFtPShib29sZWFuKWZhbHNlIiwgeyJ2aWRlby9tcGVnIn19LAorICAgICAgICAgICAge1Zp
ZGVvRGVjb2RlciwgInZpZGVvL3gtZGlyYWMiLCB7IH19LAorICAgICAgICAgICAge1ZpZGVvRGVj
b2RlciwgInZpZGVvL3gtZmxhc2gtdmlkZW8iLCB7InZpZGVvL2ZsdiIsICJ2aWRlby94LWZsdiJ9
fSwKKyAgICAgICAgICAgIHtEZW11eGVyLCAidmlkZW8vcXVpY2t0aW1lIiwgeyB9fSwKKyAgICAg
ICAgICAgIHtEZW11eGVyLCAidmlkZW8vcXVpY2t0aW1lLCB2YXJpYW50PShzdHJpbmcpM2dwcCIs
IHsidmlkZW8vM2dwcCJ9fSwKKyAgICAgICAgICAgIHtEZW11eGVyLCAiYXBwbGljYXRpb24veC0z
Z3AiLCB7IH19LAorICAgICAgICAgICAge0RlbXV4ZXIsICJ2aWRlby94LW1zLWFzZiIsIHsgfX0s
CisgICAgICAgICAgICB7RGVtdXhlciwgImF1ZGlvL3gtYWlmZiIsIHsgfX0sCisgICAgICAgICAg
ICB7RGVtdXhlciwgImFwcGxpY2F0aW9uL3gtcG4tcmVhbGF1ZGlvIiwgeyB9fSwKKyAgICAgICAg
ICAgIHtEZW11eGVyLCAiYXBwbGljYXRpb24vdm5kLnJuLXJlYWxtZWRpYSIsIHsgfX0sCisgICAg
ICAgICAgICB7RGVtdXhlciwgImF1ZGlvL3gtd2F2IiwgeyJhdWRpby94LXdhdiIsICJhdWRpby93
YXYifX0sCisgICAgICAgICAgICB7RGVtdXhlciwgImFwcGxpY2F0aW9uL3gtaGxzIiwgeyJhcHBs
aWNhdGlvbi92bmQuYXBwbGUubXBlZ3VybCIsICJhcHBsaWNhdGlvbi94LW1wZWd1cmwifX0KKyAg
ICAgICAgfTsKKworICAgICAgICBmb3IgKGF1dG8mIGN1cnJlbnQgOiBtYXBwaW5nKSB7CisgICAg
ICAgICAgICBHTGlzdCogZmFjdG9yaWVzID0gZGVtdXhlckZhY3RvcmllczsKKyAgICAgICAgICAg
IGlmIChjdXJyZW50LmVsZW1lbnRUeXBlID09IEF1ZGlvRGVjb2RlcikKKyAgICAgICAgICAgICAg
ICBmYWN0b3JpZXMgPSBhdWRpb0RlY29kZXJGYWN0b3JpZXM7CisgICAgICAgICAgICBlbHNlIGlm
IChjdXJyZW50LmVsZW1lbnRUeXBlID09IFZpZGVvRGVjb2RlcikKKyAgICAgICAgICAgICAgICBm
YWN0b3JpZXMgPSB2aWRlb0RlY29kZXJGYWN0b3JpZXM7CisKKyAgICAgICAgICAgIGlmIChnc3RS
ZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoZmFjdG9yaWVzLCBjdXJyZW50LmNhcHNTdHJp
bmcpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50LndlYmtpdE1pbWVUeXBlcy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBtaW1lVHlwZSA6
IGN1cnJlbnQud2Via2l0TWltZVR5cGVzKQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0LmFk
ZChtaW1lVHlwZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHNldC5hZGQoQXRvbWljU3RyaW5nKGN1cnJlbnQuY2Fwc1N0cmluZykpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcHVzU3VwcG9ydGVkID0gZmFsc2U7CisgICAg
ICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFj
dG9yaWVzLCAiYXVkaW8veC1vcHVzIikpIHsKKyAgICAgICAgICAgIG9wdXNTdXBwb3J0ZWQgPSB0
cnVlOworICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL29wdXMiKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIHZvcmJpc1N1cHBvcnRlZCA9IGZhbHNlOworICAgICAg
ICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGRlbXV4ZXJGYWN0b3JpZXMs
ICJhcHBsaWNhdGlvbi9vZ2ciKSkgeworICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmco
ImFwcGxpY2F0aW9uL29nZyIpKTsKKworICAgICAgICAgICAgdm9yYmlzU3VwcG9ydGVkID0gZ3N0
UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGF1ZGlvRGVjb2RlckZhY3RvcmllcywgImF1
ZGlvL3gtdm9yYmlzIik7CisgICAgICAgICAgICBpZiAodm9yYmlzU3VwcG9ydGVkKSB7CisgICAg
ICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL29nZyIpKTsKKyAgICAgICAg
ICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8veC12b3JiaXMrb2dnIikpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVk
aWFUeXBlKHZpZGVvRGVjb2RlckZhY3RvcmllcywgInZpZGVvL3gtdGhlb3JhIikpCisgICAgICAg
ICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoInZpZGVvL29nZyIpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgYXVkaW9NcGVnU3VwcG9ydGVkID0gZmFsc2U7CisgICAgICAgIGlmIChn
c3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAi
YXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0oaW50KVsxLCAzXSIpKSB7Cisg
ICAgICAgICAgICBhdWRpb01wZWdTdXBwb3J0ZWQgPSB0cnVlOworICAgICAgICAgICAgc2V0LmFk
ZChBdG9taWNTdHJpbmcoImF1ZGlvL21wMSIpKTsKKyAgICAgICAgICAgIHNldC5hZGQoQXRvbWlj
U3RyaW5nKCJhdWRpby9tcDMiKSk7CisgICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygi
YXVkaW8veC1tcDMiKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNF
bGVtZW50Rm9yTWVkaWFUeXBlKGF1ZGlvRGVjb2RlckZhY3RvcmllcywgImF1ZGlvL21wZWcsIG1w
ZWd2ZXJzaW9uPShpbnQpezIsIDR9IikpIHsKKyAgICAgICAgICAgIGF1ZGlvTXBlZ1N1cHBvcnRl
ZCA9IHRydWU7CisgICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vYWFjIikp
OworICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL21wMiIpKTsKKyAgICAg
ICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9tcDQiKSk7CisgICAgICAgICAgICBz
ZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8veC1tNGEiKSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoYXVkaW9NcGVnU3VwcG9ydGVkKSB7CisgICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0
cmluZygiYXVkaW8vbXBlZyIpKTsKKyAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJh
dWRpby94LW1wZWciKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNF
bGVtZW50Rm9yTWVkaWFUeXBlKGRlbXV4ZXJGYWN0b3JpZXMsICJ2aWRlby94LW1hdHJvc2thIikp
IHsKKyAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJ2aWRlby94LW1hdHJvc2thIikp
OworCisgICAgICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKHZp
ZGVvRGVjb2RlckZhY3RvcmllcywgInZpZGVvL3gtdnA4IikKKyAgICAgICAgICAgICAgICB8fCBn
c3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUodmlkZW9EZWNvZGVyRmFjdG9yaWVzLCAi
dmlkZW8veC12cDkiKQorICAgICAgICAgICAgICAgIHx8IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZv
ck1lZGlhVHlwZSh2aWRlb0RlY29kZXJGYWN0b3JpZXMsICJ2aWRlby94LXZwMTAiKSkKKyAgICAg
ICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygidmlkZW8vd2VibSIpKTsKKworICAgICAg
ICAgICAgaWYgKHZvcmJpc1N1cHBvcnRlZCB8fCBvcHVzU3VwcG9ydGVkKQorICAgICAgICAgICAg
ICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby93ZWJtIikpOworICAgICAgICB9CisKKyAg
ICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZShhdWRpb0RlY29kZXJGYWN0b3JpZXMp
OworICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKHZpZGVvRGVjb2RlckZhY3Rv
cmllcyk7CisgICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUoZGVtdXhlckZhY3Rv
cmllcyk7CiAgICAgICAgIHJldHVybiBzZXQ7CiAgICAgfSgpOwotICAgIHJldHVybiBjYWNoZTsK
KyAgICByZXR1cm4gbWltZVR5cGVzOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0
aXZlSGFzaD4mIHR5cGVzKQogewotICAgIHR5cGVzID0gbWltZVR5cGVDYWNoZSgpOworICAgIHR5
cGVzID0gbWltZVR5cGVTZXQoKTsKIH0KIAogTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1
cHBvcnRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQpAQCAtMTc4MCw3ICsxODA0LDcgQEAgTWVkaWFQ
bGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRz
VHlwZShjb25zdCBNZWRpYUUKICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBv
cnRlZDsKIAogICAgIC8vIHNwZWMgc2F5cyB3ZSBzaG91bGQgbm90IHJldHVybiAicHJvYmFibHki
IGlmIHRoZSBjb2RlY3Mgc3RyaW5nIGlzIGVtcHR5Ci0gICAgaWYgKG1pbWVUeXBlQ2FjaGUoKS5j
b250YWlucyhwYXJhbWV0ZXJzLnR5cGUpKQorICAgIGlmIChtaW1lVHlwZVNldCgpLmNvbnRhaW5z
KHBhcmFtZXRlcnMudHlwZSkpCiAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJzLmNvZGVjcy5pc0Vt
cHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5QmVTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNTdXBw
b3J0ZWQ7CiAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKIH0KLS0gCjIu
OC4x
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279379</attachid>
            <date>2016-05-19 04:13:19 -0700</date>
            <delta_ts>2016-05-19 07:18:04 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>14088</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSAyZmU2ZDFiMzg3NmIxMTYyNDc4ODYwZWNlOTNlNTVjNjJjNDhiYjQ4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBTYXQsIDE0IE1heSAyMDE2IDEyOjUwOjU5ICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
cGF0Y2gKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgMjkgKysrCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGll
cy5jcHAgICAgICB8ICAxMSArKwogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJVdGls
aXRpZXMuaCAgICAgICAgfCAgIDIgKy0KIC4uLi9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcCAgICAgIHwgMjIwICsrKysrKysrKysrKy0tLS0tLS0tLQogNCBmaWxlcyBj
aGFuZ2VkLCAxNjMgaW5zZXJ0aW9ucygrKSwgOTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGFmMTc5ZmMuLmY2NWIzOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxNi0wNS0x
OSAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dT
dHJlYW1lcl0gdW5yZWxhdGVkIGNvZGVjcyByZXF1aXJlZCB0byBwbGF5IHZpZGVvcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTcyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zdGVhZCBvZiBoYXJk
LWNvZGluZyB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgbWltZS10eXBlcywgY2hlY2sgdGhlCisgICAg
ICAgIGRlY29kZXIgYW5kIGRlbXV4ZXIgR1N0cmVhbWVyIGVsZW1lbnRzIGF2YWlsYWJsZSBhbmQg
ZHluYW1pY2FsbHkKKyAgICAgICAgYnVpbGQgdGhlIGxpc3Qgb2YgbWltZS10eXBlcyBhY2NvcmRp
bmdseS4gVGhpcyBwYXRjaCBhbHNvIHJlbW92ZXMKKyAgICAgICAgc3VwcG9ydCBmb3IgdW5kZXIt
dXNlZCBhbmQgZXhvdGljIG1pbWUtdHlwZXMuCisKKyAgICAgICAgQmFzZWQgb24gYSBwYXRjaCBi
eSBNYXJpbyBTYW5jaGV6IFByYWRhLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgZXhpc3Rpbmcg
bWVkaWEgdGVzdHMgY292ZXIgdGhpcyBjaGFuZ2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZSk6IE5ldyBmdW5jdGlvbgorICAgICAg
ICBjaGVja2luZyB0aGUgZWxlbWVudHMgcmVnaXN0ZXJlZCBpbiB0aGUgZmFjdG9yaWVzIGhhdmUg
YSBzaW5rIHBhZAorICAgICAgICBtYXRjaGluZyB0aGUgY2FwcyBzcGVjaWZpZWQgYXMgc2Vjb25k
IGFyZ3VtZW50IG9mIHRoZSBmdW5jdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1N0cmVhbWVyVXRpbGl0aWVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjptaW1lVHlwZVNldCk6IEhhcmQtY29kZWQgbGlzdCBvZiBtaW1lLXR5cGVzIHJlcGxh
Y2VkIGJ5CisgICAgICAgIHJ1bnRpbWUtYnVpbHQgbGlzdCBvZiBtaW1lLXR5cGVzIHRoYXQgY2Fu
IGJlIHN1cHBvcnRlZCBieSB0aGUKKyAgICAgICAgR1N0cmVhbWVyIGRlY29kZXJzIGFuZCBkZW11
eGVycyBhdmFpbGFibGUgb24gdGhlIGhvc3QgbWFjaGluZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICBt
aW1lVHlwZUNhY2hlIHJlbmFtZWQgdG8gbWltZVR5cGVTZXQuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZSk6IERpdHRvLgorCiAyMDE2
LTA1LTE5ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKICAg
ICAgICAgUmVmYWN0b3IgdG9KUyBmdW5jdGlvbnMgdG8gdXNlIHRvSlNOZXdseUNyZWF0ZWQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3Ry
ZWFtZXJVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dTdHJlYW1lclV0aWxpdGllcy5jcHAKaW5kZXggNzQ1OGM2Yy4uNTU5NjExOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJl
YW1lclV0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGllcy5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpZiBV
U0UoR1NUUkVBTUVSKQogI2luY2x1ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgogCisjaW5jbHVk
ZSAiR1JlZlB0ckdTdHJlYW1lci5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKIAogI2luY2x1ZGUg
PGdzdC9hdWRpby9hdWRpby1pbmZvLmg+CkBAIC0xODUsNiArMTg2LDE2IEBAIEdzdENsb2NrVGlt
ZSB0b0dzdENsb2NrVGltZShmbG9hdCB0aW1lKQogICAgIHJldHVybiBHU1RfVElNRVZBTF9UT19U
SU1FKHRpbWVWYWx1ZSk7CiB9CiAKK2Jvb2wgZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFU
eXBlKEdMaXN0KiBlbGVtZW50RmFjdG9yaWVzLCBjb25zdCBjaGFyKiBjYXBzU3RyaW5nKQorewor
ICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19mcm9tX3N0cmlu
ZyhjYXBzU3RyaW5nKSk7CisgICAgR0xpc3QqIGNhbmRpZGF0ZXMgPSBnc3RfZWxlbWVudF9mYWN0
b3J5X2xpc3RfZmlsdGVyKGVsZW1lbnRGYWN0b3JpZXMsIGNhcHMuZ2V0KCksIEdTVF9QQURfU0lO
SywgZmFsc2UpOworICAgIGJvb2wgcmVzdWx0ID0gY2FuZGlkYXRlczsKKworICAgIGdzdF9wbHVn
aW5fZmVhdHVyZV9saXN0X2ZyZWUoY2FuZGlkYXRlcyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwogfQogCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJVdGlsaXRpZXMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJVdGlsaXRp
ZXMuaAppbmRleCBlOTgwZjgzLi5mNTVkMGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVXRpbGl0aWVzLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGll
cy5oCkBAIC03Niw1ICs3Niw1IEBAIHZvaWQgdW5tYXBHc3RCdWZmZXIoR3N0QnVmZmVyKik7CiBi
b29sIGluaXRpYWxpemVHU3RyZWFtZXIoKTsKIHVuc2lnbmVkIGdldEdzdFBsYXlGbGFnKGNvbnN0
IGNoYXIqIG5pY2spOwogR3N0Q2xvY2tUaW1lIHRvR3N0Q2xvY2tUaW1lKGZsb2F0IHRpbWUpOwot
Citib29sIGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShHTGlzdCogZWxlbWVudEZh
Y3RvcmllcywgY29uc3QgY2hhciogY2Fwc1N0cmluZyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IGQ5NzU1MjcuLjA1YzNlNDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0x
NjYwLDExMyArMTY2MCwxMzcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Omxv
YWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcikKICAgICBtX3JlYWR5
VGltZXJIYW5kbGVyLnN0b3AoKTsKIH0KIAotLy8gRklYTUU6IEluIHdoYXQgc2Vuc2UgaXMgdGhp
cyBhICJjYWNoZSI/Ci1zdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZl
SGFzaD4mIG1pbWVUeXBlQ2FjaGUoKQorc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJ
bnNlbnNpdGl2ZUhhc2g+JiBtaW1lVHlwZVNldCgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBjYWNoZSA9IFtd
KCkgeworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNl
SW5zZW5zaXRpdmVIYXNoPj4gbWltZVR5cGVzID0gW10oKQorICAgIHsKICAgICAgICAgaW5pdGlh
bGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMoKTsKICAgICAgICAgSGFzaFNl
dDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gc2V0OwotICAgICAgICBjb25zdCBj
aGFyKiBtaW1lVHlwZXNbXSA9IHsKLSAgICAgICAgICAgICJhcHBsaWNhdGlvbi9vZ2ciLAotICAg
ICAgICAgICAgImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsIiwKLSAgICAgICAgICAgICJh
cHBsaWNhdGlvbi92bmQucm4tcmVhbG1lZGlhIiwKLSAgICAgICAgICAgICJhcHBsaWNhdGlvbi94
LTNncCIsCi0gICAgICAgICAgICAiYXBwbGljYXRpb24veC1wbi1yZWFsYXVkaW8iLAotICAgICAg
ICAgICAgImFwcGxpY2F0aW9uL3gtbXBlZ3VybCIsCi0gICAgICAgICAgICAiYXVkaW8vM2dwcCIs
Ci0gICAgICAgICAgICAiYXVkaW8vYWFjIiwKLSAgICAgICAgICAgICJhdWRpby9mbGFjIiwKLSAg
ICAgICAgICAgICJhdWRpby9pTEJDLXNoIiwKLSAgICAgICAgICAgICJhdWRpby9taWRpIiwKLSAg
ICAgICAgICAgICJhdWRpby9tb2JpbGUteG1mIiwKLSAgICAgICAgICAgICJhdWRpby9tcDEiLAot
ICAgICAgICAgICAgImF1ZGlvL21wMiIsCi0gICAgICAgICAgICAiYXVkaW8vbXAzIiwKLSAgICAg
ICAgICAgICJhdWRpby9tcDQiLAotICAgICAgICAgICAgImF1ZGlvL21wZWciLAotICAgICAgICAg
ICAgImF1ZGlvL29nZyIsCi0gICAgICAgICAgICAiYXVkaW8vb3B1cyIsCi0gICAgICAgICAgICAi
YXVkaW8vcWNlbHAiLAotICAgICAgICAgICAgImF1ZGlvL3JpZmYtbWlkaSIsCi0gICAgICAgICAg
ICAiYXVkaW8vc3BlZXgiLAotICAgICAgICAgICAgImF1ZGlvL3dhdiIsCi0gICAgICAgICAgICAi
YXVkaW8vd2VibSIsCi0gICAgICAgICAgICAiYXVkaW8veC1hYzMiLAotICAgICAgICAgICAgImF1
ZGlvL3gtYWlmZiIsCi0gICAgICAgICAgICAiYXVkaW8veC1hbXItbmItc2giLAotICAgICAgICAg
ICAgImF1ZGlvL3gtYW1yLXdiLXNoIiwKLSAgICAgICAgICAgICJhdWRpby94LWF1IiwKLSAgICAg
ICAgICAgICJhdWRpby94LWF5IiwKLSAgICAgICAgICAgICJhdWRpby94LWNlbHQiLAotICAgICAg
ICAgICAgImF1ZGlvL3gtZHRzIiwKLSAgICAgICAgICAgICJhdWRpby94LWZsYWMiLAotICAgICAg
ICAgICAgImF1ZGlvL3gtZ2JzIiwKLSAgICAgICAgICAgICJhdWRpby94LWdzbSIsCi0gICAgICAg
ICAgICAiYXVkaW8veC1neW0iLAotICAgICAgICAgICAgImF1ZGlvL3gtaW1lbG9keSIsCi0gICAg
ICAgICAgICAiYXVkaW8veC1pcmNhbSIsCi0gICAgICAgICAgICAiYXVkaW8veC1rc3MiLAotICAg
ICAgICAgICAgImF1ZGlvL3gtbTRhIiwKLSAgICAgICAgICAgICJhdWRpby94LW1vZCIsCi0gICAg
ICAgICAgICAiYXVkaW8veC1tcDMiLAotICAgICAgICAgICAgImF1ZGlvL3gtbXBlZyIsCi0gICAg
ICAgICAgICAiYXVkaW8veC1tdXNlcGFjayIsCi0gICAgICAgICAgICAiYXVkaW8veC1uaXN0IiwK
LSAgICAgICAgICAgICJhdWRpby94LW5zZiIsCi0gICAgICAgICAgICAiYXVkaW8veC1wYXJpcyIs
Ci0gICAgICAgICAgICAiYXVkaW8veC1zYXAiLAotICAgICAgICAgICAgImF1ZGlvL3gtc2JjIiwK
LSAgICAgICAgICAgICJhdWRpby94LXNkcyIsCi0gICAgICAgICAgICAiYXVkaW8veC1zaG9ydGVu
IiwKLSAgICAgICAgICAgICJhdWRpby94LXNpZCIsCi0gICAgICAgICAgICAiYXVkaW8veC1zcGMi
LAotICAgICAgICAgICAgImF1ZGlvL3gtc3BlZXgiLAotICAgICAgICAgICAgImF1ZGlvL3gtc3Z4
IiwKLSAgICAgICAgICAgICJhdWRpby94LXR0YWZpbGUiLAotICAgICAgICAgICAgImF1ZGlvL3gt
dmdtIiwKLSAgICAgICAgICAgICJhdWRpby94LXZvYyIsCi0gICAgICAgICAgICAiYXVkaW8veC12
b3JiaXMrb2dnIiwKLSAgICAgICAgICAgICJhdWRpby94LXc2NCIsCi0gICAgICAgICAgICAiYXVk
aW8veC13YXYiLAotICAgICAgICAgICAgImF1ZGlvL3gtd2F2cGFjayIsCi0gICAgICAgICAgICAi
YXVkaW8veC13YXZwYWNrLWNvcnJlY3Rpb24iLAotICAgICAgICAgICAgInZpZGVvLzNncHAiLAot
ICAgICAgICAgICAgInZpZGVvL2ZsdiIsCi0gICAgICAgICAgICAidmlkZW8vbWoyIiwKLSAgICAg
ICAgICAgICJ2aWRlby9tcDJ0IiwKLSAgICAgICAgICAgICJ2aWRlby9tcDQiLAotICAgICAgICAg
ICAgInZpZGVvL21wZWciLAotICAgICAgICAgICAgInZpZGVvL21wZWd0cyIsCi0gICAgICAgICAg
ICAidmlkZW8vb2dnIiwKLSAgICAgICAgICAgICJ2aWRlby9xdWlja3RpbWUiLAotICAgICAgICAg
ICAgInZpZGVvL3Zpdm8iLAotICAgICAgICAgICAgInZpZGVvL3dlYm0iLAotICAgICAgICAgICAg
InZpZGVvL3gtY2R4YSIsCi0gICAgICAgICAgICAidmlkZW8veC1kaXJhYyIsCi0gICAgICAgICAg
ICAidmlkZW8veC1kdiIsCi0gICAgICAgICAgICAidmlkZW8veC1mbGkiLAotICAgICAgICAgICAg
InZpZGVvL3gtZmx2IiwKLSAgICAgICAgICAgICJ2aWRlby94LWgyNjMiLAotICAgICAgICAgICAg
InZpZGVvL3gtaXZmIiwKLSAgICAgICAgICAgICJ2aWRlby94LW00diIsCi0gICAgICAgICAgICAi
dmlkZW8veC1tYXRyb3NrYSIsCi0gICAgICAgICAgICAidmlkZW8veC1tbmciLAotICAgICAgICAg
ICAgInZpZGVvL3gtbXMtYXNmIiwKLSAgICAgICAgICAgICJ2aWRlby94LW1zdmlkZW8iLAotICAg
ICAgICAgICAgInZpZGVvL3gtbXZlIiwKLSAgICAgICAgICAgICJ2aWRlby94LW51diIsCi0gICAg
ICAgICAgICAidmlkZW8veC12Y2QiCisKKyAgICAgICAgR0xpc3QqIGF1ZGlvRGVjb2RlckZhY3Rv
cmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRf
RkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQVVE
SU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKKyAgICAgICAgR0xpc3QqIHZpZGVvRGVjb2RlckZhY3Rv
cmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRf
RkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklE
RU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKKyAgICAgICAgR0xpc3QqIGRlbXV4ZXJGYWN0b3JpZXMg
PSBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1lbnRzKEdTVF9FTEVNRU5UX0ZBQ1RP
UllfVFlQRV9ERU1VWEVSLCBHU1RfUkFOS19NQVJHSU5BTCk7CisKKyAgICAgICAgZW51bSBFbGVt
ZW50VHlwZSB7CisgICAgICAgICAgICBBdWRpb0RlY29kZXIgPSAwLAorICAgICAgICAgICAgVmlk
ZW9EZWNvZGVyLAorICAgICAgICAgICAgRGVtdXhlcgogICAgICAgICB9OwotICAgICAgICBmb3Ig
KGF1dG8mIHR5cGUgOiBtaW1lVHlwZXMpCi0gICAgICAgICAgICBzZXQuYWRkKHR5cGUpOworICAg
ICAgICBzdHJ1Y3QgR3N0Q2Fwc1dlYktpdE1hcHBpbmcgeworICAgICAgICAgICAgRWxlbWVudFR5
cGUgZWxlbWVudFR5cGU7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBjYXBzU3RyaW5nOworICAg
ICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gd2Via2l0TWltZVR5cGVzOworICAgICAgICB9
OworCisgICAgICAgIFZlY3RvcjxHc3RDYXBzV2ViS2l0TWFwcGluZz4gbWFwcGluZyA9IHsKKyAg
ICAgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby9taWRpIiwgeyJhdWRpby9taWRpIiwgImF1
ZGlvL3JpZmYtbWlkaSJ9fSwKKyAgICAgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LXNi
YyIsIHsgfX0sCisgICAgICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8veC1zaWQiLCB7IH19
LAorICAgICAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtZmxhYyIsIHsiYXVkaW8veC1m
bGFjIiwgImF1ZGlvL2ZsYWMifX0sCisgICAgICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8v
eC13YXYiLCB7ImF1ZGlvL3gtd2F2IiwgImF1ZGlvL3dhdiJ9fSwKKyAgICAgICAgICAgIHtBdWRp
b0RlY29kZXIsICJhdWRpby94LXdhdnBhY2siLCB7ImF1ZGlvL3gtd2F2cGFjayJ9fSwKKyAgICAg
ICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LXNwZWV4IiwgeyJhdWRpby9zcGVleCIsICJh
dWRpby94LXNwZWV4In19LAorICAgICAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtYWMz
IiwgeyB9fSwKKyAgICAgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LWVhYzMiLCB7ImF1
ZGlvL3gtYWMzIn19LAorICAgICAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtZHRzIiwg
eyB9fSwKKyAgICAgICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRlby94LWgyNjQsIHByb2ZpbGU9
KHN0cmluZyloaWdoIiwgeyJ2aWRlby9tcDQiLCAidmlkZW8veC1tNHYifX0sCisgICAgICAgICAg
ICB7VmlkZW9EZWNvZGVyLCAidmlkZW8veC1tc3ZpZGVvY29kZWMiLCB7InZpZGVvL3gtbXN2aWRl
byJ9fSwKKyAgICAgICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRlby94LWgyNjMiLCB7IH19LAor
ICAgICAgICAgICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL21wZWd0cyIsIHsgfX0sCisgICAgICAg
ICAgICB7VmlkZW9EZWNvZGVyLCAidmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCl7MSwyfSwg
c3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlIiwgeyJ2aWRlby9tcGVnIn19LAorICAgICAgICAg
ICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL3gtZGlyYWMiLCB7IH19LAorICAgICAgICAgICAge1Zp
ZGVvRGVjb2RlciwgInZpZGVvL3gtZmxhc2gtdmlkZW8iLCB7InZpZGVvL2ZsdiIsICJ2aWRlby94
LWZsdiJ9fSwKKyAgICAgICAgICAgIHtEZW11eGVyLCAidmlkZW8vcXVpY2t0aW1lIiwgeyB9fSwK
KyAgICAgICAgICAgIHtEZW11eGVyLCAidmlkZW8vcXVpY2t0aW1lLCB2YXJpYW50PShzdHJpbmcp
M2dwcCIsIHsidmlkZW8vM2dwcCJ9fSwKKyAgICAgICAgICAgIHtEZW11eGVyLCAiYXBwbGljYXRp
b24veC0zZ3AiLCB7IH19LAorICAgICAgICAgICAge0RlbXV4ZXIsICJ2aWRlby94LW1zLWFzZiIs
IHsgfX0sCisgICAgICAgICAgICB7RGVtdXhlciwgImF1ZGlvL3gtYWlmZiIsIHsgfX0sCisgICAg
ICAgICAgICB7RGVtdXhlciwgImFwcGxpY2F0aW9uL3gtcG4tcmVhbGF1ZGlvIiwgeyB9fSwKKyAg
ICAgICAgICAgIHtEZW11eGVyLCAiYXBwbGljYXRpb24vdm5kLnJuLXJlYWxtZWRpYSIsIHsgfX0s
CisgICAgICAgICAgICB7RGVtdXhlciwgImF1ZGlvL3gtd2F2IiwgeyJhdWRpby94LXdhdiIsICJh
dWRpby93YXYifX0sCisgICAgICAgICAgICB7RGVtdXhlciwgImFwcGxpY2F0aW9uL3gtaGxzIiwg
eyJhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3VybCIsICJhcHBsaWNhdGlvbi94LW1wZWd1cmwi
fX0KKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKGF1dG8mIGN1cnJlbnQgOiBtYXBwaW5nKSB7
CisgICAgICAgICAgICBHTGlzdCogZmFjdG9yaWVzID0gZGVtdXhlckZhY3RvcmllczsKKyAgICAg
ICAgICAgIGlmIChjdXJyZW50LmVsZW1lbnRUeXBlID09IEF1ZGlvRGVjb2RlcikKKyAgICAgICAg
ICAgICAgICBmYWN0b3JpZXMgPSBhdWRpb0RlY29kZXJGYWN0b3JpZXM7CisgICAgICAgICAgICBl
bHNlIGlmIChjdXJyZW50LmVsZW1lbnRUeXBlID09IFZpZGVvRGVjb2RlcikKKyAgICAgICAgICAg
ICAgICBmYWN0b3JpZXMgPSB2aWRlb0RlY29kZXJGYWN0b3JpZXM7CisKKyAgICAgICAgICAgIGlm
IChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoZmFjdG9yaWVzLCBjdXJyZW50LmNh
cHNTdHJpbmcpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50LndlYmtpdE1pbWVUeXBl
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBtaW1l
VHlwZSA6IGN1cnJlbnQud2Via2l0TWltZVR5cGVzKQorICAgICAgICAgICAgICAgICAgICAgICAg
c2V0LmFkZChtaW1lVHlwZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKGN1cnJlbnQuY2Fwc1N0cmluZykpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcHVzU3VwcG9ydGVkID0gZmFsc2U7
CisgICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNv
ZGVyRmFjdG9yaWVzLCAiYXVkaW8veC1vcHVzIikpIHsKKyAgICAgICAgICAgIG9wdXNTdXBwb3J0
ZWQgPSB0cnVlOworICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL29wdXMi
KSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHZvcmJpc1N1cHBvcnRlZCA9IGZhbHNlOwor
ICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGRlbXV4ZXJGYWN0
b3JpZXMsICJhcHBsaWNhdGlvbi9vZ2ciKSkgeworICAgICAgICAgICAgc2V0LmFkZChBdG9taWNT
dHJpbmcoImFwcGxpY2F0aW9uL29nZyIpKTsKKworICAgICAgICAgICAgdm9yYmlzU3VwcG9ydGVk
ID0gZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGF1ZGlvRGVjb2RlckZhY3Rvcmll
cywgImF1ZGlvL3gtdm9yYmlzIik7CisgICAgICAgICAgICBpZiAodm9yYmlzU3VwcG9ydGVkKSB7
CisgICAgICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL29nZyIpKTsKKyAg
ICAgICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8veC12b3JiaXMrb2dnIikp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50
Rm9yTWVkaWFUeXBlKHZpZGVvRGVjb2RlckZhY3RvcmllcywgInZpZGVvL3gtdGhlb3JhIikpCisg
ICAgICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoInZpZGVvL29nZyIpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgYXVkaW9NcGVnU3VwcG9ydGVkID0gZmFsc2U7CisgICAgICAg
IGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFjdG9y
aWVzLCAiYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0oaW50KVsxLCAzXSIp
KSB7CisgICAgICAgICAgICBhdWRpb01wZWdTdXBwb3J0ZWQgPSB0cnVlOworICAgICAgICAgICAg
c2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL21wMSIpKTsKKyAgICAgICAgICAgIHNldC5hZGQo
QXRvbWljU3RyaW5nKCJhdWRpby9tcDMiKSk7CisgICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0
cmluZygiYXVkaW8veC1tcDMiKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ3N0UmVnaXN0
cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGF1ZGlvRGVjb2RlckZhY3RvcmllcywgImF1ZGlvL21w
ZWcsIG1wZWd2ZXJzaW9uPShpbnQpezIsIDR9IikpIHsKKyAgICAgICAgICAgIGF1ZGlvTXBlZ1N1
cHBvcnRlZCA9IHRydWU7CisgICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8v
YWFjIikpOworICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL21wMiIpKTsK
KyAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9tcDQiKSk7CisgICAgICAg
ICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8veC1tNGEiKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoYXVkaW9NcGVnU3VwcG9ydGVkKSB7CisgICAgICAgICAgICBzZXQuYWRkKEF0
b21pY1N0cmluZygiYXVkaW8vbXBlZyIpKTsKKyAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3Ry
aW5nKCJhdWRpby94LW1wZWciKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ3N0UmVnaXN0
cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGRlbXV4ZXJGYWN0b3JpZXMsICJ2aWRlby94LW1hdHJv
c2thIikpIHsKKyAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJ2aWRlby94LW1hdHJv
c2thIikpOworCisgICAgICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFU
eXBlKHZpZGVvRGVjb2RlckZhY3RvcmllcywgInZpZGVvL3gtdnA4IikKKyAgICAgICAgICAgICAg
ICB8fCBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUodmlkZW9EZWNvZGVyRmFjdG9y
aWVzLCAidmlkZW8veC12cDkiKQorICAgICAgICAgICAgICAgIHx8IGdzdFJlZ2lzdHJ5SGFzRWxl
bWVudEZvck1lZGlhVHlwZSh2aWRlb0RlY29kZXJGYWN0b3JpZXMsICJ2aWRlby94LXZwMTAiKSkK
KyAgICAgICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygidmlkZW8vd2VibSIpKTsKKwor
ICAgICAgICAgICAgaWYgKHZvcmJpc1N1cHBvcnRlZCB8fCBvcHVzU3VwcG9ydGVkKQorICAgICAg
ICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby93ZWJtIikpOworICAgICAgICB9
CisKKyAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZShhdWRpb0RlY29kZXJGYWN0
b3JpZXMpOworICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKHZpZGVvRGVjb2Rl
ckZhY3Rvcmllcyk7CisgICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUoZGVtdXhl
ckZhY3Rvcmllcyk7CiAgICAgICAgIHJldHVybiBzZXQ7CiAgICAgfSgpOwotICAgIHJldHVybiBj
YWNoZTsKKyAgICByZXR1cm4gbWltZVR5cGVzOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUlu
c2Vuc2l0aXZlSGFzaD4mIHR5cGVzKQogewotICAgIHR5cGVzID0gbWltZVR5cGVDYWNoZSgpOwor
ICAgIHR5cGVzID0gbWltZVR5cGVTZXQoKTsKIH0KIAogTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlw
ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVu
Z2luZVN1cHBvcnRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQpAQCAtMTc4MCw3ICsxODA0LDcgQEAg
TWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1
cHBvcnRzVHlwZShjb25zdCBNZWRpYUUKICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05v
dFN1cHBvcnRlZDsKIAogICAgIC8vIHNwZWMgc2F5cyB3ZSBzaG91bGQgbm90IHJldHVybiAicHJv
YmFibHkiIGlmIHRoZSBjb2RlY3Mgc3RyaW5nIGlzIGVtcHR5Ci0gICAgaWYgKG1pbWVUeXBlQ2Fj
aGUoKS5jb250YWlucyhwYXJhbWV0ZXJzLnR5cGUpKQorICAgIGlmIChtaW1lVHlwZVNldCgpLmNv
bnRhaW5zKHBhcmFtZXRlcnMudHlwZSkpCiAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJzLmNvZGVj
cy5pc0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5QmVTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6
SXNTdXBwb3J0ZWQ7CiAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKIH0K
LS0gCjIuOC4x
</data>
<flag name="review"
          id="303429"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>