<?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>26618</bug_id>
          
          <creation_ts>2009-06-22 11:38:29 -0700</creation_ts>
          <short_desc>[Chromium] Gradient and pattern text failing on Chromium/Linux</short_desc>
          <delta_ts>2009-07-16 23:28:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Stephen White">senorblanco</reporter>
          <assigned_to name="Stephen White">senorblanco</assigned_to>
          <cc>brettw</cc>
    
    <cc>fishd</cc>
    
    <cc>krit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>127408</commentid>
    <comment_count>0</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2009-06-22 11:38:29 -0700</bug_when>
    <thetext>The following layout tests are failing on Chromium/Linux:

LayoutTests/svg/custom/js-late-gradient-creation.svg (bad baseline PNG)
LayoutTests/svg/custom/js-late-gradient-and-object.creation.svg
LayoutTests/svg/custom/js-late-pattern-creation.svg (bad baseline PNG)
LayoutTests/svg/custom/js-late-pattern-and-object-creation.svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127413</commentid>
    <comment_count>1</comment_count>
      <attachid>31662</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2009-06-22 11:42:53 -0700</bug_when>
    <thetext>Created attachment 31662
Patterns/Gradients refactoring for Skia impl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127704</commentid>
    <comment_count>2</comment_count>
      <attachid>31662</attachid>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2009-06-23 15:24:01 -0700</bug_when>
    <thetext>Comment on attachment 31662
Patterns/Gradients refactoring for Skia impl.

I think this definitely looks better than the old code.

&gt; @@ -945,6 +930,25 @@ void GraphicsContext::setPlatformFillCol
&gt;      if (paintingDisabled())
&gt;          return;
&gt;      platformContext()-&gt;setFillColor(color.rgb());
&gt; +    platformContext()-&gt;setFillShader(NULL);

I&apos;m not clear why this new call was necessary. Is this something setFillColor should be doing internally because fill colors and fill shaders are mutually exclusive?

&gt;      platformContext()-&gt;setStrokeColor(strokecolor.rgb());
&gt; +    platformContext()-&gt;setStrokeShader(NULL);

Same here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127714</commentid>
    <comment_count>3</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2009-06-23 15:44:05 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 31662 [review])
&gt; I think this definitely looks better than the old code.
&gt; 
&gt; &gt; @@ -945,6 +930,25 @@ void GraphicsContext::setPlatformFillCol
&gt; &gt;      if (paintingDisabled())
&gt; &gt;          return;
&gt; &gt;      platformContext()-&gt;setFillColor(color.rgb());
&gt; &gt; +    platformContext()-&gt;setFillShader(NULL);
&gt; 
&gt; I&apos;m not clear why this new call was necessary. Is this something setFillColor
&gt; should be doing internally because fill colors and fill shaders are mutually
&gt; exclusive?

Yes, they&apos;re mutually exclusive.  Each shader (fill and stroke) can be either NULL (for solid color), gradient shader, or pattern shader.  Basically I&apos;m using the shader to indicate the same thing as state.fillColorSpace and state.strokeColorSpace (which we&apos;d otherwise have to forward down into the platform layer as well).  It seemed redundant, so I didn&apos;t bother.

&gt; 
&gt; &gt;      platformContext()-&gt;setStrokeColor(strokecolor.rgb());
&gt; &gt; +    platformContext()-&gt;setStrokeShader(NULL);
&gt; 
&gt; Same here.
&gt; 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128030</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-06-24 16:46:00 -0700</bug_when>
    <thetext>Stylistically, this change looks good to me, but I&apos;m not expert on the Skia related changes, so I need Brett to say &quot;LGTM&quot; before I&apos;ll R+ the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128040</commentid>
    <comment_count>5</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2009-06-24 17:32:57 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; &gt;      platformContext()-&gt;setFillColor(color.rgb());
&gt; &gt; &gt; +    platformContext()-&gt;setFillShader(NULL);
&gt; &gt; 
&gt; &gt; I&apos;m not clear why this new call was necessary. Is this something setFillColor
&gt; &gt; should be doing internally because fill colors and fill shaders are mutually
&gt; &gt; exclusive?
&gt; 
&gt; Yes, they&apos;re mutually exclusive.  Each shader (fill and stroke) can be either
&gt; NULL (for solid color), gradient shader, or pattern shader.  Basically I&apos;m
&gt; using the shader to indicate the same thing as state.fillColorSpace and
&gt; state.strokeColorSpace (which we&apos;d otherwise have to forward down into the
&gt; platform layer as well).  It seemed redundant, so I didn&apos;t bother.

I was suggesting that PlatformContextSkia::setFollColor (and the stroke equivalent) should internally clear the shader so callers don&apos;t have to remember to do both, assuming they&apos;re mutually exclusive. What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129011</commentid>
    <comment_count>6</comment_count>
      <attachid>31662</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-30 02:56:45 -0700</bug_when>
    <thetext>Comment on attachment 31662
Patterns/Gradients refactoring for Skia impl.

Won&apos;t this doe the wrong thing if the ctm is changed after the pattern is set on the context?

void GraphicsContext::setPlatformFillPattern(Pattern* pattern)
 945 {
 946     if (paintingDisabled())
 947         return;
 948 
 949     SkShader* pat = pattern-&gt;createPlatformPattern(getCTM());
 950     platformContext()-&gt;setFillShader(pat);
 951     pat-&gt;safeUnref();

Long ago, I added these setPlatform* methods to GraphicsContext.  They were later removed because they couldn&apos;t work for CG, because CG needs the transform at pattern creation time not at draw time.  It seems that here you&apos;re going to end up using the wrong CTM, unless you are later updating the pattern CTM before drawing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129075</commentid>
    <comment_count>7</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2009-06-30 08:09:06 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 31662 [review])
&gt; Won&apos;t this doe the wrong thing if the ctm is changed after the pattern is set
&gt; on the context?

Yes, I was concerned about this as well.  However, notice this comment in
PatternSkia.cpp:

PlatformPatternPtr Pattern::createPlatformPattern(const TransformationMatrix&amp; patternTransform) const
{
    // Note: patternTransform is ignored since it seems to be applied elsewhere
    // (when the pattern is used?). Applying it to the pattern (i.e.
    // shader-&gt;setLocalMatrix) results in a double transformation.

There&apos;s no further reference to patternTransform in that function, and since all the layout 
tests pass with my change, I think it&apos;s okay.

&gt; Long ago, I added these setPlatform* methods to GraphicsContext.  They were
&gt; later removed because they couldn&apos;t work for CG, because CG needs the transform
&gt; at pattern creation time not at draw time. It seems that here you&apos;re going to
&gt; end up using the wrong CTM, unless you are later updating the pattern CTM
&gt; before drawing?

I believe this is what happens (it&apos;s applied at draw time).  I don&apos;t think Skia needs
the transform matrix to be baked into the pattern the way CG does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129507</commentid>
    <comment_count>8</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2009-07-02 08:41:54 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; &gt; &gt;      platformContext()-&gt;setFillColor(color.rgb());
&gt; &gt; &gt; &gt; +    platformContext()-&gt;setFillShader(NULL);
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m not clear why this new call was necessary. Is this something setFillColor
&gt; &gt; &gt; should be doing internally because fill colors and fill shaders are mutually
&gt; &gt; &gt; exclusive?
&gt; &gt; 
&gt; &gt; Yes, they&apos;re mutually exclusive.  Each shader (fill and stroke) can be either
&gt; &gt; NULL (for solid color), gradient shader, or pattern shader.  Basically I&apos;m
&gt; &gt; using the shader to indicate the same thing as state.fillColorSpace and
&gt; &gt; state.strokeColorSpace (which we&apos;d otherwise have to forward down into the
&gt; &gt; platform layer as well).  It seemed redundant, so I didn&apos;t bother.
&gt; 
&gt; I was suggesting that PlatformContextSkia::setFollColor (and the stroke
&gt; equivalent) should internally clear the shader so callers don&apos;t have to
&gt; remember to do both, assuming they&apos;re mutually exclusive. What do you think?

[Could&apos;ve sworn I replied to this already; sorry if you get two replies]

There&apos;s one place this would be problematic:  internally, PlatformContextSkia::drawRect() 
calls setFillColor() when drawing rect borders.  If this also reset the shader, it would 
then leave it NULL after the draw.

Since GraphicsContextSkia.cpp is the one which translates from WebKit Gradients to Skia 
shaders, I kind of prefer that it&apos;s the one that enforces the mutual exclusion. I think it 
would be misleading if PlatformContextSkia::setFillColor() reset the shader, since 
every other setXXX() call in PlatformContextSkia changes only the associated state variable.

I don&apos;t want to bikeshed about it, though, so if you think I haven&apos;t made my case, I&apos;ll 
change it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129970</commentid>
    <comment_count>9</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2009-07-06 11:26:32 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #5)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; &gt; &gt;      platformContext()-&gt;setFillColor(color.rgb());
&gt; &gt; &gt; &gt; &gt; +    platformContext()-&gt;setFillShader(NULL);
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I&apos;m not clear why this new call was necessary. Is this something setFillColor
&gt; &gt; &gt; &gt; should be doing internally because fill colors and fill shaders are mutually
&gt; &gt; &gt; &gt; exclusive?
&gt; &gt; &gt; 
&gt; &gt; &gt; Yes, they&apos;re mutually exclusive.  Each shader (fill and stroke) can be either
&gt; &gt; &gt; NULL (for solid color), gradient shader, or pattern shader.  Basically I&apos;m
&gt; &gt; &gt; using the shader to indicate the same thing as state.fillColorSpace and
&gt; &gt; &gt; state.strokeColorSpace (which we&apos;d otherwise have to forward down into the
&gt; &gt; &gt; platform layer as well).  It seemed redundant, so I didn&apos;t bother.
&gt; &gt; 
&gt; &gt; I was suggesting that PlatformContextSkia::setFollColor (and the stroke
&gt; &gt; equivalent) should internally clear the shader so callers don&apos;t have to
&gt; &gt; remember to do both, assuming they&apos;re mutually exclusive. What do you think?
&gt; 
&gt; [Could&apos;ve sworn I replied to this already; sorry if you get two replies]
&gt; 
&gt; There&apos;s one place this would be problematic:  internally,
&gt; PlatformContextSkia::drawRect() 
&gt; calls setFillColor() when drawing rect borders.  If this also reset the shader,
&gt; it would 
&gt; then leave it NULL after the draw.

Actually, it looks like you may have broken this code. It&apos;s trying to set up an opaque color tho fill so as to emulate a line. Are you sure you want to apply the fill shader to those rects?


&gt; Since GraphicsContextSkia.cpp is the one which translates from WebKit Gradients
&gt; to Skia 
&gt; shaders, I kind of prefer that it&apos;s the one that enforces the mutual exclusion.
&gt; I think it 
&gt; would be misleading if PlatformContextSkia::setFillColor() reset the shader,
&gt; since 
&gt; every other setXXX() call in PlatformContextSkia changes only the associated
&gt; state variable.

Are there any other ones that are mutually exclusive?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129980</commentid>
    <comment_count>10</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2009-07-06 13:02:42 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; There&apos;s one place this would be problematic:  internally,
&gt; &gt; PlatformContextSkia::drawRect() 
&gt; &gt; calls setFillColor() when drawing rect borders.  If this also reset the shader,
&gt; &gt; it would 
&gt; &gt; then leave it NULL after the draw.
&gt; 
&gt; Actually, it looks like you may have broken this code. It&apos;s trying to set up an
&gt; opaque color tho fill so as to emulate a line. Are you sure you want to apply
&gt; the fill shader to those rects?

No, I don&apos;t think it should -- good catch.  Fixed.

Since I had to set it to NULL anyway, I went ahead and just did it in 
setFillColor() and setStrokeColor() as requested (less code tipped it
for me. :)

&gt; &gt; Since GraphicsContextSkia.cpp is the one which translates from WebKit Gradients
&gt; &gt; to Skia 
&gt; &gt; shaders, I kind of prefer that it&apos;s the one that enforces the mutual exclusion.
&gt; &gt; I think it 
&gt; &gt; would be misleading if PlatformContextSkia::setFillColor() reset the shader,
&gt; &gt; since 
&gt; &gt; every other setXXX() call in PlatformContextSkia changes only the associated
&gt; &gt; state variable.
&gt; 
&gt; Are there any other ones that are mutually exclusive?

Stroke color / pattern / gradient are also mutually exclusive, if that&apos;s
what you meant.  If you mean, in the wider API outside of gradients and
patterns, I don&apos;t know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129982</commentid>
    <comment_count>11</comment_count>
      <attachid>32311</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2009-07-06 13:10:18 -0700</bug_when>
    <thetext>Created attachment 32311
2nd rev of above -- outlined rect fix, setXXXColor() also reset shaders</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130021</commentid>
    <comment_count>12</comment_count>
      <attachid>32326</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2009-07-06 14:29:05 -0700</bug_when>
    <thetext>Created attachment 32326
3rd rev - setFillColor() unconditionally in rect border code, so shader is always reset

Also removed names from some unused parameters, to silence warnings (treated as errors in Mac Webkit build).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130527</commentid>
    <comment_count>13</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2009-07-08 14:55:45 -0700</bug_when>
    <thetext>This looks better, but I think set...Color and set...Shader should be consistent, so one should clear the other. The way you have it not, setStroke/FillColor clears the shader, but not vice-versa.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130657</commentid>
    <comment_count>14</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2009-07-09 06:51:21 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; This looks better, but I think set...Color and set...Shader should be
&gt; consistent, so one should clear the other. The way you have it not,
&gt; setStroke/FillColor clears the shader, but not vice-versa.

What do you think it should it clear it to?  Black or white?  Alpha of zero or one?  Fuchsia or chartreuse?  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130992</commentid>
    <comment_count>15</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2009-07-10 15:51:28 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; This looks better, but I think set...Color and set...Shader should be
&gt; &gt; consistent, so one should clear the other. The way you have it not,
&gt; &gt; setStroke/FillColor clears the shader, but not vice-versa.
&gt; 
&gt; What do you think it should it clear it to?  Black or white?  Alpha of zero or
&gt; one?  Fuchsia or chartreuse?  :)

Good point, seems fine to leave it, then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131309</commentid>
    <comment_count>16</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2009-07-13 07:30:03 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (In reply to comment #13)
&gt; &gt; &gt; This looks better, but I think set...Color and set...Shader should be
&gt; &gt; &gt; consistent, so one should clear the other. The way you have it not,
&gt; &gt; &gt; setStroke/FillColor clears the shader, but not vice-versa.
&gt; &gt; 
&gt; &gt; What do you think it should it clear it to?  Black or white?  Alpha of zero or
&gt; &gt; one?  Fuchsia or chartreuse?  :)
&gt; 
&gt; Good point, seems fine to leave it, then.

LGTY, then?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131750</commentid>
    <comment_count>17</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2009-07-14 16:49:03 -0700</bug_when>
    <thetext>LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132487</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-07-16 23:28:45 -0700</bug_when>
    <thetext>Landed as:  http://trac.webkit.org/changeset/46017</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31662</attachid>
            <date>2009-06-22 11:42:53 -0700</date>
            <delta_ts>2009-07-06 13:10:18 -0700</delta_ts>
            <desc>Patterns/Gradients refactoring for Skia impl.</desc>
            <filename>gradient_cleanup_webkit.patch</filename>
            <type>text/plain</type>
            <size>22638</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDk0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzcgQEAKKzIwMDktMDYtMjIgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUmVmYWN0b3IgU2tpYSBpbXBsZW1lbnRhdGlvbiBvZiBncmFkaWVudHMgYW5kIHBhdHRl
cm5zLiAgVGhlIGZvbGxvd2luZworICAgICAgICBsYXlvdXQgdGVzdHMgd2VyZSBicmVha2luZyBv
biBDaHJvbWl1bS9MaW51eDoKKworICAgICAgICBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL2pzLWxh
dGUtZ3JhZGllbnQtY3JlYXRpb24uc3ZnIChiYWQgYmFzZWxpbmUgUE5HKQorICAgICAgICBMYXlv
dXRUZXN0cy9zdmcvY3VzdG9tL2pzLWxhdGUtZ3JhZGllbnQtYW5kLW9iamVjdC5jcmVhdGlvbi5z
dmcKKyAgICAgICAgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9qcy1sYXRlLXBhdHRlcm4tY3JlYXRp
b24uc3ZnIChiYWQgYmFzZWxpbmUgUE5HKQorICAgICAgICBMYXlvdXRUZXN0cy9zdmcvY3VzdG9t
L2pzLWxhdGUtcGF0dGVybi1hbmQtb2JqZWN0LWNyZWF0aW9uLnN2ZworCisgICAgICAgIEkgY291
bGQndmUgZml4ZWQgdGhlc2UgdGhlIGVhc3kgd2F5LCBieSBjb3B5aW5nIHRoZSBzYW1lIDUKKyAg
ICAgICAgbGluZXMgb2YgY29kZSB3ZSB1c2UgZXZlcnl3aGVyZSB3ZSBuZWVkIHBhdHRlcm5zIG9y
IGdyYWRpZW50cywgYnV0CisgICAgICAgIEkgZGVjaWRlZCB0byBmaXggaXQgdGhlIGhhcmQgd2F5
OiAgYnkgcmVmYWN0b3JpbmcgdGhlIGNvZGUgc28gdGhhdAorICAgICAgICBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjpzZXR1cFBhaW50Rm9yRmlsbGluZygpIGFuZAorICAgICAgICBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjpzZXR1cFBhaW50Rm9yU3Ryb2tpbmcoKSBkbyB0aGUgcmlnaHQgdGhpbmcsCisgICAg
ICAgIGFuZCBhbHNvIGhhbmRsZSBncmFkaWVudHMgYW5kIHBhdHRlcm5zLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyByZXF1aXJlZCBwdXNoaW5nIHRoZSBncmFkaWVudHMgYW5kIHBhdHRlcm5zIHNl
dCBpbiAKKyAgICAgICAgKGdlbmVyaWMpIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4o
KSBhbmQgZnJpZW5kcyBkb3duIGludG8KKyAgICAgICAgUGxhdGZvcm1Db250ZXh0U2tpYS4gIEZv
ciB0aGlzLCBJIGZvbGxvd2VkIHRoZSBzZXRQbGF0Zm9ybVhYWCgpCisgICAgICAgIHBhdHRlcm4g
dXNlZCBlbHNld2hlcmUgaW4gR3JhcGhpY3NDb250ZXh0LCBhbmQgc3R1YmJlZCB0aGVtIG91dCBv
bgorICAgICAgICB0aGUgb3RoZXIgcGxhdGZvcm1zIHdpdGggI2lmICFQTEFURk9STShTS0lBKS4g
IFRoaXMgYWxzbyByZXF1aXJlZAorICAgICAgICBwdXNoaW5nIGNoYW5nZXMgdG8gdGhlIGdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm0gZnJvbSB0aGUgR3JhZGllbnQgaW50byAKKyAgICAgICAgR3JhZGll
bnRTa2lhLgorCisgICAgICAgIFNpbmNlIGl0J3MgYSBTa2lhIGNvbnRleHQsIEkgZGVjaWRlZCB0
byBjYWNoZSB0aGUgdmFsdWVzIGFzCisgICAgICAgIFNrU2hhZGVycy4gIFRoZXJlIHdlcmUgZXhp
c3RpbmcgbV9wYXR0ZXJuIGFuZCBtX2dyYWRpZW50IFNrU2hhZGVycywKKyAgICAgICAgYnV0IHRo
ZXkgd2VyZSB1bnVzZWQsIGFuZCB3aG9zZSB1c2Ugd2FzIGFtYmlndW91cywgc28gSQorICAgICAg
ICByZXBsYWNlZCB0aGVtIHdpdGggb25lIFNrU2hhZGVyIGVhY2ggZm9yIGZpbGxpbmcgYW5kIHN0
cm9raW5nLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNldFBsYXRmb3JtR3JhZGllbnRTcGFjZVRyYW5zZm9y
bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXRTdHJva2VHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtRmlsbEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlR3JhZGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVBhdHRlcm4pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YWRpZW50OjpzZXRQbGF0Zm9ybUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtRmlsbEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUdyYWRpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VQYXR0ZXJuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHA6CisgICAgICAgIChQbGF0Zm9y
bUNvbnRleHRTa2lhOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoUGxhdGZvcm1Db250ZXh0U2tp
YTo6U3RhdGU6On5TdGF0ZSk6CisgICAgICAgIChQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXR1cFBh
aW50Q29tbW9uKToKKyAgICAgICAgKFBsYXRmb3JtQ29udGV4dFNraWE6OnNldHVwUGFpbnRGb3JG
aWxsaW5nKToKKyAgICAgICAgKFBsYXRmb3JtQ29udGV4dFNraWE6OnNldHVwUGFpbnRGb3JTdHJv
a2luZyk6CisgICAgICAgIChQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRTdHJva2VTaGFkZXIpOgor
ICAgICAgICAoUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0RmlsbFNoYWRlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpza2lhRHJhd1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRTa2lhVGV4dCk6CisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhaW50U2VydmVyOjp0ZWFyZG93bik6CisKIDIwMDktMDYtMjIgIEFsZXhleSBQcm9za3Vy
eWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2
YW4uCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAkocmV2aXNpb24g
NDQ5NDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU1LDQgKzE1NSwxOSBAQCB2b2lkIEdyYWRpZW50OjpzZXRTcHJlYWRNZXRo
b2QoR3JhZGllbnRTCiAgICAgbV9zcHJlYWRNZXRob2QgPSBzcHJlYWRNZXRob2Q7CiB9CiAKK3Zv
aWQgR3JhZGllbnQ6OnNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbikKK3sgCisgICAgbV9ncmFkaWVu
dFNwYWNlVHJhbnNmb3JtYXRpb24gPSBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247CisgICAg
c2V0UGxhdGZvcm1HcmFkaWVudFNwYWNlVHJhbnNmb3JtKGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1h
dGlvbik7Cit9CisKKyNpZiAhUExBVEZPUk0oU0tJQSkKKy8vIEltcGxlbWVudCB0aGlzIGlmIHlv
dSB3aXNoIHRvIHB1c2ggdGhlIGdyYWRpZW50IHNwYWNlIHRyYW5zZm9ybSBkaXJlY3RseQorLy8g
aW50byB5b3VyIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbi4KK3ZvaWQgR3JhZGllbnQ6OnNldFBsYXRm
b3JtR3JhZGllbnRTcGFjZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpCit7
Cit9CisjZW5kaWYKKworCiB9IC8vbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFkaWVudC5oCShyZXZpc2lvbiA0NDk0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsMTEgKzkwLDEyIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHNldFNwcmVhZE1ldGhvZChHcmFkaWVudFNwcmVh
ZE1ldGhvZCk7CiAgICAgICAgIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCgpIHsg
cmV0dXJuIG1fc3ByZWFkTWV0aG9kOyB9Ci0gICAgICAgIHZvaWQgc2V0R3JhZGllbnRTcGFjZVRy
YW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZ3JhZGllbnRTcGFjZVRyYW5zZm9y
bWF0aW9uKSB7IG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uID0gZ3JhZGllbnRTcGFjZVRy
YW5zZm9ybWF0aW9uOyB9CisgICAgICAgIHZvaWQgc2V0R3JhZGllbnRTcGFjZVRyYW5zZm9ybShj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKTsK
ICAgICAgICAgLy8gUXQgYW5kIENHIHRyYW5zZm9ybSB0aGUgZ3JhZGllbnQgYXQgZHJhdyB0aW1l
CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSB7
IHJldHVybiBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsgfQogCiAgICAgICAgIHZpcnR1
YWwgdm9pZCBmaWxsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpOworICAgICAg
ICB2b2lkIHNldFBsYXRmb3JtR3JhZGllbnRTcGFjZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKTsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIEdyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50
JiBwMSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuY3BwCShyZXZpc2lvbiA0NDk0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDYgKzIxNCw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKFAKICAgICB9CiAgICAgbV9jb21tb24t
PnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UgPSBQYXR0ZXJuQ29sb3JTcGFjZTsKICAgICBtX2NvbW1v
bi0+c3RhdGUuc3Ryb2tlUGF0dGVybiA9IHBhdHRlcm47CisgICAgc2V0UGxhdGZvcm1TdHJva2VQ
YXR0ZXJuKG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKFBhc3NSZWZQdHI8UGF0dGVybj4gcGF0dGVy
bikKQEAgLTIyNSw2ICsyMjYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRl
cm4oUGFzCiAgICAgfQogICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3JTcGFjZSA9IFBhdHRl
cm5Db2xvclNwYWNlOwogICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybiA9IHBhdHRlcm47
CisgICAgc2V0UGxhdGZvcm1GaWxsUGF0dGVybihtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4u
Z2V0KCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQoUGFz
c1JlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQpCkBAIC0yMzYsNiArMjM4LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50KAogICAgIH0KICAgICBtX2NvbW1vbi0+c3Rh
dGUuc3Ryb2tlQ29sb3JTcGFjZSA9IEdyYWRpZW50Q29sb3JTcGFjZTsKICAgICBtX2NvbW1vbi0+
c3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBncmFkaWVudDsKKyAgICBzZXRQbGF0Zm9ybVN0cm9rZUdy
YWRpZW50KG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3JhZGllbnQoUGFzc1JlZlB0cjxHcmFkaWVudD4gZ3Jh
ZGllbnQpCkBAIC0yNDcsNiArMjUwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxH
cmFkaWVudChQYQogICAgIH0KICAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbENvbG9yU3BhY2UgPSBH
cmFkaWVudENvbG9yU3BhY2U7CiAgICAgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudCA9IGdy
YWRpZW50OworICAgIHNldFBsYXRmb3JtRmlsbEdyYWRpZW50KG1fY29tbW9uLT5zdGF0ZS5maWxs
R3JhZGllbnQuZ2V0KCkpOwogfQogCiBHcmFkaWVudCogR3JhcGhpY3NDb250ZXh0OjpmaWxsR3Jh
ZGllbnQoKSBjb25zdApAQCAtNTA4LDYgKzUxMiwyNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAgZ2VuZXJhdG9yLmZpbGwodGhpcywgcmVjdCk7CiB9CiAK
KyNpZiAhUExBVEZPUk0oU0tJQSkKKy8vIEltcGxlbWVudCB0aGVzZSBpZiB5b3Ugd2FudCB0byBw
dXNoIGdyYWRpZW50IGFuZCBwYXR0ZXJuIHNldHRpbmcgaW50bworLy8geW91ciBuYXRpdmUgY29u
dGV4dCBpbW1lZGlhdGVseS4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxH
cmFkaWVudChHcmFkaWVudCopCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0
Zm9ybUZpbGxQYXR0ZXJuKFBhdHRlcm4qKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1TdHJva2VHcmFkaWVudChHcmFkaWVudCopCit7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVBhdHRlcm4oUGF0dGVybiopCit7Cit9CisjZW5k
aWYKKwogI2lmICFQTEFURk9STShDRykgJiYgIVBMQVRGT1JNKFNLSUEpCiAvLyBJbXBsZW1lbnQg
dGhpcyBpZiB5b3Ugd2FudCB0byBnbyBhaGVhZCBhbmQgcHVzaCB0aGUgZHJhd2luZyBtb2RlIGlu
dG8geW91ciBuYXRpdmUgY29udGV4dAogLy8gaW1tZWRpYXRlbHkuCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDQ0OTQxKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzY0LDggKzM2NCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQg
c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYpOwogICAgICAgICB2b2lkIHNldFBs
YXRmb3JtU3Ryb2tlU3R5bGUoY29uc3QgU3Ryb2tlU3R5bGUmKTsKICAgICAgICAgdm9pZCBzZXRQ
bGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCk7CisgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1T
dHJva2VHcmFkaWVudChHcmFkaWVudCopOworICAgICAgICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tl
UGF0dGVybihQYXR0ZXJuKik7CiAKICAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybUZpbGxDb2xvcihj
b25zdCBDb2xvciYpOworICAgICAgICB2b2lkIHNldFBsYXRmb3JtRmlsbEdyYWRpZW50KEdyYWRp
ZW50Kik7CisgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1GaWxsUGF0dGVybihQYXR0ZXJuKik7CiAK
ICAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sIGIpOwogCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcAko
cmV2aXNpb24gNDQ5NDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhZGll
bnRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDQgKzE4NSwxMCBAQCB2b2lkIEdyYWRp
ZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCogY29uCiAgICAgY29udGV4dC0+ZmlsbFJlY3QocmVj
dCk7CiB9CiAKK3ZvaWQgR3JhZGllbnQ6OnNldFBsYXRmb3JtR3JhZGllbnRTcGFjZVRyYW5zZm9y
bShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQoreworICAgIGlmIChtX2dyYWRp
ZW50KQorICAgICAgICBtX2dyYWRpZW50LT5zZXRMb2NhbE1hdHJpeChtX2dyYWRpZW50U3BhY2VU
cmFuc2Zvcm1hdGlvbik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tp
YS5jcHAJKHJldmlzaW9uIDQ0OTQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODcsMTMgKzY4Nyw2
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiAgICAgU2tQYWludCBwYWludDsK
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKIAot
ICAgIGlmIChjb2xvclNwYWNlID09IFBhdHRlcm5Db2xvclNwYWNlKSB7Ci0gICAgICAgIFNrU2hh
ZGVyKiBwYXQgPSBzdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENU
TSgpKTsKLSAgICAgICAgcGFpbnQuc2V0U2hhZGVyKHBhdCk7Ci0gICAgICAgIHBhdC0+dW5yZWYo
KTsKLSAgICB9IGVsc2UgaWYgKGNvbG9yU3BhY2UgPT0gR3JhZGllbnRDb2xvclNwYWNlKQotICAg
ICAgICBwYWludC5zZXRTaGFkZXIoc3RhdGUuZmlsbEdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50
KCkpOwotCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aChwYXRoLCBw
YWludCk7CiB9CiAKQEAgLTcxMywxNCArNzA2LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KGNvbnN0IEZsbwogCiAgICAgU2tQYWludCBwYWludDsKICAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKLQotICAgIGlmIChjb2xvclNwYWNl
ID09IFBhdHRlcm5Db2xvclNwYWNlKSB7Ci0gICAgICAgIFNrU2hhZGVyKiBwYXQgPSBzdGF0ZS5m
aWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKTsKLSAgICAgICAgcGFp
bnQuc2V0U2hhZGVyKHBhdCk7Ci0gICAgICAgIHBhdC0+dW5yZWYoKTsKLSAgICB9IGVsc2UgaWYg
KGNvbG9yU3BhY2UgPT0gR3JhZGllbnRDb2xvclNwYWNlKQotICAgICAgICBwYWludC5zZXRTaGFk
ZXIoc3RhdGUuZmlsbEdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOwotCiAgICAgcGxhdGZv
cm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVjdChyLCBwYWludCk7CiB9CiAKQEAgLTk0NSw2
ICs5MzAsMjUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbAogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+c2V0RmlsbENvbG9yKGNvbG9yLnJnYigpKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+c2V0RmlsbFNoYWRlcihOVUxMKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtRmlsbEdyYWRpZW50KEdyYWRpZW50KiBncmFkaWVudCkKK3sKKyAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
c2V0RmlsbFNoYWRlcihncmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbFBhdHRlcm4oUGF0dGVybiogcGF0dGVybikK
K3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBT
a1NoYWRlciogcGF0ID0gcGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKTsK
KyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0RmlsbFNoYWRlcihwYXQpOworICAgIHBhdC0+c2Fm
ZVVucmVmKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhj
b25zdCBJbnRTaXplJiBzaXplLApAQCAtOTk3LDYgKzEwMDEsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDCiAgICAgICAgIHJldHVybjsKIAogICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5zZXRTdHJva2VDb2xvcihzdHJva2Vjb2xvci5yZ2IoKSk7CisgICAgcGxhdGZv
cm1Db250ZXh0KCktPnNldFN0cm9rZVNoYWRlcihOVUxMKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoY29uc3QgU3Ryb2tlU3R5bGUmIHN0cm9rZSkK
QEAgLTEwMTUsNiArMTAyMCwyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
dHJva2VUCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldFN0cm9rZVRoaWNrbmVzcyh0aGlja25l
c3MpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VHcmFkaWVu
dChHcmFkaWVudCogZ3JhZGllbnQpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldFN0cm9rZVNoYWRlcihn
cmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtU3Ryb2tlUGF0dGVybihQYXR0ZXJuKiBwYXR0ZXJuKQoreworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNrU2hhZGVyKiBwYXQg
PSBwYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpOworICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5zZXRTdHJva2VTaGFkZXIocGF0KTsKKyAgICBwYXQtPnNhZmVVbnJlZigpOwor
fQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUoaW50
IG1vZGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTEwNzcsMTMgKzExMDAs
NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCiAgICAgU2tQYWludCBwYWlu
dDsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvclN0cm9raW5nKCZwYWludCwg
MCwgMCk7CiAKLSAgICBpZiAoY29sb3JTcGFjZSA9PSBQYXR0ZXJuQ29sb3JTcGFjZSkgewotICAg
ICAgICBTa1NoYWRlciogcGF0ID0gc3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1Q
YXR0ZXJuKGdldENUTSgpKTsKLSAgICAgICAgcGFpbnQuc2V0U2hhZGVyKHBhdCk7Ci0gICAgICAg
IHBhdC0+dW5yZWYoKTsKLSAgICB9IGVsc2UgaWYgKGNvbG9yU3BhY2UgPT0gR3JhZGllbnRDb2xv
clNwYWNlKQotICAgICAgICBwYWludC5zZXRTaGFkZXIoc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBs
YXRmb3JtR3JhZGllbnQoKSk7Ci0KICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRy
YXdQYXRoKHBhdGgsIHBhaW50KTsKIH0KIApAQCAtMTEwMiwxMyArMTExOCw2IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEYKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
c2V0dXBQYWludEZvclN0cm9raW5nKCZwYWludCwgMCwgMCk7CiAgICAgcGFpbnQuc2V0U3Ryb2tl
V2lkdGgoV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihsaW5lV2lkdGgpKTsKIAotICAgIGlmIChjb2xv
clNwYWNlID09IFBhdHRlcm5Db2xvclNwYWNlKSB7Ci0gICAgICAgIFNrU2hhZGVyKiBwYXQgPSBz
dGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpOwotICAg
ICAgICBwYWludC5zZXRTaGFkZXIocGF0KTsKLSAgICAgICAgcGF0LT51bnJlZigpOwotICAgIH0g
ZWxzZSBpZiAoY29sb3JTcGFjZSA9PSBHcmFkaWVudENvbG9yU3BhY2UpCi0gICAgICAgIHBhaW50
LnNldFNoYWRlcihzdGF0ZS5zdHJva2VHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKLQog
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QocmVjdCwgcGFpbnQpOwog
fQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0
U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bs
YXRmb3JtQ29udGV4dFNraWEuY3BwCShyZXZpc2lvbiA0NDk0MSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTgsMTcgKzU4LDE3IEBAIHN0cnVjdCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpTdGF0ZSB7CiAg
ICAgLy8gQ29tbW9uIHNoYWRlciBzdGF0ZS4KICAgICBmbG9hdCBtX2FscGhhOwogICAgIFNrUG9y
dGVyRHVmZjo6TW9kZSBtX3BvcnRlckR1ZmZNb2RlOwotICAgIFNrU2hhZGVyKiBtX2dyYWRpZW50
OwotICAgIFNrU2hhZGVyKiBtX3BhdHRlcm47CiAgICAgYm9vbCBtX3VzZUFudGlhbGlhc2luZzsK
ICAgICBTa0RyYXdMb29wZXIqIG1fbG9vcGVyOwogCiAgICAgLy8gRmlsbC4KICAgICBTa0NvbG9y
IG1fZmlsbENvbG9yOworICAgIFNrU2hhZGVyKiBtX2ZpbGxTaGFkZXI7CiAKICAgICAvLyBTdHJv
a2UuCiAgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGUgbV9zdHJva2VTdHlsZTsKICAgICBTa0NvbG9y
IG1fc3Ryb2tlQ29sb3I7CisgICAgU2tTaGFkZXIqIG1fc3Ryb2tlU2hhZGVyOwogICAgIGZsb2F0
IG1fc3Ryb2tlVGhpY2tuZXNzOwogICAgIGludCBtX2Rhc2hSYXRpbzsgIC8vIFJhdGlvIG9mIHRo
ZSBsZW5ndGggb2YgYSBkYXNoIHRvIGl0cyB3aWR0aC4KICAgICBmbG9hdCBtX21pdGVyTGltaXQ7
CkBAIC05OSwxNCArOTksMTQgQEAgcHJpdmF0ZToKIFBsYXRmb3JtQ29udGV4dFNraWE6OlN0YXRl
OjpTdGF0ZSgpCiAgICAgOiBtX2FscGhhKDEpCiAgICAgLCBtX3BvcnRlckR1ZmZNb2RlKFNrUG9y
dGVyRHVmZjo6a1NyY092ZXJfTW9kZSkKLSAgICAsIG1fZ3JhZGllbnQoMCkKLSAgICAsIG1fcGF0
dGVybigwKQogICAgICwgbV91c2VBbnRpYWxpYXNpbmcodHJ1ZSkKICAgICAsIG1fbG9vcGVyKDAp
CiAgICAgLCBtX2ZpbGxDb2xvcigweEZGMDAwMDAwKQorICAgICwgbV9maWxsU2hhZGVyKDApCiAg
ICAgLCBtX3N0cm9rZVN0eWxlKFdlYkNvcmU6OlNvbGlkU3Ryb2tlKQogICAgICwgbV9zdHJva2VD
b2xvcihXZWJDb3JlOjpDb2xvcjo6YmxhY2spCiAgICAgLCBtX3N0cm9rZVRoaWNrbmVzcygwKQor
ICAgICwgbV9zdHJva2VTaGFkZXIoMCkKICAgICAsIG1fZGFzaFJhdGlvKDMpCiAgICAgLCBtX21p
dGVyTGltaXQoNCkKICAgICAsIG1fbGluZUNhcChTa1BhaW50OjprRGVmYXVsdF9DYXApCkBAIC0x
MTksMTQgKzExOSwxNCBAQCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpTdGF0ZTo6U3RhdGUoKQogUGxh
dGZvcm1Db250ZXh0U2tpYTo6U3RhdGU6OlN0YXRlKGNvbnN0IFN0YXRlJiBvdGhlcikKICAgICA6
IG1fYWxwaGEob3RoZXIubV9hbHBoYSkKICAgICAsIG1fcG9ydGVyRHVmZk1vZGUob3RoZXIubV9w
b3J0ZXJEdWZmTW9kZSkKLSAgICAsIG1fZ3JhZGllbnQob3RoZXIubV9ncmFkaWVudCkKLSAgICAs
IG1fcGF0dGVybihvdGhlci5tX3BhdHRlcm4pCiAgICAgLCBtX3VzZUFudGlhbGlhc2luZyhvdGhl
ci5tX3VzZUFudGlhbGlhc2luZykKICAgICAsIG1fbG9vcGVyKG90aGVyLm1fbG9vcGVyKQogICAg
ICwgbV9maWxsQ29sb3Iob3RoZXIubV9maWxsQ29sb3IpCisgICAgLCBtX2ZpbGxTaGFkZXIob3Ro
ZXIubV9maWxsU2hhZGVyKQogICAgICwgbV9zdHJva2VTdHlsZShvdGhlci5tX3N0cm9rZVN0eWxl
KQogICAgICwgbV9zdHJva2VDb2xvcihvdGhlci5tX3N0cm9rZUNvbG9yKQogICAgICwgbV9zdHJv
a2VUaGlja25lc3Mob3RoZXIubV9zdHJva2VUaGlja25lc3MpCisgICAgLCBtX3N0cm9rZVNoYWRl
cihvdGhlci5tX3N0cm9rZVNoYWRlcikKICAgICAsIG1fZGFzaFJhdGlvKG90aGVyLm1fZGFzaFJh
dGlvKQogICAgICwgbV9taXRlckxpbWl0KG90aGVyLm1fbWl0ZXJMaW1pdCkKICAgICAsIG1fbGlu
ZUNhcChvdGhlci5tX2xpbmVDYXApCkBAIC0xNDEsMTYgKzE0MSwxNiBAQCBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjpTdGF0ZTo6U3RhdGUoY29uc3QgCiAgICAgLy8gVXAgdGhlIHJlZiBjb3VudCBvZiB0
aGVzZS4gc2F2ZVJlZiBkb2VzIG5vdGhpbmcgaWYgJ3RoaXMnIGlzIE5VTEwuCiAgICAgbV9sb29w
ZXItPnNhZmVSZWYoKTsKICAgICBtX2Rhc2gtPnNhZmVSZWYoKTsKLSAgICBtX2dyYWRpZW50LT5z
YWZlUmVmKCk7Ci0gICAgbV9wYXR0ZXJuLT5zYWZlUmVmKCk7CisgICAgbV9maWxsU2hhZGVyLT5z
YWZlUmVmKCk7CisgICAgbV9zdHJva2VTaGFkZXItPnNhZmVSZWYoKTsKIH0KIAogUGxhdGZvcm1D
b250ZXh0U2tpYTo6U3RhdGU6On5TdGF0ZSgpCiB7CiAgICAgbV9sb29wZXItPnNhZmVVbnJlZigp
OwogICAgIG1fZGFzaC0+c2FmZVVucmVmKCk7Ci0gICAgbV9ncmFkaWVudC0+c2FmZVVucmVmKCk7
Ci0gICAgbV9wYXR0ZXJuLT5zYWZlVW5yZWYoKTsKKyAgICBtX2ZpbGxTaGFkZXItPnNhZmVVbnJl
ZigpOworICAgIG1fc3Ryb2tlU2hhZGVyLT5zYWZlVW5yZWYoKTsKIH0KIAogU2tDb2xvciBQbGF0
Zm9ybUNvbnRleHRTa2lhOjpTdGF0ZTo6YXBwbHlBbHBoYShTa0NvbG9yIGMpIGNvbnN0CkBAIC0z
MDEsMTcgKzMwMSwxMyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldHVwUGFpbnRDb21t
CiAgICAgcGFpbnQtPnNldEFudGlBbGlhcyhtX3N0YXRlLT5tX3VzZUFudGlhbGlhc2luZyk7CiAg
ICAgcGFpbnQtPnNldFBvcnRlckR1ZmZYZmVybW9kZShtX3N0YXRlLT5tX3BvcnRlckR1ZmZNb2Rl
KTsKICAgICBwYWludC0+c2V0TG9vcGVyKG1fc3RhdGUtPm1fbG9vcGVyKTsKLQotICAgIGlmICht
X3N0YXRlLT5tX2dyYWRpZW50KQotICAgICAgICBwYWludC0+c2V0U2hhZGVyKG1fc3RhdGUtPm1f
Z3JhZGllbnQpOwotICAgIGVsc2UgaWYgKG1fc3RhdGUtPm1fcGF0dGVybikKLSAgICAgICAgcGFp
bnQtPnNldFNoYWRlcihtX3N0YXRlLT5tX3BhdHRlcm4pOwogfQogCiB2b2lkIFBsYXRmb3JtQ29u
dGV4dFNraWE6OnNldHVwUGFpbnRGb3JGaWxsaW5nKFNrUGFpbnQqIHBhaW50KSBjb25zdAogewog
ICAgIHNldHVwUGFpbnRDb21tb24ocGFpbnQpOwogICAgIHBhaW50LT5zZXRDb2xvcihtX3N0YXRl
LT5hcHBseUFscGhhKG1fc3RhdGUtPm1fZmlsbENvbG9yKSk7CisgICAgcGFpbnQtPnNldFNoYWRl
cihtX3N0YXRlLT5tX2ZpbGxTaGFkZXIpOwogfQogCiBmbG9hdCBQbGF0Zm9ybUNvbnRleHRTa2lh
OjpzZXR1cFBhaW50Rm9yU3Ryb2tpbmcoU2tQYWludCogcGFpbnQsIFNrUmVjdCogcmVjdCwgaW50
IGxlbmd0aCkgY29uc3QKQEAgLTMyMCw2ICszMTYsNyBAQCBmbG9hdCBQbGF0Zm9ybUNvbnRleHRT
a2lhOjpzZXR1cFBhaW50Rm9yCiAgICAgZmxvYXQgd2lkdGggPSBtX3N0YXRlLT5tX3N0cm9rZVRo
aWNrbmVzczsKIAogICAgIHBhaW50LT5zZXRDb2xvcihtX3N0YXRlLT5hcHBseUFscGhhKG1fc3Rh
dGUtPm1fc3Ryb2tlQ29sb3IpKTsKKyAgICBwYWludC0+c2V0U2hhZGVyKG1fc3RhdGUtPm1fc3Ry
b2tlU2hhZGVyKTsKICAgICBwYWludC0+c2V0U3R5bGUoU2tQYWludDo6a1N0cm9rZV9TdHlsZSk7
CiAgICAgcGFpbnQtPnNldFN0cm9rZVdpZHRoKFNrRmxvYXRUb1NjYWxhcih3aWR0aCkpOwogICAg
IHBhaW50LT5zZXRTdHJva2VDYXAobV9zdGF0ZS0+bV9saW5lQ2FwKTsKQEAgLTQyMiw2ICs0MTks
MTUgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRTdHJva2VUaGljawogICAgIG1fc3Rh
dGUtPm1fc3Ryb2tlVGhpY2tuZXNzID0gdGhpY2tuZXNzOwogfQogCit2b2lkIFBsYXRmb3JtQ29u
dGV4dFNraWE6OnNldFN0cm9rZVNoYWRlcihTa1NoYWRlciogc3Ryb2tlU2hhZGVyKQoreworICAg
IGlmIChzdHJva2VTaGFkZXIgIT0gbV9zdGF0ZS0+bV9zdHJva2VTaGFkZXIpIHsKKyAgICAgICAg
bV9zdGF0ZS0+bV9zdHJva2VTaGFkZXItPnNhZmVVbnJlZigpOworICAgICAgICBtX3N0YXRlLT5t
X3N0cm9rZVNoYWRlciA9IHN0cm9rZVNoYWRlcjsKKyAgICAgICAgbV9zdGF0ZS0+bV9zdHJva2VT
aGFkZXItPnNhZmVSZWYoKTsKKyAgICB9Cit9CisKIGludCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpn
ZXRUZXh0RHJhd2luZ01vZGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3N0YXRlLT5tX3RleHRE
cmF3aW5nTW9kZTsKQEAgLTQ4MCwxOSArNDg2LDEyIEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tp
YTo6c2V0RmlsbFJ1bGUoU2sKICAgICBtX3BhdGguc2V0RmlsbFR5cGUoZnIpOwogfQogCi12b2lk
IFBsYXRmb3JtQ29udGV4dFNraWE6OnNldEdyYWRpZW50KFNrU2hhZGVyKiBncmFkaWVudCkKLXsK
LSAgICBpZiAoZ3JhZGllbnQgIT0gbV9zdGF0ZS0+bV9ncmFkaWVudCkgewotICAgICAgICBtX3N0
YXRlLT5tX2dyYWRpZW50LT5zYWZlVW5yZWYoKTsKLSAgICAgICAgbV9zdGF0ZS0+bV9ncmFkaWVu
dCA9IGdyYWRpZW50OwotICAgIH0KLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRQ
YXR0ZXJuKFNrU2hhZGVyKiBwYXR0ZXJuKQordm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRG
aWxsU2hhZGVyKFNrU2hhZGVyKiBmaWxsU2hhZGVyKQogewotICAgIGlmIChwYXR0ZXJuICE9IG1f
c3RhdGUtPm1fcGF0dGVybikgewotICAgICAgICBtX3N0YXRlLT5tX3BhdHRlcm4tPnNhZmVVbnJl
ZigpOwotICAgICAgICBtX3N0YXRlLT5tX3BhdHRlcm4gPSBwYXR0ZXJuOworICAgIGlmIChmaWxs
U2hhZGVyICE9IG1fc3RhdGUtPm1fZmlsbFNoYWRlcikgeworICAgICAgICBtX3N0YXRlLT5tX2Zp
bGxTaGFkZXItPnNhZmVVbnJlZigpOworICAgICAgICBtX3N0YXRlLT5tX2ZpbGxTaGFkZXIgPSBm
aWxsU2hhZGVyOworICAgICAgICBtX3N0YXRlLT5tX2ZpbGxTaGFkZXItPnNhZmVSZWYoKTsKICAg
ICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNv
bnRleHRTa2lhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BsYXRmb3JtQ29udGV4dFNraWEuaAkocmV2aXNpb24gNDQ5NDEpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTcsMTMgKzExNywxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRGaWxsUnVsZShTa1BhdGg6
OkZpbGxUeXBlKTsKICAgICB2b2lkIHNldFBvcnRlckR1ZmZNb2RlKFNrUG9ydGVyRHVmZjo6TW9k
ZSk7CiAgICAgdm9pZCBzZXRGaWxsQ29sb3IoU2tDb2xvcik7CisgICAgdm9pZCBzZXRGaWxsU2hh
ZGVyKFNrU2hhZGVyKik7CiAgICAgdm9pZCBzZXRTdHJva2VTdHlsZShXZWJDb3JlOjpTdHJva2VT
dHlsZSk7CiAgICAgdm9pZCBzZXRTdHJva2VDb2xvcihTa0NvbG9yKTsKICAgICB2b2lkIHNldFN0
cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpOworICAgIHZvaWQgc2V0U3Ryb2tlU2hhZGVy
KFNrU2hhZGVyKik7CiAgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoaW50IG1vZGUpOwogICAg
IHZvaWQgc2V0VXNlQW50aWFsaWFzaW5nKGJvb2wgZW5hYmxlKTsKLSAgICB2b2lkIHNldEdyYWRp
ZW50KFNrU2hhZGVyKik7Ci0gICAgdm9pZCBzZXRQYXR0ZXJuKFNrU2hhZGVyKik7CiAgICAgdm9p
ZCBzZXREYXNoUGF0aEVmZmVjdChTa0Rhc2hQYXRoRWZmZWN0Kik7CiAKICAgICBTa0RyYXdMb29w
ZXIqIGdldERyYXdMb29wZXIoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1NraWFGb250V2luLmNwcAkocmV2aXNpb24gNDQ5NDEpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjcsMjEgKzI2NywxMSBAQCBzdGF0aWMgYm9vbCBza2lhRHJhd1RleHQoSEZPTlQgaGZvbnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgU2tDYW52YXMqIGNhbnZhcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTa1BvaW50JiBwb2ludCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBTa1BhaW50KiBwYWludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtYXRpb25NYXRyaXgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgR3JhZGllbnQqIGdyYWRpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgIFBh
dHRlcm4qIHBhdHRlcm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09SRCogZ2x5
cGhzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCogYWR2YW5jZXMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgR09GRlNFVCogb2Zmc2V0cywKICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgbnVtR2x5cGhzKQogewotICAgIFNrU2hhZGVyKiBzaGFkZXIgPSBO
VUxMOwotICAgIGlmIChncmFkaWVudCkKLSAgICAgICAgc2hhZGVyID0gZ3JhZGllbnQtPnBsYXRm
b3JtR3JhZGllbnQoKTsKLSAgICBlbHNlIGlmIChwYXR0ZXJuKQotICAgICAgICBzaGFkZXIgPSBw
YXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4odHJhbnNmb3JtYXRpb25NYXRyaXgpOwotCi0g
ICAgcGFpbnQtPnNldFNoYWRlcihzaGFkZXIpOwogICAgIGZsb2F0IHggPSBwb2ludC5mWCwgeSA9
IHBvaW50LmZZOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgewpA
QCAtMzI2LDE0ICszMTYsNyBAQCBib29sIHBhaW50U2tpYVRleHQoR3JhcGhpY3NDb250ZXh0KiBj
b250CiAgICAgYm9vbCBkaWRGaWxsID0gZmFsc2U7CiAKICAgICBpZiAoKHRleHRNb2RlICYgY1Rl
eHRGaWxsKSAmJiBTa0NvbG9yR2V0QShwYWludC5nZXRDb2xvcigpKSkgewotICAgICAgICBHcmFk
aWVudCogZmlsbEdyYWRpZW50ID0gMDsKLSAgICAgICAgUGF0dGVybiogZmlsbFBhdHRlcm4gPSAw
OwotICAgICAgICBpZiAoY29udGV4dC0+ZmlsbENvbG9yU3BhY2UoKSA9PSBHcmFkaWVudENvbG9y
U3BhY2UpCi0gICAgICAgICAgICBmaWxsR3JhZGllbnQgPSBjb250ZXh0LT5maWxsR3JhZGllbnQo
KTsKLSAgICAgICAgZWxzZSBpZiAoY29udGV4dC0+ZmlsbENvbG9yU3BhY2UoKSA9PSBQYXR0ZXJu
Q29sb3JTcGFjZSkKLSAgICAgICAgICAgIGZpbGxQYXR0ZXJuID0gY29udGV4dC0+ZmlsbFBhdHRl
cm4oKTsKICAgICAgICAgaWYgKCFza2lhRHJhd1RleHQoaGZvbnQsIGRjLCBwbGF0Zm9ybUNvbnRl
eHQtPmNhbnZhcygpLCAqb3JpZ2luLCAmcGFpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPmdldENUTSgpLCBmaWxsR3JhZGllbnQsIGZpbGxQYXR0ZXJuLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAmZ2x5cGhzWzBdLCAmYWR2YW5jZXNbMF0sICZvZmZzZXRzWzBdLCBu
dW1HbHlwaHMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBkaWRGaWxsID0g
dHJ1ZTsKQEAgLTM2MCwxNCArMzQzLDcgQEAgYm9vbCBwYWludFNraWFUZXh0KEdyYXBoaWNzQ29u
dGV4dCogY29udAogICAgICAgICAgICAgcGFpbnQuc2V0TG9vcGVyKDApLT5zYWZlVW5yZWYoKTsK
ICAgICAgICAgfQogCi0gICAgICAgIEdyYWRpZW50KiBzdHJva2VHcmFkaWVudCA9IDA7Ci0gICAg
ICAgIFBhdHRlcm4qIHN0cm9rZVBhdHRlcm4gPSAwOwotICAgICAgICBpZiAoY29udGV4dC0+c3Ry
b2tlQ29sb3JTcGFjZSgpID09IEdyYWRpZW50Q29sb3JTcGFjZSkKLSAgICAgICAgICAgIHN0cm9r
ZUdyYWRpZW50ID0gY29udGV4dC0+c3Ryb2tlR3JhZGllbnQoKTsKLSAgICAgICAgZWxzZSBpZiAo
Y29udGV4dC0+c3Ryb2tlQ29sb3JTcGFjZSgpID09IFBhdHRlcm5Db2xvclNwYWNlKQotICAgICAg
ICAgICAgc3Ryb2tlUGF0dGVybiA9IGNvbnRleHQtPnN0cm9rZVBhdHRlcm4oKTsKICAgICAgICAg
aWYgKCFza2lhRHJhd1RleHQoaGZvbnQsIGRjLCBwbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpLCAq
b3JpZ2luLCAmcGFpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldENU
TSgpLCBzdHJva2VHcmFkaWVudCwgc3Ryb2tlUGF0dGVybiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJmdseXBoc1swXSwgJmFkdmFuY2VzWzBdLCAmb2Zmc2V0c1swXSwgbnVtR2x5cGhzKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdQYWludFNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHUGFpbnRTZXJ2ZXIuY3BwCShyZXZpc2lvbiA0NDk0MSkKKysrIFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR1BhaW50U2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDggKzE5Miw4
IEBAIHZvaWQgU1ZHUGFpbnRTZXJ2ZXI6OnRlYXJkb3duKEdyYXBoaWNzQ28KICAgICAvLyBhZGRl
ZCBiYWNrIHRvIHRoZSBjb250ZXh0IGFmdGVyIGZpbGxpbmcuIFRoaXMgaXMgYmVjYXVzZSBpbnRl
cm5hbGx5IGl0CiAgICAgLy8gY2FsbHMgQ0dDb250ZXh0RmlsbFBhdGgoKSB3aGljaCBjbG9zZXMg
dGhlIHBhdGguCiAgICAgY29udGV4dC0+YmVnaW5QYXRoKCk7Ci0gICAgY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCktPnNldEdyYWRpZW50KDApOwotICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5zZXRQYXR0ZXJuKDApOworICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXRG
aWxsU2hhZGVyKDApOworICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXRTdHJva2VT
aGFkZXIoMCk7CiB9CiAjZWxzZQogdm9pZCBTVkdQYWludFNlcnZlcjo6dGVhcmRvd24oR3JhcGhp
Y3NDb250ZXh0KiYsIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlwZSwgYm9v
bCkgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32311</attachid>
            <date>2009-07-06 13:10:18 -0700</date>
            <delta_ts>2009-07-06 14:29:05 -0700</delta_ts>
            <desc>2nd rev of above -- outlined rect fix, setXXXColor() also reset shaders</desc>
            <filename>gradient_cleanup_webkit_2.patch</filename>
            <type>text/plain</type>
            <size>23610</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTU2MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODEgQEAKKzIwMDktMDctMDYgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUmVmYWN0b3IgU2tpYSBpbXBsZW1lbnRhdGlvbiBvZiBncmFkaWVudHMgYW5kIHBhdHRl
cm5zLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2
NjE4CisKKyAgICAgICAgVGhlIGZvbGxvd2luZyBsYXlvdXQgdGVzdHMgd2VyZSBicmVha2luZyBv
biBDaHJvbWl1bS9MaW51eDoKKworICAgICAgICBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL2pzLWxh
dGUtZ3JhZGllbnQtY3JlYXRpb24uc3ZnIChiYWQgYmFzZWxpbmUgUE5HKQorICAgICAgICBMYXlv
dXRUZXN0cy9zdmcvY3VzdG9tL2pzLWxhdGUtZ3JhZGllbnQtYW5kLW9iamVjdC5jcmVhdGlvbi5z
dmcKKyAgICAgICAgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9qcy1sYXRlLXBhdHRlcm4tY3JlYXRp
b24uc3ZnIChiYWQgYmFzZWxpbmUgUE5HKQorICAgICAgICBMYXlvdXRUZXN0cy9zdmcvY3VzdG9t
L2pzLWxhdGUtcGF0dGVybi1hbmQtb2JqZWN0LWNyZWF0aW9uLnN2ZworCisgICAgICAgIEkgY291
bGQndmUgZml4ZWQgdGhlc2UgdGhlIGVhc3kgd2F5LCBieSBjb3B5aW5nIHRoZSBzYW1lIDUKKyAg
ICAgICAgbGluZXMgb2YgY29kZSB3ZSB1c2UgZXZlcnl3aGVyZSB3ZSBuZWVkIHBhdHRlcm5zIG9y
IGdyYWRpZW50cywgYnV0CisgICAgICAgIEkgZGVjaWRlZCB0byBmaXggaXQgdGhlIGhhcmQgd2F5
OiAgYnkgcmVmYWN0b3JpbmcgdGhlIGNvZGUgc28gdGhhdAorICAgICAgICBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjpzZXR1cFBhaW50Rm9yRmlsbGluZygpIGFuZAorICAgICAgICBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjpzZXR1cFBhaW50Rm9yU3Ryb2tpbmcoKSBkbyB0aGUgcmlnaHQgdGhpbmcsCisgICAg
ICAgIGFuZCBhbHNvIGhhbmRsZSBncmFkaWVudHMgYW5kIHBhdHRlcm5zLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyByZXF1aXJlZCBwdXNoaW5nIHRoZSBncmFkaWVudHMgYW5kIHBhdHRlcm5zIHNl
dCBpbiAKKyAgICAgICAgKGdlbmVyaWMpIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4o
KSBhbmQgZnJpZW5kcyBkb3duIGludG8KKyAgICAgICAgUGxhdGZvcm1Db250ZXh0U2tpYS4gIEZv
ciB0aGlzLCBJIGZvbGxvd2VkIHRoZSBzZXRQbGF0Zm9ybVhYWCgpCisgICAgICAgIHBhdHRlcm4g
dXNlZCBlbHNld2hlcmUgaW4gR3JhcGhpY3NDb250ZXh0LCBhbmQgc3R1YmJlZCB0aGVtIG91dCBv
bgorICAgICAgICB0aGUgb3RoZXIgcGxhdGZvcm1zIHdpdGggI2lmICFQTEFURk9STShTS0lBKS4g
IFRoaXMgYWxzbyByZXF1aXJlZAorICAgICAgICBwdXNoaW5nIGNoYW5nZXMgdG8gdGhlIGdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm0gZnJvbSB0aGUgR3JhZGllbnQgaW50byAKKyAgICAgICAgR3JhZGll
bnRTa2lhLgorCisgICAgICAgIFNpbmNlIGl0J3MgYSBTa2lhIGNvbnRleHQsIEkgZGVjaWRlZCB0
byBjYWNoZSB0aGUgdmFsdWVzIGFzCisgICAgICAgIFNrU2hhZGVycy4gIFRoZXJlIHdlcmUgZXhp
c3RpbmcgbV9wYXR0ZXJuIGFuZCBtX2dyYWRpZW50IFNrU2hhZGVycywKKyAgICAgICAgYnV0IHRo
ZXkgd2VyZSB1bnVzZWQsIGFuZCB3aG9zZSB1c2Ugd2FzIGFtYmlndW91cywgc28gSQorICAgICAg
ICByZXBsYWNlZCB0aGVtIHdpdGggb25lIFNrU2hhZGVyIGVhY2ggZm9yIGZpbGxpbmcgYW5kIHN0
cm9raW5nLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNldFBsYXRmb3JtR3JhZGllbnRTcGFjZVRyYW5zZm9y
bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXRTdHJva2VHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtRmlsbEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlR3JhZGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVBhdHRlcm4pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YWRpZW50OjpzZXRQbGF0Zm9ybUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybUZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUdyYWRpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHA6CisgICAgICAgIChQbGF0Zm9ybUNvbnRl
eHRTa2lhOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoUGxhdGZvcm1Db250ZXh0U2tpYTo6U3Rh
dGU6On5TdGF0ZSk6CisgICAgICAgIChQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3UmVjdCk6Cisg
ICAgICAgIChQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXR1cFBhaW50Q29tbW9uKToKKyAgICAgICAg
KFBsYXRmb3JtQ29udGV4dFNraWE6OnNldHVwUGFpbnRGb3JGaWxsaW5nKToKKyAgICAgICAgKFBs
YXRmb3JtQ29udGV4dFNraWE6OnNldHVwUGFpbnRGb3JTdHJva2luZyk6CisgICAgICAgIChQbGF0
Zm9ybUNvbnRleHRTa2lhOjpzZXRGaWxsQ29sb3IpOgorICAgICAgICAoUGxhdGZvcm1Db250ZXh0
U2tpYTo6c2V0U3Ryb2tlQ29sb3IpOgorICAgICAgICAoUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0
U3Ryb2tlU2hhZGVyKToKKyAgICAgICAgKFBsYXRmb3JtQ29udGV4dFNraWE6OnNldEZpbGxTaGFk
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c2tpYURyYXdUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50
U2tpYVRleHQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlcjo6dGVhcmRvd24pOgorCiAyMDA5LTA3LTA2
ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGF2aWQgTGV2aW4uCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNw
cAkocmV2aXNpb24gNDU1NjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDQgKzE1NSwxNyBAQCB2b2lkIEdyYWRpZW50Ojpz
ZXRTcHJlYWRNZXRob2QoR3JhZGllbnRTCiAgICAgbV9zcHJlYWRNZXRob2QgPSBzcHJlYWRNZXRo
b2Q7CiB9CiAKK3ZvaWQgR3JhZGllbnQ6OnNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbikKK3sgCisg
ICAgbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24gPSBncmFkaWVudFNwYWNlVHJhbnNmb3Jt
YXRpb247CisgICAgc2V0UGxhdGZvcm1HcmFkaWVudFNwYWNlVHJhbnNmb3JtKGdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm1hdGlvbik7Cit9CisKKyNpZiAhUExBVEZPUk0oU0tJQSkKK3ZvaWQgR3JhZGll
bnQ6OnNldFBsYXRmb3JtR3JhZGllbnRTcGFjZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSkKK3sKK30KKyNlbmRpZgorCisKIH0gLy9u
YW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHJldmlzaW9u
IDQ1NTYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC05MCwxMSArOTAsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAg
IHZvaWQgc2V0U3ByZWFkTWV0aG9kKEdyYWRpZW50U3ByZWFkTWV0aG9kKTsKICAgICAgICAgR3Jh
ZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKCkgeyByZXR1cm4gbV9zcHJlYWRNZXRob2Q7
IH0KLSAgICAgICAgdm9pZCBzZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pIHsgbV9ncmFkaWVudFNw
YWNlVHJhbnNmb3JtYXRpb24gPSBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247IH0KKyAgICAg
ICAgdm9pZCBzZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pOwogICAgICAgICAvLyBRdCBhbmQgQ0cg
dHJhbnNmb3JtIHRoZSBncmFkaWVudCBhdCBkcmF3IHRpbWUKICAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpIHsgcmV0dXJuIG1fZ3JhZGllbnRTcGFj
ZVRyYW5zZm9ybWF0aW9uOyB9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGZpbGwoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1HcmFk
aWVudFNwYWNlVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBncmFkaWVudFNw
YWNlVHJhbnNmb3JtYXRpb24pOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgR3JhZGllbnQoY29u
c3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxKTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDQ1NTYw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTQsNiArMjE0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0
cm9rZVBhdHRlcm4oUAogICAgIH0KICAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlQ29sb3JTcGFj
ZSA9IFBhdHRlcm5Db2xvclNwYWNlOwogICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJu
ID0gcGF0dGVybjsKKyAgICBzZXRQbGF0Zm9ybVN0cm9rZVBhdHRlcm4obV9jb21tb24tPnN0YXRl
LnN0cm9rZVBhdHRlcm4uZ2V0KCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Rmls
bFBhdHRlcm4oUGFzc1JlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuKQpAQCAtMjI1LDYgKzIyNiw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybihQYXMKICAgICB9CiAgICAgbV9j
b21tb24tPnN0YXRlLmZpbGxDb2xvclNwYWNlID0gUGF0dGVybkNvbG9yU3BhY2U7CiAgICAgbV9j
b21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuID0gcGF0dGVybjsKKyAgICBzZXRQbGF0Zm9ybUZpbGxQ
YXR0ZXJuKG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi5nZXQoKSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRTdHJva2VHcmFkaWVudChQYXNzUmVmUHRyPEdyYWRpZW50PiBncmFk
aWVudCkKQEAgLTIzNiw2ICsyMzgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tl
R3JhZGllbnQoCiAgICAgfQogICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VDb2xvclNwYWNlID0g
R3JhZGllbnRDb2xvclNwYWNlOwogICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudCA9
IGdyYWRpZW50OworICAgIHNldFBsYXRmb3JtU3Ryb2tlR3JhZGllbnQobV9jb21tb24tPnN0YXRl
LnN0cm9rZUdyYWRpZW50LmdldCgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZp
bGxHcmFkaWVudChQYXNzUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudCkKQEAgLTI0Nyw2ICsyNTAs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KFBhCiAgICAgfQogICAg
IG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3JTcGFjZSA9IEdyYWRpZW50Q29sb3JTcGFjZTsKICAg
ICBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50ID0gZ3JhZGllbnQ7CisgICAgc2V0UGxhdGZv
cm1GaWxsR3JhZGllbnQobV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSk7CiB9CiAK
IEdyYWRpZW50KiBHcmFwaGljc0NvbnRleHQ6OmZpbGxHcmFkaWVudCgpIGNvbnN0CkBAIC01MDgs
NiArNTEyLDI0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAg
ICBnZW5lcmF0b3IuZmlsbCh0aGlzLCByZWN0KTsKIH0KIAorI2lmICFQTEFURk9STShTS0lBKQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbEdyYWRpZW50KEdyYWRpZW50KiBn
cmFkaWVudCkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbFBh
dHRlcm4oUGF0dGVybiogcGF0dGVybikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtU3Ryb2tlR3JhZGllbnQoR3JhZGllbnQqIGdyYWRpZW50KQoreworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VQYXR0ZXJuKFBhdHRlcm4qIHBhdHRl
cm4pCit7Cit9CisjZW5kaWYKKwogI2lmICFQTEFURk9STShDRykgJiYgIVBMQVRGT1JNKFNLSUEp
CiAvLyBJbXBsZW1lbnQgdGhpcyBpZiB5b3Ugd2FudCB0byBnbyBhaGVhZCBhbmQgcHVzaCB0aGUg
ZHJhd2luZyBtb2RlIGludG8geW91ciBuYXRpdmUgY29udGV4dAogLy8gaW1tZWRpYXRlbHkuCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlz
aW9uIDQ1NTYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzY0LDggKzM2NCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYpOwogICAg
ICAgICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoY29uc3QgU3Ryb2tlU3R5bGUmKTsKICAg
ICAgICAgdm9pZCBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCk7CisgICAgICAgIHZv
aWQgc2V0UGxhdGZvcm1TdHJva2VHcmFkaWVudChHcmFkaWVudCopOworICAgICAgICB2b2lkIHNl
dFBsYXRmb3JtU3Ryb2tlUGF0dGVybihQYXR0ZXJuKik7CiAKICAgICAgICAgdm9pZCBzZXRQbGF0
Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYpOworICAgICAgICB2b2lkIHNldFBsYXRmb3JtRmls
bEdyYWRpZW50KEdyYWRpZW50Kik7CisgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1GaWxsUGF0dGVy
bihQYXR0ZXJuKik7CiAKICAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhi
b29sIGIpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhZGllbnRT
a2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3Jh
ZGllbnRTa2lhLmNwcAkocmV2aXNpb24gNDU1NjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDQgKzE4NSwx
MCBAQCB2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCogY29uCiAgICAgY29udGV4
dC0+ZmlsbFJlY3QocmVjdCk7CiB9CiAKK3ZvaWQgR3JhZGllbnQ6OnNldFBsYXRmb3JtR3JhZGll
bnRTcGFjZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQorewor
ICAgIGlmIChtX2dyYWRpZW50KQorICAgICAgICBtX2dyYWRpZW50LT5zZXRMb2NhbE1hdHJpeCht
X2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRT
a2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3Jh
cGhpY3NDb250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDQ1NTYwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02ODcsMTMgKzY4Nyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiAgICAg
U2tQYWludCBwYWludDsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxp
bmcoJnBhaW50KTsKIAotICAgIGlmIChjb2xvclNwYWNlID09IFBhdHRlcm5Db2xvclNwYWNlKSB7
Ci0gICAgICAgIFNrU2hhZGVyKiBwYXQgPSBzdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZv
cm1QYXR0ZXJuKGdldENUTSgpKTsKLSAgICAgICAgcGFpbnQuc2V0U2hhZGVyKHBhdCk7Ci0gICAg
ICAgIHBhdC0+dW5yZWYoKTsKLSAgICB9IGVsc2UgaWYgKGNvbG9yU3BhY2UgPT0gR3JhZGllbnRD
b2xvclNwYWNlKQotICAgICAgICBwYWludC5zZXRTaGFkZXIoc3RhdGUuZmlsbEdyYWRpZW50LT5w
bGF0Zm9ybUdyYWRpZW50KCkpOwotCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5k
cmF3UGF0aChwYXRoLCBwYWludCk7CiB9CiAKQEAgLTcxMywxNCArNzA2LDYgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogCiAgICAgU2tQYWludCBwYWludDsKICAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKLQotICAg
IGlmIChjb2xvclNwYWNlID09IFBhdHRlcm5Db2xvclNwYWNlKSB7Ci0gICAgICAgIFNrU2hhZGVy
KiBwYXQgPSBzdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgp
KTsKLSAgICAgICAgcGFpbnQuc2V0U2hhZGVyKHBhdCk7Ci0gICAgICAgIHBhdC0+dW5yZWYoKTsK
LSAgICB9IGVsc2UgaWYgKGNvbG9yU3BhY2UgPT0gR3JhZGllbnRDb2xvclNwYWNlKQotICAgICAg
ICBwYWludC5zZXRTaGFkZXIoc3RhdGUuZmlsbEdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkp
OwotCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVjdChyLCBwYWludCk7
CiB9CiAKQEAgLTk0Nyw2ICs5MzIsMjQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtRmlsbENvbAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRGaWxsQ29sb3IoY29sb3Iucmdi
KCkpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsR3JhZGllbnQo
R3JhZGllbnQqIGdyYWRpZW50KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRGaWxsU2hhZGVyKGdyYWRp
ZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1GaWxsUGF0dGVybihQYXR0ZXJuKiBwYXR0ZXJuKQoreworICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNrU2hhZGVyKiBwYXQgPSBwYXR0
ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpOworICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5zZXRGaWxsU2hhZGVyKHBhdCk7CisgICAgcGF0LT5zYWZlVW5yZWYoKTsKK30KKwogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEludFNpemUmIHNpemUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsdXJJbnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29sb3ImIGNvbG9y
KQpAQCAtMTAxNSw2ICsxMDE4LDI0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVN0cm9rZVQKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNr
bmVzcyk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUdyYWRp
ZW50KEdyYWRpZW50KiBncmFkaWVudCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0U3Ryb2tlU2hhZGVy
KGdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1TdHJva2VQYXR0ZXJuKFBhdHRlcm4qIHBhdHRlcm4pCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2tTaGFkZXIqIHBh
dCA9IHBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSk7CisgICAgcGxhdGZv
cm1Db250ZXh0KCktPnNldFN0cm9rZVNoYWRlcihwYXQpOworICAgIHBhdC0+c2FmZVVucmVmKCk7
Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShp
bnQgbW9kZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtMTA3NywxMyArMTA5
OCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKICAgICBTa1BhaW50IHBh
aW50OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yU3Ryb2tpbmcoJnBhaW50
LCAwLCAwKTsKIAotICAgIGlmIChjb2xvclNwYWNlID09IFBhdHRlcm5Db2xvclNwYWNlKSB7Ci0g
ICAgICAgIFNrU2hhZGVyKiBwYXQgPSBzdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9y
bVBhdHRlcm4oZ2V0Q1RNKCkpOwotICAgICAgICBwYWludC5zZXRTaGFkZXIocGF0KTsKLSAgICAg
ICAgcGF0LT51bnJlZigpOwotICAgIH0gZWxzZSBpZiAoY29sb3JTcGFjZSA9PSBHcmFkaWVudENv
bG9yU3BhY2UpCi0gICAgICAgIHBhaW50LnNldFNoYWRlcihzdGF0ZS5zdHJva2VHcmFkaWVudC0+
cGxhdGZvcm1HcmFkaWVudCgpKTsKLQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+
ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwogfQogCkBAIC0xMTAyLDEzICsxMTE2LDYgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRgogICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5zZXR1cFBhaW50Rm9yU3Ryb2tpbmcoJnBhaW50LCAwLCAwKTsKICAgICBwYWludC5zZXRTdHJv
a2VXaWR0aChXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKGxpbmVXaWR0aCkpOwogCi0gICAgaWYgKGNv
bG9yU3BhY2UgPT0gUGF0dGVybkNvbG9yU3BhY2UpIHsKLSAgICAgICAgU2tTaGFkZXIqIHBhdCA9
IHN0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSk7Ci0g
ICAgICAgIHBhaW50LnNldFNoYWRlcihwYXQpOwotICAgICAgICBwYXQtPnVucmVmKCk7Ci0gICAg
fSBlbHNlIGlmIChjb2xvclNwYWNlID09IEdyYWRpZW50Q29sb3JTcGFjZSkKLSAgICAgICAgcGFp
bnQuc2V0U2hhZGVyKHN0YXRlLnN0cm9rZUdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOwot
CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVjdChyZWN0LCBwYWludCk7
CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRl
eHRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
UGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDQ1NTYwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01OCwxNyArNTgsMTcgQEAgc3RydWN0IFBsYXRmb3JtQ29udGV4dFNraWE6OlN0YXRlIHsK
ICAgICAvLyBDb21tb24gc2hhZGVyIHN0YXRlLgogICAgIGZsb2F0IG1fYWxwaGE7CiAgICAgU2tY
ZmVybW9kZTo6TW9kZSBtX3hmZXJNb2RlOwotICAgIFNrU2hhZGVyKiBtX2dyYWRpZW50OwotICAg
IFNrU2hhZGVyKiBtX3BhdHRlcm47CiAgICAgYm9vbCBtX3VzZUFudGlhbGlhc2luZzsKICAgICBT
a0RyYXdMb29wZXIqIG1fbG9vcGVyOwogCiAgICAgLy8gRmlsbC4KICAgICBTa0NvbG9yIG1fZmls
bENvbG9yOworICAgIFNrU2hhZGVyKiBtX2ZpbGxTaGFkZXI7CiAKICAgICAvLyBTdHJva2UuCiAg
ICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGUgbV9zdHJva2VTdHlsZTsKICAgICBTa0NvbG9yIG1fc3Ry
b2tlQ29sb3I7CisgICAgU2tTaGFkZXIqIG1fc3Ryb2tlU2hhZGVyOwogICAgIGZsb2F0IG1fc3Ry
b2tlVGhpY2tuZXNzOwogICAgIGludCBtX2Rhc2hSYXRpbzsgIC8vIFJhdGlvIG9mIHRoZSBsZW5n
dGggb2YgYSBkYXNoIHRvIGl0cyB3aWR0aC4KICAgICBmbG9hdCBtX21pdGVyTGltaXQ7CkBAIC05
OSwxNCArOTksMTQgQEAgcHJpdmF0ZToKIFBsYXRmb3JtQ29udGV4dFNraWE6OlN0YXRlOjpTdGF0
ZSgpCiAgICAgOiBtX2FscGhhKDEpCiAgICAgLCBtX3hmZXJNb2RlKFNrWGZlcm1vZGU6OmtTcmNP
dmVyX01vZGUpCi0gICAgLCBtX2dyYWRpZW50KDApCi0gICAgLCBtX3BhdHRlcm4oMCkKICAgICAs
IG1fdXNlQW50aWFsaWFzaW5nKHRydWUpCiAgICAgLCBtX2xvb3BlcigwKQogICAgICwgbV9maWxs
Q29sb3IoMHhGRjAwMDAwMCkKKyAgICAsIG1fZmlsbFNoYWRlcigwKQogICAgICwgbV9zdHJva2VT
dHlsZShXZWJDb3JlOjpTb2xpZFN0cm9rZSkKICAgICAsIG1fc3Ryb2tlQ29sb3IoV2ViQ29yZTo6
Q29sb3I6OmJsYWNrKQogICAgICwgbV9zdHJva2VUaGlja25lc3MoMCkKKyAgICAsIG1fc3Ryb2tl
U2hhZGVyKDApCiAgICAgLCBtX2Rhc2hSYXRpbygzKQogICAgICwgbV9taXRlckxpbWl0KDQpCiAg
ICAgLCBtX2xpbmVDYXAoU2tQYWludDo6a0RlZmF1bHRfQ2FwKQpAQCAtMTE5LDE0ICsxMTksMTQg
QEAgUGxhdGZvcm1Db250ZXh0U2tpYTo6U3RhdGU6OlN0YXRlKCkKIFBsYXRmb3JtQ29udGV4dFNr
aWE6OlN0YXRlOjpTdGF0ZShjb25zdCBTdGF0ZSYgb3RoZXIpCiAgICAgOiBtX2FscGhhKG90aGVy
Lm1fYWxwaGEpCiAgICAgLCBtX3hmZXJNb2RlKG90aGVyLm1feGZlck1vZGUpCi0gICAgLCBtX2dy
YWRpZW50KG90aGVyLm1fZ3JhZGllbnQpCi0gICAgLCBtX3BhdHRlcm4ob3RoZXIubV9wYXR0ZXJu
KQogICAgICwgbV91c2VBbnRpYWxpYXNpbmcob3RoZXIubV91c2VBbnRpYWxpYXNpbmcpCiAgICAg
LCBtX2xvb3BlcihvdGhlci5tX2xvb3BlcikKICAgICAsIG1fZmlsbENvbG9yKG90aGVyLm1fZmls
bENvbG9yKQorICAgICwgbV9maWxsU2hhZGVyKG90aGVyLm1fZmlsbFNoYWRlcikKICAgICAsIG1f
c3Ryb2tlU3R5bGUob3RoZXIubV9zdHJva2VTdHlsZSkKICAgICAsIG1fc3Ryb2tlQ29sb3Iob3Ro
ZXIubV9zdHJva2VDb2xvcikKICAgICAsIG1fc3Ryb2tlVGhpY2tuZXNzKG90aGVyLm1fc3Ryb2tl
VGhpY2tuZXNzKQorICAgICwgbV9zdHJva2VTaGFkZXIob3RoZXIubV9zdHJva2VTaGFkZXIpCiAg
ICAgLCBtX2Rhc2hSYXRpbyhvdGhlci5tX2Rhc2hSYXRpbykKICAgICAsIG1fbWl0ZXJMaW1pdChv
dGhlci5tX21pdGVyTGltaXQpCiAgICAgLCBtX2xpbmVDYXAob3RoZXIubV9saW5lQ2FwKQpAQCAt
MTQxLDE2ICsxNDEsMTYgQEAgUGxhdGZvcm1Db250ZXh0U2tpYTo6U3RhdGU6OlN0YXRlKGNvbnN0
IAogICAgIC8vIFVwIHRoZSByZWYgY291bnQgb2YgdGhlc2UuIHNhdmVSZWYgZG9lcyBub3RoaW5n
IGlmICd0aGlzJyBpcyBOVUxMLgogICAgIG1fbG9vcGVyLT5zYWZlUmVmKCk7CiAgICAgbV9kYXNo
LT5zYWZlUmVmKCk7Ci0gICAgbV9ncmFkaWVudC0+c2FmZVJlZigpOwotICAgIG1fcGF0dGVybi0+
c2FmZVJlZigpOworICAgIG1fZmlsbFNoYWRlci0+c2FmZVJlZigpOworICAgIG1fc3Ryb2tlU2hh
ZGVyLT5zYWZlUmVmKCk7CiB9CiAKIFBsYXRmb3JtQ29udGV4dFNraWE6OlN0YXRlOjp+U3RhdGUo
KQogewogICAgIG1fbG9vcGVyLT5zYWZlVW5yZWYoKTsKICAgICBtX2Rhc2gtPnNhZmVVbnJlZigp
OwotICAgIG1fZ3JhZGllbnQtPnNhZmVVbnJlZigpOwotICAgIG1fcGF0dGVybi0+c2FmZVVucmVm
KCk7CisgICAgbV9maWxsU2hhZGVyLT5zYWZlVW5yZWYoKTsKKyAgICBtX3N0cm9rZVNoYWRlci0+
c2FmZVVucmVmKCk7CiB9CiAKIFNrQ29sb3IgUGxhdGZvcm1Db250ZXh0U2tpYTo6U3RhdGU6OmFw
cGx5QWxwaGEoU2tDb2xvciBjKSBjb25zdApAQCAtMjczLDYgKzI3MywxMSBAQCB2b2lkIFBsYXRm
b3JtQ29udGV4dFNraWE6OmRyYXdSZWN0KFNrUmVjCiAgICAgICAgIChtX3N0YXRlLT5tX3N0cm9r
ZUNvbG9yICYgMHhGRjAwMDAwMCkpIHsKICAgICAgICAgLy8gV2UgZG8gYSBmaWxsIG9mIGZvdXIg
cmVjdHMgdG8gc2ltdWxhdGUgdGhlIHN0cm9rZSBvZiBhIGJvcmRlci4KICAgICAgICAgU2tDb2xv
ciBvbGRGaWxsQ29sb3IgPSBtX3N0YXRlLT5tX2ZpbGxDb2xvcjsKKworICAgICAgICAvLyBzZXRG
aWxsQ29sb3IoKSB3aWxsIHNldCB0aGUgc2hhZGVyIHRvIE5VTEwsIHNvIHNhdmUgYSByZWYgdG8g
aXQgbm93LiAKKyAgICAgICAgU2tTaGFkZXIqIG9sZEZpbGxTaGFkZXIgPSBtX3N0YXRlLT5tX2Zp
bGxTaGFkZXI7CisgICAgICAgIG9sZEZpbGxTaGFkZXItPnNhZmVSZWYoKTsKKwogICAgICAgICBp
ZiAob2xkRmlsbENvbG9yICE9IG1fc3RhdGUtPm1fc3Ryb2tlQ29sb3IpCiAgICAgICAgICAgICBz
ZXRGaWxsQ29sb3IobV9zdGF0ZS0+bV9zdHJva2VDb2xvcik7CiAgICAgICAgIHNldHVwUGFpbnRG
b3JGaWxsaW5nKCZwYWludCk7CkBAIC0yODYsNiArMjkxLDggQEAgdm9pZCBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjpkcmF3UmVjdChTa1JlYwogICAgICAgICBjYW52YXMoKS0+ZHJhd1JlY3QocmlnaHRC
b3JkZXIsIHBhaW50KTsKICAgICAgICAgaWYgKG9sZEZpbGxDb2xvciAhPSBtX3N0YXRlLT5tX3N0
cm9rZUNvbG9yKQogICAgICAgICAgICAgc2V0RmlsbENvbG9yKG9sZEZpbGxDb2xvcik7CisgICAg
ICAgIHNldEZpbGxTaGFkZXIob2xkRmlsbFNoYWRlcik7CisgICAgICAgIG9sZEZpbGxTaGFkZXIt
PnNhZmVVbnJlZigpOwogICAgIH0KIH0KIApAQCAtMzAxLDE3ICszMDgsMTMgQEAgdm9pZCBQbGF0
Zm9ybUNvbnRleHRTa2lhOjpzZXR1cFBhaW50Q29tbQogICAgIHBhaW50LT5zZXRBbnRpQWxpYXMo
bV9zdGF0ZS0+bV91c2VBbnRpYWxpYXNpbmcpOwogICAgIHBhaW50LT5zZXRYZmVybW9kZU1vZGUo
bV9zdGF0ZS0+bV94ZmVyTW9kZSk7CiAgICAgcGFpbnQtPnNldExvb3BlcihtX3N0YXRlLT5tX2xv
b3Blcik7Ci0KLSAgICBpZiAobV9zdGF0ZS0+bV9ncmFkaWVudCkKLSAgICAgICAgcGFpbnQtPnNl
dFNoYWRlcihtX3N0YXRlLT5tX2dyYWRpZW50KTsKLSAgICBlbHNlIGlmIChtX3N0YXRlLT5tX3Bh
dHRlcm4pCi0gICAgICAgIHBhaW50LT5zZXRTaGFkZXIobV9zdGF0ZS0+bV9wYXR0ZXJuKTsKIH0K
IAogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXR1cFBhaW50Rm9yRmlsbGluZyhTa1BhaW50
KiBwYWludCkgY29uc3QKIHsKICAgICBzZXR1cFBhaW50Q29tbW9uKHBhaW50KTsKICAgICBwYWlu
dC0+c2V0Q29sb3IobV9zdGF0ZS0+YXBwbHlBbHBoYShtX3N0YXRlLT5tX2ZpbGxDb2xvcikpOwor
ICAgIHBhaW50LT5zZXRTaGFkZXIobV9zdGF0ZS0+bV9maWxsU2hhZGVyKTsKIH0KIAogZmxvYXQg
UGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0dXBQYWludEZvclN0cm9raW5nKFNrUGFpbnQqIHBhaW50
LCBTa1JlY3QqIHJlY3QsIGludCBsZW5ndGgpIGNvbnN0CkBAIC0zMjAsNiArMzIzLDcgQEAgZmxv
YXQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0dXBQYWludEZvcgogICAgIGZsb2F0IHdpZHRoID0g
bV9zdGF0ZS0+bV9zdHJva2VUaGlja25lc3M7CiAKICAgICBwYWludC0+c2V0Q29sb3IobV9zdGF0
ZS0+YXBwbHlBbHBoYShtX3N0YXRlLT5tX3N0cm9rZUNvbG9yKSk7CisgICAgcGFpbnQtPnNldFNo
YWRlcihtX3N0YXRlLT5tX3N0cm9rZVNoYWRlcik7CiAgICAgcGFpbnQtPnNldFN0eWxlKFNrUGFp
bnQ6OmtTdHJva2VfU3R5bGUpOwogICAgIHBhaW50LT5zZXRTdHJva2VXaWR0aChTa0Zsb2F0VG9T
Y2FsYXIod2lkdGgpKTsKICAgICBwYWludC0+c2V0U3Ryb2tlQ2FwKG1fc3RhdGUtPm1fbGluZUNh
cCk7CkBAIC0zOTAsNiArMzk0LDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRYZmVy
bW9kZU1vZAogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRGaWxsQ29sb3IoU2tDb2xvciBj
b2xvcikKIHsKICAgICBtX3N0YXRlLT5tX2ZpbGxDb2xvciA9IGNvbG9yOworICAgIHNldEZpbGxT
aGFkZXIoTlVMTCk7CiB9CiAKIFNrRHJhd0xvb3BlciogUGxhdGZvcm1Db250ZXh0U2tpYTo6Z2V0
RHJhd0xvb3BlcigpIGNvbnN0CkBAIC00MTAsNiArNDE1LDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjpzZXRTdHJva2VTdHlsZQogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRTdHJv
a2VDb2xvcihTa0NvbG9yIHN0cm9rZUNvbG9yKQogewogICAgIG1fc3RhdGUtPm1fc3Ryb2tlQ29s
b3IgPSBzdHJva2VDb2xvcjsKKyAgICBzZXRTdHJva2VTaGFkZXIoTlVMTCk7CiB9CiAKIGZsb2F0
IFBsYXRmb3JtQ29udGV4dFNraWE6OmdldFN0cm9rZVRoaWNrbmVzcygpIGNvbnN0CkBAIC00MjIs
NiArNDI4LDE1IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0U3Ryb2tlVGhpY2sKICAg
ICBtX3N0YXRlLT5tX3N0cm9rZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsKIH0KIAordm9pZCBQbGF0
Zm9ybUNvbnRleHRTa2lhOjpzZXRTdHJva2VTaGFkZXIoU2tTaGFkZXIqIHN0cm9rZVNoYWRlcikK
K3sKKyAgICBpZiAoc3Ryb2tlU2hhZGVyICE9IG1fc3RhdGUtPm1fc3Ryb2tlU2hhZGVyKSB7Cisg
ICAgICAgIG1fc3RhdGUtPm1fc3Ryb2tlU2hhZGVyLT5zYWZlVW5yZWYoKTsKKyAgICAgICAgbV9z
dGF0ZS0+bV9zdHJva2VTaGFkZXIgPSBzdHJva2VTaGFkZXI7CisgICAgICAgIG1fc3RhdGUtPm1f
c3Ryb2tlU2hhZGVyLT5zYWZlUmVmKCk7CisgICAgfQorfQorCiBpbnQgUGxhdGZvcm1Db250ZXh0
U2tpYTo6Z2V0VGV4dERyYXdpbmdNb2RlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zdGF0ZS0+
bV90ZXh0RHJhd2luZ01vZGU7CkBAIC00ODAsMTkgKzQ5NSwxMiBAQCB2b2lkIFBsYXRmb3JtQ29u
dGV4dFNraWE6OnNldEZpbGxSdWxlKFNrCiAgICAgbV9wYXRoLnNldEZpbGxUeXBlKGZyKTsKIH0K
IAotdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRHcmFkaWVudChTa1NoYWRlciogZ3JhZGll
bnQpCi17Ci0gICAgaWYgKGdyYWRpZW50ICE9IG1fc3RhdGUtPm1fZ3JhZGllbnQpIHsKLSAgICAg
ICAgbV9zdGF0ZS0+bV9ncmFkaWVudC0+c2FmZVVucmVmKCk7Ci0gICAgICAgIG1fc3RhdGUtPm1f
Z3JhZGllbnQgPSBncmFkaWVudDsKLSAgICB9Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0U2tp
YTo6c2V0UGF0dGVybihTa1NoYWRlciogcGF0dGVybikKK3ZvaWQgUGxhdGZvcm1Db250ZXh0U2tp
YTo6c2V0RmlsbFNoYWRlcihTa1NoYWRlciogZmlsbFNoYWRlcikKIHsKLSAgICBpZiAocGF0dGVy
biAhPSBtX3N0YXRlLT5tX3BhdHRlcm4pIHsKLSAgICAgICAgbV9zdGF0ZS0+bV9wYXR0ZXJuLT5z
YWZlVW5yZWYoKTsKLSAgICAgICAgbV9zdGF0ZS0+bV9wYXR0ZXJuID0gcGF0dGVybjsKKyAgICBp
ZiAoZmlsbFNoYWRlciAhPSBtX3N0YXRlLT5tX2ZpbGxTaGFkZXIpIHsKKyAgICAgICAgbV9zdGF0
ZS0+bV9maWxsU2hhZGVyLT5zYWZlVW5yZWYoKTsKKyAgICAgICAgbV9zdGF0ZS0+bV9maWxsU2hh
ZGVyID0gZmlsbFNoYWRlcjsKKyAgICAgICAgbV9zdGF0ZS0+bV9maWxsU2hhZGVyLT5zYWZlUmVm
KCk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxh
dGZvcm1Db250ZXh0U2tpYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgJKHJldmlzaW9uIDQ1NTYwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAkod29ya2luZyBj
b3B5KQpAQCAtMTE3LDEzICsxMTcsMTMgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RmlsbFJ1bGUo
U2tQYXRoOjpGaWxsVHlwZSk7CiAgICAgdm9pZCBzZXRYZmVybW9kZU1vZGUoU2tYZmVybW9kZTo6
TW9kZSk7CiAgICAgdm9pZCBzZXRGaWxsQ29sb3IoU2tDb2xvcik7CisgICAgdm9pZCBzZXRGaWxs
U2hhZGVyKFNrU2hhZGVyKik7CiAgICAgdm9pZCBzZXRTdHJva2VTdHlsZShXZWJDb3JlOjpTdHJv
a2VTdHlsZSk7CiAgICAgdm9pZCBzZXRTdHJva2VDb2xvcihTa0NvbG9yKTsKICAgICB2b2lkIHNl
dFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpOworICAgIHZvaWQgc2V0U3Ryb2tlU2hh
ZGVyKFNrU2hhZGVyKik7CiAgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoaW50IG1vZGUpOwog
ICAgIHZvaWQgc2V0VXNlQW50aWFsaWFzaW5nKGJvb2wgZW5hYmxlKTsKLSAgICB2b2lkIHNldEdy
YWRpZW50KFNrU2hhZGVyKik7Ci0gICAgdm9pZCBzZXRQYXR0ZXJuKFNrU2hhZGVyKik7CiAgICAg
dm9pZCBzZXREYXNoUGF0aEVmZmVjdChTa0Rhc2hQYXRoRWZmZWN0Kik7CiAKICAgICBTa0RyYXdM
b29wZXIqIGdldERyYXdMb29wZXIoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1NraWFGb250V2luLmNwcAkocmV2aXNpb24gNDU1NjApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjcsMjEgKzI2NywxMSBAQCBzdGF0aWMgYm9vbCBza2lhRHJhd1RleHQoSEZPTlQgaGZv
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgU2tDYW52YXMqIGNhbnZhcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTa1BvaW50JiBwb2ludCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBTa1BhaW50KiBwYWludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtYXRpb25NYXRyaXgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgR3JhZGllbnQqIGdyYWRpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAg
IFBhdHRlcm4qIHBhdHRlcm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09SRCog
Z2x5cGhzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCogYWR2YW5jZXMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR09GRlNFVCogb2Zmc2V0cywKICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgbnVtR2x5cGhzKQogewotICAgIFNrU2hhZGVyKiBzaGFkZXIg
PSBOVUxMOwotICAgIGlmIChncmFkaWVudCkKLSAgICAgICAgc2hhZGVyID0gZ3JhZGllbnQtPnBs
YXRmb3JtR3JhZGllbnQoKTsKLSAgICBlbHNlIGlmIChwYXR0ZXJuKQotICAgICAgICBzaGFkZXIg
PSBwYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4odHJhbnNmb3JtYXRpb25NYXRyaXgpOwot
Ci0gICAgcGFpbnQtPnNldFNoYWRlcihzaGFkZXIpOwogICAgIGZsb2F0IHggPSBwb2ludC5mWCwg
eSA9IHBvaW50LmZZOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykg
ewpAQCAtMzI2LDE0ICszMTYsNyBAQCBib29sIHBhaW50U2tpYVRleHQoR3JhcGhpY3NDb250ZXh0
KiBjb250CiAgICAgYm9vbCBkaWRGaWxsID0gZmFsc2U7CiAKICAgICBpZiAoKHRleHRNb2RlICYg
Y1RleHRGaWxsKSAmJiBTa0NvbG9yR2V0QShwYWludC5nZXRDb2xvcigpKSkgewotICAgICAgICBH
cmFkaWVudCogZmlsbEdyYWRpZW50ID0gMDsKLSAgICAgICAgUGF0dGVybiogZmlsbFBhdHRlcm4g
PSAwOwotICAgICAgICBpZiAoY29udGV4dC0+ZmlsbENvbG9yU3BhY2UoKSA9PSBHcmFkaWVudENv
bG9yU3BhY2UpCi0gICAgICAgICAgICBmaWxsR3JhZGllbnQgPSBjb250ZXh0LT5maWxsR3JhZGll
bnQoKTsKLSAgICAgICAgZWxzZSBpZiAoY29udGV4dC0+ZmlsbENvbG9yU3BhY2UoKSA9PSBQYXR0
ZXJuQ29sb3JTcGFjZSkKLSAgICAgICAgICAgIGZpbGxQYXR0ZXJuID0gY29udGV4dC0+ZmlsbFBh
dHRlcm4oKTsKICAgICAgICAgaWYgKCFza2lhRHJhd1RleHQoaGZvbnQsIGRjLCBwbGF0Zm9ybUNv
bnRleHQtPmNhbnZhcygpLCAqb3JpZ2luLCAmcGFpbnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmdldENUTSgpLCBmaWxsR3JhZGllbnQsIGZpbGxQYXR0ZXJuLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAmZ2x5cGhzWzBdLCAmYWR2YW5jZXNbMF0sICZvZmZzZXRzWzBd
LCBudW1HbHlwaHMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBkaWRGaWxs
ID0gdHJ1ZTsKQEAgLTM2MCwxNCArMzQzLDcgQEAgYm9vbCBwYWludFNraWFUZXh0KEdyYXBoaWNz
Q29udGV4dCogY29udAogICAgICAgICAgICAgcGFpbnQuc2V0TG9vcGVyKDApLT5zYWZlVW5yZWYo
KTsKICAgICAgICAgfQogCi0gICAgICAgIEdyYWRpZW50KiBzdHJva2VHcmFkaWVudCA9IDA7Ci0g
ICAgICAgIFBhdHRlcm4qIHN0cm9rZVBhdHRlcm4gPSAwOwotICAgICAgICBpZiAoY29udGV4dC0+
c3Ryb2tlQ29sb3JTcGFjZSgpID09IEdyYWRpZW50Q29sb3JTcGFjZSkKLSAgICAgICAgICAgIHN0
cm9rZUdyYWRpZW50ID0gY29udGV4dC0+c3Ryb2tlR3JhZGllbnQoKTsKLSAgICAgICAgZWxzZSBp
ZiAoY29udGV4dC0+c3Ryb2tlQ29sb3JTcGFjZSgpID09IFBhdHRlcm5Db2xvclNwYWNlKQotICAg
ICAgICAgICAgc3Ryb2tlUGF0dGVybiA9IGNvbnRleHQtPnN0cm9rZVBhdHRlcm4oKTsKICAgICAg
ICAgaWYgKCFza2lhRHJhd1RleHQoaGZvbnQsIGRjLCBwbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygp
LCAqb3JpZ2luLCAmcGFpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdl
dENUTSgpLCBzdHJva2VHcmFkaWVudCwgc3Ryb2tlUGF0dGVybiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJmdseXBoc1swXSwgJmFkdmFuY2VzWzBdLCAmb2Zmc2V0c1swXSwgbnVtR2x5cGhz
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdQYWludFNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuY3BwCShyZXZpc2lvbiA0NTU2MCkKKysrIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDggKzE5
Miw4IEBAIHZvaWQgU1ZHUGFpbnRTZXJ2ZXI6OnRlYXJkb3duKEdyYXBoaWNzQ28KICAgICAvLyBh
ZGRlZCBiYWNrIHRvIHRoZSBjb250ZXh0IGFmdGVyIGZpbGxpbmcuIFRoaXMgaXMgYmVjYXVzZSBp
bnRlcm5hbGx5IGl0CiAgICAgLy8gY2FsbHMgQ0dDb250ZXh0RmlsbFBhdGgoKSB3aGljaCBjbG9z
ZXMgdGhlIHBhdGguCiAgICAgY29udGV4dC0+YmVnaW5QYXRoKCk7Ci0gICAgY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPnNldEdyYWRpZW50KDApOwotICAgIGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5zZXRQYXR0ZXJuKDApOworICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5z
ZXRGaWxsU2hhZGVyKDApOworICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXRTdHJv
a2VTaGFkZXIoMCk7CiB9CiAjZWxzZQogdm9pZCBTVkdQYWludFNlcnZlcjo6dGVhcmRvd24oR3Jh
cGhpY3NDb250ZXh0KiYsIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlwZSwg
Ym9vbCkgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32326</attachid>
            <date>2009-07-06 14:29:05 -0700</date>
            <delta_ts>2009-07-15 15:00:33 -0700</delta_ts>
            <desc>3rd rev - setFillColor() unconditionally in rect border code, so shader is always reset</desc>
            <filename>gradient_cleanup_webkit_3.patch</filename>
            <type>text/plain</type>
            <size>23910</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTU2MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODEgQEAKKzIwMDktMDctMDYgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUmVmYWN0b3IgU2tpYSBpbXBsZW1lbnRhdGlvbiBvZiBncmFkaWVudHMgYW5kIHBhdHRl
cm5zLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2
NjE4CisKKyAgICAgICAgVGhlIGZvbGxvd2luZyBsYXlvdXQgdGVzdHMgd2VyZSBicmVha2luZyBv
biBDaHJvbWl1bS9MaW51eDoKKworICAgICAgICBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL2pzLWxh
dGUtZ3JhZGllbnQtY3JlYXRpb24uc3ZnIChiYWQgYmFzZWxpbmUgUE5HKQorICAgICAgICBMYXlv
dXRUZXN0cy9zdmcvY3VzdG9tL2pzLWxhdGUtZ3JhZGllbnQtYW5kLW9iamVjdC5jcmVhdGlvbi5z
dmcKKyAgICAgICAgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9qcy1sYXRlLXBhdHRlcm4tY3JlYXRp
b24uc3ZnIChiYWQgYmFzZWxpbmUgUE5HKQorICAgICAgICBMYXlvdXRUZXN0cy9zdmcvY3VzdG9t
L2pzLWxhdGUtcGF0dGVybi1hbmQtb2JqZWN0LWNyZWF0aW9uLnN2ZworCisgICAgICAgIEkgY291
bGQndmUgZml4ZWQgdGhlc2UgdGhlIGVhc3kgd2F5LCBieSBjb3B5aW5nIHRoZSBzYW1lIDUKKyAg
ICAgICAgbGluZXMgb2YgY29kZSB3ZSB1c2UgZXZlcnl3aGVyZSB3ZSBuZWVkIHBhdHRlcm5zIG9y
IGdyYWRpZW50cywgYnV0CisgICAgICAgIEkgZGVjaWRlZCB0byBmaXggaXQgdGhlIGhhcmQgd2F5
OiAgYnkgcmVmYWN0b3JpbmcgdGhlIGNvZGUgc28gdGhhdAorICAgICAgICBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjpzZXR1cFBhaW50Rm9yRmlsbGluZygpIGFuZAorICAgICAgICBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjpzZXR1cFBhaW50Rm9yU3Ryb2tpbmcoKSBkbyB0aGUgcmlnaHQgdGhpbmcsCisgICAg
ICAgIGFuZCBhbHNvIGhhbmRsZSBncmFkaWVudHMgYW5kIHBhdHRlcm5zLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyByZXF1aXJlZCBwdXNoaW5nIHRoZSBncmFkaWVudHMgYW5kIHBhdHRlcm5zIHNl
dCBpbiAKKyAgICAgICAgKGdlbmVyaWMpIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4o
KSBhbmQgZnJpZW5kcyBkb3duIGludG8KKyAgICAgICAgUGxhdGZvcm1Db250ZXh0U2tpYS4gIEZv
ciB0aGlzLCBJIGZvbGxvd2VkIHRoZSBzZXRQbGF0Zm9ybVhYWCgpCisgICAgICAgIHBhdHRlcm4g
dXNlZCBlbHNld2hlcmUgaW4gR3JhcGhpY3NDb250ZXh0LCBhbmQgc3R1YmJlZCB0aGVtIG91dCBv
bgorICAgICAgICB0aGUgb3RoZXIgcGxhdGZvcm1zIHdpdGggI2lmICFQTEFURk9STShTS0lBKS4g
IFRoaXMgYWxzbyByZXF1aXJlZAorICAgICAgICBwdXNoaW5nIGNoYW5nZXMgdG8gdGhlIGdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm0gZnJvbSB0aGUgR3JhZGllbnQgaW50byAKKyAgICAgICAgR3JhZGll
bnRTa2lhLgorCisgICAgICAgIFNpbmNlIGl0J3MgYSBTa2lhIGNvbnRleHQsIEkgZGVjaWRlZCB0
byBjYWNoZSB0aGUgdmFsdWVzIGFzCisgICAgICAgIFNrU2hhZGVycy4gIFRoZXJlIHdlcmUgZXhp
c3RpbmcgbV9wYXR0ZXJuIGFuZCBtX2dyYWRpZW50IFNrU2hhZGVycywKKyAgICAgICAgYnV0IHRo
ZXkgd2VyZSB1bnVzZWQsIGFuZCB3aG9zZSB1c2Ugd2FzIGFtYmlndW91cywgc28gSQorICAgICAg
ICByZXBsYWNlZCB0aGVtIHdpdGggb25lIFNrU2hhZGVyIGVhY2ggZm9yIGZpbGxpbmcgYW5kIHN0
cm9raW5nLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNldFBsYXRmb3JtR3JhZGllbnRTcGFjZVRyYW5zZm9y
bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXRTdHJva2VHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtRmlsbEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlR3JhZGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVBhdHRlcm4pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YWRpZW50OjpzZXRQbGF0Zm9ybUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybUZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUdyYWRpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHA6CisgICAgICAgIChQbGF0Zm9ybUNvbnRl
eHRTa2lhOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoUGxhdGZvcm1Db250ZXh0U2tpYTo6U3Rh
dGU6On5TdGF0ZSk6CisgICAgICAgIChQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3UmVjdCk6Cisg
ICAgICAgIChQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXR1cFBhaW50Q29tbW9uKToKKyAgICAgICAg
KFBsYXRmb3JtQ29udGV4dFNraWE6OnNldHVwUGFpbnRGb3JGaWxsaW5nKToKKyAgICAgICAgKFBs
YXRmb3JtQ29udGV4dFNraWE6OnNldHVwUGFpbnRGb3JTdHJva2luZyk6CisgICAgICAgIChQbGF0
Zm9ybUNvbnRleHRTa2lhOjpzZXRGaWxsQ29sb3IpOgorICAgICAgICAoUGxhdGZvcm1Db250ZXh0
U2tpYTo6c2V0U3Ryb2tlQ29sb3IpOgorICAgICAgICAoUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0
U3Ryb2tlU2hhZGVyKToKKyAgICAgICAgKFBsYXRmb3JtQ29udGV4dFNraWE6OnNldEZpbGxTaGFk
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c2tpYURyYXdUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50
U2tpYVRleHQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlcjo6dGVhcmRvd24pOgorCiAyMDA5LTA3LTA2
ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGF2aWQgTGV2aW4uCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNw
cAkocmV2aXNpb24gNDU1NjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDQgKzE1NSwxNyBAQCB2b2lkIEdyYWRpZW50Ojpz
ZXRTcHJlYWRNZXRob2QoR3JhZGllbnRTCiAgICAgbV9zcHJlYWRNZXRob2QgPSBzcHJlYWRNZXRo
b2Q7CiB9CiAKK3ZvaWQgR3JhZGllbnQ6OnNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbikKK3sgCisg
ICAgbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24gPSBncmFkaWVudFNwYWNlVHJhbnNmb3Jt
YXRpb247CisgICAgc2V0UGxhdGZvcm1HcmFkaWVudFNwYWNlVHJhbnNmb3JtKGdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm1hdGlvbik7Cit9CisKKyNpZiAhUExBVEZPUk0oU0tJQSkKK3ZvaWQgR3JhZGll
bnQ6OnNldFBsYXRmb3JtR3JhZGllbnRTcGFjZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYpCit7Cit9CisjZW5kaWYKKworCiB9IC8vbmFtZXNwYWNlCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCShyZXZpc2lvbiA0NTU2MCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsMTEgKzkwLDEy
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHNldFNwcmVhZE1ldGhvZChH
cmFkaWVudFNwcmVhZE1ldGhvZCk7CiAgICAgICAgIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVh
ZE1ldGhvZCgpIHsgcmV0dXJuIG1fc3ByZWFkTWV0aG9kOyB9Ci0gICAgICAgIHZvaWQgc2V0R3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZ3JhZGllbnRT
cGFjZVRyYW5zZm9ybWF0aW9uKSB7IG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uID0gZ3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOyB9CisgICAgICAgIHZvaWQgc2V0R3JhZGllbnRTcGFj
ZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZ3JhZGllbnRTcGFjZVRyYW5z
Zm9ybWF0aW9uKTsKICAgICAgICAgLy8gUXQgYW5kIENHIHRyYW5zZm9ybSB0aGUgZ3JhZGllbnQg
YXQgZHJhdyB0aW1lCiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdyYWRpZW50U3BhY2VU
cmFuc2Zvcm0oKSB7IHJldHVybiBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsgfQogCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBmaWxsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVj
dCYpOworICAgICAgICB2b2lkIHNldFBsYXRmb3JtR3JhZGllbnRTcGFjZVRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKTsKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIEdyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25z
dCBGbG9hdFBvaW50JiBwMSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuY3BwCShyZXZpc2lvbiA0NTU2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDYgKzIx
NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKFAKICAgICB9CiAg
ICAgbV9jb21tb24tPnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UgPSBQYXR0ZXJuQ29sb3JTcGFjZTsK
ICAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybiA9IHBhdHRlcm47CisgICAgc2V0UGxh
dGZvcm1TdHJva2VQYXR0ZXJuKG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKFBhc3NSZWZQdHI8UGF0
dGVybj4gcGF0dGVybikKQEAgLTIyNSw2ICsyMjYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0RmlsbFBhdHRlcm4oUGFzCiAgICAgfQogICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3JT
cGFjZSA9IFBhdHRlcm5Db2xvclNwYWNlOwogICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVy
biA9IHBhdHRlcm47CisgICAgc2V0UGxhdGZvcm1GaWxsUGF0dGVybihtX2NvbW1vbi0+c3RhdGUu
ZmlsbFBhdHRlcm4uZ2V0KCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tl
R3JhZGllbnQoUGFzc1JlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQpCkBAIC0yMzYsNiArMjM4LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50KAogICAgIH0KICAgICBt
X2NvbW1vbi0+c3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSA9IEdyYWRpZW50Q29sb3JTcGFjZTsKICAg
ICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBncmFkaWVudDsKKyAgICBzZXRQbGF0
Zm9ybVN0cm9rZUdyYWRpZW50KG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3JhZGllbnQoUGFzc1JlZlB0cjxH
cmFkaWVudD4gZ3JhZGllbnQpCkBAIC0yNDcsNiArMjUwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldEZpbGxHcmFkaWVudChQYQogICAgIH0KICAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbENv
bG9yU3BhY2UgPSBHcmFkaWVudENvbG9yU3BhY2U7CiAgICAgbV9jb21tb24tPnN0YXRlLmZpbGxH
cmFkaWVudCA9IGdyYWRpZW50OworICAgIHNldFBsYXRmb3JtRmlsbEdyYWRpZW50KG1fY29tbW9u
LT5zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCkpOwogfQogCiBHcmFkaWVudCogR3JhcGhpY3NDb250
ZXh0OjpmaWxsR3JhZGllbnQoKSBjb25zdApAQCAtNTA4LDYgKzUxMiwyNCBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAgZ2VuZXJhdG9yLmZpbGwodGhpcywg
cmVjdCk7CiB9CiAKKyNpZiAhUExBVEZPUk0oU0tJQSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybUZpbGxHcmFkaWVudChHcmFkaWVudCopCit7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxQYXR0ZXJuKFBhdHRlcm4qKQoreworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VHcmFkaWVudChHcmFkaWVudCopCit7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVBhdHRlcm4oUGF0dGVy
biopCit7Cit9CisjZW5kaWYKKwogI2lmICFQTEFURk9STShDRykgJiYgIVBMQVRGT1JNKFNLSUEp
CiAvLyBJbXBsZW1lbnQgdGhpcyBpZiB5b3Ugd2FudCB0byBnbyBhaGVhZCBhbmQgcHVzaCB0aGUg
ZHJhd2luZyBtb2RlIGludG8geW91ciBuYXRpdmUgY29udGV4dAogLy8gaW1tZWRpYXRlbHkuCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlz
aW9uIDQ1NTYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzY0LDggKzM2NCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYpOwogICAg
ICAgICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoY29uc3QgU3Ryb2tlU3R5bGUmKTsKICAg
ICAgICAgdm9pZCBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCk7CisgICAgICAgIHZv
aWQgc2V0UGxhdGZvcm1TdHJva2VHcmFkaWVudChHcmFkaWVudCopOworICAgICAgICB2b2lkIHNl
dFBsYXRmb3JtU3Ryb2tlUGF0dGVybihQYXR0ZXJuKik7CiAKICAgICAgICAgdm9pZCBzZXRQbGF0
Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYpOworICAgICAgICB2b2lkIHNldFBsYXRmb3JtRmls
bEdyYWRpZW50KEdyYWRpZW50Kik7CisgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1GaWxsUGF0dGVy
bihQYXR0ZXJuKik7CiAKICAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhi
b29sIGIpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhZGllbnRT
a2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3Jh
ZGllbnRTa2lhLmNwcAkocmV2aXNpb24gNDU1NjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDQgKzE4NSwx
MCBAQCB2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCogY29uCiAgICAgY29udGV4
dC0+ZmlsbFJlY3QocmVjdCk7CiB9CiAKK3ZvaWQgR3JhZGllbnQ6OnNldFBsYXRmb3JtR3JhZGll
bnRTcGFjZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQorewor
ICAgIGlmIChtX2dyYWRpZW50KQorICAgICAgICBtX2dyYWRpZW50LT5zZXRMb2NhbE1hdHJpeCht
X2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRT
a2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3Jh
cGhpY3NDb250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDQ1NTYwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02ODcsMTMgKzY4Nyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiAgICAg
U2tQYWludCBwYWludDsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxp
bmcoJnBhaW50KTsKIAotICAgIGlmIChjb2xvclNwYWNlID09IFBhdHRlcm5Db2xvclNwYWNlKSB7
Ci0gICAgICAgIFNrU2hhZGVyKiBwYXQgPSBzdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZv
cm1QYXR0ZXJuKGdldENUTSgpKTsKLSAgICAgICAgcGFpbnQuc2V0U2hhZGVyKHBhdCk7Ci0gICAg
ICAgIHBhdC0+dW5yZWYoKTsKLSAgICB9IGVsc2UgaWYgKGNvbG9yU3BhY2UgPT0gR3JhZGllbnRD
b2xvclNwYWNlKQotICAgICAgICBwYWludC5zZXRTaGFkZXIoc3RhdGUuZmlsbEdyYWRpZW50LT5w
bGF0Zm9ybUdyYWRpZW50KCkpOwotCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5k
cmF3UGF0aChwYXRoLCBwYWludCk7CiB9CiAKQEAgLTcxMywxNCArNzA2LDYgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogCiAgICAgU2tQYWludCBwYWludDsKICAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKLQotICAg
IGlmIChjb2xvclNwYWNlID09IFBhdHRlcm5Db2xvclNwYWNlKSB7Ci0gICAgICAgIFNrU2hhZGVy
KiBwYXQgPSBzdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgp
KTsKLSAgICAgICAgcGFpbnQuc2V0U2hhZGVyKHBhdCk7Ci0gICAgICAgIHBhdC0+dW5yZWYoKTsK
LSAgICB9IGVsc2UgaWYgKGNvbG9yU3BhY2UgPT0gR3JhZGllbnRDb2xvclNwYWNlKQotICAgICAg
ICBwYWludC5zZXRTaGFkZXIoc3RhdGUuZmlsbEdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkp
OwotCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVjdChyLCBwYWludCk7
CiB9CiAKQEAgLTk0Nyw2ICs5MzIsMjQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtRmlsbENvbAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRGaWxsQ29sb3IoY29sb3Iucmdi
KCkpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsR3JhZGllbnQo
R3JhZGllbnQqIGdyYWRpZW50KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRGaWxsU2hhZGVyKGdyYWRp
ZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1GaWxsUGF0dGVybihQYXR0ZXJuKiBwYXR0ZXJuKQoreworICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNrU2hhZGVyKiBwYXQgPSBwYXR0
ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpOworICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5zZXRGaWxsU2hhZGVyKHBhdCk7CisgICAgcGF0LT5zYWZlVW5yZWYoKTsKK30KKwogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEludFNpemUmIHNpemUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsdXJJbnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29sb3ImIGNvbG9y
KQpAQCAtMTAxNSw2ICsxMDE4LDI0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVN0cm9rZVQKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNr
bmVzcyk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUdyYWRp
ZW50KEdyYWRpZW50KiBncmFkaWVudCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0U3Ryb2tlU2hhZGVy
KGdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1TdHJva2VQYXR0ZXJuKFBhdHRlcm4qIHBhdHRlcm4pCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2tTaGFkZXIqIHBh
dCA9IHBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSk7CisgICAgcGxhdGZv
cm1Db250ZXh0KCktPnNldFN0cm9rZVNoYWRlcihwYXQpOworICAgIHBhdC0+c2FmZVVucmVmKCk7
Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShp
bnQgbW9kZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtMTA3NywxMyArMTA5
OCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKICAgICBTa1BhaW50IHBh
aW50OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yU3Ryb2tpbmcoJnBhaW50
LCAwLCAwKTsKIAotICAgIGlmIChjb2xvclNwYWNlID09IFBhdHRlcm5Db2xvclNwYWNlKSB7Ci0g
ICAgICAgIFNrU2hhZGVyKiBwYXQgPSBzdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9y
bVBhdHRlcm4oZ2V0Q1RNKCkpOwotICAgICAgICBwYWludC5zZXRTaGFkZXIocGF0KTsKLSAgICAg
ICAgcGF0LT51bnJlZigpOwotICAgIH0gZWxzZSBpZiAoY29sb3JTcGFjZSA9PSBHcmFkaWVudENv
bG9yU3BhY2UpCi0gICAgICAgIHBhaW50LnNldFNoYWRlcihzdGF0ZS5zdHJva2VHcmFkaWVudC0+
cGxhdGZvcm1HcmFkaWVudCgpKTsKLQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+
ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwogfQogCkBAIC0xMTAyLDEzICsxMTE2LDYgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRgogICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5zZXR1cFBhaW50Rm9yU3Ryb2tpbmcoJnBhaW50LCAwLCAwKTsKICAgICBwYWludC5zZXRTdHJv
a2VXaWR0aChXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKGxpbmVXaWR0aCkpOwogCi0gICAgaWYgKGNv
bG9yU3BhY2UgPT0gUGF0dGVybkNvbG9yU3BhY2UpIHsKLSAgICAgICAgU2tTaGFkZXIqIHBhdCA9
IHN0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSk7Ci0g
ICAgICAgIHBhaW50LnNldFNoYWRlcihwYXQpOwotICAgICAgICBwYXQtPnVucmVmKCk7Ci0gICAg
fSBlbHNlIGlmIChjb2xvclNwYWNlID09IEdyYWRpZW50Q29sb3JTcGFjZSkKLSAgICAgICAgcGFp
bnQuc2V0U2hhZGVyKHN0YXRlLnN0cm9rZUdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOwot
CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVjdChyZWN0LCBwYWludCk7
CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRl
eHRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
UGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDQ1NTYwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01OCwxNyArNTgsMTcgQEAgc3RydWN0IFBsYXRmb3JtQ29udGV4dFNraWE6OlN0YXRlIHsK
ICAgICAvLyBDb21tb24gc2hhZGVyIHN0YXRlLgogICAgIGZsb2F0IG1fYWxwaGE7CiAgICAgU2tY
ZmVybW9kZTo6TW9kZSBtX3hmZXJNb2RlOwotICAgIFNrU2hhZGVyKiBtX2dyYWRpZW50OwotICAg
IFNrU2hhZGVyKiBtX3BhdHRlcm47CiAgICAgYm9vbCBtX3VzZUFudGlhbGlhc2luZzsKICAgICBT
a0RyYXdMb29wZXIqIG1fbG9vcGVyOwogCiAgICAgLy8gRmlsbC4KICAgICBTa0NvbG9yIG1fZmls
bENvbG9yOworICAgIFNrU2hhZGVyKiBtX2ZpbGxTaGFkZXI7CiAKICAgICAvLyBTdHJva2UuCiAg
ICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGUgbV9zdHJva2VTdHlsZTsKICAgICBTa0NvbG9yIG1fc3Ry
b2tlQ29sb3I7CisgICAgU2tTaGFkZXIqIG1fc3Ryb2tlU2hhZGVyOwogICAgIGZsb2F0IG1fc3Ry
b2tlVGhpY2tuZXNzOwogICAgIGludCBtX2Rhc2hSYXRpbzsgIC8vIFJhdGlvIG9mIHRoZSBsZW5n
dGggb2YgYSBkYXNoIHRvIGl0cyB3aWR0aC4KICAgICBmbG9hdCBtX21pdGVyTGltaXQ7CkBAIC05
OSwxNCArOTksMTQgQEAgcHJpdmF0ZToKIFBsYXRmb3JtQ29udGV4dFNraWE6OlN0YXRlOjpTdGF0
ZSgpCiAgICAgOiBtX2FscGhhKDEpCiAgICAgLCBtX3hmZXJNb2RlKFNrWGZlcm1vZGU6OmtTcmNP
dmVyX01vZGUpCi0gICAgLCBtX2dyYWRpZW50KDApCi0gICAgLCBtX3BhdHRlcm4oMCkKICAgICAs
IG1fdXNlQW50aWFsaWFzaW5nKHRydWUpCiAgICAgLCBtX2xvb3BlcigwKQogICAgICwgbV9maWxs
Q29sb3IoMHhGRjAwMDAwMCkKKyAgICAsIG1fZmlsbFNoYWRlcigwKQogICAgICwgbV9zdHJva2VT
dHlsZShXZWJDb3JlOjpTb2xpZFN0cm9rZSkKICAgICAsIG1fc3Ryb2tlQ29sb3IoV2ViQ29yZTo6
Q29sb3I6OmJsYWNrKQogICAgICwgbV9zdHJva2VUaGlja25lc3MoMCkKKyAgICAsIG1fc3Ryb2tl
U2hhZGVyKDApCiAgICAgLCBtX2Rhc2hSYXRpbygzKQogICAgICwgbV9taXRlckxpbWl0KDQpCiAg
ICAgLCBtX2xpbmVDYXAoU2tQYWludDo6a0RlZmF1bHRfQ2FwKQpAQCAtMTE5LDE0ICsxMTksMTQg
QEAgUGxhdGZvcm1Db250ZXh0U2tpYTo6U3RhdGU6OlN0YXRlKCkKIFBsYXRmb3JtQ29udGV4dFNr
aWE6OlN0YXRlOjpTdGF0ZShjb25zdCBTdGF0ZSYgb3RoZXIpCiAgICAgOiBtX2FscGhhKG90aGVy
Lm1fYWxwaGEpCiAgICAgLCBtX3hmZXJNb2RlKG90aGVyLm1feGZlck1vZGUpCi0gICAgLCBtX2dy
YWRpZW50KG90aGVyLm1fZ3JhZGllbnQpCi0gICAgLCBtX3BhdHRlcm4ob3RoZXIubV9wYXR0ZXJu
KQogICAgICwgbV91c2VBbnRpYWxpYXNpbmcob3RoZXIubV91c2VBbnRpYWxpYXNpbmcpCiAgICAg
LCBtX2xvb3BlcihvdGhlci5tX2xvb3BlcikKICAgICAsIG1fZmlsbENvbG9yKG90aGVyLm1fZmls
bENvbG9yKQorICAgICwgbV9maWxsU2hhZGVyKG90aGVyLm1fZmlsbFNoYWRlcikKICAgICAsIG1f
c3Ryb2tlU3R5bGUob3RoZXIubV9zdHJva2VTdHlsZSkKICAgICAsIG1fc3Ryb2tlQ29sb3Iob3Ro
ZXIubV9zdHJva2VDb2xvcikKICAgICAsIG1fc3Ryb2tlVGhpY2tuZXNzKG90aGVyLm1fc3Ryb2tl
VGhpY2tuZXNzKQorICAgICwgbV9zdHJva2VTaGFkZXIob3RoZXIubV9zdHJva2VTaGFkZXIpCiAg
ICAgLCBtX2Rhc2hSYXRpbyhvdGhlci5tX2Rhc2hSYXRpbykKICAgICAsIG1fbWl0ZXJMaW1pdChv
dGhlci5tX21pdGVyTGltaXQpCiAgICAgLCBtX2xpbmVDYXAob3RoZXIubV9saW5lQ2FwKQpAQCAt
MTQxLDE2ICsxNDEsMTYgQEAgUGxhdGZvcm1Db250ZXh0U2tpYTo6U3RhdGU6OlN0YXRlKGNvbnN0
IAogICAgIC8vIFVwIHRoZSByZWYgY291bnQgb2YgdGhlc2UuIHNhdmVSZWYgZG9lcyBub3RoaW5n
IGlmICd0aGlzJyBpcyBOVUxMLgogICAgIG1fbG9vcGVyLT5zYWZlUmVmKCk7CiAgICAgbV9kYXNo
LT5zYWZlUmVmKCk7Ci0gICAgbV9ncmFkaWVudC0+c2FmZVJlZigpOwotICAgIG1fcGF0dGVybi0+
c2FmZVJlZigpOworICAgIG1fZmlsbFNoYWRlci0+c2FmZVJlZigpOworICAgIG1fc3Ryb2tlU2hh
ZGVyLT5zYWZlUmVmKCk7CiB9CiAKIFBsYXRmb3JtQ29udGV4dFNraWE6OlN0YXRlOjp+U3RhdGUo
KQogewogICAgIG1fbG9vcGVyLT5zYWZlVW5yZWYoKTsKICAgICBtX2Rhc2gtPnNhZmVVbnJlZigp
OwotICAgIG1fZ3JhZGllbnQtPnNhZmVVbnJlZigpOwotICAgIG1fcGF0dGVybi0+c2FmZVVucmVm
KCk7CisgICAgbV9maWxsU2hhZGVyLT5zYWZlVW5yZWYoKTsKKyAgICBtX3N0cm9rZVNoYWRlci0+
c2FmZVVucmVmKCk7CiB9CiAKIFNrQ29sb3IgUGxhdGZvcm1Db250ZXh0U2tpYTo6U3RhdGU6OmFw
cGx5QWxwaGEoU2tDb2xvciBjKSBjb25zdApAQCAtMjczLDggKzI3MywxMSBAQCB2b2lkIFBsYXRm
b3JtQ29udGV4dFNraWE6OmRyYXdSZWN0KFNrUmVjCiAgICAgICAgIChtX3N0YXRlLT5tX3N0cm9r
ZUNvbG9yICYgMHhGRjAwMDAwMCkpIHsKICAgICAgICAgLy8gV2UgZG8gYSBmaWxsIG9mIGZvdXIg
cmVjdHMgdG8gc2ltdWxhdGUgdGhlIHN0cm9rZSBvZiBhIGJvcmRlci4KICAgICAgICAgU2tDb2xv
ciBvbGRGaWxsQ29sb3IgPSBtX3N0YXRlLT5tX2ZpbGxDb2xvcjsKLSAgICAgICAgaWYgKG9sZEZp
bGxDb2xvciAhPSBtX3N0YXRlLT5tX3N0cm9rZUNvbG9yKQotICAgICAgICAgICAgc2V0RmlsbENv
bG9yKG1fc3RhdGUtPm1fc3Ryb2tlQ29sb3IpOworCisgICAgICAgIC8vIHNldEZpbGxDb2xvcigp
IHdpbGwgc2V0IHRoZSBzaGFkZXIgdG8gTlVMTCwgc28gc2F2ZSBhIHJlZiB0byBpdCBub3cuIAor
ICAgICAgICBTa1NoYWRlciogb2xkRmlsbFNoYWRlciA9IG1fc3RhdGUtPm1fZmlsbFNoYWRlcjsK
KyAgICAgICAgb2xkRmlsbFNoYWRlci0+c2FmZVJlZigpOworICAgICAgICBzZXRGaWxsQ29sb3Io
bV9zdGF0ZS0+bV9zdHJva2VDb2xvcik7CiAgICAgICAgIHNldHVwUGFpbnRGb3JGaWxsaW5nKCZw
YWludCk7CiAgICAgICAgIFNrUmVjdCB0b3BCb3JkZXIgPSB7IHJlY3QuZkxlZnQsIHJlY3QuZlRv
cCwgcmVjdC5mUmlnaHQsIHJlY3QuZlRvcCArIDEgfTsKICAgICAgICAgY2FudmFzKCktPmRyYXdS
ZWN0KHRvcEJvcmRlciwgcGFpbnQpOwpAQCAtMjg0LDggKzI4Nyw5IEBAIHZvaWQgUGxhdGZvcm1D
b250ZXh0U2tpYTo6ZHJhd1JlY3QoU2tSZWMKICAgICAgICAgY2FudmFzKCktPmRyYXdSZWN0KGxl
ZnRCb3JkZXIsIHBhaW50KTsKICAgICAgICAgU2tSZWN0IHJpZ2h0Qm9yZGVyID0geyByZWN0LmZS
aWdodCAtIDEsIHJlY3QuZlRvcCArIDEsIHJlY3QuZlJpZ2h0LCByZWN0LmZCb3R0b20gLSAxIH07
CiAgICAgICAgIGNhbnZhcygpLT5kcmF3UmVjdChyaWdodEJvcmRlciwgcGFpbnQpOwotICAgICAg
ICBpZiAob2xkRmlsbENvbG9yICE9IG1fc3RhdGUtPm1fc3Ryb2tlQ29sb3IpCi0gICAgICAgICAg
ICBzZXRGaWxsQ29sb3Iob2xkRmlsbENvbG9yKTsKKyAgICAgICAgc2V0RmlsbENvbG9yKG9sZEZp
bGxDb2xvcik7CisgICAgICAgIHNldEZpbGxTaGFkZXIob2xkRmlsbFNoYWRlcik7CisgICAgICAg
IG9sZEZpbGxTaGFkZXItPnNhZmVVbnJlZigpOwogICAgIH0KIH0KIApAQCAtMzAxLDE3ICszMDUs
MTMgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXR1cFBhaW50Q29tbQogICAgIHBhaW50
LT5zZXRBbnRpQWxpYXMobV9zdGF0ZS0+bV91c2VBbnRpYWxpYXNpbmcpOwogICAgIHBhaW50LT5z
ZXRYZmVybW9kZU1vZGUobV9zdGF0ZS0+bV94ZmVyTW9kZSk7CiAgICAgcGFpbnQtPnNldExvb3Bl
cihtX3N0YXRlLT5tX2xvb3Blcik7Ci0KLSAgICBpZiAobV9zdGF0ZS0+bV9ncmFkaWVudCkKLSAg
ICAgICAgcGFpbnQtPnNldFNoYWRlcihtX3N0YXRlLT5tX2dyYWRpZW50KTsKLSAgICBlbHNlIGlm
IChtX3N0YXRlLT5tX3BhdHRlcm4pCi0gICAgICAgIHBhaW50LT5zZXRTaGFkZXIobV9zdGF0ZS0+
bV9wYXR0ZXJuKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXR1cFBhaW50Rm9y
RmlsbGluZyhTa1BhaW50KiBwYWludCkgY29uc3QKIHsKICAgICBzZXR1cFBhaW50Q29tbW9uKHBh
aW50KTsKICAgICBwYWludC0+c2V0Q29sb3IobV9zdGF0ZS0+YXBwbHlBbHBoYShtX3N0YXRlLT5t
X2ZpbGxDb2xvcikpOworICAgIHBhaW50LT5zZXRTaGFkZXIobV9zdGF0ZS0+bV9maWxsU2hhZGVy
KTsKIH0KIAogZmxvYXQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0dXBQYWludEZvclN0cm9raW5n
KFNrUGFpbnQqIHBhaW50LCBTa1JlY3QqIHJlY3QsIGludCBsZW5ndGgpIGNvbnN0CkBAIC0zMjAs
NiArMzIwLDcgQEAgZmxvYXQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0dXBQYWludEZvcgogICAg
IGZsb2F0IHdpZHRoID0gbV9zdGF0ZS0+bV9zdHJva2VUaGlja25lc3M7CiAKICAgICBwYWludC0+
c2V0Q29sb3IobV9zdGF0ZS0+YXBwbHlBbHBoYShtX3N0YXRlLT5tX3N0cm9rZUNvbG9yKSk7Cisg
ICAgcGFpbnQtPnNldFNoYWRlcihtX3N0YXRlLT5tX3N0cm9rZVNoYWRlcik7CiAgICAgcGFpbnQt
PnNldFN0eWxlKFNrUGFpbnQ6OmtTdHJva2VfU3R5bGUpOwogICAgIHBhaW50LT5zZXRTdHJva2VX
aWR0aChTa0Zsb2F0VG9TY2FsYXIod2lkdGgpKTsKICAgICBwYWludC0+c2V0U3Ryb2tlQ2FwKG1f
c3RhdGUtPm1fbGluZUNhcCk7CkBAIC0zOTAsNiArMzkxLDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjpzZXRYZmVybW9kZU1vZAogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRGaWxs
Q29sb3IoU2tDb2xvciBjb2xvcikKIHsKICAgICBtX3N0YXRlLT5tX2ZpbGxDb2xvciA9IGNvbG9y
OworICAgIHNldEZpbGxTaGFkZXIoTlVMTCk7CiB9CiAKIFNrRHJhd0xvb3BlciogUGxhdGZvcm1D
b250ZXh0U2tpYTo6Z2V0RHJhd0xvb3BlcigpIGNvbnN0CkBAIC00MTAsNiArNDEyLDcgQEAgdm9p
ZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRTdHJva2VTdHlsZQogdm9pZCBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjpzZXRTdHJva2VDb2xvcihTa0NvbG9yIHN0cm9rZUNvbG9yKQogewogICAgIG1fc3Rh
dGUtPm1fc3Ryb2tlQ29sb3IgPSBzdHJva2VDb2xvcjsKKyAgICBzZXRTdHJva2VTaGFkZXIoTlVM
TCk7CiB9CiAKIGZsb2F0IFBsYXRmb3JtQ29udGV4dFNraWE6OmdldFN0cm9rZVRoaWNrbmVzcygp
IGNvbnN0CkBAIC00MjIsNiArNDI1LDE1IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0
U3Ryb2tlVGhpY2sKICAgICBtX3N0YXRlLT5tX3N0cm9rZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsK
IH0KIAordm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRTdHJva2VTaGFkZXIoU2tTaGFkZXIq
IHN0cm9rZVNoYWRlcikKK3sKKyAgICBpZiAoc3Ryb2tlU2hhZGVyICE9IG1fc3RhdGUtPm1fc3Ry
b2tlU2hhZGVyKSB7CisgICAgICAgIG1fc3RhdGUtPm1fc3Ryb2tlU2hhZGVyLT5zYWZlVW5yZWYo
KTsKKyAgICAgICAgbV9zdGF0ZS0+bV9zdHJva2VTaGFkZXIgPSBzdHJva2VTaGFkZXI7CisgICAg
ICAgIG1fc3RhdGUtPm1fc3Ryb2tlU2hhZGVyLT5zYWZlUmVmKCk7CisgICAgfQorfQorCiBpbnQg
UGxhdGZvcm1Db250ZXh0U2tpYTo6Z2V0VGV4dERyYXdpbmdNb2RlKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9zdGF0ZS0+bV90ZXh0RHJhd2luZ01vZGU7CkBAIC00ODAsMTkgKzQ5MiwxMiBAQCB2
b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldEZpbGxSdWxlKFNrCiAgICAgbV9wYXRoLnNldEZp
bGxUeXBlKGZyKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRHcmFkaWVudChT
a1NoYWRlciogZ3JhZGllbnQpCi17Ci0gICAgaWYgKGdyYWRpZW50ICE9IG1fc3RhdGUtPm1fZ3Jh
ZGllbnQpIHsKLSAgICAgICAgbV9zdGF0ZS0+bV9ncmFkaWVudC0+c2FmZVVucmVmKCk7Ci0gICAg
ICAgIG1fc3RhdGUtPm1fZ3JhZGllbnQgPSBncmFkaWVudDsKLSAgICB9Ci19Ci0KLXZvaWQgUGxh
dGZvcm1Db250ZXh0U2tpYTo6c2V0UGF0dGVybihTa1NoYWRlciogcGF0dGVybikKK3ZvaWQgUGxh
dGZvcm1Db250ZXh0U2tpYTo6c2V0RmlsbFNoYWRlcihTa1NoYWRlciogZmlsbFNoYWRlcikKIHsK
LSAgICBpZiAocGF0dGVybiAhPSBtX3N0YXRlLT5tX3BhdHRlcm4pIHsKLSAgICAgICAgbV9zdGF0
ZS0+bV9wYXR0ZXJuLT5zYWZlVW5yZWYoKTsKLSAgICAgICAgbV9zdGF0ZS0+bV9wYXR0ZXJuID0g
cGF0dGVybjsKKyAgICBpZiAoZmlsbFNoYWRlciAhPSBtX3N0YXRlLT5tX2ZpbGxTaGFkZXIpIHsK
KyAgICAgICAgbV9zdGF0ZS0+bV9maWxsU2hhZGVyLT5zYWZlVW5yZWYoKTsKKyAgICAgICAgbV9z
dGF0ZS0+bV9maWxsU2hhZGVyID0gZmlsbFNoYWRlcjsKKyAgICAgICAgbV9zdGF0ZS0+bV9maWxs
U2hhZGVyLT5zYWZlUmVmKCk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgJKHJldmlzaW9uIDQ1
NTYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNr
aWEuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDEzICsxMTcsMTMgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0RmlsbFJ1bGUoU2tQYXRoOjpGaWxsVHlwZSk7CiAgICAgdm9pZCBzZXRYZmVybW9kZU1v
ZGUoU2tYZmVybW9kZTo6TW9kZSk7CiAgICAgdm9pZCBzZXRGaWxsQ29sb3IoU2tDb2xvcik7Cisg
ICAgdm9pZCBzZXRGaWxsU2hhZGVyKFNrU2hhZGVyKik7CiAgICAgdm9pZCBzZXRTdHJva2VTdHls
ZShXZWJDb3JlOjpTdHJva2VTdHlsZSk7CiAgICAgdm9pZCBzZXRTdHJva2VDb2xvcihTa0NvbG9y
KTsKICAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpOworICAgIHZv
aWQgc2V0U3Ryb2tlU2hhZGVyKFNrU2hhZGVyKik7CiAgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01v
ZGUoaW50IG1vZGUpOwogICAgIHZvaWQgc2V0VXNlQW50aWFsaWFzaW5nKGJvb2wgZW5hYmxlKTsK
LSAgICB2b2lkIHNldEdyYWRpZW50KFNrU2hhZGVyKik7Ci0gICAgdm9pZCBzZXRQYXR0ZXJuKFNr
U2hhZGVyKik7CiAgICAgdm9pZCBzZXREYXNoUGF0aEVmZmVjdChTa0Rhc2hQYXRoRWZmZWN0Kik7
CiAKICAgICBTa0RyYXdMb29wZXIqIGdldERyYXdMb29wZXIoKSBjb25zdDsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFGb250V2luLmNwcAkocmV2aXNpb24g
NDU1NjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsMjEgKzI2NywxMSBAQCBzdGF0aWMgYm9vbCBza2lhRHJh
d1RleHQoSEZPTlQgaGZvbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgU2tDYW52YXMqIGNh
bnZhcywKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa1BvaW50JiBwb2ludCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBTa1BhaW50KiBwYWludCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtYXRpb25NYXRyaXgs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgR3JhZGllbnQqIGdyYWRpZW50LAotICAgICAgICAg
ICAgICAgICAgICAgICAgIFBhdHRlcm4qIHBhdHRlcm4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgV09SRCogZ2x5cGhzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlu
dCogYWR2YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR09GRlNFVCogb2Zm
c2V0cywKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtR2x5cGhzKQogewotICAgIFNr
U2hhZGVyKiBzaGFkZXIgPSBOVUxMOwotICAgIGlmIChncmFkaWVudCkKLSAgICAgICAgc2hhZGVy
ID0gZ3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKTsKLSAgICBlbHNlIGlmIChwYXR0ZXJuKQot
ICAgICAgICBzaGFkZXIgPSBwYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4odHJhbnNmb3Jt
YXRpb25NYXRyaXgpOwotCi0gICAgcGFpbnQtPnNldFNoYWRlcihzaGFkZXIpOwogICAgIGZsb2F0
IHggPSBwb2ludC5mWCwgeSA9IHBvaW50LmZZOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
dW1HbHlwaHM7IGkrKykgewpAQCAtMzI2LDE0ICszMTYsNyBAQCBib29sIHBhaW50U2tpYVRleHQo
R3JhcGhpY3NDb250ZXh0KiBjb250CiAgICAgYm9vbCBkaWRGaWxsID0gZmFsc2U7CiAKICAgICBp
ZiAoKHRleHRNb2RlICYgY1RleHRGaWxsKSAmJiBTa0NvbG9yR2V0QShwYWludC5nZXRDb2xvcigp
KSkgewotICAgICAgICBHcmFkaWVudCogZmlsbEdyYWRpZW50ID0gMDsKLSAgICAgICAgUGF0dGVy
biogZmlsbFBhdHRlcm4gPSAwOwotICAgICAgICBpZiAoY29udGV4dC0+ZmlsbENvbG9yU3BhY2Uo
KSA9PSBHcmFkaWVudENvbG9yU3BhY2UpCi0gICAgICAgICAgICBmaWxsR3JhZGllbnQgPSBjb250
ZXh0LT5maWxsR3JhZGllbnQoKTsKLSAgICAgICAgZWxzZSBpZiAoY29udGV4dC0+ZmlsbENvbG9y
U3BhY2UoKSA9PSBQYXR0ZXJuQ29sb3JTcGFjZSkKLSAgICAgICAgICAgIGZpbGxQYXR0ZXJuID0g
Y29udGV4dC0+ZmlsbFBhdHRlcm4oKTsKICAgICAgICAgaWYgKCFza2lhRHJhd1RleHQoaGZvbnQs
IGRjLCBwbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpLCAqb3JpZ2luLCAmcGFpbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldENUTSgpLCBmaWxsR3JhZGllbnQsIGZpbGxQ
YXR0ZXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2x5cGhzWzBdLCAmYWR2YW5jZXNb
MF0sICZvZmZzZXRzWzBdLCBudW1HbHlwaHMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBkaWRGaWxsID0gdHJ1ZTsKQEAgLTM2MCwxNCArMzQzLDcgQEAgYm9vbCBwYWludFNr
aWFUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udAogICAgICAgICAgICAgcGFpbnQuc2V0TG9vcGVy
KDApLT5zYWZlVW5yZWYoKTsKICAgICAgICAgfQogCi0gICAgICAgIEdyYWRpZW50KiBzdHJva2VH
cmFkaWVudCA9IDA7Ci0gICAgICAgIFBhdHRlcm4qIHN0cm9rZVBhdHRlcm4gPSAwOwotICAgICAg
ICBpZiAoY29udGV4dC0+c3Ryb2tlQ29sb3JTcGFjZSgpID09IEdyYWRpZW50Q29sb3JTcGFjZSkK
LSAgICAgICAgICAgIHN0cm9rZUdyYWRpZW50ID0gY29udGV4dC0+c3Ryb2tlR3JhZGllbnQoKTsK
LSAgICAgICAgZWxzZSBpZiAoY29udGV4dC0+c3Ryb2tlQ29sb3JTcGFjZSgpID09IFBhdHRlcm5D
b2xvclNwYWNlKQotICAgICAgICAgICAgc3Ryb2tlUGF0dGVybiA9IGNvbnRleHQtPnN0cm9rZVBh
dHRlcm4oKTsKICAgICAgICAgaWYgKCFza2lhRHJhd1RleHQoaGZvbnQsIGRjLCBwbGF0Zm9ybUNv
bnRleHQtPmNhbnZhcygpLCAqb3JpZ2luLCAmcGFpbnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmdldENUTSgpLCBzdHJva2VHcmFkaWVudCwgc3Ryb2tlUGF0dGVybiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoc1swXSwgJmFkdmFuY2VzWzBdLCAmb2Zmc2V0
c1swXSwgbnVtR2x5cGhzKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkluZGV4
OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXIuY3BwCShyZXZpc2lvbiA0NTU2MCkK
KysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTkyLDggKzE5Miw4IEBAIHZvaWQgU1ZHUGFpbnRTZXJ2ZXI6OnRlYXJkb3duKEdyYXBo
aWNzQ28KICAgICAvLyBhZGRlZCBiYWNrIHRvIHRoZSBjb250ZXh0IGFmdGVyIGZpbGxpbmcuIFRo
aXMgaXMgYmVjYXVzZSBpbnRlcm5hbGx5IGl0CiAgICAgLy8gY2FsbHMgQ0dDb250ZXh0RmlsbFBh
dGgoKSB3aGljaCBjbG9zZXMgdGhlIHBhdGguCiAgICAgY29udGV4dC0+YmVnaW5QYXRoKCk7Ci0g
ICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnNldEdyYWRpZW50KDApOwotICAgIGNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXRQYXR0ZXJuKDApOworICAgIGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLT5zZXRGaWxsU2hhZGVyKDApOworICAgIGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5zZXRTdHJva2VTaGFkZXIoMCk7CiB9CiAjZWxzZQogdm9pZCBTVkdQYWludFNlcnZl
cjo6dGVhcmRvd24oR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1Bh
aW50VGFyZ2V0VHlwZSwgYm9vbCkgY29uc3QK
</data>
<flag name="review"
          id="16788"
          type_id="1"
          status="+"
          setter="fishd"
    />
          </attachment>
      

    </bug>

</bugzilla>