<?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>102157</bug_id>
          
          <creation_ts>2012-11-13 17:29:25 -0800</creation_ts>
          <short_desc>Plugins that resize might need to be snapshotted</short_desc>
          <delta_ts>2013-04-15 18:06:25 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.8</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>98318</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jon Lee">jonlee</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>andersca</cc>
    
    <cc>beidson</cc>
    
    <cc>bweinstein</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>mjs</cc>
    
    <cc>philn</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>766220</commentid>
    <comment_count>0</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2012-11-13 17:29:25 -0800</bug_when>
    <thetext>Plugins that start out as very small and then resize to something visible should be stopped, and re-enabled with user input. However, once the user has enabled it, we don&apos;t stop it again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766221</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2012-11-13 17:29:39 -0800</bug_when>
    <thetext>&lt;rdar://problem/12696259&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>874998</commentid>
    <comment_count>2</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-04-12 15:27:18 -0700</bug_when>
    <thetext>*** Bug 114539 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875093</commentid>
    <comment_count>3</comment_count>
      <attachid>197919</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-04-12 21:13:57 -0700</bug_when>
    <thetext>Created attachment 197919
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875095</commentid>
    <comment_count>4</comment_count>
      <attachid>197919</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2013-04-12 21:40:15 -0700</bug_when>
    <thetext>Comment on attachment 197919
Patch

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

&gt; Source/WebCore/html/HTMLPlugInImageElement.h:155
&gt; +    bool m_avoidedSnapshotDueToSize;

I think this variable is a little misleading. In the case of a really large plugin, it also avoids snapshot due to its size. I suppose doing a rename here to m_avoidedSnapshotDueToTinySize would be a quick fix.

But I wonder if the code might be more comprehensible if we went with an enum instead of these two bools, representing the reason for the initial evaluation of auto-starting. That gives more flexibility in tweaking behavior depending on the auto-start reason. Not strictly necessary, but I think doing that would avoid having to later triangulate a combo of variables to determine what’s happening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875096</commentid>
    <comment_count>5</comment_count>
      <attachid>197919</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2013-04-12 21:40:32 -0700</bug_when>
    <thetext>Comment on attachment 197919
Patch

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

&gt; Source/WebCore/html/HTMLPlugInImageElement.h:155
&gt; +    bool m_avoidedSnapshotDueToSize;

I think this variable is a little misleading. In the case of a really large plugin, it also avoids snapshot due to its size. I suppose doing a rename here to m_avoidedSnapshotDueToTinySize would be a quick fix.

But I wonder if the code might be more comprehensible if we went with an enum instead of these two bools, representing the reason for the initial evaluation of auto-starting. That gives more flexibility in tweaking behavior depending on the auto-start reason. Not strictly necessary, but I think doing that would avoid having to later triangulate a combo of variables to determine what’s happening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875229</commentid>
    <comment_count>6</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-04-13 14:12:53 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 197919 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=197919&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/HTMLPlugInImageElement.h:155
&gt; &gt; +    bool m_avoidedSnapshotDueToSize;
&gt; 
&gt; I think this variable is a little misleading. In the case of a really large plugin, it also avoids snapshot due to its size. I suppose doing a rename here to m_avoidedSnapshotDueToTinySize would be a quick fix.
&gt; 
&gt; But I wonder if the code might be more comprehensible if we went with an enum instead of these two bools, representing the reason for the initial evaluation of auto-starting. That gives more flexibility in tweaking behavior depending on the auto-start reason. Not strictly necessary, but I think doing that would avoid having to later triangulate a combo of variables to determine what’s happening.

Great suggestion! I&apos;ve implemented an enum. New patch coming very soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875234</commentid>
    <comment_count>7</comment_count>
      <attachid>197957</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-04-13 14:47:38 -0700</bug_when>
    <thetext>Created attachment 197957
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875236</commentid>
    <comment_count>8</comment_count>
      <attachid>197957</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-04-13 14:52:47 -0700</bug_when>
    <thetext>Comment on attachment 197957
Patch

Attachment 197957 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/122226</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875237</commentid>
    <comment_count>9</comment_count>
      <attachid>197957</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-04-13 14:53:17 -0700</bug_when>
    <thetext>Comment on attachment 197957
Patch

Attachment 197957 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/102276</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875238</commentid>
    <comment_count>10</comment_count>
      <attachid>197957</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-04-13 14:58:44 -0700</bug_when>
    <thetext>Comment on attachment 197957
Patch

Attachment 197957 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/129235</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875240</commentid>
    <comment_count>11</comment_count>
      <attachid>197958</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-04-13 15:06:40 -0700</bug_when>
    <thetext>Created attachment 197958
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875260</commentid>
    <comment_count>12</comment_count>
      <attachid>197958</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2013-04-13 18:17:37 -0700</bug_when>
    <thetext>Comment on attachment 197958
Patch

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

Caution: much nitpicking ahead. (And overall, “plugIns&quot;, capital I!!)

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:103
&gt; +        m_reasonForSnapshotting = NoSnapshotRestarted;

Set to NeverSnapshot

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:468
&gt;  

Nit. Could we have the outer if here do an early return instead? if (!frame-&gt;loader()-&gt;subframeLoader()-&gt;containsPlugins()) continue;
It reduces indentation and braces.

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:469
&gt;              RefPtr&lt;NodeList&gt; plugins = frame-&gt;document()-&gt;getElementsByTagName(embedTag.localName());

Nit: plugIns.

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:470
&gt;              if (plugins)

Nit: Combine the two here? if (RefPtr&lt;NodeList&gt; plugIns = ...)

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:474
&gt;              if (plugins)

Nit: Ditto.

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:479
&gt; +    for (size_t i = 0, length = similarPlugins.size(); i &lt; length; i++) {

Nit: prefix increment

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:486
&gt; +        pluginToRestart-&gt;m_blessedPlugin = true;

Instead of this variable, set the SnapshotDecision to NeverSnapshot

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:543
&gt; +    if (!m_needsCheckForSizeChange || m_reasonForSnapshotting != NoSnapshotTinySize || m_blessedPlugin)

I think you can reduce this to just m_reasonForSnapshotting != MaySnapshotWhenResized

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:556
&gt; +    m_reasonForSnapshotting = SnapshotResized;

AlwaysSnapshot

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:570
&gt; +        m_reasonForSnapshotting = NoSnapshotDisabled;

NeverSnapshot

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:576
&gt; +        m_reasonForSnapshotting = NoSnapshotBlessed;

NeverSnapshot

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:582
&gt; +        m_reasonForSnapshotting = NoSnapshotRestarted;

NeverSnapshot

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:589
&gt; +        m_reasonForSnapshotting = NoSnapshotRestarted;

NeverSnapshot

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:597
&gt; +        m_reasonForSnapshotting = NoSnapshotPluginDocument;

NeverSnapshot

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:604
&gt; +        m_blessedPlugin = true;

NeverSnapshot

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:611
&gt; +        m_blessedPlugin = true;

NeverSnapshot

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:621
&gt; +        m_blessedPlugin = true;

NeverSnapshot

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:628
&gt;          setDisplayState(WaitingForSnapshot);

AlwaysSnapshot

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:635
&gt; +        m_blessedPlugin = true;

NeverSnapshot

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:654
&gt; +        m_blessedPlugin = true;

NeverSnapshot

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:661
&gt; +        m_reasonForSnapshotting = NoSnapshotTinySize;

MaySnapshotWhenResized

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:668
&gt;          setDisplayState(WaitingForSnapshot);

AlwaysSnapshot

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:673
&gt; +    m_reasonForSnapshotting = SnapshotDefault;

AlwaysSnapshot

&gt; Source/WebCore/html/HTMLPlugInImageElement.h:89
&gt; +    void setNeedsCheckForSizeChange() { m_needsCheckForSizeChange = true; }

Not sure we need these two anymore?

&gt; Source/WebCore/html/HTMLPlugInImageElement.h:92
&gt; +    enum SnapshotReason {

I think we can make this clearer. If you read these enums as written, you’d think NoSnapshotDisabled means that all snapshots are enabled, where in the code it denotes that plugins autostart because the feature is disabled.

“SnapshotReason” could be improved because it implies that we’re snapshotting, when in fact it contains values to snapshot and not snapshot. How about “SnapshotDecision”?

Suggestions:

&gt; Source/WebCore/html/HTMLPlugInImageElement.h:93
&gt; +        NoSnapshotValue,

NotYetDetermined

&gt; Source/WebCore/html/HTMLPlugInImageElement.h:94
&gt; +        NoSnapshotDisabled,

NeverSnapshot

&gt; Source/WebCore/html/HTMLPlugInImageElement.h:95
&gt; +        NoSnapshotPluginDocument,

Merge into NeverSnapshot

&gt; Source/WebCore/html/HTMLPlugInImageElement.h:96
&gt; +        NoSnapshotTinySize,

MaySnapshotWhenResized

&gt; Source/WebCore/html/HTMLPlugInImageElement.h:101
&gt; +        NoSnapshotTopLevel,

Merge these 5 into NeverSnapshot

&gt; Source/WebCore/html/HTMLPlugInImageElement.h:106
&gt; +    };

Add “AlwaysSnapshot&quot;

&gt; Source/WebCore/html/HTMLPlugInImageElement.h:171
&gt; +    bool m_blessedPlugin;

Unneeded?

&gt; Source/WebCore/html/HTMLPlugInImageElement.h:172
&gt; +    bool m_needsCheckForSizeChange;

Unneeded?

&gt; Source/WebCore/page/FrameView.cpp:1425
&gt; +        if (!pluginElement-&gt;needsCheckForSizeChange())

check for !MaySnapshotWhenResized instead

&gt; Source/WebCore/page/FrameView.cpp:2599
&gt; +                pluginElement-&gt;checkSnapshotStatus();

All on one line to avoid temporary.

&gt; Source/WebCore/rendering/RenderEmbeddedObject.cpp:312
&gt; +                if (plugInImageElement-&gt;reasonForSnapshotting() == HTMLPlugInImageElement::NoSnapshotTinySize &amp;&amp; document()-&gt;view()) {

Check MaySnapshotWhenResized</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876095</commentid>
    <comment_count>13</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-04-15 15:49:37 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:468
&gt; &gt;  
&gt; 
&gt; Nit. Could we have the outer if here do an early return instead? if (!frame-&gt;loader()-&gt;subframeLoader()-&gt;containsPlugins()) continue;
&gt; It reduces indentation and braces.

Done

&gt; 
&gt; &gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:469
&gt; &gt;              RefPtr&lt;NodeList&gt; plugins = frame-&gt;document()-&gt;getElementsByTagName(embedTag.localName());
&gt; 
&gt; Nit: plugIns.

Done

&gt; 
&gt; &gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:470
&gt; &gt;              if (plugins)
&gt; 
&gt; Nit: Combine the two here? if (RefPtr&lt;NodeList&gt; plugIns = ...)

I have a personal bias against that style :) However, the variable is used
after the conditional, so it&apos;s ok to be outside.

&gt; &gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:479
&gt; &gt; +    for (size_t i = 0, length = similarPlugins.size(); i &lt; length; i++) {
&gt; 
&gt; Nit: prefix increment

Done

&gt; &gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:486
&gt; &gt; +        pluginToRestart-&gt;m_blessedPlugin = true;
&gt; 
&gt; Instead of this variable, set the SnapshotDecision to NeverSnapshot
 
Done

&gt; 
&gt; &gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:543
&gt; &gt; +    if (!m_needsCheckForSizeChange || m_reasonForSnapshotting != NoSnapshotTinySize || m_blessedPlugin)
&gt; 
&gt; I think you can reduce this to just m_reasonForSnapshotting != MaySnapshotWhenResized

Done

&gt; &gt; Source/WebCore/html/HTMLPlugInImageElement.h:89
&gt; &gt; +    void setNeedsCheckForSizeChange() { m_needsCheckForSizeChange = true; }
&gt; 
&gt; Not sure we need these two anymore?

We do need this because we can have the case were a widget needs an update and we&apos;re
MaySnapshotWhenResized. i.e. we could have been put on the post-layout list for a
reason *other* than a resize.

&gt; &gt; Source/WebCore/html/HTMLPlugInImageElement.h:92
&gt; &gt; +    enum SnapshotReason {
&gt; 
&gt; I think we can make this clearer. If you read these enums as written, you’d
&gt; think NoSnapshotDisabled means that all snapshots are enabled, where in the
&gt; code it denotes that plugins autostart because the feature is disabled.
&gt; 
&gt; “SnapshotReason” could be improved because it implies that we’re snapshotting,
&gt; when in fact it contains values to snapshot and not snapshot. How about
&gt; “SnapshotDecision”?

Agreed and fixed.

&gt; &gt; Source/WebCore/html/HTMLPlugInImageElement.h:171
&gt; &gt; +    bool m_blessedPlugin;
&gt; 
&gt; Unneeded?

Yep, removed.

&gt; &gt; Source/WebCore/html/HTMLPlugInImageElement.h:172
&gt; &gt; +    bool m_needsCheckForSizeChange;
&gt; 
&gt; Unneeded?

Unfortunately still needed. See above.

&gt; &gt; Source/WebCore/page/FrameView.cpp:1425
&gt; &gt; +        if (!pluginElement-&gt;needsCheckForSizeChange())
&gt; 
&gt; check for !MaySnapshotWhenResized instead

See above.

&gt; &gt; Source/WebCore/page/FrameView.cpp:2599
&gt; &gt; +                pluginElement-&gt;checkSnapshotStatus();
&gt; 
&gt; All on one line to avoid temporary.

It&apos;s used after the early return too.

&gt; &gt; Source/WebCore/rendering/RenderEmbeddedObject.cpp:312
&gt; &gt; +                if (plugInImageElement-&gt;reasonForSnapshotting() == HTMLPlugInImageElement::NoSnapshotTinySize &amp;&amp; document()-&gt;view()) {
&gt; 
&gt; Check MaySnapshotWhenResized

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876099</commentid>
    <comment_count>14</comment_count>
      <attachid>198195</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-04-15 15:56:46 -0700</bug_when>
    <thetext>Created attachment 198195
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876133</commentid>
    <comment_count>15</comment_count>
      <attachid>198195</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-04-15 16:39:35 -0700</bug_when>
    <thetext>Comment on attachment 198195
Patch

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

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:559
&gt; +        static_cast&lt;PluginViewBase*&gt;(widget)-&gt;beginSnapshottingRunningPlugin();

Is there no toPluginViewBase()?

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:673
&gt; +    if (!widget-&gt;isPluginViewBase() || !static_cast&lt;const PluginViewBase*&gt;(widget)-&gt;shouldAlwaysAutoStart())

Here too.

&gt; Source/WebCore/rendering/RenderEmbeddedObject.cpp:306
&gt; +    if (!wasMissingWidget &amp;&amp; newSize.width() &gt;= oldSize.width() &amp;&amp; newSize.height() &gt;= oldSize.height()) {

That&apos;s a lot of ifs. Is there anything better we can do here depth-wise?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876164</commentid>
    <comment_count>16</comment_count>
      <attachid>198195</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2013-04-15 17:18:30 -0700</bug_when>
    <thetext>Comment on attachment 198195
Patch

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

&gt; Source/WebCore/rendering/RenderEmbeddedObject.cpp:308
&gt; +        if (element &amp;&amp; element-&gt;isPluginElement()) {

How about adding &quot;&amp;&amp; toHTMLPlugInElement(element)-&gt;isPlugInImageElement()&quot; here? then...

&gt; Source/WebCore/rendering/RenderEmbeddedObject.cpp:309
&gt; +            HTMLPlugInElement* plugInElement = toHTMLPlugInElement(element);

... HTMLPlugInImageElement can be defined here...

&gt; Source/WebCore/rendering/RenderEmbeddedObject.cpp:312
&gt; +                if (plugInImageElement-&gt;snapshotDecision() == HTMLPlugInImageElement::MaySnapshotWhenResized &amp;&amp; document()-&gt;view()) {

... and you can push the displayState() check here, getting rid of one of the ifs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876165</commentid>
    <comment_count>17</comment_count>
      <attachid>198195</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-04-15 17:18:52 -0700</bug_when>
    <thetext>Comment on attachment 198195
Patch

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

&gt;&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:559
&gt;&gt; +        static_cast&lt;PluginViewBase*&gt;(widget)-&gt;beginSnapshottingRunningPlugin();
&gt; 
&gt; Is there no toPluginViewBase()?

Fixed!

&gt;&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:673
&gt;&gt; +    if (!widget-&gt;isPluginViewBase() || !static_cast&lt;const PluginViewBase*&gt;(widget)-&gt;shouldAlwaysAutoStart())
&gt; 
&gt; Here too.

Also fixed.

&gt;&gt; Source/WebCore/rendering/RenderEmbeddedObject.cpp:306
&gt;&gt; +    if (!wasMissingWidget &amp;&amp; newSize.width() &gt;= oldSize.width() &amp;&amp; newSize.height() &gt;= oldSize.height()) {
&gt; 
&gt; That&apos;s a lot of ifs. Is there anything better we can do here depth-wise?

Not sure I can do much about it. I can&apos;t return early because the code afterwards needs to run.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876182</commentid>
    <comment_count>18</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-04-15 17:54:29 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 198195 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=198195&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderEmbeddedObject.cpp:308
&gt; &gt; +        if (element &amp;&amp; element-&gt;isPluginElement()) {
&gt; 
&gt; How about adding &quot;&amp;&amp; toHTMLPlugInElement(element)-&gt;isPlugInImageElement()&quot; here? then...
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderEmbeddedObject.cpp:309
&gt; &gt; +            HTMLPlugInElement* plugInElement = toHTMLPlugInElement(element);
&gt; 
&gt; ... HTMLPlugInImageElement can be defined here...
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderEmbeddedObject.cpp:312
&gt; &gt; +                if (plugInImageElement-&gt;snapshotDecision() == HTMLPlugInImageElement::MaySnapshotWhenResized &amp;&amp; document()-&gt;view()) {
&gt; 
&gt; ... and you can push the displayState() check here, getting rid of one of the ifs.

Good suggestions. Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876188</commentid>
    <comment_count>19</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-04-15 18:06:25 -0700</bug_when>
    <thetext>https://trac.webkit.org/r148482</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>197919</attachid>
            <date>2013-04-12 21:13:57 -0700</date>
            <delta_ts>2013-04-13 14:47:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>resizer.patch</filename>
            <type>text/plain</type>
            <size>22435</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3NDRhYTI0Li5hZjJhYWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzkg
QEAKKzIwMTMtMDQtMTIgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgorCisgICAgICAg
IFBsdWdpbnMgdGhhdCByZXNpemUgbWlnaHQgbmVlZCB0byBiZSBzbmFwc2hvdHRlZC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjE1NworICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMTI2OTYyNTk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQSBwbHVnaW4gY291bGQgYXZvaWQgc25hcHNob3R0aW5nIGlm
IGl0IHN0YXJ0ZWQgdmVyeQorICAgICAgICBzbWFsbCAoYmVsb3cgdGhlIHRocmVzaG9sZCB3aGVy
ZSB3ZSBhdXRvc3RhcnQpLCBhbmQgdGhlbgorICAgICAgICByZXNpemVkIHRvIGJlIGxhcmdlIChh
Ym92ZSB0aGUgdGhyZXNob2xkKS4gRGV0ZWN0IHRoaXMKKyAgICAgICAgY2FzZSBhbmQgdGVsbCB0
aGUgcGx1Z2luIHRvIHNuYXBzaG90LgorCisgICAgICAgIFRoZXJlIHVuZm9ydHVuYXRlbHkgaXMg
YSBiaXQgb2Ygc3RhdGUgdG8gdHJhY2sgd2hlbiBkb2luZworICAgICAgICB0aGlzLiBXZSBoYXZl
IHRvIHN0YXJ0IHRoZSBzbmFwc2hvdHRpbmcgaW4gYSBwb3N0LWxheW91dAorICAgICAgICB0YXNr
LCBzbyB3ZSBjYXJyeSBhIGZsYWcgdG8gc2F5IHdlJ3JlIGNoZWNraW5nIHNpemUgYnV0CisgICAg
ICAgIG5vdCB3YW50aW5nIHRoZSBwbHVnaW4gdG8gdXBkYXRlICh3aGljaCB3b3VsZCByZXN0YXJ0
IGl0KS4KKyAgICAgICAgV2UgYWxzbyBtaWdodCBiZSBhIHBsdWdpbiB0aGF0IHdvdWxkIGhhdmUg
YWxyZWFkeSByZXN0YXJ0ZWQKKyAgICAgICAgZHVlIHRvIGEgc2ltaWxhciBwbHVnaW4gYmVpbmcg
Y2xpY2tlZCBvciBkZXRlY3RlZCBhcyBkb21pbmFudC4KKyAgICAgICAgU28gdGhpcyBwYXRjaCBp
bnRyb2R1Y2VzIHRoZSBjb25jZXB0IG9mIGEgYmxlc3NlZCBwbHVnaW4sIHdoaWNoCisgICAgICAg
IHdvdWxkIGhhdmUgc3RhcnRlZCBhdXRvbWF0aWNhbGx5IGlmIGl0IGhhZG4ndCBhbHJlYWR5IHN0
YXJ0ZWQhCisKKyAgICAgICAgSSBhbHNvIGFkZGVkIHNvbWUgbW9yZSBsb2dnaW5nIHRvIGJlIG1v
cmUgY2xlYXIgYWJvdXQgd2hhdCBpcworICAgICAgICBoYXBwZW5pbmcgdG8gcGx1Z2lucyBnb2lu
ZyB0aHJvdWdoIHRoZSBzbmFwc2hvdCBwcm9jZXNzLCBhbmQKKyAgICAgICAgY2hhbmdlZCB0aGUg
b3JkZXIgb2YgdGhlIHRlc3RzIGluIHRoZSBhbGdvcml0aG0gc28gdGhhdCBkb21haW4KKyAgICAg
ICAgZGV0ZWN0aW9uIGNvbWVzIGJlZm9yZSBleGFtaW5pbmcgdGhlIHNpemUuCisKKyAgICAgICAg
KiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFBsdWdJbkltYWdlRWxlbWVudDo6SFRNTFBsdWdJbkltYWdlRWxlbWVudCk6IEluaXRpYWxpc2UK
KyAgICAgICAgICAgIHRoZSB0aHJlZSBuZXcgbWVtYmVyIHZhcmlhYmxlcy4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnNldERpc3BsYXlTdGF0ZSk6IE1hcmsgYSBy
ZXN0YXJ0ZWQKKyAgICAgICAgICAgIHBsdWdpbiBhcyBibGVzc2VkLiBUaGlzIG1lYW5zIHRoYXQg
aWYgaXQgbGF0ZXIgcmVzaXplcyBhYm92ZSB0aGUKKyAgICAgICAgICAgIHRocmVzaG9sZCwgaXQg
d29uJ3QgdHJpZ2dlciB0aGUgc25hcHNob3QgZGV0ZWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6Y2hlY2tTbmFwc2hvdFN0YXR1cyk6IFJlbmFtZWQgZnJv
bQorICAgICAgICAgICAgdXBkYXRlU25hcHNob3RJbmZvLiBUaGlzIG5vdyB1cGRhdGVzIHRoZSBz
bmFwc2hvdCwgYnV0IGFsc28gcnVucworICAgICAgICAgICAgdGhlIGNoZWNrIGZvciBzaXplIGNo
YW5nZXMuCisgICAgICAgIChXZWJDb3JlOjphZGRQbHVnSW5zRnJvbU5vZGVMaXN0TWF0Y2hpbmdQ
bHVnSW5PcmlnaW4pOiBHYXRoZXIgYWxsIHBsdWdpbnMKKyAgICAgICAgICAgIHRoYXQgbG9vayBs
aWtlIGEgcmVzdGFydGluZyBwbHVnaW4sIG5vdCBqdXN0IHRob3NlIHNuYXBzaG90dGVkLiBUaGF0
CisgICAgICAgICAgICB3YXkgdGhleSBjYW4gYWxsIGJlIGJsZXNzZWQuCisgICAgICAgIChXZWJD
b3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZXN0YXJ0U2ltaWxhclBsdWdJbnMpOiBCbGVz
cyBldmVyeQorICAgICAgICAgICAgcGx1Z2luIHRoYXQgbG9va3Mgc2ltaWxhciwgd2hldGhlciBv
ciBub3QgaXQgaXMgc25hcHNob3R0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50Ojp1c2VyRGlkQ2xpY2tTbmFwc2hvdCk6IE1vcmUgbG9nZ2luZy4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnNldElzUHJpbWFyeVNuYXBzaG90dGVk
UGx1Z0luKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
OjpjaGVja1NpemVDaGFuZ2VGb3JTbmFwc2hvdHRpbmcpOiBOZXcKKyAgICAgICAgICAgIG1ldGhv
ZC4gSWYgdGhlIHBsdWdpbiB3YXMgYmVsb3cgdGhlIHRocmVzaG9sZCBhbmQgaXMgbm93IGFib3Zl
IGl0LAorICAgICAgICAgICAgYmVnaW4gdGhlIHNuYXBzaG90dGluZyBwcm9jZXNzLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6c3ViZnJhbWVMb2FkZXJXaWxsQ3Jl
YXRlUGx1Z0luKTogQmxlc3NlZAorICAgICAgICAgICAgcGx1Z2lucyBzaG91bGQgc3RhcnQgaW1t
ZWRpYXRlbHkuIE1vdmUgdGhlIG9yaWdpbiB0ZXN0IGVhcmxpZXIgaW4KKyAgICAgICAgICAgIHRo
ZSBtZXRob2QuIElmIGEgcGx1Z2luIGF2b2lkZWQgc25hcHNob3R0aW5nIGR1ZSB0byBzaXplLCBy
ZW1lbWJlcgorICAgICAgICAgICAgdGhlIHNpemUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1
Z0luSW1hZ2VFbGVtZW50OjpzdWJmcmFtZUxvYWRlckRpZENyZWF0ZVBsdWdJbik6IEJsZXNzIHRo
ZQorICAgICAgICAgICAgcGx1Z2luLgorCisgICAgICAgICogaHRtbC9IVE1MUGx1Z0luSW1hZ2VF
bGVtZW50Lmg6CisgICAgICAgIChIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KTogRm91ciBuZXcgbWVt
YmVyIHZhcmlhYmxlczoKKyAgICAgICAgICAgIC0gd2hldGhlciBvciBub3QgYSBwbHVnaW4gaXMg
Ymxlc3NlZAorICAgICAgICAgICAgLSB3aGV0aGVyIG9yIG5vdCB0aGUgcGx1Z2luIGF2b2lkZWQg
c25hcHNob3R0aW5nIGR1ZSB0byBiZWluZyB0aW55CisgICAgICAgICAgICAtIHRoZSBzaXplIHdo
ZW4gaXQgYXZvaWRlZCBzbmFwc2hvdHRpbmcKKyAgICAgICAgICAgIC0gYSBmbGFnIHRvIGluZGlj
YXRlIHRoZSBwb3N0IGxheW91dCB1cGRhdGUgd2FzIHRyaWdnZXJlZCBkdWUgdG8KKyAgICAgICAg
ICAgICAgYSBzaXplIGNoYW5nZQorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxl
bWVudDo6bmVlZHNDaGVja0ZvclNpemVDaGFuZ2UpOiBOZXcgbWV0aG9kLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6c2V0TmVlZHNDaGVja0ZvclNpemVDaGFuZ2Up
OiBOZXcgbWV0aG9kLgorCisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVWaWV3OjphZGRXaWRnZXRUb1VwZGF0ZSk6IEd1YXJkIHVwZGF0aW5nIHRo
ZSB3aWRnZXQuIFdlIGRvbid0CisgICAgICAgICAgICB3YW50IHRvIGRvIGl0IHdoZW4gd2UncmUg
Y2hlY2tpbmcgZm9yIGEgc2l6ZSBjaGFuZ2UgaW4gdGhlIHBsdWdpbi4KKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVmlldzo6dXBkYXRlV2lkZ2V0KTogQ2FsbCBuZXcgbmFtZS4KKworICAgICAgICAq
IHBsdWdpbnMvUGx1Z2luVmlld0Jhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXdC
YXNlOjpiZWdpblNuYXBzaG90dGluZ1J1bm5pbmdQbHVnaW4pOiBFbXB0eSB2aXJ0dWFsCisgICAg
ICAgICAgICBtZXRob2QgdG8gc25hcHNob3QgYSBydW5uaW5nIHBsdWdpbi4KKworICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJFbWJlZGRlZE9iamVjdDo6bGF5b3V0KTogSWYgdGhlIHBsdWdpbiBoYXMgaW5jcmVhc2Vk
IGluCisgICAgICAgICAgICBzaXplIGFkZCBpdCB0byB0aGUgcG9zdCBsYXlvdXQgbGlzdCBzbyB0
aGF0IGl0IHdpbGwgYmUgY2hlY2tlZC4KKwogMjAxMy0wNC0xMSAgQWxsYW4gU2FuZGZlbGQgSmVu
c2VuICA8YWxsYW4uamVuc2VuQGRpZ2lhLmNvbT4KIAogICAgICAgICBoYW5kbGVNb3VzZU1vdmVF
dmVudCBzaG91bGQgbGV0IGhpdC10ZXN0aW5nIGhpdC10ZXN0IHNjcm9sbGJhcnMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCmluZGV4IDRlOGVlYjBl
Li5kMjdiZWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxl
bWVudC5jcHAKQEAgLTgxLDYgKzgxLDkgQEAgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6SFRNTFBs
dWdJbkltYWdlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2MKICAgICAs
IG1fcmVtb3ZlU25hcHNob3RUaW1lcih0aGlzLCAmSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVt
b3ZlU25hcHNob3RUaW1lckZpcmVkKQogICAgICwgbV9jcmVhdGVkRHVyaW5nVXNlckdlc3R1cmUo
U2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpCiAgICAgLCBtX3Jlc3Rh
cnRlZFBsdWdpbihmYWxzZSkKKyAgICAsIG1fYmxlc3NlZFBsdWdpbihmYWxzZSkKKyAgICAsIG1f
YXZvaWRlZFNuYXBzaG90RHVlVG9TaXplKGZhbHNlKQorICAgICwgbV9uZWVkc0NoZWNrRm9yU2l6
ZUNoYW5nZShmYWxzZSkKIHsKICAgICBzZXRIYXNDdXN0b21TdHlsZUNhbGxiYWNrcygpOwogfQpA
QCAtOTYsNiArOTksNyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnNldERpc3BsYXlT
dGF0ZShEaXNwbGF5U3RhdGUgc3RhdGUpCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGlmIChzdGF0
ZSA9PSBSZXN0YXJ0aW5nV2l0aFBlbmRpbmdNb3VzZUNsaWNrIHx8IHN0YXRlID09IFJlc3RhcnRp
bmcpIHsKICAgICAgICAgbV9yZXN0YXJ0ZWRQbHVnaW4gPSB0cnVlOworICAgICAgICBtX2JsZXNz
ZWRQbHVnaW4gPSB0cnVlOwogICAgICAgICBpZiAoZGlzcGxheVN0YXRlKCkgPT0gRGlzcGxheWlu
Z1NuYXBzaG90KQogICAgICAgICAgICAgbV9yZW1vdmVTbmFwc2hvdFRpbWVyLnN0YXJ0T25lU2hv
dChyZW1vdmVTbmFwc2hvdFRpbWVyRGVsYXkpOwogICAgIH0KQEAgLTMzNSw4ICszMzksMTQgQEAg
c3RhdGljIEF0b21pY1N0cmluZyBjbGFzc05hbWVGb3JTaGFkb3dSb290KGNvbnN0IE5vZGUqIG5v
ZGUpCiAgICAgcmV0dXJuIHBsdWdJbkxhcmdlU2l6ZUNsYXNzTmFtZTsKIH0KIAotdm9pZCBIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50Ojp1cGRhdGVTbmFwc2hvdEluZm8oKQordm9pZCBIVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50OjpjaGVja1NuYXBzaG90U3RhdHVzKCkKIHsKKyAgICBpZiAoIXJlbmRlcmVy
KCktPmlzU25hcHNob3R0ZWRQbHVnSW4oKSkgeworICAgICAgICBpZiAoZGlzcGxheVN0YXRlKCkg
PT0gUGxheWluZykKKyAgICAgICAgICAgIGNoZWNrU2l6ZUNoYW5nZUZvclNuYXBzaG90dGluZygp
OworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgU2hhZG93Um9vdCogcm9vdCA9IHVzZXJB
Z2VudFNoYWRvd1Jvb3QoKTsKICAgICBpZiAoIXJvb3QpCiAgICAgICAgIHJldHVybjsKQEAgLTQy
Nyw3ICs0MzcsNyBAQCBzdGF0aWMgdm9pZCBhZGRQbHVnSW5zRnJvbU5vZGVMaXN0TWF0Y2hpbmdQ
bHVnSW5PcmlnaW4oSFRNTFBsdWdJbkltYWdlRWxlbWVudExpcwogICAgICAgICBOb2RlKiBub2Rl
ID0gY29sbGVjdGlvbi0+aXRlbShpKTsKICAgICAgICAgaWYgKG5vZGUtPmlzUGx1Z2luRWxlbWVu
dCgpKSB7CiAgICAgICAgICAgICBIVE1MUGx1Z0luRWxlbWVudCogcGx1Z0luRWxlbWVudCA9IHRv
SFRNTFBsdWdJbkVsZW1lbnQobm9kZSk7Ci0gICAgICAgICAgICBpZiAocGx1Z0luRWxlbWVudC0+
aXNQbHVnSW5JbWFnZUVsZW1lbnQoKSAmJiBwbHVnSW5FbGVtZW50LT5kaXNwbGF5U3RhdGUoKSA8
PSBIVE1MUGx1Z0luRWxlbWVudDo6RGlzcGxheWluZ1NuYXBzaG90KSB7CisgICAgICAgICAgICBp
ZiAocGx1Z0luRWxlbWVudC0+aXNQbHVnSW5JbWFnZUVsZW1lbnQoKSkgewogICAgICAgICAgICAg
ICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQqIHBsdWdJbkltYWdlRWxlbWVudCA9IHRvSFRNTFBs
dWdJbkltYWdlRWxlbWVudChub2RlKTsKICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiBsb2Fk
ZWRVUkwgPSBwbHVnSW5JbWFnZUVsZW1lbnQtPmxvYWRlZFVybCgpOwogICAgICAgICAgICAgICAg
IFN0cmluZyBvdGhlck1pbWVUeXBlID0gcGx1Z0luSW1hZ2VFbGVtZW50LT5sb2FkZWRNaW1lVHlw
ZSgpOwpAQCAtNDQ1LDcgKzQ1NSw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVz
dGFydFNpbWlsYXJQbHVnSW5zKCkKIAogICAgIFN0cmluZyBwbHVnSW5PcmlnaW4gPSBtX2xvYWRl
ZFVybC5ob3N0KCk7CiAgICAgU3RyaW5nIG1pbWVUeXBlID0gbG9hZGVkTWltZVR5cGUoKTsKLSAg
ICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50TGlzdCBwbHVnaW5zTmVlZGluZ1Jlc3RhcnQ7CisgICAg
SFRNTFBsdWdJbkltYWdlRWxlbWVudExpc3Qgc2ltaWxhclBsdWdpbnM7CiAKICAgICBpZiAoIWRv
Y3VtZW50KCktPnBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDU3LDE3ICs0NjcsMjIgQEAg
dm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZXN0YXJ0U2ltaWxhclBsdWdJbnMoKQogCiAg
ICAgICAgICAgICBSZWZQdHI8Tm9kZUxpc3Q+IHBsdWdpbnMgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+
Z2V0RWxlbWVudHNCeVRhZ05hbWUoZW1iZWRUYWcubG9jYWxOYW1lKCkpOwogICAgICAgICAgICAg
aWYgKHBsdWdpbnMpCi0gICAgICAgICAgICAgICAgYWRkUGx1Z0luc0Zyb21Ob2RlTGlzdE1hdGNo
aW5nUGx1Z0luT3JpZ2luKHBsdWdpbnNOZWVkaW5nUmVzdGFydCwgcGx1Z2lucywgcGx1Z0luT3Jp
Z2luLCBtaW1lVHlwZSk7CisgICAgICAgICAgICAgICAgYWRkUGx1Z0luc0Zyb21Ob2RlTGlzdE1h
dGNoaW5nUGx1Z0luT3JpZ2luKHNpbWlsYXJQbHVnaW5zLCBwbHVnaW5zLCBwbHVnSW5PcmlnaW4s
IG1pbWVUeXBlKTsKIAogICAgICAgICAgICAgcGx1Z2lucyA9IGZyYW1lLT5kb2N1bWVudCgpLT5n
ZXRFbGVtZW50c0J5VGFnTmFtZShvYmplY3RUYWcubG9jYWxOYW1lKCkpOwogICAgICAgICAgICAg
aWYgKHBsdWdpbnMpCi0gICAgICAgICAgICAgICAgYWRkUGx1Z0luc0Zyb21Ob2RlTGlzdE1hdGNo
aW5nUGx1Z0luT3JpZ2luKHBsdWdpbnNOZWVkaW5nUmVzdGFydCwgcGx1Z2lucywgcGx1Z0luT3Jp
Z2luLCBtaW1lVHlwZSk7CisgICAgICAgICAgICAgICAgYWRkUGx1Z0luc0Zyb21Ob2RlTGlzdE1h
dGNoaW5nUGx1Z0luT3JpZ2luKHNpbWlsYXJQbHVnaW5zLCBwbHVnaW5zLCBwbHVnSW5PcmlnaW4s
IG1pbWVUeXBlKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGZvciAoc2l6ZV90IGkgPSAwLCBs
ZW5ndGggPSBwbHVnaW5zTmVlZGluZ1Jlc3RhcnQuc2l6ZSgpOyBpIDwgbGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgcGx1Z2luc05lZWRpbmdSZXN0YXJ0W2ldLT5zZXREaXNwbGF5U3RhdGUoUGxheWlu
Zyk7Ci0gICAgICAgIHBsdWdpbnNOZWVkaW5nUmVzdGFydFtpXS0+cmVzdGFydFNuYXBzaG90dGVk
UGx1Z0luKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDAsIGxlbmd0aCA9IHNpbWlsYXJQbHVnaW5z
LnNpemUoKTsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1l
bnQqIHBsdWdpblRvUmVzdGFydCA9IHNpbWlsYXJQbHVnaW5zW2ldLmdldCgpOworICAgICAgICBp
ZiAocGx1Z2luVG9SZXN0YXJ0LT5kaXNwbGF5U3RhdGUoKSA8PSBIVE1MUGx1Z0luRWxlbWVudDo6
RGlzcGxheWluZ1NuYXBzaG90KSB7CisgICAgICAgICAgICBMT0coUGx1Z2lucywgIiVwIFBsdWct
aW4gbG9va3Mgc2ltaWxhciB0byBhIHJlc3RhcnRlZCBwbHVnLWluLiBSZXN0YXJ0LiIsIHBsdWdp
blRvUmVzdGFydCk7CisgICAgICAgICAgICBwbHVnaW5Ub1Jlc3RhcnQtPnNldERpc3BsYXlTdGF0
ZShQbGF5aW5nKTsKKyAgICAgICAgICAgIHBsdWdpblRvUmVzdGFydC0+cmVzdGFydFNuYXBzaG90
dGVkUGx1Z0luKCk7CisgICAgICAgIH0KKyAgICAgICAgcGx1Z2luVG9SZXN0YXJ0LT5tX2JsZXNz
ZWRQbHVnaW4gPSB0cnVlOwogICAgIH0KIH0KIApAQCAtNDgwLDYgKzQ5NSw3IEBAIHZvaWQgSFRN
TFBsdWdJbkltYWdlRWxlbWVudDo6dXNlckRpZENsaWNrU25hcHNob3QoUGFzc1JlZlB0cjxNb3Vz
ZUV2ZW50PiBldmVudCwKICAgICBpZiAoZG9jdW1lbnQoKS0+cGFnZSgpICYmICFTY2hlbWVSZWdp
c3RyeTo6c2hvdWxkVHJlYXRVUkxTY2hlbWVBc0xvY2FsKGRvY3VtZW50KCktPnBhZ2UoKS0+bWFp
bkZyYW1lKCktPmRvY3VtZW50KCktPmJhc2VVUkwoKS5wcm90b2NvbCgpKSAmJiBkb2N1bWVudCgp
LT5wYWdlKCktPnNldHRpbmdzKCktPmF1dG9zdGFydE9yaWdpblBsdWdJblNuYXBzaG90dGluZ0Vu
YWJsZWQoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+cGFnZSgpLT5wbHVnSW5DbGllbnQoKS0+ZGlk
U3RhcnRGcm9tT3JpZ2luKGRvY3VtZW50KCktPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmRvY3VtZW50
KCktPmJhc2VVUkwoKS5ob3N0KCksIHBsdWdJbk9yaWdpbiwgbG9hZGVkTWltZVR5cGUoKSk7CiAK
KyAgICBMT0coUGx1Z2lucywgIiVwIFVzZXIgY2xpY2tlZCBvbiBzbmFwc2hvdHRlZCBwbHVnLWlu
LiBSZXN0YXJ0LiIsIHRoaXMpOwogICAgIHJlc3RhcnRTbmFwc2hvdHRlZFBsdWdJbigpOwogICAg
IHJlc3RhcnRTaW1pbGFyUGx1Z0lucygpOwogfQpAQCAtNDkwLDYgKzUwNiw3IEBAIHZvaWQgSFRN
TFBsdWdJbkltYWdlRWxlbWVudDo6c2V0SXNQcmltYXJ5U25hcHNob3R0ZWRQbHVnSW4oYm9vbCBp
c1ByaW1hcnlTbmFwc2hvCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChpc1ByaW1hcnlTbmFw
c2hvdHRlZFBsdWdJbikgeworICAgICAgICBMT0coUGx1Z2lucywgIiVwIFBsdWctaW4gd2FzIGRl
dGVjdGVkIGFzIHRoZSBwcmltYXJ5IGVsZW1lbnQgaW4gdGhlIHBhZ2UuIFJlc3RhcnQuIiwgdGhp
cyk7CiAgICAgICAgIHJlc3RhcnRTbmFwc2hvdHRlZFBsdWdJbigpOwogICAgICAgICByZXN0YXJ0
U2ltaWxhclBsdWdJbnMoKTsKICAgICB9CkBAIC01MjAsNiArNTM3LDI3IEBAIHZvaWQgSFRNTFBs
dWdJbkltYWdlRWxlbWVudDo6c2ltdWxhdGVkTW91c2VDbGlja1RpbWVyRmlyZWQoRGVmZXJyYWJs
ZU9uZVNob3RUaW1lCiAgICAgbV9wZW5kaW5nQ2xpY2tFdmVudEZyb21TbmFwc2hvdCA9IG51bGxw
dHI7CiB9CiAKK3ZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6Y2hlY2tTaXplQ2hhbmdlRm9y
U25hcHNob3R0aW5nKCkKK3sKKyAgICBpZiAoIW1fbmVlZHNDaGVja0ZvclNpemVDaGFuZ2UgfHwg
IW1fYXZvaWRlZFNuYXBzaG90RHVlVG9TaXplIHx8IG1fYmxlc3NlZFBsdWdpbikKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9uZWVkc0NoZWNrRm9yU2l6ZUNoYW5nZSA9IGZhbHNlOworICAgIExh
eW91dFJlY3QgY29udGVudEJveFJlY3QgPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Y29udGVu
dEJveFJlY3QoKTsKKyAgICBpbnQgY29udGVudFdpZHRoID0gY29udGVudEJveFJlY3Qud2lkdGgo
KTsKKyAgICBpbnQgY29udGVudEhlaWdodCA9IGNvbnRlbnRCb3hSZWN0LmhlaWdodCgpOworCisg
ICAgaWYgKGNvbnRlbnRXaWR0aCA8PSBzaXppbmdUaW55RGltZW5zaW9uVGhyZXNob2xkIHx8IGNv
bnRlbnRIZWlnaHQgPD0gc2l6aW5nVGlueURpbWVuc2lvblRocmVzaG9sZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgTE9HKFBsdWdpbnMsICIlcCBQbHVnLWluIG9yaWdpbmFsbHkgYXZvaWRlZCBz
bmFwc2hvdHRpbmcgYmVjYXVzZSBpdCB3YXMgc2l6ZWQgJWR4JWQuIE5vdyBpdCBpcyAlZHglZC4g
VGVsbCBpdCB0byBzbmFwc2hvdC5cbiIsIHRoaXMsIG1fc2l6ZVdoZW5TbmFwc2hvdHRlZC53aWR0
aCgpLCBtX3NpemVXaGVuU25hcHNob3R0ZWQuaGVpZ2h0KCksIGNvbnRlbnRXaWR0aCwgY29udGVu
dEhlaWdodCk7CisgICAgc2V0RGlzcGxheVN0YXRlKFdhaXRpbmdGb3JTbmFwc2hvdCk7CisgICAg
bV9hdm9pZGVkU25hcHNob3REdWVUb1NpemUgPSBmYWxzZTsKKyAgICBXaWRnZXQqIHdpZGdldCA9
IHBsdWdpbldpZGdldCgpOworICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0LT5pc1BsdWdpblZpZXdC
YXNlKCkpCisgICAgICAgIHN0YXRpY19jYXN0PFBsdWdpblZpZXdCYXNlKj4od2lkZ2V0KS0+YmVn
aW5TbmFwc2hvdHRpbmdSdW5uaW5nUGx1Z2luKCk7Cit9CisKIHZvaWQgSFRNTFBsdWdJbkltYWdl
RWxlbWVudDo6c3ViZnJhbWVMb2FkZXJXaWxsQ3JlYXRlUGx1Z0luKGNvbnN0IEtVUkwmIHVybCkK
IHsKICAgICBMT0coUGx1Z2lucywgIiVwIFBsdWctaW4gVVJMOiAlcyIsIHRoaXMsIG1fdXJsLnV0
ZjgoKS5kYXRhKCkpOwpAQCAtNTMxLDYgKzU2OSwxMSBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQ6OnN1YmZyYW1lTG9hZGVyV2lsbENyZWF0ZVBsdWdJbihjb25zdCBLVVJMJiB1cmwpCiAg
ICAgICAgIHx8ICFkb2N1bWVudCgpLT5wYWdlKCktPnNldHRpbmdzKCktPnBsdWdJblNuYXBzaG90
dGluZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKG1fYmxlc3NlZFBsdWdp
bikgeworICAgICAgICBMT0coUGx1Z2lucywgIiVwIFBsdWctaW4gaXMgYmxlc3NlZCwgYWxsb3cg
aXQgdG8gc3RhcnQiLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChk
aXNwbGF5U3RhdGUoKSA9PSBSZXN0YXJ0aW5nKSB7CiAgICAgICAgIHNldERpc3BsYXlTdGF0ZShQ
bGF5aW5nKTsKICAgICAgICAgTE9HKFBsdWdpbnMsICIlcCBQbHVnLWluIGlzIGV4cGxpY2l0bHkg
cmVzdGFydGluZyIsIHRoaXMpOwpAQCAtNTUxLDExICs1OTQsMTMgQEAgdm9pZCBIVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50OjpzdWJmcmFtZUxvYWRlcldpbGxDcmVhdGVQbHVnSW4oY29uc3QgS1VSTCYg
dXJsKQogCiAgICAgaWYgKFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgp
KSB7CiAgICAgICAgIExPRyhQbHVnaW5zLCAiJXAgU2NyaXB0IGlzIGN1cnJlbnRseSBwcm9jZXNz
aW5nIHVzZXIgZ2VzdHVyZSwgc2V0IHRvIHBsYXkiLCB0aGlzKTsKKyAgICAgICAgbV9ibGVzc2Vk
UGx1Z2luID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChtX2NyZWF0
ZWREdXJpbmdVc2VyR2VzdHVyZSkgewogICAgICAgICBMT0coUGx1Z2lucywgIiVwIFBsdWctaW4g
d2FzIGNyZWF0ZWQgd2hlbiBwcm9jZXNzaW5nIHVzZXIgZ2VzdHVyZSwgc2V0IHRvIHBsYXkiLCB0
aGlzKTsKKyAgICAgICAgbV9ibGVzc2VkUGx1Z2luID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtNTY0LDYgKzYwOSw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6
c3ViZnJhbWVMb2FkZXJXaWxsQ3JlYXRlUGx1Z0luKGNvbnN0IEtVUkwmIHVybCkKICAgICAgICAg
bGFzdEtub3duVXNlckdlc3R1cmVUaW1lc3RhbXAgPSBzdGQ6Om1heChsYXN0S25vd25Vc2VyR2Vz
dHVyZVRpbWVzdGFtcCwgZG9jdW1lbnQoKS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQo
KS0+bGFzdEhhbmRsZWRVc2VyR2VzdHVyZVRpbWVzdGFtcCgpKTsKICAgICBpZiAoY3VycmVudFRp
bWUoKSAtIGxhc3RLbm93blVzZXJHZXN0dXJlVGltZXN0YW1wIDwgYXV0b3N0YXJ0U29vbkFmdGVy
VXNlckdlc3R1cmVUaHJlc2hvbGQpIHsKICAgICAgICAgTE9HKFBsdWdpbnMsICIlcCBQbHVnLWlu
IHdhcyBjcmVhdGVkIHNob3J0bHkgYWZ0ZXIgYSB1c2VyIGdlc3R1cmUsIHNldCB0byBwbGF5Iiwg
dGhpcyk7CisgICAgICAgIG1fYmxlc3NlZFBsdWdpbiA9IHRydWU7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTU3Myw2ICs2MTksMTIgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
OjpzdWJmcmFtZUxvYWRlcldpbGxDcmVhdGVQbHVnSW4oY29uc3QgS1VSTCYgdXJsKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKGRvY3VtZW50KCktPnBhZ2UoKS0+c2V0dGluZ3Mo
KS0+YXV0b3N0YXJ0T3JpZ2luUGx1Z0luU25hcHNob3R0aW5nRW5hYmxlZCgpICYmIGRvY3VtZW50
KCktPnBhZ2UoKS0+cGx1Z0luQ2xpZW50KCktPnNob3VsZEF1dG9TdGFydEZyb21PcmlnaW4oZG9j
dW1lbnQoKS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLmhvc3Qo
KSwgdXJsLmhvc3QoKSwgbG9hZGVkTWltZVR5cGUoKSkpIHsKKyAgICAgICAgTE9HKFBsdWdpbnMs
ICIlcCBQbHVnLWluIGZyb20gKCVzLCAlcykgaXMgbWFya2VkIHRvIGF1dG8tc3RhcnQsIHNldCB0
byBwbGF5IiwgdGhpcywgZG9jdW1lbnQoKS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQo
KS0+YmFzZVVSTCgpLmhvc3QoKS51dGY4KCkuZGF0YSgpLCB1cmwuaG9zdCgpLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICBtX2JsZXNzZWRQbHVnaW4gPSB0cnVlOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCiAgICAgUmVuZGVyQm94KiByZW5kZXJFbWJlZGRlZE9iamVjdCA9IHRvUmVuZGVyQm94
KHJlbmRlcmVyKCkpOwogICAgIExlbmd0aCBzdHlsZVdpZHRoID0gcmVuZGVyRW1iZWRkZWRPYmpl
Y3QtPnN0eWxlKCktPndpZHRoKCk7CiAgICAgTGVuZ3RoIHN0eWxlSGVpZ2h0ID0gcmVuZGVyRW1i
ZWRkZWRPYmplY3QtPnN0eWxlKCktPmhlaWdodCgpOwpAQCAtNTg3LDExICs2MzksMTQgQEAgdm9p
ZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpzdWJmcmFtZUxvYWRlcldpbGxDcmVhdGVQbHVnSW4o
Y29uc3QgS1VSTCYgdXJsKQogICAgICAgICAmJiBzdHlsZUhlaWdodC5pc1BlcmNlbnQoKSAmJiAo
c3R5bGVIZWlnaHQucGVyY2VudCgpID09IDEwMCkKICAgICAgICAgJiYgKHN0YXRpY19jYXN0PGZs
b2F0Pihjb250ZW50QXJlYSkgLyB2aXNpYmxlQXJlYSA+IHNpemluZ0Z1bGxQYWdlQXJlYVJhdGlv
VGhyZXNob2xkKSkgewogICAgICAgICBMT0coUGx1Z2lucywgIiVwIFBsdWctaW4gaXMgdG9wIGxl
dmVsIGZ1bGwgcGFnZSwgc2V0IHRvIHBsYXkiLCB0aGlzKTsKKyAgICAgICAgbV9ibGVzc2VkUGx1
Z2luID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChjb250ZW50V2lk
dGggPD0gc2l6aW5nVGlueURpbWVuc2lvblRocmVzaG9sZCB8fCBjb250ZW50SGVpZ2h0IDw9IHNp
emluZ1RpbnlEaW1lbnNpb25UaHJlc2hvbGQpIHsKICAgICAgICAgTE9HKFBsdWdpbnMsICIlcCBQ
bHVnLWluIGlzIHZlcnkgc21hbGwgJWR4JWQsIHNldCB0byBwbGF5IiwgdGhpcywgY29udGVudFdp
ZHRoLCBjb250ZW50SGVpZ2h0KTsKKyAgICAgICAgbV9hdm9pZGVkU25hcHNob3REdWVUb1NpemUg
PSB0cnVlOworICAgICAgICBtX3NpemVXaGVuU25hcHNob3R0ZWQgPSBJbnRTaXplKGNvbnRlbnRC
b3hSZWN0LndpZHRoKCkudG9JbnQoKSwgY29udGVudEJveFJlY3QuaGVpZ2h0KCkudG9JbnQoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTYwMCwxMSArNjU1LDYgQEAgdm9pZCBIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50OjpzdWJmcmFtZUxvYWRlcldpbGxDcmVhdGVQbHVnSW4oY29uc3Qg
S1VSTCYgdXJsKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGRvY3VtZW50KCkt
PnBhZ2UoKS0+c2V0dGluZ3MoKS0+YXV0b3N0YXJ0T3JpZ2luUGx1Z0luU25hcHNob3R0aW5nRW5h
YmxlZCgpICYmIGRvY3VtZW50KCktPnBhZ2UoKS0+cGx1Z0luQ2xpZW50KCktPnNob3VsZEF1dG9T
dGFydEZyb21PcmlnaW4oZG9jdW1lbnQoKS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQo
KS0+YmFzZVVSTCgpLmhvc3QoKSwgdXJsLmhvc3QoKSwgbG9hZGVkTWltZVR5cGUoKSkpIHsKLSAg
ICAgICAgTE9HKFBsdWdpbnMsICIlcCBQbHVnLWluIGZyb20gKCVzLCAlcykgaXMgbWFya2VkIHRv
IGF1dG8tc3RhcnQsIHNldCB0byBwbGF5IiwgdGhpcywgZG9jdW1lbnQoKS0+cGFnZSgpLT5tYWlu
RnJhbWUoKS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLmhvc3QoKS51dGY4KCkuZGF0YSgpLCB1cmwu
aG9zdCgpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgTE9H
KFBsdWdpbnMsICIlcCBQbHVnLWluIGZyb20gKCVzLCAlcykgaXMgbm90IGF1dG8tc3RhcnQsIHNp
emVkIGF0ICVkeCVkLCBzZXQgdG8gd2FpdCBmb3Igc25hcHNob3QiLCB0aGlzLCBkb2N1bWVudCgp
LT5wYWdlKCktPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgpLnV0Zjgo
KS5kYXRhKCksIHVybC5ob3N0KCkudXRmOCgpLmRhdGEoKSwgY29udGVudFdpZHRoLCBjb250ZW50
SGVpZ2h0KTsKICAgICBzZXREaXNwbGF5U3RhdGUoV2FpdGluZ0ZvclNuYXBzaG90KTsKIH0KQEAg
LTYxNiw2ICs2NjYsNyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnN1YmZyYW1lTG9h
ZGVyRGlkQ3JlYXRlUGx1Z0luKGNvbnN0IFdpZGdldCogd2lkZ2V0KQogICAgICAgICByZXR1cm47
CiAKICAgICBMT0coUGx1Z2lucywgIiVwIFBsdWctaW4gc2hvdWxkIGF1dG8tc3RhcnQsIHNldCB0
byBwbGF5IiwgdGhpcyk7CisgICAgbV9ibGVzc2VkUGx1Z2luID0gdHJ1ZTsKICAgICBzZXREaXNw
bGF5U3RhdGUoUGxheWluZyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFBsdWdJbkltYWdlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50LmgKaW5kZXggYmRmODdiOS4uNDdlMzJiNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0TmVlZHNXaWRnZXRVcGRhdGUoYm9vbCBuZWVkc1dpZGdldFVwZGF0ZSkg
eyBtX25lZWRzV2lkZ2V0VXBkYXRlID0gbmVlZHNXaWRnZXRVcGRhdGU7IH0KIAogICAgIHZvaWQg
dXNlckRpZENsaWNrU25hcHNob3QoUGFzc1JlZlB0cjxNb3VzZUV2ZW50PiwgYm9vbCBmb3J3YXJk
RXZlbnQpOwotICAgIHZvaWQgdXBkYXRlU25hcHNob3RJbmZvKCk7CisgICAgdm9pZCBjaGVja1Nu
YXBzaG90U3RhdHVzKCk7CiAgICAgSW1hZ2UqIHNuYXBzaG90SW1hZ2UoKSBjb25zdCB7IHJldHVy
biBtX3NuYXBzaG90SW1hZ2UuZ2V0KCk7IH0KIAogICAgIC8vIFBsdWctaW4gVVJMIG1pZ2h0IG5v
dCBiZSB0aGUgc2FtZSBhcyB1cmwoKSB3aXRoIG92ZXJyaWRpbmcgcGFyYW1ldGVycy4KQEAgLTg1
LDYgKzg1LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElzUHJpbWFyeVNuYXBzaG90dGVkUGx1
Z0luKGJvb2wpOwogICAgIGJvb2wgcGFydE9mU25hcHNob3RMYWJlbChOb2RlKik7CiAKKyAgICBi
b29sIG5lZWRzQ2hlY2tGb3JTaXplQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0NoZWNr
Rm9yU2l6ZUNoYW5nZTsgfQorICAgIHZvaWQgc2V0TmVlZHNDaGVja0ZvclNpemVDaGFuZ2UoKSB7
IG1fbmVlZHNDaGVja0ZvclNpemVDaGFuZ2UgPSB0cnVlOyB9CisgICAgdm9pZCBjaGVja1NpemVD
aGFuZ2VGb3JTbmFwc2hvdHRpbmcoKTsKKwogcHJvdGVjdGVkOgogICAgIEhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqLCBib29sIGNy
ZWF0ZWRCeVBhcnNlciwgUHJlZmVyUGx1Z0luc0ZvckltYWdlc09wdGlvbik7CiAKQEAgLTE0Nyw2
ICsxNTEsMTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RWxlbWVudD4gbV9zbmFwc2hvdExhYmVs
OwogICAgIGJvb2wgbV9jcmVhdGVkRHVyaW5nVXNlckdlc3R1cmU7CiAgICAgYm9vbCBtX3Jlc3Rh
cnRlZFBsdWdpbjsKKyAgICBib29sIG1fYmxlc3NlZFBsdWdpbjsKKyAgICBib29sIG1fYXZvaWRl
ZFNuYXBzaG90RHVlVG9TaXplOworICAgIGJvb2wgbV9uZWVkc0NoZWNrRm9yU2l6ZUNoYW5nZTsK
KyAgICBJbnRTaXplIG1fc2l6ZVdoZW5TbmFwc2hvdHRlZDsKIH07CiAKIGlubGluZSBIVE1MUGx1
Z0luSW1hZ2VFbGVtZW50KiB0b0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQoTm9kZSogbm9kZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCAxMjMxMjUyLi4zZWNhZDIxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0xNDIyLDcgKzE0MjIsOCBAQCB2b2lkIEZyYW1lVmlldzo6
YWRkV2lkZ2V0VG9VcGRhdGUoUmVuZGVyT2JqZWN0KiBvYmplY3QpCiAgICAgTm9kZSogbm9kZSA9
IG9iamVjdC0+bm9kZSgpOwogICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwg
bm9kZS0+aGFzVGFnTmFtZShlbWJlZFRhZykpIHsKICAgICAgICAgSFRNTFBsdWdJbkltYWdlRWxl
bWVudCogcGx1Z2luRWxlbWVudCA9IHRvSFRNTFBsdWdJbkltYWdlRWxlbWVudChub2RlKTsKLSAg
ICAgICAgcGx1Z2luRWxlbWVudC0+c2V0TmVlZHNXaWRnZXRVcGRhdGUodHJ1ZSk7CisgICAgICAg
IGlmICghcGx1Z2luRWxlbWVudC0+bmVlZHNDaGVja0ZvclNpemVDaGFuZ2UoKSkKKyAgICAgICAg
ICAgIHBsdWdpbkVsZW1lbnQtPnNldE5lZWRzV2lkZ2V0VXBkYXRlKHRydWUpOwogICAgIH0KIAog
ICAgIG1fd2lkZ2V0VXBkYXRlU2V0LT5hZGQob2JqZWN0KTsKQEAgLTI1OTUsNyArMjU5Niw3IEBA
IHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVXaWRnZXQoUmVuZGVyT2JqZWN0KiBvYmplY3QpCiAgICAg
ICAgIGlmIChvYmplY3QtPmlzU25hcHNob3R0ZWRQbHVnSW4oKSkgewogICAgICAgICAgICAgaWYg
KG93bmVyRWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpIHx8IG93bmVyRWxlbWVudC0+aGFz
VGFnTmFtZShlbWJlZFRhZykpIHsKICAgICAgICAgICAgICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50KiBwbHVnaW5FbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KG93bmVyRWxlbWVu
dCk7Ci0gICAgICAgICAgICAgICAgcGx1Z2luRWxlbWVudC0+dXBkYXRlU25hcHNob3RJbmZvKCk7
CisgICAgICAgICAgICAgICAgcGx1Z2luRWxlbWVudC0+Y2hlY2tTbmFwc2hvdFN0YXR1cygpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNjA0LDYg
KzI2MDUsMTAgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZVdpZGdldChSZW5kZXJPYmplY3QqIG9i
amVjdCkKICAgICAgICAgLy8gdXBkYXRlV2lkZ2V0KFBsdWdpbkNyZWF0aW9uT3B0aW9uKSBvbiBI
VE1MRWxlbWVudC4KICAgICAgICAgaWYgKG93bmVyRWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RU
YWcpIHx8IG93bmVyRWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgb3duZXJFbGVtZW50
LT5oYXNUYWdOYW1lKGFwcGxldFRhZykpIHsKICAgICAgICAgICAgIEhUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQqIHBsdWdpbkVsZW1lbnQgPSB0b0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQob3duZXJFbGVt
ZW50KTsKKyAgICAgICAgICAgIGlmIChwbHVnaW5FbGVtZW50LT5uZWVkc0NoZWNrRm9yU2l6ZUNo
YW5nZSgpKSB7CisgICAgICAgICAgICAgICAgcGx1Z2luRWxlbWVudC0+Y2hlY2tTbmFwc2hvdFN0
YXR1cygpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGlmIChwbHVnaW5FbGVtZW50LT5uZWVkc1dpZGdldFVwZGF0ZSgpKQogICAgICAgICAgICAg
ICAgIHBsdWdpbkVsZW1lbnQtPnVwZGF0ZVdpZGdldChDcmVhdGVBbnlXaWRnZXRUeXBlKTsKICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3QmFz
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3QmFzZS5oCmluZGV4IGI2MGZh
OTIuLjZjMzJlNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmll
d0Jhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXdCYXNlLmgKQEAg
LTY0LDYgKzY0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBjYW5Qcm9jZXNzRHJhZygp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQWx3YXlz
QXV0b1N0YXJ0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5TbmFwc2hvdHRpbmdSdW5uaW5nUGx1Z2luKCkgeyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkQWxsb3dOYXZpZ2F0aW9uRnJvbURyYWdzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAK
aW5kZXggZDBkNDU1YS4uMzFkOTNmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCkBAIC0yOTMsMTEgKzI5MywyOCBAQCB2b2lkIFJl
bmRlckVtYmVkZGVkT2JqZWN0OjpsYXlvdXQoKQogCiAgICAgdXBkYXRlTGF5ZXJUcmFuc2Zvcm0o
KTsKIAotICAgIGlmICghd2lkZ2V0KCkgJiYgZnJhbWVWaWV3KCkgJiYgY2FuSGF2ZVdpZGdldCgp
KQorICAgIGJvb2wgd2FzTWlzc2luZ1dpZGdldCA9IGZhbHNlOworICAgIGlmICghd2lkZ2V0KCkg
JiYgZnJhbWVWaWV3KCkgJiYgY2FuSGF2ZVdpZGdldCgpKSB7CisgICAgICAgIHdhc01pc3NpbmdX
aWRnZXQgPSB0cnVlOwogICAgICAgICBmcmFtZVZpZXcoKS0+YWRkV2lkZ2V0VG9VcGRhdGUodGhp
cyk7CisgICAgfQogCiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwogCisgICAgTGF5b3V0U2l6
ZSBuZXdTaXplID0gY29udGVudEJveFJlY3QoKS5zaXplKCk7CisKKyAgICBpZiAoIXdhc01pc3Np
bmdXaWRnZXQgJiYgbmV3U2l6ZS53aWR0aCgpID49IG9sZFNpemUud2lkdGgoKSAmJiBuZXdTaXpl
LmhlaWdodCgpID49IG9sZFNpemUuaGVpZ2h0KCkpIHsKKyAgICAgICAgRWxlbWVudCogZWxlbWVu
dCA9IHRvRWxlbWVudChub2RlKCkpOworICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5p
c1BsdWdpbkVsZW1lbnQoKSkgeworICAgICAgICAgICAgSFRNTFBsdWdJbkVsZW1lbnQqIHBsdWdJ
bkVsZW1lbnQgPSB0b0hUTUxQbHVnSW5FbGVtZW50KGVsZW1lbnQpOworICAgICAgICAgICAgaWYg
KHBsdWdJbkVsZW1lbnQtPmlzUGx1Z0luSW1hZ2VFbGVtZW50KCkgJiYgcGx1Z0luRWxlbWVudC0+
ZGlzcGxheVN0YXRlKCkgPiBIVE1MUGx1Z0luRWxlbWVudDo6RGlzcGxheWluZ1NuYXBzaG90KQor
ICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudCgpLT52aWV3KCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KGVsZW1lbnQpLT5zZXROZWVkc0NoZWNrRm9y
U2l6ZUNoYW5nZSgpOworICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT52aWV3KCktPmFk
ZFdpZGdldFRvVXBkYXRlKHRoaXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKwogICAgIGlmICghY2FuSGF2ZUNoaWxkcmVuKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAt
MzEyLDcgKzMyOSw2IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmxheW91dCgpCiAgICAg
aWYgKCFjaGlsZEJveCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIExheW91dFNpemUgbmV3
U2l6ZSA9IGNvbnRlbnRCb3hSZWN0KCkuc2l6ZSgpOwogICAgIGlmIChuZXdTaXplID09IG9sZFNp
emUgJiYgIWNoaWxkQm94LT5uZWVkc0xheW91dCgpKQogICAgICAgICByZXR1cm47CiAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKaW5kZXggODVjMWQ1ZC4uYzUxMzMzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBA
CisyMDEzLTA0LTEyICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBQ
bHVnaW5zIHRoYXQgcmVzaXplIG1pZ2h0IG5lZWQgdG8gYmUgc25hcHNob3R0ZWQuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDIxNTcKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzEyNjk2MjU5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFsbG93IGEgcnVubmluZyBwbHVnaW4gdG8gYmUgc25hcHNob3R0
ZWQuIEFsbCB0aGlzCisgICAgICAgIG1lYW5zIGlzIHRoYXQgd2Ugc3RhcnQgdGhlIHNuYXBzaG90
IHRpbWVyIGFnYWluLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpiZWdpblNuYXBzaG90dGluZ1J1bm5p
bmdQbHVnaW4pOiBSZXN0YXJ0CisgICAgICAgICAgICB0aGUgdGltZXIuCisgICAgICAgICogV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaDogVmlydHVhbCBtZXRob2QgZGVjbGFyYXRpb24u
CisKIDIwMTMtMDQtMTEgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAog
ICAgICAgICBJbXBsZW1lbnQgbW9yZSBsb2dpYyBpbiBTdG9yYWdlQXJlYU1hcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IGY2ZWUz
YmYuLmM4YzExMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5WaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luVmlldy5jcHAKQEAgLTE2MzksNiArMTYzOSwxMSBAQCB2b2lkIFBsdWdpblZpZXc6OnBs
dWdpblNuYXBzaG90VGltZXJGaXJlZChEZWZlcnJhYmxlT25lU2hvdFRpbWVyPFBsdWdpblZpZXc+
KikKICAgICBtX3BsdWdpbkVsZW1lbnQtPnNldERpc3BsYXlTdGF0ZShIVE1MUGx1Z0luRWxlbWVu
dDo6RGlzcGxheWluZ1NuYXBzaG90KTsKIH0KIAordm9pZCBQbHVnaW5WaWV3OjpiZWdpblNuYXBz
aG90dGluZ1J1bm5pbmdQbHVnaW4oKQoreworICAgIG1fcGx1Z2luU25hcHNob3RUaW1lci5yZXN0
YXJ0KCk7Cit9CisKIGJvb2wgUGx1Z2luVmlldzo6c2hvdWxkQWx3YXlzQXV0b1N0YXJ0KCkgY29u
c3QKIHsKICAgICBpZiAoIW1fcGx1Z2luKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5WaWV3LmgKaW5kZXggNmJkMjY0Ni4uYzY4NDFiYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oCkBAIC0xNDgsNiArMTQ4
LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxT
Y3JvbGxiYXIoKTsKICAgICB2aXJ0dWFsIGJvb2wgd2FudHNXaGVlbEV2ZW50cygpOwogICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRBbHdheXNBdXRvU3RhcnQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgYmVnaW5TbmFwc2hvdHRpbmdSdW5uaW5nUGx1Z2luKCkgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCBib29sIHNob3VsZEFsbG93TmF2aWdhdGlvbkZyb21EcmFncygpIGNvbnN0IE9W
RVJSSURFOwogCiAgICAgLy8gV2ViQ29yZTo6V2lkZ2V0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>197957</attachid>
            <date>2013-04-13 14:47:38 -0700</date>
            <delta_ts>2013-04-13 15:06:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>resizer.patch</filename>
            <type>text/plain</type>
            <size>25026</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3NDRhYTI0Li4wOWU3MDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODEg
QEAKKzIwMTMtMDQtMTIgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgorCisgICAgICAg
IFBsdWdpbnMgdGhhdCByZXNpemUgbWlnaHQgbmVlZCB0byBiZSBzbmFwc2hvdHRlZC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjE1NworICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMTI2OTYyNTk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQSBwbHVnaW4gY291bGQgYXZvaWQgc25hcHNob3R0aW5nIGlm
IGl0IHN0YXJ0ZWQgdmVyeQorICAgICAgICBzbWFsbCAoYmVsb3cgdGhlIHRocmVzaG9sZCB3aGVy
ZSB3ZSBhdXRvc3RhcnQpLCBhbmQgdGhlbgorICAgICAgICByZXNpemVkIHRvIGJlIGxhcmdlIChh
Ym92ZSB0aGUgdGhyZXNob2xkKS4gRGV0ZWN0IHRoaXMKKyAgICAgICAgY2FzZSBhbmQgdGVsbCB0
aGUgcGx1Z2luIHRvIHNuYXBzaG90LgorCisgICAgICAgIFRoZXJlIHVuZm9ydHVuYXRlbHkgaXMg
YSBiaXQgb2Ygc3RhdGUgdG8gdHJhY2sgd2hlbiBkb2luZworICAgICAgICB0aGlzLiBXZSBoYXZl
IHRvIHN0YXJ0IHRoZSBzbmFwc2hvdHRpbmcgaW4gYSBwb3N0LWxheW91dAorICAgICAgICB0YXNr
LCBzbyB3ZSBjYXJyeSBhIGZsYWcgdG8gc2F5IHdlJ3JlIGNoZWNraW5nIHNpemUgYnV0CisgICAg
ICAgIG5vdCB3YW50aW5nIHRoZSBwbHVnaW4gdG8gdXBkYXRlICh3aGljaCB3b3VsZCByZXN0YXJ0
IGl0KS4KKyAgICAgICAgV2UgYWxzbyBtaWdodCBiZSBhIHBsdWdpbiB0aGF0IHdvdWxkIGhhdmUg
YWxyZWFkeSByZXN0YXJ0ZWQKKyAgICAgICAgZHVlIHRvIGEgc2ltaWxhciBwbHVnaW4gYmVpbmcg
Y2xpY2tlZCBvciBkZXRlY3RlZCBhcyBkb21pbmFudC4KKyAgICAgICAgU28gdGhpcyBwYXRjaCBp
bnRyb2R1Y2VzIHRoZSBjb25jZXB0IG9mIGEgYmxlc3NlZCBwbHVnaW4sIHdoaWNoCisgICAgICAg
IHdvdWxkIGhhdmUgc3RhcnRlZCBhdXRvbWF0aWNhbGx5IGlmIGl0IGhhZG4ndCBhbHJlYWR5IHN0
YXJ0ZWQhCisKKyAgICAgICAgSSBhbHNvIGFkZGVkIHNvbWUgbW9yZSBsb2dnaW5nIHRvIGJlIG1v
cmUgY2xlYXIgYWJvdXQgd2hhdCBpcworICAgICAgICBoYXBwZW5pbmcgdG8gcGx1Z2lucyBnb2lu
ZyB0aHJvdWdoIHRoZSBzbmFwc2hvdCBwcm9jZXNzLCBhbmQKKyAgICAgICAgY2hhbmdlZCB0aGUg
b3JkZXIgb2YgdGhlIHRlc3RzIGluIHRoZSBhbGdvcml0aG0gc28gdGhhdCBkb21haW4KKyAgICAg
ICAgZGV0ZWN0aW9uIGNvbWVzIGJlZm9yZSBleGFtaW5pbmcgdGhlIHNpemUuCisKKyAgICAgICAg
KiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFBsdWdJbkltYWdlRWxlbWVudDo6SFRNTFBsdWdJbkltYWdlRWxlbWVudCk6IEluaXRpYWxpc2UK
KyAgICAgICAgICAgIHRoZSB0aHJlZSBuZXcgbWVtYmVyIHZhcmlhYmxlcy4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnNldERpc3BsYXlTdGF0ZSk6IE1hcmsgYSBy
ZXN0YXJ0ZWQKKyAgICAgICAgICAgIHBsdWdpbiBhcyBibGVzc2VkLiBUaGlzIG1lYW5zIHRoYXQg
aWYgaXQgbGF0ZXIgcmVzaXplcyBhYm92ZSB0aGUKKyAgICAgICAgICAgIHRocmVzaG9sZCwgaXQg
d29uJ3QgdHJpZ2dlciB0aGUgc25hcHNob3QgZGV0ZWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6Y2hlY2tTbmFwc2hvdFN0YXR1cyk6IFJlbmFtZWQgZnJv
bQorICAgICAgICAgICAgdXBkYXRlU25hcHNob3RJbmZvLiBUaGlzIG5vdyB1cGRhdGVzIHRoZSBz
bmFwc2hvdCwgYnV0IGFsc28gcnVucworICAgICAgICAgICAgdGhlIGNoZWNrIGZvciBzaXplIGNo
YW5nZXMuCisgICAgICAgIChXZWJDb3JlOjphZGRQbHVnSW5zRnJvbU5vZGVMaXN0TWF0Y2hpbmdQ
bHVnSW5PcmlnaW4pOiBHYXRoZXIgYWxsIHBsdWdpbnMKKyAgICAgICAgICAgIHRoYXQgbG9vayBs
aWtlIGEgcmVzdGFydGluZyBwbHVnaW4sIG5vdCBqdXN0IHRob3NlIHNuYXBzaG90dGVkLiBUaGF0
CisgICAgICAgICAgICB3YXkgdGhleSBjYW4gYWxsIGJlIGJsZXNzZWQuCisgICAgICAgIChXZWJD
b3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZXN0YXJ0U2ltaWxhclBsdWdJbnMpOiBCbGVz
cyBldmVyeQorICAgICAgICAgICAgcGx1Z2luIHRoYXQgbG9va3Mgc2ltaWxhciwgd2hldGhlciBv
ciBub3QgaXQgaXMgc25hcHNob3R0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50Ojp1c2VyRGlkQ2xpY2tTbmFwc2hvdCk6IE1vcmUgbG9nZ2luZy4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnNldElzUHJpbWFyeVNuYXBzaG90dGVk
UGx1Z0luKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
OjpjaGVja1NpemVDaGFuZ2VGb3JTbmFwc2hvdHRpbmcpOiBOZXcKKyAgICAgICAgICAgIG1ldGhv
ZC4gSWYgdGhlIHBsdWdpbiB3YXMgYmVsb3cgdGhlIHRocmVzaG9sZCBhbmQgaXMgbm93IGFib3Zl
IGl0LAorICAgICAgICAgICAgYmVnaW4gdGhlIHNuYXBzaG90dGluZyBwcm9jZXNzLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6c3ViZnJhbWVMb2FkZXJXaWxsQ3Jl
YXRlUGx1Z0luKTogQmxlc3NlZAorICAgICAgICAgICAgcGx1Z2lucyBzaG91bGQgc3RhcnQgaW1t
ZWRpYXRlbHkuIE1vdmUgdGhlIG9yaWdpbiB0ZXN0IGVhcmxpZXIgaW4KKyAgICAgICAgICAgIHRo
ZSBtZXRob2QuIElmIGEgcGx1Z2luIGF2b2lkZWQgc25hcHNob3R0aW5nIGR1ZSB0byBzaXplLCBy
ZW1lbWJlcgorICAgICAgICAgICAgdGhlIHNpemUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1
Z0luSW1hZ2VFbGVtZW50OjpzdWJmcmFtZUxvYWRlckRpZENyZWF0ZVBsdWdJbik6IEJsZXNzIHRo
ZQorICAgICAgICAgICAgcGx1Z2luLgorCisgICAgICAgICogaHRtbC9IVE1MUGx1Z0luSW1hZ2VF
bGVtZW50Lmg6CisgICAgICAgIChIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KTogRm91ciBuZXcgbWVt
YmVyIHZhcmlhYmxlczoKKyAgICAgICAgICAgIC0gd2hldGhlciBvciBub3QgYSBwbHVnaW4gaXMg
Ymxlc3NlZAorICAgICAgICAgICAgLSBhIHJlYXNvbiBmb3Igc25hcHNob3R0aW5nIChvciBub3Qp
LCB1c2VzIHRoZSBTbmFwc2hvdFJlYXNvbiBlbnVtCisgICAgICAgICAgICAtIHRoZSBzaXplIHdo
ZW4gaXQgYXZvaWRlZCBzbmFwc2hvdHRpbmcKKyAgICAgICAgICAgIC0gYSBmbGFnIHRvIGluZGlj
YXRlIHRoZSBwb3N0IGxheW91dCB1cGRhdGUgd2FzIHRyaWdnZXJlZCBkdWUgdG8KKyAgICAgICAg
ICAgICAgYSBzaXplIGNoYW5nZQorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxl
bWVudDo6bmVlZHNDaGVja0ZvclNpemVDaGFuZ2UpOiBOZXcgbWV0aG9kLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6c2V0TmVlZHNDaGVja0ZvclNpemVDaGFuZ2Up
OiBOZXcgbWV0aG9kLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6
cmVhc29uRm9yU25hcHNob3R0aW5nKTogUmV0dXJuIHRoZSByZWFzb24gZm9yCisgICAgICAgICAg
ICBzbmFwc2hvdHRpbmcgb3Igbm90IHNuYXBzaG90dGluZy4KKworICAgICAgICAqIHBhZ2UvRnJh
bWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6YWRkV2lkZ2V0VG9VcGRh
dGUpOiBHdWFyZCB1cGRhdGluZyB0aGUgd2lkZ2V0LiBXZSBkb24ndAorICAgICAgICAgICAgd2Fu
dCB0byBkbyBpdCB3aGVuIHdlJ3JlIGNoZWNraW5nIGZvciBhIHNpemUgY2hhbmdlIGluIHRoZSBw
bHVnaW4uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnVwZGF0ZVdpZGdldCk6IENhbGwg
bmV3IG5hbWUuCisKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXdCYXNlLmg6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3QmFzZTo6YmVnaW5TbmFwc2hvdHRpbmdSdW5uaW5nUGx1Z2lu
KTogRW1wdHkgdmlydHVhbAorICAgICAgICAgICAgbWV0aG9kIHRvIHNuYXBzaG90IGEgcnVubmlu
ZyBwbHVnaW4uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OmxheW91dCk6IElmIHRo
ZSBwbHVnaW4gaGFzIGluY3JlYXNlZCBpbgorICAgICAgICAgICAgc2l6ZSBhZGQgaXQgdG8gdGhl
IHBvc3QgbGF5b3V0IGxpc3Qgc28gdGhhdCBpdCB3aWxsIGJlIGNoZWNrZWQuCisKIDIwMTMtMDQt
MTEgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBkaWdpYS5jb20+CiAKICAg
ICAgICAgaGFuZGxlTW91c2VNb3ZlRXZlbnQgc2hvdWxkIGxldCBoaXQtdGVzdGluZyBoaXQtdGVz
dCBzY3JvbGxiYXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5J
bWFnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50LmNwcAppbmRleCA0ZThlZWIwZS4uMGRiZWYxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCkBAIC04MSw2ICs4MSw5IEBAIEhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQ6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jCiAgICAgLCBtX3JlbW92ZVNuYXBzaG90VGltZXIodGhpcywgJkhUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQ6OnJlbW92ZVNuYXBzaG90VGltZXJGaXJlZCkKICAgICAsIG1fY3Jl
YXRlZER1cmluZ1VzZXJHZXN0dXJlKFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSgpKQogICAgICwgbV9yZXN0YXJ0ZWRQbHVnaW4oZmFsc2UpCisgICAgLCBtX2JsZXNzZWRQ
bHVnaW4oZmFsc2UpCisgICAgLCBtX25lZWRzQ2hlY2tGb3JTaXplQ2hhbmdlKGZhbHNlKQorICAg
ICwgbV9yZWFzb25Gb3JTbmFwc2hvdHRpbmcoTm9WYWx1ZSkKIHsKICAgICBzZXRIYXNDdXN0b21T
dHlsZUNhbGxiYWNrcygpOwogfQpAQCAtOTYsNiArOTksOCBAQCB2b2lkIEhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6OnNldERpc3BsYXlTdGF0ZShEaXNwbGF5U3RhdGUgc3RhdGUpCiAjaWYgUExBVEZP
Uk0oTUFDKQogICAgIGlmIChzdGF0ZSA9PSBSZXN0YXJ0aW5nV2l0aFBlbmRpbmdNb3VzZUNsaWNr
IHx8IHN0YXRlID09IFJlc3RhcnRpbmcpIHsKICAgICAgICAgbV9yZXN0YXJ0ZWRQbHVnaW4gPSB0
cnVlOworICAgICAgICBtX2JsZXNzZWRQbHVnaW4gPSB0cnVlOworICAgICAgICBtX3JlYXNvbkZv
clNuYXBzaG90dGluZyA9IE5vU25hcHNob3RSZXN0YXJ0ZWQ7CiAgICAgICAgIGlmIChkaXNwbGF5
U3RhdGUoKSA9PSBEaXNwbGF5aW5nU25hcHNob3QpCiAgICAgICAgICAgICBtX3JlbW92ZVNuYXBz
aG90VGltZXIuc3RhcnRPbmVTaG90KHJlbW92ZVNuYXBzaG90VGltZXJEZWxheSk7CiAgICAgfQpA
QCAtMzM1LDggKzM0MCwxNCBAQCBzdGF0aWMgQXRvbWljU3RyaW5nIGNsYXNzTmFtZUZvclNoYWRv
d1Jvb3QoY29uc3QgTm9kZSogbm9kZSkKICAgICByZXR1cm4gcGx1Z0luTGFyZ2VTaXplQ2xhc3NO
YW1lOwogfQogCi12b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnVwZGF0ZVNuYXBzaG90SW5m
bygpCit2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmNoZWNrU25hcHNob3RTdGF0dXMoKQog
eworICAgIGlmICghcmVuZGVyZXIoKS0+aXNTbmFwc2hvdHRlZFBsdWdJbigpKSB7CisgICAgICAg
IGlmIChkaXNwbGF5U3RhdGUoKSA9PSBQbGF5aW5nKQorICAgICAgICAgICAgY2hlY2tTaXplQ2hh
bmdlRm9yU25hcHNob3R0aW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBTaGFk
b3dSb290KiByb290ID0gdXNlckFnZW50U2hhZG93Um9vdCgpOwogICAgIGlmICghcm9vdCkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNDI3LDcgKzQzOCw3IEBAIHN0YXRpYyB2b2lkIGFkZFBsdWdJbnNG
cm9tTm9kZUxpc3RNYXRjaGluZ1BsdWdJbk9yaWdpbihIVE1MUGx1Z0luSW1hZ2VFbGVtZW50TGlz
CiAgICAgICAgIE5vZGUqIG5vZGUgPSBjb2xsZWN0aW9uLT5pdGVtKGkpOwogICAgICAgICBpZiAo
bm9kZS0+aXNQbHVnaW5FbGVtZW50KCkpIHsKICAgICAgICAgICAgIEhUTUxQbHVnSW5FbGVtZW50
KiBwbHVnSW5FbGVtZW50ID0gdG9IVE1MUGx1Z0luRWxlbWVudChub2RlKTsKLSAgICAgICAgICAg
IGlmIChwbHVnSW5FbGVtZW50LT5pc1BsdWdJbkltYWdlRWxlbWVudCgpICYmIHBsdWdJbkVsZW1l
bnQtPmRpc3BsYXlTdGF0ZSgpIDw9IEhUTUxQbHVnSW5FbGVtZW50OjpEaXNwbGF5aW5nU25hcHNo
b3QpIHsKKyAgICAgICAgICAgIGlmIChwbHVnSW5FbGVtZW50LT5pc1BsdWdJbkltYWdlRWxlbWVu
dCgpKSB7CiAgICAgICAgICAgICAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCogcGx1Z0luSW1h
Z2VFbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KG5vZGUpOwogICAgICAgICAgICAg
ICAgIGNvbnN0IEtVUkwmIGxvYWRlZFVSTCA9IHBsdWdJbkltYWdlRWxlbWVudC0+bG9hZGVkVXJs
KCk7CiAgICAgICAgICAgICAgICAgU3RyaW5nIG90aGVyTWltZVR5cGUgPSBwbHVnSW5JbWFnZUVs
ZW1lbnQtPmxvYWRlZE1pbWVUeXBlKCk7CkBAIC00NDUsNyArNDU2LDcgQEAgdm9pZCBIVE1MUGx1
Z0luSW1hZ2VFbGVtZW50OjpyZXN0YXJ0U2ltaWxhclBsdWdJbnMoKQogCiAgICAgU3RyaW5nIHBs
dWdJbk9yaWdpbiA9IG1fbG9hZGVkVXJsLmhvc3QoKTsKICAgICBTdHJpbmcgbWltZVR5cGUgPSBs
b2FkZWRNaW1lVHlwZSgpOwotICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnRMaXN0IHBsdWdpbnNO
ZWVkaW5nUmVzdGFydDsKKyAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50TGlzdCBzaW1pbGFyUGx1
Z2luczsKIAogICAgIGlmICghZG9jdW1lbnQoKS0+cGFnZSgpKQogICAgICAgICByZXR1cm47CkBA
IC00NTcsMTcgKzQ2OCwyMiBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlc3RhcnRT
aW1pbGFyUGx1Z0lucygpCiAKICAgICAgICAgICAgIFJlZlB0cjxOb2RlTGlzdD4gcGx1Z2lucyA9
IGZyYW1lLT5kb2N1bWVudCgpLT5nZXRFbGVtZW50c0J5VGFnTmFtZShlbWJlZFRhZy5sb2NhbE5h
bWUoKSk7CiAgICAgICAgICAgICBpZiAocGx1Z2lucykKLSAgICAgICAgICAgICAgICBhZGRQbHVn
SW5zRnJvbU5vZGVMaXN0TWF0Y2hpbmdQbHVnSW5PcmlnaW4ocGx1Z2luc05lZWRpbmdSZXN0YXJ0
LCBwbHVnaW5zLCBwbHVnSW5PcmlnaW4sIG1pbWVUeXBlKTsKKyAgICAgICAgICAgICAgICBhZGRQ
bHVnSW5zRnJvbU5vZGVMaXN0TWF0Y2hpbmdQbHVnSW5PcmlnaW4oc2ltaWxhclBsdWdpbnMsIHBs
dWdpbnMsIHBsdWdJbk9yaWdpbiwgbWltZVR5cGUpOwogCiAgICAgICAgICAgICBwbHVnaW5zID0g
ZnJhbWUtPmRvY3VtZW50KCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKG9iamVjdFRhZy5sb2NhbE5h
bWUoKSk7CiAgICAgICAgICAgICBpZiAocGx1Z2lucykKLSAgICAgICAgICAgICAgICBhZGRQbHVn
SW5zRnJvbU5vZGVMaXN0TWF0Y2hpbmdQbHVnSW5PcmlnaW4ocGx1Z2luc05lZWRpbmdSZXN0YXJ0
LCBwbHVnaW5zLCBwbHVnSW5PcmlnaW4sIG1pbWVUeXBlKTsKKyAgICAgICAgICAgICAgICBhZGRQ
bHVnSW5zRnJvbU5vZGVMaXN0TWF0Y2hpbmdQbHVnSW5PcmlnaW4oc2ltaWxhclBsdWdpbnMsIHBs
dWdpbnMsIHBsdWdJbk9yaWdpbiwgbWltZVR5cGUpOwogICAgICAgICB9CiAgICAgfQogCi0gICAg
Zm9yIChzaXplX3QgaSA9IDAsIGxlbmd0aCA9IHBsdWdpbnNOZWVkaW5nUmVzdGFydC5zaXplKCk7
IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBwbHVnaW5zTmVlZGluZ1Jlc3RhcnRbaV0tPnNl
dERpc3BsYXlTdGF0ZShQbGF5aW5nKTsKLSAgICAgICAgcGx1Z2luc05lZWRpbmdSZXN0YXJ0W2ld
LT5yZXN0YXJ0U25hcHNob3R0ZWRQbHVnSW4oKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMCwgbGVu
Z3RoID0gc2ltaWxhclBsdWdpbnMuc2l6ZSgpOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
SFRNTFBsdWdJbkltYWdlRWxlbWVudCogcGx1Z2luVG9SZXN0YXJ0ID0gc2ltaWxhclBsdWdpbnNb
aV0uZ2V0KCk7CisgICAgICAgIGlmIChwbHVnaW5Ub1Jlc3RhcnQtPmRpc3BsYXlTdGF0ZSgpIDw9
IEhUTUxQbHVnSW5FbGVtZW50OjpEaXNwbGF5aW5nU25hcHNob3QpIHsKKyAgICAgICAgICAgIExP
RyhQbHVnaW5zLCAiJXAgUGx1Zy1pbiBsb29rcyBzaW1pbGFyIHRvIGEgcmVzdGFydGVkIHBsdWct
aW4uIFJlc3RhcnQuIiwgcGx1Z2luVG9SZXN0YXJ0KTsKKyAgICAgICAgICAgIHBsdWdpblRvUmVz
dGFydC0+c2V0RGlzcGxheVN0YXRlKFBsYXlpbmcpOworICAgICAgICAgICAgcGx1Z2luVG9SZXN0
YXJ0LT5yZXN0YXJ0U25hcHNob3R0ZWRQbHVnSW4oKTsKKyAgICAgICAgfQorICAgICAgICBwbHVn
aW5Ub1Jlc3RhcnQtPm1fYmxlc3NlZFBsdWdpbiA9IHRydWU7CiAgICAgfQogfQogCkBAIC00ODAs
NiArNDk2LDcgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojp1c2VyRGlkQ2xpY2tTbmFw
c2hvdChQYXNzUmVmUHRyPE1vdXNlRXZlbnQ+IGV2ZW50LAogICAgIGlmIChkb2N1bWVudCgpLT5w
YWdlKCkgJiYgIVNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRUcmVhdFVSTFNjaGVtZUFzTG9jYWwoZG9j
dW1lbnQoKS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLnByb3Rv
Y29sKCkpICYmIGRvY3VtZW50KCktPnBhZ2UoKS0+c2V0dGluZ3MoKS0+YXV0b3N0YXJ0T3JpZ2lu
UGx1Z0luU25hcHNob3R0aW5nRW5hYmxlZCgpKQogICAgICAgICBkb2N1bWVudCgpLT5wYWdlKCkt
PnBsdWdJbkNsaWVudCgpLT5kaWRTdGFydEZyb21PcmlnaW4oZG9jdW1lbnQoKS0+cGFnZSgpLT5t
YWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLmhvc3QoKSwgcGx1Z0luT3JpZ2luLCBs
b2FkZWRNaW1lVHlwZSgpKTsKIAorICAgIExPRyhQbHVnaW5zLCAiJXAgVXNlciBjbGlja2VkIG9u
IHNuYXBzaG90dGVkIHBsdWctaW4uIFJlc3RhcnQuIiwgdGhpcyk7CiAgICAgcmVzdGFydFNuYXBz
aG90dGVkUGx1Z0luKCk7CiAgICAgcmVzdGFydFNpbWlsYXJQbHVnSW5zKCk7CiB9CkBAIC00OTAs
NiArNTA3LDcgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpzZXRJc1ByaW1hcnlTbmFw
c2hvdHRlZFBsdWdJbihib29sIGlzUHJpbWFyeVNuYXBzaG8KICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKGlzUHJpbWFyeVNuYXBzaG90dGVkUGx1Z0luKSB7CisgICAgICAgIExPRyhQbHVnaW5z
LCAiJXAgUGx1Zy1pbiB3YXMgZGV0ZWN0ZWQgYXMgdGhlIHByaW1hcnkgZWxlbWVudCBpbiB0aGUg
cGFnZS4gUmVzdGFydC4iLCB0aGlzKTsKICAgICAgICAgcmVzdGFydFNuYXBzaG90dGVkUGx1Z0lu
KCk7CiAgICAgICAgIHJlc3RhcnRTaW1pbGFyUGx1Z0lucygpOwogICAgIH0KQEAgLTUyMCw2ICs1
MzgsMjcgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpzaW11bGF0ZWRNb3VzZUNsaWNr
VGltZXJGaXJlZChEZWZlcnJhYmxlT25lU2hvdFRpbWUKICAgICBtX3BlbmRpbmdDbGlja0V2ZW50
RnJvbVNuYXBzaG90ID0gbnVsbHB0cjsKIH0KIAordm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
OjpjaGVja1NpemVDaGFuZ2VGb3JTbmFwc2hvdHRpbmcoKQoreworICAgIGlmICghbV9uZWVkc0No
ZWNrRm9yU2l6ZUNoYW5nZSB8fCBtX3JlYXNvbkZvclNuYXBzaG90dGluZyAhPSBOb1NuYXBzaG90
VGlueVNpemUgfHwgbV9ibGVzc2VkUGx1Z2luKQorICAgICAgICByZXR1cm47CisKKyAgICBtX25l
ZWRzQ2hlY2tGb3JTaXplQ2hhbmdlID0gZmFsc2U7CisgICAgTGF5b3V0UmVjdCBjb250ZW50Qm94
UmVjdCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5jb250ZW50Qm94UmVjdCgpOworICAgIGlu
dCBjb250ZW50V2lkdGggPSBjb250ZW50Qm94UmVjdC53aWR0aCgpOworICAgIGludCBjb250ZW50
SGVpZ2h0ID0gY29udGVudEJveFJlY3QuaGVpZ2h0KCk7CisKKyAgICBpZiAoY29udGVudFdpZHRo
IDw9IHNpemluZ1RpbnlEaW1lbnNpb25UaHJlc2hvbGQgfHwgY29udGVudEhlaWdodCA8PSBzaXpp
bmdUaW55RGltZW5zaW9uVGhyZXNob2xkKQorICAgICAgICByZXR1cm47CisKKyAgICBMT0coUGx1
Z2lucywgIiVwIFBsdWctaW4gb3JpZ2luYWxseSBhdm9pZGVkIHNuYXBzaG90dGluZyBiZWNhdXNl
IGl0IHdhcyBzaXplZCAlZHglZC4gTm93IGl0IGlzICVkeCVkLiBUZWxsIGl0IHRvIHNuYXBzaG90
LlxuIiwgdGhpcywgbV9zaXplV2hlblNuYXBzaG90dGVkLndpZHRoKCksIG1fc2l6ZVdoZW5TbmFw
c2hvdHRlZC5oZWlnaHQoKSwgY29udGVudFdpZHRoLCBjb250ZW50SGVpZ2h0KTsKKyAgICBzZXRE
aXNwbGF5U3RhdGUoV2FpdGluZ0ZvclNuYXBzaG90KTsKKyAgICBtX3JlYXNvbkZvclNuYXBzaG90
dGluZyA9IFNuYXBzaG90UmVzaXplZDsKKyAgICBXaWRnZXQqIHdpZGdldCA9IHBsdWdpbldpZGdl
dCgpOworICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0LT5pc1BsdWdpblZpZXdCYXNlKCkpCisgICAg
ICAgIHN0YXRpY19jYXN0PFBsdWdpblZpZXdCYXNlKj4od2lkZ2V0KS0+YmVnaW5TbmFwc2hvdHRp
bmdSdW5uaW5nUGx1Z2luKCk7Cit9CisKIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6c3Vi
ZnJhbWVMb2FkZXJXaWxsQ3JlYXRlUGx1Z0luKGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBMT0co
UGx1Z2lucywgIiVwIFBsdWctaW4gVVJMOiAlcyIsIHRoaXMsIG1fdXJsLnV0ZjgoKS5kYXRhKCkp
OwpAQCAtNTI3LDE4ICs1NjYsMjcgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpzdWJm
cmFtZUxvYWRlcldpbGxDcmVhdGVQbHVnSW4oY29uc3QgS1VSTCYgdXJsKQogCiAgICAgbV9sb2Fk
ZWRVcmwgPSB1cmw7CiAKLSAgICBpZiAoIWRvY3VtZW50KCktPnBhZ2UoKQotICAgICAgICB8fCAh
ZG9jdW1lbnQoKS0+cGFnZSgpLT5zZXR0aW5ncygpLT5wbHVnSW5TbmFwc2hvdHRpbmdFbmFibGVk
KCkpCisgICAgaWYgKCFkb2N1bWVudCgpLT5wYWdlKCkgfHwgIWRvY3VtZW50KCktPnBhZ2UoKS0+
c2V0dGluZ3MoKS0+cGx1Z0luU25hcHNob3R0aW5nRW5hYmxlZCgpKSB7CisgICAgICAgIG1fcmVh
c29uRm9yU25hcHNob3R0aW5nID0gTm9TbmFwc2hvdERpc2FibGVkOwogICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKG1fYmxlc3NlZFBsdWdpbikgeworICAgICAgICBMT0coUGx1Z2lu
cywgIiVwIFBsdWctaW4gaXMgYmxlc3NlZCwgYWxsb3cgaXQgdG8gc3RhcnQiLCB0aGlzKTsKKyAg
ICAgICAgbV9yZWFzb25Gb3JTbmFwc2hvdHRpbmcgPSBOb1NuYXBzaG90Qmxlc3NlZDsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KIAogICAgIGlmIChkaXNwbGF5U3RhdGUoKSA9PSBSZXN0YXJ0aW5n
KSB7Ci0gICAgICAgIHNldERpc3BsYXlTdGF0ZShQbGF5aW5nKTsKICAgICAgICAgTE9HKFBsdWdp
bnMsICIlcCBQbHVnLWluIGlzIGV4cGxpY2l0bHkgcmVzdGFydGluZyIsIHRoaXMpOworICAgICAg
ICBtX3JlYXNvbkZvclNuYXBzaG90dGluZyA9IE5vU25hcHNob3RSZXN0YXJ0ZWQ7CisgICAgICAg
IHNldERpc3BsYXlTdGF0ZShQbGF5aW5nKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmIChkaXNwbGF5U3RhdGUoKSA9PSBSZXN0YXJ0aW5nV2l0aFBlbmRpbmdNb3VzZUNsaWNrKSB7
CiAgICAgICAgIExPRyhQbHVnaW5zLCAiJXAgUGx1Zy1pbiBpcyBleHBsaWNpdGx5IHJlc3RhcnRp
bmcgYnV0IGFsc28gd2FpdGluZyBmb3IgYSBjbGljayIsIHRoaXMpOworICAgICAgICBtX3JlYXNv
bkZvclNuYXBzaG90dGluZyA9IE5vU25hcHNob3RSZXN0YXJ0ZWQ7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTU0NiwxNiArNTk0LDIxIEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVu
dDo6c3ViZnJhbWVMb2FkZXJXaWxsQ3JlYXRlUGx1Z0luKGNvbnN0IEtVUkwmIHVybCkKIAogICAg
IGlmIChkb2N1bWVudCgpLT5pc1BsdWdpbkRvY3VtZW50KCkgJiYgaW5NYWluRnJhbWUpIHsKICAg
ICAgICAgTE9HKFBsdWdpbnMsICIlcCBQbHVnLWluIGRvY3VtZW50IGluIG1haW4gZnJhbWUiLCB0
aGlzKTsKKyAgICAgICAgbV9yZWFzb25Gb3JTbmFwc2hvdHRpbmcgPSBOb1NuYXBzaG90UGx1Z2lu
RG9jdW1lbnQ7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoU2NyaXB0Q29udHJv
bGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpIHsKICAgICAgICAgTE9HKFBsdWdpbnMsICIl
cCBTY3JpcHQgaXMgY3VycmVudGx5IHByb2Nlc3NpbmcgdXNlciBnZXN0dXJlLCBzZXQgdG8gcGxh
eSIsIHRoaXMpOworICAgICAgICBtX3JlYXNvbkZvclNuYXBzaG90dGluZyA9IE5vU25hcHNob3RV
c2VyR2VzdHVyZTsKKyAgICAgICAgbV9ibGVzc2VkUGx1Z2luID0gdHJ1ZTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmIChtX2NyZWF0ZWREdXJpbmdVc2VyR2VzdHVyZSkgewogICAg
ICAgICBMT0coUGx1Z2lucywgIiVwIFBsdWctaW4gd2FzIGNyZWF0ZWQgd2hlbiBwcm9jZXNzaW5n
IHVzZXIgZ2VzdHVyZSwgc2V0IHRvIHBsYXkiLCB0aGlzKTsKKyAgICAgICAgbV9yZWFzb25Gb3JT
bmFwc2hvdHRpbmcgPSBOb1NuYXBzaG90VXNlckdlc3R1cmU7CisgICAgICAgIG1fYmxlc3NlZFBs
dWdpbiA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU2NCwxNSArNjE3LDI1
IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6c3ViZnJhbWVMb2FkZXJXaWxsQ3JlYXRl
UGx1Z0luKGNvbnN0IEtVUkwmIHVybCkKICAgICAgICAgbGFzdEtub3duVXNlckdlc3R1cmVUaW1l
c3RhbXAgPSBzdGQ6Om1heChsYXN0S25vd25Vc2VyR2VzdHVyZVRpbWVzdGFtcCwgZG9jdW1lbnQo
KS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+bGFzdEhhbmRsZWRVc2VyR2VzdHVy
ZVRpbWVzdGFtcCgpKTsKICAgICBpZiAoY3VycmVudFRpbWUoKSAtIGxhc3RLbm93blVzZXJHZXN0
dXJlVGltZXN0YW1wIDwgYXV0b3N0YXJ0U29vbkFmdGVyVXNlckdlc3R1cmVUaHJlc2hvbGQpIHsK
ICAgICAgICAgTE9HKFBsdWdpbnMsICIlcCBQbHVnLWluIHdhcyBjcmVhdGVkIHNob3J0bHkgYWZ0
ZXIgYSB1c2VyIGdlc3R1cmUsIHNldCB0byBwbGF5IiwgdGhpcyk7CisgICAgICAgIG1fcmVhc29u
Rm9yU25hcHNob3R0aW5nID0gTm9TbmFwc2hvdFVzZXJHZXN0dXJlOworICAgICAgICBtX2JsZXNz
ZWRQbHVnaW4gPSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGRvY3Vt
ZW50KCktPnBhZ2UoKS0+c2V0dGluZ3MoKS0+c25hcHNob3RBbGxQbHVnSW5zKCkpIHsKICAgICAg
ICAgTE9HKFBsdWdpbnMsICIlcCBQbHVnLWluIGZvcmNlZCB0byBzbmFwc2hvdCBieSB1c2VyIHBy
ZWZlcmVuY2UiLCB0aGlzKTsKKyAgICAgICAgbV9yZWFzb25Gb3JTbmFwc2hvdHRpbmcgPSBTbmFw
c2hvdEZvcmNlZDsKICAgICAgICAgc2V0RGlzcGxheVN0YXRlKFdhaXRpbmdGb3JTbmFwc2hvdCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAoZG9jdW1lbnQoKS0+cGFnZSgpLT5z
ZXR0aW5ncygpLT5hdXRvc3RhcnRPcmlnaW5QbHVnSW5TbmFwc2hvdHRpbmdFbmFibGVkKCkgJiYg
ZG9jdW1lbnQoKS0+cGFnZSgpLT5wbHVnSW5DbGllbnQoKS0+c2hvdWxkQXV0b1N0YXJ0RnJvbU9y
aWdpbihkb2N1bWVudCgpLT5wYWdlKCktPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5iYXNlVVJM
KCkuaG9zdCgpLCB1cmwuaG9zdCgpLCBsb2FkZWRNaW1lVHlwZSgpKSkgeworICAgICAgICBMT0co
UGx1Z2lucywgIiVwIFBsdWctaW4gZnJvbSAoJXMsICVzKSBpcyBtYXJrZWQgdG8gYXV0by1zdGFy
dCwgc2V0IHRvIHBsYXkiLCB0aGlzLCBkb2N1bWVudCgpLT5wYWdlKCktPm1haW5GcmFtZSgpLT5k
b2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgpLnV0ZjgoKS5kYXRhKCksIHVybC5ob3N0KCkudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgIG1fcmVhc29uRm9yU25hcHNob3R0aW5nID0gTm9TbmFwc2hv
dEF1dG9zdGFydDsKKyAgICAgICAgbV9ibGVzc2VkUGx1Z2luID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKwogICAgIFJlbmRlckJveCogcmVuZGVyRW1iZWRkZWRPYmplY3QgPSB0b1Jl
bmRlckJveChyZW5kZXJlcigpKTsKICAgICBMZW5ndGggc3R5bGVXaWR0aCA9IHJlbmRlckVtYmVk
ZGVkT2JqZWN0LT5zdHlsZSgpLT53aWR0aCgpOwogICAgIExlbmd0aCBzdHlsZUhlaWdodCA9IHJl
bmRlckVtYmVkZGVkT2JqZWN0LT5zdHlsZSgpLT5oZWlnaHQoKTsKQEAgLTU4NywzNSArNjUwLDM4
IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6c3ViZnJhbWVMb2FkZXJXaWxsQ3JlYXRl
UGx1Z0luKGNvbnN0IEtVUkwmIHVybCkKICAgICAgICAgJiYgc3R5bGVIZWlnaHQuaXNQZXJjZW50
KCkgJiYgKHN0eWxlSGVpZ2h0LnBlcmNlbnQoKSA9PSAxMDApCiAgICAgICAgICYmIChzdGF0aWNf
Y2FzdDxmbG9hdD4oY29udGVudEFyZWEpIC8gdmlzaWJsZUFyZWEgPiBzaXppbmdGdWxsUGFnZUFy
ZWFSYXRpb1RocmVzaG9sZCkpIHsKICAgICAgICAgTE9HKFBsdWdpbnMsICIlcCBQbHVnLWluIGlz
IHRvcCBsZXZlbCBmdWxsIHBhZ2UsIHNldCB0byBwbGF5IiwgdGhpcyk7CisgICAgICAgIG1fcmVh
c29uRm9yU25hcHNob3R0aW5nID0gTm9TbmFwc2hvdFRvcExldmVsOworICAgICAgICBtX2JsZXNz
ZWRQbHVnaW4gPSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGNvbnRl
bnRXaWR0aCA8PSBzaXppbmdUaW55RGltZW5zaW9uVGhyZXNob2xkIHx8IGNvbnRlbnRIZWlnaHQg
PD0gc2l6aW5nVGlueURpbWVuc2lvblRocmVzaG9sZCkgewogICAgICAgICBMT0coUGx1Z2lucywg
IiVwIFBsdWctaW4gaXMgdmVyeSBzbWFsbCAlZHglZCwgc2V0IHRvIHBsYXkiLCB0aGlzLCBjb250
ZW50V2lkdGgsIGNvbnRlbnRIZWlnaHQpOworICAgICAgICBtX3NpemVXaGVuU25hcHNob3R0ZWQg
PSBJbnRTaXplKGNvbnRlbnRCb3hSZWN0LndpZHRoKCkudG9JbnQoKSwgY29udGVudEJveFJlY3Qu
aGVpZ2h0KCkudG9JbnQoKSk7CisgICAgICAgIG1fcmVhc29uRm9yU25hcHNob3R0aW5nID0gTm9T
bmFwc2hvdFRpbnlTaXplOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCFkb2N1
bWVudCgpLT5wYWdlKCktPnBsdWdJbkNsaWVudCgpKSB7CisgICAgICAgIExPRyhQbHVnaW5zLCAi
JXAgVGhlcmUgaXMgbm8gcGx1Zy1pbiBjbGllbnQuIFNldCB0byB3YWl0IGZvciBzbmFwc2hvdCIs
IHRoaXMpOworICAgICAgICBtX3JlYXNvbkZvclNuYXBzaG90dGluZyA9IFNuYXBzaG90Tm9DbGll
bnQ7CiAgICAgICAgIHNldERpc3BsYXlTdGF0ZShXYWl0aW5nRm9yU25hcHNob3QpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGRvY3VtZW50KCktPnBhZ2UoKS0+c2V0dGluZ3Mo
KS0+YXV0b3N0YXJ0T3JpZ2luUGx1Z0luU25hcHNob3R0aW5nRW5hYmxlZCgpICYmIGRvY3VtZW50
KCktPnBhZ2UoKS0+cGx1Z0luQ2xpZW50KCktPnNob3VsZEF1dG9TdGFydEZyb21PcmlnaW4oZG9j
dW1lbnQoKS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLmhvc3Qo
KSwgdXJsLmhvc3QoKSwgbG9hZGVkTWltZVR5cGUoKSkpIHsKLSAgICAgICAgTE9HKFBsdWdpbnMs
ICIlcCBQbHVnLWluIGZyb20gKCVzLCAlcykgaXMgbWFya2VkIHRvIGF1dG8tc3RhcnQsIHNldCB0
byBwbGF5IiwgdGhpcywgZG9jdW1lbnQoKS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQo
KS0+YmFzZVVSTCgpLmhvc3QoKS51dGY4KCkuZGF0YSgpLCB1cmwuaG9zdCgpLnV0ZjgoKS5kYXRh
KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgTE9HKFBsdWdpbnMsICIlcCBQbHVn
LWluIGZyb20gKCVzLCAlcykgaXMgbm90IGF1dG8tc3RhcnQsIHNpemVkIGF0ICVkeCVkLCBzZXQg
dG8gd2FpdCBmb3Igc25hcHNob3QiLCB0aGlzLCBkb2N1bWVudCgpLT5wYWdlKCktPm1haW5GcmFt
ZSgpLT5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgpLnV0ZjgoKS5kYXRhKCksIHVybC5ob3N0
KCkudXRmOCgpLmRhdGEoKSwgY29udGVudFdpZHRoLCBjb250ZW50SGVpZ2h0KTsKKyAgICBtX3Jl
YXNvbkZvclNuYXBzaG90dGluZyA9IFNuYXBzaG90RGVmYXVsdDsKICAgICBzZXREaXNwbGF5U3Rh
dGUoV2FpdGluZ0ZvclNuYXBzaG90KTsKIH0KIAogdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
OjpzdWJmcmFtZUxvYWRlckRpZENyZWF0ZVBsdWdJbihjb25zdCBXaWRnZXQqIHdpZGdldCkKIHsK
LSAgICBpZiAoIXdpZGdldC0+aXNQbHVnaW5WaWV3QmFzZSgpCi0gICAgICAgIHx8ICFzdGF0aWNf
Y2FzdDxjb25zdCBQbHVnaW5WaWV3QmFzZSo+KHdpZGdldCktPnNob3VsZEFsd2F5c0F1dG9TdGFy
dCgpKQorICAgIGlmICghd2lkZ2V0LT5pc1BsdWdpblZpZXdCYXNlKCkgfHwgIXN0YXRpY19jYXN0
PGNvbnN0IFBsdWdpblZpZXdCYXNlKj4od2lkZ2V0KS0+c2hvdWxkQWx3YXlzQXV0b1N0YXJ0KCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIExPRyhQbHVnaW5zLCAiJXAgUGx1Zy1pbiBzaG91bGQg
YXV0by1zdGFydCwgc2V0IHRvIHBsYXkiLCB0aGlzKTsKKyAgICBtX2JsZXNzZWRQbHVnaW4gPSB0
cnVlOworICAgIG1fcmVhc29uRm9yU25hcHNob3R0aW5nID0gTm9TbmFwc2hvdEF1dG9zdGFydDsK
ICAgICBzZXREaXNwbGF5U3RhdGUoUGxheWluZyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgKaW5kZXggYmRmODdiOS4uNmI2ODgyZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgKQEAgLTc1LDcgKzc1
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmVlZHNXaWRnZXRVcGRhdGUoYm9vbCBuZWVkc1dp
ZGdldFVwZGF0ZSkgeyBtX25lZWRzV2lkZ2V0VXBkYXRlID0gbmVlZHNXaWRnZXRVcGRhdGU7IH0K
IAogICAgIHZvaWQgdXNlckRpZENsaWNrU25hcHNob3QoUGFzc1JlZlB0cjxNb3VzZUV2ZW50Piwg
Ym9vbCBmb3J3YXJkRXZlbnQpOwotICAgIHZvaWQgdXBkYXRlU25hcHNob3RJbmZvKCk7CisgICAg
dm9pZCBjaGVja1NuYXBzaG90U3RhdHVzKCk7CiAgICAgSW1hZ2UqIHNuYXBzaG90SW1hZ2UoKSBj
b25zdCB7IHJldHVybiBtX3NuYXBzaG90SW1hZ2UuZ2V0KCk7IH0KIAogICAgIC8vIFBsdWctaW4g
VVJMIG1pZ2h0IG5vdCBiZSB0aGUgc2FtZSBhcyB1cmwoKSB3aXRoIG92ZXJyaWRpbmcgcGFyYW1l
dGVycy4KQEAgLTg1LDYgKzg1LDI3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElzUHJpbWFyeVNu
YXBzaG90dGVkUGx1Z0luKGJvb2wpOwogICAgIGJvb2wgcGFydE9mU25hcHNob3RMYWJlbChOb2Rl
Kik7CiAKKyAgICBib29sIG5lZWRzQ2hlY2tGb3JTaXplQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4g
bV9uZWVkc0NoZWNrRm9yU2l6ZUNoYW5nZTsgfQorICAgIHZvaWQgc2V0TmVlZHNDaGVja0ZvclNp
emVDaGFuZ2UoKSB7IG1fbmVlZHNDaGVja0ZvclNpemVDaGFuZ2UgPSB0cnVlOyB9CisgICAgdm9p
ZCBjaGVja1NpemVDaGFuZ2VGb3JTbmFwc2hvdHRpbmcoKTsKKworICAgIGVudW0gU25hcHNob3RS
ZWFzb24geworICAgICAgICBOb1ZhbHVlLAorICAgICAgICBOb1NuYXBzaG90RGlzYWJsZWQsCisg
ICAgICAgIE5vU25hcHNob3RQbHVnaW5Eb2N1bWVudCwKKyAgICAgICAgTm9TbmFwc2hvdFRpbnlT
aXplLAorICAgICAgICBOb1NuYXBzaG90QXV0b3N0YXJ0LAorICAgICAgICBOb1NuYXBzaG90Qmxl
c3NlZCwKKyAgICAgICAgTm9TbmFwc2hvdFJlc3RhcnRlZCwKKyAgICAgICAgTm9TbmFwc2hvdFVz
ZXJHZXN0dXJlLAorICAgICAgICBOb1NuYXBzaG90VG9wTGV2ZWwsCisgICAgICAgIFNuYXBzaG90
Tm9DbGllbnQsCisgICAgICAgIFNuYXBzaG90Rm9yY2VkLAorICAgICAgICBTbmFwc2hvdFJlc2l6
ZWQsCisgICAgICAgIFNuYXBzaG90RGVmYXVsdAorICAgIH07CisgICAgU25hcHNob3RSZWFzb24g
cmVhc29uRm9yU25hcHNob3R0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9yZWFzb25Gb3JTbmFwc2hv
dHRpbmc7IH0KKwogcHJvdGVjdGVkOgogICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlciwg
UHJlZmVyUGx1Z0luc0ZvckltYWdlc09wdGlvbik7CiAKQEAgLTE0Nyw2ICsxNjgsMTAgQEAgcHJp
dmF0ZToKICAgICBSZWZQdHI8RWxlbWVudD4gbV9zbmFwc2hvdExhYmVsOwogICAgIGJvb2wgbV9j
cmVhdGVkRHVyaW5nVXNlckdlc3R1cmU7CiAgICAgYm9vbCBtX3Jlc3RhcnRlZFBsdWdpbjsKKyAg
ICBib29sIG1fYmxlc3NlZFBsdWdpbjsKKyAgICBib29sIG1fbmVlZHNDaGVja0ZvclNpemVDaGFu
Z2U7CisgICAgSW50U2l6ZSBtX3NpemVXaGVuU25hcHNob3R0ZWQ7CisgICAgU25hcHNob3RSZWFz
b24gbV9yZWFzb25Gb3JTbmFwc2hvdHRpbmc7CiB9OwogCiBpbmxpbmUgSFRNTFBsdWdJbkltYWdl
RWxlbWVudCogdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KE5vZGUqIG5vZGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAKaW5kZXggMTIzMTI1Mi4uM2VjYWQyMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcApAQCAtMTQyMiw3ICsxNDIyLDggQEAgdm9pZCBGcmFtZVZpZXc6OmFkZFdpZGdl
dFRvVXBkYXRlKFJlbmRlck9iamVjdCogb2JqZWN0KQogICAgIE5vZGUqIG5vZGUgPSBvYmplY3Qt
Pm5vZGUoKTsKICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpIHx8IG5vZGUtPmhh
c1RhZ05hbWUoZW1iZWRUYWcpKSB7CiAgICAgICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQqIHBs
dWdpbkVsZW1lbnQgPSB0b0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQobm9kZSk7Ci0gICAgICAgIHBs
dWdpbkVsZW1lbnQtPnNldE5lZWRzV2lkZ2V0VXBkYXRlKHRydWUpOworICAgICAgICBpZiAoIXBs
dWdpbkVsZW1lbnQtPm5lZWRzQ2hlY2tGb3JTaXplQ2hhbmdlKCkpCisgICAgICAgICAgICBwbHVn
aW5FbGVtZW50LT5zZXROZWVkc1dpZGdldFVwZGF0ZSh0cnVlKTsKICAgICB9CiAKICAgICBtX3dp
ZGdldFVwZGF0ZVNldC0+YWRkKG9iamVjdCk7CkBAIC0yNTk1LDcgKzI1OTYsNyBAQCB2b2lkIEZy
YW1lVmlldzo6dXBkYXRlV2lkZ2V0KFJlbmRlck9iamVjdCogb2JqZWN0KQogICAgICAgICBpZiAo
b2JqZWN0LT5pc1NuYXBzaG90dGVkUGx1Z0luKCkpIHsKICAgICAgICAgICAgIGlmIChvd25lckVs
ZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSB8fCBvd25lckVsZW1lbnQtPmhhc1RhZ05hbWUo
ZW1iZWRUYWcpKSB7CiAgICAgICAgICAgICAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCogcGx1
Z2luRWxlbWVudCA9IHRvSFRNTFBsdWdJbkltYWdlRWxlbWVudChvd25lckVsZW1lbnQpOwotICAg
ICAgICAgICAgICAgIHBsdWdpbkVsZW1lbnQtPnVwZGF0ZVNuYXBzaG90SW5mbygpOworICAgICAg
ICAgICAgICAgIHBsdWdpbkVsZW1lbnQtPmNoZWNrU25hcHNob3RTdGF0dXMoKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjYwNCw2ICsyNjA1LDEw
IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVXaWRnZXQoUmVuZGVyT2JqZWN0KiBvYmplY3QpCiAg
ICAgICAgIC8vIHVwZGF0ZVdpZGdldChQbHVnaW5DcmVhdGlvbk9wdGlvbikgb24gSFRNTEVsZW1l
bnQuCiAgICAgICAgIGlmIChvd25lckVsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSB8fCBv
d25lckVsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG93bmVyRWxlbWVudC0+aGFzVGFn
TmFtZShhcHBsZXRUYWcpKSB7CiAgICAgICAgICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KiBw
bHVnaW5FbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KG93bmVyRWxlbWVudCk7Cisg
ICAgICAgICAgICBpZiAocGx1Z2luRWxlbWVudC0+bmVlZHNDaGVja0ZvclNpemVDaGFuZ2UoKSkg
eworICAgICAgICAgICAgICAgIHBsdWdpbkVsZW1lbnQtPmNoZWNrU25hcHNob3RTdGF0dXMoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAo
cGx1Z2luRWxlbWVudC0+bmVlZHNXaWRnZXRVcGRhdGUoKSkKICAgICAgICAgICAgICAgICBwbHVn
aW5FbGVtZW50LT51cGRhdGVXaWRnZXQoQ3JlYXRlQW55V2lkZ2V0VHlwZSk7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlld0Jhc2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlld0Jhc2UuaAppbmRleCBiNjBmYTkyLi42YzMy
ZTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXdCYXNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3QmFzZS5oCkBAIC02NCw2ICs2
NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY2FuUHJvY2Vzc0RyYWcoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBib29sIHNob3VsZEFsd2F5c0F1dG9TdGFy
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGJlZ2luU25hcHNo
b3R0aW5nUnVubmluZ1BsdWdpbigpIHsgfQogCiAgICAgdmlydHVhbCBib29sIHNob3VsZEFsbG93
TmF2aWdhdGlvbkZyb21EcmFncygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCmluZGV4IGQw
ZDQ1NWEuLmRjOTNhODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJFbWJlZGRlZE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckVtYmVkZGVkT2JqZWN0LmNwcApAQCAtMjkzLDExICsyOTMsMzAgQEAgdm9pZCBSZW5kZXJFbWJl
ZGRlZE9iamVjdDo6bGF5b3V0KCkKIAogICAgIHVwZGF0ZUxheWVyVHJhbnNmb3JtKCk7CiAKLSAg
ICBpZiAoIXdpZGdldCgpICYmIGZyYW1lVmlldygpICYmIGNhbkhhdmVXaWRnZXQoKSkKKyAgICBi
b29sIHdhc01pc3NpbmdXaWRnZXQgPSBmYWxzZTsKKyAgICBpZiAoIXdpZGdldCgpICYmIGZyYW1l
VmlldygpICYmIGNhbkhhdmVXaWRnZXQoKSkgeworICAgICAgICB3YXNNaXNzaW5nV2lkZ2V0ID0g
dHJ1ZTsKICAgICAgICAgZnJhbWVWaWV3KCktPmFkZFdpZGdldFRvVXBkYXRlKHRoaXMpOworICAg
IH0KIAogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIAorICAgIExheW91dFNpemUgbmV3U2l6
ZSA9IGNvbnRlbnRCb3hSZWN0KCkuc2l6ZSgpOworCisgICAgaWYgKCF3YXNNaXNzaW5nV2lkZ2V0
ICYmIG5ld1NpemUud2lkdGgoKSA+PSBvbGRTaXplLndpZHRoKCkgJiYgbmV3U2l6ZS5oZWlnaHQo
KSA+PSBvbGRTaXplLmhlaWdodCgpKSB7CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0Vs
ZW1lbnQobm9kZSgpKTsKKyAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aXNQbHVnaW5F
bGVtZW50KCkpIHsKKyAgICAgICAgICAgIEhUTUxQbHVnSW5FbGVtZW50KiBwbHVnSW5FbGVtZW50
ID0gdG9IVE1MUGx1Z0luRWxlbWVudChlbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChwbHVnSW5F
bGVtZW50LT5pc1BsdWdJbkltYWdlRWxlbWVudCgpICYmIHBsdWdJbkVsZW1lbnQtPmRpc3BsYXlT
dGF0ZSgpID4gSFRNTFBsdWdJbkVsZW1lbnQ6OkRpc3BsYXlpbmdTbmFwc2hvdCkgeworICAgICAg
ICAgICAgICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQqIHBsdWdJbkltYWdlRWxlbWVudCA9IHRv
SFRNTFBsdWdJbkltYWdlRWxlbWVudChlbGVtZW50KTsKKyAgICAgICAgICAgICAgICBpZiAocGx1
Z0luSW1hZ2VFbGVtZW50LT5yZWFzb25Gb3JTbmFwc2hvdHRpbmcoKSA9PSBIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50OjpOb1NuYXBzaG90VGlueVNpemUgJiYgZG9jdW1lbnQoKS0+dmlldygpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHBsdWdJbkltYWdlRWxlbWVudC0+c2V0TmVlZHNDaGVja0ZvclNp
emVDaGFuZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+dmlldygpLT5hZGRX
aWRnZXRUb1VwZGF0ZSh0aGlzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoIWNhbkhhdmVDaGlsZHJlbigpKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTMxMiw3ICszMzEsNiBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0Ojps
YXlvdXQoKQogICAgIGlmICghY2hpbGRCb3gpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBM
YXlvdXRTaXplIG5ld1NpemUgPSBjb250ZW50Qm94UmVjdCgpLnNpemUoKTsKICAgICBpZiAobmV3
U2l6ZSA9PSBvbGRTaXplICYmICFjaGlsZEJveC0+bmVlZHNMYXlvdXQoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDg1YzFkNWQuLjY2Nzk4NDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOCBAQAorCisgICAgICAgIFBsdWdpbnMgdGhhdCByZXNpemUgbWlnaHQgbmVlZCB0
byBiZSBzbmFwc2hvdHRlZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwMjE1NworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI2OTYyNTk+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWxsb3cgYSBydW5u
aW5nIHBsdWdpbiB0byBiZSBzbmFwc2hvdHRlZC4gQWxsIHRoaXMKKyAgICAgICAgbWVhbnMgaXMg
dGhhdCB3ZSBzdGFydCB0aGUgc25hcHNob3QgdGltZXIgYWdhaW4uCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZp
ZXc6OmJlZ2luU25hcHNob3R0aW5nUnVubmluZ1BsdWdpbik6IFJlc3RhcnQKKyAgICAgICAgICAg
IHRoZSB0aW1lci4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oOiBW
aXJ0dWFsIG1ldGhvZCBkZWNsYXJhdGlvbi4KKwogMjAxMy0wNC0xMSAgQW5kZXJzIENhcmxzc29u
ICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBtb3JlIGxvZ2ljIGlu
IFN0b3JhZ2VBcmVhTWFwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luVmlldy5jcHAKaW5kZXggZjZlZTNiZi4uYzhjMTEwYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMTYzOSw2ICsxNjM5
LDExIEBAIHZvaWQgUGx1Z2luVmlldzo6cGx1Z2luU25hcHNob3RUaW1lckZpcmVkKERlZmVycmFi
bGVPbmVTaG90VGltZXI8UGx1Z2luVmlldz4qKQogICAgIG1fcGx1Z2luRWxlbWVudC0+c2V0RGlz
cGxheVN0YXRlKEhUTUxQbHVnSW5FbGVtZW50OjpEaXNwbGF5aW5nU25hcHNob3QpOwogfQogCit2
b2lkIFBsdWdpblZpZXc6OmJlZ2luU25hcHNob3R0aW5nUnVubmluZ1BsdWdpbigpCit7CisgICAg
bV9wbHVnaW5TbmFwc2hvdFRpbWVyLnJlc3RhcnQoKTsKK30KKwogYm9vbCBQbHVnaW5WaWV3Ojpz
aG91bGRBbHdheXNBdXRvU3RhcnQoKSBjb25zdAogewogICAgIGlmICghbV9wbHVnaW4pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAppbmRleCA2YmQy
NjQ2Li5jNjg0MWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW5WaWV3LmgKQEAgLTE0OCw2ICsxNDgsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgV2Vi
Q29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpOwogICAgIHZpcnR1YWwgYm9vbCB3
YW50c1doZWVsRXZlbnRzKCk7CiAgICAgdmlydHVhbCBib29sIHNob3VsZEFsd2F5c0F1dG9TdGFy
dCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBiZWdpblNuYXBzaG90dGluZ1J1
bm5pbmdQbHVnaW4oKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQWxsb3dOYXZp
Z2F0aW9uRnJvbURyYWdzKCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICAvLyBXZWJDb3JlOjpXaWRn
ZXQK
</data>
<flag name="commit-queue"
          id="219822"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>197958</attachid>
            <date>2013-04-13 15:06:40 -0700</date>
            <delta_ts>2013-04-15 15:56:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>resizer.patch</filename>
            <type>text/plain</type>
            <size>25042</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3NDRhYTI0Li4wOWU3MDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODEg
QEAKKzIwMTMtMDQtMTIgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgorCisgICAgICAg
IFBsdWdpbnMgdGhhdCByZXNpemUgbWlnaHQgbmVlZCB0byBiZSBzbmFwc2hvdHRlZC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjE1NworICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMTI2OTYyNTk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQSBwbHVnaW4gY291bGQgYXZvaWQgc25hcHNob3R0aW5nIGlm
IGl0IHN0YXJ0ZWQgdmVyeQorICAgICAgICBzbWFsbCAoYmVsb3cgdGhlIHRocmVzaG9sZCB3aGVy
ZSB3ZSBhdXRvc3RhcnQpLCBhbmQgdGhlbgorICAgICAgICByZXNpemVkIHRvIGJlIGxhcmdlIChh
Ym92ZSB0aGUgdGhyZXNob2xkKS4gRGV0ZWN0IHRoaXMKKyAgICAgICAgY2FzZSBhbmQgdGVsbCB0
aGUgcGx1Z2luIHRvIHNuYXBzaG90LgorCisgICAgICAgIFRoZXJlIHVuZm9ydHVuYXRlbHkgaXMg
YSBiaXQgb2Ygc3RhdGUgdG8gdHJhY2sgd2hlbiBkb2luZworICAgICAgICB0aGlzLiBXZSBoYXZl
IHRvIHN0YXJ0IHRoZSBzbmFwc2hvdHRpbmcgaW4gYSBwb3N0LWxheW91dAorICAgICAgICB0YXNr
LCBzbyB3ZSBjYXJyeSBhIGZsYWcgdG8gc2F5IHdlJ3JlIGNoZWNraW5nIHNpemUgYnV0CisgICAg
ICAgIG5vdCB3YW50aW5nIHRoZSBwbHVnaW4gdG8gdXBkYXRlICh3aGljaCB3b3VsZCByZXN0YXJ0
IGl0KS4KKyAgICAgICAgV2UgYWxzbyBtaWdodCBiZSBhIHBsdWdpbiB0aGF0IHdvdWxkIGhhdmUg
YWxyZWFkeSByZXN0YXJ0ZWQKKyAgICAgICAgZHVlIHRvIGEgc2ltaWxhciBwbHVnaW4gYmVpbmcg
Y2xpY2tlZCBvciBkZXRlY3RlZCBhcyBkb21pbmFudC4KKyAgICAgICAgU28gdGhpcyBwYXRjaCBp
bnRyb2R1Y2VzIHRoZSBjb25jZXB0IG9mIGEgYmxlc3NlZCBwbHVnaW4sIHdoaWNoCisgICAgICAg
IHdvdWxkIGhhdmUgc3RhcnRlZCBhdXRvbWF0aWNhbGx5IGlmIGl0IGhhZG4ndCBhbHJlYWR5IHN0
YXJ0ZWQhCisKKyAgICAgICAgSSBhbHNvIGFkZGVkIHNvbWUgbW9yZSBsb2dnaW5nIHRvIGJlIG1v
cmUgY2xlYXIgYWJvdXQgd2hhdCBpcworICAgICAgICBoYXBwZW5pbmcgdG8gcGx1Z2lucyBnb2lu
ZyB0aHJvdWdoIHRoZSBzbmFwc2hvdCBwcm9jZXNzLCBhbmQKKyAgICAgICAgY2hhbmdlZCB0aGUg
b3JkZXIgb2YgdGhlIHRlc3RzIGluIHRoZSBhbGdvcml0aG0gc28gdGhhdCBkb21haW4KKyAgICAg
ICAgZGV0ZWN0aW9uIGNvbWVzIGJlZm9yZSBleGFtaW5pbmcgdGhlIHNpemUuCisKKyAgICAgICAg
KiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFBsdWdJbkltYWdlRWxlbWVudDo6SFRNTFBsdWdJbkltYWdlRWxlbWVudCk6IEluaXRpYWxpc2UK
KyAgICAgICAgICAgIHRoZSB0aHJlZSBuZXcgbWVtYmVyIHZhcmlhYmxlcy4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnNldERpc3BsYXlTdGF0ZSk6IE1hcmsgYSBy
ZXN0YXJ0ZWQKKyAgICAgICAgICAgIHBsdWdpbiBhcyBibGVzc2VkLiBUaGlzIG1lYW5zIHRoYXQg
aWYgaXQgbGF0ZXIgcmVzaXplcyBhYm92ZSB0aGUKKyAgICAgICAgICAgIHRocmVzaG9sZCwgaXQg
d29uJ3QgdHJpZ2dlciB0aGUgc25hcHNob3QgZGV0ZWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6Y2hlY2tTbmFwc2hvdFN0YXR1cyk6IFJlbmFtZWQgZnJv
bQorICAgICAgICAgICAgdXBkYXRlU25hcHNob3RJbmZvLiBUaGlzIG5vdyB1cGRhdGVzIHRoZSBz
bmFwc2hvdCwgYnV0IGFsc28gcnVucworICAgICAgICAgICAgdGhlIGNoZWNrIGZvciBzaXplIGNo
YW5nZXMuCisgICAgICAgIChXZWJDb3JlOjphZGRQbHVnSW5zRnJvbU5vZGVMaXN0TWF0Y2hpbmdQ
bHVnSW5PcmlnaW4pOiBHYXRoZXIgYWxsIHBsdWdpbnMKKyAgICAgICAgICAgIHRoYXQgbG9vayBs
aWtlIGEgcmVzdGFydGluZyBwbHVnaW4sIG5vdCBqdXN0IHRob3NlIHNuYXBzaG90dGVkLiBUaGF0
CisgICAgICAgICAgICB3YXkgdGhleSBjYW4gYWxsIGJlIGJsZXNzZWQuCisgICAgICAgIChXZWJD
b3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZXN0YXJ0U2ltaWxhclBsdWdJbnMpOiBCbGVz
cyBldmVyeQorICAgICAgICAgICAgcGx1Z2luIHRoYXQgbG9va3Mgc2ltaWxhciwgd2hldGhlciBv
ciBub3QgaXQgaXMgc25hcHNob3R0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50Ojp1c2VyRGlkQ2xpY2tTbmFwc2hvdCk6IE1vcmUgbG9nZ2luZy4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnNldElzUHJpbWFyeVNuYXBzaG90dGVk
UGx1Z0luKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
OjpjaGVja1NpemVDaGFuZ2VGb3JTbmFwc2hvdHRpbmcpOiBOZXcKKyAgICAgICAgICAgIG1ldGhv
ZC4gSWYgdGhlIHBsdWdpbiB3YXMgYmVsb3cgdGhlIHRocmVzaG9sZCBhbmQgaXMgbm93IGFib3Zl
IGl0LAorICAgICAgICAgICAgYmVnaW4gdGhlIHNuYXBzaG90dGluZyBwcm9jZXNzLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6c3ViZnJhbWVMb2FkZXJXaWxsQ3Jl
YXRlUGx1Z0luKTogQmxlc3NlZAorICAgICAgICAgICAgcGx1Z2lucyBzaG91bGQgc3RhcnQgaW1t
ZWRpYXRlbHkuIE1vdmUgdGhlIG9yaWdpbiB0ZXN0IGVhcmxpZXIgaW4KKyAgICAgICAgICAgIHRo
ZSBtZXRob2QuIElmIGEgcGx1Z2luIGF2b2lkZWQgc25hcHNob3R0aW5nIGR1ZSB0byBzaXplLCBy
ZW1lbWJlcgorICAgICAgICAgICAgdGhlIHNpemUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1
Z0luSW1hZ2VFbGVtZW50OjpzdWJmcmFtZUxvYWRlckRpZENyZWF0ZVBsdWdJbik6IEJsZXNzIHRo
ZQorICAgICAgICAgICAgcGx1Z2luLgorCisgICAgICAgICogaHRtbC9IVE1MUGx1Z0luSW1hZ2VF
bGVtZW50Lmg6CisgICAgICAgIChIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KTogRm91ciBuZXcgbWVt
YmVyIHZhcmlhYmxlczoKKyAgICAgICAgICAgIC0gd2hldGhlciBvciBub3QgYSBwbHVnaW4gaXMg
Ymxlc3NlZAorICAgICAgICAgICAgLSBhIHJlYXNvbiBmb3Igc25hcHNob3R0aW5nIChvciBub3Qp
LCB1c2VzIHRoZSBTbmFwc2hvdFJlYXNvbiBlbnVtCisgICAgICAgICAgICAtIHRoZSBzaXplIHdo
ZW4gaXQgYXZvaWRlZCBzbmFwc2hvdHRpbmcKKyAgICAgICAgICAgIC0gYSBmbGFnIHRvIGluZGlj
YXRlIHRoZSBwb3N0IGxheW91dCB1cGRhdGUgd2FzIHRyaWdnZXJlZCBkdWUgdG8KKyAgICAgICAg
ICAgICAgYSBzaXplIGNoYW5nZQorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxl
bWVudDo6bmVlZHNDaGVja0ZvclNpemVDaGFuZ2UpOiBOZXcgbWV0aG9kLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6c2V0TmVlZHNDaGVja0ZvclNpemVDaGFuZ2Up
OiBOZXcgbWV0aG9kLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6
cmVhc29uRm9yU25hcHNob3R0aW5nKTogUmV0dXJuIHRoZSByZWFzb24gZm9yCisgICAgICAgICAg
ICBzbmFwc2hvdHRpbmcgb3Igbm90IHNuYXBzaG90dGluZy4KKworICAgICAgICAqIHBhZ2UvRnJh
bWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6YWRkV2lkZ2V0VG9VcGRh
dGUpOiBHdWFyZCB1cGRhdGluZyB0aGUgd2lkZ2V0LiBXZSBkb24ndAorICAgICAgICAgICAgd2Fu
dCB0byBkbyBpdCB3aGVuIHdlJ3JlIGNoZWNraW5nIGZvciBhIHNpemUgY2hhbmdlIGluIHRoZSBw
bHVnaW4uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnVwZGF0ZVdpZGdldCk6IENhbGwg
bmV3IG5hbWUuCisKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXdCYXNlLmg6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3QmFzZTo6YmVnaW5TbmFwc2hvdHRpbmdSdW5uaW5nUGx1Z2lu
KTogRW1wdHkgdmlydHVhbAorICAgICAgICAgICAgbWV0aG9kIHRvIHNuYXBzaG90IGEgcnVubmlu
ZyBwbHVnaW4uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OmxheW91dCk6IElmIHRo
ZSBwbHVnaW4gaGFzIGluY3JlYXNlZCBpbgorICAgICAgICAgICAgc2l6ZSBhZGQgaXQgdG8gdGhl
IHBvc3QgbGF5b3V0IGxpc3Qgc28gdGhhdCBpdCB3aWxsIGJlIGNoZWNrZWQuCisKIDIwMTMtMDQt
MTEgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBkaWdpYS5jb20+CiAKICAg
ICAgICAgaGFuZGxlTW91c2VNb3ZlRXZlbnQgc2hvdWxkIGxldCBoaXQtdGVzdGluZyBoaXQtdGVz
dCBzY3JvbGxiYXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5J
bWFnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50LmNwcAppbmRleCA0ZThlZWIwZS4uYzZlNTE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCkBAIC04MSw2ICs4MSw5IEBAIEhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQ6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jCiAgICAgLCBtX3JlbW92ZVNuYXBzaG90VGltZXIodGhpcywgJkhUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQ6OnJlbW92ZVNuYXBzaG90VGltZXJGaXJlZCkKICAgICAsIG1fY3Jl
YXRlZER1cmluZ1VzZXJHZXN0dXJlKFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSgpKQogICAgICwgbV9yZXN0YXJ0ZWRQbHVnaW4oZmFsc2UpCisgICAgLCBtX2JsZXNzZWRQ
bHVnaW4oZmFsc2UpCisgICAgLCBtX25lZWRzQ2hlY2tGb3JTaXplQ2hhbmdlKGZhbHNlKQorICAg
ICwgbV9yZWFzb25Gb3JTbmFwc2hvdHRpbmcoTm9TbmFwc2hvdFZhbHVlKQogewogICAgIHNldEhh
c0N1c3RvbVN0eWxlQ2FsbGJhY2tzKCk7CiB9CkBAIC05Niw2ICs5OSw4IEBAIHZvaWQgSFRNTFBs
dWdJbkltYWdlRWxlbWVudDo6c2V0RGlzcGxheVN0YXRlKERpc3BsYXlTdGF0ZSBzdGF0ZSkKICNp
ZiBQTEFURk9STShNQUMpCiAgICAgaWYgKHN0YXRlID09IFJlc3RhcnRpbmdXaXRoUGVuZGluZ01v
dXNlQ2xpY2sgfHwgc3RhdGUgPT0gUmVzdGFydGluZykgewogICAgICAgICBtX3Jlc3RhcnRlZFBs
dWdpbiA9IHRydWU7CisgICAgICAgIG1fYmxlc3NlZFBsdWdpbiA9IHRydWU7CisgICAgICAgIG1f
cmVhc29uRm9yU25hcHNob3R0aW5nID0gTm9TbmFwc2hvdFJlc3RhcnRlZDsKICAgICAgICAgaWYg
KGRpc3BsYXlTdGF0ZSgpID09IERpc3BsYXlpbmdTbmFwc2hvdCkKICAgICAgICAgICAgIG1fcmVt
b3ZlU25hcHNob3RUaW1lci5zdGFydE9uZVNob3QocmVtb3ZlU25hcHNob3RUaW1lckRlbGF5KTsK
ICAgICB9CkBAIC0zMzUsOCArMzQwLDE0IEBAIHN0YXRpYyBBdG9taWNTdHJpbmcgY2xhc3NOYW1l
Rm9yU2hhZG93Um9vdChjb25zdCBOb2RlKiBub2RlKQogICAgIHJldHVybiBwbHVnSW5MYXJnZVNp
emVDbGFzc05hbWU7CiB9CiAKLXZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6dXBkYXRlU25h
cHNob3RJbmZvKCkKK3ZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6Y2hlY2tTbmFwc2hvdFN0
YXR1cygpCiB7CisgICAgaWYgKCFyZW5kZXJlcigpLT5pc1NuYXBzaG90dGVkUGx1Z0luKCkpIHsK
KyAgICAgICAgaWYgKGRpc3BsYXlTdGF0ZSgpID09IFBsYXlpbmcpCisgICAgICAgICAgICBjaGVj
a1NpemVDaGFuZ2VGb3JTbmFwc2hvdHRpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwog
ICAgIFNoYWRvd1Jvb3QqIHJvb3QgPSB1c2VyQWdlbnRTaGFkb3dSb290KCk7CiAgICAgaWYgKCFy
b290KQogICAgICAgICByZXR1cm47CkBAIC00MjcsNyArNDM4LDcgQEAgc3RhdGljIHZvaWQgYWRk
UGx1Z0luc0Zyb21Ob2RlTGlzdE1hdGNoaW5nUGx1Z0luT3JpZ2luKEhUTUxQbHVnSW5JbWFnZUVs
ZW1lbnRMaXMKICAgICAgICAgTm9kZSogbm9kZSA9IGNvbGxlY3Rpb24tPml0ZW0oaSk7CiAgICAg
ICAgIGlmIChub2RlLT5pc1BsdWdpbkVsZW1lbnQoKSkgewogICAgICAgICAgICAgSFRNTFBsdWdJ
bkVsZW1lbnQqIHBsdWdJbkVsZW1lbnQgPSB0b0hUTUxQbHVnSW5FbGVtZW50KG5vZGUpOwotICAg
ICAgICAgICAgaWYgKHBsdWdJbkVsZW1lbnQtPmlzUGx1Z0luSW1hZ2VFbGVtZW50KCkgJiYgcGx1
Z0luRWxlbWVudC0+ZGlzcGxheVN0YXRlKCkgPD0gSFRNTFBsdWdJbkVsZW1lbnQ6OkRpc3BsYXlp
bmdTbmFwc2hvdCkgeworICAgICAgICAgICAgaWYgKHBsdWdJbkVsZW1lbnQtPmlzUGx1Z0luSW1h
Z2VFbGVtZW50KCkpIHsKICAgICAgICAgICAgICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KiBw
bHVnSW5JbWFnZUVsZW1lbnQgPSB0b0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQobm9kZSk7CiAgICAg
ICAgICAgICAgICAgY29uc3QgS1VSTCYgbG9hZGVkVVJMID0gcGx1Z0luSW1hZ2VFbGVtZW50LT5s
b2FkZWRVcmwoKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgb3RoZXJNaW1lVHlwZSA9IHBsdWdJ
bkltYWdlRWxlbWVudC0+bG9hZGVkTWltZVR5cGUoKTsKQEAgLTQ0NSw3ICs0NTYsNyBAQCB2b2lk
IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlc3RhcnRTaW1pbGFyUGx1Z0lucygpCiAKICAgICBT
dHJpbmcgcGx1Z0luT3JpZ2luID0gbV9sb2FkZWRVcmwuaG9zdCgpOwogICAgIFN0cmluZyBtaW1l
VHlwZSA9IGxvYWRlZE1pbWVUeXBlKCk7Ci0gICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudExpc3Qg
cGx1Z2luc05lZWRpbmdSZXN0YXJ0OworICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnRMaXN0IHNp
bWlsYXJQbHVnaW5zOwogCiAgICAgaWYgKCFkb2N1bWVudCgpLT5wYWdlKCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTQ1NywxNyArNDY4LDIyIEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6
cmVzdGFydFNpbWlsYXJQbHVnSW5zKCkKIAogICAgICAgICAgICAgUmVmUHRyPE5vZGVMaXN0PiBw
bHVnaW5zID0gZnJhbWUtPmRvY3VtZW50KCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKGVtYmVkVGFn
LmxvY2FsTmFtZSgpKTsKICAgICAgICAgICAgIGlmIChwbHVnaW5zKQotICAgICAgICAgICAgICAg
IGFkZFBsdWdJbnNGcm9tTm9kZUxpc3RNYXRjaGluZ1BsdWdJbk9yaWdpbihwbHVnaW5zTmVlZGlu
Z1Jlc3RhcnQsIHBsdWdpbnMsIHBsdWdJbk9yaWdpbiwgbWltZVR5cGUpOworICAgICAgICAgICAg
ICAgIGFkZFBsdWdJbnNGcm9tTm9kZUxpc3RNYXRjaGluZ1BsdWdJbk9yaWdpbihzaW1pbGFyUGx1
Z2lucywgcGx1Z2lucywgcGx1Z0luT3JpZ2luLCBtaW1lVHlwZSk7CiAKICAgICAgICAgICAgIHBs
dWdpbnMgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudHNCeVRhZ05hbWUob2JqZWN0VGFn
LmxvY2FsTmFtZSgpKTsKICAgICAgICAgICAgIGlmIChwbHVnaW5zKQotICAgICAgICAgICAgICAg
IGFkZFBsdWdJbnNGcm9tTm9kZUxpc3RNYXRjaGluZ1BsdWdJbk9yaWdpbihwbHVnaW5zTmVlZGlu
Z1Jlc3RhcnQsIHBsdWdpbnMsIHBsdWdJbk9yaWdpbiwgbWltZVR5cGUpOworICAgICAgICAgICAg
ICAgIGFkZFBsdWdJbnNGcm9tTm9kZUxpc3RNYXRjaGluZ1BsdWdJbk9yaWdpbihzaW1pbGFyUGx1
Z2lucywgcGx1Z2lucywgcGx1Z0luT3JpZ2luLCBtaW1lVHlwZSk7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMCwgbGVuZ3RoID0gcGx1Z2luc05lZWRpbmdSZXN0YXJ0
LnNpemUoKTsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHBsdWdpbnNOZWVkaW5nUmVzdGFy
dFtpXS0+c2V0RGlzcGxheVN0YXRlKFBsYXlpbmcpOwotICAgICAgICBwbHVnaW5zTmVlZGluZ1Jl
c3RhcnRbaV0tPnJlc3RhcnRTbmFwc2hvdHRlZFBsdWdJbigpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwLCBsZW5ndGggPSBzaW1pbGFyUGx1Z2lucy5zaXplKCk7IGkgPCBsZW5ndGg7IGkrKykgewor
ICAgICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KiBwbHVnaW5Ub1Jlc3RhcnQgPSBzaW1pbGFy
UGx1Z2luc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKHBsdWdpblRvUmVzdGFydC0+ZGlzcGxheVN0
YXRlKCkgPD0gSFRNTFBsdWdJbkVsZW1lbnQ6OkRpc3BsYXlpbmdTbmFwc2hvdCkgeworICAgICAg
ICAgICAgTE9HKFBsdWdpbnMsICIlcCBQbHVnLWluIGxvb2tzIHNpbWlsYXIgdG8gYSByZXN0YXJ0
ZWQgcGx1Zy1pbi4gUmVzdGFydC4iLCBwbHVnaW5Ub1Jlc3RhcnQpOworICAgICAgICAgICAgcGx1
Z2luVG9SZXN0YXJ0LT5zZXREaXNwbGF5U3RhdGUoUGxheWluZyk7CisgICAgICAgICAgICBwbHVn
aW5Ub1Jlc3RhcnQtPnJlc3RhcnRTbmFwc2hvdHRlZFBsdWdJbigpOworICAgICAgICB9CisgICAg
ICAgIHBsdWdpblRvUmVzdGFydC0+bV9ibGVzc2VkUGx1Z2luID0gdHJ1ZTsKICAgICB9CiB9CiAK
QEAgLTQ4MCw2ICs0OTYsNyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnVzZXJEaWRD
bGlja1NuYXBzaG90KFBhc3NSZWZQdHI8TW91c2VFdmVudD4gZXZlbnQsCiAgICAgaWYgKGRvY3Vt
ZW50KCktPnBhZ2UoKSAmJiAhU2NoZW1lUmVnaXN0cnk6OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNM
b2NhbChkb2N1bWVudCgpLT5wYWdlKCktPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5iYXNlVVJM
KCkucHJvdG9jb2woKSkgJiYgZG9jdW1lbnQoKS0+cGFnZSgpLT5zZXR0aW5ncygpLT5hdXRvc3Rh
cnRPcmlnaW5QbHVnSW5TbmFwc2hvdHRpbmdFbmFibGVkKCkpCiAgICAgICAgIGRvY3VtZW50KCkt
PnBhZ2UoKS0+cGx1Z0luQ2xpZW50KCktPmRpZFN0YXJ0RnJvbU9yaWdpbihkb2N1bWVudCgpLT5w
YWdlKCktPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgpLCBwbHVnSW5P
cmlnaW4sIGxvYWRlZE1pbWVUeXBlKCkpOwogCisgICAgTE9HKFBsdWdpbnMsICIlcCBVc2VyIGNs
aWNrZWQgb24gc25hcHNob3R0ZWQgcGx1Zy1pbi4gUmVzdGFydC4iLCB0aGlzKTsKICAgICByZXN0
YXJ0U25hcHNob3R0ZWRQbHVnSW4oKTsKICAgICByZXN0YXJ0U2ltaWxhclBsdWdJbnMoKTsKIH0K
QEAgLTQ5MCw2ICs1MDcsNyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnNldElzUHJp
bWFyeVNuYXBzaG90dGVkUGx1Z0luKGJvb2wgaXNQcmltYXJ5U25hcHNobwogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAoaXNQcmltYXJ5U25hcHNob3R0ZWRQbHVnSW4pIHsKKyAgICAgICAgTE9H
KFBsdWdpbnMsICIlcCBQbHVnLWluIHdhcyBkZXRlY3RlZCBhcyB0aGUgcHJpbWFyeSBlbGVtZW50
IGluIHRoZSBwYWdlLiBSZXN0YXJ0LiIsIHRoaXMpOwogICAgICAgICByZXN0YXJ0U25hcHNob3R0
ZWRQbHVnSW4oKTsKICAgICAgICAgcmVzdGFydFNpbWlsYXJQbHVnSW5zKCk7CiAgICAgfQpAQCAt
NTIwLDYgKzUzOCwyNyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnNpbXVsYXRlZE1v
dXNlQ2xpY2tUaW1lckZpcmVkKERlZmVycmFibGVPbmVTaG90VGltZQogICAgIG1fcGVuZGluZ0Ns
aWNrRXZlbnRGcm9tU25hcHNob3QgPSBudWxscHRyOwogfQogCit2b2lkIEhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6OmNoZWNrU2l6ZUNoYW5nZUZvclNuYXBzaG90dGluZygpCit7CisgICAgaWYgKCFt
X25lZWRzQ2hlY2tGb3JTaXplQ2hhbmdlIHx8IG1fcmVhc29uRm9yU25hcHNob3R0aW5nICE9IE5v
U25hcHNob3RUaW55U2l6ZSB8fCBtX2JsZXNzZWRQbHVnaW4pCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fbmVlZHNDaGVja0ZvclNpemVDaGFuZ2UgPSBmYWxzZTsKKyAgICBMYXlvdXRSZWN0IGNv
bnRlbnRCb3hSZWN0ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPmNvbnRlbnRCb3hSZWN0KCk7
CisgICAgaW50IGNvbnRlbnRXaWR0aCA9IGNvbnRlbnRCb3hSZWN0LndpZHRoKCk7CisgICAgaW50
IGNvbnRlbnRIZWlnaHQgPSBjb250ZW50Qm94UmVjdC5oZWlnaHQoKTsKKworICAgIGlmIChjb250
ZW50V2lkdGggPD0gc2l6aW5nVGlueURpbWVuc2lvblRocmVzaG9sZCB8fCBjb250ZW50SGVpZ2h0
IDw9IHNpemluZ1RpbnlEaW1lbnNpb25UaHJlc2hvbGQpCisgICAgICAgIHJldHVybjsKKworICAg
IExPRyhQbHVnaW5zLCAiJXAgUGx1Zy1pbiBvcmlnaW5hbGx5IGF2b2lkZWQgc25hcHNob3R0aW5n
IGJlY2F1c2UgaXQgd2FzIHNpemVkICVkeCVkLiBOb3cgaXQgaXMgJWR4JWQuIFRlbGwgaXQgdG8g
c25hcHNob3QuXG4iLCB0aGlzLCBtX3NpemVXaGVuU25hcHNob3R0ZWQud2lkdGgoKSwgbV9zaXpl
V2hlblNuYXBzaG90dGVkLmhlaWdodCgpLCBjb250ZW50V2lkdGgsIGNvbnRlbnRIZWlnaHQpOwor
ICAgIHNldERpc3BsYXlTdGF0ZShXYWl0aW5nRm9yU25hcHNob3QpOworICAgIG1fcmVhc29uRm9y
U25hcHNob3R0aW5nID0gU25hcHNob3RSZXNpemVkOworICAgIFdpZGdldCogd2lkZ2V0ID0gcGx1
Z2luV2lkZ2V0KCk7CisgICAgaWYgKHdpZGdldCAmJiB3aWRnZXQtPmlzUGx1Z2luVmlld0Jhc2Uo
KSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8UGx1Z2luVmlld0Jhc2UqPih3aWRnZXQpLT5iZWdpblNu
YXBzaG90dGluZ1J1bm5pbmdQbHVnaW4oKTsKK30KKwogdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50OjpzdWJmcmFtZUxvYWRlcldpbGxDcmVhdGVQbHVnSW4oY29uc3QgS1VSTCYgdXJsKQogewog
ICAgIExPRyhQbHVnaW5zLCAiJXAgUGx1Zy1pbiBVUkw6ICVzIiwgdGhpcywgbV91cmwudXRmOCgp
LmRhdGEoKSk7CkBAIC01MjcsMTggKzU2NiwyNyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1l
bnQ6OnN1YmZyYW1lTG9hZGVyV2lsbENyZWF0ZVBsdWdJbihjb25zdCBLVVJMJiB1cmwpCiAKICAg
ICBtX2xvYWRlZFVybCA9IHVybDsKIAotICAgIGlmICghZG9jdW1lbnQoKS0+cGFnZSgpCi0gICAg
ICAgIHx8ICFkb2N1bWVudCgpLT5wYWdlKCktPnNldHRpbmdzKCktPnBsdWdJblNuYXBzaG90dGlu
Z0VuYWJsZWQoKSkKKyAgICBpZiAoIWRvY3VtZW50KCktPnBhZ2UoKSB8fCAhZG9jdW1lbnQoKS0+
cGFnZSgpLT5zZXR0aW5ncygpLT5wbHVnSW5TbmFwc2hvdHRpbmdFbmFibGVkKCkpIHsKKyAgICAg
ICAgbV9yZWFzb25Gb3JTbmFwc2hvdHRpbmcgPSBOb1NuYXBzaG90RGlzYWJsZWQ7CiAgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9ibGVzc2VkUGx1Z2luKSB7CisgICAgICAgIExP
RyhQbHVnaW5zLCAiJXAgUGx1Zy1pbiBpcyBibGVzc2VkLCBhbGxvdyBpdCB0byBzdGFydCIsIHRo
aXMpOworICAgICAgICBtX3JlYXNvbkZvclNuYXBzaG90dGluZyA9IE5vU25hcHNob3RCbGVzc2Vk
OworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgaWYgKGRpc3BsYXlTdGF0ZSgpID09IFJl
c3RhcnRpbmcpIHsKLSAgICAgICAgc2V0RGlzcGxheVN0YXRlKFBsYXlpbmcpOwogICAgICAgICBM
T0coUGx1Z2lucywgIiVwIFBsdWctaW4gaXMgZXhwbGljaXRseSByZXN0YXJ0aW5nIiwgdGhpcyk7
CisgICAgICAgIG1fcmVhc29uRm9yU25hcHNob3R0aW5nID0gTm9TbmFwc2hvdFJlc3RhcnRlZDsK
KyAgICAgICAgc2V0RGlzcGxheVN0YXRlKFBsYXlpbmcpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgaWYgKGRpc3BsYXlTdGF0ZSgpID09IFJlc3RhcnRpbmdXaXRoUGVuZGluZ01vdXNl
Q2xpY2spIHsKICAgICAgICAgTE9HKFBsdWdpbnMsICIlcCBQbHVnLWluIGlzIGV4cGxpY2l0bHkg
cmVzdGFydGluZyBidXQgYWxzbyB3YWl0aW5nIGZvciBhIGNsaWNrIiwgdGhpcyk7CisgICAgICAg
IG1fcmVhc29uRm9yU25hcHNob3R0aW5nID0gTm9TbmFwc2hvdFJlc3RhcnRlZDsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtNTQ2LDE2ICs1OTQsMjEgQEAgdm9pZCBIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50OjpzdWJmcmFtZUxvYWRlcldpbGxDcmVhdGVQbHVnSW4oY29uc3QgS1VSTCYgdXJs
KQogCiAgICAgaWYgKGRvY3VtZW50KCktPmlzUGx1Z2luRG9jdW1lbnQoKSAmJiBpbk1haW5GcmFt
ZSkgewogICAgICAgICBMT0coUGx1Z2lucywgIiVwIFBsdWctaW4gZG9jdW1lbnQgaW4gbWFpbiBm
cmFtZSIsIHRoaXMpOworICAgICAgICBtX3JlYXNvbkZvclNuYXBzaG90dGluZyA9IE5vU25hcHNo
b3RQbHVnaW5Eb2N1bWVudDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChTY3Jp
cHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkgewogICAgICAgICBMT0coUGx1
Z2lucywgIiVwIFNjcmlwdCBpcyBjdXJyZW50bHkgcHJvY2Vzc2luZyB1c2VyIGdlc3R1cmUsIHNl
dCB0byBwbGF5IiwgdGhpcyk7CisgICAgICAgIG1fcmVhc29uRm9yU25hcHNob3R0aW5nID0gTm9T
bmFwc2hvdFVzZXJHZXN0dXJlOworICAgICAgICBtX2JsZXNzZWRQbHVnaW4gPSB0cnVlOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG1fY3JlYXRlZER1cmluZ1VzZXJHZXN0dXJl
KSB7CiAgICAgICAgIExPRyhQbHVnaW5zLCAiJXAgUGx1Zy1pbiB3YXMgY3JlYXRlZCB3aGVuIHBy
b2Nlc3NpbmcgdXNlciBnZXN0dXJlLCBzZXQgdG8gcGxheSIsIHRoaXMpOworICAgICAgICBtX3Jl
YXNvbkZvclNuYXBzaG90dGluZyA9IE5vU25hcHNob3RVc2VyR2VzdHVyZTsKKyAgICAgICAgbV9i
bGVzc2VkUGx1Z2luID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTY0LDE1
ICs2MTcsMjUgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpzdWJmcmFtZUxvYWRlcldp
bGxDcmVhdGVQbHVnSW4oY29uc3QgS1VSTCYgdXJsKQogICAgICAgICBsYXN0S25vd25Vc2VyR2Vz
dHVyZVRpbWVzdGFtcCA9IHN0ZDo6bWF4KGxhc3RLbm93blVzZXJHZXN0dXJlVGltZXN0YW1wLCBk
b2N1bWVudCgpLT5wYWdlKCktPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5sYXN0SGFuZGxlZFVz
ZXJHZXN0dXJlVGltZXN0YW1wKCkpOwogICAgIGlmIChjdXJyZW50VGltZSgpIC0gbGFzdEtub3du
VXNlckdlc3R1cmVUaW1lc3RhbXAgPCBhdXRvc3RhcnRTb29uQWZ0ZXJVc2VyR2VzdHVyZVRocmVz
aG9sZCkgewogICAgICAgICBMT0coUGx1Z2lucywgIiVwIFBsdWctaW4gd2FzIGNyZWF0ZWQgc2hv
cnRseSBhZnRlciBhIHVzZXIgZ2VzdHVyZSwgc2V0IHRvIHBsYXkiLCB0aGlzKTsKKyAgICAgICAg
bV9yZWFzb25Gb3JTbmFwc2hvdHRpbmcgPSBOb1NuYXBzaG90VXNlckdlc3R1cmU7CisgICAgICAg
IG1fYmxlc3NlZFBsdWdpbiA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZiAoZG9jdW1lbnQoKS0+cGFnZSgpLT5zZXR0aW5ncygpLT5zbmFwc2hvdEFsbFBsdWdJbnMoKSkg
ewogICAgICAgICBMT0coUGx1Z2lucywgIiVwIFBsdWctaW4gZm9yY2VkIHRvIHNuYXBzaG90IGJ5
IHVzZXIgcHJlZmVyZW5jZSIsIHRoaXMpOworICAgICAgICBtX3JlYXNvbkZvclNuYXBzaG90dGlu
ZyA9IFNuYXBzaG90Rm9yY2VkOwogICAgICAgICBzZXREaXNwbGF5U3RhdGUoV2FpdGluZ0ZvclNu
YXBzaG90KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmIChkb2N1bWVudCgpLT5w
YWdlKCktPnNldHRpbmdzKCktPmF1dG9zdGFydE9yaWdpblBsdWdJblNuYXBzaG90dGluZ0VuYWJs
ZWQoKSAmJiBkb2N1bWVudCgpLT5wYWdlKCktPnBsdWdJbkNsaWVudCgpLT5zaG91bGRBdXRvU3Rh
cnRGcm9tT3JpZ2luKGRvY3VtZW50KCktPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCkt
PmJhc2VVUkwoKS5ob3N0KCksIHVybC5ob3N0KCksIGxvYWRlZE1pbWVUeXBlKCkpKSB7CisgICAg
ICAgIExPRyhQbHVnaW5zLCAiJXAgUGx1Zy1pbiBmcm9tICglcywgJXMpIGlzIG1hcmtlZCB0byBh
dXRvLXN0YXJ0LCBzZXQgdG8gcGxheSIsIHRoaXMsIGRvY3VtZW50KCktPnBhZ2UoKS0+bWFpbkZy
YW1lKCktPmRvY3VtZW50KCktPmJhc2VVUkwoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSwgdXJsLmhv
c3QoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgbV9yZWFzb25Gb3JTbmFwc2hvdHRpbmcgPSBO
b1NuYXBzaG90QXV0b3N0YXJ0OworICAgICAgICBtX2JsZXNzZWRQbHVnaW4gPSB0cnVlOworICAg
ICAgICByZXR1cm47CisgICAgfQorCiAgICAgUmVuZGVyQm94KiByZW5kZXJFbWJlZGRlZE9iamVj
dCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpOwogICAgIExlbmd0aCBzdHlsZVdpZHRoID0gcmVu
ZGVyRW1iZWRkZWRPYmplY3QtPnN0eWxlKCktPndpZHRoKCk7CiAgICAgTGVuZ3RoIHN0eWxlSGVp
Z2h0ID0gcmVuZGVyRW1iZWRkZWRPYmplY3QtPnN0eWxlKCktPmhlaWdodCgpOwpAQCAtNTg3LDM1
ICs2NTAsMzggQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpzdWJmcmFtZUxvYWRlcldp
bGxDcmVhdGVQbHVnSW4oY29uc3QgS1VSTCYgdXJsKQogICAgICAgICAmJiBzdHlsZUhlaWdodC5p
c1BlcmNlbnQoKSAmJiAoc3R5bGVIZWlnaHQucGVyY2VudCgpID09IDEwMCkKICAgICAgICAgJiYg
KHN0YXRpY19jYXN0PGZsb2F0Pihjb250ZW50QXJlYSkgLyB2aXNpYmxlQXJlYSA+IHNpemluZ0Z1
bGxQYWdlQXJlYVJhdGlvVGhyZXNob2xkKSkgewogICAgICAgICBMT0coUGx1Z2lucywgIiVwIFBs
dWctaW4gaXMgdG9wIGxldmVsIGZ1bGwgcGFnZSwgc2V0IHRvIHBsYXkiLCB0aGlzKTsKKyAgICAg
ICAgbV9yZWFzb25Gb3JTbmFwc2hvdHRpbmcgPSBOb1NuYXBzaG90VG9wTGV2ZWw7CisgICAgICAg
IG1fYmxlc3NlZFBsdWdpbiA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZiAoY29udGVudFdpZHRoIDw9IHNpemluZ1RpbnlEaW1lbnNpb25UaHJlc2hvbGQgfHwgY29udGVu
dEhlaWdodCA8PSBzaXppbmdUaW55RGltZW5zaW9uVGhyZXNob2xkKSB7CiAgICAgICAgIExPRyhQ
bHVnaW5zLCAiJXAgUGx1Zy1pbiBpcyB2ZXJ5IHNtYWxsICVkeCVkLCBzZXQgdG8gcGxheSIsIHRo
aXMsIGNvbnRlbnRXaWR0aCwgY29udGVudEhlaWdodCk7CisgICAgICAgIG1fc2l6ZVdoZW5TbmFw
c2hvdHRlZCA9IEludFNpemUoY29udGVudEJveFJlY3Qud2lkdGgoKS50b0ludCgpLCBjb250ZW50
Qm94UmVjdC5oZWlnaHQoKS50b0ludCgpKTsKKyAgICAgICAgbV9yZWFzb25Gb3JTbmFwc2hvdHRp
bmcgPSBOb1NuYXBzaG90VGlueVNpemU7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZiAoIWRvY3VtZW50KCktPnBhZ2UoKS0+cGx1Z0luQ2xpZW50KCkpIHsKKyAgICAgICAgTE9HKFBs
dWdpbnMsICIlcCBUaGVyZSBpcyBubyBwbHVnLWluIGNsaWVudC4gU2V0IHRvIHdhaXQgZm9yIHNu
YXBzaG90IiwgdGhpcyk7CisgICAgICAgIG1fcmVhc29uRm9yU25hcHNob3R0aW5nID0gU25hcHNo
b3ROb0NsaWVudDsKICAgICAgICAgc2V0RGlzcGxheVN0YXRlKFdhaXRpbmdGb3JTbmFwc2hvdCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoZG9jdW1lbnQoKS0+cGFnZSgpLT5z
ZXR0aW5ncygpLT5hdXRvc3RhcnRPcmlnaW5QbHVnSW5TbmFwc2hvdHRpbmdFbmFibGVkKCkgJiYg
ZG9jdW1lbnQoKS0+cGFnZSgpLT5wbHVnSW5DbGllbnQoKS0+c2hvdWxkQXV0b1N0YXJ0RnJvbU9y
aWdpbihkb2N1bWVudCgpLT5wYWdlKCktPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5iYXNlVVJM
KCkuaG9zdCgpLCB1cmwuaG9zdCgpLCBsb2FkZWRNaW1lVHlwZSgpKSkgewotICAgICAgICBMT0co
UGx1Z2lucywgIiVwIFBsdWctaW4gZnJvbSAoJXMsICVzKSBpcyBtYXJrZWQgdG8gYXV0by1zdGFy
dCwgc2V0IHRvIHBsYXkiLCB0aGlzLCBkb2N1bWVudCgpLT5wYWdlKCktPm1haW5GcmFtZSgpLT5k
b2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgpLnV0ZjgoKS5kYXRhKCksIHVybC5ob3N0KCkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBMT0coUGx1Z2lucywg
IiVwIFBsdWctaW4gZnJvbSAoJXMsICVzKSBpcyBub3QgYXV0by1zdGFydCwgc2l6ZWQgYXQgJWR4
JWQsIHNldCB0byB3YWl0IGZvciBzbmFwc2hvdCIsIHRoaXMsIGRvY3VtZW50KCktPnBhZ2UoKS0+
bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPmJhc2VVUkwoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSwg
dXJsLmhvc3QoKS51dGY4KCkuZGF0YSgpLCBjb250ZW50V2lkdGgsIGNvbnRlbnRIZWlnaHQpOwor
ICAgIG1fcmVhc29uRm9yU25hcHNob3R0aW5nID0gU25hcHNob3REZWZhdWx0OwogICAgIHNldERp
c3BsYXlTdGF0ZShXYWl0aW5nRm9yU25hcHNob3QpOwogfQogCiB2b2lkIEhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6OnN1YmZyYW1lTG9hZGVyRGlkQ3JlYXRlUGx1Z0luKGNvbnN0IFdpZGdldCogd2lk
Z2V0KQogewotICAgIGlmICghd2lkZ2V0LT5pc1BsdWdpblZpZXdCYXNlKCkKLSAgICAgICAgfHwg
IXN0YXRpY19jYXN0PGNvbnN0IFBsdWdpblZpZXdCYXNlKj4od2lkZ2V0KS0+c2hvdWxkQWx3YXlz
QXV0b1N0YXJ0KCkpCisgICAgaWYgKCF3aWRnZXQtPmlzUGx1Z2luVmlld0Jhc2UoKSB8fCAhc3Rh
dGljX2Nhc3Q8Y29uc3QgUGx1Z2luVmlld0Jhc2UqPih3aWRnZXQpLT5zaG91bGRBbHdheXNBdXRv
U3RhcnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTE9HKFBsdWdpbnMsICIlcCBQbHVnLWlu
IHNob3VsZCBhdXRvLXN0YXJ0LCBzZXQgdG8gcGxheSIsIHRoaXMpOworICAgIG1fYmxlc3NlZFBs
dWdpbiA9IHRydWU7CisgICAgbV9yZWFzb25Gb3JTbmFwc2hvdHRpbmcgPSBOb1NuYXBzaG90QXV0
b3N0YXJ0OwogICAgIHNldERpc3BsYXlTdGF0ZShQbGF5aW5nKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaAppbmRleCBiZGY4N2I5Li5kYzU0NGU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaApAQCAt
NzUsNyArNzUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROZWVkc1dpZGdldFVwZGF0ZShib29s
IG5lZWRzV2lkZ2V0VXBkYXRlKSB7IG1fbmVlZHNXaWRnZXRVcGRhdGUgPSBuZWVkc1dpZGdldFVw
ZGF0ZTsgfQogCiAgICAgdm9pZCB1c2VyRGlkQ2xpY2tTbmFwc2hvdChQYXNzUmVmUHRyPE1vdXNl
RXZlbnQ+LCBib29sIGZvcndhcmRFdmVudCk7Ci0gICAgdm9pZCB1cGRhdGVTbmFwc2hvdEluZm8o
KTsKKyAgICB2b2lkIGNoZWNrU25hcHNob3RTdGF0dXMoKTsKICAgICBJbWFnZSogc25hcHNob3RJ
bWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fc25hcHNob3RJbWFnZS5nZXQoKTsgfQogCiAgICAgLy8g
UGx1Zy1pbiBVUkwgbWlnaHQgbm90IGJlIHRoZSBzYW1lIGFzIHVybCgpIHdpdGggb3ZlcnJpZGlu
ZyBwYXJhbWV0ZXJzLgpAQCAtODUsNiArODUsMjcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SXNQ
cmltYXJ5U25hcHNob3R0ZWRQbHVnSW4oYm9vbCk7CiAgICAgYm9vbCBwYXJ0T2ZTbmFwc2hvdExh
YmVsKE5vZGUqKTsKIAorICAgIGJvb2wgbmVlZHNDaGVja0ZvclNpemVDaGFuZ2UoKSBjb25zdCB7
IHJldHVybiBtX25lZWRzQ2hlY2tGb3JTaXplQ2hhbmdlOyB9CisgICAgdm9pZCBzZXROZWVkc0No
ZWNrRm9yU2l6ZUNoYW5nZSgpIHsgbV9uZWVkc0NoZWNrRm9yU2l6ZUNoYW5nZSA9IHRydWU7IH0K
KyAgICB2b2lkIGNoZWNrU2l6ZUNoYW5nZUZvclNuYXBzaG90dGluZygpOworCisgICAgZW51bSBT
bmFwc2hvdFJlYXNvbiB7CisgICAgICAgIE5vU25hcHNob3RWYWx1ZSwKKyAgICAgICAgTm9TbmFw
c2hvdERpc2FibGVkLAorICAgICAgICBOb1NuYXBzaG90UGx1Z2luRG9jdW1lbnQsCisgICAgICAg
IE5vU25hcHNob3RUaW55U2l6ZSwKKyAgICAgICAgTm9TbmFwc2hvdEF1dG9zdGFydCwKKyAgICAg
ICAgTm9TbmFwc2hvdEJsZXNzZWQsCisgICAgICAgIE5vU25hcHNob3RSZXN0YXJ0ZWQsCisgICAg
ICAgIE5vU25hcHNob3RVc2VyR2VzdHVyZSwKKyAgICAgICAgTm9TbmFwc2hvdFRvcExldmVsLAor
ICAgICAgICBTbmFwc2hvdE5vQ2xpZW50LAorICAgICAgICBTbmFwc2hvdEZvcmNlZCwKKyAgICAg
ICAgU25hcHNob3RSZXNpemVkLAorICAgICAgICBTbmFwc2hvdERlZmF1bHQKKyAgICB9OworICAg
IFNuYXBzaG90UmVhc29uIHJlYXNvbkZvclNuYXBzaG90dGluZygpIGNvbnN0IHsgcmV0dXJuIG1f
cmVhc29uRm9yU25hcHNob3R0aW5nOyB9CisKIHByb3RlY3RlZDoKICAgICBIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiwgYm9vbCBj
cmVhdGVkQnlQYXJzZXIsIFByZWZlclBsdWdJbnNGb3JJbWFnZXNPcHRpb24pOwogCkBAIC0xNDcs
NiArMTY4LDEwIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fc25hcHNob3RMYWJl
bDsKICAgICBib29sIG1fY3JlYXRlZER1cmluZ1VzZXJHZXN0dXJlOwogICAgIGJvb2wgbV9yZXN0
YXJ0ZWRQbHVnaW47CisgICAgYm9vbCBtX2JsZXNzZWRQbHVnaW47CisgICAgYm9vbCBtX25lZWRz
Q2hlY2tGb3JTaXplQ2hhbmdlOworICAgIEludFNpemUgbV9zaXplV2hlblNuYXBzaG90dGVkOwor
ICAgIFNuYXBzaG90UmVhc29uIG1fcmVhc29uRm9yU25hcHNob3R0aW5nOwogfTsKIAogaW5saW5l
IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQqIHRvSFRNTFBsdWdJbkltYWdlRWxlbWVudChOb2RlKiBu
b2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDEyMzEyNTIuLjNlY2FkMjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTE0MjIsNyArMTQyMiw4IEBAIHZvaWQgRnJh
bWVWaWV3OjphZGRXaWRnZXRUb1VwZGF0ZShSZW5kZXJPYmplY3QqIG9iamVjdCkKICAgICBOb2Rl
KiBub2RlID0gb2JqZWN0LT5ub2RlKCk7CiAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUob2JqZWN0
VGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGVtYmVkVGFnKSkgewogICAgICAgICBIVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50KiBwbHVnaW5FbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KG5v
ZGUpOwotICAgICAgICBwbHVnaW5FbGVtZW50LT5zZXROZWVkc1dpZGdldFVwZGF0ZSh0cnVlKTsK
KyAgICAgICAgaWYgKCFwbHVnaW5FbGVtZW50LT5uZWVkc0NoZWNrRm9yU2l6ZUNoYW5nZSgpKQor
ICAgICAgICAgICAgcGx1Z2luRWxlbWVudC0+c2V0TmVlZHNXaWRnZXRVcGRhdGUodHJ1ZSk7CiAg
ICAgfQogCiAgICAgbV93aWRnZXRVcGRhdGVTZXQtPmFkZChvYmplY3QpOwpAQCAtMjU5NSw3ICsy
NTk2LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZVdpZGdldChSZW5kZXJPYmplY3QqIG9iamVj
dCkKICAgICAgICAgaWYgKG9iamVjdC0+aXNTbmFwc2hvdHRlZFBsdWdJbigpKSB7CiAgICAgICAg
ICAgICBpZiAob3duZXJFbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgb3duZXJFbGVt
ZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSkgewogICAgICAgICAgICAgICAgIEhUTUxQbHVnSW5J
bWFnZUVsZW1lbnQqIHBsdWdpbkVsZW1lbnQgPSB0b0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQob3du
ZXJFbGVtZW50KTsKLSAgICAgICAgICAgICAgICBwbHVnaW5FbGVtZW50LT51cGRhdGVTbmFwc2hv
dEluZm8oKTsKKyAgICAgICAgICAgICAgICBwbHVnaW5FbGVtZW50LT5jaGVja1NuYXBzaG90U3Rh
dHVzKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAg
LTI2MDQsNiArMjYwNSwxMCBAQCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlV2lkZ2V0KFJlbmRlck9i
amVjdCogb2JqZWN0KQogICAgICAgICAvLyB1cGRhdGVXaWRnZXQoUGx1Z2luQ3JlYXRpb25PcHRp
b24pIG9uIEhUTUxFbGVtZW50LgogICAgICAgICBpZiAob3duZXJFbGVtZW50LT5oYXNUYWdOYW1l
KG9iamVjdFRhZykgfHwgb3duZXJFbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBvd25l
ckVsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSkgewogICAgICAgICAgICAgSFRNTFBsdWdJ
bkltYWdlRWxlbWVudCogcGx1Z2luRWxlbWVudCA9IHRvSFRNTFBsdWdJbkltYWdlRWxlbWVudChv
d25lckVsZW1lbnQpOworICAgICAgICAgICAgaWYgKHBsdWdpbkVsZW1lbnQtPm5lZWRzQ2hlY2tG
b3JTaXplQ2hhbmdlKCkpIHsKKyAgICAgICAgICAgICAgICBwbHVnaW5FbGVtZW50LT5jaGVja1Nu
YXBzaG90U3RhdHVzKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKHBsdWdpbkVsZW1lbnQtPm5lZWRzV2lkZ2V0VXBkYXRlKCkpCiAgICAg
ICAgICAgICAgICAgcGx1Z2luRWxlbWVudC0+dXBkYXRlV2lkZ2V0KENyZWF0ZUFueVdpZGdldFR5
cGUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
blZpZXdCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXdCYXNlLmgKaW5k
ZXggYjYwZmE5Mi4uNmMzMmU3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5WaWV3QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlld0Jh
c2UuaApAQCAtNjQsNiArNjQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGNhblByb2Nl
c3NEcmFnKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRBbHdheXNBdXRvU3RhcnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
dm9pZCBiZWdpblNuYXBzaG90dGluZ1J1bm5pbmdQbHVnaW4oKSB7IH0KIAogICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRBbGxvd05hdmlnYXRpb25Gcm9tRHJhZ3MoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRk
ZWRPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2Jq
ZWN0LmNwcAppbmRleCBkMGQ0NTVhLi5kYzkzYTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKQEAgLTI5MywxMSArMjkzLDMwIEBA
IHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmxheW91dCgpCiAKICAgICB1cGRhdGVMYXllclRy
YW5zZm9ybSgpOwogCi0gICAgaWYgKCF3aWRnZXQoKSAmJiBmcmFtZVZpZXcoKSAmJiBjYW5IYXZl
V2lkZ2V0KCkpCisgICAgYm9vbCB3YXNNaXNzaW5nV2lkZ2V0ID0gZmFsc2U7CisgICAgaWYgKCF3
aWRnZXQoKSAmJiBmcmFtZVZpZXcoKSAmJiBjYW5IYXZlV2lkZ2V0KCkpIHsKKyAgICAgICAgd2Fz
TWlzc2luZ1dpZGdldCA9IHRydWU7CiAgICAgICAgIGZyYW1lVmlldygpLT5hZGRXaWRnZXRUb1Vw
ZGF0ZSh0aGlzKTsKKyAgICB9CiAKICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7CiAKKyAgICBM
YXlvdXRTaXplIG5ld1NpemUgPSBjb250ZW50Qm94UmVjdCgpLnNpemUoKTsKKworICAgIGlmICgh
d2FzTWlzc2luZ1dpZGdldCAmJiBuZXdTaXplLndpZHRoKCkgPj0gb2xkU2l6ZS53aWR0aCgpICYm
IG5ld1NpemUuaGVpZ2h0KCkgPj0gb2xkU2l6ZS5oZWlnaHQoKSkgeworICAgICAgICBFbGVtZW50
KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUoKSk7CisgICAgICAgIGlmIChlbGVtZW50ICYmIGVs
ZW1lbnQtPmlzUGx1Z2luRWxlbWVudCgpKSB7CisgICAgICAgICAgICBIVE1MUGx1Z0luRWxlbWVu
dCogcGx1Z0luRWxlbWVudCA9IHRvSFRNTFBsdWdJbkVsZW1lbnQoZWxlbWVudCk7CisgICAgICAg
ICAgICBpZiAocGx1Z0luRWxlbWVudC0+aXNQbHVnSW5JbWFnZUVsZW1lbnQoKSAmJiBwbHVnSW5F
bGVtZW50LT5kaXNwbGF5U3RhdGUoKSA+IEhUTUxQbHVnSW5FbGVtZW50OjpEaXNwbGF5aW5nU25h
cHNob3QpIHsKKyAgICAgICAgICAgICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KiBwbHVnSW5J
bWFnZUVsZW1lbnQgPSB0b0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQoZWxlbWVudCk7CisgICAgICAg
ICAgICAgICAgaWYgKHBsdWdJbkltYWdlRWxlbWVudC0+cmVhc29uRm9yU25hcHNob3R0aW5nKCkg
PT0gSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6Tm9TbmFwc2hvdFRpbnlTaXplICYmIGRvY3VtZW50
KCktPnZpZXcoKSkgeworICAgICAgICAgICAgICAgICAgICBwbHVnSW5JbWFnZUVsZW1lbnQtPnNl
dE5lZWRzQ2hlY2tGb3JTaXplQ2hhbmdlKCk7CisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50
KCktPnZpZXcoKS0+YWRkV2lkZ2V0VG9VcGRhdGUodGhpcyk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKCFjYW5IYXZlQ2hpbGRy
ZW4oKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMTIsNyArMzMxLDYgQEAgdm9pZCBSZW5kZXJF
bWJlZGRlZE9iamVjdDo6bGF5b3V0KCkKICAgICBpZiAoIWNoaWxkQm94KQogICAgICAgICByZXR1
cm47CiAgICAgCi0gICAgTGF5b3V0U2l6ZSBuZXdTaXplID0gY29udGVudEJveFJlY3QoKS5zaXpl
KCk7CiAgICAgaWYgKG5ld1NpemUgPT0gb2xkU2l6ZSAmJiAhY2hpbGRCb3gtPm5lZWRzTGF5b3V0
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA4NWMxZDVkLi42Njc5ODQ1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKworICAgICAgICBQbHVnaW5zIHRoYXQgcmVz
aXplIG1pZ2h0IG5lZWQgdG8gYmUgc25hcHNob3R0ZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDIxNTcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzEyNjk2MjU5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFsbG93IGEgcnVubmluZyBwbHVnaW4gdG8gYmUgc25hcHNob3R0ZWQuIEFsbCB0aGlzCisg
ICAgICAgIG1lYW5zIGlzIHRoYXQgd2Ugc3RhcnQgdGhlIHNuYXBzaG90IHRpbWVyIGFnYWluLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAo
V2ViS2l0OjpQbHVnaW5WaWV3OjpiZWdpblNuYXBzaG90dGluZ1J1bm5pbmdQbHVnaW4pOiBSZXN0
YXJ0CisgICAgICAgICAgICB0aGUgdGltZXIuCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblZpZXcuaDogVmlydHVhbCBtZXRob2QgZGVjbGFyYXRpb24uCisKIDIwMTMtMDQtMTEg
IEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBJbXBsZW1l
bnQgbW9yZSBsb2dpYyBpbiBTdG9yYWdlQXJlYU1hcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IGY2ZWUzYmYuLmM4YzExMGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAK
QEAgLTE2MzksNiArMTYzOSwxMSBAQCB2b2lkIFBsdWdpblZpZXc6OnBsdWdpblNuYXBzaG90VGlt
ZXJGaXJlZChEZWZlcnJhYmxlT25lU2hvdFRpbWVyPFBsdWdpblZpZXc+KikKICAgICBtX3BsdWdp
bkVsZW1lbnQtPnNldERpc3BsYXlTdGF0ZShIVE1MUGx1Z0luRWxlbWVudDo6RGlzcGxheWluZ1Nu
YXBzaG90KTsKIH0KIAordm9pZCBQbHVnaW5WaWV3OjpiZWdpblNuYXBzaG90dGluZ1J1bm5pbmdQ
bHVnaW4oKQoreworICAgIG1fcGx1Z2luU25hcHNob3RUaW1lci5yZXN0YXJ0KCk7Cit9CisKIGJv
b2wgUGx1Z2luVmlldzo6c2hvdWxkQWx3YXlzQXV0b1N0YXJ0KCkgY29uc3QKIHsKICAgICBpZiAo
IW1fcGx1Z2luKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5W
aWV3LmgKaW5kZXggNmJkMjY0Ni4uYzY4NDFiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oCkBAIC0xNDgsNiArMTQ4LDcgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKTsKICAg
ICB2aXJ0dWFsIGJvb2wgd2FudHNXaGVlbEV2ZW50cygpOwogICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRBbHdheXNBdXRvU3RhcnQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5TbmFwc2hvdHRpbmdSdW5uaW5nUGx1Z2luKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29s
IHNob3VsZEFsbG93TmF2aWdhdGlvbkZyb21EcmFncygpIGNvbnN0IE9WRVJSSURFOwogCiAgICAg
Ly8gV2ViQ29yZTo6V2lkZ2V0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198195</attachid>
            <date>2013-04-15 15:56:46 -0700</date>
            <delta_ts>2013-04-15 17:18:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>resizer.patch</filename>
            <type>text/plain</type>
            <size>29306</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">Y29tbWl0IDMwMTNkMzJiN2E4YWVkNDNlNDA5MWUyOGE3M2U2MzMwNGIxMDdlOWUKQXV0aG9yOiBE
ZWFuIEphY2tzb24gPGRpbm9AYXBwbGUuY29tPgpEYXRlOiAgIFR1ZSBBcHIgMTYgMDg6NDk6MzMg
MjAxMyArMTAwMAoKICAgIFBsdWdpbnMgdGhhdCByZXNpemUgbWlnaHQgbmVlZCB0byBiZSBzbmFw
c2hvdHRlZC4KICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDIx
NTcKICAgIDxyZGFyOi8vcHJvYmxlbS8xMjY5NjI1OT4KICAgIAogICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCiAgICAKICAgIFNvdXJjZS9XZWJDb3JlOgogICAgCiAgICBBIHBsdWdpbiBj
b3VsZCBhdm9pZCBzbmFwc2hvdHRpbmcgaWYgaXQgc3RhcnRlZCB2ZXJ5CiAgICBzbWFsbCAoYmVs
b3cgdGhlIHRocmVzaG9sZCB3aGVyZSB3ZSBhdXRvc3RhcnQpLCBhbmQgdGhlbgogICAgcmVzaXpl
ZCB0byBiZSBsYXJnZSAoYWJvdmUgdGhlIHRocmVzaG9sZCkuIERldGVjdCB0aGlzCiAgICBjYXNl
IGFuZCB0ZWxsIHRoZSBwbHVnaW4gdG8gc25hcHNob3QuCiAgICAKICAgIFRoZXJlIHVuZm9ydHVu
YXRlbHkgaXMgYSBiaXQgb2Ygc3RhdGUgdG8gdHJhY2sgd2hlbiBkb2luZwogICAgdGhpcy4gV2Ug
aGF2ZSB0byBzdGFydCB0aGUgc25hcHNob3R0aW5nIGluIGEgcG9zdC1sYXlvdXQKICAgIHRhc2ss
IHNvIHdlIGNhcnJ5IGEgZmxhZyB0byBzYXkgd2UncmUgY2hlY2tpbmcgc2l6ZSBidXQKICAgIG5v
dCB3YW50aW5nIHRoZSBwbHVnaW4gdG8gdXBkYXRlICh3aGljaCB3b3VsZCByZXN0YXJ0IGl0KS4K
ICAgIFdlIGFsc28gbWlnaHQgYmUgYSBwbHVnaW4gdGhhdCB3b3VsZCBoYXZlIGFscmVhZHkgcmVz
dGFydGVkCiAgICBkdWUgdG8gYSBzaW1pbGFyIHBsdWdpbiBiZWluZyBjbGlja2VkIG9yIGRldGVj
dGVkIGFzIGRvbWluYW50LgogICAgU28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVtYmVyIHZh
cmlhYmxlIHRoYXQgdHJhY2tzIHdoYXQKICAgIGRlY2lzaW9uIGhhcyBiZWVuIG1hZGUgb24gc25h
cHNob3R0aW5nLgogICAgCiAgICBJIGFsc28gYWRkZWQgc29tZSBtb3JlIGxvZ2dpbmcgdG8gYmUg
bW9yZSBjbGVhciBhYm91dCB3aGF0IGlzCiAgICBoYXBwZW5pbmcgdG8gcGx1Z2lucyBnb2luZyB0
aHJvdWdoIHRoZSBzbmFwc2hvdCBwcm9jZXNzLCBhbmQKICAgIGNoYW5nZWQgdGhlIG9yZGVyIG9m
IHRoZSB0ZXN0cyBpbiB0aGUgYWxnb3JpdGhtIHNvIHRoYXQgZG9tYWluCiAgICBkZXRlY3Rpb24g
Y29tZXMgYmVmb3JlIGV4YW1pbmluZyB0aGUgc2l6ZS4KICAgIAogICAgKiBodG1sL0hUTUxQbHVn
SW5JbWFnZUVsZW1lbnQuY3BwOgogICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6
OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQpOiBJbml0aWFsaXNlCiAgICAgICAgdGhlIHR3byBuZXcg
bWVtYmVyIHZhcmlhYmxlcy4KICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojpz
ZXREaXNwbGF5U3RhdGUpOiBNYXJrIGEgcmVzdGFydGVkCiAgICAgICAgcGx1Z2luIGFzIE5ldmVy
U25hcHNob3QuIFRoaXMgbWVhbnMgdGhhdCBpZiBpdCBsYXRlciByZXNpemVzIGFib3ZlIHRoZQog
ICAgICAgIHRocmVzaG9sZCwgaXQgd29uJ3QgdHJpZ2dlciB0aGUgc25hcHNob3QgZGV0ZWN0aW9u
LgogICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmNoZWNrU25hcHNob3RTdGF0
dXMpOiBSZW5hbWVkIGZyb20KICAgICAgICB1cGRhdGVTbmFwc2hvdEluZm8uIFRoaXMgbm93IHVw
ZGF0ZXMgdGhlIHNuYXBzaG90LCBidXQgYWxzbyBydW5zCiAgICAgICAgdGhlIGNoZWNrIGZvciBz
aXplIGNoYW5nZXMuCiAgICAoV2ViQ29yZTo6YWRkUGx1Z0luc0Zyb21Ob2RlTGlzdE1hdGNoaW5n
UGx1Z0luT3JpZ2luKTogR2F0aGVyIGFsbCBwbHVnaW5zCiAgICAgICAgdGhhdCBsb29rIGxpa2Ug
YSByZXN0YXJ0aW5nIHBsdWdpbiwgbm90IGp1c3QgdGhvc2Ugc25hcHNob3R0ZWQuIFRoYXQKICAg
ICAgICB3YXkgdGhleSBjYW4gYWxsIGJlIG1hcmtlZCBhcyBOZXZlclNuYXBzaG90LgogICAgKFdl
YkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlc3RhcnRTaW1pbGFyUGx1Z0lucyk6IEJs
ZXNzIGV2ZXJ5CiAgICAgICAgcGx1Z2luIHRoYXQgbG9va3Mgc2ltaWxhciwgd2hldGhlciBvciBu
b3QgaXQgaXMgc25hcHNob3R0ZWQuCiAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVu
dDo6dXNlckRpZENsaWNrU25hcHNob3QpOiBNb3JlIGxvZ2dpbmcuCiAgICAoV2ViQ29yZTo6SFRN
TFBsdWdJbkltYWdlRWxlbWVudDo6c2V0SXNQcmltYXJ5U25hcHNob3R0ZWRQbHVnSW4pOiBEaXR0
by4KICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpjaGVja1NpemVDaGFuZ2VG
b3JTbmFwc2hvdHRpbmcpOiBOZXcKICAgICAgICBtZXRob2QuIElmIHRoZSBwbHVnaW4gd2FzIGJl
bG93IHRoZSB0aHJlc2hvbGQgYW5kIGlzIG5vdyBhYm92ZSBpdCwKICAgICAgICBiZWdpbiB0aGUg
c25hcHNob3R0aW5nIHByb2Nlc3MuCiAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVu
dDo6c3ViZnJhbWVMb2FkZXJXaWxsQ3JlYXRlUGx1Z0luKTogUGx1Z2lucwogICAgICAgIHRoYXQg
d2VyZSBtYXJrZWQgYXMgTmV2ZXJTbmFwc2hvdCBzaG91bGQgc3RhcnQgaW1tZWRpYXRlbHkuIE1v
dmUgdGhlIG9yaWdpbgogICAgICAgIHRlc3QgZWFybGllciBpbiB0aGUgbWV0aG9kLiBJZiBhIHBs
dWdpbiBhdm9pZGVkIHNuYXBzaG90dGluZyBkdWUgdG8gc2l6ZSwKICAgICAgICByZW1lbWJlciB0
aGUgc2l6ZS4KICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpzdWJmcmFtZUxv
YWRlckRpZENyZWF0ZVBsdWdJbik6IE1hcmsgdGhlCiAgICAgICAgcGx1Z2luIGFzIE5ldmVyU25h
cHNob3QuCiAgICAKICAgICogaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmg6CiAgICAoSFRN
TFBsdWdJbkltYWdlRWxlbWVudCk6IEZvdXIgbmV3IG1lbWJlciB2YXJpYWJsZXM6CiAgICAgICAg
LSB0aGUgZGVjaXNpb24gd2UgbWFkZSByZWdhcmRpbmcgc25hcHNob3R0aW5nIChvciBub3QpLCB1
c2VzIHRoZSBTbmFwc2hvdERlY2lzaW9uIGVudW0KICAgICAgICAtIHRoZSBzaXplIHdoZW4gaXQg
YXZvaWRlZCBzbmFwc2hvdHRpbmcKICAgICAgICAtIGEgZmxhZyB0byBpbmRpY2F0ZSB0aGUgcG9z
dCBsYXlvdXQgdXBkYXRlIHdhcyB0cmlnZ2VyZWQgZHVlIHRvCiAgICAgICAgICBhIHNpemUgY2hh
bmdlCiAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6bmVlZHNDaGVja0ZvclNp
emVDaGFuZ2UpOiBOZXcgbWV0aG9kLgogICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1l
bnQ6OnNldE5lZWRzQ2hlY2tGb3JTaXplQ2hhbmdlKTogTmV3IG1ldGhvZC4KICAgIChXZWJDb3Jl
OjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpzbmFwc2hvdERlY2lzaW9uKTogUmV0dXJuIHRoZSBk
ZWNpc2lvbgogICAgICAgIHJlZ2FyZGluZyBzbmFwc2hvdHRpbmcgb3Igbm90IHNuYXBzaG90dGlu
Zy4KICAgIAogICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CiAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
OjphZGRXaWRnZXRUb1VwZGF0ZSk6IEd1YXJkIHVwZGF0aW5nIHRoZSB3aWRnZXQuIFdlIGRvbid0
CiAgICAgICAgd2FudCB0byBkbyBpdCB3aGVuIHdlJ3JlIGNoZWNraW5nIGZvciBhIHNpemUgY2hh
bmdlIGluIHRoZSBwbHVnaW4uCiAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVXaWRnZXQp
OiBDYWxsIG5ldyBuYW1lLgogICAgCiAgICAqIHBsdWdpbnMvUGx1Z2luVmlld0Jhc2UuaDoKICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3QmFzZTo6YmVnaW5TbmFwc2hvdHRpbmdSdW5uaW5nUGx1Z2lu
KTogRW1wdHkgdmlydHVhbAogICAgICAgIG1ldGhvZCB0byBzbmFwc2hvdCBhIHJ1bm5pbmcgcGx1
Z2luLgogICAgCiAgICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHA6CiAgICAo
V2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OmxheW91dCk6IElmIHRoZSBwbHVnaW4gaGFz
IGluY3JlYXNlZCBpbgogICAgICAgIHNpemUgYWRkIGl0IHRvIHRoZSBwb3N0IGxheW91dCBsaXN0
IHNvIHRoYXQgaXQgd2lsbCBiZSBjaGVja2VkLgogICAgCiAgICBTb3VyY2UvV2ViS2l0MjoKICAg
IAogICAgQWxsb3cgYSBydW5uaW5nIHBsdWdpbiB0byBiZSBzbmFwc2hvdHRlZC4gQWxsIHRoaXMK
ICAgIG1lYW5zIGlzIHRoYXQgd2Ugc3RhcnQgdGhlIHNuYXBzaG90IHRpbWVyIGFnYWluLgogICAg
CiAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKICAgIChXZWJLaXQ6OlBs
dWdpblZpZXc6OmJlZ2luU25hcHNob3R0aW5nUnVubmluZ1BsdWdpbik6IFJlc3RhcnQKICAgICAg
ICB0aGUgdGltZXIuCiAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3Lmg6IFZpcnR1
YWwgbWV0aG9kIGRlY2xhcmF0aW9uLgoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxY2NkNWI3Li42ZjkzYjEwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsODAgQEAKKzIwMTMtMDQtMTUgIERlYW4gSmFja3NvbiAgPGRp
bm9AYXBwbGUuY29tPgorCisgICAgICAgIFBsdWdpbnMgdGhhdCByZXNpemUgbWlnaHQgbmVlZCB0
byBiZSBzbmFwc2hvdHRlZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwMjE1NworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI2OTYyNTk+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQSBwbHVnaW4gY291
bGQgYXZvaWQgc25hcHNob3R0aW5nIGlmIGl0IHN0YXJ0ZWQgdmVyeQorICAgICAgICBzbWFsbCAo
YmVsb3cgdGhlIHRocmVzaG9sZCB3aGVyZSB3ZSBhdXRvc3RhcnQpLCBhbmQgdGhlbgorICAgICAg
ICByZXNpemVkIHRvIGJlIGxhcmdlIChhYm92ZSB0aGUgdGhyZXNob2xkKS4gRGV0ZWN0IHRoaXMK
KyAgICAgICAgY2FzZSBhbmQgdGVsbCB0aGUgcGx1Z2luIHRvIHNuYXBzaG90LgorCisgICAgICAg
IFRoZXJlIHVuZm9ydHVuYXRlbHkgaXMgYSBiaXQgb2Ygc3RhdGUgdG8gdHJhY2sgd2hlbiBkb2lu
ZworICAgICAgICB0aGlzLiBXZSBoYXZlIHRvIHN0YXJ0IHRoZSBzbmFwc2hvdHRpbmcgaW4gYSBw
b3N0LWxheW91dAorICAgICAgICB0YXNrLCBzbyB3ZSBjYXJyeSBhIGZsYWcgdG8gc2F5IHdlJ3Jl
IGNoZWNraW5nIHNpemUgYnV0CisgICAgICAgIG5vdCB3YW50aW5nIHRoZSBwbHVnaW4gdG8gdXBk
YXRlICh3aGljaCB3b3VsZCByZXN0YXJ0IGl0KS4KKyAgICAgICAgV2UgYWxzbyBtaWdodCBiZSBh
IHBsdWdpbiB0aGF0IHdvdWxkIGhhdmUgYWxyZWFkeSByZXN0YXJ0ZWQKKyAgICAgICAgZHVlIHRv
IGEgc2ltaWxhciBwbHVnaW4gYmVpbmcgY2xpY2tlZCBvciBkZXRlY3RlZCBhcyBkb21pbmFudC4K
KyAgICAgICAgU28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVtYmVyIHZhcmlhYmxlIHRoYXQg
dHJhY2tzIHdoYXQKKyAgICAgICAgZGVjaXNpb24gaGFzIGJlZW4gbWFkZSBvbiBzbmFwc2hvdHRp
bmcuCisKKyAgICAgICAgSSBhbHNvIGFkZGVkIHNvbWUgbW9yZSBsb2dnaW5nIHRvIGJlIG1vcmUg
Y2xlYXIgYWJvdXQgd2hhdCBpcworICAgICAgICBoYXBwZW5pbmcgdG8gcGx1Z2lucyBnb2luZyB0
aHJvdWdoIHRoZSBzbmFwc2hvdCBwcm9jZXNzLCBhbmQKKyAgICAgICAgY2hhbmdlZCB0aGUgb3Jk
ZXIgb2YgdGhlIHRlc3RzIGluIHRoZSBhbGdvcml0aG0gc28gdGhhdCBkb21haW4KKyAgICAgICAg
ZGV0ZWN0aW9uIGNvbWVzIGJlZm9yZSBleGFtaW5pbmcgdGhlIHNpemUuCisKKyAgICAgICAgKiBo
dG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBs
dWdJbkltYWdlRWxlbWVudDo6SFRNTFBsdWdJbkltYWdlRWxlbWVudCk6IEluaXRpYWxpc2UKKyAg
ICAgICAgICAgIHRoZSB0d28gbmV3IG1lbWJlciB2YXJpYWJsZXMuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpzZXREaXNwbGF5U3RhdGUpOiBNYXJrIGEgcmVzdGFy
dGVkCisgICAgICAgICAgICBwbHVnaW4gYXMgTmV2ZXJTbmFwc2hvdC4gVGhpcyBtZWFucyB0aGF0
IGlmIGl0IGxhdGVyIHJlc2l6ZXMgYWJvdmUgdGhlCisgICAgICAgICAgICB0aHJlc2hvbGQsIGl0
IHdvbid0IHRyaWdnZXIgdGhlIHNuYXBzaG90IGRldGVjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmNoZWNrU25hcHNob3RTdGF0dXMpOiBSZW5hbWVkIGZy
b20KKyAgICAgICAgICAgIHVwZGF0ZVNuYXBzaG90SW5mby4gVGhpcyBub3cgdXBkYXRlcyB0aGUg
c25hcHNob3QsIGJ1dCBhbHNvIHJ1bnMKKyAgICAgICAgICAgIHRoZSBjaGVjayBmb3Igc2l6ZSBj
aGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6YWRkUGx1Z0luc0Zyb21Ob2RlTGlzdE1hdGNoaW5n
UGx1Z0luT3JpZ2luKTogR2F0aGVyIGFsbCBwbHVnaW5zCisgICAgICAgICAgICB0aGF0IGxvb2sg
bGlrZSBhIHJlc3RhcnRpbmcgcGx1Z2luLCBub3QganVzdCB0aG9zZSBzbmFwc2hvdHRlZC4gVGhh
dAorICAgICAgICAgICAgd2F5IHRoZXkgY2FuIGFsbCBiZSBtYXJrZWQgYXMgTmV2ZXJTbmFwc2hv
dC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlc3RhcnRTaW1p
bGFyUGx1Z0lucyk6IEJsZXNzIGV2ZXJ5CisgICAgICAgICAgICBwbHVnaW4gdGhhdCBsb29rcyBz
aW1pbGFyLCB3aGV0aGVyIG9yIG5vdCBpdCBpcyBzbmFwc2hvdHRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnVzZXJEaWRDbGlja1NuYXBzaG90KTogTW9yZSBs
b2dnaW5nLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6c2V0SXNQ
cmltYXJ5U25hcHNob3R0ZWRQbHVnSW4pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQ6OmNoZWNrU2l6ZUNoYW5nZUZvclNuYXBzaG90dGluZyk6IE5ldwor
ICAgICAgICAgICAgbWV0aG9kLiBJZiB0aGUgcGx1Z2luIHdhcyBiZWxvdyB0aGUgdGhyZXNob2xk
IGFuZCBpcyBub3cgYWJvdmUgaXQsCisgICAgICAgICAgICBiZWdpbiB0aGUgc25hcHNob3R0aW5n
IHByb2Nlc3MuCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpzdWJm
cmFtZUxvYWRlcldpbGxDcmVhdGVQbHVnSW4pOiBQbHVnaW5zCisgICAgICAgICAgICB0aGF0IHdl
cmUgbWFya2VkIGFzIE5ldmVyU25hcHNob3Qgc2hvdWxkIHN0YXJ0IGltbWVkaWF0ZWx5LiBNb3Zl
IHRoZSBvcmlnaW4KKyAgICAgICAgICAgIHRlc3QgZWFybGllciBpbiB0aGUgbWV0aG9kLiBJZiBh
IHBsdWdpbiBhdm9pZGVkIHNuYXBzaG90dGluZyBkdWUgdG8gc2l6ZSwKKyAgICAgICAgICAgIHJl
bWVtYmVyIHRoZSBzaXplLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVu
dDo6c3ViZnJhbWVMb2FkZXJEaWRDcmVhdGVQbHVnSW4pOiBNYXJrIHRoZQorICAgICAgICAgICAg
cGx1Z2luIGFzIE5ldmVyU25hcHNob3QuCisKKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQuaDoKKyAgICAgICAgKEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQpOiBGb3VyIG5ldyBt
ZW1iZXIgdmFyaWFibGVzOgorICAgICAgICAgICAgLSB0aGUgZGVjaXNpb24gd2UgbWFkZSByZWdh
cmRpbmcgc25hcHNob3R0aW5nIChvciBub3QpLCB1c2VzIHRoZSBTbmFwc2hvdERlY2lzaW9uIGVu
dW0KKyAgICAgICAgICAgIC0gdGhlIHNpemUgd2hlbiBpdCBhdm9pZGVkIHNuYXBzaG90dGluZwor
ICAgICAgICAgICAgLSBhIGZsYWcgdG8gaW5kaWNhdGUgdGhlIHBvc3QgbGF5b3V0IHVwZGF0ZSB3
YXMgdHJpZ2dlcmVkIGR1ZSB0bworICAgICAgICAgICAgICBhIHNpemUgY2hhbmdlCisgICAgICAg
IChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpuZWVkc0NoZWNrRm9yU2l6ZUNoYW5n
ZSk6IE5ldyBtZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
OjpzZXROZWVkc0NoZWNrRm9yU2l6ZUNoYW5nZSk6IE5ldyBtZXRob2QuCisgICAgICAgIChXZWJD
b3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpzbmFwc2hvdERlY2lzaW9uKTogUmV0dXJuIHRo
ZSBkZWNpc2lvbgorICAgICAgICAgICAgcmVnYXJkaW5nIHNuYXBzaG90dGluZyBvciBub3Qgc25h
cHNob3R0aW5nLgorCisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3OjphZGRXaWRnZXRUb1VwZGF0ZSk6IEd1YXJkIHVwZGF0aW5nIHRoZSB3
aWRnZXQuIFdlIGRvbid0CisgICAgICAgICAgICB3YW50IHRvIGRvIGl0IHdoZW4gd2UncmUgY2hl
Y2tpbmcgZm9yIGEgc2l6ZSBjaGFuZ2UgaW4gdGhlIHBsdWdpbi4KKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVmlldzo6dXBkYXRlV2lkZ2V0KTogQ2FsbCBuZXcgbmFtZS4KKworICAgICAgICAqIHBs
dWdpbnMvUGx1Z2luVmlld0Jhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXdCYXNl
OjpiZWdpblNuYXBzaG90dGluZ1J1bm5pbmdQbHVnaW4pOiBFbXB0eSB2aXJ0dWFsCisgICAgICAg
ICAgICBtZXRob2QgdG8gc25hcHNob3QgYSBydW5uaW5nIHBsdWdpbi4KKworICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJFbWJlZGRlZE9iamVjdDo6bGF5b3V0KTogSWYgdGhlIHBsdWdpbiBoYXMgaW5jcmVhc2VkIGlu
CisgICAgICAgICAgICBzaXplIGFkZCBpdCB0byB0aGUgcG9zdCBsYXlvdXQgbGlzdCBzbyB0aGF0
IGl0IHdpbGwgYmUgY2hlY2tlZC4KKwogMjAxMy0wNC0xNCAgQW5kcmVhcyBLbGluZyAgPGFrbGlu
Z0BhcHBsZS5jb20+CiAKICAgICAgICAgSGF3dGZpeCBNYWMgYnVpbGQuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAppbmRleCA5YmFmMDAyLi5kYmI1
NzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5j
cHAKQEAgLTgyLDYgKzgyLDggQEAgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6SFRNTFBsdWdJbklt
YWdlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2MKICAgICAsIG1fcmVt
b3ZlU25hcHNob3RUaW1lcih0aGlzLCAmSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVtb3ZlU25h
cHNob3RUaW1lckZpcmVkKQogICAgICwgbV9jcmVhdGVkRHVyaW5nVXNlckdlc3R1cmUoU2NyaXB0
Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpCiAgICAgLCBtX3Jlc3RhcnRlZFBs
dWdpbihmYWxzZSkKKyAgICAsIG1fbmVlZHNDaGVja0ZvclNpemVDaGFuZ2UoZmFsc2UpCisgICAg
LCBtX3NuYXBzaG90RGVjaXNpb24oU25hcHNob3ROb3RZZXREZWNpZGVkKQogewogICAgIHNldEhh
c0N1c3RvbVN0eWxlQ2FsbGJhY2tzKCk7CiB9CkBAIC05Nyw2ICs5OSw3IEBAIHZvaWQgSFRNTFBs
dWdJbkltYWdlRWxlbWVudDo6c2V0RGlzcGxheVN0YXRlKERpc3BsYXlTdGF0ZSBzdGF0ZSkKICNp
ZiBQTEFURk9STShNQUMpCiAgICAgaWYgKHN0YXRlID09IFJlc3RhcnRpbmdXaXRoUGVuZGluZ01v
dXNlQ2xpY2sgfHwgc3RhdGUgPT0gUmVzdGFydGluZykgewogICAgICAgICBtX3Jlc3RhcnRlZFBs
dWdpbiA9IHRydWU7CisgICAgICAgIG1fc25hcHNob3REZWNpc2lvbiA9IE5ldmVyU25hcHNob3Q7
CiAgICAgICAgIGlmIChkaXNwbGF5U3RhdGUoKSA9PSBEaXNwbGF5aW5nU25hcHNob3QpCiAgICAg
ICAgICAgICBtX3JlbW92ZVNuYXBzaG90VGltZXIuc3RhcnRPbmVTaG90KHJlbW92ZVNuYXBzaG90
VGltZXJEZWxheSk7CiAgICAgfQpAQCAtMzM2LDggKzMzOSwxNCBAQCBzdGF0aWMgQXRvbWljU3Ry
aW5nIGNsYXNzTmFtZUZvclNoYWRvd1Jvb3QoY29uc3QgTm9kZSogbm9kZSkKICAgICByZXR1cm4g
cGx1Z0luTGFyZ2VTaXplQ2xhc3NOYW1lOwogfQogCi12b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1l
bnQ6OnVwZGF0ZVNuYXBzaG90SW5mbygpCit2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmNo
ZWNrU25hcHNob3RTdGF0dXMoKQogeworICAgIGlmICghcmVuZGVyZXIoKS0+aXNTbmFwc2hvdHRl
ZFBsdWdJbigpKSB7CisgICAgICAgIGlmIChkaXNwbGF5U3RhdGUoKSA9PSBQbGF5aW5nKQorICAg
ICAgICAgICAgY2hlY2tTaXplQ2hhbmdlRm9yU25hcHNob3R0aW5nKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICBTaGFkb3dSb290KiByb290ID0gdXNlckFnZW50U2hhZG93Um9vdCgp
OwogICAgIGlmICghcm9vdCkKICAgICAgICAgcmV0dXJuOwpAQCAtNDI4LDcgKzQzNyw3IEBAIHN0
YXRpYyB2b2lkIGFkZFBsdWdJbnNGcm9tTm9kZUxpc3RNYXRjaGluZ1BsdWdJbk9yaWdpbihIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50TGlzCiAgICAgICAgIE5vZGUqIG5vZGUgPSBjb2xsZWN0aW9uLT5p
dGVtKGkpOwogICAgICAgICBpZiAobm9kZS0+aXNQbHVnaW5FbGVtZW50KCkpIHsKICAgICAgICAg
ICAgIEhUTUxQbHVnSW5FbGVtZW50KiBwbHVnSW5FbGVtZW50ID0gdG9IVE1MUGx1Z0luRWxlbWVu
dChub2RlKTsKLSAgICAgICAgICAgIGlmIChwbHVnSW5FbGVtZW50LT5pc1BsdWdJbkltYWdlRWxl
bWVudCgpICYmIHBsdWdJbkVsZW1lbnQtPmRpc3BsYXlTdGF0ZSgpIDw9IEhUTUxQbHVnSW5FbGVt
ZW50OjpEaXNwbGF5aW5nU25hcHNob3QpIHsKKyAgICAgICAgICAgIGlmIChwbHVnSW5FbGVtZW50
LT5pc1BsdWdJbkltYWdlRWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAgSFRNTFBsdWdJbklt
YWdlRWxlbWVudCogcGx1Z0luSW1hZ2VFbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50
KG5vZGUpOwogICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIGxvYWRlZFVSTCA9IHBsdWdJbklt
YWdlRWxlbWVudC0+bG9hZGVkVXJsKCk7CiAgICAgICAgICAgICAgICAgU3RyaW5nIG90aGVyTWlt
ZVR5cGUgPSBwbHVnSW5JbWFnZUVsZW1lbnQtPmxvYWRlZE1pbWVUeXBlKCk7CkBAIC00NDYsMjkg
KzQ1NSwzNSBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlc3RhcnRTaW1pbGFyUGx1
Z0lucygpCiAKICAgICBTdHJpbmcgcGx1Z0luT3JpZ2luID0gbV9sb2FkZWRVcmwuaG9zdCgpOwog
ICAgIFN0cmluZyBtaW1lVHlwZSA9IGxvYWRlZE1pbWVUeXBlKCk7Ci0gICAgSFRNTFBsdWdJbklt
YWdlRWxlbWVudExpc3QgcGx1Z2luc05lZWRpbmdSZXN0YXJ0OworICAgIEhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnRMaXN0IHNpbWlsYXJQbHVnaW5zOwogCiAgICAgaWYgKCFkb2N1bWVudCgpLT5wYWdl
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQo
KS0+cGFnZSgpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJh
dmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKGZyYW1lLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2Fk
ZXIoKS0+Y29udGFpbnNQbHVnaW5zKCkpIHsKLSAgICAgICAgICAgIGlmICghZnJhbWUtPmRvY3Vt
ZW50KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxO
b2RlTGlzdD4gcGx1Z2lucyA9IGZyYW1lLT5kb2N1bWVudCgpLT5nZXRFbGVtZW50c0J5VGFnTmFt
ZShlbWJlZFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICBpZiAocGx1Z2lucykKLSAgICAg
ICAgICAgICAgICBhZGRQbHVnSW5zRnJvbU5vZGVMaXN0TWF0Y2hpbmdQbHVnSW5PcmlnaW4ocGx1
Z2luc05lZWRpbmdSZXN0YXJ0LCBwbHVnaW5zLCBwbHVnSW5PcmlnaW4sIG1pbWVUeXBlKTsKLQot
ICAgICAgICAgICAgcGx1Z2lucyA9IGZyYW1lLT5kb2N1bWVudCgpLT5nZXRFbGVtZW50c0J5VGFn
TmFtZShvYmplY3RUYWcubG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgaWYgKHBsdWdpbnMpCi0g
ICAgICAgICAgICAgICAgYWRkUGx1Z0luc0Zyb21Ob2RlTGlzdE1hdGNoaW5nUGx1Z0luT3JpZ2lu
KHBsdWdpbnNOZWVkaW5nUmVzdGFydCwgcGx1Z2lucywgcGx1Z0luT3JpZ2luLCBtaW1lVHlwZSk7
Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCktPnN1YmZyYW1lTG9hZGVy
KCktPmNvbnRhaW5zUGx1Z2lucygpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAor
ICAgICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgUmVmUHRyPE5vZGVMaXN0PiBwbHVnSW5zID0gZnJhbWUtPmRvY3VtZW50KCktPmdl
dEVsZW1lbnRzQnlUYWdOYW1lKGVtYmVkVGFnLmxvY2FsTmFtZSgpKTsKKyAgICAgICAgaWYgKHBs
dWdJbnMpCisgICAgICAgICAgICBhZGRQbHVnSW5zRnJvbU5vZGVMaXN0TWF0Y2hpbmdQbHVnSW5P
cmlnaW4oc2ltaWxhclBsdWdpbnMsIHBsdWdJbnMsIHBsdWdJbk9yaWdpbiwgbWltZVR5cGUpOwor
CisgICAgICAgIHBsdWdJbnMgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudHNCeVRhZ05h
bWUob2JqZWN0VGFnLmxvY2FsTmFtZSgpKTsKKyAgICAgICAgaWYgKHBsdWdJbnMpCisgICAgICAg
ICAgICBhZGRQbHVnSW5zRnJvbU5vZGVMaXN0TWF0Y2hpbmdQbHVnSW5PcmlnaW4oc2ltaWxhclBs
dWdpbnMsIHBsdWdJbnMsIHBsdWdJbk9yaWdpbiwgbWltZVR5cGUpOwogICAgIH0KIAotICAgIGZv
ciAoc2l6ZV90IGkgPSAwLCBsZW5ndGggPSBwbHVnaW5zTmVlZGluZ1Jlc3RhcnQuc2l6ZSgpOyBp
IDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgcGx1Z2luc05lZWRpbmdSZXN0YXJ0W2ldLT5zZXRE
aXNwbGF5U3RhdGUoUGxheWluZyk7Ci0gICAgICAgIHBsdWdpbnNOZWVkaW5nUmVzdGFydFtpXS0+
cmVzdGFydFNuYXBzaG90dGVkUGx1Z0luKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDAsIGxlbmd0
aCA9IHNpbWlsYXJQbHVnaW5zLnNpemUoKTsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIEhU
TUxQbHVnSW5JbWFnZUVsZW1lbnQqIHBsdWdpblRvUmVzdGFydCA9IHNpbWlsYXJQbHVnaW5zW2ld
LmdldCgpOworICAgICAgICBpZiAocGx1Z2luVG9SZXN0YXJ0LT5kaXNwbGF5U3RhdGUoKSA8PSBI
VE1MUGx1Z0luRWxlbWVudDo6RGlzcGxheWluZ1NuYXBzaG90KSB7CisgICAgICAgICAgICBMT0co
UGx1Z2lucywgIiVwIFBsdWctaW4gbG9va3Mgc2ltaWxhciB0byBhIHJlc3RhcnRlZCBwbHVnLWlu
LiBSZXN0YXJ0LiIsIHBsdWdpblRvUmVzdGFydCk7CisgICAgICAgICAgICBwbHVnaW5Ub1Jlc3Rh
cnQtPnNldERpc3BsYXlTdGF0ZShQbGF5aW5nKTsKKyAgICAgICAgICAgIHBsdWdpblRvUmVzdGFy
dC0+cmVzdGFydFNuYXBzaG90dGVkUGx1Z0luKCk7CisgICAgICAgIH0KKyAgICAgICAgcGx1Z2lu
VG9SZXN0YXJ0LT5tX3NuYXBzaG90RGVjaXNpb24gPSBOZXZlclNuYXBzaG90OwogICAgIH0KIH0K
IApAQCAtNDgxLDYgKzQ5Niw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6dXNlckRp
ZENsaWNrU25hcHNob3QoUGFzc1JlZlB0cjxNb3VzZUV2ZW50PiBldmVudCwKICAgICBpZiAoZG9j
dW1lbnQoKS0+cGFnZSgpICYmICFTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJlYXRVUkxTY2hlbWVB
c0xvY2FsKGRvY3VtZW50KCktPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPmJhc2VV
UkwoKS5wcm90b2NvbCgpKSAmJiBkb2N1bWVudCgpLT5wYWdlKCktPnNldHRpbmdzKCktPmF1dG9z
dGFydE9yaWdpblBsdWdJblNuYXBzaG90dGluZ0VuYWJsZWQoKSkKICAgICAgICAgZG9jdW1lbnQo
KS0+cGFnZSgpLT5wbHVnSW5DbGllbnQoKS0+ZGlkU3RhcnRGcm9tT3JpZ2luKGRvY3VtZW50KCkt
PnBhZ2UoKS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPmJhc2VVUkwoKS5ob3N0KCksIHBsdWdJ
bk9yaWdpbiwgbG9hZGVkTWltZVR5cGUoKSk7CiAKKyAgICBMT0coUGx1Z2lucywgIiVwIFVzZXIg
Y2xpY2tlZCBvbiBzbmFwc2hvdHRlZCBwbHVnLWluLiBSZXN0YXJ0LiIsIHRoaXMpOwogICAgIHJl
c3RhcnRTbmFwc2hvdHRlZFBsdWdJbigpOwogICAgIHJlc3RhcnRTaW1pbGFyUGx1Z0lucygpOwog
fQpAQCAtNDkxLDYgKzUwNyw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6c2V0SXNQ
cmltYXJ5U25hcHNob3R0ZWRQbHVnSW4oYm9vbCBpc1ByaW1hcnlTbmFwc2hvCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChpc1ByaW1hcnlTbmFwc2hvdHRlZFBsdWdJbikgeworICAgICAgICBM
T0coUGx1Z2lucywgIiVwIFBsdWctaW4gd2FzIGRldGVjdGVkIGFzIHRoZSBwcmltYXJ5IGVsZW1l
bnQgaW4gdGhlIHBhZ2UuIFJlc3RhcnQuIiwgdGhpcyk7CiAgICAgICAgIHJlc3RhcnRTbmFwc2hv
dHRlZFBsdWdJbigpOwogICAgICAgICByZXN0YXJ0U2ltaWxhclBsdWdJbnMoKTsKICAgICB9CkBA
IC01MjEsNiArNTM4LDI3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6c2ltdWxhdGVk
TW91c2VDbGlja1RpbWVyRmlyZWQoRGVmZXJyYWJsZU9uZVNob3RUaW1lCiAgICAgbV9wZW5kaW5n
Q2xpY2tFdmVudEZyb21TbmFwc2hvdCA9IG51bGxwdHI7CiB9CiAKK3ZvaWQgSFRNTFBsdWdJbklt
YWdlRWxlbWVudDo6Y2hlY2tTaXplQ2hhbmdlRm9yU25hcHNob3R0aW5nKCkKK3sKKyAgICBpZiAo
IW1fbmVlZHNDaGVja0ZvclNpemVDaGFuZ2UgfHwgbV9zbmFwc2hvdERlY2lzaW9uICE9IE1heVNu
YXBzaG90V2hlblJlc2l6ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbmVlZHNDaGVja0Zv
clNpemVDaGFuZ2UgPSBmYWxzZTsKKyAgICBMYXlvdXRSZWN0IGNvbnRlbnRCb3hSZWN0ID0gdG9S
ZW5kZXJCb3gocmVuZGVyZXIoKSktPmNvbnRlbnRCb3hSZWN0KCk7CisgICAgaW50IGNvbnRlbnRX
aWR0aCA9IGNvbnRlbnRCb3hSZWN0LndpZHRoKCk7CisgICAgaW50IGNvbnRlbnRIZWlnaHQgPSBj
b250ZW50Qm94UmVjdC5oZWlnaHQoKTsKKworICAgIGlmIChjb250ZW50V2lkdGggPD0gc2l6aW5n
VGlueURpbWVuc2lvblRocmVzaG9sZCB8fCBjb250ZW50SGVpZ2h0IDw9IHNpemluZ1RpbnlEaW1l
bnNpb25UaHJlc2hvbGQpCisgICAgICAgIHJldHVybjsKKworICAgIExPRyhQbHVnaW5zLCAiJXAg
UGx1Zy1pbiBvcmlnaW5hbGx5IGF2b2lkZWQgc25hcHNob3R0aW5nIGJlY2F1c2UgaXQgd2FzIHNp
emVkICVkeCVkLiBOb3cgaXQgaXMgJWR4JWQuIFRlbGwgaXQgdG8gc25hcHNob3QuXG4iLCB0aGlz
LCBtX3NpemVXaGVuU25hcHNob3R0ZWQud2lkdGgoKSwgbV9zaXplV2hlblNuYXBzaG90dGVkLmhl
aWdodCgpLCBjb250ZW50V2lkdGgsIGNvbnRlbnRIZWlnaHQpOworICAgIHNldERpc3BsYXlTdGF0
ZShXYWl0aW5nRm9yU25hcHNob3QpOworICAgIG1fc25hcHNob3REZWNpc2lvbiA9IFNuYXBzaG90
dGVkOworICAgIFdpZGdldCogd2lkZ2V0ID0gcGx1Z2luV2lkZ2V0KCk7CisgICAgaWYgKHdpZGdl
dCAmJiB3aWRnZXQtPmlzUGx1Z2luVmlld0Jhc2UoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8UGx1
Z2luVmlld0Jhc2UqPih3aWRnZXQpLT5iZWdpblNuYXBzaG90dGluZ1J1bm5pbmdQbHVnaW4oKTsK
K30KKwogdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpzdWJmcmFtZUxvYWRlcldpbGxDcmVh
dGVQbHVnSW4oY29uc3QgS1VSTCYgdXJsKQogewogICAgIExPRyhQbHVnaW5zLCAiJXAgUGx1Zy1p
biBVUkw6ICVzIiwgdGhpcywgbV91cmwudXRmOCgpLmRhdGEoKSk7CkBAIC01MjgsMzUgKzU2Niw0
NiBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnN1YmZyYW1lTG9hZGVyV2lsbENyZWF0
ZVBsdWdJbihjb25zdCBLVVJMJiB1cmwpCiAKICAgICBtX2xvYWRlZFVybCA9IHVybDsKIAotICAg
IGlmICghZG9jdW1lbnQoKS0+cGFnZSgpCi0gICAgICAgIHx8ICFkb2N1bWVudCgpLT5wYWdlKCkt
PnNldHRpbmdzKCktPnBsdWdJblNuYXBzaG90dGluZ0VuYWJsZWQoKSkKKyAgICBpZiAoIWRvY3Vt
ZW50KCktPnBhZ2UoKSB8fCAhZG9jdW1lbnQoKS0+cGFnZSgpLT5zZXR0aW5ncygpLT5wbHVnSW5T
bmFwc2hvdHRpbmdFbmFibGVkKCkpIHsKKyAgICAgICAgbV9zbmFwc2hvdERlY2lzaW9uID0gTmV2
ZXJTbmFwc2hvdDsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIGlmIChkaXNwbGF5U3Rh
dGUoKSA9PSBSZXN0YXJ0aW5nKSB7Ci0gICAgICAgIHNldERpc3BsYXlTdGF0ZShQbGF5aW5nKTsK
ICAgICAgICAgTE9HKFBsdWdpbnMsICIlcCBQbHVnLWluIGlzIGV4cGxpY2l0bHkgcmVzdGFydGlu
ZyIsIHRoaXMpOworICAgICAgICBtX3NuYXBzaG90RGVjaXNpb24gPSBOZXZlclNuYXBzaG90Owor
ICAgICAgICBzZXREaXNwbGF5U3RhdGUoUGxheWluZyk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoZGlzcGxheVN0YXRlKCkgPT0gUmVzdGFydGluZ1dpdGhQZW5kaW5nTW91c2VD
bGljaykgewogICAgICAgICBMT0coUGx1Z2lucywgIiVwIFBsdWctaW4gaXMgZXhwbGljaXRseSBy
ZXN0YXJ0aW5nIGJ1dCBhbHNvIHdhaXRpbmcgZm9yIGEgY2xpY2siLCB0aGlzKTsKKyAgICAgICAg
bV9zbmFwc2hvdERlY2lzaW9uID0gTmV2ZXJTbmFwc2hvdDsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAorICAgIGlmIChtX3NuYXBzaG90RGVjaXNpb24gPT0gTmV2ZXJTbmFwc2hvdCkgeworICAg
ICAgICBMT0coUGx1Z2lucywgIiVwIFBsdWctaW4gaXMgYmxlc3NlZCwgYWxsb3cgaXQgdG8gc3Rh
cnQiLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICBib29sIGluTWFp
bkZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSA9PSBkb2N1bWVudCgpLT5wYWdlKCktPm1haW5G
cmFtZSgpOwogCiAgICAgaWYgKGRvY3VtZW50KCktPmlzUGx1Z2luRG9jdW1lbnQoKSAmJiBpbk1h
aW5GcmFtZSkgewogICAgICAgICBMT0coUGx1Z2lucywgIiVwIFBsdWctaW4gZG9jdW1lbnQgaW4g
bWFpbiBmcmFtZSIsIHRoaXMpOworICAgICAgICBtX3NuYXBzaG90RGVjaXNpb24gPSBOZXZlclNu
YXBzaG90OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFNjcmlwdENvbnRyb2xs
ZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKSB7CiAgICAgICAgIExPRyhQbHVnaW5zLCAiJXAg
U2NyaXB0IGlzIGN1cnJlbnRseSBwcm9jZXNzaW5nIHVzZXIgZ2VzdHVyZSwgc2V0IHRvIHBsYXki
LCB0aGlzKTsKKyAgICAgICAgbV9zbmFwc2hvdERlY2lzaW9uID0gTmV2ZXJTbmFwc2hvdDsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChtX2NyZWF0ZWREdXJpbmdVc2VyR2VzdHVy
ZSkgewogICAgICAgICBMT0coUGx1Z2lucywgIiVwIFBsdWctaW4gd2FzIGNyZWF0ZWQgd2hlbiBw
cm9jZXNzaW5nIHVzZXIgZ2VzdHVyZSwgc2V0IHRvIHBsYXkiLCB0aGlzKTsKKyAgICAgICAgbV9z
bmFwc2hvdERlY2lzaW9uID0gTmV2ZXJTbmFwc2hvdDsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtNTY1LDE1ICs2MTQsMjMgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpzdWJm
cmFtZUxvYWRlcldpbGxDcmVhdGVQbHVnSW4oY29uc3QgS1VSTCYgdXJsKQogICAgICAgICBsYXN0
S25vd25Vc2VyR2VzdHVyZVRpbWVzdGFtcCA9IHN0ZDo6bWF4KGxhc3RLbm93blVzZXJHZXN0dXJl
VGltZXN0YW1wLCBkb2N1bWVudCgpLT5wYWdlKCktPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5s
YXN0SGFuZGxlZFVzZXJHZXN0dXJlVGltZXN0YW1wKCkpOwogICAgIGlmIChjdXJyZW50VGltZSgp
IC0gbGFzdEtub3duVXNlckdlc3R1cmVUaW1lc3RhbXAgPCBhdXRvc3RhcnRTb29uQWZ0ZXJVc2Vy
R2VzdHVyZVRocmVzaG9sZCkgewogICAgICAgICBMT0coUGx1Z2lucywgIiVwIFBsdWctaW4gd2Fz
IGNyZWF0ZWQgc2hvcnRseSBhZnRlciBhIHVzZXIgZ2VzdHVyZSwgc2V0IHRvIHBsYXkiLCB0aGlz
KTsKKyAgICAgICAgbV9zbmFwc2hvdERlY2lzaW9uID0gTmV2ZXJTbmFwc2hvdDsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmIChkb2N1bWVudCgpLT5wYWdlKCktPnNldHRpbmdzKCkt
PnNuYXBzaG90QWxsUGx1Z0lucygpKSB7CiAgICAgICAgIExPRyhQbHVnaW5zLCAiJXAgUGx1Zy1p
biBmb3JjZWQgdG8gc25hcHNob3QgYnkgdXNlciBwcmVmZXJlbmNlIiwgdGhpcyk7CisgICAgICAg
IG1fc25hcHNob3REZWNpc2lvbiA9IFNuYXBzaG90dGVkOwogICAgICAgICBzZXREaXNwbGF5U3Rh
dGUoV2FpdGluZ0ZvclNuYXBzaG90KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlm
IChkb2N1bWVudCgpLT5wYWdlKCktPnNldHRpbmdzKCktPmF1dG9zdGFydE9yaWdpblBsdWdJblNu
YXBzaG90dGluZ0VuYWJsZWQoKSAmJiBkb2N1bWVudCgpLT5wYWdlKCktPnBsdWdJbkNsaWVudCgp
LT5zaG91bGRBdXRvU3RhcnRGcm9tT3JpZ2luKGRvY3VtZW50KCktPnBhZ2UoKS0+bWFpbkZyYW1l
KCktPmRvY3VtZW50KCktPmJhc2VVUkwoKS5ob3N0KCksIHVybC5ob3N0KCksIGxvYWRlZE1pbWVU
eXBlKCkpKSB7CisgICAgICAgIExPRyhQbHVnaW5zLCAiJXAgUGx1Zy1pbiBmcm9tICglcywgJXMp
IGlzIG1hcmtlZCB0byBhdXRvLXN0YXJ0LCBzZXQgdG8gcGxheSIsIHRoaXMsIGRvY3VtZW50KCkt
PnBhZ2UoKS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPmJhc2VVUkwoKS5ob3N0KCkudXRmOCgp
LmRhdGEoKSwgdXJsLmhvc3QoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgbV9zbmFwc2hvdERl
Y2lzaW9uID0gTmV2ZXJTbmFwc2hvdDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIFJl
bmRlckJveCogcmVuZGVyRW1iZWRkZWRPYmplY3QgPSB0b1JlbmRlckJveChyZW5kZXJlcigpKTsK
ICAgICBMZW5ndGggc3R5bGVXaWR0aCA9IHJlbmRlckVtYmVkZGVkT2JqZWN0LT5zdHlsZSgpLT53
aWR0aCgpOwogICAgIExlbmd0aCBzdHlsZUhlaWdodCA9IHJlbmRlckVtYmVkZGVkT2JqZWN0LT5z
dHlsZSgpLT5oZWlnaHQoKTsKQEAgLTU4OCwzNSArNjQ1LDM2IEBAIHZvaWQgSFRNTFBsdWdJbklt
YWdlRWxlbWVudDo6c3ViZnJhbWVMb2FkZXJXaWxsQ3JlYXRlUGx1Z0luKGNvbnN0IEtVUkwmIHVy
bCkKICAgICAgICAgJiYgc3R5bGVIZWlnaHQuaXNQZXJjZW50KCkgJiYgKHN0eWxlSGVpZ2h0LnBl
cmNlbnQoKSA9PSAxMDApCiAgICAgICAgICYmIChzdGF0aWNfY2FzdDxmbG9hdD4oY29udGVudEFy
ZWEpIC8gdmlzaWJsZUFyZWEgPiBzaXppbmdGdWxsUGFnZUFyZWFSYXRpb1RocmVzaG9sZCkpIHsK
ICAgICAgICAgTE9HKFBsdWdpbnMsICIlcCBQbHVnLWluIGlzIHRvcCBsZXZlbCBmdWxsIHBhZ2Us
IHNldCB0byBwbGF5IiwgdGhpcyk7CisgICAgICAgIG1fc25hcHNob3REZWNpc2lvbiA9IE5ldmVy
U25hcHNob3Q7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoY29udGVudFdpZHRo
IDw9IHNpemluZ1RpbnlEaW1lbnNpb25UaHJlc2hvbGQgfHwgY29udGVudEhlaWdodCA8PSBzaXpp
bmdUaW55RGltZW5zaW9uVGhyZXNob2xkKSB7CiAgICAgICAgIExPRyhQbHVnaW5zLCAiJXAgUGx1
Zy1pbiBpcyB2ZXJ5IHNtYWxsICVkeCVkLCBzZXQgdG8gcGxheSIsIHRoaXMsIGNvbnRlbnRXaWR0
aCwgY29udGVudEhlaWdodCk7CisgICAgICAgIG1fc2l6ZVdoZW5TbmFwc2hvdHRlZCA9IEludFNp
emUoY29udGVudEJveFJlY3Qud2lkdGgoKS50b0ludCgpLCBjb250ZW50Qm94UmVjdC5oZWlnaHQo
KS50b0ludCgpKTsKKyAgICAgICAgbV9zbmFwc2hvdERlY2lzaW9uID0gTWF5U25hcHNob3RXaGVu
UmVzaXplZDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICghZG9jdW1lbnQoKS0+
cGFnZSgpLT5wbHVnSW5DbGllbnQoKSkgeworICAgICAgICBMT0coUGx1Z2lucywgIiVwIFRoZXJl
IGlzIG5vIHBsdWctaW4gY2xpZW50LiBTZXQgdG8gd2FpdCBmb3Igc25hcHNob3QiLCB0aGlzKTsK
KyAgICAgICAgbV9zbmFwc2hvdERlY2lzaW9uID0gTmV2ZXJTbmFwc2hvdDsKICAgICAgICAgc2V0
RGlzcGxheVN0YXRlKFdhaXRpbmdGb3JTbmFwc2hvdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoZG9jdW1lbnQoKS0+cGFnZSgpLT5zZXR0aW5ncygpLT5hdXRvc3RhcnRPcmln
aW5QbHVnSW5TbmFwc2hvdHRpbmdFbmFibGVkKCkgJiYgZG9jdW1lbnQoKS0+cGFnZSgpLT5wbHVn
SW5DbGllbnQoKS0+c2hvdWxkQXV0b1N0YXJ0RnJvbU9yaWdpbihkb2N1bWVudCgpLT5wYWdlKCkt
Pm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgpLCB1cmwuaG9zdCgpLCBs
b2FkZWRNaW1lVHlwZSgpKSkgewotICAgICAgICBMT0coUGx1Z2lucywgIiVwIFBsdWctaW4gZnJv
bSAoJXMsICVzKSBpcyBtYXJrZWQgdG8gYXV0by1zdGFydCwgc2V0IHRvIHBsYXkiLCB0aGlzLCBk
b2N1bWVudCgpLT5wYWdlKCktPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9z
dCgpLnV0ZjgoKS5kYXRhKCksIHVybC5ob3N0KCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBMT0coUGx1Z2lucywgIiVwIFBsdWctaW4gZnJvbSAoJXMsICVz
KSBpcyBub3QgYXV0by1zdGFydCwgc2l6ZWQgYXQgJWR4JWQsIHNldCB0byB3YWl0IGZvciBzbmFw
c2hvdCIsIHRoaXMsIGRvY3VtZW50KCktPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCkt
PmJhc2VVUkwoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSwgdXJsLmhvc3QoKS51dGY4KCkuZGF0YSgp
LCBjb250ZW50V2lkdGgsIGNvbnRlbnRIZWlnaHQpOworICAgIG1fc25hcHNob3REZWNpc2lvbiA9
IFNuYXBzaG90dGVkOwogICAgIHNldERpc3BsYXlTdGF0ZShXYWl0aW5nRm9yU25hcHNob3QpOwog
fQogCiB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnN1YmZyYW1lTG9hZGVyRGlkQ3JlYXRl
UGx1Z0luKGNvbnN0IFdpZGdldCogd2lkZ2V0KQogewotICAgIGlmICghd2lkZ2V0LT5pc1BsdWdp
blZpZXdCYXNlKCkKLSAgICAgICAgfHwgIXN0YXRpY19jYXN0PGNvbnN0IFBsdWdpblZpZXdCYXNl
Kj4od2lkZ2V0KS0+c2hvdWxkQWx3YXlzQXV0b1N0YXJ0KCkpCisgICAgaWYgKCF3aWRnZXQtPmlz
UGx1Z2luVmlld0Jhc2UoKSB8fCAhc3RhdGljX2Nhc3Q8Y29uc3QgUGx1Z2luVmlld0Jhc2UqPih3
aWRnZXQpLT5zaG91bGRBbHdheXNBdXRvU3RhcnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
TE9HKFBsdWdpbnMsICIlcCBQbHVnLWluIHNob3VsZCBhdXRvLXN0YXJ0LCBzZXQgdG8gcGxheSIs
IHRoaXMpOworICAgIG1fc25hcHNob3REZWNpc2lvbiA9IE5ldmVyU25hcHNob3Q7CiAgICAgc2V0
RGlzcGxheVN0YXRlKFBsYXlpbmcpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBs
dWdJbkltYWdlRWxlbWVudC5oCmluZGV4IGJkZjg3YjkuLjRkYzVhZDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oCkBAIC03NSw3ICs3NSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldE5lZWRzV2lkZ2V0VXBkYXRlKGJvb2wgbmVlZHNXaWRnZXRVcGRh
dGUpIHsgbV9uZWVkc1dpZGdldFVwZGF0ZSA9IG5lZWRzV2lkZ2V0VXBkYXRlOyB9CiAKICAgICB2
b2lkIHVzZXJEaWRDbGlja1NuYXBzaG90KFBhc3NSZWZQdHI8TW91c2VFdmVudD4sIGJvb2wgZm9y
d2FyZEV2ZW50KTsKLSAgICB2b2lkIHVwZGF0ZVNuYXBzaG90SW5mbygpOworICAgIHZvaWQgY2hl
Y2tTbmFwc2hvdFN0YXR1cygpOwogICAgIEltYWdlKiBzbmFwc2hvdEltYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zbmFwc2hvdEltYWdlLmdldCgpOyB9CiAKICAgICAvLyBQbHVnLWluIFVSTCBtaWdo
dCBub3QgYmUgdGhlIHNhbWUgYXMgdXJsKCkgd2l0aCBvdmVycmlkaW5nIHBhcmFtZXRlcnMuCkBA
IC04NSw2ICs4NSwxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJc1ByaW1hcnlTbmFwc2hvdHRl
ZFBsdWdJbihib29sKTsKICAgICBib29sIHBhcnRPZlNuYXBzaG90TGFiZWwoTm9kZSopOwogCisg
ICAgYm9vbCBuZWVkc0NoZWNrRm9yU2l6ZUNoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHND
aGVja0ZvclNpemVDaGFuZ2U7IH0KKyAgICB2b2lkIHNldE5lZWRzQ2hlY2tGb3JTaXplQ2hhbmdl
KCkgeyBtX25lZWRzQ2hlY2tGb3JTaXplQ2hhbmdlID0gdHJ1ZTsgfQorICAgIHZvaWQgY2hlY2tT
aXplQ2hhbmdlRm9yU25hcHNob3R0aW5nKCk7CisKKyAgICBlbnVtIFNuYXBzaG90RGVjaXNpb24g
eworICAgICAgICBTbmFwc2hvdE5vdFlldERlY2lkZWQsCisgICAgICAgIE5ldmVyU25hcHNob3Qs
CisgICAgICAgIFNuYXBzaG90dGVkLAorICAgICAgICBNYXlTbmFwc2hvdFdoZW5SZXNpemVkCisg
ICAgfTsKKyAgICBTbmFwc2hvdERlY2lzaW9uIHNuYXBzaG90RGVjaXNpb24oKSBjb25zdCB7IHJl
dHVybiBtX3NuYXBzaG90RGVjaXNpb247IH0KKwogcHJvdGVjdGVkOgogICAgIEhUTUxQbHVnSW5J
bWFnZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqLCBib29s
IGNyZWF0ZWRCeVBhcnNlciwgUHJlZmVyUGx1Z0luc0ZvckltYWdlc09wdGlvbik7CiAKQEAgLTE0
Nyw2ICsxNTksOSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxFbGVtZW50PiBtX3NuYXBzaG90TGFi
ZWw7CiAgICAgYm9vbCBtX2NyZWF0ZWREdXJpbmdVc2VyR2VzdHVyZTsKICAgICBib29sIG1fcmVz
dGFydGVkUGx1Z2luOworICAgIGJvb2wgbV9uZWVkc0NoZWNrRm9yU2l6ZUNoYW5nZTsKKyAgICBJ
bnRTaXplIG1fc2l6ZVdoZW5TbmFwc2hvdHRlZDsKKyAgICBTbmFwc2hvdERlY2lzaW9uIG1fc25h
cHNob3REZWNpc2lvbjsKIH07CiAKIGlubGluZSBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KiB0b0hU
TUxQbHVnSW5JbWFnZUVsZW1lbnQoTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAppbmRleCA1M2E0ZmIyLi40YTg0ZjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBA
IC0xNDMyLDcgKzE0MzIsOCBAQCB2b2lkIEZyYW1lVmlldzo6YWRkV2lkZ2V0VG9VcGRhdGUoUmVu
ZGVyT2JqZWN0KiBvYmplY3QpCiAgICAgTm9kZSogbm9kZSA9IG9iamVjdC0+bm9kZSgpOwogICAg
IGlmIChub2RlLT5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShlbWJl
ZFRhZykpIHsKICAgICAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCogcGx1Z2luRWxlbWVudCA9
IHRvSFRNTFBsdWdJbkltYWdlRWxlbWVudChub2RlKTsKLSAgICAgICAgcGx1Z2luRWxlbWVudC0+
c2V0TmVlZHNXaWRnZXRVcGRhdGUodHJ1ZSk7CisgICAgICAgIGlmICghcGx1Z2luRWxlbWVudC0+
bmVlZHNDaGVja0ZvclNpemVDaGFuZ2UoKSkKKyAgICAgICAgICAgIHBsdWdpbkVsZW1lbnQtPnNl
dE5lZWRzV2lkZ2V0VXBkYXRlKHRydWUpOwogICAgIH0KIAogICAgIG1fd2lkZ2V0VXBkYXRlU2V0
LT5hZGQob2JqZWN0KTsKQEAgLTI2MDUsNyArMjYwNiw3IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRh
dGVXaWRnZXQoUmVuZGVyT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIGlmIChvYmplY3QtPmlzU25h
cHNob3R0ZWRQbHVnSW4oKSkgewogICAgICAgICAgICAgaWYgKG93bmVyRWxlbWVudC0+aGFzVGFn
TmFtZShvYmplY3RUYWcpIHx8IG93bmVyRWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykpIHsK
ICAgICAgICAgICAgICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KiBwbHVnaW5FbGVtZW50ID0g
dG9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KG93bmVyRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAg
cGx1Z2luRWxlbWVudC0+dXBkYXRlU25hcHNob3RJbmZvKCk7CisgICAgICAgICAgICAgICAgcGx1
Z2luRWxlbWVudC0+Y2hlY2tTbmFwc2hvdFN0YXR1cygpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNjE0LDYgKzI2MTUsMTAgQEAgdm9pZCBGcmFt
ZVZpZXc6OnVwZGF0ZVdpZGdldChSZW5kZXJPYmplY3QqIG9iamVjdCkKICAgICAgICAgLy8gdXBk
YXRlV2lkZ2V0KFBsdWdpbkNyZWF0aW9uT3B0aW9uKSBvbiBIVE1MRWxlbWVudC4KICAgICAgICAg
aWYgKG93bmVyRWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpIHx8IG93bmVyRWxlbWVudC0+
aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgb3duZXJFbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRh
ZykpIHsKICAgICAgICAgICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQqIHBsdWdpbkVsZW1lbnQg
PSB0b0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQob3duZXJFbGVtZW50KTsKKyAgICAgICAgICAgIGlm
IChwbHVnaW5FbGVtZW50LT5uZWVkc0NoZWNrRm9yU2l6ZUNoYW5nZSgpKSB7CisgICAgICAgICAg
ICAgICAgcGx1Z2luRWxlbWVudC0+Y2hlY2tTbmFwc2hvdFN0YXR1cygpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChwbHVnaW5FbGVtZW50
LT5uZWVkc1dpZGdldFVwZGF0ZSgpKQogICAgICAgICAgICAgICAgIHBsdWdpbkVsZW1lbnQtPnVw
ZGF0ZVdpZGdldChDcmVhdGVBbnlXaWRnZXRUeXBlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3QmFzZS5oIGIvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5WaWV3QmFzZS5oCmluZGV4IGI2MGZhOTIuLjZjMzJlNzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlld0Jhc2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXdCYXNlLmgKQEAgLTY0LDYgKzY0LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgYm9vbCBjYW5Qcm9jZXNzRHJhZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQWx3YXlzQXV0b1N0YXJ0KCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5TbmFwc2hvdHRpbmdSdW5uaW5n
UGx1Z2luKCkgeyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQWxsb3dOYXZpZ2F0aW9uRnJv
bURyYWdzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKaW5kZXggZDBkNDU1YS4uMmM4ZTg2
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmpl
Y3QuY3BwCkBAIC0yOTMsMTEgKzI5MywzMCBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0Ojps
YXlvdXQoKQogCiAgICAgdXBkYXRlTGF5ZXJUcmFuc2Zvcm0oKTsKIAotICAgIGlmICghd2lkZ2V0
KCkgJiYgZnJhbWVWaWV3KCkgJiYgY2FuSGF2ZVdpZGdldCgpKQorICAgIGJvb2wgd2FzTWlzc2lu
Z1dpZGdldCA9IGZhbHNlOworICAgIGlmICghd2lkZ2V0KCkgJiYgZnJhbWVWaWV3KCkgJiYgY2Fu
SGF2ZVdpZGdldCgpKSB7CisgICAgICAgIHdhc01pc3NpbmdXaWRnZXQgPSB0cnVlOwogICAgICAg
ICBmcmFtZVZpZXcoKS0+YWRkV2lkZ2V0VG9VcGRhdGUodGhpcyk7CisgICAgfQogCiAgICAgc2V0
TmVlZHNMYXlvdXQoZmFsc2UpOwogCisgICAgTGF5b3V0U2l6ZSBuZXdTaXplID0gY29udGVudEJv
eFJlY3QoKS5zaXplKCk7CisKKyAgICBpZiAoIXdhc01pc3NpbmdXaWRnZXQgJiYgbmV3U2l6ZS53
aWR0aCgpID49IG9sZFNpemUud2lkdGgoKSAmJiBuZXdTaXplLmhlaWdodCgpID49IG9sZFNpemUu
aGVpZ2h0KCkpIHsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKCkp
OworICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5pc1BsdWdpbkVsZW1lbnQoKSkgewor
ICAgICAgICAgICAgSFRNTFBsdWdJbkVsZW1lbnQqIHBsdWdJbkVsZW1lbnQgPSB0b0hUTUxQbHVn
SW5FbGVtZW50KGVsZW1lbnQpOworICAgICAgICAgICAgaWYgKHBsdWdJbkVsZW1lbnQtPmlzUGx1
Z0luSW1hZ2VFbGVtZW50KCkgJiYgcGx1Z0luRWxlbWVudC0+ZGlzcGxheVN0YXRlKCkgPiBIVE1M
UGx1Z0luRWxlbWVudDo6RGlzcGxheWluZ1NuYXBzaG90KSB7CisgICAgICAgICAgICAgICAgSFRN
TFBsdWdJbkltYWdlRWxlbWVudCogcGx1Z0luSW1hZ2VFbGVtZW50ID0gdG9IVE1MUGx1Z0luSW1h
Z2VFbGVtZW50KGVsZW1lbnQpOworICAgICAgICAgICAgICAgIGlmIChwbHVnSW5JbWFnZUVsZW1l
bnQtPnNuYXBzaG90RGVjaXNpb24oKSA9PSBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpNYXlTbmFw
c2hvdFdoZW5SZXNpemVkICYmIGRvY3VtZW50KCktPnZpZXcoKSkgeworICAgICAgICAgICAgICAg
ICAgICBwbHVnSW5JbWFnZUVsZW1lbnQtPnNldE5lZWRzQ2hlY2tGb3JTaXplQ2hhbmdlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPnZpZXcoKS0+YWRkV2lkZ2V0VG9VcGRhdGUo
dGhpcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCiAgICAgaWYgKCFjYW5IYXZlQ2hpbGRyZW4oKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0z
MTIsNyArMzMxLDYgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6bGF5b3V0KCkKICAgICBp
ZiAoIWNoaWxkQm94KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgTGF5b3V0U2l6ZSBuZXdT
aXplID0gY29udGVudEJveFJlY3QoKS5zaXplKCk7CiAgICAgaWYgKG5ld1NpemUgPT0gb2xkU2l6
ZSAmJiAhY2hpbGRCb3gtPm5lZWRzTGF5b3V0KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCA4M2E1YjU5Li4yY2RkOWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTMtMDQtMTUgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgorCisgICAgICAgIFBs
dWdpbnMgdGhhdCByZXNpemUgbWlnaHQgbmVlZCB0byBiZSBzbmFwc2hvdHRlZC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjE1NworICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMTI2OTYyNTk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWxsb3cgYSBydW5uaW5nIHBsdWdpbiB0byBiZSBzbmFwc2hvdHRl
ZC4gQWxsIHRoaXMKKyAgICAgICAgbWVhbnMgaXMgdGhhdCB3ZSBzdGFydCB0aGUgc25hcHNob3Qg
dGltZXIgYWdhaW4uCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OmJlZ2luU25hcHNob3R0aW5nUnVubmlu
Z1BsdWdpbik6IFJlc3RhcnQKKyAgICAgICAgICAgIHRoZSB0aW1lci4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oOiBWaXJ0dWFsIG1ldGhvZCBkZWNsYXJhdGlvbi4K
KwogMjAxMy0wNC0xNCAgQ2hyaXN0b3BoZSBEdW1leiAgPGNoLmR1bWV6QHNpc2Euc2Ftc3VuZy5j
b20+CiAKICAgICAgICAgW0VGTF1bV0syXSBSZWdyZXNzaW9uKHIxNDgyNzQpOiBCcm9rZSByZW5k
ZXJpbmcgaW4gdGhlIGJyb3dzZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCAxMDUzZGI0Li5lYzQ2NThiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0xNjQwLDYg
KzE2NDAsMTEgQEAgdm9pZCBQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRpbWVyRmlyZWQoRGVm
ZXJyYWJsZU9uZVNob3RUaW1lcjxQbHVnaW5WaWV3PiopCiAgICAgbV9wbHVnaW5FbGVtZW50LT5z
ZXREaXNwbGF5U3RhdGUoSFRNTFBsdWdJbkVsZW1lbnQ6OkRpc3BsYXlpbmdTbmFwc2hvdCk7CiB9
CiAKK3ZvaWQgUGx1Z2luVmlldzo6YmVnaW5TbmFwc2hvdHRpbmdSdW5uaW5nUGx1Z2luKCkKK3sK
KyAgICBtX3BsdWdpblNuYXBzaG90VGltZXIucmVzdGFydCgpOworfQorCiBib29sIFBsdWdpblZp
ZXc6OnNob3VsZEFsd2F5c0F1dG9TdGFydCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BsdWdpbikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oCmluZGV4
IDZiZDI2NDYuLmM2ODQxYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5WaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblZpZXcuaApAQCAtMTQ4LDYgKzE0OCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCBXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCk7CiAgICAgdmlydHVhbCBi
b29sIHdhbnRzV2hlZWxFdmVudHMoKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQWx3YXlzQXV0
b1N0YXJ0KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luU25hcHNob3R0
aW5nUnVubmluZ1BsdWdpbigpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBbGxv
d05hdmlnYXRpb25Gcm9tRHJhZ3MoKSBjb25zdCBPVkVSUklERTsKIAogICAgIC8vIFdlYkNvcmU6
OldpZGdldAo=
</data>
<flag name="review"
          id="219997"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>