<?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>80744</bug_id>
          
          <creation_ts>2012-03-09 18:47:05 -0800</creation_ts>
          <short_desc>[chromium] Threaded opacity animation jump to opacity of 0</short_desc>
          <delta_ts>2012-03-16 03:29:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>79536</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Penner">epenner</reporter>
          <assigned_to>vollick</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>epenner</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>vollick</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>575402</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-03-09 18:47:05 -0800</bug_when>
    <thetext>Threaded opacity animations pop when the target opacity is 0. To see it, mouse over until the box becomes opaque, then move mouse away.

&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;style&gt;
.box{
	width: 200px;
	height: 200px;
	border: 1px solid;
	background: #f9f900;
	opacity: 0.0;
  	-webkit-transition: opacity 2s ease-out;
}
.box:hover {
  opacity: .8;
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;box&quot;&gt;
&lt;/div&gt;

&lt;/body&gt;
&lt;/html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576692</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-03-12 16:24:54 -0700</bug_when>
    <thetext>FYI, I found the line that is causing the painting of the new layer to be skipped:

CCLayerTreeHostCommon.cpp:
static bool layerShouldBeSkipped(LayerType* layer)
...
if (!layer-&gt;drawsContent() || !layer-&gt;opacity() || layer-&gt;bounds().isEmpty())
    return true;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577502</commentid>
    <comment_count>2</comment_count>
      <attachid>131658</attachid>
    <who name="">vollick</who>
    <bug_when>2012-03-13 10:28:21 -0700</bug_when>
    <thetext>Created attachment 131658
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577517</commentid>
    <comment_count>3</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-03-13 10:37:13 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; FYI, I found the line that is causing the painting of the new layer to be skipped:
&gt; 
&gt; CCLayerTreeHostCommon.cpp:
&gt; static bool layerShouldBeSkipped(LayerType* layer)
&gt; ...
&gt; if (!layer-&gt;drawsContent() || !layer-&gt;opacity() || layer-&gt;bounds().isEmpty())
&gt;     return true;

As far as I can tell, the problem stems from the main thread&apos;s LayerChromiums being assigned the target value of an implicit animation and decisions are made based on that value. If we are transitioning to 0, then the LayerChromium gets set an opacity of 0 (even though the CCLayerImpl is busy animating towards that value) and that causes the subtree rooted at that layer to get skipped during drawing. I modified some code earlier in this file that filters subtrees based on opacity so that they don&apos;t do this while animating.

Another thing I noticed is that we commit a lot during implicit animations, and these values are getting transferred to the CCLayerImpl&apos;s. I updated the pushPropertiesTo function to take animations into account. If the CCLayerImpl has no animating property, values are copied to the CCLayerImpl, otherwise animated values are copied back to the LayerChromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577533</commentid>
    <comment_count>4</comment_count>
      <attachid>131658</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-13 10:51:27 -0700</bug_when>
    <thetext>Comment on attachment 131658
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:529
&gt; +        m_opacity = layer-&gt;opacity();

Is this going to work okay if the LayerChromium changes its opacity property during an animation? Maybe that&apos;s not possible but it worried me that the value just gets overwritten.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577560</commentid>
    <comment_count>5</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-03-13 11:06:08 -0700</bug_when>
    <thetext>I&apos;m still confused. If we&apos;re animating a layer opacity AND a commit comes through, that will clobber the opacity. Ok, but then the next draw should apply animations and re-set the opacity and we should be fine. What am I missing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577576</commentid>
    <comment_count>6</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-13 11:17:21 -0700</bug_when>
    <thetext>Will this sequence work correctly?

1. Start animation to opacity X (Sets LayerChromium::m_opacity = X)
2. Animate animate animate on impl, currently at opacity Y
3. Invalidate something cause commit (Sets LayerChromium::m_opacity = Y)
4. Animation ends

What is the value of LayerChromium::m_opacity now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577583</commentid>
    <comment_count>7</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-13 11:21:09 -0700</bug_when>
    <thetext>I&apos;m not sure why we are copying back to the LayerChromium at all. Can&apos;t it just own the target values?

Maybe an API like

bool isAnimatingOpacity()
float opacity()
void setOpacity(float)

would make it easier to know what properties you should check isAnimating on before reading the value. Maybe reading the value of an animatable property should assert when isAnimatingThatProperty == true?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578094</commentid>
    <comment_count>8</comment_count>
      <attachid>131658</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-13 18:50:14 -0700</bug_when>
    <thetext>Comment on attachment 131658
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:526
&gt; +    if (!m_layerAnimationController-&gt;isAnimatingProperty(CCActiveAnimation::Opacity))

i feel a lot less confident about this change - why is it necessary? what values are we pushing during the animation itself?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578099</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-13 18:55:07 -0700</bug_when>
    <thetext>I don&apos;t think we should be copying any values &quot;back&quot; from the impl tree to the LayerChromium side ever.  The user of the compositor (WebCore in this instance, or other users) are setting up the animation parameters and it is their responsibility to interpolate the current value of an animated property if they want to know what that value is.  WebCore already has logic to do this for things like calling getComputedStyle() in the middle of an animation/transition and it&apos;s independent of the compositor.

I think we should just skip the opacity check when painting if there&apos;s an active animation on opacity.  We also need to be careful that culling takes into account the fact that the layer might not be opaque even if its opacity==1.0 if the opacity has an active animation.

The same issue exists for animating a transform as well - for example if a layer is rotated and its backface isn&apos;t visible, but there&apos;s an animation on the transform that will rotate the backface into view (perhaps only temporarily), then we should go ahead and paint that.  This problem is more general since a transform can cause some unknown amount of the layer to be exposed.  I don&apos;t know what the best solution is - the conservative thing would be raster as much as we can if the transform is being animated, and not let anything in the subtree influence culling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578166</commentid>
    <comment_count>10</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-03-13 22:26:44 -0700</bug_when>
    <thetext>Ian is reworking this patch based on a whiteboard meeting he, Eric and I had this morning. The new and improved version avoids some of the things that smell funny about this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578375</commentid>
    <comment_count>11</comment_count>
      <attachid>131843</attachid>
    <who name="">vollick</who>
    <bug_when>2012-03-14 07:40:37 -0700</bug_when>
    <thetext>Created attachment 131843
Patch

There&apos;s no more copying back to the LayerChromiums. This patch just ensures we don&apos;t skip subtrees due to opacity when opacity is animating.

I have also removed the code that bails when animation delay is set, since we get that for free. I have also updated CCLayerAnimationController::removeCompletedAnimations so that it does not attempt to destroy animations on the wrong thread.

I will be writing another patch which will tick animations on the main thread as well to supply better information to the culler, but this is a larger change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578662</commentid>
    <comment_count>12</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-03-14 12:40:50 -0700</bug_when>
    <thetext>Lets pull the deletion bugfix out to another patch.

The animation changes LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578764</commentid>
    <comment_count>13</comment_count>
      <attachid>131843</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-14 14:19:59 -0700</bug_when>
    <thetext>Comment on attachment 131843
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:115
&gt; +static bool subtreeShouldBeSkipped(LayerType* layer, float drawOpacity)

I think this is wrong for impl-side since we calculate this for every frame. If on the impl side a layer has opacity == 0 on a given frame then we definitely can and should skip it, even if there&apos;s an active animation, because we&apos;ll redo the calculation on the next frame.  On the main thread side I think we shouldn&apos;t skip the subtree if there is an animation active since we don&apos;t run through this code for every frame.

You could specialize this for the two layer types to get divergent behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578773</commentid>
    <comment_count>14</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-14 14:25:41 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Lets pull the deletion bugfix out to another patch.

+1 to this as well</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579533</commentid>
    <comment_count>15</comment_count>
      <attachid>132080</attachid>
    <who name="">vollick</who>
    <bug_when>2012-03-15 11:13:08 -0700</bug_when>
    <thetext>Created attachment 132080
Patch

(In reply to comment #13)
&gt; (From update of attachment 131843 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131843&amp;action=review
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:115
&gt; &gt; +static bool subtreeShouldBeSkipped(LayerType* layer, float drawOpacity)
&gt;
&gt; I think this is wrong for impl-side since we calculate this for every frame. If on the impl side a layer has opacity == 0 on a given frame then we definitely can and should skip it, even if there&apos;s an active animation, because we&apos;ll redo the calculation on the next frame.  On the main thread side I think we shouldn&apos;t skip the subtree if there is an animation active since we don&apos;t run through this code for every frame.
&gt;
&gt; You could specialize this for the two layer types to get divergent behavior.

Done.

I&apos;ve also removed the crasher fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579582</commentid>
    <comment_count>16</comment_count>
      <attachid>132080</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-15 11:38:25 -0700</bug_when>
    <thetext>Comment on attachment 132080
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/RenderSurfaceChromium.h:66
&gt; +    bool drawOpacityIsAnimating() const { return m_drawOpacityIsAnimating; }

i see code that sets this bit on RenderSurfaces, but I can&apos;t find any code that uses this bit on render surfaces. Why do we need to track this on layers and surfaces?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:112
&gt;  template&lt;typename LayerType&gt;
&gt; +bool subtreeShouldBeSkipped(LayerType* layer)

this specialization is only for CCLayerImpls - right? can you make it explicitly on that type or will things explode then?

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:991
&gt; +class CCLayerTreeHostTestDoNotSkipLayersWithAnimatedOpacity : public CCLayerTreeHostTestThreadOnly {

not sure i understand this test - how is it verifying that we aren&apos;t skipping the subtree?

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:1008
&gt; +        m_numAnimates++;

what&apos;s this used for?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579990</commentid>
    <comment_count>17</comment_count>
      <attachid>132169</attachid>
    <who name="">vollick</who>
    <bug_when>2012-03-15 18:15:25 -0700</bug_when>
    <thetext>Created attachment 132169
Patch

(In reply to comment #16)
&gt; (From update of attachment 132080 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132080&amp;action=review
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/RenderSurfaceChromium.h:66
&gt; &gt; +    bool drawOpacityIsAnimating() const { return m_drawOpacityIsAnimating; }
&gt;
&gt; i see code that sets this bit on RenderSurfaces, but I can&apos;t find any code that uses this bit on render surfaces. Why do we need to track this on layers and surfaces?
This will be used in an upcoming patch of Dana&apos;s. In fact, Dana had sent me the logic for updating drawOpacityIsAnimating from that patch because I needed it for layers.
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:112
&gt; &gt;  template&lt;typename LayerType&gt;
&gt; &gt; +bool subtreeShouldBeSkipped(LayerType* layer)
&gt;
&gt; this specialization is only for CCLayerImpls - right? can you make it explicitly on that type or will things explode then?
Changed it to overloads to bake in the two layer types.
&gt;
&gt; &gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:991
&gt; &gt; +class CCLayerTreeHostTestDoNotSkipLayersWithAnimatedOpacity : public CCLayerTreeHostTestThreadOnly {
&gt;
&gt; not sure i understand this test - how is it verifying that we aren&apos;t skipping the subtree?
If the subtree is skipped while preparing to draw, the draw opacity will not be updated (it will remain at 1). This is what would have happened without this patch since the LayerChromium&apos;s opacity was zero. With this patch, the presence of the animation will make sure the layer is not skipped. I&apos;ve added a comment to the test.
&gt;
&gt; &gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:1008
&gt; &gt; +        m_numAnimates++;
&gt;
&gt; what&apos;s this used for?
D&apos;oh. It&apos;s not used for anything. Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580003</commentid>
    <comment_count>18</comment_count>
      <attachid>132169</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-15 18:24:27 -0700</bug_when>
    <thetext>Comment on attachment 132169
Patch

R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580333</commentid>
    <comment_count>19</comment_count>
      <attachid>132169</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-16 03:29:51 -0700</bug_when>
    <thetext>Comment on attachment 132169
Patch

Clearing flags on attachment: 132169

Committed r110980: &lt;http://trac.webkit.org/changeset/110980&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580334</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-16 03:29:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131658</attachid>
            <date>2012-03-13 10:28:21 -0700</date>
            <delta_ts>2012-03-14 07:40:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80744-20120313132816.patch</filename>
            <type>text/plain</type>
            <size>13810</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTA1ZTgxZDc3N2FkNTE2
YjQzN2RmZjAxMmQ1NzkxZGMyZmVlOTk3ZC4uNmRmNzgxOTIwMjVmMmMyYTc0MjkwZjJjNDE3NjRm
ZmI2NzRlOGNmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEyLTAzLTEzICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gVGhy
ZWFkZWQgb3BhY2l0eSBhbmltYXRpb24ganVtcCB0byBvcGFjaXR5IG9mIDAKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNzQ0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdGVkIGluIENDTGF5ZXJUcmVl
SG9zdFRlc3RDb21taXRXaGlsZUFuaW1hdGluZworCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNo
cm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNBbmltYXRpbmdQcm9wZXJ0eSk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oOgorICAgICAgICAoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmlzQW5pbWF0aW5nUHJvcGVydHkpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmg6CisgICAgICAgIChDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsYXllclNob3Vs
ZEJlU2tpcHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpzdWJ0cmVlU2hvdWxkQmVTa2lwcGVkKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwpOgorCiAyMDEyLTAzLTEzICBHYXZpbiBQZXRlcnMg
IDxnYXZpbnBAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEZpeCBhbiBlbnVtZXJhdGlvbiBuYW1l
IGluIFJlYXNvbnNGcmFtZUNhbm5vdEJlSW5QYWdlQ2FjaGUuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IGNlZWI3ZGIwYjRhZDhkMWI2ZjhkNzRiMjRjNjJiZjA0OTkxNDA1MTMuLmE5ODgw
ZWQwOGQxODVmYWE0MjZhYmYwMWRlMGQzY2MyZjFkNTExZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTItMDMtMTMgIElhbiBWb2xsaWNrICA8dm9sbGlj
a0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBUaHJlYWRlZCBvcGFjaXR5IGFu
aW1hdGlvbiBqdW1wIHRvIG9wYWNpdHkgb2YgMAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA3NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAg
ICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Ojpwb3N0UmVwbGFjZUFuaW1hdGlvblRvTWFp
blRocmVhZCk6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RUZXN0KToKKyAgICAgICAgKFdURjo6
Q0NMYXllclRyZWVIb3N0VGVzdDo6ZGlzcGF0Y2hSZXBsYWNlQW5pbWF0aW9uKToKKyAgICAgICAg
KFdURik6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RUZXN0Q29tbWl0V2hpbGVBbmltYXRpbmcp
OgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Q29tbWl0V2hpbGVBbmltYXRpbmc6
OkNDTGF5ZXJUcmVlSG9zdFRlc3RDb21taXRXaGlsZUFuaW1hdGluZyk6CisgICAgICAgIChXVEY6
OkNDTGF5ZXJUcmVlSG9zdFRlc3RDb21taXRXaGlsZUFuaW1hdGluZzo6YmVnaW5UZXN0KToKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdENvbW1pdFdoaWxlQW5pbWF0aW5nOjphbmlt
YXRlTGF5ZXJzKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdENvbW1pdFdoaWxl
QW5pbWF0aW5nOjpjb21taXRDb21wbGV0ZU9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0Q29tbWl0V2hpbGVBbmltYXRpbmc6OmFmdGVyVGVzdCk6CisgICAgICAg
IChXVEY6OlRFU1RfRik6CisKIDIwMTItMDMtMTMgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIEFsbG93IFdlYkZpbGVDaG9vc2VyIHRvIHJldHVybiBleHRy
YSBmaWxlIGluZm8gKGxpa2UgZGlzcGxheU5hbWUpIGluIGFkZGl0aW9uIHRvIG1lcmUgZmlsZSBw
YXRocwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCBmOTczODgwZmQxNzViMWE0OTM2YTJlZmY0
MTc2ZjRjYmYxZTdjOWY1Li5mMzFiMGE4OGMyZWRhYTVmNWMyZTQzOGUyNTg1ZGRhM2JmOWZhYmFm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtNTIzLDEyICs1MjMsMTggQEAgdm9pZCBMYXll
ckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICAgICAg
bV9ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkNoYW5nZWQgPSBmYWxzZTsKICAgICB9CiAgICAgbGF5
ZXItPnNldE9wYXF1ZShtX29wYXF1ZSk7Ci0gICAgbGF5ZXItPnNldE9wYWNpdHkobV9vcGFjaXR5
KTsKKyAgICBpZiAoIW1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5pc0FuaW1hdGluZ1Byb3Bl
cnR5KENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSkKKyAgICAgICAgbGF5ZXItPnNldE9wYWNp
dHkobV9vcGFjaXR5KTsKKyAgICBlbHNlCisgICAgICAgIG1fb3BhY2l0eSA9IGxheWVyLT5vcGFj
aXR5KCk7CiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKG1fcG9zaXRpb24pOwogICAgIGxheWVyLT5z
ZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCgpKTsKICAgICBsYXllci0+c2V0U2Nyb2xsUG9zaXRp
b24obV9zY3JvbGxQb3NpdGlvbik7CiAgICAgbGF5ZXItPnNldFN1YmxheWVyVHJhbnNmb3JtKG1f
c3VibGF5ZXJUcmFuc2Zvcm0pOwotICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obV90cmFuc2Zvcm0p
OworICAgIGlmICghbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPmlzQW5pbWF0aW5nUHJvcGVy
dHkoQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpCisgICAgICAgIGxheWVyLT5zZXRUcmFu
c2Zvcm0obV90cmFuc2Zvcm0pOworICAgIGVsc2UKKyAgICAgICAgbV90cmFuc2Zvcm0gPSBsYXll
ci0+dHJhbnNmb3JtKCk7CiAgICAgbGF5ZXItPnNldFVwZGF0ZVJlY3QobV91cGRhdGVSZWN0KTsK
IAogICAgIGxheWVyLT5zZXRTY3JvbGxEZWx0YShsYXllci0+c2Nyb2xsRGVsdGEoKSAtIGxheWVy
LT5zZW50U2Nyb2xsRGVsdGEoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlci5jcHAKaW5kZXggMzM1ZDNhNThlOThhZWQyOTdlZTU0MDU0YjU0ZDA0ODUw
ODUxNzFiMi4uYzNhZjQ0ZGY1NmM1ZWI5OTk1ZDVjMmRiMzk4NzFjNDJkM2U1MGU5ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcApAQCAtMjI4
LDYgKzIyOCwxNSBAQCBDQ0FjdGl2ZUFuaW1hdGlvbiogQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OmdldEFjdGl2ZUFuaW1hdGlvbihpbnQgZ3JvdXBJZCwgQwogICAgIHJldHVybiAwOwogfQog
Citib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjppc0FuaW1hdGluZ1Byb3BlcnR5KEND
QWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkgY29uc3QKK3sK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpICE9IEND
QWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0
YXRlKCkgIT0gQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQgJiYgbV9hY3RpdmVBbmltYXRpb25z
W2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdldFByb3BlcnR5KQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlKGludCBncm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCmluZGV4IDA2ODIxMzA0N2Y0MmFjNWIyYTMx
YjBiNjZkZjczNzQ1ZDJjNWYyMjQuLmYyZjY2ZWIyNDRlZjBhYjI3NTdkMjkwNTRmOGM0MTlmNDZl
NGQ5MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIu
aApAQCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0FjdGl2ZUFuaW1hdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7IH0KICAgICBDQ0Fj
dGl2ZUFuaW1hdGlvbiogZ2V0QWN0aXZlQW5pbWF0aW9uKGludCBncm91cElkLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOworICAgIGJvb2wgaXNBbmltYXRpbmdQcm9wZXJ0eShD
Q0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAg
ICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwCmluZGV4IGYwOWRjZmFlMDY0MjVk
YTgzZGVlNmZhMGY5NjYzZjcwMjMwYzBhZTIuLjhhOWU5MWIyZTJhNGU0NTlkZTBkZWY3ZjE2ZTI5
ZDQxMGFkZDMwNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsLmNwcApAQCAtODMsNiArODMsMTUgQEAgYm9vbCBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6Omhhc0FjdGl2ZUFuaW1hdGlvbigpIGNvbnN0CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCitib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6aXNBbmlt
YXRpbmdQcm9wZXJ0eShDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJv
cGVydHkpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1h
dGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+
cnVuU3RhdGUoKSAhPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQgJiYgbV9hY3RpdmVBbmlt
YXRpb25zW2ldLT5ydW5TdGF0ZSgpICE9IENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkICYmIG1f
YWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSB0YXJnZXRQcm9wZXJ0eSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
IHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0
aW5nRm9yTmV4dFRpY2soZG91YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVj
dG9yJiBldmVudHMpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1h
dGlvbnMuc2l6ZSgpOyArK2kpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsLmgKaW5kZXggNmFjMDBlN2FlMTc4YzU3NzM2NjM3YjIyYmRhMmM5
MjkyMjFkYTZmZi4uODkzOTZiZDk1OTFmYjc0MzI1ZDgyNWI2YWY5YWFhNDE1YWFkMDU3MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgK
QEAgLTcyLDYgKzcyLDggQEAgcHVibGljOgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBh
cmUgYW55IGFuaW1hdGlvbnMgdGhhdCBhcmUgbmVpdGhlciBmaW5pc2hlZCBub3IgYWJvcnRlZC4K
ICAgICBib29sIGhhc0FjdGl2ZUFuaW1hdGlvbigpIGNvbnN0OwogCisgICAgYm9vbCBpc0FuaW1h
dGluZ1Byb3BlcnR5KENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSkgY29uc3Q7CisK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAppbmRleCBjODZkNzRk
ODYxZGFmNGU2ZTMyNWQxYzUzZmQ0N2Y0OTg2NGY4NmE5Li44NmE3OWUwNDgyYTVjMmY5ODIyNThh
MWU3MTY2MTJjNGExODEyYWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENv
bW1vbi5jcHAKQEAgLTMyLDYgKzMyLDkgQEAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRp
b25NYXRyaXguaCIKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUg
ImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVy
LmgiCkBAIC04Myw4ICs4NiwxMiBAQCBzdGF0aWMgYm9vbCBsYXllclNob3VsZEJlU2tpcHBlZChM
YXllclR5cGUqIGxheWVyKQogICAgIC8vIFNvbWUgYWRkaXRpb25hbCBjb25kaXRpb25zIG5lZWQg
dG8gYmUgY29tcHV0ZWQgYXQgYSBsYXRlciBwb2ludCBhZnRlciB0aGUgcmVjdXJzaW9uIGlzIGZp
bmlzaGVkLgogICAgIC8vICAgLSB0aGUgaW50ZXJzZWN0aW9uIG9mIHJlbmRlciBzdXJmYWNlIGNv
bnRlbnQgYW5kIGxheWVyIGNsaXBSZWN0IGlzIGVtcHR5CiAgICAgLy8gICAtIHRoZSB2aXNpYmxl
TGF5ZXJSZWN0IGlzIGVtcHR5CisgICAgLy8KKyAgICAvLyBOb3RlLCBpZiB0aGUgbGF5ZXIgc2hv
dWxkIG5vdCBoYXZlIGJlZW4gZHJhd24gZHVlIHRvIGJlaW5nIGZ1bGx5IHRyYW5zcGFyZW50LAor
ICAgIC8vIHdlIHdvdWxkIGhhdmUgc2tpcHBlZCB0aGUgZW50aXJlIHN1YnRyZWUgYW5kIG5ldmVy
IG1hZGUgaXQgaW50byB0aGlzIGZ1bmN0aW9uLAorICAgIC8vIHNvIGl0IGlzIHNhZmUgdG8gb21p
dCB0aGlzIGNoZWNrIGhlcmUuCiAKLSAgICBpZiAoIWxheWVyLT5kcmF3c0NvbnRlbnQoKSB8fCAh
bGF5ZXItPm9wYWNpdHkoKSB8fCBsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKQorICAgIGlmICgh
bGF5ZXItPmRyYXdzQ29udGVudCgpIHx8IGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gVGhlIGxheWVyIHNob3VsZCBub3QgYmUgZHJhd24g
aWYgKDEpIGl0IGlzIG5vdCBkb3VibGUtc2lkZWQgYW5kICgyKSB0aGUgYmFjayBvZiB0aGUgbGF5
ZXIgaXMgZmFjaW5nIHRoZSBzY3JlZW4uCkBAIC0xMDUsNiArMTEyLDE2IEBAIHN0YXRpYyBib29s
IGxheWVyU2hvdWxkQmVTa2lwcGVkKExheWVyVHlwZSogbGF5ZXIpCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIExheWVyVHlwZT4KK3N0YXRpYyBib29sIHN1YnRyZWVTaG91bGRCZVNraXBwZWQoTGF5
ZXJUeXBlKiBsYXllciwgZmxvYXQgZHJhd09wYWNpdHkpCit7CisgICAgLy8gVGhlIG9wYWNpdHkg
b2YgYSBsYXllciBhbHdheXMgYXBwbGllcyB0byBpdHMgY2hpbGRyZW4gKGVpdGhlciBpbXBsaWNp
dGx5CisgICAgLy8gdmlhIGEgcmVuZGVyIHN1cmZhY2Ugb3IgZXhwbGljaXRseSBpZiB0aGUgcGFy
ZW50IHByZXNlcnZlcyAzRCksIHNvIHRoZQorICAgIC8vIGVudGlyZSBzdWJ0cmVlIGNhbiBiZSBz
a2lwcGVkIGlmIHRoaXMgbGF5ZXIgaXMgZnVsbHkgdHJhbnNwYXJlbnQuIElmIHRoZSBvcGFjaXR5
CisgICAgLy8gaXMgYmVpbmcgYW5pbWF0ZWQsIGNsZWFybHkgd2UgY2Fubm90IG1ha2UgdGhpcyBv
cHRpbWl6YXRpb24uCisgICAgcmV0dXJuICFkcmF3T3BhY2l0eSAmJiAhbGF5ZXItPmxheWVyQW5p
bWF0aW9uQ29udHJvbGxlcigpLT5pc0FuaW1hdGluZ1Byb3BlcnR5KENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgogc3RhdGljIGJv
b2wgc3VidHJlZVNob3VsZFJlbmRlclRvU2VwYXJhdGVTdXJmYWNlKExheWVyVHlwZSogbGF5ZXIs
IGJvb2wgYXhpc0FsaWduZWRXaXRoUmVzcGVjdFRvUGFyZW50KQogewogICAgIC8vIEZJWE1FOiBJ
ZiB3ZSBkZWNpZGUgdG8gY3JlYXRlIGEgcmVuZGVyIHN1cmZhY2UgaGVyZSB3aGlsZSB0aGlzIGxh
eWVyIGRvZXMKQEAgLTIzMywxMCArMjUwLDggQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXIKICAg
ICBmbG9hdCBkcmF3T3BhY2l0eSA9IGxheWVyLT5vcGFjaXR5KCk7CiAgICAgaWYgKGxheWVyLT5w
YXJlbnQoKSAmJiBsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkpCiAgICAgICAgIGRyYXdP
cGFjaXR5ICo9IGxheWVyLT5wYXJlbnQoKS0+ZHJhd09wYWNpdHkoKTsKLSAgICAvLyBUaGUgb3Bh
Y2l0eSBvZiBhIGxheWVyIGFsd2F5cyBhcHBsaWVzIHRvIGl0cyBjaGlsZHJlbiAoZWl0aGVyIGlt
cGxpY2l0bHkKLSAgICAvLyB2aWEgYSByZW5kZXIgc3VyZmFjZSBvciBleHBsaWNpdGx5IGlmIHRo
ZSBwYXJlbnQgcHJlc2VydmVzIDNEKSwgc28gdGhlCi0gICAgLy8gZW50aXJlIHN1YnRyZWUgY2Fu
IGJlIHNraXBwZWQgaWYgdGhpcyBsYXllciBpcyBmdWxseSB0cmFuc3BhcmVudC4KLSAgICBpZiAo
IWRyYXdPcGFjaXR5KQorCisgICAgaWYgKHN1YnRyZWVTaG91bGRCZVNraXBwZWQobGF5ZXIsIGRy
YXdPcGFjaXR5KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSW50U2l6ZSBib3VuZHMg
PSBsYXllci0+Ym91bmRzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCBmZTc4OGZiYWVlZTc3ZTc5M2EwMDM4ZWM3
YWYyOTI2NTVmZmM3NDZiLi40ZGY4NGUzNzRhNzRjNmM1ZWUwMWJjODM0MGE1ZGZiZmQ3ZTZmZjA2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0VGVzdC5jcHAKQEAgLTI5NSw2ICsyOTUsMTEgQEAgcHVibGljOgogICAgICAgICBjYWxsT25N
YWluVGhyZWFkKENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNoQWRkSW5zdGFudEFuaW1hdGlv
biwgdGhpcyk7CiAgICAgfQogCisgICAgdm9pZCBwb3N0UmVwbGFjZUFuaW1hdGlvblRvTWFpblRo
cmVhZCgpCisgICAgeworICAgICAgICBjYWxsT25NYWluVGhyZWFkKENDTGF5ZXJUcmVlSG9zdFRl
c3Q6OmRpc3BhdGNoUmVwbGFjZUFuaW1hdGlvbiwgdGhpcyk7CisgICAgfQorCiAgICAgdm9pZCBw
b3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJlYWQoKQogICAgIHsKICAgICAgICAgY2FsbE9uTWFp
blRocmVhZChDQ0xheWVyVHJlZUhvc3RUZXN0OjpkaXNwYXRjaFNldE5lZWRzQ29tbWl0LCB0aGlz
KTsKQEAgLTM3MCw2ICszNzUsMTggQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgYWRkT3BhY2l0
eVRyYW5zaXRpb25Ub0xheWVyKCp0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLCAx
MCwgMCwgMSk7CiAgICAgfQogCisgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hSZXBsYWNlQW5pbWF0
aW9uKHZvaWQqIHNlbGYpCisgICAgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NMYXllclRy
ZWVIb3N0VGVzdCo+KHNlbGYpOworICAgICAgICBBU1NFUlQodGVzdCk7CisgICAgICAgIGlmICh0
ZXN0LT5tX2xheWVyVHJlZUhvc3QgJiYgdGVzdC0+bV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIo
KSkgeworICAgICAgICAgICAgdGVzdC0+bV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+bGF5
ZXJBbmltYXRpb25Db250cm9sbGVyKCktPnJlbW92ZUFuaW1hdGlvbigwKTsKKyAgICAgICAgICAg
IHRlc3QtPm1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPnNldE9wYWNpdHkoMCk7CisgICAg
ICAgICAgICBhZGRPcGFjaXR5VHJhbnNpdGlvblRvTGF5ZXIoKnRlc3QtPm1fbGF5ZXJUcmVlSG9z
dC0+cm9vdExheWVyKCksIDEwLCAxLCAwKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHN0YXRp
YyB2b2lkIGRpc3BhdGNoU2V0TmVlZHNBbmltYXRlQW5kQ29tbWl0KHZvaWQqIHNlbGYpCiAgICAg
ewogICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtOTg3LDYgKzEwMDQsNTAgQEAg
VEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RUaWNrQW5pbWF0aW9uV2hpbGVCYWNrZ3JvdW5kZWQs
IHJ1bk11bHRpVGhyZWFkKQogICAgIHJ1blRlc3RUaHJlYWRlZCgpOwogfQogCisvLyBFbnN1cmVz
IHRoYXQgd2UgZG9uJ3QgY2xvYmJlciBhbiBhbmltYXRpbmcgbGF5ZXIncyBwcm9wZXJ0aWVzCitj
bGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0Q29tbWl0V2hpbGVBbmltYXRpbmcgOiBwdWJsaWMgQ0NM
YXllclRyZWVIb3N0VGVzdFRocmVhZE9ubHkgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9z
dFRlc3RDb21taXRXaGlsZUFuaW1hdGluZygpCisgICAgICAgIDogbV9udW1BbmltYXRlcygwKQor
ICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAg
ICAgIHBvc3RBZGRBbmltYXRpb25Ub01haW5UaHJlYWQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgYW5pbWF0ZUxheWVycyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1w
bCwgZG91YmxlIG1vbm90b25pY1RpbWUpCisgICAgeworICAgICAgICBpZiAoIW1fbnVtQW5pbWF0
ZXMpCisgICAgICAgICAgICBwb3N0UmVwbGFjZUFuaW1hdGlvblRvTWFpblRocmVhZCgpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBwb3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJlYWQoKTsK
KworICAgICAgICBtX251bUFuaW1hdGVzKys7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNv
bW1pdENvbXBsZXRlT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0
SW1wbCkKKyAgICB7CisgICAgICAgIGlmIChtX251bUFuaW1hdGVzIDwgMikKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgRVhQRUNUX0xUKDAsIGxheWVyVHJlZUhvc3RJbXBsLT5yb290TGF5
ZXIoKS0+b3BhY2l0eSgpKTsKKyAgICAgICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50IG1f
bnVtQW5pbWF0ZXM7Cit9OworCitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdENvbW1pdFdoaWxl
QW5pbWF0aW5nLCBydW5NdWx0aVRocmVhZCkKK3sKKyAgICBydW5UZXN0VGhyZWFkZWQoKTsKK30K
KwogY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbFNpbXBsZSA6IHB1YmxpYyBDQ0xheWVy
VHJlZUhvc3RUZXN0VGhyZWFkT25seSB7CiBwdWJsaWM6CiAgICAgQ0NMYXllclRyZWVIb3N0VGVz
dFNjcm9sbFNpbXBsZSgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131843</attachid>
            <date>2012-03-14 07:40:37 -0700</date>
            <delta_ts>2012-03-15 11:13:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80744-20120314104036.patch</filename>
            <type>text/plain</type>
            <size>17583</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTA1ZTgxZDc3N2FkNTE2
YjQzN2RmZjAxMmQ1NzkxZGMyZmVlOTk3ZC4uYWMxYWEwZGIxZTY5ZmI1NmZhM2VjN2Y3MTM2MDJh
Mzc5NWM5MTJmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTAzLTE0ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gVGhy
ZWFkZWQgb3BhY2l0eSBhbmltYXRpb24ganVtcCB0byBvcGFjaXR5IG9mIDAKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNzQ0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdGVkIGluIENDTGF5ZXJUcmVl
SG9zdFRlc3REb05vdFNraXBMYXllcnNXaXRoQW5pbWF0ZWRPcGFjaXR5CisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpy
ZW1vdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OnJlbW92ZUNvbXBsZXRlZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmlzQW5pbWF0aW5nUHJvcGVydHkpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
bWFya0FzRmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OnB1cmdlRmluaXNoZWRBbmltYXRpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oOgorICAgICAgICAo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmlzQW5pbWF0aW5nUHJv
cGVydHkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmg6CisgICAgICAgIChD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpsYXllclNob3VsZEJlU2tpcHBlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpzdWJ0cmVlU2hvdWxkQmVTa2lwcGVkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwpOgor
CiAyMDEyLTAzLTEzICBHYXZpbiBQZXRlcnMgIDxnYXZpbnBAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIEZpeCBhbiBlbnVtZXJhdGlvbiBuYW1lIGluIFJlYXNvbnNGcmFtZUNhbm5vdEJlSW5QYWdl
Q2FjaGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGNlZWI3ZGIwYjRhZDhkMWI2Zjhk
NzRiMjRjNjJiZjA0OTkxNDA1MTMuLjI2OWEwMGI0NDNmMDAzYzM0OTZjYTM4NTRmZmYwZGVkMDU5
N2EyMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTIt
MDMtMTQgIElhbiBWb2xsaWNrICA8dm9sbGlja0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2No
cm9taXVtXSBUaHJlYWRlZCBvcGFjaXR5IGFuaW1hdGlvbiBqdW1wIHRvIG9wYWNpdHkgb2YgMAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA3NDQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL0ND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6
VEVTVCk6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAg
IChXVEYpOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0VGVzdERvTm90U2tpcExheWVyc1dpdGhB
bmltYXRlZE9wYWNpdHkpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0RG9Ob3RT
a2lwTGF5ZXJzV2l0aEFuaW1hdGVkT3BhY2l0eTo6Q0NMYXllclRyZWVIb3N0VGVzdERvTm90U2tp
cExheWVyc1dpdGhBbmltYXRlZE9wYWNpdHkpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhv
c3RUZXN0RG9Ob3RTa2lwTGF5ZXJzV2l0aEFuaW1hdGVkT3BhY2l0eTo6YmVnaW5UZXN0KToKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdERvTm90U2tpcExheWVyc1dpdGhBbmltYXRl
ZE9wYWNpdHk6OmFuaW1hdGVMYXllcnMpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RU
ZXN0RG9Ob3RTa2lwTGF5ZXJzV2l0aEFuaW1hdGVkT3BhY2l0eTo6Y29tbWl0Q29tcGxldGVPbkND
VGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdERvTm90U2tpcExheWVy
c1dpdGhBbmltYXRlZE9wYWNpdHk6OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OlRFU1RfRik6
CisKIDIwMTItMDMtMTMgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIEFsbG93IFdlYkZpbGVDaG9vc2VyIHRvIHJldHVybiBleHRyYSBmaWxlIGluZm8gKGxp
a2UgZGlzcGxheU5hbWUpIGluIGFkZGl0aW9uIHRvIG1lcmUgZmlsZSBwYXRocwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDMzNWQzYTU4
ZTk4YWVkMjk3ZWU1NDA1NGI1NGQwNDg1MDg1MTcxYjIuLjk5OTI4MzVlY2I2ZDZhNTliNzA4Zjc1
YzU2ODg4Yjc3NTc5MzFlY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlci5jcHAKQEAgLTU2LDEwICs1Niw2IEBAIFBhc3NPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYg
dmFsCiAgICAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24tPmlzRGlyZWN0aW9uU2V0KCkgJiYg
YW5pbWF0aW9uLT5kaXJlY3Rpb24oKSA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFs
dGVybmF0ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAvLyBGSVhNRTogYWRkIHN1
cHBvcnQgZm9yIGRlbGF5Ci0gICAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24tPmlzRGVsYXlT
ZXQoKSAmJiBhbmltYXRpb24tPmRlbGF5KCkgPiAwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQogICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgZmlsbHMgZm9yd2FyZHMgYW5kIGZpbGxz
IGJhY2t3YXJkcwogICAgIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0ZpbGxNb2RlU2V0
KCkgJiYgKGFuaW1hdGlvbi0+ZmlsbHNGb3J3YXJkcygpIHx8IGFuaW1hdGlvbi0+ZmlsbHNCYWNr
d2FyZHMoKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTIwLDYgKzExNiw4IEBAIFBh
c3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOjpjcmVhdGUoKQogCiBib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRB
bmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgSW50U2l6
ZSYsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91
cElkLCBkb3VibGUgdGltZU9mZnNldCkKIHsKKyAgICBwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucygp
OworCiAgICAgaWYgKCFhbmltYXRpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTUz
LDYgKzE1MSw4IEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1h
dGlvbihpbnQgYW5pbWF0aW9uSWQpCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGkrKzsKICAg
ICB9CisKKyAgICBwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucygpOwogfQogCiAvLyBBY2NvcmRpbmcg
dG8gcmVuZGVyIGxheWVyIGJhY2tpbmcsIHRoZXNlIGFyZSBmb3IgdGVzdGluZyBvbmx5LgpAQCAt
MTc5LDcgKzE3OSw3IEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUNv
bXBsZXRlZEFuaW1hdGlvbnMoQ0NMYXllckFuaW1hdGlvbkNvbnRyCiB7CiAgICAgLy8gQW55IGFu
aW1hdGlvbnMgZmluaXNoZWQgb24gdGhlIGltcGwgdGhyZWFkIGFyZSByZW1vdmVkIGZyb20gdGhl
IG1haW4gdGhyZWFkJ3MgY29sbGVjdGlvbi4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNv
bnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0aW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAg
cmVtb3ZlKGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0aW9uc1tpXS5ncm91cElkLCBj
b250cm9sbGVySW1wbC0+bV9maW5pc2hlZEFuaW1hdGlvbnNbaV0udGFyZ2V0UHJvcGVydHkpOwor
ICAgICAgICBtYXJrQXNGaW5pc2hlZChjb250cm9sbGVySW1wbC0+bV9maW5pc2hlZEFuaW1hdGlv
bnNbaV0uZ3JvdXBJZCwgY29udHJvbGxlckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25zW2ldLnRh
cmdldFByb3BlcnR5KTsKICAgICBjb250cm9sbGVySW1wbC0+bV9maW5pc2hlZEFuaW1hdGlvbnMu
Y2xlYXIoKTsKIH0KIApAQCAtMjI4LDE0ICsyMjgsMzMgQEAgQ0NBY3RpdmVBbmltYXRpb24qIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpnZXRBY3RpdmVBbmltYXRpb24oaW50IGdyb3VwSWQs
IEMKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
cmVtb3ZlKGludCBncm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFy
Z2V0UHJvcGVydHkpCitib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjppc0FuaW1hdGlu
Z1Byb3BlcnR5KENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0
eSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9u
cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5T
dGF0ZSgpICE9IENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCAmJiBtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0tPnJ1blN0YXRlKCkgIT0gQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQgJiYgbV9hY3Rp
dmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdldFByb3BlcnR5KQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6bWFya0FzRmluaXNoZWQoaW50IGdyb3VwSWQs
IENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKIHsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkg
ewogICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09IGdyb3VwSWQg
JiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdldFByb3Bl
cnR5KSB7Ci0gICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnMucmVtb3ZlKGkpOworICAgICAg
ICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlv
bjo6RmluaXNoZWQsIDApOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQog
fQogCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXJnZUZpbmlzaGVkQW5pbWF0
aW9ucygpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMu
c2l6ZSgpOykgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgp
ID09IENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCB8fCBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQpCisgICAgICAgICAgICBt
X2FjdGl2ZUFuaW1hdGlvbnMucmVtb3ZlKGkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBp
Kys7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaAppbmRleCAwNjgyMTMwNDdmNDJhYzViMmEz
MWIwYjY2ZGY3Mzc0NWQyYzVmMjI0Li5jMjkxMzQzNjc1Y2JjNGYwYmQwOTZiOTAyZmEzNTVmMDA1
YzZhZDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
LmgKQEAgLTU4LDYgKzU4LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNBY3RpdmVBbmltYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyB9CiAgICAgQ0NB
Y3RpdmVBbmltYXRpb24qIGdldEFjdGl2ZUFuaW1hdGlvbihpbnQgZ3JvdXBJZCwgQ0NBY3RpdmVB
bmltYXRpb246OlRhcmdldFByb3BlcnR5KTsKKyAgICBib29sIGlzQW5pbWF0aW5nUHJvcGVydHko
Q0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KSBjb25zdDsKIAogcHJvdGVjdGVkOgog
ICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCk7CkBAIC02OCw3ICs2OSw4IEBAIHByaXZh
dGU6CiAgICAgdm9pZCByZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25NYWluVGhyZWFkKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopOwogICAgIHZvaWQgcHVzaEFuaW1hdGlvblByb3Bl
cnRpZXMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7CiAKLSAgICB2b2lkIHJlbW92
ZShpbnQgZ3JvdXBJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KTsKKyAgICB2
b2lkIG1hcmtBc0ZpbmlzaGVkKGludCBncm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0
UHJvcGVydHkpOworICAgIHZvaWQgcHVyZ2VGaW5pc2hlZEFuaW1hdGlvbnMoKTsKIAogICAgIFZl
Y3RvcjxPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+ID4gbV9hY3RpdmVBbmltYXRpb25zOwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwu
Y3BwCmluZGV4IGYwOWRjZmFlMDY0MjVkYTgzZGVlNmZhMGY5NjYzZjcwMjMwYzBhZTIuLjhhOWU5
MWIyZTJhNGU0NTlkZTBkZWY3ZjE2ZTI5ZDQxMGFkZDMwNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcApAQCAtODMsNiArODMs
MTUgQEAgYm9vbCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6Omhhc0FjdGl2ZUFuaW1h
dGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6aXNBbmltYXRpbmdQcm9wZXJ0eShDQ0FjdGl2ZUFuaW1hdGlvbjo6
VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSAhPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6
RmluaXNoZWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpICE9IENDQWN0aXZl
QW5pbWF0aW9uOjpBYm9ydGVkICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVy
dHkoKSA9PSB0YXJnZXRQcm9wZXJ0eSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZG91YmxlIG1vbm90b25pY1Rp
bWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiBldmVudHMpCiB7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKaW5kZXggNmFjMDBl
N2FlMTc4YzU3NzM2NjM3YjIyYmRhMmM5MjkyMjFkYTZmZi4uODkzOTZiZDk1OTFmYjc0MzI1ZDgy
NWI2YWY5YWFhNDE1YWFkMDU3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKQEAgLTcyLDYgKzcyLDggQEAgcHVibGljOgogICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgYW55IGFuaW1hdGlvbnMgdGhhdCBhcmUgbmVpdGhl
ciBmaW5pc2hlZCBub3IgYWJvcnRlZC4KICAgICBib29sIGhhc0FjdGl2ZUFuaW1hdGlvbigpIGNv
bnN0OwogCisgICAgYm9vbCBpc0FuaW1hdGluZ1Byb3BlcnR5KENDQWN0aXZlQW5pbWF0aW9uOjpU
YXJnZXRQcm9wZXJ0eSkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApp
bmRleCAzNGJjZTExODEwMGZhNWZhMzhkOTM1MjgyMGQ1NzA4ZTlmZWRkY2EyLi40NWFiMDA5NDFh
MmFlYjQxZDU0YzIxYzE5YmQwY2VkNjU2Njc2YjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRl
ICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgorI2luY2x1ZGUg
ImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgpAQCAtNTQ1LDcgKzU0Niw3IEBAIHZvaWQgQ0NM
YXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0CiAgICAgQ0NMYXllckl0ZXJhdG9yVHlwZSBlbmQgPSBDQ0xheWVySXRl
cmF0b3JUeXBlOjplbmQoJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIGZvciAoQ0NMYXll
ckl0ZXJhdG9yVHlwZSBpdCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmJlZ2luKCZyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGlmIChpdC5yZXByZXNl
bnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXQtPnJlbmRl
clN1cmZhY2UoKS0+ZHJhd09wYWNpdHkoKSk7CisgICAgICAgICAgICBBU1NFUlQoaXQtPnJlbmRl
clN1cmZhY2UoKS0+ZHJhd09wYWNpdHkoKSB8fCBpdC0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVy
KCktPmlzQW5pbWF0aW5nUHJvcGVydHkoQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAog
ICAgICAgICAgICAgb2NjbHVzaW9uVHJhY2tlci5maW5pc2hlZFRhcmdldFJlbmRlclN1cmZhY2Uo
Kml0LCBpdC0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICAgICAgICAgIHBhaW50TWFza0FuZFJlcGxp
Y2FGb3JSZW5kZXJTdXJmYWNlKCppdCwgcGFpbnRUeXBlKTsKQEAgLTU2OCw3ICs1NjksNyBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCwgQ0NUZQogICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kID0gQ0NM
YXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZtX3VwZGF0ZUxpc3QpOwogICAgIGZvciAoQ0NMYXllckl0
ZXJhdG9yVHlwZSBpdCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmJlZ2luKCZtX3VwZGF0ZUxpc3Qp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNUYXJnZXRSZW5k
ZXJTdXJmYWNlKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChpdC0+cmVuZGVyU3VyZmFjZSgpLT5k
cmF3T3BhY2l0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+cmVuZGVyU3VyZmFjZSgpLT5k
cmF3T3BhY2l0eSgpIHx8IGl0LT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+aXNBbmltYXRp
bmdQcm9wZXJ0eShDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgICAgICAgICAgaWYg
KGl0LT5tYXNrTGF5ZXIoKSkKICAgICAgICAgICAgICAgICBpdC0+bWFza0xheWVyKCktPnVwZGF0
ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29udGV4dCwgdXBkYXRlcik7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCmluZGV4IGM4NmQ3NGQ4NjFkYWY0ZTZlMzI1ZDFj
NTNmZDQ3ZjQ5ODY0Zjg2YTkuLjg2YTc5ZTA0ODJhNWMyZjk4MjI1OGExZTcxNjYxMmM0YTE4MTJh
ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApAQCAtMzIs
NiArMzIsOSBAQAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJSZW5kZXJT
dXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2lu
Y2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDTGF5
ZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKQEAgLTgzLDggKzg2
LDEyIEBAIHN0YXRpYyBib29sIGxheWVyU2hvdWxkQmVTa2lwcGVkKExheWVyVHlwZSogbGF5ZXIp
CiAgICAgLy8gU29tZSBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgbmVlZCB0byBiZSBjb21wdXRlZCBh
dCBhIGxhdGVyIHBvaW50IGFmdGVyIHRoZSByZWN1cnNpb24gaXMgZmluaXNoZWQuCiAgICAgLy8g
ICAtIHRoZSBpbnRlcnNlY3Rpb24gb2YgcmVuZGVyIHN1cmZhY2UgY29udGVudCBhbmQgbGF5ZXIg
Y2xpcFJlY3QgaXMgZW1wdHkKICAgICAvLyAgIC0gdGhlIHZpc2libGVMYXllclJlY3QgaXMgZW1w
dHkKKyAgICAvLworICAgIC8vIE5vdGUsIGlmIHRoZSBsYXllciBzaG91bGQgbm90IGhhdmUgYmVl
biBkcmF3biBkdWUgdG8gYmVpbmcgZnVsbHkgdHJhbnNwYXJlbnQsCisgICAgLy8gd2Ugd291bGQg
aGF2ZSBza2lwcGVkIHRoZSBlbnRpcmUgc3VidHJlZSBhbmQgbmV2ZXIgbWFkZSBpdCBpbnRvIHRo
aXMgZnVuY3Rpb24sCisgICAgLy8gc28gaXQgaXMgc2FmZSB0byBvbWl0IHRoaXMgY2hlY2sgaGVy
ZS4KIAotICAgIGlmICghbGF5ZXItPmRyYXdzQ29udGVudCgpIHx8ICFsYXllci0+b3BhY2l0eSgp
IHx8IGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpCisgICAgaWYgKCFsYXllci0+ZHJhd3NDb250
ZW50KCkgfHwgbGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKICAgICAvLyBUaGUgbGF5ZXIgc2hvdWxkIG5vdCBiZSBkcmF3biBpZiAoMSkgaXQgaXMgbm90
IGRvdWJsZS1zaWRlZCBhbmQgKDIpIHRoZSBiYWNrIG9mIHRoZSBsYXllciBpcyBmYWNpbmcgdGhl
IHNjcmVlbi4KQEAgLTEwNSw2ICsxMTIsMTYgQEAgc3RhdGljIGJvb2wgbGF5ZXJTaG91bGRCZVNr
aXBwZWQoTGF5ZXJUeXBlKiBsYXllcikKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBl
Pgorc3RhdGljIGJvb2wgc3VidHJlZVNob3VsZEJlU2tpcHBlZChMYXllclR5cGUqIGxheWVyLCBm
bG9hdCBkcmF3T3BhY2l0eSkKK3sKKyAgICAvLyBUaGUgb3BhY2l0eSBvZiBhIGxheWVyIGFsd2F5
cyBhcHBsaWVzIHRvIGl0cyBjaGlsZHJlbiAoZWl0aGVyIGltcGxpY2l0bHkKKyAgICAvLyB2aWEg
YSByZW5kZXIgc3VyZmFjZSBvciBleHBsaWNpdGx5IGlmIHRoZSBwYXJlbnQgcHJlc2VydmVzIDNE
KSwgc28gdGhlCisgICAgLy8gZW50aXJlIHN1YnRyZWUgY2FuIGJlIHNraXBwZWQgaWYgdGhpcyBs
YXllciBpcyBmdWxseSB0cmFuc3BhcmVudC4gSWYgdGhlIG9wYWNpdHkKKyAgICAvLyBpcyBiZWlu
ZyBhbmltYXRlZCwgY2xlYXJseSB3ZSBjYW5ub3QgbWFrZSB0aGlzIG9wdGltaXphdGlvbi4KKyAg
ICByZXR1cm4gIWRyYXdPcGFjaXR5ICYmICFsYXllci0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVy
KCktPmlzQW5pbWF0aW5nUHJvcGVydHkoQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+CiBzdGF0aWMgYm9vbCBzdWJ0cmVlU2hvdWxk
UmVuZGVyVG9TZXBhcmF0ZVN1cmZhY2UoTGF5ZXJUeXBlKiBsYXllciwgYm9vbCBheGlzQWxpZ25l
ZFdpdGhSZXNwZWN0VG9QYXJlbnQpCiB7CiAgICAgLy8gRklYTUU6IElmIHdlIGRlY2lkZSB0byBj
cmVhdGUgYSByZW5kZXIgc3VyZmFjZSBoZXJlIHdoaWxlIHRoaXMgbGF5ZXIgZG9lcwpAQCAtMjMz
LDEwICsyNTAsOCBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2li
aWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllcgogICAgIGZsb2F0IGRyYXdPcGFj
aXR5ID0gbGF5ZXItPm9wYWNpdHkoKTsKICAgICBpZiAobGF5ZXItPnBhcmVudCgpICYmIGxheWVy
LT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSkKICAgICAgICAgZHJhd09wYWNpdHkgKj0gbGF5ZXIt
PnBhcmVudCgpLT5kcmF3T3BhY2l0eSgpOwotICAgIC8vIFRoZSBvcGFjaXR5IG9mIGEgbGF5ZXIg
YWx3YXlzIGFwcGxpZXMgdG8gaXRzIGNoaWxkcmVuIChlaXRoZXIgaW1wbGljaXRseQotICAgIC8v
IHZpYSBhIHJlbmRlciBzdXJmYWNlIG9yIGV4cGxpY2l0bHkgaWYgdGhlIHBhcmVudCBwcmVzZXJ2
ZXMgM0QpLCBzbyB0aGUKLSAgICAvLyBlbnRpcmUgc3VidHJlZSBjYW4gYmUgc2tpcHBlZCBpZiB0
aGlzIGxheWVyIGlzIGZ1bGx5IHRyYW5zcGFyZW50LgotICAgIGlmICghZHJhd09wYWNpdHkpCisK
KyAgICBpZiAoc3VidHJlZVNob3VsZEJlU2tpcHBlZChsYXllciwgZHJhd09wYWNpdHkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBJbnRTaXplIGJvdW5kcyA9IGxheWVyLT5ib3VuZHMo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LmNwcAppbmRleCBjNGYxMDNhM2NhZmU0NjhlNGI4
ZTc5Nzg2ZDJiMjE4N2U0NWQ3ZWExLi4yMzM5ZDM4ZGE3OWQxODI2OWUxNWQ1ZWYwMWE2YjU5NDQ4
N2JmMGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QuY3BwCkBAIC0yMDksNyArMjA5LDgg
QEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIHN5bmNDb21wbGV0ZWRBbmlt
YXRpb24pCiAKICAgICBjb250cm9sbGVyLT5zeW5jaHJvbml6ZUFuaW1hdGlvbnMoY29udHJvbGxl
ckltcGwuZ2V0KCkpOwogCi0gICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRp
b24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3Rp
dmVBbmltYXRpb246OkZpbmlzaGVkLCBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oMCwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdFRlc3QuY3BwCmluZGV4IGZlNzg4ZmJhZWVlNzdlNzkzYTAwMzhlYzdhZjI5MjY1NWZmYzc0
NmIuLmMwNTE0MDJjNzVhM2VkMGRmY2U0ZjhkYmYxMDhkNjE3MDAwOGQ3NDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApA
QCAtOTg3LDYgKzk4Nyw0OCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFRpY2tBbmltYXRp
b25XaGlsZUJhY2tncm91bmRlZCwgcnVuTXVsdGlUaHJlYWQpCiAgICAgcnVuVGVzdFRocmVhZGVk
KCk7CiB9CiAKKy8vIEVuc3VyZXMgdGhhdCB3aGVuIG9wYWNpdHkgaXMgYmVpbmcgYW5pbWF0ZWQs
IHRoaXMgdmFsdWUgZG9lcyBub3QgY2F1c2UgdGhlIHN1YnRyZWUgdG8gYmUgc2tpcHBlZC4KK2Ns
YXNzIENDTGF5ZXJUcmVlSG9zdFRlc3REb05vdFNraXBMYXllcnNXaXRoQW5pbWF0ZWRPcGFjaXR5
IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3RUaHJlYWRPbmx5IHsKK3B1YmxpYzoKKyAgICBD
Q0xheWVyVHJlZUhvc3RUZXN0RG9Ob3RTa2lwTGF5ZXJzV2l0aEFuaW1hdGVkT3BhY2l0eSgpCisg
ICAgICAgIDogbV9udW1BbmltYXRlcygwKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVy
KCktPnNldERyYXdPcGFjaXR5KDAuNSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmll
d3BvcnRTaXplKEludFNpemUoMTAsIDEwKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cm9v
dExheWVyKCktPnNldE9wYWNpdHkoMCk7CisgICAgICAgIHBvc3RBZGRBbmltYXRpb25Ub01haW5U
aHJlYWQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhDQ0xheWVy
VHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCwgZG91YmxlIG1vbm90b25pY1RpbWUpCisg
ICAgeworICAgICAgICBtX251bUFuaW1hdGVzKys7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGNvbW1pdENvbXBsZXRlT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikKKyAgICB7Cisg
ICAgICAgIEVYUEVDVF9ORSgwLjUsIG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPmRyYXdP
cGFjaXR5KCkpOworICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGFmdGVyVGVzdCgpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9udW1Bbmlt
YXRlczsKK307CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0RG9Ob3RTa2lwTGF5ZXJzV2l0
aEFuaW1hdGVkT3BhY2l0eSwgcnVuTXVsdGlUaHJlYWQpCit7CisgICAgcnVuVGVzdFRocmVhZGVk
KCk7Cit9CisKKworCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsU2ltcGxlIDogcHVi
bGljIENDTGF5ZXJUcmVlSG9zdFRlc3RUaHJlYWRPbmx5IHsKIHB1YmxpYzoKICAgICBDQ0xheWVy
VHJlZUhvc3RUZXN0U2Nyb2xsU2ltcGxlKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132080</attachid>
            <date>2012-03-15 11:13:08 -0700</date>
            <delta_ts>2012-03-15 18:15:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80744-20120315141307.patch</filename>
            <type>text/plain</type>
            <size>26018</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwODQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjQ3Njc1M2NjODRkZjgz
MDgzYWVlNDI2ZjY2ODllN2I3NDNmYjMyNS4uYmU3OTdiNTVjMDQ1MTk1OWNmZDZhOGFjMWZmMGQ0
NDg5NjYwY2I4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEyLTAzLTE1ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gVGhy
ZWFkZWQgb3BhY2l0eSBhbmltYXRpb24ganVtcCB0byBvcGFjaXR5IG9mIDAKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNzQ0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdGVkIGluIENDTGF5ZXJUcmVl
SG9zdFRlc3REb05vdFNraXBMYXllcnNXaXRoQW5pbWF0ZWRPcGFjaXR5CisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJDaHJvbWl1bTo6b3BhY2l0eUlzQW5pbWF0aW5nKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6dHJhbnNmb3JtSXNBbmltYXRpbmcpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAg
ICAgICAgKExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
ZHJhd09wYWNpdHlJc0FuaW1hdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpzZXREcmF3T3BhY2l0eUlzQW5pbWF0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU3VyZmFjZUNocm9taXVtOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW0pOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpkcmF3T3BhY2l0eUlzQW5pbWF0
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6c2V0RHJhd09w
YWNpdHlJc0FuaW1hdGluZyk6CisgICAgICAgIChSZW5kZXJTdXJmYWNlQ2hyb21pdW0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
Ojppc0FuaW1hdGluZ1Byb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmg6
CisgICAgICAgIChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6aXNB
bmltYXRpbmdQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaDoK
KyAgICAgICAgKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJbXBsOjpvcGFjaXR5SXNBbmltYXRpbmcpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJhbnNmb3JtSXNBbmltYXRpbmcpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChD
Q0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6ZHJhd09wYWNpdHlJ
c0FuaW1hdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0RHJhd09wYWNp
dHlJc0FuaW1hdGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmxheWVyU2hvdWxkQmVTa2lwcGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnN1YnRyZWVTaG91bGRC
ZVNraXBwZWQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNo
cm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eUludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNl
OjpDQ1JlbmRlclN1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyU3VyZmFjZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNl
OjpkcmF3T3BhY2l0eUlzQW5pbWF0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3Vy
ZmFjZTo6c2V0RHJhd09wYWNpdHlJc0FuaW1hdGluZyk6CisgICAgICAgIChDQ1JlbmRlclN1cmZh
Y2UpOgorCiAyMDEyLTAzLTE1ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0u
Y29tPgogCiAgICAgICAgIEVuYWJsZSBhbmltVmFsIHN1cHBvcnQgZm9yIFNWR051bWJlckxpc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZjViZWQ0NDg2ODJhZjY4OTA0YzY0ZmMyYzQ1
ZjVjMTY1ZTc4ODg1Yy4uNDNiMGNhYzU4MjZjMzcyZDUyZDk4ZGE2YjU3MmNlZmM4OTllOWNiYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0wMy0xNSAg
SWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IFRocmVhZGVkIG9wYWNpdHkgYW5pbWF0aW9uIGp1bXAgdG8gb3BhY2l0eSBvZiAwCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDc0NAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRy
ZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChXVEYpOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0
VGVzdERvTm90U2tpcExheWVyc1dpdGhBbmltYXRlZE9wYWNpdHkpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0RG9Ob3RTa2lwTGF5ZXJzV2l0aEFuaW1hdGVkT3BhY2l0eTo6Q0NM
YXllclRyZWVIb3N0VGVzdERvTm90U2tpcExheWVyc1dpdGhBbmltYXRlZE9wYWNpdHkpOgorICAg
ICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0RG9Ob3RTa2lwTGF5ZXJzV2l0aEFuaW1hdGVk
T3BhY2l0eTo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdERv
Tm90U2tpcExheWVyc1dpdGhBbmltYXRlZE9wYWNpdHk6OmFuaW1hdGVMYXllcnMpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0RG9Ob3RTa2lwTGF5ZXJzV2l0aEFuaW1hdGVkT3Bh
Y2l0eTo6Y29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRy
ZWVIb3N0VGVzdERvTm90U2tpcExheWVyc1dpdGhBbmltYXRlZE9wYWNpdHk6OmFmdGVyVGVzdCk6
CisgICAgICAgIChXVEY6OlRFU1RfRik6CisKIDIwMTItMDMtMTUgIFBldGVyIEJldmVybG9vICA8
cGV0ZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuICBSb2xsZWQgREVQUy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZjk3Mzg4MGZkMTc1YjFhNDkzNmEyZWZmNDE3NmY0
Y2JmMWU3YzlmNS4uZDRjYWQyNGE2MTNiNmE3OTU0OTM5ZDE0NTU5YjdlZmZiMWZjNjA4OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTgwLDYgKzgwLDcgQEAgTGF5ZXJDaHJvbWl1bTo6TGF5
ZXJDaHJvbWl1bSgpCiAgICAgLCBtX2Fsd2F5c1Jlc2VydmVUZXh0dXJlcyhmYWxzZSkKICAgICAs
IG1fcmVwbGljYUxheWVyKDApCiAgICAgLCBtX2RyYXdPcGFjaXR5KDApCisgICAgLCBtX2RyYXdP
cGFjaXR5SXNBbmltYXRpbmcoZmFsc2UpCiAgICAgLCBtX3RhcmdldFJlbmRlclN1cmZhY2UoMCkK
ICAgICAsIG1fY29udGVudHNTY2FsZSgxLjApCiAgICAgLCBtX2xheWVyQW5pbWF0aW9uRGVsZWdh
dGUoMCkKQEAgLTM4OSw2ICszOTAsMTEgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRPcGFjaXR5
KGZsb2F0IG9wYWNpdHkpCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAorYm9vbCBMYXllckNo
cm9taXVtOjpvcGFjaXR5SXNBbmltYXRpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVy
QW5pbWF0aW9uQ29udHJvbGxlci0+aXNBbmltYXRpbmdQcm9wZXJ0eShDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSk7Cit9CisKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0T3BhcXVlKGJvb2wgb3Bh
cXVlKQogewogICAgIGlmIChtX29wYXF1ZSA9PSBvcGFxdWUpCkBAIC00MjEsNiArNDI3LDExIEBA
IHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiB0cmFuc2Zvcm0pCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAorYm9vbCBMYXllckNo
cm9taXVtOjp0cmFuc2Zvcm1Jc0FuaW1hdGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5
ZXJBbmltYXRpb25Db250cm9sbGVyLT5pc0FuaW1hdGluZ1Byb3BlcnR5KENDQWN0aXZlQW5pbWF0
aW9uOjpUcmFuc2Zvcm0pOworfQorCiB2b2lkIExheWVyQ2hyb21pdW06OnNldFNjcm9sbFBvc2l0
aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKIHsKICAgICBpZiAobV9zY3JvbGxQ
b3NpdGlvbiA9PSBzY3JvbGxQb3NpdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA4NmZkZjk1
MTU2ODg5Mzc4YzNkNjJkMTkxOWE3OTVhMmNlMTI1MTZhLi42ZDkxYTg0MzU1ZmQzNmQ4NTE0MDhm
NzAzM2UxOWZhYmYzNDE3YzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xMDksNiArMTA5LDcg
QEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KTsKICAgICBmbG9hdCBvcGFj
aXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CisgICAgYm9vbCBvcGFjaXR5SXNBbmlt
YXRpbmcoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJik7CiAgICAgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycygpIGNvbnN0IHsgcmV0
dXJuIG1fZmlsdGVyczsgfQpAQCAtMTI0LDYgKzEyNSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3Jt
OyB9CisgICAgYm9vbCB0cmFuc2Zvcm1Jc0FuaW1hdGluZygpIGNvbnN0OwogCiAgICAgY29uc3Qg
SW50UmVjdCYgdmlzaWJsZUxheWVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJsZUxheWVy
UmVjdDsgfQogICAgIHZvaWQgc2V0VmlzaWJsZUxheWVyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNp
YmxlTGF5ZXJSZWN0KSB7IG1fdmlzaWJsZUxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3Q7IH0K
QEAgLTE4Niw2ICsxODgsMTAgQEAgcHVibGljOgogCiAgICAgZmxvYXQgZHJhd09wYWNpdHkoKSBj
b25zdCB7IHJldHVybiBtX2RyYXdPcGFjaXR5OyB9CiAgICAgdm9pZCBzZXREcmF3T3BhY2l0eShm
bG9hdCBvcGFjaXR5KSB7IG1fZHJhd09wYWNpdHkgPSBvcGFjaXR5OyB9CisKKyAgICBib29sIGRy
YXdPcGFjaXR5SXNBbmltYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2RyYXdPcGFjaXR5SXNBbmlt
YXRpbmc7IH0KKyAgICB2b2lkIHNldERyYXdPcGFjaXR5SXNBbmltYXRpbmcoYm9vbCBkcmF3T3Bh
Y2l0eUlzQW5pbWF0aW5nKSB7IG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZyA9IGRyYXdPcGFjaXR5
SXNBbmltYXRpbmc7IH0KKwogICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jbGlwUmVjdDsgfQogICAgIHZvaWQgc2V0Q2xpcFJlY3QoY29uc3QgSW50UmVjdCYg
Y2xpcFJlY3QpIHsgbV9jbGlwUmVjdCA9IGNsaXBSZWN0OyB9CiAgICAgUmVuZGVyU3VyZmFjZUNo
cm9taXVtKiB0YXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRSZW5k
ZXJTdXJmYWNlOyB9CkBAIC0zMTIsNiArMzE4LDcgQEAgcHJpdmF0ZToKICAgICAvLyBUcmFuc2ll
bnQgcHJvcGVydGllcy4KICAgICBPd25QdHI8UmVuZGVyU3VyZmFjZUNocm9taXVtPiBtX3JlbmRl
clN1cmZhY2U7CiAgICAgZmxvYXQgbV9kcmF3T3BhY2l0eTsKKyAgICBib29sIG1fZHJhd09wYWNp
dHlJc0FuaW1hdGluZzsKICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7CiAgICAgUmVuZGVyU3VyZmFj
ZUNocm9taXVtKiBtX3RhcmdldFJlbmRlclN1cmZhY2U7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbV9kcmF3VHJhbnNmb3JtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAK
aW5kZXggNjljZTk1MjZjOTFkN2I0N2NmNzE4NTdkNTY1OTNjNzhhNjMxNDkzOS4uMmU5OTk4YTdh
MTE0ZmY2ODFhZDJkYzY1YTQ2ZmE3ZmZlNTc3YzE0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJm
YWNlQ2hyb21pdW0uY3BwCkBAIC00Miw2ICs0Miw3IEBAIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6
UmVuZGVyU3VyZmFjZUNocm9taXVtKExheWVyQ2hyb21pdW0qIG93bmluZ0xheWVyKQogICAgICwg
bV9tYXNrTGF5ZXIoMCkKICAgICAsIG1fc2tpcHNEcmF3KGZhbHNlKQogICAgICwgbV9kcmF3T3Bh
Y2l0eSgxKQorICAgICwgbV9kcmF3T3BhY2l0eUlzQW5pbWF0aW5nKGZhbHNlKQogICAgICwgbV9u
ZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMoMCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3Vy
ZmFjZUNocm9taXVtLmgKaW5kZXggOTA0NTQyNWJjM2ZiZmYyM2M4MjFmZmZlOGE0YmIwNzM5NWIw
ZTI4Yy4uM2EzMDRjMTg1ZDdmOTMyNTJmNDQzY2M0MjM0NjFjOTlhYjk3Y2RkZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFj
ZUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKQEAgLTYzLDYgKzYzLDkgQEAgcHVibGljOgogICAg
IGZsb2F0IGRyYXdPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3T3BhY2l0eTsgfQogICAg
IHZvaWQgc2V0RHJhd09wYWNpdHkoZmxvYXQgZHJhd09wYWNpdHkpIHsgbV9kcmF3T3BhY2l0eSA9
IGRyYXdPcGFjaXR5OyB9CiAKKyAgICBib29sIGRyYXdPcGFjaXR5SXNBbmltYXRpbmcoKSBjb25z
dCB7IHJldHVybiBtX2RyYXdPcGFjaXR5SXNBbmltYXRpbmc7IH0KKyAgICB2b2lkIHNldERyYXdP
cGFjaXR5SXNBbmltYXRpbmcoYm9vbCBkcmF3T3BhY2l0eUlzQW5pbWF0aW5nKSB7IG1fZHJhd09w
YWNpdHlJc0FuaW1hdGluZyA9IGRyYXdPcGFjaXR5SXNBbmltYXRpbmc7IH0KKwogICAgIC8vIFRo
aXMgZ29lcyBmcm9tIGNvbnRlbnQgc3BhY2Ugd2l0aCB0aGUgb3JpZ2luIGluIHRoZSBjZW50ZXIg
b2YgdGhlIHJlY3QgYmVpbmcgdHJhbnNmb3JtZWQgdG8gdGhlIHRhcmdldCBzcGFjZSB3aXRoIHRo
ZSBvcmlnaW4gaW4gdGhlIHRvcCBsZWZ0IG9mIHRoZQogICAgIC8vIHJlY3QgYmVpbmcgdHJhbnNm
b3JtZWQuIFBvc2l0aW9uIHRoZSByZWN0IHNvIHRoYXQgdGhlIG9yaWdpbiBpcyBpbiB0aGUgY2Vu
dGVyIG9mIGl0IGJlZm9yZSBhcHBseWluZyB0aGlzIHRyYW5zZm9ybS4KICAgICBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd1Ry
YW5zZm9ybTsgfQpAQCAtOTksNiArMTAyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2tpcHNE
cmF3OwogCiAgICAgZmxvYXQgbV9kcmF3T3BhY2l0eTsKKyAgICBib29sIG1fZHJhd09wYWNpdHlJ
c0FuaW1hdGluZzsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07CiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9yZXBsaWNhRHJhd1RyYW5zZm9ybTsKICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtX29yaWdpblRyYW5zZm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcAppbmRleCAzMzVkM2E1OGU5OGFlZDI5N2Vl
NTQwNTRiNTRkMDQ4NTA4NTE3MWIyLi5jM2FmNDRkZjU2YzVlYjk5OTVkNWMyZGIzOTg3MWM0MmQz
ZTUwZTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIuY3BwCkBAIC0yMjgsNiArMjI4LDE1IEBAIENDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKGludCBncm91cElkLCBDCiAgICAg
cmV0dXJuIDA7CiB9CiAKK2Jvb2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmlzQW5pbWF0
aW5nUHJvcGVydHkoQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3Bl
cnR5KSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRp
b25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1
blN0YXRlKCkgIT0gQ0NBY3RpdmVBbmltYXRpb246OkZpbmlzaGVkICYmIG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+cnVuU3RhdGUoKSAhPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCAmJiBtX2Fj
dGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2
b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmUoaW50IGdyb3VwSWQsIENDQWN0
aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKIHsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKaW5kZXggMDY4MjEz
MDQ3ZjQyYWM1YjJhMzFiMGI2NmRmNzM3NDVkMmM1ZjIyNC4uZjJmNjZlYjI0NGVmMGFiMjc1N2Qy
OTA1NGY4YzQxOWY0NmU0ZDkwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlci5oCkBAIC01OCw2ICs1OCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFz
QWN0aXZlQW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVBbmltYXRpb25zLnNpemUo
KTsgfQogICAgIENDQWN0aXZlQW5pbWF0aW9uKiBnZXRBY3RpdmVBbmltYXRpb24oaW50IGdyb3Vw
SWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CisgICAgYm9vbCBpc0FuaW1h
dGluZ1Byb3BlcnR5KENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSkgY29uc3Q7CiAK
IHByb3RlY3RlZDoKICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAKaW5kZXgg
ZjA5ZGNmYWUwNjQyNWRhODNkZWU2ZmEwZjk2NjNmNzAyMzBjMGFlMi4uOGE5ZTkxYjJlMmE0ZTQ1
OWRlMGRlZjdmMTZlMjlkNDEwYWRkMzA1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwCkBAIC04Myw2ICs4MywxNSBAQCBib29s
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6aGFzQWN0aXZlQW5pbWF0aW9uKCkgY29u
c3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsOjppc0FuaW1hdGluZ1Byb3BlcnR5KENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9w
ZXJ0eSB0YXJnZXRQcm9wZXJ0eSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVB
bmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpICE9IENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCAm
JiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgIT0gQ0NBY3RpdmVBbmltYXRpb246
OkFib3J0ZWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRh
cmdldFByb3BlcnR5KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKwogdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0
QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayhkb3VibGUgbW9ub3RvbmljVGltZSwgQ0NBbmlt
YXRpb25FdmVudHNWZWN0b3ImIGV2ZW50cykKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaAppbmRleCA2YWMwMGU3YWUxNzhjNTc3
MzY2MzdiMjJiZGEyYzkyOTIyMWRhNmZmLi44OTM5NmJkOTU5MWZiNzQzMjVkODI1YjZhZjlhYWE0
MTVhYWQwNTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGwuaApAQCAtNzIsNiArNzIsOCBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZXJlIGFyZSBhbnkgYW5pbWF0aW9ucyB0aGF0IGFyZSBuZWl0aGVyIGZpbmlzaGVk
IG5vciBhYm9ydGVkLgogICAgIGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3Q7CiAKKyAg
ICBib29sIGlzQW5pbWF0aW5nUHJvcGVydHkoQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3Bl
cnR5KSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCA0ZmNlNzZiMDI0YzM1
YWQwOTY0ZTAxMTgyMmJmZjBhMzcyZmUwZjA3Li5hZDM0MGY4ZjFkZDNjNWQxNjMzNmVhOGYyODY0
OWUxODBhNThjZmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC02NSw2ICs2NSw3IEBA
IENDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbChpbnQgaWQpCiAgICAgLCBtX3RhcmdldFJlbmRlclN1
cmZhY2UoMCkKICAgICAsIG1fZHJhd0RlcHRoKDApCiAgICAgLCBtX2RyYXdPcGFjaXR5KDApCisg
ICAgLCBtX2RyYXdPcGFjaXR5SXNBbmltYXRpbmcoZmFsc2UpCiAgICAgLCBtX2RlYnVnQm9yZGVy
Q29sb3IoMCwgMCwgMCwgMCkKICAgICAsIG1fZGVidWdCb3JkZXJXaWR0aCgwKQogICAgICwgbV9s
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpj
cmVhdGUodGhpcykpCkBAIC00MjUsNiArNDI2LDExIEBAIHZvaWQgQ0NMYXllckltcGw6OnNldE9w
YWNpdHkoZmxvYXQgb3BhY2l0eSkKICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWRGb3JTdWJ0
cmVlKCk7CiB9CiAKK2Jvb2wgQ0NMYXllckltcGw6Om9wYWNpdHlJc0FuaW1hdGluZygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5pc0FuaW1hdGluZ1By
b3BlcnR5KENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KTsKK30KKwogdm9pZCBDQ0xheWVySW1w
bDo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCiB7CiAgICAgaWYgKG1f
cG9zaXRpb24gPT0gcG9zaXRpb24pCkBAIC00NjIsNiArNDY4LDExIEBAIHZvaWQgQ0NMYXllcklt
cGw6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQog
ICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZEZvclN1YnRyZWUoKTsKIH0KIAorYm9vbCBDQ0xh
eWVySW1wbDo6dHJhbnNmb3JtSXNBbmltYXRpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlci0+aXNBbmltYXRpbmdQcm9wZXJ0eShDQ0FjdGl2ZUFuaW1h
dGlvbjo6VHJhbnNmb3JtKTsKK30KKwogdm9pZCBDQ0xheWVySW1wbDo6c2V0RGVidWdCb3JkZXJD
b2xvcihDb2xvciBkZWJ1Z0JvcmRlckNvbG9yKQogewogICAgIGlmIChtX2RlYnVnQm9yZGVyQ29s
b3IgPT0gZGVidWdCb3JkZXJDb2xvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDhkMzNiNjQy
YmQ3OTZmODRlMTYzMmU2YTVlZmNiY2FlZGFjMGEzZjYuLmU1MWE1OTJlYTc1ODExYTg4ZDA1NmZk
ZWNmYjA0MDk1ZjViODZhY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtNTcsMTAgKzU3LDE1
IEBAIHB1YmxpYzoKIAogICAgIC8vIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVu
dCBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGF5ZXJJZDsgfQorCiAgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOwogICAgIHZp
cnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQorICAgIGJv
b2wgb3BhY2l0eUlzQW5pbWF0aW5nKCkgY29uc3Q7CisKICAgICB2aXJ0dWFsIHZvaWQgc2V0VHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgdmlydHVhbCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zv
cm07IH0KKyAgICBib29sIHRyYW5zZm9ybUlzQW5pbWF0aW5nKCkgY29uc3Q7CisKICAgICB2aXJ0
dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CiAK
ICAgICB2aXJ0dWFsIH5DQ0xheWVySW1wbCgpOwpAQCAtMTUyLDYgKzE1Nyw5IEBAIHB1YmxpYzoK
ICAgICBmbG9hdCBkcmF3T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd09wYWNpdHk7IH0K
ICAgICB2b2lkIHNldERyYXdPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9kcmF3T3BhY2l0eSA9
IG9wYWNpdHk7IH0KIAorICAgIGJvb2wgZHJhd09wYWNpdHlJc0FuaW1hdGluZygpIGNvbnN0IHsg
cmV0dXJuIG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZzsgfQorICAgIHZvaWQgc2V0RHJhd09wYWNp
dHlJc0FuaW1hdGluZyhib29sIGRyYXdPcGFjaXR5SXNBbmltYXRpbmcpIHsgbV9kcmF3T3BhY2l0
eUlzQW5pbWF0aW5nID0gZHJhd09wYWNpdHlJc0FuaW1hdGluZzsgfQorCiAgICAgY29uc3QgSW50
UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9CiAgICAgdm9pZCBz
ZXRDbGlwUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1fY2xpcFJlY3QgPSByZWN0OyB9CiAg
ICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4g
bV90YXJnZXRSZW5kZXJTdXJmYWNlOyB9CkBAIC0zMTEsNiArMzE5LDcgQEAgcHJpdmF0ZToKICAg
ICAvLyB0byBzb3J0IGxheWVycyBmcm9tIGJhY2sgdG8gZnJvbnQuCiAgICAgZmxvYXQgbV9kcmF3
RGVwdGg7CiAgICAgZmxvYXQgbV9kcmF3T3BhY2l0eTsKKyAgICBib29sIG1fZHJhd09wYWNpdHlJ
c0FuaW1hdGluZzsKIAogICAgIC8vIERlYnVnIGJvcmRlcnMuCiAgICAgQ29sb3IgbV9kZWJ1Z0Jv
cmRlckNvbG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMzRiY2UxMTgx
MDBmYTVmYTM4ZDkzNTI4MjBkNTcwOGU5ZmVkZGNhMi4uNjVkODIwYTk3NjExMzcwYjNhNzM1MmJh
OTQ3YzdkN2Q5M2I3Zjg5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC01
NDUsNyArNTQ1LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhj
b25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKICAgICBDQ0xheWVySXRlcmF0
b3JUeXBlIGVuZCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmVuZCgmcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CiAgICAgZm9yIChDQ0xheWVySXRlcmF0b3JUeXBlIGl0ID0gQ0NMYXllckl0ZXJhdG9y
VHlwZTo6YmVnaW4oJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKLSAgICAg
ICAgICAgIEFTU0VSVChpdC0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3T3BhY2l0eSgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVChpdC0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3T3BhY2l0eSgpIHx8IGl0LT5k
cmF3T3BhY2l0eUlzQW5pbWF0aW5nKCkpOwogCiAgICAgICAgICAgICBvY2NsdXNpb25UcmFja2Vy
LmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZSgqaXQsIGl0LT5yZW5kZXJTdXJmYWNlKCkpOwog
ICAgICAgICAgICAgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoKml0LCBwYWlu
dFR5cGUpOwpAQCAtNTY4LDcgKzU2OCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBDQ1RlCiAgICAg
Q0NMYXllckl0ZXJhdG9yVHlwZSBlbmQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjplbmQoJm1fdXBk
YXRlTGlzdCk7CiAgICAgZm9yIChDQ0xheWVySXRlcmF0b3JUeXBlIGl0ID0gQ0NMYXllckl0ZXJh
dG9yVHlwZTo6YmVnaW4oJm1fdXBkYXRlTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICBpZiAoaXQucmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSkgewotICAgICAgICAgICAg
QVNTRVJUKGl0LT5yZW5kZXJTdXJmYWNlKCktPmRyYXdPcGFjaXR5KCkpOworICAgICAgICAgICAg
QVNTRVJUKGl0LT5yZW5kZXJTdXJmYWNlKCktPmRyYXdPcGFjaXR5KCkgfHwgaXQtPmRyYXdPcGFj
aXR5SXNBbmltYXRpbmcoKSk7CiAgICAgICAgICAgICBpZiAoaXQtPm1hc2tMYXllcigpKQogICAg
ICAgICAgICAgICAgIGl0LT5tYXNrTGF5ZXIoKS0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhj
b250ZXh0LCB1cGRhdGVyKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5jcHAKaW5kZXggYzg2ZDc0ZDg2MWRhZjRlNmUzMjVkMWM1M2ZkNDdmNDk4NjRmODZhOS4uMTI1
NGEzNzZkMGZkNjM3ZTQ1MTkxNTdkMjE2NWYwZmVkYmIwYTA2YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29t
bW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC04Myw4ICs4MywxMiBAQCBzdGF0aWMgYm9v
bCBsYXllclNob3VsZEJlU2tpcHBlZChMYXllclR5cGUqIGxheWVyKQogICAgIC8vIFNvbWUgYWRk
aXRpb25hbCBjb25kaXRpb25zIG5lZWQgdG8gYmUgY29tcHV0ZWQgYXQgYSBsYXRlciBwb2ludCBh
ZnRlciB0aGUgcmVjdXJzaW9uIGlzIGZpbmlzaGVkLgogICAgIC8vICAgLSB0aGUgaW50ZXJzZWN0
aW9uIG9mIHJlbmRlciBzdXJmYWNlIGNvbnRlbnQgYW5kIGxheWVyIGNsaXBSZWN0IGlzIGVtcHR5
CiAgICAgLy8gICAtIHRoZSB2aXNpYmxlTGF5ZXJSZWN0IGlzIGVtcHR5CisgICAgLy8KKyAgICAv
LyBOb3RlLCBpZiB0aGUgbGF5ZXIgc2hvdWxkIG5vdCBoYXZlIGJlZW4gZHJhd24gZHVlIHRvIGJl
aW5nIGZ1bGx5IHRyYW5zcGFyZW50LAorICAgIC8vIHdlIHdvdWxkIGhhdmUgc2tpcHBlZCB0aGUg
ZW50aXJlIHN1YnRyZWUgYW5kIG5ldmVyIG1hZGUgaXQgaW50byB0aGlzIGZ1bmN0aW9uLAorICAg
IC8vIHNvIGl0IGlzIHNhZmUgdG8gb21pdCB0aGlzIGNoZWNrIGhlcmUuCiAKLSAgICBpZiAoIWxh
eWVyLT5kcmF3c0NvbnRlbnQoKSB8fCAhbGF5ZXItPm9wYWNpdHkoKSB8fCBsYXllci0+Ym91bmRz
KCkuaXNFbXB0eSgpKQorICAgIGlmICghbGF5ZXItPmRyYXdzQ29udGVudCgpIHx8IGxheWVyLT5i
b3VuZHMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gVGhlIGxh
eWVyIHNob3VsZCBub3QgYmUgZHJhd24gaWYgKDEpIGl0IGlzIG5vdCBkb3VibGUtc2lkZWQgYW5k
ICgyKSB0aGUgYmFjayBvZiB0aGUgbGF5ZXIgaXMgZmFjaW5nIHRoZSBzY3JlZW4uCkBAIC0xMDUs
NiArMTA5LDI0IEBAIHN0YXRpYyBib29sIGxheWVyU2hvdWxkQmVTa2lwcGVkKExheWVyVHlwZSog
bGF5ZXIpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KK2Jvb2wgc3VidHJlZVNo
b3VsZEJlU2tpcHBlZChMYXllclR5cGUqIGxheWVyKQoreworICAgIC8vIFRoZSBvcGFjaXR5IG9m
IGEgbGF5ZXIgYWx3YXlzIGFwcGxpZXMgdG8gaXRzIGNoaWxkcmVuIChlaXRoZXIgaW1wbGljaXRs
eQorICAgIC8vIHZpYSBhIHJlbmRlciBzdXJmYWNlIG9yIGV4cGxpY2l0bHkgaWYgdGhlIHBhcmVu
dCBwcmVzZXJ2ZXMgM0QpLCBzbyB0aGUKKyAgICAvLyBlbnRpcmUgc3VidHJlZSBjYW4gYmUgc2tp
cHBlZCBpZiB0aGlzIGxheWVyIGlzIGZ1bGx5IHRyYW5zcGFyZW50LgorICAgIHJldHVybiAhbGF5
ZXItPm9wYWNpdHkoKTsKK30KKwordGVtcGxhdGU8PgorYm9vbCBzdWJ0cmVlU2hvdWxkQmVTa2lw
cGVkPExheWVyQ2hyb21pdW0+KExheWVyQ2hyb21pdW0qIGxheWVyKQoreworICAgIC8vIElmIHRo
ZSBvcGFjaXR5IGlzIGJlaW5nIGFuaW1hdGVkIHRoZW4gdGhlIG9wYWNpdHkgb24gdGhlIG1haW4g
dGhyZWFkIGlzIHVucmVsaWFibGUKKyAgICAvLyAoc2luY2UgdGhlIGltcGwgdGhyZWFkIG1heSBi
ZSB1c2luZyBhIGRpZmZlcmVudCBvcGFjaXR5KSwgc28gaXQgc2hvdWxkIG5vdCBiZSB0cnVzdGVk
LgorICAgIC8vIEluIHBhcnRpY3VsYXIsIGl0IHNob3VsZCBub3QgY2F1c2UgdGhlIHN1YnRyZWUg
dG8gYmUgc2tpcHBlZC4KKyAgICByZXR1cm4gIWxheWVyLT5vcGFjaXR5KCkgJiYgIWxheWVyLT5v
cGFjaXR5SXNBbmltYXRpbmcoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgog
c3RhdGljIGJvb2wgc3VidHJlZVNob3VsZFJlbmRlclRvU2VwYXJhdGVTdXJmYWNlKExheWVyVHlw
ZSogbGF5ZXIsIGJvb2wgYXhpc0FsaWduZWRXaXRoUmVzcGVjdFRvUGFyZW50KQogewogICAgIC8v
IEZJWE1FOiBJZiB3ZSBkZWNpZGUgdG8gY3JlYXRlIGEgcmVuZGVyIHN1cmZhY2UgaGVyZSB3aGls
ZSB0aGlzIGxheWVyIGRvZXMKQEAgLTIzMCwxNCArMjUyLDE1IEBAIHN0YXRpYyBib29sIGNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIs
IExheWVyCiAgICAgLy8gICAgICAgIFMgaXMgdGhlIHNjYWxlIGFkanVzdG1lbnQgKHRvIHNjYWxl
IHVwIHRvIHRoZSBsYXllciBzaXplKQogICAgIC8vCiAKKyAgICBpZiAoc3VidHJlZVNob3VsZEJl
U2tpcHBlZChsYXllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGZsb2F0IGRyYXdP
cGFjaXR5ID0gbGF5ZXItPm9wYWNpdHkoKTsKLSAgICBpZiAobGF5ZXItPnBhcmVudCgpICYmIGxh
eWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSkKKyAgICBib29sIGRyYXdPcGFjaXR5SXNBbmlt
YXRpbmcgPSBsYXllci0+b3BhY2l0eUlzQW5pbWF0aW5nKCk7CisgICAgaWYgKGxheWVyLT5wYXJl
bnQoKSAmJiBsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkpIHsKICAgICAgICAgZHJhd09w
YWNpdHkgKj0gbGF5ZXItPnBhcmVudCgpLT5kcmF3T3BhY2l0eSgpOwotICAgIC8vIFRoZSBvcGFj
aXR5IG9mIGEgbGF5ZXIgYWx3YXlzIGFwcGxpZXMgdG8gaXRzIGNoaWxkcmVuIChlaXRoZXIgaW1w
bGljaXRseQotICAgIC8vIHZpYSBhIHJlbmRlciBzdXJmYWNlIG9yIGV4cGxpY2l0bHkgaWYgdGhl
IHBhcmVudCBwcmVzZXJ2ZXMgM0QpLCBzbyB0aGUKLSAgICAvLyBlbnRpcmUgc3VidHJlZSBjYW4g
YmUgc2tpcHBlZCBpZiB0aGlzIGxheWVyIGlzIGZ1bGx5IHRyYW5zcGFyZW50LgotICAgIGlmICgh
ZHJhd09wYWNpdHkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZHJhd09wYWNpdHlJ
c0FuaW1hdGluZyB8PSBsYXllci0+cGFyZW50KCktPmRyYXdPcGFjaXR5SXNBbmltYXRpbmcoKTsK
KyAgICB9CiAKICAgICBJbnRTaXplIGJvdW5kcyA9IGxheWVyLT5ib3VuZHMoKTsKICAgICBGbG9h
dFBvaW50IGFuY2hvclBvaW50ID0gbGF5ZXItPmFuY2hvclBvaW50KCk7CkBAIC0yODYsNyArMzA5
LDkgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50
ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXIKIAogICAgICAgICAvLyBUaGUgb3BhY2l0eSB2
YWx1ZSBpcyBtb3ZlZCBmcm9tIHRoZSBsYXllciB0byBpdHMgc3VyZmFjZSwgc28gdGhhdCB0aGUg
ZW50aXJlIHN1YnRyZWUgcHJvcGVybHkgaW5oZXJpdHMgb3BhY2l0eS4KICAgICAgICAgcmVuZGVy
U3VyZmFjZS0+c2V0RHJhd09wYWNpdHkoZHJhd09wYWNpdHkpOworICAgICAgICByZW5kZXJTdXJm
YWNlLT5zZXREcmF3T3BhY2l0eUlzQW5pbWF0aW5nKGRyYXdPcGFjaXR5SXNBbmltYXRpbmcpOwog
ICAgICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkoMSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3
T3BhY2l0eUlzQW5pbWF0aW5nKGZhbHNlKTsKIAogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBsYXllck9yaWdpblRyYW5zZm9ybSA9IGNvbWJpbmVkVHJhbnNmb3JtOwogICAgICAgICBsYXll
ck9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICogYm91bmRzLndpZHRoKCksIC0wLjUg
KiBib3VuZHMuaGVpZ2h0KCksIDApOwpAQCAtMzIwLDYgKzM0NSw3IEBAIHN0YXRpYyBib29sIGNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5
ZXIsIExheWVyCiAgICAgICAgIHRyYW5zZm9ybWVkTGF5ZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVj
dChsYXllci0+ZHJhd1RyYW5zZm9ybSgpLm1hcFJlY3QobGF5ZXJSZWN0KSk7CiAKICAgICAgICAg
bGF5ZXItPnNldERyYXdPcGFjaXR5KGRyYXdPcGFjaXR5KTsKKyAgICAgICAgbGF5ZXItPnNldERy
YXdPcGFjaXR5SXNBbmltYXRpbmcoZHJhd09wYWNpdHlJc0FuaW1hdGluZyk7CiAKICAgICAgICAg
aWYgKGxheWVyICE9IHJvb3RMYXllcikgewogICAgICAgICAgICAgQVNTRVJUKGxheWVyLT5wYXJl
bnQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAppbmRleCAzYmUxNDhiMGE3YjMz
MDE5NDIzY2IyOTAzMDUxNTQ0Y2RhMzMzZDRiLi5lMWY1NzA0YmRhM2M2ZWJhYjQwNjE1ZjVhZWEw
NWFiOThlZjcyYzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKQEAgLTUyLDYg
KzUyLDcgQEAgQ0NSZW5kZXJTdXJmYWNlOjpDQ1JlbmRlclN1cmZhY2UoQ0NMYXllckltcGwqIG93
bmluZ0xheWVyKQogICAgICwgbV9za2lwc0RyYXcoZmFsc2UpCiAgICAgLCBtX3N1cmZhY2VQcm9w
ZXJ0eUNoYW5nZWQoZmFsc2UpCiAgICAgLCBtX2RyYXdPcGFjaXR5KDEpCisgICAgLCBtX2RyYXdP
cGFjaXR5SXNBbmltYXRpbmcoZmFsc2UpCiAgICAgLCBtX25lYXJlc3RBbmNlc3RvclRoYXRNb3Zl
c1BpeGVscygwKQogewogICAgIG1fZGFtYWdlVHJhY2tlciA9IENDRGFtYWdlVHJhY2tlcjo6Y3Jl
YXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCmluZGV4IGI1Y2QzYTgzNDQwYTdhYzI5
NWU4MDE1YmYxZGU2N2JlMTg3N2I1ODcuLjY4M2QxNjZkMGI3ODRkOTgwOTg0MWZmMjYxYzhlOWE0
ZjA1NmJlYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCkBAIC03MCw2ICs3MCw5IEBA
IHB1YmxpYzoKICAgICBmbG9hdCBkcmF3T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd09w
YWNpdHk7IH0KICAgICB2b2lkIHNldERyYXdPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9kcmF3
T3BhY2l0eSA9IG9wYWNpdHk7IH0KIAorICAgIGJvb2wgZHJhd09wYWNpdHlJc0FuaW1hdGluZygp
IGNvbnN0IHsgcmV0dXJuIG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZzsgfQorICAgIHZvaWQgc2V0
RHJhd09wYWNpdHlJc0FuaW1hdGluZyhib29sIGRyYXdPcGFjaXR5SXNBbmltYXRpbmcpIHsgbV9k
cmF3T3BhY2l0eUlzQW5pbWF0aW5nID0gZHJhd09wYWNpdHlJc0FuaW1hdGluZzsgfQorCiAgICAg
dm9pZCBzZXREcmF3VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJh
bnNmb3JtKSB7IG1fZHJhd1RyYW5zZm9ybSA9IGRyYXdUcmFuc2Zvcm07IH0KICAgICBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJh
d1RyYW5zZm9ybTsgfQogCkBAIC0xMzEsNiArMTM0LDcgQEAgcHJpdmF0ZToKIAogICAgIE93blB0
cjxNYW5hZ2VkVGV4dHVyZT4gbV9jb250ZW50c1RleHR1cmU7CiAgICAgZmxvYXQgbV9kcmF3T3Bh
Y2l0eTsKKyAgICBib29sIG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZzsKICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9y
ZXBsaWNhRHJhd1RyYW5zZm9ybTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX29yaWdpblRy
YW5zZm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdFRlc3QuY3BwCmluZGV4IGZlNzg4ZmJhZWVlNzdlNzkzYTAwMzhlYzdhZjI5MjY1NWZm
Yzc0NmIuLjc1M2VhZTRiZjZkNmYwM2VhMDJkMTJkMjdjZGQwZmNkM2I3YjdiMTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNw
cApAQCAtOTg3LDYgKzk4Nyw0NiBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFRpY2tBbmlt
YXRpb25XaGlsZUJhY2tncm91bmRlZCwgcnVuTXVsdGlUaHJlYWQpCiAgICAgcnVuVGVzdFRocmVh
ZGVkKCk7CiB9CiAKKy8vIEVuc3VyZXMgdGhhdCB3aGVuIG9wYWNpdHkgaXMgYmVpbmcgYW5pbWF0
ZWQsIHRoaXMgdmFsdWUgZG9lcyBub3QgY2F1c2UgdGhlIHN1YnRyZWUgdG8gYmUgc2tpcHBlZC4K
K2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3REb05vdFNraXBMYXllcnNXaXRoQW5pbWF0ZWRPcGFj
aXR5IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3RUaHJlYWRPbmx5IHsKK3B1YmxpYzoKKyAg
ICBDQ0xheWVyVHJlZUhvc3RUZXN0RG9Ob3RTa2lwTGF5ZXJzV2l0aEFuaW1hdGVkT3BhY2l0eSgp
CisgICAgICAgIDogbV9udW1BbmltYXRlcygwKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExh
eWVyKCktPnNldERyYXdPcGFjaXR5KDAuNSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0
Vmlld3BvcnRTaXplKEludFNpemUoMTAsIDEwKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+
cm9vdExheWVyKCktPnNldE9wYWNpdHkoMCk7CisgICAgICAgIHBvc3RBZGRBbmltYXRpb25Ub01h
aW5UaHJlYWQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhDQ0xh
eWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCwgZG91YmxlIG1vbm90b25pY1RpbWUp
CisgICAgeworICAgICAgICBtX251bUFuaW1hdGVzKys7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGNvbW1pdENvbXBsZXRlT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikKKyAgICB7
CisgICAgICAgIEVYUEVDVF9ORSgwLjUsIG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPmRy
YXdPcGFjaXR5KCkpOworICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9udW1B
bmltYXRlczsKK307CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0RG9Ob3RTa2lwTGF5ZXJz
V2l0aEFuaW1hdGVkT3BhY2l0eSwgcnVuTXVsdGlUaHJlYWQpCit7CisgICAgcnVuVGVzdFRocmVh
ZGVkKCk7Cit9CisKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxTaW1wbGUgOiBwdWJs
aWMgQ0NMYXllclRyZWVIb3N0VGVzdFRocmVhZE9ubHkgewogcHVibGljOgogICAgIENDTGF5ZXJU
cmVlSG9zdFRlc3RTY3JvbGxTaW1wbGUoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132169</attachid>
            <date>2012-03-15 18:15:25 -0700</date>
            <delta_ts>2012-03-16 03:29:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80744-20120315211524.patch</filename>
            <type>text/plain</type>
            <size>26870</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwODQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjQ3Njc1M2NjODRkZjgz
MDgzYWVlNDI2ZjY2ODllN2I3NDNmYjMyNS4uYmU3OTdiNTVjMDQ1MTk1OWNmZDZhOGFjMWZmMGQ0
NDg5NjYwY2I4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEyLTAzLTE1ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gVGhy
ZWFkZWQgb3BhY2l0eSBhbmltYXRpb24ganVtcCB0byBvcGFjaXR5IG9mIDAKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNzQ0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdGVkIGluIENDTGF5ZXJUcmVl
SG9zdFRlc3REb05vdFNraXBMYXllcnNXaXRoQW5pbWF0ZWRPcGFjaXR5CisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJDaHJvbWl1bTo6b3BhY2l0eUlzQW5pbWF0aW5nKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6dHJhbnNmb3JtSXNBbmltYXRpbmcpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAg
ICAgICAgKExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
ZHJhd09wYWNpdHlJc0FuaW1hdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpzZXREcmF3T3BhY2l0eUlzQW5pbWF0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU3VyZmFjZUNocm9taXVtOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW0pOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpkcmF3T3BhY2l0eUlzQW5pbWF0
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6c2V0RHJhd09w
YWNpdHlJc0FuaW1hdGluZyk6CisgICAgICAgIChSZW5kZXJTdXJmYWNlQ2hyb21pdW0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
Ojppc0FuaW1hdGluZ1Byb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmg6
CisgICAgICAgIChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6aXNB
bmltYXRpbmdQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaDoK
KyAgICAgICAgKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJbXBsOjpvcGFjaXR5SXNBbmltYXRpbmcpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJhbnNmb3JtSXNBbmltYXRpbmcpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChD
Q0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6ZHJhd09wYWNpdHlJ
c0FuaW1hdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0RHJhd09wYWNp
dHlJc0FuaW1hdGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmxheWVyU2hvdWxkQmVTa2lwcGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnN1YnRyZWVTaG91bGRC
ZVNraXBwZWQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNo
cm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eUludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNl
OjpDQ1JlbmRlclN1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyU3VyZmFjZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNl
OjpkcmF3T3BhY2l0eUlzQW5pbWF0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3Vy
ZmFjZTo6c2V0RHJhd09wYWNpdHlJc0FuaW1hdGluZyk6CisgICAgICAgIChDQ1JlbmRlclN1cmZh
Y2UpOgorCiAyMDEyLTAzLTE1ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0u
Y29tPgogCiAgICAgICAgIEVuYWJsZSBhbmltVmFsIHN1cHBvcnQgZm9yIFNWR051bWJlckxpc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZjViZWQ0NDg2ODJhZjY4OTA0YzY0ZmMyYzQ1
ZjVjMTY1ZTc4ODg1Yy4uNDNiMGNhYzU4MjZjMzcyZDUyZDk4ZGE2YjU3MmNlZmM4OTllOWNiYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0wMy0xNSAg
SWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IFRocmVhZGVkIG9wYWNpdHkgYW5pbWF0aW9uIGp1bXAgdG8gb3BhY2l0eSBvZiAwCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDc0NAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRy
ZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChXVEYpOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0
VGVzdERvTm90U2tpcExheWVyc1dpdGhBbmltYXRlZE9wYWNpdHkpOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0RG9Ob3RTa2lwTGF5ZXJzV2l0aEFuaW1hdGVkT3BhY2l0eTo6Q0NM
YXllclRyZWVIb3N0VGVzdERvTm90U2tpcExheWVyc1dpdGhBbmltYXRlZE9wYWNpdHkpOgorICAg
ICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0RG9Ob3RTa2lwTGF5ZXJzV2l0aEFuaW1hdGVk
T3BhY2l0eTo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdERv
Tm90U2tpcExheWVyc1dpdGhBbmltYXRlZE9wYWNpdHk6OmFuaW1hdGVMYXllcnMpOgorICAgICAg
ICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0RG9Ob3RTa2lwTGF5ZXJzV2l0aEFuaW1hdGVkT3Bh
Y2l0eTo6Y29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRy
ZWVIb3N0VGVzdERvTm90U2tpcExheWVyc1dpdGhBbmltYXRlZE9wYWNpdHk6OmFmdGVyVGVzdCk6
CisgICAgICAgIChXVEY6OlRFU1RfRik6CisKIDIwMTItMDMtMTUgIFBldGVyIEJldmVybG9vICA8
cGV0ZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuICBSb2xsZWQgREVQUy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZjk3Mzg4MGZkMTc1YjFhNDkzNmEyZWZmNDE3NmY0
Y2JmMWU3YzlmNS4uZDRjYWQyNGE2MTNiNmE3OTU0OTM5ZDE0NTU5YjdlZmZiMWZjNjA4OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTgwLDYgKzgwLDcgQEAgTGF5ZXJDaHJvbWl1bTo6TGF5
ZXJDaHJvbWl1bSgpCiAgICAgLCBtX2Fsd2F5c1Jlc2VydmVUZXh0dXJlcyhmYWxzZSkKICAgICAs
IG1fcmVwbGljYUxheWVyKDApCiAgICAgLCBtX2RyYXdPcGFjaXR5KDApCisgICAgLCBtX2RyYXdP
cGFjaXR5SXNBbmltYXRpbmcoZmFsc2UpCiAgICAgLCBtX3RhcmdldFJlbmRlclN1cmZhY2UoMCkK
ICAgICAsIG1fY29udGVudHNTY2FsZSgxLjApCiAgICAgLCBtX2xheWVyQW5pbWF0aW9uRGVsZWdh
dGUoMCkKQEAgLTM4OSw2ICszOTAsMTEgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRPcGFjaXR5
KGZsb2F0IG9wYWNpdHkpCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAorYm9vbCBMYXllckNo
cm9taXVtOjpvcGFjaXR5SXNBbmltYXRpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVy
QW5pbWF0aW9uQ29udHJvbGxlci0+aXNBbmltYXRpbmdQcm9wZXJ0eShDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSk7Cit9CisKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0T3BhcXVlKGJvb2wgb3Bh
cXVlKQogewogICAgIGlmIChtX29wYXF1ZSA9PSBvcGFxdWUpCkBAIC00MjEsNiArNDI3LDExIEBA
IHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiB0cmFuc2Zvcm0pCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAorYm9vbCBMYXllckNo
cm9taXVtOjp0cmFuc2Zvcm1Jc0FuaW1hdGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5
ZXJBbmltYXRpb25Db250cm9sbGVyLT5pc0FuaW1hdGluZ1Byb3BlcnR5KENDQWN0aXZlQW5pbWF0
aW9uOjpUcmFuc2Zvcm0pOworfQorCiB2b2lkIExheWVyQ2hyb21pdW06OnNldFNjcm9sbFBvc2l0
aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKIHsKICAgICBpZiAobV9zY3JvbGxQ
b3NpdGlvbiA9PSBzY3JvbGxQb3NpdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA4NmZkZjk1
MTU2ODg5Mzc4YzNkNjJkMTkxOWE3OTVhMmNlMTI1MTZhLi42ZDkxYTg0MzU1ZmQzNmQ4NTE0MDhm
NzAzM2UxOWZhYmYzNDE3YzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xMDksNiArMTA5LDcg
QEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KTsKICAgICBmbG9hdCBvcGFj
aXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CisgICAgYm9vbCBvcGFjaXR5SXNBbmlt
YXRpbmcoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJik7CiAgICAgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycygpIGNvbnN0IHsgcmV0
dXJuIG1fZmlsdGVyczsgfQpAQCAtMTI0LDYgKzEyNSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3Jt
OyB9CisgICAgYm9vbCB0cmFuc2Zvcm1Jc0FuaW1hdGluZygpIGNvbnN0OwogCiAgICAgY29uc3Qg
SW50UmVjdCYgdmlzaWJsZUxheWVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJsZUxheWVy
UmVjdDsgfQogICAgIHZvaWQgc2V0VmlzaWJsZUxheWVyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNp
YmxlTGF5ZXJSZWN0KSB7IG1fdmlzaWJsZUxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3Q7IH0K
QEAgLTE4Niw2ICsxODgsMTAgQEAgcHVibGljOgogCiAgICAgZmxvYXQgZHJhd09wYWNpdHkoKSBj
b25zdCB7IHJldHVybiBtX2RyYXdPcGFjaXR5OyB9CiAgICAgdm9pZCBzZXREcmF3T3BhY2l0eShm
bG9hdCBvcGFjaXR5KSB7IG1fZHJhd09wYWNpdHkgPSBvcGFjaXR5OyB9CisKKyAgICBib29sIGRy
YXdPcGFjaXR5SXNBbmltYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2RyYXdPcGFjaXR5SXNBbmlt
YXRpbmc7IH0KKyAgICB2b2lkIHNldERyYXdPcGFjaXR5SXNBbmltYXRpbmcoYm9vbCBkcmF3T3Bh
Y2l0eUlzQW5pbWF0aW5nKSB7IG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZyA9IGRyYXdPcGFjaXR5
SXNBbmltYXRpbmc7IH0KKwogICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jbGlwUmVjdDsgfQogICAgIHZvaWQgc2V0Q2xpcFJlY3QoY29uc3QgSW50UmVjdCYg
Y2xpcFJlY3QpIHsgbV9jbGlwUmVjdCA9IGNsaXBSZWN0OyB9CiAgICAgUmVuZGVyU3VyZmFjZUNo
cm9taXVtKiB0YXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRSZW5k
ZXJTdXJmYWNlOyB9CkBAIC0zMTIsNiArMzE4LDcgQEAgcHJpdmF0ZToKICAgICAvLyBUcmFuc2ll
bnQgcHJvcGVydGllcy4KICAgICBPd25QdHI8UmVuZGVyU3VyZmFjZUNocm9taXVtPiBtX3JlbmRl
clN1cmZhY2U7CiAgICAgZmxvYXQgbV9kcmF3T3BhY2l0eTsKKyAgICBib29sIG1fZHJhd09wYWNp
dHlJc0FuaW1hdGluZzsKICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7CiAgICAgUmVuZGVyU3VyZmFj
ZUNocm9taXVtKiBtX3RhcmdldFJlbmRlclN1cmZhY2U7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbV9kcmF3VHJhbnNmb3JtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAK
aW5kZXggNjljZTk1MjZjOTFkN2I0N2NmNzE4NTdkNTY1OTNjNzhhNjMxNDkzOS4uMmU5OTk4YTdh
MTE0ZmY2ODFhZDJkYzY1YTQ2ZmE3ZmZlNTc3YzE0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJm
YWNlQ2hyb21pdW0uY3BwCkBAIC00Miw2ICs0Miw3IEBAIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6
UmVuZGVyU3VyZmFjZUNocm9taXVtKExheWVyQ2hyb21pdW0qIG93bmluZ0xheWVyKQogICAgICwg
bV9tYXNrTGF5ZXIoMCkKICAgICAsIG1fc2tpcHNEcmF3KGZhbHNlKQogICAgICwgbV9kcmF3T3Bh
Y2l0eSgxKQorICAgICwgbV9kcmF3T3BhY2l0eUlzQW5pbWF0aW5nKGZhbHNlKQogICAgICwgbV9u
ZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMoMCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3Vy
ZmFjZUNocm9taXVtLmgKaW5kZXggOTA0NTQyNWJjM2ZiZmYyM2M4MjFmZmZlOGE0YmIwNzM5NWIw
ZTI4Yy4uM2EzMDRjMTg1ZDdmOTMyNTJmNDQzY2M0MjM0NjFjOTlhYjk3Y2RkZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFj
ZUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKQEAgLTYzLDYgKzYzLDkgQEAgcHVibGljOgogICAg
IGZsb2F0IGRyYXdPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3T3BhY2l0eTsgfQogICAg
IHZvaWQgc2V0RHJhd09wYWNpdHkoZmxvYXQgZHJhd09wYWNpdHkpIHsgbV9kcmF3T3BhY2l0eSA9
IGRyYXdPcGFjaXR5OyB9CiAKKyAgICBib29sIGRyYXdPcGFjaXR5SXNBbmltYXRpbmcoKSBjb25z
dCB7IHJldHVybiBtX2RyYXdPcGFjaXR5SXNBbmltYXRpbmc7IH0KKyAgICB2b2lkIHNldERyYXdP
cGFjaXR5SXNBbmltYXRpbmcoYm9vbCBkcmF3T3BhY2l0eUlzQW5pbWF0aW5nKSB7IG1fZHJhd09w
YWNpdHlJc0FuaW1hdGluZyA9IGRyYXdPcGFjaXR5SXNBbmltYXRpbmc7IH0KKwogICAgIC8vIFRo
aXMgZ29lcyBmcm9tIGNvbnRlbnQgc3BhY2Ugd2l0aCB0aGUgb3JpZ2luIGluIHRoZSBjZW50ZXIg
b2YgdGhlIHJlY3QgYmVpbmcgdHJhbnNmb3JtZWQgdG8gdGhlIHRhcmdldCBzcGFjZSB3aXRoIHRo
ZSBvcmlnaW4gaW4gdGhlIHRvcCBsZWZ0IG9mIHRoZQogICAgIC8vIHJlY3QgYmVpbmcgdHJhbnNm
b3JtZWQuIFBvc2l0aW9uIHRoZSByZWN0IHNvIHRoYXQgdGhlIG9yaWdpbiBpcyBpbiB0aGUgY2Vu
dGVyIG9mIGl0IGJlZm9yZSBhcHBseWluZyB0aGlzIHRyYW5zZm9ybS4KICAgICBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd1Ry
YW5zZm9ybTsgfQpAQCAtOTksNiArMTAyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2tpcHNE
cmF3OwogCiAgICAgZmxvYXQgbV9kcmF3T3BhY2l0eTsKKyAgICBib29sIG1fZHJhd09wYWNpdHlJ
c0FuaW1hdGluZzsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07CiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9yZXBsaWNhRHJhd1RyYW5zZm9ybTsKICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtX29yaWdpblRyYW5zZm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcAppbmRleCAzMzVkM2E1OGU5OGFlZDI5N2Vl
NTQwNTRiNTRkMDQ4NTA4NTE3MWIyLi5jM2FmNDRkZjU2YzVlYjk5OTVkNWMyZGIzOTg3MWM0MmQz
ZTUwZTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIuY3BwCkBAIC0yMjgsNiArMjI4LDE1IEBAIENDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKGludCBncm91cElkLCBDCiAgICAg
cmV0dXJuIDA7CiB9CiAKK2Jvb2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmlzQW5pbWF0
aW5nUHJvcGVydHkoQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3Bl
cnR5KSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRp
b25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1
blN0YXRlKCkgIT0gQ0NBY3RpdmVBbmltYXRpb246OkZpbmlzaGVkICYmIG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+cnVuU3RhdGUoKSAhPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCAmJiBtX2Fj
dGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2
b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmUoaW50IGdyb3VwSWQsIENDQWN0
aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKIHsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKaW5kZXggMDY4MjEz
MDQ3ZjQyYWM1YjJhMzFiMGI2NmRmNzM3NDVkMmM1ZjIyNC4uZjJmNjZlYjI0NGVmMGFiMjc1N2Qy
OTA1NGY4YzQxOWY0NmU0ZDkwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlci5oCkBAIC01OCw2ICs1OCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFz
QWN0aXZlQW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVBbmltYXRpb25zLnNpemUo
KTsgfQogICAgIENDQWN0aXZlQW5pbWF0aW9uKiBnZXRBY3RpdmVBbmltYXRpb24oaW50IGdyb3Vw
SWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CisgICAgYm9vbCBpc0FuaW1h
dGluZ1Byb3BlcnR5KENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSkgY29uc3Q7CiAK
IHByb3RlY3RlZDoKICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAKaW5kZXgg
ZjA5ZGNmYWUwNjQyNWRhODNkZWU2ZmEwZjk2NjNmNzAyMzBjMGFlMi4uOGE5ZTkxYjJlMmE0ZTQ1
OWRlMGRlZjdmMTZlMjlkNDEwYWRkMzA1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwCkBAIC04Myw2ICs4MywxNSBAQCBib29s
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6aGFzQWN0aXZlQW5pbWF0aW9uKCkgY29u
c3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsOjppc0FuaW1hdGluZ1Byb3BlcnR5KENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9w
ZXJ0eSB0YXJnZXRQcm9wZXJ0eSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVB
bmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpICE9IENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCAm
JiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgIT0gQ0NBY3RpdmVBbmltYXRpb246
OkFib3J0ZWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRh
cmdldFByb3BlcnR5KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKwogdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0
QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayhkb3VibGUgbW9ub3RvbmljVGltZSwgQ0NBbmlt
YXRpb25FdmVudHNWZWN0b3ImIGV2ZW50cykKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaAppbmRleCA2YWMwMGU3YWUxNzhjNTc3
MzY2MzdiMjJiZGEyYzkyOTIyMWRhNmZmLi44OTM5NmJkOTU5MWZiNzQzMjVkODI1YjZhZjlhYWE0
MTVhYWQwNTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGwuaApAQCAtNzIsNiArNzIsOCBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZXJlIGFyZSBhbnkgYW5pbWF0aW9ucyB0aGF0IGFyZSBuZWl0aGVyIGZpbmlzaGVk
IG5vciBhYm9ydGVkLgogICAgIGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3Q7CiAKKyAg
ICBib29sIGlzQW5pbWF0aW5nUHJvcGVydHkoQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3Bl
cnR5KSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCA0ZmNlNzZiMDI0YzM1
YWQwOTY0ZTAxMTgyMmJmZjBhMzcyZmUwZjA3Li5hZDM0MGY4ZjFkZDNjNWQxNjMzNmVhOGYyODY0
OWUxODBhNThjZmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC02NSw2ICs2NSw3IEBA
IENDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbChpbnQgaWQpCiAgICAgLCBtX3RhcmdldFJlbmRlclN1
cmZhY2UoMCkKICAgICAsIG1fZHJhd0RlcHRoKDApCiAgICAgLCBtX2RyYXdPcGFjaXR5KDApCisg
ICAgLCBtX2RyYXdPcGFjaXR5SXNBbmltYXRpbmcoZmFsc2UpCiAgICAgLCBtX2RlYnVnQm9yZGVy
Q29sb3IoMCwgMCwgMCwgMCkKICAgICAsIG1fZGVidWdCb3JkZXJXaWR0aCgwKQogICAgICwgbV9s
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpj
cmVhdGUodGhpcykpCkBAIC00MjUsNiArNDI2LDExIEBAIHZvaWQgQ0NMYXllckltcGw6OnNldE9w
YWNpdHkoZmxvYXQgb3BhY2l0eSkKICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWRGb3JTdWJ0
cmVlKCk7CiB9CiAKK2Jvb2wgQ0NMYXllckltcGw6Om9wYWNpdHlJc0FuaW1hdGluZygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5pc0FuaW1hdGluZ1By
b3BlcnR5KENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KTsKK30KKwogdm9pZCBDQ0xheWVySW1w
bDo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCiB7CiAgICAgaWYgKG1f
cG9zaXRpb24gPT0gcG9zaXRpb24pCkBAIC00NjIsNiArNDY4LDExIEBAIHZvaWQgQ0NMYXllcklt
cGw6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQog
ICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZEZvclN1YnRyZWUoKTsKIH0KIAorYm9vbCBDQ0xh
eWVySW1wbDo6dHJhbnNmb3JtSXNBbmltYXRpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlci0+aXNBbmltYXRpbmdQcm9wZXJ0eShDQ0FjdGl2ZUFuaW1h
dGlvbjo6VHJhbnNmb3JtKTsKK30KKwogdm9pZCBDQ0xheWVySW1wbDo6c2V0RGVidWdCb3JkZXJD
b2xvcihDb2xvciBkZWJ1Z0JvcmRlckNvbG9yKQogewogICAgIGlmIChtX2RlYnVnQm9yZGVyQ29s
b3IgPT0gZGVidWdCb3JkZXJDb2xvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDhkMzNiNjQy
YmQ3OTZmODRlMTYzMmU2YTVlZmNiY2FlZGFjMGEzZjYuLmU1MWE1OTJlYTc1ODExYTg4ZDA1NmZk
ZWNmYjA0MDk1ZjViODZhY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtNTcsMTAgKzU3LDE1
IEBAIHB1YmxpYzoKIAogICAgIC8vIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVu
dCBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGF5ZXJJZDsgfQorCiAgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOwogICAgIHZp
cnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQorICAgIGJv
b2wgb3BhY2l0eUlzQW5pbWF0aW5nKCkgY29uc3Q7CisKICAgICB2aXJ0dWFsIHZvaWQgc2V0VHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgdmlydHVhbCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zv
cm07IH0KKyAgICBib29sIHRyYW5zZm9ybUlzQW5pbWF0aW5nKCkgY29uc3Q7CisKICAgICB2aXJ0
dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CiAK
ICAgICB2aXJ0dWFsIH5DQ0xheWVySW1wbCgpOwpAQCAtMTUyLDYgKzE1Nyw5IEBAIHB1YmxpYzoK
ICAgICBmbG9hdCBkcmF3T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd09wYWNpdHk7IH0K
ICAgICB2b2lkIHNldERyYXdPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9kcmF3T3BhY2l0eSA9
IG9wYWNpdHk7IH0KIAorICAgIGJvb2wgZHJhd09wYWNpdHlJc0FuaW1hdGluZygpIGNvbnN0IHsg
cmV0dXJuIG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZzsgfQorICAgIHZvaWQgc2V0RHJhd09wYWNp
dHlJc0FuaW1hdGluZyhib29sIGRyYXdPcGFjaXR5SXNBbmltYXRpbmcpIHsgbV9kcmF3T3BhY2l0
eUlzQW5pbWF0aW5nID0gZHJhd09wYWNpdHlJc0FuaW1hdGluZzsgfQorCiAgICAgY29uc3QgSW50
UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0OyB9CiAgICAgdm9pZCBz
ZXRDbGlwUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1fY2xpcFJlY3QgPSByZWN0OyB9CiAg
ICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4g
bV90YXJnZXRSZW5kZXJTdXJmYWNlOyB9CkBAIC0zMTEsNiArMzE5LDcgQEAgcHJpdmF0ZToKICAg
ICAvLyB0byBzb3J0IGxheWVycyBmcm9tIGJhY2sgdG8gZnJvbnQuCiAgICAgZmxvYXQgbV9kcmF3
RGVwdGg7CiAgICAgZmxvYXQgbV9kcmF3T3BhY2l0eTsKKyAgICBib29sIG1fZHJhd09wYWNpdHlJ
c0FuaW1hdGluZzsKIAogICAgIC8vIERlYnVnIGJvcmRlcnMuCiAgICAgQ29sb3IgbV9kZWJ1Z0Jv
cmRlckNvbG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMzRiY2UxMTgx
MDBmYTVmYTM4ZDkzNTI4MjBkNTcwOGU5ZmVkZGNhMi4uNjVkODIwYTk3NjExMzcwYjNhNzM1MmJh
OTQ3YzdkN2Q5M2I3Zjg5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC01
NDUsNyArNTQ1LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhj
b25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKICAgICBDQ0xheWVySXRlcmF0
b3JUeXBlIGVuZCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmVuZCgmcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CiAgICAgZm9yIChDQ0xheWVySXRlcmF0b3JUeXBlIGl0ID0gQ0NMYXllckl0ZXJhdG9y
VHlwZTo6YmVnaW4oJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKLSAgICAg
ICAgICAgIEFTU0VSVChpdC0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3T3BhY2l0eSgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVChpdC0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3T3BhY2l0eSgpIHx8IGl0LT5k
cmF3T3BhY2l0eUlzQW5pbWF0aW5nKCkpOwogCiAgICAgICAgICAgICBvY2NsdXNpb25UcmFja2Vy
LmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZSgqaXQsIGl0LT5yZW5kZXJTdXJmYWNlKCkpOwog
ICAgICAgICAgICAgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoKml0LCBwYWlu
dFR5cGUpOwpAQCAtNTY4LDcgKzU2OCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBDQ1RlCiAgICAg
Q0NMYXllckl0ZXJhdG9yVHlwZSBlbmQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjplbmQoJm1fdXBk
YXRlTGlzdCk7CiAgICAgZm9yIChDQ0xheWVySXRlcmF0b3JUeXBlIGl0ID0gQ0NMYXllckl0ZXJh
dG9yVHlwZTo6YmVnaW4oJm1fdXBkYXRlTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICBpZiAoaXQucmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSkgewotICAgICAgICAgICAg
QVNTRVJUKGl0LT5yZW5kZXJTdXJmYWNlKCktPmRyYXdPcGFjaXR5KCkpOworICAgICAgICAgICAg
QVNTRVJUKGl0LT5yZW5kZXJTdXJmYWNlKCktPmRyYXdPcGFjaXR5KCkgfHwgaXQtPmRyYXdPcGFj
aXR5SXNBbmltYXRpbmcoKSk7CiAgICAgICAgICAgICBpZiAoaXQtPm1hc2tMYXllcigpKQogICAg
ICAgICAgICAgICAgIGl0LT5tYXNrTGF5ZXIoKS0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhj
b250ZXh0LCB1cGRhdGVyKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5jcHAKaW5kZXggYzg2ZDc0ZDg2MWRhZjRlNmUzMjVkMWM1M2ZkNDdmNDk4NjRmODZhOS4uZGI2
MzE1YzQ5NTc0ODg5MWFiNjQwYjllNGJmMmU5YTY5NmYzMTg5OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29t
bW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC04Myw4ICs4MywxMiBAQCBzdGF0aWMgYm9v
bCBsYXllclNob3VsZEJlU2tpcHBlZChMYXllclR5cGUqIGxheWVyKQogICAgIC8vIFNvbWUgYWRk
aXRpb25hbCBjb25kaXRpb25zIG5lZWQgdG8gYmUgY29tcHV0ZWQgYXQgYSBsYXRlciBwb2ludCBh
ZnRlciB0aGUgcmVjdXJzaW9uIGlzIGZpbmlzaGVkLgogICAgIC8vICAgLSB0aGUgaW50ZXJzZWN0
aW9uIG9mIHJlbmRlciBzdXJmYWNlIGNvbnRlbnQgYW5kIGxheWVyIGNsaXBSZWN0IGlzIGVtcHR5
CiAgICAgLy8gICAtIHRoZSB2aXNpYmxlTGF5ZXJSZWN0IGlzIGVtcHR5CisgICAgLy8KKyAgICAv
LyBOb3RlLCBpZiB0aGUgbGF5ZXIgc2hvdWxkIG5vdCBoYXZlIGJlZW4gZHJhd24gZHVlIHRvIGJl
aW5nIGZ1bGx5IHRyYW5zcGFyZW50LAorICAgIC8vIHdlIHdvdWxkIGhhdmUgc2tpcHBlZCB0aGUg
ZW50aXJlIHN1YnRyZWUgYW5kIG5ldmVyIG1hZGUgaXQgaW50byB0aGlzIGZ1bmN0aW9uLAorICAg
IC8vIHNvIGl0IGlzIHNhZmUgdG8gb21pdCB0aGlzIGNoZWNrIGhlcmUuCiAKLSAgICBpZiAoIWxh
eWVyLT5kcmF3c0NvbnRlbnQoKSB8fCAhbGF5ZXItPm9wYWNpdHkoKSB8fCBsYXllci0+Ym91bmRz
KCkuaXNFbXB0eSgpKQorICAgIGlmICghbGF5ZXItPmRyYXdzQ29udGVudCgpIHx8IGxheWVyLT5i
b3VuZHMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gVGhlIGxh
eWVyIHNob3VsZCBub3QgYmUgZHJhd24gaWYgKDEpIGl0IGlzIG5vdCBkb3VibGUtc2lkZWQgYW5k
ICgyKSB0aGUgYmFjayBvZiB0aGUgbGF5ZXIgaXMgZmFjaW5nIHRoZSBzY3JlZW4uCkBAIC0xMDQs
NiArMTA4LDIyIEBAIHN0YXRpYyBib29sIGxheWVyU2hvdWxkQmVTa2lwcGVkKExheWVyVHlwZSog
bGF5ZXIpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitzdGF0aWMgYm9vbCBzdWJ0cmVlU2hvdWxk
QmVTa2lwcGVkKENDTGF5ZXJJbXBsKiBsYXllcikKK3sKKyAgICAvLyBUaGUgb3BhY2l0eSBvZiBh
IGxheWVyIGFsd2F5cyBhcHBsaWVzIHRvIGl0cyBjaGlsZHJlbiAoZWl0aGVyIGltcGxpY2l0bHkK
KyAgICAvLyB2aWEgYSByZW5kZXIgc3VyZmFjZSBvciBleHBsaWNpdGx5IGlmIHRoZSBwYXJlbnQg
cHJlc2VydmVzIDNEKSwgc28gdGhlCisgICAgLy8gZW50aXJlIHN1YnRyZWUgY2FuIGJlIHNraXBw
ZWQgaWYgdGhpcyBsYXllciBpcyBmdWxseSB0cmFuc3BhcmVudC4KKyAgICByZXR1cm4gIWxheWVy
LT5vcGFjaXR5KCk7Cit9CisKK3N0YXRpYyBib29sIHN1YnRyZWVTaG91bGRCZVNraXBwZWQoTGF5
ZXJDaHJvbWl1bSogbGF5ZXIpCit7CisgICAgLy8gSWYgdGhlIG9wYWNpdHkgaXMgYmVpbmcgYW5p
bWF0ZWQgdGhlbiB0aGUgb3BhY2l0eSBvbiB0aGUgbWFpbiB0aHJlYWQgaXMgdW5yZWxpYWJsZQor
ICAgIC8vIChzaW5jZSB0aGUgaW1wbCB0aHJlYWQgbWF5IGJlIHVzaW5nIGEgZGlmZmVyZW50IG9w
YWNpdHkpLCBzbyBpdCBzaG91bGQgbm90IGJlIHRydXN0ZWQuCisgICAgLy8gSW4gcGFydGljdWxh
ciwgaXQgc2hvdWxkIG5vdCBjYXVzZSB0aGUgc3VidHJlZSB0byBiZSBza2lwcGVkLgorICAgIHJl
dHVybiAhbGF5ZXItPm9wYWNpdHkoKSAmJiAhbGF5ZXItPm9wYWNpdHlJc0FuaW1hdGluZygpOwor
fQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+CiBzdGF0aWMgYm9vbCBzdWJ0cmVlU2hv
dWxkUmVuZGVyVG9TZXBhcmF0ZVN1cmZhY2UoTGF5ZXJUeXBlKiBsYXllciwgYm9vbCBheGlzQWxp
Z25lZFdpdGhSZXNwZWN0VG9QYXJlbnQpCiB7CkBAIC0yMzAsMTQgKzI1MCwxNSBAQCBzdGF0aWMg
Ym9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5
cGUqIGxheWVyLCBMYXllcgogICAgIC8vICAgICAgICBTIGlzIHRoZSBzY2FsZSBhZGp1c3RtZW50
ICh0byBzY2FsZSB1cCB0byB0aGUgbGF5ZXIgc2l6ZSkKICAgICAvLwogCisgICAgaWYgKHN1YnRy
ZWVTaG91bGRCZVNraXBwZWQobGF5ZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBm
bG9hdCBkcmF3T3BhY2l0eSA9IGxheWVyLT5vcGFjaXR5KCk7Ci0gICAgaWYgKGxheWVyLT5wYXJl
bnQoKSAmJiBsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkpCisgICAgYm9vbCBkcmF3T3Bh
Y2l0eUlzQW5pbWF0aW5nID0gbGF5ZXItPm9wYWNpdHlJc0FuaW1hdGluZygpOworICAgIGlmIChs
YXllci0+cGFyZW50KCkgJiYgbGF5ZXItPnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgpKSB7CiAgICAg
ICAgIGRyYXdPcGFjaXR5ICo9IGxheWVyLT5wYXJlbnQoKS0+ZHJhd09wYWNpdHkoKTsKLSAgICAv
LyBUaGUgb3BhY2l0eSBvZiBhIGxheWVyIGFsd2F5cyBhcHBsaWVzIHRvIGl0cyBjaGlsZHJlbiAo
ZWl0aGVyIGltcGxpY2l0bHkKLSAgICAvLyB2aWEgYSByZW5kZXIgc3VyZmFjZSBvciBleHBsaWNp
dGx5IGlmIHRoZSBwYXJlbnQgcHJlc2VydmVzIDNEKSwgc28gdGhlCi0gICAgLy8gZW50aXJlIHN1
YnRyZWUgY2FuIGJlIHNraXBwZWQgaWYgdGhpcyBsYXllciBpcyBmdWxseSB0cmFuc3BhcmVudC4K
LSAgICBpZiAoIWRyYXdPcGFjaXR5KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRy
YXdPcGFjaXR5SXNBbmltYXRpbmcgfD0gbGF5ZXItPnBhcmVudCgpLT5kcmF3T3BhY2l0eUlzQW5p
bWF0aW5nKCk7CisgICAgfQogCiAgICAgSW50U2l6ZSBib3VuZHMgPSBsYXllci0+Ym91bmRzKCk7
CiAgICAgRmxvYXRQb2ludCBhbmNob3JQb2ludCA9IGxheWVyLT5hbmNob3JQb2ludCgpOwpAQCAt
Mjg2LDcgKzMwNyw5IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAKICAgICAgICAgLy8gVGhl
IG9wYWNpdHkgdmFsdWUgaXMgbW92ZWQgZnJvbSB0aGUgbGF5ZXIgdG8gaXRzIHN1cmZhY2UsIHNv
IHRoYXQgdGhlIGVudGlyZSBzdWJ0cmVlIHByb3Blcmx5IGluaGVyaXRzIG9wYWNpdHkuCiAgICAg
ICAgIHJlbmRlclN1cmZhY2UtPnNldERyYXdPcGFjaXR5KGRyYXdPcGFjaXR5KTsKKyAgICAgICAg
cmVuZGVyU3VyZmFjZS0+c2V0RHJhd09wYWNpdHlJc0FuaW1hdGluZyhkcmF3T3BhY2l0eUlzQW5p
bWF0aW5nKTsKICAgICAgICAgbGF5ZXItPnNldERyYXdPcGFjaXR5KDEpOworICAgICAgICBsYXll
ci0+c2V0RHJhd09wYWNpdHlJc0FuaW1hdGluZyhmYWxzZSk7CiAKICAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbGF5ZXJPcmlnaW5UcmFuc2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9ybTsKICAg
ICAgICAgbGF5ZXJPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlM2QoLTAuNSAqIGJvdW5kcy53aWR0
aCgpLCAtMC41ICogYm91bmRzLmhlaWdodCgpLCAwKTsKQEAgLTMyMCw2ICszNDMsNyBAQCBzdGF0
aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXll
clR5cGUqIGxheWVyLCBMYXllcgogICAgICAgICB0cmFuc2Zvcm1lZExheWVyUmVjdCA9IGVuY2xv
c2luZ0ludFJlY3QobGF5ZXItPmRyYXdUcmFuc2Zvcm0oKS5tYXBSZWN0KGxheWVyUmVjdCkpOwog
CiAgICAgICAgIGxheWVyLT5zZXREcmF3T3BhY2l0eShkcmF3T3BhY2l0eSk7CisgICAgICAgIGxh
eWVyLT5zZXREcmF3T3BhY2l0eUlzQW5pbWF0aW5nKGRyYXdPcGFjaXR5SXNBbmltYXRpbmcpOwog
CiAgICAgICAgIGlmIChsYXllciAhPSByb290TGF5ZXIpIHsKICAgICAgICAgICAgIEFTU0VSVChs
YXllci0+cGFyZW50KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKaW5kZXggM2Jl
MTQ4YjBhN2IzMzAxOTQyM2NiMjkwMzA1MTU0NGNkYTMzM2Q0Yi4uZTFmNTcwNGJkYTNjNmViYWI0
MDYxNWY1YWVhMDVhYjk4ZWY3MmM5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3Bw
CkBAIC01Miw2ICs1Miw3IEBAIENDUmVuZGVyU3VyZmFjZTo6Q0NSZW5kZXJTdXJmYWNlKENDTGF5
ZXJJbXBsKiBvd25pbmdMYXllcikKICAgICAsIG1fc2tpcHNEcmF3KGZhbHNlKQogICAgICwgbV9z
dXJmYWNlUHJvcGVydHlDaGFuZ2VkKGZhbHNlKQogICAgICwgbV9kcmF3T3BhY2l0eSgxKQorICAg
ICwgbV9kcmF3T3BhY2l0eUlzQW5pbWF0aW5nKGZhbHNlKQogICAgICwgbV9uZWFyZXN0QW5jZXN0
b3JUaGF0TW92ZXNQaXhlbHMoMCkKIHsKICAgICBtX2RhbWFnZVRyYWNrZXIgPSBDQ0RhbWFnZVRy
YWNrZXI6OmNyZWF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaAppbmRleCBiNWNkM2E4
MzQ0MGE3YWMyOTVlODAxNWJmMWRlNjdiZTE4NzdiNTg3Li42ODNkMTY2ZDBiNzg0ZDk4MDk4NDFm
ZjI2MWM4ZTlhNGYwNTZiZWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaApAQCAtNzAs
NiArNzAsOSBAQCBwdWJsaWM6CiAgICAgZmxvYXQgZHJhd09wYWNpdHkoKSBjb25zdCB7IHJldHVy
biBtX2RyYXdPcGFjaXR5OyB9CiAgICAgdm9pZCBzZXREcmF3T3BhY2l0eShmbG9hdCBvcGFjaXR5
KSB7IG1fZHJhd09wYWNpdHkgPSBvcGFjaXR5OyB9CiAKKyAgICBib29sIGRyYXdPcGFjaXR5SXNB
bmltYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2RyYXdPcGFjaXR5SXNBbmltYXRpbmc7IH0KKyAg
ICB2b2lkIHNldERyYXdPcGFjaXR5SXNBbmltYXRpbmcoYm9vbCBkcmF3T3BhY2l0eUlzQW5pbWF0
aW5nKSB7IG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZyA9IGRyYXdPcGFjaXR5SXNBbmltYXRpbmc7
IH0KKwogICAgIHZvaWQgc2V0RHJhd1RyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgZHJhd1RyYW5zZm9ybSkgeyBtX2RyYXdUcmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtOyB9CiAg
ICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBtX2RyYXdUcmFuc2Zvcm07IH0KIApAQCAtMTMxLDYgKzEzNCw3IEBAIHByaXZhdGU6CiAK
ICAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG1fY29udGVudHNUZXh0dXJlOwogICAgIGZsb2F0
IG1fZHJhd09wYWNpdHk7CisgICAgYm9vbCBtX2RyYXdPcGFjaXR5SXNBbmltYXRpbmc7CiAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbV9kcmF3VHJhbnNmb3JtOwogICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IG1fcmVwbGljYURyYXdUcmFuc2Zvcm07CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bV9vcmlnaW5UcmFuc2Zvcm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCBmZTc4OGZiYWVlZTc3ZTc5M2EwMDM4ZWM3
YWYyOTI2NTVmZmM3NDZiLi4wYjAzYjdhZjg2MTA0OGQyYmFkMzhhODI5NGIxMWNkMDRhMDk3Y2Iy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0VGVzdC5jcHAKQEAgLTM1OCw3ICszNTgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIENDTGF5
ZXJUcmVlSG9zdFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RUZXN0Kj4o
c2VsZik7CiAgICAgICAgIEFTU0VSVCh0ZXN0KTsKICAgICAgICAgaWYgKHRlc3QtPm1fbGF5ZXJU
cmVlSG9zdCAmJiB0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpKQotICAgICAgICAg
ICAgYWRkT3BhY2l0eVRyYW5zaXRpb25Ub0xheWVyKCp0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnJv
b3RMYXllcigpLCAwLCAwLCAxKTsKKyAgICAgICAgICAgIGFkZE9wYWNpdHlUcmFuc2l0aW9uVG9M
YXllcigqdGVzdC0+bV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKSwgMCwgMCwgMC41KTsKICAg
ICB9CiAKICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaEFkZEFuaW1hdGlvbih2b2lkKiBzZWxmKQpA
QCAtMzY3LDcgKzM2Nyw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgQ0NMYXllclRyZWVIb3N0VGVz
dCogdGVzdCA9IHN0YXRpY19jYXN0PENDTGF5ZXJUcmVlSG9zdFRlc3QqPihzZWxmKTsKICAgICAg
ICAgQVNTRVJUKHRlc3QpOwogICAgICAgICBpZiAodGVzdC0+bV9sYXllclRyZWVIb3N0ICYmIHRl
c3QtPm1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCkpCi0gICAgICAgICAgICBhZGRPcGFjaXR5
VHJhbnNpdGlvblRvTGF5ZXIoKnRlc3QtPm1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCksIDEw
LCAwLCAxKTsKKyAgICAgICAgICAgIGFkZE9wYWNpdHlUcmFuc2l0aW9uVG9MYXllcigqdGVzdC0+
bV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKSwgMTAsIDAsIDAuNSk7CiAgICAgfQogCiAgICAg
c3RhdGljIHZvaWQgZGlzcGF0Y2hTZXROZWVkc0FuaW1hdGVBbmRDb21taXQodm9pZCogc2VsZikK
QEAgLTk4Nyw2ICs5ODcsNDAgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RUaWNrQW5pbWF0
aW9uV2hpbGVCYWNrZ3JvdW5kZWQsIHJ1bk11bHRpVGhyZWFkKQogICAgIHJ1blRlc3RUaHJlYWRl
ZCgpOwogfQogCisvLyBFbnN1cmVzIHRoYXQgd2hlbiBvcGFjaXR5IGlzIGJlaW5nIGFuaW1hdGVk
LCB0aGlzIHZhbHVlIGRvZXMgbm90IGNhdXNlIHRoZSBzdWJ0cmVlIHRvIGJlIHNraXBwZWQuCitj
bGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0RG9Ob3RTa2lwTGF5ZXJzV2l0aEFuaW1hdGVkT3BhY2l0
eSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0VGhyZWFkT25seSB7CitwdWJsaWM6CisgICAg
Q0NMYXllclRyZWVIb3N0VGVzdERvTm90U2tpcExheWVyc1dpdGhBbmltYXRlZE9wYWNpdHkoKQor
ICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPnNldERyYXdPcGFjaXR5KDEpOworICAg
ICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDEwLCAxMCkpOwor
ICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5zZXRPcGFjaXR5KDApOworICAg
ICAgICBwb3N0QWRkQW5pbWF0aW9uVG9NYWluVGhyZWFkKCk7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIGNvbW1pdENvbXBsZXRlT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikKKyAg
ICB7CisgICAgICAgIC8vIElmIHRoZSBzdWJ0cmVlIHdhcyBza2lwcGVkIHdoZW4gcHJlcGFyaW5n
IHRvIGRyYXcsIHRoZSBsYXllcidzIGRyYXcgb3BhY2l0eQorICAgICAgICAvLyB3aWxsIG5vdCBo
YXZlIGJlZW4gdXBkYXRlZC4gSXQgc2hvdWxkIGJlIHNldCB0byAwIGR1ZSB0byB0aGUgYW5pbWF0
aW9uLgorICAgICAgICAvLyBXaXRob3V0IHRoZSBhbmltYXRpb24sIHRoZSBsYXllciB3aWxsIGJl
IHNraXBwZWQgc2luY2UgaXQgaGFzIHplcm8gb3BhY2l0eS4KKyAgICAgICAgRVhQRUNUX0VRKDAs
IG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPmRyYXdPcGFjaXR5KCkpOworICAgICAgICBl
bmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgewor
ICAgIH0KK307CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0RG9Ob3RTa2lwTGF5ZXJzV2l0
aEFuaW1hdGVkT3BhY2l0eSwgcnVuTXVsdGlUaHJlYWQpCit7CisgICAgcnVuVGVzdFRocmVhZGVk
KCk7Cit9CisKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxTaW1wbGUgOiBwdWJsaWMg
Q0NMYXllclRyZWVIb3N0VGVzdFRocmVhZE9ubHkgewogcHVibGljOgogICAgIENDTGF5ZXJUcmVl
SG9zdFRlc3RTY3JvbGxTaW1wbGUoKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>