<?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>213673</bug_id>
          
          <creation_ts>2020-06-26 19:41:10 -0700</creation_ts>
          <short_desc>CoreImage Implementation of SourceGraphic and saturate(), hue-rotate(), grayscale() and sepia()</short_desc>
          <delta_ts>2021-10-18 09:52:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=215958</see_also>
          <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>215956</blocked>
    
    <blocked>215957</blocked>
    
    <blocked>215958</blocked>
    
    <blocked>231902</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>frankhome61</reporter>
          <assigned_to>frankhome61</assigned_to>
          <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>frankhome61</cc>
    
    <cc>glenn</cc>
    
    <cc>jbedard</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>rniwa</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1666716</commentid>
    <comment_count>0</comment_count>
    <who name="">frankhome61</who>
    <bug_when>2020-06-26 19:41:10 -0700</bug_when>
    <thetext>SourceGraphic contains the graphics elements that were the original input into filters. The first step to render CSS filters is to implement SourceGraphic in CoreImage, since for each possible CSS filter graph, the root is a SourceGraphic. This is a good starting point to transitioning to CoreImage rendering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666717</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-26 19:41:54 -0700</bug_when>
    <thetext>&lt;rdar://problem/64832571&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675303</commentid>
    <comment_count>2</comment_count>
      <attachid>405293</attachid>
    <who name="">frankhome61</who>
    <bug_when>2020-07-27 10:49:10 -0700</bug_when>
    <thetext>Created attachment 405293
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675324</commentid>
    <comment_count>3</comment_count>
      <attachid>405293</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-27 11:23:47 -0700</bug_when>
    <thetext>Comment on attachment 405293
Patch

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

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:196
&gt; +    CIFilter* colorMatrixFilter = [CIFilter filterWithName:@&quot;CIColorMatrix&quot;];
&gt; +    [colorMatrixFilter setValue:inputImage forKey:kCIInputImageKey];
&gt; +    
&gt; +    switch (colorMatrixEffect.type()) {
&gt; +    case FECOLORMATRIX_TYPE_SATURATE:
&gt; +    case FECOLORMATRIX_TYPE_HUEROTATE: {
&gt; +        [colorMatrixFilter setValue:[CIVector vectorWithX:components[0] Y:components[1] Z:components[2] W:0] forKey:@&quot;inputRVector&quot;];
&gt; +        [colorMatrixFilter setValue:[CIVector vectorWithX:components[3] Y:components[4] Z:components[5] W:0] forKey:@&quot;inputGVector&quot;];
&gt; +        [colorMatrixFilter setValue:[CIVector vectorWithX:components[6] Y:components[7] Z:components[8] W:0] forKey:@&quot;inputBVector&quot;];
&gt; +        [colorMatrixFilter setValue:[CIVector vectorWithX:0             Y:0             Z:0             W:1] forKey:@&quot;inputAVector&quot;];
&gt; +        [colorMatrixFilter setValue:[CIVector vectorWithX:0             Y:0             Z:0             W:0] forKey:@&quot;inputBiasVector&quot;];
&gt; +        break;
&gt; +    }

Seems like this is starting to duplicate code that&apos;s already in PlatformCAFilters::setFiltersOnLayer(). Can we avoid this?

&gt; PerformanceTests/MotionMark/tests/master/resources/focus.js:84
&gt; -        Utilities.setElementPrefixedProperty(this.particle, &quot;filter&quot;, &quot;blur(&quot; + blur + &quot;px) opacity(&quot; + opacity + &quot;%)&quot;);
&gt; -        this.particle.style.transform = &quot;translate3d(&quot; + left + &quot;%, &quot; + top + &quot;%, 0)&quot;;
&gt; +        Utilities.setElementPrefixedProperty(this.particle, &quot;filter&quot;, &quot;saturate(&quot; + blur + &quot;%)&quot;);
&gt; +        this.particle.style.transform = &quot;translate2d(&quot; + left + &quot;%, &quot; + top + &quot;%, 0)&quot;;

This seems unrelated and probably not something you want to check in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675328</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-27 11:29:33 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #3)
&gt; Comment on attachment 405293 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=405293&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:196
&gt; &gt; +    CIFilter* colorMatrixFilter = [CIFilter filterWithName:@&quot;CIColorMatrix&quot;];
&gt; &gt; +    [colorMatrixFilter setValue:inputImage forKey:kCIInputImageKey];
&gt; &gt; +    
&gt; &gt; +    switch (colorMatrixEffect.type()) {
&gt; &gt; +    case FECOLORMATRIX_TYPE_SATURATE:
&gt; &gt; +    case FECOLORMATRIX_TYPE_HUEROTATE: {
&gt; &gt; +        [colorMatrixFilter setValue:[CIVector vectorWithX:components[0] Y:components[1] Z:components[2] W:0] forKey:@&quot;inputRVector&quot;];
&gt; &gt; +        [colorMatrixFilter setValue:[CIVector vectorWithX:components[3] Y:components[4] Z:components[5] W:0] forKey:@&quot;inputGVector&quot;];
&gt; &gt; +        [colorMatrixFilter setValue:[CIVector vectorWithX:components[6] Y:components[7] Z:components[8] W:0] forKey:@&quot;inputBVector&quot;];
&gt; &gt; +        [colorMatrixFilter setValue:[CIVector vectorWithX:0             Y:0             Z:0             W:1] forKey:@&quot;inputAVector&quot;];
&gt; &gt; +        [colorMatrixFilter setValue:[CIVector vectorWithX:0             Y:0             Z:0             W:0] forKey:@&quot;inputBiasVector&quot;];
&gt; &gt; +        break;
&gt; &gt; +    }
&gt; 
&gt; Seems like this is starting to duplicate code that&apos;s already in
&gt; PlatformCAFilters::setFiltersOnLayer(). Can we avoid this?

Nevermind, looks like I am wrong here. HUEROTATE is implemented via [CAFilter filterWithType:kCAFilterColorHueRotate] in PlatformCAFilters (other filters do use CIColorMatrix though). 

Does make me wonder if we should use hueAdjustFilter and other builtin filters for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675342</commentid>
    <comment_count>5</comment_count>
      <attachid>405293</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-27 12:06:14 -0700</bug_when>
    <thetext>Comment on attachment 405293
Patch

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

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:61
&gt; +    CIImage* feSourceGraphicImage(FilterEffect&amp;);
&gt; +    CIImage* feColorMatrixImage(FilterEffect&amp;, Vector&lt;CIImage*&gt;&amp;);

WebKit coding style says we write CIImage * with a space before the * because this is an Objective-C class.

The input should be const Vector&amp;, not Vector&amp;.

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:62
&gt; +        FEColorMatrix&amp; colorMatrixEffect = static_cast&lt;FEColorMatrix&amp;&gt;(effect);

auto&amp;

But also, maybe this can go inside the switch; don’t really need a separate local variable.

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:151
&gt; +    SourceGraphic&amp; sourceGraphicEffect = static_cast&lt;SourceGraphic&amp;&gt;(effect);

auto&amp;

Also consider merging with the next line.

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:152
&gt; +    ImageBuffer* sourceImage = sourceGraphicEffect.filter().sourceImage();

auto.

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:155
&gt; +    NativeImagePtr sourceCGImageRef = sourceImage-&gt;copyNativeImage();

auto

Also consider merging with the next line.

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:162
&gt; +    CIImage* inputImage = inputImages.at(0);

Normal we’d prefer to use inputImages[0] rather than calling at(). But also, why are we passing in a vector just to extract the first image from it?

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:163
&gt; +    FEColorMatrix&amp; colorMatrixEffect = static_cast&lt;FEColorMatrix&amp;&gt;(effect);

auto&amp;

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:164
&gt; +    Vector&lt;float&gt; values = FEColorMatrix::normalizedFloats(colorMatrixEffect.values());

auto

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:168
&gt; +    case FECOLORMATRIX_TYPE_SATURATE: {

No need for braces here in WebKit coding style. Please don’t use them.

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:172
&gt; +    case FECOLORMATRIX_TYPE_HUEROTATE: {

Ditto.

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:184
&gt; +    CIFilter* colorMatrixFilter = [CIFilter filterWithName:@&quot;CIColorMatrix&quot;];

auto

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:189
&gt; +    case FECOLORMATRIX_TYPE_HUEROTATE: {

No need for braces here in WebKit coding style. Please don’t use them.

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:197
&gt; +    case FECOLORMATRIX_TYPE_MATRIX: {

Ditto.

&gt; Source/WebCore/platform/graphics/filters/FEColorMatrix.h:39
&gt;  class FEColorMatrix : public FilterEffect {

Should be marked final, and platformApplySoftware also should.

&gt; Source/WebCore/platform/graphics/filters/FEColorMatrix.h:41
&gt; +    friend class FilterEffectRendererCoreImage;

We almost never use friend in WebKit. Is this the best solution? What do we need access to? We already have both get and set for all the data members.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675352</commentid>
    <comment_count>6</comment_count>
    <who name="">frankhome61</who>
    <bug_when>2020-07-27 12:39:46 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #3)
&gt; Comment on attachment 405293 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=405293&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:196
&gt; &gt; +    CIFilter* colorMatrixFilter = [CIFilter filterWithName:@&quot;CIColorMatrix&quot;];
&gt; &gt; +    [colorMatrixFilter setValue:inputImage forKey:kCIInputImageKey];
&gt; &gt; +    
&gt; &gt; +    switch (colorMatrixEffect.type()) {
&gt; &gt; +    case FECOLORMATRIX_TYPE_SATURATE:
&gt; &gt; +    case FECOLORMATRIX_TYPE_HUEROTATE: {
&gt; &gt; +        [colorMatrixFilter setValue:[CIVector vectorWithX:components[0] Y:components[1] Z:components[2] W:0] forKey:@&quot;inputRVector&quot;];
&gt; &gt; +        [colorMatrixFilter setValue:[CIVector vectorWithX:components[3] Y:components[4] Z:components[5] W:0] forKey:@&quot;inputGVector&quot;];
&gt; &gt; +        [colorMatrixFilter setValue:[CIVector vectorWithX:components[6] Y:components[7] Z:components[8] W:0] forKey:@&quot;inputBVector&quot;];
&gt; &gt; +        [colorMatrixFilter setValue:[CIVector vectorWithX:0             Y:0             Z:0             W:1] forKey:@&quot;inputAVector&quot;];
&gt; &gt; +        [colorMatrixFilter setValue:[CIVector vectorWithX:0             Y:0             Z:0             W:0] forKey:@&quot;inputBiasVector&quot;];
&gt; &gt; +        break;
&gt; &gt; +    }
&gt; 
&gt; Seems like this is starting to duplicate code that&apos;s already in
&gt; PlatformCAFilters::setFiltersOnLayer(). Can we avoid this?
&gt; 
&gt; &gt; PerformanceTests/MotionMark/tests/master/resources/focus.js:84
&gt; &gt; -        Utilities.setElementPrefixedProperty(this.particle, &quot;filter&quot;, &quot;blur(&quot; + blur + &quot;px) opacity(&quot; + opacity + &quot;%)&quot;);
&gt; &gt; -        this.particle.style.transform = &quot;translate3d(&quot; + left + &quot;%, &quot; + top + &quot;%, 0)&quot;;
&gt; &gt; +        Utilities.setElementPrefixedProperty(this.particle, &quot;filter&quot;, &quot;saturate(&quot; + blur + &quot;%)&quot;);
&gt; &gt; +        this.particle.style.transform = &quot;translate2d(&quot; + left + &quot;%, &quot; + top + &quot;%, 0)&quot;;
&gt; 
&gt; This seems unrelated and probably not something you want to check in.


no, this won&apos;t get checked in, this temporary change is for Simon to help me with some performance issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675355</commentid>
    <comment_count>7</comment_count>
    <who name="">frankhome61</who>
    <bug_when>2020-07-27 12:42:13 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Comment on attachment 405293 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=405293&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:61
&gt; &gt; +    CIImage* feSourceGraphicImage(FilterEffect&amp;);
&gt; &gt; +    CIImage* feColorMatrixImage(FilterEffect&amp;, Vector&lt;CIImage*&gt;&amp;);
&gt; 
&gt; WebKit coding style says we write CIImage * with a space before the *
&gt; because this is an Objective-C class.
&gt; 
&gt; The input should be const Vector&amp;, not Vector&amp;.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:62
&gt; &gt; +        FEColorMatrix&amp; colorMatrixEffect = static_cast&lt;FEColorMatrix&amp;&gt;(effect);
&gt; 
&gt; auto&amp;
&gt; 
&gt; But also, maybe this can go inside the switch; don’t really need a separate
&gt; local variable.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:151
&gt; &gt; +    SourceGraphic&amp; sourceGraphicEffect = static_cast&lt;SourceGraphic&amp;&gt;(effect);
&gt; 
&gt; auto&amp;
&gt; 
&gt; Also consider merging with the next line.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:152
&gt; &gt; +    ImageBuffer* sourceImage = sourceGraphicEffect.filter().sourceImage();
&gt; 
&gt; auto.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:155
&gt; &gt; +    NativeImagePtr sourceCGImageRef = sourceImage-&gt;copyNativeImage();
&gt; 
&gt; auto
&gt; 
&gt; Also consider merging with the next line.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:162
&gt; &gt; +    CIImage* inputImage = inputImages.at(0);
&gt; 
&gt; Normal we’d prefer to use inputImages[0] rather than calling at(). But also,
&gt; why are we passing in a vector just to extract the first image from it?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:163
&gt; &gt; +    FEColorMatrix&amp; colorMatrixEffect = static_cast&lt;FEColorMatrix&amp;&gt;(effect);
&gt; 
&gt; auto&amp;
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:164
&gt; &gt; +    Vector&lt;float&gt; values = FEColorMatrix::normalizedFloats(colorMatrixEffect.values());
&gt; 
&gt; auto
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:168
&gt; &gt; +    case FECOLORMATRIX_TYPE_SATURATE: {
&gt; 
&gt; No need for braces here in WebKit coding style. Please don’t use them.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:172
&gt; &gt; +    case FECOLORMATRIX_TYPE_HUEROTATE: {
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:184
&gt; &gt; +    CIFilter* colorMatrixFilter = [CIFilter filterWithName:@&quot;CIColorMatrix&quot;];
&gt; 
&gt; auto
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:189
&gt; &gt; +    case FECOLORMATRIX_TYPE_HUEROTATE: {
&gt; 
&gt; No need for braces here in WebKit coding style. Please don’t use them.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:197
&gt; &gt; +    case FECOLORMATRIX_TYPE_MATRIX: {
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/filters/FEColorMatrix.h:39
&gt; &gt;  class FEColorMatrix : public FilterEffect {
&gt; 
&gt; Should be marked final, and platformApplySoftware also should.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/filters/FEColorMatrix.h:41
&gt; &gt; +    friend class FilterEffectRendererCoreImage;
&gt; 
&gt; We almost never use friend in WebKit. Is this the best solution? What do we
&gt; need access to? We already have both get and set for all the data members.

There are some functions in FEColorMatrix, for example, calculateSaturateComponents that is a protected member function, not sure if we want to make it public though. Any thoughts? This applies to other FilterEffects as well</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675360</commentid>
    <comment_count>8</comment_count>
      <attachid>405293</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-27 13:02:10 -0700</bug_when>
    <thetext>Comment on attachment 405293
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:61
&gt;&gt;&gt; +    CIImage* feColorMatrixImage(FilterEffect&amp;, Vector&lt;CIImage*&gt;&amp;);
&gt;&gt; 
&gt;&gt; WebKit coding style says we write CIImage * with a space before the * because this is an Objective-C class.
&gt;&gt; 
&gt;&gt; The input should be const Vector&amp;, not Vector&amp;.
&gt; 
&gt; There are some functions in FEColorMatrix, for example, calculateSaturateComponents that is a protected member function, not sure if we want to make it public though. Any thoughts? This applies to other FilterEffects as well

My first thought would be to make things public before starting to use friend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683791</commentid>
    <comment_count>9</comment_count>
      <attachid>407508</attachid>
    <who name="">frankhome61</who>
    <bug_when>2020-08-28 15:31:47 -0700</bug_when>
    <thetext>Created attachment 407508
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683805</commentid>
    <comment_count>10</comment_count>
      <attachid>407508</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-08-28 16:16:30 -0700</bug_when>
    <thetext>Comment on attachment 407508
Patch

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        Tests: css3/filters/effect-grayscale-square.html
&gt; +               css3/filters/effect-hue-rotate-square.html
&gt; +               css3/filters/effect-saturate-square.html
&gt; +               css3/filters/effect-sepia-square.html

Since you&apos;re adding caching of CIFilters here, you need
1. a test that renders twice, changing the value of an input in between
2. a test that renders twice, changing the filter chain
3. Maybe more.

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:61
&gt; +    CIImage *feSourceGraphicImage(SourceGraphic&amp;);

imageForSourceGraphic

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:62
&gt; +    CIImage *feColorMatrixImage(FEColorMatrix&amp;, const Vector&lt;CIImage *&gt;&amp;, int);

imageForFEMatrixFilter. Name the non-obvious parameters.

I think it would nicer to explicitly ref-count these and return RetainPtr&lt;CIImage&gt;

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:65
&gt; +    HashMap&lt;int, Vector&lt;RetainPtr&lt;CIFilter&gt;&gt;&gt; m_ciFilterStorageMap;

What is the key? Why did you have to change this?

I think we can also improve the name of m_ciFilterStorageMap. It&apos;s clear from the type that it&apos;s a map, and of course it&apos;s storage. The name should describe how it maps. fooToFooMap.

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:57
&gt; +CIContext *FilterEffectRendererCoreImage::getCIContext()
&gt; +{
&gt; +    static NeverDestroyed&lt;RetainPtr&lt;CIContext&gt;&gt; ciContext;
&gt; +    if (!ciContext.get())
&gt; +        ciContext.get() = adoptNS([CIContext contextWithOptions: @{ kCIContextWorkingColorSpace: (__bridge id)CGColorSpaceCreateWithName(kCGColorSpaceSRGB)}]);
&gt; +    return [ciContext.get() retain];
&gt; +}

I don&apos;t think we can use a single shared CIContext. We risk state leaking between documents, which might lead to things like timing attacks. Maybe cache one per Document (e.g. via RenderLayerCompositor).

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:67
&gt; +        switch (static_cast&lt;FEColorMatrix&amp;&gt;(effect).type()) {

You should add SPECIALIZE_TYPE_TRAITS for FilterEffect subclasses to avoid this static_cast. This should be a downcast&lt;&gt;.

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:109
&gt; +CIImage *FilterEffectRendererCoreImage::connectCIFilters(FilterEffect&amp; effect, int traversalOrder)

Order or index?

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:172
&gt; +CIImage *FilterEffectRendererCoreImage::feColorMatrixImage(FEColorMatrix&amp; effect, const Vector&lt;CIImage *&gt;&amp; inputImages, int traversalOrder)

This is both creating the filter, and setting the inputImage. Might be clearer to split those two responsibilities.

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:204
&gt; +        Vector&lt;RetainPtr&lt;CIFilter&gt;&gt; filtersToBeCached;
&gt; +        filtersToBeCached.insert(0, colorMatrixFilter);
&gt; +        m_ciFilterStorageMap.add(traversalOrder, filtersToBeCached);

There&apos;s a way to do this with map.ensure().

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:271
&gt; +    CIRenderDestination* destination = [[[CIRenderDestination alloc] initWithIOSurface:(::IOSurface*)surface.surface()] autorelease];

Use RetainPtr&lt;&gt; and avoid autorelease.

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:297
&gt; +    , m_ciFilterStorageMap()

Not necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683828</commentid>
    <comment_count>11</comment_count>
      <attachid>407508</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-28 16:51:09 -0700</bug_when>
    <thetext>Comment on attachment 407508
Patch

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

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:55
&gt; +    static NeverDestroyed&lt;RetainPtr&lt;CIContext&gt;&gt; ciContext;
&gt; +    if (!ciContext.get())
&gt; +        ciContext.get() = adoptNS([CIContext contextWithOptions: @{ kCIContextWorkingColorSpace: (__bridge id)CGColorSpaceCreateWithName(kCGColorSpaceSRGB)}]);

This should just be a single line. There’s no need for this three line form.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683926</commentid>
    <comment_count>12</comment_count>
    <who name="">frankhome61</who>
    <bug_when>2020-08-29 12:13:47 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #10)
&gt; Comment on attachment 407508 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=407508&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        Tests: css3/filters/effect-grayscale-square.html
&gt; &gt; +               css3/filters/effect-hue-rotate-square.html
&gt; &gt; +               css3/filters/effect-saturate-square.html
&gt; &gt; +               css3/filters/effect-sepia-square.html
&gt; 
&gt; Since you&apos;re adding caching of CIFilters here, you need
&gt; 1. a test that renders twice, changing the value of an input in between
&gt; 2. a test that renders twice, changing the filter chain
&gt; 3. Maybe more.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:61
&gt; &gt; +    CIImage *feSourceGraphicImage(SourceGraphic&amp;);
&gt; 
&gt; imageForSourceGraphic
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:62
&gt; &gt; +    CIImage *feColorMatrixImage(FEColorMatrix&amp;, const Vector&lt;CIImage *&gt;&amp;, int);
&gt; 
&gt; imageForFEMatrixFilter. Name the non-obvious parameters.
&gt; 
&gt; I think it would nicer to explicitly ref-count these and return
&gt; RetainPtr&lt;CIImage&gt;
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:65
&gt; &gt; +    HashMap&lt;int, Vector&lt;RetainPtr&lt;CIFilter&gt;&gt;&gt; m_ciFilterStorageMap;
&gt; 
&gt; What is the key? Why did you have to change this?

So originally I chose to use FilterEffect nodes as the key, but turns out FilterEffects gets destroyed and rebuilt on each render update, so that cannot be a key anymore, so instead I chose one thing that&apos;s consistent across each draw is the graph itself, as in the structure of the filter graph, and thus the traversal order of this graph is consistent between updates. And therefore it could be used as a hash map key

&gt; 
&gt; I think we can also improve the name of m_ciFilterStorageMap. It&apos;s clear
&gt; from the type that it&apos;s a map, and of course it&apos;s storage. The name should
&gt; describe how it maps. fooToFooMap.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:57
&gt; &gt; +CIContext *FilterEffectRendererCoreImage::getCIContext()
&gt; &gt; +{
&gt; &gt; +    static NeverDestroyed&lt;RetainPtr&lt;CIContext&gt;&gt; ciContext;
&gt; &gt; +    if (!ciContext.get())
&gt; &gt; +        ciContext.get() = adoptNS([CIContext contextWithOptions: @{ kCIContextWorkingColorSpace: (__bridge id)CGColorSpaceCreateWithName(kCGColorSpaceSRGB)}]);
&gt; &gt; +    return [ciContext.get() retain];
&gt; &gt; +}
&gt; 
&gt; I don&apos;t think we can use a single shared CIContext. We risk state leaking
&gt; between documents, which might lead to things like timing attacks. Maybe
&gt; cache one per Document (e.g. via RenderLayerCompositor).
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:67
&gt; &gt; +        switch (static_cast&lt;FEColorMatrix&amp;&gt;(effect).type()) {
&gt; 
&gt; You should add SPECIALIZE_TYPE_TRAITS for FilterEffect subclasses to avoid
&gt; this static_cast. This should be a downcast&lt;&gt;.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:109
&gt; &gt; +CIImage *FilterEffectRendererCoreImage::connectCIFilters(FilterEffect&amp; effect, int traversalOrder)
&gt; 
&gt; Order or index?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:172
&gt; &gt; +CIImage *FilterEffectRendererCoreImage::feColorMatrixImage(FEColorMatrix&amp; effect, const Vector&lt;CIImage *&gt;&amp; inputImages, int traversalOrder)
&gt; 
&gt; This is both creating the filter, and setting the inputImage. Might be
&gt; clearer to split those two responsibilities.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:204
&gt; &gt; +        Vector&lt;RetainPtr&lt;CIFilter&gt;&gt; filtersToBeCached;
&gt; &gt; +        filtersToBeCached.insert(0, colorMatrixFilter);
&gt; &gt; +        m_ciFilterStorageMap.add(traversalOrder, filtersToBeCached);
&gt; 
&gt; There&apos;s a way to do this with map.ensure().
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:271
&gt; &gt; +    CIRenderDestination* destination = [[[CIRenderDestination alloc] initWithIOSurface:(::IOSurface*)surface.surface()] autorelease];
&gt; 
&gt; Use RetainPtr&lt;&gt; and avoid autorelease.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:297
&gt; &gt; +    , m_ciFilterStorageMap()
&gt; 
&gt; Not necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684282</commentid>
    <comment_count>13</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-08-31 15:31:39 -0700</bug_when>
    <thetext>&gt; I don&apos;t think we can use a single shared CIContext. We risk state leaking between documents, which might lead to things like timing attacks. Maybe cache one per Document (e.g. via RenderLayerCompositor).

There is no (architectural) state on the CIContext that is modified by our filter code, so the only state we would be leaking are things like &quot;has this web process rendered a blur filter before&quot; or &quot;has this web process rendered a color matrix filter before.&quot; It seems like this wouldn&apos;t be sensitive information; so what if the web process has rendered that stuff before?

Indeed, it may even be better to have a singleton because that timing attack is possible: the second webpage the user navigates to would perform faster because it can re-use shader compilation artifacts etc. from the first webpage the user navigates to. It seems like a waste of perf trying to protect benign information.

(This is also how fonts work; we don&apos;t clear the font cache on every page load...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684354</commentid>
    <comment_count>14</comment_count>
      <attachid>407650</attachid>
    <who name="">frankhome61</who>
    <bug_when>2020-08-31 19:14:16 -0700</bug_when>
    <thetext>Created attachment 407650
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684525</commentid>
    <comment_count>15</comment_count>
      <attachid>407691</attachid>
    <who name="">frankhome61</who>
    <bug_when>2020-09-01 10:20:35 -0700</bug_when>
    <thetext>Created attachment 407691
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684534</commentid>
    <comment_count>16</comment_count>
      <attachid>407691</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-01 10:40:09 -0700</bug_when>
    <thetext>Comment on attachment 407691
Patch

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

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:53
&gt; +    static NeverDestroyed&lt;RetainPtr&lt;CIContext&gt;&gt; ciContext = adoptNS([CIContext contextWithOptions: @{ kCIContextWorkingColorSpace: (__bridge id)CGColorSpaceCreateWithName(kCGColorSpaceSRGB)}]);

This over-releases. It’s incorrect to call adoptNS on the result of +[CIContext contextWithOptions:] because that function returns something that’s autoreleased. Simplest way to fix this is to remove the adoptNS.

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:54
&gt; +    return [ciContext.get() retain];

This over-retains. Putting a CIContext into a RetainPtr&lt;CIContext&gt; will already retain it. This double retains it every time this function is called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684536</commentid>
    <comment_count>17</comment_count>
      <attachid>407691</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-01 10:40:40 -0700</bug_when>
    <thetext>Comment on attachment 407691
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:54
&gt;&gt; +    return [ciContext.get() retain];
&gt; 
&gt; This over-retains. Putting a CIContext into a RetainPtr&lt;CIContext&gt; will already retain it. This double retains it every time this function is called.

Simplest way to fix this is to just write:

    return ciContext;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684539</commentid>
    <comment_count>18</comment_count>
      <attachid>407691</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-01 10:44:49 -0700</bug_when>
    <thetext>Comment on attachment 407691
Patch

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

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:163
&gt; +        auto&amp; surface = downcast&lt;AcceleratedImageBuffer&gt;(*sourceImage).surface();
&gt; +        IOSurfaceRef surfaceRef = surface.surface();
&gt; +        return RetainPtr&lt;CIImage&gt;([CIImage imageWithIOSurface:surfaceRef]);

This should not require an explicit cast to RetainPtr. Also, the local variables aren’t helping. I suggest doing it in a single line:

    return [CIImage imageWithIOSurface:downcast&lt;AcceleratedImageBuffer&gt;(*sourceImage).surface().surface()];

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:166
&gt; +    NativeImagePtr sourceCGImageRef = sourceImage-&gt;copyNativeImage();
&gt; +    return RetainPtr&lt;CIImage&gt;([CIImage imageWithCGImage:sourceCGImageRef.get()]);

This should not require an explicit cast to RetainPtr. Also, the local variable isn’t helping. I suggest doing it in a single line:

    return [CIImage imageWithCGImage:sourceImage-&gt;copyNativeImage().get()];

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:218
&gt; +    return RetainPtr&lt;CIImage&gt;(colorMatrixFilter.outputImage);

This should not require an explicit cast to RetainPtr.

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:258
&gt; +    RetainPtr&lt;CIRenderDestination&gt; destination = adoptNS([[CIRenderDestination alloc] initWithIOSurface:(::IOSurface*)surface.surface()]);

Pleas use auto here.

I am surprised that a cast to IOSurface* is required. If it’s not, please omit it. Even if it is required, I suggest the (IOSurface*) syntax rather than (::IOSurface*) syntax.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684545</commentid>
    <comment_count>19</comment_count>
    <who name="">frankhome61</who>
    <bug_when>2020-09-01 10:58:33 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #18)
&gt; Comment on attachment 407691 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=407691&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:163
&gt; &gt; +        auto&amp; surface = downcast&lt;AcceleratedImageBuffer&gt;(*sourceImage).surface();
&gt; &gt; +        IOSurfaceRef surfaceRef = surface.surface();
&gt; &gt; +        return RetainPtr&lt;CIImage&gt;([CIImage imageWithIOSurface:surfaceRef]);
&gt; 
&gt; This should not require an explicit cast to RetainPtr. Also, the local
&gt; variables aren’t helping. I suggest doing it in a single line:
&gt; 
&gt;     return [CIImage
&gt; imageWithIOSurface:downcast&lt;AcceleratedImageBuffer&gt;(*sourceImage).surface().
&gt; surface()];
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:166
&gt; &gt; +    NativeImagePtr sourceCGImageRef = sourceImage-&gt;copyNativeImage();
&gt; &gt; +    return RetainPtr&lt;CIImage&gt;([CIImage imageWithCGImage:sourceCGImageRef.get()]);
&gt; 
&gt; This should not require an explicit cast to RetainPtr. Also, the local
&gt; variable isn’t helping. I suggest doing it in a single line:
&gt; 
&gt;     return [CIImage imageWithCGImage:sourceImage-&gt;copyNativeImage().get()];
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:218
&gt; &gt; +    return RetainPtr&lt;CIImage&gt;(colorMatrixFilter.outputImage);
&gt; 
&gt; This should not require an explicit cast to RetainPtr.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:258
&gt; &gt; +    RetainPtr&lt;CIRenderDestination&gt; destination = adoptNS([[CIRenderDestination alloc] initWithIOSurface:(::IOSurface*)surface.surface()]);
&gt; 
&gt; Pleas use auto here.
&gt; 
&gt; I am surprised that a cast to IOSurface* is required. If it’s not, please
&gt; omit it. Even if it is required, I suggest the (IOSurface*) syntax rather
&gt; than (::IOSurface*) syntax.

The problem here is that there is a name collision, there is a WebCore::IOSurface and an Objective-C IOSurface, and without ::IOSurface* the compiler always resolve (IOSurface*) to WebCore::IOSurface*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684546</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-01 10:59:38 -0700</bug_when>
    <thetext>(In reply to guowei_yang from comment #19)
&gt; (In reply to Darin Adler from comment #18)
&gt; &gt; I am surprised that a cast to IOSurface* is required. If it’s not, please
&gt; &gt; omit it. Even if it is required, I suggest the (IOSurface*) syntax rather
&gt; &gt; than (::IOSurface*) syntax.
&gt; 
&gt; The problem here is that there is a name collision, there is a
&gt; WebCore::IOSurface and an Objective-C IOSurface, and without ::IOSurface*
&gt; the compiler always resolve (IOSurface*) to WebCore::IOSurface*

OK. But can you just remove the cast?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684552</commentid>
    <comment_count>21</comment_count>
    <who name="">frankhome61</who>
    <bug_when>2020-09-01 11:16:45 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #20)
&gt; (In reply to guowei_yang from comment #19)
&gt; &gt; (In reply to Darin Adler from comment #18)
&gt; &gt; &gt; I am surprised that a cast to IOSurface* is required. If it’s not, please
&gt; &gt; &gt; omit it. Even if it is required, I suggest the (IOSurface*) syntax rather
&gt; &gt; &gt; than (::IOSurface*) syntax.
&gt; &gt; 
&gt; &gt; The problem here is that there is a name collision, there is a
&gt; &gt; WebCore::IOSurface and an Objective-C IOSurface, and without ::IOSurface*
&gt; &gt; the compiler always resolve (IOSurface*) to WebCore::IOSurface*
&gt; 
&gt; OK. But can you just remove the cast?

Hmmm I don&apos;t think so, .surface() returns an IOSurfaceRef, which is &quot;an rvalue of type &apos;IOSurfaceRef&apos; (aka &apos;__IOSurface *&apos;)&quot;, but initWithIOSurface expects &quot;IOSurface * _Nonnull&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684590</commentid>
    <comment_count>22</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-01 13:07:17 -0700</bug_when>
    <thetext>(In reply to guowei_yang from comment #21)
&gt; Hmmm I don&apos;t think so, .surface() returns an IOSurfaceRef, which is &quot;an
&gt; rvalue of type &apos;IOSurfaceRef&apos; (aka &apos;__IOSurface *&apos;)&quot;, but initWithIOSurface
&gt; expects &quot;IOSurface * _Nonnull&quot;

I see, it’s a toll-free bridged type, but it’s the CoreFoundation vs. Objective-C version of that type. So this is a bridge cast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684622</commentid>
    <comment_count>23</comment_count>
      <attachid>407691</attachid>
    <who name="">frankhome61</who>
    <bug_when>2020-09-01 14:15:45 -0700</bug_when>
    <thetext>Comment on attachment 407691
Patch

I am going to temporarily change the review status to r? so that I can investigate failed builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684938</commentid>
    <comment_count>24</comment_count>
      <attachid>407790</attachid>
    <who name="">frankhome61</who>
    <bug_when>2020-09-02 13:02:02 -0700</bug_when>
    <thetext>Created attachment 407790
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684943</commentid>
    <comment_count>25</comment_count>
      <attachid>407790</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-02 13:15:58 -0700</bug_when>
    <thetext>Comment on attachment 407790
Patch

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

Looks good. A few optional ideas for further refinement.

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:53
&gt; +    static NeverDestroyed&lt;RetainPtr&lt;CIContext&gt;&gt; ciContext = [CIContext contextWithOptions: @{ kCIContextWorkingColorSpace: (__bridge id)CGColorSpaceCreateWithName(kCGColorSpaceSRGB)}];

Another way to write this is:

    static auto context = makeNeverDestroyed([CIContext ...]);

I think it’s nicer.

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:156
&gt; +    ImageBuffer* sourceImage = effect.filter().sourceImage();

auto

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:170
&gt; +    Vector&lt;float&gt; values = FEColorMatrix::normalizedFloats(effect.values());

auto

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:190
&gt; +    CIFilter *colorMatrixFilter = [CIFilter filterWithName:@&quot;CIColorMatrix&quot;];

auto

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:252
&gt; +    auto ciContext = getCIContext();

Not sure we need a local variable.

&gt; Source/WebCore/platform/graphics/filters/FilterEffect.h:179
&gt; +        Vector&lt;float&gt; normalizedValues(values.size());
&gt; +        for (size_t i = 0; i &lt; values.size(); ++i)
&gt; +            normalizedValues[i] = normalizedFloat(values[i]);
&gt; +        return normalizedValues;

This could be nicer if it used Vector::map instead of writing a loop.

&gt; Source/WebCore/rendering/CSSFilter.cpp:343
&gt; -        setSourceImage(ImageBuffer::create(logicalSize, renderingMode(), filterScale()));
&gt; +        if (m_filterRenderer)
&gt; +            setSourceImage(ImageBuffer::create(logicalSize, RenderingMode::Accelerated, filterScale()));
&gt; +        else
&gt; +            setSourceImage(ImageBuffer::create(logicalSize, renderingMode(), filterScale()));

Could do it with a local instead of an if statement:

    auto mode = m_filterRenderer ? RenderingMode::Accelerated : renderingMode();
    setSourceImage(ImageBuffer::create(logicalSize, mode, filterScale()));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684948</commentid>
    <comment_count>26</comment_count>
      <attachid>407790</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-09-02 13:25:01 -0700</bug_when>
    <thetext>Comment on attachment 407790
Patch

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

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:47
&gt; +    RetainPtr&lt;CIContext&gt; getCIContext();

This should be a static function. I think you should name it sharedCIContext() to make it clear it returns a global.

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:61
&gt; +    RetainPtr&lt;CIImage&gt; imageForSourceGraphic(SourceGraphic&amp;);

Can the argument be const SourceGraphic&amp;?

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:62
&gt; +    RetainPtr&lt;CIImage&gt; imageForFEColorMatrix(FEColorMatrix&amp;, const Vector&lt;RetainPtr&lt;CIImage&gt;&gt;&amp;);

const FEColorMatrix&amp;

&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:188
&gt; +    case FECOLORMATRIX_TYPE_SATURATE: {
&gt; +        FEColorMatrix::calculateSaturateComponents(components, values[0]);
&gt; +        break;
&gt; +    }
&gt; +    case FECOLORMATRIX_TYPE_HUEROTATE: {
&gt; +        FEColorMatrix::calculateHueRotateComponents(components, values[0]);
&gt; +        break;
&gt; +    }
&gt; +    case FECOLORMATRIX_TYPE_MATRIX:
&gt; +        break;
&gt; +        
&gt; +    case FECOLORMATRIX_TYPE_UNKNOWN:
&gt; +    case FECOLORMATRIX_TYPE_LUMINANCETOALPHA: // FIXME: Add Luminance to Alpha Implementation
&gt; +        return nullptr;
&gt; +    }

You don&apos;t need any of the braces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684951</commentid>
    <comment_count>27</comment_count>
    <who name="">frankhome61</who>
    <bug_when>2020-09-02 13:39:03 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #26)
&gt; Comment on attachment 407790 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=407790&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:47
&gt; &gt; +    RetainPtr&lt;CIContext&gt; getCIContext();
&gt; 
&gt; This should be a static function. I think you should name it
&gt; sharedCIContext() to make it clear it returns a global.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:61
&gt; &gt; +    RetainPtr&lt;CIImage&gt; imageForSourceGraphic(SourceGraphic&amp;);
&gt; 
&gt; Can the argument be const SourceGraphic&amp;?
Unfortunately, I need to access some of the non-const functions in FilterEffect and/or it&apos;s derived class I don&apos;t think this argument could be const
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:62
&gt; &gt; +    RetainPtr&lt;CIImage&gt; imageForFEColorMatrix(FEColorMatrix&amp;, const Vector&lt;RetainPtr&lt;CIImage&gt;&gt;&amp;);
&gt; 
&gt; const FEColorMatrix&amp;
ditto
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:188
&gt; &gt; +    case FECOLORMATRIX_TYPE_SATURATE: {
&gt; &gt; +        FEColorMatrix::calculateSaturateComponents(components, values[0]);
&gt; &gt; +        break;
&gt; &gt; +    }
&gt; &gt; +    case FECOLORMATRIX_TYPE_HUEROTATE: {
&gt; &gt; +        FEColorMatrix::calculateHueRotateComponents(components, values[0]);
&gt; &gt; +        break;
&gt; &gt; +    }
&gt; &gt; +    case FECOLORMATRIX_TYPE_MATRIX:
&gt; &gt; +        break;
&gt; &gt; +        
&gt; &gt; +    case FECOLORMATRIX_TYPE_UNKNOWN:
&gt; &gt; +    case FECOLORMATRIX_TYPE_LUMINANCETOALPHA: // FIXME: Add Luminance to Alpha Implementation
&gt; &gt; +        return nullptr;
&gt; &gt; +    }
&gt; 
&gt; You don&apos;t need any of the braces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684959</commentid>
    <comment_count>28</comment_count>
    <who name="">frankhome61</who>
    <bug_when>2020-09-02 13:45:27 -0700</bug_when>
    <thetext>(In reply to guowei_yang from comment #27)
&gt; (In reply to Simon Fraser (smfr) from comment #26)
&gt; &gt; Comment on attachment 407790 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=407790&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:47
&gt; &gt; &gt; +    RetainPtr&lt;CIContext&gt; getCIContext();
&gt; &gt; 
&gt; &gt; This should be a static function. I think you should name it
&gt; &gt; sharedCIContext() to make it clear it returns a global.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:61
&gt; &gt; &gt; +    RetainPtr&lt;CIImage&gt; imageForSourceGraphic(SourceGraphic&amp;);
&gt; &gt; 
&gt; &gt; Can the argument be const SourceGraphic&amp;?
&gt; Unfortunately, I need to access some of the non-const functions in
&gt; FilterEffect and/or it&apos;s derived class I don&apos;t think this argument could be
&gt; const
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:62
&gt; &gt; &gt; +    RetainPtr&lt;CIImage&gt; imageForFEColorMatrix(FEColorMatrix&amp;, const Vector&lt;RetainPtr&lt;CIImage&gt;&gt;&amp;);
&gt; &gt; 
&gt; &gt; const FEColorMatrix&amp;
&gt; ditto
Actually, this can be const, but not SourceGraphic, since FilterEffect::filter() is not const
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:188
&gt; &gt; &gt; +    case FECOLORMATRIX_TYPE_SATURATE: {
&gt; &gt; &gt; +        FEColorMatrix::calculateSaturateComponents(components, values[0]);
&gt; &gt; &gt; +        break;
&gt; &gt; &gt; +    }
&gt; &gt; &gt; +    case FECOLORMATRIX_TYPE_HUEROTATE: {
&gt; &gt; &gt; +        FEColorMatrix::calculateHueRotateComponents(components, values[0]);
&gt; &gt; &gt; +        break;
&gt; &gt; &gt; +    }
&gt; &gt; &gt; +    case FECOLORMATRIX_TYPE_MATRIX:
&gt; &gt; &gt; +        break;
&gt; &gt; &gt; +        
&gt; &gt; &gt; +    case FECOLORMATRIX_TYPE_UNKNOWN:
&gt; &gt; &gt; +    case FECOLORMATRIX_TYPE_LUMINANCETOALPHA: // FIXME: Add Luminance to Alpha Implementation
&gt; &gt; &gt; +        return nullptr;
&gt; &gt; &gt; +    }
&gt; &gt; 
&gt; &gt; You don&apos;t need any of the braces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684969</commentid>
    <comment_count>29</comment_count>
    <who name="">frankhome61</who>
    <bug_when>2020-09-02 14:00:24 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #25)
&gt; Comment on attachment 407790 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=407790&amp;action=review
&gt; 
&gt; Looks good. A few optional ideas for further refinement.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:53
&gt; &gt; +    static NeverDestroyed&lt;RetainPtr&lt;CIContext&gt;&gt; ciContext = [CIContext contextWithOptions: @{ kCIContextWorkingColorSpace: (__bridge id)CGColorSpaceCreateWithName(kCGColorSpaceSRGB)}];
&gt; 
&gt; Another way to write this is:
&gt; 
&gt;     static auto context = makeNeverDestroyed([CIContext ...]);
Seems that using auto will resolve the return type to be WTF::NeverDestroyed&lt;CIContext *, WTF::AnyThreadsAccessTraits&gt;, which didn&apos;t get converted to RetainPtr, so I am keeping it as is
&gt; 
&gt; I think it’s nicer.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:156
&gt; &gt; +    ImageBuffer* sourceImage = effect.filter().sourceImage();
&gt; 
&gt; auto
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:170
&gt; &gt; +    Vector&lt;float&gt; values = FEColorMatrix::normalizedFloats(effect.values());
&gt; 
&gt; auto
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:190
&gt; &gt; +    CIFilter *colorMatrixFilter = [CIFilter filterWithName:@&quot;CIColorMatrix&quot;];
&gt; 
&gt; auto
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:252
&gt; &gt; +    auto ciContext = getCIContext();
&gt; 
&gt; Not sure we need a local variable.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/filters/FilterEffect.h:179
&gt; &gt; +        Vector&lt;float&gt; normalizedValues(values.size());
&gt; &gt; +        for (size_t i = 0; i &lt; values.size(); ++i)
&gt; &gt; +            normalizedValues[i] = normalizedFloat(values[i]);
&gt; &gt; +        return normalizedValues;
&gt; 
&gt; This could be nicer if it used Vector::map instead of writing a loop.
&gt; 
&gt; &gt; Source/WebCore/rendering/CSSFilter.cpp:343
&gt; &gt; -        setSourceImage(ImageBuffer::create(logicalSize, renderingMode(), filterScale()));
&gt; &gt; +        if (m_filterRenderer)
&gt; &gt; +            setSourceImage(ImageBuffer::create(logicalSize, RenderingMode::Accelerated, filterScale()));
&gt; &gt; +        else
&gt; &gt; +            setSourceImage(ImageBuffer::create(logicalSize, renderingMode(), filterScale()));
&gt; 
&gt; Could do it with a local instead of an if statement:
&gt; 
&gt;     auto mode = m_filterRenderer ? RenderingMode::Accelerated :
&gt; renderingMode();
&gt;     setSourceImage(ImageBuffer::create(logicalSize, mode, filterScale()));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684971</commentid>
    <comment_count>30</comment_count>
      <attachid>407804</attachid>
    <who name="">frankhome61</who>
    <bug_when>2020-09-02 14:03:00 -0700</bug_when>
    <thetext>Created attachment 407804
Ready for commit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684983</commentid>
    <comment_count>31</comment_count>
      <attachid>407790</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-02 14:17:22 -0700</bug_when>
    <thetext>Comment on attachment 407790
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:53
&gt;&gt;&gt; +    static NeverDestroyed&lt;RetainPtr&lt;CIContext&gt;&gt; ciContext = [CIContext contextWithOptions: @{ kCIContextWorkingColorSpace: (__bridge id)CGColorSpaceCreateWithName(kCGColorSpaceSRGB)}];
&gt;&gt; 
&gt;&gt; Another way to write this is:
&gt;&gt; 
&gt;&gt;     static auto context = makeNeverDestroyed([CIContext ...]);
&gt;&gt; 
&gt;&gt; I think it’s nicer.
&gt; 
&gt; Seems that using auto will resolve the return type to be WTF::NeverDestroyed&lt;CIContext *, WTF::AnyThreadsAccessTraits&gt;, which didn&apos;t get converted to RetainPtr, so I am keeping it as is

Yes, overlooked that. It would need to be:

    static auto context = makeNeverDestroyed(retainPtr([CIContext ...]));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685073</commentid>
    <comment_count>32</comment_count>
      <attachid>407837</attachid>
    <who name="">frankhome61</who>
    <bug_when>2020-09-02 17:23:08 -0700</bug_when>
    <thetext>Created attachment 407837
Ready for Commit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685417</commentid>
    <comment_count>33</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-03 13:51:17 -0700</bug_when>
    <thetext>guowei_yang@apple.com does not have committer permissions according to https://svn.webkit.org/repository/webkit/trunk/Tools/Scripts/webkitpy/common/config/contributors.json.

Rejecting attachment 407837 from commit queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685421</commentid>
    <comment_count>34</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-03 14:04:11 -0700</bug_when>
    <thetext>Committed r266542: &lt;https://trac.webkit.org/changeset/266542&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 407837.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405293</attachid>
            <date>2020-07-27 10:49:10 -0700</date>
            <delta_ts>2020-08-28 15:31:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213673-20200727104909.patch</filename>
            <type>text/plain</type>
            <size>13441</size>
            <attacher>frankhome61</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0OTMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDI5OTc3ZDFjM2I2MjRk
YTNiNzg2NGE3YjgxNDIyMzljMTNlNDM4Ni4uZmE2N2QwNTczNDJkOTk0N2RhMGEwMjE3MzY5MDIw
MGM5MTAwM2E2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDIwLTA3LTI3ICBHdW93
ZWkgWWFuZyAgPGd1b3dlaV95YW5nQGFwcGxlLmNvbT4KKworICAgICAgICBDb3JlSW1hZ2UgSW1w
bGVtZW50YXRpb24gb2YgU291cmNlR3JhcGhpYyBhbmQgc2F0dXJhdGUsIGh1ZS1yb3RhdGUsIGdy
YXlzY2FsZSBhbmQgc2VwaWEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxMzY3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5ldyB0ZXN0cyB3aWxsIGJlIGFkZGVkIHNob3J0bHkKKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5o
OiBhZGRlZCB0d28gZnVuY3Rpb25zCisgICAgICAgICAgIGZlU291cmNlR3JhcGhpY0ltYWdlIGFu
ZCBmZUNvbG9yTWF0cml4SW1hZ2UsIHRoYXQgY3JlYXRlcyBjb3JyZXNwb25kaW5nIAorICAgICAg
ICAgICBDSUZpbHRlcnMKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW06CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcpOiAKKyAg
ICAgICAgICAgcmV0dXJucyB0cnVlIGZvciBTb3VyY2VHcmFwaGljIGFuZCBGRUNvbG9yTWF0cml4
IG9mIHR5cGUgTUFUUklYLCBTQVRVUkFURSBhbmQgSFVFUk9UQVRFCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyk6IAorICAg
ICAgICAgICB1cGRhdGVkIGNvZGUgdGhhdCBjb25uZWN0cyBTb3VyY2VHcmFwaGljIHdpdGggQ29s
b3IgTWF0cml4IENJRmlsdGVycworICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2U6OmZlU291cmNlR3JhcGhpY0ltYWdlKTogZnVuY3Rpb24KKyAgICAgICAgICAg
dGhhdCBwcm9kdWNlcyBhIENJSW1hZ2UgdXNpbmcgdGhlIFNvdXJjZUdyYXBoaWMncyBDR0ltYWdl
UmVmCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6ZmVD
b2xvck1hdHJpeEltYWdlKTogcHJvZHVjZXMgCisgICAgICAgICAgIGEgQ0lJbWFnZSB0aGF0IGlz
IHRoZSBvdXRwdXQgb2YgQ29sb3IgTWF0cml4IENJRmlsdGVyCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y2xlYXJSZXN1bHQpOiBjbGVhcnMgcmVzdWx0
IHRvIGF2b2lkIG1lbW9yeQorICAgICAgICAgICBsZWFrCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4Lmg6CisgICAgICAgICAgICBmcmllbmRlZCBGaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZSBzbyB0aGF0IGl0IGNvdWxkIGFjY2VzcyBwcm90ZWN0
ZWQgbWVtYmVyIAorICAgICAgICAgICAgZnVuY3Rpb25zCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhIGNvbnN0KTogcmVtb3ZlZCB0
aGUgQVNTRVJUIAorICAgICAgICAgICAgc3RhdGVtZW50IGJlY2F1c2UgaWYgd2UgdXNlIHRoZSBy
ZW5kZXJlciwgdGhlIGFzc2VydCBzdGF0ZW1lbnQgd2lsbCBjcmFzaCB0aGUgcHJvZ3JhbQorCiAy
MDIwLTA3LTI3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBz
Y2FsZVJlc29sdXRpb25Eb3duQnkgaGFzIG5vIGVmZmVjdCBvbiBSVENSdHBTZW5kZXIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgKaW5kZXggODFlYzU3
ZTY4YjE5MmVjODM2YTdiZDE4YTI4YWUzZGU3MzU0MWQxMS4uZDBkOGMxZjQ0MDU2MTBmZjhlZTc0
NDU1NDNlODZjZDAzZWM3ZGJjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlLmgKQEAgLTU3LDYgKzU3LDkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMg
Ym9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3QmKTsKICAgICBzdGF0
aWMgYm9vbCBjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJFZmZlY3QmKTsKICAgICAKKyAg
ICBDSUltYWdlKiBmZVNvdXJjZUdyYXBoaWNJbWFnZShGaWx0ZXJFZmZlY3QmKTsKKyAgICBDSUlt
YWdlKiBmZUNvbG9yTWF0cml4SW1hZ2UoRmlsdGVyRWZmZWN0JiwgVmVjdG9yPENJSW1hZ2UqPiYp
OworICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9vdXRwdXRJbWFnZUJ1
ZmZlcjsKICAgICBIYXNoTWFwPFJlZjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmV0YWluUHRyPENJ
RmlsdGVyPj4+IG1fY2lGaWx0ZXJTdG9yYWdlTWFwOwogICAgIFJldGFpblB0cjxDSUltYWdlPiBt
X291dHB1dEltYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlLm1tCmluZGV4IDkzMTNmNzFlNmVmYmE4NDZkNjY1NTFlMTMwOTM5MTllMDgzZGQ4NGMu
LjlhOWI4MWY1ZWRjODU4YWM2NjZlOWRhMzMwODM5MWU2YjI0OGU4MWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KQEAgLTI4LDExICsyOCwx
MyBAQAogCiAjaWYgVVNFKENPUkVfSU1BR0UpCiAKKyNpbXBvcnQgIkZFQ29sb3JNYXRyaXguaCIK
ICNpbXBvcnQgIkZpbHRlci5oIgogI2ltcG9ydCAiRmlsdGVyRWZmZWN0LmgiCiAjaW1wb3J0ICJH
cmFwaGljc0NvbnRleHRDRy5oIgogI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKICNpbXBvcnQgIlBs
YXRmb3JtSW1hZ2VCdWZmZXIuaCIKKyNpbXBvcnQgIlNvdXJjZUdyYXBoaWMuaCIKICNpbXBvcnQg
PENvcmVJbWFnZS9DSUNvbnRleHQuaD4KICNpbXBvcnQgPENvcmVJbWFnZS9DSUZpbHRlci5oPgog
I2ltcG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgpAQCAtNTAsOCArNTIsMjUgQEAgYm9vbCBG
aWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmco
RmlsdGVyRWZmZWN0JiBlZmYKIHsKICAgICAvLyBGSVhNRTogY2hhbmdlIHJldHVybiB2YWx1ZSB0
byB0cnVlIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQKICAgICBzd2l0Y2ggKGVmZmVjdC5maWx0
ZXJFZmZlY3RDbGFzc1R5cGUoKSkgeworICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3Vy
Y2VHcmFwaGljOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpHYXVzc2lhbkJsdXI6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
CisgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OiB7CisgICAgICAgIEZF
Q29sb3JNYXRyaXgmIGNvbG9yTWF0cml4RWZmZWN0ID0gc3RhdGljX2Nhc3Q8RkVDb2xvck1hdHJp
eCY+KGVmZmVjdCk7CisgICAgICAgIHN3aXRjaCAoY29sb3JNYXRyaXhFZmZlY3QudHlwZSgpKSB7
CisgICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKKyAgICAgICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6CisgICAgICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX0hVRVJPVEFURToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgfQogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpCbGVuZDoKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg6CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkNvbXBvbmVudFRyYW5zZmVyOgogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21w
b3NpdGU6CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbnZvbHZlTWF0cml4OgpAQCAt
NTksNyArNzgsNiBAQCBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzdXBwb3J0
c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3QmIGVmZgogICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpEaXNwbGFjZW1lbnRNYXA6CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkRyb3BTaGFkb3c6CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6CiAgICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkltYWdlOgogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGluZzoK
ICAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6CkBAIC02OSw3ICs4Nyw2IEBAIGJv
b2wgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVy
aW5nKEZpbHRlckVmZmVjdCYgZWZmCiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlRpbGU6
CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlR1cmJ1bGVuY2U6CiAgICAgY2FzZSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpTb3VyY2VHcmFwaGljOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVy
biBmYWxzZTsKQEAgLTEwMSw4ICsxMTgsMTIgQEAgQ0lJbWFnZSogRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCiAgICAg
CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aG9zZSBmaWx0ZXJzIHVzaW5nIENJRmlsdGVyIHNv
IHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB2YWxpZCBDSUltYWdlCiAgICAgc3dpdGNoIChl
ZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkpIHsKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6QmxlbmQ6CisgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM6
CisgICAgICAgIHJldHVybiBmZVNvdXJjZUdyYXBoaWNJbWFnZShlZmZlY3QpOwogICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDoKKyAgICAgICAgcmV0dXJuIGZlQ29sb3JN
YXRyaXhJbWFnZShlZmZlY3QsIGlucHV0SW1hZ2VzKTsKKyAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6R2F1c3NpYW5CbHVyOgorICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpCbGVuZDoK
ICAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6CiAgICAgY2Fz
ZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvc2l0ZToKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6Q29udm9sdmVNYXRyaXg6CkBAIC0xMTAsNyArMTMxLDYgQEAgQ0lJbWFnZSogRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0JiBl
ZmZlY3QpCiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVudE1hcDoKICAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKICAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkdhdXNzaWFu
Qmx1cjoKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6CiAgICAgY2FzZSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkxpZ2h0aW5nOgogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpN
ZXJnZToKQEAgLTEyMCwxMyArMTQwLDc2IEBAIENJSW1hZ2UqIEZpbHRlckVmZmVjdFJlbmRlcmVy
Q29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0KQogICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUaWxlOgogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpUdXJidWxlbmNlOgogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYzoKICAgICBkZWZhdWx0
OgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKK0NJSW1hZ2UqIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpmZVNvdXJjZUdyYXBo
aWNJbWFnZShGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKK3sKKyAgICBTb3VyY2VHcmFwaGljJiBzb3Vy
Y2VHcmFwaGljRWZmZWN0ID0gc3RhdGljX2Nhc3Q8U291cmNlR3JhcGhpYyY+KGVmZmVjdCk7Cisg
ICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gc291cmNlR3JhcGhpY0VmZmVjdC5maWx0ZXIo
KS5zb3VyY2VJbWFnZSgpOworICAgIGlmICghc291cmNlSW1hZ2UpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIE5hdGl2ZUltYWdlUHRyIHNvdXJjZUNHSW1hZ2VSZWYgPSBzb3VyY2VJbWFn
ZS0+Y29weU5hdGl2ZUltYWdlKCk7CisgICAgcmV0dXJuIFtDSUltYWdlIGltYWdlV2l0aENHSW1h
Z2U6c291cmNlQ0dJbWFnZVJlZi5nZXQoKV07Cit9CisKK0NJSW1hZ2UqIEZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjpmZUNvbG9yTWF0cml4SW1hZ2UoRmlsdGVyRWZmZWN0JiBlZmZlY3Qs
IFZlY3RvcjxDSUltYWdlKj4mIGlucHV0SW1hZ2VzKQoreworCisgICAgQ0lJbWFnZSogaW5wdXRJ
bWFnZSA9IGlucHV0SW1hZ2VzLmF0KDApOworICAgIEZFQ29sb3JNYXRyaXgmIGNvbG9yTWF0cml4
RWZmZWN0ID0gc3RhdGljX2Nhc3Q8RkVDb2xvck1hdHJpeCY+KGVmZmVjdCk7CisgICAgVmVjdG9y
PGZsb2F0PiB2YWx1ZXMgPSBGRUNvbG9yTWF0cml4Ojpub3JtYWxpemVkRmxvYXRzKGNvbG9yTWF0
cml4RWZmZWN0LnZhbHVlcygpKTsKKyAgICBmbG9hdCBjb21wb25lbnRzWzldOworICAgIAorICAg
IHN3aXRjaCAoY29sb3JNYXRyaXhFZmZlY3QudHlwZSgpKSB7CisgICAgY2FzZSBGRUNPTE9STUFU
UklYX1RZUEVfU0FUVVJBVEU6IHsKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0
dXJhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6IHsKKyAgICAgICAg
RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2
YWx1ZXNbMF0pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfTUFUUklYOgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfVU5LTk9XTjoKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFO
Q0VUT0FMUEhBOiAvLyBGSVhNRTogQWRkIEx1bWluYW5jZSB0byBBbHBoYSBJbXBsZW1lbnRhdGlv
bgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgQ0lGaWx0ZXIqIGNv
bG9yTWF0cml4RmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJp
eCJdOworICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlIGZvcktleTpr
Q0lJbnB1dEltYWdlS2V5XTsKKyAgICAKKyAgICBzd2l0Y2ggKGNvbG9yTWF0cml4RWZmZWN0LnR5
cGUoKSkgeworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogeworICAgICAgICBbY29sb3JNYXRyaXhGaWx0
ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNbMF0gWTpjb21wb25l
bnRzWzFdIFo6Y29tcG9uZW50c1syXSBXOjBdIGZvcktleTpAImlucHV0UlZlY3RvciJdOworICAg
ICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNv
bXBvbmVudHNbM10gWTpjb21wb25lbnRzWzRdIFo6Y29tcG9uZW50c1s1XSBXOjBdIGZvcktleTpA
ImlucHV0R1ZlY3RvciJdOworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJ
VmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNbNl0gWTpjb21wb25lbnRzWzddIFo6Y29tcG9u
ZW50c1s4XSBXOjBdIGZvcktleTpAImlucHV0QlZlY3RvciJdOworICAgICAgICBbY29sb3JNYXRy
aXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgICAgICAgICAgICAgWTow
ICAgICAgICAgICAgIFo6MCAgICAgICAgICAgICBXOjFdIGZvcktleTpAImlucHV0QVZlY3RvciJd
OworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3Rvcldp
dGhYOjAgICAgICAgICAgICAgWTowICAgICAgICAgICAgIFo6MCAgICAgICAgICAgICBXOjBdIGZv
cktleTpAImlucHV0Qmlhc1ZlY3RvciJdOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRl
ciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzBdICBZOnZhbHVlc1sxXSAg
Wjp2YWx1ZXNbMl0gIFc6dmFsdWVzWzNdXSAgZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07CisgICAg
ICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFs
dWVzWzVdICBZOnZhbHVlc1s2XSAgWjp2YWx1ZXNbN10gIFc6dmFsdWVzWzhdXSAgZm9yS2V5OkAi
aW5wdXRHVmVjdG9yIl07CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lW
ZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzEwXSBZOnZhbHVlc1sxMV0gWjp2YWx1ZXNbMTJdIFc6
dmFsdWVzWzEzXV0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07CisgICAgICAgIFtjb2xvck1hdHJp
eEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzE1XSBZOnZhbHVl
c1sxNl0gWjp2YWx1ZXNbMTddIFc6dmFsdWVzWzE4XV0gZm9yS2V5OkAiaW5wdXRBVmVjdG9yIl07
CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0
aFg6dmFsdWVzWzRdICBZOnZhbHVlc1s5XSAgWjp2YWx1ZXNbMTRdIFc6dmFsdWVzWzE5XV0gZm9y
S2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgorICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX1VOS05PV046CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAg
ICAgCisgICAgcmV0dXJuIGNvbG9yTWF0cml4RmlsdGVyLm91dHB1dEltYWdlOworfQorCiBib29s
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhG
aWx0ZXJFZmZlY3QmIGVmZmVjdCkKIHsKICAgICBpZiAoIXN1cHBvcnRzQ29yZUltYWdlUmVuZGVy
aW5nKGVmZmVjdCkpCkBAIC0xNzcsNyArMjYwLDYgQEAgdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZTo6Y2xlYXJSZXN1bHQoKQogICAgIG1fb3V0cHV0SW1hZ2VCdWZmZXIucmVzZXQo
KTsKICAgICBtX2NpRmlsdGVyU3RvcmFnZU1hcC5jbGVhcigpOwogICAgIG1fb3V0cHV0SW1hZ2Ug
PSBudWxscHRyOwotICAgIG1fY29udGV4dCA9IG51bGxwdHI7CiB9CiAKIEZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRy
aXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5oCmluZGV4IDA5MGU2ODJlOGE3NWUwNWIwMjY1ZWNmMmZmMWJiM2NlNjJjNDA2NjkuLjI4
ZGU1NDZiNTllNmNjMDNlMjQ0Zjk4YjM4ZDQ0ODFmZDgxZWFmODYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5o
CkBAIC0zOCw2ICszOCw3IEBAIGVudW0gQ29sb3JNYXRyaXhUeXBlIHsKIAogY2xhc3MgRkVDb2xv
ck1hdHJpeCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgorICAgIGZyaWVuZCBjbGFz
cyBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTsKICAgICBzdGF0aWMgUmVmPEZFQ29sb3JN
YXRyaXg+IGNyZWF0ZShGaWx0ZXImLCBDb2xvck1hdHJpeFR5cGUsIGNvbnN0IFZlY3RvcjxmbG9h
dD4mKTsKIAogICAgIENvbG9yTWF0cml4VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5kZXggNzU2MmZkZDYwNTg2N2Y2MjhjYTMyYzMxNWM5ZDM3
MjkwMzc2ZjM4OC4uN2UxM2NmZjY2M2RhYmYyODM4MzZhYjk3YjYyNjNkZWUxMTRmNDJkOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmNwcApAQCAtNzksNyArNzksNiBAQCBGbG9hdFBvaW50IEZpbHRlckVmZmVj
dDo6bWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoRmxvYXRQb2ludCB1c2VyU3BhY2VQb2lu
dAogCiBJbnRSZWN0IEZpbHRlckVmZmVjdDo6cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0
YShjb25zdCBJbnRSZWN0JiBlZmZlY3RSZWN0KSBjb25zdAogewotICAgIEFTU0VSVChoYXNSZXN1
bHQoKSk7CiAgICAgSW50UG9pbnQgbG9jYXRpb24gPSBtX2Fic29sdXRlUGFpbnRSZWN0LmxvY2F0
aW9uKCk7CiAgICAgbG9jYXRpb24ubW92ZUJ5KC1lZmZlY3RSZWN0LmxvY2F0aW9uKCkpOwogICAg
IHJldHVybiBJbnRSZWN0KGxvY2F0aW9uLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCmluZGV4IDUzZTkyOTU0NGEzYTgwZjli
Nzk1Zjg0OGUyOTAwNDJiZWJkMDk0MzEuLjIyZWI5MDI5Zjc4YTBhNTU1ZTZmZTdhNzNhYzI2N2Zh
YTExZjlmOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCkBAIC0zNjQs
NiArMzY0LDggQEAgdm9pZCBDU1NGaWx0ZXI6OmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpCiAg
ICAgICAgIG1fc291cmNlQWxwaGEtPmNsZWFyUmVzdWx0KCk7CiAgICAgZm9yIChhdXRvJiBlZmZl
Y3QgOiBtX2VmZmVjdHMpCiAgICAgICAgIGVmZmVjdC0+Y2xlYXJSZXN1bHQoKTsKKyAgICBpZiAo
bV9maWx0ZXJSZW5kZXJlcikKKyAgICAgICAgbV9maWx0ZXJSZW5kZXJlci0+Y2xlYXJSZXN1bHQo
KTsKIH0KIAogdm9pZCBDU1NGaWx0ZXI6OmFwcGx5KCkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvTW90aW9uTWFyay90ZXN0cy9tYXN0ZXIvcmVzb3VyY2VzL2ZvY3VzLmpzIGIvUGVyZm9y
bWFuY2VUZXN0cy9Nb3Rpb25NYXJrL3Rlc3RzL21hc3Rlci9yZXNvdXJjZXMvZm9jdXMuanMKaW5k
ZXggYWU1MWU1ZDhmZTlhZDRhZDAyNDcwMjMzMWQxYWIxMGFmYTU2NmNiZC4uZThkOGFiNTM5MGQ0
Y2U5NzA4ZTM3NjA0MDI5ZjI3NDRiYmE5MzUxNCAxMDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9Nb3Rpb25NYXJrL3Rlc3RzL21hc3Rlci9yZXNvdXJjZXMvZm9jdXMuanMKKysrIGIvUGVyZm9y
bWFuY2VUZXN0cy9Nb3Rpb25NYXJrL3Rlc3RzL21hc3Rlci9yZXNvdXJjZXMvZm9jdXMuanMKQEAg
LTgwLDggKzgwLDggQEAgdmFyIEZvY3VzRWxlbWVudCA9IFV0aWxpdGllcy5jcmVhdGVDbGFzcygK
ICAgICAgICAgdmFyIGJsdXIgPSBVdGlsaXRpZXMubGVycChkaXN0YW5jZSwgbWluQmx1clZhbHVl
LCBtYXhCbHVyVmFsdWUpOwogICAgICAgICB2YXIgb3BhY2l0eSA9IE1hdGgubWF4KDUsIG9wYWNp
dHlNdWx0aXBsaWVyICogKDEgLSBkaXN0YW5jZSkpOwogCi0gICAgICAgIFV0aWxpdGllcy5zZXRF
bGVtZW50UHJlZml4ZWRQcm9wZXJ0eSh0aGlzLnBhcnRpY2xlLCAiZmlsdGVyIiwgImJsdXIoIiAr
IGJsdXIgKyAicHgpIG9wYWNpdHkoIiArIG9wYWNpdHkgKyAiJSkiKTsKLSAgICAgICAgdGhpcy5w
YXJ0aWNsZS5zdHlsZS50cmFuc2Zvcm0gPSAidHJhbnNsYXRlM2QoIiArIGxlZnQgKyAiJSwgIiAr
IHRvcCArICIlLCAwKSI7CisgICAgICAgIFV0aWxpdGllcy5zZXRFbGVtZW50UHJlZml4ZWRQcm9w
ZXJ0eSh0aGlzLnBhcnRpY2xlLCAiZmlsdGVyIiwgInNhdHVyYXRlKCIgKyBibHVyICsgIiUpIik7
CisgICAgICAgIHRoaXMucGFydGljbGUuc3R5bGUudHJhbnNmb3JtID0gInRyYW5zbGF0ZTJkKCIg
KyBsZWZ0ICsgIiUsICIgKyB0b3AgKyAiJSwgMCkiOwogICAgIH0KIH0pOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407508</attachid>
            <date>2020-08-28 15:31:47 -0700</date>
            <delta_ts>2020-08-31 19:14:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213673-20200828153146.patch</filename>
            <type>text/plain</type>
            <size>26959</size>
            <attacher>frankhome61</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MjgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWMxZjViYzkyNTFjNDRm
ZTM5OTQ1YmJlNjkzMzUzNTNhMGFiZmJmZC4uN2U3ZTcxMGZhYWQ2ZWJiYzk5MDlkNjVhZmFlYjUz
NWRkOWIwYzNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIwLTA4LTI4ICBGcmFu
ayBZYW5nICA8Z3Vvd2VpX3lhbmdAYXBwbGUuY29tPgorCisgICAgICAgIENvcmVJbWFnZSBJbXBs
ZW1lbnRhdGlvbiBvZiBTb3VyY2VHcmFwaGljIGFuZCBzYXR1cmF0ZSwgaHVlLXJvdGF0ZSwgZ3Jh
eXNjYWxlIGFuZCBzZXBpYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjEzNjczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGVzdHM6IGNzczMvZmlsdGVycy9lZmZlY3QtZ3JheXNjYWxlLXNxdWFyZS5odG1s
CisgICAgICAgICAgICAgICBjc3MzL2ZpbHRlcnMvZWZmZWN0LWh1ZS1yb3RhdGUtc3F1YXJlLmh0
bWwKKyAgICAgICAgICAgICAgIGNzczMvZmlsdGVycy9lZmZlY3Qtc2F0dXJhdGUtc3F1YXJlLmh0
bWwKKyAgICAgICAgICAgICAgIGNzczMvZmlsdGVycy9lZmZlY3Qtc2VwaWEtc3F1YXJlLmh0bWwK
KworICAgICAgICBBZGRlZCBDb3JlSW1hZ2UgaW1wbGVtZW50YXRpb24gb2YgU291cmNlR3JhcGhp
YyBhbmQgcGFydGlhbCBvZiBGRUNvbG9yTWF0cml4LCAKKyAgICAgICAgd2hpY2ggaXMgdXNlZCB0
byBpbXBsZW1lbnQgc2VwaWEoKSwgZ3JheXNjYWxlKCkgaHVlLXJvdGF0ZSgpIGFuZCBzYXR1cmF0
ZSgpLgorICAgICAgICBBbHNvIGFkZGVkIENJRmlsdGVyIGNhY2hpbmcsIGJ5IHN0b3JpbmcgQ0lG
aWx0ZXJzIGluIGEgaGFzaCBtYXAsIHdoZXJlIHRoZSBrZXkgCisgICAgICAgIGlzIHRoZSBsZXZl
bCBvZiB0cmF2ZXJzYWwgKGFuIGludGVnZXIpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmg6CisgICAgICAgICAg
ICBJbXBvcnRlZCBGRUNvbG9yTWF0cml4LmggYW5kIFNvdXJjZUdyYXBoaWMuaDsgYWRkZWQgZnVu
Y3Rpb24gZ2V0Q0lDb250ZXh0KCkKKyAgICAgICAgICAgIHRoYXQgcmV0dXJucyBhIHN0YXRpYyBj
b3B5IG9mIENJQ29udGV4dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2Uv
RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW06CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Z2V0Q0lDb250ZXh0KTogQ3JlYXRpbmcgYSAKKyAg
ICAgICAgICAgIENJQ29udGV4dCBpcyBleHBlbnNpdmUuIEluc3RlYWQgb2YgY3JlYXRpbmcgYSBD
SUNvbnRleHQgb24gZWFjaCBmcmFtZQorICAgICAgICAgICAgdXBkYXRlLCB3ZSBqdXN0IHVzZSBh
IHN0YXRpYyBzaW5nbGV0b24gb24gZXZlcnkgZHJhdworICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKToKKyAg
ICAgICAgICAgIHRoZSBmdW5jdGlvbiBub3cgcmV0dXJucyB0cnVlIGlmIHRoZSBmaWx0ZXIgY2hh
aW4gY29udGFpbnMgU291cmNlR3JhcGhpYworICAgICAgICAgICAgYW5kIEZFQ29sb3JNYXRyaXgg
b2YgVFlQRV9NQVRSSVgsIFRZUEVfU0FUVVJBVEUgYW5kIFRZUEVfSFVFUk9UQVRFCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6YXBwbHlFZmZlY3RzKToK
KyAgICAgICAgICAgIHBhc3NlZCBpbiB0cmF2ZXJzYWwgb3JkZXIgdG8gY29ubmVjdENpRmlsdGVy
cygpLiBXZSBwYXNzIDEgYXMgdGhlIGZpcnN0IGxldmVsCisgICAgICAgICAgICBvZiBmaWx0ZXIg
Z3JhcGggdHJhdmVyc2FsCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyk6IFBhc3NlZCBpbiBhbiBpbnRlZ2VyIAorICAgICAg
ICAgICAgdGhhdCBpbmNyZW1lbnRzIGJ5IG9uZSB3aGVuIHdlIHRyYXZlcnNlIHRoZSBmaWx0ZXIg
Z3JhcGggYnkgb25lIGxldmVsIGRlZXBlci4gCisgICAgICAgICAgICBUaGlzIGludGVnZXIgd2ls
bCBiZSB1c2VkIGFzIGhhc2ggbWFwIGtleSB0byByZXRyaWV2ZSBjYWNoZWQgQ0lGaWx0ZXJzCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6ZmVTb3VyY2VH
cmFwaGljSW1hZ2UpOgorICAgICAgICAgICAgVXNlIHRoZSBzb3VyY2UgaW1hZ2UgdG8gY3JlYXRl
IGEgQ0lJbWFnZSBhbmQgcmV0dXJuIGl0LiBJZiB0aGUgc291cmNlIGltYWdlIAorICAgICAgICAg
ICAgaXMgYmFja2VkIGJ5IElPU3VyZmFjZSwgd2UgY3JlYXRlIGEgQ0lJbWFnZSBkaXJlY3RseSBm
cm9tIHRoZSBJT1N1cmZhY2U7IG90aGVyd2lzZQorICAgICAgICAgICAgd2UgY3JlYXRlIGEgQ0lJ
bWFnZSBieSBnZXR0aW5nIHRoZSBOYXRpdmVJbWFnZVB0ciBmcm9tIHNvdXJjZSBpbWFnZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpmZUNvbG9yTWF0
cml4SW1hZ2UpOgorICAgICAgICAgICAgQmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlIG1hdHJpeCBh
bmQgaW5wdXQgcGFyYW1ldGVyLCAKKyAgICAgICAgICAgIGNyZWF0ZSBkaWZmZXJlbnQgdHlwZXMg
b2YgQ0lDb2xvck1hdHJpeCBmaWxlcnMgdGhhdCBhcmUgdXNlZCB0byBpbXBsZW1lbnQgCisgICAg
ICAgICAgICBzZXBpYSwgZ3JheXNjYWxlLCBodWUtcm90YXRlLCBzYXR1cmF0ZQorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6Om91dHB1dCBjb25zdCk6IAor
ICAgICAgICAgICAgQWRkZWQgYSBsb2dnaW5nIGxpbmUKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpyZW5kZXJUb0ltYWdlQnVmZmVyKToKKyAgICAgICAg
ICAgIFVzZXMgQ0lSZW5kZXJEZXN0aW5hdGlvbiBpbnN0ZWFkIHRvIHJlbmRlciBDSUltYWdlcyB0
byBJT1N1cmZhY2VzLiBUaGlzIHdpbGwgYXZvaWQgCisgICAgICAgICAgICB3YWl0cyBvbiB0aGUg
Q29yZUltYWdlIHNpZGUuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZTo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2U6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6IAorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhIGNv
bnN0KTogcmVtb3ZlZCAKKyAgICAgICAgICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7IGZyb20gdGhl
IGZ1bmN0aW9uLCBiZWNhdXNlIENvcmVJbWFnZSBwYXRoIHdvdWxkbid0IGNyZWF0ZSAKKyAgICAg
ICAgICAgIGltYWdlIGJ1ZmZlcnMgaW5zaWRlIEZpbHRlckVmZmVjdCwgYnV0IENJIHBhdGggc3Rp
bGwgbmVlZHMgdG8gY29uc3VsdCB0aGlzIGZ1bmN0aW9uCisgICAgICAgICAgICB0byBvYnRhaW4g
Z2VvbWV0cnkgaW5mbworICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpub3JtYWxpemVk
RmxvYXRzKTogQ2hhbmdlZCB0aGlzIGZ1bmN0aW9uIHRvIHB1YmxpYyBzaW5jZSBpdCBpcyAKKyAg
ICAgICAgICAgIGNvbnN1bHRlZCBpbiBGaWx0ZXJFZmZlY3RDb3JlSW1hZ2VSZW5kZXJlci4gCisg
ICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
aWx0ZXI6OmJ1aWxkKToKKyAgICAgICAgICAgIENoZWNrcyB3aGV0aGVyIG1fZmlsdGVyUmVuZGVy
ZXIgaXMgYWxyZWFkeSBjcmVhdGVkLCBubyBuZWVkIHRvIHJlLWNyZWF0ZSBpZiB0aGUgcG9pbnRl
ciAKKyAgICAgICAgICAgIGlzIG5vbi1udWxsCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6
OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOgorICAgICAgICAgICAgSWYgd2UgYXJlIHVz
aW5nIG1fZmlsdGVyUmVuZGVyZXIsIHdoaWNoIGlzIGN1cnJlbnRseSB1c2luZyBDb3JlSW1hZ2Ug
YW5kIHJlbGllcyBvbiAKKyAgICAgICAgICAgIElPU3VyZmFjZXMsIHdlIGFzayBzb3VyY2UgaW1h
Z2UgdG8gdXNlIElPU3VyZmFjZSBmb3IgcGVyZm9ybWFuY2UgY29uY2VybnMuCisKIDIwMjAtMDgt
MjggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIGFk
b3B0ZWQgbm9kZSBmcm9tIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVp
bWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oCmluZGV4IDgxZWM1N2U2OGIxOTJl
YzgzNmE3YmQxOGEyOGFlM2RlNzM1NDFkMTEuLjk5N2MxYWNiYjE2YmEzYjIzY2I0NGIyODI2Zjgw
ZmE0OGRiNDIyOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZS5oCkBAIC0yNyw3ICsyNyw5IEBACiAKICNpZiBVU0UoQ09SRV9JTUFHRSkKIAorI2lt
cG9ydCAiRkVDb2xvck1hdHJpeC5oIgogI2ltcG9ydCAiRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIK
KyNpbXBvcnQgIlNvdXJjZUdyYXBoaWMuaCIKICNpbXBvcnQgPHd0Zi9IYXNoTWFwLmg+CiAjaW1w
b3J0IDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQyLDI1ICs0NCwyNiBAQCBjbGFzcyBGaWx0ZXJFZmZl
Y3RSZW5kZXJlckNvcmVJbWFnZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RSZW5kZXJlciB7CiAgICAg
CiBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZT4gdHJ5Q3JlYXRlKEZpbHRlckVmZmVjdCYpOwotICAgIAorICAgIENJQ29udGV4
dCAqZ2V0Q0lDb250ZXh0KCk7CiAgICAgdm9pZCBhcHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0Jikg
ZmluYWw7CiAgICAgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX291dHB1
dEltYWdlOyB9CiAgICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0IGZpbmFsOwogICAgIEZs
b2F0UmVjdCBkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZlY3QmKSBjb25zdCBmaW5hbDsKICAgICB2
b2lkIGNsZWFyUmVzdWx0KCkgZmluYWw7Ci0gICAgCiAgICAgRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2UoKTsKICAgICAKIHByaXZhdGU6Ci0gICAgQ0lJbWFnZSogY29ubmVjdENJRmlsdGVy
cyhGaWx0ZXJFZmZlY3QmKTsKKyAgICBDSUltYWdlICpjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVm
ZmVjdCYsIGludCk7CiAgICAgdm9pZCByZW5kZXJUb0ltYWdlQnVmZmVyKEZpbHRlckVmZmVjdCYp
IGZpbmFsOwogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKEZpbHRl
ckVmZmVjdCYpOwogICAgIHN0YXRpYyBib29sIGNhblJlbmRlclVzaW5nQ0lGaWx0ZXJzKEZpbHRl
ckVmZmVjdCYpOwogICAgIAorICAgIENJSW1hZ2UgKmZlU291cmNlR3JhcGhpY0ltYWdlKFNvdXJj
ZUdyYXBoaWMmKTsKKyAgICBDSUltYWdlICpmZUNvbG9yTWF0cml4SW1hZ2UoRkVDb2xvck1hdHJp
eCYsIGNvbnN0IFZlY3RvcjxDSUltYWdlICo+JiwgaW50KTsKKyAgICAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IG1fb3V0cHV0SW1hZ2VCdWZmZXI7Ci0gICAgSGFzaE1hcDxSZWY8
RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJldGFpblB0cjxDSUZpbHRlcj4+PiBtX2NpRmlsdGVyU3Rv
cmFnZU1hcDsKKyAgICBIYXNoTWFwPGludCwgVmVjdG9yPFJldGFpblB0cjxDSUZpbHRlcj4+PiBt
X2NpRmlsdGVyU3RvcmFnZU1hcDsKICAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gbV9vdXRwdXRJbWFn
ZTsKLSAgICBSZXRhaW5QdHI8Q0lDb250ZXh0PiBtX2NvbnRleHQ7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2UubW0KaW5kZXggOTMxM2Y3MWU2ZWZiYTg0NmQ2NjU1MWUxMzA5MzkxOWUwODNkZDg0Yy4u
YjU5NzBkMjc4ZWVlNmQ5ZGJlNGEyMWZjNjI5MmUzYWYyMDI5ZjZkNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
cmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQpAQCAtMzAsMTIgKzMwLDE0
IEBACiAKICNpbXBvcnQgIkZpbHRlci5oIgogI2ltcG9ydCAiRmlsdGVyRWZmZWN0LmgiCisjaW1w
b3J0ICJGaWx0ZXJPcGVyYXRpb24uaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAj
aW1wb3J0ICJJbWFnZUJ1ZmZlci5oIgogI2ltcG9ydCAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgog
I2ltcG9ydCA8Q29yZUltYWdlL0NJQ29udGV4dC5oPgogI2ltcG9ydCA8Q29yZUltYWdlL0NJRmls
dGVyLmg+CiAjaW1wb3J0IDxDb3JlSW1hZ2UvQ29yZUltYWdlLmg+CisjaW1wb3J0IDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NiwxMiArNDgsMzQg
QEAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlPiBGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6dHIKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorQ0lD
b250ZXh0ICpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Z2V0Q0lDb250ZXh0KCkKK3sK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPENJQ29udGV4dD4+IGNpQ29udGV4
dDsKKyAgICBpZiAoIWNpQ29udGV4dC5nZXQoKSkKKyAgICAgICAgY2lDb250ZXh0LmdldCgpID0g
YWRvcHROUyhbQ0lDb250ZXh0IGNvbnRleHRXaXRoT3B0aW9uczogQHsga0NJQ29udGV4dFdvcmtp
bmdDb2xvclNwYWNlOiAoX19icmlkZ2UgaWQpQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NH
Q29sb3JTcGFjZVNSR0IpfV0pOworICAgIHJldHVybiBbY2lDb250ZXh0LmdldCgpIHJldGFpbl07
Cit9CisKIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUlt
YWdlUmVuZGVyaW5nKEZpbHRlckVmZmVjdCYgZWZmZWN0KQogewogICAgIC8vIEZJWE1FOiBjaGFu
Z2UgcmV0dXJuIHZhbHVlIHRvIHRydWUgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZAogICAgIHN3
aXRjaCAoZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpKSB7CisgICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgCisgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OiB7CisgICAg
ICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8RkVDb2xvck1hdHJpeCY+KGVmZmVjdCkudHlwZSgpKSB7
CisgICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKKyAgICAgICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6CisgICAgICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX0hVRVJPVEFURToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgfQorCiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDoKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNv
bXBvc2l0ZToKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29udm9sdmVNYXRyaXg6CkBA
IC02OSw3ICs5Myw2IEBAIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBv
cnRzQ29yZUltYWdlUmVuZGVyaW5nKEZpbHRlckVmZmVjdCYgZWZmCiAgICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OlRpbGU6CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlR1cmJ1bGVu
Y2U6CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTc3LDE4ICsxMDAsMTggQEAgYm9vbCBGaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoRmls
dGVyRWZmZWN0JiBlZmYKIAogdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6YXBw
bHlFZmZlY3RzKEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKIHsKLSAgICBtX291dHB1dEltYWdl
ID0gY29ubmVjdENJRmlsdGVycyhsYXN0RWZmZWN0KTsKKyAgICBtX291dHB1dEltYWdlID0gY29u
bmVjdENJRmlsdGVycyhsYXN0RWZmZWN0LCAxKTsKICAgICBpZiAoIW1fb3V0cHV0SW1hZ2UpCiAg
ICAgICAgIHJldHVybjsKICAgICByZW5kZXJUb0ltYWdlQnVmZmVyKGxhc3RFZmZlY3QpOwogfQog
Ci1DSUltYWdlKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVy
cyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKK0NJSW1hZ2UgKkZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBpbnQgdHJhdmVy
c2FsT3JkZXIpCiB7Ci0gICAgVmVjdG9yPENJSW1hZ2UqPiBpbnB1dEltYWdlczsKKyAgICBWZWN0
b3I8Q0lJbWFnZSAqPiBpbnB1dEltYWdlczsKICAgICAKICAgICBmb3IgKGF1dG8gaW4gOiBlZmZl
Y3QuaW5wdXRFZmZlY3RzKCkpIHsKLSAgICAgICAgQ0lJbWFnZSogaW5wdXRJbWFnZSA9IGNvbm5l
Y3RDSUZpbHRlcnMoKmluKTsKKyAgICAgICAgQ0lJbWFnZSAqaW5wdXRJbWFnZSA9IGNvbm5lY3RD
SUZpbHRlcnMoKmluLCB0cmF2ZXJzYWxPcmRlciArIDEpOwogICAgICAgICBpZiAoIWlucHV0SW1h
Z2UpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgaW5wdXRJbWFnZXMuYXBw
ZW5kKGlucHV0SW1hZ2UpOwpAQCAtOTksMTAgKzEyMiwxNCBAQCBDSUltYWdlKiBGaWx0ZXJFZmZl
Y3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyhGaWx0ZXJFZmZlY3QmIGVmZmVj
dCkKICAgICBpZiAoZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuaXNFbXB0eSgpIHx8IEltYWdl
QnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXpl
KCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRob3NlIGZpbHRlcnMgdXNpbmcgQ0lGaWx0ZXIgc28gdGhhdCB0aGUgZnVuY3Rpb24gcmV0
dXJucyBhIHZhbGlkIENJSW1hZ2UKICAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFz
c1R5cGUoKSkgewotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpCbGVuZDoKKyAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYzoKKyAgICAgICAgcmV0dXJuIGZlU291
cmNlR3JhcGhpY0ltYWdlKHN0YXRpY19jYXN0PFNvdXJjZUdyYXBoaWMmPihlZmZlY3QpKTsKICAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg6CisgICAgICAgIHJldHVybiBm
ZUNvbG9yTWF0cml4SW1hZ2Uoc3RhdGljX2Nhc3Q8RkVDb2xvck1hdHJpeCY+KGVmZmVjdCksIGlu
cHV0SW1hZ2VzLCB0cmF2ZXJzYWxPcmRlcik7CisKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
b3NlIGZpbHRlcnMgdXNpbmcgQ0lGaWx0ZXIgc28gdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBh
IHZhbGlkIENJSW1hZ2UKKyAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6QmxlbmQ6CiAgICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOgogICAgIGNhc2UgRmls
dGVyRWZmZWN0OjpUeXBlOjpDb21wb3NpdGU6CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkNvbnZvbHZlTWF0cml4OgpAQCAtMTIwLDEzICsxNDcsOTAgQEAgQ0lJbWFnZSogRmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0JiBlZmZl
Y3QpCiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlRpbGU6CiAgICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OlR1cmJ1bGVuY2U6CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNv
dXJjZUFscGhhOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAorQ0lJbWFnZSAqRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmZl
U291cmNlR3JhcGhpY0ltYWdlKFNvdXJjZUdyYXBoaWMmIGVmZmVjdCkKK3sKKyAgICBJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UgPSBlZmZlY3QuZmlsdGVyKCkuc291cmNlSW1hZ2UoKTsKKyAgICBp
ZiAoIXNvdXJjZUltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBpZiAo
aXM8QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcj4oKnNvdXJjZUltYWdlKSkgeworICAgICAgICBhdXRv
JiBzdXJmYWNlID0gZG93bmNhc3Q8QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcj4oKnNvdXJjZUltYWdl
KS5zdXJmYWNlKCk7CisgICAgICAgIElPU3VyZmFjZVJlZiBzdXJmYWNlUmVmID0gc3VyZmFjZS5z
dXJmYWNlKCk7CisgICAgICAgIHJldHVybiBbQ0lJbWFnZSBpbWFnZVdpdGhJT1N1cmZhY2U6c3Vy
ZmFjZVJlZl07CisgICAgfQorICAgIAorICAgIE5hdGl2ZUltYWdlUHRyIHNvdXJjZUNHSW1hZ2VS
ZWYgPSBzb3VyY2VJbWFnZS0+Y29weU5hdGl2ZUltYWdlKCk7CisgICAgcmV0dXJuIFtDSUltYWdl
IGltYWdlV2l0aENHSW1hZ2U6c291cmNlQ0dJbWFnZVJlZi5nZXQoKV07Cit9CisKK0NJSW1hZ2Ug
KkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpmZUNvbG9yTWF0cml4SW1hZ2UoRkVDb2xv
ck1hdHJpeCYgZWZmZWN0LCBjb25zdCBWZWN0b3I8Q0lJbWFnZSAqPiYgaW5wdXRJbWFnZXMsIGlu
dCB0cmF2ZXJzYWxPcmRlcikKK3sKKyAgICBDSUltYWdlICppbnB1dEltYWdlID0gaW5wdXRJbWFn
ZXMuYXQoMCk7CisKKyAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IEZFQ29sb3JNYXRyaXg6Om5v
cm1hbGl6ZWRGbG9hdHMoZWZmZWN0LnZhbHVlcygpKTsKKyAgICBmbG9hdCBjb21wb25lbnRzWzld
OworICAgIAorICAgIHN3aXRjaCAoZWZmZWN0LnR5cGUoKSkgeworICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX1NBVFVSQVRFOiB7CisgICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNh
dHVyYXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOiB7CisgICAgICAg
IEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywg
dmFsdWVzWzBdKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRkVDT0xPUk1BVFJJ
WF9UWVBFX01BVFJJWDoKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5B
TkNFVE9BTFBIQTogLy8gRklYTUU6IEFkZCBMdW1pbmFuY2UgdG8gQWxwaGEgSW1wbGVtZW50YXRp
b24KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIENJRmlsdGVyICpj
b2xvck1hdHJpeEZpbHRlcjsKKyAgICBpZiAobV9jaUZpbHRlclN0b3JhZ2VNYXAuY29udGFpbnMo
dHJhdmVyc2FsT3JkZXIpKSB7CisgICAgICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0lGaWx0ZXI+PiBj
YWNoZWRDSUZpbHRlcnMgPSBtX2NpRmlsdGVyU3RvcmFnZU1hcC5nZXQodHJhdmVyc2FsT3JkZXIp
OworICAgICAgICBjb2xvck1hdHJpeEZpbHRlciA9IGNhY2hlZENJRmlsdGVycy5hdCgwKS5nZXQo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb2xvck1hdHJpeEZpbHRlciA9IFtDSUZpbHRlciBm
aWx0ZXJXaXRoTmFtZTpAIkNJQ29sb3JNYXRyaXgiXTsKKyAgICAgICAgVmVjdG9yPFJldGFpblB0
cjxDSUZpbHRlcj4+IGZpbHRlcnNUb0JlQ2FjaGVkOworICAgICAgICBmaWx0ZXJzVG9CZUNhY2hl
ZC5pbnNlcnQoMCwgY29sb3JNYXRyaXhGaWx0ZXIpOworICAgICAgICBtX2NpRmlsdGVyU3RvcmFn
ZU1hcC5hZGQodHJhdmVyc2FsT3JkZXIsIGZpbHRlcnNUb0JlQ2FjaGVkKTsKKyAgICB9CisgICAg
CisgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOmlucHV0SW1hZ2UgZm9yS2V5OmtDSUlu
cHV0SW1hZ2VLZXldOworICAgIAorICAgIHN3aXRjaCAoZWZmZWN0LnR5cGUoKSkgeworICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX0hVRVJPVEFURTogeworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJ
VmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNbMF0gWTpjb21wb25lbnRzWzFdIFo6Y29tcG9u
ZW50c1syXSBXOjBdIGZvcktleTpAImlucHV0UlZlY3RvciJdOworICAgICAgICBbY29sb3JNYXRy
aXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNbM10gWTpj
b21wb25lbnRzWzRdIFo6Y29tcG9uZW50c1s1XSBXOjBdIGZvcktleTpAImlucHV0R1ZlY3RvciJd
OworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3Rvcldp
dGhYOmNvbXBvbmVudHNbNl0gWTpjb21wb25lbnRzWzddIFo6Y29tcG9uZW50c1s4XSBXOjBdIGZv
cktleTpAImlucHV0QlZlY3RvciJdOworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFs
dWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgICAgICAgICAgICAgWTowICAgICAgICAgICAgIFo6
MCAgICAgICAgICAgICBXOjFdIGZvcktleTpAImlucHV0QVZlY3RvciJdOworICAgICAgICBbY29s
b3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgICAgICAgICAg
ICAgWTowICAgICAgICAgICAgIFo6MCAgICAgICAgICAgICBXOjBdIGZvcktleTpAImlucHV0Qmlh
c1ZlY3RvciJdOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfTUFUUklYOiB7CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lW
ZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzBdICBZOnZhbHVlc1sxXSAgWjp2YWx1ZXNbMl0gIFc6
dmFsdWVzWzNdXSAgZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07CisgICAgICAgIFtjb2xvck1hdHJp
eEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzVdICBZOnZhbHVl
c1s2XSAgWjp2YWx1ZXNbN10gIFc6dmFsdWVzWzhdXSAgZm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07
CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0
aFg6dmFsdWVzWzEwXSBZOnZhbHVlc1sxMV0gWjp2YWx1ZXNbMTJdIFc6dmFsdWVzWzEzXV0gZm9y
S2V5OkAiaW5wdXRCVmVjdG9yIl07CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1
ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzE1XSBZOnZhbHVlc1sxNl0gWjp2YWx1ZXNb
MTddIFc6dmFsdWVzWzE4XV0gZm9yS2V5OkAiaW5wdXRBVmVjdG9yIl07CisgICAgICAgIFtjb2xv
ck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzRdICBZ
OnZhbHVlc1s5XSAgWjp2YWx1ZXNbMTRdIFc6dmFsdWVzWzE5XV0gZm9yS2V5OkAiaW5wdXRCaWFz
VmVjdG9yIl07CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05P
V046CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gY29sb3JNYXRy
aXhGaWx0ZXIub3V0cHV0SW1hZ2U7Cit9CisKIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2U6OmNhblJlbmRlclVzaW5nQ0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0KQogewog
ICAgIGlmICghc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoZWZmZWN0KSkKQEAgLTE0MSw2ICsy
NDUsNyBAQCBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjYW5SZW5kZXJVc2lu
Z0NJRmlsdGVycyhGaWx0ZXJFZmZlY3QmIGVmZmVjdAogCiBJbWFnZUJ1ZmZlciogRmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2U6Om91dHB1dCgpIGNvbnN0CiB7CisgICAgTE9HX1dJVEhfU1RS
RUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyaW5nICIgPDwgdGhpcyA8PCAiIHVzaW5nIENv
cmVJbWFnZVxuIik7CiAgICAgcmV0dXJuIG1fb3V0cHV0SW1hZ2VCdWZmZXIuZ2V0KCk7CiB9CiAg
ICAgCkBAIC0xNjEsNyArMjY2LDE1IEBAIHZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0CiAgICAgCiAg
ICAgYXV0byYgc3VyZmFjZSA9IGRvd25jYXN0PEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI+KCptX291
dHB1dEltYWdlQnVmZmVyKS5zdXJmYWNlKCk7CiAgICAgQ0dDb2xvclNwYWNlUmVmIHJlc3VsdENv
bG9yU3BhY2UgPSBjYWNoZWRDR0NvbG9yU3BhY2UobGFzdEVmZmVjdC5yZXN1bHRDb2xvclNwYWNl
KCkpOwotICAgIFttX2NvbnRleHQuZ2V0KCkgcmVuZGVyOiBtX291dHB1dEltYWdlLmdldCgpIHRv
SU9TdXJmYWNlOiBzdXJmYWNlLnN1cmZhY2UoKSBib3VuZHM6ZGVzdFJlY3QobGFzdEVmZmVjdCkg
Y29sb3JTcGFjZTpyZXN1bHRDb2xvclNwYWNlXTsKKyAgICBDR1JlY3QgYm91bmRzID0gZGVzdFJl
Y3QobGFzdEVmZmVjdCk7CisgICAgCisgICAgQ0lSZW5kZXJEZXN0aW5hdGlvbiogZGVzdGluYXRp
b24gPSBbW1tDSVJlbmRlckRlc3RpbmF0aW9uIGFsbG9jXSBpbml0V2l0aElPU3VyZmFjZTooOjpJ
T1N1cmZhY2UqKXN1cmZhY2Uuc3VyZmFjZSgpXSBhdXRvcmVsZWFzZV07CisgICAgZGVzdGluYXRp
b24uY29sb3JTcGFjZSA9IHJlc3VsdENvbG9yU3BhY2U7CisgICAgW2dldENJQ29udGV4dCgpIHN0
YXJ0VGFza1RvUmVuZGVyOm1fb3V0cHV0SW1hZ2UuZ2V0KCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZnJvbVJlY3Q6Ym91bmRzCisgICAgICAgICAgICAgICAgICAgICAgICB0b0Rlc3Rp
bmF0aW9uOmRlc3RpbmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdFBvaW50
OkNHUG9pbnRNYWtlKGJvdW5kcy5vcmlnaW4ueCwgYm91bmRzLm9yaWdpbi55KQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjpuaWxdOwogfQogICAgIAogRmxvYXRSZWN0IEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZlY3Qm
IGxhc3RFZmZlY3QpIGNvbnN0CkBAIC0xNzcsMTQgKzI5MCwxMiBAQCB2b2lkIEZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlOjpjbGVhclJlc3VsdCgpCiAgICAgbV9vdXRwdXRJbWFnZUJ1ZmZl
ci5yZXNldCgpOwogICAgIG1fY2lGaWx0ZXJTdG9yYWdlTWFwLmNsZWFyKCk7CiAgICAgbV9vdXRw
dXRJbWFnZSA9IG51bGxwdHI7Ci0gICAgbV9jb250ZXh0ID0gbnVsbHB0cjsKIH0KIAogRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCkK
ICAgICA6IEZpbHRlckVmZmVjdFJlbmRlcmVyKCkKKyAgICAsIG1fY2lGaWx0ZXJTdG9yYWdlTWFw
KCkKIHsKLSAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IGNhY2hlZENHQ29sb3JTcGFj
ZShDb2xvclNwYWNlOjpTUkdCKTsKLSAgICBtX2NvbnRleHQgPSBbQ0lDb250ZXh0IGNvbnRleHRX
aXRoT3B0aW9uczogQHsga0NJQ29udGV4dFdvcmtpbmdDb2xvclNwYWNlOiAoX19icmlkZ2UgaWQp
Y29sb3JTcGFjZX1dOwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwCmluZGV4IDc1NjJmZGQ2MDU4NjdmNjI4Y2EzMmMzMTVjOWQzNzI5MDM3NmYzODguLjdl
MTNjZmY2NjNkYWJmMjgzODM2YWI5N2I2MjYzZGVlMTE0ZjQyZDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAKQEAgLTc5LDcgKzc5LDYgQEAgRmxvYXRQb2ludCBGaWx0ZXJFZmZlY3Q6Om1hcFBvaW50RnJv
bVVzZXJTcGFjZVRvQnVmZmVyKEZsb2F0UG9pbnQgdXNlclNwYWNlUG9pbnQKIAogSW50UmVjdCBG
aWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoY29uc3QgSW50UmVj
dCYgZWZmZWN0UmVjdCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwogICAgIElu
dFBvaW50IGxvY2F0aW9uID0gbV9hYnNvbHV0ZVBhaW50UmVjdC5sb2NhdGlvbigpOwogICAgIGxv
Y2F0aW9uLm1vdmVCeSgtZWZmZWN0UmVjdC5sb2NhdGlvbigpKTsKICAgICByZXR1cm4gSW50UmVj
dChsb2NhdGlvbiwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5k
ZXggMTFhYzYwYWE2NDExNzQxYWIxMzY0NmZjZDE2YTA1NGIzOWMyZmM3Yy4uY2FhNTVjOTQwNTUy
MGM2ZTc0OTc0MzcyZTdjZDQxYjBjNjNmOWQ5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC0xNzAsNiAr
MTcwLDE0IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xv
clNwYWNlKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IGludCkgeyBpbi0+dHJhbnNmb3JtUmVzdWx0
Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOyB9CiAgICAgdm9pZCB0cmFuc2Zvcm1S
ZXN1bHRDb2xvclNwYWNlKENvbG9yU3BhY2UpOworICAgIAorICAgIHN0YXRpYyBWZWN0b3I8Zmxv
YXQ+IG5vcm1hbGl6ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQorICAgIHsK
KyAgICAgICAgVmVjdG9yPGZsb2F0PiBub3JtYWxpemVkVmFsdWVzKHZhbHVlcy5zaXplKCkpOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKKyAgICAg
ICAgICAgIG5vcm1hbGl6ZWRWYWx1ZXNbaV0gPSBub3JtYWxpemVkRmxvYXQodmFsdWVzW2ldKTsK
KyAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZXM7CisgICAgfQogCiBwcm90ZWN0ZWQ6CiAg
ICAgRmlsdGVyRWZmZWN0KEZpbHRlciYsIFR5cGUpOwpAQCAtMTg4LDE0ICsxOTYsNiBAQCBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpOwogCiAgICAg
dm9pZCBjbGlwQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICAKLSAgICBzdGF0aWMgVmVjdG9yPGZs
b2F0PiBub3JtYWxpemVkRmxvYXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcykKLSAgICB7
Ci0gICAgICAgIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZFZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgICAgICBub3JtYWxpemVkVmFsdWVzW2ldID0gbm9ybWFsaXplZEZsb2F0KHZhbHVlc1tpXSk7
Ci0gICAgICAgIHJldHVybiBub3JtYWxpemVkVmFsdWVzOwotICAgIH0KIAogcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgPSAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcAppbmRleCBhZmViOTI5NTUzNTM0Mjc4MDJjZTI5MDYwN2Rh
MWE4OTdjZjhjYTIwLi5hYWExZjAwZWU5Zjg0ZDUzNjdkYzQ0YzZjNTQyMmM0NjljZDU5MzY5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcApAQCAtMzA0LDcgKzMwNCw4IEBA
IGJvb2wgQ1NTRmlsdGVyOjpidWlsZChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9uCiAKICAgICBzZXRNYXhFZmZlY3RSZWN0cyhtX3NvdXJj
ZURyYXdpbmdSZWdpb24pOwogI2lmIFVTRShDT1JFX0lNQUdFKQotICAgIG1fZmlsdGVyUmVuZGVy
ZXIgPSBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dHJ5Q3JlYXRlKHJlbmRlcmVyLnNldHRpbmdzKCku
Y29yZUltYWdlQWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJFbmFibGVkKCksIG1fZWZmZWN0cy5sYXN0
KCkuZ2V0KCkpOworICAgIGlmICghbV9maWx0ZXJSZW5kZXJlcikKKyAgICAgICAgbV9maWx0ZXJS
ZW5kZXJlciA9IEZpbHRlckVmZmVjdFJlbmRlcmVyOjp0cnlDcmVhdGUocmVuZGVyZXIuc2V0dGlu
Z3MoKS5jb3JlSW1hZ2VBY2NlbGVyYXRlZEZpbHRlclJlbmRlckVuYWJsZWQoKSwgbV9lZmZlY3Rz
Lmxhc3QoKS5nZXQoKSk7CiAjZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTMzNiw3ICsz
MzcsMTAgQEAgdm9pZCBDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoY29u
c3QgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXgKICAgICAgICAgc2V0U291cmNlSW1hZ2Uo
SW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCAmdGFyZ2V0
Q29udGV4dCwgZmlsdGVyU2NhbGUoKSkpOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKHRh
cmdldENvbnRleHQpOwotICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlKCksIGZpbHRlclNjYWxlKCkpKTsKKyAgICAgICAg
aWYgKG1fZmlsdGVyUmVuZGVyZXIpCisgICAgICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCwgZmls
dGVyU2NhbGUoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRTb3VyY2VJbWFnZShJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlKCksIGZpbHRlclNj
YWxlKCkpKTsKICNlbmRpZgogICAgIH0KICAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgPSB0
cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IGQwNDQ3YzE5OTg0MDg0OTQxY2MxYzFkMTRjZWJkMjA1ODUwZjNmNzUuLjM5
MWQ0ZWMwYmI4YWJmMzM0YzM3OTFhODRmOWNiOGY1Y2Y5OTE5NGQgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OSBAQAorMjAyMC0wOC0yOCAgRnJhbmsgWWFuZyAgPGd1b3dlaV95YW5nQGFwcGxlLmNvbT4KKwor
ICAgICAgICBDb3JlSW1hZ2UgSW1wbGVtZW50YXRpb24gb2YgU291cmNlR3JhcGhpYyBhbmQgc2F0
dXJhdGUsIGh1ZS1yb3RhdGUsIGdyYXlzY2FsZSBhbmQgc2VwaWEKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzY3MworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY3NzMy9maWx0ZXJzL2VmZmVjdC1ncmF5
c2NhbGUtc3F1YXJlLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNzczMvZmlsdGVy
cy9lZmZlY3QtZ3JheXNjYWxlLXNxdWFyZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBjc3MzL2Zp
bHRlcnMvZWZmZWN0LWh1ZS1yb3RhdGUtc3F1YXJlLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGNzczMvZmlsdGVycy9lZmZlY3QtaHVlLXJvdGF0ZS1zcXVhcmUuaHRtbDogQWRkZWQu
CisgICAgICAgICogY3NzMy9maWx0ZXJzL2VmZmVjdC1zYXR1cmF0ZS1zcXVhcmUtZXhwZWN0ZWQu
aHRtbDogQWRkZWQuCisgICAgICAgICogY3NzMy9maWx0ZXJzL2VmZmVjdC1zYXR1cmF0ZS1zcXVh
cmUuaHRtbDogQWRkZWQuCisgICAgICAgICogY3NzMy9maWx0ZXJzL2VmZmVjdC1zZXBpYS1zcXVh
cmUtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogY3NzMy9maWx0ZXJzL2VmZmVjdC1z
ZXBpYS1zcXVhcmUuaHRtbDogQWRkZWQuCisKIDIwMjAtMDgtMjggIEFudG9pbmUgUXVpbnQgIDxn
cmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjI2MzUwNik6IHNjYWxl
IHRyYW5zZm9ybSB0cmFuc2l0aW9ucyB3b24ndCBvdmVyc2hvb3QKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3QtZ3JheXNjYWxlLXNxdWFyZS1leHBlY3RlZC5odG1s
IGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1ncmF5c2NhbGUtc3F1YXJlLWV4cGVj
dGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzcyODE3MjI3ZGQwNWJiNjY1MWZhMjJkZWM1NWUyYjMyMGY2
MGE2OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3Qt
Z3JheXNjYWxlLXNxdWFyZS1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8dGl0bGU+Q1NTIEZpbHRlciBUZXN0OiBUZXN0
IGZvciBTYXR1cmF0ZSBzaG9ydCBoYW5kPC90aXRsZT4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9j
c3MiPgorICAgIGRpdiB7CisgICAgICAgIHdpZHRoOiA2MDBweDsKKyAgICAgICAgaGVpZ2h0OiA2
MDBweDsgCisgICAgICAgIGJhY2tncm91bmQ6IHJnYigxNTQsIDI3LCAyNyk7CisgICAgfQorCisg
ICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxwPllvdSBzaG91bGQgc2VlIGEgZ3Jl
ZW4gcmVjdGFuZ2xlLjwvcD4KKyAgICA8ZGl2PjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LWdyYXlzY2FsZS1zcXVh
cmUuaHRtbCBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3QtZ3JheXNjYWxlLXNxdWFy
ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmM2YTRkMzdjYmViNDRlNjg0M2I5YzE4ZWFlMjVkNGQwMzM5Mjdi
NTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LWdy
YXlzY2FsZS1zcXVhcmUuaHRtbApAQCAtMCwwICsxLDIwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPkNTUyBGaWx0ZXIgVGVzdDogVGVzdCBmb3IgU2F0dXJh
dGUgc2hvcnQgaGFuZDwvdGl0bGU+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgICBk
aXYgeworICAgICAgICB3aWR0aDogNjAwcHg7CisgICAgICAgIGhlaWdodDogNjAwcHg7IAorICAg
ICAgICBiYWNrZ3JvdW5kOiByZWQ7CisgICAgICAgIGZpbHRlcjogZ3JheXNjYWxlKDUwJSk7Cisg
ICAgfQorCisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxwPllvdSBzaG91bGQg
c2VlIGEgZ3JlZW4gcmVjdGFuZ2xlLjwvcD4KKyAgICA8ZGl2PjwvZGl2PgorCis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LWh1ZS1y
b3RhdGUtc3F1YXJlLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZm
ZWN0LWh1ZS1yb3RhdGUtc3F1YXJlLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTA3YmI0M2Jl
M2UxMTdhMGE5ZmJhYzExOTNiZmExMjc4ZjI5NmMxZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3QtaHVlLXJvdGF0ZS1zcXVhcmUtZXhwZWN0ZWQuaHRt
bApAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAg
PHRpdGxlPkNTUyBGaWx0ZXIgVGVzdDogVGVzdCBmb3IgU2F0dXJhdGUgc2hvcnQgaGFuZDwvdGl0
bGU+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgICBkaXYgeworICAgICAgICB3aWR0
aDogNjAwcHg7CisgICAgICAgIGhlaWdodDogNjAwcHg7IAorICAgICAgICBiYWNrZ3JvdW5kOiBy
Z2IoMCwgOTEsIDApOworICAgIH0KKworICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAg
ICA8cD5Zb3Ugc2hvdWxkIHNlZSBhIGdyZWVuIHJlY3RhbmdsZS48L3A+CisgICAgPGRpdj48L2Rp
dj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9maWx0
ZXJzL2VmZmVjdC1odWUtcm90YXRlLXNxdWFyZS5odG1sIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0
ZXJzL2VmZmVjdC1odWUtcm90YXRlLXNxdWFyZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI5ODg2ODkzNjdl
NWU5ZjFiNjU3NmVlYjY4NzM3ODRjZjY5YTViMzgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LWh1ZS1yb3RhdGUtc3F1YXJlLmh0bWwKQEAgLTAsMCAr
MSwyMCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5DU1Mg
RmlsdGVyIFRlc3Q6IFRlc3QgZm9yIFNhdHVyYXRlIHNob3J0IGhhbmQ8L3RpdGxlPgorICAgIDxz
dHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgZGl2IHsKKyAgICAgICAgd2lkdGg6IDYwMHB4Owor
ICAgICAgICBoZWlnaHQ6IDYwMHB4OyAKKyAgICAgICAgYmFja2dyb3VuZDogcmVkOworICAgICAg
ICBmaWx0ZXI6IGh1ZS1yb3RhdGUoOTBkZWcpOworICAgIH0KKworICAgIDwvc3R5bGU+Cis8L2hl
YWQ+Cis8Ym9keT4KKyAgICA8cD5Zb3Ugc2hvdWxkIHNlZSBhIGdyZWVuIHJlY3RhbmdsZS48L3A+
CisgICAgPGRpdj48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1zYXR1cmF0ZS1zcXVhcmUtZXhwZWN0ZWQuaHRtbCBi
L0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3Qtc2F0dXJhdGUtc3F1YXJlLWV4cGVjdGVk
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNzcyODE3MjI3ZGQwNWJiNjY1MWZhMjJkZWM1NWUyYjMyMGY2MGE2
OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3Qtc2F0
dXJhdGUtc3F1YXJlLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5DU1MgRmlsdGVyIFRlc3Q6IFRlc3QgZm9y
IFNhdHVyYXRlIHNob3J0IGhhbmQ8L3RpdGxlPgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+
CisgICAgZGl2IHsKKyAgICAgICAgd2lkdGg6IDYwMHB4OworICAgICAgICBoZWlnaHQ6IDYwMHB4
OyAKKyAgICAgICAgYmFja2dyb3VuZDogcmdiKDE1NCwgMjcsIDI3KTsKKyAgICB9CisKKyAgICA8
L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisgICAgPHA+WW91IHNob3VsZCBzZWUgYSBncmVlbiBy
ZWN0YW5nbGUuPC9wPgorICAgIDxkaXY+PC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3Qtc2F0dXJhdGUtc3F1YXJlLmh0
bWwgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LXNhdHVyYXRlLXNxdWFyZS5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQ3MGNiMjZhYTFiM2I0MmY1ZGM0ODc0ZTkyOGE1ZTYyZWNjN2U0MTkKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LXNhdHVyYXRl
LXNxdWFyZS5odG1sCkBAIC0wLDAgKzEsMjAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKyAgICA8dGl0bGU+Q1NTIEZpbHRlciBUZXN0OiBUZXN0IGZvciBTYXR1cmF0ZSBzaG9y
dCBoYW5kPC90aXRsZT4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgIGRpdiB7Cisg
ICAgICAgIHdpZHRoOiA2MDBweDsKKyAgICAgICAgaGVpZ2h0OiA2MDBweDsgCisgICAgICAgIGJh
Y2tncm91bmQ6IHJlZDsKKyAgICAgICAgZmlsdGVyOiBzYXR1cmF0ZSg1MCUpOworICAgIH0KKwor
ICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8cD5Zb3Ugc2hvdWxkIHNlZSBhIGdy
ZWVuIHJlY3RhbmdsZS48L3A+CisgICAgPGRpdj48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1zZXBpYS1zcXVhcmUt
ZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3Qtc2VwaWEtc3F1
YXJlLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTRkY2EyOGUzZTYzN2VjNDViMmM3ODdlYmE5
MDgxNWMyOWQxYjJmZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVy
cy9lZmZlY3Qtc2VwaWEtc3F1YXJlLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5DU1MgRmlsdGVyIFRlc3Q6
IFRlc3QgZm9yIFNhdHVyYXRlIHNob3J0IGhhbmQ8L3RpdGxlPgorICAgIDxzdHlsZSB0eXBlPSJ0
ZXh0L2NzcyI+CisgICAgZGl2IHsKKyAgICAgICAgd2lkdGg6IDYwMHB4OworICAgICAgICBoZWln
aHQ6IDYwMHB4OyAKKyAgICAgICAgYmFja2dyb3VuZDogcmdiKDI0LCAyMSwgMTQ0KTsKKyAgICB9
CisKKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+IAorICAgIDxwPllvdSBzaG91bGQgc2Vl
IGEgZ3JlZW4gcmVjdGFuZ2xlLjwvcD4KKyAgICA8ZGl2PjwvZGl2PgorCis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LXNlcGlhLXNx
dWFyZS5odG1sIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1zZXBpYS1zcXVhcmUu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mODlhY2E1Nzg4NzdhYzgzOWZmZmZmMTc1MTA0NGU2MWYyZjYyYWI0
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1zZXBp
YS1zcXVhcmUuaHRtbApAQCAtMCwwICsxLDIwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+CisgICAgPHRpdGxlPkNTUyBGaWx0ZXIgVGVzdDogVGVzdCBmb3IgU2F0dXJhdGUgc2hv
cnQgaGFuZDwvdGl0bGU+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgICBkaXYgewor
ICAgICAgICB3aWR0aDogNjAwcHg7CisgICAgICAgIGhlaWdodDogNjAwcHg7IAorICAgICAgICBi
YWNrZ3JvdW5kOiBibHVlOworICAgICAgICBmaWx0ZXI6IHNlcGlhKDUwJSk7CisgICAgfQorCisg
ICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxwPllvdSBzaG91bGQgc2VlIGEgZ3Jl
ZW4gcmVjdGFuZ2xlLjwvcD4KKyAgICA8ZGl2PjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407650</attachid>
            <date>2020-08-31 19:14:16 -0700</date>
            <delta_ts>2020-09-01 10:20:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213673-20200831191416.patch</filename>
            <type>text/plain</type>
            <size>29657</size>
            <attacher>frankhome61</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MjgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWMxZjViYzkyNTFjNDRm
ZTM5OTQ1YmJlNjkzMzUzNTNhMGFiZmJmZC4uN2U3ZTcxMGZhYWQ2ZWJiYzk5MDlkNjVhZmFlYjUz
NWRkOWIwYzNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIwLTA4LTI4ICBGcmFu
ayBZYW5nICA8Z3Vvd2VpX3lhbmdAYXBwbGUuY29tPgorCisgICAgICAgIENvcmVJbWFnZSBJbXBs
ZW1lbnRhdGlvbiBvZiBTb3VyY2VHcmFwaGljIGFuZCBzYXR1cmF0ZSwgaHVlLXJvdGF0ZSwgZ3Jh
eXNjYWxlIGFuZCBzZXBpYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjEzNjczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGVzdHM6IGNzczMvZmlsdGVycy9lZmZlY3QtZ3JheXNjYWxlLXNxdWFyZS5odG1s
CisgICAgICAgICAgICAgICBjc3MzL2ZpbHRlcnMvZWZmZWN0LWh1ZS1yb3RhdGUtc3F1YXJlLmh0
bWwKKyAgICAgICAgICAgICAgIGNzczMvZmlsdGVycy9lZmZlY3Qtc2F0dXJhdGUtc3F1YXJlLmh0
bWwKKyAgICAgICAgICAgICAgIGNzczMvZmlsdGVycy9lZmZlY3Qtc2VwaWEtc3F1YXJlLmh0bWwK
KworICAgICAgICBBZGRlZCBDb3JlSW1hZ2UgaW1wbGVtZW50YXRpb24gb2YgU291cmNlR3JhcGhp
YyBhbmQgcGFydGlhbCBvZiBGRUNvbG9yTWF0cml4LCAKKyAgICAgICAgd2hpY2ggaXMgdXNlZCB0
byBpbXBsZW1lbnQgc2VwaWEoKSwgZ3JheXNjYWxlKCkgaHVlLXJvdGF0ZSgpIGFuZCBzYXR1cmF0
ZSgpLgorICAgICAgICBBbHNvIGFkZGVkIENJRmlsdGVyIGNhY2hpbmcsIGJ5IHN0b3JpbmcgQ0lG
aWx0ZXJzIGluIGEgaGFzaCBtYXAsIHdoZXJlIHRoZSBrZXkgCisgICAgICAgIGlzIHRoZSBsZXZl
bCBvZiB0cmF2ZXJzYWwgKGFuIGludGVnZXIpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmg6CisgICAgICAgICAg
ICBJbXBvcnRlZCBGRUNvbG9yTWF0cml4LmggYW5kIFNvdXJjZUdyYXBoaWMuaDsgYWRkZWQgZnVu
Y3Rpb24gZ2V0Q0lDb250ZXh0KCkKKyAgICAgICAgICAgIHRoYXQgcmV0dXJucyBhIHN0YXRpYyBj
b3B5IG9mIENJQ29udGV4dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2Uv
RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW06CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Z2V0Q0lDb250ZXh0KTogQ3JlYXRpbmcgYSAKKyAg
ICAgICAgICAgIENJQ29udGV4dCBpcyBleHBlbnNpdmUuIEluc3RlYWQgb2YgY3JlYXRpbmcgYSBD
SUNvbnRleHQgb24gZWFjaCBmcmFtZQorICAgICAgICAgICAgdXBkYXRlLCB3ZSBqdXN0IHVzZSBh
IHN0YXRpYyBzaW5nbGV0b24gb24gZXZlcnkgZHJhdworICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKToKKyAg
ICAgICAgICAgIHRoZSBmdW5jdGlvbiBub3cgcmV0dXJucyB0cnVlIGlmIHRoZSBmaWx0ZXIgY2hh
aW4gY29udGFpbnMgU291cmNlR3JhcGhpYworICAgICAgICAgICAgYW5kIEZFQ29sb3JNYXRyaXgg
b2YgVFlQRV9NQVRSSVgsIFRZUEVfU0FUVVJBVEUgYW5kIFRZUEVfSFVFUk9UQVRFCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6YXBwbHlFZmZlY3RzKToK
KyAgICAgICAgICAgIHBhc3NlZCBpbiB0cmF2ZXJzYWwgb3JkZXIgdG8gY29ubmVjdENpRmlsdGVy
cygpLiBXZSBwYXNzIDEgYXMgdGhlIGZpcnN0IGxldmVsCisgICAgICAgICAgICBvZiBmaWx0ZXIg
Z3JhcGggdHJhdmVyc2FsCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyk6IFBhc3NlZCBpbiBhbiBpbnRlZ2VyIAorICAgICAg
ICAgICAgdGhhdCBpbmNyZW1lbnRzIGJ5IG9uZSB3aGVuIHdlIHRyYXZlcnNlIHRoZSBmaWx0ZXIg
Z3JhcGggYnkgb25lIGxldmVsIGRlZXBlci4gCisgICAgICAgICAgICBUaGlzIGludGVnZXIgd2ls
bCBiZSB1c2VkIGFzIGhhc2ggbWFwIGtleSB0byByZXRyaWV2ZSBjYWNoZWQgQ0lGaWx0ZXJzCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6ZmVTb3VyY2VH
cmFwaGljSW1hZ2UpOgorICAgICAgICAgICAgVXNlIHRoZSBzb3VyY2UgaW1hZ2UgdG8gY3JlYXRl
IGEgQ0lJbWFnZSBhbmQgcmV0dXJuIGl0LiBJZiB0aGUgc291cmNlIGltYWdlIAorICAgICAgICAg
ICAgaXMgYmFja2VkIGJ5IElPU3VyZmFjZSwgd2UgY3JlYXRlIGEgQ0lJbWFnZSBkaXJlY3RseSBm
cm9tIHRoZSBJT1N1cmZhY2U7IG90aGVyd2lzZQorICAgICAgICAgICAgd2UgY3JlYXRlIGEgQ0lJ
bWFnZSBieSBnZXR0aW5nIHRoZSBOYXRpdmVJbWFnZVB0ciBmcm9tIHNvdXJjZSBpbWFnZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpmZUNvbG9yTWF0
cml4SW1hZ2UpOgorICAgICAgICAgICAgQmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlIG1hdHJpeCBh
bmQgaW5wdXQgcGFyYW1ldGVyLCAKKyAgICAgICAgICAgIGNyZWF0ZSBkaWZmZXJlbnQgdHlwZXMg
b2YgQ0lDb2xvck1hdHJpeCBmaWxlcnMgdGhhdCBhcmUgdXNlZCB0byBpbXBsZW1lbnQgCisgICAg
ICAgICAgICBzZXBpYSwgZ3JheXNjYWxlLCBodWUtcm90YXRlLCBzYXR1cmF0ZQorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6Om91dHB1dCBjb25zdCk6IAor
ICAgICAgICAgICAgQWRkZWQgYSBsb2dnaW5nIGxpbmUKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpyZW5kZXJUb0ltYWdlQnVmZmVyKToKKyAgICAgICAg
ICAgIFVzZXMgQ0lSZW5kZXJEZXN0aW5hdGlvbiBpbnN0ZWFkIHRvIHJlbmRlciBDSUltYWdlcyB0
byBJT1N1cmZhY2VzLiBUaGlzIHdpbGwgYXZvaWQgCisgICAgICAgICAgICB3YWl0cyBvbiB0aGUg
Q29yZUltYWdlIHNpZGUuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZTo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2U6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6IAorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhIGNv
bnN0KTogcmVtb3ZlZCAKKyAgICAgICAgICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7IGZyb20gdGhl
IGZ1bmN0aW9uLCBiZWNhdXNlIENvcmVJbWFnZSBwYXRoIHdvdWxkbid0IGNyZWF0ZSAKKyAgICAg
ICAgICAgIGltYWdlIGJ1ZmZlcnMgaW5zaWRlIEZpbHRlckVmZmVjdCwgYnV0IENJIHBhdGggc3Rp
bGwgbmVlZHMgdG8gY29uc3VsdCB0aGlzIGZ1bmN0aW9uCisgICAgICAgICAgICB0byBvYnRhaW4g
Z2VvbWV0cnkgaW5mbworICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpub3JtYWxpemVk
RmxvYXRzKTogQ2hhbmdlZCB0aGlzIGZ1bmN0aW9uIHRvIHB1YmxpYyBzaW5jZSBpdCBpcyAKKyAg
ICAgICAgICAgIGNvbnN1bHRlZCBpbiBGaWx0ZXJFZmZlY3RDb3JlSW1hZ2VSZW5kZXJlci4gCisg
ICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
aWx0ZXI6OmJ1aWxkKToKKyAgICAgICAgICAgIENoZWNrcyB3aGV0aGVyIG1fZmlsdGVyUmVuZGVy
ZXIgaXMgYWxyZWFkeSBjcmVhdGVkLCBubyBuZWVkIHRvIHJlLWNyZWF0ZSBpZiB0aGUgcG9pbnRl
ciAKKyAgICAgICAgICAgIGlzIG5vbi1udWxsCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6
OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOgorICAgICAgICAgICAgSWYgd2UgYXJlIHVz
aW5nIG1fZmlsdGVyUmVuZGVyZXIsIHdoaWNoIGlzIGN1cnJlbnRseSB1c2luZyBDb3JlSW1hZ2Ug
YW5kIHJlbGllcyBvbiAKKyAgICAgICAgICAgIElPU3VyZmFjZXMsIHdlIGFzayBzb3VyY2UgaW1h
Z2UgdG8gdXNlIElPU3VyZmFjZSBmb3IgcGVyZm9ybWFuY2UgY29uY2VybnMuCisKIDIwMjAtMDgt
MjggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIGFk
b3B0ZWQgbm9kZSBmcm9tIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL1dl
YkNvcmUueGNzY2hlbWUgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai94Y3NoYXJl
ZGRhdGEveGNzY2hlbWVzL1dlYkNvcmUueGNzY2hlbWUKaW5kZXggMTU4MmUxYTNjNTZkZjllNzgy
MDBkOTlhOTk4NjgwNTkxYjRjZGYwYi4uNjhlMzAyMDE5ODYyNzNmMGNhNWRjYmQzMTUxMjZlNmYx
ZGM5YzFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2oveGNz
aGFyZWRkYXRhL3hjc2NoZW1lcy9XZWJDb3JlLnhjc2NoZW1lCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvV2ViQ29yZS54Y3NjaGVt
ZQpAQCAtNDAsNiArNDAsMTEgQEAKICAgICAgIGRlYnVnRG9jdW1lbnRWZXJzaW9uaW5nID0gIllF
UyIKICAgICAgIGRlYnVnU2VydmljZUV4dGVuc2lvbiA9ICJpbnRlcm5hbCIKICAgICAgIGFsbG93
TG9jYXRpb25TaW11bGF0aW9uID0gIllFUyI+CisgICAgICA8UGF0aFJ1bm5hYmxlCisgICAgICAg
ICBydW5uYWJsZURlYnVnZ2luZ01vZGUgPSAiMCIKKyAgICAgICAgIEJ1bmRsZUlkZW50aWZpZXIg
PSAib3JnLndlYmtpdC5NaW5pQnJvd3NlciIKKyAgICAgICAgIEZpbGVQYXRoID0gIi9Wb2x1bWVz
L0RhdGEvYnVpbGQvRGVidWcvTWluaUJyb3dzZXIuYXBwIj4KKyAgICAgIDwvUGF0aFJ1bm5hYmxl
PgogICAgPC9MYXVuY2hBY3Rpb24+CiAgICA8UHJvZmlsZUFjdGlvbgogICAgICAgYnVpbGRDb25m
aWd1cmF0aW9uID0gIlJlbGVhc2UiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZS5oCmluZGV4IDgxZWM1N2U2OGIxOTJlYzgzNmE3YmQxOGEyOGFlM2RlNzM1
NDFkMTEuLjk1OWRmNzA3ZTQwMDg1ZDdiNTMzOTJkMzJkMTQ0YzA0Yjg0NzMwZTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZl
Y3RSZW5kZXJlckNvcmVJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oCkBAIC0yNyw3ICsy
Nyw5IEBACiAKICNpZiBVU0UoQ09SRV9JTUFHRSkKIAorI2ltcG9ydCAiRkVDb2xvck1hdHJpeC5o
IgogI2ltcG9ydCAiRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIKKyNpbXBvcnQgIlNvdXJjZUdyYXBo
aWMuaCIKICNpbXBvcnQgPHd0Zi9IYXNoTWFwLmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CiAK
QEAgLTQyLDI1ICs0NCwyNiBAQCBjbGFzcyBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZSA6
IHB1YmxpYyBGaWx0ZXJFZmZlY3RSZW5kZXJlciB7CiAgICAgCiBwdWJsaWM6CiAgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZT4gdHJ5Q3JlYXRl
KEZpbHRlckVmZmVjdCYpOwotICAgIAorICAgIFJldGFpblB0cjxDSUNvbnRleHQ+IGdldENJQ29u
dGV4dCgpOwogICAgIHZvaWQgYXBwbHlFZmZlY3RzKEZpbHRlckVmZmVjdCYpIGZpbmFsOwogICAg
IGJvb2wgaGFzUmVzdWx0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9vdXRwdXRJbWFnZTsgfQog
ICAgIEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdCBmaW5hbDsKICAgICBGbG9hdFJlY3QgZGVz
dFJlY3QoY29uc3QgRmlsdGVyRWZmZWN0JikgY29uc3QgZmluYWw7CiAgICAgdm9pZCBjbGVhclJl
c3VsdCgpIGZpbmFsOwotICAgIAogICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCk7
CiAgICAgCiBwcml2YXRlOgotICAgIENJSW1hZ2UqIGNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZm
ZWN0Jik7CisgICAgUmV0YWluUHRyPENJSW1hZ2U+IGNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZm
ZWN0JiwgaW50KTsKICAgICB2b2lkIHJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0Jikg
ZmluYWw7CiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoRmlsdGVy
RWZmZWN0Jik7CiAgICAgc3RhdGljIGJvb2wgY2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMoRmlsdGVy
RWZmZWN0Jik7CiAgICAgCisgICAgUmV0YWluUHRyPENJSW1hZ2U+IGltYWdlRm9yU291cmNlR3Jh
cGhpYyhTb3VyY2VHcmFwaGljJik7CisgICAgUmV0YWluUHRyPENJSW1hZ2U+IGltYWdlRm9yRkVD
b2xvck1hdHJpeChGRUNvbG9yTWF0cml4JiwgY29uc3QgVmVjdG9yPFJldGFpblB0cjxDSUltYWdl
Pj4mLCBpbnQpOworICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9vdXRw
dXRJbWFnZUJ1ZmZlcjsKLSAgICBIYXNoTWFwPFJlZjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmV0
YWluUHRyPENJRmlsdGVyPj4+IG1fY2lGaWx0ZXJTdG9yYWdlTWFwOworICAgIEhhc2hNYXA8aW50
LCBWZWN0b3I8UmV0YWluUHRyPENJRmlsdGVyPj4+IG1fY2lGaWx0ZXJTdG9yYWdlTWFwOwogICAg
IFJldGFpblB0cjxDSUltYWdlPiBtX291dHB1dEltYWdlOwotICAgIFJldGFpblB0cjxDSUNvbnRl
eHQ+IG1fY29udGV4dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
cmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQppbmRleCA5MzEzZjcxZTZl
ZmJhODQ2ZDY2NTUxZTEzMDkzOTE5ZTA4M2RkODRjLi45MGI2YzIwOGRmMmJlNTA5YjdhZWQwNDk4
ZTE0ZjQ3Mjc0OTFlYjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlLm1tCkBAIC0zMCwxMiArMzAsMTQgQEAKIAogI2ltcG9ydCAiRmlsdGVyLmgi
CiAjaW1wb3J0ICJGaWx0ZXJFZmZlY3QuaCIKKyNpbXBvcnQgIkZpbHRlck9wZXJhdGlvbi5oIgog
I2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbXBvcnQgIkltYWdlQnVmZmVyLmgiCiAj
aW1wb3J0ICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCiAjaW1wb3J0IDxDb3JlSW1hZ2UvQ0lDb250
ZXh0Lmg+CiAjaW1wb3J0IDxDb3JlSW1hZ2UvQ0lGaWx0ZXIuaD4KICNpbXBvcnQgPENvcmVJbWFn
ZS9Db3JlSW1hZ2UuaD4KKyNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTQ2LDEyICs0OCwzMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjp0
cgogICAgIHJldHVybiBudWxscHRyOwogfQogCitSZXRhaW5QdHI8Q0lDb250ZXh0PiBGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Z2V0Q0lDb250ZXh0KCkKK3sKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPENJQ29udGV4dD4+IGNpQ29udGV4dCA9IGFkb3B0TlMoW0NJ
Q29udGV4dCBjb250ZXh0V2l0aE9wdGlvbnM6IEB7IGtDSUNvbnRleHRXb3JraW5nQ29sb3JTcGFj
ZTogKF9fYnJpZGdlIGlkKUNHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VT
UkdCKX1dKTsKKyAgICByZXR1cm4gW2NpQ29udGV4dC5nZXQoKSByZXRhaW5dOworfQorCiBib29s
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmlu
ZyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKIHsKICAgICAvLyBGSVhNRTogY2hhbmdlIHJldHVybiB2
YWx1ZSB0byB0cnVlIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQKICAgICBzd2l0Y2ggKGVmZmVj
dC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSkgeworICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpTb3VyY2VHcmFwaGljOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIAorICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDogeworICAgICAgICBzd2l0Y2gg
KGRvd25jYXN0PEZFQ29sb3JNYXRyaXg+KGVmZmVjdCkudHlwZSgpKSB7CisgICAgICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX0xVTUlOQU5DRVRPQUxQSEE6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKKyAgICAgICAgY2FzZSBGRUNPTE9STUFU
UklYX1RZUEVfU0FUVVJBVEU6CisgICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJP
VEFURToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCiAgICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpDb2xvck1hdHJpeDoKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9uZW50
VHJhbnNmZXI6CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvc2l0ZToKICAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29udm9sdmVNYXRyaXg6CkBAIC02OSw3ICs5MSw2IEBA
IGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdlUmVu
ZGVyaW5nKEZpbHRlckVmZmVjdCYgZWZmCiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlRp
bGU6CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlR1cmJ1bGVuY2U6CiAgICAgY2FzZSBG
aWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpTb3VyY2VHcmFwaGljOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJl
dHVybiBmYWxzZTsKQEAgLTc3LDE4ICs5OCwxOCBAQCBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVy
Q29yZUltYWdlOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3QmIGVmZgog
CiB2b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMoRmlsdGVy
RWZmZWN0JiBsYXN0RWZmZWN0KQogewotICAgIG1fb3V0cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0
ZXJzKGxhc3RFZmZlY3QpOworICAgIG1fb3V0cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGxh
c3RFZmZlY3QsIDEpOwogICAgIGlmICghbV9vdXRwdXRJbWFnZSkKICAgICAgICAgcmV0dXJuOwog
ICAgIHJlbmRlclRvSW1hZ2VCdWZmZXIobGFzdEVmZmVjdCk7CiB9CiAKLUNJSW1hZ2UqIEZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYg
ZWZmZWN0KQorUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
Ojpjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBpbnQgdHJhdmVyc2FsT3Jk
ZXIpCiB7Ci0gICAgVmVjdG9yPENJSW1hZ2UqPiBpbnB1dEltYWdlczsKKyAgICBWZWN0b3I8UmV0
YWluUHRyPENJSW1hZ2U+PiBpbnB1dEltYWdlczsKICAgICAKICAgICBmb3IgKGF1dG8gaW4gOiBl
ZmZlY3QuaW5wdXRFZmZlY3RzKCkpIHsKLSAgICAgICAgQ0lJbWFnZSogaW5wdXRJbWFnZSA9IGNv
bm5lY3RDSUZpbHRlcnMoKmluKTsKKyAgICAgICAgYXV0byBpbnB1dEltYWdlID0gY29ubmVjdENJ
RmlsdGVycygqaW4sIHRyYXZlcnNhbE9yZGVyICsgMSk7CiAgICAgICAgIGlmICghaW5wdXRJbWFn
ZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpbnB1dEltYWdlcy5hcHBl
bmQoaW5wdXRJbWFnZSk7CkBAIC05OSwxMCArMTIwLDE0IEBAIENJSW1hZ2UqIEZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0
KQogICAgIGlmIChlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5pc0VtcHR5KCkgfHwgSW1hZ2VC
dWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUo
KSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhvc2UgZmlsdGVycyB1c2luZyBDSUZpbHRlciBzbyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1
cm5zIGEgdmFsaWQgQ0lJbWFnZQogICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRlckVmZmVjdENsYXNz
VHlwZSgpKSB7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgorICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgorICAgICAgICByZXR1cm4gaW1hZ2VG
b3JTb3VyY2VHcmFwaGljKGRvd25jYXN0PFNvdXJjZUdyYXBoaWM+KGVmZmVjdCkpOwogICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDoKKyAgICAgICAgcmV0dXJuIGltYWdl
Rm9yRkVDb2xvck1hdHJpeChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZlY3QpLCBpbnB1dElt
YWdlcywgdHJhdmVyc2FsT3JkZXIpOworCisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aG9zZSBm
aWx0ZXJzIHVzaW5nIENJRmlsdGVyIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB2YWxp
ZCBDSUltYWdlCisgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgogICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb25lbnRUcmFuc2ZlcjoKICAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6Q29tcG9zaXRlOgogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252
b2x2ZU1hdHJpeDoKQEAgLTEyMCwxMyArMTQ1LDg5IEBAIENJSW1hZ2UqIEZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0KQog
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUaWxlOgogICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpUdXJidWxlbmNlOgogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VB
bHBoYToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYzoKICAgICBk
ZWZhdWx0OgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKK1JldGFpblB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFn
ZTo6aW1hZ2VGb3JTb3VyY2VHcmFwaGljKFNvdXJjZUdyYXBoaWMmIGVmZmVjdCkKK3sKKyAgICBJ
bWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBlZmZlY3QuZmlsdGVyKCkuc291cmNlSW1hZ2UoKTsK
KyAgICBpZiAoIXNvdXJjZUltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAg
ICBpZiAoaXM8QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcj4oKnNvdXJjZUltYWdlKSkgeworICAgICAg
ICBhdXRvJiBzdXJmYWNlID0gZG93bmNhc3Q8QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcj4oKnNvdXJj
ZUltYWdlKS5zdXJmYWNlKCk7CisgICAgICAgIElPU3VyZmFjZVJlZiBzdXJmYWNlUmVmID0gc3Vy
ZmFjZS5zdXJmYWNlKCk7CisgICAgICAgIHJldHVybiBSZXRhaW5QdHI8Q0lJbWFnZT4oW0NJSW1h
Z2UgaW1hZ2VXaXRoSU9TdXJmYWNlOnN1cmZhY2VSZWZdKTsKKyAgICB9CisgICAgTmF0aXZlSW1h
Z2VQdHIgc291cmNlQ0dJbWFnZVJlZiA9IHNvdXJjZUltYWdlLT5jb3B5TmF0aXZlSW1hZ2UoKTsK
KyAgICByZXR1cm4gUmV0YWluUHRyPENJSW1hZ2U+KFtDSUltYWdlIGltYWdlV2l0aENHSW1hZ2U6
c291cmNlQ0dJbWFnZVJlZi5nZXQoKV0pOworfQorCitSZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmltYWdlRm9yRkVDb2xvck1hdHJpeChGRUNvbG9yTWF0
cml4JiBlZmZlY3QsIGNvbnN0IFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+JiBpbnB1dEltYWdl
cywgaW50IHRyYXZlcnNhbE9yZGVyKQoreworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0SW1h
Z2VzLmF0KDApOworCisgICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBGRUNvbG9yTWF0cml4Ojpu
b3JtYWxpemVkRmxvYXRzKGVmZmVjdC52YWx1ZXMoKSk7CisgICAgZmxvYXQgY29tcG9uZW50c1s5
XTsKKyAgICAKKyAgICBzd2l0Y2ggKGVmZmVjdC50eXBlKCkpIHsKKyAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9TQVRVUkFURTogeworICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVT
YXR1cmF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogeworICAgICAg
ICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMs
IHZhbHVlc1swXSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9NQVRSSVg6CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9VTktOT1dOOgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlO
QU5DRVRPQUxQSEE6IC8vIEZJWE1FOiBBZGQgTHVtaW5hbmNlIHRvIEFscGhhIEltcGxlbWVudGF0
aW9uCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBDSUZpbHRlciAq
Y29sb3JNYXRyaXhGaWx0ZXI7CisgICAgaWYgKG1fY2lGaWx0ZXJTdG9yYWdlTWFwLmNvbnRhaW5z
KHRyYXZlcnNhbE9yZGVyKSkgeworICAgICAgICBWZWN0b3I8UmV0YWluUHRyPENJRmlsdGVyPj4g
Y2FjaGVkQ0lGaWx0ZXJzID0gbV9jaUZpbHRlclN0b3JhZ2VNYXAuZ2V0KHRyYXZlcnNhbE9yZGVy
KTsKKyAgICAgICAgY29sb3JNYXRyaXhGaWx0ZXIgPSBjYWNoZWRDSUZpbHRlcnMuYXQoMCkuZ2V0
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29sb3JNYXRyaXhGaWx0ZXIgPSBbQ0lGaWx0ZXIg
ZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yTWF0cml4Il07CisgICAgICAgIFZlY3RvcjxSZXRhaW5Q
dHI8Q0lGaWx0ZXI+PiBmaWx0ZXJzVG9CZUNhY2hlZDsKKyAgICAgICAgZmlsdGVyc1RvQmVDYWNo
ZWQuaW5zZXJ0KDAsIGNvbG9yTWF0cml4RmlsdGVyKTsKKyAgICAgICAgbV9jaUZpbHRlclN0b3Jh
Z2VNYXAuYWRkKHRyYXZlcnNhbE9yZGVyLCBmaWx0ZXJzVG9CZUNhY2hlZCk7CisgICAgfQorICAg
IAorICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlLmdldCgpIGZvcktl
eTprQ0lJbnB1dEltYWdlS2V5XTsKKyAgICAKKyAgICBzd2l0Y2ggKGVmZmVjdC50eXBlKCkpIHsK
KyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKKyAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9IVUVST1RBVEU6IHsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZh
bHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25lbnRzWzBdIFk6Y29tcG9uZW50c1sxXSBa
OmNvbXBvbmVudHNbMl0gVzowXSBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKKyAgICAgICAgW2Nv
bG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25lbnRz
WzNdIFk6Y29tcG9uZW50c1s0XSBaOmNvbXBvbmVudHNbNV0gVzowXSBmb3JLZXk6QCJpbnB1dEdW
ZWN0b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2
ZWN0b3JXaXRoWDpjb21wb25lbnRzWzZdIFk6Y29tcG9uZW50c1s3XSBaOmNvbXBvbmVudHNbOF0g
VzowXSBmb3JLZXk6QCJpbnB1dEJWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVy
IHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowICAgICAgICAgICAgIFk6MCAgICAgICAg
ICAgICBaOjAgICAgICAgICAgICAgVzoxXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsKKyAgICAg
ICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowICAg
ICAgICAgICAgIFk6MCAgICAgICAgICAgICBaOjAgICAgICAgICAgICAgVzowXSBmb3JLZXk6QCJp
bnB1dEJpYXNWZWN0b3IiXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX01BVFJJWDogeworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFs
dWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1swXSAgWTp2YWx1ZXNbMV0gIFo6dmFsdWVz
WzJdICBXOnZhbHVlc1szXV0gIGZvcktleTpAImlucHV0UlZlY3RvciJdOworICAgICAgICBbY29s
b3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1s1XSAg
WTp2YWx1ZXNbNl0gIFo6dmFsdWVzWzddICBXOnZhbHVlc1s4XV0gIGZvcktleTpAImlucHV0R1Zl
Y3RvciJdOworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZl
Y3RvcldpdGhYOnZhbHVlc1sxMF0gWTp2YWx1ZXNbMTFdIFo6dmFsdWVzWzEyXSBXOnZhbHVlc1sx
M11dIGZvcktleTpAImlucHV0QlZlY3RvciJdOworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIg
c2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1sxNV0gWTp2YWx1ZXNbMTZdIFo6
dmFsdWVzWzE3XSBXOnZhbHVlc1sxOF1dIGZvcktleTpAImlucHV0QVZlY3RvciJdOworICAgICAg
ICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVl
c1s0XSAgWTp2YWx1ZXNbOV0gIFo6dmFsdWVzWzE0XSBXOnZhbHVlc1sxOV1dIGZvcktleTpAImlu
cHV0Qmlhc1ZlY3RvciJdOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9VTktOT1dOOgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIFJl
dGFpblB0cjxDSUltYWdlPihjb2xvck1hdHJpeEZpbHRlci5vdXRwdXRJbWFnZSk7Cit9CisKIGJv
b2wgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNhblJlbmRlclVzaW5nQ0lGaWx0ZXJz
KEZpbHRlckVmZmVjdCYgZWZmZWN0KQogewogICAgIGlmICghc3VwcG9ydHNDb3JlSW1hZ2VSZW5k
ZXJpbmcoZWZmZWN0KSkKQEAgLTE0MSw2ICsyNDIsNyBAQCBib29sIEZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlOjpjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJFZmZlY3QmIGVmZmVj
dAogCiBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6Om91dHB1dCgp
IGNvbnN0CiB7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVy
aW5nICIgPDwgdGhpcyA8PCAiIHVzaW5nIENvcmVJbWFnZVxuIik7CiAgICAgcmV0dXJuIG1fb3V0
cHV0SW1hZ2VCdWZmZXIuZ2V0KCk7CiB9CiAgICAgCkBAIC0xNjEsNyArMjYzLDE2IEBAIHZvaWQg
RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVy
RWZmZWN0JiBsYXN0RWZmZWN0CiAgICAgCiAgICAgYXV0byYgc3VyZmFjZSA9IGRvd25jYXN0PEFj
Y2VsZXJhdGVkSW1hZ2VCdWZmZXI+KCptX291dHB1dEltYWdlQnVmZmVyKS5zdXJmYWNlKCk7CiAg
ICAgQ0dDb2xvclNwYWNlUmVmIHJlc3VsdENvbG9yU3BhY2UgPSBjYWNoZWRDR0NvbG9yU3BhY2Uo
bGFzdEVmZmVjdC5yZXN1bHRDb2xvclNwYWNlKCkpOwotICAgIFttX2NvbnRleHQuZ2V0KCkgcmVu
ZGVyOiBtX291dHB1dEltYWdlLmdldCgpIHRvSU9TdXJmYWNlOiBzdXJmYWNlLnN1cmZhY2UoKSBi
b3VuZHM6ZGVzdFJlY3QobGFzdEVmZmVjdCkgY29sb3JTcGFjZTpyZXN1bHRDb2xvclNwYWNlXTsK
KyAgICBDR1JlY3QgYm91bmRzID0gZGVzdFJlY3QobGFzdEVmZmVjdCk7CisgICAgCisgICAgUmV0
YWluUHRyPENJUmVuZGVyRGVzdGluYXRpb24+IGRlc3RpbmF0aW9uID0gYWRvcHROUyhbW0NJUmVu
ZGVyRGVzdGluYXRpb24gYWxsb2NdIGluaXRXaXRoSU9TdXJmYWNlOig6OklPU3VyZmFjZSopc3Vy
ZmFjZS5zdXJmYWNlKCldKTsKKyAgICBkZXN0aW5hdGlvbi5nZXQoKS5jb2xvclNwYWNlID0gcmVz
dWx0Q29sb3JTcGFjZTsKKyAgICBhdXRvIGNpQ29udGV4dCA9IGdldENJQ29udGV4dCgpOworICAg
IFtjaUNvbnRleHQuZ2V0KCkgc3RhcnRUYXNrVG9SZW5kZXI6bV9vdXRwdXRJbWFnZS5nZXQoKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tUmVjdDpib3VuZHMKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRvRGVzdGluYXRpb246ZGVzdGluYXRpb24uZ2V0KCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGF0UG9pbnQ6Q0dQb2ludE1ha2UoYm91bmRzLm9yaWdpbi54LCBi
b3VuZHMub3JpZ2luLnkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOm5p
bF07CiB9CiAgICAgCiBGbG9hdFJlY3QgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmRl
c3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkgY29uc3QKQEAgLTE3NywxNCAr
Mjg4LDExIEBAIHZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNsZWFyUmVzdWx0
KCkKICAgICBtX291dHB1dEltYWdlQnVmZmVyLnJlc2V0KCk7CiAgICAgbV9jaUZpbHRlclN0b3Jh
Z2VNYXAuY2xlYXIoKTsKICAgICBtX291dHB1dEltYWdlID0gbnVsbHB0cjsKLSAgICBtX2NvbnRl
eHQgPSBudWxscHRyOwogfQogCiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6RmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UoKQogICAgIDogRmlsdGVyRWZmZWN0UmVuZGVyZXIoKQog
ewotICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0gY2FjaGVkQ0dDb2xvclNwYWNlKENv
bG9yU3BhY2U6OlNSR0IpOwotICAgIG1fY29udGV4dCA9IFtDSUNvbnRleHQgY29udGV4dFdpdGhP
cHRpb25zOiBAeyBrQ0lDb250ZXh0V29ya2luZ0NvbG9yU3BhY2U6IChfX2JyaWRnZSBpZCljb2xv
clNwYWNlfV07CiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5o
CmluZGV4IDA5MGU2ODJlOGE3NWUwNWIwMjY1ZWNmMmZmMWJiM2NlNjJjNDA2NjkuLjdjNmRjNTdm
YmEyMWJiNjMxNWM1YTc2YzAwZTAyYjFmYWJlZWEwY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCkBAIC05
MywzICs5Myw3IEBAIGlubGluZSB2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0
ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGRUNvbG9yTWF0
cml4KQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Qm
IGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpID09IFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg7IH0KK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRU5EKCkKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IDc1NjJmZGQ2MDU4NjdmNjI4Y2Ez
MmMzMTVjOWQzNzI5MDM3NmYzODguLjdlMTNjZmY2NjNkYWJmMjgzODM2YWI5N2I2MjYzZGVlMTE0
ZjQyZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTc5LDcgKzc5LDYgQEAgRmxvYXRQb2ludCBG
aWx0ZXJFZmZlY3Q6Om1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKEZsb2F0UG9pbnQgdXNl
clNwYWNlUG9pbnQKIAogSW50UmVjdCBGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgZWZmZWN0UmVjdCkgY29uc3QKIHsKLSAgICBBU1NF
UlQoaGFzUmVzdWx0KCkpOwogICAgIEludFBvaW50IGxvY2F0aW9uID0gbV9hYnNvbHV0ZVBhaW50
UmVjdC5sb2NhdGlvbigpOwogICAgIGxvY2F0aW9uLm1vdmVCeSgtZWZmZWN0UmVjdC5sb2NhdGlv
bigpKTsKICAgICByZXR1cm4gSW50UmVjdChsb2NhdGlvbiwgbV9hYnNvbHV0ZVBhaW50UmVjdC5z
aXplKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5kZXggMTFhYzYwYWE2NDExNzQxYWIxMzY0NmZjZDE2YTA1
NGIzOWMyZmM3Yy4uZWVhMGFkMmY4NTI5OGZlOWE2YTM5MTNiMWZhZDU3MDc1YTkyZWUyNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5oCkBAIC0xNTUsNyArMTU1LDcgQEAgcHVibGljOgogICAgIAogICAgIEZsb2F0
UG9pbnQgbWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoRmxvYXRQb2ludCkgY29uc3Q7CiAg
ICAgCi0gICAgVHlwZSBmaWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSB7IHJldHVybiBtX2ZpbHRlckVm
ZmVjdENsYXNzVHlwZTsgfQorICAgIFR5cGUgZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7IH0KIAogICAgIEZpbHRlciYgZmlsdGVy
KCkgeyByZXR1cm4gbV9maWx0ZXI7IH0KICAgICBjb25zdCBGaWx0ZXImIGZpbHRlcigpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsdGVyOyB9CkBAIC0xNzAsNiArMTcwLDE0IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCogaW4s
IGNvbnN0IGludCkgeyBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0Nv
bG9yU3BhY2UpOyB9CiAgICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKENvbG9yU3Bh
Y2UpOworICAgIAorICAgIHN0YXRpYyBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRGbG9hdHMoY29u
c3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQorICAgIHsKKyAgICAgICAgVmVjdG9yPGZsb2F0PiBu
b3JtYWxpemVkVmFsdWVzKHZhbHVlcy5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZXNb
aV0gPSBub3JtYWxpemVkRmxvYXQodmFsdWVzW2ldKTsKKyAgICAgICAgcmV0dXJuIG5vcm1hbGl6
ZWRWYWx1ZXM7CisgICAgfQogCiBwcm90ZWN0ZWQ6CiAgICAgRmlsdGVyRWZmZWN0KEZpbHRlciYs
IFR5cGUpOwpAQCAtMTg4LDE0ICsxOTYsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmb3JjZVZh
bGlkUHJlTXVsdGlwbGllZFBpeGVscygpOwogCiAgICAgdm9pZCBjbGlwQWJzb2x1dGVQYWludFJl
Y3QoKTsKLSAgICAKLSAgICBzdGF0aWMgVmVjdG9yPGZsb2F0PiBub3JtYWxpemVkRmxvYXRzKGNv
bnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcykKLSAgICB7Ci0gICAgICAgIFZlY3RvcjxmbG9hdD4g
bm9ybWFsaXplZFZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBub3JtYWxpemVkVmFsdWVz
W2ldID0gbm9ybWFsaXplZEZsb2F0KHZhbHVlc1tpXSk7Ci0gICAgICAgIHJldHVybiBub3JtYWxp
emVkVmFsdWVzOwotICAgIH0KIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAppbmRleCAwZjAxZGRhMDZjZTAyNzEz
NWI3MWNhNWNjMDM0Mzc1ZTE5MTk2NDU2Li5mNjczY2U0YzdmMjkzYWExOTEzNWY5Yzc3ZTYwYzIy
NzcxNjEzOThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApAQCAtNTAsNCArNTAsOSBAQCBwcml2YXRlOgog
CiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihX
ZWJDb3JlOjpTb3VyY2VHcmFwaGljKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJD
b3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVjdENs
YXNzVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYzsg
fQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisKICNlbmRpZiAvLyBTb3VyY2VHcmFw
aGljX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKaW5kZXggYWZlYjkyOTU1
MzUzNDI3ODAyY2UyOTA2MDdkYTFhODk3Y2Y4Y2EyMC4uYWFhMWYwMGVlOWY4NGQ1MzY3ZGM0NGM2
YzU0MjJjNDY5Y2Q1OTM2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NT
U0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAK
QEAgLTMwNCw3ICszMDQsOCBAQCBib29sIENTU0ZpbHRlcjo6YnVpbGQoUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbgogCiAgICAgc2V0TWF4
RWZmZWN0UmVjdHMobV9zb3VyY2VEcmF3aW5nUmVnaW9uKTsKICNpZiBVU0UoQ09SRV9JTUFHRSkK
LSAgICBtX2ZpbHRlclJlbmRlcmVyID0gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnRyeUNyZWF0ZShy
ZW5kZXJlci5zZXR0aW5ncygpLmNvcmVJbWFnZUFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyRW5hYmxl
ZCgpLCBtX2VmZmVjdHMubGFzdCgpLmdldCgpKTsKKyAgICBpZiAoIW1fZmlsdGVyUmVuZGVyZXIp
CisgICAgICAgIG1fZmlsdGVyUmVuZGVyZXIgPSBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dHJ5Q3Jl
YXRlKHJlbmRlcmVyLnNldHRpbmdzKCkuY29yZUltYWdlQWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJF
bmFibGVkKCksIG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCkpOwogI2VuZGlmCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC0zMzYsNyArMzM3LDEwIEBAIHZvaWQgQ1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tp
bmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgdGFyZ2V0Q29udGV4CiAgICAg
ICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIHJlbmRl
cmluZ01vZGUoKSwgJnRhcmdldENvbnRleHQsIGZpbHRlclNjYWxlKCkpKTsKICNlbHNlCiAgICAg
ICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRDb250ZXh0KTsKLSAgICAgICAgc2V0U291cmNlSW1hZ2Uo
SW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCBmaWx0ZXJT
Y2FsZSgpKSk7CisgICAgICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyKQorICAgICAgICAgICAgc2V0
U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9k
ZTo6QWNjZWxlcmF0ZWQsIGZpbHRlclNjYWxlKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVy
aW5nTW9kZSgpLCBmaWx0ZXJTY2FsZSgpKSk7CiAjZW5kaWYKICAgICB9CiAgICAgbV9ncmFwaGlj
c0J1ZmZlckF0dGFjaGVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBkMDQ0N2MxOTk4NDA4NDk0MWNjMWMxZDE0
Y2ViZDIwNTg1MGYzZjc1Li4zOTFkNGVjMGJiOGFiZjMzNGMzNzkxYTg0ZjljYjhmNWNmOTkxOTRk
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjAtMDgtMjggIEZyYW5rIFlhbmcgIDxndW93ZWlf
eWFuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29yZUltYWdlIEltcGxlbWVudGF0aW9uIG9mIFNv
dXJjZUdyYXBoaWMgYW5kIHNhdHVyYXRlLCBodWUtcm90YXRlLCBncmF5c2NhbGUgYW5kIHNlcGlh
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM2NzMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNzczMv
ZmlsdGVycy9lZmZlY3QtZ3JheXNjYWxlLXNxdWFyZS1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBjc3MzL2ZpbHRlcnMvZWZmZWN0LWdyYXlzY2FsZS1zcXVhcmUuaHRtbDogQWRkZWQu
CisgICAgICAgICogY3NzMy9maWx0ZXJzL2VmZmVjdC1odWUtcm90YXRlLXNxdWFyZS1leHBlY3Rl
ZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBjc3MzL2ZpbHRlcnMvZWZmZWN0LWh1ZS1yb3RhdGUt
c3F1YXJlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNzczMvZmlsdGVycy9lZmZlY3Qtc2F0dXJh
dGUtc3F1YXJlLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNzczMvZmlsdGVycy9l
ZmZlY3Qtc2F0dXJhdGUtc3F1YXJlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNzczMvZmlsdGVy
cy9lZmZlY3Qtc2VwaWEtc3F1YXJlLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNz
czMvZmlsdGVycy9lZmZlY3Qtc2VwaWEtc3F1YXJlLmh0bWw6IEFkZGVkLgorCiAyMDIwLTA4LTI4
ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJFR1JFU1NJ
T04gKHIyNjM1MDYpOiBzY2FsZSB0cmFuc2Zvcm0gdHJhbnNpdGlvbnMgd29uJ3Qgb3ZlcnNob290
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LWdyYXlzY2FsZS1z
cXVhcmUtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3QtZ3Jh
eXNjYWxlLXNxdWFyZS1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3MjgxNzIyN2RkMDViYjY2
NTFmYTIyZGVjNTVlMmIzMjBmNjBhNjgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9j
c3MzL2ZpbHRlcnMvZWZmZWN0LWdyYXlzY2FsZS1zcXVhcmUtZXhwZWN0ZWQuaHRtbApAQCAtMCww
ICsxLDE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPkNT
UyBGaWx0ZXIgVGVzdDogVGVzdCBmb3IgU2F0dXJhdGUgc2hvcnQgaGFuZDwvdGl0bGU+CisgICAg
PHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgICBkaXYgeworICAgICAgICB3aWR0aDogNjAwcHg7
CisgICAgICAgIGhlaWdodDogNjAwcHg7IAorICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoMTU0LCAy
NywgMjcpOworICAgIH0KKworICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8cD5Z
b3Ugc2hvdWxkIHNlZSBhIGdyZWVuIHJlY3RhbmdsZS48L3A+CisgICAgPGRpdj48L2Rpdj4KKwor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2Vm
ZmVjdC1ncmF5c2NhbGUtc3F1YXJlLmh0bWwgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZm
ZWN0LWdyYXlzY2FsZS1zcXVhcmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNmE0ZDM3Y2JlYjQ0ZTY4NDNi
OWMxOGVhZTI1ZDRkMDMzOTI3YjUyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3Nz
My9maWx0ZXJzL2VmZmVjdC1ncmF5c2NhbGUtc3F1YXJlLmh0bWwKQEAgLTAsMCArMSwyMCBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5DU1MgRmlsdGVyIFRl
c3Q6IFRlc3QgZm9yIFNhdHVyYXRlIHNob3J0IGhhbmQ8L3RpdGxlPgorICAgIDxzdHlsZSB0eXBl
PSJ0ZXh0L2NzcyI+CisgICAgZGl2IHsKKyAgICAgICAgd2lkdGg6IDYwMHB4OworICAgICAgICBo
ZWlnaHQ6IDYwMHB4OyAKKyAgICAgICAgYmFja2dyb3VuZDogcmVkOworICAgICAgICBmaWx0ZXI6
IGdyYXlzY2FsZSg1MCUpOworICAgIH0KKworICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4K
KyAgICA8cD5Zb3Ugc2hvdWxkIHNlZSBhIGdyZWVuIHJlY3RhbmdsZS48L3A+CisgICAgPGRpdj48
L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9m
aWx0ZXJzL2VmZmVjdC1odWUtcm90YXRlLXNxdWFyZS1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVz
dHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1odWUtcm90YXRlLXNxdWFyZS1leHBlY3RlZC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjkwN2JiNDNiZTNlMTE3YTBhOWZiYWMxMTkzYmZhMTI3OGYyOTZjMWQKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LWh1ZS1yb3RhdGUt
c3F1YXJlLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5DU1MgRmlsdGVyIFRlc3Q6IFRlc3QgZm9yIFNhdHVy
YXRlIHNob3J0IGhhbmQ8L3RpdGxlPgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAg
ZGl2IHsKKyAgICAgICAgd2lkdGg6IDYwMHB4OworICAgICAgICBoZWlnaHQ6IDYwMHB4OyAKKyAg
ICAgICAgYmFja2dyb3VuZDogcmdiKDAsIDkxLCAwKTsKKyAgICB9CisKKyAgICA8L3N0eWxlPgor
PC9oZWFkPgorPGJvZHk+CisgICAgPHA+WW91IHNob3VsZCBzZWUgYSBncmVlbiByZWN0YW5nbGUu
PC9wPgorICAgIDxkaXY+PC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3QtaHVlLXJvdGF0ZS1zcXVhcmUuaHRtbCBiL0xh
eW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3QtaHVlLXJvdGF0ZS1zcXVhcmUuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yOTg4Njg5MzY3ZTVlOWYxYjY1NzZlZWI2ODczNzg0Y2Y2OWE1YjM4Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1odWUtcm90YXRlLXNx
dWFyZS5odG1sCkBAIC0wLDAgKzEsMjAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKyAgICA8dGl0bGU+Q1NTIEZpbHRlciBUZXN0OiBUZXN0IGZvciBTYXR1cmF0ZSBzaG9ydCBo
YW5kPC90aXRsZT4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgIGRpdiB7CisgICAg
ICAgIHdpZHRoOiA2MDBweDsKKyAgICAgICAgaGVpZ2h0OiA2MDBweDsgCisgICAgICAgIGJhY2tn
cm91bmQ6IHJlZDsKKyAgICAgICAgZmlsdGVyOiBodWUtcm90YXRlKDkwZGVnKTsKKyAgICB9CisK
KyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisgICAgPHA+WW91IHNob3VsZCBzZWUgYSBn
cmVlbiByZWN0YW5nbGUuPC9wPgorICAgIDxkaXY+PC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3Qtc2F0dXJhdGUtc3F1
YXJlLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LXNhdHVy
YXRlLXNxdWFyZS1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3MjgxNzIyN2RkMDViYjY2NTFm
YTIyZGVjNTVlMmIzMjBmNjBhNjgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3Mz
L2ZpbHRlcnMvZWZmZWN0LXNhdHVyYXRlLXNxdWFyZS1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEs
MTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8dGl0bGU+Q1NTIEZp
bHRlciBUZXN0OiBUZXN0IGZvciBTYXR1cmF0ZSBzaG9ydCBoYW5kPC90aXRsZT4KKyAgICA8c3R5
bGUgdHlwZT0idGV4dC9jc3MiPgorICAgIGRpdiB7CisgICAgICAgIHdpZHRoOiA2MDBweDsKKyAg
ICAgICAgaGVpZ2h0OiA2MDBweDsgCisgICAgICAgIGJhY2tncm91bmQ6IHJnYigxNTQsIDI3LCAy
Nyk7CisgICAgfQorCisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxwPllvdSBz
aG91bGQgc2VlIGEgZ3JlZW4gcmVjdGFuZ2xlLjwvcD4KKyAgICA8ZGl2PjwvZGl2PgorCis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0
LXNhdHVyYXRlLXNxdWFyZS5odG1sIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1z
YXR1cmF0ZS1zcXVhcmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NzBjYjI2YWExYjNiNDJmNWRjNDg3NGU5
MjhhNWU2MmVjYzdlNDE5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0
ZXJzL2VmZmVjdC1zYXR1cmF0ZS1zcXVhcmUuaHRtbApAQCAtMCwwICsxLDIwIEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPkNTUyBGaWx0ZXIgVGVzdDogVGVz
dCBmb3IgU2F0dXJhdGUgc2hvcnQgaGFuZDwvdGl0bGU+CisgICAgPHN0eWxlIHR5cGU9InRleHQv
Y3NzIj4KKyAgICBkaXYgeworICAgICAgICB3aWR0aDogNjAwcHg7CisgICAgICAgIGhlaWdodDog
NjAwcHg7IAorICAgICAgICBiYWNrZ3JvdW5kOiByZWQ7CisgICAgICAgIGZpbHRlcjogc2F0dXJh
dGUoNTAlKTsKKyAgICB9CisKKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisgICAgPHA+
WW91IHNob3VsZCBzZWUgYSBncmVlbiByZWN0YW5nbGUuPC9wPgorICAgIDxkaXY+PC9kaXY+CisK
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9l
ZmZlY3Qtc2VwaWEtc3F1YXJlLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRl
cnMvZWZmZWN0LXNlcGlhLXNxdWFyZS1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0ZGNhMjhl
M2U2MzdlYzQ1YjJjNzg3ZWJhOTA4MTVjMjlkMWIyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LXNlcGlhLXNxdWFyZS1leHBlY3RlZC5odG1sCkBA
IC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8dGl0
bGU+Q1NTIEZpbHRlciBUZXN0OiBUZXN0IGZvciBTYXR1cmF0ZSBzaG9ydCBoYW5kPC90aXRsZT4K
KyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgIGRpdiB7CisgICAgICAgIHdpZHRoOiA2
MDBweDsKKyAgICAgICAgaGVpZ2h0OiA2MDBweDsgCisgICAgICAgIGJhY2tncm91bmQ6IHJnYigy
NCwgMjEsIDE0NCk7CisgICAgfQorCisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PiAKKyAg
ICA8cD5Zb3Ugc2hvdWxkIHNlZSBhIGdyZWVuIHJlY3RhbmdsZS48L3A+CisgICAgPGRpdj48L2Rp
dj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9maWx0
ZXJzL2VmZmVjdC1zZXBpYS1zcXVhcmUuaHRtbCBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9l
ZmZlY3Qtc2VwaWEtc3F1YXJlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjg5YWNhNTc4ODc3YWM4MzlmZmZm
ZjE3NTEwNDRlNjFmMmY2MmFiNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2NzczMv
ZmlsdGVycy9lZmZlY3Qtc2VwaWEtc3F1YXJlLmh0bWwKQEAgLTAsMCArMSwyMCBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5DU1MgRmlsdGVyIFRlc3Q6IFRl
c3QgZm9yIFNhdHVyYXRlIHNob3J0IGhhbmQ8L3RpdGxlPgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0
L2NzcyI+CisgICAgZGl2IHsKKyAgICAgICAgd2lkdGg6IDYwMHB4OworICAgICAgICBoZWlnaHQ6
IDYwMHB4OyAKKyAgICAgICAgYmFja2dyb3VuZDogYmx1ZTsKKyAgICAgICAgZmlsdGVyOiBzZXBp
YSg1MCUpOworICAgIH0KKworICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8cD5Z
b3Ugc2hvdWxkIHNlZSBhIGdyZWVuIHJlY3RhbmdsZS48L3A+CisgICAgPGRpdj48L2Rpdj4KKwor
PC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407691</attachid>
            <date>2020-09-01 10:20:35 -0700</date>
            <delta_ts>2020-09-02 13:01:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213673-20200901102034.patch</filename>
            <type>text/plain</type>
            <size>28259</size>
            <attacher>frankhome61</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MjgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWMxZjViYzkyNTFjNDRm
ZTM5OTQ1YmJlNjkzMzUzNTNhMGFiZmJmZC4uZTIyOTAxYzk3NWMxOWQzNDRkYzM1YjUyNTllMDc5
YTg3MDVkMWI3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDIwLTA5LTAxICBGcmFu
ayBZYW5nICA8Z3Vvd2VpX3lhbmdAYXBwbGUuY29tPgorCisgICAgICAgIENvcmVJbWFnZSBJbXBs
ZW1lbnRhdGlvbiBvZiBTb3VyY2VHcmFwaGljIGFuZCBzYXR1cmF0ZSgpLCBodWUtcm90YXRlKCks
IGdyYXlzY2FsZSgpIGFuZCBzZXBpYSgpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTM2NzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUZXN0czogY3NzMy9maWx0ZXJzL2VmZmVjdC1ncmF5c2NhbGUtc3F1
YXJlLmh0bWwKKyAgICAgICAgICAgICAgIGNzczMvZmlsdGVycy9lZmZlY3QtaHVlLXJvdGF0ZS1z
cXVhcmUuaHRtbAorICAgICAgICAgICAgICAgY3NzMy9maWx0ZXJzL2VmZmVjdC1zYXR1cmF0ZS1z
cXVhcmUuaHRtbAorICAgICAgICAgICAgICAgY3NzMy9maWx0ZXJzL2VmZmVjdC1zZXBpYS1zcXVh
cmUuaHRtbAorCisgICAgICAgIEFkZGVkIENvcmVJbWFnZSBpbXBsZW1lbnRhdGlvbiBvZiBTb3Vy
Y2VHcmFwaGljIGFuZCBwYXJ0aWFsIG9mIEZFQ29sb3JNYXRyaXgsIAorICAgICAgICB3aGljaCBp
cyB1c2VkIHRvIGltcGxlbWVudCBzZXBpYSgpLCBncmF5c2NhbGUoKSBodWUtcm90YXRlKCkgYW5k
IHNhdHVyYXRlKCkuCisgICAgICAgIEFsc28gYWRkZWQgQ0lGaWx0ZXIgY2FjaGluZywgYnkgc3Rv
cmluZyBDSUZpbHRlcnMgaW4gYSBoYXNoIG1hcCwgd2hlcmUgdGhlIGtleSAKKyAgICAgICAgaXMg
dGhlIGxldmVsIG9mIHRyYXZlcnNhbCAoYW4gaW50ZWdlcikuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaDoKKyAg
ICAgICAgICAgIEltcG9ydGVkIEZFQ29sb3JNYXRyaXguaCBhbmQgU291cmNlR3JhcGhpYy5oOyBh
ZGRlZCBmdW5jdGlvbiBnZXRDSUNvbnRleHQoKQorICAgICAgICAgICAgdGhhdCByZXR1cm5zIGEg
c3RhdGljIGNvcHkgb2YgQ0lDb250ZXh0LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nv
cmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpnZXRDSUNvbnRleHQpOiBDcmVhdGlu
ZyBhIAorICAgICAgICAgICAgQ0lDb250ZXh0IGlzIGV4cGVuc2l2ZS4gSW5zdGVhZCBvZiBjcmVh
dGluZyBhIENJQ29udGV4dCBvbiBlYWNoIGZyYW1lCisgICAgICAgICAgICB1cGRhdGUsIHdlIGp1
c3QgdXNlIGEgc3RhdGljIHNpbmdsZXRvbiBvbiBldmVyeSBkcmF3CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJp
bmcpOgorICAgICAgICAgICAgdGhlIGZ1bmN0aW9uIG5vdyByZXR1cm5zIHRydWUgaWYgdGhlIGZp
bHRlciBjaGFpbiBjb250YWlucyBTb3VyY2VHcmFwaGljCisgICAgICAgICAgICBhbmQgRkVDb2xv
ck1hdHJpeCBvZiBUWVBFX01BVFJJWCwgVFlQRV9TQVRVUkFURSBhbmQgVFlQRV9IVUVST1RBVEUK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0
Q0lGaWx0ZXJzKToKKyAgICAgICAgICAgIE1hZGUgc2xpZ2h0IGNoYW5nZXMgdG8gd3JhcCBPYmot
QyBwb2ludGVycyBpbiBSZXRhaW5QdHIKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjppbWFnZUZvclNvdXJjZUdyYXBoaWMpOgorICAgICAgICAgICAgVXNl
IHRoZSBzb3VyY2UgaW1hZ2UgdG8gY3JlYXRlIGEgQ0lJbWFnZSBhbmQgcmV0dXJuIGl0LiBJZiB0
aGUgc291cmNlIGltYWdlIAorICAgICAgICAgICAgaXMgYmFja2VkIGJ5IElPU3VyZmFjZSwgd2Ug
Y3JlYXRlIGEgQ0lJbWFnZSBkaXJlY3RseSBmcm9tIHRoZSBJT1N1cmZhY2U7IG90aGVyd2lzZQor
ICAgICAgICAgICAgd2UgY3JlYXRlIGEgQ0lJbWFnZSBieSBnZXR0aW5nIHRoZSBOYXRpdmVJbWFn
ZVB0ciBmcm9tIHNvdXJjZSBpbWFnZS4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjppbWFnZUZvckZFQ29sb3JNYXRyaXgpOgorICAgICAgICAgICAgQmFz
ZWQgb24gdGhlIHR5cGUgb2YgdGhlIG1hdHJpeCBhbmQgaW5wdXQgcGFyYW1ldGVyLCAKKyAgICAg
ICAgICAgIGNyZWF0ZSBkaWZmZXJlbnQgdHlwZXMgb2YgQ0lDb2xvck1hdHJpeCBmaWxlcnMgdGhh
dCBhcmUgdXNlZCB0byBpbXBsZW1lbnQgCisgICAgICAgICAgICBzZXBpYSwgZ3JheXNjYWxlLCBo
dWUtcm90YXRlLCBzYXR1cmF0ZQorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2U6Om91dHB1dCBjb25zdCk6CisgICAgICAgICAgICBBZGRlZCBhIGxvZ2dpbmcg
bGluZQorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnJl
bmRlclRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAgICAgVXNlcyBDSVJlbmRlckRlc3RpbmF0aW9u
IGluc3RlYWQgdG8gcmVuZGVyIENJSW1hZ2VzIHRvIElPU3VyZmFjZXMuIFRoaXMgd2lsbCBhdm9p
ZCAKKyAgICAgICAgICAgIHdhaXRzIG9uIHRoZSBDb3JlSW1hZ2Ugc2lkZS4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjbGVhclJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6RmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5oOgorICAgICAgICAoaXNUeXBlKTogYWRkZWQgU1BFQ0lBTElaRV9UWVBF
X1RSQUlUUyBzbyB0aGF0IHdlIGNhbiBkb3duY2FzdCB0byBGRUNvbG9yTWF0cml4CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhIGNv
bnN0KTogcmVtb3ZlZCAKKyAgICAgICAgICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7IGZyb20gdGhl
IGZ1bmN0aW9uLCBiZWNhdXNlIENvcmVJbWFnZSBwYXRoIHdvdWxkbid0IGNyZWF0ZSAKKyAgICAg
ICAgICAgIGltYWdlIGJ1ZmZlcnMgaW5zaWRlIEZpbHRlckVmZmVjdCwgYnV0IENJIHBhdGggc3Rp
bGwgbmVlZHMgdG8gY29uc3VsdCB0aGlzIGZ1bmN0aW9uCisgICAgICAgICAgICB0byBvYnRhaW4g
Z2VvbWV0cnkgaW5mbworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlckVmZmVjdENs
YXNzVHlwZSBjb25zdCk6IE1hZGUgdGhlIGZ1bmN0aW9uIGEgY29uc3QKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6bm9ybWFsaXplZEZsb2F0cyk6IENoYW5nZWQgdGhpcyBmdW5jdGlv
biB0byBwdWJsaWMgc2luY2UgaXQgaXMgCisgICAgICAgICAgICBjb25zdWx0ZWQgaW4gRmlsdGVy
RWZmZWN0Q29yZUltYWdlUmVuZGVyZXIuIAorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oOgorICAgICAgICAoaXNUeXBlKTogYWRkZWQg
U1BFQ0lBTElaRV9UWVBFX1RSQUlUUyBzbyB0aGF0IHdlIGNhbiBkb3duY2FzdCB0byBTb3VyY2VH
cmFwaGljCisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGaWx0ZXI6OmJ1aWxkKTogCisgICAgICAgICAgICBDaGVja3Mgd2hldGhlciBtX2Zp
bHRlclJlbmRlcmVyIGlzIGFscmVhZHkgY3JlYXRlZCwgbm8gbmVlZCB0byByZS1jcmVhdGUgaWYg
dGhlIHBvaW50ZXIgCisgICAgICAgICAgICBpcyBub24tbnVsbAorICAgICAgICAoV2ViQ29yZTo6
Q1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKTogCisgICAgICAgICAgICBJ
ZiB3ZSBhcmUgdXNpbmcgbV9maWx0ZXJSZW5kZXJlciwgd2hpY2ggaXMgY3VycmVudGx5IHVzaW5n
IENvcmVJbWFnZSBhbmQgcmVsaWVzIG9uIAorICAgICAgICAgICAgSU9TdXJmYWNlcywgd2UgYXNr
IHNvdXJjZSBpbWFnZSB0byB1c2UgSU9TdXJmYWNlIGZvciBwZXJmb3JtYW5jZSBjb25jZXJucy4K
KwogMjAyMC0wOC0yOCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZW1vdmUgYWRvcHRlZCBub2RlIGZyb20gVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgKaW5kZXggODFl
YzU3ZTY4YjE5MmVjODM2YTdiZDE4YTI4YWUzZGU3MzU0MWQxMS4uOGQ1NmNhMTZmMzNkNzU3M2Jl
ZjFjMDI5YmZiMTliMWQ4NDhmMGZlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlLmgKQEAgLTI3LDcgKzI3LDkgQEAKIAogI2lmIFVTRShDT1JFX0lN
QUdFKQogCisjaW1wb3J0ICJGRUNvbG9yTWF0cml4LmgiCiAjaW1wb3J0ICJGaWx0ZXJFZmZlY3RS
ZW5kZXJlci5oIgorI2ltcG9ydCAiU291cmNlR3JhcGhpYy5oIgogI2ltcG9ydCA8d3RmL0hhc2hN
YXAuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDIsMjUgKzQ0LDI1IEBAIGNsYXNz
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlIDogcHVibGljIEZpbHRlckVmZmVjdFJlbmRl
cmVyIHsKICAgICAKIHB1YmxpYzoKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlPiB0cnlDcmVhdGUoRmlsdGVyRWZmZWN0Jik7Ci0gICAgCisg
ICAgUmV0YWluUHRyPENJQ29udGV4dD4gZ2V0Q0lDb250ZXh0KCk7CiAgICAgdm9pZCBhcHBseUVm
ZmVjdHMoRmlsdGVyRWZmZWN0JikgZmluYWw7CiAgICAgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX291dHB1dEltYWdlOyB9CiAgICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgp
IGNvbnN0IGZpbmFsOwogICAgIEZsb2F0UmVjdCBkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZlY3Qm
KSBjb25zdCBmaW5hbDsKICAgICB2b2lkIGNsZWFyUmVzdWx0KCkgZmluYWw7Ci0gICAgCiAgICAg
RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UoKTsKICAgICAKIHByaXZhdGU6Ci0gICAgQ0lJ
bWFnZSogY29ubmVjdENJRmlsdGVycyhGaWx0ZXJFZmZlY3QmKTsKKyAgICBSZXRhaW5QdHI8Q0lJ
bWFnZT4gY29ubmVjdENJRmlsdGVycyhGaWx0ZXJFZmZlY3QmKTsKICAgICB2b2lkIHJlbmRlclRv
SW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JikgZmluYWw7CiAgICAgc3RhdGljIGJvb2wgc3VwcG9y
dHNDb3JlSW1hZ2VSZW5kZXJpbmcoRmlsdGVyRWZmZWN0Jik7CiAgICAgc3RhdGljIGJvb2wgY2Fu
UmVuZGVyVXNpbmdDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7CiAgICAgCisgICAgUmV0YWluUHRy
PENJSW1hZ2U+IGltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJik7CisgICAgUmV0
YWluUHRyPENJSW1hZ2U+IGltYWdlRm9yRkVDb2xvck1hdHJpeChGRUNvbG9yTWF0cml4JiwgY29u
c3QgVmVjdG9yPFJldGFpblB0cjxDSUltYWdlPj4mKTsKKyAgICAKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IG1fb3V0cHV0SW1hZ2VCdWZmZXI7Ci0gICAgSGFzaE1hcDxSZWY8Rmls
dGVyRWZmZWN0PiwgVmVjdG9yPFJldGFpblB0cjxDSUZpbHRlcj4+PiBtX2NpRmlsdGVyU3RvcmFn
ZU1hcDsKICAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gbV9vdXRwdXRJbWFnZTsKLSAgICBSZXRhaW5Q
dHI8Q0lDb250ZXh0PiBtX2NvbnRleHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KaW5kZXgg
OTMxM2Y3MWU2ZWZiYTg0NmQ2NjU1MWUxMzA5MzkxOWUwODNkZDg0Yy4uZjNjYTkzNTNhYTNhYWM1
OWM0MWIzMjA4MmY3NTkxMTViZDFiZmJjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQpAQCAtMzAsMTIgKzMwLDE0IEBACiAKICNpbXBvcnQg
IkZpbHRlci5oIgogI2ltcG9ydCAiRmlsdGVyRWZmZWN0LmgiCisjaW1wb3J0ICJGaWx0ZXJPcGVy
YXRpb24uaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW1wb3J0ICJJbWFnZUJ1
ZmZlci5oIgogI2ltcG9ydCAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgogI2ltcG9ydCA8Q29yZUlt
YWdlL0NJQ29udGV4dC5oPgogI2ltcG9ydCA8Q29yZUltYWdlL0NJRmlsdGVyLmg+CiAjaW1wb3J0
IDxDb3JlSW1hZ2UvQ29yZUltYWdlLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NiwxMiArNDgsMzIgQEAgc3RkOjp1bmlxdWVf
cHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZTo6dHIKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorUmV0YWluUHRyPENJQ29udGV4
dD4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmdldENJQ29udGV4dCgpCit7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxDSUNvbnRleHQ+PiBjaUNvbnRleHQgPSBh
ZG9wdE5TKFtDSUNvbnRleHQgY29udGV4dFdpdGhPcHRpb25zOiBAeyBrQ0lDb250ZXh0V29ya2lu
Z0NvbG9yU3BhY2U6IChfX2JyaWRnZSBpZClDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dD
b2xvclNwYWNlU1JHQil9XSk7CisgICAgcmV0dXJuIFtjaUNvbnRleHQuZ2V0KCkgcmV0YWluXTsK
K30KKwogYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1h
Z2VSZW5kZXJpbmcoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCiB7CiAgICAgLy8gRklYTUU6IGNoYW5n
ZSByZXR1cm4gdmFsdWUgdG8gdHJ1ZSBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkCiAgICAgc3dp
dGNoIChlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkpIHsKKyAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAKKyAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg6IHsKKyAgICAg
ICAgc3dpdGNoIChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZlY3QpLnR5cGUoKSkgeworICAg
ICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgorICAgICAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6CisgICAgICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9IVUVST1RBVEU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKwogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpCbGVuZDoKLSAgICBjYXNlIEZpbHRl
ckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg6CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkNvbXBvbmVudFRyYW5zZmVyOgogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb3Np
dGU6CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbnZvbHZlTWF0cml4OgpAQCAtNjks
NyArOTEsNiBAQCBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzdXBwb3J0c0Nv
cmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3QmIGVmZgogICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpUaWxlOgogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgog
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToKLSAgICBjYXNlIEZpbHRl
ckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC04MywxMiArMTA0LDEyIEBAIHZvaWQgRmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmFwcGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmIGxhc3RFZmZl
Y3QpCiAgICAgcmVuZGVyVG9JbWFnZUJ1ZmZlcihsYXN0RWZmZWN0KTsKIH0KIAotQ0lJbWFnZSog
RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZm
ZWN0JiBlZmZlY3QpCitSZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCiB7Ci0gICAgVmVj
dG9yPENJSW1hZ2UqPiBpbnB1dEltYWdlczsKKyAgICBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+
PiBpbnB1dEltYWdlczsKICAgICAKICAgICBmb3IgKGF1dG8gaW4gOiBlZmZlY3QuaW5wdXRFZmZl
Y3RzKCkpIHsKLSAgICAgICAgQ0lJbWFnZSogaW5wdXRJbWFnZSA9IGNvbm5lY3RDSUZpbHRlcnMo
KmluKTsKKyAgICAgICAgYXV0byBpbnB1dEltYWdlID0gY29ubmVjdENJRmlsdGVycygqaW4pOwog
ICAgICAgICBpZiAoIWlucHV0SW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgaW5wdXRJbWFnZXMuYXBwZW5kKGlucHV0SW1hZ2UpOwpAQCAtOTksMTAgKzEyMCwxNCBA
QCBDSUltYWdlKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVy
cyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKICAgICBpZiAoZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0
KCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhlZmZlY3QuYWJz
b2x1dGVQYWludFJlY3QoKS5zaXplKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRob3NlIGZpbHRlcnMgdXNpbmcgQ0lGaWx0ZXIgc28g
dGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHZhbGlkIENJSW1hZ2UKICAgICBzd2l0Y2ggKGVm
ZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSkgewotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpCbGVuZDoKKyAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYzoK
KyAgICAgICAgcmV0dXJuIGltYWdlRm9yU291cmNlR3JhcGhpYyhkb3duY2FzdDxTb3VyY2VHcmFw
aGljPihlZmZlY3QpKTsKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg6
CisgICAgICAgIHJldHVybiBpbWFnZUZvckZFQ29sb3JNYXRyaXgoZG93bmNhc3Q8RkVDb2xvck1h
dHJpeD4oZWZmZWN0KSwgaW5wdXRJbWFnZXMpOworCisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aG9zZSBmaWx0ZXJzIHVzaW5nIENJRmlsdGVyIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMg
YSB2YWxpZCBDSUltYWdlCisgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgogICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb25lbnRUcmFuc2ZlcjoKICAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6Q29tcG9zaXRlOgogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpDb252b2x2ZU1hdHJpeDoKQEAgLTEyMCwxMyArMTQ1LDc5IEBAIENJSW1hZ2UqIEZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZm
ZWN0KQogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUaWxlOgogICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpT
b3VyY2VBbHBoYToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYzoK
ICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKK1JldGFpblB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZTo6aW1hZ2VGb3JTb3VyY2VHcmFwaGljKFNvdXJjZUdyYXBoaWMmIGVmZmVjdCkKK3sK
KyAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBlZmZlY3QuZmlsdGVyKCkuc291cmNlSW1h
Z2UoKTsKKyAgICBpZiAoIXNvdXJjZUltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAKKyAgICBpZiAoaXM8QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcj4oKnNvdXJjZUltYWdlKSkgewor
ICAgICAgICBhdXRvJiBzdXJmYWNlID0gZG93bmNhc3Q8QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcj4o
KnNvdXJjZUltYWdlKS5zdXJmYWNlKCk7CisgICAgICAgIElPU3VyZmFjZVJlZiBzdXJmYWNlUmVm
ID0gc3VyZmFjZS5zdXJmYWNlKCk7CisgICAgICAgIHJldHVybiBSZXRhaW5QdHI8Q0lJbWFnZT4o
W0NJSW1hZ2UgaW1hZ2VXaXRoSU9TdXJmYWNlOnN1cmZhY2VSZWZdKTsKKyAgICB9CisgICAgTmF0
aXZlSW1hZ2VQdHIgc291cmNlQ0dJbWFnZVJlZiA9IHNvdXJjZUltYWdlLT5jb3B5TmF0aXZlSW1h
Z2UoKTsKKyAgICByZXR1cm4gUmV0YWluUHRyPENJSW1hZ2U+KFtDSUltYWdlIGltYWdlV2l0aENH
SW1hZ2U6c291cmNlQ0dJbWFnZVJlZi5nZXQoKV0pOworfQorCitSZXRhaW5QdHI8Q0lJbWFnZT4g
RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmltYWdlRm9yRkVDb2xvck1hdHJpeChGRUNv
bG9yTWF0cml4JiBlZmZlY3QsIGNvbnN0IFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+JiBpbnB1
dEltYWdlcykKK3sKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dEltYWdlcy5hdCgwKTsKKwor
ICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0gRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0
cyhlZmZlY3QudmFsdWVzKCkpOworICAgIGZsb2F0IGNvbXBvbmVudHNbOV07CisgICAgCisgICAg
c3dpdGNoIChlZmZlY3QudHlwZSgpKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FU
VVJBVEU6IHsKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25l
bnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6IHsKKyAgICAgICAgRkVDb2xvck1hdHJp
eDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklY
OgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
VU5LTk9XTjoKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiAv
LyBGSVhNRTogQWRkIEx1bWluYW5jZSB0byBBbHBoYSBJbXBsZW1lbnRhdGlvbgorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgQ0lGaWx0ZXIgKmNvbG9yTWF0cml4Rmls
dGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOworICAgIFtj
b2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlLmdldCgpIGZvcktleTprQ0lJbnB1
dEltYWdlS2V5XTsKKyAgICAKKyAgICBzd2l0Y2ggKGVmZmVjdC50eXBlKCkpIHsKKyAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9IVUVST1RBVEU6IHsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZl
Y3RvciB2ZWN0b3JXaXRoWDpjb21wb25lbnRzWzBdIFk6Y29tcG9uZW50c1sxXSBaOmNvbXBvbmVu
dHNbMl0gVzowXSBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0cml4
RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25lbnRzWzNdIFk6Y29t
cG9uZW50c1s0XSBaOmNvbXBvbmVudHNbNV0gVzowXSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsK
KyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRo
WDpjb21wb25lbnRzWzZdIFk6Y29tcG9uZW50c1s3XSBaOmNvbXBvbmVudHNbOF0gVzowXSBmb3JL
ZXk6QCJpbnB1dEJWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVl
OltDSVZlY3RvciB2ZWN0b3JXaXRoWDowICAgICAgICAgICAgIFk6MCAgICAgICAgICAgICBaOjAg
ICAgICAgICAgICAgVzoxXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9y
TWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowICAgICAgICAgICAg
IFk6MCAgICAgICAgICAgICBaOjAgICAgICAgICAgICAgVzowXSBmb3JLZXk6QCJpbnB1dEJpYXNW
ZWN0b3IiXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX01BVFJJWDogeworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVj
dG9yIHZlY3RvcldpdGhYOnZhbHVlc1swXSAgWTp2YWx1ZXNbMV0gIFo6dmFsdWVzWzJdICBXOnZh
bHVlc1szXV0gIGZvcktleTpAImlucHV0UlZlY3RvciJdOworICAgICAgICBbY29sb3JNYXRyaXhG
aWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1s1XSAgWTp2YWx1ZXNb
Nl0gIFo6dmFsdWVzWzddICBXOnZhbHVlc1s4XV0gIGZvcktleTpAImlucHV0R1ZlY3RvciJdOwor
ICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhY
OnZhbHVlc1sxMF0gWTp2YWx1ZXNbMTFdIFo6dmFsdWVzWzEyXSBXOnZhbHVlc1sxM11dIGZvcktl
eTpAImlucHV0QlZlY3RvciJdOworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6
W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1sxNV0gWTp2YWx1ZXNbMTZdIFo6dmFsdWVzWzE3
XSBXOnZhbHVlc1sxOF1dIGZvcktleTpAImlucHV0QVZlY3RvciJdOworICAgICAgICBbY29sb3JN
YXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1s0XSAgWTp2
YWx1ZXNbOV0gIFo6dmFsdWVzWzE0XSBXOnZhbHVlc1sxOV1dIGZvcktleTpAImlucHV0Qmlhc1Zl
Y3RvciJdOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZ
UEVfTFVNSU5BTkNFVE9BTFBIQToKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dO
OgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIFJldGFpblB0cjxD
SUltYWdlPihjb2xvck1hdHJpeEZpbHRlci5vdXRwdXRJbWFnZSk7Cit9CisKIGJvb2wgRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNhblJlbmRlclVzaW5nQ0lGaWx0ZXJzKEZpbHRlckVm
ZmVjdCYgZWZmZWN0KQogewogICAgIGlmICghc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoZWZm
ZWN0KSkKQEAgLTE0MSw2ICsyMzIsNyBAQCBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUlt
YWdlOjpjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJFZmZlY3QmIGVmZmVjdAogCiBJbWFn
ZUJ1ZmZlciogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6Om91dHB1dCgpIGNvbnN0CiB7
CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyaW5nICIgPDwg
dGhpcyA8PCAiIHVzaW5nIENvcmVJbWFnZVxuIik7CiAgICAgcmV0dXJuIG1fb3V0cHV0SW1hZ2VC
dWZmZXIuZ2V0KCk7CiB9CiAgICAgCkBAIC0xNjEsNyArMjUzLDE2IEBAIHZvaWQgRmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JiBs
YXN0RWZmZWN0CiAgICAgCiAgICAgYXV0byYgc3VyZmFjZSA9IGRvd25jYXN0PEFjY2VsZXJhdGVk
SW1hZ2VCdWZmZXI+KCptX291dHB1dEltYWdlQnVmZmVyKS5zdXJmYWNlKCk7CiAgICAgQ0dDb2xv
clNwYWNlUmVmIHJlc3VsdENvbG9yU3BhY2UgPSBjYWNoZWRDR0NvbG9yU3BhY2UobGFzdEVmZmVj
dC5yZXN1bHRDb2xvclNwYWNlKCkpOwotICAgIFttX2NvbnRleHQuZ2V0KCkgcmVuZGVyOiBtX291
dHB1dEltYWdlLmdldCgpIHRvSU9TdXJmYWNlOiBzdXJmYWNlLnN1cmZhY2UoKSBib3VuZHM6ZGVz
dFJlY3QobGFzdEVmZmVjdCkgY29sb3JTcGFjZTpyZXN1bHRDb2xvclNwYWNlXTsKKyAgICBDR1Jl
Y3QgYm91bmRzID0gZGVzdFJlY3QobGFzdEVmZmVjdCk7CisgICAgCisgICAgUmV0YWluUHRyPENJ
UmVuZGVyRGVzdGluYXRpb24+IGRlc3RpbmF0aW9uID0gYWRvcHROUyhbW0NJUmVuZGVyRGVzdGlu
YXRpb24gYWxsb2NdIGluaXRXaXRoSU9TdXJmYWNlOig6OklPU3VyZmFjZSopc3VyZmFjZS5zdXJm
YWNlKCldKTsKKyAgICBkZXN0aW5hdGlvbi5nZXQoKS5jb2xvclNwYWNlID0gcmVzdWx0Q29sb3JT
cGFjZTsKKyAgICBhdXRvIGNpQ29udGV4dCA9IGdldENJQ29udGV4dCgpOworICAgIFtjaUNvbnRl
eHQuZ2V0KCkgc3RhcnRUYXNrVG9SZW5kZXI6bV9vdXRwdXRJbWFnZS5nZXQoKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmcm9tUmVjdDpib3VuZHMKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRvRGVzdGluYXRpb246ZGVzdGluYXRpb24uZ2V0KCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGF0UG9pbnQ6Q0dQb2ludE1ha2UoYm91bmRzLm9yaWdpbi54LCBib3VuZHMub3Jp
Z2luLnkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOm5pbF07CiB9CiAg
ICAgCiBGbG9hdFJlY3QgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmRlc3RSZWN0KGNv
bnN0IEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkgY29uc3QKQEAgLTE3NSwxNiArMjc2LDEyIEBA
IEZsb2F0UmVjdCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6ZGVzdFJlY3QoY29uc3Qg
RmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0CiB2b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUlt
YWdlOjpjbGVhclJlc3VsdCgpCiB7CiAgICAgbV9vdXRwdXRJbWFnZUJ1ZmZlci5yZXNldCgpOwot
ICAgIG1fY2lGaWx0ZXJTdG9yYWdlTWFwLmNsZWFyKCk7CiAgICAgbV9vdXRwdXRJbWFnZSA9IG51
bGxwdHI7Ci0gICAgbV9jb250ZXh0ID0gbnVsbHB0cjsKIH0KIAogRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2U6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCkKICAgICA6IEZpbHRl
ckVmZmVjdFJlbmRlcmVyKCkKIHsKLSAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IGNh
Y2hlZENHQ29sb3JTcGFjZShDb2xvclNwYWNlOjpTUkdCKTsKLSAgICBtX2NvbnRleHQgPSBbQ0lD
b250ZXh0IGNvbnRleHRXaXRoT3B0aW9uczogQHsga0NJQ29udGV4dFdvcmtpbmdDb2xvclNwYWNl
OiAoX19icmlkZ2UgaWQpY29sb3JTcGFjZX1dOwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguaAppbmRleCAwOTBlNjgyZThhNzVlMDViMDI2NWVjZjJmZjFiYjNj
ZTYyYzQwNjY5Li43YzZkYzU3ZmJhMjFiYjYzMTVjNWE3NmMwMGUwMmIxZmFiZWVhMGNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguaApAQCAtOTMsMyArOTMsNyBAQCBpbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4
OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdAog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4o
V2ViQ29yZTo6RkVDb2xvck1hdHJpeCkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RD
bGFzc1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OyB9
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCA3
NTYyZmRkNjA1ODY3ZjYyOGNhMzJjMzE1YzlkMzcyOTAzNzZmMzg4Li43ZTEzY2ZmNjYzZGFiZjI4
MzgzNmFiOTdiNjI2M2RlZTExNGY0MmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC03OSw3ICs3
OSw2IEBAIEZsb2F0UG9pbnQgRmlsdGVyRWZmZWN0OjptYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1
ZmZlcihGbG9hdFBvaW50IHVzZXJTcGFjZVBvaW50CiAKIEludFJlY3QgRmlsdGVyRWZmZWN0Ojpy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIGVmZmVjdFJlY3Qp
IGNvbnN0CiB7Ci0gICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKICAgICBJbnRQb2ludCBsb2NhdGlv
biA9IG1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKTsKICAgICBsb2NhdGlvbi5tb3ZlQnko
LWVmZmVjdFJlY3QubG9jYXRpb24oKSk7CiAgICAgcmV0dXJuIEludFJlY3QobG9jYXRpb24sIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IDExYWM2MGFhNjQx
MTc0MWFiMTM2NDZmY2QxNmEwNTRiMzljMmZjN2MuLmVlYTBhZDJmODUyOThmZTlhNmEzOTEzYjFm
YWQ1NzA3NWE5MmVlMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtMTU1LDcgKzE1NSw3IEBAIHB1Ymxp
YzoKICAgICAKICAgICBGbG9hdFBvaW50IG1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKEZs
b2F0UG9pbnQpIGNvbnN0OwogICAgIAotICAgIFR5cGUgZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkg
eyByZXR1cm4gbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7IH0KKyAgICBUeXBlIGZpbHRlckVmZmVj
dENsYXNzVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyRWZmZWN0Q2xhc3NUeXBlOyB9CiAK
ICAgICBGaWx0ZXImIGZpbHRlcigpIHsgcmV0dXJuIG1fZmlsdGVyOyB9CiAgICAgY29uc3QgRmls
dGVyJiBmaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlcjsgfQpAQCAtMTcwLDYgKzE3MCwx
NCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQpIHsgaW4tPnRyYW5zZm9ybVJlc3VsdENvbG9y
U3BhY2UobV9vcGVyYXRpbmdDb2xvclNwYWNlKTsgfQogICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0
Q29sb3JTcGFjZShDb2xvclNwYWNlKTsKKyAgICAKKyAgICBzdGF0aWMgVmVjdG9yPGZsb2F0PiBu
b3JtYWxpemVkRmxvYXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcykKKyAgICB7CisgICAg
ICAgIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZFZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICBub3JtYWxpemVkVmFsdWVzW2ldID0gbm9ybWFsaXplZEZsb2F0KHZhbHVlc1tpXSk7CisgICAg
ICAgIHJldHVybiBub3JtYWxpemVkVmFsdWVzOworICAgIH0KIAogcHJvdGVjdGVkOgogICAgIEZp
bHRlckVmZmVjdChGaWx0ZXImLCBUeXBlKTsKQEAgLTE4OCwxNCArMTk2LDYgQEAgcHJvdGVjdGVk
OgogICAgIHZvaWQgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKIAogICAgIHZvaWQg
Y2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgCi0gICAgc3RhdGljIFZlY3RvcjxmbG9hdD4g
bm9ybWFsaXplZEZsb2F0cyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCi0gICAgewotICAg
ICAgICBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICAg
ICAgbm9ybWFsaXplZFZhbHVlc1tpXSA9IG5vcm1hbGl6ZWRGbG9hdCh2YWx1ZXNbaV0pOwotICAg
ICAgICByZXR1cm4gbm9ybWFsaXplZFZhbHVlczsKLSAgICB9CiAKIHByaXZhdGU6CiAgICAgdmly
dHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKaW5k
ZXggMGYwMWRkYTA2Y2UwMjcxMzViNzFjYTVjYzAzNDM3NWUxOTE5NjQ1Ni4uZjY3M2NlNGM3ZjI5
M2FhMTkxMzVmOWM3N2U2MGMyMjc3MTYxMzk4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKQEAgLTUwLDQg
KzUwLDkgQEAgcHJpdmF0ZToKIAogfSAvL25hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U291cmNlR3JhcGhpYykKKyAgICBzdGF0aWMgYm9v
bCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVm
ZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5
cGU6OlNvdXJjZUdyYXBoaWM7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworCiAj
ZW5kaWYgLy8gU291cmNlR3JhcGhpY19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIu
Y3BwCmluZGV4IGFmZWI5Mjk1NTM1MzQyNzgwMmNlMjkwNjA3ZGExYTg5N2NmOGNhMjAuLmFhYTFm
MDBlZTlmODRkNTM2N2RjNDRjNmM1NDIyYzQ2OWNkNTkzNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9DU1NGaWx0ZXIuY3BwCkBAIC0zMDQsNyArMzA0LDggQEAgYm9vbCBDU1NGaWx0ZXI6OmJ1
aWxkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVy
YXRpb24KIAogICAgIHNldE1heEVmZmVjdFJlY3RzKG1fc291cmNlRHJhd2luZ1JlZ2lvbik7CiAj
aWYgVVNFKENPUkVfSU1BR0UpCi0gICAgbV9maWx0ZXJSZW5kZXJlciA9IEZpbHRlckVmZmVjdFJl
bmRlcmVyOjp0cnlDcmVhdGUocmVuZGVyZXIuc2V0dGluZ3MoKS5jb3JlSW1hZ2VBY2NlbGVyYXRl
ZEZpbHRlclJlbmRlckVuYWJsZWQoKSwgbV9lZmZlY3RzLmxhc3QoKS5nZXQoKSk7CisgICAgaWYg
KCFtX2ZpbHRlclJlbmRlcmVyKQorICAgICAgICBtX2ZpbHRlclJlbmRlcmVyID0gRmlsdGVyRWZm
ZWN0UmVuZGVyZXI6OnRyeUNyZWF0ZShyZW5kZXJlci5zZXR0aW5ncygpLmNvcmVJbWFnZUFjY2Vs
ZXJhdGVkRmlsdGVyUmVuZGVyRW5hYmxlZCgpLCBtX2VmZmVjdHMubGFzdCgpLmdldCgpKTsKICNl
bmRpZgogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzM2LDcgKzMzNywxMCBAQCB2b2lkIENTU0Zp
bHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQm
IHRhcmdldENvbnRleAogICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlKCksICZ0YXJnZXRDb250ZXh0LCBmaWx0ZXJTY2Fs
ZSgpKSk7CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0odGFyZ2V0Q29udGV4dCk7Ci0gICAg
ICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIHJlbmRl
cmluZ01vZGUoKSwgZmlsdGVyU2NhbGUoKSkpOworICAgICAgICBpZiAobV9maWx0ZXJSZW5kZXJl
cikKKyAgICAgICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNh
bFNpemUsIFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkLCBmaWx0ZXJTY2FsZSgpKSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUo
bG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgZmlsdGVyU2NhbGUoKSkpOwogI2VuZGlmCiAg
ICAgfQogICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZDA0NDdj
MTk5ODQwODQ5NDFjYzFjMWQxNGNlYmQyMDU4NTBmM2Y3NS4uNDFiZmQ1M2E5YzRhNWZlZTQ2Yjcx
NzgyZWE1ZGJjMmUyNTFlZmJmYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIwLTA5LTAxICBG
cmFuayBZYW5nICA8Z3Vvd2VpX3lhbmdAYXBwbGUuY29tPgorCisgICAgICAgIENvcmVJbWFnZSBJ
bXBsZW1lbnRhdGlvbiBvZiBTb3VyY2VHcmFwaGljIGFuZCBzYXR1cmF0ZSgpLCBodWUtcm90YXRl
KCksIGdyYXlzY2FsZSgpIGFuZCBzZXBpYSgpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM2NzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGNzczMvZmlsdGVycy9lZmZlY3QtZ3JheXNjYWxlLXNxdWFy
ZS1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBjc3MzL2ZpbHRlcnMvZWZmZWN0LWdy
YXlzY2FsZS1zcXVhcmUuaHRtbDogQWRkZWQuCisgICAgICAgICogY3NzMy9maWx0ZXJzL2VmZmVj
dC1odWUtcm90YXRlLXNxdWFyZS1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBjc3Mz
L2ZpbHRlcnMvZWZmZWN0LWh1ZS1yb3RhdGUtc3F1YXJlLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGNzczMvZmlsdGVycy9lZmZlY3Qtc2F0dXJhdGUtc3F1YXJlLWV4cGVjdGVkLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGNzczMvZmlsdGVycy9lZmZlY3Qtc2F0dXJhdGUtc3F1YXJlLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGNzczMvZmlsdGVycy9lZmZlY3Qtc2VwaWEtc3F1YXJlLWV4cGVjdGVk
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNzczMvZmlsdGVycy9lZmZlY3Qtc2VwaWEtc3F1YXJl
Lmh0bWw6IEFkZGVkLgorCiAyMDIwLTA4LTI4ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJr
aXQub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNjM1MDYpOiBzY2FsZSB0cmFuc2Zvcm0g
dHJhbnNpdGlvbnMgd29uJ3Qgb3ZlcnNob290CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3Mz
L2ZpbHRlcnMvZWZmZWN0LWdyYXlzY2FsZS1zcXVhcmUtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRl
c3RzL2NzczMvZmlsdGVycy9lZmZlY3QtZ3JheXNjYWxlLXNxdWFyZS1leHBlY3RlZC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjc3MjgxNzIyN2RkMDViYjY2NTFmYTIyZGVjNTVlMmIzMjBmNjBhNjgKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LWdyYXlzY2FsZS1z
cXVhcmUtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPkNTUyBGaWx0ZXIgVGVzdDogVGVzdCBmb3IgU2F0dXJh
dGUgc2hvcnQgaGFuZDwvdGl0bGU+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgICBk
aXYgeworICAgICAgICB3aWR0aDogNjAwcHg7CisgICAgICAgIGhlaWdodDogNjAwcHg7IAorICAg
ICAgICBiYWNrZ3JvdW5kOiByZ2IoMTU0LCAyNywgMjcpOworICAgIH0KKworICAgIDwvc3R5bGU+
Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8cD5Zb3Ugc2hvdWxkIHNlZSBhIGdyZWVuIHJlY3Rhbmds
ZS48L3A+CisgICAgPGRpdj48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1ncmF5c2NhbGUtc3F1YXJlLmh0bWwgYi9M
YXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LWdyYXlzY2FsZS1zcXVhcmUuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jNmE0ZDM3Y2JlYjQ0ZTY4NDNiOWMxOGVhZTI1ZDRkMDMzOTI3YjUyCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1ncmF5c2NhbGUtc3F1
YXJlLmh0bWwKQEAgLTAsMCArMSwyMCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorICAgIDx0aXRsZT5DU1MgRmlsdGVyIFRlc3Q6IFRlc3QgZm9yIFNhdHVyYXRlIHNob3J0IGhh
bmQ8L3RpdGxlPgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgZGl2IHsKKyAgICAg
ICAgd2lkdGg6IDYwMHB4OworICAgICAgICBoZWlnaHQ6IDYwMHB4OyAKKyAgICAgICAgYmFja2dy
b3VuZDogcmVkOworICAgICAgICBmaWx0ZXI6IGdyYXlzY2FsZSg1MCUpOworICAgIH0KKworICAg
IDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8cD5Zb3Ugc2hvdWxkIHNlZSBhIGdyZWVu
IHJlY3RhbmdsZS48L3A+CisgICAgPGRpdj48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1odWUtcm90YXRlLXNxdWFy
ZS1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1odWUtcm90
YXRlLXNxdWFyZS1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwN2JiNDNiZTNlMTE3YTBhOWZi
YWMxMTkzYmZhMTI3OGYyOTZjMWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3Mz
L2ZpbHRlcnMvZWZmZWN0LWh1ZS1yb3RhdGUtc3F1YXJlLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCAr
MSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5DU1Mg
RmlsdGVyIFRlc3Q6IFRlc3QgZm9yIFNhdHVyYXRlIHNob3J0IGhhbmQ8L3RpdGxlPgorICAgIDxz
dHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgZGl2IHsKKyAgICAgICAgd2lkdGg6IDYwMHB4Owor
ICAgICAgICBoZWlnaHQ6IDYwMHB4OyAKKyAgICAgICAgYmFja2dyb3VuZDogcmdiKDAsIDkxLCAw
KTsKKyAgICB9CisKKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisgICAgPHA+WW91IHNo
b3VsZCBzZWUgYSBncmVlbiByZWN0YW5nbGUuPC9wPgorICAgIDxkaXY+PC9kaXY+CisKKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3Qt
aHVlLXJvdGF0ZS1zcXVhcmUuaHRtbCBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3Qt
aHVlLXJvdGF0ZS1zcXVhcmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOTg4Njg5MzY3ZTVlOWYxYjY1NzZl
ZWI2ODczNzg0Y2Y2OWE1YjM4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3NzMy9m
aWx0ZXJzL2VmZmVjdC1odWUtcm90YXRlLXNxdWFyZS5odG1sCkBAIC0wLDAgKzEsMjAgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8dGl0bGU+Q1NTIEZpbHRlciBUZXN0
OiBUZXN0IGZvciBTYXR1cmF0ZSBzaG9ydCBoYW5kPC90aXRsZT4KKyAgICA8c3R5bGUgdHlwZT0i
dGV4dC9jc3MiPgorICAgIGRpdiB7CisgICAgICAgIHdpZHRoOiA2MDBweDsKKyAgICAgICAgaGVp
Z2h0OiA2MDBweDsgCisgICAgICAgIGJhY2tncm91bmQ6IHJlZDsKKyAgICAgICAgZmlsdGVyOiBo
dWUtcm90YXRlKDkwZGVnKTsKKyAgICB9CisKKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+
CisgICAgPHA+WW91IHNob3VsZCBzZWUgYSBncmVlbiByZWN0YW5nbGUuPC9wPgorICAgIDxkaXY+
PC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMv
ZmlsdGVycy9lZmZlY3Qtc2F0dXJhdGUtc3F1YXJlLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0
cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LXNhdHVyYXRlLXNxdWFyZS1leHBlY3RlZC5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjc3MjgxNzIyN2RkMDViYjY2NTFmYTIyZGVjNTVlMmIzMjBmNjBhNjgKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LXNhdHVyYXRlLXNxdWFy
ZS1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKyAgICA8dGl0bGU+Q1NTIEZpbHRlciBUZXN0OiBUZXN0IGZvciBTYXR1cmF0ZSBz
aG9ydCBoYW5kPC90aXRsZT4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgIGRpdiB7
CisgICAgICAgIHdpZHRoOiA2MDBweDsKKyAgICAgICAgaGVpZ2h0OiA2MDBweDsgCisgICAgICAg
IGJhY2tncm91bmQ6IHJnYigxNTQsIDI3LCAyNyk7CisgICAgfQorCisgICAgPC9zdHlsZT4KKzwv
aGVhZD4KKzxib2R5PgorICAgIDxwPllvdSBzaG91bGQgc2VlIGEgZ3JlZW4gcmVjdGFuZ2xlLjwv
cD4KKyAgICA8ZGl2PjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LXNhdHVyYXRlLXNxdWFyZS5odG1sIGIvTGF5b3V0
VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1zYXR1cmF0ZS1zcXVhcmUuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40NzBjYjI2YWExYjNiNDJmNWRjNDg3NGU5MjhhNWU2MmVjYzdlNDE5Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1zYXR1cmF0ZS1zcXVhcmUuaHRt
bApAQCAtMCwwICsxLDIwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAg
PHRpdGxlPkNTUyBGaWx0ZXIgVGVzdDogVGVzdCBmb3IgU2F0dXJhdGUgc2hvcnQgaGFuZDwvdGl0
bGU+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgICBkaXYgeworICAgICAgICB3aWR0
aDogNjAwcHg7CisgICAgICAgIGhlaWdodDogNjAwcHg7IAorICAgICAgICBiYWNrZ3JvdW5kOiBy
ZWQ7CisgICAgICAgIGZpbHRlcjogc2F0dXJhdGUoNTAlKTsKKyAgICB9CisKKyAgICA8L3N0eWxl
PgorPC9oZWFkPgorPGJvZHk+CisgICAgPHA+WW91IHNob3VsZCBzZWUgYSBncmVlbiByZWN0YW5n
bGUuPC9wPgorICAgIDxkaXY+PC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3Qtc2VwaWEtc3F1YXJlLWV4cGVjdGVkLmh0
bWwgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LXNlcGlhLXNxdWFyZS1leHBlY3Rl
ZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmE0ZGNhMjhlM2U2MzdlYzQ1YjJjNzg3ZWJhOTA4MTVjMjlkMWIy
ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LXNl
cGlhLXNxdWFyZS1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKyAgICA8dGl0bGU+Q1NTIEZpbHRlciBUZXN0OiBUZXN0IGZvciBT
YXR1cmF0ZSBzaG9ydCBoYW5kPC90aXRsZT4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgor
ICAgIGRpdiB7CisgICAgICAgIHdpZHRoOiA2MDBweDsKKyAgICAgICAgaGVpZ2h0OiA2MDBweDsg
CisgICAgICAgIGJhY2tncm91bmQ6IHJnYigyNCwgMjEsIDE0NCk7CisgICAgfQorCisgICAgPC9z
dHlsZT4KKzwvaGVhZD4KKzxib2R5PiAKKyAgICA8cD5Zb3Ugc2hvdWxkIHNlZSBhIGdyZWVuIHJl
Y3RhbmdsZS48L3A+CisgICAgPGRpdj48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1zZXBpYS1zcXVhcmUuaHRtbCBi
L0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3Qtc2VwaWEtc3F1YXJlLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjg5YWNhNTc4ODc3YWM4MzlmZmZmZjE3NTEwNDRlNjFmMmY2MmFiNAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3Qtc2VwaWEtc3F1YXJlLmh0
bWwKQEAgLTAsMCArMSwyMCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAg
IDx0aXRsZT5DU1MgRmlsdGVyIFRlc3Q6IFRlc3QgZm9yIFNhdHVyYXRlIHNob3J0IGhhbmQ8L3Rp
dGxlPgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgZGl2IHsKKyAgICAgICAgd2lk
dGg6IDYwMHB4OworICAgICAgICBoZWlnaHQ6IDYwMHB4OyAKKyAgICAgICAgYmFja2dyb3VuZDog
Ymx1ZTsKKyAgICAgICAgZmlsdGVyOiBzZXBpYSg1MCUpOworICAgIH0KKworICAgIDwvc3R5bGU+
Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8cD5Zb3Ugc2hvdWxkIHNlZSBhIGdyZWVuIHJlY3Rhbmds
ZS48L3A+CisgICAgPGRpdj48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407790</attachid>
            <date>2020-09-02 13:02:02 -0700</date>
            <delta_ts>2020-09-02 13:15:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213673-20200902130200.patch</filename>
            <type>text/plain</type>
            <size>27577</size>
            <attacher>frankhome61</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MjgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWMxZjViYzkyNTFjNDRm
ZTM5OTQ1YmJlNjkzMzUzNTNhMGFiZmJmZC4uOWY5NzgyODEzNTgzNjFjNDM3MzQ0YjdmOGM5NmU1
ZWU5MzkwYTIzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDIwLTA5LTAxICBGcmFu
ayBZYW5nICA8Z3Vvd2VpX3lhbmdAYXBwbGUuY29tPgorCisgICAgICAgIENvcmVJbWFnZSBJbXBs
ZW1lbnRhdGlvbiBvZiBTb3VyY2VHcmFwaGljIGFuZCBzYXR1cmF0ZSgpLCBodWUtcm90YXRlKCks
IGdyYXlzY2FsZSgpIGFuZCBzZXBpYSgpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTM2NzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUZXN0czogY3NzMy9maWx0ZXJzL2VmZmVjdC1ncmF5c2NhbGUtc3F1
YXJlLmh0bWwKKyAgICAgICAgICAgICAgIGNzczMvZmlsdGVycy9lZmZlY3QtaHVlLXJvdGF0ZS1z
cXVhcmUuaHRtbAorICAgICAgICAgICAgICAgY3NzMy9maWx0ZXJzL2VmZmVjdC1zYXR1cmF0ZS1z
cXVhcmUuaHRtbAorICAgICAgICAgICAgICAgY3NzMy9maWx0ZXJzL2VmZmVjdC1zZXBpYS1zcXVh
cmUuaHRtbAorCisgICAgICAgIEFkZGVkIENvcmVJbWFnZSBpbXBsZW1lbnRhdGlvbiBvZiBTb3Vy
Y2VHcmFwaGljIGFuZCBwYXJ0aWFsIG9mIEZFQ29sb3JNYXRyaXgsIAorICAgICAgICB3aGljaCBp
cyB1c2VkIHRvIGltcGxlbWVudCBzZXBpYSgpLCBncmF5c2NhbGUoKSBodWUtcm90YXRlKCkgYW5k
IHNhdHVyYXRlKCkuCisgICAgICAgIEFsc28gYWRkZWQgQ0lGaWx0ZXIgY2FjaGluZywgYnkgc3Rv
cmluZyBDSUZpbHRlcnMgaW4gYSBoYXNoIG1hcCwgd2hlcmUgdGhlIGtleSAKKyAgICAgICAgaXMg
dGhlIGxldmVsIG9mIHRyYXZlcnNhbCAoYW4gaW50ZWdlcikuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaDoKKyAg
ICAgICAgICAgIEltcG9ydGVkIEZFQ29sb3JNYXRyaXguaCBhbmQgU291cmNlR3JhcGhpYy5oOyBh
ZGRlZCBmdW5jdGlvbiBnZXRDSUNvbnRleHQoKQorICAgICAgICAgICAgdGhhdCByZXR1cm5zIGEg
c3RhdGljIGNvcHkgb2YgQ0lDb250ZXh0LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nv
cmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpnZXRDSUNvbnRleHQpOiBDcmVhdGlu
ZyBhIAorICAgICAgICAgICAgQ0lDb250ZXh0IGlzIGV4cGVuc2l2ZS4gSW5zdGVhZCBvZiBjcmVh
dGluZyBhIENJQ29udGV4dCBvbiBlYWNoIGZyYW1lCisgICAgICAgICAgICB1cGRhdGUsIHdlIGp1
c3QgdXNlIGEgc3RhdGljIHNpbmdsZXRvbiBvbiBldmVyeSBkcmF3CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJp
bmcpOgorICAgICAgICAgICAgdGhlIGZ1bmN0aW9uIG5vdyByZXR1cm5zIHRydWUgaWYgdGhlIGZp
bHRlciBjaGFpbiBjb250YWlucyBTb3VyY2VHcmFwaGljCisgICAgICAgICAgICBhbmQgRkVDb2xv
ck1hdHJpeCBvZiBUWVBFX01BVFJJWCwgVFlQRV9TQVRVUkFURSBhbmQgVFlQRV9IVUVST1RBVEUK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0
Q0lGaWx0ZXJzKToKKyAgICAgICAgICAgIE1hZGUgc2xpZ2h0IGNoYW5nZXMgdG8gd3JhcCBPYmot
QyBwb2ludGVycyBpbiBSZXRhaW5QdHIKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjppbWFnZUZvclNvdXJjZUdyYXBoaWMpOgorICAgICAgICAgICAgVXNl
IHRoZSBzb3VyY2UgaW1hZ2UgdG8gY3JlYXRlIGEgQ0lJbWFnZSBhbmQgcmV0dXJuIGl0LiBJZiB0
aGUgc291cmNlIGltYWdlIAorICAgICAgICAgICAgaXMgYmFja2VkIGJ5IElPU3VyZmFjZSwgd2Ug
Y3JlYXRlIGEgQ0lJbWFnZSBkaXJlY3RseSBmcm9tIHRoZSBJT1N1cmZhY2U7IG90aGVyd2lzZQor
ICAgICAgICAgICAgd2UgY3JlYXRlIGEgQ0lJbWFnZSBieSBnZXR0aW5nIHRoZSBOYXRpdmVJbWFn
ZVB0ciBmcm9tIHNvdXJjZSBpbWFnZS4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjppbWFnZUZvckZFQ29sb3JNYXRyaXgpOgorICAgICAgICAgICAgQmFz
ZWQgb24gdGhlIHR5cGUgb2YgdGhlIG1hdHJpeCBhbmQgaW5wdXQgcGFyYW1ldGVyLCAKKyAgICAg
ICAgICAgIGNyZWF0ZSBkaWZmZXJlbnQgdHlwZXMgb2YgQ0lDb2xvck1hdHJpeCBmaWxlcnMgdGhh
dCBhcmUgdXNlZCB0byBpbXBsZW1lbnQgCisgICAgICAgICAgICBzZXBpYSwgZ3JheXNjYWxlLCBo
dWUtcm90YXRlLCBzYXR1cmF0ZQorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2U6Om91dHB1dCBjb25zdCk6CisgICAgICAgICAgICBBZGRlZCBhIGxvZ2dpbmcg
bGluZQorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnJl
bmRlclRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAgICAgTWlub3IgcmVmYWN0b3JzIAorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNsZWFyUmVzdWx0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbG9yTWF0cml4Lmg6CisgICAgICAgIChpc1R5cGUpOiBhZGRlZCBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTIHNvIHRoYXQgd2UgY2FuIGRvd25jYXN0IHRvIEZFQ29sb3JNYXRyaXgKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURh
dGEgY29uc3QpOiByZW1vdmVkIAorICAgICAgICAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsgZnJv
bSB0aGUgZnVuY3Rpb24sIGJlY2F1c2UgQ29yZUltYWdlIHBhdGggd291bGRuJ3QgY3JlYXRlIAor
ICAgICAgICAgICAgaW1hZ2UgYnVmZmVycyBpbnNpZGUgRmlsdGVyRWZmZWN0LCBidXQgQ0kgcGF0
aCBzdGlsbCBuZWVkcyB0byBjb25zdWx0IHRoaXMgZnVuY3Rpb24KKyAgICAgICAgICAgIHRvIG9i
dGFpbiBnZW9tZXRyeSBpbmZvCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZm
ZWN0Q2xhc3NUeXBlIGNvbnN0KTogTWFkZSB0aGUgZnVuY3Rpb24gYSBjb25zdAorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpub3JtYWxpemVkRmxvYXRzKTogQ2hhbmdlZCB0aGlzIGZ1
bmN0aW9uIHRvIHB1YmxpYyBzaW5jZSBpdCBpcyAKKyAgICAgICAgICAgIGNvbnN1bHRlZCBpbiBG
aWx0ZXJFZmZlY3RDb3JlSW1hZ2VSZW5kZXJlci4gCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmZpbHRlckVmZmVjdENsYXNzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6CisgICAgICAgIChpc1R5cGUpOiBh
ZGRlZCBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTIHNvIHRoYXQgd2UgY2FuIGRvd25jYXN0IHRvIFNv
dXJjZUdyYXBoaWMKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGQpOiAKKyAgICAgICAgICAgIENoZWNrcyB3aGV0aGVy
IG1fZmlsdGVyUmVuZGVyZXIgaXMgYWxyZWFkeSBjcmVhdGVkLCBubyBuZWVkIHRvIHJlLWNyZWF0
ZSBpZiB0aGUgcG9pbnRlciAKKyAgICAgICAgICAgIGlzIG5vbi1udWxsCisgICAgICAgIChXZWJD
b3JlOjpDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOiAKKyAgICAgICAg
ICAgIElmIHdlIGFyZSB1c2luZyBtX2ZpbHRlclJlbmRlcmVyLCB3aGljaCBpcyBjdXJyZW50bHkg
dXNpbmcgQ29yZUltYWdlIGFuZCByZWxpZXMgb24gCisgICAgICAgICAgICBJT1N1cmZhY2VzLCB3
ZSBhc2sgc291cmNlIGltYWdlIHRvIHVzZSBJT1N1cmZhY2UgZm9yIHBlcmZvcm1hbmNlIGNvbmNl
cm5zLgorCiAyMDIwLTA4LTI4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJlbW92ZSBhZG9wdGVkIG5vZGUgZnJvbSBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdl
L0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaAppbmRl
eCA4MWVjNTdlNjhiMTkyZWM4MzZhN2JkMThhMjhhZTNkZTczNTQxZDExLi44ZDU2Y2ExNmYzM2Q3
NTczYmVmMWMwMjliZmIxOWIxZDg0OGYwZmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaApAQCAtMjcsNyArMjcsOSBAQAogCiAjaWYgVVNFKENP
UkVfSU1BR0UpCiAKKyNpbXBvcnQgIkZFQ29sb3JNYXRyaXguaCIKICNpbXBvcnQgIkZpbHRlckVm
ZmVjdFJlbmRlcmVyLmgiCisjaW1wb3J0ICJTb3VyY2VHcmFwaGljLmgiCiAjaW1wb3J0IDx3dGYv
SGFzaE1hcC5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgogCkBAIC00MiwyNSArNDQsMjUgQEAg
Y2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0
UmVuZGVyZXIgewogICAgIAogcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Rmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+IHRyeUNyZWF0ZShGaWx0ZXJFZmZlY3QmKTsKLSAg
ICAKKyAgICBSZXRhaW5QdHI8Q0lDb250ZXh0PiBnZXRDSUNvbnRleHQoKTsKICAgICB2b2lkIGFw
cGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmKSBmaW5hbDsKICAgICBib29sIGhhc1Jlc3VsdCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fb3V0cHV0SW1hZ2U7IH0KICAgICBJbWFnZUJ1ZmZlciogb3V0
cHV0KCkgY29uc3QgZmluYWw7CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRlckVm
ZmVjdCYpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQgY2xlYXJSZXN1bHQoKSBmaW5hbDsKLSAgICAK
ICAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZSgpOwogICAgIAogcHJpdmF0ZToKLSAg
ICBDSUltYWdlKiBjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYpOworICAgIFJldGFpblB0
cjxDSUltYWdlPiBjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYpOwogICAgIHZvaWQgcmVu
ZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmKSBmaW5hbDsKICAgICBzdGF0aWMgYm9vbCBz
dXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3QmKTsKICAgICBzdGF0aWMgYm9v
bCBjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJFZmZlY3QmKTsKICAgICAKKyAgICBSZXRh
aW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JTb3VyY2VHcmFwaGljKFNvdXJjZUdyYXBoaWMmKTsKKyAg
ICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JGRUNvbG9yTWF0cml4KEZFQ29sb3JNYXRyaXgm
LCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiYpOworICAgIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9vdXRwdXRJbWFnZUJ1ZmZlcjsKLSAgICBIYXNoTWFwPFJl
ZjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmV0YWluUHRyPENJRmlsdGVyPj4+IG1fY2lGaWx0ZXJT
dG9yYWdlTWFwOwogICAgIFJldGFpblB0cjxDSUltYWdlPiBtX291dHB1dEltYWdlOwotICAgIFJl
dGFpblB0cjxDSUNvbnRleHQ+IG1fY29udGV4dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFn
ZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQpp
bmRleCA5MzEzZjcxZTZlZmJhODQ2ZDY2NTUxZTEzMDkzOTE5ZTA4M2RkODRjLi4wM2EyMjBlYjJl
YzJmYjhlNjk0NjlhZDdhNzkzZjA4ZjU0YWYzOTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0Zp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCkBAIC0zMCwxMiArMzAsMTQgQEAKIAogI2lt
cG9ydCAiRmlsdGVyLmgiCiAjaW1wb3J0ICJGaWx0ZXJFZmZlY3QuaCIKKyNpbXBvcnQgIkZpbHRl
ck9wZXJhdGlvbi5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbXBvcnQgIklt
YWdlQnVmZmVyLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCiAjaW1wb3J0IDxD
b3JlSW1hZ2UvQ0lDb250ZXh0Lmg+CiAjaW1wb3J0IDxDb3JlSW1hZ2UvQ0lGaWx0ZXIuaD4KICNp
bXBvcnQgPENvcmVJbWFnZS9Db3JlSW1hZ2UuaD4KKyNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ2LDEyICs0OCwzMiBAQCBzdGQ6OnVu
aXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlOjp0cgogICAgIHJldHVybiBudWxscHRyOwogfQogCitSZXRhaW5QdHI8Q0lD
b250ZXh0PiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Z2V0Q0lDb250ZXh0KCkKK3sK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPENJQ29udGV4dD4+IGNpQ29udGV4
dCA9IFtDSUNvbnRleHQgY29udGV4dFdpdGhPcHRpb25zOiBAeyBrQ0lDb250ZXh0V29ya2luZ0Nv
bG9yU3BhY2U6IChfX2JyaWRnZSBpZClDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xv
clNwYWNlU1JHQil9XTsKKyAgICByZXR1cm4gY2lDb250ZXh0OworfQorCiBib29sIEZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJF
ZmZlY3QmIGVmZmVjdCkKIHsKICAgICAvLyBGSVhNRTogY2hhbmdlIHJldHVybiB2YWx1ZSB0byB0
cnVlIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQKICAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJF
ZmZlY3RDbGFzc1R5cGUoKSkgeworICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VH
cmFwaGljOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRmls
dGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDogeworICAgICAgICBzd2l0Y2ggKGRvd25jYXN0
PEZFQ29sb3JNYXRyaXg+KGVmZmVjdCkudHlwZSgpKSB7CisgICAgICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX1VOS05PV046CisgICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlO
QU5DRVRPQUxQSEE6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKKyAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
U0FUVVJBVEU6CisgICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCiAgICAgY2FzZSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xv
ck1hdHJpeDoKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6
CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvc2l0ZToKICAgICBjYXNlIEZpbHRl
ckVmZmVjdDo6VHlwZTo6Q29udm9sdmVNYXRyaXg6CkBAIC02OSw3ICs5MSw2IEBAIGJvb2wgRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKEZp
bHRlckVmZmVjdCYgZWZmCiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlRpbGU6CiAgICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlR1cmJ1bGVuY2U6CiAgICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OlNvdXJjZUFscGhhOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3Vy
Y2VHcmFwaGljOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiBmYWxz
ZTsKQEAgLTgzLDEyICsxMDQsMTIgQEAgdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFn
ZTo6YXBwbHlFZmZlY3RzKEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKICAgICByZW5kZXJUb0lt
YWdlQnVmZmVyKGxhc3RFZmZlY3QpOwogfQogCi1DSUltYWdlKiBGaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKK1JldGFp
blB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmls
dGVycyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKIHsKLSAgICBWZWN0b3I8Q0lJbWFnZSo+IGlucHV0
SW1hZ2VzOworICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+IGlucHV0SW1hZ2VzOwogICAg
IAogICAgIGZvciAoYXV0byBpbiA6IGVmZmVjdC5pbnB1dEVmZmVjdHMoKSkgewotICAgICAgICBD
SUltYWdlKiBpbnB1dEltYWdlID0gY29ubmVjdENJRmlsdGVycygqaW4pOworICAgICAgICBhdXRv
IGlucHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKCppbik7CiAgICAgICAgIGlmICghaW5wdXRJ
bWFnZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpbnB1dEltYWdlcy5h
cHBlbmQoaW5wdXRJbWFnZSk7CkBAIC05OSwxMCArMTIwLDE0IEBAIENJSW1hZ2UqIEZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZm
ZWN0KQogICAgIGlmIChlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5pc0VtcHR5KCkgfHwgSW1h
Z2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhvc2UgZmlsdGVycyB1c2luZyBDSUZpbHRlciBzbyB0aGF0IHRoZSBmdW5jdGlvbiBy
ZXR1cm5zIGEgdmFsaWQgQ0lJbWFnZQogICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRlckVmZmVjdENs
YXNzVHlwZSgpKSB7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgorICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgorICAgICAgICByZXR1cm4gaW1h
Z2VGb3JTb3VyY2VHcmFwaGljKGRvd25jYXN0PFNvdXJjZUdyYXBoaWM+KGVmZmVjdCkpOwogICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDoKKyAgICAgICAgcmV0dXJuIGlt
YWdlRm9yRkVDb2xvck1hdHJpeChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZlY3QpLCBpbnB1
dEltYWdlcyk7CisKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRob3NlIGZpbHRlcnMgdXNpbmcg
Q0lGaWx0ZXIgc28gdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHZhbGlkIENJSW1hZ2UKKyAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6QmxlbmQ6CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOgogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpD
b21wb3NpdGU6CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbnZvbHZlTWF0cml4OgpA
QCAtMTIwLDEzICsxNDUsNzYgQEAgQ0lJbWFnZSogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U6OmNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCiAgICAgY2FzZSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OlRpbGU6CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlR1cmJ1
bGVuY2U6CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorUmV0
YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjppbWFnZUZvclNv
dXJjZUdyYXBoaWMoU291cmNlR3JhcGhpYyYgZWZmZWN0KQoreworICAgIEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSA9IGVmZmVjdC5maWx0ZXIoKS5zb3VyY2VJbWFnZSgpOworICAgIGlmICghc291
cmNlSW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIGlmIChpczxBY2Nl
bGVyYXRlZEltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpKQorICAgICAgICByZXR1cm4gW0NJSW1h
Z2UgaW1hZ2VXaXRoSU9TdXJmYWNlOmRvd25jYXN0PEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI+KCpz
b3VyY2VJbWFnZSkuc3VyZmFjZSgpLnN1cmZhY2UoKV07CisgICAgCisgICAgcmV0dXJuIFtDSUlt
YWdlIGltYWdlV2l0aENHSW1hZ2U6c291cmNlSW1hZ2UtPmNvcHlOYXRpdmVJbWFnZSgpLmdldCgp
XTsKK30KKworUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
OjppbWFnZUZvckZFQ29sb3JNYXRyaXgoRkVDb2xvck1hdHJpeCYgZWZmZWN0LCBjb25zdCBWZWN0
b3I8UmV0YWluUHRyPENJSW1hZ2U+PiYgaW5wdXRJbWFnZXMpCit7CisgICAgYXV0byBpbnB1dElt
YWdlID0gaW5wdXRJbWFnZXMuYXQoMCk7CisKKyAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IEZF
Q29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMoZWZmZWN0LnZhbHVlcygpKTsKKyAgICBmbG9h
dCBjb21wb25lbnRzWzldOworICAgIAorICAgIHN3aXRjaCAoZWZmZWN0LnR5cGUoKSkgeworICAg
IGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOiB7CisgICAgICAgIEZFQ29sb3JNYXRy
aXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9U
QVRFOiB7CisgICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVu
dHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAor
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgY2FzZSBGRUNPTE9STUFU
UklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQTogLy8gRklYTUU6IEFkZCBMdW1pbmFuY2UgdG8gQWxw
aGEgSW1wbGVtZW50YXRpb24KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAor
ICAgIENJRmlsdGVyICpjb2xvck1hdHJpeEZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFt
ZTpAIkNJQ29sb3JNYXRyaXgiXTsKKyAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6aW5w
dXRJbWFnZS5nZXQoKSBmb3JLZXk6a0NJSW5wdXRJbWFnZUtleV07CisgICAgCisgICAgc3dpdGNo
IChlZmZlY3QudHlwZSgpKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6
CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOiB7CisgICAgICAgIFtjb2xv
ck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6Y29tcG9uZW50c1sw
XSBZOmNvbXBvbmVudHNbMV0gWjpjb21wb25lbnRzWzJdIFc6MF0gZm9yS2V5OkAiaW5wdXRSVmVj
dG9yIl07CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVj
dG9yV2l0aFg6Y29tcG9uZW50c1szXSBZOmNvbXBvbmVudHNbNF0gWjpjb21wb25lbnRzWzVdIFc6
MF0gZm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBz
ZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6Y29tcG9uZW50c1s2XSBZOmNvbXBvbmVudHNb
N10gWjpjb21wb25lbnRzWzhdIFc6MF0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07CisgICAgICAg
IFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCAgICAg
ICAgICAgICBZOjAgICAgICAgICAgICAgWjowICAgICAgICAgICAgIFc6MV0gZm9yS2V5OkAiaW5w
dXRBVmVjdG9yIl07CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0
b3IgdmVjdG9yV2l0aFg6MCAgICAgICAgICAgICBZOjAgICAgICAgICAgICAgWjowICAgICAgICAg
ICAgIFc6MF0gZm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6IHsKKyAgICAgICAgW2NvbG9y
TWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNbMF0gIFk6
dmFsdWVzWzFdICBaOnZhbHVlc1syXSAgVzp2YWx1ZXNbM11dICBmb3JLZXk6QCJpbnB1dFJWZWN0
b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0
b3JXaXRoWDp2YWx1ZXNbNV0gIFk6dmFsdWVzWzZdICBaOnZhbHVlc1s3XSAgVzp2YWx1ZXNbOF1d
ICBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNl
dFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNbMTBdIFk6dmFsdWVzWzExXSBaOnZh
bHVlc1sxMl0gVzp2YWx1ZXNbMTNdXSBmb3JLZXk6QCJpbnB1dEJWZWN0b3IiXTsKKyAgICAgICAg
W2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNb
MTVdIFk6dmFsdWVzWzE2XSBaOnZhbHVlc1sxN10gVzp2YWx1ZXNbMThdXSBmb3JLZXk6QCJpbnB1
dEFWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3Rv
ciB2ZWN0b3JXaXRoWDp2YWx1ZXNbNF0gIFk6dmFsdWVzWzldICBaOnZhbHVlc1sxNF0gVzp2YWx1
ZXNbMTldXSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6CisgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorICAgIHJldHVybiBjb2xvck1hdHJpeEZpbHRlci5vdXRwdXRJbWFnZTsKK30KKwogYm9v
bCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMo
RmlsdGVyRWZmZWN0JiBlZmZlY3QpCiB7CiAgICAgaWYgKCFzdXBwb3J0c0NvcmVJbWFnZVJlbmRl
cmluZyhlZmZlY3QpKQpAQCAtMTQxLDYgKzIyOSw3IEBAIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2U6OmNhblJlbmRlclVzaW5nQ0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0
CiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6b3V0cHV0KCkg
Y29uc3QKIHsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJSZW5kZXJp
bmcgIiA8PCB0aGlzIDw8ICIgdXNpbmcgQ29yZUltYWdlXG4iKTsKICAgICByZXR1cm4gbV9vdXRw
dXRJbWFnZUJ1ZmZlci5nZXQoKTsKIH0KICAgICAKQEAgLTE2MCw4ICsyNDksOCBAQCB2b2lkIEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpyZW5kZXJUb0ltYWdlQnVmZmVyKEZpbHRlckVm
ZmVjdCYgbGFzdEVmZmVjdAogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgYXV0byYgc3VyZmFj
ZSA9IGRvd25jYXN0PEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI+KCptX291dHB1dEltYWdlQnVmZmVy
KS5zdXJmYWNlKCk7Ci0gICAgQ0dDb2xvclNwYWNlUmVmIHJlc3VsdENvbG9yU3BhY2UgPSBjYWNo
ZWRDR0NvbG9yU3BhY2UobGFzdEVmZmVjdC5yZXN1bHRDb2xvclNwYWNlKCkpOwotICAgIFttX2Nv
bnRleHQuZ2V0KCkgcmVuZGVyOiBtX291dHB1dEltYWdlLmdldCgpIHRvSU9TdXJmYWNlOiBzdXJm
YWNlLnN1cmZhY2UoKSBib3VuZHM6ZGVzdFJlY3QobGFzdEVmZmVjdCkgY29sb3JTcGFjZTpyZXN1
bHRDb2xvclNwYWNlXTsKKyAgICBhdXRvIGNpQ29udGV4dCA9IGdldENJQ29udGV4dCgpOworICAg
IFtjaUNvbnRleHQuZ2V0KCkgcmVuZGVyOiBtX291dHB1dEltYWdlLmdldCgpIHRvSU9TdXJmYWNl
OiBzdXJmYWNlLnN1cmZhY2UoKSBib3VuZHM6ZGVzdFJlY3QobGFzdEVmZmVjdCkgY29sb3JTcGFj
ZTpjYWNoZWRDR0NvbG9yU3BhY2UobGFzdEVmZmVjdC5yZXN1bHRDb2xvclNwYWNlKCkpXTsKIH0K
ICAgICAKIEZsb2F0UmVjdCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6ZGVzdFJlY3Qo
Y29uc3QgRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KSBjb25zdApAQCAtMTc1LDE2ICsyNjQsMTIg
QEAgRmxvYXRSZWN0IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpkZXN0UmVjdChjb25z
dCBGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QKIHZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2U6OmNsZWFyUmVzdWx0KCkKIHsKICAgICBtX291dHB1dEltYWdlQnVmZmVyLnJlc2V0KCk7
Ci0gICAgbV9jaUZpbHRlclN0b3JhZ2VNYXAuY2xlYXIoKTsKICAgICBtX291dHB1dEltYWdlID0g
bnVsbHB0cjsKLSAgICBtX2NvbnRleHQgPSBudWxscHRyOwogfQogCiBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UoKQogICAgIDogRmls
dGVyRWZmZWN0UmVuZGVyZXIoKQogewotICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0g
Y2FjaGVkQ0dDb2xvclNwYWNlKENvbG9yU3BhY2U6OlNSR0IpOwotICAgIG1fY29udGV4dCA9IFtD
SUNvbnRleHQgY29udGV4dFdpdGhPcHRpb25zOiBAeyBrQ0lDb250ZXh0V29ya2luZ0NvbG9yU3Bh
Y2U6IChfX2JyaWRnZSBpZCljb2xvclNwYWNlfV07CiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5oCmluZGV4IDA5MGU2ODJlOGE3NWUwNWIwMjY1ZWNmMmZmMWJi
M2NlNjJjNDA2NjkuLjdjNmRjNTdmYmEyMWJiNjMxNWM1YTc2YzAwZTAyYjFmYWJlZWEwY2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5oCkBAIC05MywzICs5Myw3IEBAIGlubGluZSB2b2lkIEZFQ29sb3JNYXRy
aXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJ
TihXZWJDb3JlOjpGRUNvbG9yTWF0cml4KQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVj
dENsYXNzVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg7
IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4
IDc1NjJmZGQ2MDU4NjdmNjI4Y2EzMmMzMTVjOWQzNzI5MDM3NmYzODguLjdlMTNjZmY2NjNkYWJm
MjgzODM2YWI5N2I2MjYzZGVlMTE0ZjQyZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTc5LDcg
Kzc5LDYgQEAgRmxvYXRQb2ludCBGaWx0ZXJFZmZlY3Q6Om1hcFBvaW50RnJvbVVzZXJTcGFjZVRv
QnVmZmVyKEZsb2F0UG9pbnQgdXNlclNwYWNlUG9pbnQKIAogSW50UmVjdCBGaWx0ZXJFZmZlY3Q6
OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgZWZmZWN0UmVj
dCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwogICAgIEludFBvaW50IGxvY2F0
aW9uID0gbV9hYnNvbHV0ZVBhaW50UmVjdC5sb2NhdGlvbigpOwogICAgIGxvY2F0aW9uLm1vdmVC
eSgtZWZmZWN0UmVjdC5sb2NhdGlvbigpKTsKICAgICByZXR1cm4gSW50UmVjdChsb2NhdGlvbiwg
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5kZXggMTFhYzYwYWE2
NDExNzQxYWIxMzY0NmZjZDE2YTA1NGIzOWMyZmM3Yy4uZWVhMGFkMmY4NTI5OGZlOWE2YTM5MTNi
MWZhZDU3MDc1YTkyZWUyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC0xNTUsNyArMTU1LDcgQEAgcHVi
bGljOgogICAgIAogICAgIEZsb2F0UG9pbnQgbWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIo
RmxvYXRQb2ludCkgY29uc3Q7CiAgICAgCi0gICAgVHlwZSBmaWx0ZXJFZmZlY3RDbGFzc1R5cGUo
KSB7IHJldHVybiBtX2ZpbHRlckVmZmVjdENsYXNzVHlwZTsgfQorICAgIFR5cGUgZmlsdGVyRWZm
ZWN0Q2xhc3NUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7IH0K
IAogICAgIEZpbHRlciYgZmlsdGVyKCkgeyByZXR1cm4gbV9maWx0ZXI7IH0KICAgICBjb25zdCBG
aWx0ZXImIGZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyOyB9CkBAIC0xNzAsNiArMTcw
LDE0IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNw
YWNlKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IGludCkgeyBpbi0+dHJhbnNmb3JtUmVzdWx0Q29s
b3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOyB9CiAgICAgdm9pZCB0cmFuc2Zvcm1SZXN1
bHRDb2xvclNwYWNlKENvbG9yU3BhY2UpOworICAgIAorICAgIHN0YXRpYyBWZWN0b3I8ZmxvYXQ+
IG5vcm1hbGl6ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQorICAgIHsKKyAg
ICAgICAgVmVjdG9yPGZsb2F0PiBub3JtYWxpemVkVmFsdWVzKHZhbHVlcy5zaXplKCkpOworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIG5vcm1hbGl6ZWRWYWx1ZXNbaV0gPSBub3JtYWxpemVkRmxvYXQodmFsdWVzW2ldKTsKKyAg
ICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZXM7CisgICAgfQogCiBwcm90ZWN0ZWQ6CiAgICAg
RmlsdGVyRWZmZWN0KEZpbHRlciYsIFR5cGUpOwpAQCAtMTg4LDE0ICsxOTYsNiBAQCBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCBmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpOwogCiAgICAgdm9p
ZCBjbGlwQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICAKLSAgICBzdGF0aWMgVmVjdG9yPGZsb2F0
PiBub3JtYWxpemVkRmxvYXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcykKLSAgICB7Ci0g
ICAgICAgIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZFZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAg
ICAgICBub3JtYWxpemVkVmFsdWVzW2ldID0gbm9ybWFsaXplZEZsb2F0KHZhbHVlc1tpXSk7Ci0g
ICAgICAgIHJldHVybiBub3JtYWxpemVkVmFsdWVzOwotICAgIH0KIAogcHJpdmF0ZToKICAgICB2
aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApp
bmRleCAwZjAxZGRhMDZjZTAyNzEzNWI3MWNhNWNjMDM0Mzc1ZTE5MTk2NDU2Li5mNjczY2U0Yzdm
MjkzYWExOTEzNWY5Yzc3ZTYwYzIyNzcxNjEzOThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApAQCAtNTAs
NCArNTAsOSBAQCBwcml2YXRlOgogCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpTb3VyY2VHcmFwaGljKQorICAgIHN0YXRpYyBi
b29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4g
ZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
VHlwZTo6U291cmNlR3JhcGhpYzsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisK
ICNlbmRpZiAvLyBTb3VyY2VHcmFwaGljX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9DU1NGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRl
ci5jcHAKaW5kZXggYWZlYjkyOTU1MzUzNDI3ODAyY2UyOTA2MDdkYTFhODk3Y2Y4Y2EyMC4uYWFh
MWYwMGVlOWY4NGQ1MzY3ZGM0NGM2YzU0MjJjNDY5Y2Q1OTM2OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0NTU0ZpbHRlci5jcHAKQEAgLTMwNCw3ICszMDQsOCBAQCBib29sIENTU0ZpbHRlcjo6
YnVpbGQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9w
ZXJhdGlvbgogCiAgICAgc2V0TWF4RWZmZWN0UmVjdHMobV9zb3VyY2VEcmF3aW5nUmVnaW9uKTsK
ICNpZiBVU0UoQ09SRV9JTUFHRSkKLSAgICBtX2ZpbHRlclJlbmRlcmVyID0gRmlsdGVyRWZmZWN0
UmVuZGVyZXI6OnRyeUNyZWF0ZShyZW5kZXJlci5zZXR0aW5ncygpLmNvcmVJbWFnZUFjY2VsZXJh
dGVkRmlsdGVyUmVuZGVyRW5hYmxlZCgpLCBtX2VmZmVjdHMubGFzdCgpLmdldCgpKTsKKyAgICBp
ZiAoIW1fZmlsdGVyUmVuZGVyZXIpCisgICAgICAgIG1fZmlsdGVyUmVuZGVyZXIgPSBGaWx0ZXJF
ZmZlY3RSZW5kZXJlcjo6dHJ5Q3JlYXRlKHJlbmRlcmVyLnNldHRpbmdzKCkuY29yZUltYWdlQWNj
ZWxlcmF0ZWRGaWx0ZXJSZW5kZXJFbmFibGVkKCksIG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCkpOwog
I2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zMzYsNyArMzM3LDEwIEBAIHZvaWQgQ1NT
RmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYgdGFyZ2V0Q29udGV4CiAgICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVh
dGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgJnRhcmdldENvbnRleHQsIGZpbHRlclNj
YWxlKCkpKTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRDb250ZXh0KTsKLSAg
ICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVu
ZGVyaW5nTW9kZSgpLCBmaWx0ZXJTY2FsZSgpKSk7CisgICAgICAgIGlmIChtX2ZpbHRlclJlbmRl
cmVyKQorICAgICAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dp
Y2FsU2l6ZSwgUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQsIGZpbHRlclNjYWxlKCkpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6OmNyZWF0
ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCBmaWx0ZXJTY2FsZSgpKSk7CiAjZW5kaWYK
ICAgICB9CiAgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBkMDQ0
N2MxOTk4NDA4NDk0MWNjMWMxZDE0Y2ViZDIwNTg1MGYzZjc1Li40MWJmZDUzYTljNGE1ZmVlNDZi
NzE3ODJlYTVkYmMyZTI1MWVmYmZjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjAtMDktMDEg
IEZyYW5rIFlhbmcgIDxndW93ZWlfeWFuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29yZUltYWdl
IEltcGxlbWVudGF0aW9uIG9mIFNvdXJjZUdyYXBoaWMgYW5kIHNhdHVyYXRlKCksIGh1ZS1yb3Rh
dGUoKSwgZ3JheXNjYWxlKCkgYW5kIHNlcGlhKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzY3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogY3NzMy9maWx0ZXJzL2VmZmVjdC1ncmF5c2NhbGUtc3F1
YXJlLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNzczMvZmlsdGVycy9lZmZlY3Qt
Z3JheXNjYWxlLXNxdWFyZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBjc3MzL2ZpbHRlcnMvZWZm
ZWN0LWh1ZS1yb3RhdGUtc3F1YXJlLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNz
czMvZmlsdGVycy9lZmZlY3QtaHVlLXJvdGF0ZS1zcXVhcmUuaHRtbDogQWRkZWQuCisgICAgICAg
ICogY3NzMy9maWx0ZXJzL2VmZmVjdC1zYXR1cmF0ZS1zcXVhcmUtZXhwZWN0ZWQuaHRtbDogQWRk
ZWQuCisgICAgICAgICogY3NzMy9maWx0ZXJzL2VmZmVjdC1zYXR1cmF0ZS1zcXVhcmUuaHRtbDog
QWRkZWQuCisgICAgICAgICogY3NzMy9maWx0ZXJzL2VmZmVjdC1zZXBpYS1zcXVhcmUtZXhwZWN0
ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogY3NzMy9maWx0ZXJzL2VmZmVjdC1zZXBpYS1zcXVh
cmUuaHRtbDogQWRkZWQuCisKIDIwMjAtMDgtMjggIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjI2MzUwNik6IHNjYWxlIHRyYW5zZm9y
bSB0cmFuc2l0aW9ucyB3b24ndCBvdmVyc2hvb3QKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Nz
czMvZmlsdGVycy9lZmZlY3QtZ3JheXNjYWxlLXNxdWFyZS1leHBlY3RlZC5odG1sIGIvTGF5b3V0
VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1ncmF5c2NhbGUtc3F1YXJlLWV4cGVjdGVkLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNzcyODE3MjI3ZGQwNWJiNjY1MWZhMjJkZWM1NWUyYjMyMGY2MGE2OAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3QtZ3JheXNjYWxl
LXNxdWFyZS1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKyAgICA8dGl0bGU+Q1NTIEZpbHRlciBUZXN0OiBUZXN0IGZvciBTYXR1
cmF0ZSBzaG9ydCBoYW5kPC90aXRsZT4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAg
IGRpdiB7CisgICAgICAgIHdpZHRoOiA2MDBweDsKKyAgICAgICAgaGVpZ2h0OiA2MDBweDsgCisg
ICAgICAgIGJhY2tncm91bmQ6IHJnYigxNTQsIDI3LCAyNyk7CisgICAgfQorCisgICAgPC9zdHls
ZT4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxwPllvdSBzaG91bGQgc2VlIGEgZ3JlZW4gcmVjdGFu
Z2xlLjwvcD4KKyAgICA8ZGl2PjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LWdyYXlzY2FsZS1zcXVhcmUuaHRtbCBi
L0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3QtZ3JheXNjYWxlLXNxdWFyZS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmM2YTRkMzdjYmViNDRlNjg0M2I5YzE4ZWFlMjVkNGQwMzM5MjdiNTIKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LWdyYXlzY2FsZS1z
cXVhcmUuaHRtbApAQCAtMCwwICsxLDIwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+CisgICAgPHRpdGxlPkNTUyBGaWx0ZXIgVGVzdDogVGVzdCBmb3IgU2F0dXJhdGUgc2hvcnQg
aGFuZDwvdGl0bGU+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgICBkaXYgeworICAg
ICAgICB3aWR0aDogNjAwcHg7CisgICAgICAgIGhlaWdodDogNjAwcHg7IAorICAgICAgICBiYWNr
Z3JvdW5kOiByZWQ7CisgICAgICAgIGZpbHRlcjogZ3JheXNjYWxlKDUwJSk7CisgICAgfQorCisg
ICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxwPllvdSBzaG91bGQgc2VlIGEgZ3Jl
ZW4gcmVjdGFuZ2xlLjwvcD4KKyAgICA8ZGl2PjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LWh1ZS1yb3RhdGUtc3F1
YXJlLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LWh1ZS1y
b3RhdGUtc3F1YXJlLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTA3YmI0M2JlM2UxMTdhMGE5
ZmJhYzExOTNiZmExMjc4ZjI5NmMxZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Nz
czMvZmlsdGVycy9lZmZlY3QtaHVlLXJvdGF0ZS1zcXVhcmUtZXhwZWN0ZWQuaHRtbApAQCAtMCww
ICsxLDE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPkNT
UyBGaWx0ZXIgVGVzdDogVGVzdCBmb3IgU2F0dXJhdGUgc2hvcnQgaGFuZDwvdGl0bGU+CisgICAg
PHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgICBkaXYgeworICAgICAgICB3aWR0aDogNjAwcHg7
CisgICAgICAgIGhlaWdodDogNjAwcHg7IAorICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoMCwgOTEs
IDApOworICAgIH0KKworICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8cD5Zb3Ug
c2hvdWxkIHNlZSBhIGdyZWVuIHJlY3RhbmdsZS48L3A+CisgICAgPGRpdj48L2Rpdj4KKworPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVj
dC1odWUtcm90YXRlLXNxdWFyZS5odG1sIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVj
dC1odWUtcm90YXRlLXNxdWFyZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI5ODg2ODkzNjdlNWU5ZjFiNjU3
NmVlYjY4NzM3ODRjZjY5YTViMzgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3Mz
L2ZpbHRlcnMvZWZmZWN0LWh1ZS1yb3RhdGUtc3F1YXJlLmh0bWwKQEAgLTAsMCArMSwyMCBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5DU1MgRmlsdGVyIFRl
c3Q6IFRlc3QgZm9yIFNhdHVyYXRlIHNob3J0IGhhbmQ8L3RpdGxlPgorICAgIDxzdHlsZSB0eXBl
PSJ0ZXh0L2NzcyI+CisgICAgZGl2IHsKKyAgICAgICAgd2lkdGg6IDYwMHB4OworICAgICAgICBo
ZWlnaHQ6IDYwMHB4OyAKKyAgICAgICAgYmFja2dyb3VuZDogcmVkOworICAgICAgICBmaWx0ZXI6
IGh1ZS1yb3RhdGUoOTBkZWcpOworICAgIH0KKworICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9k
eT4KKyAgICA8cD5Zb3Ugc2hvdWxkIHNlZSBhIGdyZWVuIHJlY3RhbmdsZS48L3A+CisgICAgPGRp
dj48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3Nz
My9maWx0ZXJzL2VmZmVjdC1zYXR1cmF0ZS1zcXVhcmUtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRl
c3RzL2NzczMvZmlsdGVycy9lZmZlY3Qtc2F0dXJhdGUtc3F1YXJlLWV4cGVjdGVkLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzcyODE3MjI3ZGQwNWJiNjY1MWZhMjJkZWM1NWUyYjMyMGY2MGE2OAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3Qtc2F0dXJhdGUtc3F1
YXJlLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorICAgIDx0aXRsZT5DU1MgRmlsdGVyIFRlc3Q6IFRlc3QgZm9yIFNhdHVyYXRl
IHNob3J0IGhhbmQ8L3RpdGxlPgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgZGl2
IHsKKyAgICAgICAgd2lkdGg6IDYwMHB4OworICAgICAgICBoZWlnaHQ6IDYwMHB4OyAKKyAgICAg
ICAgYmFja2dyb3VuZDogcmdiKDE1NCwgMjcsIDI3KTsKKyAgICB9CisKKyAgICA8L3N0eWxlPgor
PC9oZWFkPgorPGJvZHk+CisgICAgPHA+WW91IHNob3VsZCBzZWUgYSBncmVlbiByZWN0YW5nbGUu
PC9wPgorICAgIDxkaXY+PC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3Qtc2F0dXJhdGUtc3F1YXJlLmh0bWwgYi9MYXlv
dXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LXNhdHVyYXRlLXNxdWFyZS5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQ3MGNiMjZhYTFiM2I0MmY1ZGM0ODc0ZTkyOGE1ZTYyZWNjN2U0MTkKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LXNhdHVyYXRlLXNxdWFyZS5o
dG1sCkBAIC0wLDAgKzEsMjAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAg
ICA8dGl0bGU+Q1NTIEZpbHRlciBUZXN0OiBUZXN0IGZvciBTYXR1cmF0ZSBzaG9ydCBoYW5kPC90
aXRsZT4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgIGRpdiB7CisgICAgICAgIHdp
ZHRoOiA2MDBweDsKKyAgICAgICAgaGVpZ2h0OiA2MDBweDsgCisgICAgICAgIGJhY2tncm91bmQ6
IHJlZDsKKyAgICAgICAgZmlsdGVyOiBzYXR1cmF0ZSg1MCUpOworICAgIH0KKworICAgIDwvc3R5
bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8cD5Zb3Ugc2hvdWxkIHNlZSBhIGdyZWVuIHJlY3Rh
bmdsZS48L3A+CisgICAgPGRpdj48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1zZXBpYS1zcXVhcmUtZXhwZWN0ZWQu
aHRtbCBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3Qtc2VwaWEtc3F1YXJlLWV4cGVj
dGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYTRkY2EyOGUzZTYzN2VjNDViMmM3ODdlYmE5MDgxNWMyOWQx
YjJmZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3Qt
c2VwaWEtc3F1YXJlLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5DU1MgRmlsdGVyIFRlc3Q6IFRlc3QgZm9y
IFNhdHVyYXRlIHNob3J0IGhhbmQ8L3RpdGxlPgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+
CisgICAgZGl2IHsKKyAgICAgICAgd2lkdGg6IDYwMHB4OworICAgICAgICBoZWlnaHQ6IDYwMHB4
OyAKKyAgICAgICAgYmFja2dyb3VuZDogcmdiKDI0LCAyMSwgMTQ0KTsKKyAgICB9CisKKyAgICA8
L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+IAorICAgIDxwPllvdSBzaG91bGQgc2VlIGEgZ3JlZW4g
cmVjdGFuZ2xlLjwvcD4KKyAgICA8ZGl2PjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LXNlcGlhLXNxdWFyZS5odG1s
IGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1zZXBpYS1zcXVhcmUuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mODlhY2E1Nzg4NzdhYzgzOWZmZmZmMTc1MTA0NGU2MWYyZjYyYWI0Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1zZXBpYS1zcXVhcmUu
aHRtbApAQCAtMCwwICsxLDIwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cisg
ICAgPHRpdGxlPkNTUyBGaWx0ZXIgVGVzdDogVGVzdCBmb3IgU2F0dXJhdGUgc2hvcnQgaGFuZDwv
dGl0bGU+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgICBkaXYgeworICAgICAgICB3
aWR0aDogNjAwcHg7CisgICAgICAgIGhlaWdodDogNjAwcHg7IAorICAgICAgICBiYWNrZ3JvdW5k
OiBibHVlOworICAgICAgICBmaWx0ZXI6IHNlcGlhKDUwJSk7CisgICAgfQorCisgICAgPC9zdHls
ZT4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxwPllvdSBzaG91bGQgc2VlIGEgZ3JlZW4gcmVjdGFu
Z2xlLjwvcD4KKyAgICA8ZGl2PjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="423160"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407804</attachid>
            <date>2020-09-02 14:03:00 -0700</date>
            <delta_ts>2020-09-02 17:23:23 -0700</delta_ts>
            <desc>Ready for commit</desc>
            <filename>bug-213673-20200902140259.patch</filename>
            <type>text/plain</type>
            <size>28238</size>
            <attacher>frankhome61</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MjgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWMxZjViYzkyNTFjNDRm
ZTM5OTQ1YmJlNjkzMzUzNTNhMGFiZmJmZC4uY2Q0NzI4MTVhNDdjMmY1YjJjNTFlODlkNzg2Mjhh
NWIzMWJiMWU1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDIwLTA5LTAxICBGcmFu
ayBZYW5nICA8Z3Vvd2VpX3lhbmdAYXBwbGUuY29tPgorCisgICAgICAgIENvcmVJbWFnZSBJbXBs
ZW1lbnRhdGlvbiBvZiBTb3VyY2VHcmFwaGljIGFuZCBzYXR1cmF0ZSgpLCBodWUtcm90YXRlKCks
IGdyYXlzY2FsZSgpIGFuZCBzZXBpYSgpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTM2NzMKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ciwgU2ltb24gRnJhc2VyLgorCisgICAgICAgIFRlc3RzOiBjc3MzL2ZpbHRlcnMvZWZmZWN0LWdy
YXlzY2FsZS1zcXVhcmUuaHRtbAorICAgICAgICAgICAgICAgY3NzMy9maWx0ZXJzL2VmZmVjdC1o
dWUtcm90YXRlLXNxdWFyZS5odG1sCisgICAgICAgICAgICAgICBjc3MzL2ZpbHRlcnMvZWZmZWN0
LXNhdHVyYXRlLXNxdWFyZS5odG1sCisgICAgICAgICAgICAgICBjc3MzL2ZpbHRlcnMvZWZmZWN0
LXNlcGlhLXNxdWFyZS5odG1sCisKKyAgICAgICAgQWRkZWQgQ29yZUltYWdlIGltcGxlbWVudGF0
aW9uIG9mIFNvdXJjZUdyYXBoaWMgYW5kIHBhcnRpYWwgb2YgRkVDb2xvck1hdHJpeCwgCisgICAg
ICAgIHdoaWNoIGlzIHVzZWQgdG8gaW1wbGVtZW50IHNlcGlhKCksIGdyYXlzY2FsZSgpIGh1ZS1y
b3RhdGUoKSBhbmQgc2F0dXJhdGUoKS4KKyAgICAgICAgQWxzbyBhZGRlZCBDSUZpbHRlciBjYWNo
aW5nLCBieSBzdG9yaW5nIENJRmlsdGVycyBpbiBhIGhhc2ggbWFwLCB3aGVyZSB0aGUga2V5IAor
ICAgICAgICBpcyB0aGUgbGV2ZWwgb2YgdHJhdmVyc2FsIChhbiBpbnRlZ2VyKS4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZS5oOgorICAgICAgICAgICAgSW1wb3J0ZWQgRkVDb2xvck1hdHJpeC5oIGFuZCBTb3VyY2VH
cmFwaGljLmg7IGFkZGVkIGZ1bmN0aW9uIGdldENJQ29udGV4dCgpCisgICAgICAgICAgICB0aGF0
IHJldHVybnMgYSBzdGF0aWMgY29weSBvZiBDSUNvbnRleHQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmdldENJQ29udGV4
dCk6IENyZWF0aW5nIGEgCisgICAgICAgICAgICBDSUNvbnRleHQgaXMgZXhwZW5zaXZlLiBJbnN0
ZWFkIG9mIGNyZWF0aW5nIGEgQ0lDb250ZXh0IG9uIGVhY2ggZnJhbWUKKyAgICAgICAgICAgIHVw
ZGF0ZSwgd2UganVzdCB1c2UgYSBzdGF0aWMgc2luZ2xldG9uIG9uIGV2ZXJ5IGRyYXcKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzdXBwb3J0c0NvcmVJ
bWFnZVJlbmRlcmluZyk6CisgICAgICAgICAgICB0aGUgZnVuY3Rpb24gbm93IHJldHVybnMgdHJ1
ZSBpZiB0aGUgZmlsdGVyIGNoYWluIGNvbnRhaW5zIFNvdXJjZUdyYXBoaWMKKyAgICAgICAgICAg
IGFuZCBGRUNvbG9yTWF0cml4IG9mIFRZUEVfTUFUUklYLCBUWVBFX1NBVFVSQVRFIGFuZCBUWVBF
X0hVRVJPVEFURQorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U6OmNvbm5lY3RDSUZpbHRlcnMpOgorICAgICAgICAgICAgTWFkZSBzbGlnaHQgY2hhbmdlcyB0
byB3cmFwIE9iai1DIHBvaW50ZXJzIGluIFJldGFpblB0cgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmltYWdlRm9yU291cmNlR3JhcGhpYyk6CisgICAg
ICAgICAgICBVc2UgdGhlIHNvdXJjZSBpbWFnZSB0byBjcmVhdGUgYSBDSUltYWdlIGFuZCByZXR1
cm4gaXQuIElmIHRoZSBzb3VyY2UgaW1hZ2UgCisgICAgICAgICAgICBpcyBiYWNrZWQgYnkgSU9T
dXJmYWNlLCB3ZSBjcmVhdGUgYSBDSUltYWdlIGRpcmVjdGx5IGZyb20gdGhlIElPU3VyZmFjZTsg
b3RoZXJ3aXNlCisgICAgICAgICAgICB3ZSBjcmVhdGUgYSBDSUltYWdlIGJ5IGdldHRpbmcgdGhl
IE5hdGl2ZUltYWdlUHRyIGZyb20gc291cmNlIGltYWdlLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmltYWdlRm9yRkVDb2xvck1hdHJpeCk6CisgICAg
ICAgICAgICBCYXNlZCBvbiB0aGUgdHlwZSBvZiB0aGUgbWF0cml4IGFuZCBpbnB1dCBwYXJhbWV0
ZXIsIAorICAgICAgICAgICAgY3JlYXRlIGRpZmZlcmVudCB0eXBlcyBvZiBDSUNvbG9yTWF0cml4
IGZpbGVycyB0aGF0IGFyZSB1c2VkIHRvIGltcGxlbWVudCAKKyAgICAgICAgICAgIHNlcGlhLCBn
cmF5c2NhbGUsIGh1ZS1yb3RhdGUsIHNhdHVyYXRlCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6b3V0cHV0IGNvbnN0KToKKyAgICAgICAgICAgIEFkZGVk
IGEgbG9nZ2luZyBsaW5lCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZTo6cmVuZGVyVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgICAgICBNaW5vciByZWZhY3Rv
cnMgCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y2xl
YXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaDoKKyAgICAgICAgKGlzVHlwZSk6IGFkZGVk
IFNQRUNJQUxJWkVfVFlQRV9UUkFJVFMgc28gdGhhdCB3ZSBjYW4gZG93bmNhc3QgdG8gRkVDb2xv
ck1hdHJpeAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dEltYWdlRGF0YSBjb25zdCk6IHJlbW92ZWQgCisgICAgICAgICAgICBBU1NFUlQoaGFzUmVz
dWx0KCkpOyBmcm9tIHRoZSBmdW5jdGlvbiwgYmVjYXVzZSBDb3JlSW1hZ2UgcGF0aCB3b3VsZG4n
dCBjcmVhdGUgCisgICAgICAgICAgICBpbWFnZSBidWZmZXJzIGluc2lkZSBGaWx0ZXJFZmZlY3Qs
IGJ1dCBDSSBwYXRoIHN0aWxsIG5lZWRzIHRvIGNvbnN1bHQgdGhpcyBmdW5jdGlvbgorICAgICAg
ICAgICAgdG8gb2J0YWluIGdlb21ldHJ5IGluZm8KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUgY29uc3QpOiBNYWRlIHRoZSBmdW5jdGlvbiBhIGNvbnN0
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om5vcm1hbGl6ZWRGbG9hdHMpOiBDaGFu
Z2VkIHRoaXMgZnVuY3Rpb24gdG8gcHVibGljIHNpbmNlIGl0IGlzIAorICAgICAgICAgICAgY29u
c3VsdGVkIGluIEZpbHRlckVmZmVjdENvcmVJbWFnZVJlbmRlcmVyLiAKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaDoKKyAgICAgICAg
KGlzVHlwZSk6IGFkZGVkIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFMgc28gdGhhdCB3ZSBjYW4gZG93
bmNhc3QgdG8gU291cmNlR3JhcGhpYworICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZCk6IAorICAgICAgICAgICAgQ2hl
Y2tzIHdoZXRoZXIgbV9maWx0ZXJSZW5kZXJlciBpcyBhbHJlYWR5IGNyZWF0ZWQsIG5vIG5lZWQg
dG8gcmUtY3JlYXRlIGlmIHRoZSBwb2ludGVyIAorICAgICAgICAgICAgaXMgbm9uLW51bGwKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCk6
IAorICAgICAgICAgICAgSWYgd2UgYXJlIHVzaW5nIG1fZmlsdGVyUmVuZGVyZXIsIHdoaWNoIGlz
IGN1cnJlbnRseSB1c2luZyBDb3JlSW1hZ2UgYW5kIHJlbGllcyBvbiAKKyAgICAgICAgICAgIElP
U3VyZmFjZXMsIHdlIGFzayBzb3VyY2UgaW1hZ2UgdG8gdXNlIElPU3VyZmFjZSBmb3IgcGVyZm9y
bWFuY2UgY29uY2VybnMuCisKIDIwMjAtMDgtMjggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIGFkb3B0ZWQgbm9kZSBmcm9tIFRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL1dlYkNvcmUueGNzY2hlbWUgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL1dlYkNvcmUueGNzY2hl
bWUKaW5kZXggMTU4MmUxYTNjNTZkZjllNzgyMDBkOTlhOTk4NjgwNTkxYjRjZGYwYi4uY2Q5MmI3
OGFjMzIxYTY1NDZkNjQ2YmRmNjM2ZjQyYjMxZTA1MzQxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9XZWJDb3JlLnhj
c2NoZW1lCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3hjc2hhcmVkZGF0
YS94Y3NjaGVtZXMvV2ViQ29yZS54Y3NjaGVtZQpAQCAtMzEsNyArMzEsNyBAQAogICAgICAgPC9U
ZXN0YWJsZXM+CiAgICA8L1Rlc3RBY3Rpb24+CiAgICA8TGF1bmNoQWN0aW9uCi0gICAgICBidWls
ZENvbmZpZ3VyYXRpb24gPSAiRGVidWciCisgICAgICBidWlsZENvbmZpZ3VyYXRpb24gPSAiUmVs
ZWFzZSIKICAgICAgIHNlbGVjdGVkRGVidWdnZXJJZGVudGlmaWVyID0gIlhjb2RlLkRlYnVnZ2Vy
Rm91bmRhdGlvbi5EZWJ1Z2dlci5MTERCIgogICAgICAgc2VsZWN0ZWRMYXVuY2hlcklkZW50aWZp
ZXIgPSAiWGNvZGUuRGVidWdnZXJGb3VuZGF0aW9uLkxhdW5jaGVyLkxMREIiCiAgICAgICBsYXVu
Y2hTdHlsZSA9ICIwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2UuaAppbmRleCA4MWVjNTdlNjhiMTkyZWM4MzZhN2JkMThhMjhhZTNkZTczNTQxZDExLi40
ZjFlNzMxYjhhMjAzYWYwMjhjYWIyYjQ1NmM4NGI5YTIwMTg5ZjQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
aW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaApAQCAtMjcsNyArMjcsOSBAQAog
CiAjaWYgVVNFKENPUkVfSU1BR0UpCiAKKyNpbXBvcnQgIkZFQ29sb3JNYXRyaXguaCIKICNpbXBv
cnQgIkZpbHRlckVmZmVjdFJlbmRlcmVyLmgiCisjaW1wb3J0ICJTb3VyY2VHcmFwaGljLmgiCiAj
aW1wb3J0IDx3dGYvSGFzaE1hcC5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgogCkBAIC00Miwy
NSArNDQsMjUgQEAgY2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0UmVuZGVyZXIgewogICAgIAogcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+IHRyeUNyZWF0ZShGaWx0ZXJF
ZmZlY3QmKTsKLSAgICAKKyAgICBSZXRhaW5QdHI8Q0lDb250ZXh0PiBzaGFyZWRDSUNvbnRleHQo
KTsKICAgICB2b2lkIGFwcGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmKSBmaW5hbDsKICAgICBib29s
IGhhc1Jlc3VsdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fb3V0cHV0SW1hZ2U7IH0KICAgICBJ
bWFnZUJ1ZmZlciogb3V0cHV0KCkgY29uc3QgZmluYWw7CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0
KGNvbnN0IEZpbHRlckVmZmVjdCYpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQgY2xlYXJSZXN1bHQo
KSBmaW5hbDsKLSAgICAKICAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZSgpOwogICAg
IAogcHJpdmF0ZToKLSAgICBDSUltYWdlKiBjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYp
OworICAgIFJldGFpblB0cjxDSUltYWdlPiBjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYp
OwogICAgIHZvaWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmKSBmaW5hbDsKICAg
ICBzdGF0aWMgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3QmKTsK
ICAgICBzdGF0aWMgYm9vbCBjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJFZmZlY3QmKTsK
ICAgICAKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JTb3VyY2VHcmFwaGljKFNvdXJj
ZUdyYXBoaWMmKTsKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JGRUNvbG9yTWF0cml4
KGNvbnN0IEZFQ29sb3JNYXRyaXgmLCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiYp
OworICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9vdXRwdXRJbWFnZUJ1
ZmZlcjsKLSAgICBIYXNoTWFwPFJlZjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmV0YWluUHRyPENJ
RmlsdGVyPj4+IG1fY2lGaWx0ZXJTdG9yYWdlTWFwOwogICAgIFJldGFpblB0cjxDSUltYWdlPiBt
X291dHB1dEltYWdlOwotICAgIFJldGFpblB0cjxDSUNvbnRleHQ+IG1fY29udGV4dDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZS5tbQppbmRleCA5MzEzZjcxZTZlZmJhODQ2ZDY2NTUxZTEzMDkzOTE5
ZTA4M2RkODRjLi41MzA2YmYwZTQxYmRmY2M5Mjg3Y2JkYWI4MTFkM2M5OWQ2NTJkZGFiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCkBAIC0z
MCwxMiArMzAsMTQgQEAKIAogI2ltcG9ydCAiRmlsdGVyLmgiCiAjaW1wb3J0ICJGaWx0ZXJFZmZl
Y3QuaCIKKyNpbXBvcnQgIkZpbHRlck9wZXJhdGlvbi5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250
ZXh0Q0cuaCIKICNpbXBvcnQgIkltYWdlQnVmZmVyLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybUltYWdl
QnVmZmVyLmgiCiAjaW1wb3J0IDxDb3JlSW1hZ2UvQ0lDb250ZXh0Lmg+CiAjaW1wb3J0IDxDb3Jl
SW1hZ2UvQ0lGaWx0ZXIuaD4KICNpbXBvcnQgPENvcmVJbWFnZS9Db3JlSW1hZ2UuaD4KKyNpbXBv
cnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ2
LDEyICs0OCwzMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjp0cgogICAgIHJldHVybiBudWxscHRy
OwogfQogCitSZXRhaW5QdHI8Q0lDb250ZXh0PiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFn
ZTo6c2hhcmVkQ0lDb250ZXh0KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmV0YWlu
UHRyPENJQ29udGV4dD4+IGNpQ29udGV4dCA9IFtDSUNvbnRleHQgY29udGV4dFdpdGhPcHRpb25z
OiBAeyBrQ0lDb250ZXh0V29ya2luZ0NvbG9yU3BhY2U6IChfX2JyaWRnZSBpZClDR0NvbG9yU3Bh
Y2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQil9XTsKKyAgICByZXR1cm4gY2lDb250
ZXh0OworfQorCiBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzdXBwb3J0c0Nv
cmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKIHsKICAgICAvLyBGSVhNRTog
Y2hhbmdlIHJldHVybiB2YWx1ZSB0byB0cnVlIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQKICAg
ICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSkgeworICAgIGNhc2UgRmls
dGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIAorICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDogewor
ICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PEZFQ29sb3JNYXRyaXg+KGVmZmVjdCkudHlwZSgpKSB7
CisgICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKKyAgICAgICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6CisgICAgICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX0hVRVJPVEFURToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgfQorCiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDoKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNv
bXBvc2l0ZToKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29udm9sdmVNYXRyaXg6CkBA
IC02OSw3ICs5MSw2IEBAIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBv
cnRzQ29yZUltYWdlUmVuZGVyaW5nKEZpbHRlckVmZmVjdCYgZWZmCiAgICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OlRpbGU6CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlR1cmJ1bGVu
Y2U6CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTgzLDEyICsxMDQsMTIgQEAgdm9pZCBGaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6YXBwbHlFZmZlY3RzKEZpbHRlckVmZmVjdCYgbGFz
dEVmZmVjdCkKICAgICByZW5kZXJUb0ltYWdlQnVmZmVyKGxhc3RFZmZlY3QpOwogfQogCi1DSUlt
YWdlKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyhGaWx0
ZXJFZmZlY3QmIGVmZmVjdCkKK1JldGFpblB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKIHsKLSAg
ICBWZWN0b3I8Q0lJbWFnZSo+IGlucHV0SW1hZ2VzOworICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0lJ
bWFnZT4+IGlucHV0SW1hZ2VzOwogICAgIAogICAgIGZvciAoYXV0byBpbiA6IGVmZmVjdC5pbnB1
dEVmZmVjdHMoKSkgewotICAgICAgICBDSUltYWdlKiBpbnB1dEltYWdlID0gY29ubmVjdENJRmls
dGVycygqaW4pOworICAgICAgICBhdXRvIGlucHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKCpp
bik7CiAgICAgICAgIGlmICghaW5wdXRJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgICAgICBpbnB1dEltYWdlcy5hcHBlbmQoaW5wdXRJbWFnZSk7CkBAIC05OSwxMCArMTIw
LDE0IEBAIENJSW1hZ2UqIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lG
aWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0KQogICAgIGlmIChlZmZlY3QuYWJzb2x1dGVQYWlu
dFJlY3QoKS5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGVmZmVj
dC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIAotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhvc2UgZmlsdGVycyB1c2luZyBDSUZpbHRl
ciBzbyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgdmFsaWQgQ0lJbWFnZQogICAgIHN3aXRj
aCAoZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpKSB7Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkJsZW5kOgorICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFw
aGljOgorICAgICAgICByZXR1cm4gaW1hZ2VGb3JTb3VyY2VHcmFwaGljKGRvd25jYXN0PFNvdXJj
ZUdyYXBoaWM+KGVmZmVjdCkpOwogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1h
dHJpeDoKKyAgICAgICAgcmV0dXJuIGltYWdlRm9yRkVDb2xvck1hdHJpeChkb3duY2FzdDxGRUNv
bG9yTWF0cml4PihlZmZlY3QpLCBpbnB1dEltYWdlcyk7CisKKyAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRob3NlIGZpbHRlcnMgdXNpbmcgQ0lGaWx0ZXIgc28gdGhhdCB0aGUgZnVuY3Rpb24gcmV0
dXJucyBhIHZhbGlkIENJSW1hZ2UKKyAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6QmxlbmQ6
CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOgogICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb3NpdGU6CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkNvbnZvbHZlTWF0cml4OgpAQCAtMTIwLDEzICsxNDUsNzYgQEAgQ0lJbWFnZSogRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0
JiBlZmZlY3QpCiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlRpbGU6CiAgICAgY2FzZSBG
aWx0ZXJFZmZlY3Q6OlR5cGU6OlR1cmJ1bGVuY2U6CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OlNvdXJjZUFscGhhOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFw
aGljOgogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAorUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlOjppbWFnZUZvclNvdXJjZUdyYXBoaWMoU291cmNlR3JhcGhpYyYgZWZmZWN0
KQoreworICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGVmZmVjdC5maWx0ZXIoKS5zb3Vy
Y2VJbWFnZSgpOworICAgIGlmICghc291cmNlSW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIAorICAgIGlmIChpczxBY2NlbGVyYXRlZEltYWdlQnVmZmVyPigqc291cmNlSW1hZ2Up
KQorICAgICAgICByZXR1cm4gW0NJSW1hZ2UgaW1hZ2VXaXRoSU9TdXJmYWNlOmRvd25jYXN0PEFj
Y2VsZXJhdGVkSW1hZ2VCdWZmZXI+KCpzb3VyY2VJbWFnZSkuc3VyZmFjZSgpLnN1cmZhY2UoKV07
CisgICAgCisgICAgcmV0dXJuIFtDSUltYWdlIGltYWdlV2l0aENHSW1hZ2U6c291cmNlSW1hZ2Ut
PmNvcHlOYXRpdmVJbWFnZSgpLmdldCgpXTsKK30KKworUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjppbWFnZUZvckZFQ29sb3JNYXRyaXgoY29uc3QgRkVD
b2xvck1hdHJpeCYgZWZmZWN0LCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiYgaW5w
dXRJbWFnZXMpCit7CisgICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXRJbWFnZXMuYXQoMCk7CisK
KyAgICBhdXRvIHZhbHVlcyA9IEZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMoZWZmZWN0
LnZhbHVlcygpKTsKKyAgICBmbG9hdCBjb21wb25lbnRzWzldOworICAgIAorICAgIHN3aXRjaCAo
ZWZmZWN0LnR5cGUoKSkgeworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgor
ICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoY29tcG9u
ZW50cywgdmFsdWVzWzBdKTsKKyAgICAgICAgYnJlYWs7CisgICAgCisgICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfSFVFUk9UQVRFOgorICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVI
dWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7CisgICAgICAgIGJyZWFr
OworICAgIAorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKKyAgICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQTogLy8gRklYTUU6IEFkZCBM
dW1pbmFuY2UgdG8gQWxwaGEgSW1wbGVtZW50YXRpb24KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorICAgIAorICAgIGF1dG8gKmNvbG9yTWF0cml4RmlsdGVyID0gW0NJRmlsdGVyIGZp
bHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOworICAgIFtjb2xvck1hdHJpeEZpbHRlciBz
ZXRWYWx1ZTppbnB1dEltYWdlLmdldCgpIGZvcktleTprQ0lJbnB1dEltYWdlS2V5XTsKKyAgICAK
KyAgICBzd2l0Y2ggKGVmZmVjdC50eXBlKCkpIHsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9TQVRVUkFURToKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6IHsKKyAg
ICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpj
b21wb25lbnRzWzBdIFk6Y29tcG9uZW50c1sxXSBaOmNvbXBvbmVudHNbMl0gVzowXSBmb3JLZXk6
QCJpbnB1dFJWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltD
SVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25lbnRzWzNdIFk6Y29tcG9uZW50c1s0XSBaOmNvbXBv
bmVudHNbNV0gVzowXSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0
cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25lbnRzWzZdIFk6
Y29tcG9uZW50c1s3XSBaOmNvbXBvbmVudHNbOF0gVzowXSBmb3JLZXk6QCJpbnB1dEJWZWN0b3Ii
XTsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JX
aXRoWDowICAgICAgICAgICAgIFk6MCAgICAgICAgICAgICBaOjAgICAgICAgICAgICAgVzoxXSBm
b3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZh
bHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowICAgICAgICAgICAgIFk6MCAgICAgICAgICAgICBa
OjAgICAgICAgICAgICAgVzowXSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDogeworICAg
ICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZh
bHVlc1swXSAgWTp2YWx1ZXNbMV0gIFo6dmFsdWVzWzJdICBXOnZhbHVlc1szXV0gIGZvcktleTpA
ImlucHV0UlZlY3RvciJdOworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJ
VmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1s1XSAgWTp2YWx1ZXNbNl0gIFo6dmFsdWVzWzddICBX
OnZhbHVlc1s4XV0gIGZvcktleTpAImlucHV0R1ZlY3RvciJdOworICAgICAgICBbY29sb3JNYXRy
aXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1sxMF0gWTp2YWx1
ZXNbMTFdIFo6dmFsdWVzWzEyXSBXOnZhbHVlc1sxM11dIGZvcktleTpAImlucHV0QlZlY3RvciJd
OworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3Rvcldp
dGhYOnZhbHVlc1sxNV0gWTp2YWx1ZXNbMTZdIFo6dmFsdWVzWzE3XSBXOnZhbHVlc1sxOF1dIGZv
cktleTpAImlucHV0QVZlY3RvciJdOworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFs
dWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1s0XSAgWTp2YWx1ZXNbOV0gIFo6dmFsdWVz
WzE0XSBXOnZhbHVlc1sxOV1dIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJdOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBI
QToKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIGNvbG9yTWF0cml4RmlsdGVyLm91dHB1dEltYWdl
OworfQorCiBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjYW5SZW5kZXJVc2lu
Z0NJRmlsdGVycyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKIHsKICAgICBpZiAoIXN1cHBvcnRzQ29y
ZUltYWdlUmVuZGVyaW5nKGVmZmVjdCkpCkBAIC0xNDEsNiArMjI5LDcgQEAgYm9vbCBGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMoRmlsdGVyRWZm
ZWN0JiBlZmZlY3QKIAogSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
OjpvdXRwdXQoKSBjb25zdAogeworICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0g
PDwgIlJlbmRlcmluZyAiIDw8IHRoaXMgPDwgIiB1c2luZyBDb3JlSW1hZ2VcbiIpOwogICAgIHJl
dHVybiBtX291dHB1dEltYWdlQnVmZmVyLmdldCgpOwogfQogICAgIApAQCAtMTYwLDggKzI0OSw3
IEBAIHZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnJlbmRlclRvSW1hZ2VCdWZm
ZXIoRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBh
dXRvJiBzdXJmYWNlID0gZG93bmNhc3Q8QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcj4oKm1fb3V0cHV0
SW1hZ2VCdWZmZXIpLnN1cmZhY2UoKTsKLSAgICBDR0NvbG9yU3BhY2VSZWYgcmVzdWx0Q29sb3JT
cGFjZSA9IGNhY2hlZENHQ29sb3JTcGFjZShsYXN0RWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKSk7
Ci0gICAgW21fY29udGV4dC5nZXQoKSByZW5kZXI6IG1fb3V0cHV0SW1hZ2UuZ2V0KCkgdG9JT1N1
cmZhY2U6IHN1cmZhY2Uuc3VyZmFjZSgpIGJvdW5kczpkZXN0UmVjdChsYXN0RWZmZWN0KSBjb2xv
clNwYWNlOnJlc3VsdENvbG9yU3BhY2VdOworICAgIFtzaGFyZWRDSUNvbnRleHQoKS5nZXQoKSBy
ZW5kZXI6IG1fb3V0cHV0SW1hZ2UuZ2V0KCkgdG9JT1N1cmZhY2U6IHN1cmZhY2Uuc3VyZmFjZSgp
IGJvdW5kczpkZXN0UmVjdChsYXN0RWZmZWN0KSBjb2xvclNwYWNlOmNhY2hlZENHQ29sb3JTcGFj
ZShsYXN0RWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKSldOwogfQogICAgIAogRmxvYXRSZWN0IEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZlY3Qm
IGxhc3RFZmZlY3QpIGNvbnN0CkBAIC0xNzUsMTYgKzI2MywxMiBAQCBGbG9hdFJlY3QgRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYgbGFz
dEVmZmVjdAogdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y2xlYXJSZXN1bHQo
KQogewogICAgIG1fb3V0cHV0SW1hZ2VCdWZmZXIucmVzZXQoKTsKLSAgICBtX2NpRmlsdGVyU3Rv
cmFnZU1hcC5jbGVhcigpOwogICAgIG1fb3V0cHV0SW1hZ2UgPSBudWxscHRyOwotICAgIG1fY29u
dGV4dCA9IG51bGxwdHI7CiB9CiAKIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpGaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZSgpCiAgICAgOiBGaWx0ZXJFZmZlY3RSZW5kZXJlcigp
CiB7Ci0gICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBjYWNoZWRDR0NvbG9yU3BhY2Uo
Q29sb3JTcGFjZTo6U1JHQik7Ci0gICAgbV9jb250ZXh0ID0gW0NJQ29udGV4dCBjb250ZXh0V2l0
aE9wdGlvbnM6IEB7IGtDSUNvbnRleHRXb3JraW5nQ29sb3JTcGFjZTogKF9fYnJpZGdlIGlkKWNv
bG9yU3BhY2V9XTsKIH0KICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4
LmgKaW5kZXggMDkwZTY4MmU4YTc1ZTA1YjAyNjVlY2YyZmYxYmIzY2U2MmM0MDY2OS4uN2M2ZGM1
N2ZiYTIxYmI2MzE1YzVhNzZjMDBlMDJiMWZhYmVlYTBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmgKQEAg
LTkzLDMgKzkzLDcgQEAgaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90
YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXgpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVj
dCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0gV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDsgfQorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FTkQoKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5kZXggNzU2MmZkZDYwNTg2N2Y2Mjhj
YTMyYzMxNWM5ZDM3MjkwMzc2ZjM4OC4uN2UxM2NmZjY2M2RhYmYyODM4MzZhYjk3YjYyNjNkZWUx
MTRmNDJkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtNzksNyArNzksNiBAQCBGbG9hdFBvaW50
IEZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoRmxvYXRQb2ludCB1
c2VyU3BhY2VQb2ludAogCiBJbnRSZWN0IEZpbHRlckVmZmVjdDo6cmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiBlZmZlY3RSZWN0KSBjb25zdAogewotICAgIEFT
U0VSVChoYXNSZXN1bHQoKSk7CiAgICAgSW50UG9pbnQgbG9jYXRpb24gPSBtX2Fic29sdXRlUGFp
bnRSZWN0LmxvY2F0aW9uKCk7CiAgICAgbG9jYXRpb24ubW92ZUJ5KC1lZmZlY3RSZWN0LmxvY2F0
aW9uKCkpOwogICAgIHJldHVybiBJbnRSZWN0KGxvY2F0aW9uLCBtX2Fic29sdXRlUGFpbnRSZWN0
LnNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAppbmRleCAxMWFjNjBhYTY0MTE3NDFhYjEzNjQ2ZmNkMTZh
MDU0YjM5YzJmYzdjLi5lZWEwYWQyZjg1Mjk4ZmU5YTZhMzkxM2IxZmFkNTcwNzVhOTJlZTI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmgKQEAgLTE1NSw3ICsxNTUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgRmxv
YXRQb2ludCBtYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9hdFBvaW50KSBjb25zdDsK
ICAgICAKLSAgICBUeXBlIGZpbHRlckVmZmVjdENsYXNzVHlwZSgpIHsgcmV0dXJuIG1fZmlsdGVy
RWZmZWN0Q2xhc3NUeXBlOyB9CisgICAgVHlwZSBmaWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSBjb25z
dCB7IHJldHVybiBtX2ZpbHRlckVmZmVjdENsYXNzVHlwZTsgfQogCiAgICAgRmlsdGVyJiBmaWx0
ZXIoKSB7IHJldHVybiBtX2ZpbHRlcjsgfQogICAgIGNvbnN0IEZpbHRlciYgZmlsdGVyKCkgY29u
c3QgeyByZXR1cm4gbV9maWx0ZXI7IH0KQEAgLTE3MCw2ICsxNzAsMTQgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBp
biwgY29uc3QgaW50KSB7IGluLT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5n
Q29sb3JTcGFjZSk7IH0KICAgICB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoQ29sb3JT
cGFjZSk7CisgICAgCisgICAgc3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhj
b25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCisgICAgeworICAgICAgICBWZWN0b3I8ZmxvYXQ+
IG5vcm1hbGl6ZWRWYWx1ZXModmFsdWVzLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVl
c1tpXSA9IG5vcm1hbGl6ZWRGbG9hdCh2YWx1ZXNbaV0pOworICAgICAgICByZXR1cm4gbm9ybWFs
aXplZFZhbHVlczsKKyAgICB9CiAKIHByb3RlY3RlZDoKICAgICBGaWx0ZXJFZmZlY3QoRmlsdGVy
JiwgVHlwZSk7CkBAIC0xODgsMTQgKzE5Niw2IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGZvcmNl
VmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7CiAKICAgICB2b2lkIGNsaXBBYnNvbHV0ZVBhaW50
UmVjdCgpOwotICAgIAotICAgIHN0YXRpYyBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRGbG9hdHMo
Y29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQotICAgIHsKLSAgICAgICAgVmVjdG9yPGZsb2F0
PiBub3JtYWxpemVkVmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG5vcm1hbGl6ZWRWYWx1
ZXNbaV0gPSBub3JtYWxpemVkRmxvYXQodmFsdWVzW2ldKTsKLSAgICAgICAgcmV0dXJuIG5vcm1h
bGl6ZWRWYWx1ZXM7Ci0gICAgfQogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCmluZGV4IDBmMDFkZGEwNmNlMDI3
MTM1YjcxY2E1Y2MwMzQzNzVlMTkxOTY0NTYuLmY2NzNjZTRjN2YyOTNhYTE5MTM1ZjljNzdlNjBj
MjI3NzE2MTM5OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCkBAIC01MCw0ICs1MCw5IEBAIHByaXZhdGU6
CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lO
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWMpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdl
YkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0
Q2xhc3NUeXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGlj
OyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKwogI2VuZGlmIC8vIFNvdXJjZUdy
YXBoaWNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcAppbmRleCBhZmViOTI5
NTUzNTM0Mjc4MDJjZTI5MDYwN2RhMWE4OTdjZjhjYTIwLi5kMmE4YTg5ZTNlMDRlNGM1ZDg5ZmJl
ZDMwNTYxNjgyNTBjOGJkOTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Q1NTRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNw
cApAQCAtMzA0LDcgKzMwNCw4IEBAIGJvb2wgQ1NTRmlsdGVyOjpidWlsZChSZW5kZXJFbGVtZW50
JiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9uCiAKICAgICBzZXRN
YXhFZmZlY3RSZWN0cyhtX3NvdXJjZURyYXdpbmdSZWdpb24pOwogI2lmIFVTRShDT1JFX0lNQUdF
KQotICAgIG1fZmlsdGVyUmVuZGVyZXIgPSBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dHJ5Q3JlYXRl
KHJlbmRlcmVyLnNldHRpbmdzKCkuY29yZUltYWdlQWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJFbmFi
bGVkKCksIG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCkpOworICAgIGlmICghbV9maWx0ZXJSZW5kZXJl
cikKKyAgICAgICAgbV9maWx0ZXJSZW5kZXJlciA9IEZpbHRlckVmZmVjdFJlbmRlcmVyOjp0cnlD
cmVhdGUocmVuZGVyZXIuc2V0dGluZ3MoKS5jb3JlSW1hZ2VBY2NlbGVyYXRlZEZpbHRlclJlbmRl
ckVuYWJsZWQoKSwgbV9lZmZlY3RzLmxhc3QoKS5nZXQoKSk7CiAjZW5kaWYKICAgICByZXR1cm4g
dHJ1ZTsKIH0KQEAgLTMzNiw3ICszMzcsOCBAQCB2b2lkIENTU0ZpbHRlcjo6YWxsb2NhdGVCYWNr
aW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRleAogICAg
ICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZW5k
ZXJpbmdNb2RlKCksICZ0YXJnZXRDb250ZXh0LCBmaWx0ZXJTY2FsZSgpKSk7CiAjZWxzZQogICAg
ICAgICBVTlVTRURfUEFSQU0odGFyZ2V0Q29udGV4dCk7Ci0gICAgICAgIHNldFNvdXJjZUltYWdl
KEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgZmlsdGVy
U2NhbGUoKSkpOworICAgICAgICBSZW5kZXJpbmdNb2RlIG1vZGUgPSBtX2ZpbHRlclJlbmRlcmVy
ID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiByZW5kZXJpbmdNb2RlKCk7CisgICAgICAg
IHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIG1vZGUsIGZp
bHRlclNjYWxlKCkpKTsKICNlbmRpZgogICAgIH0KICAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNo
ZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IGQwNDQ3YzE5OTg0MDg0OTQxY2MxYzFkMTRjZWJkMjA1ODUwZjNm
NzUuLjQ1ZGRkODQzOTcyMGQ1YjNiZGIzMTMxZWJkYWJjN2RkYjNjMTJkNjcgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOSBAQAorMjAyMC0wOS0wMSAgRnJhbmsgWWFuZyAgPGd1b3dlaV95YW5nQGFwcGxlLmNv
bT4KKworICAgICAgICBDb3JlSW1hZ2UgSW1wbGVtZW50YXRpb24gb2YgU291cmNlR3JhcGhpYyBh
bmQgc2F0dXJhdGUoKSwgaHVlLXJvdGF0ZSgpLCBncmF5c2NhbGUoKSBhbmQgc2VwaWEoKQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNjczCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIsIFNpbW9uIEZyYXNlci4KKworICAgICAgICAq
IGNzczMvZmlsdGVycy9lZmZlY3QtZ3JheXNjYWxlLXNxdWFyZS1leHBlY3RlZC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBjc3MzL2ZpbHRlcnMvZWZmZWN0LWdyYXlzY2FsZS1zcXVhcmUuaHRtbDog
QWRkZWQuCisgICAgICAgICogY3NzMy9maWx0ZXJzL2VmZmVjdC1odWUtcm90YXRlLXNxdWFyZS1l
eHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBjc3MzL2ZpbHRlcnMvZWZmZWN0LWh1ZS1y
b3RhdGUtc3F1YXJlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNzczMvZmlsdGVycy9lZmZlY3Qt
c2F0dXJhdGUtc3F1YXJlLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNzczMvZmls
dGVycy9lZmZlY3Qtc2F0dXJhdGUtc3F1YXJlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNzczMv
ZmlsdGVycy9lZmZlY3Qtc2VwaWEtc3F1YXJlLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGNzczMvZmlsdGVycy9lZmZlY3Qtc2VwaWEtc3F1YXJlLmh0bWw6IEFkZGVkLgorCiAyMDIw
LTA4LTI4ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJF
R1JFU1NJT04gKHIyNjM1MDYpOiBzY2FsZSB0cmFuc2Zvcm0gdHJhbnNpdGlvbnMgd29uJ3Qgb3Zl
cnNob290CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LWdyYXlz
Y2FsZS1zcXVhcmUtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZl
Y3QtZ3JheXNjYWxlLXNxdWFyZS1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3MjgxNzIyN2Rk
MDViYjY2NTFmYTIyZGVjNTVlMmIzMjBmNjBhNjgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LWdyYXlzY2FsZS1zcXVhcmUtZXhwZWN0ZWQuaHRtbApA
QCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRp
dGxlPkNTUyBGaWx0ZXIgVGVzdDogVGVzdCBmb3IgU2F0dXJhdGUgc2hvcnQgaGFuZDwvdGl0bGU+
CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgICBkaXYgeworICAgICAgICB3aWR0aDog
NjAwcHg7CisgICAgICAgIGhlaWdodDogNjAwcHg7IAorICAgICAgICBiYWNrZ3JvdW5kOiByZ2Io
MTU0LCAyNywgMjcpOworICAgIH0KKworICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAg
ICA8cD5Zb3Ugc2hvdWxkIHNlZSBhIGdyZWVuIHJlY3RhbmdsZS48L3A+CisgICAgPGRpdj48L2Rp
dj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9maWx0
ZXJzL2VmZmVjdC1ncmF5c2NhbGUtc3F1YXJlLmh0bWwgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRl
cnMvZWZmZWN0LWdyYXlzY2FsZS1zcXVhcmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNmE0ZDM3Y2JlYjQ0
ZTY4NDNiOWMxOGVhZTI1ZDRkMDMzOTI3YjUyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1ncmF5c2NhbGUtc3F1YXJlLmh0bWwKQEAgLTAsMCArMSwy
MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5DU1MgRmls
dGVyIFRlc3Q6IFRlc3QgZm9yIFNhdHVyYXRlIHNob3J0IGhhbmQ8L3RpdGxlPgorICAgIDxzdHls
ZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgZGl2IHsKKyAgICAgICAgd2lkdGg6IDYwMHB4OworICAg
ICAgICBoZWlnaHQ6IDYwMHB4OyAKKyAgICAgICAgYmFja2dyb3VuZDogcmVkOworICAgICAgICBm
aWx0ZXI6IGdyYXlzY2FsZSg1MCUpOworICAgIH0KKworICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8
Ym9keT4KKyAgICA8cD5Zb3Ugc2hvdWxkIHNlZSBhIGdyZWVuIHJlY3RhbmdsZS48L3A+CisgICAg
PGRpdj48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Y3NzMy9maWx0ZXJzL2VmZmVjdC1odWUtcm90YXRlLXNxdWFyZS1leHBlY3RlZC5odG1sIGIvTGF5
b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1odWUtcm90YXRlLXNxdWFyZS1leHBlY3RlZC5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjkwN2JiNDNiZTNlMTE3YTBhOWZiYWMxMTkzYmZhMTI3OGYyOTZjMWQK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LWh1ZS1y
b3RhdGUtc3F1YXJlLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5DU1MgRmlsdGVyIFRlc3Q6IFRlc3QgZm9y
IFNhdHVyYXRlIHNob3J0IGhhbmQ8L3RpdGxlPgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+
CisgICAgZGl2IHsKKyAgICAgICAgd2lkdGg6IDYwMHB4OworICAgICAgICBoZWlnaHQ6IDYwMHB4
OyAKKyAgICAgICAgYmFja2dyb3VuZDogcmdiKDAsIDkxLCAwKTsKKyAgICB9CisKKyAgICA8L3N0
eWxlPgorPC9oZWFkPgorPGJvZHk+CisgICAgPHA+WW91IHNob3VsZCBzZWUgYSBncmVlbiByZWN0
YW5nbGUuPC9wPgorICAgIDxkaXY+PC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3QtaHVlLXJvdGF0ZS1zcXVhcmUuaHRt
bCBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3QtaHVlLXJvdGF0ZS1zcXVhcmUuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yOTg4Njg5MzY3ZTVlOWYxYjY1NzZlZWI2ODczNzg0Y2Y2OWE1YjM4Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1odWUtcm90
YXRlLXNxdWFyZS5odG1sCkBAIC0wLDAgKzEsMjAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKyAgICA8dGl0bGU+Q1NTIEZpbHRlciBUZXN0OiBUZXN0IGZvciBTYXR1cmF0ZSBz
aG9ydCBoYW5kPC90aXRsZT4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgIGRpdiB7
CisgICAgICAgIHdpZHRoOiA2MDBweDsKKyAgICAgICAgaGVpZ2h0OiA2MDBweDsgCisgICAgICAg
IGJhY2tncm91bmQ6IHJlZDsKKyAgICAgICAgZmlsdGVyOiBodWUtcm90YXRlKDkwZGVnKTsKKyAg
ICB9CisKKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisgICAgPHA+WW91IHNob3VsZCBz
ZWUgYSBncmVlbiByZWN0YW5nbGUuPC9wPgorICAgIDxkaXY+PC9kaXY+CisKKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3Qtc2F0dXJh
dGUtc3F1YXJlLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0
LXNhdHVyYXRlLXNxdWFyZS1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3MjgxNzIyN2RkMDVi
YjY2NTFmYTIyZGVjNTVlMmIzMjBmNjBhNjgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LXNhdHVyYXRlLXNxdWFyZS1leHBlY3RlZC5odG1sCkBAIC0w
LDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8dGl0bGU+
Q1NTIEZpbHRlciBUZXN0OiBUZXN0IGZvciBTYXR1cmF0ZSBzaG9ydCBoYW5kPC90aXRsZT4KKyAg
ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgIGRpdiB7CisgICAgICAgIHdpZHRoOiA2MDBw
eDsKKyAgICAgICAgaGVpZ2h0OiA2MDBweDsgCisgICAgICAgIGJhY2tncm91bmQ6IHJnYigxNTQs
IDI3LCAyNyk7CisgICAgfQorCisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxw
PllvdSBzaG91bGQgc2VlIGEgZ3JlZW4gcmVjdGFuZ2xlLjwvcD4KKyAgICA8ZGl2PjwvZGl2Pgor
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMv
ZWZmZWN0LXNhdHVyYXRlLXNxdWFyZS5odG1sIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2Vm
ZmVjdC1zYXR1cmF0ZS1zcXVhcmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NzBjYjI2YWExYjNiNDJmNWRj
NDg3NGU5MjhhNWU2MmVjYzdlNDE5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3Nz
My9maWx0ZXJzL2VmZmVjdC1zYXR1cmF0ZS1zcXVhcmUuaHRtbApAQCAtMCwwICsxLDIwIEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPkNTUyBGaWx0ZXIgVGVz
dDogVGVzdCBmb3IgU2F0dXJhdGUgc2hvcnQgaGFuZDwvdGl0bGU+CisgICAgPHN0eWxlIHR5cGU9
InRleHQvY3NzIj4KKyAgICBkaXYgeworICAgICAgICB3aWR0aDogNjAwcHg7CisgICAgICAgIGhl
aWdodDogNjAwcHg7IAorICAgICAgICBiYWNrZ3JvdW5kOiByZWQ7CisgICAgICAgIGZpbHRlcjog
c2F0dXJhdGUoNTAlKTsKKyAgICB9CisKKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cisg
ICAgPHA+WW91IHNob3VsZCBzZWUgYSBncmVlbiByZWN0YW5nbGUuPC9wPgorICAgIDxkaXY+PC9k
aXY+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMvZmls
dGVycy9lZmZlY3Qtc2VwaWEtc3F1YXJlLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9jc3Mz
L2ZpbHRlcnMvZWZmZWN0LXNlcGlhLXNxdWFyZS1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0
ZGNhMjhlM2U2MzdlYzQ1YjJjNzg3ZWJhOTA4MTVjMjlkMWIyZmQKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LXNlcGlhLXNxdWFyZS1leHBlY3RlZC5o
dG1sCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAg
ICA8dGl0bGU+Q1NTIEZpbHRlciBUZXN0OiBUZXN0IGZvciBTYXR1cmF0ZSBzaG9ydCBoYW5kPC90
aXRsZT4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgIGRpdiB7CisgICAgICAgIHdp
ZHRoOiA2MDBweDsKKyAgICAgICAgaGVpZ2h0OiA2MDBweDsgCisgICAgICAgIGJhY2tncm91bmQ6
IHJnYigyNCwgMjEsIDE0NCk7CisgICAgfQorCisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5
PiAKKyAgICA8cD5Zb3Ugc2hvdWxkIHNlZSBhIGdyZWVuIHJlY3RhbmdsZS48L3A+CisgICAgPGRp
dj48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3Nz
My9maWx0ZXJzL2VmZmVjdC1zZXBpYS1zcXVhcmUuaHRtbCBiL0xheW91dFRlc3RzL2NzczMvZmls
dGVycy9lZmZlY3Qtc2VwaWEtc3F1YXJlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjg5YWNhNTc4ODc3YWM4
MzlmZmZmZjE3NTEwNDRlNjFmMmY2MmFiNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2NzczMvZmlsdGVycy9lZmZlY3Qtc2VwaWEtc3F1YXJlLmh0bWwKQEAgLTAsMCArMSwyMCBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5DU1MgRmlsdGVyIFRl
c3Q6IFRlc3QgZm9yIFNhdHVyYXRlIHNob3J0IGhhbmQ8L3RpdGxlPgorICAgIDxzdHlsZSB0eXBl
PSJ0ZXh0L2NzcyI+CisgICAgZGl2IHsKKyAgICAgICAgd2lkdGg6IDYwMHB4OworICAgICAgICBo
ZWlnaHQ6IDYwMHB4OyAKKyAgICAgICAgYmFja2dyb3VuZDogYmx1ZTsKKyAgICAgICAgZmlsdGVy
OiBzZXBpYSg1MCUpOworICAgIH0KKworICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAg
ICA8cD5Zb3Ugc2hvdWxkIHNlZSBhIGdyZWVuIHJlY3RhbmdsZS48L3A+CisgICAgPGRpdj48L2Rp
dj4KKworPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407837</attachid>
            <date>2020-09-02 17:23:08 -0700</date>
            <delta_ts>2020-09-03 14:04:12 -0700</delta_ts>
            <desc>Ready for Commit</desc>
            <filename>bug-213673-20200902172307.patch</filename>
            <type>text/plain</type>
            <size>29488</size>
            <attacher>frankhome61</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MjgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWMxZjViYzkyNTFjNDRm
ZTM5OTQ1YmJlNjkzMzUzNTNhMGFiZmJmZC4uYjE2M2Y4NTAyYmM2NmFjOWRhNzk4YWU3NGZhYmJm
MmRhMTc2YTcyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDIwLTA5LTAyICBGcmFu
ayBZYW5nICA8Z3Vvd2VpX3lhbmdAYXBwbGUuY29tPgorCisgICAgICAgIENvcmVJbWFnZSBJbXBs
ZW1lbnRhdGlvbiBvZiBTb3VyY2VHcmFwaGljIGFuZCBzYXR1cmF0ZSgpLCBodWUtcm90YXRlKCks
IGdyYXlzY2FsZSgpIGFuZCBzZXBpYSgpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTM2NzMKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ciwgU2ltb24gRnJhc2VyLgorCisgICAgICAgIFRlc3RzOiBjc3MzL2ZpbHRlcnMvZWZmZWN0LWdy
YXlzY2FsZS1zcXVhcmUuaHRtbAorICAgICAgICAgICAgICAgY3NzMy9maWx0ZXJzL2VmZmVjdC1o
dWUtcm90YXRlLXNxdWFyZS5odG1sCisgICAgICAgICAgICAgICBjc3MzL2ZpbHRlcnMvZWZmZWN0
LXNhdHVyYXRlLXNxdWFyZS5odG1sCisgICAgICAgICAgICAgICBjc3MzL2ZpbHRlcnMvZWZmZWN0
LXNlcGlhLXNxdWFyZS5odG1sCisKKyAgICAgICAgQWRkZWQgQ29yZUltYWdlIGltcGxlbWVudGF0
aW9uIG9mIFNvdXJjZUdyYXBoaWMgYW5kIHBhcnRpYWwgb2YgRkVDb2xvck1hdHJpeCwgCisgICAg
ICAgIHdoaWNoIGlzIHVzZWQgdG8gaW1wbGVtZW50IHNlcGlhKCksIGdyYXlzY2FsZSgpIGh1ZS1y
b3RhdGUoKSBhbmQgc2F0dXJhdGUoKS4KKyAgICAgICAgQWxzbyBhZGRlZCBDSUZpbHRlciBjYWNo
aW5nLCBieSBzdG9yaW5nIENJRmlsdGVycyBpbiBhIGhhc2ggbWFwLCB3aGVyZSB0aGUga2V5IAor
ICAgICAgICBpcyB0aGUgbGV2ZWwgb2YgdHJhdmVyc2FsIChhbiBpbnRlZ2VyKS4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZS5oOgorICAgICAgICAgICAgSW1wb3J0ZWQgRkVDb2xvck1hdHJpeC5oIGFuZCBTb3VyY2VH
cmFwaGljLmg7IGFkZGVkIGZ1bmN0aW9uIGdldENJQ29udGV4dCgpCisgICAgICAgICAgICB0aGF0
IHJldHVybnMgYSBzdGF0aWMgY29weSBvZiBDSUNvbnRleHQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmdldENJQ29udGV4
dCk6IENyZWF0aW5nIGEgCisgICAgICAgICAgICBDSUNvbnRleHQgaXMgZXhwZW5zaXZlLiBJbnN0
ZWFkIG9mIGNyZWF0aW5nIGEgQ0lDb250ZXh0IG9uIGVhY2ggZnJhbWUKKyAgICAgICAgICAgIHVw
ZGF0ZSwgd2UganVzdCB1c2UgYSBzdGF0aWMgc2luZ2xldG9uIG9uIGV2ZXJ5IGRyYXcKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzdXBwb3J0c0NvcmVJ
bWFnZVJlbmRlcmluZyk6CisgICAgICAgICAgICB0aGUgZnVuY3Rpb24gbm93IHJldHVybnMgdHJ1
ZSBpZiB0aGUgZmlsdGVyIGNoYWluIGNvbnRhaW5zIFNvdXJjZUdyYXBoaWMKKyAgICAgICAgICAg
IGFuZCBGRUNvbG9yTWF0cml4IG9mIFRZUEVfTUFUUklYLCBUWVBFX1NBVFVSQVRFIGFuZCBUWVBF
X0hVRVJPVEFURQorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U6OmNvbm5lY3RDSUZpbHRlcnMpOgorICAgICAgICAgICAgTWFkZSBzbGlnaHQgY2hhbmdlcyB0
byB3cmFwIE9iai1DIHBvaW50ZXJzIGluIFJldGFpblB0cgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmltYWdlRm9yU291cmNlR3JhcGhpYyk6CisgICAg
ICAgICAgICBVc2UgdGhlIHNvdXJjZSBpbWFnZSB0byBjcmVhdGUgYSBDSUltYWdlIGFuZCByZXR1
cm4gaXQuIElmIHRoZSBzb3VyY2UgaW1hZ2UgCisgICAgICAgICAgICBpcyBiYWNrZWQgYnkgSU9T
dXJmYWNlLCB3ZSBjcmVhdGUgYSBDSUltYWdlIGRpcmVjdGx5IGZyb20gdGhlIElPU3VyZmFjZTsg
b3RoZXJ3aXNlCisgICAgICAgICAgICB3ZSBjcmVhdGUgYSBDSUltYWdlIGJ5IGdldHRpbmcgdGhl
IE5hdGl2ZUltYWdlUHRyIGZyb20gc291cmNlIGltYWdlLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmltYWdlRm9yRkVDb2xvck1hdHJpeCk6CisgICAg
ICAgICAgICBCYXNlZCBvbiB0aGUgdHlwZSBvZiB0aGUgbWF0cml4IGFuZCBpbnB1dCBwYXJhbWV0
ZXIsIAorICAgICAgICAgICAgY3JlYXRlIGRpZmZlcmVudCB0eXBlcyBvZiBDSUNvbG9yTWF0cml4
IGZpbGVycyB0aGF0IGFyZSB1c2VkIHRvIGltcGxlbWVudCAKKyAgICAgICAgICAgIHNlcGlhLCBn
cmF5c2NhbGUsIGh1ZS1yb3RhdGUsIHNhdHVyYXRlCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6b3V0cHV0IGNvbnN0KToKKyAgICAgICAgICAgIEFkZGVk
IGEgbG9nZ2luZyBsaW5lCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZTo6cmVuZGVyVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgICAgICBNaW5vciByZWZhY3Rv
cnMgCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y2xl
YXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaDoKKyAgICAgICAgKGlzVHlwZSk6IGFkZGVk
IFNQRUNJQUxJWkVfVFlQRV9UUkFJVFMgc28gdGhhdCB3ZSBjYW4gZG93bmNhc3QgdG8gRkVDb2xv
ck1hdHJpeAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dEltYWdlRGF0YSBjb25zdCk6IHJlbW92ZWQgCisgICAgICAgICAgICBBU1NFUlQoaGFzUmVz
dWx0KCkpOyBmcm9tIHRoZSBmdW5jdGlvbiwgYmVjYXVzZSBDb3JlSW1hZ2UgcGF0aCB3b3VsZG4n
dCBjcmVhdGUgCisgICAgICAgICAgICBpbWFnZSBidWZmZXJzIGluc2lkZSBGaWx0ZXJFZmZlY3Qs
IGJ1dCBDSSBwYXRoIHN0aWxsIG5lZWRzIHRvIGNvbnN1bHQgdGhpcyBmdW5jdGlvbgorICAgICAg
ICAgICAgdG8gb2J0YWluIGdlb21ldHJ5IGluZm8KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUgY29uc3QpOiBNYWRlIHRoZSBmdW5jdGlvbiBhIGNvbnN0
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om5vcm1hbGl6ZWRGbG9hdHMpOiBDaGFu
Z2VkIHRoaXMgZnVuY3Rpb24gdG8gcHVibGljIHNpbmNlIGl0IGlzIAorICAgICAgICAgICAgY29u
c3VsdGVkIGluIEZpbHRlckVmZmVjdENvcmVJbWFnZVJlbmRlcmVyLiAKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaDoKKyAgICAgICAg
KGlzVHlwZSk6IGFkZGVkIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFMgc28gdGhhdCB3ZSBjYW4gZG93
bmNhc3QgdG8gU291cmNlR3JhcGhpYworICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZCk6IAorICAgICAgICAgICAgQ2hl
Y2tzIHdoZXRoZXIgbV9maWx0ZXJSZW5kZXJlciBpcyBhbHJlYWR5IGNyZWF0ZWQsIG5vIG5lZWQg
dG8gcmUtY3JlYXRlIGlmIHRoZSBwb2ludGVyIAorICAgICAgICAgICAgaXMgbm9uLW51bGwKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCk6
IAorICAgICAgICAgICAgSWYgd2UgYXJlIHVzaW5nIG1fZmlsdGVyUmVuZGVyZXIsIHdoaWNoIGlz
IGN1cnJlbnRseSB1c2luZyBDb3JlSW1hZ2UgYW5kIHJlbGllcyBvbiAKKyAgICAgICAgICAgIElP
U3VyZmFjZXMsIHdlIGFzayBzb3VyY2UgaW1hZ2UgdG8gdXNlIElPU3VyZmFjZSBmb3IgcGVyZm9y
bWFuY2UgY29uY2VybnMuCisKIDIwMjAtMDgtMjggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIGFkb3B0ZWQgbm9kZSBmcm9tIFRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZS5oCmluZGV4IDgxZWM1N2U2OGIxOTJlYzgzNmE3YmQxOGEyOGFlM2RlNzM1NDFkMTEuLjRm
MWU3MzFiOGEyMDNhZjAyOGNhYjJiNDU2Yzg0YjlhMjAxODlmNDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVp
bWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oCkBAIC0yNyw3ICsyNyw5IEBACiAK
ICNpZiBVU0UoQ09SRV9JTUFHRSkKIAorI2ltcG9ydCAiRkVDb2xvck1hdHJpeC5oIgogI2ltcG9y
dCAiRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIKKyNpbXBvcnQgIlNvdXJjZUdyYXBoaWMuaCIKICNp
bXBvcnQgPHd0Zi9IYXNoTWFwLmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQyLDI1
ICs0NCwyNSBAQCBjbGFzcyBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZSA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3RSZW5kZXJlciB7CiAgICAgCiBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZT4gdHJ5Q3JlYXRlKEZpbHRlckVm
ZmVjdCYpOwotICAgIAorICAgIFJldGFpblB0cjxDSUNvbnRleHQ+IHNoYXJlZENJQ29udGV4dCgp
OwogICAgIHZvaWQgYXBwbHlFZmZlY3RzKEZpbHRlckVmZmVjdCYpIGZpbmFsOwogICAgIGJvb2wg
aGFzUmVzdWx0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9vdXRwdXRJbWFnZTsgfQogICAgIElt
YWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdCBmaW5hbDsKICAgICBGbG9hdFJlY3QgZGVzdFJlY3Qo
Y29uc3QgRmlsdGVyRWZmZWN0JikgY29uc3QgZmluYWw7CiAgICAgdm9pZCBjbGVhclJlc3VsdCgp
IGZpbmFsOwotICAgIAogICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCk7CiAgICAg
CiBwcml2YXRlOgotICAgIENJSW1hZ2UqIGNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7
CisgICAgUmV0YWluUHRyPENJSW1hZ2U+IGNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7
CiAgICAgdm9pZCByZW5kZXJUb0ltYWdlQnVmZmVyKEZpbHRlckVmZmVjdCYpIGZpbmFsOwogICAg
IHN0YXRpYyBib29sIHN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKEZpbHRlckVmZmVjdCYpOwog
ICAgIHN0YXRpYyBib29sIGNhblJlbmRlclVzaW5nQ0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYpOwog
ICAgIAorICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFnZUZvclNvdXJjZUdyYXBoaWMoU291cmNl
R3JhcGhpYyYpOworICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFnZUZvckZFQ29sb3JNYXRyaXgo
Y29uc3QgRkVDb2xvck1hdHJpeCYsIGNvbnN0IFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+Jik7
CisgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBtX291dHB1dEltYWdlQnVm
ZmVyOwotICAgIEhhc2hNYXA8UmVmPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZXRhaW5QdHI8Q0lG
aWx0ZXI+Pj4gbV9jaUZpbHRlclN0b3JhZ2VNYXA7CiAgICAgUmV0YWluUHRyPENJSW1hZ2U+IG1f
b3V0cHV0SW1hZ2U7Ci0gICAgUmV0YWluUHRyPENJQ29udGV4dD4gbV9jb250ZXh0OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlLm1tCmluZGV4IDkzMTNmNzFlNmVmYmE4NDZkNjY1NTFlMTMwOTM5MTll
MDgzZGQ4NGMuLjUzMDZiZjBlNDFiZGZjYzkyODdjYmRhYjgxMWQzYzk5ZDY1MmRkYWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KQEAgLTMw
LDEyICszMCwxNCBAQAogCiAjaW1wb3J0ICJGaWx0ZXIuaCIKICNpbXBvcnQgIkZpbHRlckVmZmVj
dC5oIgorI2ltcG9ydCAiRmlsdGVyT3BlcmF0aW9uLmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRl
eHRDRy5oIgogI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKICNpbXBvcnQgIlBsYXRmb3JtSW1hZ2VC
dWZmZXIuaCIKICNpbXBvcnQgPENvcmVJbWFnZS9DSUNvbnRleHQuaD4KICNpbXBvcnQgPENvcmVJ
bWFnZS9DSUZpbHRlci5oPgogI2ltcG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgorI2ltcG9y
dCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDYs
MTIgKzQ4LDMyIEBAIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFn
ZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnRyCiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKK1JldGFpblB0cjxDSUNvbnRleHQ+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
OjpzaGFyZWRDSUNvbnRleHQoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5Q
dHI8Q0lDb250ZXh0Pj4gY2lDb250ZXh0ID0gW0NJQ29udGV4dCBjb250ZXh0V2l0aE9wdGlvbnM6
IEB7IGtDSUNvbnRleHRXb3JraW5nQ29sb3JTcGFjZTogKF9fYnJpZGdlIGlkKUNHQ29sb3JTcGFj
ZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VTUkdCKX1dOworICAgIHJldHVybiBjaUNvbnRl
eHQ7Cit9CisKIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29y
ZUltYWdlUmVuZGVyaW5nKEZpbHRlckVmZmVjdCYgZWZmZWN0KQogewogICAgIC8vIEZJWE1FOiBj
aGFuZ2UgcmV0dXJuIHZhbHVlIHRvIHRydWUgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZAogICAg
IHN3aXRjaCAoZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpKSB7CisgICAgY2FzZSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgCisgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OiB7Cisg
ICAgICAgIHN3aXRjaCAoZG93bmNhc3Q8RkVDb2xvck1hdHJpeD4oZWZmZWN0KS50eXBlKCkpIHsK
KyAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKKyAgICAgICAgY2FzZSBG
RUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgorICAgICAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKKyAgICAgICAgY2FzZSBGRUNPTE9STUFU
UklYX1RZUEVfSFVFUk9UQVRFOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICB9CisKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6QmxlbmQ6Ci0gICAgY2FzZSBG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OgogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpDb21wb25lbnRUcmFuc2ZlcjoKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29t
cG9zaXRlOgogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKQEAg
LTY5LDcgKzkxLDYgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9y
dHNDb3JlSW1hZ2VSZW5kZXJpbmcoRmlsdGVyRWZmZWN0JiBlZmYKICAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6VGlsZToKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6VHVyYnVsZW5j
ZToKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGE6Ci0gICAgY2FzZSBG
aWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM6CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODMsMTIgKzEwNCwxMiBAQCB2b2lkIEZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0JiBsYXN0
RWZmZWN0KQogICAgIHJlbmRlclRvSW1hZ2VCdWZmZXIobGFzdEVmZmVjdCk7CiB9CiAKLUNJSW1h
Z2UqIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKEZpbHRl
ckVmZmVjdCYgZWZmZWN0KQorUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVy
Q29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0KQogewotICAg
IFZlY3RvcjxDSUltYWdlKj4gaW5wdXRJbWFnZXM7CisgICAgVmVjdG9yPFJldGFpblB0cjxDSUlt
YWdlPj4gaW5wdXRJbWFnZXM7CiAgICAgCiAgICAgZm9yIChhdXRvIGluIDogZWZmZWN0LmlucHV0
RWZmZWN0cygpKSB7Ci0gICAgICAgIENJSW1hZ2UqIGlucHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0
ZXJzKCppbik7CisgICAgICAgIGF1dG8gaW5wdXRJbWFnZSA9IGNvbm5lY3RDSUZpbHRlcnMoKmlu
KTsKICAgICAgICAgaWYgKCFpbnB1dEltYWdlKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgICAgIGlucHV0SW1hZ2VzLmFwcGVuZChpbnB1dEltYWdlKTsKQEAgLTk5LDEwICsxMjAs
MTQgQEAgQ0lJbWFnZSogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNvbm5lY3RDSUZp
bHRlcnMoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCiAgICAgaWYgKGVmZmVjdC5hYnNvbHV0ZVBhaW50
UmVjdCgpLmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZWZmZWN0
LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aG9zZSBmaWx0ZXJzIHVzaW5nIENJRmlsdGVy
IHNvIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB2YWxpZCBDSUltYWdlCiAgICAgc3dpdGNo
IChlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkpIHsKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6QmxlbmQ6CisgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBo
aWM6CisgICAgICAgIHJldHVybiBpbWFnZUZvclNvdXJjZUdyYXBoaWMoZG93bmNhc3Q8U291cmNl
R3JhcGhpYz4oZWZmZWN0KSk7CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0
cml4OgorICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbG9yTWF0cml4KGRvd25jYXN0PEZFQ29s
b3JNYXRyaXg+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKKworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhvc2UgZmlsdGVycyB1c2luZyBDSUZpbHRlciBzbyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1
cm5zIGEgdmFsaWQgQ0lJbWFnZQorICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpCbGVuZDoK
ICAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6CiAgICAgY2Fz
ZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvc2l0ZToKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6Q29udm9sdmVNYXRyaXg6CkBAIC0xMjAsMTMgKzE0NSw3NiBAQCBDSUltYWdlKiBGaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyhGaWx0ZXJFZmZlY3Qm
IGVmZmVjdCkKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6VGlsZToKICAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6VHVyYnVsZW5jZToKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlw
ZTo6U291cmNlQWxwaGE6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBo
aWM6CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIHJl
dHVybiBudWxscHRyOwogfQogCitSZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2U6OmltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJiBlZmZlY3Qp
Cit7CisgICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZWZmZWN0LmZpbHRlcigpLnNvdXJj
ZUltYWdlKCk7CisgICAgaWYgKCFzb3VyY2VJbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgCisgICAgaWYgKGlzPEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI+KCpzb3VyY2VJbWFnZSkp
CisgICAgICAgIHJldHVybiBbQ0lJbWFnZSBpbWFnZVdpdGhJT1N1cmZhY2U6ZG93bmNhc3Q8QWNj
ZWxlcmF0ZWRJbWFnZUJ1ZmZlcj4oKnNvdXJjZUltYWdlKS5zdXJmYWNlKCkuc3VyZmFjZSgpXTsK
KyAgICAKKyAgICByZXR1cm4gW0NJSW1hZ2UgaW1hZ2VXaXRoQ0dJbWFnZTpzb3VyY2VJbWFnZS0+
Y29weU5hdGl2ZUltYWdlKCkuZ2V0KCldOworfQorCitSZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmltYWdlRm9yRkVDb2xvck1hdHJpeChjb25zdCBGRUNv
bG9yTWF0cml4JiBlZmZlY3QsIGNvbnN0IFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+JiBpbnB1
dEltYWdlcykKK3sKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dEltYWdlcy5hdCgwKTsKKwor
ICAgIGF1dG8gdmFsdWVzID0gRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyhlZmZlY3Qu
dmFsdWVzKCkpOworICAgIGZsb2F0IGNvbXBvbmVudHNbOV07CisgICAgCisgICAgc3dpdGNoIChl
ZmZlY3QudHlwZSgpKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Cisg
ICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhjb21wb25l
bnRzLCB2YWx1ZXNbMF0pOworICAgICAgICBicmVhazsKKyAgICAKKyAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9IVUVST1RBVEU6CisgICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1
ZVJvdGF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKKyAgICAgICAgYnJlYWs7
CisgICAgCisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgorICAgICAgICBicmVh
azsKKyAgICAgICAgCisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKKyAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiAvLyBGSVhNRTogQWRkIEx1
bWluYW5jZSB0byBBbHBoYSBJbXBsZW1lbnRhdGlvbgorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisgICAgCisgICAgYXV0byAqY29sb3JNYXRyaXhGaWx0ZXIgPSBbQ0lGaWx0ZXIgZmls
dGVyV2l0aE5hbWU6QCJDSUNvbG9yTWF0cml4Il07CisgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNl
dFZhbHVlOmlucHV0SW1hZ2UuZ2V0KCkgZm9yS2V5OmtDSUlucHV0SW1hZ2VLZXldOworICAgIAor
ICAgIHN3aXRjaCAoZWZmZWN0LnR5cGUoKSkgeworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X1NBVFVSQVRFOgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogeworICAg
ICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNv
bXBvbmVudHNbMF0gWTpjb21wb25lbnRzWzFdIFo6Y29tcG9uZW50c1syXSBXOjBdIGZvcktleTpA
ImlucHV0UlZlY3RvciJdOworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJ
VmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNbM10gWTpjb21wb25lbnRzWzRdIFo6Y29tcG9u
ZW50c1s1XSBXOjBdIGZvcktleTpAImlucHV0R1ZlY3RvciJdOworICAgICAgICBbY29sb3JNYXRy
aXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNbNl0gWTpj
b21wb25lbnRzWzddIFo6Y29tcG9uZW50c1s4XSBXOjBdIGZvcktleTpAImlucHV0QlZlY3RvciJd
OworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3Rvcldp
dGhYOjAgICAgICAgICAgICAgWTowICAgICAgICAgICAgIFo6MCAgICAgICAgICAgICBXOjFdIGZv
cktleTpAImlucHV0QVZlY3RvciJdOworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFs
dWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgICAgICAgICAgICAgWTowICAgICAgICAgICAgIFo6
MCAgICAgICAgICAgICBXOjBdIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJdOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7CisgICAg
ICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFs
dWVzWzBdICBZOnZhbHVlc1sxXSAgWjp2YWx1ZXNbMl0gIFc6dmFsdWVzWzNdXSAgZm9yS2V5OkAi
aW5wdXRSVmVjdG9yIl07CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lW
ZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzVdICBZOnZhbHVlc1s2XSAgWjp2YWx1ZXNbN10gIFc6
dmFsdWVzWzhdXSAgZm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07CisgICAgICAgIFtjb2xvck1hdHJp
eEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzEwXSBZOnZhbHVl
c1sxMV0gWjp2YWx1ZXNbMTJdIFc6dmFsdWVzWzEzXV0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07
CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0
aFg6dmFsdWVzWzE1XSBZOnZhbHVlc1sxNl0gWjp2YWx1ZXNbMTddIFc6dmFsdWVzWzE4XV0gZm9y
S2V5OkAiaW5wdXRBVmVjdG9yIl07CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1
ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzRdICBZOnZhbHVlc1s5XSAgWjp2YWx1ZXNb
MTRdIFc6dmFsdWVzWzE5XV0gZm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhB
OgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKyAgICByZXR1cm4gY29sb3JNYXRyaXhGaWx0ZXIub3V0cHV0SW1hZ2U7
Cit9CisKIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNhblJlbmRlclVzaW5n
Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0KQogewogICAgIGlmICghc3VwcG9ydHNDb3Jl
SW1hZ2VSZW5kZXJpbmcoZWZmZWN0KSkKQEAgLTE0MSw2ICsyMjksNyBAQCBib29sIEZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJFZmZl
Y3QmIGVmZmVjdAogCiBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6
Om91dHB1dCgpIGNvbnN0CiB7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8
PCAiUmVuZGVyaW5nICIgPDwgdGhpcyA8PCAiIHVzaW5nIENvcmVJbWFnZVxuIik7CiAgICAgcmV0
dXJuIG1fb3V0cHV0SW1hZ2VCdWZmZXIuZ2V0KCk7CiB9CiAgICAgCkBAIC0xNjAsOCArMjQ5LDcg
QEAgdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6cmVuZGVyVG9JbWFnZUJ1ZmZl
cihGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGF1
dG8mIHN1cmZhY2UgPSBkb3duY2FzdDxBY2NlbGVyYXRlZEltYWdlQnVmZmVyPigqbV9vdXRwdXRJ
bWFnZUJ1ZmZlcikuc3VyZmFjZSgpOwotICAgIENHQ29sb3JTcGFjZVJlZiByZXN1bHRDb2xvclNw
YWNlID0gY2FjaGVkQ0dDb2xvclNwYWNlKGxhc3RFZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpKTsK
LSAgICBbbV9jb250ZXh0LmdldCgpIHJlbmRlcjogbV9vdXRwdXRJbWFnZS5nZXQoKSB0b0lPU3Vy
ZmFjZTogc3VyZmFjZS5zdXJmYWNlKCkgYm91bmRzOmRlc3RSZWN0KGxhc3RFZmZlY3QpIGNvbG9y
U3BhY2U6cmVzdWx0Q29sb3JTcGFjZV07CisgICAgW3NoYXJlZENJQ29udGV4dCgpLmdldCgpIHJl
bmRlcjogbV9vdXRwdXRJbWFnZS5nZXQoKSB0b0lPU3VyZmFjZTogc3VyZmFjZS5zdXJmYWNlKCkg
Ym91bmRzOmRlc3RSZWN0KGxhc3RFZmZlY3QpIGNvbG9yU3BhY2U6Y2FjaGVkQ0dDb2xvclNwYWNl
KGxhc3RFZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpKV07CiB9CiAgICAgCiBGbG9hdFJlY3QgRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYg
bGFzdEVmZmVjdCkgY29uc3QKQEAgLTE3NSwxNiArMjYzLDEyIEBAIEZsb2F0UmVjdCBGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6ZGVzdFJlY3QoY29uc3QgRmlsdGVyRWZmZWN0JiBsYXN0
RWZmZWN0CiB2b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjbGVhclJlc3VsdCgp
CiB7CiAgICAgbV9vdXRwdXRJbWFnZUJ1ZmZlci5yZXNldCgpOwotICAgIG1fY2lGaWx0ZXJTdG9y
YWdlTWFwLmNsZWFyKCk7CiAgICAgbV9vdXRwdXRJbWFnZSA9IG51bGxwdHI7Ci0gICAgbV9jb250
ZXh0ID0gbnVsbHB0cjsKIH0KIAogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OkZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCkKICAgICA6IEZpbHRlckVmZmVjdFJlbmRlcmVyKCkK
IHsKLSAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IGNhY2hlZENHQ29sb3JTcGFjZShD
b2xvclNwYWNlOjpTUkdCKTsKLSAgICBtX2NvbnRleHQgPSBbQ0lDb250ZXh0IGNvbnRleHRXaXRo
T3B0aW9uczogQHsga0NJQ29udGV4dFdvcmtpbmdDb2xvclNwYWNlOiAoX19icmlkZ2UgaWQpY29s
b3JTcGFjZX1dOwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
aAppbmRleCAwOTBlNjgyZThhNzVlMDViMDI2NWVjZjJmZjFiYjNjZTYyYzQwNjY5Li43YzZkYzU3
ZmJhMjFiYjYzMTVjNWE3NmMwMGUwMmIxZmFiZWVhMGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaApAQCAt
OTMsMyArOTMsNyBAQCBpbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3Rh
dGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdAogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RkVDb2xvck1h
dHJpeCkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0
JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OyB9CitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0VORCgpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCA3NTYyZmRkNjA1ODY3ZjYyOGNh
MzJjMzE1YzlkMzcyOTAzNzZmMzg4Li43ZTEzY2ZmNjYzZGFiZjI4MzgzNmFiOTdiNjI2M2RlZTEx
NGY0MmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC03OSw3ICs3OSw2IEBAIEZsb2F0UG9pbnQg
RmlsdGVyRWZmZWN0OjptYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9hdFBvaW50IHVz
ZXJTcGFjZVBvaW50CiAKIEludFJlY3QgRmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklu
cHV0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIGVmZmVjdFJlY3QpIGNvbnN0CiB7Ci0gICAgQVNT
RVJUKGhhc1Jlc3VsdCgpKTsKICAgICBJbnRQb2ludCBsb2NhdGlvbiA9IG1fYWJzb2x1dGVQYWlu
dFJlY3QubG9jYXRpb24oKTsKICAgICBsb2NhdGlvbi5tb3ZlQnkoLWVmZmVjdFJlY3QubG9jYXRp
b24oKSk7CiAgICAgcmV0dXJuIEludFJlY3QobG9jYXRpb24sIG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IDExYWM2MGFhNjQxMTc0MWFiMTM2NDZmY2QxNmEw
NTRiMzljMmZjN2MuLmVlYTBhZDJmODUyOThmZTlhNmEzOTEzYjFmYWQ1NzA3NWE5MmVlMjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaApAQCAtMTU1LDcgKzE1NSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBGbG9h
dFBvaW50IG1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKEZsb2F0UG9pbnQpIGNvbnN0Owog
ICAgIAotICAgIFR5cGUgZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgeyByZXR1cm4gbV9maWx0ZXJF
ZmZlY3RDbGFzc1R5cGU7IH0KKyAgICBUeXBlIGZpbHRlckVmZmVjdENsYXNzVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsdGVyRWZmZWN0Q2xhc3NUeXBlOyB9CiAKICAgICBGaWx0ZXImIGZpbHRl
cigpIHsgcmV0dXJuIG1fZmlsdGVyOyB9CiAgICAgY29uc3QgRmlsdGVyJiBmaWx0ZXIoKSBjb25z
dCB7IHJldHVybiBtX2ZpbHRlcjsgfQpAQCAtMTcwLDYgKzE3MCwxNCBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGlu
LCBjb25zdCBpbnQpIHsgaW4tPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UobV9vcGVyYXRpbmdD
b2xvclNwYWNlKTsgfQogICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShDb2xvclNw
YWNlKTsKKyAgICAKKyAgICBzdGF0aWMgVmVjdG9yPGZsb2F0PiBub3JtYWxpemVkRmxvYXRzKGNv
bnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcykKKyAgICB7CisgICAgICAgIFZlY3RvcjxmbG9hdD4g
bm9ybWFsaXplZFZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBub3JtYWxpemVkVmFsdWVz
W2ldID0gbm9ybWFsaXplZEZsb2F0KHZhbHVlc1tpXSk7CisgICAgICAgIHJldHVybiBub3JtYWxp
emVkVmFsdWVzOworICAgIH0KIAogcHJvdGVjdGVkOgogICAgIEZpbHRlckVmZmVjdChGaWx0ZXIm
LCBUeXBlKTsKQEAgLTE4OCwxNCArMTk2LDYgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZm9yY2VW
YWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKIAogICAgIHZvaWQgY2xpcEFic29sdXRlUGFpbnRS
ZWN0KCk7Ci0gICAgCi0gICAgc3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhj
b25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCi0gICAgewotICAgICAgICBWZWN0b3I8ZmxvYXQ+
IG5vcm1hbGl6ZWRWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVl
c1tpXSA9IG5vcm1hbGl6ZWRGbG9hdCh2YWx1ZXNbaV0pOwotICAgICAgICByZXR1cm4gbm9ybWFs
aXplZFZhbHVlczsKLSAgICB9CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKaW5kZXggMGYwMWRkYTA2Y2UwMjcx
MzViNzFjYTVjYzAzNDM3NWUxOTE5NjQ1Ni4uZjY3M2NlNGM3ZjI5M2FhMTkxMzVmOWM3N2U2MGMy
Mjc3MTYxMzk4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKQEAgLTUwLDQgKzUwLDkgQEAgcHJpdmF0ZToK
IAogfSAvL25hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4o
V2ViQ29yZTo6U291cmNlR3JhcGhpYykKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RD
bGFzc1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM7
IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworCiAjZW5kaWYgLy8gU291cmNlR3Jh
cGhpY19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCmluZGV4IGFmZWI5Mjk1
NTM1MzQyNzgwMmNlMjkwNjA3ZGExYTg5N2NmOGNhMjAuLmQyYThhODllM2UwNGU0YzVkODlmYmVk
MzA1NjE2ODI1MGM4YmQ5MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9D
U1NGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3Bw
CkBAIC0zMDQsNyArMzA0LDggQEAgYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb24KIAogICAgIHNldE1h
eEVmZmVjdFJlY3RzKG1fc291cmNlRHJhd2luZ1JlZ2lvbik7CiAjaWYgVVNFKENPUkVfSU1BR0Up
Ci0gICAgbV9maWx0ZXJSZW5kZXJlciA9IEZpbHRlckVmZmVjdFJlbmRlcmVyOjp0cnlDcmVhdGUo
cmVuZGVyZXIuc2V0dGluZ3MoKS5jb3JlSW1hZ2VBY2NlbGVyYXRlZEZpbHRlclJlbmRlckVuYWJs
ZWQoKSwgbV9lZmZlY3RzLmxhc3QoKS5nZXQoKSk7CisgICAgaWYgKCFtX2ZpbHRlclJlbmRlcmVy
KQorICAgICAgICBtX2ZpbHRlclJlbmRlcmVyID0gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnRyeUNy
ZWF0ZShyZW5kZXJlci5zZXR0aW5ncygpLmNvcmVJbWFnZUFjY2VsZXJhdGVkRmlsdGVyUmVuZGVy
RW5hYmxlZCgpLCBtX2VmZmVjdHMubGFzdCgpLmdldCgpKTsKICNlbmRpZgogICAgIHJldHVybiB0
cnVlOwogfQpAQCAtMzM2LDcgKzMzNyw4IEBAIHZvaWQgQ1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tp
bmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgdGFyZ2V0Q29udGV4CiAgICAg
ICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIHJlbmRl
cmluZ01vZGUoKSwgJnRhcmdldENvbnRleHQsIGZpbHRlclNjYWxlKCkpKTsKICNlbHNlCiAgICAg
ICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRDb250ZXh0KTsKLSAgICAgICAgc2V0U291cmNlSW1hZ2Uo
SW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCBmaWx0ZXJT
Y2FsZSgpKSk7CisgICAgICAgIFJlbmRlcmluZ01vZGUgbW9kZSA9IG1fZmlsdGVyUmVuZGVyZXIg
PyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IHJlbmRlcmluZ01vZGUoKTsKKyAgICAgICAg
c2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgbW9kZSwgZmls
dGVyU2NhbGUoKSkpOwogI2VuZGlmCiAgICAgfQogICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hl
ZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggZDA0NDdjMTk5ODQwODQ5NDFjYzFjMWQxNGNlYmQyMDU4NTBmM2Y3
NS4uNjAwMzg5MTkzNGU2Zjc3MGNlYjBlNTQ4MmM0ZDgzODhjNTA1ODY4ZiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI3IEBACisyMDIwLTA5LTAyICBGcmFuayBZYW5nICA8Z3Vvd2VpX3lhbmdAYXBwbGUuY29t
PgorCisgICAgICAgIENvcmVJbWFnZSBJbXBsZW1lbnRhdGlvbiBvZiBTb3VyY2VHcmFwaGljIGFu
ZCBzYXR1cmF0ZSgpLCBodWUtcm90YXRlKCksIGdyYXlzY2FsZSgpIGFuZCBzZXBpYSgpCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM2NzMKKworICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlciwgU2ltb24gRnJhc2VyLgorCisgICAgICAgICog
Y3NzMy9maWx0ZXJzL2VmZmVjdC1ncmF5c2NhbGUtc3F1YXJlLWV4cGVjdGVkLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGNzczMvZmlsdGVycy9lZmZlY3QtZ3JheXNjYWxlLXNxdWFyZS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBjc3MzL2ZpbHRlcnMvZWZmZWN0LWh1ZS1yb3RhdGUtc3F1YXJlLWV4
cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNzczMvZmlsdGVycy9lZmZlY3QtaHVlLXJv
dGF0ZS1zcXVhcmUuaHRtbDogQWRkZWQuCisgICAgICAgICogY3NzMy9maWx0ZXJzL2VmZmVjdC1z
YXR1cmF0ZS1zcXVhcmUtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogY3NzMy9maWx0
ZXJzL2VmZmVjdC1zYXR1cmF0ZS1zcXVhcmUuaHRtbDogQWRkZWQuCisgICAgICAgICogY3NzMy9m
aWx0ZXJzL2VmZmVjdC1zZXBpYS1zcXVhcmUtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAg
ICogY3NzMy9maWx0ZXJzL2VmZmVjdC1zZXBpYS1zcXVhcmUuaHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9maWx0ZXItaW1hZ2UvYmFja2dyb3VuZC1maWx0ZXItaW1hZ2UtZXhwZWN0ZWQuaHRt
bDoKKyAgICAgICAgICAgIFRoaXMgaXMgdGhlIGV4cGVjdGVkIHJlc3VsdCBmb3IgdGhlIGJhY2tn
cm91bmQgaW1hZ2UgZmlsdGVyLiBUaGUgYmFja2dyb3VuZCBpbWFnZQorICAgICAgICAgICAgaXMg
bm90IHVwc2FtcGxlZCBmb3IgcmV0aW5hIHNjcmVlbnMgZHVlIHRvIGEgYnVnLCBzbyB0aGUgdGVz
dCBydW5uZXIgaXMgY29tcGFyaW5nIAorICAgICAgICAgICAgYW4gdW5zY2FsZWQgaW1hZ2Ugd2l0
aCBhbiB1cHNjYWxlZC10aGVuLWRvd25zY2FsZWQgaW1hZ2UuIENvcmVJbWFnZSBoYW5kbGVzIHVw
c2NhbGluZyAKKyAgICAgICAgICAgIGFuZCBkb3duc2NhbGluZyBkaWZmZXJlbnRseSwgc28gdGhl
IHBpeGVsIGRpZmYgd2lsbCBmYWlsLiBUaHVzLCB0dXJuaW5nIG9mZiBDSSBmb3IgdGhpcyAKKyAg
ICAgICAgICAgIHBhcnRpY3VsYXIgdGVzdCBjYXNlIHVudGlsIHRoZSBiYWNrZ3JvdW5kIGltYWdl
IGZpbHRlciBub3QgdXBzYW1wbGluZyBidWcgaXMgZml4ZWQuCisgICAgICAgICogZmFzdC9maWx0
ZXItaW1hZ2UvYmFja2dyb3VuZC1maWx0ZXItaW1hZ2UuaHRtbDoKKyAgICAgICAgICAgIGRpdHRv
CisKIDIwMjAtMDgtMjggIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgUkVHUkVTU0lPTiAocjI2MzUwNik6IHNjYWxlIHRyYW5zZm9ybSB0cmFuc2l0aW9ucyB3
b24ndCBvdmVyc2hvb3QKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZl
Y3QtZ3JheXNjYWxlLXNxdWFyZS1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0
ZXJzL2VmZmVjdC1ncmF5c2NhbGUtc3F1YXJlLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzcy
ODE3MjI3ZGQwNWJiNjY1MWZhMjJkZWM1NWUyYjMyMGY2MGE2OAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3QtZ3JheXNjYWxlLXNxdWFyZS1leHBlY3Rl
ZC5odG1sCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KyAgICA8dGl0bGU+Q1NTIEZpbHRlciBUZXN0OiBUZXN0IGZvciBTYXR1cmF0ZSBzaG9ydCBoYW5k
PC90aXRsZT4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgIGRpdiB7CisgICAgICAg
IHdpZHRoOiA2MDBweDsKKyAgICAgICAgaGVpZ2h0OiA2MDBweDsgCisgICAgICAgIGJhY2tncm91
bmQ6IHJnYigxNTQsIDI3LCAyNyk7CisgICAgfQorCisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxi
b2R5PgorICAgIDxwPllvdSBzaG91bGQgc2VlIGEgZ3JlZW4gcmVjdGFuZ2xlLjwvcD4KKyAgICA8
ZGl2PjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9j
c3MzL2ZpbHRlcnMvZWZmZWN0LWdyYXlzY2FsZS1zcXVhcmUuaHRtbCBiL0xheW91dFRlc3RzL2Nz
czMvZmlsdGVycy9lZmZlY3QtZ3JheXNjYWxlLXNxdWFyZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2YTRk
MzdjYmViNDRlNjg0M2I5YzE4ZWFlMjVkNGQwMzM5MjdiNTIKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LWdyYXlzY2FsZS1zcXVhcmUuaHRtbApAQCAt
MCwwICsxLDIwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRpdGxl
PkNTUyBGaWx0ZXIgVGVzdDogVGVzdCBmb3IgU2F0dXJhdGUgc2hvcnQgaGFuZDwvdGl0bGU+Cisg
ICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgICBkaXYgeworICAgICAgICB3aWR0aDogNjAw
cHg7CisgICAgICAgIGhlaWdodDogNjAwcHg7IAorICAgICAgICBiYWNrZ3JvdW5kOiByZWQ7Cisg
ICAgICAgIGZpbHRlcjogZ3JheXNjYWxlKDUwJSk7CisgICAgfQorCisgICAgPC9zdHlsZT4KKzwv
aGVhZD4KKzxib2R5PgorICAgIDxwPllvdSBzaG91bGQgc2VlIGEgZ3JlZW4gcmVjdGFuZ2xlLjwv
cD4KKyAgICA8ZGl2PjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LWh1ZS1yb3RhdGUtc3F1YXJlLWV4cGVjdGVkLmh0
bWwgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LWh1ZS1yb3RhdGUtc3F1YXJlLWV4
cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTA3YmI0M2JlM2UxMTdhMGE5ZmJhYzExOTNiZmExMjc4
ZjI5NmMxZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZl
Y3QtaHVlLXJvdGF0ZS1zcXVhcmUtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDE5IEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPkNTUyBGaWx0ZXIgVGVzdDog
VGVzdCBmb3IgU2F0dXJhdGUgc2hvcnQgaGFuZDwvdGl0bGU+CisgICAgPHN0eWxlIHR5cGU9InRl
eHQvY3NzIj4KKyAgICBkaXYgeworICAgICAgICB3aWR0aDogNjAwcHg7CisgICAgICAgIGhlaWdo
dDogNjAwcHg7IAorICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoMCwgOTEsIDApOworICAgIH0KKwor
ICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8cD5Zb3Ugc2hvdWxkIHNlZSBhIGdy
ZWVuIHJlY3RhbmdsZS48L3A+CisgICAgPGRpdj48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1odWUtcm90YXRlLXNx
dWFyZS5odG1sIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1odWUtcm90YXRlLXNx
dWFyZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI5ODg2ODkzNjdlNWU5ZjFiNjU3NmVlYjY4NzM3ODRjZjY5
YTViMzgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0
LWh1ZS1yb3RhdGUtc3F1YXJlLmh0bWwKQEAgLTAsMCArMSwyMCBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5DU1MgRmlsdGVyIFRlc3Q6IFRlc3QgZm9yIFNh
dHVyYXRlIHNob3J0IGhhbmQ8L3RpdGxlPgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cisg
ICAgZGl2IHsKKyAgICAgICAgd2lkdGg6IDYwMHB4OworICAgICAgICBoZWlnaHQ6IDYwMHB4OyAK
KyAgICAgICAgYmFja2dyb3VuZDogcmVkOworICAgICAgICBmaWx0ZXI6IGh1ZS1yb3RhdGUoOTBk
ZWcpOworICAgIH0KKworICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8cD5Zb3Ug
c2hvdWxkIHNlZSBhIGdyZWVuIHJlY3RhbmdsZS48L3A+CisgICAgPGRpdj48L2Rpdj4KKworPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVj
dC1zYXR1cmF0ZS1zcXVhcmUtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVy
cy9lZmZlY3Qtc2F0dXJhdGUtc3F1YXJlLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzcyODE3
MjI3ZGQwNWJiNjY1MWZhMjJkZWM1NWUyYjMyMGY2MGE2OAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3Qtc2F0dXJhdGUtc3F1YXJlLWV4cGVjdGVkLmh0
bWwKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAg
IDx0aXRsZT5DU1MgRmlsdGVyIFRlc3Q6IFRlc3QgZm9yIFNhdHVyYXRlIHNob3J0IGhhbmQ8L3Rp
dGxlPgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgZGl2IHsKKyAgICAgICAgd2lk
dGg6IDYwMHB4OworICAgICAgICBoZWlnaHQ6IDYwMHB4OyAKKyAgICAgICAgYmFja2dyb3VuZDog
cmdiKDE1NCwgMjcsIDI3KTsKKyAgICB9CisKKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+
CisgICAgPHA+WW91IHNob3VsZCBzZWUgYSBncmVlbiByZWN0YW5nbGUuPC9wPgorICAgIDxkaXY+
PC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMv
ZmlsdGVycy9lZmZlY3Qtc2F0dXJhdGUtc3F1YXJlLmh0bWwgYi9MYXlvdXRUZXN0cy9jc3MzL2Zp
bHRlcnMvZWZmZWN0LXNhdHVyYXRlLXNxdWFyZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3MGNiMjZhYTFi
M2I0MmY1ZGM0ODc0ZTkyOGE1ZTYyZWNjN2U0MTkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LXNhdHVyYXRlLXNxdWFyZS5odG1sCkBAIC0wLDAgKzEs
MjAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8dGl0bGU+Q1NTIEZp
bHRlciBUZXN0OiBUZXN0IGZvciBTYXR1cmF0ZSBzaG9ydCBoYW5kPC90aXRsZT4KKyAgICA8c3R5
bGUgdHlwZT0idGV4dC9jc3MiPgorICAgIGRpdiB7CisgICAgICAgIHdpZHRoOiA2MDBweDsKKyAg
ICAgICAgaGVpZ2h0OiA2MDBweDsgCisgICAgICAgIGJhY2tncm91bmQ6IHJlZDsKKyAgICAgICAg
ZmlsdGVyOiBzYXR1cmF0ZSg1MCUpOworICAgIH0KKworICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8
Ym9keT4KKyAgICA8cD5Zb3Ugc2hvdWxkIHNlZSBhIGdyZWVuIHJlY3RhbmdsZS48L3A+CisgICAg
PGRpdj48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Y3NzMy9maWx0ZXJzL2VmZmVjdC1zZXBpYS1zcXVhcmUtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRl
c3RzL2NzczMvZmlsdGVycy9lZmZlY3Qtc2VwaWEtc3F1YXJlLWV4cGVjdGVkLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYTRkY2EyOGUzZTYzN2VjNDViMmM3ODdlYmE5MDgxNWMyOWQxYjJmZAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9lZmZlY3Qtc2VwaWEtc3F1YXJlLWV4
cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorICAgIDx0aXRsZT5DU1MgRmlsdGVyIFRlc3Q6IFRlc3QgZm9yIFNhdHVyYXRlIHNob3J0
IGhhbmQ8L3RpdGxlPgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgZGl2IHsKKyAg
ICAgICAgd2lkdGg6IDYwMHB4OworICAgICAgICBoZWlnaHQ6IDYwMHB4OyAKKyAgICAgICAgYmFj
a2dyb3VuZDogcmdiKDI0LCAyMSwgMTQ0KTsKKyAgICB9CisKKyAgICA8L3N0eWxlPgorPC9oZWFk
PgorPGJvZHk+IAorICAgIDxwPllvdSBzaG91bGQgc2VlIGEgZ3JlZW4gcmVjdGFuZ2xlLjwvcD4K
KyAgICA8ZGl2PjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9jc3MzL2ZpbHRlcnMvZWZmZWN0LXNlcGlhLXNxdWFyZS5odG1sIGIvTGF5b3V0VGVzdHMv
Y3NzMy9maWx0ZXJzL2VmZmVjdC1zZXBpYS1zcXVhcmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mODlhY2E1
Nzg4NzdhYzgzOWZmZmZmMTc1MTA0NGU2MWYyZjYyYWI0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2VmZmVjdC1zZXBpYS1zcXVhcmUuaHRtbApAQCAtMCwwICsx
LDIwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPkNTUyBG
aWx0ZXIgVGVzdDogVGVzdCBmb3IgU2F0dXJhdGUgc2hvcnQgaGFuZDwvdGl0bGU+CisgICAgPHN0
eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgICBkaXYgeworICAgICAgICB3aWR0aDogNjAwcHg7Cisg
ICAgICAgIGhlaWdodDogNjAwcHg7IAorICAgICAgICBiYWNrZ3JvdW5kOiBibHVlOworICAgICAg
ICBmaWx0ZXI6IHNlcGlhKDUwJSk7CisgICAgfQorCisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxi
b2R5PgorICAgIDxwPllvdSBzaG91bGQgc2VlIGEgZ3JlZW4gcmVjdGFuZ2xlLjwvcD4KKyAgICA8
ZGl2PjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2ZpbHRlci1pbWFnZS9iYWNrZ3JvdW5kLWZpbHRlci1pbWFnZS1leHBlY3RlZC5odG1sIGIv
TGF5b3V0VGVzdHMvZmFzdC9maWx0ZXItaW1hZ2UvYmFja2dyb3VuZC1maWx0ZXItaW1hZ2UtZXhw
ZWN0ZWQuaHRtbAppbmRleCBkMTlhOGVhMTYwOGRlMzAxZTIwMWRmN2FkMWU2MjRlMTZhMzExOTk5
Li4yMjQ0MzY2M2UxNjllZDJlNjU3ZDBkYTlkODU1MTJiZDVhYmM3NTk3IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9mYXN0L2ZpbHRlci1pbWFnZS9iYWNrZ3JvdW5kLWZpbHRlci1pbWFnZS1leHBl
Y3RlZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsdGVyLWltYWdlL2JhY2tncm91bmQt
ZmlsdGVyLWltYWdlLWV4cGVjdGVkLmh0bWwKQEAgLTIsNiArMiwxMCBAQAogPGh0bWw+CiA8aGVh
ZD4KIDx0aXRsZT5UaGlzIHRlc3RzIHRoYXQgYmFja2dyb3VuZCBpbWFnZXMgd2l0aCBmaWx0ZXJz
IHNjYWxlIHByb3Blcmx5LjwvdGl0bGU+Cis8c2NyaXB0PgorCWlmICh3aW5kb3cuaW50ZXJuYWxz
KQorICAgIAlpbnRlcm5hbHMuc2V0dGluZ3Muc2V0Q29yZUltYWdlQWNjZWxlcmF0ZWRGaWx0ZXJS
ZW5kZXJFbmFibGVkKGZhbHNlKTsKKzwvc2NyaXB0PgogPHN0eWxlPgogICBpbWcgewogICAgIHdp
ZHRoOiAxMDBweDsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsdGVyLWltYWdlL2Jh
Y2tncm91bmQtZmlsdGVyLWltYWdlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbHRlci1pbWFn
ZS9iYWNrZ3JvdW5kLWZpbHRlci1pbWFnZS5odG1sCmluZGV4IDNhMTVmYTliZmIyOGMzN2Y3NjU0
ZDY3MDE4MDE3NzY5MzBmNzRiMGMuLmQ1ZDE3NTE2MDBiOTU2MjM5NmJlNWI4YWU5ODYyMDM0ZWRi
NzEwOTMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsdGVyLWltYWdlL2JhY2tncm91
bmQtZmlsdGVyLWltYWdlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWx0ZXItaW1hZ2Uv
YmFja2dyb3VuZC1maWx0ZXItaW1hZ2UuaHRtbApAQCAtMiw2ICsyLDEwIEBACiA8aHRtbD4KIDxo
ZWFkPgogPHRpdGxlPlRoaXMgdGVzdHMgdGhhdCBiYWNrZ3JvdW5kIGltYWdlcyB3aXRoIGZpbHRl
cnMgc2NhbGUgcHJvcGVybHkuPC90aXRsZT4KKzxzY3JpcHQ+CisJaWYgKHdpbmRvdy5pbnRlcm5h
bHMpCisgICAgCWludGVybmFscy5zZXR0aW5ncy5zZXRDb3JlSW1hZ2VBY2NlbGVyYXRlZEZpbHRl
clJlbmRlckVuYWJsZWQoZmFsc2UpOworPC9zY3JpcHQ+CiA8c3R5bGU+CiAgIGRpdiB7CiAgICAg
YmFja2dyb3VuZC1pbWFnZTogZmlsdGVyKHVybCguLi9yZXBsYWNlZC9yZXNvdXJjZXMvY29tcGFz
cy5qcGcpLCBzZXBpYSgxKSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>