<?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>67341</bug_id>
          
          <creation_ts>2011-08-31 16:51:19 -0700</creation_ts>
          <short_desc>[chromium] Scissor rect optimization for chromium compositor</short_desc>
          <delta_ts>2011-12-02 22:14:33 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>68572</dependson>
    
    <dependson>69197</dependson>
    
    <dependson>69441</dependson>
    
    <dependson>70057</dependson>
    
    <dependson>70442</dependson>
    
    <dependson>71580</dependson>
    
    <dependson>72028</dependson>
    
    <dependson>72520</dependson>
    
    <dependson>72521</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Shawn Singh">shawnsingh</reporter>
          <assigned_to name="Shawn Singh">shawnsingh</assigned_to>
          <cc>backer</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>460076</commentid>
    <comment_count>0</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-08-31 16:51:19 -0700</bug_when>
    <thetext>This first patch is for review only.  It implements two things:

(1) a scissor rect optimization:  paint rects and layer changes are tracked so that the renderer can compute a rect that contains any changes that were made since the previous redraw.  This rect can be used to scissor the rendering passes.  Eventually it can also be used to copy sub-buffers in the GPU process.

(2) a visualization of paint rects, draw rects, exposed rects, and the compositor scissor rect, on the CCHeadsUpDisplay.  This should probably be submitted as a separate patch, when things are ready to commit.  For now, if you want to try running the patch, you can hard-code the 3 options to true/false as desired.

Reviewers please note:
  - most of the &quot;TODO(shawnsingh)&quot; comments are actually questions for reviewers.
  - please suggest how we might need to pipe this scissor rect to the GPU process
  - please suggest how we want to enable/disable it (e.g., with a command-line flag? where will the setting come from?)

About testing: we will need rigorous unit tests, and possibly layout tests.  This code has been informally tested on:
  - youtube html5 videos
  - khronos webgl+css demo
  - khronos webgl shiny teapot demo
  - poster circle
  - briefly tested canvas and layer masks
  - testing requires manually selecting text, performing mouse-overs and clicks.

Known issues:
  - https://bugs.webkit.org/show_bug.cgi?id=67009
  - youtube html5 seems to produce arbitrary large paint rects.  Most of these weird rects are correlated to small popups associated with buttons.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460092</commentid>
    <comment_count>1</comment_count>
      <attachid>105864</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-08-31 17:04:53 -0700</bug_when>
    <thetext>Created attachment 105864
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460132</commentid>
    <comment_count>2</comment_count>
      <attachid>105864</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-31 18:16:31 -0700</bug_when>
    <thetext>Comment on attachment 105864
Patch

Attachment 105864 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9566954</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460137</commentid>
    <comment_count>3</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-08-31 18:24:22 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 105864 [details])
&gt; Attachment 105864 [details] did not pass chromium-ews (chromium-xvfb):
&gt; Output: http://queues.webkit.org/results/9566954

The code is not expected to compile because of command-line options not being integrated with chromium, and I&apos;ll remove that OutputDebugStringA junk.

Could some of you still please review this, anyway?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460625</commentid>
    <comment_count>4</comment_count>
      <attachid>105864</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-09-01 11:19:55 -0700</bug_when>
    <thetext>Comment on attachment 105864
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:118
&gt; +void LayerChromium::setNeedsCommitBecausePropertyChanged(bool layerHasMoved)

Actually, I think we can get rid of this boolean switch.  The only difference was whether we need to draw both the &quot;old&quot; and &quot;new&quot; locations of the layer because it moved, or just the existing location of the layer.   In the latter case, the &quot;old&quot; and &quot;new&quot; locations are the same.   So, it seems better to avoid this error-prone boolean flag.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:81
&gt; +    const FloatRect&amp; dirtyRect() { return m_dirtyRect; }

Whoops, I intended to rename this accessor and member variable as &quot;repaintRect&quot; instead of &quot;dirtyRect&quot;.   Also need to make the accessor const.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460818</commentid>
    <comment_count>5</comment_count>
      <attachid>105864</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-01 15:03:23 -0700</bug_when>
    <thetext>Comment on attachment 105864
Patch

Definitely pull this apart into more and smaller patches. There shouldn&apos;t be any visualization in this patch, just the logic to compute changed-ness.

For the enable flag, you can put a bool on CCSettings, initialize it to false in the constructor, then for your testing purposes set it to true. We can figure out how to turn it on officially later.

It feels to me that the &quot;setNeedsCommitBecauseXXX&quot; approach is quite fragile. It seems to me that there is a fair amount of fragility pushed into the layer system with this approach, as each layer has to very-carefully specify what kind of change is happening.

Did you give any thought to doing this as a preprocessing step on a QuadList?

E.g. make a modified version drawLayers that walks the tree but instead of drawing, for every drawCall, puts a quad into a QuadBuffer:
struct DrawQuadInfo {FloatQuad screenspaceQuad (with depth), bool textureChanged, FloatQuad changedRectInsideTextureProjectedToScreenspace}

Then, before drawlayers, build this quadlist. Remember the last frame&apos;s quadlist as well. Walk the list, if any quads have moved or their textures changed, use that to derive screenspace scissor rect. Then set the scissor and run the drawLayers.

Webkit todos are ≈FIXME. E.g. // FIXME: blahblahblah. TODO(username) is chrome style.

If you were going to stick with the setNeedsCommitBecause approach, maybe use an enum?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460878</commentid>
    <comment_count>6</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-09-01 16:06:33 -0700</bug_when>
    <thetext>Sure, I&apos;ll remove the visualization code from this patch.

&gt; It feels to me that the &quot;setNeedsCommitBecauseXXX&quot; approach is quite fragile. It seems to me that there is a fair amount of fragility pushed into the layer system with this approach, as each layer has to very-carefully specify what kind of change is happening.

After taking a step back yesterday, I realized the boolean flag is completely unnecessary, and reverting that significantly reduces the amount of changes in the LayerChromium.  This includes removing the &quot;setNeedsCommitBecause&quot; naming stuff.

&gt; 
&gt; Did you give any thought to doing this as a preprocessing step on a QuadList?
&gt; 
&gt; E.g. make a modified version drawLayers that walks the tree but instead of drawing, for every drawCall, puts a quad into a QuadBuffer:
&gt; struct DrawQuadInfo {FloatQuad screenspaceQuad (with depth), bool textureChanged, FloatQuad changedRectInsideTextureProjectedToScreenspace}
&gt; 
&gt; Then, before drawlayers, build this quadlist. Remember the last frame&apos;s quadlist as well. Walk the list, if any quads have moved or their textures changed, use that to derive screenspace scissor rect. Then set the scissor and run the drawLayers.
&gt; 

I think this is analogous to what the patch is already doing.  If we follow your approach, we would need to add scissor rects and transforms to this QuadBuffer structure, because that is the actual information we need to know if the layer&apos;s quad has changed.  Eventually then, it becomes two loops, like you said: (1) to determine what goes into the quad buffer, (2) to actually draw things in the quad buffer.

In this patch, those two loops already exist:

(1) LayerRendererChromium::computeCompositorScissorRect walks through all layers to determine what their actual draw rect will be.  (this is not quite true in my current patch, but it is exactly poised for that role, e.g. computeAllScissorRects)

and

(2) the existing original nested loop in drawLayersInternal, which actually issues the drawQuad commands.  Once we remove the redundancy from this loop, it does become essentially a quick walk through all layers to determine what gets drawn, and should not be any less efficient than walking a separate quad buffer.

It seems to me that if we take both approaches through to completion, after cleaning away unnecessary quad buffer storage in your approach and redundant code in my approach, we&apos;d end up with essentially the same solution.

Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460886</commentid>
    <comment_count>7</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-09-01 16:10:31 -0700</bug_when>
    <thetext>Just to clarify...  &quot;Once we remove the redundancy from this loop,&quot;

...I&apos;m referring to the redundancy between loops (1) and (2), since they are almost exactly the same in my patch.   Most of those conditionals are probably more appropriate in loop (1), and loop (2) can do a quick check to see if the layer was &quot;marked to be drawn&quot;, and only culls layers if userRenderSurface() does not work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460930</commentid>
    <comment_count>8</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-09-01 16:55:30 -0700</bug_when>
    <thetext>One last thing for now...

catching things at the drawQuad level may allow us to hook into quads associated with individual tiles - that was another good point Nat had.

But the way I see it:

(1) The primary purpose of this patch is to compute the scissor rect, and there is no reason that computing the scissor needs to be tiling-aware.

(2) The logic for deciding whether a layer (or tile) gets drawn, I&apos;m actually not changing that logic.  I might end up re-arranging the code, but not changing the logic.  If tiling has other clever ways to cull tiles from being drawn, I think those are independent of this patch, and those optimizations seem to mostly already exist.

Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491195</commentid>
    <comment_count>9</comment_count>
      <attachid>112600</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-26 14:46:24 -0700</bug_when>
    <thetext>Created attachment 112600
pseudcode of the final scissor approach</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491198</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-26 14:49:00 -0700</bug_when>
    <thetext>Attachment 112600 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:308:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:309:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:314:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:339:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:366:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 5 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491214</commentid>
    <comment_count>11</comment_count>
      <attachid>112600</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-26 15:13:22 -0700</bug_when>
    <thetext>Comment on attachment 112600
pseudcode of the final scissor approach

Attachment 112600 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10223120</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492859</commentid>
    <comment_count>12</comment_count>
      <attachid>112958</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-28 18:39:17 -0700</bug_when>
    <thetext>Created attachment 112958
please review, but also check comments about this version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492867</commentid>
    <comment_count>13</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-28 18:47:12 -0700</bug_when>
    <thetext>Hi all,

The most recent patch is a working version of scissor.

Notes for reviewers:

(1) the visualization code will not be in the final patch.  you can ignore changes in CCHeadsUpDisplay.   The most important code is in computeCompositorScissorRect().

(2) there are several FIXME comments, I believe all of them will disappear in the final version.  You can read the comments to understand the issue.

(3) The following edge cases (really, no pun intended) have not been fully addressed/tested yet.  They may involve minor changes to the code, or they will require separate bugs because other code is doing something suboptimal.

  - non composited content layer
  - scrollbar layers
  - plugin layers
  - masks
  - replicas
  - appropriate testing for the compositor scissor rect.


If you want to run:
   change the useCompositorScissor flag in CCLayerTreeHost to &quot;true&quot;.
   optionally, change the showCompositorRects flag to &quot;true&quot;, and ask me what the colors mean.

   With scissoring, you will see the &quot;blue background&quot; for any regions of the image that did not change on that particular frame.

Enjoy!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492962</commentid>
    <comment_count>14</comment_count>
      <attachid>112958</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-29 13:40:32 -0700</bug_when>
    <thetext>Comment on attachment 112958
please review, but also check comments about this version

This is not ready for WebKit review, please don&apos;t set review?. This puts the patch in a global queue that all WebKit reviewers look at for patches to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493007</commentid>
    <comment_count>15</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-29 20:29:12 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 112958 [details])
&gt; This is not ready for WebKit review, please don&apos;t set review?. This puts the patch in a global queue that all WebKit reviewers look at for patches to review.

OK, my mistake. webkit-patch upload does review=? by default.

There are two reasons I submitted it:

(1) for a few people who wanted to actually run it

(2) for vangelis, enne, or nduca, or jamesr to please give a look and give feedback, to reduce the number of iterations and delay of this patch.  Thanks in advance, I would appreciate it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497503</commentid>
    <comment_count>16</comment_count>
      <attachid>113934</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-07 15:03:12 -0800</bug_when>
    <thetext>Created attachment 113934
latest working implementation, still needs tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497525</commentid>
    <comment_count>17</comment_count>
      <attachid>113934</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-11-07 15:29:07 -0800</bug_when>
    <thetext>Comment on attachment 113934
latest working implementation, still needs tests

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

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:-586
&gt; -        setScissorToRect(layer-&gt;clipRect());

Lets put this in drawLayersToRenderSurface

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:671
&gt; +    layer-&gt;resetLayerPropertyChanged();

awkward name to me, but I&apos;m new to this code

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.h:102
&gt; +    const FloatRect&amp; scissorRect() const { return m_scissorEngine.currentScissorRect(); }

Why pass through here? It seems to me that you should have a scissorEngine() accessor and someone who wants to manipulate the scissor engine would go directly to it.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScissorEngine.cpp:69
&gt; +        renderSurface-&gt;updateScissorRect();

Very strange that this leaves control of the class in order to come back to it. :(

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScissorEngine.cpp:73
&gt; +void CCScissorEngine::computeNextScissor(CCRenderSurface* targetSurface)

Explain the algorithm here in a comment. Like calcDrawEtc does.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScissorEngine.h:38
&gt; +// Computes the region where pixels have actually changed on a surface. This region is used

rendersurface?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScissorEngine.h:42
&gt; +    CCScissorEngine();

Might have to follow the explicit constructor pattern --- c.f. CCLayerTreeHost or LayerTextureUpdater constructor.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScissorEngine.h:44
&gt; +    static void computeScissorRectForAllSurfaces(const Vector&lt;RefPtr&lt;CCLayerImpl&gt; &gt;&amp; renderSurfaceLayerList);

why is this static?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScissorEngine.h:46
&gt; +    void computeNextScissor(CCRenderSurface*);

Its a little awkward to me that this stashes the scissor onto the class. Why not just return it to the person calling?

FloatRect computeScissor(CCRenderSurface*);

Ideally, you&apos;d separate the logic of &quot;computing the scissor&quot; from &apos;updating the object for the next frame&apos;. E.g.
  m_context-&gt;setScissor(m_renderSurface-&gt;scissorEngine()-&gt;computeScissor());
  .. do stuff...
  m_renderSurface()-&gt;scissorEngine()-&gt;didDraw();

That has better testing properties.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScissorEngine.h:55
&gt; +    // these helper functions are used only within computeScissorForNewLayers.

these-&gt;These

&gt; Source/WebKit/chromium/tests/CCScissorEngineTest.cpp:37
&gt; +    // testing update rect regions

Stating the obvious, each of these should be a separate test.

Looking forward to seeing the tests be written.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497634</commentid>
    <comment_count>18</comment_count>
      <attachid>113934</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-07 17:36:08 -0800</bug_when>
    <thetext>Comment on attachment 113934
latest working implementation, still needs tests

Thanks for the feedback!  Only one question:


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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:-586

&gt; 
&gt; Lets put this in drawLayersToRenderSurface

The scissor changes for every layer individually, depending on the layer&apos;s clipRect.  Putting it in drawLayersToRenderSurface will still be on that inner for-loop where we draw each layer.   Do you still think we should do it?

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:671

&gt; 
&gt; awkward name to me, but I&apos;m new to this code

Actually this is a separate bugfix.  I&apos;ll submit it as a separate trivial patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497640</commentid>
    <comment_count>19</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-11-07 17:53:49 -0800</bug_when>
    <thetext>&gt; The scissor changes for every layer individually, depending on the layer&apos;s clipRect.  Putting it in drawLayersToRenderSurface will still be on that inner for-loop where we draw each layer.   Do you still think we should do it?

Yes. That was the architecture we agreed on in the brainstorming session, remember? You&apos;ll of course have to pass state up to the parent renderlayers but I think that complexity is ok given the clarity improvements it causes elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504039</commentid>
    <comment_count>20</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-16 10:41:16 -0800</bug_when>
    <thetext>Almost reaching the end of this scissoring journey. To do this cleanly, I have (yet again) separated this beast into smaller patches.

With any luck this is the final roadmap to scissoring.  The first two are already implemented, I just need to make them patch-presentable.

- track property changes in render surfaces (similar to what we already did with layers)
    https://bugs.webkit.org/show_bug.cgi?id=72521

- the real &quot;guts&quot; of the scissoring, computing damaged regions on surfaces
    https://bugs.webkit.org/show_bug.cgi?id=72520

- this bug will bridge Jonathan&apos;s plumbing from https://bugs.webkit.org/show_bug.cgi?id=72028 with the damage tracking, to perform the actual scissoring.

- After that, continuing to fix bugs as they arise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511294</commentid>
    <comment_count>21</comment_count>
      <attachid>117094</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-29 18:38:02 -0800</bug_when>
    <thetext>Created attachment 117094
Works pretty well, reviewers please see comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511298</commentid>
    <comment_count>22</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-29 18:44:26 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; Created an attachment (id=117094) [details]
&gt; Works pretty well, reviewers please see comments

Hi all, the latest patch is working pretty well.  Here are the important points to know:

(1) if you want to test this patch, your hardware needs to support partial swaps.  As far as I know, chromium will support partial swaps on OS X or chromium OS.  Jonathan Backer&apos;s OS X patch to support partial swaps can be found here:  http://codereview.chromium.org/8726046/

(2) I&apos;m requesting this patch (or some nearby revision) to be landed, even though all layout tests do not pass.  The feature is disabled by default, and when it is enabled it doesn&apos;t explode, only a small portion of layout tests are failing.  I would prefer to debug those in separate follow-up patches.

(3) Antoine, or anyone interested: can someone please test this on chromium OS and verify that we actually do get the performance improvements we are hoping for?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511300</commentid>
    <comment_count>23</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-29 18:46:28 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #21)
&gt; &gt; Created an attachment (id=117094) [details] [details]
&gt; &gt; Works pretty well, reviewers please see comments
&gt; 
&gt; Hi all, the latest patch is working pretty well.  Here are the important points to know:
&gt; 
&gt; (1) if you want to test this patch, your hardware needs to support partial swaps.  As far as I know, chromium will support partial swaps on OS X or chromium OS.  Jonathan Backer&apos;s OS X patch to support partial swaps can be found here:  http://codereview.chromium.org/8726046/
&gt; 
&gt; (2) I&apos;m requesting this patch (or some nearby revision) to be landed, even though all layout tests do not pass.  The feature is disabled by default, and when it is enabled it doesn&apos;t explode, only a small portion of layout tests are failing.  I would prefer to debug those in separate follow-up patches.
&gt; 
&gt; (3) Antoine, or anyone interested: can someone please test this on chromium OS and verify that we actually do get the performance improvements we are hoping for?

By the way, damage tracking does not include the HUD.  Therefore, the &quot;frame rate&quot; option that shows on the top-left of the viewport will look like it doesn&apos;t update properly - because we aren&apos;t copying those pixels =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511463</commentid>
    <comment_count>24</comment_count>
      <attachid>117094</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-30 00:27:22 -0800</bug_when>
    <thetext>Comment on attachment 117094
Works pretty well, reviewers please see comments

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

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:119
&gt; +    layerOriginTransform.translate3d(-0.5 * renderSurfaceLayer-&gt;bounds().width(), -0.5 * renderSurfaceLayer-&gt;bounds().height(), 0);

just using translate() here will save you a multiplication for each component</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511746</commentid>
    <comment_count>25</comment_count>
    <who name="Jonathan Backer">backer</who>
    <bug_when>2011-11-30 07:45:11 -0800</bug_when>
    <thetext>This is awesome. I&apos;m excited. Found a simple test case where things break (tested on OSX):

http://www.webkit.org/blog-files/3d-transforms/poster-circle.html

where the window is too short to fit the animation.

I did some testing on OSX using the patch referred to above. To be fair, this is only for the 10.5 path which does a glReadPixels readback through SHM, so scissoring should be a big win here. What I saw is that when the partial update is quite small compared to the window size scissoring helps considerably:

- launched chrome with --disable-gpu-vsync
- made the window fullscreen
- went to http://learningwebgl.com/lessons/lesson03/index.html
- looked at the time to produce 10 frames in the GPU process (clearly SHM readback bound) using chrome://tracing to average out the variance
- time with scissoring was 14.7 ms per frame
- time without scissoring was 26.5 ms per frame

When the window was smaller (the update region was comparable to the full frame) there is no difference within error --- as expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511750</commentid>
    <comment_count>26</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-11-30 07:57:22 -0800</bug_when>
    <thetext>@backer: What GPU?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511757</commentid>
    <comment_count>27</comment_count>
    <who name="Jonathan Backer">backer</who>
    <bug_when>2011-11-30 08:12:19 -0800</bug_when>
    <thetext>@nduca: Radeon HD 5770 in my mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511768</commentid>
    <comment_count>28</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-11-30 08:25:37 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; @nduca: Radeon HD 5770 in my mac.

Awesome! Great work, everyone. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511864</commentid>
    <comment_count>29</comment_count>
    <who name="Jonathan Backer">backer</who>
    <bug_when>2011-11-30 10:29:15 -0800</bug_when>
    <thetext>Did some testing on Aura with a chromeos device (Newton). Same test as with OSX similar results. Obviously fill bound:
- 22 ms per frame with scissoring on full screen window (pushing 30&quot; display)
- 47 ms per frame without scissoring

Again, when the window is the size of the update rect no difference (as expected).

This was using CompositorGL. I&apos;m having a few issues that I need to resolve with CompositorCC --- but once we have scissoring in the browser side display, I expect bigger wins.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512223</commentid>
    <comment_count>30</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-30 16:33:00 -0800</bug_when>
    <thetext>This should produce a (possibly small) performance win even without the partial swap support by setting a tighter scissor on render surface clears, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512238</commentid>
    <comment_count>31</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-11-30 16:47:10 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; This should produce a (possibly small) performance win even without the partial swap support by setting a tighter scissor on render surface clears, right?

It should be just a few additional lines of code, so I&apos;ll give it a try.

I would like to push very very hard that this patch lands by Friday, so that its in for m17.  I&apos;m working on bug fixes and will submit a new patch ASAP.  Already crushed two bugs with one fix, and Jonathan Backer is working on a patch to add support for damage from plugin layers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512250</commentid>
    <comment_count>32</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-30 16:59:31 -0800</bug_when>
    <thetext>We won&apos;t be enabling this for users by default m17, so there&apos;s no benefit to trying to squeeze it into the merge window.  Don&apos;t stress out about it.  When it&apos;s done and ready to enable for everyone we can see what milestone we are at. Before then just worry about trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512635</commentid>
    <comment_count>33</comment_count>
      <attachid>117382</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-12-01 01:59:02 -0800</bug_when>
    <thetext>Created attachment 117382
Only one remaining bug, probably in readback for layout tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512641</commentid>
    <comment_count>34</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-12-01 02:11:55 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; Created an attachment (id=117382) [details]
&gt; Only one remaining bug, probably in readback for layout tests

As best as I can, I verified that there are no regressions across all layout tests (I ran about 23k of them, before and after the patch).  There are about 15-20 failing tests, but I verified manually that they all work correctly.

The problem with those tests is in DumpRenderTree trying to capture the image.  The image that gets captured is completely blue (the clearColor).  Additionally, printfs suggest that the readback is causing an additional frame to be rendered, usually with no damage.  So it seems like there is some problem with readback in relation to damage tracking.

If someone can help me squash this tomorrow, that would be awesome.  By myself I probably cannot do it in one day.

Realistically, even though this patch has no regressions, I still feel like there will be a few bugs that come up.  I&apos;ll leave it to Antoine and James (and anyone else with an opinion) to discuss whether to turn this on by default.

Finally, James, apologies I did not yet add the partial clearing.  I&apos;ll try to add it tomorrow for the final version of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513599</commentid>
    <comment_count>35</comment_count>
      <attachid>117587</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-12-02 01:04:20 -0800</bug_when>
    <thetext>Created attachment 117587
All known issues are resolved</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513605</commentid>
    <comment_count>36</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-12-02 01:10:53 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; Created an attachment (id=117587) [details]
&gt; All known issues are resolved

Status:
  - fixed the scissor-outside-viewport problem
  - fixed a tricky perspective projection problem
  - also scissored the clear() calls (except for the root surface clear(), which we agreed to keep just for now)
  - auto-disable damage tracking when partial swap is not supported

Because of that last feature, layout tests will work the same with/without the feature enabled, because DumpRenderTree does not support partial swap.

All issues that I am aware of have been solved, but I think it needs more time to bake, so the patch has it disabled by default.

James can you please review it?  Thanks in advance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513786</commentid>
    <comment_count>37</comment_count>
      <attachid>117587</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-12-02 08:32:52 -0800</bug_when>
    <thetext>Comment on attachment 117587
All known issues are resolved

You should switch from most of the code using CCSettings::useDamageTracker to a LayerRendererCapaibilities::contextSupportsPartialSwap. That should be false if the CCSetting is false and true if and only if the actual underlying context supports swaps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513807</commentid>
    <comment_count>38</comment_count>
    <who name="Jonathan Backer">backer</who>
    <bug_when>2011-12-02 08:52:02 -0800</bug_when>
    <thetext>Addressing comment 36: I&apos;d really like to scissor the root layer clear. It did some testing on Intel graphics based ChromeOS device running Aura. When dragging around a smaller window (which is drawn with WK compositor):
- 16 ms per frame without scissoring root clear
- 10 ms per frame with scissoring root clear

I expect the same sort of wins for Pepper flash. It was just a 2 line change in LRC. Is there a reason that this is hard to do properly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513838</commentid>
    <comment_count>39</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-12-02 09:33:40 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; Addressing comment 36: I&apos;d really like to scissor the root layer clear. It did some testing on Intel graphics based ChromeOS device running Aura. When dragging around a smaller window (which is drawn with WK compositor):
&gt; - 16 ms per frame without scissoring root clear
&gt; - 10 ms per frame with scissoring root clear
&gt; 
&gt; I expect the same sort of wins for Pepper flash. It was just a 2 line change in LRC. Is there a reason that this is hard to do properly?

There should be no limtations. I had also discussed this with James and Vangelis.  For the moment we&apos;re leaving it there because it is helpful for debugging (for example, there&apos;s a scrollbar bug that shows blue because it doesn&apos;t draw itself), but eventually we should be able to remove that clear() entirely - better than just scissoring it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513913</commentid>
    <comment_count>40</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-12-02 10:41:27 -0800</bug_when>
    <thetext>&gt; ... wrt scissoring clear...
&gt; For the moment we&apos;re leaving it there because it is helpful for debugging (for example, there&apos;s a scrollbar bug that shows blue because it doesn&apos;t draw itself), 


#ifdef DEBUG then</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514067</commentid>
    <comment_count>41</comment_count>
      <attachid>117676</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-12-02 13:33:32 -0800</bug_when>
    <thetext>Created attachment 117676
feature now toggled by capability flag, root clear is also scissored

Discussed offline with Nat, as I understand we agreed to not put the #ifdef NDEBUG yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514194</commentid>
    <comment_count>42</comment_count>
      <attachid>117676</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-12-02 14:53:35 -0800</bug_when>
    <thetext>Comment on attachment 117676
feature now toggled by capability flag, root clear is also scissored

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

&gt; Source/WebCore/ChangeLog:31
&gt; +2011-12-02  Shawn Singh  &lt;shawnsingh@chromium.org&gt;
&gt; +
&gt; +        HOORAY IT IS READY TO SUBMIT
&gt; +

Duplicate entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514201</commentid>
    <comment_count>43</comment_count>
      <attachid>117676</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-12-02 14:56:58 -0800</bug_when>
    <thetext>Comment on attachment 117676
feature now toggled by capability flag, root clear is also scissored

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

&gt;&gt; Source/WebCore/ChangeLog:31
&gt;&gt; +
&gt; 
&gt; Duplicate entry.

whoops.  a leak of my local git changes.  Will re-submit a fixed patch right now =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514211</commentid>
    <comment_count>44</comment_count>
      <attachid>117702</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-12-02 15:07:22 -0800</bug_when>
    <thetext>Created attachment 117702
removed duplicate changelog entry</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514222</commentid>
    <comment_count>45</comment_count>
      <attachid>117704</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-12-02 15:20:30 -0800</bug_when>
    <thetext>Created attachment 117704
resolved merge conflict on tip of tree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514329</commentid>
    <comment_count>46</comment_count>
      <attachid>117704</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-02 18:07:05 -0800</bug_when>
    <thetext>Comment on attachment 117704
resolved merge conflict on tip of tree

Great - R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514419</commentid>
    <comment_count>47</comment_count>
      <attachid>117704</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-02 22:14:25 -0800</bug_when>
    <thetext>Comment on attachment 117704
resolved merge conflict on tip of tree

Clearing flags on attachment: 117704

Committed r101908: &lt;http://trac.webkit.org/changeset/101908&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514420</commentid>
    <comment_count>48</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-02 22:14:33 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105864</attachid>
            <date>2011-08-31 17:04:53 -0700</date>
            <delta_ts>2011-10-26 14:46:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67341-20110831170452.patch</filename>
            <type>text/plain</type>
            <size>46312</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM5OTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3NmMzNzczMDMyYjJmN2Jl
ZDVhNzRiYzdhMzgwN2RiYTdkOTZiN2UwLi4wNGFhN2Y0ODE4MWE2ZTk2NTdkZTNlZjQ1MDA2OTgz
ZGExNGI0NmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODQgQEAKKzIwMTEtMDgtMzEgIFNoYXdu
IFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgVGhpcyBwYXRjaCBp
cyBvbmx5IGZvciBwcmVsaW1pbmFyeSByZXZpZXcsIGFuZCBzaG91bGQgbmV2ZXIgYmUgY29tbWl0
dGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njcz
NDEKKworICAgICAgICBJdCBpbXBsZW1lbnRzIGEgc2Npc3NvcmluZyBvcHRpbWl6YXRpb24gZm9y
IHRoZSBjaHJvbWl1bSBjb21wb3NpdG9yLAorICAgICAgICBUaGlzIHdvcmtzIGJ5IHRyYWNraW5n
IHdoYXQgcmVwYWludCByZWN0cyBhbmQgbGF5ZXIgY2hhbmdlcyBoYXZlIG9jY3VycmVkLAorICAg
ICAgICBhbmQgdXNpbmcgdGhpcyBpbmZvcm1hdGlvbiB0byBkZXRlcm1pbmUgd2hhdCBhY3R1YWxs
eSB3aWxsIGNoYW5nZSBvbiB0aGUKKyAgICAgICAgc2NyZWVuLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIHRoYXQgd291bGQgYmUgbmVjZXNzYXJ5IHRvIGludGVn
cmF0ZQorICAgICAgICBhIHZpc3VhbGl6YXRpb24gb2YgInBhaW50IHJlY3RzIiwgImRyYXcgcmVj
dHMiLCAiZXhwb3NlZCByZWN0cyIsIGFuZCB0aGUKKyAgICAgICAgY29tcG9zaXRvciBzY2lzc29y
IHJlY3QgaXRzZWxmLiAgRXZlbnR1YWxseSB0aGlzIGZlYXR1cmUgc2hvdWxkIHByb2JhYmx5Cisg
ICAgICAgIGJlIHN1Ym1pdHRlZCBhcyBhIHNlcGFyYXRlIHBhdGNoLgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXROZWVkc0NvbW1pdEJlY2F1c2VQ
cm9wZXJ0eUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TmVl
ZHNDb21taXRCZWNhdXNlT2ZEaXJ0eVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6c2V0TmVlZHNSZWRyYXdCZWNhdXNlUHJvcGVydHlDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyQ2hyb21pdW06OnNldE5lZWRzUmVkcmF3QmVjYXVzZU9mRGlydHlSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Omluc2VydENoaWxkKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnJlbW92ZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnNldEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9t
aXVtOjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRC
b3JkZXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3JkZXJX
aWR0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0QW5jaG9yUG9pbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0QW5jaG9yUG9pbnRaKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldEJhY2tncm91bmRDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRDbGVhcnNDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyQ2hyb21pdW06OnNldEhpZGRlbik6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtOjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06
OnNldE9wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRaUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0pOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyQ2hyb21pdW06OnNldERvdWJsZVNpZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnNldEdlb21ldHJ5RmxpcHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllckNocm9taXVtOjptYXJrQXNEcmF3bik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6bG9nUGFpbnRSZWN0VG9IVUQpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnBhaW50TGF5ZXJDb250ZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVuaXRlRHJhd1JlY3RJbnRv
Q29tcG9zaXRvclNjaXNzb3IpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpjb21wdXRlQ29tcG9zaXRvclNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb21wb3NpdG9y
U2Npc3NvclJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
SGVhZHNVcERpc3BsYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlzcGxheTo6
Q0NIZWFkc1VwRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0hlYWRzVXBEaXNwbGF5Ojpl
bmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmRyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlzcGxheTo6ZHJhd0h1ZENvbnRlbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmRyYXdQYWludFJlY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmRyYXdEcmF3UmVjdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NIZWFkc1VwRGlzcGxheTo6ZHJhd0V4cG9zZWRSZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3Q29tcG9zaXRvclNjaXNzb3JSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmFkZFBhaW50UmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0hlYWRzVXBEaXNwbGF5OjphZGREcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0hlYWRzVXBEaXNwbGF5OjphZGRFeHBvc2VkUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJJbXBsOjpzYXZlU2NyZWVuU3BhY2VMYXllclJlY3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVySW1wbDo6c2V0RGlydHlSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJbXBsOjpkaXJ0eVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNldExh
eWVySGFzTW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmxheWVySGFzTW92
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6Om9sZFNjcmVlblNwYWNlTGF5ZXJS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2V0dGluZ3M6OkNDU2V0dGluZ3MpOgorCiAy
MDExLTA4LTI5ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAg
IE1hYyBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDk1NjNlYWE1N2Y1Njcz
Yzg1OTlkNGRiYWFjODhiOTJkOWM0OTQzNDguLjA2Zjk4YzBmYzFjODA2ZTY2YTU0OWU2ZGI5NGU3
NzJjYzI0NjkxMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC0xMTUsOCArMTE1LDIyIEBA
IHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3QqKQog
ewogfQogCi12b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzQ29tbWl0KCkKK3ZvaWQgTGF5ZXJD
aHJvbWl1bTo6c2V0TmVlZHNDb21taXRCZWNhdXNlUHJvcGVydHlDaGFuZ2VkKGJvb2wgbGF5ZXJI
YXNNb3ZlZCkKIHsKKyAgICBzZXROZWVkc1JlZHJhd0JlY2F1c2VQcm9wZXJ0eUNoYW5nZWQobGF5
ZXJIYXNNb3ZlZCk7CisKKyAgICAvLyBDYWxsIG5vdGlmeVN5bmNSZXF1aXJlZCgpLCB3aGljaCBm
b3Igbm9uLXJvb3QgbGF5ZXJzIHBsdW1icyB0aHJvdWdoIHRvCisgICAgLy8gY2FsbCBzZXRSb290
TGF5ZXJOZWVkc0Rpc3BsYXkoKSBvbiB0aGUgV2ViVmlldywgd2hpY2ggd2lsbCBjYXVzZSBMYXll
clJlbmRlcmVyQ2hyb21pdW0KKyAgICAvLyB0byByZW5kZXIgYSBmcmFtZS4KKyAgICAvLyBUaGlz
IGZ1bmN0aW9uIGhhcyBubyBlZmZlY3Qgb24gcm9vdCBsYXllcnMuCisgICAgaWYgKG1fb3duZXIp
CisgICAgICAgIG1fb3duZXItPm5vdGlmeVN5bmNSZXF1aXJlZCgpOworfQorCit2b2lkIExheWVy
Q2hyb21pdW06OnNldE5lZWRzQ29tbWl0QmVjYXVzZU9mRGlydHlSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdFRoYXROZWVkc1JlZHJhdykKK3sKKyAgICBzZXROZWVkc1JlZHJhd0JlY2F1c2VPZkRp
cnR5UmVjdChyZWN0VGhhdE5lZWRzUmVkcmF3KTsKKwogICAgIC8vIENhbGwgbm90aWZ5U3luY1Jl
cXVpcmVkKCksIHdoaWNoIGZvciBub24tcm9vdCBsYXllcnMgcGx1bWJzIHRocm91Z2ggdG8KICAg
ICAvLyBjYWxsIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpIG9uIHRoZSBXZWJWaWV3LCB3aGlj
aCB3aWxsIGNhdXNlIExheWVyUmVuZGVyZXJDaHJvbWl1bQogICAgIC8vIHRvIHJlbmRlciBhIGZy
YW1lLgpAQCAtMTI1LDYgKzEzOSwzNiBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzQ29t
bWl0KCkKICAgICAgICAgbV9vd25lci0+bm90aWZ5U3luY1JlcXVpcmVkKCk7CiB9CiAKK3ZvaWQg
TGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNSZWRyYXdCZWNhdXNlUHJvcGVydHlDaGFuZ2VkKGJvb2wg
bGF5ZXJIYXNNb3ZlZCkKK3sKKyAgICAvLyBUaGUgImxheWVySGFzTW92ZWQiIHBhcmFtZXRlciB3
aWxsIGJlIHBhc3NlZCB0byB0aGUgQ0NMYXllckltcGwgc28gaXQga25vd3Mgd2hldGhlciB0bwor
ICAgIC8vIHJlZHJhdyB0aGUgYXJlYSB3aGVyZSB0aGUgbGF5ZXIgd2FzIGxvY2F0ZWQgcHJldmlv
dXNseS4KKyAgICBpZiAoZHJhd3NDb250ZW50KCkpIHsKKyAgICAgICAgbV9sYXllckhhc01vdmVk
U2luY2VMYXN0UmVkcmF3ID0gbGF5ZXJIYXNNb3ZlZDsKKyAgICAgICAgbV9yZWN0VGhhdE5lZWRz
UmVkcmF3ID0gRmxvYXRSZWN0KDAsIDAsIG1fYm91bmRzLndpZHRoKCksIG1fYm91bmRzLmhlaWdo
dCgpKTsKKyAgICB9CisKKyAgICAvLyBuZWVkIHRvIHJlY3Vyc2l2ZWx5IG1hcmsgY2hpbGRyZW4g
dG8gYmUgcmUtZHJhd24gYXMgd2VsbC4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hp
bGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgIG1fY2hpbGRyZW5baV0tPnNldE5lZWRzUmVkcmF3
QmVjYXVzZVByb3BlcnR5Q2hhbmdlZChsYXllckhhc01vdmVkKTsKK30KKwordm9pZCBMYXllckNo
cm9taXVtOjpzZXROZWVkc1JlZHJhd0JlY2F1c2VPZkRpcnR5UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3RUaGF0TmVlZHNSZWRyYXcpCit7CisgICAgaWYgKHJlY3RUaGF0TmVlZHNSZWRyYXcuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZHJhd3NDb250ZW50KCkpCisgICAg
ICAgIG1fcmVjdFRoYXROZWVkc1JlZHJhdy51bml0ZUlmTm9uWmVybyhyZWN0VGhhdE5lZWRzUmVk
cmF3KTsKKworICAgIC8vIFRPRE8oc2hhd25zaW5naCkgd2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0
aGUgZm9sbG93aW5nIGZvci1sb29wLCBiZWNhdXNlIFdlYkNvcmUgc2hvdWxkIGJlIG1hcmtpbmcK
KyAgICAvLyAgICAgICAgICAgICAgICAgIGFsbCBsYXllcnMgd2l0aCB0aGUgZGlydHkgcmVjdCBh
bHJlYWR5LgorICAgIC8vIGZvciAoc2l6ZV90IGk9MDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyAr
K2kpIHsKKyAgICAvLyAgICAgLy8gbWFwcGVkUmVjdCB3b3VsZCBwcm9iYWJseSBiZSA9IHN1Ymxh
eWVyVHJhbnNmb3JtLm1hcFJlY3QocmVjdFRoYXROZWVkc1JlZHJhdykgPz8KKyAgICAvLyAgICAg
bV9jaGlsZHJlbltpXS0+c2V0TmVlZHNSZWRyYXdCZWNhdXNlT2ZEaXJ0eVJlY3QobWFwcGVkUmVj
dCk7CisgICAgLy8gfQorfQorCiB2b2lkIExheWVyQ2hyb21pdW06OnNldFBhcmVudChMYXllckNo
cm9taXVtKiBsYXllcikKIHsKICAgICBBU1NFUlQoIWxheWVyIHx8ICFsYXllci0+aGFzQW5jZXN0
b3IodGhpcykpOwpAQCAtMTUxLDcgKzE5NSw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6aW5zZXJ0
Q2hpbGQoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCwgc2l6ZV90IGluZGV4KQogICAg
IGNoaWxkLT5yZW1vdmVGcm9tUGFyZW50KCk7CiAgICAgY2hpbGQtPnNldFBhcmVudCh0aGlzKTsK
ICAgICBtX2NoaWxkcmVuLmluc2VydChpbmRleCwgY2hpbGQpOwotICAgIHNldE5lZWRzQ29tbWl0
KCk7CisgICAgc2V0TmVlZHNDb21taXRCZWNhdXNlUHJvcGVydHlDaGFuZ2VkKGZhbHNlKTsKIH0K
IAogdm9pZCBMYXllckNocm9taXVtOjpyZW1vdmVGcm9tUGFyZW50KCkKQEAgLTE2OCw3ICsyMTIs
MTIgQEAgdm9pZCBMYXllckNocm9taXVtOjpyZW1vdmVDaGlsZChMYXllckNocm9taXVtKiBjaGls
ZCkKIAogICAgIGNoaWxkLT5zZXRQYXJlbnQoMCk7CiAgICAgbV9jaGlsZHJlbi5yZW1vdmUoZm91
bmRJbmRleCk7Ci0gICAgc2V0TmVlZHNDb21taXQoKTsKKworICAgIC8vIFRPRE8oc2hhd25zaW5n
aCkgd2UgbmVlZCB0byByZWN1cnNpdmVseSB0cmFjZSBhbGwgY2hpbGRyZW4gaW4gdGhlIHN1Yi10
cmVlIHRoYXQgaXMgYmVpbmcgcmVtb3ZlZCwKKyAgICAvLyAgICAgICAgICAgICAgICAgIHNvIHRo
YXQgd2UgY2FuIG1hcmsgdGhvc2UgYXJlYXMgYXMgIm5ld2x5IGV4cG9zZWQiLiBTaW5jZSB0aGVy
ZSB3b3VsZCBiZQorICAgIC8vICAgICAgICAgICAgICAgICAgbm8gb3RoZXIgcGVyc2lzdGVudCBw
bGFjZSB0byBzdG9yZSB0aGF0ICJuZXdseSBleHBvc2VkIHJlY3QiIGluZm9ybWF0aW9uLAorICAg
IC8vICAgICAgICAgICAgICAgICAgd2Ugd291bGQgbmVlZCB0byBzdG9yZSBpdCAodW5pdGUpIGlu
IHRoaXMgcGFyZW50IGxheWVyJ3MgbV9vbGRTY3JlZW5TcGFjZURpcnR5UmVjdC4KKyAgICBzZXRO
ZWVkc0NvbW1pdEJlY2F1c2VQcm9wZXJ0eUNoYW5nZWQodHJ1ZSk7CiB9CiAKIHZvaWQgTGF5ZXJD
aHJvbWl1bTo6cmVwbGFjZUNoaWxkKExheWVyQ2hyb21pdW0qIHJlZmVyZW5jZSwgUGFzc1JlZlB0
cjxMYXllckNocm9taXVtPiBuZXdMYXllcikKQEAgLTIxNCw3ICsyNjMsNyBAQCB2b2lkIExheWVy
Q2hyb21pdW06OnNldEJvdW5kcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgIGlmIChmaXJzdFJl
c2l6ZSkKICAgICAgICAgc2V0TmVlZHNEaXNwbGF5KEZsb2F0UmVjdCgwLCAwLCBib3VuZHMoKS53
aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSkpOwogICAgIGVsc2UKLSAgICAgICAgc2V0TmVlZHND
b21taXQoKTsKKyAgICAgICAgc2V0TmVlZHNDb21taXRCZWNhdXNlUHJvcGVydHlDaGFuZ2VkKHRy
dWUpOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKQEAgLTI2NiwyMCArMzE1LDI4IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmFtZShj
b25zdCBTdHJpbmcmIG5hbWUpCiB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheShj
b25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCkKIHsKICAgICAvLyBTaW1wbHkgbWFyayB0aGUgY29u
dGVudHMgYXMgZGlydHkuIEZvciBub24tcm9vdCBsYXllcnMsIHRoZSBjYWxsIHRvCi0gICAgLy8g
c2V0TmVlZHNDb21taXQgd2lsbCBzY2hlZHVsZSBhIGZyZXNoIGNvbXBvc2l0aW5nIHBhc3MuCi0g
ICAgLy8gRm9yIHRoZSByb290IGxheWVyLCBzZXROZWVkc0NvbW1pdCBoYXMgbm8gZWZmZWN0Lgot
ICAgIG1fY29udGVudHNEaXJ0eSA9IHRydWU7CisgICAgLy8gc2V0TmVlZHNDb21taXRCZWNhdXNl
T2ZEaXJ0eVJlY3Qgd2lsbCBzY2hlZHVsZSBhIGZyZXNoIGNvbXBvc2l0aW5nIHBhc3MuCiAKLSAg
ICBtX2RpcnR5UmVjdC51bml0ZShkaXJ0eVJlY3QpOwotICAgIHNldE5lZWRzQ29tbWl0KCk7Cisg
ICAgLy8gRm9yIHRoZSByb290IGxheWVyLCBzZXROZWVkc0NvbW1pdEJlY2F1c2VPZkRpcnR5UmVj
dCBoYXMgbm8gZWZmZWN0LgorICAgIC8vIFRPRE8oc2hhd25zaW5naCkgdGhpcyBjb21tZW50IGFi
b3ZlIGlzIHByb2JhYmx5IHdyb25nIG5vdywgYmVjYXVzZSBhZGRlZCB0aGUgc2V0TmVlZHNSZWRy
YXcgaG9va3MgYXMgd2VsbC4KKyAgICBtX2NvbnRlbnRzRGlydHkgPSB0cnVlOworICAgIG1fZGly
dHlSZWN0LnVuaXRlSWZOb25aZXJvKGRpcnR5UmVjdCk7CisgICAgc2V0TmVlZHNDb21taXRCZWNh
dXNlT2ZEaXJ0eVJlY3QoZGlydHlSZWN0KTsKIH0KIAogdm9pZCBMYXllckNocm9taXVtOjpzZXRO
ZWVkc0Rpc3BsYXkoKQogeworICAgIGlmIChib3VuZHMoKS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fY29udGVudHNEaXJ0eSA9IHRydWU7CiAgICAgbV9kaXJ0eVJlY3Quc2V0
TG9jYXRpb24oRmxvYXRQb2ludCgpKTsKICAgICBtX2RpcnR5UmVjdC5zZXRTaXplKGJvdW5kcygp
KTsKLSAgICBtX2NvbnRlbnRzRGlydHkgPSB0cnVlOwotICAgIHNldE5lZWRzQ29tbWl0KCk7CisK
KyAgICAvLyBUT0RPKHNoYXduc2luZ2gpLCBpcyAiZmFsc2UiIE9LIGhlcmU/IFNwZWNpZmljYWxs
eSwgaXMgdGhlcmUgYW55IGNhc2Ugd2hlcmUgdGhpcyBpcworICAgIC8vICAgY2FsbGVkIHRoYXQg
dGhlIGxheWVyIG1heSBoYXZlIG1vdmVkL3Jlc2l6ZWQvZXRjLCBidXQgaXQgd2FzIG5vdCBpbmRp
Y2F0ZWQgYnkgb3RoZXIKKyAgICAvLyAgIHNldE5lZWRzQ29tbWl0QmVjYXVzZVByb3BlcnR5Q2hh
bmdlZCh0cnVlKSBjYWxscyBpbnNpZGUgTGF5ZXJDaHJvbWl1bT8KKyAgICBzZXROZWVkc0NvbW1p
dEJlY2F1c2VQcm9wZXJ0eUNoYW5nZWQoZmFsc2UpOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06
OnJlc2V0TmVlZHNEaXNwbGF5KCkKQEAgLTMyOSw2ICszODYsMTMgQEAgdm9pZCBMYXllckNocm9t
aXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICBsYXllci0+c2V0
U3VibGF5ZXJUcmFuc2Zvcm0obV9zdWJsYXllclRyYW5zZm9ybSk7CiAgICAgbGF5ZXItPnNldFRy
YW5zZm9ybShtX3RyYW5zZm9ybSk7CiAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QobV92
aXNpYmxlTGF5ZXJSZWN0KTsKKyAgICBsYXllci0+c2V0TGF5ZXJIYXNNb3ZlZChtX2xheWVySGFz
TW92ZWRTaW5jZUxhc3RSZWRyYXcpOworICAgIGxheWVyLT5zZXREaXJ0eVJlY3QobV9yZWN0VGhh
dE5lZWRzUmVkcmF3KTsKKworICAgIC8vIFRPRE8oc2hhd25zaW5naCkgInB1c2hQcm9wZXJ0aWVz
VG8iIGZlZWxzIGxpa2UgaXQgc2hvdWxkIGlkZWFsbHkgYmUKKyAgICAvLyBhIGNvbnN0IGZ1bmN0
aW9uIHdpdGhvdXQgc2lkZSBlZmZlY3RzLiBIb3dldmVyLCBpdCBzZWVtZWQgbGlrZQorICAgIC8v
IHRoZSBtb3N0IGNvcnJlY3QgcGxhY2UgdG8gcHV0IHRoaXMuLi4KKyAgICBtYXJrQXNEcmF3bigp
OwogCiAgICAgaWYgKG1hc2tMYXllcigpKQogICAgICAgICBtYXNrTGF5ZXIoKS0+cHVzaFByb3Bl
cnRpZXNUbyhsYXllci0+bWFza0xheWVyKCkpOwpAQCAtNDE0LDEzICs0NzgsMTMgQEAgUGFzc1Jl
ZlB0cjxDQ0xheWVySW1wbD4gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQogdm9p
ZCBMYXllckNocm9taXVtOjpzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7CiAg
ICAgbV9kZWJ1Z0JvcmRlckNvbG9yID0gY29sb3I7Ci0gICAgc2V0TmVlZHNDb21taXQoKTsKKyAg
ICBzZXROZWVkc0NvbW1pdEJlY2F1c2VQcm9wZXJ0eUNoYW5nZWQoZmFsc2UpOwogfQogCiB2b2lk
IExheWVyQ2hyb21pdW06OnNldEJvcmRlcldpZHRoKGZsb2F0IHdpZHRoKQogewogICAgIG1fZGVi
dWdCb3JkZXJXaWR0aCA9IHdpZHRoOwotICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgc2V0TmVl
ZHNDb21taXRCZWNhdXNlUHJvcGVydHlDaGFuZ2VkKHRydWUpOwogfQogCiBMYXllclJlbmRlcmVy
Q2hyb21pdW0qIExheWVyQ2hyb21pdW06OmxheWVyUmVuZGVyZXIoKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5oCmluZGV4IDU4ZWQxYjA0MDk2ZGFjM2UxYmY2ZTc3OTZhZjU5MDZiODM4OGNjODUuLmQy
MWNiNGQxZTQ0MzJhMzJjMmQ0ZDRiMDM1NjY0M2YzYjI2MzRiM2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmgKQEAgLTc2LDI2ICs3NiwyNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDaGlsZHJlbihjb25z
dCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mKTsKICAgICBjb25zdCBWZWN0b3I8UmVm
UHRyPExheWVyQ2hyb21pdW0+ID4mIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJl
bjsgfQogCi0gICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQ
b2ludCkgeyBtX2FuY2hvclBvaW50ID0gYW5jaG9yUG9pbnQ7IHNldE5lZWRzQ29tbWl0KCk7IH0K
KyAgICB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50KSB7
IG1fYW5jaG9yUG9pbnQgPSBhbmNob3JQb2ludDsgc2V0TmVlZHNDb21taXRCZWNhdXNlUHJvcGVy
dHlDaGFuZ2VkKHRydWUpOyB9CiAgICAgRmxvYXRQb2ludCBhbmNob3JQb2ludCgpIGNvbnN0IHsg
cmV0dXJuIG1fYW5jaG9yUG9pbnQ7IH0KIAotICAgIHZvaWQgc2V0QW5jaG9yUG9pbnRaKGZsb2F0
IGFuY2hvclBvaW50WikgeyBtX2FuY2hvclBvaW50WiA9IGFuY2hvclBvaW50Wjsgc2V0TmVlZHND
b21taXQoKTsgfQorICAgIHZvaWQgc2V0QW5jaG9yUG9pbnRaKGZsb2F0IGFuY2hvclBvaW50Wikg
eyBtX2FuY2hvclBvaW50WiA9IGFuY2hvclBvaW50Wjsgc2V0TmVlZHNDb21taXRCZWNhdXNlUHJv
cGVydHlDaGFuZ2VkKHRydWUpOyB9CiAgICAgZmxvYXQgYW5jaG9yUG9pbnRaKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbmNob3JQb2ludFo7IH0KIAotICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNv
bnN0IENvbG9yJiBjb2xvcikgeyBtX2JhY2tncm91bmRDb2xvciA9IGNvbG9yOyBzZXROZWVkc0Nv
bW1pdCgpOyB9CisgICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9y
KSB7IG1fYmFja2dyb3VuZENvbG9yID0gY29sb3I7IHNldE5lZWRzQ29tbWl0QmVjYXVzZVByb3Bl
cnR5Q2hhbmdlZChmYWxzZSk7IH0KICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQogCiAgICAgdm9pZCBzZXRCb3VuZHMoY29uc3Qg
SW50U2l6ZSYpOwogICAgIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1f
Ym91bmRzOyB9CiAgICAgdmlydHVhbCBJbnRTaXplIGNvbnRlbnRCb3VuZHMoKSBjb25zdCB7IHJl
dHVybiBib3VuZHMoKTsgfQogCi0gICAgdm9pZCBzZXRDbGVhcnNDb250ZXh0KGJvb2wgY2xlYXJz
KSB7IG1fY2xlYXJzQ29udGV4dCA9IGNsZWFyczsgc2V0TmVlZHNDb21taXQoKTsgfQorICAgIHZv
aWQgc2V0Q2xlYXJzQ29udGV4dChib29sIGNsZWFycykgeyBtX2NsZWFyc0NvbnRleHQgPSBjbGVh
cnM7IHNldE5lZWRzQ29tbWl0QmVjYXVzZVByb3BlcnR5Q2hhbmdlZCh0cnVlKTsgfQogICAgIGJv
b2wgY2xlYXJzQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xlYXJzQ29udGV4dDsgfQogCiAg
ICAgdm9pZCBzZXRGcmFtZShjb25zdCBGbG9hdFJlY3QmKTsKICAgICBGbG9hdFJlY3QgZnJhbWUo
KSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CiAKLSAgICB2b2lkIHNldEhpZGRlbihib29sIGhp
ZGRlbikgeyBtX2hpZGRlbiA9IGhpZGRlbjsgc2V0TmVlZHNDb21taXQoKTsgfQorICAgIHZvaWQg
c2V0SGlkZGVuKGJvb2wgaGlkZGVuKSB7IG1faGlkZGVuID0gaGlkZGVuOyBzZXROZWVkc0NvbW1p
dEJlY2F1c2VQcm9wZXJ0eUNoYW5nZWQodHJ1ZSk7IH0KICAgICBib29sIGlzSGlkZGVuKCkgY29u
c3QgeyByZXR1cm4gbV9oaWRkZW47IH0KIAogICAgIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29s
IG1hc2tzVG9Cb3VuZHMpIHsgbV9tYXNrc1RvQm91bmRzID0gbWFza3NUb0JvdW5kczsgfQpAQCAt
MTE0LDIyICsxMTQsMjIgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlPbkJv
dW5kc0NoYW5nZShib29sIG5lZWRzRGlzcGxheSkgeyBtX25lZWRzRGlzcGxheU9uQm91bmRzQ2hh
bmdlID0gbmVlZHNEaXNwbGF5OyB9CiAKLSAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0
eSkgeyBtX29wYWNpdHkgPSBvcGFjaXR5OyBzZXROZWVkc0NvbW1pdCgpOyB9CisgICAgdm9pZCBz
ZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgc2V0TmVlZHND
b21taXRCZWNhdXNlUHJvcGVydHlDaGFuZ2VkKGZhbHNlKTsgfQogICAgIGZsb2F0IG9wYWNpdHko
KSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KIAotICAgIHZvaWQgc2V0T3BhcXVlKGJvb2wg
b3BhcXVlKSB7IG1fb3BhcXVlID0gb3BhcXVlOyBzZXROZWVkc0NvbW1pdCgpOyB9CisgICAgdm9p
ZCBzZXRPcGFxdWUoYm9vbCBvcGFxdWUpIHsgbV9vcGFxdWUgPSBvcGFxdWU7IHNldE5lZWRzQ29t
bWl0QmVjYXVzZVByb3BlcnR5Q2hhbmdlZChmYWxzZSk7IH0KICAgICBib29sIG9wYXF1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CiAKLSAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmIHBvc2l0aW9uKSB7IG1fcG9zaXRpb24gPSBwb3NpdGlvbjsgIHNldE5lZWRzQ29t
bWl0KCk7IH0KKyAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9u
KSB7IG1fcG9zaXRpb24gPSBwb3NpdGlvbjsgIHNldE5lZWRzQ29tbWl0QmVjYXVzZVByb3BlcnR5
Q2hhbmdlZCh0cnVlKTsgfQogICAgIEZsb2F0UG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3Bvc2l0aW9uOyB9CiAKLSAgICB2b2lkIHNldFpQb3NpdGlvbihmbG9hdCB6UG9zaXRpb24p
IHsgbV96UG9zaXRpb24gPSB6UG9zaXRpb247IHNldE5lZWRzQ29tbWl0KCk7IH0KKyAgICB2b2lk
IHNldFpQb3NpdGlvbihmbG9hdCB6UG9zaXRpb24pIHsgbV96UG9zaXRpb24gPSB6UG9zaXRpb247
IHNldE5lZWRzQ29tbWl0QmVjYXVzZVByb3BlcnR5Q2hhbmdlZCh0cnVlKTsgfQogICAgIGZsb2F0
IHpQb3NpdGlvbigpIGNvbnN0IHsgIHJldHVybiBtX3pQb3NpdGlvbjsgfQogCi0gICAgdm9pZCBz
ZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3Jt
KSB7IG1fc3VibGF5ZXJUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07IHNldE5lZWRzQ29tbWl0KCk7IH0K
KyAgICB2b2lkIHNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0cmFuc2Zvcm0pIHsgbV9zdWJsYXllclRyYW5zZm9ybSA9IHRyYW5zZm9ybTsgc2V0TmVlZHND
b21taXRCZWNhdXNlUHJvcGVydHlDaGFuZ2VkKGZhbHNlKTsgfQogICAgIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VibGF5
ZXJUcmFuc2Zvcm07IH0KIAotICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiB0cmFuc2Zvcm0pIHsgbV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IHNldE5lZWRz
Q29tbWl0KCk7IH0KKyAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtKSB7IG1fdHJhbnNmb3JtID0gdHJhbnNmb3JtOyBzZXROZWVkc0NvbW1p
dEJlY2F1c2VQcm9wZXJ0eUNoYW5nZWQodHJ1ZSk7IH0KICAgICBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KIAogICAg
IGNvbnN0IEludFJlY3QmIHZpc2libGVMYXllclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Zpc2li
bGVMYXllclJlY3Q7IH0KQEAgLTEzOSwxMCArMTM5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikgeyBtX3Njcm9s
bFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247IH0KIAogICAgIGJvb2wgZG91YmxlU2lkZWQoKSBj
b25zdCB7IHJldHVybiBtX2RvdWJsZVNpZGVkOyB9Ci0gICAgdm9pZCBzZXREb3VibGVTaWRlZChi
b29sIGRvdWJsZVNpZGVkKSB7IG1fZG91YmxlU2lkZWQgPSBkb3VibGVTaWRlZDsgc2V0TmVlZHND
b21taXQoKTsgfQorICAgIHZvaWQgc2V0RG91YmxlU2lkZWQoYm9vbCBkb3VibGVTaWRlZCkgeyBt
X2RvdWJsZVNpZGVkID0gZG91YmxlU2lkZWQ7IHNldE5lZWRzQ29tbWl0QmVjYXVzZVByb3BlcnR5
Q2hhbmdlZCh0cnVlKTsgfQogCiAgICAgLy8gRklYTUU6IFRoaXMgc2V0dGluZyBpcyBjdXJyZW50
bHkgaWdub3JlZC4KLSAgICB2b2lkIHNldEdlb21ldHJ5RmxpcHBlZChib29sIGZsaXBwZWQpIHsg
bV9nZW9tZXRyeUZsaXBwZWQgPSBmbGlwcGVkOyBzZXROZWVkc0NvbW1pdCgpOyB9CisgICAgdm9p
ZCBzZXRHZW9tZXRyeUZsaXBwZWQoYm9vbCBmbGlwcGVkKSB7IG1fZ2VvbWV0cnlGbGlwcGVkID0g
ZmxpcHBlZDsgc2V0TmVlZHNDb21taXRCZWNhdXNlUHJvcGVydHlDaGFuZ2VkKHRydWUpOyB9CiAg
ICAgYm9vbCBnZW9tZXRyeUZsaXBwZWQoKSBjb25zdCB7IHJldHVybiBtX2dlb21ldHJ5RmxpcHBl
ZDsgfQogCiAgICAgYm9vbCBwcmVzZXJ2ZXMzRCgpIHsgcmV0dXJuIG1fb3duZXIgJiYgbV9vd25l
ci0+cHJlc2VydmVzM0QoKTsgfQpAQCAtMjM1LDYgKzIzNSwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQp
IGNvbnN0OwogCiAgICAgRmxvYXRSZWN0IG1fZGlydHlSZWN0OworICAgIEZsb2F0UmVjdCBtX3Jl
Y3RUaGF0TmVlZHNSZWRyYXc7CisKKyAgICAvLyBGSVhNRTogc29tZSBsYXllciB0eXBlcyBzZWVt
IHRvIHVzZSB0aGlzIGJvb2wgbV9jb250ZW50c0RpcnR5LCB3aGlsZSBtYW55IG90aGVyIHBsYWNl
cyBpbiBjb2RlIGNoZWNrIGlmIG1fZGlydHlSZWN0LmlzRW1wdHkoKS4KKyAgICAvLyAgICAgICAg
ZXZlbiB3b3JzZSwgaXQgc2VlbXMgbGlrZSB0aG9zZSBwbGFjZXMgaW4gY29kZSBvbmx5IHVzZSBv
bmUgb3IgdGhlIG90aGVyLCBub3QgYm90aC4gdGhpcyBzZWVtcyB2ZXJ5IHByb25lIHRvIGJ1Z3Mu
CisgICAgLy8gICAgICAgIHBlcmhhcHMgd2Ugc2hvdWxkIHJlbW92ZSB0aGlzIHZhcmlhYmxlLCBh
bmQgcmVwbGFjZSBpdCB3aXRoIGEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIG1fZGly
dHlSZWN0LmlzRW1wdHkoKQogICAgIGJvb2wgbV9jb250ZW50c0RpcnR5OwogCiAgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IG1fbWFza0xheWVyOwpAQCAtMjQ2LDcgKzI1MSwxNCBAQCBwcm90ZWN0
ZWQ6CiAgICAgaW50IG1fbGF5ZXJJZDsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHNldE5lZWRzQ29t
bWl0KCk7CisKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBvdmVybG9hZGVkIHdpdGgg
dGhlIHNhbWUgbmFtZSBiZWNhdXNlIHRoZXkgaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQgc2VtYW50
aWNzLgorICAgIHZvaWQgc2V0TmVlZHNDb21taXRCZWNhdXNlUHJvcGVydHlDaGFuZ2VkKGJvb2wg
bGF5ZXJIYXNNb3ZlZCk7CisgICAgdm9pZCBzZXROZWVkc0NvbW1pdEJlY2F1c2VPZkRpcnR5UmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3RUaGF0TmVlZHNSZWRyYXcpOworICAgIHZvaWQgc2V0TmVl
ZHNSZWRyYXdCZWNhdXNlUHJvcGVydHlDaGFuZ2VkKGJvb2wgbGF5ZXJIYXNNb3ZlZCk7CisgICAg
dm9pZCBzZXROZWVkc1JlZHJhd0JlY2F1c2VPZkRpcnR5UmVjdChjb25zdCBGbG9hdFJlY3QmIG5l
d2x5UGFpbnRlZFJlY3QpOworICAgIHZvaWQgbWFya0FzRHJhd24oKSB7IG1fbGF5ZXJIYXNNb3Zl
ZFNpbmNlTGFzdFJlZHJhdyA9IGZhbHNlOyBtX3JlY3RUaGF0TmVlZHNSZWRyYXcgPSBGbG9hdFJl
Y3QoKTsgfQorCiAKICAgICB2b2lkIHNldFBhcmVudChMYXllckNocm9taXVtKik7CiAgICAgYm9v
bCBoYXNBbmNlc3RvcihMYXllckNocm9taXVtKikgY29uc3Q7CkBAIC0yODksNiArMzAxLDExIEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX3VzZXNMYXllclNjaXNzb3I7CiAgICAgYm9vbCBtX2lzUm9v
dExheWVyOwogCisgICAgLy8gVE9ETyhzaGF3bnNpbmdoKSB0aGlzIGNvZGUgaXMgYXNzdW1pbmcg
dGhhdCByZWRyYXdpbmcgd2lsbCBzdGlsbCBhbHdheXMgZ28gdGhyb3VnaAorICAgIC8vICAgICAg
ICAgICAgICAgICAgdGhlIExheWVyQ2hyb21pdW0sIGV2ZW4gaWYgaXQgZG9lcyBub3QgcmVwYWlu
dCB0aGluZ3MuIElzIHRoaXMKKyAgICAvLyAgICAgICAgICAgICAgICAgIHZhbGlkLCBhdCBsZWFz
dCBmb3Igbm93PworICAgIGJvb2wgbV9sYXllckhhc01vdmVkU2luY2VMYXN0UmVkcmF3OworCiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07CiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbV9zdWJsYXllclRyYW5zZm9ybTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAKaW5kZXggNzBhMDVkY2EwOTAxMGE2Y2I1OWZjZjViMWRhZTMxMDJkOGY2ZGRmZC4u
Mzc5OGE2ZmIwNTBjMmRhNGE3MWRjMzhiMDA5MmIwZTE2ZWQ2Yjc2MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC02NDksMTAgKzY0OSw0MCBAQCBzdGF0aWMgSW50
UmVjdCBjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZh
Y2VSZWN0LCBjb25zdAogICAgIHJldHVybiBjYWxjdWxhdGVWaXNpYmxlUmVjdCh0YXJnZXRTdXJm
YWNlUmVjdCwgbGF5ZXJCb3VuZFJlY3QsIHRyYW5zZm9ybSk7CiB9CiAKLXN0YXRpYyB2b2lkIHBh
aW50Q29udGVudHNJZkRpcnR5KExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBJbnRSZWN0JiB2
aXNpYmxlTGF5ZXJSZWN0KQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmxvZ1BhaW50UmVj
dFRvSFVEKExheWVyQ2hyb21pdW0qIGxheWVyKSBjb25zdAoreworICAgIC8vIFRPRE8oc2hhd25z
aW5naCkgdGhpcyBjb2RlIHVzZXMgdGhlIGFjdHVhbCByZWN0IHRoYXQgZ290IG1hcmtlZCBkaXJ0
eSwgbm90IHdoYXQncyBnb2luZyB0byBiZSByZS1wYWludGVkLgorICAgIC8vIHNob3VsZCBpdCBi
ZSB1c2luZyB0aGUgdmlzaWJsZUxheWVyUmVjdCBpbnN0ZWFkPyBGb3Igbm93LCB0aGUgZGlydHkg
cmVjdCBpcyBtb3JlIGNvbnNlcnZhdGl2ZSwKKyAgICAvLyBhbmQgaXRzIG9ubHkgZm9yIHZpc3Vh
bGl6YXRpb24gYW55d2F5LgorICAgIGlmICghbGF5ZXItPmRpcnR5UmVjdCgpLmlzRW1wdHkoKSkg
eworICAgICAgICBpZiAobGF5ZXItPmlzUm9vdExheWVyKCkpIHsKKyAgICAgICAgICAgIEZsb2F0
UmVjdCBuZXh0UmVjdFRvUmVwYWludCA9IGxheWVyLT5kaXJ0eVJlY3QoKTsKKyAgICAgICAgICAg
IC8vIFRPRE8oc2hhd25zaW5naCkgdGhpcyBzY3JvbGwgZml4IGlzIGEgaGFjayBmb3Igbm93LiBX
aHkgZG9lcyB0aGUgcm9vdCBsYXllcgorICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICB0
cmVhdCBzY3JvbGxpbmcgZGlmZmVyZW50bHkgdGhhbiBvdGhlciBsYXllcnM/CisgICAgICAgICAg
ICBuZXh0UmVjdFRvUmVwYWludC5tb3ZlKC1sYXllci0+c2Nyb2xsUG9zaXRpb24oKS54KCksIC1s
YXllci0+c2Nyb2xsUG9zaXRpb24oKS55KCkgKTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCB0cmFu
c2Zvcm1lZFJlY3QgPSBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tYXBSZWN0KG5leHRS
ZWN0VG9SZXBhaW50KTsKKyAgICAgICAgICAgIG1faGVhZHNVcERpc3BsYXktPmFkZFBhaW50UmVj
dCh0cmFuc2Zvcm1lZFJlY3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRmxvYXRS
ZWN0IG5leHRSZWN0VG9SZXBhaW50ID0gbGF5ZXItPmRpcnR5UmVjdCgpOworICAgICAgICAgICAg
RmxvYXRSZWN0IHRyYW5zZm9ybWVkUmVjdCA9IGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgp
Lm1hcFJlY3QobmV4dFJlY3RUb1JlcGFpbnQpOworICAgICAgICAgICAgbV9oZWFkc1VwRGlzcGxh
eS0+YWRkUGFpbnRSZWN0KHRyYW5zZm9ybWVkUmVjdCk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
Ky8vIFRPRE8oc2hhd25zaW5naCkgIGlzIHRoZXJlIGFueSBzdHJvbmcgcmVhc29uIHRoaXMgZnVu
Y3Rpb24gd2FzIGEgc3RhdGljIGZ1bmN0aW9uIG91dHNpZGUgb2YgTGF5ZXJSZW5kZXJlckNocm9t
aXVtPworLy8gVGhlIGRpcnR5IHJlY3QgdmlzdWFsaXphdGlvbiB3b3VsZCByZXF1aXJlIGl0IHRv
IGJlIGEgbWVtYmVyIGZ1bmN0aW9uLCB0byBhY2Nlc3MgdGhlIG1faGVhZHNVcERpc3BsYXkuCit2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoTGF5ZXJDaHJv
bWl1bSogbGF5ZXIsIGNvbnN0IEludFJlY3QmIHZpc2libGVMYXllclJlY3QpIGNvbnN0CiB7CiAg
ICAgaWYgKGxheWVyLT5kcmF3c0NvbnRlbnQoKSkgewogICAgICAgICBsYXllci0+c2V0VmlzaWJs
ZUxheWVyUmVjdCh2aXNpYmxlTGF5ZXJSZWN0KTsKKworICAgICAgICBpZiAoc2V0dGluZ3MoKS5z
aG93UGFpbnRSZWN0cykKKyAgICAgICAgICAgIGxvZ1BhaW50UmVjdFRvSFVEKGxheWVyKTsKKwor
ICAgICAgICAvLyBUT0RPKHNoYXduc2luZ2gpOiBldmVudHVhbGx5IHdlIHNob3VsZCBjb25zaWRl
ciBhbGxvd2luZyBpbmRpdmlkdWFsIGxheWVyIHR5cGVzIHRvIGluZGljYXRlCisgICAgICAgIC8v
ICAgICAgICAgICAgICAgICAgICJ3aGF0IHdhcyBhY3R1YWxseSByZS1wYWludGVkIiwgd2hpY2gg
bWF5IGJlIGRpZmZlcmVudCB0aGFuICJ3aGF0IHdhcworICAgICAgICAvLyAgICAgICAgICAgICAg
ICAgICBtYXJrZWQgYXMgZGlydHkiLiBUaGlzIHdvdWxkIGJlIGVzcGVjaWFsbHkgaGVscGZ1bCBm
b3IgY2FudmFzIGxheWVyLgogICAgICAgICBsYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsK
ICAgICB9CiB9CkBAIC03MDcsOCArNzM3LDggQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXkKICAg
ICAgICAgICAgIGlmIChsYXllci0+dXNlc0xheWVyU2Npc3NvcigpKQogICAgICAgICAgICAgICAg
IHRhcmdldFN1cmZhY2VSZWN0LmludGVyc2VjdChsYXllci0+c2Npc3NvclJlY3QoKSk7CiAgICAg
ICAgICAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3QgPSBjYWxjdWxhdGVWaXNpYmxlTGF5ZXJS
ZWN0KHRhcmdldFN1cmZhY2VSZWN0LCBsYXllci0+Ym91bmRzKCksIGxheWVyLT5jb250ZW50Qm91
bmRzKCksIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOwotCiAgICAgICAgICAgICB2aXNpYmxlTGF5
ZXJSZWN0Lm1vdmUodG9TaXplKGxheWVyLT5zY3JvbGxQb3NpdGlvbigpKSk7CisKICAgICAgICAg
ICAgIHBhaW50Q29udGVudHNJZkRpcnR5KGxheWVyLCB2aXNpYmxlTGF5ZXJSZWN0KTsKIAogICAg
ICAgICAgICAgaWYgKExheWVyQ2hyb21pdW0qIG1hc2tMYXllciA9IGxheWVyLT5tYXNrTGF5ZXIo
KSkgewpAQCAtNzI2LDYgKzc1Niw4NyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cGFp
bnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheQogICAgIH0K
IH0KIAordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVuaXRlRHJhd1JlY3RJbnRvQ29tcG9z
aXRvclNjaXNzb3IoQ0NMYXllckltcGwqIGxheWVyKQoreworICAgIGlmICghbGF5ZXItPmRpcnR5
UmVjdCgpLmlzRW1wdHkoKSkgeworICAgICAgICBGbG9hdFJlY3QgbmV4dFJlY3RUb0RyYXcgPSBs
YXllci0+ZGlydHlSZWN0KCk7CisgICAgICAgIEZsb2F0UmVjdCBzY3JlZW5TcGFjZVJlY3Q7CisK
KyAgICAgICAgLy8gVE9ETyhzaGF3bnNpbmdoKSB0aGlzIGlmLWVsc2Ugc3RhdGVtZW50IGlzIGEg
aGFja3kgc2Nyb2xsaW5nIGZpeCBmb3Igbm93LiBXaHkgZG9lcyB0aGUgcm9vdCBsYXllcgorICAg
ICAgICAvLyAgICAgICAgICAgICAgICAgIHRyZWF0IHNjcm9sbGluZyBkaWZmZXJlbnRseSB0aGFu
IG90aGVyIGxheWVycz8KKyAgICAgICAgaWYgKGxheWVyLT5pc1Jvb3RMYXllcigpKSB7CisgICAg
ICAgICAgICBuZXh0UmVjdFRvRHJhdy5tb3ZlKC1sYXllci0+c2Nyb2xsUG9zaXRpb24oKS54KCks
IC1sYXllci0+c2Nyb2xsUG9zaXRpb24oKS55KCkgKTsKKyAgICAgICAgICAgIHNjcmVlblNwYWNl
UmVjdCA9IGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLm1hcFJlY3QobmV4dFJlY3RUb0Ry
YXcpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNjcmVlblNwYWNlUmVjdCA9IGxheWVy
LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLm1hcFJlY3QobmV4dFJlY3RUb0RyYXcpOworCisgICAg
ICAgIG1fY29tcG9zaXRvclNjaXNzb3JSZWN0LnVuaXRlKHNjcmVlblNwYWNlUmVjdCk7CisgICAg
ICAgIGlmIChzZXR0aW5ncygpLnNob3dEcmF3UmVjdHMpCisgICAgICAgICAgICBtX2hlYWRzVXBE
aXNwbGF5LT5hZGREcmF3UmVjdChzY3JlZW5TcGFjZVJlY3QpOworCisgICAgICAgIGlmICgoIWxh
eWVyLT5pc1Jvb3RMYXllcigpKSAmJiBsYXllci0+bGF5ZXJIYXNNb3ZlZCgpKSB7CisgICAgICAg
ICAgICBtX2NvbXBvc2l0b3JTY2lzc29yUmVjdC51bml0ZShsYXllci0+b2xkU2NyZWVuU3BhY2VM
YXllclJlY3QoKSk7CisgICAgICAgICAgICBpZiAoc2V0dGluZ3MoKS5zaG93RHJhd1JlY3RzKQor
ICAgICAgICAgICAgICAgIG1faGVhZHNVcERpc3BsYXktPmFkZEV4cG9zZWRSZWN0KGxheWVyLT5v
bGRTY3JlZW5TcGFjZUxheWVyUmVjdCgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmNvbXB1dGVDb21wb3NpdG9yU2Npc3NvclJlY3QoQ0NMYXll
ckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit7CisgICAgLy8gVE9ETyhzaGF3bnNpbmdo
KSB0aGlzIGNvZGUgaXMgZXh0cmVtZWx5IHJlZHVuZGFudCB3aXRoIHRoZSBjb2RlIHRoYXQgYWN0
dWFsbHkgZHJhd3MgdGhlIGxheWVycy4KKyAgICAvLyAgICAgICAgICAgICAgICAgIGV2ZW50dWFs
bHkgaXQgd2lsbCBiZSBuZWNlc3NhcnkgdG8gcmUtdXNlIHRoZSBjb2RlIHNvbWVob3cuCisgICAg
Ly8gICAgICAgICAgICAgICAgICBvcHRpb24gMTogKGVhc2llcil0byBrZWVwIHRoaXMgcGFydGlj
dWxhciB0cmF2ZXJzYWwgYXMtaXMsIG1hcmtpbmcgbGF5ZXJzIGFzICJ0byBiZSBkcmF3biIKKyAg
ICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIHJlbW92aW5nIG1vc3Qgb2YgdGhl
IGxvZ2ljIHdoZW4gdGhlIGxheWVycyBhcmUgYWN0dWFsbHkgYmVpbmcgZHJhd24uCisgICAgLy8g
ICAgICAgICAgICAgICAgICBvcHRpb24gMjogKGhhcmRlciwgYnV0IHBvc3NpYmx5IGJldHRlciBp
biB0aGUgbG9uZyB0ZXJtKSBjcmVhdGUgYSBSZW5kZXJQYXNzIGNsYXNzCisgICAgLy8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhhdCByZXBsYWNlcyB0aGUgbGF5ZXJMaXN0IHR5cGUsIGFu
ZCBhIFJlbmRlclF1ZXVlIGNsYXNzIHRoYXQgcmVwbGFjZXMKKyAgICAvLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGUgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCB0eXBlLCBpbnNpZGUgb2Yg
dGhvc2UgY2xhc3NlcywgdGhpbmdzIGNhbiBiZQorICAgIC8vICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyb2tlbiBpbnRvIGNsZWFuZXIgZnVuY3Rpb25zLgorICAgIG1fY29tcG9zaXRvclNj
aXNzb3JSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIDAsIDApOworICAgIGZvciAoaW50IHN1cmZhY2VJ
bmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49
IDAgOyAtLXN1cmZhY2VJbmRleCkgeworICAgICAgICBDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFj
ZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOworICAg
ICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXIt
PnJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UpOworCisgICAg
ICAgIC8vIFJlbmRlciBzdXJmYWNlcyB3aG9zZSBkcmF3YWJsZSBhcmVhIGhhcyB6ZXJvIHdpZHRo
IG9yIGhlaWdodAorICAgICAgICAvLyB3aWxsIGhhdmUgbm8gbGF5ZXJzIGFzc29jaWF0ZWQgd2l0
aCB0aGVtIGFuZCBzaG91bGQgYmUgc2tpcHBlZC4KKyAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNl
LT5sYXllckxpc3QoKS5zaXplKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAv
LyBTa2lwIGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQgcmVuZGVyIHN1cmZhY2VzLgorICAgICAgICBp
ZiAoIXJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KworCisgICAgICAgIGNvbnN0IENDTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNl
LT5sYXllckxpc3QoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5
ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRleCkgeworCisgICAgICAgICAg
ICBpZiAoIWxheWVyTGlzdFtsYXllckluZGV4XS0+ZHJhd3NDb250ZW50KCkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmICghbGF5ZXJMaXN0W2xheWVySW5kZXhd
LT5vcGFjaXR5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlm
IChsYXllckxpc3RbbGF5ZXJJbmRleF0tPmJvdW5kcygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKworCisgICAgICAgICAgICBJbnRSZWN0IHRhcmdldFN1cmZhY2VSZWN0
ID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkgPyBsYXllckxp
c3RbbGF5ZXJJbmRleF0tPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSA6IG1f
ZGVmYXVsdFJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7CisgICAgICAgICAgICBpZiAobGF5
ZXJMaXN0W2xheWVySW5kZXhdLT51c2VzTGF5ZXJTY2lzc29yKCkpIHsKKyAgICAgICAgICAgICAg
ICBJbnRSZWN0IHNjaXNzb3JSZWN0ID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLT5zY2lzc29yUmVj
dCgpOworICAgICAgICAgICAgICAgIHRhcmdldFN1cmZhY2VSZWN0LmludGVyc2VjdChzY2lzc29y
UmVjdCk7CisKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0U3VyZmFjZVJlY3QuaXNFbXB0eSgp
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gZmluYWxseSwgaWYgd2UgcmVhbGx5IHJlYWNoIGhlcmUsIHdlIHNob3VsZCB1bmlv
biB0aGlzIGxheWVyIHRvIHRoZSBzY2lzc29yIHJlY3QuCisgICAgICAgICAgICB1bml0ZURyYXdS
ZWN0SW50b0NvbXBvc2l0b3JTY2lzc29yKGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKK30KKwogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdM
YXllcnNJbnRlcm5hbCgpCiB7CiAgICAgaWYgKHZpZXdwb3J0U2l6ZSgpLmlzRW1wdHkoKSB8fCAh
cm9vdExheWVyKCkpCkBAIC03NTMsNiArODY0LDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwoKQogICAgICAgICBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHk8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZSwgQ0NMYXllclNvcnRl
cj4ocm9vdERyYXdMYXllciwgcm9vdERyYXdMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5s
YXllckxpc3QoKSwgJm1fbGF5ZXJTb3J0ZXIsIG1fbWF4VGV4dHVyZVNpemUpOwogICAgIH0KIAor
ICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xh
eWVyc0ludGVybmFsOjpjb21wdXRlQ29tcG9zaXRvclNjaXNzb3JSZWN0KCkiLCB0aGlzLCAwKTsK
KyAgICAgICAgY29tcHV0ZUNvbXBvc2l0b3JTY2lzc29yUmVjdChyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KTsKKyAgICB9CisKICAgICAvLyBUaGUgR0wgdmlld3BvcnQgY292ZXJzIHRoZSBlbnRpcmUg
dmlzaWJsZSBhcmVhLCBpbmNsdWRpbmcgdGhlIHNjcm9sbGJhcnMuCiAgICAgR0xDKG1fY29udGV4
dC5nZXQoKSwgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCB2aWV3cG9ydFdpZHRoKCksIHZpZXdw
b3J0SGVpZ2h0KCkpKTsKICAgICBtX3dpbmRvd01hdHJpeCA9IHNjcmVlbk1hdHJpeCgwLCAwLCB2
aWV3cG9ydFdpZHRoKCksIHZpZXdwb3J0SGVpZ2h0KCkpOwpAQCAtOTU2LDYgKzEwNzIsNyBAQCB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXko
KQogICAgIGlmIChzZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbikgewogICAgICAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKIAorICAgICAgICAvLyBUT0RPKHNoYXduc2luZ2gpIHNob3VsZCB3
ZSBzZXQgdGhlIGNvbXBvc2l0b3Igc2Npc3NvciByZWN0IGhlcmUsIHRvbz8KICAgICAgICAgdXNl
UmVuZGVyU3VyZmFjZSgwKTsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZHJhd1RyYW5z
Zm9ybTsKICAgICAgICAgZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZCgwLjUgKiBtX2RlZmF1bHRS
ZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpLndpZHRoKCksIDAuNSAqIG1fZGVmYXVsdFJlbmRl
clN1cmZhY2UtPmNvbnRlbnRSZWN0KCkuaGVpZ2h0KCksIDApOwpAQCAtMTAxNiwxMyArMTEzMywy
MiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKENDTGF5ZXJJbXBsKiBs
YXllciwgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZQogICAgIGlmIChsYXllci0+Ym91bmRzKCkuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBJZiB0aGUgY29tcG9zaXRvciBzY2lz
c29yIGlzIGVuYWJsZWQsIGl0IGlzIHVzZWQgaW4gYWRkaXRpb24gdG8gdGhlIGxheWVyJ3Mgc2Np
c3Nvci4KICAgICBJbnRSZWN0IHRhcmdldFN1cmZhY2VSZWN0ID0gbGF5ZXItPnRhcmdldFJlbmRl
clN1cmZhY2UoKSA/IGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkg
OiBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpOwogICAgIGlmIChsYXllci0+
dXNlc0xheWVyU2Npc3NvcigpKSB7CiAgICAgICAgIEludFJlY3Qgc2Npc3NvclJlY3QgPSBsYXll
ci0+c2Npc3NvclJlY3QoKTsKKworICAgICAgICAvLyBUT0RPKHNoYXduc2luZ2gpIHByb2JhYmx5
IG5lZWQgdG8gdHJhbnNmb3JtIHRoZSBjb21wb3NpdG9yIHJlY3Qgc28gdGhhdCBpdCBpcyByZWxh
dGl2ZSB0byB0aGUgcmVuZGVyIHN1cmZhY2UuCisgICAgICAgIGlmICAoc2V0dGluZ3MoKS51c2VD
b21wb3NpdG9yU2Npc3NvcikKKyAgICAgICAgICAgIHNjaXNzb3JSZWN0LmludGVyc2VjdChJbnRS
ZWN0KG1fY29tcG9zaXRvclNjaXNzb3JSZWN0KSk7CisKICAgICAgICAgdGFyZ2V0U3VyZmFjZVJl
Y3QuaW50ZXJzZWN0KHNjaXNzb3JSZWN0KTsKICAgICAgICAgaWYgKHRhcmdldFN1cmZhY2VSZWN0
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgc2V0U2Npc3NvclRvUmVj
dChzY2lzc29yUmVjdCk7CisgICAgfSBlbHNlIGlmIChzZXR0aW5ncygpLnVzZUNvbXBvc2l0b3JT
Y2lzc29yKSB7CisgICAgICAgIC8vIFRPRE8oc2hhd25zaW5naCkgcHJvYmFibHkgbmVlZCB0byB0
cmFuc2Zvcm0gdGhlIGNvbXBvc2l0b3IgcmVjdCBzbyB0aGF0IGl0IGlzIHJlbGF0aXZlIHRvIHRo
ZSByZW5kZXIgc3VyZmFjZS4KKyAgICAgICAgc2V0U2Npc3NvclRvUmVjdChJbnRSZWN0KG1fY29t
cG9zaXRvclNjaXNzb3JSZWN0KSk7CiAgICAgfSBlbHNlCiAgICAgICAgIEdMQyhtX2NvbnRleHQu
Z2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
KSk7CiAKQEAgLTEwNDAsNiArMTE2NiwxMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd0xheWVyKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIC8vIHNhdmUgdGhlIHNjcmVlbi1zcGFjZSBk
cmF3IHJlY3QsIHNvIHRoYXQgb24gdGhlIG5leHQgdXBkYXRlIGlmIHRoZSBsYXllciBoYXMgbW92
ZWQsIHdlIGNhbiBtYXJrCisgICAgLy8gdGhpcyBvbGQgYXJlYSBhcyAibmV3bHkgZXhwb3NlZCIg
c28gdGhhdCB3ZSBjYW4gcG90ZW50aWFsbHkgYXZvaWQgcmVkcmF3aW5nIHRoZSBlbnRpcmUgc2Ny
ZWVuLgorICAgIGxheWVyLT5zYXZlU2NyZWVuU3BhY2VMYXllclJlY3QoKTsKKwogICAgIGxheWVy
LT5kcmF3KCk7CiAKICAgICAvLyBEcmF3IHRoZSBkZWJ1ZyBib3JkZXIgaWYgdGhlcmUgaXMgb25l
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCAyZDgwNDAzZGQ1MjZiY2Vl
Yzg0YjNlOWNhNGM4MDkyNjFhYzE3NWZkLi4xNWU4YmQwMTBlMTZmNjM4OTZkYzRhMTVmYTM5NDlh
NTFmYjM2OWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMTE0LDYg
KzExNCw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwcm9q
ZWN0aW9uTWF0cml4KCkgY29uc3QgeyByZXR1cm4gbV9wcm9qZWN0aW9uTWF0cml4OyB9CiAgICAg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHdpbmRvd01hdHJpeCgpIGNvbnN0IHsgcmV0dXJu
IG1fd2luZG93TWF0cml4OyB9CisgICAgY29uc3QgRmxvYXRSZWN0JiBjb21wb3NpdG9yU2Npc3Nv
clJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvc2l0b3JTY2lzc29yUmVjdDsgfQogCiAgICAg
aW50IG1heFRleHR1cmVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXhUZXh0dXJlU2l6ZTsgfQog
CkBAIC0xNTYsNiArMTU3LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhclJvb3RDQ0xheWVy
SW1wbCgpOwogcHJpdmF0ZToKKwogICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIG1vdmVk
IHRvIHRoZSBDQ0xheWVyVHJlZUhvc3RJbXBsIHdoZW4gdGhhdCBjbGFzcyBleGlzdHMuCiAgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RDQ0xheWVySW1wbDsKIApAQCAtMTkyLDYgKzE5NCwx
NSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVySW1w
bFJlY3Vyc2l2ZShDQ0xheWVySW1wbCopOwogCisgICAgLy8gVE9ETyhzaGF3bnNpbmdoKSB0aGlz
IHdhcyBvcmlnaW5hbGx5IGEgc3RhdGljIG5vbi1tZW1iZXIgZnVuY3Rpb24gaW4gTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcC4KKyAgICAvLyBpcyBpdCBPSyB0byBtYWtlIHRoaXMgYSBtZW1iZXIg
ZnVuY3Rpb24gb2YgdGhlIGxheWVyUmVuZGVyZXJDaHJvbWl1bSBjbGFzcz8KKyAgICB2b2lkIHBh
aW50Q29udGVudHNJZkRpcnR5KExheWVyQ2hyb21pdW0qLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxl
TGF5ZXJSZWN0KSBjb25zdDsKKworICAgIHZvaWQgbG9nUGFpbnRSZWN0VG9IVUQoTGF5ZXJDaHJv
bWl1bSopIGNvbnN0OworCisgICAgdm9pZCBjb21wdXRlQ29tcG9zaXRvclNjaXNzb3JSZWN0KEND
TGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICB2b2lkIHVuaXRlRHJhd1Jl
Y3RJbnRvQ29tcG9zaXRvclNjaXNzb3IoQ0NMYXllckltcGwqKTsKKwogICAgIC8vIEZJWE1FOiBD
aGFuZ2UgdGhpcyB0byBDQ0xheWVyVHJlZUhvc3RJbXBsCiAgICAgQ0NMYXllclRyZWVIb3N0KiBt
X293bmVyOwogCkBAIC0yMzksNiArMjUwLDEwIEBAIHByaXZhdGU6CiAgICAgQ0NSZW5kZXJTdXJm
YWNlKiBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlOwogCiAgICAgQ0NMYXllclNvcnRlciBtX2xheWVy
U29ydGVyOworCisgICAgLy8gVXNlZCB0byBzY2lzc29yIGZvciB0aGUgYWN0dWFsIGNvbXBvc2l0
aW5nIChpbiBjb21iaW5hdGlvbiB3aXRoIGVhY2ggbGF5ZXIncyBpbmRpdmlkdWFsIHNjaXNzb3Ig
cmVjdCkKKyAgICAvLyBJZGVhbGx5LCBpdCBjdWxscyBhd2F5IGFzIG11Y2ggYXMgcG9zc2libGUg
ZnJvbSBwYXJ0cyB0aGUgc2NyZWVuIHRoYXQgaGF2ZSBub3QgY2hhbmdlZC4KKyAgICBGbG9hdFJl
Y3QgbV9jb21wb3NpdG9yU2Npc3NvclJlY3Q7CiB9OwogCiAvLyBTZXR0aW5nIERFQlVHX0dMX0NB
TExTIHRvIDEgd2lsbCBjYWxsIGdsR2V0RXJyb3IoKSBhZnRlciBhbG1vc3QgZXZlcnkgR0wKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
SGVhZHNVcERpc3BsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKaW5kZXggYjI1NmM2N2Y4ZTA0NzgwMTk2Yjcy
ZmE5MTljMDFlZDM1Nzc4MDA0OS4uMzEyZTdkNGUwMTk0ZDIyOGQzN2Q3ZmVhYWMzYmY5ZTBiNTg0
YmJhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKQEAgLTcxLDYgKzcxLDcg
QEAgQ0NIZWFkc1VwRGlzcGxheTo6Q0NIZWFkc1VwRGlzcGxheShMYXllclJlbmRlcmVyQ2hyb21p
dW0qIG93bmVyKQogCiAgICAgbV9zbWFsbEZvbnQgPSBhZG9wdFB0cihuZXcgRm9udChzbWFsbEZv
bnREZXNjLCAwLCAwKSk7CiAgICAgbV9zbWFsbEZvbnQtPnVwZGF0ZSgwKTsKKwogfQogCiBDQ0hl
YWRzVXBEaXNwbGF5Ojp+Q0NIZWFkc1VwRGlzcGxheSgpCkBAIC04OSw3ICs5MCw3IEBAIHZvaWQg
Q0NIZWFkc1VwRGlzcGxheTo6b25QcmVzZW50KCkKIAogYm9vbCBDQ0hlYWRzVXBEaXNwbGF5Ojpl
bmFibGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc2V0dGluZ3MoKS5zaG93UGxhdGZvcm1MYXll
clRyZWUgfHwgc2V0dGluZ3MoKS5zaG93RlBTQ291bnRlcjsKKyAgICByZXR1cm4gc2V0dGluZ3Mo
KS5zaG93UGxhdGZvcm1MYXllclRyZWUgfHwgc2V0dGluZ3MoKS5zaG93RlBTQ291bnRlciB8fCBz
ZXR0aW5ncygpLnNob3dQYWludFJlY3RzIHx8IHNldHRpbmdzKCkuc2hvd0RyYXdSZWN0cyB8fCBz
ZXR0aW5ncygpLnNob3dDb21wb3NpdG9yU2Npc3NvclJlY3Q7CiB9CiAKIHZvaWQgQ0NIZWFkc1Vw
RGlzcGxheTo6ZHJhdygpCkBAIC0xMDAsNyArMTAxLDcgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5
OjpkcmF3KCkKIAogICAgIC8vIFVzZSBhIGZ1bGxzY3JlZW4gdGV4dHVyZSBvbmx5IGlmIHdlIG5l
ZWQgdG8uLi4KICAgICBJbnRTaXplIGh1ZFNpemU7Ci0gICAgaWYgKHNldHRpbmdzKCkuc2hvd1Bs
YXRmb3JtTGF5ZXJUcmVlKSB7CisgICAgaWYgKHNldHRpbmdzKCkuc2hvd1BsYXRmb3JtTGF5ZXJU
cmVlIHx8IHNldHRpbmdzKCkuc2hvd1BhaW50UmVjdHMgfHwgc2V0dGluZ3MoKS5zaG93RHJhd1Jl
Y3RzIHx8IHNldHRpbmdzKCkuc2hvd0NvbXBvc2l0b3JTY2lzc29yUmVjdCkgewogICAgICAgICBo
dWRTaXplLnNldFdpZHRoKG1pbigyMDQ4LCBtX2xheWVyUmVuZGVyZXItPnZpZXdwb3J0V2lkdGgo
KSkpOwogICAgICAgICBodWRTaXplLnNldEhlaWdodChtaW4oMjA0OCwgbV9sYXllclJlbmRlcmVy
LT52aWV3cG9ydEhlaWdodCgpKSk7CiAgICAgfSBlbHNlIHsKQEAgLTE4MCw2ICsxODEsMjcgQEAg
dm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3SHVkQ29udGVudHMoR3JhcGhpY3NDb250ZXh0KiBj
dHgsIGNvbnN0IEludFNpemUmIGh1ZFMKIAogICAgIGlmIChzZXR0aW5ncygpLnNob3dQbGF0Zm9y
bUxheWVyVHJlZSkKICAgICAgICAgZHJhd1BsYXRmb3JtTGF5ZXJUcmVlKGN0eCwgcGxhdGZvcm1M
YXllclRyZWVUb3ApOworCisgICAgaWYgKHNldHRpbmdzKCkuc2hvd1BhaW50UmVjdHMpIHsKKyAg
ICAgICAgZHJhd1BhaW50UmVjdHMoY3R4KTsKKyAgICAgICAgbV9wYWludFJlY3RzVGhpc1VwZGF0
ZS5jbGVhcigpOworICAgIH0KKworICAgIGlmIChzZXR0aW5ncygpLnNob3dEcmF3UmVjdHMpIHsK
KyAgICAgICAgZHJhd0RyYXdSZWN0cyhjdHgpOworICAgICAgICBtX2RyYXdSZWN0c1RoaXNVcGRh
dGUuY2xlYXIoKTsKKworICAgICAgICBkcmF3RXhwb3NlZFJlY3RzKGN0eCk7CisgICAgICAgIG1f
ZXhwb3NlZFJlY3RzVGhpc1VwZGF0ZS5jbGVhcigpOworICAgIH0KKworICAgIGlmIChzZXR0aW5n
cygpLnNob3dDb21wb3NpdG9yU2Npc3NvclJlY3QpCisgICAgICAgIGRyYXdDb21wb3NpdG9yU2Np
c3NvclJlY3QoY3R4KTsKKworICAgIC8vIFRPRE8oc2hhd25zaW5naCkgUkVNT1ZFIFRISVMgQkVG
T1JFIENPTU1JVFRJTkcuCisgICAgY2hhciBmb29iYXJbNTAwXTsKKyAgICBzcHJpbnRmKGZvb2Jh
ciwgIj09PT09PT09PT09PVxuIik7CisgICAgT3V0cHV0RGVidWdTdHJpbmdBKGZvb2Jhcik7CiB9
CiAKIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhd0ZQU0NvdW50ZXIoR3JhcGhpY3NDb250ZXh0
KiBjdHgsIGludCB0b3AsIGludCBoZWlnaHQpCkBAIC0yNTEsNiArMjczLDU3IEBAIHZvaWQgQ0NI
ZWFkc1VwRGlzcGxheTo6ZHJhd1BsYXRmb3JtTGF5ZXJUcmVlKEdyYXBoaWNzQ29udGV4dCogY3R4
LCBpbnQgdG9wKQogICAgIH0KIH0KIAordm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3UGFpbnRS
ZWN0cyhHcmFwaGljc0NvbnRleHQqIGN0eCkKK3sKKyAgICBjdHgtPnNldFN0cm9rZUNvbG9yKENv
bG9yKDI1NSwgMCwgMCwgMjU1KSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3BhaW50UmVjdHNUaGlzVXBkYXRlLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGN0eC0+ZmlsbFJlY3QobV9wYWludFJlY3RzVGhpc1VwZGF0ZVtpXSwgQ29sb3IoMjU1LCAw
LCAwLCAzMCksIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICBjdHgtPnN0cm9rZVJlY3Qo
bV9wYWludFJlY3RzVGhpc1VwZGF0ZVtpXSwgMi4wKTsKKyAgICB9Cit9CisKK3ZvaWQgQ0NIZWFk
c1VwRGlzcGxheTo6ZHJhd0RyYXdSZWN0cyhHcmFwaGljc0NvbnRleHQqIGN0eCkKK3sKKyAgICBj
dHgtPnNldFN0cm9rZUNvbG9yKENvbG9yKDAsIDAsIDI1NSwgMjU1KSwgQ29sb3JTcGFjZURldmlj
ZVJHQik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2RyYXdSZWN0c1RoaXNVcGRhdGUu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY3R4LT5maWxsUmVjdChtX2RyYXdSZWN0c1RoaXNVcGRh
dGVbaV0sIENvbG9yKDAsIDAsIDI1NSwgMzApLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAg
ICAgY3R4LT5zdHJva2VSZWN0KG1fZHJhd1JlY3RzVGhpc1VwZGF0ZVtpXSwgMi4wKTsKKyAgICB9
Cit9CisKK3ZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhd0V4cG9zZWRSZWN0cyhHcmFwaGljc0Nv
bnRleHQqIGN0eCkKK3sKKyAgICBjdHgtPnNldFN0cm9rZUNvbG9yKENvbG9yKDE1MCwgMCwgMjIw
LCAyNTUpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fZXhwb3NlZFJlY3RzVGhpc1VwZGF0ZS5zaXplKCk7ICsraSkgeworICAgICAgICBjdHgtPmZp
bGxSZWN0KG1fZXhwb3NlZFJlY3RzVGhpc1VwZGF0ZVtpXSwgQ29sb3IoMTUwLCAwLCAyMjAsIDMw
KSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGN0eC0+c3Ryb2tlUmVjdChtX2V4cG9z
ZWRSZWN0c1RoaXNVcGRhdGVbaV0sIDIuMCk7CisgICAgfQorfQorCit2b2lkIENDSGVhZHNVcERp
c3BsYXk6OmRyYXdDb21wb3NpdG9yU2Npc3NvclJlY3QoR3JhcGhpY3NDb250ZXh0KiBjdHgpCit7
CisgICAgY3R4LT5zZXRTdHJva2VDb2xvcihDb2xvcigwLCAyNTUsIDAsIDI1NSksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOworICAgIGN0eC0+c3Ryb2tlUmVjdChtX2xheWVyUmVuZGVyZXItPmNvbXBv
c2l0b3JTY2lzc29yUmVjdCgpLCA0LjApOworfQorCit2b2lkIENDSGVhZHNVcERpc3BsYXk6OmFk
ZFBhaW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHNjcmVlblNwYWNlUGFpbnRSZWN0KQoreworICAg
IGlmIChzZXR0aW5ncygpLnNob3dQYWludFJlY3RzKQorICAgICAgICBtX3BhaW50UmVjdHNUaGlz
VXBkYXRlLmFwcGVuZChzY3JlZW5TcGFjZVBhaW50UmVjdCk7Cit9CisKK3ZvaWQgQ0NIZWFkc1Vw
RGlzcGxheTo6YWRkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiBzY3JlZW5TcGFjZURyYXdSZWN0
KQoreworICAgIGlmIChzZXR0aW5ncygpLnNob3dEcmF3UmVjdHMpCisgICAgICAgIG1fZHJhd1Jl
Y3RzVGhpc1VwZGF0ZS5hcHBlbmQoc2NyZWVuU3BhY2VEcmF3UmVjdCk7Cit9CisKK3ZvaWQgQ0NI
ZWFkc1VwRGlzcGxheTo6YWRkRXhwb3NlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiBzY3JlZW5TcGFj
ZUV4cG9zZWRSZWN0KQoreworICAgIGlmIChzZXR0aW5ncygpLnNob3dEcmF3UmVjdHMpCisgICAg
ICAgIG1fZXhwb3NlZFJlY3RzVGhpc1VwZGF0ZS5hcHBlbmQoc2NyZWVuU3BhY2VFeHBvc2VkUmVj
dCk7Cit9CisKIGNvbnN0IENDU2V0dGluZ3MmIENDSGVhZHNVcERpc3BsYXk6OnNldHRpbmdzKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5zZXR0aW5ncygpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFk
c1VwRGlzcGxheS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NIZWFkc1VwRGlzcGxheS5oCmluZGV4IDVmNDA3NTFhYzE2YmIwNDQwNTAyZmFlZDY1NzQy
Yzc0ZmY2NDJmMzguLmEzYTRhNzc2MDEzZTRmZDAwYmQwZmIyYTI4ZmRiNmJjMmY0MDg3NTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
SGVhZHNVcERpc3BsYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKQEAgLTU3LDYgKzU3LDkgQEAgcHVibGljOgog
CiAgICAgYm9vbCBlbmFibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBkcmF3KCk7CisgICAgdm9pZCBh
ZGRQYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiBzY3JlZW5TcGFjZVBhaW50UmVjdCk7CisgICAg
dm9pZCBhZGREcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHNjcmVlblNwYWNlRHJhd1JlY3QpOwor
ICAgIHZvaWQgYWRkRXhwb3NlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiBzY3JlZW5TcGFjZUV4cG9z
ZWRSZWN0KTsKIAogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4
LCBGcmFnbWVudFNoYWRlclJHQkFUZXhTd2l6emxlQWxwaGE+IFByb2dyYW07CiAKQEAgLTY1LDYg
KzY4LDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3SHVkQ29udGVudHMoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgSW50U2l6ZSYgaHVkU2l6ZSk7CiAgICAgdm9pZCBkcmF3RlBTQ291bnRlcihH
cmFwaGljc0NvbnRleHQqLCBpbnQgdG9wLCBpbnQgaGVpZ2h0KTsKICAgICB2b2lkIGRyYXdQbGF0
Zm9ybUxheWVyVHJlZShHcmFwaGljc0NvbnRleHQqLCBpbnQgdG9wKTsKKyAgICB2b2lkIGRyYXdQ
YWludFJlY3RzKEdyYXBoaWNzQ29udGV4dCopOworICAgIHZvaWQgZHJhd0RyYXdSZWN0cyhHcmFw
aGljc0NvbnRleHQqKTsKKyAgICB2b2lkIGRyYXdFeHBvc2VkUmVjdHMoR3JhcGhpY3NDb250ZXh0
Kik7CisgICAgdm9pZCBkcmF3Q29tcG9zaXRvclNjaXNzb3JSZWN0KEdyYXBoaWNzQ29udGV4dCop
OwogICAgIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3Q7CiAKICAgICBpbnQgbV9j
dXJyZW50RnJhbWVOdW1iZXI7CkBAIC04Miw2ICs4OSwxMSBAQCBwcml2YXRlOgogICAgIE93blB0
cjxGb250PiBtX21lZGl1bUZvbnQ7CiAKICAgICBib29sIG1fdXNlTWFwU3ViRm9yVXBsb2FkczsK
KworICAgIC8vIHRoZXNlIGxpc3RzIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGRlYnVnZ2luZy4K
KyAgICBWZWN0b3I8RmxvYXRSZWN0PiBtX3BhaW50UmVjdHNUaGlzVXBkYXRlOworICAgIFZlY3Rv
cjxGbG9hdFJlY3Q+IG1fZHJhd1JlY3RzVGhpc1VwZGF0ZTsKKyAgICBWZWN0b3I8RmxvYXRSZWN0
PiBtX2V4cG9zZWRSZWN0c1RoaXNVcGRhdGU7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5j
cHAKaW5kZXggNzQ1ODYxYWEzMDVhMGI1ZjQwNjY4MDcwZWJhM2ZmZTYzNzYwNmVhYy4uMDI1ODQ3
NWY1ZTQwY2FhYTBjZDVhOWUwY2E1NDc3NjA4MWYzZGM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcApAQCAtMTU4LDYgKzE1OCwxMiBAQCBjb25zdCBJbnRSZWN0IENDTGF5ZXJJbXBsOjpnZXRE
cmF3UmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1hcHBlZFJlY3Q7CiB9CiAKK3ZvaWQgQ0NMYXll
ckltcGw6OnNhdmVTY3JlZW5TcGFjZUxheWVyUmVjdCgpCit7CisgICAgbV9vbGRTY3JlZW5TcGFj
ZUxheWVyUmVjdCA9IG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm0ubWFwUmVjdChGbG9hdFJlY3QoMCwg
MCwgbV9ib3VuZHMud2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpKTsKK30KKworCiB2b2lkIEND
TGF5ZXJJbXBsOjpkcmF3RGVidWdCb3JkZXIoKQogewogICAgIHN0YXRpYyBmbG9hdCBnbE1hdHJp
eFsxNl07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCA4M2IwMzQ2MDIwNTc4NjQ1ZjQ3OWZiNzhl
YjlhOTFjNjVkYTY1MjUzLi40MjM2Y2QxOGU1NzdjMzMxYTQ0MzRmOWFlOTgzNmMzYjQzNGYyODA1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTc3LDYgKzc3LDEyIEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldERyYXdzQ29udGVudChib29sIGRyYXdzQ29udGVudCkgeyBtX2RyYXdzQ29udGVudCA9
IGRyYXdzQ29udGVudDsgfQogICAgIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4g
bV9kcmF3c0NvbnRlbnQ7IH0KIAorICAgIHZvaWQgc2V0RGlydHlSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgZGlydHlSZWN0KSB7IG1fZGlydHlSZWN0ID0gZGlydHlSZWN0OyB9CisgICAgY29uc3QgRmxv
YXRSZWN0JiBkaXJ0eVJlY3QoKSB7IHJldHVybiBtX2RpcnR5UmVjdDsgfQorCisgICAgdm9pZCBz
ZXRMYXllckhhc01vdmVkKGJvb2wgbGF5ZXJIYXNNb3ZlZCkgeyBtX2xheWVySGFzTW92ZWQgPSBs
YXllckhhc01vdmVkOyB9CisgICAgYm9vbCBsYXllckhhc01vdmVkKCkgY29uc3QgeyByZXR1cm4g
bV9sYXllckhhc01vdmVkOyB9CisKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW55IG9mIHRoZSBs
YXllcidzIGRlc2NlbmRhbnRzIGhhcyBjb250ZW50IHRvIGRyYXcuCiAgICAgYm9vbCBkZXNjZW5k
YW50RHJhd3NDb250ZW50KCk7CiAKQEAgLTE2NSw2ICsxNzEsOSBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkg
Y29uc3Q7CiAKKyAgICB2b2lkIHNhdmVTY3JlZW5TcGFjZUxheWVyUmVjdCgpOworICAgIGNvbnN0
IEZsb2F0UmVjdCBvbGRTY3JlZW5TcGFjZUxheWVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2xk
U2NyZWVuU3BhY2VMYXllclJlY3Q7IH0KKwogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENDTGF5
ZXJJbXBsKGludCk7CiAKQEAgLTIwNCw2ICsyMTMsMTYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wg
bV9kcmF3c0NvbnRlbnQ7CiAKKyAgICAvLyBpZiBsYXllciBoYXMgbW92ZWQsIHdlIG11c3QgcmVk
cmF3IHRoZSBlbnRpcmUgbGF5ZXIsIHBsdXMgdGhlIGFyZWEgaXQgZXhwb3NlZCAoYmFzaWNhbGx5
LCB0aGUgb2xkIGxheWVyJ3MgcG9zaXRpb24gYW5kIGJvdW5kcykuCisgICAgYm9vbCBtX2xheWVy
SGFzTW92ZWQ7CisgICAgLy8gZXZlbiBpZiB0aGUgbGF5ZXIgaGFzIG5vdCBtb3ZlZCwgd2UgbXVz
dCBzdGlsbCBhdCBsZWFzdCByZWRyYXcgYW55IGFyZWEgdGhhdCB3YXMgcmVwYWludGVkLgorICAg
IEZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKKworICAgIC8vIHBvc2l0aW9uIGFuZCBzaXplIG9mIHRo
aXMgbGF5ZXIgZnJvbSB0aGUgcHJldmlvdXMgZnJhbWUgYXMgaXQgd2FzIGRyYXduCisgICAgLy8g
aWYgdGhlIGxheWVyIG1vdmVzLCB3ZSBrbm93IHRoYXQgdGhpcyByZWN0IGlzIG5ld2x5IGV4cG9z
ZWQgYW5kIGFsc28gbmVlZHMgcmVkcmF3aW5nLgorICAgIEZsb2F0UmVjdCBtX29sZFNjcmVlblNw
YWNlTGF5ZXJSZWN0OworCisKICAgICAvLyBQcm9wZXJ0aWVzIG93bmVkIGV4Y2x1c2l2ZWx5IGJ5
IHRoaXMgQ0NMYXllckltcGwuCiAgICAgLy8gRGVidWdnaW5nLgogI2lmbmRlZiBOREVCVUcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggOTliOGJmMjA5NGQ4MzY0MTQ4M2I0OWQ5M2M2
OTBmYjFlYWJhZThjNi4uZWQ0Mjk3ZmQ0YzJhNDdlZjljOTZkMGVhNGU5ZGE4MWNhNzU3MGJkYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTY2LDEyICs2NiwyMCBAQCBzdHJ1Y3Qg
Q0NTZXR0aW5ncyB7CiAgICAgICAgICAgICA6IGFjY2VsZXJhdGVQYWludGluZyhmYWxzZSkKICAg
ICAgICAgICAgICwgY29tcG9zaXRlT2Zmc2NyZWVuKGZhbHNlKQogICAgICAgICAgICAgLCBzaG93
RlBTQ291bnRlcihmYWxzZSkKLSAgICAgICAgICAgICwgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGZh
bHNlKSB7IH0KKyAgICAgICAgICAgICwgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGZhbHNlKQorICAg
ICAgICAgICAgLCBzaG93UGFpbnRSZWN0cyhmYWxzZSkKKyAgICAgICAgICAgICwgc2hvd0RyYXdS
ZWN0cyhmYWxzZSkKKyAgICAgICAgICAgICwgc2hvd0NvbXBvc2l0b3JTY2lzc29yUmVjdChmYWxz
ZSkKKyAgICAgICAgICAgICwgdXNlQ29tcG9zaXRvclNjaXNzb3IoZmFsc2UpIHsgfQogCiAgICAg
Ym9vbCBhY2NlbGVyYXRlUGFpbnRpbmc7CiAgICAgYm9vbCBjb21wb3NpdGVPZmZzY3JlZW47CiAg
ICAgYm9vbCBzaG93RlBTQ291bnRlcjsKICAgICBib29sIHNob3dQbGF0Zm9ybUxheWVyVHJlZTsK
KyAgICBib29sIHNob3dQYWludFJlY3RzOworICAgIGJvb2wgc2hvd0RyYXdSZWN0czsKKyAgICBi
b29sIHNob3dDb21wb3NpdG9yU2Npc3NvclJlY3Q7CisgICAgYm9vbCB1c2VDb21wb3NpdG9yU2Np
c3NvcjsKIH07CiAKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdCA6IHB1YmxpYyBSZWZDb3VudGVkPEND
TGF5ZXJUcmVlSG9zdD4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwNDZmYjEzYzli
NzhmODBjYjljZmEyYWMxYTYwMDA1NjcyM2Y1ODdjLi45YjUxMzg4OTk2OGM5Yjg0ZmM0M2E1MzY1
MGM1ZjEwZDAzMmY5MGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1
IEBACisyMDExLTA4LTMxICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIE9ubHkgZm9yIHJldmlldy4KKyAgICAgICAgQWRkZWQgMyBmbGFncyB0aGF0IHdv
dWxkIGJlIHBpcGVkIHRocm91Z2ggY2hyb21pdW0gY29tbWFuZCBsaW5lIGZsYWdzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjczNDEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHB1YmxpYy9XZWJTZXR0
aW5ncy5oOgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNldFNob3dQYWludFJlY3RzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViU2V0dGluZ3NJbXBsOjpzZXRTaG93RHJhd1JlY3RzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViU2V0dGluZ3NJbXBsOjpzZXRTaG93Q29tcG9zaXRvclNjaXNzb3JSZWN0KToKKyAgICAgICAg
KiBzcmMvV2ViU2V0dGluZ3NJbXBsLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1w
bDo6c2hvd1BhaW50UmVjdHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNo
b3dEcmF3UmVjdHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNob3dDb21w
b3NpdG9yU2Npc3NvclJlY3QpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXREZXZUb29sc0FnZW50Q2xpZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6Om1vdXNlRG93bik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpOgorCiAyMDExLTA4
LTI3ICBQZXRlciBCZXZlcmxvbyAgPHBldGVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBUZWFj
aCB0aGUgdXBkYXRlIGFuZCBidWlsZCBzY3JpcHRzIGhvdyB0byBoYW5kbGUgZGVwZW5kZW5jaWVz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAppbmRleCAwNDRk
MDYxODc3NGZlZjQxODUzYzZiMDFjMjI4ZTc2ODAzZWNjMzg1Li4yYjhjZGEzNzVjNjNhM2JjNzlh
NjZhNzY3OTAwNmI1MWU4NTUyNThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJTZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlNldHRpbmdzLmgKQEAgLTEwMSw2ICsxMDEsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBzaG93RlBTQ291bnRlcigpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2hv
d1BsYXRmb3JtTGF5ZXJUcmVlKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvd1BsYXRm
b3JtTGF5ZXJUcmVlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaG93UGFpbnRS
ZWN0cyhib29sKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNob3dQYWludFJlY3RzKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaG93RHJhd1JlY3RzKGJvb2wpID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgc2hvd0RyYXdSZWN0cygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0U2hvd0NvbXBvc2l0b3JTY2lzc29yUmVjdChib29sKSA9IDA7CisgICAgdmlydHVhbCBib29s
IHNob3dDb21wb3NpdG9yU2Npc3NvclJlY3QoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IHNldEVkaXRpbmdCZWhhdmlvcihFZGl0aW5nQmVoYXZpb3IpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRGb3JjZUNvbXBvc2l0aW5nTW9kZShib29sKSA9IDA7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAppbmRleCBiNDYzNDAxOTFlMmZi
NjEyZDZjZjMzY2FkNjc5NjZkM2IwZDIzNGVjLi45ZGRhN2Y5OWFmNTM1OTNmMGFmMmU0OWEyNzA0
ZjNkMzI5MWJjNjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
ZXR0aW5nc0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRp
bmdzSW1wbC5jcHAKQEAgLTMwMyw2ICszMDMsMjEgQEAgdm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNl
dFNob3dQbGF0Zm9ybUxheWVyVHJlZShib29sIHNob3cpCiAgICAgbV9zaG93UGxhdGZvcm1MYXll
clRyZWUgPSBzaG93OwogfQogCit2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0U2hvd1BhaW50UmVj
dHMoYm9vbCBzaG93KQoreworICAgIG1fc2hvd1BhaW50UmVjdHMgPSBzaG93OworfQorCit2b2lk
IFdlYlNldHRpbmdzSW1wbDo6c2V0U2hvd0RyYXdSZWN0cyhib29sIHNob3cpCit7CisgICAgbV9z
aG93RHJhd1JlY3RzID0gc2hvdzsKK30KKwordm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldFNob3dD
b21wb3NpdG9yU2Npc3NvclJlY3QoYm9vbCBzaG93KQoreworICAgIG1fc2hvd0NvbXBvc2l0b3JT
Y2lzc29yUmVjdCA9IHNob3c7Cit9CisKIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRFZGl0aW5n
QmVoYXZpb3IoRWRpdGluZ0JlaGF2aW9yIGJlaGF2aW9yKQogewogICAgIG1fc2V0dGluZ3MtPnNl
dEVkaXRpbmdCZWhhdmlvclR5cGUoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RWRpdGluZ0JlaGF2aW9y
VHlwZT4oYmVoYXZpb3IpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlNldHRpbmdzSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGlu
Z3NJbXBsLmgKaW5kZXggMTkwNjk5NWRiNzk1MTE5OTQxYmExOTFjNmU1NjIwZGIwNTE5YWRkMC4u
N2NhNjE0YWE1ZTM5NjI4ZTUzMGZmMTRlYzUwODNjNTI3YzA3YzY0ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKQEAgLTkzLDYgKzkzLDEyIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc2hvd0ZQU0NvdW50ZXIoKSBjb25zdCB7IHJldHVybiBt
X3Nob3dGUFNDb3VudGVyOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFNob3dQbGF0Zm9ybUxheWVy
VHJlZShib29sKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKCkgY29u
c3QgeyByZXR1cm4gbV9zaG93UGxhdGZvcm1MYXllclRyZWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0U2hvd1BhaW50UmVjdHMoYm9vbCk7CisgICAgdmlydHVhbCBib29sIHNob3dQYWludFJlY3Rz
KCkgY29uc3QgIHsgcmV0dXJuIG1fc2hvd1BhaW50UmVjdHM7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0U2hvd0RyYXdSZWN0cyhib29sKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvd0RyYXdSZWN0cygp
IGNvbnN0ICB7IHJldHVybiBtX3Nob3dEcmF3UmVjdHM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
U2hvd0NvbXBvc2l0b3JTY2lzc29yUmVjdChib29sKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvd0Nv
bXBvc2l0b3JTY2lzc29yUmVjdCgpIGNvbnN0ICB7IHJldHVybiBtX3Nob3dDb21wb3NpdG9yU2Np
c3NvclJlY3Q7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0RWRpdGluZ0JlaGF2aW9yKEVkaXRpbmdC
ZWhhdmlvcik7CiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFi
bGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRGb3JjZUNvbXBvc2l0aW5nTW9kZShib29s
KTsKQEAgLTEyNiw2ICsxMzIsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jb21wb3NpdGVUb1Rl
eHR1cmVFbmFibGVkOwogICAgIGJvb2wgbV9zaG93RlBTQ291bnRlcjsKICAgICBib29sIG1fc2hv
d1BsYXRmb3JtTGF5ZXJUcmVlOworICAgIGJvb2wgbV9zaG93UGFpbnRSZWN0czsKKyAgICBib29s
IG1fc2hvd0RyYXdSZWN0czsKKyAgICBib29sIG1fc2hvd0NvbXBvc2l0b3JTY2lzc29yUmVjdDsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0ltcGwuY3BwCmluZGV4IGNlNGIzZjFlZWM5NDNmNGIyYmU5NDcyYzQ0OGJkMTQ1ZTlh
YmVhZTQuLjRhMGM3MmJhMTFiMTAxODE5OWNiMjllYTMwZDM3YjZkZjQxYzNhY2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTI5Miw3ICsyOTIsNyBA
QCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRBdXRvZmlsbENsaWVudChXZWJBdXRvZmlsbENsaWVudCog
YXV0b2ZpbGxDbGllbnQpCiAgICAgbV9hdXRvZmlsbENsaWVudCA9IGF1dG9maWxsQ2xpZW50Owog
fQogCi12b2lkIFdlYlZpZXdJbXBsOjpzZXREZXZUb29sc0FnZW50Q2xpZW50KFdlYkRldlRvb2xz
QWdlbnRDbGllbnQqIGRldlRvb2xzQ2xpZW50KSAKK3ZvaWQgV2ViVmlld0ltcGw6OnNldERldlRv
b2xzQWdlbnRDbGllbnQoV2ViRGV2VG9vbHNBZ2VudENsaWVudCogZGV2VG9vbHNDbGllbnQpCiB7
CiAgICAgaWYgKGRldlRvb2xzQ2xpZW50KQogICAgICAgICBtX2RldlRvb2xzQWdlbnQgPSBhZG9w
dFB0cihuZXcgV2ViRGV2VG9vbHNBZ2VudEltcGwodGhpcywgZGV2VG9vbHNDbGllbnQpKTsKQEAg
LTQ2NSw2ICs0NjUsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjptb3VzZURvd24oY29uc3QgV2ViTW91
c2VFdmVudCYgZXZlbnQpCiAgICAgaWYgKGV2ZW50LmJ1dHRvbiA9PSBXZWJNb3VzZUV2ZW50OjpC
dXR0b25MZWZ0KSB7CiAgICAgICAgIEludFBvaW50IHBvaW50KGV2ZW50LngsIGV2ZW50LnkpOwog
ICAgICAgICBwb2ludCA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+d2luZG93VG9Db250
ZW50cyhwb2ludCk7CisKICAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQobV9wYWdlLT5tYWlu
RnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KHBvaW50LCBmYWxz
ZSkpOwogICAgICAgICBOb2RlKiBoaXROb2RlID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgp
OwogCkBAIC0yNjEyLDYgKzI2MTMsMTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQogICAgICAgICBjY1NldHRpbmdzLmNv
bXBvc2l0ZU9mZnNjcmVlbiA9IHNldHRpbmdzKCktPmNvbXBvc2l0ZVRvVGV4dHVyZUVuYWJsZWQo
KTsKICAgICAgICAgY2NTZXR0aW5ncy5zaG93RlBTQ291bnRlciA9IHNldHRpbmdzKCktPnNob3dG
UFNDb3VudGVyKCk7CiAgICAgICAgIGNjU2V0dGluZ3Muc2hvd1BsYXRmb3JtTGF5ZXJUcmVlID0g
c2V0dGluZ3MoKS0+c2hvd1BsYXRmb3JtTGF5ZXJUcmVlKCk7CisgICAgICAgIGNjU2V0dGluZ3Mu
c2hvd1BhaW50UmVjdHMgPSBzZXR0aW5ncygpLT5zaG93UGFpbnRSZWN0cygpOworICAgICAgICBj
Y1NldHRpbmdzLnNob3dEcmF3UmVjdHMgPSBzZXR0aW5ncygpLT5zaG93RHJhd1JlY3RzKCk7Cisg
ICAgICAgIGNjU2V0dGluZ3Muc2hvd0NvbXBvc2l0b3JTY2lzc29yUmVjdCA9IHNldHRpbmdzKCkt
PnNob3dDb21wb3NpdG9yU2Npc3NvclJlY3QoKTsKKyAgICAgICAgLy8gRklYTUU6IHRoaXMgZmxh
Z3Mgc2hvdWxkIGhhdmUgaXRzIG93biBjb21tYW5kLWxpbmUgc3dpdGNoLCBidXQgZm9yIG5vdyBp
dCBkb2Vzbid0LgorICAgICAgICBjY1NldHRpbmdzLnVzZUNvbXBvc2l0b3JTY2lzc29yID0gc2V0
dGluZ3MoKS0+c2hvd0NvbXBvc2l0b3JTY2lzc29yUmVjdCgpOwogCiAgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdCA9IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKHRoaXMsIGNjU2V0dGluZ3MpOwogICAg
ICAgICBpZiAobV9sYXllclRyZWVIb3N0KSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112600</attachid>
            <date>2011-10-26 14:46:24 -0700</date>
            <delta_ts>2011-10-28 18:39:12 -0700</delta_ts>
            <desc>pseudcode of the final scissor approach</desc>
            <filename>bug-67341-20111026144623.patch</filename>
            <type>text/plain</type>
            <size>5472</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg0ODIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmNjBmYzFlNmNmYjNiZDNh
NjU2M2JmNDY1NzEzOGFkZTRkOTM1NWIzLi5mZjIwNWEwNzkyY2VkOTlmMGQ4MTU5ZjE1MjE2ZmEz
ZTlkNWExM2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMTAtMjYgIFNoYXdu
IFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBT
Y2lzc29yIHJlY3Qgb3B0aW1pemF0aW9uIGZvciBjaHJvbWl1bSBjb21wb3NpdG9yCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzM0MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgb25seSBhIHBz
ZXVkb2NvZGUgcGF0Y2guICBGb3IgcGVvcGxlIHRvIHNlZQorICAgICAgICB3aGlsZSB3YWl0aW5n
IGZvciBkZXBlbmRlbmNpZXMgdG8gbGFuZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclJlbmRlcmVyQ2hyb21pdW06OmNvbXB1dGVDb21wb3NpdG9yU2Npc3NvclJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwp
OgorCiAyMDExLTEwLTI2ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBQcm9wZXJseSBzdXNwZW5kL3Jlc3VtZSBHZW9sb2NhdGlvbi9E
ZXZpY2VNb3Rpb24vRGV2aWNlT3JpZW50YXRpb24gb2JqZWN0cwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggMDU3NmFkOTIzODM5MjY4Yjg1MGMwOTQ4ZmU0NGIyMjA4
NzM0YTZlZS4uN2JjZjFkZjg1NGFiMjkxNDUxMTJkMWEwZGVmYjBjODZlMGY5NGM3YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0zMDEsNiArMzAxLDc0IEBAIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKCkKICAgICAgICAgY29weU9mZnNj
cmVlblRleHR1cmVUb0Rpc3BsYXkoKTsKIH0KIAordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmNvbXB1dGVDb21wb3NpdG9yU2Npc3NvclJlY3QoY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpCit7CisgICAgLy8KKyAgICAvLyBUaGVyZSBhcmUgdGhyZWUgc291cmNl
cyBvZiAiY2hhbmdlIiBpbiBsYXllcnMgdGhhdCB3aWxsIGNoYW5nZSB0aGUgcGl4ZWxzIG9mIHRo
ZSBzY3JlZW46CisgICAgLy8gICAtIHVwZGF0ZSByZWN0czogIHRoZSByZWdpb24gb2YgYSBsYXll
ciB0aGF0IHdhcyByZXBhaW50ZWQvdXBkYXRlZC4KKyAgICAvLyAgIC0gZHJhdyByZWN0czogICAg
dGhlIGVudGlyZSBsYXllciBpdHNlbGYsIGlmIHRoZSBsYXllciBwcm9wZXJ0aWVzIGNoYW5nZWQv
bW92ZWQuIChlLmcuIG9wYWNpdHksIHBvc2l0aW9uLCB0cmFuc2Zvcm1zKQorICAgIC8vICAgLSBl
eHBvc2VkIHJlY3RzOiB0aGUgcHJldmlvdXMgZHJhdyByZWN0IG9mIGEgbGF5ZXIgdGhhdCBoYXMg
Y2hhbmdlZC9tb3ZlZC4KKyAgICAvLworICAgIC8vIFdpdGggdGhpcyBpbmZvcm1hdGlvbiwgd2Ug
Y2FuIGNvbXB1dGUgdGhlIG92ZXJhbGwgY29tcG9zaXRvciBzY2lzc29yIHJlY3QuCisgICAgLy8K
KyAgICAvLyBBIGhhc2ggdGFibGUgaXMgbWFpbnRhaW5lZCwgY29udGFpbmluZyB0aGUgZHJhdyBy
ZWN0cyBvZiB0aGUgcHJldmlvdXMgcmVkcmF3LiAgV2hlcmUgYXBwcm9wcmlhdGUsIHRoZXNlCisg
ICAgLy8gcmVjdHMgcmVwcmVzZW50IG5ld2x5IGV4cG9zZWQgcmVnaW9ucyBvZiB0aGUgc2NyZWVu
IGZvciB0aGlzIHJlZHJhdy4KKyAgICAvLworICAgIC8vIEZpbmFsbHksIGl0IGlzIGltcG9ydGFu
dCB0byBub3RlIHRoYXQgdGhlc2UgbGF5ZXIgcmVjdHMgaW5kaWNhdGUgZGFtYWdlIHRvIHRoZSBz
Y3JlZW4sIHdoaWNoIG1lYW5zCisgICAgLy8gdGhhdCBhbGwgbGF5ZXJzIHRoYXQgb3ZlcmxhcCB0
aGF0IHJlZ2lvbiBzdGlsbCBuZWVkIHRvIGJlIGRyYXduLgorICAgIC8vCisKKyAgICAvLyBTb21l
d2hlcmUgYXBwcm9wcmlhdGUgdGhlIGZvbGxvd2luZyBpcyBkZWZpbmVkOgorICAgIC8vIHR5cGVk
ZWYgSGFzaE1hcDxpbnQsIEZsb2F0UmVjdD4gcmVjdE1hcFR5cGU7CisgICAgLy8gcmVjdE1hcFR5
cGUgb2xkRHJhd1JlY3RNYXA7CisgICAgLy8gcmVjdE1hcFR5cGUgbmV3RHJhd1JlY3RNYXA7Cisg
ICAgLy8gRmxvYXRSZWN0IG1fY29tcG9zaXRvclNjaXNzb3JSZWN0OworCisgICAgbV9jb21wb3Np
dG9yU2Npc3NvclJlY3QgPSBGbG9hdFJlY3QoKTsKKworICAgIGZvciAoaW50IHN1cmZhY2VJbmRl
eCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAg
OyAtLXN1cmZhY2VJbmRleCkgeworICAgICAgICBDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxh
eWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOworICAgICAg
ICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJl
bmRlclN1cmZhY2UoKTsKKyAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UpOworCisgICAgICAg
IGlmICghcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCkuc2l6ZSgpIHx8ICFyZW5kZXJTdXJmYWNl
LT5kcmF3T3BhY2l0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY29uc3Qg
Q0NMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0
LnNpemUoKTsgKytsYXllckluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBDQ0xheWVySW1w
bCogbGF5ZXIgPSBsYXllckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCk7CisKKyAgICAgICAgICAgIC8v
IFJlbW92ZSB0aGUgb2xkIHJlY3QgZnJvbSB0aGUgbWFwIGlmIGl0IGV4aXN0ZWQsIGJ1dCBrZWVw
IHRoZSBkYXRhIGl0c2VsZiB0byB1c2UgYmVsb3cuCisgICAgICAgICAgICBGbG9hdFJlY3Qgb2xk
UmVjdCA9IG9sZERyYXdSZWN0TWFwLnRha2UobGF5ZXItPmlkKCkpOworCisgICAgICAgICAgICBp
ZiAobGF5ZXItPmxheWVySGFzQ2hhbmdlZCgpKSB7CisgICAgICAgICAgICAgICAgLy8gdGhlIGxh
eWVyJ3MgZW50aXJlIHJlY3QgYWZmZWN0cyB0aGUgc2NyZWVuCisgICAgICAgICAgICAgICAgbV9j
b21wb3NpdG9yU2Npc3NvclJlY3QudW5pdGUobGF5ZXJEcmF3UmVjdEluU2NyZWVuU3BhY2UpOwor
CisgICAgICAgICAgICAgICAgLy8gdGhlIGxheWVyJ3Mgb2xkIHJlZ2lvbiBpcyBub3cgZXhwb3Nl
ZCBvbiB0aGUgc2NyZWVuLCBpZiBpdCBhY3R1YWxseSBleGlzdHMuCisgICAgICAgICAgICAgICAg
aWYgKG9sZFJlY3QgIT0gcmVjdE1hcFR5cGU6Ok1hcHBlZFRyYWl0OjplbXB0eVZhbHVlKCkpCisg
ICAgICAgICAgICAgICAgICAgIG1fY29tcG9zaXRvclNjaXNzb3JSZWN0LnVuaXRlKGl0LT5zZWNv
bmQpOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBs
YXllciBwcm9wZXJ0aWVzIGhhdmVudCBjaGFuZ2VkLCB0aGVuIHRoZSB0aGUgc2NyZWVuIGlzIG9u
bHkgYWZmZWN0ZWQgYnkgdGhlIGxheWVyJ3MgdXBkYXRlIGFyZWEuCisgICAgICAgICAgICAgICAg
bV9jb21wb3NpdG9yU2Npc3NvclJlY3QudW5pdGVJZk5vblplcm8obGF5ZXItPnVwZGF0ZVJlY3RJ
blNjcmVlblNwYWNlKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBuZXdEcmF3UmVj
dE1hcC5zZXQobGF5ZXItPmlkKCksIGxheWVyRHJhd1JlY3RJblNjcmVlblNwYWNlKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIEF0IHRoaXMgcG9pbnQsIGFueSBsZWZ0b3ZlciBpdGVtcyBp
biB0aGUgb2xkRHJhd1JlY3RNYXAgY29ycmVzcG9uZCB0byBsYXllcnMgdGhhdCBhcmUgbm90IGJl
aW5nIHJlZHJhd24gYXQgYWxsLgorICAgIC8vIFNvLCB0aGVzZSByZWdpb25zIGFyZSBub3cgZXhw
b3NlZCBvbiB0aGUgc2NyZWVuLgorICAgIGZvciAocmVjdE1hcFR5cGU6Oml0ZXJhdG9yIGl0ID0g
b2xkRHJhd1JlY3RNYXAuYmVnaW4oKTsgaXQgIT0gb2xkRHJhd1JlY3RNYXAuZW5kKCk7ICsraXQp
IHsKKyAgICAgICAgbV9jb21wb3NpdG9yU2Npc3NvclJlY3QudW5pdGUoaXQtPnNlY29uZCk7Cisg
ICAgfQorICAgIG9sZERyYXdSZWN0TWFwLmNsZWFyKCk7CisKKyAgICBzd2FwKG9sZERyYXdSZWN0
TWFwLCBuZXdEcmF3UmVjdE1hcCkgLy8gT3IsIGFsdGVybmF0aXZlbHkgd2UgY2FuIGNyZWF0ZSBh
IG1vcmUgY29tcGxleCBjaGFpbi4KK30KKwogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNv
bnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQogewogICAgIFRSQUNFX0VW
RU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMi
LCB0aGlzLCAwKTsKQEAgLTM5Myw2ICs0NjEsOSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRl
eHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6
T05FX01JTlVTX1NSQ19BTFBIQSkpOwogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4
dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKIAorICAgIGlmIChz
ZXR0aW5ncygpLnVzZUNvbXBvc2l0b3JTY2lzc29yKQorICAgICAgICBjb21wdXRlQ29tcG9zaXRv
clNjaXNzb3JSZWN0KHJvb3REcmF3TGF5ZXIsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworCiAg
ICAgZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyhyb290RHJhd0xheWVyLCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKIAogICAgIGlmIChtX2hlYWRzVXBEaXNwbGF5LT5lbmFibGVkKCkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112958</attachid>
            <date>2011-10-28 18:39:17 -0700</date>
            <delta_ts>2011-11-07 15:03:08 -0800</delta_ts>
            <desc>please review, but also check comments about this version</desc>
            <filename>bug-67341-20111028183916.patch</filename>
            <type>text/plain</type>
            <size>19430</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg3NTIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjMzczMTM0MmQ3M2ZjYjhk
YWFiZGVmODI5YjZlYmJiN2E0NjMyNzNkLi5iZTU5MDQ2YWM1ZDI2ZjkwN2QxYjE2MjVlNjE4YjJh
MmU4ZTdhYTk5IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMTAtMjggIFNoYXdu
IFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBT
Y2lzc29yIHJlY3Qgb3B0aW1pemF0aW9uIGZvciBjaHJvbWl1bSBjb21wb3NpdG9yCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzM0MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgb25seSBmb3Ig
cmV2aWV3LiBUZXN0cyBzaG91bGQgYmUgYWRkZWQgYW5kIGEgZmV3IGVkZ2UKKyAgICAgICAgY2Fz
ZXMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6bG9nVXBkYXRlUmVjdHNUb0hVRCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmxvZ0RyYXdSZWN0c1RvSFVEKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29tcHV0ZUNvbXBvc2l0
b3JTY2lzc29yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06
OmRyYXdMYXllcnNJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmNvbXBvc2l0b3JTY2lzc29yUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERp
c3BsYXk6OmRyYXdIdWRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0hlYWRzVXBEaXNw
bGF5OjpkcmF3Q29tcG9zaXRvclJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERp
c3BsYXk6OmFkZFVwZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlzcGxh
eTo6YWRkRHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlzcGxheTo6YWRk
RXhwb3NlZFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
SGVhZHNVcERpc3BsYXkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2V0dGluZ3M6OkNDU2V0
dGluZ3MpOgorCiAyMDExLTEwLTI4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUu
Y29tPgogCiAgICAgICAgIEZpeCBidWlsZHMgd2hpY2ggaGF2ZSBBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORyBkaXNhYmxlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4
IGJlZTI2ZTZjOTExYjQ5MTVkYWNjMTY2YjdlMjBjNzljODBkMDM2YzguLjdmODdmOGRjMDM0NTc1
ODcyMDk2MWQ1YzIyMDJmZDYxYzEzYjFmNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcApAQCAtMTA4LDYgKzEwOCwxOCBAQCBzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRy
aXggc2NyZWVuTWF0cml4KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAg
IHJldHVybiBzY3JlZW47CiB9CiAKKy8vIEZJWE1FOiB0aGlzIHNjcm9sbCBmaXggaXMgbm90IGlu
dGVuZGVkIHRvIGxhbmQsIGJ1dCBpcyByZXF1aXJlZCB0byBnZXQgdGhpcyBwYXRjaAorLy8gICAg
ICAgIHRvIHdvcmsgcHJvcGVybHkgd2hpbGUgd2FpdGluZyBmb3IgTm9uQ29tcG9zaXRlZENvbnRl
bnRIb3N0IHNjcm9sbGluZworLy8gICAgICAgIHRvIGJlIGZpeGVkLiBPbmNlIHNjcm9sbGluZyBp
cyBmaXhlZCwgd2UgY2FuIHJlbW92ZSB0aGlzIGZ1bmN0aW9uIGFuZCB1c2UgdGhlCisvLyAgICAg
ICAgb3JpZ2luYWwgcmVjdCBpbiBpdHMgcGxhY2UuCitzdGF0aWMgRmxvYXRSZWN0IEhBQ0tZU2Ny
b2xsRml4KENDTGF5ZXJJbXBsKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAg
IEZsb2F0UmVjdCBzY3JvbGxlZFJlY3QgPSByZWN0OworICAgIGlmIChsYXllci0+aXNOb25Db21w
b3NpdGVkQ29udGVudCgpKQorICAgICAgICBzY3JvbGxlZFJlY3QubW92ZSgtbGF5ZXItPnNjcm9s
bFBvc2l0aW9uKCkueCgpLCAtbGF5ZXItPnNjcm9sbFBvc2l0aW9uKCkueSgpKTsKKyAgICByZXR1
cm4gc2Nyb2xsZWRSZWN0OworfQorCiAjaWYgVVNFKFNLSUEpCiBib29sIGNvbnRleHRTdXBwb3J0
c0FjY2VsZXJhdGVkUGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB7CkBAIC0x
NzIsNiArMTg0LDggQEAgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21p
dW0oQ0NMYXllclRyZWVIb3N0SW1wbCogb3duZXIsCiAgICAgOiBtX293bmVyKG93bmVyKQogICAg
ICwgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSgwKQogICAgICwgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZl
cklkKDApCisgICAgLCBtX25leHRSZWN0TWFwSW5kZXgoMCkKKyAgICAsIG1fcHJldlJlY3RNYXBJ
bmRleCgxKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2RlZmF1bHRSZW5kZXJT
dXJmYWNlKDApCiAgICAgLCBtX3NoYXJlZEdlb21ldHJ5UXVhZChGbG9hdFJlY3QoLTAuNWYsIC0w
LjVmLCAxLjBmLCAxLjBmKSkKQEAgLTMwMSw2ICszMTUsMTI5IEBAIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3TGF5ZXJzKCkKICAgICAgICAgY29weU9mZnNjcmVlblRleHR1cmVUb0Rp
c3BsYXkoKTsKIH0KIAordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmxvZ1VwZGF0ZVJlY3Rz
VG9IVUQoQ0NMYXllckltcGwqIGxheWVyKQoreworICAgIC8vIFdlIHdvdWxkIGxpa2UgdG8gdmlz
dWFsaXplIHdoZXJlIGFueSBsYXllcidzIHVkcGF0ZSByZWN0IGhhcyBjaGFuZ2VkLAorICAgIC8v
IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGlzIGxheWVyIGlzIHNraXBwZWQgZm9yIGFjdHVhbCBk
cmF3aW5nIG9yIG5vdC4KKyAgICAvLyBUaGVyZWZvcmUgd2UgdHJhdmVyc2UgcmVjdXJzaXZlbHkg
b3ZlciBhbGwgbGF5ZXJzLCBub3QganVzdCB0aGUKKyAgICAvLyByZW5kZXIgc3VyZmFjZSBsaXN0
LgorCisgICAgaWYgKCFsYXllci0+dXBkYXRlUmVjdCgpLmlzRW1wdHkoKSAmJiBsYXllci0+ZHJh
d3NDb250ZW50KCkpCisgICAgICAgIG1faGVhZHNVcERpc3BsYXktPmFkZFVwZGF0ZVJlY3QobGF5
ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkubWFwUmVjdChIQUNLWVNjcm9sbEZpeChsYXllciwg
bGF5ZXItPnVwZGF0ZVJlY3QoKSkpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
YXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgbG9nVXBkYXRlUmVjdHNUb0hV
RChsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpsb2dEcmF3UmVjdHNUb0hVRChjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCkKK3sKKyAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgp
IHsKKyAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZh
Y2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsKKyAgICAgICAgQ0NSZW5kZXJTdXJmYWNl
KiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7Cisg
ICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlKTsKKworICAgICAgICAvLyBGSVhNRTogdGhpcyB3
aWxsIGNvbmZsaWN0IHdpdGggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTcxMDM4CisgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCkuc2l6ZSgpIHx8
ICFyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgY29uc3QgQ0NMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxh
eWVyTGlzdCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllcklu
ZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7CisgICAgICAgICAgICBDQ0xh
eWVySW1wbCogbGF5ZXIgPSBsYXllckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCk7CisKKyAgICAgICAg
ICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyLT5yZW5kZXJTdXJmYWNlKCkg
IT0gbV9jdXJyZW50UmVuZGVyU3VyZmFjZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgLy8gRklYTUU6IHNlZSB0aGUgZml4bWUgY29tbWVudCBpbiBjb21wdXRlQ29t
cG9zaXRvclNjaXNzb3JSZWN0IGFib3V0IHRoaXMgY29uZGl0aW9uLgorICAgICAgICAgICAgaWYg
KGxheWVyLT5pc05vbkNvbXBvc2l0ZWRDb250ZW50KCkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgIGlmIChsYXllci0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSkKKyAg
ICAgICAgICAgICAgICBtX2hlYWRzVXBEaXNwbGF5LT5hZGREcmF3UmVjdChsYXllci0+c2NyZWVu
U3BhY2VUcmFuc2Zvcm0oKS5tYXBSZWN0KEhBQ0tZU2Nyb2xsRml4KGxheWVyLCBGbG9hdFJlY3Qo
RmxvYXRQb2ludDo6emVybygpLCBsYXllci0+Ym91bmRzKCkpKSkpOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29tcHV0ZUNvbXBvc2l0b3JTY2lz
c29yUmVjdChjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAg
ICAvLworICAgIC8vIFRoZXJlIGFyZSB0aHJlZSBzb3VyY2VzIG9mICJjaGFuZ2UiIGluIGxheWVy
cyB0aGF0IHdpbGwgY2hhbmdlIHRoZSBwaXhlbHMgb2YgdGhlIHNjcmVlbjoKKyAgICAvLyAgIC0g
dXBkYXRlIHJlY3RzOiB0aGUgcmVnaW9uIG9mIGEgbGF5ZXIgdGhhdCB3YXMgcmVwYWludGVkL3Vw
ZGF0ZWQuCisgICAgLy8gICAtIGRyYXcgcmVjdHM6IHRoZSBlbnRpcmUgbGF5ZXIgaXRzZWxmLCBp
ZiB0aGUgbGF5ZXIgcHJvcGVydGllcyBjaGFuZ2VkL21vdmVkLiAoZS5nLiBvcGFjaXR5LCBwb3Np
dGlvbiwgdHJhbnNmb3JtcykKKyAgICAvLyAgIC0gZXhwb3NlZCByZWN0czogdGhlIHByZXZpb3Vz
IGRyYXcgcmVjdCBvZiBhIGxheWVyIHRoYXQgaGFzIGNoYW5nZWQvbW92ZWQuCisgICAgLy8KKyAg
ICAvLyBBIGhhc2h0YWJsZSBpcyBtYWludGFpbmVkLCBjb250YWluaW5nIHRoZSBkcmF3IHJlY3Rz
IG9mIHRoZSBwcmV2aW91cyByZWRyYXcuIFdoZXJlIGFwcHJvcHJpYXRlLCB0aGVzZQorICAgIC8v
IHJlY3RzIHJlcHJlc2VudCBuZXdseSBleHBvc2VkIHJlZ2lvbnMgb2YgdGhlIHNjcmVlbi4KKyAg
ICAvLworICAgIC8vIEZpbmFsbHksIGl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlc2Ug
bGF5ZXIgcmVjdHMgaW5kaWNhdGUgZGFtYWdlIHRvIHRoZSBzY3JlZW4sIHdoaWNoIG1lYW5zCisg
ICAgLy8gdGhhdCBhbGwgbGF5ZXJzIHRoYXQgb3ZlcmxhcCB0aGF0IHJlZ2lvbiBzdGlsbCBuZWVk
IHRvIGJlIGRyYXduLgorICAgIC8vCisKKyAgICBtX2NvbXBvc2l0b3JTY2lzc29yUmVjdCA9IEZs
b2F0UmVjdCgpOworCisgICAgQVNTRVJUKG1fZHJhd1JlY3RNYXBDaGFpblttX25leHRSZWN0TWFw
SW5kZXhdLmlzRW1wdHkoKSk7CisKKyAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNl
SW5kZXgpIHsKKyAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRl
clN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsKKyAgICAgICAgQ0NSZW5kZXJT
dXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNl
KCk7CisgICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlKTsKKworICAgICAgICAvLyBGSVhNRTog
dGhpcyB3aWxsIGNvbmZsaWN0IHdpdGggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcxMDM4CisgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCkuc2l6
ZSgpIHx8ICFyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgY29uc3QgQ0NMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZh
Y2UtPmxheWVyTGlzdCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBs
YXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7CisgICAgICAgICAg
ICBDQ0xheWVySW1wbCogbGF5ZXIgPSBsYXllckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCk7CisKKyAg
ICAgICAgICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyLT5yZW5kZXJTdXJm
YWNlKCkgIT0gbV9jdXJyZW50UmVuZGVyU3VyZmFjZSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgRmxvYXRSZWN0IHNjcmVlblNwYWNlRHJhd1JlY3QgPSBsYXllci0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tYXBSZWN0KEhBQ0tZU2Nyb2xsRml4KGxheWVyLCBGbG9h
dFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBsYXllci0+Ym91bmRzKCkpKSk7CisKKyAgICAgICAg
ICAgIC8vIHRha2UoKSB3aWxsIHJldHVybiBhIGRlZmF1bHQgKGVtcHR5KSByZWN0IGlmIHRoZSBp
dGVtIGlzIG5vdCBmb3VuZCwgYW5kIGl0IHdpbGwgcmVtb3ZlIGl0IGZyb20gdGhlIG1hcCBpZiBp
dCBpcyBmb3VuZC4KKyAgICAgICAgICAgIEZsb2F0UmVjdCBvbGRSZWN0ID0gbV9kcmF3UmVjdE1h
cENoYWluW21fcHJldlJlY3RNYXBJbmRleF0udGFrZShsYXllci0+aWQoKSk7CisKKyAgICAgICAg
ICAgIGlmICghbGF5ZXItPmlzTm9uQ29tcG9zaXRlZENvbnRlbnQoKSkKKyAgICAgICAgICAgICAg
ICBtX2RyYXdSZWN0TWFwQ2hhaW5bbV9uZXh0UmVjdE1hcEluZGV4XS5zZXQobGF5ZXItPmlkKCks
IHNjcmVlblNwYWNlRHJhd1JlY3QpOworCisgICAgICAgICAgICAvLyBGSVhNRTogdGhlIGlzTm9u
Q29tcG9zaXRlZENvbnRlbnQoKSBjb25kaXRpb24gaXMgdmVyeSBsaWtlbHkgd3JvbmcsIGJ1dCB3
aXRob3V0IGl0IHRoZSBub24gY29tcG9zaXRlZAorICAgICAgICAgICAgLy8gICAgICAgIGxheWVy
IGlzIGFsd2F5cyBjaGFuZ2luZyBhbmQgZGVmZWF0cyB0aGUgcHVycG9zZSBvZiB0aGUgc2Npc3Nv
ci4gV2Ugc3RpbGwgbmVlZCB0byBwcm92ZSB3aGV0aGVyCisgICAgICAgICAgICAvLyAgICAgICAg
aXRzIG15IG1pc3Rha2UsIG9yIHNob3VsZCBiZSBhIHNlcGFyYXRlIGJ1Zy4gTm90ZSB0aGF0IGEg
c2ltaWxhciBpc3N1ZSBleGlzdHMgZm9yIHNjcm9sbCBiYXIKKyAgICAgICAgICAgIC8vICAgICAg
ICBsYXllcnMsIGJ1dCB3ZSBhcmUgbm90IGlnbm9yaW5nIHRob3NlLCBzbyB0aGV5IGFmZmVjdCB0
aGUgc2Npc3Nvci4KKyAgICAgICAgICAgIGlmIChsYXllci0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQo
KSAmJiAhbGF5ZXItPmlzTm9uQ29tcG9zaXRlZENvbnRlbnQoKSkgeworCisgICAgICAgICAgICAg
ICAgLy8gdGhlIGxheWVyJ3MgZW50aXJlIHJlY3QgYWZmZWN0cyB0aGUgc2NyZWVuCisgICAgICAg
ICAgICAgICAgbV9jb21wb3NpdG9yU2Npc3NvclJlY3QudW5pdGVJZk5vblplcm8oc2NyZWVuU3Bh
Y2VEcmF3UmVjdCk7CisKKyAgICAgICAgICAgICAgICAvLyB0aGUgbGF5ZXIncyBvbGQgcmVnaW9u
IGlzIG5vdyBleHBvc2VkIG9uIHRoZSBzY3JlZW4sIGlmIGl0IGFjdHVhbGx5IGV4aXN0cy4KKyAg
ICAgICAgICAgICAgICBpZiAoIW9sZFJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIG1faGVhZHNVcERpc3BsYXktPmFkZEV4cG9zZWRSZWN0KG9sZFJlY3QpOworICAgICAgICAg
ICAgICAgICAgICBtX2NvbXBvc2l0b3JTY2lzc29yUmVjdC51bml0ZUlmTm9uWmVybyhvbGRSZWN0
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxheWVyLT51
cGRhdGVSZWN0KCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgLy8gaWYgdGhlIGxheWVy
IHByb3BlcnRpZXMgaGF2ZW50IGNoYW5nZWQsIHRoZW4gdGhlIHRoZSBzY3JlZW4gaXMgb25seSBh
ZmZlY3RlZCBieSB0aGUgbGF5ZXIncyB1cGRhdGUgYXJlYS4KKyAgICAgICAgICAgICAgICBGbG9h
dFJlY3Qgc2NyZWVuU3BhY2VVcGRhdGVSZWN0ID0gbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3Jt
KCkubWFwUmVjdChIQUNLWVNjcm9sbEZpeChsYXllciwgbGF5ZXItPnVwZGF0ZVJlY3QoKSkpOwor
ICAgICAgICAgICAgICAgIG1fY29tcG9zaXRvclNjaXNzb3JSZWN0LnVuaXRlSWZOb25aZXJvKHNj
cmVlblNwYWNlVXBkYXRlUmVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBBdCB0aGlzIHBvaW50LCBhbnkgbGVmdG92ZXIgaXRlbXMgaW4gdGhlIG9sZERyYXdS
ZWN0TWFwIGNvcnJlc3BvbmQgdG8gbGF5ZXJzIHRoYXQgYXJlIG5vdCBiZWluZyByZWRyYXduIGF0
IGFsbC4KKyAgICAvLyBTbywgdGhlc2UgcmVnaW9ucyBhcmUgbm93IGV4cG9zZWQgb24gdGhlIHNj
cmVlbi4KKyAgICBmb3IgKFJlY3RNYXBUeXBlOjppdGVyYXRvciBpdCA9IG1fZHJhd1JlY3RNYXBD
aGFpblttX3ByZXZSZWN0TWFwSW5kZXhdLmJlZ2luKCk7IGl0ICE9IG1fZHJhd1JlY3RNYXBDaGFp
blttX3ByZXZSZWN0TWFwSW5kZXhdLmVuZCgpOyArK2l0KSB7CisgICAgICAgIG1faGVhZHNVcERp
c3BsYXktPmFkZEV4cG9zZWRSZWN0KGl0LT5zZWNvbmQpOworICAgICAgICBtX2NvbXBvc2l0b3JT
Y2lzc29yUmVjdC51bml0ZShpdC0+c2Vjb25kKTsKKyAgICB9CisKKyAgICBtX2RyYXdSZWN0TWFw
Q2hhaW5bbV9wcmV2UmVjdE1hcEluZGV4XS5jbGVhcigpOworCisgICAgc3dhcChtX3ByZXZSZWN0
TWFwSW5kZXgsIG1fbmV4dFJlY3RNYXBJbmRleCk7CisKKyAgICAvLyBJZiB0aGUgc2Npc3NvciBp
cyBlbXB0eSwgdGhhdCBtZWFucyBub3RoaW5nIGlzIGJlaW5nIGRyYXduIGFuZCB3ZSBzaG91bGQg
bm90IGhhdmUgaW52b2tlZCB0aGUgZHJhdyBjb2RlIHBhdGggaW4gdGhlIGZpcnN0IHBsYWNlLgor
ICAgIEFTU0VSVCghbV9jb21wb3NpdG9yU2Npc3NvclJlY3QuaXNFbXB0eSgpKTsKK30KKwogdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMoQ0NM
YXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KQogewogICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMiLCB0aGlzLCAwKTsKQEAgLTMzOSw3ICs0NzYsNiBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNl
cyhDQ0xheWVySW1wbCogcm9vdERyYXdMYQogICAgIH0KIH0KIAotCiB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKIHsKICAgICBpZiAodmlld3BvcnRTaXpl
KCkuaXNFbXB0eSgpIHx8ICFyb290TGF5ZXIoKSkKQEAgLTM5Myw2ICs1MjksMTUgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCgpCiAgICAgR0xDKG1fY29u
dGV4dC5nZXQoKSwgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwg
R3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpKTsKICAgICBHTEMobV9jb250
ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUKSk7CiAKKyAgICBpZiAoc2V0dGluZ3MoKS5zaG93Q29tcG9zaXRvclJlY3RzKSB7CisgICAg
ICAgIC8vIHRoZSBhY3R1YWwgZHJhd2luZyBvZiB0aGVzZSByZWN0cyBpcyBkZWZlcnJlZCB1bnRp
bCB0aGUgSFVEIGRyYXdzLCBzbyB0aGF0IHRoZXNlIHJlY3RzIHN0YXkgb24gdG9wLgorICAgICAg
ICBsb2dVcGRhdGVSZWN0c1RvSFVEKHJvb3REcmF3TGF5ZXIpOworICAgICAgICBsb2dEcmF3UmVj
dHNUb0hVRChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICB9CisKKyAgICBpZiAoc2V0dGlu
Z3MoKS51c2VDb21wb3NpdG9yU2Npc3NvcikKKyAgICAgICAgY29tcHV0ZUNvbXBvc2l0b3JTY2lz
c29yUmVjdChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKwogICAgIGRyYXdMYXllcnNPbnRvUmVu
ZGVyU3VyZmFjZXMocm9vdERyYXdMYXllciwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAKICAg
ICBpZiAobV9oZWFkc1VwRGlzcGxheS0+ZW5hYmxlZCgpKSB7CkBAIC01ODIsOCArNzI3LDIwIEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoQ0NMYXllckltcGwqIGxheWVy
LCBDQ1JlbmRlclN1cmZhY2UqIHRhcmdlCiAgICAgaWYgKHZpc2libGVMYXllclJlY3QuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobGF5ZXItPnVzZXNMYXllclNjaXNzb3Io
KSkKLSAgICAgICAgc2V0U2Npc3NvclRvUmVjdChsYXllci0+c2Npc3NvclJlY3QoKSk7CisgICAg
RmxvYXRSZWN0IHRyYW5zZm9ybWVkQ29tcG9zaXRvclNjaXNzb3JSZWN0OworICAgIGlmIChzZXR0
aW5ncygpLnVzZUNvbXBvc2l0b3JTY2lzc29yKSB7CisgICAgICAgIC8vIHRyYW5zZm9ybSB0aGUg
Y29tcG9zaXRvciBzY2lzc29yIHRvIHRoZSByZW5kZXIgc3VyZmFjZSdzIHNwYWNlCisgICAgICAg
IEFTU0VSVChtX2N1cnJlbnRSZW5kZXJTdXJmYWNlLT5kcmF3VHJhbnNmb3JtKCkuaXNJbnZlcnRp
YmxlKCkpOworICAgICAgICB0cmFuc2Zvcm1lZENvbXBvc2l0b3JTY2lzc29yUmVjdCA9IG1fY3Vy
cmVudFJlbmRlclN1cmZhY2UtPmRyYXdUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFwUmVjdChtX2Nv
bXBvc2l0b3JTY2lzc29yUmVjdCk7CisgICAgfQorCisgICAgaWYgKGxheWVyLT51c2VzTGF5ZXJT
Y2lzc29yKCkpIHsKKyAgICAgICAgRmxvYXRSZWN0IGxheWVyU2Npc3NvclJlY3QgPSBsYXllci0+
c2Npc3NvclJlY3QoKTsKKyAgICAgICAgaWYgKHNldHRpbmdzKCkudXNlQ29tcG9zaXRvclNjaXNz
b3IpCisgICAgICAgICAgICBsYXllclNjaXNzb3JSZWN0LmludGVyc2VjdCh0cmFuc2Zvcm1lZENv
bXBvc2l0b3JTY2lzc29yUmVjdCk7CisgICAgICAgIHNldFNjaXNzb3JUb1JlY3QoZW5jbG9zaW5n
SW50UmVjdChsYXllclNjaXNzb3JSZWN0KSk7CisgICAgfSBlbHNlIGlmIChzZXR0aW5ncygpLnVz
ZUNvbXBvc2l0b3JTY2lzc29yKQorICAgICAgICBzZXRTY2lzc29yVG9SZWN0KGVuY2xvc2luZ0lu
dFJlY3QodHJhbnNmb3JtZWRDb21wb3NpdG9yU2Npc3NvclJlY3QpKTsKICAgICBlbHNlCiAgICAg
ICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6U0NJU1NPUl9URVNUKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgK
aW5kZXggNjQ2ZWE2ZTVjNDQ4YTU4YzYxMjQxMzQyYjBmOWE2ZWFkZGFlZjQ0Ny4uZjI5MjcxMDYy
ODAyZjQzMGQ1OGE5MWE3MDBiNmJhMmQyZDcyMGRhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgKQEAgLTgzLDYgKzgzLDggQEAgcHVibGljOgogCiAgICAgfkxheWVyUmVuZGVy
ZXJDaHJvbWl1bSgpOwogCisgICAgY29uc3QgRmxvYXRSZWN0JiBjb21wb3NpdG9yU2Npc3NvclJl
Y3QoKSB7IHJldHVybiBtX2NvbXBvc2l0b3JTY2lzc29yUmVjdDsgfQorCiAgICAgY29uc3QgQ0NT
ZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX293bmVyLT5zZXR0aW5ncygpOyB9
CiAgICAgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKCkgY29u
c3QgeyByZXR1cm4gbV9jYXBhYmlsaXRpZXM7IH0KIApAQCAtMTY0LDYgKzE2NiwxMCBAQCBwcml2
YXRlOgogICAgIHZvaWQgZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCog
cm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3Qp
OwogICAgIHZvaWQgZHJhd0xheWVyKENDTGF5ZXJJbXBsKiwgQ0NSZW5kZXJTdXJmYWNlKik7CiAK
KyAgICB2b2lkIGNvbXB1dGVDb21wb3NpdG9yU2Npc3NvclJlY3QoY29uc3QgQ0NMYXllckxpc3Qm
IHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIHZvaWQgbG9nVXBkYXRlUmVjdHNUb0hVRChD
Q0xheWVySW1wbCopOworICAgIHZvaWQgbG9nRHJhd1JlY3RzVG9IVUQoY29uc3QgQ0NMYXllckxp
c3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworCiAgICAgTWFuYWdlZFRleHR1cmUqIGdldE9m
ZnNjcmVlbkxheWVyVGV4dHVyZSgpOwogICAgIHZvaWQgY29weU9mZnNjcmVlblRleHR1cmVUb0Rp
c3BsYXkoKTsKIApAQCAtMjI3LDYgKzIzMywxNSBAQCBwcml2YXRlOgogCiAgICAgT3duUHRyPEND
SGVhZHNVcERpc3BsYXk+IG1faGVhZHNVcERpc3BsYXk7CiAKKyAgICB0eXBlZGVmIEhhc2hNYXA8
aW50LCBGbG9hdFJlY3Q+IFJlY3RNYXBUeXBlOworCisgICAgLy8gdG8gdHJhY2sgZXhwb3NlZCBy
ZWN0cyBiZXR3ZWVuIGZyYW1lcywgaXQgaXMgbmVjZXNzYXJ5IHRvIG1haW50YWluIG11bHRpcGxl
IFJlY3RNYXBzLgorICAgIFJlY3RNYXBUeXBlIG1fZHJhd1JlY3RNYXBDaGFpblsyXTsKKyAgICBp
bnQgbV9uZXh0UmVjdE1hcEluZGV4OworICAgIGludCBtX3ByZXZSZWN0TWFwSW5kZXg7CisKKyAg
ICBGbG9hdFJlY3QgbV9jb21wb3NpdG9yU2Npc3NvclJlY3Q7CisKICAgICBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IG1fY29udGV4dDsKIAogICAgIENDUmVuZGVyU3VyZmFjZSogbV9kZWZhdWx0
UmVuZGVyU3VyZmFjZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKaW5kZXggYjY4
ZjQ2Y2Y4YjgxYzllNzZlMzc3OWM2OTAxYmNiOTQ1NTFjOTFjZi4uNWZmZTVhZjgzMTExOTc0NTEx
ODk3YWFhY2Y1ZWMzOTg1MTBlMjQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5j
cHAKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIENDSGVhZHNVcERpc3BsYXk6OmRyYXcoKQogCiAg
ICAgLy8gVXNlIGEgZnVsbHNjcmVlbiB0ZXh0dXJlIG9ubHkgaWYgd2UgbmVlZCB0by4uLgogICAg
IEludFNpemUgaHVkU2l6ZTsKLSAgICBpZiAoc2V0dGluZ3MoKS5zaG93UGxhdGZvcm1MYXllclRy
ZWUpIHsKKyAgICBpZiAoc2V0dGluZ3MoKS5zaG93UGxhdGZvcm1MYXllclRyZWUgfHwgc2V0dGlu
Z3MoKS5zaG93Q29tcG9zaXRvclJlY3RzKSB7CiAgICAgICAgIGh1ZFNpemUuc2V0V2lkdGgobWlu
KDIwNDgsIG1fbGF5ZXJSZW5kZXJlci0+dmlld3BvcnRXaWR0aCgpKSk7CiAgICAgICAgIGh1ZFNp
emUuc2V0SGVpZ2h0KG1pbigyMDQ4LCBtX2xheWVyUmVuZGVyZXItPnZpZXdwb3J0SGVpZ2h0KCkp
KTsKICAgICB9IGVsc2UgewpAQCAtMTgzLDYgKzE4MywxMyBAQCB2b2lkIENDSGVhZHNVcERpc3Bs
YXk6OmRyYXdIdWRDb250ZW50cyhHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgSW50U2l6ZSYg
aHVkUwogCiAgICAgaWYgKHNldHRpbmdzKCkuc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKQogICAgICAg
ICBkcmF3UGxhdGZvcm1MYXllclRyZWUoY3R4LCBwbGF0Zm9ybUxheWVyVHJlZVRvcCk7CisKKyAg
ICBpZiAoc2V0dGluZ3MoKS5zaG93Q29tcG9zaXRvclJlY3RzKSB7CisgICAgICAgIGRyYXdDb21w
b3NpdG9yUmVjdHMoY3R4KTsKKyAgICAgICAgbV91cGRhdGVSZWN0c1RoaXNVcGRhdGUuY2xlYXIo
KTsKKyAgICAgICAgbV9kcmF3UmVjdHNUaGlzVXBkYXRlLmNsZWFyKCk7CisgICAgICAgIG1fZXhw
b3NlZFJlY3RzVGhpc1VwZGF0ZS5jbGVhcigpOworICAgIH0KIH0KIAogdm9pZCBDQ0hlYWRzVXBE
aXNwbGF5OjpkcmF3RlBTQ291bnRlcihHcmFwaGljc0NvbnRleHQqIGN0eCwgaW50IHRvcCwgaW50
IGhlaWdodCkKQEAgLTI1NCw2ICsyNjEsNDggQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3
UGxhdGZvcm1MYXllclRyZWUoR3JhcGhpY3NDb250ZXh0KiBjdHgsIGludCB0b3ApCiAgICAgfQog
fQogCit2b2lkIENDSGVhZHNVcERpc3BsYXk6OmRyYXdDb21wb3NpdG9yUmVjdHMoR3JhcGhpY3ND
b250ZXh0KiBjdHgpCit7CisgICAgY3R4LT5zZXRTdHJva2VDb2xvcihDb2xvcigyNTUsIDAsIDAs
IDI1NSksIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV91cGRhdGVSZWN0c1RoaXNVcGRhdGUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY3R4LT5maWxs
UmVjdChtX3VwZGF0ZVJlY3RzVGhpc1VwZGF0ZVtpXSwgQ29sb3IoMjU1LCAwLCAwLCAzMCksIENv
bG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICBjdHgtPnN0cm9rZVJlY3QobV91cGRhdGVSZWN0
c1RoaXNVcGRhdGVbaV0sIDIuMCk7CisgICAgfQorCisgICAgY3R4LT5zZXRTdHJva2VDb2xvcihD
b2xvcigwLCAwLCAyNTUsIDI1NSksIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9kcmF3UmVjdHNUaGlzVXBkYXRlLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGN0eC0+ZmlsbFJlY3QobV9kcmF3UmVjdHNUaGlzVXBkYXRlW2ldLCBDb2xvcigwLCAwLCAy
NTUsIDMwKSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGN0eC0+c3Ryb2tlUmVjdCht
X2RyYXdSZWN0c1RoaXNVcGRhdGVbaV0sIDIuMCk7CisgICAgfQorCisgICAgY3R4LT5zZXRTdHJv
a2VDb2xvcihDb2xvcigxNTAsIDAsIDIyMCwgMjU1KSwgQ29sb3JTcGFjZURldmljZVJHQik7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2V4cG9zZWRSZWN0c1RoaXNVcGRhdGUuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgY3R4LT5maWxsUmVjdChtX2V4cG9zZWRSZWN0c1RoaXNVcGRhdGVb
aV0sIENvbG9yKDE1MCwgMCwgMjIwLCAzMCksIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAg
ICBjdHgtPnN0cm9rZVJlY3QobV9leHBvc2VkUmVjdHNUaGlzVXBkYXRlW2ldLCAyLjApOworICAg
IH0KKworICAgIGN0eC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3IoMCwgMjU1LCAwLCAyNTUpLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKKyAgICBjdHgtPnN0cm9rZVJlY3QobV9sYXllclJlbmRlcmVyLT5j
b21wb3NpdG9yU2Npc3NvclJlY3QoKSwgNC4wKTsKK30KKwordm9pZCBDQ0hlYWRzVXBEaXNwbGF5
OjphZGRVcGRhdGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc2NyZWVuU3BhY2VVcGRhdGVSZWN0KQor
eworICAgIGlmIChzZXR0aW5ncygpLnNob3dDb21wb3NpdG9yUmVjdHMpCisgICAgICAgIG1fdXBk
YXRlUmVjdHNUaGlzVXBkYXRlLmFwcGVuZChzY3JlZW5TcGFjZVVwZGF0ZVJlY3QpOworfQorCit2
b2lkIENDSGVhZHNVcERpc3BsYXk6OmFkZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc2NyZWVu
U3BhY2VEcmF3UmVjdCkKK3sKKyAgICBpZiAoc2V0dGluZ3MoKS5zaG93Q29tcG9zaXRvclJlY3Rz
KQorICAgICAgICBtX2RyYXdSZWN0c1RoaXNVcGRhdGUuYXBwZW5kKHNjcmVlblNwYWNlRHJhd1Jl
Y3QpOworfQorCit2b2lkIENDSGVhZHNVcERpc3BsYXk6OmFkZEV4cG9zZWRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgc2NyZWVuU3BhY2VFeHBvc2VkUmVjdCkKK3sKKyAgICBpZiAoc2V0dGluZ3MoKS5z
aG93Q29tcG9zaXRvclJlY3RzKQorICAgICAgICBtX2V4cG9zZWRSZWN0c1RoaXNVcGRhdGUuYXBw
ZW5kKHNjcmVlblNwYWNlRXhwb3NlZFJlY3QpOworfQorCiBjb25zdCBDQ1NldHRpbmdzJiBDQ0hl
YWRzVXBEaXNwbGF5OjpzZXR0aW5ncygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbGF5ZXJSZW5k
ZXJlci0+c2V0dGluZ3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaAppbmRleCAwNWNi
MjBkNTI2OTc5ODU5MjY4ZTQxNzc0ZmNhYTRhNGNlMWJhMmE0Li5mNWQyZWYzYTMzMmZkN2EwYzdh
OGNmMzZmZjZjYmRhYzJiNzI2ODM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCkBA
IC01OCw2ICs1OCwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBlbmFibGVkKCkgY29uc3Q7CiAgICAg
dm9pZCBkcmF3KCk7CiAKKyAgICB2b2lkIGFkZFVwZGF0ZVJlY3QoY29uc3QgRmxvYXRSZWN0Jik7
CisgICAgdm9pZCBhZGREcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGFkZEV4
cG9zZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworCiAgICAgdHlwZWRlZiBQcm9ncmFtQmluZGlu
ZzxWZXJ0ZXhTaGFkZXJQb3NUZXgsIEZyYWdtZW50U2hhZGVyUkdCQVRleFN3aXp6bGVBbHBoYT4g
UHJvZ3JhbTsKIAogcHJpdmF0ZToKQEAgLTY1LDYgKzY5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGRyYXdIdWRDb250ZW50cyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRTaXplJiBodWRTaXpl
KTsKICAgICB2b2lkIGRyYXdGUFNDb3VudGVyKEdyYXBoaWNzQ29udGV4dCosIGludCB0b3AsIGlu
dCBoZWlnaHQpOwogICAgIHZvaWQgZHJhd1BsYXRmb3JtTGF5ZXJUcmVlKEdyYXBoaWNzQ29udGV4
dCosIGludCB0b3ApOworICAgIHZvaWQgZHJhd0NvbXBvc2l0b3JSZWN0cyhHcmFwaGljc0NvbnRl
eHQqKTsKICAgICBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0OwogCiAgICAgaW50
IG1fY3VycmVudEZyYW1lTnVtYmVyOwpAQCAtODIsNiArODcsMTAgQEAgcHJpdmF0ZToKICAgICBP
d25QdHI8Rm9udD4gbV9tZWRpdW1Gb250OwogCiAgICAgYm9vbCBtX3VzZU1hcFN1YkZvclVwbG9h
ZHM7CisKKyAgICBWZWN0b3I8RmxvYXRSZWN0PiBtX3VwZGF0ZVJlY3RzVGhpc1VwZGF0ZTsKKyAg
ICBWZWN0b3I8RmxvYXRSZWN0PiBtX2RyYXdSZWN0c1RoaXNVcGRhdGU7CisgICAgVmVjdG9yPEZs
b2F0UmVjdD4gbV9leHBvc2VkUmVjdHNUaGlzVXBkYXRlOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuaAppbmRleCAxYzRkNDMxZDg2MDIzNDhjZDdmZWQ4N2U2MGY4OGZmYjU1NDY5
MWQwLi5lMzdjOGZlMTA4YTExNGY1ZWZlZGMzN2Q4ZmEyNTc2ZmEzOTUzYzFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtNzEsMTMgKzcxLDE3IEBAIHN0cnVjdCBDQ1NldHRpbmdz
IHsKICAgICAgICAgICAgICwgY29tcG9zaXRlT2Zmc2NyZWVuKGZhbHNlKQogICAgICAgICAgICAg
LCBlbmFibGVDb21wb3NpdG9yVGhyZWFkKGZhbHNlKQogICAgICAgICAgICAgLCBzaG93RlBTQ291
bnRlcihmYWxzZSkKLSAgICAgICAgICAgICwgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGZhbHNlKSB7
IH0KKyAgICAgICAgICAgICwgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGZhbHNlKQorICAgICAgICAg
ICAgLCBzaG93Q29tcG9zaXRvclJlY3RzKGZhbHNlKQorICAgICAgICAgICAgLCB1c2VDb21wb3Np
dG9yU2Npc3NvcihmYWxzZSkgeyB9CiAKICAgICBib29sIGFjY2VsZXJhdGVQYWludGluZzsKICAg
ICBib29sIGNvbXBvc2l0ZU9mZnNjcmVlbjsKICAgICBib29sIGVuYWJsZUNvbXBvc2l0b3JUaHJl
YWQ7CiAgICAgYm9vbCBzaG93RlBTQ291bnRlcjsKICAgICBib29sIHNob3dQbGF0Zm9ybUxheWVy
VHJlZTsKKyAgICBib29sIHNob3dDb21wb3NpdG9yUmVjdHM7CisgICAgYm9vbCB1c2VDb21wb3Np
dG9yU2Npc3NvcjsKIH07CiAKIC8vIFByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIGFuIEltcGwncyBy
ZW5kZXJpbmcgY2FwYWJpbGl0aWVzIGJhY2sgdG8gdGhlIENDTGF5ZXJUcmVlSG9zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113934</attachid>
            <date>2011-11-07 15:03:12 -0800</date>
            <delta_ts>2011-11-29 18:37:58 -0800</delta_ts>
            <desc>latest working implementation, still needs tests</desc>
            <filename>bug-67341-20111107150311.patch</filename>
            <type>text/plain</type>
            <size>39372</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTkzOTkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2ZDEyMTUyMGUzNWUyODdi
ZDBhNTdiYmNmNjA5ZDA0M2EwYWM1ZTVjLi5kNjA3ZDJiODhjNTBkZmNkODcwMTgxMTg0MzI2YWJi
OTZjOTdiNzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTEtMTEtMDcgIFNoYXdu
IFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBT
Y2lzc29yIHJlY3Qgb3B0aW1pemF0aW9uIGZvciBjaHJvbWl1bSBjb21wb3NpdG9yCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzM0MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgb25s
eSBmb3IgcmV2aWV3LiAgVGVzdCBjbGFzcyBleGlzdHMgYnV0IG5vdCB5ZXQKKyAgICAgICAgaW1w
bGVtZW50ZWQuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6bG9nVXBkYXRlUmVjdHNUb0hVRCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmxvZ0RyYXdSZWN0c1RvSFVEKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVy
bmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weU9mZnNj
cmVlblRleHR1cmVUb0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NIZWFk
c1VwRGlzcGxheTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0hlYWRzVXBEaXNwbGF5Ojpk
cmF3SHVkQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlzcGxheTo6ZHJh
d0NvbXBvc2l0b3JSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0hlYWRzVXBEaXNwbGF5Ojph
ZGRVcGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmFkZERy
YXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmFkZEV4cG9zZWRS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBE
aXNwbGF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0hlYWRzVXBEaXNwbGF5OjpzZXRDb21wb3Np
dG9yU2Npc3NvclJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1NldHRpbmdzOjpDQ1NldHRp
bmdzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1
cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpkcmF3KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6c2Npc3NvclJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjp1cGRhdGVTY2lzc29yUmVjdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2lzc29yRW5naW5lLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpIQUNLWVNjcm9sbEZpeCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1NjaXNzb3JFbmdpbmU6OkNDU2Npc3NvckVuZ2luZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1NjaXNzb3JFbmdpbmU6OmNvbXB1dGVTY2lzc29yUmVjdEZvckFsbFN1cmZhY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDU2Npc3NvckVuZ2luZTo6Y29tcHV0ZU5leHRTY2lzc29yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDU2Npc3NvckVuZ2luZTo6Y29tcHV0ZVBhcnRpYWxTY2lzc29yRm9yQWN0
aXZlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Npc3NvckVuZ2luZTo6Y29tcHV0ZVBh
cnRpYWxTY2lzc29yRm9yTGVmdG92ZXJSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NjaXNz
b3JFbmdpbmU6OnJlbW92ZVJlY3RGcm9tUHJldmlvdXNGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1NjaXNzb3JFbmdpbmU6OnNhdmVSZWN0Rm9yTmV4dEZyYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDU2Npc3NvckVuZ2luZTo6ZXh0ZW5kU2Npc3NvckZvckxheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDU2Npc3NvckVuZ2luZTo6ZXh0ZW5kU2Npc3NvckZvclJlbmRlclN1cmZhY2UpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Npc3NvckVuZ2luZS5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDU2Npc3NvckVuZ2luZTo6Y3VycmVudFNjaXNz
b3JSZWN0KToKKwogMjAxMS0xMS0wNiAgTm9lbCBHb3Jkb24gIDxub2VsLmdvcmRvbkBnbWFpbC5j
b20+CiAKICAgICAgICAgRml4IHNvbWUgc3R5bGUgaXNzdWVzIGluIEltYWdlQnVmZmVyLmgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZDEzYjg4M2YwM2Q2ODZiZjAwNjY0M2NmODdiZWE0
YmJmM2VkNTYzNC4uMjYyMzcxMWUyZjNlMzNjYWM2MGQzZTlhNmNmOTZlMWZkNzM0NDQzNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0xMS0wNyAgU2hh
d24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IFNjaXNzb3IgcmVjdCBvcHRpbWl6YXRpb24gZm9yIGNocm9taXVtIGNvbXBvc2l0b3IKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MzQxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBqdXN0IGEg
ZHJhZnQgcGF0Y2ggYW5kIHRoZSB0ZXN0cyBhcmUgbm90IHlldCBpbXBsZW1lbnRlZC4KKyAgICAg
ICAgCisgICAgICAgICogdGVzdHMvQ0NTY2lzc29yRW5naW5lVGVzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV1RGOjpURVNUKToKKwogMjAxMS0xMS0wNSAgRGFuaWVsIENoZW5nICA8ZGNoZW5nQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFVzZSB0aGUgc2VjdXJpdHkgb3JpZ2lu
IGluc3RlYWQgb2YgdGhlIFVSTCB3aGVuIGNoZWNraW5nIG5vdGlmaWNhdGlvbiBwZXJtaXNzaW9u
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCmluZGV4IGJhMGNlMjYwMjMxM2I0ODA4ZDRiNWI2YTQxMzBhNjk2NjA2
NTk5MjEuLjFlNzcwZjVhYTYyNjU3ZDRlNWExMDU2N2IyODk0MjRlYzQ5MGNhMTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTM1NzIsNiArMzU3Miw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmUuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlclN0YXRlTWFj
aGluZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Nj
aXNzb3JFbmdpbmUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NjaXNzb3JFbmdpbmUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTY29wZWRNYWluVGhyZWFkUHJveHkuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxDb250cm9sbGVyLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
Y3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGRmMjU0MzU2
YmRiZDYxZjgyZDkyMWU4ZTljMGRjZWVjOWFhNWU4YTIuLjM4YmMzZmQ4ZTUxZDM4OTc2MGFlMjIz
NTRhMTdmOWFkODc4NWNiN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cApAQCAtMTA4LDYgKzEwOCwxOCBAQCBzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggc2NyZWVu
TWF0cml4KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIHJldHVybiBz
Y3JlZW47CiB9CiAKKy8vIEZJWE1FOiB0aGlzIHNjcm9sbCBmaXggaXMgbm90IGludGVuZGVkIHRv
IGxhbmQsIGJ1dCBpcyByZXF1aXJlZCB0byBnZXQgdGhpcyBwYXRjaAorLy8gICAgICAgIHRvIHdv
cmsgcHJvcGVybHkgd2hpbGUgd2FpdGluZyBmb3IgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0IHNj
cm9sbGluZworLy8gICAgICAgIHRvIGJlIGZpeGVkLiBPbmNlIHNjcm9sbGluZyBpcyBmaXhlZCwg
d2UgY2FuIHJlbW92ZSB0aGlzIGZ1bmN0aW9uIGFuZCB1c2UgdGhlCisvLyAgICAgICAgb3JpZ2lu
YWwgcmVjdCBpbiBpdHMgcGxhY2UuCitzdGF0aWMgRmxvYXRSZWN0IEhBQ0tZU2Nyb2xsRml4KEND
TGF5ZXJJbXBsKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIEZsb2F0UmVj
dCBzY3JvbGxlZFJlY3QgPSByZWN0OworICAgIGlmIChsYXllci0+aXNOb25Db21wb3NpdGVkQ29u
dGVudCgpKQorICAgICAgICBzY3JvbGxlZFJlY3QubW92ZSgtbGF5ZXItPnNjcm9sbFBvc2l0aW9u
KCkueCgpLCAtbGF5ZXItPnNjcm9sbFBvc2l0aW9uKCkueSgpKTsKKyAgICByZXR1cm4gc2Nyb2xs
ZWRSZWN0OworfQorCiAjaWYgVVNFKFNLSUEpCiBib29sIGNvbnRleHRTdXBwb3J0c0FjY2VsZXJh
dGVkUGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB7CkBAIC0zMDEsNiArMzEz
LDQ2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKCkKICAgICAgICAg
Y29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKTsKIH0KIAordm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmxvZ1VwZGF0ZVJlY3RzVG9IVUQoQ0NMYXllckltcGwqIGxheWVyKQoreworICAg
IC8vIFdlIHdvdWxkIGxpa2UgdG8gdmlzdWFsaXplIHdoZXJlIGFueSBsYXllcidzIHVkcGF0ZSBy
ZWN0IGhhcyBjaGFuZ2VkLAorICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGlzIGxheWVy
IGlzIHNraXBwZWQgZm9yIGFjdHVhbCBkcmF3aW5nIG9yIG5vdC4KKyAgICAvLyBUaGVyZWZvcmUg
d2UgdHJhdmVyc2UgcmVjdXJzaXZlbHkgb3ZlciBhbGwgbGF5ZXJzLCBub3QganVzdCB0aGUKKyAg
ICAvLyByZW5kZXIgc3VyZmFjZSBsaXN0LgorCisgICAgaWYgKCFsYXllci0+dXBkYXRlUmVjdCgp
LmlzRW1wdHkoKSAmJiBsYXllci0+ZHJhd3NDb250ZW50KCkpCisgICAgICAgIG1faGVhZHNVcERp
c3BsYXktPmFkZFVwZGF0ZVJlY3QobGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkubWFwUmVj
dChIQUNLWVNjcm9sbEZpeChsYXllciwgbGF5ZXItPnVwZGF0ZVJlY3QoKSkpKTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAg
ICAgICAgbG9nVXBkYXRlUmVjdHNUb0hVRChsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7Cit9
CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpsb2dEcmF3UmVjdHNUb0hVRChjb25zdCBD
Q0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAgICBmb3IgKGludCBzdXJm
YWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRl
eCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKKyAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1
cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsK
KyAgICAgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxh
eWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlKTsKKwor
ICAgICAgICAvLyBGSVhNRTogdGhpcyB3aWxsIGNvbmZsaWN0IHdpdGggaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMDM4CisgICAgICAgIGlmICghcmVuZGVyU3VyZmFj
ZS0+bGF5ZXJMaXN0KCkuc2l6ZSgpIHx8ICFyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY29uc3QgQ0NMYXllckxpc3QmIGxheWVy
TGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllcklu
ZGV4KSB7CisgICAgICAgICAgICBDQ0xheWVySW1wbCogbGF5ZXIgPSBsYXllckxpc3RbbGF5ZXJJ
bmRleF0uZ2V0KCk7CisKKyAgICAgICAgICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYm
IGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgIT0gbV9jdXJyZW50UmVuZGVyU3VyZmFjZSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8gTm90ZSwgdGhlIHdheSB0aGlz
IGlzIGRlZmluZWQsIHVwZGF0ZSByZWN0cyAod2hpY2ggYWxzbyByZXF1aXJlIG9mZmljaWFsbHkg
YmVpbmcgZHJhd24pIGFyZSBub3QgbG9nZ2VkIGFzICJkcmF3IHJlY3RzIi4KKyAgICAgICAgICAg
IC8vIHNvIGlmIHRoZSBwdXJwb3NlIG9mIHZpc3VhbGl6aW5nIHRoaXMgaXMgdG8gc2VlIHdoYXQg
c3R1ZmYgaXMgZHJhd24sIHdlIGhhdmUgdG8gYWxzbyBsb29rIGF0IHRoZSB1cGRhdGUgcmVjdHMu
CisgICAgICAgICAgICBpZiAobGF5ZXItPmxheWVyUHJvcGVydHlDaGFuZ2VkKCkpCisgICAgICAg
ICAgICAgICAgbV9oZWFkc1VwRGlzcGxheS0+YWRkRHJhd1JlY3QobGF5ZXItPnNjcmVlblNwYWNl
VHJhbnNmb3JtKCkubWFwUmVjdChIQUNLWVNjcm9sbEZpeChsYXllciwgRmxvYXRSZWN0KEZsb2F0
UG9pbnQ6Onplcm8oKSwgbGF5ZXItPmJvdW5kcygpKSkpKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFj
ZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KQogewogICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMiLCB0aGlzLCAwKTsKQEAgLTMzOSw3ICsz
OTEsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc09udG9SZW5kZXJT
dXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYQogICAgIH0KIH0KIAotCiB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKIHsKICAgICBpZiAodmlld3Bv
cnRTaXplKCkuaXNFbXB0eSgpIHx8ICFyb290TGF5ZXIoKSkKQEAgLTM5Myw2ICs0NDQsMTggQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCgpCiAgICAgR0xD
KG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6
Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpKTsKICAgICBHTEMo
bV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJ
U1NPUl9URVNUKSk7CiAKKyAgICBpZiAoc2V0dGluZ3MoKS51c2VDb21wb3NpdG9yU2Npc3NvcikK
KyAgICAgICAgQ0NTY2lzc29yRW5naW5lOjpjb21wdXRlU2Npc3NvclJlY3RGb3JBbGxTdXJmYWNl
cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKworICAgIGlmIChzZXR0aW5ncygpLnNob3dDb21w
b3NpdG9yUmVjdHMpIHsKKyAgICAgICAgLy8gdGhlIGFjdHVhbCBkcmF3aW5nIG9mIHRoZXNlIHJl
Y3RzIGlzIGRlZmVycmVkIHVudGlsIHRoZSBIVUQgZHJhd3MsIHNvIHRoYXQgdGhlc2UgcmVjdHMg
c3RheSBvbiB0b3AuCisgICAgICAgIC8vIHRoaXMgbG9nZ2luZyBtdXN0IGhhcHBlbiBiZWZvcmUg
bGF5ZXIgaXMgYWN0dWFsbHkgZHJhd24sIHNpbmNlIHdlIHJlbHkgb24gdGhlIGxheWVyJ3MgcHJv
cGVydGllcyBiZWZvcmUgdGhleSBhcmUgcmVzZXQuCisgICAgICAgIGxvZ1VwZGF0ZVJlY3RzVG9I
VUQocm9vdERyYXdMYXllcik7CisgICAgICAgIGxvZ0RyYXdSZWN0c1RvSFVEKHJlbmRlclN1cmZh
Y2VMYXllckxpc3QpOworICAgICAgICBBU1NFUlQocm9vdExheWVyKCktPnJlbmRlclN1cmZhY2Uo
KSk7CisgICAgICAgIG1faGVhZHNVcERpc3BsYXktPnNldENvbXBvc2l0b3JTY2lzc29yUmVjdChy
b290TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpKTsKKyAgICB9CisKICAg
ICBkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKHJvb3REcmF3TGF5ZXIsIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QpOwogCiAgICAgaWYgKG1faGVhZHNVcERpc3BsYXktPmVuYWJsZWQoKSkgewpA
QCAtNTMwLDcgKzU5Myw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb3B5T2Zmc2Ny
ZWVuVGV4dHVyZVRvRGlzcGxheSgpCiAgICAgICAgIGRyYXdUcmFuc2Zvcm0udHJhbnNsYXRlM2Qo
MC41ICogbV9kZWZhdWx0UmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKS53aWR0aCgpLCAwLjUg
KiBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpLmhlaWdodCgpLCAwKTsKICAg
ICAgICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZS0+c2V0RHJhd1RyYW5zZm9ybShkcmF3VHJhbnNm
b3JtKTsKICAgICAgICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZS0+c2V0RHJhd09wYWNpdHkoMSk7
Ci0gICAgICAgIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPmRyYXcodGhpcywgbV9kZWZhdWx0UmVu
ZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKSk7CisgICAgICAgIG1fZGVmYXVsdFJlbmRlclN1cmZh
Y2UtPmRyYXcodGhpcywgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSk7CiAgICAgfQogfQogCkBAIC01
NzEsNyArNjM0LDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclN1cmZh
Y2UoQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlKQogdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIENDUmVuZGVyU3VyZmFjZSogdGFy
Z2V0U3VyZmFjZSkKIHsKICAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllci0+
cmVuZGVyU3VyZmFjZSgpICE9IHRhcmdldFN1cmZhY2UpIHsKLSAgICAgICAgbGF5ZXItPnJlbmRl
clN1cmZhY2UoKS0+ZHJhdyh0aGlzLCBsYXllci0+Z2V0RHJhd1JlY3QoKSk7CisgICAgICAgIGxh
eWVyLT5yZW5kZXJTdXJmYWNlKCktPmRyYXcodGhpcywgdGFyZ2V0U3VyZmFjZSk7CiAgICAgICAg
IGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPnJlbGVhc2VDb250ZW50c1RleHR1cmUoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTU4Miw4ICs2NDUsMTQgQEAgdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIENDUmVuZGVyU3VyZmFjZSog
dGFyZ2UKICAgICBpZiAodmlzaWJsZUxheWVyUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChsYXllci0+dXNlc0xheWVyQ2xpcHBpbmcoKSkKLSAgICAgICAgc2V0U2Np
c3NvclRvUmVjdChsYXllci0+Y2xpcFJlY3QoKSk7CisgICAgRmxvYXRSZWN0IHN1cmZhY2VTY2lz
c29yUmVjdCA9IHRhcmdldFN1cmZhY2UtPnNjaXNzb3JSZWN0KCk7CisgICAgaWYgKGxheWVyLT51
c2VzTGF5ZXJDbGlwcGluZygpKSB7CisgICAgICAgIEZsb2F0UmVjdCBsYXllclNjaXNzb3JSZWN0
ID0gbGF5ZXItPmNsaXBSZWN0KCk7CisgICAgICAgIGlmIChzZXR0aW5ncygpLnVzZUNvbXBvc2l0
b3JTY2lzc29yKQorICAgICAgICAgICAgbGF5ZXJTY2lzc29yUmVjdC5pbnRlcnNlY3Qoc3VyZmFj
ZVNjaXNzb3JSZWN0KTsKKyAgICAgICAgc2V0U2Npc3NvclRvUmVjdChlbmNsb3NpbmdJbnRSZWN0
KGxheWVyU2Npc3NvclJlY3QpKTsKKyAgICB9IGVsc2UgaWYgKHNldHRpbmdzKCkudXNlQ29tcG9z
aXRvclNjaXNzb3IpCisgICAgICAgIHNldFNjaXNzb3JUb1JlY3QoZW5jbG9zaW5nSW50UmVjdChz
dXJmYWNlU2Npc3NvclJlY3QpKTsKICAgICBlbHNlCiAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0
KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7
CiAKQEAgLTU5OCw2ICs2NjcsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xh
eWVyKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZQogCiAgICAgLy8g
RHJhdyB0aGUgZGVidWcgYm9yZGVyIGlmIHRoZXJlIGlzIG9uZS4KICAgICBsYXllci0+ZHJhd0Rl
YnVnQm9yZGVyKHRoaXMpOworCisgICAgbGF5ZXItPnJlc2V0TGF5ZXJQcm9wZXJ0eUNoYW5nZWQo
KTsKIH0KIAogLy8gU2V0cyB0aGUgc2Npc3NvciByZWdpb24gdG8gdGhlIGdpdmVuIHJlY3Rhbmds
ZS4gVGhlIGNvb3JkaW5hdGUgc3lzdGVtIGZvciB0aGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmgKaW5kZXggNjQ2ZWE2ZTVjNDQ4YTU4YzYxMjQxMzQyYjBmOWE2ZWFkZGFlZjQ0Ny4u
YjI2YzcwMzU5YWM1ZmQxNGM3Yzc5OGNiZjk2NzI1ODEwZDAzODBkNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJjYy9DQ0xh
eWVyU29ydGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgogI2luY2x1
ZGUgImNjL0NDUGx1Z2luTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NTY2lzc29yRW5naW5l
LmgiCiAjaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC0xNDksOCArMTUwLDYgQEAg
cHVibGljOgogCiAgICAgR0MzRGVudW0gYmVzdFRleHR1cmVGb3JtYXQoKTsKIAotICAgIHR5cGVk
ZWYgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBDQ0xheWVyTGlzdDsKLQogICAgIHN0YXRp
YyB2b2lkIHRvR0xNYXRyaXgoZmxvYXQqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwog
ICAgIHZvaWQgZHJhd1RleHR1cmVkUXVhZChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5
ZXJNYXRyaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBo
ZWlnaHQsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEZsb2F0UXVhZCYsCkBAIC0xNjQsNiArMTYzLDkg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMoQ0NMYXll
ckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KTsKICAgICB2b2lkIGRyYXdMYXllcihDQ0xheWVySW1wbCosIENDUmVuZGVyU3VyZmFj
ZSopOwogCisgICAgdm9pZCBsb2dVcGRhdGVSZWN0c1RvSFVEKENDTGF5ZXJJbXBsKik7CisgICAg
dm9pZCBsb2dEcmF3UmVjdHNUb0hVRChjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCk7CisKICAgICBNYW5hZ2VkVGV4dHVyZSogZ2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJl
KCk7CiAgICAgdm9pZCBjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpOwogCkBAIC0yMzQs
NiArMjM2LDggQEAgcHJpdmF0ZToKICAgICBDQ0xheWVyU29ydGVyIG1fbGF5ZXJTb3J0ZXI7CiAK
ICAgICBGbG9hdFF1YWQgbV9zaGFyZWRHZW9tZXRyeVF1YWQ7CisKKyAgICBDQ1NjaXNzb3JFbmdp
bmUgbV9jb21wb3NpdG9yU2Npc3NvcjsKIH07CiAKIC8vIFNldHRpbmcgREVCVUdfR0xfQ0FMTFMg
dG8gMSB3aWxsIGNhbGwgZ2xHZXRFcnJvcigpIGFmdGVyIGFsbW9zdCBldmVyeSBHTApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFk
c1VwRGlzcGxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAppbmRleCBiNjhmNDZjZjhiODFjOWU3NmUzNzc5YzY5
MDFiY2I5NDU1MWM5MWNmLi4xYTYyZGUzMGY2NWE3Mzg2YjJlYmNiZDU2NGQ3ZGJiMjAxMzcxNGRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcApAQCAtMTAzLDcgKzEwMyw3IEBA
IHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhdygpCiAKICAgICAvLyBVc2UgYSBmdWxsc2NyZWVu
IHRleHR1cmUgb25seSBpZiB3ZSBuZWVkIHRvLi4uCiAgICAgSW50U2l6ZSBodWRTaXplOwotICAg
IGlmIChzZXR0aW5ncygpLnNob3dQbGF0Zm9ybUxheWVyVHJlZSkgeworICAgIGlmIChzZXR0aW5n
cygpLnNob3dQbGF0Zm9ybUxheWVyVHJlZSB8fCBzZXR0aW5ncygpLnNob3dDb21wb3NpdG9yUmVj
dHMpIHsKICAgICAgICAgaHVkU2l6ZS5zZXRXaWR0aChtaW4oMjA0OCwgbV9sYXllclJlbmRlcmVy
LT52aWV3cG9ydFdpZHRoKCkpKTsKICAgICAgICAgaHVkU2l6ZS5zZXRIZWlnaHQobWluKDIwNDgs
IG1fbGF5ZXJSZW5kZXJlci0+dmlld3BvcnRIZWlnaHQoKSkpOwogICAgIH0gZWxzZSB7CkBAIC0x
ODMsNiArMTgzLDEzIEBAIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhd0h1ZENvbnRlbnRzKEdy
YXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBJbnRTaXplJiBodWRTCiAKICAgICBpZiAoc2V0dGlu
Z3MoKS5zaG93UGxhdGZvcm1MYXllclRyZWUpCiAgICAgICAgIGRyYXdQbGF0Zm9ybUxheWVyVHJl
ZShjdHgsIHBsYXRmb3JtTGF5ZXJUcmVlVG9wKTsKKworICAgIGlmIChzZXR0aW5ncygpLnNob3dD
b21wb3NpdG9yUmVjdHMpIHsKKyAgICAgICAgZHJhd0NvbXBvc2l0b3JSZWN0cyhjdHgpOworICAg
ICAgICBtX3VwZGF0ZVJlY3RzVGhpc1VwZGF0ZS5jbGVhcigpOworICAgICAgICBtX2RyYXdSZWN0
c1RoaXNVcGRhdGUuY2xlYXIoKTsKKyAgICAgICAgbV9leHBvc2VkUmVjdHNUaGlzVXBkYXRlLmNs
ZWFyKCk7CisgICAgfQogfQogCiB2b2lkIENDSGVhZHNVcERpc3BsYXk6OmRyYXdGUFNDb3VudGVy
KEdyYXBoaWNzQ29udGV4dCogY3R4LCBpbnQgdG9wLCBpbnQgaGVpZ2h0KQpAQCAtMjU0LDYgKzI2
MSw0OCBAQCB2b2lkIENDSGVhZHNVcERpc3BsYXk6OmRyYXdQbGF0Zm9ybUxheWVyVHJlZShHcmFw
aGljc0NvbnRleHQqIGN0eCwgaW50IHRvcCkKICAgICB9CiB9CiAKK3ZvaWQgQ0NIZWFkc1VwRGlz
cGxheTo6ZHJhd0NvbXBvc2l0b3JSZWN0cyhHcmFwaGljc0NvbnRleHQqIGN0eCkKK3sKKyAgICBj
dHgtPnNldFN0cm9rZUNvbG9yKENvbG9yKDI1NSwgMCwgMCwgMjU1KSwgQ29sb3JTcGFjZURldmlj
ZVJHQik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3VwZGF0ZVJlY3RzVGhpc1VwZGF0
ZS5zaXplKCk7ICsraSkgeworICAgICAgICBjdHgtPmZpbGxSZWN0KG1fdXBkYXRlUmVjdHNUaGlz
VXBkYXRlW2ldLCBDb2xvcigyNTUsIDAsIDAsIDMwKSwgQ29sb3JTcGFjZURldmljZVJHQik7Cisg
ICAgICAgIGN0eC0+c3Ryb2tlUmVjdChtX3VwZGF0ZVJlY3RzVGhpc1VwZGF0ZVtpXSwgMi4wKTsK
KyAgICB9CisKKyAgICBjdHgtPnNldFN0cm9rZUNvbG9yKENvbG9yKDAsIDAsIDI1NSwgMjU1KSwg
Q29sb3JTcGFjZURldmljZVJHQik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2RyYXdS
ZWN0c1RoaXNVcGRhdGUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY3R4LT5maWxsUmVjdChtX2Ry
YXdSZWN0c1RoaXNVcGRhdGVbaV0sIENvbG9yKDAsIDAsIDI1NSwgMzApLCBDb2xvclNwYWNlRGV2
aWNlUkdCKTsKKyAgICAgICAgY3R4LT5zdHJva2VSZWN0KG1fZHJhd1JlY3RzVGhpc1VwZGF0ZVtp
XSwgMi4wKTsKKyAgICB9CisKKyAgICBjdHgtPnNldFN0cm9rZUNvbG9yKENvbG9yKDE1MCwgMCwg
MjIwLCAyNTUpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fZXhwb3NlZFJlY3RzVGhpc1VwZGF0ZS5zaXplKCk7ICsraSkgeworICAgICAgICBjdHgt
PmZpbGxSZWN0KG1fZXhwb3NlZFJlY3RzVGhpc1VwZGF0ZVtpXSwgQ29sb3IoMTUwLCAwLCAyMjAs
IDMwKSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGN0eC0+c3Ryb2tlUmVjdChtX2V4
cG9zZWRSZWN0c1RoaXNVcGRhdGVbaV0sIDIuMCk7CisgICAgfQorCisgICAgY3R4LT5zZXRTdHJv
a2VDb2xvcihDb2xvcigwLCAyNTUsIDAsIDI1NSksIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAg
IGN0eC0+c3Ryb2tlUmVjdChtX2NvbXBvc2l0b3JTY2lzc29yUmVjdCwgNC4wKTsKK30KKwordm9p
ZCBDQ0hlYWRzVXBEaXNwbGF5OjphZGRVcGRhdGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc2NyZWVu
U3BhY2VVcGRhdGVSZWN0KQoreworICAgIGlmIChzZXR0aW5ncygpLnNob3dDb21wb3NpdG9yUmVj
dHMpCisgICAgICAgIG1fdXBkYXRlUmVjdHNUaGlzVXBkYXRlLmFwcGVuZChzY3JlZW5TcGFjZVVw
ZGF0ZVJlY3QpOworfQorCit2b2lkIENDSGVhZHNVcERpc3BsYXk6OmFkZERyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgc2NyZWVuU3BhY2VEcmF3UmVjdCkKK3sKKyAgICBpZiAoc2V0dGluZ3MoKS5z
aG93Q29tcG9zaXRvclJlY3RzKQorICAgICAgICBtX2RyYXdSZWN0c1RoaXNVcGRhdGUuYXBwZW5k
KHNjcmVlblNwYWNlRHJhd1JlY3QpOworfQorCit2b2lkIENDSGVhZHNVcERpc3BsYXk6OmFkZEV4
cG9zZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc2NyZWVuU3BhY2VFeHBvc2VkUmVjdCkKK3sKKyAg
ICBpZiAoc2V0dGluZ3MoKS5zaG93Q29tcG9zaXRvclJlY3RzKQorICAgICAgICBtX2V4cG9zZWRS
ZWN0c1RoaXNVcGRhdGUuYXBwZW5kKHNjcmVlblNwYWNlRXhwb3NlZFJlY3QpOworfQorCiBjb25z
dCBDQ1NldHRpbmdzJiBDQ0hlYWRzVXBEaXNwbGF5OjpzZXR0aW5ncygpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fbGF5ZXJSZW5kZXJlci0+c2V0dGluZ3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERp
c3BsYXkuaAppbmRleCAwNWNiMjBkNTI2OTc5ODU5MjY4ZTQxNzc0ZmNhYTRhNGNlMWJhMmE0Li5l
YjZlYmYyZGNlN2I0ODZmYTU3ZjZkZWMwNzk4MDNmZjNkZGE1MzIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NI
ZWFkc1VwRGlzcGxheS5oCkBAIC01OCw2ICs1OCwxMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBlbmFi
bGVkKCkgY29uc3Q7CiAgICAgdm9pZCBkcmF3KCk7CiAKKyAgICB2b2lkIGFkZFVwZGF0ZVJlY3Qo
Y29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBhZGREcmF3UmVjdChjb25zdCBGbG9hdFJlY3Qm
KTsKKyAgICB2b2lkIGFkZEV4cG9zZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQg
c2V0Q29tcG9zaXRvclNjaXNzb3JSZWN0KGNvbnN0IEZsb2F0UmVjdCYgY29tcG9zaXRvclNjaXNz
b3JSZWN0KSB7IG1fY29tcG9zaXRvclNjaXNzb3JSZWN0ID0gY29tcG9zaXRvclNjaXNzb3JSZWN0
OyB9CisKICAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleCwgRnJh
Z21lbnRTaGFkZXJSR0JBVGV4U3dpenpsZUFscGhhPiBQcm9ncmFtOwogCiBwcml2YXRlOgpAQCAt
NjUsNiArNzAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZHJhd0h1ZENvbnRlbnRzKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEludFNpemUmIGh1ZFNpemUpOwogICAgIHZvaWQgZHJhd0ZQU0NvdW50
ZXIoR3JhcGhpY3NDb250ZXh0KiwgaW50IHRvcCwgaW50IGhlaWdodCk7CiAgICAgdm9pZCBkcmF3
UGxhdGZvcm1MYXllclRyZWUoR3JhcGhpY3NDb250ZXh0KiwgaW50IHRvcCk7CisgICAgdm9pZCBk
cmF3Q29tcG9zaXRvclJlY3RzKEdyYXBoaWNzQ29udGV4dCopOwogICAgIGNvbnN0IENDU2V0dGlu
Z3MmIHNldHRpbmdzKCkgY29uc3Q7CiAKICAgICBpbnQgbV9jdXJyZW50RnJhbWVOdW1iZXI7CkBA
IC04Miw2ICs4OCwxMSBAQCBwcml2YXRlOgogICAgIE93blB0cjxGb250PiBtX21lZGl1bUZvbnQ7
CiAKICAgICBib29sIG1fdXNlTWFwU3ViRm9yVXBsb2FkczsKKworICAgIFZlY3RvcjxGbG9hdFJl
Y3Q+IG1fdXBkYXRlUmVjdHNUaGlzVXBkYXRlOworICAgIFZlY3RvcjxGbG9hdFJlY3Q+IG1fZHJh
d1JlY3RzVGhpc1VwZGF0ZTsKKyAgICBWZWN0b3I8RmxvYXRSZWN0PiBtX2V4cG9zZWRSZWN0c1Ro
aXNVcGRhdGU7CisgICAgRmxvYXRSZWN0IG1fY29tcG9zaXRvclNjaXNzb3JSZWN0OwogfTsKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggMmI4ODQzOWQ0ZmYwMzFhYzUxMTYxYjRlMDcxY2Zj
YzE2Y2QyNGZmMi4uMGVmMTg1OGQxMTY4MjlhYmFmYjRkZmM1MjRiZDkxOWUwMTY0MmJhYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL093blB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTI4Myw2ICsyODQsOCBAQCBwcml2YXRl
OgogICAgIEZsb2F0UmVjdCBtX3VwZGF0ZVJlY3Q7CiB9OwogCit0eXBlZGVmIFZlY3RvcjxSZWZQ
dHI8Q0NMYXllckltcGw+ID4gQ0NMYXllckxpc3Q7CisKIHZvaWQgc29ydExheWVycyhWZWN0b3I8
UmVmUHRyPENDTGF5ZXJJbXBsPiA+OjppdGVyYXRvciBmaXJzdCwgVmVjdG9yPFJlZlB0cjxDQ0xh
eWVySW1wbD4gPjo6aXRlcmF0b3IgZW5kLCBDQ0xheWVyU29ydGVyKik7CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmgKaW5kZXggNzUwNzMwZGNlYmE3MzY0ODNlY2NkMjgwODg0MTA4NzA3
MzJiMThjYi4uNjBkMTM4OTQ4N2MyMjlmYTZhYmJlYmQ1NTExZWVmODNlNWU5NDU4YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTcyLDEzICs3MiwxNyBAQCBzdHJ1Y3QgQ0NTZXR0
aW5ncyB7CiAgICAgICAgICAgICAsIGNvbXBvc2l0ZU9mZnNjcmVlbihmYWxzZSkKICAgICAgICAg
ICAgICwgZW5hYmxlQ29tcG9zaXRvclRocmVhZChmYWxzZSkKICAgICAgICAgICAgICwgc2hvd0ZQ
U0NvdW50ZXIoZmFsc2UpCi0gICAgICAgICAgICAsIHNob3dQbGF0Zm9ybUxheWVyVHJlZShmYWxz
ZSkgeyB9CisgICAgICAgICAgICAsIHNob3dQbGF0Zm9ybUxheWVyVHJlZShmYWxzZSkKKyAgICAg
ICAgICAgICwgc2hvd0NvbXBvc2l0b3JSZWN0cyh0cnVlKQorICAgICAgICAgICAgLCB1c2VDb21w
b3NpdG9yU2Npc3Nvcih0cnVlKSB7IH0KIAogICAgIGJvb2wgYWNjZWxlcmF0ZVBhaW50aW5nOwog
ICAgIGJvb2wgY29tcG9zaXRlT2Zmc2NyZWVuOwogICAgIGJvb2wgZW5hYmxlQ29tcG9zaXRvclRo
cmVhZDsKICAgICBib29sIHNob3dGUFNDb3VudGVyOwogICAgIGJvb2wgc2hvd1BsYXRmb3JtTGF5
ZXJUcmVlOworICAgIGJvb2wgc2hvd0NvbXBvc2l0b3JSZWN0czsKKyAgICBib29sIHVzZUNvbXBv
c2l0b3JTY2lzc29yOwogfTsKIAogLy8gUHJvdmlkZXMgaW5mb3JtYXRpb24gb24gYW4gSW1wbCdz
IHJlbmRlcmluZyBjYXBhYmlsaXRpZXMgYmFjayB0byB0aGUgQ0NMYXllclRyZWVIb3N0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAppbmRleCA0N2E3NjMxMGJlYmMxODRkODM4ZGFiYTM5
YjMzYTA2ZmYyZmJmNWNkLi4xYjA0ZTI4MzY0MjdmMWNhN2I4NmFjZWQzYjI1YTkyZDZlMjdhZTJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKQEAgLTk4LDcgKzk4LDcgQEAgdm9p
ZCBDQ1JlbmRlclN1cmZhY2U6OnJlbGVhc2VDb250ZW50c1RleHR1cmUoKQogICAgIG1fY29udGVu
dHNUZXh0dXJlLT51bnJlc2VydmUoKTsKIH0KIAotdm9pZCBDQ1JlbmRlclN1cmZhY2U6OmRyYXco
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRSZWN0JikKK3Zv
aWQgQ0NSZW5kZXJTdXJmYWNlOjpkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5k
ZXJlciwgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlKQogewogICAgIGlmIChtX3NraXBz
RHJhdyB8fCAhbV9jb250ZW50c1RleHR1cmUpCiAgICAgICAgIHJldHVybjsKQEAgLTExMiw4ICsx
MTIsMTQgQEAgdm9pZCBDQ1JlbmRlclN1cmZhY2U6OmRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVt
KiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRSZWN0JikKICAgICBpZiAoIW1fbWFza0xheWVyICYm
IG1fb3duaW5nTGF5ZXItPnJlcGxpY2FMYXllcigpKQogICAgICAgICByZXBsaWNhTWFza0xheWVy
ID0gbV9vd25pbmdMYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpOwogCi0gICAgaWYg
KG1fb3duaW5nTGF5ZXItPnBhcmVudCgpICYmIG1fb3duaW5nTGF5ZXItPnBhcmVudCgpLT51c2Vz
TGF5ZXJDbGlwcGluZygpKQotICAgICAgICBsYXllclJlbmRlcmVyLT5zZXRTY2lzc29yVG9SZWN0
KG1fY2xpcFJlY3QpOworICAgIEZsb2F0UmVjdCBzdXJmYWNlU2Npc3NvclJlY3QgPSB0YXJnZXRT
dXJmYWNlLT5zY2lzc29yUmVjdCgpOworICAgIGlmIChtX293bmluZ0xheWVyLT5wYXJlbnQoKSAm
JiBtX293bmluZ0xheWVyLT5wYXJlbnQoKS0+dXNlc0xheWVyQ2xpcHBpbmcoKSkgeworICAgICAg
ICBGbG9hdFJlY3QgbGF5ZXJTY2lzc29yUmVjdCA9IG1fY2xpcFJlY3Q7CisgICAgICAgIGlmIChs
YXllclJlbmRlcmVyLT5zZXR0aW5ncygpLnVzZUNvbXBvc2l0b3JTY2lzc29yKQorICAgICAgICAg
ICAgbGF5ZXJTY2lzc29yUmVjdC5pbnRlcnNlY3Qoc3VyZmFjZVNjaXNzb3JSZWN0KTsKKyAgICAg
ICAgbGF5ZXJSZW5kZXJlci0+c2V0U2Npc3NvclRvUmVjdChlbmNsb3NpbmdJbnRSZWN0KGxheWVy
U2Npc3NvclJlY3QpKTsKKyAgICB9IGVsc2UgaWYgKGxheWVyUmVuZGVyZXItPnNldHRpbmdzKCku
dXNlQ29tcG9zaXRvclNjaXNzb3IpCisgICAgICAgIGxheWVyUmVuZGVyZXItPnNldFNjaXNzb3JU
b1JlY3QoZW5jbG9zaW5nSW50UmVjdChzdXJmYWNlU2Npc3NvclJlY3QpKTsKICAgICBlbHNlCiAg
ICAgICAgIEdMQyhsYXllclJlbmRlcmVyLT5jb250ZXh0KCksIGxheWVyUmVuZGVyZXItPmNvbnRl
eHQoKS0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJTdXJmYWNlLmgKaW5kZXggZDgyM2E2Njk2Y2JkODk0ZjM2MWU3N2RiY2MyNzQ4
OTNlYjMxMDgzYS4uOGQ1MTIyOTVjN2FmZGE3MDNkMDM2M2MyZWIzZDYyMjdiMjEzM2ZmOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJTdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJU
ZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5j
bHVkZSAiY2MvQ0NMYXllclF1YWQuaCIKKyNpbmNsdWRlICJjYy9DQ1NjaXNzb3JFbmdpbmUuaCIK
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NTMsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwcmVwYXJlQ29udGVudHNUZXh0dXJlKExh
eWVyUmVuZGVyZXJDaHJvbWl1bSopOwogICAgIHZvaWQgcmVsZWFzZUNvbnRlbnRzVGV4dHVyZSgp
OwogICAgIHZvaWQgY2xlYW51cFJlc291cmNlcygpOwotICAgIHZvaWQgZHJhdyhMYXllclJlbmRl
cmVyQ2hyb21pdW0qLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCk7CisgICAgdm9p
ZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSosIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3Vy
ZmFjZSk7CiAKICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OwogICAgIHZvaWQgZHVtcFN1cmZhY2Uo
VGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwpAQCAtOTcsNiArOTgsMTAgQEAgcHVibGlj
OgogICAgIE1hbmFnZWRUZXh0dXJlKiBjb250ZW50c1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRlbnRzVGV4dHVyZS5nZXQoKTsgfQogCiAgICAgaW50IG93bmluZ0xheWVySWQoKSBjb25z
dDsKKworICAgIGNvbnN0IEZsb2F0UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3NjaXNzb3JFbmdpbmUuY3VycmVudFNjaXNzb3JSZWN0KCk7IH0KKyAgICB2b2lkIHVwZGF0ZVNj
aXNzb3JSZWN0KCkgeyBtX3NjaXNzb3JFbmdpbmUuY29tcHV0ZU5leHRTY2lzc29yKHRoaXMpOyB9
CisKIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3TGF5ZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwg
Q0NMYXllckltcGwqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIHRlbXBsYXRl
IDxjbGFzcyBUPgpAQCAtMTE1LDYgKzEyMCw4IEBAIHByaXZhdGU6CiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbV9vcmlnaW5UcmFuc2Zvcm07CiAgICAgSW50UmVjdCBtX2NsaXBSZWN0OwogICAg
IFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gbV9sYXllckxpc3Q7CisKKyAgICBDQ1NjaXNz
b3JFbmdpbmUgbV9zY2lzc29yRW5naW5lOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2lzc29yRW5naW5lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Npc3NvckVu
Z2luZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uM2NmN2E4ZTQ1OWUwYjRhN2UwMmQ0ZDJjYTczN2I1MGMyYjVk
MjY4MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2Npc3NvckVuZ2luZS5jcHAKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNs
dWRlICJjYy9DQ1NjaXNzb3JFbmdpbmUuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgi
CisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gRklYTUU6IHRoaXMgc2Nyb2xsIGZpeCBpcyBub3QgaW50ZW5kZWQgdG8gbGFuZCwgYnV0
IGlzIHJlcXVpcmVkIHRvIGdldCB0aGlzIHBhdGNoCisvLyAgICAgICAgdG8gd29yayBwcm9wZXJs
eSB3aGlsZSB3YWl0aW5nIGZvciBOb25Db21wb3NpdGVkQ29udGVudEhvc3Qgc2Nyb2xsaW5nCisv
LyAgICAgICAgdG8gYmUgZml4ZWQuIE9uY2Ugc2Nyb2xsaW5nIGlzIGZpeGVkLCB3ZSBjYW4gcmVt
b3ZlIHRoaXMgZnVuY3Rpb24gYW5kIHVzZSB0aGUKKy8vICAgICAgICBvcmlnaW5hbCByZWN0IGlu
IGl0cyBwbGFjZS4KK3N0YXRpYyBGbG9hdFJlY3QgSEFDS1lTY3JvbGxGaXgoQ0NMYXllckltcGwq
IGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgRmxvYXRSZWN0IHNjcm9sbGVk
UmVjdCA9IHJlY3Q7CisgICAgaWYgKGxheWVyLT5pc05vbkNvbXBvc2l0ZWRDb250ZW50KCkpCisg
ICAgICAgIHNjcm9sbGVkUmVjdC5tb3ZlKC1sYXllci0+c2Nyb2xsUG9zaXRpb24oKS54KCksIC1s
YXllci0+c2Nyb2xsUG9zaXRpb24oKS55KCkpOworICAgIHJldHVybiBzY3JvbGxlZFJlY3Q7Cit9
CisKK0NDU2Npc3NvckVuZ2luZTo6Q0NTY2lzc29yRW5naW5lKCkKKyAgICA6IG1fY3VycmVudFJl
Y3RIaXN0b3J5SW5kZXgoMCkKK3sKK30KKwordm9pZCBDQ1NjaXNzb3JFbmdpbmU6OmNvbXB1dGVT
Y2lzc29yUmVjdEZvckFsbFN1cmZhY2VzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+
ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit7CisgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4
ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7
IC0tc3VyZmFjZUluZGV4KSB7CisgICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFj
ZSA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKS0+cmVuZGVyU3Vy
ZmFjZSgpOworICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7CisKKyAgICAgICAgLy8gRklY
TUU6IHRoaXMgd2lsbCBjb25mbGljdCB3aXRoIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MTAzOCBhbmQgc2hvdWxkIGV2ZW50dWFsbHkgYmUgcmVtb3ZlZC4KKyAgICAg
ICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKS5zaXplKCkgfHwgIXJlbmRlclN1cmZh
Y2UtPmRyYXdPcGFjaXR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByZW5k
ZXJTdXJmYWNlLT51cGRhdGVTY2lzc29yUmVjdCgpOworICAgIH0KK30KKwordm9pZCBDQ1NjaXNz
b3JFbmdpbmU6OmNvbXB1dGVOZXh0U2Npc3NvcihDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZh
Y2UpCit7CisgICAgbV9jdXJyZW50U2Npc3NvclJlY3QgPSBGbG9hdFJlY3QoKTsKKworICAgIG1f
Y3VycmVudFNjaXNzb3JSZWN0LnVuaXRlSWZOb25aZXJvKGNvbXB1dGVQYXJ0aWFsU2Npc3NvckZv
ckFjdGl2ZUxheWVycyh0YXJnZXRTdXJmYWNlKSk7CisgICAgbV9jdXJyZW50U2Npc3NvclJlY3Qu
dW5pdGVJZk5vblplcm8oY29tcHV0ZVBhcnRpYWxTY2lzc29yRm9yTGVmdG92ZXJSZWN0cygpKTsK
KworICAgIC8vIHN3YXAgbmV4dCBhbmQgcHJldmlvdXMgaGlzdG9yeSBtYXBzLCBzaW1wbHkgYnkg
Y2hhbmdpbmcgdGhlIGluZGV4LgorICAgIG1fY3VycmVudFJlY3RIaXN0b3J5SW5kZXggPSAobV9j
dXJyZW50UmVjdEhpc3RvcnlJbmRleCArIDEpICUgMjsKK30KKworRmxvYXRSZWN0IENDU2Npc3Nv
ckVuZ2luZTo6Y29tcHV0ZVBhcnRpYWxTY2lzc29yRm9yQWN0aXZlTGF5ZXJzKENDUmVuZGVyU3Vy
ZmFjZSogdGFyZ2V0U3VyZmFjZSkKK3sKKyAgICBGbG9hdFJlY3Qgc2Npc3NvclJlY3QgPSBGbG9h
dFJlY3QoKTsKKworICAgIGNvbnN0IENDTGF5ZXJMaXN0JiBsYXllckxpc3QgPSB0YXJnZXRTdXJm
YWNlLT5sYXllckxpc3QoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXll
ckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7CisgICAgICAgIENDTGF5
ZXJJbXBsKiBsYXllciA9IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKKworICAgICAgICBp
ZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllci0+cmVuZGVyU3VyZmFjZSgpICE9IHRh
cmdldFN1cmZhY2UpCisgICAgICAgICAgICBleHRlbmRTY2lzc29yRm9yUmVuZGVyU3VyZmFjZShs
YXllciwgc2Npc3NvclJlY3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBleHRlbmRTY2lz
c29yRm9yTGF5ZXIobGF5ZXIsIHNjaXNzb3JSZWN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gc2Np
c3NvclJlY3Q7Cit9CisKK0Zsb2F0UmVjdCBDQ1NjaXNzb3JFbmdpbmU6OmNvbXB1dGVQYXJ0aWFs
U2Npc3NvckZvckxlZnRvdmVyUmVjdHMoKQoreworICAgIC8vIEFmdGVyIGNvbXB1dGluZyBzY2lz
c29yIGZvciBhbGwgYWN0aXZlIGxheWVycywgYW55IGxlZnRvdmVyIGl0ZW1zIGluIHRoZQorICAg
IC8vIGN1cnJlbnQgcmVjdCBoaXN0b3J5IGNvcnJlc3BvbmQgdG8gbGF5ZXJzL3N1cmZhY2VzIHRo
YXQgbm8gbG9uZ2VyIGV4aXN0LgorICAgIC8vIFNvLCB0aGVzZSByZWdpb25zIGFyZSBub3cgZXhw
b3NlZCBvbiB0aGUgdGFyZ2V0IHN1cmZhY2UuCisKKyAgICBGbG9hdFJlY3Qgc2Npc3NvclJlY3Qg
PSBGbG9hdFJlY3QoKTsKKyAgICBSZWN0TWFwJiBsZWZ0b3ZlclJlY3RIaXN0b3J5ID0gbV9sYXll
clJlY3RzSGlzdG9yeVttX2N1cnJlbnRSZWN0SGlzdG9yeUluZGV4XTsKKworICAgIGZvciAoUmVj
dE1hcDo6aXRlcmF0b3IgaXQgPSBsZWZ0b3ZlclJlY3RIaXN0b3J5LmJlZ2luKCk7IGl0ICE9IGxl
ZnRvdmVyUmVjdEhpc3RvcnkuZW5kKCk7ICsraXQpCisgICAgICAgIHNjaXNzb3JSZWN0LnVuaXRl
KGl0LT5zZWNvbmQpOworICAgIGxlZnRvdmVyUmVjdEhpc3RvcnkuY2xlYXIoKTsKKworICAgIHJl
dHVybiBzY2lzc29yUmVjdDsKK30KKworRmxvYXRSZWN0IENDU2Npc3NvckVuZ2luZTo6cmVtb3Zl
UmVjdEZyb21QcmV2aW91c0ZyYW1lKGludCBsYXllcklEKQoreworICAgIFJlY3RNYXAmIGN1cnJl
bnRSZWN0SGlzdG9yeSA9IG1fbGF5ZXJSZWN0c0hpc3RvcnlbbV9jdXJyZW50UmVjdEhpc3RvcnlJ
bmRleF07CisKKyAgICAvLyB0YWtlKCkgd2lsbCByZW1vdmUgdGhlIGVudHJ5IGZyb20gdGhlIG1h
cCwgb3IgaWYgbm90IGZvdW5kLCByZXR1cm4gYSBkZWZhdWx0IChlbXB0eSkgcmVjdC4KKyAgICBy
ZXR1cm4gY3VycmVudFJlY3RIaXN0b3J5LnRha2UobGF5ZXJJRCk7Cit9CisKK3ZvaWQgQ0NTY2lz
c29yRW5naW5lOjpzYXZlUmVjdEZvck5leHRGcmFtZShpbnQgbGF5ZXJJRCwgY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXRTcGFjZVJlY3QpCit7CisgICAgaW50IG5leHRNYXBJbmRleCA9IChtX2N1cnJl
bnRSZWN0SGlzdG9yeUluZGV4ICsgMSkgJSAyOworICAgIFJlY3RNYXAmIG5leHRSZWN0SGlzdG9y
eSA9IG1fbGF5ZXJSZWN0c0hpc3RvcnlbbmV4dE1hcEluZGV4XTsKKworICAgIC8vIHRoaXMgbGF5
ZXIgSUQga2V5IHNob3VsZCBub3QgeWV0IGV4aXN0IGluIG5leHQgaGlzdG9yeS4KKyAgICBBU1NF
UlQobmV4dFJlY3RIaXN0b3J5LmZpbmQobGF5ZXJJRCkgPT0gbmV4dFJlY3RIaXN0b3J5LmVuZCgp
KTsKKworICAgIG5leHRSZWN0SGlzdG9yeS5zZXQobGF5ZXJJRCwgdGFyZ2V0U3BhY2VSZWN0KTsK
K30KKwordm9pZCBDQ1NjaXNzb3JFbmdpbmU6OmV4dGVuZFNjaXNzb3JGb3JMYXllcihDQ0xheWVy
SW1wbCogbGF5ZXIsIEZsb2F0UmVjdCYgc2Npc3NvclJlY3QpCit7CisgICAgLy8KKyAgICAvLyBU
aGVyZSBhcmUgdGhyZWUgc291cmNlcyBvZiBjaGFuZ2UgaW4gYSBsYXllciB0aGF0IHdpbGwgY2hh
bmdlIHRoZSBwaXhlbHMgb24gdGhlIHRhcmdldCBzdXJmYWNlOgorICAgIC8vICAgLSB1cGRhdGUg
cmVjdHM6IHRoZSByZWdpb24gb2YgYSBsYXllciB0aGF0IHdhcyByZXBhaW50ZWQvdXBkYXRlZC4K
KyAgICAvLyAgIC0gbGF5ZXIgcmVjdHM6IHRoZSBlbnRpcmUgcmVnaW9uIG9mIHRoZSBsYXllciBp
dHNlbGYuIElmIHRoZXJlIGlzIGFueSBjaGFuZ2UKKyAgICAvLyAgICAgaW4gdGhlIGxheWVyIHBy
b3BlcnRpZXMsIHRoaXMgcmVjdCB0YWtlcyBwcmlvcml0eSBvdmVyIHRoZSB1cGRhdGUgcmVjdC4K
KyAgICAvLyAgIC0gZXhwb3NlZCByZWN0czogdGhlIGxheWVyIHJlY3QgZnJvbSB0aGUgcHJldmlv
dXMgZnJhbWUsIHdoaWNoIGlzIG5ld2x5IGV4cG9zZWQgaWYKKyAgICAvLyAgICAgYW55IGxheWVy
IHByb3BlcnR5IGhhcyBjaGFuZ2VkIChlLmcuIG9wYWNpdHksIHBvc2l0aW9uLCB0cmFuc2Zvcm1z
KQorICAgIC8vCisgICAgLy8gSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGVzZSBsYXll
ciByZWN0cyBpbmRpY2F0ZSBkYW1hZ2UgdG8gdGhlIHRhcmdldCBzdXJmYWNlOyB0aGV5CisgICAg
Ly8gZG8gTk9UIGluZGljYXRlIHRoYXQgbGF5ZXJzIGNhbiBza2lwIGRyYXdpbmcuIEFsbCBsYXll
cnMgdGhhdCBvdmVybGFwIHRoYXQgcmVnaW9uCisgICAgLy8gc3RpbGwgbmVlZCB0byBiZSBkcmF3
bi4KKyAgICAvLworCisgICAgRmxvYXRSZWN0IG9sZExheWVyUmVjdCA9IHJlbW92ZVJlY3RGcm9t
UHJldmlvdXNGcmFtZShsYXllci0+aWQoKSk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBv
cmlnaW5UcmFuc2Zvcm0gPSBsYXllci0+ZHJhd1RyYW5zZm9ybSgpOworICAgIG9yaWdpblRyYW5z
Zm9ybS50cmFuc2xhdGUzZCgtMC41ICogbGF5ZXItPmJvdW5kcygpLndpZHRoKCksIC0wLjUgKiBs
YXllci0+Ym91bmRzKCkuaGVpZ2h0KCksIDApOworCisgICAgRmxvYXRSZWN0IGxheWVyUmVjdElu
VGFyZ2V0U3BhY2UgPSBvcmlnaW5UcmFuc2Zvcm0ubWFwUmVjdChIQUNLWVNjcm9sbEZpeChsYXll
ciwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbGF5ZXItPmJvdW5kcygpKSkpOworICAg
IHNhdmVSZWN0Rm9yTmV4dEZyYW1lKGxheWVyLT5pZCgpLCBsYXllclJlY3RJblRhcmdldFNwYWNl
KTsKKworICAgIGlmIChsYXllci0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSkgeworICAgICAgICAv
LyBJZiBhIGxheWVyIGhhcyBjaGFuZ2VkLCB0aGVuIGl0cyBlbnRpcmUgZHJhdyByZWN0IGFmZmVj
dHMgdGhlIHRhcmdldCBzdXJmYWNlLgorICAgICAgICBzY2lzc29yUmVjdC51bml0ZUlmTm9uWmVy
byhsYXllclJlY3RJblRhcmdldFNwYWNlKTsKKworICAgICAgICAvLyBUaGUgbGF5ZXIncyBvbGQg
cmVnaW9uIGlzIG5vdyBleHBvc2VkIG9uIHRoZSB0YXJnZXQgc3VyZmFjZSwgdG9vCisgICAgICAg
IC8vIE5vdGUgb2xkTGF5ZXJSZWN0IGlzIGFscmVhZHkgaW4gdGFyZ2V0IHNwYWNlLgorICAgICAg
ICBpZiAoIW9sZExheWVyUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBzY2lzc29yUmVjdC51
bml0ZUlmTm9uWmVybyhvbGRMYXllclJlY3QpOworCisgICAgfSBlbHNlIGlmICghbGF5ZXItPnVw
ZGF0ZVJlY3QoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGxheWVyIHByb3BlcnRp
ZXMgaGF2ZW50IGNoYW5nZWQsIHRoZW4gdGhlIHRoZSB0YXJnZXQgc3VyZmFjZSBpcyBvbmx5Cisg
ICAgICAgIC8vIGFmZmVjdGVkIGJ5IHRoZSBsYXllcidzIHVwZGF0ZSBhcmVhLCB3aGljaCBjb3Vs
ZCBiZSBlbXB0eS4KKyAgICAgICAgRmxvYXRSZWN0IHVwZGF0ZVJlY3RJblRhcmdldFNwYWNlID0g
b3JpZ2luVHJhbnNmb3JtLm1hcFJlY3QoSEFDS1lTY3JvbGxGaXgobGF5ZXIsIGxheWVyLT51cGRh
dGVSZWN0KCkpKTsKKyAgICAgICAgc2Npc3NvclJlY3QudW5pdGVJZk5vblplcm8odXBkYXRlUmVj
dEluVGFyZ2V0U3BhY2UpOworICAgIH0KK30KKwordm9pZCBDQ1NjaXNzb3JFbmdpbmU6OmV4dGVu
ZFNjaXNzb3JGb3JSZW5kZXJTdXJmYWNlKENDTGF5ZXJJbXBsKiBsYXllciwgRmxvYXRSZWN0JiBz
Y2lzc29yUmVjdCkKK3sKKyAgICAvLworICAgIC8vIFRoZXJlIGFyZSB0d28gc291cmNlcyBvZiBj
aGFuZ2UgaW4gYSAiZGVzY2VuZGFudCIgc3VyZmFjZSB0aGF0IHdpbGwgY2hhbmdlIHBpeGVscyBv
biB0aGUgInRhcmdldCIgc3VyZmFjZToKKyAgICAvLyAgIC0gdGhlIGN1cnJlbnQgc2Npc3NvciBv
ZiB0aGUgZGVzY2VuZGFudCBzdXJmYWNlLCB3aGljaCBpbmRpY2F0ZXMgdGhlIHJlZ2lvbgorICAg
IC8vICAgICBvZiB0aGUgZGVzY2VuZGFudCB0aGF0IGhhcyBjaGFuZ2VkCisgICAgLy8gICAtIHRo
ZSBkaXNhcHBlYXJhbmNlIG9mIGEgZGVzY2VuZGFudCBzdXJmYWNlLCB3aGljaCBleHBvc2VzIHRo
YXQgcmVnaW9uIG9mCisgICAgLy8gICAgIHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICAvLworICAg
IC8vIHByb3BlcnR5IGNoYW5nZXMsIHN1Y2ggYXMgcm90YXRpb25zL3RyYW5zbGF0aW9ucywgYXJl
IHRha2VuIGludG8gYWNjb3VudCBieSB0aGUgbGF5ZXJzIHRoZW1zZWx2ZXMsIGFuZCBhcmUgYWNj
b3VudGVkIGZvcgorICAgIC8vIGluIHRoZSBkZXNjZW5kYW50IHN1cmZhY2UncyBzY2lzc29yLgor
ICAgIC8vCisKKyAgICByZW1vdmVSZWN0RnJvbVByZXZpb3VzRnJhbWUobGF5ZXItPmlkKCkpOwor
CisgICAgRmxvYXRSZWN0IHN1cmZhY2VSZWN0SW5UYXJnZXRTcGFjZSA9IGxheWVyLT5yZW5kZXJT
dXJmYWNlKCktPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKKyAgICBzYXZlUmVjdEZvck5leHRGcmFt
ZShsYXllci0+aWQoKSwgc3VyZmFjZVJlY3RJblRhcmdldFNwYWNlKTsKKworICAgIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBvcmlnaW5UcmFuc2Zvcm0gPSBsYXllci0+cmVuZGVyU3VyZmFj
ZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKTsKKyAgICBGbG9hdFJlY3Qgc2Npc3NvclJlY3RJbkxvY2Fs
U3BhY2UgPSBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5zY2lzc29yUmVjdCgpOworICAgIEZsb2F0
UmVjdCBzY2lzc29yUmVjdEluVGFyZ2V0U3BhY2UgPSBvcmlnaW5UcmFuc2Zvcm0ubWFwUmVjdChz
Y2lzc29yUmVjdEluTG9jYWxTcGFjZSk7CisgICAgc2Npc3NvclJlY3QudW5pdGVJZk5vblplcm8o
c2Npc3NvclJlY3RJblRhcmdldFNwYWNlKTsKKworICAgIGlmIChsYXllci0+cmVwbGljYUxheWVy
KCkpIHsKKyAgICAgICAgLy8gVGhlIGRlc2NlbmRhbnQgc3VyZmFjZSBoYXMgYSByZWZsZWN0aW9u
LCB3aGljaCBhbHNvIGNvbnRyaWJ1dGVzIGl0cyBzY2lzc29yIHRvIHRoZSBjdXJyZW50IHN1cmZh
Y2UuCisKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVwbGljYU9yaWdpblRyYW5zZm9y
bSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpOworICAgICAgICBy
ZXBsaWNhT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+
cG9zaXRpb24oKS54KCksIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS55KCksIDAp
OworICAgICAgICByZXBsaWNhT3JpZ2luVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyLT5yZXBsaWNh
TGF5ZXIoKS0+dHJhbnNmb3JtKCkpOworICAgICAgICByZXBsaWNhT3JpZ2luVHJhbnNmb3JtLnRy
YW5zbGF0ZTNkKC1sYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueCgpLCAtbGF5ZXIt
PnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLnkoKSwgMCk7CisKKyAgICAgICAgRmxvYXRSZWN0
IHJlcGxpY2FTY2lzc29yUmVjdCA9IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0ubWFwUmVjdChzY2lz
c29yUmVjdEluTG9jYWxTcGFjZSk7CisgICAgICAgIHNjaXNzb3JSZWN0LnVuaXRlSWZOb25aZXJv
KHJlcGxpY2FTY2lzc29yUmVjdCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaXNzb3JFbmdp
bmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Np
c3NvckVuZ2luZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhMzAxOWE5OTU4MGM2Mjc5ZjlmOGZlYjdhYzc4ZDVl
ZDdiNDMxNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NjaXNzb3JFbmdpbmUuaApAQCAtMCwwICsxLDczIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBDQ1NjaXNzb3JFbmdpbmVfaAorI2RlZmluZSBDQ1NjaXNzb3JFbmdpbmVfaAor
CisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXll
ckltcGw7CitjbGFzcyBDQ1JlbmRlclN1cmZhY2U7CisKKy8vIENvbXB1dGVzIHRoZSByZWdpb24g
d2hlcmUgcGl4ZWxzIGhhdmUgYWN0dWFsbHkgY2hhbmdlZCBvbiBhIHN1cmZhY2UuIFRoaXMgcmVn
aW9uIGlzIHVzZWQKKy8vIHRvIHNjaXNzb3Igd2hhdCBpcyBhY3R1YWxseSBkcmF3biB0byB0aGUg
c2NyZWVuIHRvIHNhdmUgR1BVIGNvbXB1dGF0aW9uIGFuZCBiYW5kd2lkdGguCitjbGFzcyBDQ1Nj
aXNzb3JFbmdpbmUgeworcHVibGljOgorICAgIENDU2Npc3NvckVuZ2luZSgpOworCisgICAgc3Rh
dGljIHZvaWQgY29tcHV0ZVNjaXNzb3JSZWN0Rm9yQWxsU3VyZmFjZXMoY29uc3QgVmVjdG9yPFJl
ZlB0cjxDQ0xheWVySW1wbD4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisKKyAgICB2b2lk
IGNvbXB1dGVOZXh0U2Npc3NvcihDQ1JlbmRlclN1cmZhY2UqKTsKKyAgICBjb25zdCBGbG9hdFJl
Y3QmIGN1cnJlbnRTY2lzc29yUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFNjaXNzb3JS
ZWN0OyB9CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgRmxvYXRSZWN0PiBS
ZWN0TWFwOworCisgICAgRmxvYXRSZWN0IGNvbXB1dGVQYXJ0aWFsU2Npc3NvckZvckFjdGl2ZUxh
eWVycyhDQ1JlbmRlclN1cmZhY2UqKTsKKyAgICBGbG9hdFJlY3QgY29tcHV0ZVBhcnRpYWxTY2lz
c29yRm9yTGVmdG92ZXJSZWN0cygpOworCisgICAgLy8gdGhlc2UgaGVscGVyIGZ1bmN0aW9ucyBh
cmUgdXNlZCBvbmx5IHdpdGhpbiBjb21wdXRlU2Npc3NvckZvck5ld0xheWVycy4KKyAgICB2b2lk
IHNhdmVSZWN0Rm9yTmV4dEZyYW1lKGNvbnN0IGludCBsYXllcklELCBjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldFNwYWNlUmVjdCk7CisgICAgRmxvYXRSZWN0IHJlbW92ZVJlY3RGcm9tUHJldmlvdXNG
cmFtZShjb25zdCBpbnQgbGF5ZXJJRCk7CisgICAgdm9pZCBleHRlbmRTY2lzc29yRm9yTGF5ZXIo
Q0NMYXllckltcGwqLCBGbG9hdFJlY3QmIHNjaXNzb3JSZWN0KTsKKyAgICB2b2lkIGV4dGVuZFNj
aXNzb3JGb3JSZW5kZXJTdXJmYWNlKENDTGF5ZXJJbXBsKiwgRmxvYXRSZWN0JiBzY2lzc29yUmVj
dCk7CisKKyAgICAvLyBUbyBjb3JyZWN0bHkgdHJhY2sgZXhwb3NlZCByZWdpb25zLCB0d28gaGFz
aHRhYmxlcyBvZiByZWN0cyBhcmUgbWFpbnRhaW5lZC4KKyAgICAvLyBUaGUgImN1cnJlbnQiIG1h
cCBpcyB1c2VkIHRvIGNvbXB1dGUgZXhwb3NlZCByZWdpb25zIG9mIHRoZSBjdXJyZW50IGZyYW1l
LCB3aGlsZQorICAgIC8vIHRoZSAibmV4dCIgbWFwIGlzIHVzZWQgdG8gY29sbGVjdCBsYXllciBy
ZWN0cyB0aGF0IGFyZSB1c2VkIGluIHRoZSBuZXh0IGZyYW1lLgorICAgIFJlY3RNYXAgbV9sYXll
clJlY3RzSGlzdG9yeVsyXTsKKyAgICBpbnQgbV9jdXJyZW50UmVjdEhpc3RvcnlJbmRleDsKKwor
ICAgIC8vIFN0b3JlZCBpbiB0aGUgInJlbmRlciBzdXJmYWNlIHNwYWNlIiB3aGVyZSB0aGlzIHNj
aXNzb3IgaXMgYXBwbGllZC4KKyAgICBGbG9hdFJlY3QgbV9jdXJyZW50U2Npc3NvclJlY3Q7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDQ1NjaXNzb3JFbmdpbmVf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1NjaXNzb3JFbmdp
bmVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NTY2lzc29yRW5naW5l
VGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZmVmOWZiNjA5MWIyMGEzYmYxNDlhYTYxODgzMjEwZGViNDU3
NWNmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NT
Y2lzc29yRW5naW5lVGVzdC5jcHAKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ0NTY2lzc29yRW5naW5lLmgiCisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVz
cGFjZSBXVEY7CisKK25hbWVzcGFjZSB7CisKK1RFU1QoQ0NTY2lzc29yRW5naW5lVGVzdCwgdmVy
aWZ5Q29tcG9zaXRvclNjaXNzb3JSZWN0KQoreworICAgIC8vIHRlc3RpbmcgdXBkYXRlIHJlY3Qg
cmVnaW9ucworICAgIC8vIGZvciAxIGxheWVyLCB1cGRhdGUgcmVjdCBjaGFuZ2UKKyAgICAvLyBm
b3IgMSBsYXllciBhZ2FpbiwgYWZ0ZXIgcmVzZXR0aW5nIHVwZGF0ZVJlY3QgKHNob3VsZCBiZSBl
bXB0eSBzY2lzc29yKQorICAgIC8vCisgICAgLy8gZm9yIDIgbGF5ZXJzLCBzaG91bGQgYmUgdW5p
dGVkIHNjaXNzb3IKKyAgICAvLyBmb3IgMiBsYXllcnMgYWdhaW4sIGFmdGVyIHJlc2V0dGluZyB1
cGRhdGVSZWN0IChzaG91bGQgYmUgZW1wdHkgc2Npc3NvcikKKyAgICAvLworICAgIC8vIHNpbWls
YXIgcGF0dGVybiBmb3IgMSBsYXllciBhbmQgMSByZW5kZXJTdXJmYWNlCisKKyAgICAvLyB0ZXN0
aW5nIHByb3BlcnR5IGNoYW5nZQorICAgIC8vIGZvciAxIGxheWVyLCBwcm9wZXJ0eSBjaGFuZ2UK
KyAgICAvLyBmb3IgMSBsYXllciBhZ2FpbiwgYWZ0ZXIgcmVzZXR0aW5nIHByb3BlcnR5SGFzQ2hh
bmdlZCAoc2hvdWxkIGJlIGVtcHR5IHNjaXNzb3IpCisgICAgLy8KKyAgICAvLyBmb3IgMiBsYXll
cnMsIHNob3VsZCBiZSB1bml0ZWQgc2Npc3NvcgorICAgIC8vIGZvciAyIGxheWVycyBhZ2Fpbiwg
YWZ0ZXIgcmVzZXR0aW5nIHByb3BlcnR5SGFzQ2hhbmdlZCAoc2hvdWxkIGJlIGVtcHR5IHNjaXNz
b3IpCisgICAgLy8KKyAgICAvLyBzaW1pbGFyIHBhdHRlcm4gZm9yIDEgbGF5ZXIgYW5kIDEgcmVu
ZGVyU3VyZmFjZQorCisgICAgLy8gdGVzdGluZyBleHBvc2VkIHJlZ2lvbnM6CisgICAgLy8KKyAg
ICAvLyBmb3IgMSBsYXllcgorICAgIC8vIGZvciAyIGxheWVycworICAgIC8vIGZvciAxIGxheWVy
IGFuZCAxIHJlbmRlciBzdXJmYWNlLCBsYXllciBnZXRzIHJlbW92ZWQKKyAgICAvLyBmb3IgMSBs
YXllciBhbmQgMSByZW5kZXIgc3VyZmFjZSwgcmVuZGVyIHN1cmZhY2UgZ2V0cyByZW1vdmVkCisK
KyAgICAvLyB0ZXN0aW5nIHJlZmxlY3Rpb25zOgorICAgIC8vIGNoZWNrIHRoYXQgdGFyZ2V0IHN1
cmZhY2Ugc2Npc3NvciBpbmNsdWRlcyByZWZsZWN0aW9uCisKKyAgICAvLyBoaWdoZXIgcmVjdXJz
aW9uOgorICAgIC8vIGNoZWNrIHRoYXQgbmVzdGVkIGxldmVscyBvZiByZW5kZXIgc3VyZmFjZSBj
YXVzZSBjb3JyZWN0IHNjaXNzb3IKK30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117094</attachid>
            <date>2011-11-29 18:38:02 -0800</date>
            <delta_ts>2011-12-01 01:58:53 -0800</delta_ts>
            <desc>Works pretty well, reviewers please see comments</desc>
            <filename>bug-67341-20111129183801.patch</filename>
            <type>text/plain</type>
            <size>11999</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNDI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDZhZGQ5ZWM1MTEyZTZh
NDhkZDUyZjQ4YmRlOWQzNjRhZmYwNTFkOC4uOGY3MGJhZjQ2MThiZTA2MmU3NzYzOTA0ZTFkNWFi
YTYyMzQ0MDVhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDExLTExLTI5ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
U2Npc3NvciByZWN0IG9wdGltaXphdGlvbiBmb3IgY2hyb21pdW0gY29tcG9zaXRvcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjczNDEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgZmVhdHVyZSBzaG91
bGQgaWRlYWxseSBiZSB0cmFuc3BhcmVudCwgc28gZXhpc3RpbmcgbGF5b3V0CisgICAgICAgIHRl
c3RzIGNvdmVyIHRoaXMgYWxyZWFkeS4gV2hlbiB0aGUgZmVhdHVyZSBpcyBlbmFibGVkLCBub3Qg
YWxsCisgICAgICAgIGxheW91dCB0ZXN0cyBwYXNzIHlldC4gVGhlIGZlYXR1cmUgaXMgZGlzYWJs
ZWQgYnkgZGVmYXVsdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c3dhcEJ1ZmZlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmRyYXcpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oOgorCiAyMDEx
LTExLTI5ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgQWxsb3cg
V2ViQ29yZSB0byBkZXNjcmliZSB0eXBlZCBhcnJheXMgdG8gSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcAppbmRleCAwNzc4ZTVkZmZmMTk4ODAxMWVmMmY2YzBmYzYyZWJi
YmU3ODI2NWVkLi5kNWYyNWVlYWIyYjJmYTNlOTJhYTcxZTVlOGY2ZDAyMjY0ZGJlOGVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTUzLDYgKzUzLDcgQEAKICNp
bmNsdWRlICJUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJUcmVlU3luY2hy
b25pemVyLmgiCiAjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2Mv
Q0NEYW1hZ2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRl
ICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCkBA
IC0xMDcsNiArMTA4LDIxIEBAIHN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JlZW5NYXRy
aXgoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgcmV0dXJuIHNjcmVl
bjsKIH0KIAorc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbXB1dGVJbnZlcnNlU2NyZWVu
U3BhY2VUcmFuc2Zvcm1Gb3JTdXJmYWNlKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIp
Cit7CisgICAgLy8gVGhlIGxheWVyJ3Mgc2NyZWVuIHNwYWNlIHRyYW5zZm9ybSBjYW4gYmUgd3Jp
dHRlbiBhczoKKyAgICAvLyAgIGxheWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBzdXJmYWNlU2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0gKiBsYXllck9yaWdpblRyYW5zZm9ybQorICAgIC8vIFNvLCB0byBj
b21wdXRlIHRoZSBzdXJmYWNlIHNjcmVlbiBzcGFjZSwgd2UgY2FuIGRvOgorICAgIC8vICAgc3Vy
ZmFjZVNjcmVlblNwYWNlVHJhbnNmb3JtID0gbGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybSAqIGlu
dmVyc2UobGF5ZXJPcmlnaW5UcmFuc2Zvcm0pCisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBs
YXllck9yaWdpblRyYW5zZm9ybSA9IHJlbmRlclN1cmZhY2VMYXllci0+ZHJhd1RyYW5zZm9ybSgp
OworICAgIGxheWVyT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKC0wLjUgKiByZW5kZXJTdXJm
YWNlTGF5ZXItPmJvdW5kcygpLndpZHRoKCksIC0wLjUgKiByZW5kZXJTdXJmYWNlTGF5ZXItPmJv
dW5kcygpLmhlaWdodCgpLCAwKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdXJmYWNlU2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlTGF5ZXItPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCk7CisgICAgc3VyZmFjZVNjcmVlblNwYWNlVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyT3Jp
Z2luVHJhbnNmb3JtLmludmVyc2UoKSk7CisKKyAgICByZXR1cm4gc3VyZmFjZVNjcmVlblNwYWNl
VHJhbnNmb3JtLmludmVyc2UoKTsKK30KKwogI2lmIFVTRShTS0lBKQogYm9vbCBjb250ZXh0U3Vw
cG9ydHNBY2NlbGVyYXRlZFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogewpA
QCAtMzE3LDEwICszMzMsMzAgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXll
cnMoKQogICAgICAgICBjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpOwogfQogCit2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVy
SW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QpCit7CisgICAgLy8gRm9yIG5vdywgd2UgdXNlIGRhbWFnZSB0cmFja2luZyB0byBjb21w
dXRlIGEgZ2xvYmFsIHNjaXNzb3IuIFRvIGRvIHRoaXMsIHdlIG11c3QKKyAgICAvLyBjb21wdXRl
IGFsbCBkYW1hZ2UgdHJhY2tpbmcgYmVmb3JlIGRyYXdpbmcgYW55dGhpbmcsIHNvIHRoYXQgd2Ug
a25vdyB0aGUgcm9vdAorICAgIC8vIGRhbWFnZSByZWN0LiBUaGUgcm9vdCBkYW1hZ2UgcmVjdCBp
cyB0aGVuIHVzZWQgdG8gc2Npc3NvciBlYWNoIHN1cmZhY2UuCisKKyAgICBBU1NFUlQoc2V0dGlu
Z3MoKS51c2VEYW1hZ2VUcmFja2VyKTsKKworICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJl
bmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1
cmZhY2VJbmRleCkgeworICAgICAgICBDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyID0g
cmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOworICAgICAgICBDQ1Jl
bmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1
cmZhY2UoKTsKKyAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UpOworICAgICAgICByZW5kZXJT
dXJmYWNlLT5kYW1hZ2VUcmFja2VyKCktPnVwZGF0ZURhbWFnZVJlY3RGb3JOZXh0RnJhbWUocmVu
ZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCksIHJlbmRlclN1cmZhY2VMYXllci0+aWQoKSwgcmVuZGVy
U3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSk7CisgICAgfQorfQorCiB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9v
dERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiB7
CiAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc09udG9S
ZW5kZXJTdXJmYWNlcyIsIHRoaXMsIDApOwogCisgICAgaWYgKHNldHRpbmdzKCkudXNlRGFtYWdl
VHJhY2tlcikKKyAgICAgICAgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290RHJhd0xheWVy
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBtX3Jvb3REYW1hZ2VSZWN0ID0gcm9vdERy
YXdMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VS
ZWN0KCk7CisKICAgICAvLyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSByZW5kZXIgc3VyZmFj
ZXMuIFdlIHRyYXZlcnNlIHRoZSByZW5kZXIgc3VyZmFjZXMKICAgICAvLyBmcm9tIGJhY2sgdG8g
ZnJvbnQgdG8gZ3VhcmFudGVlIHRoYXQgbmVzdGVkIHJlbmRlciBzdXJmYWNlcyBnZXQgcmVuZGVy
ZWQgaW4KICAgICAvLyB0aGUgY29ycmVjdCBvcmRlci4KQEAgLTMzOSw5ICszNzUsMTYgQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMoQ0NM
YXllckltcGwqIHJvb3REcmF3TGEKICAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgp
LCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAg
ICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIEZsb2F0UmVjdCBzdXJmYWNlRGFtYWdlUmVjdDsK
KyAgICAgICAgICAgIGlmIChzZXR0aW5ncygpLnVzZURhbWFnZVRyYWNrZXIpIHsKKyAgICAgICAg
ICAgICAgICAvLyBGb3Igbm93LCB3ZSBjb25zZXJ2YXRpdmVseSB1c2UgdGhlIHJvb3QgZGFtYWdl
IGFzIHRoZSBkYW1hZ2UgZm9yIGFsbCBzdXJmYWNlcy4KKyAgICAgICAgICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBjb21wdXRlSW52ZXJz
ZVNjcmVlblNwYWNlVHJhbnNmb3JtRm9yU3VyZmFjZShyZW5kZXJTdXJmYWNlTGF5ZXIpOworICAg
ICAgICAgICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gaW52ZXJzZVNjcmVlblNwYWNlVHJhbnNm
b3JtLm1hcFJlY3QobV9yb290RGFtYWdlUmVjdCk7CisgICAgICAgICAgICB9CisKICAgICAgICAg
ICAgIGNvbnN0IENDTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxp
c3QoKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5k
ZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpCi0gICAgICAgICAgICAgICAgZHJh
d0xheWVyKGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKSwgcmVuZGVyU3VyZmFjZSk7CisgICAg
ICAgICAgICAgICAgZHJhd0xheWVyKGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKSwgcmVuZGVy
U3VyZmFjZSwgc3VyZmFjZURhbWFnZVJlY3QpOwogICAgICAgICB9CiAgICAgfQogCkBAIC00ODcs
OSArNTMwLDE3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzd2FwQnVmZmVycygpCiAg
ICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c3dhcEJ1ZmZlcnMiLCB0aGlz
LCAwKTsKICAgICAvLyBXZSdyZSBkb25lISBUaW1lIHRvIHN3YXBidWZmZXJzIQogCi0gICAgLy8g
Tm90ZSB0aGF0IGN1cnJlbnRseSB0aGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgc3dhcEJ1ZmZl
cnM7IHdlIHNob3VsZAotICAgIC8vIGNvbnNpZGVyIGV4cG9zaW5nIGEgZGlmZmVyZW50IGVudHJ5
IHBvaW50IG9uIEdyYXBoaWNzQ29udGV4dDNELgotICAgIG1fY29udGV4dC0+cHJlcGFyZVRleHR1
cmUoKTsKKyAgICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdQb3N0U3ViQnVmZmVyICYmIHNldHRp
bmdzKCkudXNlRGFtYWdlVHJhY2tlcikgeworICAgICAgICAvLyBJZiB3ZSBhcmUgZGFtYWdlIHRy
YWNraW5nLCBhbmQgcGFydGlhbCBzd2FwIGlzIHN1cHBvcnRlZCwgdGhlbiB3ZSBjYW4gc2F2ZQor
ICAgICAgICAvLyBzaWduaWZpY2FudCBiYW5kd2lkdGggYnkgb25seSBzd2FwcGluZyB0aGUgZGFt
YWdlZCByZWdpb24uCisgICAgICAgIEludFJlY3Qgc3ViQnVmZmVyID0gZW5jbG9zaW5nSW50UmVj
dChtX3Jvb3REYW1hZ2VSZWN0KTsKKyAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVu
c2lvbnMzRENocm9taXVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihtX2Nv
bnRleHQtPmdldEV4dGVuc2lvbnMoKSk7CisgICAgICAgIGludCBmbGlwcGVkWVBvc09mUmVjdEJv
dHRvbSA9IHZpZXdwb3J0SGVpZ2h0KCkgLSBzdWJCdWZmZXIueSgpIC0gc3ViQnVmZmVyLmhlaWdo
dCgpOworICAgICAgICBleHRlbnNpb25zM0RDaHJvbWl1bS0+cG9zdFN1YkJ1ZmZlckNIUk9NSVVN
KHN1YkJ1ZmZlci54KCksIGZsaXBwZWRZUG9zT2ZSZWN0Qm90dG9tLCBzdWJCdWZmZXIud2lkdGgo
KSwgc3ViQnVmZmVyLmhlaWdodCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgLy8gTm90ZSB0aGF0
IGN1cnJlbnRseSB0aGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgc3dhcEJ1ZmZlcnM7IHdlIHNo
b3VsZAorICAgICAgICAvLyBjb25zaWRlciBleHBvc2luZyBhIGRpZmZlcmVudCBlbnRyeSBwb2lu
dCBvbiBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAgICAgbV9jb250ZXh0LT5wcmVwYXJlVGV4dHVy
ZSgpOwogCiAgICAgbV9oZWFkc1VwRGlzcGxheS0+b25Td2FwQnVmZmVycygpOwogfQpAQCAtNTgy
LDEwICs2MzMsMTAgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclN1cmZh
Y2UoQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlKQogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKENDTGF5ZXJJbXBsKiBsYXll
ciwgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlKQordm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIENDUmVuZGVyU3VyZmFjZSogdGFy
Z2V0U3VyZmFjZSwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkKIHsKICAgICBp
ZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1Rhcmdl
dDxDQ0xheWVySW1wbD4obGF5ZXIsIHRhcmdldFN1cmZhY2UtPm93bmluZ0xheWVySWQoKSkpIHsK
LSAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHJhdyh0aGlzLCBsYXllci0+Z2V0RHJh
d1JlY3QoKSk7CisgICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmRyYXcodGhpcywgc3Vy
ZmFjZURhbWFnZVJlY3QpOwogICAgICAgICBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5yZWxlYXNl
Q29udGVudHNUZXh0dXJlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC01OTMsNyArNjQ0
LDEzIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoQ0NMYXllckltcGwq
IGxheWVyLCBDQ1JlbmRlclN1cmZhY2UqIHRhcmdlCiAgICAgaWYgKGxheWVyLT52aXNpYmxlTGF5
ZXJSZWN0KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobGF5ZXItPnVz
ZXNMYXllckNsaXBwaW5nKCkpCisgICAgaWYgKGxheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpICYm
IHNldHRpbmdzKCkudXNlRGFtYWdlVHJhY2tlcikgeworICAgICAgICBGbG9hdFJlY3QgY2xpcEFu
ZERhbWFnZVJlY3QobGF5ZXItPmNsaXBSZWN0KCkpOworICAgICAgICBjbGlwQW5kRGFtYWdlUmVj
dC5pbnRlcnNlY3Qoc3VyZmFjZURhbWFnZVJlY3QpOworICAgICAgICBzZXRTY2lzc29yVG9SZWN0
KGVuY2xvc2luZ0ludFJlY3QoY2xpcEFuZERhbWFnZVJlY3QpKTsKKyAgICB9IGVsc2UgaWYgKHNl
dHRpbmdzKCkudXNlRGFtYWdlVHJhY2tlcikKKyAgICAgICAgc2V0U2Npc3NvclRvUmVjdChlbmNs
b3NpbmdJbnRSZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KSk7CisgICAgZWxzZSBpZiAobGF5ZXItPnVz
ZXNMYXllckNsaXBwaW5nKCkpCiAgICAgICAgIHNldFNjaXNzb3JUb1JlY3QobGF5ZXItPmNsaXBS
ZWN0KCkpOwogICAgIGVsc2UKICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0
LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggZmY5ZTU1MDI1OTE4ZWQxNWU5ZjQwMTZhNzVmODZm
M2QyYzk1Yzk2Yy4uNWM4MDZkMzNhNzBmMGI1ZjBmYTdlYTkyNWNlNTc2MTIwYWFmYTI3OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTE2NSw3ICsxNjUsOSBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBkcmF3TGF5ZXJzSW50ZXJuYWwoKTsKICAgICB2b2lkIGRyYXdMYXll
cnNPbnRvUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IEND
TGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKLSAgICB2b2lkIGRyYXdMYXllcihD
Q0xheWVySW1wbCosIENDUmVuZGVyU3VyZmFjZSopOworICAgIHZvaWQgZHJhd0xheWVyKENDTGF5
ZXJJbXBsKiwgQ0NSZW5kZXJTdXJmYWNlKiwgY29uc3QgRmxvYXRSZWN0Jik7CisKKyAgICB2b2lk
IHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNv
bnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIAogICAgIE1hbmFnZWRU
ZXh0dXJlKiBnZXRPZmZzY3JlZW5MYXllclRleHR1cmUoKTsKICAgICB2b2lkIGNvcHlPZmZzY3Jl
ZW5UZXh0dXJlVG9EaXNwbGF5KCk7CkBAIC0yNDMsNiArMjQ1LDggQEAgcHJpdmF0ZToKICAgICBG
bG9hdFF1YWQgbV9zaGFyZWRHZW9tZXRyeVF1YWQ7CiAKICAgICBib29sIG1faXNWaWV3cG9ydENo
YW5nZWQ7CisKKyAgICBGbG9hdFJlY3QgbV9yb290RGFtYWdlUmVjdDsKIH07CiAKIC8vIFNldHRp
bmcgREVCVUdfR0xfQ0FMTFMgdG8gMSB3aWxsIGNhbGwgZ2xHZXRFcnJvcigpIGFmdGVyIGFsbW9z
dCBldmVyeSBHTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKaW5kZXggY2ViNzY2Nzlj
ZjZkNWVmNmI3OWEyMDdiYmQ4NzE4MTZkZmJhNWQ4YS4uNjNhNjdmZTkxYzMwZjIxNWVmZGQ5NGVh
MTlmOGNiNGQzYWU2Mzc0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCkBAIC0x
MDEsNyArMTAxLDcgQEAgdm9pZCBDQ1JlbmRlclN1cmZhY2U6OnJlbGVhc2VDb250ZW50c1RleHR1
cmUoKQogICAgIG1fY29udGVudHNUZXh0dXJlLT51bnJlc2VydmUoKTsKIH0KIAotdm9pZCBDQ1Jl
bmRlclN1cmZhY2U6OmRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBj
b25zdCBJbnRSZWN0JikKK3ZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpkcmF3KExheWVyUmVuZGVyZXJD
aHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVj
dCkKIHsKICAgICBpZiAobV9za2lwc0RyYXcgfHwgIW1fY29udGVudHNUZXh0dXJlKQogICAgICAg
ICByZXR1cm47CkBAIC0xMTUsNyArMTE1LDEzIEBAIHZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpkcmF3
KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgSW50UmVjdCYpCiAg
ICAgaWYgKCFtX21hc2tMYXllciAmJiBtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5ZXIoKSkKICAg
ICAgICAgcmVwbGljYU1hc2tMYXllciA9IG1fb3duaW5nTGF5ZXItPnJlcGxpY2FMYXllcigpLT5t
YXNrTGF5ZXIoKTsKIAotICAgIGlmIChtX293bmluZ0xheWVyLT5wYXJlbnQoKSAmJiBtX293bmlu
Z0xheWVyLT5wYXJlbnQoKS0+dXNlc0xheWVyQ2xpcHBpbmcoKSkKKyAgICBpZiAobV9vd25pbmdM
YXllci0+cGFyZW50KCkgJiYgbV9vd25pbmdMYXllci0+cGFyZW50KCktPnVzZXNMYXllckNsaXBw
aW5nKCkgJiYgbGF5ZXJSZW5kZXJlci0+c2V0dGluZ3MoKS51c2VEYW1hZ2VUcmFja2VyKSB7Cisg
ICAgICAgIEZsb2F0UmVjdCBjbGlwQW5kRGFtYWdlUmVjdCA9IG1fY2xpcFJlY3Q7CisgICAgICAg
IGNsaXBBbmREYW1hZ2VSZWN0LmludGVyc2VjdChzdXJmYWNlRGFtYWdlUmVjdCk7CisgICAgICAg
IGxheWVyUmVuZGVyZXItPnNldFNjaXNzb3JUb1JlY3QoZW5jbG9zaW5nSW50UmVjdChjbGlwQW5k
RGFtYWdlUmVjdCkpOworICAgIH0gZWxzZSBpZiAobGF5ZXJSZW5kZXJlci0+c2V0dGluZ3MoKS51
c2VEYW1hZ2VUcmFja2VyKQorICAgICAgICBsYXllclJlbmRlcmVyLT5zZXRTY2lzc29yVG9SZWN0
KGVuY2xvc2luZ0ludFJlY3Qoc3VyZmFjZURhbWFnZVJlY3QpKTsKKyAgICBlbHNlIGlmIChtX293
bmluZ0xheWVyLT5wYXJlbnQoKSAmJiBtX293bmluZ0xheWVyLT5wYXJlbnQoKS0+dXNlc0xheWVy
Q2xpcHBpbmcoKSkKICAgICAgICAgbGF5ZXJSZW5kZXJlci0+c2V0U2Npc3NvclRvUmVjdChtX2Ns
aXBSZWN0KTsKICAgICBlbHNlCiAgICAgICAgIEdMQyhsYXllclJlbmRlcmVyLT5jb250ZXh0KCks
IGxheWVyUmVuZGVyZXItPmNvbnRleHQoKS0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJ
U1NPUl9URVNUKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCmluZGV4IGQwZTM1YTE3ODY1
NDM3ZWRkMmM4NzJkZmE2MjJjMzZiMGQ0M2FkYzQuLmE4ZTg3YTlmOWJlYTVkOWJiNGU4MThkZjUw
ZGMwOGQ5ZTczMjZmOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCkBAIC01NCw3ICs1
NCw3IEBAIHB1YmxpYzoKICAgICBib29sIHByZXBhcmVDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKik7CiAgICAgdm9pZCByZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7CiAgICAg
dm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7Ci0gICAgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJv
bWl1bSosIGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0KTsKKyAgICB2b2lkIGRyYXco
TGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVj
dCk7CiAKICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OwogICAgIHZvaWQgZHVtcFN1cmZhY2UoVGV4
dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117382</attachid>
            <date>2011-12-01 01:59:02 -0800</date>
            <delta_ts>2011-12-02 01:04:15 -0800</delta_ts>
            <desc>Only one remaining bug, probably in readback for layout tests</desc>
            <filename>bug-67341-20111201015901.patch</filename>
            <type>text/plain</type>
            <size>15855</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNDI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDZhZGQ5ZWM1MTEyZTZh
NDhkZDUyZjQ4YmRlOWQzNjRhZmYwNTFkOC4uOTRiMDc3MWY5YTBkNTc4YzViNmU2ZjhjZDRiOTM5
NjIxN2E2ODIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDExLTEyLTAxICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
U2Npc3NvciByZWN0IG9wdGltaXphdGlvbiBmb3IgY2hyb21pdW0gY29tcG9zaXRvcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjczNDEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeGlzdGluZyBsYXlvdXQg
dGVzdHMgY292ZXIgdGhpcyBhbHJlYWR5LiBUaGUgZmVhdHVyZSBpcyBkaXNhYmxlZAorICAgICAg
ICBieSBkZWZhdWx0LCB1bmRlciB0aGUgInVzZURhbWFnZVRyYWNraW5nIiBmbGFnLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dHJhY2tEYW1hZ2VG
b3JBbGxTdXJmYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06
OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpzd2FwQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDRGFtYWdlVHJhY2tlcjo6ZXh0ZW5kRGFtYWdlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NEYW1hZ2VUcmFja2VyOjpleHRlbmREYW1hZ2VGb3JSZW5kZXJTdXJmYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaDoKKwogMjAxMS0xMS0y
OSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IFdlYkNv
cmUgdG8gZGVzY3JpYmUgdHlwZWQgYXJyYXlzIHRvIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKaW5kZXggMDc3OGU1ZGZmZjE5ODgwMTFlZjJmNmMwZmM2MmViYmJlNzgy
NjVlZC4uNzM4MTQ4ZjNiYzNkYThlYzY1NTBiZjIwMmM4NTlkMGIzZTc5Yjg0YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVk
ZSAiVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXpl
ci5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDRGFt
YWdlVHJhY2tlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgpAQCAtMTA3
LDYgKzEwOCwyMSBAQCBzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggc2NyZWVuTWF0cml4KGlu
dCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIHJldHVybiBzY3JlZW47CiB9
CiAKK3N0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21wdXRlSW52ZXJzZVNjcmVlblNwYWNl
VHJhbnNmb3JtRm9yU3VyZmFjZShDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyKQorewor
ICAgIC8vIFRoZSBsYXllcidzIHNjcmVlbiBzcGFjZSB0cmFuc2Zvcm0gY2FuIGJlIHdyaXR0ZW4g
YXM6CisgICAgLy8gICBsYXllclNjcmVlblNwYWNlVHJhbnNmb3JtID0gc3VyZmFjZVNjcmVlblNw
YWNlVHJhbnNmb3JtICogbGF5ZXJPcmlnaW5UcmFuc2Zvcm0KKyAgICAvLyBTbywgdG8gY29tcHV0
ZSB0aGUgc3VyZmFjZSBzY3JlZW4gc3BhY2UsIHdlIGNhbiBkbzoKKyAgICAvLyAgIHN1cmZhY2VT
Y3JlZW5TcGFjZVRyYW5zZm9ybSA9IGxheWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0gKiBpbnZlcnNl
KGxheWVyT3JpZ2luVHJhbnNmb3JtKQorCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJP
cmlnaW5UcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlTGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKyAg
ICBsYXllck9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUoLTAuNSAqIHJlbmRlclN1cmZhY2VMYXll
ci0+Ym91bmRzKCkud2lkdGgoKSwgLTAuNSAqIHJlbmRlclN1cmZhY2VMYXllci0+Ym91bmRzKCku
aGVpZ2h0KCkpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1cmZhY2VTY3JlZW5TcGFjZVRy
YW5zZm9ybSA9IHJlbmRlclN1cmZhY2VMYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKTsKKyAg
ICBzdXJmYWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXJPcmlnaW5UcmFuc2Zv
cm0uaW52ZXJzZSgpKTsKKworICAgIHJldHVybiBzdXJmYWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0u
aW52ZXJzZSgpOworfQorCiAjaWYgVVNFKFNLSUEpCiBib29sIGNvbnRleHRTdXBwb3J0c0FjY2Vs
ZXJhdGVkUGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB7CkBAIC0zMTcsMTAg
KzMzMywzMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCiAgICAg
ICAgIGNvcHlPZmZzY3JlZW5UZXh0dXJlVG9EaXNwbGF5KCk7CiB9CiAKK3ZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290
RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sK
KyAgICAvLyBGb3Igbm93LCB3ZSB1c2UgZGFtYWdlIHRyYWNraW5nIHRvIGNvbXB1dGUgYSBnbG9i
YWwgc2Npc3Nvci4gVG8gZG8gdGhpcywgd2UgbXVzdAorICAgIC8vIGNvbXB1dGUgYWxsIGRhbWFn
ZSB0cmFja2luZyBiZWZvcmUgZHJhd2luZyBhbnl0aGluZywgc28gdGhhdCB3ZSBrbm93IHRoZSBy
b290CisgICAgLy8gZGFtYWdlIHJlY3QuIFRoZSByb290IGRhbWFnZSByZWN0IGlzIHRoZW4gdXNl
ZCB0byBzY2lzc29yIGVhY2ggc3VyZmFjZS4KKworICAgIEFTU0VSVChzZXR0aW5ncygpLnVzZURh
bWFnZVRyYWNrZXIpOworCisgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4
KSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7CisgICAgICAgIENDUmVuZGVyU3VyZmFj
ZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwor
ICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7CisgICAgICAgIHJlbmRlclN1cmZhY2UtPmRh
bWFnZVRyYWNrZXIoKS0+dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFtZShyZW5kZXJTdXJmYWNl
LT5sYXllckxpc3QoKSwgcmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5
ZXItPm1hc2tMYXllcigpKTsKKyAgICB9Cit9CisKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVy
LCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKICAgICBUUkFD
RV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZh
Y2VzIiwgdGhpcywgMCk7CiAKKyAgICBpZiAoc2V0dGluZ3MoKS51c2VEYW1hZ2VUcmFja2VyKQor
ICAgICAgICB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3REcmF3TGF5ZXIsIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpOworICAgIG1fcm9vdERhbWFnZVJlY3QgPSByb290RHJhd0xheWVyLT5y
ZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKwog
ICAgIC8vIFVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHJlbmRlciBzdXJmYWNlcy4gV2UgdHJh
dmVyc2UgdGhlIHJlbmRlciBzdXJmYWNlcwogICAgIC8vIGZyb20gYmFjayB0byBmcm9udCB0byBn
dWFyYW50ZWUgdGhhdCBuZXN0ZWQgcmVuZGVyIHN1cmZhY2VzIGdldCByZW5kZXJlZCBpbgogICAg
IC8vIHRoZSBjb3JyZWN0IG9yZGVyLgpAQCAtMzM5LDkgKzM3NSwxNiBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCog
cm9vdERyYXdMYQogICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4
dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKICAgICAgICAgICAg
IH0KIAorICAgICAgICAgICAgRmxvYXRSZWN0IHN1cmZhY2VEYW1hZ2VSZWN0OworICAgICAgICAg
ICAgaWYgKHNldHRpbmdzKCkudXNlRGFtYWdlVHJhY2tlcikgeworICAgICAgICAgICAgICAgIC8v
IEZvciBub3csIHdlIGNvbnNlcnZhdGl2ZWx5IHVzZSB0aGUgcm9vdCBkYW1hZ2UgYXMgdGhlIGRh
bWFnZSBmb3IgYWxsIHN1cmZhY2VzLgorICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IGNvbXB1dGVJbnZlcnNlU2NyZWVuU3Bh
Y2VUcmFuc2Zvcm1Gb3JTdXJmYWNlKHJlbmRlclN1cmZhY2VMYXllcik7CisgICAgICAgICAgICAg
ICAgc3VyZmFjZURhbWFnZVJlY3QgPSBpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0ubWFwUmVj
dChtX3Jvb3REYW1hZ2VSZWN0KTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29uc3Qg
Q0NMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVy
TGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRleCkKLSAgICAgICAgICAgICAgICBkcmF3TGF5ZXIobGF5
ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpLCByZW5kZXJTdXJmYWNlKTsKKyAgICAgICAgICAgICAg
ICBkcmF3TGF5ZXIobGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpLCByZW5kZXJTdXJmYWNlLCBz
dXJmYWNlRGFtYWdlUmVjdCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQ4Nyw5ICs1MzAsMTkg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnN3YXBCdWZmZXJzKCkKICAgICBUUkFDRV9F
VkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzd2FwQnVmZmVycyIsIHRoaXMsIDApOwogICAg
IC8vIFdlJ3JlIGRvbmUhIFRpbWUgdG8gc3dhcGJ1ZmZlcnMhCiAKLSAgICAvLyBOb3RlIHRoYXQg
Y3VycmVudGx5IHRoaXMgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBzd2FwQnVmZmVyczsgd2Ugc2hv
dWxkCi0gICAgLy8gY29uc2lkZXIgZXhwb3NpbmcgYSBkaWZmZXJlbnQgZW50cnkgcG9pbnQgb24g
R3JhcGhpY3NDb250ZXh0M0QuCi0gICAgbV9jb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOworICAg
IGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1Bvc3RTdWJCdWZmZXIgJiYgc2V0dGluZ3MoKS51c2VE
YW1hZ2VUcmFja2VyKSB7CisgICAgICAgIC8vIElmIHdlIGFyZSBkYW1hZ2UgdHJhY2tpbmcsIGFu
ZCBwYXJ0aWFsIHN3YXAgaXMgc3VwcG9ydGVkLCB0aGVuIHdlIGNhbiBzYXZlCisgICAgICAgIC8v
IHNpZ25pZmljYW50IGJhbmR3aWR0aCBieSBvbmx5IHN3YXBwaW5nIHRoZSBkYW1hZ2VkIHJlZ2lv
biAoY2xhbXBlZCB0byB0aGUgdmlld3BvcnQpLgorICAgICAgICBJbnRSZWN0IHN1YkJ1ZmZlciA9
IGVuY2xvc2luZ0ludFJlY3QobV9yb290RGFtYWdlUmVjdCk7CisgICAgICAgIHN1YkJ1ZmZlci5p
bnRlcnNlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCB2aWV3cG9ydFNpemUoKSkpOworCisg
ICAgICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zM0RDaHJvbWl1bSA9IHN0YXRp
Y19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4obV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkp
OworICAgICAgICBpbnQgZmxpcHBlZFlQb3NPZlJlY3RCb3R0b20gPSB2aWV3cG9ydEhlaWdodCgp
IC0gc3ViQnVmZmVyLnkoKSAtIHN1YkJ1ZmZlci5oZWlnaHQoKTsKKyAgICAgICAgZXh0ZW5zaW9u
czNEQ2hyb21pdW0tPnBvc3RTdWJCdWZmZXJDSFJPTUlVTShzdWJCdWZmZXIueCgpLCBmbGlwcGVk
WVBvc09mUmVjdEJvdHRvbSwgc3ViQnVmZmVyLndpZHRoKCksIHN1YkJ1ZmZlci5oZWlnaHQoKSk7
CisgICAgfSBlbHNlCisgICAgICAgIC8vIE5vdGUgdGhhdCBjdXJyZW50bHkgdGhpcyBoYXMgdGhl
IHNhbWUgZWZmZWN0IGFzIHN3YXBCdWZmZXJzOyB3ZSBzaG91bGQKKyAgICAgICAgLy8gY29uc2lk
ZXIgZXhwb3NpbmcgYSBkaWZmZXJlbnQgZW50cnkgcG9pbnQgb24gR3JhcGhpY3NDb250ZXh0M0Qu
CisgICAgICAgIG1fY29udGV4dC0+cHJlcGFyZVRleHR1cmUoKTsKIAogICAgIG1faGVhZHNVcERp
c3BsYXktPm9uU3dhcEJ1ZmZlcnMoKTsKIH0KQEAgLTU4MiwxMCArNjM1LDEwIEBAIGJvb2wgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1c2VSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSogcmVu
ZGVyU3VyZmFjZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIENDUmVuZGVyU3VyZmFjZSogdGFy
Z2V0U3VyZmFjZSkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoQ0NMYXll
ckltcGwqIGxheWVyLCBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UsIGNvbnN0IEZsb2F0
UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCiB7CiAgICAgaWYgKENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQ8Q0NMYXllckltcGw+KGxheWVyLCB0
YXJnZXRTdXJmYWNlLT5vd25pbmdMYXllcklkKCkpKSB7Ci0gICAgICAgIGxheWVyLT5yZW5kZXJT
dXJmYWNlKCktPmRyYXcodGhpcywgbGF5ZXItPmdldERyYXdSZWN0KCkpOworICAgICAgICBsYXll
ci0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3KHRoaXMsIHN1cmZhY2VEYW1hZ2VSZWN0KTsKICAgICAg
ICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+cmVsZWFzZUNvbnRlbnRzVGV4dHVyZSgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtNTkzLDcgKzY0NiwxMyBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVyKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NSZW5kZXJTdXJmYWNl
KiB0YXJnZQogICAgIGlmIChsYXllci0+dmlzaWJsZUxheWVyUmVjdCgpLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGxheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpKQorICAg
IGlmIChsYXllci0+dXNlc0xheWVyQ2xpcHBpbmcoKSAmJiBzZXR0aW5ncygpLnVzZURhbWFnZVRy
YWNrZXIpIHsKKyAgICAgICAgRmxvYXRSZWN0IGNsaXBBbmREYW1hZ2VSZWN0KGxheWVyLT5jbGlw
UmVjdCgpKTsKKyAgICAgICAgY2xpcEFuZERhbWFnZVJlY3QuaW50ZXJzZWN0KHN1cmZhY2VEYW1h
Z2VSZWN0KTsKKyAgICAgICAgc2V0U2Npc3NvclRvUmVjdChlbmNsb3NpbmdJbnRSZWN0KGNsaXBB
bmREYW1hZ2VSZWN0KSk7CisgICAgfSBlbHNlIGlmIChzZXR0aW5ncygpLnVzZURhbWFnZVRyYWNr
ZXIpCisgICAgICAgIHNldFNjaXNzb3JUb1JlY3QoZW5jbG9zaW5nSW50UmVjdChzdXJmYWNlRGFt
YWdlUmVjdCkpOworICAgIGVsc2UgaWYgKGxheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpKQogICAg
ICAgICBzZXRTY2lzc29yVG9SZWN0KGxheWVyLT5jbGlwUmVjdCgpKTsKICAgICBlbHNlCiAgICAg
ICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6U0NJU1NPUl9URVNUKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmlu
ZGV4IGZmOWU1NTAyNTkxOGVkMTVlOWY0MDE2YTc1Zjg2ZjNkMmM5NWM5NmMuLjVjODA2ZDMzYTcw
ZjBiNWYwZmE3ZWE5MjVjZTU3NjEyMGFhZmEyNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oCkBAIC0xNjUsNyArMTY1LDkgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJhd0xh
eWVyc0ludGVybmFsKCk7CiAgICAgdm9pZCBkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKEND
TGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7Ci0gICAgdm9pZCBkcmF3TGF5ZXIoQ0NMYXllckltcGwqLCBDQ1JlbmRlclN1
cmZhY2UqKTsKKyAgICB2b2lkIGRyYXdMYXllcihDQ0xheWVySW1wbCosIENDUmVuZGVyU3VyZmFj
ZSosIGNvbnN0IEZsb2F0UmVjdCYpOworCisgICAgdm9pZCB0cmFja0RhbWFnZUZvckFsbFN1cmZh
Y2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCk7CiAKICAgICBNYW5hZ2VkVGV4dHVyZSogZ2V0T2Zmc2NyZWVuTGF5
ZXJUZXh0dXJlKCk7CiAgICAgdm9pZCBjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpOwpA
QCAtMjQzLDYgKzI0NSw4IEBAIHByaXZhdGU6CiAgICAgRmxvYXRRdWFkIG1fc2hhcmVkR2VvbWV0
cnlRdWFkOwogCiAgICAgYm9vbCBtX2lzVmlld3BvcnRDaGFuZ2VkOworCisgICAgRmxvYXRSZWN0
IG1fcm9vdERhbWFnZVJlY3Q7CiB9OwogCiAvLyBTZXR0aW5nIERFQlVHX0dMX0NBTExTIHRvIDEg
d2lsbCBjYWxsIGdsR2V0RXJyb3IoKSBhZnRlciBhbG1vc3QgZXZlcnkgR0wKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJh
Y2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0RhbWFnZVRyYWNrZXIuY3BwCmluZGV4IDE3MjI2YWE4MjA5MTAxOTM5OGFlZGMyYmMzMDBkNzkx
MThmM2ZhNmQuLjk4Njk3MzVkYzMzNGZlZjU2NTViNjQ4NTI3ZTFkMmY5NzUyYjVmZTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFt
YWdlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcApAQCAtMjIxLDcgKzIyMSw3IEBAIHZvaWQgQ0NE
YW1hZ2VUcmFja2VyOjpleHRlbmREYW1hZ2VGb3JMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIEZs
b2F0UmVjdCYgdGFyZ2V0CiAKICAgICBGbG9hdFJlY3Qgb2xkTGF5ZXJSZWN0ID0gcmVtb3ZlUmVj
dEZyb21DdXJyZW50RnJhbWUobGF5ZXItPmlkKCkpOwogCi0gICAgRmxvYXRSZWN0IGxheWVyUmVj
dEluVGFyZ2V0U3BhY2UgPSBvcmlnaW5UcmFuc2Zvcm0ubWFwUmVjdChGbG9hdFJlY3QoRmxvYXRQ
b2ludDo6emVybygpLCBsYXllci0+Ym91bmRzKCkpKTsKKyAgICBGbG9hdFJlY3QgbGF5ZXJSZWN0
SW5UYXJnZXRTcGFjZSA9IG9yaWdpblRyYW5zZm9ybS5wcm9qZWN0UXVhZChGbG9hdFF1YWQoRmxv
YXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbGF5ZXItPmJvdW5kcygpKSkpLmJvdW5kaW5nQm94
KCk7CiAgICAgc2F2ZVJlY3RGb3JOZXh0RnJhbWUobGF5ZXItPmlkKCksIGxheWVyUmVjdEluVGFy
Z2V0U3BhY2UpOwogCiAgICAgaWYgKGxheWVyLT5sYXllclByb3BlcnR5Q2hhbmdlZCgpKSB7CkBA
IC0yMzQsNyArMjM0LDcgQEAgdm9pZCBDQ0RhbWFnZVRyYWNrZXI6OmV4dGVuZERhbWFnZUZvckxh
eWVyKENDTGF5ZXJJbXBsKiBsYXllciwgRmxvYXRSZWN0JiB0YXJnZXQKICAgICB9IGVsc2UgaWYg
KCFsYXllci0+dXBkYXRlUmVjdCgpLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBJZiB0aGUgbGF5
ZXIgcHJvcGVydGllcyBoYXZlbnQgY2hhbmdlZCwgdGhlbiB0aGUgdGhlIHRhcmdldCBzdXJmYWNl
IGlzIG9ubHkKICAgICAgICAgLy8gYWZmZWN0ZWQgYnkgdGhlIGxheWVyJ3MgdXBkYXRlIGFyZWEs
IHdoaWNoIGNvdWxkIGJlIGVtcHR5LgotICAgICAgICBGbG9hdFJlY3QgdXBkYXRlUmVjdEluVGFy
Z2V0U3BhY2UgPSBvcmlnaW5UcmFuc2Zvcm0ubWFwUmVjdChsYXllci0+dXBkYXRlUmVjdCgpKTsK
KyAgICAgICAgRmxvYXRSZWN0IHVwZGF0ZVJlY3RJblRhcmdldFNwYWNlID0gb3JpZ2luVHJhbnNm
b3JtLnByb2plY3RRdWFkKEZsb2F0UXVhZChsYXllci0+dXBkYXRlUmVjdCgpKSkuYm91bmRpbmdC
b3goKTsKICAgICAgICAgdGFyZ2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyh1cGRhdGVSZWN0
SW5UYXJnZXRTcGFjZSk7CiAgICAgfQogfQpAQCAtMjc1LDcgKzI3NSw3IEBAIHZvaWQgQ0NEYW1h
Z2VUcmFja2VyOjpleHRlbmREYW1hZ2VGb3JSZW5kZXJTdXJmYWNlKENDTGF5ZXJJbXBsKiBsYXll
ciwgRmxvYXRSZWN0CiAgICAgLy8gSWYgdGhlcmUgd2FzIGRhbWFnZSwgdHJhbnNmb3JtIGl0IHRv
IHRhcmdldCBzcGFjZSwgYW5kIHBvc3NpYmx5IGNvbnRyaWJ1dGUgaXRzIHJlZmxlY3Rpb24gaWYg
bmVlZGVkLgogICAgIGlmICghZGFtYWdlUmVjdEluTG9jYWxTcGFjZS5pc0VtcHR5KCkpIHsKICAg
ICAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG9yaWdpblRyYW5zZm9ybSA9IHJlbmRl
clN1cmZhY2UtPm9yaWdpblRyYW5zZm9ybSgpOwotICAgICAgICBGbG9hdFJlY3QgZGFtYWdlUmVj
dEluVGFyZ2V0U3BhY2UgPSBvcmlnaW5UcmFuc2Zvcm0ubWFwUmVjdChkYW1hZ2VSZWN0SW5Mb2Nh
bFNwYWNlKTsKKyAgICAgICAgRmxvYXRSZWN0IGRhbWFnZVJlY3RJblRhcmdldFNwYWNlID0gb3Jp
Z2luVHJhbnNmb3JtLnByb2plY3RRdWFkKEZsb2F0UXVhZChkYW1hZ2VSZWN0SW5Mb2NhbFNwYWNl
KSkuYm91bmRpbmdCb3goKTsKICAgICAgICAgdGFyZ2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVy
byhkYW1hZ2VSZWN0SW5UYXJnZXRTcGFjZSk7CiAKICAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNh
TGF5ZXIoKSkgewpAQCAtMjg1LDcgKzI4NSw3IEBAIHZvaWQgQ0NEYW1hZ2VUcmFja2VyOjpleHRl
bmREYW1hZ2VGb3JSZW5kZXJTdXJmYWNlKENDTGF5ZXJJbXBsKiBsYXllciwgRmxvYXRSZWN0CiAg
ICAgICAgICAgICByZXBsaWNhT3JpZ2luVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyLT5yZXBsaWNh
TGF5ZXIoKS0+dHJhbnNmb3JtKCkpOwogICAgICAgICAgICAgcmVwbGljYU9yaWdpblRyYW5zZm9y
bS50cmFuc2xhdGUoLWxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS54KCksIC1sYXll
ci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueSgpKTsKIAotICAgICAgICAgICAgdGFyZ2V0
RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhyZXBsaWNhT3JpZ2luVHJhbnNmb3JtLm1hcFJlY3Qo
ZGFtYWdlUmVjdEluTG9jYWxTcGFjZSkpOworICAgICAgICAgICAgdGFyZ2V0RGFtYWdlUmVjdC51
bml0ZUlmTm9uWmVybyhyZXBsaWNhT3JpZ2luVHJhbnNmb3JtLnByb2plY3RRdWFkKEZsb2F0UXVh
ZChkYW1hZ2VSZWN0SW5Mb2NhbFNwYWNlKSkuYm91bmRpbmdCb3goKSk7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTMwMSw3ICszMDEsNyBAQCB2b2lkIENDRGFtYWdlVHJhY2tlcjo6ZXh0ZW5kRGFt
YWdlRm9yUmVuZGVyU3VyZmFjZShDQ0xheWVySW1wbCogbGF5ZXIsIEZsb2F0UmVjdAogICAgICAg
ICByZXBsaWNhT3JpZ2luVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+
dHJhbnNmb3JtKCkpOwogICAgICAgICByZXBsaWNhT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZSgt
bGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLngoKSwgLWxheWVyLT5yZXBsaWNhTGF5
ZXIoKS0+cG9zaXRpb24oKS55KCkpOwogCi0gICAgICAgIEZsb2F0UmVjdCByZXBsaWNhTWFza0xh
eWVyUmVjdCA9IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0ubWFwUmVjdChGbG9hdFJlY3QoRmxvYXRQ
b2ludDo6emVybygpLCBGbG9hdFNpemUocmVwbGljYU1hc2tMYXllci0+Ym91bmRzKCkud2lkdGgo
KSwgcmVwbGljYU1hc2tMYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpKSk7CisgICAgICAgIEZsb2F0
UmVjdCByZXBsaWNhTWFza0xheWVyUmVjdCA9IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0ucHJvamVj
dFF1YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIEZsb2F0U2l6ZShy
ZXBsaWNhTWFza0xheWVyLT5ib3VuZHMoKS53aWR0aCgpLCByZXBsaWNhTWFza0xheWVyLT5ib3Vu
ZHMoKS5oZWlnaHQoKSkpKSkuYm91bmRpbmdCb3goKTsKICAgICAgICAgc2F2ZVJlY3RGb3JOZXh0
RnJhbWUocmVwbGljYU1hc2tMYXllci0+aWQoKSwgcmVwbGljYU1hc2tMYXllclJlY3QpOwogCiAg
ICAgICAgIC8vIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCBhIGNoYW5nZSBpbiB0aGUg
cmVwbGljYSBtYXNrIGRhbWFnZXMgdGhlIGVudGlyZSByZXBsaWNhIHJlZ2lvbi4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVy
U3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuY3BwCmluZGV4IGNlYjc2Njc5Y2Y2ZDVlZjZiNzlhMjA3YmJkODcx
ODE2ZGZiYTVkOGEuLjYzYTY3ZmU5MWMzMGYyMTVlZmRkOTRlYTE5ZjhjYjRkM2FlNjM3NGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcApAQCAtMTAxLDcgKzEwMSw3IEBAIHZvaWQg
Q0NSZW5kZXJTdXJmYWNlOjpyZWxlYXNlQ29udGVudHNUZXh0dXJlKCkKICAgICBtX2NvbnRlbnRz
VGV4dHVyZS0+dW5yZXNlcnZlKCk7CiB9CiAKLXZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpkcmF3KExh
eWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgSW50UmVjdCYpCit2b2lk
IENDUmVuZGVyU3VyZmFjZTo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVy
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCiB7CiAgICAgaWYgKG1fc2tp
cHNEcmF3IHx8ICFtX2NvbnRlbnRzVGV4dHVyZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE1LDcg
KzExNSwxMyBAQCB2b2lkIENDUmVuZGVyU3VyZmFjZTo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21p
dW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFJlY3QmKQogICAgIGlmICghbV9tYXNrTGF5ZXIg
JiYgbV9vd25pbmdMYXllci0+cmVwbGljYUxheWVyKCkpCiAgICAgICAgIHJlcGxpY2FNYXNrTGF5
ZXIgPSBtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCk7CiAKLSAgICBp
ZiAobV9vd25pbmdMYXllci0+cGFyZW50KCkgJiYgbV9vd25pbmdMYXllci0+cGFyZW50KCktPnVz
ZXNMYXllckNsaXBwaW5nKCkpCisgICAgaWYgKG1fb3duaW5nTGF5ZXItPnBhcmVudCgpICYmIG1f
b3duaW5nTGF5ZXItPnBhcmVudCgpLT51c2VzTGF5ZXJDbGlwcGluZygpICYmIGxheWVyUmVuZGVy
ZXItPnNldHRpbmdzKCkudXNlRGFtYWdlVHJhY2tlcikgeworICAgICAgICBGbG9hdFJlY3QgY2xp
cEFuZERhbWFnZVJlY3QgPSBtX2NsaXBSZWN0OworICAgICAgICBjbGlwQW5kRGFtYWdlUmVjdC5p
bnRlcnNlY3Qoc3VyZmFjZURhbWFnZVJlY3QpOworICAgICAgICBsYXllclJlbmRlcmVyLT5zZXRT
Y2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJlY3QoY2xpcEFuZERhbWFnZVJlY3QpKTsKKyAgICB9
IGVsc2UgaWYgKGxheWVyUmVuZGVyZXItPnNldHRpbmdzKCkudXNlRGFtYWdlVHJhY2tlcikKKyAg
ICAgICAgbGF5ZXJSZW5kZXJlci0+c2V0U2Npc3NvclRvUmVjdChlbmNsb3NpbmdJbnRSZWN0KHN1
cmZhY2VEYW1hZ2VSZWN0KSk7CisgICAgZWxzZSBpZiAobV9vd25pbmdMYXllci0+cGFyZW50KCkg
JiYgbV9vd25pbmdMYXllci0+cGFyZW50KCktPnVzZXNMYXllckNsaXBwaW5nKCkpCiAgICAgICAg
IGxheWVyUmVuZGVyZXItPnNldFNjaXNzb3JUb1JlY3QobV9jbGlwUmVjdCk7CiAgICAgZWxzZQog
ICAgICAgICBHTEMobGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyLT5jb250
ZXh0KCktPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJTdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuaAppbmRleCBkMGUzNWExNzg2NTQzN2VkZDJjODcyZGZhNjIyYzM2
YjBkNDNhZGM0Li5hOGU4N2E5ZjliZWE1ZDliYjRlODE4ZGY1MGRjMDhkOWU3MzI2ZjhjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclN1cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaApAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBwcmVwYXJlQ29udGVudHNUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwogICAg
IHZvaWQgcmVsZWFzZUNvbnRlbnRzVGV4dHVyZSgpOwogICAgIHZvaWQgY2xlYW51cFJlc291cmNl
cygpOwotICAgIHZvaWQgZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCBJbnRSZWN0
JiB0YXJnZXRTdXJmYWNlUmVjdCk7CisgICAgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1
bSosIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpOwogCiAgICAgU3RyaW5nIG5h
bWUoKSBjb25zdDsKICAgICB2b2lkIGR1bXBTdXJmYWNlKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50
KSBjb25zdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117587</attachid>
            <date>2011-12-02 01:04:20 -0800</date>
            <delta_ts>2011-12-02 13:33:27 -0800</delta_ts>
            <desc>All known issues are resolved</desc>
            <filename>bug-67341-20111202010419.patch</filename>
            <type>text/plain</type>
            <size>15568</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNDI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDZhZGQ5ZWM1MTEyZTZh
NDhkZDUyZjQ4YmRlOWQzNjRhZmYwNTFkOC4uNTNlNjE0NGUwODYzODQ3YWE5M2NiZDExOTRmNDZj
MWI0OGZhZTkxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTEyLTAyICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
U2Npc3NvciByZWN0IG9wdGltaXphdGlvbiBmb3IgY2hyb21pdW0gY29tcG9zaXRvcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjczNDEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3N0bHkgY292ZXJlZCBi
eSBkYW1hZ2UgdHJhY2tlciB0ZXN0cy4gQ3VycmVudGx5IHRoaXMgcmVsaWVzIG9uCisgICAgICAg
IG1hbnVhbGx5IHJ1bm5pbmcgbGF5b3V0IHRlc3RzLCBiZWNhdXNlIHRoaXMgcGF0Y2ggcmVxdWly
ZXMgcGFydGlhbAorICAgICAgICBzd2FwcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IER1bXBS
ZW5kZXJUcmVlLiAgVGhlIGZlYXR1cmUKKyAgICAgICAgYXV0b21hdGljYWxseSBkaXNhYmxlcyBp
ZiBwYXJ0aWFsIHN3YXAgaXMgbm90IHN1cHBvcnRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1Jl
bmRlclN1cmZhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
c3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDRGFtYWdlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6
OnVwZGF0ZURhbWFnZVJlY3RGb3JOZXh0RnJhbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oOgorCiAyMDExLTExLTI5
ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgQWxsb3cgV2ViQ29y
ZSB0byBkZXNjcmliZSB0eXBlZCBhcnJheXMgdG8gSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcAppbmRleCAwNzc4ZTVkZmZmMTk4ODAxMWVmMmY2YzBmYzYyZWJiYmU3ODI2
NWVkLi42ZGRiMzE1MmI5ZWJkODU3ZTFiZmFjN2IyZWJhMTk0MDYxZDdmMzk2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRl
ICJUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJUcmVlU3luY2hyb25pemVy
LmgiCiAjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NEYW1h
Z2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9D
Q0xheWVyVHJlZUhvc3RDb21tb24uaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCkBAIC0xMDcs
NiArMTA4LDIxIEBAIHN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JlZW5NYXRyaXgoaW50
IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgcmV0dXJuIHNjcmVlbjsKIH0K
IAorc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbXB1dGVTY3JlZW5TcGFjZVRyYW5zZm9y
bUZvclN1cmZhY2UoQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllcikKK3sKKyAgICAvLyBU
aGUgbGF5ZXIncyBzY3JlZW4gc3BhY2UgdHJhbnNmb3JtIGNhbiBiZSB3cml0dGVuIGFzOgorICAg
IC8vICAgbGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5z
Zm9ybSAqIGxheWVyT3JpZ2luVHJhbnNmb3JtCisgICAgLy8gU28sIHRvIGNvbXB1dGUgdGhlIHN1
cmZhY2Ugc2NyZWVuIHNwYWNlLCB3ZSBjYW4gZG86CisgICAgLy8gICBzdXJmYWNlU2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0gPSBsYXllclNjcmVlblNwYWNlVHJhbnNmb3JtICogaW52ZXJzZShsYXllck9y
aWdpblRyYW5zZm9ybSkKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyT3JpZ2luVHJh
bnNmb3JtID0gcmVuZGVyU3VyZmFjZUxheWVyLT5kcmF3VHJhbnNmb3JtKCk7CisgICAgbGF5ZXJP
cmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKC0wLjUgKiByZW5kZXJTdXJmYWNlTGF5ZXItPmJvdW5k
cygpLndpZHRoKCksIC0wLjUgKiByZW5kZXJTdXJmYWNlTGF5ZXItPmJvdW5kcygpLmhlaWdodCgp
KTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdXJmYWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0g
PSByZW5kZXJTdXJmYWNlTGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCk7CisgICAgc3VyZmFj
ZVNjcmVlblNwYWNlVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyT3JpZ2luVHJhbnNmb3JtLmludmVy
c2UoKSk7CisKKyAgICByZXR1cm4gc3VyZmFjZVNjcmVlblNwYWNlVHJhbnNmb3JtOworfQorCiAj
aWYgVVNFKFNLSUEpCiBib29sIGNvbnRleHRTdXBwb3J0c0FjY2VsZXJhdGVkUGFpbnRpbmcoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB7CkBAIC0zMTcsMTAgKzMzMywzMCBAQCB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCiAgICAgICAgIGNvcHlPZmZzY3JlZW5U
ZXh0dXJlVG9EaXNwbGF5KCk7CiB9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0cmFj
a0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBD
Q0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAgICAvLyBGb3Igbm93LCB3
ZSB1c2UgZGFtYWdlIHRyYWNraW5nIHRvIGNvbXB1dGUgYSBnbG9iYWwgc2Npc3Nvci4gVG8gZG8g
dGhpcywgd2UgbXVzdAorICAgIC8vIGNvbXB1dGUgYWxsIGRhbWFnZSB0cmFja2luZyBiZWZvcmUg
ZHJhd2luZyBhbnl0aGluZywgc28gdGhhdCB3ZSBrbm93IHRoZSByb290CisgICAgLy8gZGFtYWdl
IHJlY3QuIFRoZSByb290IGRhbWFnZSByZWN0IGlzIHRoZW4gdXNlZCB0byBzY2lzc29yIGVhY2gg
c3VyZmFjZS4KKworICAgIEFTU0VSVChzZXR0aW5ncygpLnVzZURhbWFnZVRyYWNrZXIpOworCisg
ICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkg
LSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7CisgICAgICAgIENDTGF5
ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZh
Y2VJbmRleF0uZ2V0KCk7CisgICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9
IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBBU1NFUlQocmVu
ZGVyU3VyZmFjZSk7CisgICAgICAgIHJlbmRlclN1cmZhY2UtPmRhbWFnZVRyYWNrZXIoKS0+dXBk
YXRlRGFtYWdlUmVjdEZvck5leHRGcmFtZShyZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgcmVu
ZGVyU3VyZmFjZUxheWVyLT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpKTsK
KyAgICB9Cit9CisKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1Jl
bmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlz
dCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzIiwgdGhpcywgMCk7CiAK
KyAgICBpZiAoc2V0dGluZ3MoKS51c2VEYW1hZ2VUcmFja2VyKQorICAgICAgICB0cmFja0RhbWFn
ZUZvckFsbFN1cmZhY2VzKHJvb3REcmF3TGF5ZXIsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwor
ICAgIG1fcm9vdERhbWFnZVJlY3QgPSByb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCktPmRh
bWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKwogICAgIC8vIFVwZGF0ZSB0aGUg
Y29udGVudHMgb2YgdGhlIHJlbmRlciBzdXJmYWNlcy4gV2UgdHJhdmVyc2UgdGhlIHJlbmRlciBz
dXJmYWNlcwogICAgIC8vIGZyb20gYmFjayB0byBmcm9udCB0byBndWFyYW50ZWUgdGhhdCBuZXN0
ZWQgcmVuZGVyIHN1cmZhY2VzIGdldCByZW5kZXJlZCBpbgogICAgIC8vIHRoZSBjb3JyZWN0IG9y
ZGVyLgpAQCAtMzMyLDE2ICszNjgsMzEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGEKIAogICAg
ICAgICBpZiAodXNlUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKSkgewogCisgICAgICAgICAg
ICBGbG9hdFJlY3Qgc3VyZmFjZURhbWFnZVJlY3Q7CisgICAgICAgICAgICBpZiAoc2V0dGluZ3Mo
KS51c2VEYW1hZ2VUcmFja2VyKSB7CisgICAgICAgICAgICAgICAgLy8gRm9yIG5vdywgd2UgY29u
c2VydmF0aXZlbHkgdXNlIHRoZSByb290IGRhbWFnZSBhcyB0aGUgZGFtYWdlIGZvciBhbGwKKyAg
ICAgICAgICAgICAgICAvLyBzdXJmYWNlcywgZXhjZXB0IHBlcnNwZWN0aXZlIHRyYW5zZm9ybXMu
CisgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2NyZWVuU3BhY2VUcmFuc2Zv
cm0gPSBjb21wdXRlU2NyZWVuU3BhY2VUcmFuc2Zvcm1Gb3JTdXJmYWNlKHJlbmRlclN1cmZhY2VM
YXllcik7CisgICAgICAgICAgICAgICAgaWYgKHNjcmVlblNwYWNlVHJhbnNmb3JtLmhhc1BlcnNw
ZWN0aXZlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUGVyc3BlY3RpdmUgcHJvamVjdGlv
bnMgZG8gbm90IHBsYXkgbmljZSB3aXRoIG1hcFJlY3Qgb2YgaW52ZXJzZSB0cmFuc2Zvcm1zLgor
ICAgICAgICAgICAgICAgICAgICAvLyBJbiB0aGlzIHVuY29tbW9uIGNhc2UsIGl0cyBzaW1wbGVy
IHRvIGp1c3QgcmVkcmF3IHRoZSBlbnRpcmUgc3VyZmFjZS4KKyAgICAgICAgICAgICAgICAgICAg
c3VyZmFjZURhbWFnZVJlY3QgPSByZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHNjcmVlblNwYWNlVHJhbnNmb3JtLmlu
dmVyc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgc3VyZmFjZURhbWFnZVJlY3QgPSBpbnZlcnNl
U2NyZWVuU3BhY2VUcmFuc2Zvcm0ubWFwUmVjdChtX3Jvb3REYW1hZ2VSZWN0KTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmIChyZW5kZXJTdXJmYWNl
TGF5ZXIgIT0gcm9vdERyYXdMYXllcikgewotICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQu
Z2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
KSk7CisgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzKCkudXNlRGFtYWdlVHJhY2tlcikKKyAg
ICAgICAgICAgICAgICAgICAgc2V0U2Npc3NvclRvUmVjdChlbmNsb3NpbmdJbnRSZWN0KHN1cmZh
Y2VEYW1hZ2VSZWN0KSk7CiAgICAgICAgICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9j
b250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAsIDApKTsKICAgICAgICAgICAgICAgICBHTEMobV9j
b250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9C
VUZGRVJfQklUKSk7Ci0gICAgICAgICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250
ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBjb25zdCBDQ0xheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVy
U3VyZmFjZS0+bGF5ZXJMaXN0KCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5k
ZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KQotICAg
ICAgICAgICAgICAgIGRyYXdMYXllcihsYXllckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCksIHJlbmRl
clN1cmZhY2UpOworICAgICAgICAgICAgICAgIGRyYXdMYXllcihsYXllckxpc3RbbGF5ZXJJbmRl
eF0uZ2V0KCksIHJlbmRlclN1cmZhY2UsIHN1cmZhY2VEYW1hZ2VSZWN0KTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtNDg3LDkgKzUzOCwyMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
c3dhcEJ1ZmZlcnMoKQogICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnN3
YXBCdWZmZXJzIiwgdGhpcywgMCk7CiAgICAgLy8gV2UncmUgZG9uZSEgVGltZSB0byBzd2FwYnVm
ZmVycyEKIAotICAgIC8vIE5vdGUgdGhhdCBjdXJyZW50bHkgdGhpcyBoYXMgdGhlIHNhbWUgZWZm
ZWN0IGFzIHN3YXBCdWZmZXJzOyB3ZSBzaG91bGQKLSAgICAvLyBjb25zaWRlciBleHBvc2luZyBh
IGRpZmZlcmVudCBlbnRyeSBwb2ludCBvbiBHcmFwaGljc0NvbnRleHQzRC4KLSAgICBtX2NvbnRl
eHQtPnByZXBhcmVUZXh0dXJlKCk7CisgICAgaWYgKHNldHRpbmdzKCkudXNlRGFtYWdlVHJhY2tl
cikgeworICAgICAgICAvLyBXZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGRpc2FibGVkIGRhbWFnZSB0
cmFja2luZyBpZiBwYXJ0aWFsIHN3YXAgaXMgdW5hdmFpbGFibGUuCisgICAgICAgIEFTU0VSVCht
X2NhcGFiaWxpdGllcy51c2luZ1Bvc3RTdWJCdWZmZXIpOworCisgICAgICAgIC8vIElmIHdlIGFy
ZSBkYW1hZ2UgdHJhY2tpbmcsIHRoZW4gd2UgY2FuIHNhdmUgc2lnbmlmaWNhbnQgYmFuZHdpZHRo
IGJ5IG9ubHkgc3dhcHBpbmcgdGhlIGRhbWFnZWQgcmVnaW9uIChjbGFtcGVkIHRvIHRoZSB2aWV3
cG9ydCkuCisgICAgICAgIEludFJlY3Qgc3ViQnVmZmVyID0gZW5jbG9zaW5nSW50UmVjdChtX3Jv
b3REYW1hZ2VSZWN0KTsKKyAgICAgICAgc3ViQnVmZmVyLmludGVyc2VjdChJbnRSZWN0KEludFBv
aW50Ojp6ZXJvKCksIHZpZXdwb3J0U2l6ZSgpKSk7CisgICAgICAgIEV4dGVuc2lvbnMzRENocm9t
aXVtKiBleHRlbnNpb25zM0RDaHJvbWl1bSA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9t
aXVtKj4obV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpOworICAgICAgICBpbnQgZmxpcHBlZFlQ
b3NPZlJlY3RCb3R0b20gPSB2aWV3cG9ydEhlaWdodCgpIC0gc3ViQnVmZmVyLnkoKSAtIHN1YkJ1
ZmZlci5oZWlnaHQoKTsKKyAgICAgICAgZXh0ZW5zaW9uczNEQ2hyb21pdW0tPnBvc3RTdWJCdWZm
ZXJDSFJPTUlVTShzdWJCdWZmZXIueCgpLCBmbGlwcGVkWVBvc09mUmVjdEJvdHRvbSwgc3ViQnVm
ZmVyLndpZHRoKCksIHN1YkJ1ZmZlci5oZWlnaHQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIC8v
IE5vdGUgdGhhdCBjdXJyZW50bHkgdGhpcyBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHN3YXBCdWZm
ZXJzOyB3ZSBzaG91bGQKKyAgICAgICAgLy8gY29uc2lkZXIgZXhwb3NpbmcgYSBkaWZmZXJlbnQg
ZW50cnkgcG9pbnQgb24gR3JhcGhpY3NDb250ZXh0M0QuCisgICAgICAgIG1fY29udGV4dC0+cHJl
cGFyZVRleHR1cmUoKTsKIAogICAgIG1faGVhZHNVcERpc3BsYXktPm9uU3dhcEJ1ZmZlcnMoKTsK
IH0KQEAgLTU4MiwxMCArNjQ0LDEwIEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VS
ZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSkKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQ0xheWVy
SW1wbCogbGF5ZXIsIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSkKK3ZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoQ0NMYXllckltcGwqIGxheWVyLCBDQ1JlbmRlclN1
cmZhY2UqIHRhcmdldFN1cmZhY2UsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3Qp
CiB7CiAgICAgaWYgKENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1
dGVzVG9UYXJnZXQ8Q0NMYXllckltcGw+KGxheWVyLCB0YXJnZXRTdXJmYWNlLT5vd25pbmdMYXll
cklkKCkpKSB7Ci0gICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmRyYXcodGhpcywgbGF5
ZXItPmdldERyYXdSZWN0KCkpOworICAgICAgICBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3
KHRoaXMsIHN1cmZhY2VEYW1hZ2VSZWN0KTsKICAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2Uo
KS0+cmVsZWFzZUNvbnRlbnRzVGV4dHVyZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
NTkzLDcgKzY1NSwxMyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKEND
TGF5ZXJJbXBsKiBsYXllciwgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZQogICAgIGlmIChsYXllci0+
dmlzaWJsZUxheWVyUmVjdCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KGxheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpKQorICAgIGlmIChsYXllci0+dXNlc0xheWVyQ2xp
cHBpbmcoKSAmJiBzZXR0aW5ncygpLnVzZURhbWFnZVRyYWNrZXIpIHsKKyAgICAgICAgRmxvYXRS
ZWN0IGNsaXBBbmREYW1hZ2VSZWN0KGxheWVyLT5jbGlwUmVjdCgpKTsKKyAgICAgICAgY2xpcEFu
ZERhbWFnZVJlY3QuaW50ZXJzZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KTsKKyAgICAgICAgc2V0U2Np
c3NvclRvUmVjdChlbmNsb3NpbmdJbnRSZWN0KGNsaXBBbmREYW1hZ2VSZWN0KSk7CisgICAgfSBl
bHNlIGlmIChzZXR0aW5ncygpLnVzZURhbWFnZVRyYWNrZXIpCisgICAgICAgIHNldFNjaXNzb3JU
b1JlY3QoZW5jbG9zaW5nSW50UmVjdChzdXJmYWNlRGFtYWdlUmVjdCkpOworICAgIGVsc2UgaWYg
KGxheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpKQogICAgICAgICBzZXRTY2lzc29yVG9SZWN0KGxh
eWVyLT5jbGlwUmVjdCgpKTsKICAgICBlbHNlCiAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCks
IG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IGZmOWU1NTAyNTkxOGVkMTVlOWY0
MDE2YTc1Zjg2ZjNkMmM5NWM5NmMuLjVjODA2ZDMzYTcwZjBiNWYwZmE3ZWE5MjVjZTU3NjEyMGFh
ZmEyNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0xNjUsNyArMTY1
LDkgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJhd0xheWVyc0ludGVybmFsKCk7CiAgICAgdm9p
ZCBkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVy
LCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Ci0gICAgdm9pZCBk
cmF3TGF5ZXIoQ0NMYXllckltcGwqLCBDQ1JlbmRlclN1cmZhY2UqKTsKKyAgICB2b2lkIGRyYXdM
YXllcihDQ0xheWVySW1wbCosIENDUmVuZGVyU3VyZmFjZSosIGNvbnN0IEZsb2F0UmVjdCYpOwor
CisgICAgdm9pZCB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJh
d0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAKICAg
ICBNYW5hZ2VkVGV4dHVyZSogZ2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCk7CiAgICAgdm9pZCBj
b3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpOwpAQCAtMjQzLDYgKzI0NSw4IEBAIHByaXZh
dGU6CiAgICAgRmxvYXRRdWFkIG1fc2hhcmVkR2VvbWV0cnlRdWFkOwogCiAgICAgYm9vbCBtX2lz
Vmlld3BvcnRDaGFuZ2VkOworCisgICAgRmxvYXRSZWN0IG1fcm9vdERhbWFnZVJlY3Q7CiB9Owog
CiAvLyBTZXR0aW5nIERFQlVHX0dMX0NBTExTIHRvIDEgd2lsbCBjYWxsIGdsR2V0RXJyb3IoKSBh
ZnRlciBhbG1vc3QgZXZlcnkgR0wKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwCmluZGV4
IDE3MjI2YWE4MjA5MTAxOTM5OGFlZGMyYmMzMDBkNzkxMThmM2ZhNmQuLmUwZWY4NDY1YjUxYmRm
ZTZhZWIzMDNlZDY5MTJiZGY1ZTNlM2ExZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2Vy
LmNwcApAQCAtMTIwLDkgKzEyMCwxNiBAQCB2b2lkIENDRGFtYWdlVHJhY2tlcjo6dXBkYXRlRGFt
YWdlUmVjdEZvck5leHRGcmFtZShjb25zdCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbQogICAgIC8v
ICAgICAgICAgZGFtYWdlIHRyYWNrZXIgaXMgcmVhZHkgZm9yIHRoZSBuZXh0IGZyYW1lLgogICAg
IC8vCiAKKyAgICAvLyBGSVhNRTogaXQgbWF5IGJlIHBvc3NpYmxlIHRvIHJlbW92ZSB0aGlzIGFm
dGVyIHVwZGF0ZSBjb2RlYmFzZSBwYXN0IHdlYmtpdCByZXZpc2lvbiAxMDE0NzIuCisgICAgaWYg
KCFsYXllckxpc3Quc2l6ZSgpKSB7CisgICAgICAgIG1fY3VycmVudERhbWFnZVJlY3QgPSBGbG9h
dFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIC8vIElmIHRoZSB0YXJnZXQg
c3VyZmFjZSBhbHJlYWR5IGtub3dzIGl0cyBlbnRpcmUgcmVnaW9uIGlzIGRhbWFnZWQsIHdlIGNh
biByZXR1cm4gZWFybHkuCiAgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGdvIGF3YXksIG9yIHdp
bGwgYmUgY2xlYW5lciwgYWZ0ZXIgcmVmYWN0b3JpbmcgaW50byBSZW5kZXJQYXNzL1JlbmRlclNj
aGVkdWxlLgogICAgIENDTGF5ZXJJbXBsKiBsYXllciA9IGxheWVyTGlzdFswXS5nZXQoKTsKKwog
ICAgIGlmIChsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zdXJmYWNlUHJvcGVydHlDaGFu
Z2VkT25seUZyb21EZXNjZW5kYW50KCkpIHsKICAgICAgICAgbV9jdXJyZW50RGFtYWdlUmVjdCA9
IEZsb2F0UmVjdChsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsK
ICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApp
bmRleCA4Y2ZiZDMwN2EwNTA5NDBjZjZiMDg3MTRkYzU4MjVmZGY4YWE5MzE2Li5lMmUyYzA4NmJm
ZDQxN2ZiMTA3OTk5NzU4MTgwNzMwYjBlYmY0NTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmNwcApAQCAtMTgyLDYgKzE4MiwxMSBAQCBib29sIENDTGF5ZXJUcmVlSG9z
dEltcGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+CiAgICAgICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0
ZSh0aGlzLCBjb250ZXh0KTsKICAgICB9CiAKKyAgICAvLyBQYXJ0aWFsIHN3YXBwaW5nIGlzIGEg
cHJlcmVxdWlzaXRlIGZvciBkYW1hZ2UgdHJhY2tpbmcsIHNvIGlmIGl0cyBub3Qgc3VwcG9ydGVk
LAorICAgIC8vIHRoZW4gZm9yY2UgZGlzYWJsZSBkYW1hZ2UgdHJhY2tpbmcuCisgICAgaWYgKCFs
YXllclJlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKS51c2luZ1Bvc3RTdWJCdWZmZXIpCisgICAgICAg
IG1fc2V0dGluZ3MudXNlRGFtYWdlVHJhY2tlciA9IGZhbHNlOworCiAgICAgaWYgKG1fbGF5ZXJS
ZW5kZXJlcikKICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5jbG9zZSgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1
cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlLmNwcAppbmRleCBjZWI3NjY3OWNmNmQ1ZWY2Yjc5YTIwN2JiZDg3MTgx
NmRmYmE1ZDhhLi42M2E2N2ZlOTFjMzBmMjE1ZWZkZDk0ZWExOWY4Y2I0ZDNhZTYzNzRjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKQEAgLTEwMSw3ICsxMDEsNyBAQCB2b2lkIEND
UmVuZGVyU3VyZmFjZTo6cmVsZWFzZUNvbnRlbnRzVGV4dHVyZSgpCiAgICAgbV9jb250ZW50c1Rl
eHR1cmUtPnVucmVzZXJ2ZSgpOwogfQogCi12b2lkIENDUmVuZGVyU3VyZmFjZTo6ZHJhdyhMYXll
clJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFJlY3QmKQordm9pZCBD
Q1JlbmRlclN1cmZhY2U6OmRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVy
LCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KQogewogICAgIGlmIChtX3NraXBz
RHJhdyB8fCAhbV9jb250ZW50c1RleHR1cmUpCiAgICAgICAgIHJldHVybjsKQEAgLTExNSw3ICsx
MTUsMTMgQEAgdm9pZCBDQ1JlbmRlclN1cmZhY2U6OmRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVt
KiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRSZWN0JikKICAgICBpZiAoIW1fbWFza0xheWVyICYm
IG1fb3duaW5nTGF5ZXItPnJlcGxpY2FMYXllcigpKQogICAgICAgICByZXBsaWNhTWFza0xheWVy
ID0gbV9vd25pbmdMYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpOwogCi0gICAgaWYg
KG1fb3duaW5nTGF5ZXItPnBhcmVudCgpICYmIG1fb3duaW5nTGF5ZXItPnBhcmVudCgpLT51c2Vz
TGF5ZXJDbGlwcGluZygpKQorICAgIGlmIChtX293bmluZ0xheWVyLT5wYXJlbnQoKSAmJiBtX293
bmluZ0xheWVyLT5wYXJlbnQoKS0+dXNlc0xheWVyQ2xpcHBpbmcoKSAmJiBsYXllclJlbmRlcmVy
LT5zZXR0aW5ncygpLnVzZURhbWFnZVRyYWNrZXIpIHsKKyAgICAgICAgRmxvYXRSZWN0IGNsaXBB
bmREYW1hZ2VSZWN0ID0gbV9jbGlwUmVjdDsKKyAgICAgICAgY2xpcEFuZERhbWFnZVJlY3QuaW50
ZXJzZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KTsKKyAgICAgICAgbGF5ZXJSZW5kZXJlci0+c2V0U2Np
c3NvclRvUmVjdChlbmNsb3NpbmdJbnRSZWN0KGNsaXBBbmREYW1hZ2VSZWN0KSk7CisgICAgfSBl
bHNlIGlmIChsYXllclJlbmRlcmVyLT5zZXR0aW5ncygpLnVzZURhbWFnZVRyYWNrZXIpCisgICAg
ICAgIGxheWVyUmVuZGVyZXItPnNldFNjaXNzb3JUb1JlY3QoZW5jbG9zaW5nSW50UmVjdChzdXJm
YWNlRGFtYWdlUmVjdCkpOworICAgIGVsc2UgaWYgKG1fb3duaW5nTGF5ZXItPnBhcmVudCgpICYm
IG1fb3duaW5nTGF5ZXItPnBhcmVudCgpLT51c2VzTGF5ZXJDbGlwcGluZygpKQogICAgICAgICBs
YXllclJlbmRlcmVyLT5zZXRTY2lzc29yVG9SZWN0KG1fY2xpcFJlY3QpOwogICAgIGVsc2UKICAg
ICAgICAgR0xDKGxheWVyUmVuZGVyZXItPmNvbnRleHQoKSwgbGF5ZXJSZW5kZXJlci0+Y29udGV4
dCgpLT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVy
U3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlLmgKaW5kZXggZDBlMzVhMTc4NjU0MzdlZGQyYzg3MmRmYTYyMmMzNmIw
ZDQzYWRjNC4uYThlODdhOWY5YmVhNWQ5YmI0ZTgxOGRmNTBkYzA4ZDllNzMyNmY4YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJTdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIGJv
b2wgcHJlcGFyZUNvbnRlbnRzVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKICAgICB2
b2lkIHJlbGVhc2VDb250ZW50c1RleHR1cmUoKTsKICAgICB2b2lkIGNsZWFudXBSZXNvdXJjZXMo
KTsKLSAgICB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgSW50UmVjdCYg
dGFyZ2V0U3VyZmFjZVJlY3QpOworICAgIHZvaWQgZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0q
LCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0KTsKIAogICAgIFN0cmluZyBuYW1l
KCkgY29uc3Q7CiAgICAgdm9pZCBkdW1wU3VyZmFjZShUZXh0U3RyZWFtJiwgaW50IGluZGVudCkg
Y29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117676</attachid>
            <date>2011-12-02 13:33:32 -0800</date>
            <delta_ts>2011-12-02 15:07:16 -0800</delta_ts>
            <desc>feature now toggled by capability flag, root clear is also scissored</desc>
            <filename>bug-67341-20111202133331.patch</filename>
            <type>text/plain</type>
            <size>17952</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmI3ZDU2OWRjNjJmNTg2
MGMyMTZiZmYwZWQ4YjdhZDQxMGVmMWE0Yi4uOTQyYWNkNDFmZjRhZmZkNmM0YmU3MDZmN2NhODA3
ZmYzNDkxMWUxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDExLTEyLTAyICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
U2Npc3NvciByZWN0IG9wdGltaXphdGlvbiBmb3IgY2hyb21pdW0gY29tcG9zaXRvcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjczNDEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3N0bHkgY292ZXJlZCBi
eSBkYW1hZ2UgdHJhY2tlciB0ZXN0cy4gQ3VycmVudGx5IHRoaXMgcmVsaWVzIG9uCisgICAgICAg
IG1hbnVhbGx5IHJ1bm5pbmcgbGF5b3V0IHRlc3RzLCBiZWNhdXNlIHRoaXMgcGF0Y2ggcmVxdWly
ZXMgcGFydGlhbAorICAgICAgICBzd2FwcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IER1bXBS
ZW5kZXJUcmVlLiBUaGUgZmVhdHVyZQorICAgICAgICBhdXRvbWF0aWNhbGx5IGRpc2FibGVzIGlm
IHBhcnRpYWwgc3dhcCBpcyBub3Qgc3VwcG9ydGVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRl
clN1cmZhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0xheWVyc0ludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NTZXR0aW5nczo6Q0NT
ZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzOjpM
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5k
ZXJTdXJmYWNlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuaDoKKworMjAxMS0xMi0wMiAgU2hhd24gU2luZ2ggIDxzaGF3bnNp
bmdoQGNocm9taXVtLm9yZz4KKworICAgICAgICBIT09SQVkgSVQgSVMgUkVBRFkgVE8gU1VCTUlU
CisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIGFuZCBidWcgVVJMIChPT1BTISkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcg
dGVzdHMuIChPT1BTISkKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnN3YXBCdWZmZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2V0dGluZ3M6OkNDU2V0dGluZ3MpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllczo6TGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJTdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6ZHJhdyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNl
Lmg6CisKIDIwMTEtMTItMDIgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogU3BsaXQgdmlldyB3b3JrcyB3ZWlyZGx5IGluIG5l
dHdvcmsgcGFuZWwgd2hlbiByZXNpemluZywgc2hvd2luZy9oaWRpbmcgbWFpbiBlbGVtZW50Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggNmY3MzNmZDgyZGE5NGZm
Y2YwMjgxNTIxM2VkZjY5NzBiZDExNzNlNS4uZmMyZGEyYmJkNTMzODc4ZDc2MDg2YmMwOTQyMjQz
NzViNjkxMzNiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC01
Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmgiCiAjaW5j
bHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5o
IgorI2luY2x1ZGUgImNjL0NDRGFtYWdlVHJhY2tlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJ
bXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NQcm94eS5oIgpAQCAtMTA3LDYgKzEwOCwyMSBAQCBzdGF0aWMgVHJhbnNmb3JtYXRpb25N
YXRyaXggc2NyZWVuTWF0cml4KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQog
ICAgIHJldHVybiBzY3JlZW47CiB9CiAKK3N0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21w
dXRlU2NyZWVuU3BhY2VUcmFuc2Zvcm1Gb3JTdXJmYWNlKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJm
YWNlTGF5ZXIpCit7CisgICAgLy8gVGhlIGxheWVyJ3Mgc2NyZWVuIHNwYWNlIHRyYW5zZm9ybSBj
YW4gYmUgd3JpdHRlbiBhczoKKyAgICAvLyAgIGxheWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBz
dXJmYWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gKiBsYXllck9yaWdpblRyYW5zZm9ybQorICAgIC8v
IFNvLCB0byBjb21wdXRlIHRoZSBzdXJmYWNlIHNjcmVlbiBzcGFjZSwgd2UgY2FuIGRvOgorICAg
IC8vICAgc3VyZmFjZVNjcmVlblNwYWNlVHJhbnNmb3JtID0gbGF5ZXJTY3JlZW5TcGFjZVRyYW5z
Zm9ybSAqIGludmVyc2UobGF5ZXJPcmlnaW5UcmFuc2Zvcm0pCisKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBsYXllck9yaWdpblRyYW5zZm9ybSA9IHJlbmRlclN1cmZhY2VMYXllci0+ZHJhd1Ry
YW5zZm9ybSgpOworICAgIGxheWVyT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZSgtMC41ICogcmVu
ZGVyU3VyZmFjZUxheWVyLT5ib3VuZHMoKS53aWR0aCgpLCAtMC41ICogcmVuZGVyU3VyZmFjZUxh
eWVyLT5ib3VuZHMoKS5oZWlnaHQoKSk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VyZmFj
ZVNjcmVlblNwYWNlVHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZUxheWVyLT5zY3JlZW5TcGFjZVRy
YW5zZm9ybSgpOworICAgIHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5zZm9ybS5tdWx0aXBseShsYXll
ck9yaWdpblRyYW5zZm9ybS5pbnZlcnNlKCkpOworCisgICAgcmV0dXJuIHN1cmZhY2VTY3JlZW5T
cGFjZVRyYW5zZm9ybTsKK30KKwogI2lmIFVTRShTS0lBKQogYm9vbCBjb250ZXh0U3VwcG9ydHNB
Y2NlbGVyYXRlZFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogewpAQCAtMTkx
LDkgKzIwNywxMiBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSgpCiAg
ICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nRnJvbnRCdWZmZXJDYWNoZWQpCiAgICAgICAgIGV4
dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVNX2Zyb250X2J1ZmZlcl9jYWNoZWQi
KTsKIAotICAgIG1fY2FwYWJpbGl0aWVzLnVzaW5nUG9zdFN1YkJ1ZmZlciA9IGV4dGVuc2lvbnMt
PnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9wb3N0X3N1Yl9idWZmZXIiKTsKLSAgICBpZiAobV9jYXBh
YmlsaXRpZXMudXNpbmdQb3N0U3ViQnVmZmVyKQorICAgIG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFy
dGlhbFN3YXAgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQ0hST01JVU1fcG9zdF9zdWJfYnVm
ZmVyIik7CisgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3YXApCiAgICAgICAg
IGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVNX3Bvc3Rfc3ViX2J1ZmZlciIp
OworICAgIC8vIEZJWE1FOiBldmVudHVhbGx5IHdlIHdvdWxkIGxpa2UgdG8gaGF2ZSB1c2luZ1Bh
cnRpYWxTd2FwIGVuYWJsZWQgYnkgZGVmYXVsdCwKKyAgICAvLyAgICAgICAgd2hlbmV2ZXIgaXQg
aXMgc3VwcG9ydGVkLiBGb3Igbm93LCB3ZSBmb3JjZSBpdCBvZmYuCisgICAgbV9jYXBhYmlsaXRp
ZXMudXNpbmdQYXJ0aWFsU3dhcCA9IGZhbHNlOwogCiAgICAgbV9jYXBhYmlsaXRpZXMudXNpbmdN
YXBTdWIgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQ0hST01JVU1fbWFwX3N1YiIpOwogICAg
IGlmIChtX2NhcGFiaWxpdGllcy51c2luZ01hcFN1YikKQEAgLTMxNywxMCArMzM2LDMwIEBAIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKCkKICAgICAgICAgY29weU9mZnNj
cmVlblRleHR1cmVUb0Rpc3BsYXkoKTsKIH0KIAordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNv
bnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQoreworICAgIC8vIEZvciBu
b3csIHdlIHVzZSBkYW1hZ2UgdHJhY2tpbmcgdG8gY29tcHV0ZSBhIGdsb2JhbCBzY2lzc29yLiBU
byBkbyB0aGlzLCB3ZSBtdXN0CisgICAgLy8gY29tcHV0ZSBhbGwgZGFtYWdlIHRyYWNraW5nIGJl
Zm9yZSBkcmF3aW5nIGFueXRoaW5nLCBzbyB0aGF0IHdlIGtub3cgdGhlIHJvb3QKKyAgICAvLyBk
YW1hZ2UgcmVjdC4gVGhlIHJvb3QgZGFtYWdlIHJlY3QgaXMgdGhlbiB1c2VkIHRvIHNjaXNzb3Ig
ZWFjaCBzdXJmYWNlLgorCisgICAgQVNTRVJUKG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3
YXApOworCisgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlz
dC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7CisgICAg
ICAgIENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7CisgICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVy
U3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBB
U1NFUlQocmVuZGVyU3VyZmFjZSk7CisgICAgICAgIHJlbmRlclN1cmZhY2UtPmRhbWFnZVRyYWNr
ZXIoKS0+dXBkYXRlRGFtYWdlUmVjdEZvck5leHRGcmFtZShyZW5kZXJTdXJmYWNlLT5sYXllckxp
c3QoKSwgcmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tM
YXllcigpKTsKKyAgICB9Cit9CisKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXJzT250b1JlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBD
Q0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKICAgICBUUkFDRV9FVkVOVCgi
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzIiwgdGhp
cywgMCk7CiAKKyAgICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdQYXJ0aWFsU3dhcCkKKyAgICAg
ICAgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290RHJhd0xheWVyLCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KTsKKyAgICBtX3Jvb3REYW1hZ2VSZWN0ID0gcm9vdERyYXdMYXllci0+cmVuZGVy
U3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VSZWN0KCk7CisKICAgICAv
LyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSByZW5kZXIgc3VyZmFjZXMuIFdlIHRyYXZlcnNl
IHRoZSByZW5kZXIgc3VyZmFjZXMKICAgICAvLyBmcm9tIGJhY2sgdG8gZnJvbnQgdG8gZ3VhcmFu
dGVlIHRoYXQgbmVzdGVkIHJlbmRlciBzdXJmYWNlcyBnZXQgcmVuZGVyZWQgaW4KICAgICAvLyB0
aGUgY29ycmVjdCBvcmRlci4KQEAgLTMzMiwxNiArMzcxLDMxIEBAIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290
RHJhd0xhCiAKICAgICAgICAgaWYgKHVzZVJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSkpIHsK
IAorICAgICAgICAgICAgRmxvYXRSZWN0IHN1cmZhY2VEYW1hZ2VSZWN0OworICAgICAgICAgICAg
aWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3YXApIHsKKyAgICAgICAgICAgICAgICAv
LyBGb3Igbm93LCB3ZSBjb25zZXJ2YXRpdmVseSB1c2UgdGhlIHJvb3QgZGFtYWdlIGFzIHRoZSBk
YW1hZ2UgZm9yIGFsbAorICAgICAgICAgICAgICAgIC8vIHN1cmZhY2VzLCBleGNlcHQgcGVyc3Bl
Y3RpdmUgdHJhbnNmb3Jtcy4KKyAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBz
Y3JlZW5TcGFjZVRyYW5zZm9ybSA9IGNvbXB1dGVTY3JlZW5TcGFjZVRyYW5zZm9ybUZvclN1cmZh
Y2UocmVuZGVyU3VyZmFjZUxheWVyKTsKKyAgICAgICAgICAgICAgICBpZiAoc2NyZWVuU3BhY2VU
cmFuc2Zvcm0uaGFzUGVyc3BlY3RpdmUoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBQZXJz
cGVjdGl2ZSBwcm9qZWN0aW9ucyBkbyBub3QgcGxheSBuaWNlIHdpdGggbWFwUmVjdCBvZiBpbnZl
cnNlIHRyYW5zZm9ybXMuCisgICAgICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgdW5jb21tb24g
Y2FzZSwgaXRzIHNpbXBsZXIgdG8ganVzdCByZWRyYXcgdGhlIGVudGlyZSBzdXJmYWNlLgorICAg
ICAgICAgICAgICAgICAgICBzdXJmYWNlRGFtYWdlUmVjdCA9IHJlbmRlclN1cmZhY2UtPmNvbnRl
bnRSZWN0KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggaW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtID0gc2NyZWVu
U3BhY2VUcmFuc2Zvcm0uaW52ZXJzZSgpOworICAgICAgICAgICAgICAgICAgICBzdXJmYWNlRGFt
YWdlUmVjdCA9IGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybS5tYXBSZWN0KG1fcm9vdERhbWFn
ZVJlY3QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAg
aWYgKHJlbmRlclN1cmZhY2VMYXllciAhPSByb290RHJhd0xheWVyKSB7Ci0gICAgICAgICAgICAg
ICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4
dDNEOjpTQ0lTU09SX1RFU1QpKTsKKyAgICAgICAgICAgICAgICBpZiAobV9jYXBhYmlsaXRpZXMu
dXNpbmdQYXJ0aWFsU3dhcCkKKyAgICAgICAgICAgICAgICAgICAgc2V0U2Npc3NvclRvUmVjdChl
bmNsb3NpbmdJbnRSZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KSk7CiAgICAgICAgICAgICAgICAgR0xD
KG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAsIDApKTsKICAg
ICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNsZWFyKEdyYXBo
aWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKSk7Ci0gICAgICAgICAgICAgICAgR0xDKG1f
Y29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb25zdCBDQ0xheWVyTGlz
dCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUo
KTsgKytsYXllckluZGV4KQotICAgICAgICAgICAgICAgIGRyYXdMYXllcihsYXllckxpc3RbbGF5
ZXJJbmRleF0uZ2V0KCksIHJlbmRlclN1cmZhY2UpOworICAgICAgICAgICAgICAgIGRyYXdMYXll
cihsYXllckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCksIHJlbmRlclN1cmZhY2UsIHN1cmZhY2VEYW1h
Z2VSZWN0KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzkyLDIwICs0NDYsMjAgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCgpCiAgICAgLy8gQmluZCB0
aGUgY29tbW9uIHZlcnRleCBhdHRyaWJ1dGVzIHVzZWQgZm9yIGRyYXdpbmcgYWxsIHRoZSBsYXll
cnMuCiAgICAgbV9zaGFyZWRHZW9tZXRyeS0+cHJlcGFyZUZvckRyYXcoKTsKIAotICAgIEdMQyht
X2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJ
U1NPUl9URVNUKSk7CiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUKSk7CiAgICAgR0xDKG1fY29udGV4dC5nZXQo
KSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0UpKTsKIAog
ICAgIHVzZVJlbmRlclN1cmZhY2UobV9kZWZhdWx0UmVuZGVyU3VyZmFjZSk7CiAKICAgICAvLyBD
bGVhciB0byBibHVlIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHNwb3QgdW5yZW5kZXJlZCByZWdpb25z
LgorICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1BhcnRpYWxTd2FwKQorICAgICAgICBzZXRT
Y2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJlY3QobV9yb290RGFtYWdlUmVjdCkpOwogICAgIG1f
Y29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAxLCAxKTsKICAgICBtX2NvbnRleHQtPmNvbG9yTWFz
ayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKICAgICBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNz
Q29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKTsKIAogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCks
IG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwogICAgIEdMQyht
X2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpP
TkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKSk7Ci0gICAgR0xDKG1f
Y29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCkpOwogCiAgICAgZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyhyb290RHJhd0xh
eWVyLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIApAQCAtNDg3LDkgKzU0MSwxNyBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c3dhcEJ1ZmZlcnMoKQogICAgIFRSQUNFX0VWRU5UKCJM
YXllclJlbmRlcmVyQ2hyb21pdW06OnN3YXBCdWZmZXJzIiwgdGhpcywgMCk7CiAgICAgLy8gV2Un
cmUgZG9uZSEgVGltZSB0byBzd2FwYnVmZmVycyEKIAotICAgIC8vIE5vdGUgdGhhdCBjdXJyZW50
bHkgdGhpcyBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHN3YXBCdWZmZXJzOyB3ZSBzaG91bGQKLSAg
ICAvLyBjb25zaWRlciBleHBvc2luZyBhIGRpZmZlcmVudCBlbnRyeSBwb2ludCBvbiBHcmFwaGlj
c0NvbnRleHQzRC4KLSAgICBtX2NvbnRleHQtPnByZXBhcmVUZXh0dXJlKCk7CisgICAgaWYgKG1f
Y2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3YXApIHsKKyAgICAgICAgLy8gSWYgc3VwcG9ydGVk
LCB3ZSBjYW4gc2F2ZSBzaWduaWZpY2FudCBiYW5kd2lkdGggYnkgb25seSBzd2FwcGluZyB0aGUg
ZGFtYWdlZC9zY2lzc29yZWQgcmVnaW9uIChjbGFtcGVkIHRvIHRoZSB2aWV3cG9ydCkKKyAgICAg
ICAgSW50UmVjdCBzdWJCdWZmZXIgPSBlbmNsb3NpbmdJbnRSZWN0KG1fcm9vdERhbWFnZVJlY3Qp
OworICAgICAgICBzdWJCdWZmZXIuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
dmlld3BvcnRTaXplKCkpKTsKKyAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lv
bnMzRENocm9taXVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKSk7CisgICAgICAgIGludCBmbGlwcGVkWVBvc09mUmVjdEJvdHRv
bSA9IHZpZXdwb3J0SGVpZ2h0KCkgLSBzdWJCdWZmZXIueSgpIC0gc3ViQnVmZmVyLmhlaWdodCgp
OworICAgICAgICBleHRlbnNpb25zM0RDaHJvbWl1bS0+cG9zdFN1YkJ1ZmZlckNIUk9NSVVNKHN1
YkJ1ZmZlci54KCksIGZsaXBwZWRZUG9zT2ZSZWN0Qm90dG9tLCBzdWJCdWZmZXIud2lkdGgoKSwg
c3ViQnVmZmVyLmhlaWdodCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgLy8gTm90ZSB0aGF0IGN1
cnJlbnRseSB0aGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgc3dhcEJ1ZmZlcnM7IHdlIHNob3Vs
ZAorICAgICAgICAvLyBjb25zaWRlciBleHBvc2luZyBhIGRpZmZlcmVudCBlbnRyeSBwb2ludCBv
biBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAgICAgbV9jb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgp
OwogCiAgICAgbV9oZWFkc1VwRGlzcGxheS0+b25Td2FwQnVmZmVycygpOwogfQpAQCAtNTgyLDEw
ICs2NDQsMTAgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclN1cmZhY2Uo
Q0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlKQogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKENDTGF5ZXJJbXBsKiBsYXllciwg
Q0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0
U3VyZmFjZSwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkKIHsKICAgICBpZiAo
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldDxD
Q0xheWVySW1wbD4obGF5ZXIsIHRhcmdldFN1cmZhY2UtPm93bmluZ0xheWVySWQoKSkpIHsKLSAg
ICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHJhdyh0aGlzLCBsYXllci0+Z2V0RHJhd1Jl
Y3QoKSk7CisgICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmRyYXcodGhpcywgc3VyZmFj
ZURhbWFnZVJlY3QpOwogICAgICAgICBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5yZWxlYXNlQ29u
dGVudHNUZXh0dXJlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC01OTMsNyArNjU1LDEz
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoQ0NMYXllckltcGwqIGxh
eWVyLCBDQ1JlbmRlclN1cmZhY2UqIHRhcmdlCiAgICAgaWYgKGxheWVyLT52aXNpYmxlTGF5ZXJS
ZWN0KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobGF5ZXItPnVzZXNM
YXllckNsaXBwaW5nKCkpCisgICAgaWYgKGxheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpICYmIG1f
Y2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3YXApIHsKKyAgICAgICAgRmxvYXRSZWN0IGNsaXBB
bmREYW1hZ2VSZWN0KGxheWVyLT5jbGlwUmVjdCgpKTsKKyAgICAgICAgY2xpcEFuZERhbWFnZVJl
Y3QuaW50ZXJzZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KTsKKyAgICAgICAgc2V0U2Npc3NvclRvUmVj
dChlbmNsb3NpbmdJbnRSZWN0KGNsaXBBbmREYW1hZ2VSZWN0KSk7CisgICAgfSBlbHNlIGlmICht
X2NhcGFiaWxpdGllcy51c2luZ1BhcnRpYWxTd2FwKQorICAgICAgICBzZXRTY2lzc29yVG9SZWN0
KGVuY2xvc2luZ0ludFJlY3Qoc3VyZmFjZURhbWFnZVJlY3QpKTsKKyAgICBlbHNlIGlmIChsYXll
ci0+dXNlc0xheWVyQ2xpcHBpbmcoKSkKICAgICAgICAgc2V0U2Npc3NvclRvUmVjdChsYXllci0+
Y2xpcFJlY3QoKSk7CiAgICAgZWxzZQogICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2Nv
bnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCBmZjllNTUwMjU5MThlZDE1ZTlmNDAxNmE3
NWY4NmYzZDJjOTVjOTZjLi41YzgwNmQzM2E3MGYwYjVmMGZhN2VhOTI1Y2U1NzYxMjBhYWZhMjc5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMTY1LDcgKzE2NSw5IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIGRyYXdMYXllcnNJbnRlcm5hbCgpOwogICAgIHZvaWQgZHJh
d0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29u
c3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwotICAgIHZvaWQgZHJhd0xh
eWVyKENDTGF5ZXJJbXBsKiwgQ0NSZW5kZXJTdXJmYWNlKik7CisgICAgdm9pZCBkcmF3TGF5ZXIo
Q0NMYXllckltcGwqLCBDQ1JlbmRlclN1cmZhY2UqLCBjb25zdCBGbG9hdFJlY3QmKTsKKworICAg
IHZvaWQgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXll
ciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogCiAgICAgTWFu
YWdlZFRleHR1cmUqIGdldE9mZnNjcmVlbkxheWVyVGV4dHVyZSgpOwogICAgIHZvaWQgY29weU9m
ZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKTsKQEAgLTI0Myw2ICsyNDUsOCBAQCBwcml2YXRlOgog
ICAgIEZsb2F0UXVhZCBtX3NoYXJlZEdlb21ldHJ5UXVhZDsKIAogICAgIGJvb2wgbV9pc1ZpZXdw
b3J0Q2hhbmdlZDsKKworICAgIEZsb2F0UmVjdCBtX3Jvb3REYW1hZ2VSZWN0OwogfTsKIAogLy8g
U2V0dGluZyBERUJVR19HTF9DQUxMUyB0byAxIHdpbGwgY2FsbCBnbEdldEVycm9yKCkgYWZ0ZXIg
YWxtb3N0IGV2ZXJ5IEdMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDUwOTMwMTMz
ODNiZmIwMzQ0YjEwY2I4NDRhZWNhMTc3OGJhYTFlOWUuLmFiOWRkMjYwZmEzNzU0ZDNiZjQ3YWU3
MDIyZDI1MzEyNWU2ZDZhN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC03NCw3
ICs3NCw2IEBAIHN0cnVjdCBDQ1NldHRpbmdzIHsKICAgICAgICAgICAgICwgZGlzY2FyZEFsbFRl
eHR1cmVzKGZhbHNlKQogICAgICAgICAgICAgLCBzaG93RlBTQ291bnRlcihmYWxzZSkKICAgICAg
ICAgICAgICwgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGZhbHNlKQotICAgICAgICAgICAgLCB1c2VE
YW1hZ2VUcmFja2VyKGZhbHNlKQogICAgICAgICAgICAgLCByZWZyZXNoUmF0ZSgwKSB7IH0KIAog
ICAgIGJvb2wgYWNjZWxlcmF0ZVBhaW50aW5nOwpAQCAtODIsNyArODEsNiBAQCBzdHJ1Y3QgQ0NT
ZXR0aW5ncyB7CiAgICAgYm9vbCBkaXNjYXJkQWxsVGV4dHVyZXM7CiAgICAgYm9vbCBzaG93RlBT
Q291bnRlcjsKICAgICBib29sIHNob3dQbGF0Zm9ybUxheWVyVHJlZTsKLSAgICBib29sIHVzZURh
bWFnZVRyYWNrZXI7CiAgICAgZG91YmxlIHJlZnJlc2hSYXRlOwogfTsKIApAQCAtOTEsNyArODks
NyBAQCBzdHJ1Y3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyB7CiAgICAgTGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllcygpCiAgICAgICAgIDogYmVzdFRleHR1cmVGb3JtYXQoMCkKICAgICAgICAg
LCB1c2luZ0Zyb250QnVmZmVyQ2FjaGVkKGZhbHNlKQotICAgICAgICAsIHVzaW5nUG9zdFN1YkJ1
ZmZlcihmYWxzZSkKKyAgICAgICAgLCB1c2luZ1BhcnRpYWxTd2FwKGZhbHNlKQogICAgICAgICAs
IHVzaW5nTWFwU3ViKGZhbHNlKQogICAgICAgICAsIHVzaW5nQWNjZWxlcmF0ZWRQYWludGluZyhm
YWxzZSkKICAgICAgICAgLCB1c2luZ1NldFZpc2liaWxpdHkoZmFsc2UpCkBAIC0xMDAsNyArOTgs
NyBAQCBzdHJ1Y3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyB7CiAKICAgICBHQzNEZW51bSBi
ZXN0VGV4dHVyZUZvcm1hdDsKICAgICBib29sIHVzaW5nRnJvbnRCdWZmZXJDYWNoZWQ7Ci0gICAg
Ym9vbCB1c2luZ1Bvc3RTdWJCdWZmZXI7CisgICAgYm9vbCB1c2luZ1BhcnRpYWxTd2FwOwogICAg
IGJvb2wgdXNpbmdNYXBTdWI7CiAgICAgYm9vbCB1c2luZ0FjY2VsZXJhdGVkUGFpbnRpbmc7CiAg
ICAgYm9vbCB1c2luZ1NldFZpc2liaWxpdHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNw
cAppbmRleCAyOWRiNWE0MjlhZGJlMTUwNGQzM2RkMmNkNTUyNTAwNzQ0YTUwNDIzLi5hNGM5MjU2
OWQ3ZmYzOTdmYTUwM2RlM2I4NjlhY2UxMDJhYzMxNDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVy
U3VyZmFjZS5jcHAKQEAgLTEwMSw3ICsxMDEsNyBAQCB2b2lkIENDUmVuZGVyU3VyZmFjZTo6cmVs
ZWFzZUNvbnRlbnRzVGV4dHVyZSgpCiAgICAgbV9jb250ZW50c1RleHR1cmUtPnVucmVzZXJ2ZSgp
OwogfQogCi12b2lkIENDUmVuZGVyU3VyZmFjZTo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0q
IGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFJlY3QmKQordm9pZCBDQ1JlbmRlclN1cmZhY2U6OmRy
YXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3Qm
IHN1cmZhY2VEYW1hZ2VSZWN0KQogewogICAgIGlmIChtX3NraXBzRHJhdyB8fCAhbV9jb250ZW50
c1RleHR1cmUpCiAgICAgICAgIHJldHVybjsKQEAgLTExNSw3ICsxMTUsMTMgQEAgdm9pZCBDQ1Jl
bmRlclN1cmZhY2U6OmRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBj
b25zdCBJbnRSZWN0JikKICAgICBpZiAoIW1fbWFza0xheWVyICYmIG1fb3duaW5nTGF5ZXItPnJl
cGxpY2FMYXllcigpKQogICAgICAgICByZXBsaWNhTWFza0xheWVyID0gbV9vd25pbmdMYXllci0+
cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpOwogCi0gICAgaWYgKG1fb3duaW5nTGF5ZXItPnBh
cmVudCgpICYmIG1fb3duaW5nTGF5ZXItPnBhcmVudCgpLT51c2VzTGF5ZXJDbGlwcGluZygpKQor
ICAgIGlmIChtX293bmluZ0xheWVyLT5wYXJlbnQoKSAmJiBtX293bmluZ0xheWVyLT5wYXJlbnQo
KS0+dXNlc0xheWVyQ2xpcHBpbmcoKSAmJiBsYXllclJlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKS51
c2luZ1BhcnRpYWxTd2FwKSB7CisgICAgICAgIEZsb2F0UmVjdCBjbGlwQW5kRGFtYWdlUmVjdCA9
IG1fY2xpcFJlY3Q7CisgICAgICAgIGNsaXBBbmREYW1hZ2VSZWN0LmludGVyc2VjdChzdXJmYWNl
RGFtYWdlUmVjdCk7CisgICAgICAgIGxheWVyUmVuZGVyZXItPnNldFNjaXNzb3JUb1JlY3QoZW5j
bG9zaW5nSW50UmVjdChjbGlwQW5kRGFtYWdlUmVjdCkpOworICAgIH0gZWxzZSBpZiAobGF5ZXJS
ZW5kZXJlci0+Y2FwYWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCkKKyAgICAgICAgbGF5ZXJS
ZW5kZXJlci0+c2V0U2Npc3NvclRvUmVjdChlbmNsb3NpbmdJbnRSZWN0KHN1cmZhY2VEYW1hZ2VS
ZWN0KSk7CisgICAgZWxzZSBpZiAobV9vd25pbmdMYXllci0+cGFyZW50KCkgJiYgbV9vd25pbmdM
YXllci0+cGFyZW50KCktPnVzZXNMYXllckNsaXBwaW5nKCkpCiAgICAgICAgIGxheWVyUmVuZGVy
ZXItPnNldFNjaXNzb3JUb1JlY3QobV9jbGlwUmVjdCk7CiAgICAgZWxzZQogICAgICAgICBHTEMo
bGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyLT5jb250ZXh0KCktPmRpc2Fi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1
cmZhY2UuaAppbmRleCBkMGUzNWExNzg2NTQzN2VkZDJjODcyZGZhNjIyYzM2YjBkNDNhZGM0Li5h
OGU4N2E5ZjliZWE1ZDliYjRlODE4ZGY1MGRjMDhkOWU3MzI2ZjhjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclN1cmZhY2UuaApAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwcmVwYXJl
Q29udGVudHNUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwogICAgIHZvaWQgcmVsZWFz
ZUNvbnRlbnRzVGV4dHVyZSgpOwogICAgIHZvaWQgY2xlYW51cFJlc291cmNlcygpOwotICAgIHZv
aWQgZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJm
YWNlUmVjdCk7CisgICAgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEZs
b2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpOwogCiAgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsK
ICAgICB2b2lkIGR1bXBTdXJmYWNlKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117702</attachid>
            <date>2011-12-02 15:07:22 -0800</date>
            <delta_ts>2011-12-02 15:20:25 -0800</delta_ts>
            <desc>removed duplicate changelog entry</desc>
            <filename>bug-67341-20111202150721.patch</filename>
            <type>text/plain</type>
            <size>16886</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmI3ZDU2OWRjNjJmNTg2
MGMyMTZiZmYwZWQ4YjdhZDQxMGVmMWE0Yi4uNGExN2I1NTEwNzgwZTRkM2RmOWQxYzllM2NiOGRk
YzM2MmNkYmZkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDExLTEyLTAyICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
U2Npc3NvciByZWN0IG9wdGltaXphdGlvbiBmb3IgY2hyb21pdW0gY29tcG9zaXRvcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjczNDEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3N0bHkgY292ZXJlZCBi
eSBkYW1hZ2UgdHJhY2tlciB0ZXN0cy4gQ3VycmVudGx5IHRoaXMgcmVsaWVzIG9uCisgICAgICAg
IG1hbnVhbGx5IHJ1bm5pbmcgbGF5b3V0IHRlc3RzLCBiZWNhdXNlIHRoaXMgcGF0Y2ggcmVxdWly
ZXMgcGFydGlhbAorICAgICAgICBzd2FwcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IER1bXBS
ZW5kZXJUcmVlLiBUaGUgZmVhdHVyZQorICAgICAgICBhdXRvbWF0aWNhbGx5IGRpc2FibGVzIGlm
IHBhcnRpYWwgc3dhcCBpcyBub3Qgc3VwcG9ydGVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRl
clN1cmZhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0xheWVyc0ludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NTZXR0aW5nczo6Q0NT
ZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzOjpM
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5k
ZXJTdXJmYWNlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuaDoKKwogMjAxMS0xMi0wMiAgVnNldm9sb2QgVmxhc292ICA8dnNl
dmlrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBTcGxpdCB2aWV3IHdv
cmtzIHdlaXJkbHkgaW4gbmV0d29yayBwYW5lbCB3aGVuIHJlc2l6aW5nLCBzaG93aW5nL2hpZGlu
ZyBtYWluIGVsZW1lbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRl
eCA2ZjczM2ZkODJkYTk0ZmZjZjAyODE1MjEzZWRmNjk3MGJkMTE3M2U1Li5mYzJkYTJiYmQ1MzM4
NzhkNzYwODZiYzA5NDIyNDM3NWI2OTEzM2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHAKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJUcmFja2luZ1RleHR1cmVB
bGxvY2F0b3IuaCIKICNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCiAjaW5jbHVkZSAiV2Vi
R0xMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NEYW1hZ2VUcmFja2VyLmgiCiAjaW5j
bHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21t
b24uaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCkBAIC0xMDcsNiArMTA4LDIxIEBAIHN0YXRp
YyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JlZW5NYXRyaXgoaW50IHgsIGludCB5LCBpbnQgd2lk
dGgsIGludCBoZWlnaHQpCiAgICAgcmV0dXJuIHNjcmVlbjsKIH0KIAorc3RhdGljIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGNvbXB1dGVTY3JlZW5TcGFjZVRyYW5zZm9ybUZvclN1cmZhY2UoQ0NMYXll
ckltcGwqIHJlbmRlclN1cmZhY2VMYXllcikKK3sKKyAgICAvLyBUaGUgbGF5ZXIncyBzY3JlZW4g
c3BhY2UgdHJhbnNmb3JtIGNhbiBiZSB3cml0dGVuIGFzOgorICAgIC8vICAgbGF5ZXJTY3JlZW5T
cGFjZVRyYW5zZm9ybSA9IHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5zZm9ybSAqIGxheWVyT3JpZ2lu
VHJhbnNmb3JtCisgICAgLy8gU28sIHRvIGNvbXB1dGUgdGhlIHN1cmZhY2Ugc2NyZWVuIHNwYWNl
LCB3ZSBjYW4gZG86CisgICAgLy8gICBzdXJmYWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBsYXll
clNjcmVlblNwYWNlVHJhbnNmb3JtICogaW52ZXJzZShsYXllck9yaWdpblRyYW5zZm9ybSkKKwor
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyT3JpZ2luVHJhbnNmb3JtID0gcmVuZGVyU3Vy
ZmFjZUxheWVyLT5kcmF3VHJhbnNmb3JtKCk7CisgICAgbGF5ZXJPcmlnaW5UcmFuc2Zvcm0udHJh
bnNsYXRlKC0wLjUgKiByZW5kZXJTdXJmYWNlTGF5ZXItPmJvdW5kcygpLndpZHRoKCksIC0wLjUg
KiByZW5kZXJTdXJmYWNlTGF5ZXItPmJvdW5kcygpLmhlaWdodCgpKTsKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBzdXJmYWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlTGF5
ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCk7CisgICAgc3VyZmFjZVNjcmVlblNwYWNlVHJhbnNm
b3JtLm11bHRpcGx5KGxheWVyT3JpZ2luVHJhbnNmb3JtLmludmVyc2UoKSk7CisKKyAgICByZXR1
cm4gc3VyZmFjZVNjcmVlblNwYWNlVHJhbnNmb3JtOworfQorCiAjaWYgVVNFKFNLSUEpCiBib29s
IGNvbnRleHRTdXBwb3J0c0FjY2VsZXJhdGVkUGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpCiB7CkBAIC0xOTEsOSArMjA3LDEyIEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojppbml0aWFsaXplKCkKICAgICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdGcm9udEJ1ZmZlckNh
Y2hlZCkKICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfQ0hST01JVU1fZnJv
bnRfYnVmZmVyX2NhY2hlZCIpOwogCi0gICAgbV9jYXBhYmlsaXRpZXMudXNpbmdQb3N0U3ViQnVm
ZmVyID0gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX3Bvc3Rfc3ViX2J1ZmZlciIp
OwotICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1Bvc3RTdWJCdWZmZXIpCisgICAgbV9jYXBh
YmlsaXRpZXMudXNpbmdQYXJ0aWFsU3dhcCA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9DSFJP
TUlVTV9wb3N0X3N1Yl9idWZmZXIiKTsKKyAgICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdQYXJ0
aWFsU3dhcCkKICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfQ0hST01JVU1f
cG9zdF9zdWJfYnVmZmVyIik7CisgICAgLy8gRklYTUU6IGV2ZW50dWFsbHkgd2Ugd291bGQgbGlr
ZSB0byBoYXZlIHVzaW5nUGFydGlhbFN3YXAgZW5hYmxlZCBieSBkZWZhdWx0LAorICAgIC8vICAg
ICAgICB3aGVuZXZlciBpdCBpcyBzdXBwb3J0ZWQuIEZvciBub3csIHdlIGZvcmNlIGl0IG9mZi4K
KyAgICBtX2NhcGFiaWxpdGllcy51c2luZ1BhcnRpYWxTd2FwID0gZmFsc2U7CiAKICAgICBtX2Nh
cGFiaWxpdGllcy51c2luZ01hcFN1YiA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9DSFJPTUlV
TV9tYXBfc3ViIik7CiAgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nTWFwU3ViKQpAQCAtMzE3
LDEwICszMzYsMzAgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQog
ICAgICAgICBjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpOwogfQogCit2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVySW1wbCog
cm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3Qp
Cit7CisgICAgLy8gRm9yIG5vdywgd2UgdXNlIGRhbWFnZSB0cmFja2luZyB0byBjb21wdXRlIGEg
Z2xvYmFsIHNjaXNzb3IuIFRvIGRvIHRoaXMsIHdlIG11c3QKKyAgICAvLyBjb21wdXRlIGFsbCBk
YW1hZ2UgdHJhY2tpbmcgYmVmb3JlIGRyYXdpbmcgYW55dGhpbmcsIHNvIHRoYXQgd2Uga25vdyB0
aGUgcm9vdAorICAgIC8vIGRhbWFnZSByZWN0LiBUaGUgcm9vdCBkYW1hZ2UgcmVjdCBpcyB0aGVu
IHVzZWQgdG8gc2Npc3NvciBlYWNoIHN1cmZhY2UuCisKKyAgICBBU1NFUlQobV9jYXBhYmlsaXRp
ZXMudXNpbmdQYXJ0aWFsU3dhcCk7CisKKyAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJm
YWNlSW5kZXgpIHsKKyAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJl
bmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsKKyAgICAgICAgQ0NSZW5k
ZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJm
YWNlKCk7CisgICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlKTsKKyAgICAgICAgcmVuZGVyU3Vy
ZmFjZS0+ZGFtYWdlVHJhY2tlcigpLT51cGRhdGVEYW1hZ2VSZWN0Rm9yTmV4dEZyYW1lKHJlbmRl
clN1cmZhY2UtPmxheWVyTGlzdCgpLCByZW5kZXJTdXJmYWNlTGF5ZXItPmlkKCksIHJlbmRlclN1
cmZhY2VMYXllci0+bWFza0xheWVyKCkpOworICAgIH0KK30KKwogdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3RE
cmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQogewog
ICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVu
ZGVyU3VyZmFjZXMiLCB0aGlzLCAwKTsKIAorICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1Bh
cnRpYWxTd2FwKQorICAgICAgICB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3REcmF3TGF5
ZXIsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIG1fcm9vdERhbWFnZVJlY3QgPSByb290
RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIoKS0+Y3VycmVudERhbWFn
ZVJlY3QoKTsKKwogICAgIC8vIFVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHJlbmRlciBzdXJm
YWNlcy4gV2UgdHJhdmVyc2UgdGhlIHJlbmRlciBzdXJmYWNlcwogICAgIC8vIGZyb20gYmFjayB0
byBmcm9udCB0byBndWFyYW50ZWUgdGhhdCBuZXN0ZWQgcmVuZGVyIHN1cmZhY2VzIGdldCByZW5k
ZXJlZCBpbgogICAgIC8vIHRoZSBjb3JyZWN0IG9yZGVyLgpAQCAtMzMyLDE2ICszNzEsMzEgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMo
Q0NMYXllckltcGwqIHJvb3REcmF3TGEKIAogICAgICAgICBpZiAodXNlUmVuZGVyU3VyZmFjZShy
ZW5kZXJTdXJmYWNlKSkgewogCisgICAgICAgICAgICBGbG9hdFJlY3Qgc3VyZmFjZURhbWFnZVJl
Y3Q7CisgICAgICAgICAgICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdQYXJ0aWFsU3dhcCkgewor
ICAgICAgICAgICAgICAgIC8vIEZvciBub3csIHdlIGNvbnNlcnZhdGl2ZWx5IHVzZSB0aGUgcm9v
dCBkYW1hZ2UgYXMgdGhlIGRhbWFnZSBmb3IgYWxsCisgICAgICAgICAgICAgICAgLy8gc3VyZmFj
ZXMsIGV4Y2VwdCBwZXJzcGVjdGl2ZSB0cmFuc2Zvcm1zLgorICAgICAgICAgICAgICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHNjcmVlblNwYWNlVHJhbnNmb3JtID0gY29tcHV0ZVNjcmVlblNwYWNl
VHJhbnNmb3JtRm9yU3VyZmFjZShyZW5kZXJTdXJmYWNlTGF5ZXIpOworICAgICAgICAgICAgICAg
IGlmIChzY3JlZW5TcGFjZVRyYW5zZm9ybS5oYXNQZXJzcGVjdGl2ZSgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFBlcnNwZWN0aXZlIHByb2plY3Rpb25zIGRvIG5vdCBwbGF5IG5pY2Ugd2l0
aCBtYXBSZWN0IG9mIGludmVyc2UgdHJhbnNmb3Jtcy4KKyAgICAgICAgICAgICAgICAgICAgLy8g
SW4gdGhpcyB1bmNvbW1vbiBjYXNlLCBpdHMgc2ltcGxlciB0byBqdXN0IHJlZHJhdyB0aGUgZW50
aXJlIHN1cmZhY2UuCisgICAgICAgICAgICAgICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gcmVu
ZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlU2NyZWVuU3BhY2VU
cmFuc2Zvcm0gPSBzY3JlZW5TcGFjZVRyYW5zZm9ybS5pbnZlcnNlKCk7CisgICAgICAgICAgICAg
ICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gaW52ZXJzZVNjcmVlblNwYWNlVHJhbnNmb3JtLm1h
cFJlY3QobV9yb290RGFtYWdlUmVjdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCiAgICAgICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyICE9IHJvb3REcmF3TGF5ZXIp
IHsKLSAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2Fi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOworICAgICAgICAgICAgICAgIGlm
IChtX2NhcGFiaWxpdGllcy51c2luZ1BhcnRpYWxTd2FwKQorICAgICAgICAgICAgICAgICAgICBz
ZXRTY2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJlY3Qoc3VyZmFjZURhbWFnZVJlY3QpKTsKICAg
ICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNsZWFyQ29sb3Io
MCwgMCwgMCwgMCkpOwogICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29u
dGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKTsKLSAgICAg
ICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGNvbnN0IENDTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3Qo
KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXgg
PCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpCi0gICAgICAgICAgICAgICAgZHJhd0xh
eWVyKGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKSwgcmVuZGVyU3VyZmFjZSk7CisgICAgICAg
ICAgICAgICAgZHJhd0xheWVyKGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKSwgcmVuZGVyU3Vy
ZmFjZSwgc3VyZmFjZURhbWFnZVJlY3QpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zOTIsMjAg
KzQ0NiwyMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFs
KCkKICAgICAvLyBCaW5kIHRoZSBjb21tb24gdmVydGV4IGF0dHJpYnV0ZXMgdXNlZCBmb3IgZHJh
d2luZyBhbGwgdGhlIGxheWVycy4KICAgICBtX3NoYXJlZEdlb21ldHJ5LT5wcmVwYXJlRm9yRHJh
dygpOwogCi0gICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBt
X2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1QpKTsKICAgICBH
TEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkNVTExfRkFDRSkpOwogCiAgICAgdXNlUmVuZGVyU3VyZmFjZShtX2RlZmF1bHRSZW5kZXJTdXJm
YWNlKTsKIAogICAgIC8vIENsZWFyIHRvIGJsdWUgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc3BvdCB1
bnJlbmRlcmVkIHJlZ2lvbnMuCisgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3
YXApCisgICAgICAgIHNldFNjaXNzb3JUb1JlY3QoZW5jbG9zaW5nSW50UmVjdChtX3Jvb3REYW1h
Z2VSZWN0KSk7CiAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDEsIDEpOwogICAgIG1f
Y29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpOwogICAgIG1fY29udGV4
dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOwogCiAgICAgR0xD
KG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJM
RU5EKSk7CiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3Jh
cGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQ
SEEpKTsKLSAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAKICAgICBkcmF3TGF5ZXJzT250b1JlbmRlclN1
cmZhY2VzKHJvb3REcmF3TGF5ZXIsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogCkBAIC00ODcs
OSArNTQxLDE3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzd2FwQnVmZmVycygpCiAg
ICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c3dhcEJ1ZmZlcnMiLCB0aGlz
LCAwKTsKICAgICAvLyBXZSdyZSBkb25lISBUaW1lIHRvIHN3YXBidWZmZXJzIQogCi0gICAgLy8g
Tm90ZSB0aGF0IGN1cnJlbnRseSB0aGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgc3dhcEJ1ZmZl
cnM7IHdlIHNob3VsZAotICAgIC8vIGNvbnNpZGVyIGV4cG9zaW5nIGEgZGlmZmVyZW50IGVudHJ5
IHBvaW50IG9uIEdyYXBoaWNzQ29udGV4dDNELgotICAgIG1fY29udGV4dC0+cHJlcGFyZVRleHR1
cmUoKTsKKyAgICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdQYXJ0aWFsU3dhcCkgeworICAgICAg
ICAvLyBJZiBzdXBwb3J0ZWQsIHdlIGNhbiBzYXZlIHNpZ25pZmljYW50IGJhbmR3aWR0aCBieSBv
bmx5IHN3YXBwaW5nIHRoZSBkYW1hZ2VkL3NjaXNzb3JlZCByZWdpb24gKGNsYW1wZWQgdG8gdGhl
IHZpZXdwb3J0KQorICAgICAgICBJbnRSZWN0IHN1YkJ1ZmZlciA9IGVuY2xvc2luZ0ludFJlY3Qo
bV9yb290RGFtYWdlUmVjdCk7CisgICAgICAgIHN1YkJ1ZmZlci5pbnRlcnNlY3QoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCB2aWV3cG9ydFNpemUoKSkpOworICAgICAgICBFeHRlbnNpb25zM0RD
aHJvbWl1bSogZXh0ZW5zaW9uczNEQ2hyb21pdW0gPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RD
aHJvbWl1bSo+KG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKTsKKyAgICAgICAgaW50IGZsaXBw
ZWRZUG9zT2ZSZWN0Qm90dG9tID0gdmlld3BvcnRIZWlnaHQoKSAtIHN1YkJ1ZmZlci55KCkgLSBz
dWJCdWZmZXIuaGVpZ2h0KCk7CisgICAgICAgIGV4dGVuc2lvbnMzRENocm9taXVtLT5wb3N0U3Vi
QnVmZmVyQ0hST01JVU0oc3ViQnVmZmVyLngoKSwgZmxpcHBlZFlQb3NPZlJlY3RCb3R0b20sIHN1
YkJ1ZmZlci53aWR0aCgpLCBzdWJCdWZmZXIuaGVpZ2h0KCkpOworICAgIH0gZWxzZQorICAgICAg
ICAvLyBOb3RlIHRoYXQgY3VycmVudGx5IHRoaXMgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBzd2Fw
QnVmZmVyczsgd2Ugc2hvdWxkCisgICAgICAgIC8vIGNvbnNpZGVyIGV4cG9zaW5nIGEgZGlmZmVy
ZW50IGVudHJ5IHBvaW50IG9uIEdyYXBoaWNzQ29udGV4dDNELgorICAgICAgICBtX2NvbnRleHQt
PnByZXBhcmVUZXh0dXJlKCk7CiAKICAgICBtX2hlYWRzVXBEaXNwbGF5LT5vblN3YXBCdWZmZXJz
KCk7CiB9CkBAIC01ODIsMTAgKzY0NCwxMCBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dXNlUmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoQ0NM
YXllckltcGwqIGxheWVyLCBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UpCit2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NSZW5k
ZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VS
ZWN0KQogewogICAgIGlmIChDQ0xheWVyVHJlZUhvc3RDb21tb246OnJlbmRlclN1cmZhY2VDb250
cmlidXRlc1RvVGFyZ2V0PENDTGF5ZXJJbXBsPihsYXllciwgdGFyZ2V0U3VyZmFjZS0+b3duaW5n
TGF5ZXJJZCgpKSkgewotICAgICAgICBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3KHRoaXMs
IGxheWVyLT5nZXREcmF3UmVjdCgpKTsKKyAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+
ZHJhdyh0aGlzLCBzdXJmYWNlRGFtYWdlUmVjdCk7CiAgICAgICAgIGxheWVyLT5yZW5kZXJTdXJm
YWNlKCktPnJlbGVhc2VDb250ZW50c1RleHR1cmUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTU5Myw3ICs2NTUsMTMgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXll
cihDQ0xheWVySW1wbCogbGF5ZXIsIENDUmVuZGVyU3VyZmFjZSogdGFyZ2UKICAgICBpZiAobGF5
ZXItPnZpc2libGVMYXllclJlY3QoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChsYXllci0+dXNlc0xheWVyQ2xpcHBpbmcoKSkKKyAgICBpZiAobGF5ZXItPnVzZXNMYXll
ckNsaXBwaW5nKCkgJiYgbV9jYXBhYmlsaXRpZXMudXNpbmdQYXJ0aWFsU3dhcCkgeworICAgICAg
ICBGbG9hdFJlY3QgY2xpcEFuZERhbWFnZVJlY3QobGF5ZXItPmNsaXBSZWN0KCkpOworICAgICAg
ICBjbGlwQW5kRGFtYWdlUmVjdC5pbnRlcnNlY3Qoc3VyZmFjZURhbWFnZVJlY3QpOworICAgICAg
ICBzZXRTY2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJlY3QoY2xpcEFuZERhbWFnZVJlY3QpKTsK
KyAgICB9IGVsc2UgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3YXApCisgICAgICAg
IHNldFNjaXNzb3JUb1JlY3QoZW5jbG9zaW5nSW50UmVjdChzdXJmYWNlRGFtYWdlUmVjdCkpOwor
ICAgIGVsc2UgaWYgKGxheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpKQogICAgICAgICBzZXRTY2lz
c29yVG9SZWN0KGxheWVyLT5jbGlwUmVjdCgpKTsKICAgICBlbHNlCiAgICAgICAgIEdMQyhtX2Nv
bnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IGZmOWU1NTAy
NTkxOGVkMTVlOWY0MDE2YTc1Zjg2ZjNkMmM5NWM5NmMuLjVjODA2ZDMzYTcwZjBiNWYwZmE3ZWE5
MjVjZTU3NjEyMGFhZmEyNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBA
IC0xNjUsNyArMTY1LDkgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJhd0xheWVyc0ludGVybmFs
KCk7CiAgICAgdm9pZCBkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiBy
b290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7
Ci0gICAgdm9pZCBkcmF3TGF5ZXIoQ0NMYXllckltcGwqLCBDQ1JlbmRlclN1cmZhY2UqKTsKKyAg
ICB2b2lkIGRyYXdMYXllcihDQ0xheWVySW1wbCosIENDUmVuZGVyU3VyZmFjZSosIGNvbnN0IEZs
b2F0UmVjdCYpOworCisgICAgdm9pZCB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJ
bXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CiAKICAgICBNYW5hZ2VkVGV4dHVyZSogZ2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCk7
CiAgICAgdm9pZCBjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpOwpAQCAtMjQzLDYgKzI0
NSw4IEBAIHByaXZhdGU6CiAgICAgRmxvYXRRdWFkIG1fc2hhcmVkR2VvbWV0cnlRdWFkOwogCiAg
ICAgYm9vbCBtX2lzVmlld3BvcnRDaGFuZ2VkOworCisgICAgRmxvYXRSZWN0IG1fcm9vdERhbWFn
ZVJlY3Q7CiB9OwogCiAvLyBTZXR0aW5nIERFQlVHX0dMX0NBTExTIHRvIDEgd2lsbCBjYWxsIGds
R2V0RXJyb3IoKSBhZnRlciBhbG1vc3QgZXZlcnkgR0wKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmgKaW5kZXggNTA5MzAxMzM4M2JmYjAzNDRiMTBjYjg0NGFlY2ExNzc4YmFhMWU5ZS4uYWI5ZGQy
NjBmYTM3NTRkM2JmNDdhZTcwMjJkMjUzMTI1ZTZkNmE3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmgKQEAgLTc0LDcgKzc0LDYgQEAgc3RydWN0IENDU2V0dGluZ3MgewogICAgICAgICAg
ICAgLCBkaXNjYXJkQWxsVGV4dHVyZXMoZmFsc2UpCiAgICAgICAgICAgICAsIHNob3dGUFNDb3Vu
dGVyKGZhbHNlKQogICAgICAgICAgICAgLCBzaG93UGxhdGZvcm1MYXllclRyZWUoZmFsc2UpCi0g
ICAgICAgICAgICAsIHVzZURhbWFnZVRyYWNrZXIoZmFsc2UpCiAgICAgICAgICAgICAsIHJlZnJl
c2hSYXRlKDApIHsgfQogCiAgICAgYm9vbCBhY2NlbGVyYXRlUGFpbnRpbmc7CkBAIC04Miw3ICs4
MSw2IEBAIHN0cnVjdCBDQ1NldHRpbmdzIHsKICAgICBib29sIGRpc2NhcmRBbGxUZXh0dXJlczsK
ICAgICBib29sIHNob3dGUFNDb3VudGVyOwogICAgIGJvb2wgc2hvd1BsYXRmb3JtTGF5ZXJUcmVl
OwotICAgIGJvb2wgdXNlRGFtYWdlVHJhY2tlcjsKICAgICBkb3VibGUgcmVmcmVzaFJhdGU7CiB9
OwogCkBAIC05MSw3ICs4OSw3IEBAIHN0cnVjdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIHsK
ICAgICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkKICAgICAgICAgOiBiZXN0VGV4dHVyZUZv
cm1hdCgwKQogICAgICAgICAsIHVzaW5nRnJvbnRCdWZmZXJDYWNoZWQoZmFsc2UpCi0gICAgICAg
ICwgdXNpbmdQb3N0U3ViQnVmZmVyKGZhbHNlKQorICAgICAgICAsIHVzaW5nUGFydGlhbFN3YXAo
ZmFsc2UpCiAgICAgICAgICwgdXNpbmdNYXBTdWIoZmFsc2UpCiAgICAgICAgICwgdXNpbmdBY2Nl
bGVyYXRlZFBhaW50aW5nKGZhbHNlKQogICAgICAgICAsIHVzaW5nU2V0VmlzaWJpbGl0eShmYWxz
ZSkKQEAgLTEwMCw3ICs5OCw3IEBAIHN0cnVjdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIHsK
IAogICAgIEdDM0RlbnVtIGJlc3RUZXh0dXJlRm9ybWF0OwogICAgIGJvb2wgdXNpbmdGcm9udEJ1
ZmZlckNhY2hlZDsKLSAgICBib29sIHVzaW5nUG9zdFN1YkJ1ZmZlcjsKKyAgICBib29sIHVzaW5n
UGFydGlhbFN3YXA7CiAgICAgYm9vbCB1c2luZ01hcFN1YjsKICAgICBib29sIHVzaW5nQWNjZWxl
cmF0ZWRQYWludGluZzsKICAgICBib29sIHVzaW5nU2V0VmlzaWJpbGl0eTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclN1cmZhY2UuY3BwCmluZGV4IDI5ZGI1YTQyOWFkYmUxNTA0ZDMzZGQyY2Q1NTI1MDA3
NDRhNTA0MjMuLmE0YzkyNTY5ZDdmZjM5N2ZhNTAzZGUzYjg2OWFjZTEwMmFjMzE0NTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcApAQCAtMTAxLDcgKzEwMSw3IEBAIHZvaWQgQ0NS
ZW5kZXJTdXJmYWNlOjpyZWxlYXNlQ29udGVudHNUZXh0dXJlKCkKICAgICBtX2NvbnRlbnRzVGV4
dHVyZS0+dW5yZXNlcnZlKCk7CiB9CiAKLXZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpkcmF3KExheWVy
UmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgSW50UmVjdCYpCit2b2lkIEND
UmVuZGVyU3VyZmFjZTo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIs
IGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCiB7CiAgICAgaWYgKG1fc2tpcHNE
cmF3IHx8ICFtX2NvbnRlbnRzVGV4dHVyZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE1LDcgKzEx
NSwxMyBAQCB2b2lkIENDUmVuZGVyU3VyZmFjZTo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0q
IGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFJlY3QmKQogICAgIGlmICghbV9tYXNrTGF5ZXIgJiYg
bV9vd25pbmdMYXllci0+cmVwbGljYUxheWVyKCkpCiAgICAgICAgIHJlcGxpY2FNYXNrTGF5ZXIg
PSBtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCk7CiAKLSAgICBpZiAo
bV9vd25pbmdMYXllci0+cGFyZW50KCkgJiYgbV9vd25pbmdMYXllci0+cGFyZW50KCktPnVzZXNM
YXllckNsaXBwaW5nKCkpCisgICAgaWYgKG1fb3duaW5nTGF5ZXItPnBhcmVudCgpICYmIG1fb3du
aW5nTGF5ZXItPnBhcmVudCgpLT51c2VzTGF5ZXJDbGlwcGluZygpICYmIGxheWVyUmVuZGVyZXIt
PmNhcGFiaWxpdGllcygpLnVzaW5nUGFydGlhbFN3YXApIHsKKyAgICAgICAgRmxvYXRSZWN0IGNs
aXBBbmREYW1hZ2VSZWN0ID0gbV9jbGlwUmVjdDsKKyAgICAgICAgY2xpcEFuZERhbWFnZVJlY3Qu
aW50ZXJzZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KTsKKyAgICAgICAgbGF5ZXJSZW5kZXJlci0+c2V0
U2Npc3NvclRvUmVjdChlbmNsb3NpbmdJbnRSZWN0KGNsaXBBbmREYW1hZ2VSZWN0KSk7CisgICAg
fSBlbHNlIGlmIChsYXllclJlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2Fw
KQorICAgICAgICBsYXllclJlbmRlcmVyLT5zZXRTY2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJl
Y3Qoc3VyZmFjZURhbWFnZVJlY3QpKTsKKyAgICBlbHNlIGlmIChtX293bmluZ0xheWVyLT5wYXJl
bnQoKSAmJiBtX293bmluZ0xheWVyLT5wYXJlbnQoKS0+dXNlc0xheWVyQ2xpcHBpbmcoKSkKICAg
ICAgICAgbGF5ZXJSZW5kZXJlci0+c2V0U2Npc3NvclRvUmVjdChtX2NsaXBSZWN0KTsKICAgICBl
bHNlCiAgICAgICAgIEdMQyhsYXllclJlbmRlcmVyLT5jb250ZXh0KCksIGxheWVyUmVuZGVyZXIt
PmNvbnRleHQoKS0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCmluZGV4IGQwZTM1YTE3ODY1NDM3ZWRkMmM4NzJkZmE2
MjJjMzZiMGQ0M2FkYzQuLmE4ZTg3YTlmOWJlYTVkOWJiNGU4MThkZjUwZGMwOGQ5ZTczMjZmOGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoK
ICAgICBib29sIHByZXBhcmVDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7
CiAgICAgdm9pZCByZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7CiAgICAgdm9pZCBjbGVhbnVwUmVz
b3VyY2VzKCk7Ci0gICAgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IElu
dFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0KTsKKyAgICB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKiwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCk7CiAKICAgICBTdHJp
bmcgbmFtZSgpIGNvbnN0OwogICAgIHZvaWQgZHVtcFN1cmZhY2UoVGV4dFN0cmVhbSYsIGludCBp
bmRlbnQpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117704</attachid>
            <date>2011-12-02 15:20:30 -0800</date>
            <delta_ts>2011-12-02 22:14:25 -0800</delta_ts>
            <desc>resolved merge conflict on tip of tree</desc>
            <filename>bug-67341-20111202152029.patch</filename>
            <type>text/plain</type>
            <size>16817</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxODY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjFkM2QyMzczMmUyNmY2
MjJiZDhmNmI4ZDg1NjljYzQ2OWNlYmYwNC4uNjE4ODU4YjkyMzUyYmRkZjA5ZmFmY2I5MDI1MmEy
NmEyYmIzMmQwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDExLTEyLTAyICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
U2Npc3NvciByZWN0IG9wdGltaXphdGlvbiBmb3IgY2hyb21pdW0gY29tcG9zaXRvcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjczNDEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3N0bHkgY292ZXJlZCBi
eSBkYW1hZ2UgdHJhY2tlciB0ZXN0cy4gQ3VycmVudGx5IHRoaXMgcmVsaWVzIG9uCisgICAgICAg
IG1hbnVhbGx5IHJ1bm5pbmcgbGF5b3V0IHRlc3RzLCBiZWNhdXNlIHRoaXMgcGF0Y2ggcmVxdWly
ZXMgcGFydGlhbAorICAgICAgICBzd2FwcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IER1bXBS
ZW5kZXJUcmVlLiBUaGUgZmVhdHVyZQorICAgICAgICBhdXRvbWF0aWNhbGx5IGRpc2FibGVzIGlm
IHBhcnRpYWwgc3dhcCBpcyBub3Qgc3VwcG9ydGVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRl
clN1cmZhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0xheWVyc0ludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NTZXR0aW5nczo6Q0NT
ZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzOjpM
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5k
ZXJTdXJmYWNlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuaDoKKwogMjAxMS0xMi0wMiAgSm9uYXRoYW4gQmFja2VyICA8YmFj
a2VyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEVsaW1pbmF0ZSB1bm5lY2Vz
c2FyeSBzdGF0ZSBvbiBwcmV2aW91cyBDTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAKaW5kZXggMDc5NzRkZjljOGJjOGJjODAyZGNlOTNkMmM4NDQ2MWM4NjM1MmUwYy4uNTI2
ZjdmYjNlZTFlOWIxZjBiN2RmNmZhMjM1Mzg1NzUwNTYxNDA5MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiVHJhY2tp
bmdUZXh0dXJlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgogI2lu
Y2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDRGFtYWdlVHJhY2tl
ci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgpAQCAtMTA3LDYgKzEwOCwy
MSBAQCBzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggc2NyZWVuTWF0cml4KGludCB4LCBpbnQg
eSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIHJldHVybiBzY3JlZW47CiB9CiAKK3N0YXRp
YyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21wdXRlU2NyZWVuU3BhY2VUcmFuc2Zvcm1Gb3JTdXJm
YWNlKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIpCit7CisgICAgLy8gVGhlIGxheWVy
J3Mgc2NyZWVuIHNwYWNlIHRyYW5zZm9ybSBjYW4gYmUgd3JpdHRlbiBhczoKKyAgICAvLyAgIGxh
eWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBzdXJmYWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gKiBs
YXllck9yaWdpblRyYW5zZm9ybQorICAgIC8vIFNvLCB0byBjb21wdXRlIHRoZSBzdXJmYWNlIHNj
cmVlbiBzcGFjZSwgd2UgY2FuIGRvOgorICAgIC8vICAgc3VyZmFjZVNjcmVlblNwYWNlVHJhbnNm
b3JtID0gbGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybSAqIGludmVyc2UobGF5ZXJPcmlnaW5UcmFu
c2Zvcm0pCisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllck9yaWdpblRyYW5zZm9ybSA9
IHJlbmRlclN1cmZhY2VMYXllci0+ZHJhd1RyYW5zZm9ybSgpOworICAgIGxheWVyT3JpZ2luVHJh
bnNmb3JtLnRyYW5zbGF0ZSgtMC41ICogcmVuZGVyU3VyZmFjZUxheWVyLT5ib3VuZHMoKS53aWR0
aCgpLCAtMC41ICogcmVuZGVyU3VyZmFjZUxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSk7CisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggc3VyZmFjZVNjcmVlblNwYWNlVHJhbnNmb3JtID0gcmVuZGVy
U3VyZmFjZUxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpOworICAgIHN1cmZhY2VTY3JlZW5T
cGFjZVRyYW5zZm9ybS5tdWx0aXBseShsYXllck9yaWdpblRyYW5zZm9ybS5pbnZlcnNlKCkpOwor
CisgICAgcmV0dXJuIHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5zZm9ybTsKK30KKwogI2lmIFVTRShT
S0lBKQogYm9vbCBjb250ZXh0U3VwcG9ydHNBY2NlbGVyYXRlZFBhaW50aW5nKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0KQogewpAQCAtMTkxLDkgKzIwNywxMiBAQCBib29sIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSgpCiAgICAgaWYgKG1fY2FwYWJpbGl0aWVzLmNvbnRleHRI
YXNDYWNoZWRGcm9udEJ1ZmZlcikKICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgi
R0xfQ0hST01JVU1fZnJvbnRfYnVmZmVyX2NhY2hlZCIpOwogCi0gICAgbV9jYXBhYmlsaXRpZXMu
dXNpbmdQb3N0U3ViQnVmZmVyID0gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX3Bv
c3Rfc3ViX2J1ZmZlciIpOwotICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1Bvc3RTdWJCdWZm
ZXIpCisgICAgbV9jYXBhYmlsaXRpZXMudXNpbmdQYXJ0aWFsU3dhcCA9IGV4dGVuc2lvbnMtPnN1
cHBvcnRzKCJHTF9DSFJPTUlVTV9wb3N0X3N1Yl9idWZmZXIiKTsKKyAgICBpZiAobV9jYXBhYmls
aXRpZXMudXNpbmdQYXJ0aWFsU3dhcCkKICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxl
ZCgiR0xfQ0hST01JVU1fcG9zdF9zdWJfYnVmZmVyIik7CisgICAgLy8gRklYTUU6IGV2ZW50dWFs
bHkgd2Ugd291bGQgbGlrZSB0byBoYXZlIHVzaW5nUGFydGlhbFN3YXAgZW5hYmxlZCBieSBkZWZh
dWx0LAorICAgIC8vICAgICAgICB3aGVuZXZlciBpdCBpcyBzdXBwb3J0ZWQuIEZvciBub3csIHdl
IGZvcmNlIGl0IG9mZi4KKyAgICBtX2NhcGFiaWxpdGllcy51c2luZ1BhcnRpYWxTd2FwID0gZmFs
c2U7CiAKICAgICBtX2NhcGFiaWxpdGllcy51c2luZ01hcFN1YiA9IGV4dGVuc2lvbnMtPnN1cHBv
cnRzKCJHTF9DSFJPTUlVTV9tYXBfc3ViIik7CiAgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5n
TWFwU3ViKQpAQCAtMzE3LDEwICszMzYsMzAgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmRyYXdMYXllcnMoKQogICAgICAgICBjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpOwog
fQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNl
cyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpCit7CisgICAgLy8gRm9yIG5vdywgd2UgdXNlIGRhbWFnZSB0cmFja2lu
ZyB0byBjb21wdXRlIGEgZ2xvYmFsIHNjaXNzb3IuIFRvIGRvIHRoaXMsIHdlIG11c3QKKyAgICAv
LyBjb21wdXRlIGFsbCBkYW1hZ2UgdHJhY2tpbmcgYmVmb3JlIGRyYXdpbmcgYW55dGhpbmcsIHNv
IHRoYXQgd2Uga25vdyB0aGUgcm9vdAorICAgIC8vIGRhbWFnZSByZWN0LiBUaGUgcm9vdCBkYW1h
Z2UgcmVjdCBpcyB0aGVuIHVzZWQgdG8gc2Npc3NvciBlYWNoIHN1cmZhY2UuCisKKyAgICBBU1NF
UlQobV9jYXBhYmlsaXRpZXMudXNpbmdQYXJ0aWFsU3dhcCk7CisKKyAgICBmb3IgKGludCBzdXJm
YWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRl
eCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKKyAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1
cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsK
KyAgICAgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxh
eWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlKTsKKyAg
ICAgICAgcmVuZGVyU3VyZmFjZS0+ZGFtYWdlVHJhY2tlcigpLT51cGRhdGVEYW1hZ2VSZWN0Rm9y
TmV4dEZyYW1lKHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLCByZW5kZXJTdXJmYWNlTGF5ZXIt
PmlkKCksIHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCkpOworICAgIH0KK30KKwogdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMoQ0NM
YXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KQogewogICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMiLCB0aGlzLCAwKTsKIAorICAgIGlmIChtX2NhcGFi
aWxpdGllcy51c2luZ1BhcnRpYWxTd2FwKQorICAgICAgICB0cmFja0RhbWFnZUZvckFsbFN1cmZh
Y2VzKHJvb3REcmF3TGF5ZXIsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIG1fcm9vdERh
bWFnZVJlY3QgPSByb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCktPmRhbWFnZVRyYWNrZXIo
KS0+Y3VycmVudERhbWFnZVJlY3QoKTsKKwogICAgIC8vIFVwZGF0ZSB0aGUgY29udGVudHMgb2Yg
dGhlIHJlbmRlciBzdXJmYWNlcy4gV2UgdHJhdmVyc2UgdGhlIHJlbmRlciBzdXJmYWNlcwogICAg
IC8vIGZyb20gYmFjayB0byBmcm9udCB0byBndWFyYW50ZWUgdGhhdCBuZXN0ZWQgcmVuZGVyIHN1
cmZhY2VzIGdldCByZW5kZXJlZCBpbgogICAgIC8vIHRoZSBjb3JyZWN0IG9yZGVyLgpAQCAtMzMy
LDE2ICszNzEsMzEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRv
UmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGEKIAogICAgICAgICBpZiAodXNl
UmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKSkgewogCisgICAgICAgICAgICBGbG9hdFJlY3Qg
c3VyZmFjZURhbWFnZVJlY3Q7CisgICAgICAgICAgICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdQ
YXJ0aWFsU3dhcCkgeworICAgICAgICAgICAgICAgIC8vIEZvciBub3csIHdlIGNvbnNlcnZhdGl2
ZWx5IHVzZSB0aGUgcm9vdCBkYW1hZ2UgYXMgdGhlIGRhbWFnZSBmb3IgYWxsCisgICAgICAgICAg
ICAgICAgLy8gc3VyZmFjZXMsIGV4Y2VwdCBwZXJzcGVjdGl2ZSB0cmFuc2Zvcm1zLgorICAgICAg
ICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcmVlblNwYWNlVHJhbnNmb3JtID0gY29t
cHV0ZVNjcmVlblNwYWNlVHJhbnNmb3JtRm9yU3VyZmFjZShyZW5kZXJTdXJmYWNlTGF5ZXIpOwor
ICAgICAgICAgICAgICAgIGlmIChzY3JlZW5TcGFjZVRyYW5zZm9ybS5oYXNQZXJzcGVjdGl2ZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFBlcnNwZWN0aXZlIHByb2plY3Rpb25zIGRvIG5v
dCBwbGF5IG5pY2Ugd2l0aCBtYXBSZWN0IG9mIGludmVyc2UgdHJhbnNmb3Jtcy4KKyAgICAgICAg
ICAgICAgICAgICAgLy8gSW4gdGhpcyB1bmNvbW1vbiBjYXNlLCBpdHMgc2ltcGxlciB0byBqdXN0
IHJlZHJhdyB0aGUgZW50aXJlIHN1cmZhY2UuCisgICAgICAgICAgICAgICAgICAgIHN1cmZhY2VE
YW1hZ2VSZWN0ID0gcmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZl
cnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBzY3JlZW5TcGFjZVRyYW5zZm9ybS5pbnZlcnNlKCk7
CisgICAgICAgICAgICAgICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gaW52ZXJzZVNjcmVlblNw
YWNlVHJhbnNmb3JtLm1hcFJlY3QobV9yb290RGFtYWdlUmVjdCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyICE9
IHJvb3REcmF3TGF5ZXIpIHsKLSAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBt
X2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOworICAg
ICAgICAgICAgICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1BhcnRpYWxTd2FwKQorICAgICAg
ICAgICAgICAgICAgICBzZXRTY2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJlY3Qoc3VyZmFjZURh
bWFnZVJlY3QpKTsKICAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRl
eHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCkpOwogICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRl
eHQuZ2V0KCksIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZF
Ul9CSVQpKTsKLSAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQt
PmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGNvbnN0IENDTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJm
YWNlLT5sYXllckxpc3QoKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9
IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpCi0gICAgICAg
ICAgICAgICAgZHJhd0xheWVyKGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKSwgcmVuZGVyU3Vy
ZmFjZSk7CisgICAgICAgICAgICAgICAgZHJhd0xheWVyKGxheWVyTGlzdFtsYXllckluZGV4XS5n
ZXQoKSwgcmVuZGVyU3VyZmFjZSwgc3VyZmFjZURhbWFnZVJlY3QpOwogICAgICAgICB9CiAgICAg
fQogCkBAIC0zOTIsMjAgKzQ0NiwyMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0xheWVyc0ludGVybmFsKCkKICAgICAvLyBCaW5kIHRoZSBjb21tb24gdmVydGV4IGF0dHJpYnV0
ZXMgdXNlZCBmb3IgZHJhd2luZyBhbGwgdGhlIGxheWVycy4KICAgICBtX3NoYXJlZEdlb21ldHJ5
LT5wcmVwYXJlRm9yRHJhdygpOwogCi0gICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0
LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKICAgICBHTEMobV9j
b250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X1RFU1QpKTsKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRSkpOwogCiAgICAgdXNlUmVuZGVyU3VyZmFjZShtX2Rl
ZmF1bHRSZW5kZXJTdXJmYWNlKTsKIAogICAgIC8vIENsZWFyIHRvIGJsdWUgdG8gbWFrZSBpdCBl
YXNpZXIgdG8gc3BvdCB1bnJlbmRlcmVkIHJlZ2lvbnMuCisgICAgaWYgKG1fY2FwYWJpbGl0aWVz
LnVzaW5nUGFydGlhbFN3YXApCisgICAgICAgIHNldFNjaXNzb3JUb1JlY3QoZW5jbG9zaW5nSW50
UmVjdChtX3Jvb3REYW1hZ2VSZWN0KSk7CiAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAs
IDEsIDEpOwogICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUp
OwogICAgIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9C
SVQpOwogCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OkJMRU5EKSk7CiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0
LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9O
RV9NSU5VU19TUkNfQUxQSEEpKTsKLSAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQt
PmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAKICAgICBkcmF3TGF5
ZXJzT250b1JlbmRlclN1cmZhY2VzKHJvb3REcmF3TGF5ZXIsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QpOwogCkBAIC00ODcsOSArNTQxLDE3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpz
d2FwQnVmZmVycygpCiAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c3dh
cEJ1ZmZlcnMiLCB0aGlzLCAwKTsKICAgICAvLyBXZSdyZSBkb25lISBUaW1lIHRvIHN3YXBidWZm
ZXJzIQogCi0gICAgLy8gTm90ZSB0aGF0IGN1cnJlbnRseSB0aGlzIGhhcyB0aGUgc2FtZSBlZmZl
Y3QgYXMgc3dhcEJ1ZmZlcnM7IHdlIHNob3VsZAotICAgIC8vIGNvbnNpZGVyIGV4cG9zaW5nIGEg
ZGlmZmVyZW50IGVudHJ5IHBvaW50IG9uIEdyYXBoaWNzQ29udGV4dDNELgotICAgIG1fY29udGV4
dC0+cHJlcGFyZVRleHR1cmUoKTsKKyAgICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdQYXJ0aWFs
U3dhcCkgeworICAgICAgICAvLyBJZiBzdXBwb3J0ZWQsIHdlIGNhbiBzYXZlIHNpZ25pZmljYW50
IGJhbmR3aWR0aCBieSBvbmx5IHN3YXBwaW5nIHRoZSBkYW1hZ2VkL3NjaXNzb3JlZCByZWdpb24g
KGNsYW1wZWQgdG8gdGhlIHZpZXdwb3J0KQorICAgICAgICBJbnRSZWN0IHN1YkJ1ZmZlciA9IGVu
Y2xvc2luZ0ludFJlY3QobV9yb290RGFtYWdlUmVjdCk7CisgICAgICAgIHN1YkJ1ZmZlci5pbnRl
cnNlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCB2aWV3cG9ydFNpemUoKSkpOworICAgICAg
ICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9uczNEQ2hyb21pdW0gPSBzdGF0aWNfY2Fz
dDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKTsKKyAg
ICAgICAgaW50IGZsaXBwZWRZUG9zT2ZSZWN0Qm90dG9tID0gdmlld3BvcnRIZWlnaHQoKSAtIHN1
YkJ1ZmZlci55KCkgLSBzdWJCdWZmZXIuaGVpZ2h0KCk7CisgICAgICAgIGV4dGVuc2lvbnMzRENo
cm9taXVtLT5wb3N0U3ViQnVmZmVyQ0hST01JVU0oc3ViQnVmZmVyLngoKSwgZmxpcHBlZFlQb3NP
ZlJlY3RCb3R0b20sIHN1YkJ1ZmZlci53aWR0aCgpLCBzdWJCdWZmZXIuaGVpZ2h0KCkpOworICAg
IH0gZWxzZQorICAgICAgICAvLyBOb3RlIHRoYXQgY3VycmVudGx5IHRoaXMgaGFzIHRoZSBzYW1l
IGVmZmVjdCBhcyBzd2FwQnVmZmVyczsgd2Ugc2hvdWxkCisgICAgICAgIC8vIGNvbnNpZGVyIGV4
cG9zaW5nIGEgZGlmZmVyZW50IGVudHJ5IHBvaW50IG9uIEdyYXBoaWNzQ29udGV4dDNELgorICAg
ICAgICBtX2NvbnRleHQtPnByZXBhcmVUZXh0dXJlKCk7CiAKICAgICBtX2hlYWRzVXBEaXNwbGF5
LT5vblN3YXBCdWZmZXJzKCk7CiB9CkBAIC01ODIsMTAgKzY0NCwxMCBAQCBib29sIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1
cmZhY2UpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3TGF5ZXIoQ0NMYXllckltcGwqIGxheWVyLCBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1
cmZhY2UpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKENDTGF5ZXJJbXBs
KiBsYXllciwgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlLCBjb25zdCBGbG9hdFJlY3Qm
IHN1cmZhY2VEYW1hZ2VSZWN0KQogewogICAgIGlmIChDQ0xheWVyVHJlZUhvc3RDb21tb246OnJl
bmRlclN1cmZhY2VDb250cmlidXRlc1RvVGFyZ2V0PENDTGF5ZXJJbXBsPihsYXllciwgdGFyZ2V0
U3VyZmFjZS0+b3duaW5nTGF5ZXJJZCgpKSkgewotICAgICAgICBsYXllci0+cmVuZGVyU3VyZmFj
ZSgpLT5kcmF3KHRoaXMsIGxheWVyLT5nZXREcmF3UmVjdCgpKTsKKyAgICAgICAgbGF5ZXItPnJl
bmRlclN1cmZhY2UoKS0+ZHJhdyh0aGlzLCBzdXJmYWNlRGFtYWdlUmVjdCk7CiAgICAgICAgIGxh
eWVyLT5yZW5kZXJTdXJmYWNlKCktPnJlbGVhc2VDb250ZW50c1RleHR1cmUoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTU5Myw3ICs2NTUsMTMgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIENDUmVuZGVyU3VyZmFjZSogdGFy
Z2UKICAgICBpZiAobGF5ZXItPnZpc2libGVMYXllclJlY3QoKS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChsYXllci0+dXNlc0xheWVyQ2xpcHBpbmcoKSkKKyAgICBpZiAo
bGF5ZXItPnVzZXNMYXllckNsaXBwaW5nKCkgJiYgbV9jYXBhYmlsaXRpZXMudXNpbmdQYXJ0aWFs
U3dhcCkgeworICAgICAgICBGbG9hdFJlY3QgY2xpcEFuZERhbWFnZVJlY3QobGF5ZXItPmNsaXBS
ZWN0KCkpOworICAgICAgICBjbGlwQW5kRGFtYWdlUmVjdC5pbnRlcnNlY3Qoc3VyZmFjZURhbWFn
ZVJlY3QpOworICAgICAgICBzZXRTY2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJlY3QoY2xpcEFu
ZERhbWFnZVJlY3QpKTsKKyAgICB9IGVsc2UgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFydGlh
bFN3YXApCisgICAgICAgIHNldFNjaXNzb3JUb1JlY3QoZW5jbG9zaW5nSW50UmVjdChzdXJmYWNl
RGFtYWdlUmVjdCkpOworICAgIGVsc2UgaWYgKGxheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpKQog
ICAgICAgICBzZXRTY2lzc29yVG9SZWN0KGxheWVyLT5jbGlwUmVjdCgpKTsKICAgICBlbHNlCiAg
ICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5o
CmluZGV4IGZmOWU1NTAyNTkxOGVkMTVlOWY0MDE2YTc1Zjg2ZjNkMmM5NWM5NmMuLjVjODA2ZDMz
YTcwZjBiNWYwZmE3ZWE5MjVjZTU3NjEyMGFhZmEyNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oCkBAIC0xNjUsNyArMTY1LDkgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJh
d0xheWVyc0ludGVybmFsKCk7CiAgICAgdm9pZCBkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2Vz
KENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCk7Ci0gICAgdm9pZCBkcmF3TGF5ZXIoQ0NMYXllckltcGwqLCBDQ1JlbmRl
clN1cmZhY2UqKTsKKyAgICB2b2lkIGRyYXdMYXllcihDQ0xheWVySW1wbCosIENDUmVuZGVyU3Vy
ZmFjZSosIGNvbnN0IEZsb2F0UmVjdCYpOworCisgICAgdm9pZCB0cmFja0RhbWFnZUZvckFsbFN1
cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAKICAgICBNYW5hZ2VkVGV4dHVyZSogZ2V0T2Zmc2NyZWVu
TGF5ZXJUZXh0dXJlKCk7CiAgICAgdm9pZCBjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgp
OwpAQCAtMjQzLDYgKzI0NSw4IEBAIHByaXZhdGU6CiAgICAgRmxvYXRRdWFkIG1fc2hhcmVkR2Vv
bWV0cnlRdWFkOwogCiAgICAgYm9vbCBtX2lzVmlld3BvcnRDaGFuZ2VkOworCisgICAgRmxvYXRS
ZWN0IG1fcm9vdERhbWFnZVJlY3Q7CiB9OwogCiAvLyBTZXR0aW5nIERFQlVHX0dMX0NBTExTIHRv
IDEgd2lsbCBjYWxsIGdsR2V0RXJyb3IoKSBhZnRlciBhbG1vc3QgZXZlcnkgR0wKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmgKaW5kZXggOTY1MmQ1ODRhOGU2M2ZjZGRlZjdlYzg0OWZjNzAxYjVi
YWVmMGFhYi4uODIyNDcyNDNmMzMxNzM1MjM1MjhiNjI1MmZlN2M0MTQ3ZWE1Y2ZhNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTczLDE0ICs3MywxMiBAQCBzdHJ1Y3QgQ0NTZXR0
aW5ncyB7CiAgICAgICAgICAgICAsIGNvbXBvc2l0ZU9mZnNjcmVlbihmYWxzZSkKICAgICAgICAg
ICAgICwgc2hvd0ZQU0NvdW50ZXIoZmFsc2UpCiAgICAgICAgICAgICAsIHNob3dQbGF0Zm9ybUxh
eWVyVHJlZShmYWxzZSkKLSAgICAgICAgICAgICwgdXNlRGFtYWdlVHJhY2tlcihmYWxzZSkKICAg
ICAgICAgICAgICwgcmVmcmVzaFJhdGUoMCkgeyB9CiAKICAgICBib29sIGFjY2VsZXJhdGVQYWlu
dGluZzsKICAgICBib29sIGNvbXBvc2l0ZU9mZnNjcmVlbjsKICAgICBib29sIHNob3dGUFNDb3Vu
dGVyOwogICAgIGJvb2wgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlOwotICAgIGJvb2wgdXNlRGFtYWdl
VHJhY2tlcjsKICAgICBkb3VibGUgcmVmcmVzaFJhdGU7CiB9OwogCkBAIC04OSw3ICs4Nyw3IEBA
IHN0cnVjdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIHsKICAgICBMYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzKCkKICAgICAgICAgOiBiZXN0VGV4dHVyZUZvcm1hdCgwKQogICAgICAgICAsIGNv
bnRleHRIYXNDYWNoZWRGcm9udEJ1ZmZlcihmYWxzZSkKLSAgICAgICAgLCB1c2luZ1Bvc3RTdWJC
dWZmZXIoZmFsc2UpCisgICAgICAgICwgdXNpbmdQYXJ0aWFsU3dhcChmYWxzZSkKICAgICAgICAg
LCB1c2luZ01hcFN1YihmYWxzZSkKICAgICAgICAgLCB1c2luZ0FjY2VsZXJhdGVkUGFpbnRpbmco
ZmFsc2UpCiAgICAgICAgICwgdXNpbmdTZXRWaXNpYmlsaXR5KGZhbHNlKQpAQCAtOTgsNyArOTYs
NyBAQCBzdHJ1Y3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyB7CiAKICAgICBHQzNEZW51bSBi
ZXN0VGV4dHVyZUZvcm1hdDsKICAgICBib29sIGNvbnRleHRIYXNDYWNoZWRGcm9udEJ1ZmZlcjsK
LSAgICBib29sIHVzaW5nUG9zdFN1YkJ1ZmZlcjsKKyAgICBib29sIHVzaW5nUGFydGlhbFN3YXA7
CiAgICAgYm9vbCB1c2luZ01hcFN1YjsKICAgICBib29sIHVzaW5nQWNjZWxlcmF0ZWRQYWludGlu
ZzsKICAgICBib29sIHVzaW5nU2V0VmlzaWJpbGl0eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZh
Y2UuY3BwCmluZGV4IDI5ZGI1YTQyOWFkYmUxNTA0ZDMzZGQyY2Q1NTI1MDA3NDRhNTA0MjMuLmE0
YzkyNTY5ZDdmZjM5N2ZhNTAzZGUzYjg2OWFjZTEwMmFjMzE0NTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJTdXJmYWNlLmNwcApAQCAtMTAxLDcgKzEwMSw3IEBAIHZvaWQgQ0NSZW5kZXJTdXJmYWNl
OjpyZWxlYXNlQ29udGVudHNUZXh0dXJlKCkKICAgICBtX2NvbnRlbnRzVGV4dHVyZS0+dW5yZXNl
cnZlKCk7CiB9CiAKLXZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpkcmF3KExheWVyUmVuZGVyZXJDaHJv
bWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgSW50UmVjdCYpCit2b2lkIENDUmVuZGVyU3VyZmFj
ZTo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEZsb2F0
UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpCiB7CiAgICAgaWYgKG1fc2tpcHNEcmF3IHx8ICFtX2Nv
bnRlbnRzVGV4dHVyZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE1LDcgKzExNSwxMyBAQCB2b2lk
IENDUmVuZGVyU3VyZmFjZTo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVy
ZXIsIGNvbnN0IEludFJlY3QmKQogICAgIGlmICghbV9tYXNrTGF5ZXIgJiYgbV9vd25pbmdMYXll
ci0+cmVwbGljYUxheWVyKCkpCiAgICAgICAgIHJlcGxpY2FNYXNrTGF5ZXIgPSBtX293bmluZ0xh
eWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCk7CiAKLSAgICBpZiAobV9vd25pbmdMYXll
ci0+cGFyZW50KCkgJiYgbV9vd25pbmdMYXllci0+cGFyZW50KCktPnVzZXNMYXllckNsaXBwaW5n
KCkpCisgICAgaWYgKG1fb3duaW5nTGF5ZXItPnBhcmVudCgpICYmIG1fb3duaW5nTGF5ZXItPnBh
cmVudCgpLT51c2VzTGF5ZXJDbGlwcGluZygpICYmIGxheWVyUmVuZGVyZXItPmNhcGFiaWxpdGll
cygpLnVzaW5nUGFydGlhbFN3YXApIHsKKyAgICAgICAgRmxvYXRSZWN0IGNsaXBBbmREYW1hZ2VS
ZWN0ID0gbV9jbGlwUmVjdDsKKyAgICAgICAgY2xpcEFuZERhbWFnZVJlY3QuaW50ZXJzZWN0KHN1
cmZhY2VEYW1hZ2VSZWN0KTsKKyAgICAgICAgbGF5ZXJSZW5kZXJlci0+c2V0U2Npc3NvclRvUmVj
dChlbmNsb3NpbmdJbnRSZWN0KGNsaXBBbmREYW1hZ2VSZWN0KSk7CisgICAgfSBlbHNlIGlmIChs
YXllclJlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2FwKQorICAgICAgICBs
YXllclJlbmRlcmVyLT5zZXRTY2lzc29yVG9SZWN0KGVuY2xvc2luZ0ludFJlY3Qoc3VyZmFjZURh
bWFnZVJlY3QpKTsKKyAgICBlbHNlIGlmIChtX293bmluZ0xheWVyLT5wYXJlbnQoKSAmJiBtX293
bmluZ0xheWVyLT5wYXJlbnQoKS0+dXNlc0xheWVyQ2xpcHBpbmcoKSkKICAgICAgICAgbGF5ZXJS
ZW5kZXJlci0+c2V0U2Npc3NvclRvUmVjdChtX2NsaXBSZWN0KTsKICAgICBlbHNlCiAgICAgICAg
IEdMQyhsYXllclJlbmRlcmVyLT5jb250ZXh0KCksIGxheWVyUmVuZGVyZXItPmNvbnRleHQoKS0+
ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZh
Y2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5oCmluZGV4IGQwZTM1YTE3ODY1NDM3ZWRkMmM4NzJkZmE2MjJjMzZiMGQ0M2Fk
YzQuLmE4ZTg3YTlmOWJlYTVkOWJiNGU4MThkZjUwZGMwOGQ5ZTczMjZmOGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyU3VyZmFjZS5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBib29sIHBy
ZXBhcmVDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CiAgICAgdm9pZCBy
ZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7CiAgICAgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7Ci0g
ICAgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEludFJlY3QmIHRhcmdl
dFN1cmZhY2VSZWN0KTsKKyAgICB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29u
c3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCk7CiAKICAgICBTdHJpbmcgbmFtZSgpIGNv
bnN0OwogICAgIHZvaWQgZHVtcFN1cmZhY2UoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0
Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>