<?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>72964</bug_id>
          
          <creation_ts>2011-11-22 09:50:29 -0800</creation_ts>
          <short_desc>[chromium] Set opaque flag for ImageLayerChromium</short_desc>
          <delta_ts>2011-12-06 13:44:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>73898</dependson>
          <blocked>72980</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>backer</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>reveman</cc>
    
    <cc>scherkus</cc>
    
    <cc>vrk</cc>
    
    <cc>vsevik</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wjmaclean</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>507652</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-22 09:50:29 -0800</bug_when>
    <thetext>This is similar to code required in RenderImage::foregroundContentsAreaIsOpaqueInRect() in bug #70634</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507653</commentid>
    <comment_count>1</comment_count>
      <attachid>116237</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-22 09:52:00 -0800</bug_when>
    <thetext>Created attachment 116237
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507731</commentid>
    <comment_count>2</comment_count>
      <attachid>116257</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-22 11:47:24 -0800</bug_when>
    <thetext>Created attachment 116257
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507732</commentid>
    <comment_count>3</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-22 11:50:01 -0800</bug_when>
    <thetext>Setting the opaque flag on the GraphicsLayer allows us to test which layers are opaque, and have a consistent view of the status.

I&apos;d like to make a LayoutTest for this but it requires printing the contentsOpaque flag which is coming in bug #70634.

I will make a new bug that depends on this with a LayoutTest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513218</commentid>
    <comment_count>4</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-01 15:58:07 -0800</bug_when>
    <thetext>Had insightful conversations with @reveman and @enne, and changing this patch accordingly.

No longer pushing the opaque stuff back into GraphicsLayer, as maintaining consistency with GraphicsLayer is not deemed correct. Instead, each layer can explicitly control its opaque() flag independently of the GraphicsLayer::contentsOpaque value via a new virtual function LayerChromium::updateOpaque().

Then set opaque on Image, Video and Canvas layers appropriately. Unit tests for Image and Video included. (Is the Canvas one worth testing? it&apos;s pretty simple.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513222</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-01 16:00:44 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Had insightful conversations with @reveman and @enne, and changing this patch accordingly.
&gt; 
&gt; No longer pushing the opaque stuff back into GraphicsLayer, as maintaining consistency with GraphicsLayer is not deemed correct. Instead, each layer can explicitly control its opaque() flag independently of the GraphicsLayer::contentsOpaque value via a new virtual function LayerChromium::updateOpaque().
&gt; 
&gt; Then set opaque on Image, Video and Canvas layers appropriately. Unit tests for Image and Video included. (Is the Canvas one worth testing? it&apos;s pretty simple.)

Canvases are typically *not* opaque. I&apos;m not sure how you would easily test if a canvas were opaque, that&apos;s definitely non-trivial.

For video I&apos;m less sure.

I only see logic here for image - did you intend to upload something for canvas/video?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513229</commentid>
    <comment_count>6</comment_count>
      <attachid>117510</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-01 16:03:41 -0800</bug_when>
    <thetext>Created attachment 117510
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513230</commentid>
    <comment_count>7</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-01 16:04:30 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Canvases are typically *not* opaque. I&apos;m not sure how you would easily test if a canvas were opaque, that&apos;s definitely non-trivial.
&gt; 
&gt; For video I&apos;m less sure.
&gt; 
&gt; I only see logic here for image - did you intend to upload something for canvas/video?

Yeh see new patch, sorry it took a sec to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513235</commentid>
    <comment_count>8</comment_count>
      <attachid>117510</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-01 16:13:08 -0800</bug_when>
    <thetext>Comment on attachment 117510
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/CanvasLayerChromium.h:56
&gt; +    void setHasAlpha(bool hasAlpha) { m_hasAlpha = hasAlpha; updateOpaque(); }

all 2d canvases have alpha:

data:text/html;charset=utf-8,%3C!DOCTYPE%20html%3E%0A%3Cdiv%20style%3D%22background-color%3A%20blue%3B%20width%3A50px%3B%20height%3A50px%22%3E%3C%2Fdiv%3E%0A%3Ccanvas%20style%3D%22position%3Aabsolute%3B%20top%3A0px%3B%20left%3A0px%22%20width%3D40%20height%3D40%3E%3C%2Fcanvas%3E%0A%3Cscript%3E%0Avar%20c%3Ddocument.querySelector(%22canvas%22).getContext(%222d%22)%3B%0Ac.fillStyle%3D%22rgba(0%2C128%2C0%2C0.5)%22%3B%0Ac.fillRect(0%2C%200%2C%2040%2C%2040)%3B%0A%3C%2Fscript%3E

We could do some complex logic to try to detect if every pixel of the canvas was actually opaque but that&apos;s a bit involved. I think this should go on WebGLLayerChromium since that actually has an &apos;has alpha&apos; bit.

&gt; Source/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:156
&gt; +    bool frameOpaque = m_frameFormat != VideoFrameChromium::RGBA &amp;&amp; m_frameFormat != VideoFrameChromium::Invalid &amp;&amp; m_frameFormat != VideoFrameChromium::Empty;

are you sure that every video format except for RGBA is fully opaque, always? even videos decoded straight to a texture? i&apos;m not familiar enough with our video stack and video formats to know if this is true</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513238</commentid>
    <comment_count>9</comment_count>
      <attachid>117510</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-01 16:17:48 -0800</bug_when>
    <thetext>Comment on attachment 117510
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/CanvasLayerChromium.h:56
&gt;&gt; +    void setHasAlpha(bool hasAlpha) { m_hasAlpha = hasAlpha; updateOpaque(); }
&gt; 
&gt; all 2d canvases have alpha:
&gt; 
&gt; data:text/html;charset=utf-8,%3C!DOCTYPE%20html%3E%0A%3Cdiv%20style%3D%22background-color%3A%20blue%3B%20width%3A50px%3B%20height%3A50px%22%3E%3C%2Fdiv%3E%0A%3Ccanvas%20style%3D%22position%3Aabsolute%3B%20top%3A0px%3B%20left%3A0px%22%20width%3D40%20height%3D40%3E%3C%2Fcanvas%3E%0A%3Cscript%3E%0Avar%20c%3Ddocument.querySelector(%22canvas%22).getContext(%222d%22)%3B%0Ac.fillStyle%3D%22rgba(0%2C128%2C0%2C0.5)%22%3B%0Ac.fillRect(0%2C%200%2C%2040%2C%2040)%3B%0A%3C%2Fscript%3E
&gt; 
&gt; We could do some complex logic to try to detect if every pixel of the canvas was actually opaque but that&apos;s a bit involved. I think this should go on WebGLLayerChromium since that actually has an &apos;has alpha&apos; bit.

Sounds good. I will move the m_hasAlpha bit down to the WebGL layer.

&gt;&gt; Source/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:156
&gt;&gt; +    bool frameOpaque = m_frameFormat != VideoFrameChromium::RGBA &amp;&amp; m_frameFormat != VideoFrameChromium::Invalid &amp;&amp; m_frameFormat != VideoFrameChromium::Empty;
&gt; 
&gt; are you sure that every video format except for RGBA is fully opaque, always? even videos decoded straight to a texture? i&apos;m not familiar enough with our video stack and video formats to know if this is true

I was actually hoping for verification of this. I was told the YUV formats for example are always opaque, but I&apos;m not sure which others. Who can I ask this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513244</commentid>
    <comment_count>10</comment_count>
      <attachid>117510</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-12-01 16:22:49 -0800</bug_when>
    <thetext>Comment on attachment 117510
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:224
&gt; +    virtual void updateOpaque() { setOpaque(m_contentsOpaque); }

could we remove setOpaque() and make LayerChromium::opaque() virtual instead of adding updateOpaque()?

&gt;&gt; Source/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:156
&gt;&gt; +    bool frameOpaque = m_frameFormat != VideoFrameChromium::RGBA &amp;&amp; m_frameFormat != VideoFrameChromium::Invalid &amp;&amp; m_frameFormat != VideoFrameChromium::Empty;
&gt; 
&gt; are you sure that every video format except for RGBA is fully opaque, always? even videos decoded straight to a texture? i&apos;m not familiar enough with our video stack and video formats to know if this is true

Maybe make this &quot;frameOpaque = m_frameFormat == VideoFrameChromium::YV12 || m_frameFormat == VideoFrameChromium::YV16&quot; instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513247</commentid>
    <comment_count>11</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-01 16:23:37 -0800</bug_when>
    <thetext>One thing that sucks about this whole mess is the ambiguity about GraphicsLayer::*Contents*. Normally GraphicsLayer functions that talk about &apos;contents&apos; are talking about the GraphicsLayer::m_contentsLayer. For example for an image layer the GraphicsLayer has two PlatformLayers - GraphicsLayer::m_layer has the borders, etc, for the &lt;img&gt; or has drawsContent=false if it&apos;s a simple container layer. For chromium GraphicsLayer::setContentsToImage() creates an ImageLayerChromium, in the CoreAnimation implementation that function (indirectly) creates a CALayer called GraphicsLayer::m_contentsLayer and sets the content of that layer to the image.  Most GraphicsLayer::*Content* functions are about the m_contentsLayer. GraphicsLayer::setContentsOpaque is about the GraphicsLayer::m_layer which makes things all confusing as fuck.

I think we should make GraphicsLayer::setContentsOpaque() refer to the m_contentsLayer and have some other function for saying &apos;the stuff in this GraphicsLayer::m_layer is the thing that is opaque&apos;. If I can catch smfr I&apos;ll run this by him.

If we sort that out then I think cross-platform WebKit code can take care of setting the opaque bit for the GraphicsLayer::m_contentsLayer, at least for image and webgl layers. That would be better IMO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513248</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-01 16:24:18 -0800</bug_when>
    <thetext>Victoria, Scherkus - can you answer the question from comment #9 about which video formats are opaque?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513249</commentid>
    <comment_count>13</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-12-01 16:25:37 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 117510 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117510&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/CanvasLayerChromium.h:56
&gt; &gt;&gt; +    void setHasAlpha(bool hasAlpha) { m_hasAlpha = hasAlpha; updateOpaque(); }
&gt; &gt; 
&gt; &gt; all 2d canvases have alpha:
&gt; &gt; 
&gt; &gt; data:text/html;charset=utf-8,%3C!DOCTYPE%20html%3E%0A%3Cdiv%20style%3D%22background-color%3A%20blue%3B%20width%3A50px%3B%20height%3A50px%22%3E%3C%2Fdiv%3E%0A%3Ccanvas%20style%3D%22position%3Aabsolute%3B%20top%3A0px%3B%20left%3A0px%22%20width%3D40%20height%3D40%3E%3C%2Fcanvas%3E%0A%3Cscript%3E%0Avar%20c%3Ddocument.querySelector(%22canvas%22).getContext(%222d%22)%3B%0Ac.fillStyle%3D%22rgba(0%2C128%2C0%2C0.5)%22%3B%0Ac.fillRect(0%2C%200%2C%2040%2C%2040)%3B%0A%3C%2Fscript%3E
&gt; &gt; 
&gt; &gt; We could do some complex logic to try to detect if every pixel of the canvas was actually opaque but that&apos;s a bit involved. I think this should go on WebGLLayerChromium since that actually has an &apos;has alpha&apos; bit.
&gt; 
&gt; Sounds good. I will move the m_hasAlpha bit down to the WebGL layer.
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:156
&gt; &gt;&gt; +    bool frameOpaque = m_frameFormat != VideoFrameChromium::RGBA &amp;&amp; m_frameFormat != VideoFrameChromium::Invalid &amp;&amp; m_frameFormat != VideoFrameChromium::Empty;
&gt; &gt; 
&gt; &gt; are you sure that every video format except for RGBA is fully opaque, always? even videos decoded straight to a texture? i&apos;m not familiar enough with our video stack and video formats to know if this is true
&gt; 
&gt; I was actually hoping for verification of this. I was told the YUV formats for example are always opaque, but I&apos;m not sure which others. Who can I ask this?

We only need to care about the formats we can actually render. Right now that is YV12 and YV16.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513254</commentid>
    <comment_count>14</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-01 16:32:00 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 117510 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117510&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/CanvasLayerChromium.h:56
&gt; &gt; &gt;&gt; +    void setHasAlpha(bool hasAlpha) { m_hasAlpha = hasAlpha; updateOpaque(); }
&gt; &gt; &gt; 
&gt; &gt; &gt; all 2d canvases have alpha:
&gt; &gt; &gt; 
&gt; &gt; &gt; data:text/html;charset=utf-8,%3C!DOCTYPE%20html%3E%0A%3Cdiv%20style%3D%22background-color%3A%20blue%3B%20width%3A50px%3B%20height%3A50px%22%3E%3C%2Fdiv%3E%0A%3Ccanvas%20style%3D%22position%3Aabsolute%3B%20top%3A0px%3B%20left%3A0px%22%20width%3D40%20height%3D40%3E%3C%2Fcanvas%3E%0A%3Cscript%3E%0Avar%20c%3Ddocument.querySelector(%22canvas%22).getContext(%222d%22)%3B%0Ac.fillStyle%3D%22rgba(0%2C128%2C0%2C0.5)%22%3B%0Ac.fillRect(0%2C%200%2C%2040%2C%2040)%3B%0A%3C%2Fscript%3E
&gt; &gt; &gt; 
&gt; &gt; &gt; We could do some complex logic to try to detect if every pixel of the canvas was actually opaque but that&apos;s a bit involved. I think this should go on WebGLLayerChromium since that actually has an &apos;has alpha&apos; bit.
&gt; &gt; 
&gt; &gt; Sounds good. I will move the m_hasAlpha bit down to the WebGL layer.
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:156
&gt; &gt; &gt;&gt; +    bool frameOpaque = m_frameFormat != VideoFrameChromium::RGBA &amp;&amp; m_frameFormat != VideoFrameChromium::Invalid &amp;&amp; m_frameFormat != VideoFrameChromium::Empty;
&gt; &gt; &gt; 
&gt; &gt; &gt; are you sure that every video format except for RGBA is fully opaque, always? even videos decoded straight to a texture? i&apos;m not familiar enough with our video stack and video formats to know if this is true
&gt; &gt; 
&gt; &gt; I was actually hoping for verification of this. I was told the YUV formats for example are always opaque, but I&apos;m not sure which others. Who can I ask this?
&gt; 
&gt; We only need to care about the formats we can actually render. Right now that is YV12 and YV16.

That seems short-sighted.  For example, earlier this week Ami landed support for externally decoded texture video rendering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513259</commentid>
    <comment_count>15</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-01 16:36:19 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 117510 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117510&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:224
&gt; &gt; +    virtual void updateOpaque() { setOpaque(m_contentsOpaque); }
&gt; 
&gt; could we remove setOpaque() and make LayerChromium::opaque() virtual instead of adding updateOpaque()?

I chose to do it this way because deciding if something is opaque could require some amount of work, so it seemed worth it to just save it in a bool on update.  For instance an image currentFrameHasAlpha() function seems completely out of our control and don&apos;t want to put it in a code path it doesn&apos;t need to be in. What do you think of this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513260</commentid>
    <comment_count>16</comment_count>
    <who name="Andrew Scherkus">scherkus</who>
    <bug_when>2011-12-01 16:37:41 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; (From update of attachment 117510 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117510&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/CanvasLayerChromium.h:56
&gt; &gt; &gt; &gt;&gt; +    void setHasAlpha(bool hasAlpha) { m_hasAlpha = hasAlpha; updateOpaque(); }
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; all 2d canvases have alpha:
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; data:text/html;charset=utf-8,%3C!DOCTYPE%20html%3E%0A%3Cdiv%20style%3D%22background-color%3A%20blue%3B%20width%3A50px%3B%20height%3A50px%22%3E%3C%2Fdiv%3E%0A%3Ccanvas%20style%3D%22position%3Aabsolute%3B%20top%3A0px%3B%20left%3A0px%22%20width%3D40%20height%3D40%3E%3C%2Fcanvas%3E%0A%3Cscript%3E%0Avar%20c%3Ddocument.querySelector(%22canvas%22).getContext(%222d%22)%3B%0Ac.fillStyle%3D%22rgba(0%2C128%2C0%2C0.5)%22%3B%0Ac.fillRect(0%2C%200%2C%2040%2C%2040)%3B%0A%3C%2Fscript%3E
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; We could do some complex logic to try to detect if every pixel of the canvas was actually opaque but that&apos;s a bit involved. I think this should go on WebGLLayerChromium since that actually has an &apos;has alpha&apos; bit.
&gt; &gt; &gt; 
&gt; &gt; &gt; Sounds good. I will move the m_hasAlpha bit down to the WebGL layer.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:156
&gt; &gt; &gt; &gt;&gt; +    bool frameOpaque = m_frameFormat != VideoFrameChromium::RGBA &amp;&amp; m_frameFormat != VideoFrameChromium::Invalid &amp;&amp; m_frameFormat != VideoFrameChromium::Empty;
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; are you sure that every video format except for RGBA is fully opaque, always? even videos decoded straight to a texture? i&apos;m not familiar enough with our video stack and video formats to know if this is true
&gt; &gt; &gt; 
&gt; &gt; &gt; I was actually hoping for verification of this. I was told the YUV formats for example are always opaque, but I&apos;m not sure which others. Who can I ask this?
&gt; &gt; 
&gt; &gt; We only need to care about the formats we can actually render. Right now that is YV12 and YV16.
&gt; 
&gt; That seems short-sighted.  For example, earlier this week Ami landed support for externally decoded texture video rendering.

Flash shipped with VP6 that had alpha channel support but other than that video codecs are opaque.

There&apos;s also a handful of other opaque YUV formats that should be on our radar (YV18 for YUV444 support, camera formats, etc...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513269</commentid>
    <comment_count>17</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-01 16:48:20 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Flash shipped with VP6 that had alpha channel support but other than that video codecs are opaque.

And I don&apos;t see VP6 in VideoFrameChromium.h

&gt; There&apos;s also a handful of other opaque YUV formats that should be on our radar (YV18 for YUV444 support, camera formats, etc...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513274</commentid>
    <comment_count>18</comment_count>
    <who name="Andrew Scherkus">scherkus</who>
    <bug_when>2011-12-01 16:50:53 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; Flash shipped with VP6 that had alpha channel support but other than that video codecs are opaque.
&gt; 
&gt; And I don&apos;t see VP6 in VideoFrameChromium.h

Right, so lets not worry about alpha video formats for now.  When they do come there&apos;ll be many more things that I&apos;ll have to fix anyway :)
 
&gt; &gt; There&apos;s also a handful of other opaque YUV formats that should be on our radar (YV18 for YUV444 support, camera formats, etc...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513277</commentid>
    <comment_count>19</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-01 16:53:23 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; One thing that sucks about this whole mess is the ambiguity about GraphicsLayer::*Contents*. Normally GraphicsLayer functions that talk about &apos;contents&apos; are talking about the GraphicsLayer::m_contentsLayer. For example for an image layer the GraphicsLayer has two PlatformLayers - GraphicsLayer::m_layer has the borders, etc, for the &lt;img&gt; or has drawsContent=false if it&apos;s a simple container layer. For chromium GraphicsLayer::setContentsToImage() creates an ImageLayerChromium, in the CoreAnimation implementation that function (indirectly) creates a CALayer called GraphicsLayer::m_contentsLayer and sets the content of that layer to the image.  Most GraphicsLayer::*Content* functions are about the m_contentsLayer. GraphicsLayer::setContentsOpaque is about the GraphicsLayer::m_layer which makes things all confusing as fuck.

In my code so far it&apos;s being used to represent the box decorations and the contents box. Which I guess would be some part of both layers together when both are present (are they always or is m_contentsLayer just for accelerated compositing?).

&gt; I think we should make GraphicsLayer::setContentsOpaque() refer to the m_contentsLayer and have some other function for saying &apos;the stuff in this GraphicsLayer::m_layer is the thing that is opaque&apos;. If I can catch smfr I&apos;ll run this by him.
&gt; 
&gt; If we sort that out then I think cross-platform WebKit code can take care of setting the opaque bit for the GraphicsLayer::m_contentsLayer, at least for image and webgl layers. That would be better IMO.

That does sound better. But also sounds like it could be ways out. Would you like to land something that&apos;ll work in the meantime and then fix it up later? I don&apos;t want to just use the opaque() flag in tot, because GraphicsLayer::setContentsOpaque would conflict with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513305</commentid>
    <comment_count>20</comment_count>
      <attachid>117510</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-12-01 17:08:50 -0800</bug_when>
    <thetext>Comment on attachment 117510
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:224
&gt;&gt;&gt; +    virtual void updateOpaque() { setOpaque(m_contentsOpaque); }
&gt;&gt; 
&gt;&gt; could we remove setOpaque() and make LayerChromium::opaque() virtual instead of adding updateOpaque()?
&gt; 
&gt; I chose to do it this way because deciding if something is opaque could require some amount of work, so it seemed worth it to just save it in a bool on update.  For instance an image currentFrameHasAlpha() function seems completely out of our control and don&apos;t want to put it in a code path it doesn&apos;t need to be in. What do you think of this?

One way or another I would like a single source of authority.
Today you can call both setContentsOpaque and setOpaque on a layer, and they clobber each other&apos;s state.
WebLayer and friends still call setOpaque - they should be fixed.

Note: setContentsOpaque sounds like it doesn&apos;t belong to LayerChromium, and should probably be in ContentLayerChromium. Unfortunately GLC doesn&apos;t keep track of which type of LayerChromium it&apos;s operating on, so it can&apos;t do a safe downcast (it&apos;s not the only case, setNeedsDisplay comes to mind)... I hate to introduce more like this, but at the same time, I don&apos;t have a great idea about how to fix this short of refactoring GLC...

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:156
&gt;&gt;&gt;&gt; +    bool frameOpaque = m_frameFormat != VideoFrameChromium::RGBA &amp;&amp; m_frameFormat != VideoFrameChromium::Invalid &amp;&amp; m_frameFormat != VideoFrameChromium::Empty;
&gt;&gt;&gt; 
&gt;&gt;&gt; are you sure that every video format except for RGBA is fully opaque, always? even videos decoded straight to a texture? i&apos;m not familiar enough with our video stack and video formats to know if this is true
&gt;&gt; 
&gt;&gt; I was actually hoping for verification of this. I was told the YUV formats for example are always opaque, but I&apos;m not sure which others. Who can I ask this?
&gt; 
&gt; Maybe make this &quot;frameOpaque = m_frameFormat == VideoFrameChromium::YV12 || m_frameFormat == VideoFrameChromium::YV16&quot; instead?

How about pushing this to a VideoFrameChromium::isFormatOpaque so that it&apos;s easier to keep in sync with the enum there?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513308</commentid>
    <comment_count>21</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-12-01 17:11:25 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; (In reply to comment #16)
&gt; &gt; &gt; Flash shipped with VP6 that had alpha channel support but other than that video codecs are opaque.
&gt; &gt; 
&gt; &gt; And I don&apos;t see VP6 in VideoFrameChromium.h
&gt; 
&gt; Right, so lets not worry about alpha video formats for now.  When they do come there&apos;ll be many more things that I&apos;ll have to fix anyway :)

I&apos;d prefer this to be exclusive rather than inclusive so that if someone forgets to update the opaque() value when adding a new format, we might just get a bit less efficient occlusion culling instead of incorrect rendering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513313</commentid>
    <comment_count>22</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-12-01 17:15:56 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 117510 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117510&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:224
&gt; &gt;&gt;&gt; +    virtual void updateOpaque() { setOpaque(m_contentsOpaque); }
&gt; &gt;&gt; 
&gt; &gt;&gt; could we remove setOpaque() and make LayerChromium::opaque() virtual instead of adding updateOpaque()?
&gt; &gt; 
&gt; &gt; I chose to do it this way because deciding if something is opaque could require some amount of work, so it seemed worth it to just save it in a bool on update.  For instance an image currentFrameHasAlpha() function seems completely out of our control and don&apos;t want to put it in a code path it doesn&apos;t need to be in. What do you think of this?
&gt; 
&gt; One way or another I would like a single source of authority.
&gt; Today you can call both setContentsOpaque and setOpaque on a layer, and they clobber each other&apos;s state.
&gt; WebLayer and friends still call setOpaque - they should be fixed.
&gt; 
&gt; Note: setContentsOpaque sounds like it doesn&apos;t belong to LayerChromium, and should probably be in ContentLayerChromium. Unfortunately GLC doesn&apos;t keep track of which type of LayerChromium it&apos;s operating on, so it can&apos;t do a safe downcast (it&apos;s not the only case, setNeedsDisplay comes to mind)... I hate to introduce more like this, but at the same time, I don&apos;t have a great idea about how to fix this short of refactoring GLC...
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:156
&gt; &gt;&gt;&gt;&gt; +    bool frameOpaque = m_frameFormat != VideoFrameChromium::RGBA &amp;&amp; m_frameFormat != VideoFrameChromium::Invalid &amp;&amp; m_frameFormat != VideoFrameChromium::Empty;
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; are you sure that every video format except for RGBA is fully opaque, always? even videos decoded straight to a texture? i&apos;m not familiar enough with our video stack and video formats to know if this is true
&gt; &gt;&gt; 
&gt; &gt;&gt; I was actually hoping for verification of this. I was told the YUV formats for example are always opaque, but I&apos;m not sure which others. Who can I ask this?
&gt; &gt; 
&gt; &gt; Maybe make this &quot;frameOpaque = m_frameFormat == VideoFrameChromium::YV12 || m_frameFormat == VideoFrameChromium::YV16&quot; instead?
&gt; 
&gt; How about pushing this to a VideoFrameChromium::isFormatOpaque so that it&apos;s easier to keep in sync with the enum there?

That sounds good.

Another concern of mine right now is that we don&apos;t seem to know what the format used by the external decoder is. It might happen to always be opaque formats right now but I think it&apos;s incorrect to assume that until we&apos;re actually aware of the format used from within VideoLayerChromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513325</commentid>
    <comment_count>23</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-12-01 17:30:11 -0800</bug_when>
    <thetext>Isn&apos;t contents opacity a property of the layer delegate? The layer delegate is the one we go to paint, so why not just ask it whether the thing it just painted was opaque or not?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513490</commentid>
    <comment_count>24</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-12-01 22:23:07 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #10)
&gt; &gt; (From update of attachment 117510 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117510&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:224
&gt; &gt; &gt; +    virtual void updateOpaque() { setOpaque(m_contentsOpaque); }
&gt; &gt; 
&gt; &gt; could we remove setOpaque() and make LayerChromium::opaque() virtual instead of adding updateOpaque()?
&gt; 
&gt; I chose to do it this way because deciding if something is opaque could require some amount of work, so it seemed worth it to just save it in a bool on update.  For instance an image currentFrameHasAlpha() function seems completely out of our control and don&apos;t want to put it in a code path it doesn&apos;t need to be in. What do you think of this?

I think that a simple &quot;virtual bool LayerChromium::isOpaque()&quot; is preferred. If it happens to be too expensive for some layer type to compute this every time isOpaque() is called, that could instead be handled by that specific layer implementation.

There are a few layer functions that are not returning valid values for the current update until prepareToPaintIfDirty has been called. I think isOpaque should fall into this same category of functions, which means prepareToPaintIfDirty is a good time to compute a new value that will be returned by isOpaque().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513761</commentid>
    <comment_count>25</comment_count>
      <attachid>117623</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-02 08:01:47 -0800</bug_when>
    <thetext>Created attachment 117623
Patch

(In reply to comment #9)
&gt; &gt; We could do some complex logic to try to detect if every pixel of the canvas was actually opaque but that&apos;s a bit involved. I think this should go on WebGLLayerChromium since that actually has an &apos;has alpha&apos; bit.
&gt; 
&gt; Sounds good. I will move the m_hasAlpha bit down to the WebGL layer.

The reason the m_hasAlpha bit is on the CanvasLayerChromium is because it is also on the CCCanvasLayerChromium, even though the WebGL layer is the only subtype to actually set the flag.

This is one way to move the alpha bits to the WebGL layer, but it leaves it out of the pushPropertiesTo call entirely in the Canvas layer. Is that okay?  An alternate means could be to have a virtual hasAlpha() function on the Canvas layer and push that, and have the WebGL layer override and return its m_hasAlpha.

Lots of good new feeback to go through also, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513779</commentid>
    <comment_count>26</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-02 08:22:44 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; Isn&apos;t contents opacity a property of the layer delegate? The layer delegate is the one we go to paint, so why not just ask it whether the thing it just painted was opaque or not?

If I understand correctly, we paint from bottom to top. Waiting to decide if something is opaque until it was painted would exclude is from occlusion culling below an opaque. I&apos;ve been specifically avoiding putting the contentsOpaque computation into the paint pass for this reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513874</commentid>
    <comment_count>27</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-02 09:59:38 -0800</bug_when>
    <thetext>Nat actually brought up an amazing point, and had a long discussion with @reveman re the feasibility of this.

We could traverse layers top to bottom, painting each in webkit, then checking the opaque bit via delegate, and using that to decide occlusion on further layers below.

The best part of this is that if we push this off to the delegate, then I can compute contentsOpaque in webkit during the painting process, which would be a huge win for that CL.

I&apos;m going to drop the contentsOpaque() from the LC here, and push it up to the delegate class. I think this means storing the contentsOpaque bit from GraphicsLayer in the GraphicsLayerChromium instead.

@jamesr can you verify that you want the m_hasAlpha flag moved down to WebGLLayerChromium? It doesn&apos;t feel right to me since it&apos;s copied to CCCanvasLayerChromium. I think with the virtual bool opaque() function, it&apos;s a lot cleaner, and doesn&apos;t require adding the hasAlpha()/setHasAlpha() functions to CanvasLayerChromium. So maybe the desire to move it would be less then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513898</commentid>
    <comment_count>28</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-12-02 10:24:40 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; Nat actually brought up an amazing point, and had a long discussion with @reveman re the feasibility of this.
&gt; 
&gt; We could traverse layers top to bottom, painting each in webkit, then checking the opaque bit via delegate, and using that to decide occlusion on further layers below.

My parallel paint/upload and shared memory painting patches requires us to accurately allocate compositor resources prior to painting. It would be bad to allocate shared memory for a tile that we end up not painting. So I&apos;ll have to make some minor adjustments to these patches. There&apos;s currently no reason for why we can&apos;t do the layer paint call prior to resource allocation. It&apos;s just the per-tile painting that needs to happen after resource allocation so this should work fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513999</commentid>
    <comment_count>29</comment_count>
      <attachid>117665</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-02 12:07:36 -0800</bug_when>
    <thetext>Created attachment 117665
Patch

This pushes the idea of painted contents being opaque off to the layer delegate, and makes the LayerChromium opaque bits independent from that, where layers set their opaque flag intelligently based on internal knowledge about themselves.

- Removed hasAlpha from CanvasLayer and CCCanvasLayer (they can use opaque() for this).
- Removed GLC::setContentsOpaque/updateContentsOpaque. The contentsOpaque is going to be something to be queried off the CCLayerDelegate after paintContents().
- Added contentsOpaque to various CCLayerDelegates in the WebLayer hierarchy.
- LC subclasses just setOpaque() directly.
- Added VideoFrameChromium::isFrameOpaque().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514001</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-02 12:10:19 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514017</commentid>
    <comment_count>31</comment_count>
      <attachid>117665</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-02 12:44:04 -0800</bug_when>
    <thetext>Comment on attachment 117665
Patch

GraphicsLayer::contentsOpaque is a useful bit and has nothing to do with the opaque-ness of the image/webgl/canvas/video content inside a layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514024</commentid>
    <comment_count>32</comment_count>
      <attachid>117665</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-12-02 12:49:44 -0800</bug_when>
    <thetext>Comment on attachment 117665
Patch

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

I would really like a single source of authority... I&apos;m still confused about which layer calls contentsOpaque vs expects setOpaque to be called etc. Even more confusing that it seems different between the Web*Layers and the *LayerChromium

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:65
&gt; +    virtual bool contentsOpaque() const = 0;

Where is that called?

Also, shouldn&apos;t LayerChromium::setOpaque go?

&gt; Source/WebKit/chromium/public/WebContentLayerClient.h:42
&gt; +    virtual bool contentsOpaque() const = 0;

This conflicts with WebLayer::setOpaque - it needs to go.

&gt; Source/WebKit/chromium/src/WebExternalTextureLayerImpl.cpp:65
&gt; +    return false;

NAK, we need opaque WebExternalTextureLayers. You could add setOpaque back onto WebExternalTextureLayer, leaving it as a local state on the WebExternalTextureLayerImpl.
But we also need to get PluginLayerChromium to query this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514031</commentid>
    <comment_count>33</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-02 12:57:09 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; Isn&apos;t contents opacity a property of the layer delegate? The layer delegate is the one we go to paint, so why not just ask it whether the thing it just painted was opaque or not?

The problem here is we don&apos;t &quot;paint&quot; any of these layer types.  In fact I think we should probably break up the delegate types out a bit to reflect this - the only *LayerChromium type for which the paintContents() call is used is ContentLayerChromium.

The types of layers we&apos;re talking about here all map to the GraphicsLayer&apos;s m_contentsLayer.

I&apos;ll put a diagram up somewhere to make this easier to talk about.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514033</commentid>
    <comment_count>34</comment_count>
      <attachid>117665</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-12-02 12:57:37 -0800</bug_when>
    <thetext>Comment on attachment 117665
Patch

Did you consider using the return value of paintContents for opaqueness? contentsOpaque() will only be valid after you called paintContents so it would nice to just have it part of the paintContents function call.

Also could we make m_opaque protected instead of private and get rid of the LayerChromium::setOpaque function? or make setOpaque protected?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514037</commentid>
    <comment_count>35</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-02 12:59:43 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; (From update of attachment 117665 [details])
&gt; Did you consider using the return value of paintContents for opaqueness? contentsOpaque() will only be valid after you called paintContents so it would nice to just have it part of the paintContents function call.
&gt; 
&gt; Also could we make m_opaque protected instead of private and get rid of the LayerChromium::setOpaque function? or make setOpaque protected?

Again there is no paint for image, video, webgl, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514039</commentid>
    <comment_count>36</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-02 13:00:57 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; (In reply to comment #23)
&gt; &gt; Isn&apos;t contents opacity a property of the layer delegate? The layer delegate is the one we go to paint, so why not just ask it whether the thing it just painted was opaque or not?
&gt; 
&gt; The problem here is we don&apos;t &quot;paint&quot; any of these layer types.  In fact I think we should probably break up the delegate types out a bit to reflect this - the only *LayerChromium type for which the paintContents() call is used is ContentLayerChromium.

Maybe this is confusing because I did the delegate thing in this patch. I was basically attempting to disconnect GL::contentsOpaque from LC::opaque, and then have LC subclasses set LC::opaque appropriately.

I didn&apos;t want to leave GL::contentsOpaque inaccessible from LC, as we&apos;d like to use it for paint culling, so I stuck it in the delegate here, even though it is not used anywhere right now. Maybe I should just take that part out and do it in a separate CL?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514040</commentid>
    <comment_count>37</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-02 13:02:24 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; (In reply to comment #33)
&gt; &gt; (In reply to comment #23)
&gt; &gt; &gt; Isn&apos;t contents opacity a property of the layer delegate? The layer delegate is the one we go to paint, so why not just ask it whether the thing it just painted was opaque or not?
&gt; &gt; 
&gt; &gt; The problem here is we don&apos;t &quot;paint&quot; any of these layer types.  In fact I think we should probably break up the delegate types out a bit to reflect this - the only *LayerChromium type for which the paintContents() call is used is ContentLayerChromium.
&gt; 
&gt; Maybe this is confusing because I did the delegate thing in this patch. I was basically attempting to disconnect GL::contentsOpaque from LC::opaque, and then have LC subclasses set LC::opaque appropriately.
&gt; 
&gt; I didn&apos;t want to leave GL::contentsOpaque inaccessible from LC, as we&apos;d like to use it for paint culling, so I stuck it in the delegate here, even though it is not used anywhere right now. Maybe I should just take that part out and do it in a separate CL?

I think this is confusing because we have many layer trees that are not isomorphic and that do different things. Pretty much every comment here is talking about a different layer type with different behavior and it all makes me very sad :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514082</commentid>
    <comment_count>38</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-02 13:45:54 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; (From update of attachment 117665 [details])
&gt; Also could we make m_opaque protected instead of private and get rid of the LayerChromium::setOpaque function? or make setOpaque protected?

Making setOpaque protected is a good call since it&apos;s meant only for its subclasses, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514096</commentid>
    <comment_count>39</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-02 13:55:58 -0800</bug_when>
    <thetext>Here&apos;s a simplified example of what happens for a composited &lt;img src=&quot;cat.png&quot;&gt;:

http://www.diagrammr.com/edit?key=dR35BSNm9w4

If WebCore calls GraphicsLayer::setContentsOpaque(), it is referring to the ContentsLayerChromium pointed to by GraphicsLayer::m_layer.  This ContentsLayerChromium is responsible for painting the &lt;img&gt;&apos;s styles, background, and any other CSS painting things except for the image itself.  The ImageLayerChromium, which is set up on the GraphicsLayer via setContentsToImage(), it responsible only for painting cat.png.

Note that the CCLayerDelegate for the m_layer and m_contentsLayer are actually both the same thing - the GraphicsLayerChromium - even though the opaque-ness of the two will often be different!  So I don&apos;t think going to the CCLayerDelegate to ask for opaque-ness would work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514108</commentid>
    <comment_count>40</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-02 14:01:10 -0800</bug_when>
    <thetext>I think the general way to go here is:
*) opaqueness for the GraphicsLayer::m_layer should be set by WebCore somehow - either via the Render* code pushing an opaque bit or pulling it or generating it at paint time and then setting it via the LayerChromium interface

*) opaqueness for the GraphicsLayer::m_contentsLayer should be determined on a per-layer basis since the logic will differ for each type. This could be done inside (Image|Video|WebGL)LayerChromium code or in the code that creates these objects but I don&apos;t think it should be on CCLayerDelegate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514109</commentid>
    <comment_count>41</comment_count>
      <attachid>117665</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-02 14:01:15 -0800</bug_when>
    <thetext>Comment on attachment 117665
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h:-76
&gt; -    virtual void setContentsOpaque(bool);

I think this is misguided. This is a useful bit to have that we should be using. Please see comments on the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514428</commentid>
    <comment_count>42</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-12-02 22:25:52 -0800</bug_when>
    <thetext>(In reply to comment #40)
&gt; I think the general way to go here is:
&gt; *) opaqueness for the GraphicsLayer::m_layer should be set by WebCore somehow - either via the Render* code pushing an opaque bit or pulling it or generating it at paint time and then setting it via the LayerChromium interface
&gt; 
&gt; *) opaqueness for the GraphicsLayer::m_contentsLayer should be determined on a per-layer basis since the logic will differ for each type. This could be done inside (Image|Video|WebGL)LayerChromium code or in the code that creates these objects but I don&apos;t think it should be on CCLayerDelegate.

Thanks for the diagram.

I was thinking that we could have the delegate&apos;s paint call return opaqueness for what it just painted:

class CCLayerDelegate {
    // Returns true if paint operations resulted in |clip| being filled with opaque contents.
    virtual bool paintContents(GraphicsContext&amp;, const IntRect&amp; clip) = 0;
};

It doesn&apos;t matter if multiple layers use the same delegate in this case.

If determining opacity during paint is convenient, wouldn&apos;t this be a nice way to handle layers that &quot;paint&quot; contents? Layers that don&apos;t paint contents will need a different way to determine what value to return from LayerChromium::isOpaque(). As the opaqueness for non-paint layers is specific to the layer type, using a layer type specific way to pass this information the layer implementation doesn&apos;t seem inappropriate to me. Or maybe there&apos;s something about these non-paint layers that I still don&apos;t understand..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514912</commentid>
    <comment_count>43</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-04 22:29:30 -0800</bug_when>
    <thetext>Knowing if a certain clip rect is fully opaque isn&apos;t nearly as useful as knowing if the entire later is opaque, which we can tell sometimes. But perhaps we&apos;ll want both eventually.


I think we should do the easy case first, which is non-painting layers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515266</commentid>
    <comment_count>44</comment_count>
      <attachid>117911</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-05 12:06:02 -0800</bug_when>
    <thetext>Created attachment 117911
Patch

Round three, with more understanding of the layer rainbow. This sets opaque() appropriately on the ImageLayerChromium with a unit test.

Video and WebGL will follow in their own CLs once this is agreed on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515271</commentid>
    <comment_count>45</comment_count>
      <attachid>117911</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-05 12:12:22 -0800</bug_when>
    <thetext>Comment on attachment 117911
Patch

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

Great! R=me

&gt; Source/WebKit/chromium/tests/ImageLayerChromiumTest.cpp:56
&gt; +    explicit TestImage(const IntSize&amp; size, bool opaque)

nit: for the future, you don&apos;t need explicit for 2-arg c&apos;tors. it doesn&apos;t really hurt to have it in test code, though</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515321</commentid>
    <comment_count>46</comment_count>
      <attachid>117911</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-05 12:52:32 -0800</bug_when>
    <thetext>Comment on attachment 117911
Patch

Attachment 117911 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10729810

New failing tests:
svg/custom/linking-uri-01-b.svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515324</commentid>
    <comment_count>47</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-05 12:56:16 -0800</bug_when>
    <thetext>Test passes for me. :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515353</commentid>
    <comment_count>48</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-05 13:32:27 -0800</bug_when>
    <thetext>That test is failing on every patch - looks like it&apos;s just broken in the tree. Let&apos;s try again...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515356</commentid>
    <comment_count>49</comment_count>
      <attachid>117911</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-05 13:32:48 -0800</bug_when>
    <thetext>Comment on attachment 117911
Patch

Flipping cq+ again. if this fails I&apos;ll land it by hand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515371</commentid>
    <comment_count>50</comment_count>
      <attachid>117911</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-05 13:56:11 -0800</bug_when>
    <thetext>Comment on attachment 117911
Patch

Clearing flags on attachment: 117911

Committed r102043: &lt;http://trac.webkit.org/changeset/102043&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515372</commentid>
    <comment_count>51</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-05 13:56:19 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515762</commentid>
    <comment_count>52</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-12-06 02:39:49 -0800</bug_when>
    <thetext>This patch broke chromium mac-cg compilation with many errors like that one:

/src/third_party/WebKit/Source/WebKit/chromium/tests/ImageLayerChromiumTest.cpp:60:23: error: assigning to &apos;NativeImagePtr&apos; (aka &apos;CGImage *&apos;) from incompatible type &apos;WebCore::NativeImageSkia *&apos;
        m_nativeImage = new NativeImageSkia();

                      ^ ~~~~~~~~~~~~~~~~~~~~~
Builder link:

http://build.chromium.org/p/chromium.webkit/builders/Webkit%20Mac%20Builder%20%28CG%29/builds/3668

Rolled out: &lt;http://trac.webkit.org/changeset/102112&gt;

Reopening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515885</commentid>
    <comment_count>53</comment_count>
      <attachid>118043</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-06 07:02:32 -0800</bug_when>
    <thetext>Created attachment 118043
Patch

Turned off the test on Mac, as it won&apos;t compile there. I had copied the TestImage class from DragImageTest, without noticing it is disabled on Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516072</commentid>
    <comment_count>54</comment_count>
      <attachid>118043</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-06 11:27:44 -0800</bug_when>
    <thetext>Comment on attachment 118043
Patch

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

I think this will still fail on mac-cg the same way as the last patch did.

&gt; Source/WebKit/chromium/WebKit.gypi:108
&gt; +                    # FIXME: Port DragImageTest/ImageLayerChromiumTest to Mac.
&gt;                      &apos;tests/DragImageTest.cpp&apos;,
&gt; +                    &apos;tests/ImageLayerChromiumTest.cpp&apos;,

i&apos;m not sure i understand what this does - it looks like it&apos;s adding an entry to webkit_unit_tests on windows, but it&apos;s already in the list so i don&apos;t think this has any impact. we also want to run this test on linux and on mac when using skia

&gt; Source/WebKit/chromium/tests/ImageLayerChromiumTest.cpp:60
&gt; +        m_nativeImage = new NativeImageSkia();

I think this will still fail on MAC-CG

Could you instead guard this test with #if USE(SKIA) ?

&gt; Source/WebKit/chromium/tests/ImageLayerChromiumTest.cpp:69
&gt; +        delete m_nativeImage;

can we use an OwnPtr&lt;NativeImagePtr&gt; member variable instead of doing this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516158</commentid>
    <comment_count>55</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-06 12:34:58 -0800</bug_when>
    <thetext>(In reply to comment #54)
&gt; (From update of attachment 118043 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118043&amp;action=review
&gt; 
&gt; I think this will still fail on mac-cg the same way as the last patch did.

Oh gosh, sorry. Total Gyp fail.

&gt; &gt; Source/WebKit/chromium/WebKit.gypi:108
&gt; &gt; +                    # FIXME: Port DragImageTest/ImageLayerChromiumTest to Mac.
&gt; &gt;                      &apos;tests/DragImageTest.cpp&apos;,
&gt; &gt; +                    &apos;tests/ImageLayerChromiumTest.cpp&apos;,
&gt; 
&gt; i&apos;m not sure i understand what this does - it looks like it&apos;s adding an entry to webkit_unit_tests on windows, but it&apos;s already in the list so i don&apos;t think this has any impact. we also want to run this test on linux and on mac when using skia
&gt; 
&gt; I think this will still fail on MAC-CG
&gt; 
&gt; Could you instead guard this test with #if USE(SKIA) ?

Sure, I will do that in the gyp for this and the DragImageTest.

&gt; &gt; Source/WebKit/chromium/tests/ImageLayerChromiumTest.cpp:69
&gt; &gt; +        delete m_nativeImage;
&gt; 
&gt; can we use an OwnPtr&lt;NativeImagePtr&gt; member variable instead of doing this?

Yep! Will change in DragImageTest too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516174</commentid>
    <comment_count>56</comment_count>
      <attachid>118097</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-06 12:53:12 -0800</bug_when>
    <thetext>Created attachment 118097
Patch

I don&apos;t see anything in DragImageTest that would break on Mac other than the skia use, so I put it behind use_skia also. And I swapped to using OwnPtr for the TestImage class in both tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516192</commentid>
    <comment_count>57</comment_count>
      <attachid>118097</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-06 13:20:10 -0800</bug_when>
    <thetext>Comment on attachment 118097
Patch

Yay! Can you keep an eye on DragImageTest after this lands, just to be sure?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516198</commentid>
    <comment_count>58</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-06 13:34:14 -0800</bug_when>
    <thetext>Thanks, I will. Am watching this, please let me know if it&apos;s the wrong place to do so.
http://build.webkit.org/builders/SnowLeopard%20Intel%20Debug%20%28Tests%29

The chromium mac bots seem down so no testing SKIA on mac I guess right now, if I am getting the bot builds right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516203</commentid>
    <comment_count>59</comment_count>
      <attachid>118097</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-06 13:37:45 -0800</bug_when>
    <thetext>Comment on attachment 118097
Patch

Clearing flags on attachment: 118097

Committed r102174: &lt;http://trac.webkit.org/changeset/102174&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516204</commentid>
    <comment_count>60</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-06 13:37:53 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516207</commentid>
    <comment_count>61</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-12-06 13:43:28 -0800</bug_when>
    <thetext>(In reply to comment #58)
&gt; Thanks, I will. Am watching this, please let me know if it&apos;s the wrong place to do so.
&gt; http://build.webkit.org/builders/SnowLeopard%20Intel%20Debug%20%28Tests%29
&gt; 
&gt; The chromium mac bots seem down so no testing SKIA on mac I guess right now, if I am getting the bot builds right.

I think you should watch 
http://build.chromium.org/p/chromium.webkit/waterfall?branch=&amp;builder=Webkit+Mac+Builder&amp;builder=Webkit+Mac10.5&amp;builder=Webkit+Mac10.6&amp;builder=Webkit+Mac+Builder+%28CG%29&amp;builder=Webkit+Mac10.5+%28CG%29&amp;builder=Webkit+Mac10.6+%28CG%29</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516208</commentid>
    <comment_count>62</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-06 13:44:54 -0800</bug_when>
    <thetext>Awesome, thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116237</attachid>
            <date>2011-11-22 09:52:00 -0800</date>
            <delta_ts>2011-11-22 11:47:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72964-20111122125157.patch</filename>
            <type>text/plain</type>
            <size>1763</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMDA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTc1ZGYwY2Q4NGU0MzQ4
ZGRhMTMwY2VjN2NmOWFjODJlZjc5MjVjOC4uMzExNGNkMjYwZDVlM2E2MTIxZGM4NWQ1NzJlMDEx
NjFjZTE0NDFiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDExLTExLTIyICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gRW5z
dXJlIGltYWdlIGNvbnRlbnRzIGZpbGwgSW1hZ2VMYXllckNocm9taXVtIGJlZm9yZSBtYXJraW5n
IG9wYXF1ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzI5NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnNldENvbnRlbnRzKToKKwogMjAxMS0x
MS0yMiAgU2hpbnlhIEthd2FuYWthICA8c2hpbnlha0Bnb29nbGUuY29tPgogCiAgICAgICAgIFNw
ZWxsY2hlY2sgc2hvdWxkIGJlIGFibGUgdG8gcnVuIGFzeW5jaHJvbm91c2x5LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggOWQzZTlmM2ExZTcwZGVlNWYxOWUzY2YwYjI0OGI5
NDNhZmExMDJjMC4uNTE2YmMyYmM1ZWIyMTkwY2Q4N2ZlNjA2NTQxYjJhNDAwODNiNDAwOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VM
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCkBAIC0xMzksOSArMTM5LDEzIEBAIHZvaWQg
SW1hZ2VMYXllckNocm9taXVtOjpzZXRDb250ZW50cyhJbWFnZSogY29udGVudHMpCiAKICAgICBt
X2NvbnRlbnRzID0gY29udGVudHM7CiAgICAgbV9pbWFnZUZvckN1cnJlbnRGcmFtZSA9IG1fY29u
dGVudHMtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgbV9kaXJ0eVJlY3QgPSBJ
bnRSZWN0KEludFBvaW50KDAsIDApLCBib3VuZHMoKSk7CisKKyAgICBJbnRSZWN0IGxheWVyUmVj
dCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIGJvdW5kcygpKTsKKyAgICBJbnRSZWN0IGNvbnRl
bnRzUmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fY29udGVudHMtPnNpemUoKSk7Cisg
ICAgbV9kaXJ0eVJlY3QgPSBsYXllclJlY3Q7CisgICAgc2V0T3BhcXVlKG1fY29udGVudHMtPmlz
Qml0bWFwSW1hZ2UoKSAmJiAhbV9jb250ZW50cy0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSAmJiBj
b250ZW50c1JlY3QuY29udGFpbnMobGF5ZXJSZWN0KSk7CisKICAgICBzZXROZWVkc0Rpc3BsYXko
KTsKLSAgICBzZXRPcGFxdWUoIW1fY29udGVudHMtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkpOwog
fQogCiB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116257</attachid>
            <date>2011-11-22 11:47:24 -0800</date>
            <delta_ts>2011-12-01 16:03:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72964-20111122144722.patch</filename>
            <type>text/plain</type>
            <size>4224</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwNTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWI4OTk1YWViMTRlNmMz
NzU2ZGJmNGU2NjdmY2QwYmEyOWY4MmFkNy4uYzU3NWE1ZTZkNDUwOWZkMWUyZmRiMzE1MmE1ZjA2
OTRkYmI3MjI5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDExLTExLTIyICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gRW5z
dXJlIGltYWdlIGNvbnRlbnRzIGZpbGwgSW1hZ2VMYXllckNocm9taXVtIGJlZm9yZSBtYXJraW5n
IG9wYXF1ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzI5NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
ZXN0cyByZXF1aXJlIGNvbnRlbnRzT3BhcXVlIHByaW50aW5nIGluIERSVC4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9JbWFn
ZSk6IENhbGwgc2V0Q29udGVudHNPcGFxdWUoKSBhZnRlciBzZXR0aW5nIHRoZSBpbWFnZS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpzZXRDb250ZW50cyk6IERv
bid0IHNldCBvcGFxdWUgZmxhZyBvbiB0aGUgTGF5ZXJDaHJvbWl1bS4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y29udGVudHNBcmVPcGFxdWVBbmRGaWxsTGF5ZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5o
OgorCiAyMDExLTExLTE2ICBBbGV4YW5kcmUgRWxpYXMgIDxhZWxpYXNAZ29vZ2xlLmNvbT4KIAog
ICAgICAgICBbY2hyb21pdW1dIEltcHJvdmVtZW50cyBmb3IgcGFnZSBzY2FsZSBkZWx0YSBkdXJp
bmcgY29tbWl0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAppbmRleCAxNTZi
MmU5MGVmNDVlNjkwMDc4MmVhNTk0ODA4YjZhZDgyZTNmYmM5Li43NzgzYjAyMjQxNWQyNGUyYmM3
Njc3ZWI3ZjU3OWUxZjBkMzRmYTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5jcHAKQEAgLTMzNyw2ICszMzcsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0
Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKIHsKICAgICBib29sIGNoaWxk
cmVuQ2hhbmdlZCA9IGZhbHNlOworICAgIGJvb2wgb3BhcXVlID0gZmFsc2U7CiAgICAgaWYgKGlt
YWdlKSB7CiAgICAgICAgIGlmICghbV9jb250ZW50c0xheWVyLmdldCgpIHx8IG1fY29udGVudHNM
YXllclB1cnBvc2UgIT0gQ29udGVudHNMYXllckZvckltYWdlKSB7CiAgICAgICAgICAgICBSZWZQ
dHI8SW1hZ2VMYXllckNocm9taXVtPiBpbWFnZUxheWVyID0gSW1hZ2VMYXllckNocm9taXVtOjpj
cmVhdGUodGhpcyk7CkBAIC0zNDcsNiArMzQ4LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21p
dW06OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiAgICAgICAgIH0KICAgICAgICAg
SW1hZ2VMYXllckNocm9taXVtKiBpbWFnZUxheWVyID0gc3RhdGljX2Nhc3Q8SW1hZ2VMYXllckNo
cm9taXVtKj4obV9jb250ZW50c0xheWVyLmdldCgpKTsKICAgICAgICAgaW1hZ2VMYXllci0+c2V0
Q29udGVudHMoaW1hZ2UpOworICAgICAgICBvcGFxdWUgPSBpbWFnZUxheWVyLT5jb250ZW50c0Fy
ZU9wYXF1ZUFuZEZpbGxMYXllcigpOwogICAgICAgICB1cGRhdGVDb250ZW50c1JlY3QoKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBpZiAobV9jb250ZW50c0xheWVyKSB7CkBAIC0zNTcsNiArMzU5
LDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9JbWFnZShJbWFn
ZSogaW1hZ2UpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBzZXRDb250ZW50c09wYXF1ZShvcGFx
dWUpOworCiAgICAgaWYgKGNoaWxkcmVuQ2hhbmdlZCkKICAgICAgICAgdXBkYXRlQ2hpbGRMaXN0
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAppbmRleCAzNjMzNjI5NjdhY2Nk
ZWJjMjU1OWUyOWMyNGQ0M2MxYzg4ODgwMzE3Li4xM2NlOTJmYzViNjQ3YTE1NzhiMGFkODY4ZmIw
NzMxMTJiNmNkNGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTE0MSw3
ICsxNDEsMTcgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnNldENvbnRlbnRzKEltYWdlKiBj
b250ZW50cykKICAgICBtX2ltYWdlRm9yQ3VycmVudEZyYW1lID0gbV9jb250ZW50cy0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICBtX2RpcnR5UmVjdCA9IEludFJlY3QoSW50UG9p
bnQoMCwgMCksIGJvdW5kcygpKTsKICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICBzZXRPcGFx
dWUoIW1fY29udGVudHMtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkpOworfQorCitib29sIEltYWdl
TGF5ZXJDaHJvbWl1bTo6Y29udGVudHNBcmVPcGFxdWVBbmRGaWxsTGF5ZXIoKSBjb25zdAorewor
ICAgIGlmIChtX2NvbnRlbnRzICYmIG1fY29udGVudHMtPmlzQml0bWFwSW1hZ2UoKSAmJiAhbV9j
b250ZW50cy0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSkgeworICAgICAgICBJbnRTaXplIGltYWdl
U2l6ZSA9IGNvbnRlbnRCb3VuZHMoKTsKKyAgICAgICAgSW50U2l6ZSBsYXllclNpemUgPSBib3Vu
ZHMoKTsKKyAgICAgICAgaWYgKGltYWdlU2l6ZS53aWR0aCgpID49IGxheWVyU2l6ZS53aWR0aCgp
ICYmIGltYWdlU2l6ZS5oZWlnaHQoKSA+PSBsYXllclNpemUuaGVpZ2h0KCkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIEltYWdl
TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hy
b21pdW0uaAppbmRleCAxYWZjY2ZlMmZkY2U2NDQ3NWE3NGFiMmM5MjZkMDQyY2I1ZjM3Njc0Li44
ZmJiMmI1MGJjZTQ4MDM1NDZjNTRiYmI5YzQyNDU1ZGNiNjEwMjYzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxh
eWVyQ2hyb21pdW0uaApAQCAtNTYsNiArNTYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAKICAgICB2b2lkIHNldENvbnRlbnRzKEltYWdlKiBp
bWFnZSk7CisgICAgYm9vbCBjb250ZW50c0FyZU9wYXF1ZUFuZEZpbGxMYXllcigpIGNvbnN0Owog
CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEltYWdlTGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdh
dGUqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117510</attachid>
            <date>2011-12-01 16:03:41 -0800</date>
            <delta_ts>2011-12-02 08:01:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72964-20111201190339.patch</filename>
            <type>text/plain</type>
            <size>28140</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmYwZTczMGQ4MTFiMGRj
YmJjYjY2OTg0ZWE5ZGI4ZTYzNzg3OGM2MC4uOTU2ZmYxMTY0NTRhYzU0ZDczY2MxZTM4ODc4NWYz
NzQ4MTMxNjhlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDExLTEyLTAxICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTGV0
IExheWVyQ2hyb21pdW0gc3ViY2xhc3NlcyBvdmVycmlkZSB2YWx1ZSBvZiBvcGFxdWUoKSBmbGFn
LiBTZXQgaXQgZm9yIGltYWdlLCB2aWRlbywgYW5kIGNhbnZhcyBsYXllcnMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjk2NAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyB1bml0IHRlc3RzIEltYWdl
TGF5ZXJDaHJvbWl1bVRlc3QsIFZpZGVvTGF5ZXJDaHJvbWl1bVRlc3QuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OkNhbnZhc0xheWVyQ2hyb21pdW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06Omhhc0FscGhhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OnNldEhhc0FscGhhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OnVwZGF0ZU9wYXF1ZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNP
cGFxdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnNldENv
bnRlbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
T3BhcXVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldENvbnRlbnRzT3BhcXVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNvbnRlbnRzT3BhcXVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnVwZGF0ZU9wYXF1ZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZU9wYXF1ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0RHJhd2luZ0J1ZmZl
cik6CisKIDIwMTEtMTEtMzAgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+
CiAKICAgICAgICAgZHggY2F1c2VzIG5vbi1CTVAgY2hhcmFjdGVycyB0byBmYWlsIHRvIHJlbmRl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwNDA1OWZiNTdlOGZmZmViNTc3OTY0MWM5
MThjYzJlMjMwZWZiMjk2Li42ZTZjYTZmMWFhNDVkNzkzOTlkYTYyN2IxMTYwY2RiYTU2YTUzMWJh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDExLTEyLTAx
ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gTGV0IExheWVyQ2hyb21pdW0gc3ViY2xhc3NlcyBvdmVycmlkZSB2YWx1ZSBvZiBvcGFxdWUo
KSBmbGFnLiBTZXQgaXQgZm9yIGltYWdlLCB2aWRlbywgYW5kIGNhbnZhcyBsYXllcnMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjk2NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6
CisgICAgICAgICogdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TW9ja0xheWVyRGVsZWdhdGU6Om5vdGlmeVN5bmNSZXF1aXJlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXN0SW1hZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXN0SW1hZ2U6OlRlc3RJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW1hZ2U6On5UZXN0
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEltYWdlOjppc0JpdG1hcEltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRlc3RJbWFnZTo6Y3VycmVudEZyYW1lSGFzQWxwaGEpOgorICAgICAg
ICAoV2ViQ29yZTo6VGVzdEltYWdlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RJbWFn
ZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdElt
YWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEltYWdlOjpk
ZWNvZGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW1hZ2U6OmRyYXcpOgorICAgICAg
ICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMvVmlkZW9MYXllckNocm9taXVtVGVz
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpNb2NrTGF5ZXJEZWxlZ2F0ZTo6bm90aWZ5
U3luY1JlcXVpcmVkKToKKyAgICAgICAgKFdlYktpdDo6VGVzdFZpZGVvRnJhbWVQcm92aWRlcjo6
VGVzdFZpZGVvRnJhbWVQcm92aWRlcik6CisgICAgICAgIChXZWJLaXQ6OlRlc3RWaWRlb0ZyYW1l
UHJvdmlkZXI6OmdldEN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlRlc3RWaWRlb0Zy
YW1lUHJvdmlkZXI6OnB1dEN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlRlc3RWaWRl
b0ZyYW1lUHJvdmlkZXI6OmZvcm1hdCk6CisgICAgICAgIChXZWJLaXQ6OlRlc3RWaWRlb0ZyYW1l
UHJvdmlkZXI6OndpZHRoKToKKyAgICAgICAgKFdlYktpdDo6VGVzdFZpZGVvRnJhbWVQcm92aWRl
cjo6aGVpZ2h0KToKKyAgICAgICAgKFdlYktpdDo6VGVzdFZpZGVvRnJhbWVQcm92aWRlcjo6cGxh
bmVzKToKKyAgICAgICAgKFdlYktpdDo6VGVzdFZpZGVvRnJhbWVQcm92aWRlcjo6c3RyaWRlKToK
KyAgICAgICAgKFdlYktpdDo6VGVzdFZpZGVvRnJhbWVQcm92aWRlcjo6ZGF0YSk6CisgICAgICAg
IChXZWJLaXQ6OlRlc3RWaWRlb0ZyYW1lUHJvdmlkZXI6OnJlcXVpcmVkVGV4dHVyZVNpemUpOgor
ICAgICAgICAoV2ViS2l0OjpUZXN0VmlkZW9GcmFtZVByb3ZpZGVyOjpoYXNQYWRkaW5nQnl0ZXMp
OgorICAgICAgICAoV2ViS2l0OjpUZXN0VmlkZW9GcmFtZVByb3ZpZGVyOjp0ZXh0dXJlSWQpOgor
ICAgICAgICAoV2ViS2l0OjpUZXN0VmlkZW9GcmFtZVByb3ZpZGVyOjpzZXRGb3JtYXQpOgorICAg
ICAgICAoV2ViS2l0OjpNb2NrVGV4dHVyZUFsbG9jYXRvcjo6Y3JlYXRlVGV4dHVyZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok1vY2tUZXh0dXJlQWxsb2NhdG9yOjpkZWxldGVUZXh0dXJlKToKKyAgICAg
ICAgKFdlYktpdDo6Q29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRDo6bWFr
ZUNvbnRleHRDdXJyZW50KToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRvck1vY2tXZWJHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0
b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJL
aXQ6OkNvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KToKKyAg
ICAgICAgKFdlYktpdDo6Q29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJv
Z3JhbWl2KToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRl
eHQzRDo6Q29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJL
aXQ6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpN
b2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAgIChXZWJL
aXQ6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50OjphcHBseVNjcm9sbEFuZFNjYWxlKToKKyAgICAg
ICAgKFdlYktpdDo6TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6OmNyZWF0ZUxheWVyVHJlZUhvc3RD
b250ZXh0M0QpOgorICAgICAgICAoV2ViS2l0OjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6ZGlk
Q29tbWl0QW5kRHJhd0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6TW9ja0xheWVyVHJlZUhvc3RD
bGllbnQ6OmRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViS2l0OjpNb2NrTGF5
ZXJUcmVlSG9zdENsaWVudDo6ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAo
V2ViS2l0OjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6c2NoZWR1bGVDb21wb3NpdGUpOgorICAg
ICAgICAoV2ViS2l0OjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6TW9ja0xheWVyVHJlZUhvc3RD
bGllbnQpOgorICAgICAgICAoV2ViS2l0OjpNb2NrTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYktpdDo6TW9ja0xheWVyVHJlZUhvc3Q6Ok1vY2tMYXllclRyZWVIb3N0KToKKyAg
ICAgICAgKFdlYktpdDo6VEVTVCk6CisKIDIwMTEtMTEtMzAgIFBhdmVsIEZlbGRtYW4gIDxwZmVs
ZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGdldCByaWQgb2YgZGVm
ZXJyZWQgYmFja2VuZC0+ZnJvbnQtZW5kIGNvbW1hbmRzIHByb2Nlc3NpbmcuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDFhZGRlZmNjNTMzYzBjODAxMWM2YTc5MGUwMjU4
YmE4MzNkNjllZGIuLmFhZDQ4OTdiMjAwNjI5YWYwNDg1YjNjMzAxOWVlYzc1NzFjOTAyNDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
c0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCkBAIC00Miw5ICs0Miw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogQ2FudmFzTGF5ZXJDaHJvbWl1bTo6Q2FudmFzTGF5ZXJDaHJvbWl1
bShDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQogICAgIDogTGF5ZXJDaHJvbWl1bShkZWxlZ2F0
ZSkKLSAgICAsIG1faGFzQWxwaGEodHJ1ZSkKICAgICAsIG1fcHJlbXVsdGlwbGllZEFscGhhKHRy
dWUpCiAgICAgLCBtX3RleHR1cmVJZCgwKQorICAgICwgbV9oYXNBbHBoYSh0cnVlKQogewogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXNMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgKaW5kZXggODVhNWVjMjczM2RlMWExYWY5MmEx
ZWU0ZjJjNzk3MDI2YjMwMjU0Yi4uNzRlM2U3ODAwODI5MDM5NGE2NzdhODAzZTZlMWZjNzY4ZTZj
ZjMyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaApAQCAtNTIsOSArNTIsMTYgQEAg
cHVibGljOgogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENhbnZhc0xheWVyQ2hyb21pdW0oQ0NM
YXllckRlbGVnYXRlKik7CiAKLSAgICBib29sIG1faGFzQWxwaGE7CisgICAgYm9vbCBoYXNBbHBo
YSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQWxwaGE7IH0KKyAgICB2b2lkIHNldEhhc0FscGhhKGJv
b2wgaGFzQWxwaGEpIHsgbV9oYXNBbHBoYSA9IGhhc0FscGhhOyB1cGRhdGVPcGFxdWUoKTsgfQor
CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZU9wYXF1ZSgpIHsgc2V0T3BhcXVlKCFtX2hhc0FscGhh
KTsgfQorCiAgICAgYm9vbCBtX3ByZW11bHRpcGxpZWRBbHBoYTsKICAgICB1bnNpZ25lZCBtX3Rl
eHR1cmVJZDsKKworcHJpdmF0ZToKKyAgICBib29sIG1faGFzQWxwaGE7CiB9OwogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGlj
c0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAppbmRleCA0YmVhYTUyNTVjYTYyODgzOWZh
NDdiYWQ2NWU2MTRiNmZjNTUxNzU4Li44YWYxZGUwYWRhNzdmN2FmOGRlMzljZTRhZTUyMTgzZjVm
MGJkY2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTU0Myw3
ICs1NDMsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTWFza3NUb0JvdW5k
cygpCiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c09wYXF1ZSgp
CiB7Ci0gICAgbV9sYXllci0+c2V0T3BhcXVlKG1fY29udGVudHNPcGFxdWUpOworICAgIG1fbGF5
ZXItPnNldENvbnRlbnRzT3BhcXVlKG1fY29udGVudHNPcGFxdWUpOwogfQogCiB2b2lkIEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5KCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDlkM2U5ZjNhMWU3MGRlZTVmMTllM2NmMGIyNDhiOTQz
YWZhMTAyYzAuLjg4YTRjODM1ZTMzOWQxNzEzMTUzMDIxYmU5Mjc2Y2EyYmIwZWQxNWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgSW1h
Z2VMYXllckNocm9taXVtOjpzZXRDb250ZW50cyhJbWFnZSogY29udGVudHMpCiAgICAgbV9pbWFn
ZUZvckN1cnJlbnRGcmFtZSA9IG1fY29udGVudHMtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CiAgICAgbV9kaXJ0eVJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBib3VuZHMoKSk7
CiAgICAgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgc2V0T3BhcXVlKCFtX2NvbnRlbnRzLT5jdXJy
ZW50RnJhbWVIYXNBbHBoYSgpKTsKKyAgICB1cGRhdGVPcGFxdWUoKTsKIH0KIAogdm9pZCBJbWFn
ZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNo
cm9taXVtLmgKaW5kZXggNWZlNGYyNjY2OGJkY2MzZTI5ZjA0Y2ZmY2RhODgyYTczYzMxZTMyNy4u
MmZmODM5OTA5ODg2ZmJkMWI4ZGIyYTkxMDhjY2FlYzlkYThhODU2MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVt
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VM
YXllckNocm9taXVtLmgKQEAgLTU4LDYgKzU4LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRD
b250ZW50cyhJbWFnZSogaW1hZ2UpOwogCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZU9wYXF1ZSgpIHsgc2V0T3BhcXVlKG1fY29udGVudHMgJiYgbV9jb250ZW50cy0+aXNCaXRt
YXBJbWFnZSgpICYmICFtX2NvbnRlbnRzLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpKTsgfQorCiBw
cml2YXRlOgogICAgIGV4cGxpY2l0IEltYWdlTGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUq
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA1NGE3Zjg4NTdkNjg5MDM4NmFlZmE4NTY2
YThkMjdkNWQ1Y2U1MDI4Li4yNGZlMGUxNTA3NTg1N2UwMGJmNWRiODQ3NTI1OWFiNTJjM2NiYzM1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtNjUsNiArNjUsNyBAQCBMYXllckNocm9taXVt
OjpMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpCiAgICAgLCBtX29wYWNp
dHkoMS4wKQogICAgICwgbV9hbmNob3JQb2ludFooMCkKICAgICAsIG1fbWFza3NUb0JvdW5kcyhm
YWxzZSkKKyAgICAsIG1fY29udGVudHNPcGFxdWUoZmFsc2UpCiAgICAgLCBtX29wYXF1ZShmYWxz
ZSkKICAgICAsIG1fZG91YmxlU2lkZWQodHJ1ZSkKICAgICAsIG1fdXNlc0xheWVyQ2xpcHBpbmco
ZmFsc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggNzEzZGZiMjUyMzAxMDg2ZmZhN2U1ODFjMDQy
MDQ3NWU4YmRmZmI3ZC4uZGIyMWMzZDQ2MTBmYzljMmZjYTEwMGNhMGY3ZDJhODlkMjA5MjQ1YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTEzLDYgKzExMyw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX29wYWNpdHkgPSBvcGFjaXR5OyBzZXROZWVk
c0NvbW1pdCgpOyB9CiAgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0
eTsgfQogCisgICAgdm9pZCBzZXRDb250ZW50c09wYXF1ZShib29sIG9wYXF1ZSkgeyBtX2NvbnRl
bnRzT3BhcXVlID0gb3BhcXVlOyB1cGRhdGVPcGFxdWUoKTsgfQorICAgIGJvb2wgY29udGVudHNP
cGFxdWUoKSB7IHJldHVybiBtX2NvbnRlbnRzT3BhcXVlOyB9CisKICAgICB2b2lkIHNldE9wYXF1
ZShib29sIG9wYXF1ZSkgeyBtX29wYXF1ZSA9IG9wYXF1ZTsgc2V0TmVlZHNDb21taXQoKTsgfQog
ICAgIGJvb2wgb3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KIApAQCAtMjE2LDYg
KzIxOSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gaG9sZCBjb250ZXh0LWRlcGVuZGVudCByZXNv
dXJjZXMgc3VjaCBhcyB0ZXh0dXJlcy4KICAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFJlc291cmNl
cygpOwogCisgICAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gYnkgbGF5ZXJzIHRoYXQgd2FudCB0aGUg
b3BhcXVlIGZsYWcgdG8gcmVwcmVzZW50IHNvbWV0aGluZyBvdGhlciB0aGFuCisgICAgLy8gdGhh
biBjb250ZW50c09wYXF1ZSBmcm9tIEdyYXBoaWNzTGF5ZXIuCisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZU9wYXF1ZSgpIHsgc2V0T3BhcXVlKG1fY29udGVudHNPcGFxdWUpOyB9CisKICAgICB2b2lk
IHNldE5lZWRzQ29tbWl0KCk7CiAKICAgICAvLyBUaGUgZGlydHkgcmVjdCBpcyB0aGUgdW5pb24g
b2YgZGFtYWdlZCByZWdpb25zIHRoYXQgbmVlZCByZXBhaW50aW5nL3VwZGF0aW5nLgpAQCAtMjY3
LDYgKzI3NCw3IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9vcGFjaXR5OwogICAgIGZsb2F0IG1f
YW5jaG9yUG9pbnRaOwogICAgIGJvb2wgbV9tYXNrc1RvQm91bmRzOworICAgIGJvb2wgbV9jb250
ZW50c09wYXF1ZTsKICAgICBib29sIG1fb3BhcXVlOwogICAgIGJvb2wgbV9kb3VibGVTaWRlZDsK
ICAgICBib29sIG1fdXNlc0xheWVyQ2xpcHBpbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVt
LmNwcAppbmRleCAxOWE5OTNiZGI5ZWQ5NzAyZDVkNGQ0MjkwZTY4MTQxMmIxNTMyY2IwLi4wODFl
YzFkODc1NTg1ZGEzODQ3YWNlMDI3OGFlNmViYjZjNzRjMzdjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5
ZXJDaHJvbWl1bS5jcHAKQEAgLTk4LDEzICs5OCwxNSBAQCB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1
bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwg
QwogICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7CiAKICAgICBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZy
YW1lID0gbV9wcm92aWRlci0+Z2V0Q3VycmVudEZyYW1lKCk7CisgICAgbV9mcmFtZUZvcm1hdCA9
IGZyYW1lID8gZnJhbWUtPmZvcm1hdCgpIDogVmlkZW9GcmFtZUNocm9taXVtOjpJbnZhbGlkOwor
ICAgIHVwZGF0ZU9wYXF1ZSgpOworCiAgICAgaWYgKCFmcmFtZSkgewogICAgICAgICBtX3NraXBz
RHJhdyA9IHRydWU7CiAgICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2ZyYW1lRm9ybWF0ID0gZnJhbWUtPmZv
cm1hdCgpOwogICAgIEdDM0RlbnVtIHRleHR1cmVGb3JtYXQgPSBkZXRlcm1pbmVUZXh0dXJlRm9y
bWF0KGZyYW1lKTsKICAgICBpZiAodGV4dHVyZUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSkgewogICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG90aGVyIHBhdGhz
LgpAQCAtMTQ5LDYgKzE1MSwxMiBAQCB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQwogICAgIG1fcHJv
dmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7CiB9CiAKK3ZvaWQgVmlkZW9MYXllckNocm9t
aXVtOjp1cGRhdGVPcGFxdWUoKQoreworICAgIGJvb2wgZnJhbWVPcGFxdWUgPSBtX2ZyYW1lRm9y
bWF0ICE9IFZpZGVvRnJhbWVDaHJvbWl1bTo6UkdCQSAmJiBtX2ZyYW1lRm9ybWF0ICE9IFZpZGVv
RnJhbWVDaHJvbWl1bTo6SW52YWxpZCAmJiBtX2ZyYW1lRm9ybWF0ICE9IFZpZGVvRnJhbWVDaHJv
bWl1bTo6RW1wdHk7CisgICAgc2V0T3BhcXVlKGZyYW1lT3BhcXVlKTsKK30KKwogdm9pZCBWaWRl
b0xheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogewog
ICAgIExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9t
aXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xh
eWVyQ2hyb21pdW0uaAppbmRleCA1MTZjOGQzODQ3YzJhZGI2NGM1YmJlZmI3Yzk5Y2FiNWY1YWZh
YmEzLi41ZjI2N2U0NTRiOGFlYWExNTMyZmI0ZGJmZjU4NDMwYmFmNGNjZTg4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9W
aWRlb0xheWVyQ2hyb21pdW0uaApAQCAtNjEsNiArNjEsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFJlc291cmNlcygpOworICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVPcGFxdWUoKTsKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgVGV4dHVyZSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExh
eWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vV2ViR0xMYXllckNocm9taXVtLmNwcAppbmRleCAyNzZmM2M5ZmMyZmUxMDdmMTYzYjJhYmEw
OThjMDNmYmIzMzQ0Y2I2Li4xMmJjN2JhYzMyNTg1ZWMzNTllOWNhMDlhYjIwZDE5ZDgwYmRhNjc0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9X
ZWJHTExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTE0Niw3ICsxNDYsNyBAQCB2
b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0RHJhd2luZ0J1ZmZlcihEcmF3aW5nQnVmZmVyKiBk
cmF3aW5nQnVmZmVyKQogICAgIH0KICAgICBtX3RleHR1cmVJZCA9IHRleHR1cmVJZDsKICAgICBH
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzID0gY29udGV4dCgpLT5nZXRD
b250ZXh0QXR0cmlidXRlcygpOwotICAgIG1faGFzQWxwaGEgPSBhdHRyaWJ1dGVzLmFscGhhOwor
ICAgIHNldEhhc0FscGhhKGF0dHJpYnV0ZXMuYWxwaGEpOwogICAgIG1fcHJlbXVsdGlwbGllZEFs
cGhhID0gYXR0cmlidXRlcy5wcmVtdWx0aXBsaWVkQWxwaGE7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCmluZGV4IGM5MDY2ODk3ZjdmZDA3Yjk2NmQyZWZhOWNhOTJjZTA5N2E2YjZi
NGUuLjZiM2MwYTliZTNjZTU1NzQxMDcwOTRlNzVmODAyMTM0MGEzNGJjZGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNzQsNiArNzQsNyBAQAogICAgICAgICAgICAgJ3Rlc3Rz
L0lEQkJpbmRpbmdVdGlsaXRpZXNUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURCS2V5
UGF0aFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JREJMZXZlbERCQ29kaW5nVGVzdC5j
cHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9Jbm5lckdlc3R1cmVSZWNvZ25pemVyVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0tleWJvYXJkVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0tVUkxU
ZXN0LmNwcCcsCkBAIC04OSw2ICs5MCw3IEBACiAgICAgICAgICAgICAndGVzdHMvVHJlZVN5bmNo
cm9uaXplclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UcmVlVGVzdEhlbHBlcnMuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9UcmVlVGVzdEhlbHBlcnMuaCcsCisgICAgICAgICAgICAn
dGVzdHMvVmlkZW9MYXllckNocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dl
YkNvbXBvc2l0b3JJbXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYkZyYW1lVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYkxheWVyVGVzdC5jcHAnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZUxheWVyQ2hyb21pdW1UZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNjU3ZjY3ZDliYzg5YTU1ZmI1YmU0NzBlNzgzYmNhZDBiM2RlZjI3OQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VMYXll
ckNocm9taXVtVGVzdC5jcHAKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkltYWdlTGF5ZXJDaHJvbWl1bS5oIgorCisjaW5j
bHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNs
dWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNw
YWNlIHsKKworY2xhc3MgTW9ja0xheWVyRGVsZWdhdGUgOiBwdWJsaWMgQ0NMYXllckRlbGVnYXRl
IHsKK3B1YmxpYzoKKyAgICBNT0NLX0NPTlNUX01FVEhPRDAoZHJhd3NDb250ZW50LCBib29sKCkp
OworICAgIE1PQ0tfQ09OU1RfTUVUSE9EMChwcmVzZXJ2ZXMzRCwgYm9vbCgpKTsKKyAgICBNT0NL
X01FVEhPRDIocGFpbnRDb250ZW50cywgdm9pZChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRS
ZWN0JikpOworICAgIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKCkgeyB9Cit9OworCitjbGFzcyBU
ZXN0SW1hZ2UgOiBwdWJsaWMgSW1hZ2UgeworcHVibGljOgorCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGVzdEltYWdlPiBjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBvcGFxdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRlc3RJbWFnZShzaXplLCBvcGFxdWUp
KTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBUZXN0SW1hZ2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwg
Ym9vbCBvcGFxdWUpCisgICAgICAgIDogSW1hZ2UoMCkKKyAgICAgICAgLCBtX3NpemUoc2l6ZSkK
KyAgICB7CisgICAgICAgIG1fbmF0aXZlSW1hZ2UgPSBuZXcgTmF0aXZlSW1hZ2VTa2lhKCk7Cisg
ICAgICAgIG1fbmF0aXZlSW1hZ2UtPmJpdG1hcCgpLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0Jf
ODg4OF9Db25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDApOworICAgICAgICBtX25hdGl2ZUltYWdlLT5i
aXRtYXAoKS5hbGxvY1BpeGVscygpOworICAgICAgICBtX25hdGl2ZUltYWdlLT5iaXRtYXAoKS5z
ZXRJc09wYXF1ZShvcGFxdWUpOworICAgIH0KKworICAgIHZpcnR1YWwgflRlc3RJbWFnZSgpCisg
ICAgeworICAgICAgICBkZWxldGUgbV9uYXRpdmVJbWFnZTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IGJvb2wgaXNCaXRtYXBJbWFnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1lSGFzQWxwaGEoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuICFtX25hdGl2ZUltYWdlLT5iaXRtYXAoKS5pc09wYXF1ZSgpOworICAg
IH0KKworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3NpemU7CisgICAgfQorCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpCisgICAgeworICAgICAgICBpZiAobV9zaXplLmlzWmVybygp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgcmV0dXJuIG1fbmF0aXZlSW1hZ2U7
CisgICAgfQorCisgICAgLy8gU3R1YiBpbXBsZW1lbnRhdGlvbnMgb2YgcHVyZSB2aXJ0dWFsIElt
YWdlIGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wp
CisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGRlY29kZWRTaXplKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAwdTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhdyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdl
YkNvcmU6OkNvbG9yU3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6Q29tcG9z
aXRlT3BlcmF0b3IpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKworICAgIEludFNpemUgbV9z
aXplOworICAgIE5hdGl2ZUltYWdlUHRyIG1fbmF0aXZlSW1hZ2U7Cit9OworCitURVNUKEltYWdl
TGF5ZXJDaHJvbWl1bVRlc3QsIG9wYXF1ZUltYWdlcykKK3sKKyAgICBNb2NrTGF5ZXJEZWxlZ2F0
ZSBtb2NrRGVsZWdhdGU7CisKKyAgICBSZWZQdHI8SW1hZ2VMYXllckNocm9taXVtPiB0ZXN0TGF5
ZXIgPSBJbWFnZUxheWVyQ2hyb21pdW06OmNyZWF0ZSgmbW9ja0RlbGVnYXRlKTsKKyAgICBBU1NF
UlRfVFJVRSh0ZXN0TGF5ZXIuZ2V0KCkpOworCisgICAgUmVmUHRyPEltYWdlPiBvcGFxdWVJbWFn
ZSA9IFRlc3RJbWFnZTo6Y3JlYXRlKEludFNpemUoMTAwLCAxMDApLCB0cnVlKTsKKyAgICBBU1NF
UlRfVFJVRShvcGFxdWVJbWFnZS5nZXQoKSk7CisgICAgUmVmUHRyPEltYWdlPiBub25PcGFxdWVJ
bWFnZSA9IFRlc3RJbWFnZTo6Y3JlYXRlKEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAg
QVNTRVJUX1RSVUUobm9uT3BhcXVlSW1hZ2UuZ2V0KCkpOworCisgICAgQVNTRVJUX0ZBTFNFKHRl
c3RMYXllci0+b3BhcXVlKCkpOworICAgIHRlc3RMYXllci0+c2V0Q29udGVudHNPcGFxdWUodHJ1
ZSk7CisgICAgQVNTRVJUX0ZBTFNFKHRlc3RMYXllci0+b3BhcXVlKCkpOworCisgICAgdGVzdExh
eWVyLT5zZXRDb250ZW50cyhvcGFxdWVJbWFnZS5nZXQoKSk7CisKKyAgICBBU1NFUlRfVFJVRSh0
ZXN0TGF5ZXItPm9wYXF1ZSgpKTsKKyAgICB0ZXN0TGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKGZh
bHNlKTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0TGF5ZXItPm9wYXF1ZSgpKTsKKworICAgIHRlc3RM
YXllci0+c2V0Q29udGVudHMobm9uT3BhcXVlSW1hZ2UuZ2V0KCkpOworCisgICAgQVNTRVJUX0ZB
TFNFKHRlc3RMYXllci0+b3BhcXVlKCkpOworICAgIHRlc3RMYXllci0+c2V0Q29udGVudHNPcGFx
dWUodHJ1ZSk7CisgICAgQVNTRVJUX0ZBTFNFKHRlc3RMYXllci0+b3BhcXVlKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9W
aWRlb0xheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
VmlkZW9MYXllckNocm9taXVtVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2FjZjVhMzFiODU1MGQ2OGY2
N2Y1ZjVmNGU3ZTU3YmJhNmMzN2VkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvVmlkZW9MYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTAsMCArMSwxOTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlZpZGVv
TGF5ZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisjaW5jbHVkZSAiTW9ja1dlYkdy
YXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKKyNpbmNsdWRl
ICJWaWRlb0ZyYW1lQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJWaWRlb0ZyYW1lUHJvdmlkZXIuaCIK
KyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9DQ1RleHR1cmVV
cGRhdGVyLmgiCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVz
dC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIE1vY2tMYXllckRlbGVnYXRlIDogcHVibGljIENDTGF5
ZXJEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgTU9DS19DT05TVF9NRVRIT0QwKGRyYXdzQ29udGVu
dCwgYm9vbCgpKTsKKyAgICBNT0NLX0NPTlNUX01FVEhPRDAocHJlc2VydmVzM0QsIGJvb2woKSk7
CisgICAgTU9DS19NRVRIT0QyKHBhaW50Q29udGVudHMsIHZvaWQoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgSW50UmVjdCYpKTsKKyAgICB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZCgpIHsgfQorfTsK
KworY2xhc3MgVGVzdFZpZGVvRnJhbWVQcm92aWRlciA6IHB1YmxpYyBWaWRlb0ZyYW1lUHJvdmlk
ZXIsIHB1YmxpYyBWaWRlb0ZyYW1lQ2hyb21pdW0geworcHVibGljOgorICAgIFRlc3RWaWRlb0Zy
YW1lUHJvdmlkZXIoKSA6IG1fZm9ybWF0KFZpZGVvRnJhbWVDaHJvbWl1bTo6RW1wdHkpIHsgfQor
CisgICAgLy8gVmlkZW9GcmFtZVByb3ZpZGVyIGZ1bmN0aW9ucworICAgIHZpcnR1YWwgVmlkZW9G
cmFtZUNocm9taXVtKiBnZXRDdXJyZW50RnJhbWUoKSB7IHJldHVybiB0aGlzOyB9CisgICAgdmly
dHVhbCB2b2lkIHB1dEN1cnJlbnRGcmFtZShWaWRlb0ZyYW1lQ2hyb21pdW0qKSB7IH0KKworICAg
IC8vIFZpZGVvRnJhbWVDaHJvbWl1bSBmdW5jdGlvbnMKKyAgICB2aXJ0dWFsIFZpZGVvRnJhbWVD
aHJvbWl1bTo6Rm9ybWF0IGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0OyB9CisgICAg
dmlydHVhbCB1bnNpZ25lZCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIDEwMDsgfQorICAgIHZpcnR1
YWwgdW5zaWduZWQgd2lkdGgodW5zaWduZWQgcGxhbmUpIGNvbnN0IHsgcmV0dXJuIDEwMDsgfQor
ICAgIHZpcnR1YWwgdW5zaWduZWQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gMTAwOyB9CisgICAg
dmlydHVhbCB1bnNpZ25lZCBoZWlnaHQodW5zaWduZWQgcGxhbmUpIGNvbnN0IHsgcmV0dXJuIDEw
MDsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgcGxhbmVzKCkgY29uc3QgeyByZXR1cm4gMDsgfQor
ICAgIHZpcnR1YWwgaW50IHN0cmlkZSh1bnNpZ25lZCBwbGFuZSkgY29uc3QgeyByZXR1cm4gMDsg
fQorICAgIHZpcnR1YWwgY29uc3Qgdm9pZCogZGF0YSh1bnNpZ25lZCBwbGFuZSkgY29uc3QgeyBy
ZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXpl
KHVuc2lnbmVkIHBsYW5lKSBjb25zdCB7IHJldHVybiBJbnRTaXplKCk7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaGFzUGFkZGluZ0J5dGVzKHVuc2lnbmVkIHBsYW5lKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgdGV4dHVyZUlkKCkgY29uc3QgeyByZXR1cm4gMDsg
fQorCisgICAgdm9pZCBzZXRGb3JtYXQoVmlkZW9GcmFtZUNocm9taXVtOjpGb3JtYXQgZm9ybWF0
KSB7IG1fZm9ybWF0ID0gZm9ybWF0OyB9CisKK3ByaXZhdGU6CisgICAgVmlkZW9GcmFtZUNocm9t
aXVtOjpGb3JtYXQgbV9mb3JtYXQ7Cit9OworCitjbGFzcyBNb2NrVGV4dHVyZUFsbG9jYXRvciA6
IHB1YmxpYyBUZXh0dXJlQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGNyZWF0ZVRleHR1cmUoY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtIGZvcm1hdCkgeyByZXR1cm4g
MDsgfQorICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmUsIGNv
bnN0IEludFNpemUmLCBHQzNEZW51bSkgeyB9Cit9OworCisvLyBUZXN0IHN0dWIgZm9yIFdlYkdy
YXBoaWNzQ29udGV4dDNELiBSZXR1cm5zIGNhbm5lZCB2YWx1ZXMgbmVlZGVkIGZvciBjb21wb3Np
dG9yIGluaXRpYWxpemF0aW9uLgorY2xhc3MgQ29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRl
eHQzRCA6IHB1YmxpYyBNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzT3duUHRyPENvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0
ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDb21wb3NpdG9yTW9ja1dlYkdyYXBoaWNzQ29udGV4
dDNEKCkpOyB9CisgICAgdmlydHVhbCBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpIHsgcmV0dXJu
IHRydWU7IH0KKyAgICB2aXJ0dWFsIFdlYkdMSWQgY3JlYXRlUHJvZ3JhbSgpIHsgcmV0dXJuIDE7
IH0KKyAgICB2aXJ0dWFsIFdlYkdMSWQgY3JlYXRlU2hhZGVyKFdHQzNEZW51bSkgeyByZXR1cm4g
MTsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRTaGFkZXJpdihXZWJHTElkLCBXR0MzRGVudW0sIFdH
QzNEaW50KiB2YWx1ZSkgeyAqdmFsdWUgPSAxOyB9CisgICAgdmlydHVhbCB2b2lkIGdldFByb2dy
YW1pdihXZWJHTElkLCBXR0MzRGVudW0sIFdHQzNEaW50KiB2YWx1ZSkgeyAqdmFsdWUgPSAxOyB9
CisKK3ByaXZhdGU6CisgICAgQ29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCgpIHsg
fQorfTsKKworY2xhc3MgTW9ja0xheWVyVHJlZUhvc3RDbGllbnQgOiBwdWJsaWMgQ0NMYXllclRy
ZWVIb3N0Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxNb2NrTGF5ZXJU
cmVlSG9zdENsaWVudD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IE1vY2tMYXllclRy
ZWVIb3N0Q2xpZW50KCkpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChk
b3VibGUgZnJhbWVCZWdpblRpbWUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFu
ZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBzY2FsZSkgeyB9CisKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhv
c3RDb250ZXh0M0QoKQorICAgIHsKKyAgICAgICAgT3duUHRyPFdlYkdyYXBoaWNzQ29udGV4dDNE
PiBtb2NrID0gQ29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKCk7Cisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzOworICAgICAgICBSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KG1vY2sucmVsZWFzZSgpLCBhdHRy
cywgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93LCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OkZvclVzZU9uQW5vdGhlclRocmVhZCk7CisgICAgICAgIHJl
dHVybiBjb250ZXh0OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRBbmREcmF3
RnJhbWUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVTd2FwQnVmZmVycygpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSB7IH0KKworcHJpdmF0ZToKKyAg
ICBNb2NrTGF5ZXJUcmVlSG9zdENsaWVudCgpIHsgfQorfTsKKworLy8gQWRhcHRzIENDTGF5ZXJU
cmVlSG9zdCBmb3IgdGVzdC4gSW5qZWN0cyBNb2NrTGF5ZXJUcmVlSG9zdEltcGwuCitjbGFzcyBN
b2NrTGF5ZXJUcmVlSG9zdCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3QgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPE1vY2tMYXllclRyZWVIb3N0PiBjcmVhdGUoQ0NMYXllclRyZWVI
b3N0Q2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyLCBj
b25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgTW9ja0xheWVyVHJlZUhvc3QoY2xpZW50LCByb290TGF5ZXIsIHNldHRpbmdzKSk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIE1vY2tMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENs
aWVudCogY2xpZW50LCBQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IHJvb3RMYXllciwgY29uc3Qg
Q0NTZXR0aW5ncyYgc2V0dGluZ3MpCisgICAgICAgIDogQ0NMYXllclRyZWVIb3N0KGNsaWVudCwg
c2V0dGluZ3MpCisgICAgeworICAgICAgICBzZXRSb290TGF5ZXIocm9vdExheWVyKTsKKyAgICAg
ICAgYm9vbCBzdWNjZXNzID0gaW5pdGlhbGl6ZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShzdWNj
ZXNzKTsKKyAgICB9Cit9OworCisjZGVmaW5lIFRFU1RfSVNfT1BBUVVFKGlzT3BhcXVlKSBcCisg
ICAgQVNTRVJUX0VRKGlzT3BhcXVlLCB0ZXN0TGF5ZXItPm9wYXF1ZSgpKTsgXAorICAgIHRlc3RM
YXllci0+c2V0Q29udGVudHNPcGFxdWUoIWlzT3BhcXVlKTsgXAorICAgIEFTU0VSVF9FUShpc09w
YXF1ZSwgdGVzdExheWVyLT5vcGFxdWUoKSk7IFwKKyAgICB0ZXN0TGF5ZXItPnNldENvbnRlbnRz
T3BhcXVlKGlzT3BhcXVlKTsgXAorICAgIEFTU0VSVF9FUShpc09wYXF1ZSwgdGVzdExheWVyLT5v
cGFxdWUoKSk7CisKKyNkZWZpbmUgVEVTVF9WSURFT19GT1JNQVRfT1BBUVVFKGZvcm1hdCkgXAor
ICAgIHByb3ZpZGVyLnNldEZvcm1hdChmb3JtYXQpOyBcCisgICAgdGVzdExheWVyLT5zZXROZWVk
c0Rpc3BsYXkoKTsgXAorICAgIHRlc3RMYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhj
b250ZXh0LmdldCgpLCB1cGRhdGVyKTsgXAorICAgIFRFU1RfSVNfT1BBUVVFKHRydWUpOworCisj
ZGVmaW5lIFRFU1RfVklERU9fRk9STUFUX05PVF9PUEFRVUUoZm9ybWF0KSBcCisgICAgcHJvdmlk
ZXIuc2V0Rm9ybWF0KGZvcm1hdCk7IFwKKyAgICB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheSgp
OyBcCisgICAgdGVzdExheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQuZ2V0
KCksIHVwZGF0ZXIpOyBcCisgICAgVEVTVF9JU19PUEFRVUUoZmFsc2UpOworCitURVNUKFZpZGVv
TGF5ZXJDaHJvbWl1bVRlc3QsIG9wYXF1ZUZvcm1hdHMpCit7CisgICAgTW9ja0xheWVyRGVsZWdh
dGUgbW9ja0RlbGVnYXRlOworICAgIFRlc3RWaWRlb0ZyYW1lUHJvdmlkZXIgcHJvdmlkZXI7Cisg
ICAgUmVmUHRyPFZpZGVvTGF5ZXJDaHJvbWl1bT4gdGVzdExheWVyID0gVmlkZW9MYXllckNocm9t
aXVtOjpjcmVhdGUoJm1vY2tEZWxlZ2F0ZSwgJnByb3ZpZGVyKTsKKyAgICBBU1NFUlRfVFJVRSh0
ZXN0TGF5ZXIuZ2V0KCkpOworCisgICAgdGVzdExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAw
LCAxMDAwKSk7CisgICAgdGVzdExheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KEludFJlY3Qo
MCwgMCwgMTAwMCwgMTAwMCkpOworCisgICAgQ0NTZXR0aW5ncyBzZXR0aW5nczsKKyAgICBPd25Q
dHI8TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ+IGNsaWVudCA9IE1vY2tMYXllclRyZWVIb3N0Q2xp
ZW50OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TW9ja0xheWVyVHJlZUhvc3Q+IGhvc3QgPSBNb2Nr
TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKGNsaWVudC5nZXQoKSwgdGVzdExheWVyLCBzZXR0aW5ncyk7
CisKKyAgICB0ZXN0TGF5ZXItPnNldExheWVyVHJlZUhvc3QoaG9zdC5nZXQoKSk7CisKKyAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBjbGllbnQtPmNyZWF0ZUxheWVyVHJl
ZUhvc3RDb250ZXh0M0QoKTsKKyAgICBNb2NrVGV4dHVyZUFsbG9jYXRvciBhbGxvY2F0b3I7Cisg
ICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZhbGxvY2F0b3IpOworCisgICAgVEVTVF9WSURF
T19GT1JNQVRfTk9UX09QQVFVRShWaWRlb0ZyYW1lQ2hyb21pdW06OkludmFsaWQpOworICAgIFRF
U1RfVklERU9fRk9STUFUX09QQVFVRShWaWRlb0ZyYW1lQ2hyb21pdW06OlJHQjU1NSk7CisgICAg
VEVTVF9WSURFT19GT1JNQVRfT1BBUVVFKFZpZGVvRnJhbWVDaHJvbWl1bTo6UkdCNTY1KTsKKyAg
ICBURVNUX1ZJREVPX0ZPUk1BVF9PUEFRVUUoVmlkZW9GcmFtZUNocm9taXVtOjpSR0IyNCk7Cisg
ICAgVEVTVF9WSURFT19GT1JNQVRfT1BBUVVFKFZpZGVvRnJhbWVDaHJvbWl1bTo6UkdCMzIpOwor
ICAgIFRFU1RfVklERU9fRk9STUFUX05PVF9PUEFRVUUoVmlkZW9GcmFtZUNocm9taXVtOjpSR0JB
KTsKKyAgICBURVNUX1ZJREVPX0ZPUk1BVF9PUEFRVUUoVmlkZW9GcmFtZUNocm9taXVtOjpZVjEy
KTsKKyAgICBURVNUX1ZJREVPX0ZPUk1BVF9PUEFRVUUoVmlkZW9GcmFtZUNocm9taXVtOjpZVjE2
KTsKKyAgICBURVNUX1ZJREVPX0ZPUk1BVF9PUEFRVUUoVmlkZW9GcmFtZUNocm9taXVtOjpOVjEy
KTsKKyAgICBURVNUX1ZJREVPX0ZPUk1BVF9OT1RfT1BBUVVFKFZpZGVvRnJhbWVDaHJvbWl1bTo6
RW1wdHkpOworICAgIFRFU1RfVklERU9fRk9STUFUX09QQVFVRShWaWRlb0ZyYW1lQ2hyb21pdW06
OkFTQ0lJKTsKKyAgICBURVNUX1ZJREVPX0ZPUk1BVF9PUEFRVUUoVmlkZW9GcmFtZUNocm9taXVt
OjpJNDIwKTsKKyAgICBURVNUX1ZJREVPX0ZPUk1BVF9PUEFRVUUoVmlkZW9GcmFtZUNocm9taXVt
OjpOYXRpdmVUZXh0dXJlKTsKK30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117623</attachid>
            <date>2011-12-02 08:01:47 -0800</date>
            <delta_ts>2011-12-02 12:07:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72964-20111202110146.patch</filename>
            <type>text/plain</type>
            <size>29946</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmYwZTczMGQ4MTFiMGRj
YmJjYjY2OTg0ZWE5ZGI4ZTYzNzg3OGM2MC4uMmQ0Y2FmZTU4OTJjMDNiNmI4MzZiNzc1YzVhODRk
NmEzMzY1Njg5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDExLTEyLTAxICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTGV0
IExheWVyQ2hyb21pdW0gc3ViY2xhc3NlcyBvdmVycmlkZSB2YWx1ZSBvZiBvcGFxdWUoKSBmbGFn
LiBTZXQgaXQgZm9yIGltYWdlLCB2aWRlbywgYW5kIGNhbnZhcyBsYXllcnMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjk2NAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMh
KQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllckNocm9taXVtOjpDYW52YXNM
YXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OnB1
c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c09wYXF1ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVPcGFxdWUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6c2V0Q29udGVudHNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1
bTo6Y29udGVudHNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6dXBk
YXRlT3BhcXVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xh
eWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjp1
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlT3BhcXVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xM
YXllckNocm9taXVtOjpzZXREcmF3aW5nQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZU9wYXF1ZSk6CisKIDIwMTEtMTEtMzAgIFRpbSBIb3J0
b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgZHggY2F1c2VzIG5vbi1C
TVAgY2hhcmFjdGVycyB0byBmYWlsIHRvIHJlbmRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCAwNDA1OWZiNTdlOGZmZmViNTc3OTY0MWM5MThjYzJlMjMwZWZiMjk2Li42ZTZjYTZmMWFh
NDVkNzkzOTlkYTYyN2IxMTYwY2RiYTU2YTUzMWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDYxIEBACisyMDExLTEyLTAxICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTGV0IExheWVyQ2hyb21pdW0gc3ViY2xh
c3NlcyBvdmVycmlkZSB2YWx1ZSBvZiBvcGFxdWUoKSBmbGFnLiBTZXQgaXQgZm9yIGltYWdlLCB2
aWRlbywgYW5kIGNhbnZhcyBsYXllcnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03Mjk2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvSW1hZ2VMYXll
ckNocm9taXVtVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TW9ja0xheWVyRGVs
ZWdhdGU6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW1hZ2U6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW1hZ2U6OlRlc3RJbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXN0SW1hZ2U6On5UZXN0SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
VGVzdEltYWdlOjppc0JpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RJbWFnZTo6
Y3VycmVudEZyYW1lSGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEltYWdlOjpzaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6VGVzdEltYWdlOjpkZWNvZGVkU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXN0SW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAg
ICogdGVzdHMvVmlkZW9MYXllckNocm9taXVtVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpNb2NrTGF5ZXJEZWxlZ2F0ZTo6bm90aWZ5U3luY1JlcXVpcmVkKToKKyAgICAgICAgKFdl
YktpdDo6VGVzdFZpZGVvRnJhbWVQcm92aWRlcjo6VGVzdFZpZGVvRnJhbWVQcm92aWRlcik6Cisg
ICAgICAgIChXZWJLaXQ6OlRlc3RWaWRlb0ZyYW1lUHJvdmlkZXI6OmdldEN1cnJlbnRGcmFtZSk6
CisgICAgICAgIChXZWJLaXQ6OlRlc3RWaWRlb0ZyYW1lUHJvdmlkZXI6OnB1dEN1cnJlbnRGcmFt
ZSk6CisgICAgICAgIChXZWJLaXQ6OlRlc3RWaWRlb0ZyYW1lUHJvdmlkZXI6OmZvcm1hdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlRlc3RWaWRlb0ZyYW1lUHJvdmlkZXI6OndpZHRoKToKKyAgICAgICAg
KFdlYktpdDo6VGVzdFZpZGVvRnJhbWVQcm92aWRlcjo6aGVpZ2h0KToKKyAgICAgICAgKFdlYktp
dDo6VGVzdFZpZGVvRnJhbWVQcm92aWRlcjo6cGxhbmVzKToKKyAgICAgICAgKFdlYktpdDo6VGVz
dFZpZGVvRnJhbWVQcm92aWRlcjo6c3RyaWRlKToKKyAgICAgICAgKFdlYktpdDo6VGVzdFZpZGVv
RnJhbWVQcm92aWRlcjo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlRlc3RWaWRlb0ZyYW1lUHJv
dmlkZXI6OnJlcXVpcmVkVGV4dHVyZVNpemUpOgorICAgICAgICAoV2ViS2l0OjpUZXN0VmlkZW9G
cmFtZVByb3ZpZGVyOjpoYXNQYWRkaW5nQnl0ZXMpOgorICAgICAgICAoV2ViS2l0OjpUZXN0Vmlk
ZW9GcmFtZVByb3ZpZGVyOjp0ZXh0dXJlSWQpOgorICAgICAgICAoV2ViS2l0OjpUZXN0VmlkZW9G
cmFtZVByb3ZpZGVyOjpzZXRGb3JtYXQpOgorICAgICAgICAoV2ViS2l0OjpNb2NrVGV4dHVyZUFs
bG9jYXRvcjo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJLaXQ6Ok1vY2tUZXh0dXJlQWxs
b2NhdG9yOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRvck1vY2tX
ZWJHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRv
ck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KToKKyAgICAgICAg
KFdlYktpdDo6Q29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3Jh
bSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0b3JNb2NrV2ViR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRvck1v
Y2tXZWJHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KToKKyAgICAgICAgKFdlYktpdDo6
Q29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRDo6Q29tcG9zaXRvck1vY2tXZWJHcmFw
aGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJLaXQ6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50
OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6YW5p
bWF0ZUFuZExheW91dCk6CisgICAgICAgIChXZWJLaXQ6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50
OjphcHBseVNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdlYktpdDo6TW9ja0xheWVyVHJlZUhv
c3RDbGllbnQ6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QpOgorICAgICAgICAoV2ViS2l0
OjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6ZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKToKKyAgICAg
ICAgKFdlYktpdDo6TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6OmRpZENvbXBsZXRlU3dhcEJ1ZmZl
cnMpOgorICAgICAgICAoV2ViS2l0OjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6ZGlkUmVjcmVh
dGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpNb2NrTGF5ZXJUcmVlSG9zdENs
aWVudDo6c2NoZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0OjpNb2NrTGF5ZXJUcmVl
SG9zdENsaWVudDo6TW9ja0xheWVyVHJlZUhvc3RDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpN
b2NrTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6TW9ja0xheWVyVHJl
ZUhvc3Q6Ok1vY2tMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYktpdDo6VEVTVCk6CisKIDIw
MTEtMTEtMzAgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAg
IFdlYiBJbnNwZWN0b3I6IGdldCByaWQgb2YgZGVmZXJyZWQgYmFja2VuZC0+ZnJvbnQtZW5kIGNv
bW1hbmRzIHByb2Nlc3NpbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4
IDFhZGRlZmNjNTMzYzBjODAxMWM2YTc5MGUwMjU4YmE4MzNkNjllZGIuLjdmZWU2YTkzMzZiYTM5
ZTI1OGY5OTI1MGJhNTA5ODIwYWZhZTEyNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21p
dW0uY3BwCkBAIC00Miw5ICs0Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ2FudmFzTGF5
ZXJDaHJvbWl1bTo6Q2FudmFzTGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRl
KQogICAgIDogTGF5ZXJDaHJvbWl1bShkZWxlZ2F0ZSkKLSAgICAsIG1faGFzQWxwaGEodHJ1ZSkK
ICAgICAsIG1fcHJlbXVsdGlwbGllZEFscGhhKHRydWUpCiAgICAgLCBtX3RleHR1cmVJZCgwKQor
ICAgICwgbV9oYXNBbHBoYSh0cnVlKQogewogfQogCkBAIC02Myw3ICs2Myw2IEBAIHZvaWQgQ2Fu
dmFzTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiAK
ICAgICBDQ0NhbnZhc0xheWVySW1wbCogY2FudmFzTGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ0NhbnZh
c0xheWVySW1wbCo+KGxheWVyKTsKICAgICBjYW52YXNMYXllci0+c2V0VGV4dHVyZUlkKHRleHR1
cmVJZCgpKTsKLSAgICBjYW52YXNMYXllci0+c2V0SGFzQWxwaGEobV9oYXNBbHBoYSk7CiAgICAg
Y2FudmFzTGF5ZXItPnNldFByZW11bHRpcGxpZWRBbHBoYShtX3ByZW11bHRpcGxpZWRBbHBoYSk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaAppbmRleCA4NWE1ZWMyNzMzZGUxYTFh
ZjkyYTFlZTRmMmM3OTcwMjZiMzAyNTRiLi41YzIwN2VmM2U5MWE5NTlkNmQxOTE4N2ViNDA1YTQ2
YjEyMDI0ZmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCkBAIC01Miw3ICs1Miw2
IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDYW52YXNMYXllckNocm9taXVt
KENDTGF5ZXJEZWxlZ2F0ZSopOwogCi0gICAgYm9vbCBtX2hhc0FscGhhOwogICAgIGJvb2wgbV9w
cmVtdWx0aXBsaWVkQWxwaGE7CiAgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NM
YXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNGJlYWE1MjU1Y2E2Mjg4MzlmYTQ3
YmFkNjVlNjE0YjZmYzU1MTc1OC4uOGFmMWRlMGFkYTc3ZjdhZjhkZTM5Y2U0YWU1MjE4M2Y1ZjBi
ZGNkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC01NDMsNyAr
NTQzLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZU1hc2tzVG9Cb3VuZHMo
KQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNPcGFxdWUoKQog
ewotICAgIG1fbGF5ZXItPnNldE9wYXF1ZShtX2NvbnRlbnRzT3BhcXVlKTsKKyAgICBtX2xheWVy
LT5zZXRDb250ZW50c09wYXF1ZShtX2NvbnRlbnRzT3BhcXVlKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnVwZGF0ZUJhY2tmYWNlVmlzaWJpbGl0eSgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VM
YXllckNocm9taXVtLmNwcAppbmRleCA5ZDNlOWYzYTFlNzBkZWU1ZjE5ZTNjZjBiMjQ4Yjk0M2Fm
YTEwMmMwLi44OGE0YzgzNWUzMzlkMTcxMzE1MzAyMWJlOTI3NmNhMmJiMGVkMTVjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIEltYWdl
TGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHMoSW1hZ2UqIGNvbnRlbnRzKQogICAgIG1faW1hZ2VG
b3JDdXJyZW50RnJhbWUgPSBtX2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
OwogICAgIG1fZGlydHlSZWN0ID0gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgYm91bmRzKCkpOwog
ICAgIHNldE5lZWRzRGlzcGxheSgpOwotICAgIHNldE9wYXF1ZSghbV9jb250ZW50cy0+Y3VycmVu
dEZyYW1lSGFzQWxwaGEoKSk7CisgICAgdXBkYXRlT3BhcXVlKCk7CiB9CiAKIHZvaWQgSW1hZ2VM
YXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJv
bWl1bS5oCmluZGV4IDVmZTRmMjY2NjhiZGNjM2UyOWYwNGNmZmNkYTg4MmE3M2MzMWUzMjcuLjJm
ZjgzOTkwOTg4NmZiZDFiOGRiMmE5MTA4Y2NhZWM5ZGE4YTg1NjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5
ZXJDaHJvbWl1bS5oCkBAIC01OCw2ICs1OCw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0Q29u
dGVudHMoSW1hZ2UqIGltYWdlKTsKIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVPcGFxdWUoKSB7IHNldE9wYXF1ZShtX2NvbnRlbnRzICYmIG1fY29udGVudHMtPmlzQml0bWFw
SW1hZ2UoKSAmJiAhbV9jb250ZW50cy0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSk7IH0KKwogcHJp
dmF0ZToKICAgICBleHBsaWNpdCBJbWFnZUxheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKik7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNTRhN2Y4ODU3ZDY4OTAzODZhZWZhODU2NmE4
ZDI3ZDVkNWNlNTAyOC4uMjRmZTBlMTUwNzU4NTdlMDBiZjVkYjg0NzUyNTlhYjUyYzNjYmMzNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTY1LDYgKzY1LDcgQEAgTGF5ZXJDaHJvbWl1bTo6
TGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQogICAgICwgbV9vcGFjaXR5
KDEuMCkKICAgICAsIG1fYW5jaG9yUG9pbnRaKDApCiAgICAgLCBtX21hc2tzVG9Cb3VuZHMoZmFs
c2UpCisgICAgLCBtX2NvbnRlbnRzT3BhcXVlKGZhbHNlKQogICAgICwgbV9vcGFxdWUoZmFsc2Up
CiAgICAgLCBtX2RvdWJsZVNpZGVkKHRydWUpCiAgICAgLCBtX3VzZXNMYXllckNsaXBwaW5nKGZh
bHNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDcxM2RmYjI1MjMwMTA4NmZmYTdlNTgxYzA0MjA0
NzVlOGJkZmZiN2QuLmRiMjFjM2Q0NjEwZmM5YzJmY2ExMDBjYTBmN2QyYTg5ZDIwOTI0NWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmgKQEAgLTExMyw2ICsxMTMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgc2V0TmVlZHND
b21taXQoKTsgfQogICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7
IH0KIAorICAgIHZvaWQgc2V0Q29udGVudHNPcGFxdWUoYm9vbCBvcGFxdWUpIHsgbV9jb250ZW50
c09wYXF1ZSA9IG9wYXF1ZTsgdXBkYXRlT3BhcXVlKCk7IH0KKyAgICBib29sIGNvbnRlbnRzT3Bh
cXVlKCkgeyByZXR1cm4gbV9jb250ZW50c09wYXF1ZTsgfQorCiAgICAgdm9pZCBzZXRPcGFxdWUo
Ym9vbCBvcGFxdWUpIHsgbV9vcGFxdWUgPSBvcGFxdWU7IHNldE5lZWRzQ29tbWl0KCk7IH0KICAg
ICBib29sIG9wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CiAKQEAgLTIxNiw2ICsy
MTksMTAgQEAgcHJvdGVjdGVkOgogICAgIC8vIGhvbGQgY29udGV4dC1kZXBlbmRlbnQgcmVzb3Vy
Y2VzIHN1Y2ggYXMgdGV4dHVyZXMuCiAgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMo
KTsKIAorICAgIC8vIENhbiBiZSBvdmVycmlkZGVuIGJ5IGxheWVycyB0aGF0IHdhbnQgdGhlIG9w
YXF1ZSBmbGFnIHRvIHJlcHJlc2VudCBzb21ldGhpbmcgb3RoZXIgdGhhbgorICAgIC8vIHRoYW4g
Y29udGVudHNPcGFxdWUgZnJvbSBHcmFwaGljc0xheWVyLgorICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVPcGFxdWUoKSB7IHNldE9wYXF1ZShtX2NvbnRlbnRzT3BhcXVlKTsgfQorCiAgICAgdm9pZCBz
ZXROZWVkc0NvbW1pdCgpOwogCiAgICAgLy8gVGhlIGRpcnR5IHJlY3QgaXMgdGhlIHVuaW9uIG9m
IGRhbWFnZWQgcmVnaW9ucyB0aGF0IG5lZWQgcmVwYWludGluZy91cGRhdGluZy4KQEAgLTI2Nyw2
ICsyNzQsNyBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fb3BhY2l0eTsKICAgICBmbG9hdCBtX2Fu
Y2hvclBvaW50WjsKICAgICBib29sIG1fbWFza3NUb0JvdW5kczsKKyAgICBib29sIG1fY29udGVu
dHNPcGFxdWU7CiAgICAgYm9vbCBtX29wYXF1ZTsKICAgICBib29sIG1fZG91YmxlU2lkZWQ7CiAg
ICAgYm9vbCBtX3VzZXNMYXllckNsaXBwaW5nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggMTlhOTkzYmRiOWVkOTcwMmQ1ZDRkNDI5MGU2ODE0MTJiMTUzMmNiMC4uMDgxZWMx
ZDg3NTU4NWRhMzg0N2FjZTAyNzhhZTZlYmI2Yzc0YzM3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVy
Q2hyb21pdW0uY3BwCkBAIC05OCwxMyArOTgsMTUgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06
OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEMK
ICAgICBtX3NraXBzRHJhdyA9IGZhbHNlOwogCiAgICAgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFt
ZSA9IG1fcHJvdmlkZXItPmdldEN1cnJlbnRGcmFtZSgpOworICAgIG1fZnJhbWVGb3JtYXQgPSBm
cmFtZSA/IGZyYW1lLT5mb3JtYXQoKSA6IFZpZGVvRnJhbWVDaHJvbWl1bTo6SW52YWxpZDsKKyAg
ICB1cGRhdGVPcGFxdWUoKTsKKwogICAgIGlmICghZnJhbWUpIHsKICAgICAgICAgbV9za2lwc0Ry
YXcgPSB0cnVlOwogICAgICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUoZnJhbWUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9mcmFtZUZvcm1hdCA9IGZyYW1lLT5mb3Jt
YXQoKTsKICAgICBHQzNEZW51bSB0ZXh0dXJlRm9ybWF0ID0gZGV0ZXJtaW5lVGV4dHVyZUZvcm1h
dChmcmFtZSk7CiAgICAgaWYgKHRleHR1cmVGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUpIHsKICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBvdGhlciBwYXRocy4K
QEAgLTE0OSw2ICsxNTEsMTIgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEMKICAgICBtX3Byb3Zp
ZGVyLT5wdXRDdXJyZW50RnJhbWUoZnJhbWUpOwogfQogCit2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1
bTo6dXBkYXRlT3BhcXVlKCkKK3sKKyAgICBib29sIGZyYW1lT3BhcXVlID0gbV9mcmFtZUZvcm1h
dCAhPSBWaWRlb0ZyYW1lQ2hyb21pdW06OlJHQkEgJiYgbV9mcmFtZUZvcm1hdCAhPSBWaWRlb0Zy
YW1lQ2hyb21pdW06OkludmFsaWQgJiYgbV9mcmFtZUZvcm1hdCAhPSBWaWRlb0ZyYW1lQ2hyb21p
dW06OkVtcHR5OworICAgIHNldE9wYXF1ZShmcmFtZU9wYXF1ZSk7Cit9CisKIHZvaWQgVmlkZW9M
YXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKIHsKICAg
ICBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKGxheWVyKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXll
ckNocm9taXVtLmgKaW5kZXggNTE2YzhkMzg0N2MyYWRiNjRjNWJiZWZiN2M5OWNhYjVmNWFmYWJh
My4uNWYyNjdlNDU0YjhhZWFhMTUzMmZiNGRiZmY1ODQzMGJhZjRjY2U4OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9t
aXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlk
ZW9MYXllckNocm9taXVtLmgKQEAgLTYxLDYgKzYxLDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlT3BhcXVlKCk7CiAKIHByaXZhdGU6CiAgICAgc3RydWN0IFRleHR1cmUgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMjc2ZjNjOWZjMmZlMTA3ZjE2M2IyYWJhMDk4
YzAzZmJiMzM0NGNiNi4uNWUyZmE1YjY4MzhlMGFlMDBjMWU2MmRjODg1MDMzMDE0OTM2MmU0MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2Vi
R0xMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCkBAIC0xNDgsNiArMTQ4LDggQEAgdm9p
ZCBXZWJHTExheWVyQ2hyb21pdW06OnNldERyYXdpbmdCdWZmZXIoRHJhd2luZ0J1ZmZlciogZHJh
d2luZ0J1ZmZlcikKICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVz
ID0gY29udGV4dCgpLT5nZXRDb250ZXh0QXR0cmlidXRlcygpOwogICAgIG1faGFzQWxwaGEgPSBh
dHRyaWJ1dGVzLmFscGhhOwogICAgIG1fcHJlbXVsdGlwbGllZEFscGhhID0gYXR0cmlidXRlcy5w
cmVtdWx0aXBsaWVkQWxwaGE7CisKKyAgICB1cGRhdGVPcGFxdWUoKTsKIH0KIAogR3JhcGhpY3ND
b250ZXh0M0QqIFdlYkdMTGF5ZXJDaHJvbWl1bTo6Y29udGV4dCgpIGNvbnN0CkBAIC0xNjcsNiAr
MTY5LDE0IEBAIEdyYXBoaWNzQ29udGV4dDNEKiBXZWJHTExheWVyQ2hyb21pdW06OmxheWVyUmVu
ZGVyZXJDb250ZXh0KCkKICAgICByZXR1cm4gbGF5ZXJUcmVlSG9zdCgpLT5jb250ZXh0KCk7CiB9
CiAKK3ZvaWQgV2ViR0xMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBs
KiBsYXllcikKK3sKKyAgICBDYW52YXNMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKGxh
eWVyKTsKKworICAgIENDQ2FudmFzTGF5ZXJJbXBsKiBjYW52YXNMYXllciA9IHN0YXRpY19jYXN0
PENDQ2FudmFzTGF5ZXJJbXBsKj4obGF5ZXIpOworICAgIGNhbnZhc0xheWVyLT5zZXRIYXNBbHBo
YShtX2hhc0FscGhhKTsKK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vV2ViR0xMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAppbmRleCA2Mzc0YjllZjZiMTE3YWQy
MzU1YTFmYWRiNjlkZGI0MTA3YTY5MzEwLi44NGIwYzQyMmFmYTkyN2VhYTBmN2U5MjNiOTNmMjYy
OWVlYjc3MzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaApAQCAtNTIsMTIgKzUyLDE2
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0Qq
LCBDQ1RleHR1cmVVcGRhdGVyJik7CiAgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRDaGFuZ2VkKCk7
CisgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqKTsKICAgICBi
b29sIHBhaW50UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqKTsKIAogICAgIEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgY29uc3Q7CiAKICAgICB2b2lkIHNldERyYXdpbmdC
dWZmZXIoRHJhd2luZ0J1ZmZlciopOwogICAgIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIo
KSBjb25zdCB7IHJldHVybiBtX2RyYXdpbmdCdWZmZXI7IH0KK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlT3BhcXVlKCkgeyBzZXRPcGFxdWUoIW1faGFzQWxwaGEpOyB9CisKIHBy
aXZhdGU6CiAgICAgZXhwbGljaXQgV2ViR0xMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSop
OwogICAgIGZyaWVuZCBjbGFzcyBXZWJHTExheWVyQ2hyb21pdW1SYXRlTGltaXRUYXNrOwpAQCAt
NjYsNiArNzAsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3RleHR1cmVDaGFuZ2VkOwogICAg
IGJvb2wgbV90ZXh0dXJlVXBkYXRlZDsKKyAgICBib29sIG1faGFzQWxwaGE7CiAKICAgICAvLyBU
aGUgRHJhd2luZ0J1ZmZlciBob2xkaW5nIHRoZSBXZWJHTCBjb250ZW50cyBmb3IgdGhpcyBsYXll
ci4KICAgICAvLyBBIHJlZmVyZW5jZSBpcyBub3QgaGVsZCBoZXJlLCBiZWNhdXNlIHRoZSBEcmF3
aW5nQnVmZmVyIGFscmVhZHkgaG9sZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4
IGM5MDY2ODk3ZjdmZDA3Yjk2NmQyZWZhOWNhOTJjZTA5N2E2YjZiNGUuLjZiM2MwYTliZTNjZTU1
NzQxMDcwOTRlNzVmODAyMTM0MGEzNGJjZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
aQpAQCAtNzQsNiArNzQsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0lEQkJpbmRpbmdVdGlsaXRp
ZXNUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURCS2V5UGF0aFRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9JREJMZXZlbERCQ29kaW5nVGVzdC5jcHAnLAorICAgICAgICAgICAg
J3Rlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9J
bm5lckdlc3R1cmVSZWNvZ25pemVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0tleWJv
YXJkVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcsCkBAIC04OSw2
ICs5MCw3IEBACiAgICAgICAgICAgICAndGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9UcmVlVGVzdEhlbHBlcnMuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9UcmVlVGVzdEhlbHBlcnMuaCcsCisgICAgICAgICAgICAndGVzdHMvVmlkZW9MYXllckNo
cm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYkNvbXBvc2l0b3JJbXBsVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL1dlYkxheWVyVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9JbWFnZUxheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjU3
ZjY3ZDliYzg5YTU1ZmI1YmU0NzBlNzgzYmNhZDBiM2RlZjI3OQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHAK
QEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgIkltYWdlTGF5ZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VT
a2lhLmgiCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5o
PgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgTW9j
a0xheWVyRGVsZWdhdGUgOiBwdWJsaWMgQ0NMYXllckRlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICBN
T0NLX0NPTlNUX01FVEhPRDAoZHJhd3NDb250ZW50LCBib29sKCkpOworICAgIE1PQ0tfQ09OU1Rf
TUVUSE9EMChwcmVzZXJ2ZXMzRCwgYm9vbCgpKTsKKyAgICBNT0NLX01FVEhPRDIocGFpbnRDb250
ZW50cywgdm9pZChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JikpOworICAgIHZvaWQg
bm90aWZ5U3luY1JlcXVpcmVkKCkgeyB9Cit9OworCitjbGFzcyBUZXN0SW1hZ2UgOiBwdWJsaWMg
SW1hZ2UgeworcHVibGljOgorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGVzdEltYWdlPiBjcmVh
dGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBvcGFxdWUpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFRlc3RJbWFnZShzaXplLCBvcGFxdWUpKTsKKyAgICB9CisKKyAgICBl
eHBsaWNpdCBUZXN0SW1hZ2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBvcGFxdWUpCisgICAg
ICAgIDogSW1hZ2UoMCkKKyAgICAgICAgLCBtX3NpemUoc2l6ZSkKKyAgICB7CisgICAgICAgIG1f
bmF0aXZlSW1hZ2UgPSBuZXcgTmF0aXZlSW1hZ2VTa2lhKCk7CisgICAgICAgIG1fbmF0aXZlSW1h
Z2UtPmJpdG1hcCgpLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCksIDApOworICAgICAgICBtX25hdGl2ZUltYWdlLT5iaXRtYXAoKS5hbGxvY1BpeGVs
cygpOworICAgICAgICBtX25hdGl2ZUltYWdlLT5iaXRtYXAoKS5zZXRJc09wYXF1ZShvcGFxdWUp
OworICAgIH0KKworICAgIHZpcnR1YWwgflRlc3RJbWFnZSgpCisgICAgeworICAgICAgICBkZWxl
dGUgbV9uYXRpdmVJbWFnZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNCaXRtYXBJbWFn
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIGJvb2wgY3VycmVudEZyYW1lSGFzQWxwaGEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFt
X25hdGl2ZUltYWdlLT5iaXRtYXAoKS5pc09wYXF1ZSgpOworICAgIH0KKworICAgIHZpcnR1YWwg
SW50U2l6ZSBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NpemU7CisgICAg
fQorCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpCisgICAgeworICAgICAgICBpZiAobV9zaXplLmlzWmVybygpKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisKKyAgICAgICAgcmV0dXJuIG1fbmF0aXZlSW1hZ2U7CisgICAgfQorCisgICAgLy8g
U3R1YiBpbXBsZW1lbnRhdGlvbnMgb2YgcHVyZSB2aXJ0dWFsIEltYWdlIGZ1bmN0aW9ucy4KKyAg
ICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGRlY29kZWRTaXplKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAwdTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLAorICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkNvbG9yU3BhY2Us
CisgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IpCisgICAg
eworICAgIH0KKworcHJpdmF0ZToKKworICAgIEludFNpemUgbV9zaXplOworICAgIE5hdGl2ZUlt
YWdlUHRyIG1fbmF0aXZlSW1hZ2U7Cit9OworCitURVNUKEltYWdlTGF5ZXJDaHJvbWl1bVRlc3Qs
IG9wYXF1ZUltYWdlcykKK3sKKyAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBtb2NrRGVsZWdhdGU7CisK
KyAgICBSZWZQdHI8SW1hZ2VMYXllckNocm9taXVtPiB0ZXN0TGF5ZXIgPSBJbWFnZUxheWVyQ2hy
b21pdW06OmNyZWF0ZSgmbW9ja0RlbGVnYXRlKTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0TGF5ZXIu
Z2V0KCkpOworCisgICAgUmVmUHRyPEltYWdlPiBvcGFxdWVJbWFnZSA9IFRlc3RJbWFnZTo6Y3Jl
YXRlKEludFNpemUoMTAwLCAxMDApLCB0cnVlKTsKKyAgICBBU1NFUlRfVFJVRShvcGFxdWVJbWFn
ZS5nZXQoKSk7CisgICAgUmVmUHRyPEltYWdlPiBub25PcGFxdWVJbWFnZSA9IFRlc3RJbWFnZTo6
Y3JlYXRlKEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAgQVNTRVJUX1RSVUUobm9uT3Bh
cXVlSW1hZ2UuZ2V0KCkpOworCisgICAgQVNTRVJUX0ZBTFNFKHRlc3RMYXllci0+b3BhcXVlKCkp
OworICAgIHRlc3RMYXllci0+c2V0Q29udGVudHNPcGFxdWUodHJ1ZSk7CisgICAgQVNTRVJUX0ZB
TFNFKHRlc3RMYXllci0+b3BhcXVlKCkpOworCisgICAgdGVzdExheWVyLT5zZXRDb250ZW50cyhv
cGFxdWVJbWFnZS5nZXQoKSk7CisKKyAgICBBU1NFUlRfVFJVRSh0ZXN0TGF5ZXItPm9wYXF1ZSgp
KTsKKyAgICB0ZXN0TGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKGZhbHNlKTsKKyAgICBBU1NFUlRf
VFJVRSh0ZXN0TGF5ZXItPm9wYXF1ZSgpKTsKKworICAgIHRlc3RMYXllci0+c2V0Q29udGVudHMo
bm9uT3BhcXVlSW1hZ2UuZ2V0KCkpOworCisgICAgQVNTRVJUX0ZBTFNFKHRlc3RMYXllci0+b3Bh
cXVlKCkpOworICAgIHRlc3RMYXllci0+c2V0Q29udGVudHNPcGFxdWUodHJ1ZSk7CisgICAgQVNT
RVJUX0ZBTFNFKHRlc3RMYXllci0+b3BhcXVlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9WaWRlb0xheWVyQ2hyb21pdW1U
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVmlkZW9MYXllckNocm9taXVt
VGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uM2FjZjVhMzFiODU1MGQ2OGY2N2Y1ZjVmNGU3ZTU3YmJhNmMz
N2VkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVmlk
ZW9MYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgor
CisjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlLmgiCisjaW5jbHVkZSAiTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNELmgi
CisjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJWaWRlb0ZyYW1lQ2hyb21p
dW0uaCIKKyNpbmNsdWRlICJWaWRlb0ZyYW1lUHJvdmlkZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9DQ1RleHR1cmVVcGRhdGVyLmgiCisjaW5jbHVk
ZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25hbWVzcGFjZSB7CisK
K2NsYXNzIE1vY2tMYXllckRlbGVnYXRlIDogcHVibGljIENDTGF5ZXJEZWxlZ2F0ZSB7CitwdWJs
aWM6CisgICAgTU9DS19DT05TVF9NRVRIT0QwKGRyYXdzQ29udGVudCwgYm9vbCgpKTsKKyAgICBN
T0NLX0NPTlNUX01FVEhPRDAocHJlc2VydmVzM0QsIGJvb2woKSk7CisgICAgTU9DS19NRVRIT0Qy
KHBhaW50Q29udGVudHMsIHZvaWQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYpKTsK
KyAgICB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZCgpIHsgfQorfTsKKworY2xhc3MgVGVzdFZpZGVv
RnJhbWVQcm92aWRlciA6IHB1YmxpYyBWaWRlb0ZyYW1lUHJvdmlkZXIsIHB1YmxpYyBWaWRlb0Zy
YW1lQ2hyb21pdW0geworcHVibGljOgorICAgIFRlc3RWaWRlb0ZyYW1lUHJvdmlkZXIoKSA6IG1f
Zm9ybWF0KFZpZGVvRnJhbWVDaHJvbWl1bTo6RW1wdHkpIHsgfQorCisgICAgLy8gVmlkZW9GcmFt
ZVByb3ZpZGVyIGZ1bmN0aW9ucworICAgIHZpcnR1YWwgVmlkZW9GcmFtZUNocm9taXVtKiBnZXRD
dXJyZW50RnJhbWUoKSB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCB2b2lkIHB1dEN1cnJl
bnRGcmFtZShWaWRlb0ZyYW1lQ2hyb21pdW0qKSB7IH0KKworICAgIC8vIFZpZGVvRnJhbWVDaHJv
bWl1bSBmdW5jdGlvbnMKKyAgICB2aXJ0dWFsIFZpZGVvRnJhbWVDaHJvbWl1bTo6Rm9ybWF0IGZv
cm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0OyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCB3
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIDEwMDsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgd2lkdGgo
dW5zaWduZWQgcGxhbmUpIGNvbnN0IHsgcmV0dXJuIDEwMDsgfQorICAgIHZpcnR1YWwgdW5zaWdu
ZWQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gMTAwOyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBo
ZWlnaHQodW5zaWduZWQgcGxhbmUpIGNvbnN0IHsgcmV0dXJuIDEwMDsgfQorICAgIHZpcnR1YWwg
dW5zaWduZWQgcGxhbmVzKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHN0
cmlkZSh1bnNpZ25lZCBwbGFuZSkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgY29u
c3Qgdm9pZCogZGF0YSh1bnNpZ25lZCBwbGFuZSkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZp
cnR1YWwgY29uc3QgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplKHVuc2lnbmVkIHBsYW5lKSBj
b25zdCB7IHJldHVybiBJbnRTaXplKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFzUGFkZGluZ0J5
dGVzKHVuc2lnbmVkIHBsYW5lKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
dW5zaWduZWQgdGV4dHVyZUlkKCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisgICAgdm9pZCBzZXRG
b3JtYXQoVmlkZW9GcmFtZUNocm9taXVtOjpGb3JtYXQgZm9ybWF0KSB7IG1fZm9ybWF0ID0gZm9y
bWF0OyB9CisKK3ByaXZhdGU6CisgICAgVmlkZW9GcmFtZUNocm9taXVtOjpGb3JtYXQgbV9mb3Jt
YXQ7Cit9OworCitjbGFzcyBNb2NrVGV4dHVyZUFsbG9jYXRvciA6IHB1YmxpYyBUZXh0dXJlQWxs
b2NhdG9yIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGNyZWF0ZVRleHR1cmUoY29u
c3QgSW50U2l6ZSYsIEdDM0RlbnVtIGZvcm1hdCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmUsIGNvbnN0IEludFNpemUmLCBHQzNE
ZW51bSkgeyB9Cit9OworCisvLyBUZXN0IHN0dWIgZm9yIFdlYkdyYXBoaWNzQ29udGV4dDNELiBS
ZXR1cm5zIGNhbm5lZCB2YWx1ZXMgbmVlZGVkIGZvciBjb21wb3NpdG9yIGluaXRpYWxpemF0aW9u
LgorY2xhc3MgQ29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCA6IHB1YmxpYyBNb2Nr
V2ViR3JhcGhpY3NDb250ZXh0M0QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENv
bXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDb21wb3NpdG9yTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEKCkpOyB9CisgICAgdmly
dHVhbCBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0
dWFsIFdlYkdMSWQgY3JlYXRlUHJvZ3JhbSgpIHsgcmV0dXJuIDE7IH0KKyAgICB2aXJ0dWFsIFdl
YkdMSWQgY3JlYXRlU2hhZGVyKFdHQzNEZW51bSkgeyByZXR1cm4gMTsgfQorICAgIHZpcnR1YWwg
dm9pZCBnZXRTaGFkZXJpdihXZWJHTElkLCBXR0MzRGVudW0sIFdHQzNEaW50KiB2YWx1ZSkgeyAq
dmFsdWUgPSAxOyB9CisgICAgdmlydHVhbCB2b2lkIGdldFByb2dyYW1pdihXZWJHTElkLCBXR0Mz
RGVudW0sIFdHQzNEaW50KiB2YWx1ZSkgeyAqdmFsdWUgPSAxOyB9CisKK3ByaXZhdGU6CisgICAg
Q29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCgpIHsgfQorfTsKKworY2xhc3MgTW9j
a0xheWVyVHJlZUhvc3RDbGllbnQgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0Q2xpZW50IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxNb2NrTGF5ZXJUcmVlSG9zdENsaWVudD4gY3Jl
YXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IE1vY2tMYXllclRyZWVIb3N0Q2xpZW50KCkpOyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRp
bWUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNp
emUmIHNjcm9sbERlbHRhLCBmbG9hdCBzY2FsZSkgeyB9CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKQorICAg
IHsKKyAgICAgICAgT3duUHRyPFdlYkdyYXBoaWNzQ29udGV4dDNEPiBtb2NrID0gQ29tcG9zaXRv
ck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKCk7CisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzOworICAgICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29u
dGV4dEZyb21XZWJDb250ZXh0KG1vY2sucmVsZWFzZSgpLCBhdHRycywgMCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OkZvclVzZU9uQW5vdGhlclRocmVhZCk7CisgICAgICAgIHJldHVybiBjb250ZXh0OworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVTd2FwQnVmZmVycygpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2NoZWR1bGVDb21wb3NpdGUoKSB7IH0KKworcHJpdmF0ZToKKyAgICBNb2NrTGF5ZXJUcmVlSG9z
dENsaWVudCgpIHsgfQorfTsKKworLy8gQWRhcHRzIENDTGF5ZXJUcmVlSG9zdCBmb3IgdGVzdC4g
SW5qZWN0cyBNb2NrTGF5ZXJUcmVlSG9zdEltcGwuCitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdCA6
IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PE1vY2tMYXllclRyZWVIb3N0PiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQs
IFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyLCBjb25zdCBDQ1NldHRpbmdzJiBz
ZXR0aW5ncykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTW9ja0xheWVyVHJl
ZUhvc3QoY2xpZW50LCByb290TGF5ZXIsIHNldHRpbmdzKSk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIE1vY2tMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LCBQYXNz
UmVmUHRyPExheWVyQ2hyb21pdW0+IHJvb3RMYXllciwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGlu
Z3MpCisgICAgICAgIDogQ0NMYXllclRyZWVIb3N0KGNsaWVudCwgc2V0dGluZ3MpCisgICAgewor
ICAgICAgICBzZXRSb290TGF5ZXIocm9vdExheWVyKTsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0g
aW5pdGlhbGl6ZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKKyAgICB9Cit9Owor
CisjZGVmaW5lIFRFU1RfSVNfT1BBUVVFKGlzT3BhcXVlKSBcCisgICAgQVNTRVJUX0VRKGlzT3Bh
cXVlLCB0ZXN0TGF5ZXItPm9wYXF1ZSgpKTsgXAorICAgIHRlc3RMYXllci0+c2V0Q29udGVudHNP
cGFxdWUoIWlzT3BhcXVlKTsgXAorICAgIEFTU0VSVF9FUShpc09wYXF1ZSwgdGVzdExheWVyLT5v
cGFxdWUoKSk7IFwKKyAgICB0ZXN0TGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKGlzT3BhcXVlKTsg
XAorICAgIEFTU0VSVF9FUShpc09wYXF1ZSwgdGVzdExheWVyLT5vcGFxdWUoKSk7CisKKyNkZWZp
bmUgVEVTVF9WSURFT19GT1JNQVRfT1BBUVVFKGZvcm1hdCkgXAorICAgIHByb3ZpZGVyLnNldEZv
cm1hdChmb3JtYXQpOyBcCisgICAgdGVzdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsgXAorICAg
IHRlc3RMYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb250ZXh0LmdldCgpLCB1cGRh
dGVyKTsgXAorICAgIFRFU1RfSVNfT1BBUVVFKHRydWUpOworCisjZGVmaW5lIFRFU1RfVklERU9f
Rk9STUFUX05PVF9PUEFRVUUoZm9ybWF0KSBcCisgICAgcHJvdmlkZXIuc2V0Rm9ybWF0KGZvcm1h
dCk7IFwKKyAgICB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOyBcCisgICAgdGVzdExheWVy
LT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQuZ2V0KCksIHVwZGF0ZXIpOyBcCisg
ICAgVEVTVF9JU19PUEFRVUUoZmFsc2UpOworCitURVNUKFZpZGVvTGF5ZXJDaHJvbWl1bVRlc3Qs
IG9wYXF1ZUZvcm1hdHMpCit7CisgICAgTW9ja0xheWVyRGVsZWdhdGUgbW9ja0RlbGVnYXRlOwor
ICAgIFRlc3RWaWRlb0ZyYW1lUHJvdmlkZXIgcHJvdmlkZXI7CisgICAgUmVmUHRyPFZpZGVvTGF5
ZXJDaHJvbWl1bT4gdGVzdExheWVyID0gVmlkZW9MYXllckNocm9taXVtOjpjcmVhdGUoJm1vY2tE
ZWxlZ2F0ZSwgJnByb3ZpZGVyKTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0TGF5ZXIuZ2V0KCkpOwor
CisgICAgdGVzdExheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAwLCAxMDAwKSk7CisgICAgdGVz
dExheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkp
OworCisgICAgQ0NTZXR0aW5ncyBzZXR0aW5nczsKKyAgICBPd25QdHI8TW9ja0xheWVyVHJlZUhv
c3RDbGllbnQ+IGNsaWVudCA9IE1vY2tMYXllclRyZWVIb3N0Q2xpZW50OjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8TW9ja0xheWVyVHJlZUhvc3Q+IGhvc3QgPSBNb2NrTGF5ZXJUcmVlSG9zdDo6Y3Jl
YXRlKGNsaWVudC5nZXQoKSwgdGVzdExheWVyLCBzZXR0aW5ncyk7CisKKyAgICB0ZXN0TGF5ZXIt
PnNldExheWVyVHJlZUhvc3QoaG9zdC5nZXQoKSk7CisKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNvbnRleHQgPSBjbGllbnQtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsK
KyAgICBNb2NrVGV4dHVyZUFsbG9jYXRvciBhbGxvY2F0b3I7CisgICAgQ0NUZXh0dXJlVXBkYXRl
ciB1cGRhdGVyKCZhbGxvY2F0b3IpOworCisgICAgVEVTVF9WSURFT19GT1JNQVRfTk9UX09QQVFV
RShWaWRlb0ZyYW1lQ2hyb21pdW06OkludmFsaWQpOworICAgIFRFU1RfVklERU9fRk9STUFUX09Q
QVFVRShWaWRlb0ZyYW1lQ2hyb21pdW06OlJHQjU1NSk7CisgICAgVEVTVF9WSURFT19GT1JNQVRf
T1BBUVVFKFZpZGVvRnJhbWVDaHJvbWl1bTo6UkdCNTY1KTsKKyAgICBURVNUX1ZJREVPX0ZPUk1B
VF9PUEFRVUUoVmlkZW9GcmFtZUNocm9taXVtOjpSR0IyNCk7CisgICAgVEVTVF9WSURFT19GT1JN
QVRfT1BBUVVFKFZpZGVvRnJhbWVDaHJvbWl1bTo6UkdCMzIpOworICAgIFRFU1RfVklERU9fRk9S
TUFUX05PVF9PUEFRVUUoVmlkZW9GcmFtZUNocm9taXVtOjpSR0JBKTsKKyAgICBURVNUX1ZJREVP
X0ZPUk1BVF9PUEFRVUUoVmlkZW9GcmFtZUNocm9taXVtOjpZVjEyKTsKKyAgICBURVNUX1ZJREVP
X0ZPUk1BVF9PUEFRVUUoVmlkZW9GcmFtZUNocm9taXVtOjpZVjE2KTsKKyAgICBURVNUX1ZJREVP
X0ZPUk1BVF9PUEFRVUUoVmlkZW9GcmFtZUNocm9taXVtOjpOVjEyKTsKKyAgICBURVNUX1ZJREVP
X0ZPUk1BVF9OT1RfT1BBUVVFKFZpZGVvRnJhbWVDaHJvbWl1bTo6RW1wdHkpOworICAgIFRFU1Rf
VklERU9fRk9STUFUX09QQVFVRShWaWRlb0ZyYW1lQ2hyb21pdW06OkFTQ0lJKTsKKyAgICBURVNU
X1ZJREVPX0ZPUk1BVF9PUEFRVUUoVmlkZW9GcmFtZUNocm9taXVtOjpJNDIwKTsKKyAgICBURVNU
X1ZJREVPX0ZPUk1BVF9PUEFRVUUoVmlkZW9GcmFtZUNocm9taXVtOjpOYXRpdmVUZXh0dXJlKTsK
K30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117665</attachid>
            <date>2011-12-02 12:07:36 -0800</date>
            <delta_ts>2011-12-05 12:05:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72964-20111202150735.patch</filename>
            <type>text/plain</type>
            <size>35837</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmYwZTczMGQ4MTFiMGRj
YmJjYjY2OTg0ZWE5ZGI4ZTYzNzg3OGM2MC4uN2RmNWE5YjU5NGY2ZjhmYWU5YWJmODQzNjY3ZjQy
ZGYxMTE4MmUzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDExLTEyLTAyICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTGV0
IExheWVyQ2hyb21pdW0gc3ViY2xhc3NlcyBvdmVycmlkZSB2YWx1ZSBvZiBvcGFxdWUoKSBmbGFn
LiBTZXQgaXQgZm9yIGltYWdlLCB2aWRlbywgYW5kIGNhbnZhcyBsYXllcnMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjk2NAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMh
KQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllckNocm9taXVtOjpDYW52YXNM
YXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OnB1
c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNocm9taXVtOjpjb250ZW50c09wYXF1ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9WaWRlb0ZyYW1lQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6
OlZpZGVvRnJhbWVDaHJvbWl1bTo6aXNGb3JtYXRPcGFxdWUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OnNldERyYXdpbmdCdWZmZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDQ2FudmFzTGF5ZXJJbXBsOjpDQ0NhbnZhc0xh
eWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0NhbnZhc0xheWVySW1wbDo6ZHJhdyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwu
aDoKKwogMjAxMS0xMS0zMCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4K
IAogICAgICAgICBkeCBjYXVzZXMgbm9uLUJNUCBjaGFyYWN0ZXJzIHRvIGZhaWwgdG8gcmVuZGVy
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDA0MDU5ZmI1N2U4ZmZmZWI1Nzc5NjQxYzkx
OGNjMmUyMzBlZmIyOTYuLjg0NTIwMWQwNzk3ODViYWRmMGViMWNkMDYyNGFjYmQyODA2ZTcxNmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMgQEAKKzIwMTEtMTItMDIg
IERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVt
XSBMZXQgTGF5ZXJDaHJvbWl1bSBzdWJjbGFzc2VzIG92ZXJyaWRlIHZhbHVlIG9mIG9wYXF1ZSgp
IGZsYWcuIFNldCBpdCBmb3IgaW1hZ2UsIHZpZGVvLCBhbmQgY2FudmFzIGxheWVycy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyOTY0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToK
KyAgICAgICAgKiBwdWJsaWMvV2ViQ29udGVudExheWVyQ2xpZW50Lmg6CisgICAgICAgICogc3Jj
L1dlYkNvbnRlbnRMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5
ZXJJbXBsOjpjb250ZW50c09wYXF1ZSk6CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllcklt
cGwuaDoKKyAgICAgICAgKiBzcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsOjpjb250ZW50c09wYXF1
ZSk6CisgICAgICAgICogc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5oOgorICAgICAg
ICAqIHNyYy9XZWJMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllckltcGw6
OmNvbnRlbnRzT3BhcXVlKToKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJJbXBsLmg6CisgICAgICAg
ICogdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TW9ja0xheWVyRGVsZWdhdGU6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXN0SW1hZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW1hZ2U6
OlRlc3RJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW1hZ2U6On5UZXN0SW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6VGVzdEltYWdlOjppc0JpdG1hcEltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRlc3RJbWFnZTo6Y3VycmVudEZyYW1lSGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdEltYWdlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RJbWFnZTo6bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEltYWdlOjpkZXN0
cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEltYWdlOjpkZWNvZGVkU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorICAgICAg
ICAqIHRlc3RzL1ZpZGVvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6TW9ja0xheWVyRGVsZWdhdGU6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChX
ZWJLaXQ6OlRlc3RWaWRlb0ZyYW1lUHJvdmlkZXI6OlRlc3RWaWRlb0ZyYW1lUHJvdmlkZXIpOgor
ICAgICAgICAoV2ViS2l0OjpUZXN0VmlkZW9GcmFtZVByb3ZpZGVyOjpnZXRDdXJyZW50RnJhbWUp
OgorICAgICAgICAoV2ViS2l0OjpUZXN0VmlkZW9GcmFtZVByb3ZpZGVyOjpwdXRDdXJyZW50RnJh
bWUpOgorICAgICAgICAoV2ViS2l0OjpUZXN0VmlkZW9GcmFtZVByb3ZpZGVyOjpmb3JtYXQpOgor
ICAgICAgICAoV2ViS2l0OjpUZXN0VmlkZW9GcmFtZVByb3ZpZGVyOjp3aWR0aCk6CisgICAgICAg
IChXZWJLaXQ6OlRlc3RWaWRlb0ZyYW1lUHJvdmlkZXI6OmhlaWdodCk6CisgICAgICAgIChXZWJL
aXQ6OlRlc3RWaWRlb0ZyYW1lUHJvdmlkZXI6OnBsYW5lcyk6CisgICAgICAgIChXZWJLaXQ6OlRl
c3RWaWRlb0ZyYW1lUHJvdmlkZXI6OnN0cmlkZSk6CisgICAgICAgIChXZWJLaXQ6OlRlc3RWaWRl
b0ZyYW1lUHJvdmlkZXI6OmRhdGEpOgorICAgICAgICAoV2ViS2l0OjpUZXN0VmlkZW9GcmFtZVBy
b3ZpZGVyOjpyZXF1aXJlZFRleHR1cmVTaXplKToKKyAgICAgICAgKFdlYktpdDo6VGVzdFZpZGVv
RnJhbWVQcm92aWRlcjo6aGFzUGFkZGluZ0J5dGVzKToKKyAgICAgICAgKFdlYktpdDo6VGVzdFZp
ZGVvRnJhbWVQcm92aWRlcjo6dGV4dHVyZUlkKToKKyAgICAgICAgKFdlYktpdDo6VGVzdFZpZGVv
RnJhbWVQcm92aWRlcjo6c2V0Rm9ybWF0KToKKyAgICAgICAgKFdlYktpdDo6TW9ja1RleHR1cmVB
bGxvY2F0b3I6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViS2l0OjpNb2NrVGV4dHVyZUFs
bG9jYXRvcjo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0b3JNb2Nr
V2ViR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0
b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAg
IChXZWJLaXQ6OkNvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dy
YW0pOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdG9yTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdG9yTW9ja1dlYkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdik6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0b3JN
b2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdik6CisgICAgICAgIChXZWJLaXQ6
OkNvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0Q6OkNvbXBvc2l0b3JNb2NrV2ViR3Jh
cGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViS2l0OjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6OmFu
aW1hdGVBbmRMYXlvdXQpOgorICAgICAgICAoV2ViS2l0OjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVu
dDo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6Ok1vY2tMYXllclRyZWVI
b3N0Q2xpZW50OjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKToKKyAgICAgICAgKFdlYktp
dDo6TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6OmRpZENvbW1pdEFuZERyYXdGcmFtZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50OjpkaWRDb21wbGV0ZVN3YXBCdWZm
ZXJzKToKKyAgICAgICAgKFdlYktpdDo6TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6OmRpZFJlY3Jl
YXRlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6TW9ja0xheWVyVHJlZUhvc3RD
bGllbnQ6OnNjaGVkdWxlQ29tcG9zaXRlKToKKyAgICAgICAgKFdlYktpdDo6TW9ja0xheWVyVHJl
ZUhvc3RDbGllbnQ6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6
TW9ja0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok1vY2tMYXllclRy
ZWVIb3N0OjpNb2NrTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJLaXQ6OlRFU1QpOgorICAg
ICAgICAqIHRlc3RzL1dlYkxheWVyVGVzdC5jcHA6CisKIDIwMTEtMTEtMzAgIFBhdmVsIEZlbGRt
YW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGdldCBy
aWQgb2YgZGVmZXJyZWQgYmFja2VuZC0+ZnJvbnQtZW5kIGNvbW1hbmRzIHByb2Nlc3NpbmcuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXNMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDFhZGRlZmNjNTMzYzBjODAxMWM2
YTc5MGUwMjU4YmE4MzNkNjllZGIuLjRiMWY5ZjgwYmJiMDM2NTlhZGExM2QwYzUyMTgwNTczYWM0
NjE3YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCkBAIC00Miw3ICs0Miw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ2FudmFzTGF5ZXJDaHJvbWl1bTo6Q2FudmFzTGF5
ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQogICAgIDogTGF5ZXJDaHJvbWl1
bShkZWxlZ2F0ZSkKLSAgICAsIG1faGFzQWxwaGEodHJ1ZSkKICAgICAsIG1fcHJlbXVsdGlwbGll
ZEFscGhhKHRydWUpCiAgICAgLCBtX3RleHR1cmVJZCgwKQogewpAQCAtNjMsNyArNjIsNiBAQCB2
b2lkIENhbnZhc0xheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxh
eWVyKQogCiAgICAgQ0NDYW52YXNMYXllckltcGwqIGNhbnZhc0xheWVyID0gc3RhdGljX2Nhc3Q8
Q0NDYW52YXNMYXllckltcGwqPihsYXllcik7CiAgICAgY2FudmFzTGF5ZXItPnNldFRleHR1cmVJ
ZCh0ZXh0dXJlSWQoKSk7Ci0gICAgY2FudmFzTGF5ZXItPnNldEhhc0FscGhhKG1faGFzQWxwaGEp
OwogICAgIGNhbnZhc0xheWVyLT5zZXRQcmVtdWx0aXBsaWVkQWxwaGEobV9wcmVtdWx0aXBsaWVk
QWxwaGEpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgKaW5kZXggODVhNWVjMjcz
M2RlMWExYWY5MmExZWU0ZjJjNzk3MDI2YjMwMjU0Yi4uNWMyMDdlZjNlOTFhOTU5ZDZkMTkxODdl
YjQwNWE0NmIxMjAyNGZlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaApAQCAtNTIs
NyArNTIsNiBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ2FudmFzTGF5ZXJD
aHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqKTsKIAotICAgIGJvb2wgbV9oYXNBbHBoYTsKICAgICBi
b29sIG1fcHJlbXVsdGlwbGllZEFscGhhOwogICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDRiZWFhNTI1NWNhNjI4
ODM5ZmE0N2JhZDY1ZTYxNGI2ZmM1NTE3NTguLjgyYzU2NGQ4OTIxNWJhODdmYTgxMDBmNWZmMDU2
OGZlMDBiYzY3MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAt
MjU3LDE1ICsyNTcsNiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6Y2xlYXJCYWNrZ3Jv
dW5kQ29sb3IoKQogICAgIG1fY29udGVudHNMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKHN0YXRp
Y19jYXN0PFJHQkEzMj4oMCkpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0
Q29udGVudHNPcGFxdWUoYm9vbCBvcGFxdWUpCi17Ci0gICAgaWYgKG1fY29udGVudHNPcGFxdWUg
PT0gb3BhcXVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRDb250
ZW50c09wYXF1ZShvcGFxdWUpOwotICAgIHVwZGF0ZUNvbnRlbnRzT3BhcXVlKCk7Ci19Ci0KIHZv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciogbWFz
a0xheWVyKQogewogICAgIGlmIChtYXNrTGF5ZXIgPT0gbV9tYXNrTGF5ZXIpCkBAIC01NDEsMTEg
KzUzMiw2IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVNYXNrc1RvQm91bmRz
KCkKICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVy
Q2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzT3BhcXVlKCkKLXsKLSAgICBtX2xheWVyLT5zZXRPcGFx
dWUobV9jb250ZW50c09wYXF1ZSk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1
cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkoKQogewogICAgIG1fbGF5ZXItPnNldERvdWJsZVNpZGVk
KG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgK
aW5kZXggYjA1ZDA3YmY2MzdiZjVjZmUwZTRiZWM0ZTM5M2RiYTdiMGMwM2RmMi4uYzEzZTkwOTI0
ODViZTQ5ZTdmMDFkM2JiYjJlOTk1MDIzY2JlNmQ0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXll
ckNocm9taXVtLmgKQEAgLTczLDcgKzczLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBz
ZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJC
YWNrZ3JvdW5kQ29sb3IoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c09wYXF1ZShi
b29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wpOwogCiAg
ICAgdmlydHVhbCB2b2lkIHNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqKTsKQEAg
LTk5LDYgKzk4LDcgQEAgcHVibGljOgogICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGlt
cGxlbWVudCB0aGUgQ0NMYXllckRlbGVnYXRlIGludGVyZmFjZS4KICAgICB2aXJ0dWFsIGJvb2wg
ZHJhd3NDb250ZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCk7CisgICAgdmlydHVhbCBib29sIGNv
bnRlbnRzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NMYXllcjo6Y29udGVudHNPcGFx
dWUoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoKTsKIAogcHJpdmF0
ZToKQEAgLTExNiw3ICsxMTYsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlVHJhbnNmb3Jt
KCk7CiAgICAgdm9pZCB1cGRhdGVDaGlsZHJlblRyYW5zZm9ybSgpOwogICAgIHZvaWQgdXBkYXRl
TWFza3NUb0JvdW5kcygpOwotICAgIHZvaWQgdXBkYXRlQ29udGVudHNPcGFxdWUoKTsKICAgICB2
b2lkIHVwZGF0ZUJhY2tmYWNlVmlzaWJpbGl0eSgpOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJQcmVz
ZXJ2ZXMzRCgpOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJD
aHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDlkM2U5ZjNhMWU3MGRlZTVmMTllM2NmMGIyNDhi
OTQzYWZhMTAyYzAuLmNjNzYxMjhmZDA0OTMwOWY3NDE4MTAzN2MwNGNhMTA2MTM1Mjg2YTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtMTQwLDggKzE0MCw4IEBAIHZvaWQg
SW1hZ2VMYXllckNocm9taXVtOjpzZXRDb250ZW50cyhJbWFnZSogY29udGVudHMpCiAgICAgbV9j
b250ZW50cyA9IGNvbnRlbnRzOwogICAgIG1faW1hZ2VGb3JDdXJyZW50RnJhbWUgPSBtX2NvbnRl
bnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgIG1fZGlydHlSZWN0ID0gSW50
UmVjdChJbnRQb2ludCgwLCAwKSwgYm91bmRzKCkpOworICAgIHNldE9wYXF1ZShtX2NvbnRlbnRz
LT5pc0JpdG1hcEltYWdlKCkgJiYgIW1fY29udGVudHMtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkp
OwogICAgIHNldE5lZWRzRGlzcGxheSgpOwotICAgIHNldE9wYXF1ZSghbV9jb250ZW50cy0+Y3Vy
cmVudEZyYW1lSGFzQWxwaGEoKSk7CiB9CiAKIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpwYWlu
dENvbnRlbnRzSWZEaXJ0eSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggNzEzZGZiMjUyMzAxMDg2
ZmZhN2U1ODFjMDQyMDQ3NWU4YmRmZmI3ZC4uMWIyY2VhYWI2YWZlMmMzNjllNTVjY2QwN2ZjY2Y0
MGFkOGM4Y2EyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtNjEsNiArNjEsOCBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB+Q0NMYXllckRlbGVnYXRlKCkgeyB9CiAgICAgdmlydHVhbCBib29sIGRy
YXdzQ29udGVudCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBjbGlwKSA9IDA7CisgICAgLy8gUmVwb3J0
cyBpZiB0aGUgb3V0cHV0IG9mIHBhaW50Q29udGVudHMoKSBpcyBvcGFxdWUuCisgICAgdmlydHVh
bCBib29sIGNvbnRlbnRzT3BhcXVlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlTeW5jUmVxdWlyZWQoKSA9IDA7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0ZyYW1lQ2hyb21pdW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvRnJhbWVDaHJvbWl1bS5oCmlu
ZGV4IGM0YWJkOTY5ZDFlZDExZDc4NDM3ZDUwOWMzNGRhZDk1ZWQ5MzQyYjIuLmMzMzcwN2YxYTBh
ODAwZTMwNzQ0M2ZmYTYzYmI1NTYyMGMyMDdiZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvRnJhbWVDaHJvbWl1bS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvRnJhbWVDaHJvbWl1
bS5oCkBAIC03NSw2ICs3NSwyMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBJbnRTaXpl
IHJlcXVpcmVkVGV4dHVyZVNpemUodW5zaWduZWQgcGxhbmUpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIGJvb2wgaGFzUGFkZGluZ0J5dGVzKHVuc2lnbmVkIHBsYW5lKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCB1bnNpZ25lZCB0ZXh0dXJlSWQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJv
b2wgaXNGb3JtYXRPcGFxdWUoKQorICAgIHsKKyAgICAgICAgRm9ybWF0IGZyYW1lRm9ybWF0ID0g
Zm9ybWF0KCk7CisgICAgICAgIHJldHVybiBmcmFtZUZvcm1hdCA9PSBSR0I1NTUKKyAgICAgICAg
ICAgIHx8IGZyYW1lRm9ybWF0ID09IFJHQjU2NQorICAgICAgICAgICAgfHwgZnJhbWVGb3JtYXQg
PT0gUkdCMjQKKyAgICAgICAgICAgIHx8IGZyYW1lRm9ybWF0ID09IFJHQjMyCisgICAgICAgICAg
ICB8fCBmcmFtZUZvcm1hdCA9PSBZVjEyCisgICAgICAgICAgICB8fCBmcmFtZUZvcm1hdCA9PSBZ
VjE2CisgICAgICAgICAgICB8fCBmcmFtZUZvcm1hdCA9PSBOVjEyCisgICAgICAgICAgICB8fCBm
cmFtZUZvcm1hdCA9PSBBU0NJSQorICAgICAgICAgICAgfHwgZnJhbWVGb3JtYXQgPT0gSTQyMDsK
KyAgICB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNo
cm9taXVtLmNwcAppbmRleCAxOWE5OTNiZGI5ZWQ5NzAyZDVkNGQ0MjkwZTY4MTQxMmIxNTMyY2Iw
Li5kNmJlOTU4ZjU4MWNlYTg4ZWQzMmYzYTk2NTgyYmVmOGE3ZTY0MDNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Zp
ZGVvTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTEwNSw2ICsxMDUsOCBAQCB2b2lkIFZpZGVvTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCwgQwogICAgIH0KIAogICAgIG1fZnJhbWVGb3JtYXQgPSBmcmFtZS0+Zm9ybWF0KCk7Cisg
ICAgc2V0T3BhcXVlKGZyYW1lLT5pc0Zvcm1hdE9wYXF1ZSgpKTsKKwogICAgIEdDM0RlbnVtIHRl
eHR1cmVGb3JtYXQgPSBkZXRlcm1pbmVUZXh0dXJlRm9ybWF0KGZyYW1lKTsKICAgICBpZiAodGV4
dHVyZUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSkgewogICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IG90aGVyIHBhdGhzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggMjc2ZjNjOWZjMmZlMTA3ZjE2M2IyYWJhMDk4YzAzZmJiMzM0NGNiNi4u
ODJhZmFkNzk2ZmJmNWIyN2I0MWEwYjg1YzRiMzVlNGZlNzNlY2U1MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJH
TExheWVyQ2hyb21pdW0uY3BwCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBXZWJHTExheWVyQ2hy
b21pdW06OnNldERyYXdpbmdCdWZmZXIoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKICAg
ICB9CiAgICAgbV90ZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7CiAgICAgR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IGNvbnRleHQoKS0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMo
KTsKLSAgICBtX2hhc0FscGhhID0gYXR0cmlidXRlcy5hbHBoYTsKKyAgICBzZXRPcGFxdWUoIWF0
dHJpYnV0ZXMuYWxwaGEpOwogICAgIG1fcHJlbXVsdGlwbGllZEFscGhhID0gYXR0cmlidXRlcy5w
cmVtdWx0aXBsaWVkQWxwaGE7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNw
cAppbmRleCAyMjQzNjA3YTMxMzAzODMyODVmNzAzNmQwNDViZWM2OWU4NGY2MmI0Li5iYjU3MjQy
OTgxNGQ2ZGM4NjYzMTg3YWVmNThmYzA1YjM0NjMwMDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52
YXNMYXllckltcGwuY3BwCkBAIC0zOSw3ICszOSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEND
Q2FudmFzTGF5ZXJJbXBsOjpDQ0NhbnZhc0xheWVySW1wbChpbnQgaWQpCiAgICAgOiBDQ0xheWVy
SW1wbChpZCkKICAgICAsIG1fdGV4dHVyZUlkKDApCi0gICAgLCBtX2hhc0FscGhhKHRydWUpCiAg
ICAgLCBtX3ByZW11bHRpcGxpZWRBbHBoYSh0cnVlKQogewogfQpAQCAtNTYsNyArNTUsNyBAQCB2
b2lkIENDQ2FudmFzTGF5ZXJJbXBsOjpkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJS
ZW5kZXJlcikKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXIt
PmNvbnRleHQoKTsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKSk7Ci0g
ICAgaWYgKCFtX2hhc0FscGhhKSB7CisgICAgaWYgKG9wYXF1ZSgpKSB7CiAgICAgICAgIC8vIEV2
ZW4gdGhvdWdoIHRoZSBXZWJHTCBsYXllcidzIHRleHR1cmUgd2FzIGxpa2VseSBhbGxvY2F0ZWQK
ICAgICAgICAgLy8gYXMgR0xfUkdCLCBkaXNhYmxlIGJsZW5kaW5nIGFueXdheSBmb3IgYmV0dGVy
IHJvYnVzdG5lc3MuCiAgICAgICAgIGNvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EKTsKQEAgLTcwLDcgKzY5LDcgQEAgdm9pZCBDQ0NhbnZhc0xheWVySW1wbDo6ZHJhdyhM
YXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRT
aGFkZXIoKS5hbHBoYUxvY2F0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAtMSk7Ci0gICAgaWYgKCFtX2hhc0FscGhhKQorICAgIGlmIChvcGFxdWUoKSkKICAgICAg
ICAgY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2Fu
dmFzTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oCmluZGV4IDM4MjY3MDg2ZjRiNDNlNjU3N2M3ZDljNzE1
ZGU5ODQ4NjQzZWRhZjguLmE4NDAwZGFjN2NjZGM3MWU3NmEzZDM5MTg2YTNlMjMxMTg1YzBhNTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQ2FudmFzTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaApAQCAtNDcsNyArNDcsNiBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGlu
dCBpbmRlbnQpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQpIHsg
bV90ZXh0dXJlSWQgPSBpZDsgfQotICAgIHZvaWQgc2V0SGFzQWxwaGEoYm9vbCBoYXNBbHBoYSkg
eyBtX2hhc0FscGhhID0gaGFzQWxwaGE7IH0KICAgICB2b2lkIHNldFByZW11bHRpcGxpZWRBbHBo
YShib29sIHByZW11bHRpcGxpZWRBbHBoYSkgeyBtX3ByZW11bHRpcGxpZWRBbHBoYSA9IHByZW11
bHRpcGxpZWRBbHBoYTsgfQogcHJpdmF0ZToKICAgICBleHBsaWNpdCBDQ0NhbnZhc0xheWVySW1w
bChpbnQpOwpAQCAtNTUsNyArNTQsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiQ2FudmFzTGF5ZXIiOyB9CiAK
ICAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKLSAgICBib29sIG1faGFzQWxwaGE7CiAgICAgYm9v
bCBtX3ByZW11bHRpcGxpZWRBbHBoYTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CmluZGV4IGM5MDY2ODk3ZjdmZDA3Yjk2NmQyZWZhOWNhOTJjZTA5N2E2YjZiNGUuLjZiM2MwYTli
ZTNjZTU1NzQxMDcwOTRlNzVmODAyMTM0MGEzNGJjZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQpAQCAtNzQsNiArNzQsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0lEQkJpbmRpbmdV
dGlsaXRpZXNUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURCS2V5UGF0aFRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9JREJMZXZlbERCQ29kaW5nVGVzdC5jcHAnLAorICAgICAg
ICAgICAgJ3Rlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9Jbm5lckdlc3R1cmVSZWNvZ25pemVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0tleWJvYXJkVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcsCkBA
IC04OSw2ICs5MCw3IEBACiAgICAgICAgICAgICAndGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UcmVlVGVzdEhlbHBlcnMuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9UcmVlVGVzdEhlbHBlcnMuaCcsCisgICAgICAgICAgICAndGVzdHMvVmlkZW9M
YXllckNocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYkNvbXBvc2l0b3JJ
bXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL1dlYkxheWVyVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZW50TGF5ZXJDbGllbnQuaAppbmRleCA5M2QyZWFm
NjhkNTllNGRhYTU0NTY5YWFkZmJmZjgwYTM1Njc2MzAwLi5jNjA1MzNiOTM3MTg3YmMwODkyYzdm
ZTZjODI0ZDYzMjFjZDVmODQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJDb250ZW50TGF5ZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJDb250ZW50TGF5ZXJDbGllbnQuaApAQCAtMzgsNiArMzgsOCBAQCBwdWJsaWM6
CiAgICAgLy8gdGhyb3VnaCB0aGUgV2ViQ2FudmFzLgogICAgIC8vIFRoZSBjYW52YXMgaXMgYWxy
ZWFkeSBjbGlwcGVkIHRvIHRoZSB8Y2xpcHwgcmVjdC4KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRD
b250ZW50cyhXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JiBjbGlwKSA9IDA7CisgICAgLy8gUmVw
b3J0cyBpZiB0aGUgb3V0cHV0IG9mIHBhaW50Q29udGVudHMoKSBpcyBvcGFxdWUuCisgICAgdmly
dHVhbCBib29sIGNvbnRlbnRzT3BhcXVlKCkgY29uc3QgPSAwOwogCiBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCB+V2ViQ29udGVudExheWVyQ2xpZW50KCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCmluZGV4IGU1M2FjZmRjNTli
MTRlMmRmNzEwYTNhMWM2OWQyMWI2NDlhYTQ1ZmUuLmJmM2FhMTE1OWVlN2JhMjgwYmViYzRiNzYy
MjUzNmFhMjhlOTgxMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkNvbnRlbnRMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkNvbnRlbnRMYXllckltcGwuY3BwCkBAIC04MCw2ICs4MCwxMyBAQCB2b2lkIFdlYkNvbnRlbnRM
YXllckltcGw6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBnYywgY29uc3QgSW50UmVj
dCYgY2xpcAogICAgIG1fY29udGVudENsaWVudC0+cGFpbnRDb250ZW50cyhjYW52YXMsIFdlYlJl
Y3QoY2xpcCkpOwogfQogCitib29sIFdlYkNvbnRlbnRMYXllckltcGw6OmNvbnRlbnRzT3BhcXVl
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY29udGVudENsaWVudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBtX2NvbnRlbnRDbGllbnQtPmNvbnRlbnRzT3BhcXVlKCk7Cit9CisK
IHZvaWQgV2ViQ29udGVudExheWVySW1wbDo6bm90aWZ5U3luY1JlcXVpcmVkKCkKIHsKICAgICBp
ZiAobV9jbGllbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJD
b250ZW50TGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50
TGF5ZXJJbXBsLmgKaW5kZXggMTA4ZGY1ZTNhMjU0ZWQ5NTY5NDU5ODZmZDY1NDFhODRhOTg4NjVm
Zi4uNzIxZGRmZWU2ZTdjNDhkYjRmYzg4OWFkZWFmZTlhMjg4ZmFlNDI1MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaApAQCAtNDQsNiAr
NDQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgV2ViQ29udGVudExheWVySW1wbChXZWJMYXllckNsaWVu
dCosIFdlYkNvbnRlbnRMYXllckNsaWVudCogY29udGVudENsaWVudCk7CiAgICAgdmlydHVhbCB+
V2ViQ29udGVudExheWVySW1wbCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXApOwor
ICAgIHZpcnR1YWwgYm9vbCBjb250ZW50c09wYXF1ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnlTeW5jUmVxdWlyZWQoKTsKIAogICAgIFdlYkxheWVyQ2xpZW50KiBtX2NsaWVudDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkV4dGVybmFsVGV4dHVy
ZUxheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFeHRlcm5hbFRl
eHR1cmVMYXllckltcGwuY3BwCmluZGV4IDc0Mzc4NmY0MDE4MTE0NjI1NThkMWRlMWNlMjQzZTA5
ZTEwN2E3MDAuLmEwODAyZGFiNzU0MTk3NTM4NzI0MTI0MjI5MDdjNTIyZjA1NzcwNzggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVy
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0
dXJlTGF5ZXJJbXBsLmNwcApAQCAtNjAsNiArNjAsMTEgQEAgdm9pZCBXZWJFeHRlcm5hbFRleHR1
cmVMYXllckltcGw6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVj
dCYKIHsKIH0KIAorYm9vbCBXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGw6OmNvbnRlbnRzT3Bh
cXVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgV2ViRXh0ZXJuYWxU
ZXh0dXJlTGF5ZXJJbXBsOjpub3RpZnlTeW5jUmVxdWlyZWQoKQogewogICAgIGlmIChtX2NsaWVu
dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkV4dGVybmFsVGV4
dHVyZUxheWVySW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRXh0ZXJuYWxU
ZXh0dXJlTGF5ZXJJbXBsLmgKaW5kZXggNGY5YTk4NzI3Yzk3ZDliNWM5NTg3NDRjMjY5Yjg4NGQx
ODUzZTc2Zi4uZTRkODQwZjBkM2ZkODFmZDY2ZDg1YjU4YmNiNmVkNjUxM2YxMzExMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJ
bXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRXh0ZXJuYWxUZXh0dXJl
TGF5ZXJJbXBsLmgKQEAgLTQwLDYgKzQwLDcgQEAgcHJvdGVjdGVkOgogICAgIFdlYkV4dGVybmFs
VGV4dHVyZUxheWVySW1wbChXZWJMYXllckNsaWVudCopOwogICAgIHZpcnR1YWwgfldlYkV4dGVy
bmFsVGV4dHVyZUxheWVySW1wbCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXApOwor
ICAgIHZpcnR1YWwgYm9vbCBjb250ZW50c09wYXF1ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnlTeW5jUmVxdWlyZWQoKTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkg
Y29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVy
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuY3BwCmlu
ZGV4IGUzNDYyOGZhY2QzMjdmNzQ1YTczNDI4OWFhNjAxNmEwMTQxYWUxYjQuLjMwYjQ4MmU0ZDFi
OTExYzRkZDg5NDVmODUzZDE5ZGY1ODcwMjcwMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcApAQCAtNTUsNiArNTUsMTEgQEAgdm9pZCBXZWJMYXllcklt
cGw6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCkK
IHsKIH0KIAorYm9vbCBXZWJMYXllckltcGw6OmNvbnRlbnRzT3BhcXVlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgV2ViTGF5ZXJJbXBsOjpub3RpZnlTeW5jUmVxdWly
ZWQoKQogewogICAgIGlmIChtX2NsaWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkxheWVySW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
TGF5ZXJJbXBsLmgKaW5kZXggNTU4ZDQxYjVjZGUxYTg0ODcwMmNhZDBmMzc1MTJjODkxMTU1MTEx
Ni4uYmNkZjljNTVjNzMwYmJmNzM4NTY4NjlmMDZlZGE3NzQ3YzhjYTRlZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmgKQEAgLTQxLDYgKzQxLDcgQEAgcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgfldlYkxheWVySW1wbCgpOwogICAgIHZpcnR1YWwgYm9vbCBkcmF3
c0NvbnRlbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwKTsKKyAgICB2
aXJ0dWFsIGJvb2wgY29udGVudHNPcGFxdWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5U3luY1JlcXVpcmVkKCk7CiAKICAgICBXZWJMYXllckNsaWVudCogbV9jbGllbnQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRl
c3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZUxheWVyQ2hyb21pdW1U
ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40ZmYwNzU2NGJiOWVlZDQ0YmNkZTUzNWIyMGRjZGFkODVkYWM3
ZGQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFn
ZUxheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSW1hZ2VMYXllckNocm9taXVtLmgiCisK
KyNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgor
I2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitu
YW1lc3BhY2UgeworCitjbGFzcyBNb2NrTGF5ZXJEZWxlZ2F0ZSA6IHB1YmxpYyBDQ0xheWVyRGVs
ZWdhdGUgeworcHVibGljOgorICAgIE1PQ0tfQ09OU1RfTUVUSE9EMChkcmF3c0NvbnRlbnQsIGJv
b2woKSk7CisgICAgTU9DS19DT05TVF9NRVRIT0QwKHByZXNlcnZlczNELCBib29sKCkpOworICAg
IE1PQ0tfTUVUSE9EMihwYWludENvbnRlbnRzLCB2b2lkKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEludFJlY3QmKSk7CisgICAgTU9DS19DT05TVF9NRVRIT0QwKGNvbnRlbnRzT3BhcXVlLCBib29s
KCkpOworICAgIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKCkgeyB9Cit9OworCitjbGFzcyBUZXN0
SW1hZ2UgOiBwdWJsaWMgSW1hZ2UgeworcHVibGljOgorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
VGVzdEltYWdlPiBjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBvcGFxdWUpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRlc3RJbWFnZShzaXplLCBvcGFxdWUpKTsK
KyAgICB9CisKKyAgICBleHBsaWNpdCBUZXN0SW1hZ2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9v
bCBvcGFxdWUpCisgICAgICAgIDogSW1hZ2UoMCkKKyAgICAgICAgLCBtX3NpemUoc2l6ZSkKKyAg
ICB7CisgICAgICAgIG1fbmF0aXZlSW1hZ2UgPSBuZXcgTmF0aXZlSW1hZ2VTa2lhKCk7CisgICAg
ICAgIG1fbmF0aXZlSW1hZ2UtPmJpdG1hcCgpLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4
OF9Db25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
LndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDApOworICAgICAgICBtX25hdGl2ZUltYWdlLT5iaXRt
YXAoKS5hbGxvY1BpeGVscygpOworICAgICAgICBtX25hdGl2ZUltYWdlLT5iaXRtYXAoKS5zZXRJ
c09wYXF1ZShvcGFxdWUpOworICAgIH0KKworICAgIHZpcnR1YWwgflRlc3RJbWFnZSgpCisgICAg
eworICAgICAgICBkZWxldGUgbV9uYXRpdmVJbWFnZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgaXNCaXRtYXBJbWFnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1lSGFzQWxwaGEoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuICFtX25hdGl2ZUltYWdlLT5iaXRtYXAoKS5pc09wYXF1ZSgpOworICAgIH0K
KworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3NpemU7CisgICAgfQorCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpCisgICAgeworICAgICAgICBpZiAobV9zaXplLmlzWmVybygpKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgcmV0dXJuIG1fbmF0aXZlSW1hZ2U7Cisg
ICAgfQorCisgICAgLy8gU3R1YiBpbXBsZW1lbnRhdGlvbnMgb2YgcHVyZSB2aXJ0dWFsIEltYWdl
IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wpCisg
ICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGRlY29kZWRTaXplKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAwdTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhdyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNv
cmU6OkNvbG9yU3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6Q29tcG9zaXRl
T3BlcmF0b3IpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKworICAgIEludFNpemUgbV9zaXpl
OworICAgIE5hdGl2ZUltYWdlUHRyIG1fbmF0aXZlSW1hZ2U7Cit9OworCitURVNUKEltYWdlTGF5
ZXJDaHJvbWl1bVRlc3QsIG9wYXF1ZUltYWdlcykKK3sKKyAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBt
b2NrRGVsZWdhdGU7CisKKyAgICBSZWZQdHI8SW1hZ2VMYXllckNocm9taXVtPiB0ZXN0TGF5ZXIg
PSBJbWFnZUxheWVyQ2hyb21pdW06OmNyZWF0ZSgmbW9ja0RlbGVnYXRlKTsKKyAgICBBU1NFUlRf
VFJVRSh0ZXN0TGF5ZXIuZ2V0KCkpOworCisgICAgUmVmUHRyPEltYWdlPiBvcGFxdWVJbWFnZSA9
IFRlc3RJbWFnZTo6Y3JlYXRlKEludFNpemUoMTAwLCAxMDApLCB0cnVlKTsKKyAgICBBU1NFUlRf
VFJVRShvcGFxdWVJbWFnZS5nZXQoKSk7CisgICAgUmVmUHRyPEltYWdlPiBub25PcGFxdWVJbWFn
ZSA9IFRlc3RJbWFnZTo6Y3JlYXRlKEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAgQVNT
RVJUX1RSVUUobm9uT3BhcXVlSW1hZ2UuZ2V0KCkpOworCisgICAgQVNTRVJUX0ZBTFNFKHRlc3RM
YXllci0+b3BhcXVlKCkpOworCisgICAgdGVzdExheWVyLT5zZXRDb250ZW50cyhvcGFxdWVJbWFn
ZS5nZXQoKSk7CisgICAgQVNTRVJUX1RSVUUodGVzdExheWVyLT5vcGFxdWUoKSk7CisKKyAgICB0
ZXN0TGF5ZXItPnNldENvbnRlbnRzKG5vbk9wYXF1ZUltYWdlLmdldCgpKTsKKyAgICBBU1NFUlRf
RkFMU0UodGVzdExheWVyLT5vcGFxdWUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4
IDc4MDlkMThhNDM2NzBkNDhhYTc4NjFmYjg3MDQ2NTYyODU5M2ZhMjcuLjVmMjQxMmM3Mzc3Zjc0
ZWM5NmU2ZWJlZDlhYjRlMTQxMjE0ZjM2NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC00OSw2ICs0OSw3IEBAIHB1Ymxp
YzoKICAgICBNT0NLX0NPTlNUX01FVEhPRDAoZHJhd3NDb250ZW50LCBib29sKCkpOwogICAgIE1P
Q0tfQ09OU1RfTUVUSE9EMChwcmVzZXJ2ZXMzRCwgYm9vbCgpKTsKICAgICBNT0NLX01FVEhPRDIo
cGFpbnRDb250ZW50cywgdm9pZChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JikpOwor
ICAgIE1PQ0tfQ09OU1RfTUVUSE9EMChjb250ZW50c09wYXF1ZSwgYm9vbCgpKTsKICAgICBNT0NL
X01FVEhPRDAobm90aWZ5U3luY1JlcXVpcmVkLCB2b2lkKCkpOwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9WaWRlb0xheWVyQ2hyb21pdW1UZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVmlkZW9MYXllckNocm9taXVtVGVzdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjc1MWJjOWJiZjUyYTMxMDdjNzRhYjM1ZTQ4YzJjZTU2MzliMzE3OQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVmlkZW9MYXllckNo
cm9taXVtVGVzdC5jcHAKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgorCisjaW5jbHVk
ZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlLmgiCisjaW5jbHVkZSAiTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVk
ZSAiVGV4dHVyZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJWaWRlb0ZyYW1lQ2hyb21pdW0uaCIKKyNp
bmNsdWRlICJWaWRlb0ZyYW1lUHJvdmlkZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhv
c3QuaCIKKyNpbmNsdWRlICJjYy9DQ1RleHR1cmVVcGRhdGVyLmgiCisjaW5jbHVkZSA8Z21vY2sv
Z21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIE1v
Y2tMYXllckRlbGVnYXRlIDogcHVibGljIENDTGF5ZXJEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAg
TU9DS19DT05TVF9NRVRIT0QwKGRyYXdzQ29udGVudCwgYm9vbCgpKTsKKyAgICBNT0NLX0NPTlNU
X01FVEhPRDAocHJlc2VydmVzM0QsIGJvb2woKSk7CisgICAgTU9DS19NRVRIT0QyKHBhaW50Q29u
dGVudHMsIHZvaWQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYpKTsKKyAgICBNT0NL
X0NPTlNUX01FVEhPRDAoY29udGVudHNPcGFxdWUsIGJvb2woKSk7CisgICAgdm9pZCBub3RpZnlT
eW5jUmVxdWlyZWQoKSB7IH0KK307CisKK2NsYXNzIFRlc3RWaWRlb0ZyYW1lUHJvdmlkZXIgOiBw
dWJsaWMgVmlkZW9GcmFtZVByb3ZpZGVyLCBwdWJsaWMgVmlkZW9GcmFtZUNocm9taXVtIHsKK3B1
YmxpYzoKKyAgICBUZXN0VmlkZW9GcmFtZVByb3ZpZGVyKCkgOiBtX2Zvcm1hdChWaWRlb0ZyYW1l
Q2hyb21pdW06OkVtcHR5KSB7IH0KKworICAgIC8vIFZpZGVvRnJhbWVQcm92aWRlciBmdW5jdGlv
bnMKKyAgICB2aXJ0dWFsIFZpZGVvRnJhbWVDaHJvbWl1bSogZ2V0Q3VycmVudEZyYW1lKCkgeyBy
ZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgdm9pZCBwdXRDdXJyZW50RnJhbWUoVmlkZW9GcmFt
ZUNocm9taXVtKikgeyB9CisKKyAgICAvLyBWaWRlb0ZyYW1lQ2hyb21pdW0gZnVuY3Rpb25zCisg
ICAgdmlydHVhbCBWaWRlb0ZyYW1lQ2hyb21pdW06OkZvcm1hdCBmb3JtYXQoKSBjb25zdCB7IHJl
dHVybiBtX2Zvcm1hdDsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgd2lkdGgoKSBjb25zdCB7IHJl
dHVybiAxMDA7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHdpZHRoKHVuc2lnbmVkIHBsYW5lKSBj
b25zdCB7IHJldHVybiAxMDA7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGhlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIDEwMDsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgaGVpZ2h0KHVuc2lnbmVkIHBs
YW5lKSBjb25zdCB7IHJldHVybiAxMDA7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHBsYW5lcygp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCBzdHJpZGUodW5zaWduZWQgcGxh
bmUpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IHZvaWQqIGRhdGEodW5z
aWduZWQgcGxhbmUpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEludFNp
emUgcmVxdWlyZWRUZXh0dXJlU2l6ZSh1bnNpZ25lZCBwbGFuZSkgY29uc3QgeyByZXR1cm4gSW50
U2l6ZSgpOyB9CisgICAgdmlydHVhbCBib29sIGhhc1BhZGRpbmdCeXRlcyh1bnNpZ25lZCBwbGFu
ZSkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHRleHR1cmVJ
ZCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIHZvaWQgc2V0Rm9ybWF0KFZpZGVvRnJhbWVD
aHJvbWl1bTo6Rm9ybWF0IGZvcm1hdCkgeyBtX2Zvcm1hdCA9IGZvcm1hdDsgfQorCitwcml2YXRl
OgorICAgIFZpZGVvRnJhbWVDaHJvbWl1bTo6Rm9ybWF0IG1fZm9ybWF0OworfTsKKworY2xhc3Mg
TW9ja1RleHR1cmVBbGxvY2F0b3IgOiBwdWJsaWMgVGV4dHVyZUFsbG9jYXRvciB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB1bnNpZ25lZCBjcmVhdGVUZXh0dXJlKGNvbnN0IEludFNpemUmLCBHQzNE
ZW51bSBmb3JtYXQpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dHVy
ZSh1bnNpZ25lZCB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiwgR0MzRGVudW0pIHsgfQorfTsKKwor
Ly8gVGVzdCBzdHViIGZvciBXZWJHcmFwaGljc0NvbnRleHQzRC4gUmV0dXJucyBjYW5uZWQgdmFs
dWVzIG5lZWRlZCBmb3IgY29tcG9zaXRvciBpbml0aWFsaXphdGlvbi4KK2NsYXNzIENvbXBvc2l0
b3JNb2NrV2ViR3JhcGhpY3NDb250ZXh0M0QgOiBwdWJsaWMgTW9ja1dlYkdyYXBoaWNzQ29udGV4
dDNEIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDb21wb3NpdG9yTW9ja1dlYkdy
YXBoaWNzQ29udGV4dDNEPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ29tcG9zaXRv
ck1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCgpKTsgfQorICAgIHZpcnR1YWwgYm9vbCBtYWtlQ29u
dGV4dEN1cnJlbnQoKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBXZWJHTElkIGNyZWF0
ZVByb2dyYW0oKSB7IHJldHVybiAxOyB9CisgICAgdmlydHVhbCBXZWJHTElkIGNyZWF0ZVNoYWRl
cihXR0MzRGVudW0pIHsgcmV0dXJuIDE7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2hhZGVyaXYo
V2ViR0xJZCwgV0dDM0RlbnVtLCBXR0MzRGludCogdmFsdWUpIHsgKnZhbHVlID0gMTsgfQorICAg
IHZpcnR1YWwgdm9pZCBnZXRQcm9ncmFtaXYoV2ViR0xJZCwgV0dDM0RlbnVtLCBXR0MzRGludCog
dmFsdWUpIHsgKnZhbHVlID0gMTsgfQorCitwcml2YXRlOgorICAgIENvbXBvc2l0b3JNb2NrV2Vi
R3JhcGhpY3NDb250ZXh0M0QoKSB7IH0KK307CisKK2NsYXNzIE1vY2tMYXllclRyZWVIb3N0Q2xp
ZW50IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdENsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ+IGNyZWF0ZSgpIHsgcmV0dXJuIGFk
b3B0UHRyKG5ldyBNb2NrTGF5ZXJUcmVlSG9zdENsaWVudCgpKTsgfQorCisgICAgdmlydHVhbCB2
b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwg
ZmxvYXQgc2NhbGUpIHsgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCkKKyAgICB7CisgICAgICAgIE93blB0
cjxXZWJHcmFwaGljc0NvbnRleHQzRD4gbW9jayA9IENvbXBvc2l0b3JNb2NrV2ViR3JhcGhpY3ND
b250ZXh0M0Q6OmNyZWF0ZSgpOworICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyBhdHRyczsKKyAgICAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4
dChtb2NrLnJlbGVhc2UoKSwgYXR0cnMsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJl
Y3RseVRvSG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpGb3JVc2VPbkFub3Ro
ZXJUaHJlYWQpOworICAgICAgICByZXR1cm4gY29udGV4dDsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZENv
bXBsZXRlU3dhcEJ1ZmZlcnMoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjcmVhdGVHcmFw
aGljc0NvbnRleHQoYm9vbCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRl
KCkgeyB9CisKK3ByaXZhdGU6CisgICAgTW9ja0xheWVyVHJlZUhvc3RDbGllbnQoKSB7IH0KK307
CisKKy8vIEFkYXB0cyBDQ0xheWVyVHJlZUhvc3QgZm9yIHRlc3QuIEluamVjdHMgTW9ja0xheWVy
VHJlZUhvc3RJbXBsLgorY2xhc3MgTW9ja0xheWVyVHJlZUhvc3QgOiBwdWJsaWMgQ0NMYXllclRy
ZWVIb3N0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNb2NrTGF5ZXJUcmVlSG9z
dD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LCBQYXNzUmVmUHRyPExheWVy
Q2hyb21pdW0+IHJvb3RMYXllciwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1vY2tMYXllclRyZWVIb3N0KGNsaWVudCwgcm9v
dExheWVyLCBzZXR0aW5ncykpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNb2NrTGF5ZXJUcmVl
SG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxMYXllckNocm9t
aXVtPiByb290TGF5ZXIsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKQorICAgICAgICA6IEND
TGF5ZXJUcmVlSG9zdChjbGllbnQsIHNldHRpbmdzKQorICAgIHsKKyAgICAgICAgc2V0Um9vdExh
eWVyKHJvb3RMYXllcik7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGluaXRpYWxpemUoKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7CisgICAgfQorfTsKKworI2RlZmluZSBURVNUX1ZJ
REVPX0ZPUk1BVF9PUEFRVUUoZm9ybWF0KSBcCisgICAgcHJvdmlkZXIuc2V0Rm9ybWF0KGZvcm1h
dCk7IFwKKyAgICB0ZXN0TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOyBcCisgICAgdGVzdExheWVy
LT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQuZ2V0KCksIHVwZGF0ZXIpOyBcCisg
ICAgRVhQRUNUX1RSVUUodGVzdExheWVyLT5vcGFxdWUoKSk7CisKKyNkZWZpbmUgVEVTVF9WSURF
T19GT1JNQVRfTk9UX09QQVFVRShmb3JtYXQpIFwKKyAgICBwcm92aWRlci5zZXRGb3JtYXQoZm9y
bWF0KTsgXAorICAgIHRlc3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7IFwKKyAgICB0ZXN0TGF5
ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29udGV4dC5nZXQoKSwgdXBkYXRlcik7IFwK
KyAgICBFWFBFQ1RfRkFMU0UodGVzdExheWVyLT5vcGFxdWUoKSk7CisKK1RFU1QoVmlkZW9MYXll
ckNocm9taXVtVGVzdCwgb3BhcXVlRm9ybWF0cykKK3sKKyAgICBNb2NrTGF5ZXJEZWxlZ2F0ZSBt
b2NrRGVsZWdhdGU7CisgICAgVGVzdFZpZGVvRnJhbWVQcm92aWRlciBwcm92aWRlcjsKKyAgICBS
ZWZQdHI8VmlkZW9MYXllckNocm9taXVtPiB0ZXN0TGF5ZXIgPSBWaWRlb0xheWVyQ2hyb21pdW06
OmNyZWF0ZSgmbW9ja0RlbGVnYXRlLCAmcHJvdmlkZXIpOworICAgIEFTU0VSVF9UUlVFKHRlc3RM
YXllci5nZXQoKSk7CisKKyAgICB0ZXN0TGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwMDAsIDEw
MDApKTsKKyAgICB0ZXN0TGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoSW50UmVjdCgwLCAw
LCAxMDAwLCAxMDAwKSk7CisKKyAgICBDQ1NldHRpbmdzIHNldHRpbmdzOworICAgIE93blB0cjxN
b2NrTGF5ZXJUcmVlSG9zdENsaWVudD4gY2xpZW50ID0gTW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6
OmNyZWF0ZSgpOworICAgIFJlZlB0cjxNb2NrTGF5ZXJUcmVlSG9zdD4gaG9zdCA9IE1vY2tMYXll
clRyZWVIb3N0OjpjcmVhdGUoY2xpZW50LmdldCgpLCB0ZXN0TGF5ZXIsIHNldHRpbmdzKTsKKwor
ICAgIHRlc3RMYXllci0+c2V0TGF5ZXJUcmVlSG9zdChob3N0LmdldCgpKTsKKworICAgIFJlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGNsaWVudC0+Y3JlYXRlTGF5ZXJUcmVlSG9z
dENvbnRleHQzRCgpOworICAgIE1vY2tUZXh0dXJlQWxsb2NhdG9yIGFsbG9jYXRvcjsKKyAgICBD
Q1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJmFsbG9jYXRvcik7CisKKyAgICBURVNUX1ZJREVPX0ZP
Uk1BVF9OT1RfT1BBUVVFKFZpZGVvRnJhbWVDaHJvbWl1bTo6SW52YWxpZCk7CisgICAgVEVTVF9W
SURFT19GT1JNQVRfT1BBUVVFKFZpZGVvRnJhbWVDaHJvbWl1bTo6UkdCNTU1KTsKKyAgICBURVNU
X1ZJREVPX0ZPUk1BVF9PUEFRVUUoVmlkZW9GcmFtZUNocm9taXVtOjpSR0I1NjUpOworICAgIFRF
U1RfVklERU9fRk9STUFUX09QQVFVRShWaWRlb0ZyYW1lQ2hyb21pdW06OlJHQjI0KTsKKyAgICBU
RVNUX1ZJREVPX0ZPUk1BVF9PUEFRVUUoVmlkZW9GcmFtZUNocm9taXVtOjpSR0IzMik7CisgICAg
VEVTVF9WSURFT19GT1JNQVRfTk9UX09QQVFVRShWaWRlb0ZyYW1lQ2hyb21pdW06OlJHQkEpOwor
ICAgIFRFU1RfVklERU9fRk9STUFUX09QQVFVRShWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTIpOwor
ICAgIFRFU1RfVklERU9fRk9STUFUX09QQVFVRShWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTYpOwor
ICAgIFRFU1RfVklERU9fRk9STUFUX09QQVFVRShWaWRlb0ZyYW1lQ2hyb21pdW06Ok5WMTIpOwor
ICAgIFRFU1RfVklERU9fRk9STUFUX05PVF9PUEFRVUUoVmlkZW9GcmFtZUNocm9taXVtOjpFbXB0
eSk7CisgICAgVEVTVF9WSURFT19GT1JNQVRfT1BBUVVFKFZpZGVvRnJhbWVDaHJvbWl1bTo6QVND
SUkpOworICAgIFRFU1RfVklERU9fRk9STUFUX09QQVFVRShWaWRlb0ZyYW1lQ2hyb21pdW06Okk0
MjApOworICAgIFRFU1RfVklERU9fRk9STUFUX05PVF9PUEFRVUUoVmlkZW9GcmFtZUNocm9taXVt
OjpOYXRpdmVUZXh0dXJlKTsKK30KKworfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViTGF5ZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvV2ViTGF5ZXJUZXN0LmNwcAppbmRleCA2M2FiYzBiZTE4YWRlY2Q1MjVj
MjVhYmJmOTZmMGI2Njc2NzNmM2JkLi4wY2QxNzhkZjFiZWVkZjEwNjUzNDI4YjRjYmVmNzYzODRh
OTU4YmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkxheWVy
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJMYXllclRlc3Qu
Y3BwCkBAIC00OSw2ICs0OSw3IEBAIHB1YmxpYzoKIGNsYXNzIE1vY2tXZWJDb250ZW50TGF5ZXJD
bGllbnQgOiBwdWJsaWMgV2ViQ29udGVudExheWVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICBNT0NL
X01FVEhPRDIocGFpbnRDb250ZW50cywgdm9pZChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JiBj
bGlwKSk7CisgICAgTU9DS19DT05TVF9NRVRIT0QwKGNvbnRlbnRzT3BhcXVlLCBib29sKCkpOwog
fTsKIAogY2xhc3MgV2ViTGF5ZXJUZXN0IDogcHVibGljIFRlc3Qgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117911</attachid>
            <date>2011-12-05 12:06:02 -0800</date>
            <delta_ts>2011-12-06 07:02:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72964-20111205150601.patch</filename>
            <type>text/plain</type>
            <size>10350</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGNhN2M2NjlmMDE5YzAy
NWQ5ZTZmNmI3NzkwMTkzYWZlZGFlZTRkZi4uY2NjNTY0Y2QwMDRkYjZlZjllNDM5ZTcwM2RjMTU0
OTZhZDUyZDVlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDExLTEyLTA1ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2V0
IG9wYXF1ZSBmbGFnIGZvciBJbWFnZUxheWVyQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyOTY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdCBpbiB0ZXN0cy9JbWFnZUxh
eWVyQ2hyb21pdW1UZXN0LmNwcC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmNvbnRlbnRzTGF5ZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnNldENvbnRlbnRzKToKKwogMjAxMS0xMi0w
NSAgUGV0ZXIgQmV2ZXJsb28gIDxwZXRlckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9t
aXVtXSBBZGQgQW5kcm9pZCBrZXljb2RlcyBhbmQgYnVpbGQgTGludXggY2xpcGJvYXJkL2ZpbGVz
eXN0ZW0gZmlsZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGU2M2Y1ZTM5ODA1YWI5
YjcwNDc2MjkzOGQ0ZDUwY2EwYzJiMGJhYTguLmYyZWU0NWY5YmQ5MDkzZTkyZGMxN2UzMjRkYzdi
Zjc2NzI1ODdjNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAK
KzIwMTEtMTItMDUgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgW2Nocm9taXVtXSBTZXQgb3BhcXVlIGZsYWcgZm9yIEltYWdlTGF5ZXJDaHJvbWl1bQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5NjQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBp
OgorICAgICAgICAqIHRlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1vY2tHcmFwaGljc0xheWVyQ2xpZW50Ojpub3RpZnlBbmltYXRpb25T
dGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tHcmFwaGljc0xheWVyQ2xpZW50Ojpub3Rp
ZnlTeW5jUmVxdWlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0dyYXBoaWNzTGF5ZXJDbGll
bnQ6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0dyYXBoaWNzTGF5ZXJD
bGllbnQ6OnNob3dEZWJ1Z0JvcmRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0dyYXBoaWNz
TGF5ZXJDbGllbnQ6OnNob3dSZXBhaW50Q291bnRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0
SW1hZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW1hZ2U6OlRlc3RJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW1hZ2U6On5UZXN0SW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6VGVzdEltYWdlOjppc0JpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RJ
bWFnZTo6Y3VycmVudEZyYW1lSGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEltYWdl
OjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEltYWdlOjpkZXN0cm95RGVjb2RlZERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEltYWdlOjpkZWNvZGVkU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXN0SW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisK
IDIwMTEtMTItMDIgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbY2hyb21pdW1dIFJlbW92ZSBmb3J3YXJkaW5nIGhlYWRlcnMgZm9yIFdlYkxheWVyIEFQ
SXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDU1ZThhZDk4NTJk
NDRlNTAyYmFjZTYzNDQ4NjE0ZmI3MmIxY2E1M2YuLmM2NmJlN2E3ZjYyODYzOWQzYzlkZjZjMTNh
OTQ1YmUzOTA2NWQxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApA
QCAtMzUwLDYgKzM1MCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50
c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQogICAgICAgICB9CiAgICAgICAgIEltYWdlTGF5ZXJDaHJv
bWl1bSogaW1hZ2VMYXllciA9IHN0YXRpY19jYXN0PEltYWdlTGF5ZXJDaHJvbWl1bSo+KG1fY29u
dGVudHNMYXllci5nZXQoKSk7CiAgICAgICAgIGltYWdlTGF5ZXItPnNldENvbnRlbnRzKGltYWdl
KTsKKyAgICAgICAgaW1hZ2VMYXllci0+c2V0T3BhcXVlKGltYWdlLT5pc0JpdG1hcEltYWdlKCkg
JiYgIWltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpKTsKICAgICAgICAgdXBkYXRlQ29udGVu
dHNSZWN0KCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKG1fY29udGVudHNMYXllcikgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3Jh
cGhpY3NMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAppbmRleCBiMDVkMDdiZjYzN2JmNWNmZTBl
NGJlYzRlMzkzZGJhN2IwYzAzZGYyLi5kZjI2OThhYmQ5MWUzNzY1NmIxMjQ4YzdiOGI0ODJjYzE0
ODc3NGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaApAQCAtMTAxLDYgKzEw
MSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBJbnRSZWN0JiBjbGlwKTsKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3lu
Y1JlcXVpcmVkKCk7CiAKKyAgICAvLyBFeHBvc2VkIGZvciB0ZXN0cy4KKyAgICBMYXllckNocm9t
aXVtKiBjb250ZW50c0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xheWVyLmdldCgp
OyB9CisKIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVPcGFjaXR5T25MYXllcigpOwogCkBAIC0x
MjgsNyArMTMxLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzU2NhbGUoKTsK
IAogICAgIHZvaWQgc2V0dXBDb250ZW50c0xheWVyKExheWVyQ2hyb21pdW0qKTsKLSAgICBMYXll
ckNocm9taXVtKiBjb250ZW50c0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xheWVy
LmdldCgpOyB9CiAgICAgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0OwogCiAgICAgU3RyaW5n
IG1fbmFtZUJhc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAppbmRleCA3MGFmZGQw
ODJjNDNmYzAyODljYTkwMjliOTY0YTRkNDRlMzQ0ZTczLi40ZWI2NWQ0MmNjY2ZlMjIwNjNhODk0
YTIyNDZmOGJiODdiNDk0MDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAg
LTE2NCw3ICsxNjQsNiBAQCB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHMoSW1h
Z2UqIGNvbnRlbnRzKQogICAgIG1fY29udGVudHMgPSBjb250ZW50czsKICAgICBtX2ltYWdlRm9y
Q3VycmVudEZyYW1lID0gbV9jb250ZW50cy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsK
ICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICBzZXRPcGFxdWUoIW1fY29udGVudHMtPmN1cnJl
bnRGcmFtZUhhc0FscGhhKCkpOwogfQogCiB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRD
b250ZW50c0lmRGlydHkoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggZmNmOWNm
MDY2NDlkNjViZTMxNjhhOGYwZTFmMzk5Zjc3YjlmYjVlMC4uNzcyNTI4YmJhNDI2OWE4MWRiMjRh
YTYwZTQ3NjllNGI4NzcyYmY2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC03
NSw2ICs3NSw3IEBACiAgICAgICAgICAgICAndGVzdHMvSURCQmluZGluZ1V0aWxpdGllc1Rlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JREJLZXlQYXRoVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0lEQkxldmVsREJDb2RpbmdUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMv
SW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lubmVyR2Vz
dHVyZVJlY29nbml6ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvS2V5Ym9hcmRUZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvS1VSTFRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjcyMmRiZDY0MWZhYmNkMjBjMTliZGM3YmMzM2ZkZjY4ODk0MzE4MjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJJbWFnZUxheWVyQ2hyb21pdW0uaCIKKworI2luY2x1ZGUg
IkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIKKyNp
bmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2lu
Y2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgeworCitjbGFzcyBNb2NrR3JhcGhpY3NMYXllckNsaWVudCA6IHB1YmxpYyBHcmFwaGlj
c0xheWVyQ2xpZW50IHsKKyAgcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRp
b25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkgeyB9CisgICAgdmly
dHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBo
aWNzQ29udGV4dCYsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0JiBp
bkNsaXApIHsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG93RGVidWdCb3JkZXJzKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KK307CisKK2NsYXNzIFRlc3RJbWFnZSA6IHB1YmxpYyBJbWFn
ZSB7CitwdWJsaWM6CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXN0SW1hZ2U+IGNyZWF0ZShj
b25zdCBJbnRTaXplJiBzaXplLCBib29sIG9wYXF1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVGVzdEltYWdlKHNpemUsIG9wYXF1ZSkpOworICAgIH0KKworICAgIGV4cGxp
Y2l0IFRlc3RJbWFnZShjb25zdCBJbnRTaXplJiBzaXplLCBib29sIG9wYXF1ZSkKKyAgICAgICAg
OiBJbWFnZSgwKQorICAgICAgICAsIG1fc2l6ZShzaXplKQorICAgIHsKKyAgICAgICAgbV9uYXRp
dmVJbWFnZSA9IG5ldyBOYXRpdmVJbWFnZVNraWEoKTsKKyAgICAgICAgbV9uYXRpdmVJbWFnZS0+
Yml0bWFwKCkuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSwgMCk7CisgICAgICAgIG1fbmF0aXZlSW1hZ2UtPmJpdG1hcCgpLmFsbG9jUGl4ZWxzKCk7
CisgICAgICAgIG1fbmF0aXZlSW1hZ2UtPmJpdG1hcCgpLnNldElzT3BhcXVlKG9wYXF1ZSk7Cisg
ICAgfQorCisgICAgdmlydHVhbCB+VGVzdEltYWdlKCkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBt
X25hdGl2ZUltYWdlOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0JpdG1hcEltYWdlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZpcnR1YWwg
Ym9vbCBjdXJyZW50RnJhbWVIYXNBbHBoYSgpCisgICAgeworICAgICAgICByZXR1cm4gIW1fbmF0
aXZlSW1hZ2UtPmJpdG1hcCgpLmlzT3BhcXVlKCk7CisgICAgfQorCisgICAgdmlydHVhbCBJbnRT
aXplIHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2l6ZTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkK
KyAgICB7CisgICAgICAgIGlmIChtX3NpemUuaXNaZXJvKCkpCisgICAgICAgICAgICByZXR1cm4g
MDsKKworICAgICAgICByZXR1cm4gbV9uYXRpdmVJbWFnZTsKKyAgICB9CisKKyAgICAvLyBTdHVi
IGltcGxlbWVudGF0aW9ucyBvZiBwdXJlIHZpcnR1YWwgSW1hZ2UgZnVuY3Rpb25zLgorICAgIHZp
cnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCkKKyAgICB7CisgICAgfQorCisgICAg
dmlydHVhbCB1bnNpZ25lZCBpbnQgZGVjb2RlZFNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIDB1OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3KFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsCisgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6Q29sb3JTcGFjZSwKKyAg
ICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvcikKKyAgICB7Cisg
ICAgfQorCitwcml2YXRlOgorCisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgTmF0aXZlSW1hZ2VQ
dHIgbV9uYXRpdmVJbWFnZTsKK307CisKK1RFU1QoSW1hZ2VMYXllckNocm9taXVtVGVzdCwgb3Bh
cXVlSW1hZ2VzKQoreworICAgIE1vY2tHcmFwaGljc0xheWVyQ2xpZW50IGNsaWVudDsKKyAgICBP
d25QdHI8R3JhcGhpY3NMYXllckNocm9taXVtPiBncmFwaGljc0xheWVyID0gc3RhdGljX3BvaW50
ZXJfY2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0+KEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgmY2xp
ZW50KSk7CisgICAgQVNTRVJUX1RSVUUoZ3JhcGhpY3NMYXllci5nZXQoKSk7CisKKyAgICBSZWZQ
dHI8SW1hZ2U+IG9wYXF1ZUltYWdlID0gVGVzdEltYWdlOjpjcmVhdGUoSW50U2l6ZSgxMDAsIDEw
MCksIHRydWUpOworICAgIEFTU0VSVF9UUlVFKG9wYXF1ZUltYWdlLmdldCgpKTsKKyAgICBSZWZQ
dHI8SW1hZ2U+IG5vbk9wYXF1ZUltYWdlID0gVGVzdEltYWdlOjpjcmVhdGUoSW50U2l6ZSgxMDAs
IDEwMCksIGZhbHNlKTsKKyAgICBBU1NFUlRfVFJVRShub25PcGFxdWVJbWFnZS5nZXQoKSk7CisK
KyAgICBBU1NFUlRfRkFMU0UoZ3JhcGhpY3NMYXllci0+Y29udGVudHNMYXllcigpKTsKKworICAg
IGdyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRzVG9JbWFnZShvcGFxdWVJbWFnZS5nZXQoKSk7Cisg
ICAgQVNTRVJUX1RSVUUoZ3JhcGhpY3NMYXllci0+Y29udGVudHNMYXllcigpLT5vcGFxdWUoKSk7
CisKKyAgICBncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvSW1hZ2Uobm9uT3BhcXVlSW1hZ2Uu
Z2V0KCkpOworICAgIEFTU0VSVF9GQUxTRShncmFwaGljc0xheWVyLT5jb250ZW50c0xheWVyKCkt
Pm9wYXF1ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118043</attachid>
            <date>2011-12-06 07:02:32 -0800</date>
            <delta_ts>2011-12-06 12:53:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72964-20111206100231.patch</filename>
            <type>text/plain</type>
            <size>10878</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGNhN2M2NjlmMDE5YzAy
NWQ5ZTZmNmI3NzkwMTkzYWZlZGFlZTRkZi4uZjBkZGVkNWVlMDdiZjI0NjczY2UxMWQ1OGQ2YzVm
YzNhOTQ3YjlmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDExLTEyLTA2ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2V0
IG9wYXF1ZSBmbGFnIGZvciBJbWFnZUxheWVyQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyOTY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdCBpbiB0ZXN0cy9JbWFnZUxh
eWVyQ2hyb21pdW1UZXN0LmNwcAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6Y29udGVudHNMYXllcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHMpOgorCiAyMDExLTEyLTA1
ICBQZXRlciBCZXZlcmxvbyAgPHBldGVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21p
dW1dIEFkZCBBbmRyb2lkIGtleWNvZGVzIGFuZCBidWlsZCBMaW51eCBjbGlwYm9hcmQvZmlsZXN5
c3RlbSBmaWxlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZTYzZjVlMzk4MDVhYjli
NzA0NzYyOTM4ZDRkNTBjYTBjMmIwYmFhOC4uZDcwNDJmNTQ1YjZmMDcxN2Y4OGM3OGQyNTE2YmFh
YmFmN2JmM2I2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAor
MjAxMS0xMi0wNiAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBbY2hyb21pdW1dIFNldCBvcGFxdWUgZmxhZyBmb3IgSW1hZ2VMYXllckNocm9taXVtCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjk2NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6
CisgICAgICAgICogdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TW9ja0dyYXBoaWNzTGF5ZXJDbGllbnQ6Om5vdGlmeUFuaW1hdGlvblN0
YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0dyYXBoaWNzTGF5ZXJDbGllbnQ6Om5vdGlm
eVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrR3JhcGhpY3NMYXllckNsaWVu
dDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrR3JhcGhpY3NMYXllckNs
aWVudDo6c2hvd0RlYnVnQm9yZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrR3JhcGhpY3NM
YXllckNsaWVudDo6c2hvd1JlcGFpbnRDb3VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RJ
bWFnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RJbWFnZTo6VGVzdEltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OlRlc3RJbWFnZTo6flRlc3RJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXN0SW1hZ2U6OmlzQml0bWFwSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdElt
YWdlOjpjdXJyZW50RnJhbWVIYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW1hZ2U6
OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW1hZ2U6OmRlY29kZWRTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OlRlc3RJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwog
MjAxMS0xMi0wMiAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtjaHJvbWl1bV0gUmVtb3ZlIGZvcndhcmRpbmcgaGVhZGVycyBmb3IgV2ViTGF5ZXIgQVBJ
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNTVlOGFkOTg1MmQ0
NGU1MDJiYWNlNjM0NDg2MTRmYjcyYjFjYTUzZi4uYzY2YmU3YTdmNjI4NjM5ZDNjOWRmNmMxM2E5
NDViZTM5MDY1ZDE2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBA
IC0zNTAsNiArMzUwLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRz
VG9JbWFnZShJbWFnZSogaW1hZ2UpCiAgICAgICAgIH0KICAgICAgICAgSW1hZ2VMYXllckNocm9t
aXVtKiBpbWFnZUxheWVyID0gc3RhdGljX2Nhc3Q8SW1hZ2VMYXllckNocm9taXVtKj4obV9jb250
ZW50c0xheWVyLmdldCgpKTsKICAgICAgICAgaW1hZ2VMYXllci0+c2V0Q29udGVudHMoaW1hZ2Up
OworICAgICAgICBpbWFnZUxheWVyLT5zZXRPcGFxdWUoaW1hZ2UtPmlzQml0bWFwSW1hZ2UoKSAm
JiAhaW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkpOwogICAgICAgICB1cGRhdGVDb250ZW50
c1JlY3QoKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAobV9jb250ZW50c0xheWVyKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFw
aGljc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGIwNWQwN2JmNjM3YmY1Y2ZlMGU0
YmVjNGUzOTNkYmE3YjBjMDNkZjIuLmRmMjY5OGFiZDkxZTM3NjU2YjEyNDhjN2I4YjQ4MmNjMTQ4
Nzc0ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCkBAIC0xMDEsNiArMTAx
LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApOwogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5j
UmVxdWlyZWQoKTsKIAorICAgIC8vIEV4cG9zZWQgZm9yIHRlc3RzLgorICAgIExheWVyQ2hyb21p
dW0qIGNvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzTGF5ZXIuZ2V0KCk7
IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZU9wYWNpdHlPbkxheWVyKCk7CiAKQEAgLTEy
OCw3ICsxMzEsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlQ29udGVudHNTY2FsZSgpOwog
CiAgICAgdm9pZCBzZXR1cENvbnRlbnRzTGF5ZXIoTGF5ZXJDaHJvbWl1bSopOwotICAgIExheWVy
Q2hyb21pdW0qIGNvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzTGF5ZXIu
Z2V0KCk7IH0KICAgICBmbG9hdCBjb250ZW50c1NjYWxlKCkgY29uc3Q7CiAKICAgICBTdHJpbmcg
bV9uYW1lQmFzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDcwYWZkZDA4
MmM0M2ZjMDI4OWNhOTAyOWI5NjRhNGQ0NGUzNDRlNzMuLjRlYjY1ZDQyY2NjZmUyMjA2M2E4OTRh
MjI0NmY4YmI4N2I0OTQwMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAt
MTY0LDcgKzE2NCw2IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpzZXRDb250ZW50cyhJbWFn
ZSogY29udGVudHMpCiAgICAgbV9jb250ZW50cyA9IGNvbnRlbnRzOwogICAgIG1faW1hZ2VGb3JD
dXJyZW50RnJhbWUgPSBtX2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwog
ICAgIHNldE5lZWRzRGlzcGxheSgpOwotICAgIHNldE9wYXF1ZSghbV9jb250ZW50cy0+Y3VycmVu
dEZyYW1lSGFzQWxwaGEoKSk7CiB9CiAKIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpwYWludENv
bnRlbnRzSWZEaXJ0eSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBmY2Y5Y2Yw
NjY0OWQ2NWJlMzE2OGE4ZjBlMWYzOTlmNzdiOWZiNWUwLi5iNzk1ZWQ1MDk3NTZhMTkxMDVhZThh
NjAzYzUzM2QwYWRjYzM5YjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTc1
LDYgKzc1LDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9JREJCaW5kaW5nVXRpbGl0aWVzVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQktleVBhdGhUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvSURCTGV2ZWxEQkNvZGluZ1Rlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9J
bWFnZUxheWVyQ2hyb21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSW5uZXJHZXN0
dXJlUmVjb2duaXplclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9LZXlib2FyZFRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLApAQCAtMTAyLDggKzEwMyw5
IEBACiAgICAgICAgICdjb25kaXRpb25zJzogWwogICAgICAgICAgICAgWydPUz09IndpbiInLCB7
CiAgICAgICAgICAgICAgICAgJ3dlYmtpdF91bml0dGVzdF9maWxlcyc6IFsKLSAgICAgICAgICAg
ICAgICAgICAgIyBGSVhNRTogUG9ydCBEcmFnSW1hZ2VUZXN0IHRvIE1hYy4KKyAgICAgICAgICAg
ICAgICAgICAgIyBGSVhNRTogUG9ydCBEcmFnSW1hZ2VUZXN0L0ltYWdlTGF5ZXJDaHJvbWl1bVRl
c3QgdG8gTWFjLgogICAgICAgICAgICAgICAgICAgICAndGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAn
LAorICAgICAgICAgICAgICAgICAgICAndGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHAn
LAogICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBQb3J0IFBvcHVwTWVudVRlc3QgdG8gTGlu
dXggYW5kIE1hYy4KICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1BvcHVwTWVudVRlc3QuY3Bw
JywKICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VMYXllckNocm9t
aXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyMmRiZDY0MWZhYmNkMjBjMTliZGM3YmMzM2ZkZjY4
ODk0MzE4MjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJJbWFnZUxheWVyQ2hyb21pdW0u
aCIKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVy
Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKKyNpbmNsdWRlIDxnbW9j
ay9nbW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCituYW1lc3BhY2UgeworCitjbGFzcyBNb2NrR3JhcGhpY3NMYXllckNsaWVudCA6
IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xpZW50IHsKKyAgcHVibGljOgorICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGlt
ZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBHcmFwaGlj
c0xheWVyKikgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhp
Y3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBj
b25zdCBJbnRSZWN0JiBpbkNsaXApIHsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG93RGVidWdCb3Jk
ZXJzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFp
bnRDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KK307CisKK2NsYXNzIFRlc3RJbWFn
ZSA6IHB1YmxpYyBJbWFnZSB7CitwdWJsaWM6CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXN0
SW1hZ2U+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBib29sIG9wYXF1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGVzdEltYWdlKHNpemUsIG9wYXF1ZSkpOworICAg
IH0KKworICAgIGV4cGxpY2l0IFRlc3RJbWFnZShjb25zdCBJbnRTaXplJiBzaXplLCBib29sIG9w
YXF1ZSkKKyAgICAgICAgOiBJbWFnZSgwKQorICAgICAgICAsIG1fc2l6ZShzaXplKQorICAgIHsK
KyAgICAgICAgbV9uYXRpdmVJbWFnZSA9IG5ldyBOYXRpdmVJbWFnZVNraWEoKTsKKyAgICAgICAg
bV9uYXRpdmVJbWFnZS0+Yml0bWFwKCkuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0Nv
bmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lk
dGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCk7CisgICAgICAgIG1fbmF0aXZlSW1hZ2UtPmJpdG1hcCgp
LmFsbG9jUGl4ZWxzKCk7CisgICAgICAgIG1fbmF0aXZlSW1hZ2UtPmJpdG1hcCgpLnNldElzT3Bh
cXVlKG9wYXF1ZSk7CisgICAgfQorCisgICAgdmlydHVhbCB+VGVzdEltYWdlKCkKKyAgICB7Cisg
ICAgICAgIGRlbGV0ZSBtX25hdGl2ZUltYWdlOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBp
c0JpdG1hcEltYWdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50RnJhbWVIYXNBbHBoYSgpCisgICAgeworICAgICAg
ICByZXR1cm4gIW1fbmF0aXZlSW1hZ2UtPmJpdG1hcCgpLmlzT3BhcXVlKCk7CisgICAgfQorCisg
ICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
c2l6ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCkKKyAgICB7CisgICAgICAgIGlmIChtX3NpemUuaXNaZXJvKCkpCisgICAg
ICAgICAgICByZXR1cm4gMDsKKworICAgICAgICByZXR1cm4gbV9uYXRpdmVJbWFnZTsKKyAgICB9
CisKKyAgICAvLyBTdHViIGltcGxlbWVudGF0aW9ucyBvZiBwdXJlIHZpcnR1YWwgSW1hZ2UgZnVu
Y3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCkKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZGVjb2RlZFNpemUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIDB1OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsCisg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6
Q29sb3JTcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpDb21wb3NpdGVPcGVy
YXRvcikKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorCisgICAgSW50U2l6ZSBtX3NpemU7Cisg
ICAgTmF0aXZlSW1hZ2VQdHIgbV9uYXRpdmVJbWFnZTsKK307CisKK1RFU1QoSW1hZ2VMYXllckNo
cm9taXVtVGVzdCwgb3BhcXVlSW1hZ2VzKQoreworICAgIE1vY2tHcmFwaGljc0xheWVyQ2xpZW50
IGNsaWVudDsKKyAgICBPd25QdHI8R3JhcGhpY3NMYXllckNocm9taXVtPiBncmFwaGljc0xheWVy
ID0gc3RhdGljX3BvaW50ZXJfY2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0+KEdyYXBoaWNzTGF5
ZXI6OmNyZWF0ZSgmY2xpZW50KSk7CisgICAgQVNTRVJUX1RSVUUoZ3JhcGhpY3NMYXllci5nZXQo
KSk7CisKKyAgICBSZWZQdHI8SW1hZ2U+IG9wYXF1ZUltYWdlID0gVGVzdEltYWdlOjpjcmVhdGUo
SW50U2l6ZSgxMDAsIDEwMCksIHRydWUpOworICAgIEFTU0VSVF9UUlVFKG9wYXF1ZUltYWdlLmdl
dCgpKTsKKyAgICBSZWZQdHI8SW1hZ2U+IG5vbk9wYXF1ZUltYWdlID0gVGVzdEltYWdlOjpjcmVh
dGUoSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICBBU1NFUlRfVFJVRShub25PcGFxdWVJ
bWFnZS5nZXQoKSk7CisKKyAgICBBU1NFUlRfRkFMU0UoZ3JhcGhpY3NMYXllci0+Y29udGVudHNM
YXllcigpKTsKKworICAgIGdyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRzVG9JbWFnZShvcGFxdWVJ
bWFnZS5nZXQoKSk7CisgICAgQVNTRVJUX1RSVUUoZ3JhcGhpY3NMYXllci0+Y29udGVudHNMYXll
cigpLT5vcGFxdWUoKSk7CisKKyAgICBncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvSW1hZ2Uo
bm9uT3BhcXVlSW1hZ2UuZ2V0KCkpOworICAgIEFTU0VSVF9GQUxTRShncmFwaGljc0xheWVyLT5j
b250ZW50c0xheWVyKCktPm9wYXF1ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118097</attachid>
            <date>2011-12-06 12:53:12 -0800</date>
            <delta_ts>2011-12-06 13:37:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72964-20111206155311.patch</filename>
            <type>text/plain</type>
            <size>12433</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMTU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODA5Y2Q4ZjNmNjNhYWNj
OTY4MGE3ZTQ1ZjA3ZTZhZjU2NTY3MzY1OC4uOTdhZGFkN2EwMjNkZGVlMjgzNGEwZTc3M2VmZmU0
ZDhmYWY0NWYzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDExLTEyLTA2ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2V0
IG9wYXF1ZSBmbGFnIGZvciBJbWFnZUxheWVyQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyOTY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5pdCB0ZXN0IGluIHRlc3RzL0ltYWdlTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R3JhcGhpY3NMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6Y29udGVudHNMYXllcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHMpOgorCiAyMDExLTEyLTA2ICBO
b2VsIEdvcmRvbiAgPG5vZWwuZ29yZG9uQGdtYWlsLmNvbT4KIAogICAgICAgICBXZWJQSW1hZ2VE
ZWNvZGVyIGNvbXB1dGVzIGltYWdlIHdpZHRoIGFuZCBoZWlnaHQgbXVsdGlwbGUgdGltZXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggY2M0YjBhYWM0NmQyOWIyMTcyMjAzMmM0MTkzMjZk
ZWUyY2JmNmQ3NC4uZDRhZDZhMDczOTUzMzZmMjY4M2JhODAzMTk4YWFiZDdjZjFmNTY0MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMS0xMi0wNiAgRGFu
YSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFNl
dCBvcGFxdWUgZmxhZyBmb3IgSW1hZ2VMYXllckNocm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjk2NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVz
dHMvRHJhZ0ltYWdlVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW1hZ2U6OlRlc3RJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKToKKyAgICAgICAgKiB0ZXN0cy9JbWFnZUxheWVyQ2hyb21pdW1UZXN0LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpNb2NrR3JhcGhpY3NMYXllckNsaWVudDo6bm90aWZ5QW5p
bWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrR3JhcGhpY3NMYXllckNsaWVu
dDo6bm90aWZ5U3luY1JlcXVpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tHcmFwaGljc0xh
eWVyQ2xpZW50OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tHcmFwaGlj
c0xheWVyQ2xpZW50OjpzaG93RGVidWdCb3JkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tH
cmFwaGljc0xheWVyQ2xpZW50OjpzaG93UmVwYWludENvdW50ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdEltYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEltYWdlOjpUZXN0
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEltYWdlOjppc0JpdG1hcEltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRlc3RJbWFnZTo6Y3VycmVudEZyYW1lSGFzQWxwaGEpOgorICAgICAg
ICAoV2ViQ29yZTo6VGVzdEltYWdlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RJbWFn
ZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdElt
YWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEltYWdlOjpk
ZWNvZGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW1hZ2U6OmRyYXcpOgorICAgICAg
ICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTEtMTItMDYgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJl
dmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIx
MDIxMDIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAppbmRleCAzZjE3N2Nm
MjkwY2JiOWFhYTgxMDQ1YmEzY2U4NDgyODg1ZjRhOGE5Li4xM2EzOWNkYWY2N2IwODg3ZGI5YmIz
Njg3YmUxYjRhMGFkYzIwODIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5j
cHAKQEAgLTMyMiw2ICszMjIsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29u
dGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKICAgICAgICAgfQogICAgICAgICBJbWFnZUxheWVy
Q2hyb21pdW0qIGltYWdlTGF5ZXIgPSBzdGF0aWNfY2FzdDxJbWFnZUxheWVyQ2hyb21pdW0qPiht
X2NvbnRlbnRzTGF5ZXIuZ2V0KCkpOwogICAgICAgICBpbWFnZUxheWVyLT5zZXRDb250ZW50cyhp
bWFnZSk7CisgICAgICAgIGltYWdlTGF5ZXItPnNldE9wYXF1ZShpbWFnZS0+aXNCaXRtYXBJbWFn
ZSgpICYmICFpbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSk7CiAgICAgICAgIHVwZGF0ZUNv
bnRlbnRzUmVjdCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKaW5kZXggYjA1ZDA3YmY2MzdiZjVj
ZmUwZTRiZWM0ZTM5M2RiYTdiMGMwM2RmMi4uZGYyNjk4YWJkOTFlMzc2NTZiMTI0OGM3YjhiNDgy
Y2MxNDg3NzRmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKQEAgLTEwMSw2
ICsxMDEsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCk7CiAgICAgdmlydHVhbCB2b2lkIG5vdGlm
eVN5bmNSZXF1aXJlZCgpOwogCisgICAgLy8gRXhwb3NlZCBmb3IgdGVzdHMuCisgICAgTGF5ZXJD
aHJvbWl1bSogY29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNMYXllci5n
ZXQoKTsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlT3BhY2l0eU9uTGF5ZXIoKTsKIApA
QCAtMTI4LDcgKzEzMSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVDb250ZW50c1NjYWxl
KCk7CiAKICAgICB2b2lkIHNldHVwQ29udGVudHNMYXllcihMYXllckNocm9taXVtKik7Ci0gICAg
TGF5ZXJDaHJvbWl1bSogY29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNM
YXllci5nZXQoKTsgfQogICAgIGZsb2F0IGNvbnRlbnRzU2NhbGUoKSBjb25zdDsKIAogICAgIFN0
cmluZyBtX25hbWVCYXNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNzBh
ZmRkMDgyYzQzZmMwMjg5Y2E5MDI5Yjk2NGE0ZDQ0ZTM0NGU3My4uNGViNjVkNDJjY2NmZTIyMDYz
YTg5NGEyMjQ2ZjhiYjg3YjQ5NDAyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3Bw
CkBAIC0xNjQsNyArMTY0LDYgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnNldENvbnRlbnRz
KEltYWdlKiBjb250ZW50cykKICAgICBtX2NvbnRlbnRzID0gY29udGVudHM7CiAgICAgbV9pbWFn
ZUZvckN1cnJlbnRGcmFtZSA9IG1fY29udGVudHMtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CiAgICAgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgc2V0T3BhcXVlKCFtX2NvbnRlbnRzLT5j
dXJyZW50RnJhbWVIYXNBbHBoYSgpKTsKIH0KIAogdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnBh
aW50Q29udGVudHNJZkRpcnR5KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGIx
ZjllZGYxMzE2YWFiMDQ3YjE3NWJhN2FkZTc1NjBiOTc1YzEyM2YuLmRiOTk4OTdjMjUzN2RmMWM5
MTBlMDFhN2NmM2RkNmM4M2FkZWZkNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpA
QCAtMTAxLDEwICsxMDEsMTQgQEAKICAgICAgICAgXSwKIAogICAgICAgICAnY29uZGl0aW9ucyc6
IFsKLSAgICAgICAgICAgIFsnT1M9PSJ3aW4iJywgeworICAgICAgICAgICAgWyd1c2Vfc2tpYSA9
PSAxJywgewogICAgICAgICAgICAgICAgICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMnOiBbCi0gICAg
ICAgICAgICAgICAgICAgICMgRklYTUU6IFBvcnQgRHJhZ0ltYWdlVGVzdCB0byBNYWMuCiAgICAg
ICAgICAgICAgICAgICAgICd0ZXN0cy9EcmFnSW1hZ2VUZXN0LmNwcCcsCisgICAgICAgICAgICAg
ICAgICAgICd0ZXN0cy9JbWFnZUxheWVyQ2hyb21pdW1UZXN0LmNwcCcsCisgICAgICAgICAgICAg
ICAgXSwKKyAgICAgICAgICAgIH1dLAorICAgICAgICAgICAgWydPUz09IndpbiInLCB7CisgICAg
ICAgICAgICAgICAgJ3dlYmtpdF91bml0dGVzdF9maWxlcyc6IFsKICAgICAgICAgICAgICAgICAg
ICAgIyBGSVhNRTogUG9ydCBQb3B1cE1lbnVUZXN0IHRvIExpbnV4IGFuZCBNYWMuCiAgICAgICAg
ICAgICAgICAgICAgICd0ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAg
ICAgICd0ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcCcsCkBAIC0xMjEsOCArMTI1LDYgQEAK
ICAgICAgICAgICAgIH1dLAogICAgICAgICAgICAgWyd0b29sa2l0X3VzZXNfZ3RrID09IDEnLCB7
CiAgICAgICAgICAgICAgICAgJ3dlYmtpdF91bml0dGVzdF9maWxlcyc6IFsKLSAgICAgICAgICAg
ICAgICAgICAgIyBGSVhNRTogUG9ydCBEcmFnSW1hZ2VUZXN0IHRvIE1hYy4KLSAgICAgICAgICAg
ICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAg
J3Rlc3RzL1dlYklucHV0RXZlbnRGYWN0b3J5VGVzdEd0ay5jcHAnLAogICAgICAgICAgICAgICAg
IF0sCiAgICAgICAgICAgICB9XSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0Ry
YWdJbWFnZVRlc3QuY3BwCmluZGV4IGE0OWE3MjM0YzMzN2VjMjQxNTY2ZTdmMTU0ODgyMDNhYzdm
YzQ0OTIuLjA4MDYwN2NkNzc3Mjg5ODM0YWIwM2YwODgyMGQyZjA1YmY4YTUwYjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EcmFnSW1hZ2VUZXN0LmNwcApAQCAtMzAsMTEg
KzMwLDEyIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0
Lmg+Ci0KICNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKKwogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5j
bHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAt
NTIsMTcgKzUzLDEyIEBAIHB1YmxpYzoKICAgICAgICAgOiBJbWFnZSgwKQogICAgICAgICAsIG1f
c2l6ZShzaXplKQogICAgIHsKLSAgICAgICAgbV9uYXRpdmVJbWFnZSA9IG5ldyBOYXRpdmVJbWFn
ZVNraWEoKTsKKyAgICAgICAgbV9uYXRpdmVJbWFnZSA9IGFkb3B0UHRyKG5ldyBOYXRpdmVJbWFn
ZVNraWEoKSk7CiAgICAgICAgIG1fbmF0aXZlSW1hZ2UtPmJpdG1hcCgpLnNldENvbmZpZyhTa0Jp
dG1hcDo6a0FSR0JfODg4OF9Db25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDApOwogICAgICAgICBtX25h
dGl2ZUltYWdlLT5iaXRtYXAoKS5hbGxvY1BpeGVscygpOwogICAgIH0KIAotICAgIHZpcnR1YWwg
flRlc3RJbWFnZSgpCi0gICAgewotICAgICAgICBkZWxldGUgbV9uYXRpdmVJbWFnZTsKLSAgICB9
Ci0KICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1
cm4gbV9zaXplOwpAQCAtNzMsNyArNjksNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChtX3NpemUu
aXNaZXJvKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICByZXR1cm4gbV9uYXRp
dmVJbWFnZTsKKyAgICAgICAgcmV0dXJuIG1fbmF0aXZlSW1hZ2UuZ2V0KCk7CiAgICAgfQogCiAg
ICAgLy8gU3R1YiBpbXBsZW1lbnRhdGlvbnMgb2YgcHVyZSB2aXJ0dWFsIEltYWdlIGZ1bmN0aW9u
cy4KQEAgLTk2LDcgKzkyLDcgQEAgcHJpdmF0ZToKIAogICAgIEludFNpemUgbV9zaXplOwogCi0g
ICAgTmF0aXZlSW1hZ2VQdHIgbV9uYXRpdmVJbWFnZTsKKyAgICBPd25QdHI8TmF0aXZlSW1hZ2VQ
dHI+IG1fbmF0aXZlSW1hZ2U7CiB9OwogCiBURVNUKERyYWdJbWFnZVRlc3QsIE51bGxIYW5kbGlu
ZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VMYXllckNo
cm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyOGY4ZThiNDAzMDFkMWI0YjA2N2NmYjgwMmFj
MzI5ODg1ZTE2OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJJbWFnZUxheWVyQ2hyb21p
dW0uaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xh
eWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKKyNpbmNsdWRlIDxn
dGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitjbGFzcyBNb2NrR3JhcGhpY3NMYXllckNs
aWVudCA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xpZW50IHsKKyAgcHVibGljOgorICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBkb3Vi
bGUgdGltZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBH
cmFwaGljc0xheWVyKikgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3Qg
R3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1Bo
YXNlLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApIHsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG93RGVi
dWdCb3JkZXJzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hv
d1JlcGFpbnRDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KK307CisKK2NsYXNzIFRl
c3RJbWFnZSA6IHB1YmxpYyBJbWFnZSB7CitwdWJsaWM6CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxUZXN0SW1hZ2U+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBib29sIG9wYXF1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGVzdEltYWdlKHNpemUsIG9wYXF1ZSkp
OworICAgIH0KKworICAgIGV4cGxpY2l0IFRlc3RJbWFnZShjb25zdCBJbnRTaXplJiBzaXplLCBi
b29sIG9wYXF1ZSkKKyAgICAgICAgOiBJbWFnZSgwKQorICAgICAgICAsIG1fc2l6ZShzaXplKQor
ICAgIHsKKyAgICAgICAgbV9uYXRpdmVJbWFnZSA9IGFkb3B0UHRyKG5ldyBOYXRpdmVJbWFnZVNr
aWEoKSk7CisgICAgICAgIG1fbmF0aXZlSW1hZ2UtPmJpdG1hcCgpLnNldENvbmZpZyhTa0JpdG1h
cDo6a0FSR0JfODg4OF9Db25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDApOworICAgICAgICBtX25hdGl2
ZUltYWdlLT5iaXRtYXAoKS5hbGxvY1BpeGVscygpOworICAgICAgICBtX25hdGl2ZUltYWdlLT5i
aXRtYXAoKS5zZXRJc09wYXF1ZShvcGFxdWUpOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBp
c0JpdG1hcEltYWdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50RnJhbWVIYXNBbHBoYSgpCisgICAgeworICAgICAg
ICByZXR1cm4gIW1fbmF0aXZlSW1hZ2UtPmJpdG1hcCgpLmlzT3BhcXVlKCk7CisgICAgfQorCisg
ICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
c2l6ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCkKKyAgICB7CisgICAgICAgIGlmIChtX3NpemUuaXNaZXJvKCkpCisgICAg
ICAgICAgICByZXR1cm4gMDsKKworICAgICAgICByZXR1cm4gbV9uYXRpdmVJbWFnZS5nZXQoKTsK
KyAgICB9CisKKyAgICAvLyBTdHViIGltcGxlbWVudGF0aW9ucyBvZiBwdXJlIHZpcnR1YWwgSW1h
Z2UgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCkK
KyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZGVjb2RlZFNpemUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIDB1OworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBkcmF3KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2Vi
Q29yZTo6Q29sb3JTcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpDb21wb3Np
dGVPcGVyYXRvcikKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorCisgICAgSW50U2l6ZSBtX3Np
emU7CisKKyAgICBPd25QdHI8TmF0aXZlSW1hZ2VQdHI+IG1fbmF0aXZlSW1hZ2U7Cit9OworCitU
RVNUKEltYWdlTGF5ZXJDaHJvbWl1bVRlc3QsIG9wYXF1ZUltYWdlcykKK3sKKyAgICBNb2NrR3Jh
cGhpY3NMYXllckNsaWVudCBjbGllbnQ7CisgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bT4gZ3JhcGhpY3NMYXllciA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8R3JhcGhpY3NMYXllckNocm9t
aXVtPihHcmFwaGljc0xheWVyOjpjcmVhdGUoJmNsaWVudCkpOworICAgIEFTU0VSVF9UUlVFKGdy
YXBoaWNzTGF5ZXIuZ2V0KCkpOworCisgICAgUmVmUHRyPEltYWdlPiBvcGFxdWVJbWFnZSA9IFRl
c3RJbWFnZTo6Y3JlYXRlKEludFNpemUoMTAwLCAxMDApLCB0cnVlKTsKKyAgICBBU1NFUlRfVFJV
RShvcGFxdWVJbWFnZS5nZXQoKSk7CisgICAgUmVmUHRyPEltYWdlPiBub25PcGFxdWVJbWFnZSA9
IFRlc3RJbWFnZTo6Y3JlYXRlKEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAgQVNTRVJU
X1RSVUUobm9uT3BhcXVlSW1hZ2UuZ2V0KCkpOworCisgICAgQVNTRVJUX0ZBTFNFKGdyYXBoaWNz
TGF5ZXItPmNvbnRlbnRzTGF5ZXIoKSk7CisKKyAgICBncmFwaGljc0xheWVyLT5zZXRDb250ZW50
c1RvSW1hZ2Uob3BhcXVlSW1hZ2UuZ2V0KCkpOworICAgIEFTU0VSVF9UUlVFKGdyYXBoaWNzTGF5
ZXItPmNvbnRlbnRzTGF5ZXIoKS0+b3BhcXVlKCkpOworCisgICAgZ3JhcGhpY3NMYXllci0+c2V0
Q29udGVudHNUb0ltYWdlKG5vbk9wYXF1ZUltYWdlLmdldCgpKTsKKyAgICBBU1NFUlRfRkFMU0Uo
Z3JhcGhpY3NMYXllci0+Y29udGVudHNMYXllcigpLT5vcGFxdWUoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>