<?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>54143</bug_id>
          
          <creation_ts>2011-02-09 14:11:19 -0800</creation_ts>
          <short_desc>[chromium] Modify LayerTilerChromium to use TilingData.</short_desc>
          <delta_ts>2011-03-11 15:39:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>54409</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adrienne Walker">enne</reporter>
          <assigned_to name="Adrienne Walker">enne</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>nduca</cc>
    
    <cc>scheib</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>348558</commentid>
    <comment_count>0</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-02-09 14:11:19 -0800</bug_when>
    <thetext>[chromium] Modify LayerTilerChromium to use TilingData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348560</commentid>
    <comment_count>1</comment_count>
      <attachid>81873</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-02-09 14:13:10 -0800</bug_when>
    <thetext>Created attachment 81873
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348565</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-09 14:17:40 -0800</bug_when>
    <thetext>Attachment 81873 did not build on chromium:
Build output: http://queues.webkit.org/results/7884034</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348582</commentid>
    <comment_count>3</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-02-09 14:34:59 -0800</bug_when>
    <thetext>This is another incremental step towards tiling layers.  Because layers can have transforms on them, we need to handle bilinear filtering across tiles.  This code changes the compositor tiling code to use scheib&apos;s TilingData class that is currently used for canvas images.

I realize there are a lot of changes in this patch, so here&apos;s the few changes from which everything else falls out.

1) To handle scrollbars before, I was changing the tile size to be exactly the size of the scrollbar.  TilingData only has one maximum texture dimension.  Rather than modifying that code to handle two texture dimensions (which in retrospect may have been a better option), I ended up just adding a maximum texture size option to LayerTilerChromium.  For example, this prevents a vertical scrollbar&apos;s texture from never taking more than its width.

2) TilingData needed to be changed to allow the page to be resized and to add an option for not truncating the right-most and bottom-most tiles to sub-tile texture sizes.  Canvas images don&apos;t change in size, but root layers can certainly get bigger and it seems reasonable to have a constant tile size rather than trying to have smaller textures on the edges of pages.

3) Because tile textures now have border texels, I had to add a texture matrix to the ContentLayerChromium shader.  However, because our use of shaders in the compositor is entangled by all going through the same draw routine, I had to add a bunch of parameters to the drawing code in all the other layers.  If there are ways to make this better, I&apos;d love suggestions.

This patch feels really messy when I look at the diff, so I&apos;d love any suggestions about design, clarity, or even splitting this patch up to be simpler.

(I also need to add more unit tests for the TilingData changes before I commit this and to fix the unit test build errors above.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349253</commentid>
    <comment_count>4</comment_count>
      <attachid>81873</attachid>
    <who name="Vincent Scheib">scheib</who>
    <bug_when>2011-02-10 12:07:01 -0800</bug_when>
    <thetext>Comment on attachment 81873
Patch

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

I looked at the use of TilingData and changes to it. Discussed with Adrienne in person some, and think some code can be simplified, at noted points.

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:184
&gt; +    if (m_textureClampX &gt; 0 &amp;&amp; layerRect.width() &gt; m_textureClampX)

could just set m_textureClampX to max texture size and always run a min() instead of if

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:193
&gt; +    int width = m_textureClampX ? std::min(m_tileSize, m_textureClampX) : m_tileSize;

ditto &quot;could just set m_textureClampX to max texture size and always run a min() instead of if&quot;

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:437
&gt; +            if (m_textureClampX &gt; 0 &amp;&amp; tileRect.width() &gt; m_textureClampX)

just a min() needed if textureClamp always set

&gt; Source/WebCore/platform/graphics/gpu/TilingData.h:75
&gt; +    IntPoint textureOffset(int xIndex, int yIndex) const;

Perhaps rename to make a little clearer that this is returning the boarder on top or left? e.g. have two that say tileTopBorder() ...?

&gt; Source/WebCore/platform/graphics/gpu/TilingData.h:85
&gt; +    bool m_clipEdgeTiles;

Can be pulled out</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349361</commentid>
    <comment_count>5</comment_count>
      <attachid>81873</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-02-10 14:02:52 -0800</bug_when>
    <thetext>Comment on attachment 81873
Patch

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

Overall it looks reasonable.  A couple of starter comments from a quick glance.  I&apos;ll look into more details later..

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:213
&gt; +                                 int textureMatrixLocation);

I would recommend instead of changing the existing drawTexturedQuad method and forcing all layer types to pass additional parameters, to create a new method, preferably in the tiler that deals with drawing these quads.

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:447
&gt; +            texMatrix.scale(tileRect.width(), tileRect.height());

It would be a bit more efficient if instead of using a matrix, you actually passed in a single quad the two offsets and scale factors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349398</commentid>
    <comment_count>6</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-02-10 14:49:38 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 81873 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81873&amp;action=review
&gt; 
&gt; Overall it looks reasonable.  A couple of starter comments from a quick glance.  I&apos;ll look into more details later..

Please wait for the next patch before spending any time looking at it more.  After talking with Vince about his feedback above, a lot of the code gets cleaned up and simpler, so it should be easier to read.

&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:213
&gt; &gt; +                                 int textureMatrixLocation);
&gt; 
&gt; I would recommend instead of changing the existing drawTexturedQuad method and forcing all layer types to pass additional parameters, to create a new method, preferably in the tiler that deals with drawing these quads.

Hmm.  I guess I can create a new shader and set of shared values in the tiler and eventually the ContentLayerChromium and ImageLayerChromium will be switched over to use it.  We&apos;ll just have some duplication in the meantime.

&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:447
&gt; &gt; +            texMatrix.scale(tileRect.width(), tileRect.height());
&gt; 
&gt; It would be a bit more efficient if instead of using a matrix, you actually passed in a single quad the two offsets and scale factors.

Great point.  Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349467</commentid>
    <comment_count>7</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-02-10 15:54:20 -0800</bug_when>
    <thetext>&gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:213
&gt; &gt; &gt; +                                 int textureMatrixLocation);
&gt; &gt; 
&gt; &gt; I would recommend instead of changing the existing drawTexturedQuad method and forcing all layer types to pass additional parameters, to create a new method, preferably in the tiler that deals with drawing these quads.
&gt; 
&gt; Hmm.  I guess I can create a new shader and set of shared values in the tiler and eventually the ContentLayerChromium and ImageLayerChromium will be switched over to use it.  We&apos;ll just have some duplication in the meantime.

I thought that Content and Image layers will get tiled only if they are larger than a certain size (or maybe if they have overflow).  I would expect the simpler, smaller layers to go through the existing path.  Isn&apos;t that the case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349480</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-10 16:08:05 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:213
&gt; &gt; &gt; &gt; +                                 int textureMatrixLocation);
&gt; &gt; &gt; 
&gt; &gt; &gt; I would recommend instead of changing the existing drawTexturedQuad method and forcing all layer types to pass additional parameters, to create a new method, preferably in the tiler that deals with drawing these quads.
&gt; &gt; 
&gt; &gt; Hmm.  I guess I can create a new shader and set of shared values in the tiler and eventually the ContentLayerChromium and ImageLayerChromium will be switched over to use it.  We&apos;ll just have some duplication in the meantime.
&gt; 
&gt; I thought that Content and Image layers will get tiled only if they are larger than a certain size (or maybe if they have overflow).  I would expect the simpler, smaller layers to go through the existing path.  Isn&apos;t that the case?

I&apos;m not sure this is obvious - we may want to just tile everything to improve memory locality and to make the upload bitmaps smaller, which could make allocation of the transfer buffers easier (lots of small uniformly-size allocations fragment a lot less than large irregularly-sized allocations).  We&apos;d probably have to experiment.

The mac compositor avoids tiling on layers whenever possible due to performance problems that we can avoid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349519</commentid>
    <comment_count>9</comment_count>
      <attachid>82073</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-02-10 17:11:07 -0800</bug_when>
    <thetext>Created attachment 82073
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349521</commentid>
    <comment_count>10</comment_count>
      <attachid>82073</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-10 17:15:37 -0800</bug_when>
    <thetext>Comment on attachment 82073
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:49
&gt; +PassOwnPtr&lt;LayerTilerChromium&gt; LayerTilerChromium::create(LayerRendererChromium* layerRenderer, const IntSize&amp; tileSize, bool hasBorderTexels)

a bool is unfortunate here - it&apos;s impossible to tell what the values &apos;true&apos; and &apos;false&apos; mean when looking at a callsite.  how about enum { HasBorderTexels, NoBorderTexels } ?

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:59
&gt; +    , m_tilingData(std::max(tileSize.width(), tileSize.height()), 0, 0, hasBorderTexels)

WebKit style is to add a &apos;using namespace std&apos; declaration and just call max()

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.h:50
&gt; +    static PassOwnPtr&lt;LayerTilerChromium&gt; create(LayerRendererChromium*, const IntSize&amp; tileSize, bool hasBorderTexels);

same here - the bool is pretty opaque</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349530</commentid>
    <comment_count>11</comment_count>
      <attachid>82076</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-02-10 17:27:32 -0800</bug_when>
    <thetext>Created attachment 82076
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349532</commentid>
    <comment_count>12</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-02-10 17:36:33 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Created an attachment (id=82076) [details]
&gt; Patch

I fixed the above things that jamesr mentions.

I&apos;m not terribly happy with the copied fragment shader from ContentLayerChromium, but I don&apos;t see a great way to share it without the two shared value classes becoming very awkwardly coupled together.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349801</commentid>
    <comment_count>13</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-02-11 09:14:40 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; Created an attachment (id=82076) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; I fixed the above things that jamesr mentions.
&gt; 
&gt; I&apos;m not terribly happy with the copied fragment shader from ContentLayerChromium, but I don&apos;t see a great way to share it without the two shared value classes becoming very awkwardly coupled together.

Here&apos;s one possible solution: Create a base SharedValue class that uses static members to store shader strings shared across the derived SharedValues.  I think for example our vertex shader string is shared among most of our shaders.  I&apos;ve also been meaning to start using the macro trick to define shader strings to make them easier to read and also get rid of all the unnecessary spaces we currently have.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349828</commentid>
    <comment_count>14</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-02-11 10:27:59 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; Created an attachment (id=82076) [details] [details] [details]
&gt; &gt; &gt; Patch
&gt; &gt; 
&gt; &gt; I fixed the above things that jamesr mentions.
&gt; &gt; 
&gt; &gt; I&apos;m not terribly happy with the copied fragment shader from ContentLayerChromium, but I don&apos;t see a great way to share it without the two shared value classes becoming very awkwardly coupled together.
&gt; 
&gt; Here&apos;s one possible solution: Create a base SharedValue class that uses static members to store shader strings shared across the derived SharedValues.  I think for example our vertex shader string is shared among most of our shaders.  I&apos;ve also been meaning to start using the macro trick to define shader strings to make them easier to read and also get rid of all the unnecessary spaces we currently have.

That sounds like a great plan.  I think I&apos;d prefer to make this change and then clean up all the compositor shaders in a separate patch immediately following this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349841</commentid>
    <comment_count>15</comment_count>
      <attachid>82076</attachid>
    <who name="Vincent Scheib">scheib</who>
    <bug_when>2011-02-11 10:52:17 -0800</bug_when>
    <thetext>Comment on attachment 82076
Patch

LGTM (TilingData code reviewed)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349945</commentid>
    <comment_count>16</comment_count>
      <attachid>82076</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-11 12:57:02 -0800</bug_when>
    <thetext>Comment on attachment 82076
Patch

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

It looks like this patch doesn&apos;t apply to ToT and so the EWS bots can&apos;t process it.  Would you mind posting a new patch that does apply just to be on the safe side?

&gt; Source/WebCore/ChangeLog:7
&gt; +        [chromium] Modify LayerTilerChromium to use TilingData.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=54143
&gt; +

this needs some sort of description of the patch what&apos;s going on here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350045</commentid>
    <comment_count>17</comment_count>
      <attachid>82180</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-02-11 14:35:23 -0800</bug_when>
    <thetext>Created attachment 82180
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350111</commentid>
    <comment_count>18</comment_count>
      <attachid>82180</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-11 15:42:55 -0800</bug_when>
    <thetext>Comment on attachment 82180
Patch

R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350705</commentid>
    <comment_count>19</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-02-14 09:29:58 -0800</bug_when>
    <thetext>Committed r78484: &lt;http://trac.webkit.org/changeset/78484&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365628</commentid>
    <comment_count>20</comment_count>
      <attachid>85406</attachid>
    <who name="Chris Guillory">ctguil</who>
    <bug_when>2011-03-10 16:18:14 -0800</bug_when>
    <thetext>Created attachment 85406
Fix for Coverity discovered NO_EFFECT (self-assign) defect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365630</commentid>
    <comment_count>21</comment_count>
      <attachid>85406</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-10 16:19:09 -0800</bug_when>
    <thetext>Comment on attachment 85406
Fix for Coverity discovered NO_EFFECT (self-assign) defect.

Hah!  Good catch.

Is there any way our testing could be extended to catch this, enne?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365640</commentid>
    <comment_count>22</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-03-10 16:31:01 -0800</bug_when>
    <thetext>Sure.  It looks like there are some TilingData unit tests that should have been added to when I added that method in the first place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365844</commentid>
    <comment_count>23</comment_count>
      <attachid>85406</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-10 23:45:15 -0800</bug_when>
    <thetext>Comment on attachment 85406
Fix for Coverity discovered NO_EFFECT (self-assign) defect.

Clearing flags on attachment: 85406

Committed r80824: &lt;http://trac.webkit.org/changeset/80824&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366278</commentid>
    <comment_count>24</comment_count>
      <attachid>85519</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-03-11 13:33:20 -0800</bug_when>
    <thetext>Created attachment 85519
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366352</commentid>
    <comment_count>25</comment_count>
      <attachid>85519</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-03-11 15:04:18 -0800</bug_when>
    <thetext>Comment on attachment 85519
Patch

The test looks good. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366377</commentid>
    <comment_count>26</comment_count>
      <attachid>85519</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-11 15:39:34 -0800</bug_when>
    <thetext>Comment on attachment 85519
Patch

Clearing flags on attachment: 85519

Committed r80894: &lt;http://trac.webkit.org/changeset/80894&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366378</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-11 15:39:39 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81873</attachid>
            <date>2011-02-09 14:13:10 -0800</date>
            <delta_ts>2011-02-10 17:11:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54143-20110209141309.patch</filename>
            <type>text/plain</type>
            <size>39502</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzgwNTAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3YWE1MzVlMzdmZTU4NjJm
ZTJlOTg2MjFmYjUxMjhiODEwZjYyNzJlLi5mYmRkYzg1NWIzNTM3MjU5MWZjMzI4NWM1YmFiMTBh
MGIwNjUwZWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTEtMDItMDkgIEFkcmll
bm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIE1vZGlmeSBMYXllclRpbGVyQ2hyb21p
dW0gdG8gdXNlIFRpbGluZ0RhdGEuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01NDE0MworCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXll
ckNocm9taXVtOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJD
aHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpTaGFyZWRWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudExheWVyQ2hyb21pdW06OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpzaGFkZXJUZXhNYXRyaXhMb2NhdGlvbik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjp0b0dMTWF0cml4KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3
Um9vdExheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRp
bGVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpMYXllclRpbGVy
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjphbGxvY1Bh
aW50QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6cmVzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpjb250ZW50UmVjdFRvVGls
ZUluZGljZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjp0aWxlSW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjp0aWxlQ29udGVudFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjp0aWxlTGF5ZXJSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6dGV4dHVyZVNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpsYXllclNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpsYXllclRpbGVTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6aW52YWxpZGF0ZUVudGlyZUxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6dXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6c2V0VGV4dHVyZUNsYW1wWCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnNldFRleHR1cmVDbGFtcFkpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGlsZXJDaHJvbWl1bTo6cmVzaXplTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
aWxlckNocm9taXVtOjpncm93TGF5ZXJUb0NvbnRhaW4pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6ZHJhd1N1cmZhY2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OmRyYXdZVVYpOgorICAgICAgICAoV2ViQ29yZTo6
VmlkZW9MYXllckNocm9taXVtOjpkcmF3UkdCQSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L1RleHR1cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZTo6VGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVO
dW1UaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjpUaWxpbmdEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OnNldFRvdGFsU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxpbmdEYXRhOjp0aWxlU2l6ZVgpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0
YTo6dGlsZVNpemVZKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OnRleHR1cmVPZmZz
ZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmg6CisKIDIw
MTEtMDItMDkgIEx1Y2FzIERlIE1hcmNoaSAgPGx1Y2FzLmRlbWFyY2hpQHByb2Z1c2lvbi5tb2Jp
PgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNo
cm9taXVtLmNwcAppbmRleCA0YWVmMjViMTVhZWZlOTQ0MDUyMjE3NDQ0YjlhZGNhMGNmMmExZmRm
Li5kYTFjNWM5NzAwYTJlMWZlYmUwMWZiMjVmMDQ5YzVjZTdjNjFlYzM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXNMYXllckNocm9taXVtLmNwcApAQCAtMTE2LDkgKzExNiwxMSBAQCB2b2lkIENhbnZhc0xh
eWVyQ2hyb21pdW06OmRyYXcoKQogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpKTsKICAgICBsYXll
clJlbmRlcmVyKCktPnVzZVNoYWRlcihzdi0+Y2FudmFzU2hhZGVyUHJvZ3JhbSgpKTsKICAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHN2LT5zaGFkZXJTYW1wbGVyTG9jYXRpb24o
KSwgMCkpOworICAgIEFmZmluZVRyYW5zZm9ybSB0ZXhNYXRyaXg7CiAgICAgZHJhd1RleHR1cmVk
UXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwgZHJhd1Ry
YW5zZm9ybSgpLAotICAgICAgICAgICAgICAgICAgICAgYm91bmRzKCkud2lkdGgoKSwgYm91bmRz
KCkuaGVpZ2h0KCksIGRyYXdPcGFjaXR5KCksCi0gICAgICAgICAgICAgICAgICAgICBzdi0+c2hh
ZGVyTWF0cml4TG9jYXRpb24oKSwgc3YtPnNoYWRlckFscGhhTG9jYXRpb24oKSk7CisgICAgICAg
ICAgICAgICAgICAgICB0ZXhNYXRyaXgsIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdo
dCgpLCBkcmF3T3BhY2l0eSgpLAorICAgICAgICAgICAgICAgICAgICAgc3YtPnNoYWRlck1hdHJp
eExvY2F0aW9uKCksIHN2LT5zaGFkZXJBbHBoYUxvY2F0aW9uKCksCisgICAgICAgICAgICAgICAg
ICAgICAtMSk7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4
IGEzOGY2YmQyMTI2OTBhMjhmOTgzOGRiODk2MzVhODQxNGNiNmQ3N2UuLmJlNDYzYTFjMmM0OGY0
YmEyNWJkYzUzOTJmNzcyYWVjY2QyNTNhYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5jcHAKQEAgLTU2LDYgKzU2LDcgQEAgQ29udGVudExheWVyQ2hyb21pdW06OlNoYXJlZFZh
bHVlczo6U2hhcmVkVmFsdWVzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgICwgbV9z
aGFkZXJTYW1wbGVyTG9jYXRpb24oLTEpCiAgICAgLCBtX3NoYWRlck1hdHJpeExvY2F0aW9uKC0x
KQogICAgICwgbV9zaGFkZXJBbHBoYUxvY2F0aW9uKC0xKQorICAgICwgbV9zaGFkZXJUZXhNYXRy
aXhMb2NhdGlvbigtMSkKICAgICAsIG1faW5pdGlhbGl6ZWQoZmFsc2UpCiB7CiAgICAgLy8gU2hh
ZGVycyBmb3IgZHJhd2luZyB0aGUgbGF5ZXIgY29udGVudHMuCkBAIC02NCwxMCArNjUsMTEgQEAg
Q29udGVudExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWVzKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KQogICAgICAgICAiYXR0cmlidXRlIHZlYzIgYV90ZXhDb29yZDsg
ICBcbiIKICAgICAgICAgInVuaWZvcm0gbWF0NCBtYXRyaXg7ICAgICAgICAgXG4iCiAgICAgICAg
ICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgIFxuIgorICAgICAgICAidW5pZm9ybSBtYXQz
IHRleE1hdHJpeDsgICAgICBcbiIKICAgICAgICAgInZvaWQgbWFpbigpICAgICAgICAgICAgICAg
ICAgXG4iCiAgICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgogICAgICAg
ICAiICBnbF9Qb3NpdGlvbiA9IG1hdHJpeCAqIGFfcG9zaXRpb247IFxuIgotICAgICAgICAiICB2
X3RleENvb3JkID0gYV90ZXhDb29yZDsgICBcbiIKKyAgICAgICAgIiAgdl90ZXhDb29yZCA9IHZl
YzIodGV4TWF0cml4ICogdmVjMyhhX3RleENvb3JkLCAxKSk7IFxuIgogICAgICAgICAifSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcbiI7CiAKICNpZiBQTEFURk9STShTS0lBKQpAQCAtMTEx
LDkgKzExMywxMSBAQCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpTaGFyZWRW
YWx1ZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgbV9zaGFkZXJTYW1wbGVyTG9j
YXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX2NvbnRlbnRTaGFkZXJQcm9n
cmFtLCAic190ZXh0dXJlIik7CiAgICAgbV9zaGFkZXJNYXRyaXhMb2NhdGlvbiA9IG1fY29udGV4
dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1fY29udGVudFNoYWRlclByb2dyYW0sICJtYXRyaXgiKTsK
ICAgICBtX3NoYWRlckFscGhhTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlv
bihtX2NvbnRlbnRTaGFkZXJQcm9ncmFtLCAiYWxwaGEiKTsKKyAgICBtX3NoYWRlclRleE1hdHJp
eExvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9jb250ZW50U2hhZGVy
UHJvZ3JhbSwgInRleE1hdHJpeCIpOwogICAgIEFTU0VSVChtX3NoYWRlclNhbXBsZXJMb2NhdGlv
biAhPSAtMSk7CiAgICAgQVNTRVJUKG1fc2hhZGVyTWF0cml4TG9jYXRpb24gIT0gLTEpOwogICAg
IEFTU0VSVChtX3NoYWRlckFscGhhTG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChtX3NoYWRl
clRleE1hdHJpeExvY2F0aW9uICE9IC0xKTsKIAogICAgIG1faW5pdGlhbGl6ZWQgPSB0cnVlOwog
fQpAQCAtMzQ3LDE5ICszNTEsMjEgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhdygp
CiAgICAgbGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIoc3YtPmNvbnRlbnRTaGFkZXJQcm9ncmFt
KCkpOwogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkoc3YtPnNoYWRlclNhbXBs
ZXJMb2NhdGlvbigpLCAwKSk7CiAKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdGV4TWF0cml4OwogICAg
IGlmIChyZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkpIHsKICAgICAgICAgZmxvYXQgbTQzID0g
ZHJhd1RyYW5zZm9ybSgpLm00MygpOwogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFu
c2Zvcm07CiAgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUzZChtX2xheWVyQ2VudGVySW5TdXJm
YWNlQ29vcmRzLngoKSwgbV9sYXllckNlbnRlckluU3VyZmFjZUNvb3Jkcy55KCksIG00Myk7CiAg
ICAgICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0
aW9uTWF0cml4KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLCBtX3Zpc2li
bGVSZWN0SW5MYXllckNvb3Jkcy53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRy
YW5zZm9ybSwgdGV4TWF0cml4LCBtX3Zpc2libGVSZWN0SW5MYXllckNvb3Jkcy53aWR0aCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzLmhlaWdo
dCgpLCBkcmF3T3BhY2l0eSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN2LT5zaGFkZXJN
YXRyaXhMb2NhdGlvbigpLCBzdi0+c2hhZGVyQWxwaGFMb2NhdGlvbigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBzdi0+c2hhZGVyTWF0cml4TG9jYXRpb24oKSwgc3YtPnNoYWRlckFscGhh
TG9jYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdi0+c2hhZGVyVGV4TWF0cml4
TG9jYXRpb24oKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZHJhd1RleHR1cmVkUXVhZChjb250
ZXh0LCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBkcmF3VHJhbnNmb3JtKCksIG1fYm91bmRzLndpZHRoKCksIG1fYm91bmRzLmhl
aWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdUcmFuc2Zvcm0oKSwgdGV4TWF0
cml4LCBtX2JvdW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBkcmF3T3BhY2l0eSgpLCBzdi0+c2hhZGVyTWF0cml4TG9jYXRpb24oKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBzdi0+c2hhZGVyQWxwaGFMb2NhdGlvbigpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBzdi0+c2hhZGVyQWxwaGFMb2NhdGlvbigpLCBzdi0+c2hhZGVy
VGV4TWF0cml4TG9jYXRpb24oKSk7CiAgICAgfQogICAgIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVy
ZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKaW5kZXggMzM2MzUxOGRhNTMx
YWM2MGQzMGQ3ZjgwZTdmNWM3NjAzYzMyYTM4MC4uZmFiYTkwOWFmZjVhNjE5Mjc3Yzk0Y2ZlNDNh
ODBmYjI1YzU3MTdlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCkBAIC02OCw2
ICs2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgaW50IHNoYWRlclNhbXBsZXJMb2NhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fc2hhZGVyU2FtcGxlckxvY2F0aW9uOyB9CiAgICAgICAgIGludCBzaGFk
ZXJNYXRyaXhMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZGVyTWF0cml4TG9jYXRpb247
IH0KICAgICAgICAgaW50IHNoYWRlckFscGhhTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3No
YWRlckFscGhhTG9jYXRpb247IH0KKyAgICAgICAgaW50IHNoYWRlclRleE1hdHJpeExvY2F0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9zaGFkZXJUZXhNYXRyaXhMb2NhdGlvbjsgfQogICAgICAgICBp
bnQgaW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWxpemVkOyB9CiAKICAgICBw
cml2YXRlOgpAQCAtNzYsNiArNzcsNyBAQCBwdWJsaWM6CiAgICAgICAgIGludCBtX3NoYWRlclNh
bXBsZXJMb2NhdGlvbjsKICAgICAgICAgaW50IG1fc2hhZGVyTWF0cml4TG9jYXRpb247CiAgICAg
ICAgIGludCBtX3NoYWRlckFscGhhTG9jYXRpb247CisgICAgICAgIGludCBtX3NoYWRlclRleE1h
dHJpeExvY2F0aW9uOwogICAgICAgICBpbnQgbV9pbml0aWFsaXplZDsKICAgICB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uY3BwCmluZGV4IDhkMDFkOWJkOWFhNDllNjFjOTZhOWVjY2I3NjZkY2IxMDFl
MzZlZTMuLjg5OGI1ZDMyODI3OGVhMGY1ZWNkN2ZjOTc1YmE2MzJmMjk1NWRjMjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uY3BwCkBAIC0zOTcsNiArMzk3LDE5IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6
cmVzZXROZWVkc0Rpc3BsYXkoKQogICAgIG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOwogfQogCit2
b2lkIExheWVyQ2hyb21pdW06OnRvR0xNYXRyaXgoZmxvYXQqIGZsYXR0ZW5lZCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBtKQoreworICAgIGZsYXR0ZW5lZFswXSA9IG0uYSgpOworICAgIGZsYXR0
ZW5lZFsxXSA9IG0uYigpOworICAgIGZsYXR0ZW5lZFsyXSA9IDAuMGY7CisgICAgZmxhdHRlbmVk
WzNdID0gbS5jKCk7CisgICAgZmxhdHRlbmVkWzRdID0gbS5kKCk7CisgICAgZmxhdHRlbmVkWzVd
ID0gMC4wZjsKKyAgICBmbGF0dGVuZWRbNl0gPSBtLmUoKTsKKyAgICBmbGF0dGVuZWRbN10gPSBt
LmYoKTsKKyAgICBmbGF0dGVuZWRbOF0gPSAxLjBmOworfQorCiB2b2lkIExheWVyQ2hyb21pdW06
OnRvR0xNYXRyaXgoZmxvYXQqIGZsYXR0ZW5lZCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG0pCiB7CiAgICAgZmxhdHRlbmVkWzBdID0gbS5tMTEoKTsKQEAgLTQyNCw4ICs0MzcsMTAgQEAg
R3JhcGhpY3NDb250ZXh0M0QqIExheWVyQ2hyb21pdW06OmxheWVyUmVuZGVyZXJDb250ZXh0KCkg
Y29uc3QKIH0KIAogdm9pZCBMYXllckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcHJvamVjdGlv
bk1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdNYXRyaXgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwg
ZmxvYXQgb3BhY2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
bWF0cml4TG9jYXRpb24sIGludCBhbHBoYUxvY2F0aW9uKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRleFRyYW5zZm9ybSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgb3BhY2l0
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1hdHJpeExvY2F0aW9uLCBpbnQg
YWxwaGFMb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRleE1hdHJp
eExvY2F0aW9uKQogewogICAgIHN0YXRpYyBmbG9hdCBnbE1hdHJpeFsxNl07CiAKQEAgLTQ0Miw2
ICs0NTcsMTIgQEAgdm9pZCBMYXllckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBUcmFuc2Zvcm0KICAgICBpZiAoYWxwaGFMb2NhdGlv
biAhPSAtMSkKICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xZihhbHBoYUxv
Y2F0aW9uLCBvcGFjaXR5KSk7CiAKKyAgICBpZiAodGV4TWF0cml4TG9jYXRpb24gIT0gLTEpIHsK
KyAgICAgICAgZmxvYXQgdGV4TWF0cml4WzldOworICAgICAgICB0b0dMTWF0cml4KCZ0ZXhNYXRy
aXhbMF0sIHRleFRyYW5zZm9ybSk7CisgICAgICAgIGNvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYo
dGV4TWF0cml4TG9jYXRpb24sIGZhbHNlLCB0ZXhNYXRyaXgsIDEpOworICAgIH0KKwogICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFO
R0xFUywgNiwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKSk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uaAppbmRleCA1YzdlMmIxNDIxNzdjY2Y2OTJhYWE0YzM2YTJlMjhmMGM2ZGYx
Yzg2Li4wNGM1MzM5NWVjMmIzMmI2Y2M2ZDQ2N2EyMjQwZmZkZGNiODM3ZTcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5oCkBAIC0yMDcsOSArMjA3LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdW5zaWdu
ZWQgY3JlYXRlU2hhZGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IGNoYXIqIHZl
cnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpOwogCiAg
ICAgc3RhdGljIHZvaWQgZHJhd1RleHR1cmVkUXVhZChHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwcm9qZWN0aW9uTWF0cml4LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbGF5ZXJNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRleHR1cmVNYXRyaXgsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBvcGFjaXR5
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1hdHJpeExvY2F0aW9uLCBp
bnQgYWxwaGFMb2NhdGlvbik7Ci0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBtYXRyaXhMb2NhdGlvbiwgaW50IGFscGhhTG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgdGV4dHVyZU1hdHJpeExvY2F0aW9uKTsKIHByb3RlY3RlZDoKICAg
ICBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG1fb3duZXI7CiAgICAgTGF5ZXJDaHJvbWl1bShHcmFw
aGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKQEAgLTIyNSw2ICsyMjYsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgYm9vbCBkZXNjZW5kYW50c0RyYXdDb250ZW50KCk7CiAKICAgICBzdGF0aWMgdm9pZCB0
b0dMTWF0cml4KGZsb2F0KiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICBzdGF0
aWMgdm9pZCB0b0dMTWF0cml4KGZsb2F0KiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAKICAg
ICBJbnRTaXplIG1fYm91bmRzOwogICAgIEZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGY1NTQ4YzlmNjNmMzZiNGEzZjI1NTNi
YWU4NTg0ZWVkMDQxOGNhNzEuLjk1MDQ3NWYxN2M4ZjFjOGE5MDkzMjI3YjQyYzA1ZTFmZTE2OGZh
MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtMTEyLDcgKzEx
Miw3IEBAIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRlCiAgICAgLCBtX2RlZmF1bHRSZW5kZXJTdXJm
YWNlKDApCiB7CiAgICAgbV9oYXJkd2FyZUNvbXBvc2l0aW5nID0gaW5pdGlhbGl6ZVNoYXJlZE9i
amVjdHMoKTsKLSAgICBtX3Jvb3RMYXllclRpbGVyID0gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVh
dGUodGhpcywgSW50U2l6ZSgyNTYsIDI1NikpOworICAgIG1fcm9vdExheWVyVGlsZXIgPSBMYXll
clRpbGVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCAyNTYsIGZhbHNlKTsKICAgICBBU1NFUlQobV9y
b290TGF5ZXJUaWxlcik7CiB9CiAKQEAgLTE3NywxMyArMTc3LDEzIEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3Um9vdExheWVyKFRpbGVQYWludEludGVyZmFjZSYg
dGlsZVBhaW50CiAgICAgbV9yb290TGF5ZXJUaWxlci0+dXBkYXRlKHRpbGVQYWludCwgdmlzaWJs
ZVJlY3QpOwogICAgIG1fcm9vdExheWVyVGlsZXItPmRyYXcodmlzaWJsZVJlY3QpOwogCisgICAg
Y29uc3QgaW50IG1heFNjcm9sbGJhclRpbGUgPSAxMDI0OwogICAgIGlmICh2aXNpYmxlUmVjdC53
aWR0aCgpID4gY29udGVudFJlY3Qud2lkdGgoKSkgewogICAgICAgICBJbnRSZWN0IHZlcnRpY2Fs
U2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXJSZWN0KHZpc2libGVSZWN0LCBjb250ZW50UmVj
dCk7Ci0gICAgICAgIEludFNpemUgdGlsZVNpemUgPSB2ZXJ0aWNhbFNjcm9sbGJhci5zaXplKCku
c2hydW5rVG8oSW50U2l6ZShtX21heFRleHR1cmVTaXplLCBtX21heFRleHR1cmVTaXplKSk7CiAg
ICAgICAgIGlmICghbV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyKQotICAgICAgICAgICAgbV92ZXJ0
aWNhbFNjcm9sbGJhclRpbGVyID0gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUodGhpcywgdGls
ZVNpemUpOworICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyID0gTGF5ZXJUaWxl
ckNocm9taXVtOjpjcmVhdGUodGhpcywgbWF4U2Nyb2xsYmFyVGlsZSwgZmFsc2UsIHZlcnRpY2Fs
U2Nyb2xsYmFyLndpZHRoKCksIDApOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyVGlsZXItPnNldFRpbGVTaXplKHRpbGVTaXplKTsKKyAgICAgICAgICAgIG1f
dmVydGljYWxTY3JvbGxiYXJUaWxlci0+c2V0VGV4dHVyZUNsYW1wWCh2ZXJ0aWNhbFNjcm9sbGJh
ci53aWR0aCgpKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyLT5zZXRMYXllclBv
c2l0aW9uKHZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwogICAgICAgICBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyVGlsZXItPnVwZGF0ZShzY3JvbGxiYXJQYWludCwgdmlzaWJsZVJlY3QpOwogICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXItPmRyYXcodmlzaWJsZVJlY3QpOwpAQCAtMTkx
LDExICsxOTEsMTAgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERyYXdS
b290TGF5ZXIoVGlsZVBhaW50SW50ZXJmYWNlJiB0aWxlUGFpbnQKIAogICAgIGlmICh2aXNpYmxl
UmVjdC5oZWlnaHQoKSA+IGNvbnRlbnRSZWN0LmhlaWdodCgpKSB7CiAgICAgICAgIEludFJlY3Qg
aG9yaXpvbnRhbFNjcm9sbGJhciA9IGhvcml6b250YWxTY3JvbGxiYXJSZWN0KHZpc2libGVSZWN0
LCBjb250ZW50UmVjdCk7Ci0gICAgICAgIEludFNpemUgdGlsZVNpemUgPSBob3Jpem9udGFsU2Ny
b2xsYmFyLnNpemUoKS5zaHJ1bmtUbyhJbnRTaXplKG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4VGV4
dHVyZVNpemUpKTsKICAgICAgICAgaWYgKCFtX2hvcml6b250YWxTY3JvbGxiYXJUaWxlcikKLSAg
ICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyID0gTGF5ZXJUaWxlckNocm9taXVt
OjpjcmVhdGUodGhpcywgdGlsZVNpemUpOworICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xs
YmFyVGlsZXIgPSBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBtYXhTY3JvbGxiYXJU
aWxlLCBmYWxzZSwgMCwgaG9yaXpvbnRhbFNjcm9sbGJhci5oZWlnaHQoKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyLT5zZXRUaWxlU2l6ZSh0
aWxlU2l6ZSk7CisgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJUaWxlci0+c2V0VGV4
dHVyZUNsYW1wWShob3Jpem9udGFsU2Nyb2xsYmFyLmhlaWdodCgpKTsKICAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyVGlsZXItPnNldExheWVyUG9zaXRpb24oaG9yaXpvbnRhbFNjcm9sbGJh
ci5sb2NhdGlvbigpKTsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXItPnVwZGF0
ZShzY3JvbGxiYXJQYWludCwgdmlzaWJsZVJlY3QpOwogICAgICAgICBtX2hvcml6b250YWxTY3Jv
bGxiYXJUaWxlci0+ZHJhdyh2aXNpYmxlUmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVt
LmNwcAppbmRleCBlMWJmODk4NTRiMTIwYjU3ZTg2NjgwNTUwMWJlMGI4N2UzMWMyY2ZkLi5jMDdi
NzIwZDUzZTM5OTM4MDRjZjJhYTdjOTRjODUwNzA4ZTVlNzJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGls
ZXJDaHJvbWl1bS5jcHAKQEAgLTQ2LDE5ICs0NiwyMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVBhc3NPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtPiBMYXllclRpbGVyQ2hyb21pdW06OmNy
ZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFNpemUm
IHRpbGVTaXplKQorUGFzc093blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IExheWVyVGlsZXJDaHJv
bWl1bTo6Y3JlYXRlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgaW50IHRp
bGVTaXplLCBib29sIGhhc0JvcmRlclRleGVscywgaW50IHRleHR1cmVDbGFtcFgsIGludCB0ZXh0
dXJlQ2xhbXBZKQogewotICAgIGlmICghbGF5ZXJSZW5kZXJlciB8fCB0aWxlU2l6ZS5pc0VtcHR5
KCkpCisgICAgaWYgKCFsYXllclJlbmRlcmVyIHx8ICF0aWxlU2l6ZSkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyVGlsZXJDaHJvbWl1bShsYXllclJl
bmRlcmVyLCB0aWxlU2l6ZSkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJUaWxlckNo
cm9taXVtKGxheWVyUmVuZGVyZXIsIHRpbGVTaXplLCBoYXNCb3JkZXJUZXhlbHMsIHRleHR1cmVD
bGFtcFgsIHRleHR1cmVDbGFtcFkpKTsKIH0KIAotTGF5ZXJUaWxlckNocm9taXVtOjpMYXllclRp
bGVyQ2hyb21pdW0oTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJ
bnRTaXplJiB0aWxlU2l6ZSkKLSAgICA6IG1fc2tpcHNEcmF3KGZhbHNlKQorTGF5ZXJUaWxlckNo
cm9taXVtOjpMYXllclRpbGVyQ2hyb21pdW0oTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJl
bmRlcmVyLCBpbnQgdGlsZVNpemUsIGJvb2wgaGFzQm9yZGVyVGV4ZWxzLCBpbnQgdGV4dHVyZUNs
YW1wWCwgaW50IHRleHR1cmVDbGFtcFkpCisgICAgOiBtX3RpbGVTaXplKHRpbGVTaXplKQorICAg
ICwgbV90ZXh0dXJlQ2xhbXBYKHRleHR1cmVDbGFtcFgpCisgICAgLCBtX3RleHR1cmVDbGFtcFko
dGV4dHVyZUNsYW1wWSkKKyAgICAsIG1fc2tpcHNEcmF3KGZhbHNlKQorICAgICwgbV90aWxpbmdE
YXRhKHRpbGVTaXplLCAwLCAwLCBoYXNCb3JkZXJUZXhlbHMsIHRydWUpCiAgICAgLCBtX2xheWVy
UmVuZGVyZXIobGF5ZXJSZW5kZXJlcikKIHsKLSAgICBzZXRUaWxlU2l6ZSh0aWxlU2l6ZSk7Cisg
ICAgYWxsb2NQYWludEJ1ZmZlcigpOwogfQogCiBMYXllclRpbGVyQ2hyb21pdW06On5MYXllclRp
bGVyQ2hyb21pdW0oKQpAQCAtNzIsMTUgKzc2LDEwIEBAIEdyYXBoaWNzQ29udGV4dDNEKiBMYXll
clRpbGVyQ2hyb21pdW06OmxheWVyUmVuZGVyZXJDb250ZXh0KCkgY29uc3QKICAgICByZXR1cm4g
bGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCk7CiB9CiAKLXZvaWQgTGF5ZXJUaWxlckNocm9taXVt
OjpzZXRUaWxlU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQordm9pZCBMYXllclRpbGVyQ2hyb21p
dW06OmFsbG9jUGFpbnRCdWZmZXIoKQogewotICAgIGlmIChtX3RpbGVTaXplID09IHNpemUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHJlc2V0KCk7Ci0KLSAgICBtX3RpbGVTaXplID0gc2l6ZTsK
LSAgICBtX3RpbGVQaXhlbHMgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50OF90W21fdGlsZVNpemUu
d2lkdGgoKSAqIG1fdGlsZVNpemUuaGVpZ2h0KCkgKiA0XSk7CisgICAgSW50U2l6ZSB0ZXggPSB0
ZXh0dXJlU2l6ZSgpOworICAgIG1fdGlsZVBpeGVscyA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQ4
X3RbdGV4LndpZHRoKCkgKiB0ZXguaGVpZ2h0KCkgKiA0XSk7CiB9CiAKIHZvaWQgTGF5ZXJUaWxl
ckNocm9taXVtOjpyZXNldCgpCkBAIC04OCw4ICs4Nyw3IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9t
aXVtOjpyZXNldCgpCiAgICAgbV90aWxlcy5jbGVhcigpOwogICAgIG1fdW51c2VkVGlsZXMuY2xl
YXIoKTsKIAotICAgIG1fbGF5ZXJTaXplID0gSW50U2l6ZSgpOwotICAgIG1fbGF5ZXJUaWxlU2l6
ZSA9IEludFNpemUoKTsKKyAgICBtX3RpbGluZ0RhdGEuc2V0VG90YWxTaXplKDAsIDApOwogICAg
IG1fbGFzdFVwZGF0ZUxheWVyUmVjdCA9IEludFJlY3QoKTsKIH0KIApAQCAtMTQzLDEwICsxNDEs
MTAgQEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgaW4KIHsKICAgICBjb25zdCBJbnRSZWN0IGxheWVy
UmVjdCA9IGNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOwogCi0gICAgbGVmdCA9
IGxheWVyUmVjdC54KCkgLyBtX3RpbGVTaXplLndpZHRoKCk7Ci0gICAgdG9wID0gbGF5ZXJSZWN0
LnkoKSAvIG1fdGlsZVNpemUuaGVpZ2h0KCk7Ci0gICAgcmlnaHQgPSAobGF5ZXJSZWN0Lm1heFgo
KSAtIDEpIC8gbV90aWxlU2l6ZS53aWR0aCgpOwotICAgIGJvdHRvbSA9IChsYXllclJlY3QubWF4
WSgpIC0gMSkgLyBtX3RpbGVTaXplLmhlaWdodCgpOworICAgIGxlZnQgPSBtX3RpbGluZ0RhdGEu
dGlsZVhJbmRleEZyb21TcmNDb29yZChsYXllclJlY3QueCgpKTsKKyAgICB0b3AgPSBtX3RpbGlu
Z0RhdGEudGlsZVlJbmRleEZyb21TcmNDb29yZChsYXllclJlY3QueSgpKTsKKyAgICByaWdodCA9
IG1fdGlsaW5nRGF0YS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKGxheWVyUmVjdC5tYXhYKCkpOwor
ICAgIGJvdHRvbSA9IG1fdGlsaW5nRGF0YS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKGxheWVyUmVj
dC5tYXhZKCkpOwogfQogCiBJbnRSZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6Y29udGVudFJlY3RU
b0xheWVyUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKQEAgLTE2OSwyMiAr
MTY3LDQyIEBAIEludFJlY3QgTGF5ZXJUaWxlckNocm9taXVtOjpsYXllclJlY3RUb0NvbnRlbnRS
ZWN0KGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCkgY29uCiAKIGludCBMYXllclRpbGVyQ2hyb21p
dW06OnRpbGVJbmRleChpbnQgaSwgaW50IGopIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGkgPj0gMCAm
JiBqID49IDAgJiYgaSA8IG1fbGF5ZXJUaWxlU2l6ZS53aWR0aCgpICYmIGogPCBtX2xheWVyVGls
ZVNpemUuaGVpZ2h0KCkpOwotICAgIHJldHVybiBpICsgaiAqIG1fbGF5ZXJUaWxlU2l6ZS53aWR0
aCgpOworICAgIHJldHVybiBtX3RpbGluZ0RhdGEudGlsZUluZGV4KGksIGopOwogfQogCiBJbnRS
ZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6dGlsZUNvbnRlbnRSZWN0KGludCBpLCBpbnQgaikgY29u
c3QKIHsKLSAgICBJbnRQb2ludCBhbmNob3IobV9sYXllclBvc2l0aW9uLngoKSArIGkgKiBtX3Rp
bGVTaXplLndpZHRoKCksIG1fbGF5ZXJQb3NpdGlvbi55KCkgKyBqICogbV90aWxlU2l6ZS5oZWln
aHQoKSk7Ci0gICAgSW50UmVjdCB0aWxlKGFuY2hvciwgbV90aWxlU2l6ZSk7Ci0gICAgcmV0dXJu
IHRpbGU7CisgICAgSW50UmVjdCBjb250ZW50UmVjdCA9IHRpbGVMYXllclJlY3QoaSwgaik7Cisg
ICAgY29udGVudFJlY3QubW92ZShtX2xheWVyUG9zaXRpb24ueCgpLCBtX2xheWVyUG9zaXRpb24u
eSgpKTsKKyAgICByZXR1cm4gY29udGVudFJlY3Q7CiB9CiAKIEludFJlY3QgTGF5ZXJUaWxlckNo
cm9taXVtOjp0aWxlTGF5ZXJSZWN0KGludCBpLCBpbnQgaikgY29uc3QKIHsKLSAgICBJbnRQb2lu
dCBhbmNob3IoaSAqIG1fdGlsZVNpemUud2lkdGgoKSwgaiAqIG1fdGlsZVNpemUuaGVpZ2h0KCkp
OwotICAgIEludFJlY3QgdGlsZShhbmNob3IsIG1fdGlsZVNpemUpOwotICAgIHJldHVybiB0aWxl
OworICAgIGNvbnN0IGludCBpbmRleCA9IG1fdGlsaW5nRGF0YS50aWxlSW5kZXgoaSwgaik7Cisg
ICAgSW50UmVjdCBsYXllclJlY3QgPSBtX3RpbGluZ0RhdGEudGlsZUJvdW5kc1dpdGhCb3JkZXIo
aW5kZXgpOworICAgIGlmIChtX3RleHR1cmVDbGFtcFggPiAwICYmIGxheWVyUmVjdC53aWR0aCgp
ID4gbV90ZXh0dXJlQ2xhbXBYKQorICAgICAgICBsYXllclJlY3Quc2V0V2lkdGgobV90ZXh0dXJl
Q2xhbXBYKTsKKyAgICBpZiAobV90ZXh0dXJlQ2xhbXBZID4gMCAmJiBsYXllclJlY3QuaGVpZ2h0
KCkgPiBtX3RleHR1cmVDbGFtcFkpCisgICAgICAgIGxheWVyUmVjdC5zZXRIZWlnaHQobV90ZXh0
dXJlQ2xhbXBZKTsKKyAgICByZXR1cm4gbGF5ZXJSZWN0OworfQorCitJbnRTaXplIExheWVyVGls
ZXJDaHJvbWl1bTo6dGV4dHVyZVNpemUoKSBjb25zdAoreworICAgIGludCB3aWR0aCA9IG1fdGV4
dHVyZUNsYW1wWCA/IHN0ZDo6bWluKG1fdGlsZVNpemUsIG1fdGV4dHVyZUNsYW1wWCkgOiBtX3Rp
bGVTaXplOworICAgIGludCBoZWlnaHQgPSBtX3RleHR1cmVDbGFtcFkgPyBzdGQ6Om1pbihtX3Rp
bGVTaXplLCBtX3RleHR1cmVDbGFtcFkpIDogbV90aWxlU2l6ZTsKKyAgICByZXR1cm4gSW50U2l6
ZSh3aWR0aCwgaGVpZ2h0KTsKK30KKworSW50U2l6ZSBMYXllclRpbGVyQ2hyb21pdW06OmxheWVy
U2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFNpemUobV90aWxpbmdEYXRhLnRvdGFsU2l6
ZVgoKSwgbV90aWxpbmdEYXRhLnRvdGFsU2l6ZVkoKSk7Cit9CisKK0ludFNpemUgTGF5ZXJUaWxl
ckNocm9taXVtOjpsYXllclRpbGVTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZSht
X3RpbGluZ0RhdGEubnVtVGlsZXNYKCksIG1fdGlsaW5nRGF0YS5udW1UaWxlc1koKSk7CiB9CiAK
IHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCkKQEAgLTIyMCw4ICsyMzgsNyBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6
aW52YWxpZGF0ZUVudGlyZUxheWVyKCkKICAgICB9CiAgICAgbV90aWxlcy5jbGVhcigpOwogCi0g
ICAgbV9sYXllclNpemUgPSBJbnRTaXplKCk7Ci0gICAgbV9sYXllclRpbGVTaXplID0gSW50U2l6
ZSgpOworICAgIG1fdGlsaW5nRGF0YS5zZXRUb3RhbFNpemUoMCwgMCk7CiAgICAgbV9sYXN0VXBk
YXRlTGF5ZXJSZWN0ID0gSW50UmVjdCgpOwogfQogCkBAIC0yMzgsNiArMjU1LDggQEAgdm9pZCBM
YXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZShUaWxlUGFpbnRJbnRlcmZhY2UmIHBhaW50ZXIsIGNv
bnN0IEludFJlY3QmIGNvbnQKIAogICAgIGdyb3dMYXllclRvQ29udGFpbihjb250ZW50UmVjdCk7
CiAKKyAgICBjb25zdCBJbnRTaXplIHRleFNpemUgPSB0ZXh0dXJlU2l6ZSgpOworCiAgICAgLy8g
Q3JlYXRlIHRpbGVzIGFzIG5lZWRlZCwgZXhwYW5kaW5nIGEgZGlydHkgcmVjdCB0byBjb250YWlu
IGFsbAogICAgIC8vIHRoZSBkaXJ0eSByZWdpb25zIGN1cnJlbnRseSBiZWluZyBkcmF3bi4KICAg
ICBJbnRSZWN0IGRpcnR5TGF5ZXJSZWN0OwpAQCAtMjQ4LDcgKzI2Nyw3IEBAIHZvaWQgTGF5ZXJU
aWxlckNocm9taXVtOjp1cGRhdGUoVGlsZVBhaW50SW50ZXJmYWNlJiBwYWludGVyLCBjb25zdCBJ
bnRSZWN0JiBjb250CiAgICAgICAgICAgICBUaWxlKiB0aWxlID0gbV90aWxlc1t0aWxlSW5kZXgo
aSwgaildLmdldCgpOwogICAgICAgICAgICAgaWYgKCF0aWxlKQogICAgICAgICAgICAgICAgIHRp
bGUgPSBjcmVhdGVUaWxlKGksIGopOwotICAgICAgICAgICAgaWYgKCF0aWxlLT50ZXh0dXJlKCkt
PmlzVmFsaWQobV90aWxlU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQorICAgICAgICAg
ICAgaWYgKCF0aWxlLT50ZXh0dXJlKCktPmlzVmFsaWQodGV4U2l6ZSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEpKQogICAgICAgICAgICAgICAgIHRpbGUtPm1fZGlydHlMYXllclJlY3QgPSB0aWxl
TGF5ZXJSZWN0KGksIGopOwogICAgICAgICAgICAgZGlydHlMYXllclJlY3QudW5pdGUodGlsZS0+
bV9kaXJ0eUxheWVyUmVjdCk7CiAgICAgICAgIH0KQEAgLTMyMiw3ICszNDEsNyBAQCB2b2lkIExh
eWVyVGlsZXJDaHJvbWl1bTo6dXBkYXRlKFRpbGVQYWludEludGVyZmFjZSYgcGFpbnRlciwgY29u
c3QgSW50UmVjdCYgY29udAogICAgICAgICAgICAgaWYgKHNvdXJjZVJlY3QuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpZiAoIXRpbGUtPnRleHR1
cmUoKS0+cmVzZXJ2ZShtX3RpbGVTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpIHsKKyAg
ICAgICAgICAgIGlmICghdGlsZS0+dGV4dHVyZSgpLT5yZXNlcnZlKHRleFNpemUsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBKSkgewogICAgICAgICAgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICByZXNldCgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTM3
Myw2ICszOTIsMjIgQEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnNldExheWVyUG9zaXRpb24o
Y29uc3QgSW50UG9pbnQmIGxheWVyUG9zaXRpb24pCiAgICAgbV9sYXllclBvc2l0aW9uID0gbGF5
ZXJQb3NpdGlvbjsKIH0KIAordm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnNldFRleHR1cmVDbGFt
cFgoaW50IG1heFRleHR1cmVYKQoreworICAgIGlmIChtX3RleHR1cmVDbGFtcFggPT0gbWF4VGV4
dHVyZVgpCisgICAgICAgIHJldHVybjsKKyAgICBtX3RleHR1cmVDbGFtcFggPSBtYXhUZXh0dXJl
WDsKKyAgICBhbGxvY1BhaW50QnVmZmVyKCk7Cit9CisKK3ZvaWQgTGF5ZXJUaWxlckNocm9taXVt
OjpzZXRUZXh0dXJlQ2xhbXBZKGludCBtYXhUZXh0dXJlWSkKK3sKKyAgICBpZiAobV90ZXh0dXJl
Q2xhbXBZID09IG1heFRleHR1cmVZKQorICAgICAgICByZXR1cm47CisgICAgbV90ZXh0dXJlQ2xh
bXBZID0gbWF4VGV4dHVyZVk7CisgICAgYWxsb2NQYWludEJ1ZmZlcigpOworfQorCiB2b2lkIExh
eWVyVGlsZXJDaHJvbWl1bTo6ZHJhdyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKIHsKICAg
ICBpZiAobV9za2lwc0RyYXcgfHwgIW1fdGlsZXMuc2l6ZSgpKQpAQCAtMzg4LDE2ICs0MjMsMzMg
QEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmRyYXcoY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QpCiAgICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3As
IHJpZ2h0LCBib3R0b20pOwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2op
IHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewotICAgICAg
ICAgICAgVGlsZSogdGlsZSA9IG1fdGlsZXNbdGlsZUluZGV4KGksIGopXS5nZXQoKTsKKyAgICAg
ICAgICAgIGNvbnN0IGludCBpbmRleCA9IHRpbGVJbmRleChpLCBqKTsKKyAgICAgICAgICAgIFRp
bGUqIHRpbGUgPSBtX3RpbGVzW2luZGV4XS5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVCh0aWxl
KTsKIAogICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5iaW5kVGV4dHVyZSgpOwogCiAgICAg
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0aWxlTWF0cml4OwotICAgICAgICAgICAgSW50
UmVjdCB0aWxlUmVjdCA9IHRpbGVDb250ZW50UmVjdChpLCBqKTsKKworICAgICAgICAgICAgLy8g
RG9uJ3QgdXNlIHRpbGVDb250ZW50UmVjdCBoZXJlLCBhcyB0aGF0IGNvbnRhaW5zIHRoZSBmdWxs
CisgICAgICAgICAgICAvLyByZWN0IHdpdGggYm9yZGVyIHRleGVscyB3aGljaCBzaG91bGRuJ3Qg
YmUgZHJhd24uCisgICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gbV90aWxpbmdEYXRhLnRp
bGVCb3VuZHMoaW5kZXgpOworICAgICAgICAgICAgaWYgKG1fdGV4dHVyZUNsYW1wWCA+IDAgJiYg
dGlsZVJlY3Qud2lkdGgoKSA+IG1fdGV4dHVyZUNsYW1wWCkKKyAgICAgICAgICAgICAgICB0aWxl
UmVjdC5zZXRXaWR0aChtX3RleHR1cmVDbGFtcFgpOworICAgICAgICAgICAgaWYgKG1fdGV4dHVy
ZUNsYW1wWSA+IDAgJiYgdGlsZVJlY3QuaGVpZ2h0KCkgPiBtX3RleHR1cmVDbGFtcFkpCisgICAg
ICAgICAgICAgICAgdGlsZVJlY3Quc2V0SGVpZ2h0KG1fdGV4dHVyZUNsYW1wWSk7CisKKyAgICAg
ICAgICAgIEludFBvaW50IHRleE9mZnNldCA9IG1fdGlsaW5nRGF0YS50ZXh0dXJlT2Zmc2V0KGks
IGopOworICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRleE1hdHJpeDsKKyAgICAgICAgICAg
IGNvbnN0IEludFNpemUgdGV4U2l6ZSA9IHRleHR1cmVTaXplKCk7CisgICAgICAgICAgICB0ZXhN
YXRyaXguc2NhbGUoMS4wZiAvIHRleFNpemUud2lkdGgoKSwgMS4wZiAvIHRleFNpemUuaGVpZ2h0
KCkpOworICAgICAgICAgICAgdGV4TWF0cml4LnRyYW5zbGF0ZSh0ZXhPZmZzZXQueCgpLCB0ZXhP
ZmZzZXQueSgpKTsKKyAgICAgICAgICAgIHRleE1hdHJpeC5zY2FsZSh0aWxlUmVjdC53aWR0aCgp
LCB0aWxlUmVjdC5oZWlnaHQoKSk7CisKKyAgICAgICAgICAgIHRpbGVSZWN0Lm1vdmUobV9sYXll
clBvc2l0aW9uLngoKSwgbV9sYXllclBvc2l0aW9uLnkoKSk7CiAgICAgICAgICAgICB0aWxlTWF0
cml4LnRyYW5zbGF0ZTNkKHRpbGVSZWN0LngoKSAtIGNvbnRlbnRSZWN0LngoKSArIHRpbGVSZWN0
LndpZHRoKCkgLyAyLjAsIHRpbGVSZWN0LnkoKSAtIGNvbnRlbnRSZWN0LnkoKSArIHRpbGVSZWN0
LmhlaWdodCgpIC8gMi4wLCAwKTsKIAotICAgICAgICAgICAgTGF5ZXJDaHJvbWl1bTo6ZHJhd1Rl
eHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwg
dGlsZU1hdHJpeCwgbV90aWxlU2l6ZS53aWR0aCgpLCBtX3RpbGVTaXplLmhlaWdodCgpLCAxLCBj
b250ZW50TGF5ZXJWYWx1ZXMtPnNoYWRlck1hdHJpeExvY2F0aW9uKCksIGNvbnRlbnRMYXllclZh
bHVlcy0+c2hhZGVyQWxwaGFMb2NhdGlvbigpKTsKKyAgICAgICAgICAgIExheWVyQ2hyb21pdW06
OmRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0
cml4KCksIHRpbGVNYXRyaXgsIHRleE1hdHJpeCwgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3Qu
aGVpZ2h0KCksIDEsIGNvbnRlbnRMYXllclZhbHVlcy0+c2hhZGVyTWF0cml4TG9jYXRpb24oKSwg
Y29udGVudExheWVyVmFsdWVzLT5zaGFkZXJBbHBoYUxvY2F0aW9uKCksIGNvbnRlbnRMYXllclZh
bHVlcy0+c2hhZGVyVGV4TWF0cml4TG9jYXRpb24oKSk7CiAKICAgICAgICAgICAgIHRpbGUtPnRl
eHR1cmUoKS0+dW5yZXNlcnZlKCk7CiAgICAgICAgIH0KQEAgLTQwNiwzMCArNDU4LDMxIEBAIHZv
aWQgTGF5ZXJUaWxlckNocm9taXVtOjpkcmF3KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQog
CiB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6cmVzaXplTGF5ZXIoY29uc3QgSW50U2l6ZSYgc2l6
ZSkKIHsKLSAgICBpZiAobV9sYXllclNpemUgPT0gc2l6ZSkKKyAgICBpZiAobGF5ZXJTaXplKCkg
PT0gc2l6ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHdpZHRoID0gKHNpemUud2lkdGgo
KSArIG1fdGlsZVNpemUud2lkdGgoKSAtIDEpIC8gbV90aWxlU2l6ZS53aWR0aCgpOwotICAgIGlu
dCBoZWlnaHQgPSAoc2l6ZS5oZWlnaHQoKSArIG1fdGlsZVNpemUuaGVpZ2h0KCkgLSAxKSAvIG1f
dGlsZVNpemUuaGVpZ2h0KCk7CisgICAgY29uc3QgSW50U2l6ZSBvbGRUaWxlU2l6ZSA9IGxheWVy
VGlsZVNpemUoKTsKKyAgICBtX3RpbGluZ0RhdGEuc2V0VG90YWxTaXplKHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSk7CisgICAgY29uc3QgSW50U2l6ZSBuZXdUaWxlU2l6ZSA9IGxheWVyVGls
ZVNpemUoKTsKIAotICAgIFZlY3RvcjxPd25QdHI8VGlsZT4gPiBuZXdUaWxlczsKLSAgICBuZXdU
aWxlcy5yZXNpemUod2lkdGggKiBoZWlnaHQpOwotICAgIGZvciAoaW50IGogPSAwOyBqIDwgbV9s
YXllclRpbGVTaXplLmhlaWdodCgpOyArK2opCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bV9sYXllclRpbGVTaXplLndpZHRoKCk7ICsraSkKLSAgICAgICAgICAgIG5ld1RpbGVzW2kgKyBq
ICogd2lkdGhdLnN3YXAobV90aWxlc1tpICsgaiAqIG1fbGF5ZXJUaWxlU2l6ZS53aWR0aCgpXSk7
CisgICAgaWYgKG9sZFRpbGVTaXplID09IG5ld1RpbGVTaXplKQorICAgICAgICByZXR1cm47CiAK
KyAgICBWZWN0b3I8T3duUHRyPFRpbGU+ID4gbmV3VGlsZXM7CisgICAgbmV3VGlsZXMucmVzaXpl
KG5ld1RpbGVTaXplLndpZHRoKCkgKiBuZXdUaWxlU2l6ZS5oZWlnaHQoKSk7CisgICAgZm9yIChp
bnQgaiA9IDA7IGogPCBvbGRUaWxlU2l6ZS5oZWlnaHQoKTsgKytqKQorICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG9sZFRpbGVTaXplLndpZHRoKCk7ICsraSkKKyAgICAgICAgICAgIG5ld1Rp
bGVzW2kgKyBqICogbmV3VGlsZVNpemUud2lkdGgoKV0uc3dhcChtX3RpbGVzW2kgKyBqICogb2xk
VGlsZVNpemUud2lkdGgoKV0pOwogICAgIG1fdGlsZXMuc3dhcChuZXdUaWxlcyk7Ci0gICAgbV9s
YXllclNpemUgPSBzaXplOwotICAgIG1fbGF5ZXJUaWxlU2l6ZSA9IEludFNpemUod2lkdGgsIGhl
aWdodCk7CiB9CiAKIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpncm93TGF5ZXJUb0NvbnRhaW4o
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiB7CiAgICAgLy8gR3JvdyB0aGUgdGlsZSBhcnJh
eSB0byBjb250YWluIHRoaXMgY29udGVudCByZWN0LgogICAgIEludFJlY3QgbGF5ZXJSZWN0ID0g
Y29udGVudFJlY3RUb0xheWVyUmVjdChjb250ZW50UmVjdCk7Ci0gICAgSW50U2l6ZSBsYXllclNp
emUgPSBJbnRTaXplKGxheWVyUmVjdC5tYXhYKCksIGxheWVyUmVjdC5tYXhZKCkpOworICAgIElu
dFNpemUgcmVjdFNpemUgPSBJbnRTaXplKGxheWVyUmVjdC5tYXhYKCksIGxheWVyUmVjdC5tYXhZ
KCkpOwogCi0gICAgSW50U2l6ZSBuZXdTaXplID0gbGF5ZXJTaXplLmV4cGFuZGVkVG8obV9sYXll
clNpemUpOworICAgIEludFNpemUgbmV3U2l6ZSA9IHJlY3RTaXplLmV4cGFuZGVkVG8obGF5ZXJT
aXplKCkpOwogICAgIHJlc2l6ZUxheWVyKG5ld1NpemUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJD
aHJvbWl1bS5oCmluZGV4IGUwOTY5M2Q3ZTFlYzFmYzdiYWU1MTU1OTdiODM0ZjA2OTExYzYwYWEu
LmY5OTc1YWFlODlhY2U2NjI3MDM2ZjMyOTQ2YTI2MDdiY2ViMjc3ODkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGlsZXJDaHJvbWl1bS5oCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJMYXllckNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCisjaW5jbHVkZSAiVGlsaW5nRGF0YS5o
IgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC00Niw3ICs0Nyw3IEBAIHB1YmxpYzoKIGNsYXNzIExheWVyVGlsZXJDaHJvbWl1bSB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoTGF5ZXJUaWxlckNocm9taXVtKTsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc093blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IGNyZWF0ZShMYXllclJlbmRlcmVy
Q2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplKTsKKyAgICBz
dGF0aWMgUGFzc093blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IGNyZWF0ZShMYXllclJlbmRlcmVy
Q2hyb21pdW0qLCBpbnQgdGlsZVNpemUsIGJvb2wgaGFzQm9yZGVyVGV4ZWxzLCBpbnQgdGV4dHVy
ZUNsYW1wWCA9IDAsIGludCB0ZXh0dXJlQ2xhbXBZID0gMCk7CiAKICAgICB+TGF5ZXJUaWxlckNo
cm9taXVtKCk7CiAKQEAgLTU3LDExICs1OCwxNCBAQCBwdWJsaWM6CiAKICAgICAvLyBTZXQgcG9z
aXRpb24gb2YgdGhpcyB0aWxlZCBsYXllciBpbiBjb250ZW50IHNwYWNlLgogICAgIHZvaWQgc2V0
TGF5ZXJQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pOwotICAgIC8vIENoYW5nZSB0
aGUgdGlsZSBzaXplLiAgVGhpcyBtYXkgaW52YWxpZGF0ZSBhbGwgdGhlIGV4aXN0aW5nIHRpbGVz
LgotICAgIHZvaWQgc2V0VGlsZVNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSk7CisKKyAgICB2b2lk
IHNldFRleHR1cmVDbGFtcFgoaW50IG1heFRleHR1cmVYKTsKKyAgICB2b2lkIHNldFRleHR1cmVD
bGFtcFkoaW50IG1heFRleHR1cmVZKTsKIAogcHJpdmF0ZToKLSAgICBMYXllclRpbGVyQ2hyb21p
dW0oTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiB0
aWxlU2l6ZSk7CisgICAgTGF5ZXJUaWxlckNocm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bSos
IGludCB0aWxlU2l6ZSwgYm9vbCBoYXNCb3JkZXJUZXhlbHMsIGludCB0ZXh0dXJlQ2xhbXBYLCBp
bnQgdGV4dHVyZUNsYW1wWSk7CisKKyAgICB2b2lkIGFsbG9jUGFpbnRCdWZmZXIoKTsKIAogICAg
IGNsYXNzIFRpbGUgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaWxlKTsKQEAgLTky
LDYgKzk2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgaW50ICZsZWZ0LCBpbnQgJnRvcCwgaW50ICZyaWdo
dCwgaW50ICZib3R0b20pIGNvbnN0OwogICAgIEludFJlY3QgY29udGVudFJlY3RUb0xheWVyUmVj
dChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7CiAgICAgSW50UmVjdCBsYXllclJl
Y3RUb0NvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCkgY29uc3Q7CisgICAgSW50
U2l6ZSB0ZXh0dXJlU2l6ZSgpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJucyB0aGUgaW5kZXggaW50
byBtX3RpbGVzIGZvciBhIGdpdmVuIHRpbGUgbG9jYXRpb24uCiAgICAgaW50IHRpbGVJbmRleChp
bnQgaSwgaW50IGopIGNvbnN0OwpAQCAtMTAwLDkgKzEwNSwxMiBAQCBwcml2YXRlOgogICAgIC8v
IFJldHVybnMgdGhlIGJvdW5kcyBpbiBsYXllciBzcGFjZSBmb3IgYSBnaXZlbiB0aWxlIGxvY2F0
aW9uLgogICAgIEludFJlY3QgdGlsZUxheWVyUmVjdChpbnQgaSwgaW50IGopIGNvbnN0OwogCi0g
ICAgSW50U2l6ZSBtX3RpbGVTaXplOwotICAgIEludFNpemUgbV9sYXllclNpemU7Ci0gICAgSW50
U2l6ZSBtX2xheWVyVGlsZVNpemU7CisgICAgSW50U2l6ZSBsYXllclNpemUoKSBjb25zdDsKKyAg
ICBJbnRTaXplIGxheWVyVGlsZVNpemUoKSBjb25zdDsKKworICAgIGludCBtX3RpbGVTaXplOwor
ICAgIGludCBtX3RleHR1cmVDbGFtcFg7CisgICAgaW50IG1fdGV4dHVyZUNsYW1wWTsKICAgICBJ
bnRSZWN0IG1fbGFzdFVwZGF0ZUxheWVyUmVjdDsKICAgICBJbnRQb2ludCBtX2xheWVyUG9zaXRp
b247CiAKQEAgLTExNiw2ICsxMjQsOCBAQCBwcml2YXRlOgogICAgIC8vIENhY2hlIGEgdGlsZS1z
aXplZCBwaXhlbCBidWZmZXIgdG8gZHJhdyBpbnRvLgogICAgIE93bkFycmF5UHRyPHVpbnQ4X3Q+
IG1fdGlsZVBpeGVsczsKIAorICAgIFRpbGluZ0RhdGEgbV90aWxpbmdEYXRhOworCiAgICAgTGF5
ZXJSZW5kZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdp
bkxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDg3OGMxNDJjODc5YTcyZGQ3ZjE5NDhiMmNlZDZlNDVm
MmY5YWY5MTAuLjgzMzE4M2QzOTUzZWYzZmE5MGI5MDg3MjU4ODk3MWU3ZDQwOWRkOWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxh
eWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCkBAIC0xMjQsOSArMTI0LDEwIEBAIHZvaWQg
UGx1Z2luTGF5ZXJDaHJvbWl1bTo6ZHJhdygpCiAgICAgCiAgICAgbGF5ZXJSZW5kZXJlcigpLT51
c2VTaGFkZXIoc3YtPnNoYWRlclByb2dyYW0oKSk7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PnVuaWZvcm0xaShzdi0+c2hhZGVyU2FtcGxlckxvY2F0aW9uKCksIDApKTsKKyAgICBBZmZpbmVU
cmFuc2Zvcm0gdGV4TWF0cml4OwogICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJS
ZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGRyYXdUcmFuc2Zvcm0oKSwKLSAgICAgICAg
ICAgICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3T3Bh
Y2l0eSgpLAotICAgICAgICAgICAgICAgICAgICAgc3YtPnNoYWRlck1hdHJpeExvY2F0aW9uKCks
IHN2LT5zaGFkZXJBbHBoYUxvY2F0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICAgdGV4TWF0
cml4LCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwK
KyAgICAgICAgICAgICAgICAgICAgIHN2LT5zaGFkZXJNYXRyaXhMb2NhdGlvbigpLCBzdi0+c2hh
ZGVyQWxwaGFMb2NhdGlvbigpLCAtMSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNl
Q2hyb21pdW0uY3BwCmluZGV4IGIzY2U5ZDcyMzcxNjhjOTU0NzAxNGQyY2E1MzRkMzJlOThjMGYz
MGMuLmYwNzU0N2VmZTZjNzFiNzlhMjUzY2JlYTRiMjRiODMwNzFlODM3YTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcApAQCAtMjEwLDEwICsyMTAsMTEgQEAgdm9pZCBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW06OmRyYXdTdXJmYWNlKExheWVyQ2hyb21pdW0qIG1hc2tMYXll
ciwgY29uc3QgVHJhbnNmb3IKICAgICAgICAgc2hhZGVyTWF0cml4TG9jYXRpb24gPSBzdi0+c2hh
ZGVyTWF0cml4TG9jYXRpb24oKTsKICAgICAgICAgc2hhZGVyQWxwaGFMb2NhdGlvbiA9IHN2LT5z
aGFkZXJBbHBoYUxvY2F0aW9uKCk7CiAgICAgfQotICAgIAotICAgIExheWVyQ2hyb21pdW06OmRy
YXdUZXh0dXJlZFF1YWQobGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCksIGxheWVyUmVuZGVyZXIo
KS0+cHJvamVjdGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNmb3JtLAorCisgICAgQWZmaW5lVHJhbnNm
b3JtIHRleE1hdHJpeDsKKyAgICBMYXllckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKGxheWVy
UmVuZGVyZXIoKS0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgo
KSwgZHJhd1RyYW5zZm9ybSwgdGV4TWF0cml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fY29udGVudFJlY3Qud2lkdGgoKSwgbV9jb250ZW50UmVjdC5oZWlnaHQo
KSwgbV9kcmF3T3BhY2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaGFkZXJNYXRyaXhMb2NhdGlvbiwgc2hhZGVyQWxwaGFMb2NhdGlvbik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyTWF0cml4TG9jYXRpb24sIHNoYWRl
ckFscGhhTG9jYXRpb24sIC0xKTsKIAogICAgIG1fY29udGVudHNUZXh0dXJlLT51bnJlc2VydmUo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVmlkZW9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNDFjZDE4MDJkMDI3MmFh
YWVlY2MwZTQ1MTc4ZWFjY2I3ZTY0ZWI2NS4uYzNjMGE2MDA3ZWU3MzgyMGQ1ZGRiOWM3OGI1N2I4
ZTI2ZDBjMjc2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCkBAIC0zODcsOSAr
Mzg3LDEwIEBAIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjpkcmF3WVVWKGNvbnN0IFNoYXJlZFZh
bHVlcyogc3YpCiAKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihz
di0+Y2NNYXRyaXhMb2NhdGlvbigpLCAwLCBjb25zdF9jYXN0PGZsb2F0Kj4oeXV2MlJHQiksIDEp
KTsKIAorICAgIEFmZmluZVRyYW5zZm9ybSBpZGVudGl0eTsKICAgICBkcmF3VGV4dHVyZWRRdWFk
KGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNm
b3JtKCksCi0gICAgICAgICAgICAgICAgICAgICBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5o
ZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwKLSAgICAgICAgICAgICAgICAgICAgIHN2LT55dXZTaGFk
ZXJNYXRyaXhMb2NhdGlvbigpLCBzdi0+eXV2QWxwaGFMb2NhdGlvbigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgIGlkZW50aXR5LCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwg
ZHJhd09wYWNpdHkoKSwKKyAgICAgICAgICAgICAgICAgICAgIHN2LT55dXZTaGFkZXJNYXRyaXhM
b2NhdGlvbigpLCBzdi0+eXV2QWxwaGFMb2NhdGlvbigpLCAtMSk7CiAKICAgICAvLyBSZXNldCBh
Y3RpdmUgdGV4dHVyZSBiYWNrIHRvIHRleHR1cmUgMC4KICAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKQEAgLTQwOSw5
ICs0MTAsMTAgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OmRyYXdSR0JBKGNvbnN0IFNoYXJl
ZFZhbHVlcyogc3YpCiAKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHN2LT5y
Z2JhVGV4dHVyZUxvY2F0aW9uKCksIDApKTsKIAorICAgIEFmZmluZVRyYW5zZm9ybSBpZGVudGl0
eTsKICAgICBkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVj
dGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNmb3JtKCksCi0gICAgICAgICAgICAgICAgICAgICBib3Vu
ZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwKLSAgICAgICAg
ICAgICAgICAgICAgIHN2LT5yZ2JhU2hhZGVyTWF0cml4TG9jYXRpb24oKSwgc3YtPnJnYmFBbHBo
YUxvY2F0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICAgaWRlbnRpdHksIGJvdW5kcygpLndp
ZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLAorICAgICAgICAgICAgICAg
ICAgICAgc3YtPnJnYmFTaGFkZXJNYXRyaXhMb2NhdGlvbigpLCBzdi0+cmdiYUFscGhhTG9jYXRp
b24oKSwgLTEpOwogfQogCiB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6cmVzZXRGcmFtZVBhcmFt
ZXRlcnMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L1RleHR1cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1
cmUuY3BwCmluZGV4IGIxYmE4MjdmNTVjMDBjYTU5NTBiYmZjMTI2OGJhMzI3NzNkN2IyNTkuLjc3
NjljOWQ0MTlkZTBlYmUzZmMzNjE2ZjBlZDc4OTkyMTBjMjQ5OGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAKQEAgLTUwLDcgKzUwLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogVGV4dHVyZTo6VGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgUGFzc093blB0cjxWZWN0b3I8dW5zaWduZWQgaW50PiA+IHRpbGVUZXh0dXJl
SWRzLCBGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXhUZXh0dXJl
U2l6ZSkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9mb3JtYXQoZm9ybWF0KQot
ICAgICwgbV90aWxlcyhtYXhUZXh0dXJlU2l6ZSwgd2lkdGgsIGhlaWdodCwgdHJ1ZSkKKyAgICAs
IG1fdGlsZXMobWF4VGV4dHVyZVNpemUsIHdpZHRoLCBoZWlnaHQsIHRydWUsIGZhbHNlKQogICAg
ICwgbV90aWxlVGV4dHVyZUlkcyh0aWxlVGV4dHVyZUlkcykKIHsKIH0KQEAgLTg5LDcgKzg5LDcg
QEAgUGFzc1JlZlB0cjxUZXh0dXJlPiBUZXh0dXJlOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQsIEZvcm1hdCBmb3JtYXQsIGkKIHsKICAgICBpbnQgbWF4VGV4dHVyZVNpemUgPSAw
OwogICAgIGNvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVS
RV9TSVpFLCAmbWF4VGV4dHVyZVNpemUpOwotICAgIFRpbGluZ0RhdGEgdGlsaW5nKG1heFRleHR1
cmVTaXplLCB3aWR0aCwgaGVpZ2h0LCB0cnVlKTsKKyAgICBUaWxpbmdEYXRhIHRpbGluZyhtYXhU
ZXh0dXJlU2l6ZSwgd2lkdGgsIGhlaWdodCwgdHJ1ZSwgZmFsc2UpOwogICAgIGludCBudW1UaWxl
cyA9IHRpbGluZy5udW1UaWxlcygpOwogCiAgICAgT3duUHRyPFZlY3Rvcjx1bnNpZ25lZCBpbnQ+
ID4gdGV4dHVyZUlkcyhuZXcgVmVjdG9yPHVuc2lnbmVkIGludD4obnVtVGlsZXMpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmNwcApp
bmRleCBlN2M0ZTRjOGExMmIxZmVlNWFmOWU5NTIyZDJmNjZkZmYzN2NkODA5Li5kY2NiZTYwZjZk
ZmRmNzVhODYyMWQ0NjM0ZDQwYzhhN2I2M2VjMTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuY3BwCkBAIC00NCwxNyArNDQsMjQg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgaW50IGNvbXB1dGVOdW1UaWxlcyhpbnQg
bWF4VGV4dHVyZVNpemUsIGludCB0b3RhbFNpemUsIGludCBib3JkZXJUZXhlbHMpCiB7Ci0gICAg
cmV0dXJuIG1heCgxLCAxICsgKHRvdGFsU2l6ZSAtIDEgLSAyICogYm9yZGVyVGV4ZWxzKSAvICht
YXhUZXh0dXJlU2l6ZSAtIDIgKiBib3JkZXJUZXhlbHMpKTsKKyAgICBpbnQgbnVtVGlsZXMgPSBt
YXgoMSwgMSArICh0b3RhbFNpemUgLSAxIC0gMiAqIGJvcmRlclRleGVscykgLyAobWF4VGV4dHVy
ZVNpemUgLSAyICogYm9yZGVyVGV4ZWxzKSk7CisgICAgcmV0dXJuIHRvdGFsU2l6ZSA+IDAgPyBu
dW1UaWxlcyA6IDA7CiB9CiAKLVRpbGluZ0RhdGE6OlRpbGluZ0RhdGEoaW50IG1heFRleHR1cmVT
aXplLCBpbnQgdG90YWxTaXplWCwgaW50IHRvdGFsU2l6ZVksIGJvb2wgaGFzQm9yZGVyVGV4ZWxz
KQorVGlsaW5nRGF0YTo6VGlsaW5nRGF0YShpbnQgbWF4VGV4dHVyZVNpemUsIGludCB0b3RhbFNp
emVYLCBpbnQgdG90YWxTaXplWSwgYm9vbCBoYXNCb3JkZXJUZXhlbHMsIGJvb2wgY2xpcEVkZ2VU
aWxlcykKICAgICA6IG1fbWF4VGV4dHVyZVNpemUobWF4VGV4dHVyZVNpemUpCi0gICAgLCBtX3Rv
dGFsU2l6ZVgodG90YWxTaXplWCkKLSAgICAsIG1fdG90YWxTaXplWSh0b3RhbFNpemVZKQogICAg
ICwgbV9ib3JkZXJUZXhlbHMoaGFzQm9yZGVyVGV4ZWxzID8gMSA6IDApCisgICAgLCBtX2NsaXBF
ZGdlVGlsZXMoY2xpcEVkZ2VUaWxlcykKIHsKLSAgICBtX251bVRpbGVzWCA9IGNvbXB1dGVOdW1U
aWxlcyhtYXhUZXh0dXJlU2l6ZSwgbV90b3RhbFNpemVYLCBtX2JvcmRlclRleGVscyk7Ci0gICAg
bV9udW1UaWxlc1kgPSBjb21wdXRlTnVtVGlsZXMobWF4VGV4dHVyZVNpemUsIG1fdG90YWxTaXpl
WSwgbV9ib3JkZXJUZXhlbHMpOworICAgIHNldFRvdGFsU2l6ZSh0b3RhbFNpemVYLCB0b3RhbFNp
emVZKTsKK30KKwordm9pZCBUaWxpbmdEYXRhOjpzZXRUb3RhbFNpemUoaW50IHRvdGFsU2l6ZVgs
IGludCB0b3RhbFNpemVZKQoreworICAgIG1fdG90YWxTaXplWCA9IHRvdGFsU2l6ZVg7CisgICAg
bV90b3RhbFNpemVZID0gdG90YWxTaXplWTsKKyAgICBtX251bVRpbGVzWCA9IGNvbXB1dGVOdW1U
aWxlcyhtX21heFRleHR1cmVTaXplLCBtX3RvdGFsU2l6ZVgsIG1fYm9yZGVyVGV4ZWxzKTsKKyAg
ICBtX251bVRpbGVzWSA9IGNvbXB1dGVOdW1UaWxlcyhtX21heFRleHR1cmVTaXplLCBtX3RvdGFs
U2l6ZVksIG1fYm9yZGVyVGV4ZWxzKTsKIH0KIAogaW50IFRpbGluZ0RhdGE6OnRpbGVYSW5kZXhG
cm9tU3JjQ29vcmQoaW50IHNyY1BvcykgY29uc3QKQEAgLTE0MiwxNSArMTQ5LDE0IEBAIGludCBU
aWxpbmdEYXRhOjp0aWxlU2l6ZVgoaW50IHhJbmRleCkgY29uc3QKIHsKICAgICBBU1NFUlQoeElu
ZGV4ID49IDAgJiYgeEluZGV4IDwgbnVtVGlsZXNYKCkpOwogCi0gICAgaW50IHNpemUgPSBtYXhU
ZXh0dXJlU2l6ZSgpOwotICAgIHNpemUgPSBtaW4oc2l6ZSwgdG90YWxTaXplWCgpKTsKLQogICAg
IGlmICgheEluZGV4ICYmIG1fbnVtVGlsZXNYID09IDEpCi0gICAgICAgIHJldHVybiBtX3RvdGFs
U2l6ZVg7CisgICAgICAgIHJldHVybiBtX2NsaXBFZGdlVGlsZXMgPyBtX3RvdGFsU2l6ZVggOiBt
X21heFRleHR1cmVTaXplOwogICAgIGlmICgheEluZGV4ICYmIG1fbnVtVGlsZXNYID4gMSkKICAg
ICAgICAgcmV0dXJuIG1fbWF4VGV4dHVyZVNpemUgLSBtX2JvcmRlclRleGVsczsKICAgICBpZiAo
eEluZGV4IDwgbnVtVGlsZXNYKCkgLSAxKQogICAgICAgICByZXR1cm4gbV9tYXhUZXh0dXJlU2l6
ZSAtIDIgKiBtX2JvcmRlclRleGVsczsKKyAgICBpZiAoIW1fY2xpcEVkZ2VUaWxlcykKKyAgICAg
ICAgcmV0dXJuIG1fbWF4VGV4dHVyZVNpemUgLSBtX2JvcmRlclRleGVsczsKICAgICBpZiAoeElu
ZGV4ID09IG51bVRpbGVzWCgpIC0gMSkKICAgICAgICAgcmV0dXJuIG1fdG90YWxTaXplWCAtIHRp
bGVQb3NpdGlvblgoeEluZGV4KTsKIApAQCAtMTYyLDE1ICsxNjgsMTQgQEAgaW50IFRpbGluZ0Rh
dGE6OnRpbGVTaXplWShpbnQgeUluZGV4KSBjb25zdAogewogICAgIEFTU0VSVCh5SW5kZXggPj0g
MCAmJiB5SW5kZXggPCBudW1UaWxlc1koKSk7CiAKLSAgICBpbnQgc2l6ZSA9IG1heFRleHR1cmVT
aXplKCk7Ci0gICAgc2l6ZSA9IG1pbihzaXplLCB0b3RhbFNpemVZKCkpOwotCiAgICAgaWYgKCF5
SW5kZXggJiYgbV9udW1UaWxlc1kgPT0gMSkKLSAgICAgICAgcmV0dXJuIG1fdG90YWxTaXplWTsK
KyAgICAgICAgcmV0dXJuIG1fY2xpcEVkZ2VUaWxlcyA/IG1fdG90YWxTaXplWSA6IG1fbWF4VGV4
dHVyZVNpemU7CiAgICAgaWYgKCF5SW5kZXggJiYgbV9udW1UaWxlc1kgPiAxKQogICAgICAgICBy
ZXR1cm4gbV9tYXhUZXh0dXJlU2l6ZSAtIG1fYm9yZGVyVGV4ZWxzOwogICAgIGlmICh5SW5kZXgg
PCBudW1UaWxlc1koKSAtIDEpCiAgICAgICAgIHJldHVybiBtX21heFRleHR1cmVTaXplIC0gMiAq
IG1fYm9yZGVyVGV4ZWxzOworICAgIGlmICghbV9jbGlwRWRnZVRpbGVzKQorICAgICAgICByZXR1
cm4gbV9tYXhUZXh0dXJlU2l6ZSAtIG1fYm9yZGVyVGV4ZWxzOwogICAgIGlmICh5SW5kZXggPT0g
bnVtVGlsZXNZKCkgLSAxKQogICAgICAgICByZXR1cm4gbV90b3RhbFNpemVZIC0gdGlsZVBvc2l0
aW9uWSh5SW5kZXgpOwogCkBAIC0yMjIsNiArMjI3LDE0IEBAIHZvaWQgVGlsaW5nRGF0YTo6aW50
ZXJzZWN0RHJhd1F1YWQoY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IGRzCiAgICAgICAgIHNyY1JlY3RJbnRlcnNlY3RlZE5vcm1IICogZHN0UmVjdC5oZWlnaHQoKSk7
CiB9CiAKK0ludFBvaW50IFRpbGluZ0RhdGE6OnRleHR1cmVPZmZzZXQoaW50IHhJbmRleCwgaW50
IHlJbmRleCkgY29uc3QKK3sKKyAgICBpbnQgbGVmdCA9ICgheEluZGV4IHx8IG1fbnVtVGlsZXNY
ID09IDEpID8gMCA6IG1fYm9yZGVyVGV4ZWxzOworICAgIGludCB0b3AgPSAoIXlJbmRleCB8fCBt
X251bVRpbGVzWSA9PSAxKSA/IDAgOiBtX2JvcmRlclRleGVsczsKKworICAgIHJldHVybiBJbnRQ
b2ludChsZWZ0LCB0b3ApOworfQorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmgKaW5kZXggZDExNDBiZDVmODAzNWRj
OWIwYzc1YzEyYTg4ZTg4NjFmOTM5OTVhYS4uZDY4ZGIxNzE5NGY4NTczZTQxMDQ0MzY1YmExZDIw
YzVkYTA0NmJhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L1RpbGluZ0RhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvVGlsaW5nRGF0YS5oCkBAIC0zNywxMSArMzcsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBJbnRSZWN0OworY2xhc3MgSW50UG9pbnQ7CiAKIGNs
YXNzIFRpbGluZ0RhdGEgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRpbGluZ0RhdGEpOwog
cHVibGljOgotICAgIFRpbGluZ0RhdGEoaW50IG1heFRleHR1cmVTaXplLCBpbnQgdG90YWxTaXpl
WCwgaW50IHRvdGFsU2l6ZVksIGJvb2wgaGFzQm9yZGVyVGV4ZWxzKTsKKyAgICBUaWxpbmdEYXRh
KGludCBtYXhUZXh0dXJlU2l6ZSwgaW50IHRvdGFsU2l6ZVgsIGludCB0b3RhbFNpemVZLCBib29s
IGhhc0JvcmRlclRleGVscywgYm9vbCBjbGlwRWRnZVRpbGVzKTsKKyAgICB2b2lkIHNldFRvdGFs
U2l6ZShpbnQgdG90YWxTaXplWCwgaW50IHRvdGFsU2l6ZVkpOwogICAgIGludCBtYXhUZXh0dXJl
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4VGV4dHVyZVNpemU7IH0KICAgICBpbnQgdG90YWxT
aXplWCgpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxTaXplWDsgfQogICAgIGludCB0b3RhbFNpemVZ
KCkgY29uc3QgeyByZXR1cm4gbV90b3RhbFNpemVZOyB9CkBAIC03MCw2ICs3Miw4IEBAIHB1Ymxp
YzoKICAgICAvLyBpbiB0ZXhlbCB1bml0cywgcmV0dXJucyBhZGp1c3RlZCBkYXRhIHRvIHJlbmRl
ciBqdXN0IHRoZSBvbmUgdGlsZS4KICAgICB2b2lkIGludGVyc2VjdERyYXdRdWFkKGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBpbnQgdGlsZSwgRmxv
YXRSZWN0KiBuZXdTcmMsIEZsb2F0UmVjdCogbmV3RHN0KSBjb25zdDsKIAorICAgIEludFBvaW50
IHRleHR1cmVPZmZzZXQoaW50IHhJbmRleCwgaW50IHlJbmRleCkgY29uc3Q7CisKIHByaXZhdGU6
CiAgICAgVGlsaW5nRGF0YSgpIDogbV9tYXhUZXh0dXJlU2l6ZSgwKSwgbV90b3RhbFNpemVYKDAp
LCBtX3RvdGFsU2l6ZVkoMCkge30KICAgICB2b2lkIGFzc2VydFRpbGUoaW50IHRpbGUpIGNvbnN0
IHsgQVNTRVJUKHRpbGUgPj0gMCAmJiB0aWxlIDwgbnVtVGlsZXMoKSk7IH0KQEAgLTc4LDYgKzgy
LDcgQEAgcHJpdmF0ZToKICAgICBpbnQgbV90b3RhbFNpemVYOwogICAgIGludCBtX3RvdGFsU2l6
ZVk7CiAgICAgaW50IG1fYm9yZGVyVGV4ZWxzOyAvLyAwIG9yIDEKKyAgICBib29sIG1fY2xpcEVk
Z2VUaWxlczsKIAogICAgIC8vIGNvbXB1dGVkIHZhbHVlczoKICAgICBpbnQgbV9udW1UaWxlc1g7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82073</attachid>
            <date>2011-02-10 17:11:07 -0800</date>
            <delta_ts>2011-02-10 17:27:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54143-20110210171106.patch</filename>
            <type>text/plain</type>
            <size>30287</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3YWE1MzVlMzdmZTU4NjJmZTJlOTg2MjFmYjUxMjhiODEwZjYyNzJlLi43
OGUzNTYzZjM5NDUyMzg2YWRjMDk1YjFhYjIwMWUzZTM4OGU5YzA0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNTQgQEAKKzIwMTEtMDItMTAgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hy
b21pdW1dIE1vZGlmeSBMYXllclRpbGVyQ2hyb21pdW0gdG8gdXNlIFRpbGluZ0RhdGEuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDE0MworCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJD
aHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0
ZUFuZERyYXdSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNsZWFudXBTaGFyZWRPYmplY3RzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJTaGFyZWRWYWx1ZXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OkxheWVyVGlsZXJDaHJvbWl1bSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnNldFRpbGVTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlckNocm9taXVtOjpjb250ZW50UmVjdFRvVGlsZUluZGljZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjp0aWxlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJUaWxlckNocm9taXVtOjp0aWxlQ29udGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJUaWxlckNocm9taXVtOjp0aWxlTGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGlsZXJDaHJvbWl1bTo6bGF5ZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGls
ZXJDaHJvbWl1bTo6bGF5ZXJUaWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVy
Q2hyb21pdW06OmludmFsaWRhdGVFbnRpcmVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRpbGVyQ2hyb21pdW06OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9t
aXVtOjpyZXNpemVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06
Omdyb3dMYXllclRvQ29udGFpbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21p
dW06OmRyYXdUZXh0dXJlZFF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9t
aXVtOjpTaGFyZWRWYWx1ZXM6OlNoYXJlZFZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRpbGVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6flNoYXJlZFZhbHVlcyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmg6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6dGlsZXJTaGFkZXJQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6U2hhcmVkVmFs
dWVzOjpzaGFkZXJTYW1wbGVyTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
ckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6OnNoYWRlck1hdHJpeExvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpzaGFkZXJBbHBoYUxv
Y2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6U2hhcmVkVmFs
dWVzOjpzaGFkZXJUZXhUcmFuc2Zvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRpbGVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6aW5pdGlhbGl6ZWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNv
bXB1dGVOdW1UaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjpUaWxpbmdEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OnNldFRvdGFsU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpUaWxpbmdEYXRhOjpzZXRNYXhUZXh0dXJlU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxpbmdEYXRhOjp0aWxlU2l6ZVgpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0
YTo6dGlsZVNpemVZKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OnRleHR1cmVPZmZz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6cmVjb21wdXRlTnVtVGlsZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmg6CisKIDIwMTEtMDIt
MDkgIEx1Y2FzIERlIE1hcmNoaSAgPGx1Y2FzLmRlbWFyY2hpQHByb2Z1c2lvbi5tb2JpPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDVjN2Uy
YjE0MjE3N2NjZjY5MmFhYTRjMzZhMmUyOGYwYzZkZjFjODYuLmZmOWU1ZTVkODMxYzNmMTNlOTMw
NzZlNmFmYzU1OGY3Y2NhOThjZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTIwNSw2ICsyMDUs
NyBAQCBwdWJsaWM6CiAgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9sYXllclJlbmRlcmVyLmdldCgpOyB9CiAKICAgICBzdGF0aWMgdW5z
aWduZWQgY3JlYXRlU2hhZGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IGNoYXIq
IHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpOwor
ICAgIHN0YXRpYyB2b2lkIHRvR0xNYXRyaXgoZmxvYXQqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYpOwogCiAgICAgc3RhdGljIHZvaWQgZHJhd1RleHR1cmVkUXVhZChHcmFwaGljc0NvbnRl
eHQzRCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwcm9qZWN0aW9uTWF0cml4LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJNYXRyaXgsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBvcGFjaXR5LApA
QCAtMjI0LDggKzIyNSw2IEBAIHByb3RlY3RlZDoKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW55
IG9mIHRoZSBsYXllcidzIGRlc2NlbmRhbnRzIGhhcyBjb250ZW50IHRvIGRyYXcuCiAgICAgYm9v
bCBkZXNjZW5kYW50c0RyYXdDb250ZW50KCk7CiAKLSAgICBzdGF0aWMgdm9pZCB0b0dMTWF0cml4
KGZsb2F0KiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLQogICAgIEludFNpemUgbV9i
b3VuZHM7CiAgICAgRmxvYXRSZWN0IG1fZGlydHlSZWN0OwogICAgIGJvb2wgbV9jb250ZW50c0Rp
cnR5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggZjU1NDhjOWY2
M2YzNmI0YTNmMjU1M2JhZTg1ODRlZWQwNDE4Y2E3MS4uNmEyY2U3MWFhMmZhZjEyNGY1MDc0Njg3
ZjdjODBhMmMyMDk0MmJlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
CkBAIC0xMTIsNyArMTEyLDcgQEAgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVy
Q2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGUKICAgICAsIG1fZGVm
YXVsdFJlbmRlclN1cmZhY2UoMCkKIHsKICAgICBtX2hhcmR3YXJlQ29tcG9zaXRpbmcgPSBpbml0
aWFsaXplU2hhcmVkT2JqZWN0cygpOwotICAgIG1fcm9vdExheWVyVGlsZXIgPSBMYXllclRpbGVy
Q2hyb21pdW06OmNyZWF0ZSh0aGlzLCBJbnRTaXplKDI1NiwgMjU2KSk7CisgICAgbV9yb290TGF5
ZXJUaWxlciA9IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIEludFNpemUoMjU2LCAy
NTYpLCBmYWxzZSk7CiAgICAgQVNTRVJUKG1fcm9vdExheWVyVGlsZXIpOwogfQogCkBAIC0xODEs
NyArMTgxLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERyYXdSb290
TGF5ZXIoVGlsZVBhaW50SW50ZXJmYWNlJiB0aWxlUGFpbnQKICAgICAgICAgSW50UmVjdCB2ZXJ0
aWNhbFNjcm9sbGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFyUmVjdCh2aXNpYmxlUmVjdCwgY29udGVu
dFJlY3QpOwogICAgICAgICBJbnRTaXplIHRpbGVTaXplID0gdmVydGljYWxTY3JvbGxiYXIuc2l6
ZSgpLnNocnVua1RvKEludFNpemUobV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSkp
OwogICAgICAgICBpZiAoIW1fdmVydGljYWxTY3JvbGxiYXJUaWxlcikKLSAgICAgICAgICAgIG1f
dmVydGljYWxTY3JvbGxiYXJUaWxlciA9IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMs
IHRpbGVTaXplKTsKKyAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJUaWxlciA9IExheWVy
VGlsZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIHRpbGVTaXplLCBmYWxzZSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJUaWxlci0+c2V0VGlsZVNpemUodGls
ZVNpemUpOwogICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXItPnNldExheWVyUG9zaXRp
b24odmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CkBAIC0xOTMsNyArMTkzLDcgQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERyYXdSb290TGF5ZXIoVGlsZVBhaW50
SW50ZXJmYWNlJiB0aWxlUGFpbnQKICAgICAgICAgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFy
ID0gaG9yaXpvbnRhbFNjcm9sbGJhclJlY3QodmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKICAg
ICAgICAgSW50U2l6ZSB0aWxlU2l6ZSA9IGhvcml6b250YWxTY3JvbGxiYXIuc2l6ZSgpLnNocnVu
a1RvKEludFNpemUobV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSkpOwogICAgICAg
ICBpZiAoIW1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyKQotICAgICAgICAgICAgbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyVGlsZXIgPSBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCB0aWxl
U2l6ZSk7CisgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJUaWxlciA9IExheWVyVGls
ZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIHRpbGVTaXplLCBmYWxzZSk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyLT5zZXRUaWxlU2l6ZSh0aWxl
U2l6ZSk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyLT5zZXRMYXllclBvc2l0
aW9uKGhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CkBAIC03OTksOSArNzk5LDExIEBA
IGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cygpCiAg
ICAgbV92aWRlb0xheWVyU2hhcmVkVmFsdWVzID0gYWRvcHRQdHIobmV3IFZpZGVvTGF5ZXJDaHJv
bWl1bTo6U2hhcmVkVmFsdWVzKG1fY29udGV4dC5nZXQoKSkpOwogICAgIG1fcGx1Z2luTGF5ZXJT
aGFyZWRWYWx1ZXMgPSBhZG9wdFB0cihuZXcgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFs
dWVzKG1fY29udGV4dC5nZXQoKSkpOwogICAgIG1fcmVuZGVyU3VyZmFjZVNoYXJlZFZhbHVlcyA9
IGFkb3B0UHRyKG5ldyBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OlNoYXJlZFZhbHVlcyhtX2NvbnRl
eHQuZ2V0KCkpKTsKKyAgICBtX3RpbGVyU2hhcmVkVmFsdWVzID0gYWRvcHRQdHIobmV3IExheWVy
VGlsZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKG1fY29udGV4dC5nZXQoKSkpOwogCiAgICAgaWYg
KCFtX2xheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpIHx8ICFtX2NvbnRlbnRMYXllclNo
YXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV9jYW52YXNMYXllclNoYXJlZFZhbHVlcy0+
aW5pdGlhbGl6ZWQoKQotICAgICAgICB8fCAhbV92aWRlb0xheWVyU2hhcmVkVmFsdWVzLT5pbml0
aWFsaXplZCgpIHx8ICFtX3BsdWdpbkxheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpIHx8
ICFtX3JlbmRlclN1cmZhY2VTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkpIHsKKyAgICAgICAg
fHwgIW1fdmlkZW9MYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV9wbHVnaW5M
YXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV9yZW5kZXJTdXJmYWNlU2hhcmVk
VmFsdWVzLT5pbml0aWFsaXplZCgpCisgICAgICAgIHx8ICFtX3RpbGVyU2hhcmVkVmFsdWVzLT5p
bml0aWFsaXplZCgpKSB7CiAgICAgICAgIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CkBAIC04MjAsNiArODIyLDcgQEAgdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNsZWFudXBTaGFyZWRPYmplY3RzKCkKICAgICBtX3ZpZGVvTGF5ZXJTaGFy
ZWRWYWx1ZXMuY2xlYXIoKTsKICAgICBtX3BsdWdpbkxheWVyU2hhcmVkVmFsdWVzLmNsZWFyKCk7
CiAgICAgbV9yZW5kZXJTdXJmYWNlU2hhcmVkVmFsdWVzLmNsZWFyKCk7CisgICAgbV90aWxlclNo
YXJlZFZhbHVlcy5jbGVhcigpOwogICAgIGlmIChtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQpCiAg
ICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIo
bV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgKaW5kZXggM2QzZTc4NGM0Y2ExODVkOTNjZjNhOGUxODZlMWEwNDNlNzg2ZjYzZi4uZTI1
NzU5ZDRkNzc2YzA0YzJjYjVkYWIzYTFkYWZjZTA5MzUwYTQzMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmgKQEAgLTExMiw2ICsxMTIsNyBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
VmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIHZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMo
KSBjb25zdCB7IHJldHVybiBtX3ZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMuZ2V0KCk7IH0KICAgICBj
b25zdCBQbHVnaW5MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIHBsdWdpbkxheWVyU2hhcmVk
VmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5MYXllclNoYXJlZFZhbHVlcy5nZXQoKTsg
fQogICAgIGNvbnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiByZW5kZXJT
dXJmYWNlU2hhcmVkVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJTdXJmYWNlU2hhcmVk
VmFsdWVzLmdldCgpOyB9CisgICAgY29uc3QgTGF5ZXJUaWxlckNocm9taXVtOjpTaGFyZWRWYWx1
ZXMqIHRpbGVyU2hhcmVkVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV90aWxlclNoYXJlZFZhbHVl
cy5nZXQoKTsgfQogCiAgICAgdm9pZCByZXNpemVPbnNjcmVlbkNvbnRlbnQoY29uc3QgSW50U2l6
ZSYpOwogCkBAIC0xOTQsNiArMTk1LDcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8VmlkZW9MYXll
ckNocm9taXVtOjpTaGFyZWRWYWx1ZXM+IG1fdmlkZW9MYXllclNoYXJlZFZhbHVlczsKICAgICBP
d25QdHI8UGx1Z2luTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzPiBtX3BsdWdpbkxheWVyU2hh
cmVkVmFsdWVzOwogICAgIE93blB0cjxSZW5kZXJTdXJmYWNlQ2hyb21pdW06OlNoYXJlZFZhbHVl
cz4gbV9yZW5kZXJTdXJmYWNlU2hhcmVkVmFsdWVzOworICAgIE93blB0cjxMYXllclRpbGVyQ2hy
b21pdW06OlNoYXJlZFZhbHVlcz4gbV90aWxlclNoYXJlZFZhbHVlczsKIAogICAgIE93blB0cjxU
ZXh0dXJlTWFuYWdlcj4gbV90ZXh0dXJlTWFuYWdlcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJv
bWl1bS5jcHAKaW5kZXggZTFiZjg5ODU0YjEyMGI1N2U4NjY4MDU1MDFiZTBiODdlMzFjMmNmZC4u
MWI3MmQyNzZhNDFlMTk4MGNmMTk0MWJmY2M1OThjMWYwM2IxNDdkYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRpbGVyQ2hyb21pdW0uY3BwCkBAIC00NiwxNiArNDYsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1QYXNzT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gTGF5ZXJUaWxlckNocm9taXVt
OjpjcmVhdGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRT
aXplJiB0aWxlU2l6ZSkKK1Bhc3NPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtPiBMYXllclRpbGVy
Q2hyb21pdW06OmNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNv
bnN0IEludFNpemUmIHRpbGVTaXplLCBib29sIGhhc0JvcmRlclRleGVscykKIHsKICAgICBpZiAo
IWxheWVyUmVuZGVyZXIgfHwgdGlsZVNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJUaWxlckNocm9taXVtKGxheWVyUmVuZGVy
ZXIsIHRpbGVTaXplKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBMYXllclRpbGVyQ2hyb21p
dW0obGF5ZXJSZW5kZXJlciwgdGlsZVNpemUsIGhhc0JvcmRlclRleGVscykpOwogfQogCi1MYXll
clRpbGVyQ2hyb21pdW06OkxheWVyVGlsZXJDaHJvbWl1bShMYXllclJlbmRlcmVyQ2hyb21pdW0q
IGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplKQorTGF5ZXJUaWxlckNocm9t
aXVtOjpMYXllclRpbGVyQ2hyb21pdW0oTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRl
cmVyLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgYm9vbCBoYXNCb3JkZXJUZXhlbHMpCiAgICAg
OiBtX3NraXBzRHJhdyhmYWxzZSkKKyAgICAsIG1fdGlsaW5nRGF0YShzdGQ6Om1heCh0aWxlU2l6
ZS53aWR0aCgpLCB0aWxlU2l6ZS5oZWlnaHQoKSksIDAsIDAsIGhhc0JvcmRlclRleGVscykKICAg
ICAsIG1fbGF5ZXJSZW5kZXJlcihsYXllclJlbmRlcmVyKQogewogICAgIHNldFRpbGVTaXplKHRp
bGVTaXplKTsKQEAgLTgxLDYgKzgyLDcgQEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnNldFRp
bGVTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiAKICAgICBtX3RpbGVTaXplID0gc2l6ZTsKICAg
ICBtX3RpbGVQaXhlbHMgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50OF90W21fdGlsZVNpemUud2lk
dGgoKSAqIG1fdGlsZVNpemUuaGVpZ2h0KCkgKiA0XSk7CisgICAgbV90aWxpbmdEYXRhLnNldE1h
eFRleHR1cmVTaXplKHN0ZDo6bWF4KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwogfQog
CiB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6cmVzZXQoKQpAQCAtODgsOCArOTAsNyBAQCB2b2lk
IExheWVyVGlsZXJDaHJvbWl1bTo6cmVzZXQoKQogICAgIG1fdGlsZXMuY2xlYXIoKTsKICAgICBt
X3VudXNlZFRpbGVzLmNsZWFyKCk7CiAKLSAgICBtX2xheWVyU2l6ZSA9IEludFNpemUoKTsKLSAg
ICBtX2xheWVyVGlsZVNpemUgPSBJbnRTaXplKCk7CisgICAgbV90aWxpbmdEYXRhLnNldFRvdGFs
U2l6ZSgwLCAwKTsKICAgICBtX2xhc3RVcGRhdGVMYXllclJlY3QgPSBJbnRSZWN0KCk7CiB9CiAK
QEAgLTE0MywxMCArMTQ0LDEwIEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpjb250ZW50UmVj
dFRvVGlsZUluZGljZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGluCiB7CiAgICAgY29u
c3QgSW50UmVjdCBsYXllclJlY3QgPSBjb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnRlbnRSZWN0
KTsKIAotICAgIGxlZnQgPSBsYXllclJlY3QueCgpIC8gbV90aWxlU2l6ZS53aWR0aCgpOwotICAg
IHRvcCA9IGxheWVyUmVjdC55KCkgLyBtX3RpbGVTaXplLmhlaWdodCgpOwotICAgIHJpZ2h0ID0g
KGxheWVyUmVjdC5tYXhYKCkgLSAxKSAvIG1fdGlsZVNpemUud2lkdGgoKTsKLSAgICBib3R0b20g
PSAobGF5ZXJSZWN0Lm1heFkoKSAtIDEpIC8gbV90aWxlU2l6ZS5oZWlnaHQoKTsKKyAgICBsZWZ0
ID0gbV90aWxpbmdEYXRhLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQobGF5ZXJSZWN0LngoKSk7Cisg
ICAgdG9wID0gbV90aWxpbmdEYXRhLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQobGF5ZXJSZWN0Lnko
KSk7CisgICAgcmlnaHQgPSBtX3RpbGluZ0RhdGEudGlsZVhJbmRleEZyb21TcmNDb29yZChsYXll
clJlY3QubWF4WCgpKTsKKyAgICBib3R0b20gPSBtX3RpbGluZ0RhdGEudGlsZVlJbmRleEZyb21T
cmNDb29yZChsYXllclJlY3QubWF4WSgpKTsKIH0KIAogSW50UmVjdCBMYXllclRpbGVyQ2hyb21p
dW06OmNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNv
bnN0CkBAIC0xNjksMjIgKzE3MCwzMiBAQCBJbnRSZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6bGF5
ZXJSZWN0VG9Db250ZW50UmVjdChjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpIGNvbgogCiBpbnQg
TGF5ZXJUaWxlckNocm9taXVtOjp0aWxlSW5kZXgoaW50IGksIGludCBqKSBjb25zdAogewotICAg
IEFTU0VSVChpID49IDAgJiYgaiA+PSAwICYmIGkgPCBtX2xheWVyVGlsZVNpemUud2lkdGgoKSAm
JiBqIDwgbV9sYXllclRpbGVTaXplLmhlaWdodCgpKTsKLSAgICByZXR1cm4gaSArIGogKiBtX2xh
eWVyVGlsZVNpemUud2lkdGgoKTsKKyAgICByZXR1cm4gbV90aWxpbmdEYXRhLnRpbGVJbmRleChp
LCBqKTsKIH0KIAogSW50UmVjdCBMYXllclRpbGVyQ2hyb21pdW06OnRpbGVDb250ZW50UmVjdChp
bnQgaSwgaW50IGopIGNvbnN0CiB7Ci0gICAgSW50UG9pbnQgYW5jaG9yKG1fbGF5ZXJQb3NpdGlv
bi54KCkgKyBpICogbV90aWxlU2l6ZS53aWR0aCgpLCBtX2xheWVyUG9zaXRpb24ueSgpICsgaiAq
IG1fdGlsZVNpemUuaGVpZ2h0KCkpOwotICAgIEludFJlY3QgdGlsZShhbmNob3IsIG1fdGlsZVNp
emUpOwotICAgIHJldHVybiB0aWxlOworICAgIEludFJlY3QgY29udGVudFJlY3QgPSB0aWxlTGF5
ZXJSZWN0KGksIGopOworICAgIGNvbnRlbnRSZWN0Lm1vdmUobV9sYXllclBvc2l0aW9uLngoKSwg
bV9sYXllclBvc2l0aW9uLnkoKSk7CisgICAgcmV0dXJuIGNvbnRlbnRSZWN0OwogfQogCiBJbnRS
ZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6dGlsZUxheWVyUmVjdChpbnQgaSwgaW50IGopIGNvbnN0
CiB7Ci0gICAgSW50UG9pbnQgYW5jaG9yKGkgKiBtX3RpbGVTaXplLndpZHRoKCksIGogKiBtX3Rp
bGVTaXplLmhlaWdodCgpKTsKLSAgICBJbnRSZWN0IHRpbGUoYW5jaG9yLCBtX3RpbGVTaXplKTsK
LSAgICByZXR1cm4gdGlsZTsKKyAgICBjb25zdCBpbnQgaW5kZXggPSBtX3RpbGluZ0RhdGEudGls
ZUluZGV4KGksIGopOworICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gbV90aWxpbmdEYXRhLnRpbGVC
b3VuZHNXaXRoQm9yZGVyKGluZGV4KTsKKyAgICBsYXllclJlY3Quc2V0U2l6ZShtX3RpbGVTaXpl
KTsKKyAgICByZXR1cm4gbGF5ZXJSZWN0OworfQorCitJbnRTaXplIExheWVyVGlsZXJDaHJvbWl1
bTo6bGF5ZXJTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZShtX3RpbGluZ0RhdGEu
dG90YWxTaXplWCgpLCBtX3RpbGluZ0RhdGEudG90YWxTaXplWSgpKTsKK30KKworSW50U2l6ZSBM
YXllclRpbGVyQ2hyb21pdW06OmxheWVyVGlsZVNpemUoKSBjb25zdAoreworICAgIHJldHVybiBJ
bnRTaXplKG1fdGlsaW5nRGF0YS5udW1UaWxlc1goKSwgbV90aWxpbmdEYXRhLm51bVRpbGVzWSgp
KTsKIH0KIAogdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmludmFsaWRhdGVSZWN0KGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0KQpAQCAtMjIwLDggKzIzMSw3IEBAIHZvaWQgTGF5ZXJUaWxlckNo
cm9taXVtOjppbnZhbGlkYXRlRW50aXJlTGF5ZXIoKQogICAgIH0KICAgICBtX3RpbGVzLmNsZWFy
KCk7CiAKLSAgICBtX2xheWVyU2l6ZSA9IEludFNpemUoKTsKLSAgICBtX2xheWVyVGlsZVNpemUg
PSBJbnRTaXplKCk7CisgICAgbV90aWxpbmdEYXRhLnNldFRvdGFsU2l6ZSgwLCAwKTsKICAgICBt
X2xhc3RVcGRhdGVMYXllclJlY3QgPSBJbnRSZWN0KCk7CiB9CiAKQEAgLTM3OCwyNiArMzg4LDM4
IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpkcmF3KGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KQogICAgIGlmIChtX3NraXBzRHJhdyB8fCAhbV90aWxlcy5zaXplKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIC8vIFdlIHJldXNlIHRoZSBzaGFkZXIgcHJvZ3JhbSB1c2VkIGJ5IENvbnRl
bnRMYXllckNocm9taXVtLgogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJS
ZW5kZXJlckNvbnRleHQoKTsKLSAgICBjb25zdCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVk
VmFsdWVzKiBjb250ZW50TGF5ZXJWYWx1ZXMgPSBsYXllclJlbmRlcmVyKCktPmNvbnRlbnRMYXll
clNoYXJlZFZhbHVlcygpOwotICAgIGxheWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVyKGNvbnRlbnRM
YXllclZhbHVlcy0+Y29udGVudFNoYWRlclByb2dyYW0oKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnVuaWZvcm0xaShjb250ZW50TGF5ZXJWYWx1ZXMtPnNoYWRlclNhbXBsZXJMb2NhdGlv
bigpLCAwKSk7CisgICAgY29uc3QgTGF5ZXJUaWxlckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIHNo
YXJlZFZhbHVlcyA9IGxheWVyUmVuZGVyZXIoKS0+dGlsZXJTaGFyZWRWYWx1ZXMoKTsKKyAgICBs
YXllclJlbmRlcmVyKCktPnVzZVNoYWRlcihzaGFyZWRWYWx1ZXMtPnRpbGVyU2hhZGVyUHJvZ3Jh
bSgpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHNoYXJlZFZhbHVlcy0+
c2hhZGVyU2FtcGxlckxvY2F0aW9uKCksIDApKTsKIAogICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0
LCBib3R0b207CiAgICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0
LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9t
OyArK2opIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewot
ICAgICAgICAgICAgVGlsZSogdGlsZSA9IG1fdGlsZXNbdGlsZUluZGV4KGksIGopXS5nZXQoKTsK
KyAgICAgICAgICAgIGNvbnN0IGludCBpbmRleCA9IHRpbGVJbmRleChpLCBqKTsKKyAgICAgICAg
ICAgIFRpbGUqIHRpbGUgPSBtX3RpbGVzW2luZGV4XS5nZXQoKTsKICAgICAgICAgICAgIEFTU0VS
VCh0aWxlKTsKIAogICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5iaW5kVGV4dHVyZSgpOwog
CiAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0aWxlTWF0cml4OwotICAgICAgICAg
ICAgSW50UmVjdCB0aWxlUmVjdCA9IHRpbGVDb250ZW50UmVjdChpLCBqKTsKKworICAgICAgICAg
ICAgLy8gRG9uJ3QgdXNlIHRpbGVDb250ZW50UmVjdCBoZXJlLCBhcyB0aGF0IGNvbnRhaW5zIHRo
ZSBmdWxsCisgICAgICAgICAgICAvLyByZWN0IHdpdGggYm9yZGVyIHRleGVscyB3aGljaCBzaG91
bGRuJ3QgYmUgZHJhd24uCisgICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gbV90aWxpbmdE
YXRhLnRpbGVCb3VuZHMoaW5kZXgpOworICAgICAgICAgICAgdGlsZVJlY3QubW92ZShtX2xheWVy
UG9zaXRpb24ueCgpLCBtX2xheWVyUG9zaXRpb24ueSgpKTsKICAgICAgICAgICAgIHRpbGVNYXRy
aXgudHJhbnNsYXRlM2QodGlsZVJlY3QueCgpIC0gY29udGVudFJlY3QueCgpICsgdGlsZVJlY3Qu
d2lkdGgoKSAvIDIuMCwgdGlsZVJlY3QueSgpIC0gY29udGVudFJlY3QueSgpICsgdGlsZVJlY3Qu
aGVpZ2h0KCkgLyAyLjAsIDApOwogCi0gICAgICAgICAgICBMYXllckNocm9taXVtOjpkcmF3VGV4
dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCB0
aWxlTWF0cml4LCBtX3RpbGVTaXplLndpZHRoKCksIG1fdGlsZVNpemUuaGVpZ2h0KCksIDEsIGNv
bnRlbnRMYXllclZhbHVlcy0+c2hhZGVyTWF0cml4TG9jYXRpb24oKSwgY29udGVudExheWVyVmFs
dWVzLT5zaGFkZXJBbHBoYUxvY2F0aW9uKCkpOworICAgICAgICAgICAgSW50UG9pbnQgdGV4T2Zm
c2V0ID0gbV90aWxpbmdEYXRhLnRleHR1cmVPZmZzZXQoaSwgaik7CisgICAgICAgICAgICBmbG9h
dCB0aWxlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9hdD4obV90aWxlU2l6ZS53aWR0aCgpKTsKKyAg
ICAgICAgICAgIGZsb2F0IHRpbGVIZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9hdD4obV90aWxlU2l6
ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICBmbG9hdCB0ZXhUcmFuc2xhdGVYID0gdGV4T2Zmc2V0
LngoKSAvIHRpbGVXaWR0aDsKKyAgICAgICAgICAgIGZsb2F0IHRleFRyYW5zbGF0ZVkgPSB0ZXhP
ZmZzZXQueSgpIC8gdGlsZUhlaWdodDsKKyAgICAgICAgICAgIGZsb2F0IHRleFNjYWxlWCA9IHRp
bGVSZWN0LndpZHRoKCkgLyB0aWxlV2lkdGg7CisgICAgICAgICAgICBmbG9hdCB0ZXhTY2FsZVkg
PSB0aWxlUmVjdC5oZWlnaHQoKSAvIHRpbGVIZWlnaHQ7CisKKyAgICAgICAgICAgIGRyYXdUZXh0
dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIHRp
bGVNYXRyaXgsIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpLCAxLCB0ZXhUcmFu
c2xhdGVYLCB0ZXhUcmFuc2xhdGVZLCB0ZXhTY2FsZVgsIHRleFNjYWxlWSwgc2hhcmVkVmFsdWVz
KTsKIAogICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT51bnJlc2VydmUoKTsKICAgICAgICAg
fQpAQCAtNDA2LDMzICs0MjgsMTM3IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpkcmF3KGNv
bnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogCiB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6cmVz
aXplTGF5ZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAobV9sYXllclNpemUgPT0g
c2l6ZSkKKyAgICBpZiAobGF5ZXJTaXplKCkgPT0gc2l6ZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaW50IHdpZHRoID0gKHNpemUud2lkdGgoKSArIG1fdGlsZVNpemUud2lkdGgoKSAtIDEpIC8g
bV90aWxlU2l6ZS53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSAoc2l6ZS5oZWlnaHQoKSArIG1f
dGlsZVNpemUuaGVpZ2h0KCkgLSAxKSAvIG1fdGlsZVNpemUuaGVpZ2h0KCk7CisgICAgY29uc3Qg
SW50U2l6ZSBvbGRUaWxlU2l6ZSA9IGxheWVyVGlsZVNpemUoKTsKKyAgICBtX3RpbGluZ0RhdGEu
c2V0VG90YWxTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgY29uc3QgSW50
U2l6ZSBuZXdUaWxlU2l6ZSA9IGxheWVyVGlsZVNpemUoKTsKIAotICAgIFZlY3RvcjxPd25QdHI8
VGlsZT4gPiBuZXdUaWxlczsKLSAgICBuZXdUaWxlcy5yZXNpemUod2lkdGggKiBoZWlnaHQpOwot
ICAgIGZvciAoaW50IGogPSAwOyBqIDwgbV9sYXllclRpbGVTaXplLmhlaWdodCgpOyArK2opCi0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9sYXllclRpbGVTaXplLndpZHRoKCk7ICsraSkK
LSAgICAgICAgICAgIG5ld1RpbGVzW2kgKyBqICogd2lkdGhdLnN3YXAobV90aWxlc1tpICsgaiAq
IG1fbGF5ZXJUaWxlU2l6ZS53aWR0aCgpXSk7CisgICAgaWYgKG9sZFRpbGVTaXplID09IG5ld1Rp
bGVTaXplKQorICAgICAgICByZXR1cm47CiAKKyAgICBWZWN0b3I8T3duUHRyPFRpbGU+ID4gbmV3
VGlsZXM7CisgICAgbmV3VGlsZXMucmVzaXplKG5ld1RpbGVTaXplLndpZHRoKCkgKiBuZXdUaWxl
U2l6ZS5oZWlnaHQoKSk7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBvbGRUaWxlU2l6ZS5oZWln
aHQoKTsgKytqKQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9sZFRpbGVTaXplLndpZHRo
KCk7ICsraSkKKyAgICAgICAgICAgIG5ld1RpbGVzW2kgKyBqICogbmV3VGlsZVNpemUud2lkdGgo
KV0uc3dhcChtX3RpbGVzW2kgKyBqICogb2xkVGlsZVNpemUud2lkdGgoKV0pOwogICAgIG1fdGls
ZXMuc3dhcChuZXdUaWxlcyk7Ci0gICAgbV9sYXllclNpemUgPSBzaXplOwotICAgIG1fbGF5ZXJU
aWxlU2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CiB9CiAKIHZvaWQgTGF5ZXJUaWxlckNo
cm9taXVtOjpncm93TGF5ZXJUb0NvbnRhaW4oY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiB7
CiAgICAgLy8gR3JvdyB0aGUgdGlsZSBhcnJheSB0byBjb250YWluIHRoaXMgY29udGVudCByZWN0
LgogICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY29udGVudFJlY3RUb0xheWVyUmVjdChjb250ZW50
UmVjdCk7Ci0gICAgSW50U2l6ZSBsYXllclNpemUgPSBJbnRTaXplKGxheWVyUmVjdC5tYXhYKCks
IGxheWVyUmVjdC5tYXhZKCkpOworICAgIEludFNpemUgcmVjdFNpemUgPSBJbnRTaXplKGxheWVy
UmVjdC5tYXhYKCksIGxheWVyUmVjdC5tYXhZKCkpOwogCi0gICAgSW50U2l6ZSBuZXdTaXplID0g
bGF5ZXJTaXplLmV4cGFuZGVkVG8obV9sYXllclNpemUpOworICAgIEludFNpemUgbmV3U2l6ZSA9
IHJlY3RTaXplLmV4cGFuZGVkVG8obGF5ZXJTaXplKCkpOwogICAgIHJlc2l6ZUxheWVyKG5ld1Np
emUpOwogfQogCit2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHByb2pl
Y3Rpb25NYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0cml4LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWln
aHQsIGZsb2F0IG9wYWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmxvYXQgdGV4VHJhbnNsYXRlWCwgZmxvYXQgdGV4VHJhbnNsYXRlWSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB0ZXhTY2FsZVgsIGZsb2F0IHRleFNjYWxlWSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXllclRpbGVyQ2hy
b21pdW06OlNoYXJlZFZhbHVlcyogc3YpCit7CisgICAgc3RhdGljIGZsb2F0IGdsTWF0cml4WzE2
XTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbmRlck1hdHJpeCA9IGRyYXdNYXRyaXg7
CisKKyAgICAvLyBBcHBseSBhIHNjYWxpbmcgZmFjdG9yIHRvIHNpemUgdGhlIHF1YWQgZnJvbSAx
eDEgdG8gaXRzIGludGVuZGVkIHNpemUuCisgICAgcmVuZGVyTWF0cml4LnNjYWxlM2Qod2lkdGgs
IGhlaWdodCwgMSk7CisKKyAgICAvLyBBcHBseSB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmVmb3Jl
IHNlbmRpbmcgdGhlIHRyYW5zZm9ybSBvdmVyIHRvIHRoZSBzaGFkZXIuCisgICAgTGF5ZXJDaHJv
bWl1bTo6dG9HTE1hdHJpeCgmZ2xNYXRyaXhbMF0sIHByb2plY3Rpb25NYXRyaXggKiByZW5kZXJN
YXRyaXgpOworCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYoc3Yt
PnNoYWRlck1hdHJpeExvY2F0aW9uKCksIGZhbHNlLCAmZ2xNYXRyaXhbMF0sIDEpKTsKKworICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWYoc3YtPnNoYWRlckFscGhhTG9jYXRpb24o
KSwgb3BhY2l0eSkpOworCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihzdi0+
c2hhZGVyVGV4VHJhbnNmb3JtTG9jYXRpb24oKSwKKyAgICAgICAgdGV4VHJhbnNsYXRlWCwgdGV4
VHJhbnNsYXRlWSwgdGV4U2NhbGVYLCB0ZXhTY2FsZVkpKTsKKworICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgNiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKSk7Cit9CisKK0xheWVyVGlsZXJDaHJv
bWl1bTo6U2hhcmVkVmFsdWVzOjpTaGFyZWRWYWx1ZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fdGlsZXJTaGFkZXJQcm9ncmFt
KDApCisgICAgLCBtX3NoYWRlclNhbXBsZXJMb2NhdGlvbigtMSkKKyAgICAsIG1fc2hhZGVyTWF0
cml4TG9jYXRpb24oLTEpCisgICAgLCBtX3NoYWRlckFscGhhTG9jYXRpb24oLTEpCisgICAgLCBt
X2luaXRpYWxpemVkKGZhbHNlKQoreworICAgIC8vIFNoYWRlcnMgZm9yIGRyYXdpbmcgdGhlIGxh
eWVyIGNvbnRlbnRzLgorICAgIGNoYXIgdmVydGV4U2hhZGVyU3RyaW5nW10gPQorICAgICAgICAi
YXR0cmlidXRlIHZlYzQgYV9wb3NpdGlvbjsgICBcbiIKKyAgICAgICAgImF0dHJpYnV0ZSB2ZWMy
IGFfdGV4Q29vcmQ7ICAgXG4iCisgICAgICAgICJ1bmlmb3JtIG1hdDQgbWF0cml4OyAgICAgICAg
IFxuIgorICAgICAgICAidW5pZm9ybSB2ZWM0IHRleFRyYW5zZm9ybTsgICBcbiIKKyAgICAgICAg
InZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyAgICAgXG4iCisgICAgICAgICJ2b2lkIG1haW4oKSAg
ICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAieyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcbiIKKyAgICAgICAgIiAgZ2xfUG9zaXRpb24gPSBtYXRyaXggKiBhX3Bvc2l0aW9uOyBcbiIK
KyAgICAgICAgIiAgdl90ZXhDb29yZCA9IGFfdGV4Q29vcmQgKiB0ZXhUcmFuc2Zvcm0uencgKyB0
ZXhUcmFuc2Zvcm0ueHk7XG4iCisgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFxuIjsKKworI2lmIFBMQVRGT1JNKFNLSUEpCisgICAgLy8gQ29sb3IgaXMgaW4gUkdCQSBvcmRl
ci4KKyAgICBjaGFyIHJnYmFGcmFnbWVudFNoYWRlclN0cmluZ1tdID0KKyAgICAgICAgInByZWNp
c2lvbiBtZWRpdW1wIGZsb2F0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAg
ICAgInZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
biIKKyAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIHNfdGV4dHVyZTsgICAgICAgICAgICAgICAg
ICAgICAgICBcbiIKKyAgICAgICAgInVuaWZvcm0gZmxvYXQgYWxwaGE7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInZvaWQgbWFpbigpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgIiAgdmVjNCB0
ZXhDb2xvciA9IHRleHR1cmUyRChzX3RleHR1cmUsIHZfdGV4Q29vcmQpOyBcbiIKKyAgICAgICAg
IiAgZ2xfRnJhZ0NvbG9yID0gdGV4Q29sb3IgKiBhbHBoYTsgXG4iCisgICAgICAgICJ9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOworI2VuZGlm
CisKKyAgICAvLyBDb2xvciBpcyBpbiBCR1JBIG9yZGVyLgorICAgIGNoYXIgYmdyYUZyYWdtZW50
U2hhZGVyU3RyaW5nW10gPQorICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidmFyeWluZyB2ZWMyIHZfdGV4Q29v
cmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidW5pZm9ybSBzYW1w
bGVyMkQgc190ZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidW5p
Zm9ybSBmbG9hdCBhbHBoYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAg
ICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFxuIgorICAgICAgICAieyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFxuIgorICAgICAgICAiICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHNfdGV4
dHVyZSwgdl90ZXhDb29yZCk7IFxuIgorICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHRl
eENvbG9yLnosIHRleENvbG9yLnksIHRleENvbG9yLngsIHRleENvbG9yLncpICogYWxwaGE7IFxu
IgorICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxuIjsKKworI2lmIFBMQVRGT1JNKFNLSUEpCisgICAgLy8gQXNzdW1pbmcgdGhlIHBh
Y2tpbmcgaXMgZWl0aGVyIFNraWEgZGVmYXVsdCBSR0JBIG9yIENocm9taXVtIGRlZmF1bHQgQkdS
QS4KKyAgICBjaGFyKiBmcmFnbWVudFNoYWRlclN0cmluZyA9IFNLX0IzMl9TSElGVCA/IHJnYmFG
cmFnbWVudFNoYWRlclN0cmluZyA6IGJncmFGcmFnbWVudFNoYWRlclN0cmluZzsKKyNlbHNlCisg
ICAgY2hhciogZnJhZ21lbnRTaGFkZXJTdHJpbmcgPSBiZ3JhRnJhZ21lbnRTaGFkZXJTdHJpbmc7
CisjZW5kaWYKKyAgICBtX3RpbGVyU2hhZGVyUHJvZ3JhbSA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZVNoYWRlclByb2dyYW0obV9jb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTdHJpbmcsIGZyYWdtZW50U2hh
ZGVyU3RyaW5nKTsKKyAgICBpZiAoIW1fdGlsZXJTaGFkZXJQcm9ncmFtKSB7CisgICAgICAgIExP
R19FUlJPUigiTGF5ZXJUaWxlckNocm9taXVtOiBGYWlsZWQgdG8gY3JlYXRlIHNoYWRlciBwcm9n
cmFtIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3NoYWRlclNhbXBsZXJMb2Nh
dGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1fdGlsZXJTaGFkZXJQcm9ncmFt
LCAic190ZXh0dXJlIik7CisgICAgbV9zaGFkZXJNYXRyaXhMb2NhdGlvbiA9IG1fY29udGV4dC0+
Z2V0VW5pZm9ybUxvY2F0aW9uKG1fdGlsZXJTaGFkZXJQcm9ncmFtLCAibWF0cml4Iik7CisgICAg
bV9zaGFkZXJBbHBoYUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV90
aWxlclNoYWRlclByb2dyYW0sICJhbHBoYSIpOworICAgIG1fc2hhZGVyVGV4VHJhbnNmb3JtTG9j
YXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3RpbGVyU2hhZGVyUHJvZ3Jh
bSwgInRleFRyYW5zZm9ybSIpOworICAgIEFTU0VSVChtX3NoYWRlclNhbXBsZXJMb2NhdGlvbiAh
PSAtMSk7CisgICAgQVNTRVJUKG1fc2hhZGVyTWF0cml4TG9jYXRpb24gIT0gLTEpOworICAgIEFT
U0VSVChtX3NoYWRlckFscGhhTG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChtX3NoYWRlclRl
eFRyYW5zZm9ybUxvY2F0aW9uICE9IC0xKTsKKworICAgIG1faW5pdGlhbGl6ZWQgPSB0cnVlOwor
fQorCitMYXllclRpbGVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6flNoYXJlZFZhbHVlcygpCit7
CisgICAgaWYgKG1fdGlsZXJTaGFkZXJQcm9ncmFtKQorICAgICAgICBHTEMobV9jb250ZXh0LCBt
X2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV90aWxlclNoYWRlclByb2dyYW0pKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUaWxlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaAppbmRleCBlMDk2OTNkN2UxZWMxZmM3YmFl
NTE1NTk3YjgzNGYwNjkxMWM2MGFhLi4xODI4NDExOTBjODRlZTAxMDhkZTE3NTcwZmUyNTVmYTEw
M2QxOWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaApAQCAtMzEsNiArMzEsNyBAQAog
CiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyVGV4dHVyZS5oIgor
I2luY2x1ZGUgIlRpbGluZ0RhdGEuaCIKICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDYsNyArNDcsNyBAQCBwdWJsaWM6CiBjbGFzcyBMYXll
clRpbGVyQ2hyb21pdW0gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExheWVyVGlsZXJDaHJv
bWl1bSk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJUaWxlckNocm9taXVt
PiBjcmVhdGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRT
aXplJiB0aWxlU2l6ZSk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJUaWxlckNocm9taXVt
PiBjcmVhdGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUs
IGJvb2wgaGFzQm9yZGVyVGV4ZWxzKTsKIAogICAgIH5MYXllclRpbGVyQ2hyb21pdW0oKTsKIApA
QCAtNjAsOCArNjEsMzAgQEAgcHVibGljOgogICAgIC8vIENoYW5nZSB0aGUgdGlsZSBzaXplLiAg
VGhpcyBtYXkgaW52YWxpZGF0ZSBhbGwgdGhlIGV4aXN0aW5nIHRpbGVzLgogICAgIHZvaWQgc2V0
VGlsZVNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSk7CiAKKyAgICBjbGFzcyBTaGFyZWRWYWx1ZXMg
eworICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgU2hhcmVkVmFsdWVzKEdyYXBoaWNzQ29u
dGV4dDNEKik7CisgICAgICAgIH5TaGFyZWRWYWx1ZXMoKTsKKworICAgICAgICB1bnNpZ25lZCB0
aWxlclNoYWRlclByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtX3RpbGVyU2hhZGVyUHJvZ3JhbTsg
fQorICAgICAgICBpbnQgc2hhZGVyU2FtcGxlckxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9z
aGFkZXJTYW1wbGVyTG9jYXRpb247IH0KKyAgICAgICAgaW50IHNoYWRlck1hdHJpeExvY2F0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9zaGFkZXJNYXRyaXhMb2NhdGlvbjsgfQorICAgICAgICBpbnQg
c2hhZGVyQWxwaGFMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZGVyQWxwaGFMb2NhdGlv
bjsgfQorICAgICAgICBpbnQgc2hhZGVyVGV4VHJhbnNmb3JtTG9jYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX3NoYWRlclRleFRyYW5zZm9ybUxvY2F0aW9uOyB9CisgICAgICAgIGludCBpbml0aWFs
aXplZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbGl6ZWQ7IH0KKworICAgIHByaXZhdGU6Cisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgICAgIHVuc2lnbmVkIG1f
dGlsZXJTaGFkZXJQcm9ncmFtOworICAgICAgICBpbnQgbV9zaGFkZXJTYW1wbGVyTG9jYXRpb247
CisgICAgICAgIGludCBtX3NoYWRlck1hdHJpeExvY2F0aW9uOworICAgICAgICBpbnQgbV9zaGFk
ZXJBbHBoYUxvY2F0aW9uOworICAgICAgICBpbnQgbV9zaGFkZXJUZXhUcmFuc2Zvcm1Mb2NhdGlv
bjsKKyAgICAgICAgaW50IG1faW5pdGlhbGl6ZWQ7CisgICAgfTsKKwogcHJpdmF0ZToKLSAgICBM
YXllclRpbGVyQ2hyb21pdW0oTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBj
b25zdCBJbnRTaXplJiB0aWxlU2l6ZSk7CisgICAgTGF5ZXJUaWxlckNocm9taXVtKExheWVyUmVu
ZGVyZXJDaHJvbWl1bSosIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBib29sIGhhc0JvcmRlclRl
eGVscyk7CiAKICAgICBjbGFzcyBUaWxlIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
VGlsZSk7CkBAIC03OSw2ICsxMDIsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgT3duUHRyPExheWVy
VGV4dHVyZT4gbV90ZXg7CiAgICAgfTsKIAorICAgIHZvaWQgZHJhd1RleHR1cmVkUXVhZChHcmFw
aGljc0NvbnRleHQzRCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwcm9qZWN0aW9uTWF0
cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd01hdHJpeCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgb3BhY2l0eSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgdGV4VHJhbnNsYXRlWCwgZmxvYXQgdGV4
VHJhbnNsYXRlWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgdGV4U2NhbGVYLCBm
bG9hdCB0ZXhTY2FsZVksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheWVyVGls
ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKik7CisKICAgICB2b2lkIHJlc2l6ZUxheWVyKGNvbnN0
IEludFNpemUmIHNpemUpOwogICAgIC8vIEdyb3cgbGF5ZXIgc2l6ZSB0byBjb250YWluIHRoaXMg
cmVjdGFuZ2xlLgogICAgIHZvaWQgZ3Jvd0xheWVyVG9Db250YWluKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0KTsKQEAgLTEwMCw5ICsxMjksMTAgQEAgcHJpdmF0ZToKICAgICAvLyBSZXR1cm5z
IHRoZSBib3VuZHMgaW4gbGF5ZXIgc3BhY2UgZm9yIGEgZ2l2ZW4gdGlsZSBsb2NhdGlvbi4KICAg
ICBJbnRSZWN0IHRpbGVMYXllclJlY3QoaW50IGksIGludCBqKSBjb25zdDsKIAorICAgIEludFNp
emUgbGF5ZXJTaXplKCkgY29uc3Q7CisgICAgSW50U2l6ZSBsYXllclRpbGVTaXplKCkgY29uc3Q7
CisKICAgICBJbnRTaXplIG1fdGlsZVNpemU7Ci0gICAgSW50U2l6ZSBtX2xheWVyU2l6ZTsKLSAg
ICBJbnRTaXplIG1fbGF5ZXJUaWxlU2l6ZTsKICAgICBJbnRSZWN0IG1fbGFzdFVwZGF0ZUxheWVy
UmVjdDsKICAgICBJbnRQb2ludCBtX2xheWVyUG9zaXRpb247CiAKQEAgLTExNiw2ICsxNDYsOCBA
QCBwcml2YXRlOgogICAgIC8vIENhY2hlIGEgdGlsZS1zaXplZCBwaXhlbCBidWZmZXIgdG8gZHJh
dyBpbnRvLgogICAgIE93bkFycmF5UHRyPHVpbnQ4X3Q+IG1fdGlsZVBpeGVsczsKIAorICAgIFRp
bGluZ0RhdGEgbV90aWxpbmdEYXRhOworCiAgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBtX2xh
eWVyUmVuZGVyZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvVGlsaW5nRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvVGlsaW5nRGF0YS5jcHAKaW5kZXggZTdjNGU0YzhhMTJiMWZlZTVhZjllOTUyMmQy
ZjY2ZGZmMzdjZDgwOS4uZGQ1NDBiMzk5MmM4MDlhZDc0MWRjOGQ3Y2M3NTQ0MmE3ZDFmNjg4NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0Rh
dGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdE
YXRhLmNwcApAQCAtNDQsNyArNDQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBp
bnQgY29tcHV0ZU51bVRpbGVzKGludCBtYXhUZXh0dXJlU2l6ZSwgaW50IHRvdGFsU2l6ZSwgaW50
IGJvcmRlclRleGVscykKIHsKLSAgICByZXR1cm4gbWF4KDEsIDEgKyAodG90YWxTaXplIC0gMSAt
IDIgKiBib3JkZXJUZXhlbHMpIC8gKG1heFRleHR1cmVTaXplIC0gMiAqIGJvcmRlclRleGVscykp
OworICAgIGludCBudW1UaWxlcyA9IG1heCgxLCAxICsgKHRvdGFsU2l6ZSAtIDEgLSAyICogYm9y
ZGVyVGV4ZWxzKSAvIChtYXhUZXh0dXJlU2l6ZSAtIDIgKiBib3JkZXJUZXhlbHMpKTsKKyAgICBy
ZXR1cm4gdG90YWxTaXplID4gMCA/IG51bVRpbGVzIDogMDsKIH0KIAogVGlsaW5nRGF0YTo6VGls
aW5nRGF0YShpbnQgbWF4VGV4dHVyZVNpemUsIGludCB0b3RhbFNpemVYLCBpbnQgdG90YWxTaXpl
WSwgYm9vbCBoYXNCb3JkZXJUZXhlbHMpCkBAIC01Myw4ICs1NCwyMCBAQCBUaWxpbmdEYXRhOjpU
aWxpbmdEYXRhKGludCBtYXhUZXh0dXJlU2l6ZSwgaW50IHRvdGFsU2l6ZVgsIGludCB0b3RhbFNp
emVZLCBib29sCiAgICAgLCBtX3RvdGFsU2l6ZVkodG90YWxTaXplWSkKICAgICAsIG1fYm9yZGVy
VGV4ZWxzKGhhc0JvcmRlclRleGVscyA/IDEgOiAwKQogewotICAgIG1fbnVtVGlsZXNYID0gY29t
cHV0ZU51bVRpbGVzKG1heFRleHR1cmVTaXplLCBtX3RvdGFsU2l6ZVgsIG1fYm9yZGVyVGV4ZWxz
KTsKLSAgICBtX251bVRpbGVzWSA9IGNvbXB1dGVOdW1UaWxlcyhtYXhUZXh0dXJlU2l6ZSwgbV90
b3RhbFNpemVZLCBtX2JvcmRlclRleGVscyk7CisgICAgcmVjb21wdXRlTnVtVGlsZXMoKTsKK30K
Kwordm9pZCBUaWxpbmdEYXRhOjpzZXRUb3RhbFNpemUoaW50IHRvdGFsU2l6ZVgsIGludCB0b3Rh
bFNpemVZKQoreworICAgIG1fdG90YWxTaXplWCA9IHRvdGFsU2l6ZVg7CisgICAgbV90b3RhbFNp
emVZID0gdG90YWxTaXplWTsKKyAgICByZWNvbXB1dGVOdW1UaWxlcygpOworfQorCit2b2lkIFRp
bGluZ0RhdGE6OnNldE1heFRleHR1cmVTaXplKGludCBtYXhUZXh0dXJlU2l6ZSkKK3sKKyAgICBt
X21heFRleHR1cmVTaXplID0gbV9tYXhUZXh0dXJlU2l6ZTsKKyAgICByZWNvbXB1dGVOdW1UaWxl
cygpOwogfQogCiBpbnQgVGlsaW5nRGF0YTo6dGlsZVhJbmRleEZyb21TcmNDb29yZChpbnQgc3Jj
UG9zKSBjb25zdApAQCAtMTQyLDkgKzE1NSw2IEBAIGludCBUaWxpbmdEYXRhOjp0aWxlU2l6ZVgo
aW50IHhJbmRleCkgY29uc3QKIHsKICAgICBBU1NFUlQoeEluZGV4ID49IDAgJiYgeEluZGV4IDwg
bnVtVGlsZXNYKCkpOwogCi0gICAgaW50IHNpemUgPSBtYXhUZXh0dXJlU2l6ZSgpOwotICAgIHNp
emUgPSBtaW4oc2l6ZSwgdG90YWxTaXplWCgpKTsKLQogICAgIGlmICgheEluZGV4ICYmIG1fbnVt
VGlsZXNYID09IDEpCiAgICAgICAgIHJldHVybiBtX3RvdGFsU2l6ZVg7CiAgICAgaWYgKCF4SW5k
ZXggJiYgbV9udW1UaWxlc1ggPiAxKQpAQCAtMTYyLDkgKzE3Miw2IEBAIGludCBUaWxpbmdEYXRh
Ojp0aWxlU2l6ZVkoaW50IHlJbmRleCkgY29uc3QKIHsKICAgICBBU1NFUlQoeUluZGV4ID49IDAg
JiYgeUluZGV4IDwgbnVtVGlsZXNZKCkpOwogCi0gICAgaW50IHNpemUgPSBtYXhUZXh0dXJlU2l6
ZSgpOwotICAgIHNpemUgPSBtaW4oc2l6ZSwgdG90YWxTaXplWSgpKTsKLQogICAgIGlmICgheUlu
ZGV4ICYmIG1fbnVtVGlsZXNZID09IDEpCiAgICAgICAgIHJldHVybiBtX3RvdGFsU2l6ZVk7CiAg
ICAgaWYgKCF5SW5kZXggJiYgbV9udW1UaWxlc1kgPiAxKQpAQCAtMjIyLDYgKzIyOSwyMCBAQCB2
b2lkIFRpbGluZ0RhdGE6OmludGVyc2VjdERyYXdRdWFkKGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBkcwogICAgICAgICBzcmNSZWN0SW50ZXJzZWN0ZWROb3JtSCAq
IGRzdFJlY3QuaGVpZ2h0KCkpOwogfQogCitJbnRQb2ludCBUaWxpbmdEYXRhOjp0ZXh0dXJlT2Zm
c2V0KGludCB4SW5kZXgsIGludCB5SW5kZXgpIGNvbnN0Cit7CisgICAgaW50IGxlZnQgPSAoIXhJ
bmRleCB8fCBtX251bVRpbGVzWCA9PSAxKSA/IDAgOiBtX2JvcmRlclRleGVsczsKKyAgICBpbnQg
dG9wID0gKCF5SW5kZXggfHwgbV9udW1UaWxlc1kgPT0gMSkgPyAwIDogbV9ib3JkZXJUZXhlbHM7
CisKKyAgICByZXR1cm4gSW50UG9pbnQobGVmdCwgdG9wKTsKK30KKwordm9pZCBUaWxpbmdEYXRh
OjpyZWNvbXB1dGVOdW1UaWxlcygpCit7CisgICAgbV9udW1UaWxlc1ggPSBjb21wdXRlTnVtVGls
ZXMobV9tYXhUZXh0dXJlU2l6ZSwgbV90b3RhbFNpemVYLCBtX2JvcmRlclRleGVscyk7CisgICAg
bV9udW1UaWxlc1kgPSBjb21wdXRlTnVtVGlsZXMobV9tYXhUZXh0dXJlU2l6ZSwgbV90b3RhbFNp
emVZLCBtX2JvcmRlclRleGVscyk7Cit9CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0YS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuaAppbmRleCBkMTE0MGJkNWY4
MDM1ZGM5YjBjNzVjMTJhODhlODg2MWY5Mzk5NWFhLi4yOTg5ZWFlYWViOTUxYWRhZmI4MzZiYzk5
N2YyYWNhM2ZlMGIwYzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvVGlsaW5nRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9UaWxpbmdEYXRhLmgKQEAgLTM3LDExICszNywxNCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEludFJlY3Q7CitjbGFzcyBJbnRQb2ludDsK
IAogY2xhc3MgVGlsaW5nRGF0YSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGlsaW5nRGF0
YSk7CiBwdWJsaWM6CiAgICAgVGlsaW5nRGF0YShpbnQgbWF4VGV4dHVyZVNpemUsIGludCB0b3Rh
bFNpemVYLCBpbnQgdG90YWxTaXplWSwgYm9vbCBoYXNCb3JkZXJUZXhlbHMpOworICAgIHZvaWQg
c2V0VG90YWxTaXplKGludCB0b3RhbFNpemVYLCBpbnQgdG90YWxTaXplWSk7CisgICAgdm9pZCBz
ZXRNYXhUZXh0dXJlU2l6ZShpbnQpOwogICAgIGludCBtYXhUZXh0dXJlU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWF4VGV4dHVyZVNpemU7IH0KICAgICBpbnQgdG90YWxTaXplWCgpIGNvbnN0IHsg
cmV0dXJuIG1fdG90YWxTaXplWDsgfQogICAgIGludCB0b3RhbFNpemVZKCkgY29uc3QgeyByZXR1
cm4gbV90b3RhbFNpemVZOyB9CkBAIC03MCw5ICs3MywxMyBAQCBwdWJsaWM6CiAgICAgLy8gaW4g
dGV4ZWwgdW5pdHMsIHJldHVybnMgYWRqdXN0ZWQgZGF0YSB0byByZW5kZXIganVzdCB0aGUgb25l
IHRpbGUuCiAgICAgdm9pZCBpbnRlcnNlY3REcmF3UXVhZChjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgaW50IHRpbGUsIEZsb2F0UmVjdCogbmV3U3Jj
LCBGbG9hdFJlY3QqIG5ld0RzdCkgY29uc3Q7CiAKKyAgICAvLyBEaWZmZXJlbmNlIGJldHdlZW4g
dGlsZUJvdW5kJ3MgYW5kIHRpbGVCb3VuZFdpdGhCb3JkZXIncyBsb2NhdGlvbigpLgorICAgIElu
dFBvaW50IHRleHR1cmVPZmZzZXQoaW50IHhJbmRleCwgaW50IHlJbmRleCkgY29uc3Q7CisKIHBy
aXZhdGU6CiAgICAgVGlsaW5nRGF0YSgpIDogbV9tYXhUZXh0dXJlU2l6ZSgwKSwgbV90b3RhbFNp
emVYKDApLCBtX3RvdGFsU2l6ZVkoMCkge30KICAgICB2b2lkIGFzc2VydFRpbGUoaW50IHRpbGUp
IGNvbnN0IHsgQVNTRVJUKHRpbGUgPj0gMCAmJiB0aWxlIDwgbnVtVGlsZXMoKSk7IH0KKyAgICB2
b2lkIHJlY29tcHV0ZU51bVRpbGVzKCk7CiAKICAgICBpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKICAg
ICBpbnQgbV90b3RhbFNpemVYOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82076</attachid>
            <date>2011-02-10 17:27:32 -0800</date>
            <delta_ts>2011-02-11 14:35:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54143-20110210172731.patch</filename>
            <type>text/plain</type>
            <size>30494</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3YWE1MzVlMzdmZTU4NjJmZTJlOTg2MjFmYjUxMjhiODEwZjYyNzJlLi43
OGUzNTYzZjM5NDUyMzg2YWRjMDk1YjFhYjIwMWUzZTM4OGU5YzA0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNTQgQEAKKzIwMTEtMDItMTAgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hy
b21pdW1dIE1vZGlmeSBMYXllclRpbGVyQ2hyb21pdW0gdG8gdXNlIFRpbGluZ0RhdGEuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDE0MworCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJD
aHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0
ZUFuZERyYXdSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNsZWFudXBTaGFyZWRPYmplY3RzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJTaGFyZWRWYWx1ZXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OkxheWVyVGlsZXJDaHJvbWl1bSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnNldFRpbGVTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlckNocm9taXVtOjpjb250ZW50UmVjdFRvVGlsZUluZGljZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjp0aWxlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJUaWxlckNocm9taXVtOjp0aWxlQ29udGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJUaWxlckNocm9taXVtOjp0aWxlTGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGlsZXJDaHJvbWl1bTo6bGF5ZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGls
ZXJDaHJvbWl1bTo6bGF5ZXJUaWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVy
Q2hyb21pdW06OmludmFsaWRhdGVFbnRpcmVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRpbGVyQ2hyb21pdW06OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9t
aXVtOjpyZXNpemVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06
Omdyb3dMYXllclRvQ29udGFpbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21p
dW06OmRyYXdUZXh0dXJlZFF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9t
aXVtOjpTaGFyZWRWYWx1ZXM6OlNoYXJlZFZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRpbGVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6flNoYXJlZFZhbHVlcyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmg6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6dGlsZXJTaGFkZXJQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6U2hhcmVkVmFs
dWVzOjpzaGFkZXJTYW1wbGVyTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
ckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6OnNoYWRlck1hdHJpeExvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpzaGFkZXJBbHBoYUxv
Y2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6U2hhcmVkVmFs
dWVzOjpzaGFkZXJUZXhUcmFuc2Zvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRpbGVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6aW5pdGlhbGl6ZWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNv
bXB1dGVOdW1UaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjpUaWxpbmdEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OnNldFRvdGFsU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpUaWxpbmdEYXRhOjpzZXRNYXhUZXh0dXJlU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxpbmdEYXRhOjp0aWxlU2l6ZVgpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0
YTo6dGlsZVNpemVZKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OnRleHR1cmVPZmZz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6cmVjb21wdXRlTnVtVGlsZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmg6CisKIDIwMTEtMDIt
MDkgIEx1Y2FzIERlIE1hcmNoaSAgPGx1Y2FzLmRlbWFyY2hpQHByb2Z1c2lvbi5tb2JpPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDVjN2Uy
YjE0MjE3N2NjZjY5MmFhYTRjMzZhMmUyOGYwYzZkZjFjODYuLmZmOWU1ZTVkODMxYzNmMTNlOTMw
NzZlNmFmYzU1OGY3Y2NhOThjZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTIwNSw2ICsyMDUs
NyBAQCBwdWJsaWM6CiAgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9sYXllclJlbmRlcmVyLmdldCgpOyB9CiAKICAgICBzdGF0aWMgdW5z
aWduZWQgY3JlYXRlU2hhZGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IGNoYXIq
IHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpOwor
ICAgIHN0YXRpYyB2b2lkIHRvR0xNYXRyaXgoZmxvYXQqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYpOwogCiAgICAgc3RhdGljIHZvaWQgZHJhd1RleHR1cmVkUXVhZChHcmFwaGljc0NvbnRl
eHQzRCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwcm9qZWN0aW9uTWF0cml4LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJNYXRyaXgsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBvcGFjaXR5LApA
QCAtMjI0LDggKzIyNSw2IEBAIHByb3RlY3RlZDoKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW55
IG9mIHRoZSBsYXllcidzIGRlc2NlbmRhbnRzIGhhcyBjb250ZW50IHRvIGRyYXcuCiAgICAgYm9v
bCBkZXNjZW5kYW50c0RyYXdDb250ZW50KCk7CiAKLSAgICBzdGF0aWMgdm9pZCB0b0dMTWF0cml4
KGZsb2F0KiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLQogICAgIEludFNpemUgbV9i
b3VuZHM7CiAgICAgRmxvYXRSZWN0IG1fZGlydHlSZWN0OwogICAgIGJvb2wgbV9jb250ZW50c0Rp
cnR5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggZjU1NDhjOWY2
M2YzNmI0YTNmMjU1M2JhZTg1ODRlZWQwNDE4Y2E3MS4uNWUwZWFjYTBkODgxYWNiODY1NWY0YWIw
YzdlYWVhOTEyODEyN2EwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
CkBAIC0xMTIsNyArMTEyLDcgQEAgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVy
Q2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGUKICAgICAsIG1fZGVm
YXVsdFJlbmRlclN1cmZhY2UoMCkKIHsKICAgICBtX2hhcmR3YXJlQ29tcG9zaXRpbmcgPSBpbml0
aWFsaXplU2hhcmVkT2JqZWN0cygpOwotICAgIG1fcm9vdExheWVyVGlsZXIgPSBMYXllclRpbGVy
Q2hyb21pdW06OmNyZWF0ZSh0aGlzLCBJbnRTaXplKDI1NiwgMjU2KSk7CisgICAgbV9yb290TGF5
ZXJUaWxlciA9IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIEludFNpemUoMjU2LCAy
NTYpLCBMYXllclRpbGVyQ2hyb21pdW06Ok5vQm9yZGVyVGV4ZWxzKTsKICAgICBBU1NFUlQobV9y
b290TGF5ZXJUaWxlcik7CiB9CiAKQEAgLTE4MSw3ICsxODEsNyBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd1Jvb3RMYXllcihUaWxlUGFpbnRJbnRlcmZhY2UmIHRp
bGVQYWludAogICAgICAgICBJbnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyID0gdmVydGljYWxTY3Jv
bGxiYXJSZWN0KHZpc2libGVSZWN0LCBjb250ZW50UmVjdCk7CiAgICAgICAgIEludFNpemUgdGls
ZVNpemUgPSB2ZXJ0aWNhbFNjcm9sbGJhci5zaXplKCkuc2hydW5rVG8oSW50U2l6ZShtX21heFRl
eHR1cmVTaXplLCBtX21heFRleHR1cmVTaXplKSk7CiAgICAgICAgIGlmICghbV92ZXJ0aWNhbFNj
cm9sbGJhclRpbGVyKQotICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyID0gTGF5
ZXJUaWxlckNocm9taXVtOjpjcmVhdGUodGhpcywgdGlsZVNpemUpOworICAgICAgICAgICAgbV92
ZXJ0aWNhbFNjcm9sbGJhclRpbGVyID0gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUodGhpcywg
dGlsZVNpemUsIExheWVyVGlsZXJDaHJvbWl1bTo6Tm9Cb3JkZXJUZXhlbHMpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXItPnNldFRpbGVTaXplKHRp
bGVTaXplKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyLT5zZXRMYXllclBvc2l0
aW9uKHZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwpAQCAtMTkzLDcgKzE5Myw3IEBAIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3Um9vdExheWVyKFRpbGVQYWlu
dEludGVyZmFjZSYgdGlsZVBhaW50CiAgICAgICAgIEludFJlY3QgaG9yaXpvbnRhbFNjcm9sbGJh
ciA9IGhvcml6b250YWxTY3JvbGxiYXJSZWN0KHZpc2libGVSZWN0LCBjb250ZW50UmVjdCk7CiAg
ICAgICAgIEludFNpemUgdGlsZVNpemUgPSBob3Jpem9udGFsU2Nyb2xsYmFyLnNpemUoKS5zaHJ1
bmtUbyhJbnRTaXplKG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4VGV4dHVyZVNpemUpKTsKICAgICAg
ICAgaWYgKCFtX2hvcml6b250YWxTY3JvbGxiYXJUaWxlcikKLSAgICAgICAgICAgIG1faG9yaXpv
bnRhbFNjcm9sbGJhclRpbGVyID0gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUodGhpcywgdGls
ZVNpemUpOworICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXIgPSBMYXllclRp
bGVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCB0aWxlU2l6ZSwgTGF5ZXJUaWxlckNocm9taXVtOjpO
b0JvcmRlclRleGVscyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbGJhclRpbGVyLT5zZXRUaWxlU2l6ZSh0aWxlU2l6ZSk7CiAgICAgICAgIG1faG9yaXpvbnRh
bFNjcm9sbGJhclRpbGVyLT5zZXRMYXllclBvc2l0aW9uKGhvcml6b250YWxTY3JvbGxiYXIubG9j
YXRpb24oKSk7CkBAIC03OTksOSArNzk5LDExIEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojppbml0aWFsaXplU2hhcmVkT2JqZWN0cygpCiAgICAgbV92aWRlb0xheWVyU2hhcmVkVmFsdWVz
ID0gYWRvcHRQdHIobmV3IFZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKG1fY29udGV4
dC5nZXQoKSkpOwogICAgIG1fcGx1Z2luTGF5ZXJTaGFyZWRWYWx1ZXMgPSBhZG9wdFB0cihuZXcg
UGx1Z2luTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKG1fY29udGV4dC5nZXQoKSkpOwogICAg
IG1fcmVuZGVyU3VyZmFjZVNoYXJlZFZhbHVlcyA9IGFkb3B0UHRyKG5ldyBSZW5kZXJTdXJmYWNl
Q2hyb21pdW06OlNoYXJlZFZhbHVlcyhtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBtX3RpbGVyU2hh
cmVkVmFsdWVzID0gYWRvcHRQdHIobmV3IExheWVyVGlsZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVz
KG1fY29udGV4dC5nZXQoKSkpOwogCiAgICAgaWYgKCFtX2xheWVyU2hhcmVkVmFsdWVzLT5pbml0
aWFsaXplZCgpIHx8ICFtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8
fCAhbV9jYW52YXNMYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKQotICAgICAgICB8fCAh
bV92aWRlb0xheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpIHx8ICFtX3BsdWdpbkxheWVy
U2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpIHx8ICFtX3JlbmRlclN1cmZhY2VTaGFyZWRWYWx1
ZXMtPmluaXRpYWxpemVkKCkpIHsKKyAgICAgICAgfHwgIW1fdmlkZW9MYXllclNoYXJlZFZhbHVl
cy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV9wbHVnaW5MYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6
ZWQoKSB8fCAhbV9yZW5kZXJTdXJmYWNlU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpCisgICAg
ICAgIHx8ICFtX3RpbGVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpKSB7CiAgICAgICAgIGNs
ZWFudXBTaGFyZWRPYmplY3RzKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC04
MjAsNiArODIyLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFudXBTaGFyZWRP
YmplY3RzKCkKICAgICBtX3ZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMuY2xlYXIoKTsKICAgICBtX3Bs
dWdpbkxheWVyU2hhcmVkVmFsdWVzLmNsZWFyKCk7CiAgICAgbV9yZW5kZXJTdXJmYWNlU2hhcmVk
VmFsdWVzLmNsZWFyKCk7CisgICAgbV90aWxlclNoYXJlZFZhbHVlcy5jbGVhcigpOwogICAgIGlm
IChtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQpCiAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCks
IG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggM2QzZTc4NGM0Y2ExODVk
OTNjZjNhOGUxODZlMWEwNDNlNzg2ZjYzZi4uZTI1NzU5ZDRkNzc2YzA0YzJjYjVkYWIzYTFkYWZj
ZTA5MzUwYTQzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTExMiw2
ICsxMTIsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRW
YWx1ZXMqIHZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvTGF5
ZXJTaGFyZWRWYWx1ZXMuZ2V0KCk7IH0KICAgICBjb25zdCBQbHVnaW5MYXllckNocm9taXVtOjpT
aGFyZWRWYWx1ZXMqIHBsdWdpbkxheWVyU2hhcmVkVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV9w
bHVnaW5MYXllclNoYXJlZFZhbHVlcy5nZXQoKTsgfQogICAgIGNvbnN0IFJlbmRlclN1cmZhY2VD
aHJvbWl1bTo6U2hhcmVkVmFsdWVzKiByZW5kZXJTdXJmYWNlU2hhcmVkVmFsdWVzKCkgY29uc3Qg
eyByZXR1cm4gbV9yZW5kZXJTdXJmYWNlU2hhcmVkVmFsdWVzLmdldCgpOyB9CisgICAgY29uc3Qg
TGF5ZXJUaWxlckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIHRpbGVyU2hhcmVkVmFsdWVzKCkgY29u
c3QgeyByZXR1cm4gbV90aWxlclNoYXJlZFZhbHVlcy5nZXQoKTsgfQogCiAgICAgdm9pZCByZXNp
emVPbnNjcmVlbkNvbnRlbnQoY29uc3QgSW50U2l6ZSYpOwogCkBAIC0xOTQsNiArMTk1LDcgQEAg
cHJpdmF0ZToKICAgICBPd25QdHI8VmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM+IG1f
dmlkZW9MYXllclNoYXJlZFZhbHVlczsKICAgICBPd25QdHI8UGx1Z2luTGF5ZXJDaHJvbWl1bTo6
U2hhcmVkVmFsdWVzPiBtX3BsdWdpbkxheWVyU2hhcmVkVmFsdWVzOwogICAgIE93blB0cjxSZW5k
ZXJTdXJmYWNlQ2hyb21pdW06OlNoYXJlZFZhbHVlcz4gbV9yZW5kZXJTdXJmYWNlU2hhcmVkVmFs
dWVzOworICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcz4gbV90aWxl
clNoYXJlZFZhbHVlczsKIAogICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gbV90ZXh0dXJlTWFu
YWdlcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAKaW5kZXggZTFiZjg5ODU0YjEy
MGI1N2U4NjY4MDU1MDFiZTBiODdlMzFjMmNmZC4uN2JmYWZmNTllZTM4YTQ4MjFhNTY4YzBlMmU3
ZTVkNjc1MWQ1YjVhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwCkBAIC00NCwx
OCArNDQsMjEgQEAKIAogI2luY2x1ZGUgPHd0Zi9QYXNzT3duQXJyYXlQdHIuaD4KIAordXNpbmcg
bmFtZXNwYWNlIHN0ZDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPExheWVy
VGlsZXJDaHJvbWl1bT4gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSkKK1Bhc3NPd25Q
dHI8TGF5ZXJUaWxlckNocm9taXVtPiBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZShMYXllclJl
bmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBC
b3JkZXJUZXhlbE9wdGlvbiBib3JkZXIpCiB7CiAgICAgaWYgKCFsYXllclJlbmRlcmVyIHx8IHRp
bGVTaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IExheWVyVGlsZXJDaHJvbWl1bShsYXllclJlbmRlcmVyLCB0aWxlU2l6ZSkpOworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJUaWxlckNocm9taXVtKGxheWVyUmVuZGVyZXIsIHRp
bGVTaXplLCBib3JkZXIpKTsKIH0KIAotTGF5ZXJUaWxlckNocm9taXVtOjpMYXllclRpbGVyQ2hy
b21pdW0oTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRTaXpl
JiB0aWxlU2l6ZSkKK0xheWVyVGlsZXJDaHJvbWl1bTo6TGF5ZXJUaWxlckNocm9taXVtKExheWVy
UmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUs
IEJvcmRlclRleGVsT3B0aW9uIGJvcmRlcikKICAgICA6IG1fc2tpcHNEcmF3KGZhbHNlKQorICAg
ICwgbV90aWxpbmdEYXRhKG1heCh0aWxlU2l6ZS53aWR0aCgpLCB0aWxlU2l6ZS5oZWlnaHQoKSks
IDAsIDAsIGJvcmRlciA9PSBIYXNCb3JkZXJUZXhlbHMpCiAgICAgLCBtX2xheWVyUmVuZGVyZXIo
bGF5ZXJSZW5kZXJlcikKIHsKICAgICBzZXRUaWxlU2l6ZSh0aWxlU2l6ZSk7CkBAIC04MSw2ICs4
NCw3IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpzZXRUaWxlU2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplKQogCiAgICAgbV90aWxlU2l6ZSA9IHNpemU7CiAgICAgbV90aWxlUGl4ZWxzID0gYWRv
cHRBcnJheVB0cihuZXcgdWludDhfdFttX3RpbGVTaXplLndpZHRoKCkgKiBtX3RpbGVTaXplLmhl
aWdodCgpICogNF0pOworICAgIG1fdGlsaW5nRGF0YS5zZXRNYXhUZXh0dXJlU2l6ZShtYXgoc2l6
ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CiB9CiAKIHZvaWQgTGF5ZXJUaWxlckNocm9taXVt
OjpyZXNldCgpCkBAIC04OCw4ICs5Miw3IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpyZXNl
dCgpCiAgICAgbV90aWxlcy5jbGVhcigpOwogICAgIG1fdW51c2VkVGlsZXMuY2xlYXIoKTsKIAot
ICAgIG1fbGF5ZXJTaXplID0gSW50U2l6ZSgpOwotICAgIG1fbGF5ZXJUaWxlU2l6ZSA9IEludFNp
emUoKTsKKyAgICBtX3RpbGluZ0RhdGEuc2V0VG90YWxTaXplKDAsIDApOwogICAgIG1fbGFzdFVw
ZGF0ZUxheWVyUmVjdCA9IEludFJlY3QoKTsKIH0KIApAQCAtMTQzLDEwICsxNDYsMTAgQEAgdm9p
ZCBMYXllclRpbGVyQ2hyb21pdW06OmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCwgaW4KIHsKICAgICBjb25zdCBJbnRSZWN0IGxheWVyUmVjdCA9IGNv
bnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOwogCi0gICAgbGVmdCA9IGxheWVyUmVj
dC54KCkgLyBtX3RpbGVTaXplLndpZHRoKCk7Ci0gICAgdG9wID0gbGF5ZXJSZWN0LnkoKSAvIG1f
dGlsZVNpemUuaGVpZ2h0KCk7Ci0gICAgcmlnaHQgPSAobGF5ZXJSZWN0Lm1heFgoKSAtIDEpIC8g
bV90aWxlU2l6ZS53aWR0aCgpOwotICAgIGJvdHRvbSA9IChsYXllclJlY3QubWF4WSgpIC0gMSkg
LyBtX3RpbGVTaXplLmhlaWdodCgpOworICAgIGxlZnQgPSBtX3RpbGluZ0RhdGEudGlsZVhJbmRl
eEZyb21TcmNDb29yZChsYXllclJlY3QueCgpKTsKKyAgICB0b3AgPSBtX3RpbGluZ0RhdGEudGls
ZVlJbmRleEZyb21TcmNDb29yZChsYXllclJlY3QueSgpKTsKKyAgICByaWdodCA9IG1fdGlsaW5n
RGF0YS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKGxheWVyUmVjdC5tYXhYKCkpOworICAgIGJvdHRv
bSA9IG1fdGlsaW5nRGF0YS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKGxheWVyUmVjdC5tYXhZKCkp
OwogfQogCiBJbnRSZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6Y29udGVudFJlY3RUb0xheWVyUmVj
dChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKQEAgLTE2OSwyMiArMTcyLDMyIEBA
IEludFJlY3QgTGF5ZXJUaWxlckNocm9taXVtOjpsYXllclJlY3RUb0NvbnRlbnRSZWN0KGNvbnN0
IEludFJlY3QmIGxheWVyUmVjdCkgY29uCiAKIGludCBMYXllclRpbGVyQ2hyb21pdW06OnRpbGVJ
bmRleChpbnQgaSwgaW50IGopIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGkgPj0gMCAmJiBqID49IDAg
JiYgaSA8IG1fbGF5ZXJUaWxlU2l6ZS53aWR0aCgpICYmIGogPCBtX2xheWVyVGlsZVNpemUuaGVp
Z2h0KCkpOwotICAgIHJldHVybiBpICsgaiAqIG1fbGF5ZXJUaWxlU2l6ZS53aWR0aCgpOworICAg
IHJldHVybiBtX3RpbGluZ0RhdGEudGlsZUluZGV4KGksIGopOwogfQogCiBJbnRSZWN0IExheWVy
VGlsZXJDaHJvbWl1bTo6dGlsZUNvbnRlbnRSZWN0KGludCBpLCBpbnQgaikgY29uc3QKIHsKLSAg
ICBJbnRQb2ludCBhbmNob3IobV9sYXllclBvc2l0aW9uLngoKSArIGkgKiBtX3RpbGVTaXplLndp
ZHRoKCksIG1fbGF5ZXJQb3NpdGlvbi55KCkgKyBqICogbV90aWxlU2l6ZS5oZWlnaHQoKSk7Ci0g
ICAgSW50UmVjdCB0aWxlKGFuY2hvciwgbV90aWxlU2l6ZSk7Ci0gICAgcmV0dXJuIHRpbGU7Cisg
ICAgSW50UmVjdCBjb250ZW50UmVjdCA9IHRpbGVMYXllclJlY3QoaSwgaik7CisgICAgY29udGVu
dFJlY3QubW92ZShtX2xheWVyUG9zaXRpb24ueCgpLCBtX2xheWVyUG9zaXRpb24ueSgpKTsKKyAg
ICByZXR1cm4gY29udGVudFJlY3Q7CiB9CiAKIEludFJlY3QgTGF5ZXJUaWxlckNocm9taXVtOjp0
aWxlTGF5ZXJSZWN0KGludCBpLCBpbnQgaikgY29uc3QKIHsKLSAgICBJbnRQb2ludCBhbmNob3Io
aSAqIG1fdGlsZVNpemUud2lkdGgoKSwgaiAqIG1fdGlsZVNpemUuaGVpZ2h0KCkpOwotICAgIElu
dFJlY3QgdGlsZShhbmNob3IsIG1fdGlsZVNpemUpOwotICAgIHJldHVybiB0aWxlOworICAgIGNv
bnN0IGludCBpbmRleCA9IG1fdGlsaW5nRGF0YS50aWxlSW5kZXgoaSwgaik7CisgICAgSW50UmVj
dCBsYXllclJlY3QgPSBtX3RpbGluZ0RhdGEudGlsZUJvdW5kc1dpdGhCb3JkZXIoaW5kZXgpOwor
ICAgIGxheWVyUmVjdC5zZXRTaXplKG1fdGlsZVNpemUpOworICAgIHJldHVybiBsYXllclJlY3Q7
Cit9CisKK0ludFNpemUgTGF5ZXJUaWxlckNocm9taXVtOjpsYXllclNpemUoKSBjb25zdAorewor
ICAgIHJldHVybiBJbnRTaXplKG1fdGlsaW5nRGF0YS50b3RhbFNpemVYKCksIG1fdGlsaW5nRGF0
YS50b3RhbFNpemVZKCkpOworfQorCitJbnRTaXplIExheWVyVGlsZXJDaHJvbWl1bTo6bGF5ZXJU
aWxlU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFNpemUobV90aWxpbmdEYXRhLm51bVRp
bGVzWCgpLCBtX3RpbGluZ0RhdGEubnVtVGlsZXNZKCkpOwogfQogCiB2b2lkIExheWVyVGlsZXJD
aHJvbWl1bTo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCkBAIC0y
MjAsOCArMjMzLDcgQEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmludmFsaWRhdGVFbnRpcmVM
YXllcigpCiAgICAgfQogICAgIG1fdGlsZXMuY2xlYXIoKTsKIAotICAgIG1fbGF5ZXJTaXplID0g
SW50U2l6ZSgpOwotICAgIG1fbGF5ZXJUaWxlU2l6ZSA9IEludFNpemUoKTsKKyAgICBtX3RpbGlu
Z0RhdGEuc2V0VG90YWxTaXplKDAsIDApOwogICAgIG1fbGFzdFVwZGF0ZUxheWVyUmVjdCA9IElu
dFJlY3QoKTsKIH0KIApAQCAtMzc4LDI2ICszOTAsMzggQEAgdm9pZCBMYXllclRpbGVyQ2hyb21p
dW06OmRyYXcoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgaWYgKG1fc2tpcHNEcmF3
IHx8ICFtX3RpbGVzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gV2UgcmV1c2Ug
dGhlIHNoYWRlciBwcm9ncmFtIHVzZWQgYnkgQ29udGVudExheWVyQ2hyb21pdW0uCiAgICAgR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOwotICAgIGNv
bnN0IENvbnRlbnRMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIGNvbnRlbnRMYXllclZhbHVl
cyA9IGxheWVyUmVuZGVyZXIoKS0+Y29udGVudExheWVyU2hhcmVkVmFsdWVzKCk7Ci0gICAgbGF5
ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIoY29udGVudExheWVyVmFsdWVzLT5jb250ZW50U2hhZGVy
UHJvZ3JhbSgpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKGNvbnRlbnRM
YXllclZhbHVlcy0+c2hhZGVyU2FtcGxlckxvY2F0aW9uKCksIDApKTsKKyAgICBjb25zdCBMYXll
clRpbGVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogc2hhcmVkVmFsdWVzID0gbGF5ZXJSZW5kZXJl
cigpLT50aWxlclNoYXJlZFZhbHVlcygpOworICAgIGxheWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVy
KHNoYXJlZFZhbHVlcy0+dGlsZXJTaGFkZXJQcm9ncmFtKCkpOworICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT51bmlmb3JtMWkoc2hhcmVkVmFsdWVzLT5zaGFkZXJTYW1wbGVyTG9jYXRpb24oKSwg
MCkpOwogCiAgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKICAgICBjb250ZW50UmVj
dFRvVGlsZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAg
ICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewogICAgICAgICBmb3IgKGlu
dCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7Ci0gICAgICAgICAgICBUaWxlKiB0aWxlID0g
bV90aWxlc1t0aWxlSW5kZXgoaSwgaildLmdldCgpOworICAgICAgICAgICAgY29uc3QgaW50IGlu
ZGV4ID0gdGlsZUluZGV4KGksIGopOworICAgICAgICAgICAgVGlsZSogdGlsZSA9IG1fdGlsZXNb
aW5kZXhdLmdldCgpOwogICAgICAgICAgICAgQVNTRVJUKHRpbGUpOwogCiAgICAgICAgICAgICB0
aWxlLT50ZXh0dXJlKCktPmJpbmRUZXh0dXJlKCk7CiAKICAgICAgICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHRpbGVNYXRyaXg7Ci0gICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gdGls
ZUNvbnRlbnRSZWN0KGksIGopOworCisgICAgICAgICAgICAvLyBEb24ndCB1c2UgdGlsZUNvbnRl
bnRSZWN0IGhlcmUsIGFzIHRoYXQgY29udGFpbnMgdGhlIGZ1bGwKKyAgICAgICAgICAgIC8vIHJl
Y3Qgd2l0aCBib3JkZXIgdGV4ZWxzIHdoaWNoIHNob3VsZG4ndCBiZSBkcmF3bi4KKyAgICAgICAg
ICAgIEludFJlY3QgdGlsZVJlY3QgPSBtX3RpbGluZ0RhdGEudGlsZUJvdW5kcyhpbmRleCk7Cisg
ICAgICAgICAgICB0aWxlUmVjdC5tb3ZlKG1fbGF5ZXJQb3NpdGlvbi54KCksIG1fbGF5ZXJQb3Np
dGlvbi55KCkpOwogICAgICAgICAgICAgdGlsZU1hdHJpeC50cmFuc2xhdGUzZCh0aWxlUmVjdC54
KCkgLSBjb250ZW50UmVjdC54KCkgKyB0aWxlUmVjdC53aWR0aCgpIC8gMi4wLCB0aWxlUmVjdC55
KCkgLSBjb250ZW50UmVjdC55KCkgKyB0aWxlUmVjdC5oZWlnaHQoKSAvIDIuMCwgMCk7CiAKLSAg
ICAgICAgICAgIExheWVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJS
ZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIHRpbGVNYXRyaXgsIG1fdGlsZVNpemUud2lk
dGgoKSwgbV90aWxlU2l6ZS5oZWlnaHQoKSwgMSwgY29udGVudExheWVyVmFsdWVzLT5zaGFkZXJN
YXRyaXhMb2NhdGlvbigpLCBjb250ZW50TGF5ZXJWYWx1ZXMtPnNoYWRlckFscGhhTG9jYXRpb24o
KSk7CisgICAgICAgICAgICBJbnRQb2ludCB0ZXhPZmZzZXQgPSBtX3RpbGluZ0RhdGEudGV4dHVy
ZU9mZnNldChpLCBqKTsKKyAgICAgICAgICAgIGZsb2F0IHRpbGVXaWR0aCA9IHN0YXRpY19jYXN0
PGZsb2F0PihtX3RpbGVTaXplLndpZHRoKCkpOworICAgICAgICAgICAgZmxvYXQgdGlsZUhlaWdo
dCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3RpbGVTaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAg
IGZsb2F0IHRleFRyYW5zbGF0ZVggPSB0ZXhPZmZzZXQueCgpIC8gdGlsZVdpZHRoOworICAgICAg
ICAgICAgZmxvYXQgdGV4VHJhbnNsYXRlWSA9IHRleE9mZnNldC55KCkgLyB0aWxlSGVpZ2h0Owor
ICAgICAgICAgICAgZmxvYXQgdGV4U2NhbGVYID0gdGlsZVJlY3Qud2lkdGgoKSAvIHRpbGVXaWR0
aDsKKyAgICAgICAgICAgIGZsb2F0IHRleFNjYWxlWSA9IHRpbGVSZWN0LmhlaWdodCgpIC8gdGls
ZUhlaWdodDsKKworICAgICAgICAgICAgZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJl
bmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwgdGlsZU1hdHJpeCwgdGlsZVJlY3Qud2lkdGgo
KSwgdGlsZVJlY3QuaGVpZ2h0KCksIDEsIHRleFRyYW5zbGF0ZVgsIHRleFRyYW5zbGF0ZVksIHRl
eFNjYWxlWCwgdGV4U2NhbGVZLCBzaGFyZWRWYWx1ZXMpOwogCiAgICAgICAgICAgICB0aWxlLT50
ZXh0dXJlKCktPnVucmVzZXJ2ZSgpOwogICAgICAgICB9CkBAIC00MDYsMzMgKzQzMCwxMzcgQEAg
dm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmRyYXcoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qp
CiAKIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpyZXNpemVMYXllcihjb25zdCBJbnRTaXplJiBz
aXplKQogewotICAgIGlmIChtX2xheWVyU2l6ZSA9PSBzaXplKQorICAgIGlmIChsYXllclNpemUo
KSA9PSBzaXplKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgd2lkdGggPSAoc2l6ZS53aWR0
aCgpICsgbV90aWxlU2l6ZS53aWR0aCgpIC0gMSkgLyBtX3RpbGVTaXplLndpZHRoKCk7Ci0gICAg
aW50IGhlaWdodCA9IChzaXplLmhlaWdodCgpICsgbV90aWxlU2l6ZS5oZWlnaHQoKSAtIDEpIC8g
bV90aWxlU2l6ZS5oZWlnaHQoKTsKKyAgICBjb25zdCBJbnRTaXplIG9sZFRpbGVTaXplID0gbGF5
ZXJUaWxlU2l6ZSgpOworICAgIG1fdGlsaW5nRGF0YS5zZXRUb3RhbFNpemUoc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpKTsKKyAgICBjb25zdCBJbnRTaXplIG5ld1RpbGVTaXplID0gbGF5ZXJU
aWxlU2l6ZSgpOwogCi0gICAgVmVjdG9yPE93blB0cjxUaWxlPiA+IG5ld1RpbGVzOwotICAgIG5l
d1RpbGVzLnJlc2l6ZSh3aWR0aCAqIGhlaWdodCk7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBt
X2xheWVyVGlsZVNpemUuaGVpZ2h0KCk7ICsraikKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBtX2xheWVyVGlsZVNpemUud2lkdGgoKTsgKytpKQotICAgICAgICAgICAgbmV3VGlsZXNbaSAr
IGogKiB3aWR0aF0uc3dhcChtX3RpbGVzW2kgKyBqICogbV9sYXllclRpbGVTaXplLndpZHRoKCld
KTsKKyAgICBpZiAob2xkVGlsZVNpemUgPT0gbmV3VGlsZVNpemUpCisgICAgICAgIHJldHVybjsK
IAorICAgIFZlY3RvcjxPd25QdHI8VGlsZT4gPiBuZXdUaWxlczsKKyAgICBuZXdUaWxlcy5yZXNp
emUobmV3VGlsZVNpemUud2lkdGgoKSAqIG5ld1RpbGVTaXplLmhlaWdodCgpKTsKKyAgICBmb3Ig
KGludCBqID0gMDsgaiA8IG9sZFRpbGVTaXplLmhlaWdodCgpOyArK2opCisgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgb2xkVGlsZVNpemUud2lkdGgoKTsgKytpKQorICAgICAgICAgICAgbmV3
VGlsZXNbaSArIGogKiBuZXdUaWxlU2l6ZS53aWR0aCgpXS5zd2FwKG1fdGlsZXNbaSArIGogKiBv
bGRUaWxlU2l6ZS53aWR0aCgpXSk7CiAgICAgbV90aWxlcy5zd2FwKG5ld1RpbGVzKTsKLSAgICBt
X2xheWVyU2l6ZSA9IHNpemU7Ci0gICAgbV9sYXllclRpbGVTaXplID0gSW50U2l6ZSh3aWR0aCwg
aGVpZ2h0KTsKIH0KIAogdm9pZCBMYXllclRpbGVyQ2hyb21pdW06Omdyb3dMYXllclRvQ29udGFp
bihjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKIHsKICAgICAvLyBHcm93IHRoZSB0aWxlIGFy
cmF5IHRvIGNvbnRhaW4gdGhpcyBjb250ZW50IHJlY3QuCiAgICAgSW50UmVjdCBsYXllclJlY3Qg
PSBjb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnRlbnRSZWN0KTsKLSAgICBJbnRTaXplIGxheWVy
U2l6ZSA9IEludFNpemUobGF5ZXJSZWN0Lm1heFgoKSwgbGF5ZXJSZWN0Lm1heFkoKSk7CisgICAg
SW50U2l6ZSByZWN0U2l6ZSA9IEludFNpemUobGF5ZXJSZWN0Lm1heFgoKSwgbGF5ZXJSZWN0Lm1h
eFkoKSk7CiAKLSAgICBJbnRTaXplIG5ld1NpemUgPSBsYXllclNpemUuZXhwYW5kZWRUbyhtX2xh
eWVyU2l6ZSk7CisgICAgSW50U2l6ZSBuZXdTaXplID0gcmVjdFNpemUuZXhwYW5kZWRUbyhsYXll
clNpemUoKSk7CiAgICAgcmVzaXplTGF5ZXIobmV3U2l6ZSk7CiB9CiAKK3ZvaWQgTGF5ZXJUaWxl
ckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcHJvamVjdGlvbk1hdHJpeCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIGRyYXdNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgb3BhY2l0eSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB0ZXhUcmFuc2xhdGVYLCBmbG9h
dCB0ZXhUcmFuc2xhdGVZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZs
b2F0IHRleFNjYWxlWCwgZmxvYXQgdGV4U2NhbGVZLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IExheWVyVGlsZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBzdikK
K3sKKyAgICBzdGF0aWMgZmxvYXQgZ2xNYXRyaXhbMTZdOworCisgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggcmVuZGVyTWF0cml4ID0gZHJhd01hdHJpeDsKKworICAgIC8vIEFwcGx5IGEgc2NhbGlu
ZyBmYWN0b3IgdG8gc2l6ZSB0aGUgcXVhZCBmcm9tIDF4MSB0byBpdHMgaW50ZW5kZWQgc2l6ZS4K
KyAgICByZW5kZXJNYXRyaXguc2NhbGUzZCh3aWR0aCwgaGVpZ2h0LCAxKTsKKworICAgIC8vIEFw
cGx5IHRoZSBwcm9qZWN0aW9uIG1hdHJpeCBiZWZvcmUgc2VuZGluZyB0aGUgdHJhbnNmb3JtIG92
ZXIgdG8gdGhlIHNoYWRlci4KKyAgICBMYXllckNocm9taXVtOjp0b0dMTWF0cml4KCZnbE1hdHJp
eFswXSwgcHJvamVjdGlvbk1hdHJpeCAqIHJlbmRlck1hdHJpeCk7CisKKyAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihzdi0+c2hhZGVyTWF0cml4TG9jYXRpb24oKSwg
ZmFsc2UsICZnbE1hdHJpeFswXSwgMSkpOworCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVu
aWZvcm0xZihzdi0+c2hhZGVyQWxwaGFMb2NhdGlvbigpLCBvcGFjaXR5KSk7CisKKyAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKHN2LT5zaGFkZXJUZXhUcmFuc2Zvcm1Mb2NhdGlv
bigpLAorICAgICAgICB0ZXhUcmFuc2xhdGVYLCB0ZXhUcmFuc2xhdGVZLCB0ZXhTY2FsZVgsIHRl
eFNjYWxlWSkpOworCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmRyYXdFbGVtZW50cyhHcmFw
aGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCA2LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
U0hPUlQsIDApKTsKK30KKworTGF5ZXJUaWxlckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6OlNoYXJl
ZFZhbHVlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICA6IG1fY29udGV4dChjb250
ZXh0KQorICAgICwgbV90aWxlclNoYWRlclByb2dyYW0oMCkKKyAgICAsIG1fc2hhZGVyU2FtcGxl
ckxvY2F0aW9uKC0xKQorICAgICwgbV9zaGFkZXJNYXRyaXhMb2NhdGlvbigtMSkKKyAgICAsIG1f
c2hhZGVyQWxwaGFMb2NhdGlvbigtMSkKKyAgICAsIG1faW5pdGlhbGl6ZWQoZmFsc2UpCit7Cisg
ICAgLy8gU2hhZGVycyBmb3IgZHJhd2luZyB0aGUgbGF5ZXIgY29udGVudHMuCisgICAgY2hhciB2
ZXJ0ZXhTaGFkZXJTdHJpbmdbXSA9CisgICAgICAgICJhdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9u
OyAgIFxuIgorICAgICAgICAiYXR0cmlidXRlIHZlYzIgYV90ZXhDb29yZDsgICBcbiIKKyAgICAg
ICAgInVuaWZvcm0gbWF0NCBtYXRyaXg7ICAgICAgICAgXG4iCisgICAgICAgICJ1bmlmb3JtIHZl
YzQgdGV4VHJhbnNmb3JtOyAgIFxuIgorICAgICAgICAidmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7
ICAgICBcbiIKKyAgICAgICAgInZvaWQgbWFpbigpICAgICAgICAgICAgICAgICAgXG4iCisgICAg
ICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAiICBnbF9Qb3Np
dGlvbiA9IG1hdHJpeCAqIGFfcG9zaXRpb247IFxuIgorICAgICAgICAiICB2X3RleENvb3JkID0g
YV90ZXhDb29yZCAqIHRleFRyYW5zZm9ybS56dyArIHRleFRyYW5zZm9ybS54eTtcbiIKKyAgICAg
ICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOworCisjaWYgUExBVEZPUk0oU0tJ
QSkKKyAgICAvLyBDb2xvciBpcyBpbiBSR0JBIG9yZGVyLgorICAgIGNoYXIgcmdiYUZyYWdtZW50
U2hhZGVyU3RyaW5nW10gPQorICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidmFyeWluZyB2ZWMyIHZfdGV4Q29v
cmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidW5pZm9ybSBzYW1w
bGVyMkQgc190ZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidW5p
Zm9ybSBmbG9hdCBhbHBoYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAg
ICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFxuIgorICAgICAgICAieyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFxuIgorICAgICAgICAiICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHNfdGV4
dHVyZSwgdl90ZXhDb29yZCk7IFxuIgorICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB0ZXhDb2xv
ciAqIGFscGhhOyBcbiIKKyAgICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcbiI7CisjZW5kaWYKKworICAgIC8vIENvbG9yIGlzIGluIEJH
UkEgb3JkZXIuCisgICAgY2hhciBiZ3JhRnJhZ21lbnRTaGFkZXJTdHJpbmdbXSA9CisgICAgICAg
ICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4i
CisgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXG4iCisgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCBzX3RleHR1cmU7ICAgICAgICAg
ICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ1bmlmb3JtIGZsb2F0IGFscGhhOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ2b2lkIG1haW4oKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICIg
IHZlYzQgdGV4Q29sb3IgPSB0ZXh0dXJlMkQoc190ZXh0dXJlLCB2X3RleENvb3JkKTsgXG4iCisg
ICAgICAgICIgIGdsX0ZyYWdDb2xvciA9IHZlYzQodGV4Q29sb3IueiwgdGV4Q29sb3IueSwgdGV4
Q29sb3IueCwgdGV4Q29sb3IudykgKiBhbHBoYTsgXG4iCisgICAgICAgICJ9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOworCisjaWYgUExBVEZP
Uk0oU0tJQSkKKyAgICAvLyBBc3N1bWluZyB0aGUgcGFja2luZyBpcyBlaXRoZXIgU2tpYSBkZWZh
dWx0IFJHQkEgb3IgQ2hyb21pdW0gZGVmYXVsdCBCR1JBLgorICAgIGNoYXIqIGZyYWdtZW50U2hh
ZGVyU3RyaW5nID0gU0tfQjMyX1NISUZUID8gcmdiYUZyYWdtZW50U2hhZGVyU3RyaW5nIDogYmdy
YUZyYWdtZW50U2hhZGVyU3RyaW5nOworI2Vsc2UKKyAgICBjaGFyKiBmcmFnbWVudFNoYWRlclN0
cmluZyA9IGJncmFGcmFnbWVudFNoYWRlclN0cmluZzsKKyNlbmRpZgorICAgIG1fdGlsZXJTaGFk
ZXJQcm9ncmFtID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlU2hhZGVyUHJvZ3JhbShtX2NvbnRleHQs
IHZlcnRleFNoYWRlclN0cmluZywgZnJhZ21lbnRTaGFkZXJTdHJpbmcpOworICAgIGlmICghbV90
aWxlclNoYWRlclByb2dyYW0pIHsKKyAgICAgICAgTE9HX0VSUk9SKCJMYXllclRpbGVyQ2hyb21p
dW06IEZhaWxlZCB0byBjcmVhdGUgc2hhZGVyIHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIG1fc2hhZGVyU2FtcGxlckxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlm
b3JtTG9jYXRpb24obV90aWxlclNoYWRlclByb2dyYW0sICJzX3RleHR1cmUiKTsKKyAgICBtX3No
YWRlck1hdHJpeExvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV90aWxl
clNoYWRlclByb2dyYW0sICJtYXRyaXgiKTsKKyAgICBtX3NoYWRlckFscGhhTG9jYXRpb24gPSBt
X2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3RpbGVyU2hhZGVyUHJvZ3JhbSwgImFscGhh
Iik7CisgICAgbV9zaGFkZXJUZXhUcmFuc2Zvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5p
Zm9ybUxvY2F0aW9uKG1fdGlsZXJTaGFkZXJQcm9ncmFtLCAidGV4VHJhbnNmb3JtIik7CisgICAg
QVNTRVJUKG1fc2hhZGVyU2FtcGxlckxvY2F0aW9uICE9IC0xKTsKKyAgICBBU1NFUlQobV9zaGFk
ZXJNYXRyaXhMb2NhdGlvbiAhPSAtMSk7CisgICAgQVNTRVJUKG1fc2hhZGVyQWxwaGFMb2NhdGlv
biAhPSAtMSk7CisgICAgQVNTRVJUKG1fc2hhZGVyVGV4VHJhbnNmb3JtTG9jYXRpb24gIT0gLTEp
OworCisgICAgbV9pbml0aWFsaXplZCA9IHRydWU7Cit9CisKK0xheWVyVGlsZXJDaHJvbWl1bTo6
U2hhcmVkVmFsdWVzOjp+U2hhcmVkVmFsdWVzKCkKK3sKKyAgICBpZiAobV90aWxlclNoYWRlclBy
b2dyYW0pCisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbSht
X3RpbGVyU2hhZGVyUHJvZ3JhbSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJv
bWl1bS5oCmluZGV4IGUwOTY5M2Q3ZTFlYzFmYzdiYWU1MTU1OTdiODM0ZjA2OTExYzYwYWEuLjRi
NjM5OWQwN2Q1YWU2ZjJhYjhlZmYyZmU5ODQxNDgxMGRhMmRmZDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGls
ZXJDaHJvbWl1bS5oCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJMYXllckNocm9taXVt
LmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCisjaW5jbHVkZSAiVGlsaW5nRGF0YS5oIgog
I2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00
Niw3ICs0Nyw5IEBAIHB1YmxpYzoKIGNsYXNzIExheWVyVGlsZXJDaHJvbWl1bSB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoTGF5ZXJUaWxlckNocm9taXVtKTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IGNyZWF0ZShMYXllclJlbmRlcmVyQ2hy
b21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplKTsKKyAgICBlbnVt
IEJvcmRlclRleGVsT3B0aW9uIHsgSGFzQm9yZGVyVGV4ZWxzLCBOb0JvcmRlclRleGVscyB9Owor
CisgICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtPiBjcmVhdGUoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJvcmRlclRleGVsT3B0
aW9uKTsKIAogICAgIH5MYXllclRpbGVyQ2hyb21pdW0oKTsKIApAQCAtNjAsOCArNjMsMzAgQEAg
cHVibGljOgogICAgIC8vIENoYW5nZSB0aGUgdGlsZSBzaXplLiAgVGhpcyBtYXkgaW52YWxpZGF0
ZSBhbGwgdGhlIGV4aXN0aW5nIHRpbGVzLgogICAgIHZvaWQgc2V0VGlsZVNpemUoY29uc3QgSW50
U2l6ZSYgc2l6ZSk7CiAKKyAgICBjbGFzcyBTaGFyZWRWYWx1ZXMgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgZXhwbGljaXQgU2hhcmVkVmFsdWVzKEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgICAg
IH5TaGFyZWRWYWx1ZXMoKTsKKworICAgICAgICB1bnNpZ25lZCB0aWxlclNoYWRlclByb2dyYW0o
KSBjb25zdCB7IHJldHVybiBtX3RpbGVyU2hhZGVyUHJvZ3JhbTsgfQorICAgICAgICBpbnQgc2hh
ZGVyU2FtcGxlckxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaGFkZXJTYW1wbGVyTG9jYXRp
b247IH0KKyAgICAgICAgaW50IHNoYWRlck1hdHJpeExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zaGFkZXJNYXRyaXhMb2NhdGlvbjsgfQorICAgICAgICBpbnQgc2hhZGVyQWxwaGFMb2NhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZGVyQWxwaGFMb2NhdGlvbjsgfQorICAgICAgICBpbnQg
c2hhZGVyVGV4VHJhbnNmb3JtTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NoYWRlclRleFRy
YW5zZm9ybUxvY2F0aW9uOyB9CisgICAgICAgIGludCBpbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0
dXJuIG1faW5pdGlhbGl6ZWQ7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dDNEKiBtX2NvbnRleHQ7CisgICAgICAgIHVuc2lnbmVkIG1fdGlsZXJTaGFkZXJQcm9ncmFt
OworICAgICAgICBpbnQgbV9zaGFkZXJTYW1wbGVyTG9jYXRpb247CisgICAgICAgIGludCBtX3No
YWRlck1hdHJpeExvY2F0aW9uOworICAgICAgICBpbnQgbV9zaGFkZXJBbHBoYUxvY2F0aW9uOwor
ICAgICAgICBpbnQgbV9zaGFkZXJUZXhUcmFuc2Zvcm1Mb2NhdGlvbjsKKyAgICAgICAgaW50IG1f
aW5pdGlhbGl6ZWQ7CisgICAgfTsKKwogcHJpdmF0ZToKLSAgICBMYXllclRpbGVyQ2hyb21pdW0o
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiB0aWxl
U2l6ZSk7CisgICAgTGF5ZXJUaWxlckNocm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNv
bnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbik7CiAKICAgICBjbGFzcyBU
aWxlIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGlsZSk7CkBAIC03OSw2ICsxMDQs
MTIgQEAgcHJpdmF0ZToKICAgICAgICAgT3duUHRyPExheWVyVGV4dHVyZT4gbV90ZXg7CiAgICAg
fTsKIAorICAgIHZvaWQgZHJhd1RleHR1cmVkUXVhZChHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwcm9qZWN0aW9uTWF0cml4LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgZHJhd01hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQg
d2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgb3BhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmxvYXQgdGV4VHJhbnNsYXRlWCwgZmxvYXQgdGV4VHJhbnNsYXRlWSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmxvYXQgdGV4U2NhbGVYLCBmbG9hdCB0ZXhTY2FsZVksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheWVyVGlsZXJDaHJvbWl1bTo6U2hhcmVkVmFs
dWVzKik7CisKICAgICB2b2lkIHJlc2l6ZUxheWVyKGNvbnN0IEludFNpemUmIHNpemUpOwogICAg
IC8vIEdyb3cgbGF5ZXIgc2l6ZSB0byBjb250YWluIHRoaXMgcmVjdGFuZ2xlLgogICAgIHZvaWQg
Z3Jvd0xheWVyVG9Db250YWluKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKQEAgLTEwMCw5
ICsxMzEsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBSZXR1cm5zIHRoZSBib3VuZHMgaW4gbGF5ZXIg
c3BhY2UgZm9yIGEgZ2l2ZW4gdGlsZSBsb2NhdGlvbi4KICAgICBJbnRSZWN0IHRpbGVMYXllclJl
Y3QoaW50IGksIGludCBqKSBjb25zdDsKIAorICAgIEludFNpemUgbGF5ZXJTaXplKCkgY29uc3Q7
CisgICAgSW50U2l6ZSBsYXllclRpbGVTaXplKCkgY29uc3Q7CisKICAgICBJbnRTaXplIG1fdGls
ZVNpemU7Ci0gICAgSW50U2l6ZSBtX2xheWVyU2l6ZTsKLSAgICBJbnRTaXplIG1fbGF5ZXJUaWxl
U2l6ZTsKICAgICBJbnRSZWN0IG1fbGFzdFVwZGF0ZUxheWVyUmVjdDsKICAgICBJbnRQb2ludCBt
X2xheWVyUG9zaXRpb247CiAKQEAgLTExNiw2ICsxNDgsOCBAQCBwcml2YXRlOgogICAgIC8vIENh
Y2hlIGEgdGlsZS1zaXplZCBwaXhlbCBidWZmZXIgdG8gZHJhdyBpbnRvLgogICAgIE93bkFycmF5
UHRyPHVpbnQ4X3Q+IG1fdGlsZVBpeGVsczsKIAorICAgIFRpbGluZ0RhdGEgbV90aWxpbmdEYXRh
OworCiAgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0
YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0YS5j
cHAKaW5kZXggZTdjNGU0YzhhMTJiMWZlZTVhZjllOTUyMmQyZjY2ZGZmMzdjZDgwOS4uZGQ1NDBi
Mzk5MmM4MDlhZDc0MWRjOGQ3Y2M3NTQ0MmE3ZDFmNjg4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmNwcApAQCAtNDQsNyArNDQs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBpbnQgY29tcHV0ZU51bVRpbGVzKGlu
dCBtYXhUZXh0dXJlU2l6ZSwgaW50IHRvdGFsU2l6ZSwgaW50IGJvcmRlclRleGVscykKIHsKLSAg
ICByZXR1cm4gbWF4KDEsIDEgKyAodG90YWxTaXplIC0gMSAtIDIgKiBib3JkZXJUZXhlbHMpIC8g
KG1heFRleHR1cmVTaXplIC0gMiAqIGJvcmRlclRleGVscykpOworICAgIGludCBudW1UaWxlcyA9
IG1heCgxLCAxICsgKHRvdGFsU2l6ZSAtIDEgLSAyICogYm9yZGVyVGV4ZWxzKSAvIChtYXhUZXh0
dXJlU2l6ZSAtIDIgKiBib3JkZXJUZXhlbHMpKTsKKyAgICByZXR1cm4gdG90YWxTaXplID4gMCA/
IG51bVRpbGVzIDogMDsKIH0KIAogVGlsaW5nRGF0YTo6VGlsaW5nRGF0YShpbnQgbWF4VGV4dHVy
ZVNpemUsIGludCB0b3RhbFNpemVYLCBpbnQgdG90YWxTaXplWSwgYm9vbCBoYXNCb3JkZXJUZXhl
bHMpCkBAIC01Myw4ICs1NCwyMCBAQCBUaWxpbmdEYXRhOjpUaWxpbmdEYXRhKGludCBtYXhUZXh0
dXJlU2l6ZSwgaW50IHRvdGFsU2l6ZVgsIGludCB0b3RhbFNpemVZLCBib29sCiAgICAgLCBtX3Rv
dGFsU2l6ZVkodG90YWxTaXplWSkKICAgICAsIG1fYm9yZGVyVGV4ZWxzKGhhc0JvcmRlclRleGVs
cyA/IDEgOiAwKQogewotICAgIG1fbnVtVGlsZXNYID0gY29tcHV0ZU51bVRpbGVzKG1heFRleHR1
cmVTaXplLCBtX3RvdGFsU2l6ZVgsIG1fYm9yZGVyVGV4ZWxzKTsKLSAgICBtX251bVRpbGVzWSA9
IGNvbXB1dGVOdW1UaWxlcyhtYXhUZXh0dXJlU2l6ZSwgbV90b3RhbFNpemVZLCBtX2JvcmRlclRl
eGVscyk7CisgICAgcmVjb21wdXRlTnVtVGlsZXMoKTsKK30KKwordm9pZCBUaWxpbmdEYXRhOjpz
ZXRUb3RhbFNpemUoaW50IHRvdGFsU2l6ZVgsIGludCB0b3RhbFNpemVZKQoreworICAgIG1fdG90
YWxTaXplWCA9IHRvdGFsU2l6ZVg7CisgICAgbV90b3RhbFNpemVZID0gdG90YWxTaXplWTsKKyAg
ICByZWNvbXB1dGVOdW1UaWxlcygpOworfQorCit2b2lkIFRpbGluZ0RhdGE6OnNldE1heFRleHR1
cmVTaXplKGludCBtYXhUZXh0dXJlU2l6ZSkKK3sKKyAgICBtX21heFRleHR1cmVTaXplID0gbV9t
YXhUZXh0dXJlU2l6ZTsKKyAgICByZWNvbXB1dGVOdW1UaWxlcygpOwogfQogCiBpbnQgVGlsaW5n
RGF0YTo6dGlsZVhJbmRleEZyb21TcmNDb29yZChpbnQgc3JjUG9zKSBjb25zdApAQCAtMTQyLDkg
KzE1NSw2IEBAIGludCBUaWxpbmdEYXRhOjp0aWxlU2l6ZVgoaW50IHhJbmRleCkgY29uc3QKIHsK
ICAgICBBU1NFUlQoeEluZGV4ID49IDAgJiYgeEluZGV4IDwgbnVtVGlsZXNYKCkpOwogCi0gICAg
aW50IHNpemUgPSBtYXhUZXh0dXJlU2l6ZSgpOwotICAgIHNpemUgPSBtaW4oc2l6ZSwgdG90YWxT
aXplWCgpKTsKLQogICAgIGlmICgheEluZGV4ICYmIG1fbnVtVGlsZXNYID09IDEpCiAgICAgICAg
IHJldHVybiBtX3RvdGFsU2l6ZVg7CiAgICAgaWYgKCF4SW5kZXggJiYgbV9udW1UaWxlc1ggPiAx
KQpAQCAtMTYyLDkgKzE3Miw2IEBAIGludCBUaWxpbmdEYXRhOjp0aWxlU2l6ZVkoaW50IHlJbmRl
eCkgY29uc3QKIHsKICAgICBBU1NFUlQoeUluZGV4ID49IDAgJiYgeUluZGV4IDwgbnVtVGlsZXNZ
KCkpOwogCi0gICAgaW50IHNpemUgPSBtYXhUZXh0dXJlU2l6ZSgpOwotICAgIHNpemUgPSBtaW4o
c2l6ZSwgdG90YWxTaXplWSgpKTsKLQogICAgIGlmICgheUluZGV4ICYmIG1fbnVtVGlsZXNZID09
IDEpCiAgICAgICAgIHJldHVybiBtX3RvdGFsU2l6ZVk7CiAgICAgaWYgKCF5SW5kZXggJiYgbV9u
dW1UaWxlc1kgPiAxKQpAQCAtMjIyLDYgKzIyOSwyMCBAQCB2b2lkIFRpbGluZ0RhdGE6OmludGVy
c2VjdERyYXdRdWFkKGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBk
cwogICAgICAgICBzcmNSZWN0SW50ZXJzZWN0ZWROb3JtSCAqIGRzdFJlY3QuaGVpZ2h0KCkpOwog
fQogCitJbnRQb2ludCBUaWxpbmdEYXRhOjp0ZXh0dXJlT2Zmc2V0KGludCB4SW5kZXgsIGludCB5
SW5kZXgpIGNvbnN0Cit7CisgICAgaW50IGxlZnQgPSAoIXhJbmRleCB8fCBtX251bVRpbGVzWCA9
PSAxKSA/IDAgOiBtX2JvcmRlclRleGVsczsKKyAgICBpbnQgdG9wID0gKCF5SW5kZXggfHwgbV9u
dW1UaWxlc1kgPT0gMSkgPyAwIDogbV9ib3JkZXJUZXhlbHM7CisKKyAgICByZXR1cm4gSW50UG9p
bnQobGVmdCwgdG9wKTsKK30KKwordm9pZCBUaWxpbmdEYXRhOjpyZWNvbXB1dGVOdW1UaWxlcygp
Cit7CisgICAgbV9udW1UaWxlc1ggPSBjb21wdXRlTnVtVGlsZXMobV9tYXhUZXh0dXJlU2l6ZSwg
bV90b3RhbFNpemVYLCBtX2JvcmRlclRleGVscyk7CisgICAgbV9udW1UaWxlc1kgPSBjb21wdXRl
TnVtVGlsZXMobV9tYXhUZXh0dXJlU2l6ZSwgbV90b3RhbFNpemVZLCBtX2JvcmRlclRleGVscyk7
Cit9CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvVGlsaW5nRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L1RpbGluZ0RhdGEuaAppbmRleCBkMTE0MGJkNWY4MDM1ZGM5YjBjNzVjMTJhODhlODg2
MWY5Mzk5NWFhLi4yOTg5ZWFlYWViOTUxYWRhZmI4MzZiYzk5N2YyYWNhM2ZlMGIwYzRkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0YS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmgK
QEAgLTM3LDExICszNywxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UmVj
dDsKIGNsYXNzIEludFJlY3Q7CitjbGFzcyBJbnRQb2ludDsKIAogY2xhc3MgVGlsaW5nRGF0YSB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGlsaW5nRGF0YSk7CiBwdWJsaWM6CiAgICAgVGls
aW5nRGF0YShpbnQgbWF4VGV4dHVyZVNpemUsIGludCB0b3RhbFNpemVYLCBpbnQgdG90YWxTaXpl
WSwgYm9vbCBoYXNCb3JkZXJUZXhlbHMpOworICAgIHZvaWQgc2V0VG90YWxTaXplKGludCB0b3Rh
bFNpemVYLCBpbnQgdG90YWxTaXplWSk7CisgICAgdm9pZCBzZXRNYXhUZXh0dXJlU2l6ZShpbnQp
OwogICAgIGludCBtYXhUZXh0dXJlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4VGV4dHVyZVNp
emU7IH0KICAgICBpbnQgdG90YWxTaXplWCgpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxTaXplWDsg
fQogICAgIGludCB0b3RhbFNpemVZKCkgY29uc3QgeyByZXR1cm4gbV90b3RhbFNpemVZOyB9CkBA
IC03MCw5ICs3MywxMyBAQCBwdWJsaWM6CiAgICAgLy8gaW4gdGV4ZWwgdW5pdHMsIHJldHVybnMg
YWRqdXN0ZWQgZGF0YSB0byByZW5kZXIganVzdCB0aGUgb25lIHRpbGUuCiAgICAgdm9pZCBpbnRl
cnNlY3REcmF3UXVhZChjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0UmVjdCwgaW50IHRpbGUsIEZsb2F0UmVjdCogbmV3U3JjLCBGbG9hdFJlY3QqIG5ld0RzdCkg
Y29uc3Q7CiAKKyAgICAvLyBEaWZmZXJlbmNlIGJldHdlZW4gdGlsZUJvdW5kJ3MgYW5kIHRpbGVC
b3VuZFdpdGhCb3JkZXIncyBsb2NhdGlvbigpLgorICAgIEludFBvaW50IHRleHR1cmVPZmZzZXQo
aW50IHhJbmRleCwgaW50IHlJbmRleCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgVGlsaW5nRGF0
YSgpIDogbV9tYXhUZXh0dXJlU2l6ZSgwKSwgbV90b3RhbFNpemVYKDApLCBtX3RvdGFsU2l6ZVko
MCkge30KICAgICB2b2lkIGFzc2VydFRpbGUoaW50IHRpbGUpIGNvbnN0IHsgQVNTRVJUKHRpbGUg
Pj0gMCAmJiB0aWxlIDwgbnVtVGlsZXMoKSk7IH0KKyAgICB2b2lkIHJlY29tcHV0ZU51bVRpbGVz
KCk7CiAKICAgICBpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKICAgICBpbnQgbV90b3RhbFNpemVYOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82180</attachid>
            <date>2011-02-11 14:35:23 -0800</date>
            <delta_ts>2011-03-11 13:33:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54143-20110211143522.patch</filename>
            <type>text/plain</type>
            <size>30937</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyOGE4ZmU4OTUzMWM5NTg5NTI2OGU1NGIwNDFlOWQ0NWMyZGIxZjBmLi5i
M2QzNTFiZDZmNTZjMzU5Yzk4MzYwNjNjYWQyM2YxZjJmMzBmMjI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNjAgQEAKKzIwMTEtMDItMTAgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hy
b21pdW1dIE1vZGlmeSBMYXllclRpbGVyQ2hyb21pdW0gdG8gdXNlIFRpbGluZ0RhdGEuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDE0MworCisgICAg
ICAgIE1vc3Qgb2YgdGhlIHByZXZpb3VzIGRhdGEgaW4gTGF5ZXJUaWxlckNocm9taXVtIGlzIG5v
dyBjYWxjdWxhdGVkCisgICAgICAgIGZyb20gVGlsaW5nRGF0YS4gIFRpbGluZ0RhdGEgd2FzIG1v
ZGlmaWVkIHRvIGFsbG93IGZvciBhIGR5bmFtaWMKKyAgICAgICAgdGlsZSBzaXplIGFuZCBwYWdl
IHNpemUuICBMYXllclRpbGVyQ2hyb21pdW0gYWxzbyBnZXRzIGl0cyBvd24KKyAgICAgICAgc2hh
ZGVyIHdpdGggYSB0ZXh0dXJlIHRyYW5zZm9ybSB0byBoYW5kbGUgZHJhd2luZyBmcm9tIGEgdGV4
dHVyZQorICAgICAgICB0aGF0IGlzIGxhcmdlciB0aGFuIGEgdGlsZS4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3
Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5p
dGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyU2hhcmVkVmFsdWVzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJUaWxlckNocm9taXVtOjpMYXllclRpbGVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJUaWxlckNocm9taXVtOjpzZXRUaWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclRpbGVyQ2hyb21pdW06OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJD
aHJvbWl1bTo6Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGlsZXJDaHJvbWl1bTo6dGlsZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGls
ZXJDaHJvbWl1bTo6dGlsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGls
ZXJDaHJvbWl1bTo6dGlsZUxheWVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVy
Q2hyb21pdW06OmxheWVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21p
dW06OmxheWVyVGlsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVt
OjppbnZhbGlkYXRlRW50aXJlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNo
cm9taXVtOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6cmVz
aXplTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpncm93TGF5
ZXJUb0NvbnRhaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpkcmF3
VGV4dHVyZWRRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6U2hh
cmVkVmFsdWVzOjpTaGFyZWRWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNo
cm9taXVtOjpTaGFyZWRWYWx1ZXM6On5TaGFyZWRWYWx1ZXMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJUaWxlckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6OnRpbGVyU2hhZGVyUHJvZ3JhbSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6c2hh
ZGVyU2FtcGxlckxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1
bTo6U2hhcmVkVmFsdWVzOjpzaGFkZXJNYXRyaXhMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRpbGVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6c2hhZGVyQWxwaGFMb2NhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6c2hh
ZGVyVGV4VHJhbnNmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNo
cm9taXVtOjpTaGFyZWRWYWx1ZXM6OmluaXRpYWxpemVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvVGlsaW5nRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlTnVt
VGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsaW5nRGF0YTo6VGlsaW5nRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjpzZXRUb3RhbFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6VGlsaW5nRGF0YTo6c2V0TWF4VGV4dHVyZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGls
aW5nRGF0YTo6dGlsZVNpemVYKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OnRpbGVT
aXplWSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjp0ZXh0dXJlT2Zmc2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OnJlY29tcHV0ZU51bVRpbGVzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0YS5oOgorCiAyMDExLTAyLTExICBSeXVh
biBDaG9pICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIGJ1
aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA1YzdlMmIxNDIxNzdjY2Y2OTJhYWE0YzM2
YTJlMjhmMGM2ZGYxYzg2Li5mZjllNWU1ZDgzMWMzZjEzZTkzMDc2ZTZhZmM1NThmN2NjYTk4Y2Q3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0yMDUsNiArMjA1LDcgQEAgcHVibGljOgogICAgIExh
eWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5
ZXJSZW5kZXJlci5nZXQoKTsgfQogCiAgICAgc3RhdGljIHVuc2lnbmVkIGNyZWF0ZVNoYWRlclBy
b2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2Us
IGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKTsKKyAgICBzdGF0aWMgdm9pZCB0b0dM
TWF0cml4KGZsb2F0KiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKIAogICAgIHN0YXRp
YyB2b2lkIGRyYXdUZXh0dXJlZFF1YWQoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgcHJvamVjdGlvbk1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIGxheWVyTWF0cml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQg
d2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgb3BhY2l0eSwKQEAgLTIyNCw4ICsyMjUsNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGFueSBvZiB0aGUgbGF5ZXIncyBkZXNj
ZW5kYW50cyBoYXMgY29udGVudCB0byBkcmF3LgogICAgIGJvb2wgZGVzY2VuZGFudHNEcmF3Q29u
dGVudCgpOwogCi0gICAgc3RhdGljIHZvaWQgdG9HTE1hdHJpeChmbG9hdCosIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4Jik7Ci0KICAgICBJbnRTaXplIG1fYm91bmRzOwogICAgIEZsb2F0UmVj
dCBtX2RpcnR5UmVjdDsKICAgICBib29sIG1fY29udGVudHNEaXJ0eTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGY1NTQ4YzlmNjNmMzZiNGEzZjI1NTNiYWU4NTg0
ZWVkMDQxOGNhNzEuLjVlMGVhY2EwZDg4MWFjYjg2NTVmNGFiMGM3ZWFlYTkxMjgxMjdhMDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtMTEyLDcgKzExMiw3IEBA
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRlCiAgICAgLCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlKDAp
CiB7CiAgICAgbV9oYXJkd2FyZUNvbXBvc2l0aW5nID0gaW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMo
KTsKLSAgICBtX3Jvb3RMYXllclRpbGVyID0gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUodGhp
cywgSW50U2l6ZSgyNTYsIDI1NikpOworICAgIG1fcm9vdExheWVyVGlsZXIgPSBMYXllclRpbGVy
Q2hyb21pdW06OmNyZWF0ZSh0aGlzLCBJbnRTaXplKDI1NiwgMjU2KSwgTGF5ZXJUaWxlckNocm9t
aXVtOjpOb0JvcmRlclRleGVscyk7CiAgICAgQVNTRVJUKG1fcm9vdExheWVyVGlsZXIpOwogfQog
CkBAIC0xODEsNyArMTgxLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFu
ZERyYXdSb290TGF5ZXIoVGlsZVBhaW50SW50ZXJmYWNlJiB0aWxlUGFpbnQKICAgICAgICAgSW50
UmVjdCB2ZXJ0aWNhbFNjcm9sbGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFyUmVjdCh2aXNpYmxlUmVj
dCwgY29udGVudFJlY3QpOwogICAgICAgICBJbnRTaXplIHRpbGVTaXplID0gdmVydGljYWxTY3Jv
bGxiYXIuc2l6ZSgpLnNocnVua1RvKEludFNpemUobV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhUZXh0
dXJlU2l6ZSkpOwogICAgICAgICBpZiAoIW1fdmVydGljYWxTY3JvbGxiYXJUaWxlcikKLSAgICAg
ICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJUaWxlciA9IExheWVyVGlsZXJDaHJvbWl1bTo6Y3Jl
YXRlKHRoaXMsIHRpbGVTaXplKTsKKyAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJUaWxl
ciA9IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIHRpbGVTaXplLCBMYXllclRpbGVy
Q2hyb21pdW06Ok5vQm9yZGVyVGV4ZWxzKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV92
ZXJ0aWNhbFNjcm9sbGJhclRpbGVyLT5zZXRUaWxlU2l6ZSh0aWxlU2l6ZSk7CiAgICAgICAgIG1f
dmVydGljYWxTY3JvbGxiYXJUaWxlci0+c2V0TGF5ZXJQb3NpdGlvbih2ZXJ0aWNhbFNjcm9sbGJh
ci5sb2NhdGlvbigpKTsKQEAgLTE5Myw3ICsxOTMsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXBkYXRlQW5kRHJhd1Jvb3RMYXllcihUaWxlUGFpbnRJbnRlcmZhY2UmIHRpbGVQYWlu
dAogICAgICAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxiYXIgPSBob3Jpem9udGFsU2Nyb2xs
YmFyUmVjdCh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QpOwogICAgICAgICBJbnRTaXplIHRpbGVT
aXplID0gaG9yaXpvbnRhbFNjcm9sbGJhci5zaXplKCkuc2hydW5rVG8oSW50U2l6ZShtX21heFRl
eHR1cmVTaXplLCBtX21heFRleHR1cmVTaXplKSk7CiAgICAgICAgIGlmICghbV9ob3Jpem9udGFs
U2Nyb2xsYmFyVGlsZXIpCi0gICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJUaWxlciA9
IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIHRpbGVTaXplKTsKKyAgICAgICAgICAg
IG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyID0gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUo
dGhpcywgdGlsZVNpemUsIExheWVyVGlsZXJDaHJvbWl1bTo6Tm9Cb3JkZXJUZXhlbHMpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJUaWxlci0+c2V0VGls
ZVNpemUodGlsZVNpemUpOwogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJUaWxlci0+c2V0
TGF5ZXJQb3NpdGlvbihob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwpAQCAtNzk5LDkg
Kzc5OSwxMSBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9i
amVjdHMoKQogICAgIG1fdmlkZW9MYXllclNoYXJlZFZhbHVlcyA9IGFkb3B0UHRyKG5ldyBWaWRl
b0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyhtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBtX3Bs
dWdpbkxheWVyU2hhcmVkVmFsdWVzID0gYWRvcHRQdHIobmV3IFBsdWdpbkxheWVyQ2hyb21pdW06
OlNoYXJlZFZhbHVlcyhtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBtX3JlbmRlclN1cmZhY2VTaGFy
ZWRWYWx1ZXMgPSBhZG9wdFB0cihuZXcgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpTaGFyZWRWYWx1
ZXMobV9jb250ZXh0LmdldCgpKSk7CisgICAgbV90aWxlclNoYXJlZFZhbHVlcyA9IGFkb3B0UHRy
KG5ldyBMYXllclRpbGVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyhtX2NvbnRleHQuZ2V0KCkpKTsK
IAogICAgIGlmICghbV9sYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV9jb250
ZW50TGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1fY2FudmFzTGF5ZXJTaGFy
ZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkKLSAgICAgICAgfHwgIW1fdmlkZW9MYXllclNoYXJlZFZh
bHVlcy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV9wbHVnaW5MYXllclNoYXJlZFZhbHVlcy0+aW5pdGlh
bGl6ZWQoKSB8fCAhbV9yZW5kZXJTdXJmYWNlU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpKSB7
CisgICAgICAgIHx8ICFtX3ZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwg
IW1fcGx1Z2luTGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1fcmVuZGVyU3Vy
ZmFjZVNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKQorICAgICAgICB8fCAhbV90aWxlclNoYXJl
ZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSkgewogICAgICAgICBjbGVhbnVwU2hhcmVkT2JqZWN0cygp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtODIwLDYgKzgyMiw3IEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cygpCiAgICAgbV92aWRl
b0xheWVyU2hhcmVkVmFsdWVzLmNsZWFyKCk7CiAgICAgbV9wbHVnaW5MYXllclNoYXJlZFZhbHVl
cy5jbGVhcigpOwogICAgIG1fcmVuZGVyU3VyZmFjZVNoYXJlZFZhbHVlcy5jbGVhcigpOworICAg
IG1fdGlsZXJTaGFyZWRWYWx1ZXMuY2xlYXIoKTsKICAgICBpZiAobV9vZmZzY3JlZW5GcmFtZWJ1
ZmZlcklkKQogICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRlbGV0ZUZy
YW1lYnVmZmVyKG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCkpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oCmluZGV4IDNkM2U3ODRjNGNhMTg1ZDkzY2YzYThlMTg2ZTFhMDQzZTc4
NmY2M2YuLmUyNTc1OWQ0ZDc3NmMwNGMyY2I1ZGFiM2ExZGFmY2UwOTM1MGE0MzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0xMTIsNiArMTEyLDcgQEAgcHVibGljOgog
ICAgIGNvbnN0IFZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiB2aWRlb0xheWVyU2hh
cmVkVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0xheWVyU2hhcmVkVmFsdWVzLmdldCgp
OyB9CiAgICAgY29uc3QgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBwbHVnaW5M
YXllclNoYXJlZFZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luTGF5ZXJTaGFyZWRWYWx1
ZXMuZ2V0KCk7IH0KICAgICBjb25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OlNoYXJlZFZhbHVl
cyogcmVuZGVyU3VyZmFjZVNoYXJlZFZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyU3Vy
ZmFjZVNoYXJlZFZhbHVlcy5nZXQoKTsgfQorICAgIGNvbnN0IExheWVyVGlsZXJDaHJvbWl1bTo6
U2hhcmVkVmFsdWVzKiB0aWxlclNoYXJlZFZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZXJT
aGFyZWRWYWx1ZXMuZ2V0KCk7IH0KIAogICAgIHZvaWQgcmVzaXplT25zY3JlZW5Db250ZW50KGNv
bnN0IEludFNpemUmKTsKIApAQCAtMTk0LDYgKzE5NSw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRy
PFZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzPiBtX3ZpZGVvTGF5ZXJTaGFyZWRWYWx1
ZXM7CiAgICAgT3duUHRyPFBsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcz4gbV9wbHVn
aW5MYXllclNoYXJlZFZhbHVlczsKICAgICBPd25QdHI8UmVuZGVyU3VyZmFjZUNocm9taXVtOjpT
aGFyZWRWYWx1ZXM+IG1fcmVuZGVyU3VyZmFjZVNoYXJlZFZhbHVlczsKKyAgICBPd25QdHI8TGF5
ZXJUaWxlckNocm9taXVtOjpTaGFyZWRWYWx1ZXM+IG1fdGlsZXJTaGFyZWRWYWx1ZXM7CiAKICAg
ICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IG1fdGV4dHVyZU1hbmFnZXI7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRpbGVyQ2hyb21pdW0uY3BwCmluZGV4IGUyOGMwODQyNmUzMTBiMTIzNzYzZDY3MjMwMTY5YTky
MjI0ZmMwNjcuLmM4YWMwMjE2NzgzMzM1NWIzYzc2MGQ1NGE4NzZkNmQ2ZDQ3ZmNhNjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGls
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcApAQCAtNDQsMTggKzQ0LDIxIEBACiAKICNpbmNs
dWRlIDx3dGYvUGFzc093bkFycmF5UHRyLmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IExheWVy
VGlsZXJDaHJvbWl1bTo6Y3JlYXRlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJl
ciwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpCitQYXNzT3duUHRyPExheWVyVGlsZXJDaHJvbWl1
bT4gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXll
clJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRpb24gYm9y
ZGVyKQogewogICAgIGlmICghbGF5ZXJSZW5kZXJlciB8fCB0aWxlU2l6ZS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBMYXllclRpbGVyQ2hy
b21pdW0obGF5ZXJSZW5kZXJlciwgdGlsZVNpemUpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3
IExheWVyVGlsZXJDaHJvbWl1bShsYXllclJlbmRlcmVyLCB0aWxlU2l6ZSwgYm9yZGVyKSk7CiB9
CiAKLUxheWVyVGlsZXJDaHJvbWl1bTo6TGF5ZXJUaWxlckNocm9taXVtKExheWVyUmVuZGVyZXJD
aHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpCitMYXllclRp
bGVyQ2hyb21pdW06OkxheWVyVGlsZXJDaHJvbWl1bShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxh
eWVyUmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbiBi
b3JkZXIpCiAgICAgOiBtX3NraXBzRHJhdyhmYWxzZSkKKyAgICAsIG1fdGlsaW5nRGF0YShtYXgo
dGlsZVNpemUud2lkdGgoKSwgdGlsZVNpemUuaGVpZ2h0KCkpLCAwLCAwLCBib3JkZXIgPT0gSGFz
Qm9yZGVyVGV4ZWxzKQogICAgICwgbV9sYXllclJlbmRlcmVyKGxheWVyUmVuZGVyZXIpCiB7CiAg
ICAgc2V0VGlsZVNpemUodGlsZVNpemUpOwpAQCAtODEsNiArODQsNyBAQCB2b2lkIExheWVyVGls
ZXJDaHJvbWl1bTo6c2V0VGlsZVNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIAogICAgIG1fdGls
ZVNpemUgPSBzaXplOwogICAgIG1fdGlsZVBpeGVscyA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQ4
X3RbbV90aWxlU2l6ZS53aWR0aCgpICogbV90aWxlU2l6ZS5oZWlnaHQoKSAqIDRdKTsKKyAgICBt
X3RpbGluZ0RhdGEuc2V0TWF4VGV4dHVyZVNpemUobWF4KHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSkpOwogfQogCiB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6cmVzZXQoKQpAQCAtODgsOCAr
OTIsNyBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6cmVzZXQoKQogICAgIG1fdGlsZXMuY2xl
YXIoKTsKICAgICBtX3VudXNlZFRpbGVzLmNsZWFyKCk7CiAKLSAgICBtX2xheWVyU2l6ZSA9IElu
dFNpemUoKTsKLSAgICBtX2xheWVyVGlsZVNpemUgPSBJbnRTaXplKCk7CisgICAgbV90aWxpbmdE
YXRhLnNldFRvdGFsU2l6ZSgwLCAwKTsKICAgICBtX2xhc3RVcGRhdGVMYXllclJlY3QgPSBJbnRS
ZWN0KCk7CiB9CiAKQEAgLTE0MywxMCArMTQ2LDEwIEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVt
Ojpjb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGlu
CiB7CiAgICAgY29uc3QgSW50UmVjdCBsYXllclJlY3QgPSBjb250ZW50UmVjdFRvTGF5ZXJSZWN0
KGNvbnRlbnRSZWN0KTsKIAotICAgIGxlZnQgPSBsYXllclJlY3QueCgpIC8gbV90aWxlU2l6ZS53
aWR0aCgpOwotICAgIHRvcCA9IGxheWVyUmVjdC55KCkgLyBtX3RpbGVTaXplLmhlaWdodCgpOwot
ICAgIHJpZ2h0ID0gKGxheWVyUmVjdC5tYXhYKCkgLSAxKSAvIG1fdGlsZVNpemUud2lkdGgoKTsK
LSAgICBib3R0b20gPSAobGF5ZXJSZWN0Lm1heFkoKSAtIDEpIC8gbV90aWxlU2l6ZS5oZWlnaHQo
KTsKKyAgICBsZWZ0ID0gbV90aWxpbmdEYXRhLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQobGF5ZXJS
ZWN0LngoKSk7CisgICAgdG9wID0gbV90aWxpbmdEYXRhLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQo
bGF5ZXJSZWN0LnkoKSk7CisgICAgcmlnaHQgPSBtX3RpbGluZ0RhdGEudGlsZVhJbmRleEZyb21T
cmNDb29yZChsYXllclJlY3QubWF4WCgpKTsKKyAgICBib3R0b20gPSBtX3RpbGluZ0RhdGEudGls
ZVlJbmRleEZyb21TcmNDb29yZChsYXllclJlY3QubWF4WSgpKTsKIH0KIAogSW50UmVjdCBMYXll
clRpbGVyQ2hyb21pdW06OmNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QpIGNvbnN0CkBAIC0xNjksMjIgKzE3MiwzMiBAQCBJbnRSZWN0IExheWVyVGlsZXJD
aHJvbWl1bTo6bGF5ZXJSZWN0VG9Db250ZW50UmVjdChjb25zdCBJbnRSZWN0JiBsYXllclJlY3Qp
IGNvbgogCiBpbnQgTGF5ZXJUaWxlckNocm9taXVtOjp0aWxlSW5kZXgoaW50IGksIGludCBqKSBj
b25zdAogewotICAgIEFTU0VSVChpID49IDAgJiYgaiA+PSAwICYmIGkgPCBtX2xheWVyVGlsZVNp
emUud2lkdGgoKSAmJiBqIDwgbV9sYXllclRpbGVTaXplLmhlaWdodCgpKTsKLSAgICByZXR1cm4g
aSArIGogKiBtX2xheWVyVGlsZVNpemUud2lkdGgoKTsKKyAgICByZXR1cm4gbV90aWxpbmdEYXRh
LnRpbGVJbmRleChpLCBqKTsKIH0KIAogSW50UmVjdCBMYXllclRpbGVyQ2hyb21pdW06OnRpbGVD
b250ZW50UmVjdChpbnQgaSwgaW50IGopIGNvbnN0CiB7Ci0gICAgSW50UG9pbnQgYW5jaG9yKG1f
bGF5ZXJQb3NpdGlvbi54KCkgKyBpICogbV90aWxlU2l6ZS53aWR0aCgpLCBtX2xheWVyUG9zaXRp
b24ueSgpICsgaiAqIG1fdGlsZVNpemUuaGVpZ2h0KCkpOwotICAgIEludFJlY3QgdGlsZShhbmNo
b3IsIG1fdGlsZVNpemUpOwotICAgIHJldHVybiB0aWxlOworICAgIEludFJlY3QgY29udGVudFJl
Y3QgPSB0aWxlTGF5ZXJSZWN0KGksIGopOworICAgIGNvbnRlbnRSZWN0Lm1vdmUobV9sYXllclBv
c2l0aW9uLngoKSwgbV9sYXllclBvc2l0aW9uLnkoKSk7CisgICAgcmV0dXJuIGNvbnRlbnRSZWN0
OwogfQogCiBJbnRSZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6dGlsZUxheWVyUmVjdChpbnQgaSwg
aW50IGopIGNvbnN0CiB7Ci0gICAgSW50UG9pbnQgYW5jaG9yKGkgKiBtX3RpbGVTaXplLndpZHRo
KCksIGogKiBtX3RpbGVTaXplLmhlaWdodCgpKTsKLSAgICBJbnRSZWN0IHRpbGUoYW5jaG9yLCBt
X3RpbGVTaXplKTsKLSAgICByZXR1cm4gdGlsZTsKKyAgICBjb25zdCBpbnQgaW5kZXggPSBtX3Rp
bGluZ0RhdGEudGlsZUluZGV4KGksIGopOworICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gbV90aWxp
bmdEYXRhLnRpbGVCb3VuZHNXaXRoQm9yZGVyKGluZGV4KTsKKyAgICBsYXllclJlY3Quc2V0U2l6
ZShtX3RpbGVTaXplKTsKKyAgICByZXR1cm4gbGF5ZXJSZWN0OworfQorCitJbnRTaXplIExheWVy
VGlsZXJDaHJvbWl1bTo6bGF5ZXJTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZSht
X3RpbGluZ0RhdGEudG90YWxTaXplWCgpLCBtX3RpbGluZ0RhdGEudG90YWxTaXplWSgpKTsKK30K
KworSW50U2l6ZSBMYXllclRpbGVyQ2hyb21pdW06OmxheWVyVGlsZVNpemUoKSBjb25zdAorewor
ICAgIHJldHVybiBJbnRTaXplKG1fdGlsaW5nRGF0YS5udW1UaWxlc1goKSwgbV90aWxpbmdEYXRh
Lm51bVRpbGVzWSgpKTsKIH0KIAogdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmludmFsaWRhdGVS
ZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQpAQCAtMjIwLDggKzIzMyw3IEBAIHZvaWQg
TGF5ZXJUaWxlckNocm9taXVtOjppbnZhbGlkYXRlRW50aXJlTGF5ZXIoKQogICAgIH0KICAgICBt
X3RpbGVzLmNsZWFyKCk7CiAKLSAgICBtX2xheWVyU2l6ZSA9IEludFNpemUoKTsKLSAgICBtX2xh
eWVyVGlsZVNpemUgPSBJbnRTaXplKCk7CisgICAgbV90aWxpbmdEYXRhLnNldFRvdGFsU2l6ZSgw
LCAwKTsKICAgICBtX2xhc3RVcGRhdGVMYXllclJlY3QgPSBJbnRSZWN0KCk7CiB9CiAKQEAgLTM3
OCwyNiArMzkwLDM4IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpkcmF3KGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0KQogICAgIGlmIChtX3NraXBzRHJhdyB8fCAhbV90aWxlcy5zaXplKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIFdlIHJldXNlIHRoZSBzaGFkZXIgcHJvZ3JhbSB1
c2VkIGJ5IENvbnRlbnRMYXllckNocm9taXVtLgogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKLSAgICBjb25zdCBDb250ZW50TGF5ZXJDaHJv
bWl1bTo6U2hhcmVkVmFsdWVzKiBjb250ZW50TGF5ZXJWYWx1ZXMgPSBsYXllclJlbmRlcmVyKCkt
PmNvbnRlbnRMYXllclNoYXJlZFZhbHVlcygpOwotICAgIGxheWVyUmVuZGVyZXIoKS0+dXNlU2hh
ZGVyKGNvbnRlbnRMYXllclZhbHVlcy0+Y29udGVudFNoYWRlclByb2dyYW0oKSk7Ci0gICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShjb250ZW50TGF5ZXJWYWx1ZXMtPnNoYWRlclNh
bXBsZXJMb2NhdGlvbigpLCAwKSk7CisgICAgY29uc3QgTGF5ZXJUaWxlckNocm9taXVtOjpTaGFy
ZWRWYWx1ZXMqIHNoYXJlZFZhbHVlcyA9IGxheWVyUmVuZGVyZXIoKS0+dGlsZXJTaGFyZWRWYWx1
ZXMoKTsKKyAgICBsYXllclJlbmRlcmVyKCktPnVzZVNoYWRlcihzaGFyZWRWYWx1ZXMtPnRpbGVy
U2hhZGVyUHJvZ3JhbSgpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHNo
YXJlZFZhbHVlcy0+c2hhZGVyU2FtcGxlckxvY2F0aW9uKCksIDApKTsKIAogICAgIGludCBsZWZ0
LCB0b3AsIHJpZ2h0LCBib3R0b207CiAgICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRl
bnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgIGZvciAoaW50IGogPSB0b3A7
IGogPD0gYm90dG9tOyArK2opIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmln
aHQ7ICsraSkgewotICAgICAgICAgICAgVGlsZSogdGlsZSA9IG1fdGlsZXNbdGlsZUluZGV4KGks
IGopXS5nZXQoKTsKKyAgICAgICAgICAgIGNvbnN0IGludCBpbmRleCA9IHRpbGVJbmRleChpLCBq
KTsKKyAgICAgICAgICAgIFRpbGUqIHRpbGUgPSBtX3RpbGVzW2luZGV4XS5nZXQoKTsKICAgICAg
ICAgICAgIEFTU0VSVCh0aWxlKTsKIAogICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5iaW5k
VGV4dHVyZSgpOwogCiAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0aWxlTWF0cml4
OwotICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHRpbGVDb250ZW50UmVjdChpLCBqKTsK
KworICAgICAgICAgICAgLy8gRG9uJ3QgdXNlIHRpbGVDb250ZW50UmVjdCBoZXJlLCBhcyB0aGF0
IGNvbnRhaW5zIHRoZSBmdWxsCisgICAgICAgICAgICAvLyByZWN0IHdpdGggYm9yZGVyIHRleGVs
cyB3aGljaCBzaG91bGRuJ3QgYmUgZHJhd24uCisgICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0
ID0gbV90aWxpbmdEYXRhLnRpbGVCb3VuZHMoaW5kZXgpOworICAgICAgICAgICAgdGlsZVJlY3Qu
bW92ZShtX2xheWVyUG9zaXRpb24ueCgpLCBtX2xheWVyUG9zaXRpb24ueSgpKTsKICAgICAgICAg
ICAgIHRpbGVNYXRyaXgudHJhbnNsYXRlM2QodGlsZVJlY3QueCgpIC0gY29udGVudFJlY3QueCgp
ICsgdGlsZVJlY3Qud2lkdGgoKSAvIDIuMCwgdGlsZVJlY3QueSgpIC0gY29udGVudFJlY3QueSgp
ICsgdGlsZVJlY3QuaGVpZ2h0KCkgLyAyLjAsIDApOwogCi0gICAgICAgICAgICBMYXllckNocm9t
aXVtOjpkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlv
bk1hdHJpeCgpLCB0aWxlTWF0cml4LCBtX3RpbGVTaXplLndpZHRoKCksIG1fdGlsZVNpemUuaGVp
Z2h0KCksIDEsIGNvbnRlbnRMYXllclZhbHVlcy0+c2hhZGVyTWF0cml4TG9jYXRpb24oKSwgY29u
dGVudExheWVyVmFsdWVzLT5zaGFkZXJBbHBoYUxvY2F0aW9uKCkpOworICAgICAgICAgICAgSW50
UG9pbnQgdGV4T2Zmc2V0ID0gbV90aWxpbmdEYXRhLnRleHR1cmVPZmZzZXQoaSwgaik7CisgICAg
ICAgICAgICBmbG9hdCB0aWxlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9hdD4obV90aWxlU2l6ZS53
aWR0aCgpKTsKKyAgICAgICAgICAgIGZsb2F0IHRpbGVIZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9h
dD4obV90aWxlU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICBmbG9hdCB0ZXhUcmFuc2xhdGVY
ID0gdGV4T2Zmc2V0LngoKSAvIHRpbGVXaWR0aDsKKyAgICAgICAgICAgIGZsb2F0IHRleFRyYW5z
bGF0ZVkgPSB0ZXhPZmZzZXQueSgpIC8gdGlsZUhlaWdodDsKKyAgICAgICAgICAgIGZsb2F0IHRl
eFNjYWxlWCA9IHRpbGVSZWN0LndpZHRoKCkgLyB0aWxlV2lkdGg7CisgICAgICAgICAgICBmbG9h
dCB0ZXhTY2FsZVkgPSB0aWxlUmVjdC5oZWlnaHQoKSAvIHRpbGVIZWlnaHQ7CisKKyAgICAgICAg
ICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9u
TWF0cml4KCksIHRpbGVNYXRyaXgsIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgp
LCAxLCB0ZXhUcmFuc2xhdGVYLCB0ZXhUcmFuc2xhdGVZLCB0ZXhTY2FsZVgsIHRleFNjYWxlWSwg
c2hhcmVkVmFsdWVzKTsKIAogICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT51bnJlc2VydmUo
KTsKICAgICAgICAgfQpAQCAtNDA2LDM2ICs0MzAsMTQwIEBAIHZvaWQgTGF5ZXJUaWxlckNocm9t
aXVtOjpkcmF3KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogCiB2b2lkIExheWVyVGlsZXJD
aHJvbWl1bTo6cmVzaXplTGF5ZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAobV9s
YXllclNpemUgPT0gc2l6ZSkKKyAgICBpZiAobGF5ZXJTaXplKCkgPT0gc2l6ZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaW50IHdpZHRoID0gKHNpemUud2lkdGgoKSArIG1fdGlsZVNpemUud2lk
dGgoKSAtIDEpIC8gbV90aWxlU2l6ZS53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSAoc2l6ZS5o
ZWlnaHQoKSArIG1fdGlsZVNpemUuaGVpZ2h0KCkgLSAxKSAvIG1fdGlsZVNpemUuaGVpZ2h0KCk7
CisgICAgY29uc3QgSW50U2l6ZSBvbGRUaWxlU2l6ZSA9IGxheWVyVGlsZVNpemUoKTsKKyAgICBt
X3RpbGluZ0RhdGEuc2V0VG90YWxTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Cisg
ICAgY29uc3QgSW50U2l6ZSBuZXdUaWxlU2l6ZSA9IGxheWVyVGlsZVNpemUoKTsKKworICAgIGlm
IChvbGRUaWxlU2l6ZSA9PSBuZXdUaWxlU2l6ZSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KGhlaWdodCAmJiAod2lkdGggPiBJTlRfTUFYIC8gaGVpZ2h0KSkKKyAgICBpZiAobmV3VGlsZVNp
emUuaGVpZ2h0KCkgJiYgKG5ld1RpbGVTaXplLndpZHRoKCkgPiBJTlRfTUFYIC8gbmV3VGlsZVNp
emUuaGVpZ2h0KCkpKQogICAgICAgICBDUkFTSCgpOwogCiAgICAgVmVjdG9yPE93blB0cjxUaWxl
PiA+IG5ld1RpbGVzOwotICAgIG5ld1RpbGVzLnJlc2l6ZSh3aWR0aCAqIGhlaWdodCk7Ci0gICAg
Zm9yIChpbnQgaiA9IDA7IGogPCBtX2xheWVyVGlsZVNpemUuaGVpZ2h0KCk7ICsraikKLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2xheWVyVGlsZVNpemUud2lkdGgoKTsgKytpKQotICAg
ICAgICAgICAgbmV3VGlsZXNbaSArIGogKiB3aWR0aF0uc3dhcChtX3RpbGVzW2kgKyBqICogbV9s
YXllclRpbGVTaXplLndpZHRoKCldKTsKLQorICAgIG5ld1RpbGVzLnJlc2l6ZShuZXdUaWxlU2l6
ZS53aWR0aCgpICogbmV3VGlsZVNpemUuaGVpZ2h0KCkpOworICAgIGZvciAoaW50IGogPSAwOyBq
IDwgb2xkVGlsZVNpemUuaGVpZ2h0KCk7ICsraikKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBvbGRUaWxlU2l6ZS53aWR0aCgpOyArK2kpCisgICAgICAgICAgICBuZXdUaWxlc1tpICsgaiAq
IG5ld1RpbGVTaXplLndpZHRoKCldLnN3YXAobV90aWxlc1tpICsgaiAqIG9sZFRpbGVTaXplLndp
ZHRoKCldKTsKICAgICBtX3RpbGVzLnN3YXAobmV3VGlsZXMpOwotICAgIG1fbGF5ZXJTaXplID0g
c2l6ZTsKLSAgICBtX2xheWVyVGlsZVNpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwogfQog
CiB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6Z3Jvd0xheWVyVG9Db250YWluKGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0KQogewogICAgIC8vIEdyb3cgdGhlIHRpbGUgYXJyYXkgdG8gY29udGFp
biB0aGlzIGNvbnRlbnQgcmVjdC4KICAgICBJbnRSZWN0IGxheWVyUmVjdCA9IGNvbnRlbnRSZWN0
VG9MYXllclJlY3QoY29udGVudFJlY3QpOwotICAgIEludFNpemUgbGF5ZXJTaXplID0gSW50U2l6
ZShsYXllclJlY3QubWF4WCgpLCBsYXllclJlY3QubWF4WSgpKTsKKyAgICBJbnRTaXplIHJlY3RT
aXplID0gSW50U2l6ZShsYXllclJlY3QubWF4WCgpLCBsYXllclJlY3QubWF4WSgpKTsKIAotICAg
IEludFNpemUgbmV3U2l6ZSA9IGxheWVyU2l6ZS5leHBhbmRlZFRvKG1fbGF5ZXJTaXplKTsKKyAg
ICBJbnRTaXplIG5ld1NpemUgPSByZWN0U2l6ZS5leHBhbmRlZFRvKGxheWVyU2l6ZSgpKTsKICAg
ICByZXNpemVMYXllcihuZXdTaXplKTsKIH0KIAordm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmRy
YXdUZXh0dXJlZFF1YWQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBwcm9qZWN0aW9uTWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgZHJhd01hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9h
dCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBvcGFjaXR5LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IHRleFRyYW5zbGF0ZVgsIGZsb2F0IHRleFRyYW5zbGF0
ZVksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgdGV4U2NhbGVY
LCBmbG9hdCB0ZXhTY2FsZVksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTGF5ZXJUaWxlckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIHN2KQoreworICAgIHN0YXRp
YyBmbG9hdCBnbE1hdHJpeFsxNl07CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW5kZXJN
YXRyaXggPSBkcmF3TWF0cml4OworCisgICAgLy8gQXBwbHkgYSBzY2FsaW5nIGZhY3RvciB0byBz
aXplIHRoZSBxdWFkIGZyb20gMXgxIHRvIGl0cyBpbnRlbmRlZCBzaXplLgorICAgIHJlbmRlck1h
dHJpeC5zY2FsZTNkKHdpZHRoLCBoZWlnaHQsIDEpOworCisgICAgLy8gQXBwbHkgdGhlIHByb2pl
Y3Rpb24gbWF0cml4IGJlZm9yZSBzZW5kaW5nIHRoZSB0cmFuc2Zvcm0gb3ZlciB0byB0aGUgc2hh
ZGVyLgorICAgIExheWVyQ2hyb21pdW06OnRvR0xNYXRyaXgoJmdsTWF0cml4WzBdLCBwcm9qZWN0
aW9uTWF0cml4ICogcmVuZGVyTWF0cml4KTsKKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51
bmlmb3JtTWF0cml4NGZ2KHN2LT5zaGFkZXJNYXRyaXhMb2NhdGlvbigpLCBmYWxzZSwgJmdsTWF0
cml4WzBdLCAxKSk7CisKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFmKHN2LT5z
aGFkZXJBbHBoYUxvY2F0aW9uKCksIG9wYWNpdHkpKTsKKworICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT51bmlmb3JtNGYoc3YtPnNoYWRlclRleFRyYW5zZm9ybUxvY2F0aW9uKCksCisgICAgICAg
IHRleFRyYW5zbGF0ZVgsIHRleFRyYW5zbGF0ZVksIHRleFNjYWxlWCwgdGV4U2NhbGVZKSk7CisK
KyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+ZHJhd0VsZW1lbnRzKEdyYXBoaWNzQ29udGV4dDNE
OjpUUklBTkdMRVMsIDYsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCwgMCkpOwor
fQorCitMYXllclRpbGVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWVzKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBt
X3RpbGVyU2hhZGVyUHJvZ3JhbSgwKQorICAgICwgbV9zaGFkZXJTYW1wbGVyTG9jYXRpb24oLTEp
CisgICAgLCBtX3NoYWRlck1hdHJpeExvY2F0aW9uKC0xKQorICAgICwgbV9zaGFkZXJBbHBoYUxv
Y2F0aW9uKC0xKQorICAgICwgbV9pbml0aWFsaXplZChmYWxzZSkKK3sKKyAgICAvLyBTaGFkZXJz
IGZvciBkcmF3aW5nIHRoZSBsYXllciBjb250ZW50cy4KKyAgICBjaGFyIHZlcnRleFNoYWRlclN0
cmluZ1tdID0KKyAgICAgICAgImF0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247ICAgXG4iCisgICAg
ICAgICJhdHRyaWJ1dGUgdmVjMiBhX3RleENvb3JkOyAgIFxuIgorICAgICAgICAidW5pZm9ybSBt
YXQ0IG1hdHJpeDsgICAgICAgICBcbiIKKyAgICAgICAgInVuaWZvcm0gdmVjNCB0ZXhUcmFuc2Zv
cm07ICAgXG4iCisgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgIFxuIgorICAg
ICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICIgIGdsX1Bvc2l0aW9uID0gbWF0cml4
ICogYV9wb3NpdGlvbjsgXG4iCisgICAgICAgICIgIHZfdGV4Q29vcmQgPSBhX3RleENvb3JkICog
dGV4VHJhbnNmb3JtLnp3ICsgdGV4VHJhbnNmb3JtLnh5O1xuIgorICAgICAgICAifSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcbiI7CisKKyNpZiBQTEFURk9STShTS0lBKQorICAgIC8vIENv
bG9yIGlzIGluIFJHQkEgb3JkZXIuCisgICAgY2hhciByZ2JhRnJhZ21lbnRTaGFkZXJTdHJpbmdb
XSA9CisgICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXG4iCisgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCBzX3RleHR1
cmU7ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ1bmlmb3JtIGZsb2F0IGFs
cGhhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ2b2lkIG1h
aW4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAg
ICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4i
CisgICAgICAgICIgIHZlYzQgdGV4Q29sb3IgPSB0ZXh0dXJlMkQoc190ZXh0dXJlLCB2X3RleENv
b3JkKTsgXG4iCisgICAgICAgICIgIGdsX0ZyYWdDb2xvciA9IHRleENvbG9yICogYWxwaGE7IFxu
IgorICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxuIjsKKyNlbmRpZgorCisgICAgLy8gQ29sb3IgaXMgaW4gQkdSQSBvcmRlci4KKyAg
ICBjaGFyIGJncmFGcmFnbWVudFNoYWRlclN0cmluZ1tdID0KKyAgICAgICAgInByZWNpc2lvbiBt
ZWRpdW1wIGZsb2F0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInZh
cnlpbmcgdmVjMiB2X3RleENvb3JkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAg
ICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIHNfdGV4dHVyZTsgICAgICAgICAgICAgICAgICAgICAg
ICBcbiIKKyAgICAgICAgInVuaWZvcm0gZmxvYXQgYWxwaGE7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcbiIKKyAgICAgICAgInZvaWQgbWFpbigpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgIiAgdmVjNCB0ZXhDb2xv
ciA9IHRleHR1cmUyRChzX3RleHR1cmUsIHZfdGV4Q29vcmQpOyBcbiIKKyAgICAgICAgIiAgZ2xf
RnJhZ0NvbG9yID0gdmVjNCh0ZXhDb2xvci56LCB0ZXhDb2xvci55LCB0ZXhDb2xvci54LCB0ZXhD
b2xvci53KSAqIGFscGhhOyBcbiIKKyAgICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisKKyNpZiBQTEFURk9STShTS0lBKQorICAg
IC8vIEFzc3VtaW5nIHRoZSBwYWNraW5nIGlzIGVpdGhlciBTa2lhIGRlZmF1bHQgUkdCQSBvciBD
aHJvbWl1bSBkZWZhdWx0IEJHUkEuCisgICAgY2hhciogZnJhZ21lbnRTaGFkZXJTdHJpbmcgPSBT
S19CMzJfU0hJRlQgPyByZ2JhRnJhZ21lbnRTaGFkZXJTdHJpbmcgOiBiZ3JhRnJhZ21lbnRTaGFk
ZXJTdHJpbmc7CisjZWxzZQorICAgIGNoYXIqIGZyYWdtZW50U2hhZGVyU3RyaW5nID0gYmdyYUZy
YWdtZW50U2hhZGVyU3RyaW5nOworI2VuZGlmCisgICAgbV90aWxlclNoYWRlclByb2dyYW0gPSBM
YXllckNocm9taXVtOjpjcmVhdGVTaGFkZXJQcm9ncmFtKG1fY29udGV4dCwgdmVydGV4U2hhZGVy
U3RyaW5nLCBmcmFnbWVudFNoYWRlclN0cmluZyk7CisgICAgaWYgKCFtX3RpbGVyU2hhZGVyUHJv
Z3JhbSkgeworICAgICAgICBMT0dfRVJST1IoIkxheWVyVGlsZXJDaHJvbWl1bTogRmFpbGVkIHRv
IGNyZWF0ZSBzaGFkZXIgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bV9zaGFkZXJTYW1wbGVyTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbiht
X3RpbGVyU2hhZGVyUHJvZ3JhbSwgInNfdGV4dHVyZSIpOworICAgIG1fc2hhZGVyTWF0cml4TG9j
YXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3RpbGVyU2hhZGVyUHJvZ3Jh
bSwgIm1hdHJpeCIpOworICAgIG1fc2hhZGVyQWxwaGFMb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0
VW5pZm9ybUxvY2F0aW9uKG1fdGlsZXJTaGFkZXJQcm9ncmFtLCAiYWxwaGEiKTsKKyAgICBtX3No
YWRlclRleFRyYW5zZm9ybUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24o
bV90aWxlclNoYWRlclByb2dyYW0sICJ0ZXhUcmFuc2Zvcm0iKTsKKyAgICBBU1NFUlQobV9zaGFk
ZXJTYW1wbGVyTG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChtX3NoYWRlck1hdHJpeExvY2F0
aW9uICE9IC0xKTsKKyAgICBBU1NFUlQobV9zaGFkZXJBbHBoYUxvY2F0aW9uICE9IC0xKTsKKyAg
ICBBU1NFUlQobV9zaGFkZXJUZXhUcmFuc2Zvcm1Mb2NhdGlvbiAhPSAtMSk7CisKKyAgICBtX2lu
aXRpYWxpemVkID0gdHJ1ZTsKK30KKworTGF5ZXJUaWxlckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6
On5TaGFyZWRWYWx1ZXMoKQoreworICAgIGlmIChtX3RpbGVyU2hhZGVyUHJvZ3JhbSkKKyAgICAg
ICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1fdGlsZXJTaGFkZXJQ
cm9ncmFtKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmgKaW5kZXgg
ZTA5NjkzZDdlMWVjMWZjN2JhZTUxNTU5N2I4MzRmMDY5MTFjNjBhYS4uNGI2Mzk5ZDA3ZDVhZTZm
MmFiOGVmZjJmZTk4NDE0ODEwZGEyZGZkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmgK
QEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJMYXllclRleHR1cmUuaCIKKyNpbmNsdWRlICJUaWxpbmdEYXRhLmgiCiAjaW5jbHVkZSA8d3Rm
L093bkFycmF5UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ2LDcgKzQ3LDkgQEAg
cHVibGljOgogY2xhc3MgTGF5ZXJUaWxlckNocm9taXVtIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShMYXllclRpbGVyQ2hyb21pdW0pOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PExheWVyVGlsZXJDaHJvbWl1bT4gY3JlYXRlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJS
ZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpOworICAgIGVudW0gQm9yZGVyVGV4ZWxP
cHRpb24geyBIYXNCb3JkZXJUZXhlbHMsIE5vQm9yZGVyVGV4ZWxzIH07CisKKyAgICBzdGF0aWMg
UGFzc093blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IGNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21p
dW0qLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRpb24pOwogCiAgICAg
fkxheWVyVGlsZXJDaHJvbWl1bSgpOwogCkBAIC02MCw4ICs2MywzMCBAQCBwdWJsaWM6CiAgICAg
Ly8gQ2hhbmdlIHRoZSB0aWxlIHNpemUuICBUaGlzIG1heSBpbnZhbGlkYXRlIGFsbCB0aGUgZXhp
c3RpbmcgdGlsZXMuCiAgICAgdm9pZCBzZXRUaWxlU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKTsK
IAorICAgIGNsYXNzIFNoYXJlZFZhbHVlcyB7CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNp
dCBTaGFyZWRWYWx1ZXMoR3JhcGhpY3NDb250ZXh0M0QqKTsKKyAgICAgICAgflNoYXJlZFZhbHVl
cygpOworCisgICAgICAgIHVuc2lnbmVkIHRpbGVyU2hhZGVyUHJvZ3JhbSgpIGNvbnN0IHsgcmV0
dXJuIG1fdGlsZXJTaGFkZXJQcm9ncmFtOyB9CisgICAgICAgIGludCBzaGFkZXJTYW1wbGVyTG9j
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NoYWRlclNhbXBsZXJMb2NhdGlvbjsgfQorICAgICAg
ICBpbnQgc2hhZGVyTWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NoYWRlck1hdHJp
eExvY2F0aW9uOyB9CisgICAgICAgIGludCBzaGFkZXJBbHBoYUxvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaGFkZXJBbHBoYUxvY2F0aW9uOyB9CisgICAgICAgIGludCBzaGFkZXJUZXhUcmFu
c2Zvcm1Mb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZGVyVGV4VHJhbnNmb3JtTG9jYXRp
b247IH0KKyAgICAgICAgaW50IGluaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFs
aXplZDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29u
dGV4dDsKKyAgICAgICAgdW5zaWduZWQgbV90aWxlclNoYWRlclByb2dyYW07CisgICAgICAgIGlu
dCBtX3NoYWRlclNhbXBsZXJMb2NhdGlvbjsKKyAgICAgICAgaW50IG1fc2hhZGVyTWF0cml4TG9j
YXRpb247CisgICAgICAgIGludCBtX3NoYWRlckFscGhhTG9jYXRpb247CisgICAgICAgIGludCBt
X3NoYWRlclRleFRyYW5zZm9ybUxvY2F0aW9uOworICAgICAgICBpbnQgbV9pbml0aWFsaXplZDsK
KyAgICB9OworCiBwcml2YXRlOgotICAgIExheWVyVGlsZXJDaHJvbWl1bShMYXllclJlbmRlcmVy
Q2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplKTsKKyAgICBM
YXllclRpbGVyQ2hyb21pdW0oTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgSW50U2l6ZSYg
dGlsZVNpemUsIEJvcmRlclRleGVsT3B0aW9uKTsKIAogICAgIGNsYXNzIFRpbGUgewogICAgICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaWxlKTsKQEAgLTc5LDYgKzEwNCwxMiBAQCBwcml2YXRl
OgogICAgICAgICBPd25QdHI8TGF5ZXJUZXh0dXJlPiBtX3RleDsKICAgICB9OwogCisgICAgdm9p
ZCBkcmF3VGV4dHVyZWRRdWFkKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHByb2plY3Rpb25NYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBk
cmF3TWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQg
aGVpZ2h0LCBmbG9hdCBvcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB0
ZXhUcmFuc2xhdGVYLCBmbG9hdCB0ZXhUcmFuc2xhdGVZLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBmbG9hdCB0ZXhTY2FsZVgsIGZsb2F0IHRleFNjYWxlWSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgTGF5ZXJUaWxlckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqKTsKKwogICAg
IHZvaWQgcmVzaXplTGF5ZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSk7CiAgICAgLy8gR3JvdyBsYXll
ciBzaXplIHRvIGNvbnRhaW4gdGhpcyByZWN0YW5nbGUuCiAgICAgdm9pZCBncm93TGF5ZXJUb0Nv
bnRhaW4oY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwpAQCAtMTAwLDkgKzEzMSwxMCBAQCBw
cml2YXRlOgogICAgIC8vIFJldHVybnMgdGhlIGJvdW5kcyBpbiBsYXllciBzcGFjZSBmb3IgYSBn
aXZlbiB0aWxlIGxvY2F0aW9uLgogICAgIEludFJlY3QgdGlsZUxheWVyUmVjdChpbnQgaSwgaW50
IGopIGNvbnN0OwogCisgICAgSW50U2l6ZSBsYXllclNpemUoKSBjb25zdDsKKyAgICBJbnRTaXpl
IGxheWVyVGlsZVNpemUoKSBjb25zdDsKKwogICAgIEludFNpemUgbV90aWxlU2l6ZTsKLSAgICBJ
bnRTaXplIG1fbGF5ZXJTaXplOwotICAgIEludFNpemUgbV9sYXllclRpbGVTaXplOwogICAgIElu
dFJlY3QgbV9sYXN0VXBkYXRlTGF5ZXJSZWN0OwogICAgIEludFBvaW50IG1fbGF5ZXJQb3NpdGlv
bjsKIApAQCAtMTE2LDYgKzE0OCw4IEBAIHByaXZhdGU6CiAgICAgLy8gQ2FjaGUgYSB0aWxlLXNp
emVkIHBpeGVsIGJ1ZmZlciB0byBkcmF3IGludG8uCiAgICAgT3duQXJyYXlQdHI8dWludDhfdD4g
bV90aWxlUGl4ZWxzOwogCisgICAgVGlsaW5nRGF0YSBtX3RpbGluZ0RhdGE7CisKICAgICBMYXll
clJlbmRlcmVyQ2hyb21pdW0qIG1fbGF5ZXJSZW5kZXJlcjsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmNwcAppbmRleCBlN2M0
ZTRjOGExMmIxZmVlNWFmOWU5NTIyZDJmNjZkZmYzN2NkODA5Li5kZDU0MGIzOTkyYzgwOWFkNzQx
ZGM4ZDdjYzc1NDQyYTdkMWY2ODg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuY3BwCkBAIC00NCw3ICs0NCw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogc3RhdGljIGludCBjb21wdXRlTnVtVGlsZXMoaW50IG1heFRleHR1cmVT
aXplLCBpbnQgdG90YWxTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKQogewotICAgIHJldHVybiBtYXgo
MSwgMSArICh0b3RhbFNpemUgLSAxIC0gMiAqIGJvcmRlclRleGVscykgLyAobWF4VGV4dHVyZVNp
emUgLSAyICogYm9yZGVyVGV4ZWxzKSk7CisgICAgaW50IG51bVRpbGVzID0gbWF4KDEsIDEgKyAo
dG90YWxTaXplIC0gMSAtIDIgKiBib3JkZXJUZXhlbHMpIC8gKG1heFRleHR1cmVTaXplIC0gMiAq
IGJvcmRlclRleGVscykpOworICAgIHJldHVybiB0b3RhbFNpemUgPiAwID8gbnVtVGlsZXMgOiAw
OwogfQogCiBUaWxpbmdEYXRhOjpUaWxpbmdEYXRhKGludCBtYXhUZXh0dXJlU2l6ZSwgaW50IHRv
dGFsU2l6ZVgsIGludCB0b3RhbFNpemVZLCBib29sIGhhc0JvcmRlclRleGVscykKQEAgLTUzLDgg
KzU0LDIwIEBAIFRpbGluZ0RhdGE6OlRpbGluZ0RhdGEoaW50IG1heFRleHR1cmVTaXplLCBpbnQg
dG90YWxTaXplWCwgaW50IHRvdGFsU2l6ZVksIGJvb2wKICAgICAsIG1fdG90YWxTaXplWSh0b3Rh
bFNpemVZKQogICAgICwgbV9ib3JkZXJUZXhlbHMoaGFzQm9yZGVyVGV4ZWxzID8gMSA6IDApCiB7
Ci0gICAgbV9udW1UaWxlc1ggPSBjb21wdXRlTnVtVGlsZXMobWF4VGV4dHVyZVNpemUsIG1fdG90
YWxTaXplWCwgbV9ib3JkZXJUZXhlbHMpOwotICAgIG1fbnVtVGlsZXNZID0gY29tcHV0ZU51bVRp
bGVzKG1heFRleHR1cmVTaXplLCBtX3RvdGFsU2l6ZVksIG1fYm9yZGVyVGV4ZWxzKTsKKyAgICBy
ZWNvbXB1dGVOdW1UaWxlcygpOworfQorCit2b2lkIFRpbGluZ0RhdGE6OnNldFRvdGFsU2l6ZShp
bnQgdG90YWxTaXplWCwgaW50IHRvdGFsU2l6ZVkpCit7CisgICAgbV90b3RhbFNpemVYID0gdG90
YWxTaXplWDsKKyAgICBtX3RvdGFsU2l6ZVkgPSB0b3RhbFNpemVZOworICAgIHJlY29tcHV0ZU51
bVRpbGVzKCk7Cit9CisKK3ZvaWQgVGlsaW5nRGF0YTo6c2V0TWF4VGV4dHVyZVNpemUoaW50IG1h
eFRleHR1cmVTaXplKQoreworICAgIG1fbWF4VGV4dHVyZVNpemUgPSBtX21heFRleHR1cmVTaXpl
OworICAgIHJlY29tcHV0ZU51bVRpbGVzKCk7CiB9CiAKIGludCBUaWxpbmdEYXRhOjp0aWxlWElu
ZGV4RnJvbVNyY0Nvb3JkKGludCBzcmNQb3MpIGNvbnN0CkBAIC0xNDIsOSArMTU1LDYgQEAgaW50
IFRpbGluZ0RhdGE6OnRpbGVTaXplWChpbnQgeEluZGV4KSBjb25zdAogewogICAgIEFTU0VSVCh4
SW5kZXggPj0gMCAmJiB4SW5kZXggPCBudW1UaWxlc1goKSk7CiAKLSAgICBpbnQgc2l6ZSA9IG1h
eFRleHR1cmVTaXplKCk7Ci0gICAgc2l6ZSA9IG1pbihzaXplLCB0b3RhbFNpemVYKCkpOwotCiAg
ICAgaWYgKCF4SW5kZXggJiYgbV9udW1UaWxlc1ggPT0gMSkKICAgICAgICAgcmV0dXJuIG1fdG90
YWxTaXplWDsKICAgICBpZiAoIXhJbmRleCAmJiBtX251bVRpbGVzWCA+IDEpCkBAIC0xNjIsOSAr
MTcyLDYgQEAgaW50IFRpbGluZ0RhdGE6OnRpbGVTaXplWShpbnQgeUluZGV4KSBjb25zdAogewog
ICAgIEFTU0VSVCh5SW5kZXggPj0gMCAmJiB5SW5kZXggPCBudW1UaWxlc1koKSk7CiAKLSAgICBp
bnQgc2l6ZSA9IG1heFRleHR1cmVTaXplKCk7Ci0gICAgc2l6ZSA9IG1pbihzaXplLCB0b3RhbFNp
emVZKCkpOwotCiAgICAgaWYgKCF5SW5kZXggJiYgbV9udW1UaWxlc1kgPT0gMSkKICAgICAgICAg
cmV0dXJuIG1fdG90YWxTaXplWTsKICAgICBpZiAoIXlJbmRleCAmJiBtX251bVRpbGVzWSA+IDEp
CkBAIC0yMjIsNiArMjI5LDIwIEBAIHZvaWQgVGlsaW5nRGF0YTo6aW50ZXJzZWN0RHJhd1F1YWQo
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzCiAgICAgICAgIHNy
Y1JlY3RJbnRlcnNlY3RlZE5vcm1IICogZHN0UmVjdC5oZWlnaHQoKSk7CiB9CiAKK0ludFBvaW50
IFRpbGluZ0RhdGE6OnRleHR1cmVPZmZzZXQoaW50IHhJbmRleCwgaW50IHlJbmRleCkgY29uc3QK
K3sKKyAgICBpbnQgbGVmdCA9ICgheEluZGV4IHx8IG1fbnVtVGlsZXNYID09IDEpID8gMCA6IG1f
Ym9yZGVyVGV4ZWxzOworICAgIGludCB0b3AgPSAoIXlJbmRleCB8fCBtX251bVRpbGVzWSA9PSAx
KSA/IDAgOiBtX2JvcmRlclRleGVsczsKKworICAgIHJldHVybiBJbnRQb2ludChsZWZ0LCB0b3Ap
OworfQorCit2b2lkIFRpbGluZ0RhdGE6OnJlY29tcHV0ZU51bVRpbGVzKCkKK3sKKyAgICBtX251
bVRpbGVzWCA9IGNvbXB1dGVOdW1UaWxlcyhtX21heFRleHR1cmVTaXplLCBtX3RvdGFsU2l6ZVgs
IG1fYm9yZGVyVGV4ZWxzKTsKKyAgICBtX251bVRpbGVzWSA9IGNvbXB1dGVOdW1UaWxlcyhtX21h
eFRleHR1cmVTaXplLCBtX3RvdGFsU2l6ZVksIG1fYm9yZGVyVGV4ZWxzKTsKK30KKwogfQogCiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9U
aWxpbmdEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGlsaW5n
RGF0YS5oCmluZGV4IGQxMTQwYmQ1ZjgwMzVkYzliMGM3NWMxMmE4OGU4ODYxZjkzOTk1YWEuLjI5
ODllYWVhZWI5NTFhZGFmYjgzNmJjOTk3ZjJhY2EzZmUwYjBjNGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuaApAQCAtMzcsMTEgKzM3
LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgSW50
UmVjdDsKK2NsYXNzIEludFBvaW50OwogCiBjbGFzcyBUaWxpbmdEYXRhIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShUaWxpbmdEYXRhKTsKIHB1YmxpYzoKICAgICBUaWxpbmdEYXRhKGludCBt
YXhUZXh0dXJlU2l6ZSwgaW50IHRvdGFsU2l6ZVgsIGludCB0b3RhbFNpemVZLCBib29sIGhhc0Jv
cmRlclRleGVscyk7CisgICAgdm9pZCBzZXRUb3RhbFNpemUoaW50IHRvdGFsU2l6ZVgsIGludCB0
b3RhbFNpemVZKTsKKyAgICB2b2lkIHNldE1heFRleHR1cmVTaXplKGludCk7CiAgICAgaW50IG1h
eFRleHR1cmVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXhUZXh0dXJlU2l6ZTsgfQogICAgIGlu
dCB0b3RhbFNpemVYKCkgY29uc3QgeyByZXR1cm4gbV90b3RhbFNpemVYOyB9CiAgICAgaW50IHRv
dGFsU2l6ZVkoKSBjb25zdCB7IHJldHVybiBtX3RvdGFsU2l6ZVk7IH0KQEAgLTcwLDkgKzczLDEz
IEBAIHB1YmxpYzoKICAgICAvLyBpbiB0ZXhlbCB1bml0cywgcmV0dXJucyBhZGp1c3RlZCBkYXRh
IHRvIHJlbmRlciBqdXN0IHRoZSBvbmUgdGlsZS4KICAgICB2b2lkIGludGVyc2VjdERyYXdRdWFk
KGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBpbnQg
dGlsZSwgRmxvYXRSZWN0KiBuZXdTcmMsIEZsb2F0UmVjdCogbmV3RHN0KSBjb25zdDsKIAorICAg
IC8vIERpZmZlcmVuY2UgYmV0d2VlbiB0aWxlQm91bmQncyBhbmQgdGlsZUJvdW5kV2l0aEJvcmRl
cidzIGxvY2F0aW9uKCkuCisgICAgSW50UG9pbnQgdGV4dHVyZU9mZnNldChpbnQgeEluZGV4LCBp
bnQgeUluZGV4KSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBUaWxpbmdEYXRhKCkgOiBtX21heFRl
eHR1cmVTaXplKDApLCBtX3RvdGFsU2l6ZVgoMCksIG1fdG90YWxTaXplWSgwKSB7fQogICAgIHZv
aWQgYXNzZXJ0VGlsZShpbnQgdGlsZSkgY29uc3QgeyBBU1NFUlQodGlsZSA+PSAwICYmIHRpbGUg
PCBudW1UaWxlcygpKTsgfQorICAgIHZvaWQgcmVjb21wdXRlTnVtVGlsZXMoKTsKIAogICAgIGlu
dCBtX21heFRleHR1cmVTaXplOwogICAgIGludCBtX3RvdGFsU2l6ZVg7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85406</attachid>
            <date>2011-03-10 16:18:14 -0800</date>
            <delta_ts>2011-03-11 13:33:17 -0800</delta_ts>
            <desc>Fix for Coverity discovered NO_EFFECT (self-assign) defect.</desc>
            <filename>MyPatch.txt</filename>
            <type>text/plain</type>
            <size>1124</size>
            <attacher name="Chris Guillory">ctguil</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNzgyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDMtMTAgIENocmlzIEd1
aWxsb3J5ICA8Y2hyaXMuZ3VpbGxvcnlAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggZm9yIENvdmVyaXR5IGRpc2NvdmVyZWQg
Tk9fRUZGRUNUIChzZWxmLWFzc2lnbikgZGVmZWN0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQxNDMKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dwdS9UaWxpbmdEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGluZ0RhdGE6OnNl
dE1heFRleHR1cmVTaXplKToKKwogMjAxMS0wMy0xMCAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRh
LmNwcAkocmV2aXNpb24gODA3NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvVGlsaW5nRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgdm9p
ZCBUaWxpbmdEYXRhOjpzZXRUb3RhbFNpemUoaW50IHRvdGFsUwogCiB2b2lkIFRpbGluZ0RhdGE6
OnNldE1heFRleHR1cmVTaXplKGludCBtYXhUZXh0dXJlU2l6ZSkKIHsKLSAgICBtX21heFRleHR1
cmVTaXplID0gbV9tYXhUZXh0dXJlU2l6ZTsKKyAgICBtX21heFRleHR1cmVTaXplID0gbWF4VGV4
dHVyZVNpemU7CiAgICAgcmVjb21wdXRlTnVtVGlsZXMoKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85519</attachid>
            <date>2011-03-11 13:33:20 -0800</date>
            <delta_ts>2011-03-11 15:39:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54143-20110311133319.patch</filename>
            <type>text/plain</type>
            <size>2664</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODA4NjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
ZGEwNjQzMzU5ODQ0MTg4NzgwYjFlZjE2NWJmOGRlMWYyOTE2YTc4Yi4uM2QzZjUzNmM4ODFkNzEx
NTQ3MzE0MDY5MWI5ZGE0MDRmYzY5M2Y1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxMyBAQAorMjAxMS0wMy0xMSAgQWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBtaXNzaW5nIHVuaXQgdGVzdHMgdG8gVGlsaW5nRGF0YS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MTQzCisKKyAgICAgICAgKiB0ZXN0cy9UaWxp
bmdEYXRhVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMS0wMy0xMSAg
QXZpIERyaXNzbWFuICA8YXZpQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9u
eSBDaGFuZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsaW5n
RGF0YVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxpbmdEYXRhVGVz
dC5jcHAKaW5kZXggZWMxOGYwMTA0ZGMxMzk3MzhjOTM0ZWU0ZTM1NmQwZmZjN2VmOWY5Zi4uYTQx
ZjdmZTEzNzA3NGY3ZmMwNWYyMzQ0MWM2OTIxZmZjMDBmODU1ZCAxMDA3NTUKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHAKQEAgLTMzMSw0ICszMzEsNTYg
QEAgVEVTVChUaWxpbmdEYXRhVGVzdCwgdGlsZVNpemVZX2FuZF90aWxlUG9zaXRpb25ZKQogICAg
IEVYUEVDVF9FUSg0LCBUaWxpbmdEYXRhKDMsIDEwMCwgNiwgdHJ1ZSkudGlsZVBvc2l0aW9uWSgz
KSk7CiB9CiAKK1RFU1QoVGlsaW5nRGF0YVRlc3QsIHNldFRvdGFsU2l6ZSkKK3sKKyAgICBUaWxp
bmdEYXRhIGRhdGEoNSwgNSwgNSwgZmFsc2UpOworICAgIEVYUEVDVF9FUSg1LCBkYXRhLnRvdGFs
U2l6ZVgoKSk7CisgICAgRVhQRUNUX0VRKDUsIGRhdGEudG90YWxTaXplWSgpKTsKKyAgICBFWFBF
Q1RfRVEoMSwgZGF0YS5udW1UaWxlc1goKSk7CisgICAgRVhQRUNUX0VRKDUsIGRhdGEudGlsZVNp
emVYKDApKTsKKyAgICBFWFBFQ1RfRVEoMSwgZGF0YS5udW1UaWxlc1koKSk7CisgICAgRVhQRUNU
X0VRKDUsIGRhdGEudGlsZVNpemVZKDApKTsKKworICAgIGRhdGEuc2V0VG90YWxTaXplKDYsIDUp
OworICAgIEVYUEVDVF9FUSg2LCBkYXRhLnRvdGFsU2l6ZVgoKSk7CisgICAgRVhQRUNUX0VRKDUs
IGRhdGEudG90YWxTaXplWSgpKTsKKyAgICBFWFBFQ1RfRVEoMiwgZGF0YS5udW1UaWxlc1goKSk7
CisgICAgRVhQRUNUX0VRKDUsIGRhdGEudGlsZVNpemVYKDApKTsKKyAgICBFWFBFQ1RfRVEoMSwg
ZGF0YS50aWxlU2l6ZVgoMSkpOworICAgIEVYUEVDVF9FUSgxLCBkYXRhLm51bVRpbGVzWSgpKTsK
KyAgICBFWFBFQ1RfRVEoNSwgZGF0YS50aWxlU2l6ZVkoMCkpOworCisgICAgZGF0YS5zZXRUb3Rh
bFNpemUoNSwgMTIpOworICAgIEVYUEVDVF9FUSg1LCBkYXRhLnRvdGFsU2l6ZVgoKSk7CisgICAg
RVhQRUNUX0VRKDEyLCBkYXRhLnRvdGFsU2l6ZVkoKSk7CisgICAgRVhQRUNUX0VRKDEsIGRhdGEu
bnVtVGlsZXNYKCkpOworICAgIEVYUEVDVF9FUSg1LCBkYXRhLnRpbGVTaXplWCgwKSk7CisgICAg
RVhQRUNUX0VRKDMsIGRhdGEubnVtVGlsZXNZKCkpOworICAgIEVYUEVDVF9FUSg1LCBkYXRhLnRp
bGVTaXplWSgwKSk7CisgICAgRVhQRUNUX0VRKDUsIGRhdGEudGlsZVNpemVZKDEpKTsKKyAgICBF
WFBFQ1RfRVEoMiwgZGF0YS50aWxlU2l6ZVkoMikpOworfQorCitURVNUKFRpbGluZ0RhdGFUZXN0
LCBzZXRNYXhUZXh0dXJlU2l6ZSkKK3sKKyAgICBUaWxpbmdEYXRhIGRhdGEoOCwgMTYsIDMyLCBm
YWxzZSk7CisgICAgRVhQRUNUX0VRKDIsIGRhdGEubnVtVGlsZXNYKCkpOworICAgIEVYUEVDVF9F
USg0LCBkYXRhLm51bVRpbGVzWSgpKTsKKworICAgIGRhdGEuc2V0TWF4VGV4dHVyZVNpemUoMzIp
OworICAgIEVYUEVDVF9FUSgzMiwgZGF0YS5tYXhUZXh0dXJlU2l6ZSgpKTsKKyAgICBFWFBFQ1Rf
RVEoMSwgZGF0YS5udW1UaWxlc1goKSk7CisgICAgRVhQRUNUX0VRKDEsIGRhdGEubnVtVGlsZXNZ
KCkpOworCisgICAgZGF0YS5zZXRNYXhUZXh0dXJlU2l6ZSgyKTsKKyAgICBFWFBFQ1RfRVEoMiwg
ZGF0YS5tYXhUZXh0dXJlU2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoOCwgZGF0YS5udW1UaWxlc1go
KSk7CisgICAgRVhQRUNUX0VRKDE2LCBkYXRhLm51bVRpbGVzWSgpKTsKKworICAgIGRhdGEuc2V0
TWF4VGV4dHVyZVNpemUoNSk7CisgICAgRVhQRUNUX0VRKDUsIGRhdGEubWF4VGV4dHVyZVNpemUo
KSk7CisgICAgRVhQRUNUX0VRKDQsIGRhdGEubnVtVGlsZXNYKCkpOworICAgIEVYUEVDVF9FUSg3
LCBkYXRhLm51bVRpbGVzWSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
      

    </bug>

</bugzilla>