<?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>60719</bug_id>
          
          <creation_ts>2011-05-12 12:52:48 -0700</creation_ts>
          <short_desc>Split canvas from LayerTilerChromium</short_desc>
          <delta_ts>2011-05-18 16:53:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>60983</dependson>
          <blocked>56749</blocked>
    
    <blocked>60934</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alok Priyadarshi">alokp</reporter>
          <assigned_to name="Alok Priyadarshi">alokp</assigned_to>
          <cc>atwilson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>403087</commentid>
    <comment_count>0</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-12 12:52:48 -0700</bug_when>
    <thetext>LayerTilerChromium paints into a bitmap canvas and uploads bitmap pixels to update tile textures. The task of painting and updating textures should be delegated to a custom object so that other types of canvases and update mechanisms can be used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403650</commentid>
    <comment_count>1</comment_count>
      <attachid>93479</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-13 10:34:08 -0700</bug_when>
    <thetext>Created attachment 93479
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403727</commentid>
    <comment_count>2</comment_count>
      <attachid>93479</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-13 12:03:39 -0700</bug_when>
    <thetext>Comment on attachment 93479
proposed patch

Attachment 93479 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/8698132</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403851</commentid>
    <comment_count>3</comment_count>
      <attachid>93508</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-13 14:14:55 -0700</bug_when>
    <thetext>Created attachment 93508
proposed patch

fixed warning on cr-linux</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403869</commentid>
    <comment_count>4</comment_count>
      <attachid>93513</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-13 14:36:24 -0700</bug_when>
    <thetext>Created attachment 93513
proposed patch

fixed merge issues. grrr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403939</commentid>
    <comment_count>5</comment_count>
      <attachid>93513</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-05-13 16:26:18 -0700</bug_when>
    <thetext>Comment on attachment 93513
proposed patch

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

Awesome, thanks for all this.  I have a bunch of small nits for this patch and some thoughts about where we&apos;re going to have to clean up some of this code that you&apos;re touching in the future.

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:-114
&gt;      LayerChromium::setLayerRenderer(layerRenderer);
&gt;      createTilerIfNeeded();
&gt; -    m_tiler-&gt;setLayerRenderer(layerRenderer);

This will not set the layer renderer properly if it changes, because the tiler will already have been created.

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:121
&gt; +PassOwnPtr&lt;LayerTextureUpdater&gt; ContentLayerChromium::createTextureUpdater()

I wish that the base version of createTextureUpdater didn&apos;t live on ContentLayerChromium, but that can wait until the ImageLayerChromium / ContentLayerChromium split.

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:123
&gt; +    LayerPainterChromium* painter = new ContentLayerPainter(m_owner);

adoptPtr on the same line as new.

&gt; Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:76
&gt; +    const PlatformImage&amp; m_image;

The const PlatformImage&amp; member variable is a little weird here, but I think it&apos;s the right choice for this patch.  In the future, when the compositor is on another thread, ImageLayerChromium will send an ImageLayerTextureUpdater to the compositor thread.  I think ultimately ImageLayerChromium should own ImageLayerTextureUpdater, and ImageLayerTextureUpdater should own PlatformImage.  Can you add a &quot;// FIXME: ImageLayerTextureUpdater should own m_image&quot;?

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:98
&gt; -PassRefPtr&lt;LayerRendererChromium&gt; LayerRendererChromium::create(PassRefPtr&lt;GraphicsContext3D&gt; context, PassOwnPtr&lt;TilePaintInterface&gt; contentPaint)
&gt; +PassRefPtr&lt;LayerRendererChromium&gt; LayerRendererChromium::create(PassRefPtr&lt;GraphicsContext3D&gt; context, PassOwnPtr&lt;LayerPainterChromium&gt; contentPaint)

The fact that you had to make this change only makes me feel more strongly that we need to make root layers a LayerChromium and not their own special class in some future patch.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:130
&gt; +    LayerTextureUpdater* textureUpdater = new LayerTextureUpdaterBitmap(m_context.get(), contentPaint, m_contextSupportsMapSub);

adoptPtr on the same line.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:64
&gt; +#if USE(SKIA)
&gt; +class SkCanvas;
&gt; +#endif
&gt; +

Why is this needed?

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:-198
&gt; -

Nit: don&apos;t make unnecessary whitespace changes, because it&apos;s more likely to cause merge conflicts for others.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:-236
&gt; -

Nit: same as above.

&gt; Source/WebCore/platform/graphics/chromium/LayerTextureSubImage.cpp:63
&gt; +    if (m_useMapTexSubImage) {

There have been a number of crashes in all of this memcpy code in the past.  Can you split this out into two helper functions like uploadWithMapTexSubImage and uploadWithTexSubImage so that we can see where the problem is in a stack trace if this does crash?

&gt; Source/WebCore/platform/graphics/chromium/LayerTextureSubImage.h:42
&gt; +    LayerTextureSubImage(bool useMapSubForUpload);

This should be explicit.

&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdater.h:41
&gt; +    LayerTextureUpdater(GraphicsContext3D* context) : m_context(context) { }

This should be explicit.

&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdater.h:51
&gt; +    virtual void prepareToUpdate(const IntRect&amp; contentRect, const IntSize&amp; tileSize, int borderTexels) = 0;
&gt; +    virtual void updateTextureRect(LayerTexture*, const IntRect&amp; sourceRect, const IntRect&amp; destRect) = 0;

This might be bikeshedding, but for consistency&apos;s sake could we call these the same thing as the LayerTilerChromium functions, i.e. update() and upload()?

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:307
&gt; -            IntPoint paintOffset(sourceRect.x() - paintRect.x(), sourceRect.y() - paintRect.y());
&gt; -            if (paintOffset.x() &lt; 0)
&gt; -                CRASH();
&gt; -            if (paintOffset.y() &lt; 0)
&gt; -                CRASH();
&gt; -            if (paintOffset.x() + destRect.width() &gt; paintRect.width())
&gt; -                CRASH();
&gt; -            if (paintOffset.y() + destRect.height() &gt; paintRect.height())
&gt; -                CRASH();
&gt; +            IntPoint paintOffset(sourceRect.x() - m_paintRect.x(), sourceRect.y() - m_paintRect.y());
&gt; +            ASSERT((paintOffset.x() &gt;= 0) &amp;&amp; (paintOffset.y() &gt;= 0));
&gt; +            ASSERT(paintOffset.x() + destRect.width() &lt;= m_paintRect.width());
&gt; +            ASSERT(paintOffset.y() + destRect.height() &lt;= m_paintRect.height());

Can you not turn these CRASH calls into ASSERT? These have failed in the past due to unexpected inputs and when that happens it causes memory overruns.  If you want to clean this up, please do so in another patch so that it&apos;d be easily revertible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403945</commentid>
    <comment_count>6</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-05-13 16:43:28 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 93513 [details])

&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerTextureSubImage.h:42
&gt; &gt; +    LayerTextureSubImage(bool useMapSubForUpload);
&gt; 
&gt; This should be explicit.

Oops.  I didn&apos;t mean this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403996</commentid>
    <comment_count>7</comment_count>
      <attachid>93513</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-13 17:43:12 -0700</bug_when>
    <thetext>Comment on attachment 93513
proposed patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:76
&gt;&gt; +    const PlatformImage&amp; m_image;
&gt; 
&gt; The const PlatformImage&amp; member variable is a little weird here, but I think it&apos;s the right choice for this patch.  In the future, when the compositor is on another thread, ImageLayerChromium will send an ImageLayerTextureUpdater to the compositor thread.  I think ultimately ImageLayerChromium should own ImageLayerTextureUpdater, and ImageLayerTextureUpdater should own PlatformImage.  Can you add a &quot;// FIXME: ImageLayerTextureUpdater should own m_image&quot;?

how could this work?  The PlatformImage changes on an ImageLayerChromium, potentially every frame (consider an animated gif).  do we make a new uploader every frame?

this seems...dodgy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403999</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-13 17:57:24 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 93513 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=93513&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:76
&gt; &gt;&gt; +    const PlatformImage&amp; m_image;
&gt; &gt; 
&gt; &gt; The const PlatformImage&amp; member variable is a little weird here, but I think it&apos;s the right choice for this patch.  In the future, when the compositor is on another thread, ImageLayerChromium will send an ImageLayerTextureUpdater to the compositor thread.  I think ultimately ImageLayerChromium should own ImageLayerTextureUpdater, and ImageLayerTextureUpdater should own PlatformImage.  Can you add a &quot;// FIXME: ImageLayerTextureUpdater should own m_image&quot;?
&gt; 
&gt; how could this work?  The PlatformImage changes on an ImageLayerChromium, potentially every frame (consider an animated gif).  do we make a new uploader every frame?
&gt; 
&gt; this seems...dodgy

Oh, I was mistaken - the object remains the same but the contents change.  This still feels as if something is being misplaced.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404004</commentid>
    <comment_count>9</comment_count>
      <attachid>93513</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-13 18:34:26 -0700</bug_when>
    <thetext>Comment on attachment 93513
proposed patch

It seems weird and fragile that for content layers the PlatformCanvas is owned by the updater, but for image layers the PlatformImage is owned by the layer and referenced by the updater.  Can you have the updater have ownership of the PlatformImage directly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404499</commentid>
    <comment_count>10</comment_count>
      <attachid>93513</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-16 08:36:33 -0700</bug_when>
    <thetext>Comment on attachment 93513
proposed patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:-114
&gt;&gt; -    m_tiler-&gt;setLayerRenderer(layerRenderer);
&gt; 
&gt; This will not set the layer renderer properly if it changes, because the tiler will already have been created.

Actually it does work. LayerChromium::setLayerRenderer() calls ContentLayerChromium::cleanupResources() which in turn clears the tiler. So now we are re-creating the tiler if layer-renderer changes. We were earlier doing something similar in LayerTilerChromium::reset(). Now that LayerTilerChromium owns LayerTextureUpdater which keeps reference to layer-renderer-context, I think it is cleaner to just create the updater and tiler from scratch whenever layer-renderer changes.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:121

&gt; 
&gt; I wish that the base version of createTextureUpdater didn&apos;t live on ContentLayerChromium, but that can wait until the ImageLayerChromium / ContentLayerChromium split.

Yes this will not be necessary after the ImageLayerChromium / ContentLayerChromium split.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:123
&gt;&gt; +    LayerPainterChromium* painter = new ContentLayerPainter(m_owner);
&gt; 
&gt; adoptPtr on the same line as new.

done

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:76
&gt;&gt;&gt;&gt; +    const PlatformImage&amp; m_image;
&gt;&gt;&gt; 
&gt;&gt;&gt; The const PlatformImage&amp; member variable is a little weird here, but I think it&apos;s the right choice for this patch.  In the future, when the compositor is on another thread, ImageLayerChromium will send an ImageLayerTextureUpdater to the compositor thread.  I think ultimately ImageLayerChromium should own ImageLayerTextureUpdater, and ImageLayerTextureUpdater should own PlatformImage.  Can you add a &quot;// FIXME: ImageLayerTextureUpdater should own m_image&quot;?
&gt;&gt; 
&gt;&gt; how could this work?  The PlatformImage changes on an ImageLayerChromium, potentially every frame (consider an animated gif).  do we make a new uploader every frame?
&gt;&gt; 
&gt;&gt; this seems...dodgy
&gt; 
&gt; Oh, I was mistaken - the object remains the same but the contents change.  This still feels as if something is being misplaced.

I agree that it will be cleaner if ImageLayerTextureUpdater owned PlatformImage. But ImageLayerChromium still uses PlatformImage size to mark tiler dirty and to updateLayerSize(). I guess you could get image size from somewhere else, but I did not want to change too many things in this patch. I have added a FIXME.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:130
&gt;&gt; +    LayerTextureUpdater* textureUpdater = new LayerTextureUpdaterBitmap(m_context.get(), contentPaint, m_contextSupportsMapSub);
&gt; 
&gt; adoptPtr on the same line.

done

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:64
&gt;&gt; +
&gt; 
&gt; Why is this needed?

Because I removed &quot;#include PlatformCanvas.h&quot; from some other header file. LayerRendererChromium has an SkCanvas member variable.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:-198
&gt;&gt; -
&gt; 
&gt; Nit: don&apos;t make unnecessary whitespace changes, because it&apos;s more likely to cause merge conflicts for others.

reverted

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:-236
&gt;&gt; -
&gt; 
&gt; Nit: same as above.

reverted

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTextureSubImage.cpp:63
&gt;&gt; +    if (m_useMapTexSubImage) {
&gt; 
&gt; There have been a number of crashes in all of this memcpy code in the past.  Can you split this out into two helper functions like uploadWithMapTexSubImage and uploadWithTexSubImage so that we can see where the problem is in a stack trace if this does crash?

done

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdater.h:41
&gt;&gt; +    LayerTextureUpdater(GraphicsContext3D* context) : m_context(context) { }
&gt; 
&gt; This should be explicit.

done

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdater.h:51
&gt;&gt; +    virtual void updateTextureRect(LayerTexture*, const IntRect&amp; sourceRect, const IntRect&amp; destRect) = 0;
&gt; 
&gt; This might be bikeshedding, but for consistency&apos;s sake could we call these the same thing as the LayerTilerChromium functions, i.e. update() and upload()?

For a class named LayerTextureUpdater, update should really update textures. What if we renamed LayerTilerChromium functions?

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:307
&gt;&gt; +            ASSERT(paintOffset.y() + destRect.height() &lt;= m_paintRect.height());
&gt; 
&gt; Can you not turn these CRASH calls into ASSERT? These have failed in the past due to unexpected inputs and when that happens it causes memory overruns.  If you want to clean this up, please do so in another patch so that it&apos;d be easily revertible.

reverted</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404503</commentid>
    <comment_count>11</comment_count>
      <attachid>93647</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-16 08:46:51 -0700</bug_when>
    <thetext>Created attachment 93647
proposed patch

Addressed reviewer comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404635</commentid>
    <comment_count>12</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-05-16 11:39:40 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 93513 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=93513&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:-114
&gt; &gt;&gt; -    m_tiler-&gt;setLayerRenderer(layerRenderer);
&gt; &gt; 
&gt; &gt; This will not set the layer renderer properly if it changes, because the tiler will already have been created.
&gt; 
&gt; Actually it does work. LayerChromium::setLayerRenderer() calls ContentLayerChromium::cleanupResources() which in turn clears the tiler.

Thanks for the explanation.  That makes perfect sense.
 
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:64
&gt; &gt;&gt; +
&gt; &gt; 
&gt; &gt; Why is this needed?
&gt; 
&gt; Because I removed &quot;#include PlatformCanvas.h&quot; from some other header file. LayerRendererChromium has an SkCanvas member variable.

Ah, ok.  I just had an assumption that LayerRendererChromium shouldn&apos;t depend on any Skia or Cg classes.

I just uploaded a patch to https://bugs.webkit.org/show_bug.cgi?id=60899 to fix this, so if that lands first, then you shouldn&apos;t need that #ifdef.

&gt; &gt;&gt; +    virtual void updateTextureRect(LayerTexture*, const IntRect&amp; sourceRect, const IntRect&amp; destRect) = 0;
&gt; &gt; 
&gt; &gt; This might be bikeshedding, but for consistency&apos;s sake could we call these the same thing as the LayerTilerChromium functions, i.e. update() and upload()?
&gt; 
&gt; For a class named LayerTextureUpdater, update should really update textures. What if we renamed LayerTilerChromium functions?

Good suggestion.  That sounds fine to me to just call the LayerTilerChromium functions prepareToUpdate and updateTextureRect.  Although, I&apos;d maybe change updateTextureRect to updateTexture because the former sounds like you&apos;re updating a rect rather than updating the texture itself.

James, do you have any naming opinions here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404706</commentid>
    <comment_count>13</comment_count>
      <attachid>93647</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-16 14:07:18 -0700</bug_when>
    <thetext>Comment on attachment 93647
proposed patch

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

This is looking pretty good now.  I&apos;m still a bit uneasy about the const PlatformImage&amp; on ImageLayerTextureUpdater, but that doesn&apos;t have to be resolved in this patch.  I don&apos;t feel strongly about the update() names.  Needs a merge and a few nits but I think we&apos;re about there.

&gt; Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:73
&gt; +        return IntRect(IntPoint(0, 0), m_image.size());

nit: you can just do IntPoint(). this does not seem like a very useful utility function

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:63
&gt; +#if USE(SKIA)
&gt; +class SkCanvas;
&gt; +#endif

If you merge up to ToT this won&apos;t be needed any more.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:156
&gt; +    explicit LayerRendererChromium(PassRefPtr&lt;GraphicsContext3D&gt;, PassOwnPtr&lt;LayerPainterChromium&gt; contentPaint);

nit: explicit isn&apos;t needed since this c&apos;tor take stwo arguments (you did not break this, but since you&apos;re in here anyway might as well clean it up)

&gt; Source/WebCore/platform/graphics/chromium/LayerTextureSubImage.h:42
&gt; +    LayerTextureSubImage(bool useMapSubForUpload);

need explicit here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404717</commentid>
    <comment_count>14</comment_count>
      <attachid>93647</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-16 14:28:14 -0700</bug_when>
    <thetext>Comment on attachment 93647
proposed patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:73
&gt;&gt; +        return IntRect(IntPoint(0, 0), m_image.size());
&gt; 
&gt; nit: you can just do IntPoint(). this does not seem like a very useful utility function

used IntPoint::zero() instead.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:63
&gt;&gt; +#endif
&gt; 
&gt; If you merge up to ToT this won&apos;t be needed any more.

removed

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:156
&gt;&gt; +    explicit LayerRendererChromium(PassRefPtr&lt;GraphicsContext3D&gt;, PassOwnPtr&lt;LayerPainterChromium&gt; contentPaint);
&gt; 
&gt; nit: explicit isn&apos;t needed since this c&apos;tor take stwo arguments (you did not break this, but since you&apos;re in here anyway might as well clean it up)

done

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTextureSubImage.h:42
&gt;&gt; +    LayerTextureSubImage(bool useMapSubForUpload);
&gt; 
&gt; need explicit here

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404729</commentid>
    <comment_count>15</comment_count>
      <attachid>93696</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-16 14:49:55 -0700</bug_when>
    <thetext>Created attachment 93696
proposed patch

Main changes:
- Replaced IntPoint(0,0) with IntPoint::zero()
- Removed #ifdef(SKIA) from LayerRendererChromium.h
- explicit constructors
- Renamed LayerTilerChromium member functions: update -&gt; prepareToUpdate and upload -&gt; updateRect</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404742</commentid>
    <comment_count>16</comment_count>
      <attachid>93696</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-05-16 15:04:09 -0700</bug_when>
    <thetext>Comment on attachment 93696
proposed patch

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

One small nit:

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.h:60
&gt; +    void updateRect();

As I mentioned before, I would still like the function names to be consistent.  Can LayerTilerChromium::updateRect =&gt; LayerTilerChromium::updateTexture and LayerTextureUpdater::updateTextureRect =&gt; LayerTextureUpdater::updateTexture?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404758</commentid>
    <comment_count>17</comment_count>
      <attachid>93696</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-16 15:14:55 -0700</bug_when>
    <thetext>Comment on attachment 93696
proposed patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.h:60
&gt;&gt; +    void updateRect();
&gt; 
&gt; As I mentioned before, I would still like the function names to be consistent.  Can LayerTilerChromium::updateRect =&gt; LayerTilerChromium::updateTexture and LayerTextureUpdater::updateTextureRect =&gt; LayerTextureUpdater::updateTexture?

updateTexture is fine too. But I do not think it is important for the function names to be consistent. Though they are internally doing the same thing, context is different. LayerTilerChromium is updating many textures for a dirty content-rect while LayerTextureUpdater is updating a rect within a single texture. For the clients of LayerTilerChromium, it should not matter if the tiler even uses textures. They should just be able to invalidate, update, and draw.

But if you feel strongly about this, I can make this change. I am fine either way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404765</commentid>
    <comment_count>18</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-05-16 15:21:17 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 93696 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=93696&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.h:60
&gt; &gt;&gt; +    void updateRect();
&gt; &gt; 
&gt; &gt; As I mentioned before, I would still like the function names to be consistent.  Can LayerTilerChromium::updateRect =&gt; LayerTilerChromium::updateTexture and LayerTextureUpdater::updateTextureRect =&gt; LayerTextureUpdater::updateTexture?
&gt; 
&gt; updateTexture is fine too. But I do not think it is important for the function names to be consistent. Though they are internally doing the same thing, context is different. LayerTilerChromium is updating many textures for a dirty content-rect while LayerTextureUpdater is updating a rect within a single texture. For the clients of LayerTilerChromium, it should not matter if the tiler even uses textures. They should just be able to invalidate, update, and draw.

That&apos;s reasonable.  Just leave it as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404788</commentid>
    <comment_count>19</comment_count>
      <attachid>93696</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-16 15:59:01 -0700</bug_when>
    <thetext>Comment on attachment 93696
proposed patch

Clearing flags on attachment: 93696

Committed r86625: &lt;http://trac.webkit.org/changeset/86625&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404789</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-16 15:59:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404831</commentid>
    <comment_count>21</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2011-05-16 17:19:42 -0700</bug_when>
    <thetext>Rolling out because it&apos;s crashing the chromium canaries.

http://test-results.appspot.com/dashboards/flakiness_dashboard.html#showExpectations=true&amp;group=%40ToT%20GPU%20Mesa%20-%20chromium.org&amp;tests=compositing%2Fcolor-matching%2Fimage-color-matching.html

ASSERTION FAILED: imageRect().contains(contentRect)
third_party/WebKit/Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp(60) : virtual void WebCore::ImageLayerTextureUpdater::prepareToUpdate(const WebCore::IntRect&amp;, const WebCore::IntSize&amp;, int)
[3429:3429:2430038712840:ERROR:process_util_posix.cc(108)] Received signal 11</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404834</commentid>
    <comment_count>22</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2011-05-16 17:21:16 -0700</bug_when>
    <thetext>Reverted r86625 for reason:

Caused failed assertion on Chromium gpu canary bots

Committed r86640: &lt;http://trac.webkit.org/changeset/86640&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405470</commentid>
    <comment_count>23</comment_count>
      <attachid>93859</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-05-17 19:47:47 -0700</bug_when>
    <thetext>Created attachment 93859
Fix for the image assertion issues.

The above assertion was being triggered because the paint rect was larger than the image itself.  This is because in the update function the paint rect is potentially extended to tile boundaries.

There was some offline discussion between Alok and me about whether we should have the tiler store explicit layer bounds and have different sized textures for outside tiles.  I thought this might be easy, but it ultimately added a lot more complication to the tiler&apos;s drawing and recycling mechanisms, where the tiler previously had a single tile size for all textures.

After some thought, I think the best solution is to just clip any request for uploading pixels from outside the image bounds to the image bounds itself.  Other layers have no problem painting outside their bounds, so this is really just an image-specific restriction.  Intersecting with the image bounds mimics the same behavior as before this patch, but the intersection has just moved to the updater from the tiler as a result of this refactoring.

I&apos;ve attached a patch which implements this suggestion and causes that failing test to pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405473</commentid>
    <comment_count>24</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-17 20:05:53 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Created an attachment (id=93859) [details]
&gt; Fix for the image assertion issues.
&gt; 
&gt; The above assertion was being triggered because the paint rect was larger than the image itself.  This is because in the update function the paint rect is potentially extended to tile boundaries.
&gt; 
&gt; There was some offline discussion between Alok and me about whether we should have the tiler store explicit layer bounds and have different sized textures for outside tiles.  I thought this might be easy, but it ultimately added a lot more complication to the tiler&apos;s drawing and recycling mechanisms, where the tiler previously had a single tile size for all textures.
&gt; 
&gt; After some thought, I think the best solution is to just clip any request for uploading pixels from outside the image bounds to the image bounds itself.  Other layers have no problem painting outside their bounds, so this is really just an image-specific restriction.  Intersecting with the image bounds mimics the same behavior as before this patch, but the intersection has just moved to the updater from the tiler as a result of this refactoring.
&gt; 

Adrienne: Thanks for the patch. Your solution would certainly work. I think the solution we discussed (keeping layer bounds in tiler) would also work while keeping the sizes for boundary tiles same. Do not clamp the tile size but rather source and destination rect in exactly the same way in your patch. Just move the clamping code to the tiler rather than ImageLayerTextureUpdater. Am I missing something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405726</commentid>
    <comment_count>25</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-05-18 08:07:15 -0700</bug_when>
    <thetext>(In reply to comment #24)

&gt; Adrienne: Thanks for the patch. Your solution would certainly work. I think the solution we discussed (keeping layer bounds in tiler) would also work while keeping the sizes for boundary tiles same. Do not clamp the tile size but rather source and destination rect in exactly the same way in your patch. Just move the clamping code to the tiler rather than ImageLayerTextureUpdater. Am I missing something?

I considered that option as well, but thought this was better for two reasons.  Mostly, clamping in the image layer updater seemed simpler--there&apos;s no need to add code to ContentLayerChromium, ImageLayerChromium, LayerRendererChromium, and a number of places in WebViewImpl to keep track of the layer size.  Also, if we&apos;ve gone ahead and overrendered and the paint rect fills the tile, why not upload all of those pixels in case we can use them later? This seems like a different use case than the images where the image size is fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405774</commentid>
    <comment_count>26</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-18 09:16:00 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; 
&gt; &gt; Adrienne: Thanks for the patch. Your solution would certainly work. I think the solution we discussed (keeping layer bounds in tiler) would also work while keeping the sizes for boundary tiles same. Do not clamp the tile size but rather source and destination rect in exactly the same way in your patch. Just move the clamping code to the tiler rather than ImageLayerTextureUpdater. Am I missing something?
&gt; 

I think it is best to land this patch and worry about setting layer bounds later. I am on vacation today. I will merge your patch with mine and try to land it tomorrow.

I have an idea to fix 60983 in a simple way. A couple of questions for my understanding:

&gt; I considered that option as well, but thought this was better for two reasons.  Mostly, clamping in the image layer updater seemed simpler--there&apos;s no need to add code to ContentLayerChromium, ImageLayerChromium, LayerRendererChromium, and a number of places in WebViewImpl to keep track of the layer size. 

Clamping in the image layer updater is certainly simpler. But it does seem a little weird that the tiler needs to paint outside the layer bounds. All the places that you mentioned already does setLayerPosition(). May be it can simply be replaced with setLayerRect().

&gt; Also, if we&apos;ve gone ahead and overrendered and the paint rect fills the tile, why not upload all of those pixels in case we can use them later? This seems like a different use case than the images where the image size is fixed.

I did not understand your last motivation. Are content/root layers able to paint outside the layer bounds? Even if they could in which cases could the pixels outside the bounds be used?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406018</commentid>
    <comment_count>27</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-05-18 14:12:58 -0700</bug_when>
    <thetext>(In reply to comment #26)

&gt; &gt; Also, if we&apos;ve gone ahead and overrendered and the paint rect fills the tile, why not upload all of those pixels in case we can use them later? This seems like a different use case than the images where the image size is fixed.
&gt; 
&gt; I did not understand your last motivation. Are content/root layers able to paint outside the layer bounds? Even if they could in which cases could the pixels outside the bounds be used?

I talked with jamesr and it turns out that I had a misunderstanding about frame resizing.  Apparently the entire root layer needs to be invalidated when the frame size changes.  So, there is no motivation to render outside the layer bounds because it will never be able to be used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406059</commentid>
    <comment_count>28</comment_count>
      <attachid>93992</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-05-18 15:26:28 -0700</bug_when>
    <thetext>Created attachment 93992
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406060</commentid>
    <comment_count>29</comment_count>
      <attachid>93992</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-18 15:29:33 -0700</bug_when>
    <thetext>Comment on attachment 93992
Patch

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

If at first you don&apos;t succeed, try try again!

&gt; Source/WebCore/ChangeLog:2
&gt; +2011-05-18  Alok Priyadarshi  &lt;alokp@chromium.org&gt;
&gt; +            Adrienne Walker  &lt;enne@google.com&gt;

nit: same line, should be &quot;Alok Priyadarshi  &lt;alokp@chromium.org&gt; and Adrienne Walker  &lt;enne@google.com&gt;&quot;

do you use your @google.com for webkit patches or @chromium.org?

&gt; Source/WebKit/chromium/ChangeLog:2
&gt; +2011-05-18  Alok Priyadarshi  &lt;alokp@chromium.org&gt;
&gt; +            Adrienne Walker  &lt;enne@google.com&gt;

same nits here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406062</commentid>
    <comment_count>30</comment_count>
      <attachid>93992</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-18 15:43:56 -0700</bug_when>
    <thetext>Comment on attachment 93992
Patch

Attachment 93992 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/8702913</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406063</commentid>
    <comment_count>31</comment_count>
      <attachid>93992</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-18 15:44:15 -0700</bug_when>
    <thetext>Comment on attachment 93992
Patch

Attachment 93992 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/8702915</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406066</commentid>
    <comment_count>32</comment_count>
      <attachid>93993</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-05-18 15:49:48 -0700</bug_when>
    <thetext>Created attachment 93993
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406069</commentid>
    <comment_count>33</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-05-18 15:50:47 -0700</bug_when>
    <thetext>Ack.  I applied that patch wrong and didn&apos;t get any of the new files.  This patch should pass the ews bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406107</commentid>
    <comment_count>34</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-05-18 16:53:28 -0700</bug_when>
    <thetext>Committed r86805: &lt;http://trac.webkit.org/changeset/86805&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93479</attachid>
            <date>2011-05-13 10:34:08 -0700</date>
            <delta_ts>2011-05-13 14:14:55 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>layer.txt</filename>
            <type>text/plain</type>
            <size>58267</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2NDQzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODAgQEAKKzIwMTEtMDUtMTMgIEFsb2sgUHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBTcGxpdCBjYW52YXMgZnJvbSBMYXll
clRpbGVyQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTYwNzE5CisKKyAgICAgICAgTGF5ZXJUaWxlckNocm9taXVtIG5vdyBqdXN0IGRvZXMg
dGlsaW5nLiBJdCBkZWxlZ2F0ZXMgdGhlIHRhc2sgb2YgcGFpbnRpbmcgYW5kIHVwZGF0aW5nIHRl
eHR1cmVzIHRvIExheWVyVGV4dHVyZVVwZGF0ZXIuCisgICAgICAgIEFsc28gYWJzdHJhY3RlZCBM
YXllclRleHR1cmVTdWJJbWFnZSB0byB1cGxvYWQgdGV4dHVyZSBwaXhlbHMuCisKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vVHJhY2VFdmVudC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXllckNo
cm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjp+Q29udGVu
dExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06
OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNo
cm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXll
ckNocm9taXVtOjpzZXRMYXllclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRM
YXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OkltYWdl
TGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVy
ZVVwZGF0ZXI6On5JbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyOjpvcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6aW1hZ2VSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
VGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUGFpbnRlckNocm9taXVtLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jvb3RMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERyYXdMYXll
cnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXll
cnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVN1YkltYWdlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVT
dWJJbWFnZTo6TGF5ZXJUZXh0dXJlU3ViSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
ZXh0dXJlU3ViSW1hZ2U6On5MYXllclRleHR1cmVTdWJJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRleHR1cmVTdWJJbWFnZTo6c2V0U3ViSW1hZ2VTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyVGV4dHVyZVN1YkltYWdlOjp1cGxvYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmg6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyOjpMYXllclRleHR1cmVVcGRh
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXI6On5MYXllclRleHR1
cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXI6OmNvbnRl
eHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVw
ZGF0ZXJDYW52YXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVw
ZGF0ZXJDYW52YXM6OkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhczo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpMYXllclRleHR1cmVVcGRhdGVyQml0
bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnByZXBh
cmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyQml0bWFw
Ojp1cGRhdGVUZXh0dXJlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6On5MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6OmNvbnRlbnRSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6On5MYXllclRl
eHR1cmVVcGRhdGVyQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0
ZXJCaXRtYXA6Om9yaWVudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
ckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVt
OjpMYXllclRpbGVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9t
aXVtOjpzZXRUaWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06
OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnVwbG9hZCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmRyYXcpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpUaWxlOjpUaWxlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmRyYXcpOgorCiAyMDExLTA1LTA1ICBQYXZl
bCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFl1cnkgU2VtaWtoYXRza3kuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA4NjQz
NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNDAy
NiwxMCArNDAyNiwxNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclBhaW50ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJl
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0
dXJlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVN1YkltYWdlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNh
bnZhcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRp
bGVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclRpbGVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaCcsCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UcmFjZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vVHJhY2VFdmVudC5oCShyZXZpc2lvbiA4NjQzNikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1RyYWNlRXZlbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2RlZmluZSBUcmFjZUV2ZW50X2gKIAogI2luY2x1
ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAKIC8v
IEltcGxlbWVudGF0aW9uIGRldGFpbDogdHJhY2UgZXZlbnQgbWFjcm9zIGNyZWF0ZSB0ZW1wb3Jh
cnkgdmFyaWFibGVzCiAvLyB0byBrZWVwIGluc3RydW1lbnRhdGlvbiBvdmVyaGVhZCBsb3cuIFRo
ZXNlIG1hY3JvcyBnaXZlIGVhY2ggdGVtcG9yYXJ5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExh
eWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA4NjQzNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzYsOCArMzYsMTEgQEAKIAogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxh
eWVyVGV4dHVyZS5oIgorI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCIKKyNp
bmNsdWRlICJMYXllclRpbGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tp
bmcuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAKQEAgLTUxLDI0ICs1NCw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxDb250
ZW50TGF5ZXJDaHJvbWl1bT4gQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xh
eWVyQ2hyb21pdW0qIG93bmVyKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29udGVudExh
eWVyQ2hyb21pdW0ob3duZXIpKTsKLX0KLQotQ29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRM
YXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCi0gICAgOiBMYXllckNo
cm9taXVtKG93bmVyKQotICAgICwgbV90aWxpbmdPcHRpb24oQ29udGVudExheWVyQ2hyb21pdW06
OkF1dG9UaWxlKQotewotfQotCi1Db250ZW50TGF5ZXJDaHJvbWl1bTo6fkNvbnRlbnRMYXllckNo
cm9taXVtKCkKLXsKLSAgICBtX3RpbGVyLmNsZWFyKCk7Ci0gICAgTGF5ZXJDaHJvbWl1bTo6Y2xl
YW51cFJlc291cmNlcygpOwotfQotCi1jbGFzcyBDb250ZW50TGF5ZXJQYWludGVyIDogcHVibGlj
IFRpbGVQYWludEludGVyZmFjZSB7CitjbGFzcyBDb250ZW50TGF5ZXJQYWludGVyIDogcHVibGlj
IExheWVyUGFpbnRlckNocm9taXVtIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBDb250ZW50TGF5
ZXJQYWludGVyKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiAgICAgICAgIDogbV9vd25l
cihvd25lcikKQEAgLTg1LDE0ICs3MSwyNyBAQCBwcml2YXRlOgogICAgIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSogbV9vd25lcjsKIH07CiAKK1Bhc3NSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW0+
IENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25l
cikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbnRlbnRMYXllckNocm9taXVtKG93bmVy
KSk7Cit9CisKK0NvbnRlbnRMYXllckNocm9taXVtOjpDb250ZW50TGF5ZXJDaHJvbWl1bShHcmFw
aGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQorICAgIDogTGF5ZXJDaHJvbWl1bShvd25lcikKKyAg
ICAsIG1fdGlsaW5nT3B0aW9uKENvbnRlbnRMYXllckNocm9taXVtOjpBdXRvVGlsZSkKK3sKK30K
KworQ29udGVudExheWVyQ2hyb21pdW06On5Db250ZW50TGF5ZXJDaHJvbWl1bSgpCit7CisgICAg
Y2xlYW51cFJlc291cmNlcygpOworfQorCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpwYWlu
dENvbnRlbnRzSWZEaXJ0eShjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCkKIHsKICAg
ICBBU1NFUlQoZHJhd3NDb250ZW50KCkpOwogICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwog
Ci0gICAgY3JlYXRlVGlsZXJJZk5lZWRlZCgpOwotCi0gICAgQ29udGVudExheWVyUGFpbnRlciBw
YWludGVyKG1fb3duZXIpOwogICAgIHVwZGF0ZUxheWVyU2l6ZShsYXllckJvdW5kcygpLnNpemUo
KSk7CiAKICAgICBJbnRSZWN0IGxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3QodGFyZ2V0U3Vy
ZmFjZVJlY3QpOwpAQCAtMTAzLDE1ICsxMDIsMjYgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1
bTo6cGFpbnRDb250ZW50cwogICAgIGRpcnR5LmludGVyc2VjdChsYXllckJvdW5kcygpKTsKICAg
ICBtX3RpbGVyLT5pbnZhbGlkYXRlUmVjdChkaXJ0eSk7CiAKLSAgICBtX3RpbGVyLT51cGRhdGUo
cGFpbnRlciwgbGF5ZXJSZWN0KTsKKyAgICBtX3RpbGVyLT51cGRhdGUobGF5ZXJSZWN0KTsKICAg
ICBtX2RpcnR5UmVjdCA9IEZsb2F0UmVjdCgpOwogfQogCit2b2lkIENvbnRlbnRMYXllckNocm9t
aXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKK3sKKyAgICBtX3RpbGVyLmNsZWFyKCk7CisgICAgTGF5
ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpOworfQorCiB2b2lkIENvbnRlbnRMYXllckNo
cm9taXVtOjpzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5k
ZXJlcikKIHsKICAgICBMYXllckNocm9taXVtOjpzZXRMYXllclJlbmRlcmVyKGxheWVyUmVuZGVy
ZXIpOwogICAgIGNyZWF0ZVRpbGVySWZOZWVkZWQoKTsKLSAgICBtX3RpbGVyLT5zZXRMYXllclJl
bmRlcmVyKGxheWVyUmVuZGVyZXIpOworfQorCitQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0
ZXI+IENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcigpCit7CisgICAg
TGF5ZXJQYWludGVyQ2hyb21pdW0qIHBhaW50ZXIgPSBuZXcgQ29udGVudExheWVyUGFpbnRlciht
X293bmVyKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRt
YXAobGF5ZXJSZW5kZXJlckNvbnRleHQoKSwgYWRvcHRQdHIocGFpbnRlciksIGxheWVyUmVuZGVy
ZXIoKS0+Y29udGV4dFN1cHBvcnRzTWFwU3ViKCkpKTsKIH0KIAogVHJhbnNmb3JtYXRpb25NYXRy
aXggQ29udGVudExheWVyQ2hyb21pdW06OnRpbGluZ1RyYW5zZm9ybSgpCkBAIC0xODYsMTYgKzE5
NiwyNiBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpkcmF3KGNvbnN0IEluCiAgICAgICAg
IG1fdGlsZXItPmRyYXcobGF5ZXJSZWN0LCB0cmFuc2Zvcm0sIGNjTGF5ZXJJbXBsKCktPmRyYXdP
cGFjaXR5KCkpOwogfQogCitib29sIENvbnRlbnRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQo
KSBjb25zdAoreworICAgIHJldHVybiBtX293bmVyICYmIG1fb3duZXItPmRyYXdzQ29udGVudCgp
ICYmICghbV90aWxlciB8fCAhbV90aWxlci0+c2tpcHNEcmF3KCkpOworfQorCiB2b2lkIENvbnRl
bnRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlcklmTmVlZGVkKCkKIHsKICAgICBpZiAobV90aWxl
cikKICAgICAgICAgcmV0dXJuOwotICAgIG1fdGlsZXIgPSBMYXllclRpbGVyQ2hyb21pdW06OmNy
ZWF0ZShsYXllclJlbmRlcmVyKCksIEludFNpemUoZGVmYXVsdFRpbGVTaXplLCBkZWZhdWx0VGls
ZVNpemUpLCBMYXllclRpbGVyQ2hyb21pdW06Okhhc0JvcmRlclRleGVscyk7CisKKyAgICBtX3Rp
bGVyID0gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUoCisgICAgICAgIGxheWVyUmVuZGVyZXIo
KSwKKyAgICAgICAgY3JlYXRlVGV4dHVyZVVwZGF0ZXIoKSwKKyAgICAgICAgSW50U2l6ZShkZWZh
dWx0VGlsZVNpemUsIGRlZmF1bHRUaWxlU2l6ZSksCisgICAgICAgIExheWVyVGlsZXJDaHJvbWl1
bTo6SGFzQm9yZGVyVGV4ZWxzKTsKIH0KIAogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcygpCiB7Ci0gICAgbV90aWxlci0+dXBsb2FkQ2FudmFzKCk7
CisgICAgbV90aWxlci0+dXBsb2FkKCk7CiB9CiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06
OnNldFRpbGluZ09wdGlvbihUaWxpbmdPcHRpb24gb3B0aW9uKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250
ZW50TGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA4NjQzNikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDEyICszNSwxMiBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKIAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJMYXllclRpbGVyQ2hy
b21pdW0uaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIExheWVyVGV4dHVyZTsKK2NsYXNzIExheWVyVGlsZXJDaHJvbWl1bTsKK2Ns
YXNzIExheWVyVGV4dHVyZVVwZGF0ZXI7CiAKIC8vIEEgTGF5ZXIgdGhhdCByZXF1aXJlcyBhIEdy
YXBoaWNzQ29udGV4dCB0byByZW5kZXIgaXRzIGNvbnRlbnRzLgogY2xhc3MgQ29udGVudExheWVy
Q2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CkBAIC01OCw3ICs1OCw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgYmluZENvbnRlbnRzVGV4dHVyZSgpOwogCiAgICAgdmlydHVh
bCB2b2lkIGRyYXcoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QpOwotICAgIHZpcnR1
YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX293bmVyICYmIG1fb3duZXIt
PmRyYXdzQ29udGVudCgpICYmICghbV90aWxlciB8fCAhbV90aWxlci0+c2tpcHNEcmF3KCkpOyB9
CisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAg
ICAgZXhwbGljaXQgQ29udGVudExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBv
d25lcik7CkBAIC02Niw4ICs2NiwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBjb25zdCBj
aGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJDb250ZW50TGF5ZXIiOyB9
CiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBp
bmRlbnQpIGNvbnN0OwogCisgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsK
IAorICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGVUZXh0
dXJlVXBkYXRlcigpOworCiAgICAgdmlydHVhbCBJbnRSZWN0IGxheWVyQm91bmRzKCkgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRpbGluZ1RyYW5zZm9ybSgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXll
ckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA4NjQzNikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJv
bWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDQ1IEBACiAjaW5jbHVkZSAiSW1h
Z2UuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXll
clRleHR1cmUuaCIKKyNpbmNsdWRlICJMYXllclRleHR1cmVTdWJJbWFnZS5oIgorI2luY2x1ZGUg
IkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJ
bWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlciB7Citw
dWJsaWM6CisgICAgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBjb25zdCBQbGF0Zm9ybUltYWdlJiBpbWFnZSwgYm9vbCB1c2VNYXBUZXhTdWJJbWFn
ZSkKKyAgICAgICAgOiBMYXllclRleHR1cmVVcGRhdGVyKGNvbnRleHQpCisgICAgICAgICwgbV9p
bWFnZShpbWFnZSkKKyAgICAgICAgLCBtX3RleFN1YkltYWdlKHVzZU1hcFRleFN1YkltYWdlKQor
ICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKCkgeyB9
CisKKyAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6Qm90dG9tVXBPcmllbnRhdGlvbjsgfQorCisgICAgdmlydHVhbCB2b2lk
IHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6
ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpCisgICAgeworICAgICAgICBBU1NFUlQoaW1h
Z2VSZWN0KCkuY29udGFpbnMoY29udGVudFJlY3QpKTsKKyAgICAgICAgbV90ZXhTdWJJbWFnZS5z
ZXRTdWJJbWFnZVNpemUodGlsZVNpemUpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVUZXh0dXJlUmVjdChMYXllclRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQorICAgIHsKKyAgICAgICAgdGV4dHVyZS0+
YmluZFRleHR1cmUoKTsKKyAgICAgICAgbV90ZXhTdWJJbWFnZS51cGxvYWQobV9pbWFnZS5waXhl
bHMoKSwgaW1hZ2VSZWN0KCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0LCBjb250ZXh0KCkpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBJbnRSZWN0IGltYWdlUmVjdCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV9pbWFnZS5zaXplKCkpOworICAg
IH0KKworICAgIGNvbnN0IFBsYXRmb3JtSW1hZ2UmIG1faW1hZ2U7CisgICAgTGF5ZXJUZXh0dXJl
U3ViSW1hZ2UgbV90ZXhTdWJJbWFnZTsKK307CisKIFBhc3NSZWZQdHI8SW1hZ2VMYXllckNocm9t
aXVtPiBJbWFnZUxheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93
bmVyKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VMYXllckNocm9taXVtKG93bmVy
KSk7CkBAIC04MCwxMyArMTE2LDE4IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpwYWludENv
bnRlbnRzSWYKICAgICAgICAgICAgIG1fdGlsZXItPmludmFsaWRhdGVSZWN0KHBhaW50UmVjdCk7
CiAgICAgICAgICAgICBtX2RpcnR5UmVjdCA9IEludFJlY3QoKTsKICAgICAgICAgfQorICAgICAg
ICBtX3RpbGVyLT51cGRhdGUocGFpbnRSZWN0KTsKICAgICB9CiB9CiAKIHZvaWQgSW1hZ2VMYXll
ckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkKIHsKLSAgICBJbnRSZWN0IHBh
aW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV9kZWNvZGVkSW1hZ2Uuc2l6ZSgpKTsKLSAgICBtX3Rp
bGVyLT51cGRhdGVGcm9tUGl4ZWxzKHBhaW50UmVjdCwgcGFpbnRSZWN0LCBtX2RlY29kZWRJbWFn
ZS5waXhlbHMoKSk7CisgICAgbV90aWxlci0+dXBsb2FkKCk7Cit9CisKK1Bhc3NPd25QdHI8TGF5
ZXJUZXh0dXJlVXBkYXRlcj4gSW1hZ2VMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRl
cigpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIo
bGF5ZXJSZW5kZXJlckNvbnRleHQoKSwgbV9kZWNvZGVkSW1hZ2UsIGxheWVyUmVuZGVyZXIoKS0+
Y29udGV4dFN1cHBvcnRzTWFwU3ViKCkpKTsKIH0KIAogSW50UmVjdCBJbWFnZUxheWVyQ2hyb21p
dW06OmxheWVyQm91bmRzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5o
CShyZXZpc2lvbiA4NjQzNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxNSArNTks
MTYgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJU
eXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiSW1hZ2VMYXllciI7IH0KIAorICAgIHZpcnR1
YWwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGVUZXh0dXJlVXBkYXRlcigp
OwogICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggdGlsaW5nVHJhbnNmb3JtKCk7CiAg
ICAgdmlydHVhbCBJbnRSZWN0IGxheWVyQm91bmRzKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAg
SW1hZ2VMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwogCi0gICAg
UGxhdGZvcm1JbWFnZSBtX2RlY29kZWRJbWFnZTsKLSAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdl
Rm9yQ3VycmVudEZyYW1lOwogICAgIFJlZlB0cjxJbWFnZT4gbV9jb250ZW50czsKKyAgICBOYXRp
dmVJbWFnZVB0ciBtX2ltYWdlRm9yQ3VycmVudEZyYW1lOworICAgIFBsYXRmb3JtSW1hZ2UgbV9k
ZWNvZGVkSW1hZ2U7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclBhaW50ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUGFpbnRlckNocm9taXVt
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclBhaW50ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworCisjaWZuZGVmIExheWVyUGFpbnRlckNocm9taXVtX2gKKyNkZWZpbmUgTGF5ZXJQ
YWludGVyQ2hyb21pdW1faAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEludFJl
Y3Q7CisKK2NsYXNzIExheWVyUGFpbnRlckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qp
ID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisjZW5kaWYgLy8gTGF5ZXJQYWludGVyQ2hyb21pdW1faAorCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclBhaW50ZXJDaHJvbWl1bS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5
bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAko
cmV2aXNpb24gODY0MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0
MCw5IEBACiAjaW5jbHVkZSAiR2VvbWV0cnlCaW5kaW5nLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiTGF5ZXJQ
YWludGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclRleHR1cmUuaCIKKyNpbmNsdWRlICJM
YXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
ICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKQEAg
LTkzLDcgKzk1LDcgQEAgc3RhdGljIGJvb2wgaXNTY2FsZU9yVHJhbnNsYXRpb24oY29uc3QgVAog
CiB9CiAKLVBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBQYXNz
T3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50KQorUGFzc1JlZlB0cjxMYXll
clJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hy
b21pdW0+IGNvbnRlbnRQYWludCkKIHsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMTA2LDEwICsxMDgsOSBAQCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1
bT4gTGF5ZXJSCiB9CiAKIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzT3duUHRyPFRpbGVQYWludEludGVy
ZmFjZT4gY29udGVudFBhaW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBhaW50KQog
ICAgIDogbV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCiAgICAgLCBt
X3Jvb3RMYXllcigwKQotICAgICwgbV9yb290TGF5ZXJDb250ZW50UGFpbnQoY29udGVudFBhaW50
KQogICAgICwgbV9jdXJyZW50U2hhZGVyKDApCiAgICAgLCBtX2N1cnJlbnRSZW5kZXJTdXJmYWNl
KDApCiAgICAgLCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQoMCkKQEAgLTEyNSw3ICsxMjYsOSBA
QCBMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvCiAgICAgaWYgKG1fY29u
dGV4dFN1cHBvcnRzTWFwU3ViKQogICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
ZW5zdXJlRW5hYmxlZCgiR0xfQ0hST01JVU1fbWFwX3N1YiIpOwogICAgIG1faGFyZHdhcmVDb21w
b3NpdGluZyA9IGluaXRpYWxpemVTaGFyZWRPYmplY3RzKCk7Ci0gICAgbV9yb290TGF5ZXJDb250
ZW50VGlsZXIgPSBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBJbnRTaXplKDI1Niwg
MjU2KSwgTGF5ZXJUaWxlckNocm9taXVtOjpOb0JvcmRlclRleGVscyk7CisKKyAgICBMYXllclRl
eHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlciA9IG5ldyBMYXllclRleHR1cmVVcGRhdGVyQml0
bWFwKG1fY29udGV4dC5nZXQoKSwgY29udGVudFBhaW50LCBtX2NvbnRleHRTdXBwb3J0c01hcFN1
Yik7CisgICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXIgPSBMYXllclRpbGVyQ2hyb21pdW06OmNy
ZWF0ZSh0aGlzLCBhZG9wdFB0cih0ZXh0dXJlVXBkYXRlciksIEludFNpemUoMjU2LCAyNTYpLCBM
YXllclRpbGVyQ2hyb21pdW06Ok5vQm9yZGVyVGV4ZWxzKTsKICAgICBBU1NFUlQobV9yb290TGF5
ZXJDb250ZW50VGlsZXIpOwogCiAgICAgbV9oZWFkc1VwRGlzcGxheSA9IENDSGVhZHNVcERpc3Bs
YXk6OmNyZWF0ZSh0aGlzKTsKQEAgLTE2NSw3ICsxNjgsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6aW52YWxpZGF0ZVJvCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRl
Um9vdExheWVyQ29udGVudHMoKQogewogICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hy
b21pdW06OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzIiwgdGhpcywgMCk7Ci0gICAgbV9yb290TGF5
ZXJDb250ZW50VGlsZXItPnVwZGF0ZSgqbV9yb290TGF5ZXJDb250ZW50UGFpbnQsIG1fdmlld3Bv
cnRWaXNpYmxlUmVjdCk7CisgICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPnVwZGF0ZShtX3Zp
ZXdwb3J0VmlzaWJsZVJlY3QpOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d1Jvb3RMYXllcigpCkBAIC0xNzMsNyArMTc2LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdSb290TGF5ZQogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcm9sbDsKICAgICBz
Y3JvbGwudHJhbnNsYXRlKC1tX3ZpZXdwb3J0VmlzaWJsZVJlY3QueCgpLCAtbV92aWV3cG9ydFZp
c2libGVSZWN0LnkoKSk7CiAKLSAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlci0+dXBsb2FkQ2Fu
dmFzKCk7CiAgICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPmRyYXcobV92aWV3cG9ydFZpc2li
bGVSZWN0LCBzY3JvbGwsIDEuMGYpOwogfQogCkBAIC0yMTIsNyArMjE0LDYgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERyYQogICAgICAgICByZXR1cm47CiAKICAgICBM
YXllckxpc3QgcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLQogICAgIHVwZGF0ZUxheWVycyhyZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIAogICAgIC8vIEJlZm9yZSBkcmF3TGF5ZXJzOgpAQCAtMzE3
LDYgKzMxOCw4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMKIC8v
ICB9CiAKICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKG1fcm9vdExheWVy
LmdldCgpKTsKKyAgICAvLyBVcGRhdGUgY29tcG9zaXRvciByZXNvdXJjZXMgZm9yIHJvb3QgbGF5
ZXIuCisgICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPnVwbG9hZCgpOwogCiAgICAgLy8gQWZ0
ZXIgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlc1JlY3Vyc2l2ZSwgc2V0L3dhaXQgbGF0Y2hlcyBm
b3IgYWxsIGNoaWxkCiAgICAgLy8gY29udGV4dHMuIFRoaXMgd2lsbCBwcmV2ZW50IHRoZSBjb21w
b3NpdG9yIGZyb20gdXNpbmcgYW55IG9mIHRoZSBjaGlsZApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmgJKHJldmlzaW9uIDg2NDM2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU4LDE3ICs1OCwyMiBAQAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNl
bmRpZgogCisjaWYgVVNFKFNLSUEpCitjbGFzcyBTa0NhbnZhczsKKyNlbmRpZgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDSGVhZHNVcERpc3BsYXk7CiBjbGFzcyBDQ0xheWVySW1w
bDsKIGNsYXNzIEdlb21ldHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xh
c3MgTGF5ZXJQYWludGVyQ2hyb21pdW07CiAKIC8vIENsYXNzIHRoYXQgaGFuZGxlcyBkcmF3aW5n
IG9mIGNvbXBvc2l0ZWQgcmVuZGVyIGxheWVycyB1c2luZyBHTC4KIGNsYXNzIExheWVyUmVuZGVy
ZXJDaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gY3Jl
YXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRyPFRpbGVQYWludElu
dGVyZmFjZT4gY29udGVudFBhaW50KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllclJlbmRl
cmVyQ2hyb21pdW0+IGNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBhaW50KTsKIAogICAgIH5MYXllclJl
bmRlcmVyQ2hyb21pdW0oKTsKIApAQCAtMTQ4LDcgKzE1Myw3IEBAIHByaXZhdGU6CiAgICAgdHlw
ZWRlZiBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IExheWVyTGlzdDsKICAgICB0eXBlZGVm
IEhhc2hNYXA8R3JhcGhpY3NDb250ZXh0M0QqLCBpbnQ+IENoaWxkQ29udGV4dE1hcDsKIAotICAg
IGV4cGxpY2l0IExheWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWludCk7CisgICAg
ZXhwbGljaXQgTGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+LCBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBjb250ZW50UGFpbnQpOwogCiAg
ICAgdm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsK
ICAgICB2b2lkIHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKCk7CkBAIC0xODgsMTQgKzE5MywxMiBA
QCBwcml2YXRlOgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcHJvamVjdGlvbk1hdHJpeDsK
IAogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX3Jvb3RMYXllcjsKLSAgICBPd25QdHI8VGls
ZVBhaW50SW50ZXJmYWNlPiBtX3Jvb3RMYXllckNvbnRlbnRQYWludDsKICAgICBPd25QdHI8TGF5
ZXJUaWxlckNocm9taXVtPiBtX3Jvb3RMYXllckNvbnRlbnRUaWxlcjsKIAogICAgIGJvb2wgbV9o
YXJkd2FyZUNvbXBvc2l0aW5nOwogCiAgICAgdW5zaWduZWQgbV9jdXJyZW50U2hhZGVyOwogICAg
IFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV9jdXJyZW50UmVuZGVyU3VyZmFjZTsKLQogICAgIHVu
c2lnbmVkIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZDsKICAgICBib29sIG1fY29tcG9zaXRlT2Zm
c2NyZWVuOwogCkBAIC0yMzMsNyArMjM2LDYgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwogICAgIENoaWxkQ29udGV4dE1hcCBtX2NoaWxkQ29u
dGV4dHM7Ci0KICAgICAvLyBJZiB0cnVlLCB0aGUgY2hpbGQgY29udGV4dHMgd2VyZSBjb3BpZWQg
dG8gdGhlIGNvbXBvc2l0b3IgdGV4dHVyZSB0YXJnZXRzCiAgICAgLy8gYW5kIHRoZSBjb21wb3Np
dG9yIHdpbGwgbmVlZCB0byB3YWl0IG9uIHRoZSBwcm9wZXIgbGF0Y2hlcyBiZWZvcmUgdXNpbmcK
ICAgICAvLyB0aGUgdGFyZ2V0IHRleHR1cmVzLiBJZiBmYWxzZSwgdGhlIGNvbXBvc2l0b3IgaXMg
cmV1c2luZyB0aGUgdGV4dHVyZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFn
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
OTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJMYXllclRleHR1cmVTdWJJbWFnZS5oIgorCisjaW5j
bHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0xheWVyVGV4dHVyZVN1YkltYWdlOjpMYXll
clRleHR1cmVTdWJJbWFnZShib29sIHVzZU1hcFRleFN1YkltYWdlKQorICAgIDogbV91c2VNYXBU
ZXhTdWJJbWFnZSh1c2VNYXBUZXhTdWJJbWFnZSkKK3sKK30KKworTGF5ZXJUZXh0dXJlU3ViSW1h
Z2U6On5MYXllclRleHR1cmVTdWJJbWFnZSgpCit7Cit9CisKK3ZvaWQgTGF5ZXJUZXh0dXJlU3Vi
SW1hZ2U6OnNldFN1YkltYWdlU2l6ZShjb25zdCBJbnRTaXplJiBzdWJJbWFnZVNpemUpCit7Cisg
ICAgaWYgKHN1YkltYWdlU2l6ZSA9PSBtX3N1YkltYWdlU2l6ZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9zdWJJbWFnZVNpemUgPSBzdWJJbWFnZVNpemU7CisgICAgaWYgKCFtX3VzZU1hcFRl
eFN1YkltYWdlKQorICAgICAgICBtX3N1YkltYWdlID0gYWRvcHRBcnJheVB0cihuZXcgdWludDhf
dFttX3N1YkltYWdlU2l6ZS53aWR0aCgpICogbV9zdWJJbWFnZVNpemUuaGVpZ2h0KCkgKiA0XSk7
Cit9CisKK3ZvaWQgTGF5ZXJUZXh0dXJlU3ViSW1hZ2U6OnVwbG9hZChjb25zdCB1aW50OF90KiBp
bWFnZSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RS
ZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0KQoreworICAgIC8vIE9mZnNldCBmcm9tIGltYWdlLXJlY3QgdG8gc291cmNlLXJl
Y3QuCisgICAgSW50UG9pbnQgb2Zmc2V0KHNvdXJjZVJlY3QueCgpIC0gaW1hZ2VSZWN0LngoKSwg
c291cmNlUmVjdC55KCkgLSBpbWFnZVJlY3QueSgpKTsKKworICAgIGlmIChtX3VzZU1hcFRleFN1
YkltYWdlKSB7CisgICAgICAgIC8vIFVwbG9hZCB0aWxlIGRhdGEgdmlhIGEgbWFwcGVkIHRyYW5z
ZmVyIGJ1ZmZlcgorICAgICAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0
YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
KTsKKyAgICAgICAgdWludDhfdCogcGl4ZWxEZXN0ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGV4
dGVuc2lvbnMtPm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgMCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCksIGRlc3RSZWN0LndpZHRoKCks
IGRlc3RSZWN0LmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIEV4dGVuc2lvbnMzRENocm9taXVtOjpXUklURV9PTkxZKSk7
CisgICAgICAgIEFTU0VSVChwaXhlbERlc3QpOworICAgICAgICBpZiAoaW1hZ2VSZWN0LndpZHRo
KCkgPT0gc291cmNlUmVjdC53aWR0aCgpICYmICFvZmZzZXQueCgpKQorICAgICAgICAgICAgbWVt
Y3B5KHBpeGVsRGVzdCwgJmltYWdlWzQgKiBvZmZzZXQueSgpICogaW1hZ2VSZWN0LndpZHRoKCld
LCBpbWFnZVJlY3Qud2lkdGgoKSAqIGRlc3RSZWN0LmhlaWdodCgpICogNCk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgLy8gU3RyaWRlcyBub3QgZXF1YWwsIHNvIGRvIGEgcm93LWJ5LXJv
dyBtZW1jcHkgZnJvbSB0aGUKKyAgICAgICAgICAgIC8vIHBhaW50IHJlc3VsdHMgaW50byB0aGUg
cGl4ZWxEZXN0CisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBkZXN0UmVjdC5o
ZWlnaHQoKTsgKytyb3cpCisgICAgICAgICAgICAgICAgbWVtY3B5KCZwaXhlbERlc3RbZGVzdFJl
Y3Qud2lkdGgoKSAqIDQgKiByb3ddLAorICAgICAgICAgICAgICAgICAgICAgICAmaW1hZ2VbNCAq
IChvZmZzZXQueCgpICsgKG9mZnNldC55KCkgKyByb3cpICogaW1hZ2VSZWN0LndpZHRoKCkpXSwK
KyAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJlY3Qud2lkdGgoKSAqIDQpOworICAgICAgICB9
CisgICAgICAgIGV4dGVuc2lvbnMtPnVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKHBpeGVsRGVz
dCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3QgdWludDhfdCogcGl4ZWxTb3VyY2U7Cisg
ICAgICAgIGlmIChpbWFnZVJlY3Qud2lkdGgoKSA9PSBzb3VyY2VSZWN0LndpZHRoKCkgJiYgIW9m
ZnNldC54KCkpCisgICAgICAgICAgICBwaXhlbFNvdXJjZSA9ICZpbWFnZVs0ICogb2Zmc2V0Lnko
KSAqIGltYWdlUmVjdC53aWR0aCgpXTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBT
dHJpZGVzIG5vdCBlcXVhbCwgc28gZG8gYSByb3ctYnktcm93IG1lbWNweSBmcm9tIHRoZQorICAg
ICAgICAgICAgLy8gcGFpbnQgcmVzdWx0cyBpbnRvIGEgdGVtcCBidWZmZXIgZm9yIHVwbG9hZGlu
Zy4KKyAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRlc3RSZWN0LmhlaWdodCgp
OyArK3JvdykKKyAgICAgICAgICAgICAgICBtZW1jcHkoJm1fc3ViSW1hZ2VbZGVzdFJlY3Qud2lk
dGgoKSAqIDQgKiByb3ddLAorICAgICAgICAgICAgICAgICAgICAgICAmaW1hZ2VbNCAqIChvZmZz
ZXQueCgpICsgKG9mZnNldC55KCkgKyByb3cpICogaW1hZ2VSZWN0LndpZHRoKCkpXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJlY3Qud2lkdGgoKSAqIDQpOworCisgICAgICAgICAgICBw
aXhlbFNvdXJjZSA9ICZtX3N1YkltYWdlWzBdOworICAgICAgICB9CisgICAgICAgIGNvbnRleHQt
PnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGRlc3RSZWN0
LngoKSwgZGVzdFJlY3QueSgpLCBkZXN0UmVjdC53aWR0aCgpLCBkZXN0UmVjdC5oZWlnaHQoKSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
LCBwaXhlbFNvdXJjZSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVT
dWJJbWFnZS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJl
U3ViSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2Uu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBMYXllclRl
eHR1cmVTdWJJbWFnZV9oCisjZGVmaW5lIExheWVyVGV4dHVyZVN1YkltYWdlX2gKKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNs
dWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CisKK2NsYXNzIExheWVyVGV4
dHVyZVN1YkltYWdlIHsKK3B1YmxpYzoKKyAgICBMYXllclRleHR1cmVTdWJJbWFnZShib29sIHVz
ZU1hcFN1YkZvclVwbG9hZCk7CisgICAgfkxheWVyVGV4dHVyZVN1YkltYWdlKCk7CisKKyAgICB2
b2lkIHNldFN1YkltYWdlU2l6ZShjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCB1cGxvYWQoY29u
c3QgdWludDhfdCogaW1hZ2UsIGNvbnN0IEludFJlY3QmIGltYWdlUmVjdCwKKyAgICAgICAgICAg
ICAgICBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwK
KyAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRCopOworCitwcml2YXRlOgorICAgIGJv
b2wgbV91c2VNYXBUZXhTdWJJbWFnZTsKKyAgICBJbnRTaXplIG1fc3ViSW1hZ2VTaXplOworICAg
IE93bkFycmF5UHRyPHVpbnQ4X3Q+IG1fc3ViSW1hZ2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2VuZGlmIC8v
IExheWVyVGV4dHVyZVN1YkltYWdlX2gKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJUZXh0dXJlVXBkYXRlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIExheWVyVGV4dHVyZVVwZGF0ZXJfaAor
I2RlZmluZSBMYXllclRleHR1cmVVcGRhdGVyX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQz
RDsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBJbnRTaXplOworY2xhc3MgTGF5ZXJUZXh0dXJlOwor
CitjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyIHsKK3B1YmxpYzoKKyAgICBMYXllclRleHR1cmVV
cGRhdGVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KSA6IG1fY29udGV4dChjb250ZXh0KSB7
IH0KKyAgICB2aXJ0dWFsIH5MYXllclRleHR1cmVVcGRhdGVyKCkgeyB9CisKKyAgICBlbnVtIE9y
aWVudGF0aW9uIHsKKyAgICAgICAgQm90dG9tVXBPcmllbnRhdGlvbiwKKyAgICAgICAgVG9wRG93
bk9yaWVudGF0aW9uCisgICAgfTsKKyAgICAvLyBSZXR1cm5zIHRoZSBvcmllbnRhdGlvbiBvZiB0
aGUgdGV4dHVyZSB1cGxvYWRlZCBieSB0aGlzIGludGVyZmFjZS4KKyAgICB2aXJ0dWFsIE9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRh
dGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBp
bnQgYm9yZGVyVGV4ZWxzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0
KExheWVyVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3Qm
IGRlc3RSZWN0KSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQorCitwcml2YXRlOgorICAgIC8vIFRo
ZSBncmFwaGljcyBjb250ZXh0IHdpdGggd2hpY2ggdG8gdXBkYXRlIHRleHR1cmVzLgorICAgIC8v
IEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgdGV4dHVyZXMgYXJlIGVpdGhlciBjcmVhdGVkIGluIHRo
ZSBzYW1lIGNvbnRleHQKKyAgICAvLyBvciBzaGFyZWQgd2l0aCB0aGlzIGNvbnRleHQuCisgICAg
R3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjZW5kaWYgLy8gTGF5
ZXJUZXh0dXJlVXBkYXRlcl9oCisKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJM
YXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkxheWVyVGV4
dHVyZS5oIgorI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzOjpMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVt
PiBwYWludGVyKQorICAgIDogTGF5ZXJUZXh0dXJlVXBkYXRlcihjb250ZXh0KQorICAgICwgbV9w
YWludGVyKHBhaW50ZXIpCit7Cit9CisKK3ZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhczo6
cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0KQoreworICAgIGNvbnRleHQudHJhbnNsYXRlKC1jb250ZW50UmVjdC54KCksIC1j
b250ZW50UmVjdC55KCkpOworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyVGV4dHVy
ZVVwZGF0ZXJDYW52YXM6OnBhaW50IiwgdGhpcywgMCk7CisgICAgICAgIG1fcGFpbnRlci0+cGFp
bnQoY29udGV4dCwgY29udGVudFJlY3QpOworICAgIH0KKyAgICBtX2NvbnRlbnRSZWN0ID0gY29u
dGVudFJlY3Q7Cit9CisKK0xheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OkxheWVyVGV4dHVyZVVw
ZGF0ZXJCaXRtYXAoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFBhc3NPd25QdHI8TGF5ZXJQ
YWludGVyQ2hyb21pdW0+IHBhaW50ZXIsIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCisgICAgOiBM
YXllclRleHR1cmVVcGRhdGVyQ2FudmFzKGNvbnRleHQsIHBhaW50ZXIpCisgICAgLCBtX3RleFN1
YkltYWdlKHVzZU1hcFRleFN1YkltYWdlKQoreworfQorCit2b2lkIExheWVyVGV4dHVyZVVwZGF0
ZXJCaXRtYXA6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29u
c3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpCit7CisgICAgbV90ZXhTdWJJ
bWFnZS5zZXRTdWJJbWFnZVNpemUodGlsZVNpemUpOworCisgICAgbV9jYW52YXMucmVzaXplKGNv
bnRlbnRSZWN0LnNpemUoKSk7CisgICAgLy8gQXNzdW1wdGlvbjogaWYgYSB0aWxlciBpcyB1c2lu
ZyBib3JkZXIgdGV4ZWxzLCB0aGVuIGl0IGlzIGJlY2F1c2UgdGhlCisgICAgLy8gbGF5ZXIgaXMg
bGlrZWx5IHRvIGJlIGZpbHRlcmVkIG9yIHRyYW5zZm9ybWVkLiBCZWNhdXNlIG9mIGl0IG1pZ2h0
IGJlCisgICAgLy8gdHJhbnNmb3JtZWQsIGRyYXcgdGhlIHRleHQgaW4gZ3JheXNjYWxlIGluc3Rl
YWQgb2Ygc3VicGl4ZWwgYW50aWFsaWFzaW5nLgorICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVy
OjpUZXh0T3B0aW9uIHRleHRPcHRpb24gPQorICAgICAgICBib3JkZXJUZXhlbHMgPyBQbGF0Zm9y
bUNhbnZhczo6UGFpbnRlcjo6R3JheXNjYWxlVGV4dCA6IFBsYXRmb3JtQ2FudmFzOjpQYWludGVy
OjpTdWJwaXhlbFRleHQ7CisgICAgUGxhdGZvcm1DYW52YXM6OlBhaW50ZXIgY2FudmFzUGFpbnRl
cigmbV9jYW52YXMsIHRleHRPcHRpb24pOworICAgIHBhaW50Q29udGVudHMoKmNhbnZhc1BhaW50
ZXIuY29udGV4dCgpLCBjb250ZW50UmVjdCk7Cit9CisKK3ZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRl
ckJpdG1hcDo6dXBkYXRlVGV4dHVyZVJlY3QoTGF5ZXJUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICBQbGF0
Zm9ybUNhbnZhczo6QXV0b0xvY2tlciBsb2NrZXIoJm1fY2FudmFzKTsKKworICAgIHRleHR1cmUt
PmJpbmRUZXh0dXJlKCk7CisgICAgbV90ZXhTdWJJbWFnZS51cGxvYWQobG9ja2VyLnBpeGVscygp
LCBjb250ZW50UmVjdCgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCwgY29udGV4dCgpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5jcHAKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVVwZGF0ZXJDYW52YXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBMYXllclRleHR1cmVVcGRh
dGVyQ2FudmFzX2gKKyNkZWZpbmUgTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhc19oCisKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJMYXllclRleHR1cmVTdWJJ
bWFnZS5oIgorI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybUNhbnZhcy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBMYXllclBhaW50ZXJD
aHJvbWl1bTsKKworLy8gQSBMYXllclRleHR1cmVVcGRhdGVyIHdpdGggYW4gaW50ZXJuYWwgY2Fu
dmFzLgorY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyA6IHB1YmxpYyBMYXllclRleHR1
cmVVcGRhdGVyIHsKK3B1YmxpYzoKKyAgICBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzKEdyYXBo
aWNzQ29udGV4dDNEKiwgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOworICAgIHZp
cnR1YWwgfkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMoKSB7IH0KKworcHJvdGVjdGVkOgorICAg
IHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBjb250
ZW50UmVjdCk7CisgICAgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QoKSBjb25zdCB7IHJldHVy
biBtX2NvbnRlbnRSZWN0OyB9CisKK3ByaXZhdGU6CisgICAgSW50UmVjdCBtX2NvbnRlbnRSZWN0
OworICAgIE93blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gbV9wYWludGVyOworfTsKKworLy8g
QSBMYXllclRleHR1cmVVcGRhdGVyIHdpdGggYW4gaW50ZXJuYWwgYml0bWFwIGNhbnZhcy4KK2Ns
YXNzIExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRl
ckNhbnZhcyB7CitwdWJsaWM6CisgICAgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcChHcmFwaGlj
c0NvbnRleHQzRCosIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+LCBib29sIHVzZU1h
cFRleFN1YkltYWdlKTsKKyAgICB2aXJ0dWFsIH5MYXllclRleHR1cmVVcGRhdGVyQml0bWFwKCkg
eyB9CisKKyAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6Qm90dG9tVXBPcmllbnRhdGlvbjsgfQorICAgIHZpcnR1YWwgdm9p
ZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNp
emUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
VGV4dHVyZVJlY3QoTGF5ZXJUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UmVjdCYgZGVzdFJlY3QpOworCitwcml2YXRlOgorICAgIFBsYXRmb3JtQ2FudmFzIG1f
Y2FudmFzOworICAgIExheWVyVGV4dHVyZVN1YkltYWdlIG1fdGV4U3ViSW1hZ2U7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorI2VuZGlmIC8vIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXNfaAorCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyQ2FudmFzLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQog
ICArIExGCgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJUaWxlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA4
NjQzNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGlsZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDM4ICszNSwzMCBAQAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCisjaW5jbHVkZSAiTGF5ZXJUZXh0dXJl
VXBkYXRlci5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKIAotI2luY2x1ZGUgPHd0Zi9QYXNz
T3duQXJyYXlQdHIuaD4KLQogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1QYXNzT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gTGF5ZXJUaWxlckNocm9taXVt
OjpjcmVhdGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRT
aXplJiB0aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRpb24gYm9yZGVyKQorUGFzc093blB0cjxMYXll
clRpbGVyQ2hyb21pdW0+IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKExheWVyUmVuZGVyZXJD
aHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyPiB0
ZXh0dXJlVXBkYXRlciwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJvcmRlclRleGVsT3B0aW9u
IGJvcmRlcikKIHsKICAgICBpZiAoIWxheWVyUmVuZGVyZXIgfHwgdGlsZVNpemUuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5
ZXJUaWxlckNocm9taXVtKGxheWVyUmVuZGVyZXIsIHRpbGVTaXplLCBib3JkZXIpKTsKKyAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IExheWVyVGlsZXJDaHJvbWl1bShsYXllclJlbmRlcmVyLCB0ZXh0
dXJlVXBkYXRlciwgdGlsZVNpemUsIGJvcmRlcikpOwogfQogCi1MYXllclRpbGVyQ2hyb21pdW06
OkxheWVyVGlsZXJDaHJvbWl1bShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIs
IGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbiBib3JkZXIpCitMYXll
clRpbGVyQ2hyb21pdW06OkxheWVyVGlsZXJDaHJvbWl1bShMYXllclJlbmRlcmVyQ2hyb21pdW0q
IGxheWVyUmVuZGVyZXIsIFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gdGV4dHVyZVVw
ZGF0ZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbiBib3JkZXIp
CiAgICAgOiBtX3NraXBzRHJhdyhmYWxzZSkKICAgICAsIG1fdGlsaW5nRGF0YShtYXgodGlsZVNp
emUud2lkdGgoKSwgdGlsZVNpemUuaGVpZ2h0KCkpLCAwLCAwLCBib3JkZXIgPT0gSGFzQm9yZGVy
VGV4ZWxzKQotICAgICwgbV91c2VNYXBTdWJGb3JVcGxvYWRzKGxheWVyUmVuZGVyZXItPmNvbnRl
eHRTdXBwb3J0c01hcFN1YigpKQorICAgICwgbV90ZXh0dXJlVXBkYXRlcih0ZXh0dXJlVXBkYXRl
cikKICAgICAsIG1fbGF5ZXJSZW5kZXJlcihsYXllclJlbmRlcmVyKQogewogICAgIHNldFRpbGVT
aXplKHRpbGVTaXplKTsKIH0KIAotdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnNldExheWVyUmVu
ZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQotewotICAgIGlmICht
X2xheWVyUmVuZGVyZXIgIT0gbGF5ZXJSZW5kZXJlcikKLSAgICAgICAgcmVzZXQoKTsKLSAgICBt
X2xheWVyUmVuZGVyZXIgPSBsYXllclJlbmRlcmVyOwotfQotCiBMYXllclRpbGVyQ2hyb21pdW06
On5MYXllclRpbGVyQ2hyb21pdW0oKQogewogICAgIHJlc2V0KCk7CkBAIC04Niw4ICs3OCw2IEBA
IHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpzZXRUaWxlU2l6ZShjb24KICAgICByZXNldCgpOwog
CiAgICAgbV90aWxlU2l6ZSA9IHNpemU7Ci0gICAgaWYgKCFtX3VzZU1hcFN1YkZvclVwbG9hZHMp
Ci0gICAgICAgIG1fdGlsZVBpeGVscyA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQ4X3RbbV90aWxl
U2l6ZS53aWR0aCgpICogbV90aWxlU2l6ZS5oZWlnaHQoKSAqIDRdKTsKICAgICBtX3RpbGluZ0Rh
dGEuc2V0TWF4VGV4dHVyZVNpemUobWF4KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwog
fQogCkBAIC0yMzAsNyArMjIwLDcgQEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmludmFsaWRh
dGVFbnRpcgogICAgIG1fdGlsaW5nRGF0YS5zZXRUb3RhbFNpemUoMCwgMCk7CiB9CiAKLXZvaWQg
TGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGUoVGlsZVBhaW50SW50ZXJmYWNlJiBwYWludGVyLCBj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3ZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjp1cGRh
dGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiB7CiAgICAgaWYgKG1fc2tpcHNEcmF3KQog
ICAgICAgICByZXR1cm47CkBAIC0yNjcsMzAgKzI1NywxMCBAQCB2b2lkIExheWVyVGlsZXJDaHJv
bWl1bTo6dXBkYXRlKFRpbGVQYWluCiAgICAgaWYgKGRpcnR5TGF5ZXJSZWN0LmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jYW52YXMucmVzaXplKG1fcGFpbnRSZWN0LnNpemUo
KSk7Ci0KLSAgICAvLyBBc3N1bXB0aW9uOiBpZiBhIHRpbGVyIGlzIHVzaW5nIGJvcmRlciB0ZXhl
bHMsIHRoZW4gaXQgaXMgYmVjYXVzZSB0aGUKLSAgICAvLyBsYXllciBpcyBsaWtlbHkgdG8gYmUg
ZmlsdGVyZWQgb3IgdHJhbnNmb3JtZWQuIEJlY2F1c2Ugb2YgaXQgbWlnaHQgYmUKLSAgICAvLyB0
cmFuc2Zvcm1lZCwgZHJhdyB0aGUgdGV4dCBpbiBncmF5c2NhbGUgaW5zdGVhZCBvZiBzdWJwaXhl
bCBhbnRpYWxpYXNpbmcuCi0gICAgUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OlRleHRPcHRpb24g
dGV4dE9wdGlvbiA9IG1fdGlsaW5nRGF0YS5ib3JkZXJUZXhlbHMoKSA/IFBsYXRmb3JtQ2FudmFz
OjpQYWludGVyOjpHcmF5c2NhbGVUZXh0IDogUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OlN1YnBp
eGVsVGV4dDsKLSAgICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlciBjYW52YXNQYWludGVyKCZtX2Nh
bnZhcywgdGV4dE9wdGlvbik7Ci0gICAgY2FudmFzUGFpbnRlci5jb250ZXh0KCktPnRyYW5zbGF0
ZSgtbV9wYWludFJlY3QueCgpLCAtbV9wYWludFJlY3QueSgpKTsKLSAgICB7Ci0gICAgICAgIFRS
QUNFX0VWRU5UKCJMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZTo6cGFpbnQiLCB0aGlzLCAwKTsK
LSAgICAgICAgcGFpbnRlci5wYWludCgqY2FudmFzUGFpbnRlci5jb250ZXh0KCksIG1fcGFpbnRS
ZWN0KTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjp1cGxvYWRDYW52YXMo
KQotewotICAgIFBsYXRmb3JtQ2FudmFzOjpBdXRvTG9ja2VyIGxvY2tlcigmbV9jYW52YXMpOwot
ICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyVGlsZXJDaHJvbWl1bTo6dXBkYXRlRnJv
bVBpeGVscyIsIHRoaXMsIDApOwotICAgICAgICB1cGRhdGVGcm9tUGl4ZWxzKG1fdXBkYXRlUmVj
dCwgbV9wYWludFJlY3QsIGxvY2tlci5waXhlbHMoKSk7Ci0gICAgfQorICAgIG1fdGV4dHVyZVVw
ZGF0ZXItPnByZXBhcmVUb1VwZGF0ZShtX3BhaW50UmVjdCwgbV90aWxlU2l6ZSwgbV90aWxpbmdE
YXRhLmJvcmRlclRleGVscygpKTsKIH0KIAotdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0
ZUZyb21QaXhlbHMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFJlY3QmIHBh
aW50UmVjdCwgY29uc3QgdWludDhfdCogcGFpbnRQaXhlbHMpCit2b2lkIExheWVyVGlsZXJDaHJv
bWl1bTo6dXBsb2FkKCkKIHsKICAgICAvLyBQYWludGluZyBjb3VsZCBjYXVzZSBjb21wb3NpdGlu
ZyB0byBnZXQgdHVybmVkIG9mZiwgd2hpY2ggbWF5IGNhdXNlIHRoZSB0aWxlciB0byBiZWNvbWUg
aW52YWxpZGF0ZWQgbWlkLXVwZGF0ZS4KICAgICBpZiAoIW1fdGlsaW5nRGF0YS50b3RhbFNpemVY
KCkgfHwgIW1fdGlsaW5nRGF0YS50b3RhbFNpemVZKCkpCkBAIC0yOTksNyArMjY5LDcgQEAgdm9p
ZCBMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZUZyb21QaXhlbAogICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKIAogICAgIGludCBsZWZ0LCB0
b3AsIHJpZ2h0LCBib3R0b207Ci0gICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRS
ZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGNvbnRlbnRSZWN0VG9UaWxlSW5k
aWNlcyhtX3VwZGF0ZVJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAgZm9yIChp
bnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewogICAgICAgICBmb3IgKGludCBpID0gbGVm
dDsgaSA8PSByaWdodDsgKytpKSB7CiAgICAgICAgICAgICBUaWxlKiB0aWxlID0gdGlsZUF0KGks
IGopOwpAQCAtMzE0LDcgKzI4NCw3IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGVG
cm9tUGl4ZWwKICAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KGxheWVyUmVjdFRvQ29u
dGVudFJlY3QodGlsZS0+bV9kaXJ0eUxheWVyUmVjdCkpOwogICAgICAgICAgICAgLy8gUGFpbnQg
cmVjdCBub3QgZ3VhcmFudGVlZCB0byBsaW5lIHVwIG9uIHRpbGUgYm91bmRhcmllcywgc28KICAg
ICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHNvdXJjZVJlY3QgZG9lc24ndCBleHRlbmQgb3V0
c2lkZSBvZiBpdC4KLSAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KHBhaW50UmVjdCk7
CisgICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChtX3BhaW50UmVjdCk7CiAgICAgICAg
ICAgICBpZiAoc291cmNlUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAKQEAgLTMyOCw2MyArMjk4LDIwIEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGVG
cm9tUGl4ZWwKIAogICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRpbGUtc3BhY2UgcmVjdGFuZ2xl
IHRvIHVwbG9hZCBpbnRvLgogICAgICAgICAgICAgSW50UmVjdCBkZXN0UmVjdChJbnRQb2ludChz
b3VyY2VSZWN0LngoKSAtIGFuY2hvci54KCksIHNvdXJjZVJlY3QueSgpIC0gYW5jaG9yLnkoKSks
IHNvdXJjZVJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIGlmIChkZXN0UmVjdC54KCkgPCAwKQot
ICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBpZiAoZGVzdFJlY3QueSgpIDwg
MCkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgQVNTRVJUKChkZXN0UmVj
dC54KCkgPj0gMCkgJiYgKGRlc3RSZWN0LnkoKSA+PSAwKSk7CiAKICAgICAgICAgICAgIC8vIE9m
ZnNldCBmcm9tIHBhaW50IHJlY3RhbmdsZSB0byB0aGlzIHRpbGUncyBkaXJ0eSByZWN0YW5nbGUu
Ci0gICAgICAgICAgICBJbnRQb2ludCBwYWludE9mZnNldChzb3VyY2VSZWN0LngoKSAtIHBhaW50
UmVjdC54KCksIHNvdXJjZVJlY3QueSgpIC0gcGFpbnRSZWN0LnkoKSk7Ci0gICAgICAgICAgICBp
ZiAocGFpbnRPZmZzZXQueCgpIDwgMCkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAg
ICAgICAgaWYgKHBhaW50T2Zmc2V0LnkoKSA8IDApCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsK
LSAgICAgICAgICAgIGlmIChwYWludE9mZnNldC54KCkgKyBkZXN0UmVjdC53aWR0aCgpID4gcGFp
bnRSZWN0LndpZHRoKCkpCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGlm
IChwYWludE9mZnNldC55KCkgKyBkZXN0UmVjdC5oZWlnaHQoKSA+IHBhaW50UmVjdC5oZWlnaHQo
KSkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgSW50UG9pbnQgcGFpbnRP
ZmZzZXQoc291cmNlUmVjdC54KCkgLSBtX3BhaW50UmVjdC54KCksIHNvdXJjZVJlY3QueSgpIC0g
bV9wYWludFJlY3QueSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCgocGFpbnRPZmZzZXQueCgpID49
IDApICYmIChwYWludE9mZnNldC55KCkgPj0gMCkpOworICAgICAgICAgICAgQVNTRVJUKHBhaW50
T2Zmc2V0LngoKSArIGRlc3RSZWN0LndpZHRoKCkgPD0gbV9wYWludFJlY3Qud2lkdGgoKSk7Cisg
ICAgICAgICAgICBBU1NFUlQocGFpbnRPZmZzZXQueSgpICsgZGVzdFJlY3QuaGVpZ2h0KCkgPD0g
bV9wYWludFJlY3QuaGVpZ2h0KCkpOwogCisgICAgICAgICAgICB0aWxlLT50ZXh0dXJlKCktPmJp
bmRUZXh0dXJlKCk7CiAgICAgICAgICAgICBjb25zdCBHQzNEaW50IGZpbHRlciA9IG1fdGlsaW5n
RGF0YS5ib3JkZXJUZXhlbHMoKSA/IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIgOiBHcmFwaGlj
c0NvbnRleHQzRDo6TkVBUkVTVDsKICAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50
ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBmaWx0ZXIpKTsKICAgICAgICAgICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0ZXIpKTsKIAotICAg
ICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5iaW5kVGV4dHVyZSgpOwotCi0gICAgICAgICAgICBp
ZiAobV91c2VNYXBTdWJGb3JVcGxvYWRzKSB7Ci0gICAgICAgICAgICAgICAgLy8gVXBsb2FkIHRp
bGUgZGF0YSB2aWEgYSBtYXBwZWQgdHJhbnNmZXIgYnVmZmVyCi0gICAgICAgICAgICAgICAgRXh0
ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RD
aHJvbWl1bSo+KGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKSk7Ci0gICAgICAgICAgICAgICAgdWlu
dDhfdCogcGl4ZWxEZXN0ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGV4dGVuc2lvbnMtPm1hcFRl
eFN1YkltYWdlMkRDSFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgZGVz
dFJlY3QueCgpLCBkZXN0UmVjdC55KCksIGRlc3RSZWN0LndpZHRoKCksIGRlc3RSZWN0LmhlaWdo
dCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUsIEV4dGVuc2lvbnMzRENocm9taXVtOjpXUklURV9PTkxZKSk7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKHBpeGVsRGVzdCk7Ci0gICAgICAgICAgICAgICAgaWYgKHBhaW50UmVjdC53aWR0
aCgpID09IHNvdXJjZVJlY3Qud2lkdGgoKSAmJiAhcGFpbnRPZmZzZXQueCgpKQotICAgICAgICAg
ICAgICAgICAgICBtZW1jcHkocGl4ZWxEZXN0LCAmcGFpbnRQaXhlbHNbNCAqIHBhaW50T2Zmc2V0
LnkoKSAqIHBhaW50UmVjdC53aWR0aCgpXSwgcGFpbnRSZWN0LndpZHRoKCkgKiBkZXN0UmVjdC5o
ZWlnaHQoKSAqIDQpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAvLyBTdHJpZGVzIG5vdCBlcXVhbCwgc28gZG8gYSByb3ctYnktcm93IG1lbWNweSBmcm9tIHRo
ZQotICAgICAgICAgICAgICAgICAgICAvLyBwYWludCByZXN1bHRzIGludG8gdGhlIHBpeGVsRGVz
dAotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBkZXN0UmVjdC5o
ZWlnaHQoKTsgKytyb3cpCi0gICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJnBpeGVsRGVz
dFtkZXN0UmVjdC53aWR0aCgpICogNCAqIHJvd10sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJnBhaW50UGl4ZWxzWzQgKiAocGFpbnRPZmZzZXQueCgpICsgKHBhaW50T2Zmc2V0Lnko
KSArIHJvdykgKiBwYWludFJlY3Qud2lkdGgoKSldLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSZWN0LndpZHRoKCkgKiA0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgZXh0ZW5zaW9ucy0+dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0ocGl4ZWxEZXN0
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCog
cGl4ZWxTb3VyY2U7Ci0gICAgICAgICAgICAgICAgaWYgKHBhaW50UmVjdC53aWR0aCgpID09IHNv
dXJjZVJlY3Qud2lkdGgoKSAmJiAhcGFpbnRPZmZzZXQueCgpKQotICAgICAgICAgICAgICAgICAg
ICBwaXhlbFNvdXJjZSA9ICZwYWludFBpeGVsc1s0ICogcGFpbnRPZmZzZXQueSgpICogcGFpbnRS
ZWN0LndpZHRoKCldOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAvLyBTdHJpZGVzIG5vdCBlcXVhbCwgc28gZG8gYSByb3ctYnktcm93IG1lbWNweSBmcm9tIHRo
ZQotICAgICAgICAgICAgICAgICAgICAvLyBwYWludCByZXN1bHRzIGludG8gYSB0ZW1wIGJ1ZmZl
ciBmb3IgdXBsb2FkaW5nLgotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyBy
b3cgPCBkZXN0UmVjdC5oZWlnaHQoKTsgKytyb3cpCi0gICAgICAgICAgICAgICAgICAgICAgICBt
ZW1jcHkoJm1fdGlsZVBpeGVsc1tkZXN0UmVjdC53aWR0aCgpICogNCAqIHJvd10sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJnBhaW50UGl4ZWxzWzQgKiAocGFpbnRPZmZzZXQueCgp
ICsgKHBhaW50T2Zmc2V0LnkoKSArIHJvdykgKiBwYWludFJlY3Qud2lkdGgoKSldLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0LndpZHRoKCkgKiA0KTsKLQotICAgICAg
ICAgICAgICAgICAgICBwaXhlbFNvdXJjZSA9ICZtX3RpbGVQaXhlbHNbMF07Ci0gICAgICAgICAg
ICAgICAgfQotCi0KLSAgICAgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4U3Vi
SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgZGVzdFJlY3QueCgpLCBk
ZXN0UmVjdC55KCksIGRlc3RSZWN0LndpZHRoKCksIGRlc3RSZWN0LmhlaWdodCgpLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHBpeGVs
U291cmNlKSk7Ci0gICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXIt
PnVwZGF0ZVRleHR1cmVSZWN0KHRpbGUtPnRleHR1cmUoKSwgc291cmNlUmVjdCwgZGVzdFJlY3Qp
OwogICAgICAgICAgICAgdGlsZS0+Y2xlYXJEaXJ0eSgpOwogICAgICAgICB9CiAgICAgfQpAQCAt
NDMwLDcgKzM1NywxMiBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6ZHJhdyhjb25zdCBJbnRS
CiAgICAgICAgICAgICBmbG9hdCB0ZXhUcmFuc2xhdGVZID0gdGV4T2Zmc2V0LnkoKSAvIHRpbGVI
ZWlnaHQ7CiAgICAgICAgICAgICBmbG9hdCB0ZXhTY2FsZVggPSB0aWxlUmVjdC53aWR0aCgpIC8g
dGlsZVdpZHRoOwogICAgICAgICAgICAgZmxvYXQgdGV4U2NhbGVZID0gdGlsZVJlY3QuaGVpZ2h0
KCkgLyB0aWxlSGVpZ2h0OwotCisgICAgICAgICAgICAvLyBPcGVuR0wgY29vcmRpbmF0ZSBzeXN0
ZW0gaXMgYm90dG9tLXVwLgorICAgICAgICAgICAgLy8gSWYgdGlsZSB0ZXh0dXJlIGlzIHRvcC1k
b3duLCB3ZSBuZWVkIHRvIGZsaXAgdGhlIHRleHR1cmUgY29vcmRpbmF0ZXMuCisgICAgICAgICAg
ICBpZiAobV90ZXh0dXJlVXBkYXRlci0+b3JpZW50YXRpb24oKSA9PSBMYXllclRleHR1cmVVcGRh
dGVyOjpUb3BEb3duT3JpZW50YXRpb24pIHsKKyAgICAgICAgICAgICAgICB0ZXhUcmFuc2xhdGVZ
ICs9IDEuMDsKKyAgICAgICAgICAgICAgICB0ZXhTY2FsZVkgKj0gLTEuMDsKKyAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigp
LT5wcm9qZWN0aW9uTWF0cml4KCksIHRpbGVNYXRyaXgsIHRpbGVSZWN0LndpZHRoKCksIHRpbGVS
ZWN0LmhlaWdodCgpLCBvcGFjaXR5LCB0ZXhUcmFuc2xhdGVYLCB0ZXhUcmFuc2xhdGVZLCB0ZXhT
Y2FsZVgsIHRleFNjYWxlWSwgcHJvZ3JhbSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclRpbGVyQ2hyb21pdW0uaAkocmV2aXNpb24gODY0MzYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsMjggKzMxLDIyIEBACiAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgi
CiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1DYW52YXMuaCIK
ICNpbmNsdWRlICJUaWxpbmdEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KLSNp
bmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3Mg
TGF5ZXJSZW5kZXJlckNocm9taXVtOwotCi1jbGFzcyBUaWxlUGFpbnRJbnRlcmZhY2UgewotcHVi
bGljOgotICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSA9IDA7Ci19OworY2xhc3MgTGF5ZXJUZXh0dXJlVXBk
YXRlcjsKIAogY2xhc3MgTGF5ZXJUaWxlckNocm9taXVtIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShMYXllclRpbGVyQ2hyb21pdW0pOwogcHVibGljOgogICAgIGVudW0gQm9yZGVyVGV4ZWxP
cHRpb24geyBIYXNCb3JkZXJUZXhlbHMsIE5vQm9yZGVyVGV4ZWxzIH07CiAKLSAgICBzdGF0aWMg
UGFzc093blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IGNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21p
dW0qLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRpb24pOworICAgIHN0
YXRpYyBQYXNzT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gY3JlYXRlKExheWVyUmVuZGVyZXJD
aHJvbWl1bSosIFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4sIGNvbnN0IEludFNpemUm
IHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbik7CiAKICAgICB+TGF5ZXJUaWxlckNocm9taXVt
KCk7CiAKQEAgLTYwLDE2ICs1NCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnZhbGlkYXRlUmVj
dChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CiAgICAgdm9pZCBpbnZhbGlkYXRlRW50aXJl
TGF5ZXIoKTsKIAotICAgIC8vIFBhaW50IGFsbCBpbnZhbGlkYXRpb25zIGFuZCBtaXNzaW5nIHRp
bGVzIG5lZWRlZCB0byBkcmF3IHRoZSBjb250ZW50UmVjdAotICAgIC8vIGludG8gdGhlIGludGVy
bmFsIGNhbnZhcy4KLSAgICB2b2lkIHVwZGF0ZShUaWxlUGFpbnRJbnRlcmZhY2UmIHBhaW50ZXIs
IGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKLQorICAgIC8vIFBhaW50IGFsbCBpbnZhbGlk
YXRpb25zIGFuZCBtaXNzaW5nIHRpbGVzIG5lZWRlZCB0byBkcmF3IHRoZSBjb250ZW50UmVjdC4K
KyAgICB2b2lkIHVwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CiAgICAgLy8gUmVz
ZXJ2ZSBhbmQgdXBsb2FkIHRpbGUgdGV4dHVyZXMgZnJvbSB0aGUgaW50ZXJuYWwgY2FudmFzLgot
ICAgIHZvaWQgdXBsb2FkQ2FudmFzKCk7Ci0KLSAgICAvLyBSZXNlcnZlIGFuZCB1cGxvYWQgdGls
ZSB0ZXh0dXJlcyBmcm9tIGFuIGV4dGVybmFsbHkgcGFpbnRlZCBidWZmZXIuCi0gICAgdm9pZCB1
cGRhdGVGcm9tUGl4ZWxzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRSZWN0
JiBwYWludFJlY3QsIGNvbnN0IHVpbnQ4X3QqIHBpeGVscyk7Ci0KKyAgICB2b2lkIHVwbG9hZCgp
OwogICAgIC8vIERyYXcgYWxsIHRpbGVzIHRoYXQgaW50ZXJzZWN0IHdpdGggdGhlIGNvbnRlbnQg
cmVjdC4KICAgICB2b2lkIGRyYXcoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7CiAKQEAgLTc3LDcgKzY1LDYgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0TGF5ZXJQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgcG9zaXRp
b24pOwogICAgIC8vIENoYW5nZSB0aGUgdGlsZSBzaXplLiAgVGhpcyBtYXkgaW52YWxpZGF0ZSBh
bGwgdGhlIGV4aXN0aW5nIHRpbGVzLgogICAgIHZvaWQgc2V0VGlsZVNpemUoY29uc3QgSW50U2l6
ZSYgc2l6ZSk7Ci0gICAgdm9pZCBzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1
bSopOwogCiAgICAgYm9vbCBza2lwc0RyYXcoKSBjb25zdCB7IHJldHVybiBtX3NraXBzRHJhdzsg
fQogCkBAIC04NywxMiArNzQsMTIgQEAgcHVibGljOgogICAgIExheWVyVGV4dHVyZSogZ2V0U2lu
Z2xlVGV4dHVyZSgpOwogCiBwcml2YXRlOgotICAgIExheWVyVGlsZXJDaHJvbWl1bShMYXllclJl
bmRlcmVyQ2hyb21pdW0qLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRp
b24pOworICAgIExheWVyVGlsZXJDaHJvbWl1bShMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBQYXNz
T3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQm9y
ZGVyVGV4ZWxPcHRpb24pOwogCiAgICAgY2xhc3MgVGlsZSA6IHB1YmxpYyBSZWZDb3VudGVkPFRp
bGU+IHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGlsZSk7CiAgICAgcHVibGljOgot
ICAgICAgICBleHBsaWNpdCBUaWxlKFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlPiB0ZXgpIDogbV90
ZXgodGV4KSwgbV9pKC0xKSwgbV9qKC0xKSB7fQorICAgICAgICBleHBsaWNpdCBUaWxlKFBhc3NP
d25QdHI8TGF5ZXJUZXh0dXJlPiB0ZXgpIDogbV90ZXgodGV4KSwgbV9pKC0xKSwgbV9qKC0xKSB7
IH0KIAogICAgICAgICBMYXllclRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleC5nZXQo
KTsgfQogCkBAIC0xNTcsMTkgKzE0NCwxMyBAQCBwcml2YXRlOgogICAgIC8vIFRpZ2h0bHkgcGFj
a2VkIHNldCBvZiB1bnVzZWQgdGlsZXMuCiAgICAgVmVjdG9yPFJlZlB0cjxUaWxlPiA+IG1fdW51
c2VkVGlsZXM7CiAKLSAgICAvLyBTdGF0ZSBoZWxkIGJldHdlZW4gdXBkYXRlIGFuZCB1cGxvYWRD
YW52YXMuCisgICAgLy8gU3RhdGUgaGVsZCBiZXR3ZWVuIHVwZGF0ZSBhbmQgdXBsb2FkLgogICAg
IEludFJlY3QgbV9wYWludFJlY3Q7CiAgICAgSW50UmVjdCBtX3VwZGF0ZVJlY3Q7Ci0gICAgUGxh
dGZvcm1DYW52YXMgbV9jYW52YXM7Ci0KLSAgICAvLyBDYWNoZSBhIHRpbGUtc2l6ZWQgcGl4ZWwg
YnVmZmVyIHRvIGRyYXcgaW50by4KLSAgICBPd25BcnJheVB0cjx1aW50OF90PiBtX3RpbGVQaXhl
bHM7CiAKICAgICBUaWxpbmdEYXRhIG1fdGlsaW5nRGF0YTsKIAotICAgIC8vIFdoZXRoZXIgdGhl
IHRpbGVyIHdpbGwgdXNlIEdMX0NIUk9NSVVNX21hcF9zdWIgZm9yIHRleHR1cmUgdXBsb2Fkcy4K
LSAgICBib29sIG1fdXNlTWFwU3ViRm9yVXBsb2FkczsKLQorICAgIE93blB0cjxMYXllclRleHR1
cmVVcGRhdGVyPiBtX3RleHR1cmVVcGRhdGVyOwogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSog
bV9sYXllclJlbmRlcmVyOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxh
eS5jcHAJKHJldmlzaW9uIDg2NDM2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1DYW52YXMuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSAiVGV4dFN0
cmVhbS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCkBAIC0xMTQsNyArMTE1LDcgQEAg
dm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KCkKICAgICAgICAgICAgIG1lbWNweShwaXhlbERl
c3QsIGxvY2tlci5waXhlbHMoKSwgaHVkU2l6ZS53aWR0aCgpICogaHVkU2l6ZS5oZWlnaHQoKSAq
IDQpOwogICAgICAgICAgICAgZXh0ZW5zaW9ucy0+dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0o
cGl4ZWxEZXN0KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBHTEMoY29udGV4dC5nZXQo
KSwgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIGNhbnZhcy5zaXplKCkud2lkdGgoKSwgY2FudmFzLnNp
emUoKS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFLCBsb2NrZXIucGl4ZWxzKCkpKTsKKyAgICAgICAgICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgY2FudmFzLnNpemUoKS53aWR0aCgpLCBjYW52
YXMuc2l6ZSgpLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGxvY2tlci5waXhlbHMoKSkpOwogICAgIH0KIAogICAg
IC8vIERyYXcgdGhlIEhVRCBvbnRvIHRoZSBkZWZhdWx0IHJlbmRlciBzdXJmYWNlLgpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2NDQzKQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAx
MS0wNS0xMyAgQWxvayBQcml5YWRhcnNoaSAgPGFsb2twQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGxpdCBjYW52YXMgZnJv
bSBMYXllclRpbGVyQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYwNzE5CisKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorCiAy
MDExLTA1LTEzICBCcmV0dCBXaWxzb24gIDxicmV0dHdAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA4NjQzNikKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsNyBA
QAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJLZXlib2FyZENv
ZGVzLmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIkxheWVyUGFpbnRl
ckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5v
ZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTI0MDksNyArMjQxMCw3IEBA
IHZvaWQgV2ViVmlld0ltcGw6OmludmFsaWRhdGVSb290TGF5ZXJSZWMKICAgICBzZXRSb290TGF5
ZXJOZWVkc0Rpc3BsYXkoKTsKIH0KIAotY2xhc3MgV2ViVmlld0ltcGxDb250ZW50UGFpbnRlciA6
IHB1YmxpYyBUaWxlUGFpbnRJbnRlcmZhY2UgeworY2xhc3MgV2ViVmlld0ltcGxDb250ZW50UGFp
bnRlciA6IHB1YmxpYyBMYXllclBhaW50ZXJDaHJvbWl1bSB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcik7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBh
c3NPd25QdHI8V2ViVmlld0ltcGxDb250ZW50UGFpbnRlcio+IGNyZWF0ZShXZWJWaWV3SW1wbCog
d2ViVmlld0ltcGwpCg==
</data>
<flag name="commit-queue"
          id="86636"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93508</attachid>
            <date>2011-05-13 14:14:55 -0700</date>
            <delta_ts>2011-05-13 14:36:24 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>layer.txt</filename>
            <type>text/plain</type>
            <size>58000</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2NDQzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODAgQEAKKzIwMTEtMDUtMTMgIEFsb2sgUHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBTcGxpdCBjYW52YXMgZnJvbSBMYXll
clRpbGVyQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTYwNzE5CisKKyAgICAgICAgTGF5ZXJUaWxlckNocm9taXVtIG5vdyBqdXN0IGRvZXMg
dGlsaW5nLiBJdCBkZWxlZ2F0ZXMgdGhlIHRhc2sgb2YgcGFpbnRpbmcgYW5kIHVwZGF0aW5nIHRl
eHR1cmVzIHRvIExheWVyVGV4dHVyZVVwZGF0ZXIuCisgICAgICAgIEFsc28gYWJzdHJhY3RlZCBM
YXllclRleHR1cmVTdWJJbWFnZSB0byB1cGxvYWQgdGV4dHVyZSBwaXhlbHMuCisKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vVHJhY2VFdmVudC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXllckNo
cm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjp+Q29udGVu
dExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06
OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNo
cm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXll
ckNocm9taXVtOjpzZXRMYXllclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRM
YXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OkltYWdl
TGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVy
ZVVwZGF0ZXI6On5JbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyOjpvcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6aW1hZ2VSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
VGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUGFpbnRlckNocm9taXVtLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jvb3RMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERyYXdMYXll
cnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXll
cnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVN1YkltYWdlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVT
dWJJbWFnZTo6TGF5ZXJUZXh0dXJlU3ViSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
ZXh0dXJlU3ViSW1hZ2U6On5MYXllclRleHR1cmVTdWJJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRleHR1cmVTdWJJbWFnZTo6c2V0U3ViSW1hZ2VTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyVGV4dHVyZVN1YkltYWdlOjp1cGxvYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmg6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyOjpMYXllclRleHR1cmVVcGRh
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXI6On5MYXllclRleHR1
cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXI6OmNvbnRl
eHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVw
ZGF0ZXJDYW52YXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVw
ZGF0ZXJDYW52YXM6OkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhczo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpMYXllclRleHR1cmVVcGRhdGVyQml0
bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnByZXBh
cmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyQml0bWFw
Ojp1cGRhdGVUZXh0dXJlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6On5MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6OmNvbnRlbnRSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6On5MYXllclRl
eHR1cmVVcGRhdGVyQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0
ZXJCaXRtYXA6Om9yaWVudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
ckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVt
OjpMYXllclRpbGVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9t
aXVtOjpzZXRUaWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06
OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnVwbG9hZCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmRyYXcpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpUaWxlOjpUaWxlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmRyYXcpOgorCiAyMDExLTA1LTA1ICBQYXZl
bCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFl1cnkgU2VtaWtoYXRza3kuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA4NjQz
NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNDAy
NiwxMCArNDAyNiwxNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclBhaW50ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJl
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0
dXJlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVN1YkltYWdlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNh
bnZhcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRp
bGVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclRpbGVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaCcsCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UcmFjZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vVHJhY2VFdmVudC5oCShyZXZpc2lvbiA4NjQzNikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1RyYWNlRXZlbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2RlZmluZSBUcmFjZUV2ZW50X2gKIAogI2luY2x1
ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAKIC8v
IEltcGxlbWVudGF0aW9uIGRldGFpbDogdHJhY2UgZXZlbnQgbWFjcm9zIGNyZWF0ZSB0ZW1wb3Jh
cnkgdmFyaWFibGVzCiAvLyB0byBrZWVwIGluc3RydW1lbnRhdGlvbiBvdmVyaGVhZCBsb3cuIFRo
ZXNlIG1hY3JvcyBnaXZlIGVhY2ggdGVtcG9yYXJ5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExh
eWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA4NjQzNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzYsOCArMzYsMTEgQEAKIAogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxh
eWVyVGV4dHVyZS5oIgorI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCIKKyNp
bmNsdWRlICJMYXllclRpbGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tp
bmcuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAKQEAgLTUxLDI0ICs1NCw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxDb250
ZW50TGF5ZXJDaHJvbWl1bT4gQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xh
eWVyQ2hyb21pdW0qIG93bmVyKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29udGVudExh
eWVyQ2hyb21pdW0ob3duZXIpKTsKLX0KLQotQ29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRM
YXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCi0gICAgOiBMYXllckNo
cm9taXVtKG93bmVyKQotICAgICwgbV90aWxpbmdPcHRpb24oQ29udGVudExheWVyQ2hyb21pdW06
OkF1dG9UaWxlKQotewotfQotCi1Db250ZW50TGF5ZXJDaHJvbWl1bTo6fkNvbnRlbnRMYXllckNo
cm9taXVtKCkKLXsKLSAgICBtX3RpbGVyLmNsZWFyKCk7Ci0gICAgTGF5ZXJDaHJvbWl1bTo6Y2xl
YW51cFJlc291cmNlcygpOwotfQotCi1jbGFzcyBDb250ZW50TGF5ZXJQYWludGVyIDogcHVibGlj
IFRpbGVQYWludEludGVyZmFjZSB7CitjbGFzcyBDb250ZW50TGF5ZXJQYWludGVyIDogcHVibGlj
IExheWVyUGFpbnRlckNocm9taXVtIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBDb250ZW50TGF5
ZXJQYWludGVyKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiAgICAgICAgIDogbV9vd25l
cihvd25lcikKQEAgLTg1LDE0ICs3MSwyNyBAQCBwcml2YXRlOgogICAgIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSogbV9vd25lcjsKIH07CiAKK1Bhc3NSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW0+
IENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25l
cikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbnRlbnRMYXllckNocm9taXVtKG93bmVy
KSk7Cit9CisKK0NvbnRlbnRMYXllckNocm9taXVtOjpDb250ZW50TGF5ZXJDaHJvbWl1bShHcmFw
aGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQorICAgIDogTGF5ZXJDaHJvbWl1bShvd25lcikKKyAg
ICAsIG1fdGlsaW5nT3B0aW9uKENvbnRlbnRMYXllckNocm9taXVtOjpBdXRvVGlsZSkKK3sKK30K
KworQ29udGVudExheWVyQ2hyb21pdW06On5Db250ZW50TGF5ZXJDaHJvbWl1bSgpCit7CisgICAg
Y2xlYW51cFJlc291cmNlcygpOworfQorCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpwYWlu
dENvbnRlbnRzSWZEaXJ0eShjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCkKIHsKICAg
ICBBU1NFUlQoZHJhd3NDb250ZW50KCkpOwogICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwog
Ci0gICAgY3JlYXRlVGlsZXJJZk5lZWRlZCgpOwotCi0gICAgQ29udGVudExheWVyUGFpbnRlciBw
YWludGVyKG1fb3duZXIpOwogICAgIHVwZGF0ZUxheWVyU2l6ZShsYXllckJvdW5kcygpLnNpemUo
KSk7CiAKICAgICBJbnRSZWN0IGxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3QodGFyZ2V0U3Vy
ZmFjZVJlY3QpOwpAQCAtMTAzLDE1ICsxMDIsMjYgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1
bTo6cGFpbnRDb250ZW50cwogICAgIGRpcnR5LmludGVyc2VjdChsYXllckJvdW5kcygpKTsKICAg
ICBtX3RpbGVyLT5pbnZhbGlkYXRlUmVjdChkaXJ0eSk7CiAKLSAgICBtX3RpbGVyLT51cGRhdGUo
cGFpbnRlciwgbGF5ZXJSZWN0KTsKKyAgICBtX3RpbGVyLT51cGRhdGUobGF5ZXJSZWN0KTsKICAg
ICBtX2RpcnR5UmVjdCA9IEZsb2F0UmVjdCgpOwogfQogCit2b2lkIENvbnRlbnRMYXllckNocm9t
aXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKK3sKKyAgICBtX3RpbGVyLmNsZWFyKCk7CisgICAgTGF5
ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpOworfQorCiB2b2lkIENvbnRlbnRMYXllckNo
cm9taXVtOjpzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5k
ZXJlcikKIHsKICAgICBMYXllckNocm9taXVtOjpzZXRMYXllclJlbmRlcmVyKGxheWVyUmVuZGVy
ZXIpOwogICAgIGNyZWF0ZVRpbGVySWZOZWVkZWQoKTsKLSAgICBtX3RpbGVyLT5zZXRMYXllclJl
bmRlcmVyKGxheWVyUmVuZGVyZXIpOworfQorCitQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0
ZXI+IENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcigpCit7CisgICAg
TGF5ZXJQYWludGVyQ2hyb21pdW0qIHBhaW50ZXIgPSBuZXcgQ29udGVudExheWVyUGFpbnRlciht
X293bmVyKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRt
YXAobGF5ZXJSZW5kZXJlckNvbnRleHQoKSwgYWRvcHRQdHIocGFpbnRlciksIGxheWVyUmVuZGVy
ZXIoKS0+Y29udGV4dFN1cHBvcnRzTWFwU3ViKCkpKTsKIH0KIAogVHJhbnNmb3JtYXRpb25NYXRy
aXggQ29udGVudExheWVyQ2hyb21pdW06OnRpbGluZ1RyYW5zZm9ybSgpCkBAIC0xODYsMTYgKzE5
NiwyNiBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpkcmF3KGNvbnN0IEluCiAgICAgICAg
IG1fdGlsZXItPmRyYXcobGF5ZXJSZWN0LCB0cmFuc2Zvcm0sIGNjTGF5ZXJJbXBsKCktPmRyYXdP
cGFjaXR5KCkpOwogfQogCitib29sIENvbnRlbnRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQo
KSBjb25zdAoreworICAgIHJldHVybiBtX293bmVyICYmIG1fb3duZXItPmRyYXdzQ29udGVudCgp
ICYmICghbV90aWxlciB8fCAhbV90aWxlci0+c2tpcHNEcmF3KCkpOworfQorCiB2b2lkIENvbnRl
bnRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlcklmTmVlZGVkKCkKIHsKICAgICBpZiAobV90aWxl
cikKICAgICAgICAgcmV0dXJuOwotICAgIG1fdGlsZXIgPSBMYXllclRpbGVyQ2hyb21pdW06OmNy
ZWF0ZShsYXllclJlbmRlcmVyKCksIEludFNpemUoZGVmYXVsdFRpbGVTaXplLCBkZWZhdWx0VGls
ZVNpemUpLCBMYXllclRpbGVyQ2hyb21pdW06Okhhc0JvcmRlclRleGVscyk7CisKKyAgICBtX3Rp
bGVyID0gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUoCisgICAgICAgIGxheWVyUmVuZGVyZXIo
KSwKKyAgICAgICAgY3JlYXRlVGV4dHVyZVVwZGF0ZXIoKSwKKyAgICAgICAgSW50U2l6ZShkZWZh
dWx0VGlsZVNpemUsIGRlZmF1bHRUaWxlU2l6ZSksCisgICAgICAgIExheWVyVGlsZXJDaHJvbWl1
bTo6SGFzQm9yZGVyVGV4ZWxzKTsKIH0KIAogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcygpCiB7Ci0gICAgbV90aWxlci0+dXBsb2FkQ2FudmFzKCk7
CisgICAgbV90aWxlci0+dXBsb2FkKCk7CiB9CiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06
OnNldFRpbGluZ09wdGlvbihUaWxpbmdPcHRpb24gb3B0aW9uKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250
ZW50TGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA4NjQzNikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDEyICszNSwxMiBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKIAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJMYXllclRpbGVyQ2hy
b21pdW0uaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIExheWVyVGV4dHVyZTsKK2NsYXNzIExheWVyVGlsZXJDaHJvbWl1bTsKK2Ns
YXNzIExheWVyVGV4dHVyZVVwZGF0ZXI7CiAKIC8vIEEgTGF5ZXIgdGhhdCByZXF1aXJlcyBhIEdy
YXBoaWNzQ29udGV4dCB0byByZW5kZXIgaXRzIGNvbnRlbnRzLgogY2xhc3MgQ29udGVudExheWVy
Q2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CkBAIC01OCw3ICs1OCw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgYmluZENvbnRlbnRzVGV4dHVyZSgpOwogCiAgICAgdmlydHVh
bCB2b2lkIGRyYXcoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QpOwotICAgIHZpcnR1
YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX293bmVyICYmIG1fb3duZXIt
PmRyYXdzQ29udGVudCgpICYmICghbV90aWxlciB8fCAhbV90aWxlci0+c2tpcHNEcmF3KCkpOyB9
CisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAg
ICAgZXhwbGljaXQgQ29udGVudExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBv
d25lcik7CkBAIC02Niw4ICs2NiwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBjb25zdCBj
aGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJDb250ZW50TGF5ZXIiOyB9
CiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBp
bmRlbnQpIGNvbnN0OwogCisgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsK
IAorICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGVUZXh0
dXJlVXBkYXRlcigpOworCiAgICAgdmlydHVhbCBJbnRSZWN0IGxheWVyQm91bmRzKCkgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRpbGluZ1RyYW5zZm9ybSgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXll
ckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA4NjQzNikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJv
bWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDQ1IEBACiAjaW5jbHVkZSAiSW1h
Z2UuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXll
clRleHR1cmUuaCIKKyNpbmNsdWRlICJMYXllclRleHR1cmVTdWJJbWFnZS5oIgorI2luY2x1ZGUg
IkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJ
bWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlciB7Citw
dWJsaWM6CisgICAgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBjb25zdCBQbGF0Zm9ybUltYWdlJiBpbWFnZSwgYm9vbCB1c2VNYXBUZXhTdWJJbWFn
ZSkKKyAgICAgICAgOiBMYXllclRleHR1cmVVcGRhdGVyKGNvbnRleHQpCisgICAgICAgICwgbV9p
bWFnZShpbWFnZSkKKyAgICAgICAgLCBtX3RleFN1YkltYWdlKHVzZU1hcFRleFN1YkltYWdlKQor
ICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKCkgeyB9
CisKKyAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4gTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6Qm90dG9tVXBPcmllbnRhdGlvbjsgfQorCisgICAgdmlydHVhbCB2b2lk
IHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6
ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpCisgICAgeworICAgICAgICBBU1NFUlQoaW1h
Z2VSZWN0KCkuY29udGFpbnMoY29udGVudFJlY3QpKTsKKyAgICAgICAgbV90ZXhTdWJJbWFnZS5z
ZXRTdWJJbWFnZVNpemUodGlsZVNpemUpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVUZXh0dXJlUmVjdChMYXllclRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQorICAgIHsKKyAgICAgICAgdGV4dHVyZS0+
YmluZFRleHR1cmUoKTsKKyAgICAgICAgbV90ZXhTdWJJbWFnZS51cGxvYWQobV9pbWFnZS5waXhl
bHMoKSwgaW1hZ2VSZWN0KCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0LCBjb250ZXh0KCkpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBJbnRSZWN0IGltYWdlUmVjdCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV9pbWFnZS5zaXplKCkpOworICAg
IH0KKworICAgIGNvbnN0IFBsYXRmb3JtSW1hZ2UmIG1faW1hZ2U7CisgICAgTGF5ZXJUZXh0dXJl
U3ViSW1hZ2UgbV90ZXhTdWJJbWFnZTsKK307CisKIFBhc3NSZWZQdHI8SW1hZ2VMYXllckNocm9t
aXVtPiBJbWFnZUxheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93
bmVyKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VMYXllckNocm9taXVtKG93bmVy
KSk7CkBAIC04MCwxMyArMTE2LDE4IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpwYWludENv
bnRlbnRzSWYKICAgICAgICAgICAgIG1fdGlsZXItPmludmFsaWRhdGVSZWN0KHBhaW50UmVjdCk7
CiAgICAgICAgICAgICBtX2RpcnR5UmVjdCA9IEludFJlY3QoKTsKICAgICAgICAgfQorICAgICAg
ICBtX3RpbGVyLT51cGRhdGUocGFpbnRSZWN0KTsKICAgICB9CiB9CiAKIHZvaWQgSW1hZ2VMYXll
ckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkKIHsKLSAgICBJbnRSZWN0IHBh
aW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV9kZWNvZGVkSW1hZ2Uuc2l6ZSgpKTsKLSAgICBtX3Rp
bGVyLT51cGRhdGVGcm9tUGl4ZWxzKHBhaW50UmVjdCwgcGFpbnRSZWN0LCBtX2RlY29kZWRJbWFn
ZS5waXhlbHMoKSk7CisgICAgbV90aWxlci0+dXBsb2FkKCk7Cit9CisKK1Bhc3NPd25QdHI8TGF5
ZXJUZXh0dXJlVXBkYXRlcj4gSW1hZ2VMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRl
cigpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIo
bGF5ZXJSZW5kZXJlckNvbnRleHQoKSwgbV9kZWNvZGVkSW1hZ2UsIGxheWVyUmVuZGVyZXIoKS0+
Y29udGV4dFN1cHBvcnRzTWFwU3ViKCkpKTsKIH0KIAogSW50UmVjdCBJbWFnZUxheWVyQ2hyb21p
dW06OmxheWVyQm91bmRzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5o
CShyZXZpc2lvbiA4NjQzNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw3
IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlw
ZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkltYWdlTGF5ZXIiOyB9CiAKKyAgICB2aXJ0dWFs
IFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gY3JlYXRlVGV4dHVyZVVwZGF0ZXIoKTsK
ICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRpbGluZ1RyYW5zZm9ybSgpOwogICAg
IHZpcnR1YWwgSW50UmVjdCBsYXllckJvdW5kcygpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclBhaW50ZXJDaHJvbWl1bS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUGFpbnRlckNocm9taXVtLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclBhaW50ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIExheWVyUGFpbnRlckNocm9taXVt
X2gKKyNkZWZpbmUgTGF5ZXJQYWludGVyQ2hyb21pdW1faAorCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKK2NsYXNzIEludFJlY3Q7CisKK2NsYXNzIExheWVyUGFpbnRlckNocm9taXVtIHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNl
bmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjZW5kaWYgLy8gTGF5ZXJQYWlu
dGVyQ2hyb21pdW1faAorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclBhaW50ZXJDaHJvbWl1bS5oCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAkocmV2aXNpb24gODY0MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw3ICs0MCw5IEBACiAjaW5jbHVkZSAiR2VvbWV0cnlCaW5kaW5nLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgi
CisjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclRleHR1
cmUuaCIKKyNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgiCiAjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiVGV4
dHVyZU1hbmFnZXIuaCIKQEAgLTkzLDcgKzk1LDcgQEAgc3RhdGljIGJvb2wgaXNTY2FsZU9yVHJh
bnNsYXRpb24oY29uc3QgVAogCiB9CiAKLVBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVt
PiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50
KQorUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6Y3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIFBhc3NPd25Q
dHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRlbnRQYWludCkKIHsKICAgICBpZiAoIWNvbnRl
eHQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTA2LDEwICsxMDgsOSBAQCBQYXNzUmVmUHRyPExh
eWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSCiB9CiAKIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRl
eHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzT3du
UHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1
bT4gY29udGVudFBhaW50KQogICAgIDogbV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uKEludFBvaW50
KC0xLCAtMSkpCiAgICAgLCBtX3Jvb3RMYXllcigwKQotICAgICwgbV9yb290TGF5ZXJDb250ZW50
UGFpbnQoY29udGVudFBhaW50KQogICAgICwgbV9jdXJyZW50U2hhZGVyKDApCiAgICAgLCBtX2N1
cnJlbnRSZW5kZXJTdXJmYWNlKDApCiAgICAgLCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQoMCkK
QEAgLTEyNSw3ICsxMjYsOSBAQCBMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJD
aHJvCiAgICAgaWYgKG1fY29udGV4dFN1cHBvcnRzTWFwU3ViKQogICAgICAgICBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfQ0hST01JVU1fbWFwX3N1YiIpOwog
ICAgIG1faGFyZHdhcmVDb21wb3NpdGluZyA9IGluaXRpYWxpemVTaGFyZWRPYmplY3RzKCk7Ci0g
ICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXIgPSBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSh0
aGlzLCBJbnRTaXplKDI1NiwgMjU2KSwgTGF5ZXJUaWxlckNocm9taXVtOjpOb0JvcmRlclRleGVs
cyk7CisKKyAgICBMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlciA9IG5ldyBMYXll
clRleHR1cmVVcGRhdGVyQml0bWFwKG1fY29udGV4dC5nZXQoKSwgY29udGVudFBhaW50LCBtX2Nv
bnRleHRTdXBwb3J0c01hcFN1Yik7CisgICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXIgPSBMYXll
clRpbGVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBhZG9wdFB0cih0ZXh0dXJlVXBkYXRlciksIElu
dFNpemUoMjU2LCAyNTYpLCBMYXllclRpbGVyQ2hyb21pdW06Ok5vQm9yZGVyVGV4ZWxzKTsKICAg
ICBBU1NFUlQobV9yb290TGF5ZXJDb250ZW50VGlsZXIpOwogCiAgICAgbV9oZWFkc1VwRGlzcGxh
eSA9IENDSGVhZHNVcERpc3BsYXk6OmNyZWF0ZSh0aGlzKTsKQEAgLTE2NSw3ICsxNjgsNyBAQCB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJvCiB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyQ29udGVudHMoKQogewogICAgIFRSQUNFX0VWRU5U
KCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzIiwgdGhpcywg
MCk7Ci0gICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPnVwZGF0ZSgqbV9yb290TGF5ZXJDb250
ZW50UGFpbnQsIG1fdmlld3BvcnRWaXNpYmxlUmVjdCk7CisgICAgbV9yb290TGF5ZXJDb250ZW50
VGlsZXItPnVwZGF0ZShtX3ZpZXdwb3J0VmlzaWJsZVJlY3QpOwogfQogCiB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd1Jvb3RMYXllcigpCkBAIC0xNzMsNyArMTc2LDYgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSb290TGF5ZQogICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHNjcm9sbDsKICAgICBzY3JvbGwudHJhbnNsYXRlKC1tX3ZpZXdwb3J0VmlzaWJsZVJlY3Qu
eCgpLCAtbV92aWV3cG9ydFZpc2libGVSZWN0LnkoKSk7CiAKLSAgICBtX3Jvb3RMYXllckNvbnRl
bnRUaWxlci0+dXBsb2FkQ2FudmFzKCk7CiAgICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPmRy
YXcobV92aWV3cG9ydFZpc2libGVSZWN0LCBzY3JvbGwsIDEuMGYpOwogfQogCkBAIC0yMTIsNyAr
MjE0LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERyYQogICAgICAg
ICByZXR1cm47CiAKICAgICBMYXllckxpc3QgcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLQogICAg
IHVwZGF0ZUxheWVycyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIAogICAgIC8vIEJlZm9yZSBk
cmF3TGF5ZXJzOgpAQCAtMzE3LDYgKzMxOCw4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp1cGRhdGVMYXllcnMKIC8vICB9CiAKICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVj
dXJzaXZlKG1fcm9vdExheWVyLmdldCgpKTsKKyAgICAvLyBVcGRhdGUgY29tcG9zaXRvciByZXNv
dXJjZXMgZm9yIHJvb3QgbGF5ZXIuCisgICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPnVwbG9h
ZCgpOwogCiAgICAgLy8gQWZ0ZXIgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlc1JlY3Vyc2l2ZSwg
c2V0L3dhaXQgbGF0Y2hlcyBmb3IgYWxsIGNoaWxkCiAgICAgLy8gY29udGV4dHMuIFRoaXMgd2ls
bCBwcmV2ZW50IHRoZSBjb21wb3NpdG9yIGZyb20gdXNpbmcgYW55IG9mIHRoZSBjaGlsZApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJKHJldmlzaW9uIDg2NDM2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDE3ICs1OCwyMiBAQAogI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KICNlbmRpZgogCisjaWYgVVNFKFNLSUEpCitjbGFzcyBTa0NhbnZhczsK
KyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDSGVhZHNVcERpc3BsYXk7
CiBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIEdlb21ldHJ5QmluZGluZzsKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dDNEOworY2xhc3MgTGF5ZXJQYWludGVyQ2hyb21pdW07CiAKIC8vIENsYXNzIHRo
YXQgaGFuZGxlcyBkcmF3aW5nIG9mIGNvbXBvc2l0ZWQgcmVuZGVyIGxheWVycyB1c2luZyBHTC4K
IGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyUmVu
ZGVyZXJDaHJvbWl1bT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVu
ZGVyZXJDaHJvbWl1bT4gY3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNz
T3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50KTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiwgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBhaW50
KTsKIAogICAgIH5MYXllclJlbmRlcmVyQ2hyb21pdW0oKTsKIApAQCAtMTQ4LDcgKzE1Myw3IEBA
IHByaXZhdGU6CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IExheWVy
TGlzdDsKICAgICB0eXBlZGVmIEhhc2hNYXA8R3JhcGhpY3NDb250ZXh0M0QqLCBpbnQ+IENoaWxk
Q29udGV4dE1hcDsKIAotICAgIGV4cGxpY2l0IExheWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNv
bnRlbnRQYWludCk7CisgICAgZXhwbGljaXQgTGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBj
b250ZW50UGFpbnQpOwogCiAgICAgdm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKICAgICB2b2lkIHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKCk7CkBA
IC0xODgsMTQgKzE5MywxMiBAQCBwcml2YXRlOgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1f
cHJvamVjdGlvbk1hdHJpeDsKIAogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX3Jvb3RMYXll
cjsKLSAgICBPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBtX3Jvb3RMYXllckNvbnRlbnRQYWlu
dDsKICAgICBPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtPiBtX3Jvb3RMYXllckNvbnRlbnRUaWxl
cjsKIAogICAgIGJvb2wgbV9oYXJkd2FyZUNvbXBvc2l0aW5nOwogCiAgICAgdW5zaWduZWQgbV9j
dXJyZW50U2hhZGVyOwogICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV9jdXJyZW50UmVuZGVy
U3VyZmFjZTsKLQogICAgIHVuc2lnbmVkIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZDsKICAgICBi
b29sIG1fY29tcG9zaXRlT2Zmc2NyZWVuOwogCkBAIC0yMzMsNyArMjM2LDYgQEAgcHJpdmF0ZToK
IAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwogICAgIENoaWxkQ29u
dGV4dE1hcCBtX2NoaWxkQ29udGV4dHM7Ci0KICAgICAvLyBJZiB0cnVlLCB0aGUgY2hpbGQgY29u
dGV4dHMgd2VyZSBjb3BpZWQgdG8gdGhlIGNvbXBvc2l0b3IgdGV4dHVyZSB0YXJnZXRzCiAgICAg
Ly8gYW5kIHRoZSBjb21wb3NpdG9yIHdpbGwgbmVlZCB0byB3YWl0IG9uIHRoZSBwcm9wZXIgbGF0
Y2hlcyBiZWZvcmUgdXNpbmcKICAgICAvLyB0aGUgdGFyZ2V0IHRleHR1cmVzLiBJZiBmYWxzZSwg
dGhlIGNvbXBvc2l0b3IgaXMgcmV1c2luZyB0aGUgdGV4dHVyZXMKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRleHR1cmVTdWJJbWFnZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJMYXllclRleHR1cmVT
dWJJbWFnZS5oIgorCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0xheWVyVGV4
dHVyZVN1YkltYWdlOjpMYXllclRleHR1cmVTdWJJbWFnZShib29sIHVzZU1hcFRleFN1YkltYWdl
KQorICAgIDogbV91c2VNYXBUZXhTdWJJbWFnZSh1c2VNYXBUZXhTdWJJbWFnZSkKK3sKK30KKwor
TGF5ZXJUZXh0dXJlU3ViSW1hZ2U6On5MYXllclRleHR1cmVTdWJJbWFnZSgpCit7Cit9CisKK3Zv
aWQgTGF5ZXJUZXh0dXJlU3ViSW1hZ2U6OnNldFN1YkltYWdlU2l6ZShjb25zdCBJbnRTaXplJiBz
dWJJbWFnZVNpemUpCit7CisgICAgaWYgKHN1YkltYWdlU2l6ZSA9PSBtX3N1YkltYWdlU2l6ZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdWJJbWFnZVNpemUgPSBzdWJJbWFnZVNpemU7Cisg
ICAgaWYgKCFtX3VzZU1hcFRleFN1YkltYWdlKQorICAgICAgICBtX3N1YkltYWdlID0gYWRvcHRB
cnJheVB0cihuZXcgdWludDhfdFttX3N1YkltYWdlU2l6ZS53aWR0aCgpICogbV9zdWJJbWFnZVNp
emUuaGVpZ2h0KCkgKiA0XSk7Cit9CisKK3ZvaWQgTGF5ZXJUZXh0dXJlU3ViSW1hZ2U6OnVwbG9h
ZChjb25zdCB1aW50OF90KiBpbWFnZSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFJlY3QmIGRlc3RSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworICAgIC8vIE9mZnNldCBmcm9tIGltYWdl
LXJlY3QgdG8gc291cmNlLXJlY3QuCisgICAgSW50UG9pbnQgb2Zmc2V0KHNvdXJjZVJlY3QueCgp
IC0gaW1hZ2VSZWN0LngoKSwgc291cmNlUmVjdC55KCkgLSBpbWFnZVJlY3QueSgpKTsKKworICAg
IGlmIChtX3VzZU1hcFRleFN1YkltYWdlKSB7CisgICAgICAgIC8vIFVwbG9hZCB0aWxlIGRhdGEg
dmlhIGEgbWFwcGVkIHRyYW5zZmVyIGJ1ZmZlcgorICAgICAgICBFeHRlbnNpb25zM0RDaHJvbWl1
bSogZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpKTsKKyAgICAgICAgdWludDhfdCogcGl4ZWxEZXN0ID0gc3RhdGlj
X2Nhc3Q8dWludDhfdCo+KGV4dGVuc2lvbnMtPm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCks
IGRlc3RSZWN0LndpZHRoKCksIGRlc3RSZWN0LmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIEV4dGVuc2lvbnMzRENocm9t
aXVtOjpXUklURV9PTkxZKSk7CisgICAgICAgIEFTU0VSVChwaXhlbERlc3QpOworICAgICAgICBp
ZiAoaW1hZ2VSZWN0LndpZHRoKCkgPT0gc291cmNlUmVjdC53aWR0aCgpICYmICFvZmZzZXQueCgp
KQorICAgICAgICAgICAgbWVtY3B5KHBpeGVsRGVzdCwgJmltYWdlWzQgKiBvZmZzZXQueSgpICog
aW1hZ2VSZWN0LndpZHRoKCldLCBpbWFnZVJlY3Qud2lkdGgoKSAqIGRlc3RSZWN0LmhlaWdodCgp
ICogNCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gU3RyaWRlcyBub3QgZXF1YWws
IHNvIGRvIGEgcm93LWJ5LXJvdyBtZW1jcHkgZnJvbSB0aGUKKyAgICAgICAgICAgIC8vIHBhaW50
IHJlc3VsdHMgaW50byB0aGUgcGl4ZWxEZXN0CisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAw
OyByb3cgPCBkZXN0UmVjdC5oZWlnaHQoKTsgKytyb3cpCisgICAgICAgICAgICAgICAgbWVtY3B5
KCZwaXhlbERlc3RbZGVzdFJlY3Qud2lkdGgoKSAqIDQgKiByb3ddLAorICAgICAgICAgICAgICAg
ICAgICAgICAmaW1hZ2VbNCAqIChvZmZzZXQueCgpICsgKG9mZnNldC55KCkgKyByb3cpICogaW1h
Z2VSZWN0LndpZHRoKCkpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJlY3Qud2lkdGgo
KSAqIDQpOworICAgICAgICB9CisgICAgICAgIGV4dGVuc2lvbnMtPnVubWFwVGV4U3ViSW1hZ2Uy
RENIUk9NSVVNKHBpeGVsRGVzdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3QgdWludDhf
dCogcGl4ZWxTb3VyY2U7CisgICAgICAgIGlmIChpbWFnZVJlY3Qud2lkdGgoKSA9PSBzb3VyY2VS
ZWN0LndpZHRoKCkgJiYgIW9mZnNldC54KCkpCisgICAgICAgICAgICBwaXhlbFNvdXJjZSA9ICZp
bWFnZVs0ICogb2Zmc2V0LnkoKSAqIGltYWdlUmVjdC53aWR0aCgpXTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAvLyBTdHJpZGVzIG5vdCBlcXVhbCwgc28gZG8gYSByb3ctYnktcm93IG1l
bWNweSBmcm9tIHRoZQorICAgICAgICAgICAgLy8gcGFpbnQgcmVzdWx0cyBpbnRvIGEgdGVtcCBi
dWZmZXIgZm9yIHVwbG9hZGluZy4KKyAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8
IGRlc3RSZWN0LmhlaWdodCgpOyArK3JvdykKKyAgICAgICAgICAgICAgICBtZW1jcHkoJm1fc3Vi
SW1hZ2VbZGVzdFJlY3Qud2lkdGgoKSAqIDQgKiByb3ddLAorICAgICAgICAgICAgICAgICAgICAg
ICAmaW1hZ2VbNCAqIChvZmZzZXQueCgpICsgKG9mZnNldC55KCkgKyByb3cpICogaW1hZ2VSZWN0
LndpZHRoKCkpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJlY3Qud2lkdGgoKSAqIDQp
OworCisgICAgICAgICAgICBwaXhlbFNvdXJjZSA9ICZtX3N1YkltYWdlWzBdOworICAgICAgICB9
CisgICAgICAgIGNvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDAsIGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpLCBkZXN0UmVjdC53aWR0aCgpLCBk
ZXN0UmVjdC5oZWlnaHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFLCBwaXhlbFNvdXJjZSk7CisgICAgfQorfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1z
dHlsZQogICArIExGCgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJUZXh0dXJlU3ViSW1hZ2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KworI2lmbmRlZiBMYXllclRleHR1cmVTdWJJbWFnZV9oCisjZGVmaW5lIExheWVyVGV4dHVyZVN1
YkltYWdlX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSA8d3RmL093bkFycmF5
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7
CisKK2NsYXNzIExheWVyVGV4dHVyZVN1YkltYWdlIHsKK3B1YmxpYzoKKyAgICBMYXllclRleHR1
cmVTdWJJbWFnZShib29sIHVzZU1hcFN1YkZvclVwbG9hZCk7CisgICAgfkxheWVyVGV4dHVyZVN1
YkltYWdlKCk7CisKKyAgICB2b2lkIHNldFN1YkltYWdlU2l6ZShjb25zdCBJbnRTaXplJik7Cisg
ICAgdm9pZCB1cGxvYWQoY29uc3QgdWludDhfdCogaW1hZ2UsIGNvbnN0IEludFJlY3QmIGltYWdl
UmVjdCwKKyAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRSZWN0JiBkZXN0UmVjdCwKKyAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRCopOwor
Citwcml2YXRlOgorICAgIGJvb2wgbV91c2VNYXBUZXhTdWJJbWFnZTsKKyAgICBJbnRTaXplIG1f
c3ViSW1hZ2VTaXplOworICAgIE93bkFycmF5UHRyPHVpbnQ4X3Q+IG1fc3ViSW1hZ2U7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorI2VuZGlmIC8vIExheWVyVGV4dHVyZVN1YkltYWdlX2gKKwoKUHJvcGVydHkgY2hh
bmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJU
ZXh0dXJlU3ViSW1hZ2UuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYK
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRl
eHR1cmVVcGRhdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRl
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIExheWVy
VGV4dHVyZVVwZGF0ZXJfaAorI2RlZmluZSBMYXllclRleHR1cmVVcGRhdGVyX2gKKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBJbnRTaXplOworY2xh
c3MgTGF5ZXJUZXh0dXJlOworCitjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyIHsKK3B1YmxpYzoK
KyAgICBMYXllclRleHR1cmVVcGRhdGVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KSA6IG1f
Y29udGV4dChjb250ZXh0KSB7IH0KKyAgICB2aXJ0dWFsIH5MYXllclRleHR1cmVVcGRhdGVyKCkg
eyB9CisKKyAgICBlbnVtIE9yaWVudGF0aW9uIHsKKyAgICAgICAgQm90dG9tVXBPcmllbnRhdGlv
biwKKyAgICAgICAgVG9wRG93bk9yaWVudGF0aW9uCisgICAgfTsKKyAgICAvLyBSZXR1cm5zIHRo
ZSBvcmllbnRhdGlvbiBvZiB0aGUgdGV4dHVyZSB1cGxvYWRlZCBieSB0aGlzIGludGVyZmFjZS4K
KyAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IElu
dFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZVRleHR1cmVSZWN0KExheWVyVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQorCitw
cml2YXRlOgorICAgIC8vIFRoZSBncmFwaGljcyBjb250ZXh0IHdpdGggd2hpY2ggdG8gdXBkYXRl
IHRleHR1cmVzLgorICAgIC8vIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgdGV4dHVyZXMgYXJlIGVp
dGhlciBjcmVhdGVkIGluIHRoZSBzYW1lIGNvbnRleHQKKyAgICAvLyBvciBzaGFyZWQgd2l0aCB0
aGlzIGNvbnRleHQuCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisjZW5kaWYgLy8gTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCisKClByb3BlcnR5IGNoYW5nZXMg
b246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVy
ZVVwZGF0ZXIuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVV
cGRhdGVyQ2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVVwZGF0ZXJDYW52YXMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisKKyNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgiCisKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgor
I2luY2x1ZGUgIkxheWVyVGV4dHVyZS5oIgorI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzOjpMYXllclRleHR1
cmVVcGRhdGVyQ2FudmFzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBQYXNzT3duUHRyPExh
eWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyKQorICAgIDogTGF5ZXJUZXh0dXJlVXBkYXRlcihj
b250ZXh0KQorICAgICwgbV9wYWludGVyKHBhaW50ZXIpCit7Cit9CisKK3ZvaWQgTGF5ZXJUZXh0
dXJlVXBkYXRlckNhbnZhczo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIGNvbnRleHQudHJhbnNsYXRlKC1j
b250ZW50UmVjdC54KCksIC1jb250ZW50UmVjdC55KCkpOworICAgIHsKKyAgICAgICAgVFJBQ0Vf
RVZFTlQoIkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6OnBhaW50IiwgdGhpcywgMCk7CisgICAg
ICAgIG1fcGFpbnRlci0+cGFpbnQoY29udGV4dCwgY29udGVudFJlY3QpOworICAgIH0KKyAgICBt
X2NvbnRlbnRSZWN0ID0gY29udGVudFJlY3Q7Cit9CisKK0xheWVyVGV4dHVyZVVwZGF0ZXJCaXRt
YXA6OkxheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQs
IFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIsIGJvb2wgdXNlTWFwVGV4
U3ViSW1hZ2UpCisgICAgOiBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzKGNvbnRleHQsIHBhaW50
ZXIpCisgICAgLCBtX3RleFN1YkltYWdlKHVzZU1hcFRleFN1YkltYWdlKQoreworfQorCit2b2lk
IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMp
Cit7CisgICAgbV90ZXhTdWJJbWFnZS5zZXRTdWJJbWFnZVNpemUodGlsZVNpemUpOworCisgICAg
bV9jYW52YXMucmVzaXplKGNvbnRlbnRSZWN0LnNpemUoKSk7CisgICAgLy8gQXNzdW1wdGlvbjog
aWYgYSB0aWxlciBpcyB1c2luZyBib3JkZXIgdGV4ZWxzLCB0aGVuIGl0IGlzIGJlY2F1c2UgdGhl
CisgICAgLy8gbGF5ZXIgaXMgbGlrZWx5IHRvIGJlIGZpbHRlcmVkIG9yIHRyYW5zZm9ybWVkLiBC
ZWNhdXNlIG9mIGl0IG1pZ2h0IGJlCisgICAgLy8gdHJhbnNmb3JtZWQsIGRyYXcgdGhlIHRleHQg
aW4gZ3JheXNjYWxlIGluc3RlYWQgb2Ygc3VicGl4ZWwgYW50aWFsaWFzaW5nLgorICAgIFBsYXRm
b3JtQ2FudmFzOjpQYWludGVyOjpUZXh0T3B0aW9uIHRleHRPcHRpb24gPQorICAgICAgICBib3Jk
ZXJUZXhlbHMgPyBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6R3JheXNjYWxlVGV4dCA6IFBsYXRm
b3JtQ2FudmFzOjpQYWludGVyOjpTdWJwaXhlbFRleHQ7CisgICAgUGxhdGZvcm1DYW52YXM6OlBh
aW50ZXIgY2FudmFzUGFpbnRlcigmbV9jYW52YXMsIHRleHRPcHRpb24pOworICAgIHBhaW50Q29u
dGVudHMoKmNhbnZhc1BhaW50ZXIuY29udGV4dCgpLCBjb250ZW50UmVjdCk7Cit9CisKK3ZvaWQg
TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6dXBkYXRlVGV4dHVyZVJlY3QoTGF5ZXJUZXh0dXJl
KiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0
UmVjdCkKK3sKKyAgICBQbGF0Zm9ybUNhbnZhczo6QXV0b0xvY2tlciBsb2NrZXIoJm1fY2FudmFz
KTsKKworICAgIHRleHR1cmUtPmJpbmRUZXh0dXJlKCk7CisgICAgbV90ZXhTdWJJbWFnZS51cGxv
YWQobG9ja2VyLnBpeGVscygpLCBjb250ZW50UmVjdCgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCwg
Y29udGV4dCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZh
cy5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRl
ckNhbnZhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0
ZXJDYW52YXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRl
ZiBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzX2gKKyNkZWZpbmUgTGF5ZXJUZXh0dXJlVXBkYXRl
ckNhbnZhc19oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRl
ICJMYXllclRleHR1cmVTdWJJbWFnZS5oIgorI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNhbnZhcy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7Citj
bGFzcyBMYXllclBhaW50ZXJDaHJvbWl1bTsKKworLy8gQSBMYXllclRleHR1cmVVcGRhdGVyIHdp
dGggYW4gaW50ZXJuYWwgY2FudmFzLgorY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyA6
IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyIHsKK3B1YmxpYzoKKyAgICBMYXllclRleHR1cmVV
cGRhdGVyQ2FudmFzKEdyYXBoaWNzQ29udGV4dDNEKiwgUGFzc093blB0cjxMYXllclBhaW50ZXJD
aHJvbWl1bT4pOworICAgIHZpcnR1YWwgfkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMoKSB7IH0K
KworcHJvdGVjdGVkOgorICAgIHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisgICAgY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRSZWN0OyB9CisKK3ByaXZhdGU6CisgICAgSW50
UmVjdCBtX2NvbnRlbnRSZWN0OworICAgIE93blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gbV9w
YWludGVyOworfTsKKworLy8gQSBMYXllclRleHR1cmVVcGRhdGVyIHdpdGggYW4gaW50ZXJuYWwg
Yml0bWFwIGNhbnZhcy4KK2NsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAgOiBwdWJsaWMg
TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyB7CitwdWJsaWM6CisgICAgTGF5ZXJUZXh0dXJlVXBk
YXRlckJpdG1hcChHcmFwaGljc0NvbnRleHQzRCosIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hy
b21pdW0+LCBib29sIHVzZU1hcFRleFN1YkltYWdlKTsKKyAgICB2aXJ0dWFsIH5MYXllclRleHR1
cmVVcGRhdGVyQml0bWFwKCkgeyB9CisKKyAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKCkgeyByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Qm90dG9tVXBPcmllbnRhdGlvbjsg
fQorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoTGF5ZXJUZXh0dXJlKiwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworCitwcml2YXRlOgorICAg
IFBsYXRmb3JtQ2FudmFzIG1fY2FudmFzOworICAgIExheWVyVGV4dHVyZVN1YkltYWdlIG1fdGV4
U3ViSW1hZ2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2VuZGlmIC8vIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52
YXNfaAorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21p
dW0uY3BwCShyZXZpc2lvbiA4NjQzNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDM4ICszNSwzMCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAi
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCisjaW5j
bHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKIAot
I2luY2x1ZGUgPHd0Zi9QYXNzT3duQXJyYXlQdHIuaD4KLQogdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4g
TGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJl
bmRlcmVyLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRpb24gYm9yZGVy
KQorUGFzc093blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IExheWVyVGlsZXJDaHJvbWl1bTo6Y3Jl
YXRlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgUGFzc093blB0cjxMYXll
clRleHR1cmVVcGRhdGVyPiB0ZXh0dXJlVXBkYXRlciwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUs
IEJvcmRlclRleGVsT3B0aW9uIGJvcmRlcikKIHsKICAgICBpZiAoIWxheWVyUmVuZGVyZXIgfHwg
dGlsZVNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVy
biBhZG9wdFB0cihuZXcgTGF5ZXJUaWxlckNocm9taXVtKGxheWVyUmVuZGVyZXIsIHRpbGVTaXpl
LCBib3JkZXIpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyVGlsZXJDaHJvbWl1bShs
YXllclJlbmRlcmVyLCB0ZXh0dXJlVXBkYXRlciwgdGlsZVNpemUsIGJvcmRlcikpOwogfQogCi1M
YXllclRpbGVyQ2hyb21pdW06OkxheWVyVGlsZXJDaHJvbWl1bShMYXllclJlbmRlcmVyQ2hyb21p
dW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9w
dGlvbiBib3JkZXIpCitMYXllclRpbGVyQ2hyb21pdW06OkxheWVyVGlsZXJDaHJvbWl1bShMYXll
clJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJl
VXBkYXRlcj4gdGV4dHVyZVVwZGF0ZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJU
ZXhlbE9wdGlvbiBib3JkZXIpCiAgICAgOiBtX3NraXBzRHJhdyhmYWxzZSkKICAgICAsIG1fdGls
aW5nRGF0YShtYXgodGlsZVNpemUud2lkdGgoKSwgdGlsZVNpemUuaGVpZ2h0KCkpLCAwLCAwLCBi
b3JkZXIgPT0gSGFzQm9yZGVyVGV4ZWxzKQotICAgICwgbV91c2VNYXBTdWJGb3JVcGxvYWRzKGxh
eWVyUmVuZGVyZXItPmNvbnRleHRTdXBwb3J0c01hcFN1YigpKQorICAgICwgbV90ZXh0dXJlVXBk
YXRlcih0ZXh0dXJlVXBkYXRlcikKICAgICAsIG1fbGF5ZXJSZW5kZXJlcihsYXllclJlbmRlcmVy
KQogewogICAgIHNldFRpbGVTaXplKHRpbGVTaXplKTsKIH0KIAotdm9pZCBMYXllclRpbGVyQ2hy
b21pdW06OnNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRl
cmVyKQotewotICAgIGlmIChtX2xheWVyUmVuZGVyZXIgIT0gbGF5ZXJSZW5kZXJlcikKLSAgICAg
ICAgcmVzZXQoKTsKLSAgICBtX2xheWVyUmVuZGVyZXIgPSBsYXllclJlbmRlcmVyOwotfQotCiBM
YXllclRpbGVyQ2hyb21pdW06On5MYXllclRpbGVyQ2hyb21pdW0oKQogewogICAgIHJlc2V0KCk7
CkBAIC04Niw4ICs3OCw2IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpzZXRUaWxlU2l6ZShj
b24KICAgICByZXNldCgpOwogCiAgICAgbV90aWxlU2l6ZSA9IHNpemU7Ci0gICAgaWYgKCFtX3Vz
ZU1hcFN1YkZvclVwbG9hZHMpCi0gICAgICAgIG1fdGlsZVBpeGVscyA9IGFkb3B0QXJyYXlQdHIo
bmV3IHVpbnQ4X3RbbV90aWxlU2l6ZS53aWR0aCgpICogbV90aWxlU2l6ZS5oZWlnaHQoKSAqIDRd
KTsKICAgICBtX3RpbGluZ0RhdGEuc2V0TWF4VGV4dHVyZVNpemUobWF4KHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSkpOwogfQogCkBAIC0yMzAsNyArMjIwLDcgQEAgdm9pZCBMYXllclRpbGVy
Q2hyb21pdW06OmludmFsaWRhdGVFbnRpcgogICAgIG1fdGlsaW5nRGF0YS5zZXRUb3RhbFNpemUo
MCwgMCk7CiB9CiAKLXZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGUoVGlsZVBhaW50SW50
ZXJmYWNlJiBwYWludGVyLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3ZvaWQgTGF5ZXJU
aWxlckNocm9taXVtOjp1cGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiB7CiAgICAg
aWYgKG1fc2tpcHNEcmF3KQogICAgICAgICByZXR1cm47CkBAIC0yNjcsMzAgKzI1NywxMCBAQCB2
b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6dXBkYXRlKFRpbGVQYWluCiAgICAgaWYgKGRpcnR5TGF5
ZXJSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jYW52YXMucmVzaXpl
KG1fcGFpbnRSZWN0LnNpemUoKSk7Ci0KLSAgICAvLyBBc3N1bXB0aW9uOiBpZiBhIHRpbGVyIGlz
IHVzaW5nIGJvcmRlciB0ZXhlbHMsIHRoZW4gaXQgaXMgYmVjYXVzZSB0aGUKLSAgICAvLyBsYXll
ciBpcyBsaWtlbHkgdG8gYmUgZmlsdGVyZWQgb3IgdHJhbnNmb3JtZWQuIEJlY2F1c2Ugb2YgaXQg
bWlnaHQgYmUKLSAgICAvLyB0cmFuc2Zvcm1lZCwgZHJhdyB0aGUgdGV4dCBpbiBncmF5c2NhbGUg
aW5zdGVhZCBvZiBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCi0gICAgUGxhdGZvcm1DYW52YXM6OlBh
aW50ZXI6OlRleHRPcHRpb24gdGV4dE9wdGlvbiA9IG1fdGlsaW5nRGF0YS5ib3JkZXJUZXhlbHMo
KSA/IFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpHcmF5c2NhbGVUZXh0IDogUGxhdGZvcm1DYW52
YXM6OlBhaW50ZXI6OlN1YnBpeGVsVGV4dDsKLSAgICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlciBj
YW52YXNQYWludGVyKCZtX2NhbnZhcywgdGV4dE9wdGlvbik7Ci0gICAgY2FudmFzUGFpbnRlci5j
b250ZXh0KCktPnRyYW5zbGF0ZSgtbV9wYWludFJlY3QueCgpLCAtbV9wYWludFJlY3QueSgpKTsK
LSAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZTo6
cGFpbnQiLCB0aGlzLCAwKTsKLSAgICAgICAgcGFpbnRlci5wYWludCgqY2FudmFzUGFpbnRlci5j
b250ZXh0KCksIG1fcGFpbnRSZWN0KTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlckNocm9t
aXVtOjp1cGxvYWRDYW52YXMoKQotewotICAgIFBsYXRmb3JtQ2FudmFzOjpBdXRvTG9ja2VyIGxv
Y2tlcigmbV9jYW52YXMpOwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyVGlsZXJD
aHJvbWl1bTo6dXBkYXRlRnJvbVBpeGVscyIsIHRoaXMsIDApOwotICAgICAgICB1cGRhdGVGcm9t
UGl4ZWxzKG1fdXBkYXRlUmVjdCwgbV9wYWludFJlY3QsIGxvY2tlci5waXhlbHMoKSk7Ci0gICAg
fQorICAgIG1fdGV4dHVyZVVwZGF0ZXItPnByZXBhcmVUb1VwZGF0ZShtX3BhaW50UmVjdCwgbV90
aWxlU2l6ZSwgbV90aWxpbmdEYXRhLmJvcmRlclRleGVscygpKTsKIH0KIAotdm9pZCBMYXllclRp
bGVyQ2hyb21pdW06OnVwZGF0ZUZyb21QaXhlbHMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qs
IGNvbnN0IEludFJlY3QmIHBhaW50UmVjdCwgY29uc3QgdWludDhfdCogcGFpbnRQaXhlbHMpCit2
b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6dXBsb2FkKCkKIHsKICAgICAvLyBQYWludGluZyBjb3Vs
ZCBjYXVzZSBjb21wb3NpdGluZyB0byBnZXQgdHVybmVkIG9mZiwgd2hpY2ggbWF5IGNhdXNlIHRo
ZSB0aWxlciB0byBiZWNvbWUgaW52YWxpZGF0ZWQgbWlkLXVwZGF0ZS4KICAgICBpZiAoIW1fdGls
aW5nRGF0YS50b3RhbFNpemVYKCkgfHwgIW1fdGlsaW5nRGF0YS50b3RhbFNpemVZKCkpCkBAIC0y
OTksNyArMjY5LDcgQEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZUZyb21QaXhlbAog
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsK
IAogICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207Ci0gICAgY29udGVudFJlY3RUb1Rp
bGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGNv
bnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhtX3VwZGF0ZVJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJv
dHRvbSk7CiAgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewogICAgICAg
ICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CiAgICAgICAgICAgICBUaWxl
KiB0aWxlID0gdGlsZUF0KGksIGopOwpAQCAtMzE0LDcgKzI4NCw3IEBAIHZvaWQgTGF5ZXJUaWxl
ckNocm9taXVtOjp1cGRhdGVGcm9tUGl4ZWwKICAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJz
ZWN0KGxheWVyUmVjdFRvQ29udGVudFJlY3QodGlsZS0+bV9kaXJ0eUxheWVyUmVjdCkpOwogICAg
ICAgICAgICAgLy8gUGFpbnQgcmVjdCBub3QgZ3VhcmFudGVlZCB0byBsaW5lIHVwIG9uIHRpbGUg
Ym91bmRhcmllcywgc28KICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHNvdXJjZVJlY3Qg
ZG9lc24ndCBleHRlbmQgb3V0c2lkZSBvZiBpdC4KLSAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50
ZXJzZWN0KHBhaW50UmVjdCk7CisgICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChtX3Bh
aW50UmVjdCk7CiAgICAgICAgICAgICBpZiAoc291cmNlUmVjdC5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKQEAgLTMyOCw2MyArMjk4LDIwIEBAIHZvaWQgTGF5ZXJUaWxl
ckNocm9taXVtOjp1cGRhdGVGcm9tUGl4ZWwKIAogICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRp
bGUtc3BhY2UgcmVjdGFuZ2xlIHRvIHVwbG9hZCBpbnRvLgogICAgICAgICAgICAgSW50UmVjdCBk
ZXN0UmVjdChJbnRQb2ludChzb3VyY2VSZWN0LngoKSAtIGFuY2hvci54KCksIHNvdXJjZVJlY3Qu
eSgpIC0gYW5jaG9yLnkoKSksIHNvdXJjZVJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIGlmIChk
ZXN0UmVjdC54KCkgPCAwKQotICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBp
ZiAoZGVzdFJlY3QueSgpIDwgMCkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAg
ICAgQVNTRVJUKChkZXN0UmVjdC54KCkgPj0gMCkgJiYgKGRlc3RSZWN0LnkoKSA+PSAwKSk7CiAK
ICAgICAgICAgICAgIC8vIE9mZnNldCBmcm9tIHBhaW50IHJlY3RhbmdsZSB0byB0aGlzIHRpbGUn
cyBkaXJ0eSByZWN0YW5nbGUuCi0gICAgICAgICAgICBJbnRQb2ludCBwYWludE9mZnNldChzb3Vy
Y2VSZWN0LngoKSAtIHBhaW50UmVjdC54KCksIHNvdXJjZVJlY3QueSgpIC0gcGFpbnRSZWN0Lnko
KSk7Ci0gICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueCgpIDwgMCkKLSAgICAgICAgICAgICAg
ICBDUkFTSCgpOwotICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LnkoKSA8IDApCi0gICAgICAg
ICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGlmIChwYWludE9mZnNldC54KCkgKyBkZXN0
UmVjdC53aWR0aCgpID4gcGFpbnRSZWN0LndpZHRoKCkpCi0gICAgICAgICAgICAgICAgQ1JBU0go
KTsKLSAgICAgICAgICAgIGlmIChwYWludE9mZnNldC55KCkgKyBkZXN0UmVjdC5oZWlnaHQoKSA+
IHBhaW50UmVjdC5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAg
ICAgSW50UG9pbnQgcGFpbnRPZmZzZXQoc291cmNlUmVjdC54KCkgLSBtX3BhaW50UmVjdC54KCks
IHNvdXJjZVJlY3QueSgpIC0gbV9wYWludFJlY3QueSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCgo
cGFpbnRPZmZzZXQueCgpID49IDApICYmIChwYWludE9mZnNldC55KCkgPj0gMCkpOworICAgICAg
ICAgICAgQVNTRVJUKHBhaW50T2Zmc2V0LngoKSArIGRlc3RSZWN0LndpZHRoKCkgPD0gbV9wYWlu
dFJlY3Qud2lkdGgoKSk7CisgICAgICAgICAgICBBU1NFUlQocGFpbnRPZmZzZXQueSgpICsgZGVz
dFJlY3QuaGVpZ2h0KCkgPD0gbV9wYWludFJlY3QuaGVpZ2h0KCkpOwogCisgICAgICAgICAgICB0
aWxlLT50ZXh0dXJlKCktPmJpbmRUZXh0dXJlKCk7CiAgICAgICAgICAgICBjb25zdCBHQzNEaW50
IGZpbHRlciA9IG1fdGlsaW5nRGF0YS5ib3JkZXJUZXhlbHMoKSA/IEdyYXBoaWNzQ29udGV4dDNE
OjpMSU5FQVIgOiBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVDsKICAgICAgICAgICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBmaWx0ZXIpKTsKICAg
ICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVS
LCBmaWx0ZXIpKTsKIAotICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5iaW5kVGV4dHVyZSgp
OwotCi0gICAgICAgICAgICBpZiAobV91c2VNYXBTdWJGb3JVcGxvYWRzKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gVXBsb2FkIHRpbGUgZGF0YSB2aWEgYSBtYXBwZWQgdHJhbnNmZXIgYnVmZmVyCi0g
ICAgICAgICAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lvbnMgPSBzdGF0aWNf
Y2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKSk7Ci0g
ICAgICAgICAgICAgICAgdWludDhfdCogcGl4ZWxEZXN0ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+
KGV4dGVuc2lvbnMtPm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgMCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCksIGRlc3RSZWN0LndpZHRo
KCksIGRlc3RSZWN0LmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIEV4dGVuc2lvbnMzRENocm9taXVtOjpXUklURV9PTkxZ
KSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBpeGVsRGVzdCk7Ci0gICAgICAgICAgICAgICAg
aWYgKHBhaW50UmVjdC53aWR0aCgpID09IHNvdXJjZVJlY3Qud2lkdGgoKSAmJiAhcGFpbnRPZmZz
ZXQueCgpKQotICAgICAgICAgICAgICAgICAgICBtZW1jcHkocGl4ZWxEZXN0LCAmcGFpbnRQaXhl
bHNbNCAqIHBhaW50T2Zmc2V0LnkoKSAqIHBhaW50UmVjdC53aWR0aCgpXSwgcGFpbnRSZWN0Lndp
ZHRoKCkgKiBkZXN0UmVjdC5oZWlnaHQoKSAqIDQpOwotICAgICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAvLyBTdHJpZGVzIG5vdCBlcXVhbCwgc28gZG8gYSByb3ctYnkt
cm93IG1lbWNweSBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICAvLyBwYWludCByZXN1bHRz
IGludG8gdGhlIHBpeGVsRGVzdAotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAw
OyByb3cgPCBkZXN0UmVjdC5oZWlnaHQoKTsgKytyb3cpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtZW1jcHkoJnBpeGVsRGVzdFtkZXN0UmVjdC53aWR0aCgpICogNCAqIHJvd10sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJnBhaW50UGl4ZWxzWzQgKiAocGFpbnRPZmZzZXQueCgp
ICsgKHBhaW50T2Zmc2V0LnkoKSArIHJvdykgKiBwYWludFJlY3Qud2lkdGgoKSldLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0LndpZHRoKCkgKiA0KTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy0+dW5tYXBUZXhTdWJJbWFnZTJE
Q0hST01JVU0ocGl4ZWxEZXN0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgY29uc3QgdWludDhfdCogcGl4ZWxTb3VyY2U7Ci0gICAgICAgICAgICAgICAgaWYgKHBhaW50
UmVjdC53aWR0aCgpID09IHNvdXJjZVJlY3Qud2lkdGgoKSAmJiAhcGFpbnRPZmZzZXQueCgpKQot
ICAgICAgICAgICAgICAgICAgICBwaXhlbFNvdXJjZSA9ICZwYWludFBpeGVsc1s0ICogcGFpbnRP
ZmZzZXQueSgpICogcGFpbnRSZWN0LndpZHRoKCldOwotICAgICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAvLyBTdHJpZGVzIG5vdCBlcXVhbCwgc28gZG8gYSByb3ctYnkt
cm93IG1lbWNweSBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICAvLyBwYWludCByZXN1bHRz
IGludG8gYSB0ZW1wIGJ1ZmZlciBmb3IgdXBsb2FkaW5nLgotICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCByb3cgPSAwOyByb3cgPCBkZXN0UmVjdC5oZWlnaHQoKTsgKytyb3cpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtZW1jcHkoJm1fdGlsZVBpeGVsc1tkZXN0UmVjdC53aWR0aCgpICog
NCAqIHJvd10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhaW50UGl4ZWxzWzQg
KiAocGFpbnRPZmZzZXQueCgpICsgKHBhaW50T2Zmc2V0LnkoKSArIHJvdykgKiBwYWludFJlY3Qu
d2lkdGgoKSldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0LndpZHRo
KCkgKiA0KTsKLQotICAgICAgICAgICAgICAgICAgICBwaXhlbFNvdXJjZSA9ICZtX3RpbGVQaXhl
bHNbMF07Ci0gICAgICAgICAgICAgICAgfQotCi0KLSAgICAgICAgICAgICAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
MCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCksIGRlc3RSZWN0LndpZHRoKCksIGRlc3RSZWN0
LmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUsIHBpeGVsU291cmNlKSk7Ci0gICAgICAgICAgICB9Ci0KKyAgICAgICAgICAg
IG1fdGV4dHVyZVVwZGF0ZXItPnVwZGF0ZVRleHR1cmVSZWN0KHRpbGUtPnRleHR1cmUoKSwgc291
cmNlUmVjdCwgZGVzdFJlY3QpOwogICAgICAgICAgICAgdGlsZS0+Y2xlYXJEaXJ0eSgpOwogICAg
ICAgICB9CiAgICAgfQpAQCAtNDMwLDcgKzM1NywxMiBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1
bTo6ZHJhdyhjb25zdCBJbnRSCiAgICAgICAgICAgICBmbG9hdCB0ZXhUcmFuc2xhdGVZID0gdGV4
T2Zmc2V0LnkoKSAvIHRpbGVIZWlnaHQ7CiAgICAgICAgICAgICBmbG9hdCB0ZXhTY2FsZVggPSB0
aWxlUmVjdC53aWR0aCgpIC8gdGlsZVdpZHRoOwogICAgICAgICAgICAgZmxvYXQgdGV4U2NhbGVZ
ID0gdGlsZVJlY3QuaGVpZ2h0KCkgLyB0aWxlSGVpZ2h0OwotCisgICAgICAgICAgICAvLyBPcGVu
R0wgY29vcmRpbmF0ZSBzeXN0ZW0gaXMgYm90dG9tLXVwLgorICAgICAgICAgICAgLy8gSWYgdGls
ZSB0ZXh0dXJlIGlzIHRvcC1kb3duLCB3ZSBuZWVkIHRvIGZsaXAgdGhlIHRleHR1cmUgY29vcmRp
bmF0ZXMuCisgICAgICAgICAgICBpZiAobV90ZXh0dXJlVXBkYXRlci0+b3JpZW50YXRpb24oKSA9
PSBMYXllclRleHR1cmVVcGRhdGVyOjpUb3BEb3duT3JpZW50YXRpb24pIHsKKyAgICAgICAgICAg
ICAgICB0ZXhUcmFuc2xhdGVZICs9IDEuMDsKKyAgICAgICAgICAgICAgICB0ZXhTY2FsZVkgKj0g
LTEuMDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4
dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIHRpbGVNYXRyaXgsIHRpbGVS
ZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpLCBvcGFjaXR5LCB0ZXhUcmFuc2xhdGVYLCB0
ZXhUcmFuc2xhdGVZLCB0ZXhTY2FsZVgsIHRleFNjYWxlWSwgcHJvZ3JhbSk7CiAgICAgICAgIH0K
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRpbGVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaAkocmV2aXNpb24gODY0MzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVy
Q2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjggKzMxLDIyIEBACiAKICNpbmNsdWRl
ICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCi0jaW5jbHVkZSAi
UGxhdGZvcm1DYW52YXMuaCIKICNpbmNsdWRlICJUaWxpbmdEYXRhLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hUcmFpdHMuaD4KLSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDNEOwogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOwotCi1jbGFzcyBUaWxlUGFp
bnRJbnRlcmZhY2UgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSA9IDA7Ci19OworY2xh
c3MgTGF5ZXJUZXh0dXJlVXBkYXRlcjsKIAogY2xhc3MgTGF5ZXJUaWxlckNocm9taXVtIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShMYXllclRpbGVyQ2hyb21pdW0pOwogcHVibGljOgogICAg
IGVudW0gQm9yZGVyVGV4ZWxPcHRpb24geyBIYXNCb3JkZXJUZXhlbHMsIE5vQm9yZGVyVGV4ZWxz
IH07CiAKLSAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IGNyZWF0ZShM
YXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQm9yZGVyVGV4
ZWxPcHRpb24pOworICAgIHN0YXRpYyBQYXNzT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gY3Jl
YXRlKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRl
cj4sIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbik7CiAKICAgICB+
TGF5ZXJUaWxlckNocm9taXVtKCk7CiAKQEAgLTYwLDE2ICs1NCwxMCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CiAgICAgdm9p
ZCBpbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsKIAotICAgIC8vIFBhaW50IGFsbCBpbnZhbGlkYXRp
b25zIGFuZCBtaXNzaW5nIHRpbGVzIG5lZWRlZCB0byBkcmF3IHRoZSBjb250ZW50UmVjdAotICAg
IC8vIGludG8gdGhlIGludGVybmFsIGNhbnZhcy4KLSAgICB2b2lkIHVwZGF0ZShUaWxlUGFpbnRJ
bnRlcmZhY2UmIHBhaW50ZXIsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKLQorICAgIC8v
IFBhaW50IGFsbCBpbnZhbGlkYXRpb25zIGFuZCBtaXNzaW5nIHRpbGVzIG5lZWRlZCB0byBkcmF3
IHRoZSBjb250ZW50UmVjdC4KKyAgICB2b2lkIHVwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCk7CiAgICAgLy8gUmVzZXJ2ZSBhbmQgdXBsb2FkIHRpbGUgdGV4dHVyZXMgZnJvbSB0aGUg
aW50ZXJuYWwgY2FudmFzLgotICAgIHZvaWQgdXBsb2FkQ2FudmFzKCk7Ci0KLSAgICAvLyBSZXNl
cnZlIGFuZCB1cGxvYWQgdGlsZSB0ZXh0dXJlcyBmcm9tIGFuIGV4dGVybmFsbHkgcGFpbnRlZCBi
dWZmZXIuCi0gICAgdm9pZCB1cGRhdGVGcm9tUGl4ZWxzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0LCBjb25zdCBJbnRSZWN0JiBwYWludFJlY3QsIGNvbnN0IHVpbnQ4X3QqIHBpeGVscyk7Ci0K
KyAgICB2b2lkIHVwbG9hZCgpOwogICAgIC8vIERyYXcgYWxsIHRpbGVzIHRoYXQgaW50ZXJzZWN0
IHdpdGggdGhlIGNvbnRlbnQgcmVjdC4KICAgICB2b2lkIGRyYXcoY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7CiAK
QEAgLTc3LDcgKzY1LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TGF5ZXJQb3NpdGlvbihjb25z
dCBJbnRQb2ludCYgcG9zaXRpb24pOwogICAgIC8vIENoYW5nZSB0aGUgdGlsZSBzaXplLiAgVGhp
cyBtYXkgaW52YWxpZGF0ZSBhbGwgdGhlIGV4aXN0aW5nIHRpbGVzLgogICAgIHZvaWQgc2V0VGls
ZVNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSk7Ci0gICAgdm9pZCBzZXRMYXllclJlbmRlcmVyKExh
eWVyUmVuZGVyZXJDaHJvbWl1bSopOwogCiAgICAgYm9vbCBza2lwc0RyYXcoKSBjb25zdCB7IHJl
dHVybiBtX3NraXBzRHJhdzsgfQogCkBAIC04NywxMiArNzQsMTIgQEAgcHVibGljOgogICAgIExh
eWVyVGV4dHVyZSogZ2V0U2luZ2xlVGV4dHVyZSgpOwogCiBwcml2YXRlOgotICAgIExheWVyVGls
ZXJDaHJvbWl1bShMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6
ZSwgQm9yZGVyVGV4ZWxPcHRpb24pOworICAgIExheWVyVGlsZXJDaHJvbWl1bShMYXllclJlbmRl
cmVyQ2hyb21pdW0qLCBQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+LCBjb25zdCBJbnRT
aXplJiB0aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRpb24pOwogCiAgICAgY2xhc3MgVGlsZSA6IHB1
YmxpYyBSZWZDb3VudGVkPFRpbGU+IHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGls
ZSk7CiAgICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBUaWxlKFBhc3NPd25QdHI8TGF5ZXJU
ZXh0dXJlPiB0ZXgpIDogbV90ZXgodGV4KSwgbV9pKC0xKSwgbV9qKC0xKSB7fQorICAgICAgICBl
eHBsaWNpdCBUaWxlKFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlPiB0ZXgpIDogbV90ZXgodGV4KSwg
bV9pKC0xKSwgbV9qKC0xKSB7IH0KIAogICAgICAgICBMYXllclRleHR1cmUqIHRleHR1cmUoKSB7
IHJldHVybiBtX3RleC5nZXQoKTsgfQogCkBAIC0xNTcsMTkgKzE0NCwxMyBAQCBwcml2YXRlOgog
ICAgIC8vIFRpZ2h0bHkgcGFja2VkIHNldCBvZiB1bnVzZWQgdGlsZXMuCiAgICAgVmVjdG9yPFJl
ZlB0cjxUaWxlPiA+IG1fdW51c2VkVGlsZXM7CiAKLSAgICAvLyBTdGF0ZSBoZWxkIGJldHdlZW4g
dXBkYXRlIGFuZCB1cGxvYWRDYW52YXMuCisgICAgLy8gU3RhdGUgaGVsZCBiZXR3ZWVuIHVwZGF0
ZSBhbmQgdXBsb2FkLgogICAgIEludFJlY3QgbV9wYWludFJlY3Q7CiAgICAgSW50UmVjdCBtX3Vw
ZGF0ZVJlY3Q7Ci0gICAgUGxhdGZvcm1DYW52YXMgbV9jYW52YXM7Ci0KLSAgICAvLyBDYWNoZSBh
IHRpbGUtc2l6ZWQgcGl4ZWwgYnVmZmVyIHRvIGRyYXcgaW50by4KLSAgICBPd25BcnJheVB0cjx1
aW50OF90PiBtX3RpbGVQaXhlbHM7CiAKICAgICBUaWxpbmdEYXRhIG1fdGlsaW5nRGF0YTsKIAot
ICAgIC8vIFdoZXRoZXIgdGhlIHRpbGVyIHdpbGwgdXNlIEdMX0NIUk9NSVVNX21hcF9zdWIgZm9y
IHRleHR1cmUgdXBsb2Fkcy4KLSAgICBib29sIG1fdXNlTWFwU3ViRm9yVXBsb2FkczsKLQorICAg
IE93blB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBtX3RleHR1cmVVcGRhdGVyOwogICAgIExheWVy
UmVuZGVyZXJDaHJvbWl1bSogbV9sYXllclJlbmRlcmVyOwogfTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAJKHJldmlzaW9uIDg2NDM2KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgi
CiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0
dXJlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DYW52YXMuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgi
CiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCkBA
IC0xMTQsNyArMTE1LDcgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KCkKICAgICAgICAg
ICAgIG1lbWNweShwaXhlbERlc3QsIGxvY2tlci5waXhlbHMoKSwgaHVkU2l6ZS53aWR0aCgpICog
aHVkU2l6ZS5oZWlnaHQoKSAqIDQpOwogICAgICAgICAgICAgZXh0ZW5zaW9ucy0+dW5tYXBUZXhT
dWJJbWFnZTJEQ0hST01JVU0ocGl4ZWxEZXN0KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBHTEMoY29udGV4dC5nZXQoKSwgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIGNhbnZhcy5zaXplKCku
d2lkdGgoKSwgY2FudmFzLnNpemUoKS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBsb2NrZXIucGl4ZWxzKCkpKTsK
KyAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgY2FudmFzLnNp
emUoKS53aWR0aCgpLCBjYW52YXMuc2l6ZSgpLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGxvY2tlci5waXhlbHMo
KSkpOwogICAgIH0KIAogICAgIC8vIERyYXcgdGhlIEhVRCBvbnRvIHRoZSBkZWZhdWx0IHJlbmRl
ciBzdXJmYWNlLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2NDQz
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxMiBAQAorMjAxMS0wNS0xMyAgQWxvayBQcml5YWRhcnNoaSAgPGFsb2twQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBTcGxpdCBjYW52YXMgZnJvbSBMYXllclRpbGVyQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNzE5CisKKyAgICAgICAgKiBzcmMvV2Vi
Vmlld0ltcGwuY3BwOgorCiAyMDExLTA1LTEzICBCcmV0dCBXaWxzb24gIDxicmV0dHdAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA4NjQzNikKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzIsNiArNzIsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJLZXlib2FyZENvZGVzLmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2lu
Y2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3Ry
eS5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAg
LTI0MDksNyArMjQxMCw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmludmFsaWRhdGVSb290TGF5ZXJS
ZWMKICAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKIH0KIAotY2xhc3MgV2ViVmlld0lt
cGxDb250ZW50UGFpbnRlciA6IHB1YmxpYyBUaWxlUGFpbnRJbnRlcmZhY2UgeworY2xhc3MgV2Vi
Vmlld0ltcGxDb250ZW50UGFpbnRlciA6IHB1YmxpYyBMYXllclBhaW50ZXJDaHJvbWl1bSB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcik7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8V2ViVmlld0ltcGxDb250ZW50UGFpbnRlcio+IGNy
ZWF0ZShXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93513</attachid>
            <date>2011-05-13 14:36:24 -0700</date>
            <delta_ts>2011-05-16 08:46:51 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>layer.txt</filename>
            <type>text/plain</type>
            <size>57949</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2NDYwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODAgQEAKKzIwMTEtMDUtMTMgIEFsb2sgUHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBTcGxpdCBjYW52YXMgZnJvbSBMYXll
clRpbGVyQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTYwNzE5CisKKyAgICAgICAgTGF5ZXJUaWxlckNocm9taXVtIG5vdyBqdXN0IGRvZXMg
dGlsaW5nLiBJdCBkZWxlZ2F0ZXMgdGhlIHRhc2sgb2YgcGFpbnRpbmcgYW5kIHVwZGF0aW5nIHRl
eHR1cmVzIHRvIExheWVyVGV4dHVyZVVwZGF0ZXIuCisgICAgICAgIEFsc28gYWJzdHJhY3RlZCBM
YXllclRleHR1cmVTdWJJbWFnZSB0byB1cGxvYWQgdGV4dHVyZSBwaXhlbHMuCisKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vVHJhY2VFdmVudC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXllckNo
cm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjp+Q29udGVu
dExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06
OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNo
cm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXll
ckNocm9taXVtOjpzZXRMYXllclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRM
YXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OkltYWdl
TGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVy
ZVVwZGF0ZXI6On5JbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyOjpvcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6aW1hZ2VSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
VGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUGFpbnRlckNocm9taXVtLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jvb3RMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERyYXdMYXll
cnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXll
cnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVN1YkltYWdlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVT
dWJJbWFnZTo6TGF5ZXJUZXh0dXJlU3ViSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
ZXh0dXJlU3ViSW1hZ2U6On5MYXllclRleHR1cmVTdWJJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRleHR1cmVTdWJJbWFnZTo6c2V0U3ViSW1hZ2VTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyVGV4dHVyZVN1YkltYWdlOjp1cGxvYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmg6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyOjpMYXllclRleHR1cmVVcGRh
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXI6On5MYXllclRleHR1
cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXI6OmNvbnRl
eHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVw
ZGF0ZXJDYW52YXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVw
ZGF0ZXJDYW52YXM6OkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhczo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpMYXllclRleHR1cmVVcGRhdGVyQml0
bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnByZXBh
cmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyQml0bWFw
Ojp1cGRhdGVUZXh0dXJlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6On5MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6OmNvbnRlbnRSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6On5MYXllclRl
eHR1cmVVcGRhdGVyQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0
ZXJCaXRtYXA6Om9yaWVudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
ckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVt
OjpMYXllclRpbGVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9t
aXVtOjpzZXRUaWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06
OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnVwbG9hZCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmRyYXcpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpUaWxlOjpUaWxlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmRyYXcpOgorCiAyMDExLTA1LTEzICBBbGV4
ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEpv
c2VwaCBQZWNvcmFyby4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDg2NDYwKQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC00MDI2LDEwICs0
MDI2LDE2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VM
YXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUGFpbnRlckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmUuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmUuaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3Vi
SW1hZ2UuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVTdWJJbWFnZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJv
bWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGlsZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1RyYWNlRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9UcmFjZUV2ZW50LmgJKHJldmlzaW9uIDg2NDYwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vVHJhY2VFdmVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw3IEBACiAjZGVmaW5lIFRyYWNlRXZlbnRfaAogCiAjaW5jbHVkZSAiUGxh
dGZvcm1CcmlkZ2UuaCIKKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KIAogLy8gSW1wbGVt
ZW50YXRpb24gZGV0YWlsOiB0cmFjZSBldmVudCBtYWNyb3MgY3JlYXRlIHRlbXBvcmFyeSB2YXJp
YWJsZXMKIC8vIHRvIGtlZXAgaW5zdHJ1bWVudGF0aW9uIG92ZXJoZWFkIGxvdy4gVGhlc2UgbWFj
cm9zIGdpdmUgZWFjaCB0ZW1wb3JhcnkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5jcHAJKHJldmlzaW9uIDg2NDYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw4ICszNiwxMSBAQAogCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgi
CiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0
dXJlLmgiCisjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oIgorI2luY2x1ZGUg
IkxheWVyVGlsZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgog
I2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKIApAQCAtNTEsMjQgKzU0LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPENvbnRlbnRMYXll
ckNocm9taXVtPiBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSogb3duZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb250ZW50TGF5ZXJDaHJv
bWl1bShvd25lcikpOwotfQotCi1Db250ZW50TGF5ZXJDaHJvbWl1bTo6Q29udGVudExheWVyQ2hy
b21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKLSAgICA6IExheWVyQ2hyb21pdW0o
b3duZXIpCi0gICAgLCBtX3RpbGluZ09wdGlvbihDb250ZW50TGF5ZXJDaHJvbWl1bTo6QXV0b1Rp
bGUpCi17Ci19Ci0KLUNvbnRlbnRMYXllckNocm9taXVtOjp+Q29udGVudExheWVyQ2hyb21pdW0o
KQotewotICAgIG1fdGlsZXIuY2xlYXIoKTsKLSAgICBMYXllckNocm9taXVtOjpjbGVhbnVwUmVz
b3VyY2VzKCk7Ci19Ci0KLWNsYXNzIENvbnRlbnRMYXllclBhaW50ZXIgOiBwdWJsaWMgVGlsZVBh
aW50SW50ZXJmYWNlIHsKK2NsYXNzIENvbnRlbnRMYXllclBhaW50ZXIgOiBwdWJsaWMgTGF5ZXJQ
YWludGVyQ2hyb21pdW0gewogcHVibGljOgogICAgIGV4cGxpY2l0IENvbnRlbnRMYXllclBhaW50
ZXIoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKICAgICAgICAgOiBtX293bmVyKG93bmVy
KQpAQCAtODUsMTQgKzcxLDI3IEBAIHByaXZhdGU6CiAgICAgR3JhcGhpY3NMYXllckNocm9taXVt
KiBtX293bmVyOwogfTsKIAorUGFzc1JlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bT4gQ29udGVu
dExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29udGVudExheWVyQ2hyb21pdW0ob3duZXIpKTsKK30K
KworQ29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXllckNocm9taXVtKEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bSogb3duZXIpCisgICAgOiBMYXllckNocm9taXVtKG93bmVyKQorICAgICwgbV90
aWxpbmdPcHRpb24oQ29udGVudExheWVyQ2hyb21pdW06OkF1dG9UaWxlKQoreworfQorCitDb250
ZW50TGF5ZXJDaHJvbWl1bTo6fkNvbnRlbnRMYXllckNocm9taXVtKCkKK3sKKyAgICBjbGVhbnVw
UmVzb3VyY2VzKCk7Cit9CisKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVu
dHNJZkRpcnR5KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0KQogewogICAgIEFTU0VS
VChkcmF3c0NvbnRlbnQoKSk7CiAgICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CiAKLSAgICBj
cmVhdGVUaWxlcklmTmVlZGVkKCk7Ci0KLSAgICBDb250ZW50TGF5ZXJQYWludGVyIHBhaW50ZXIo
bV9vd25lcik7CiAgICAgdXBkYXRlTGF5ZXJTaXplKGxheWVyQm91bmRzKCkuc2l6ZSgpKTsKIAog
ICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVyUmVjdCh0YXJnZXRTdXJmYWNlUmVj
dCk7CkBAIC0xMDMsMTUgKzEwMiwyNiBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpwYWlu
dENvbnRlbnRzCiAgICAgZGlydHkuaW50ZXJzZWN0KGxheWVyQm91bmRzKCkpOwogICAgIG1fdGls
ZXItPmludmFsaWRhdGVSZWN0KGRpcnR5KTsKIAotICAgIG1fdGlsZXItPnVwZGF0ZShwYWludGVy
LCBsYXllclJlY3QpOworICAgIG1fdGlsZXItPnVwZGF0ZShsYXllclJlY3QpOwogICAgIG1fZGly
dHlSZWN0ID0gRmxvYXRSZWN0KCk7CiB9CiAKK3ZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmNs
ZWFudXBSZXNvdXJjZXMoKQoreworICAgIG1fdGlsZXIuY2xlYXIoKTsKKyAgICBMYXllckNocm9t
aXVtOjpjbGVhbnVwUmVzb3VyY2VzKCk7Cit9CisKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06
OnNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQog
ewogICAgIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVyZXIobGF5ZXJSZW5kZXJlcik7CiAg
ICAgY3JlYXRlVGlsZXJJZk5lZWRlZCgpOwotICAgIG1fdGlsZXItPnNldExheWVyUmVuZGVyZXIo
bGF5ZXJSZW5kZXJlcik7Cit9CisKK1Bhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gQ29u
dGVudExheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVyKCkKK3sKKyAgICBMYXllclBh
aW50ZXJDaHJvbWl1bSogcGFpbnRlciA9IG5ldyBDb250ZW50TGF5ZXJQYWludGVyKG1fb3duZXIp
OworICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcChsYXll
clJlbmRlcmVyQ29udGV4dCgpLCBhZG9wdFB0cihwYWludGVyKSwgbGF5ZXJSZW5kZXJlcigpLT5j
b250ZXh0U3VwcG9ydHNNYXBTdWIoKSkpOwogfQogCiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6dGlsaW5nVHJhbnNmb3JtKCkKQEAgLTE4NiwxNiArMTk2LDI2IEBA
IHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXcoY29uc3QgSW4KICAgICAgICAgbV90aWxl
ci0+ZHJhdyhsYXllclJlY3QsIHRyYW5zZm9ybSwgY2NMYXllckltcGwoKS0+ZHJhd09wYWNpdHko
KSk7CiB9CiAKK2Jvb2wgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fb3duZXIgJiYgbV9vd25lci0+ZHJhd3NDb250ZW50KCkgJiYgKCFt
X3RpbGVyIHx8ICFtX3RpbGVyLT5za2lwc0RyYXcoKSk7Cit9CisKIHZvaWQgQ29udGVudExheWVy
Q2hyb21pdW06OmNyZWF0ZVRpbGVySWZOZWVkZWQoKQogewogICAgIGlmIChtX3RpbGVyKQogICAg
ICAgICByZXR1cm47Ci0gICAgbV90aWxlciA9IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKGxh
eWVyUmVuZGVyZXIoKSwgSW50U2l6ZShkZWZhdWx0VGlsZVNpemUsIGRlZmF1bHRUaWxlU2l6ZSks
IExheWVyVGlsZXJDaHJvbWl1bTo6SGFzQm9yZGVyVGV4ZWxzKTsKKworICAgIG1fdGlsZXIgPSBM
YXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSgKKyAgICAgICAgbGF5ZXJSZW5kZXJlcigpLAorICAg
ICAgICBjcmVhdGVUZXh0dXJlVXBkYXRlcigpLAorICAgICAgICBJbnRTaXplKGRlZmF1bHRUaWxl
U2l6ZSwgZGVmYXVsdFRpbGVTaXplKSwKKyAgICAgICAgTGF5ZXJUaWxlckNocm9taXVtOjpIYXNC
b3JkZXJUZXhlbHMpOwogfQogCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb21w
b3NpdG9yUmVzb3VyY2VzKCkKIHsKLSAgICBtX3RpbGVyLT51cGxvYWRDYW52YXMoKTsKKyAgICBt
X3RpbGVyLT51cGxvYWQoKTsKIH0KIAogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6c2V0VGls
aW5nT3B0aW9uKFRpbGluZ09wdGlvbiBvcHRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmgJKHJldmlzaW9uIDg2NDYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpA
QCAtMzUsMTIgKzM1LDEyIEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAj
aW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkxheWVyVGlsZXJDaHJvbWl1bS5o
IgotI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgTGF5ZXJUZXh0dXJlOworY2xhc3MgTGF5ZXJUaWxlckNocm9taXVtOworY2xhc3MgTGF5
ZXJUZXh0dXJlVXBkYXRlcjsKIAogLy8gQSBMYXllciB0aGF0IHJlcXVpcmVzIGEgR3JhcGhpY3ND
b250ZXh0IHRvIHJlbmRlciBpdHMgY29udGVudHMuCiBjbGFzcyBDb250ZW50TGF5ZXJDaHJvbWl1
bSA6IHB1YmxpYyBMYXllckNocm9taXVtIHsKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBiaW5kQ29udGVudHNUZXh0dXJlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZHJhdyhjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCk7Ci0gICAgdmlydHVhbCBib29s
IGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXIgJiYgbV9vd25lci0+ZHJhd3ND
b250ZW50KCkgJiYgKCFtX3RpbGVyIHx8ICFtX3RpbGVyLT5za2lwc0RyYXcoKSk7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBleHBs
aWNpdCBDb250ZW50TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsK
QEAgLTY2LDggKzY2LDExIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxh
eWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkNvbnRlbnRMYXllciI7IH0KICAgICB2
aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkg
Y29uc3Q7CiAKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFJlc291cmNlcygpOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwogCisgICAg
dmlydHVhbCBQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IGNyZWF0ZVRleHR1cmVVcGRh
dGVyKCk7CisKICAgICB2aXJ0dWFsIEludFJlY3QgbGF5ZXJCb3VuZHMoKSBjb25zdDsKIAogICAg
IHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggdGlsaW5nVHJhbnNmb3JtKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21p
dW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDg2NDYwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsNDUgQEAKICNpbmNsdWRlICJJbWFnZS5oIgog
I2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyVGV4dHVy
ZS5oIgorI2luY2x1ZGUgIkxheWVyVGV4dHVyZVN1YkltYWdlLmgiCisjaW5jbHVkZSAiTGF5ZXJU
ZXh0dXJlVXBkYXRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEltYWdlTGF5
ZXJUZXh0dXJlVXBkYXRlciA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyIHsKK3B1YmxpYzoK
KyAgICBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQs
IGNvbnN0IFBsYXRmb3JtSW1hZ2UmIGltYWdlLCBib29sIHVzZU1hcFRleFN1YkltYWdlKQorICAg
ICAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXIoY29udGV4dCkKKyAgICAgICAgLCBtX2ltYWdlKGlt
YWdlKQorICAgICAgICAsIG1fdGV4U3ViSW1hZ2UodXNlTWFwVGV4U3ViSW1hZ2UpCisgICAgewor
ICAgIH0KKyAgICB2aXJ0dWFsIH5JbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIoKSB7IH0KKworICAg
IHZpcnR1YWwgT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSB7IHJldHVybiBMYXllclRleHR1cmVV
cGRhdGVyOjpCb3R0b21VcE9yaWVudGF0aW9uOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFy
ZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxl
U2l6ZSwgaW50IGJvcmRlclRleGVscykKKyAgICB7CisgICAgICAgIEFTU0VSVChpbWFnZVJlY3Qo
KS5jb250YWlucyhjb250ZW50UmVjdCkpOworICAgICAgICBtX3RleFN1YkltYWdlLnNldFN1Yklt
YWdlU2l6ZSh0aWxlU2l6ZSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1
cmVSZWN0KExheWVyVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCisgICAgeworICAgICAgICB0ZXh0dXJlLT5iaW5kVGV4
dHVyZSgpOworICAgICAgICBtX3RleFN1YkltYWdlLnVwbG9hZChtX2ltYWdlLnBpeGVscygpLCBp
bWFnZVJlY3QoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QsIGNvbnRleHQoKSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEludFJlY3QgaW1hZ2VSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBJbnRSZWN0KEludFBvaW50KDAsIDApLCBtX2ltYWdlLnNpemUoKSk7CisgICAgfQorCisg
ICAgY29uc3QgUGxhdGZvcm1JbWFnZSYgbV9pbWFnZTsKKyAgICBMYXllclRleHR1cmVTdWJJbWFn
ZSBtX3RleFN1YkltYWdlOworfTsKKwogUGFzc1JlZlB0cjxJbWFnZUxheWVyQ2hyb21pdW0+IElt
YWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiB7
CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUxheWVyQ2hyb21pdW0ob3duZXIpKTsKQEAg
LTgwLDEzICsxMTYsMTggQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJ
ZgogICAgICAgICAgICAgbV90aWxlci0+aW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0KTsKICAgICAg
ICAgICAgIG1fZGlydHlSZWN0ID0gSW50UmVjdCgpOwogICAgICAgICB9CisgICAgICAgIG1fdGls
ZXItPnVwZGF0ZShwYWludFJlY3QpOwogICAgIH0KIH0KIAogdm9pZCBJbWFnZUxheWVyQ2hyb21p
dW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQogewotICAgIEludFJlY3QgcGFpbnRSZWN0
KEludFBvaW50KDAsIDApLCBtX2RlY29kZWRJbWFnZS5zaXplKCkpOwotICAgIG1fdGlsZXItPnVw
ZGF0ZUZyb21QaXhlbHMocGFpbnRSZWN0LCBwYWludFJlY3QsIG1fZGVjb2RlZEltYWdlLnBpeGVs
cygpKTsKKyAgICBtX3RpbGVyLT51cGxvYWQoKTsKK30KKworUGFzc093blB0cjxMYXllclRleHR1
cmVVcGRhdGVyPiBJbWFnZUxheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVyKCkKK3sK
KyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcihsYXllclJl
bmRlcmVyQ29udGV4dCgpLCBtX2RlY29kZWRJbWFnZSwgbGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0
U3VwcG9ydHNNYXBTdWIoKSkpOwogfQogCiBJbnRSZWN0IEltYWdlTGF5ZXJDaHJvbWl1bTo6bGF5
ZXJCb3VuZHMoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgJKHJldmlz
aW9uIDg2NDYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDcgQEAgcHVi
bGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJp
bmcoKSBjb25zdCB7IHJldHVybiAiSW1hZ2VMYXllciI7IH0KIAorICAgIHZpcnR1YWwgUGFzc093
blB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGVUZXh0dXJlVXBkYXRlcigpOwogICAgIHZp
cnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggdGlsaW5nVHJhbnNmb3JtKCk7CiAgICAgdmlydHVh
bCBJbnRSZWN0IGxheWVyQm91bmRzKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUGFpbnRlckNocm9taXVtLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJQYWlu
dGVyQ2hyb21pdW0uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUGFpbnRlckNocm9taXVtLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgTGF5ZXJQYWludGVyQ2hyb21pdW1faAorI2Rl
ZmluZSBMYXllclBhaW50ZXJDaHJvbWl1bV9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0Owor
Y2xhc3MgSW50UmVjdDsKKworY2xhc3MgTGF5ZXJQYWludGVyQ2hyb21pdW0geworcHVibGljOgor
ICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8v
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNlbmRpZiAvLyBMYXllclBhaW50ZXJDaHJv
bWl1bV9oCisKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUGFpbnRlckNocm9taXVtLmgKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwCShyZXZpc2lvbiA4NjQ2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDcgKzQwLDkgQEAKICNpbmNsdWRlICJHZW9tZXRyeUJpbmRpbmcuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNs
dWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyVGV4dHVyZS5oIgor
I2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCIKICNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFu
YWdlci5oIgpAQCAtOTMsNyArOTUsNyBAQCBzdGF0aWMgYm9vbCBpc1NjYWxlT3JUcmFuc2xhdGlv
bihjb25zdCBUCiAKIH0KIAotUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQsIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQpCitQYXNz
UmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVh
dGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwgUGFzc093blB0cjxMYXll
clBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBhaW50KQogewogICAgIGlmICghY29udGV4dCkKICAg
ICAgICAgcmV0dXJuIDA7CkBAIC0xMDYsMTAgKzEwOCw5IEBAIFBhc3NSZWZQdHI8TGF5ZXJSZW5k
ZXJlckNocm9taXVtPiBMYXllclIKIH0KIAogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJl
bmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NPd25QdHI8VGls
ZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBjb250
ZW50UGFpbnQpCiAgICAgOiBtX3ZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoLTEsIC0x
KSkKICAgICAsIG1fcm9vdExheWVyKDApCi0gICAgLCBtX3Jvb3RMYXllckNvbnRlbnRQYWludChj
b250ZW50UGFpbnQpCiAgICAgLCBtX2N1cnJlbnRTaGFkZXIoMCkKICAgICAsIG1fY3VycmVudFJl
bmRlclN1cmZhY2UoMCkKICAgICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQpAQCAtMTI1
LDcgKzEyNiw5IEBAIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm8KICAg
ICBpZiAobV9jb250ZXh0U3VwcG9ydHNNYXBTdWIpCiAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9DSFJPTUlVTV9tYXBfc3ViIik7CiAgICAgbV9o
YXJkd2FyZUNvbXBvc2l0aW5nID0gaW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKTsKLSAgICBtX3Jv
b3RMYXllckNvbnRlbnRUaWxlciA9IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIElu
dFNpemUoMjU2LCAyNTYpLCBMYXllclRpbGVyQ2hyb21pdW06Ok5vQm9yZGVyVGV4ZWxzKTsKKwor
ICAgIExheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyID0gbmV3IExheWVyVGV4dHVy
ZVVwZGF0ZXJCaXRtYXAobV9jb250ZXh0LmdldCgpLCBjb250ZW50UGFpbnQsIG1fY29udGV4dFN1
cHBvcnRzTWFwU3ViKTsKKyAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlciA9IExheWVyVGlsZXJD
aHJvbWl1bTo6Y3JlYXRlKHRoaXMsIGFkb3B0UHRyKHRleHR1cmVVcGRhdGVyKSwgSW50U2l6ZSgy
NTYsIDI1NiksIExheWVyVGlsZXJDaHJvbWl1bTo6Tm9Cb3JkZXJUZXhlbHMpOwogICAgIEFTU0VS
VChtX3Jvb3RMYXllckNvbnRlbnRUaWxlcik7CiAKICAgICBtX2hlYWRzVXBEaXNwbGF5ID0gQ0NI
ZWFkc1VwRGlzcGxheTo6Y3JlYXRlKHRoaXMpOwpAQCAtMTY1LDcgKzE2OCw3IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjppbnZhbGlkYXRlUm8KIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cygpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyQ29udGVudHMiLCB0aGlzLCAwKTsKLSAg
ICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlci0+dXBkYXRlKCptX3Jvb3RMYXllckNvbnRlbnRQYWlu
dCwgbV92aWV3cG9ydFZpc2libGVSZWN0KTsKKyAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlci0+
dXBkYXRlKG1fdmlld3BvcnRWaXNpYmxlUmVjdCk7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3Um9vdExheWVyKCkKQEAgLTE3Myw3ICsxNzYsNiBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd1Jvb3RMYXllCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2Ny
b2xsOwogICAgIHNjcm9sbC50cmFuc2xhdGUoLW1fdmlld3BvcnRWaXNpYmxlUmVjdC54KCksIC1t
X3ZpZXdwb3J0VmlzaWJsZVJlY3QueSgpKTsKIAotICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVy
LT51cGxvYWRDYW52YXMoKTsKICAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlci0+ZHJhdyhtX3Zp
ZXdwb3J0VmlzaWJsZVJlY3QsIHNjcm9sbCwgMS4wZik7CiB9CiAKQEAgLTIxMiw3ICsyMTQsNiBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhCiAgICAgICAgIHJldHVy
bjsKIAogICAgIExheWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotCiAgICAgdXBkYXRl
TGF5ZXJzKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogCiAgICAgLy8gQmVmb3JlIGRyYXdMYXll
cnM6CkBAIC0zMTcsNiArMzE4LDggQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0
ZUxheWVycwogLy8gIH0KIAogICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXNSZWN1cnNpdmUo
bV9yb290TGF5ZXIuZ2V0KCkpOworICAgIC8vIFVwZGF0ZSBjb21wb3NpdG9yIHJlc291cmNlcyBm
b3Igcm9vdCBsYXllci4KKyAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlci0+dXBsb2FkKCk7CiAK
ICAgICAvLyBBZnRlciB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlLCBzZXQvd2Fp
dCBsYXRjaGVzIGZvciBhbGwgY2hpbGQKICAgICAvLyBjb250ZXh0cy4gVGhpcyB3aWxsIHByZXZl
bnQgdGhlIGNvbXBvc2l0b3IgZnJvbSB1c2luZyBhbnkgb2YgdGhlIGNoaWxkCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAkocmV2aXNpb24gODY0NjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTcgKzU4LDIyIEBACiAjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgogI2VuZGlmCiAKKyNpZiBVU0UoU0tJQSkKK2NsYXNzIFNrQ2FudmFzOworI2VuZGlm
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NIZWFkc1VwRGlzcGxheTsKIGNsYXNz
IENDTGF5ZXJJbXBsOwogY2xhc3MgR2VvbWV0cnlCaW5kaW5nOwogY2xhc3MgR3JhcGhpY3NDb250
ZXh0M0Q7CitjbGFzcyBMYXllclBhaW50ZXJDaHJvbWl1bTsKIAogLy8gQ2xhc3MgdGhhdCBoYW5k
bGVzIGRyYXdpbmcgb2YgY29tcG9zaXRlZCByZW5kZXIgbGF5ZXJzIHVzaW5nIEdMLgogY2xhc3Mg
TGF5ZXJSZW5kZXJlckNocm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJSZW5kZXJlckNo
cm9taXVtPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNo
cm9taXVtPiBjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8
VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQpOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PExheWVyUmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+LCBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBjb250ZW50UGFpbnQpOwogCiAg
ICAgfkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpOwogCkBAIC0xNDgsNyArMTUzLDcgQEAgcHJpdmF0
ZToKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gTGF5ZXJMaXN0Owog
ICAgIHR5cGVkZWYgSGFzaE1hcDxHcmFwaGljc0NvbnRleHQzRCosIGludD4gQ2hpbGRDb250ZXh0
TWFwOwogCi0gICAgZXhwbGljaXQgTGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBh
aW50KTsKKyAgICBleHBsaWNpdCBMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRlbnRQ
YWludCk7CiAKICAgICB2b2lkIHVwZGF0ZUxheWVycyhMYXllckxpc3QmIHJlbmRlclN1cmZhY2VM
YXllckxpc3QpOwogICAgIHZvaWQgdXBkYXRlUm9vdExheWVyQ29udGVudHMoKTsKQEAgLTE4OCwx
NCArMTkzLDEyIEBAIHByaXZhdGU6CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9wcm9qZWN0
aW9uTWF0cml4OwogCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fcm9vdExheWVyOwotICAg
IE93blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IG1fcm9vdExheWVyQ29udGVudFBhaW50OwogICAg
IE93blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IG1fcm9vdExheWVyQ29udGVudFRpbGVyOwogCiAg
ICAgYm9vbCBtX2hhcmR3YXJlQ29tcG9zaXRpbmc7CiAKICAgICB1bnNpZ25lZCBtX2N1cnJlbnRT
aGFkZXI7CiAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBtX2N1cnJlbnRSZW5kZXJTdXJmYWNl
OwotCiAgICAgdW5zaWduZWQgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkOwogICAgIGJvb2wgbV9j
b21wb3NpdGVPZmZzY3JlZW47CiAKQEAgLTIzMyw3ICsyMzYsNiBAQCBwcml2YXRlOgogCiAgICAg
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CiAgICAgQ2hpbGRDb250ZXh0TWFw
IG1fY2hpbGRDb250ZXh0czsKLQogICAgIC8vIElmIHRydWUsIHRoZSBjaGlsZCBjb250ZXh0cyB3
ZXJlIGNvcGllZCB0byB0aGUgY29tcG9zaXRvciB0ZXh0dXJlIHRhcmdldHMKICAgICAvLyBhbmQg
dGhlIGNvbXBvc2l0b3Igd2lsbCBuZWVkIHRvIHdhaXQgb24gdGhlIHByb3BlciBsYXRjaGVzIGJl
Zm9yZSB1c2luZwogICAgIC8vIHRoZSB0YXJnZXQgdGV4dHVyZXMuIElmIGZhbHNlLCB0aGUgY29t
cG9zaXRvciBpcyByZXVzaW5nIHRoZSB0ZXh0dXJlcwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVN1YkltYWdlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkxheWVyVGV4dHVyZVN1YkltYWdl
LmgiCisKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTGF5ZXJUZXh0dXJlU3Vi
SW1hZ2U6OkxheWVyVGV4dHVyZVN1YkltYWdlKGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCisgICAg
OiBtX3VzZU1hcFRleFN1YkltYWdlKHVzZU1hcFRleFN1YkltYWdlKQoreworfQorCitMYXllclRl
eHR1cmVTdWJJbWFnZTo6fkxheWVyVGV4dHVyZVN1YkltYWdlKCkKK3sKK30KKwordm9pZCBMYXll
clRleHR1cmVTdWJJbWFnZTo6c2V0U3ViSW1hZ2VTaXplKGNvbnN0IEludFNpemUmIHN1YkltYWdl
U2l6ZSkKK3sKKyAgICBpZiAoc3ViSW1hZ2VTaXplID09IG1fc3ViSW1hZ2VTaXplKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3N1YkltYWdlU2l6ZSA9IHN1YkltYWdlU2l6ZTsKKyAgICBpZiAo
IW1fdXNlTWFwVGV4U3ViSW1hZ2UpCisgICAgICAgIG1fc3ViSW1hZ2UgPSBhZG9wdEFycmF5UHRy
KG5ldyB1aW50OF90W21fc3ViSW1hZ2VTaXplLndpZHRoKCkgKiBtX3N1YkltYWdlU2l6ZS5oZWln
aHQoKSAqIDRdKTsKK30KKwordm9pZCBMYXllclRleHR1cmVTdWJJbWFnZTo6dXBsb2FkKGNvbnN0
IHVpbnQ4X3QqIGltYWdlLCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UmVjdCYgZGVzdFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQpCit7CisgICAgLy8gT2Zmc2V0IGZyb20gaW1hZ2UtcmVjdCB0
byBzb3VyY2UtcmVjdC4KKyAgICBJbnRQb2ludCBvZmZzZXQoc291cmNlUmVjdC54KCkgLSBpbWFn
ZVJlY3QueCgpLCBzb3VyY2VSZWN0LnkoKSAtIGltYWdlUmVjdC55KCkpOworCisgICAgaWYgKG1f
dXNlTWFwVGV4U3ViSW1hZ2UpIHsKKyAgICAgICAgLy8gVXBsb2FkIHRpbGUgZGF0YSB2aWEgYSBt
YXBwZWQgdHJhbnNmZXIgYnVmZmVyCisgICAgICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRl
bnNpb25zID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihjb250ZXh0LT5nZXRF
eHRlbnNpb25zKCkpOworICAgICAgICB1aW50OF90KiBwaXhlbERlc3QgPSBzdGF0aWNfY2FzdDx1
aW50OF90Kj4oZXh0ZW5zaW9ucy0+bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwLCBkZXN0UmVjdC54KCksIGRlc3RSZWN0LnkoKSwgZGVzdFJl
Y3Qud2lkdGgoKSwgZGVzdFJlY3QuaGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OldS
SVRFX09OTFkpKTsKKyAgICAgICAgQVNTRVJUKHBpeGVsRGVzdCk7CisgICAgICAgIGlmIChpbWFn
ZVJlY3Qud2lkdGgoKSA9PSBzb3VyY2VSZWN0LndpZHRoKCkgJiYgIW9mZnNldC54KCkpCisgICAg
ICAgICAgICBtZW1jcHkocGl4ZWxEZXN0LCAmaW1hZ2VbNCAqIG9mZnNldC55KCkgKiBpbWFnZVJl
Y3Qud2lkdGgoKV0sIGltYWdlUmVjdC53aWR0aCgpICogZGVzdFJlY3QuaGVpZ2h0KCkgKiA0KTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBTdHJpZGVzIG5vdCBlcXVhbCwgc28gZG8g
YSByb3ctYnktcm93IG1lbWNweSBmcm9tIHRoZQorICAgICAgICAgICAgLy8gcGFpbnQgcmVzdWx0
cyBpbnRvIHRoZSBwaXhlbERlc3QKKyAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8
IGRlc3RSZWN0LmhlaWdodCgpOyArK3JvdykKKyAgICAgICAgICAgICAgICBtZW1jcHkoJnBpeGVs
RGVzdFtkZXN0UmVjdC53aWR0aCgpICogNCAqIHJvd10sCisgICAgICAgICAgICAgICAgICAgICAg
ICZpbWFnZVs0ICogKG9mZnNldC54KCkgKyAob2Zmc2V0LnkoKSArIHJvdykgKiBpbWFnZVJlY3Qu
d2lkdGgoKSldLAorICAgICAgICAgICAgICAgICAgICAgICBkZXN0UmVjdC53aWR0aCgpICogNCk7
CisgICAgICAgIH0KKyAgICAgICAgZXh0ZW5zaW9ucy0+dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01J
VU0ocGl4ZWxEZXN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCB1aW50OF90KiBwaXhl
bFNvdXJjZTsKKyAgICAgICAgaWYgKGltYWdlUmVjdC53aWR0aCgpID09IHNvdXJjZVJlY3Qud2lk
dGgoKSAmJiAhb2Zmc2V0LngoKSkKKyAgICAgICAgICAgIHBpeGVsU291cmNlID0gJmltYWdlWzQg
KiBvZmZzZXQueSgpICogaW1hZ2VSZWN0LndpZHRoKCldOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIFN0cmlkZXMgbm90IGVxdWFsLCBzbyBkbyBhIHJvdy1ieS1yb3cgbWVtY3B5IGZy
b20gdGhlCisgICAgICAgICAgICAvLyBwYWludCByZXN1bHRzIGludG8gYSB0ZW1wIGJ1ZmZlciBm
b3IgdXBsb2FkaW5nLgorICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgZGVzdFJl
Y3QuaGVpZ2h0KCk7ICsrcm93KQorICAgICAgICAgICAgICAgIG1lbWNweSgmbV9zdWJJbWFnZVtk
ZXN0UmVjdC53aWR0aCgpICogNCAqIHJvd10sCisgICAgICAgICAgICAgICAgICAgICAgICZpbWFn
ZVs0ICogKG9mZnNldC54KCkgKyAob2Zmc2V0LnkoKSArIHJvdykgKiBpbWFnZVJlY3Qud2lkdGgo
KSldLAorICAgICAgICAgICAgICAgICAgICAgICBkZXN0UmVjdC53aWR0aCgpICogNCk7CisKKyAg
ICAgICAgICAgIHBpeGVsU291cmNlID0gJm1fc3ViSW1hZ2VbMF07CisgICAgICAgIH0KKyAgICAg
ICAgY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
MCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCksIGRlc3RSZWN0LndpZHRoKCksIGRlc3RSZWN0
LmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUsIHBpeGVsU291cmNlKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKClByb3BlcnR5
IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyVGV4dHVyZVN1YkltYWdlLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAg
ICsgTEYKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRleHR1cmVTdWJJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1
cmVTdWJJbWFnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZu
ZGVmIExheWVyVGV4dHVyZVN1YkltYWdlX2gKKyNkZWZpbmUgTGF5ZXJUZXh0dXJlU3ViSW1hZ2Vf
aAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiSW50UmVj
dC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKKworY2xh
c3MgTGF5ZXJUZXh0dXJlU3ViSW1hZ2UgeworcHVibGljOgorICAgIExheWVyVGV4dHVyZVN1Yklt
YWdlKGJvb2wgdXNlTWFwU3ViRm9yVXBsb2FkKTsKKyAgICB+TGF5ZXJUZXh0dXJlU3ViSW1hZ2Uo
KTsKKworICAgIHZvaWQgc2V0U3ViSW1hZ2VTaXplKGNvbnN0IEludFNpemUmKTsKKyAgICB2b2lk
IHVwbG9hZChjb25zdCB1aW50OF90KiBpbWFnZSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LAor
ICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3Qm
IGRlc3RSZWN0LAorICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKik7CisKK3ByaXZh
dGU6CisgICAgYm9vbCBtX3VzZU1hcFRleFN1YkltYWdlOworICAgIEludFNpemUgbV9zdWJJbWFn
ZVNpemU7CisgICAgT3duQXJyYXlQdHI8dWludDhfdD4gbV9zdWJJbWFnZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisjZW5kaWYgLy8gTGF5ZXJUZXh0dXJlU3ViSW1hZ2VfaAorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVT
dWJJbWFnZS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVw
ZGF0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgTGF5ZXJUZXh0dXJl
VXBkYXRlcl9oCisjZGVmaW5lIExheWVyVGV4dHVyZVVwZGF0ZXJfaAorCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBo
aWNzQ29udGV4dDNEOworY2xhc3MgSW50UmVjdDsKK2NsYXNzIEludFNpemU7CitjbGFzcyBMYXll
clRleHR1cmU7CisKK2NsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXIgeworcHVibGljOgorICAgIExh
eWVyVGV4dHVyZVVwZGF0ZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpIDogbV9jb250ZXh0
KGNvbnRleHQpIHsgfQorICAgIHZpcnR1YWwgfkxheWVyVGV4dHVyZVVwZGF0ZXIoKSB7IH0KKwor
ICAgIGVudW0gT3JpZW50YXRpb24geworICAgICAgICBCb3R0b21VcE9yaWVudGF0aW9uLAorICAg
ICAgICBUb3BEb3duT3JpZW50YXRpb24KKyAgICB9OworICAgIC8vIFJldHVybnMgdGhlIG9yaWVu
dGF0aW9uIG9mIHRoZSB0ZXh0dXJlIHVwbG9hZGVkIGJ5IHRoaXMgaW50ZXJmYWNlLgorICAgIHZp
cnR1YWwgT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBy
ZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYg
dGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
VGV4dHVyZVJlY3QoTGF5ZXJUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UmVjdCYgZGVzdFJlY3QpID0gMDsKKworcHJvdGVjdGVkOgorICAgIEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9CisKK3ByaXZhdGU6
CisgICAgLy8gVGhlIGdyYXBoaWNzIGNvbnRleHQgd2l0aCB3aGljaCB0byB1cGRhdGUgdGV4dHVy
ZXMuCisgICAgLy8gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSB0ZXh0dXJlcyBhcmUgZWl0aGVyIGNy
ZWF0ZWQgaW4gdGhlIHNhbWUgY29udGV4dAorICAgIC8vIG9yIHNoYXJlZCB3aXRoIHRoaXMgY29u
dGV4dC4KKyAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNl
bmRpZiAvLyBMYXllclRleHR1cmVVcGRhdGVyX2gKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRl
ci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJD
YW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBk
YXRlckNhbnZhcy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwor
I2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCIKKworI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCisjaW5jbHVk
ZSAiTGF5ZXJUZXh0dXJlLmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6OkxheWVyVGV4dHVyZVVwZGF0
ZXJDYW52YXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFBhc3NPd25QdHI8TGF5ZXJQYWlu
dGVyQ2hyb21pdW0+IHBhaW50ZXIpCisgICAgOiBMYXllclRleHR1cmVVcGRhdGVyKGNvbnRleHQp
CisgICAgLCBtX3BhaW50ZXIocGFpbnRlcikKK3sKK30KKwordm9pZCBMYXllclRleHR1cmVVcGRh
dGVyQ2FudmFzOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgY29udGV4dC50cmFuc2xhdGUoLWNvbnRlbnRS
ZWN0LngoKSwgLWNvbnRlbnRSZWN0LnkoKSk7CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgi
TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhczo6cGFpbnQiLCB0aGlzLCAwKTsKKyAgICAgICAgbV9w
YWludGVyLT5wYWludChjb250ZXh0LCBjb250ZW50UmVjdCk7CisgICAgfQorICAgIG1fY29udGVu
dFJlY3QgPSBjb250ZW50UmVjdDsKK30KKworTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6TGF5
ZXJUZXh0dXJlVXBkYXRlckJpdG1hcChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlciwgYm9vbCB1c2VNYXBUZXhTdWJJbWFn
ZSkKKyAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMoY29udGV4dCwgcGFpbnRlcikKKyAg
ICAsIG1fdGV4U3ViSW1hZ2UodXNlTWFwVGV4U3ViSW1hZ2UpCit7Cit9CisKK3ZvaWQgTGF5ZXJU
ZXh0dXJlVXBkYXRlckJpdG1hcDo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscykKK3sKKyAg
ICBtX3RleFN1YkltYWdlLnNldFN1YkltYWdlU2l6ZSh0aWxlU2l6ZSk7CisKKyAgICBtX2NhbnZh
cy5yZXNpemUoY29udGVudFJlY3Quc2l6ZSgpKTsKKyAgICAvLyBBc3N1bXB0aW9uOiBpZiBhIHRp
bGVyIGlzIHVzaW5nIGJvcmRlciB0ZXhlbHMsIHRoZW4gaXQgaXMgYmVjYXVzZSB0aGUKKyAgICAv
LyBsYXllciBpcyBsaWtlbHkgdG8gYmUgZmlsdGVyZWQgb3IgdHJhbnNmb3JtZWQuIEJlY2F1c2Ug
b2YgaXQgbWlnaHQgYmUKKyAgICAvLyB0cmFuc2Zvcm1lZCwgZHJhdyB0aGUgdGV4dCBpbiBncmF5
c2NhbGUgaW5zdGVhZCBvZiBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCisgICAgUGxhdGZvcm1DYW52
YXM6OlBhaW50ZXI6OlRleHRPcHRpb24gdGV4dE9wdGlvbiA9CisgICAgICAgIGJvcmRlclRleGVs
cyA/IFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpHcmF5c2NhbGVUZXh0IDogUGxhdGZvcm1DYW52
YXM6OlBhaW50ZXI6OlN1YnBpeGVsVGV4dDsKKyAgICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlciBj
YW52YXNQYWludGVyKCZtX2NhbnZhcywgdGV4dE9wdGlvbik7CisgICAgcGFpbnRDb250ZW50cygq
Y2FudmFzUGFpbnRlci5jb250ZXh0KCksIGNvbnRlbnRSZWN0KTsKK30KKwordm9pZCBMYXllclRl
eHR1cmVVcGRhdGVyQml0bWFwOjp1cGRhdGVUZXh0dXJlUmVjdChMYXllclRleHR1cmUqIHRleHR1
cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQor
eworICAgIFBsYXRmb3JtQ2FudmFzOjpBdXRvTG9ja2VyIGxvY2tlcigmbV9jYW52YXMpOworCisg
ICAgdGV4dHVyZS0+YmluZFRleHR1cmUoKTsKKyAgICBtX3RleFN1YkltYWdlLnVwbG9hZChsb2Nr
ZXIucGl4ZWxzKCksIGNvbnRlbnRSZWN0KCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0LCBjb250ZXh0
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZh
cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIExheWVy
VGV4dHVyZVVwZGF0ZXJDYW52YXNfaAorI2RlZmluZSBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFz
X2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkxheWVy
VGV4dHVyZVN1YkltYWdlLmgiCisjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtQ2FudmFzLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIExh
eWVyUGFpbnRlckNocm9taXVtOworCisvLyBBIExheWVyVGV4dHVyZVVwZGF0ZXIgd2l0aCBhbiBp
bnRlcm5hbCBjYW52YXMuCitjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzIDogcHVibGlj
IExheWVyVGV4dHVyZVVwZGF0ZXIgeworcHVibGljOgorICAgIExheWVyVGV4dHVyZVVwZGF0ZXJD
YW52YXMoR3JhcGhpY3NDb250ZXh0M0QqLCBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVt
Pik7CisgICAgdmlydHVhbCB+TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcygpIHsgfQorCitwcm90
ZWN0ZWQ6CisgICAgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0KTsKKyAgICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGVudFJlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBJbnRSZWN0IG1f
Y29udGVudFJlY3Q7CisgICAgT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBtX3BhaW50ZXI7
Cit9OworCisvLyBBIExheWVyVGV4dHVyZVVwZGF0ZXIgd2l0aCBhbiBpbnRlcm5hbCBiaXRtYXAg
Y2FudmFzLgorY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcCA6IHB1YmxpYyBMYXllclRl
eHR1cmVVcGRhdGVyQ2FudmFzIHsKK3B1YmxpYzoKKyAgICBMYXllclRleHR1cmVVcGRhdGVyQml0
bWFwKEdyYXBoaWNzQ29udGV4dDNEKiwgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4s
IGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpOworICAgIHZpcnR1YWwgfkxheWVyVGV4dHVyZVVwZGF0
ZXJCaXRtYXAoKSB7IH0KKworICAgIHZpcnR1YWwgT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSB7
IHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpCb3R0b21VcE9yaWVudGF0aW9uOyB9CisgICAg
dmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwg
Y29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpOworICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVUZXh0dXJlUmVjdChMYXllclRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisKK3ByaXZhdGU6CisgICAgUGxhdGZv
cm1DYW52YXMgbV9jYW52YXM7CisgICAgTGF5ZXJUZXh0dXJlU3ViSW1hZ2UgbV90ZXhTdWJJbWFn
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisjZW5kaWYgLy8gTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhc19oCisK
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAJ
KHJldmlzaW9uIDg2NDYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMzggKzM1
LDMwIEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJl
bmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclRleHR1cmUuaCIKKyNpbmNsdWRlICJM
YXllclRleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogCi0jaW5jbHVk
ZSA8d3RmL1Bhc3NPd25BcnJheVB0ci5oPgotCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtPiBMYXllclRp
bGVyQ2hyb21pdW06OmNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIs
IGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbiBib3JkZXIpCitQYXNz
T3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUoTGF5
ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBQYXNzT3duUHRyPExheWVyVGV4dHVy
ZVVwZGF0ZXI+IHRleHR1cmVVcGRhdGVyLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQm9yZGVy
VGV4ZWxPcHRpb24gYm9yZGVyKQogewogICAgIGlmICghbGF5ZXJSZW5kZXJlciB8fCB0aWxlU2l6
ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBMYXllclRpbGVyQ2hyb21pdW0obGF5ZXJSZW5kZXJlciwgdGlsZVNpemUsIGJvcmRl
cikpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJUaWxlckNocm9taXVtKGxheWVyUmVu
ZGVyZXIsIHRleHR1cmVVcGRhdGVyLCB0aWxlU2l6ZSwgYm9yZGVyKSk7CiB9CiAKLUxheWVyVGls
ZXJDaHJvbWl1bTo6TGF5ZXJUaWxlckNocm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5
ZXJSZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJvcmRlclRleGVsT3B0aW9uIGJv
cmRlcikKK0xheWVyVGlsZXJDaHJvbWl1bTo6TGF5ZXJUaWxlckNocm9taXVtKExheWVyUmVuZGVy
ZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVy
PiB0ZXh0dXJlVXBkYXRlciwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJvcmRlclRleGVsT3B0
aW9uIGJvcmRlcikKICAgICA6IG1fc2tpcHNEcmF3KGZhbHNlKQogICAgICwgbV90aWxpbmdEYXRh
KG1heCh0aWxlU2l6ZS53aWR0aCgpLCB0aWxlU2l6ZS5oZWlnaHQoKSksIDAsIDAsIGJvcmRlciA9
PSBIYXNCb3JkZXJUZXhlbHMpCi0gICAgLCBtX3VzZU1hcFN1YkZvclVwbG9hZHMobGF5ZXJSZW5k
ZXJlci0+Y29udGV4dFN1cHBvcnRzTWFwU3ViKCkpCisgICAgLCBtX3RleHR1cmVVcGRhdGVyKHRl
eHR1cmVVcGRhdGVyKQogICAgICwgbV9sYXllclJlbmRlcmVyKGxheWVyUmVuZGVyZXIpCiB7CiAg
ICAgc2V0VGlsZVNpemUodGlsZVNpemUpOwogfQogCi12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6
c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCi17
Ci0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlciAhPSBsYXllclJlbmRlcmVyKQotICAgICAgICByZXNl
dCgpOwotICAgIG1fbGF5ZXJSZW5kZXJlciA9IGxheWVyUmVuZGVyZXI7Ci19Ci0KIExheWVyVGls
ZXJDaHJvbWl1bTo6fkxheWVyVGlsZXJDaHJvbWl1bSgpCiB7CiAgICAgcmVzZXQoKTsKQEAgLTg2
LDggKzc4LDYgQEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnNldFRpbGVTaXplKGNvbgogICAg
IHJlc2V0KCk7CiAKICAgICBtX3RpbGVTaXplID0gc2l6ZTsKLSAgICBpZiAoIW1fdXNlTWFwU3Vi
Rm9yVXBsb2FkcykKLSAgICAgICAgbV90aWxlUGl4ZWxzID0gYWRvcHRBcnJheVB0cihuZXcgdWlu
dDhfdFttX3RpbGVTaXplLndpZHRoKCkgKiBtX3RpbGVTaXplLmhlaWdodCgpICogNF0pOwogICAg
IG1fdGlsaW5nRGF0YS5zZXRNYXhUZXh0dXJlU2l6ZShtYXgoc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpKSk7CiB9CiAKQEAgLTIzMCw3ICsyMjAsNyBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1
bTo6aW52YWxpZGF0ZUVudGlyCiAgICAgbV90aWxpbmdEYXRhLnNldFRvdGFsU2l6ZSgwLCAwKTsK
IH0KIAotdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZShUaWxlUGFpbnRJbnRlcmZhY2Um
IHBhaW50ZXIsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQordm9pZCBMYXllclRpbGVyQ2hy
b21pdW06OnVwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKIHsKICAgICBpZiAobV9z
a2lwc0RyYXcpCiAgICAgICAgIHJldHVybjsKQEAgLTI2NywzMCArMjU3LDEwIEBAIHZvaWQgTGF5
ZXJUaWxlckNocm9taXVtOjp1cGRhdGUoVGlsZVBhaW4KICAgICBpZiAoZGlydHlMYXllclJlY3Qu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2NhbnZhcy5yZXNpemUobV9wYWlu
dFJlY3Quc2l6ZSgpKTsKLQotICAgIC8vIEFzc3VtcHRpb246IGlmIGEgdGlsZXIgaXMgdXNpbmcg
Ym9yZGVyIHRleGVscywgdGhlbiBpdCBpcyBiZWNhdXNlIHRoZQotICAgIC8vIGxheWVyIGlzIGxp
a2VseSB0byBiZSBmaWx0ZXJlZCBvciB0cmFuc2Zvcm1lZC4gQmVjYXVzZSBvZiBpdCBtaWdodCBi
ZQotICAgIC8vIHRyYW5zZm9ybWVkLCBkcmF3IHRoZSB0ZXh0IGluIGdyYXlzY2FsZSBpbnN0ZWFk
IG9mIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KLSAgICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6
VGV4dE9wdGlvbiB0ZXh0T3B0aW9uID0gbV90aWxpbmdEYXRhLmJvcmRlclRleGVscygpID8gUGxh
dGZvcm1DYW52YXM6OlBhaW50ZXI6OkdyYXlzY2FsZVRleHQgOiBQbGF0Zm9ybUNhbnZhczo6UGFp
bnRlcjo6U3VicGl4ZWxUZXh0OwotICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyIGNhbnZhc1Bh
aW50ZXIoJm1fY2FudmFzLCB0ZXh0T3B0aW9uKTsKLSAgICBjYW52YXNQYWludGVyLmNvbnRleHQo
KS0+dHJhbnNsYXRlKC1tX3BhaW50UmVjdC54KCksIC1tX3BhaW50UmVjdC55KCkpOwotICAgIHsK
LSAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyVGlsZXJDaHJvbWl1bTo6dXBkYXRlOjpwYWludCIs
IHRoaXMsIDApOwotICAgICAgICBwYWludGVyLnBhaW50KCpjYW52YXNQYWludGVyLmNvbnRleHQo
KSwgbV9wYWludFJlY3QpOwotICAgIH0KKyAgICBtX3RleHR1cmVVcGRhdGVyLT5wcmVwYXJlVG9V
cGRhdGUobV9wYWludFJlY3QsIG1fdGlsZVNpemUsIG1fdGlsaW5nRGF0YS5ib3JkZXJUZXhlbHMo
KSk7CiB9CiAKLXZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjp1cGxvYWRDYW52YXMoKQotewotICAg
IFBsYXRmb3JtQ2FudmFzOjpBdXRvTG9ja2VyIGxvY2tlcigmbV9jYW52YXMpOwotICAgIHsKLSAg
ICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyVGlsZXJDaHJvbWl1bTo6dXBkYXRlRnJvbVBpeGVscyIs
IHRoaXMsIDApOwotICAgICAgICB1cGRhdGVGcm9tUGl4ZWxzKG1fdXBkYXRlUmVjdCwgbV9wYWlu
dFJlY3QsIGxvY2tlci5waXhlbHMoKSk7Ci0gICAgfQotfQotCi12b2lkIExheWVyVGlsZXJDaHJv
bWl1bTo6dXBkYXRlRnJvbVBpeGVscyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3Qg
SW50UmVjdCYgcGFpbnRSZWN0LCBjb25zdCB1aW50OF90KiBwYWludFBpeGVscykKK3ZvaWQgTGF5
ZXJUaWxlckNocm9taXVtOjp1cGxvYWQoKQogewogICAgIC8vIFBhaW50aW5nIGNvdWxkIGNhdXNl
IGNvbXBvc2l0aW5nIHRvIGdldCB0dXJuZWQgb2ZmLCB3aGljaCBtYXkgY2F1c2UgdGhlIHRpbGVy
IHRvIGJlY29tZSBpbnZhbGlkYXRlZCBtaWQtdXBkYXRlLgogICAgIGlmICghbV90aWxpbmdEYXRh
LnRvdGFsU2l6ZVgoKSB8fCAhbV90aWxpbmdEYXRhLnRvdGFsU2l6ZVkoKSkKQEAgLTI5OSw3ICsy
NjksNyBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6dXBkYXRlRnJvbVBpeGVsCiAgICAgR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOwogCiAgICAg
aW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKLSAgICBjb250ZW50UmVjdFRvVGlsZUluZGlj
ZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgY29udGVudFJl
Y3RUb1RpbGVJbmRpY2VzKG1fdXBkYXRlUmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsK
ICAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CiAgICAgICAgIGZvciAo
aW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKICAgICAgICAgICAgIFRpbGUqIHRpbGUg
PSB0aWxlQXQoaSwgaik7CkBAIC0zMTQsNyArMjg0LDcgQEAgdm9pZCBMYXllclRpbGVyQ2hyb21p
dW06OnVwZGF0ZUZyb21QaXhlbAogICAgICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QobGF5
ZXJSZWN0VG9Db250ZW50UmVjdCh0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0KSk7CiAgICAgICAgICAg
ICAvLyBQYWludCByZWN0IG5vdCBndWFyYW50ZWVkIHRvIGxpbmUgdXAgb24gdGlsZSBib3VuZGFy
aWVzLCBzbwogICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgc291cmNlUmVjdCBkb2Vzbid0
IGV4dGVuZCBvdXRzaWRlIG9mIGl0LgotICAgICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3Qo
cGFpbnRSZWN0KTsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KG1fcGFpbnRSZWN0
KTsKICAgICAgICAgICAgIGlmIChzb3VyY2VSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIApAQCAtMzI4LDYzICsyOTgsMjAgQEAgdm9pZCBMYXllclRpbGVyQ2hyb21p
dW06OnVwZGF0ZUZyb21QaXhlbAogCiAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGlsZS1zcGFj
ZSByZWN0YW5nbGUgdG8gdXBsb2FkIGludG8uCiAgICAgICAgICAgICBJbnRSZWN0IGRlc3RSZWN0
KEludFBvaW50KHNvdXJjZVJlY3QueCgpIC0gYW5jaG9yLngoKSwgc291cmNlUmVjdC55KCkgLSBh
bmNob3IueSgpKSwgc291cmNlUmVjdC5zaXplKCkpOwotICAgICAgICAgICAgaWYgKGRlc3RSZWN0
LngoKSA8IDApCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGlmIChkZXN0
UmVjdC55KCkgPCAwKQotICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBBU1NF
UlQoKGRlc3RSZWN0LngoKSA+PSAwKSAmJiAoZGVzdFJlY3QueSgpID49IDApKTsKIAogICAgICAg
ICAgICAgLy8gT2Zmc2V0IGZyb20gcGFpbnQgcmVjdGFuZ2xlIHRvIHRoaXMgdGlsZSdzIGRpcnR5
IHJlY3RhbmdsZS4KLSAgICAgICAgICAgIEludFBvaW50IHBhaW50T2Zmc2V0KHNvdXJjZVJlY3Qu
eCgpIC0gcGFpbnRSZWN0LngoKSwgc291cmNlUmVjdC55KCkgLSBwYWludFJlY3QueSgpKTsKLSAg
ICAgICAgICAgIGlmIChwYWludE9mZnNldC54KCkgPCAwKQotICAgICAgICAgICAgICAgIENSQVNI
KCk7Ci0gICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueSgpIDwgMCkKLSAgICAgICAgICAgICAg
ICBDUkFTSCgpOwotICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LngoKSArIGRlc3RSZWN0Lndp
ZHRoKCkgPiBwYWludFJlY3Qud2lkdGgoKSkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAg
ICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LnkoKSArIGRlc3RSZWN0LmhlaWdodCgpID4gcGFpbnRS
ZWN0LmhlaWdodCgpKQotICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBJbnRQ
b2ludCBwYWludE9mZnNldChzb3VyY2VSZWN0LngoKSAtIG1fcGFpbnRSZWN0LngoKSwgc291cmNl
UmVjdC55KCkgLSBtX3BhaW50UmVjdC55KCkpOworICAgICAgICAgICAgQVNTRVJUKChwYWludE9m
ZnNldC54KCkgPj0gMCkgJiYgKHBhaW50T2Zmc2V0LnkoKSA+PSAwKSk7CisgICAgICAgICAgICBB
U1NFUlQocGFpbnRPZmZzZXQueCgpICsgZGVzdFJlY3Qud2lkdGgoKSA8PSBtX3BhaW50UmVjdC53
aWR0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChwYWludE9mZnNldC55KCkgKyBkZXN0UmVjdC5o
ZWlnaHQoKSA8PSBtX3BhaW50UmVjdC5oZWlnaHQoKSk7CiAKICAgICAgICAgICAgIHRpbGUtPnRl
eHR1cmUoKS0+YmluZFRleHR1cmUoKTsKLQogICAgICAgICAgICAgY29uc3QgR0MzRGludCBmaWx0
ZXIgPSBtX3RpbGluZ0RhdGEuYm9yZGVyVGV4ZWxzKCkgPyBHcmFwaGljc0NvbnRleHQzRDo6TElO
RUFSIDogR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1Q7CiAgICAgICAgICAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgZmlsdGVyKSk7CiAgICAgICAg
ICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgZmls
dGVyKSk7CiAKLSAgICAgICAgICAgIGlmIChtX3VzZU1hcFN1YkZvclVwbG9hZHMpIHsKLSAgICAg
ICAgICAgICAgICAvLyBVcGxvYWQgdGlsZSBkYXRhIHZpYSBhIG1hcHBlZCB0cmFuc2ZlciBidWZm
ZXIKLSAgICAgICAgICAgICAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0
YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
KTsKLSAgICAgICAgICAgICAgICB1aW50OF90KiBwaXhlbERlc3QgPSBzdGF0aWNfY2FzdDx1aW50
OF90Kj4oZXh0ZW5zaW9ucy0+bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCAwLCBkZXN0UmVjdC54KCksIGRlc3RSZWN0LnkoKSwgZGVzdFJlY3Qu
d2lkdGgoKSwgZGVzdFJlY3QuaGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OldSSVRF
X09OTFkpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQocGl4ZWxEZXN0KTsKLSAgICAgICAgICAg
ICAgICBpZiAocGFpbnRSZWN0LndpZHRoKCkgPT0gc291cmNlUmVjdC53aWR0aCgpICYmICFwYWlu
dE9mZnNldC54KCkpCi0gICAgICAgICAgICAgICAgICAgIG1lbWNweShwaXhlbERlc3QsICZwYWlu
dFBpeGVsc1s0ICogcGFpbnRPZmZzZXQueSgpICogcGFpbnRSZWN0LndpZHRoKCldLCBwYWludFJl
Y3Qud2lkdGgoKSAqIGRlc3RSZWN0LmhlaWdodCgpICogNCk7Ci0gICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFN0cmlkZXMgbm90IGVxdWFsLCBzbyBkbyBhIHJv
dy1ieS1yb3cgbWVtY3B5IGZyb20gdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIHBhaW50IHJl
c3VsdHMgaW50byB0aGUgcGl4ZWxEZXN0Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHJv
dyA9IDA7IHJvdyA8IGRlc3RSZWN0LmhlaWdodCgpOyArK3JvdykKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1lbWNweSgmcGl4ZWxEZXN0W2Rlc3RSZWN0LndpZHRoKCkgKiA0ICogcm93XSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFpbnRQaXhlbHNbNCAqIChwYWludE9mZnNl
dC54KCkgKyAocGFpbnRPZmZzZXQueSgpICsgcm93KSAqIHBhaW50UmVjdC53aWR0aCgpKV0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJlY3Qud2lkdGgoKSAqIDQpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBleHRlbnNpb25zLT51bm1hcFRleFN1Yklt
YWdlMkRDSFJPTUlVTShwaXhlbERlc3QpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBjb25zdCB1aW50OF90KiBwaXhlbFNvdXJjZTsKLSAgICAgICAgICAgICAgICBpZiAo
cGFpbnRSZWN0LndpZHRoKCkgPT0gc291cmNlUmVjdC53aWR0aCgpICYmICFwYWludE9mZnNldC54
KCkpCi0gICAgICAgICAgICAgICAgICAgIHBpeGVsU291cmNlID0gJnBhaW50UGl4ZWxzWzQgKiBw
YWludE9mZnNldC55KCkgKiBwYWludFJlY3Qud2lkdGgoKV07Ci0gICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFN0cmlkZXMgbm90IGVxdWFsLCBzbyBkbyBhIHJv
dy1ieS1yb3cgbWVtY3B5IGZyb20gdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIHBhaW50IHJl
c3VsdHMgaW50byBhIHRlbXAgYnVmZmVyIGZvciB1cGxvYWRpbmcuCi0gICAgICAgICAgICAgICAg
ICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRlc3RSZWN0LmhlaWdodCgpOyArK3JvdykKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmbV90aWxlUGl4ZWxzW2Rlc3RSZWN0LndpZHRo
KCkgKiA0ICogcm93XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFpbnRQaXhl
bHNbNCAqIChwYWludE9mZnNldC54KCkgKyAocGFpbnRPZmZzZXQueSgpICsgcm93KSAqIHBhaW50
UmVjdC53aWR0aCgpKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJlY3Qu
d2lkdGgoKSAqIDQpOwotCi0gICAgICAgICAgICAgICAgICAgIHBpeGVsU291cmNlID0gJm1fdGls
ZVBpeGVsc1swXTsKLSAgICAgICAgICAgICAgICB9Ci0KLQotICAgICAgICAgICAgICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAwLCBkZXN0UmVjdC54KCksIGRlc3RSZWN0LnkoKSwgZGVzdFJlY3Qud2lkdGgoKSwgZGVz
dFJlY3QuaGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSwgcGl4ZWxTb3VyY2UpKTsKLSAgICAgICAgICAgIH0KLQorICAgICAg
ICAgICAgbV90ZXh0dXJlVXBkYXRlci0+dXBkYXRlVGV4dHVyZVJlY3QodGlsZS0+dGV4dHVyZSgp
LCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CiAgICAgICAgICAgICB0aWxlLT5jbGVhckRpcnR5KCk7
CiAgICAgICAgIH0KICAgICB9CkBAIC00MzAsNyArMzU3LDEyIEBAIHZvaWQgTGF5ZXJUaWxlckNo
cm9taXVtOjpkcmF3KGNvbnN0IEludFIKICAgICAgICAgICAgIGZsb2F0IHRleFRyYW5zbGF0ZVkg
PSB0ZXhPZmZzZXQueSgpIC8gdGlsZUhlaWdodDsKICAgICAgICAgICAgIGZsb2F0IHRleFNjYWxl
WCA9IHRpbGVSZWN0LndpZHRoKCkgLyB0aWxlV2lkdGg7CiAgICAgICAgICAgICBmbG9hdCB0ZXhT
Y2FsZVkgPSB0aWxlUmVjdC5oZWlnaHQoKSAvIHRpbGVIZWlnaHQ7Ci0KKyAgICAgICAgICAgIC8v
IE9wZW5HTCBjb29yZGluYXRlIHN5c3RlbSBpcyBib3R0b20tdXAuCisgICAgICAgICAgICAvLyBJ
ZiB0aWxlIHRleHR1cmUgaXMgdG9wLWRvd24sIHdlIG5lZWQgdG8gZmxpcCB0aGUgdGV4dHVyZSBj
b29yZGluYXRlcy4KKyAgICAgICAgICAgIGlmIChtX3RleHR1cmVVcGRhdGVyLT5vcmllbnRhdGlv
bigpID09IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRvcERvd25PcmllbnRhdGlvbikgeworICAgICAg
ICAgICAgICAgIHRleFRyYW5zbGF0ZVkgKz0gMS4wOworICAgICAgICAgICAgICAgIHRleFNjYWxl
WSAqPSAtMS4wOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZHJhd1RleHR1cmVkUXVhZChj
b250ZXh0LCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwgdGlsZU1hdHJpeCwg
dGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIG9wYWNpdHksIHRleFRyYW5zbGF0
ZVgsIHRleFRyYW5zbGF0ZVksIHRleFNjYWxlWCwgdGV4U2NhbGVZLCBwcm9ncmFtKTsKICAgICAg
ICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA4
NjQ2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGlsZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyOCArMzEsMjIgQEAKIAogI2lu
Y2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclRleHR1cmUuaCIKLSNpbmNs
dWRlICJQbGF0Zm9ybUNhbnZhcy5oIgogI2luY2x1ZGUgIlRpbGluZ0RhdGEuaCIKICNpbmNsdWRl
IDx3dGYvSGFzaFRyYWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07Ci0KLWNsYXNzIFRp
bGVQYWludEludGVyZmFjZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpID0gMDsKLX07
CitjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyOwogCiBjbGFzcyBMYXllclRpbGVyQ2hyb21pdW0g
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExheWVyVGlsZXJDaHJvbWl1bSk7CiBwdWJsaWM6
CiAgICAgZW51bSBCb3JkZXJUZXhlbE9wdGlvbiB7IEhhc0JvcmRlclRleGVscywgTm9Cb3JkZXJU
ZXhlbHMgfTsKIAotICAgIHN0YXRpYyBQYXNzT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gY3Jl
YXRlKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3Jk
ZXJUZXhlbE9wdGlvbik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJUaWxlckNocm9taXVt
PiBjcmVhdGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgUGFzc093blB0cjxMYXllclRleHR1cmVV
cGRhdGVyPiwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJvcmRlclRleGVsT3B0aW9uKTsKIAog
ICAgIH5MYXllclRpbGVyQ2hyb21pdW0oKTsKIApAQCAtNjAsMTYgKzU0LDEwIEBAIHB1YmxpYzoK
ICAgICB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKICAg
ICB2b2lkIGludmFsaWRhdGVFbnRpcmVMYXllcigpOwogCi0gICAgLy8gUGFpbnQgYWxsIGludmFs
aWRhdGlvbnMgYW5kIG1pc3NpbmcgdGlsZXMgbmVlZGVkIHRvIGRyYXcgdGhlIGNvbnRlbnRSZWN0
Ci0gICAgLy8gaW50byB0aGUgaW50ZXJuYWwgY2FudmFzLgotICAgIHZvaWQgdXBkYXRlKFRpbGVQ
YWludEludGVyZmFjZSYgcGFpbnRlciwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwotCisg
ICAgLy8gUGFpbnQgYWxsIGludmFsaWRhdGlvbnMgYW5kIG1pc3NpbmcgdGlsZXMgbmVlZGVkIHRv
IGRyYXcgdGhlIGNvbnRlbnRSZWN0LgorICAgIHZvaWQgdXBkYXRlKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0KTsKICAgICAvLyBSZXNlcnZlIGFuZCB1cGxvYWQgdGlsZSB0ZXh0dXJlcyBmcm9t
IHRoZSBpbnRlcm5hbCBjYW52YXMuCi0gICAgdm9pZCB1cGxvYWRDYW52YXMoKTsKLQotICAgIC8v
IFJlc2VydmUgYW5kIHVwbG9hZCB0aWxlIHRleHR1cmVzIGZyb20gYW4gZXh0ZXJuYWxseSBwYWlu
dGVkIGJ1ZmZlci4KLSAgICB2b2lkIHVwZGF0ZUZyb21QaXhlbHMoY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QsIGNvbnN0IEludFJlY3QmIHBhaW50UmVjdCwgY29uc3QgdWludDhfdCogcGl4ZWxz
KTsKLQorICAgIHZvaWQgdXBsb2FkKCk7CiAgICAgLy8gRHJhdyBhbGwgdGlsZXMgdGhhdCBpbnRl
cnNlY3Qgd2l0aCB0aGUgY29udGVudCByZWN0LgogICAgIHZvaWQgZHJhdyhjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5
KTsKIApAQCAtNzcsNyArNjUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMYXllclBvc2l0aW9u
KGNvbnN0IEludFBvaW50JiBwb3NpdGlvbik7CiAgICAgLy8gQ2hhbmdlIHRoZSB0aWxlIHNpemUu
ICBUaGlzIG1heSBpbnZhbGlkYXRlIGFsbCB0aGUgZXhpc3RpbmcgdGlsZXMuCiAgICAgdm9pZCBz
ZXRUaWxlU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKTsKLSAgICB2b2lkIHNldExheWVyUmVuZGVy
ZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CiAKICAgICBib29sIHNraXBzRHJhdygpIGNvbnN0
IHsgcmV0dXJuIG1fc2tpcHNEcmF3OyB9CiAKQEAgLTg3LDEyICs3NCwxMiBAQCBwdWJsaWM6CiAg
ICAgTGF5ZXJUZXh0dXJlKiBnZXRTaW5nbGVUZXh0dXJlKCk7CiAKIHByaXZhdGU6Ci0gICAgTGF5
ZXJUaWxlckNocm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEludFNpemUmIHRp
bGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbik7CisgICAgTGF5ZXJUaWxlckNocm9taXVtKExheWVy
UmVuZGVyZXJDaHJvbWl1bSosIFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4sIGNvbnN0
IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbik7CiAKICAgICBjbGFzcyBUaWxl
IDogcHVibGljIFJlZkNvdW50ZWQ8VGlsZT4gewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShUaWxlKTsKICAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IFRpbGUoUGFzc093blB0cjxM
YXllclRleHR1cmU+IHRleCkgOiBtX3RleCh0ZXgpLCBtX2koLTEpLCBtX2ooLTEpIHt9CisgICAg
ICAgIGV4cGxpY2l0IFRpbGUoUGFzc093blB0cjxMYXllclRleHR1cmU+IHRleCkgOiBtX3RleCh0
ZXgpLCBtX2koLTEpLCBtX2ooLTEpIHsgfQogCiAgICAgICAgIExheWVyVGV4dHVyZSogdGV4dHVy
ZSgpIHsgcmV0dXJuIG1fdGV4LmdldCgpOyB9CiAKQEAgLTE1NywxOSArMTQ0LDEzIEBAIHByaXZh
dGU6CiAgICAgLy8gVGlnaHRseSBwYWNrZWQgc2V0IG9mIHVudXNlZCB0aWxlcy4KICAgICBWZWN0
b3I8UmVmUHRyPFRpbGU+ID4gbV91bnVzZWRUaWxlczsKIAotICAgIC8vIFN0YXRlIGhlbGQgYmV0
d2VlbiB1cGRhdGUgYW5kIHVwbG9hZENhbnZhcy4KKyAgICAvLyBTdGF0ZSBoZWxkIGJldHdlZW4g
dXBkYXRlIGFuZCB1cGxvYWQuCiAgICAgSW50UmVjdCBtX3BhaW50UmVjdDsKICAgICBJbnRSZWN0
IG1fdXBkYXRlUmVjdDsKLSAgICBQbGF0Zm9ybUNhbnZhcyBtX2NhbnZhczsKLQotICAgIC8vIENh
Y2hlIGEgdGlsZS1zaXplZCBwaXhlbCBidWZmZXIgdG8gZHJhdyBpbnRvLgotICAgIE93bkFycmF5
UHRyPHVpbnQ4X3Q+IG1fdGlsZVBpeGVsczsKIAogICAgIFRpbGluZ0RhdGEgbV90aWxpbmdEYXRh
OwogCi0gICAgLy8gV2hldGhlciB0aGUgdGlsZXIgd2lsbCB1c2UgR0xfQ0hST01JVU1fbWFwX3N1
YiBmb3IgdGV4dHVyZSB1cGxvYWRzLgotICAgIGJvb2wgbV91c2VNYXBTdWJGb3JVcGxvYWRzOwot
CisgICAgT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IG1fdGV4dHVyZVVwZGF0ZXI7CiAgICAg
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAkocmV2aXNpb24gODY0NjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkxheWVyQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXll
clRleHR1cmUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNhbnZhcy5oIgogI2luY2x1ZGUgIlRleHRS
dW4uaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIu
aCIKQEAgLTExNCw3ICsxMTUsNyBAQCB2b2lkIENDSGVhZHNVcERpc3BsYXk6OmRyYXcoKQogICAg
ICAgICAgICAgbWVtY3B5KHBpeGVsRGVzdCwgbG9ja2VyLnBpeGVscygpLCBodWRTaXplLndpZHRo
KCkgKiBodWRTaXplLmhlaWdodCgpICogNCk7CiAgICAgICAgICAgICBleHRlbnNpb25zLT51bm1h
cFRleFN1YkltYWdlMkRDSFJPTUlVTShwaXhlbERlc3QpOwogICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIEdMQyhjb250ZXh0LmdldCgpLCBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgY2FudmFzLnNp
emUoKS53aWR0aCgpLCBjYW52YXMuc2l6ZSgpLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGxvY2tlci5waXhlbHMo
KSkpOworICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleEltYWdlMkQoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBjYW52
YXMuc2l6ZSgpLndpZHRoKCksIGNhbnZhcy5zaXplKCkuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgbG9ja2VyLnBp
eGVscygpKSk7CiAgICAgfQogCiAgICAgLy8gRHJhdyB0aGUgSFVEIG9udG8gdGhlIGRlZmF1bHQg
cmVuZGVyIHN1cmZhY2UuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24g
ODY0NjApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEyIEBACisyMDExLTA1LTEzICBBbG9rIFByaXlhZGFyc2hpICA8YWxva3BA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFNwbGl0IGNhbnZhcyBmcm9tIExheWVyVGlsZXJDaHJvbWl1bQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA3MTkKKworICAgICAgICAqIHNy
Yy9XZWJWaWV3SW1wbC5jcHA6CisKIDIwMTEtMDUtMTMgIFRhbyBCYWkgIDxtaWNoYWVsYmFpQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA4NjQ2
MCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsNiArNzIsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJLZXlib2FyZENvZGVzLmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5o
IgorI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKQEAgLTI0MDksNyArMjQxMCw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmludmFsaWRhdGVSb290
TGF5ZXJSZWMKICAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKIH0KIAotY2xhc3MgV2Vi
Vmlld0ltcGxDb250ZW50UGFpbnRlciA6IHB1YmxpYyBUaWxlUGFpbnRJbnRlcmZhY2UgeworY2xh
c3MgV2ViVmlld0ltcGxDb250ZW50UGFpbnRlciA6IHB1YmxpYyBMYXllclBhaW50ZXJDaHJvbWl1
bSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcik7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8V2ViVmlld0ltcGxDb250ZW50UGFpbnRl
cio+IGNyZWF0ZShXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwpCg==
</data>
<flag name="review"
          id="86681"
          type_id="1"
          status="-"
          setter="jamesr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93647</attachid>
            <date>2011-05-16 08:46:51 -0700</date>
            <delta_ts>2011-05-16 14:49:55 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>layer.txt</filename>
            <type>text/plain</type>
            <size>58498</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2NTc0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODIgQEAKKzIwMTEtMDUtMTYgIEFsb2sgUHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBTcGxpdCBjYW52YXMgZnJvbSBMYXll
clRpbGVyQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTYwNzE5CisKKyAgICAgICAgTGF5ZXJUaWxlckNocm9taXVtIG5vdyBqdXN0IGRvZXMg
dGlsaW5nLiBJdCBkZWxlZ2F0ZXMgdGhlIHRhc2sgb2YgcGFpbnRpbmcgYW5kIHVwZGF0aW5nIHRl
eHR1cmVzIHRvIExheWVyVGV4dHVyZVVwZGF0ZXIuCisgICAgICAgIEFsc28gYWJzdHJhY3RlZCBM
YXllclRleHR1cmVTdWJJbWFnZSB0byB1cGxvYWQgdGV4dHVyZSBwaXhlbHMuCisKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vVHJhY2VFdmVudC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXllckNo
cm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjp+Q29udGVu
dExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06
OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNo
cm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXll
ckNocm9taXVtOjpzZXRMYXllclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRM
YXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OkltYWdl
TGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVy
ZVVwZGF0ZXI6On5JbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyOjpvcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6aW1hZ2VSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
VGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUGFpbnRlckNocm9taXVtLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jvb3RMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERyYXdMYXll
cnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXll
cnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVN1YkltYWdlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVT
dWJJbWFnZTo6TGF5ZXJUZXh0dXJlU3ViSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
ZXh0dXJlU3ViSW1hZ2U6On5MYXllclRleHR1cmVTdWJJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRleHR1cmVTdWJJbWFnZTo6c2V0U3ViSW1hZ2VTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyVGV4dHVyZVN1YkltYWdlOjp1cGxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUZXh0dXJlU3ViSW1hZ2U6OnVwbG9hZFdpdGhUZXhTdWJJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclRleHR1cmVTdWJJbWFnZTo6dXBsb2FkV2l0aE1hcFRleFN1YkltYWdlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1
cmVVcGRhdGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRl
cjo6TGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVV
cGRhdGVyOjp+TGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRl
eHR1cmVVcGRhdGVyOjpjb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzOjpMYXllclRleHR1cmVVcGRhdGVyQ2FudmFz
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6OnBhaW50Q29u
dGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6TGF5
ZXJUZXh0dXJlVXBkYXRlckJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVV
cGRhdGVyQml0bWFwOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
ZXh0dXJlVXBkYXRlckJpdG1hcDo6dXBkYXRlVGV4dHVyZVJlY3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzOjp+TGF5ZXJUZXh0
dXJlVXBkYXRlckNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVy
Q2FudmFzOjpjb250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRh
dGVyQml0bWFwOjp+TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpvcmllbnRhdGlvbik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyVGlsZXJDaHJvbWl1bTo6TGF5ZXJUaWxlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6c2V0VGlsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
ckNocm9taXVtOjp1cGxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVt
OjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6VGlsZTo6
VGlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1Vw
RGlzcGxheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KToK
KwogMjAxMS0wNS0xNiAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLiBXaW5kb3dzIGJ1aWxkIGZpeC4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkJKHJldmlzaW9uIDg2NTc0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MDI2LDEwICs0MDI2LDE2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUGFpbnRlckNocm9taXVtLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRleHR1cmUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclRleHR1cmUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJD
YW52YXMuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyQ2FudmFzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oJywK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1RyYWNlRXZlbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UcmFjZUV2ZW50LmgJ
KHJldmlzaW9uIDg2NTc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vVHJh
Y2VFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjZGVmaW5lIFRyYWNl
RXZlbnRfaAogCiAjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKKyNpbmNsdWRlIDx3dGYvT3du
QXJyYXlQdHIuaD4KIAogLy8gSW1wbGVtZW50YXRpb24gZGV0YWlsOiB0cmFjZSBldmVudCBtYWNy
b3MgY3JlYXRlIHRlbXBvcmFyeSB2YXJpYWJsZXMKIC8vIHRvIGtlZXAgaW5zdHJ1bWVudGF0aW9u
IG92ZXJoZWFkIGxvdy4gVGhlc2UgbWFjcm9zIGdpdmUgZWFjaCB0ZW1wb3JhcnkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDg2NTc0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiwxMSBAQAogCiAjaW5jbHVkZSAiY2Mv
Q0NMYXllckltcGwuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUg
IkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVt
LmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCisjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBk
YXRlckNhbnZhcy5oIgorI2luY2x1ZGUgIkxheWVyVGlsZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKIApAQCAtNTEs
MjQgKzU0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1QYXNzUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtPiBDb250ZW50TGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDb250ZW50TGF5ZXJDaHJvbWl1bShvd25lcikpOwotfQotCi1Db250ZW50TGF5ZXJD
aHJvbWl1bTo6Q29udGVudExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25l
cikKLSAgICA6IExheWVyQ2hyb21pdW0ob3duZXIpCi0gICAgLCBtX3RpbGluZ09wdGlvbihDb250
ZW50TGF5ZXJDaHJvbWl1bTo6QXV0b1RpbGUpCi17Ci19Ci0KLUNvbnRlbnRMYXllckNocm9taXVt
Ojp+Q29udGVudExheWVyQ2hyb21pdW0oKQotewotICAgIG1fdGlsZXIuY2xlYXIoKTsKLSAgICBM
YXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCk7Ci19Ci0KLWNsYXNzIENvbnRlbnRMYXll
clBhaW50ZXIgOiBwdWJsaWMgVGlsZVBhaW50SW50ZXJmYWNlIHsKK2NsYXNzIENvbnRlbnRMYXll
clBhaW50ZXIgOiBwdWJsaWMgTGF5ZXJQYWludGVyQ2hyb21pdW0gewogcHVibGljOgogICAgIGV4
cGxpY2l0IENvbnRlbnRMYXllclBhaW50ZXIoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikK
ICAgICAgICAgOiBtX293bmVyKG93bmVyKQpAQCAtODUsMTQgKzcxLDI3IEBAIHByaXZhdGU6CiAg
ICAgR3JhcGhpY3NMYXllckNocm9taXVtKiBtX293bmVyOwogfTsKIAorUGFzc1JlZlB0cjxDb250
ZW50TGF5ZXJDaHJvbWl1bT4gQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xh
eWVyQ2hyb21pdW0qIG93bmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29udGVudExh
eWVyQ2hyb21pdW0ob3duZXIpKTsKK30KKworQ29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRM
YXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCisgICAgOiBMYXllckNo
cm9taXVtKG93bmVyKQorICAgICwgbV90aWxpbmdPcHRpb24oQ29udGVudExheWVyQ2hyb21pdW06
OkF1dG9UaWxlKQoreworfQorCitDb250ZW50TGF5ZXJDaHJvbWl1bTo6fkNvbnRlbnRMYXllckNo
cm9taXVtKCkKK3sKKyAgICBjbGVhbnVwUmVzb3VyY2VzKCk7Cit9CisKIHZvaWQgQ29udGVudExh
eWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IEludFJlY3QmIHRhcmdldFN1
cmZhY2VSZWN0KQogewogICAgIEFTU0VSVChkcmF3c0NvbnRlbnQoKSk7CiAgICAgQVNTRVJUKGxh
eWVyUmVuZGVyZXIoKSk7CiAKLSAgICBjcmVhdGVUaWxlcklmTmVlZGVkKCk7Ci0KLSAgICBDb250
ZW50TGF5ZXJQYWludGVyIHBhaW50ZXIobV9vd25lcik7CiAgICAgdXBkYXRlTGF5ZXJTaXplKGxh
eWVyQm91bmRzKCkuc2l6ZSgpKTsKIAogICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gdmlzaWJsZUxh
eWVyUmVjdCh0YXJnZXRTdXJmYWNlUmVjdCk7CkBAIC0xMDMsMTUgKzEwMiwyNiBAQCB2b2lkIENv
bnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzCiAgICAgZGlydHkuaW50ZXJzZWN0KGxh
eWVyQm91bmRzKCkpOwogICAgIG1fdGlsZXItPmludmFsaWRhdGVSZWN0KGRpcnR5KTsKIAotICAg
IG1fdGlsZXItPnVwZGF0ZShwYWludGVyLCBsYXllclJlY3QpOworICAgIG1fdGlsZXItPnVwZGF0
ZShsYXllclJlY3QpOwogICAgIG1fZGlydHlSZWN0ID0gRmxvYXRSZWN0KCk7CiB9CiAKK3ZvaWQg
Q29udGVudExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQoreworICAgIG1fdGlsZXIu
Y2xlYXIoKTsKKyAgICBMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCk7Cit9CisKIHZv
aWQgQ29udGVudExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKiBsYXllclJlbmRlcmVyKQogewogICAgIExheWVyQ2hyb21pdW06OnNldExheWVyUmVu
ZGVyZXIobGF5ZXJSZW5kZXJlcik7CiAgICAgY3JlYXRlVGlsZXJJZk5lZWRlZCgpOwotICAgIG1f
dGlsZXItPnNldExheWVyUmVuZGVyZXIobGF5ZXJSZW5kZXJlcik7Cit9CisKK1Bhc3NPd25QdHI8
TGF5ZXJUZXh0dXJlVXBkYXRlcj4gQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVV
cGRhdGVyKCkKK3sKKyAgICBPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIgPSBh
ZG9wdFB0cihuZXcgQ29udGVudExheWVyUGFpbnRlcihtX293bmVyKSk7CisgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwKGxheWVyUmVuZGVyZXJDb250ZXh0
KCksIHBhaW50ZXIucmVsZWFzZSgpLCBsYXllclJlbmRlcmVyKCktPmNvbnRleHRTdXBwb3J0c01h
cFN1YigpKSk7CiB9CiAKIFRyYW5zZm9ybWF0aW9uTWF0cml4IENvbnRlbnRMYXllckNocm9taXVt
Ojp0aWxpbmdUcmFuc2Zvcm0oKQpAQCAtMTg2LDE2ICsxOTYsMjYgQEAgdm9pZCBDb250ZW50TGF5
ZXJDaHJvbWl1bTo6ZHJhdyhjb25zdCBJbgogICAgICAgICBtX3RpbGVyLT5kcmF3KGxheWVyUmVj
dCwgdHJhbnNmb3JtLCBjY0xheWVySW1wbCgpLT5kcmF3T3BhY2l0eSgpKTsKIH0KIAorYm9vbCBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9vd25lciAmJiBtX293bmVyLT5kcmF3c0NvbnRlbnQoKSAmJiAoIW1fdGlsZXIgfHwgIW1fdGls
ZXItPnNraXBzRHJhdygpKTsKK30KKwogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
VGlsZXJJZk5lZWRlZCgpCiB7CiAgICAgaWYgKG1fdGlsZXIpCiAgICAgICAgIHJldHVybjsKLSAg
ICBtX3RpbGVyID0gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUobGF5ZXJSZW5kZXJlcigpLCBJ
bnRTaXplKGRlZmF1bHRUaWxlU2l6ZSwgZGVmYXVsdFRpbGVTaXplKSwgTGF5ZXJUaWxlckNocm9t
aXVtOjpIYXNCb3JkZXJUZXhlbHMpOworCisgICAgbV90aWxlciA9IExheWVyVGlsZXJDaHJvbWl1
bTo6Y3JlYXRlKAorICAgICAgICBsYXllclJlbmRlcmVyKCksCisgICAgICAgIGNyZWF0ZVRleHR1
cmVVcGRhdGVyKCksCisgICAgICAgIEludFNpemUoZGVmYXVsdFRpbGVTaXplLCBkZWZhdWx0VGls
ZVNpemUpLAorICAgICAgICBMYXllclRpbGVyQ2hyb21pdW06Okhhc0JvcmRlclRleGVscyk7CiB9
CiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMo
KQogewotICAgIG1fdGlsZXItPnVwbG9hZENhbnZhcygpOworICAgIG1fdGlsZXItPnVwbG9hZCgp
OwogfQogCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpzZXRUaWxpbmdPcHRpb24oVGlsaW5n
T3B0aW9uIG9wdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAkocmV2
aXNpb24gODY1NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTIg
QEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJMYXllckNo
cm9taXVtLmgiCi0jaW5jbHVkZSAiTGF5ZXJUaWxlckNocm9taXVtLmgiCi0jaW5jbHVkZSAiVGV4
dHVyZU1hbmFnZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMYXllclRleHR1
cmU7CitjbGFzcyBMYXllclRpbGVyQ2hyb21pdW07CitjbGFzcyBMYXllclRleHR1cmVVcGRhdGVy
OwogCiAvLyBBIExheWVyIHRoYXQgcmVxdWlyZXMgYSBHcmFwaGljc0NvbnRleHQgdG8gcmVuZGVy
IGl0cyBjb250ZW50cy4KIGNsYXNzIENvbnRlbnRMYXllckNocm9taXVtIDogcHVibGljIExheWVy
Q2hyb21pdW0gewpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGJp
bmRDb250ZW50c1RleHR1cmUoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3KGNvbnN0IEludFJl
Y3QmIHRhcmdldFN1cmZhY2VSZWN0KTsKLSAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9vd25lciAmJiBtX293bmVyLT5kcmF3c0NvbnRlbnQoKSAmJiAoIW1f
dGlsZXIgfHwgIW1fdGlsZXItPnNraXBzRHJhdygpKTsgfQorICAgIHZpcnR1YWwgYm9vbCBkcmF3
c0NvbnRlbnQoKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENvbnRlbnRMYXll
ckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwpAQCAtNjYsOCArNjYsMTEg
QEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmco
KSBjb25zdCB7IHJldHVybiAiQ29udGVudExheWVyIjsgfQogICAgIHZpcnR1YWwgdm9pZCBkdW1w
TGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKIAorICAgIHZp
cnR1YWwgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldExheWVy
UmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CiAKKyAgICB2aXJ0dWFsIFBhc3NPd25Q
dHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gY3JlYXRlVGV4dHVyZVVwZGF0ZXIoKTsKKwogICAgIHZp
cnR1YWwgSW50UmVjdCBsYXllckJvdW5kcygpIGNvbnN0OwogCiAgICAgdmlydHVhbCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0aWxpbmdUcmFuc2Zvcm0oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXll
ckNocm9taXVtLmNwcAkocmV2aXNpb24gODY1NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw5ICszOCw0NiBAQAogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCisjaW5jbHVkZSAi
TGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaCIKKyNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVy
IDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXIgeworcHVibGljOgorICAgIEltYWdlTGF5ZXJU
ZXh0dXJlVXBkYXRlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgUGxhdGZvcm1J
bWFnZSYgaW1hZ2UsIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCisgICAgICAgIDogTGF5ZXJUZXh0
dXJlVXBkYXRlcihjb250ZXh0KQorICAgICAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAgICAgICwg
bV90ZXhTdWJJbWFnZSh1c2VNYXBUZXhTdWJJbWFnZSkKKyAgICB7CisgICAgfQorICAgIHZpcnR1
YWwgfkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcigpIHsgfQorCisgICAgdmlydHVhbCBPcmllbnRh
dGlvbiBvcmllbnRhdGlvbigpIHsgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OkJvdHRvbVVw
T3JpZW50YXRpb247IH0KKworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVy
VGV4ZWxzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGltYWdlUmVjdCgpLmNvbnRhaW5zKGNvbnRl
bnRSZWN0KSk7CisgICAgICAgIG1fdGV4U3ViSW1hZ2Uuc2V0U3ViSW1hZ2VTaXplKHRpbGVTaXpl
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoTGF5ZXJUZXh0
dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBk
ZXN0UmVjdCkKKyAgICB7CisgICAgICAgIHRleHR1cmUtPmJpbmRUZXh0dXJlKCk7CisgICAgICAg
IG1fdGV4U3ViSW1hZ2UudXBsb2FkKG1faW1hZ2UucGl4ZWxzKCksIGltYWdlUmVjdCgpLCBzb3Vy
Y2VSZWN0LCBkZXN0UmVjdCwgY29udGV4dCgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSW50
UmVjdCBpbWFnZVJlY3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50
UG9pbnQoMCwgMCksIG1faW1hZ2Uuc2l6ZSgpKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogSW1h
Z2VMYXllclRleHR1cmVVcGRhdGVyIHNob3VsZCByYXRoZXIgb3duIGEgUGxhdGZvcm1JbWFnZSBy
YXRoZXIgdGhhbiBrZWVwaW5nIGEgcmVmZXJlbmNlLgorICAgIGNvbnN0IFBsYXRmb3JtSW1hZ2Um
IG1faW1hZ2U7CisgICAgTGF5ZXJUZXh0dXJlU3ViSW1hZ2UgbV90ZXhTdWJJbWFnZTsKK307CisK
IFBhc3NSZWZQdHI8SW1hZ2VMYXllckNocm9taXVtPiBJbWFnZUxheWVyQ2hyb21pdW06OmNyZWF0
ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQogewogICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSW1hZ2VMYXllckNocm9taXVtKG93bmVyKSk7CkBAIC04MCwxMyArMTE3LDE4IEBAIHZvaWQg
SW1hZ2VMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWYKICAgICAgICAgICAgIG1fdGlsZXIt
PmludmFsaWRhdGVSZWN0KHBhaW50UmVjdCk7CiAgICAgICAgICAgICBtX2RpcnR5UmVjdCA9IElu
dFJlY3QoKTsKICAgICAgICAgfQorICAgICAgICBtX3RpbGVyLT51cGRhdGUocGFpbnRSZWN0KTsK
ICAgICB9CiB9CiAKIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKCkKIHsKLSAgICBJbnRSZWN0IHBhaW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV9kZWNv
ZGVkSW1hZ2Uuc2l6ZSgpKTsKLSAgICBtX3RpbGVyLT51cGRhdGVGcm9tUGl4ZWxzKHBhaW50UmVj
dCwgcGFpbnRSZWN0LCBtX2RlY29kZWRJbWFnZS5waXhlbHMoKSk7CisgICAgbV90aWxlci0+dXBs
b2FkKCk7Cit9CisKK1Bhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gSW1hZ2VMYXllckNo
cm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcigpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIobGF5ZXJSZW5kZXJlckNvbnRleHQoKSwgbV9kZWNv
ZGVkSW1hZ2UsIGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dFN1cHBvcnRzTWFwU3ViKCkpKTsKIH0K
IAogSW50UmVjdCBJbWFnZUxheWVyQ2hyb21pdW06OmxheWVyQm91bmRzKCkgY29uc3QKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJv
bWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA4NjU3NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIklt
YWdlTGF5ZXIiOyB9CiAKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRl
cj4gY3JlYXRlVGV4dHVyZVVwZGF0ZXIoKTsKICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHRpbGluZ1RyYW5zZm9ybSgpOwogICAgIHZpcnR1YWwgSW50UmVjdCBsYXllckJvdW5kcygp
IGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclBhaW50ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUGFpbnRlckNocm9taXVtLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclBh
aW50ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisj
aWZuZGVmIExheWVyUGFpbnRlckNocm9taXVtX2gKKyNkZWZpbmUgTGF5ZXJQYWludGVyQ2hyb21p
dW1faAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEludFJlY3Q7CisKK2NsYXNz
IExheWVyUGFpbnRlckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpID0gMDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisjZW5kaWYgLy8gTGF5ZXJQYWludGVyQ2hyb21pdW1faAorCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclBh
aW50ZXJDaHJvbWl1bS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkocmV2aXNpb24gODY1
NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw5IEBACiAjaW5j
bHVkZSAiR2VvbWV0cnlCaW5kaW5nLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
ICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJMYXllclRleHR1cmUuaCIKKyNpbmNsdWRlICJMYXllclRleHR1cmVV
cGRhdGVyQ2FudmFzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJU
ZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKQEAgLTkzLDcgKzk1LDcg
QEAgc3RhdGljIGJvb2wgaXNTY2FsZU9yVHJhbnNsYXRpb24oY29uc3QgVAogCiB9CiAKLVBhc3NS
ZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0
ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBQYXNzT3duUHRyPFRpbGVQ
YWludEludGVyZmFjZT4gY29udGVudFBhaW50KQorUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hy
b21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGNvbnRleHQsIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRl
bnRQYWludCkKIHsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTA2
LDEwICsxMDgsOSBAQCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSCiB9
CiAKIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVu
dFBhaW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFz
c093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBhaW50KQogICAgIDogbV92aWV3
cG9ydFNjcm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCiAgICAgLCBtX3Jvb3RMYXllcigw
KQotICAgICwgbV9yb290TGF5ZXJDb250ZW50UGFpbnQoY29udGVudFBhaW50KQogICAgICwgbV9j
dXJyZW50U2hhZGVyKDApCiAgICAgLCBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlKDApCiAgICAgLCBt
X29mZnNjcmVlbkZyYW1lYnVmZmVySWQoMCkKQEAgLTEyNSw3ICsxMjYsOSBAQCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvCiAgICAgaWYgKG1fY29udGV4dFN1cHBvcnRz
TWFwU3ViKQogICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxl
ZCgiR0xfQ0hST01JVU1fbWFwX3N1YiIpOwogICAgIG1faGFyZHdhcmVDb21wb3NpdGluZyA9IGlu
aXRpYWxpemVTaGFyZWRPYmplY3RzKCk7Ci0gICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXIgPSBM
YXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBJbnRTaXplKDI1NiwgMjU2KSwgTGF5ZXJU
aWxlckNocm9taXVtOjpOb0JvcmRlclRleGVscyk7CisKKyAgICBPd25QdHI8TGF5ZXJUZXh0dXJl
VXBkYXRlcj4gdGV4dHVyZVVwZGF0ZXIgPSBhZG9wdFB0cihuZXcgTGF5ZXJUZXh0dXJlVXBkYXRl
ckJpdG1hcChtX2NvbnRleHQuZ2V0KCksIGNvbnRlbnRQYWludCwgbV9jb250ZXh0U3VwcG9ydHNN
YXBTdWIpKTsKKyAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlciA9IExheWVyVGlsZXJDaHJvbWl1
bTo6Y3JlYXRlKHRoaXMsIHRleHR1cmVVcGRhdGVyLnJlbGVhc2UoKSwgSW50U2l6ZSgyNTYsIDI1
NiksIExheWVyVGlsZXJDaHJvbWl1bTo6Tm9Cb3JkZXJUZXhlbHMpOwogICAgIEFTU0VSVChtX3Jv
b3RMYXllckNvbnRlbnRUaWxlcik7CiAKICAgICBtX2hlYWRzVXBEaXNwbGF5ID0gQ0NIZWFkc1Vw
RGlzcGxheTo6Y3JlYXRlKHRoaXMpOwpAQCAtMTY1LDcgKzE2OCw3IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjppbnZhbGlkYXRlUm8KIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1
cGRhdGVSb290TGF5ZXJDb250ZW50cygpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyQ29udGVudHMiLCB0aGlzLCAwKTsKLSAgICBtX3Jv
b3RMYXllckNvbnRlbnRUaWxlci0+dXBkYXRlKCptX3Jvb3RMYXllckNvbnRlbnRQYWludCwgbV92
aWV3cG9ydFZpc2libGVSZWN0KTsKKyAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlci0+dXBkYXRl
KG1fdmlld3BvcnRWaXNpYmxlUmVjdCk7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3Um9vdExheWVyKCkKQEAgLTE3Myw3ICsxNzYsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd1Jvb3RMYXllCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2Nyb2xsOwog
ICAgIHNjcm9sbC50cmFuc2xhdGUoLW1fdmlld3BvcnRWaXNpYmxlUmVjdC54KCksIC1tX3ZpZXdw
b3J0VmlzaWJsZVJlY3QueSgpKTsKIAotICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyLT51cGxv
YWRDYW52YXMoKTsKICAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlci0+ZHJhdyhtX3ZpZXdwb3J0
VmlzaWJsZVJlY3QsIHNjcm9sbCwgMS4wZik7CiB9CiAKQEAgLTIxMiw3ICsyMTQsNiBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhCiAgICAgICAgIHJldHVybjsKIAog
ICAgIExheWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotCiAgICAgdXBkYXRlTGF5ZXJz
KHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogCiAgICAgLy8gQmVmb3JlIGRyYXdMYXllcnM6CkBA
IC0zMTcsNiArMzE4LDggQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVy
cwogLy8gIH0KIAogICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXNSZWN1cnNpdmUobV9yb290
TGF5ZXIuZ2V0KCkpOworICAgIC8vIFVwZGF0ZSBjb21wb3NpdG9yIHJlc291cmNlcyBmb3Igcm9v
dCBsYXllci4KKyAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlci0+dXBsb2FkKCk7CiAKICAgICAv
LyBBZnRlciB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlLCBzZXQvd2FpdCBsYXRj
aGVzIGZvciBhbGwgY2hpbGQKICAgICAvLyBjb250ZXh0cy4gVGhpcyB3aWxsIHByZXZlbnQgdGhl
IGNvbXBvc2l0b3IgZnJvbSB1c2luZyBhbnkgb2YgdGhlIGNoaWxkCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaAkocmV2aXNpb24gODY1NzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAkod29y
a2luZyBjb3B5KQpAQCAtNTgsMTcgKzU4LDIyIEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgogI2VuZGlmCiAKKyNpZiBVU0UoU0tJQSkKK2NsYXNzIFNrQ2FudmFzOworI2VuZGlmCisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NIZWFkc1VwRGlzcGxheTsKIGNsYXNzIENDTGF5
ZXJJbXBsOwogY2xhc3MgR2VvbWV0cnlCaW5kaW5nOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7
CitjbGFzcyBMYXllclBhaW50ZXJDaHJvbWl1bTsKIAogLy8gQ2xhc3MgdGhhdCBoYW5kbGVzIGRy
YXdpbmcgb2YgY29tcG9zaXRlZCByZW5kZXIgbGF5ZXJzIHVzaW5nIEdMLgogY2xhc3MgTGF5ZXJS
ZW5kZXJlckNocm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJSZW5kZXJlckNocm9taXVt
PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVt
PiBjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8VGlsZVBh
aW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVy
UmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQ
YXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBjb250ZW50UGFpbnQpOwogCiAgICAgfkxh
eWVyUmVuZGVyZXJDaHJvbWl1bSgpOwogCkBAIC0xNDgsNyArMTUzLDcgQEAgcHJpdmF0ZToKICAg
ICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gTGF5ZXJMaXN0OwogICAgIHR5
cGVkZWYgSGFzaE1hcDxHcmFwaGljc0NvbnRleHQzRCosIGludD4gQ2hpbGRDb250ZXh0TWFwOwog
Ci0gICAgZXhwbGljaXQgTGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50KTsK
KyAgICBleHBsaWNpdCBMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4sIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRlbnRQYWludCk7
CiAKICAgICB2b2lkIHVwZGF0ZUxheWVycyhMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxp
c3QpOwogICAgIHZvaWQgdXBkYXRlUm9vdExheWVyQ29udGVudHMoKTsKQEAgLTE4OCw3ICsxOTMs
NiBAQCBwcml2YXRlOgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcHJvamVjdGlvbk1hdHJp
eDsKIAogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX3Jvb3RMYXllcjsKLSAgICBPd25QdHI8
VGlsZVBhaW50SW50ZXJmYWNlPiBtX3Jvb3RMYXllckNvbnRlbnRQYWludDsKICAgICBPd25QdHI8
TGF5ZXJUaWxlckNocm9taXVtPiBtX3Jvb3RMYXllckNvbnRlbnRUaWxlcjsKIAogICAgIGJvb2wg
bV9oYXJkd2FyZUNvbXBvc2l0aW5nOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1Yklt
YWdlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJMYXllclRleHR1cmVTdWJJbWFnZS5oIgorCisj
aW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0xheWVyVGV4dHVyZVN1YkltYWdlOjpM
YXllclRleHR1cmVTdWJJbWFnZShib29sIHVzZU1hcFRleFN1YkltYWdlKQorICAgIDogbV91c2VN
YXBUZXhTdWJJbWFnZSh1c2VNYXBUZXhTdWJJbWFnZSkKK3sKK30KKworTGF5ZXJUZXh0dXJlU3Vi
SW1hZ2U6On5MYXllclRleHR1cmVTdWJJbWFnZSgpCit7Cit9CisKK3ZvaWQgTGF5ZXJUZXh0dXJl
U3ViSW1hZ2U6OnNldFN1YkltYWdlU2l6ZShjb25zdCBJbnRTaXplJiBzdWJJbWFnZVNpemUpCit7
CisgICAgaWYgKHN1YkltYWdlU2l6ZSA9PSBtX3N1YkltYWdlU2l6ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9zdWJJbWFnZVNpemUgPSBzdWJJbWFnZVNpemU7CisgICAgaWYgKCFtX3VzZU1h
cFRleFN1YkltYWdlKQorICAgICAgICBtX3N1YkltYWdlID0gYWRvcHRBcnJheVB0cihuZXcgdWlu
dDhfdFttX3N1YkltYWdlU2l6ZS53aWR0aCgpICogbV9zdWJJbWFnZVNpemUuaGVpZ2h0KCkgKiA0
XSk7Cit9CisKK3ZvaWQgTGF5ZXJUZXh0dXJlU3ViSW1hZ2U6OnVwbG9hZChjb25zdCB1aW50OF90
KiBpbWFnZSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRl
c3RSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KQoreworICAgIGlmIChtX3VzZU1hcFRleFN1YkltYWdlKQorICAgICAgICB1
cGxvYWRXaXRoTWFwVGV4U3ViSW1hZ2UoaW1hZ2UsIGltYWdlUmVjdCwgc291cmNlUmVjdCwgZGVz
dFJlY3QsIGNvbnRleHQpOworICAgIGVsc2UKKyAgICAgICAgdXBsb2FkV2l0aFRleFN1YkltYWdl
KGltYWdlLCBpbWFnZVJlY3QsIHNvdXJjZVJlY3QsIGRlc3RSZWN0LCBjb250ZXh0KTsKK30KKwor
dm9pZCBMYXllclRleHR1cmVTdWJJbWFnZTo6dXBsb2FkV2l0aFRleFN1YkltYWdlKGNvbnN0IHVp
bnQ4X3QqIGltYWdlLCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCit7CisgICAg
Ly8gT2Zmc2V0IGZyb20gaW1hZ2UtcmVjdCB0byBzb3VyY2UtcmVjdC4KKyAgICBJbnRQb2ludCBv
ZmZzZXQoc291cmNlUmVjdC54KCkgLSBpbWFnZVJlY3QueCgpLCBzb3VyY2VSZWN0LnkoKSAtIGlt
YWdlUmVjdC55KCkpOworCisgICAgY29uc3QgdWludDhfdCogcGl4ZWxTb3VyY2U7CisgICAgaWYg
KGltYWdlUmVjdC53aWR0aCgpID09IHNvdXJjZVJlY3Qud2lkdGgoKSAmJiAhb2Zmc2V0LngoKSkK
KyAgICAgICAgcGl4ZWxTb3VyY2UgPSAmaW1hZ2VbNCAqIG9mZnNldC55KCkgKiBpbWFnZVJlY3Qu
d2lkdGgoKV07CisgICAgZWxzZSB7CisgICAgICAgIC8vIFN0cmlkZXMgbm90IGVxdWFsLCBzbyBk
byBhIHJvdy1ieS1yb3cgbWVtY3B5IGZyb20gdGhlCisgICAgICAgIC8vIHBhaW50IHJlc3VsdHMg
aW50byBhIHRlbXAgYnVmZmVyIGZvciB1cGxvYWRpbmcuCisgICAgICAgIGZvciAoaW50IHJvdyA9
IDA7IHJvdyA8IGRlc3RSZWN0LmhlaWdodCgpOyArK3JvdykKKyAgICAgICAgICAgIG1lbWNweSgm
bV9zdWJJbWFnZVtkZXN0UmVjdC53aWR0aCgpICogNCAqIHJvd10sCisgICAgICAgICAgICAgICAg
ICAgJmltYWdlWzQgKiAob2Zmc2V0LngoKSArIChvZmZzZXQueSgpICsgcm93KSAqIGltYWdlUmVj
dC53aWR0aCgpKV0sCisgICAgICAgICAgICAgICAgICAgZGVzdFJlY3Qud2lkdGgoKSAqIDQpOwor
CisgICAgICAgIHBpeGVsU291cmNlID0gJm1fc3ViSW1hZ2VbMF07CisgICAgfQorICAgIGNvbnRl
eHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGRlc3RS
ZWN0LngoKSwgZGVzdFJlY3QueSgpLCBkZXN0UmVjdC53aWR0aCgpLCBkZXN0UmVjdC5oZWlnaHQo
KSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFLCBwaXhlbFNvdXJjZSk7Cit9CisKK3ZvaWQgTGF5ZXJUZXh0dXJlU3ViSW1hZ2U6OnVwbG9h
ZFdpdGhNYXBUZXhTdWJJbWFnZShjb25zdCB1aW50OF90KiBpbWFnZSwgY29uc3QgSW50UmVjdCYg
aW1hZ2VSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworICAgIC8vIE9mZnNldCBmcm9tIGltYWdlLXJl
Y3QgdG8gc291cmNlLXJlY3QuCisgICAgSW50UG9pbnQgb2Zmc2V0KHNvdXJjZVJlY3QueCgpIC0g
aW1hZ2VSZWN0LngoKSwgc291cmNlUmVjdC55KCkgLSBpbWFnZVJlY3QueSgpKTsKKworICAgIC8v
IFVwbG9hZCB0aWxlIGRhdGEgdmlhIGEgbWFwcGVkIHRyYW5zZmVyIGJ1ZmZlcgorICAgIEV4dGVu
c2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hy
b21pdW0qPihjb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpOworICAgIHVpbnQ4X3QqIHBpeGVsRGVz
dCA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihleHRlbnNpb25zLT5tYXBUZXhTdWJJbWFnZTJEQ0hS
T01JVU0oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGRlc3RSZWN0LngoKSwgZGVz
dFJlY3QueSgpLCBkZXN0UmVjdC53aWR0aCgpLCBkZXN0UmVjdC5oZWlnaHQoKSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBFeHRlbnNp
b25zM0RDaHJvbWl1bTo6V1JJVEVfT05MWSkpOworICAgIEFTU0VSVChwaXhlbERlc3QpOworICAg
IGlmIChpbWFnZVJlY3Qud2lkdGgoKSA9PSBzb3VyY2VSZWN0LndpZHRoKCkgJiYgIW9mZnNldC54
KCkpCisgICAgICAgIG1lbWNweShwaXhlbERlc3QsICZpbWFnZVs0ICogb2Zmc2V0LnkoKSAqIGlt
YWdlUmVjdC53aWR0aCgpXSwgaW1hZ2VSZWN0LndpZHRoKCkgKiBkZXN0UmVjdC5oZWlnaHQoKSAq
IDQpOworICAgIGVsc2UgeworICAgICAgICAvLyBTdHJpZGVzIG5vdCBlcXVhbCwgc28gZG8gYSBy
b3ctYnktcm93IG1lbWNweSBmcm9tIHRoZQorICAgICAgICAvLyBwYWludCByZXN1bHRzIGludG8g
dGhlIHBpeGVsRGVzdAorICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBkZXN0UmVjdC5o
ZWlnaHQoKTsgKytyb3cpCisgICAgICAgICAgICBtZW1jcHkoJnBpeGVsRGVzdFtkZXN0UmVjdC53
aWR0aCgpICogNCAqIHJvd10sCisgICAgICAgICAgICAgICAgICAgJmltYWdlWzQgKiAob2Zmc2V0
LngoKSArIChvZmZzZXQueSgpICsgcm93KSAqIGltYWdlUmVjdC53aWR0aCgpKV0sCisgICAgICAg
ICAgICAgICAgICAgZGVzdFJlY3Qud2lkdGgoKSAqIDQpOworICAgIH0KKyAgICBleHRlbnNpb25z
LT51bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShwaXhlbERlc3QpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1z
dHlsZQogICArIExGCgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJUZXh0dXJlU3ViSW1hZ2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KworI2lmbmRlZiBMYXllclRleHR1cmVTdWJJbWFnZV9oCisjZGVmaW5lIExheWVyVGV4dHVyZVN1
YkltYWdlX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSA8d3RmL093bkFycmF5
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7
CisKK2NsYXNzIExheWVyVGV4dHVyZVN1YkltYWdlIHsKK3B1YmxpYzoKKyAgICBMYXllclRleHR1
cmVTdWJJbWFnZShib29sIHVzZU1hcFN1YkZvclVwbG9hZCk7CisgICAgfkxheWVyVGV4dHVyZVN1
YkltYWdlKCk7CisKKyAgICB2b2lkIHNldFN1YkltYWdlU2l6ZShjb25zdCBJbnRTaXplJik7Cisg
ICAgdm9pZCB1cGxvYWQoY29uc3QgdWludDhfdCogaW1hZ2UsIGNvbnN0IEludFJlY3QmIGltYWdl
UmVjdCwKKyAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRSZWN0JiBkZXN0UmVjdCwKKyAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRCopOwor
Citwcml2YXRlOgorICAgIHZvaWQgdXBsb2FkV2l0aFRleFN1YkltYWdlKGNvbnN0IHVpbnQ4X3Qq
IGltYWdlLCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJl
Y3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqKTsK
KyAgICB2b2lkIHVwbG9hZFdpdGhNYXBUZXhTdWJJbWFnZShjb25zdCB1aW50OF90KiBpbWFnZSwg
Y29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKik7CisK
KyAgICBib29sIG1fdXNlTWFwVGV4U3ViSW1hZ2U7CisgICAgSW50U2l6ZSBtX3N1YkltYWdlU2l6
ZTsKKyAgICBPd25BcnJheVB0cjx1aW50OF90PiBtX3N1YkltYWdlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNl
bmRpZiAvLyBMYXllclRleHR1cmVTdWJJbWFnZV9oCisKClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1Yklt
YWdlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBMYXllclRleHR1cmVVcGRh
dGVyX2gKKyNkZWZpbmUgTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3ND
b250ZXh0M0Q7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIExheWVyVGV4
dHVyZTsKKworY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlciB7CitwdWJsaWM6CisgICAgZXhwbGlj
aXQgTGF5ZXJUZXh0dXJlVXBkYXRlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkgOiBtX2Nv
bnRleHQoY29udGV4dCkgeyB9CisgICAgdmlydHVhbCB+TGF5ZXJUZXh0dXJlVXBkYXRlcigpIHsg
fQorCisgICAgZW51bSBPcmllbnRhdGlvbiB7CisgICAgICAgIEJvdHRvbVVwT3JpZW50YXRpb24s
CisgICAgICAgIFRvcERvd25PcmllbnRhdGlvbgorICAgIH07CisgICAgLy8gUmV0dXJucyB0aGUg
b3JpZW50YXRpb24gb2YgdGhlIHRleHR1cmUgdXBsb2FkZWQgYnkgdGhpcyBpbnRlcmZhY2UuCisg
ICAgdmlydHVhbCBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRT
aXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscykgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVUZXh0dXJlUmVjdChMYXllclRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KKworcHJp
dmF0ZToKKyAgICAvLyBUaGUgZ3JhcGhpY3MgY29udGV4dCB3aXRoIHdoaWNoIHRvIHVwZGF0ZSB0
ZXh0dXJlcy4KKyAgICAvLyBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHRleHR1cmVzIGFyZSBlaXRo
ZXIgY3JlYXRlZCBpbiB0aGUgc2FtZSBjb250ZXh0CisgICAgLy8gb3Igc2hhcmVkIHdpdGggdGhp
cyBjb250ZXh0LgorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorI2VuZGlmIC8vIExheWVyVGV4dHVyZVVwZGF0ZXJfaAorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVV
cGRhdGVyLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBk
YXRlckNhbnZhcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1
cmVVcGRhdGVyQ2FudmFzLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorCisjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oIgorCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKKyNp
bmNsdWRlICJMYXllclRleHR1cmUuaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhczo6TGF5ZXJUZXh0dXJl
VXBkYXRlckNhbnZhcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgUGFzc093blB0cjxMYXll
clBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKKyAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXIoY29u
dGV4dCkKKyAgICAsIG1fcGFpbnRlcihwYWludGVyKQoreworfQorCit2b2lkIExheWVyVGV4dHVy
ZVVwZGF0ZXJDYW52YXM6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICBjb250ZXh0LnRyYW5zbGF0ZSgtY29u
dGVudFJlY3QueCgpLCAtY29udGVudFJlY3QueSgpKTsKKyAgICB7CisgICAgICAgIFRSQUNFX0VW
RU5UKCJMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzOjpwYWludCIsIHRoaXMsIDApOworICAgICAg
ICBtX3BhaW50ZXItPnBhaW50KGNvbnRleHQsIGNvbnRlbnRSZWN0KTsKKyAgICB9CisgICAgbV9j
b250ZW50UmVjdCA9IGNvbnRlbnRSZWN0OworfQorCitMYXllclRleHR1cmVVcGRhdGVyQml0bWFw
OjpMYXllclRleHR1cmVVcGRhdGVyQml0bWFwKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBQ
YXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyLCBib29sIHVzZU1hcFRleFN1
YkltYWdlKQorICAgIDogTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyhjb250ZXh0LCBwYWludGVy
KQorICAgICwgbV90ZXhTdWJJbWFnZSh1c2VNYXBUZXhTdWJJbWFnZSkKK3sKK30KKwordm9pZCBM
YXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYg
Y29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKQor
eworICAgIG1fdGV4U3ViSW1hZ2Uuc2V0U3ViSW1hZ2VTaXplKHRpbGVTaXplKTsKKworICAgIG1f
Y2FudmFzLnJlc2l6ZShjb250ZW50UmVjdC5zaXplKCkpOworICAgIC8vIEFzc3VtcHRpb246IGlm
IGEgdGlsZXIgaXMgdXNpbmcgYm9yZGVyIHRleGVscywgdGhlbiBpdCBpcyBiZWNhdXNlIHRoZQor
ICAgIC8vIGxheWVyIGlzIGxpa2VseSB0byBiZSBmaWx0ZXJlZCBvciB0cmFuc2Zvcm1lZC4gQmVj
YXVzZSBvZiBpdCBtaWdodCBiZQorICAgIC8vIHRyYW5zZm9ybWVkLCBkcmF3IHRoZSB0ZXh0IGlu
IGdyYXlzY2FsZSBpbnN0ZWFkIG9mIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KKyAgICBQbGF0Zm9y
bUNhbnZhczo6UGFpbnRlcjo6VGV4dE9wdGlvbiB0ZXh0T3B0aW9uID0KKyAgICAgICAgYm9yZGVy
VGV4ZWxzID8gUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OkdyYXlzY2FsZVRleHQgOiBQbGF0Zm9y
bUNhbnZhczo6UGFpbnRlcjo6U3VicGl4ZWxUZXh0OworICAgIFBsYXRmb3JtQ2FudmFzOjpQYWlu
dGVyIGNhbnZhc1BhaW50ZXIoJm1fY2FudmFzLCB0ZXh0T3B0aW9uKTsKKyAgICBwYWludENvbnRl
bnRzKCpjYW52YXNQYWludGVyLmNvbnRleHQoKSwgY29udGVudFJlY3QpOworfQorCit2b2lkIExh
eWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnVwZGF0ZVRleHR1cmVSZWN0KExheWVyVGV4dHVyZSog
dGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJl
Y3QpCit7CisgICAgUGxhdGZvcm1DYW52YXM6OkF1dG9Mb2NrZXIgbG9ja2VyKCZtX2NhbnZhcyk7
CisKKyAgICB0ZXh0dXJlLT5iaW5kVGV4dHVyZSgpOworICAgIG1fdGV4U3ViSW1hZ2UudXBsb2Fk
KGxvY2tlci5waXhlbHMoKSwgY29udGVudFJlY3QoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QsIGNv
bnRleHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMu
Y3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJD
YW52YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVy
Q2FudmFzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYg
TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhc19oCisjZGVmaW5lIExheWVyVGV4dHVyZVVwZGF0ZXJD
YW52YXNfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAi
TGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaCIKKyNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1DYW52YXMuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xh
c3MgTGF5ZXJQYWludGVyQ2hyb21pdW07CisKKy8vIEEgTGF5ZXJUZXh0dXJlVXBkYXRlciB3aXRo
IGFuIGludGVybmFsIGNhbnZhcy4KK2NsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMgOiBw
dWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlciB7CitwdWJsaWM6CisgICAgTGF5ZXJUZXh0dXJlVXBk
YXRlckNhbnZhcyhHcmFwaGljc0NvbnRleHQzRCosIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hy
b21pdW0+KTsKKyAgICB2aXJ0dWFsIH5MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzKCkgeyB9CisK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpOworICAgIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50UmVjdDsgfQorCitwcml2YXRlOgorICAgIEludFJl
Y3QgbV9jb250ZW50UmVjdDsKKyAgICBPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IG1fcGFp
bnRlcjsKK307CisKKy8vIEEgTGF5ZXJUZXh0dXJlVXBkYXRlciB3aXRoIGFuIGludGVybmFsIGJp
dG1hcCBjYW52YXMuCitjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwIDogcHVibGljIExh
eWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMgeworcHVibGljOgorICAgIExheWVyVGV4dHVyZVVwZGF0
ZXJCaXRtYXAoR3JhcGhpY3NDb250ZXh0M0QqLCBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9t
aXVtPiwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSk7CisgICAgdmlydHVhbCB+TGF5ZXJUZXh0dXJl
VXBkYXRlckJpdG1hcCgpIHsgfQorCisgICAgdmlydHVhbCBPcmllbnRhdGlvbiBvcmllbnRhdGlv
bigpIHsgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OkJvdHRvbVVwT3JpZW50YXRpb247IH0K
KyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscyk7CisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KExheWVyVGV4dHVyZSosIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKworcHJpdmF0ZToKKyAgICBQ
bGF0Zm9ybUNhbnZhcyBtX2NhbnZhczsKKyAgICBMYXllclRleHR1cmVTdWJJbWFnZSBtX3RleFN1
YkltYWdlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKyNlbmRpZiAvLyBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFz
X2gKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVt
LmNwcAkocmV2aXNpb24gODY1NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwz
OCArMzUsMzAgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyVGV4dHVyZS5oIgorI2luY2x1
ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAKLSNp
bmNsdWRlIDx3dGYvUGFzc093bkFycmF5UHRyLmg+Ci0KIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IExh
eWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5k
ZXJlciwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJvcmRlclRleGVsT3B0aW9uIGJvcmRlcikK
K1Bhc3NPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtPiBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0
ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIFBhc3NPd25QdHI8TGF5ZXJU
ZXh0dXJlVXBkYXRlcj4gdGV4dHVyZVVwZGF0ZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBC
b3JkZXJUZXhlbE9wdGlvbiBib3JkZXIpCiB7CiAgICAgaWYgKCFsYXllclJlbmRlcmVyIHx8IHRp
bGVTaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4g
YWRvcHRQdHIobmV3IExheWVyVGlsZXJDaHJvbWl1bShsYXllclJlbmRlcmVyLCB0aWxlU2l6ZSwg
Ym9yZGVyKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBMYXllclRpbGVyQ2hyb21pdW0obGF5
ZXJSZW5kZXJlciwgdGV4dHVyZVVwZGF0ZXIsIHRpbGVTaXplLCBib3JkZXIpKTsKIH0KIAotTGF5
ZXJUaWxlckNocm9taXVtOjpMYXllclRpbGVyQ2hyb21pdW0oTGF5ZXJSZW5kZXJlckNocm9taXVt
KiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRp
b24gYm9yZGVyKQorTGF5ZXJUaWxlckNocm9taXVtOjpMYXllclRpbGVyQ2hyb21pdW0oTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBQYXNzT3duUHRyPExheWVyVGV4dHVyZVVw
ZGF0ZXI+IHRleHR1cmVVcGRhdGVyLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQm9yZGVyVGV4
ZWxPcHRpb24gYm9yZGVyKQogICAgIDogbV9za2lwc0RyYXcoZmFsc2UpCiAgICAgLCBtX3RpbGlu
Z0RhdGEobWF4KHRpbGVTaXplLndpZHRoKCksIHRpbGVTaXplLmhlaWdodCgpKSwgMCwgMCwgYm9y
ZGVyID09IEhhc0JvcmRlclRleGVscykKLSAgICAsIG1fdXNlTWFwU3ViRm9yVXBsb2FkcyhsYXll
clJlbmRlcmVyLT5jb250ZXh0U3VwcG9ydHNNYXBTdWIoKSkKKyAgICAsIG1fdGV4dHVyZVVwZGF0
ZXIodGV4dHVyZVVwZGF0ZXIpCiAgICAgLCBtX2xheWVyUmVuZGVyZXIobGF5ZXJSZW5kZXJlcikK
IHsKICAgICBzZXRUaWxlU2l6ZSh0aWxlU2l6ZSk7CiB9CiAKLXZvaWQgTGF5ZXJUaWxlckNocm9t
aXVtOjpzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJl
cikKLXsKLSAgICBpZiAobV9sYXllclJlbmRlcmVyICE9IGxheWVyUmVuZGVyZXIpCi0gICAgICAg
IHJlc2V0KCk7Ci0gICAgbV9sYXllclJlbmRlcmVyID0gbGF5ZXJSZW5kZXJlcjsKLX0KLQogTGF5
ZXJUaWxlckNocm9taXVtOjp+TGF5ZXJUaWxlckNocm9taXVtKCkKIHsKICAgICByZXNldCgpOwpA
QCAtODYsOCArNzgsNiBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6c2V0VGlsZVNpemUoY29u
CiAgICAgcmVzZXQoKTsKIAogICAgIG1fdGlsZVNpemUgPSBzaXplOwotICAgIGlmICghbV91c2VN
YXBTdWJGb3JVcGxvYWRzKQotICAgICAgICBtX3RpbGVQaXhlbHMgPSBhZG9wdEFycmF5UHRyKG5l
dyB1aW50OF90W21fdGlsZVNpemUud2lkdGgoKSAqIG1fdGlsZVNpemUuaGVpZ2h0KCkgKiA0XSk7
CiAgICAgbV90aWxpbmdEYXRhLnNldE1heFRleHR1cmVTaXplKG1heChzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCkpKTsKIH0KIApAQCAtMjMwLDcgKzIyMCw3IEBAIHZvaWQgTGF5ZXJUaWxlckNo
cm9taXVtOjppbnZhbGlkYXRlRW50aXIKICAgICBtX3RpbGluZ0RhdGEuc2V0VG90YWxTaXplKDAs
IDApOwogfQogCi12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6dXBkYXRlKFRpbGVQYWludEludGVy
ZmFjZSYgcGFpbnRlciwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit2b2lkIExheWVyVGls
ZXJDaHJvbWl1bTo6dXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogewogICAgIGlm
IChtX3NraXBzRHJhdykKICAgICAgICAgcmV0dXJuOwpAQCAtMjY3LDMwICsyNTcsMTAgQEAgdm9p
ZCBMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZShUaWxlUGFpbgogICAgIGlmIChkaXJ0eUxheWVy
UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fY2FudmFzLnJlc2l6ZSht
X3BhaW50UmVjdC5zaXplKCkpOwotCi0gICAgLy8gQXNzdW1wdGlvbjogaWYgYSB0aWxlciBpcyB1
c2luZyBib3JkZXIgdGV4ZWxzLCB0aGVuIGl0IGlzIGJlY2F1c2UgdGhlCi0gICAgLy8gbGF5ZXIg
aXMgbGlrZWx5IHRvIGJlIGZpbHRlcmVkIG9yIHRyYW5zZm9ybWVkLiBCZWNhdXNlIG9mIGl0IG1p
Z2h0IGJlCi0gICAgLy8gdHJhbnNmb3JtZWQsIGRyYXcgdGhlIHRleHQgaW4gZ3JheXNjYWxlIGlu
c3RlYWQgb2Ygc3VicGl4ZWwgYW50aWFsaWFzaW5nLgotICAgIFBsYXRmb3JtQ2FudmFzOjpQYWlu
dGVyOjpUZXh0T3B0aW9uIHRleHRPcHRpb24gPSBtX3RpbGluZ0RhdGEuYm9yZGVyVGV4ZWxzKCkg
PyBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6R3JheXNjYWxlVGV4dCA6IFBsYXRmb3JtQ2FudmFz
OjpQYWludGVyOjpTdWJwaXhlbFRleHQ7Ci0gICAgUGxhdGZvcm1DYW52YXM6OlBhaW50ZXIgY2Fu
dmFzUGFpbnRlcigmbV9jYW52YXMsIHRleHRPcHRpb24pOwotICAgIGNhbnZhc1BhaW50ZXIuY29u
dGV4dCgpLT50cmFuc2xhdGUoLW1fcGFpbnRSZWN0LngoKSwgLW1fcGFpbnRSZWN0LnkoKSk7Ci0g
ICAgewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGU6OnBh
aW50IiwgdGhpcywgMCk7Ci0gICAgICAgIHBhaW50ZXIucGFpbnQoKmNhbnZhc1BhaW50ZXIuY29u
dGV4dCgpLCBtX3BhaW50UmVjdCk7Ci0gICAgfQorICAgIG1fdGV4dHVyZVVwZGF0ZXItPnByZXBh
cmVUb1VwZGF0ZShtX3BhaW50UmVjdCwgbV90aWxlU2l6ZSwgbV90aWxpbmdEYXRhLmJvcmRlclRl
eGVscygpKTsKIH0KIAotdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnVwbG9hZENhbnZhcygpCi17
Ci0gICAgUGxhdGZvcm1DYW52YXM6OkF1dG9Mb2NrZXIgbG9ja2VyKCZtX2NhbnZhcyk7Ci0gICAg
ewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGVGcm9tUGl4
ZWxzIiwgdGhpcywgMCk7Ci0gICAgICAgIHVwZGF0ZUZyb21QaXhlbHMobV91cGRhdGVSZWN0LCBt
X3BhaW50UmVjdCwgbG9ja2VyLnBpeGVscygpKTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJUaWxl
ckNocm9taXVtOjp1cGRhdGVGcm9tUGl4ZWxzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBj
b25zdCBJbnRSZWN0JiBwYWludFJlY3QsIGNvbnN0IHVpbnQ4X3QqIHBhaW50UGl4ZWxzKQordm9p
ZCBMYXllclRpbGVyQ2hyb21pdW06OnVwbG9hZCgpCiB7CiAgICAgLy8gUGFpbnRpbmcgY291bGQg
Y2F1c2UgY29tcG9zaXRpbmcgdG8gZ2V0IHR1cm5lZCBvZmYsIHdoaWNoIG1heSBjYXVzZSB0aGUg
dGlsZXIgdG8gYmVjb21lIGludmFsaWRhdGVkIG1pZC11cGRhdGUuCiAgICAgaWYgKCFtX3RpbGlu
Z0RhdGEudG90YWxTaXplWCgpIHx8ICFtX3RpbGluZ0RhdGEudG90YWxTaXplWSgpKQpAQCAtMjk5
LDcgKzI2OSw3IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGVGcm9tUGl4ZWwKICAg
ICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CiAK
ICAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwotICAgIGNvbnRlbnRSZWN0VG9UaWxl
SW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBjb250
ZW50UmVjdFRvVGlsZUluZGljZXMobV91cGRhdGVSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0
b20pOwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKICAgICAgICAg
Zm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewogICAgICAgICAgICAgVGlsZSog
dGlsZSA9IHRpbGVBdChpLCBqKTsKQEAgLTMxNCw3ICsyODQsNyBAQCB2b2lkIExheWVyVGlsZXJD
aHJvbWl1bTo6dXBkYXRlRnJvbVBpeGVsCiAgICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2Vj
dChsYXllclJlY3RUb0NvbnRlbnRSZWN0KHRpbGUtPm1fZGlydHlMYXllclJlY3QpKTsKICAgICAg
ICAgICAgIC8vIFBhaW50IHJlY3Qgbm90IGd1YXJhbnRlZWQgdG8gbGluZSB1cCBvbiB0aWxlIGJv
dW5kYXJpZXMsIHNvCiAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCBzb3VyY2VSZWN0IGRv
ZXNuJ3QgZXh0ZW5kIG91dHNpZGUgb2YgaXQuCi0gICAgICAgICAgICBzb3VyY2VSZWN0LmludGVy
c2VjdChwYWludFJlY3QpOworICAgICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QobV9wYWlu
dFJlY3QpOwogICAgICAgICAgICAgaWYgKHNvdXJjZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCkBAIC0zMzQsNTcgKzMwNCwyMiBAQCB2b2lkIExheWVyVGlsZXJD
aHJvbWl1bTo6dXBkYXRlRnJvbVBpeGVsCiAgICAgICAgICAgICAgICAgQ1JBU0goKTsKIAogICAg
ICAgICAgICAgLy8gT2Zmc2V0IGZyb20gcGFpbnQgcmVjdGFuZ2xlIHRvIHRoaXMgdGlsZSdzIGRp
cnR5IHJlY3RhbmdsZS4KLSAgICAgICAgICAgIEludFBvaW50IHBhaW50T2Zmc2V0KHNvdXJjZVJl
Y3QueCgpIC0gcGFpbnRSZWN0LngoKSwgc291cmNlUmVjdC55KCkgLSBwYWludFJlY3QueSgpKTsK
KyAgICAgICAgICAgIEludFBvaW50IHBhaW50T2Zmc2V0KHNvdXJjZVJlY3QueCgpIC0gbV9wYWlu
dFJlY3QueCgpLCBzb3VyY2VSZWN0LnkoKSAtIG1fcGFpbnRSZWN0LnkoKSk7CiAgICAgICAgICAg
ICBpZiAocGFpbnRPZmZzZXQueCgpIDwgMCkKICAgICAgICAgICAgICAgICBDUkFTSCgpOwogICAg
ICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LnkoKSA8IDApCiAgICAgICAgICAgICAgICAgQ1JBU0go
KTsKLSAgICAgICAgICAgIGlmIChwYWludE9mZnNldC54KCkgKyBkZXN0UmVjdC53aWR0aCgpID4g
cGFpbnRSZWN0LndpZHRoKCkpCisgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueCgpICsgZGVz
dFJlY3Qud2lkdGgoKSA+IG1fcGFpbnRSZWN0LndpZHRoKCkpCiAgICAgICAgICAgICAgICAgQ1JB
U0goKTsKLSAgICAgICAgICAgIGlmIChwYWludE9mZnNldC55KCkgKyBkZXN0UmVjdC5oZWlnaHQo
KSA+IHBhaW50UmVjdC5oZWlnaHQoKSkKKyAgICAgICAgICAgIGlmIChwYWludE9mZnNldC55KCkg
KyBkZXN0UmVjdC5oZWlnaHQoKSA+IG1fcGFpbnRSZWN0LmhlaWdodCgpKQogICAgICAgICAgICAg
ICAgIENSQVNIKCk7CiAKICAgICAgICAgICAgIHRpbGUtPnRleHR1cmUoKS0+YmluZFRleHR1cmUo
KTsKLQogICAgICAgICAgICAgY29uc3QgR0MzRGludCBmaWx0ZXIgPSBtX3RpbGluZ0RhdGEuYm9y
ZGVyVGV4ZWxzKCkgPyBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSIDogR3JhcGhpY3NDb250ZXh0
M0Q6Ok5FQVJFU1Q7CiAgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1l
dGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfTUlOX0ZJTFRFUiwgZmlsdGVyKSk7CiAgICAgICAgICAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgZmlsdGVyKSk7CiAKLSAgICAgICAgICAg
IGlmIChtX3VzZU1hcFN1YkZvclVwbG9hZHMpIHsKLSAgICAgICAgICAgICAgICAvLyBVcGxvYWQg
dGlsZSBkYXRhIHZpYSBhIG1hcHBlZCB0cmFuc2ZlciBidWZmZXIKLSAgICAgICAgICAgICAgICBF
eHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMz
RENocm9taXVtKj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKTsKLSAgICAgICAgICAgICAgICB1
aW50OF90KiBwaXhlbERlc3QgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZXh0ZW5zaW9ucy0+bWFw
VGV4U3ViSW1hZ2UyRENIUk9NSVVNKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBk
ZXN0UmVjdC54KCksIGRlc3RSZWN0LnkoKSwgZGVzdFJlY3Qud2lkdGgoKSwgZGVzdFJlY3QuaGVp
Z2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OldSSVRFX09OTFkpKTsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQocGl4ZWxEZXN0KTsKLSAgICAgICAgICAgICAgICBpZiAocGFpbnRSZWN0Lndp
ZHRoKCkgPT0gc291cmNlUmVjdC53aWR0aCgpICYmICFwYWludE9mZnNldC54KCkpCi0gICAgICAg
ICAgICAgICAgICAgIG1lbWNweShwaXhlbERlc3QsICZwYWludFBpeGVsc1s0ICogcGFpbnRPZmZz
ZXQueSgpICogcGFpbnRSZWN0LndpZHRoKCldLCBwYWludFJlY3Qud2lkdGgoKSAqIGRlc3RSZWN0
LmhlaWdodCgpICogNCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIFN0cmlkZXMgbm90IGVxdWFsLCBzbyBkbyBhIHJvdy1ieS1yb3cgbWVtY3B5IGZyb20g
dGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIHBhaW50IHJlc3VsdHMgaW50byB0aGUgcGl4ZWxE
ZXN0Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRlc3RSZWN0
LmhlaWdodCgpOyArK3JvdykKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmcGl4ZWxE
ZXN0W2Rlc3RSZWN0LndpZHRoKCkgKiA0ICogcm93XSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmcGFpbnRQaXhlbHNbNCAqIChwYWludE9mZnNldC54KCkgKyAocGFpbnRPZmZzZXQu
eSgpICsgcm93KSAqIHBhaW50UmVjdC53aWR0aCgpKV0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFJlY3Qud2lkdGgoKSAqIDQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBleHRlbnNpb25zLT51bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShwaXhlbERl
c3QpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90
KiBwaXhlbFNvdXJjZTsKLSAgICAgICAgICAgICAgICBpZiAocGFpbnRSZWN0LndpZHRoKCkgPT0g
c291cmNlUmVjdC53aWR0aCgpICYmICFwYWludE9mZnNldC54KCkpCi0gICAgICAgICAgICAgICAg
ICAgIHBpeGVsU291cmNlID0gJnBhaW50UGl4ZWxzWzQgKiBwYWludE9mZnNldC55KCkgKiBwYWlu
dFJlY3Qud2lkdGgoKV07Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIFN0cmlkZXMgbm90IGVxdWFsLCBzbyBkbyBhIHJvdy1ieS1yb3cgbWVtY3B5IGZyb20g
dGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIHBhaW50IHJlc3VsdHMgaW50byBhIHRlbXAgYnVm
ZmVyIGZvciB1cGxvYWRpbmcuCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7
IHJvdyA8IGRlc3RSZWN0LmhlaWdodCgpOyArK3JvdykKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1lbWNweSgmbV90aWxlUGl4ZWxzW2Rlc3RSZWN0LndpZHRoKCkgKiA0ICogcm93XSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFpbnRQaXhlbHNbNCAqIChwYWludE9mZnNldC54
KCkgKyAocGFpbnRPZmZzZXQueSgpICsgcm93KSAqIHBhaW50UmVjdC53aWR0aCgpKV0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJlY3Qud2lkdGgoKSAqIDQpOwotCi0gICAg
ICAgICAgICAgICAgICAgIHBpeGVsU291cmNlID0gJm1fdGlsZVBpeGVsc1swXTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLQotICAgICAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhT
dWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBkZXN0UmVjdC54KCks
IGRlc3RSZWN0LnkoKSwgZGVzdFJlY3Qud2lkdGgoKSwgZGVzdFJlY3QuaGVpZ2h0KCksIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgcGl4
ZWxTb3VyY2UpKTsKLSAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgbV90ZXh0dXJlVXBkYXRl
ci0+dXBkYXRlVGV4dHVyZVJlY3QodGlsZS0+dGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0UmVj
dCk7CiAgICAgICAgICAgICB0aWxlLT5jbGVhckRpcnR5KCk7CiAgICAgICAgIH0KICAgICB9CkBA
IC00MzAsNyArMzY1LDEyIEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpkcmF3KGNvbnN0IElu
dFIKICAgICAgICAgICAgIGZsb2F0IHRleFRyYW5zbGF0ZVkgPSB0ZXhPZmZzZXQueSgpIC8gdGls
ZUhlaWdodDsKICAgICAgICAgICAgIGZsb2F0IHRleFNjYWxlWCA9IHRpbGVSZWN0LndpZHRoKCkg
LyB0aWxlV2lkdGg7CiAgICAgICAgICAgICBmbG9hdCB0ZXhTY2FsZVkgPSB0aWxlUmVjdC5oZWln
aHQoKSAvIHRpbGVIZWlnaHQ7Ci0KKyAgICAgICAgICAgIC8vIE9wZW5HTCBjb29yZGluYXRlIHN5
c3RlbSBpcyBib3R0b20tdXAuCisgICAgICAgICAgICAvLyBJZiB0aWxlIHRleHR1cmUgaXMgdG9w
LWRvd24sIHdlIG5lZWQgdG8gZmxpcCB0aGUgdGV4dHVyZSBjb29yZGluYXRlcy4KKyAgICAgICAg
ICAgIGlmIChtX3RleHR1cmVVcGRhdGVyLT5vcmllbnRhdGlvbigpID09IExheWVyVGV4dHVyZVVw
ZGF0ZXI6OlRvcERvd25PcmllbnRhdGlvbikgeworICAgICAgICAgICAgICAgIHRleFRyYW5zbGF0
ZVkgKz0gMS4wOworICAgICAgICAgICAgICAgIHRleFNjYWxlWSAqPSAtMS4wOworICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVy
KCktPnByb2plY3Rpb25NYXRyaXgoKSwgdGlsZU1hdHJpeCwgdGlsZVJlY3Qud2lkdGgoKSwgdGls
ZVJlY3QuaGVpZ2h0KCksIG9wYWNpdHksIHRleFRyYW5zbGF0ZVgsIHRleFRyYW5zbGF0ZVksIHRl
eFNjYWxlWCwgdGV4U2NhbGVZLCBwcm9ncmFtKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1
bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA4NjU3NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSwyOCArMzEsMjIgQEAKIAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJMYXllclRleHR1cmUuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNhbnZhcy5o
IgogI2luY2x1ZGUgIlRpbGluZ0RhdGEuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgot
I2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFz
cyBMYXllclJlbmRlcmVyQ2hyb21pdW07Ci0KLWNsYXNzIFRpbGVQYWludEludGVyZmFjZSB7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpID0gMDsKLX07CitjbGFzcyBMYXllclRleHR1cmVV
cGRhdGVyOwogCiBjbGFzcyBMYXllclRpbGVyQ2hyb21pdW0gewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKExheWVyVGlsZXJDaHJvbWl1bSk7CiBwdWJsaWM6CiAgICAgZW51bSBCb3JkZXJUZXhl
bE9wdGlvbiB7IEhhc0JvcmRlclRleGVscywgTm9Cb3JkZXJUZXhlbHMgfTsKIAotICAgIHN0YXRp
YyBQYXNzT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gY3JlYXRlKExheWVyUmVuZGVyZXJDaHJv
bWl1bSosIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbik7CisgICAg
c3RhdGljIFBhc3NPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtPiBjcmVhdGUoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKiwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyPiwgY29uc3QgSW50U2l6
ZSYgdGlsZVNpemUsIEJvcmRlclRleGVsT3B0aW9uKTsKIAogICAgIH5MYXllclRpbGVyQ2hyb21p
dW0oKTsKIApAQCAtNjAsMTYgKzU0LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGludmFsaWRhdGVS
ZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKICAgICB2b2lkIGludmFsaWRhdGVFbnRp
cmVMYXllcigpOwogCi0gICAgLy8gUGFpbnQgYWxsIGludmFsaWRhdGlvbnMgYW5kIG1pc3Npbmcg
dGlsZXMgbmVlZGVkIHRvIGRyYXcgdGhlIGNvbnRlbnRSZWN0Ci0gICAgLy8gaW50byB0aGUgaW50
ZXJuYWwgY2FudmFzLgotICAgIHZvaWQgdXBkYXRlKFRpbGVQYWludEludGVyZmFjZSYgcGFpbnRl
ciwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwotCisgICAgLy8gUGFpbnQgYWxsIGludmFs
aWRhdGlvbnMgYW5kIG1pc3NpbmcgdGlsZXMgbmVlZGVkIHRvIGRyYXcgdGhlIGNvbnRlbnRSZWN0
LgorICAgIHZvaWQgdXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKICAgICAvLyBS
ZXNlcnZlIGFuZCB1cGxvYWQgdGlsZSB0ZXh0dXJlcyBmcm9tIHRoZSBpbnRlcm5hbCBjYW52YXMu
Ci0gICAgdm9pZCB1cGxvYWRDYW52YXMoKTsKLQotICAgIC8vIFJlc2VydmUgYW5kIHVwbG9hZCB0
aWxlIHRleHR1cmVzIGZyb20gYW4gZXh0ZXJuYWxseSBwYWludGVkIGJ1ZmZlci4KLSAgICB2b2lk
IHVwZGF0ZUZyb21QaXhlbHMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFJl
Y3QmIHBhaW50UmVjdCwgY29uc3QgdWludDhfdCogcGl4ZWxzKTsKLQorICAgIHZvaWQgdXBsb2Fk
KCk7CiAgICAgLy8gRHJhdyBhbGwgdGlsZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCB0aGUgY29udGVu
dCByZWN0LgogICAgIHZvaWQgZHJhdyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKIApAQCAtNzcsNyArNjUsNiBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMYXllclBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBwb3Np
dGlvbik7CiAgICAgLy8gQ2hhbmdlIHRoZSB0aWxlIHNpemUuICBUaGlzIG1heSBpbnZhbGlkYXRl
IGFsbCB0aGUgZXhpc3RpbmcgdGlsZXMuCiAgICAgdm9pZCBzZXRUaWxlU2l6ZShjb25zdCBJbnRT
aXplJiBzaXplKTsKLSAgICB2b2lkIHNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKik7CiAKICAgICBib29sIHNraXBzRHJhdygpIGNvbnN0IHsgcmV0dXJuIG1fc2tpcHNEcmF3
OyB9CiAKQEAgLTg3LDEyICs3NCwxMiBAQCBwdWJsaWM6CiAgICAgTGF5ZXJUZXh0dXJlKiBnZXRT
aW5nbGVUZXh0dXJlKCk7CiAKIHByaXZhdGU6Ci0gICAgTGF5ZXJUaWxlckNocm9taXVtKExheWVy
UmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9w
dGlvbik7CisgICAgTGF5ZXJUaWxlckNocm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIFBh
c3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4sIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBC
b3JkZXJUZXhlbE9wdGlvbik7CiAKICAgICBjbGFzcyBUaWxlIDogcHVibGljIFJlZkNvdW50ZWQ8
VGlsZT4gewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaWxlKTsKICAgICBwdWJsaWM6
Ci0gICAgICAgIGV4cGxpY2l0IFRpbGUoUGFzc093blB0cjxMYXllclRleHR1cmU+IHRleCkgOiBt
X3RleCh0ZXgpLCBtX2koLTEpLCBtX2ooLTEpIHt9CisgICAgICAgIGV4cGxpY2l0IFRpbGUoUGFz
c093blB0cjxMYXllclRleHR1cmU+IHRleCkgOiBtX3RleCh0ZXgpLCBtX2koLTEpLCBtX2ooLTEp
IHsgfQogCiAgICAgICAgIExheWVyVGV4dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4Lmdl
dCgpOyB9CiAKQEAgLTE1NywxOSArMTQ0LDEzIEBAIHByaXZhdGU6CiAgICAgLy8gVGlnaHRseSBw
YWNrZWQgc2V0IG9mIHVudXNlZCB0aWxlcy4KICAgICBWZWN0b3I8UmVmUHRyPFRpbGU+ID4gbV91
bnVzZWRUaWxlczsKIAotICAgIC8vIFN0YXRlIGhlbGQgYmV0d2VlbiB1cGRhdGUgYW5kIHVwbG9h
ZENhbnZhcy4KKyAgICAvLyBTdGF0ZSBoZWxkIGJldHdlZW4gdXBkYXRlIGFuZCB1cGxvYWQuCiAg
ICAgSW50UmVjdCBtX3BhaW50UmVjdDsKICAgICBJbnRSZWN0IG1fdXBkYXRlUmVjdDsKLSAgICBQ
bGF0Zm9ybUNhbnZhcyBtX2NhbnZhczsKLQotICAgIC8vIENhY2hlIGEgdGlsZS1zaXplZCBwaXhl
bCBidWZmZXIgdG8gZHJhdyBpbnRvLgotICAgIE93bkFycmF5UHRyPHVpbnQ4X3Q+IG1fdGlsZVBp
eGVsczsKIAogICAgIFRpbGluZ0RhdGEgbV90aWxpbmdEYXRhOwogCi0gICAgLy8gV2hldGhlciB0
aGUgdGlsZXIgd2lsbCB1c2UgR0xfQ0hST01JVU1fbWFwX3N1YiBmb3IgdGV4dHVyZSB1cGxvYWRz
LgotICAgIGJvb2wgbV91c2VNYXBTdWJGb3JVcGxvYWRzOwotCisgICAgT3duUHRyPExheWVyVGV4
dHVyZVVwZGF0ZXI+IG1fdGV4dHVyZVVwZGF0ZXI7CiAgICAgTGF5ZXJSZW5kZXJlckNocm9taXVt
KiBtX2xheWVyUmVuZGVyZXI7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNw
bGF5LmNwcAkocmV2aXNpb24gODY1NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXll
clJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclRleHR1cmUuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybUNhbnZhcy5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlICJUZXh0
U3RyZWFtLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKQEAgLTExNCw3ICsxMTUsNyBA
QCB2b2lkIENDSGVhZHNVcERpc3BsYXk6OmRyYXcoKQogICAgICAgICAgICAgbWVtY3B5KHBpeGVs
RGVzdCwgbG9ja2VyLnBpeGVscygpLCBodWRTaXplLndpZHRoKCkgKiBodWRTaXplLmhlaWdodCgp
ICogNCk7CiAgICAgICAgICAgICBleHRlbnNpb25zLT51bm1hcFRleFN1YkltYWdlMkRDSFJPTUlV
TShwaXhlbERlc3QpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIEdMQyhjb250ZXh0Lmdl
dCgpLCBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAw
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgY2FudmFzLnNpemUoKS53aWR0aCgpLCBjYW52YXMu
c2l6ZSgpLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGxvY2tlci5waXhlbHMoKSkpOworICAgICAgICAgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBjYW52YXMuc2l6ZSgpLndpZHRoKCksIGNh
bnZhcy5zaXplKCkuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgbG9ja2VyLnBpeGVscygpKSk7CiAgICAgfQogCiAg
ICAgLy8gRHJhdyB0aGUgSFVEIG9udG8gdGhlIGRlZmF1bHQgcmVuZGVyIHN1cmZhY2UuCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gODY1NzQpCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisy
MDExLTA1LTE2ICBBbG9rIFByaXlhZGFyc2hpICA8YWxva3BAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwbGl0IGNhbnZhcyBm
cm9tIExheWVyVGlsZXJDaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjA3MTkKKworICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisK
IDIwMTEtMDUtMTMgIFRhbyBCYWkgIDxtaWNoYWVsYmFpQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA4NjU3NCkKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIs
NyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJLZXlib2Fy
ZENvZGVzLmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIkxheWVyUGFp
bnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUg
Ik5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTI0MDksNyArMjQxMCw3
IEBAIHZvaWQgV2ViVmlld0ltcGw6OmludmFsaWRhdGVSb290TGF5ZXJSZWMKICAgICBzZXRSb290
TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKIH0KIAotY2xhc3MgV2ViVmlld0ltcGxDb250ZW50UGFpbnRl
ciA6IHB1YmxpYyBUaWxlUGFpbnRJbnRlcmZhY2UgeworY2xhc3MgV2ViVmlld0ltcGxDb250ZW50
UGFpbnRlciA6IHB1YmxpYyBMYXllclBhaW50ZXJDaHJvbWl1bSB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcik7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NPd25QdHI8V2ViVmlld0ltcGxDb250ZW50UGFpbnRlcio+IGNyZWF0ZShXZWJWaWV3SW1w
bCogd2ViVmlld0ltcGwpCg==
</data>
<flag name="review"
          id="86851"
          type_id="1"
          status="-"
          setter="jamesr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93696</attachid>
            <date>2011-05-16 14:49:55 -0700</date>
            <delta_ts>2011-05-18 15:26:21 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>layer.txt</filename>
            <type>text/plain</type>
            <size>58564</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2NjEwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODIgQEAKKzIwMTEtMDUtMTYgIEFsb2sgUHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBTcGxpdCBjYW52YXMgZnJvbSBMYXll
clRpbGVyQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTYwNzE5CisKKyAgICAgICAgTGF5ZXJUaWxlckNocm9taXVtIG5vdyBqdXN0IGRvZXMg
dGlsaW5nLiBJdCBkZWxlZ2F0ZXMgdGhlIHRhc2sgb2YgcGFpbnRpbmcgYW5kIHVwZGF0aW5nIHRl
eHR1cmVzIHRvIExheWVyVGV4dHVyZVVwZGF0ZXIuCisgICAgICAgIEFsc28gYWJzdHJhY3RlZCBM
YXllclRleHR1cmVTdWJJbWFnZSB0byB1cGxvYWQgdGV4dHVyZSBwaXhlbHMuCisKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vVHJhY2VFdmVudC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXllckNo
cm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjp+Q29udGVu
dExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06
OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNo
cm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXll
ckNocm9taXVtOjpzZXRMYXllclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRM
YXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OkltYWdl
TGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVy
ZVVwZGF0ZXI6On5JbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyOjpvcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6aW1hZ2VSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
VGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUGFpbnRlckNocm9taXVtLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jvb3RMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERyYXdMYXll
cnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXll
cnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVN1YkltYWdlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVT
dWJJbWFnZTo6TGF5ZXJUZXh0dXJlU3ViSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
ZXh0dXJlU3ViSW1hZ2U6On5MYXllclRleHR1cmVTdWJJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRleHR1cmVTdWJJbWFnZTo6c2V0U3ViSW1hZ2VTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyVGV4dHVyZVN1YkltYWdlOjp1cGxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUZXh0dXJlU3ViSW1hZ2U6OnVwbG9hZFdpdGhUZXhTdWJJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclRleHR1cmVTdWJJbWFnZTo6dXBsb2FkV2l0aE1hcFRleFN1YkltYWdlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1
cmVVcGRhdGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRl
cjo6TGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVV
cGRhdGVyOjp+TGF5ZXJUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRl
eHR1cmVVcGRhdGVyOjpjb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzOjpMYXllclRleHR1cmVVcGRhdGVyQ2FudmFz
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6OnBhaW50Q29u
dGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6TGF5
ZXJUZXh0dXJlVXBkYXRlckJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVV
cGRhdGVyQml0bWFwOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
ZXh0dXJlVXBkYXRlckJpdG1hcDo6dXBkYXRlVGV4dHVyZVJlY3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzOjp+TGF5ZXJUZXh0
dXJlVXBkYXRlckNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVy
Q2FudmFzOjpjb250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRh
dGVyQml0bWFwOjp+TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpvcmllbnRhdGlvbik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyVGlsZXJDaHJvbWl1bTo6TGF5ZXJUaWxlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6c2V0VGlsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJUaWxlckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
VGlsZXJDaHJvbWl1bTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUaWxlckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hy
b21pdW06OlRpbGU6OlRpbGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlz
cGxheTo6ZHJhdyk6CisKIDIwMTEtMDUtMTYgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmcuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA4NjYwNSkKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNDAyNywxMCArNDAyNywxNiBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclBhaW50
ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlLmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2Uu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJl
VXBkYXRlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2
YXRlQ2hyb21pdW0uaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9U
cmFjZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vVHJhY2VFdmVudC5oCShyZXZpc2lvbiA4NjYwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1RyYWNlRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBA
QAogI2RlZmluZSBUcmFjZUV2ZW50X2gKIAogI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCisj
aW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAKIC8vIEltcGxlbWVudGF0aW9uIGRldGFpbDog
dHJhY2UgZXZlbnQgbWFjcm9zIGNyZWF0ZSB0ZW1wb3JhcnkgdmFyaWFibGVzCiAvLyB0byBrZWVw
IGluc3RydW1lbnRhdGlvbiBvdmVyaGVhZCBsb3cuIFRoZXNlIG1hY3JvcyBnaXZlIGVhY2ggdGVt
cG9yYXJ5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lv
biA4NjYwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsMTEgQEAK
IAogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKKyNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVy
UmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyVGV4dHVyZS5oIgorI2luY2x1ZGUg
IkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCIKKyNpbmNsdWRlICJMYXllclRpbGVyQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJUZXh0U3Ry
ZWFtLmgiCiAKQEAgLTUxLDI0ICs1NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bT4gQ29udGVu
dExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQotewot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29udGVudExheWVyQ2hyb21pdW0ob3duZXIpKTsKLX0K
LQotQ29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXllckNocm9taXVtKEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bSogb3duZXIpCi0gICAgOiBMYXllckNocm9taXVtKG93bmVyKQotICAgICwgbV90
aWxpbmdPcHRpb24oQ29udGVudExheWVyQ2hyb21pdW06OkF1dG9UaWxlKQotewotfQotCi1Db250
ZW50TGF5ZXJDaHJvbWl1bTo6fkNvbnRlbnRMYXllckNocm9taXVtKCkKLXsKLSAgICBtX3RpbGVy
LmNsZWFyKCk7Ci0gICAgTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpOwotfQotCi1j
bGFzcyBDb250ZW50TGF5ZXJQYWludGVyIDogcHVibGljIFRpbGVQYWludEludGVyZmFjZSB7Citj
bGFzcyBDb250ZW50TGF5ZXJQYWludGVyIDogcHVibGljIExheWVyUGFpbnRlckNocm9taXVtIHsK
IHB1YmxpYzoKICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJQYWludGVyKEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSogb3duZXIpCiAgICAgICAgIDogbV9vd25lcihvd25lcikKQEAgLTg1LDE0ICs3MSwy
NyBAQCBwcml2YXRlOgogICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogbV9vd25lcjsKIH07CiAK
K1Bhc3NSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW0+IENvbnRlbnRMYXllckNocm9taXVtOjpj
cmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENvbnRlbnRMYXllckNocm9taXVtKG93bmVyKSk7Cit9CisKK0NvbnRlbnRMYXllckNo
cm9taXVtOjpDb250ZW50TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVy
KQorICAgIDogTGF5ZXJDaHJvbWl1bShvd25lcikKKyAgICAsIG1fdGlsaW5nT3B0aW9uKENvbnRl
bnRMYXllckNocm9taXVtOjpBdXRvVGlsZSkKK3sKK30KKworQ29udGVudExheWVyQ2hyb21pdW06
On5Db250ZW50TGF5ZXJDaHJvbWl1bSgpCit7CisgICAgY2xlYW51cFJlc291cmNlcygpOworfQor
CiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eShjb25zdCBJ
bnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCkKIHsKICAgICBBU1NFUlQoZHJhd3NDb250ZW50KCkp
OwogICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwogCi0gICAgY3JlYXRlVGlsZXJJZk5lZWRl
ZCgpOwotCi0gICAgQ29udGVudExheWVyUGFpbnRlciBwYWludGVyKG1fb3duZXIpOwogICAgIHVw
ZGF0ZUxheWVyU2l6ZShsYXllckJvdW5kcygpLnNpemUoKSk7CiAKICAgICBJbnRSZWN0IGxheWVy
UmVjdCA9IHZpc2libGVMYXllclJlY3QodGFyZ2V0U3VyZmFjZVJlY3QpOwpAQCAtMTAzLDE1ICsx
MDIsMjYgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50cwogICAgIGRp
cnR5LmludGVyc2VjdChsYXllckJvdW5kcygpKTsKICAgICBtX3RpbGVyLT5pbnZhbGlkYXRlUmVj
dChkaXJ0eSk7CiAKLSAgICBtX3RpbGVyLT51cGRhdGUocGFpbnRlciwgbGF5ZXJSZWN0KTsKKyAg
ICBtX3RpbGVyLT5wcmVwYXJlVG9VcGRhdGUobGF5ZXJSZWN0KTsKICAgICBtX2RpcnR5UmVjdCA9
IEZsb2F0UmVjdCgpOwogfQogCit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpjbGVhbnVwUmVz
b3VyY2VzKCkKK3sKKyAgICBtX3RpbGVyLmNsZWFyKCk7CisgICAgTGF5ZXJDaHJvbWl1bTo6Y2xl
YW51cFJlc291cmNlcygpOworfQorCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpzZXRMYXll
clJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKIHsKICAgICBM
YXllckNocm9taXVtOjpzZXRMYXllclJlbmRlcmVyKGxheWVyUmVuZGVyZXIpOwogICAgIGNyZWF0
ZVRpbGVySWZOZWVkZWQoKTsKLSAgICBtX3RpbGVyLT5zZXRMYXllclJlbmRlcmVyKGxheWVyUmVu
ZGVyZXIpOworfQorCitQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IENvbnRlbnRMYXll
ckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcigpCit7CisgICAgT3duUHRyPExheWVyUGFp
bnRlckNocm9taXVtPiBwYWludGVyID0gYWRvcHRQdHIobmV3IENvbnRlbnRMYXllclBhaW50ZXIo
bV9vd25lcikpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJUZXh0dXJlVXBkYXRlckJp
dG1hcChsYXllclJlbmRlcmVyQ29udGV4dCgpLCBwYWludGVyLnJlbGVhc2UoKSwgbGF5ZXJSZW5k
ZXJlcigpLT5jb250ZXh0U3VwcG9ydHNNYXBTdWIoKSkpOwogfQogCiBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dGlsaW5nVHJhbnNmb3JtKCkKQEAgLTE4NiwxNiAr
MTk2LDI2IEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXcoY29uc3QgSW4KICAgICAg
ICAgbV90aWxlci0+ZHJhdyhsYXllclJlY3QsIHRyYW5zZm9ybSwgY2NMYXllckltcGwoKS0+ZHJh
d09wYWNpdHkoKSk7CiB9CiAKK2Jvb2wgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVu
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb3duZXIgJiYgbV9vd25lci0+ZHJhd3NDb250ZW50
KCkgJiYgKCFtX3RpbGVyIHx8ICFtX3RpbGVyLT5za2lwc0RyYXcoKSk7Cit9CisKIHZvaWQgQ29u
dGVudExheWVyQ2hyb21pdW06OmNyZWF0ZVRpbGVySWZOZWVkZWQoKQogewogICAgIGlmIChtX3Rp
bGVyKQogICAgICAgICByZXR1cm47Ci0gICAgbV90aWxlciA9IExheWVyVGlsZXJDaHJvbWl1bTo6
Y3JlYXRlKGxheWVyUmVuZGVyZXIoKSwgSW50U2l6ZShkZWZhdWx0VGlsZVNpemUsIGRlZmF1bHRU
aWxlU2l6ZSksIExheWVyVGlsZXJDaHJvbWl1bTo6SGFzQm9yZGVyVGV4ZWxzKTsKKworICAgIG1f
dGlsZXIgPSBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSgKKyAgICAgICAgbGF5ZXJSZW5kZXJl
cigpLAorICAgICAgICBjcmVhdGVUZXh0dXJlVXBkYXRlcigpLAorICAgICAgICBJbnRTaXplKGRl
ZmF1bHRUaWxlU2l6ZSwgZGVmYXVsdFRpbGVTaXplKSwKKyAgICAgICAgTGF5ZXJUaWxlckNocm9t
aXVtOjpIYXNCb3JkZXJUZXhlbHMpOwogfQogCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkKIHsKLSAgICBtX3RpbGVyLT51cGxvYWRDYW52YXMo
KTsKKyAgICBtX3RpbGVyLT51cGRhdGVSZWN0KCk7CiB9CiAKIHZvaWQgQ29udGVudExheWVyQ2hy
b21pdW06OnNldFRpbGluZ09wdGlvbihUaWxpbmdPcHRpb24gb3B0aW9uKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA4NjYwNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxMiBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKIAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJMYXllclRp
bGVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIExheWVyVGV4dHVyZTsKK2NsYXNzIExheWVyVGlsZXJDaHJvbWl1
bTsKK2NsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXI7CiAKIC8vIEEgTGF5ZXIgdGhhdCByZXF1aXJl
cyBhIEdyYXBoaWNzQ29udGV4dCB0byByZW5kZXIgaXRzIGNvbnRlbnRzLgogY2xhc3MgQ29udGVu
dExheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CkBAIC01OCw3ICs1OCw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYmluZENvbnRlbnRzVGV4dHVyZSgpOwogCiAgICAg
dmlydHVhbCB2b2lkIGRyYXcoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QpOwotICAg
IHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX293bmVyICYmIG1f
b3duZXItPmRyYXdzQ29udGVudCgpICYmICghbV90aWxlciB8fCAhbV90aWxlci0+c2tpcHNEcmF3
KCkpOyB9CisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwogCiBwcm90ZWN0
ZWQ6CiAgICAgZXhwbGljaXQgQ29udGVudExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9t
aXVtKiBvd25lcik7CkBAIC02Niw4ICs2NiwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBj
b25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJDb250ZW50TGF5
ZXIiOyB9CiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYs
IGludCBpbmRlbnQpIGNvbnN0OwogCisgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMo
KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21p
dW0qKTsKIAorICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBjcmVh
dGVUZXh0dXJlVXBkYXRlcigpOworCiAgICAgdmlydHVhbCBJbnRSZWN0IGxheWVyQm91bmRzKCkg
Y29uc3Q7CiAKICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRpbGluZ1RyYW5zZm9y
bSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA4NjYw
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5
ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDQ2IEBACiAjaW5jbHVk
ZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJMYXllclRleHR1cmUuaCIKKyNpbmNsdWRlICJMYXllclRleHR1cmVTdWJJbWFnZS5oIgorI2lu
Y2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRl
ciB7CitwdWJsaWM6CisgICAgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0LCBjb25zdCBQbGF0Zm9ybUltYWdlJiBpbWFnZSwgYm9vbCB1c2VNYXBUZXhT
dWJJbWFnZSkKKyAgICAgICAgOiBMYXllclRleHR1cmVVcGRhdGVyKGNvbnRleHQpCisgICAgICAg
ICwgbV9pbWFnZShpbWFnZSkKKyAgICAgICAgLCBtX3RleFN1YkltYWdlKHVzZU1hcFRleFN1Yklt
YWdlKQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+SW1hZ2VMYXllclRleHR1cmVVcGRhdGVy
KCkgeyB9CisKKyAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4g
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6Qm90dG9tVXBPcmllbnRhdGlvbjsgfQorCisgICAgdmlydHVh
bCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3Qg
SW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpCisgICAgeworICAgICAgICBBU1NF
UlQoaW1hZ2VSZWN0KCkuY29udGFpbnMoY29udGVudFJlY3QpKTsKKyAgICAgICAgbV90ZXhTdWJJ
bWFnZS5zZXRTdWJJbWFnZVNpemUodGlsZVNpemUpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVUZXh0dXJlUmVjdChMYXllclRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQorICAgIHsKKyAgICAgICAgdGV4
dHVyZS0+YmluZFRleHR1cmUoKTsKKyAgICAgICAgbV90ZXhTdWJJbWFnZS51cGxvYWQobV9pbWFn
ZS5waXhlbHMoKSwgaW1hZ2VSZWN0KCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0LCBjb250ZXh0KCkp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBJbnRSZWN0IGltYWdlUmVjdCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX2ltYWdlLnNpemUo
KSk7CisgICAgfQorCisgICAgLy8gRklYTUU6IEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlciBzaG91
bGQgcmF0aGVyIG93biBhIFBsYXRmb3JtSW1hZ2UgcmF0aGVyIHRoYW4ga2VlcGluZyBhIHJlZmVy
ZW5jZS4KKyAgICBjb25zdCBQbGF0Zm9ybUltYWdlJiBtX2ltYWdlOworICAgIExheWVyVGV4dHVy
ZVN1YkltYWdlIG1fdGV4U3ViSW1hZ2U7Cit9OworCiBQYXNzUmVmUHRyPEltYWdlTGF5ZXJDaHJv
bWl1bT4gSW1hZ2VMYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBv
d25lcikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlTGF5ZXJDaHJvbWl1bShvd25l
cikpOwpAQCAtODAsMTMgKzExNywxOCBAQCB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRD
b250ZW50c0lmCiAgICAgICAgICAgICBtX3RpbGVyLT5pbnZhbGlkYXRlUmVjdChwYWludFJlY3Qp
OwogICAgICAgICAgICAgbV9kaXJ0eVJlY3QgPSBJbnRSZWN0KCk7CiAgICAgICAgIH0KKyAgICAg
ICAgbV90aWxlci0+cHJlcGFyZVRvVXBkYXRlKHBhaW50UmVjdCk7CiAgICAgfQogfQogCiB2b2lk
IEltYWdlTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpCiB7Ci0gICAg
SW50UmVjdCBwYWludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fZGVjb2RlZEltYWdlLnNpemUoKSk7
Ci0gICAgbV90aWxlci0+dXBkYXRlRnJvbVBpeGVscyhwYWludFJlY3QsIHBhaW50UmVjdCwgbV9k
ZWNvZGVkSW1hZ2UucGl4ZWxzKCkpOworICAgIG1fdGlsZXItPnVwZGF0ZVJlY3QoKTsKK30KKwor
UGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBJbWFnZUxheWVyQ2hyb21pdW06OmNyZWF0
ZVRleHR1cmVVcGRhdGVyKCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEltYWdlTGF5ZXJU
ZXh0dXJlVXBkYXRlcihsYXllclJlbmRlcmVyQ29udGV4dCgpLCBtX2RlY29kZWRJbWFnZSwgbGF5
ZXJSZW5kZXJlcigpLT5jb250ZXh0U3VwcG9ydHNNYXBTdWIoKSkpOwogfQogCiBJbnRSZWN0IElt
YWdlTGF5ZXJDaHJvbWl1bTo6bGF5ZXJCb3VuZHMoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VM
YXllckNocm9taXVtLmgJKHJldmlzaW9uIDg2NjA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDYgKzU5LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiSW1hZ2VMYXllciI7IH0K
IAorICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGVUZXh0
dXJlVXBkYXRlcigpOwogICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggdGlsaW5nVHJh
bnNmb3JtKCk7CiAgICAgdmlydHVhbCBJbnRSZWN0IGxheWVyQm91bmRzKCkgY29uc3Q7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUGFpbnRl
ckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJQYWludGVyQ2hyb21pdW0uaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUGFpbnRlckNocm9taXVt
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgTGF5ZXJQ
YWludGVyQ2hyb21pdW1faAorI2RlZmluZSBMYXllclBhaW50ZXJDaHJvbWl1bV9oCisKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW50UmVjdDsKKworY2xhc3MgTGF5ZXJQYWludGVy
Q2hyb21pdW0geworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgPSAwOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNlbmRp
ZiAvLyBMYXllclBhaW50ZXJDaHJvbWl1bV9oCisKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUGFpbnRlckNocm9taXVt
LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA4NjYwNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDkgQEAKICNpbmNsdWRlICJHZW9tZXRy
eUJpbmRpbmcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxh
eWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIkxheWVyVGV4dHVyZS5oIgorI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMu
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIK
ICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgpAQCAtOTMsNyArOTUsNyBAQCBzdGF0aWMgYm9v
bCBpc1NjYWxlT3JUcmFuc2xhdGlvbihjb25zdCBUCiAKIH0KIAotUGFzc1JlZlB0cjxMYXllclJl
bmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNl
PiBjb250ZW50UGFpbnQpCitQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dCwgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBhaW50KQogewog
ICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMDYsMTAgKzEwOCw5IEBA
IFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclIKIH0KIAogTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzT3duUHRyPExheWVy
UGFpbnRlckNocm9taXVtPiBjb250ZW50UGFpbnQpCiAgICAgOiBtX3ZpZXdwb3J0U2Nyb2xsUG9z
aXRpb24oSW50UG9pbnQoLTEsIC0xKSkKICAgICAsIG1fcm9vdExheWVyKDApCi0gICAgLCBtX3Jv
b3RMYXllckNvbnRlbnRQYWludChjb250ZW50UGFpbnQpCiAgICAgLCBtX2N1cnJlbnRTaGFkZXIo
MCkKICAgICAsIG1fY3VycmVudFJlbmRlclN1cmZhY2UoMCkKICAgICAsIG1fb2Zmc2NyZWVuRnJh
bWVidWZmZXJJZCgwKQpAQCAtMTI1LDcgKzEyNiw5IEBAIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
TGF5ZXJSZW5kZXJlckNocm8KICAgICBpZiAobV9jb250ZXh0U3VwcG9ydHNNYXBTdWIpCiAgICAg
ICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9DSFJPTUlV
TV9tYXBfc3ViIik7CiAgICAgbV9oYXJkd2FyZUNvbXBvc2l0aW5nID0gaW5pdGlhbGl6ZVNoYXJl
ZE9iamVjdHMoKTsKLSAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlciA9IExheWVyVGlsZXJDaHJv
bWl1bTo6Y3JlYXRlKHRoaXMsIEludFNpemUoMjU2LCAyNTYpLCBMYXllclRpbGVyQ2hyb21pdW06
Ok5vQm9yZGVyVGV4ZWxzKTsKKworICAgIE93blB0cjxMYXllclRleHR1cmVVcGRhdGVyPiB0ZXh0
dXJlVXBkYXRlciA9IGFkb3B0UHRyKG5ldyBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwKG1fY29u
dGV4dC5nZXQoKSwgY29udGVudFBhaW50LCBtX2NvbnRleHRTdXBwb3J0c01hcFN1YikpOworICAg
IG1fcm9vdExheWVyQ29udGVudFRpbGVyID0gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUodGhp
cywgdGV4dHVyZVVwZGF0ZXIucmVsZWFzZSgpLCBJbnRTaXplKDI1NiwgMjU2KSwgTGF5ZXJUaWxl
ckNocm9taXVtOjpOb0JvcmRlclRleGVscyk7CiAgICAgQVNTRVJUKG1fcm9vdExheWVyQ29udGVu
dFRpbGVyKTsKIAogICAgIG1faGVhZHNVcERpc3BsYXkgPSBDQ0hlYWRzVXBEaXNwbGF5OjpjcmVh
dGUodGhpcyk7CkBAIC0xNjUsNyArMTY4LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmludmFsaWRhdGVSbwogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RMYXll
ckNvbnRlbnRzKCkKIHsKICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1
cGRhdGVSb290TGF5ZXJDb250ZW50cyIsIHRoaXMsIDApOwotICAgIG1fcm9vdExheWVyQ29udGVu
dFRpbGVyLT51cGRhdGUoKm1fcm9vdExheWVyQ29udGVudFBhaW50LCBtX3ZpZXdwb3J0VmlzaWJs
ZVJlY3QpOworICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyLT5wcmVwYXJlVG9VcGRhdGUobV92
aWV3cG9ydFZpc2libGVSZWN0KTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdSb290TGF5ZXIoKQpAQCAtMTczLDcgKzE3Niw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3Um9vdExheWUKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JvbGw7CiAgICAg
c2Nyb2xsLnRyYW5zbGF0ZSgtbV92aWV3cG9ydFZpc2libGVSZWN0LngoKSwgLW1fdmlld3BvcnRW
aXNpYmxlUmVjdC55KCkpOwogCi0gICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPnVwbG9hZENh
bnZhcygpOwogICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyLT5kcmF3KG1fdmlld3BvcnRWaXNp
YmxlUmVjdCwgc2Nyb2xsLCAxLjBmKTsKIH0KIApAQCAtMjEyLDcgKzIxNCw2IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmEKICAgICAgICAgcmV0dXJuOwogCiAgICAg
TGF5ZXJMaXN0IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0KICAgICB1cGRhdGVMYXllcnMocmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAKICAgICAvLyBCZWZvcmUgZHJhd0xheWVyczoKQEAgLTMx
Nyw2ICszMTgsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzCiAv
LyAgfQogCiAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlc1JlY3Vyc2l2ZShtX3Jvb3RMYXll
ci5nZXQoKSk7CisgICAgLy8gVXBkYXRlIGNvbXBvc2l0b3IgcmVzb3VyY2VzIGZvciByb290IGxh
eWVyLgorICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyLT51cGRhdGVSZWN0KCk7CiAKICAgICAv
LyBBZnRlciB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlLCBzZXQvd2FpdCBsYXRj
aGVzIGZvciBhbGwgY2hpbGQKICAgICAvLyBjb250ZXh0cy4gVGhpcyB3aWxsIHByZXZlbnQgdGhl
IGNvbXBvc2l0b3IgZnJvbSB1c2luZyBhbnkgb2YgdGhlIGNoaWxkCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaAkocmV2aXNpb24gODY2MDUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAkod29y
a2luZyBjb3B5KQpAQCAtNjQsMTEgKzY0LDEyIEBAIGNsYXNzIENDSGVhZHNVcERpc3BsYXk7CiBj
bGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIEdlb21ldHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDNEOworY2xhc3MgTGF5ZXJQYWludGVyQ2hyb21pdW07CiAKIC8vIENsYXNzIHRoYXQg
aGFuZGxlcyBkcmF3aW5nIG9mIGNvbXBvc2l0ZWQgcmVuZGVyIGxheWVycyB1c2luZyBHTC4KIGNs
YXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyUmVuZGVy
ZXJDaHJvbWl1bT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVy
ZXJDaHJvbWl1bT4gY3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzT3du
UHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50KTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiwgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBhaW50KTsK
IAogICAgIH5MYXllclJlbmRlcmVyQ2hyb21pdW0oKTsKIApAQCAtMTQ4LDcgKzE0OSw3IEBAIHBy
aXZhdGU6CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IExheWVyTGlz
dDsKICAgICB0eXBlZGVmIEhhc2hNYXA8R3JhcGhpY3NDb250ZXh0M0QqLCBpbnQ+IENoaWxkQ29u
dGV4dE1hcDsKIAotICAgIGV4cGxpY2l0IExheWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRl
bnRQYWludCk7CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+LCBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBjb250ZW50UGFpbnQp
OwogCiAgICAgdm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KTsKICAgICB2b2lkIHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKCk7CkBAIC0xODgsNyArMTg5
LDYgQEAgcHJpdmF0ZToKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3Byb2plY3Rpb25NYXRy
aXg7CiAKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9yb290TGF5ZXI7Ci0gICAgT3duUHRy
PFRpbGVQYWludEludGVyZmFjZT4gbV9yb290TGF5ZXJDb250ZW50UGFpbnQ7CiAgICAgT3duUHRy
PExheWVyVGlsZXJDaHJvbWl1bT4gbV9yb290TGF5ZXJDb250ZW50VGlsZXI7CiAKICAgICBib29s
IG1faGFyZHdhcmVDb21wb3NpdGluZzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJ
bWFnZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaCIKKwor
I2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitMYXllclRleHR1cmVTdWJJbWFnZTo6
TGF5ZXJUZXh0dXJlU3ViSW1hZ2UoYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSkKKyAgICA6IG1fdXNl
TWFwVGV4U3ViSW1hZ2UodXNlTWFwVGV4U3ViSW1hZ2UpCit7Cit9CisKK0xheWVyVGV4dHVyZVN1
YkltYWdlOjp+TGF5ZXJUZXh0dXJlU3ViSW1hZ2UoKQoreworfQorCit2b2lkIExheWVyVGV4dHVy
ZVN1YkltYWdlOjpzZXRTdWJJbWFnZVNpemUoY29uc3QgSW50U2l6ZSYgc3ViSW1hZ2VTaXplKQor
eworICAgIGlmIChzdWJJbWFnZVNpemUgPT0gbV9zdWJJbWFnZVNpemUpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fc3ViSW1hZ2VTaXplID0gc3ViSW1hZ2VTaXplOworICAgIGlmICghbV91c2VN
YXBUZXhTdWJJbWFnZSkKKyAgICAgICAgbV9zdWJJbWFnZSA9IGFkb3B0QXJyYXlQdHIobmV3IHVp
bnQ4X3RbbV9zdWJJbWFnZVNpemUud2lkdGgoKSAqIG1fc3ViSW1hZ2VTaXplLmhlaWdodCgpICog
NF0pOworfQorCit2b2lkIExheWVyVGV4dHVyZVN1YkltYWdlOjp1cGxvYWQoY29uc3QgdWludDhf
dCogaW1hZ2UsIGNvbnN0IEludFJlY3QmIGltYWdlUmVjdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBk
ZXN0UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCkKK3sKKyAgICBpZiAobV91c2VNYXBUZXhTdWJJbWFnZSkKKyAgICAgICAg
dXBsb2FkV2l0aE1hcFRleFN1YkltYWdlKGltYWdlLCBpbWFnZVJlY3QsIHNvdXJjZVJlY3QsIGRl
c3RSZWN0LCBjb250ZXh0KTsKKyAgICBlbHNlCisgICAgICAgIHVwbG9hZFdpdGhUZXhTdWJJbWFn
ZShpbWFnZSwgaW1hZ2VSZWN0LCBzb3VyY2VSZWN0LCBkZXN0UmVjdCwgY29udGV4dCk7Cit9CisK
K3ZvaWQgTGF5ZXJUZXh0dXJlU3ViSW1hZ2U6OnVwbG9hZFdpdGhUZXhTdWJJbWFnZShjb25zdCB1
aW50OF90KiBpbWFnZSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworICAg
IC8vIE9mZnNldCBmcm9tIGltYWdlLXJlY3QgdG8gc291cmNlLXJlY3QuCisgICAgSW50UG9pbnQg
b2Zmc2V0KHNvdXJjZVJlY3QueCgpIC0gaW1hZ2VSZWN0LngoKSwgc291cmNlUmVjdC55KCkgLSBp
bWFnZVJlY3QueSgpKTsKKworICAgIGNvbnN0IHVpbnQ4X3QqIHBpeGVsU291cmNlOworICAgIGlm
IChpbWFnZVJlY3Qud2lkdGgoKSA9PSBzb3VyY2VSZWN0LndpZHRoKCkgJiYgIW9mZnNldC54KCkp
CisgICAgICAgIHBpeGVsU291cmNlID0gJmltYWdlWzQgKiBvZmZzZXQueSgpICogaW1hZ2VSZWN0
LndpZHRoKCldOworICAgIGVsc2UgeworICAgICAgICAvLyBTdHJpZGVzIG5vdCBlcXVhbCwgc28g
ZG8gYSByb3ctYnktcm93IG1lbWNweSBmcm9tIHRoZQorICAgICAgICAvLyBwYWludCByZXN1bHRz
IGludG8gYSB0ZW1wIGJ1ZmZlciBmb3IgdXBsb2FkaW5nLgorICAgICAgICBmb3IgKGludCByb3cg
PSAwOyByb3cgPCBkZXN0UmVjdC5oZWlnaHQoKTsgKytyb3cpCisgICAgICAgICAgICBtZW1jcHko
Jm1fc3ViSW1hZ2VbZGVzdFJlY3Qud2lkdGgoKSAqIDQgKiByb3ddLAorICAgICAgICAgICAgICAg
ICAgICZpbWFnZVs0ICogKG9mZnNldC54KCkgKyAob2Zmc2V0LnkoKSArIHJvdykgKiBpbWFnZVJl
Y3Qud2lkdGgoKSldLAorICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0LndpZHRoKCkgKiA0KTsK
KworICAgICAgICBwaXhlbFNvdXJjZSA9ICZtX3N1YkltYWdlWzBdOworICAgIH0KKyAgICBjb250
ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBkZXN0
UmVjdC54KCksIGRlc3RSZWN0LnkoKSwgZGVzdFJlY3Qud2lkdGgoKSwgZGVzdFJlY3QuaGVpZ2h0
KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSwgcGl4ZWxTb3VyY2UpOworfQorCit2b2lkIExheWVyVGV4dHVyZVN1YkltYWdlOjp1cGxv
YWRXaXRoTWFwVGV4U3ViSW1hZ2UoY29uc3QgdWludDhfdCogaW1hZ2UsIGNvbnN0IEludFJlY3Qm
IGltYWdlUmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKK3sKKyAgICAvLyBPZmZzZXQgZnJvbSBpbWFnZS1y
ZWN0IHRvIHNvdXJjZS1yZWN0LgorICAgIEludFBvaW50IG9mZnNldChzb3VyY2VSZWN0LngoKSAt
IGltYWdlUmVjdC54KCksIHNvdXJjZVJlY3QueSgpIC0gaW1hZ2VSZWN0LnkoKSk7CisKKyAgICAv
LyBVcGxvYWQgdGlsZSBkYXRhIHZpYSBhIG1hcHBlZCB0cmFuc2ZlciBidWZmZXIKKyAgICBFeHRl
bnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENo
cm9taXVtKj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKTsKKyAgICB1aW50OF90KiBwaXhlbERl
c3QgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZXh0ZW5zaW9ucy0+bWFwVGV4U3ViSW1hZ2UyRENI
Uk9NSVVNKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBkZXN0UmVjdC54KCksIGRl
c3RSZWN0LnkoKSwgZGVzdFJlY3Qud2lkdGgoKSwgZGVzdFJlY3QuaGVpZ2h0KCksIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgRXh0ZW5z
aW9uczNEQ2hyb21pdW06OldSSVRFX09OTFkpKTsKKyAgICBBU1NFUlQocGl4ZWxEZXN0KTsKKyAg
ICBpZiAoaW1hZ2VSZWN0LndpZHRoKCkgPT0gc291cmNlUmVjdC53aWR0aCgpICYmICFvZmZzZXQu
eCgpKQorICAgICAgICBtZW1jcHkocGl4ZWxEZXN0LCAmaW1hZ2VbNCAqIG9mZnNldC55KCkgKiBp
bWFnZVJlY3Qud2lkdGgoKV0sIGltYWdlUmVjdC53aWR0aCgpICogZGVzdFJlY3QuaGVpZ2h0KCkg
KiA0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gU3RyaWRlcyBub3QgZXF1YWwsIHNvIGRvIGEg
cm93LWJ5LXJvdyBtZW1jcHkgZnJvbSB0aGUKKyAgICAgICAgLy8gcGFpbnQgcmVzdWx0cyBpbnRv
IHRoZSBwaXhlbERlc3QKKyAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgZGVzdFJlY3Qu
aGVpZ2h0KCk7ICsrcm93KQorICAgICAgICAgICAgbWVtY3B5KCZwaXhlbERlc3RbZGVzdFJlY3Qu
d2lkdGgoKSAqIDQgKiByb3ddLAorICAgICAgICAgICAgICAgICAgICZpbWFnZVs0ICogKG9mZnNl
dC54KCkgKyAob2Zmc2V0LnkoKSArIHJvdykgKiBpbWFnZVJlY3Qud2lkdGgoKSldLAorICAgICAg
ICAgICAgICAgICAgIGRlc3RSZWN0LndpZHRoKCkgKiA0KTsKKyAgICB9CisgICAgZXh0ZW5zaW9u
cy0+dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0ocGl4ZWxEZXN0KTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wt
c3R5bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyVGV4dHVyZVN1YkltYWdlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisKKyNpZm5kZWYgTGF5ZXJUZXh0dXJlU3ViSW1hZ2VfaAorI2RlZmluZSBMYXllclRleHR1cmVT
dWJJbWFnZV9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJh
eVB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNE
OworCitjbGFzcyBMYXllclRleHR1cmVTdWJJbWFnZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
TGF5ZXJUZXh0dXJlU3ViSW1hZ2UoYm9vbCB1c2VNYXBTdWJGb3JVcGxvYWQpOworICAgIH5MYXll
clRleHR1cmVTdWJJbWFnZSgpOworCisgICAgdm9pZCBzZXRTdWJJbWFnZVNpemUoY29uc3QgSW50
U2l6ZSYpOworICAgIHZvaWQgdXBsb2FkKGNvbnN0IHVpbnQ4X3QqIGltYWdlLCBjb25zdCBJbnRS
ZWN0JiBpbWFnZVJlY3QsCisgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsCisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250
ZXh0M0QqKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHVwbG9hZFdpdGhUZXhTdWJJbWFnZShjb25z
dCB1aW50OF90KiBpbWFnZSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJl
Y3QmIGRlc3RSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dDNEKik7CisgICAgdm9pZCB1cGxvYWRXaXRoTWFwVGV4U3ViSW1hZ2UoY29uc3QgdWludDhf
dCogaW1hZ2UsIGNvbnN0IEludFJlY3QmIGltYWdlUmVjdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBk
ZXN0UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRl
eHQzRCopOworCisgICAgYm9vbCBtX3VzZU1hcFRleFN1YkltYWdlOworICAgIEludFNpemUgbV9z
dWJJbWFnZVNpemU7CisgICAgT3duQXJyYXlQdHI8dWludDhfdD4gbV9zdWJJbWFnZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisjZW5kaWYgLy8gTGF5ZXJUZXh0dXJlU3ViSW1hZ2VfaAorCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRl
eHR1cmVTdWJJbWFnZS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVVwZGF0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVy
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgTGF5ZXJU
ZXh0dXJlVXBkYXRlcl9oCisjZGVmaW5lIExheWVyVGV4dHVyZVVwZGF0ZXJfaAorCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgSW50UmVjdDsKK2NsYXNzIEludFNpemU7CitjbGFz
cyBMYXllclRleHR1cmU7CisKK2NsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXIgeworcHVibGljOgor
ICAgIGV4cGxpY2l0IExheWVyVGV4dHVyZVVwZGF0ZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQpIDogbV9jb250ZXh0KGNvbnRleHQpIHsgfQorICAgIHZpcnR1YWwgfkxheWVyVGV4dHVyZVVw
ZGF0ZXIoKSB7IH0KKworICAgIGVudW0gT3JpZW50YXRpb24geworICAgICAgICBCb3R0b21VcE9y
aWVudGF0aW9uLAorICAgICAgICBUb3BEb3duT3JpZW50YXRpb24KKyAgICB9OworICAgIC8vIFJl
dHVybnMgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSB0ZXh0dXJlIHVwbG9hZGVkIGJ5IHRoaXMgaW50
ZXJmYWNlLgorICAgIHZpcnR1YWwgT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwg
Y29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoTGF5ZXJUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpID0gMDsKKworcHJvdGVjdGVkOgor
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0
OyB9CisKK3ByaXZhdGU6CisgICAgLy8gVGhlIGdyYXBoaWNzIGNvbnRleHQgd2l0aCB3aGljaCB0
byB1cGRhdGUgdGV4dHVyZXMuCisgICAgLy8gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSB0ZXh0dXJl
cyBhcmUgZWl0aGVyIGNyZWF0ZWQgaW4gdGhlIHNhbWUgY29udGV4dAorICAgIC8vIG9yIHNoYXJl
ZCB3aXRoIHRoaXMgY29udGV4dC4KKyAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyNlbmRpZiAvLyBMYXllclRleHR1cmVVcGRhdGVyX2gKKwoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJUZXh0dXJlVXBkYXRlci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBM
RgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGV4dHVyZVVwZGF0ZXJDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKworI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCIKKwor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9t
aXVtLmgiCisjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6Okxh
eWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFBhc3NP
d25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIpCisgICAgOiBMYXllclRleHR1cmVV
cGRhdGVyKGNvbnRleHQpCisgICAgLCBtX3BhaW50ZXIocGFpbnRlcikKK3sKK30KKwordm9pZCBM
YXllclRleHR1cmVVcGRhdGVyQ2FudmFzOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgY29udGV4dC50cmFu
c2xhdGUoLWNvbnRlbnRSZWN0LngoKSwgLWNvbnRlbnRSZWN0LnkoKSk7CisgICAgeworICAgICAg
ICBUUkFDRV9FVkVOVCgiTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhczo6cGFpbnQiLCB0aGlzLCAw
KTsKKyAgICAgICAgbV9wYWludGVyLT5wYWludChjb250ZXh0LCBjb250ZW50UmVjdCk7CisgICAg
fQorICAgIG1fY29udGVudFJlY3QgPSBjb250ZW50UmVjdDsKK30KKworTGF5ZXJUZXh0dXJlVXBk
YXRlckJpdG1hcDo6TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcChHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlciwgYm9vbCB1
c2VNYXBUZXhTdWJJbWFnZSkKKyAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMoY29udGV4
dCwgcGFpbnRlcikKKyAgICAsIG1fdGV4U3ViSW1hZ2UodXNlTWFwVGV4U3ViSW1hZ2UpCit7Cit9
CisKK3ZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRl
clRleGVscykKK3sKKyAgICBtX3RleFN1YkltYWdlLnNldFN1YkltYWdlU2l6ZSh0aWxlU2l6ZSk7
CisKKyAgICBtX2NhbnZhcy5yZXNpemUoY29udGVudFJlY3Quc2l6ZSgpKTsKKyAgICAvLyBBc3N1
bXB0aW9uOiBpZiBhIHRpbGVyIGlzIHVzaW5nIGJvcmRlciB0ZXhlbHMsIHRoZW4gaXQgaXMgYmVj
YXVzZSB0aGUKKyAgICAvLyBsYXllciBpcyBsaWtlbHkgdG8gYmUgZmlsdGVyZWQgb3IgdHJhbnNm
b3JtZWQuIEJlY2F1c2Ugb2YgaXQgbWlnaHQgYmUKKyAgICAvLyB0cmFuc2Zvcm1lZCwgZHJhdyB0
aGUgdGV4dCBpbiBncmF5c2NhbGUgaW5zdGVhZCBvZiBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCisg
ICAgUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OlRleHRPcHRpb24gdGV4dE9wdGlvbiA9CisgICAg
ICAgIGJvcmRlclRleGVscyA/IFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpHcmF5c2NhbGVUZXh0
IDogUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OlN1YnBpeGVsVGV4dDsKKyAgICBQbGF0Zm9ybUNh
bnZhczo6UGFpbnRlciBjYW52YXNQYWludGVyKCZtX2NhbnZhcywgdGV4dE9wdGlvbik7CisgICAg
cGFpbnRDb250ZW50cygqY2FudmFzUGFpbnRlci5jb250ZXh0KCksIGNvbnRlbnRSZWN0KTsKK30K
Kwordm9pZCBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjp1cGRhdGVUZXh0dXJlUmVjdChMYXll
clRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJl
Y3QmIGRlc3RSZWN0KQoreworICAgIFBsYXRmb3JtQ2FudmFzOjpBdXRvTG9ja2VyIGxvY2tlcigm
bV9jYW52YXMpOworCisgICAgdGV4dHVyZS0+YmluZFRleHR1cmUoKTsKKyAgICBtX3RleFN1Yklt
YWdlLnVwbG9hZChsb2NrZXIucGl4ZWxzKCksIGNvbnRlbnRSZWN0KCksIHNvdXJjZVJlY3QsIGRl
c3RSZWN0LCBjb250ZXh0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYg
Ly8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRh
dGVyQ2FudmFzLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1
cmVVcGRhdGVyQ2FudmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0
dXJlVXBkYXRlckNhbnZhcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
CisjaWZuZGVmIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXNfaAorI2RlZmluZSBMYXllclRleHR1
cmVVcGRhdGVyQ2FudmFzX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwor
I2luY2x1ZGUgIkxheWVyVGV4dHVyZVN1YkltYWdlLmgiCisjaW5jbHVkZSAiTGF5ZXJUZXh0dXJl
VXBkYXRlci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ2FudmFzLmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRl
eHQzRDsKK2NsYXNzIExheWVyUGFpbnRlckNocm9taXVtOworCisvLyBBIExheWVyVGV4dHVyZVVw
ZGF0ZXIgd2l0aCBhbiBpbnRlcm5hbCBjYW52YXMuCitjbGFzcyBMYXllclRleHR1cmVVcGRhdGVy
Q2FudmFzIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXIgeworcHVibGljOgorICAgIExheWVy
VGV4dHVyZVVwZGF0ZXJDYW52YXMoR3JhcGhpY3NDb250ZXh0M0QqLCBQYXNzT3duUHRyPExheWVy
UGFpbnRlckNocm9taXVtPik7CisgICAgdmlydHVhbCB+TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZh
cygpIHsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKyAgICBjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudFJlY3Q7IH0KKworcHJpdmF0ZToK
KyAgICBJbnRSZWN0IG1fY29udGVudFJlY3Q7CisgICAgT3duUHRyPExheWVyUGFpbnRlckNocm9t
aXVtPiBtX3BhaW50ZXI7Cit9OworCisvLyBBIExheWVyVGV4dHVyZVVwZGF0ZXIgd2l0aCBhbiBp
bnRlcm5hbCBiaXRtYXAgY2FudmFzLgorY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcCA6
IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzIHsKK3B1YmxpYzoKKyAgICBMYXllclRl
eHR1cmVVcGRhdGVyQml0bWFwKEdyYXBoaWNzQ29udGV4dDNEKiwgUGFzc093blB0cjxMYXllclBh
aW50ZXJDaHJvbWl1bT4sIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpOworICAgIHZpcnR1YWwgfkxh
eWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAoKSB7IH0KKworICAgIHZpcnR1YWwgT3JpZW50YXRpb24g
b3JpZW50YXRpb24oKSB7IHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpCb3R0b21VcE9yaWVu
dGF0aW9uOyB9CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMp
OworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChMYXllclRleHR1cmUqLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisKK3ByaXZh
dGU6CisgICAgUGxhdGZvcm1DYW52YXMgbV9jYW52YXM7CisgICAgTGF5ZXJUZXh0dXJlU3ViSW1h
Z2UgbV90ZXhTdWJJbWFnZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjZW5kaWYgLy8gTGF5ZXJUZXh0dXJlVXBk
YXRlckNhbnZhc19oCisKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGls
ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDg2NjA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzUsMzggKzM1LDMwIEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNp
bmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclRleHR1cmUu
aCIKKyNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVu
dC5oIgogCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25BcnJheVB0ci5oPgotCiB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8TGF5ZXJUaWxlckNo
cm9taXVtPiBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0q
IGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlv
biBib3JkZXIpCitQYXNzT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gTGF5ZXJUaWxlckNocm9t
aXVtOjpjcmVhdGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBQYXNzT3du
UHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IHRleHR1cmVVcGRhdGVyLCBjb25zdCBJbnRTaXplJiB0
aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRpb24gYm9yZGVyKQogewogICAgIGlmICghbGF5ZXJSZW5k
ZXJlciB8fCB0aWxlU2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBMYXllclRpbGVyQ2hyb21pdW0obGF5ZXJSZW5kZXJlciwg
dGlsZVNpemUsIGJvcmRlcikpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJUaWxlckNo
cm9taXVtKGxheWVyUmVuZGVyZXIsIHRleHR1cmVVcGRhdGVyLCB0aWxlU2l6ZSwgYm9yZGVyKSk7
CiB9CiAKLUxheWVyVGlsZXJDaHJvbWl1bTo6TGF5ZXJUaWxlckNocm9taXVtKExheWVyUmVuZGVy
ZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJvcmRl
clRleGVsT3B0aW9uIGJvcmRlcikKK0xheWVyVGlsZXJDaHJvbWl1bTo6TGF5ZXJUaWxlckNocm9t
aXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgUGFzc093blB0cjxMYXll
clRleHR1cmVVcGRhdGVyPiB0ZXh0dXJlVXBkYXRlciwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUs
IEJvcmRlclRleGVsT3B0aW9uIGJvcmRlcikKICAgICA6IG1fc2tpcHNEcmF3KGZhbHNlKQogICAg
ICwgbV90aWxpbmdEYXRhKG1heCh0aWxlU2l6ZS53aWR0aCgpLCB0aWxlU2l6ZS5oZWlnaHQoKSks
IDAsIDAsIGJvcmRlciA9PSBIYXNCb3JkZXJUZXhlbHMpCi0gICAgLCBtX3VzZU1hcFN1YkZvclVw
bG9hZHMobGF5ZXJSZW5kZXJlci0+Y29udGV4dFN1cHBvcnRzTWFwU3ViKCkpCisgICAgLCBtX3Rl
eHR1cmVVcGRhdGVyKHRleHR1cmVVcGRhdGVyKQogICAgICwgbV9sYXllclJlbmRlcmVyKGxheWVy
UmVuZGVyZXIpCiB7CiAgICAgc2V0VGlsZVNpemUodGlsZVNpemUpOwogfQogCi12b2lkIExheWVy
VGlsZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxh
eWVyUmVuZGVyZXIpCi17Ci0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlciAhPSBsYXllclJlbmRlcmVy
KQotICAgICAgICByZXNldCgpOwotICAgIG1fbGF5ZXJSZW5kZXJlciA9IGxheWVyUmVuZGVyZXI7
Ci19Ci0KIExheWVyVGlsZXJDaHJvbWl1bTo6fkxheWVyVGlsZXJDaHJvbWl1bSgpCiB7CiAgICAg
cmVzZXQoKTsKQEAgLTg2LDggKzc4LDYgQEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnNldFRp
bGVTaXplKGNvbgogICAgIHJlc2V0KCk7CiAKICAgICBtX3RpbGVTaXplID0gc2l6ZTsKLSAgICBp
ZiAoIW1fdXNlTWFwU3ViRm9yVXBsb2FkcykKLSAgICAgICAgbV90aWxlUGl4ZWxzID0gYWRvcHRB
cnJheVB0cihuZXcgdWludDhfdFttX3RpbGVTaXplLndpZHRoKCkgKiBtX3RpbGVTaXplLmhlaWdo
dCgpICogNF0pOwogICAgIG1fdGlsaW5nRGF0YS5zZXRNYXhUZXh0dXJlU2l6ZShtYXgoc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CiB9CiAKQEAgLTIzMCw3ICsyMjAsNyBAQCB2b2lkIExh
eWVyVGlsZXJDaHJvbWl1bTo6aW52YWxpZGF0ZUVudGlyCiAgICAgbV90aWxpbmdEYXRhLnNldFRv
dGFsU2l6ZSgwLCAwKTsKIH0KIAotdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZShUaWxl
UGFpbnRJbnRlcmZhY2UmIHBhaW50ZXIsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQordm9p
ZCBMYXllclRpbGVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250
ZW50UmVjdCkKIHsKICAgICBpZiAobV9za2lwc0RyYXcpCiAgICAgICAgIHJldHVybjsKQEAgLTI2
NywzMCArMjU3LDEwIEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGUoVGlsZVBhaW4K
ICAgICBpZiAoZGlydHlMYXllclJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX2NhbnZhcy5yZXNpemUobV9wYWludFJlY3Quc2l6ZSgpKTsKLQotICAgIC8vIEFzc3VtcHRp
b246IGlmIGEgdGlsZXIgaXMgdXNpbmcgYm9yZGVyIHRleGVscywgdGhlbiBpdCBpcyBiZWNhdXNl
IHRoZQotICAgIC8vIGxheWVyIGlzIGxpa2VseSB0byBiZSBmaWx0ZXJlZCBvciB0cmFuc2Zvcm1l
ZC4gQmVjYXVzZSBvZiBpdCBtaWdodCBiZQotICAgIC8vIHRyYW5zZm9ybWVkLCBkcmF3IHRoZSB0
ZXh0IGluIGdyYXlzY2FsZSBpbnN0ZWFkIG9mIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KLSAgICBQ
bGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6VGV4dE9wdGlvbiB0ZXh0T3B0aW9uID0gbV90aWxpbmdE
YXRhLmJvcmRlclRleGVscygpID8gUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OkdyYXlzY2FsZVRl
eHQgOiBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6U3VicGl4ZWxUZXh0OwotICAgIFBsYXRmb3Jt
Q2FudmFzOjpQYWludGVyIGNhbnZhc1BhaW50ZXIoJm1fY2FudmFzLCB0ZXh0T3B0aW9uKTsKLSAg
ICBjYW52YXNQYWludGVyLmNvbnRleHQoKS0+dHJhbnNsYXRlKC1tX3BhaW50UmVjdC54KCksIC1t
X3BhaW50UmVjdC55KCkpOwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyVGlsZXJD
aHJvbWl1bTo6dXBkYXRlOjpwYWludCIsIHRoaXMsIDApOwotICAgICAgICBwYWludGVyLnBhaW50
KCpjYW52YXNQYWludGVyLmNvbnRleHQoKSwgbV9wYWludFJlY3QpOwotICAgIH0KKyAgICBtX3Rl
eHR1cmVVcGRhdGVyLT5wcmVwYXJlVG9VcGRhdGUobV9wYWludFJlY3QsIG1fdGlsZVNpemUsIG1f
dGlsaW5nRGF0YS5ib3JkZXJUZXhlbHMoKSk7CiB9CiAKLXZvaWQgTGF5ZXJUaWxlckNocm9taXVt
Ojp1cGxvYWRDYW52YXMoKQotewotICAgIFBsYXRmb3JtQ2FudmFzOjpBdXRvTG9ja2VyIGxvY2tl
cigmbV9jYW52YXMpOwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyVGlsZXJDaHJv
bWl1bTo6dXBkYXRlRnJvbVBpeGVscyIsIHRoaXMsIDApOwotICAgICAgICB1cGRhdGVGcm9tUGl4
ZWxzKG1fdXBkYXRlUmVjdCwgbV9wYWludFJlY3QsIGxvY2tlci5waXhlbHMoKSk7Ci0gICAgfQot
fQotCi12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6dXBkYXRlRnJvbVBpeGVscyhjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UmVjdCYgcGFpbnRSZWN0LCBjb25zdCB1aW50OF90
KiBwYWludFBpeGVscykKK3ZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGVSZWN0KCkKIHsK
ICAgICAvLyBQYWludGluZyBjb3VsZCBjYXVzZSBjb21wb3NpdGluZyB0byBnZXQgdHVybmVkIG9m
Ziwgd2hpY2ggbWF5IGNhdXNlIHRoZSB0aWxlciB0byBiZWNvbWUgaW52YWxpZGF0ZWQgbWlkLXVw
ZGF0ZS4KICAgICBpZiAoIW1fdGlsaW5nRGF0YS50b3RhbFNpemVYKCkgfHwgIW1fdGlsaW5nRGF0
YS50b3RhbFNpemVZKCkpCkBAIC0yOTksNyArMjY5LDcgQEAgdm9pZCBMYXllclRpbGVyQ2hyb21p
dW06OnVwZGF0ZUZyb21QaXhlbAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5
ZXJSZW5kZXJlckNvbnRleHQoKTsKIAogICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207
Ci0gICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJp
Z2h0LCBib3R0b20pOworICAgIGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhtX3VwZGF0ZVJlY3Qs
IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBi
b3R0b207ICsraikgewogICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytp
KSB7CiAgICAgICAgICAgICBUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwpAQCAtMzE0LDcgKzI4
NCw3IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGVGcm9tUGl4ZWwKICAgICAgICAg
ICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KGxheWVyUmVjdFRvQ29udGVudFJlY3QodGlsZS0+bV9k
aXJ0eUxheWVyUmVjdCkpOwogICAgICAgICAgICAgLy8gUGFpbnQgcmVjdCBub3QgZ3VhcmFudGVl
ZCB0byBsaW5lIHVwIG9uIHRpbGUgYm91bmRhcmllcywgc28KICAgICAgICAgICAgIC8vIG1ha2Ug
c3VyZSB0aGF0IHNvdXJjZVJlY3QgZG9lc24ndCBleHRlbmQgb3V0c2lkZSBvZiBpdC4KLSAgICAg
ICAgICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KHBhaW50UmVjdCk7CisgICAgICAgICAgICBzb3Vy
Y2VSZWN0LmludGVyc2VjdChtX3BhaW50UmVjdCk7CiAgICAgICAgICAgICBpZiAoc291cmNlUmVj
dC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTMzNCw1NyArMzA0
LDIyIEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGVGcm9tUGl4ZWwKICAgICAgICAg
ICAgICAgICBDUkFTSCgpOwogCiAgICAgICAgICAgICAvLyBPZmZzZXQgZnJvbSBwYWludCByZWN0
YW5nbGUgdG8gdGhpcyB0aWxlJ3MgZGlydHkgcmVjdGFuZ2xlLgotICAgICAgICAgICAgSW50UG9p
bnQgcGFpbnRPZmZzZXQoc291cmNlUmVjdC54KCkgLSBwYWludFJlY3QueCgpLCBzb3VyY2VSZWN0
LnkoKSAtIHBhaW50UmVjdC55KCkpOworICAgICAgICAgICAgSW50UG9pbnQgcGFpbnRPZmZzZXQo
c291cmNlUmVjdC54KCkgLSBtX3BhaW50UmVjdC54KCksIHNvdXJjZVJlY3QueSgpIC0gbV9wYWlu
dFJlY3QueSgpKTsKICAgICAgICAgICAgIGlmIChwYWludE9mZnNldC54KCkgPCAwKQogICAgICAg
ICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueSgpIDwgMCkK
ICAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0Lngo
KSArIGRlc3RSZWN0LndpZHRoKCkgPiBwYWludFJlY3Qud2lkdGgoKSkKKyAgICAgICAgICAgIGlm
IChwYWludE9mZnNldC54KCkgKyBkZXN0UmVjdC53aWR0aCgpID4gbV9wYWludFJlY3Qud2lkdGgo
KSkKICAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0
LnkoKSArIGRlc3RSZWN0LmhlaWdodCgpID4gcGFpbnRSZWN0LmhlaWdodCgpKQorICAgICAgICAg
ICAgaWYgKHBhaW50T2Zmc2V0LnkoKSArIGRlc3RSZWN0LmhlaWdodCgpID4gbV9wYWludFJlY3Qu
aGVpZ2h0KCkpCiAgICAgICAgICAgICAgICAgQ1JBU0goKTsKIAogICAgICAgICAgICAgdGlsZS0+
dGV4dHVyZSgpLT5iaW5kVGV4dHVyZSgpOwotCiAgICAgICAgICAgICBjb25zdCBHQzNEaW50IGZp
bHRlciA9IG1fdGlsaW5nRGF0YS5ib3JkZXJUZXhlbHMoKSA/IEdyYXBoaWNzQ29udGV4dDNEOjpM
SU5FQVIgOiBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVDsKICAgICAgICAgICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBmaWx0ZXIpKTsKICAgICAg
ICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBm
aWx0ZXIpKTsKIAotICAgICAgICAgICAgaWYgKG1fdXNlTWFwU3ViRm9yVXBsb2FkcykgewotICAg
ICAgICAgICAgICAgIC8vIFVwbG9hZCB0aWxlIGRhdGEgdmlhIGEgbWFwcGVkIHRyYW5zZmVyIGJ1
ZmZlcgotICAgICAgICAgICAgICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zID0g
c3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihjb250ZXh0LT5nZXRFeHRlbnNpb25z
KCkpOwotICAgICAgICAgICAgICAgIHVpbnQ4X3QqIHBpeGVsRGVzdCA9IHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihleHRlbnNpb25zLT5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpLCBkZXN0UmVj
dC53aWR0aCgpLCBkZXN0UmVjdC5oZWlnaHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6V1JJ
VEVfT05MWSkpOwotICAgICAgICAgICAgICAgIEFTU0VSVChwaXhlbERlc3QpOwotICAgICAgICAg
ICAgICAgIGlmIChwYWludFJlY3Qud2lkdGgoKSA9PSBzb3VyY2VSZWN0LndpZHRoKCkgJiYgIXBh
aW50T2Zmc2V0LngoKSkKLSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHBpeGVsRGVzdCwgJnBh
aW50UGl4ZWxzWzQgKiBwYWludE9mZnNldC55KCkgKiBwYWludFJlY3Qud2lkdGgoKV0sIHBhaW50
UmVjdC53aWR0aCgpICogZGVzdFJlY3QuaGVpZ2h0KCkgKiA0KTsKLSAgICAgICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU3RyaWRlcyBub3QgZXF1YWwsIHNvIGRvIGEg
cm93LWJ5LXJvdyBtZW1jcHkgZnJvbSB0aGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFpbnQg
cmVzdWx0cyBpbnRvIHRoZSBwaXhlbERlc3QKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
cm93ID0gMDsgcm93IDwgZGVzdFJlY3QuaGVpZ2h0KCk7ICsrcm93KQotICAgICAgICAgICAgICAg
ICAgICAgICAgbWVtY3B5KCZwaXhlbERlc3RbZGVzdFJlY3Qud2lkdGgoKSAqIDQgKiByb3ddLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYWludFBpeGVsc1s0ICogKHBhaW50T2Zm
c2V0LngoKSArIChwYWludE9mZnNldC55KCkgKyByb3cpICogcGFpbnRSZWN0LndpZHRoKCkpXSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UmVjdC53aWR0aCgpICogNCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMtPnVubWFwVGV4U3Vi
SW1hZ2UyRENIUk9NSVVNKHBpeGVsRGVzdCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHBpeGVsU291cmNlOwotICAgICAgICAgICAgICAgIGlm
IChwYWludFJlY3Qud2lkdGgoKSA9PSBzb3VyY2VSZWN0LndpZHRoKCkgJiYgIXBhaW50T2Zmc2V0
LngoKSkKLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxTb3VyY2UgPSAmcGFpbnRQaXhlbHNbNCAq
IHBhaW50T2Zmc2V0LnkoKSAqIHBhaW50UmVjdC53aWR0aCgpXTsKLSAgICAgICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU3RyaWRlcyBub3QgZXF1YWwsIHNvIGRvIGEg
cm93LWJ5LXJvdyBtZW1jcHkgZnJvbSB0aGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFpbnQg
cmVzdWx0cyBpbnRvIGEgdGVtcCBidWZmZXIgZm9yIHVwbG9hZGluZy4KLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgZGVzdFJlY3QuaGVpZ2h0KCk7ICsrcm93KQot
ICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZtX3RpbGVQaXhlbHNbZGVzdFJlY3Qud2lk
dGgoKSAqIDQgKiByb3ddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYWludFBp
eGVsc1s0ICogKHBhaW50T2Zmc2V0LngoKSArIChwYWludE9mZnNldC55KCkgKyByb3cpICogcGFp
bnRSZWN0LndpZHRoKCkpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UmVj
dC53aWR0aCgpICogNCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxTb3VyY2UgPSAmbV90
aWxlUGl4ZWxzWzBdOwotICAgICAgICAgICAgICAgIH0KLQotCi0gICAgICAgICAgICAgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDAsIGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpLCBkZXN0UmVjdC53aWR0aCgpLCBk
ZXN0UmVjdC5oZWlnaHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFLCBwaXhlbFNvdXJjZSkpOwotICAgICAgICAgICAgfQotCisgICAg
ICAgICAgICBtX3RleHR1cmVVcGRhdGVyLT51cGRhdGVUZXh0dXJlUmVjdCh0aWxlLT50ZXh0dXJl
KCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsKICAgICAgICAgICAgIHRpbGUtPmNsZWFyRGlydHko
KTsKICAgICAgICAgfQogICAgIH0KQEAgLTQzMCw3ICszNjUsMTIgQEAgdm9pZCBMYXllclRpbGVy
Q2hyb21pdW06OmRyYXcoY29uc3QgSW50UgogICAgICAgICAgICAgZmxvYXQgdGV4VHJhbnNsYXRl
WSA9IHRleE9mZnNldC55KCkgLyB0aWxlSGVpZ2h0OwogICAgICAgICAgICAgZmxvYXQgdGV4U2Nh
bGVYID0gdGlsZVJlY3Qud2lkdGgoKSAvIHRpbGVXaWR0aDsKICAgICAgICAgICAgIGZsb2F0IHRl
eFNjYWxlWSA9IHRpbGVSZWN0LmhlaWdodCgpIC8gdGlsZUhlaWdodDsKLQorICAgICAgICAgICAg
Ly8gT3BlbkdMIGNvb3JkaW5hdGUgc3lzdGVtIGlzIGJvdHRvbS11cC4KKyAgICAgICAgICAgIC8v
IElmIHRpbGUgdGV4dHVyZSBpcyB0b3AtZG93biwgd2UgbmVlZCB0byBmbGlwIHRoZSB0ZXh0dXJl
IGNvb3JkaW5hdGVzLgorICAgICAgICAgICAgaWYgKG1fdGV4dHVyZVVwZGF0ZXItPm9yaWVudGF0
aW9uKCkgPT0gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VG9wRG93bk9yaWVudGF0aW9uKSB7CisgICAg
ICAgICAgICAgICAgdGV4VHJhbnNsYXRlWSArPSAxLjA7CisgICAgICAgICAgICAgICAgdGV4U2Nh
bGVZICo9IC0xLjA7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBkcmF3VGV4dHVyZWRRdWFk
KGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCB0aWxlTWF0cml4
LCB0aWxlUmVjdC53aWR0aCgpLCB0aWxlUmVjdC5oZWlnaHQoKSwgb3BhY2l0eSwgdGV4VHJhbnNs
YXRlWCwgdGV4VHJhbnNsYXRlWSwgdGV4U2NhbGVYLCB0ZXhTY2FsZVksIHByb2dyYW0pOwogICAg
ICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmgJKHJldmlzaW9u
IDg2NjA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJUaWxlckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDI4ICszMSwyMiBAQAogCiAj
aW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyVGV4dHVyZS5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtQ2FudmFzLmgiCiAjaW5jbHVkZSAiVGlsaW5nRGF0YS5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBH
cmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKLQotY2xhc3Mg
VGlsZVBhaW50SW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgPSAwOwot
fTsKK2NsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXI7CiAKIGNsYXNzIExheWVyVGlsZXJDaHJvbWl1
bSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGF5ZXJUaWxlckNocm9taXVtKTsKIHB1Ymxp
YzoKICAgICBlbnVtIEJvcmRlclRleGVsT3B0aW9uIHsgSGFzQm9yZGVyVGV4ZWxzLCBOb0JvcmRl
clRleGVscyB9OwogCi0gICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtPiBj
cmVhdGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJv
cmRlclRleGVsT3B0aW9uKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclRpbGVyQ2hyb21p
dW0+IGNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBQYXNzT3duUHRyPExheWVyVGV4dHVy
ZVVwZGF0ZXI+LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRpb24pOwog
CiAgICAgfkxheWVyVGlsZXJDaHJvbWl1bSgpOwogCkBAIC02MCwxNiArNTQsMTAgQEAgcHVibGlj
OgogICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwog
ICAgIHZvaWQgaW52YWxpZGF0ZUVudGlyZUxheWVyKCk7CiAKLSAgICAvLyBQYWludCBhbGwgaW52
YWxpZGF0aW9ucyBhbmQgbWlzc2luZyB0aWxlcyBuZWVkZWQgdG8gZHJhdyB0aGUgY29udGVudFJl
Y3QKLSAgICAvLyBpbnRvIHRoZSBpbnRlcm5hbCBjYW52YXMuCi0gICAgdm9pZCB1cGRhdGUoVGls
ZVBhaW50SW50ZXJmYWNlJiBwYWludGVyLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7Ci0K
LSAgICAvLyBSZXNlcnZlIGFuZCB1cGxvYWQgdGlsZSB0ZXh0dXJlcyBmcm9tIHRoZSBpbnRlcm5h
bCBjYW52YXMuCi0gICAgdm9pZCB1cGxvYWRDYW52YXMoKTsKLQotICAgIC8vIFJlc2VydmUgYW5k
IHVwbG9hZCB0aWxlIHRleHR1cmVzIGZyb20gYW4gZXh0ZXJuYWxseSBwYWludGVkIGJ1ZmZlci4K
LSAgICB2b2lkIHVwZGF0ZUZyb21QaXhlbHMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNv
bnN0IEludFJlY3QmIHBhaW50UmVjdCwgY29uc3QgdWludDhfdCogcGl4ZWxzKTsKLQorICAgIC8v
IFByZXBhcmUgZGF0YSBuZWVkZWQgdG8gdXBkYXRlIHRleHR1cmVzIHRoYXQgaW5zdGVyc2VjdCB3
aXRoIGNvbnRlbnRSZWN0LgorICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0KTsKKyAgICAvLyBVcGRhdGUgaW52YWxpZCB0ZXh0dXJlcyB0aGF0IGludGVy
c2VjdCB3aXRoIGNvbnRlbnRSZWN0IHByb3ZpZGVkIGluIHByZXBhcmVUb1VwZGF0ZSgpLgorICAg
IHZvaWQgdXBkYXRlUmVjdCgpOwogICAgIC8vIERyYXcgYWxsIHRpbGVzIHRoYXQgaW50ZXJzZWN0
IHdpdGggdGhlIGNvbnRlbnQgcmVjdC4KICAgICB2b2lkIGRyYXcoY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7CiAK
QEAgLTc3LDcgKzY1LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TGF5ZXJQb3NpdGlvbihjb25z
dCBJbnRQb2ludCYgcG9zaXRpb24pOwogICAgIC8vIENoYW5nZSB0aGUgdGlsZSBzaXplLiAgVGhp
cyBtYXkgaW52YWxpZGF0ZSBhbGwgdGhlIGV4aXN0aW5nIHRpbGVzLgogICAgIHZvaWQgc2V0VGls
ZVNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSk7Ci0gICAgdm9pZCBzZXRMYXllclJlbmRlcmVyKExh
eWVyUmVuZGVyZXJDaHJvbWl1bSopOwogCiAgICAgYm9vbCBza2lwc0RyYXcoKSBjb25zdCB7IHJl
dHVybiBtX3NraXBzRHJhdzsgfQogCkBAIC04NywxMiArNzQsMTIgQEAgcHVibGljOgogICAgIExh
eWVyVGV4dHVyZSogZ2V0U2luZ2xlVGV4dHVyZSgpOwogCiBwcml2YXRlOgotICAgIExheWVyVGls
ZXJDaHJvbWl1bShMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6
ZSwgQm9yZGVyVGV4ZWxPcHRpb24pOworICAgIExheWVyVGlsZXJDaHJvbWl1bShMYXllclJlbmRl
cmVyQ2hyb21pdW0qLCBQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+LCBjb25zdCBJbnRT
aXplJiB0aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRpb24pOwogCiAgICAgY2xhc3MgVGlsZSA6IHB1
YmxpYyBSZWZDb3VudGVkPFRpbGU+IHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGls
ZSk7CiAgICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBUaWxlKFBhc3NPd25QdHI8TGF5ZXJU
ZXh0dXJlPiB0ZXgpIDogbV90ZXgodGV4KSwgbV9pKC0xKSwgbV9qKC0xKSB7fQorICAgICAgICBl
eHBsaWNpdCBUaWxlKFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlPiB0ZXgpIDogbV90ZXgodGV4KSwg
bV9pKC0xKSwgbV9qKC0xKSB7IH0KIAogICAgICAgICBMYXllclRleHR1cmUqIHRleHR1cmUoKSB7
IHJldHVybiBtX3RleC5nZXQoKTsgfQogCkBAIC0xNTcsMTkgKzE0NCwxMyBAQCBwcml2YXRlOgog
ICAgIC8vIFRpZ2h0bHkgcGFja2VkIHNldCBvZiB1bnVzZWQgdGlsZXMuCiAgICAgVmVjdG9yPFJl
ZlB0cjxUaWxlPiA+IG1fdW51c2VkVGlsZXM7CiAKLSAgICAvLyBTdGF0ZSBoZWxkIGJldHdlZW4g
dXBkYXRlIGFuZCB1cGxvYWRDYW52YXMuCisgICAgLy8gU3RhdGUgaGVsZCBiZXR3ZWVuIHVwZGF0
ZSBhbmQgdXBsb2FkLgogICAgIEludFJlY3QgbV9wYWludFJlY3Q7CiAgICAgSW50UmVjdCBtX3Vw
ZGF0ZVJlY3Q7Ci0gICAgUGxhdGZvcm1DYW52YXMgbV9jYW52YXM7Ci0KLSAgICAvLyBDYWNoZSBh
IHRpbGUtc2l6ZWQgcGl4ZWwgYnVmZmVyIHRvIGRyYXcgaW50by4KLSAgICBPd25BcnJheVB0cjx1
aW50OF90PiBtX3RpbGVQaXhlbHM7CiAKICAgICBUaWxpbmdEYXRhIG1fdGlsaW5nRGF0YTsKIAot
ICAgIC8vIFdoZXRoZXIgdGhlIHRpbGVyIHdpbGwgdXNlIEdMX0NIUk9NSVVNX21hcF9zdWIgZm9y
IHRleHR1cmUgdXBsb2Fkcy4KLSAgICBib29sIG1fdXNlTWFwU3ViRm9yVXBsb2FkczsKLQorICAg
IE93blB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBtX3RleHR1cmVVcGRhdGVyOwogICAgIExheWVy
UmVuZGVyZXJDaHJvbWl1bSogbV9sYXllclJlbmRlcmVyOwogfTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAJKHJldmlzaW9uIDg2NjA1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgi
CiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0
dXJlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DYW52YXMuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgi
CiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCkBA
IC0xMTQsNyArMTE1LDcgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KCkKICAgICAgICAg
ICAgIG1lbWNweShwaXhlbERlc3QsIGxvY2tlci5waXhlbHMoKSwgaHVkU2l6ZS53aWR0aCgpICog
aHVkU2l6ZS5oZWlnaHQoKSAqIDQpOwogICAgICAgICAgICAgZXh0ZW5zaW9ucy0+dW5tYXBUZXhT
dWJJbWFnZTJEQ0hST01JVU0ocGl4ZWxEZXN0KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBHTEMoY29udGV4dC5nZXQoKSwgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIGNhbnZhcy5zaXplKCku
d2lkdGgoKSwgY2FudmFzLnNpemUoKS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBsb2NrZXIucGl4ZWxzKCkpKTsK
KyAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgY2FudmFzLnNp
emUoKS53aWR0aCgpLCBjYW52YXMuc2l6ZSgpLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGxvY2tlci5waXhlbHMo
KSkpOwogICAgIH0KIAogICAgIC8vIERyYXcgdGhlIEhVRCBvbnRvIHRoZSBkZWZhdWx0IHJlbmRl
ciBzdXJmYWNlLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2NjEw
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxMiBAQAorMjAxMS0wNS0xNiAgQWxvayBQcml5YWRhcnNoaSAgPGFsb2twQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBTcGxpdCBjYW52YXMgZnJvbSBMYXllclRpbGVyQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNzE5CisKKyAgICAgICAgKiBzcmMvV2Vi
Vmlld0ltcGwuY3BwOgorCiAyMDExLTA1LTEzICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA4NjYwNSkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzIsNiArNzIsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJLZXlib2FyZENvZGVzLmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUg
IkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgog
I2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTI0MDks
NyArMjQxMCw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmludmFsaWRhdGVSb290TGF5ZXJSZWMKICAg
ICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKIH0KIAotY2xhc3MgV2ViVmlld0ltcGxDb250
ZW50UGFpbnRlciA6IHB1YmxpYyBUaWxlUGFpbnRJbnRlcmZhY2UgeworY2xhc3MgV2ViVmlld0lt
cGxDb250ZW50UGFpbnRlciA6IHB1YmxpYyBMYXllclBhaW50ZXJDaHJvbWl1bSB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcik7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NPd25QdHI8V2ViVmlld0ltcGxDb250ZW50UGFpbnRlcio+IGNyZWF0ZShX
ZWJWaWV3SW1wbCogd2ViVmlld0ltcGwpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93859</attachid>
            <date>2011-05-17 19:47:47 -0700</date>
            <delta_ts>2011-05-18 15:26:24 -0700</delta_ts>
            <desc>Fix for the image assertion issues.</desc>
            <filename>0001-Clip-image-layer-uploads.patch</filename>
            <type>text/plain</type>
            <size>1718</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">RnJvbSAwMTc5NWMwMjRjMmYzNWQxYTYwMjQ3NGVhNTI4YWI5NDAyOWY5NzRkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBZHJpZW5uZSBXYWxrZXIgPGVubmVAZ29vZ2xlLmNvbT4KRGF0
ZTogVHVlLCAxNyBNYXkgMjAxMSAxOToyNTo0MiAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIENsaXAg
aW1hZ2UgbGF5ZXIgdXBsb2FkcwoKLS0tCiAuLi4vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXll
ckNocm9taXVtLmNwcCAgICAgICB8ICAgMTMgKysrKysrKysrKystLQogMSBmaWxlcyBjaGFuZ2Vk
LCAxMSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hy
b21pdW0uY3BwCmluZGV4IDA1Mzk4ZGMuLjFiM2NmNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNo
cm9taXVtLmNwcApAQCAtNTcsMTQgKzU3LDIzIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9p
ZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNp
emUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlt
YWdlUmVjdCgpLmNvbnRhaW5zKGNvbnRlbnRSZWN0KSk7CiAgICAgICAgIG1fdGV4U3ViSW1hZ2Uu
c2V0U3ViSW1hZ2VTaXplKHRpbGVTaXplKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlVGV4dHVyZVJlY3QoTGF5ZXJUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKICAgICB7CiAgICAgICAgIHRleHR1cmUt
PmJpbmRUZXh0dXJlKCk7Ci0gICAgICAgIG1fdGV4U3ViSW1hZ2UudXBsb2FkKG1faW1hZ2UucGl4
ZWxzKCksIGltYWdlUmVjdCgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCwgY29udGV4dCgpKTsKKwor
ICAgICAgICAvLyBTb3VyY2UgcmVjdCBzaG91bGQgbmV2ZXIgZ28gb3V0c2lkZSB0aGUgaW1hZ2Ug
cGl4ZWxzLCBldmVuIGlmIHRoaXMKKyAgICAgICAgLy8gaXMgcmVxdWVzdGVkIGJlY2F1c2UgdGhl
IHRleHR1cmUgZXh0ZW5kcyBvdXRzaWRlIHRoZSBpbWFnZS4KKyAgICAgICAgSW50UmVjdCBjbGlw
cGVkU291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7CisgICAgICAgIGNsaXBwZWRTb3VyY2VSZWN0Lmlu
dGVyc2VjdChpbWFnZVJlY3QoKSk7CisKKyAgICAgICAgSW50UmVjdCBjbGlwcGVkRGVzdFJlY3Qg
PSBkZXN0UmVjdDsKKyAgICAgICAgY2xpcHBlZERlc3RSZWN0Lm1vdmUoY2xpcHBlZFNvdXJjZVJl
Y3QubG9jYXRpb24oKSAtIHNvdXJjZVJlY3QubG9jYXRpb24oKSk7CisgICAgICAgIGNsaXBwZWRE
ZXN0UmVjdC5zZXRTaXplKHNvdXJjZVJlY3Quc2l6ZSgpKTsKKworICAgICAgICBtX3RleFN1Yklt
YWdlLnVwbG9hZChtX2ltYWdlLnBpeGVscygpLCBpbWFnZVJlY3QoKSwgY2xpcHBlZFNvdXJjZVJl
Y3QsIGNsaXBwZWREZXN0UmVjdCwgY29udGV4dCgpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0tIAox
LjcuMy4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93992</attachid>
            <date>2011-05-18 15:26:28 -0700</date>
            <delta_ts>2011-05-18 15:49:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60719-20110518152627.patch</filename>
            <type>text/plain</type>
            <size>37111</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODY3OTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0ZDRmYjk4MjM2Y2MyY2Mx
ZmE0NzVlMjU4NjJlMzJkMzg0ZTZlOGQwLi40NzcwYzZkZGViYTM4MGQ2YTY5YzhjYTgxZGI3OGQ0
ODZhYzE5NDkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkgQEAKKzIwMTEtMDUtMTggIEFsb2sg
UHJpeWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisgICAgICAgICAgICBBZHJpZW5uZSBX
YWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBTcGxpdCBjYW52YXMgZnJvbSBMYXllclRpbGVy
Q2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTYwNzE5CisKKyAgICAgICAgTGF5ZXJUaWxlckNocm9taXVtIG5vdyBqdXN0IGRvZXMgdGlsaW5n
LiBJdCBkZWxlZ2F0ZXMgdGhlIHRhc2sgb2YgcGFpbnRpbmcgYW5kIHVwZGF0aW5nIHRleHR1cmVz
IHRvIExheWVyVGV4dHVyZVVwZGF0ZXIuCisgICAgICAgIEFsc28gYWJzdHJhY3RlZCBMYXllclRl
eHR1cmVTdWJJbWFnZSB0byB1cGxvYWQgdGV4dHVyZSBwaXhlbHMuCisKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vVHJhY2VFdmVudC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXllckNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjp+Q29udGVudExheWVy
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50
Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVt
OjpjbGVhbnVwUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9t
aXVtOjpzZXRMYXllclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNo
cm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRM
YXllckNocm9taXVtOjpjcmVhdGVUaWxlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OkltYWdlTGF5ZXJU
ZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0
ZXI6On5JbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VM
YXllclRleHR1cmVVcGRhdGVyOjpvcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6aW1hZ2VSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVy
ZVVwZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5
ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06
OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERyYXdMYXllcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OkxheWVyVGlsZXJDaHJvbWl1bSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnNldFRpbGVTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6dXBkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRpbGVyQ2hyb21pdW06OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
aWxlckNocm9taXVtOjpUaWxlOjpUaWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVh
ZHNVcERpc3BsYXk6OmRyYXcpOgorCiAyMDExLTA1LTE3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1v
dGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgdGhlIHRoZSBjb250ZXh0IG1lbnUgdG8g
cmVmbGVjdCB0aGUgc3lzdGVtIHNlYXJjaCBwcm92aWRlciBvbiBNYWMuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggM2RmNjMzYjFmNWI4NDNjNTAxZGE5NDliNjc2MWNjODEwZmExNGE1Yi4uOWUxMzY4Mzcw
NDYxMWFiMWYzZGVmNmFjODdjZmQ5YTdkNzQ4MWNiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDA0
MCwxMCArNDA0MCwxNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclBhaW50ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJl
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0
dXJlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVN1YkltYWdlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNh
bnZhcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRp
bGVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclRpbGVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UcmFjZUV2ZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9UcmFjZUV2ZW50LmgKaW5kZXggZmY4ZmJlY2Q5MzA1ZmZhNDll
ZGQ4N2QxZWQxNjUzZmZjYTgzYWIxNy4uYzIzZjI4NDAyNjYzZmIwOTBhZmQ3NjRlYzZjMmEyMWVj
N2MyMmUwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vVHJh
Y2VFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1RyYWNlRXZl
bnQuaApAQCAtMjYsNiArMjYsNyBAQAogI2RlZmluZSBUcmFjZUV2ZW50X2gKIAogI2luY2x1ZGUg
IlBsYXRmb3JtQnJpZGdlLmgiCisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAKIC8vIElt
cGxlbWVudGF0aW9uIGRldGFpbDogdHJhY2UgZXZlbnQgbWFjcm9zIGNyZWF0ZSB0ZW1wb3Jhcnkg
dmFyaWFibGVzCiAvLyB0byBrZWVwIGluc3RydW1lbnRhdGlvbiBvdmVyaGVhZCBsb3cuIFRoZXNl
IG1hY3JvcyBnaXZlIGVhY2ggdGVtcG9yYXJ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1
bS5jcHAKaW5kZXggM2UyZWI4MzljMWQyN2IzZmNjY2Q3YzYyOTgzMDY4N2E5MTQ4NzdkZC4uOTRj
NzJlODEwMzJjYjExODRlY2I4ZjAwNTc5MDlmNWJiYjZkMzgyZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmNwcApAQCAtMzYsOCArMzYsMTEgQEAKIAogI2luY2x1ZGUgImNjL0ND
TGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJM
YXllclBhaW50ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5o
IgogI2luY2x1ZGUgIkxheWVyVGV4dHVyZS5oIgorI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0
ZXJDYW52YXMuaCIKKyNpbmNsdWRlICJMYXllclRpbGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAKQEAgLTUxLDI0
ICs1NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
UGFzc1JlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bT4gQ29udGVudExheWVyQ2hyb21pdW06OmNy
ZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQotewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ29udGVudExheWVyQ2hyb21pdW0ob3duZXIpKTsKLX0KLQotQ29udGVudExheWVyQ2hy
b21pdW06OkNvbnRlbnRMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIp
Ci0gICAgOiBMYXllckNocm9taXVtKG93bmVyKQotICAgICwgbV90aWxpbmdPcHRpb24oQ29udGVu
dExheWVyQ2hyb21pdW06OkF1dG9UaWxlKQotewotfQotCi1Db250ZW50TGF5ZXJDaHJvbWl1bTo6
fkNvbnRlbnRMYXllckNocm9taXVtKCkKLXsKLSAgICBtX3RpbGVyLmNsZWFyKCk7Ci0gICAgTGF5
ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpOwotfQotCi1jbGFzcyBDb250ZW50TGF5ZXJQ
YWludGVyIDogcHVibGljIFRpbGVQYWludEludGVyZmFjZSB7CitjbGFzcyBDb250ZW50TGF5ZXJQ
YWludGVyIDogcHVibGljIExheWVyUGFpbnRlckNocm9taXVtIHsKIHB1YmxpYzoKICAgICBleHBs
aWNpdCBDb250ZW50TGF5ZXJQYWludGVyKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiAg
ICAgICAgIDogbV9vd25lcihvd25lcikKQEAgLTg1LDE0ICs3MSwyNyBAQCBwcml2YXRlOgogICAg
IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogbV9vd25lcjsKIH07CiAKK1Bhc3NSZWZQdHI8Q29udGVu
dExheWVyQ2hyb21pdW0+IENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NMYXll
ckNocm9taXVtKiBvd25lcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbnRlbnRMYXll
ckNocm9taXVtKG93bmVyKSk7Cit9CisKK0NvbnRlbnRMYXllckNocm9taXVtOjpDb250ZW50TGF5
ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQorICAgIDogTGF5ZXJDaHJv
bWl1bShvd25lcikKKyAgICAsIG1fdGlsaW5nT3B0aW9uKENvbnRlbnRMYXllckNocm9taXVtOjpB
dXRvVGlsZSkKK3sKK30KKworQ29udGVudExheWVyQ2hyb21pdW06On5Db250ZW50TGF5ZXJDaHJv
bWl1bSgpCit7CisgICAgY2xlYW51cFJlc291cmNlcygpOworfQorCiB2b2lkIENvbnRlbnRMYXll
ckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eShjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJm
YWNlUmVjdCkKIHsKICAgICBBU1NFUlQoZHJhd3NDb250ZW50KCkpOwogICAgIEFTU0VSVChsYXll
clJlbmRlcmVyKCkpOwogCi0gICAgY3JlYXRlVGlsZXJJZk5lZWRlZCgpOwotCi0gICAgQ29udGVu
dExheWVyUGFpbnRlciBwYWludGVyKG1fb3duZXIpOwogICAgIHVwZGF0ZUxheWVyU2l6ZShsYXll
ckJvdW5kcygpLnNpemUoKSk7CiAKICAgICBJbnRSZWN0IGxheWVyUmVjdCA9IHZpc2libGVMYXll
clJlY3QodGFyZ2V0U3VyZmFjZVJlY3QpOwpAQCAtMTAzLDE1ICsxMDIsMjYgQEAgdm9pZCBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoY29uc3QgSW50UmVjdCYgdGFy
Z2V0U3VyZmFjZVJlY3QKICAgICBkaXJ0eS5pbnRlcnNlY3QobGF5ZXJCb3VuZHMoKSk7CiAgICAg
bV90aWxlci0+aW52YWxpZGF0ZVJlY3QoZGlydHkpOwogCi0gICAgbV90aWxlci0+dXBkYXRlKHBh
aW50ZXIsIGxheWVyUmVjdCk7CisgICAgbV90aWxlci0+cHJlcGFyZVRvVXBkYXRlKGxheWVyUmVj
dCk7CiAgICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKIH0KIAordm9pZCBDb250ZW50TGF5
ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpCit7CisgICAgbV90aWxlci5jbGVhcigpOwor
ICAgIExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKTsKK30KKwogdm9pZCBDb250ZW50
TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxh
eWVyUmVuZGVyZXIpCiB7CiAgICAgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlcihsYXll
clJlbmRlcmVyKTsKICAgICBjcmVhdGVUaWxlcklmTmVlZGVkKCk7Ci0gICAgbV90aWxlci0+c2V0
TGF5ZXJSZW5kZXJlcihsYXllclJlbmRlcmVyKTsKK30KKworUGFzc093blB0cjxMYXllclRleHR1
cmVVcGRhdGVyPiBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIoKQor
eworICAgIE93blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlciA9IGFkb3B0UHRyKG5l
dyBDb250ZW50TGF5ZXJQYWludGVyKG1fb3duZXIpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3
IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAobGF5ZXJSZW5kZXJlckNvbnRleHQoKSwgcGFpbnRl
ci5yZWxlYXNlKCksIGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dFN1cHBvcnRzTWFwU3ViKCkpKTsK
IH0KIAogVHJhbnNmb3JtYXRpb25NYXRyaXggQ29udGVudExheWVyQ2hyb21pdW06OnRpbGluZ1Ry
YW5zZm9ybSgpCkBAIC0xODYsMTYgKzE5NiwyNiBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVt
OjpkcmF3KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0KQogICAgICAgICBtX3RpbGVy
LT5kcmF3KGxheWVyUmVjdCwgdHJhbnNmb3JtLCBjY0xheWVySW1wbCgpLT5kcmF3T3BhY2l0eSgp
KTsKIH0KIAorYm9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9vd25lciAmJiBtX293bmVyLT5kcmF3c0NvbnRlbnQoKSAmJiAoIW1f
dGlsZXIgfHwgIW1fdGlsZXItPnNraXBzRHJhdygpKTsKK30KKwogdm9pZCBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlVGlsZXJJZk5lZWRlZCgpCiB7CiAgICAgaWYgKG1fdGlsZXIpCiAgICAg
ICAgIHJldHVybjsKLSAgICBtX3RpbGVyID0gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUobGF5
ZXJSZW5kZXJlcigpLCBJbnRTaXplKGRlZmF1bHRUaWxlU2l6ZSwgZGVmYXVsdFRpbGVTaXplKSwg
TGF5ZXJUaWxlckNocm9taXVtOjpIYXNCb3JkZXJUZXhlbHMpOworCisgICAgbV90aWxlciA9IExh
eWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKAorICAgICAgICBsYXllclJlbmRlcmVyKCksCisgICAg
ICAgIGNyZWF0ZVRleHR1cmVVcGRhdGVyKCksCisgICAgICAgIEludFNpemUoZGVmYXVsdFRpbGVT
aXplLCBkZWZhdWx0VGlsZVNpemUpLAorICAgICAgICBMYXllclRpbGVyQ2hyb21pdW06Okhhc0Jv
cmRlclRleGVscyk7CiB9CiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoKQogewotICAgIG1fdGlsZXItPnVwbG9hZENhbnZhcygpOworICAgIG1f
dGlsZXItPnVwZGF0ZVJlY3QoKTsKIH0KIAogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6c2V0
VGlsaW5nT3B0aW9uKFRpbGluZ09wdGlvbiBvcHRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uaAppbmRleCBhYjU0ODVmYjdjZTkxNmZmZjI1NWY0ZjVkNDUwYmZhNTM0MDQ2OWI1Li5j
YjJlMWZiNDIxMTU1YTI3MThiMTYwYTEzYTg1Y2E1NjZkZTQxYjMyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmgKQEAgLTM1LDEyICszNSwxMiBAQAogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJM
YXllclRpbGVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyVGV4dHVyZTsKK2NsYXNzIExheWVyVGlsZXJD
aHJvbWl1bTsKK2NsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXI7CiAKIC8vIEEgTGF5ZXIgdGhhdCBy
ZXF1aXJlcyBhIEdyYXBoaWNzQ29udGV4dCB0byByZW5kZXIgaXRzIGNvbnRlbnRzLgogY2xhc3Mg
Q29udGVudExheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CkBAIC01OCw3ICs1
OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYmluZENvbnRlbnRzVGV4dHVyZSgpOwog
CiAgICAgdmlydHVhbCB2b2lkIGRyYXcoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3Qp
OwotICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX293bmVy
ICYmIG1fb3duZXItPmRyYXdzQ29udGVudCgpICYmICghbV90aWxlciB8fCAhbV90aWxlci0+c2tp
cHNEcmF3KCkpOyB9CisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwogCiBw
cm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ29udGVudExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXll
ckNocm9taXVtKiBvd25lcik7CkBAIC02Niw4ICs2NiwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJDb250
ZW50TGF5ZXIiOyB9CiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0
cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCisgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNv
dXJjZXMoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVy
Q2hyb21pdW0qKTsKIAorICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVy
PiBjcmVhdGVUZXh0dXJlVXBkYXRlcigpOworCiAgICAgdmlydHVhbCBJbnRSZWN0IGxheWVyQm91
bmRzKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRpbGluZ1Ry
YW5zZm9ybSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYjBiNzA1M2I1
ZjMwMTY3MzZhMWVjYWEzMTFjNmIyMDY1MTZjZDhmMy4uMWIzY2Y1MTRhNTc1ZTdkMTQwNWI5Yzli
MjVkZmY1NzZlNzc4ZGEzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCkBAIC0z
OCw5ICszOCw1NSBAQAogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCisjaW5jbHVkZSAiTGF5ZXJU
ZXh0dXJlU3ViSW1hZ2UuaCIKKyNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyIDogcHVi
bGljIExheWVyVGV4dHVyZVVwZGF0ZXIgeworcHVibGljOgorICAgIEltYWdlTGF5ZXJUZXh0dXJl
VXBkYXRlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgUGxhdGZvcm1JbWFnZSYg
aW1hZ2UsIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpCisgICAgICAgIDogTGF5ZXJUZXh0dXJlVXBk
YXRlcihjb250ZXh0KQorICAgICAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAgICAgICwgbV90ZXhT
dWJJbWFnZSh1c2VNYXBUZXhTdWJJbWFnZSkKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgfklt
YWdlTGF5ZXJUZXh0dXJlVXBkYXRlcigpIHsgfQorCisgICAgdmlydHVhbCBPcmllbnRhdGlvbiBv
cmllbnRhdGlvbigpIHsgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OkJvdHRvbVVwT3JpZW50
YXRpb247IH0KKworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxz
KQorICAgIHsKKyAgICAgICAgbV90ZXhTdWJJbWFnZS5zZXRTdWJJbWFnZVNpemUodGlsZVNpemUp
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChMYXllclRleHR1
cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRl
c3RSZWN0KQorICAgIHsKKyAgICAgICAgdGV4dHVyZS0+YmluZFRleHR1cmUoKTsKKworICAgICAg
ICAvLyBTb3VyY2UgcmVjdCBzaG91bGQgbmV2ZXIgZ28gb3V0c2lkZSB0aGUgaW1hZ2UgcGl4ZWxz
LCBldmVuIGlmIHRoaXMKKyAgICAgICAgLy8gaXMgcmVxdWVzdGVkIGJlY2F1c2UgdGhlIHRleHR1
cmUgZXh0ZW5kcyBvdXRzaWRlIHRoZSBpbWFnZS4KKyAgICAgICAgSW50UmVjdCBjbGlwcGVkU291
cmNlUmVjdCA9IHNvdXJjZVJlY3Q7CisgICAgICAgIGNsaXBwZWRTb3VyY2VSZWN0LmludGVyc2Vj
dChpbWFnZVJlY3QoKSk7CisKKyAgICAgICAgSW50UmVjdCBjbGlwcGVkRGVzdFJlY3QgPSBkZXN0
UmVjdDsKKyAgICAgICAgY2xpcHBlZERlc3RSZWN0Lm1vdmUoY2xpcHBlZFNvdXJjZVJlY3QubG9j
YXRpb24oKSAtIHNvdXJjZVJlY3QubG9jYXRpb24oKSk7CisgICAgICAgIGNsaXBwZWREZXN0UmVj
dC5zZXRTaXplKHNvdXJjZVJlY3Quc2l6ZSgpKTsKKworICAgICAgICBtX3RleFN1YkltYWdlLnVw
bG9hZChtX2ltYWdlLnBpeGVscygpLCBpbWFnZVJlY3QoKSwgY2xpcHBlZFNvdXJjZVJlY3QsIGNs
aXBwZWREZXN0UmVjdCwgY29udGV4dCgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSW50UmVj
dCBpbWFnZVJlY3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9p
bnQ6Onplcm8oKSwgbV9pbWFnZS5zaXplKCkpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBJbWFn
ZUxheWVyVGV4dHVyZVVwZGF0ZXIgc2hvdWxkIHJhdGhlciBvd24gYSBQbGF0Zm9ybUltYWdlIHJh
dGhlciB0aGFuIGtlZXBpbmcgYSByZWZlcmVuY2UuCisgICAgY29uc3QgUGxhdGZvcm1JbWFnZSYg
bV9pbWFnZTsKKyAgICBMYXllclRleHR1cmVTdWJJbWFnZSBtX3RleFN1YkltYWdlOworfTsKKwog
UGFzc1JlZlB0cjxJbWFnZUxheWVyQ2hyb21pdW0+IEltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJbWFnZUxheWVyQ2hyb21pdW0ob3duZXIpKTsKQEAgLTgwLDEzICsxMjYsMTggQEAgdm9pZCBJ
bWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IEludFJlY3QmKQog
ICAgICAgICAgICAgbV90aWxlci0+aW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0KTsKICAgICAgICAg
ICAgIG1fZGlydHlSZWN0ID0gSW50UmVjdCgpOwogICAgICAgICB9CisgICAgICAgIG1fdGlsZXIt
PnByZXBhcmVUb1VwZGF0ZShwYWludFJlY3QpOwogICAgIH0KIH0KIAogdm9pZCBJbWFnZUxheWVy
Q2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQogewotICAgIEludFJlY3QgcGFp
bnRSZWN0KEludFBvaW50KDAsIDApLCBtX2RlY29kZWRJbWFnZS5zaXplKCkpOwotICAgIG1fdGls
ZXItPnVwZGF0ZUZyb21QaXhlbHMocGFpbnRSZWN0LCBwYWludFJlY3QsIG1fZGVjb2RlZEltYWdl
LnBpeGVscygpKTsKKyAgICBtX3RpbGVyLT51cGRhdGVSZWN0KCk7Cit9CisKK1Bhc3NPd25QdHI8
TGF5ZXJUZXh0dXJlVXBkYXRlcj4gSW1hZ2VMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBk
YXRlcigpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbWFnZUxheWVyVGV4dHVyZVVwZGF0
ZXIobGF5ZXJSZW5kZXJlckNvbnRleHQoKSwgbV9kZWNvZGVkSW1hZ2UsIGxheWVyUmVuZGVyZXIo
KS0+Y29udGV4dFN1cHBvcnRzTWFwU3ViKCkpKTsKIH0KIAogSW50UmVjdCBJbWFnZUxheWVyQ2hy
b21pdW06OmxheWVyQm91bmRzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKaW5k
ZXggOGFiNzZhOGI2OTcyYTY3NThkMDk3YzI1ZjQzMTA3NjQ3MTUxYTUyOC4uMTNkMDljMmFjNTRi
ODFiY2JhYzdlYmQ2ZGJjMWUwYzJkMjdiNDI0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVt
LmgKQEAgLTU5LDYgKzU5LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgY29u
c3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiSW1hZ2VMYXllciI7
IH0KIAorICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGVU
ZXh0dXJlVXBkYXRlcigpOwogICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggdGlsaW5n
VHJhbnNmb3JtKCk7CiAgICAgdmlydHVhbCBJbnRSZWN0IGxheWVyQm91bmRzKCkgY29uc3Q7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDIwODc3N2VkZTNlNDhj
MWZkYjBiYmEwMmI0ZGYzYjM0MmI4NjY4NTAuLjczYTBkODQ1ZTQxNTRlYWI0NjUxMjgyYzA5Mzg2
ZDNkNGZlNzFmOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAt
NDAsNyArNDAsOSBAQAogI2luY2x1ZGUgIkdlb21ldHJ5QmluZGluZy5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUg
IkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCisjaW5j
bHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2Vy
LmgiCkBAIC05NCw3ICs5Niw3IEBAIHN0YXRpYyBib29sIGlzU2NhbGVPclRyYW5zbGF0aW9uKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogCiB9CiAKLVBhc3NSZWZQdHI8TGF5ZXJSZW5k
ZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4g
Y29udGVudFBhaW50KQorUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRl
eHQsIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRlbnRQYWludCkKIHsKICAg
ICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTA3LDEwICsxMDksOSBAQCBQ
YXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpj
cmVhdGUoUGFzc1JlZlB0cjxHcmFwaAogfQogCiBMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVy
UmVuZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc093blB0cjxU
aWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWludCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNv
bnRlbnRQYWludCkKICAgICA6IG1fdmlld3BvcnRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgtMSwg
LTEpKQogICAgICwgbV9yb290TGF5ZXIoMCkKLSAgICAsIG1fcm9vdExheWVyQ29udGVudFBhaW50
KGNvbnRlbnRQYWludCkKICAgICAsIG1fY3VycmVudFNoYWRlcigwKQogICAgICwgbV9jdXJyZW50
UmVuZGVyU3VyZmFjZSgwKQogICAgICwgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKDApCkBAIC0x
MjYsNyArMTI3LDkgQEAgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21p
dW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGUKICAgICBpZiAobV9jb250ZXh0
U3VwcG9ydHNNYXBTdWIpCiAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1
cmVFbmFibGVkKCJHTF9DSFJPTUlVTV9tYXBfc3ViIik7CiAgICAgbV9oYXJkd2FyZUNvbXBvc2l0
aW5nID0gaW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKTsKLSAgICBtX3Jvb3RMYXllckNvbnRlbnRU
aWxlciA9IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIEludFNpemUoMjU2LCAyNTYp
LCBMYXllclRpbGVyQ2hyb21pdW06Ok5vQm9yZGVyVGV4ZWxzKTsKKworICAgIE93blB0cjxMYXll
clRleHR1cmVVcGRhdGVyPiB0ZXh0dXJlVXBkYXRlciA9IGFkb3B0UHRyKG5ldyBMYXllclRleHR1
cmVVcGRhdGVyQml0bWFwKG1fY29udGV4dC5nZXQoKSwgY29udGVudFBhaW50LCBtX2NvbnRleHRT
dXBwb3J0c01hcFN1YikpOworICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyID0gTGF5ZXJUaWxl
ckNocm9taXVtOjpjcmVhdGUodGhpcywgdGV4dHVyZVVwZGF0ZXIucmVsZWFzZSgpLCBJbnRTaXpl
KDI1NiwgMjU2KSwgTGF5ZXJUaWxlckNocm9taXVtOjpOb0JvcmRlclRleGVscyk7CiAgICAgQVNT
RVJUKG1fcm9vdExheWVyQ29udGVudFRpbGVyKTsKIAogICAgIG1faGVhZHNVcERpc3BsYXkgPSBD
Q0hlYWRzVXBEaXNwbGF5OjpjcmVhdGUodGhpcyk7CkBAIC0xNjYsNyArMTY5LDcgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJl
Y3QmIGRpcnR5UmVjdCkKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVSb290TGF5
ZXJDb250ZW50cygpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dXBkYXRlUm9vdExheWVyQ29udGVudHMiLCB0aGlzLCAwKTsKLSAgICBtX3Jvb3RMYXllckNvbnRl
bnRUaWxlci0+dXBkYXRlKCptX3Jvb3RMYXllckNvbnRlbnRQYWludCwgbV92aWV3cG9ydFZpc2li
bGVSZWN0KTsKKyAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlci0+cHJlcGFyZVRvVXBkYXRlKG1f
dmlld3BvcnRWaXNpYmxlUmVjdCk7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3Um9vdExheWVyKCkKQEAgLTE3NCw3ICsxNzcsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd1Jvb3RMYXllcigpCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2Nyb2xsOwog
ICAgIHNjcm9sbC50cmFuc2xhdGUoLW1fdmlld3BvcnRWaXNpYmxlUmVjdC54KCksIC1tX3ZpZXdw
b3J0VmlzaWJsZVJlY3QueSgpKTsKIAotICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyLT51cGxv
YWRDYW52YXMoKTsKICAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlci0+ZHJhdyhtX3ZpZXdwb3J0
VmlzaWJsZVJlY3QsIHNjcm9sbCwgMS4wZik7CiB9CiAKQEAgLTIxOCw3ICsyMjAsNiBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd0xheWVycygpCiAgICAgfQogCiAg
ICAgTGF5ZXJMaXN0IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0KICAgICB1cGRhdGVMYXllcnMo
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAKICAgICAvLyBCZWZvcmUgZHJhd0xheWVyczoKQEAg
LTMyMiw2ICszMjMsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJz
KExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKIC8vICB9CiAKICAgICB1cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKG1fcm9vdExheWVyLmdldCgpKTsKKyAgICAvLyBV
cGRhdGUgY29tcG9zaXRvciByZXNvdXJjZXMgZm9yIHJvb3QgbGF5ZXIuCisgICAgbV9yb290TGF5
ZXJDb250ZW50VGlsZXItPnVwZGF0ZVJlY3QoKTsKIAogICAgIC8vIEFmdGVyIHVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXNSZWN1cnNpdmUsIHNldC93YWl0IGxhdGNoZXMgZm9yIGFsbCBjaGlsZAog
ICAgIC8vIGNvbnRleHRzLiBUaGlzIHdpbGwgcHJldmVudCB0aGUgY29tcG9zaXRvciBmcm9tIHVz
aW5nIGFueSBvZiB0aGUgY2hpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5k
ZXggNjVmMWNmNzEwOGVmNjNhYmVhMzdkMDE1YTY5NGJjYjUwNjExYWFiMi4uNWM5MDc2YjdmZGQ0
YzI5NjY5NjlhOWM4ODhmMDM0Y2QwODdhZWFkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmgKQEAgLTY0LDExICs2NCwxMiBAQCBjbGFzcyBDQ0hlYWRzVXBEaXNwbGF5OwogY2xh
c3MgQ0NMYXllckltcGw7CiBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQzRDsKK2NsYXNzIExheWVyUGFpbnRlckNocm9taXVtOwogCiAvLyBDbGFzcyB0aGF0IGhh
bmRsZXMgZHJhd2luZyBvZiBjb21wb3NpdGVkIHJlbmRlciBsYXllcnMgdXNpbmcgR0wuCiBjbGFz
cyBMYXllclJlbmRlcmVyQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291bnRlZDxMYXllclJlbmRlcmVy
Q2hyb21pdW0+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVy
Q2hyb21pdW0+IGNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0
cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWludCk7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4sIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRlbnRQYWludCk7CiAK
ICAgICB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CiAKQEAgLTE1MSw3ICsxNTIsNyBAQCBwcml2
YXRlOgogICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIG1vdmVkIHRvIHRoZSBDQ1ZpZXdJ
bXBsIHdoZW4gdGhhdCBjbGFzcyBleGlzdHMuCiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Jv
b3RDQ0xheWVySW1wbDsKIAotICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQ
YWludCk7CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+LCBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBjb250ZW50UGFpbnQpOwog
CiAgICAgdm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KTsKICAgICB2b2lkIHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKCk7CkBAIC0xOTEsNyArMTkyLDYg
QEAgcHJpdmF0ZToKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3Byb2plY3Rpb25NYXRyaXg7
CiAKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9yb290TGF5ZXI7Ci0gICAgT3duUHRyPFRp
bGVQYWludEludGVyZmFjZT4gbV9yb290TGF5ZXJDb250ZW50UGFpbnQ7CiAgICAgT3duUHRyPExh
eWVyVGlsZXJDaHJvbWl1bT4gbV9yb290TGF5ZXJDb250ZW50VGlsZXI7CiAKICAgICBib29sIG1f
aGFyZHdhcmVDb21wb3NpdGluZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwCmluZGV4
IDM3ZTU2MThhY2E0NmZjMTNiYzhjMzU5ZjRjZTljN2VhZWMyZGI0OTQuLmY1OWNlN2I4MzZmZTA4
NzU3MzM1YmMyNTM1OGQ1YWY1YWY4MzAxZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVt
LmNwcApAQCAtMzUsMzggKzM1LDMwIEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
ICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclRleHR1
cmUuaCIKKyNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSAiVHJhY2VF
dmVudC5oIgogCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25BcnJheVB0ci5oPgotCiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8TGF5ZXJUaWxl
ckNocm9taXVtPiBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21p
dW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9w
dGlvbiBib3JkZXIpCitQYXNzT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gTGF5ZXJUaWxlckNo
cm9taXVtOjpjcmVhdGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBQYXNz
T3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IHRleHR1cmVVcGRhdGVyLCBjb25zdCBJbnRTaXpl
JiB0aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRpb24gYm9yZGVyKQogewogICAgIGlmICghbGF5ZXJS
ZW5kZXJlciB8fCB0aWxlU2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBMYXllclRpbGVyQ2hyb21pdW0obGF5ZXJSZW5kZXJl
ciwgdGlsZVNpemUsIGJvcmRlcikpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJUaWxl
ckNocm9taXVtKGxheWVyUmVuZGVyZXIsIHRleHR1cmVVcGRhdGVyLCB0aWxlU2l6ZSwgYm9yZGVy
KSk7CiB9CiAKLUxheWVyVGlsZXJDaHJvbWl1bTo6TGF5ZXJUaWxlckNocm9taXVtKExheWVyUmVu
ZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJv
cmRlclRleGVsT3B0aW9uIGJvcmRlcikKK0xheWVyVGlsZXJDaHJvbWl1bTo6TGF5ZXJUaWxlckNo
cm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgUGFzc093blB0cjxM
YXllclRleHR1cmVVcGRhdGVyPiB0ZXh0dXJlVXBkYXRlciwgY29uc3QgSW50U2l6ZSYgdGlsZVNp
emUsIEJvcmRlclRleGVsT3B0aW9uIGJvcmRlcikKICAgICA6IG1fc2tpcHNEcmF3KGZhbHNlKQog
ICAgICwgbV90aWxpbmdEYXRhKG1heCh0aWxlU2l6ZS53aWR0aCgpLCB0aWxlU2l6ZS5oZWlnaHQo
KSksIDAsIDAsIGJvcmRlciA9PSBIYXNCb3JkZXJUZXhlbHMpCi0gICAgLCBtX3VzZU1hcFN1YkZv
clVwbG9hZHMobGF5ZXJSZW5kZXJlci0+Y29udGV4dFN1cHBvcnRzTWFwU3ViKCkpCisgICAgLCBt
X3RleHR1cmVVcGRhdGVyKHRleHR1cmVVcGRhdGVyKQogICAgICwgbV9sYXllclJlbmRlcmVyKGxh
eWVyUmVuZGVyZXIpCiB7CiAgICAgc2V0VGlsZVNpemUodGlsZVNpemUpOwogfQogCi12b2lkIExh
eWVyVGlsZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0q
IGxheWVyUmVuZGVyZXIpCi17Ci0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlciAhPSBsYXllclJlbmRl
cmVyKQotICAgICAgICByZXNldCgpOwotICAgIG1fbGF5ZXJSZW5kZXJlciA9IGxheWVyUmVuZGVy
ZXI7Ci19Ci0KIExheWVyVGlsZXJDaHJvbWl1bTo6fkxheWVyVGlsZXJDaHJvbWl1bSgpCiB7CiAg
ICAgcmVzZXQoKTsKQEAgLTg2LDggKzc4LDYgQEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnNl
dFRpbGVTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgcmVzZXQoKTsKIAogICAgIG1fdGls
ZVNpemUgPSBzaXplOwotICAgIGlmICghbV91c2VNYXBTdWJGb3JVcGxvYWRzKQotICAgICAgICBt
X3RpbGVQaXhlbHMgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50OF90W21fdGlsZVNpemUud2lkdGgo
KSAqIG1fdGlsZVNpemUuaGVpZ2h0KCkgKiA0XSk7CiAgICAgbV90aWxpbmdEYXRhLnNldE1heFRl
eHR1cmVTaXplKG1heChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKIH0KIApAQCAtMjMw
LDcgKzIyMCw3IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjppbnZhbGlkYXRlRW50aXJlTGF5
ZXIoKQogICAgIG1fdGlsaW5nRGF0YS5zZXRUb3RhbFNpemUoMCwgMCk7CiB9CiAKLXZvaWQgTGF5
ZXJUaWxlckNocm9taXVtOjp1cGRhdGUoVGlsZVBhaW50SW50ZXJmYWNlJiBwYWludGVyLCBjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3ZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpwcmVwYXJl
VG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiB7CiAgICAgaWYgKG1fc2tpcHNE
cmF3KQogICAgICAgICByZXR1cm47CkBAIC0yNjcsMzAgKzI1NywxMCBAQCB2b2lkIExheWVyVGls
ZXJDaHJvbWl1bTo6dXBkYXRlKFRpbGVQYWludEludGVyZmFjZSYgcGFpbnRlciwgY29uc3QgSW50
UmVjdCYgY29udAogICAgIGlmIChkaXJ0eUxheWVyUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fY2FudmFzLnJlc2l6ZShtX3BhaW50UmVjdC5zaXplKCkpOwotCi0gICAg
Ly8gQXNzdW1wdGlvbjogaWYgYSB0aWxlciBpcyB1c2luZyBib3JkZXIgdGV4ZWxzLCB0aGVuIGl0
IGlzIGJlY2F1c2UgdGhlCi0gICAgLy8gbGF5ZXIgaXMgbGlrZWx5IHRvIGJlIGZpbHRlcmVkIG9y
IHRyYW5zZm9ybWVkLiBCZWNhdXNlIG9mIGl0IG1pZ2h0IGJlCi0gICAgLy8gdHJhbnNmb3JtZWQs
IGRyYXcgdGhlIHRleHQgaW4gZ3JheXNjYWxlIGluc3RlYWQgb2Ygc3VicGl4ZWwgYW50aWFsaWFz
aW5nLgotICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpUZXh0T3B0aW9uIHRleHRPcHRpb24g
PSBtX3RpbGluZ0RhdGEuYm9yZGVyVGV4ZWxzKCkgPyBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6
R3JheXNjYWxlVGV4dCA6IFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpTdWJwaXhlbFRleHQ7Ci0g
ICAgUGxhdGZvcm1DYW52YXM6OlBhaW50ZXIgY2FudmFzUGFpbnRlcigmbV9jYW52YXMsIHRleHRP
cHRpb24pOwotICAgIGNhbnZhc1BhaW50ZXIuY29udGV4dCgpLT50cmFuc2xhdGUoLW1fcGFpbnRS
ZWN0LngoKSwgLW1fcGFpbnRSZWN0LnkoKSk7Ci0gICAgewotICAgICAgICBUUkFDRV9FVkVOVCgi
TGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGU6OnBhaW50IiwgdGhpcywgMCk7Ci0gICAgICAgIHBh
aW50ZXIucGFpbnQoKmNhbnZhc1BhaW50ZXIuY29udGV4dCgpLCBtX3BhaW50UmVjdCk7Ci0gICAg
fQotfQotCi12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6dXBsb2FkQ2FudmFzKCkKLXsKLSAgICBQ
bGF0Zm9ybUNhbnZhczo6QXV0b0xvY2tlciBsb2NrZXIoJm1fY2FudmFzKTsKLSAgICB7Ci0gICAg
ICAgIFRSQUNFX0VWRU5UKCJMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZUZyb21QaXhlbHMiLCB0
aGlzLCAwKTsKLSAgICAgICAgdXBkYXRlRnJvbVBpeGVscyhtX3VwZGF0ZVJlY3QsIG1fcGFpbnRS
ZWN0LCBsb2NrZXIucGl4ZWxzKCkpOwotICAgIH0KKyAgICBtX3RleHR1cmVVcGRhdGVyLT5wcmVw
YXJlVG9VcGRhdGUobV9wYWludFJlY3QsIG1fdGlsZVNpemUsIG1fdGlsaW5nRGF0YS5ib3JkZXJU
ZXhlbHMoKSk7CiB9CiAKLXZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGVGcm9tUGl4ZWxz
KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRSZWN0JiBwYWludFJlY3QsIGNv
bnN0IHVpbnQ4X3QqIHBhaW50UGl4ZWxzKQordm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0
ZVJlY3QoKQogewogICAgIC8vIFBhaW50aW5nIGNvdWxkIGNhdXNlIGNvbXBvc2l0aW5nIHRvIGdl
dCB0dXJuZWQgb2ZmLCB3aGljaCBtYXkgY2F1c2UgdGhlIHRpbGVyIHRvIGJlY29tZSBpbnZhbGlk
YXRlZCBtaWQtdXBkYXRlLgogICAgIGlmICghbV90aWxpbmdEYXRhLnRvdGFsU2l6ZVgoKSB8fCAh
bV90aWxpbmdEYXRhLnRvdGFsU2l6ZVkoKSkKQEAgLTI5OSw3ICsyNjksNyBAQCB2b2lkIExheWVy
VGlsZXJDaHJvbWl1bTo6dXBkYXRlRnJvbVBpeGVscyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCwgY29uc3QgSW50UgogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5k
ZXJlckNvbnRleHQoKTsKIAogICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207Ci0gICAg
Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBi
b3R0b20pOworICAgIGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhtX3VwZGF0ZVJlY3QsIGxlZnQs
IHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207
ICsraikgewogICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CiAg
ICAgICAgICAgICBUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwpAQCAtMzE0LDcgKzI4NCw3IEBA
IHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGVGcm9tUGl4ZWxzKGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0LCBjb25zdCBJbnRSCiAgICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2Vj
dChsYXllclJlY3RUb0NvbnRlbnRSZWN0KHRpbGUtPm1fZGlydHlMYXllclJlY3QpKTsKICAgICAg
ICAgICAgIC8vIFBhaW50IHJlY3Qgbm90IGd1YXJhbnRlZWQgdG8gbGluZSB1cCBvbiB0aWxlIGJv
dW5kYXJpZXMsIHNvCiAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCBzb3VyY2VSZWN0IGRv
ZXNuJ3QgZXh0ZW5kIG91dHNpZGUgb2YgaXQuCi0gICAgICAgICAgICBzb3VyY2VSZWN0LmludGVy
c2VjdChwYWludFJlY3QpOworICAgICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QobV9wYWlu
dFJlY3QpOwogICAgICAgICAgICAgaWYgKHNvdXJjZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCkBAIC0zMzQsNTcgKzMwNCwyMiBAQCB2b2lkIExheWVyVGlsZXJD
aHJvbWl1bTo6dXBkYXRlRnJvbVBpeGVscyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29u
c3QgSW50UgogICAgICAgICAgICAgICAgIENSQVNIKCk7CiAKICAgICAgICAgICAgIC8vIE9mZnNl
dCBmcm9tIHBhaW50IHJlY3RhbmdsZSB0byB0aGlzIHRpbGUncyBkaXJ0eSByZWN0YW5nbGUuCi0g
ICAgICAgICAgICBJbnRQb2ludCBwYWludE9mZnNldChzb3VyY2VSZWN0LngoKSAtIHBhaW50UmVj
dC54KCksIHNvdXJjZVJlY3QueSgpIC0gcGFpbnRSZWN0LnkoKSk7CisgICAgICAgICAgICBJbnRQ
b2ludCBwYWludE9mZnNldChzb3VyY2VSZWN0LngoKSAtIG1fcGFpbnRSZWN0LngoKSwgc291cmNl
UmVjdC55KCkgLSBtX3BhaW50UmVjdC55KCkpOwogICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0
LngoKSA8IDApCiAgICAgICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgICAgIGlmIChwYWlu
dE9mZnNldC55KCkgPCAwKQogICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBp
ZiAocGFpbnRPZmZzZXQueCgpICsgZGVzdFJlY3Qud2lkdGgoKSA+IHBhaW50UmVjdC53aWR0aCgp
KQorICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LngoKSArIGRlc3RSZWN0LndpZHRoKCkgPiBt
X3BhaW50UmVjdC53aWR0aCgpKQogICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAg
ICBpZiAocGFpbnRPZmZzZXQueSgpICsgZGVzdFJlY3QuaGVpZ2h0KCkgPiBwYWludFJlY3QuaGVp
Z2h0KCkpCisgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueSgpICsgZGVzdFJlY3QuaGVpZ2h0
KCkgPiBtX3BhaW50UmVjdC5oZWlnaHQoKSkKICAgICAgICAgICAgICAgICBDUkFTSCgpOwogCiAg
ICAgICAgICAgICB0aWxlLT50ZXh0dXJlKCktPmJpbmRUZXh0dXJlKCk7Ci0KICAgICAgICAgICAg
IGNvbnN0IEdDM0RpbnQgZmlsdGVyID0gbV90aWxpbmdEYXRhLmJvcmRlclRleGVscygpID8gR3Jh
cGhpY3NDb250ZXh0M0Q6OkxJTkVBUiA6IEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUOwogICAg
ICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIs
IGZpbHRlcikpOwogICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01BR19GSUxURVIsIGZpbHRlcikpOwogCi0gICAgICAgICAgICBpZiAobV91c2VNYXBTdWJG
b3JVcGxvYWRzKSB7Ci0gICAgICAgICAgICAgICAgLy8gVXBsb2FkIHRpbGUgZGF0YSB2aWEgYSBt
YXBwZWQgdHJhbnNmZXIgYnVmZmVyCi0gICAgICAgICAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21p
dW0qIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKSk7Ci0gICAgICAgICAgICAgICAgdWludDhfdCogcGl4ZWxEZXN0
ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGV4dGVuc2lvbnMtPm1hcFRleFN1YkltYWdlMkRDSFJP
TUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgZGVzdFJlY3QueCgpLCBkZXN0
UmVjdC55KCksIGRlc3RSZWN0LndpZHRoKCksIGRlc3RSZWN0LmhlaWdodCgpLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIEV4dGVuc2lv
bnMzRENocm9taXVtOjpXUklURV9PTkxZKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBpeGVs
RGVzdCk7Ci0gICAgICAgICAgICAgICAgaWYgKHBhaW50UmVjdC53aWR0aCgpID09IHNvdXJjZVJl
Y3Qud2lkdGgoKSAmJiAhcGFpbnRPZmZzZXQueCgpKQotICAgICAgICAgICAgICAgICAgICBtZW1j
cHkocGl4ZWxEZXN0LCAmcGFpbnRQaXhlbHNbNCAqIHBhaW50T2Zmc2V0LnkoKSAqIHBhaW50UmVj
dC53aWR0aCgpXSwgcGFpbnRSZWN0LndpZHRoKCkgKiBkZXN0UmVjdC5oZWlnaHQoKSAqIDQpOwot
ICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBTdHJpZGVzIG5v
dCBlcXVhbCwgc28gZG8gYSByb3ctYnktcm93IG1lbWNweSBmcm9tIHRoZQotICAgICAgICAgICAg
ICAgICAgICAvLyBwYWludCByZXN1bHRzIGludG8gdGhlIHBpeGVsRGVzdAotICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBkZXN0UmVjdC5oZWlnaHQoKTsgKytyb3cp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJnBpeGVsRGVzdFtkZXN0UmVjdC53aWR0
aCgpICogNCAqIHJvd10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhaW50UGl4
ZWxzWzQgKiAocGFpbnRPZmZzZXQueCgpICsgKHBhaW50T2Zmc2V0LnkoKSArIHJvdykgKiBwYWlu
dFJlY3Qud2lkdGgoKSldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0
LndpZHRoKCkgKiA0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZXh0ZW5z
aW9ucy0+dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0ocGl4ZWxEZXN0KTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogcGl4ZWxTb3VyY2U7Ci0g
ICAgICAgICAgICAgICAgaWYgKHBhaW50UmVjdC53aWR0aCgpID09IHNvdXJjZVJlY3Qud2lkdGgo
KSAmJiAhcGFpbnRPZmZzZXQueCgpKQotICAgICAgICAgICAgICAgICAgICBwaXhlbFNvdXJjZSA9
ICZwYWludFBpeGVsc1s0ICogcGFpbnRPZmZzZXQueSgpICogcGFpbnRSZWN0LndpZHRoKCldOwot
ICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBTdHJpZGVzIG5v
dCBlcXVhbCwgc28gZG8gYSByb3ctYnktcm93IG1lbWNweSBmcm9tIHRoZQotICAgICAgICAgICAg
ICAgICAgICAvLyBwYWludCByZXN1bHRzIGludG8gYSB0ZW1wIGJ1ZmZlciBmb3IgdXBsb2FkaW5n
LgotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBkZXN0UmVjdC5o
ZWlnaHQoKTsgKytyb3cpCi0gICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJm1fdGlsZVBp
eGVsc1tkZXN0UmVjdC53aWR0aCgpICogNCAqIHJvd10sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJnBhaW50UGl4ZWxzWzQgKiAocGFpbnRPZmZzZXQueCgpICsgKHBhaW50T2Zmc2V0
LnkoKSArIHJvdykgKiBwYWludFJlY3Qud2lkdGgoKSldLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSZWN0LndpZHRoKCkgKiA0KTsKLQotICAgICAgICAgICAgICAgICAgICBw
aXhlbFNvdXJjZSA9ICZtX3RpbGVQaXhlbHNbMF07Ci0gICAgICAgICAgICAgICAgfQotCi0KLSAg
ICAgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCksIGRl
c3RSZWN0LndpZHRoKCksIGRlc3RSZWN0LmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHBpeGVsU291cmNlKSk7Ci0gICAg
ICAgICAgICB9Ci0KKyAgICAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXItPnVwZGF0ZVRleHR1cmVS
ZWN0KHRpbGUtPnRleHR1cmUoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOwogICAgICAgICAgICAg
dGlsZS0+Y2xlYXJEaXJ0eSgpOwogICAgICAgICB9CiAgICAgfQpAQCAtNDMwLDcgKzM2NSwxMiBA
QCB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6ZHJhdyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYQogICAgICAgICAgICAgZmxvYXQgdGV4VHJhbnNsYXRl
WSA9IHRleE9mZnNldC55KCkgLyB0aWxlSGVpZ2h0OwogICAgICAgICAgICAgZmxvYXQgdGV4U2Nh
bGVYID0gdGlsZVJlY3Qud2lkdGgoKSAvIHRpbGVXaWR0aDsKICAgICAgICAgICAgIGZsb2F0IHRl
eFNjYWxlWSA9IHRpbGVSZWN0LmhlaWdodCgpIC8gdGlsZUhlaWdodDsKLQorICAgICAgICAgICAg
Ly8gT3BlbkdMIGNvb3JkaW5hdGUgc3lzdGVtIGlzIGJvdHRvbS11cC4KKyAgICAgICAgICAgIC8v
IElmIHRpbGUgdGV4dHVyZSBpcyB0b3AtZG93biwgd2UgbmVlZCB0byBmbGlwIHRoZSB0ZXh0dXJl
IGNvb3JkaW5hdGVzLgorICAgICAgICAgICAgaWYgKG1fdGV4dHVyZVVwZGF0ZXItPm9yaWVudGF0
aW9uKCkgPT0gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VG9wRG93bk9yaWVudGF0aW9uKSB7CisgICAg
ICAgICAgICAgICAgdGV4VHJhbnNsYXRlWSArPSAxLjA7CisgICAgICAgICAgICAgICAgdGV4U2Nh
bGVZICo9IC0xLjA7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBkcmF3VGV4dHVyZWRRdWFk
KGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCB0aWxlTWF0cml4
LCB0aWxlUmVjdC53aWR0aCgpLCB0aWxlUmVjdC5oZWlnaHQoKSwgb3BhY2l0eSwgdGV4VHJhbnNs
YXRlWCwgdGV4VHJhbnNsYXRlWSwgdGV4U2NhbGVYLCB0ZXhTY2FsZVksIHByb2dyYW0pOwogICAg
ICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaAppbmRleCAwZjc1NTgzZjFk
MWIwNDA1ZTM5YTA5MmE0NzJmOTc5MWJlNzU5NjhlLi44MDU1YWNhNTRiMmZkNTI0NWI2NjRkYzU3
Y2ExMTg4ODg1ZWJmNTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaApAQCAtMzEsMjgg
KzMxLDIyIEBACiAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJU
ZXh0dXJlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1DYW52YXMuaCIKICNpbmNsdWRlICJUaWxpbmdE
YXRhLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KLSNpbmNsdWRlIDx3dGYvT3duQXJy
YXlQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOwotCi1jbGFzcyBUaWxlUGFpbnRJbnRlcmZhY2UgewotcHVibGljOgotICAgIHZpcnR1YWwg
dm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0KSA9IDA7Ci19OworY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlcjsKIAogY2xhc3MgTGF5
ZXJUaWxlckNocm9taXVtIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMYXllclRpbGVyQ2hy
b21pdW0pOwogcHVibGljOgogICAgIGVudW0gQm9yZGVyVGV4ZWxPcHRpb24geyBIYXNCb3JkZXJU
ZXhlbHMsIE5vQm9yZGVyVGV4ZWxzIH07CiAKLSAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclRp
bGVyQ2hyb21pdW0+IGNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCBJbnRTaXpl
JiB0aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRpb24pOworICAgIHN0YXRpYyBQYXNzT3duUHRyPExh
eWVyVGlsZXJDaHJvbWl1bT4gY3JlYXRlKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIFBhc3NPd25Q
dHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4sIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJU
ZXhlbE9wdGlvbik7CiAKICAgICB+TGF5ZXJUaWxlckNocm9taXVtKCk7CiAKQEAgLTYwLDE2ICs1
NCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCk7CiAgICAgdm9pZCBpbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsKIAotICAgIC8v
IFBhaW50IGFsbCBpbnZhbGlkYXRpb25zIGFuZCBtaXNzaW5nIHRpbGVzIG5lZWRlZCB0byBkcmF3
IHRoZSBjb250ZW50UmVjdAotICAgIC8vIGludG8gdGhlIGludGVybmFsIGNhbnZhcy4KLSAgICB2
b2lkIHVwZGF0ZShUaWxlUGFpbnRJbnRlcmZhY2UmIHBhaW50ZXIsIGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0KTsKLQotICAgIC8vIFJlc2VydmUgYW5kIHVwbG9hZCB0aWxlIHRleHR1cmVzIGZy
b20gdGhlIGludGVybmFsIGNhbnZhcy4KLSAgICB2b2lkIHVwbG9hZENhbnZhcygpOwotCi0gICAg
Ly8gUmVzZXJ2ZSBhbmQgdXBsb2FkIHRpbGUgdGV4dHVyZXMgZnJvbSBhbiBleHRlcm5hbGx5IHBh
aW50ZWQgYnVmZmVyLgotICAgIHZvaWQgdXBkYXRlRnJvbVBpeGVscyhjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCwgY29uc3QgSW50UmVjdCYgcGFpbnRSZWN0LCBjb25zdCB1aW50OF90KiBwaXhl
bHMpOwotCisgICAgLy8gUHJlcGFyZSBkYXRhIG5lZWRlZCB0byB1cGRhdGUgdGV4dHVyZXMgdGhh
dCBpbnN0ZXJzZWN0IHdpdGggY29udGVudFJlY3QuCisgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGUo
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworICAgIC8vIFVwZGF0ZSBpbnZhbGlkIHRleHR1
cmVzIHRoYXQgaW50ZXJzZWN0IHdpdGggY29udGVudFJlY3QgcHJvdmlkZWQgaW4gcHJlcGFyZVRv
VXBkYXRlKCkuCisgICAgdm9pZCB1cGRhdGVSZWN0KCk7CiAgICAgLy8gRHJhdyBhbGwgdGlsZXMg
dGhhdCBpbnRlcnNlY3Qgd2l0aCB0aGUgY29udGVudCByZWN0LgogICAgIHZvaWQgZHJhdyhjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9h
dCBvcGFjaXR5KTsKIApAQCAtNzcsNyArNjUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMYXll
clBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbik7CiAgICAgLy8gQ2hhbmdlIHRoZSB0
aWxlIHNpemUuICBUaGlzIG1heSBpbnZhbGlkYXRlIGFsbCB0aGUgZXhpc3RpbmcgdGlsZXMuCiAg
ICAgdm9pZCBzZXRUaWxlU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKTsKLSAgICB2b2lkIHNldExh
eWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CiAKICAgICBib29sIHNraXBzRHJh
dygpIGNvbnN0IHsgcmV0dXJuIG1fc2tpcHNEcmF3OyB9CiAKQEAgLTg3LDEyICs3NCwxMiBAQCBw
dWJsaWM6CiAgICAgTGF5ZXJUZXh0dXJlKiBnZXRTaW5nbGVUZXh0dXJlKCk7CiAKIHByaXZhdGU6
Ci0gICAgTGF5ZXJUaWxlckNocm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IElu
dFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbik7CisgICAgTGF5ZXJUaWxlckNocm9t
aXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRl
cj4sIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbik7CiAKICAgICBj
bGFzcyBUaWxlIDogcHVibGljIFJlZkNvdW50ZWQ8VGlsZT4gewogICAgICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShUaWxlKTsKICAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IFRpbGUoUGFz
c093blB0cjxMYXllclRleHR1cmU+IHRleCkgOiBtX3RleCh0ZXgpLCBtX2koLTEpLCBtX2ooLTEp
IHt9CisgICAgICAgIGV4cGxpY2l0IFRpbGUoUGFzc093blB0cjxMYXllclRleHR1cmU+IHRleCkg
OiBtX3RleCh0ZXgpLCBtX2koLTEpLCBtX2ooLTEpIHsgfQogCiAgICAgICAgIExheWVyVGV4dHVy
ZSogdGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4LmdldCgpOyB9CiAKQEAgLTE1NywxOSArMTQ0LDEz
IEBAIHByaXZhdGU6CiAgICAgLy8gVGlnaHRseSBwYWNrZWQgc2V0IG9mIHVudXNlZCB0aWxlcy4K
ICAgICBWZWN0b3I8UmVmUHRyPFRpbGU+ID4gbV91bnVzZWRUaWxlczsKIAotICAgIC8vIFN0YXRl
IGhlbGQgYmV0d2VlbiB1cGRhdGUgYW5kIHVwbG9hZENhbnZhcy4KKyAgICAvLyBTdGF0ZSBoZWxk
IGJldHdlZW4gdXBkYXRlIGFuZCB1cGxvYWQuCiAgICAgSW50UmVjdCBtX3BhaW50UmVjdDsKICAg
ICBJbnRSZWN0IG1fdXBkYXRlUmVjdDsKLSAgICBQbGF0Zm9ybUNhbnZhcyBtX2NhbnZhczsKLQot
ICAgIC8vIENhY2hlIGEgdGlsZS1zaXplZCBwaXhlbCBidWZmZXIgdG8gZHJhdyBpbnRvLgotICAg
IE93bkFycmF5UHRyPHVpbnQ4X3Q+IG1fdGlsZVBpeGVsczsKIAogICAgIFRpbGluZ0RhdGEgbV90
aWxpbmdEYXRhOwogCi0gICAgLy8gV2hldGhlciB0aGUgdGlsZXIgd2lsbCB1c2UgR0xfQ0hST01J
VU1fbWFwX3N1YiBmb3IgdGV4dHVyZSB1cGxvYWRzLgotICAgIGJvb2wgbV91c2VNYXBTdWJGb3JV
cGxvYWRzOwotCisgICAgT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IG1fdGV4dHVyZVVwZGF0
ZXI7CiAgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0hlYWRzVXBEaXNwbGF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCmluZGV4IDFiNDRiMTg1M2JhMTQ3MDhiNzMy
ZGFlMWEzMWM4MDdiYzhlNzI2MTAuLjY4MjE5OTEzMGU2OTJhMDJjODNkYWUwMjMzN2ExMTU1ZmFh
ZTgyNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCkBAIC0zNCw2ICszNCw3
IEBACiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyVGV4dHVyZS5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
Q2FudmFzLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIK
ICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgpAQCAtMTE1LDcgKzExNiw3IEBAIHZvaWQgQ0NI
ZWFkc1VwRGlzcGxheTo6ZHJhdygpCiAgICAgICAgICAgICBtZW1jcHkocGl4ZWxEZXN0LCBsb2Nr
ZXIucGl4ZWxzKCksIGh1ZFNpemUud2lkdGgoKSAqIGh1ZFNpemUuaGVpZ2h0KCkgKiA0KTsKICAg
ICAgICAgICAgIGV4dGVuc2lvbnMtPnVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKHBpeGVsRGVz
dCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgR0xDKGNvbnRleHQuZ2V0KCksIGNvbnRl
eHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBjYW52YXMuc2l6ZSgpLndpZHRoKCksIGNhbnZhcy5zaXplKCkuaGVp
Z2h0KCksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSwgbG9ja2VyLnBpeGVscygpKSk7CisgICAgICAgICAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEsIGNhbnZhcy5zaXplKCkud2lkdGgoKSwgY2FudmFzLnNpemUo
KS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFLCBsb2NrZXIucGl4ZWxzKCkpKTsKICAgICB9CiAKICAgICAvLyBEcmF3
IHRoZSBIVUQgb250byB0aGUgZGVmYXVsdCByZW5kZXIgc3VyZmFjZS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKaW5kZXggMjYyZmE1YWQ4NmRjMzIzMmJhZDNjNmI2YjM2Mjk4MmVhNmFhNGRhOC4u
MGUyY2YxMmFkZGEzYTdlNDY4YTVjZmQyNDYwOTI5ZDU1MjQxZDgzMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0wNS0xOCAgQWxvayBQcml5YWRhcnNo
aSAgPGFsb2twQGNocm9taXVtLm9yZz4KKyAgICAgICAgICAgIEFkcmllbm5lIFdhbGtlciAgPGVu
bmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBTcGxpdCBjYW52YXMgZnJvbSBMYXllclRpbGVyQ2hyb21pdW0KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNzE5CisKKyAgICAgICAgKiBz
cmMvV2ViVmlld0ltcGwuY3BwOgorCiAyMDExLTA1LTE3ICBNaWtoYWlsIE5hZ2Fub3YgIDxtbmFn
YW5vdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCA3OWFkODcz
N2E2MjAzYzY4OWJjYmNhNjQyNjUwNjQxY2Q0NGZlNWY0Li4xNWRkMjlhMDdjMDY1MjhiZjBmYmMx
ZGJkMTFkOWQ1YTAwMGI3NGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwCkBAIC03Miw2ICs3Miw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50
LmgiCisjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGFn
ZS5oIgpAQCAtMjQwOSw3ICsyNDEwLDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZVJv
b3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBzZXRSb290TGF5ZXJOZWVkc0Rp
c3BsYXkoKTsKIH0KIAotY2xhc3MgV2ViVmlld0ltcGxDb250ZW50UGFpbnRlciA6IHB1YmxpYyBU
aWxlUGFpbnRJbnRlcmZhY2UgeworY2xhc3MgV2ViVmlld0ltcGxDb250ZW50UGFpbnRlciA6IHB1
YmxpYyBMYXllclBhaW50ZXJDaHJvbWl1bSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2Vi
Vmlld0ltcGxDb250ZW50UGFpbnRlcik7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8
V2ViVmlld0ltcGxDb250ZW50UGFpbnRlcio+IGNyZWF0ZShXZWJWaWV3SW1wbCogd2ViVmlld0lt
cGwpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93993</attachid>
            <date>2011-05-18 15:49:48 -0700</date>
            <delta_ts>2011-05-18 15:58:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60719-20110518154947.patch</filename>
            <type>text/plain</type>
            <size>59704</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODY3OTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0ZDRmYjk4MjM2Y2MyY2Mx
ZmE0NzVlMjU4NjJlMzJkMzg0ZTZlOGQwLi5kYzA3M2IzMjFhZDIxN2FkMTMyMWM2MmNlYjFkZTdm
MzE1M2FjOThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIgQEAKKzIwMTEtMDUtMTggIEFsb2sg
UHJpeWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+IGFuZCBBZHJpZW5uZSBXYWxrZXIgIDxl
bm5lQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW2Nocm9taXVtXSBTcGxpdCBjYW52YXMgZnJvbSBMYXllclRpbGVyQ2hyb21pdW0K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNzE5CisK
KyAgICAgICAgTGF5ZXJUaWxlckNocm9taXVtIG5vdyBqdXN0IGRvZXMgdGlsaW5nLiBJdCBkZWxl
Z2F0ZXMgdGhlIHRhc2sgb2YgcGFpbnRpbmcgYW5kIHVwZGF0aW5nIHRleHR1cmVzIHRvIExheWVy
VGV4dHVyZVVwZGF0ZXIuCisgICAgICAgIEFsc28gYWJzdHJhY3RlZCBMYXllclRleHR1cmVTdWJJ
bWFnZSB0byB1cGxvYWQgdGV4dHVyZSBwaXhlbHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vVHJhY2VFdmVudC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXllckNocm9taXVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjp+Q29udGVudExheWVyQ2hyb21pdW0p
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJ
ZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjbGVhbnVw
UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpzZXRM
YXllclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpj
cmVhdGVUZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJv
bWl1bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9t
aXVtOjpjcmVhdGVUaWxlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXll
ckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OkltYWdlTGF5ZXJUZXh0dXJlVXBk
YXRlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6On5JbWFn
ZUxheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllclRleHR1
cmVVcGRhdGVyOjpvcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyVGV4
dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxh
eWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6aW1hZ2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1
bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUGFpbnRlckNo
cm9taXVtLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jvb3RMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERyYXdMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVTdWJJbWFnZTo6TGF5ZXJU
ZXh0dXJlU3ViSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlU3ViSW1hZ2U6
On5MYXllclRleHR1cmVTdWJJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVT
dWJJbWFnZTo6c2V0U3ViSW1hZ2VTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVy
ZVN1YkltYWdlOjp1cGxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlU3ViSW1h
Z2U6OnVwbG9hZFdpdGhUZXhTdWJJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1
cmVTdWJJbWFnZTo6dXBsb2FkV2l0aE1hcFRleFN1YkltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UcmFjZUV2ZW50LmguCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UcmFjZUV2ZW50LmguCisgICAg
ICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyOjpMYXllclRleHR1cmVVcGRhdGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXI6On5MYXllclRleHR1cmVVcGRh
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXI6OmNvbnRleHQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJD
YW52YXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJD
YW52YXM6OkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUZXh0dXJlVXBkYXRlckNhbnZhczo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpMYXllclRleHR1cmVVcGRhdGVyQml0bWFwKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnByZXBhcmVUb1Vw
ZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjp1cGRh
dGVUZXh0dXJlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
VGV4dHVyZVVwZGF0ZXJDYW52YXM6On5MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6OmNvbnRlbnRSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6On5MYXllclRleHR1cmVV
cGRhdGVyQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJCaXRt
YXA6Om9yaWVudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRpbGVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9t
aXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpMYXll
clRpbGVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpz
ZXRUaWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnByZXBh
cmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0
ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpkcmF3KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6VGlsZTo6VGlsZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KToKKwogMjAxMS0wNS0x
NyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRl
IHRoZSB0aGUgY29udGV4dCBtZW51IHRvIHJlZmxlY3QgdGhlIHN5c3RlbSBzZWFyY2ggcHJvdmlk
ZXIgb24gTWFjLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDNkZjYzM2IxZjViODQzYzUwMWRhOTQ5YjY3
NjFjYzgxMGZhMTRhNWIuLjllMTM2ODM3MDQ2MTFhYjFmM2RlZjZhYzg3Y2ZkOWE3ZDc0ODFjYmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKQEAgLTQwNDAsMTAgKzQwNDAsMTYgQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJQYWludGVyQ2hyb21p
dW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmgnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJl
VXBkYXRlckNhbnZhcy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJpdmF0ZUNocm9t
aXVtLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vVHJh
Y2VFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vVHJhY2VFdmVudC5o
CmluZGV4IGZmOGZiZWNkOTMwNWZmYTQ5ZWRkODdkMWVkMTY1M2ZmY2E4M2FiMTcuLmMyM2YyODQw
MjY2M2ZiMDkwYWZkNzY0ZWM2YzJhMjFlYzdjMjJlMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1RyYWNlRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9UcmFjZUV2ZW50LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNkZWZpbmUg
VHJhY2VFdmVudF9oCiAKICNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgorI2luY2x1ZGUgPHd0
Zi9Pd25BcnJheVB0ci5oPgogCiAvLyBJbXBsZW1lbnRhdGlvbiBkZXRhaWw6IHRyYWNlIGV2ZW50
IG1hY3JvcyBjcmVhdGUgdGVtcG9yYXJ5IHZhcmlhYmxlcwogLy8gdG8ga2VlcCBpbnN0cnVtZW50
YXRpb24gb3ZlcmhlYWQgbG93LiBUaGVzZSBtYWNyb3MgZ2l2ZSBlYWNoIHRlbXBvcmFyeQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVu
dExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDNlMmViODM5YzFkMjdiM2ZjY2Nk
N2M2Mjk4MzA2ODdhOTE0ODc3ZGQuLjk0YzcyZTgxMDMyY2IxMTg0ZWNiOGYwMDU3OTA5ZjViYmI2
ZDM4MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM2LDggKzM2
LDExIEBACiAKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCisjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclRleHR1cmUuaCIKKyNp
bmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgiCisjaW5jbHVkZSAiTGF5ZXJUaWxl
ckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAi
VGV4dFN0cmVhbS5oIgogCkBAIC01MSwyNCArNTQsNyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW0+
IENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25l
cikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbnRlbnRMYXllckNocm9taXVtKG93bmVy
KSk7Ci19Ci0KLUNvbnRlbnRMYXllckNocm9taXVtOjpDb250ZW50TGF5ZXJDaHJvbWl1bShHcmFw
aGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQotICAgIDogTGF5ZXJDaHJvbWl1bShvd25lcikKLSAg
ICAsIG1fdGlsaW5nT3B0aW9uKENvbnRlbnRMYXllckNocm9taXVtOjpBdXRvVGlsZSkKLXsKLX0K
LQotQ29udGVudExheWVyQ2hyb21pdW06On5Db250ZW50TGF5ZXJDaHJvbWl1bSgpCi17Ci0gICAg
bV90aWxlci5jbGVhcigpOwotICAgIExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKTsK
LX0KLQotY2xhc3MgQ29udGVudExheWVyUGFpbnRlciA6IHB1YmxpYyBUaWxlUGFpbnRJbnRlcmZh
Y2UgeworY2xhc3MgQ29udGVudExheWVyUGFpbnRlciA6IHB1YmxpYyBMYXllclBhaW50ZXJDaHJv
bWl1bSB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ29udGVudExheWVyUGFpbnRlcihHcmFwaGlj
c0xheWVyQ2hyb21pdW0qIG93bmVyKQogICAgICAgICA6IG1fb3duZXIob3duZXIpCkBAIC04NSwx
NCArNzEsMjcgQEAgcHJpdmF0ZToKICAgICBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG1fb3duZXI7
CiB9OwogCitQYXNzUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtPiBDb250ZW50TGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDb250ZW50TGF5ZXJDaHJvbWl1bShvd25lcikpOworfQorCitDb250ZW50
TGF5ZXJDaHJvbWl1bTo6Q29udGVudExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVt
KiBvd25lcikKKyAgICA6IExheWVyQ2hyb21pdW0ob3duZXIpCisgICAgLCBtX3RpbGluZ09wdGlv
bihDb250ZW50TGF5ZXJDaHJvbWl1bTo6QXV0b1RpbGUpCit7Cit9CisKK0NvbnRlbnRMYXllckNo
cm9taXVtOjp+Q29udGVudExheWVyQ2hyb21pdW0oKQoreworICAgIGNsZWFudXBSZXNvdXJjZXMo
KTsKK30KKwogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHko
Y29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QpCiB7CiAgICAgQVNTRVJUKGRyYXdzQ29u
dGVudCgpKTsKICAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKIAotICAgIGNyZWF0ZVRpbGVy
SWZOZWVkZWQoKTsKLQotICAgIENvbnRlbnRMYXllclBhaW50ZXIgcGFpbnRlcihtX293bmVyKTsK
ICAgICB1cGRhdGVMYXllclNpemUobGF5ZXJCb3VuZHMoKS5zaXplKCkpOwogCiAgICAgSW50UmVj
dCBsYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KHRhcmdldFN1cmZhY2VSZWN0KTsKQEAgLTEw
MywxNSArMTAyLDI2IEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJ
ZkRpcnR5KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0CiAgICAgZGlydHkuaW50ZXJz
ZWN0KGxheWVyQm91bmRzKCkpOwogICAgIG1fdGlsZXItPmludmFsaWRhdGVSZWN0KGRpcnR5KTsK
IAotICAgIG1fdGlsZXItPnVwZGF0ZShwYWludGVyLCBsYXllclJlY3QpOworICAgIG1fdGlsZXIt
PnByZXBhcmVUb1VwZGF0ZShsYXllclJlY3QpOwogICAgIG1fZGlydHlSZWN0ID0gRmxvYXRSZWN0
KCk7CiB9CiAKK3ZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQor
eworICAgIG1fdGlsZXIuY2xlYXIoKTsKKyAgICBMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3Vy
Y2VzKCk7Cit9CisKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVyZXIo
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQogewogICAgIExheWVyQ2hyb21p
dW06OnNldExheWVyUmVuZGVyZXIobGF5ZXJSZW5kZXJlcik7CiAgICAgY3JlYXRlVGlsZXJJZk5l
ZWRlZCgpOwotICAgIG1fdGlsZXItPnNldExheWVyUmVuZGVyZXIobGF5ZXJSZW5kZXJlcik7Cit9
CisKK1Bhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gQ29udGVudExheWVyQ2hyb21pdW06
OmNyZWF0ZVRleHR1cmVVcGRhdGVyKCkKK3sKKyAgICBPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21p
dW0+IHBhaW50ZXIgPSBhZG9wdFB0cihuZXcgQ29udGVudExheWVyUGFpbnRlcihtX293bmVyKSk7
CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwKGxheWVy
UmVuZGVyZXJDb250ZXh0KCksIHBhaW50ZXIucmVsZWFzZSgpLCBsYXllclJlbmRlcmVyKCktPmNv
bnRleHRTdXBwb3J0c01hcFN1YigpKSk7CiB9CiAKIFRyYW5zZm9ybWF0aW9uTWF0cml4IENvbnRl
bnRMYXllckNocm9taXVtOjp0aWxpbmdUcmFuc2Zvcm0oKQpAQCAtMTg2LDE2ICsxOTYsMjYgQEAg
dm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhdyhjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJm
YWNlUmVjdCkKICAgICAgICAgbV90aWxlci0+ZHJhdyhsYXllclJlY3QsIHRyYW5zZm9ybSwgY2NM
YXllckltcGwoKS0+ZHJhd09wYWNpdHkoKSk7CiB9CiAKK2Jvb2wgQ29udGVudExheWVyQ2hyb21p
dW06OmRyYXdzQ29udGVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb3duZXIgJiYgbV9vd25l
ci0+ZHJhd3NDb250ZW50KCkgJiYgKCFtX3RpbGVyIHx8ICFtX3RpbGVyLT5za2lwc0RyYXcoKSk7
Cit9CisKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZVRpbGVySWZOZWVkZWQoKQog
ewogICAgIGlmIChtX3RpbGVyKQogICAgICAgICByZXR1cm47Ci0gICAgbV90aWxlciA9IExheWVy
VGlsZXJDaHJvbWl1bTo6Y3JlYXRlKGxheWVyUmVuZGVyZXIoKSwgSW50U2l6ZShkZWZhdWx0VGls
ZVNpemUsIGRlZmF1bHRUaWxlU2l6ZSksIExheWVyVGlsZXJDaHJvbWl1bTo6SGFzQm9yZGVyVGV4
ZWxzKTsKKworICAgIG1fdGlsZXIgPSBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSgKKyAgICAg
ICAgbGF5ZXJSZW5kZXJlcigpLAorICAgICAgICBjcmVhdGVUZXh0dXJlVXBkYXRlcigpLAorICAg
ICAgICBJbnRTaXplKGRlZmF1bHRUaWxlU2l6ZSwgZGVmYXVsdFRpbGVTaXplKSwKKyAgICAgICAg
TGF5ZXJUaWxlckNocm9taXVtOjpIYXNCb3JkZXJUZXhlbHMpOwogfQogCiB2b2lkIENvbnRlbnRM
YXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkKIHsKLSAgICBtX3RpbGVy
LT51cGxvYWRDYW52YXMoKTsKKyAgICBtX3RpbGVyLT51cGRhdGVSZWN0KCk7CiB9CiAKIHZvaWQg
Q29udGVudExheWVyQ2hyb21pdW06OnNldFRpbGluZ09wdGlvbihUaWxpbmdPcHRpb24gb3B0aW9u
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKaW5kZXggYWI1NDg1ZmI3Y2U5MTZmZmYy
NTVmNGY1ZDQ1MGJmYTUzNDA0NjliNS4uY2IyZTFmYjQyMTE1NWEyNzE4YjE2MGExM2E4NWNhNTY2
ZGU0MWIzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCkBAIC0zNSwxMiArMzUs
MTIgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJMYXll
ckNocm9taXVtLmgiCi0jaW5jbHVkZSAiTGF5ZXJUaWxlckNocm9taXVtLmgiCi0jaW5jbHVkZSAi
VGV4dHVyZU1hbmFnZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMYXllclRl
eHR1cmU7CitjbGFzcyBMYXllclRpbGVyQ2hyb21pdW07CitjbGFzcyBMYXllclRleHR1cmVVcGRh
dGVyOwogCiAvLyBBIExheWVyIHRoYXQgcmVxdWlyZXMgYSBHcmFwaGljc0NvbnRleHQgdG8gcmVu
ZGVyIGl0cyBjb250ZW50cy4KIGNsYXNzIENvbnRlbnRMYXllckNocm9taXVtIDogcHVibGljIExh
eWVyQ2hyb21pdW0gewpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGJpbmRDb250ZW50c1RleHR1cmUoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3KGNvbnN0IElu
dFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0KTsKLSAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50
KCkgY29uc3QgeyByZXR1cm4gbV9vd25lciAmJiBtX293bmVyLT5kcmF3c0NvbnRlbnQoKSAmJiAo
IW1fdGlsZXIgfHwgIW1fdGlsZXItPnNraXBzRHJhdygpKTsgfQorICAgIHZpcnR1YWwgYm9vbCBk
cmF3c0NvbnRlbnQoKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENvbnRlbnRM
YXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwpAQCAtNjYsOCArNjYs
MTEgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJp
bmcoKSBjb25zdCB7IHJldHVybiAiQ29udGVudExheWVyIjsgfQogICAgIHZpcnR1YWwgdm9pZCBk
dW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKIAorICAg
IHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldExh
eWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CiAKKyAgICB2aXJ0dWFsIFBhc3NP
d25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gY3JlYXRlVGV4dHVyZVVwZGF0ZXIoKTsKKwogICAg
IHZpcnR1YWwgSW50UmVjdCBsYXllckJvdW5kcygpIGNvbnN0OwogCiAgICAgdmlydHVhbCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB0aWxpbmdUcmFuc2Zvcm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hy
b21pdW0uY3BwCmluZGV4IGIwYjcwNTNiNWYzMDE2NzM2YTFlY2FhMzExYzZiMjA2NTE2Y2Q4ZjMu
LjFiM2NmNTE0YTU3NWU3ZDE0MDViOWM5YjI1ZGZmNTc2ZTc3OGRhM2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VMYXllckNocm9taXVtLmNwcApAQCAtMzgsOSArMzgsNTUgQEAKICNpbmNsdWRlICJJbWFnZS5o
IgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyVGV4
dHVyZS5oIgorI2luY2x1ZGUgIkxheWVyVGV4dHVyZVN1YkltYWdlLmgiCisjaW5jbHVkZSAiTGF5
ZXJUZXh0dXJlVXBkYXRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEltYWdl
TGF5ZXJUZXh0dXJlVXBkYXRlciA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyIHsKK3B1Ymxp
YzoKKyAgICBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsIGNvbnN0IFBsYXRmb3JtSW1hZ2UmIGltYWdlLCBib29sIHVzZU1hcFRleFN1YkltYWdlKQor
ICAgICAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXIoY29udGV4dCkKKyAgICAgICAgLCBtX2ltYWdl
KGltYWdlKQorICAgICAgICAsIG1fdGV4U3ViSW1hZ2UodXNlTWFwVGV4U3ViSW1hZ2UpCisgICAg
eworICAgIH0KKyAgICB2aXJ0dWFsIH5JbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXIoKSB7IH0KKwor
ICAgIHZpcnR1YWwgT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSB7IHJldHVybiBMYXllclRleHR1
cmVVcGRhdGVyOjpCb3R0b21VcE9yaWVudGF0aW9uOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJl
cGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0
aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscykKKyAgICB7CisgICAgICAgIG1fdGV4U3ViSW1hZ2Uu
c2V0U3ViSW1hZ2VTaXplKHRpbGVTaXplKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlVGV4dHVyZVJlY3QoTGF5ZXJUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKKyAgICB7CisgICAgICAgIHRleHR1cmUt
PmJpbmRUZXh0dXJlKCk7CisKKyAgICAgICAgLy8gU291cmNlIHJlY3Qgc2hvdWxkIG5ldmVyIGdv
IG91dHNpZGUgdGhlIGltYWdlIHBpeGVscywgZXZlbiBpZiB0aGlzCisgICAgICAgIC8vIGlzIHJl
cXVlc3RlZCBiZWNhdXNlIHRoZSB0ZXh0dXJlIGV4dGVuZHMgb3V0c2lkZSB0aGUgaW1hZ2UuCisg
ICAgICAgIEludFJlY3QgY2xpcHBlZFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OworICAgICAgICBj
bGlwcGVkU291cmNlUmVjdC5pbnRlcnNlY3QoaW1hZ2VSZWN0KCkpOworCisgICAgICAgIEludFJl
Y3QgY2xpcHBlZERlc3RSZWN0ID0gZGVzdFJlY3Q7CisgICAgICAgIGNsaXBwZWREZXN0UmVjdC5t
b3ZlKGNsaXBwZWRTb3VyY2VSZWN0LmxvY2F0aW9uKCkgLSBzb3VyY2VSZWN0LmxvY2F0aW9uKCkp
OworICAgICAgICBjbGlwcGVkRGVzdFJlY3Quc2V0U2l6ZShzb3VyY2VSZWN0LnNpemUoKSk7CisK
KyAgICAgICAgbV90ZXhTdWJJbWFnZS51cGxvYWQobV9pbWFnZS5waXhlbHMoKSwgaW1hZ2VSZWN0
KCksIGNsaXBwZWRTb3VyY2VSZWN0LCBjbGlwcGVkRGVzdFJlY3QsIGNvbnRleHQoKSk7CisgICAg
fQorCitwcml2YXRlOgorICAgIEludFJlY3QgaW1hZ2VSZWN0KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1faW1hZ2Uuc2l6ZSgpKTsKKyAg
ICB9CisKKyAgICAvLyBGSVhNRTogSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyIHNob3VsZCByYXRo
ZXIgb3duIGEgUGxhdGZvcm1JbWFnZSByYXRoZXIgdGhhbiBrZWVwaW5nIGEgcmVmZXJlbmNlLgor
ICAgIGNvbnN0IFBsYXRmb3JtSW1hZ2UmIG1faW1hZ2U7CisgICAgTGF5ZXJUZXh0dXJlU3ViSW1h
Z2UgbV90ZXhTdWJJbWFnZTsKK307CisKIFBhc3NSZWZQdHI8SW1hZ2VMYXllckNocm9taXVtPiBJ
bWFnZUxheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQog
ewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VMYXllckNocm9taXVtKG93bmVyKSk7CkBA
IC04MCwxMyArMTI2LDE4IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpwYWludENvbnRlbnRz
SWZEaXJ0eShjb25zdCBJbnRSZWN0JikKICAgICAgICAgICAgIG1fdGlsZXItPmludmFsaWRhdGVS
ZWN0KHBhaW50UmVjdCk7CiAgICAgICAgICAgICBtX2RpcnR5UmVjdCA9IEludFJlY3QoKTsKICAg
ICAgICAgfQorICAgICAgICBtX3RpbGVyLT5wcmVwYXJlVG9VcGRhdGUocGFpbnRSZWN0KTsKICAg
ICB9CiB9CiAKIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKCkKIHsKLSAgICBJbnRSZWN0IHBhaW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV9kZWNvZGVk
SW1hZ2Uuc2l6ZSgpKTsKLSAgICBtX3RpbGVyLT51cGRhdGVGcm9tUGl4ZWxzKHBhaW50UmVjdCwg
cGFpbnRSZWN0LCBtX2RlY29kZWRJbWFnZS5waXhlbHMoKSk7CisgICAgbV90aWxlci0+dXBkYXRl
UmVjdCgpOworfQorCitQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IEltYWdlTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIoKQoreworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKGxheWVyUmVuZGVyZXJDb250ZXh0KCksIG1fZGVj
b2RlZEltYWdlLCBsYXllclJlbmRlcmVyKCktPmNvbnRleHRTdXBwb3J0c01hcFN1YigpKSk7CiB9
CiAKIEludFJlY3QgSW1hZ2VMYXllckNocm9taXVtOjpsYXllckJvdW5kcygpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxh
eWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDhhYjc2YThiNjk3MmE2NzU4ZDA5N2MyNWY0MzEw
NzY0NzE1MWE1MjguLjEzZDA5YzJhYzU0YjgxYmNiYWM3ZWJkNmRiYzFlMGMyZDI3YjQyNDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCkBAIC01OSw2ICs1OSw3IEBAIHB1YmxpYzoKIHBy
b3RlY3RlZDoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gIkltYWdlTGF5ZXIiOyB9CiAKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8TGF5
ZXJUZXh0dXJlVXBkYXRlcj4gY3JlYXRlVGV4dHVyZVVwZGF0ZXIoKTsKICAgICB2aXJ0dWFsIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHRpbGluZ1RyYW5zZm9ybSgpOwogICAgIHZpcnR1YWwgSW50UmVj
dCBsYXllckJvdW5kcygpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclBhaW50ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJQYWludGVyQ2hyb21pdW0uaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42M2NlMmJkMWRkMmY2MmEzZDY4NTYxOThiMzVkZjkzMWEzYTA4MWVkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJQYWludGVyQ2hyb21pdW0uaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVm
IExheWVyUGFpbnRlckNocm9taXVtX2gKKyNkZWZpbmUgTGF5ZXJQYWludGVyQ2hyb21pdW1faAor
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEludFJlY3Q7CisKK2NsYXNzIExheWVy
UGFpbnRlckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpID0gMDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisjZW5kaWYgLy8gTGF5ZXJQYWludGVyQ2hyb21pdW1faAorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAppbmRleCAyMDg3NzdlZGUzZTQ4YzFmZGIwYmJhMDJiNGRmM2IzNDJi
ODY2ODUwLi43M2EwZDg0NWU0MTU0ZWFiNDY1MTI4MmMwOTM4NmQzZDRmZTcxZjllIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTQwLDcgKzQwLDkgQEAKICNpbmNs
dWRlICJHZW9tZXRyeUJpbmRpbmcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgog
I2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1
bS5oIgogI2luY2x1ZGUgIkxheWVyVGV4dHVyZS5oIgorI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVw
ZGF0ZXJDYW52YXMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlRl
eHRTdHJlYW0uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgpAQCAtOTQsNyArOTYsNyBA
QCBzdGF0aWMgYm9vbCBpc1NjYWxlT3JUcmFuc2xhdGlvbihjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbSkKIAogfQogCi1QYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dCwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWludCkKK1Bhc3NS
ZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0
ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBQYXNzT3duUHRyPExheWVy
UGFpbnRlckNocm9taXVtPiBjb250ZW50UGFpbnQpCiB7CiAgICAgaWYgKCFjb250ZXh0KQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTEwNywxMCArMTA5LDkgQEAgUGFzc1JlZlB0cjxMYXllclJlbmRl
cmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKFBhc3NSZWZQdHI8R3Jh
cGgKIH0KIAogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFz
c1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBj
b250ZW50UGFpbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBjb250ZW50UGFpbnQpCiAgICAgOiBt
X3ZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoLTEsIC0xKSkKICAgICAsIG1fcm9vdExh
eWVyKDApCi0gICAgLCBtX3Jvb3RMYXllckNvbnRlbnRQYWludChjb250ZW50UGFpbnQpCiAgICAg
LCBtX2N1cnJlbnRTaGFkZXIoMCkKICAgICAsIG1fY3VycmVudFJlbmRlclN1cmZhY2UoMCkKICAg
ICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQpAQCAtMTI2LDcgKzEyNyw5IEBAIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRlCiAgICAgaWYgKG1fY29udGV4dFN1cHBvcnRzTWFwU3ViKQogICAg
ICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfQ0hST01J
VU1fbWFwX3N1YiIpOwogICAgIG1faGFyZHdhcmVDb21wb3NpdGluZyA9IGluaXRpYWxpemVTaGFy
ZWRPYmplY3RzKCk7Ci0gICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXIgPSBMYXllclRpbGVyQ2hy
b21pdW06OmNyZWF0ZSh0aGlzLCBJbnRTaXplKDI1NiwgMjU2KSwgTGF5ZXJUaWxlckNocm9taXVt
OjpOb0JvcmRlclRleGVscyk7CisKKyAgICBPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gdGV4
dHVyZVVwZGF0ZXIgPSBhZG9wdFB0cihuZXcgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcChtX2Nv
bnRleHQuZ2V0KCksIGNvbnRlbnRQYWludCwgbV9jb250ZXh0U3VwcG9ydHNNYXBTdWIpKTsKKyAg
ICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlciA9IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKHRo
aXMsIHRleHR1cmVVcGRhdGVyLnJlbGVhc2UoKSwgSW50U2l6ZSgyNTYsIDI1NiksIExheWVyVGls
ZXJDaHJvbWl1bTo6Tm9Cb3JkZXJUZXhlbHMpOwogICAgIEFTU0VSVChtX3Jvb3RMYXllckNvbnRl
bnRUaWxlcik7CiAKICAgICBtX2hlYWRzVXBEaXNwbGF5ID0gQ0NIZWFkc1VwRGlzcGxheTo6Y3Jl
YXRlKHRoaXMpOwpAQCAtMTY2LDcgKzE2OSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjppbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyQ29udGVudHMoKQogewogICAg
IFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RMYXllckNvbnRl
bnRzIiwgdGhpcywgMCk7Ci0gICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPnVwZGF0ZSgqbV9y
b290TGF5ZXJDb250ZW50UGFpbnQsIG1fdmlld3BvcnRWaXNpYmxlUmVjdCk7CisgICAgbV9yb290
TGF5ZXJDb250ZW50VGlsZXItPnByZXBhcmVUb1VwZGF0ZShtX3ZpZXdwb3J0VmlzaWJsZVJlY3Qp
OwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jvb3RMYXllcigpCkBAIC0x
NzQsNyArMTc3LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSb290TGF5ZXIo
KQogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcm9sbDsKICAgICBzY3JvbGwudHJhbnNsYXRl
KC1tX3ZpZXdwb3J0VmlzaWJsZVJlY3QueCgpLCAtbV92aWV3cG9ydFZpc2libGVSZWN0LnkoKSk7
CiAKLSAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlci0+dXBsb2FkQ2FudmFzKCk7CiAgICAgbV9y
b290TGF5ZXJDb250ZW50VGlsZXItPmRyYXcobV92aWV3cG9ydFZpc2libGVSZWN0LCBzY3JvbGws
IDEuMGYpOwogfQogCkBAIC0yMTgsNyArMjIwLDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVwZGF0ZUFuZERyYXdMYXllcnMoKQogICAgIH0KIAogICAgIExheWVyTGlzdCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0OwotCiAgICAgdXBkYXRlTGF5ZXJzKHJlbmRlclN1cmZhY2VMYXllckxp
c3QpOwogCiAgICAgLy8gQmVmb3JlIGRyYXdMYXllcnM6CkBAIC0zMjIsNiArMzIzLDggQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyhMYXllckxpc3QmIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpCiAvLyAgfQogCiAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlc1Jl
Y3Vyc2l2ZShtX3Jvb3RMYXllci5nZXQoKSk7CisgICAgLy8gVXBkYXRlIGNvbXBvc2l0b3IgcmVz
b3VyY2VzIGZvciByb290IGxheWVyLgorICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyLT51cGRh
dGVSZWN0KCk7CiAKICAgICAvLyBBZnRlciB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJz
aXZlLCBzZXQvd2FpdCBsYXRjaGVzIGZvciBhbGwgY2hpbGQKICAgICAvLyBjb250ZXh0cy4gVGhp
cyB3aWxsIHByZXZlbnQgdGhlIGNvbXBvc2l0b3IgZnJvbSB1c2luZyBhbnkgb2YgdGhlIGNoaWxk
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDY1ZjFjZjcxMDhlZjYzYWJl
YTM3ZDAxNWE2OTRiY2I1MDYxMWFhYjIuLjVjOTA3NmI3ZmRkNGMyOTY2OTY5YTljODg4ZjAzNGNk
MDg3YWVhZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC02NCwxMSAr
NjQsMTIgQEAgY2xhc3MgQ0NIZWFkc1VwRGlzcGxheTsKIGNsYXNzIENDTGF5ZXJJbXBsOwogY2xh
c3MgR2VvbWV0cnlCaW5kaW5nOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBMYXll
clBhaW50ZXJDaHJvbWl1bTsKIAogLy8gQ2xhc3MgdGhhdCBoYW5kbGVzIGRyYXdpbmcgb2YgY29t
cG9zaXRlZCByZW5kZXIgbGF5ZXJzIHVzaW5nIEdMLgogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9t
aXVtIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJSZW5kZXJlckNocm9taXVtPiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVhdGUoUGFz
c1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNl
PiBjb250ZW50UGFpbnQpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJv
bWl1bT4gY3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRyPExh
eWVyUGFpbnRlckNocm9taXVtPiBjb250ZW50UGFpbnQpOwogCiAgICAgfkxheWVyUmVuZGVyZXJD
aHJvbWl1bSgpOwogCkBAIC0xNTEsNyArMTUyLDcgQEAgcHJpdmF0ZToKICAgICAvLyBGSVhNRTog
VGhpcyBuZWVkcyB0byBiZSBtb3ZlZCB0byB0aGUgQ0NWaWV3SW1wbCB3aGVuIHRoYXQgY2xhc3Mg
ZXhpc3RzLgogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9yb290Q0NMYXllckltcGw7CiAKLSAg
ICBMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBh
c3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQpOworICAgIExheWVyUmVu
ZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxM
YXllclBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBhaW50KTsKIAogICAgIHZvaWQgdXBkYXRlTGF5
ZXJzKExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgdm9pZCB1cGRhdGVS
b290TGF5ZXJDb250ZW50cygpOwpAQCAtMTkxLDcgKzE5Miw2IEBAIHByaXZhdGU6CiAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggbV9wcm9qZWN0aW9uTWF0cml4OwogCiAgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IG1fcm9vdExheWVyOwotICAgIE93blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IG1f
cm9vdExheWVyQ29udGVudFBhaW50OwogICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IG1f
cm9vdExheWVyQ29udGVudFRpbGVyOwogCiAgICAgYm9vbCBtX2hhcmR3YXJlQ29tcG9zaXRpbmc7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRleHR1cmVTdWJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDJiODY0MGVk
NzUzOTk4ZTkwYmU4NjViZWVlMGJiOTZlZGM0YjRiMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdl
LmNwcApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkxheWVyVGV4dHVyZVN1
YkltYWdlLmgiCisKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTGF5ZXJUZXh0
dXJlU3ViSW1hZ2U6OkxheWVyVGV4dHVyZVN1YkltYWdlKGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2Up
CisgICAgOiBtX3VzZU1hcFRleFN1YkltYWdlKHVzZU1hcFRleFN1YkltYWdlKQoreworfQorCitM
YXllclRleHR1cmVTdWJJbWFnZTo6fkxheWVyVGV4dHVyZVN1YkltYWdlKCkKK3sKK30KKwordm9p
ZCBMYXllclRleHR1cmVTdWJJbWFnZTo6c2V0U3ViSW1hZ2VTaXplKGNvbnN0IEludFNpemUmIHN1
YkltYWdlU2l6ZSkKK3sKKyAgICBpZiAoc3ViSW1hZ2VTaXplID09IG1fc3ViSW1hZ2VTaXplKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3N1YkltYWdlU2l6ZSA9IHN1YkltYWdlU2l6ZTsKKyAg
ICBpZiAoIW1fdXNlTWFwVGV4U3ViSW1hZ2UpCisgICAgICAgIG1fc3ViSW1hZ2UgPSBhZG9wdEFy
cmF5UHRyKG5ldyB1aW50OF90W21fc3ViSW1hZ2VTaXplLndpZHRoKCkgKiBtX3N1YkltYWdlU2l6
ZS5oZWlnaHQoKSAqIDRdKTsKK30KKwordm9pZCBMYXllclRleHR1cmVTdWJJbWFnZTo6dXBsb2Fk
KGNvbnN0IHVpbnQ4X3QqIGltYWdlLCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UmVjdCYgZGVzdFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCit7CisgICAgaWYgKG1fdXNlTWFwVGV4U3ViSW1h
Z2UpCisgICAgICAgIHVwbG9hZFdpdGhNYXBUZXhTdWJJbWFnZShpbWFnZSwgaW1hZ2VSZWN0LCBz
b3VyY2VSZWN0LCBkZXN0UmVjdCwgY29udGV4dCk7CisgICAgZWxzZQorICAgICAgICB1cGxvYWRX
aXRoVGV4U3ViSW1hZ2UoaW1hZ2UsIGltYWdlUmVjdCwgc291cmNlUmVjdCwgZGVzdFJlY3QsIGNv
bnRleHQpOworfQorCit2b2lkIExheWVyVGV4dHVyZVN1YkltYWdlOjp1cGxvYWRXaXRoVGV4U3Vi
SW1hZ2UoY29uc3QgdWludDhfdCogaW1hZ2UsIGNvbnN0IEludFJlY3QmIGltYWdlUmVjdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCkKK3sKKyAgICAvLyBPZmZzZXQgZnJvbSBpbWFnZS1yZWN0IHRvIHNvdXJjZS1yZWN0Lgor
ICAgIEludFBvaW50IG9mZnNldChzb3VyY2VSZWN0LngoKSAtIGltYWdlUmVjdC54KCksIHNvdXJj
ZVJlY3QueSgpIC0gaW1hZ2VSZWN0LnkoKSk7CisKKyAgICBjb25zdCB1aW50OF90KiBwaXhlbFNv
dXJjZTsKKyAgICBpZiAoaW1hZ2VSZWN0LndpZHRoKCkgPT0gc291cmNlUmVjdC53aWR0aCgpICYm
ICFvZmZzZXQueCgpKQorICAgICAgICBwaXhlbFNvdXJjZSA9ICZpbWFnZVs0ICogb2Zmc2V0Lnko
KSAqIGltYWdlUmVjdC53aWR0aCgpXTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gU3RyaWRlcyBu
b3QgZXF1YWwsIHNvIGRvIGEgcm93LWJ5LXJvdyBtZW1jcHkgZnJvbSB0aGUKKyAgICAgICAgLy8g
cGFpbnQgcmVzdWx0cyBpbnRvIGEgdGVtcCBidWZmZXIgZm9yIHVwbG9hZGluZy4KKyAgICAgICAg
Zm9yIChpbnQgcm93ID0gMDsgcm93IDwgZGVzdFJlY3QuaGVpZ2h0KCk7ICsrcm93KQorICAgICAg
ICAgICAgbWVtY3B5KCZtX3N1YkltYWdlW2Rlc3RSZWN0LndpZHRoKCkgKiA0ICogcm93XSwKKyAg
ICAgICAgICAgICAgICAgICAmaW1hZ2VbNCAqIChvZmZzZXQueCgpICsgKG9mZnNldC55KCkgKyBy
b3cpICogaW1hZ2VSZWN0LndpZHRoKCkpXSwKKyAgICAgICAgICAgICAgICAgICBkZXN0UmVjdC53
aWR0aCgpICogNCk7CisKKyAgICAgICAgcGl4ZWxTb3VyY2UgPSAmbV9zdWJJbWFnZVswXTsKKyAg
ICB9CisgICAgY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgMCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCksIGRlc3RSZWN0LndpZHRoKCksIGRl
c3RSZWN0LmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUsIHBpeGVsU291cmNlKTsKK30KKwordm9pZCBMYXllclRleHR1cmVT
dWJJbWFnZTo6dXBsb2FkV2l0aE1hcFRleFN1YkltYWdlKGNvbnN0IHVpbnQ4X3QqIGltYWdlLCBj
b25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UmVjdCYgZGVzdFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCit7CisgICAgLy8gT2Zmc2V0
IGZyb20gaW1hZ2UtcmVjdCB0byBzb3VyY2UtcmVjdC4KKyAgICBJbnRQb2ludCBvZmZzZXQoc291
cmNlUmVjdC54KCkgLSBpbWFnZVJlY3QueCgpLCBzb3VyY2VSZWN0LnkoKSAtIGltYWdlUmVjdC55
KCkpOworCisgICAgLy8gVXBsb2FkIHRpbGUgZGF0YSB2aWEgYSBtYXBwZWQgdHJhbnNmZXIgYnVm
ZmVyCisgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxF
eHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKSk7CisgICAgdWlu
dDhfdCogcGl4ZWxEZXN0ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGV4dGVuc2lvbnMtPm1hcFRl
eFN1YkltYWdlMkRDSFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgZGVz
dFJlY3QueCgpLCBkZXN0UmVjdC55KCksIGRlc3RSZWN0LndpZHRoKCksIGRlc3RSZWN0LmhlaWdo
dCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUsIEV4dGVuc2lvbnMzRENocm9taXVtOjpXUklURV9PTkxZKSk7CisgICAgQVNTRVJUKHBp
eGVsRGVzdCk7CisgICAgaWYgKGltYWdlUmVjdC53aWR0aCgpID09IHNvdXJjZVJlY3Qud2lkdGgo
KSAmJiAhb2Zmc2V0LngoKSkKKyAgICAgICAgbWVtY3B5KHBpeGVsRGVzdCwgJmltYWdlWzQgKiBv
ZmZzZXQueSgpICogaW1hZ2VSZWN0LndpZHRoKCldLCBpbWFnZVJlY3Qud2lkdGgoKSAqIGRlc3RS
ZWN0LmhlaWdodCgpICogNCk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIFN0cmlkZXMgbm90IGVx
dWFsLCBzbyBkbyBhIHJvdy1ieS1yb3cgbWVtY3B5IGZyb20gdGhlCisgICAgICAgIC8vIHBhaW50
IHJlc3VsdHMgaW50byB0aGUgcGl4ZWxEZXN0CisgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJv
dyA8IGRlc3RSZWN0LmhlaWdodCgpOyArK3JvdykKKyAgICAgICAgICAgIG1lbWNweSgmcGl4ZWxE
ZXN0W2Rlc3RSZWN0LndpZHRoKCkgKiA0ICogcm93XSwKKyAgICAgICAgICAgICAgICAgICAmaW1h
Z2VbNCAqIChvZmZzZXQueCgpICsgKG9mZnNldC55KCkgKyByb3cpICogaW1hZ2VSZWN0LndpZHRo
KCkpXSwKKyAgICAgICAgICAgICAgICAgICBkZXN0UmVjdC53aWR0aCgpICogNCk7CisgICAgfQor
ICAgIGV4dGVuc2lvbnMtPnVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKHBpeGVsRGVzdCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2
MTRjZjZlMzNjOGIwYjMyYWE1OTk0NmFhZGI3NTViMjMxOTRjZTgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVT
dWJJbWFnZS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgTGF5ZXJUZXh0dXJl
U3ViSW1hZ2VfaAorI2RlZmluZSBMYXllclRleHR1cmVTdWJJbWFnZV9oCisKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
SW50U2l6ZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworCitjbGFzcyBMYXllclRleHR1cmVT
dWJJbWFnZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgTGF5ZXJUZXh0dXJlU3ViSW1hZ2UoYm9v
bCB1c2VNYXBTdWJGb3JVcGxvYWQpOworICAgIH5MYXllclRleHR1cmVTdWJJbWFnZSgpOworCisg
ICAgdm9pZCBzZXRTdWJJbWFnZVNpemUoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgdXBsb2Fk
KGNvbnN0IHVpbnQ4X3QqIGltYWdlLCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsCisgICAgICAg
ICAgICAgICAgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJl
Y3QsCisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqKTsKKworcHJpdmF0ZToKKyAg
ICB2b2lkIHVwbG9hZFdpdGhUZXhTdWJJbWFnZShjb25zdCB1aW50OF90KiBpbWFnZSwgY29uc3Qg
SW50UmVjdCYgaW1hZ2VSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgdm9pZCB1cGxv
YWRXaXRoTWFwVGV4U3ViSW1hZ2UoY29uc3QgdWludDhfdCogaW1hZ2UsIGNvbnN0IEludFJlY3Qm
IGltYWdlUmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRCopOworCisgICAgYm9vbCBtX3Vz
ZU1hcFRleFN1YkltYWdlOworICAgIEludFNpemUgbV9zdWJJbWFnZVNpemU7CisgICAgT3duQXJy
YXlQdHI8dWludDhfdD4gbV9zdWJJbWFnZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjZW5kaWYgLy8gTGF5ZXJU
ZXh0dXJlU3ViSW1hZ2VfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZTU5NzNkZDU2ZTY5OGZlZDViZjY0YTNhNWYwMWFjNzBkNGM4YmQ5OAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVVwZGF0ZXIuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIExheWVyVGV4
dHVyZVVwZGF0ZXJfaAorI2RlZmluZSBMYXllclRleHR1cmVVcGRhdGVyX2gKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBH
cmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBJbnRTaXplOworY2xhc3Mg
TGF5ZXJUZXh0dXJlOworCitjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyIHsKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBMYXllclRleHR1cmVVcGRhdGVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
KSA6IG1fY29udGV4dChjb250ZXh0KSB7IH0KKyAgICB2aXJ0dWFsIH5MYXllclRleHR1cmVVcGRh
dGVyKCkgeyB9CisKKyAgICBlbnVtIE9yaWVudGF0aW9uIHsKKyAgICAgICAgQm90dG9tVXBPcmll
bnRhdGlvbiwKKyAgICAgICAgVG9wRG93bk9yaWVudGF0aW9uCisgICAgfTsKKyAgICAvLyBSZXR1
cm5zIHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgdGV4dHVyZSB1cGxvYWRlZCBieSB0aGlzIGludGVy
ZmFjZS4KKyAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNv
bnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KExheWVyVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KSA9IDA7CisKK3Byb3RlY3RlZDoKKyAg
ICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsg
fQorCitwcml2YXRlOgorICAgIC8vIFRoZSBncmFwaGljcyBjb250ZXh0IHdpdGggd2hpY2ggdG8g
dXBkYXRlIHRleHR1cmVzLgorICAgIC8vIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgdGV4dHVyZXMg
YXJlIGVpdGhlciBjcmVhdGVkIGluIHRoZSBzYW1lIGNvbnRleHQKKyAgICAvLyBvciBzaGFyZWQg
d2l0aCB0aGlzIGNvbnRleHQuCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisjZW5kaWYgLy8gTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVw
ZGF0ZXJDYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDUyODA5NzAyY2Zl
YTEyYmM2MTc4OGYzNzA4MzBlYTAxZWVlYzE4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52
YXMuY3BwCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkxheWVyVGV4dHVy
ZVVwZGF0ZXJDYW52YXMuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCisjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCisj
aW5jbHVkZSAiVHJhY2VFdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0xheWVyVGV4
dHVyZVVwZGF0ZXJDYW52YXM6OkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQsIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIp
CisgICAgOiBMYXllclRleHR1cmVVcGRhdGVyKGNvbnRleHQpCisgICAgLCBtX3BhaW50ZXIocGFp
bnRlcikKK3sKK30KKwordm9pZCBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzOjpwYWludENvbnRl
bnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qp
Cit7CisgICAgY29udGV4dC50cmFuc2xhdGUoLWNvbnRlbnRSZWN0LngoKSwgLWNvbnRlbnRSZWN0
LnkoKSk7CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJUZXh0dXJlVXBkYXRlckNh
bnZhczo6cGFpbnQiLCB0aGlzLCAwKTsKKyAgICAgICAgbV9wYWludGVyLT5wYWludChjb250ZXh0
LCBjb250ZW50UmVjdCk7CisgICAgfQorICAgIG1fY29udGVudFJlY3QgPSBjb250ZW50UmVjdDsK
K30KKworTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1h
cChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJv
bWl1bT4gcGFpbnRlciwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSkKKyAgICA6IExheWVyVGV4dHVy
ZVVwZGF0ZXJDYW52YXMoY29udGV4dCwgcGFpbnRlcikKKyAgICAsIG1fdGV4U3ViSW1hZ2UodXNl
TWFwVGV4U3ViSW1hZ2UpCit7Cit9CisKK3ZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6
cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXpl
JiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscykKK3sKKyAgICBtX3RleFN1YkltYWdlLnNldFN1
YkltYWdlU2l6ZSh0aWxlU2l6ZSk7CisKKyAgICBtX2NhbnZhcy5yZXNpemUoY29udGVudFJlY3Qu
c2l6ZSgpKTsKKyAgICAvLyBBc3N1bXB0aW9uOiBpZiBhIHRpbGVyIGlzIHVzaW5nIGJvcmRlciB0
ZXhlbHMsIHRoZW4gaXQgaXMgYmVjYXVzZSB0aGUKKyAgICAvLyBsYXllciBpcyBsaWtlbHkgdG8g
YmUgZmlsdGVyZWQgb3IgdHJhbnNmb3JtZWQuIEJlY2F1c2Ugb2YgaXQgbWlnaHQgYmUKKyAgICAv
LyB0cmFuc2Zvcm1lZCwgZHJhdyB0aGUgdGV4dCBpbiBncmF5c2NhbGUgaW5zdGVhZCBvZiBzdWJw
aXhlbCBhbnRpYWxpYXNpbmcuCisgICAgUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OlRleHRPcHRp
b24gdGV4dE9wdGlvbiA9CisgICAgICAgIGJvcmRlclRleGVscyA/IFBsYXRmb3JtQ2FudmFzOjpQ
YWludGVyOjpHcmF5c2NhbGVUZXh0IDogUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OlN1YnBpeGVs
VGV4dDsKKyAgICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlciBjYW52YXNQYWludGVyKCZtX2NhbnZh
cywgdGV4dE9wdGlvbik7CisgICAgcGFpbnRDb250ZW50cygqY2FudmFzUGFpbnRlci5jb250ZXh0
KCksIGNvbnRlbnRSZWN0KTsKK30KKwordm9pZCBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjp1
cGRhdGVUZXh0dXJlUmVjdChMYXllclRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQoreworICAgIFBsYXRmb3JtQ2FudmFz
OjpBdXRvTG9ja2VyIGxvY2tlcigmbV9jYW52YXMpOworCisgICAgdGV4dHVyZS0+YmluZFRleHR1
cmUoKTsKKyAgICBtX3RleFN1YkltYWdlLnVwbG9hZChsb2NrZXIucGl4ZWxzKCksIGNvbnRlbnRS
ZWN0KCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0LCBjb250ZXh0KCkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyQ2FudmFzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWVjZWZk
ODkwYzdlZTgzNzZlMmZjMjY2ODI2Y2JiNGUzM2E3MTkwMQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0
ZXJDYW52YXMuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIExheWVyVGV4dHVy
ZVVwZGF0ZXJDYW52YXNfaAorI2RlZmluZSBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzX2gKKwor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkxheWVyVGV4dHVy
ZVN1YkltYWdlLmgiCisjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtQ2FudmFzLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIExheWVyUGFp
bnRlckNocm9taXVtOworCisvLyBBIExheWVyVGV4dHVyZVVwZGF0ZXIgd2l0aCBhbiBpbnRlcm5h
bCBjYW52YXMuCitjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzIDogcHVibGljIExheWVy
VGV4dHVyZVVwZGF0ZXIgeworcHVibGljOgorICAgIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMo
R3JhcGhpY3NDb250ZXh0M0QqLCBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7Cisg
ICAgdmlydHVhbCB+TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcygpIHsgfQorCitwcm90ZWN0ZWQ6
CisgICAgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0KTsKKyAgICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGVudFJlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBJbnRSZWN0IG1fY29udGVu
dFJlY3Q7CisgICAgT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBtX3BhaW50ZXI7Cit9Owor
CisvLyBBIExheWVyVGV4dHVyZVVwZGF0ZXIgd2l0aCBhbiBpbnRlcm5hbCBiaXRtYXAgY2FudmFz
LgorY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcCA6IHB1YmxpYyBMYXllclRleHR1cmVV
cGRhdGVyQ2FudmFzIHsKK3B1YmxpYzoKKyAgICBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwKEdy
YXBoaWNzQ29udGV4dDNEKiwgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4sIGJvb2wg
dXNlTWFwVGV4U3ViSW1hZ2UpOworICAgIHZpcnR1YWwgfkxheWVyVGV4dHVyZVVwZGF0ZXJCaXRt
YXAoKSB7IH0KKworICAgIHZpcnR1YWwgT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSB7IHJldHVy
biBMYXllclRleHR1cmVVcGRhdGVyOjpCb3R0b21VcE9yaWVudGF0aW9uOyB9CisgICAgdmlydHVh
bCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3Qg
SW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpOworICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVUZXh0dXJlUmVjdChMYXllclRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisKK3ByaXZhdGU6CisgICAgUGxhdGZvcm1DYW52
YXMgbV9jYW52YXM7CisgICAgTGF5ZXJUZXh0dXJlU3ViSW1hZ2UgbV90ZXhTdWJJbWFnZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisjZW5kaWYgLy8gTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhc19oCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGls
ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwCmluZGV4IDM3ZTU2MThhY2E0NmZjMTNiYzhjMzU5ZjRj
ZTljN2VhZWMyZGI0OTQuLmY1OWNlN2I4MzZmZTA4NzU3MzM1YmMyNTM1OGQ1YWY1YWY4MzAxZDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyVGlsZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcApAQCAtMzUsMzggKzM1LDMwIEBACiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJMYXllclRleHR1cmUuaCIKKyNpbmNsdWRlICJMYXllclRleHR1
cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogCi0jaW5jbHVkZSA8d3RmL1Bh
c3NPd25BcnJheVB0ci5oPgotCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVBhc3NPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtPiBMYXllclRpbGVyQ2hyb21p
dW06OmNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IElu
dFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbiBib3JkZXIpCitQYXNzT3duUHRyPExh
eWVyVGlsZXJDaHJvbWl1bT4gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+
IHRleHR1cmVVcGRhdGVyLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRp
b24gYm9yZGVyKQogewogICAgIGlmICghbGF5ZXJSZW5kZXJlciB8fCB0aWxlU2l6ZS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBM
YXllclRpbGVyQ2hyb21pdW0obGF5ZXJSZW5kZXJlciwgdGlsZVNpemUsIGJvcmRlcikpOworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJUaWxlckNocm9taXVtKGxheWVyUmVuZGVyZXIsIHRl
eHR1cmVVcGRhdGVyLCB0aWxlU2l6ZSwgYm9yZGVyKSk7CiB9CiAKLUxheWVyVGlsZXJDaHJvbWl1
bTo6TGF5ZXJUaWxlckNocm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJl
ciwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJvcmRlclRleGVsT3B0aW9uIGJvcmRlcikKK0xh
eWVyVGlsZXJDaHJvbWl1bTo6TGF5ZXJUaWxlckNocm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1
bSogbGF5ZXJSZW5kZXJlciwgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyPiB0ZXh0dXJl
VXBkYXRlciwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJvcmRlclRleGVsT3B0aW9uIGJvcmRl
cikKICAgICA6IG1fc2tpcHNEcmF3KGZhbHNlKQogICAgICwgbV90aWxpbmdEYXRhKG1heCh0aWxl
U2l6ZS53aWR0aCgpLCB0aWxlU2l6ZS5oZWlnaHQoKSksIDAsIDAsIGJvcmRlciA9PSBIYXNCb3Jk
ZXJUZXhlbHMpCi0gICAgLCBtX3VzZU1hcFN1YkZvclVwbG9hZHMobGF5ZXJSZW5kZXJlci0+Y29u
dGV4dFN1cHBvcnRzTWFwU3ViKCkpCisgICAgLCBtX3RleHR1cmVVcGRhdGVyKHRleHR1cmVVcGRh
dGVyKQogICAgICwgbV9sYXllclJlbmRlcmVyKGxheWVyUmVuZGVyZXIpCiB7CiAgICAgc2V0VGls
ZVNpemUodGlsZVNpemUpOwogfQogCi12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6c2V0TGF5ZXJS
ZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCi17Ci0gICAgaWYg
KG1fbGF5ZXJSZW5kZXJlciAhPSBsYXllclJlbmRlcmVyKQotICAgICAgICByZXNldCgpOwotICAg
IG1fbGF5ZXJSZW5kZXJlciA9IGxheWVyUmVuZGVyZXI7Ci19Ci0KIExheWVyVGlsZXJDaHJvbWl1
bTo6fkxheWVyVGlsZXJDaHJvbWl1bSgpCiB7CiAgICAgcmVzZXQoKTsKQEAgLTg2LDggKzc4LDYg
QEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnNldFRpbGVTaXplKGNvbnN0IEludFNpemUmIHNp
emUpCiAgICAgcmVzZXQoKTsKIAogICAgIG1fdGlsZVNpemUgPSBzaXplOwotICAgIGlmICghbV91
c2VNYXBTdWJGb3JVcGxvYWRzKQotICAgICAgICBtX3RpbGVQaXhlbHMgPSBhZG9wdEFycmF5UHRy
KG5ldyB1aW50OF90W21fdGlsZVNpemUud2lkdGgoKSAqIG1fdGlsZVNpemUuaGVpZ2h0KCkgKiA0
XSk7CiAgICAgbV90aWxpbmdEYXRhLnNldE1heFRleHR1cmVTaXplKG1heChzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCkpKTsKIH0KIApAQCAtMjMwLDcgKzIyMCw3IEBAIHZvaWQgTGF5ZXJUaWxl
ckNocm9taXVtOjppbnZhbGlkYXRlRW50aXJlTGF5ZXIoKQogICAgIG1fdGlsaW5nRGF0YS5zZXRU
b3RhbFNpemUoMCwgMCk7CiB9CiAKLXZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGUoVGls
ZVBhaW50SW50ZXJmYWNlJiBwYWludGVyLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3Zv
aWQgTGF5ZXJUaWxlckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QpCiB7CiAgICAgaWYgKG1fc2tpcHNEcmF3KQogICAgICAgICByZXR1cm47CkBAIC0y
NjcsMzAgKzI1NywxMCBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6dXBkYXRlKFRpbGVQYWlu
dEludGVyZmFjZSYgcGFpbnRlciwgY29uc3QgSW50UmVjdCYgY29udAogICAgIGlmIChkaXJ0eUxh
eWVyUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fY2FudmFzLnJlc2l6
ZShtX3BhaW50UmVjdC5zaXplKCkpOwotCi0gICAgLy8gQXNzdW1wdGlvbjogaWYgYSB0aWxlciBp
cyB1c2luZyBib3JkZXIgdGV4ZWxzLCB0aGVuIGl0IGlzIGJlY2F1c2UgdGhlCi0gICAgLy8gbGF5
ZXIgaXMgbGlrZWx5IHRvIGJlIGZpbHRlcmVkIG9yIHRyYW5zZm9ybWVkLiBCZWNhdXNlIG9mIGl0
IG1pZ2h0IGJlCi0gICAgLy8gdHJhbnNmb3JtZWQsIGRyYXcgdGhlIHRleHQgaW4gZ3JheXNjYWxl
IGluc3RlYWQgb2Ygc3VicGl4ZWwgYW50aWFsaWFzaW5nLgotICAgIFBsYXRmb3JtQ2FudmFzOjpQ
YWludGVyOjpUZXh0T3B0aW9uIHRleHRPcHRpb24gPSBtX3RpbGluZ0RhdGEuYm9yZGVyVGV4ZWxz
KCkgPyBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6R3JheXNjYWxlVGV4dCA6IFBsYXRmb3JtQ2Fu
dmFzOjpQYWludGVyOjpTdWJwaXhlbFRleHQ7Ci0gICAgUGxhdGZvcm1DYW52YXM6OlBhaW50ZXIg
Y2FudmFzUGFpbnRlcigmbV9jYW52YXMsIHRleHRPcHRpb24pOwotICAgIGNhbnZhc1BhaW50ZXIu
Y29udGV4dCgpLT50cmFuc2xhdGUoLW1fcGFpbnRSZWN0LngoKSwgLW1fcGFpbnRSZWN0LnkoKSk7
Ci0gICAgewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGU6
OnBhaW50IiwgdGhpcywgMCk7Ci0gICAgICAgIHBhaW50ZXIucGFpbnQoKmNhbnZhc1BhaW50ZXIu
Y29udGV4dCgpLCBtX3BhaW50UmVjdCk7Ci0gICAgfQotfQotCi12b2lkIExheWVyVGlsZXJDaHJv
bWl1bTo6dXBsb2FkQ2FudmFzKCkKLXsKLSAgICBQbGF0Zm9ybUNhbnZhczo6QXV0b0xvY2tlciBs
b2NrZXIoJm1fY2FudmFzKTsKLSAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclRpbGVy
Q2hyb21pdW06OnVwZGF0ZUZyb21QaXhlbHMiLCB0aGlzLCAwKTsKLSAgICAgICAgdXBkYXRlRnJv
bVBpeGVscyhtX3VwZGF0ZVJlY3QsIG1fcGFpbnRSZWN0LCBsb2NrZXIucGl4ZWxzKCkpOwotICAg
IH0KKyAgICBtX3RleHR1cmVVcGRhdGVyLT5wcmVwYXJlVG9VcGRhdGUobV9wYWludFJlY3QsIG1f
dGlsZVNpemUsIG1fdGlsaW5nRGF0YS5ib3JkZXJUZXhlbHMoKSk7CiB9CiAKLXZvaWQgTGF5ZXJU
aWxlckNocm9taXVtOjp1cGRhdGVGcm9tUGl4ZWxzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
LCBjb25zdCBJbnRSZWN0JiBwYWludFJlY3QsIGNvbnN0IHVpbnQ4X3QqIHBhaW50UGl4ZWxzKQor
dm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZVJlY3QoKQogewogICAgIC8vIFBhaW50aW5n
IGNvdWxkIGNhdXNlIGNvbXBvc2l0aW5nIHRvIGdldCB0dXJuZWQgb2ZmLCB3aGljaCBtYXkgY2F1
c2UgdGhlIHRpbGVyIHRvIGJlY29tZSBpbnZhbGlkYXRlZCBtaWQtdXBkYXRlLgogICAgIGlmICgh
bV90aWxpbmdEYXRhLnRvdGFsU2l6ZVgoKSB8fCAhbV90aWxpbmdEYXRhLnRvdGFsU2l6ZVkoKSkK
QEAgLTI5OSw3ICsyNjksNyBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6dXBkYXRlRnJvbVBp
eGVscyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UgogICAgIEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKIAogICAgIGludCBs
ZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207Ci0gICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNv
bnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGNvbnRlbnRSZWN0VG9U
aWxlSW5kaWNlcyhtX3VwZGF0ZVJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAg
Zm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewogICAgICAgICBmb3IgKGludCBp
ID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CiAgICAgICAgICAgICBUaWxlKiB0aWxlID0gdGls
ZUF0KGksIGopOwpAQCAtMzE0LDcgKzI4NCw3IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjp1
cGRhdGVGcm9tUGl4ZWxzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRSCiAg
ICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChsYXllclJlY3RUb0NvbnRlbnRSZWN0KHRp
bGUtPm1fZGlydHlMYXllclJlY3QpKTsKICAgICAgICAgICAgIC8vIFBhaW50IHJlY3Qgbm90IGd1
YXJhbnRlZWQgdG8gbGluZSB1cCBvbiB0aWxlIGJvdW5kYXJpZXMsIHNvCiAgICAgICAgICAgICAv
LyBtYWtlIHN1cmUgdGhhdCBzb3VyY2VSZWN0IGRvZXNuJ3QgZXh0ZW5kIG91dHNpZGUgb2YgaXQu
Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChwYWludFJlY3QpOworICAgICAgICAg
ICAgc291cmNlUmVjdC5pbnRlcnNlY3QobV9wYWludFJlY3QpOwogICAgICAgICAgICAgaWYgKHNv
dXJjZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0zMzQs
NTcgKzMwNCwyMiBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6dXBkYXRlRnJvbVBpeGVscyhj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UgogICAgICAgICAgICAgICAgIENS
QVNIKCk7CiAKICAgICAgICAgICAgIC8vIE9mZnNldCBmcm9tIHBhaW50IHJlY3RhbmdsZSB0byB0
aGlzIHRpbGUncyBkaXJ0eSByZWN0YW5nbGUuCi0gICAgICAgICAgICBJbnRQb2ludCBwYWludE9m
ZnNldChzb3VyY2VSZWN0LngoKSAtIHBhaW50UmVjdC54KCksIHNvdXJjZVJlY3QueSgpIC0gcGFp
bnRSZWN0LnkoKSk7CisgICAgICAgICAgICBJbnRQb2ludCBwYWludE9mZnNldChzb3VyY2VSZWN0
LngoKSAtIG1fcGFpbnRSZWN0LngoKSwgc291cmNlUmVjdC55KCkgLSBtX3BhaW50UmVjdC55KCkp
OwogICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LngoKSA8IDApCiAgICAgICAgICAgICAgICAg
Q1JBU0goKTsKICAgICAgICAgICAgIGlmIChwYWludE9mZnNldC55KCkgPCAwKQogICAgICAgICAg
ICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueCgpICsgZGVzdFJl
Y3Qud2lkdGgoKSA+IHBhaW50UmVjdC53aWR0aCgpKQorICAgICAgICAgICAgaWYgKHBhaW50T2Zm
c2V0LngoKSArIGRlc3RSZWN0LndpZHRoKCkgPiBtX3BhaW50UmVjdC53aWR0aCgpKQogICAgICAg
ICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueSgpICsgZGVz
dFJlY3QuaGVpZ2h0KCkgPiBwYWludFJlY3QuaGVpZ2h0KCkpCisgICAgICAgICAgICBpZiAocGFp
bnRPZmZzZXQueSgpICsgZGVzdFJlY3QuaGVpZ2h0KCkgPiBtX3BhaW50UmVjdC5oZWlnaHQoKSkK
ICAgICAgICAgICAgICAgICBDUkFTSCgpOwogCiAgICAgICAgICAgICB0aWxlLT50ZXh0dXJlKCkt
PmJpbmRUZXh0dXJlKCk7Ci0KICAgICAgICAgICAgIGNvbnN0IEdDM0RpbnQgZmlsdGVyID0gbV90
aWxpbmdEYXRhLmJvcmRlclRleGVscygpID8gR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUiA6IEdy
YXBoaWNzQ29udGV4dDNEOjpORUFSRVNUOwogICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIGZpbHRlcikpOwogICAgICAgICAgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIGZpbHRlcikpOwog
Ci0gICAgICAgICAgICBpZiAobV91c2VNYXBTdWJGb3JVcGxvYWRzKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gVXBsb2FkIHRpbGUgZGF0YSB2aWEgYSBtYXBwZWQgdHJhbnNmZXIgYnVmZmVyCi0gICAg
ICAgICAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2Fz
dDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKSk7Ci0gICAg
ICAgICAgICAgICAgdWludDhfdCogcGl4ZWxEZXN0ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGV4
dGVuc2lvbnMtPm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgMCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCksIGRlc3RSZWN0LndpZHRoKCks
IGRlc3RSZWN0LmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIEV4dGVuc2lvbnMzRENocm9taXVtOjpXUklURV9PTkxZKSk7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBpeGVsRGVzdCk7Ci0gICAgICAgICAgICAgICAgaWYg
KHBhaW50UmVjdC53aWR0aCgpID09IHNvdXJjZVJlY3Qud2lkdGgoKSAmJiAhcGFpbnRPZmZzZXQu
eCgpKQotICAgICAgICAgICAgICAgICAgICBtZW1jcHkocGl4ZWxEZXN0LCAmcGFpbnRQaXhlbHNb
NCAqIHBhaW50T2Zmc2V0LnkoKSAqIHBhaW50UmVjdC53aWR0aCgpXSwgcGFpbnRSZWN0LndpZHRo
KCkgKiBkZXN0UmVjdC5oZWlnaHQoKSAqIDQpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAvLyBTdHJpZGVzIG5vdCBlcXVhbCwgc28gZG8gYSByb3ctYnktcm93
IG1lbWNweSBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICAvLyBwYWludCByZXN1bHRzIGlu
dG8gdGhlIHBpeGVsRGVzdAotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyBy
b3cgPCBkZXN0UmVjdC5oZWlnaHQoKTsgKytyb3cpCi0gICAgICAgICAgICAgICAgICAgICAgICBt
ZW1jcHkoJnBpeGVsRGVzdFtkZXN0UmVjdC53aWR0aCgpICogNCAqIHJvd10sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJnBhaW50UGl4ZWxzWzQgKiAocGFpbnRPZmZzZXQueCgpICsg
KHBhaW50T2Zmc2V0LnkoKSArIHJvdykgKiBwYWludFJlY3Qud2lkdGgoKSldLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0LndpZHRoKCkgKiA0KTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy0+dW5tYXBUZXhTdWJJbWFnZTJEQ0hS
T01JVU0ocGl4ZWxEZXN0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgdWludDhfdCogcGl4ZWxTb3VyY2U7Ci0gICAgICAgICAgICAgICAgaWYgKHBhaW50UmVj
dC53aWR0aCgpID09IHNvdXJjZVJlY3Qud2lkdGgoKSAmJiAhcGFpbnRPZmZzZXQueCgpKQotICAg
ICAgICAgICAgICAgICAgICBwaXhlbFNvdXJjZSA9ICZwYWludFBpeGVsc1s0ICogcGFpbnRPZmZz
ZXQueSgpICogcGFpbnRSZWN0LndpZHRoKCldOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAvLyBTdHJpZGVzIG5vdCBlcXVhbCwgc28gZG8gYSByb3ctYnktcm93
IG1lbWNweSBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICAvLyBwYWludCByZXN1bHRzIGlu
dG8gYSB0ZW1wIGJ1ZmZlciBmb3IgdXBsb2FkaW5nLgotICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCByb3cgPSAwOyByb3cgPCBkZXN0UmVjdC5oZWlnaHQoKTsgKytyb3cpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtZW1jcHkoJm1fdGlsZVBpeGVsc1tkZXN0UmVjdC53aWR0aCgpICogNCAq
IHJvd10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhaW50UGl4ZWxzWzQgKiAo
cGFpbnRPZmZzZXQueCgpICsgKHBhaW50T2Zmc2V0LnkoKSArIHJvdykgKiBwYWludFJlY3Qud2lk
dGgoKSldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0LndpZHRoKCkg
KiA0KTsKLQotICAgICAgICAgICAgICAgICAgICBwaXhlbFNvdXJjZSA9ICZtX3RpbGVQaXhlbHNb
MF07Ci0gICAgICAgICAgICAgICAgfQotCi0KLSAgICAgICAgICAgICAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwg
ZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCksIGRlc3RSZWN0LndpZHRoKCksIGRlc3RSZWN0Lmhl
aWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUsIHBpeGVsU291cmNlKSk7Ci0gICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgIG1f
dGV4dHVyZVVwZGF0ZXItPnVwZGF0ZVRleHR1cmVSZWN0KHRpbGUtPnRleHR1cmUoKSwgc291cmNl
UmVjdCwgZGVzdFJlY3QpOwogICAgICAgICAgICAgdGlsZS0+Y2xlYXJEaXJ0eSgpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtNDMwLDcgKzM2NSwxMiBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6
ZHJhdyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYQog
ICAgICAgICAgICAgZmxvYXQgdGV4VHJhbnNsYXRlWSA9IHRleE9mZnNldC55KCkgLyB0aWxlSGVp
Z2h0OwogICAgICAgICAgICAgZmxvYXQgdGV4U2NhbGVYID0gdGlsZVJlY3Qud2lkdGgoKSAvIHRp
bGVXaWR0aDsKICAgICAgICAgICAgIGZsb2F0IHRleFNjYWxlWSA9IHRpbGVSZWN0LmhlaWdodCgp
IC8gdGlsZUhlaWdodDsKLQorICAgICAgICAgICAgLy8gT3BlbkdMIGNvb3JkaW5hdGUgc3lzdGVt
IGlzIGJvdHRvbS11cC4KKyAgICAgICAgICAgIC8vIElmIHRpbGUgdGV4dHVyZSBpcyB0b3AtZG93
biwgd2UgbmVlZCB0byBmbGlwIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzLgorICAgICAgICAgICAg
aWYgKG1fdGV4dHVyZVVwZGF0ZXItPm9yaWVudGF0aW9uKCkgPT0gTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6VG9wRG93bk9yaWVudGF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGV4VHJhbnNsYXRlWSAr
PSAxLjA7CisgICAgICAgICAgICAgICAgdGV4U2NhbGVZICo9IC0xLjA7CisgICAgICAgICAgICB9
CiAgICAgICAgICAgICBkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+
cHJvamVjdGlvbk1hdHJpeCgpLCB0aWxlTWF0cml4LCB0aWxlUmVjdC53aWR0aCgpLCB0aWxlUmVj
dC5oZWlnaHQoKSwgb3BhY2l0eSwgdGV4VHJhbnNsYXRlWCwgdGV4VHJhbnNsYXRlWSwgdGV4U2Nh
bGVYLCB0ZXhTY2FsZVksIHByb2dyYW0pOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9t
aXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRp
bGVyQ2hyb21pdW0uaAppbmRleCAwZjc1NTgzZjFkMWIwNDA1ZTM5YTA5MmE0NzJmOTc5MWJlNzU5
NjhlLi44MDU1YWNhNTRiMmZkNTI0NWI2NjRkYzU3Y2ExMTg4ODg1ZWJmNTRkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRpbGVyQ2hyb21pdW0uaApAQCAtMzEsMjggKzMxLDIyIEBACiAKICNpbmNsdWRlICJMYXll
ckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1DYW52YXMuaCIKICNpbmNsdWRlICJUaWxpbmdEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hU
cmFpdHMuaD4KLSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDNEOwogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOwotCi1jbGFzcyBUaWxlUGFpbnRJbnRl
cmZhY2UgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSA9IDA7Ci19OworY2xhc3MgTGF5
ZXJUZXh0dXJlVXBkYXRlcjsKIAogY2xhc3MgTGF5ZXJUaWxlckNocm9taXVtIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShMYXllclRpbGVyQ2hyb21pdW0pOwogcHVibGljOgogICAgIGVudW0g
Qm9yZGVyVGV4ZWxPcHRpb24geyBIYXNCb3JkZXJUZXhlbHMsIE5vQm9yZGVyVGV4ZWxzIH07CiAK
LSAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IGNyZWF0ZShMYXllclJl
bmRlcmVyQ2hyb21pdW0qLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRp
b24pOworICAgIHN0YXRpYyBQYXNzT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gY3JlYXRlKExh
eWVyUmVuZGVyZXJDaHJvbWl1bSosIFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4sIGNv
bnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbik7CiAKICAgICB+TGF5ZXJU
aWxlckNocm9taXVtKCk7CiAKQEAgLTYwLDE2ICs1NCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBp
bnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CiAgICAgdm9pZCBpbnZh
bGlkYXRlRW50aXJlTGF5ZXIoKTsKIAotICAgIC8vIFBhaW50IGFsbCBpbnZhbGlkYXRpb25zIGFu
ZCBtaXNzaW5nIHRpbGVzIG5lZWRlZCB0byBkcmF3IHRoZSBjb250ZW50UmVjdAotICAgIC8vIGlu
dG8gdGhlIGludGVybmFsIGNhbnZhcy4KLSAgICB2b2lkIHVwZGF0ZShUaWxlUGFpbnRJbnRlcmZh
Y2UmIHBhaW50ZXIsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKLQotICAgIC8vIFJlc2Vy
dmUgYW5kIHVwbG9hZCB0aWxlIHRleHR1cmVzIGZyb20gdGhlIGludGVybmFsIGNhbnZhcy4KLSAg
ICB2b2lkIHVwbG9hZENhbnZhcygpOwotCi0gICAgLy8gUmVzZXJ2ZSBhbmQgdXBsb2FkIHRpbGUg
dGV4dHVyZXMgZnJvbSBhbiBleHRlcm5hbGx5IHBhaW50ZWQgYnVmZmVyLgotICAgIHZvaWQgdXBk
YXRlRnJvbVBpeGVscyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UmVjdCYg
cGFpbnRSZWN0LCBjb25zdCB1aW50OF90KiBwaXhlbHMpOwotCisgICAgLy8gUHJlcGFyZSBkYXRh
IG5lZWRlZCB0byB1cGRhdGUgdGV4dHVyZXMgdGhhdCBpbnN0ZXJzZWN0IHdpdGggY29udGVudFJl
Y3QuCisgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qp
OworICAgIC8vIFVwZGF0ZSBpbnZhbGlkIHRleHR1cmVzIHRoYXQgaW50ZXJzZWN0IHdpdGggY29u
dGVudFJlY3QgcHJvdmlkZWQgaW4gcHJlcGFyZVRvVXBkYXRlKCkuCisgICAgdm9pZCB1cGRhdGVS
ZWN0KCk7CiAgICAgLy8gRHJhdyBhbGwgdGlsZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCB0aGUgY29u
dGVudCByZWN0LgogICAgIHZvaWQgZHJhdyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKIApAQCAtNzcsNyArNjUs
NiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMYXllclBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBw
b3NpdGlvbik7CiAgICAgLy8gQ2hhbmdlIHRoZSB0aWxlIHNpemUuICBUaGlzIG1heSBpbnZhbGlk
YXRlIGFsbCB0aGUgZXhpc3RpbmcgdGlsZXMuCiAgICAgdm9pZCBzZXRUaWxlU2l6ZShjb25zdCBJ
bnRTaXplJiBzaXplKTsKLSAgICB2b2lkIHNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKik7CiAKICAgICBib29sIHNraXBzRHJhdygpIGNvbnN0IHsgcmV0dXJuIG1fc2tpcHNE
cmF3OyB9CiAKQEAgLTg3LDEyICs3NCwxMiBAQCBwdWJsaWM6CiAgICAgTGF5ZXJUZXh0dXJlKiBn
ZXRTaW5nbGVUZXh0dXJlKCk7CiAKIHByaXZhdGU6Ci0gICAgTGF5ZXJUaWxlckNocm9taXVtKExh
eWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhl
bE9wdGlvbik7CisgICAgTGF5ZXJUaWxlckNocm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bSos
IFBhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4sIGNvbnN0IEludFNpemUmIHRpbGVTaXpl
LCBCb3JkZXJUZXhlbE9wdGlvbik7CiAKICAgICBjbGFzcyBUaWxlIDogcHVibGljIFJlZkNvdW50
ZWQ8VGlsZT4gewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaWxlKTsKICAgICBwdWJs
aWM6Ci0gICAgICAgIGV4cGxpY2l0IFRpbGUoUGFzc093blB0cjxMYXllclRleHR1cmU+IHRleCkg
OiBtX3RleCh0ZXgpLCBtX2koLTEpLCBtX2ooLTEpIHt9CisgICAgICAgIGV4cGxpY2l0IFRpbGUo
UGFzc093blB0cjxMYXllclRleHR1cmU+IHRleCkgOiBtX3RleCh0ZXgpLCBtX2koLTEpLCBtX2oo
LTEpIHsgfQogCiAgICAgICAgIExheWVyVGV4dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4
LmdldCgpOyB9CiAKQEAgLTE1NywxOSArMTQ0LDEzIEBAIHByaXZhdGU6CiAgICAgLy8gVGlnaHRs
eSBwYWNrZWQgc2V0IG9mIHVudXNlZCB0aWxlcy4KICAgICBWZWN0b3I8UmVmUHRyPFRpbGU+ID4g
bV91bnVzZWRUaWxlczsKIAotICAgIC8vIFN0YXRlIGhlbGQgYmV0d2VlbiB1cGRhdGUgYW5kIHVw
bG9hZENhbnZhcy4KKyAgICAvLyBTdGF0ZSBoZWxkIGJldHdlZW4gdXBkYXRlIGFuZCB1cGxvYWQu
CiAgICAgSW50UmVjdCBtX3BhaW50UmVjdDsKICAgICBJbnRSZWN0IG1fdXBkYXRlUmVjdDsKLSAg
ICBQbGF0Zm9ybUNhbnZhcyBtX2NhbnZhczsKLQotICAgIC8vIENhY2hlIGEgdGlsZS1zaXplZCBw
aXhlbCBidWZmZXIgdG8gZHJhdyBpbnRvLgotICAgIE93bkFycmF5UHRyPHVpbnQ4X3Q+IG1fdGls
ZVBpeGVsczsKIAogICAgIFRpbGluZ0RhdGEgbV90aWxpbmdEYXRhOwogCi0gICAgLy8gV2hldGhl
ciB0aGUgdGlsZXIgd2lsbCB1c2UgR0xfQ0hST01JVU1fbWFwX3N1YiBmb3IgdGV4dHVyZSB1cGxv
YWRzLgotICAgIGJvb2wgbV91c2VNYXBTdWJGb3JVcGxvYWRzOwotCisgICAgT3duUHRyPExheWVy
VGV4dHVyZVVwZGF0ZXI+IG1fdGV4dHVyZVVwZGF0ZXI7CiAgICAgTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiBtX2xheWVyUmVuZGVyZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXku
Y3BwCmluZGV4IDFiNDRiMTg1M2JhMTQ3MDhiNzMyZGFlMWEzMWM4MDdiYzhlNzI2MTAuLjY4MjE5
OTEzMGU2OTJhMDJjODNkYWUwMjMzN2ExMTU1ZmFhZTgyNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVh
ZHNVcERpc3BsYXkuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1
bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVy
VGV4dHVyZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ2FudmFzLmgiCiAjaW5jbHVkZSAiVGV4dFJ1
bi5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5o
IgpAQCAtMTE1LDcgKzExNiw3IEBAIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhdygpCiAgICAg
ICAgICAgICBtZW1jcHkocGl4ZWxEZXN0LCBsb2NrZXIucGl4ZWxzKCksIGh1ZFNpemUud2lkdGgo
KSAqIGh1ZFNpemUuaGVpZ2h0KCkgKiA0KTsKICAgICAgICAgICAgIGV4dGVuc2lvbnMtPnVubWFw
VGV4U3ViSW1hZ2UyRENIUk9NSVVNKHBpeGVsRGVzdCk7CiAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgR0xDKGNvbnRleHQuZ2V0KCksIGNvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBjYW52YXMuc2l6
ZSgpLndpZHRoKCksIGNhbnZhcy5zaXplKCkuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgbG9ja2VyLnBpeGVscygp
KSk7CisgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIGNhbnZh
cy5zaXplKCkud2lkdGgoKSwgY2FudmFzLnNpemUoKS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBsb2NrZXIucGl4
ZWxzKCkpKTsKICAgICB9CiAKICAgICAvLyBEcmF3IHRoZSBIVUQgb250byB0aGUgZGVmYXVsdCBy
ZW5kZXIgc3VyZmFjZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMjYyZmE1YWQ4NmRj
MzIzMmJhZDNjNmI2YjM2Mjk4MmVhNmFhNGRhOC4uNjQ3NjhkYWE2ZmMxYzE3ZTYwNWUzOWY2OTUy
Y2FlZTA5NTllZTY3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBA
QAorMjAxMS0wNS0xOCAgQWxvayBQcml5YWRhcnNoaSAgPGFsb2twQGNocm9taXVtLm9yZz4gYW5k
IEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGxpdCBjYW52YXMgZnJvbSBMYXllclRpbGVy
Q2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTYwNzE5CisKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorCiAyMDExLTA1LTE3ICBN
aWtoYWlsIE5hZ2Fub3YgIDxtbmFnYW5vdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmNwcAppbmRleCA3OWFkODczN2E2MjAzYzY4OWJjYmNhNjQyNjUwNjQxY2Q0NGZlNWY0Li4x
NWRkMjlhMDdjMDY1MjhiZjBmYmMxZGJkMTFkOWQ1YTAwMGI3NGJlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC03Miw2ICs3Miw3IEBACiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIKICNp
bmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0
eWxlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtMjQwOSw3ICsyNDEwLDcgQEAgdm9pZCBXZWJW
aWV3SW1wbDo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKICAg
ICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKIH0KIAotY2xhc3MgV2ViVmlld0ltcGxDb250
ZW50UGFpbnRlciA6IHB1YmxpYyBUaWxlUGFpbnRJbnRlcmZhY2UgeworY2xhc3MgV2ViVmlld0lt
cGxDb250ZW50UGFpbnRlciA6IHB1YmxpYyBMYXllclBhaW50ZXJDaHJvbWl1bSB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcik7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NPd25QdHI8V2ViVmlld0ltcGxDb250ZW50UGFpbnRlcio+IGNyZWF0ZShX
ZWJWaWV3SW1wbCogd2ViVmlld0ltcGwpCg==
</data>
<flag name="review"
          id="87239"
          type_id="1"
          status="+"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>