<?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>101874</bug_id>
          
          <creation_ts>2012-11-11 17:50:33 -0800</creation_ts>
          <short_desc>Eliminate ancestor tree walk computing outlineBoundsForRepaint() when updating layer positions</short_desc>
          <delta_ts>2012-11-19 04:40:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>101779</dependson>
    
    <dependson>102675</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>bdakin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>d-r</cc>
    
    <cc>eric</cc>
    
    <cc>fmalita</cc>
    
    <cc>leviw</cc>
    
    <cc>mitz</cc>
    
    <cc>pdr</cc>
    
    <cc>peter+ews</cc>
    
    <cc>schenney</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>763943</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-11-11 17:50:33 -0800</bug_when>
    <thetext>Eliminate ancestor tree walk computing outlineBoundsForRepaint() when updating layer positions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763961</commentid>
    <comment_count>1</comment_count>
      <attachid>173532</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-11-11 18:29:19 -0800</bug_when>
    <thetext>Created attachment 173532
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763971</commentid>
    <comment_count>2</comment_count>
      <attachid>173532</attachid>
    <who name="">mitz</who>
    <bug_when>2012-11-11 18:56:49 -0800</bug_when>
    <thetext>Comment on attachment 173532
Patch

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

&gt; Source/WebCore/ChangeLog:34
&gt; +        parameter with an optional RenderGeometryMap, and it use to map the compute rect to

Typo: “it use to map the compute”

&gt; Source/WebCore/page/FrameView.cpp:1213
&gt; +        RenderGeometryMap geometryMap(UseTransforms);

Why does this need to be scoped?

&gt; Source/WebCore/rendering/RenderGeometryMap.cpp:58
&gt;  FloatPoint RenderGeometryMap::absolutePoint(const FloatPoint&amp; p) const
&gt;  {
&gt; -    FloatPoint result;
&gt; -    
&gt; -    if (!hasFixedPositionStep() &amp;&amp; !hasTransformStep() &amp;&amp; !hasNonUniformStep())
&gt; -        result = p + m_accumulatedOffset;
&gt; -    else {
&gt; -        TransformState transformState(TransformState::ApplyTransformDirection, p);
&gt; -        mapToAbsolute(transformState);
&gt; -        result = transformState.lastPlanarPoint();
&gt; -    }
&gt; -
&gt; -#if !ASSERT_DISABLED
&gt; -    FloatPoint rendererMappedResult = m_mapping.last().m_renderer-&gt;localToAbsolute(p, UseTransforms | SnapOffsetForTransforms);
&gt; -    ASSERT(rendererMappedResult == result);
&gt; -#endif
&gt; -
&gt; -    return result;
&gt; +    return mapToContainer(p, 0);
&gt;  }
&gt;  
&gt;  FloatRect RenderGeometryMap::absoluteRect(const FloatRect&amp; rect) const
&gt;  {
&gt; -    FloatRect result;
&gt; -    
&gt; -    if (!hasFixedPositionStep() &amp;&amp; !hasTransformStep() &amp;&amp; !hasNonUniformStep()) {
&gt; -        result = rect;
&gt; -        result.move(m_accumulatedOffset);
&gt; -    } else {
&gt; -        TransformState transformState(TransformState::ApplyTransformDirection, rect.center(), rect);
&gt; -        mapToAbsolute(transformState);
&gt; -        result = transformState.lastPlanarQuad().boundingBox();
&gt; -    }
&gt; -
&gt; -#if !ASSERT_DISABLED
&gt; -    FloatRect rendererMappedResult = m_mapping.last().m_renderer-&gt;localToAbsoluteQuad(rect).boundingBox();
&gt; -    // Inspector creates renderers with negative width &lt;https://bugs.webkit.org/show_bug.cgi?id=87194&gt;.
&gt; -    // Taking FloatQuad bounds avoids spurious assertions because of that.
&gt; -    ASSERT(enclosingIntRect(rendererMappedResult) == enclosingIntRect(FloatQuad(result).boundingBox()));
&gt; -#endif
&gt; -
&gt; -    return result;
&gt; +    return mapToContainer(rect, 0).boundingBox();
&gt;  }
&gt;  

Should these functions be moved into the header now so that they can be inlined?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763975</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-11-11 19:04:22 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 173532 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=173532&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:34
&gt; &gt; +        parameter with an optional RenderGeometryMap, and it use to map the compute rect to
&gt; 
&gt; Typo: “it use to map the compute”

Thanks

&gt; 
&gt; &gt; Source/WebCore/page/FrameView.cpp:1213
&gt; &gt; +        RenderGeometryMap geometryMap(UseTransforms);
&gt; 
&gt; Why does this need to be scoped?

It doesn&apos;t. It just seemed neater, since it&apos;s only used for this one call. Another way to do this would be to make a wrapper in RenderLayer for those few lines.

&gt; &gt; Source/WebCore/rendering/RenderGeometryMap.cpp:58
&gt; &gt;  FloatPoint RenderGeometryMap::absolutePoint(const FloatPoint&amp; p) const
...
&gt; &gt;  FloatRect RenderGeometryMap::absoluteRect(const FloatRect&amp; rect) const
...
&gt; Should these functions be moved into the header now so that they can be inlined?

Sure!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763981</commentid>
    <comment_count>4</comment_count>
      <attachid>173532</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-11 19:25:30 -0800</bug_when>
    <thetext>Comment on attachment 173532
Patch

Attachment 173532 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14794781

New failing tests:
fast/spatial-navigation/snav-imagemap-overlapped-areas.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763990</commentid>
    <comment_count>5</comment_count>
      <attachid>173532</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-11-11 20:00:38 -0800</bug_when>
    <thetext>Comment on attachment 173532
Patch

Attachment 173532 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/14785966</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763999</commentid>
    <comment_count>6</comment_count>
      <attachid>173532</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-11 20:29:25 -0800</bug_when>
    <thetext>Comment on attachment 173532
Patch

Attachment 173532 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14803513</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764020</commentid>
    <comment_count>7</comment_count>
      <attachid>173549</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-11-11 21:26:51 -0800</bug_when>
    <thetext>Created attachment 173549
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764827</commentid>
    <comment_count>8</comment_count>
      <attachid>173726</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-11-12 14:23:25 -0800</bug_when>
    <thetext>Created attachment 173726
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765162</commentid>
    <comment_count>9</comment_count>
      <attachid>173726</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-12 20:38:19 -0800</bug_when>
    <thetext>Comment on attachment 173726
Patch

Attachment 173726 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14818408

New failing tests:
http/tests/inspector/stacktraces/csp-inline-warning-contains-stacktrace.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766027</commentid>
    <comment_count>10</comment_count>
      <attachid>173726</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2012-11-13 14:01:14 -0800</bug_when>
    <thetext>Comment on attachment 173726
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766139</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-11-13 15:55:48 -0800</bug_when>
    <thetext>I can&apos;t land this because it&apos;s causing some assertions in RenderGeometryMap because of pixel snapping differences.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767502</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2012-11-14 17:14:35 -0800</bug_when>
    <thetext>&lt;rdar://problem/12705362&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769815</commentid>
    <comment_count>13</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-11-16 18:05:18 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/135025</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173532</attachid>
            <date>2012-11-11 18:29:19 -0800</date>
            <delta_ts>2012-11-11 21:26:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101874-20121111182722.patch</filename>
            <type>text/plain</type>
            <size>37538</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0MTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2IzZDBmMGRiOWNmYTE5
N2M1NzU4MWRlZjQ0ZDI5ODRlMmRjOWFkOC4uOTcxYWY2YTFlZTE2MWNkY2YwODRiMDFmYmRlOWI5
ZWE3ZGJmMDU4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDEyLTExLTExICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIEVsaW1pbmF0ZSBh
bmNlc3RvciB0cmVlIHdhbGsgY29tcHV0aW5nIG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KCkgd2hl
biB1cGRhdGluZyBsYXllciBwb3NpdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMTg3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucygpIGFu
ZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCkgc3BlbmQgYQorICAgICAgICBsb3Qg
b2YgdGltZSBpbiBjb21wdXRlUmVwYWludFJlY3RzKCksIHdoaWNoIGRvZXMgdHdvIGFuY2VzdG9y
IHRyZWUgd2Fsa3MsIG9uY2UKKyAgICAgICAgZm9yIGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBh
aW50KCksIGFuZCBvbmUgZm9yIG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KCkuCisKKyAgICAgICAg
RWxpbWluYXRlIHRoZSBhbmNlc3RvciB0cmVlIHdhbGsgaW4gb3V0bGluZUJvdW5kc0ZvclJlcGFp
bnQoKSBieSBtYWludGFpbmluZworICAgICAgICBhIFJlbmRlckdlb21ldHJ5TWFwIGFzIHdlIHRy
YXZlcnNlIHRoZSBsYXllciB0cmVlLCBhbmQgdGhlbiB1c2luZyBpdCB0byBtYXAKKyAgICAgICAg
dGhlIG91dGxpbmUgYm91bmRzIHRvIHRoZSByZXBhaW50IGNvbnRhaW5lci4gUmVwbGFjZSB0aGUg
aG9rZXkgY2FjaGVkIG9mZnNldEZyb21Sb290CisgICAgICAgIG5vdyB0aGF0IHRoZSBSZW5kZXJH
ZW9tZXRyeU1hcCBjYW4gZG8gYSBiZXR0ZXIgam9iLgorICAgICAgICAKKyAgICAgICAgVGhlIGNs
aXBwZWQgb3ZlcmZsb3cgcmVjdCBjYW5ub3QgYmUgbWFwcGVkIHNpbXBseSwgc28gY2Fubm90IHll
dCBtYWtlIHVzZSBvZgorICAgICAgICB0aGUgZ2VvbWV0cnkgbWFwLgorICAgICAgICAKKyAgICAg
ICAgTW9kaWZ5IHRoZSBSZW5kZXJHZW9tZXRyeU1hcCB0byBzdXBwb3J0IG1hcHBpbmcgdG8gc29t
ZSByZXBhaW50Q29udGFpbmVyIGFuY2VzdG9yLgorICAgICAgICAKKyAgICAgICAgUGFzcyB0aGUg
UmVuZGVyR2VvbWV0cnlNYXAgYXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRvIG91dGxpbmVCb3Vu
ZHNGb3JSZXBhaW50LgorICAgICAgICAKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmxheW91dCk6IE1ha2UgYSBSZW5kZXJHZW9tZXRy
eU1hcCBhbmQgcGFzcyBpdCBkb3duCisgICAgICAgIHRvIHVwZGF0ZUxheWVyUG9zaXRpb25zKCku
IEZvciBwYXJ0aWFsIGxheW91dHMsIHdlIGhhdmUgdG8gcHVzaCBsYXllcnMKKyAgICAgICAgYmV0
d2VlbiB0aGUgcm9vdCBhbmQgdGhlIGVuY2xvc2luZyBsYXllciBvZiB0aGUgbGF5b3V0IHN1YnRy
ZWUuCisgICAgICAgIFRoZSBnZW9tZXRyeSBtYXAgdXNlZCBmb3IgcmVwYWludGluZyBkb2VzIG5v
dCB1c2UgU25hcE9mZnNldEZvclRyYW5zZm9ybXMsCisgICAgICAgIHNvIGluaXRpYWxpemUgaXQg
ZXhwbGljaXRseSB3aXRoIGp1c3QgdGhlIFVzZVRyYW5zZm9ybXMgZmxhZy4KKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6cmVwYWludEZpeGVkRWxlbWVudHNBZnRlclNjcm9sbGluZyk6IE1h
a2UgYSBSZW5kZXJHZW9tZXRyeU1hcAorICAgICAgICB0byBwYXNzIGFsb25nIHRvIHVwZGF0ZUxh
eWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoKS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b3V0bGluZUJvdW5kc0ZvclJlcGFp
bnQpOiBSZXBsYWNlIHRoZSBvcHRpb25hbCBjYWNoZWRPZmZzZXRUb1JlcGFpbnRDb250YWluZXIK
KyAgICAgICAgcGFyYW1ldGVyIHdpdGggYW4gb3B0aW9uYWwgUmVuZGVyR2VvbWV0cnlNYXAsIGFu
ZCBpdCB1c2UgdG8gbWFwIHRoZSBjb21wdXRlIHJlY3QgdG8KKyAgICAgICAgcmVwYWludENvbnRh
aW5lciBjb29yZGluYXRlcy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckdlb21ldHJ5TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckdlb21ldHJ5TWFwOjpSZW5kZXJHZW9tZXRyeU1hcCk6IFRoaXMgbm93IGhhcyB0byBz
dG9yZSB0aGUgbWFwcGluZworICAgICAgICBmbGFncyB0byB1c2UsIHNvIHRoYXQgaXRzIGJlaGF2
aW9yIGNhbiBtYXRjaCB0aGF0IG9mIG1hcExvY2FsVG9Db250YWluZXIoKS4gVGhlCisgICAgICAg
IHBlcnRpbmVudCBmbGFnIGlzIHRoZSBjb25mdXNpbmdseSBuYW1lZCBTbmFwT2Zmc2V0Rm9yVHJh
bnNmb3Jtcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdlb21ldHJ5TWFwOjphYnNvbHV0ZVBv
aW50KTogQ2FsbCB0aGUgbmV3IG1hcFRvQ29udGFpbmVyKCkgd2l0aAorICAgICAgICBhIG51bGwg
Y29udGFpbmVyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR2VvbWV0cnlNYXA6OmFic29sdXRl
UmVjdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR2VvbWV0cnlNYXA6Om1hcFRv
Q29udGFpbmVyKTogTWFwIHRvIHRoZSBzdXBwbGllZCBjb250YWluZXIsCisgICAgICAgIGFzc2Vy
dGluZyB0aGF0IHdlIGZvdW5kIGl0LiBBZGQgcG9pbnQtIGFuZCByZWN0LWJhc2VkIG1hcHBpbmcg
bWV0aG9kcworICAgICAgICBha2luIHRvIHRoZSBvbGQgYWJzb2x1dGVSZWN0L2Fic29sdXRlUG9p
bnQuCisgICAgICAgIChXZWJDb3JlOjpjYW5NYXBWaWFMYXllcik6IFdlIG5lZWQgdG8gdGVzdCBm
b3IgaXNSZW5kZXJGbG93VGhyZWFkKCkgaGVyZSB0b28uCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJHZW9tZXRyeU1hcDo6cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcik6IFdoZW4gbWFwcGluZyB2aWEK
KyAgICAgICAgbGF5ZXJzLCBlbnN1cmUgdGhhdCB0aGUgUmVuZGVyVmlldyBpcyBwdXNoZWQgYXMg
dGhlIGZpcnN0IHN0ZXAuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdlb21ldHJ5TWFwLmg6
CisgICAgICAgIChSZW5kZXJHZW9tZXRyeU1hcCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBv
c2l0aW9ucyk6IE5vdyB0YWtlcyBhbiBvcHRpb25hbCBSZW5kZXJHZW9tZXRyeU1hcC4KKyAgICAg
ICAgUmVtb3ZlIHRoZSBvbGQgb2Zmc2V0RnJvbVJvb3QgY29kZS4gUHVzaCBhbmQgcG9wIGxheWVy
cyB0by9mcm9tIHRoZSBnZW9tZXRyeSBtYXAuIFVzZQorICAgICAgICB0aGUgZ2VvbWV0cnkgbWFw
IHRvIGdldCB0aGUgb2Zmc2V0RnJvbVJvb3QgYXMgbmVlZGVkIGJ5IG92ZXJmbG93IGNvbnRyb2xz
LiBQYXNzCisgICAgICAgIGl0IHRvIGNvbXB1dGVSZXBhaW50UmVjdHMoKS4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpjb21wdXRlUmVwYWludFJlY3RzKTogUGFzcyB0aGUgZ2VvbWV0
cnkgbWFwIHRvIG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KCkuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCk6IFB1c2ggYW5kIHBv
cCB0by9mcm9tIHRoZQorICAgICAgICBnZW9tZXRyeSBtYXAsIGFuZCBwYXNzIGl0IHRvIGNvbXB1
dGVSZXBhaW50UmVjdHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZW1vdmVP
bmx5VGhpc0xheWVyKTogUmVtb3ZlIHRoZSBvZmZzZXRGcm9tUm9vdEJlZm9yZU1vdmUKKyAgICAg
ICAgY29tcHV0YXRpb247IHRoaXMgY291bGQgdXNlIGEgZ2VvbWV0cnkgbWFwIGluIGZ1dHVyZSBp
ZiBpdCBpcyBzaG93biB0byBiZSBhIGJvdHRsZW5lY2suCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FuVXNlQ29udmVy
dFRvTGF5ZXJDb29yZHMpOiBJdCB3YXMgdGhvdWdodCB0aGF0IHRoZSBpc0NvbXBvc2l0ZWQoKQor
ICAgICAgICB3YXMgdGhlcmUgYmVjYXVzZSB0aGUgb2xkZXIgY2FjaGVkIG9mZnNldEZyb21Sb290
IGxvZ2ljIHdhcyBzZW5zaXRpdmUgdG8gY29tcG9zaXRpbmcsCisgICAgICAgIGJ1dCBjb252ZXJ0
VG9MYXllckNvb3JkcygpIGlzIG5vdCBhZmZlY3RlZCBieSBjb21wb3NpdGluZyBzbyB0aGlzIGNo
ZWNrIGlzIG5vdCBuZWVkZWQsCisgICAgICAgIGFuZCBhY3R1YWxseSBoYXJtZnVsLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpPdmVybGFwTWFwOjpPdmVybGFwTWFwKTogVGhlIGdl
b21ldHJ5IG1hcAorICAgICAgICB1c2VkIGZvciBvdmVybGFwIHRlc3Rpbmcgc2hvdWxkIG5vdCB1
c2UgU25hcE9mZnNldEZvclRyYW5zZm9ybXMsIHNvIGluaXRpYWxpemUKKyAgICAgICAgaXQgZXhw
bGljaXRseSB3aXRoIGp1c3QgdGhlIFVzZVRyYW5zZm9ybXMgZmxhZy4KKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om91
dGxpbmVCb3VuZHNGb3JSZXBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0
OjpvdXRsaW5lQm91bmRzRm9yUmVwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdNb2RlbE9iamVjdC5oOgorICAgICAgICAoUmVuZGVyU1ZHTW9kZWxPYmplY3QpOgorCiAy
MDEyLTExLTEwICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIFNhdmUgb25lIGNhbGwgdG8gY29udGFpbmVyRm9yUmVwYWludCgpIHdoZW4gdXBkYXRpbmcg
bGF5ZXIgcG9zaXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggNzY4ZDVkMjU2
OGU1M2Q4MTVjYjRiOGNkNTU3NjVjMDY1N2ZhMWVjYy4uYTdjZjUzMmQzZWZiYTgyMTBhOTMyNzIy
MjEzNjZkZDkxOTBkYzgxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNTUsNiAr
NTUsNyBAQAogI2luY2x1ZGUgIlJlbmRlckFyZW5hLmgiCiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRk
ZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJGdWxsU2NyZWVuLmgiCisjaW5jbHVkZSAiUmVu
ZGVyR2VvbWV0cnlNYXAuaCIKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclBhcnQuaCIKQEAgLTEyMDUsMTMgKzEyMDYs
MTYgQEAgdm9pZCBGcmFtZVZpZXc6OmxheW91dChib29sIGFsbG93U3VidHJlZSkKIAogICAgIC8v
IE5vdyB1cGRhdGUgdGhlIHBvc2l0aW9ucyBvZiBhbGwgbGF5ZXJzLgogICAgIGJlZ2luRGVmZXJy
ZWRSZXBhaW50cygpOwotICAgIGJvb2wgaGFzTGF5ZXJPZmZzZXQ7Ci0gICAgTGF5b3V0UG9pbnQg
b2Zmc2V0RnJvbVJvb3QgPSBsYXllci0+Y29tcHV0ZU9mZnNldEZyb21Sb290KGhhc0xheWVyT2Zm
c2V0KTsKICAgICBpZiAobV9kb0Z1bGxSZXBhaW50KQogICAgICAgICByb290LT52aWV3KCktPnJl
cGFpbnQoKTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IHJpZ2h0LCBzaW5jZSB0aGUgUmVu
ZGVyVmlldyBkb2Vzbid0IGZ1bGx5IGVuY29tcGFzcyB0aGUgdmlzaWJsZUNvbnRlbnRSZWN0KCku
IEl0IGp1c3QgaGFwcGVucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8g
d29yayBvdXQgbW9zdCBvZiB0aGUgdGltZSwgc2luY2UgZmlyc3QgbGF5b3V0cyBhbmQgcHJpbnRp
bmcgZG9uJ3QgaGF2ZSB5b3Ugc2Nyb2xsZWQgYW55d2hlcmUuCi0KLSAgICBsYXllci0+dXBkYXRl
TGF5ZXJQb3NpdGlvbnMoaGFzTGF5ZXJPZmZzZXQgPyAmb2Zmc2V0RnJvbVJvb3QgOiAwLCB1cGRh
dGVMYXllclBvc2l0aW9uRmxhZ3MobGF5ZXIsIHN1YnRyZWUsIG1fZG9GdWxsUmVwYWludCkpOwor
ICAgIHsKKyAgICAgICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jt
cyk7CisgICAgICAgIFJlbmRlckxheWVyKiByb290TGF5ZXIgPSByb290UmVuZGVyZXIodGhpcykt
PmxheWVyKCk7CisgICAgICAgIGlmIChsYXllciAhPSByb290TGF5ZXIpCisgICAgICAgICAgICBn
ZW9tZXRyeU1hcC5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKGxheWVyLT5wYXJlbnQoKSwgMCk7Cisg
ICAgICAgIGxheWVyLT51cGRhdGVMYXllclBvc2l0aW9ucygmZ2VvbWV0cnlNYXAsIHVwZGF0ZUxh
eWVyUG9zaXRpb25GbGFncyhsYXllciwgc3VidHJlZSwgbV9kb0Z1bGxSZXBhaW50KSk7CisgICAg
fQogICAgIGVuZERlZmVycmVkUmVwYWludHMoKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKQEAgLTE4MTUsNyArMTgxOSw5IEBAIHZvaWQgRnJhbWVWaWV3OjpyZXBhaW50Rml4
ZWRFbGVtZW50c0FmdGVyU2Nyb2xsaW5nKCkKICAgICBpZiAoIW1fbmVzdGVkTGF5b3V0Q291bnQg
JiYgaGFzVmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoKSkgewogICAgICAgICBpZiAoUmVuZGVy
Vmlldyogcm9vdCA9IHJvb3RSZW5kZXJlcih0aGlzKSkgewogICAgICAgICAgICAgcm9vdC0+dXBk
YXRlV2lkZ2V0UG9zaXRpb25zKCk7Ci0gICAgICAgICAgICByb290LT5sYXllcigpLT51cGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCk7CisKKyAgICAgICAgICAgIFJlbmRlckdlb21ldHJ5
TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOworICAgICAgICAgICAgcm9vdC0+bGF5ZXIo
KS0+dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXApOwogICAgICAg
ICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCBm
MmZiMzc4ZjhjOTVhYjk1MTliN2IxNzU1Mjc4NzM5YTRiN2EzMjNkLi41NjJhOWFhMDMxZDc5YjNj
Y2ZhYTQ2MzQ1ZDY5MDA2ZWEzMDc0MjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcApAQCAtNDQ4LDE0ICs0NDgsMTQgQEAgRmxvYXRRdWFkIFJlbmRlckJveDo6YWJzb2x1
dGVDb250ZW50UXVhZCgpIGNvbnN0CiAgICAgcmV0dXJuIGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxv
YXRSZWN0KHJlY3QpKTsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCb3g6Om91dGxpbmVCb3VuZHNG
b3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIs
IExheW91dFBvaW50KiBjYWNoZWRPZmZzZXRUb1JlcGFpbnRDb250YWluZXIpIGNvbnN0CitMYXlv
dXRSZWN0IFJlbmRlckJveDo6b3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgY29uc3QgUmVuZGVyR2VvbWV0cnlNYXAq
IGdlb21ldHJ5TWFwKSBjb25zdAogewogICAgIExheW91dFJlY3QgYm94ID0gYm9yZGVyQm91bmRp
bmdCb3goKTsKICAgICBhZGp1c3RSZWN0Rm9yT3V0bGluZUFuZFNoYWRvdyhib3gpOwogCi0gICAg
RmxvYXRRdWFkIGNvbnRhaW5lclJlbGF0aXZlUXVhZCA9IEZsb2F0UmVjdChib3gpOwotICAgIGlm
IChjYWNoZWRPZmZzZXRUb1JlcGFpbnRDb250YWluZXIpCi0gICAgICAgIGNvbnRhaW5lclJlbGF0
aXZlUXVhZC5tb3ZlKGNhY2hlZE9mZnNldFRvUmVwYWludENvbnRhaW5lci0+eCgpLCBjYWNoZWRP
ZmZzZXRUb1JlcGFpbnRDb250YWluZXItPnkoKSk7CisgICAgRmxvYXRRdWFkIGNvbnRhaW5lclJl
bGF0aXZlUXVhZDsKKyAgICBpZiAoZ2VvbWV0cnlNYXApCisgICAgICAgIGNvbnRhaW5lclJlbGF0
aXZlUXVhZCA9IGdlb21ldHJ5TWFwLT5tYXBUb0NvbnRhaW5lcihib3gsIHJlcGFpbnRDb250YWlu
ZXIpOwogICAgIGVsc2UKICAgICAgICAgY29udGFpbmVyUmVsYXRpdmVRdWFkID0gbG9jYWxUb0Nv
bnRhaW5lclF1YWQoY29udGFpbmVyUmVsYXRpdmVRdWFkLCByZXBhaW50Q29udGFpbmVyKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCmluZGV4IGU1ZDFjODMwNmI1Y2I4M2MzZWQy
NGM3MDYzMWM4MjhlZGIyYzI1NGEuLjQ5MjdhMTExNGIxNjcyYjk1NDU0YzJmZmFkM2YxZTk2YjFj
NjU2ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTE1NCw3ICsxNTQs
NyBAQCBwdWJsaWM6CiAgICAgTGF5b3V0UmVjdCBjb21wdXRlZENTU0NvbnRlbnRCb3hSZWN0KCkg
Y29uc3QgeyByZXR1cm4gTGF5b3V0UmVjdChib3JkZXJMZWZ0KCkgKyBjb21wdXRlZENTU1BhZGRp
bmdMZWZ0KCksIGJvcmRlclRvcCgpICsgY29tcHV0ZWRDU1NQYWRkaW5nVG9wKCksIGNsaWVudFdp
ZHRoKCkgLSBjb21wdXRlZENTU1BhZGRpbmdMZWZ0KCkgLSBjb21wdXRlZENTU1BhZGRpbmdSaWdo
dCgpLCBjbGllbnRIZWlnaHQoKSAtIGNvbXB1dGVkQ1NTUGFkZGluZ1RvcCgpIC0gY29tcHV0ZWRD
U1NQYWRkaW5nQm90dG9tKCkpOyB9CiAKICAgICAvLyBCb3VuZHMgb2YgdGhlIG91dGxpbmUgYm94
IGluIGFic29sdXRlIGNvb3Jkcy4gUmVzcGVjdHMgdHJhbnNmb3JtcwotICAgIHZpcnR1YWwgTGF5
b3V0UmVjdCBvdXRsaW5lQm91bmRzRm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KiAvKnJlcGFpbnRDb250YWluZXIqLywgTGF5b3V0UG9pbnQqIGNhY2hlZE9mZnNldFRvUmVw
YWludENvbnRhaW5lcikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IG91
dGxpbmVCb3VuZHNGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIC8qcmVw
YWludENvbnRhaW5lciovLCBjb25zdCBSZW5kZXJHZW9tZXRyeU1hcCopIGNvbnN0IE9WRVJSSURF
OwogICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBj
b25zdCBMYXlvdXRQb2ludCYpOwogCiAgICAgLy8gVXNlIHRoaXMgd2l0aCBjYXV0aW9uISBObyB0
eXBlIGNoZWNraW5nIGlzIGRvbmUhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyR2VvbWV0cnlNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckdlb21ldHJ5TWFwLmNwcAppbmRleCA1YTZhNjlkOWRiZTgxYmNhNDI3NmVhMGY3ZWMwNDc0M2Vm
NGMxMzhkLi5kNTFhYTc4MWQ3NTExMWUwMDZiNDk0MDFjNTQ3YjUxZmYxN2U2MDE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5jcHAKQEAgLTMzLDEx
ICszMywxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlbmRlckdlb21ldHJ5TWFwOjpS
ZW5kZXJHZW9tZXRyeU1hcCgpCitSZW5kZXJHZW9tZXRyeU1hcDo6UmVuZGVyR2VvbWV0cnlNYXAo
TWFwQ29vcmRpbmF0ZXNGbGFncyBmbGFncykKICAgICA6IG1faW5zZXJ0aW9uUG9zaXRpb24obm90
Rm91bmQpCiAgICAgLCBtX25vblVuaWZvcm1TdGVwc0NvdW50KDApCiAgICAgLCBtX3RyYW5zZm9y
bWVkU3RlcHNDb3VudCgwKQogICAgICwgbV9maXhlZFN0ZXBzQ291bnQoMCkKKyAgICAsIG1fbWFw
Q29vcmRpbmF0ZXNGbGFncyhmbGFncykKIHsKIH0KIApAQCAtNDcsNjAgKzQ4LDM0IEBAIFJlbmRl
ckdlb21ldHJ5TWFwOjp+UmVuZGVyR2VvbWV0cnlNYXAoKQogCiBGbG9hdFBvaW50IFJlbmRlckdl
b21ldHJ5TWFwOjphYnNvbHV0ZVBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApIGNvbnN0CiB7Ci0g
ICAgRmxvYXRQb2ludCByZXN1bHQ7Ci0gICAgCi0gICAgaWYgKCFoYXNGaXhlZFBvc2l0aW9uU3Rl
cCgpICYmICFoYXNUcmFuc2Zvcm1TdGVwKCkgJiYgIWhhc05vblVuaWZvcm1TdGVwKCkpCi0gICAg
ICAgIHJlc3VsdCA9IHAgKyBtX2FjY3VtdWxhdGVkT2Zmc2V0OwotICAgIGVsc2UgewotICAgICAg
ICBUcmFuc2Zvcm1TdGF0ZSB0cmFuc2Zvcm1TdGF0ZShUcmFuc2Zvcm1TdGF0ZTo6QXBwbHlUcmFu
c2Zvcm1EaXJlY3Rpb24sIHApOwotICAgICAgICBtYXBUb0Fic29sdXRlKHRyYW5zZm9ybVN0YXRl
KTsKLSAgICAgICAgcmVzdWx0ID0gdHJhbnNmb3JtU3RhdGUubGFzdFBsYW5hclBvaW50KCk7Ci0g
ICAgfQotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEZsb2F0UG9pbnQgcmVuZGVyZXJNYXBw
ZWRSZXN1bHQgPSBtX21hcHBpbmcubGFzdCgpLm1fcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZShw
LCBVc2VUcmFuc2Zvcm1zIHwgU25hcE9mZnNldEZvclRyYW5zZm9ybXMpOwotICAgIEFTU0VSVChy
ZW5kZXJlck1hcHBlZFJlc3VsdCA9PSByZXN1bHQpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gcmVz
dWx0OworICAgIHJldHVybiBtYXBUb0NvbnRhaW5lcihwLCAwKTsKIH0KIAogRmxvYXRSZWN0IFJl
bmRlckdlb21ldHJ5TWFwOjphYnNvbHV0ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25z
dAogewotICAgIEZsb2F0UmVjdCByZXN1bHQ7Ci0gICAgCi0gICAgaWYgKCFoYXNGaXhlZFBvc2l0
aW9uU3RlcCgpICYmICFoYXNUcmFuc2Zvcm1TdGVwKCkgJiYgIWhhc05vblVuaWZvcm1TdGVwKCkp
IHsKLSAgICAgICAgcmVzdWx0ID0gcmVjdDsKLSAgICAgICAgcmVzdWx0Lm1vdmUobV9hY2N1bXVs
YXRlZE9mZnNldCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVHJhbnNmb3JtU3RhdGUgdHJhbnNm
b3JtU3RhdGUoVHJhbnNmb3JtU3RhdGU6OkFwcGx5VHJhbnNmb3JtRGlyZWN0aW9uLCByZWN0LmNl
bnRlcigpLCByZWN0KTsKLSAgICAgICAgbWFwVG9BYnNvbHV0ZSh0cmFuc2Zvcm1TdGF0ZSk7Ci0g
ICAgICAgIHJlc3VsdCA9IHRyYW5zZm9ybVN0YXRlLmxhc3RQbGFuYXJRdWFkKCkuYm91bmRpbmdC
b3goKTsKLSAgICB9Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgRmxvYXRSZWN0IHJlbmRl
cmVyTWFwcGVkUmVzdWx0ID0gbV9tYXBwaW5nLmxhc3QoKS5tX3JlbmRlcmVyLT5sb2NhbFRvQWJz
b2x1dGVRdWFkKHJlY3QpLmJvdW5kaW5nQm94KCk7Ci0gICAgLy8gSW5zcGVjdG9yIGNyZWF0ZXMg
cmVuZGVyZXJzIHdpdGggbmVnYXRpdmUgd2lkdGggPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04NzE5ND4uCi0gICAgLy8gVGFraW5nIEZsb2F0UXVhZCBib3VuZHMgYXZv
aWRzIHNwdXJpb3VzIGFzc2VydGlvbnMgYmVjYXVzZSBvZiB0aGF0LgotICAgIEFTU0VSVChlbmNs
b3NpbmdJbnRSZWN0KHJlbmRlcmVyTWFwcGVkUmVzdWx0KSA9PSBlbmNsb3NpbmdJbnRSZWN0KEZs
b2F0UXVhZChyZXN1bHQpLmJvdW5kaW5nQm94KCkpKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHJl
c3VsdDsKKyAgICByZXR1cm4gbWFwVG9Db250YWluZXIocmVjdCwgMCkuYm91bmRpbmdCb3goKTsK
IH0KIAotdm9pZCBSZW5kZXJHZW9tZXRyeU1hcDo6bWFwVG9BYnNvbHV0ZShUcmFuc2Zvcm1TdGF0
ZSYgdHJhbnNmb3JtU3RhdGUpIGNvbnN0Cit2b2lkIFJlbmRlckdlb21ldHJ5TWFwOjptYXBUb0Nv
bnRhaW5lcihUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUsIGNvbnN0IFJlbmRlckxheWVy
TW9kZWxPYmplY3QqIGNvbnRhaW5lcikgY29uc3QKIHsKICAgICAvLyBJZiB0aGUgbWFwcGluZyBp
bmNsdWRlcyBzb21ldGhpbmcgbGlrZSBjb2x1bW5zLCB3ZSBoYXZlIHRvIGdvIHZpYSByZW5kZXJl
cnMuCiAgICAgaWYgKGhhc05vblVuaWZvcm1TdGVwKCkpIHsKLSAgICAgICAgbV9tYXBwaW5nLmxh
c3QoKS5tX3JlbmRlcmVyLT5tYXBMb2NhbFRvQ29udGFpbmVyKDAsIHRyYW5zZm9ybVN0YXRlLCBV
c2VUcmFuc2Zvcm1zIHwgQXBwbHlDb250YWluZXJGbGlwIHwgU25hcE9mZnNldEZvclRyYW5zZm9y
bXMpOworICAgICAgICBtX21hcHBpbmcubGFzdCgpLm1fcmVuZGVyZXItPm1hcExvY2FsVG9Db250
YWluZXIoY29udGFpbmVyLCB0cmFuc2Zvcm1TdGF0ZSwgQXBwbHlDb250YWluZXJGbGlwIHwgbV9t
YXBDb29yZGluYXRlc0ZsYWdzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBi
b29sIGluRml4ZWQgPSBmYWxzZTsKLQorICAgIGJvb2wgZm91bmRDb250YWluZXIgPSAhY29udGFp
bmVyIHx8IChtX21hcHBpbmcuc2l6ZSgpICYmIG1fbWFwcGluZ1swXS5tX3JlbmRlcmVyID09IGNv
bnRhaW5lcik7CisgICAgCiAgICAgZm9yIChpbnQgaSA9IG1fbWFwcGluZy5zaXplKCkgLSAxOyBp
ID49IDA7IC0taSkgewogICAgICAgICBjb25zdCBSZW5kZXJHZW9tZXRyeU1hcFN0ZXAmIGN1cnJl
bnRTdGVwID0gbV9tYXBwaW5nW2ldOwogCisgICAgICAgIC8vIElmIGNvbnRhaW5lciBpcyB0aGUg
UmVuZGVyVmlldyAoc3RlcCAwKSB3ZSB3YW50IHRvIGFwcGx5IGl0cyBzY3JvbGwgb2Zmc2V0Lgor
ICAgICAgICBpZiAoaSA+IDAgJiYgY3VycmVudFN0ZXAubV9yZW5kZXJlciA9PSBjb250YWluZXIp
IHsKKyAgICAgICAgICAgIGZvdW5kQ29udGFpbmVyID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKICAgICAgICAgLy8gSWYgdGhpcyBib3ggaGFzIGEgdHJhbnNmb3JtLCBp
dCBhY3RzIGFzIGEgZml4ZWQgcG9zaXRpb24gY29udGFpbmVyCiAgICAgICAgIC8vIGZvciBmaXhl
ZCBkZXNjZW5kYW50cywgd2hpY2ggcHJldmVudHMgdGhlIHByb3BhZ2F0aW9uIG9mICdmaXhlZCcK
ICAgICAgICAgLy8gdW5sZXNzIHRoZSBsYXllciBpdHNlbGYgaXMgYWxzbyBmaXhlZCBwb3NpdGlv
bi4KQEAgLTExMCw3ICs4NSw4IEBAIHZvaWQgUmVuZGVyR2VvbWV0cnlNYXA6Om1hcFRvQWJzb2x1
dGUoVHJhbnNmb3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlKSBjb25zdAogICAgICAgICAgICAgaW5G
aXhlZCA9IHRydWU7CiAKICAgICAgICAgaWYgKCFpKSB7Ci0gICAgICAgICAgICBpZiAoY3VycmVu
dFN0ZXAubV90cmFuc2Zvcm0pCisgICAgICAgICAgICAvLyBBIG51bGwgY29udGFpbmVyIGluZGlj
YXRlcyBtYXBwaW5nIHRocm91Z2ggdGhlIFJlbmRlclZpZXcsIHNvIGluY2x1ZGluZyBpdHMgdHJh
bnNmb3JtICh0aGUgcGFnZSBzY2FsZSkuCisgICAgICAgICAgICBpZiAoIWNvbnRhaW5lciAmJiBj
dXJyZW50U3RlcC5tX3RyYW5zZm9ybSkKICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5h
cHBseVRyYW5zZm9ybSgqY3VycmVudFN0ZXAubV90cmFuc2Zvcm0uZ2V0KCkpOwogCiAgICAgICAg
ICAgICAvLyBUaGUgcm9vdCBnZXRzIHNwZWNpYWwgdHJlYXRtZW50IGZvciBmaXhlZCBwb3NpdGlv
bgpAQCAtMTI1LDkgKzEwMSw1MyBAQCB2b2lkIFJlbmRlckdlb21ldHJ5TWFwOjptYXBUb0Fic29s
dXRlKFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3QKICAgICAgICAgfQogICAg
IH0KIAorICAgIEFTU0VSVChmb3VuZENvbnRhaW5lcik7CiAgICAgdHJhbnNmb3JtU3RhdGUuZmxh
dHRlbigpOyAgICAKIH0KIAorRmxvYXRQb2ludCBSZW5kZXJHZW9tZXRyeU1hcDo6bWFwVG9Db250
YWluZXIoY29uc3QgRmxvYXRQb2ludCYgcCwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCog
Y29udGFpbmVyKSBjb25zdAoreworICAgIEZsb2F0UG9pbnQgcmVzdWx0OworICAgIAorICAgIGlm
ICghaGFzRml4ZWRQb3NpdGlvblN0ZXAoKSAmJiAhaGFzVHJhbnNmb3JtU3RlcCgpICYmICFoYXNO
b25Vbmlmb3JtU3RlcCgpICYmICghY29udGFpbmVyIHx8IChtX21hcHBpbmcuc2l6ZSgpICYmIGNv
bnRhaW5lciA9PSBtX21hcHBpbmdbMF0ubV9yZW5kZXJlcikpKQorICAgICAgICByZXN1bHQgPSBw
ICsgbV9hY2N1bXVsYXRlZE9mZnNldDsKKyAgICBlbHNlIHsKKyAgICAgICAgVHJhbnNmb3JtU3Rh
dGUgdHJhbnNmb3JtU3RhdGUoVHJhbnNmb3JtU3RhdGU6OkFwcGx5VHJhbnNmb3JtRGlyZWN0aW9u
LCBwKTsKKyAgICAgICAgbWFwVG9Db250YWluZXIodHJhbnNmb3JtU3RhdGUsIGNvbnRhaW5lcik7
CisgICAgICAgIHJlc3VsdCA9IHRyYW5zZm9ybVN0YXRlLmxhc3RQbGFuYXJQb2ludCgpOworICAg
IH0KKworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBGbG9hdFBvaW50IHJlbmRlcmVyTWFwcGVk
UmVzdWx0ID0gbV9tYXBwaW5nLmxhc3QoKS5tX3JlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUocCwg
bV9tYXBDb29yZGluYXRlc0ZsYWdzKTsKKyAgICBBU1NFUlQocm91bmRlZEludFBvaW50KHJlbmRl
cmVyTWFwcGVkUmVzdWx0KSA9PSByb3VuZGVkSW50UG9pbnQocmVzdWx0KSk7CisjZW5kaWYKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0Zsb2F0UXVhZCBSZW5kZXJHZW9tZXRyeU1hcDo6bWFw
VG9Db250YWluZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBSZW5kZXJMYXllck1vZGVs
T2JqZWN0KiBjb250YWluZXIpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAgICAK
KyAgICBpZiAoIWhhc0ZpeGVkUG9zaXRpb25TdGVwKCkgJiYgIWhhc1RyYW5zZm9ybVN0ZXAoKSAm
JiAhaGFzTm9uVW5pZm9ybVN0ZXAoKSAmJiAoIWNvbnRhaW5lciB8fCAobV9tYXBwaW5nLnNpemUo
KSAmJiBjb250YWluZXIgPT0gbV9tYXBwaW5nWzBdLm1fcmVuZGVyZXIpKSkgeworICAgICAgICBy
ZXN1bHQgPSByZWN0OworICAgICAgICByZXN1bHQubW92ZShtX2FjY3VtdWxhdGVkT2Zmc2V0KTsK
KyAgICB9IGVsc2UgeworICAgICAgICBUcmFuc2Zvcm1TdGF0ZSB0cmFuc2Zvcm1TdGF0ZShUcmFu
c2Zvcm1TdGF0ZTo6QXBwbHlUcmFuc2Zvcm1EaXJlY3Rpb24sIHJlY3QuY2VudGVyKCksIHJlY3Qp
OworICAgICAgICBtYXBUb0NvbnRhaW5lcih0cmFuc2Zvcm1TdGF0ZSwgY29udGFpbmVyKTsKKyAg
ICAgICAgcmVzdWx0ID0gdHJhbnNmb3JtU3RhdGUubGFzdFBsYW5hclF1YWQoKS5ib3VuZGluZ0Jv
eCgpOworICAgIH0KKworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBGbG9hdFJlY3QgcmVuZGVy
ZXJNYXBwZWRSZXN1bHQgPSBtX21hcHBpbmcubGFzdCgpLm1fcmVuZGVyZXItPmxvY2FsVG9Db250
YWluZXJRdWFkKHJlY3QsIGNvbnRhaW5lciwgbV9tYXBDb29yZGluYXRlc0ZsYWdzKS5ib3VuZGlu
Z0JveCgpOworICAgIC8vIEluc3BlY3RvciBjcmVhdGVzIHJlbmRlcmVycyB3aXRoIG5lZ2F0aXZl
IHdpZHRoIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcxOTQ+Lgor
ICAgIC8vIFRha2luZyBGbG9hdFF1YWQgYm91bmRzIGF2b2lkcyBzcHVyaW91cyBhc3NlcnRpb25z
IGJlY2F1c2Ugb2YgdGhhdC4KKyAgICBBU1NFUlQoZW5jbG9zaW5nSW50UmVjdChyZW5kZXJlck1h
cHBlZFJlc3VsdCkgPT0gZW5jbG9zaW5nSW50UmVjdChGbG9hdFF1YWQocmVzdWx0KS5ib3VuZGlu
Z0JveCgpKSk7CisjZW5kaWYKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgUmVuZGVy
R2VvbWV0cnlNYXA6OnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IoY29uc3QgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JSZW5kZXJlcikK
IHsKICAgICAvLyBXZSBuZWVkIHRvIHB1c2ggbWFwcGluZ3MgaW4gcmV2ZXJzZSBvcmRlciBoZXJl
LCBzbyBkbyBpbnNlcnRpb25zIHJhdGhlciB0aGFuIGFwcGVuZHMuCkBAIC0xNDUsNyArMTY1LDgg
QEAgc3RhdGljIGJvb2wgY2FuTWFwVmlhTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKQog
ICAgIGlmIChzdHlsZS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uIHx8IHN0eWxlLT5pc0Zs
aXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0g
ICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLT5oYXNDb2x1bW5zKCkgfHwgbGF5ZXItPnJlbmRlcmVy
KCktPmhhc1RyYW5zZm9ybSgpKQorICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlbmRlcmVy
ID0gbGF5ZXItPnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyLT5oYXNDb2x1bW5zKCkgfHwg
cmVuZGVyZXItPmhhc1RyYW5zZm9ybSgpIHx8IHJlbmRlcmVyLT5pc1JlbmRlckZsb3dUaHJlYWQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFNWRykKQEAgLTE2Niw5ICsx
ODcsMTYgQEAgdm9pZCBSZW5kZXJHZW9tZXRyeU1hcDo6cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcihj
b25zdCBSZW5kZXJMYXllciogbGF5ZXIsIGNvbnN0IFIKICAgICAgICAgY2FuQ29udmVydEluTGF5
ZXJUcmVlID0gY2FuTWFwVmlhTGF5ZXIoY3VycmVudCk7CiAKICAgICBpZiAoY2FuQ29udmVydElu
TGF5ZXJUcmVlKSB7Ci0gICAgICAgIFRlbXBvcmFyeUNoYW5nZTxzaXplX3Q+IHBvc2l0aW9uQ2hh
bmdlKG1faW5zZXJ0aW9uUG9zaXRpb24sIG1fbWFwcGluZy5zaXplKCkpOwogICAgICAgICBMYXlv
dXRQb2ludCBsYXllck9mZnNldDsKICAgICAgICAgbGF5ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRz
KGFuY2VzdG9yTGF5ZXIsIGxheWVyT2Zmc2V0KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBS
ZW5kZXJWaWV3IG11c3QgYmUgcHVzaGVkIGZpcnN0LgorICAgICAgICBpZiAoIW1fbWFwcGluZy5z
aXplKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChhbmNlc3RvckxheWVyLT5yZW5kZXJlcigpLT5p
c1JlbmRlclZpZXcoKSk7CisgICAgICAgICAgICBwdXNoTWFwcGluZ3NUb0FuY2VzdG9yKGFuY2Vz
dG9yTGF5ZXItPnJlbmRlcmVyKCksIDApOworICAgICAgICB9CisKKyAgICAgICAgVGVtcG9yYXJ5
Q2hhbmdlPHNpemVfdD4gcG9zaXRpb25DaGFuZ2UobV9pbnNlcnRpb25Qb3NpdGlvbiwgbV9tYXBw
aW5nLnNpemUoKSk7CiAgICAgICAgIHB1c2gocmVuZGVyZXIsIHRvTGF5b3V0U2l6ZShsYXllck9m
ZnNldCksIC8qYWNjdW11bGF0aW5nVHJhbnNmb3JtKi8gdHJ1ZSwgLyppc05vblVuaWZvcm0qLyBm
YWxzZSwgLyppc0ZpeGVkUG9zaXRpb24qLyBmYWxzZSwgLypoYXNUcmFuc2Zvcm0qLyBmYWxzZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJHZW9tZXRyeU1hcC5oCmluZGV4IDE1ZGM4ODRkM2RhMTFlYTNhMTc1ODA3ZTVhOTQ4MDA2YjA1
NzE2ZWIuLjUzNjdkNzcwNDQwY2FkMGNjNWMzNWNhOTNkOGExNzBlYzFiMWU4MGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5oCkBAIC0zMCw2ICszMCw3
IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1
ZGUgIkxheW91dFNpemUuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIApAQCAtMzcs
NyArMzgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlckxheWVyOwogY2xh
c3MgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDsKLWNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJl
bmRlclZpZXc7CiBjbGFzcyBUcmFuc2Zvcm1TdGF0ZTsKIApAQCAtNzQsMTEgKzc0LDE3IEBAIHN0
cnVjdCBSZW5kZXJHZW9tZXRyeU1hcFN0ZXAgewogY2xhc3MgUmVuZGVyR2VvbWV0cnlNYXAgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlbmRlckdlb21ldHJ5TWFwKTsKIHB1YmxpYzoKLSAg
ICBSZW5kZXJHZW9tZXRyeU1hcCgpOworICAgIFJlbmRlckdlb21ldHJ5TWFwKE1hcENvb3JkaW5h
dGVzRmxhZ3MgPSBVc2VUcmFuc2Zvcm1zIHwgU25hcE9mZnNldEZvclRyYW5zZm9ybXMpOwogICAg
IH5SZW5kZXJHZW9tZXRyeU1hcCgpOwogCiAgICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvaW50KGNv
bnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICBGbG9hdFJlY3QgYWJzb2x1dGVSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpIGNvbnN0OworCisgICAgLy8gTWFwIHRvIGEgY29udGFpbmVyLiBXaWxsIGFz
c2VydCB0aGF0IHRoZSBjb250YWluZXIgaGFzIGJlZW4gcHVzaGVkIG9udG8gdGhpcyBtYXAuCisg
ICAgLy8gQSBudWxsIGNvbnRhaW5lciBtYXBzIHRocm91Z2ggdGhlIFJlbmRlclZpZXcgKGluY2x1
ZGluZyBpdHMgc2NhbGUgdHJhbnNmb3JtLCBpZiBhbnkpLgorICAgIC8vIElmIHRoZSBjb250YWlu
ZXIgaXMgdGhlIFJlbmRlclZpZXcsIHRoZSBzY3JvbGwgb2Zmc2V0IGlzIGFwcGxpZWQsIGJ1dCBu
b3QgdGhlIHNjYWxlLgorICAgIEZsb2F0UG9pbnQgbWFwVG9Db250YWluZXIoY29uc3QgRmxvYXRQ
b2ludCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqKSBjb25zdDsKKyAgICBGbG9hdFF1
YWQgbWFwVG9Db250YWluZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdCopIGNvbnN0OwogICAgIAogICAgIC8vIENhbGxlZCBieSBjb2RlIHdhbGtpbmcgdGhl
IHJlbmRlcmVyIG9yIGxheWVyIHRyZWVzLgogICAgIHZvaWQgcHVzaE1hcHBpbmdzVG9BbmNlc3Rv
cihjb25zdCBSZW5kZXJMYXllciosIGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyKTsK
QEAgLTk3LDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHB1c2hWaWV3KGNvbnN0IFJlbmRl
clZpZXcqLCBjb25zdCBMYXlvdXRTaXplJiBzY3JvbGxPZmZzZXQsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4KiA9IDApOwogCiBwcml2YXRlOgotICAgIHZvaWQgbWFwVG9BYnNvbHV0ZShUcmFu
c2Zvcm1TdGF0ZSYpIGNvbnN0OworICAgIHZvaWQgbWFwVG9Db250YWluZXIoVHJhbnNmb3JtU3Rh
dGUmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjb250YWluZXIgPSAwKSBjb25zdDsK
IAogICAgIHZvaWQgc3RlcEluc2VydGVkKGNvbnN0IFJlbmRlckdlb21ldHJ5TWFwU3RlcCYpOwog
ICAgIHZvaWQgc3RlcFJlbW92ZWQoY29uc3QgUmVuZGVyR2VvbWV0cnlNYXBTdGVwJik7CkBAIC0x
MTQsNiArMTIwLDcgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9maXhlZFN0ZXBzQ291bnQ7CiAgICAg
UmVuZGVyR2VvbWV0cnlNYXBTdGVwcyBtX21hcHBpbmc7CiAgICAgTGF5b3V0U2l6ZSBtX2FjY3Vt
dWxhdGVkT2Zmc2V0OworICAgIE1hcENvb3JkaW5hdGVzRmxhZ3MgbV9tYXBDb29yZGluYXRlc0Zs
YWdzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKaW5kZXggN2JhNGZlOGJiNjgxYWU0ZjlmODY4Nzc3YTBjYjY3OTI2
NDk2NmM0OC4uMGFhMmJhMjdhYTBmMDBlNTQ3YTc1ZTdmMTdiOWI5NGExNjVhYTU3NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC03Nyw2ICs3Nyw3IEBACiAj
aW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIK
ICNpbmNsdWRlICJSZW5kZXJGbG93VGhyZWFkLmgiCisjaW5jbHVkZSAiUmVuZGVyR2VvbWV0cnlN
YXAuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJNYXJxdWVl
LmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVwbGljYS5oIgpAQCAtMzM0LDU1ICszMzUsMjYgQEAgTGF5
b3V0UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbXB1dGVPZmZzZXRGcm9tUm9vdChib29sJiBoYXNMYXll
ck9mZnNldCkgY29uc3QKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCi12b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9ucyhMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QsIFVwZGF0
ZUxheWVyUG9zaXRpb25zRmxhZ3MgZmxhZ3MpCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXll
clBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIFVwZGF0ZUxheWVyUG9z
aXRpb25zRmxhZ3MgZmxhZ3MpCiB7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIGlmIChvZmZz
ZXRGcm9tUm9vdCkgewotICAgICAgICBib29sIGhhc0xheWVyT2Zmc2V0OwotICAgICAgICBMYXlv
dXRQb2ludCBjb21wdXRlZE9mZnNldEZyb21Sb290ID0gY29tcHV0ZU9mZnNldEZyb21Sb290KGhh
c0xheWVyT2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKGhhc0xheWVyT2Zmc2V0KTsKLSAgICAgICAg
QVNTRVJUKCpvZmZzZXRGcm9tUm9vdCA9PSBjb21wdXRlZE9mZnNldEZyb21Sb290KTsKLSAgICB9
Ci0jZW5kaWYKLQogICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsgLy8gRm9yIHJlbHBvc2l0aW9u
ZWQgbGF5ZXJzIG9yIG5vbi1wb3NpdGlvbmVkIGxheWVycywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHdlIG5lZWQgdG8ga2VlcCBpbiBzeW5jLCBzaW5jZSB3ZSBtYXkgaGF2ZSBzaGlm
dGVkIHJlbGF0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBvdXIgcGFyZW50
IGxheWVyLgotICAgIExheW91dFBvaW50IG9sZE9mZnNldEZyb21Sb290OwotICAgIGlmIChvZmZz
ZXRGcm9tUm9vdCkgewotICAgICAgICAvLyBXZSBjYW4ndCBjYWNoZSBvdXIgb2Zmc2V0IHRvIHRo
ZSByZXBhaW50IGNvbnRhaW5lciBpZiB0aGUgbWFwcGluZyBpcyBhbnl0aGluZyBtb3JlIGNvbXBs
ZXggdGhhbiBhIHNpbXBsZSB0cmFuc2xhdGlvbgotICAgICAgICBpZiAoIWNhblVzZUNvbnZlcnRU
b0xheWVyQ29vcmRzKCkpCi0gICAgICAgICAgICBvZmZzZXRGcm9tUm9vdCA9IDA7IC8vIElmIG91
ciBjYWNoZWQgb2Zmc2V0IGlzIGludmFsaWQgbWFrZSBzdXJlIGl0J3Mgbm90IHBhc3NlZCB0byBh
bnkgb2Ygb3VyIGNoaWxkcmVuCisgICAgaWYgKGdlb21ldHJ5TWFwKQorICAgICAgICBnZW9tZXRy
eU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0aGlzLCBwYXJlbnQoKSk7CisgICAgCisgICAg
aWYgKGhhc092ZXJmbG93Q29udHJvbHMoKSkgeworICAgICAgICBMYXlvdXRQb2ludCBvZmZzZXRG
cm9tUm9vdDsKKyAgICAgICAgaWYgKGdlb21ldHJ5TWFwKQorICAgICAgICAgICAgb2Zmc2V0RnJv
bVJvb3QgPSBMYXlvdXRQb2ludChnZW9tZXRyeU1hcC0+YWJzb2x1dGVQb2ludChGbG9hdFBvaW50
KCkpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBvbGRPZmZzZXRGcm9tUm9vdCA9ICpv
ZmZzZXRGcm9tUm9vdDsKLSAgICAgICAgICAgIC8vIEZyZXF1ZW50bHkgb3VyIHBhcmVudCBsYXll
cidzIHJlbmRlcmVyIHdpbGwgYmUgdGhlIHNhbWUgYXMgb3VyIHJlbmRlcmVyJ3MgY29udGFpbmlu
ZyBibG9jay4gIEluIHRoYXQgY2FzZSwKLSAgICAgICAgICAgIC8vIHdlIGp1c3QgdXBkYXRlIHRo
ZSBjYWNoZSB1c2luZyBvdXIgb2Zmc2V0IHRvIG91ciBwYXJlbnQgKHdoaWNoIGlzIG1fdG9wTGVm
dCkuIE90aGVyd2lzZSwgcmVnZW5lcmF0ZWQgY2FjaGVkCi0gICAgICAgICAgICAvLyBvZmZzZXRz
IHRvIHRoZSByb290IGZyb20gdGhlIHJlbmRlciB0cmVlLgotICAgICAgICAgICAgaWYgKCFtX3Bh
cmVudCB8fCBtX3BhcmVudC0+cmVuZGVyZXIoKSA9PSByZW5kZXJlcigpLT5jb250YWluaW5nQmxv
Y2soKSkKLSAgICAgICAgICAgICAgICBvZmZzZXRGcm9tUm9vdC0+bW92ZShtX3RvcExlZnQueCgp
LCBtX3RvcExlZnQueSgpKTsgLy8gRmFzdCBjYXNlCi0gICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBMYXlvdXRQb2ludCBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgY29udmVydFRv
TGF5ZXJDb29yZHMocm9vdCgpLCBvZmZzZXQpOwotICAgICAgICAgICAgICAgICpvZmZzZXRGcm9t
Um9vdCA9IG9mZnNldDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEZJWE1FOiBJdCBs
b29rcyBzdXNwaWNpb3VzIHRvIGNhbGwgY29udmVydFRvTGF5ZXJDb29yZHMgaGVyZQorICAgICAg
ICAgICAgLy8gYXMgY2FuVXNlQ29udmVydFRvTGF5ZXJDb29yZHMgbWF5IGJlIHRydWUgZm9yIGFu
IGFuY2VzdG9yIGxheWVyLgorICAgICAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdCgp
LCBvZmZzZXRGcm9tUm9vdCk7CiAgICAgICAgIH0KKyAgICAgICAgcG9zaXRpb25PdmVyZmxvd0Nv
bnRyb2xzKHRvU2l6ZShyb3VuZGVkSW50UG9pbnQob2Zmc2V0RnJvbVJvb3QpKSk7CiAgICAgfQot
Ci0gICAgTGF5b3V0UG9pbnQgb2Zmc2V0OwotICAgIGlmIChvZmZzZXRGcm9tUm9vdCkgewotICAg
ICAgICBvZmZzZXQgPSAqb2Zmc2V0RnJvbVJvb3Q7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBM
YXlvdXRQb2ludCBjb21wdXRlZE9mZnNldEZyb21Sb290OwotICAgICAgICBjb252ZXJ0VG9MYXll
ckNvb3Jkcyhyb290KCksIGNvbXB1dGVkT2Zmc2V0RnJvbVJvb3QpOwotICAgICAgICBBU1NFUlQo
b2Zmc2V0ID09IGNvbXB1dGVkT2Zmc2V0RnJvbVJvb3QpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsK
LSAgICAgICAgLy8gRklYTUU6IEl0IGxvb2tzIHN1c3BpY2lvdXMgdG8gY2FsbCBjb252ZXJ0VG9M
YXllckNvb3JkcyBoZXJlCi0gICAgICAgIC8vIGFzIGNhblVzZUNvbnZlcnRUb0xheWVyQ29vcmRz
IG1heSBiZSB0cnVlIGZvciBhbiBhbmNlc3RvciBsYXllci4KLSAgICAgICAgY29udmVydFRvTGF5
ZXJDb29yZHMocm9vdCgpLCBvZmZzZXQpOwotICAgIH0KLSAgICBwb3NpdGlvbk92ZXJmbG93Q29u
dHJvbHModG9TaXplKHJvdW5kZWRJbnRQb2ludChvZmZzZXQpKSk7Ci0KKyAgICAKICAgICB1cGRh
dGVEZXNjZW5kYW50RGVwZW5kZW50RmxhZ3MoKTsKIAogICAgIGlmIChmbGFncyAmIFVwZGF0ZVBh
Z2luYXRpb24pCkBAIC00MDEsNyArMzczLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJQb3NpdGlvbnMoTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290LCBVcGRhdGVMYXllclAKICAg
ICAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IHJlbmRlcmVy
KCktPmNvbnRhaW5lckZvclJlcGFpbnQoKTsKICAgICAgICAgTGF5b3V0UmVjdCBvbGRSZXBhaW50
UmVjdCA9IG1fcmVwYWludFJlY3Q7CiAgICAgICAgIExheW91dFJlY3Qgb2xkT3V0bGluZUJveCA9
IG1fb3V0bGluZUJveDsKLSAgICAgICAgY29tcHV0ZVJlcGFpbnRSZWN0cyhyZXBhaW50Q29udGFp
bmVyLCBvZmZzZXRGcm9tUm9vdCk7CisgICAgICAgIGNvbXB1dGVSZXBhaW50UmVjdHMocmVwYWlu
dENvbnRhaW5lciwgZ2VvbWV0cnlNYXApOwogCiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgQVNT
RVJUIHRoYXQgdmFsdWUgY2FsY3VsYXRlZCBmb3IgbV9vdXRsaW5lQm94IHVzaW5nIHRoZSBjYWNo
ZWQgb2Zmc2V0IGlzIHRoZSBzYW1lCiAgICAgICAgIC8vIGFzIHRoZSB2YWx1ZSBub3QgdXNpbmcg
dGhlIGNhY2hlZCBvZmZzZXQsIGJ1dCB3ZSBjYW4ndCBkdWUgdG8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM3MDQ4CkBAIC00MzUsNyArNDA3LDcgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290
LCBVcGRhdGVMYXllclAKICAgICAgICAgZmxhZ3MgfD0gVXBkYXRlUGFnaW5hdGlvbjsKIAogICAg
IGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyUG9zaXRpb25z
KG9mZnNldEZyb21Sb290LCBmbGFncyk7CisgICAgICAgIGNoaWxkLT51cGRhdGVMYXllclBvc2l0
aW9ucyhnZW9tZXRyeU1hcCwgZmxhZ3MpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogICAgIGlmICgoZmxhZ3MgJiBVcGRhdGVDb21wb3NpdGluZ0xheWVycykgJiYgaXNDb21w
b3NpdGVkKCkpCkBAIC00NTEsOCArNDIzLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJQb3NpdGlvbnMoTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290LCBVcGRhdGVMYXllclAKICAg
ICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0
aW9uOwogICAgIH0KIAotICAgIGlmIChvZmZzZXRGcm9tUm9vdCkKLSAgICAgICAgKm9mZnNldEZy
b21Sb290ID0gb2xkT2Zmc2V0RnJvbVJvb3Q7CisgICAgaWYgKGdlb21ldHJ5TWFwKQorICAgICAg
ICBnZW9tZXRyeU1hcC0+cG9wTWFwcGluZ3NUb0FuY2VzdG9yKHBhcmVudCgpKTsKIH0KIAogTGF5
b3V0UmVjdCBSZW5kZXJMYXllcjo6cmVwYWludFJlY3RJbmNsdWRpbmdOb25Db21wb3NpdGluZ0Rl
c2NlbmRhbnRzKCkgY29uc3QKQEAgLTQ5MiwxMiArNDY0LDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OmRpcnR5QW5jZXN0b3JDaGFpbkhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudFN0YXR1cygp
CiAgICAgfQogfQogCi12b2lkIFJlbmRlckxheWVyOjpjb21wdXRlUmVwYWludFJlY3RzKGNvbnN0
IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIExheW91dFBvaW50KiBv
ZmZzZXRGcm9tUm9vdCkKK3ZvaWQgUmVuZGVyTGF5ZXI6OmNvbXB1dGVSZXBhaW50UmVjdHMoY29u
c3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgY29uc3QgUmVuZGVy
R2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwKQogewogICAgIEFTU0VSVCghbV92aXNpYmxlQ29udGVu
dFN0YXR1c0RpcnR5KTsKIAogICAgIG1fcmVwYWludFJlY3QgPSByZW5kZXJlcigpLT5jbGlwcGVk
T3ZlcmZsb3dSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKLSAgICBtX291dGxpbmVC
b3ggPSByZW5kZXJlcigpLT5vdXRsaW5lQm91bmRzRm9yUmVwYWludChyZXBhaW50Q29udGFpbmVy
LCBvZmZzZXRGcm9tUm9vdCk7CisgICAgbV9vdXRsaW5lQm94ID0gcmVuZGVyZXIoKS0+b3V0bGlu
ZUJvdW5kc0ZvclJlcGFpbnQocmVwYWludENvbnRhaW5lciwgZ2VvbWV0cnlNYXApOwogfQogCiAK
QEAgLTUyMSw3ICs0OTMsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpjbGVhclJlcGFpbnRSZWN0cygp
CiAgICAgbV9vdXRsaW5lQm94ID0gSW50UmVjdCgpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJT
Y3JvbGxGbGFncyBmbGFncykKK3ZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBVcGRhdGVMYXllclBv
c2l0aW9uc0FmdGVyU2Nyb2xsRmxhZ3MgZmxhZ3MpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkbid0IGJlIG5lZWRlZCwgYnV0IHRoZXJlIGFyZSBzb21lIGNvcm5lciBjYXNlcyB3aGVyZQog
ICAgIC8vIHRoZXNlIGZsYWdzIGFyZSBzdGlsbCBkaXJ0eS4gVXBkYXRlIHNvIHRoYXQgdGhlIGNo
ZWNrIGJlbG93IGlzIHZhbGlkLgpAQCAtNTM1LDIyICs1MDcsMjUgQEAgdm9pZCBSZW5kZXJMYXll
cjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChVcGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyU2Nyb2wKIAogICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKIAorICAgIGlmIChnZW9tZXRy
eU1hcCkKKyAgICAgICAgZ2VvbWV0cnlNYXAtPnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IodGhpcywg
cGFyZW50KCkpOworCiAgICAgaWYgKChmbGFncyAmIEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVk
QW5jZXN0b3IpIHx8IHJlbmRlcmVyKCktPnN0eWxlKCktPmhhc1ZpZXdwb3J0Q29uc3RyYWluZWRQ
b3NpdGlvbigpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBJcyBpdCB3b3J0aCBwYXNzaW5nIHRoZSBv
ZmZzZXRGcm9tUm9vdCBhcm91bmQgbGlrZSBpbiB1cGRhdGVMYXllclBvc2l0aW9ucz8KICAgICAg
ICAgLy8gRklYTUU6IFdlIGNvdWxkIHRyYWNrIHRoZSByZXBhaW50IGNvbnRhaW5lciBhcyB3ZSB3
YWxrIGRvd24gdGhlIHRyZWUuCi0gICAgICAgIGNvbXB1dGVSZXBhaW50UmVjdHMocmVuZGVyZXIo
KS0+Y29udGFpbmVyRm9yUmVwYWludCgpKTsKKyAgICAgICAgY29tcHV0ZVJlcGFpbnRSZWN0cyhy
ZW5kZXJlcigpLT5jb250YWluZXJGb3JSZXBhaW50KCksIGdlb21ldHJ5TWFwKTsKICAgICAgICAg
ZmxhZ3MgfD0gSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvcjsKICAgICB9IGVsc2Ug
aWYgKChmbGFncyAmIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXApICYmICFtX2NhblNr
aXBSZXBhaW50UmVjdHNVcGRhdGVPblNjcm9sbCkgewogICAgICAgICAvLyBJZiB3ZSBoYXZlIHNl
ZW4gYW4gb3ZlcmZsb3cgY2xpcCwgd2Ugc2hvdWxkIHVwZGF0ZSBvdXIgcmVwYWludCByZWN0cyBh
cyBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludAogICAgICAgICAvLyBpbnRlcnNlY3RzIGl0
IHdpdGggb3VyIGFuY2VzdG9yIG92ZXJmbG93IGNsaXAgdGhhdCBtYXkgaGF2ZSBtb3ZlZC4KLSAg
ICAgICAgY29tcHV0ZVJlcGFpbnRSZWN0cyhyZW5kZXJlcigpLT5jb250YWluZXJGb3JSZXBhaW50
KCkpOworICAgICAgICBjb21wdXRlUmVwYWludFJlY3RzKHJlbmRlcmVyKCktPmNvbnRhaW5lckZv
clJlcGFpbnQoKSwgZ2VvbWV0cnlNYXApOwogICAgIH0KIAogICAgIGlmIChyZW5kZXJlcigpLT5o
YXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgZmxhZ3MgfD0gSGFzU2VlbkFuY2VzdG9yV2l0aE92
ZXJmbG93Q2xpcDsKIAogICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gZmlyc3RDaGlsZCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQtPnVw
ZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoZmxhZ3MpOworICAgICAgICBjaGlsZC0+dXBk
YXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChnZW9tZXRyeU1hcCwgZmxhZ3MpOwogCiAgICAg
Ly8gV2UgZG9uJ3QgdXBkYXRlIG91ciByZWZsZWN0aW9uIGFzIHNjcm9sbGluZyBpcyBhIHRyYW5z
bGF0aW9uIHdoaWNoIGRvZXMgbm90IGNoYW5nZSB0aGUgc2l6ZSgpCiAgICAgLy8gb2YgYW4gb2Jq
ZWN0LCB0aHVzIFJlbmRlclJlcGxpY2Egd2lsbCBzdGlsbCByZXBhaW50IGl0c2VsZiBwcm9wZXJs
eSBhcyB0aGUgbGF5ZXIgcG9zaXRpb24gd2FzCkBAIC01NjIsNiArNTM3LDkgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChVcGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyU2Nyb2wKICAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlUG9zaXRpb24o
KTsKICAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5nTWFycXVl
ZVBvc2l0aW9uOwogICAgIH0KKworICAgIGlmIChnZW9tZXRyeU1hcCkKKyAgICAgICAgZ2VvbWV0
cnlNYXAtPnBvcE1hcHBpbmdzVG9BbmNlc3RvcihwYXJlbnQoKSk7CiB9CiAKICNpZiBFTkFCTEUo
Q1NTX0NPTVBPU0lUSU5HKQpAQCAtMTQyNSw4ICsxNDAzLDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6
cmVtb3ZlT25seVRoaXNMYXllcigpCiAgICAgY2xlYXJDbGlwUmVjdHNJbmNsdWRpbmdEZXNjZW5k
YW50cygpOwogCiAgICAgUmVuZGVyTGF5ZXIqIG5leHRTaWIgPSBuZXh0U2libGluZygpOwotICAg
IGJvb2wgaGFzTGF5ZXJPZmZzZXQ7Ci0gICAgY29uc3QgTGF5b3V0UG9pbnQgb2Zmc2V0RnJvbVJv
b3RCZWZvcmVNb3ZlID0gY29tcHV0ZU9mZnNldEZyb21Sb290KGhhc0xheWVyT2Zmc2V0KTsKIAog
ICAgIC8vIFJlbW92ZSB0aGUgY2hpbGQgcmVmbGVjdGlvbiBsYXllciBiZWZvcmUgbW92aW5nIG90
aGVyIGNoaWxkIGxheWVycy4KICAgICAvLyBUaGUgcmVmbGVjdGlvbiBsYXllciBzaG91bGQgbm90
IGJlIG1vdmVkIHRvIHRoZSBwYXJlbnQuCkBAIC0xNDQwLDEwICsxNDE2LDkgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6cmVtb3ZlT25seVRoaXNMYXllcigpCiAgICAgICAgIHJlbW92ZUNoaWxkKGN1cnJl
bnQpOwogICAgICAgICBtX3BhcmVudC0+YWRkQ2hpbGQoY3VycmVudCwgbmV4dFNpYik7CiAgICAg
ICAgIGN1cnJlbnQtPnNldFJlcGFpbnRTdGF0dXMoTmVlZHNGdWxsUmVwYWludCk7Ci0gICAgICAg
IExheW91dFBvaW50IG9mZnNldEZyb21Sb290ID0gb2Zmc2V0RnJvbVJvb3RCZWZvcmVNb3ZlOwog
ICAgICAgICAvLyB1cGRhdGVMYXllclBvc2l0aW9ucyBkZXBlbmRzIG9uIGhhc0xheWVyKCkgYWxy
ZWFkeSBiZWluZyBmYWxzZSBmb3IgcHJvcGVyIGxheW91dC4KICAgICAgICAgQVNTRVJUKCFyZW5k
ZXJlcigpLT5oYXNMYXllcigpKTsKLSAgICAgICAgY3VycmVudC0+dXBkYXRlTGF5ZXJQb3NpdGlv
bnMoaGFzTGF5ZXJPZmZzZXQgPyAmb2Zmc2V0RnJvbVJvb3QgOiAwKTsKKyAgICAgICAgY3VycmVu
dC0+dXBkYXRlTGF5ZXJQb3NpdGlvbnMoMCk7IC8vIEZJWE1FOiB1c2UgZ2VvbWV0cnkgbWFwLgog
ICAgICAgICBjdXJyZW50ID0gbmV4dDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmgKaW5kZXggYjQxZTI5ZjUxNDc4NDRkMTc2ZjJlNzMyY2ZlNTUwN2RkZTA4ZDE5
OS4uZDg5Y2MxM2EzMDExMzA4NmI2NDhjMGIzM2UzYWI0YzdlYTVhNWU4NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTYyLDYgKzYyLDcgQEAgY2xhc3MgRmlsdGVy
T3BlcmF0aW9uczsKIGNsYXNzIEhpdFRlc3RSZXF1ZXN0OwogY2xhc3MgSGl0VGVzdFJlc3VsdDsK
IGNsYXNzIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTsKK2NsYXNzIFJlbmRlckdlb21ldHJ5TWFw
OwogY2xhc3MgUmVuZGVyTWFycXVlZTsKIGNsYXNzIFJlbmRlclJlcGxpY2E7CiBjbGFzcyBSZW5k
ZXJTY3JvbGxiYXJQYXJ0OwpAQCAtMzk3LDkgKzM5OCw3IEBAIHB1YmxpYzoKICAgICB9OwogICAg
IHR5cGVkZWYgdW5zaWduZWQgVXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnczsKICAgICBzdGF0aWMg
Y29uc3QgVXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFncyBkZWZhdWx0RmxhZ3MgPSBDaGVja0ZvclJl
cGFpbnQgfCBJc0NvbXBvc2l0aW5nVXBkYXRlUm9vdCB8IFVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJz
OwotICAgIC8vIFByb3ZpZGluZyB8Y2FjaGVkT2Zmc2V0fCBwcmV2ZW50cyBhIG91dGxpbmVCb3hG
b3JSZXBhaW50IGZyb20gd2Fsa2luZyBiYWNrIHRvIHRoZSByb290IGZvciBlYWNoIGxheWVyIGlu
IG91ciBzdWJ0cmVlLgotICAgIC8vIFRoaXMgaXMgYW4gb3B0aW1pc3RpYyBvcHRpbWl6YXRpb24g
dGhhdCBpcyBub3QgZ3VhcmFudGVlZCB0byBzdWNjZWVkLgotICAgIHZvaWQgdXBkYXRlTGF5ZXJQ
b3NpdGlvbnMoTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290LCBVcGRhdGVMYXllclBvc2l0aW9u
c0ZsYWdzID0gZGVmYXVsdEZsYWdzKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zKFJl
bmRlckdlb21ldHJ5TWFwKiA9IDAsIFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZ3MgPSBkZWZhdWx0
RmxhZ3MpOwogICAgIAogICAgIGJvb2wgaXNQYWdpbmF0ZWQoKSBjb25zdCB7IHJldHVybiBtX2lz
UGFnaW5hdGVkOyB9CiAKQEAgLTQ4OCw3ICs0ODcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5V
c2VDb252ZXJ0VG9MYXllckNvb3JkcygpIGNvbnN0CiAgICAgewogICAgICAgICAvLyBUaGVzZSBS
ZW5kZXJPYmplY3QgaGF2ZSBhbiBpbXBhY3Qgb24gdGhlaXIgbGF5ZXJzJyB3aXRob3V0IHRoZW0g
a25vd2luZyBhYm91dCBpdC4KLSAgICAgICAgcmV0dXJuICFyZW5kZXJlcigpLT5oYXNDb2x1bW5z
KCkgJiYgIXJlbmRlcmVyKCktPmhhc1RyYW5zZm9ybSgpICYmICFpc0NvbXBvc2l0ZWQoKQorICAg
ICAgICByZXR1cm4gIXJlbmRlcmVyKCktPmhhc0NvbHVtbnMoKSAmJiAhcmVuZGVyZXIoKS0+aGFz
VHJhbnNmb3JtKCkKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICAgICAgJiYgIXJlbmRlcmVyKCkt
PmlzU1ZHUm9vdCgpCiAjZW5kaWYKQEAgLTU4MSw3ICs1ODAsNyBAQCBwdWJsaWM6CiAgICAgfTsK
IAogICAgIHR5cGVkZWYgdW5zaWduZWQgVXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZs
YWdzOwotICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChVcGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZ3MgPSBOb0ZsYWcpOworICAgIHZvaWQgdXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCogPSAwLCBVcGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZ3MgPSBOb0ZsYWcpOwogICAgIHZvaWQgc2V0UmVwYWlu
dFN0YXR1cyhSZXBhaW50U3RhdHVzIHN0YXR1cykgeyBtX3JlcGFpbnRTdGF0dXMgPSBzdGF0dXM7
IH0KIAogICAgIExheW91dFVuaXQgc3RhdGljSW5saW5lUG9zaXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3N0YXRpY0lubGluZVBvc2l0aW9uOyB9CkBAIC02OTksNyArNjk4LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHNldEFuY2VzdG9yQ2hhaW5IYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQo
KTsKICAgICB2b2lkIGRpcnR5QW5jZXN0b3JDaGFpbkhhc1NlbGZQYWludGluZ0xheWVyRGVzY2Vu
ZGFudFN0YXR1cygpOwogCi0gICAgdm9pZCBjb21wdXRlUmVwYWludFJlY3RzKGNvbnN0IFJlbmRl
ckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIExheW91dFBvaW50KiBvZmZzZXRG
cm9tUm9vdCA9IDApOworICAgIHZvaWQgY29tcHV0ZVJlcGFpbnRSZWN0cyhjb25zdCBSZW5kZXJM
YXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBjb25zdCBSZW5kZXJHZW9tZXRyeU1h
cCogPSAwKTsKICAgICB2b2lkIGNvbXB1dGVSZXBhaW50UmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50
cygpOwogICAgIHZvaWQgY2xlYXJSZXBhaW50UmVjdHMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBiNWI0NTZiM2Ey
NGFjNWFiZjFkYjJhYTllNjI2ZmRkMDQ2YTQxM2YyLi5lYWVkOTgxM2UzZTg4ZjkzYmEzMmQwMmI1
YzhkOTdlMjdhYTY3MTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtODMsNiArODMsNyBAQCBjbGFzcyBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6Ok92ZXJsYXBNYXAgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE92ZXJs
YXBNYXApOwogcHVibGljOgogICAgIE92ZXJsYXBNYXAoKQorICAgICAgICA6IG1fZ2VvbWV0cnlN
YXAoVXNlVHJhbnNmb3JtcykKICAgICB7CiAgICAgICAgIC8vIEJlZ2luIGFzc3VtaW5nIHRoZSBy
b290IGxheWVyIHdpbGwgYmUgY29tcG9zaXRlZCBzbyB0aGF0IHRoZXJlIGlzCiAgICAgICAgIC8v
IHNvbWV0aGluZyBvbiB0aGUgc3RhY2suIFRoZSByb290IGxheWVyIHNob3VsZCBhbHNvIG5ldmVy
IGdldCBhbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGIxZjU0
MWY5MWE2YTc4NTQzNjlmZWNkOTMyMjQ3NmRjNjA4ZDM5MWQuLjExOGE5OTZhZjgwZTQ2NWYwZjBm
NjAxNjFiOWIxZDFkZWRmY2JhNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgKQEAgLTk4MSw3ICs5ODEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHdp
bGxCZURlc3Ryb3llZCgpOwogICAgIHZvaWQgYXJlbmFEZWxldGUoUmVuZGVyQXJlbmEqLCB2b2lk
KiBvYmplY3RCYXNlKTsKIAotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdXRsaW5lQm91bmRzRm9y
UmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiAvKnJlcGFpbnRDb250YWluZXIq
LywgTGF5b3V0UG9pbnQqIC8qY2FjaGVkT2Zmc2V0VG9SZXBhaW50Q29udGFpbmVyKi8gPSAwKSBj
b25zdCB7IHJldHVybiBMYXlvdXRSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgb3V0
bGluZUJvdW5kc0ZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogLypyZXBh
aW50Q29udGFpbmVyKi8sIGNvbnN0IFJlbmRlckdlb21ldHJ5TWFwKiA9IDApIGNvbnN0IHsgcmV0
dXJuIExheW91dFJlY3QoKTsgfQogCiAgICAgdmlydHVhbCBib29sIGNhbkJlUmVwbGFjZWRXaXRo
SW5saW5lUnVuSW4oKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAppbmRleCBiNGM2N2I5YjJiY2YwOWVmNzJh
Y2QwOThlZDg1ZjJkMjcxYzMxZjM0Li4wMTkyMDRlNGUyZmRmZmM0MzI2ODYwZTQ3ZTVhNzE2N2Y3
NTUzMTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR01vZGVsT2JqZWN0LmNwcApAQCAtNzAsNyArNzAsNyBAQCBjb25zdCBSZW5kZXJPYmplY3Qq
IFJlbmRlclNWR01vZGVsT2JqZWN0OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRl
ckxheQogLy8gQ29waWVkIGZyb20gUmVuZGVyQm94LCB0aGlzIG1ldGhvZCBsaWtlbHkgcmVxdWly
ZXMgZnVydGhlciByZWZhY3RvcmluZyB0byB3b3JrIGVhc2lseSBmb3IgYm90aCBTVkcgYW5kIENT
UyBCb3ggTW9kZWwgY29udGVudC4KIC8vIEZJWE1FOiBUaGlzIG1heSBhbHNvIG5lZWQgdG8gbW92
ZSBpbnRvIFNWR1JlbmRlclN1cHBvcnQgYXMgdGhlIFJlbmRlckJveCB2ZXJzaW9uIGRlcGVuZHMK
IC8vIG9uIGJvcmRlckJvdW5kaW5nQm94KCkgd2hpY2ggU1ZHIFJlbmRlckJveCBzdWJjbGFzZXMg
KGxpa2UgU1ZHUmVuZGVyQmxvY2spIGRvIG5vdCBpbXBsZW1lbnQuCi1MYXlvdXRSZWN0IFJlbmRl
clNWR01vZGVsT2JqZWN0OjpvdXRsaW5lQm91bmRzRm9yUmVwYWludChjb25zdCBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBMYXlvdXRQb2ludCopIGNvbnN0CitMYXlv
dXRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0OjpvdXRsaW5lQm91bmRzRm9yUmVwYWludChjb25z
dCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBjb25zdCBSZW5kZXJH
ZW9tZXRyeU1hcCopIGNvbnN0CiB7CiAgICAgTGF5b3V0UmVjdCBib3ggPSBlbmNsb3NpbmdMYXlv
dXRSZWN0KHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwogICAgIGFkanVzdFJlY3RG
b3JPdXRsaW5lQW5kU2hhZG93KGJveCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgKaW5kZXggNTBlOWY2ODYwZTY3ZGZiNWQ3ZTc0
N2U5NzI2YzljNGFjZTMwOWE2MS4uZGMyZDVkYTM5ZTgzOTNjMzJkZDFkMGExNTUwZjkzMWZiNThm
MGViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdN
b2RlbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
TW9kZWxPYmplY3QuaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIExh
eW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCB2b2lkIGNvbXB1dGVGbG9hdFJlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIsIEZsb2F0UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxzZSkg
Y29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IG91dGxpbmVCb3VuZHNGb3JS
ZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIExh
eW91dFBvaW50KikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IG91dGxp
bmVCb3VuZHNGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRD
b250YWluZXIsIGNvbnN0IFJlbmRlckdlb21ldHJ5TWFwKikgY29uc3QgT1ZFUlJJREU7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhYnNv
bHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCogd2FzRml4ZWQpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IDA0N2I5ZTMyOTk0YmE1NzNiNzJhYmJlZGM1ODdjZTcxNWU2ODcxYmUuLmE5MzYyY2MwZmM0
OGNmYjUwY2Q4YWY1YTUzM2ZjN2RiYzcyYjk4M2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAx
Mi0xMS0xMSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAg
ICBFbGltaW5hdGUgYW5jZXN0b3IgdHJlZSB3YWxrIGNvbXB1dGluZyBvdXRsaW5lQm91bmRzRm9y
UmVwYWludCgpIHdoZW4gdXBkYXRpbmcgbGF5ZXIgcG9zaXRpb25zCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE4NzQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBmYXN0L2Jsb2NrL2Zsb2F0L292ZXJoYW5n
aW5nLXRhbGwtYmxvY2suaHRtbCBvdmVyZmxvd3MgTGF5b3V0VW5pdHMsIHNvIGNhdXNlcworICAg
ICAgICBhc3NlcnRpb25zIHdoZW4gdXNpbmcgUmVuZGVyR2VvbWV0cnlNYXAgKGJ1ZyAxMDE4NjUp
LgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9uczoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9uczoKKwogMjAxMi0xMS0xMCAgTWlrZSBX
ZXN0ICA8bWt3c3RAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IE11bHRp
cGxlICclYycgZm9ybWF0dGluZyBvcHRpb25zIHNob3VsZCBhbGwgaGF2ZSBlZmZlY3QuCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwppbmRleCBlMGI4
MmNhYWYxMDViNzczNzE4N2VjNTNiMmM4NzIwMTZkYmM5YmVhLi4yOGFmMTFmOTA3Y2FlYzYxYmRh
OWJmMGI0M2EwNmQyZmI4NGY1Zjc2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTQyMjYsMyArNDIyNiw2IEBAIHdlYmtpdC5vcmcvYi8x
MDE3OTQgZmFzdC9jYW52YXMvY2FudmFzLWFzLWltYWdlLWhpZHBpLmh0bWwgWyBJbWFnZU9ubHlG
YWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xMDE3OTQgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9n
cHUvZmFzdC9jYW52YXMvY2FudmFzLWFzLWltYWdlLWhpZHBpLmh0bWwgWyBJbWFnZU9ubHlGYWls
dXJlIF0KIHdlYmtpdC5vcmcvYi8xMDE3OTQgZmFzdC9jYW52YXMvY2FudmFzLXJlc2l6ZS1yZXNl
dC1waXhlbFJhdGlvLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xMDE3OTQgcGxhdGZv
cm0vY2hyb21pdW0vdmlydHVhbC9ncHUvZmFzdC9jYW52YXMvY2FudmFzLXJlc2l6ZS1yZXNldC1w
aXhlbFJhdGlvLmh0bWwgWyBGYWlsdXJlIF0KKworIyBPdmVyZmxvd3MgTGF5b3V0VW5pdHMsIHdo
aWNoIGNhdXNlcyBhc3NlcnRpb25zLgord2Via2l0Lm9yZy9iLzEwMTg2NSBmYXN0L2Jsb2NrL2Zs
b2F0L292ZXJoYW5naW5nLXRhbGwtYmxvY2suaHRtbCBbIFNraXAgXQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBlNjc3NWJkMzQxZTg0OWVlYzAwODMwZTY0
OTJjNjI4MzcwODdhM2UyLi43MmY2Y2ZlZGQ3OGFlMTNjZTVhYThkNTBmMGU2ZGNiYTczODhhMGVk
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMTE3NCwz
ICsxMTc0LDYgQEAgd2Via2l0Lm9yZy9iLzEwMDg0NiBpbnNwZWN0b3ItcHJvdG9jb2wvZGVidWdn
ZXItdGVybWluYXRlLWRlZGljYXRlZC13b3JrZXItd2hpbGUKIHdlYmtpdC5vcmcvYi8xMDAxNDIg
Y3NzMy9maWx0ZXJzL2VmZmVjdC1yZWZlcmVuY2UtaHcuaHRtbCBbIEZhaWwgXQogd2Via2l0Lm9y
Zy9iLzEwMDE0MiBjc3MzL2ZpbHRlcnMvZWZmZWN0LXJlZmVyZW5jZS1vcmRlcmluZy1ody5odG1s
IFsgRmFpbCBdCiB3ZWJraXQub3JnL2IvMTAwMTQyIGNzczMvZmlsdGVycy9lZmZlY3QtcmVmZXJl
bmNlLmh0bWwgWyBGYWlsIF0KKworIyBPdmVyZmxvd3MgTGF5b3V0VW5pdHMsIHdoaWNoIGNhdXNl
cyBhc3NlcnRpb25zLgord2Via2l0Lm9yZy9iLzEwMTg2NSBmYXN0L2Jsb2NrL2Zsb2F0L292ZXJo
YW5naW5nLXRhbGwtYmxvY2suaHRtbCBbIFNraXAgXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173549</attachid>
            <date>2012-11-11 21:26:51 -0800</date>
            <delta_ts>2012-11-12 14:23:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101874-20121111212454.patch</filename>
            <type>text/plain</type>
            <size>39104</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0MTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2IzZDBmMGRiOWNmYTE5
N2M1NzU4MWRlZjQ0ZDI5ODRlMmRjOWFkOC4uY2Q0MzBlZjBmMTg2ZGUzN2Q0NTgxNTIzNDI1ZjYw
YjYyNmUzNWQzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg0IEBACisyMDEyLTExLTExICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIEVsaW1pbmF0ZSBh
bmNlc3RvciB0cmVlIHdhbGsgY29tcHV0aW5nIG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KCkgd2hl
biB1cGRhdGluZyBsYXllciBwb3NpdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMTg3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucygpIGFu
ZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCkgc3BlbmQgYQorICAgICAgICBsb3Qg
b2YgdGltZSBpbiBjb21wdXRlUmVwYWludFJlY3RzKCksIHdoaWNoIGRvZXMgdHdvIGFuY2VzdG9y
IHRyZWUgd2Fsa3MsIG9uY2UKKyAgICAgICAgZm9yIGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBh
aW50KCksIGFuZCBvbmUgZm9yIG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KCkuCisKKyAgICAgICAg
RWxpbWluYXRlIHRoZSBhbmNlc3RvciB0cmVlIHdhbGsgaW4gb3V0bGluZUJvdW5kc0ZvclJlcGFp
bnQoKSBieSBtYWludGFpbmluZworICAgICAgICBhIFJlbmRlckdlb21ldHJ5TWFwIGFzIHdlIHRy
YXZlcnNlIHRoZSBsYXllciB0cmVlLCBhbmQgdGhlbiB1c2luZyBpdCB0byBtYXAKKyAgICAgICAg
dGhlIG91dGxpbmUgYm91bmRzIHRvIHRoZSByZXBhaW50IGNvbnRhaW5lci4gUmVwbGFjZSB0aGUg
aG9rZXkgY2FjaGVkIG9mZnNldEZyb21Sb290CisgICAgICAgIG5vdyB0aGF0IHRoZSBSZW5kZXJH
ZW9tZXRyeU1hcCBjYW4gZG8gYSBiZXR0ZXIgam9iLgorICAgICAgICAKKyAgICAgICAgVGhlIGNs
aXBwZWQgb3ZlcmZsb3cgcmVjdCBjYW5ub3QgYmUgbWFwcGVkIHNpbXBseSwgc28gY2Fubm90IHll
dCBtYWtlIHVzZSBvZgorICAgICAgICB0aGUgZ2VvbWV0cnkgbWFwLgorICAgICAgICAKKyAgICAg
ICAgTW9kaWZ5IHRoZSBSZW5kZXJHZW9tZXRyeU1hcCB0byBzdXBwb3J0IG1hcHBpbmcgdG8gc29t
ZSByZXBhaW50Q29udGFpbmVyIGFuY2VzdG9yLgorICAgICAgICAKKyAgICAgICAgUGFzcyB0aGUg
UmVuZGVyR2VvbWV0cnlNYXAgYXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRvIG91dGxpbmVCb3Vu
ZHNGb3JSZXBhaW50LgorICAgICAgICAKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmxheW91dCk6IE1ha2UgYSBSZW5kZXJHZW9tZXRy
eU1hcCBhbmQgcGFzcyBpdCBkb3duCisgICAgICAgIHRvIHVwZGF0ZUxheWVyUG9zaXRpb25zKCku
IEZvciBwYXJ0aWFsIGxheW91dHMsIHdlIGhhdmUgdG8gcHVzaCBsYXllcnMKKyAgICAgICAgYmV0
d2VlbiB0aGUgcm9vdCBhbmQgdGhlIGVuY2xvc2luZyBsYXllciBvZiB0aGUgbGF5b3V0IHN1YnRy
ZWUuCisgICAgICAgIFRoZSBnZW9tZXRyeSBtYXAgdXNlZCBmb3IgcmVwYWludGluZyBkb2VzIG5v
dCB1c2UgU25hcE9mZnNldEZvclRyYW5zZm9ybXMsCisgICAgICAgIHNvIGluaXRpYWxpemUgaXQg
ZXhwbGljaXRseSB3aXRoIGp1c3QgdGhlIFVzZVRyYW5zZm9ybXMgZmxhZy4KKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6cmVwYWludEZpeGVkRWxlbWVudHNBZnRlclNjcm9sbGluZyk6IE1h
a2UgYSBSZW5kZXJHZW9tZXRyeU1hcAorICAgICAgICB0byBwYXNzIGFsb25nIHRvIHVwZGF0ZUxh
eWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoKS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b3V0bGluZUJvdW5kc0ZvclJlcGFp
bnQpOiBSZXBsYWNlIHRoZSBvcHRpb25hbCBjYWNoZWRPZmZzZXRUb1JlcGFpbnRDb250YWluZXIK
KyAgICAgICAgcGFyYW1ldGVyIHdpdGggYW4gb3B0aW9uYWwgUmVuZGVyR2VvbWV0cnlNYXAsIGFu
ZCBpdCB1c2UgdG8gbWFwIHRoZSBjb21wdXRlIHJlY3QgdG8KKyAgICAgICAgcmVwYWludENvbnRh
aW5lciBjb29yZGluYXRlcy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckdlb21ldHJ5TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckdlb21ldHJ5TWFwOjpSZW5kZXJHZW9tZXRyeU1hcCk6IFRoaXMgbm93IGhhcyB0byBz
dG9yZSB0aGUgbWFwcGluZworICAgICAgICBmbGFncyB0byB1c2UsIHNvIHRoYXQgaXRzIGJlaGF2
aW9yIGNhbiBtYXRjaCB0aGF0IG9mIG1hcExvY2FsVG9Db250YWluZXIoKS4gVGhlCisgICAgICAg
IHBlcnRpbmVudCBmbGFnIGlzIHRoZSBjb25mdXNpbmdseSBuYW1lZCBTbmFwT2Zmc2V0Rm9yVHJh
bnNmb3Jtcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdlb21ldHJ5TWFwOjphYnNvbHV0ZVBv
aW50KTogQ2FsbCB0aGUgbmV3IG1hcFRvQ29udGFpbmVyKCkgd2l0aAorICAgICAgICBhIG51bGwg
Y29udGFpbmVyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR2VvbWV0cnlNYXA6OmFic29sdXRl
UmVjdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR2VvbWV0cnlNYXA6Om1hcFRv
Q29udGFpbmVyKTogTWFwIHRvIHRoZSBzdXBwbGllZCBjb250YWluZXIsCisgICAgICAgIGFzc2Vy
dGluZyB0aGF0IHdlIGZvdW5kIGl0LiBBZGQgcG9pbnQtIGFuZCByZWN0LWJhc2VkIG1hcHBpbmcg
bWV0aG9kcworICAgICAgICBha2luIHRvIHRoZSBvbGQgYWJzb2x1dGVSZWN0L2Fic29sdXRlUG9p
bnQuCisgICAgICAgIChXZWJDb3JlOjpjYW5NYXBWaWFMYXllcik6IFdlIG5lZWQgdG8gdGVzdCBm
b3IgaXNSZW5kZXJGbG93VGhyZWFkKCkgaGVyZSB0b28uCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJHZW9tZXRyeU1hcDo6cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcik6IFdoZW4gbWFwcGluZyB2aWEK
KyAgICAgICAgbGF5ZXJzLCBlbnN1cmUgdGhhdCB0aGUgUmVuZGVyVmlldyBpcyBwdXNoZWQgYXMg
dGhlIGZpcnN0IHN0ZXAuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdlb21ldHJ5TWFwLmg6
CisgICAgICAgIChSZW5kZXJHZW9tZXRyeU1hcCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBv
c2l0aW9uc0FmdGVyTGF5b3V0KTogTmV3IHdyYXBwZXIgZm9yIHVwZGF0ZUxheWVyUG9zaXRpb25z
KCkKKyAgICAgICAgdGhhdCBtYWtlcyB0aGUgZ2VvbWV0cnkgbWFwLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwpOiBOZXcgd3Jh
cHBlciBmb3IgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbAorICAgICAgICB0aGF0IG1h
a2VzIHRoZSBnZW9tZXRyeSBtYXAuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBk
YXRlTGF5ZXJQb3NpdGlvbnMpOiBOb3cgdGFrZXMgYW4gb3B0aW9uYWwgUmVuZGVyR2VvbWV0cnlN
YXAuCisgICAgICAgIFJlbW92ZSB0aGUgb2xkIG9mZnNldEZyb21Sb290IGNvZGUuIFB1c2ggYW5k
IHBvcCBsYXllcnMgdG8vZnJvbSB0aGUgZ2VvbWV0cnkgbWFwLiBVc2UKKyAgICAgICAgdGhlIGdl
b21ldHJ5IG1hcCB0byBnZXQgdGhlIG9mZnNldEZyb21Sb290IGFzIG5lZWRlZCBieSBvdmVyZmxv
dyBjb250cm9scy4gUGFzcworICAgICAgICBpdCB0byBjb21wdXRlUmVwYWludFJlY3RzKCkuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29tcHV0ZVJlcGFpbnRSZWN0cyk6IFBhc3Mg
dGhlIGdlb21ldHJ5IG1hcCB0byBvdXRsaW5lQm91bmRzRm9yUmVwYWludCgpLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwpOiBQ
dXNoIGFuZCBwb3AgdG8vZnJvbSB0aGUKKyAgICAgICAgZ2VvbWV0cnkgbWFwLCBhbmQgcGFzcyBp
dCB0byBjb21wdXRlUmVwYWludFJlY3RzKCkuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6cmVtb3ZlT25seVRoaXNMYXllcik6IFJlbW92ZSB0aGUgb2Zmc2V0RnJvbVJvb3RCZWZvcmVN
b3ZlCisgICAgICAgIGNvbXB1dGF0aW9uOyB0aGlzIGNvdWxkIHVzZSBhIGdlb21ldHJ5IG1hcCBp
biBmdXR1cmUgaWYgaXQgaXMgc2hvd24gdG8gYmUgYSBib3R0bGVuZWNrLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNh
blVzZUNvbnZlcnRUb0xheWVyQ29vcmRzKTogSXQgd2FzIHRob3VnaHQgdGhhdCB0aGUgaXNDb21w
b3NpdGVkKCkKKyAgICAgICAgd2FzIHRoZXJlIGJlY2F1c2UgdGhlIG9sZGVyIGNhY2hlZCBvZmZz
ZXRGcm9tUm9vdCBsb2dpYyB3YXMgc2Vuc2l0aXZlIHRvIGNvbXBvc2l0aW5nLAorICAgICAgICBi
dXQgY29udmVydFRvTGF5ZXJDb29yZHMoKSBpcyBub3QgYWZmZWN0ZWQgYnkgY29tcG9zaXRpbmcg
c28gdGhpcyBjaGVjayBpcyBub3QgbmVlZGVkLAorICAgICAgICBhbmQgYWN0dWFsbHkgaGFybWZ1
bC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6T3ZlcmxhcE1hcDo6T3ZlcmxhcE1h
cCk6IFRoZSBnZW9tZXRyeSBtYXAKKyAgICAgICAgdXNlZCBmb3Igb3ZlcmxhcCB0ZXN0aW5nIHNo
b3VsZCBub3QgdXNlIFNuYXBPZmZzZXRGb3JUcmFuc2Zvcm1zLCBzbyBpbml0aWFsaXplCisgICAg
ICAgIGl0IGV4cGxpY2l0bHkgd2l0aCBqdXN0IHRoZSBVc2VUcmFuc2Zvcm1zIGZsYWcuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjpvdXRsaW5lQm91bmRzRm9yUmVwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdN
b2RlbE9iamVjdDo6b3V0bGluZUJvdW5kc0ZvclJlcGFpbnQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKFJlbmRlclNWR01vZGVsT2Jq
ZWN0KToKKwogMjAxMi0xMS0xMCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNv
bT4KIAogICAgICAgICBTYXZlIG9uZSBjYWxsIHRvIGNvbnRhaW5lckZvclJlcGFpbnQoKSB3aGVu
IHVwZGF0aW5nIGxheWVyIHBvc2l0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4
IDc2OGQ1ZDI1NjhlNTNkODE1Y2I0YjhjZDU1NzY1YzA2NTdmYTFlY2MuLjk0MjRiOGNlMGU3NWYy
YjRhYWYyM2UxZmMzOTBiNTFiZDRhMjM2YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAK
QEAgLTEyMDUsMTMgKzEyMDUsMTIgQEAgdm9pZCBGcmFtZVZpZXc6OmxheW91dChib29sIGFsbG93
U3VidHJlZSkKIAogICAgIC8vIE5vdyB1cGRhdGUgdGhlIHBvc2l0aW9ucyBvZiBhbGwgbGF5ZXJz
LgogICAgIGJlZ2luRGVmZXJyZWRSZXBhaW50cygpOwotICAgIGJvb2wgaGFzTGF5ZXJPZmZzZXQ7
Ci0gICAgTGF5b3V0UG9pbnQgb2Zmc2V0RnJvbVJvb3QgPSBsYXllci0+Y29tcHV0ZU9mZnNldEZy
b21Sb290KGhhc0xheWVyT2Zmc2V0KTsKICAgICBpZiAobV9kb0Z1bGxSZXBhaW50KQogICAgICAg
ICByb290LT52aWV3KCktPnJlcGFpbnQoKTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IHJp
Z2h0LCBzaW5jZSB0aGUgUmVuZGVyVmlldyBkb2Vzbid0IGZ1bGx5IGVuY29tcGFzcyB0aGUgdmlz
aWJsZUNvbnRlbnRSZWN0KCkuIEl0IGp1c3QgaGFwcGVucwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdG8gd29yayBvdXQgbW9zdCBvZiB0aGUgdGltZSwgc2luY2UgZmlyc3Qg
bGF5b3V0cyBhbmQgcHJpbnRpbmcgZG9uJ3QgaGF2ZSB5b3Ugc2Nyb2xsZWQgYW55d2hlcmUuCiAK
LSAgICBsYXllci0+dXBkYXRlTGF5ZXJQb3NpdGlvbnMoaGFzTGF5ZXJPZmZzZXQgPyAmb2Zmc2V0
RnJvbVJvb3QgOiAwLCB1cGRhdGVMYXllclBvc2l0aW9uRmxhZ3MobGF5ZXIsIHN1YnRyZWUsIG1f
ZG9GdWxsUmVwYWludCkpOworICAgIGxheWVyLT51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyTGF5
b3V0KHJvb3RSZW5kZXJlcih0aGlzKS0+bGF5ZXIoKSwgdXBkYXRlTGF5ZXJQb3NpdGlvbkZsYWdz
KGxheWVyLCBzdWJ0cmVlLCBtX2RvRnVsbFJlcGFpbnQpKTsKKwogICAgIGVuZERlZmVycmVkUmVw
YWludHMoKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggZjJmYjM3OGY4Yzk1YWI5NTE5YjdiMTc1NTI3
ODczOWE0YjdhMzIzZC4uMjEwMmUxNjllOTk0ZDE1ZjUzYWQ3YWM2YTVjY2QyZGI2NjczZmJkMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTQ0OCwxNiArNDQ4LDE2
IEBAIEZsb2F0UXVhZCBSZW5kZXJCb3g6OmFic29sdXRlQ29udGVudFF1YWQoKSBjb25zdAogICAg
IHJldHVybiBsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChyZWN0KSk7CiB9CiAKLUxheW91
dFJlY3QgUmVuZGVyQm94OjpvdXRsaW5lQm91bmRzRm9yUmVwYWludChjb25zdCBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBMYXlvdXRQb2ludCogY2FjaGVkT2Zmc2V0
VG9SZXBhaW50Q29udGFpbmVyKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6Om91dGxpbmVC
b3VuZHNGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250
YWluZXIsIGNvbnN0IFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCkgY29uc3QKIHsKICAg
ICBMYXlvdXRSZWN0IGJveCA9IGJvcmRlckJvdW5kaW5nQm94KCk7CiAgICAgYWRqdXN0UmVjdEZv
ck91dGxpbmVBbmRTaGFkb3coYm94KTsKIAotICAgIEZsb2F0UXVhZCBjb250YWluZXJSZWxhdGl2
ZVF1YWQgPSBGbG9hdFJlY3QoYm94KTsKLSAgICBpZiAoY2FjaGVkT2Zmc2V0VG9SZXBhaW50Q29u
dGFpbmVyKQotICAgICAgICBjb250YWluZXJSZWxhdGl2ZVF1YWQubW92ZShjYWNoZWRPZmZzZXRU
b1JlcGFpbnRDb250YWluZXItPngoKSwgY2FjaGVkT2Zmc2V0VG9SZXBhaW50Q29udGFpbmVyLT55
KCkpOworICAgIEZsb2F0UXVhZCBjb250YWluZXJSZWxhdGl2ZVF1YWQ7CisgICAgaWYgKGdlb21l
dHJ5TWFwKQorICAgICAgICBjb250YWluZXJSZWxhdGl2ZVF1YWQgPSBnZW9tZXRyeU1hcC0+bWFw
VG9Db250YWluZXIoYm94LCByZXBhaW50Q29udGFpbmVyKTsKICAgICBlbHNlCi0gICAgICAgIGNv
bnRhaW5lclJlbGF0aXZlUXVhZCA9IGxvY2FsVG9Db250YWluZXJRdWFkKGNvbnRhaW5lclJlbGF0
aXZlUXVhZCwgcmVwYWludENvbnRhaW5lcik7CisgICAgICAgIGNvbnRhaW5lclJlbGF0aXZlUXVh
ZCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChib3gpLCByZXBhaW50Q29udGFpbmVy
KTsKIAogICAgIGJveCA9IGNvbnRhaW5lclJlbGF0aXZlUXVhZC5lbmNsb3NpbmdCb3VuZGluZ0Jv
eCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggZTVkMWM4MzA2YjVj
YjgzYzNlZDI0YzcwNjMxYzgyOGVkYjJjMjU0YS4uNDkyN2ExMTE0YjE2NzJiOTU0NTRjMmZmYWQz
ZjFlOTZiMWM2NTZkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtMTU0
LDcgKzE1NCw3IEBAIHB1YmxpYzoKICAgICBMYXlvdXRSZWN0IGNvbXB1dGVkQ1NTQ29udGVudEJv
eFJlY3QoKSBjb25zdCB7IHJldHVybiBMYXlvdXRSZWN0KGJvcmRlckxlZnQoKSArIGNvbXB1dGVk
Q1NTUGFkZGluZ0xlZnQoKSwgYm9yZGVyVG9wKCkgKyBjb21wdXRlZENTU1BhZGRpbmdUb3AoKSwg
Y2xpZW50V2lkdGgoKSAtIGNvbXB1dGVkQ1NTUGFkZGluZ0xlZnQoKSAtIGNvbXB1dGVkQ1NTUGFk
ZGluZ1JpZ2h0KCksIGNsaWVudEhlaWdodCgpIC0gY29tcHV0ZWRDU1NQYWRkaW5nVG9wKCkgLSBj
b21wdXRlZENTU1BhZGRpbmdCb3R0b20oKSk7IH0KIAogICAgIC8vIEJvdW5kcyBvZiB0aGUgb3V0
bGluZSBib3ggaW4gYWJzb2x1dGUgY29vcmRzLiBSZXNwZWN0cyB0cmFuc2Zvcm1zCi0gICAgdmly
dHVhbCBMYXlvdXRSZWN0IG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVy
TW9kZWxPYmplY3QqIC8qcmVwYWludENvbnRhaW5lciovLCBMYXlvdXRQb2ludCogY2FjaGVkT2Zm
c2V0VG9SZXBhaW50Q29udGFpbmVyKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIExheW91
dFJlY3Qgb3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCogLypyZXBhaW50Q29udGFpbmVyKi8sIGNvbnN0IFJlbmRlckdlb21ldHJ5TWFwKikgY29uc3Qg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRS
ZWN0PiYsIGNvbnN0IExheW91dFBvaW50Jik7CiAKICAgICAvLyBVc2UgdGhpcyB3aXRoIGNhdXRp
b24hIE5vIHR5cGUgY2hlY2tpbmcgaXMgZG9uZSEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyR2VvbWV0cnlNYXAuY3BwCmluZGV4IDVhNmE2OWQ5ZGJlODFiY2E0Mjc2ZWEwZjdl
YzA0NzQzZWY0YzEzOGQuLmRmMzVhMWIyN2I1N2E4YWQ3M2RmNjM5NzQxYTMwYjBkYTJmMDkzNWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdlb21ldHJ5TWFwLmNwcApA
QCAtMzMsMTEgKzMzLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVuZGVyR2VvbWV0
cnlNYXA6OlJlbmRlckdlb21ldHJ5TWFwKCkKK1JlbmRlckdlb21ldHJ5TWFwOjpSZW5kZXJHZW9t
ZXRyeU1hcChNYXBDb29yZGluYXRlc0ZsYWdzIGZsYWdzKQogICAgIDogbV9pbnNlcnRpb25Qb3Np
dGlvbihub3RGb3VuZCkKICAgICAsIG1fbm9uVW5pZm9ybVN0ZXBzQ291bnQoMCkKICAgICAsIG1f
dHJhbnNmb3JtZWRTdGVwc0NvdW50KDApCiAgICAgLCBtX2ZpeGVkU3RlcHNDb3VudCgwKQorICAg
ICwgbV9tYXBDb29yZGluYXRlc0ZsYWdzKGZsYWdzKQogewogfQogCkBAIC00NSw2MiArNDYsMzAg
QEAgUmVuZGVyR2VvbWV0cnlNYXA6On5SZW5kZXJHZW9tZXRyeU1hcCgpCiB7CiB9CiAKLUZsb2F0
UG9pbnQgUmVuZGVyR2VvbWV0cnlNYXA6OmFic29sdXRlUG9pbnQoY29uc3QgRmxvYXRQb2ludCYg
cCkgY29uc3QKLXsKLSAgICBGbG9hdFBvaW50IHJlc3VsdDsKLSAgICAKLSAgICBpZiAoIWhhc0Zp
eGVkUG9zaXRpb25TdGVwKCkgJiYgIWhhc1RyYW5zZm9ybVN0ZXAoKSAmJiAhaGFzTm9uVW5pZm9y
bVN0ZXAoKSkKLSAgICAgICAgcmVzdWx0ID0gcCArIG1fYWNjdW11bGF0ZWRPZmZzZXQ7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIFRyYW5zZm9ybVN0YXRlIHRyYW5zZm9ybVN0YXRlKFRyYW5zZm9ybVN0
YXRlOjpBcHBseVRyYW5zZm9ybURpcmVjdGlvbiwgcCk7Ci0gICAgICAgIG1hcFRvQWJzb2x1dGUo
dHJhbnNmb3JtU3RhdGUpOwotICAgICAgICByZXN1bHQgPSB0cmFuc2Zvcm1TdGF0ZS5sYXN0UGxh
bmFyUG9pbnQoKTsKLSAgICB9Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgRmxvYXRQb2lu
dCByZW5kZXJlck1hcHBlZFJlc3VsdCA9IG1fbWFwcGluZy5sYXN0KCkubV9yZW5kZXJlci0+bG9j
YWxUb0Fic29sdXRlKHAsIFVzZVRyYW5zZm9ybXMgfCBTbmFwT2Zmc2V0Rm9yVHJhbnNmb3Jtcyk7
Ci0gICAgQVNTRVJUKHJlbmRlcmVyTWFwcGVkUmVzdWx0ID09IHJlc3VsdCk7Ci0jZW5kaWYKLQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUZsb2F0UmVjdCBSZW5kZXJHZW9tZXRyeU1hcDo6YWJz
b2x1dGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICBGbG9hdFJlY3Qg
cmVzdWx0OwotICAgIAotICAgIGlmICghaGFzRml4ZWRQb3NpdGlvblN0ZXAoKSAmJiAhaGFzVHJh
bnNmb3JtU3RlcCgpICYmICFoYXNOb25Vbmlmb3JtU3RlcCgpKSB7Ci0gICAgICAgIHJlc3VsdCA9
IHJlY3Q7Ci0gICAgICAgIHJlc3VsdC5tb3ZlKG1fYWNjdW11bGF0ZWRPZmZzZXQpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIFRyYW5zZm9ybVN0YXRlIHRyYW5zZm9ybVN0YXRlKFRyYW5zZm9ybVN0
YXRlOjpBcHBseVRyYW5zZm9ybURpcmVjdGlvbiwgcmVjdC5jZW50ZXIoKSwgcmVjdCk7Ci0gICAg
ICAgIG1hcFRvQWJzb2x1dGUodHJhbnNmb3JtU3RhdGUpOwotICAgICAgICByZXN1bHQgPSB0cmFu
c2Zvcm1TdGF0ZS5sYXN0UGxhbmFyUXVhZCgpLmJvdW5kaW5nQm94KCk7Ci0gICAgfQotCi0jaWYg
IUFTU0VSVF9ESVNBQkxFRAotICAgIEZsb2F0UmVjdCByZW5kZXJlck1hcHBlZFJlc3VsdCA9IG1f
bWFwcGluZy5sYXN0KCkubV9yZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChyZWN0KS5ib3Vu
ZGluZ0JveCgpOwotICAgIC8vIEluc3BlY3RvciBjcmVhdGVzIHJlbmRlcmVycyB3aXRoIG5lZ2F0
aXZlIHdpZHRoIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcxOTQ+
LgotICAgIC8vIFRha2luZyBGbG9hdFF1YWQgYm91bmRzIGF2b2lkcyBzcHVyaW91cyBhc3NlcnRp
b25zIGJlY2F1c2Ugb2YgdGhhdC4KLSAgICBBU1NFUlQoZW5jbG9zaW5nSW50UmVjdChyZW5kZXJl
ck1hcHBlZFJlc3VsdCkgPT0gZW5jbG9zaW5nSW50UmVjdChGbG9hdFF1YWQocmVzdWx0KS5ib3Vu
ZGluZ0JveCgpKSk7Ci0jZW5kaWYKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgUmVu
ZGVyR2VvbWV0cnlNYXA6Om1hcFRvQWJzb2x1dGUoVHJhbnNmb3JtU3RhdGUmIHRyYW5zZm9ybVN0
YXRlKSBjb25zdAordm9pZCBSZW5kZXJHZW9tZXRyeU1hcDo6bWFwVG9Db250YWluZXIoVHJhbnNm
b3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBj
b250YWluZXIpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIG1hcHBpbmcgaW5jbHVkZXMgc29tZXRo
aW5nIGxpa2UgY29sdW1ucywgd2UgaGF2ZSB0byBnbyB2aWEgcmVuZGVyZXJzLgogICAgIGlmICho
YXNOb25Vbmlmb3JtU3RlcCgpKSB7Ci0gICAgICAgIG1fbWFwcGluZy5sYXN0KCkubV9yZW5kZXJl
ci0+bWFwTG9jYWxUb0NvbnRhaW5lcigwLCB0cmFuc2Zvcm1TdGF0ZSwgVXNlVHJhbnNmb3JtcyB8
IEFwcGx5Q29udGFpbmVyRmxpcCB8IFNuYXBPZmZzZXRGb3JUcmFuc2Zvcm1zKTsKKyAgICAgICAg
bV9tYXBwaW5nLmxhc3QoKS5tX3JlbmRlcmVyLT5tYXBMb2NhbFRvQ29udGFpbmVyKGNvbnRhaW5l
ciwgdHJhbnNmb3JtU3RhdGUsIEFwcGx5Q29udGFpbmVyRmxpcCB8IG1fbWFwQ29vcmRpbmF0ZXNG
bGFncyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgYm9vbCBpbkZpeGVkID0g
ZmFsc2U7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGJvb2wgZm91bmRDb250YWluZXIgPSAh
Y29udGFpbmVyIHx8IChtX21hcHBpbmcuc2l6ZSgpICYmIG1fbWFwcGluZ1swXS5tX3JlbmRlcmVy
ID09IGNvbnRhaW5lcik7CisjZW5kaWYKIAogICAgIGZvciAoaW50IGkgPSBtX21hcHBpbmcuc2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgY29uc3QgUmVuZGVyR2VvbWV0cnlNYXBT
dGVwJiBjdXJyZW50U3RlcCA9IG1fbWFwcGluZ1tpXTsKIAorICAgICAgICAvLyBJZiBjb250YWlu
ZXIgaXMgdGhlIFJlbmRlclZpZXcgKHN0ZXAgMCkgd2Ugd2FudCB0byBhcHBseSBpdHMgc2Nyb2xs
IG9mZnNldC4KKyAgICAgICAgaWYgKGkgPiAwICYmIGN1cnJlbnRTdGVwLm1fcmVuZGVyZXIgPT0g
Y29udGFpbmVyKSB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAgICAgZm91bmRDb250
YWluZXIgPSB0cnVlOworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAg
ICAgICAgIC8vIElmIHRoaXMgYm94IGhhcyBhIHRyYW5zZm9ybSwgaXQgYWN0cyBhcyBhIGZpeGVk
IHBvc2l0aW9uIGNvbnRhaW5lcgogICAgICAgICAvLyBmb3IgZml4ZWQgZGVzY2VuZGFudHMsIHdo
aWNoIHByZXZlbnRzIHRoZSBwcm9wYWdhdGlvbiBvZiAnZml4ZWQnCiAgICAgICAgIC8vIHVubGVz
cyB0aGUgbGF5ZXIgaXRzZWxmIGlzIGFsc28gZml4ZWQgcG9zaXRpb24uCkBAIC0xMTAsNyArNzks
OCBAQCB2b2lkIFJlbmRlckdlb21ldHJ5TWFwOjptYXBUb0Fic29sdXRlKFRyYW5zZm9ybVN0YXRl
JiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3QKICAgICAgICAgICAgIGluRml4ZWQgPSB0cnVlOwogCiAg
ICAgICAgIGlmICghaSkgewotICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGVwLm1fdHJhbnNmb3Jt
KQorICAgICAgICAgICAgLy8gQSBudWxsIGNvbnRhaW5lciBpbmRpY2F0ZXMgbWFwcGluZyB0aHJv
dWdoIHRoZSBSZW5kZXJWaWV3LCBzbyBpbmNsdWRpbmcgaXRzIHRyYW5zZm9ybSAodGhlIHBhZ2Ug
c2NhbGUpLgorICAgICAgICAgICAgaWYgKCFjb250YWluZXIgJiYgY3VycmVudFN0ZXAubV90cmFu
c2Zvcm0pCiAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RhdGUuYXBwbHlUcmFuc2Zvcm0oKmN1
cnJlbnRTdGVwLm1fdHJhbnNmb3JtLmdldCgpKTsKIAogICAgICAgICAgICAgLy8gVGhlIHJvb3Qg
Z2V0cyBzcGVjaWFsIHRyZWF0bWVudCBmb3IgZml4ZWQgcG9zaXRpb24KQEAgLTEyNSw5ICs5NSw1
MyBAQCB2b2lkIFJlbmRlckdlb21ldHJ5TWFwOjptYXBUb0Fic29sdXRlKFRyYW5zZm9ybVN0YXRl
JiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3QKICAgICAgICAgfQogICAgIH0KIAorICAgIEFTU0VSVChm
b3VuZENvbnRhaW5lcik7CiAgICAgdHJhbnNmb3JtU3RhdGUuZmxhdHRlbigpOyAgICAKIH0KIAor
RmxvYXRQb2ludCBSZW5kZXJHZW9tZXRyeU1hcDo6bWFwVG9Db250YWluZXIoY29uc3QgRmxvYXRQ
b2ludCYgcCwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY29udGFpbmVyKSBjb25zdAor
eworICAgIEZsb2F0UG9pbnQgcmVzdWx0OworICAgIAorICAgIGlmICghaGFzRml4ZWRQb3NpdGlv
blN0ZXAoKSAmJiAhaGFzVHJhbnNmb3JtU3RlcCgpICYmICFoYXNOb25Vbmlmb3JtU3RlcCgpICYm
ICghY29udGFpbmVyIHx8IChtX21hcHBpbmcuc2l6ZSgpICYmIGNvbnRhaW5lciA9PSBtX21hcHBp
bmdbMF0ubV9yZW5kZXJlcikpKQorICAgICAgICByZXN1bHQgPSBwICsgbV9hY2N1bXVsYXRlZE9m
ZnNldDsKKyAgICBlbHNlIHsKKyAgICAgICAgVHJhbnNmb3JtU3RhdGUgdHJhbnNmb3JtU3RhdGUo
VHJhbnNmb3JtU3RhdGU6OkFwcGx5VHJhbnNmb3JtRGlyZWN0aW9uLCBwKTsKKyAgICAgICAgbWFw
VG9Db250YWluZXIodHJhbnNmb3JtU3RhdGUsIGNvbnRhaW5lcik7CisgICAgICAgIHJlc3VsdCA9
IHRyYW5zZm9ybVN0YXRlLmxhc3RQbGFuYXJQb2ludCgpOworICAgIH0KKworI2lmICFBU1NFUlRf
RElTQUJMRUQKKyAgICBGbG9hdFBvaW50IHJlbmRlcmVyTWFwcGVkUmVzdWx0ID0gbV9tYXBwaW5n
Lmxhc3QoKS5tX3JlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUocCwgbV9tYXBDb29yZGluYXRlc0Zs
YWdzKTsKKyAgICBBU1NFUlQocm91bmRlZEludFBvaW50KHJlbmRlcmVyTWFwcGVkUmVzdWx0KSA9
PSByb3VuZGVkSW50UG9pbnQocmVzdWx0KSk7CisjZW5kaWYKKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK0Zsb2F0UXVhZCBSZW5kZXJHZW9tZXRyeU1hcDo6bWFwVG9Db250YWluZXIoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjb250YWluZXIp
IGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAgICAKKyAgICBpZiAoIWhhc0ZpeGVk
UG9zaXRpb25TdGVwKCkgJiYgIWhhc1RyYW5zZm9ybVN0ZXAoKSAmJiAhaGFzTm9uVW5pZm9ybVN0
ZXAoKSAmJiAoIWNvbnRhaW5lciB8fCAobV9tYXBwaW5nLnNpemUoKSAmJiBjb250YWluZXIgPT0g
bV9tYXBwaW5nWzBdLm1fcmVuZGVyZXIpKSkgeworICAgICAgICByZXN1bHQgPSByZWN0OworICAg
ICAgICByZXN1bHQubW92ZShtX2FjY3VtdWxhdGVkT2Zmc2V0KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBUcmFuc2Zvcm1TdGF0ZSB0cmFuc2Zvcm1TdGF0ZShUcmFuc2Zvcm1TdGF0ZTo6QXBwbHlU
cmFuc2Zvcm1EaXJlY3Rpb24sIHJlY3QuY2VudGVyKCksIHJlY3QpOworICAgICAgICBtYXBUb0Nv
bnRhaW5lcih0cmFuc2Zvcm1TdGF0ZSwgY29udGFpbmVyKTsKKyAgICAgICAgcmVzdWx0ID0gdHJh
bnNmb3JtU3RhdGUubGFzdFBsYW5hclF1YWQoKS5ib3VuZGluZ0JveCgpOworICAgIH0KKworI2lm
ICFBU1NFUlRfRElTQUJMRUQKKyAgICBGbG9hdFJlY3QgcmVuZGVyZXJNYXBwZWRSZXN1bHQgPSBt
X21hcHBpbmcubGFzdCgpLm1fcmVuZGVyZXItPmxvY2FsVG9Db250YWluZXJRdWFkKHJlY3QsIGNv
bnRhaW5lciwgbV9tYXBDb29yZGluYXRlc0ZsYWdzKS5ib3VuZGluZ0JveCgpOworICAgIC8vIElu
c3BlY3RvciBjcmVhdGVzIHJlbmRlcmVycyB3aXRoIG5lZ2F0aXZlIHdpZHRoIDxodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcxOTQ+LgorICAgIC8vIFRha2luZyBGbG9h
dFF1YWQgYm91bmRzIGF2b2lkcyBzcHVyaW91cyBhc3NlcnRpb25zIGJlY2F1c2Ugb2YgdGhhdC4K
KyAgICBBU1NFUlQoZW5jbG9zaW5nSW50UmVjdChyZW5kZXJlck1hcHBlZFJlc3VsdCkgPT0gZW5j
bG9zaW5nSW50UmVjdChGbG9hdFF1YWQocmVzdWx0KS5ib3VuZGluZ0JveCgpKSk7CisjZW5kaWYK
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgUmVuZGVyR2VvbWV0cnlNYXA6OnB1c2hN
YXBwaW5nc1RvQW5jZXN0b3IoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JSZW5kZXJlcikKIHsKICAgICAvLyBXZSBuZWVk
IHRvIHB1c2ggbWFwcGluZ3MgaW4gcmV2ZXJzZSBvcmRlciBoZXJlLCBzbyBkbyBpbnNlcnRpb25z
IHJhdGhlciB0aGFuIGFwcGVuZHMuCkBAIC0xNDUsNyArMTU5LDggQEAgc3RhdGljIGJvb2wgY2Fu
TWFwVmlhTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKQogICAgIGlmIChzdHlsZS0+cG9z
aXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uIHx8IHN0eWxlLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5n
TW9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKGxheWVyLT5yZW5k
ZXJlcigpLT5oYXNDb2x1bW5zKCkgfHwgbGF5ZXItPnJlbmRlcmVyKCktPmhhc1RyYW5zZm9ybSgp
KQorICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlbmRlcmVyID0gbGF5ZXItPnJlbmRlcmVy
KCk7CisgICAgaWYgKHJlbmRlcmVyLT5oYXNDb2x1bW5zKCkgfHwgcmVuZGVyZXItPmhhc1RyYW5z
Zm9ybSgpIHx8IHJlbmRlcmVyLT5pc1JlbmRlckZsb3dUaHJlYWQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAjaWYgRU5BQkxFKFNWRykKQEAgLTE2Niw5ICsxODEsMTYgQEAgdm9pZCBSZW5k
ZXJHZW9tZXRyeU1hcDo6cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcihjb25zdCBSZW5kZXJMYXllciog
bGF5ZXIsIGNvbnN0IFIKICAgICAgICAgY2FuQ29udmVydEluTGF5ZXJUcmVlID0gY2FuTWFwVmlh
TGF5ZXIoY3VycmVudCk7CiAKICAgICBpZiAoY2FuQ29udmVydEluTGF5ZXJUcmVlKSB7Ci0gICAg
ICAgIFRlbXBvcmFyeUNoYW5nZTxzaXplX3Q+IHBvc2l0aW9uQ2hhbmdlKG1faW5zZXJ0aW9uUG9z
aXRpb24sIG1fbWFwcGluZy5zaXplKCkpOwogICAgICAgICBMYXlvdXRQb2ludCBsYXllck9mZnNl
dDsKICAgICAgICAgbGF5ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRzKGFuY2VzdG9yTGF5ZXIsIGxh
eWVyT2Zmc2V0KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBSZW5kZXJWaWV3IG11c3QgYmUg
cHVzaGVkIGZpcnN0LgorICAgICAgICBpZiAoIW1fbWFwcGluZy5zaXplKCkpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChhbmNlc3RvckxheWVyLT5yZW5kZXJlcigpLT5pc1JlbmRlclZpZXcoKSk7Cisg
ICAgICAgICAgICBwdXNoTWFwcGluZ3NUb0FuY2VzdG9yKGFuY2VzdG9yTGF5ZXItPnJlbmRlcmVy
KCksIDApOworICAgICAgICB9CisKKyAgICAgICAgVGVtcG9yYXJ5Q2hhbmdlPHNpemVfdD4gcG9z
aXRpb25DaGFuZ2UobV9pbnNlcnRpb25Qb3NpdGlvbiwgbV9tYXBwaW5nLnNpemUoKSk7CiAgICAg
ICAgIHB1c2gocmVuZGVyZXIsIHRvTGF5b3V0U2l6ZShsYXllck9mZnNldCksIC8qYWNjdW11bGF0
aW5nVHJhbnNmb3JtKi8gdHJ1ZSwgLyppc05vblVuaWZvcm0qLyBmYWxzZSwgLyppc0ZpeGVkUG9z
aXRpb24qLyBmYWxzZSwgLypoYXNUcmFuc2Zvcm0qLyBmYWxzZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR2VvbWV0
cnlNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5oCmlu
ZGV4IDE1ZGM4ODRkM2RhMTFlYTNhMTc1ODA3ZTVhOTQ4MDA2YjA1NzE2ZWIuLjA4YjI3NzkxMzFi
M2FkNDc0ZDAxN2U1YTZkNjFlMmExMTIzNmE5MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJHZW9tZXRyeU1hcC5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRmxv
YXRRdWFkLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIkxheW91dFNpemUuaCIK
KyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIApAQCAtMzcsNyArMzgsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlckxheWVyOwogY2xhc3MgUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdDsKLWNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlclZpZXc7CiBjbGFzcyBU
cmFuc2Zvcm1TdGF0ZTsKIApAQCAtNzQsMTEgKzc0LDI0IEBAIHN0cnVjdCBSZW5kZXJHZW9tZXRy
eU1hcFN0ZXAgewogY2xhc3MgUmVuZGVyR2VvbWV0cnlNYXAgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFJlbmRlckdlb21ldHJ5TWFwKTsKIHB1YmxpYzoKLSAgICBSZW5kZXJHZW9tZXRyeU1h
cCgpOworICAgIFJlbmRlckdlb21ldHJ5TWFwKE1hcENvb3JkaW5hdGVzRmxhZ3MgPSBVc2VUcmFu
c2Zvcm1zIHwgU25hcE9mZnNldEZvclRyYW5zZm9ybXMpOwogICAgIH5SZW5kZXJHZW9tZXRyeU1h
cCgpOwogCi0gICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBj
b25zdDsKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0
OworICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1hcFRvQ29udGFpbmVyKHAsIDApOworICAgIH0KKwor
ICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1hcFRvQ29udGFpbmVyKHJlY3QsIDApLmJvdW5kaW5nQm94
KCk7CisgICAgfQorCisgICAgLy8gTWFwIHRvIGEgY29udGFpbmVyLiBXaWxsIGFzc2VydCB0aGF0
IHRoZSBjb250YWluZXIgaGFzIGJlZW4gcHVzaGVkIG9udG8gdGhpcyBtYXAuCisgICAgLy8gQSBu
dWxsIGNvbnRhaW5lciBtYXBzIHRocm91Z2ggdGhlIFJlbmRlclZpZXcgKGluY2x1ZGluZyBpdHMg
c2NhbGUgdHJhbnNmb3JtLCBpZiBhbnkpLgorICAgIC8vIElmIHRoZSBjb250YWluZXIgaXMgdGhl
IFJlbmRlclZpZXcsIHRoZSBzY3JvbGwgb2Zmc2V0IGlzIGFwcGxpZWQsIGJ1dCBub3QgdGhlIHNj
YWxlLgorICAgIEZsb2F0UG9pbnQgbWFwVG9Db250YWluZXIoY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqKSBjb25zdDsKKyAgICBGbG9hdFF1YWQgbWFwVG9D
b250YWluZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCop
IGNvbnN0OwogICAgIAogICAgIC8vIENhbGxlZCBieSBjb2RlIHdhbGtpbmcgdGhlIHJlbmRlcmVy
IG9yIGxheWVyIHRyZWVzLgogICAgIHZvaWQgcHVzaE1hcHBpbmdzVG9BbmNlc3Rvcihjb25zdCBS
ZW5kZXJMYXllciosIGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyKTsKQEAgLTk3LDcg
KzExMCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHB1c2hWaWV3KGNvbnN0IFJlbmRlclZpZXcqLCBj
b25zdCBMYXlvdXRTaXplJiBzY3JvbGxPZmZzZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
KiA9IDApOwogCiBwcml2YXRlOgotICAgIHZvaWQgbWFwVG9BYnNvbHV0ZShUcmFuc2Zvcm1TdGF0
ZSYpIGNvbnN0OworICAgIHZvaWQgbWFwVG9Db250YWluZXIoVHJhbnNmb3JtU3RhdGUmLCBjb25z
dCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjb250YWluZXIgPSAwKSBjb25zdDsKIAogICAgIHZv
aWQgc3RlcEluc2VydGVkKGNvbnN0IFJlbmRlckdlb21ldHJ5TWFwU3RlcCYpOwogICAgIHZvaWQg
c3RlcFJlbW92ZWQoY29uc3QgUmVuZGVyR2VvbWV0cnlNYXBTdGVwJik7CkBAIC0xMTQsNiArMTI3
LDcgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9maXhlZFN0ZXBzQ291bnQ7CiAgICAgUmVuZGVyR2Vv
bWV0cnlNYXBTdGVwcyBtX21hcHBpbmc7CiAgICAgTGF5b3V0U2l6ZSBtX2FjY3VtdWxhdGVkT2Zm
c2V0OworICAgIE1hcENvb3JkaW5hdGVzRmxhZ3MgbV9tYXBDb29yZGluYXRlc0ZsYWdzOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAKaW5kZXggN2JhNGZlOGJiNjgxYWU0ZjlmODY4Nzc3YTBjYjY3OTI2NDk2NmM0OC4u
NDU2MjMyNWVlZjkxOGFhOGYxZGQ2YzQzNjg3YTRlMTdlMzUzMWRjYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC03Nyw2ICs3Nyw3IEBACiAjaW5jbHVkZSAi
UGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIKICNpbmNsdWRl
ICJSZW5kZXJGbG93VGhyZWFkLmgiCisjaW5jbHVkZSAiUmVuZGVyR2VvbWV0cnlNYXAuaCIKICNp
bmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJNYXJxdWVlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyUmVwbGljYS5oIgpAQCAtMzM0LDU1ICszMzUsMzQgQEAgTGF5b3V0UG9pbnQg
UmVuZGVyTGF5ZXI6OmNvbXB1dGVPZmZzZXRGcm9tUm9vdChib29sJiBoYXNMYXllck9mZnNldCkg
Y29uc3QKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVM
YXllclBvc2l0aW9ucyhMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QsIFVwZGF0ZUxheWVyUG9z
aXRpb25zRmxhZ3MgZmxhZ3MpCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyTGF5b3V0KGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIFVwZGF0ZUxheWVyUG9z
aXRpb25zRmxhZ3MgZmxhZ3MpCiB7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIGlmIChvZmZz
ZXRGcm9tUm9vdCkgewotICAgICAgICBib29sIGhhc0xheWVyT2Zmc2V0OwotICAgICAgICBMYXlv
dXRQb2ludCBjb21wdXRlZE9mZnNldEZyb21Sb290ID0gY29tcHV0ZU9mZnNldEZyb21Sb290KGhh
c0xheWVyT2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKGhhc0xheWVyT2Zmc2V0KTsKLSAgICAgICAg
QVNTRVJUKCpvZmZzZXRGcm9tUm9vdCA9PSBjb21wdXRlZE9mZnNldEZyb21Sb290KTsKLSAgICB9
Ci0jZW5kaWYKKyAgICBSZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1z
KTsKKyAgICBpZiAodGhpcyAhPSByb290TGF5ZXIpCisgICAgICAgIGdlb21ldHJ5TWFwLnB1c2hN
YXBwaW5nc1RvQW5jZXN0b3IocGFyZW50KCksIDApOworICAgIHVwZGF0ZUxheWVyUG9zaXRpb25z
KCZnZW9tZXRyeU1hcCwgZmxhZ3MpOworfQogCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXll
clBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIFVwZGF0ZUxheWVyUG9z
aXRpb25zRmxhZ3MgZmxhZ3MpCit7CiAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbigpOyAvLyBGb3Ig
cmVscG9zaXRpb25lZCBsYXllcnMgb3Igbm9uLXBvc2l0aW9uZWQgbGF5ZXJzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBrZWVwIGluIHN5bmMsIHNpbmNlIHdlIG1h
eSBoYXZlIHNoaWZ0ZWQgcmVsYXRpdmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRv
IG91ciBwYXJlbnQgbGF5ZXIuCi0gICAgTGF5b3V0UG9pbnQgb2xkT2Zmc2V0RnJvbVJvb3Q7Ci0g
ICAgaWYgKG9mZnNldEZyb21Sb290KSB7Ci0gICAgICAgIC8vIFdlIGNhbid0IGNhY2hlIG91ciBv
ZmZzZXQgdG8gdGhlIHJlcGFpbnQgY29udGFpbmVyIGlmIHRoZSBtYXBwaW5nIGlzIGFueXRoaW5n
IG1vcmUgY29tcGxleCB0aGFuIGEgc2ltcGxlIHRyYW5zbGF0aW9uCi0gICAgICAgIGlmICghY2Fu
VXNlQ29udmVydFRvTGF5ZXJDb29yZHMoKSkKLSAgICAgICAgICAgIG9mZnNldEZyb21Sb290ID0g
MDsgLy8gSWYgb3VyIGNhY2hlZCBvZmZzZXQgaXMgaW52YWxpZCBtYWtlIHN1cmUgaXQncyBub3Qg
cGFzc2VkIHRvIGFueSBvZiBvdXIgY2hpbGRyZW4KKyAgICBpZiAoZ2VvbWV0cnlNYXApCisgICAg
ICAgIGdlb21ldHJ5TWFwLT5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKHRoaXMsIHBhcmVudCgpKTsK
KyAgICAKKyAgICBpZiAoaGFzT3ZlcmZsb3dDb250cm9scygpKSB7CisgICAgICAgIExheW91dFBv
aW50IG9mZnNldEZyb21Sb290OworICAgICAgICBpZiAoZ2VvbWV0cnlNYXApCisgICAgICAgICAg
ICBvZmZzZXRGcm9tUm9vdCA9IExheW91dFBvaW50KGdlb21ldHJ5TWFwLT5hYnNvbHV0ZVBvaW50
KEZsb2F0UG9pbnQoKSkpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG9sZE9mZnNldEZy
b21Sb290ID0gKm9mZnNldEZyb21Sb290OwotICAgICAgICAgICAgLy8gRnJlcXVlbnRseSBvdXIg
cGFyZW50IGxheWVyJ3MgcmVuZGVyZXIgd2lsbCBiZSB0aGUgc2FtZSBhcyBvdXIgcmVuZGVyZXIn
cyBjb250YWluaW5nIGJsb2NrLiAgSW4gdGhhdCBjYXNlLAotICAgICAgICAgICAgLy8gd2UganVz
dCB1cGRhdGUgdGhlIGNhY2hlIHVzaW5nIG91ciBvZmZzZXQgdG8gb3VyIHBhcmVudCAod2hpY2gg
aXMgbV90b3BMZWZ0KS4gT3RoZXJ3aXNlLCByZWdlbmVyYXRlZCBjYWNoZWQKLSAgICAgICAgICAg
IC8vIG9mZnNldHMgdG8gdGhlIHJvb3QgZnJvbSB0aGUgcmVuZGVyIHRyZWUuCi0gICAgICAgICAg
ICBpZiAoIW1fcGFyZW50IHx8IG1fcGFyZW50LT5yZW5kZXJlcigpID09IHJlbmRlcmVyKCktPmNv
bnRhaW5pbmdCbG9jaygpKQotICAgICAgICAgICAgICAgIG9mZnNldEZyb21Sb290LT5tb3ZlKG1f
dG9wTGVmdC54KCksIG1fdG9wTGVmdC55KCkpOyAvLyBGYXN0IGNhc2UKLSAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgIExheW91dFBvaW50IG9mZnNldDsKLSAgICAgICAgICAgICAg
ICBjb252ZXJ0VG9MYXllckNvb3Jkcyhyb290KCksIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAg
Km9mZnNldEZyb21Sb290ID0gb2Zmc2V0OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
RklYTUU6IEl0IGxvb2tzIHN1c3BpY2lvdXMgdG8gY2FsbCBjb252ZXJ0VG9MYXllckNvb3JkcyBo
ZXJlCisgICAgICAgICAgICAvLyBhcyBjYW5Vc2VDb252ZXJ0VG9MYXllckNvb3JkcyBtYXkgYmUg
dHJ1ZSBmb3IgYW4gYW5jZXN0b3IgbGF5ZXIuCisgICAgICAgICAgICBjb252ZXJ0VG9MYXllckNv
b3Jkcyhyb290KCksIG9mZnNldEZyb21Sb290KTsKICAgICAgICAgfQorICAgICAgICBwb3NpdGlv
bk92ZXJmbG93Q29udHJvbHModG9TaXplKHJvdW5kZWRJbnRQb2ludChvZmZzZXRGcm9tUm9vdCkp
KTsKICAgICB9Ci0KLSAgICBMYXlvdXRQb2ludCBvZmZzZXQ7Ci0gICAgaWYgKG9mZnNldEZyb21S
b290KSB7Ci0gICAgICAgIG9mZnNldCA9ICpvZmZzZXRGcm9tUm9vdDsKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgICAgIExheW91dFBvaW50IGNvbXB1dGVkT2Zmc2V0RnJvbVJvb3Q7Ci0gICAgICAgIGNv
bnZlcnRUb0xheWVyQ29vcmRzKHJvb3QoKSwgY29tcHV0ZWRPZmZzZXRGcm9tUm9vdCk7Ci0gICAg
ICAgIEFTU0VSVChvZmZzZXQgPT0gY29tcHV0ZWRPZmZzZXRGcm9tUm9vdCk7Ci0jZW5kaWYKLSAg
ICB9IGVsc2UgewotICAgICAgICAvLyBGSVhNRTogSXQgbG9va3Mgc3VzcGljaW91cyB0byBjYWxs
IGNvbnZlcnRUb0xheWVyQ29vcmRzIGhlcmUKLSAgICAgICAgLy8gYXMgY2FuVXNlQ29udmVydFRv
TGF5ZXJDb29yZHMgbWF5IGJlIHRydWUgZm9yIGFuIGFuY2VzdG9yIGxheWVyLgotICAgICAgICBj
b252ZXJ0VG9MYXllckNvb3Jkcyhyb290KCksIG9mZnNldCk7Ci0gICAgfQotICAgIHBvc2l0aW9u
T3ZlcmZsb3dDb250cm9scyh0b1NpemUocm91bmRlZEludFBvaW50KG9mZnNldCkpKTsKLQorICAg
IAogICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwogCiAgICAgaWYgKGZsYWdz
ICYgVXBkYXRlUGFnaW5hdGlvbikKQEAgLTQwMSw3ICszODEsNyBAQCB2b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9ucyhMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QsIFVwZGF0
ZUxheWVyUAogICAgICAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVy
ID0gcmVuZGVyZXIoKS0+Y29udGFpbmVyRm9yUmVwYWludCgpOwogICAgICAgICBMYXlvdXRSZWN0
IG9sZFJlcGFpbnRSZWN0ID0gbV9yZXBhaW50UmVjdDsKICAgICAgICAgTGF5b3V0UmVjdCBvbGRP
dXRsaW5lQm94ID0gbV9vdXRsaW5lQm94OwotICAgICAgICBjb21wdXRlUmVwYWludFJlY3RzKHJl
cGFpbnRDb250YWluZXIsIG9mZnNldEZyb21Sb290KTsKKyAgICAgICAgY29tcHV0ZVJlcGFpbnRS
ZWN0cyhyZXBhaW50Q29udGFpbmVyLCBnZW9tZXRyeU1hcCk7CiAKICAgICAgICAgLy8gRklYTUU6
IFNob3VsZCBBU1NFUlQgdGhhdCB2YWx1ZSBjYWxjdWxhdGVkIGZvciBtX291dGxpbmVCb3ggdXNp
bmcgdGhlIGNhY2hlZCBvZmZzZXQgaXMgdGhlIHNhbWUKICAgICAgICAgLy8gYXMgdGhlIHZhbHVl
IG5vdCB1c2luZyB0aGUgY2FjaGVkIG9mZnNldCwgYnV0IHdlIGNhbid0IGR1ZSB0byBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcwNDgKQEAgLTQzNSw3ICs0MTUsNyBA
QCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhMYXlvdXRQb2ludCogb2Zm
c2V0RnJvbVJvb3QsIFVwZGF0ZUxheWVyUAogICAgICAgICBmbGFncyB8PSBVcGRhdGVQYWdpbmF0
aW9uOwogCiAgICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBjaGlsZC0+dXBkYXRlTGF5
ZXJQb3NpdGlvbnMob2Zmc2V0RnJvbVJvb3QsIGZsYWdzKTsKKyAgICAgICAgY2hpbGQtPnVwZGF0
ZUxheWVyUG9zaXRpb25zKGdlb21ldHJ5TWFwLCBmbGFncyk7CiAKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKChmbGFncyAmIFVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJz
KSAmJiBpc0NvbXBvc2l0ZWQoKSkKQEAgLTQ1MSw4ICs0MzEsOCBAQCB2b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9ucyhMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QsIFVwZGF0
ZUxheWVyUAogICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdN
YXJxdWVlUG9zaXRpb247CiAgICAgfQogCi0gICAgaWYgKG9mZnNldEZyb21Sb290KQotICAgICAg
ICAqb2Zmc2V0RnJvbVJvb3QgPSBvbGRPZmZzZXRGcm9tUm9vdDsKKyAgICBpZiAoZ2VvbWV0cnlN
YXApCisgICAgICAgIGdlb21ldHJ5TWFwLT5wb3BNYXBwaW5nc1RvQW5jZXN0b3IocGFyZW50KCkp
OwogfQogCiBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpyZXBhaW50UmVjdEluY2x1ZGluZ05vbkNv
bXBvc2l0aW5nRGVzY2VuZGFudHMoKSBjb25zdApAQCAtNDkyLDEyICs0NzIsMTIgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6ZGlydHlBbmNlc3RvckNoYWluSGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5k
YW50U3RhdHVzKCkKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OmNvbXB1dGVSZXBhaW50
UmVjdHMoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgTGF5
b3V0UG9pbnQqIG9mZnNldEZyb21Sb290KQordm9pZCBSZW5kZXJMYXllcjo6Y29tcHV0ZVJlcGFp
bnRSZWN0cyhjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBj
b25zdCBSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXApCiB7CiAgICAgQVNTRVJUKCFtX3Zp
c2libGVDb250ZW50U3RhdHVzRGlydHkpOwogCiAgICAgbV9yZXBhaW50UmVjdCA9IHJlbmRlcmVy
KCktPmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIpOwotICAg
IG1fb3V0bGluZUJveCA9IHJlbmRlcmVyKCktPm91dGxpbmVCb3VuZHNGb3JSZXBhaW50KHJlcGFp
bnRDb250YWluZXIsIG9mZnNldEZyb21Sb290KTsKKyAgICBtX291dGxpbmVCb3ggPSByZW5kZXJl
cigpLT5vdXRsaW5lQm91bmRzRm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyLCBnZW9tZXRyeU1h
cCk7CiB9CiAKIApAQCAtNTIxLDcgKzUwMSwxNiBAQCB2b2lkIFJlbmRlckxheWVyOjpjbGVhclJl
cGFpbnRSZWN0cygpCiAgICAgbV9vdXRsaW5lQm94ID0gSW50UmVjdCgpOwogfQogCi12b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFVwZGF0ZUxheWVyUG9z
aXRpb25zQWZ0ZXJTY3JvbGxGbGFncyBmbGFncykKK3ZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxh
eWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoKQoreworICAgIFJlbmRlckdlb21ldHJ5TWFwIGdlb21l
dHJ5TWFwKFVzZVRyYW5zZm9ybXMpOworICAgIFJlbmRlclZpZXcqIHZpZXcgPSByZW5kZXJlcigp
LT52aWV3KCk7CisgICAgaWYgKHRoaXMgIT0gdmlldy0+bGF5ZXIoKSkKKyAgICAgICAgZ2VvbWV0
cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNlc3RvcihwYXJlbnQoKSwgMCk7CisgICAgdXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXApOworfQorCit2b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFJlbmRlckdlb21ldHJ5TWFwKiBn
ZW9tZXRyeU1hcCwgVXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWdzIGZsYWdzKQog
ewogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBuZWVkZWQsIGJ1dCB0aGVyZSBhcmUg
c29tZSBjb3JuZXIgY2FzZXMgd2hlcmUKICAgICAvLyB0aGVzZSBmbGFncyBhcmUgc3RpbGwgZGly
dHkuIFVwZGF0ZSBzbyB0aGF0IHRoZSBjaGVjayBiZWxvdyBpcyB2YWxpZC4KQEAgLTUzNSwyMiAr
NTI0LDI1IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3Jv
bGwoVXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sCiAKICAgICB1cGRhdGVMYXllclBvc2l0
aW9uKCk7CiAKKyAgICBpZiAoZ2VvbWV0cnlNYXApCisgICAgICAgIGdlb21ldHJ5TWFwLT5wdXNo
TWFwcGluZ3NUb0FuY2VzdG9yKHRoaXMsIHBhcmVudCgpKTsKKwogICAgIGlmICgoZmxhZ3MgJiBI
YXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yKSB8fCByZW5kZXJlcigpLT5zdHlsZSgp
LT5oYXNWaWV3cG9ydENvbnN0cmFpbmVkUG9zaXRpb24oKSkgewogICAgICAgICAvLyBGSVhNRTog
SXMgaXQgd29ydGggcGFzc2luZyB0aGUgb2Zmc2V0RnJvbVJvb3QgYXJvdW5kIGxpa2UgaW4gdXBk
YXRlTGF5ZXJQb3NpdGlvbnM/CiAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCB0cmFjayB0aGUg
cmVwYWludCBjb250YWluZXIgYXMgd2Ugd2FsayBkb3duIHRoZSB0cmVlLgotICAgICAgICBjb21w
dXRlUmVwYWludFJlY3RzKHJlbmRlcmVyKCktPmNvbnRhaW5lckZvclJlcGFpbnQoKSk7CisgICAg
ICAgIGNvbXB1dGVSZXBhaW50UmVjdHMocmVuZGVyZXIoKS0+Y29udGFpbmVyRm9yUmVwYWludCgp
LCBnZW9tZXRyeU1hcCk7CiAgICAgICAgIGZsYWdzIHw9IEhhc1NlZW5WaWV3cG9ydENvbnN0cmFp
bmVkQW5jZXN0b3I7CiAgICAgfSBlbHNlIGlmICgoZmxhZ3MgJiBIYXNTZWVuQW5jZXN0b3JXaXRo
T3ZlcmZsb3dDbGlwKSAmJiAhbV9jYW5Ta2lwUmVwYWludFJlY3RzVXBkYXRlT25TY3JvbGwpIHsK
ICAgICAgICAgLy8gSWYgd2UgaGF2ZSBzZWVuIGFuIG92ZXJmbG93IGNsaXAsIHdlIHNob3VsZCB1
cGRhdGUgb3VyIHJlcGFpbnQgcmVjdHMgYXMgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQK
ICAgICAgICAgLy8gaW50ZXJzZWN0cyBpdCB3aXRoIG91ciBhbmNlc3RvciBvdmVyZmxvdyBjbGlw
IHRoYXQgbWF5IGhhdmUgbW92ZWQuCi0gICAgICAgIGNvbXB1dGVSZXBhaW50UmVjdHMocmVuZGVy
ZXIoKS0+Y29udGFpbmVyRm9yUmVwYWludCgpKTsKKyAgICAgICAgY29tcHV0ZVJlcGFpbnRSZWN0
cyhyZW5kZXJlcigpLT5jb250YWluZXJGb3JSZXBhaW50KCksIGdlb21ldHJ5TWFwKTsKICAgICB9
CiAKICAgICBpZiAocmVuZGVyZXIoKS0+aGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIGZsYWdz
IHw9IEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXA7CiAKICAgICBmb3IgKFJlbmRlckxh
eWVyKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCkpCi0gICAgICAgIGNoaWxkLT51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKGZs
YWdzKTsKKyAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoZ2Vv
bWV0cnlNYXAsIGZsYWdzKTsKIAogICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBvdXIgcmVmbGVjdGlv
biBhcyBzY3JvbGxpbmcgaXMgYSB0cmFuc2xhdGlvbiB3aGljaCBkb2VzIG5vdCBjaGFuZ2UgdGhl
IHNpemUoKQogICAgIC8vIG9mIGFuIG9iamVjdCwgdGh1cyBSZW5kZXJSZXBsaWNhIHdpbGwgc3Rp
bGwgcmVwYWludCBpdHNlbGYgcHJvcGVybHkgYXMgdGhlIGxheWVyIHBvc2l0aW9uIHdhcwpAQCAt
NTYyLDYgKzU1NCw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJTY3JvbGwoVXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sCiAgICAgICAgIG1fbWFycXVl
ZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7CiAgICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9z
aXRpb24gPSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKICAgICB9CisKKyAgICBpZiAoZ2Vv
bWV0cnlNYXApCisgICAgICAgIGdlb21ldHJ5TWFwLT5wb3BNYXBwaW5nc1RvQW5jZXN0b3IocGFy
ZW50KCkpOwogfQogCiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKQEAgLTE0MjUsOCArMTQy
MCw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlbW92ZU9ubHlUaGlzTGF5ZXIoKQogICAgIGNsZWFy
Q2xpcFJlY3RzSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKIAogICAgIFJlbmRlckxheWVyKiBuZXh0
U2liID0gbmV4dFNpYmxpbmcoKTsKLSAgICBib29sIGhhc0xheWVyT2Zmc2V0OwotICAgIGNvbnN0
IExheW91dFBvaW50IG9mZnNldEZyb21Sb290QmVmb3JlTW92ZSA9IGNvbXB1dGVPZmZzZXRGcm9t
Um9vdChoYXNMYXllck9mZnNldCk7CiAKICAgICAvLyBSZW1vdmUgdGhlIGNoaWxkIHJlZmxlY3Rp
b24gbGF5ZXIgYmVmb3JlIG1vdmluZyBvdGhlciBjaGlsZCBsYXllcnMuCiAgICAgLy8gVGhlIHJl
ZmxlY3Rpb24gbGF5ZXIgc2hvdWxkIG5vdCBiZSBtb3ZlZCB0byB0aGUgcGFyZW50LgpAQCAtMTQ0
MCwxMCArMTQzMyw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlbW92ZU9ubHlUaGlzTGF5ZXIoKQog
ICAgICAgICByZW1vdmVDaGlsZChjdXJyZW50KTsKICAgICAgICAgbV9wYXJlbnQtPmFkZENoaWxk
KGN1cnJlbnQsIG5leHRTaWIpOwogICAgICAgICBjdXJyZW50LT5zZXRSZXBhaW50U3RhdHVzKE5l
ZWRzRnVsbFJlcGFpbnQpOwotICAgICAgICBMYXlvdXRQb2ludCBvZmZzZXRGcm9tUm9vdCA9IG9m
ZnNldEZyb21Sb290QmVmb3JlTW92ZTsKICAgICAgICAgLy8gdXBkYXRlTGF5ZXJQb3NpdGlvbnMg
ZGVwZW5kcyBvbiBoYXNMYXllcigpIGFscmVhZHkgYmVpbmcgZmFsc2UgZm9yIHByb3BlciBsYXlv
dXQuCiAgICAgICAgIEFTU0VSVCghcmVuZGVyZXIoKS0+aGFzTGF5ZXIoKSk7Ci0gICAgICAgIGN1
cnJlbnQtPnVwZGF0ZUxheWVyUG9zaXRpb25zKGhhc0xheWVyT2Zmc2V0ID8gJm9mZnNldEZyb21S
b290IDogMCk7CisgICAgICAgIGN1cnJlbnQtPnVwZGF0ZUxheWVyUG9zaXRpb25zKDApOyAvLyBG
SVhNRTogdXNlIGdlb21ldHJ5IG1hcC4KICAgICAgICAgY3VycmVudCA9IG5leHQ7CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IGI0MWUyOWY1MTQ3ODQ0
ZDE3NmYyZTczMmNmZTU1MDdkZGUwOGQxOTkuLjUxMTQ3ZWM4ODYwMjIzNzliOWJlYjAxZDVkMTQz
ZTIxYWM2MTJjZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC02
Miw2ICs2Miw3IEBAIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7CiBjbGFzcyBIaXRUZXN0UmVxdWVz
dDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU7
CitjbGFzcyBSZW5kZXJHZW9tZXRyeU1hcDsKIGNsYXNzIFJlbmRlck1hcnF1ZWU7CiBjbGFzcyBS
ZW5kZXJSZXBsaWNhOwogY2xhc3MgUmVuZGVyU2Nyb2xsYmFyUGFydDsKQEAgLTM4OCw3ICszODks
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5SZW5kZXIzRFRyYW5zZm9ybXMoKSBjb25zdDsKIAog
ICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbigpOwotICAgIAorCiAgICAgZW51bSBVcGRhdGVM
YXllclBvc2l0aW9uc0ZsYWcgewogICAgICAgICBDaGVja0ZvclJlcGFpbnQgPSAxLAogICAgICAg
ICBJc0NvbXBvc2l0aW5nVXBkYXRlUm9vdCA9IDEgPDwgMSwKQEAgLTM5Nyw5ICszOTgsOSBAQCBw
dWJsaWM6CiAgICAgfTsKICAgICB0eXBlZGVmIHVuc2lnbmVkIFVwZGF0ZUxheWVyUG9zaXRpb25z
RmxhZ3M7CiAgICAgc3RhdGljIGNvbnN0IFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZ3MgZGVmYXVs
dEZsYWdzID0gQ2hlY2tGb3JSZXBhaW50IHwgSXNDb21wb3NpdGluZ1VwZGF0ZVJvb3QgfCBVcGRh
dGVDb21wb3NpdGluZ0xheWVyczsKLSAgICAvLyBQcm92aWRpbmcgfGNhY2hlZE9mZnNldHwgcHJl
dmVudHMgYSBvdXRsaW5lQm94Rm9yUmVwYWludCBmcm9tIHdhbGtpbmcgYmFjayB0byB0aGUgcm9v
dCBmb3IgZWFjaCBsYXllciBpbiBvdXIgc3VidHJlZS4KLSAgICAvLyBUaGlzIGlzIGFuIG9wdGlt
aXN0aWMgb3B0aW1pemF0aW9uIHRoYXQgaXMgbm90IGd1YXJhbnRlZWQgdG8gc3VjY2VlZC4KLSAg
ICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zKExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCwg
VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFncyA9IGRlZmF1bHRGbGFncyk7CisKKyAgICB2b2lkIHVw
ZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlvdXQoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXll
ciwgVXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFncyk7CisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyU2Nyb2xsKCk7CiAgICAgCiAgICAgYm9vbCBpc1BhZ2luYXRlZCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNQYWdpbmF0ZWQ7IH0KIApAQCAtNDg4LDcgKzQ4OSw3IEBAIHB1YmxpYzoKICAg
ICBib29sIGNhblVzZUNvbnZlcnRUb0xheWVyQ29vcmRzKCkgY29uc3QKICAgICB7CiAgICAgICAg
IC8vIFRoZXNlIFJlbmRlck9iamVjdCBoYXZlIGFuIGltcGFjdCBvbiB0aGVpciBsYXllcnMnIHdp
dGhvdXQgdGhlbSBrbm93aW5nIGFib3V0IGl0LgotICAgICAgICByZXR1cm4gIXJlbmRlcmVyKCkt
Pmhhc0NvbHVtbnMoKSAmJiAhcmVuZGVyZXIoKS0+aGFzVHJhbnNmb3JtKCkgJiYgIWlzQ29tcG9z
aXRlZCgpCisgICAgICAgIHJldHVybiAhcmVuZGVyZXIoKS0+aGFzQ29sdW1ucygpICYmICFyZW5k
ZXJlcigpLT5oYXNUcmFuc2Zvcm0oKQogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgICAgICAmJiAh
cmVuZGVyZXIoKS0+aXNTVkdSb290KCkKICNlbmRpZgpAQCAtNTc0LDE0ICs1NzUsNiBAQCBwdWJs
aWM6CiAgICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWlu
dFJlY3Q7IH0KICAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0SW5jbHVkaW5nTm9uQ29tcG9zaXRp
bmdEZXNjZW5kYW50cygpIGNvbnN0OwogCi0gICAgZW51bSBVcGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyU2Nyb2xsRmxhZyB7Ci0gICAgICAgIE5vRmxhZyA9IDAsCi0gICAgICAgIEhhc1NlZW5WaWV3
cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IgPSAxIDw8IDAsCi0gICAgICAgIEhhc1NlZW5BbmNlc3Rv
cldpdGhPdmVyZmxvd0NsaXAgPSAxIDw8IDEKLSAgICB9OwotCi0gICAgdHlwZWRlZiB1bnNpZ25l
ZCBVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZ3M7Ci0gICAgdm9pZCB1cGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxG
bGFncyA9IE5vRmxhZyk7CiAgICAgdm9pZCBzZXRSZXBhaW50U3RhdHVzKFJlcGFpbnRTdGF0dXMg
c3RhdHVzKSB7IG1fcmVwYWludFN0YXR1cyA9IHN0YXR1czsgfQogCiAgICAgTGF5b3V0VW5pdCBz
dGF0aWNJbmxpbmVQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGljSW5saW5lUG9zaXRp
b247IH0KQEAgLTY5OSw3ICs2OTIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0QW5jZXN0b3JD
aGFpbkhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpOwogICAgIHZvaWQgZGlydHlBbmNl
c3RvckNoYWluSGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50U3RhdHVzKCk7CiAKLSAgICB2
b2lkIGNvbXB1dGVSZXBhaW50UmVjdHMoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVw
YWludENvbnRhaW5lciwgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290ID0gMCk7CisgICAgdm9p
ZCBjb21wdXRlUmVwYWludFJlY3RzKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIsIGNvbnN0IFJlbmRlckdlb21ldHJ5TWFwKiA9IDApOwogICAgIHZvaWQgY29t
cHV0ZVJlcGFpbnRSZWN0c0luY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CiAgICAgdm9pZCBjbGVhclJl
cGFpbnRSZWN0cygpOwogCkBAIC03MTUsNiArNzA4LDE2IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1
cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5
bGUpOwogICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7CiAKKyAgICB2b2lk
IHVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiA9IDAsIFVwZGF0ZUxheWVy
UG9zaXRpb25zRmxhZ3MgPSBkZWZhdWx0RmxhZ3MpOworCisgICAgZW51bSBVcGRhdGVMYXllclBv
c2l0aW9uc0FmdGVyU2Nyb2xsRmxhZyB7CisgICAgICAgIE5vRmxhZyA9IDAsCisgICAgICAgIEhh
c1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IgPSAxIDw8IDAsCisgICAgICAgIEhhc1Nl
ZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgPSAxIDw8IDEKKyAgICB9OworICAgIHR5cGVkZWYg
dW5zaWduZWQgVXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWdzOworICAgIHZvaWQg
dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCosIFVwZGF0
ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxGbGFncyA9IE5vRmxhZyk7CisKICAgICBmcmllbmQg
SW50U2l6ZSBSZW5kZXJCb3g6OnNjcm9sbGVkQ29udGVudE9mZnNldCgpIGNvbnN0OwogICAgIElu
dFNpemUgc2Nyb2xsZWRDb250ZW50T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxPZmZz
ZXQ7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcAppbmRleCBiNWI0NTZiM2EyNGFjNWFiZjFkYjJhYTllNjI2ZmRkMDQ2YTQxM2Yy
Li5lYWVkOTgxM2UzZTg4ZjkzYmEzMmQwMmI1YzhkOTdlMjdhYTY3MTRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtODMs
NiArODMsNyBAQCBjbGFzcyBSZW5kZXJMYXllckNvbXBvc2l0b3I6Ok92ZXJsYXBNYXAgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKE92ZXJsYXBNYXApOwogcHVibGljOgogICAgIE92ZXJsYXBN
YXAoKQorICAgICAgICA6IG1fZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3JtcykKICAgICB7CiAgICAg
ICAgIC8vIEJlZ2luIGFzc3VtaW5nIHRoZSByb290IGxheWVyIHdpbGwgYmUgY29tcG9zaXRlZCBz
byB0aGF0IHRoZXJlIGlzCiAgICAgICAgIC8vIHNvbWV0aGluZyBvbiB0aGUgc3RhY2suIFRoZSBy
b290IGxheWVyIHNob3VsZCBhbHNvIG5ldmVyIGdldCBhbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCmluZGV4IGIxZjU0MWY5MWE2YTc4NTQzNjlmZWNkOTMyMjQ3NmRjNjA4
ZDM5MWQuLjExOGE5OTZhZjgwZTQ2NWYwZjBmNjAxNjFiOWIxZDFkZWRmY2JhNWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTk4MSw3ICs5ODEsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxCZURlc3Ryb3llZCgpOwogICAgIHZvaWQgYXJl
bmFEZWxldGUoUmVuZGVyQXJlbmEqLCB2b2lkKiBvYmplY3RCYXNlKTsKIAotICAgIHZpcnR1YWwg
TGF5b3V0UmVjdCBvdXRsaW5lQm91bmRzRm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVs
T2JqZWN0KiAvKnJlcGFpbnRDb250YWluZXIqLywgTGF5b3V0UG9pbnQqIC8qY2FjaGVkT2Zmc2V0
VG9SZXBhaW50Q29udGFpbmVyKi8gPSAwKSBjb25zdCB7IHJldHVybiBMYXlvdXRSZWN0KCk7IH0K
KyAgICB2aXJ0dWFsIExheW91dFJlY3Qgb3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoY29uc3QgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCogLypyZXBhaW50Q29udGFpbmVyKi8sIGNvbnN0IFJlbmRlckdl
b21ldHJ5TWFwKiA9IDApIGNvbnN0IHsgcmV0dXJuIExheW91dFJlY3QoKTsgfQogCiAgICAgdmly
dHVhbCBib29sIGNhbkJlUmVwbGFjZWRXaXRoSW5saW5lUnVuSW4oKSBjb25zdDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNw
cAppbmRleCBiNGM2N2I5YjJiY2YwOWVmNzJhY2QwOThlZDg1ZjJkMjcxYzMxZjM0Li4wMTkyMDRl
NGUyZmRmZmM0MzI2ODYwZTQ3ZTVhNzE2N2Y3NTUzMTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcApAQCAtNzAsNyAr
NzAsNyBAQCBjb25zdCBSZW5kZXJPYmplY3QqIFJlbmRlclNWR01vZGVsT2JqZWN0OjpwdXNoTWFw
cGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheQogLy8gQ29waWVkIGZyb20gUmVuZGVyQm94
LCB0aGlzIG1ldGhvZCBsaWtlbHkgcmVxdWlyZXMgZnVydGhlciByZWZhY3RvcmluZyB0byB3b3Jr
IGVhc2lseSBmb3IgYm90aCBTVkcgYW5kIENTUyBCb3ggTW9kZWwgY29udGVudC4KIC8vIEZJWE1F
OiBUaGlzIG1heSBhbHNvIG5lZWQgdG8gbW92ZSBpbnRvIFNWR1JlbmRlclN1cHBvcnQgYXMgdGhl
IFJlbmRlckJveCB2ZXJzaW9uIGRlcGVuZHMKIC8vIG9uIGJvcmRlckJvdW5kaW5nQm94KCkgd2hp
Y2ggU1ZHIFJlbmRlckJveCBzdWJjbGFzZXMgKGxpa2UgU1ZHUmVuZGVyQmxvY2spIGRvIG5vdCBp
bXBsZW1lbnQuCi1MYXlvdXRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0OjpvdXRsaW5lQm91bmRz
Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVy
LCBMYXlvdXRQb2ludCopIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0Ojpv
dXRsaW5lQm91bmRzRm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBh
aW50Q29udGFpbmVyLCBjb25zdCBSZW5kZXJHZW9tZXRyeU1hcCopIGNvbnN0CiB7CiAgICAgTGF5
b3V0UmVjdCBib3ggPSBlbmNsb3NpbmdMYXlvdXRSZWN0KHJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCkpOwogICAgIGFkanVzdFJlY3RGb3JPdXRsaW5lQW5kU2hhZG93KGJveCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgK
aW5kZXggNTBlOWY2ODYwZTY3ZGZiNWQ3ZTc0N2U5NzI2YzljNGFjZTMwOWE2MS4uZGMyZDVkYTM5
ZTgzOTNjMzJkZDFkMGExNTUwZjkzMWZiNThmMGViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaApAQCAtNTMsNyArNTMsNyBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZv
clJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikg
Y29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVGbG9hdFJlY3RGb3JSZXBh
aW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEZsb2F0
UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBM
YXlvdXRSZWN0IG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIsIExheW91dFBvaW50KikgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBMYXlvdXRSZWN0IG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KGNvbnN0IFJlbmRl
ckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGNvbnN0IFJlbmRlckdlb21ldHJ5
TWFwKikgY29uc3QgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhW
ZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jiwg
Ym9vbCogd2FzRml4ZWQpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDA0N2I5ZTMyOTk0YmE1NzNiNzJhYmJlZGM1
ODdjZTcxNWU2ODcxYmUuLmE5MzYyY2MwZmM0OGNmYjUwY2Q4YWY1YTUzM2ZjN2RiYzcyYjk4M2Mg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0xMS0xMSAgU2ltb24gRnJhc2VyICA8c2ltb24u
ZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBFbGltaW5hdGUgYW5jZXN0b3IgdHJlZSB3YWxr
IGNvbXB1dGluZyBvdXRsaW5lQm91bmRzRm9yUmVwYWludCgpIHdoZW4gdXBkYXRpbmcgbGF5ZXIg
cG9zaXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDE4NzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBmYXN0L2Jsb2NrL2Zsb2F0L292ZXJoYW5naW5nLXRhbGwtYmxvY2suaHRtbCBvdmVyZmxvd3Mg
TGF5b3V0VW5pdHMsIHNvIGNhdXNlcworICAgICAgICBhc3NlcnRpb25zIHdoZW4gdXNpbmcgUmVu
ZGVyR2VvbWV0cnlNYXAgKGJ1ZyAxMDE4NjUpLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21p
dW0vVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0
aW9uczoKKwogMjAxMi0xMS0xMCAgTWlrZSBXZXN0ICA8bWt3c3RAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IE11bHRpcGxlICclYycgZm9ybWF0dGluZyBvcHRpb25zIHNo
b3VsZCBhbGwgaGF2ZSBlZmZlY3QuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
VGVzdEV4cGVjdGF0aW9ucwppbmRleCBlMGI4MmNhYWYxMDViNzczNzE4N2VjNTNiMmM4NzIwMTZk
YmM5YmVhLi4yOGFmMTFmOTA3Y2FlYzYxYmRhOWJmMGI0M2EwNmQyZmI4NGY1Zjc2IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCisrKyBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTQyMjYs
MyArNDIyNiw2IEBAIHdlYmtpdC5vcmcvYi8xMDE3OTQgZmFzdC9jYW52YXMvY2FudmFzLWFzLWlt
YWdlLWhpZHBpLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xMDE3OTQg
cGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9ncHUvZmFzdC9jYW52YXMvY2FudmFzLWFzLWltYWdl
LWhpZHBpLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xMDE3OTQgZmFz
dC9jYW52YXMvY2FudmFzLXJlc2l6ZS1yZXNldC1waXhlbFJhdGlvLmh0bWwgWyBGYWlsdXJlIF0K
IHdlYmtpdC5vcmcvYi8xMDE3OTQgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9ncHUvZmFzdC9j
YW52YXMvY2FudmFzLXJlc2l6ZS1yZXNldC1waXhlbFJhdGlvLmh0bWwgWyBGYWlsdXJlIF0KKwor
IyBPdmVyZmxvd3MgTGF5b3V0VW5pdHMsIHdoaWNoIGNhdXNlcyBhc3NlcnRpb25zLgord2Via2l0
Lm9yZy9iLzEwMTg2NSBmYXN0L2Jsb2NrL2Zsb2F0L292ZXJoYW5naW5nLXRhbGwtYmxvY2suaHRt
bCBbIFNraXAgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBl
Y3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwppbmRl
eCBlNjc3NWJkMzQxZTg0OWVlYzAwODMwZTY0OTJjNjI4MzcwODdhM2UyLi43MmY2Y2ZlZGQ3OGFl
MTNjZTVhYThkNTBmMGU2ZGNiYTczODhhMGVkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
VGVzdEV4cGVjdGF0aW9ucwpAQCAtMTE3NCwzICsxMTc0LDYgQEAgd2Via2l0Lm9yZy9iLzEwMDg0
NiBpbnNwZWN0b3ItcHJvdG9jb2wvZGVidWdnZXItdGVybWluYXRlLWRlZGljYXRlZC13b3JrZXIt
d2hpbGUKIHdlYmtpdC5vcmcvYi8xMDAxNDIgY3NzMy9maWx0ZXJzL2VmZmVjdC1yZWZlcmVuY2Ut
aHcuaHRtbCBbIEZhaWwgXQogd2Via2l0Lm9yZy9iLzEwMDE0MiBjc3MzL2ZpbHRlcnMvZWZmZWN0
LXJlZmVyZW5jZS1vcmRlcmluZy1ody5odG1sIFsgRmFpbCBdCiB3ZWJraXQub3JnL2IvMTAwMTQy
IGNzczMvZmlsdGVycy9lZmZlY3QtcmVmZXJlbmNlLmh0bWwgWyBGYWlsIF0KKworIyBPdmVyZmxv
d3MgTGF5b3V0VW5pdHMsIHdoaWNoIGNhdXNlcyBhc3NlcnRpb25zLgord2Via2l0Lm9yZy9iLzEw
MTg2NSBmYXN0L2Jsb2NrL2Zsb2F0L292ZXJoYW5naW5nLXRhbGwtYmxvY2suaHRtbCBbIFNraXAg
XQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173726</attachid>
            <date>2012-11-12 14:23:25 -0800</date>
            <delta_ts>2012-11-13 14:01:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101874-20121112142128.patch</filename>
            <type>text/plain</type>
            <size>39219</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0MzAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDdjOWI1NTZlZjRlNTYw
ODAzMGEyMTY0ODdiMDFjNTI3MTI5ODgzYS4uYWIzMGNmNjEyOTNiMzMwZDZhMGE1MmU5YjY3OGZi
MzA0NGMzNjFhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg0IEBACisyMDEyLTExLTEyICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIEVsaW1pbmF0ZSBh
bmNlc3RvciB0cmVlIHdhbGsgY29tcHV0aW5nIG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KCkgd2hl
biB1cGRhdGluZyBsYXllciBwb3NpdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMTg3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucygpIGFu
ZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCkgc3BlbmQgYQorICAgICAgICBsb3Qg
b2YgdGltZSBpbiBjb21wdXRlUmVwYWludFJlY3RzKCksIHdoaWNoIGRvZXMgdHdvIGFuY2VzdG9y
IHRyZWUgd2Fsa3MsIG9uY2UKKyAgICAgICAgZm9yIGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBh
aW50KCksIGFuZCBvbmUgZm9yIG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KCkuCisKKyAgICAgICAg
RWxpbWluYXRlIHRoZSBhbmNlc3RvciB0cmVlIHdhbGsgaW4gb3V0bGluZUJvdW5kc0ZvclJlcGFp
bnQoKSBieSBtYWludGFpbmluZworICAgICAgICBhIFJlbmRlckdlb21ldHJ5TWFwIGFzIHdlIHRy
YXZlcnNlIHRoZSBsYXllciB0cmVlLCBhbmQgdGhlbiB1c2luZyBpdCB0byBtYXAKKyAgICAgICAg
dGhlIG91dGxpbmUgYm91bmRzIHRvIHRoZSByZXBhaW50IGNvbnRhaW5lci4gUmVwbGFjZSB0aGUg
aG9rZXkgY2FjaGVkIG9mZnNldEZyb21Sb290CisgICAgICAgIG5vdyB0aGF0IHRoZSBSZW5kZXJH
ZW9tZXRyeU1hcCBjYW4gZG8gYSBiZXR0ZXIgam9iLgorICAgICAgICAKKyAgICAgICAgVGhlIGNs
aXBwZWQgb3ZlcmZsb3cgcmVjdCBjYW5ub3QgYmUgbWFwcGVkIHNpbXBseSwgc28gY2Fubm90IHll
dCBtYWtlIHVzZSBvZgorICAgICAgICB0aGUgZ2VvbWV0cnkgbWFwLgorICAgICAgICAKKyAgICAg
ICAgTW9kaWZ5IHRoZSBSZW5kZXJHZW9tZXRyeU1hcCB0byBzdXBwb3J0IG1hcHBpbmcgdG8gc29t
ZSByZXBhaW50Q29udGFpbmVyIGFuY2VzdG9yLgorICAgICAgICAKKyAgICAgICAgUGFzcyB0aGUg
UmVuZGVyR2VvbWV0cnlNYXAgYXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRvIG91dGxpbmVCb3Vu
ZHNGb3JSZXBhaW50LgorICAgICAgICAKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmxheW91dCk6IE1ha2UgYSBSZW5kZXJHZW9tZXRy
eU1hcCBhbmQgcGFzcyBpdCBkb3duCisgICAgICAgIHRvIHVwZGF0ZUxheWVyUG9zaXRpb25zKCku
IEZvciBwYXJ0aWFsIGxheW91dHMsIHdlIGhhdmUgdG8gcHVzaCBsYXllcnMKKyAgICAgICAgYmV0
d2VlbiB0aGUgcm9vdCBhbmQgdGhlIGVuY2xvc2luZyBsYXllciBvZiB0aGUgbGF5b3V0IHN1YnRy
ZWUuCisgICAgICAgIFRoZSBnZW9tZXRyeSBtYXAgdXNlZCBmb3IgcmVwYWludGluZyBkb2VzIG5v
dCB1c2UgU25hcE9mZnNldEZvclRyYW5zZm9ybXMsCisgICAgICAgIHNvIGluaXRpYWxpemUgaXQg
ZXhwbGljaXRseSB3aXRoIGp1c3QgdGhlIFVzZVRyYW5zZm9ybXMgZmxhZy4KKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6cmVwYWludEZpeGVkRWxlbWVudHNBZnRlclNjcm9sbGluZyk6IE1h
a2UgYSBSZW5kZXJHZW9tZXRyeU1hcAorICAgICAgICB0byBwYXNzIGFsb25nIHRvIHVwZGF0ZUxh
eWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoKS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b3V0bGluZUJvdW5kc0ZvclJlcGFp
bnQpOiBSZXBsYWNlIHRoZSBvcHRpb25hbCBjYWNoZWRPZmZzZXRUb1JlcGFpbnRDb250YWluZXIK
KyAgICAgICAgcGFyYW1ldGVyIHdpdGggYW4gb3B0aW9uYWwgUmVuZGVyR2VvbWV0cnlNYXAsIGFu
ZCBpdCB1c2UgdG8gbWFwIHRoZSBjb21wdXRlIHJlY3QgdG8KKyAgICAgICAgcmVwYWludENvbnRh
aW5lciBjb29yZGluYXRlcy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckdlb21ldHJ5TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckdlb21ldHJ5TWFwOjpSZW5kZXJHZW9tZXRyeU1hcCk6IFRoaXMgbm93IGhhcyB0byBz
dG9yZSB0aGUgbWFwcGluZworICAgICAgICBmbGFncyB0byB1c2UsIHNvIHRoYXQgaXRzIGJlaGF2
aW9yIGNhbiBtYXRjaCB0aGF0IG9mIG1hcExvY2FsVG9Db250YWluZXIoKS4gVGhlCisgICAgICAg
IHBlcnRpbmVudCBmbGFnIGlzIHRoZSBjb25mdXNpbmdseSBuYW1lZCBTbmFwT2Zmc2V0Rm9yVHJh
bnNmb3Jtcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdlb21ldHJ5TWFwOjphYnNvbHV0ZVBv
aW50KTogQ2FsbCB0aGUgbmV3IG1hcFRvQ29udGFpbmVyKCkgd2l0aAorICAgICAgICBhIG51bGwg
Y29udGFpbmVyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR2VvbWV0cnlNYXA6OmFic29sdXRl
UmVjdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR2VvbWV0cnlNYXA6Om1hcFRv
Q29udGFpbmVyKTogTWFwIHRvIHRoZSBzdXBwbGllZCBjb250YWluZXIsCisgICAgICAgIGFzc2Vy
dGluZyB0aGF0IHdlIGZvdW5kIGl0LiBBZGQgcG9pbnQtIGFuZCByZWN0LWJhc2VkIG1hcHBpbmcg
bWV0aG9kcworICAgICAgICBha2luIHRvIHRoZSBvbGQgYWJzb2x1dGVSZWN0L2Fic29sdXRlUG9p
bnQuCisgICAgICAgIChXZWJDb3JlOjpjYW5NYXBWaWFMYXllcik6IFdlIG5lZWQgdG8gdGVzdCBm
b3IgaXNSZW5kZXJGbG93VGhyZWFkKCkgaGVyZSB0b28uCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJHZW9tZXRyeU1hcDo6cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcik6IFdoZW4gbWFwcGluZyB2aWEK
KyAgICAgICAgbGF5ZXJzLCBlbnN1cmUgdGhhdCB0aGUgUmVuZGVyVmlldyBpcyBwdXNoZWQgYXMg
dGhlIGZpcnN0IHN0ZXAuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdlb21ldHJ5TWFwLmg6
CisgICAgICAgIChSZW5kZXJHZW9tZXRyeU1hcCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBv
c2l0aW9uc0FmdGVyTGF5b3V0KTogTmV3IHdyYXBwZXIgZm9yIHVwZGF0ZUxheWVyUG9zaXRpb25z
KCkKKyAgICAgICAgdGhhdCBtYWtlcyB0aGUgZ2VvbWV0cnkgbWFwLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwpOiBOZXcgd3Jh
cHBlciBmb3IgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbAorICAgICAgICB0aGF0IG1h
a2VzIHRoZSBnZW9tZXRyeSBtYXAuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBk
YXRlTGF5ZXJQb3NpdGlvbnMpOiBOb3cgdGFrZXMgYW4gb3B0aW9uYWwgUmVuZGVyR2VvbWV0cnlN
YXAuCisgICAgICAgIFJlbW92ZSB0aGUgb2xkIG9mZnNldEZyb21Sb290IGNvZGUuIFB1c2ggYW5k
IHBvcCBsYXllcnMgdG8vZnJvbSB0aGUgZ2VvbWV0cnkgbWFwLiBVc2UKKyAgICAgICAgdGhlIGdl
b21ldHJ5IG1hcCB0byBnZXQgdGhlIG9mZnNldEZyb21Sb290IGFzIG5lZWRlZCBieSBvdmVyZmxv
dyBjb250cm9scy4gUGFzcworICAgICAgICBpdCB0byBjb21wdXRlUmVwYWludFJlY3RzKCkuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29tcHV0ZVJlcGFpbnRSZWN0cyk6IFBhc3Mg
dGhlIGdlb21ldHJ5IG1hcCB0byBvdXRsaW5lQm91bmRzRm9yUmVwYWludCgpLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwpOiBQ
dXNoIGFuZCBwb3AgdG8vZnJvbSB0aGUKKyAgICAgICAgZ2VvbWV0cnkgbWFwLCBhbmQgcGFzcyBp
dCB0byBjb21wdXRlUmVwYWludFJlY3RzKCkuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6cmVtb3ZlT25seVRoaXNMYXllcik6IFJlbW92ZSB0aGUgb2Zmc2V0RnJvbVJvb3RCZWZvcmVN
b3ZlCisgICAgICAgIGNvbXB1dGF0aW9uOyB0aGlzIGNvdWxkIHVzZSBhIGdlb21ldHJ5IG1hcCBp
biBmdXR1cmUgaWYgaXQgaXMgc2hvd24gdG8gYmUgYSBib3R0bGVuZWNrLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNh
blVzZUNvbnZlcnRUb0xheWVyQ29vcmRzKTogSXQgd2FzIHRob3VnaHQgdGhhdCB0aGUgaXNDb21w
b3NpdGVkKCkKKyAgICAgICAgd2FzIHRoZXJlIGJlY2F1c2UgdGhlIG9sZGVyIGNhY2hlZCBvZmZz
ZXRGcm9tUm9vdCBsb2dpYyB3YXMgc2Vuc2l0aXZlIHRvIGNvbXBvc2l0aW5nLAorICAgICAgICBi
dXQgY29udmVydFRvTGF5ZXJDb29yZHMoKSBpcyBub3QgYWZmZWN0ZWQgYnkgY29tcG9zaXRpbmcg
c28gdGhpcyBjaGVjayBpcyBub3QgbmVlZGVkLAorICAgICAgICBhbmQgYWN0dWFsbHkgaGFybWZ1
bC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6T3ZlcmxhcE1hcDo6T3ZlcmxhcE1h
cCk6IFRoZSBnZW9tZXRyeSBtYXAKKyAgICAgICAgdXNlZCBmb3Igb3ZlcmxhcCB0ZXN0aW5nIHNo
b3VsZCBub3QgdXNlIFNuYXBPZmZzZXRGb3JUcmFuc2Zvcm1zLCBzbyBpbml0aWFsaXplCisgICAg
ICAgIGl0IGV4cGxpY2l0bHkgd2l0aCBqdXN0IHRoZSBVc2VUcmFuc2Zvcm1zIGZsYWcuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjpvdXRsaW5lQm91bmRzRm9yUmVwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdN
b2RlbE9iamVjdDo6b3V0bGluZUJvdW5kc0ZvclJlcGFpbnQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKFJlbmRlclNWR01vZGVsT2Jq
ZWN0KToKKwogMjAxMi0xMS0xMiAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgTmV0d29ya1Byb2Nlc3M6IFVzZSBhbiBhY2N1cmF0ZSBzaG91bGRDb250ZW50U25p
ZmYgdmFsdWUgd2hlbiBjcmVhdGluZyBSZXNvdXJjZUhhbmRsZXMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcAppbmRleCA3NjhkNWQyNTY4ZTUzZDgxNWNiNGI4Y2Q1NTc2NWMwNjU3ZmExZWNjLi45
NDI0YjhjZTBlNzVmMmI0YWFmMjNlMWZjMzkwYjUxYmQ0YTIzNmFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCkBAIC0xMjA1LDEzICsxMjA1LDEyIEBAIHZvaWQgRnJhbWVWaWV3OjpsYXlv
dXQoYm9vbCBhbGxvd1N1YnRyZWUpCiAKICAgICAvLyBOb3cgdXBkYXRlIHRoZSBwb3NpdGlvbnMg
b2YgYWxsIGxheWVycy4KICAgICBiZWdpbkRlZmVycmVkUmVwYWludHMoKTsKLSAgICBib29sIGhh
c0xheWVyT2Zmc2V0OwotICAgIExheW91dFBvaW50IG9mZnNldEZyb21Sb290ID0gbGF5ZXItPmNv
bXB1dGVPZmZzZXRGcm9tUm9vdChoYXNMYXllck9mZnNldCk7CiAgICAgaWYgKG1fZG9GdWxsUmVw
YWludCkKICAgICAgICAgcm9vdC0+dmlldygpLT5yZXBhaW50KCk7IC8vIEZJWE1FOiBUaGlzIGlz
bid0IHJlYWxseSByaWdodCwgc2luY2UgdGhlIFJlbmRlclZpZXcgZG9lc24ndCBmdWxseSBlbmNv
bXBhc3MgdGhlIHZpc2libGVDb250ZW50UmVjdCgpLiBJdCBqdXN0IGhhcHBlbnMKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHdvcmsgb3V0IG1vc3Qgb2YgdGhlIHRpbWUs
IHNpbmNlIGZpcnN0IGxheW91dHMgYW5kIHByaW50aW5nIGRvbid0IGhhdmUgeW91IHNjcm9sbGVk
IGFueXdoZXJlLgogCi0gICAgbGF5ZXItPnVwZGF0ZUxheWVyUG9zaXRpb25zKGhhc0xheWVyT2Zm
c2V0ID8gJm9mZnNldEZyb21Sb290IDogMCwgdXBkYXRlTGF5ZXJQb3NpdGlvbkZsYWdzKGxheWVy
LCBzdWJ0cmVlLCBtX2RvRnVsbFJlcGFpbnQpKTsKKyAgICBsYXllci0+dXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlckxheW91dChyb290UmVuZGVyZXIodGhpcyktPmxheWVyKCksIHVwZGF0ZUxheWVy
UG9zaXRpb25GbGFncyhsYXllciwgc3VidHJlZSwgbV9kb0Z1bGxSZXBhaW50KSk7CisKICAgICBl
bmREZWZlcnJlZFJlcGFpbnRzKCk7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IGYyZmIzNzhmOGM5NWFi
OTUxOWI3YjE3NTUyNzg3MzlhNGI3YTMyM2QuLjIxMDJlMTY5ZTk5NGQxNWY1M2FkN2FjNmE1Y2Nk
MmRiNjY3M2ZiZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC00
NDgsMTYgKzQ0OCwxNiBAQCBGbG9hdFF1YWQgUmVuZGVyQm94OjphYnNvbHV0ZUNvbnRlbnRRdWFk
KCkgY29uc3QKICAgICByZXR1cm4gbG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QocmVjdCkp
OwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJveDo6b3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoY29u
c3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgTGF5b3V0UG9pbnQq
IGNhY2hlZE9mZnNldFRvUmVwYWludENvbnRhaW5lcikgY29uc3QKK0xheW91dFJlY3QgUmVuZGVy
Qm94OjpvdXRsaW5lQm91bmRzRm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0
KiByZXBhaW50Q29udGFpbmVyLCBjb25zdCBSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAp
IGNvbnN0CiB7CiAgICAgTGF5b3V0UmVjdCBib3ggPSBib3JkZXJCb3VuZGluZ0JveCgpOwogICAg
IGFkanVzdFJlY3RGb3JPdXRsaW5lQW5kU2hhZG93KGJveCk7CiAKLSAgICBGbG9hdFF1YWQgY29u
dGFpbmVyUmVsYXRpdmVRdWFkID0gRmxvYXRSZWN0KGJveCk7Ci0gICAgaWYgKGNhY2hlZE9mZnNl
dFRvUmVwYWludENvbnRhaW5lcikKLSAgICAgICAgY29udGFpbmVyUmVsYXRpdmVRdWFkLm1vdmUo
Y2FjaGVkT2Zmc2V0VG9SZXBhaW50Q29udGFpbmVyLT54KCksIGNhY2hlZE9mZnNldFRvUmVwYWlu
dENvbnRhaW5lci0+eSgpKTsKKyAgICBGbG9hdFF1YWQgY29udGFpbmVyUmVsYXRpdmVRdWFkOwor
ICAgIGlmIChnZW9tZXRyeU1hcCkKKyAgICAgICAgY29udGFpbmVyUmVsYXRpdmVRdWFkID0gZ2Vv
bWV0cnlNYXAtPm1hcFRvQ29udGFpbmVyKGJveCwgcmVwYWludENvbnRhaW5lcik7CiAgICAgZWxz
ZQotICAgICAgICBjb250YWluZXJSZWxhdGl2ZVF1YWQgPSBsb2NhbFRvQ29udGFpbmVyUXVhZChj
b250YWluZXJSZWxhdGl2ZVF1YWQsIHJlcGFpbnRDb250YWluZXIpOworICAgICAgICBjb250YWlu
ZXJSZWxhdGl2ZVF1YWQgPSBsb2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFJlY3QoYm94KSwgcmVw
YWludENvbnRhaW5lcik7CiAKICAgICBib3ggPSBjb250YWluZXJSZWxhdGl2ZVF1YWQuZW5jbG9z
aW5nQm91bmRpbmdCb3goKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCmluZGV4
IGU1ZDFjODMwNmI1Y2I4M2MzZWQyNGM3MDYzMWM4MjhlZGIyYzI1NGEuLjQ5MjdhMTExNGIxNjcy
Yjk1NDU0YzJmZmFkM2YxZTk2YjFjNjU2ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmgKQEAgLTE1NCw3ICsxNTQsNyBAQCBwdWJsaWM6CiAgICAgTGF5b3V0UmVjdCBjb21wdXRl
ZENTU0NvbnRlbnRCb3hSZWN0KCkgY29uc3QgeyByZXR1cm4gTGF5b3V0UmVjdChib3JkZXJMZWZ0
KCkgKyBjb21wdXRlZENTU1BhZGRpbmdMZWZ0KCksIGJvcmRlclRvcCgpICsgY29tcHV0ZWRDU1NQ
YWRkaW5nVG9wKCksIGNsaWVudFdpZHRoKCkgLSBjb21wdXRlZENTU1BhZGRpbmdMZWZ0KCkgLSBj
b21wdXRlZENTU1BhZGRpbmdSaWdodCgpLCBjbGllbnRIZWlnaHQoKSAtIGNvbXB1dGVkQ1NTUGFk
ZGluZ1RvcCgpIC0gY29tcHV0ZWRDU1NQYWRkaW5nQm90dG9tKCkpOyB9CiAKICAgICAvLyBCb3Vu
ZHMgb2YgdGhlIG91dGxpbmUgYm94IGluIGFic29sdXRlIGNvb3Jkcy4gUmVzcGVjdHMgdHJhbnNm
b3JtcwotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdXRsaW5lQm91bmRzRm9yUmVwYWludChjb25z
dCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiAvKnJlcGFpbnRDb250YWluZXIqLywgTGF5b3V0UG9p
bnQqIGNhY2hlZE9mZnNldFRvUmVwYWludENvbnRhaW5lcikgY29uc3QgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBMYXlvdXRSZWN0IG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxh
eWVyTW9kZWxPYmplY3QqIC8qcmVwYWludENvbnRhaW5lciovLCBjb25zdCBSZW5kZXJHZW9tZXRy
eU1hcCopIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0
cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCiAgICAgLy8gVXNlIHRo
aXMgd2l0aCBjYXV0aW9uISBObyB0eXBlIGNoZWNraW5nIGlzIGRvbmUhCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckdlb21ldHJ5TWFwLmNwcAppbmRleCA1YTZhNjlkOWRiZTgx
YmNhNDI3NmVhMGY3ZWMwNDc0M2VmNGMxMzhkLi5kZjM1YTFiMjdiNTdhOGFkNzNkZjYzOTc0MWEz
MGIwZGEyZjA5MzViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
R2VvbWV0cnlNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHZW9t
ZXRyeU1hcC5jcHAKQEAgLTMzLDExICszMywxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVJlbmRlckdlb21ldHJ5TWFwOjpSZW5kZXJHZW9tZXRyeU1hcCgpCitSZW5kZXJHZW9tZXRyeU1h
cDo6UmVuZGVyR2VvbWV0cnlNYXAoTWFwQ29vcmRpbmF0ZXNGbGFncyBmbGFncykKICAgICA6IG1f
aW5zZXJ0aW9uUG9zaXRpb24obm90Rm91bmQpCiAgICAgLCBtX25vblVuaWZvcm1TdGVwc0NvdW50
KDApCiAgICAgLCBtX3RyYW5zZm9ybWVkU3RlcHNDb3VudCgwKQogICAgICwgbV9maXhlZFN0ZXBz
Q291bnQoMCkKKyAgICAsIG1fbWFwQ29vcmRpbmF0ZXNGbGFncyhmbGFncykKIHsKIH0KIApAQCAt
NDUsNjIgKzQ2LDMwIEBAIFJlbmRlckdlb21ldHJ5TWFwOjp+UmVuZGVyR2VvbWV0cnlNYXAoKQog
ewogfQogCi1GbG9hdFBvaW50IFJlbmRlckdlb21ldHJ5TWFwOjphYnNvbHV0ZVBvaW50KGNvbnN0
IEZsb2F0UG9pbnQmIHApIGNvbnN0Ci17Ci0gICAgRmxvYXRQb2ludCByZXN1bHQ7Ci0gICAgCi0g
ICAgaWYgKCFoYXNGaXhlZFBvc2l0aW9uU3RlcCgpICYmICFoYXNUcmFuc2Zvcm1TdGVwKCkgJiYg
IWhhc05vblVuaWZvcm1TdGVwKCkpCi0gICAgICAgIHJlc3VsdCA9IHAgKyBtX2FjY3VtdWxhdGVk
T2Zmc2V0OwotICAgIGVsc2UgewotICAgICAgICBUcmFuc2Zvcm1TdGF0ZSB0cmFuc2Zvcm1TdGF0
ZShUcmFuc2Zvcm1TdGF0ZTo6QXBwbHlUcmFuc2Zvcm1EaXJlY3Rpb24sIHApOwotICAgICAgICBt
YXBUb0Fic29sdXRlKHRyYW5zZm9ybVN0YXRlKTsKLSAgICAgICAgcmVzdWx0ID0gdHJhbnNmb3Jt
U3RhdGUubGFzdFBsYW5hclBvaW50KCk7Ci0gICAgfQotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAot
ICAgIEZsb2F0UG9pbnQgcmVuZGVyZXJNYXBwZWRSZXN1bHQgPSBtX21hcHBpbmcubGFzdCgpLm1f
cmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZShwLCBVc2VUcmFuc2Zvcm1zIHwgU25hcE9mZnNldEZv
clRyYW5zZm9ybXMpOwotICAgIEFTU0VSVChyZW5kZXJlck1hcHBlZFJlc3VsdCA9PSByZXN1bHQp
OwotI2VuZGlmCi0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1GbG9hdFJlY3QgUmVuZGVyR2Vv
bWV0cnlNYXA6OmFic29sdXRlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0g
ICAgRmxvYXRSZWN0IHJlc3VsdDsKLSAgICAKLSAgICBpZiAoIWhhc0ZpeGVkUG9zaXRpb25TdGVw
KCkgJiYgIWhhc1RyYW5zZm9ybVN0ZXAoKSAmJiAhaGFzTm9uVW5pZm9ybVN0ZXAoKSkgewotICAg
ICAgICByZXN1bHQgPSByZWN0OwotICAgICAgICByZXN1bHQubW92ZShtX2FjY3VtdWxhdGVkT2Zm
c2V0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBUcmFuc2Zvcm1TdGF0ZSB0cmFuc2Zvcm1TdGF0
ZShUcmFuc2Zvcm1TdGF0ZTo6QXBwbHlUcmFuc2Zvcm1EaXJlY3Rpb24sIHJlY3QuY2VudGVyKCks
IHJlY3QpOwotICAgICAgICBtYXBUb0Fic29sdXRlKHRyYW5zZm9ybVN0YXRlKTsKLSAgICAgICAg
cmVzdWx0ID0gdHJhbnNmb3JtU3RhdGUubGFzdFBsYW5hclF1YWQoKS5ib3VuZGluZ0JveCgpOwot
ICAgIH0KLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBGbG9hdFJlY3QgcmVuZGVyZXJNYXBw
ZWRSZXN1bHQgPSBtX21hcHBpbmcubGFzdCgpLm1fcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1
YWQocmVjdCkuYm91bmRpbmdCb3goKTsKLSAgICAvLyBJbnNwZWN0b3IgY3JlYXRlcyByZW5kZXJl
cnMgd2l0aCBuZWdhdGl2ZSB3aWR0aCA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg3MTk0Pi4KLSAgICAvLyBUYWtpbmcgRmxvYXRRdWFkIGJvdW5kcyBhdm9pZHMgc3B1
cmlvdXMgYXNzZXJ0aW9ucyBiZWNhdXNlIG9mIHRoYXQuCi0gICAgQVNTRVJUKGVuY2xvc2luZ0lu
dFJlY3QocmVuZGVyZXJNYXBwZWRSZXN1bHQpID09IGVuY2xvc2luZ0ludFJlY3QoRmxvYXRRdWFk
KHJlc3VsdCkuYm91bmRpbmdCb3goKSkpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi12b2lkIFJlbmRlckdlb21ldHJ5TWFwOjptYXBUb0Fic29sdXRlKFRyYW5zZm9ybVN0YXRl
JiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3QKK3ZvaWQgUmVuZGVyR2VvbWV0cnlNYXA6Om1hcFRvQ29u
dGFpbmVyKFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSwgY29uc3QgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCogY29udGFpbmVyKSBjb25zdAogewogICAgIC8vIElmIHRoZSBtYXBwaW5nIGlu
Y2x1ZGVzIHNvbWV0aGluZyBsaWtlIGNvbHVtbnMsIHdlIGhhdmUgdG8gZ28gdmlhIHJlbmRlcmVy
cy4KICAgICBpZiAoaGFzTm9uVW5pZm9ybVN0ZXAoKSkgewotICAgICAgICBtX21hcHBpbmcubGFz
dCgpLm1fcmVuZGVyZXItPm1hcExvY2FsVG9Db250YWluZXIoMCwgdHJhbnNmb3JtU3RhdGUsIFVz
ZVRyYW5zZm9ybXMgfCBBcHBseUNvbnRhaW5lckZsaXAgfCBTbmFwT2Zmc2V0Rm9yVHJhbnNmb3Jt
cyk7CisgICAgICAgIG1fbWFwcGluZy5sYXN0KCkubV9yZW5kZXJlci0+bWFwTG9jYWxUb0NvbnRh
aW5lcihjb250YWluZXIsIHRyYW5zZm9ybVN0YXRlLCBBcHBseUNvbnRhaW5lckZsaXAgfCBtX21h
cENvb3JkaW5hdGVzRmxhZ3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGJv
b2wgaW5GaXhlZCA9IGZhbHNlOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBib29sIGZvdW5k
Q29udGFpbmVyID0gIWNvbnRhaW5lciB8fCAobV9tYXBwaW5nLnNpemUoKSAmJiBtX21hcHBpbmdb
MF0ubV9yZW5kZXJlciA9PSBjb250YWluZXIpOworI2VuZGlmCiAKICAgICBmb3IgKGludCBpID0g
bV9tYXBwaW5nLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgIGNvbnN0IFJlbmRl
ckdlb21ldHJ5TWFwU3RlcCYgY3VycmVudFN0ZXAgPSBtX21hcHBpbmdbaV07CiAKKyAgICAgICAg
Ly8gSWYgY29udGFpbmVyIGlzIHRoZSBSZW5kZXJWaWV3IChzdGVwIDApIHdlIHdhbnQgdG8gYXBw
bHkgaXRzIHNjcm9sbCBvZmZzZXQuCisgICAgICAgIGlmIChpID4gMCAmJiBjdXJyZW50U3RlcC5t
X3JlbmRlcmVyID09IGNvbnRhaW5lcikgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAg
ICAgIGZvdW5kQ29udGFpbmVyID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKwogICAgICAgICAvLyBJZiB0aGlzIGJveCBoYXMgYSB0cmFuc2Zvcm0sIGl0IGFj
dHMgYXMgYSBmaXhlZCBwb3NpdGlvbiBjb250YWluZXIKICAgICAgICAgLy8gZm9yIGZpeGVkIGRl
c2NlbmRhbnRzLCB3aGljaCBwcmV2ZW50cyB0aGUgcHJvcGFnYXRpb24gb2YgJ2ZpeGVkJwogICAg
ICAgICAvLyB1bmxlc3MgdGhlIGxheWVyIGl0c2VsZiBpcyBhbHNvIGZpeGVkIHBvc2l0aW9uLgpA
QCAtMTEwLDcgKzc5LDggQEAgdm9pZCBSZW5kZXJHZW9tZXRyeU1hcDo6bWFwVG9BYnNvbHV0ZShU
cmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUpIGNvbnN0CiAgICAgICAgICAgICBpbkZpeGVk
ID0gdHJ1ZTsKIAogICAgICAgICBpZiAoIWkpIHsKLSAgICAgICAgICAgIGlmIChjdXJyZW50U3Rl
cC5tX3RyYW5zZm9ybSkKKyAgICAgICAgICAgIC8vIEEgbnVsbCBjb250YWluZXIgaW5kaWNhdGVz
IG1hcHBpbmcgdGhyb3VnaCB0aGUgUmVuZGVyVmlldywgc28gaW5jbHVkaW5nIGl0cyB0cmFuc2Zv
cm0gKHRoZSBwYWdlIHNjYWxlKS4KKyAgICAgICAgICAgIGlmICghY29udGFpbmVyICYmIGN1cnJl
bnRTdGVwLm1fdHJhbnNmb3JtKQogICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0YXRlLmFwcGx5
VHJhbnNmb3JtKCpjdXJyZW50U3RlcC5tX3RyYW5zZm9ybS5nZXQoKSk7CiAKICAgICAgICAgICAg
IC8vIFRoZSByb290IGdldHMgc3BlY2lhbCB0cmVhdG1lbnQgZm9yIGZpeGVkIHBvc2l0aW9uCkBA
IC0xMjUsOSArOTUsNTMgQEAgdm9pZCBSZW5kZXJHZW9tZXRyeU1hcDo6bWFwVG9BYnNvbHV0ZShU
cmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUpIGNvbnN0CiAgICAgICAgIH0KICAgICB9CiAK
KyAgICBBU1NFUlQoZm91bmRDb250YWluZXIpOwogICAgIHRyYW5zZm9ybVN0YXRlLmZsYXR0ZW4o
KTsgICAgCiB9CiAKK0Zsb2F0UG9pbnQgUmVuZGVyR2VvbWV0cnlNYXA6Om1hcFRvQ29udGFpbmVy
KGNvbnN0IEZsb2F0UG9pbnQmIHAsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGNvbnRh
aW5lcikgY29uc3QKK3sKKyAgICBGbG9hdFBvaW50IHJlc3VsdDsKKyAgICAKKyAgICBpZiAoIWhh
c0ZpeGVkUG9zaXRpb25TdGVwKCkgJiYgIWhhc1RyYW5zZm9ybVN0ZXAoKSAmJiAhaGFzTm9uVW5p
Zm9ybVN0ZXAoKSAmJiAoIWNvbnRhaW5lciB8fCAobV9tYXBwaW5nLnNpemUoKSAmJiBjb250YWlu
ZXIgPT0gbV9tYXBwaW5nWzBdLm1fcmVuZGVyZXIpKSkKKyAgICAgICAgcmVzdWx0ID0gcCArIG1f
YWNjdW11bGF0ZWRPZmZzZXQ7CisgICAgZWxzZSB7CisgICAgICAgIFRyYW5zZm9ybVN0YXRlIHRy
YW5zZm9ybVN0YXRlKFRyYW5zZm9ybVN0YXRlOjpBcHBseVRyYW5zZm9ybURpcmVjdGlvbiwgcCk7
CisgICAgICAgIG1hcFRvQ29udGFpbmVyKHRyYW5zZm9ybVN0YXRlLCBjb250YWluZXIpOworICAg
ICAgICByZXN1bHQgPSB0cmFuc2Zvcm1TdGF0ZS5sYXN0UGxhbmFyUG9pbnQoKTsKKyAgICB9CisK
KyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgRmxvYXRQb2ludCByZW5kZXJlck1hcHBlZFJlc3Vs
dCA9IG1fbWFwcGluZy5sYXN0KCkubV9yZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlKHAsIG1fbWFw
Q29vcmRpbmF0ZXNGbGFncyk7CisgICAgQVNTRVJUKHJvdW5kZWRJbnRQb2ludChyZW5kZXJlck1h
cHBlZFJlc3VsdCkgPT0gcm91bmRlZEludFBvaW50KHJlc3VsdCkpOworI2VuZGlmCisKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitGbG9hdFF1YWQgUmVuZGVyR2VvbWV0cnlNYXA6Om1hcFRvQ29u
dGFpbmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCogY29udGFpbmVyKSBjb25zdAoreworICAgIEZsb2F0UmVjdCByZXN1bHQ7CisgICAgCisgICAg
aWYgKCFoYXNGaXhlZFBvc2l0aW9uU3RlcCgpICYmICFoYXNUcmFuc2Zvcm1TdGVwKCkgJiYgIWhh
c05vblVuaWZvcm1TdGVwKCkgJiYgKCFjb250YWluZXIgfHwgKG1fbWFwcGluZy5zaXplKCkgJiYg
Y29udGFpbmVyID09IG1fbWFwcGluZ1swXS5tX3JlbmRlcmVyKSkpIHsKKyAgICAgICAgcmVzdWx0
ID0gcmVjdDsKKyAgICAgICAgcmVzdWx0Lm1vdmUobV9hY2N1bXVsYXRlZE9mZnNldCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgVHJhbnNmb3JtU3RhdGUgdHJhbnNmb3JtU3RhdGUoVHJhbnNmb3Jt
U3RhdGU6OkFwcGx5VHJhbnNmb3JtRGlyZWN0aW9uLCByZWN0LmNlbnRlcigpLCByZWN0KTsKKyAg
ICAgICAgbWFwVG9Db250YWluZXIodHJhbnNmb3JtU3RhdGUsIGNvbnRhaW5lcik7CisgICAgICAg
IHJlc3VsdCA9IHRyYW5zZm9ybVN0YXRlLmxhc3RQbGFuYXJRdWFkKCkuYm91bmRpbmdCb3goKTsK
KyAgICB9CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgRmxvYXRSZWN0IHJlbmRlcmVyTWFw
cGVkUmVzdWx0ID0gbV9tYXBwaW5nLmxhc3QoKS5tX3JlbmRlcmVyLT5sb2NhbFRvQ29udGFpbmVy
UXVhZChyZWN0LCBjb250YWluZXIsIG1fbWFwQ29vcmRpbmF0ZXNGbGFncykuYm91bmRpbmdCb3go
KTsKKyAgICAvLyBJbnNwZWN0b3IgY3JlYXRlcyByZW5kZXJlcnMgd2l0aCBuZWdhdGl2ZSB3aWR0
aCA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3MTk0Pi4KKyAgICAv
LyBUYWtpbmcgRmxvYXRRdWFkIGJvdW5kcyBhdm9pZHMgc3B1cmlvdXMgYXNzZXJ0aW9ucyBiZWNh
dXNlIG9mIHRoYXQuCisgICAgQVNTRVJUKGVuY2xvc2luZ0ludFJlY3QocmVuZGVyZXJNYXBwZWRS
ZXN1bHQpID09IGVuY2xvc2luZ0ludFJlY3QoRmxvYXRRdWFkKHJlc3VsdCkuYm91bmRpbmdCb3go
KSkpOworI2VuZGlmCisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIFJlbmRlckdlb21l
dHJ5TWFwOjpwdXNoTWFwcGluZ3NUb0FuY2VzdG9yKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yUmVuZGVyZXIpCiB7CiAg
ICAgLy8gV2UgbmVlZCB0byBwdXNoIG1hcHBpbmdzIGluIHJldmVyc2Ugb3JkZXIgaGVyZSwgc28g
ZG8gaW5zZXJ0aW9ucyByYXRoZXIgdGhhbiBhcHBlbmRzLgpAQCAtMTQ1LDcgKzE1OSw4IEBAIHN0
YXRpYyBib29sIGNhbk1hcFZpYUxheWVyKGNvbnN0IFJlbmRlckxheWVyKiBsYXllcikKICAgICBp
ZiAoc3R5bGUtPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbiB8fCBzdHlsZS0+aXNGbGlwcGVk
QmxvY2tzV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlm
IChsYXllci0+cmVuZGVyZXIoKS0+aGFzQ29sdW1ucygpIHx8IGxheWVyLT5yZW5kZXJlcigpLT5o
YXNUcmFuc2Zvcm0oKSkKKyAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZW5kZXJlciA9IGxh
eWVyLT5yZW5kZXJlcigpOworICAgIGlmIChyZW5kZXJlci0+aGFzQ29sdW1ucygpIHx8IHJlbmRl
cmVyLT5oYXNUcmFuc2Zvcm0oKSB8fCByZW5kZXJlci0+aXNSZW5kZXJGbG93VGhyZWFkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIEVOQUJMRShTVkcpCkBAIC0xNjYsOSArMTgxLDE2
IEBAIHZvaWQgUmVuZGVyR2VvbWV0cnlNYXA6OnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IoY29uc3Qg
UmVuZGVyTGF5ZXIqIGxheWVyLCBjb25zdCBSCiAgICAgICAgIGNhbkNvbnZlcnRJbkxheWVyVHJl
ZSA9IGNhbk1hcFZpYUxheWVyKGN1cnJlbnQpOwogCiAgICAgaWYgKGNhbkNvbnZlcnRJbkxheWVy
VHJlZSkgewotICAgICAgICBUZW1wb3JhcnlDaGFuZ2U8c2l6ZV90PiBwb3NpdGlvbkNoYW5nZSht
X2luc2VydGlvblBvc2l0aW9uLCBtX21hcHBpbmcuc2l6ZSgpKTsKICAgICAgICAgTGF5b3V0UG9p
bnQgbGF5ZXJPZmZzZXQ7CiAgICAgICAgIGxheWVyLT5jb252ZXJ0VG9MYXllckNvb3JkcyhhbmNl
c3RvckxheWVyLCBsYXllck9mZnNldCk7CisgICAgICAgIAorICAgICAgICAvLyBUaGUgUmVuZGVy
VmlldyBtdXN0IGJlIHB1c2hlZCBmaXJzdC4KKyAgICAgICAgaWYgKCFtX21hcHBpbmcuc2l6ZSgp
KSB7CisgICAgICAgICAgICBBU1NFUlQoYW5jZXN0b3JMYXllci0+cmVuZGVyZXIoKS0+aXNSZW5k
ZXJWaWV3KCkpOworICAgICAgICAgICAgcHVzaE1hcHBpbmdzVG9BbmNlc3RvcihhbmNlc3Rvckxh
eWVyLT5yZW5kZXJlcigpLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIFRlbXBvcmFyeUNoYW5n
ZTxzaXplX3Q+IHBvc2l0aW9uQ2hhbmdlKG1faW5zZXJ0aW9uUG9zaXRpb24sIG1fbWFwcGluZy5z
aXplKCkpOwogICAgICAgICBwdXNoKHJlbmRlcmVyLCB0b0xheW91dFNpemUobGF5ZXJPZmZzZXQp
LCAvKmFjY3VtdWxhdGluZ1RyYW5zZm9ybSovIHRydWUsIC8qaXNOb25Vbmlmb3JtKi8gZmFsc2Us
IC8qaXNGaXhlZFBvc2l0aW9uKi8gZmFsc2UsIC8qaGFzVHJhbnNmb3JtKi8gZmFsc2UpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckdlb21ldHJ5TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR2Vv
bWV0cnlNYXAuaAppbmRleCAxNWRjODg0ZDNkYTExZWEzYTE3NTgwN2U1YTk0ODAwNmIwNTcxNmVi
Li4wOGIyNzc5MTMxYjNhZDQ3NGQwMTdlNWE2ZDYxZTJhMTEyMzZhOTBkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAuaApAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJM
YXlvdXRTaXplLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiVHJhbnNm
b3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKQEAgLTM3LDcgKzM4
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSZW5kZXJMYXllcjsKIGNsYXNzIFJl
bmRlckxheWVyTW9kZWxPYmplY3Q7Ci1jbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJW
aWV3OwogY2xhc3MgVHJhbnNmb3JtU3RhdGU7CiAKQEAgLTc0LDExICs3NCwyNCBAQCBzdHJ1Y3Qg
UmVuZGVyR2VvbWV0cnlNYXBTdGVwIHsKIGNsYXNzIFJlbmRlckdlb21ldHJ5TWFwIHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShSZW5kZXJHZW9tZXRyeU1hcCk7CiBwdWJsaWM6Ci0gICAgUmVu
ZGVyR2VvbWV0cnlNYXAoKTsKKyAgICBSZW5kZXJHZW9tZXRyeU1hcChNYXBDb29yZGluYXRlc0Zs
YWdzID0gVXNlVHJhbnNmb3JtcyB8IFNuYXBPZmZzZXRGb3JUcmFuc2Zvcm1zKTsKICAgICB+UmVu
ZGVyR2VvbWV0cnlNYXAoKTsKIAotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb2ludChjb25zdCBG
bG9hdFBvaW50JikgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IGFic29sdXRlUmVjdChjb25zdCBGbG9h
dFJlY3QmKSBjb25zdDsKKyAgICBGbG9hdFBvaW50IGFic29sdXRlUG9pbnQoY29uc3QgRmxvYXRQ
b2ludCYgcCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtYXBUb0NvbnRhaW5lcihwLCAw
KTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgYWJzb2x1dGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtYXBUb0NvbnRhaW5lcihyZWN0LCAw
KS5ib3VuZGluZ0JveCgpOworICAgIH0KKworICAgIC8vIE1hcCB0byBhIGNvbnRhaW5lci4gV2ls
bCBhc3NlcnQgdGhhdCB0aGUgY29udGFpbmVyIGhhcyBiZWVuIHB1c2hlZCBvbnRvIHRoaXMgbWFw
LgorICAgIC8vIEEgbnVsbCBjb250YWluZXIgbWFwcyB0aHJvdWdoIHRoZSBSZW5kZXJWaWV3IChp
bmNsdWRpbmcgaXRzIHNjYWxlIHRyYW5zZm9ybSwgaWYgYW55KS4KKyAgICAvLyBJZiB0aGUgY29u
dGFpbmVyIGlzIHRoZSBSZW5kZXJWaWV3LCB0aGUgc2Nyb2xsIG9mZnNldCBpcyBhcHBsaWVkLCBi
dXQgbm90IHRoZSBzY2FsZS4KKyAgICBGbG9hdFBvaW50IG1hcFRvQ29udGFpbmVyKGNvbnN0IEZs
b2F0UG9pbnQmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KikgY29uc3Q7CisgICAgRmxv
YXRRdWFkIG1hcFRvQ29udGFpbmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFJlbmRlckxheWVy
TW9kZWxPYmplY3QqKSBjb25zdDsKICAgICAKICAgICAvLyBDYWxsZWQgYnkgY29kZSB3YWxraW5n
IHRoZSByZW5kZXJlciBvciBsYXllciB0cmVlcy4KICAgICB2b2lkIHB1c2hNYXBwaW5nc1RvQW5j
ZXN0b3IoY29uc3QgUmVuZGVyTGF5ZXIqLCBjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXll
cik7CkBAIC05Nyw3ICsxMTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwdXNoVmlldyhjb25zdCBS
ZW5kZXJWaWV3KiwgY29uc3QgTGF5b3V0U2l6ZSYgc2Nyb2xsT2Zmc2V0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCogPSAwKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIG1hcFRvQWJzb2x1dGUo
VHJhbnNmb3JtU3RhdGUmKSBjb25zdDsKKyAgICB2b2lkIG1hcFRvQ29udGFpbmVyKFRyYW5zZm9y
bVN0YXRlJiwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY29udGFpbmVyID0gMCkgY29u
c3Q7CiAKICAgICB2b2lkIHN0ZXBJbnNlcnRlZChjb25zdCBSZW5kZXJHZW9tZXRyeU1hcFN0ZXAm
KTsKICAgICB2b2lkIHN0ZXBSZW1vdmVkKGNvbnN0IFJlbmRlckdlb21ldHJ5TWFwU3RlcCYpOwpA
QCAtMTE0LDYgKzEyNyw3IEBAIHByaXZhdGU6CiAgICAgaW50IG1fZml4ZWRTdGVwc0NvdW50Owog
ICAgIFJlbmRlckdlb21ldHJ5TWFwU3RlcHMgbV9tYXBwaW5nOwogICAgIExheW91dFNpemUgbV9h
Y2N1bXVsYXRlZE9mZnNldDsKKyAgICBNYXBDb29yZGluYXRlc0ZsYWdzIG1fbWFwQ29vcmRpbmF0
ZXNGbGFnczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDdiYTRmZThiYjY4MWFlNGY5Zjg2ODc3N2EwY2I2
NzkyNjQ5NjZjNDguLjQ1NjIzMjVlZWY5MThhYThmMWRkNmM0MzY4N2E0ZTE3ZTM1MzFkY2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtNzcsNiArNzcsNyBA
QAogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlJlbmRlckFyZW5h
LmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxvd1RocmVhZC5oIgorI2luY2x1ZGUgIlJlbmRlckdlb21l
dHJ5TWFwLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWFy
cXVlZS5oIgogI2luY2x1ZGUgIlJlbmRlclJlcGxpY2EuaCIKQEAgLTMzNCw1NSArMzM1LDM0IEBA
IExheW91dFBvaW50IFJlbmRlckxheWVyOjpjb21wdXRlT2Zmc2V0RnJvbVJvb3QoYm9vbCYgaGFz
TGF5ZXJPZmZzZXQpIGNvbnN0CiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290LCBV
cGRhdGVMYXllclBvc2l0aW9uc0ZsYWdzIGZsYWdzKQordm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlckxheW91dChjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBV
cGRhdGVMYXllclBvc2l0aW9uc0ZsYWdzIGZsYWdzKQogewotI2lmICFBU1NFUlRfRElTQUJMRUQK
LSAgICBpZiAob2Zmc2V0RnJvbVJvb3QpIHsKLSAgICAgICAgYm9vbCBoYXNMYXllck9mZnNldDsK
LSAgICAgICAgTGF5b3V0UG9pbnQgY29tcHV0ZWRPZmZzZXRGcm9tUm9vdCA9IGNvbXB1dGVPZmZz
ZXRGcm9tUm9vdChoYXNMYXllck9mZnNldCk7Ci0gICAgICAgIEFTU0VSVChoYXNMYXllck9mZnNl
dCk7Ci0gICAgICAgIEFTU0VSVCgqb2Zmc2V0RnJvbVJvb3QgPT0gY29tcHV0ZWRPZmZzZXRGcm9t
Um9vdCk7Ci0gICAgfQotI2VuZGlmCisgICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAo
VXNlVHJhbnNmb3Jtcyk7CisgICAgaWYgKHRoaXMgIT0gcm9vdExheWVyKQorICAgICAgICBnZW9t
ZXRyeU1hcC5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKHBhcmVudCgpLCAwKTsKKyAgICB1cGRhdGVM
YXllclBvc2l0aW9ucygmZ2VvbWV0cnlNYXAsIGZsYWdzKTsKK30KIAordm9pZCBSZW5kZXJMYXll
cjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBV
cGRhdGVMYXllclBvc2l0aW9uc0ZsYWdzIGZsYWdzKQorewogICAgIHVwZGF0ZUxheWVyUG9zaXRp
b24oKTsgLy8gRm9yIHJlbHBvc2l0aW9uZWQgbGF5ZXJzIG9yIG5vbi1wb3NpdGlvbmVkIGxheWVy
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8ga2VlcCBpbiBzeW5j
LCBzaW5jZSB3ZSBtYXkgaGF2ZSBzaGlmdGVkIHJlbGF0aXZlCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB0byBvdXIgcGFyZW50IGxheWVyLgotICAgIExheW91dFBvaW50IG9sZE9mZnNl
dEZyb21Sb290OwotICAgIGlmIChvZmZzZXRGcm9tUm9vdCkgewotICAgICAgICAvLyBXZSBjYW4n
dCBjYWNoZSBvdXIgb2Zmc2V0IHRvIHRoZSByZXBhaW50IGNvbnRhaW5lciBpZiB0aGUgbWFwcGlu
ZyBpcyBhbnl0aGluZyBtb3JlIGNvbXBsZXggdGhhbiBhIHNpbXBsZSB0cmFuc2xhdGlvbgotICAg
ICAgICBpZiAoIWNhblVzZUNvbnZlcnRUb0xheWVyQ29vcmRzKCkpCi0gICAgICAgICAgICBvZmZz
ZXRGcm9tUm9vdCA9IDA7IC8vIElmIG91ciBjYWNoZWQgb2Zmc2V0IGlzIGludmFsaWQgbWFrZSBz
dXJlIGl0J3Mgbm90IHBhc3NlZCB0byBhbnkgb2Ygb3VyIGNoaWxkcmVuCisgICAgaWYgKGdlb21l
dHJ5TWFwKQorICAgICAgICBnZW9tZXRyeU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0aGlz
LCBwYXJlbnQoKSk7CisgICAgCisgICAgaWYgKGhhc092ZXJmbG93Q29udHJvbHMoKSkgeworICAg
ICAgICBMYXlvdXRQb2ludCBvZmZzZXRGcm9tUm9vdDsKKyAgICAgICAgaWYgKGdlb21ldHJ5TWFw
KQorICAgICAgICAgICAgb2Zmc2V0RnJvbVJvb3QgPSBMYXlvdXRQb2ludChnZW9tZXRyeU1hcC0+
YWJzb2x1dGVQb2ludChGbG9hdFBvaW50KCkpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBvbGRPZmZzZXRGcm9tUm9vdCA9ICpvZmZzZXRGcm9tUm9vdDsKLSAgICAgICAgICAgIC8vIEZy
ZXF1ZW50bHkgb3VyIHBhcmVudCBsYXllcidzIHJlbmRlcmVyIHdpbGwgYmUgdGhlIHNhbWUgYXMg
b3VyIHJlbmRlcmVyJ3MgY29udGFpbmluZyBibG9jay4gIEluIHRoYXQgY2FzZSwKLSAgICAgICAg
ICAgIC8vIHdlIGp1c3QgdXBkYXRlIHRoZSBjYWNoZSB1c2luZyBvdXIgb2Zmc2V0IHRvIG91ciBw
YXJlbnQgKHdoaWNoIGlzIG1fdG9wTGVmdCkuIE90aGVyd2lzZSwgcmVnZW5lcmF0ZWQgY2FjaGVk
Ci0gICAgICAgICAgICAvLyBvZmZzZXRzIHRvIHRoZSByb290IGZyb20gdGhlIHJlbmRlciB0cmVl
LgotICAgICAgICAgICAgaWYgKCFtX3BhcmVudCB8fCBtX3BhcmVudC0+cmVuZGVyZXIoKSA9PSBy
ZW5kZXJlcigpLT5jb250YWluaW5nQmxvY2soKSkKLSAgICAgICAgICAgICAgICBvZmZzZXRGcm9t
Um9vdC0+bW92ZShtX3RvcExlZnQueCgpLCBtX3RvcExlZnQueSgpKTsgLy8gRmFzdCBjYXNlCi0g
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBMYXlvdXRQb2ludCBvZmZzZXQ7Ci0g
ICAgICAgICAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdCgpLCBvZmZzZXQpOwotICAg
ICAgICAgICAgICAgICpvZmZzZXRGcm9tUm9vdCA9IG9mZnNldDsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBJdCBsb29rcyBzdXNwaWNpb3VzIHRvIGNhbGwgY29udmVydFRv
TGF5ZXJDb29yZHMgaGVyZQorICAgICAgICAgICAgLy8gYXMgY2FuVXNlQ29udmVydFRvTGF5ZXJD
b29yZHMgbWF5IGJlIHRydWUgZm9yIGFuIGFuY2VzdG9yIGxheWVyLgorICAgICAgICAgICAgY29u
dmVydFRvTGF5ZXJDb29yZHMocm9vdCgpLCBvZmZzZXRGcm9tUm9vdCk7CiAgICAgICAgIH0KKyAg
ICAgICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHRvU2l6ZShyb3VuZGVkSW50UG9pbnQob2Zm
c2V0RnJvbVJvb3QpKSk7CiAgICAgfQotCi0gICAgTGF5b3V0UG9pbnQgb2Zmc2V0OwotICAgIGlm
IChvZmZzZXRGcm9tUm9vdCkgewotICAgICAgICBvZmZzZXQgPSAqb2Zmc2V0RnJvbVJvb3Q7Ci0j
aWZuZGVmIE5ERUJVRwotICAgICAgICBMYXlvdXRQb2ludCBjb21wdXRlZE9mZnNldEZyb21Sb290
OwotICAgICAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhyb290KCksIGNvbXB1dGVkT2Zmc2V0RnJv
bVJvb3QpOwotICAgICAgICBBU1NFUlQob2Zmc2V0ID09IGNvbXB1dGVkT2Zmc2V0RnJvbVJvb3Qp
OwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRklYTUU6IEl0IGxvb2tzIHN1c3Bp
Y2lvdXMgdG8gY2FsbCBjb252ZXJ0VG9MYXllckNvb3JkcyBoZXJlCi0gICAgICAgIC8vIGFzIGNh
blVzZUNvbnZlcnRUb0xheWVyQ29vcmRzIG1heSBiZSB0cnVlIGZvciBhbiBhbmNlc3RvciBsYXll
ci4KLSAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdCgpLCBvZmZzZXQpOwotICAgIH0K
LSAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHModG9TaXplKHJvdW5kZWRJbnRQb2ludChvZmZz
ZXQpKSk7Ci0KKyAgICAKICAgICB1cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50RmxhZ3MoKTsKIAog
ICAgIGlmIChmbGFncyAmIFVwZGF0ZVBhZ2luYXRpb24pCkBAIC00MDEsNyArMzgxLDcgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoTGF5b3V0UG9pbnQqIG9mZnNldEZy
b21Sb290LCBVcGRhdGVMYXllclAKICAgICAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVw
YWludENvbnRhaW5lciA9IHJlbmRlcmVyKCktPmNvbnRhaW5lckZvclJlcGFpbnQoKTsKICAgICAg
ICAgTGF5b3V0UmVjdCBvbGRSZXBhaW50UmVjdCA9IG1fcmVwYWludFJlY3Q7CiAgICAgICAgIExh
eW91dFJlY3Qgb2xkT3V0bGluZUJveCA9IG1fb3V0bGluZUJveDsKLSAgICAgICAgY29tcHV0ZVJl
cGFpbnRSZWN0cyhyZXBhaW50Q29udGFpbmVyLCBvZmZzZXRGcm9tUm9vdCk7CisgICAgICAgIGNv
bXB1dGVSZXBhaW50UmVjdHMocmVwYWludENvbnRhaW5lciwgZ2VvbWV0cnlNYXApOwogCiAgICAg
ICAgIC8vIEZJWE1FOiBTaG91bGQgQVNTRVJUIHRoYXQgdmFsdWUgY2FsY3VsYXRlZCBmb3IgbV9v
dXRsaW5lQm94IHVzaW5nIHRoZSBjYWNoZWQgb2Zmc2V0IGlzIHRoZSBzYW1lCiAgICAgICAgIC8v
IGFzIHRoZSB2YWx1ZSBub3QgdXNpbmcgdGhlIGNhY2hlZCBvZmZzZXQsIGJ1dCB3ZSBjYW4ndCBk
dWUgdG8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3MDQ4CkBAIC00
MzUsNyArNDE1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoTGF5
b3V0UG9pbnQqIG9mZnNldEZyb21Sb290LCBVcGRhdGVMYXllclAKICAgICAgICAgZmxhZ3MgfD0g
VXBkYXRlUGFnaW5hdGlvbjsKIAogICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gZmlyc3RD
aGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hp
bGQtPnVwZGF0ZUxheWVyUG9zaXRpb25zKG9mZnNldEZyb21Sb290LCBmbGFncyk7CisgICAgICAg
IGNoaWxkLT51cGRhdGVMYXllclBvc2l0aW9ucyhnZW9tZXRyeU1hcCwgZmxhZ3MpOwogCiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGlmICgoZmxhZ3MgJiBVcGRhdGVDb21w
b3NpdGluZ0xheWVycykgJiYgaXNDb21wb3NpdGVkKCkpCkBAIC00NTEsOCArNDMxLDggQEAgdm9p
ZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoTGF5b3V0UG9pbnQqIG9mZnNldEZy
b21Sb290LCBVcGRhdGVMYXllclAKICAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9
IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uOwogICAgIH0KIAotICAgIGlmIChvZmZzZXRGcm9t
Um9vdCkKLSAgICAgICAgKm9mZnNldEZyb21Sb290ID0gb2xkT2Zmc2V0RnJvbVJvb3Q7CisgICAg
aWYgKGdlb21ldHJ5TWFwKQorICAgICAgICBnZW9tZXRyeU1hcC0+cG9wTWFwcGluZ3NUb0FuY2Vz
dG9yKHBhcmVudCgpKTsKIH0KIAogTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6cmVwYWludFJlY3RJ
bmNsdWRpbmdOb25Db21wb3NpdGluZ0Rlc2NlbmRhbnRzKCkgY29uc3QKQEAgLTQ5MiwxMiArNDcy
LDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmRpcnR5QW5jZXN0b3JDaGFpbkhhc1NlbGZQYWludGlu
Z0xheWVyRGVzY2VuZGFudFN0YXR1cygpCiAgICAgfQogfQogCi12b2lkIFJlbmRlckxheWVyOjpj
b21wdXRlUmVwYWludFJlY3RzKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRD
b250YWluZXIsIExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCkKK3ZvaWQgUmVuZGVyTGF5ZXI6
OmNvbXB1dGVSZXBhaW50UmVjdHMoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lciwgY29uc3QgUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwKQogewogICAg
IEFTU0VSVCghbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5KTsKIAogICAgIG1fcmVwYWludFJl
Y3QgPSByZW5kZXJlcigpLT5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChyZXBhaW50Q29u
dGFpbmVyKTsKLSAgICBtX291dGxpbmVCb3ggPSByZW5kZXJlcigpLT5vdXRsaW5lQm91bmRzRm9y
UmVwYWludChyZXBhaW50Q29udGFpbmVyLCBvZmZzZXRGcm9tUm9vdCk7CisgICAgbV9vdXRsaW5l
Qm94ID0gcmVuZGVyZXIoKS0+b3V0bGluZUJvdW5kc0ZvclJlcGFpbnQocmVwYWludENvbnRhaW5l
ciwgZ2VvbWV0cnlNYXApOwogfQogCiAKQEAgLTUyMSw3ICs1MDEsMTYgQEAgdm9pZCBSZW5kZXJM
YXllcjo6Y2xlYXJSZXBhaW50UmVjdHMoKQogICAgIG1fb3V0bGluZUJveCA9IEludFJlY3QoKTsK
IH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChV
cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZ3MgZmxhZ3MpCit2b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCkKK3sKKyAgICBSZW5kZXJHZW9t
ZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKKyAgICBSZW5kZXJWaWV3KiB2aWV3
ID0gcmVuZGVyZXIoKS0+dmlldygpOworICAgIGlmICh0aGlzICE9IHZpZXctPmxheWVyKCkpCisg
ICAgICAgIGdlb21ldHJ5TWFwLnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IocGFyZW50KCksIDApOwor
ICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwKTsKK30KKwor
dm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJH
ZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxG
bGFncyBmbGFncykKIHsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgbmVlZGVkLCBi
dXQgdGhlcmUgYXJlIHNvbWUgY29ybmVyIGNhc2VzIHdoZXJlCiAgICAgLy8gdGhlc2UgZmxhZ3Mg
YXJlIHN0aWxsIGRpcnR5LiBVcGRhdGUgc28gdGhhdCB0aGUgY2hlY2sgYmVsb3cgaXMgdmFsaWQu
CkBAIC01MzUsMjIgKzUyNCwyNSBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyU2Nyb2xsKFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbAogCiAgICAgdXBk
YXRlTGF5ZXJQb3NpdGlvbigpOwogCisgICAgaWYgKGdlb21ldHJ5TWFwKQorICAgICAgICBnZW9t
ZXRyeU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0aGlzLCBwYXJlbnQoKSk7CisKICAgICBp
ZiAoKGZsYWdzICYgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvcikgfHwgcmVuZGVy
ZXIoKS0+c3R5bGUoKS0+aGFzVmlld3BvcnRDb25zdHJhaW5lZFBvc2l0aW9uKCkpIHsKICAgICAg
ICAgLy8gRklYTUU6IElzIGl0IHdvcnRoIHBhc3NpbmcgdGhlIG9mZnNldEZyb21Sb290IGFyb3Vu
ZCBsaWtlIGluIHVwZGF0ZUxheWVyUG9zaXRpb25zPwogICAgICAgICAvLyBGSVhNRTogV2UgY291
bGQgdHJhY2sgdGhlIHJlcGFpbnQgY29udGFpbmVyIGFzIHdlIHdhbGsgZG93biB0aGUgdHJlZS4K
LSAgICAgICAgY29tcHV0ZVJlcGFpbnRSZWN0cyhyZW5kZXJlcigpLT5jb250YWluZXJGb3JSZXBh
aW50KCkpOworICAgICAgICBjb21wdXRlUmVwYWludFJlY3RzKHJlbmRlcmVyKCktPmNvbnRhaW5l
ckZvclJlcGFpbnQoKSwgZ2VvbWV0cnlNYXApOwogICAgICAgICBmbGFncyB8PSBIYXNTZWVuVmll
d3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yOwogICAgIH0gZWxzZSBpZiAoKGZsYWdzICYgSGFzU2Vl
bkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCkgJiYgIW1fY2FuU2tpcFJlcGFpbnRSZWN0c1VwZGF0
ZU9uU2Nyb2xsKSB7CiAgICAgICAgIC8vIElmIHdlIGhhdmUgc2VlbiBhbiBvdmVyZmxvdyBjbGlw
LCB3ZSBzaG91bGQgdXBkYXRlIG91ciByZXBhaW50IHJlY3RzIGFzIGNsaXBwZWRPdmVyZmxvd1Jl
Y3RGb3JSZXBhaW50CiAgICAgICAgIC8vIGludGVyc2VjdHMgaXQgd2l0aCBvdXIgYW5jZXN0b3Ig
b3ZlcmZsb3cgY2xpcCB0aGF0IG1heSBoYXZlIG1vdmVkLgotICAgICAgICBjb21wdXRlUmVwYWlu
dFJlY3RzKHJlbmRlcmVyKCktPmNvbnRhaW5lckZvclJlcGFpbnQoKSk7CisgICAgICAgIGNvbXB1
dGVSZXBhaW50UmVjdHMocmVuZGVyZXIoKS0+Y29udGFpbmVyRm9yUmVwYWludCgpLCBnZW9tZXRy
eU1hcCk7CiAgICAgfQogCiAgICAgaWYgKHJlbmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgpKQog
ICAgICAgICBmbGFncyB8PSBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwOwogCiAgICAg
Zm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlclNjcm9sbChmbGFncyk7CisgICAgICAgIGNoaWxkLT51cGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyU2Nyb2xsKGdlb21ldHJ5TWFwLCBmbGFncyk7CiAKICAgICAvLyBXZSBkb24ndCB1cGRhdGUg
b3VyIHJlZmxlY3Rpb24gYXMgc2Nyb2xsaW5nIGlzIGEgdHJhbnNsYXRpb24gd2hpY2ggZG9lcyBu
b3QgY2hhbmdlIHRoZSBzaXplKCkKICAgICAvLyBvZiBhbiBvYmplY3QsIHRodXMgUmVuZGVyUmVw
bGljYSB3aWxsIHN0aWxsIHJlcGFpbnQgaXRzZWxmIHByb3Blcmx5IGFzIHRoZSBsYXllciBwb3Np
dGlvbiB3YXMKQEAgLTU2Miw2ICs1NTQsOSBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyU2Nyb2xsKFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbAogICAg
ICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwogICAgICAgICBtX3VwZGF0
aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247CiAgICAgfQor
CisgICAgaWYgKGdlb21ldHJ5TWFwKQorICAgICAgICBnZW9tZXRyeU1hcC0+cG9wTWFwcGluZ3NU
b0FuY2VzdG9yKHBhcmVudCgpKTsKIH0KIAogI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCkBA
IC0xNDI1LDggKzE0MjAsNiBAQCB2b2lkIFJlbmRlckxheWVyOjpyZW1vdmVPbmx5VGhpc0xheWVy
KCkKICAgICBjbGVhckNsaXBSZWN0c0luY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CiAKICAgICBSZW5k
ZXJMYXllciogbmV4dFNpYiA9IG5leHRTaWJsaW5nKCk7Ci0gICAgYm9vbCBoYXNMYXllck9mZnNl
dDsKLSAgICBjb25zdCBMYXlvdXRQb2ludCBvZmZzZXRGcm9tUm9vdEJlZm9yZU1vdmUgPSBjb21w
dXRlT2Zmc2V0RnJvbVJvb3QoaGFzTGF5ZXJPZmZzZXQpOwogCiAgICAgLy8gUmVtb3ZlIHRoZSBj
aGlsZCByZWZsZWN0aW9uIGxheWVyIGJlZm9yZSBtb3Zpbmcgb3RoZXIgY2hpbGQgbGF5ZXJzLgog
ICAgIC8vIFRoZSByZWZsZWN0aW9uIGxheWVyIHNob3VsZCBub3QgYmUgbW92ZWQgdG8gdGhlIHBh
cmVudC4KQEAgLTE0NDAsMTAgKzE0MzMsOSBAQCB2b2lkIFJlbmRlckxheWVyOjpyZW1vdmVPbmx5
VGhpc0xheWVyKCkKICAgICAgICAgcmVtb3ZlQ2hpbGQoY3VycmVudCk7CiAgICAgICAgIG1fcGFy
ZW50LT5hZGRDaGlsZChjdXJyZW50LCBuZXh0U2liKTsKICAgICAgICAgY3VycmVudC0+c2V0UmVw
YWludFN0YXR1cyhOZWVkc0Z1bGxSZXBhaW50KTsKLSAgICAgICAgTGF5b3V0UG9pbnQgb2Zmc2V0
RnJvbVJvb3QgPSBvZmZzZXRGcm9tUm9vdEJlZm9yZU1vdmU7CiAgICAgICAgIC8vIHVwZGF0ZUxh
eWVyUG9zaXRpb25zIGRlcGVuZHMgb24gaGFzTGF5ZXIoKSBhbHJlYWR5IGJlaW5nIGZhbHNlIGZv
ciBwcm9wZXIgbGF5b3V0LgogICAgICAgICBBU1NFUlQoIXJlbmRlcmVyKCktPmhhc0xheWVyKCkp
OwotICAgICAgICBjdXJyZW50LT51cGRhdGVMYXllclBvc2l0aW9ucyhoYXNMYXllck9mZnNldCA/
ICZvZmZzZXRGcm9tUm9vdCA6IDApOworICAgICAgICBjdXJyZW50LT51cGRhdGVMYXllclBvc2l0
aW9ucygwKTsgLy8gRklYTUU6IHVzZSBnZW9tZXRyeSBtYXAuCiAgICAgICAgIGN1cnJlbnQgPSBu
ZXh0OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCBi
NDFlMjlmNTE0Nzg0NGQxNzZmMmU3MzJjZmU1NTA3ZGRlMDhkMTk5Li41MTE0N2VjODg2MDIyMzc5
YjliZWIwMWQ1ZDE0M2UyMWFjNjEyY2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuaApAQCAtNjIsNiArNjIsNyBAQCBjbGFzcyBGaWx0ZXJPcGVyYXRpb25zOwogY2xhc3Mg
SGl0VGVzdFJlcXVlc3Q7CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgSGl0VGVzdGluZ1Ry
YW5zZm9ybVN0YXRlOworY2xhc3MgUmVuZGVyR2VvbWV0cnlNYXA7CiBjbGFzcyBSZW5kZXJNYXJx
dWVlOwogY2xhc3MgUmVuZGVyUmVwbGljYTsKIGNsYXNzIFJlbmRlclNjcm9sbGJhclBhcnQ7CkBA
IC0zODgsNyArMzg5LDcgQEAgcHVibGljOgogICAgIGJvb2wgY2FuUmVuZGVyM0RUcmFuc2Zvcm1z
KCkgY29uc3Q7CiAKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKLSAgICAKKwogICAg
IGVudW0gVXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnIHsKICAgICAgICAgQ2hlY2tGb3JSZXBhaW50
ID0gMSwKICAgICAgICAgSXNDb21wb3NpdGluZ1VwZGF0ZVJvb3QgPSAxIDw8IDEsCkBAIC0zOTcs
OSArMzk4LDkgQEAgcHVibGljOgogICAgIH07CiAgICAgdHlwZWRlZiB1bnNpZ25lZCBVcGRhdGVM
YXllclBvc2l0aW9uc0ZsYWdzOwogICAgIHN0YXRpYyBjb25zdCBVcGRhdGVMYXllclBvc2l0aW9u
c0ZsYWdzIGRlZmF1bHRGbGFncyA9IENoZWNrRm9yUmVwYWludCB8IElzQ29tcG9zaXRpbmdVcGRh
dGVSb290IHwgVXBkYXRlQ29tcG9zaXRpbmdMYXllcnM7Ci0gICAgLy8gUHJvdmlkaW5nIHxjYWNo
ZWRPZmZzZXR8IHByZXZlbnRzIGEgb3V0bGluZUJveEZvclJlcGFpbnQgZnJvbSB3YWxraW5nIGJh
Y2sgdG8gdGhlIHJvb3QgZm9yIGVhY2ggbGF5ZXIgaW4gb3VyIHN1YnRyZWUuCi0gICAgLy8gVGhp
cyBpcyBhbiBvcHRpbWlzdGljIG9wdGltaXphdGlvbiB0aGF0IGlzIG5vdCBndWFyYW50ZWVkIHRv
IHN1Y2NlZWQuCi0gICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9ucyhMYXlvdXRQb2ludCogb2Zm
c2V0RnJvbVJvb3QsIFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZ3MgPSBkZWZhdWx0RmxhZ3MpOwor
CisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyTGF5b3V0KGNvbnN0IFJlbmRlckxh
eWVyKiByb290TGF5ZXIsIFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZ3MpOworICAgIHZvaWQgdXBk
YXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgpOwogICAgIAogICAgIGJvb2wgaXNQYWdpbmF0
ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUGFnaW5hdGVkOyB9CiAKQEAgLTQ4OCw3ICs0ODksNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBjYW5Vc2VDb252ZXJ0VG9MYXllckNvb3JkcygpIGNvbnN0CiAg
ICAgewogICAgICAgICAvLyBUaGVzZSBSZW5kZXJPYmplY3QgaGF2ZSBhbiBpbXBhY3Qgb24gdGhl
aXIgbGF5ZXJzJyB3aXRob3V0IHRoZW0ga25vd2luZyBhYm91dCBpdC4KLSAgICAgICAgcmV0dXJu
ICFyZW5kZXJlcigpLT5oYXNDb2x1bW5zKCkgJiYgIXJlbmRlcmVyKCktPmhhc1RyYW5zZm9ybSgp
ICYmICFpc0NvbXBvc2l0ZWQoKQorICAgICAgICByZXR1cm4gIXJlbmRlcmVyKCktPmhhc0NvbHVt
bnMoKSAmJiAhcmVuZGVyZXIoKS0+aGFzVHJhbnNmb3JtKCkKICNpZiBFTkFCTEUoU1ZHKQogICAg
ICAgICAgICAgJiYgIXJlbmRlcmVyKCktPmlzU1ZHUm9vdCgpCiAjZW5kaWYKQEAgLTU3NCwxNCAr
NTc1LDYgQEAgcHVibGljOgogICAgIExheW91dFJlY3QgcmVwYWludFJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX3JlcGFpbnRSZWN0OyB9CiAgICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdEluY2x1ZGlu
Z05vbkNvbXBvc2l0aW5nRGVzY2VuZGFudHMoKSBjb25zdDsKIAotICAgIGVudW0gVXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWcgewotICAgICAgICBOb0ZsYWcgPSAwLAotICAgICAg
ICBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yID0gMSA8PCAwLAotICAgICAgICBI
YXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwID0gMSA8PCAxCi0gICAgfTsKLQotICAgIHR5
cGVkZWYgdW5zaWduZWQgVXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWdzOwotICAg
IHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChVcGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyU2Nyb2xsRmxhZ3MgPSBOb0ZsYWcpOwogICAgIHZvaWQgc2V0UmVwYWludFN0YXR1cyhS
ZXBhaW50U3RhdHVzIHN0YXR1cykgeyBtX3JlcGFpbnRTdGF0dXMgPSBzdGF0dXM7IH0KIAogICAg
IExheW91dFVuaXQgc3RhdGljSW5saW5lUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXRp
Y0lubGluZVBvc2l0aW9uOyB9CkBAIC02OTksNyArNjkyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHNldEFuY2VzdG9yQ2hhaW5IYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKTsKICAgICB2
b2lkIGRpcnR5QW5jZXN0b3JDaGFpbkhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudFN0YXR1
cygpOwogCi0gICAgdm9pZCBjb21wdXRlUmVwYWludFJlY3RzKGNvbnN0IFJlbmRlckxheWVyTW9k
ZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCA9
IDApOworICAgIHZvaWQgY29tcHV0ZVJlcGFpbnRSZWN0cyhjb25zdCBSZW5kZXJMYXllck1vZGVs
T2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBjb25zdCBSZW5kZXJHZW9tZXRyeU1hcCogPSAwKTsK
ICAgICB2b2lkIGNvbXB1dGVSZXBhaW50UmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50cygpOwogICAg
IHZvaWQgY2xlYXJSZXBhaW50UmVjdHMoKTsKIApAQCAtNzE1LDYgKzcwOCwxNiBAQCBwcml2YXRl
OgogICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eWxlKTsKICAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgp
OwogCisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogPSAw
LCBVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWdzID0gZGVmYXVsdEZsYWdzKTsKKworICAgIGVudW0g
VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWcgeworICAgICAgICBOb0ZsYWcgPSAw
LAorICAgICAgICBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yID0gMSA8PCAwLAor
ICAgICAgICBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwID0gMSA8PCAxCisgICAgfTsK
KyAgICB0eXBlZGVmIHVuc2lnbmVkIFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxGbGFn
czsKKyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0
cnlNYXAqLCBVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZ3MgPSBOb0ZsYWcpOwor
CiAgICAgZnJpZW5kIEludFNpemUgUmVuZGVyQm94OjpzY3JvbGxlZENvbnRlbnRPZmZzZXQoKSBj
b25zdDsKICAgICBJbnRTaXplIHNjcm9sbGVkQ29udGVudE9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2Nyb2xsT2Zmc2V0OyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggYjViNDU2YjNhMjRhYzVhYmYxZGIyYWE5ZTYy
NmZkZDA0NmE0MTNmMi4uZWFlZDk4MTNlM2U4OGY5M2JhMzJkMDJiNWM4ZDk3ZTI3YWE2NzE0YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAKQEAgLTgzLDYgKzgzLDcgQEAgY2xhc3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpPdmVy
bGFwTWFwIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShPdmVybGFwTWFwKTsKIHB1YmxpYzoK
ICAgICBPdmVybGFwTWFwKCkKKyAgICAgICAgOiBtX2dlb21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMp
CiAgICAgewogICAgICAgICAvLyBCZWdpbiBhc3N1bWluZyB0aGUgcm9vdCBsYXllciB3aWxsIGJl
IGNvbXBvc2l0ZWQgc28gdGhhdCB0aGVyZSBpcwogICAgICAgICAvLyBzb21ldGhpbmcgb24gdGhl
IHN0YWNrLiBUaGUgcm9vdCBsYXllciBzaG91bGQgYWxzbyBuZXZlciBnZXQgYW4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBiMWY1NDFmOTFhNmE3ODU0MzY5ZmVj
ZDkzMjI0NzZkYzYwOGQzOTFkLi4xMThhOTk2YWY4MGU0NjVmMGYwZjYwMTYxYjliMWQxZGVkZmNi
YTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC05ODEsNyAr
OTgxLDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsK
ICAgICB2b2lkIGFyZW5hRGVsZXRlKFJlbmRlckFyZW5hKiwgdm9pZCogb2JqZWN0QmFzZSk7CiAK
LSAgICB2aXJ0dWFsIExheW91dFJlY3Qgb3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoY29uc3QgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCogLypyZXBhaW50Q29udGFpbmVyKi8sIExheW91dFBvaW50KiAv
KmNhY2hlZE9mZnNldFRvUmVwYWludENvbnRhaW5lciovID0gMCkgY29uc3QgeyByZXR1cm4gTGF5
b3V0UmVjdCgpOyB9CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IG91dGxpbmVCb3VuZHNGb3JSZXBh
aW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIC8qcmVwYWludENvbnRhaW5lciovLCBj
b25zdCBSZW5kZXJHZW9tZXRyeU1hcCogPSAwKSBjb25zdCB7IHJldHVybiBMYXlvdXRSZWN0KCk7
IH0KIAogICAgIHZpcnR1YWwgYm9vbCBjYW5CZVJlcGxhY2VkV2l0aElubGluZVJ1bkluKCkgY29u
c3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdN
b2RlbE9iamVjdC5jcHAKaW5kZXggYjRjNjdiOWIyYmNmMDllZjcyYWNkMDk4ZWQ4NWYyZDI3MWMz
MWYzNC4uMDE5MjA0ZTRlMmZkZmZjNDMyNjg2MGU0N2U1YTcxNjdmNzU1MzE0MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5j
cHAKQEAgLTcwLDcgKzcwLDcgQEAgY29uc3QgUmVuZGVyT2JqZWN0KiBSZW5kZXJTVkdNb2RlbE9i
amVjdDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXkKIC8vIENvcGllZCBm
cm9tIFJlbmRlckJveCwgdGhpcyBtZXRob2QgbGlrZWx5IHJlcXVpcmVzIGZ1cnRoZXIgcmVmYWN0
b3JpbmcgdG8gd29yayBlYXNpbHkgZm9yIGJvdGggU1ZHIGFuZCBDU1MgQm94IE1vZGVsIGNvbnRl
bnQuCiAvLyBGSVhNRTogVGhpcyBtYXkgYWxzbyBuZWVkIHRvIG1vdmUgaW50byBTVkdSZW5kZXJT
dXBwb3J0IGFzIHRoZSBSZW5kZXJCb3ggdmVyc2lvbiBkZXBlbmRzCiAvLyBvbiBib3JkZXJCb3Vu
ZGluZ0JveCgpIHdoaWNoIFNWRyBSZW5kZXJCb3ggc3ViY2xhc2VzIChsaWtlIFNWR1JlbmRlckJs
b2NrKSBkbyBub3QgaW1wbGVtZW50LgotTGF5b3V0UmVjdCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6
b3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVw
YWludENvbnRhaW5lciwgTGF5b3V0UG9pbnQqKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJTVkdN
b2RlbE9iamVjdDo6b3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdCogcmVwYWludENvbnRhaW5lciwgY29uc3QgUmVuZGVyR2VvbWV0cnlNYXAqKSBjb25z
dAogewogICAgIExheW91dFJlY3QgYm94ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChyZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpKTsKICAgICBhZGp1c3RSZWN0Rm9yT3V0bGluZUFuZFNoYWRv
dyhib3gpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdNb2RlbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdN
b2RlbE9iamVjdC5oCmluZGV4IDUwZTlmNjg2MGU2N2RmYjVkN2U3NDdlOTcyNmM5YzRhY2UzMDlh
NjEuLmRjMmQ1ZGEzOWU4MzkzYzMyZGQxZDBhMTU1MGY5MzFmYjU4ZjBlYjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgKQEAg
LTUzLDcgKzUzLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNsaXBwZWRP
dmVyZmxvd1JlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlRmxv
YXRSZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29u
dGFpbmVyLCBGbG9hdFJlY3QmLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0IE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdXRsaW5lQm91bmRzRm9yUmVwYWludChjb25zdCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBMYXlvdXRQb2ludCopIGNvbnN0
IE9WRVJSSURFOworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdXRsaW5lQm91bmRzRm9yUmVwYWlu
dChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBjb25zdCBS
ZW5kZXJHZW9tZXRyeU1hcCopIGNvbnN0IE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIGFi
c29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxh
dGVkT2Zmc2V0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8
RmxvYXRRdWFkPiYsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdDsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAzMWFjMmZiZGZmYmE3
MzRmMGU4MGYwNjNhMTYzOGQzOGFkYmE3ODEzLi43YjJhZWI0YTE5MGZlMTUzMTk3ODAyMjZjNjBk
MTBlZTI1M2I1OWUwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMTEtMTIgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgRWxpbWluYXRlIGFuY2Vz
dG9yIHRyZWUgd2FsayBjb21wdXRpbmcgb3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoKSB3aGVuIHVw
ZGF0aW5nIGxheWVyIHBvc2l0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTAxODc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgZmFzdC9ibG9jay9mbG9hdC9vdmVyaGFuZ2luZy10YWxsLWJsb2NrLmh0
bWwgb3ZlcmZsb3dzIExheW91dFVuaXRzLCBzbyBjYXVzZXMKKyAgICAgICAgYXNzZXJ0aW9ucyB3
aGVuIHVzaW5nIFJlbmRlckdlb21ldHJ5TWFwIChidWcgMTAxODY1KS4KKworICAgICAgICAqIHBs
YXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICogcGxhdGZvcm0vbWFj
L1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMTItMTEtMTIgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6
a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIEFkZGVkIGV4cGVjdGF0aW9u
cyBmb3IgcGxhdGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvZm9yY2UtY29tcG9zaXRpbmctbW9k
ZS9vdmVyZmxvdy1pZnJhbWUtbGF5ZXIuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMjUzNjJhZjc0ZmFhZDRlNzgyMWFjMWFjYWM2
ZWVjYWJlYjQyZDZmMS4uNzQyMjUxNmM2NTFmZTRmYWRjMGRlMDMxNjhkZDQ4NzBlNWI5ZjhmYiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9u
cworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCkBA
IC00MTc2LDYgKzQxNzYsOSBAQCB3ZWJraXQub3JnL2IvMTAwODA2IFsgV2luIF0gZmFzdC9jc3Mv
Zm9udC1mYWNlLWRvd25sb2FkLWVycm9yLmh0bWwgWyBUZXh0IF0KICMgU2VlbXMgdG8gaGF2ZSB0
aGUgd3JvbmcgZm9udCBpbiB0aGUgU1ZHIHBhcnQgb2YgdGhlIHRlc3QgKENTUyBpcyBvaykuCiB3
ZWJraXQub3JnL2IvMTAwODA2IFsgV2luIF0gc3ZnL2N1c3RvbS9mb250LWZhY2Utc2ltcGxlLnN2
ZyBbIEZhaWx1cmUgXQogCisjIE92ZXJmbG93cyBMYXlvdXRVbml0cywgd2hpY2ggY2F1c2VzIGFz
c2VydGlvbnMuCit3ZWJraXQub3JnL2IvMTAxODY1IGZhc3QvYmxvY2svZmxvYXQvb3Zlcmhhbmdp
bmctdGFsbC1ibG9jay5odG1sIFsgU2tpcCBdCisKICMgVGhpcyB0ZXN0IGlzIGNvbnNpc3RlbnRs
eSBsZWFraW5nIHN0YXRlIGludG8gdGhlIG5leHQgdGVzdCAob2JqZWN0LXNyYy11cmwtYWxsb3dl
ZC5odG1sKSBhZnRlciByMTMzMDY5Lgogd2Via2l0Lm9yZy9iLzEwMDk1NSBodHRwL3Rlc3RzL3Nl
Y3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9vYmplY3Qtc3JjLW5vbmUtYmxvY2tlZC5odG1s
IFsgU2tpcCBdCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhw
ZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKaW5k
ZXggODNlYjY3YjQ4NjBmYWU5N2VmMjRlYzdkNzVlZTM0N2M0OTY0MThhMC4uZTE0NDIxMzFlMTY5
MGJiNDc4NWI4OGQ0NjI1ODJmYjQyMjM2MjhkNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTExNzcsMyArMTE3Nyw2IEBAIHdlYmtpdC5vcmcvYi8xMDA4
NDYgaW5zcGVjdG9yLXByb3RvY29sL2RlYnVnZ2VyLXRlcm1pbmF0ZS1kZWRpY2F0ZWQtd29ya2Vy
LXdoaWxlCiB3ZWJraXQub3JnL2IvMTAwMTQyIGNzczMvZmlsdGVycy9lZmZlY3QtcmVmZXJlbmNl
LWh3Lmh0bWwgWyBGYWlsIF0KIHdlYmtpdC5vcmcvYi8xMDAxNDIgY3NzMy9maWx0ZXJzL2VmZmVj
dC1yZWZlcmVuY2Utb3JkZXJpbmctaHcuaHRtbCBbIEZhaWwgXQogd2Via2l0Lm9yZy9iLzEwMDE0
MiBjc3MzL2ZpbHRlcnMvZWZmZWN0LXJlZmVyZW5jZS5odG1sIFsgRmFpbCBdCisKKyMgT3ZlcmZs
b3dzIExheW91dFVuaXRzLCB3aGljaCBjYXVzZXMgYXNzZXJ0aW9ucy4KK3dlYmtpdC5vcmcvYi8x
MDE4NjUgZmFzdC9ibG9jay9mbG9hdC9vdmVyaGFuZ2luZy10YWxsLWJsb2NrLmh0bWwgWyBTa2lw
IF0K
</data>
<flag name="review"
          id="188514"
          type_id="1"
          status="+"
          setter="hyatt"
    />
    <flag name="commit-queue"
          id="188621"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>