<?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>31196</bug_id>
          
          <creation_ts>2009-11-05 19:49:18 -0800</creation_ts>
          <short_desc>Implement -webkit-color-correction for CSS colors</short_desc>
          <delta_ts>2013-11-22 15:20:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>124795</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          <cc>bdakin</cc>
    
    <cc>krit</cc>
    
    <cc>phiw2</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>161051</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-11-05 19:49:18 -0800</bug_when>
    <thetext>At TPAC this week the CSS WG decided to re-add a color correction property to the specification. The property is called color-correction and it is to apply on a per-element basis to all CSS colors and untagged images. It has the following input parameters:

default: The UA should do whatever correction (or lack thereof) it would do if this property was not specified at all.
sRGB: Correct colors from the sRGB color space.

This bug is tracking the work to implement this new property and turn it on for CSS colors. I will file another bug tracking the work to enable it for untagged images.

&lt;rdar://problem/7059710&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161052</commentid>
    <comment_count>1</comment_count>
      <attachid>42622</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-11-05 19:56:39 -0800</bug_when>
    <thetext>Created attachment 42622
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161072</commentid>
    <comment_count>2</comment_count>
      <attachid>42622</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-11-05 21:59:22 -0800</bug_when>
    <thetext>Comment on attachment 42622
Patch

&gt; +CSSColorSpace GraphicsContext::cgToCSSColorSpace(ColorSpace colorSpace)
&gt; +{
&gt; +    if (colorSpace == sRGBColorSpace)
&gt; +        return sRGB;
&gt; +    return Default;
&gt; +}
&gt; +
&gt; +ColorSpace GraphicsContext::cssToCGColorSpace(CSSColorSpace colorSpace)
&gt; +{
&gt; +    if (colorSpace == sRGB)
&gt; +        return sRGBColorSpace;
&gt; +    return DeviceRGBColorSpace;
&gt; +}

Using switch() statements here would be good because then if someone added new color space enum values, it would give a warning.

&gt; Index: WebCore/platform/graphics/GraphicsContext.h
&gt; ===================================================================

&gt;      // a fill or stroke is using a gradient or pattern instead of a solid color.
&gt;      // https://bugs.webkit.org/show_bug.cgi?id=20558
&gt;      enum ColorSpace {
&gt; -        SolidColorSpace,
&gt; +        DeviceRGBColorSpace,
&gt; +        sRGBColorSpace,
&gt;          PatternColorSpace,
&gt;          GradientColorSpace

This is a bit confusing; why is sRGBColorSpace a peer of PatternColorSpace and GradientColorSpace? Wouldn&apos;t you want to be able to say that a pattern or gradient is in sRGB or deviceRGB?

I think the existing ColorSpace enum is misnamed; it&apos;s more like a &quot;brush&quot;. You may need Device/sRGB in a new enum.

&gt; -        void setStrokeColor(const Color&amp;);
&gt; +        void setStrokeColor(const Color&amp;, CSSColorSpace colorSpace = Default);

Rather than all these changes to GraphicsContext methods, maybe it make more sense to push a color space onto the graphics context and have it be part of the state?

&gt; Index: WebCore/platform/graphics/cg/GraphicsContextCG.cpp
&gt; ===================================================================

&gt; +static void setCGFillColor(CGContextRef context, const Color&amp; color, ColorSpace colorSpace)
&gt; +{    
&gt; +    CGFloat components[4];
&gt; +    color.getRGBA(components[0], components[1], components[2], components[3]);
&gt; +
&gt; +    CGColorRef cgColor;
&gt; +    if (colorSpace == sRGBColorSpace)
&gt; +        cgColor = CGColorCreate(sRGBColorSpaceRef(), components);
&gt; +    else
&gt; +        cgColor = CGColorCreate(deviceRGBColorSpaceRef(), components);
&gt; +
&gt; +    CGContextSetFillColorWithColor(context, cgColor);

This is leaking a CGColorRef.

&gt; +static void setCGStrokeColor(CGContextRef context, const Color&amp; color, ColorSpace colorSpace)
&gt; +{
&gt; +    CGFloat components[4];
&gt; +    color.getRGBA(components[0], components[1], components[2], components[3]);
&gt; +
&gt; +    CGColorRef cgColor;
&gt; +    if (colorSpace == sRGBColorSpace)
&gt; +        cgColor = CGColorCreate(sRGBColorSpaceRef(), components);
&gt; +    else
&gt; +        cgColor = CGColorCreate(deviceRGBColorSpaceRef(), components);
&gt; +
&gt; +    CGContextSetStrokeColorWithColor(context, cgColor);

Ditto.

I may have missed them, but:
* Where are untagged images tagged with sRGB?
* What about &lt;canvas&gt;, WebGL, gradients, etc?

r- for the leaks, for now, but this is a good start. Maybe talked to dhyatt about the graphics context changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161104</commentid>
    <comment_count>3</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-11-06 00:47:43 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 42622 [details])
&gt; &gt; +CSSColorSpace GraphicsContext::cgToCSSColorSpace(ColorSpace colorSpace)
&gt; &gt; +{
&gt; &gt; +    if (colorSpace == sRGBColorSpace)
&gt; &gt; +        return sRGB;
&gt; &gt; +    return Default;
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +ColorSpace GraphicsContext::cssToCGColorSpace(CSSColorSpace colorSpace)
&gt; &gt; +{
&gt; &gt; +    if (colorSpace == sRGB)
&gt; &gt; +        return sRGBColorSpace;
&gt; &gt; +    return DeviceRGBColorSpace;
&gt; &gt; +}
&gt; 
&gt; Using switch() statements here would be good because then if someone added new
&gt; color space enum values, it would give a warning.
&gt; 

I wrote these as if-statements since ColorSpace has some values (Gradient and Pattern) that are ignored here. More on that later. 

&gt; &gt; Index: WebCore/platform/graphics/GraphicsContext.h
&gt; &gt; ===================================================================
&gt; 
&gt; &gt;      // a fill or stroke is using a gradient or pattern instead of a solid color.
&gt; &gt;      // https://bugs.webkit.org/show_bug.cgi?id=20558
&gt; &gt;      enum ColorSpace {
&gt; &gt; -        SolidColorSpace,
&gt; &gt; +        DeviceRGBColorSpace,
&gt; &gt; +        sRGBColorSpace,
&gt; &gt;          PatternColorSpace,
&gt; &gt;          GradientColorSpace
&gt; 
&gt; This is a bit confusing; why is sRGBColorSpace a peer of PatternColorSpace and
&gt; GradientColorSpace? Wouldn&apos;t you want to be able to say that a pattern or
&gt; gradient is in sRGB or deviceRGB?
&gt; 
&gt; I think the existing ColorSpace enum is misnamed; it&apos;s more like a &quot;brush&quot;. You
&gt; may need Device/sRGB in a new enum.

I have to admit that I found this confusing too, and really I still do. But it seems like something confusing about CG that is just replicated in our code. The following is an actual line from GraphicsContextCG.cpp:

    CGContextSetStrokeColorSpace(cgContext, patternSpace.get());

I don&apos;t understand why CG treats patterns and spaces like sRGB the same, but it appears they do. Maybe someone on the team who knows more about CG could enlighten us? But given that fact that CG treats patternSpace as a ColorSpace, this enum doesn&apos;t seem crazy. Mostly I was just trying to honor the existing code and trust that there was logic to it. Of course it&apos;s possible that is too trusting.

&gt; 
&gt; &gt; -        void setStrokeColor(const Color&amp;);
&gt; &gt; +        void setStrokeColor(const Color&amp;, CSSColorSpace colorSpace = Default);
&gt; 
&gt; Rather than all these changes to GraphicsContext methods, maybe it make more
&gt; sense to push a color space onto the graphics context and have it be part of
&gt; the state?
&gt; 

The color space -- just like color itself -- was already a part of the state and remains so with this patch, if you look at GraphicsContext::setFillColor(), you will see:

-     m_common-&gt;state.fillColorSpace = SolidColorSpace;
+    m_common-&gt;state.fillColorSpace = cssToCGColorSpace(colorSpace);

Even though color is a part of the state as well, many functions on GraphicsContext accept a Color as a parameter and ignore the color on the state. All of those functions now need to also take a ColorSpace and ignore the state&apos;s color space. I think this part of my patch is correct.

&gt; &gt; Index: WebCore/platform/graphics/cg/GraphicsContextCG.cpp
&gt; &gt; ===================================================================
&gt; 
&gt; &gt; +static void setCGFillColor(CGContextRef context, const Color&amp; color, ColorSpace colorSpace)
&gt; &gt; +{    
&gt; &gt; +    CGFloat components[4];
&gt; &gt; +    color.getRGBA(components[0], components[1], components[2], components[3]);
&gt; &gt; +
&gt; &gt; +    CGColorRef cgColor;
&gt; &gt; +    if (colorSpace == sRGBColorSpace)
&gt; &gt; +        cgColor = CGColorCreate(sRGBColorSpaceRef(), components);
&gt; &gt; +    else
&gt; &gt; +        cgColor = CGColorCreate(deviceRGBColorSpaceRef(), components);
&gt; &gt; +
&gt; &gt; +    CGContextSetFillColorWithColor(context, cgColor);
&gt; 
&gt; This is leaking a CGColorRef.

Will fix and re-post a patch tomorrow.
 
&gt; 
&gt; &gt; +static void setCGStrokeColor(CGContextRef context, const Color&amp; color, ColorSpace colorSpace)
&gt; &gt; +{
&gt; &gt; +    CGFloat components[4];
&gt; &gt; +    color.getRGBA(components[0], components[1], components[2], components[3]);
&gt; &gt; +
&gt; &gt; +    CGColorRef cgColor;
&gt; &gt; +    if (colorSpace == sRGBColorSpace)
&gt; &gt; +        cgColor = CGColorCreate(sRGBColorSpaceRef(), components);
&gt; &gt; +    else
&gt; &gt; +        cgColor = CGColorCreate(deviceRGBColorSpaceRef(), components);
&gt; &gt; +
&gt; &gt; +    CGContextSetStrokeColorWithColor(context, cgColor);
&gt; 
&gt; Ditto.
&gt; 

Will fix and re-post a patch tomorrow.

&gt; I may have missed them, but:
&gt; * Where are untagged images tagged with sRGB?
&gt; * What about &lt;canvas&gt;, WebGL, gradients, etc?

This patch is big enough as it is that I wanted to keep it as simple as possible. As you see, I titled the bug &quot;Implement -webkit-color-correction for CSS colors.&quot; The Radar version tracks the whole property, and I won&apos;t move it to &quot;integrate&quot; until we have more implemented. I plan to file follow-up bugs here for the remaining features.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161225</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-11-06 12:36:08 -0800</bug_when>
    <thetext>See also bug 20558.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161313</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-11-07 00:18:21 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=42622) [details]
&gt; Patch

&gt; Index: WebCore/css/CSSValueKeywords.in
&gt; ===================================================================
&gt; --- WebCore/css/CSSValueKeywords.in	(revision 50570)
&gt; +++ WebCore/css/CSSValueKeywords.in	(working copy)
&gt; @@ -638,3 +638,7 @@ subpixel-antialiased
&gt;  optimizeSpeed
&gt;  optimizeLegibility
&gt;  geometricPrecision
&gt; +
&gt; +# -webkit-color-correction
&gt; +#default
&gt; +sRGB
&gt; Index: WebCore/css/SVGCSSValueKeywords.in
&gt; ===================================================================
&gt; --- WebCore/css/SVGCSSValueKeywords.in	(revision 50570)
&gt; +++ WebCore/css/SVGCSSValueKeywords.in	(working copy)
&gt; @@ -183,7 +183,7 @@ new
&gt;  # CSS_PROP_STOP_OPACITY
&gt;  # CSS_PROP_COLOR_INTERPOLATION
&gt;  #auto
&gt; -sRGB
&gt; +#sRGB
&gt;  linearRGB

Does switching the color-space on SVG via CSS still work after this changes? (We&apos;ll need the switching  at least for masking and filtering)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161315</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-11-07 00:25:28 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=42622) [details]
&gt; Patch

Can we find another name for cssToCGColorSpace and cgToCSSColorSpace since GraphicsContext is the platform-independent code? :-) Mabe default or deviceColorSpace like on ImageBuffer.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161667</commentid>
    <comment_count>7</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-11-09 11:26:18 -0800</bug_when>
    <thetext>Hi Dirk,

It will still work for SVG. Also, I noticed that I had named those functions in a very CG-centric way myself, and I changed them in my working patch. Hopefully I&apos;ll have it uploaded today.

-Beth</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161929</commentid>
    <comment_count>8</comment_count>
      <attachid>42846</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-11-09 19:45:55 -0800</bug_when>
    <thetext>Created attachment 42846
New Patch

New and improved patch! This patch fixes the leaks Simon found, is built on top of the newly cleaned-up GraphicsContext, uses a single enum stored in it&apos;s own header for CSS and GraphicsContext (platform/graphics/ColorSpace.h), requires callers of GraphicsContext functions to provide ColorSpaces rather than sneaking in using defaults (per Darin&apos;s request), and attempts to keep other ports building.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162150</commentid>
    <comment_count>9</comment_count>
      <attachid>42846</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-10 11:49:45 -0800</bug_when>
    <thetext>Comment on attachment 42846
New Patch

Have you tested the performance impact of this yet?

&gt;      case CSSPropertyWebkitBoxSizing:
&gt;          valid_primitive = id == CSSValueBorderBox || id == CSSValueContentBox;
&gt;          break;
&gt; +    case CSSPropertyWebkitColorCorrection:
&gt; +        if (id == CSSValueSrgb || id == CSSValueDefault)
&gt; +            valid_primitive = true;
&gt; +        break;

I notice that the previous case uses just an assignment, no if statement. Is there  agood reason you chose a different size?

&gt; +    case CSSPropertyWebkitColorCorrection: {
&gt; +        if (isInherit) 
&gt; +            m_style-&gt;setColorSpace(m_parentStyle-&gt;colorSpace());
&gt; +        else if (isInitial)
&gt; +            m_style-&gt;setColorSpace(DeviceColorSpace);
&gt; +        else {
&gt; +            if (!primitiveValue)
&gt; +                return;
&gt; +            m_style-&gt;setColorSpace(*primitiveValue);
&gt; +        }
&gt; +        return;
&gt; +    }

The outer braces are not required.

&gt;          Color caretColor = Color::black;
&gt; +        ColorSpace colorSpace = DeviceColorSpace;
&gt;          Element* element = rootEditableElement();
&gt; -        if (element &amp;&amp; element-&gt;renderer())
&gt; +        if (element &amp;&amp; element-&gt;renderer()) {
&gt;              caretColor = element-&gt;renderer()-&gt;style()-&gt;color();
&gt; +            colorSpace = element-&gt;renderer()-&gt;style()-&gt;colorSpace();
&gt; +        }
&gt;  
&gt; -        p-&gt;fillRect(caret, caretColor);
&gt; +        p-&gt;fillRect(caret, caretColor, colorSpace);

Code like this really cries out for a single structure that contains both color and color space.

&gt; -    ctxt-&gt;fillRect(dstRect, color);
&gt; +    ctxt-&gt;fillRect(dstRect, color, DeviceColorSpace);

Seems to me that this already does the wrong thing for images that have a color profile. In that case, the solid color optimization needs to be color-corrected, not device. A bug, not caused by your change.

&gt; -    if (mode &amp; cTextFill &amp;&amp; fillColor != context-&gt;fillColor())
&gt; -        context-&gt;setFillColor(fillColor);
&gt; +    if (mode &amp; cTextFill &amp;&amp; (fillColor != context-&gt;fillColor()
&gt; +        || colorSpace != context-&gt;fillColorSpace()))
&gt; +        context-&gt;setFillColor(fillColor, colorSpace);

I think this would read better all on one line. And also, I think a single struct for color and color space would make this so much more readable!

&gt;  static void paintTextWithShadows(GraphicsContext* context, const Font&amp; font, const TextRun&amp; textRun, int startOffset, int endOffset, const IntPoint&amp; textOrigin, int x, int y, int w, int h, ShadowData* shadow, bool stroked)
&gt;  {
&gt;      Color fillColor = context-&gt;fillColor();
&gt; +    ColorSpace fillColorSpace = context-&gt;fillColorSpace();
&gt;      bool opaque = fillColor.alpha() == 255;
&gt;      if (!opaque)
&gt; -        context-&gt;setFillColor(Color::black);
&gt; +        context-&gt;setFillColor(Color::black, DeviceColorSpace);

I&apos;m not sure DeviceColorSpace is right for this; maybe fillColorSpace would be right. What test case would demonstrate the difference?

&gt;  // Helper functions shared by InlineTextBox / SVGRootInlineBox
&gt; -void updateGraphicsContext(GraphicsContext* context, const Color&amp; fillColor, const Color&amp; strokeColor, float strokeThickness);
&gt; +void updateGraphicsContext(GraphicsContext* context, const Color&amp; fillColor, const Color&amp; strokeColor, float strokeThickness, ColorSpace colorSpace);

The context and colorSpace argument names should not be here.

&gt; -                context-&gt;fillRoundedRect(fillRect, topLeft, topRight, bottomLeft, bottomRight, Color::black);
&gt; +                context-&gt;fillRoundedRect(fillRect, topLeft, topRight, bottomLeft, bottomRight, Color::black, DeviceColorSpace);

I think we might want to use the color space from the style here, not DeviceColorSpace.

&gt; @@ -1258,7 +1258,7 @@ void RenderBoxModelObject::paintBoxShado
&gt;  
&gt;                  if (!rectToClipOut.isEmpty())
&gt;                      context-&gt;clipOut(rectToClipOut);
&gt; -                context-&gt;fillRect(fillRect, Color::black);
&gt; +                context-&gt;fillRect(fillRect, Color::black, DeviceColorSpace);

Ditto.

&gt;              // Draw an outline rect where the image should be.
&gt;              context-&gt;setStrokeStyle(SolidStroke);
&gt; -            context-&gt;setStrokeColor(Color::lightGray);
&gt; -            context-&gt;setFillColor(Color::transparent);
&gt; +            context-&gt;setStrokeColor(Color::lightGray, DeviceColorSpace);
&gt; +            context-&gt;setFillColor(Color::transparent, DeviceColorSpace);

I think we want the style of the image element to control this rather than hard-coding DeviceColorSpace.

&gt; -    context-&gt;fillRect(absRect, Color::white);
&gt; +    context-&gt;fillRect(absRect, Color::white, DeviceColorSpace);

These corners may need to respect the color space setting for the element they are for rather than DeviceColorSpace.

&gt; +        ColorSpace colorSpace = element-&gt;renderStyle() ? element-&gt;renderStyle()-&gt;colorSpace() : DeviceColorSpace;

When would element-&gt;renderStyle() be 0? In that case, why are we sure DeviceColorSpace is right?

&gt;          [[textColor colorUsingColorSpaceName:NSDeviceRGBColorSpace] getRed:&amp;red green:&amp;green blue:&amp;blue alpha:&amp;alpha];
&gt; -        graphicsContext.setFillColor(makeRGBA(red * 255, green * 255, blue * 255, alpha * 255));
&gt; +        graphicsContext.setFillColor(makeRGBA(red * 255, green * 255, blue * 255, alpha * 255), DeviceColorSpace);

Eventually, this code should change to respect the color space in the NSColor. If it&apos;s device, then stay with device, but if it’s not, then color-correct to sRGB values.

We&apos;ve got to find a way to have more test coverage. We should have a separate test for each call site where we are passing in a color space, and some easy way to construct the tests. This might include some DumpRenderTree enhancements.

r=me as-is -- this clearly all will work fine when nobody uses the new feature

But lets add a lot more test cases, and use the test cases to drive more clarity on whether these explicit DeviceColorSpace call sites are correct. I suspect at least half of them are not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162158</commentid>
    <comment_count>10</comment_count>
      <attachid>42846</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-11-10 12:05:06 -0800</bug_when>
    <thetext>Comment on attachment 42846
New Patch

I wonder if the GraphicsContext methods that now take a ColorSpace could have a default value for the parameter, since it&apos;s almost always the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162200</commentid>
    <comment_count>11</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-11-10 13:57:55 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 42846 [details])
&gt; Have you tested the performance impact of this yet?
&gt; 
&gt; &gt;      case CSSPropertyWebkitBoxSizing:
&gt; &gt;          valid_primitive = id == CSSValueBorderBox || id == CSSValueContentBox;
&gt; &gt;          break;
&gt; &gt; +    case CSSPropertyWebkitColorCorrection:
&gt; &gt; +        if (id == CSSValueSrgb || id == CSSValueDefault)
&gt; &gt; +            valid_primitive = true;
&gt; &gt; +        break;
&gt; 
&gt; I notice that the previous case uses just an assignment, no if statement. Is
&gt; there  agood reason you chose a different size?
&gt; 

No good reason. I fixed this.

&gt; &gt; +    case CSSPropertyWebkitColorCorrection: {
&gt; &gt; +        if (isInherit) 
&gt; &gt; +            m_style-&gt;setColorSpace(m_parentStyle-&gt;colorSpace());
&gt; &gt; +        else if (isInitial)
&gt; &gt; +            m_style-&gt;setColorSpace(DeviceColorSpace);
&gt; &gt; +        else {
&gt; &gt; +            if (!primitiveValue)
&gt; &gt; +                return;
&gt; &gt; +            m_style-&gt;setColorSpace(*primitiveValue);
&gt; &gt; +        }
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; 
&gt; The outer braces are not required.
&gt; 

Fixed.

&gt; &gt;          Color caretColor = Color::black;
&gt; &gt; +        ColorSpace colorSpace = DeviceColorSpace;
&gt; &gt;          Element* element = rootEditableElement();
&gt; &gt; -        if (element &amp;&amp; element-&gt;renderer())
&gt; &gt; +        if (element &amp;&amp; element-&gt;renderer()) {
&gt; &gt;              caretColor = element-&gt;renderer()-&gt;style()-&gt;color();
&gt; &gt; +            colorSpace = element-&gt;renderer()-&gt;style()-&gt;colorSpace();
&gt; &gt; +        }
&gt; &gt;  
&gt; &gt; -        p-&gt;fillRect(caret, caretColor);
&gt; &gt; +        p-&gt;fillRect(caret, caretColor, colorSpace);
&gt; 
&gt; Code like this really cries out for a single structure that contains both color
&gt; and color space.

I agree. Did not fix for now though.

&gt; 
&gt; &gt; -    ctxt-&gt;fillRect(dstRect, color);
&gt; &gt; +    ctxt-&gt;fillRect(dstRect, color, DeviceColorSpace);
&gt; 
&gt; Seems to me that this already does the wrong thing for images that have a color
&gt; profile. In that case, the solid color optimization needs to be
&gt; color-corrected, not device. A bug, not caused by your change.
&gt; 

Huh. Good observation. I will look into this more when I work on getting this property to work with untagged images.

&gt; &gt; -    if (mode &amp; cTextFill &amp;&amp; fillColor != context-&gt;fillColor())
&gt; &gt; -        context-&gt;setFillColor(fillColor);
&gt; &gt; +    if (mode &amp; cTextFill &amp;&amp; (fillColor != context-&gt;fillColor()
&gt; &gt; +        || colorSpace != context-&gt;fillColorSpace()))
&gt; &gt; +        context-&gt;setFillColor(fillColor, colorSpace);
&gt; 
&gt; I think this would read better all on one line. And also, I think a single
&gt; struct for color and color space would make this so much more readable!
&gt; 

Fixed the first part, but not the second (yet).

&gt; &gt;  static void paintTextWithShadows(GraphicsContext* context, const Font&amp; font, const TextRun&amp; textRun, int startOffset, int endOffset, const IntPoint&amp; textOrigin, int x, int y, int w, int h, ShadowData* shadow, bool stroked)
&gt; &gt;  {
&gt; &gt;      Color fillColor = context-&gt;fillColor();
&gt; &gt; +    ColorSpace fillColorSpace = context-&gt;fillColorSpace();
&gt; &gt;      bool opaque = fillColor.alpha() == 255;
&gt; &gt;      if (!opaque)
&gt; &gt; -        context-&gt;setFillColor(Color::black);
&gt; &gt; +        context-&gt;setFillColor(Color::black, DeviceColorSpace);
&gt; 
&gt; I&apos;m not sure DeviceColorSpace is right for this; maybe fillColorSpace would be
&gt; right. What test case would demonstrate the difference?
&gt; 

Changed to fillColorSpace. I agree that is more correct.

&gt; &gt;  // Helper functions shared by InlineTextBox / SVGRootInlineBox
&gt; &gt; -void updateGraphicsContext(GraphicsContext* context, const Color&amp; fillColor, const Color&amp; strokeColor, float strokeThickness);
&gt; &gt; +void updateGraphicsContext(GraphicsContext* context, const Color&amp; fillColor, const Color&amp; strokeColor, float strokeThickness, ColorSpace colorSpace);
&gt; 
&gt; The context and colorSpace argument names should not be here.

Fixed.

&gt; 
&gt; &gt; -                context-&gt;fillRoundedRect(fillRect, topLeft, topRight, bottomLeft, bottomRight, Color::black);
&gt; &gt; +                context-&gt;fillRoundedRect(fillRect, topLeft, topRight, bottomLeft, bottomRight, Color::black, DeviceColorSpace);
&gt; 
&gt; I think we might want to use the color space from the style here, not
&gt; DeviceColorSpace.

Fixed.

&gt; 
&gt; &gt; @@ -1258,7 +1258,7 @@ void RenderBoxModelObject::paintBoxShado
&gt; &gt;  
&gt; &gt;                  if (!rectToClipOut.isEmpty())
&gt; &gt;                      context-&gt;clipOut(rectToClipOut);
&gt; &gt; -                context-&gt;fillRect(fillRect, Color::black);
&gt; &gt; +                context-&gt;fillRect(fillRect, Color::black, DeviceColorSpace);
&gt; 
&gt; Ditto.

Fixed. 

&gt; 
&gt; &gt;              // Draw an outline rect where the image should be.
&gt; &gt;              context-&gt;setStrokeStyle(SolidStroke);
&gt; &gt; -            context-&gt;setStrokeColor(Color::lightGray);
&gt; &gt; -            context-&gt;setFillColor(Color::transparent);
&gt; &gt; +            context-&gt;setStrokeColor(Color::lightGray, DeviceColorSpace);
&gt; &gt; +            context-&gt;setFillColor(Color::transparent, DeviceColorSpace);
&gt; 
&gt; I think we want the style of the image element to control this rather than
&gt; hard-coding DeviceColorSpace.

Fixed.

&gt; 
&gt; &gt; -    context-&gt;fillRect(absRect, Color::white);
&gt; &gt; +    context-&gt;fillRect(absRect, Color::white, DeviceColorSpace);
&gt; 
&gt; These corners may need to respect the color space setting for the element they
&gt; are for rather than DeviceColorSpace.

Fixed.

&gt; 
&gt; &gt; +        ColorSpace colorSpace = element-&gt;renderStyle() ? element-&gt;renderStyle()-&gt;colorSpace() : DeviceColorSpace;
&gt; 
&gt; When would element-&gt;renderStyle() be 0? In that case, why are we sure
&gt; DeviceColorSpace is right?

Not sure when it would happen, but this code if nested inside an if-statement that reads:

if (!element-&gt;renderStyle() || element-&gt;renderStyle()-&gt;visibility() != HIDDEN)

So it definitely seems possible. That being said, I looked around the file, and it looks like the renderer&apos;s style is used whenever the element&apos;s style is null, so I did that instead.

&gt; 
&gt; &gt;          [[textColor colorUsingColorSpaceName:NSDeviceRGBColorSpace] getRed:&amp;red green:&amp;green blue:&amp;blue alpha:&amp;alpha];
&gt; &gt; -        graphicsContext.setFillColor(makeRGBA(red * 255, green * 255, blue * 255, alpha * 255));
&gt; &gt; +        graphicsContext.setFillColor(makeRGBA(red * 255, green * 255, blue * 255, alpha * 255), DeviceColorSpace);
&gt; 
&gt; Eventually, this code should change to respect the color space in the NSColor.
&gt; If it&apos;s device, then stay with device, but if it’s not, then color-correct to
&gt; sRGB values.
&gt; 

Agreed.

&gt; We&apos;ve got to find a way to have more test coverage. We should have a separate
&gt; test for each call site where we are passing in a color space, and some easy
&gt; way to construct the tests. This might include some DumpRenderTree
&gt; enhancements.
&gt; 
&gt; r=me as-is -- this clearly all will work fine when nobody uses the new feature
&gt; 
&gt; But lets add a lot more test cases, and use the test cases to drive more
&gt; clarity on whether these explicit DeviceColorSpace call sites are correct. I
&gt; suspect at least half of them are not.

Thanks Darin! I agree about the tests. Committed the fix: http://trac.webkit.org/changeset/50760</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162203</commentid>
    <comment_count>12</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-11-10 14:01:52 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 42846 [details])
&gt; I wonder if the GraphicsContext methods that now take a ColorSpace could have a
&gt; default value for the parameter, since it&apos;s almost always the same.

I originally had it implemented with defaults, but Darin thought we should get rid of them. His argument was that all call sites -- old and especially new -- should be forced to consider color spaces now that we support them. This sounded reasonable to me, so I got rid of the defaults even though that inflated the patch a lot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162236</commentid>
    <comment_count>13</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-11-10 14:41:44 -0800</bug_when>
    <thetext>Follow-ups:

https://bugs.webkit.org/show_bug.cgi?id=31321 Make -webkit-color-correction work with untagged images
https://bugs.webkit.org/show_bug.cgi?id=31319 Make -webkit-color-correction work with canvas
https://bugs.webkit.org/show_bug.cgi?id=31316 Make sure -webkit-color-correction is doing the right thing on Windows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163090</commentid>
    <comment_count>14</comment_count>
    <who name="Philippe Wittenbergh">phiw2</who>
    <bug_when>2009-11-12 16:03:31 -0800</bug_when>
    <thetext>FWIW, according to the message posted by D. Baron on www-style the 2 values for the property are &apos;auto&apos; and &apos;sRGB&apos;.

The description (in comment 0) in this bug, and as far as I can tell, the patch implements &apos;default&apos; and &apos;sRGB&apos;

http://lists.w3.org/Archives/Public/www-style/2009Nov/0226.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163094</commentid>
    <comment_count>15</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-11-12 16:09:06 -0800</bug_when>
    <thetext>Thanks for the heads up. I am pretty confident that we settled on default at the face-to-face. Either I am confused or dbaron is. I will ping him shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163101</commentid>
    <comment_count>16</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-11-12 16:23:18 -0800</bug_when>
    <thetext>My recollection of the CSS-WG F2F was that we decided on &apos;default&apos; after input from Tantek.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163105</commentid>
    <comment_count>17</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-11-12 16:29:00 -0800</bug_when>
    <thetext>Ah, dbaron changed his mind:
&lt;http://lists.w3.org/Archives/Public/www-style/2009Nov/0226.html&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42622</attachid>
            <date>2009-11-05 19:56:39 -0800</date>
            <delta_ts>2009-11-09 19:45:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>forReview.txt</filename>
            <type>text/plain</type>
            <size>89686</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDU4NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcxIEBACisyMDA5LTExLTA1ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXgg
Zm9yIDxyZGFyOi8vcHJvYmxlbS83MDU5NzEwPiAKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5n
LQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzExOTYg
SW1wbGVtZW50IC13ZWJraXQtCisgICAgICAgIGNvbG9yLWNvcnJlY3Rpb24gZm9yIENTUyBjb2xv
cnMKKworICAgICAgICBOZXcgZXhwb3J0ZWQgc3ltYm9sIGZvciBHcmFwaGljc0NvbnRleHQ6OmZp
bGxDb2xvcigpIHdoaWNoIG5vdyAKKyAgICAgICAgYWNjZXB0cyBhIENTU0NvbG9yU3BhY2UgYXMg
YW4gb3B0aW9uYWwgcGFyYW1ldGVyLgorICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6CisKKyAg
ICAgICAgQ29tcHV0ZWQgU3R5bGUgZm9yIC13ZWJraXQtY29sb3ItY29ycmVjdGlvbgorICAgICAg
ICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0
UHJvcGVydHlDU1NWYWx1ZSk6CisKKyAgICAgICAgUGFyc2UgLXdlYmtpdC1jb2xvci1jb3JyZWN0
aW9uCisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUpOgorCisgICAgICAgIE1hcCBDU1MgaWRlbnRpZmllcnMgdG8gdGhl
IGFwcHJvcHJpYXRlIHZhbHVlcyBvZiB0aGUgQ1NTQ29sb3JTcGFjZSAKKyAgICAgICAgZW51bWVy
YXRpb24uCisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgQ1NTQ29sb3JTcGFjZSk6
CisKKyAgICAgICAgTmV3IHByb3BlcnR5IC13ZWJraXQtY29sb3ItY29ycmVjdGlvbgorICAgICAg
ICAqIGNzcy9DU1NQcm9wZXJ0eU5hbWVzLmluOgorCisgICAgICAgIE1hcCAtd2Via2l0LWNvbG9y
LWNvcnJlY3Rpb24gaW50byB0aGUgUmVuZGVyU3R5bGUuCisgICAgICAgICogY3NzL0NTU1N0eWxl
U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQ
cm9wZXJ0eSk6CisKKyAgICAgICAgQWRkIG5ldyB2YWx1ZSBzUkdCLgorICAgICAgICAqIGNzcy9D
U1NWYWx1ZUtleXdvcmRzLmluOgorCisgICAgICAgIENvbW1lbnQgb3V0IHRoZSByZWZlcmVuY2Ug
dG8gc1JHQiBzaW5jZSBpdCB3aWxsIG5vdyBiZSBpbmhlcml0ZWQgYXMgCisgICAgICAgIGEgdmFs
dWUgZnJvbSBDU1NWYWx1ZUtleXdvcmRzLgorICAgICAgICAqIGNzcy9TVkdDU1NWYWx1ZUtleXdv
cmRzLmluOgorCisgICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBhbGwgbm93IHRha2UgYSBDU1NDb2xv
clNwYWNlIGFzIGEgcGFyYW1ldGVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0
cm9rZUNvbG9yKTogCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxD
b2xvcik6IAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3SGlnaGxpZ2h0
Rm9yVGV4dCk6CisKKyAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGNvbnZlcnQgYmV0d2VlbiBDb2xv
clNwYWNlIGFuZCBDU1NDb2xvclNwYWNlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpjZ1RvQ1NTQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmNzc1RvQ0dDb2xvclNwYWNlKToKKworICAgICAgICBUaGUgQ29sb3JTcGFjZSBlbnVtIGRl
ZmluZWQgaW4gdGhpcyBoZWFkZXIgdXNlZCB0byBoYXZlIGEgdmFsdWUgCisgICAgICAgIGNhbGxl
ZCAiU29saWRDb2xvclNwYWNlLiIgSSByZW5hbWVkIHRoYXQgdmFsdWUgdG8gCisgICAgICAgIERl
dmljZVJHQkNvbG9yU3BhY2UsIGFuZCBhZGRlZCBhIG5ldyB2YWx1ZTogc1JHQkNvbG9yU3BhY2Uu
IE1vc3Qgb2YgCisgICAgICAgIHRoZSBvdGhlciBjaGFuZ2VzIGluIHRoaXMgZmlsZSBhcmUganVz
dCBmdW5jdGlvbnMgdGFraW5nIGEgCisgICAgICAgIENTU0NvbG9yU3BhY2UgYXMgYSBwYXJhbWV0
ZXIuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjopOgorCisgICAgICAgIFNvbGlkQ29sb3JTcGFjZSBpcyBub3cgY2FsbGVk
IERldmljZVJHQkNvbG9yU3BhY2UuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNSR0JDb2xvclNw
YWNlUmVmKTogTmV3IHN0YXRpYyBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSAKKyAgICAgICAgQ0dD
b2xvclNwYWNlUmVmIGZvciB0aGUgc1JHQiBjb2xvciBzcGFjZS4KKyAgICAgICAgKFdlYkNvcmU6
OmRldmljZVJHQkNvbG9yU3BhY2VSZWYpOiBOZXcgc3RhdGljIGZ1bmN0aW9uIHRoYXQgcmV0dXJu
cyAKKyAgICAgICAgYSBDR0NvbG9yU3BhY2VSZWYgZm9yIHRoZSBkZXZpY2UgUkdCIGNvbG9yIHNw
YWNlLgorCisgICAgICAgIChXZWJDb3JlOjpzZXRDR0ZpbGxDb2xvcik6IE5vdyB0YWtlcyBhIENv
bG9yU3BhY2UgcGFyYW1ldGVyIGFuZCAKKyAgICAgICAgc2V0cyB0aGUgZmlsbCBjb2xvciB0byB0
aGUgc3BlY2lmaWVkIGNvbG9yIGluIHRoZSBnaXZlbiBDb2xvclNwYWNlLgorICAgICAgICAoV2Vi
Q29yZTo6c2V0Q0dTdHJva2VDb2xvcik6IFNhbWUsIGJ1dCBmb3Igc3Ryb2tlIGNvbG9yLgorCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dCk6IFBhc3Mg
YSBDb2xvclNwYWNlIHRvIAorICAgICAgICBzZXRQbGF0Zm9ybUZpbGwvU3Ryb2tlQ29sb3IoKS4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOiBTZW5kIGEgQ29s
b3JTcGFjZSB0byAKKyAgICAgICAgc2V0Q0dGaWxsQ29sb3IoKQorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZSk6IFNhbWUuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dCk6IFNhbWUuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcik6CisgICAgICAgIAorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6IEFkZHJlc3MgRGV2aWNl
UkdCQ29sb3JTcGFjZSAKKyAgICAgICAgYW5kIHNSR0JDb2xvclNwYWNlIHNlcGFyYXRlbHksIGFu
ZCBjYWxsIENHQ29udGV4dFNldEZpbGxDb2xvclNwYWNlCisgICAgICAgIGZvciBzUkdCLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKTogU2FtZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOiBTYW1lLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KTogU2FtZS4KKworICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOiBOb3cgdGFrZXMgYSAK
KyAgICAgICAgQ1NTQ29sb3JTcGFjZSBhbmQgdXNlcyBpdC4KKworICAgICAgICBBZGRlZCBmdW5j
dGlvbnMgY29sb3JTcGFjZSgpIGFuZCBzZXRDb2xvclNwYWNlKCkKKyAgICAgICAgKiByZW5kZXJp
bmcvc3R5bGUvUmVuZGVyU3R5bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdz
Ojpjb2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpzZXRDb2xv
clNwYWNlKToKKworICAgICAgICBOZXcgZW51bWVyYXRpb24gQ1NTQ29sb3JTcGFjZS4KKyAgICAg
ICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaDoKKyAgICAgICAgKFdl
YkNvcmU6Oik6CisKKyAgICAgICAgVGhlIENTU0NvbG9yU3BhY2UgaXMgc3RvcmVkIGhlcmUuCisg
ICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZUluaGVyaXRlZERhdGEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSYXJlSW5oZXJpdGVkRGF0YTo6U3R5bGVSYXJlSW5oZXJpdGVk
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJhcmVJbmhlcml0ZWREYXRhOjpvcGVyYXRv
cj09KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5o
OgorCisgICAgICAgIFNlbmQgdGhlIGFwcHJvcHJpYXRlIENTU0NvbG9yU3BhY2UgdG8gc2V0Rmls
bENvbG9yKCksIAorICAgICAgICBzZXRTdHJva2VDb2xvcigpLCBmaWxsUmVjdCgpLCBmaWxsUm91
bmRlZFJlY3QoKQorICAgICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpwYWludENhcmV0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRp
YVBsYXllclByaXZhdGVRVEtpdC5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZTo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9J
bmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnBhaW50
VGV4dERlY29yYXRpb25zKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6cGFpbnRUZXh0V2l0aFNoYWRvd3MpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRTZWxl
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlv
bkJhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnREZWNv
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNo
TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRp
b25VbmRlcmxpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpmaWxsSG9yaXpvbnRhbFNlbGVjdGlvbkdhcCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6ZmlsbFZlcnRpY2FsU2VsZWN0aW9uR2FwKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpmaWxsTGVmdFNlbGVjdGlvbkdhcCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6ZmlsbFJpZ2h0U2VsZWN0aW9uR2FwKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9k
ZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmls
ZVVwbG9hZENvbnRyb2w6OnBhaW50T2JqZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
RnJhbWVTZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhbWVTZXQ6OnBhaW50Q29s
dW1uQm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYW1lU2V0OjpwYWludFJvd0Jv
cmRlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpwYWlu
dEl0ZW1Gb3JlZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnBhaW50
SXRlbUJhY2tncm91bmQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnBhaW50KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9i
amVjdDo6ZHJhd0xpbmVGb3JCb3hTaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVj
dDo6ZHJhd0FyY0ZvckJveFNpZGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNl
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6cGFpbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpwYWludEJveERlY29y
YXRpb25zKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcldpZGdldDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdJ
bmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBh
aW50U2VsZWN0aW9uKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXR1
cCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyU29saWQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6c2V0dXApOgorCiAyMDA5LTExLTA1
ICBTdGV2ZSBCbG9jayAgPHN0ZXZlYmxvY2tAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDUwNTcwKQorKysgV2Vi
Q29yZS9XZWJDb3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDMsNyArMzQzLDcgQEAg
X19aTjdXZWJDb3JlMTVGb2N1c0NvbnRyb2xsZXIxNXNldEZvY3VzZQogX19aTjdXZWJDb3JlMTVG
b2N1c0NvbnRyb2xsZXIxNXNldEluaXRpYWxGb2N1c0VOU18xNEZvY3VzRGlyZWN0aW9uRVBOU18x
M0tleWJvYXJkRXZlbnRFCiBfX1pON1dlYkNvcmUxNUZvY3VzQ29udHJvbGxlcjE4Zm9jdXNlZE9y
TWFpbkZyYW1lRXYKIF9fWk43V2ViQ29yZTE1Rm9jdXNDb250cm9sbGVyOXNldEFjdGl2ZUViCi1f
X1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDEyc2V0RmlsbENvbG9yRVJLTlNfNUNvbG9yRQor
X19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxMnNldEZpbGxDb2xvckVSS05TXzVDb2xvckVO
U18xM0NTU0NvbG9yU3BhY2VFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dEMxRVA5Q0dD
b250ZXh0CiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dEQxRXYKIF9fWk43V2ViQ29yZTE1
SlNET01XaW5kb3dCYXNlMThjb21tb25KU0dsb2JhbERhdGFFdgpJbmRleDogV2ViQ29yZS9jc3Mv
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nz
cy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiA1MDU3MCkKKysrIFdl
YkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE3Myw2ICsxNzMsNyBAQCBzdGF0aWMgY29uc3QgaW50IGNvbXB1dGVkUHJvcGVydGllc1td
ID0gCiAgICAgQ1NTUHJvcGVydHlXZWJraXRCb3hSZWZsZWN0LAogICAgIENTU1Byb3BlcnR5V2Vi
a2l0Qm94U2hhZG93LAogICAgIENTU1Byb3BlcnR5V2Via2l0Qm94U2l6aW5nLAorICAgIENTU1By
b3BlcnR5V2Via2l0Q29sb3JDb3JyZWN0aW9uLAogICAgIENTU1Byb3BlcnR5V2Via2l0Q29sdW1u
QnJlYWtBZnRlciwKICAgICBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrQmVmb3JlLAogICAg
IENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQnJlYWtJbnNpZGUsCkBAIC0xMzQ4LDYgKzEzNDksOCBA
QCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjCiAgICAgICAgICAgICBy
ZXR1cm4gZ2V0VGltaW5nRnVuY3Rpb25WYWx1ZShzdHlsZS0+dHJhbnNpdGlvbnMoKSk7CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlQb2ludGVyRXZlbnRzOgogICAgICAgICAgICAgcmV0dXJuIENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPnBvaW50ZXJFdmVudHMoKSk7CisgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2xvckNvcnJlY3Rpb246CisgICAgICAgICAgICByZXR1
cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+Y29sb3JTcGFjZSgpKTsKIAogICAg
ICAgICAvKiBTaG9ydGhhbmQgcHJvcGVydGllcywgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgc2Vl
IGJ1ZyAxMzY1OCovCiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOgpJbmRleDog
V2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuY3BwCShyZXZpc2lvbiA1MDU3MCkKKysrIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNDUsNiArMTI0NSwxMCBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VWYWx1ZShpbnQgcHJvcElkLCBiCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNpemlu
ZzoKICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gaWQgPT0gQ1NTVmFsdWVCb3JkZXJCb3ggfHwg
aWQgPT0gQ1NTVmFsdWVDb250ZW50Qm94OwogICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Q29sb3JDb3JyZWN0aW9uOgorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVT
cmdiIHx8IGlkID09IENTU1ZhbHVlRGVmYXVsdCkKKyAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2
ZSA9IHRydWU7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJx
dWVlOiB7CiAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzVdID0geyBDU1NQcm9wZXJ0eVdl
YmtpdE1hcnF1ZWVEaXJlY3Rpb24sIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZUluY3JlbWVudCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFy
cXVlZVJlcGV0aXRpb24sCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBp
bmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5n
cy5oCShyZXZpc2lvbiA1MDU3MCkKKysrIFdlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFw
cGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTg4MSw2ICsxODgxLDMyIEBAIHRlbXBsYXRlPD4g
aW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGUKICAgICB9CiB9CiAKK3RlbXBsYXRlPD4gaW5s
aW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShDU1NDb2xvclNwYWNlIHNw
YWNlKQorICAgIDogbV90eXBlKENTU19JREVOVCkKK3sKKyAgICBzd2l0Y2ggKHNwYWNlKSB7Cisg
ICAgICAgIGNhc2UgRGVmYXVsdDoKKyAgICAgICAgICAgIG1fdmFsdWUuaWRlbnQgPSBDU1NWYWx1
ZURlZmF1bHQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBzUkdCOgorICAgICAg
ICAgICAgbV92YWx1ZS5pZGVudCA9IENTU1ZhbHVlU3JnYjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKwordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9y
IENTU0NvbG9yU3BhY2UoKSBjb25zdAoreworICAgIHN3aXRjaCAobV92YWx1ZS5pZGVudCkgewor
ICAgICAgICBjYXNlIENTU1ZhbHVlRGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBEZWZhdWx0
OworICAgICAgICBjYXNlIENTU1ZhbHVlU3JnYjoKKyAgICAgICAgICAgIHJldHVybiBzUkdCOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICByZXR1cm4gRGVmYXVsdDsKKyAgICB9Cit9CisKICNpZiBFTkFCTEUoU1ZHKQogCiB0
ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoTGlu
ZUNhcCBlKQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1lcy5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eU5hbWVzLmluCShyZXZpc2lvbiA1MDU3MCkKKysr
IFdlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTE4NSw2
ICsxODUsNyBAQCB6b29tCiAtd2Via2l0LWJveC1yZWZsZWN0CiAtd2Via2l0LWJveC1zaGFkb3cK
IC13ZWJraXQtYm94LXNpemluZworLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uCiAtd2Via2l0LWNv
bHVtbi1icmVhay1hZnRlcgogLXdlYmtpdC1jb2x1bW4tYnJlYWstYmVmb3JlCiAtd2Via2l0LWNv
bHVtbi1icmVhay1pbnNpZGUKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lv
biA1MDU3MCkKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MjY3LDYgKzUyNjcsMTggQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVBy
b3BlcnR5KGludAogICAgICAgICBtX3N0eWxlLT5zZXRQb2ludGVyRXZlbnRzKCpwcmltaXRpdmVW
YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dENvbG9yQ29ycmVjdGlvbjogeworICAgICAgICBpZiAoaXNJbmhlcml0KSAKKyAgICAgICAgICAg
IG1fc3R5bGUtPnNldENvbG9yU3BhY2UobV9wYXJlbnRTdHlsZS0+Y29sb3JTcGFjZSgpKTsKKyAg
ICAgICAgZWxzZSBpZiAoaXNJbml0aWFsKQorICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sb3JT
cGFjZShEZWZhdWx0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoIXByaW1pdGl2
ZVZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNl
dENvbG9yU3BhY2UoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47
CisgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlJbnZhbGlkOgogICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHJldGNoOgpJbmRleDogV2ViQ29yZS9jc3MvQ1NTVmFs
dWVLZXl3b3Jkcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NWYWx1ZUtleXdvcmRz
LmluCShyZXZpc2lvbiA1MDU3MCkKKysrIFdlYkNvcmUvY3NzL0NTU1ZhbHVlS2V5d29yZHMuaW4J
KHdvcmtpbmcgY29weSkKQEAgLTYzOCwzICs2MzgsNyBAQCBzdWJwaXhlbC1hbnRpYWxpYXNlZAog
b3B0aW1pemVTcGVlZAogb3B0aW1pemVMZWdpYmlsaXR5CiBnZW9tZXRyaWNQcmVjaXNpb24KKwor
IyAtd2Via2l0LWNvbG9yLWNvcnJlY3Rpb24KKyNkZWZhdWx0CitzUkdCCkluZGV4OiBXZWJDb3Jl
L2Nzcy9TVkdDU1NWYWx1ZUtleXdvcmRzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL1NW
R0NTU1ZhbHVlS2V5d29yZHMuaW4JKHJldmlzaW9uIDUwNTcwKQorKysgV2ViQ29yZS9jc3MvU1ZH
Q1NTVmFsdWVLZXl3b3Jkcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMTgzLDcgKzE4Myw3IEBAIG5l
dwogIyBDU1NfUFJPUF9TVE9QX09QQUNJVFkKICMgQ1NTX1BST1BfQ09MT1JfSU5URVJQT0xBVElP
TgogI2F1dG8KLXNSR0IKKyNzUkdCCiBsaW5lYXJSR0IKIAogIyBDU1NfUFJPUF9DT0xPUl9JTlRF
UlBPTEFUSU9OX0ZJTFRFUlMKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDUwNTcwKQorKysgV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OTQsMTEgKzk5NCwxNCBAQCB2b2lkIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OnBhaW50Q2FyZXQoR3JhCiAgICAgSW50UmVjdCBjYXJldCA9IGludGVy
c2VjdGlvbihkcmF3aW5nUmVjdCwgY2xpcFJlY3QpOwogICAgIGlmICghY2FyZXQuaXNFbXB0eSgp
KSB7CiAgICAgICAgIENvbG9yIGNhcmV0Q29sb3IgPSBDb2xvcjo6YmxhY2s7CisgICAgICAgIENT
U0NvbG9yU3BhY2UgY29sb3JTcGFjZSA9IERlZmF1bHQ7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1l
bnQgPSByb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1l
bnQtPnJlbmRlcmVyKCkpCisgICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPnJlbmRlcmVy
KCkpIHsKICAgICAgICAgICAgIGNhcmV0Q29sb3IgPSBlbGVtZW50LT5yZW5kZXJlcigpLT5zdHls
ZSgpLT5jb2xvcigpOworICAgICAgICAgICAgY29sb3JTcGFjZSA9IGVsZW1lbnQtPnJlbmRlcmVy
KCktPnN0eWxlKCktPmNvbG9yU3BhY2UoKTsKKyAgICAgICAgfQogCi0gICAgICAgIHAtPmZpbGxS
ZWN0KGNhcmV0LCBjYXJldENvbG9yKTsKKyAgICAgICAgcC0+ZmlsbFJlY3QoY2FyZXQsIGNhcmV0
Q29sb3IsIGNvbG9yU3BhY2UpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24gNTA1NzApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyMCwxMSArMTIwLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VTdHls
ZShjb24KICAgICBzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKHN0eWxlKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IsIENTU0NvbG9y
U3BhY2UgY29sb3JTcGFjZSkKIHsKLSAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlQ29sb3JTcGFj
ZSA9IFNvbGlkQ29sb3JTcGFjZTsKKyAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlQ29sb3JTcGFj
ZSA9IGNzc1RvQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpOwogICAgIG1fY29tbW9uLT5zdGF0ZS5z
dHJva2VDb2xvciA9IGNvbG9yOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29sb3IpOwor
ICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29sb3IsIGNvbG9yU3BhY2UpOwogfQogCiBDb2xv
clNwYWNlIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQ29sb3JTcGFjZSgpIGNvbnN0CkBAIC0xODIs
MTEgKzE4MiwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1bGUoV2luZFJ1CiAg
ICAgbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IsIENTU0NvbG9yU3BhY2Ug
Y29sb3JTcGFjZSkKIHsKLSAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbENvbG9yU3BhY2UgPSBTb2xp
ZENvbG9yU3BhY2U7CisgICAgbV9jb21tb24tPnN0YXRlLmZpbGxDb2xvclNwYWNlID0gY3NzVG9D
R0NvbG9yU3BhY2UoY29sb3JTcGFjZSk7CiAgICAgbV9jb21tb24tPnN0YXRlLmZpbGxDb2xvciA9
IGNvbG9yOwotICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGNvbG9yKTsKKyAgICBzZXRQbGF0Zm9y
bUZpbGxDb2xvcihjb2xvciwgY29sb3JTcGFjZSk7CiB9CiAKIENvbG9yIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbENvbG9yKCkgY29uc3QKQEAgLTM3MCwxMiArMzcwLDEyIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QKICAgICBiaWRpUmVzb2x2ZXIuZGVsZXRlUnVucygp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0hpZ2hsaWdodEZvclRleHQoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBJbnRQb2ludCYgcG9pbnQsIGlu
dCBoLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yLCBpbnQgZnJvbSwgaW50IHRvKQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdIaWdobGlnaHRGb3JUZXh0KGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgSW50UG9pbnQmIHBvaW50LCBpbnQgaCwgY29uc3Qg
Q29sb3ImIGJhY2tncm91bmRDb2xvciwgQ1NTQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBpbnQgZnJv
bSwgaW50IHRvKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGZpbGxSZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBwb2ludCwg
aCwgZnJvbSwgdG8pLCBiYWNrZ3JvdW5kQ29sb3IpOworICAgIGZpbGxSZWN0KGZvbnQuc2VsZWN0
aW9uUmVjdEZvclRleHQocnVuLCBwb2ludCwgaCwgZnJvbSwgdG8pLCBiYWNrZ3JvdW5kQ29sb3Is
IGNvbG9yU3BhY2UpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6aW5pdEZvY3VzUmluZyhp
bnQgd2lkdGgsIGludCBvZmZzZXQpCkBAIC01NzUsNCArNTc1LDE4IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEIKICAgICB9CiB9CiAKK0NTU0NvbG9yU3BhY2UgR3Jh
cGhpY3NDb250ZXh0OjpjZ1RvQ1NTQ29sb3JTcGFjZShDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7
CisgICAgaWYgKGNvbG9yU3BhY2UgPT0gc1JHQkNvbG9yU3BhY2UpCisgICAgICAgIHJldHVybiBz
UkdCOworICAgIHJldHVybiBEZWZhdWx0OworfQorCitDb2xvclNwYWNlIEdyYXBoaWNzQ29udGV4
dDo6Y3NzVG9DR0NvbG9yU3BhY2UoQ1NTQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIGlm
IChjb2xvclNwYWNlID09IHNSR0IpCisgICAgICAgIHJldHVybiBzUkdCQ29sb3JTcGFjZTsKKyAg
ICByZXR1cm4gRGV2aWNlUkdCQ29sb3JTcGFjZTsKK30KKwogfQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiA1MDU3MCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKICNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIK
ICNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CkBAIC0xMzcsNyArMTM4LDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIC8vIGEgZmlsbCBvciBzdHJva2UgaXMgdXNpbmcgYSBncmFkaWVudCBv
ciBwYXR0ZXJuIGluc3RlYWQgb2YgYSBzb2xpZCBjb2xvci4KICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1NTgKICAgICBlbnVtIENvbG9yU3BhY2Ugewot
ICAgICAgICBTb2xpZENvbG9yU3BhY2UsCisgICAgICAgIERldmljZVJHQkNvbG9yU3BhY2UsCisg
ICAgICAgIHNSR0JDb2xvclNwYWNlLAogICAgICAgICBQYXR0ZXJuQ29sb3JTcGFjZSwKICAgICAg
ICAgR3JhZGllbnRDb2xvclNwYWNlCiAgICAgfTsKQEAgLTE2NCw3ICsxNjYsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKCkgY29uc3Q7CiAg
ICAgICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoY29uc3QgU3Ryb2tlU3R5bGUmIHN0eWxlKTsKICAg
ICAgICAgQ29sb3Igc3Ryb2tlQ29sb3IoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRTdHJva2VD
b2xvcihjb25zdCBDb2xvciYpOworICAgICAgICB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0IENv
bG9yJiwgQ1NTQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gRGVmYXVsdCk7CiAKICAgICAgICAgQ29s
b3JTcGFjZSBzdHJva2VDb2xvclNwYWNlKCkgY29uc3Q7CiAKQEAgLTE3Nyw3ICsxNzksNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3Q7CiAg
ICAgICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUpOwogICAgICAgICBDb2xvciBmaWxsQ29s
b3IoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAg
ICAgICAgdm9pZCBzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImLCBDU1NDb2xvclNwYWNlIGNvbG9y
U3BhY2UgPSBEZWZhdWx0KTsKIAogICAgICAgICB2b2lkIHNldEZpbGxQYXR0ZXJuKFBhc3NSZWZQ
dHI8UGF0dGVybj4pOwogICAgICAgICBQYXR0ZXJuKiBmaWxsUGF0dGVybigpIGNvbnN0OwpAQCAt
MjE3LDkgKzIxOSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzdHJva2VB
cmMoY29uc3QgSW50UmVjdCYsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVTcGFuKTsKIAogICAg
ICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgICAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJik7CisgICAgICAgIHZvaWQgZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDU1NDb2xvclNwYWNlIGNzID0gRGVm
YXVsdCk7CiAgICAgICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR2VuZXJhdG9y
Jik7Ci0gICAgICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmLCBjb25zdCBJ
bnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYg
Ym90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQsIGNvbnN0IENvbG9yJik7Cisg
ICAgICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXpl
JiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9t
TGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQsIGNvbnN0IENvbG9yJiwgQ1NTQ29sb3JT
cGFjZSBjcyA9IERlZmF1bHQpOwogCiAgICAgICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpOwogCkBAIC0yNTUsNyArMjU3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
ICAgIHZvaWQgZHJhd1RleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBJbnRQ
b2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpOwogICAgICAgICB2b2lkIGRyYXdCaWRp
VGV4dChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAg
ICAgICAgdm9pZCBkcmF3SGlnaGxpZ2h0Rm9yVGV4dChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1
biYsIGNvbnN0IEludFBvaW50JiwgaW50IGgsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3Is
IGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpOworICAgICAgICB2b2lkIGRyYXdIaWdobGlnaHRG
b3JUZXh0KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgSW50UG9pbnQmLCBpbnQg
aCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvciwgQ1NTQ29sb3JTcGFjZSwgaW50IGZyb20g
PSAwLCBpbnQgdG8gPSAtMSk7CiAKICAgICAgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhl
bHMoY29uc3QgRmxvYXRSZWN0Jik7CiAKQEAgLTM5NCw2ICszOTYsOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHBhdHRlcm4gZ2V0SGFpa3VTdHJva2VTdHlsZSgpOwogI2VuZGlmCiAK
KyAgICAgICAgQ1NTQ29sb3JTcGFjZSBjZ1RvQ1NTQ29sb3JTcGFjZShDb2xvclNwYWNlKTsKKyAg
ICAgICAgQ29sb3JTcGFjZSBjc3NUb0NHQ29sb3JTcGFjZShDU1NDb2xvclNwYWNlKTsKKwogICAg
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKICAgICAgICAgdm9p
ZCByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOwpAQCAtNDAxLDEzICs0MDYsMTMgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKGludCk7
CiAgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1Gb250KGNvbnN0IEZvbnQmIGZvbnQpOwogCi0gICAg
ICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYpOworICAgICAgICB2
b2lkIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImLCBDU1NDb2xvclNwYWNlKTsK
ICAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKGNvbnN0IFN0cm9rZVN0eWxlJik7
CiAgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxvYXQpOwogICAgICAg
ICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlR3JhZGllbnQoR3JhZGllbnQqKTsKICAgICAgICAgdm9p
ZCBzZXRQbGF0Zm9ybVN0cm9rZVBhdHRlcm4oUGF0dGVybiopOwogCi0gICAgICAgIHZvaWQgc2V0
UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICAgICAgdm9pZCBzZXRQbGF0Zm9y
bUZpbGxDb2xvcihjb25zdCBDb2xvciYsIENTU0NvbG9yU3BhY2UpOwogICAgICAgICB2b2lkIHNl
dFBsYXRmb3JtRmlsbEdyYWRpZW50KEdyYWRpZW50Kik7CiAgICAgICAgIHZvaWQgc2V0UGxhdGZv
cm1GaWxsUGF0dGVybihQYXR0ZXJuKik7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCShyZXZpc2lvbiA1MDU3MCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSwxMCArNDEsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIFBM
QVRGT1JNKENBSVJPKQogICAgICAgICAgICAgLCBnbG9iYWxBbHBoYSgxLjBmKQogI2VuZGlmCi0g
ICAgICAgICAgICAsIHN0cm9rZUNvbG9yU3BhY2UoU29saWRDb2xvclNwYWNlKQorICAgICAgICAg
ICAgLCBzdHJva2VDb2xvclNwYWNlKERldmljZVJHQkNvbG9yU3BhY2UpCiAgICAgICAgICAgICAs
IHN0cm9rZUNvbG9yKENvbG9yOjpibGFjaykKICAgICAgICAgICAgICwgZmlsbFJ1bGUoUlVMRV9O
T05aRVJPKQotICAgICAgICAgICAgLCBmaWxsQ29sb3JTcGFjZShTb2xpZENvbG9yU3BhY2UpCisg
ICAgICAgICAgICAsIGZpbGxDb2xvclNwYWNlKERldmljZVJHQkNvbG9yU3BhY2UpCiAgICAgICAg
ICAgICAsIGZpbGxDb2xvcihDb2xvcjo6YmxhY2spCiAgICAgICAgICAgICAsIHNob3VsZEFudGlh
bGlhcyh0cnVlKQogICAgICAgICAgICAgLCBwYWludGluZ0Rpc2FibGVkKGZhbHNlKQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAJKHJldmlzaW9uIDUwNTcwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDE4ICs2MSw0NCBAQCB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyB2b2lkIHNl
dENHRmlsbENvbG9yKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDb2xvciYgY29sb3IpCitz
dGF0aWMgQ0dDb2xvclNwYWNlUmVmIHNSR0JDb2xvclNwYWNlUmVmKCkKIHsKLSAgICBDR0Zsb2F0
IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOwotICAgIGNvbG9yLmdldFJHQkEocmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGEpOwotICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCByZWQs
IGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgc3RhdGljIENHQ29sb3JTcGFjZVJlZiBzUkdCU3Bh
Y2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQik7CisgICAg
cmV0dXJuIHNSR0JTcGFjZTsKIH0KIAotc3RhdGljIHZvaWQgc2V0Q0dTdHJva2VDb2xvcihDR0Nv
bnRleHRSZWYgY29udGV4dCwgY29uc3QgQ29sb3ImIGNvbG9yKQorc3RhdGljIENHQ29sb3JTcGFj
ZVJlZiBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCkKIHsKLSAgICBDR0Zsb2F0IHJlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhOwotICAgIGNvbG9yLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OwotICAgIENHQ29udGV4dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKKyAgICBzdGF0aWMgQ0dDb2xvclNwYWNlUmVmIGRldmljZVNwYWNlID0gQ0dD
b2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7CisgICAgcmV0dXJuIGRldmljZVNwYWNlOworfQor
CitzdGF0aWMgdm9pZCBzZXRDR0ZpbGxDb2xvcihDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7ICAgIAorICAgIENHRmxvYXQg
Y29tcG9uZW50c1s0XTsKKyAgICBjb2xvci5nZXRSR0JBKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVu
dHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHNbM10pOworCisgICAgQ0dDb2xvclJlZiBj
Z0NvbG9yOworICAgIGlmIChjb2xvclNwYWNlID09IHNSR0JDb2xvclNwYWNlKQorICAgICAgICBj
Z0NvbG9yID0gQ0dDb2xvckNyZWF0ZShzUkdCQ29sb3JTcGFjZVJlZigpLCBjb21wb25lbnRzKTsK
KyAgICBlbHNlCisgICAgICAgIGNnQ29sb3IgPSBDR0NvbG9yQ3JlYXRlKGRldmljZVJHQkNvbG9y
U3BhY2VSZWYoKSwgY29tcG9uZW50cyk7CisKKyAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JXaXRo
Q29sb3IoY29udGV4dCwgY2dDb2xvcik7Cit9CisKK3N0YXRpYyB2b2lkIHNldENHU3Ryb2tlQ29s
b3IoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlKQoreworICAgIENHRmxvYXQgY29tcG9uZW50c1s0XTsKKyAgICBjb2xvci5nZXRS
R0JBKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVu
dHNbM10pOworCisgICAgQ0dDb2xvclJlZiBjZ0NvbG9yOworICAgIGlmIChjb2xvclNwYWNlID09
IHNSR0JDb2xvclNwYWNlKQorICAgICAgICBjZ0NvbG9yID0gQ0dDb2xvckNyZWF0ZShzUkdCQ29s
b3JTcGFjZVJlZigpLCBjb21wb25lbnRzKTsKKyAgICBlbHNlCisgICAgICAgIGNnQ29sb3IgPSBD
R0NvbG9yQ3JlYXRlKGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKSwgY29tcG9uZW50cyk7CisKKyAg
ICBDR0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihjb250ZXh0LCBjZ0NvbG9yKTsKIH0K
IAogR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoQ0dDb250ZXh0UmVmIGNnQ29udGV4
dCkKQEAgLTgyLDggKzEwOCw4IEBAIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KENH
Q29udGUKICAgICBzZXRQYWludGluZ0Rpc2FibGVkKCFjZ0NvbnRleHQpOwogICAgIGlmIChjZ0Nv
bnRleHQpIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5j
IHdpdGggb3VyIHN0YXRlLgotICAgICAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihmaWxsQ29sb3Io
KSk7Ci0gICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7CisgICAg
ICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGZpbGxDb2xvcigpLCBjZ1RvQ1NTQ29sb3JTcGFjZShm
aWxsQ29sb3JTcGFjZSgpKSk7CisgICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Ioc3Ryb2tl
Q29sb3IoKSwgY2dUb0NTU0NvbG9yU3BhY2Uoc3Ryb2tlQ29sb3JTcGFjZSgpKSk7CiAgICAgfQog
fQogCkBAIC0xMzMsNyArMTU5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNv
bnN0IEludAogICAgICAgICAvLyBXZSBkbyBhIGZpbGwgb2YgZm91ciByZWN0cyB0byBzaW11bGF0
ZSB0aGUgc3Ryb2tlIG9mIGEgYm9yZGVyLgogICAgICAgICBDb2xvciBvbGRGaWxsQ29sb3IgPSBm
aWxsQ29sb3IoKTsKICAgICAgICAgaWYgKG9sZEZpbGxDb2xvciAhPSBzdHJva2VDb2xvcigpKQot
ICAgICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgc3Ryb2tlQ29sb3IoKSk7CisgICAg
ICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdHJva2VDb2xvcigpLCBzdHJva2VDb2xv
clNwYWNlKCkpOwogICAgICAgICBDR1JlY3QgcmVjdHNbNF0gPSB7CiAgICAgICAgICAgICBGbG9h
dFJlY3QocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIDEpLAogICAgICAgICAgICAg
RmxvYXRSZWN0KHJlY3QueCgpLCByZWN0LmJvdHRvbSgpIC0gMSwgcmVjdC53aWR0aCgpLCAxKSwK
QEAgLTE0Miw3ICsxNjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3Qg
SW50CiAgICAgICAgIH07CiAgICAgICAgIENHQ29udGV4dEZpbGxSZWN0cyhjb250ZXh0LCByZWN0
cywgNCk7CiAgICAgICAgIGlmIChvbGRGaWxsQ29sb3IgIT0gc3Ryb2tlQ29sb3IoKSkKLSAgICAg
ICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIG9sZEZpbGxDb2xvcik7CisgICAgICAgICAg
ICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3IsIGZpbGxDb2xvclNwYWNlKCkp
OwogICAgIH0KIH0KIApAQCAtMjEwLDcgKzIzNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZShjb25zdCBJbnQKIAogICAgICAgICAvLyBEbyBhIHJlY3QgZmlsbCBvZiBvdXIgZW5k
cG9pbnRzLiAgVGhpcyBlbnN1cmVzIHdlIGFsd2F5cyBoYXZlIHRoZQogICAgICAgICAvLyBhcHBl
YXJhbmNlIG9mIGJlaW5nIGEgYm9yZGVyLiAgV2UgdGhlbiBkcmF3IHRoZSBhY3R1YWwgZG90dGVk
L2Rhc2hlZCBsaW5lLgotICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdHJva2VDb2xv
cigpKTsgIC8vIFRoZSBzYXZlL3Jlc3RvcmUgbWFrZSBpdCBzYWZlIHRvIG11dGF0ZSB0aGUgZmls
bCBjb2xvciBoZXJlIHdpdGhvdXQgc2V0dGluZyBpdCBiYWNrIHRvIHRoZSBvbGQgY29sb3IuCisg
ICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIHN0cm9rZUNvbG9yKCksIHN0cm9rZUNvbG9y
U3BhY2UoKSk7ICAvLyBUaGUgc2F2ZS9yZXN0b3JlIG1ha2UgaXQgc2FmZSB0byBtdXRhdGUgdGhl
IGZpbGwgY29sb3IgaGVyZSB3aXRob3V0IHNldHRpbmcgaXQgYmFjayB0byB0aGUgb2xkIGNvbG9y
LgogICAgICAgICBpZiAoaXNWZXJ0aWNhbExpbmUpIHsKICAgICAgICAgICAgIENHQ29udGV4dEZp
bGxSZWN0KGNvbnRleHQsIEZsb2F0UmVjdChwMS54KCkgLSB3aWR0aCAvIDIsIHAxLnkoKSAtIHdp
ZHRoLCB3aWR0aCwgd2lkdGgpKTsKICAgICAgICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRl
eHQsIEZsb2F0UmVjdChwMi54KCkgLSB3aWR0aCAvIDIsIHAyLnkoKSwgd2lkdGgsIHdpZHRoKSk7
CkBAIC00OTUsNyArNTIxLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiAK
ICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIHN3aXRj
aCAobV9jb21tb24tPnN0YXRlLmZpbGxDb2xvclNwYWNlKSB7Ci0gICAgY2FzZSBTb2xpZENvbG9y
U3BhY2U6CisgICAgY2FzZSBEZXZpY2VSR0JDb2xvclNwYWNlOgorICAgICAgICBmaWxsUGF0aFdp
dGhGaWxsUnVsZShjb250ZXh0LCBmaWxsUnVsZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBzUkdCQ29sb3JTcGFjZToKKyAgICAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yU3BhY2UoY29u
dGV4dCwgc1JHQkNvbG9yU3BhY2VSZWYoKSk7CiAgICAgICAgIGZpbGxQYXRoV2l0aEZpbGxSdWxl
KGNvbnRleHQsIGZpbGxSdWxlKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFBhdHRlcm5D
b2xvclNwYWNlOgpAQCAtNTIyLDcgKzU1MiwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlUGF0aCgpCiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgp
OwogICAgIHN3aXRjaCAobV9jb21tb24tPnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UpIHsKLSAgICBj
YXNlIFNvbGlkQ29sb3JTcGFjZToKKyAgICBjYXNlIERldmljZVJHQkNvbG9yU3BhY2U6CisgICAg
ICAgIENHQ29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2Ugc1JHQkNvbG9yU3BhY2U6CisgICAgICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yU3BhY2Uo
Y29udGV4dCwgc1JHQkNvbG9yU3BhY2VSZWYoKSk7CiAgICAgICAgIENHQ29udGV4dFN0cm9rZVBh
dGgoY29udGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUGF0dGVybkNvbG9yU3BhY2U6
CkBAIC01NDYsNyArNTgwLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25z
dCBGbG8KICAgICAgICAgcmV0dXJuOwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAgICAgc3dpdGNoIChtX2NvbW1vbi0+c3RhdGUuZmlsbENvbG9yU3BhY2Up
IHsKLSAgICBjYXNlIFNvbGlkQ29sb3JTcGFjZToKKyAgICBjYXNlIERldmljZVJHQkNvbG9yU3Bh
Y2U6CisgICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIHJlY3QpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIHNSR0JDb2xvclNwYWNlOgorICAgICAgICBDR0NvbnRleHRTZXRGaWxs
Q29sb3JTcGFjZShjb250ZXh0LCBzUkdCQ29sb3JTcGFjZVJlZigpKTsKICAgICAgICAgQ0dDb250
ZXh0RmlsbFJlY3QoY29udGV4dCwgcmVjdCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUGF0
dGVybkNvbG9yU3BhY2U6CkBAIC01NjMsMzQgKzYwMSw0MiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IsIENTU0NvbG9yU3BhY2UgY3MpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAgICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7Ci0gICAg
aWYgKG9sZEZpbGxDb2xvciAhPSBjb2xvcikKLSAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQs
IGNvbG9yKTsKKyAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBjc3NUb0NHQ29sb3JTcGFjZShj
cyk7CisgICAgQ29sb3JTcGFjZSBvbGRDb2xvclNwYWNlID0gZmlsbENvbG9yU3BhY2UoKTsKKwor
ICAgIGlmIChvbGRGaWxsQ29sb3IgIT0gY29sb3IgfHwgb2xkQ29sb3JTcGFjZSAhPSBjb2xvclNw
YWNlKQorICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgY29sb3IsIGNvbG9yU3BhY2UpOwor
CiAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgcmVjdCk7Ci0gICAgaWYgKG9sZEZpbGxD
b2xvciAhPSBjb2xvcikKLSAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIG9sZEZpbGxDb2xv
cik7CisKKyAgICBpZiAob2xkRmlsbENvbG9yICE9IGNvbG9yIHx8IG9sZENvbG9yU3BhY2UgIT0g
Y29sb3JTcGFjZSkKKyAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIG9sZEZpbGxDb2xvciwg
b2xkQ29sb3JTcGFjZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50
U2l6ZSYgdG9wUmlnaHQsIGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUm
IGJvdHRvbVJpZ2h0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExl
ZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBj
b25zdCBJbnRTaXplJiBib3R0b21SaWdodCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDU1NDb2xvclNw
YWNlIGNzKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ29s
b3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7Ci0gICAgaWYgKG9sZEZpbGxDb2xvciAhPSBj
b2xvcikKLSAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgY29sb3IpOworICAgIENvbG9y
U3BhY2UgY29sb3JTcGFjZSA9IGNzc1RvQ0dDb2xvclNwYWNlKGNzKTsKKyAgICBDb2xvclNwYWNl
IG9sZENvbG9yU3BhY2UgPSBmaWxsQ29sb3JTcGFjZSgpOworCisgICAgaWYgKG9sZEZpbGxDb2xv
ciAhPSBjb2xvciB8fCBvbGRDb2xvclNwYWNlICE9IGNvbG9yU3BhY2UpCisgICAgICAgIHNldENH
RmlsbENvbG9yKGNvbnRleHQsIGNvbG9yLCBjb2xvclNwYWNlKTsKIAogICAgIGFkZFBhdGgoUGF0
aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShyZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9t
TGVmdCwgYm90dG9tUmlnaHQpKTsKICAgICBmaWxsUGF0aCgpOwogCi0gICAgaWYgKG9sZEZpbGxD
b2xvciAhPSBjb2xvcikKLSAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgb2xkRmlsbENv
bG9yKTsKKyAgICBpZiAob2xkRmlsbENvbG9yICE9IGNvbG9yIHx8IG9sZENvbG9yU3BhY2UgIT0g
Y29sb3JTcGFjZSkKKyAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgb2xkRmlsbENvbG9y
LCBvbGRDb2xvclNwYWNlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQpAQCAtNzgwLDcgKzgyNiwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUmVjdChjb25zdCBGCiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRm
b3JtQ29udGV4dCgpOwogICAgIHN3aXRjaCAobV9jb21tb24tPnN0YXRlLnN0cm9rZUNvbG9yU3Bh
Y2UpIHsKLSAgICBjYXNlIFNvbGlkQ29sb3JTcGFjZToKKyAgICBjYXNlIERldmljZVJHQkNvbG9y
U3BhY2U6CisgICAgICAgIENHQ29udGV4dFN0cm9rZVJlY3RXaXRoV2lkdGgoY29udGV4dCwgciwg
bGluZVdpZHRoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBzUkdCQ29sb3JTcGFjZToKKyAg
ICAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29sb3JTcGFjZShjb250ZXh0LCBzUkdCQ29sb3JTcGFj
ZVJlZigpKTsKICAgICAgICAgQ0dDb250ZXh0U3Ryb2tlUmVjdFdpdGhXaWR0aChjb250ZXh0LCBy
LCBsaW5lV2lkdGgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFBhdHRlcm5Db2xvclNwYWNl
OgpAQCAtOTk2LDEwICsxMDQ2LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZv
clRleHQoY28KICAgICB9CiAKICAgICBpZiAoZmlsbENvbG9yKCkgIT0gc3Ryb2tlQ29sb3IoKSkK
LSAgICAgICAgc2V0Q0dGaWxsQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIHN0cm9rZUNvbG9yKCkp
OworICAgICAgICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgc3Ryb2tlQ29sb3Io
KSwgc3Ryb2tlQ29sb3JTcGFjZSgpKTsKICAgICBDR0NvbnRleHRGaWxsUmVjdChwbGF0Zm9ybUNv
bnRleHQoKSwgQ0dSZWN0TWFrZSh4LCB5LCBsaW5lTGVuZ3RoLCB0aGlja25lc3MpKTsKICAgICBp
ZiAoZmlsbENvbG9yKCkgIT0gc3Ryb2tlQ29sb3IoKSkKLSAgICAgICAgc2V0Q0dGaWxsQ29sb3Io
cGxhdGZvcm1Db250ZXh0KCksIGZpbGxDb2xvcigpKTsKKyAgICAgICAgc2V0Q0dGaWxsQ29sb3Io
cGxhdGZvcm1Db250ZXh0KCksIGZpbGxDb2xvcigpLCBmaWxsQ29sb3JTcGFjZSgpKTsKIAogICAg
IGlmIChyZXN0b3JlQW50aWFsaWFzTW9kZSkKICAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50
aWFsaWFzKHBsYXRmb3JtQ29udGV4dCgpLCB0cnVlKTsKQEAgLTExMjMsMTEgKzExNzMsMTEgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYQogICAgIH0KIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNv
bG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3Qg
Q29sb3ImIGNvbG9yLCBDU1NDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHNldENHU3Ryb2tlQ29sb3IocGxh
dGZvcm1Db250ZXh0KCksIGNvbG9yKTsKKyAgICBzZXRDR1N0cm9rZUNvbG9yKHBsYXRmb3JtQ29u
dGV4dCgpLCBjb2xvciwgY3NzVG9DR0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tu
ZXNzKQpAQCAtMTEzNywxMSArMTE4NywxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1TdHJva2VUCiAgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKHBsYXRmb3JtQ29udGV4dCgp
LCB0aGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxs
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ1NTQ29sb3JTcGFjZSBjb2xvclNwYWNl
KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBz
ZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgY29sb3IpOworICAgIHNldENHRmlsbENv
bG9yKHBsYXRmb3JtQ29udGV4dCgpLCBjb2xvciwgY3NzVG9DR0NvbG9yU3BhY2UoY29sb3JTcGFj
ZSkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxp
YXMoYm9vbCBlbmFibGUpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRN
YWMubW0JKHJldmlzaW9uIDUwNTcwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Rm9udE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTIyLDE1ICsxMjIsMTYgQEAgdm9pZCBGb250
OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogYwogICAgICAgICAvLyBQYWludCBzaW1wbGUg
c2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2
b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCiAgICAgICAgIGNvbnRleHQtPmNsZWFy
U2hhZG93KCk7CiAgICAgICAgIENvbG9yIGZpbGxDb2xvciA9IGNvbnRleHQtPmZpbGxDb2xvcigp
OworICAgICAgICBDU1NDb2xvclNwYWNlIGZpbGxDb2xvclNwYWNlID0gY29udGV4dC0+Y2dUb0NT
U0NvbG9yU3BhY2UoY29udGV4dC0+ZmlsbENvbG9yU3BhY2UoKSk7CiAgICAgICAgIENvbG9yIHNo
YWRvd0ZpbGxDb2xvcihzaGFkb3dDb2xvci5yZWQoKSwgc2hhZG93Q29sb3IuZ3JlZW4oKSwgc2hh
ZG93Q29sb3IuYmx1ZSgpLCBzaGFkb3dDb2xvci5hbHBoYSgpICogZmlsbENvbG9yLmFscGhhKCkg
LyAyNTUpOwotICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3Ioc2hhZG93RmlsbENvbG9yKTsK
KyAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHNoYWRvd0ZpbGxDb2xvciwgZmlsbENvbG9y
U3BhY2UpOwogICAgICAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24oY2dDb250ZXh0LCBwb2lu
dC54KCkgKyBzaGFkb3dTaXplLndpZHRoKCksIHBvaW50LnkoKSArIHNoYWRvd1NpemUuaGVpZ2h0
KCkpOwogICAgICAgICBDR0NvbnRleHRTaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNnQ29udGV4dCwg
Z2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVt
R2x5cGhzKTsKICAgICAgICAgaWYgKGZvbnQtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKSkgewogICAg
ICAgICAgICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4dCwgcG9pbnQueCgpICsg
c2hhZG93U2l6ZS53aWR0aCgpICsgZm9udC0+c3ludGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55
KCkgKyBzaGFkb3dTaXplLmhlaWdodCgpKTsKICAgICAgICAgICAgIENHQ29udGV4dFNob3dHbHlw
aHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBo
QnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMpOwogICAgICAgICB9Ci0gICAgICAgIGNv
bnRleHQtPnNldEZpbGxDb2xvcihmaWxsQ29sb3IpOworICAgICAgICBjb250ZXh0LT5zZXRGaWxs
Q29sb3IoZmlsbENvbG9yLCBmaWxsQ29sb3JTcGFjZSk7CiAgICAgfQogCiAgICAgQ0dDb250ZXh0
U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4dCwgcG9pbnQueCgpLCBwb2ludC55KCkpOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQ
cml2YXRlUVRLaXQubW0JKHJldmlzaW9uIDUwNTcwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0JKHdvcmtpbmcgY29weSkKQEAgLTEx
NTgsMTAgKzExNTgsMTAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBhaW50KEdyYXBoaWNz
QwogICAgICAgICAgICAgVGV4dFJ1biB0ZXh0UnVuKHRleHQuY2hhcmFjdGVycygpLCB0ZXh0Lmxl
bmd0aCgpKTsKICAgICAgICAgICAgIGNvbnN0IENvbG9yIGNvbG9yKDI1NSwgMCwgMCk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMS4wZiwgLTEuMGYpKTsgICAgCi0gICAg
ICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihjb2xvcik7CisgICAgICAgICAgICBjb250
ZXh0LT5zZXRTdHJva2VDb2xvcihjb2xvciwgc3R5bGVUb1VzZS0+Y29sb3JTcGFjZSgpKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnNldEZpbGxDb2xvcihjb2xvcik7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29s
b3IoY29sb3IsIHN0eWxlVG9Vc2UtPmNvbG9yU3BhY2UoKSk7CiAgICAgICAgICAgICBjb250ZXh0
LT5kcmF3VGV4dChzdHlsZVRvVXNlLT5mb250KCksIHRleHRSdW4sIEludFBvaW50KDIsIC0zKSk7
CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCShyZXZp
c2lvbiA1MDU3MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCB2b2lkIEVsbGlwc2lzQm94OjpwYWludChSZW5kZXJP
YmplY3Q6OlBhCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9yZW5kZXJlci0+c3R5bGUobV9m
aXJzdExpbmUpOwogICAgIENvbG9yIHRleHRDb2xvciA9IHN0eWxlLT5jb2xvcigpOwogICAgIGlm
ICh0ZXh0Q29sb3IgIT0gY29udGV4dC0+ZmlsbENvbG9yKCkpCi0gICAgICAgIGNvbnRleHQtPnNl
dEZpbGxDb2xvcih0ZXh0Q29sb3IpOworICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IodGV4
dENvbG9yLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKICAgICBib29sIHNldFNoYWRvdyA9IGZhbHNl
OwogICAgIGlmIChzdHlsZS0+dGV4dFNoYWRvdygpKSB7CiAgICAgICAgIGNvbnRleHQtPnNldFNo
YWRvdyhJbnRTaXplKHN0eWxlLT50ZXh0U2hhZG93KCktPngsIHN0eWxlLT50ZXh0U2hhZG93KCkt
PnkpLApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDUwNTcw
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk4OCwxOCArOTg4LDE4IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnRUZXh0RGVjb3Jh
dGlvbnMKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHBhaW50VW5kZXJsaW5lKSB7
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IodW5kZXJsaW5lKTsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcih1bmRlcmxpbmUsIHJlbmRlcmVy
KCktPnN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0
U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgICAgICAgICAgICAgIC8vIExlYXZlIG9uZSBw
aXhlbCBvZiB3aGl0ZSBiZXR3ZWVuIHRoZSBiYXNlbGluZSBhbmQgdGhlIHVuZGVybGluZS4KICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3TGluZUZvclRleHQoSW50UG9pbnQodHgsIHR5ICsg
YmFzZWxpbmVQb3MgKyAxKSwgdywgaXNQcmludGluZyk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBpZiAocGFpbnRPdmVybGluZSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0
cm9rZUNvbG9yKG92ZXJsaW5lKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VD
b2xvcihvdmVybGluZSwgcmVuZGVyZXIoKS0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7CiAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZHJhd0xpbmVGb3JUZXh0KEludFBvaW50KHR4LCB0eSksIHcsIGlz
UHJpbnRpbmcpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHBhaW50TGluZVRocm91
Z2gpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihsaW5ldGhyb3Vn
aCk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IobGluZXRocm91Z2gs
IHJlbmRlcmVyKCktPnN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgICAgICAgICAgICAgY29u
dGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmRyYXdMaW5lRm9yVGV4dChJbnRQb2ludCh0eCwgdHkgKyAyICogYmFzZWxpbmVQb3MgLyAz
KSwgdywgaXNQcmludGluZyk7CiAgICAgICAgICAgICB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcAkocmV2aXNpb24gNTA1NzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDcgKzIxNCw3IEBAIENvbG9yIGNv
cnJlY3RlZFRleHRDb2xvcihDb2xvciB0ZXh0Q29sb3IKICAgICByZXR1cm4gdGV4dENvbG9yLmxp
Z2h0KCk7CiB9CiAKLXZvaWQgdXBkYXRlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgQ29sb3ImIGZpbGxDb2xvciwgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9y
LCBmbG9hdCBzdHJva2VUaGlja25lc3MpCit2b2lkIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IsIGNvbnN0IENvbG9y
JiBzdHJva2VDb2xvciwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzLCBDU1NDb2xvclNwYWNlIGNvbG9y
U3BhY2UpCiB7CiAgICAgaW50IG1vZGUgPSBjb250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKTsKICAg
ICBpZiAoc3Ryb2tlVGhpY2tuZXNzID4gMCkgewpAQCAtMjI1LDEyICsyMjUsMTMgQEAgdm9pZCB1
cGRhdGVHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZQogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIGlmIChtb2RlICYgY1RleHRGaWxsICYmIGZpbGxDb2xvciAhPSBjb250ZXh0LT5maWxs
Q29sb3IoKSkKLSAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGZpbGxDb2xvcik7CisgICAg
aWYgKG1vZGUgJiBjVGV4dEZpbGwgJiYgKGZpbGxDb2xvciAhPSBjb250ZXh0LT5maWxsQ29sb3Io
KQorICAgICAgICB8fCBjb2xvclNwYWNlICE9IGNvbnRleHQtPmNnVG9DU1NDb2xvclNwYWNlKGNv
bnRleHQtPmZpbGxDb2xvclNwYWNlKCkpKSkKKyAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9y
KGZpbGxDb2xvciwgY29sb3JTcGFjZSk7CiAKICAgICBpZiAobW9kZSAmIGNUZXh0U3Ryb2tlKSB7
CiAgICAgICAgIGlmIChzdHJva2VDb2xvciAhPSBjb250ZXh0LT5zdHJva2VDb2xvcigpKQotICAg
ICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IpOworICAgICAgICAg
ICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IsIGNvbG9yU3BhY2UpOwogICAg
ICAgICBpZiAoc3Ryb2tlVGhpY2tuZXNzICE9IGNvbnRleHQtPnN0cm9rZVRoaWNrbmVzcygpKQog
ICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRoaWNrbmVzcyk7
CiAgICAgfQpAQCAtMjU3LDYgKzI1OCw3IEBAIGJvb2wgSW5saW5lVGV4dEJveDo6bm9kZUF0UG9p
bnQoY29uc3QgSGkKIHN0YXRpYyB2b2lkIHBhaW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwg
aW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBjb25zdCBJbnRQb2ludCYgdGV4dE9yaWdp
biwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsIFNoYWRvd0RhdGEqIHNoYWRvdywgYm9vbCBz
dHJva2VkKQogewogICAgIENvbG9yIGZpbGxDb2xvciA9IGNvbnRleHQtPmZpbGxDb2xvcigpOwor
ICAgIENTU0NvbG9yU3BhY2UgZmlsbENvbG9yU3BhY2UgPSBjb250ZXh0LT5jZ1RvQ1NTQ29sb3JT
cGFjZShjb250ZXh0LT5maWxsQ29sb3JTcGFjZSgpKTsKICAgICBib29sIG9wYXF1ZSA9IGZpbGxD
b2xvci5hbHBoYSgpID09IDI1NTsKICAgICBpZiAoIW9wYXF1ZSkKICAgICAgICAgY29udGV4dC0+
c2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7CkBAIC0yODEsNyArMjgzLDcgQEAgc3RhdGljIHZv
aWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpYwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgY29udGV4dC0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29s
b3IpOwogICAgICAgICB9IGVsc2UgaWYgKCFvcGFxdWUpCi0gICAgICAgICAgICBjb250ZXh0LT5z
ZXRGaWxsQ29sb3IoZmlsbENvbG9yKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xv
cihmaWxsQ29sb3IsIGZpbGxDb2xvclNwYWNlKTsKIAogICAgICAgICBpZiAoc3RhcnRPZmZzZXQg
PD0gZW5kT2Zmc2V0KQogICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RleHQoZm9udCwgdGV4dFJ1
biwgdGV4dE9yaWdpbiArIGV4dHJhT2Zmc2V0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKQEAg
LTQ2NSw3ICs0NjcsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6
CiAgICAgICAgIGlmICh0ZXh0U3Ryb2tlV2lkdGggPiAwKQogICAgICAgICAgICAgY29udGV4dC0+
c2F2ZSgpOwogCi0gICAgICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb250ZXh0LCB0ZXh0Rmls
bENvbG9yLCB0ZXh0U3Ryb2tlQ29sb3IsIHRleHRTdHJva2VXaWR0aCk7CisgICAgICAgIHVwZGF0
ZUdyYXBoaWNzQ29udGV4dChjb250ZXh0LCB0ZXh0RmlsbENvbG9yLCB0ZXh0U3Ryb2tlQ29sb3Is
IHRleHRTdHJva2VXaWR0aCwgc3R5bGVUb1VzZS0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAgaWYg
KCFwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHkgfHwgZVBvcyA8PSBzUG9zKSB7CiAgICAgICAg
ICAgICAvLyBGSVhNRTogVHJ1bmNhdGUgcmlnaHQtdG8tbGVmdCB0ZXh0IGNvcnJlY3RseS4KICAg
ICAgICAgICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnRleHQsIGZvbnQsIHRleHRSdW4sIDAs
IG1fdHJ1bmNhdGlvbiA9PSBjTm9UcnVuY2F0aW9uID8gbV9sZW4gOiBtX3RydW5jYXRpb24sIHRl
eHRPcmlnaW4sIG1feCArIHR4LCBtX3kgKyB0eSwgd2lkdGgoKSwgaGVpZ2h0KCksIHRleHRTaGFk
b3csIHRleHRTdHJva2VXaWR0aCA+IDApOwpAQCAtNDgxLDcgKzQ4Myw3IEBAIHZvaWQgSW5saW5l
VGV4dEJveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjoKICAgICAgICAgaWYgKHNlbGVjdGlvblN0cm9r
ZVdpZHRoID4gMCkKICAgICAgICAgICAgIGNvbnRleHQtPnNhdmUoKTsKIAotICAgICAgICB1cGRh
dGVHcmFwaGljc0NvbnRleHQoY29udGV4dCwgc2VsZWN0aW9uRmlsbENvbG9yLCBzZWxlY3Rpb25T
dHJva2VDb2xvciwgc2VsZWN0aW9uU3Ryb2tlV2lkdGgpOworICAgICAgICB1cGRhdGVHcmFwaGlj
c0NvbnRleHQoY29udGV4dCwgc2VsZWN0aW9uRmlsbENvbG9yLCBzZWxlY3Rpb25TdHJva2VDb2xv
ciwgc2VsZWN0aW9uU3Ryb2tlV2lkdGgsIHN0eWxlVG9Vc2UtPmNvbG9yU3BhY2UoKSk7CiAgICAg
ICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnRleHQsIGZvbnQsIHRleHRSdW4sIHNQb3MsIGVQ
b3MsIHRleHRPcmlnaW4sIG1feCArIHR4LCBtX3kgKyB0eSwgd2lkdGgoKSwgaGVpZ2h0KCksIHNl
bGVjdGlvblNoYWRvdywgc2VsZWN0aW9uU3Ryb2tlV2lkdGggPiAwKTsKIAogICAgICAgICBpZiAo
c2VsZWN0aW9uU3Ryb2tlV2lkdGggPiAwKQpAQCAtNDkwLDcgKzQ5Miw3IEBAIHZvaWQgSW5saW5l
VGV4dEJveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjoKIAogICAgIC8vIFBhaW50IGRlY29yYXRpb25z
CiAgICAgaWYgKGQgIT0gVEROT05FICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlU2Vs
ZWN0aW9uICYmIHN0eWxlVG9Vc2UtPmh0bWxIYWNrcygpKSB7Ci0gICAgICAgIGNvbnRleHQtPnNl
dFN0cm9rZUNvbG9yKHN0eWxlVG9Vc2UtPmNvbG9yKCkpOworICAgICAgICBjb250ZXh0LT5zZXRT
dHJva2VDb2xvcihzdHlsZVRvVXNlLT5jb2xvcigpLCBzdHlsZVRvVXNlLT5jb2xvclNwYWNlKCkp
OwogICAgICAgICBwYWludERlY29yYXRpb24oY29udGV4dCwgdHgsIHR5LCBkLCB0ZXh0U2hhZG93
KTsKICAgICB9CiAKQEAgLTU2MSwxMyArNTYzLDEzIEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFp
bnRTZWxlY3Rpb24oR3JhcGgKICAgICAgICAgYyA9IENvbG9yKDB4ZmYgLSBjLnJlZCgpLCAweGZm
IC0gYy5ncmVlbigpLCAweGZmIC0gYy5ibHVlKCkpOwogCiAgICAgY29udGV4dC0+c2F2ZSgpOwot
ICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb250ZXh0LCBjLCBjLCAwKTsgIC8vIERvbid0IGRy
YXcgdGV4dCBhdCBhbGwhCisgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIGMsIGMs
IDAsIHN0eWxlLT5jb2xvclNwYWNlKCkpOyAgLy8gRG9uJ3QgZHJhdyB0ZXh0IGF0IGFsbCEKICAg
ICBpbnQgeSA9IHNlbGVjdGlvblRvcCgpOwogICAgIGludCBoID0gc2VsZWN0aW9uSGVpZ2h0KCk7
CiAgICAgY29udGV4dC0+Y2xpcChJbnRSZWN0KG1feCArIHR4LCB5ICsgdHksIG1fd2lkdGgsIGgp
KTsKICAgICBjb250ZXh0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBUZXh0UnVuKHRleHRS
ZW5kZXJlcigpLT50ZXh0KCktPmNoYXJhY3RlcnMoKSArIG1fc3RhcnQsIG1fbGVuLCB0ZXh0UmVu
ZGVyZXIoKS0+YWxsb3dUYWJzKCksIHRleHRQb3MoKSwgbV90b0FkZCwgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uKCkgPT0gUlRMLCBtX2Rpck92ZXJyaWRlIHx8
IHN0eWxlLT52aXN1YWxseU9yZGVyZWQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW50UG9pbnQobV94ICsgdHgsIHkgKyB0eSksIGgsIGMsIHNQb3MsIGVQb3MpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KG1feCArIHR4LCB5ICsgdHkp
LCBoLCBjLCBzdHlsZS0+Y29sb3JTcGFjZSgpLCBzUG9zLCBlUG9zKTsKICAgICBjb250ZXh0LT5y
ZXN0b3JlKCk7CiB9CiAKQEAgLTU4NCwxMyArNTg2LDEzIEBAIHZvaWQgSW5saW5lVGV4dEJveDo6
cGFpbnRDb21wb3NpdGlvbkJhY2sKIAogICAgIENvbG9yIGMgPSBDb2xvcigyMjUsIDIyMSwgODUp
OwogICAgIAotICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb250ZXh0LCBjLCBjLCAwKTsgLy8g
RG9uJ3QgZHJhdyB0ZXh0IGF0IGFsbCEKKyAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQoY29udGV4
dCwgYywgYywgMCwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7IC8vIERvbid0IGRyYXcgdGV4dCBhdCBh
bGwhCiAKICAgICBpbnQgeSA9IHNlbGVjdGlvblRvcCgpOwogICAgIGludCBoID0gc2VsZWN0aW9u
SGVpZ2h0KCk7CiAgICAgY29udGV4dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwgVGV4dFJ1
bih0ZXh0UmVuZGVyZXIoKS0+dGV4dCgpLT5jaGFyYWN0ZXJzKCkgKyBtX3N0YXJ0LCBtX2xlbiwg
dGV4dFJlbmRlcmVyKCktPmFsbG93VGFicygpLCB0ZXh0UG9zKCksIG1fdG9BZGQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uKCkgPT0gUlRMLCBtX2Rpck92ZXJy
aWRlIHx8IHN0eWxlLT52aXN1YWxseU9yZGVyZWQoKSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSW50UG9pbnQobV94ICsgdHgsIHkgKyB0eSksIGgsIGMsIHNQb3MsIGVQb3Mp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KG1feCArIHR4LCB5
ICsgdHkpLCBoLCBjLCBzdHlsZS0+Y29sb3JTcGFjZSgpLCBzUG9zLCBlUG9zKTsKICAgICBjb250
ZXh0LT5yZXN0b3JlKCk7CiB9CiAKQEAgLTY3NSwxOCArNjc3LDE4IEBAIHZvaWQgSW5saW5lVGV4
dEJveDo6cGFpbnREZWNvcmF0aW9uKEdyYXAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChkZWNv
ICYgVU5ERVJMSU5FKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcih1bmRl
cmxpbmUpOworICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IodW5kZXJsaW5lLCBy
ZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xvclNwYWNlKCkpOwogICAgICAgICAgICAgY29udGV4dC0+
c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgICAgICAgICAgLy8gTGVhdmUgb25lIHBp
eGVsIG9mIHdoaXRlIGJldHdlZW4gdGhlIGJhc2VsaW5lIGFuZCB0aGUgdW5kZXJsaW5lLgogICAg
ICAgICAgICAgY29udGV4dC0+ZHJhd0xpbmVGb3JUZXh0KEludFBvaW50KHR4LCB0eSArIGJhc2Vs
aW5lICsgMSksIHdpZHRoLCBpc1ByaW50aW5nKTsKICAgICAgICAgfQogICAgICAgICBpZiAoZGVj
byAmIE9WRVJMSU5FKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvdmVy
bGluZSk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvdmVybGluZSwgcmVu
ZGVyZXIoKS0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnNl
dFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdMaW5l
Rm9yVGV4dChJbnRQb2ludCh0eCwgdHkpLCB3aWR0aCwgaXNQcmludGluZyk7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKGRlY28gJiBMSU5FX1RIUk9VR0gpIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PnNldFN0cm9rZUNvbG9yKGxpbmV0aHJvdWdoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFN0
cm9rZUNvbG9yKGxpbmV0aHJvdWdoLCByZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xvclNwYWNlKCkp
OwogICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAg
ICAgICAgICAgY29udGV4dC0+ZHJhd0xpbmVGb3JUZXh0KEludFBvaW50KHR4LCB0eSArIDIgKiBi
YXNlbGluZSAvIDMpLCB3aWR0aCwgaXNQcmludGluZyk7CiAgICAgICAgIH0KQEAgLTc4Myw5ICs3
ODUsOSBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyCiAgICAgICAg
ICAgICByZW5kZXJlcigpLT50aGVtZSgpLT5wbGF0Zm9ybUFjdGl2ZVRleHRTZWFyY2hIaWdobGln
aHRDb2xvcigpIDoKICAgICAgICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCktPnBsYXRmb3JtSW5h
Y3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKTsKICAgICAgICAgcHQtPnNhdmUoKTsKLSAg
ICAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KHB0LCBjb2xvciwgY29sb3IsIDApOyAgLy8gRG9u
J3QgZHJhdyB0ZXh0IGF0IGFsbCEKKyAgICAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KHB0LCBj
b2xvciwgY29sb3IsIDAsIHN0eWxlLT5jb2xvclNwYWNlKCkpOyAgLy8gRG9uJ3QgZHJhdyB0ZXh0
IGF0IGFsbCEKICAgICAgICAgcHQtPmNsaXAoSW50UmVjdCh0eCArIG1feCwgdHkgKyB5LCBtX3dp
ZHRoLCBoKSk7Ci0gICAgICAgIHB0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBydW4sIHN0
YXJ0UG9pbnQsIGgsIGNvbG9yLCBzUG9zLCBlUG9zKTsKKyAgICAgICAgcHQtPmRyYXdIaWdobGln
aHRGb3JUZXh0KGZvbnQsIHJ1biwgc3RhcnRQb2ludCwgaCwgY29sb3IsIHN0eWxlLT5jb2xvclNw
YWNlKCksIHNQb3MsIGVQb3MpOwogICAgICAgICBwdC0+cmVzdG9yZSgpOwogICAgIH0KIH0KQEAg
LTkxMSw3ICs5MTMsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25VbmRl
CiAgICAgc3RhcnQgKz0gMTsKICAgICB3aWR0aCAtPSAyOwogCi0gICAgY3R4LT5zZXRTdHJva2VD
b2xvcih1bmRlcmxpbmUuY29sb3IpOworICAgIGN0eC0+c2V0U3Ryb2tlQ29sb3IodW5kZXJsaW5l
LmNvbG9yLCByZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xvclNwYWNlKCkpOwogICAgIGN0eC0+c2V0
U3Ryb2tlVGhpY2tuZXNzKGxpbmVUaGlja25lc3MpOwogICAgIGN0eC0+ZHJhd0xpbmVGb3JUZXh0
KEludFBvaW50KHR4ICsgc3RhcnQsIHR5ICsgaGVpZ2h0KCkgLSBsaW5lVGhpY2tuZXNzKSwgd2lk
dGgsIHRleHRSZW5kZXJlcigpLT5kb2N1bWVudCgpLT5wcmludGluZygpKTsKIH0KSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHJldmlzaW9uIDUwNTcwKQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIGNv
bnN0IHVuc2lnbmVkIHNob3J0IGNOb1RydW5jYXRpb24gPSBVU0gKIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IGNGdWxsVHJ1bmNhdGlvbiA9IFVTSFJUX01BWCAtIDE7CiAKIC8vIEhlbHBlciBmdW5jdGlv
bnMgc2hhcmVkIGJ5IElubGluZVRleHRCb3ggLyBTVkdSb290SW5saW5lQm94Ci12b2lkIHVwZGF0
ZUdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IENvbG9yJiBm
aWxsQ29sb3IsIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvciwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNz
KTsKK3ZvaWQgdXBkYXRlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgQ29sb3ImIGZpbGxDb2xvciwgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yLCBmbG9hdCBz
dHJva2VUaGlja25lc3MsIENTU0NvbG9yU3BhY2UgY29sb3JTcGFjZSk7CiBDb2xvciBjb3JyZWN0
ZWRUZXh0Q29sb3IoQ29sb3IgdGV4dENvbG9yLCBDb2xvciBiYWNrZ3JvdW5kQ29sb3IpOwogCiBj
bGFzcyBJbmxpbmVUZXh0Qm94IDogcHVibGljIElubGluZVJ1bkJveCB7CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA1MDU3MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExNiw3ICsyMTE2LDcgQEAgSW50
UmVjdCBSZW5kZXJCbG9jazo6ZmlsbEhvcml6b250YWxTZWxlYwogICAgICAgICByZXR1cm4gSW50
UmVjdCgpOwogICAgIEludFJlY3QgZ2FwUmVjdCh4UG9zLCB5UG9zLCB3aWR0aCwgaGVpZ2h0KTsK
ICAgICBpZiAocGFpbnRJbmZvICYmIHNlbE9iai0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJ
U0lCTEUpCi0gICAgICAgIHBhaW50SW5mby0+Y29udGV4dC0+ZmlsbFJlY3QoZ2FwUmVjdCwgc2Vs
T2JqLT5zZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgICAgIHBhaW50SW5mby0+Y29u
dGV4dC0+ZmlsbFJlY3QoZ2FwUmVjdCwgc2VsT2JqLT5zZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSwgc2VsT2JqLT5zdHlsZSgpLT5jb2xvclNwYWNlKCkpOwogICAgIHJldHVybiBnYXBSZWN0Owog
fQogCkBAIC0yMTM3LDcgKzIxMzcsNyBAQCBJbnRSZWN0IFJlbmRlckJsb2NrOjpmaWxsVmVydGlj
YWxTZWxlY3RpCiAKICAgICBJbnRSZWN0IGdhcFJlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0
KTsKICAgICBpZiAocGFpbnRJbmZvKQotICAgICAgICBwYWludEluZm8tPmNvbnRleHQtPmZpbGxS
ZWN0KGdhcFJlY3QsIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpKTsKKyAgICAgICAgcGFpbnRJ
bmZvLT5jb250ZXh0LT5maWxsUmVjdChnYXBSZWN0LCBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKICAgICByZXR1cm4gZ2FwUmVjdDsKIH0KIApAQCAt
MjE1Myw3ICsyMTUzLDcgQEAgSW50UmVjdCBSZW5kZXJCbG9jazo6ZmlsbExlZnRTZWxlY3Rpb25H
YQogCiAgICAgSW50UmVjdCBnYXBSZWN0KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCk7CiAgICAg
aWYgKHBhaW50SW5mbykKLSAgICAgICAgcGFpbnRJbmZvLT5jb250ZXh0LT5maWxsUmVjdChnYXBS
ZWN0LCBzZWxPYmotPnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpKTsKKyAgICAgICAgcGFpbnRJ
bmZvLT5jb250ZXh0LT5maWxsUmVjdChnYXBSZWN0LCBzZWxPYmotPnNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcigpLCBzZWxPYmotPnN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgcmV0dXJuIGdh
cFJlY3Q7CiB9CiAKQEAgLTIxNjksNyArMjE2OSw3IEBAIEludFJlY3QgUmVuZGVyQmxvY2s6OmZp
bGxSaWdodFNlbGVjdGlvbkcKIAogICAgIEludFJlY3QgZ2FwUmVjdChsZWZ0LCB0b3AsIHdpZHRo
LCBoZWlnaHQpOwogICAgIGlmIChwYWludEluZm8pCi0gICAgICAgIHBhaW50SW5mby0+Y29udGV4
dC0+ZmlsbFJlY3QoZ2FwUmVjdCwgc2VsT2JqLT5zZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSk7
CisgICAgICAgIHBhaW50SW5mby0+Y29udGV4dC0+ZmlsbFJlY3QoZ2FwUmVjdCwgc2VsT2JqLT5z
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSwgc2VsT2JqLT5zdHlsZSgpLT5jb2xvclNwYWNlKCkp
OwogICAgIHJldHVybiBnYXBSZWN0OwogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiA1MDU3MCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQxLDE0ICs0
NDEsMTQgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZQogICAgICAg
ICAgICAgaWYgKGJhc2VDb2xvci5hbHBoYSgpID4gMCkgewogICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnNhdmUoKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRp
b24oQ29tcG9zaXRlQ29weSk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QocmVj
dCwgYmFzZUNvbG9yKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5maWxsUmVjdChyZWN0LCBi
YXNlQ29sb3IsIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4
dC0+cmVzdG9yZSgpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgY29udGV4
dC0+Y2xlYXJSZWN0KHJlY3QpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGJnQ29sb3IuaXNW
YWxpZCgpICYmIGJnQ29sb3IuYWxwaGEoKSA+IDApCi0gICAgICAgICAgICBjb250ZXh0LT5maWxs
UmVjdChyZWN0LCBiZ0NvbG9yKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KHJlY3Qs
IGJnQ29sb3IsIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgfQogCiAgICAgLy8gbm8gcHJv
Z3Jlc3NpdmUgbG9hZGluZyBvZiB0aGUgYmFja2dyb3VuZCBpbWFnZQpAQCAtMTI2OSw5ICsxMjY5
LDkgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkbwogCiAgICAgICAg
ICAgICBpZiAoaG9sZVJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGhhc0Jv
cmRlclJhZGl1cykKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZmlsbFJvdW5kZWRSZWN0
KHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCwgc2hhZG93
Q29sb3IpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5maWxsUm91bmRlZFJlY3QocmVj
dCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0LCBzaGFkb3dDb2xv
ciwgcy0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KHJlY3QsIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QocmVjdCwgc2hhZG93Q29sb3IsIHMtPmNvbG9yU3Bh
Y2UoKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBpZiAoIWJlZ2luKSB7CkBAIC0xMzIwLDcgKzEzMjAsNyBAQCB2b2lkIFJlbmRlckJveE1v
ZGVsT2JqZWN0OjpwYWludEJveFNoYWRvCiAgICAgICAgICAgICAgICAgY29udGV4dC0+YWRkUGF0
aChQYXRoOjpjcmVhdGVSZWN0YW5nbGUoaG9sZVJlY3QpKTsKIAogICAgICAgICAgICAgY29udGV4
dC0+c2V0RmlsbFJ1bGUoUlVMRV9FVkVOT0REKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldEZp
bGxDb2xvcihmaWxsQ29sb3IpOworICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGZp
bGxDb2xvciwgcy0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnNldFNoYWRv
dyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKICAgICAgICAgICAgIGNv
bnRleHQtPmZpbGxQYXRoKCk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVV
cGxvYWRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
aWxlVXBsb2FkQ29udHJvbC5jcHAJKHJldmlzaW9uIDUwNTcwKQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsNyAr
MjA0LDcgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplYwogICAgICAg
ICAgICAgKyBidXR0b25SZW5kZXJlci0+bWFyZ2luVG9wKCkgKyBidXR0b25SZW5kZXJlci0+Ym9y
ZGVyVG9wKCkgKyBidXR0b25SZW5kZXJlci0+cGFkZGluZ1RvcCgpCiAgICAgICAgICAgICArIGJ1
dHRvblJlbmRlcmVyLT5iYXNlbGluZVBvc2l0aW9uKHRydWUsIGZhbHNlKTsKIAotICAgICAgICBw
YWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9yKHN0eWxlKCktPmNvbG9yKCkpOworICAgICAg
ICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9yKHN0eWxlKCktPmNvbG9yKCksIHN0eWxl
KCktPmNvbG9yU3BhY2UoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBEcmF3IHRoZSBmaWxlbmFt
ZQogICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0JpZGlUZXh0KHN0eWxlKCktPmZvbnQo
KSwgdGV4dFJ1biwgSW50UG9pbnQodGV4dFgsIHRleHRZKSk7CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGcmFtZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRnJhbWVTZXQuY3BwCShyZXZpc2lvbiA1MDU3MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZyYW1lU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMTMgKzg3LDE0IEBAIHZv
aWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50Q29sdW1uQm9yZGVyKGMKICAgICAKICAgICAvLyBGaWxs
IGZpcnN0LgogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0
OwotICAgIGNvbnRleHQtPmZpbGxSZWN0KGJvcmRlclJlY3QsIGZyYW1lU2V0KCktPmhhc0JvcmRl
ckNvbG9yKCkgPyBzdHlsZSgpLT5ib3JkZXJMZWZ0Q29sb3IoKSA6IGJvcmRlckZpbGxDb2xvcigp
KTsKKyAgICBDU1NDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBzdHlsZSgpLT5jb2xvclNwYWNlKCk7
CisgICAgY29udGV4dC0+ZmlsbFJlY3QoYm9yZGVyUmVjdCwgZnJhbWVTZXQoKS0+aGFzQm9yZGVy
Q29sb3IoKSA/IHN0eWxlKCktPmJvcmRlckxlZnRDb2xvcigpIDogYm9yZGVyRmlsbENvbG9yKCks
IGNvbG9yU3BhY2UpOwogICAgIAogICAgIC8vIE5vdyBzdHJva2UgdGhlIGVkZ2VzIGJ1dCBvbmx5
IGlmIHdlIGhhdmUgZW5vdWdoIHJvb20gdG8gcGFpbnQgYm90aCBlZGdlcyB3aXRoIGEgbGl0dGxl
CiAgICAgLy8gYml0IG9mIHRoZSBmaWxsIGNvbG9yIHNob3dpbmcgdGhyb3VnaC4KICAgICBpZiAo
Ym9yZGVyUmVjdC53aWR0aCgpID49IDMpIHsKLSAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QoSW50
UmVjdChib3JkZXJSZWN0LnRvcExlZnQoKSwgSW50U2l6ZSgxLCBoZWlnaHQoKSkpLCBib3JkZXJT
dGFydEVkZ2VDb2xvcigpKTsKLSAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChib3Jk
ZXJSZWN0LnRvcFJpZ2h0KCksIEludFNpemUoMSwgaGVpZ2h0KCkpKSwgYm9yZGVyRW5kRWRnZUNv
bG9yKCkpOworICAgICAgICBjb250ZXh0LT5maWxsUmVjdChJbnRSZWN0KGJvcmRlclJlY3QudG9w
TGVmdCgpLCBJbnRTaXplKDEsIGhlaWdodCgpKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKCksIGNv
bG9yU3BhY2UpOworICAgICAgICBjb250ZXh0LT5maWxsUmVjdChJbnRSZWN0KGJvcmRlclJlY3Qu
dG9wUmlnaHQoKSwgSW50U2l6ZSgxLCBoZWlnaHQoKSkpLCBib3JkZXJFbmRFZGdlQ29sb3IoKSwg
Y29sb3JTcGFjZSk7CiAgICAgfQogfQogCkBAIC0xMDYsMTMgKzEwNywxNCBAQCB2b2lkIFJlbmRl
ckZyYW1lU2V0OjpwYWludFJvd0JvcmRlcihjb25zCiAgICAgCiAgICAgLy8gRmlsbCBmaXJzdC4K
ICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dDsKLSAgICBj
b250ZXh0LT5maWxsUmVjdChib3JkZXJSZWN0LCBmcmFtZVNldCgpLT5oYXNCb3JkZXJDb2xvcigp
ID8gc3R5bGUoKS0+Ym9yZGVyTGVmdENvbG9yKCkgOiBib3JkZXJGaWxsQ29sb3IoKSk7CisgICAg
Q1NTQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gc3R5bGUoKS0+Y29sb3JTcGFjZSgpOworICAgIGNv
bnRleHQtPmZpbGxSZWN0KGJvcmRlclJlY3QsIGZyYW1lU2V0KCktPmhhc0JvcmRlckNvbG9yKCkg
PyBzdHlsZSgpLT5ib3JkZXJMZWZ0Q29sb3IoKSA6IGJvcmRlckZpbGxDb2xvcigpLCBjb2xvclNw
YWNlKTsKIAogICAgIC8vIE5vdyBzdHJva2UgdGhlIGVkZ2VzIGJ1dCBvbmx5IGlmIHdlIGhhdmUg
ZW5vdWdoIHJvb20gdG8gcGFpbnQgYm90aCBlZGdlcyB3aXRoIGEgbGl0dGxlCiAgICAgLy8gYml0
IG9mIHRoZSBmaWxsIGNvbG9yIHNob3dpbmcgdGhyb3VnaC4KICAgICBpZiAoYm9yZGVyUmVjdC5o
ZWlnaHQoKSA+PSAzKSB7Ci0gICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KEludFJlY3QoYm9yZGVy
UmVjdC50b3BMZWZ0KCksIEludFNpemUod2lkdGgoKSwgMSkpLCBib3JkZXJTdGFydEVkZ2VDb2xv
cigpKTsKLSAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChib3JkZXJSZWN0LmJvdHRv
bUxlZnQoKSwgSW50U2l6ZSh3aWR0aCgpLCAxKSksIGJvcmRlckVuZEVkZ2VDb2xvcigpKTsKKyAg
ICAgICAgY29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChib3JkZXJSZWN0LnRvcExlZnQoKSwgSW50
U2l6ZSh3aWR0aCgpLCAxKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKCksIGNvbG9yU3BhY2UpOwor
ICAgICAgICBjb250ZXh0LT5maWxsUmVjdChJbnRSZWN0KGJvcmRlclJlY3QuYm90dG9tTGVmdCgp
LCBJbnRTaXplKHdpZHRoKCksIDEpKSwgYm9yZGVyRW5kRWRnZUNvbG9yKCksIGNvbG9yU3BhY2Up
OwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24g
NTA1NzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5Miw3ICszOTIsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKFBh
aW50SW5mCiAKICAgICAgICAgICAgIGlmICghbV9hbHRUZXh0LmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgICAgIFN0cmluZyB0ZXh0ID0gZG9jdW1lbnQoKS0+ZGlzcGxheVN0cmluZ01vZGlmaWVk
QnlFbmNvZGluZyhtX2FsdFRleHQpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxD
b2xvcihzdHlsZSgpLT5jb2xvcigpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxs
Q29sb3Ioc3R5bGUoKS0+Y29sb3IoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAg
ICAgICAgICBpbnQgYXggPSB0eCArIGxlZnRCb3JkZXIgKyBsZWZ0UGFkOwogICAgICAgICAgICAg
ICAgIGludCBheSA9IHR5ICsgdG9wQm9yZGVyICsgdG9wUGFkOwogICAgICAgICAgICAgICAgIGNv
bnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gNTA1NzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw4IEBAIHZvaWQgUmVu
ZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZCgKICAgICAgICAgICAgIHRleHRDb2xvciA9
IHRoZW1lKCktPmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpOwogICAg
IH0KIAotICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3IodGV4dENvbG9yKTsKKyAg
ICBDU1NDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpID8gZWxl
bWVudC0+cmVuZGVyU3R5bGUoKS0+Y29sb3JTcGFjZSgpIDogc3R5bGUoKS0+Y29sb3JTcGFjZSgp
OworICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3IodGV4dENvbG9yLCBjb2xvclNw
YWNlKTsKIAogICAgIEZvbnQgaXRlbUZvbnQgPSBzdHlsZSgpLT5mb250KCk7CiAgICAgaWYgKGlz
T3B0aW9uR3JvdXBFbGVtZW50KGVsZW1lbnQpKSB7CkBAIC0zNTgsOSArMzU5LDEwIEBAIHZvaWQg
UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZCgKIAogICAgIC8vIERyYXcgdGhlIGJh
Y2tncm91bmQgZm9yIHRoaXMgbGlzdCBib3ggaXRlbQogICAgIGlmICghZWxlbWVudC0+cmVuZGVy
U3R5bGUoKSB8fCBlbGVtZW50LT5yZW5kZXJTdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gSElEREVO
KSB7CisgICAgICAgIENTU0NvbG9yU3BhY2UgY29sb3JTcGFjZSA9IGVsZW1lbnQtPnJlbmRlclN0
eWxlKCkgPyBlbGVtZW50LT5yZW5kZXJTdHlsZSgpLT5jb2xvclNwYWNlKCkgOiBEZWZhdWx0Owog
ICAgICAgICBJbnRSZWN0IGl0ZW1SZWN0ID0gaXRlbUJvdW5kaW5nQm94UmVjdCh0eCwgdHksIGxp
c3RJbmRleCk7CiAgICAgICAgIGl0ZW1SZWN0LmludGVyc2VjdChjb250cm9sQ2xpcFJlY3QodHgs
IHR5KSk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5maWxsUmVjdChpdGVtUmVjdCwgYmFj
a0NvbG9yKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KGl0ZW1SZWN0LCBi
YWNrQ29sb3IsIGNvbG9yU3BhY2UpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdE1hcmtlci5jcHAJKHJldmlzaW9uIDUwNTcwKQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0Niw3ICs1NDYsNyBA
QCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnBhaW50KFBhaW50SW5mbyYgCiAgICAgICAgIGNvbnRl
eHQtPmRyYXdJbWFnZShtX2ltYWdlLT5pbWFnZSh0aGlzLCBtYXJrZXIuc2l6ZSgpKSwgbWFya2Vy
LmxvY2F0aW9uKCkpOwogICAgICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSAhPSBTZWxlY3Rpb25O
b25lKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogc2VsZWN0aW9uUmVjdCgpIGlzIGluIGFic29s
dXRlLCBub3QgcGFpbnRpbmcgY29vcmRpbmF0ZXMuCi0gICAgICAgICAgICBjb250ZXh0LT5maWxs
UmVjdChzZWxlY3Rpb25SZWN0KCksIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KHNlbGVjdGlvblJlY3QoKSwgc2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yKCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTU1OSwxNCArNTU5LDE0IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtl
cjo6cGFpbnQoUGFpbnRJbmZvJiAKIAogICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVj
dGlvbk5vbmUpIHsKICAgICAgICAgLy8gRklYTUU6IHNlbGVjdGlvblJlY3QoKSBpcyBpbiBhYnNv
bHV0ZSwgbm90IHBhaW50aW5nIGNvb3JkaW5hdGVzLgotICAgICAgICBjb250ZXh0LT5maWxsUmVj
dChzZWxlY3Rpb25SZWN0KCksIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpKTsKKyAgICAgICAg
Y29udGV4dC0+ZmlsbFJlY3Qoc2VsZWN0aW9uUmVjdCgpLCBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29s
b3IoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKICAgICB9CiAKICAgICBjb25zdCBDb2xvciBj
b2xvcihzdHlsZSgpLT5jb2xvcigpKTsKLSAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihjb2xv
cik7CisgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoY29sb3IsIHN0eWxlKCktPmNvbG9yU3Bh
Y2UoKSk7CiAgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgIGNv
bnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKLSAgICBjb250ZXh0LT5zZXRGaWxsQ29s
b3IoY29sb3IpOworICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihjb2xvciwgc3R5bGUoKS0+Y29s
b3JTcGFjZSgpKTsKIAogICAgIHN3aXRjaCAoc3R5bGUoKS0+bGlzdFN0eWxlVHlwZSgpKSB7CiAg
ICAgICAgIGNhc2UgRElTQzoKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2
aXNpb24gNTA1NzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MTYsNyArNzE2LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRyYXdMaW5l
Rm9yQm94U2lkZShHcgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIERPVFRFRDoK
ICAgICAgICAgY2FzZSBEQVNIRUQ6Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0
cm9rZUNvbG9yKGMpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VDb2xv
cihjLCBtX3N0eWxlLT5jb2xvclNwYWNlKCkpOwogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LT5zZXRTdHJva2VUaGlja25lc3Mod2lkdGgpOwogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LT5zZXRTdHJva2VTdHlsZShzdHlsZSA9PSBEQVNIRUQgPyBEYXNoZWRTdHJva2UgOiBEb3R0ZWRT
dHJva2UpOwogCkBAIC03MzcsNyArNzM3LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRyYXdMaW5l
Rm9yQm94U2lkZShHcgogCiAgICAgICAgICAgICBpZiAoYWRqYncxID09IDAgJiYgYWRqYncyID09
IDApIHsKICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZVN0eWxlKE5v
U3Ryb2tlKTsKLSAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxDb2xvcihj
KTsKKyAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxDb2xvcihjLCBtX3N0
eWxlLT5jb2xvclNwYWNlKCkpOwogICAgICAgICAgICAgICAgIHN3aXRjaCAocykgewogICAgICAg
ICAgICAgICAgICAgICBjYXNlIEJTVG9wOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEJTQm90
dG9tOgpAQCAtODUwLDcgKzg1MCw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3TGluZUZvckJv
eFNpZGUoR3IKICAgICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaAogICAgICAgICBjYXNlIFNPTElE
OiB7CiAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZVN0eWxlKE5vU3Ryb2tl
KTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0RmlsbENvbG9yKGMpOworICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRGaWxsQ29sb3IoYywgbV9zdHlsZS0+Y29sb3JTcGFj
ZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCh4MiA+PSB4MSk7CiAgICAgICAgICAgICBBU1NFUlQo
eTIgPj0geTEpOwogICAgICAgICAgICAgaWYgKCFhZGpidzEgJiYgIWFkamJ3MikgewpAQCAtOTEw
LDcgKzkxMCw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3QXJjRm9yQm94U2lkZShHcmEKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBET1RURUQ6CiAgICAgICAgIGNhc2UgREFT
SEVEOgotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VDb2xvcihjKTsKKyAg
ICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoYywgbV9zdHlsZS0+Y29s
b3JTcGFjZSgpKTsKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlU3R5bGUo
c3R5bGUgPT0gRE9UVEVEID8gRG90dGVkU3Ryb2tlIDogRGFzaGVkU3Ryb2tlKTsKICAgICAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNrbmVzcyk7CiAgICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQtPnN0cm9rZUFyYyhJbnRSZWN0KHgsIHksIHJhZGl1cy53
aWR0aCgpICogMiwgcmFkaXVzLmhlaWdodCgpICogMiksIGFuZ2xlU3RhcnQsIGFuZ2xlU3Bhbik7
CkBAIC05MzIsNyArOTMyLDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRyYXdBcmNGb3JCb3hTaWRl
KEdyYQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0
cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0
U3Ryb2tlQ29sb3IoYyk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZUNv
bG9yKGMsIG1fc3R5bGUtPmNvbG9yU3BhY2UoKSk7CiAgICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQtPnNldFN0cm9rZVRoaWNrbmVzcyh0aGlyZCk7CiAgICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQtPnN0cm9rZUFyYyhJbnRSZWN0KHgsIG91dGVyWSwgcmFkaXVzLndpZHRoKCkgKiAyLCBvdXRl
ckhlaWdodCksIGFuZ2xlU3RhcnQsIGFuZ2xlU3Bhbik7CiAgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhpbm5lclRoaXJkID4gMiA/IGlubmVyVGhpcmQgLSAx
IDogaW5uZXJUaGlyZCk7CkBAIC05NTEsMTMgKzk1MSwxMyBAQCB2b2lkIFJlbmRlck9iamVjdDo6
ZHJhd0FyY0ZvckJveFNpZGUoR3JhCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGdyYXBo
aWNzQ29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwotICAgICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5zZXRTdHJva2VDb2xvcihjKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+c2V0U3Ryb2tlQ29sb3IoYywgbV9zdHlsZS0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNrbmVzcyk7CiAgICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQtPnN0cm9rZUFyYyhJbnRSZWN0KHgsIHksIHJhZGl1cy53
aWR0aCgpICogMiwgcmFkaXVzLmhlaWdodCgpICogMiksIGFuZ2xlU3RhcnQsIGFuZ2xlU3Bhbik7
CiAKICAgICAgICAgICAgIGZsb2F0IGhhbGZUaGlja25lc3MgPSAodGhpY2tuZXNzICsgMS4wZikg
LyA0LjBmOwogICAgICAgICAgICAgaW50IHNoaWZ0Rm9ySW5uZXIgPSBzdGF0aWNfY2FzdDxpbnQ+
KGhhbGZUaGlja25lc3MgKiAxLjVmKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0
U3Ryb2tlQ29sb3IoYzIpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VD
b2xvcihjMiwgbV9zdHlsZS0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKGhhbGZUaGlja25lc3MgPiAyID8gaGFsZlRoaWNrbmVz
cyAtIDEgOiBoYWxmVGhpY2tuZXNzKTsKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c3Ry
b2tlQXJjKEludFJlY3QoeCArIHNoaWZ0Rm9ySW5uZXIsIHkgKyBzaGlmdEZvcklubmVyLCAocmFk
aXVzLndpZHRoKCkgLSBzaGlmdEZvcklubmVyKSAqIDIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAocmFkaXVzLmhlaWdodCgpIC0gc2hpZnRGb3JJbm5lcikgKiAyKSwg
YW5nbGVTdGFydCwgYW5nbGVTcGFuKTsKQEAgLTk3MSw3ICs5NzEsNyBAQCB2b2lkIFJlbmRlck9i
amVjdDo6ZHJhd0FyY0ZvckJveFNpZGUoR3JhCiAgICAgICAgICAgICAgICAgYyA9IGMuZGFyaygp
OwogICAgICAgICBjYXNlIFNPTElEOgogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRT
dHJva2VTdHlsZShTb2xpZFN0cm9rZSk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNl
dFN0cm9rZUNvbG9yKGMpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VD
b2xvcihjLCBtX3N0eWxlLT5jb2xvclNwYWNlKCkpOwogICAgICAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT5zZXRTdHJva2VUaGlja25lc3ModGhpY2tuZXNzKTsKICAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC0+c3Ryb2tlQXJjKEludFJlY3QoeCwgeSwgcmFkaXVzLndpZHRoKCkgKiAyLCByYWRp
dXMuaGVpZ2h0KCkgKiAyKSwgYW5nbGVTdGFydCwgYW5nbGVTcGFuKTsKICAgICAgICAgICAgIGJy
ZWFrOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkocmV2aXNpb24gNTA1
NzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIFJlbmRlclJlcGxhY2VkOjpwYWludChQYWludElu
Zm8mIHBhCiAgICAgaWYgKGRyYXdTZWxlY3Rpb25UaW50KSB7CiAgICAgICAgIEludFJlY3Qgc2Vs
ZWN0aW9uUGFpbnRpbmdSZWN0ID0gbG9jYWxTZWxlY3Rpb25SZWN0KCk7CiAgICAgICAgIHNlbGVj
dGlvblBhaW50aW5nUmVjdC5tb3ZlKHR4LCB0eSk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5maWxsUmVjdChzZWxlY3Rpb25QYWludGluZ1JlY3QsIHNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KHNlbGVjdGlvblBhaW50
aW5nUmVjdCwgc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCksIHN0eWxlKCktPmNvbG9yU3BhY2Uo
KSk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2
aXNpb24gNTA1NzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtOTEzLDcgKzkxMyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50
TWVudUxpc3RCdXR0b24KICAgICAKICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwogCi0g
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihvLT5zdHlsZSgpLT5jb2xvcigpKTsK
KyAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9yKG8tPnN0eWxlKCktPmNvbG9yKCks
IG8tPnN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0
cm9rZVN0eWxlKE5vU3Ryb2tlKTsKIAogICAgIEZsb2F0UG9pbnQgYXJyb3cxWzNdOwpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDUwNTcwKQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw3ICsxOTgsNyBAQCB2
b2lkIFJlbmRlclZpZXc6OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpCiAgICAgICAgIGlmIChiYXNl
Q29sb3IuYWxwaGEoKSA+IDApIHsKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZl
KCk7CiAgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9u
KENvbXBvc2l0ZUNvcHkpOwotICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0
KHBhaW50SW5mby5yZWN0LCBiYXNlQ29sb3IpOworICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPmZpbGxSZWN0KHBhaW50SW5mby5yZWN0LCBiYXNlQ29sb3IsIHN0eWxlKCktPmNvbG9yU3Bh
Y2UoKSk7CiAgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGVhclJlY3QocGFpbnRJ
bmZvLnJlY3QpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCShyZXZpc2lvbiA1
MDU3MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3Niw3ICsyNzYsNyBAQCB2b2lkIFJlbmRlcldpZGdldDo6cGFpbnQoUGFpbnRJbmZv
JiBwYWluCiAgICAgLy8gUGFpbnQgYSBwYXJ0aWFsbHkgdHJhbnNwYXJlbnQgd2FzaCBvdmVyIHNl
bGVjdGVkIHdpZGdldHMuCiAgICAgaWYgKGlzU2VsZWN0ZWQoKSAmJiAhZG9jdW1lbnQoKS0+cHJp
bnRpbmcoKSkgewogICAgICAgICAvLyBGSVhNRTogc2VsZWN0aW9uUmVjdCgpIGlzIGluIGFic29s
dXRlLCBub3QgcGFpbnRpbmcgY29vcmRpbmF0ZXMuCi0gICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5maWxsUmVjdChzZWxlY3Rpb25SZWN0KCksIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpKTsK
KyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KHNlbGVjdGlvblJlY3QoKSwgc2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgfQog
fQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24g
NTA1NzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDc3LDcgKzQ3Nyw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRT
ZWxlY3Rpb24oaW4KICAgICBpbnQgYWRqdXN0ID0gc3RhcnRQb3MgPj0gYm94U3RhcnRPZmZzZXQg
PyBib3hTdGFydE9mZnNldCA6IDA7CiAgICAgcC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwg
c3ZnVGV4dFJ1bkZvcklubGluZVRleHRCb3godGV4dFJlbmRlcmVyKCktPnRleHQoKS0+Y2hhcmFj
dGVycygpICsgc3RhcnQoKSArIGJveFN0YXJ0T2Zmc2V0LCBsZW5ndGgsIHN0eWxlLCB0aGlzLCBz
dmdDaGFyLngpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KChpbnQpIHN2
Z0NoYXIueCwgKGludCkgc3ZnQ2hhci55IC0gZm9udC5hc2NlbnQoKSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9udC5hc2NlbnQoKSArIGZvbnQuZGVzY2VudCgpLCBjb2xvciwgc3Rh
cnRQb3MgLSBhZGp1c3QsIGVuZFBvcyAtIGFkanVzdCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9udC5hc2NlbnQoKSArIGZvbnQuZGVzY2VudCgpLCBjb2xvciwgc3R5bGUtPmNvbG9y
U3BhY2UoKSwgc3RhcnRQb3MgLSBhZGp1c3QsIGVuZFBvcyAtIGFkanVzdCk7CiAKICAgICBwLT5y
ZXN0b3JlKCk7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJl
dmlzaW9uIDUwNTcwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNTk5LDYgKzU5OSw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBDb2xv
ciYgdGV4dFN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRl
eHRTdHJva2VDb2xvcjsgfQogICAgIGZsb2F0IHRleHRTdHJva2VXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U3Ryb2tlV2lkdGg7IH0KICAgICBjb25zdCBDb2xv
ciYgdGV4dEZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0
RmlsbENvbG9yOyB9CisgICAgQ1NTQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8Q1NTQ29sb3JTcGFjZT4ocmFyZUluaGVyaXRlZERhdGEtPmNvbG9yU3Bh
Y2UpOyB9CiAgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0
ZWREYXRhLT5vcGFjaXR5OyB9CiAgICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PENvbnRyb2xQYXJ0PihyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9h
cHBlYXJhbmNlKTsgfQogICAgIEVCb3hBbGlnbm1lbnQgYm94QWxpZ24oKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxFQm94QWxpZ25tZW50PihyYXJlTm9uSW5oZXJpdGVkRGF0YS0+ZmxleGli
bGVCb3gtPmFsaWduKTsgfQpAQCAtOTMwLDYgKzkzMSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dFRleHRTdHJva2VDb2xvcihjb25zdCBDb2xvciYgYykgeyBTRVRfVkFSKHJhcmVJbmhlcml0ZWRE
YXRhLCB0ZXh0U3Ryb2tlQ29sb3IsIGMpIH0KICAgICB2b2lkIHNldFRleHRTdHJva2VXaWR0aChm
bG9hdCB3KSB7IFNFVF9WQVIocmFyZUluaGVyaXRlZERhdGEsIHRleHRTdHJva2VXaWR0aCwgdykg
fQogICAgIHZvaWQgc2V0VGV4dEZpbGxDb2xvcihjb25zdCBDb2xvciYgYykgeyBTRVRfVkFSKHJh
cmVJbmhlcml0ZWREYXRhLCB0ZXh0RmlsbENvbG9yLCBjKSB9CisgICAgdm9pZCBzZXRDb2xvclNw
YWNlKENTU0NvbG9yU3BhY2Ugc3BhY2UpIHsgU0VUX1ZBUihyYXJlSW5oZXJpdGVkRGF0YSwgY29s
b3JTcGFjZSwgc3BhY2UpIH0KICAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQgZikgeyBTRVRfVkFS
KHJhcmVOb25Jbmhlcml0ZWREYXRhLCBvcGFjaXR5LCBmKTsgfQogICAgIHZvaWQgc2V0QXBwZWFy
YW5jZShDb250cm9sUGFydCBhKSB7IFNFVF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEsIG1fYXBw
ZWFyYW5jZSwgYSk7IH0KICAgICB2b2lkIHNldEJveEFsaWduKEVCb3hBbGlnbm1lbnQgYSkgeyBT
RVRfVkFSKHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5mbGV4aWJsZUJveCwgYWxpZ24s
IGEpOyB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZUNvbnN0YW50
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29u
c3RhbnRzLmgJKHJldmlzaW9uIDUwNTcwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGVDb25zdGFudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiwxMCBAQCBl
bnVtIEVCYWNrZmFjZVZpc2liaWxpdHkgewogICAgIEJhY2tmYWNlVmlzaWJpbGl0eVZpc2libGUs
IEJhY2tmYWNlVmlzaWJpbGl0eUhpZGRlbgogfTsKIAorZW51bSBDU1NDb2xvclNwYWNlIHsKKyAg
ICBEZWZhdWx0LCBzUkdCCit9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBSZW5kZXJTdHlsZUNvbnN0YW50c19oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
dHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcAkocmV2aXNpb24gNTA1NzApCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBTdHlsZVJhcmVJbmhlcml0ZWREYXRhOjpTdHlsZVJh
cmVJbmhlcml0CiAgICAgLCB0ZXh0U2l6ZUFkanVzdChSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRT
aXplQWRqdXN0KCkpCiAgICAgLCByZXNpemUoUmVuZGVyU3R5bGU6OmluaXRpYWxSZXNpemUoKSkK
ICAgICAsIHVzZXJTZWxlY3QoUmVuZGVyU3R5bGU6OmluaXRpYWxVc2VyU2VsZWN0KCkpCisgICAg
LCBjb2xvclNwYWNlKERlZmF1bHQpCiB7CiB9CiAKQEAgLTU4LDYgKzU5LDcgQEAgU3R5bGVSYXJl
SW5oZXJpdGVkRGF0YTo6U3R5bGVSYXJlSW5oZXJpdAogICAgICwgdGV4dFNpemVBZGp1c3Qoby50
ZXh0U2l6ZUFkanVzdCkKICAgICAsIHJlc2l6ZShvLnJlc2l6ZSkKICAgICAsIHVzZXJTZWxlY3Qo
by51c2VyU2VsZWN0KQorICAgICwgY29sb3JTcGFjZShvLmNvbG9yU3BhY2UpCiB7CiB9CiAKQEAg
LTgxLDcgKzgzLDggQEAgYm9vbCBTdHlsZVJhcmVJbmhlcml0ZWREYXRhOjpvcGVyYXRvcj09KAog
ICAgICAgICAmJiBraHRtbExpbmVCcmVhayA9PSBvLmtodG1sTGluZUJyZWFrCiAgICAgICAgICYm
IHRleHRTaXplQWRqdXN0ID09IG8udGV4dFNpemVBZGp1c3QKICAgICAgICAgJiYgcmVzaXplID09
IG8ucmVzaXplCi0gICAgICAgICYmIHVzZXJTZWxlY3QgPT0gby51c2VyU2VsZWN0OworICAgICAg
ICAmJiB1c2VyU2VsZWN0ID09IG8udXNlclNlbGVjdAorICAgICAgICAmJiBjb2xvclNwYWNlID09
IG8uY29sb3JTcGFjZTsKIH0KIAogYm9vbCBTdHlsZVJhcmVJbmhlcml0ZWREYXRhOjpzaGFkb3dE
YXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVJbmhlcml0ZWREYXRhJiBvKSBjb25zdApJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZUluaGVyaXRlZERhdGEu
aAkocmV2aXNpb24gNTA1NzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJ
bmhlcml0ZWREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDcgQEAgcHVibGljOgog
ICAgIGJvb2wgdGV4dFNpemVBZGp1c3QgOiAxOyAvLyBBbiBBcHBsZSBleHRlbnNpb24uCiAgICAg
dW5zaWduZWQgcmVzaXplIDogMjsgLy8gRVJlc2l6ZQogICAgIHVuc2lnbmVkIHVzZXJTZWxlY3Qg
OiAxOyAgLy8gRVVzZXJTZWxlY3QKKyAgICB1bnNpZ25lZCBjb2xvclNwYWNlIDogMTsgLy8gQ1NT
Q29sb3JTcGFjZQogICAgIAogcHJpdmF0ZToKICAgICBTdHlsZVJhcmVJbmhlcml0ZWREYXRhKCk7
CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50
LmNwcAkocmV2aXNpb24gNTA1NzApCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNl
cnZlckdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIGJvb2wg
U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXAoR3JhcGgKICAgICAgICAgLy8gbGluZXMgb3Ig
cmVjdGFuZ2xlcyB3aXRob3V0IHdpZHRoIG9yIGhlaWdodC4KICAgICAgICAgaWYgKGJib3gud2lk
dGgoKSA9PSAwIHx8IGJib3guaGVpZ2h0KCkgPT0gMCkgewogICAgICAgICAgICAgQ29sb3IgY29s
b3IoMCwgMCwgMCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihjb2xvcik7
CisgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihjb2xvciwgb2JqZWN0LT5zdHls
ZSgpLT5jb2xvclNwYWNlKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
ICAgICAgICAgbWF0cml4LnRyYW5zbGF0ZShiYm94LngoKSwgYmJveC55KCkpOwpJbmRleDogV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5jcHAJKHJldmlzaW9uIDUw
NTcwKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY0LDEwICs2NCwxMSBAQCBib29sIFNWR1BhaW50U2VydmVyU29saWQ6
OnNldHVwKEdyYXBoaWNzCiB7CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0ID8gb2Jq
ZWN0LT5zdHlsZSgpIDogMDsKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBz
dHlsZSA/IHN0eWxlLT5zdmdTdHlsZSgpIDogMDsKKyAgICBDU1NDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UgPSBzdHlsZSA/IHN0eWxlLT5jb2xvclNwYWNlKCkgOiBEZWZhdWx0OwogCiAgICAgaWYgKCh0
eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiAoIXN0eWxlIHx8IHN2Z1N0eWxlLT5oYXNG
aWxsKCkpKSB7CiAgICAgICAgIGNvbnRleHQtPnNldEFscGhhKHN0eWxlID8gc3ZnU3R5bGUtPmZp
bGxPcGFjaXR5KCkgOiAxKTsKLSAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGNvbG9yKCku
cmdiKCkpOworICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoY29sb3IoKS5yZ2IoKSwgY29s
b3JTcGFjZSk7CiAgICAgICAgIGNvbnRleHQtPnNldEZpbGxSdWxlKHN0eWxlID8gc3ZnU3R5bGUt
PmZpbGxSdWxlKCkgOiBSVUxFX05PTlpFUk8pOwogCiAgICAgICAgIGlmIChpc1BhaW50aW5nVGV4
dCkKQEAgLTc2LDcgKzc3LDcgQEAgYm9vbCBTVkdQYWludFNlcnZlclNvbGlkOjpzZXR1cChHcmFw
aGljcwogCiAgICAgaWYgKCh0eXBlICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpICYmICghc3R5
bGUgfHwgc3ZnU3R5bGUtPmhhc1N0cm9rZSgpKSkgewogICAgICAgICBjb250ZXh0LT5zZXRBbHBo
YShzdHlsZSA/IHN2Z1N0eWxlLT5zdHJva2VPcGFjaXR5KCkgOiAxKTsKLSAgICAgICAgY29udGV4
dC0+c2V0U3Ryb2tlQ29sb3IoY29sb3IoKS5yZ2IoKSk7CisgICAgICAgIGNvbnRleHQtPnNldFN0
cm9rZUNvbG9yKGNvbG9yKCkucmdiKCksIGNvbG9yU3BhY2UpOwogCiAgICAgICAgIGlmIChzdHls
ZSkKICAgICAgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUs
IG9iamVjdCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MDU4NikKKysrIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDA5LTExLTA1ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUZXN0cyBmb3IgPHJkYXI6Ly9wcm9ibGVtLzcwNTk3MTA+IAorICAg
ICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zMTE5NiBJbXBsZW1lbnQgLXdlYmtpdC0KKyAgICAgICAgY29sb3It
Y29ycmVjdGlvbiBmb3IgQ1NTIGNvbG9ycworCisgICAgICAgIE5ldyB0ZXN0cy4KKyAgICAgICAg
KiBmYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLWJhY2tncm91bmRzLWFuZC10ZXh0Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tb24tYmFja2dyb3VuZHMu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1vbi10ZXh0
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24uaHRtbDog
QWRkZWQuCisgICAgICAgICogZmFzdC9jc3MvcGFyc2luZy1jb2xvci1jb3JyZWN0aW9uLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3MvcGFyc2luZy1jb2xvci1jb3JyZWN0
aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3Jlc291cmNlcy9wYXJzaW5nLWNv
bG9yLWNvcnJlY3Rpb24uanM6IEFkZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAgICogZmFz
dC9jc3MvcmVzb3VyY2VzL3B1cnBsZS1zcmdiLnBuZzogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tYmFja2dyb3VuZHMtYW5kLXRleHQtZXhw
ZWN0ZWQuY2hlY2tzdW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2Nzcy9j
b2xvci1jb3JyZWN0aW9uLWJhY2tncm91bmRzLWFuZC10ZXh0LWV4cGVjdGVkLnBuZzogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tYmFja2dy
b3VuZHMtYW5kLXRleHQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1leHBlY3RlZC5jaGVja3N1bTogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tZXhwZWN0ZWQu
cG5nOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVj
dGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2Nz
cy9jb2xvci1jb3JyZWN0aW9uLW9uLWJhY2tncm91bmRzLWV4cGVjdGVkLmNoZWNrc3VtOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1vbi1i
YWNrZ3JvdW5kcy1leHBlY3RlZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9m
YXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLW9uLWJhY2tncm91bmRzLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tb24t
dGV4dC1leHBlY3RlZC5jaGVja3N1bTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zh
c3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tb24tdGV4dC1leHBlY3RlZC5wbmc6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLW9uLXRleHQtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKworICAgICAgICBOZXcgYW5kIGltcHJvdmVkIHJlc3VsdHMuCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2dldENvbXB1dGVkU3R5bGUvY29tcHV0ZWQt
c3R5bGUtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2Nzcy9nZXRD
b21wdXRlZFN0eWxlL2NvbXB1dGVkLXN0eWxlLXdpdGhvdXQtcmVuZGVyZXItZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIHN2Zy9jc3MvZ2V0Q29tcHV0ZWRTdHlsZS1iYXNpYy1leHBlY3RlZC50eHQ6
CisKIDIwMDktMTEtMDUgIEFsaWNlIExpdSAgPGFsaWNlLmxpdUBhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRkaW5nIGEgcmVzb3VyY2UgdGhhdCBzZWVtcyB0byBiZSBtaXNzaW5nLiAgV2l0aG91dCBp
dCwgc2V2ZXJhbCB0ZXN0cyBpbgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvY29sb3ItY29y
cmVjdGlvbi1iYWNrZ3JvdW5kcy1hbmQtdGV4dC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tYmFja2dyb3VuZHMtYW5kLXRleHQuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tYmFj
a2dyb3VuZHMtYW5kLXRleHQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorPGh0
bWw+Cis8c3R5bGU+CisgICAgLnRleHQgeworICAgICAgICBjb2xvcjpncmVlbjsKKyAgICAgICAg
Zm9udC1zaXplOjE1MHB4OworICAgICAgICBmb250LXdlaWdodDpib2xkOworICAgIH0KKyAgICAK
KyAgICAuY29udGFpbmVyIHsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjpncmVlbjsgCisgICAg
ICAgIHdpZHRoOjIwMHB4OyAKKyAgICAgICAgaGVpZ2h0OjIwMHB4OworICAgIH0KKzwvc3R5bGU+
Cis8Ym9keT4KKworPHA+VGhpcyBjb250YWluZXIgaGFzIG5vIGNvbG9yIGNvcnJlY3Rpb24sIGFu
ZCBuZWl0aGVyIGRvZXMgdGhlIHRleHQgaW5zaWRlLCBzbyBpdCB3aWxsIG5vdCBiZSB2aXNpYmxl
IHNpbmNlIGJvdGggYXJlIGdyZWVuIGFuZCB1bmNvcnJlY3RlZC48L3A+Cis8ZGl2IGNsYXNzPSJj
b250YWluZXIiPgorICAgIDxzcGFuIGNsYXNzPSJ0ZXh0Ij5HPC9zcGFuPgorPC9kaXY+CisKKzxw
PlRoaXMgY29udGFpbmVyIGhhcyBzUkdCIGNvbG9yIGNvcnJlY3Rpb24gc3BlY2lmaWVkLCBhbmQg
c28gZG9lcyB0aGUgdGV4dCBpbnNpZGUsIHNvIHRoZSB0ZXh0IHdpbGwgbm90IGJlIHZpc2libGUg
c2luY2UgYm90aCBhcmUgZ3JlZW4gYW5kIGNvcnJlY3RlZC48L3A+Cis8ZGl2IGNsYXNzPSJjb250
YWluZXIiIHN0eWxlPSItd2Via2l0LWNvbG9yLWNvcnJlY3Rpb246c1JHQjsiPgorICAgIDxzcGFu
IGNsYXNzPSJ0ZXh0IiBzdHlsZT0iLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uOnNSR0I7Ij5HPC9z
cGFuPgorPC9kaXY+CisKKzxwPlRoaXMgY29udGFpbmVyIGhhcyBzUkdCIGNvbG9yIGNvcnJlY3Rp
b24gc3BlY2lmaWVkLiBUaGUgdGV4dCBpbnNpZGUgZG9lcyBub3QgaGF2ZSB0aGUgcHJvcGVydHkg
c3BlY2lmaWVkLCBidXQgdGhlIHRleHQgaW5oZXJpdHMgdGhlIGNvbnRhaW5lcidzIHN0eWxlLCBz
byB0aGUgdGV4dCB3aWxsIG5vdCBiZSB2aXNpYmxlIHNpbmNlIGJvdGggYXJlIGdyZWVuIGFuZCBj
b3JyZWN0ZWQuPC9wPgorPGRpdiBjbGFzcz0iY29udGFpbmVyIiBzdHlsZT0iLXdlYmtpdC1jb2xv
ci1jb3JyZWN0aW9uOnNSR0I7Ij4KKyAgICA8c3BhbiBjbGFzcz0idGV4dCI+Rzwvc3Bhbj4KKzwv
ZGl2PgorCis8cD5UaGlzIGNvbnRhaW5lciBoYXMgZGVmYXVsdCBjb2xvci1jb3JyZWN0aW9uIHNw
ZWNpZmllZCwgYW5kIHRoZSB0ZXh0IGhhcyBzUkdCIGNvbG9yIGNvcnJlY3Rpb24gc3BlY2lmaWVk
LiBUaGlzIHRleHQgaXMgdmlzaWJsZSBldmVuIHRob3VnaCBib3RoIGFyZSBncmVlbiBzaW5jZSB0
aGUgdGV4dCBpcyBjb3JyZWN0ZWQgYW5kIHRoZSBjb250YWluZXIgaXMgbm90LjwvcD4KKzxkaXYg
Y2xhc3M9ImNvbnRhaW5lciIgc3R5bGU9Ii13ZWJraXQtY29sb3ItY29ycmVjdGlvbjpkZWZhdWx0
OyI+CisgICAgPHNwYW4gY2xhc3M9InRleHQiIHN0eWxlPSItd2Via2l0LWNvbG9yLWNvcnJlY3Rp
b246c1JHQjsiPkc8L3NwYW4+Cis8L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1vbi1iYWNrZ3JvdW5kcy5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tb24tYmFj
a2dyb3VuZHMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2NvbG9y
LWNvcnJlY3Rpb24tb24tYmFja2dyb3VuZHMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
NCBAQAorPGh0bWw+Cis8Ym9keT4KKworPHA+VGhlc2Ugc2hvdWxkIG1hdGNoOjwvcD4KKzxkaXYg
c3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzU2MDA2Mzsgd2lkdGg6MTAwcHg7IGhlaWdodDoxMDBw
eDsgLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uOnNSR0I7IGZsb2F0OmxlZnQ7Ij48L2Rpdj4KKzxp
bWcgc3JjPSJyZXNvdXJjZXMvcHVycGxlLXNyZ2IucG5nIi8+CisKKzxici8+Cis8cD5UaGVzZSBz
aG91bGQgbm90IG1hdGNoIChhdCB0aGlzIHRpbWUpOjwvcD4KKzxkaXYgc3R5bGU9ImJhY2tncm91
bmQtY29sb3I6IzU2MDA2Mzsgd2lkdGg6MTAwcHg7IGhlaWdodDoxMDBweDsgLXdlYmtpdC1jb2xv
ci1jb3JyZWN0aW9uOmRlZmF1bHQ7IGZsb2F0OmxlZnQ7Ij48L2Rpdj4KKzxpbWcgc3JjPSJyZXNv
dXJjZXMvcHVycGxlLXNyZ2IucG5nIi8+CisKKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tb24tdGV4dC5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tb24tdGV4dC5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1vbi10
ZXh0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkgQEAKKzxodG1sPgorPHN0eWxlPgor
ICAgIC50ZXh0IHsKKyAgICAgICAgY29sb3I6Z3JlZW47CisgICAgICAgIGZvbnQtc2l6ZToxNTBw
eDsKKyAgICAgICAgZm9udC13ZWlnaHQ6Ym9sZDsKKyAgICB9Cis8L3N0eWxlPgorPGJvZHk+CisK
KyAgICA8cD5UaGUgZGlzdGluY3Rpb24gYmVsb3cgaXMgc3VidGxlLCBidXQgdGhlIG1pZGRsZSAi
SCIgaXMgY29sb3ItY29ycmVjdGVkLCBhbmQgdGhlIGZpcnN0IGFuZCBsYXN0IGFyZSBub3QuIAor
ICAgIDwvcD4KKworICAgIDxzcGFuIGNsYXNzPSJ0ZXh0Ij5IPC9zcGFuPgorICAgIDxzcGFuIGNs
YXNzPSJ0ZXh0IiBzdHlsZT0iLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uOnNSR0I7Ij5IPC9zcGFu
PgorICAgIDxzcGFuIGNsYXNzPSJ0ZXh0Ij5IPC9zcGFuPgorCis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8aHRtbD4KKzxzdHlsZT4KKy5wdXJwbGUgeworCWJv
cmRlcjogc29saWQgMjBweCAjNTYwMDYzOworfQorPC9zdHlsZT4KKzxib2R5PgorPHA+VGhpcyB0
ZXN0IGRlbW9uc3RyYXRlcyAtd2Via2l0LWNvbG9yLWNvcnJlY3Rpb24uIEJlbG93IGFyZSAzIGlt
YWdlcyB3aXRoIDIwIHBpeGVsIGJvcmRlcnMuIFRoZSBpbWFnZXMgYXJlIGFsbCB0aGUgc2FtZSAt
LSBwdXJwbGUgd2l0aCBhbiBzUkdCIGNvbG9yIHByb2ZpbGUuIFRoZSBib3JkZXIgaXMgdGhlIHNh
bWUgQ1NTIGNvbG9yIGZvciBhbGwgdGhyZWUgaW1hZ2VzLiBUaGUgZmlyc3QgaW1hZ2UgaGFzIG5v
IHNwZWNpYWwgQ1NTLiBUaGUgc2Vjb25kIGhhcyAtd2Via2l0LWNvbG9yLWNvcnJlY3Rpb24gc2V0
IHRvIGRlZmF1bHQsIHNvIGl0IG1hdGNoZXMgdGhlIGZpcnN0IGltYWdlLiBBbmQgdGhlIHRoaXJk
IGhhcyAtd2Via2l0LWNvbG9yLWNvcnJlY3Rpb24gc2V0IHRvIHNSR0IuIFRoaXMgY29sb3ItY29y
cmVjdHMgdGhlIHB1cnBsZSBib3JkZXIgZnJvbSB0aGUgc1JHQiBjb2xvciBzcGFjZSwgYW5kIHRo
ZSByZXN1bHQgaXMgdGhhdCB0aGUgYm9yZGVyIGFuZCB0aGUgaW1hZ2UgbWF0Y2guPC9wPgorPGlt
ZyBzcmM9InJlc291cmNlcy9wdXJwbGUtc3JnYi5wbmciIGNsYXNzPSJwdXJwbGUiIC8+Cis8aW1n
IHNyYz0icmVzb3VyY2VzL3B1cnBsZS1zcmdiLnBuZyIgY2xhc3M9InB1cnBsZSIgc3R5bGU9Ii13
ZWJraXQtY29sb3ItY29ycmVjdGlvbjogZGVmYXVsdDsiLz4KKzxpbWcgc3JjPSJyZXNvdXJjZXMv
cHVycGxlLXNyZ2IucG5nIiBjbGFzcz0icHVycGxlIiBzdHlsZT0iLXdlYmtpdC1jb2xvci1jb3Jy
ZWN0aW9uOiBzUkdCOyIvPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9jc3MvcGFyc2luZy1jb2xvci1jb3JyZWN0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9wYXJzaW5nLWNvbG9yLWNvcnJlY3Rpb24tZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvcGFyc2luZy1jb2xvci1j
b3JyZWN0aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorVGhp
cyB0ZXN0cyBjaGVja3MgdGhhdCBhbGwgb2YgdGhlIGlucHV0IHZhbHVlcyBmb3IgLXdlYmtpdC1j
b2xvci1jb3JyZWN0aW9uIHBhcnNlIGNvcnJlY3RseS4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1MgdGVzdCgiLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uOiBkZWZhdWx0OyIp
IGlzICJkZWZhdWx0IgorUEFTUyB0ZXN0KCItd2Via2l0LWNvbG9yLWNvcnJlY3Rpb246IHNSR0I7
IikgaXMgInNyZ2IiCitQQVNTIHRlc3QoIi13ZWJraXQtY29sb3ItY29ycmVjdGlvbjogc3JnYjsi
KSBpcyAic3JnYiIKK1BBU1MgdGVzdCgiLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uOiBhcHBsZTsi
KSBpcyBudWxsCitQQVNTIHRlc3QoIi13ZWJraXQtY29sb3ItY29ycmVjdGlvbjogMTU7IikgaXMg
bnVsbAorUEFTUyB0ZXN0KCItd2Via2l0LWNvbG9yLWNvcnJlY3Rpb246IGF1dG87IikgaXMgbnVs
bAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvY3NzL3BhcnNpbmctY29sb3ItY29ycmVjdGlvbi5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL3BhcnNpbmctY29sb3ItY29ycmVjdGlv
bi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvcGFyc2luZy1jb2xv
ci1jb3JyZWN0aW9uLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKKzwhRE9DVFlQ
RSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8
c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwvc3R5bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvcGFyc2luZy1jb2xvci1jb3JyZWN0aW9uLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY3NzL3Jlc291cmNlcy9w
YXJzaW5nLWNvbG9yLWNvcnJlY3Rpb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9jc3MvcmVzb3VyY2VzL3BhcnNpbmctY29sb3ItY29ycmVjdGlvbi5qcwkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvY3NzL3Jlc291cmNlcy9wYXJzaW5nLWNvbG9yLWNvcnJlY3Rp
b24uanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjIgQEAKK2Rlc2NyaXB0aW9uKCJUaGlzIHRl
c3RzIGNoZWNrcyB0aGF0IGFsbCBvZiB0aGUgaW5wdXQgdmFsdWVzIGZvciAtd2Via2l0LWNvbG9y
LWNvcnJlY3Rpb24gcGFyc2UgY29ycmVjdGx5LiIpOworCitmdW5jdGlvbiB0ZXN0KHZhbHVlKQor
eworICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICBkaXYu
c2V0QXR0cmlidXRlKCJzdHlsZSIsIHZhbHVlKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENo
aWxkKGRpdik7CisgICAgCisgICAgdmFyIHJlc3VsdCA9IGRpdi5zdHlsZS5nZXRQcm9wZXJ0eVZh
bHVlKCItd2Via2l0LWNvbG9yLWNvcnJlY3Rpb24iKTsKKyAgICBkb2N1bWVudC5ib2R5LnJlbW92
ZUNoaWxkKGRpdik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc2hvdWxkQmUoJ3Rlc3QoIi13
ZWJraXQtY29sb3ItY29ycmVjdGlvbjogZGVmYXVsdDsiKScsICciZGVmYXVsdCInKTsKK3Nob3Vs
ZEJlKCd0ZXN0KCItd2Via2l0LWNvbG9yLWNvcnJlY3Rpb246IHNSR0I7IiknLCAnInNyZ2IiJyk7
CitzaG91bGRCZSgndGVzdCgiLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uOiBzcmdiOyIpJywgJyJz
cmdiIicpOworCitzaG91bGRCZSgndGVzdCgiLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uOiBhcHBs
ZTsiKScsICdudWxsJyk7CitzaG91bGRCZSgndGVzdCgiLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9u
OiAxNTsiKScsICdudWxsJyk7CitzaG91bGRCZSgndGVzdCgiLXdlYmtpdC1jb2xvci1jb3JyZWN0
aW9uOiBhdXRvOyIpJywgJ251bGwnKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7
CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlv
bi1iYWNrZ3JvdW5kcy1hbmQtdGV4dC1leHBlY3RlZC5jaGVja3N1bQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1iYWNrZ3Jv
dW5kcy1hbmQtdGV4dC1leHBlY3RlZC5jaGVja3N1bQkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLWJhY2tncm91bmRzLWFu
ZC10ZXh0LWV4cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitjZTk0
MDkzNTdiNzRmNTc4MWY3ZTU3ZWU1NWUyMDU5YQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9u
LWJhY2tncm91bmRzLWFuZC10ZXh0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1iYWNrZ3JvdW5kcy1h
bmQtdGV4dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1iYWNrZ3JvdW5kcy1hbmQtdGV4dC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKK2xheWVyIGF0ICgwLDApIHNp
emUgNzg1eDEwNzIKKyAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDc4NXg2MDAKK2xheWVyIGF0
ICgwLDApIHNpemUgNzg1eDEwNzIKKyAgUmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUg
Nzg1eDEwNzIKKyAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc2OXgxMDU2Cisg
ICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMCkgc2l6ZSA3Njl4MzYKKyAgICAgICAgUmVuZGVy
VGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNzQ3eDM2CisgICAgICAgICAgdGV4dCBydW4gYXQg
KDAsMCkgd2lkdGggNzQ3OiAiVGhpcyBjb250YWluZXIgaGFzIG5vIGNvbG9yIGNvcnJlY3Rpb24s
IGFuZCBuZWl0aGVyIGRvZXMgdGhlIHRleHQgaW5zaWRlLCBzbyBpdCB3aWxsIG5vdCBiZSB2aXNp
YmxlIHNpbmNlIGJvdGggYXJlIGdyZWVuIGFuZCIKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwx
OCkgd2lkdGggNzg6ICJ1bmNvcnJlY3RlZC4iCisgICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAo
MCw1Mikgc2l6ZSAyMDB4MjAwIFtiZ2NvbG9yPSMwMDgwMDBdCisgICAgICAgIFJlbmRlcklubGlu
ZSB7U1BBTn0gYXQgKDAsMCkgc2l6ZSAxMTd4MTc0IFtjb2xvcj0jMDA4MDAwXQorICAgICAgICAg
IFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDExN3gxNzQKKyAgICAgICAgICAgIHRl
eHQgcnVuIGF0ICgwLDApIHdpZHRoIDExNzogIkciCisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0
fSBhdCAoMCwwKSBzaXplIDB4MAorICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDI2OCkgc2l6
ZSA3Njl4MzYKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNzUxeDM2
CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNzUxOiAiVGhpcyBjb250YWluZXIg
aGFzIHNSR0IgY29sb3IgY29ycmVjdGlvbiBzcGVjaWZpZWQsIGFuZCBzbyBkb2VzIHRoZSB0ZXh0
IGluc2lkZSwgc28gdGhlIHRleHQgd2lsbCBub3QgYmUgdmlzaWJsZSBzaW5jZSBib3RoIgorICAg
ICAgICAgIHRleHQgcnVuIGF0ICgwLDE4KSB3aWR0aCAxNTE6ICJhcmUgZ3JlZW4gYW5kIGNvcnJl
Y3RlZC4iCisgICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMCwzMjApIHNpemUgMjAweDIwMCBb
Ymdjb2xvcj0jMDA4MDAwXQorICAgICAgICBSZW5kZXJJbmxpbmUge1NQQU59IGF0ICgwLDApIHNp
emUgMTE3eDE3NCBbY29sb3I9IzAwODAwMF0KKyAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0g
YXQgKDAsMCkgc2l6ZSAxMTd4MTc0CisgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0
aCAxMTc6ICJHIgorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAweDAK
KyAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoMCw1MzYpIHNpemUgNzY5eDM2CisgICAgICAgIFJl
bmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDczMngzNgorICAgICAgICAgIHRleHQgcnVu
IGF0ICgwLDApIHdpZHRoIDczMjogIlRoaXMgY29udGFpbmVyIGhhcyBzUkdCIGNvbG9yIGNvcnJl
Y3Rpb24gc3BlY2lmaWVkLiBUaGUgdGV4dCBpbnNpZGUgZG9lcyBub3QgaGF2ZSB0aGUgcHJvcGVy
dHkgc3BlY2lmaWVkLCBidXQgdGhlIHRleHQiCisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMTgp
IHdpZHRoIDU4NDogImluaGVyaXRzIHRoZSBjb250YWluZXIncyBzdHlsZSwgc28gdGhlIHRleHQg
d2lsbCBub3QgYmUgdmlzaWJsZSBzaW5jZSBib3RoIGFyZSBncmVlbiBhbmQgY29ycmVjdGVkLiIK
KyAgICAgIFJlbmRlckJsb2NrIHtESVZ9IGF0ICgwLDU4OCkgc2l6ZSAyMDB4MjAwIFtiZ2NvbG9y
PSMwMDgwMDBdCisgICAgICAgIFJlbmRlcklubGluZSB7U1BBTn0gYXQgKDAsMCkgc2l6ZSAxMTd4
MTc0IFtjb2xvcj0jMDA4MDAwXQorICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCww
KSBzaXplIDExN3gxNzQKKyAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDExNzog
IkciCisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4MAorICAgICAg
UmVuZGVyQmxvY2sge1B9IGF0ICgwLDgwNCkgc2l6ZSA3Njl4MzYKKyAgICAgICAgUmVuZGVyVGV4
dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNzYxeDM2CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAs
MCkgd2lkdGggNzYxOiAiVGhpcyBjb250YWluZXIgaGFzIGRlZmF1bHQgY29sb3ItY29ycmVjdGlv
biBzcGVjaWZpZWQsIGFuZCB0aGUgdGV4dCBoYXMgc1JHQiBjb2xvciBjb3JyZWN0aW9uIHNwZWNp
ZmllZC4gVGhpcyB0ZXh0IGlzIHZpc2libGUiCisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMTgp
IHdpZHRoIDQ4ODogImV2ZW4gdGhvdWdoIGJvdGggYXJlIGdyZWVuIHNpbmNlIHRoZSB0ZXh0IGlz
IGNvcnJlY3RlZCBhbmQgdGhlIGNvbnRhaW5lciBpcyBub3QuIgorICAgICAgUmVuZGVyQmxvY2sg
e0RJVn0gYXQgKDAsODU2KSBzaXplIDIwMHgyMDAgW2JnY29sb3I9IzAwODAwMF0KKyAgICAgICAg
UmVuZGVySW5saW5lIHtTUEFOfSBhdCAoMCwwKSBzaXplIDExN3gxNzQgW2NvbG9yPSMwMDgwMDBd
CisgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMTE3eDE3NAorICAg
ICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMTE3OiAiRyIKKyAgICAgICAgUmVuZGVy
VGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1leHBlY3RlZC5jaGVja3N1bQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlv
bi1leHBlY3RlZC5jaGVja3N1bQkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLWV4cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxIEBACisxMWNmMDE2NzIwN2RlOTVlZWZiYTA4OTU5NzQ3MDQ2ZgpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9m
YXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29s
b3ItY29ycmVjdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMgQEAK
K2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUg
ODAweDYwMAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckJsb2NrIHtIVE1M
fSBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBz
aXplIDc4NHg1ODQKKyAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoMCwwKSBzaXplIDc4NHg5MAor
ICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA3Njl4OTAKKyAgICAgICAg
ICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA3NjM6ICJUaGlzIHRlc3QgZGVtb25zdHJhdGVzIC13
ZWJraXQtY29sb3ItY29ycmVjdGlvbi4gQmVsb3cgYXJlIDMgaW1hZ2VzIHdpdGggMjAgcGl4ZWwg
Ym9yZGVycy4gVGhlIGltYWdlcyBhcmUgYWxsIHRoZSBzYW1lIC0tIgorICAgICAgICAgIHRleHQg
cnVuIGF0ICgwLDE4KSB3aWR0aCA3NTU6ICJwdXJwbGUgd2l0aCBhbiBzUkdCIGNvbG9yIHByb2Zp
bGUuIFRoZSBib3JkZXIgaXMgdGhlIHNhbWUgQ1NTIGNvbG9yIGZvciBhbGwgdGhyZWUgaW1hZ2Vz
LiBUaGUgZmlyc3QgaW1hZ2UgaGFzIG5vIHNwZWNpYWwiCisgICAgICAgICAgdGV4dCBydW4gYXQg
KDAsMzYpIHdpZHRoIDc2OTogIkNTUy4gVGhlIHNlY29uZCBoYXMgLXdlYmtpdC1jb2xvci1jb3Jy
ZWN0aW9uIHNldCB0byBkZWZhdWx0LCBzbyBpdCBtYXRjaGVzIHRoZSBmaXJzdCBpbWFnZS4gQW5k
IHRoZSB0aGlyZCBoYXMgLXdlYmtpdC1jb2xvci0iCisgICAgICAgICAgdGV4dCBydW4gYXQgKDAs
NTQpIHdpZHRoIDc1OTogImNvcnJlY3Rpb24gc2V0IHRvIHNSR0IuIFRoaXMgY29sb3ItY29ycmVj
dHMgdGhlIHB1cnBsZSBib3JkZXIgZnJvbSB0aGUgc1JHQiBjb2xvciBzcGFjZSwgYW5kIHRoZSBy
ZXN1bHQgaXMgdGhhdCB0aGUgYm9yZGVyIgorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDcyKSB3
aWR0aCAxMzQ6ICJhbmQgdGhlIGltYWdlIG1hdGNoLiIKKyAgICAgIFJlbmRlckJsb2NrIChhbm9u
eW1vdXMpIGF0ICgwLDEwNikgc2l6ZSA3ODR4MTQ0CisgICAgICAgIFJlbmRlckltYWdlIHtJTUd9
IGF0ICgwLDApIHNpemUgMTQweDE0MCBbYm9yZGVyOiAoMjBweCBzb2xpZCAjNTYwMDYzKV0KKyAg
ICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgxNDAsMTI2KSBzaXplIDR4MTgKKyAgICAgICAg
ICB0ZXh0IHJ1biBhdCAoMTQwLDEyNikgd2lkdGggNDogIiAiCisgICAgICAgIFJlbmRlckltYWdl
IHtJTUd9IGF0ICgxNDQsMCkgc2l6ZSAxNDB4MTQwIFtib3JkZXI6ICgyMHB4IHNvbGlkICM1NjAw
NjMpXQorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDI4NCwxMjYpIHNpemUgNHgxOAor
ICAgICAgICAgIHRleHQgcnVuIGF0ICgyODQsMTI2KSB3aWR0aCA0OiAiICIKKyAgICAgICAgUmVu
ZGVySW1hZ2Uge0lNR30gYXQgKDI4OCwwKSBzaXplIDE0MHgxNDAgW2JvcmRlcjogKDIwcHggc29s
aWQgIzU2MDA2MyldCisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4
MAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAweDAKKyAgICAgICAg
UmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCkluZGV4OiBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1vbi1iYWNrZ3JvdW5kcy1leHBl
Y3RlZC5jaGVja3N1bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFz
dC9jc3MvY29sb3ItY29ycmVjdGlvbi1vbi1iYWNrZ3JvdW5kcy1leHBlY3RlZC5jaGVja3N1bQko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xvci1j
b3JyZWN0aW9uLW9uLWJhY2tncm91bmRzLWV4cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxIEBACisxZWNhNTIxN2Q2MDAwYWFmYWZiZTFiZGRmNjRiNWVlYgpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Nz
cy9jb2xvci1jb3JyZWN0aW9uLW9uLWJhY2tncm91bmRzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1v
bi1iYWNrZ3JvdW5kcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1vbi1iYWNrZ3JvdW5kcy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMgQEAKK2xheWVyIGF0ICgwLDApIHNp
emUgODAweDYwMAorICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAorbGF5ZXIgYXQg
KDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgw
MHg2MDAKKyAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHg1ODQKKyAgICAg
IFJlbmRlckJsb2NrIHtQfSBhdCAoMCwwKSBzaXplIDc4NHgxOAorICAgICAgICBSZW5kZXJUZXh0
IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAxMzB4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCww
KSB3aWR0aCAxMzA6ICJUaGVzZSBzaG91bGQgbWF0Y2g6IgorICAgICAgUmVuZGVyQmxvY2sgKGZs
b2F0aW5nKSB7RElWfSBhdCAoMCwzNCkgc2l6ZSAxMDB4MTAwIFtiZ2NvbG9yPSM1NjAwNjNdCisg
ICAgICBSZW5kZXJCbG9jayAoYW5vbnltb3VzKSBhdCAoMCwzNCkgc2l6ZSA3ODR4MTA0CisgICAg
ICAgIFJlbmRlckltYWdlIHtJTUd9IGF0ICgxMDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICAgIFJl
bmRlclRleHQgeyN0ZXh0fSBhdCAoMjAwLDg2KSBzaXplIDR4MTgKKyAgICAgICAgICB0ZXh0IHJ1
biBhdCAoMjAwLDg2KSB3aWR0aCA0OiAiICIKKyAgICAgICAgUmVuZGVyQlIge0JSfSBhdCAoMCww
KSBzaXplIDB4MAorICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDE1NCkgc2l6ZSA3ODR4MTgK
KyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMjM2eDE4CisgICAgICAg
ICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMjM2OiAiVGhlc2Ugc2hvdWxkIG5vdCBtYXRjaCAo
YXQgdGhpcyB0aW1lKToiCisgICAgICBSZW5kZXJCbG9jayAoZmxvYXRpbmcpIHtESVZ9IGF0ICgw
LDE4OCkgc2l6ZSAxMDB4MTAwIFtiZ2NvbG9yPSM1NjAwNjNdCisgICAgICBSZW5kZXJCbG9jayAo
YW5vbnltb3VzKSBhdCAoMCwxODgpIHNpemUgNzg0eDEwMAorICAgICAgICBSZW5kZXJJbWFnZSB7
SU1HfSBhdCAoMTAwLDApIHNpemUgMTAweDEwMAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0g
YXQgKDAsMCkgc2l6ZSAweDAKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNp
emUgMHgwCisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4MApJbmRl
eDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tb24t
dGV4dC1leHBlY3RlZC5jaGVja3N1bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1vbi10ZXh0LWV4cGVjdGVkLmNoZWNrc3Vt
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2NvbG9y
LWNvcnJlY3Rpb24tb24tdGV4dC1leHBlY3RlZC5jaGVja3N1bQkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSBAQAorNTgzYmMzYzk3ZjY2MmZjN2ZiNGFlZTM2M2QzNmIwMzQKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29s
b3ItY29ycmVjdGlvbi1vbi10ZXh0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1vbi10ZXh0LWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Nz
cy9jb2xvci1jb3JyZWN0aW9uLW9uLXRleHQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDI1IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyVmlldyBh
dCAoMCwwKSBzaXplIDgwMHg2MDAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5k
ZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgUmVuZGVyQm9keSB7Qk9E
WX0gYXQgKDgsOCkgc2l6ZSA3ODR4NTg0CisgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMCkg
c2l6ZSA3ODR4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNjE4
eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNjE4OiAiVGhlIGRpc3RpbmN0
aW9uIGJlbG93IGlzIHN1YnRsZSwgYnV0IHRoZSBtaWRkbGUgXCJIXCIgaXMgY29sb3ItY29ycmVj
dGVkLCBhbmQgdGhlIGZpcnN0IGFuZCBsYXN0IGFyZSBub3QuIgorICAgICAgUmVuZGVyQmxvY2sg
KGFub255bW91cykgYXQgKDAsMzQpIHNpemUgNzg0eDE3NAorICAgICAgICBSZW5kZXJJbmxpbmUg
e1NQQU59IGF0ICgwLDApIHNpemUgMTE3eDE3NCBbY29sb3I9IzAwODAwMF0KKyAgICAgICAgICBS
ZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAxMTd4MTc0CisgICAgICAgICAgICB0ZXh0
IHJ1biBhdCAoMCwwKSB3aWR0aCAxMTc6ICJIIgorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0g
YXQgKDExNywxMjIpIHNpemUgNHgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgxMTcsMTIyKSB3
aWR0aCA0OiAiICIKKyAgICAgICAgUmVuZGVySW5saW5lIHtTUEFOfSBhdCAoMCwwKSBzaXplIDEx
N3gxNzQgW2NvbG9yPSMwMDgwMDBdCisgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgx
MjEsMCkgc2l6ZSAxMTd4MTc0CisgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMTIxLDApIHdpZHRo
IDExNzogIkgiCisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMjM4LDEyMikgc2l6ZSA0
eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDIzOCwxMjIpIHdpZHRoIDQ6ICIgIgorICAgICAg
ICBSZW5kZXJJbmxpbmUge1NQQU59IGF0ICgwLDApIHNpemUgMTE3eDE3NCBbY29sb3I9IzAwODAw
MF0KKyAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDI0MiwwKSBzaXplIDExN3gxNzQK
KyAgICAgICAgICAgIHRleHQgcnVuIGF0ICgyNDIsMCkgd2lkdGggMTE3OiAiSCIKKyAgICAgICAg
UmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCisgICAgICAgIFJlbmRlclRleHQg
eyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4MAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQg
KDAsMCkgc2l6ZSAweDAKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Nzcy9n
ZXRDb21wdXRlZFN0eWxlL2NvbXB1dGVkLXN0eWxlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvZ2V0Q29tcHV0ZWRTdHlsZS9jb21w
dXRlZC1zdHlsZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUwNTcwKQorKysgTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2dldENvbXB1dGVkU3R5bGUvY29tcHV0ZWQtc3R5bGUtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDcgQEAgem9vbTogMTsKIC13
ZWJraXQtYm94LXJlZmxlY3Q6IG5vbmU7CiAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CiAtd2Vi
a2l0LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OworLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uOiBk
ZWZhdWx0OwogLXdlYmtpdC1jb2x1bW4tYnJlYWstYWZ0ZXI6IGF1dG87CiAtd2Via2l0LWNvbHVt
bi1icmVhay1iZWZvcmU6IGF1dG87CiAtd2Via2l0LWNvbHVtbi1icmVhay1pbnNpZGU6IGF1dG87
CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvZ2V0Q29tcHV0ZWRTdHls
ZS9jb21wdXRlZC1zdHlsZS13aXRob3V0LXJlbmRlcmVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvZ2V0Q29tcHV0ZWRTdHlsZS9j
b21wdXRlZC1zdHlsZS13aXRob3V0LXJlbmRlcmVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTA1
NzApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvZ2V0Q29tcHV0ZWRTdHls
ZS9jb21wdXRlZC1zdHlsZS13aXRob3V0LXJlbmRlcmVyLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMTIwLDYgKzEyMCw3IEBAIENvbXB1dGVkIHN0eWxlIG9mIGFuIGVsZW1lbnQgd2hv
c2UgcGFyZW4KICAgICAtd2Via2l0LWJveC1yZWZsZWN0OiBub25lCiAgICAgLXdlYmtpdC1ib3gt
c2hhZG93OiBub25lCiAgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBjb250ZW50LWJveAorICAgIC13
ZWJraXQtY29sb3ItY29ycmVjdGlvbjogZGVmYXVsdAogICAgIC13ZWJraXQtY29sdW1uLWJyZWFr
LWFmdGVyOiBhdXRvCiAgICAgLXdlYmtpdC1jb2x1bW4tYnJlYWstYmVmb3JlOiBhdXRvCiAgICAg
LXdlYmtpdC1jb2x1bW4tYnJlYWstaW5zaWRlOiBhdXRvCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcv
Y3NzL2dldENvbXB1dGVkU3R5bGUtYmFzaWMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3N2Zy9jc3MvZ2V0Q29tcHV0ZWRTdHlsZS1iYXNpYy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDUwNTcwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2Nzcy9nZXRDb21wdXRlZFN0eWxlLWJh
c2ljLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDYgKzI0MCw4IEBAIHJlY3Q6
IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoLXdlYmtpdC1ib3gKIHJlY3Q6IHN0eWxlLmdldFByb3Bl
cnR5Q1NTVmFsdWUoLXdlYmtpdC1ib3gtc2hhZG93KSA6IFtvYmplY3QgQ1NTUHJpbWl0aXZlVmFs
dWVdCiByZWN0OiBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKC13ZWJraXQtYm94LXNpemluZykgOiBj
b250ZW50LWJveAogcmVjdDogc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZSgtd2Via2l0LWJveC1z
aXppbmcpIDogW29iamVjdCBDU1NQcmltaXRpdmVWYWx1ZV0KK3JlY3Q6IHN0eWxlLmdldFByb3Bl
cnR5VmFsdWUoLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uKSA6IGRlZmF1bHQKK3JlY3Q6IHN0eWxl
LmdldFByb3BlcnR5Q1NTVmFsdWUoLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uKSA6IFtvYmplY3Qg
Q1NTUHJpbWl0aXZlVmFsdWVdCiByZWN0OiBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKC13ZWJraXQt
Y29sdW1uLWJyZWFrLWFmdGVyKSA6IGF1dG8KIHJlY3Q6IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFs
dWUoLXdlYmtpdC1jb2x1bW4tYnJlYWstYWZ0ZXIpIDogW29iamVjdCBDU1NQcmltaXRpdmVWYWx1
ZV0KIHJlY3Q6IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoLXdlYmtpdC1jb2x1bW4tYnJlYWstYmVm
b3JlKSA6IGF1dG8KQEAgLTY1Miw2ICs2NTQsOCBAQCBnOiBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVl
KC13ZWJraXQtYm94LXNoCiBnOiBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKC13ZWJraXQtYm94
LXNoYWRvdykgOiBbb2JqZWN0IENTU1ByaW1pdGl2ZVZhbHVlXQogZzogc3R5bGUuZ2V0UHJvcGVy
dHlWYWx1ZSgtd2Via2l0LWJveC1zaXppbmcpIDogY29udGVudC1ib3gKIGc6IHN0eWxlLmdldFBy
b3BlcnR5Q1NTVmFsdWUoLXdlYmtpdC1ib3gtc2l6aW5nKSA6IFtvYmplY3QgQ1NTUHJpbWl0aXZl
VmFsdWVdCitnOiBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKC13ZWJraXQtY29sb3ItY29ycmVjdGlv
bikgOiBkZWZhdWx0CitnOiBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKC13ZWJraXQtY29sb3It
Y29ycmVjdGlvbikgOiBbb2JqZWN0IENTU1ByaW1pdGl2ZVZhbHVlXQogZzogc3R5bGUuZ2V0UHJv
cGVydHlWYWx1ZSgtd2Via2l0LWNvbHVtbi1icmVhay1hZnRlcikgOiBhdXRvCiBnOiBzdHlsZS5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKC13ZWJraXQtY29sdW1uLWJyZWFrLWFmdGVyKSA6IFtvYmplY3Qg
Q1NTUHJpbWl0aXZlVmFsdWVdCiBnOiBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKC13ZWJraXQtY29s
dW1uLWJyZWFrLWJlZm9yZSkgOiBhdXRvCg==
</data>
<flag name="review"
          id="24183"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42846</attachid>
            <date>2009-11-09 19:45:55 -0800</date>
            <delta_ts>2009-11-10 12:05:06 -0800</delta_ts>
            <desc>New Patch</desc>
            <filename>forReview2.txt</filename>
            <type>text/plain</type>
            <size>123760</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDcwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjM0IEBACisyMDA5LTExLTA5ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXgg
Zm9yIDxyZGFyOi8vcHJvYmxlbS83MDU5NzEwPiAKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5n
LQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzExOTYg
SW1wbGVtZW50IC13ZWJraXQtCisgICAgICAgIGNvbG9yLWNvcnJlY3Rpb24gZm9yIENTUyBjb2xv
cnMKKworICAgICAgICBOZXcgZXhwb3J0ZWQgc3ltYm9sIGZvciBHcmFwaGljc0NvbnRleHQ6OmZp
bGxDb2xvcigpIHdoaWNoIG5vdyAKKyAgICAgICAgYWNjZXB0cyBhIENvbG9yU3BhY2UgYXMgYW4g
b3B0aW9uYWwgcGFyYW1ldGVyLgorICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6CisKKyAgICAg
ICAgQWRkZWQgYSBuZXcgZmlsZSwgQ29sb3JTcGFjZS5oLCB0byBkZWZpbmUgdGhlIENvbG9yU3Bh
Y2UgZW51bS4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisK
KyAgICAgICAgQ29tcHV0ZWQgU3R5bGUgZm9yIC13ZWJraXQtY29sb3ItY29ycmVjdGlvbgorICAg
ICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6
Z2V0UHJvcGVydHlDU1NWYWx1ZSk6CisKKyAgICAgICAgUGFyc2UgLXdlYmtpdC1jb2xvci1jb3Jy
ZWN0aW9uCisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OnBhcnNlVmFsdWUpOgorCisgICAgICAgTWFwIENTUyBpZGVudGlmaWVycyB0byB0
aGUgYXBwcm9wcmlhdGUgdmFsdWVzIG9mIHRoZSBDb2xvclNwYWNlIGVudW0KKyAgICAgICAgKiBj
c3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJp
bWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
aW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBDb2xvclNwYWNlKToKKworICAgICAgICBOZXcgcHJvcGVy
dHkgLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uCisgICAgICAgICogY3NzL0NTU1Byb3BlcnR5TmFt
ZXMuaW46CisKKyAgICAgICAgTWFwIC13ZWJraXQtY29sb3ItY29ycmVjdGlvbiBpbnRvIHRoZSBS
ZW5kZXJTdHlsZS4KKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KToKKworICAgICAgICBB
ZGQgbmV3IHZhbHVlIHNSR0IuCisgICAgICAgICogY3NzL0NTU1ZhbHVlS2V5d29yZHMuaW46CisK
KyAgICAgICAgQ29tbWVudCBvdXQgdGhlIHJlZmVyZW5jZSB0byBzUkdCIHNpbmNlIGl0IHdpbGwg
bm93IGJlIGluaGVyaXRlZCBhcyAKKyAgICAgICAgYSB2YWx1ZSBmcm9tIENTU1ZhbHVlS2V5d29y
ZHMuCisgICAgICAgICogY3NzL1NWR0NTU1ZhbHVlS2V5d29yZHMuaW46CisKKyAgICAgICAgRGVm
aW5pdGlvbiBvZiB0aGUgQ29sb3JTcGFjZSBlbnVtLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yU3BhY2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjopOgorCisgICAgICAg
IFRoZXNlIGZ1bmN0aW9ucyBhbGwgbm93IHRha2UgYSBDb2xvclNwYWNlIGFzIGEgcGFyYW1ldGVy
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0hpZ2hsaWdodEZvclRleHQpOgorCisgICAgICAgIFJl
dHVybiB0aGUgYXBwcm9wcmlhdGUgQ29sb3JTcGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmZpbGxDb2xvclNwYWNlKToKKworICAgICAgICBUaGVzZSBmdW5jdGlvbnMgYWxs
IGNhbGwgb3RoZXIgZnVuY3Rpb25zIHdoaWNoIHJlcXVpcmUgYSBDb2xvclNwYWNlIAorICAgICAg
ICBhcyBhIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZp
bGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tl
R3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3Jh
ZGllbnQpOgorCisgICAgICAgIEFsbCBvZiB0aGUgR3JhcGhpY3NDb250ZXh0IGZ1bmN0aW9ucyB0
aGF0IHRha2UgYSBDb2xvciBzaG91bGQgbm93IAorICAgICAgICBhbHNvIHRha2UgYSBDb2xvclNw
YWNlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorCisg
ICAgICAgIEFkZGVkIG5ldyBtZW1iZXIgdmFyaWFibGVzIHN0b2tlQ29sb3JTcGFjZSBhbmQgZmls
bENvbG9yU3BhY2UuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
UHJpdmF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlKToKKworICAgICAgICBBdHRlbXB0IHRvIGtlZXAgdGhlIENhaXJvIHBv
cnQgYnVpbGRpbmcgd2l0aCBhbGwgb2YgdGhlIG1hc3NpdmUgCisgICAgICAgIGNoYW5nZXMgdG8g
R3JhcGhpY3NDb250ZXh0LiAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtRmlsbENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1TdHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisKKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c1JHQkNv
bG9yU3BhY2VSZWYpOiBOZXcgc3RhdGljIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIAorICAgICAg
ICBDR0NvbG9yU3BhY2VSZWYgZm9yIHRoZSBzUkdCIGNvbG9yIHNwYWNlLgorICAgICAgICAoV2Vi
Q29yZTo6ZGV2aWNlUkdCQ29sb3JTcGFjZVJlZik6IE5ldyBzdGF0aWMgZnVuY3Rpb24gdGhhdCBy
ZXR1cm5zIAorICAgICAgICBhIENHQ29sb3JTcGFjZVJlZiBmb3IgdGhlIGRldmljZSBSR0IgY29s
b3Igc3BhY2UuCisKKyAgICAgICAgKFdlYkNvcmU6OnNldENHRmlsbENvbG9yKTogTm93IHRha2Vz
IGEgQ29sb3JTcGFjZSBwYXJhbWV0ZXIgYW5kIAorICAgICAgICBzZXRzIHRoZSBmaWxsIGNvbG9y
IHRvIHRoZSBzcGVjaWZpZWQgY29sb3IgaW4gdGhlIGdpdmVuIENvbG9yU3BhY2UuCisgICAgICAg
IChXZWJDb3JlOjpzZXRDR1N0cm9rZUNvbG9yKTogU2FtZSwgYnV0IGZvciBzdHJva2UuCisKKyAg
ICAgICAgKFdlYkNvcmU6OnNldENHRmlsbENvbG9yU3BhY2UpOiBOZXcgc3RhdGljIHRvIHNldCB0
aGUgCisgICAgICAgIENHRmlsbENvbG9yU3BhY2UgdG8gdGhlIGdpdmVuIENvbG9yU3BhY2UKKyAg
ICAgICAgKFdlYkNvcmU6OnNldENHU3Ryb2tlQ29sb3JTcGFjZSk6IFNhbWUsIGJ1dCBmb3Igc3Ry
b2tlLgorCisgICAgICAgIFNlbmQgQ29sb3JTcGFjZXMgd2hlbiBhcHByb3ByaWF0ZSwgc2V0IENv
bG9yU3BhY2VzIHdoZW4gCisgICAgICAgIGFwcHJvcHJpYXRlLCBhbmQgY2hlY2sgQ29sb3JTcGFj
ZXMgd2hlbiBhcHByb3ByaWF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdM
aW5lRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtU3Ryb2tlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybUZpbGxDb2xvcik6CisKKyAgICAgICAgQXR0ZW1wdCB0byBrZWVwIEhhaWt1IGJ1aWxk
aW5nLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhh
aWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3Ip
OgorCisgICAgICAgIEF0dGVtcHQgdG8ga2VlcCBRVCBidWlsZGluZy4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKToKKworICAgICAgICBBdHRlbXB0IHRvIGtl
ZXAgV2luY2UgYnVpbGRpbmcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3Jh
cGhpY3NDb250ZXh0V2luY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtRmlsbENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1TdHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNs
ZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVk
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hh
ZG93KToKKworICAgICAgICBBdHRlbXB0IHRvIGtlZXAgV1ggYnVpbGRpbmcuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcik6CisKKyAgICAgICAgQWRkZWQgZnVu
Y3Rpb25zIGNvbG9yU3BhY2UoKSBhbmQgc2V0Q29sb3JTcGFjZSgpCisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFn
czo6Y29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6c2V0Q29s
b3JTcGFjZSk6CisKKyAgICAgICAgVGhlIENvbG9yU3BhY2UgaXMgc3RvcmVkIGhlcmUuCisgICAg
ICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZUluaGVyaXRlZERhdGEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSYXJlSW5oZXJpdGVkRGF0YTo6U3R5bGVSYXJlSW5oZXJpdGVkRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJhcmVJbmhlcml0ZWREYXRhOjpvcGVyYXRvcj09
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5oOgor
CisgICAgICAgIEFsbCBvZiB0aGVzZSBjYWxsIHNpdGVzIGNhbGwgR3JhcGhpY3NDb250ZXh0IGZ1
bmN0aW9ucyB3aGljaCBub3cgCisgICAgICAgIHJlcXVpcmUgQ29sb3JTcGFjZXMuCisgICAgICAg
ICogZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdGlvbkNvbnRyb2xsZXI6OnBhaW50Q2FyZXQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SW50ZXJuYWwpOgorICAgICAgICAqIGh0bWwvY2FudmFz
L0NhbnZhc1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjphcHBseVN0
cm9rZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjphcHBseUZpbGxDb2xv
cik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6ZHJhd091dGxpbmVkUXVhZCk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyVGhlbWU6OnBhaW50U2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxi
YXJUaGVtZUNvbXBvc2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNv
bXBvc2l0ZTo6cGFpbnRTY3JvbGxDb3JuZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpmaWxsV2l0aFNvbGlkQ29sb3Ip
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlOjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94OjpwYWludCk6CisgICAgICAgICogcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0Jv
eDo6cGFpbnRUZXh0RGVjb3JhdGlvbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZUdyYXBoaWNzQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpwYWludFRleHRXaXRoU2hhZG93cyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVUZXh0Qm94OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpw
YWludFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludENv
bXBvc2l0aW9uQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpw
YWludERlY29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRU
ZXh0TWF0Y2hNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRD
b21wb3NpdGlvblVuZGVybGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmZpbGxIb3Jpem9udGFsU2VsZWN0aW9uR2FwKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpmaWxsVmVydGljYWxTZWxlY3Rpb25HYXApOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmZpbGxMZWZ0U2VsZWN0aW9uR2FwKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpmaWxsUmlnaHRTZWxlY3Rpb25HYXApOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3cpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplY3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJGcmFtZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFtZVNldDo6
cGFpbnRDb2x1bW5Cb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhbWVTZXQ6OnBh
aW50Um93Qm9yZGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
cGFpbnRTY3JvbGxDb3JuZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50
UmVzaXplcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1CYWNrZ3JvdW5kKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMaXN0TWFya2VyOjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmRyYXdMaW5lRm9yQm94U2lkZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmRyYXdBcmNGb3JCb3hTaWRlKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyUmVwbGFjZWQ6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2Nyb2xs
YmFyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyVGhlbWU6OnBh
aW50U2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbik6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVmlldzo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OnBhaW50KToK
KyAgICAgICAgKiByZW5kZXJpbmcvU1ZHSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAgICogc3ZnL2dy
YXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXApOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQ
YWludFNlcnZlclNvbGlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyU29s
aWQ6OnNldHVwKToKKwogMjAwOS0xMS0wOSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCShy
ZXZpc2lvbiA1MDY3MCkKKysrIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkod29ya2luZyBjb3B5
KQpAQCAtMzQzLDcgKzM0Myw3IEBAIF9fWk43V2ViQ29yZTE1Rm9jdXNDb250cm9sbGVyMTVzZXRG
b2N1c2UKIF9fWk43V2ViQ29yZTE1Rm9jdXNDb250cm9sbGVyMTVzZXRJbml0aWFsRm9jdXNFTlNf
MTRGb2N1c0RpcmVjdGlvbkVQTlNfMTNLZXlib2FyZEV2ZW50RQogX19aTjdXZWJDb3JlMTVGb2N1
c0NvbnRyb2xsZXIxOGZvY3VzZWRPck1haW5GcmFtZUV2CiBfX1pON1dlYkNvcmUxNUZvY3VzQ29u
dHJvbGxlcjlzZXRBY3RpdmVFYgotX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxMnNldEZp
bGxDb2xvckVSS05TXzVDb2xvckUKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTJzZXRG
aWxsQ29sb3JFUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQogX19aTjdXZWJDb3JlMTVHcmFw
aGljc0NvbnRleHRDMUVQOUNHQ29udGV4dAogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHRE
MUV2CiBfX1pON1dlYkNvcmUxNUpTRE9NV2luZG93QmFzZTE4Y29tbW9uSlNHbG9iYWxEYXRhRXYK
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA1MDY3MCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjQ2LDYgKzIyNDYsNyBAQAogCQk5MzgxOTIwMzBGODdFMUU2MDBE
NTM1MkEgLyogQmluYXJ5UHJvcGVydHlMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzODE5MjAyMEY4N0UxRTYwMEQ1MzUyQSAvKiBCaW5hcnlQ
cm9wZXJ0eUxpc3QuY3BwICovOyB9OwogCQk5MzgxOTIwNTBGODdFMUVDMDBENTM1MkEgLyogQmlu
YXJ5UHJvcGVydHlMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzgxOTIwNDBGODdFMUVDMDBENTM1MkEgLyogQmluYXJ5UHJvcGVydHlMaXN0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTM4MkFB
QjQwRDhDMzg2MTAwRjM1N0E2IC8qIE5vZGVXaXRoSW5kZXguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzODJBQUIxMEQ4QzM4NjEwMEYzNTdBNiAvKiBO
b2RlV2l0aEluZGV4LmggKi87IH07CisJCTkzODJERjU4MTBBOEQ1QzkwMDkyNTY1MiAvKiBDb2xv
clNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
MzgyREY1NzEwQThENUM5MDA5MjU2NTIgLyogQ29sb3JTcGFjZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzODMxQjU3MEQwODdENjAwMEU1Qzk4
NCAvKiBFeGNlcHRpb25Db2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzODMxQjU2MEQwODdENjAwMEU1Qzk4NCAvKiBFeGNlcHRpb25Db2RlLmNw
cCAqLzsgfTsKIAkJOTM4RTY1RjEwOUYwOTg0MDAwOEE0OEVDIC8qIEpTSFRNTEVsZW1lbnRXcmFw
cGVyRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTM4RTY1RjAwOUYwOTg0MDAwOEE0OEVDIC8qIEpTSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9y
eS5oICovOyB9OwogCQk5MzhFNjVGNzA5RjA5ODVEMDA4QTQ4RUMgLyogSlNIVE1MRWxlbWVudFdy
YXBwZXJGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzOEU2NUY2MDlGMDk4NUQwMDhBNDhFQyAvKiBKU0hUTUxFbGVtZW50V3JhcHBlckZh
Y3RvcnkuY3BwICovOyB9OwpAQCAtNzQ5OSw2ICs3NTAwLDcgQEAKIAkJOTM4MTkyMDIwRjg3RTFF
NjAwRDUzNTJBIC8qIEJpbmFyeVByb3BlcnR5TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBCaW5hcnlQcm9wZXJ0eUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5MzgxOTIwNDBGODdFMUVDMDBENTM1MkEgLyogQmluYXJ5UHJvcGVydHlM
aXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpbmFyeVByb3BlcnR5TGlz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzgyQUFCMTBEOEMzODYxMDBGMzU3
QTYgLyogTm9kZVdpdGhJbmRleC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBO
b2RlV2l0aEluZGV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzODJERjU3MTBB
OEQ1QzkwMDkyNTY1MiAvKiBDb2xvclNwYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENvbG9yU3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM4MzFC
NTYwRDA4N0Q2MDAwRTVDOTg0IC8qIEV4Y2VwdGlvbkNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRXhjZXB0aW9uQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzOEU2NUYwMDlGMDk4NDAwMDhBNDhFQyAvKiBKU0hUTUxFbGVtZW50V3Jh
cHBlckZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTEVs
ZW1lbnRXcmFwcGVyRmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzhF
NjVGNjA5RjA5ODVEMDA4QTQ4RUMgLyogSlNIVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxFbGVtZW50V3JhcHBl
ckZhY3RvcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQwNjcsNiArMTQw
NjksNyBAQAogCQkJCUE4OTk0MzI2MEI0MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5oICov
LAogCQkJCUIyNzUzNTM4MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5jcHAgKi8sCiAJCQkJQjI3
NTM1MzkwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggKi8sCisJCQkJOTM4MkRGNTcxMEE4RDVD
OTAwOTI1NjUyIC8qIENvbG9yU3BhY2UuaCAqLywKIAkJCQlBOENCNDEwMjBFODVCOEE1MDAzMkM0
RjAgLyogRGFzaEFycmF5LmggKi8sCiAJCQkJQjI3NTM1M0EwQjA1MzgxNDAwMkNFNjRGIC8qIEZs
b2F0UG9pbnQuY3BwICovLAogCQkJCUIyNzUzNTNCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBv
aW50LmggKi8sCkBAIC0xODA5OSw2ICsxODEwMiw3IEBACiAJCQkJMTQ3OUZBRjAxMDlBRTM3NTAw
REVENjU1IC8qIFJlbmRlclJ1YnlCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc5RkFGMjEw
OUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVJ1bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3
OUZBRjQxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnlUZXh0LmggaW4gSGVhZGVycyAqLywK
KwkJCQk5MzgyREY1ODEwQThENUM5MDA5MjU2NTIgLyogQ29sb3JTcGFjZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJ
KHJldmlzaW9uIDUwNjcwKQorKysgV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczLDYgKzE3Myw3IEBAIHN0YXRpYyBjb25zdCBp
bnQgY29tcHV0ZWRQcm9wZXJ0aWVzW10gPSAKICAgICBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxl
Y3QsCiAgICAgQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3csCiAgICAgQ1NTUHJvcGVydHlXZWJr
aXRCb3hTaXppbmcsCisgICAgQ1NTUHJvcGVydHlXZWJraXRDb2xvckNvcnJlY3Rpb24sCiAgICAg
Q1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0FmdGVyLAogICAgIENTU1Byb3BlcnR5V2Via2l0
Q29sdW1uQnJlYWtCZWZvcmUsCiAgICAgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0luc2lk
ZSwKQEAgLTEzNDgsNiArMTM0OSw4IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVk
U3R5bGVEZWMKICAgICAgICAgICAgIHJldHVybiBnZXRUaW1pbmdGdW5jdGlvblZhbHVlKHN0eWxl
LT50cmFuc2l0aW9ucygpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBvaW50ZXJFdmVudHM6
CiAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+cG9p
bnRlckV2ZW50cygpKTsKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbG9yQ29ycmVj
dGlvbjoKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxl
LT5jb2xvclNwYWNlKCkpOwogCiAgICAgICAgIC8qIFNob3J0aGFuZCBwcm9wZXJ0aWVzLCBjdXJy
ZW50bHkgbm90IHN1cHBvcnRlZCBzZWUgYnVnIDEzNjU4Ki8KICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJhY2tncm91bmQ6CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDUwNjcwKQorKysgV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0NSw2ICsxMjQ1LDEw
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGIKICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Qm94U2l6aW5nOgogICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSBpZCA9
PSBDU1NWYWx1ZUJvcmRlckJveCB8fCBpZCA9PSBDU1NWYWx1ZUNvbnRlbnRCb3g7CiAgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2xvckNvcnJlY3Rpb246CisgICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZVNyZ2IgfHwgaWQgPT0gQ1NTVmFsdWVEZWZhdWx0KQorICAg
ICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWU6IHsKICAgICAgICAgY29uc3QgaW50IHByb3BlcnRp
ZXNbNV0gPSB7IENTU1Byb3BlcnR5V2Via2l0TWFycXVlZURpcmVjdGlvbiwgQ1NTUHJvcGVydHlX
ZWJraXRNYXJxdWVlSW5jcmVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlUmVwZXRpdGlvbiwKSW5kZXg6IFdlYkNvcmUvY3Nz
L0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9D
U1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgJKHJldmlzaW9uIDUwNjcwKQorKysgV2ViQ29yZS9j
c3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAjaWZuZGVmIENTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3NfaAogI2RlZmluZSBDU1NQ
cmltaXRpdmVWYWx1ZU1hcHBpbmdzX2gKIAorI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKICNpbmNs
dWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIK
ICNpbmNsdWRlICJGb250U21vb3RoaW5nTW9kZS5oIgpAQCAtMTg4MSw2ICsxODgyLDMyIEBAIHRl
bXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGUKICAgICB9CiB9CiAKK3RlbXBs
YXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShDb2xvclNw
YWNlIHNwYWNlKQorICAgIDogbV90eXBlKENTU19JREVOVCkKK3sKKyAgICBzd2l0Y2ggKHNwYWNl
KSB7CisgICAgICAgIGNhc2UgRGV2aWNlQ29sb3JTcGFjZToKKyAgICAgICAgICAgIG1fdmFsdWUu
aWRlbnQgPSBDU1NWYWx1ZURlZmF1bHQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBzUkdCQ29sb3JTcGFjZToKKyAgICAgICAgICAgIG1fdmFsdWUuaWRlbnQgPSBDU1NWYWx1ZVNy
Z2I7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIENT
U1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBDb2xvclNwYWNlKCkgY29uc3QKK3sKKyAgICBzd2l0
Y2ggKG1fdmFsdWUuaWRlbnQpIHsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZURlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gRGV2aWNlQ29sb3JTcGFjZTsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVNy
Z2I6CisgICAgICAgICAgICByZXR1cm4gc1JHQkNvbG9yU3BhY2U7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBE
ZXZpY2VDb2xvclNwYWNlOworICAgIH0KK30KKwogI2lmIEVOQUJMRShTVkcpCiAKIHRlbXBsYXRl
PD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShMaW5lQ2FwIGUp
CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eU5hbWVzLmluCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW4JKHJldmlzaW9uIDUwNjcwKQorKysgV2ViQ29y
ZS9jc3MvQ1NTUHJvcGVydHlOYW1lcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMTg1LDYgKzE4NSw3
IEBAIHpvb20KIC13ZWJraXQtYm94LXJlZmxlY3QKIC13ZWJraXQtYm94LXNoYWRvdwogLXdlYmtp
dC1ib3gtc2l6aW5nCistd2Via2l0LWNvbG9yLWNvcnJlY3Rpb24KIC13ZWJraXQtY29sdW1uLWJy
ZWFrLWFmdGVyCiAtd2Via2l0LWNvbHVtbi1icmVhay1iZWZvcmUKIC13ZWJraXQtY29sdW1uLWJy
ZWFrLWluc2lkZQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDUwNjcw
KQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUyNjcsNiArNTI2NywxOCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHko
aW50CiAgICAgICAgIG1fc3R5bGUtPnNldFBvaW50ZXJFdmVudHMoKnByaW1pdGl2ZVZhbHVlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sb3JD
b3JyZWN0aW9uOiB7CisgICAgICAgIGlmIChpc0luaGVyaXQpIAorICAgICAgICAgICAgbV9zdHls
ZS0+c2V0Q29sb3JTcGFjZShtX3BhcmVudFN0eWxlLT5jb2xvclNwYWNlKCkpOworICAgICAgICBl
bHNlIGlmIChpc0luaXRpYWwpCisgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb2xvclNwYWNlKERl
dmljZUNvbG9yU3BhY2UpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICghcHJpbWl0
aXZlVmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbV9zdHlsZS0+
c2V0Q29sb3JTcGFjZSgqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUludmFsaWQ6CiAgICAgICAgIHJldHVybjsK
ICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFN0cmV0Y2g6CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NW
YWx1ZUtleXdvcmRzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1ZhbHVlS2V5d29y
ZHMuaW4JKHJldmlzaW9uIDUwNjcwKQorKysgV2ViQ29yZS9jc3MvQ1NTVmFsdWVLZXl3b3Jkcy5p
bgkod29ya2luZyBjb3B5KQpAQCAtNjM4LDMgKzYzOCw3IEBAIHN1YnBpeGVsLWFudGlhbGlhc2Vk
CiBvcHRpbWl6ZVNwZWVkCiBvcHRpbWl6ZUxlZ2liaWxpdHkKIGdlb21ldHJpY1ByZWNpc2lvbgor
CisjIC13ZWJraXQtY29sb3ItY29ycmVjdGlvbgorI2RlZmF1bHQKK3NSR0IKSW5kZXg6IFdlYkNv
cmUvY3NzL1NWR0NTU1ZhbHVlS2V5d29yZHMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3Mv
U1ZHQ1NTVmFsdWVLZXl3b3Jkcy5pbgkocmV2aXNpb24gNTA2NzApCisrKyBXZWJDb3JlL2Nzcy9T
VkdDU1NWYWx1ZUtleXdvcmRzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNyArMTgzLDcgQEAg
bmV3CiAjIENTU19QUk9QX1NUT1BfT1BBQ0lUWQogIyBDU1NfUFJPUF9DT0xPUl9JTlRFUlBPTEFU
SU9OCiAjYXV0bwotc1JHQgorI3NSR0IKIGxpbmVhclJHQgogCiAjIENTU19QUk9QX0NPTE9SX0lO
VEVSUE9MQVRJT05fRklMVEVSUwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9s
bGVyLmNwcAkocmV2aXNpb24gNTA2NzApCisrKyBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29u
dHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5NCwxMSArOTk0LDE0IEBAIHZvaWQgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6cGFpbnRDYXJldChHcmEKICAgICBJbnRSZWN0IGNhcmV0ID0gaW50
ZXJzZWN0aW9uKGRyYXdpbmdSZWN0LCBjbGlwUmVjdCk7CiAgICAgaWYgKCFjYXJldC5pc0VtcHR5
KCkpIHsKICAgICAgICAgQ29sb3IgY2FyZXRDb2xvciA9IENvbG9yOjpibGFjazsKKyAgICAgICAg
Q29sb3JTcGFjZSBjb2xvclNwYWNlID0gRGV2aWNlQ29sb3JTcGFjZTsKICAgICAgICAgRWxlbWVu
dCogZWxlbWVudCA9IHJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICAgICAgaWYgKGVsZW1lbnQg
JiYgZWxlbWVudC0+cmVuZGVyZXIoKSkKKyAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+
cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgY2FyZXRDb2xvciA9IGVsZW1lbnQtPnJlbmRlcmVy
KCktPnN0eWxlKCktPmNvbG9yKCk7CisgICAgICAgICAgICBjb2xvclNwYWNlID0gZWxlbWVudC0+
cmVuZGVyZXIoKS0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpOworICAgICAgICB9CiAKLSAgICAgICAg
cC0+ZmlsbFJlY3QoY2FyZXQsIGNhcmV0Q29sb3IpOworICAgICAgICBwLT5maWxsUmVjdChjYXJl
dCwgY2FyZXRDb2xvciwgY29sb3JTcGFjZSk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiA1
MDY3MCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTUyNiw5ICsxNTI2LDkgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmRyYXdUZXh0SQogICAgICAgICBHcmFwaGljc0NvbnRleHQqIG1hc2tJbWFn
ZUNvbnRleHQgPSBtYXNrSW1hZ2UtPmNvbnRleHQoKTsKIAogICAgICAgICBpZiAoZmlsbCkKLSAg
ICAgICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwor
ICAgICAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjpibGFjaywg
RGV2aWNlQ29sb3JTcGFjZSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgbWFza0ltYWdl
Q29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrKTsKKyAgICAgICAgICAgIG1hc2tJ
bWFnZUNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yOjpibGFjaywgRGV2aWNlQ29sb3JTcGFj
ZSk7CiAgICAgICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoYy0+
c3Ryb2tlVGhpY2tuZXNzKCkpOwogICAgICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzU3R5bGUuY3BwCShyZXZpc2lvbiA1MDY3MCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMzMgKzExNCwzMyBAQCB2b2lkIENh
bnZhc1N0eWxlOjphcHBseVN0cm9rZUNvbG9yKEdyYXBoCiAgICAgICAgIGNhc2UgQ29sb3JTdHJp
bmc6IHsKICAgICAgICAgICAgIENvbG9yIGMgPSBDb2xvcihtX2NvbG9yKTsKICAgICAgICAgICAg
IGlmIChjLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNv
bG9yKGMucmdiKCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGMu
cmdiKCksIERldmljZUNvbG9yU3BhY2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgUkdCQTMyIGNvbG9yID0gMDsgLy8gZGVmYXVsdCBpcyB0cmFu
c3BhcmVudCBibGFjawogICAgICAgICAgICAgaWYgKENTU1BhcnNlcjo6cGFyc2VDb2xvcihjb2xv
ciwgbV9jb2xvcikpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoY29s
b3IpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGNvbG9yLCBEZXZp
Y2VDb2xvclNwYWNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgQ29sb3JTdHJpbmdXaXRoQWxwaGE6IHsKICAgICAgICAgICAgIENvbG9yIGMgPSBDb2xvciht
X2NvbG9yKTsKICAgICAgICAgICAgIGlmIChjLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAg
IGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoYy5yZ2IoKSwg
bV9hbHBoYSkpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGNvbG9y
V2l0aE92ZXJyaWRlQWxwaGEoYy5yZ2IoKSwgbV9hbHBoYSksIERldmljZUNvbG9yU3BhY2UpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgUkdCQTMy
IGNvbG9yID0gMDsgLy8gZGVmYXVsdCBpcyB0cmFuc3BhcmVudCBibGFjawogICAgICAgICAgICAg
aWYgKENTU1BhcnNlcjo6cGFyc2VDb2xvcihjb2xvciwgbV9jb2xvcikpCi0gICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShjb2xvciwg
bV9hbHBoYSkpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGNvbG9y
V2l0aE92ZXJyaWRlQWxwaGEoY29sb3IsIG1fYWxwaGEpLCBEZXZpY2VDb2xvclNwYWNlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR3JheUxldmVsOgogICAg
ICAgICAgICAgLy8gV2UncmUgb25seSBzdXBwb3J0aW5nIDI1NSBsZXZlbHMgb2YgZ3JheSBoZXJl
LiAgU2luY2UgdGhpcyBpc24ndAogICAgICAgICAgICAgLy8gZXZlbiBwYXJ0IG9mIEhUTUw1LCBJ
IGRvbid0IGV4cGVjdCBhbnlvbmUgd2lsbCBjYXJlLiAgSWYgdGhleSBkbwogICAgICAgICAgICAg
Ly8gd2UnbGwgbWFrZSBhIGZhbmNpZXIgQ29sb3IgYWJzdHJhY3Rpb24uCi0gICAgICAgICAgICBj
b250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcihtX2dyYXlMZXZlbCwgbV9ncmF5TGV2ZWwsIG1f
Z3JheUxldmVsLCBtX2FscGhhKSk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xv
cihDb2xvcihtX2dyYXlMZXZlbCwgbV9ncmF5TGV2ZWwsIG1fZ3JheUxldmVsLCBtX2FscGhhKSwg
RGV2aWNlQ29sb3JTcGFjZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSR0JB
OgotICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3IobV9yZWQsIG1fZ3Jl
ZW4sIG1fYmx1ZSwgbV9hbHBoYSkpOworICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29s
b3IoQ29sb3IobV9yZWQsIG1fZ3JlZW4sIG1fYmx1ZSwgbV9hbHBoYSksIERldmljZUNvbG9yU3Bh
Y2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ01ZS0E6IHsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhp
Y3NDb250ZXh0IEFQSS4KQEAgLTE3NSwzMyArMTc1LDMzIEBAIHZvaWQgQ2FudmFzU3R5bGU6OmFw
cGx5RmlsbENvbG9yKEdyYXBoaWMKICAgICAgICAgY2FzZSBDb2xvclN0cmluZzogewogICAgICAg
ICAgICAgQ29sb3IgYyA9IENvbG9yKG1fY29sb3IpOwogICAgICAgICAgICAgaWYgKGMuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGMucmdiKCkpOwor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihjLnJnYigpLCBEZXZpY2VDb2xv
clNwYWNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIFJHQkEzMiByZ2JhID0gMDsgLy8gZGVmYXVsdCBpcyB0cmFuc3BhcmVudCBibGFjawogICAg
ICAgICAgICAgaWYgKENTU1BhcnNlcjo6cGFyc2VDb2xvcihyZ2JhLCBtX2NvbG9yKSkKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IocmdiYSk7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+c2V0RmlsbENvbG9yKHJnYmEsIERldmljZUNvbG9yU3BhY2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDb2xvclN0cmluZ1dpdGhBbHBoYTog
ewogICAgICAgICAgICAgQ29sb3IgYyA9IENvbG9yKG1fY29sb3IpOwogICAgICAgICAgICAgaWYg
KGMuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGNv
bG9yV2l0aE92ZXJyaWRlQWxwaGEoYy5yZ2IoKSwgbV9hbHBoYSkpOworICAgICAgICAgICAgICAg
IGNvbnRleHQtPnNldEZpbGxDb2xvcihjb2xvcldpdGhPdmVycmlkZUFscGhhKGMucmdiKCksIG1f
YWxwaGEpLCBEZXZpY2VDb2xvclNwYWNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIFJHQkEzMiBjb2xvciA9IDA7IC8vIGRlZmF1bHQgaXMgdHJh
bnNwYXJlbnQgYmxhY2sKICAgICAgICAgICAgIGlmIChDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29s
b3IsIG1fY29sb3IpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihjb2xv
cldpdGhPdmVycmlkZUFscGhhKGNvbG9yLCBtX2FscGhhKSk7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+c2V0RmlsbENvbG9yKGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3IsIG1fYWxwaGEp
LCBEZXZpY2VDb2xvclNwYWNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgR3JheUxldmVsOgogICAgICAgICAgICAgLy8gV2UncmUgb25seSBzdXBwb3J0aW5n
IDI1NSBsZXZlbHMgb2YgZ3JheSBoZXJlLiAgU2luY2UgdGhpcyBpc24ndAogICAgICAgICAgICAg
Ly8gZXZlbiBwYXJ0IG9mIEhUTUw1LCBJIGRvbid0IGV4cGVjdCBhbnlvbmUgd2lsbCBjYXJlLiAg
SWYgdGhleSBkbwogICAgICAgICAgICAgLy8gd2UnbGwgbWFrZSBhIGZhbmNpZXIgQ29sb3IgYWJz
dHJhY3Rpb24uCi0gICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3IobV9ncmF5
TGV2ZWwsIG1fZ3JheUxldmVsLCBtX2dyYXlMZXZlbCwgbV9hbHBoYSkpOworICAgICAgICAgICAg
Y29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yKG1fZ3JheUxldmVsLCBtX2dyYXlMZXZlbCwgbV9n
cmF5TGV2ZWwsIG1fYWxwaGEpLCBEZXZpY2VDb2xvclNwYWNlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFJHQkE6Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3Io
Q29sb3IobV9yZWQsIG1fZ3JlZW4sIG1fYmx1ZSwgbV9hbHBoYSkpOworICAgICAgICAgICAgY29u
dGV4dC0+c2V0RmlsbENvbG9yKENvbG9yKG1fcmVkLCBtX2dyZWVuLCBtX2JsdWUsIG1fYWxwaGEp
LCBEZXZpY2VDb2xvclNwYWNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENN
WUtBOiB7CiAgICAgICAgICAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWlu
ZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCkBAIC0yMTUsNyArMjE1LDcgQEAgdm9pZCBD
YW52YXNTdHlsZTo6YXBwbHlGaWxsQ29sb3IoR3JhcGhpYwogICAgICAgICAgICAgY3VycmVudEJy
dXNoLnNldENvbG9yKGNscik7CiAgICAgICAgICAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+c2V0QnJ1c2goY3VycmVudEJydXNoKTsKICNlbHNlCi0gICAgICAgICAgICBjb250ZXh0LT5z
ZXRGaWxsQ29sb3IoQ29sb3IobV9jeWFuLCBtX21hZ2VudGEsIG1feWVsbG93LCBtX2JsYWNrLCBt
X2FscGhhKSk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3IobV9jeWFu
LCBtX21hZ2VudGEsIG1feWVsbG93LCBtX2JsYWNrLCBtX2FscGhhKSwgRGV2aWNlQ29sb3JTcGFj
ZSk7CiAjZW5kaWYKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNTA2NzApCisrKyBX
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTY1NCw3ICsxNjU0LDcgQEAgc3RhdGljIHZvaWQgZHJhd091dGxpbmVkUXVhZChHcmFwaGlj
c0NvbgogCiAgICAgICAgIGNvbnRleHQuYWRkUGF0aChxdWFkUGF0aCk7CiAgICAgICAgIGNvbnRl
eHQuc2V0U3Ryb2tlVGhpY2tuZXNzKG91dGxpbmVUaGlja25lc3MpOwotICAgICAgICBjb250ZXh0
LnNldFN0cm9rZUNvbG9yKG91dGxpbmVDb2xvcik7CisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tl
Q29sb3Iob3V0bGluZUNvbG9yLCBEZXZpY2VDb2xvclNwYWNlKTsKICAgICAgICAgY29udGV4dC5z
dHJva2VQYXRoKCk7CiAKICAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7CkBAIC0xNjYyLDcgKzE2
NjIsNyBAQCBzdGF0aWMgdm9pZCBkcmF3T3V0bGluZWRRdWFkKEdyYXBoaWNzQ29uCiAgICAgCiAg
ICAgLy8gTm93IGRvIHRoZSBmaWxsCiAgICAgY29udGV4dC5hZGRQYXRoKHF1YWRQYXRoKTsKLSAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihmaWxsQ29sb3IpOworICAgIGNvbnRleHQuc2V0RmlsbENv
bG9yKGZpbGxDb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7CiAgICAgY29udGV4dC5maWxsUGF0aCgp
OwogfQogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gNTA2NzApCisrKyBXZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2NCw3ICsxNjY0LDcgQEAgdm9p
ZCBGcmFtZVZpZXc6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDbwogICAgICAgICBmaWxsV2l0aFJl
ZCA9IHRydWU7CiAgICAgCiAgICAgaWYgKGZpbGxXaXRoUmVkKQotICAgICAgICBwLT5maWxsUmVj
dChyZWN0LCBDb2xvcigweEZGLCAwLCAwKSk7CisgICAgICAgIHAtPmZpbGxSZWN0KHJlY3QsIENv
bG9yKDB4RkYsIDAsIDApLCBEZXZpY2VDb2xvclNwYWNlKTsKICNlbmRpZgogCiAgICAgYm9vbCBp
c1RvcExldmVsUGFpbnRlciA9ICFzQ3VycmVudFBhaW50VGltZVN0YW1wOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYmFyVGhlbWUuaAkocmV2aXNpb24gNTA2NzApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGJhclRoZW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVQYXJ0KFNjcm9sbGJhciosIFNjcm9sbGJh
clBhcnQpIHt9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoU2Nyb2xsVmll
dyosIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29ybmVyUmVjdCkg
eyBjb250ZXh0LT5maWxsUmVjdChjb3JuZXJSZWN0LCBDb2xvcjo6d2hpdGUpOyB9CisgICAgdmly
dHVhbCB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKFNjcm9sbFZpZXcqLCBHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvcm5lclJlY3QpIHsgY29udGV4dC0+ZmlsbFJlY3Qo
Y29ybmVyUmVjdCwgQ29sb3I6OndoaXRlLCBEZXZpY2VDb2xvclNwYWNlKTsgfQogCiAgICAgdmly
dHVhbCBib29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JikgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU25h
cEJhY2tUb0RyYWdPcmlnaW4oU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jikg
eyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVD
b21wb3NpdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhl
bWVDb21wb3NpdGUuY3BwCShyZXZpc2lvbiA1MDY3MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTcsNyArMjk3LDcg
QEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6cGFpbnRTY3JvbAogICAgIFBhZ2UqIHBh
Z2UgPSBmcmFtZVZpZXctPmZyYW1lKCkgPyBmcmFtZVZpZXctPmZyYW1lKCktPnBhZ2UoKSA6IDA7
CiAgICAgaWYgKHBhZ2UgJiYgcGFnZS0+c2V0dGluZ3MoKS0+c2hvdWxkUGFpbnRDdXN0b21TY3Jv
bGxiYXJzKCkpIHsKICAgICAgICAgaWYgKCFwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPnBhaW50
Q3VzdG9tU2Nyb2xsQ29ybmVyKGNvbnRleHQsIGNvcm5lclJlY3QpKQotICAgICAgICAgICAgY29u
dGV4dC0+ZmlsbFJlY3QoY29ybmVyUmVjdCwgQ29sb3I6OndoaXRlKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmZpbGxSZWN0KGNvcm5lclJlY3QsIENvbG9yOjp3aGl0ZSwgRGV2aWNlQ29sb3JTcGFj
ZSk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU3Bh
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU3BhY2Uu
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ29sb3JTcGFjZV9oCisjZGVmaW5lIENvbG9y
U3BhY2VfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBlbnVtIENvbG9yU3BhY2UgeyBE
ZXZpY2VDb2xvclNwYWNlLCBzUkdCQ29sb3JTcGFjZSB9OworICAgIAorfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gQ29sb3JTcGFjZV9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCShyZXZpc2lvbiA1MDY3MCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTIwLDExICsxMjAsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVN0
eWxlKGNvbgogICAgIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoc3R5bGUpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlKQogewogICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VUeXBlID0gU29s
aWRDb2xvclR5cGU7CiAgICAgbV9jb21tb24tPnN0YXRlLnN0cm9rZUNvbG9yID0gY29sb3I7Ci0g
ICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb2xvcik7CisgICAgbV9jb21tb24tPnN0YXRlLnN0
cm9rZUNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOworICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Io
Y29sb3IsIGNvbG9yU3BhY2UpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93
KGNvbnN0IEludFNpemUmIHNpemUsIGludCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCkBAIC0x
NjcsNiArMTY4LDExIEBAIENvbG9yIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQ29sb3IoKSBjb24K
ICAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLnN0cm9rZUNvbG9yOwogfQogCitDb2xvclNwYWNl
IEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQ29sb3JTcGFjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fY29tbW9uLT5zdGF0ZS5zdHJva2VDb2xvclNwYWNlOworfQorCiBXaW5kUnVsZSBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSdWxlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb21tb24tPnN0YXRl
LmZpbGxSdWxlOwpAQCAtMTc3LDExICsxODMsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dEZpbGxSdWxlKFdpbmRSdQogICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxl
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNv
bG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgbV9jb21tb24tPnN0YXRlLmZpbGxU
eXBlID0gU29saWRDb2xvclR5cGU7CiAgICAgbV9jb21tb24tPnN0YXRlLmZpbGxDb2xvciA9IGNv
bG9yOwotICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGNvbG9yKTsKKyAgICBtX2NvbW1vbi0+c3Rh
dGUuZmlsbENvbG9yU3BhY2UgPSBjb2xvclNwYWNlOworICAgIHNldFBsYXRmb3JtRmlsbENvbG9y
KGNvbG9yLCBjb2xvclNwYWNlKTsKIH0KIAogQ29sb3IgR3JhcGhpY3NDb250ZXh0OjpmaWxsQ29s
b3IoKSBjb25zdApAQCAtMTg5LDYgKzE5NiwxMSBAQCBDb2xvciBHcmFwaGljc0NvbnRleHQ6OmZp
bGxDb2xvcigpIGNvbnN0CiAgICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3I7CiB9
CiAKK0NvbG9yU3BhY2UgR3JhcGhpY3NDb250ZXh0OjpmaWxsQ29sb3JTcGFjZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3JTcGFjZTsKK30KKwogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFNob3VsZEFudGlhbGlhcyhib29sIGIpCiB7CiAgICAgbV9jb21t
b24tPnN0YXRlLnNob3VsZEFudGlhbGlhcyA9IGI7CkBAIC0yMDQsNyArMjE2LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVBhdHRlcm4oUAogewogICAgIEFTU0VSVChwYXR0ZXJu
KTsKICAgICBpZiAoIXBhdHRlcm4pIHsKLSAgICAgICAgc2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmJs
YWNrKTsKKyAgICAgICAgc2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrLCBEZXZpY2VDb2xvclNw
YWNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tl
VHlwZSA9IFBhdHRlcm5UeXBlOwpAQCAtMjE2LDcgKzIyOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRGaWxsUGF0dGVybihQYXMKIHsKICAgICBBU1NFUlQocGF0dGVybik7CiAgICAgaWYg
KCFwYXR0ZXJuKSB7Ci0gICAgICAgIHNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOworICAgICAg
ICBzZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrLCBEZXZpY2VDb2xvclNwYWNlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbFR5cGUgPSBQYXR0ZXJuVHlw
ZTsKQEAgLTIyOCw3ICsyNDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3Jh
ZGllbnQoCiB7CiAgICAgQVNTRVJUKGdyYWRpZW50KTsKICAgICBpZiAoIWdyYWRpZW50KSB7Ci0g
ICAgICAgIHNldFN0cm9rZUNvbG9yKENvbG9yOjpibGFjayk7CisgICAgICAgIHNldFN0cm9rZUNv
bG9yKENvbG9yOjpibGFjaywgRGV2aWNlQ29sb3JTcGFjZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgbV9jb21tb24tPnN0YXRlLnN0cm9rZVR5cGUgPSBHcmFkaWVudFR5cGU7CkBAIC0y
NDAsNyArMjUyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudChQYQog
ewogICAgIEFTU0VSVChncmFkaWVudCk7CiAgICAgaWYgKCFncmFkaWVudCkgewotICAgICAgICBz
ZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKKyAgICAgICAgc2V0RmlsbENvbG9yKENvbG9yOjpi
bGFjaywgRGV2aWNlQ29sb3JTcGFjZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9j
b21tb24tPnN0YXRlLmZpbGxUeXBlID0gR3JhZGllbnRUeXBlOwpAQCAtMzYwLDEyICszNzIsMTIg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdAogICAgIGJpZGlSZXNv
bHZlci5kZWxldGVSdW5zKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SGlnaGxp
Z2h0Rm9yVGV4dChjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IElu
dFBvaW50JiBwb2ludCwgaW50IGgsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IsIGludCBm
cm9tLCBpbnQgdG8pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0hpZ2hsaWdodEZvclRleHQo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBJbnRQb2ludCYgcG9p
bnQsIGludCBoLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIGludCBmcm9tLCBpbnQgdG8pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgZmlsbFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4
dChydW4sIHBvaW50LCBoLCBmcm9tLCB0byksIGJhY2tncm91bmRDb2xvcik7CisgICAgZmlsbFJl
Y3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHBvaW50LCBoLCBmcm9tLCB0byksIGJh
Y2tncm91bmRDb2xvciwgY29sb3JTcGFjZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpp
bml0Rm9jdXNSaW5nKGludCB3aWR0aCwgaW50IG9mZnNldCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gNTA2NzApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAjaWZuZGVmIEdyYXBoaWNzQ29udGV4dF9oCiAjZGVmaW5lIEdyYXBo
aWNzQ29udGV4dF9oCiAKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRGFzaEFy
cmF5LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKQEAgLTE1
OCw3ICsxNTksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cm9rZVN0eWxlIHN0
cm9rZVN0eWxlKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoY29uc3QgU3Ry
b2tlU3R5bGUmIHN0eWxlKTsKICAgICAgICAgQ29sb3Igc3Ryb2tlQ29sb3IoKSBjb25zdDsKLSAg
ICAgICAgdm9pZCBzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYpOworICAgICAgICBDb2xvclNw
YWNlIHN0cm9rZUNvbG9yU3BhY2UoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRTdHJva2VDb2xv
cihjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOwogCiAgICAgICAgIHZvaWQgc2V0U3Ryb2tlUGF0
dGVybihQYXNzUmVmUHRyPFBhdHRlcm4+KTsKICAgICAgICAgUGF0dGVybiogc3Ryb2tlUGF0dGVy
bigpIGNvbnN0OwpAQCAtMTY5LDcgKzE3MSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRGaWxsUnVsZShX
aW5kUnVsZSk7CiAgICAgICAgIENvbG9yIGZpbGxDb2xvcigpIGNvbnN0OwotICAgICAgICB2b2lk
IHNldEZpbGxDb2xvcihjb25zdCBDb2xvciYpOworICAgICAgICBDb2xvclNwYWNlIGZpbGxDb2xv
clNwYWNlKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiwg
Q29sb3JTcGFjZSk7CiAKICAgICAgICAgdm9pZCBzZXRGaWxsUGF0dGVybihQYXNzUmVmUHRyPFBh
dHRlcm4+KTsKICAgICAgICAgUGF0dGVybiogZmlsbFBhdHRlcm4oKSBjb25zdDsKQEAgLTIwNyw5
ICsyMTAsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc3Ryb2tlQXJjKGNv
bnN0IEludFJlY3QmLCBpbnQgc3RhcnRBbmdsZSwgaW50IGFuZ2xlU3Bhbik7CiAKICAgICAgICAg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICAgICAgdm9pZCBmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpOworICAgICAgICB2b2lkIGZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CiAgICAgICAgIHZvaWQg
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR2VuZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZmls
bFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25z
dCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50
U2l6ZSYgYm90dG9tUmlnaHQsIGNvbnN0IENvbG9yJik7CisgICAgICAgIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRT
aXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYg
Ym90dG9tUmlnaHQsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CiAKICAgICAgICAgdm9pZCBj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKQEAgLTI0NSw3ICsyNDgsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBkcmF3VGV4dChjb25zdCBGb250JiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEludFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CiAg
ICAgICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwgY29u
c3QgRmxvYXRQb2ludCYpOwotICAgICAgICB2b2lkIGRyYXdIaWdobGlnaHRGb3JUZXh0KGNvbnN0
IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgSW50UG9pbnQmLCBpbnQgaCwgY29uc3QgQ29s
b3ImIGJhY2tncm91bmRDb2xvciwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CisgICAgICAg
IHZvaWQgZHJhd0hpZ2hsaWdodEZvclRleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBj
b25zdCBJbnRQb2ludCYsIGludCBoLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yLCBDb2xv
clNwYWNlLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKIAogICAgICAgICBGbG9hdFJlY3Qg
cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmKTsKIApAQCAtMzkxLDEzICszOTQs
MTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldFBsYXRmb3JtVGV4dERy
YXdpbmdNb2RlKGludCk7CiAgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1Gb250KGNvbnN0IEZvbnQm
IGZvbnQpOwogCi0gICAgICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xv
ciYpOworICAgICAgICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImLCBD
b2xvclNwYWNlKTsKICAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKGNvbnN0IFN0
cm9rZVN0eWxlJik7CiAgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxv
YXQpOwogICAgICAgICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlR3JhZGllbnQoR3JhZGllbnQqKTsK
ICAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVN0cm9rZVBhdHRlcm4oUGF0dGVybiopOwogCi0gICAg
ICAgIHZvaWQgc2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICAgICAgdm9p
ZCBzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOwogICAgICAg
ICB2b2lkIHNldFBsYXRmb3JtRmlsbEdyYWRpZW50KEdyYWRpZW50Kik7CiAgICAgICAgIHZvaWQg
c2V0UGxhdGZvcm1GaWxsUGF0dGVybihQYXR0ZXJuKik7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCShyZXZpc2lvbiA1
MDY3MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0MCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgICAgICAsIHN0cm9rZVRoaWNrbmVzcygwKQogICAgICAgICAgICAgLCBzdHJva2VU
eXBlKFNvbGlkQ29sb3JUeXBlKQogICAgICAgICAgICAgLCBzdHJva2VDb2xvcihDb2xvcjo6Ymxh
Y2spCisgICAgICAgICAgICAsIHN0cm9rZUNvbG9yU3BhY2UoRGV2aWNlQ29sb3JTcGFjZSkKICAg
ICAgICAgICAgICwgZmlsbFJ1bGUoUlVMRV9OT05aRVJPKQogICAgICAgICAgICAgLCBmaWxsVHlw
ZShTb2xpZENvbG9yVHlwZSkKICAgICAgICAgICAgICwgZmlsbENvbG9yKENvbG9yOjpibGFjaykK
KyAgICAgICAgICAgICwgZmlsbENvbG9yU3BhY2UoRGV2aWNlQ29sb3JTcGFjZSkKICAgICAgICAg
ICAgICwgc2hvdWxkQW50aWFsaWFzKHRydWUpCiAgICAgICAgICAgICAsIHBhaW50aW5nRGlzYWJs
ZWQoZmFsc2UpCiAgICAgICAgICAgICAsIHNoYWRvd0JsdXIoMCkKQEAgLTU5LDEyICs2MSwxNCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzczsKICAg
ICAgICAgRmlsbE9yU3Ryb2tlVHlwZSBzdHJva2VUeXBlOwogICAgICAgICBDb2xvciBzdHJva2VD
b2xvcjsKKyAgICAgICAgQ29sb3JTcGFjZSBzdHJva2VDb2xvclNwYWNlOwogICAgICAgICBSZWZQ
dHI8R3JhZGllbnQ+IHN0cm9rZUdyYWRpZW50OwogICAgICAgICBSZWZQdHI8UGF0dGVybj4gc3Ry
b2tlUGF0dGVybjsKICAgICAgICAgCiAgICAgICAgIFdpbmRSdWxlIGZpbGxSdWxlOwogICAgICAg
ICBGaWxsT3JTdHJva2VUeXBlIGZpbGxUeXBlOwogICAgICAgICBDb2xvciBmaWxsQ29sb3I7Cisg
ICAgICAgIENvbG9yU3BhY2UgZmlsbENvbG9yU3BhY2U7CiAgICAgICAgIFJlZlB0cjxHcmFkaWVu
dD4gZmlsbEdyYWRpZW50OwogICAgICAgICBSZWZQdHI8UGF0dGVybj4gZmlsbFBhdHRlcm47CiAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCShyZXZpc2lvbiA1MDY3MCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
Miw3ICs4Miw3IEBAIHZvaWQgSW1hZ2U6OmZpbGxXaXRoU29saWRDb2xvcihHcmFwaGljc0MKICAg
ICAKICAgICBjdHh0LT5zYXZlKCk7CiAgICAgY3R4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKCFj
b2xvci5oYXNBbHBoYSgpICYmIG9wID09IENvbXBvc2l0ZVNvdXJjZU92ZXIgPyBDb21wb3NpdGVD
b3B5IDogb3ApOwotICAgIGN0eHQtPmZpbGxSZWN0KGRzdFJlY3QsIGNvbG9yKTsKKyAgICBjdHh0
LT5maWxsUmVjdChkc3RSZWN0LCBjb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7CiAgICAgY3R4dC0+
cmVzdG9yZSgpOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkocmV2aXNpb24gNTA2NzApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDcwLDcgKzQ3MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICBmaWxsUGF0aCgpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC02MzQsMTMgKzYzNCwxMyBA
QCBJbnRQb2ludCBHcmFwaGljc0NvbnRleHQ6Om9yaWdpbigpCiAgICAgcmV0dXJuIEludFBvaW50
KHN0YXRpY19jYXN0PGludD4obWF0cml4LngwKSwgc3RhdGljX2Nhc3Q8aW50PihtYXRyaXgueTAp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0
IENvbG9yJiBjb2wpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewogICAgIC8vIENhaXJv
IGNvbnRleHRzIGNhbid0IGhvbGQgc2VwYXJhdGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycwogICAg
IC8vIHNvIHdlIHNldCB0aGVtIGp1c3QgYmVmb3JlIHdlIGFjdHVhbGx5IGZpbGwgb3Igc3Ryb2tl
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0
IENvbG9yJiBjb2wpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xv
cihjb25zdCBDb2xvciYgY29sLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgLy8gQ2Fp
cm8gY29udGV4dHMgY2FuJ3QgaG9sZCBzZXBhcmF0ZSBmaWxsIGFuZCBzdHJva2UgY29sb3JzCiAg
ICAgLy8gc28gd2Ugc2V0IHRoZW0ganVzdCBiZWZvcmUgd2UgYWN0dWFsbHkgZmlsbCBvciBzdHJv
a2UKQEAgLTk5Nyw3ICs5OTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dEVsbGlw
c2VJblJlCiAgICAgY2xpcE91dChwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
b3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByLCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25z
dCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50
U2l6ZSYgYm90dG9tUmlnaHQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgciwgY29uc3QgSW50U2l6ZSYgdG9w
TGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsIGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQs
IGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmNwcAkocmV2aXNpb24gNTA2NzApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTgg
KzYxLDc0IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
c3RhdGljIHZvaWQgc2V0Q0dGaWxsQ29sb3IoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENv
bG9yJiBjb2xvcikKK3N0YXRpYyBDR0NvbG9yU3BhY2VSZWYgc1JHQkNvbG9yU3BhY2VSZWYoKQog
ewotICAgIENHRmxvYXQgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7Ci0gICAgY29sb3IuZ2V0UkdC
QShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9y
KGNvbnRleHQsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICBzdGF0aWMgQ0dDb2xvclNw
YWNlUmVmIHNSR0JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3Bh
Y2VTUkdCKTsKKyAgICByZXR1cm4gc1JHQlNwYWNlOwogfQogCi1zdGF0aWMgdm9pZCBzZXRDR1N0
cm9rZUNvbG9yKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDb2xvciYgY29sb3IpCitzdGF0
aWMgQ0dDb2xvclNwYWNlUmVmIGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKQogewotICAgIENHRmxv
YXQgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7Ci0gICAgY29sb3IuZ2V0UkdCQShyZWQsIGdyZWVu
LCBibHVlLCBhbHBoYSk7Ci0gICAgQ0dDb250ZXh0U2V0UkdCU3Ryb2tlQ29sb3IoY29udGV4dCwg
cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgIHN0YXRpYyBDR0NvbG9yU3BhY2VSZWYgZGV2
aWNlU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKKyAgICByZXR1cm4gZGV2
aWNlU3BhY2U7Cit9CisKK3N0YXRpYyB2b2lkIHNldENHRmlsbENvbG9yKENHQ29udGV4dFJlZiBj
b250ZXh0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAg
ICBDR0Zsb2F0IGNvbXBvbmVudHNbNF07CisgICAgY29sb3IuZ2V0UkdCQShjb21wb25lbnRzWzBd
LCBjb21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJdLCBjb21wb25lbnRzWzNdKTsKKworICAgIENH
Q29sb3JSZWYgY2dDb2xvcjsKKyAgICBpZiAoY29sb3JTcGFjZSA9PSBzUkdCQ29sb3JTcGFjZSkK
KyAgICAgICAgY2dDb2xvciA9IENHQ29sb3JDcmVhdGUoc1JHQkNvbG9yU3BhY2VSZWYoKSwgY29t
cG9uZW50cyk7CisgICAgZWxzZQorICAgICAgICBjZ0NvbG9yID0gQ0dDb2xvckNyZWF0ZShkZXZp
Y2VSR0JDb2xvclNwYWNlUmVmKCksIGNvbXBvbmVudHMpOworCisgICAgQ0dDb250ZXh0U2V0Rmls
bENvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNnQ29sb3IpOworICAgIENGUmVsZWFzZShjZ0NvbG9y
KTsKK30KKworc3RhdGljIHZvaWQgc2V0Q0dTdHJva2VDb2xvcihDR0NvbnRleHRSZWYgY29udGV4
dCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgQ0dG
bG9hdCBjb21wb25lbnRzWzRdOworICAgIGNvbG9yLmdldFJHQkEoY29tcG9uZW50c1swXSwgY29t
cG9uZW50c1sxXSwgY29tcG9uZW50c1syXSwgY29tcG9uZW50c1szXSk7CisKKyAgICBDR0NvbG9y
UmVmIGNnQ29sb3I7CisgICAgaWYgKGNvbG9yU3BhY2UgPT0gc1JHQkNvbG9yU3BhY2UpCisgICAg
ICAgIGNnQ29sb3IgPSBDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlUmVmKCksIGNvbXBvbmVu
dHMpOworICAgIGVsc2UKKyAgICAgICAgY2dDb2xvciA9IENHQ29sb3JDcmVhdGUoZGV2aWNlUkdC
Q29sb3JTcGFjZVJlZigpLCBjb21wb25lbnRzKTsKKworICAgIENHQ29udGV4dFNldFN0cm9rZUNv
bG9yV2l0aENvbG9yKGNvbnRleHQsIGNnQ29sb3IpOworICAgIENGUmVsZWFzZShjZ0NvbG9yKTsK
K30KKworc3RhdGljIHZvaWQgc2V0Q0dGaWxsQ29sb3JTcGFjZShDR0NvbnRleHRSZWYgY29udGV4
dCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIHN3aXRjaCAoY29sb3JTcGFjZSkgewor
ICAgIGNhc2UgRGV2aWNlQ29sb3JTcGFjZToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBzUkdC
Q29sb3JTcGFjZToKKyAgICAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yU3BhY2UoY29udGV4dCwg
c1JHQkNvbG9yU3BhY2VSZWYoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHNldENHU3Ryb2tlQ29sb3JTcGFjZShDR0NvbnRleHRSZWYgY29udGV4dCwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIHN3aXRjaCAoY29sb3JTcGFjZSkgeworICAgIGNh
c2UgRGV2aWNlQ29sb3JTcGFjZToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBzUkdCQ29sb3JT
cGFjZToKKyAgICAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29sb3JTcGFjZShjb250ZXh0LCBzUkdC
Q29sb3JTcGFjZVJlZigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KIAogR3JhcGhp
Y3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCkKQEAgLTgy
LDggKzEzOCw4IEBAIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KENHQ29udGUKICAg
ICBzZXRQYWludGluZ0Rpc2FibGVkKCFjZ0NvbnRleHQpOwogICAgIGlmIChjZ0NvbnRleHQpIHsK
ICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3Vy
IHN0YXRlLgotICAgICAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihmaWxsQ29sb3IoKSk7Ci0gICAg
ICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7CisgICAgICAgIHNldFBs
YXRmb3JtRmlsbENvbG9yKGZpbGxDb2xvcigpLCBmaWxsQ29sb3JTcGFjZSgpKTsKKyAgICAgICAg
c2V0UGxhdGZvcm1TdHJva2VDb2xvcihzdHJva2VDb2xvcigpLCBzdHJva2VDb2xvclNwYWNlKCkp
OwogICAgIH0KIH0KIApAQCAtMTMzLDcgKzE4OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UmVjdChjb25zdCBJbnQKICAgICAgICAgLy8gV2UgZG8gYSBmaWxsIG9mIGZvdXIgcmVjdHMg
dG8gc2ltdWxhdGUgdGhlIHN0cm9rZSBvZiBhIGJvcmRlci4KICAgICAgICAgQ29sb3Igb2xkRmls
bENvbG9yID0gZmlsbENvbG9yKCk7CiAgICAgICAgIGlmIChvbGRGaWxsQ29sb3IgIT0gc3Ryb2tl
Q29sb3IoKSkKLSAgICAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIHN0cm9rZUNvbG9y
KCkpOworICAgICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgc3Ryb2tlQ29sb3IoKSwg
c3Ryb2tlQ29sb3JTcGFjZSgpKTsKICAgICAgICAgQ0dSZWN0IHJlY3RzWzRdID0gewogICAgICAg
ICAgICAgRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCAxKSwKICAg
ICAgICAgICAgIEZsb2F0UmVjdChyZWN0LngoKSwgcmVjdC5ib3R0b20oKSAtIDEsIHJlY3Qud2lk
dGgoKSwgMSksCkBAIC0xNDIsNyArMTk4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdS
ZWN0KGNvbnN0IEludAogICAgICAgICB9OwogICAgICAgICBDR0NvbnRleHRGaWxsUmVjdHMoY29u
dGV4dCwgcmVjdHMsIDQpOwogICAgICAgICBpZiAob2xkRmlsbENvbG9yICE9IHN0cm9rZUNvbG9y
KCkpCi0gICAgICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3IpOwor
ICAgICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgb2xkRmlsbENvbG9yLCBmaWxsQ29s
b3JTcGFjZSgpKTsKICAgICB9CiB9CiAKQEAgLTIxMCw3ICsyNjYsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50CiAKICAgICAgICAgLy8gRG8gYSByZWN0IGZpbGwg
b2Ygb3VyIGVuZHBvaW50cy4gIFRoaXMgZW5zdXJlcyB3ZSBhbHdheXMgaGF2ZSB0aGUKICAgICAg
ICAgLy8gYXBwZWFyYW5jZSBvZiBiZWluZyBhIGJvcmRlci4gIFdlIHRoZW4gZHJhdyB0aGUgYWN0
dWFsIGRvdHRlZC9kYXNoZWQgbGluZS4KLSAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwg
c3Ryb2tlQ29sb3IoKSk7ICAvLyBUaGUgc2F2ZS9yZXN0b3JlIG1ha2UgaXQgc2FmZSB0byBtdXRh
dGUgdGhlIGZpbGwgY29sb3IgaGVyZSB3aXRob3V0IHNldHRpbmcgaXQgYmFjayB0byB0aGUgb2xk
IGNvbG9yLgorICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdHJva2VDb2xvcigpLCBz
dHJva2VDb2xvclNwYWNlKCkpOyAgLy8gVGhlIHNhdmUvcmVzdG9yZSBtYWtlIGl0IHNhZmUgdG8g
bXV0YXRlIHRoZSBmaWxsIGNvbG9yIGhlcmUgd2l0aG91dCBzZXR0aW5nIGl0IGJhY2sgdG8gdGhl
IG9sZCBjb2xvci4KICAgICAgICAgaWYgKGlzVmVydGljYWxMaW5lKSB7CiAgICAgICAgICAgICBD
R0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBGbG9hdFJlY3QocDEueCgpIC0gd2lkdGggLyAyLCBw
MS55KCkgLSB3aWR0aCwgd2lkdGgsIHdpZHRoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRGaWxs
UmVjdChjb250ZXh0LCBGbG9hdFJlY3QocDIueCgpIC0gd2lkdGggLyAyLCBwMi55KCksIHdpZHRo
LCB3aWR0aCkpOwpAQCAtNDk0LDYgKzU1MCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UGF0aCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxh
dGZvcm1Db250ZXh0KCk7CisgICAgc2V0Q0dGaWxsQ29sb3JTcGFjZShjb250ZXh0LCBtX2NvbW1v
bi0+c3RhdGUuZmlsbENvbG9yU3BhY2UpOworCiAgICAgc3dpdGNoIChtX2NvbW1vbi0+c3RhdGUu
ZmlsbFR5cGUpIHsKICAgICBjYXNlIFNvbGlkQ29sb3JUeXBlOgogICAgICAgICBmaWxsUGF0aFdp
dGhGaWxsUnVsZShjb250ZXh0LCBmaWxsUnVsZSgpKTsKQEAgLTUyMSw2ICs1NzksOCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIENH
Q29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CisgICAgc2V0Q0dTdHJva2VD
b2xvclNwYWNlKGNvbnRleHQsIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VDb2xvclNwYWNlKTsKKwog
ICAgIHN3aXRjaCAobV9jb21tb24tPnN0YXRlLnN0cm9rZVR5cGUpIHsKICAgICBjYXNlIFNvbGlk
Q29sb3JUeXBlOgogICAgICAgICBDR0NvbnRleHRTdHJva2VQYXRoKGNvbnRleHQpOwpAQCAtNTQ0
LDcgKzYwNCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiB7
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOworCiAgICAgQ0dD
b250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBzZXRDR0ZpbGxDb2xv
clNwYWNlKGNvbnRleHQsIG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3JTcGFjZSk7CisKICAgICBz
d2l0Y2ggKG1fY29tbW9uLT5zdGF0ZS5maWxsVHlwZSkgewogICAgIGNhc2UgU29saWRDb2xvclR5
cGU6CiAgICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIHJlY3QpOwpAQCAtNTYzLDM0
ICs2MjYsNDAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAg
IH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ29s
b3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7Ci0gICAgaWYgKG9sZEZpbGxDb2xvciAhPSBj
b2xvcikKLSAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGNvbG9yKTsKKyAgICBDb2xvclNw
YWNlIG9sZENvbG9yU3BhY2UgPSBmaWxsQ29sb3JTcGFjZSgpOworCisgICAgaWYgKG9sZEZpbGxD
b2xvciAhPSBjb2xvciB8fCBvbGRDb2xvclNwYWNlICE9IGNvbG9yU3BhY2UpCisgICAgICBzZXRD
R0ZpbGxDb2xvcihjb250ZXh0LCBjb2xvciwgY29sb3JTcGFjZSk7CisKICAgICBDR0NvbnRleHRG
aWxsUmVjdChjb250ZXh0LCByZWN0KTsKLSAgICBpZiAob2xkRmlsbENvbG9yICE9IGNvbG9yKQot
ICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgb2xkRmlsbENvbG9yKTsKKworICAgIGlmIChv
bGRGaWxsQ29sb3IgIT0gY29sb3IgfHwgb2xkQ29sb3JTcGFjZSAhPSBjb2xvclNwYWNlKQorICAg
ICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgb2xkRmlsbENvbG9yLCBvbGRDb2xvclNwYWNlKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0
JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwg
Y29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQsIGNv
bnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6
ZSYgdG9wUmlnaHQsIGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJv
dHRvbVJpZ2h0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBDR0Nv
bnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENvbG9yIG9sZEZpbGxD
b2xvciA9IGZpbGxDb2xvcigpOwotICAgIGlmIChvbGRGaWxsQ29sb3IgIT0gY29sb3IpCi0gICAg
ICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGNvbG9yKTsKKyAgICBDb2xvclNwYWNlIG9sZENv
bG9yU3BhY2UgPSBmaWxsQ29sb3JTcGFjZSgpOworCisgICAgaWYgKG9sZEZpbGxDb2xvciAhPSBj
b2xvciB8fCBvbGRDb2xvclNwYWNlICE9IGNvbG9yU3BhY2UpCisgICAgICAgIHNldENHRmlsbENv
bG9yKGNvbnRleHQsIGNvbG9yLCBjb2xvclNwYWNlKTsKIAogICAgIGFkZFBhdGgoUGF0aDo6Y3Jl
YXRlUm91bmRlZFJlY3RhbmdsZShyZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwg
Ym90dG9tUmlnaHQpKTsKICAgICBmaWxsUGF0aCgpOwogCi0gICAgaWYgKG9sZEZpbGxDb2xvciAh
PSBjb2xvcikKLSAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgb2xkRmlsbENvbG9yKTsK
KyAgICBpZiAob2xkRmlsbENvbG9yICE9IGNvbG9yIHx8IG9sZENvbG9yU3BhY2UgIT0gY29sb3JT
cGFjZSkKKyAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgb2xkRmlsbENvbG9yLCBvbGRD
b2xvclNwYWNlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQpAQCAtNzc5LDYgKzg0OCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VSZWN0KGNvbnN0IEYKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRl
eHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBzZXRDR1N0cm9rZUNvbG9yU3BhY2UoY29udGV4
dCwgbV9jb21tb24tPnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UpOworCiAgICAgc3dpdGNoIChtX2Nv
bW1vbi0+c3RhdGUuc3Ryb2tlVHlwZSkgewogICAgIGNhc2UgU29saWRDb2xvclR5cGU6CiAgICAg
ICAgIENHQ29udGV4dFN0cm9rZVJlY3RXaXRoV2lkdGgoY29udGV4dCwgciwgbGluZVdpZHRoKTsK
QEAgLTk5NiwxMCArMTA2NywxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JU
ZXh0KGNvCiAgICAgfQogCiAgICAgaWYgKGZpbGxDb2xvcigpICE9IHN0cm9rZUNvbG9yKCkpCi0g
ICAgICAgIHNldENHRmlsbENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBzdHJva2VDb2xvcigpKTsK
KyAgICAgICAgc2V0Q0dGaWxsQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIHN0cm9rZUNvbG9yKCks
IHN0cm9rZUNvbG9yU3BhY2UoKSk7CiAgICAgQ0dDb250ZXh0RmlsbFJlY3QocGxhdGZvcm1Db250
ZXh0KCksIENHUmVjdE1ha2UoeCwgeSwgbGluZUxlbmd0aCwgdGhpY2tuZXNzKSk7CiAgICAgaWYg
KGZpbGxDb2xvcigpICE9IHN0cm9rZUNvbG9yKCkpCi0gICAgICAgIHNldENHRmlsbENvbG9yKHBs
YXRmb3JtQ29udGV4dCgpLCBmaWxsQ29sb3IoKSk7CisgICAgICAgIHNldENHRmlsbENvbG9yKHBs
YXRmb3JtQ29udGV4dCgpLCBmaWxsQ29sb3IoKSwgZmlsbENvbG9yU3BhY2UoKSk7CiAKICAgICBp
ZiAocmVzdG9yZUFudGlhbGlhc01vZGUpCiAgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlh
bGlhcyhwbGF0Zm9ybUNvbnRleHQoKSwgdHJ1ZSk7CkBAIC0xMTIzLDExICsxMTk0LDExIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmEKICAgICB9CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xv
cikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENv
bG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXRDR1N0cm9rZUNvbG9yKHBsYXRmb3Jt
Q29udGV4dCgpLCBjb2xvcik7CisgICAgc2V0Q0dTdHJva2VDb2xvcihwbGF0Zm9ybUNvbnRleHQo
KSwgY29sb3IsIGNvbG9yU3BhY2UpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1TdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQpAQCAtMTEzNywxMSArMTIwOCwx
MSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUCiAgICAgQ0dDb250
ZXh0U2V0TGluZVdpZHRoKHBsYXRmb3JtQ29udGV4dCgpLCB0aGlja25lc3MpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9y
KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9y
JiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRl
eHQoKSwgY29sb3IpOworICAgIHNldENHRmlsbENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBjb2xv
ciwgY29sb3JTcGFjZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNo
b3VsZEFudGlhbGlhcyhib29sIGVuYWJsZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCShyZXZpc2lv
biA1MDY3MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250
ZXh0SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKAogICAgICAgICBtX2RhdGEtPm1fdmlldy0+
U3Ryb2tlUG9seWdvbihiUG9pbnRzLCBwb2ludHNMZW5ndGgsIHRydWUsIGdldEhhaWt1U3Ryb2tl
U3R5bGUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTE2OSw3ICsxNjksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3QoY29uc3QgRmxvCiAgICAgICAgIHJldHVybjsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BM
ZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwg
Y29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3Qg
SW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsIGNvbnN0IEludFNpemUm
IGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0LCBjb25zdCBDb2xvciYgY29s
b3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
IHx8ICFjb2xvci5hbHBoYSgpKQogICAgICAgICByZXR1cm47CkBAIC00NzcsNyArNDc3LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRm9udChjbwogICAgIG1fZGF0YS0+bV92
aWV3LT5TZXRGb250KGZvbnQucHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkuZm9udCgpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3Qg
Q29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29s
b3IoY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNQYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTE5LDcgKzUxOSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVQKICAgICBtX2RhdGEtPm1f
dmlldy0+U2V0UGVuU2l6ZSh0aGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udE1hYy5tbQkocmV2
aXNpb24gNTA2NzApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsMTUgKzEyMiwxNiBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlw
aHMoR3JhcGhpY3NDb250ZXh0KiBjCiAgICAgICAgIC8vIFBhaW50IHNpbXBsZSBzaGFkb3dzIG91
cnNlbHZlcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cgc2hhZG93cywgdG8gYXZvaWQgbG9zaW5n
IHN1YnBpeGVsIGFudGlhbGlhc2luZy4KICAgICAgICAgY29udGV4dC0+Y2xlYXJTaGFkb3coKTsK
ICAgICAgICAgQ29sb3IgZmlsbENvbG9yID0gY29udGV4dC0+ZmlsbENvbG9yKCk7CisgICAgICAg
IENvbG9yU3BhY2UgZmlsbENvbG9yU3BhY2UgPSBjb250ZXh0LT5maWxsQ29sb3JTcGFjZSgpOwog
ICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3Ioc2hhZG93Q29sb3IucmVkKCksIHNoYWRvd0Nv
bG9yLmdyZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUoKSwgc2hhZG93Q29sb3IuYWxwaGEoKSAqIGZp
bGxDb2xvci5hbHBoYSgpIC8gMjU1KTsKLSAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHNo
YWRvd0ZpbGxDb2xvcik7CisgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihzaGFkb3dGaWxs
Q29sb3IsIGZpbGxDb2xvclNwYWNlKTsKICAgICAgICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9u
KGNnQ29udGV4dCwgcG9pbnQueCgpICsgc2hhZG93U2l6ZS53aWR0aCgpLCBwb2ludC55KCkgKyBz
aGFkb3dTaXplLmhlaWdodCgpKTsKICAgICAgICAgQ0dDb250ZXh0U2hvd0dseXBoc1dpdGhBZHZh
bmNlcyhjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2
YW5jZXMoZnJvbSksIG51bUdseXBocyk7CiAgICAgICAgIGlmIChmb250LT5zeW50aGV0aWNCb2xk
T2Zmc2V0KCkpIHsKICAgICAgICAgICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjZ0NvbnRl
eHQsIHBvaW50LngoKSArIHNoYWRvd1NpemUud2lkdGgoKSArIGZvbnQtPnN5bnRoZXRpY0JvbGRP
ZmZzZXQoKSwgcG9pbnQueSgpICsgc2hhZG93U2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgICAgICBD
R0NvbnRleHRTaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5
cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKICAgICAg
ICAgfQotICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoZmlsbENvbG9yKTsKKyAgICAgICAg
Y29udGV4dC0+c2V0RmlsbENvbG9yKGZpbGxDb2xvciwgZmlsbENvbG9yU3BhY2UpOwogICAgIH0K
IAogICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjZ0NvbnRleHQsIHBvaW50LngoKSwgcG9p
bnQueSgpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVy
UHJpdmF0ZVFUS2l0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCShyZXZpc2lvbiA1MDY3MCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTU4LDEwICsxMTU4LDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpwYWludChHcmFwaGljc0MKICAgICAgICAgICAgIFRleHRSdW4gdGV4dFJ1bih0ZXh0LmNoYXJh
Y3RlcnMoKSwgdGV4dC5sZW5ndGgoKSk7CiAgICAgICAgICAgICBjb25zdCBDb2xvciBjb2xvcigy
NTUsIDAsIDApOwogICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEuMGYsIC0x
LjBmKSk7ICAgIAotICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoY29sb3IpOwor
ICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoY29sb3IsIHN0eWxlVG9Vc2UtPmNv
bG9yU3BhY2UoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VTdHlsZShTb2xpZFN0
cm9rZSk7CiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoMS4wZik7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoY29sb3IpOworICAgICAgICAgICAgY29u
dGV4dC0+c2V0RmlsbENvbG9yKGNvbG9yLCBzdHlsZVRvVXNlLT5jb2xvclNwYWNlKCkpOwogICAg
ICAgICAgICAgY29udGV4dC0+ZHJhd1RleHQoc3R5bGVUb1VzZS0+Zm9udCgpLCB0ZXh0UnVuLCBJ
bnRQb2ludCgyLCAtMykpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHJldmlzaW9uIDUw
NjcwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc1MSw3ICs3NTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgYykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzYyLDcgKzc2Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICBwLT5maWxsUmVjdChyZWN0LCBtX2RhdGEtPnNv
bGlkQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUm
IHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0
b21SaWdodCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
b3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBj
b25zdCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3Qg
SW50U2l6ZSYgYm90dG9tUmlnaHQsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9yLmFscGhhKCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTEyMjUsNyArMTIyNSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnMKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29s
b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBD
b2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMjU1LDcgKzEyNTUsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUCiAgICAgcC0+c2V0UGVuKG5ld1Blbik7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBD
b2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5jZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5jZS5jcHAJ
KHJldmlzaW9uIDUwNjcwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFw
aGljc0NvbnRleHRXaW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0Nyw3ICs5NDcsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oCiAgICAgfQogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFtX2RhdGEtPm1fb3BhY2l0eSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTA1MSwxMiArMTA1MSwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVGb3JNaXNzcGVsCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2wpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbCwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBj
b2wpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBD
b2xvciYgY29sLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KQEAgLTEwODgsNyArMTA4OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJl
Y3QoY29uc3QgRmwKICAgICAgICAgcmV0dXJuOwogICAgIH0gCiAKLSAgICBmaWxsUmVjdChyZWN0
LCBDb2xvcihDb2xvcjo6d2hpdGUpKTsKKyAgICBmaWxsUmVjdChyZWN0LCBDb2xvcihDb2xvcjo6
d2hpdGUpLCBEZXZpY2VDb2xvclNwYWNlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3aWR0aCkKQEAgLTEyMzgsNyAr
MTIzOCw3IEBAIHN0YXRpYyBpbmxpbmUgSW50UG9pbnQgcmVjdENlbnRlclBvaW50KGMKIHsKICAg
ICByZXR1cm4gSW50UG9pbnQocmVjdC5sZWZ0ICsgKHJlY3QucmlnaHQgLSByZWN0LmxlZnQpIC8g
MiwgcmVjdC50b3AgKyAocmVjdC5ib3R0b20gLSByZWN0LnRvcCkgLyAyKTsKIH0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgZmlsbFJlY3QsIGNv
bnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRT
aXplJiBib3R0b21MZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCwgY29uc3QgQ29sb3Im
IGMpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3Qm
IGZpbGxSZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdo
dCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQs
IGNvbnN0IENvbG9yJiBjLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgU2NvcGVEQ1By
b3ZpZGVyIGRjUHJvdmlkZXIobV9kYXRhKTsKICAgICBpZiAoIW1fZGF0YS0+bV9kYykKQEAgLTE0
NDksNyArMTQ0OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8K
ICAgICBpZiAobnVtU3RvcHMgPT0gMSkgewogICAgICAgICBjb25zdCBHcmFkaWVudDo6Q29sb3JT
dG9wJiBzdG9wID0gc3RvcHMuZmlyc3QoKTsKICAgICAgICAgQ29sb3IgY29sb3Ioc3RvcC5yZWQs
IHN0b3AuZ3JlZW4sIHN0b3AuYmx1ZSwgc3RvcC5hbHBoYSk7Ci0gICAgICAgIGZpbGxSZWN0KHIs
IGNvbG9yKTsKKyAgICAgICAgZmlsbFJlY3QociwgY29sb3IsIERldmljZUNvbG9yU3BhY2UpOwog
ICAgICAgICByZXR1cm47CiAgICAgfSAKICAgICAKQEAgLTE1NDIsMTAgKzE1NDIsMTAgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgIGlmIChtX2NvbW1vbi0+
c3RhdGUuZmlsbFR5cGUgPT0gR3JhZGllbnRUeXBlICYmIG1fY29tbW9uLT5zdGF0ZS5maWxsR3Jh
ZGllbnQpCiAgICAgICAgIGZpbGxSZWN0KHJlY3QsIG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGll
bnQuZ2V0KCkpOwogICAgIGVsc2UKLSAgICAgICAgZmlsbFJlY3QocmVjdCwgZmlsbENvbG9yKCkp
OworICAgICAgICBmaWxsUmVjdChyZWN0LCBmaWxsQ29sb3IoKSwgRGV2aWNlQ29sb3JTcGFjZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBJbnRT
aXplJiwgaW50LCBjb25zdCBDb2xvciYpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1TaGFkb3coY29uc3QgSW50U2l6ZSYsIGludCwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCShyZXZpc2lv
biA1MDY3MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0
V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNyArMjUyLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKAogICAgIGRlbGV0ZSBbXSBwb2x5Z29uOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkK
IHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNjIs
NyArMjYyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAg
IG1fZGF0YS0+Y29udGV4dC0+RHJhd1JlY3RhbmdsZShyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
Um91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwg
Y29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsIGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0
IEludFNpemUmIGJvdHRvbVJpZ2h0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNp
emUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0
b21MZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCwgY29uc3QgQ29sb3ImIGNvbG9yLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNDM4LDcgKzQzOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojph
ZGRQYXRoKGNvbnN0IFBhdGgKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYg
Y29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47CkBAIC00NTcsNyArNDU3LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVAogCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAkocmV2aXNpb24gNTA2NzApCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDcgKzMyLDcgQEAgdm9pZCBFbGxpcHNpc0JveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjpQYQogICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fcmVuZGVyZXItPnN0eWxlKG1fZmlyc3RMaW5lKTsKICAg
ICBDb2xvciB0ZXh0Q29sb3IgPSBzdHlsZS0+Y29sb3IoKTsKICAgICBpZiAodGV4dENvbG9yICE9
IGNvbnRleHQtPmZpbGxDb2xvcigpKQotICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IodGV4
dENvbG9yKTsKKyAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHRleHRDb2xvciwgc3R5bGUt
PmNvbG9yU3BhY2UoKSk7CiAgICAgYm9vbCBzZXRTaGFkb3cgPSBmYWxzZTsKICAgICBpZiAoc3R5
bGUtPnRleHRTaGFkb3coKSkgewogICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3coSW50U2l6ZShz
dHlsZS0+dGV4dFNoYWRvdygpLT54LCBzdHlsZS0+dGV4dFNoYWRvdygpLT55KSwKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiA1MDY3MCkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05ODgsMTggKzk4
OCwxOCBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50VGV4dERlY29yYXRpb25zCiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGlmIChwYWludFVuZGVybGluZSkgewotICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHVuZGVybGluZSk7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+c2V0U3Ryb2tlQ29sb3IodW5kZXJsaW5lLCByZW5kZXJlcigpLT5zdHlsZSgpLT5j
b2xvclNwYWNlKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNv
bGlkU3Ryb2tlKTsKICAgICAgICAgICAgICAgICAvLyBMZWF2ZSBvbmUgcGl4ZWwgb2Ygd2hpdGUg
YmV0d2VlbiB0aGUgYmFzZWxpbmUgYW5kIHRoZSB1bmRlcmxpbmUuCiAgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZHJhd0xpbmVGb3JUZXh0KEludFBvaW50KHR4LCB0eSArIGJhc2VsaW5lUG9zICsg
MSksIHcsIGlzUHJpbnRpbmcpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHBhaW50
T3ZlcmxpbmUpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvdmVy
bGluZSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Iob3ZlcmxpbmUs
IHJlbmRlcmVyKCktPnN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgICAgICAgICAgICAgY29u
dGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmRyYXdMaW5lRm9yVGV4dChJbnRQb2ludCh0eCwgdHkpLCB3LCBpc1ByaW50aW5nKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChwYWludExpbmVUaHJvdWdoKSB7Ci0gICAgICAg
ICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IobGluZXRocm91Z2gpOworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGxpbmV0aHJvdWdoLCByZW5kZXJlcigpLT5z
dHlsZSgpLT5jb2xvclNwYWNlKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9r
ZVN0eWxlKFNvbGlkU3Ryb2tlKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3TGluZUZv
clRleHQoSW50UG9pbnQodHgsIHR5ICsgMiAqIGJhc2VsaW5lUG9zIC8gMyksIHcsIGlzUHJpbnRp
bmcpOwogICAgICAgICAgICAgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJ
KHJldmlzaW9uIDUwNjcwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxNCw3ICsyMTQsNyBAQCBDb2xvciBjb3JyZWN0ZWRUZXh0Q29s
b3IoQ29sb3IgdGV4dENvbG9yCiAgICAgcmV0dXJuIHRleHRDb2xvci5saWdodCgpOwogfQogCi12
b2lkIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IENvbG9yJiBmaWxsQ29sb3IsIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvciwgZmxvYXQgc3Ryb2tl
VGhpY2tuZXNzKQordm9pZCB1cGRhdGVHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBDb2xvciYgZmlsbENvbG9yLCBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3Is
IGZsb2F0IHN0cm9rZVRoaWNrbmVzcywgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewogICAgIGlu
dCBtb2RlID0gY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCk7CiAgICAgaWYgKHN0cm9rZVRoaWNr
bmVzcyA+IDApIHsKQEAgLTIyNSwxMiArMjI1LDEzIEBAIHZvaWQgdXBkYXRlR3JhcGhpY3NDb250
ZXh0KEdyYXBoaWNzQ29udGUKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBpZiAobW9kZSAm
IGNUZXh0RmlsbCAmJiBmaWxsQ29sb3IgIT0gY29udGV4dC0+ZmlsbENvbG9yKCkpCi0gICAgICAg
IGNvbnRleHQtPnNldEZpbGxDb2xvcihmaWxsQ29sb3IpOworICAgIGlmIChtb2RlICYgY1RleHRG
aWxsICYmIChmaWxsQ29sb3IgIT0gY29udGV4dC0+ZmlsbENvbG9yKCkKKyAgICAgICAgfHwgY29s
b3JTcGFjZSAhPSBjb250ZXh0LT5maWxsQ29sb3JTcGFjZSgpKSkKKyAgICAgICAgY29udGV4dC0+
c2V0RmlsbENvbG9yKGZpbGxDb2xvciwgY29sb3JTcGFjZSk7CiAKICAgICBpZiAobW9kZSAmIGNU
ZXh0U3Ryb2tlKSB7CiAgICAgICAgIGlmIChzdHJva2VDb2xvciAhPSBjb250ZXh0LT5zdHJva2VD
b2xvcigpKQotICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3Ip
OworICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IsIGNvbG9y
U3BhY2UpOwogICAgICAgICBpZiAoc3Ryb2tlVGhpY2tuZXNzICE9IGNvbnRleHQtPnN0cm9rZVRo
aWNrbmVzcygpKQogICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKHN0cm9r
ZVRoaWNrbmVzcyk7CiAgICAgfQpAQCAtMjU3LDkgKzI1OCwxMCBAQCBib29sIElubGluZVRleHRC
b3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpCiBzdGF0aWMgdm9pZCBwYWludFRleHRXaXRoU2hhZG93
cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRS
dW4mIHRleHRSdW4sIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgY29uc3QgSW50UG9p
bnQmIHRleHRPcmlnaW4sIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBTaGFkb3dEYXRhKiBz
aGFkb3csIGJvb2wgc3Ryb2tlZCkKIHsKICAgICBDb2xvciBmaWxsQ29sb3IgPSBjb250ZXh0LT5m
aWxsQ29sb3IoKTsKKyAgICBDb2xvclNwYWNlIGZpbGxDb2xvclNwYWNlID0gY29udGV4dC0+Zmls
bENvbG9yU3BhY2UoKTsKICAgICBib29sIG9wYXF1ZSA9IGZpbGxDb2xvci5hbHBoYSgpID09IDI1
NTsKICAgICBpZiAoIW9wYXF1ZSkKLSAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9y
OjpibGFjayk7CisgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2ssIERl
dmljZUNvbG9yU3BhY2UpOwogCiAgICAgZG8gewogICAgICAgICBJbnRTaXplIGV4dHJhT2Zmc2V0
OwpAQCAtMjgxLDcgKzI4Myw3IEBAIHN0YXRpYyB2b2lkIHBhaW50VGV4dFdpdGhTaGFkb3dzKEdy
YXBoaWMKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhzaGFk
b3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKICAgICAgICAgfSBlbHNlIGlmICgh
b3BhcXVlKQotICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGZpbGxDb2xvcik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoZmlsbENvbG9yLCBmaWxsQ29sb3JTcGFj
ZSk7CiAKICAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0IDw9IGVuZE9mZnNldCkKICAgICAgICAgICAg
IGNvbnRleHQtPmRyYXdUZXh0KGZvbnQsIHRleHRSdW4sIHRleHRPcmlnaW4gKyBleHRyYU9mZnNl
dCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CkBAIC00NjUsNyArNDY3LDcgQEAgdm9pZCBJbmxp
bmVUZXh0Qm94OjpwYWludChSZW5kZXJPYmplY3Q6OgogICAgICAgICBpZiAodGV4dFN0cm9rZVdp
ZHRoID4gMCkKICAgICAgICAgICAgIGNvbnRleHQtPnNhdmUoKTsKIAotICAgICAgICB1cGRhdGVH
cmFwaGljc0NvbnRleHQoY29udGV4dCwgdGV4dEZpbGxDb2xvciwgdGV4dFN0cm9rZUNvbG9yLCB0
ZXh0U3Ryb2tlV2lkdGgpOworICAgICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQoY29udGV4dCwg
dGV4dEZpbGxDb2xvciwgdGV4dFN0cm9rZUNvbG9yLCB0ZXh0U3Ryb2tlV2lkdGgsIHN0eWxlVG9V
c2UtPmNvbG9yU3BhY2UoKSk7CiAgICAgICAgIGlmICghcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0
ZWx5IHx8IGVQb3MgPD0gc1BvcykgewogICAgICAgICAgICAgLy8gRklYTUU6IFRydW5jYXRlIHJp
Z2h0LXRvLWxlZnQgdGV4dCBjb3JyZWN0bHkuCiAgICAgICAgICAgICBwYWludFRleHRXaXRoU2hh
ZG93cyhjb250ZXh0LCBmb250LCB0ZXh0UnVuLCAwLCBtX3RydW5jYXRpb24gPT0gY05vVHJ1bmNh
dGlvbiA/IG1fbGVuIDogbV90cnVuY2F0aW9uLCB0ZXh0T3JpZ2luLCBtX3ggKyB0eCwgbV95ICsg
dHksIHdpZHRoKCksIGhlaWdodCgpLCB0ZXh0U2hhZG93LCB0ZXh0U3Ryb2tlV2lkdGggPiAwKTsK
QEAgLTQ4MSw3ICs0ODMsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFJlbmRlck9iamVj
dDo6CiAgICAgICAgIGlmIChzZWxlY3Rpb25TdHJva2VXaWR0aCA+IDApCiAgICAgICAgICAgICBj
b250ZXh0LT5zYXZlKCk7CiAKLSAgICAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQs
IHNlbGVjdGlvbkZpbGxDb2xvciwgc2VsZWN0aW9uU3Ryb2tlQ29sb3IsIHNlbGVjdGlvblN0cm9r
ZVdpZHRoKTsKKyAgICAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIHNlbGVjdGlv
bkZpbGxDb2xvciwgc2VsZWN0aW9uU3Ryb2tlQ29sb3IsIHNlbGVjdGlvblN0cm9rZVdpZHRoLCBz
dHlsZVRvVXNlLT5jb2xvclNwYWNlKCkpOwogICAgICAgICBwYWludFRleHRXaXRoU2hhZG93cyhj
b250ZXh0LCBmb250LCB0ZXh0UnVuLCBzUG9zLCBlUG9zLCB0ZXh0T3JpZ2luLCBtX3ggKyB0eCwg
bV95ICsgdHksIHdpZHRoKCksIGhlaWdodCgpLCBzZWxlY3Rpb25TaGFkb3csIHNlbGVjdGlvblN0
cm9rZVdpZHRoID4gMCk7CiAKICAgICAgICAgaWYgKHNlbGVjdGlvblN0cm9rZVdpZHRoID4gMCkK
QEAgLTQ5MCw3ICs0OTIsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFJlbmRlck9iamVj
dDo6CiAKICAgICAvLyBQYWludCBkZWNvcmF0aW9ucwogICAgIGlmIChkICE9IFRETk9ORSAmJiBw
YWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbiAmJiBzdHlsZVRvVXNlLT5odG1s
SGFja3MoKSkgewotICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihzdHlsZVRvVXNlLT5j
b2xvcigpKTsKKyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Ioc3R5bGVUb1VzZS0+Y29s
b3IoKSwgc3R5bGVUb1VzZS0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAgcGFpbnREZWNvcmF0aW9u
KGNvbnRleHQsIHR4LCB0eSwgZCwgdGV4dFNoYWRvdyk7CiAgICAgfQogCkBAIC01NjEsMTMgKzU2
MywxMyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoCiAgICAgICAg
IGMgPSBDb2xvcigweGZmIC0gYy5yZWQoKSwgMHhmZiAtIGMuZ3JlZW4oKSwgMHhmZiAtIGMuYmx1
ZSgpKTsKIAogICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQo
Y29udGV4dCwgYywgYywgMCk7ICAvLyBEb24ndCBkcmF3IHRleHQgYXQgYWxsIQorICAgIHVwZGF0
ZUdyYXBoaWNzQ29udGV4dChjb250ZXh0LCBjLCBjLCAwLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsg
IC8vIERvbid0IGRyYXcgdGV4dCBhdCBhbGwhCiAgICAgaW50IHkgPSBzZWxlY3Rpb25Ub3AoKTsK
ICAgICBpbnQgaCA9IHNlbGVjdGlvbkhlaWdodCgpOwogICAgIGNvbnRleHQtPmNsaXAoSW50UmVj
dChtX3ggKyB0eCwgeSArIHR5LCBtX3dpZHRoLCBoKSk7CiAgICAgY29udGV4dC0+ZHJhd0hpZ2hs
aWdodEZvclRleHQoZm9udCwgVGV4dFJ1bih0ZXh0UmVuZGVyZXIoKS0+dGV4dCgpLT5jaGFyYWN0
ZXJzKCkgKyBtX3N0YXJ0LCBtX2xlbiwgdGV4dFJlbmRlcmVyKCktPmFsbG93VGFicygpLCB0ZXh0
UG9zKCksIG1fdG9BZGQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVj
dGlvbigpID09IFJUTCwgbV9kaXJPdmVycmlkZSB8fCBzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCkp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KG1feCArIHR4LCB5
ICsgdHkpLCBoLCBjLCBzUG9zLCBlUG9zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBJbnRQb2ludChtX3ggKyB0eCwgeSArIHR5KSwgaCwgYywgc3R5bGUtPmNvbG9yU3BhY2Uo
KSwgc1BvcywgZVBvcyk7CiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogfQogCkBAIC01ODQsMTMg
KzU4NiwxMyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrCiAKICAg
ICBDb2xvciBjID0gQ29sb3IoMjI1LCAyMjEsIDg1KTsKICAgICAKLSAgICB1cGRhdGVHcmFwaGlj
c0NvbnRleHQoY29udGV4dCwgYywgYywgMCk7IC8vIERvbid0IGRyYXcgdGV4dCBhdCBhbGwhCisg
ICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIGMsIGMsIDAsIHN0eWxlLT5jb2xvclNw
YWNlKCkpOyAvLyBEb24ndCBkcmF3IHRleHQgYXQgYWxsIQogCiAgICAgaW50IHkgPSBzZWxlY3Rp
b25Ub3AoKTsKICAgICBpbnQgaCA9IHNlbGVjdGlvbkhlaWdodCgpOwogICAgIGNvbnRleHQtPmRy
YXdIaWdobGlnaHRGb3JUZXh0KGZvbnQsIFRleHRSdW4odGV4dFJlbmRlcmVyKCktPnRleHQoKS0+
Y2hhcmFjdGVycygpICsgbV9zdGFydCwgbV9sZW4sIHRleHRSZW5kZXJlcigpLT5hbGxvd1RhYnMo
KSwgdGV4dFBvcygpLCBtX3RvQWRkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRpcmVjdGlvbigpID09IFJUTCwgbV9kaXJPdmVycmlkZSB8fCBzdHlsZS0+dmlzdWFsbHlPcmRl
cmVkKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KG1feCAr
IHR4LCB5ICsgdHkpLCBoLCBjLCBzUG9zLCBlUG9zKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJbnRQb2ludChtX3ggKyB0eCwgeSArIHR5KSwgaCwgYywgc3R5bGUtPmNvbG9y
U3BhY2UoKSwgc1BvcywgZVBvcyk7CiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogfQogCkBAIC02
NzUsMTggKzY3NywxOCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFw
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZGVjbyAmIFVOREVSTElORSkgewotICAgICAgICAg
ICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IodW5kZXJsaW5lKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnNldFN0cm9rZUNvbG9yKHVuZGVybGluZSwgcmVuZGVyZXIoKS0+c3R5bGUoKS0+Y29sb3JT
cGFjZSgpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tl
KTsKICAgICAgICAgICAgIC8vIExlYXZlIG9uZSBwaXhlbCBvZiB3aGl0ZSBiZXR3ZWVuIHRoZSBi
YXNlbGluZSBhbmQgdGhlIHVuZGVybGluZS4KICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdMaW5l
Rm9yVGV4dChJbnRQb2ludCh0eCwgdHkgKyBiYXNlbGluZSArIDEpLCB3aWR0aCwgaXNQcmludGlu
Zyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGRlY28gJiBPVkVSTElORSkgewotICAgICAgICAg
ICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Iob3ZlcmxpbmUpOworICAgICAgICAgICAgY29udGV4
dC0+c2V0U3Ryb2tlQ29sb3Iob3ZlcmxpbmUsIHJlbmRlcmVyKCktPnN0eWxlKCktPmNvbG9yU3Bh
Y2UoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7
CiAgICAgICAgICAgICBjb250ZXh0LT5kcmF3TGluZUZvclRleHQoSW50UG9pbnQodHgsIHR5KSwg
d2lkdGgsIGlzUHJpbnRpbmcpOwogICAgICAgICB9CiAgICAgICAgIGlmIChkZWNvICYgTElORV9U
SFJPVUdIKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihsaW5ldGhyb3Vn
aCk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihsaW5ldGhyb3VnaCwgcmVu
ZGVyZXIoKS0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnNl
dFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdMaW5l
Rm9yVGV4dChJbnRQb2ludCh0eCwgdHkgKyAyICogYmFzZWxpbmUgLyAzKSwgd2lkdGgsIGlzUHJp
bnRpbmcpOwogICAgICAgICB9CkBAIC03ODMsOSArNzg1LDkgQEAgdm9pZCBJbmxpbmVUZXh0Qm94
OjpwYWludFRleHRNYXRjaE1hcmtlcgogICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS0+
cGxhdGZvcm1BY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSA6CiAgICAgICAgICAgICBy
ZW5kZXJlcigpLT50aGVtZSgpLT5wbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENv
bG9yKCk7CiAgICAgICAgIHB0LT5zYXZlKCk7Ci0gICAgICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4
dChwdCwgY29sb3IsIGNvbG9yLCAwKTsgIC8vIERvbid0IGRyYXcgdGV4dCBhdCBhbGwhCisgICAg
ICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChwdCwgY29sb3IsIGNvbG9yLCAwLCBzdHlsZS0+Y29s
b3JTcGFjZSgpKTsgIC8vIERvbid0IGRyYXcgdGV4dCBhdCBhbGwhCiAgICAgICAgIHB0LT5jbGlw
KEludFJlY3QodHggKyBtX3gsIHR5ICsgeSwgbV93aWR0aCwgaCkpOwotICAgICAgICBwdC0+ZHJh
d0hpZ2hsaWdodEZvclRleHQoZm9udCwgcnVuLCBzdGFydFBvaW50LCBoLCBjb2xvciwgc1Bvcywg
ZVBvcyk7CisgICAgICAgIHB0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBydW4sIHN0YXJ0
UG9pbnQsIGgsIGNvbG9yLCBzdHlsZS0+Y29sb3JTcGFjZSgpLCBzUG9zLCBlUG9zKTsKICAgICAg
ICAgcHQtPnJlc3RvcmUoKTsKICAgICB9CiB9CkBAIC05MTEsNyArOTEzLDcgQEAgdm9pZCBJbmxp
bmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uVW5kZQogICAgIHN0YXJ0ICs9IDE7CiAgICAgd2lk
dGggLT0gMjsKIAotICAgIGN0eC0+c2V0U3Ryb2tlQ29sb3IodW5kZXJsaW5lLmNvbG9yKTsKKyAg
ICBjdHgtPnNldFN0cm9rZUNvbG9yKHVuZGVybGluZS5jb2xvciwgcmVuZGVyZXIoKS0+c3R5bGUo
KS0+Y29sb3JTcGFjZSgpKTsKICAgICBjdHgtPnNldFN0cm9rZVRoaWNrbmVzcyhsaW5lVGhpY2tu
ZXNzKTsKICAgICBjdHgtPmRyYXdMaW5lRm9yVGV4dChJbnRQb2ludCh0eCArIHN0YXJ0LCB0eSAr
IGhlaWdodCgpIC0gbGluZVRoaWNrbmVzcyksIHdpZHRoLCB0ZXh0UmVuZGVyZXIoKS0+ZG9jdW1l
bnQoKS0+cHJpbnRpbmcoKSk7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCShy
ZXZpc2lvbiA1MDY3MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBjb25zdCB1bnNpZ25lZCBzaG9ydCBjTm9UcnVu
Y2F0aW9uID0gVVNICiBjb25zdCB1bnNpZ25lZCBzaG9ydCBjRnVsbFRydW5jYXRpb24gPSBVU0hS
VF9NQVggLSAxOwogCiAvLyBIZWxwZXIgZnVuY3Rpb25zIHNoYXJlZCBieSBJbmxpbmVUZXh0Qm94
IC8gU1ZHUm9vdElubGluZUJveAotdm9pZCB1cGRhdGVHcmFwaGljc0NvbnRleHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBDb2xvciYgZmlsbENvbG9yLCBjb25zdCBDb2xvciYgc3Ry
b2tlQ29sb3IsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyk7Cit2b2lkIHVwZGF0ZUdyYXBoaWNzQ29u
dGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IsIGNv
bnN0IENvbG9yJiBzdHJva2VDb2xvciwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UpOwogQ29sb3IgY29ycmVjdGVkVGV4dENvbG9yKENvbG9yIHRleHRDb2xvciwg
Q29sb3IgYmFja2dyb3VuZENvbG9yKTsKIAogY2xhc3MgSW5saW5lVGV4dEJveCA6IHB1YmxpYyBJ
bmxpbmVSdW5Cb3ggewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24g
NTA2NzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxMjAsNyArMjEyMCw3IEBAIEludFJlY3QgUmVuZGVyQmxvY2s6OmZpbGxIb3Jpem9u
dGFsU2VsZWMKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKICAgICBJbnRSZWN0IGdhcFJlY3Qo
eFBvcywgeVBvcywgd2lkdGgsIGhlaWdodCk7CiAgICAgaWYgKHBhaW50SW5mbyAmJiBzZWxPYmot
PnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQotICAgICAgICBwYWludEluZm8tPmNv
bnRleHQtPmZpbGxSZWN0KGdhcFJlY3QsIHNlbE9iai0+c2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
KCkpOworICAgICAgICBwYWludEluZm8tPmNvbnRleHQtPmZpbGxSZWN0KGdhcFJlY3QsIHNlbE9i
ai0+c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCksIHNlbE9iai0+c3R5bGUoKS0+Y29sb3JTcGFj
ZSgpKTsKICAgICByZXR1cm4gZ2FwUmVjdDsKIH0KIApAQCAtMjE0MSw3ICsyMTQxLDcgQEAgSW50
UmVjdCBSZW5kZXJCbG9jazo6ZmlsbFZlcnRpY2FsU2VsZWN0aQogCiAgICAgSW50UmVjdCBnYXBS
ZWN0KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCk7CiAgICAgaWYgKHBhaW50SW5mbykKLSAgICAg
ICAgcGFpbnRJbmZvLT5jb250ZXh0LT5maWxsUmVjdChnYXBSZWN0LCBzZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKSk7CisgICAgICAgIHBhaW50SW5mby0+Y29udGV4dC0+ZmlsbFJlY3QoZ2FwUmVj
dCwgc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAg
ICAgcmV0dXJuIGdhcFJlY3Q7CiB9CiAKQEAgLTIxNTcsNyArMjE1Nyw3IEBAIEludFJlY3QgUmVu
ZGVyQmxvY2s6OmZpbGxMZWZ0U2VsZWN0aW9uR2EKIAogICAgIEludFJlY3QgZ2FwUmVjdChsZWZ0
LCB0b3AsIHdpZHRoLCBoZWlnaHQpOwogICAgIGlmIChwYWludEluZm8pCi0gICAgICAgIHBhaW50
SW5mby0+Y29udGV4dC0+ZmlsbFJlY3QoZ2FwUmVjdCwgc2VsT2JqLT5zZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKSk7CisgICAgICAgIHBhaW50SW5mby0+Y29udGV4dC0+ZmlsbFJlY3QoZ2FwUmVj
dCwgc2VsT2JqLT5zZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSwgc2VsT2JqLT5zdHlsZSgpLT5j
b2xvclNwYWNlKCkpOwogICAgIHJldHVybiBnYXBSZWN0OwogfQogCkBAIC0yMTczLDcgKzIxNzMs
NyBAQCBJbnRSZWN0IFJlbmRlckJsb2NrOjpmaWxsUmlnaHRTZWxlY3Rpb25HCiAKICAgICBJbnRS
ZWN0IGdhcFJlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTsKICAgICBpZiAocGFpbnRJbmZv
KQotICAgICAgICBwYWludEluZm8tPmNvbnRleHQtPmZpbGxSZWN0KGdhcFJlY3QsIHNlbE9iai0+
c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOworICAgICAgICBwYWludEluZm8tPmNvbnRleHQt
PmZpbGxSZWN0KGdhcFJlY3QsIHNlbE9iai0+c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCksIHNl
bE9iai0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKICAgICByZXR1cm4gZ2FwUmVjdDsKIH0KIApJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNp
b24gNTA2NzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0MSwxNCArNDQxLDE0IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBhaW50RmlsbExheWUKICAgICAgICAgICAgIGlmIChiYXNlQ29sb3IuYWxwaGEoKSA+
IDApIHsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5zYXZlKCk7CiAgICAgICAgICAgICAgICAg
Y29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOwotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KHJlY3QsIGJhc2VDb2xvcik7CisgICAgICAgICAgICAg
ICAgY29udGV4dC0+ZmlsbFJlY3QocmVjdCwgYmFzZUNvbG9yLCBzdHlsZSgpLT5jb2xvclNwYWNl
KCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgIGNvbnRleHQtPmNsZWFyUmVjdChyZWN0KTsKICAgICAgICAg
fQogCiAgICAgICAgIGlmIChiZ0NvbG9yLmlzVmFsaWQoKSAmJiBiZ0NvbG9yLmFscGhhKCkgPiAw
KQotICAgICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QocmVjdCwgYmdDb2xvcik7CisgICAgICAg
ICAgICBjb250ZXh0LT5maWxsUmVjdChyZWN0LCBiZ0NvbG9yLCBzdHlsZSgpLT5jb2xvclNwYWNl
KCkpOwogICAgIH0KIAogICAgIC8vIG5vIHByb2dyZXNzaXZlIGxvYWRpbmcgb2YgdGhlIGJhY2tn
cm91bmQgaW1hZ2UKQEAgLTEyNDEsNyArMTI0MSw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OnBhaW50Qm94U2hhZG8KIAogICAgICAgICAgICAgICAgIGlmICghcmVjdFRvQ2xpcE91dC5p
c0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmNsaXBPdXRSb3VuZGVkUmVj
dChyZWN0VG9DbGlwT3V0LCB0b3BMZWZ0VG9DbGlwT3V0LCB0b3BSaWdodFRvQ2xpcE91dCwgYm90
dG9tTGVmdFRvQ2xpcE91dCwgYm90dG9tUmlnaHRUb0NsaXBPdXQpOwotICAgICAgICAgICAgICAg
IGNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChmaWxsUmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJv
dHRvbUxlZnQsIGJvdHRvbVJpZ2h0LCBDb2xvcjo6YmxhY2spOworICAgICAgICAgICAgICAgIGNv
bnRleHQtPmZpbGxSb3VuZGVkUmVjdChmaWxsUmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRv
bUxlZnQsIGJvdHRvbVJpZ2h0LCBDb2xvcjo6YmxhY2ssIERldmljZUNvbG9yU3BhY2UpOwogICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBJbnRSZWN0IHJlY3RUb0NsaXBPdXQg
PSByZWN0OwogCkBAIC0xMjU4LDcgKzEyNTgsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpwYWludEJveFNoYWRvCiAKICAgICAgICAgICAgICAgICBpZiAoIXJlY3RUb0NsaXBPdXQuaXNF
bXB0eSgpKQogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5jbGlwT3V0KHJlY3RUb0NsaXBP
dXQpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KGZpbGxSZWN0LCBDb2xvcjo6
YmxhY2spOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KGZpbGxSZWN0LCBDb2xv
cjo6YmxhY2ssIERldmljZUNvbG9yU3BhY2UpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBjb250ZXh0LT5yZXN0b3JlKCk7CkBAIC0xMjY5LDkgKzEyNjksOSBAQCB2b2lkIFJlbmRlckJv
eE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvCiAKICAgICAgICAgICAgIGlmIChob2xlUmVjdC5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKQotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5maWxsUm91bmRlZFJlY3QocmVjdCwgdG9wTGVmdCwgdG9w
UmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0LCBzaGFkb3dDb2xvcik7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChyZWN0LCB0b3BMZWZ0LCB0b3BSaWdo
dCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQsIHNoYWRvd0NvbG9yLCBzLT5jb2xvclNwYWNlKCkp
OwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Zmls
bFJlY3QocmVjdCwgc2hhZG93Q29sb3IpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5m
aWxsUmVjdChyZWN0LCBzaGFkb3dDb2xvciwgcy0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghYmVnaW4pIHsK
QEAgLTEzMjAsNyArMTMyMCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94
U2hhZG8KICAgICAgICAgICAgICAgICBjb250ZXh0LT5hZGRQYXRoKFBhdGg6OmNyZWF0ZVJlY3Rh
bmdsZShob2xlUmVjdCkpOwogCiAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShSVUxF
X0VWRU5PREQpOwotICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGZpbGxDb2xvcik7
CisgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoZmlsbENvbG9yLCBzLT5jb2xvclNw
YWNlKCkpOwogICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hh
ZG93Qmx1ciwgc2hhZG93Q29sb3IpOwogICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKTsK
IApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNw
cAkocmV2aXNpb24gNTA2NzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2Fk
Q29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw3ICsyMDcsNyBAQCB2b2lkIFJlbmRl
ckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9iamVjCiAgICAgICAgICAgICArIGJ1dHRvblJlbmRl
cmVyLT5tYXJnaW5Ub3AoKSArIGJ1dHRvblJlbmRlcmVyLT5ib3JkZXJUb3AoKSArIGJ1dHRvblJl
bmRlcmVyLT5wYWRkaW5nVG9wKCkKICAgICAgICAgICAgICsgYnV0dG9uUmVuZGVyZXItPmJhc2Vs
aW5lUG9zaXRpb24odHJ1ZSwgZmFsc2UpOwogCi0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5z
ZXRGaWxsQ29sb3Ioc3R5bGUoKS0+Y29sb3IoKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5zZXRGaWxsQ29sb3Ioc3R5bGUoKS0+Y29sb3IoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIERyYXcgdGhlIGZpbGVuYW1lCiAgICAgICAgIHBhaW50SW5m
by5jb250ZXh0LT5kcmF3QmlkaVRleHQoc3R5bGUoKS0+Zm9udCgpLCB0ZXh0UnVuLCBJbnRQb2lu
dCh0ZXh0WCwgdGV4dFkpKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJ
KHJldmlzaW9uIDUwNjcwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NSwxMyArODUsMTQgQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6
cGFpbnRDb2x1bW5Cb3JkZXIoYwogICAgIAogICAgIC8vIEZpbGwgZmlyc3QuCiAgICAgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7Ci0gICAgY29udGV4dC0+Zmls
bFJlY3QoYm9yZGVyUmVjdCwgZnJhbWVTZXQoKS0+aGFzQm9yZGVyQ29sb3IoKSA/IHN0eWxlKCkt
PmJvcmRlckxlZnRDb2xvcigpIDogYm9yZGVyRmlsbENvbG9yKCkpOworICAgIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSA9IHN0eWxlKCktPmNvbG9yU3BhY2UoKTsKKyAgICBjb250ZXh0LT5maWxsUmVj
dChib3JkZXJSZWN0LCBmcmFtZVNldCgpLT5oYXNCb3JkZXJDb2xvcigpID8gc3R5bGUoKS0+Ym9y
ZGVyTGVmdENvbG9yKCkgOiBib3JkZXJGaWxsQ29sb3IoKSwgY29sb3JTcGFjZSk7CiAgICAgCiAg
ICAgLy8gTm93IHN0cm9rZSB0aGUgZWRnZXMgYnV0IG9ubHkgaWYgd2UgaGF2ZSBlbm91Z2ggcm9v
bSB0byBwYWludCBib3RoIGVkZ2VzIHdpdGggYSBsaXR0bGUKICAgICAvLyBiaXQgb2YgdGhlIGZp
bGwgY29sb3Igc2hvd2luZyB0aHJvdWdoLgogICAgIGlmIChib3JkZXJSZWN0LndpZHRoKCkgPj0g
MykgewotICAgICAgICBjb250ZXh0LT5maWxsUmVjdChJbnRSZWN0KGJvcmRlclJlY3QudG9wTGVm
dCgpLCBJbnRTaXplKDEsIGhlaWdodCgpKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKCkpOwotICAg
ICAgICBjb250ZXh0LT5maWxsUmVjdChJbnRSZWN0KGJvcmRlclJlY3QudG9wUmlnaHQoKSwgSW50
U2l6ZSgxLCBoZWlnaHQoKSkpLCBib3JkZXJFbmRFZGdlQ29sb3IoKSk7CisgICAgICAgIGNvbnRl
eHQtPmZpbGxSZWN0KEludFJlY3QoYm9yZGVyUmVjdC50b3BMZWZ0KCksIEludFNpemUoMSwgaGVp
Z2h0KCkpKSwgYm9yZGVyU3RhcnRFZGdlQ29sb3IoKSwgY29sb3JTcGFjZSk7CisgICAgICAgIGNv
bnRleHQtPmZpbGxSZWN0KEludFJlY3QoYm9yZGVyUmVjdC50b3BSaWdodCgpLCBJbnRTaXplKDEs
IGhlaWdodCgpKSksIGJvcmRlckVuZEVkZ2VDb2xvcigpLCBjb2xvclNwYWNlKTsKICAgICB9CiB9
CiAKQEAgLTEwNCwxMyArMTA1LDE0IEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50Um93Qm9y
ZGVyKGNvbnMKICAgICAKICAgICAvLyBGaWxsIGZpcnN0LgogICAgIEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0OwotICAgIGNvbnRleHQtPmZpbGxSZWN0KGJvcmRl
clJlY3QsIGZyYW1lU2V0KCktPmhhc0JvcmRlckNvbG9yKCkgPyBzdHlsZSgpLT5ib3JkZXJMZWZ0
Q29sb3IoKSA6IGJvcmRlckZpbGxDb2xvcigpKTsKKyAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2Ug
PSBzdHlsZSgpLT5jb2xvclNwYWNlKCk7CisgICAgY29udGV4dC0+ZmlsbFJlY3QoYm9yZGVyUmVj
dCwgZnJhbWVTZXQoKS0+aGFzQm9yZGVyQ29sb3IoKSA/IHN0eWxlKCktPmJvcmRlckxlZnRDb2xv
cigpIDogYm9yZGVyRmlsbENvbG9yKCksIGNvbG9yU3BhY2UpOwogCiAgICAgLy8gTm93IHN0cm9r
ZSB0aGUgZWRnZXMgYnV0IG9ubHkgaWYgd2UgaGF2ZSBlbm91Z2ggcm9vbSB0byBwYWludCBib3Ro
IGVkZ2VzIHdpdGggYSBsaXR0bGUKICAgICAvLyBiaXQgb2YgdGhlIGZpbGwgY29sb3Igc2hvd2lu
ZyB0aHJvdWdoLgogICAgIGlmIChib3JkZXJSZWN0LmhlaWdodCgpID49IDMpIHsKLSAgICAgICAg
Y29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChib3JkZXJSZWN0LnRvcExlZnQoKSwgSW50U2l6ZSh3
aWR0aCgpLCAxKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKCkpOwotICAgICAgICBjb250ZXh0LT5m
aWxsUmVjdChJbnRSZWN0KGJvcmRlclJlY3QuYm90dG9tTGVmdCgpLCBJbnRTaXplKHdpZHRoKCks
IDEpKSwgYm9yZGVyRW5kRWRnZUNvbG9yKCkpOworICAgICAgICBjb250ZXh0LT5maWxsUmVjdChJ
bnRSZWN0KGJvcmRlclJlY3QudG9wTGVmdCgpLCBJbnRTaXplKHdpZHRoKCksIDEpKSwgYm9yZGVy
U3RhcnRFZGdlQ29sb3IoKSwgY29sb3JTcGFjZSk7CisgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0
KEludFJlY3QoYm9yZGVyUmVjdC5ib3R0b21MZWZ0KCksIEludFNpemUod2lkdGgoKSwgMSkpLCBi
b3JkZXJFbmRFZGdlQ29sb3IoKSwgY29sb3JTcGFjZSk7CiAgICAgfQogfQogCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiA1MDY3MCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY0LDggKzM2NCw4IEBAIHZv
aWQgUmVuZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmYKICAgICAgICAgaWYgKGNXaWR0
aCA+IDIgJiYgY0hlaWdodCA+IDIpIHsKICAgICAgICAgICAgIC8vIERyYXcgYW4gb3V0bGluZSBy
ZWN0IHdoZXJlIHRoZSBpbWFnZSBzaG91bGQgYmUuCiAgICAgICAgICAgICBjb250ZXh0LT5zZXRT
dHJva2VTdHlsZShTb2xpZFN0cm9rZSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VD
b2xvcihDb2xvcjo6bGlnaHRHcmF5KTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xv
cihDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29s
b3IoQ29sb3I6OmxpZ2h0R3JheSwgRGV2aWNlQ29sb3JTcGFjZSk7CisgICAgICAgICAgICBjb250
ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50LCBEZXZpY2VDb2xvclNwYWNlKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdSZWN0KEludFJlY3QodHggKyBsZWZ0Qm9yZGVyICsg
bGVmdFBhZCwgdHkgKyB0b3BCb3JkZXIgKyB0b3BQYWQsIGNXaWR0aCwgY0hlaWdodCkpOwogCiAg
ICAgICAgICAgICBib29sIGVycm9yUGljdHVyZURyYXduID0gZmFsc2U7CkBAIC0zOTIsNyArMzky
LDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWludEluZgogCiAgICAgICAg
ICAgICBpZiAoIW1fYWx0VGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcg
dGV4dCA9IGRvY3VtZW50KCktPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcobV9hbHRU
ZXh0KTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3Ioc3R5bGUoKS0+Y29s
b3IoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHN0eWxlKCktPmNv
bG9yKCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgICAgICAgICAgICAgaW50IGF4ID0g
dHggKyBsZWZ0Qm9yZGVyICsgbGVmdFBhZDsKICAgICAgICAgICAgICAgICBpbnQgYXkgPSB0eSAr
IHRvcEJvcmRlciArIHRvcFBhZDsKICAgICAgICAgICAgICAgICBjb25zdCBGb250JiBmb250ID0g
c3R5bGUoKS0+Zm9udCgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNp
b24gNTA2NzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5MTMsNyArMTkxMyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xs
Q29ybmVyKEdyYXAKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBjb250ZXh0LT5m
aWxsUmVjdChhYnNSZWN0LCBDb2xvcjo6d2hpdGUpOworICAgIGNvbnRleHQtPmZpbGxSZWN0KGFi
c1JlY3QsIENvbG9yOjp3aGl0ZSwgRGV2aWNlQ29sb3JTcGFjZSk7CiB9CiAKIHZvaWQgUmVuZGVy
TGF5ZXI6OnBhaW50UmVzaXplcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50
IHR5LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQpAQCAtMTk1MSw5ICsxOTUxLDkgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQwogICAgICAgICBjb250ZXh0LT5j
bGlwKGFic1JlY3QpOwogICAgICAgICBJbnRSZWN0IGxhcmdlckNvcm5lciA9IGFic1JlY3Q7CiAg
ICAgICAgIGxhcmdlckNvcm5lci5zZXRTaXplKEludFNpemUobGFyZ2VyQ29ybmVyLndpZHRoKCkg
KyAxLCBsYXJnZXJDb3JuZXIuaGVpZ2h0KCkgKyAxKSk7Ci0gICAgICAgIGNvbnRleHQtPnNldFN0
cm9rZUNvbG9yKENvbG9yKG1ha2VSR0IoMjE3LCAyMTcsIDIxNykpKTsKKyAgICAgICAgY29udGV4
dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3IobWFrZVJHQigyMTcsIDIxNywgMjE3KSksIERldmljZUNv
bG9yU3BhY2UpOwogICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoMS4wZik7Ci0g
ICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgICAg
ICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50LCBEZXZpY2VDb2xvclNw
YWNlKTsKICAgICAgICAgY29udGV4dC0+ZHJhd1JlY3QobGFyZ2VyQ29ybmVyKTsKICAgICAgICAg
Y29udGV4dC0+cmVzdG9yZSgpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guY3BwCShyZXZpc2lvbiA1MDY3MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjEsNyArMzIxLDggQEAgdm9pZCBSZW5kZXJMaXN0
Qm94OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKAogICAgICAgICAgICAgdGV4dENvbG9yID0gdGhlbWUo
KS0+aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7CiAgICAgfQogCi0g
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcih0ZXh0Q29sb3IpOworICAgIENvbG9y
U3BhY2UgY29sb3JTcGFjZSA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkgPyBlbGVtZW50LT5yZW5k
ZXJTdHlsZSgpLT5jb2xvclNwYWNlKCkgOiBzdHlsZSgpLT5jb2xvclNwYWNlKCk7CisgICAgcGFp
bnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcih0ZXh0Q29sb3IsIGNvbG9yU3BhY2UpOwogCiAg
ICAgRm9udCBpdGVtRm9udCA9IHN0eWxlKCktPmZvbnQoKTsKICAgICBpZiAoaXNPcHRpb25Hcm91
cEVsZW1lbnQoZWxlbWVudCkpIHsKQEAgLTM1OCw5ICszNTksMTAgQEAgdm9pZCBSZW5kZXJMaXN0
Qm94OjpwYWludEl0ZW1CYWNrZ3JvdW5kKAogCiAgICAgLy8gRHJhdyB0aGUgYmFja2dyb3VuZCBm
b3IgdGhpcyBsaXN0IGJveCBpdGVtCiAgICAgaWYgKCFlbGVtZW50LT5yZW5kZXJTdHlsZSgpIHx8
IGVsZW1lbnQtPnJlbmRlclN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBISURERU4pIHsKKyAgICAg
ICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKSA/IGVsZW1l
bnQtPnJlbmRlclN0eWxlKCktPmNvbG9yU3BhY2UoKSA6IERldmljZUNvbG9yU3BhY2U7CiAgICAg
ICAgIEludFJlY3QgaXRlbVJlY3QgPSBpdGVtQm91bmRpbmdCb3hSZWN0KHR4LCB0eSwgbGlzdElu
ZGV4KTsKICAgICAgICAgaXRlbVJlY3QuaW50ZXJzZWN0KGNvbnRyb2xDbGlwUmVjdCh0eCwgdHkp
KTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KGl0ZW1SZWN0LCBiYWNrQ29s
b3IpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJlY3QoaXRlbVJlY3QsIGJhY2tD
b2xvciwgY29sb3JTcGFjZSk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gNTA2NzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ2LDcgKzU0Niw3IEBAIHZv
aWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICAgICAgY29udGV4dC0+
ZHJhd0ltYWdlKG1faW1hZ2UtPmltYWdlKHRoaXMsIG1hcmtlci5zaXplKCkpLCBtYXJrZXIubG9j
YXRpb24oKSk7CiAgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5vbmUp
IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBzZWxlY3Rpb25SZWN0KCkgaXMgaW4gYWJzb2x1dGUs
IG5vdCBwYWludGluZyBjb29yZGluYXRlcy4KLSAgICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0
KHNlbGVjdGlvblJlY3QoKSwgc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOworICAgICAgICAg
ICAgY29udGV4dC0+ZmlsbFJlY3Qoc2VsZWN0aW9uUmVjdCgpLCBzZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtNTU5LDIxICs1NTksMjEgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpw
YWludChQYWludEluZm8mIAogCiAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9u
Tm9uZSkgewogICAgICAgICAvLyBGSVhNRTogc2VsZWN0aW9uUmVjdCgpIGlzIGluIGFic29sdXRl
LCBub3QgcGFpbnRpbmcgY29vcmRpbmF0ZXMuCi0gICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KHNl
bGVjdGlvblJlY3QoKSwgc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOworICAgICAgICBjb250
ZXh0LT5maWxsUmVjdChzZWxlY3Rpb25SZWN0KCksIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigp
LCBzdHlsZSgpLT5jb2xvclNwYWNlKCkpOwogICAgIH0KIAogICAgIGNvbnN0IENvbG9yIGNvbG9y
KHN0eWxlKCktPmNvbG9yKCkpOwotICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGNvbG9yKTsK
KyAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihjb2xvciwgc3R5bGUoKS0+Y29sb3JTcGFjZSgp
KTsKICAgICBjb250ZXh0LT5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7CiAgICAgY29udGV4
dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOwotICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihj
b2xvcik7CisgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGNvbG9yLCBzdHlsZSgpLT5jb2xvclNw
YWNlKCkpOwogCiAgICAgc3dpdGNoIChzdHlsZSgpLT5saXN0U3R5bGVUeXBlKCkpIHsKICAgICAg
ICAgY2FzZSBESVNDOgogICAgICAgICAgICAgY29udGV4dC0+ZHJhd0VsbGlwc2UobWFya2VyKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBDSVJDTEU6Ci0gICAgICAgICAgICBj
b250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICAgICAgICAgIGNv
bnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQsIERldmljZUNvbG9yU3BhY2Up
OwogICAgICAgICAgICAgY29udGV4dC0+ZHJhd0VsbGlwc2UobWFya2VyKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgY2FzZSBTUVVBUkU6CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAJKHJldmlzaW9uIDUwNjcwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzE2LDcgKzcxNiw3IEBAIHZvaWQgUmVuZGVyT2Jq
ZWN0OjpkcmF3TGluZUZvckJveFNpZGUoR3IKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
Y2FzZSBET1RURUQ6CiAgICAgICAgIGNhc2UgREFTSEVEOgotICAgICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LT5zZXRTdHJva2VDb2xvcihjKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
c2V0U3Ryb2tlQ29sb3IoYywgbV9zdHlsZS0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKHdpZHRoKTsKICAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoc3R5bGUgPT0gREFTSEVEID8gRGFzaGVkU3Ry
b2tlIDogRG90dGVkU3Ryb2tlKTsKIApAQCAtNzM3LDcgKzczNyw3IEBAIHZvaWQgUmVuZGVyT2Jq
ZWN0OjpkcmF3TGluZUZvckJveFNpZGUoR3IKIAogICAgICAgICAgICAgaWYgKGFkamJ3MSA9PSAw
ICYmIGFkamJ3MiA9PSAwKSB7CiAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRT
dHJva2VTdHlsZShOb1N0cm9rZSk7Ci0gICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5z
ZXRGaWxsQ29sb3IoYyk7CisgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRGaWxs
Q29sb3IoYywgbV9zdHlsZS0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAgICAgICAgICBzd2l0Y2gg
KHMpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBCU1RvcDoKICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBCU0JvdHRvbToKQEAgLTg1MCw3ICs4NTAsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6
ZHJhd0xpbmVGb3JCb3hTaWRlKEdyCiAgICAgICAgICAgICAvLyBmYWxsIHRocm91Z2gKICAgICAg
ICAgY2FzZSBTT0xJRDogewogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VT
dHlsZShOb1N0cm9rZSk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxDb2xv
cihjKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0RmlsbENvbG9yKGMsIG1fc3R5
bGUtPmNvbG9yU3BhY2UoKSk7CiAgICAgICAgICAgICBBU1NFUlQoeDIgPj0geDEpOwogICAgICAg
ICAgICAgQVNTRVJUKHkyID49IHkxKTsKICAgICAgICAgICAgIGlmICghYWRqYncxICYmICFhZGpi
dzIpIHsKQEAgLTkxMCw3ICs5MTAsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6ZHJhd0FyY0ZvckJv
eFNpZGUoR3JhCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgRE9UVEVEOgogICAg
ICAgICBjYXNlIERBU0hFRDoKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tl
Q29sb3IoYyk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZUNvbG9yKGMs
IG1fc3R5bGUtPmNvbG9yU3BhY2UoKSk7CiAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNl
dFN0cm9rZVN0eWxlKHN0eWxlID09IERPVFRFRCA/IERvdHRlZFN0cm9rZSA6IERhc2hlZFN0cm9r
ZSk7CiAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyh0aGlj
a25lc3MpOwogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zdHJva2VBcmMoSW50UmVjdCh4
LCB5LCByYWRpdXMud2lkdGgoKSAqIDIsIHJhZGl1cy5oZWlnaHQoKSAqIDIpLCBhbmdsZVN0YXJ0
LCBhbmdsZVNwYW4pOwpAQCAtOTMyLDcgKzkzMiw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3
QXJjRm9yQm94U2lkZShHcmEKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LT5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7Ci0gICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQtPnNldFN0cm9rZUNvbG9yKGMpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LT5zZXRTdHJva2VDb2xvcihjLCBtX3N0eWxlLT5jb2xvclNwYWNlKCkpOwogICAgICAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3ModGhpcmQpOwogICAgICAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LT5zdHJva2VBcmMoSW50UmVjdCh4LCBvdXRlclksIHJhZGl1cy53aWR0
aCgpICogMiwgb3V0ZXJIZWlnaHQpLCBhbmdsZVN0YXJ0LCBhbmdsZVNwYW4pOwogICAgICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoaW5uZXJUaGlyZCA+IDIgPyBp
bm5lclRoaXJkIC0gMSA6IGlubmVyVGhpcmQpOwpAQCAtOTUxLDEzICs5NTEsMTMgQEAgdm9pZCBS
ZW5kZXJPYmplY3Q6OmRyYXdBcmNGb3JCb3hTaWRlKEdyYQogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKLSAg
ICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoYyk7CisgICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZUNvbG9yKGMsIG1fc3R5bGUtPmNvbG9yU3BhY2Uo
KSk7CiAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyh0aGlj
a25lc3MpOwogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zdHJva2VBcmMoSW50UmVjdCh4
LCB5LCByYWRpdXMud2lkdGgoKSAqIDIsIHJhZGl1cy5oZWlnaHQoKSAqIDIpLCBhbmdsZVN0YXJ0
LCBhbmdsZVNwYW4pOwogCiAgICAgICAgICAgICBmbG9hdCBoYWxmVGhpY2tuZXNzID0gKHRoaWNr
bmVzcyArIDEuMGYpIC8gNC4wZjsKICAgICAgICAgICAgIGludCBzaGlmdEZvcklubmVyID0gc3Rh
dGljX2Nhc3Q8aW50PihoYWxmVGhpY2tuZXNzICogMS41Zik7Ci0gICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQtPnNldFN0cm9rZUNvbG9yKGMyKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC0+c2V0U3Ryb2tlQ29sb3IoYzIsIG1fc3R5bGUtPmNvbG9yU3BhY2UoKSk7CiAgICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhoYWxmVGhpY2tuZXNzID4gMiA/
IGhhbGZUaGlja25lc3MgLSAxIDogaGFsZlRoaWNrbmVzcyk7CiAgICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQtPnN0cm9rZUFyYyhJbnRSZWN0KHggKyBzaGlmdEZvcklubmVyLCB5ICsgc2hpZnRG
b3JJbm5lciwgKHJhZGl1cy53aWR0aCgpIC0gc2hpZnRGb3JJbm5lcikgKiAyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJhZGl1cy5oZWlnaHQoKSAtIHNoaWZ0Rm9y
SW5uZXIpICogMiksIGFuZ2xlU3RhcnQsIGFuZ2xlU3Bhbik7CkBAIC05NzEsNyArOTcxLDcgQEAg
dm9pZCBSZW5kZXJPYmplY3Q6OmRyYXdBcmNGb3JCb3hTaWRlKEdyYQogICAgICAgICAgICAgICAg
IGMgPSBjLmRhcmsoKTsKICAgICAgICAgY2FzZSBTT0xJRDoKICAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwotICAgICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5zZXRTdHJva2VDb2xvcihjKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC0+c2V0U3Ryb2tlQ29sb3IoYywgbV9zdHlsZS0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNrbmVzcyk7CiAgICAgICAg
ICAgICBncmFwaGljc0NvbnRleHQtPnN0cm9rZUFyYyhJbnRSZWN0KHgsIHksIHJhZGl1cy53aWR0
aCgpICogMiwgcmFkaXVzLmhlaWdodCgpICogMiksIGFuZ2xlU3RhcnQsIGFuZ2xlU3Bhbik7CiAg
ICAgICAgICAgICBicmVhazsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2Vk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJ
KHJldmlzaW9uIDUwNjcwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBSZW5kZXJSZXBsYWNlZDo6
cGFpbnQoUGFpbnRJbmZvJiBwYQogICAgIGlmIChkcmF3U2VsZWN0aW9uVGludCkgewogICAgICAg
ICBJbnRSZWN0IHNlbGVjdGlvblBhaW50aW5nUmVjdCA9IGxvY2FsU2VsZWN0aW9uUmVjdCgpOwog
ICAgICAgICBzZWxlY3Rpb25QYWludGluZ1JlY3QubW92ZSh0eCwgdHkpOwotICAgICAgICBwYWlu
dEluZm8uY29udGV4dC0+ZmlsbFJlY3Qoc2VsZWN0aW9uUGFpbnRpbmdSZWN0LCBzZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5maWxsUmVjdChz
ZWxlY3Rpb25QYWludGluZ1JlY3QsIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpLCBzdHlsZSgp
LT5jb2xvclNwYWNlKCkpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU2Nyb2xsYmFyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNjcm9sbGJhclRoZW1lLmNwcAkocmV2aXNpb24gNTA2NzApCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsx
MDksNyBAQCBJbnRSZWN0IFJlbmRlclNjcm9sbGJhclRoZW1lOjpjb25zdHJhaW5UCiB2b2lkIFJl
bmRlclNjcm9sbGJhclRoZW1lOjpwYWludFNjcm9sbENvcm5lcihTY3JvbGxWaWV3KiwgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KQogewogICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQuCi0gICAgY29udGV4dC0+ZmlsbFJlY3QoY29ybmVyUmVjdCwgQ29s
b3I6OndoaXRlKTsKKyAgICBjb250ZXh0LT5maWxsUmVjdChjb3JuZXJSZWN0LCBDb2xvcjo6d2hp
dGUsIERldmljZUNvbG9yU3BhY2UpOwogfQogCiB2b2lkIFJlbmRlclNjcm9sbGJhclRoZW1lOjpw
YWludFNjcm9sbGJhckJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxi
YXIqIHNjcm9sbGJhcikKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZp
c2lvbiA1MDY3MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MTMsNyArOTEzLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRN
ZW51TGlzdEJ1dHRvbgogICAgIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAKLSAg
ICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9yKG8tPnN0eWxlKCktPmNvbG9yKCkpOwor
ICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3Ioby0+c3R5bGUoKS0+Y29sb3IoKSwg
by0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKICAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ry
b2tlU3R5bGUoTm9TdHJva2UpOwogCiAgICAgRmxvYXRQb2ludCBhcnJvdzFbM107CkBAIC05NDIs
MTEgKzk0MiwxMSBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uCiAg
ICAgLy8gRHJhdyB0aGUgc2VwYXJhdG9yIHRvIHRoZSBsZWZ0IG9mIHRoZSBhcnJvd3MKICAgICBw
YWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOyAvLyBEZWxpYmVyYXRl
bHkgaWdub3JlcyB6b29tIHNpbmNlIGl0IGxvb2tzIG5pY2VyIGlmIGl0IHN0YXlzIHRoaW4uCiAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKLSAgICBw
YWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IobGVmdFNlcGFyYXRvckNvbG9yKTsKKyAg
ICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IobGVmdFNlcGFyYXRvckNvbG9yLCBE
ZXZpY2VDb2xvclNwYWNlKTsKICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9p
bnQobGVmdEVkZ2VPZlNlcGFyYXRvciwgYm91bmRzLnkoKSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3IsIGJvdW5kcy5ib3R0b20o
KSkpOwogCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHJpZ2h0U2VwYXJh
dG9yQ29sb3IpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihyaWdodFNl
cGFyYXRvckNvbG9yLCBEZXZpY2VDb2xvclNwYWNlKTsKICAgICBwYWludEluZm8uY29udGV4dC0+
ZHJhd0xpbmUoSW50UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciArIHNlcGFyYXRvclNwYWNlLCBi
b3VuZHMueSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQobGVm
dEVkZ2VPZlNlcGFyYXRvciArIHNlcGFyYXRvclNwYWNlLCBib3VuZHMuYm90dG9tKCkpKTsKIApJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDUwNjcwKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw3ICsxOTgs
NyBAQCB2b2lkIFJlbmRlclZpZXc6OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpCiAgICAgICAgIGlm
IChiYXNlQ29sb3IuYWxwaGEoKSA+IDApIHsKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5zYXZlKCk7CiAgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKENvbXBvc2l0ZUNvcHkpOwotICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZp
bGxSZWN0KHBhaW50SW5mby5yZWN0LCBiYXNlQ29sb3IpOworICAgICAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPmZpbGxSZWN0KHBhaW50SW5mby5yZWN0LCBiYXNlQ29sb3IsIHN0eWxlKCktPmNv
bG9yU3BhY2UoKSk7CiAgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwog
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGVhclJlY3Qo
cGFpbnRJbmZvLnJlY3QpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCShyZXZp
c2lvbiA1MDY3MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3Niw3ICsyNzYsNyBAQCB2b2lkIFJlbmRlcldpZGdldDo6cGFpbnQoUGFp
bnRJbmZvJiBwYWluCiAgICAgLy8gUGFpbnQgYSBwYXJ0aWFsbHkgdHJhbnNwYXJlbnQgd2FzaCBv
dmVyIHNlbGVjdGVkIHdpZGdldHMuCiAgICAgaWYgKGlzU2VsZWN0ZWQoKSAmJiAhZG9jdW1lbnQo
KS0+cHJpbnRpbmcoKSkgewogICAgICAgICAvLyBGSVhNRTogc2VsZWN0aW9uUmVjdCgpIGlzIGlu
IGFic29sdXRlLCBub3QgcGFpbnRpbmcgY29vcmRpbmF0ZXMuCi0gICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT5maWxsUmVjdChzZWxlY3Rpb25SZWN0KCksIHNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KHNlbGVjdGlvblJlY3Qo
KSwgc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAg
ICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkocmV2
aXNpb24gNTA2NzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDc1LDcgKzQ3NSw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6
cGFpbnRTZWxlY3Rpb24oaW4KICAgICBpbnQgYWRqdXN0ID0gc3RhcnRQb3MgPj0gYm94U3RhcnRP
ZmZzZXQgPyBib3hTdGFydE9mZnNldCA6IDA7CiAgICAgcC0+ZHJhd0hpZ2hsaWdodEZvclRleHQo
Zm9udCwgc3ZnVGV4dFJ1bkZvcklubGluZVRleHRCb3godGV4dFJlbmRlcmVyKCktPnRleHQoKS0+
Y2hhcmFjdGVycygpICsgc3RhcnQoKSArIGJveFN0YXJ0T2Zmc2V0LCBsZW5ndGgsIHN0eWxlLCB0
aGlzLCBzdmdDaGFyLngpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KChp
bnQpIHN2Z0NoYXIueCwgKGludCkgc3ZnQ2hhci55IC0gZm9udC5hc2NlbnQoKSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9udC5hc2NlbnQoKSArIGZvbnQuZGVzY2VudCgpLCBjb2xv
ciwgc3RhcnRQb3MgLSBhZGp1c3QsIGVuZFBvcyAtIGFkanVzdCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9udC5hc2NlbnQoKSArIGZvbnQuZGVzY2VudCgpLCBjb2xvciwgc3R5bGUt
PmNvbG9yU3BhY2UoKSwgc3RhcnRQb3MgLSBhZGp1c3QsIGVuZFBvcyAtIGFkanVzdCk7CiAKICAg
ICBwLT5yZXN0b3JlKCk7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmgJKHJldmlzaW9uIDUwNjcwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkNhY2hlZElt
YWdlLmgiCiAjaW5jbHVkZSAiQ29sbGFwc2VkQm9yZGVyVmFsdWUuaCIKICNpbmNsdWRlICJDb2xv
ci5oIgorI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKICNpbmNsdWRlICJDb250ZW50RGF0YS5oIgog
I2luY2x1ZGUgIkNvdW50ZXJEaXJlY3RpdmVzLmgiCiAjaW5jbHVkZSAiQ3Vyc29yTGlzdC5oIgpA
QCAtNTk5LDYgKzYwMCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBDb2xvciYgdGV4dFN0cm9rZUNv
bG9yKCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRTdHJva2VDb2xvcjsg
fQogICAgIGZsb2F0IHRleHRTdHJva2VXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0
ZWREYXRhLT50ZXh0U3Ryb2tlV2lkdGg7IH0KICAgICBjb25zdCBDb2xvciYgdGV4dEZpbGxDb2xv
cigpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0RmlsbENvbG9yOyB9Cisg
ICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29s
b3JTcGFjZT4ocmFyZUluaGVyaXRlZERhdGEtPmNvbG9yU3BhY2UpOyB9CiAgICAgZmxvYXQgb3Bh
Y2l0eSgpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5vcGFjaXR5OyB9CiAg
ICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENv
bnRyb2xQYXJ0PihyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9hcHBlYXJhbmNlKTsgfQogICAgIEVC
b3hBbGlnbm1lbnQgYm94QWxpZ24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxFQm94QWxp
Z25tZW50PihyYXJlTm9uSW5oZXJpdGVkRGF0YS0+ZmxleGlibGVCb3gtPmFsaWduKTsgfQpAQCAt
OTMwLDYgKzkzMiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRleHRTdHJva2VDb2xvcihjb25z
dCBDb2xvciYgYykgeyBTRVRfVkFSKHJhcmVJbmhlcml0ZWREYXRhLCB0ZXh0U3Ryb2tlQ29sb3Is
IGMpIH0KICAgICB2b2lkIHNldFRleHRTdHJva2VXaWR0aChmbG9hdCB3KSB7IFNFVF9WQVIocmFy
ZUluaGVyaXRlZERhdGEsIHRleHRTdHJva2VXaWR0aCwgdykgfQogICAgIHZvaWQgc2V0VGV4dEZp
bGxDb2xvcihjb25zdCBDb2xvciYgYykgeyBTRVRfVkFSKHJhcmVJbmhlcml0ZWREYXRhLCB0ZXh0
RmlsbENvbG9yLCBjKSB9CisgICAgdm9pZCBzZXRDb2xvclNwYWNlKENvbG9yU3BhY2Ugc3BhY2Up
IHsgU0VUX1ZBUihyYXJlSW5oZXJpdGVkRGF0YSwgY29sb3JTcGFjZSwgc3BhY2UpIH0KICAgICB2
b2lkIHNldE9wYWNpdHkoZmxvYXQgZikgeyBTRVRfVkFSKHJhcmVOb25Jbmhlcml0ZWREYXRhLCBv
cGFjaXR5LCBmKTsgfQogICAgIHZvaWQgc2V0QXBwZWFyYW5jZShDb250cm9sUGFydCBhKSB7IFNF
VF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEsIG1fYXBwZWFyYW5jZSwgYSk7IH0KICAgICB2b2lk
IHNldEJveEFsaWduKEVCb3hBbGlnbm1lbnQgYSkgeyBTRVRfVkFSKHJhcmVOb25Jbmhlcml0ZWRE
YXRhLmFjY2VzcygpLT5mbGV4aWJsZUJveCwgYWxpZ24sIGEpOyB9CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcAkocmV2aXNp
b24gNTA2NzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWRE
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBTdHlsZVJhcmVJbmhlcml0
ZWREYXRhOjpTdHlsZVJhcmVJbmhlcml0CiAgICAgLCB0ZXh0U2l6ZUFkanVzdChSZW5kZXJTdHls
ZTo6aW5pdGlhbFRleHRTaXplQWRqdXN0KCkpCiAgICAgLCByZXNpemUoUmVuZGVyU3R5bGU6Omlu
aXRpYWxSZXNpemUoKSkKICAgICAsIHVzZXJTZWxlY3QoUmVuZGVyU3R5bGU6OmluaXRpYWxVc2Vy
U2VsZWN0KCkpCisgICAgLCBjb2xvclNwYWNlKERldmljZUNvbG9yU3BhY2UpCiB7CiB9CiAKQEAg
LTU4LDYgKzU5LDcgQEAgU3R5bGVSYXJlSW5oZXJpdGVkRGF0YTo6U3R5bGVSYXJlSW5oZXJpdAog
ICAgICwgdGV4dFNpemVBZGp1c3Qoby50ZXh0U2l6ZUFkanVzdCkKICAgICAsIHJlc2l6ZShvLnJl
c2l6ZSkKICAgICAsIHVzZXJTZWxlY3Qoby51c2VyU2VsZWN0KQorICAgICwgY29sb3JTcGFjZShv
LmNvbG9yU3BhY2UpCiB7CiB9CiAKQEAgLTgxLDcgKzgzLDggQEAgYm9vbCBTdHlsZVJhcmVJbmhl
cml0ZWREYXRhOjpvcGVyYXRvcj09KAogICAgICAgICAmJiBraHRtbExpbmVCcmVhayA9PSBvLmto
dG1sTGluZUJyZWFrCiAgICAgICAgICYmIHRleHRTaXplQWRqdXN0ID09IG8udGV4dFNpemVBZGp1
c3QKICAgICAgICAgJiYgcmVzaXplID09IG8ucmVzaXplCi0gICAgICAgICYmIHVzZXJTZWxlY3Qg
PT0gby51c2VyU2VsZWN0OworICAgICAgICAmJiB1c2VyU2VsZWN0ID09IG8udXNlclNlbGVjdAor
ICAgICAgICAmJiBjb2xvclNwYWNlID09IG8uY29sb3JTcGFjZTsKIH0KIAogYm9vbCBTdHlsZVJh
cmVJbmhlcml0ZWREYXRhOjpzaGFkb3dEYXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVJbmhl
cml0ZWREYXRhJiBvKSBjb25zdApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVS
YXJlSW5oZXJpdGVkRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlUmFyZUluaGVyaXRlZERhdGEuaAkocmV2aXNpb24gNTA2NzApCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY1LDYgKzY1LDcgQEAgcHVibGljOgogICAgIGJvb2wgdGV4dFNpemVBZGp1c3QgOiAxOyAvLyBB
biBBcHBsZSBleHRlbnNpb24uCiAgICAgdW5zaWduZWQgcmVzaXplIDogMjsgLy8gRVJlc2l6ZQog
ICAgIHVuc2lnbmVkIHVzZXJTZWxlY3QgOiAxOyAgLy8gRVVzZXJTZWxlY3QKKyAgICB1bnNpZ25l
ZCBjb2xvclNwYWNlIDogMTsgLy8gQ29sb3JTcGFjZQogICAgIAogcHJpdmF0ZToKICAgICBTdHls
ZVJhcmVJbmhlcml0ZWREYXRhKCk7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWlu
dFNlcnZlckdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdQYWludFNlcnZlckdyYWRpZW50LmNwcAkocmV2aXNpb24gNTA2NzApCisrKyBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjMzLDcgKzIzMyw3IEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXAoR3JhcGgK
ICAgICAgICAgLy8gbGluZXMgb3IgcmVjdGFuZ2xlcyB3aXRob3V0IHdpZHRoIG9yIGhlaWdodC4K
ICAgICAgICAgaWYgKGJib3gud2lkdGgoKSA9PSAwIHx8IGJib3guaGVpZ2h0KCkgPT0gMCkgewog
ICAgICAgICAgICAgQ29sb3IgY29sb3IoMCwgMCwgMCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5z
ZXRTdHJva2VDb2xvcihjb2xvcik7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xv
cihjb2xvciwgb2JqZWN0LT5zdHlsZSgpLT5jb2xvclNwYWNlKCkpOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgbWF0cml4LnRyYW5zbGF0ZShiYm94LngoKSwg
YmJveC55KCkpOwpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJTb2xp
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJT
b2xpZC5jcHAJKHJldmlzaW9uIDUwNjcwKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFp
bnRTZXJ2ZXJTb2xpZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDEwICs2NCwxMSBAQCBib29s
IFNWR1BhaW50U2VydmVyU29saWQ6OnNldHVwKEdyYXBoaWNzCiB7CiAgICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gb2JqZWN0ID8gb2JqZWN0LT5zdHlsZSgpIDogMDsKICAgICBjb25zdCBTVkdSZW5k
ZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSA/IHN0eWxlLT5zdmdTdHlsZSgpIDogMDsKKyAgICBD
b2xvclNwYWNlIGNvbG9yU3BhY2UgPSBzdHlsZSA/IHN0eWxlLT5jb2xvclNwYWNlKCkgOiBEZXZp
Y2VDb2xvclNwYWNlOwogCiAgICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAm
JiAoIXN0eWxlIHx8IHN2Z1N0eWxlLT5oYXNGaWxsKCkpKSB7CiAgICAgICAgIGNvbnRleHQtPnNl
dEFscGhhKHN0eWxlID8gc3ZnU3R5bGUtPmZpbGxPcGFjaXR5KCkgOiAxKTsKLSAgICAgICAgY29u
dGV4dC0+c2V0RmlsbENvbG9yKGNvbG9yKCkucmdiKCkpOworICAgICAgICBjb250ZXh0LT5zZXRG
aWxsQ29sb3IoY29sb3IoKS5yZ2IoKSwgY29sb3JTcGFjZSk7CiAgICAgICAgIGNvbnRleHQtPnNl
dEZpbGxSdWxlKHN0eWxlID8gc3ZnU3R5bGUtPmZpbGxSdWxlKCkgOiBSVUxFX05PTlpFUk8pOwog
CiAgICAgICAgIGlmIChpc1BhaW50aW5nVGV4dCkKQEAgLTc2LDcgKzc3LDcgQEAgYm9vbCBTVkdQ
YWludFNlcnZlclNvbGlkOjpzZXR1cChHcmFwaGljcwogCiAgICAgaWYgKCh0eXBlICYgQXBwbHlU
b1N0cm9rZVRhcmdldFR5cGUpICYmICghc3R5bGUgfHwgc3ZnU3R5bGUtPmhhc1N0cm9rZSgpKSkg
ewogICAgICAgICBjb250ZXh0LT5zZXRBbHBoYShzdHlsZSA/IHN2Z1N0eWxlLT5zdHJva2VPcGFj
aXR5KCkgOiAxKTsKLSAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoY29sb3IoKS5yZ2Io
KSk7CisgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGNvbG9yKCkucmdiKCksIGNvbG9y
U3BhY2UpOwogCiAgICAgICAgIGlmIChzdHlsZSkKICAgICAgICAgICAgIGFwcGx5U3Ryb2tlU3R5
bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUsIG9iamVjdCk7CkluZGV4OiBXZWJLaXQvbWFjL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNTA3
MDcpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3
IEBACisyMDA5LTExLTA5ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTbWFsbCBXZWJLaXQgcGFy
dCBvZjoKKyAgICAgICAgRml4IGZvciA8cmRhcjovL3Byb2JsZW0vNzA1OTcxMD4gCisgICAgICAg
IC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTMxMTk2IEltcGxlbWVudCAtd2Via2l0LQorICAgICAgICBjb2xvci1jb3Jy
ZWN0aW9uIGZvciBDU1MgY29sb3JzCisKKyAgICAgICAgKiBNaXNjL1dlYktpdE5TU3RyaW5nRXh0
cmFzLm1tOgorICAgICAgICAoLVtOU1N0cmluZyBfd2ViX2RyYXdBdFBvaW50OmZvbnQ6dGV4dENv
bG9yOl0pOiBzZXRGaWxsQ29sb3Igbm93IAorICAgICAgICByZXF1aXJlcyBjYWxsZXJzIHRvIHBh
c3MgYSBDb2xvclNwYWNlLgorCiAyMDA5LTExLTA5ICBNYXJrIE1lbnRvdmFpICA8bWFya0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IFdl
YktpdC9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0JKHJldmlzaW9uIDUwNjcwKQorKysg
V2ViS2l0L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC05Myw3ICs5Myw3IEBAIHN0YXRpYyBCT09MIGNhblVzZUZhc3RSZW5kZXJlcihjb25zdCBVbmkK
ICAgICAgICAgQ0dGbG9hdCBibHVlOwogICAgICAgICBDR0Zsb2F0IGFscGhhOwogICAgICAgICBb
W3RleHRDb2xvciBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNl
XSBnZXRSZWQ6JnJlZCBncmVlbjomZ3JlZW4gYmx1ZTomYmx1ZSBhbHBoYTomYWxwaGFdOwotICAg
ICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKG1ha2VSR0JBKHJlZCAqIDI1NSwgZ3Jl
ZW4gKiAyNTUsIGJsdWUgKiAyNTUsIGFscGhhICogMjU1KSk7CisgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC5zZXRGaWxsQ29sb3IobWFrZVJHQkEocmVkICogMjU1LCBncmVlbiAqIDI1NSwgYmx1ZSAq
IDI1NSwgYWxwaGEgKiAyNTUpLCBEZXZpY2VDb2xvclNwYWNlKTsKIAogICAgICAgICB3ZWJDb3Jl
Rm9udC5kcmF3VGV4dCgmZ3JhcGhpY3NDb250ZXh0LCBydW4sIEZsb2F0UG9pbnQocG9pbnQueCwg
KGZsaXBwZWQgPyBwb2ludC55IDogKC0xICogcG9pbnQueSkpKSk7CiAKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDUwNzA2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsNDAgQEAKKzIwMDktMTEtMDkgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzIGZv
ciA8cmRhcjovL3Byb2JsZW0vNzA1OTcxMD4gCisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxMTk2IElt
cGxlbWVudCAtd2Via2l0LQorICAgICAgICBjb2xvci1jb3JyZWN0aW9uIGZvciBDU1MgY29sb3Jz
CisKKyAgICAgICAgTmV3IHRlc3RzLgorICAgICAgICAqIGZhc3QvY3NzL2NvbG9yLWNvcnJlY3Rp
b24tYmFja2dyb3VuZHMtYW5kLXRleHQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mv
Y29sb3ItY29ycmVjdGlvbi1vbi1iYWNrZ3JvdW5kcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLW9uLXRleHQuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nz
cy9wYXJzaW5nLWNvbG9yLWNvcnJlY3Rpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2Nzcy9wYXJzaW5nLWNvbG9yLWNvcnJlY3Rpb24uaHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9jc3MvcmVzb3VyY2VzL3BhcnNpbmctY29sb3ItY29ycmVjdGlvbi5qczogQWRkZWQu
CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKiBmYXN0L2Nzcy9yZXNvdXJjZXMvcHVycGxlLXNy
Z2IucG5nOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29y
cmVjdGlvbi1iYWNrZ3JvdW5kcy1hbmQtdGV4dC1leHBlY3RlZC5jaGVja3N1bTogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tYmFja2dyb3Vu
ZHMtYW5kLXRleHQtZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
ZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1iYWNrZ3JvdW5kcy1hbmQtdGV4dC1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0
aW9uLWV4cGVjdGVkLmNoZWNrc3VtOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFz
dC9jc3MvY29sb3ItY29ycmVjdGlvbi1leHBlY3RlZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tb24tYmFj
a2dyb3VuZHMtZXhwZWN0ZWQuY2hlY2tzdW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLW9uLWJhY2tncm91bmRzLWV4cGVjdGVkLnBuZzog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24t
b24tYmFja2dyb3VuZHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1vbi10ZXh0LWV4cGVjdGVkLmNoZWNrc3VtOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1v
bi10ZXh0LWV4cGVjdGVkLnBuZzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3Qv
Y3NzL2NvbG9yLWNvcnJlY3Rpb24tb24tdGV4dC1leHBlY3RlZC50eHQ6IEFkZGVkLgorCisgICAg
ICAgIE5ldyBhbmQgaW1wcm92ZWQgcmVzdWx0cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFz
dC9jc3MvZ2V0Q29tcHV0ZWRTdHlsZS9jb21wdXRlZC1zdHlsZS1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2dldENvbXB1dGVkU3R5bGUvY29tcHV0ZWQtc3R5
bGUtd2l0aG91dC1yZW5kZXJlci1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3ZnL2Nzcy9nZXRD
b21wdXRlZFN0eWxlLWJhc2ljLWV4cGVjdGVkLnR4dDoKKwogMjAwOS0xMS0wOSAgT2xpdmVyIEh1
bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdhdmluIEJhcnJh
Y2xvdWdoLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1iYWNr
Z3JvdW5kcy1hbmQtdGV4dC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3Nz
L2NvbG9yLWNvcnJlY3Rpb24tYmFja2dyb3VuZHMtYW5kLXRleHQuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tYmFja2dyb3VuZHMtYW5k
LXRleHQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorPGh0bWw+Cis8c3R5bGU+
CisgICAgLnRleHQgeworICAgICAgICBjb2xvcjpncmVlbjsKKyAgICAgICAgZm9udC1zaXplOjE1
MHB4OworICAgICAgICBmb250LXdlaWdodDpib2xkOworICAgIH0KKyAgICAKKyAgICAuY29udGFp
bmVyIHsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjpncmVlbjsgCisgICAgICAgIHdpZHRoOjIw
MHB4OyAKKyAgICAgICAgaGVpZ2h0OjIwMHB4OworICAgIH0KKzwvc3R5bGU+Cis8Ym9keT4KKwor
PHA+VGhpcyBjb250YWluZXIgaGFzIG5vIGNvbG9yIGNvcnJlY3Rpb24sIGFuZCBuZWl0aGVyIGRv
ZXMgdGhlIHRleHQgaW5zaWRlLCBzbyBpdCB3aWxsIG5vdCBiZSB2aXNpYmxlIHNpbmNlIGJvdGgg
YXJlIGdyZWVuIGFuZCB1bmNvcnJlY3RlZC48L3A+Cis8ZGl2IGNsYXNzPSJjb250YWluZXIiPgor
ICAgIDxzcGFuIGNsYXNzPSJ0ZXh0Ij5HPC9zcGFuPgorPC9kaXY+CisKKzxwPlRoaXMgY29udGFp
bmVyIGhhcyBzUkdCIGNvbG9yIGNvcnJlY3Rpb24gc3BlY2lmaWVkLCBhbmQgc28gZG9lcyB0aGUg
dGV4dCBpbnNpZGUsIHNvIHRoZSB0ZXh0IHdpbGwgbm90IGJlIHZpc2libGUgc2luY2UgYm90aCBh
cmUgZ3JlZW4gYW5kIGNvcnJlY3RlZC48L3A+Cis8ZGl2IGNsYXNzPSJjb250YWluZXIiIHN0eWxl
PSItd2Via2l0LWNvbG9yLWNvcnJlY3Rpb246c1JHQjsiPgorICAgIDxzcGFuIGNsYXNzPSJ0ZXh0
IiBzdHlsZT0iLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uOnNSR0I7Ij5HPC9zcGFuPgorPC9kaXY+
CisKKzxwPlRoaXMgY29udGFpbmVyIGhhcyBzUkdCIGNvbG9yIGNvcnJlY3Rpb24gc3BlY2lmaWVk
LiBUaGUgdGV4dCBpbnNpZGUgZG9lcyBub3QgaGF2ZSB0aGUgcHJvcGVydHkgc3BlY2lmaWVkLCBi
dXQgdGhlIHRleHQgaW5oZXJpdHMgdGhlIGNvbnRhaW5lcidzIHN0eWxlLCBzbyB0aGUgdGV4dCB3
aWxsIG5vdCBiZSB2aXNpYmxlIHNpbmNlIGJvdGggYXJlIGdyZWVuIGFuZCBjb3JyZWN0ZWQuPC9w
PgorPGRpdiBjbGFzcz0iY29udGFpbmVyIiBzdHlsZT0iLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9u
OnNSR0I7Ij4KKyAgICA8c3BhbiBjbGFzcz0idGV4dCI+Rzwvc3Bhbj4KKzwvZGl2PgorCis8cD5U
aGlzIGNvbnRhaW5lciBoYXMgZGVmYXVsdCBjb2xvci1jb3JyZWN0aW9uIHNwZWNpZmllZCwgYW5k
IHRoZSB0ZXh0IGhhcyBzUkdCIGNvbG9yIGNvcnJlY3Rpb24gc3BlY2lmaWVkLiBUaGlzIHRleHQg
aXMgdmlzaWJsZSBldmVuIHRob3VnaCBib3RoIGFyZSBncmVlbiBzaW5jZSB0aGUgdGV4dCBpcyBj
b3JyZWN0ZWQgYW5kIHRoZSBjb250YWluZXIgaXMgbm90LjwvcD4KKzxkaXYgY2xhc3M9ImNvbnRh
aW5lciIgc3R5bGU9Ii13ZWJraXQtY29sb3ItY29ycmVjdGlvbjpkZWZhdWx0OyI+CisgICAgPHNw
YW4gY2xhc3M9InRleHQiIHN0eWxlPSItd2Via2l0LWNvbG9yLWNvcnJlY3Rpb246c1JHQjsiPkc8
L3NwYW4+Cis8L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9jc3MvY29sb3ItY29ycmVjdGlvbi1vbi1iYWNrZ3JvdW5kcy5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tb24tYmFja2dyb3VuZHMuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24t
b24tYmFja2dyb3VuZHMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorPGh0bWw+
Cis8Ym9keT4KKworPHA+VGhlc2Ugc2hvdWxkIG1hdGNoOjwvcD4KKzxkaXYgc3R5bGU9ImJhY2tn
cm91bmQtY29sb3I6IzU2MDA2Mzsgd2lkdGg6MTAwcHg7IGhlaWdodDoxMDBweDsgLXdlYmtpdC1j
b2xvci1jb3JyZWN0aW9uOnNSR0I7IGZsb2F0OmxlZnQ7Ij48L2Rpdj4KKzxpbWcgc3JjPSJyZXNv
dXJjZXMvcHVycGxlLXNyZ2IucG5nIi8+CisKKzxici8+Cis8cD5UaGVzZSBzaG91bGQgbm90IG1h
dGNoIChhdCB0aGlzIHRpbWUpOjwvcD4KKzxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzU2
MDA2Mzsgd2lkdGg6MTAwcHg7IGhlaWdodDoxMDBweDsgLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9u
OmRlZmF1bHQ7IGZsb2F0OmxlZnQ7Ij48L2Rpdj4KKzxpbWcgc3JjPSJyZXNvdXJjZXMvcHVycGxl
LXNyZ2IucG5nIi8+CisKKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
Y3NzL2NvbG9yLWNvcnJlY3Rpb24tb24tdGV4dC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tb24tdGV4dC5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1vbi10ZXh0Lmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTkgQEAKKzxodG1sPgorPHN0eWxlPgorICAgIC50ZXh0IHsK
KyAgICAgICAgY29sb3I6Z3JlZW47CisgICAgICAgIGZvbnQtc2l6ZToxNTBweDsKKyAgICAgICAg
Zm9udC13ZWlnaHQ6Ym9sZDsKKyAgICB9Cis8L3N0eWxlPgorPGJvZHk+CisKKyAgICA8cD5UaGUg
ZGlzdGluY3Rpb24gYmVsb3cgaXMgc3VidGxlLCBidXQgdGhlIG1pZGRsZSAiSCIgaXMgY29sb3It
Y29ycmVjdGVkLCBhbmQgdGhlIGZpcnN0IGFuZCBsYXN0IGFyZSBub3QuIAorICAgIDwvcD4KKwor
ICAgIDxzcGFuIGNsYXNzPSJ0ZXh0Ij5IPC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJ0ZXh0IiBz
dHlsZT0iLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uOnNSR0I7Ij5IPC9zcGFuPgorICAgIDxzcGFu
IGNsYXNzPSJ0ZXh0Ij5IPC9zcGFuPgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEzIEBACis8aHRtbD4KKzxzdHlsZT4KKy5wdXJwbGUgeworCWJvcmRlcjogc29saWQg
MjBweCAjNTYwMDYzOworfQorPC9zdHlsZT4KKzxib2R5PgorPHA+VGhpcyB0ZXN0IGRlbW9uc3Ry
YXRlcyAtd2Via2l0LWNvbG9yLWNvcnJlY3Rpb24uIEJlbG93IGFyZSAzIGltYWdlcyB3aXRoIDIw
IHBpeGVsIGJvcmRlcnMuIFRoZSBpbWFnZXMgYXJlIGFsbCB0aGUgc2FtZSAtLSBwdXJwbGUgd2l0
aCBhbiBzUkdCIGNvbG9yIHByb2ZpbGUuIFRoZSBib3JkZXIgaXMgdGhlIHNhbWUgQ1NTIGNvbG9y
IGZvciBhbGwgdGhyZWUgaW1hZ2VzLiBUaGUgZmlyc3QgaW1hZ2UgaGFzIG5vIHNwZWNpYWwgQ1NT
LiBUaGUgc2Vjb25kIGhhcyAtd2Via2l0LWNvbG9yLWNvcnJlY3Rpb24gc2V0IHRvIGRlZmF1bHQs
IHNvIGl0IG1hdGNoZXMgdGhlIGZpcnN0IGltYWdlLiBBbmQgdGhlIHRoaXJkIGhhcyAtd2Via2l0
LWNvbG9yLWNvcnJlY3Rpb24gc2V0IHRvIHNSR0IuIFRoaXMgY29sb3ItY29ycmVjdHMgdGhlIHB1
cnBsZSBib3JkZXIgZnJvbSB0aGUgc1JHQiBjb2xvciBzcGFjZSwgYW5kIHRoZSByZXN1bHQgaXMg
dGhhdCB0aGUgYm9yZGVyIGFuZCB0aGUgaW1hZ2UgbWF0Y2guPC9wPgorPGltZyBzcmM9InJlc291
cmNlcy9wdXJwbGUtc3JnYi5wbmciIGNsYXNzPSJwdXJwbGUiIC8+Cis8aW1nIHNyYz0icmVzb3Vy
Y2VzL3B1cnBsZS1zcmdiLnBuZyIgY2xhc3M9InB1cnBsZSIgc3R5bGU9Ii13ZWJraXQtY29sb3It
Y29ycmVjdGlvbjogZGVmYXVsdDsiLz4KKzxpbWcgc3JjPSJyZXNvdXJjZXMvcHVycGxlLXNyZ2Iu
cG5nIiBjbGFzcz0icHVycGxlIiBzdHlsZT0iLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uOiBzUkdC
OyIvPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvcGFyc2lu
Zy1jb2xvci1jb3JyZWN0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2Nzcy9wYXJzaW5nLWNvbG9yLWNvcnJlY3Rpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvcGFyc2luZy1jb2xvci1jb3JyZWN0aW9uLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorVGhpcyB0ZXN0cyBjaGVj
a3MgdGhhdCBhbGwgb2YgdGhlIGlucHV0IHZhbHVlcyBmb3IgLXdlYmtpdC1jb2xvci1jb3JyZWN0
aW9uIHBhcnNlIGNvcnJlY3RseS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BB
U1MgdGVzdCgiLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uOiBkZWZhdWx0OyIpIGlzICJkZWZhdWx0
IgorUEFTUyB0ZXN0KCItd2Via2l0LWNvbG9yLWNvcnJlY3Rpb246IHNSR0I7IikgaXMgInNyZ2Ii
CitQQVNTIHRlc3QoIi13ZWJraXQtY29sb3ItY29ycmVjdGlvbjogc3JnYjsiKSBpcyAic3JnYiIK
K1BBU1MgdGVzdCgiLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uOiBhcHBsZTsiKSBpcyBudWxsCitQ
QVNTIHRlc3QoIi13ZWJraXQtY29sb3ItY29ycmVjdGlvbjogMTU7IikgaXMgbnVsbAorUEFTUyB0
ZXN0KCItd2Via2l0LWNvbG9yLWNvcnJlY3Rpb246IGF1dG87IikgaXMgbnVsbAorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvY3NzL3BhcnNpbmctY29sb3ItY29ycmVjdGlvbi5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvY3NzL3BhcnNpbmctY29sb3ItY29ycmVjdGlvbi5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvcGFyc2luZy1jb2xvci1jb3JyZWN0aW9u
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGUgdHlwZT0i
dGV4dC9jc3MiPjwvc3R5bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2Ny
aXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvcGFyc2luZy1jb2xvci1jb3JyZWN0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY3NzL3Jlc291cmNlcy9wYXJzaW5nLWNvbG9y
LWNvcnJlY3Rpb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvcmVzb3Vy
Y2VzL3BhcnNpbmctY29sb3ItY29ycmVjdGlvbi5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3QvY3NzL3Jlc291cmNlcy9wYXJzaW5nLWNvbG9yLWNvcnJlY3Rpb24uanMJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjIgQEAKK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIGNoZWNrcyB0
aGF0IGFsbCBvZiB0aGUgaW5wdXQgdmFsdWVzIGZvciAtd2Via2l0LWNvbG9yLWNvcnJlY3Rpb24g
cGFyc2UgY29ycmVjdGx5LiIpOworCitmdW5jdGlvbiB0ZXN0KHZhbHVlKQoreworICAgIHZhciBk
aXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICBkaXYuc2V0QXR0cmlidXRl
KCJzdHlsZSIsIHZhbHVlKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7Cisg
ICAgCisgICAgdmFyIHJlc3VsdCA9IGRpdi5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCItd2Via2l0
LWNvbG9yLWNvcnJlY3Rpb24iKTsKKyAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc2hvdWxkQmUoJ3Rlc3QoIi13ZWJraXQtY29sb3It
Y29ycmVjdGlvbjogZGVmYXVsdDsiKScsICciZGVmYXVsdCInKTsKK3Nob3VsZEJlKCd0ZXN0KCIt
d2Via2l0LWNvbG9yLWNvcnJlY3Rpb246IHNSR0I7IiknLCAnInNyZ2IiJyk7CitzaG91bGRCZSgn
dGVzdCgiLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uOiBzcmdiOyIpJywgJyJzcmdiIicpOworCitz
aG91bGRCZSgndGVzdCgiLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uOiBhcHBsZTsiKScsICdudWxs
Jyk7CitzaG91bGRCZSgndGVzdCgiLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uOiAxNTsiKScsICdu
dWxsJyk7CitzaG91bGRCZSgndGVzdCgiLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uOiBhdXRvOyIp
JywgJ251bGwnKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CkluZGV4OiBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1iYWNrZ3JvdW5k
cy1hbmQtdGV4dC1leHBlY3RlZC5jaGVja3N1bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1iYWNrZ3JvdW5kcy1hbmQtdGV4
dC1leHBlY3RlZC5jaGVja3N1bQkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLWJhY2tncm91bmRzLWFuZC10ZXh0LWV4cGVj
dGVkLmNoZWNrc3VtCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitjZTk0MDkzNTdiNzRmNTc4
MWY3ZTU3ZWU1NWUyMDU5YQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLWJhY2tncm91bmRz
LWFuZC10ZXh0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1iYWNrZ3JvdW5kcy1hbmQtdGV4dC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9j
c3MvY29sb3ItY29ycmVjdGlvbi1iYWNrZ3JvdW5kcy1hbmQtdGV4dC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgNzg1eDEwNzIK
KyAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDc4NXg2MDAKK2xheWVyIGF0ICgwLDApIHNpemUg
Nzg1eDEwNzIKKyAgUmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgNzg1eDEwNzIKKyAg
ICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc2OXgxMDU2CisgICAgICBSZW5kZXJC
bG9jayB7UH0gYXQgKDAsMCkgc2l6ZSA3Njl4MzYKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9
IGF0ICgwLDApIHNpemUgNzQ3eDM2CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGgg
NzQ3OiAiVGhpcyBjb250YWluZXIgaGFzIG5vIGNvbG9yIGNvcnJlY3Rpb24sIGFuZCBuZWl0aGVy
IGRvZXMgdGhlIHRleHQgaW5zaWRlLCBzbyBpdCB3aWxsIG5vdCBiZSB2aXNpYmxlIHNpbmNlIGJv
dGggYXJlIGdyZWVuIGFuZCIKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwxOCkgd2lkdGggNzg6
ICJ1bmNvcnJlY3RlZC4iCisgICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMCw1Mikgc2l6ZSAy
MDB4MjAwIFtiZ2NvbG9yPSMwMDgwMDBdCisgICAgICAgIFJlbmRlcklubGluZSB7U1BBTn0gYXQg
KDAsMCkgc2l6ZSAxMTd4MTc0IFtjb2xvcj0jMDA4MDAwXQorICAgICAgICAgIFJlbmRlclRleHQg
eyN0ZXh0fSBhdCAoMCwwKSBzaXplIDExN3gxNzQKKyAgICAgICAgICAgIHRleHQgcnVuIGF0ICgw
LDApIHdpZHRoIDExNzogIkciCisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBz
aXplIDB4MAorICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDI2OCkgc2l6ZSA3Njl4MzYKKyAg
ICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNzUxeDM2CisgICAgICAgICAg
dGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNzUxOiAiVGhpcyBjb250YWluZXIgaGFzIHNSR0IgY29s
b3IgY29ycmVjdGlvbiBzcGVjaWZpZWQsIGFuZCBzbyBkb2VzIHRoZSB0ZXh0IGluc2lkZSwgc28g
dGhlIHRleHQgd2lsbCBub3QgYmUgdmlzaWJsZSBzaW5jZSBib3RoIgorICAgICAgICAgIHRleHQg
cnVuIGF0ICgwLDE4KSB3aWR0aCAxNTE6ICJhcmUgZ3JlZW4gYW5kIGNvcnJlY3RlZC4iCisgICAg
ICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMCwzMjApIHNpemUgMjAweDIwMCBbYmdjb2xvcj0jMDA4
MDAwXQorICAgICAgICBSZW5kZXJJbmxpbmUge1NQQU59IGF0ICgwLDApIHNpemUgMTE3eDE3NCBb
Y29sb3I9IzAwODAwMF0KKyAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6
ZSAxMTd4MTc0CisgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAxMTc6ICJHIgor
ICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAweDAKKyAgICAgIFJlbmRl
ckJsb2NrIHtQfSBhdCAoMCw1MzYpIHNpemUgNzY5eDM2CisgICAgICAgIFJlbmRlclRleHQgeyN0
ZXh0fSBhdCAoMCwwKSBzaXplIDczMngzNgorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdp
ZHRoIDczMjogIlRoaXMgY29udGFpbmVyIGhhcyBzUkdCIGNvbG9yIGNvcnJlY3Rpb24gc3BlY2lm
aWVkLiBUaGUgdGV4dCBpbnNpZGUgZG9lcyBub3QgaGF2ZSB0aGUgcHJvcGVydHkgc3BlY2lmaWVk
LCBidXQgdGhlIHRleHQiCisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMTgpIHdpZHRoIDU4NDog
ImluaGVyaXRzIHRoZSBjb250YWluZXIncyBzdHlsZSwgc28gdGhlIHRleHQgd2lsbCBub3QgYmUg
dmlzaWJsZSBzaW5jZSBib3RoIGFyZSBncmVlbiBhbmQgY29ycmVjdGVkLiIKKyAgICAgIFJlbmRl
ckJsb2NrIHtESVZ9IGF0ICgwLDU4OCkgc2l6ZSAyMDB4MjAwIFtiZ2NvbG9yPSMwMDgwMDBdCisg
ICAgICAgIFJlbmRlcklubGluZSB7U1BBTn0gYXQgKDAsMCkgc2l6ZSAxMTd4MTc0IFtjb2xvcj0j
MDA4MDAwXQorICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDExN3gx
NzQKKyAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDExNzogIkciCisgICAgICAg
IFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4MAorICAgICAgUmVuZGVyQmxvY2sg
e1B9IGF0ICgwLDgwNCkgc2l6ZSA3Njl4MzYKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0
ICgwLDApIHNpemUgNzYxeDM2CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNzYx
OiAiVGhpcyBjb250YWluZXIgaGFzIGRlZmF1bHQgY29sb3ItY29ycmVjdGlvbiBzcGVjaWZpZWQs
IGFuZCB0aGUgdGV4dCBoYXMgc1JHQiBjb2xvciBjb3JyZWN0aW9uIHNwZWNpZmllZC4gVGhpcyB0
ZXh0IGlzIHZpc2libGUiCisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMTgpIHdpZHRoIDQ4ODog
ImV2ZW4gdGhvdWdoIGJvdGggYXJlIGdyZWVuIHNpbmNlIHRoZSB0ZXh0IGlzIGNvcnJlY3RlZCBh
bmQgdGhlIGNvbnRhaW5lciBpcyBub3QuIgorICAgICAgUmVuZGVyQmxvY2sge0RJVn0gYXQgKDAs
ODU2KSBzaXplIDIwMHgyMDAgW2JnY29sb3I9IzAwODAwMF0KKyAgICAgICAgUmVuZGVySW5saW5l
IHtTUEFOfSBhdCAoMCwwKSBzaXplIDExN3gxNzQgW2NvbG9yPSMwMDgwMDBdCisgICAgICAgICAg
UmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMTE3eDE3NAorICAgICAgICAgICAgdGV4
dCBydW4gYXQgKDAsMCkgd2lkdGggMTE3OiAiRyIKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9
IGF0ICgwLDApIHNpemUgMHgwCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9j
c3MvY29sb3ItY29ycmVjdGlvbi1leHBlY3RlZC5jaGVja3N1bQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1leHBlY3RlZC5j
aGVja3N1bQkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Nz
cy9jb2xvci1jb3JyZWN0aW9uLWV4cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxIEBACisxMWNmMDE2NzIwN2RlOTVlZWZiYTA4OTU5NzQ3MDQ2ZgpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xv
ci1jb3JyZWN0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlv
bi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMgQEAKK2xheWVyIGF0ICgw
LDApIHNpemUgODAweDYwMAorICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAorbGF5
ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBz
aXplIDgwMHg2MDAKKyAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHg1ODQK
KyAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoMCwwKSBzaXplIDc4NHg5MAorICAgICAgICBSZW5k
ZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA3Njl4OTAKKyAgICAgICAgICB0ZXh0IHJ1biBh
dCAoMCwwKSB3aWR0aCA3NjM6ICJUaGlzIHRlc3QgZGVtb25zdHJhdGVzIC13ZWJraXQtY29sb3It
Y29ycmVjdGlvbi4gQmVsb3cgYXJlIDMgaW1hZ2VzIHdpdGggMjAgcGl4ZWwgYm9yZGVycy4gVGhl
IGltYWdlcyBhcmUgYWxsIHRoZSBzYW1lIC0tIgorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDE4
KSB3aWR0aCA3NTU6ICJwdXJwbGUgd2l0aCBhbiBzUkdCIGNvbG9yIHByb2ZpbGUuIFRoZSBib3Jk
ZXIgaXMgdGhlIHNhbWUgQ1NTIGNvbG9yIGZvciBhbGwgdGhyZWUgaW1hZ2VzLiBUaGUgZmlyc3Qg
aW1hZ2UgaGFzIG5vIHNwZWNpYWwiCisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMzYpIHdpZHRo
IDc2OTogIkNTUy4gVGhlIHNlY29uZCBoYXMgLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uIHNldCB0
byBkZWZhdWx0LCBzbyBpdCBtYXRjaGVzIHRoZSBmaXJzdCBpbWFnZS4gQW5kIHRoZSB0aGlyZCBo
YXMgLXdlYmtpdC1jb2xvci0iCisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsNTQpIHdpZHRoIDc1
OTogImNvcnJlY3Rpb24gc2V0IHRvIHNSR0IuIFRoaXMgY29sb3ItY29ycmVjdHMgdGhlIHB1cnBs
ZSBib3JkZXIgZnJvbSB0aGUgc1JHQiBjb2xvciBzcGFjZSwgYW5kIHRoZSByZXN1bHQgaXMgdGhh
dCB0aGUgYm9yZGVyIgorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDcyKSB3aWR0aCAxMzQ6ICJh
bmQgdGhlIGltYWdlIG1hdGNoLiIKKyAgICAgIFJlbmRlckJsb2NrIChhbm9ueW1vdXMpIGF0ICgw
LDEwNikgc2l6ZSA3ODR4MTQ0CisgICAgICAgIFJlbmRlckltYWdlIHtJTUd9IGF0ICgwLDApIHNp
emUgMTQweDE0MCBbYm9yZGVyOiAoMjBweCBzb2xpZCAjNTYwMDYzKV0KKyAgICAgICAgUmVuZGVy
VGV4dCB7I3RleHR9IGF0ICgxNDAsMTI2KSBzaXplIDR4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBh
dCAoMTQwLDEyNikgd2lkdGggNDogIiAiCisgICAgICAgIFJlbmRlckltYWdlIHtJTUd9IGF0ICgx
NDQsMCkgc2l6ZSAxNDB4MTQwIFtib3JkZXI6ICgyMHB4IHNvbGlkICM1NjAwNjMpXQorICAgICAg
ICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDI4NCwxMjYpIHNpemUgNHgxOAorICAgICAgICAgIHRl
eHQgcnVuIGF0ICgyODQsMTI2KSB3aWR0aCA0OiAiICIKKyAgICAgICAgUmVuZGVySW1hZ2Uge0lN
R30gYXQgKDI4OCwwKSBzaXplIDE0MHgxNDAgW2JvcmRlcjogKDIwcHggc29saWQgIzU2MDA2Myld
CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4MAorICAgICAgICBS
ZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAweDAKKyAgICAgICAgUmVuZGVyVGV4dCB7
I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
ZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1vbi1iYWNrZ3JvdW5kcy1leHBlY3RlZC5jaGVja3N1
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3It
Y29ycmVjdGlvbi1vbi1iYWNrZ3JvdW5kcy1leHBlY3RlZC5jaGVja3N1bQkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xvci1jb3JyZWN0aW9uLW9u
LWJhY2tncm91bmRzLWV4cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBA
CisxZWNhNTIxN2Q2MDAwYWFmYWZiZTFiZGRmNjRiNWVlYgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xvci1jb3Jy
ZWN0aW9uLW9uLWJhY2tncm91bmRzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1vbi1iYWNrZ3JvdW5k
cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
ZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1vbi1iYWNrZ3JvdW5kcy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjMgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAor
ICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4
MDB4NjAwCisgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBS
ZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHg1ODQKKyAgICAgIFJlbmRlckJsb2Nr
IHtQfSBhdCAoMCwwKSBzaXplIDc4NHgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQg
KDAsMCkgc2l6ZSAxMzB4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAxMzA6
ICJUaGVzZSBzaG91bGQgbWF0Y2g6IgorICAgICAgUmVuZGVyQmxvY2sgKGZsb2F0aW5nKSB7RElW
fSBhdCAoMCwzNCkgc2l6ZSAxMDB4MTAwIFtiZ2NvbG9yPSM1NjAwNjNdCisgICAgICBSZW5kZXJC
bG9jayAoYW5vbnltb3VzKSBhdCAoMCwzNCkgc2l6ZSA3ODR4MTA0CisgICAgICAgIFJlbmRlcklt
YWdlIHtJTUd9IGF0ICgxMDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICAgIFJlbmRlclRleHQgeyN0
ZXh0fSBhdCAoMjAwLDg2KSBzaXplIDR4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMjAwLDg2
KSB3aWR0aCA0OiAiICIKKyAgICAgICAgUmVuZGVyQlIge0JSfSBhdCAoMCwwKSBzaXplIDB4MAor
ICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDE1NCkgc2l6ZSA3ODR4MTgKKyAgICAgICAgUmVu
ZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMjM2eDE4CisgICAgICAgICAgdGV4dCBydW4g
YXQgKDAsMCkgd2lkdGggMjM2OiAiVGhlc2Ugc2hvdWxkIG5vdCBtYXRjaCAoYXQgdGhpcyB0aW1l
KToiCisgICAgICBSZW5kZXJCbG9jayAoZmxvYXRpbmcpIHtESVZ9IGF0ICgwLDE4OCkgc2l6ZSAx
MDB4MTAwIFtiZ2NvbG9yPSM1NjAwNjNdCisgICAgICBSZW5kZXJCbG9jayAoYW5vbnltb3VzKSBh
dCAoMCwxODgpIHNpemUgNzg0eDEwMAorICAgICAgICBSZW5kZXJJbWFnZSB7SU1HfSBhdCAoMTAw
LDApIHNpemUgMTAweDEwMAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6
ZSAweDAKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCisgICAg
ICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4MApJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24tb24tdGV4dC1leHBlY3Rl
ZC5jaGVja3N1bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9j
c3MvY29sb3ItY29ycmVjdGlvbi1vbi10ZXh0LWV4cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvY3NzL2NvbG9yLWNvcnJlY3Rpb24t
b24tdGV4dC1leHBlY3RlZC5jaGVja3N1bQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorNTgz
YmMzYzk3ZjY2MmZjN2ZiNGFlZTM2M2QzNmIwMzQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlv
bi1vbi10ZXh0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvZmFzdC9jc3MvY29sb3ItY29ycmVjdGlvbi1vbi10ZXh0LWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Nzcy9jb2xvci1jb3Jy
ZWN0aW9uLW9uLXRleHQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1IEBA
CitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXpl
IDgwMHg2MDAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJCbG9jayB7SFRN
TH0gYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgUmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkg
c2l6ZSA3ODR4NTg0CisgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMCkgc2l6ZSA3ODR4MTgK
KyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNjE4eDE4CisgICAgICAg
ICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNjE4OiAiVGhlIGRpc3RpbmN0aW9uIGJlbG93IGlz
IHN1YnRsZSwgYnV0IHRoZSBtaWRkbGUgXCJIXCIgaXMgY29sb3ItY29ycmVjdGVkLCBhbmQgdGhl
IGZpcnN0IGFuZCBsYXN0IGFyZSBub3QuIgorICAgICAgUmVuZGVyQmxvY2sgKGFub255bW91cykg
YXQgKDAsMzQpIHNpemUgNzg0eDE3NAorICAgICAgICBSZW5kZXJJbmxpbmUge1NQQU59IGF0ICgw
LDApIHNpemUgMTE3eDE3NCBbY29sb3I9IzAwODAwMF0KKyAgICAgICAgICBSZW5kZXJUZXh0IHsj
dGV4dH0gYXQgKDAsMCkgc2l6ZSAxMTd4MTc0CisgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCww
KSB3aWR0aCAxMTc6ICJIIgorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDExNywxMjIp
IHNpemUgNHgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgxMTcsMTIyKSB3aWR0aCA0OiAiICIK
KyAgICAgICAgUmVuZGVySW5saW5lIHtTUEFOfSBhdCAoMCwwKSBzaXplIDExN3gxNzQgW2NvbG9y
PSMwMDgwMDBdCisgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgxMjEsMCkgc2l6ZSAx
MTd4MTc0CisgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMTIxLDApIHdpZHRoIDExNzogIkgiCisg
ICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMjM4LDEyMikgc2l6ZSA0eDE4CisgICAgICAg
ICAgdGV4dCBydW4gYXQgKDIzOCwxMjIpIHdpZHRoIDQ6ICIgIgorICAgICAgICBSZW5kZXJJbmxp
bmUge1NQQU59IGF0ICgwLDApIHNpemUgMTE3eDE3NCBbY29sb3I9IzAwODAwMF0KKyAgICAgICAg
ICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDI0MiwwKSBzaXplIDExN3gxNzQKKyAgICAgICAgICAg
IHRleHQgcnVuIGF0ICgyNDIsMCkgd2lkdGggMTE3OiAiSCIKKyAgICAgICAgUmVuZGVyVGV4dCB7
I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAo
MCwwKSBzaXplIDB4MAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAw
eDAKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Nzcy9nZXRDb21wdXRlZFN0
eWxlL2NvbXB1dGVkLXN0eWxlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvZ2V0Q29tcHV0ZWRTdHlsZS9jb21wdXRlZC1zdHlsZS1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDUwNjcwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L2Zhc3QvY3NzL2dldENvbXB1dGVkU3R5bGUvY29tcHV0ZWQtc3R5bGUtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDcgQEAgem9vbTogMTsKIC13ZWJraXQtYm94LXJl
ZmxlY3Q6IG5vbmU7CiAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CiAtd2Via2l0LWJveC1zaXpp
bmc6IGNvbnRlbnQtYm94OworLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uOiBkZWZhdWx0OwogLXdl
YmtpdC1jb2x1bW4tYnJlYWstYWZ0ZXI6IGF1dG87CiAtd2Via2l0LWNvbHVtbi1icmVhay1iZWZv
cmU6IGF1dG87CiAtd2Via2l0LWNvbHVtbi1icmVhay1pbnNpZGU6IGF1dG87CkluZGV4OiBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvZ2V0Q29tcHV0ZWRTdHlsZS9jb21wdXRlZC1z
dHlsZS13aXRob3V0LXJlbmRlcmVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvZ2V0Q29tcHV0ZWRTdHlsZS9jb21wdXRlZC1zdHls
ZS13aXRob3V0LXJlbmRlcmVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTA2NzApCisrKyBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jc3MvZ2V0Q29tcHV0ZWRTdHlsZS9jb21wdXRlZC1z
dHlsZS13aXRob3V0LXJlbmRlcmVyLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTIw
LDYgKzEyMCw3IEBAIENvbXB1dGVkIHN0eWxlIG9mIGFuIGVsZW1lbnQgd2hvc2UgcGFyZW4KICAg
ICAtd2Via2l0LWJveC1yZWZsZWN0OiBub25lCiAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25l
CiAgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBjb250ZW50LWJveAorICAgIC13ZWJraXQtY29sb3It
Y29ycmVjdGlvbjogZGVmYXVsdAogICAgIC13ZWJraXQtY29sdW1uLWJyZWFrLWFmdGVyOiBhdXRv
CiAgICAgLXdlYmtpdC1jb2x1bW4tYnJlYWstYmVmb3JlOiBhdXRvCiAgICAgLXdlYmtpdC1jb2x1
bW4tYnJlYWstaW5zaWRlOiBhdXRvCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3NzL2dldENvbXB1
dGVkU3R5bGUtYmFzaWMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2
Zy9jc3MvZ2V0Q29tcHV0ZWRTdHlsZS1iYXNpYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUwNjcw
KQorKysgTGF5b3V0VGVzdHMvc3ZnL2Nzcy9nZXRDb21wdXRlZFN0eWxlLWJhc2ljLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDYgKzI0MCw4IEBAIHJlY3Q6IHN0eWxlLmdldFBy
b3BlcnR5VmFsdWUoLXdlYmtpdC1ib3gKIHJlY3Q6IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUo
LXdlYmtpdC1ib3gtc2hhZG93KSA6IFtvYmplY3QgQ1NTUHJpbWl0aXZlVmFsdWVdCiByZWN0OiBz
dHlsZS5nZXRQcm9wZXJ0eVZhbHVlKC13ZWJraXQtYm94LXNpemluZykgOiBjb250ZW50LWJveAog
cmVjdDogc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZSgtd2Via2l0LWJveC1zaXppbmcpIDogW29i
amVjdCBDU1NQcmltaXRpdmVWYWx1ZV0KK3JlY3Q6IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoLXdl
YmtpdC1jb2xvci1jb3JyZWN0aW9uKSA6IGRlZmF1bHQKK3JlY3Q6IHN0eWxlLmdldFByb3BlcnR5
Q1NTVmFsdWUoLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uKSA6IFtvYmplY3QgQ1NTUHJpbWl0aXZl
VmFsdWVdCiByZWN0OiBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKC13ZWJraXQtY29sdW1uLWJyZWFr
LWFmdGVyKSA6IGF1dG8KIHJlY3Q6IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoLXdlYmtpdC1j
b2x1bW4tYnJlYWstYWZ0ZXIpIDogW29iamVjdCBDU1NQcmltaXRpdmVWYWx1ZV0KIHJlY3Q6IHN0
eWxlLmdldFByb3BlcnR5VmFsdWUoLXdlYmtpdC1jb2x1bW4tYnJlYWstYmVmb3JlKSA6IGF1dG8K
QEAgLTY1Miw2ICs2NTQsOCBAQCBnOiBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKC13ZWJraXQtYm94
LXNoCiBnOiBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKC13ZWJraXQtYm94LXNoYWRvdykgOiBb
b2JqZWN0IENTU1ByaW1pdGl2ZVZhbHVlXQogZzogc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgtd2Vi
a2l0LWJveC1zaXppbmcpIDogY29udGVudC1ib3gKIGc6IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFs
dWUoLXdlYmtpdC1ib3gtc2l6aW5nKSA6IFtvYmplY3QgQ1NTUHJpbWl0aXZlVmFsdWVdCitnOiBz
dHlsZS5nZXRQcm9wZXJ0eVZhbHVlKC13ZWJraXQtY29sb3ItY29ycmVjdGlvbikgOiBkZWZhdWx0
CitnOiBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKC13ZWJraXQtY29sb3ItY29ycmVjdGlvbikg
OiBbb2JqZWN0IENTU1ByaW1pdGl2ZVZhbHVlXQogZzogc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgt
d2Via2l0LWNvbHVtbi1icmVhay1hZnRlcikgOiBhdXRvCiBnOiBzdHlsZS5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKC13ZWJraXQtY29sdW1uLWJyZWFrLWFmdGVyKSA6IFtvYmplY3QgQ1NTUHJpbWl0aXZl
VmFsdWVdCiBnOiBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKC13ZWJraXQtY29sdW1uLWJyZWFrLWJl
Zm9yZSkgOiBhdXRvCg==
</data>
<flag name="review"
          id="24451"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>