<?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>214204</bug_id>
          
          <creation_ts>2020-07-10 15:11:58 -0700</creation_ts>
          <short_desc>Reduce surface area of the ExtendedColor class to a bare minimum</short_desc>
          <delta_ts>2020-07-19 19:31:11 -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>New Bugs</component>
          <version>WebKit Nightly Build</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=214229</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=214260</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>fujii</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1670607</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-10 15:11:58 -0700</bug_when>
    <thetext>Reduce surface area of the ExtendedColor class to a bare minimum</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670632</commentid>
    <comment_count>1</comment_count>
      <attachid>404014</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-10 16:02:29 -0700</bug_when>
    <thetext>Created attachment 404014
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670652</commentid>
    <comment_count>2</comment_count>
      <attachid>404021</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-10 16:27:41 -0700</bug_when>
    <thetext>Created attachment 404021
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670657</commentid>
    <comment_count>3</comment_count>
      <attachid>404023</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-10 16:45:13 -0700</bug_when>
    <thetext>Created attachment 404023
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670687</commentid>
    <comment_count>4</comment_count>
      <attachid>404033</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-10 18:47:21 -0700</bug_when>
    <thetext>Created attachment 404033
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670689</commentid>
    <comment_count>5</comment_count>
      <attachid>404035</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-10 18:54:18 -0700</bug_when>
    <thetext>Created attachment 404035
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670694</commentid>
    <comment_count>6</comment_count>
      <attachid>404033</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-10 19:07:07 -0700</bug_when>
    <thetext>Comment on attachment 404033
Patch

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

&gt; Source/WebCore/platform/graphics/Color.h:56
&gt; +//    - Special &quot;invalid color&quot; state

maybe saying &quot;treated as transparent black but distinguishable&quot;

&gt; Source/WebCore/platform/graphics/Color.h:102
&gt;      bool isSemantic() const { return isInline() &amp;&amp; (m_colorData.inlineColorAndFlags &amp; isSemanticInlineColorBit); }
&gt;  
&gt; +
&gt;      bool isOpaque() const { return isExtended() ? asExtended().alpha() == 1.0 : asInline().alpha == 255; }

Not a fan of the various double spaces; I don’t think they really help this much.

&gt; Source/WebCore/platform/graphics/Color.h:117
&gt; +    WEBCORE_EXPORT std::pair&lt;ColorSpace, ColorComponents&lt;float&gt;&gt; colorSpaceAndComponents() const;

Better as a tuple than as a struct (food for future thought)?

&gt; Source/WebCore/platform/graphics/Color.h:172
&gt; +    static bool isBlack(const Color&amp;);
&gt; +    static bool isWhite(const Color&amp;);

These functions have unclear semantics. Why are they better than &quot;== Color::black&quot;?

&gt; Source/WebCore/platform/graphics/Color.h:287
&gt; +}

ASSERT_NOT_REACHED()? Or is invalid color a good outcome?

&gt; Source/WebCore/platform/graphics/Color.h:336
&gt; +        auto [c1, c2, c3, alpha] = asExtended().components();
&gt; +        return computeHash(c1, c2, c3, alpha, asExtended().colorSpace());

I think computeHash already knows how to hash tuples, so this can be:

    return computeHash(asExtended().components(), asExtended().colorSpace());

&gt; Source/WebCore/platform/graphics/Color.h:410
&gt; +    auto converted = convertToComponentBytes(color);
&gt; +    if (color == convertToComponentFloats(converted)) {
&gt; +        setColor(converted);
&gt; +        return;
&gt; +    }

Big new behavior! This has some consequences after this point, for the many Color functions that do subtly different operations on simple and extended colors.

&gt; Source/WebCore/platform/graphics/ColorSerialization.cpp:106
&gt;      if (WTF::areEssentiallyEqual(alpha, 1.0f))

Why does this use areEssentiallyEqual instead of ==? Does not seem motivated.

&gt; Source/WebCore/platform/graphics/ExtendedColor.h:37
&gt;  class ExtendedColor : public RefCounted&lt;ExtendedColor&gt; {

Seems like should become a private member class of Color if you finish the job of trimming it down like this.

&gt; Tools/ChangeLog:8
&gt; +        FIXME: DO NOT LAND UNTIL ADDING NEW TESTS FOR NEW BEHAVIOR OF STORING REPRESENTABLE SRGBA&lt;float&gt; INLINE.

Ah, the &quot;big new behavior&quot; comment apparently is something not lost on you.

Why not leave out that one bit of code and land it separately from this refactoring? It’s not intertwined with the rest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670697</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-10 19:59:00 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #6)
&gt; Comment on attachment 404033 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=404033&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.h:56
&gt; &gt; +//    - Special &quot;invalid color&quot; state
&gt; 
&gt; maybe saying &quot;treated as transparent black but distinguishable&quot;
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.h:102
&gt; &gt;      bool isSemantic() const { return isInline() &amp;&amp; (m_colorData.inlineColorAndFlags &amp; isSemanticInlineColorBit); }
&gt; &gt;  
&gt; &gt; +
&gt; &gt;      bool isOpaque() const { return isExtended() ? asExtended().alpha() == 1.0 : asInline().alpha == 255; }
&gt; 
&gt; Not a fan of the various double spaces; I don’t think they really help this
&gt; much.

Yeah, an attempt was made, but it didn&apos;t work. Will remove them.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.h:117
&gt; &gt; +    WEBCORE_EXPORT std::pair&lt;ColorSpace, ColorComponents&lt;float&gt;&gt; colorSpaceAndComponents() const;
&gt; 
&gt; Better as a tuple than as a struct (food for future thought)?

Yes.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.h:172
&gt; &gt; +    static bool isBlack(const Color&amp;);
&gt; &gt; +    static bool isWhite(const Color&amp;);
&gt; 
&gt; These functions have unclear semantics. Why are they better than &quot;==
&gt; Color::black&quot;?

The difference from == Color::black, is that it it will return true for non-sRGB colors. The implementation is really asking, are all the components at there maximum (or minimum for Color::isWhite). That is not necessarily the same color as Color::black for, say, DisplayP3 colors.

All that said, the real question is what do the callers want. There are only a couple callers of these functions, so let&apos;s try to figure out what they are really after:

1) Document::compositeOperatorForBackgroundColor() calls Color::isWhite(). It seems like what this code is trying to do is determine if it needs to comply with the punchOutWhiteBackgroundsInDarkMode() setting. In this case, I think color == Color::white is probably ok. If a user sets the background color of message to color(display-p3 0 0 0), it&apos;s probably ok not to punch out, just like if they set their background to color: rgb(0, 0, 1). My interpretation of the use of isWhite() here is really trying to determine if the background color is the default background color, which is Color::white. Perhaps there is actually a better way to determine that?

2) normalizedColor in HTMLConverter.cpp. Once again about dark mode. I think a similar analysis as for #1 can be made here, and that using == Color::white or == Color::black would probably be sufficient.

3) RenderLayerBacking::shouldDumpPropertyForLayer calls Color::isWhite. This one definitely can use == Color::white. This is just to not dump background colors when they are white. If it&apos;s a non-sRGB white, that&apos;s probably interesting enough to dump.

4) Editor::fontAttributesAtSelectionStart calls Color::isBlack. This one seems to be about whether we set foregroundColor font attribute. I think Color::black would be correct here as well, as a non-sRGB black might be something we want to preserve in the attributes.

So, in conclusion, yeah, we should probably get rid of Color::isBlack/Color::isWhite.

Thoughts?


&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.h:287
&gt; &gt; +}
&gt; 
&gt; ASSERT_NOT_REACHED()? Or is invalid color a good outcome?

I didn&apos;t add the ASSERT_NOT_REACHED() because if other color spaces are added, it will be a compile failure (due to no default case in the switch). 

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.h:336
&gt; &gt; +        auto [c1, c2, c3, alpha] = asExtended().components();
&gt; &gt; +        return computeHash(c1, c2, c3, alpha, asExtended().colorSpace());
&gt; 
&gt; I think computeHash already knows how to hash tuples, so this can be:
&gt; 
&gt;     return computeHash(asExtended().components(), asExtended().colorSpace());

Very cool.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.h:410
&gt; &gt; +    auto converted = convertToComponentBytes(color);
&gt; &gt; +    if (color == convertToComponentFloats(converted)) {
&gt; &gt; +        setColor(converted);
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; 
&gt; Big new behavior! This has some consequences after this point, for the many
&gt; Color functions that do subtly different operations on simple and extended
&gt; colors.

Yeah, going to rip this out of this change. Asked Simon and he says we have to preserve the current serializations. So:

    color: color(srgb 1 1 1); 

has to serialize to itself, and not:

    color: rgb(255, 255, 255); 

which is what this change does. So, if we do bring this back, we will have to keep a bit in Color indicating it should use the color() serialization (unless we can start serializing all colors as color(srgb 1 1 1), Simon has not gotten back to me on that).
    c

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorSerialization.cpp:106
&gt; &gt;      if (WTF::areEssentiallyEqual(alpha, 1.0f))
&gt; 
&gt; Why does this use areEssentiallyEqual instead of ==? Does not seem motivated.

Not sure, but also not new, so I am going to leave it alone for this change.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ExtendedColor.h:37
&gt; &gt;  class ExtendedColor : public RefCounted&lt;ExtendedColor&gt; {
&gt; 
&gt; Seems like should become a private member class of Color if you finish the
&gt; job of trimming it down like this.

Yep. 

&gt; 
&gt; &gt; Tools/ChangeLog:8
&gt; &gt; +        FIXME: DO NOT LAND UNTIL ADDING NEW TESTS FOR NEW BEHAVIOR OF STORING REPRESENTABLE SRGBA&lt;float&gt; INLINE.
&gt; 
&gt; Ah, the &quot;big new behavior&quot; comment apparently is something not lost on you.
&gt; 
&gt; Why not leave out that one bit of code and land it separately from this
&gt; refactoring? It’s not intertwined with the rest.

Yeah, it&apos;s going.

(I didn&apos;t mean for this to be up for review yet, I just forgot to add --no-review to my webkit-patch post, but non-the-less, thank you for the review).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670701</commentid>
    <comment_count>8</comment_count>
      <attachid>404038</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-10 20:19:02 -0700</bug_when>
    <thetext>Created attachment 404038
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670702</commentid>
    <comment_count>9</comment_count>
      <attachid>404039</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-10 20:22:41 -0700</bug_when>
    <thetext>Created attachment 404039
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670705</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-10 20:28:55 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #7)
&gt; (In reply to Darin Adler from comment #6)
&gt; &gt; Comment on attachment 404033 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/Color.h:336
&gt; &gt; &gt; +        auto [c1, c2, c3, alpha] = asExtended().components();
&gt; &gt; &gt; +        return computeHash(c1, c2, c3, alpha, asExtended().colorSpace());
&gt; &gt; 
&gt; &gt; I think computeHash already knows how to hash tuples, so this can be:
&gt; &gt; 
&gt; &gt;     return computeHash(asExtended().components(), asExtended().colorSpace());
&gt; 
&gt; Very cool.

Looks like it&apos;s a bit too strict about how tuple-ish the tuple needs to be. Going to leave it out of this, but will try to fix that up to see if I can make it work with any destructurable object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670741</commentid>
    <comment_count>11</comment_count>
      <attachid>404039</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-11 08:22:51 -0700</bug_when>
    <thetext>Comment on attachment 404039
Patch

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

&gt; Source/WebCore/ChangeLog:35
&gt; +        - 

I&apos;ll remove this before landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670774</commentid>
    <comment_count>12</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-11 13:08:03 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #10)
&gt; (In reply to Sam Weinig from comment #7)
&gt; &gt; (In reply to Darin Adler from comment #6)
&gt; &gt; &gt; Comment on attachment 404033 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/Color.h:336
&gt; &gt; &gt; &gt; +        auto [c1, c2, c3, alpha] = asExtended().components();
&gt; &gt; &gt; &gt; +        return computeHash(c1, c2, c3, alpha, asExtended().colorSpace());
&gt; &gt; &gt; 
&gt; &gt; &gt; I think computeHash already knows how to hash tuples, so this can be:
&gt; &gt; &gt; 
&gt; &gt; &gt;     return computeHash(asExtended().components(), asExtended().colorSpace());
&gt; &gt; 
&gt; &gt; Very cool.
&gt; 
&gt; Looks like it&apos;s a bit too strict about how tuple-ish the tuple needs to be.
&gt; Going to leave it out of this, but will try to fix that up to see if I can
&gt; make it work with any destructurable object.

Added support to computeHash in https://bugs.webkit.org/show_bug.cgi?id=214224.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670790</commentid>
    <comment_count>13</comment_count>
      <attachid>404072</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-11 15:15:54 -0700</bug_when>
    <thetext>Created attachment 404072
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670792</commentid>
    <comment_count>14</comment_count>
      <attachid>404072</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-11 15:35:30 -0700</bug_when>
    <thetext>Comment on attachment 404072
Patch

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

&gt; Source/WebCore/platform/graphics/Color.h:340
&gt; +    return functor(asInline());

Wonder what determines if we should call the function like this or use std::invoke/std::forward. I am guessing std::invoke works on a slightly larger variety of functors?

&gt; Source/WebCore/platform/graphics/ColorSerialization.cpp:167
&gt; +    return color.callOnUnderlyingType([] (auto c) {

Would have preferred a word rather than the letter &quot;c&quot;.

&gt; Source/WebCore/platform/graphics/ColorSerialization.cpp:174
&gt; +    return color.callOnUnderlyingType([] (auto c) {

Ditto.

&gt; Source/WebCore/platform/graphics/ColorSerialization.cpp:181
&gt; +    return color.callOnUnderlyingType([] (auto c) {

Ditto.

&gt; Source/WebCore/platform/graphics/ColorTypes.h:33
&gt; +template&lt;typename T&gt; struct ComponentTraits;

No need for the &quot;T&quot; here.

&gt; Source/WebCore/platform/graphics/ColorTypes.h:53
&gt; +    static constexpr ColorSpace colorSpace = ColorSpace::SRGB;

I would do &quot;constexpr auto&quot; instead of &quot;constexpr ColorSpace&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670797</commentid>
    <comment_count>15</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-11 16:20:26 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #14)
&gt; Comment on attachment 404072 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=404072&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.h:340
&gt; &gt; +    return functor(asInline());
&gt; 
&gt; Wonder what determines if we should call the function like this or use
&gt; std::invoke/std::forward. I am guessing std::invoke works on a slightly
&gt; larger variety of functors?

Yeah, we should probably use invoke here (and probably in more generic contexts). Will fix.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorSerialization.cpp:167
&gt; &gt; +    return color.callOnUnderlyingType([] (auto c) {
&gt; 
&gt; Would have preferred a word rather than the letter &quot;c&quot;.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorSerialization.cpp:174
&gt; &gt; +    return color.callOnUnderlyingType([] (auto c) {
&gt; 
&gt; Ditto.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorSerialization.cpp:181
&gt; &gt; +    return color.callOnUnderlyingType([] (auto c) {
&gt; 
&gt; Ditto.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorTypes.h:33
&gt; &gt; +template&lt;typename T&gt; struct ComponentTraits;
&gt; 
&gt; No need for the &quot;T&quot; here.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorTypes.h:53
&gt; &gt; +    static constexpr ColorSpace colorSpace = ColorSpace::SRGB;
&gt; 
&gt; I would do &quot;constexpr auto&quot; instead of &quot;constexpr ColorSpace&quot;.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670798</commentid>
    <comment_count>16</comment_count>
      <attachid>404075</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-11 16:21:49 -0700</bug_when>
    <thetext>Created attachment 404075
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670804</commentid>
    <comment_count>17</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-07-11 18:01:29 -0700</bug_when>
    <thetext>Committed r264272: &lt;https://trac.webkit.org/changeset/264272&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 404075.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670805</commentid>
    <comment_count>18</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-07-11 18:02:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/65414170&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670944</commentid>
    <comment_count>19</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-07-12 18:11:31 -0700</bug_when>
    <thetext>Committed r264289: &lt;https://trac.webkit.org/changeset/264289&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670947</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-12 18:35:01 -0700</bug_when>
    <thetext>I’m not sure moving the include to the header was the best fix. We might have been able to just forward declare in the header and include only in the files that were using that template.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670954</commentid>
    <comment_count>21</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-07-12 19:52:42 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #20)
&gt; I’m not sure moving the include to the header was the best fix. We might
&gt; have been able to just forward declare in the header and include only in the
&gt; files that were using that template.

I&apos;m surprised by your comment.
WebCore has a lot of template functions and template classes, but less forward declarations for them.
Is it really common idiom in WebCore?

In this case ComponentTraits is used only in ColorUtilities.h. It can be moved to ColorUtilities.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1671049</commentid>
    <comment_count>22</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-13 09:22:32 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #21)
&gt; (In reply to Darin Adler from comment #20)
&gt; &gt; I’m not sure moving the include to the header was the best fix. We might
&gt; &gt; have been able to just forward declare in the header and include only in the
&gt; &gt; files that were using that template.
&gt; 
&gt; I&apos;m surprised by your comment.
&gt; WebCore has a lot of template functions and template classes, but less
&gt; forward declarations for them.
&gt; Is it really common idiom in WebCore?

Maybe not. But forward declaring whenever we can *is* common in WebCore, we may not be doing it as much as we need with templates. Note that template functions don&apos;t always require all their prerequisites just because a header is included. Instantiating the function then requires the prerequisites. That’s how I understand it at least.

Faster building requires including the minimum and reducing includes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1671162</commentid>
    <comment_count>23</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-07-13 14:37:10 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #22)
&gt; Maybe not. But forward declaring whenever we can *is* common in WebCore, we
&gt; may not be doing it as much as we need with templates. Note that template
&gt; functions don&apos;t always require all their prerequisites just because a header
&gt; is included. Instantiating the function then requires the prerequisites.
&gt; That’s how I understand it at least.

OK. Forward template declarations can be useful for the case of
template funcitons and the case of using the pointer or reference
of template classes.

In this case, ComponentTraits is a template class, and ColorUtilities.h is using ComponentTraits members.
Thus, ColorUtilities.h needs ComponentTraits definition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1671164</commentid>
    <comment_count>24</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-13 14:40:13 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #23)
&gt; (In reply to Darin Adler from comment #22)
&gt; In this case, ComponentTraits is a template class, and ColorUtilities.h is
&gt; using ComponentTraits members.
&gt; Thus, ColorUtilities.h needs ComponentTraits definition.

Is that right?

ComponentTraits members are used inside *function templates* in ColorUtilities.h. Does that really mean the class template needs to be *defined* when ColorUtilities.h is included but those function templates are not instantiated?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1671170</commentid>
    <comment_count>25</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-07-13 14:46:42 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #24)
&gt; (In reply to Fujii Hironori from comment #23)
&gt; &gt; (In reply to Darin Adler from comment #22)
&gt; &gt; In this case, ComponentTraits is a template class, and ColorUtilities.h is
&gt; &gt; using ComponentTraits members.
&gt; &gt; Thus, ColorUtilities.h needs ComponentTraits definition.
&gt; 
&gt; Is that right?
&gt; 
&gt; ComponentTraits members are used inside *function templates* in
&gt; ColorUtilities.h. Does that really mean the class template needs to be
&gt; *defined* when ColorUtilities.h is included but those function templates are
&gt; not instantiated?

You are right. Will fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672975</commentid>
    <comment_count>26</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-07-19 18:51:45 -0700</bug_when>
    <thetext>Committed r264588: &lt;https://trac.webkit.org/changeset/264588&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672976</commentid>
    <comment_count>27</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-07-19 19:04:50 -0700</bug_when>
    <thetext>Committed r264589: &lt;https://trac.webkit.org/changeset/264589&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672979</commentid>
    <comment_count>28</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-07-19 19:31:11 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #25)
&gt; You are right. Will fix it.

Filed: Bug 214540 – Use forward template declarations for ColorComponents instead of including ColorComponents.h</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404014</attachid>
            <date>2020-07-10 16:02:29 -0700</date>
            <delta_ts>2020-07-10 16:27:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214204-20200710160228.patch</filename>
            <type>text/plain</type>
            <size>47937</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDIwLTA3LTEwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZWR1Y2Ugc3VyZmFjZSBhcmVhIG9m
IHRoZSBFeHRlbmRlZENvbG9yIGNsYXNzIHRvIGEgYmFyZSBtaW5pbXVtCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQyMDQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkZCBoZWxwZXIgZnVuY3Rpb24g
dG8gQ29sb3IgdG8gb3BlcmF0ZSBvbiB0aGUgdW5kZXJseWluZyBjb2xvciB0eXBlCisgICAgICAg
ICAgYW5kIHJlaW1wbGVtZW50IGEgYnVuY2ggb2YgZnVuY3Rpb25hbGl0eSB1c2luZyBpdCwgcmVk
dWNpbmcgdGhlIG5lZWQKKyAgICAgICAgICBmb3IgZHVwbGljYXRlIGltcGxlbWVudGF0aW9ucyBp
biBFeHRlbmRlZENvbG9yLgorICAgICAgICAtIEFkZCBjb25zdHJ1Y3RvcnMgdG8gQ29sb3IgdGhh
dCB0YWtlIGV4dGVuZGVkIGNvbG9yIHR5cGVzLgorICAgICAgICAgICAgLSBXaGVuIGNvbnN0cnVj
dGluZyBhIENvbG9yIGZyb20gYSBTUkdCQTxmbG9hdD4sIGNoZWNrIHRvIHNlZSBpZiB0aGUKKyAg
ICAgICAgICAgICAgY29sb3IgY2FuIGJlIHJlcHJlc2VudGVkIGxvc3NsZXNzbHkgYnkgYSBTUkdC
QTx1aW50OF90PiBhbmQgaWYgY2FuLAorICAgICAgICAgICAgICBzdG9yZSBpdCBpbmxpbmUuCisK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgIFJlbW92ZSBFeHRlbmVkQ29sb3IuY3BwCisKKyAgICAgICAg
KiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRl
cnMpOgorICAgICAgICBVc2UgbmV3IENvbG9yIGNvbnN0cnVjdG9yIHRha2luZyBDb2xvckNvbXBv
bmVudHMgYW5kIENvbG9yU3BhY2UuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvbXBvc2l0ZU9wZXJhdG9yRm9yQmFja2dyb3VuZENv
bG9yIGNvbnN0KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFydCBjb25zdCk6CisgICAg
ICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tOgorICAgICAgICAobm9ybWFsaXpl
ZENvbG9yKToKKyAgICAgICAgVXBkYXRlIGZvciByZW5hbWUgZnJvbSBDb2xvcjo6aXNCbGFja0Nv
bG9yL0NvbG9yOjppc1doaXRlQ29sb3IgdG8gQ29sb3I6OmlzQmxhY2svQ29sb3I6OmlzV2hpdGUu
CisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6aGFzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y2FsbE9u
VW5kZXJseWluZ1R5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFM
b3NzeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2V0Q29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6OmlzQmxhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omlz
V2hpdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6c2V0SW5saW5lQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmlzQmxhY2tDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
aXNXaGl0ZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ckNvbnZlcnNpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvU1JHQkEpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9MaW5lYXJTUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjp0b0Rpc3BsYXlQMyk6Cisg
ICAgICAgIChXZWJDb3JlOjp0b0xpbmVhckRpc3BsYXlQMyk6CisgICAgICAgIChXZWJDb3JlOjp0
b0hTTEEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OnNlcmlhbGl6YXRpb25Gb3JDU1MpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXphdGlvbkZv
ckhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1Rl
eHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6aXNCbGFj
ayk6CisgICAgICAgIChXZWJDb3JlOjppc1doaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9FeHRlbmRlZENvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6RXh0ZW5kZWRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjpjYWxsT25VbmRlcmx5aW5nVHlwZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjp0b1NSR0JBTG9zc3kgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzaG91bGREdW1wUHJvcGVy
dHlGb3JMYXllciBjb25zdCk6CisKIDIwMjAtMDctMTAgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBw
bGUuY29tPgogCiAgICAgICAgIFBhcnQgNCBvZiBTaW1wbGVDb2xvciBhbmQgU1JHQkE8dWludDhf
dD4gYXJlIGVzc2VudGlhbGx5IHRoZSBzYW1lIC0gbGV0J3MgY29udmVyZ2UgdGhlbQpJbmRleDog
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQJKHJldmlzaW9uIDI2NDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xODI3LDcgKzE4MjcsNiBAQCBwbGF0Zm9ybS9ncmFwaGlj
cy9DdXN0b21QYWludEltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hN
b25pdG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5jcHAK
LXBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY0MjMwKQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC03MjI4LDcgKzcyMjgsNiBAQAogCQkzMUQyNkJDNTFGODZEMjY4MDA4RkYyNTUg
LyogSlNJbWFnZUJpdG1hcE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNJbWFnZUJpdG1hcE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MzFEMjZCQzYxRjg2RDI2OTAwOEZGMjU1IC8qIEpTSW1hZ2VCaXRtYXAuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbWFnZUJpdG1hcC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTMxRDU5MUIxMTY2OTdBNkMwMEU2QkYwMiAvKiBQbHVnSW5DbGll
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z0luQ2xpZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxRENERjQxMURBMUM0NTQwMEVBNUI5MyAvKiBF
eHRlbmRlZENvbG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4
dGVuZGVkQ29sb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMURDREY0MjFE
QTFDNDU0MDBFQTVCOTMgLyogRXh0ZW5kZWRDb2xvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFeHRlbmRlZENvbG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxREVBNDUzMUIzOUY0RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU3lzdGVtQmFja2Ryb3BM
YXllci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFERUE0NTQxQjM5RjREOTAw
Rjc3MTc4IC8qIFdlYlN5c3RlbUJhY2tkcm9wTGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViU3lzdGVtQmFja2Ryb3BMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTk1ODIsOCArMTk1ODEsOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNTE1
QkUxOTcxRDU0RjZCRDAwREQ3QzY4IC8qIEhJREdhbWVwYWQuY3BwICovLAogCQkJCTUxNUJFMTk4
MUQ1NEY2QkQwMEREN0M2OCAvKiBISURHYW1lcGFkLmggKi8sCi0JCQkJNTE1QkUxOTkxRDU0RjZC
RDAwREQ3QzY4IC8qIEhJREdhbWVwYWRQcm92aWRlci5tbSAqLywKIAkJCQk1MTVCRTE5QTFENTRG
NkJEMDBERDdDNjggLyogSElER2FtZXBhZFByb3ZpZGVyLmggKi8sCisJCQkJNTE1QkUxOTkxRDU0
RjZCRDAwREQ3QzY4IC8qIEhJREdhbWVwYWRQcm92aWRlci5tbSAqLywKIAkJCQk1MTdFMDNGNDI0
QjZCOTYzMDA1NDg5NUEgLyogTXVsdGlHYW1lcGFkUHJvdmlkZXIuaCAqLywKIAkJCQk1MTdFMDNG
NTI0QjZCOTY0MDA1NDg5NUEgLyogTXVsdGlHYW1lcGFkUHJvdmlkZXIubW0gKi8sCiAJCQkpOwpA
QCAtMjU1NTYsNyArMjU1NTUsNiBAQAogCQkJCTJEMjlFQ0MyMTkyRUNDODMwMDk4NEI3OCAvKiBE
aXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuaCAqLywKIAkJCQkyRDI5RUNDMzE5MkVDQzgzMDA5
ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5jcHAgKi8sCiAJCQkJMkQyOUVD
QzQxOTJFQ0M4MzAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuaCAqLywK
LQkJCQkzMURDREY0MTFEQTFDNDU0MDBFQTVCOTMgLyogRXh0ZW5kZWRDb2xvci5jcHAgKi8sCiAJ
CQkJMzFEQ0RGNDIxREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuaCAqLywKIAkJCQk2
RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uc0dMLmggKi8sCiAJCQkJQjI3NTM1
M0EwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuY3BwICovLApAQCAtMjY4ODAsNyArMjY4
NzgsNiBAQAogCQlDRDk0QTVDQjFGNzFDQjQ2MDBGNTI1QzUgLyogZW5jcnlwdGVkbWVkaWEgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUNERTNBRTEzMjRC
NDkzNkYwMDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuY3BwICovLAogCQkJCUNEOTRBNUQ5MUY3MUNC
OUYwMEY1MjVDNSAvKiBjbGVhcmtleSAqLywKIAkJCQlDREY3NTY5QjIxNUMyM0E0MDBFRkNCNTAg
LyogQ0RNRW5jcnlwdGlvblNjaGVtZS5oICovLAogCQkJCUNEOTRBNUQxMUY3MUNCNkIwMEY1MjVD
NSAvKiBDRE1GYWN0b3J5LmNwcCAqLywKQEAgLTI2ODk1LDEyICsyNjg5MiwxMyBAQAogCQkJCUNE
OTRBNUQ2MUY3MUNCNkQwMEY1MjVDNSAvKiBDRE1NZXNzYWdlVHlwZS5oICovLAogCQkJCUNEM0NF
MTFDMjQwNDUxQUYwMDRCQTAxRCAvKiBDRE1Qcml2YXRlLmNwcCAqLywKIAkJCQlDRDk0QTVDRjFG
NzFDQjZBMDBGNTI1QzUgLyogQ0RNUHJpdmF0ZS5oICovLAotCQkJCUNERTNBRTEwMjRCNDkxNjkw
MDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuaCAqLywKIAkJCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1
RDUgLyogQ0RNUHJveHkuY3BwICovLAogCQkJCUNEOTRBNUNGMUY3MUNCNjEwMEY1MjVDNSAvKiBD
RE1Qcm94eS5oICovLAogCQkJCUNEOTRBNUNDMUY3MUNCNjkwMEY1MjVDNSAvKiBDRE1SZXF1aXJl
bWVudC5oICovLAogCQkJCUNEOTRBNUQwMUY3MUNCNkIwMEY1MjVDNSAvKiBDRE1SZXN0cmljdGlv
bnMuaCAqLywKIAkJCQlDRDk0QTVENTFGNzFDQjZEMDBGNTI1QzUgLyogQ0RNU2Vzc2lvblR5cGUu
aCAqLywKKwkJCQlDREUzQUUxMzI0QjQ5MzZGMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmNwcCAq
LywKKwkJCQlDREUzQUUxMDI0QjQ5MTY5MDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmggKi8sCiAJ
CQkpOwogCQkJcGF0aCA9IGVuY3J5cHRlZG1lZGlhOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKQEAgLTMwMDgyLDYgKzMwMDgwLDcgQEAKIAkJCQlDRDNDRTEwMzI0MDFBQURBMDA0QkEwMUQg
LyogQ0RNUmVzdHJpY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREU1OTU5NzFCRjI2RTIx
MDBBMUNCRTggLyogQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQ0QzQ0UxMDQyNDAxQUFEQTAwNEJBMDFEIC8qIENETVNlc3Npb25UeXBlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlDREUzQUUxMjI0QjQ5MTZBMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1RkE5MDRDQTE3OEU2MUY1MDA0QzhBMkQgLyogQ2VydGlmaWNh
dGVJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MUI4RjBCNTIxOTUzRDY1MDAwQzJCMDAgLyog
Q2VydGlmaWNhdGVJbmZvQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzNkZEMTUxNkM3ODI2
NTAwRjg4N0MxIC8qIENoYW5nZVZlcnNpb25EYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMjE5
LDcgKzMxMjE4LDYgQEAKIAkJCQlGMzQ0Qzc1MzExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0EwRTc3MEYxMEMwMEE4
ODAwQTAyNzZFIC8qIEluc3BlY3RvckZyb250ZW5kSG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0E1NDg1ODAxNEUwMkQ1MTAwNkFFMDVBIC8qIEluc3BlY3Rvckhpc3RvcnkuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUNERTNBRTEyMjRCNDkxNkEwMDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1QjgxQ0FFMUZBQTQ0NjIwMDM3RDFFNiAvKiBJbnNwZWN0b3JJbmRl
eGVkREJBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjBENjI5MjcxMjUzNjkwQjAwMDgxNTQz
IC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NjBF
NkQyMzBERTMwMzAwNDYxQUFFIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvblB1YmxpYy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMjQwMiw2ICszMjQwMCw3IEBACiAJCQkJODUwMzFCNDgwQTQ0RUZD
NzAwRjk5MkUwIC8qIE1vdXNlUmVsYXRlZEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMw
OURGQzA5OUU2NDkyMDA1NkU1ODEgLyogTW92ZVNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZEQjE3MDA2MTRBMkJBQjIwMEEyQjVEOSAvKiBNdWx0aUNoYW5uZWxSZXNhbXBs
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxN0UwM0Y3MjRCNkQ5ODQwMDU0ODk1QSAvKiBNdWx0
aUdhbWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2QjAxQjNCNjVBQzAw
MDVERDc5IC8qIE11dGFibGVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2QjExQjNC
NjVBQzAwMDVERDc5IC8qIE11dGFibGVSYW5nZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM2
RjA5MDBBMTQzMjdCNjEwMDY4NTg0OSAvKiBNdXRhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAq
LywKQEAgLTMzMjgxLDcgKzMzMjgwLDYgQEAKIAkJCQlFQ0E2ODBDNzFFNjc3MjQ1MDA3MzFEMjAg
LyogU3RyaW5nVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5QjZDNDE1MzEzNDQ5NDkw
MDAwODVCNjIgLyogU3RyaW5nV2l0aERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ5
Rjc3NzYwRUZFQzYyMDAwOTA4NDlEIC8qIFN0cm9rZVN0eWxlQXBwbGllci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNTE3RTAzRjcyNEI2RDk4NDAwNTQ4OTVBIC8qIE11bHRpR2FtZXBhZFByb3ZpZGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTRCODIwNTFENkRGMEU1MDA3N0VCRTMgLyogU3RydWN0
dXJlZENsb25lLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDVCQTZCNjIzNzYyMkEzMDA0REZDMDcg
LyogU3R5bGVBZGp1c3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI2QTMwRTgxREM0RjAw
QjI1OTY1IC8qIFN0eWxlQmFja2dyb3VuZERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ0NzMs
NiArMzQ0NzEsNyBAQAogCQkJCUNEREUwMkVEMThCM0VENkQwMENGN0ZGMSAvKiBDRE1TZXNzaW9u
QVZGb3VuZGF0aW9uT2JqQy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEREUwMkYwMThCNTY1MTMw
MENGN0ZGMSAvKiBDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQ0RFNTk1OUQxQkYyNzU3MTAwQTFDQkU4IC8qIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9i
akMubW0gaW4gU291cmNlcyAqLywKKwkJCQlDREUzQUUxNDI0QjQ5MzcwMDAxMjhFN0UgLyogQ0RN
VXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExNDA5MEZCMUFBNTFFMUQwMDkxMTkx
QSAvKiBDb250ZW50RmlsdGVyVW5ibG9ja0hhbmRsZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTA3QUZGNDIzMUVGQjE0NDkwMEI1NDVCMyAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9T
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDZDNjk2Q0MxRTcyMDVGQzAwNTk3OTM3IC8qIENQVU1v
bml0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zNDgwMiw3ICszNDgwMSw2IEBACiAJCQkJREVD
QTdEQjcxRjlFNjdCNjAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNjcuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJREVDQTdEQjgxRjlFNjdCNjAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNjguY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJREVDQTdEQjkxRjlFNjdCNjAwRTNCNjYxIC8qIFVuaWZpZWRT
b3VyY2UxNjkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RFM0FFMTQyNEI0OTM3MDAwMTI4RTdF
IC8qIENETVV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBN0RCQTFGOUU2N0I2
MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTE3MC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNB
N0RGQjFGOUVCMzY0MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTE3MS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlERUNBN0RGQzFGOUVCMzY0MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTE3Mi5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI2NDIzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjU4LDcgKzY1OCw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVu
Y3Rpb25QYXJhbWV0ZXIKICAgICAgICAgY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkRpc3BsYXlQ
MzsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7
CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIGNvbnN1bWVJZGVudChhcmdzKTsKIApA
QCAtNjc2LDcgKzY3Niw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0
ZXIKICAgICAgICAgaWYgKCFhbHBoYVBhcmFtZXRlcikKICAgICAgICAgICAgIGFscGhhUGFyYW1l
dGVyID0gY29uc3VtZU51bWJlcihhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKICAgICAgICAgaWYgKCFh
bHBoYVBhcmFtZXRlcikKLSAgICAgICAgICAgIHJldHVybiBDb2xvcigpOworICAgICAgICAgICAg
cmV0dXJuIHsgfTsKIAogICAgICAgICBjb2xvckNoYW5uZWxzWzNdID0gc3RkOjptYXgoMC4wLCBz
dGQ6Om1pbigxLjAsIGFscGhhUGFyYW1ldGVyLT5pc1BlcmNlbnRhZ2UoKSA/IChhbHBoYVBhcmFt
ZXRlci0+ZG91YmxlVmFsdWUoKSAvIDEwMCkgOiBhbHBoYVBhcmFtZXRlci0+ZG91YmxlVmFsdWUo
KSkpOwogICAgIH0KQEAgLTY4NCw5ICs2ODQsOSBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1
bmN0aW9uUGFyYW1ldGVyCiAgICAgLy8gRklYTUU6IFN1cHBvcnQgdGhlIGNvbW1hLXNlcGFyYXRl
ZCBsaXN0IG9mIGZhbGxiYWNrIGNvbG9yIHZhbHVlcy4KIAogICAgIGlmICghYXJncy5hdEVuZCgp
KQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAKLSAgICByZXR1cm4gbWFrZUV4dGVuZGVk
Q29sb3IoY29sb3JDaGFubmVsc1swXSwgY29sb3JDaGFubmVsc1sxXSwgY29sb3JDaGFubmVsc1sy
XSwgY29sb3JDaGFubmVsc1szXSwgY29sb3JTcGFjZSk7CisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICByZXR1cm4gQ29sb3IgeyBDb2xvckNvbXBvbmVudHMgeyBzdGF0aWNfY2FzdDxmbG9hdD4o
Y29sb3JDaGFubmVsc1swXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckNoYW5uZWxzWzFdKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQ2hhbm5lbHNbMl0pLCBzdGF0aWNfY2FzdDxmbG9hdD4o
Y29sb3JDaGFubmVsc1szXSkgfSwgY29sb3JTcGFjZSB9OwogfQogCiBzdGF0aWMgT3B0aW9uYWw8
U1JHQkE8dWludDhfdD4+IHBhcnNlSGV4Q29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGJvb2wgYWNjZXB0UXVpcmt5Q29sb3JzKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShy
ZXZpc2lvbiAyNjQyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MjIxLDcgKzcyMjEsNyBAQCBPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0
aW9ucz4gRG9jdW1lbnQ6CiAKIENvbXBvc2l0ZU9wZXJhdG9yIERvY3VtZW50Ojpjb21wb3NpdGVP
cGVyYXRvckZvckJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IFJlbmRl
ck9iamVjdCYgcmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgaWYgKExJS0VMWSghc2V0dGluZ3MoKS5w
dW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKCkgfHwgIUNvbG9yOjppc1doaXRlQ29s
b3IoY29sb3IpIHx8ICFyZW5kZXJlci51c2VEYXJrQXBwZWFyYW5jZSgpKSkKKyAgICBpZiAoTElL
RUxZKCFzZXR0aW5ncygpLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUoKSB8fCAh
Q29sb3I6OmlzV2hpdGUoY29sb3IpIHx8ICFyZW5kZXJlci51c2VEYXJrQXBwZWFyYW5jZSgpKSkK
ICAgICAgICAgcmV0dXJuIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyOwogCiAgICAgYXV0
byogZnJhbWVWaWV3ID0gdmlldygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAko
cmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MDMwLDggKzQwMzAsOCBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6
OmZvbnRBdHRyaWJ1dGVzQXRTCiAgICAgICAgIGF0dHJpYnV0ZXMuYmFja2dyb3VuZENvbG9yID0g
YmFja2dyb3VuZENvbG9yOwogCiAgICAgYXV0byBmb3JlZ3JvdW5kQ29sb3IgPSBzdHlsZS0+dmlz
aXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKENTU1Byb3BlcnR5Q29sb3IpOwotICAg
IC8vIEZJWE1FOiBpc0JsYWNrQ29sb3Igbm90IHN1aXRhYmxlIGZvciBkYXJrIG1vZGUuCi0gICAg
aWYgKGZvcmVncm91bmRDb2xvci5pc1ZhbGlkKCkgJiYgIUNvbG9yOjppc0JsYWNrQ29sb3IoZm9y
ZWdyb3VuZENvbG9yKSkKKyAgICAvLyBGSVhNRTogQ29sb3I6OmlzQmxhY2sgbm90IHN1aXRhYmxl
IGZvciBkYXJrIG1vZGUuCisgICAgaWYgKGZvcmVncm91bmRDb2xvci5pc1ZhbGlkKCkgJiYgIUNv
bG9yOjppc0JsYWNrKGZvcmVncm91bmRDb2xvcikpCiAgICAgICAgIGF0dHJpYnV0ZXMuZm9yZWdy
b3VuZENvbG9yID0gZm9yZWdyb3VuZENvbG9yOwogCiAgICAgaWYgKGF1dG8qIHNoYWRvd0RhdGEg
PSBzdHlsZS0+dGV4dFNoYWRvdygpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9IVE1MQ29udmVydGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvSFRNTENvbnZlcnRlci5tbQkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NTks
MTAgKzg1OSwxMCBAQCBzdGF0aWMgQ29sb3Igbm9ybWFsaXplZENvbG9yKENvbG9yIGNvbG9yCiAg
ICAgICAgIHJldHVybiBjb2xvcjsKIAogICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UgPSBlbGVt
ZW50LmRvY3VtZW50KCkudXNlRGFya0FwcGVhcmFuY2UoZWxlbWVudC5leGlzdGluZ0NvbXB1dGVk
U3R5bGUoKSk7Ci0gICAgaWYgKHVzZURhcmtBcHBlYXJhbmNlICYmIENvbG9yOjppc1doaXRlQ29s
b3IoY29sb3IpKQorICAgIGlmICh1c2VEYXJrQXBwZWFyYW5jZSAmJiBDb2xvcjo6aXNXaGl0ZShj
b2xvcikpCiAgICAgICAgIHJldHVybiBDb2xvcigpOwogCi0gICAgaWYgKCF1c2VEYXJrQXBwZWFy
YW5jZSAmJiBDb2xvcjo6aXNCbGFja0NvbG9yKGNvbG9yKSkKKyAgICBpZiAoIXVzZURhcmtBcHBl
YXJhbmNlICYmIENvbG9yOjppc0JsYWNrKGNvbG9yKSkKICAgICAgICAgcmV0dXJuIENvbG9yKCk7
CiAKICAgICByZXR1cm4gY29sb3I7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjQyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiw5IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKIAotI2luY2x1ZGUgIkFu
aW1hdGlvblV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgogI2lu
Y2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTEyNiwyMiArMTIzLDI2IEBAIGZsb2F0IENvbG9yOjpsdW1pbmFuY2UoKSBjb25z
dAogCiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0CiB7Ci0g
ICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5jb2xvcldp
dGhBbHBoYShhbHBoYSk7Ci0KLSAgICBDb2xvciByZXN1bHQgPSBjb2xvcldpdGhPdmVycmlkZW5B
bHBoYShhc0lubGluZSgpLCBhbHBoYSk7Ci0KLSAgICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZp
bmcgdGhlIHNlbWFudGljIGJpdCBkZXNpcmVkIGFuZC9vciBjb3JyZWN0IGhlcmU/Ci0gICAgaWYg
KGlzU2VtYW50aWMoKSkKLSAgICAgICAgcmVzdWx0LnRhZ0FzU2VtYW50aWMoKTsKLSAgICByZXR1
cm4gcmVzdWx0OworICAgIHJldHVybiBjYWxsT25VbmRlcmx5aW5nVHlwZShXVEY6Om1ha2VWaXNp
dG9yKAorICAgICAgICBbJl0gKGNvbnN0IFNSR0JBPHVpbnQ4PiYgY29sb3IpIC0+IENvbG9yIHsK
KyAgICAgICAgICAgIENvbG9yIHJlc3VsdCA9IGNvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbG9y
LCBhbHBoYSk7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXaHkgaXMgcHJlc2VydmluZyB0aGUg
c2VtYW50aWMgYml0IGRlc2lyZWQgYW5kL29yIGNvcnJlY3QgaGVyZT8KKyAgICAgICAgICAgIGlm
IChpc1NlbWFudGljKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LnRhZ0FzU2VtYW50aWMoKTsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoY29u
c3QgYXV0byYgY29sb3IpIC0+IENvbG9yIHsKKyAgICAgICAgICAgIHJldHVybiBjb2xvcldpdGhP
dmVycmlkZW5BbHBoYShjb2xvciwgYWxwaGEpOworICAgICAgICB9CisgICAgKSk7CiB9CiAKIENv
bG9yIENvbG9yOjppbnZlcnRlZENvbG9yV2l0aEFscGhhKGZsb2F0IGFscGhhKSBjb25zdAogewot
ICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuaW52ZXJ0
ZWRDb2xvcldpdGhBbHBoYShhbHBoYSk7Ci0gICAgcmV0dXJuIGludmVydGVkQ29sb3JXaXRoT3Zl
cnJpZGVuQWxwaGEoYXNJbmxpbmUoKSwgYWxwaGEpOworICAgIHJldHVybiBjYWxsT25VbmRlcmx5
aW5nVHlwZShbJl0gKGNvbnN0IGF1dG8mIGNvbG9yKSAtPiBDb2xvciB7CisgICAgICAgIHJldHVy
biBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbG9yLCBhbHBoYSk7CisgICAgfSk7
CiB9CiAKIENvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjY0MjMwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlNpbXBsZUNvbG9yLmgiCiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogI2lmIFVTRShDRykKQEAgLTUx
LDYgKzUyLDE4IEBAIHR5cGVkZWYgc3RydWN0IF9HZGtSR0JBIEdka1JHQkE7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorLy8gQWJsZSB0byByZXByZXNlbnQ6CisvLyAgICAtIFNwZWNpYWwgImlu
dmFsaWQgY29sb3IiIHN0YXRlCisvLyAgICAtIDR4IDgtYml0ICgwLTI1NSkgc1JHQkEsIHN0b3Jl
ZCBpbmxpbmUsIG5vIGFsbG9jYXRpb24KKy8vICAgIC0gNHggZmxvYXQgKDAtMSkgc1JHQkEsIHN0
b3JlZCBpbiBhIHJlZmVyZW5jZSBjb3VudGVkIHN1Yi1vYmplY3QKKy8vICAgIC0gNHggZmxvYXQg
KDAtMSkgTGluZWFyIHNSR0JBLCBzdG9yZWQgaW4gYSByZWZlcmVuY2UgY291bnRlZCBzdWItb2Jq
ZWN0CisvLyAgICAtIDR4IGZsb2F0ICgwLTEpIERpc3BsYXlQMywgc3RvcmVkIGluIGEgcmVmZXJl
bmNlIGNvdW50ZWQgc3ViLW9iamVjdAorLy8KKy8vIEFkZGl0aW9uYWxseSwgdGhlIGlubGluZSA4
LWJpdCBzUkdCQSBjYW4gaGF2ZSBhbiBvcHRpb25hbCAic2VtYW50aWMiIGJpdCBzZXQgb24gaXQs
CisvLyB3aGljaCBpbmRpY2F0ZXMgdGhlIGNvbG9yIG9yaWdpbmF0ZWQgZnJvbSBhIENTUyBzZW1h
bnRpYyBjb2xvciBuYW1lLgorLy8gRklYTUU6IElmIHdlIGtlZXAgdGhlICJzZW1hbnRpYyIgYml0
IG9uIENvbG9yLCB3ZSBzaG91bGQgZXh0ZW5kIHN1cHBvcnQgdG8gYWxsIGNvbG9ycywKKy8vIG5v
dCBqdXN0IGlubGluZSBvbmVzLCBieSB1c2luZyB0aGUgdW51c2VkIHBvaW50ZXIgYml0cy4KKwog
Y2xhc3MgQ29sb3IgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAt
NjMsNyArNzYsMTAgQEAgcHVibGljOgogICAgIENvbG9yKFNSR0JBPHVpbnQ4X3Q+LCBTZW1hbnRp
Y1RhZyk7CiAgICAgQ29sb3IoT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+LCBTZW1hbnRpY1RhZyk7
CiAKLSAgICBDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJik7CisgICAgQ29sb3IoQ29sb3JDb21w
b25lbnRzPGZsb2F0PiwgQ29sb3JTcGFjZSk7CisgICAgQ29sb3IoY29uc3QgU1JHQkE8ZmxvYXQ+
Jik7CisgICAgQ29sb3IoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+Jik7CisgICAgQ29sb3IoY29u
c3QgRGlzcGxheVAzPGZsb2F0PiYpOwogCiAgICAgZXhwbGljaXQgQ29sb3IoV1RGOjpIYXNoVGFi
bGVFbXB0eVZhbHVlVHlwZSk7CiAgICAgZXhwbGljaXQgQ29sb3IoV1RGOjpIYXNoVGFibGVEZWxl
dGVkVmFsdWVUeXBlKTsKQEAgLTcyLDM0ICs4OCwzNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9F
WFBPUlQgQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDb2xv
ciYmKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yJiBvcGVyYXRvcj0oY29uc3QgQ29sb3Im
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciYgb3BlcmF0b3I9KENvbG9yJiYpOworCiAgICAg
fkNvbG9yKCk7CiAKLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVk
KCkgfHwgKG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgJiB2YWxpZElubGluZUNvbG9y
Qml0KTsgfQorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKIAotICAgIC8vIFRydWUgaWYgdGhl
IGNvbG9yIG9yaWdpbmF0ZWQgZnJvbSBhIENTUyBzZW1hbnRpYyBjb2xvciBuYW1lLgorICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSB8fCAobV9jb2xvckRhdGEu
aW5saW5lQ29sb3JBbmRGbGFncyAmIHZhbGlkSW5saW5lQ29sb3JCaXQpOyB9CiAgICAgYm9vbCBp
c1NlbWFudGljKCkgY29uc3QgeyByZXR1cm4gaXNJbmxpbmUoKSAmJiAobV9jb2xvckRhdGEuaW5s
aW5lQ29sb3JBbmRGbGFncyAmIGlzU2VtYW50aWNJbmxpbmVDb2xvckJpdCk7IH0KIAorCiAgICAg
Ym9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQo
KS5hbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCkuYWxwaGEgPT0gMjU1OyB9CiAgICAgYm9vbCBp
c1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxw
aGEoKSA+IDAuMCA6IGFzSW5saW5lKCkuYWxwaGEgPiAwOyB9CiAKICAgICB1aW50OF90IGFscGhh
KCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gY29udmVydFRvQ29tcG9uZW50Qnl0ZShh
c0V4dGVuZGVkKCkuYWxwaGEoKSkgOiBhc0lubGluZSgpLmFscGhhOyB9CiAgICAgZmxvYXQgYWxw
aGFBc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFs
cGhhKCkgOiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChhc0lubGluZSgpLmFscGhhKTsgfQogCi0g
ICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGx1bWlu
YW5jZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGxpZ2h0bmVzcygpIGNvbnN0
OyAvLyBGSVhNRTogUmVwbGFjZSByZW1haW5pbmcgdXNlcyB3aXRoIGx1bWluYW5jZS4KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8Zmxv
YXQ+PiBjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0OworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4gZGVjbHR5cGUoYXV0bykgY2FsbE9uVW5kZXJseWluZ1R5cGUoRnVuY3Rv
ciYmKSBjb25zdDsKIAogICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNvbG9yc3Bh
Y2UgY29sb3JzIGludG8gc1JHQi4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTUkdCQTxUPiB0
b1NSR0JBTG9zc3koKSBjb25zdDsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxDb2xv
clNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+PiBjb2xvclNwYWNlQW5kQ29tcG9uZW50cygp
IGNvbnN0OworCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IgbGlnaHRlbmVkKCkgY29uc3Q7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IgZGFya2VuZWQoKSBjb25zdDsKIAotICAgIFdFQkNPUkVf
RVhQT1JUIGZsb2F0IGx1bWluYW5jZSgpIGNvbnN0OwotCi0gICAgLy8gRklYTUU6IFJlcGxhY2Ug
cmVtYWluaW5nIHVzZXMgd2l0aCBsdW1pbmFuY2UuCi0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQg
bGlnaHRuZXNzKCkgY29uc3Q7Ci0KICAgICBDb2xvciBpbnZlcnRlZENvbG9yV2l0aEFscGhhKE9w
dGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3Q7CiAgICAgQ29sb3IgaW52ZXJ0ZWRDb2xvcldpdGhB
bHBoYShmbG9hdCBhbHBoYSkgY29uc3Q7CiAKQEAgLTE0NCwyMiArMTYzLDI0IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBFeHRlbmRlZENvbG9yJiBhc0V4dGVuZGVkKCkgY29uc3Q7CiAgICAgU1JHQkE8
dWludDhfdD4gYXNJbmxpbmUoKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yJiBv
cGVyYXRvcj0oY29uc3QgQ29sb3ImKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciYgb3BlcmF0
b3I9KENvbG9yJiYpOwotCiAgICAgLy8gRXh0ZW5kZWQgYW5kIG5vbi1leHRlbmRlZCBjb2xvcnMg
d2lsbCBhbHdheXMgYmUgbm9uLWVxdWFsLgogICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29u
c3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKTsKICAgICBmcmllbmQgYm9vbCBlcXVhbElnbm9y
aW5nU2VtYW50aWNDb2xvcihjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpOwogICAgIGZy
aWVuZCBib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYp
OwogCi0gICAgc3RhdGljIGJvb2wgaXNCbGFja0NvbG9yKGNvbnN0IENvbG9yJik7Ci0gICAgc3Rh
dGljIGJvb2wgaXNXaGl0ZUNvbG9yKGNvbnN0IENvbG9yJik7CisgICAgc3RhdGljIGJvb2wgaXNC
bGFjayhjb25zdCBDb2xvciYpOworICAgIHN0YXRpYyBib29sIGlzV2hpdGUoY29uc3QgQ29sb3Im
KTsKIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+
IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBzZXRJbmxpbmVDb2xvcihT
UkdCQTx1aW50OF90Pik7CisgICAgQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYpOworCisgICAg
dm9pZCBzZXRDb2xvcihTUkdCQTx1aW50OF90Pik7CisgICAgdm9pZCBzZXRDb2xvcihjb25zdCBT
UkdCQTxmbG9hdD4mKTsKKyAgICB2b2lkIHNldENvbG9yKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0
PiYpOworICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOwogICAgIHZv
aWQgc2V0RXh0ZW5kZWRDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJik7CiAKICAgICB2b2lkIHRh
Z0FzU2VtYW50aWMoKSB7IG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgfD0gaXNTZW1h
bnRpY0lubGluZUNvbG9yQml0OyB9CkBAIC0yMjcsMjkgKzI0OCw1OSBAQCBpbmxpbmUgYm9vbCBl
cXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihjCiAKIGlubGluZSBDb2xvcjo6Q29sb3IoU1JHQkE8
dWludDhfdD4gY29sb3IpCiB7Ci0gICAgc2V0SW5saW5lQ29sb3IoY29sb3IpOworICAgIHNldENv
bG9yKGNvbG9yKTsKIH0KIAogaW5saW5lIENvbG9yOjpDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50
OF90Pj4gY29sb3IpCiB7CiAgICAgaWYgKGNvbG9yKQotICAgICAgICBzZXRJbmxpbmVDb2xvcigq
Y29sb3IpOworICAgICAgICBzZXRDb2xvcigqY29sb3IpOwogfQogCiBpbmxpbmUgQ29sb3I6OkNv
bG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yLCBTZW1hbnRpY1RhZykKIHsKLSAgICBzZXRJbmxpbmVD
b2xvcihjb2xvcik7CisgICAgc2V0Q29sb3IoY29sb3IpOwogICAgIHRhZ0FzU2VtYW50aWMoKTsK
IH0KIAogaW5saW5lIENvbG9yOjpDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gY29sb3Is
IFNlbWFudGljVGFnKQogewogICAgIGlmIChjb2xvcikgewotICAgICAgICBzZXRJbmxpbmVDb2xv
cigqY29sb3IpOworICAgICAgICBzZXRDb2xvcigqY29sb3IpOwogICAgICAgICB0YWdBc1NlbWFu
dGljKCk7CiAgICAgfQogfQogCitpbmxpbmUgQ29sb3I6OkNvbG9yKENvbG9yQ29tcG9uZW50czxm
bG9hdD4gY29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIHN3aXRjaCAo
Y29sb3JTcGFjZSkgeworICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoKKyAgICAgICAgc2V0Q29s
b3IoYXNTUkdCQShjb21wb25lbnRzKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbG9y
U3BhY2U6OkxpbmVhclJHQjoKKyAgICAgICAgc2V0Q29sb3IoYXNMaW5lYXJTUkdCQShjb21wb25l
bnRzKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoK
KyAgICAgICAgc2V0Q29sb3IoYXNEaXNwbGF5UDMoY29tcG9uZW50cykpOworICAgICAgICByZXR1
cm47CisgICAgfQorfQorCitpbmxpbmUgQ29sb3I6OkNvbG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYg
Y29sb3IpCit7CisgICAgc2V0Q29sb3IoY29sb3IpOworfQorCitpbmxpbmUgQ29sb3I6OkNvbG9y
KGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAgc2V0Q29sb3IoY29sb3Ip
OworfQorCitpbmxpbmUgQ29sb3I6OkNvbG9yKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9y
KQoreworICAgIHNldENvbG9yKGNvbG9yKTsKK30KKwogaW5saW5lIENvbG9yOjpDb2xvcihSZWY8
RXh0ZW5kZWRDb2xvcj4mJiBleHRlbmRlZENvbG9yKQogewogICAgIHNldEV4dGVuZGVkQ29sb3Io
V1RGTW92ZShleHRlbmRlZENvbG9yKSk7CkBAIC0yODAsMTkgKzMzMSwzNiBAQCBpbmxpbmUgQ29s
b3I6On5Db2xvcigpCiAKIGlubGluZSB1bnNpZ25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0CiB7Ci0g
ICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5oYXNoKCk7
CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkgeworICAgICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBo
YV0gPSBhc0V4dGVuZGVkKCkuY29tcG9uZW50cygpOworICAgICAgICByZXR1cm4gY29tcHV0ZUhh
c2goYzEsIGMyLCBjMywgYWxwaGEsIGFzRXh0ZW5kZWQoKS5jb2xvclNwYWNlKCkpOworICAgIH0K
ICAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3Mp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTUkdCQTxUPiBDb2xvcjo6dG9TUkdCQUxvc3N5
KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGRlY2x0eXBlKGF1dG8pIENvbG9y
OjpjYWxsT25VbmRlcmx5aW5nVHlwZShGdW5jdG9yJiYgZnVuY3RvcikgY29uc3QKIHsKICAgICBp
ZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLnRvU1JHQkFMb3Nz
eTxUPigpOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4pCi0g
ICAgICAgIHJldHVybiBhc0lubGluZSgpOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1l
X3Y8VCwgZmxvYXQ+KQotICAgICAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKGFz
SW5saW5lKCkpOworICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmNhbGxPblVuZGVybHlpbmdU
eXBlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CisgICAgcmV0dXJuIGZ1bmN0b3Io
YXNJbmxpbmUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFNSR0JBPFQ+IENvbG9yOjp0
b1NSR0JBTG9zc3koKSBjb25zdAoreworICAgIHJldHVybiBjYWxsT25VbmRlcmx5aW5nVHlwZShX
VEY6Om1ha2VWaXNpdG9yKAorICAgICAgICBbXSAoY29uc3QgU1JHQkE8dWludDg+JiBjb2xvcikg
eworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCB1aW50OF90PikK
KyAgICAgICAgICAgICAgICByZXR1cm4gY29sb3I7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udmVy
dFRvQ29tcG9uZW50RmxvYXRzKGNvbG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAgW10gKGNvbnN0
IGF1dG8mIGNvbG9yKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92
PFQsIHVpbnQ4X3Q+KQorICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRC
eXRlcyh0b1NSR0JBKGNvbG9yKSk7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
c2FtZV92PFQsIGZsb2F0PikKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9TUkdCQShjb2xvcik7
CisgICAgICAgIH0KKyAgICApKTsKIH0KIAogaW5saW5lIENvbG9yIENvbG9yOjppbnZlcnRlZENv
bG9yV2l0aEFscGhhKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3QKQEAgLTMyNywxMiArMzk1
LDMzIEBAIGlubGluZSBTUkdCQTx1aW50OF90PiBDb2xvcjo6YXNJbmxpbmUoKSAKICAgICByZXR1
cm4gYXNTUkdCQShQYWNrZWQ6OlJHQkEgeyBzdGF0aWNfY2FzdDx1aW50MzJfdD4obV9jb2xvckRh
dGEuaW5saW5lQ29sb3JBbmRGbGFncyA+PiAzMikgfSk7CiB9CiAKLWlubGluZSB2b2lkIENvbG9y
OjpzZXRJbmxpbmVDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikKK2lubGluZSB2b2lkIENvbG9y
OjpzZXRDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikKIHsKICAgICBtX2NvbG9yRGF0YS5pbmxp
bmVDb2xvckFuZEZsYWdzID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KFBhY2tlZDo6UkdCQSB7IGNv
bG9yIH0udmFsdWUpIDw8IDMyOwogICAgIHRhZ0FzVmFsaWQoKTsKIH0KIAoraW5saW5lIHZvaWQg
Q29sb3I6OnNldENvbG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAgYXV0byBj
b252ZXJ0ZWQgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhjb2xvcik7CisgICAgaWYgKGNvbG9y
ID09IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0cyhjb252ZXJ0ZWQpKSB7CisgICAgICAgIHNldENv
bG9yKGNvbnZlcnRlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzZXRFeHRlbmRl
ZENvbG9yKEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjb2xvcikpOworfQorCitpbmxpbmUgdm9pZCBD
b2xvcjo6c2V0Q29sb3IoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBz
ZXRFeHRlbmRlZENvbG9yKEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjb2xvcikpOworfQorCitpbmxp
bmUgdm9pZCBDb2xvcjo6c2V0Q29sb3IoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYgY29sb3IpCit7
CisgICAgc2V0RXh0ZW5kZWRDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoY29sb3IpKTsKK30K
KwogaW5saW5lIHZvaWQgQ29sb3I6OnNldEV4dGVuZGVkQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+
JiYgZXh0ZW5kZWRDb2xvcikKIHsKICAgICAvLyBaZXJvIHRoZSB1bmlvbiwganVzdCBpbiBjYXNl
IGEgMzItYml0IHN5c3RlbSBvbmx5IGFzc2lnbnMgdGhlCkBAIC0zNDIsMTggKzQzMSwxOCBAQCBp
bmxpbmUgdm9pZCBDb2xvcjo6c2V0RXh0ZW5kZWRDb2xvcihSZWY8CiAgICAgQVNTRVJUKGlzRXh0
ZW5kZWQoKSk7CiB9CiAKLWlubGluZSBib29sIENvbG9yOjppc0JsYWNrQ29sb3IoY29uc3QgQ29s
b3ImIGNvbG9yKQoraW5saW5lIGJvb2wgQ29sb3I6OmlzQmxhY2soY29uc3QgQ29sb3ImIGNvbG9y
KQogewotICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBjb2xvci5h
c0V4dGVuZGVkKCkuaXNCbGFjaygpOwotICAgIHJldHVybiBjb2xvci5hc0lubGluZSgpID09IENv
bG9yOjpibGFjazsKKyAgICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJseWluZ1R5cGUoW10gKGNv
bnN0IGF1dG8mIGNvbG9yKSB7CisgICAgICAgIHJldHVybiBpc0JsYWNrKGNvbG9yKTsKKyAgICB9
KTsKIH0KIAotaW5saW5lIGJvb2wgQ29sb3I6OmlzV2hpdGVDb2xvcihjb25zdCBDb2xvciYgY29s
b3IpCitpbmxpbmUgYm9vbCBDb2xvcjo6aXNXaGl0ZShjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0g
ICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGNvbG9yLmFzRXh0ZW5k
ZWQoKS5pc1doaXRlKCk7Ci0gICAgcmV0dXJuIGNvbG9yLmFzSW5saW5lKCkgPT0gQ29sb3I6Ondo
aXRlOworICAgIHJldHVybiBjb2xvci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0
byYgY29sb3IpIHsKKyAgICAgICAgcmV0dXJuIGlzV2hpdGUoY29sb3IpOworICAgIH0pOwogfQog
CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAtNDA4LDcgKzQ5Nyw3IEBAIE9wdGlvbmFsPENv
bG9yPiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGQKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29sb3JTcGFjZSkpCiAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICByZXR1cm4gQ29sb3IgeyBFeHRlbmRl
ZENvbG9yOjpjcmVhdGUoYzEsIGMyLCBjMywgYWxwaGEsIGNvbG9yU3BhY2UpIH07CisgICAgICAg
IHJldHVybiBDb2xvciB7IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZSh7IGMxLCBjMiwgYzMsIGFscGhh
IH0sIGNvbG9yU3BhY2UpIH07CiAgICAgfQogCiAgICAgYm9vbCBpc1ZhbGlkOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmgJ
KHJldmlzaW9uIDI2NDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yQ29udmVyc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNCArMjUsOSBAQAogCiAjcHJh
Z21hIG9uY2UKIAotbmFtZXNwYWNlIFdlYkNvcmUgeworI2luY2x1ZGUgIkNvbG9yVHlwZXMuaCIK
IAotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBDTVlLQTsKLXRlbXBsYXRlPHR5cGVuYW1lPiBz
dHJ1Y3QgRGlzcGxheVAzOwotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBIU0xBOwotdGVtcGxh
dGU8dHlwZW5hbWU+IHN0cnVjdCBMaW5lYXJEaXNwbGF5UDM7Ci10ZW1wbGF0ZTx0eXBlbmFtZT4g
c3RydWN0IExpbmVhclNSR0JBOwotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBTUkdCQTsKK25h
bWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gVGhlc2UgYXJlIHRoZSBzdGFuZGFyZCBzUkdCIDwtPiBM
aW5lYXJSR0IgLyBEaXNwbGF5UDMgPC0+IExpbmVhckRpc3BsYXlQMyBjb252ZXJzaW9uIGZ1bmN0
aW9ucyAoaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQikuCiBmbG9hdCBsaW5lYXJU
b1JHQkNvbG9yQ29tcG9uZW50KGZsb2F0KTsKQEAgLTUyLDQgKzQ3LDEzIEBAIFdFQkNPUkVfRVhQ
T1JUIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnMKIAogU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29u
c3QgQ01ZS0E8ZmxvYXQ+Jik7CiAKKworLy8gSWRlbnRpdHkgY29udmVyc2lvbnMgKHVzZWZ1bCBm
b3IgZ2VuZXJpYyBjb250ZXh0cykKKworY29uc3RleHByIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNv
bnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9Citjb25zdGV4cHIgTGlu
ZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBj
b2xvcikgeyByZXR1cm4gY29sb3I7IH0KK2NvbnN0ZXhwciBEaXNwbGF5UDM8ZmxvYXQ+IHRvRGlz
cGxheVAzKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKSB7IHJldHVybiBjb2xvcjsgfQor
Y29uc3RleHByIExpbmVhckRpc3BsYXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3Qg
TGluZWFyRGlzcGxheVAzPGZsb2F0PiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9Citjb25zdGV4
cHIgSFNMQTxmbG9hdD4gdG9IU0xBKGNvbnN0IEhTTEE8ZmxvYXQ+JiBjb2xvcikgeyByZXR1cm4g
Y29sb3I7IH0KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwCShy
ZXZpc2lvbiAyNjQyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clNlcmlhbGl6YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNDUgKzEwMCw4NyBAQCBz
dGF0aWMgQVNDSUlMaXRlcmFsIHNlcmlhbGl6YXRpb24oQ29sb3JTCiAgICAgcmV0dXJuICIiX3M7
CiB9CiAKLVN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IEV4dGVuZGVkQ29sb3ImIGNv
bG9yKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMgU3RyaW5nIHNlcmlhbGl6
YXRpb24oY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKIHsKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBh
bHBoYV0gPSBjb2xvci5jb21wb25lbnRzKCk7CisgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFd
ID0gY29sb3I7CiAgICAgaWYgKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChhbHBoYSwgMS4wZikp
Ci0gICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBzZXJpYWxpemF0aW9uKGNvbG9y
LmNvbG9yU3BhY2UoKSksICcgJywgYzEsICcgJywgYzIsICcgJywgYzMsICcpJyk7Ci0gICAgcmV0
dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIsIHNlcmlhbGl6YXRpb24oY29sb3IuY29sb3JTcGFjZSgp
KSwgJyAnLCBjMSwgJyAnLCBjMiwgJyAnLCBjMywgIiAvICIsIGFscGhhLCAnKScpOworICAgICAg
ICByZXR1cm4gbWFrZVN0cmluZygiY29sb3IoIiwgc2VyaWFsaXphdGlvbihjb2xvci5jb2xvclNw
YWNlKSwgJyAnLCBjMSwgJyAnLCBjMiwgJyAnLCBjMywgJyknKTsKKyAgICByZXR1cm4gbWFrZVN0
cmluZygiY29sb3IoIiwgc2VyaWFsaXphdGlvbihjb2xvci5jb2xvclNwYWNlKSwgJyAnLCBjMSwg
JyAnLCBjMiwgJyAnLCBjMywgIiAvICIsIGFscGhhLCAnKScpOwogfQogCi1TdHJpbmcgc2VyaWFs
aXphdGlvbkZvckhUTUwoY29uc3QgRXh0ZW5kZWRDb2xvciYgY29sb3IpCisvLyBTUkdCQTxmbG9h
dD4gb3ZlcmxvYWRzCisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IFNSR0JBPGZs
b2F0PiYgY29sb3IpCit7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworfQorCitT
dHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsK
LSAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xvcik7CisgICAgcmV0dXJuIHNlcmlh
bGl6YXRpb24oY29sb3IpOwogfQogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVB
c1RleHQoY29uc3QgRXh0ZW5kZWRDb2xvciYgY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZv
clJlbmRlclRyZWVBc1RleHQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICByZXR1
cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xvcik7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb24o
Y29sb3IpOwogfQogCisvLyBMaW5lYXJTUkdCQTxmbG9hdD4gb3ZlcmxvYWRzCisKK1N0cmluZyBz
ZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3IpCit7Cisg
ICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworfQorCitTdHJpbmcgc2VyaWFsaXphdGlv
bkZvckhUTUwoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICByZXR1cm4g
c2VyaWFsaXphdGlvbihjb2xvcik7Cit9CisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVy
VHJlZUFzVGV4dChjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQoreworICAgIHJldHVy
biBzZXJpYWxpemF0aW9uKGNvbG9yKTsKK30KKworLy8gRGlzcGxheVAzPGZsb2F0PiBvdmVybG9h
ZHMKKworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYg
Y29sb3IpCit7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworfQorCitTdHJpbmcg
c2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYgY29sb3IpCit7Cisg
ICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworfQorCitTdHJpbmcgc2VyaWFsaXphdGlv
bkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYgY29sb3IpCit7Cisg
ICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworfQorCisKIC8vIENvbG9yIG92ZXJsb2Fk
cwogCiBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0g
ICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25G
b3JDU1MoY29sb3IuYXNFeHRlbmRlZCgpKTsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNT
Uyhjb2xvci5hc0lubGluZSgpKTsKKyAgICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJseWluZ1R5
cGUoW10gKGF1dG8gYykgeworICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjKTsK
KyAgICB9KTsKIH0KIAogU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKLSAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gc2Vy
aWFsaXphdGlvbkZvckhUTUwoY29sb3IuYXNFeHRlbmRlZCgpKTsKLSAgICByZXR1cm4gc2VyaWFs
aXphdGlvbkZvckhUTUwoY29sb3IuYXNJbmxpbmUoKSk7CisgICAgcmV0dXJuIGNvbG9yLmNhbGxP
blVuZGVybHlpbmdUeXBlKFtdIChhdXRvIGMpIHsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRp
b25Gb3JIVE1MKGMpOworICAgIH0pOwogfQogCiBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRl
clRyZWVBc1RleHQoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChjb2xvci5pc0V4dGVu
ZGVkKCkpCi0gICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChj
b2xvci5hc0V4dGVuZGVkKCkpOwotICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJl
ZUFzVGV4dChjb2xvci5hc0lubGluZSgpKTsKKyAgICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJs
eWluZ1R5cGUoW10gKGF1dG8gYykgeworICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvclJl
bmRlclRyZWVBc1RleHQoYyk7CisgICAgfSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oCShyZXZp
c2lvbiAyNjQyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNl
cmlhbGl6YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOSBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBDb2xvcjsKLWNsYXNzIEV4dGVuZGVkQ29sb3I7CiAKK3RlbXBs
YXRlPHR5cGVuYW1lPiBzdHJ1Y3QgRGlzcGxheVAzOwordGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVj
dCBMaW5lYXJTUkdCQTsKIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgU1JHQkE7CiAKIC8vIHNl
cmlhbGl6YXRpb25Gb3JIVE1MIHJldHVybnMgdGhlIGNvbG9yIHNlcmlhbGl6ZWQgYWNjb3JkaW5n
IHRvIEhUTUw1IDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRp
bmcuaHRtbCNmaWxsLWFuZC1zdHJva2Utc3R5bGVzPiAoMTAgU2VwdGVtYmVyIDIwMTUpCkBAIC00
MCw5ICs0MSwxNyBAQCBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTCiBX
RUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoU1JHQkE8dWludDhfdD4p
OwogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KFNSR0JBPHVpbnQ4X3Q+KTsKIAotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JDU1MoY29uc3QgRXh0ZW5kZWRDb2xvciYpOwotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlh
bGl6YXRpb25Gb3JIVE1MKGNvbnN0IEV4dGVuZGVkQ29sb3ImKTsKLVdFQkNPUkVfRVhQT1JUIFN0
cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBFeHRlbmRlZENvbG9y
Jik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBTUkdC
QTxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChj
b25zdCBTUkdCQTxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9u
Rm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBTUkdCQTxmbG9hdD4mKTsKKworV0VCQ09SRV9FWFBP
UlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+Jik7
CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgTGluZWFy
U1JHQkE8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJl
bmRlclRyZWVBc1RleHQoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+Jik7CisKK1dFQkNPUkVfRVhQ
T1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsK
K1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBEaXNwbGF5
UDM8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRl
clRyZWVBc1RleHQoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOwogCiBXRUJDT1JFX0VYUE9SVCBT
dHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBDb2xvciYpOwogV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IENvbG9yJik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCShyZXZpc2lvbiAyNjQy
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDE0ICsyNiwzMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJDb2xvckNvbXBvbmVudHMuaCIKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbXBvbmVudFRyYWl0
czsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29tcG9uZW50VHJhaXRzPHVpbnQ4X3Q+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIHVpbnQ4X3QgbWluVmFsdWUgPSAwOworICAgIHN0YXRpYyBjb25zdGV4
cHIgdWludDhfdCBtYXhWYWx1ZSA9IDI1NTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbXBv
bmVudFRyYWl0czxmbG9hdD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgbWluVmFsdWUg
PSAwLjBmOworICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgbWF4VmFsdWUgPSAxLjBmOworfTsK
KworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgU1JHQkEgewogICAgIFQgcmVkOwogICAg
IFQgZ3JlZW47CiAgICAgVCBibHVlOwogICAgIFQgYWxwaGE7CisKKyAgICB1c2luZyBDb21wb25l
bnRUeXBlID0gVDsKKyAgICBzdGF0aWMgY29uc3RleHByIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9
IENvbG9yU3BhY2U6OlNSR0I7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTUkdCQShULCBU
LCBULCBUKSAtPiBTUkdCQTxUPjsKQEAgLTY0LDYgKzgxLDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IExpbmVhclNSR0JBIAogICAgIFQgZ3JlZW47CiAgICAgVCBibHVlOwogICAgIFQg
YWxwaGE7CisKKyAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkxpbmVhclJHQjsKIH07CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IExpbmVhclNSR0JBKFQsIFQsIFQsIFQpIC0+IExpbmVhclNS
R0JBPFQ+OwpAQCAtOTQsNiArMTE0LDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERp
c3BsYXlQMyB7CiAgICAgVCBncmVlbjsKICAgICBUIGJsdWU7CiAgICAgVCBhbHBoYTsKKworICAg
IHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOworICAgIHN0YXRpYyBjb25zdGV4cHIgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6RGlzcGxheVAzOwogfTsKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gRGlzcGxheVAzKFQsIFQsIFQsIFQpIC0+IERpc3BsYXlQMzxUPjsKQEAgLTEyNCw2
ICsxNDcsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTGluZWFyRGlzcGxhCiAgICAg
VCBncmVlbjsKICAgICBUIGJsdWU7CiAgICAgVCBhbHBoYTsKKworICAgIHVzaW5nIENvbXBvbmVu
dFR5cGUgPSBUOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gTGluZWFyRGlzcGxheVAzKFQs
IFQsIFQsIFQpIC0+IExpbmVhckRpc3BsYXlQMzxUPjsKQEAgLTE1NCw2ICsxNzksOCBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSFNMQSB7CiAgICAgVCBzYXR1cmF0aW9uOwogICAgIFQg
bGlnaHRuZXNzOwogICAgIFQgYWxwaGE7CisKKyAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsK
IH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEhTTEEoVCwgVCwgVCwgVCkgLT4gSFNMQTxUPjsK
QEAgLTE4Niw2ICsyMTMsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ01ZS0Egewog
ICAgIFQgeWVsbG93OwogICAgIFQgYmxhY2s7CiAgICAgVCBhbHBoYTsKKworICAgIHVzaW5nIENv
bXBvbmVudFR5cGUgPSBUOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gQ01ZS0EoVCwgVCwg
VCwgVCwgVCkgLT4gQ01ZS0E8VD47CkBAIC0yMDYsNiArMjM1LDggQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IFhZWkEgewogICAgIFQgeTsKICAgICBUIHo7CiAgICAgVCBhbHBoYTsKKwor
ICAgIHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4g
WFlaQShULCBULCBULCBUKSAtPiBYWVpBPFQ+OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCShyZXZpc2lvbiAyNjQyMzApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OSw2ICs2OSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4g
Q29sb3JUeXBlIGMKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9y
VHlwZSBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIHVp
bnQ4X3Qgb3ZlcnJpZGVBbHBoYSk7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9y
VHlwZSBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIGZs
b2F0IG92ZXJyaWRlQWxwaGEpOwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0
ZXhwciBib29sIGlzQmxhY2soY29uc3QgQ29sb3JUeXBlJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGU+IGNvbnN0ZXhwciBib29sIGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJik7CisKIGNv
bnN0ZXhwciB1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCk7CiBjb25zdGV4cHIg
dWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90KTsKIApAQCAtMTkyLDYgKzE5NSwyMyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBpCiAgICAgcmV0dXJuIGNv
cHk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGJvb2wgaXNC
bGFjayhjb25zdCBDb2xvclR5cGUmIGNvbG9yKQoreworICAgIGNvbnN0ZXhwciBhdXRvIG1pbiA9
IENvbXBvbmVudFRyYWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+OjptaW5W
YWx1ZTsKKyAgICBjb25zdGV4cHIgYXV0byBtYXggPSBDb21wb25lbnRUcmFpdHM8dHlwZW5hbWUg
Q29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6bWF4VmFsdWU7CisKKyAgICBhdXRvIFtjMSwgYzIs
IGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICByZXR1cm4gYzEgPT0gbWluICYmIGMyID09IG1pbiAm
JiBjMyA9PSBtaW4gJiYgYWxwaGEgPT0gbWF4OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xv
clR5cGU+IGNvbnN0ZXhwciBib29sIGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKK3sK
KyAgICBjb25zdGV4cHIgYXV0byBtYXggPSBDb21wb25lbnRUcmFpdHM8dHlwZW5hbWUgQ29sb3JU
eXBlOjpDb21wb25lbnRUeXBlPjo6bWF4VmFsdWU7CisKKyAgICBhdXRvIFtjMSwgYzIsIGMzLCBh
bHBoYV0gPSBjb2xvcjsKKyAgICByZXR1cm4gYzEgPT0gbWF4ICYmIGMyID09IG1heCAmJiBjMyA9
PSBtYXggJiYgYWxwaGEgPT0gbWF4OworfQorCiBjb25zdGV4cHIgdWludDE2X3QgZmFzdE11bHRp
cGx5QnkyNTUodWludDE2X3QgdmFsdWUpCiB7CiAgICAgcmV0dXJuICh2YWx1ZSA8PCA4KSAtIHZh
bHVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVu
ZGVkQ29sb3IuaAkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw1MSArMjYsMjgg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCisjaW5jbHVk
ZSAiQ29sb3JDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgogI2luY2x1ZGUg
IkNvbG9yVHlwZXMuaCIKLSNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0
Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIENvbG9yOwotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBTUkdCQTsKLQog
Y2xhc3MgRXh0ZW5kZWRDb2xvciA6IHB1YmxpYyBSZWZDb3VudGVkPEV4dGVuZGVkQ29sb3I+IHsK
IHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEV4dGVuZGVkQ29sb3I+IGNy
ZWF0ZShmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFj
ZSk7Ci0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBSZWY8RXh0ZW5k
ZWRDb2xvcj4gY3JlYXRlKGNvbnN0IENvbG9yVHlwZSYpOworICAgIHN0YXRpYyBSZWY8RXh0ZW5k
ZWRDb2xvcj4gY3JlYXRlKENvbG9yQ29tcG9uZW50czxmbG9hdD4sIENvbG9yU3BhY2UpOworICAg
IAogICAgIGZsb2F0IGFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25lbnRzWzNdOyB9CiAK
ICAgICBjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjb21wb25lbnRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb21wb25lbnRzOyB9CiAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2xvclNwYWNlOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBo
YXNoKCkgY29uc3Q7Ci0KLSAgICBSZWY8RXh0ZW5kZWRDb2xvcj4gY29sb3JXaXRoQWxwaGEoZmxv
YXQpIGNvbnN0OwotICAgIFJlZjxFeHRlbmRlZENvbG9yPiBpbnZlcnRlZENvbG9yV2l0aEFscGhh
KGZsb2F0KSBjb25zdDsKLQotICAgIGJvb2wgaXNXaGl0ZSgpIGNvbnN0OwotICAgIGJvb2wgaXNC
bGFjaygpIGNvbnN0OwotCi0gICAgLy8gVGhpcyB3aWxsIGNvbnZlcnQgbm9uLXNSR0IgY29sb3Jz
cGFjZSBjb2xvcnMgaW50byBzUkdCLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhw
ciBTUkdCQTxUPiB0b1NSR0JBTG9zc3koKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX3NhbWVfdjxULCBmbG9hdD4pCi0gICAgICAgICAgICByZXR1cm4gdG9TUkdC
QUZsb2F0Q29tcG9uZW50c0xvc3N5KCk7Ci0gICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6
OmlzX3NhbWVfdjxULCB1aW50OF90PikKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9Db21w
b25lbnRCeXRlcyh0b1NSR0JBRmxvYXRDb21wb25lbnRzTG9zc3koKSk7Ci0gICAgfQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGRlY2x0eXBlKGF1dG8pIGNhbGxPblVuZGVybHlpbmdU
eXBlKEZ1bmN0b3ImJikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgRXh0ZW5kZWRDb2xvcihmbG9h
dCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlKQotICAgICAgICA6IG1fY29tcG9uZW50cyhjMSwgYzIsIGMzLCBhbHBoYSkKLSAgICAgICAg
LCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKLSAgICB7Ci0gICAgfQotCi0gICAgV0VCQ09SRV9F
WFBPUlQgU1JHQkE8ZmxvYXQ+IHRvU1JHQkFGbG9hdENvbXBvbmVudHNMb3NzeSgpIGNvbnN0Owor
ICAgIEV4dGVuZGVkQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiwgQ29sb3JTcGFjZSk7CiAK
ICAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IG1fY29tcG9uZW50czsKICAgICBDb2xvclNwYWNl
IG1fY29sb3JTcGFjZTsKQEAgLTg2LDggKzYzLDMyIEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgRXh0ZW5kZWRDb2wKICAgICByZXR1cm4gIShhID09IGIpOwogfQogCi0vLyBGSVhNRTog
SWYgdGhlIENvbG9yU3BhY2UgaXMgc1JHQiBhbmQgdGhlIHZhbHVlcyBjYW4gYWxsIGJlCi0vLyBj
b252ZXJ0ZWQgZXhhY3RseSB0byBpbnRlZ2Vycywgd2Ugc2hvdWxkIG1ha2UgYSBTaW1wbGVDb2xv
ci4KLVdFQkNPUkVfRVhQT1JUIENvbG9yIG1ha2VFeHRlbmRlZENvbG9yKGZsb2F0IGMxLCBmbG9h
dCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlKTsKK3RlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZT4gaW5saW5lIFJlZjxFeHRlbmRlZENvbG9yPiBFeHRlbmRlZENvbG9yOjpj
cmVhdGUoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBFeHRlbmRlZENvbG9yKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSwgY29sb3IuY29sb3JTcGFj
ZSkpOworfQorCitpbmxpbmUgUmVmPEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmNyZWF0
ZShDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGNvbXBvbmVudHMsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFeHRlbmRlZENvbG9yKGNvbXBvbmVudHMs
IGNvbG9yU3BhY2UpKTsKK30KKworaW5saW5lIEV4dGVuZGVkQ29sb3I6OkV4dGVuZGVkQ29sb3Io
Q29sb3JDb21wb25lbnRzPGZsb2F0PiBjb21wb25lbnRzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Up
CisgICAgOiBtX2NvbXBvbmVudHMoY29tcG9uZW50cykKKyAgICAsIG1fY29sb3JTcGFjZShjb2xv
clNwYWNlKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBkZWNsdHlwZShhdXRv
KSBFeHRlbmRlZENvbG9yOjpjYWxsT25VbmRlcmx5aW5nVHlwZShGdW5jdG9yJiYgZnVuY3Rvcikg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fY29sb3JTcGFjZSkgeworICAgIGNhc2UgQ29sb3JTcGFj
ZTo6U1JHQjoKKyAgICAgICAgcmV0dXJuIGZ1bmN0b3IoYXNTUkdCQShtX2NvbXBvbmVudHMpKTsK
KyAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclJHQjoKKyAgICAgICAgcmV0dXJuIGZ1bmN0b3Io
YXNMaW5lYXJTUkdCQShtX2NvbXBvbmVudHMpKTsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3Bs
YXlQMzoKKyAgICAgICAgcmV0dXJuIGZ1bmN0b3IoYXNEaXNwbGF5UDMobV9jb21wb25lbnRzKSk7
CisgICAgfQorfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOTgs
NyArMzM5OCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpzaG91bGREdW1wUHJvcGUKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAvLyBCYWNrZ3JvdW5kIGNvbG9yIGNv
dWxkIGJlIG9mIGludGVyZXN0IHRvIHRlc3RzIG9yIG90aGVyIGR1bXBlcnMgaWYgaXQncyBub24t
d2hpdGUuCi0gICAgICAgIGlmICghc3RyY21wKHByb3BlcnR5TmFtZSwgImJhY2tncm91bmRDb2xv
ciIpICYmIENvbG9yOjppc1doaXRlQ29sb3IobGF5ZXItPmJhY2tncm91bmRDb2xvcigpKSkKKyAg
ICAgICAgaWYgKCFzdHJjbXAocHJvcGVydHlOYW1lLCAiYmFja2dyb3VuZENvbG9yIikgJiYgQ29s
b3I6OmlzV2hpdGUobGF5ZXItPmJhY2tncm91bmRDb2xvcigpKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgICAgICAvLyBUaGUgcm9vdCB0aWxlIGNhY2hlJ3MgcmVwYWludHMgd2ls
bCBzaG93IHVwIGF0IHRoZSB0b3Agd2l0aCBGcmFtZVZpZXcncywKSW5kZXg6IFRvb2xzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NDI0MikKKysr
IFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDIwLTA3
LTEwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZWR1Y2Ugc3Vy
ZmFjZSBhcmVhIG9mIHRoZSBFeHRlbmRlZENvbG9yIGNsYXNzIHRvIGEgYmFyZSBtaW5pbXVtCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQyMDQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGSVhNRTogRE8g
Tk9UIExBTkQgVU5USUwgQURESU5HIE5FVyBURVNUUyBGT1IgTkVXIEJFSEFWSU9SIE9GIFNUT1JJ
TkcgUkVQUkVTRU5UQUJMRSBTUkdCQTxmbG9hdD4gSU5MSU5FLgorCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHA6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6Om1ha2VDb2xvcik6
CisgICAgICAgIFVwZGF0ZSB1c2luZyBuZXcgQ29sb3IgY29uc3RydWN0b3IgZm9yIGV4dGVuZGVk
IGNvbG9ycy4KKyAgICAgICAgCisKIDIwMjAtMDctMTAgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVu
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc29tZSB0ZXN0aW5nIGZvciBKU1J1bkxvb3BUaW1l
cgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JU
ZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2NDIzMCkKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogVEVTVChF
eHRlbmRlZENvbG9yLCBDb25zdHJ1Y3RvcikKIHsKLSAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRl
ZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAg
ICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsK
ICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgYXV0byBbciwgZywgYiwg
YWxwaGFdID0gYzEuYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKTsKQEAgLTUyLDcgKzUyLDcgQEAg
VEVTVChFeHRlbmRlZENvbG9yLCBDb25zdHJ1Y3RvcikKIAogVEVTVChFeHRlbmRlZENvbG9yLCBD
b3B5Q29uc3RydWN0b3IpCiB7Ci0gICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAs
IDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgQ29sb3IgYzEg
eyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgRVhQRUNU
X1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIGMyKGMxKTsKQEAgLTcwLDcgKzcw
LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBDb3B5Q29uc3RydWN0b3IpCiAKIFRFU1QoRXh0ZW5k
ZWRDb2xvciwgQXNzaWdubWVudCkKIHsKLSAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9y
KDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICBDb2xv
ciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICBF
WFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IgYzIgPSBjMTsKQEAgLTg5
LDIwICs4OSwyMCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEFzc2lnbm1lbnQpCiBURVNUKEV4dGVu
ZGVkQ29sb3IsIEVxdWFsaXR5KQogewogICAgIHsKLSAgICAgICAgQ29sb3IgYzEgeyBtYWtlRXh0
ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07
CisgICAgICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAx
LjAgfSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCi0gICAgICAg
IENvbG9yIGMyIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JT
cGFjZTo6RGlzcGxheVAzKSB9OworICAgICAgICBDb2xvciBjMiB7IERpc3BsYXlQMzxmbG9hdD4g
eyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRl
bmRlZCgpKTsKIAogICAgICAgICBFWFBFQ1RfRVEoYzEsIGMyKTsKICAgICB9CiAKICAgICB7Ci0g
ICAgICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwg
Q29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgICAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxm
bG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEu
aXNFeHRlbmRlZCgpKTsKIAotICAgICAgICBDb2xvciBjMiB7IG1ha2VFeHRlbmRlZENvbG9yKDEu
MCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OlNSR0IpIH07CisgICAgICAgIENvbG9yIGMy
IHsgU1JHQkE8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgICAgIEVYUEVD
VF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICAgICAgRVhQRUNUX05FKGMxLCBjMik7CkBA
IC0xMTIsNyArMTEyLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBFcXVhbGl0eSkKICAgICBpbnQg
ZyA9IDEyODsKICAgICBpbnQgYiA9IDYzOwogICAgIGludCBhID0gMTI3OwotICAgIENvbG9yIHJn
YjEgeyBtYWtlRXh0ZW5kZWRDb2xvcihyIC8gMjU1LjAsIGcgLyAyNTUuMCwgYiAvIDI1NS4wLCBh
IC8gMjU1LjAsIENvbG9yU3BhY2U6OlNSR0IpIH07CisgICAgQ29sb3IgcmdiMSB7IFNSR0JBPGZs
b2F0PiB7IHIgLyAyNTUuMGYsIGcgLyAyNTUuMGYsIGIgLyAyNTUuMGYsIGEgLyAyNTUuMGYgfSB9
OwogICAgIENvbG9yIHJnYjIgPSBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgYSk7CiAgICAgRVhQ
RUNUX05FKHJnYjEsIHJnYjIpOwogICAgIEVYUEVDVF9ORShyZ2IyLCByZ2IxKTsKQEAgLTEyMSwy
MCArMTIxLDIwIEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgRXF1YWxpdHkpCiBURVNUKEV4dGVuZGVk
Q29sb3IsIEhhc2gpCiB7CiAgICAgewotICAgICAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENv
bG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICAg
ICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07
CiAgICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKLSAgICAgICAgQ29sb3Ig
YzIgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpE
aXNwbGF5UDMpIH07CisgICAgICAgIENvbG9yIGMyIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwg
MC41LCAwLjI1LCAxLjAgfSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkp
OwogCiAgICAgICAgIEVYUEVDVF9FUShjMS5oYXNoKCksIGMyLmhhc2goKSk7CiAgICAgfQogCiAg
ICAgewotICAgICAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1
LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICAgICAgQ29sb3IgYzEgeyBEaXNw
bGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgICAgIEVYUEVDVF9U
UlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKLSAgICAgICAgQ29sb3IgYzIgeyBtYWtlRXh0ZW5kZWRD
b2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpTUkdCKSB9OworICAgICAgICBD
b2xvciBjMiB7IFNSR0JBPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgICAg
ICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgICAgIEVYUEVDVF9ORShjMS5o
YXNoKCksIGMyLmhhc2goKSk7CkBAIC0xNDQsMTQgKzE0NCwxNCBAQCBURVNUKEV4dGVuZGVkQ29s
b3IsIEhhc2gpCiAgICAgaW50IGcgPSAxMjg7CiAgICAgaW50IGIgPSA2MzsKICAgICBpbnQgYSA9
IDEyNzsKLSAgICBDb2xvciByZ2IxIHsgbWFrZUV4dGVuZGVkQ29sb3IociAvIDI1NS4wLCBnIC8g
MjU1LjAsIGIgLyAyNTUuMCwgYSAvIDI1NS4wLCBDb2xvclNwYWNlOjpTUkdCKSB9OworICAgIENv
bG9yIHJnYjEgeyBTUkdCQTxmbG9hdD4geyByIC8gMjU1LjBmLCBnIC8gMjU1LjBmLCBiIC8gMjU1
LjBmLCBhIC8gMjU1LjBmIH0gfTsKICAgICBDb2xvciByZ2IyID0gbWFrZVNpbXBsZUNvbG9yKHIs
IGcsIGIsIGEpOwogICAgIEVYUEVDVF9ORShyZ2IxLmhhc2goKSwgcmdiMi5oYXNoKCkpOwogfQog
CiBURVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVDb25zdHJ1Y3RvcikKIHsKLSAgICBDb2xvciBjMSB7
IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3Bs
YXlQMykgfTsKKyAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4y
NSwgMS4wIH0gfTsKICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29s
b3IgYzIoV1RGTW92ZShjMSkpOwpAQCAtMTcyLDcgKzE3Miw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xv
ciwgTW92ZUNvbnN0cnVjdG9yKQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVBc3NpZ25tZW50
KQogewotICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEu
MCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZs
b2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0
ZW5kZWQoKSk7CiAKICAgICBDb2xvciBjMiA9IFdURk1vdmUoYzEpOwpAQCAtMTk0LDcgKzE5NCw4
IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgTW92ZUFzc2lnbm1lbnQpCiAKIFRFU1QoRXh0ZW5kZWRD
b2xvciwgQmFzaWNSZWZlcmVuY2VDb3VudGluZykKIHsKLSAgICBDb2xvciogYzEgPSBuZXcgQ29s
b3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpE
aXNwbGF5UDMpIH07CisgICAgQ29sb3IqIGMxID0gbmV3IENvbG9yIHsgRGlzcGxheVAzPGZsb2F0
PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OworICAgIAogICAgIEVYUEVDVF9UUlVFKGMxLT5p
c0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IqIGMyID0gbmV3IENvbG9yKCpjMSk7CkBAIC0yMjAs
NyArMjIxLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBCYXNpY1JlZmVyZW5jZUNvdW50aQogCiBD
b2xvciBtYWtlQ29sb3IoKQogewotICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4w
LCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgIENvbG9yIGMx
IHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgIEVYUEVD
VF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAgICAgRVhQRUNUX0VRKDF1LCBjMS5hc0V4dGVuZGVk
KCkucmVmQ291bnQoKSk7CiAKQEAgLTIzOCw3ICsyMzksNyBAQCBURVNUKEV4dGVuZGVkQ29sb3Is
IFJldHVyblZhbHVlcykKIAogVEVTVChFeHRlbmRlZENvbG9yLCBQM0NvbnZlcnNpb25Ub1NSR0Ip
CiB7Ci0gICAgQ29sb3IgcDNDb2xvciB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1
LCAwLjc1LCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgQ29sb3IgcDNDb2xvciB7IERp
c3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMC43NSB9IH07CiAgICAgRVhQRUNUX1RS
VUUocDNDb2xvci5pc0V4dGVuZGVkKCkpOwogCiAgICAgYXV0byBzUkdCQUNvbG9yID0gcDNDb2xv
ci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CkBAIC0yNTAsOSArMjUxLDEwIEBAIFRFU1QoRXh0ZW5k
ZWRDb2xvciwgUDNDb252ZXJzaW9uVG9TUkdCKQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIExpbmVh
clNSR0JDb252ZXJzaW9uVG9TUkdCKQogewotICAgIENvbG9yIGxpbmVhckNvbG9yIHsgbWFrZUV4
dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkxpbmVhclJHQikg
fTsKLSAgICBFWFBFQ1RfVFJVRShsaW5lYXJDb2xvci5pc0V4dGVuZGVkKCkpOwotICAgIGF1dG8g
c1JHQkFDb2xvciA9IGxpbmVhckNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBDb2xv
ciBsaW5lYXJTUkdCQUNvbG9yIHsgTGluZWFyU1JHQkE8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUs
IDAuNzUgfSB9OworICAgIEVYUEVDVF9UUlVFKGxpbmVhclNSR0JBQ29sb3IuaXNFeHRlbmRlZCgp
KTsKKworICAgIGF1dG8gc1JHQkFDb2xvciA9IGxpbmVhclNSR0JBQ29sb3IudG9TUkdCQUxvc3N5
PGZsb2F0PigpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdC
QUNvbG9yLnJlZCwgMS4wZikpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlF
cXVhbChzUkdCQUNvbG9yLmdyZWVuLCAwLjczNTM1NjkyN2YpKTsKICAgICBFWFBFQ1RfVFJVRShX
VEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ibHVlLCAwLjUzNzA5ODcwNmYpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404021</attachid>
            <date>2020-07-10 16:27:41 -0700</date>
            <delta_ts>2020-07-10 16:45:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214204-20200710162740.patch</filename>
            <type>text/plain</type>
            <size>47941</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDIwLTA3LTEwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZWR1Y2Ugc3VyZmFjZSBhcmVhIG9m
IHRoZSBFeHRlbmRlZENvbG9yIGNsYXNzIHRvIGEgYmFyZSBtaW5pbXVtCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQyMDQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkZCBoZWxwZXIgZnVuY3Rpb24g
dG8gQ29sb3IgdG8gb3BlcmF0ZSBvbiB0aGUgdW5kZXJseWluZyBjb2xvciB0eXBlCisgICAgICAg
ICAgYW5kIHJlaW1wbGVtZW50IGEgYnVuY2ggb2YgZnVuY3Rpb25hbGl0eSB1c2luZyBpdCwgcmVk
dWNpbmcgdGhlIG5lZWQKKyAgICAgICAgICBmb3IgZHVwbGljYXRlIGltcGxlbWVudGF0aW9ucyBp
biBFeHRlbmRlZENvbG9yLgorICAgICAgICAtIEFkZCBjb25zdHJ1Y3RvcnMgdG8gQ29sb3IgdGhh
dCB0YWtlIGV4dGVuZGVkIGNvbG9yIHR5cGVzLgorICAgICAgICAgICAgLSBXaGVuIGNvbnN0cnVj
dGluZyBhIENvbG9yIGZyb20gYSBTUkdCQTxmbG9hdD4sIGNoZWNrIHRvIHNlZSBpZiB0aGUKKyAg
ICAgICAgICAgICAgY29sb3IgY2FuIGJlIHJlcHJlc2VudGVkIGxvc3NsZXNzbHkgYnkgYSBTUkdC
QTx1aW50OF90PiBhbmQgaWYgY2FuLAorICAgICAgICAgICAgICBzdG9yZSBpdCBpbmxpbmUuCisK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgIFJlbW92ZSBFeHRlbmVkQ29sb3IuY3BwCisKKyAgICAgICAg
KiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRl
cnMpOgorICAgICAgICBVc2UgbmV3IENvbG9yIGNvbnN0cnVjdG9yIHRha2luZyBDb2xvckNvbXBv
bmVudHMgYW5kIENvbG9yU3BhY2UuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvbXBvc2l0ZU9wZXJhdG9yRm9yQmFja2dyb3VuZENv
bG9yIGNvbnN0KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFydCBjb25zdCk6CisgICAg
ICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tOgorICAgICAgICAobm9ybWFsaXpl
ZENvbG9yKToKKyAgICAgICAgVXBkYXRlIGZvciByZW5hbWUgZnJvbSBDb2xvcjo6aXNCbGFja0Nv
bG9yL0NvbG9yOjppc1doaXRlQ29sb3IgdG8gQ29sb3I6OmlzQmxhY2svQ29sb3I6OmlzV2hpdGUu
CisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6aGFzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y2FsbE9u
VW5kZXJseWluZ1R5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFM
b3NzeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2V0Q29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6OmlzQmxhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omlz
V2hpdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6c2V0SW5saW5lQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmlzQmxhY2tDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
aXNXaGl0ZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ckNvbnZlcnNpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvU1JHQkEpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9MaW5lYXJTUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjp0b0Rpc3BsYXlQMyk6Cisg
ICAgICAgIChXZWJDb3JlOjp0b0xpbmVhckRpc3BsYXlQMyk6CisgICAgICAgIChXZWJDb3JlOjp0
b0hTTEEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OnNlcmlhbGl6YXRpb25Gb3JDU1MpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXphdGlvbkZv
ckhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1Rl
eHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6aXNCbGFj
ayk6CisgICAgICAgIChXZWJDb3JlOjppc1doaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9FeHRlbmRlZENvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6RXh0ZW5kZWRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjpjYWxsT25VbmRlcmx5aW5nVHlwZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjp0b1NSR0JBTG9zc3kgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzaG91bGREdW1wUHJvcGVy
dHlGb3JMYXllciBjb25zdCk6CisKIDIwMjAtMDctMTAgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBw
bGUuY29tPgogCiAgICAgICAgIFBhcnQgNCBvZiBTaW1wbGVDb2xvciBhbmQgU1JHQkE8dWludDhf
dD4gYXJlIGVzc2VudGlhbGx5IHRoZSBzYW1lIC0gbGV0J3MgY29udmVyZ2UgdGhlbQpJbmRleDog
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQJKHJldmlzaW9uIDI2NDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xODI3LDcgKzE4MjcsNiBAQCBwbGF0Zm9ybS9ncmFwaGlj
cy9DdXN0b21QYWludEltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hN
b25pdG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5jcHAK
LXBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY0MjMwKQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC03MjI4LDcgKzcyMjgsNiBAQAogCQkzMUQyNkJDNTFGODZEMjY4MDA4RkYyNTUg
LyogSlNJbWFnZUJpdG1hcE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNJbWFnZUJpdG1hcE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MzFEMjZCQzYxRjg2RDI2OTAwOEZGMjU1IC8qIEpTSW1hZ2VCaXRtYXAuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbWFnZUJpdG1hcC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTMxRDU5MUIxMTY2OTdBNkMwMEU2QkYwMiAvKiBQbHVnSW5DbGll
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z0luQ2xpZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxRENERjQxMURBMUM0NTQwMEVBNUI5MyAvKiBF
eHRlbmRlZENvbG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4
dGVuZGVkQ29sb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMURDREY0MjFE
QTFDNDU0MDBFQTVCOTMgLyogRXh0ZW5kZWRDb2xvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFeHRlbmRlZENvbG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxREVBNDUzMUIzOUY0RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU3lzdGVtQmFja2Ryb3BM
YXllci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFERUE0NTQxQjM5RjREOTAw
Rjc3MTc4IC8qIFdlYlN5c3RlbUJhY2tkcm9wTGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViU3lzdGVtQmFja2Ryb3BMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTk1ODIsOCArMTk1ODEsOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNTE1
QkUxOTcxRDU0RjZCRDAwREQ3QzY4IC8qIEhJREdhbWVwYWQuY3BwICovLAogCQkJCTUxNUJFMTk4
MUQ1NEY2QkQwMEREN0M2OCAvKiBISURHYW1lcGFkLmggKi8sCi0JCQkJNTE1QkUxOTkxRDU0RjZC
RDAwREQ3QzY4IC8qIEhJREdhbWVwYWRQcm92aWRlci5tbSAqLywKIAkJCQk1MTVCRTE5QTFENTRG
NkJEMDBERDdDNjggLyogSElER2FtZXBhZFByb3ZpZGVyLmggKi8sCisJCQkJNTE1QkUxOTkxRDU0
RjZCRDAwREQ3QzY4IC8qIEhJREdhbWVwYWRQcm92aWRlci5tbSAqLywKIAkJCQk1MTdFMDNGNDI0
QjZCOTYzMDA1NDg5NUEgLyogTXVsdGlHYW1lcGFkUHJvdmlkZXIuaCAqLywKIAkJCQk1MTdFMDNG
NTI0QjZCOTY0MDA1NDg5NUEgLyogTXVsdGlHYW1lcGFkUHJvdmlkZXIubW0gKi8sCiAJCQkpOwpA
QCAtMjU1NTYsNyArMjU1NTUsNiBAQAogCQkJCTJEMjlFQ0MyMTkyRUNDODMwMDk4NEI3OCAvKiBE
aXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuaCAqLywKIAkJCQkyRDI5RUNDMzE5MkVDQzgzMDA5
ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5jcHAgKi8sCiAJCQkJMkQyOUVD
QzQxOTJFQ0M4MzAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuaCAqLywK
LQkJCQkzMURDREY0MTFEQTFDNDU0MDBFQTVCOTMgLyogRXh0ZW5kZWRDb2xvci5jcHAgKi8sCiAJ
CQkJMzFEQ0RGNDIxREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuaCAqLywKIAkJCQk2
RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uc0dMLmggKi8sCiAJCQkJQjI3NTM1
M0EwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuY3BwICovLApAQCAtMjY4ODAsNyArMjY4
NzgsNiBAQAogCQlDRDk0QTVDQjFGNzFDQjQ2MDBGNTI1QzUgLyogZW5jcnlwdGVkbWVkaWEgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUNERTNBRTEzMjRC
NDkzNkYwMDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuY3BwICovLAogCQkJCUNEOTRBNUQ5MUY3MUNC
OUYwMEY1MjVDNSAvKiBjbGVhcmtleSAqLywKIAkJCQlDREY3NTY5QjIxNUMyM0E0MDBFRkNCNTAg
LyogQ0RNRW5jcnlwdGlvblNjaGVtZS5oICovLAogCQkJCUNEOTRBNUQxMUY3MUNCNkIwMEY1MjVD
NSAvKiBDRE1GYWN0b3J5LmNwcCAqLywKQEAgLTI2ODk1LDEyICsyNjg5MiwxMyBAQAogCQkJCUNE
OTRBNUQ2MUY3MUNCNkQwMEY1MjVDNSAvKiBDRE1NZXNzYWdlVHlwZS5oICovLAogCQkJCUNEM0NF
MTFDMjQwNDUxQUYwMDRCQTAxRCAvKiBDRE1Qcml2YXRlLmNwcCAqLywKIAkJCQlDRDk0QTVDRjFG
NzFDQjZBMDBGNTI1QzUgLyogQ0RNUHJpdmF0ZS5oICovLAotCQkJCUNERTNBRTEwMjRCNDkxNjkw
MDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuaCAqLywKIAkJCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1
RDUgLyogQ0RNUHJveHkuY3BwICovLAogCQkJCUNEOTRBNUNGMUY3MUNCNjEwMEY1MjVDNSAvKiBD
RE1Qcm94eS5oICovLAogCQkJCUNEOTRBNUNDMUY3MUNCNjkwMEY1MjVDNSAvKiBDRE1SZXF1aXJl
bWVudC5oICovLAogCQkJCUNEOTRBNUQwMUY3MUNCNkIwMEY1MjVDNSAvKiBDRE1SZXN0cmljdGlv
bnMuaCAqLywKIAkJCQlDRDk0QTVENTFGNzFDQjZEMDBGNTI1QzUgLyogQ0RNU2Vzc2lvblR5cGUu
aCAqLywKKwkJCQlDREUzQUUxMzI0QjQ5MzZGMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmNwcCAq
LywKKwkJCQlDREUzQUUxMDI0QjQ5MTY5MDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmggKi8sCiAJ
CQkpOwogCQkJcGF0aCA9IGVuY3J5cHRlZG1lZGlhOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKQEAgLTMwMDgyLDYgKzMwMDgwLDcgQEAKIAkJCQlDRDNDRTEwMzI0MDFBQURBMDA0QkEwMUQg
LyogQ0RNUmVzdHJpY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREU1OTU5NzFCRjI2RTIx
MDBBMUNCRTggLyogQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQ0QzQ0UxMDQyNDAxQUFEQTAwNEJBMDFEIC8qIENETVNlc3Npb25UeXBlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlDREUzQUUxMjI0QjQ5MTZBMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1RkE5MDRDQTE3OEU2MUY1MDA0QzhBMkQgLyogQ2VydGlmaWNh
dGVJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MUI4RjBCNTIxOTUzRDY1MDAwQzJCMDAgLyog
Q2VydGlmaWNhdGVJbmZvQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzNkZEMTUxNkM3ODI2
NTAwRjg4N0MxIC8qIENoYW5nZVZlcnNpb25EYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMjE5
LDcgKzMxMjE4LDYgQEAKIAkJCQlGMzQ0Qzc1MzExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0EwRTc3MEYxMEMwMEE4
ODAwQTAyNzZFIC8qIEluc3BlY3RvckZyb250ZW5kSG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0E1NDg1ODAxNEUwMkQ1MTAwNkFFMDVBIC8qIEluc3BlY3Rvckhpc3RvcnkuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUNERTNBRTEyMjRCNDkxNkEwMDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1QjgxQ0FFMUZBQTQ0NjIwMDM3RDFFNiAvKiBJbnNwZWN0b3JJbmRl
eGVkREJBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjBENjI5MjcxMjUzNjkwQjAwMDgxNTQz
IC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NjBF
NkQyMzBERTMwMzAwNDYxQUFFIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvblB1YmxpYy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMjQwMiw2ICszMjQwMCw3IEBACiAJCQkJODUwMzFCNDgwQTQ0RUZD
NzAwRjk5MkUwIC8qIE1vdXNlUmVsYXRlZEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMw
OURGQzA5OUU2NDkyMDA1NkU1ODEgLyogTW92ZVNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZEQjE3MDA2MTRBMkJBQjIwMEEyQjVEOSAvKiBNdWx0aUNoYW5uZWxSZXNhbXBs
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxN0UwM0Y3MjRCNkQ5ODQwMDU0ODk1QSAvKiBNdWx0
aUdhbWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2QjAxQjNCNjVBQzAw
MDVERDc5IC8qIE11dGFibGVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2QjExQjNC
NjVBQzAwMDVERDc5IC8qIE11dGFibGVSYW5nZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM2
RjA5MDBBMTQzMjdCNjEwMDY4NTg0OSAvKiBNdXRhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAq
LywKQEAgLTMzMjgxLDcgKzMzMjgwLDYgQEAKIAkJCQlFQ0E2ODBDNzFFNjc3MjQ1MDA3MzFEMjAg
LyogU3RyaW5nVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5QjZDNDE1MzEzNDQ5NDkw
MDAwODVCNjIgLyogU3RyaW5nV2l0aERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ5
Rjc3NzYwRUZFQzYyMDAwOTA4NDlEIC8qIFN0cm9rZVN0eWxlQXBwbGllci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNTE3RTAzRjcyNEI2RDk4NDAwNTQ4OTVBIC8qIE11bHRpR2FtZXBhZFByb3ZpZGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTRCODIwNTFENkRGMEU1MDA3N0VCRTMgLyogU3RydWN0
dXJlZENsb25lLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDVCQTZCNjIzNzYyMkEzMDA0REZDMDcg
LyogU3R5bGVBZGp1c3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI2QTMwRTgxREM0RjAw
QjI1OTY1IC8qIFN0eWxlQmFja2dyb3VuZERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ0NzMs
NiArMzQ0NzEsNyBAQAogCQkJCUNEREUwMkVEMThCM0VENkQwMENGN0ZGMSAvKiBDRE1TZXNzaW9u
QVZGb3VuZGF0aW9uT2JqQy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEREUwMkYwMThCNTY1MTMw
MENGN0ZGMSAvKiBDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQ0RFNTk1OUQxQkYyNzU3MTAwQTFDQkU4IC8qIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9i
akMubW0gaW4gU291cmNlcyAqLywKKwkJCQlDREUzQUUxNDI0QjQ5MzcwMDAxMjhFN0UgLyogQ0RN
VXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExNDA5MEZCMUFBNTFFMUQwMDkxMTkx
QSAvKiBDb250ZW50RmlsdGVyVW5ibG9ja0hhbmRsZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTA3QUZGNDIzMUVGQjE0NDkwMEI1NDVCMyAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9T
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDZDNjk2Q0MxRTcyMDVGQzAwNTk3OTM3IC8qIENQVU1v
bml0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zNDgwMiw3ICszNDgwMSw2IEBACiAJCQkJREVD
QTdEQjcxRjlFNjdCNjAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNjcuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJREVDQTdEQjgxRjlFNjdCNjAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNjguY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJREVDQTdEQjkxRjlFNjdCNjAwRTNCNjYxIC8qIFVuaWZpZWRT
b3VyY2UxNjkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RFM0FFMTQyNEI0OTM3MDAwMTI4RTdF
IC8qIENETVV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBN0RCQTFGOUU2N0I2
MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTE3MC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNB
N0RGQjFGOUVCMzY0MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTE3MS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlERUNBN0RGQzFGOUVCMzY0MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTE3Mi5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI2NDIzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjU4LDcgKzY1OCw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVu
Y3Rpb25QYXJhbWV0ZXIKICAgICAgICAgY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkRpc3BsYXlQ
MzsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7
CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIGNvbnN1bWVJZGVudChhcmdzKTsKIApA
QCAtNjc2LDcgKzY3Niw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0
ZXIKICAgICAgICAgaWYgKCFhbHBoYVBhcmFtZXRlcikKICAgICAgICAgICAgIGFscGhhUGFyYW1l
dGVyID0gY29uc3VtZU51bWJlcihhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKICAgICAgICAgaWYgKCFh
bHBoYVBhcmFtZXRlcikKLSAgICAgICAgICAgIHJldHVybiBDb2xvcigpOworICAgICAgICAgICAg
cmV0dXJuIHsgfTsKIAogICAgICAgICBjb2xvckNoYW5uZWxzWzNdID0gc3RkOjptYXgoMC4wLCBz
dGQ6Om1pbigxLjAsIGFscGhhUGFyYW1ldGVyLT5pc1BlcmNlbnRhZ2UoKSA/IChhbHBoYVBhcmFt
ZXRlci0+ZG91YmxlVmFsdWUoKSAvIDEwMCkgOiBhbHBoYVBhcmFtZXRlci0+ZG91YmxlVmFsdWUo
KSkpOwogICAgIH0KQEAgLTY4NCw5ICs2ODQsOSBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1
bmN0aW9uUGFyYW1ldGVyCiAgICAgLy8gRklYTUU6IFN1cHBvcnQgdGhlIGNvbW1hLXNlcGFyYXRl
ZCBsaXN0IG9mIGZhbGxiYWNrIGNvbG9yIHZhbHVlcy4KIAogICAgIGlmICghYXJncy5hdEVuZCgp
KQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAKLSAgICByZXR1cm4gbWFrZUV4dGVuZGVk
Q29sb3IoY29sb3JDaGFubmVsc1swXSwgY29sb3JDaGFubmVsc1sxXSwgY29sb3JDaGFubmVsc1sy
XSwgY29sb3JDaGFubmVsc1szXSwgY29sb3JTcGFjZSk7CisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICByZXR1cm4gQ29sb3IgeyBDb2xvckNvbXBvbmVudHMgeyBzdGF0aWNfY2FzdDxmbG9hdD4o
Y29sb3JDaGFubmVsc1swXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckNoYW5uZWxzWzFdKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQ2hhbm5lbHNbMl0pLCBzdGF0aWNfY2FzdDxmbG9hdD4o
Y29sb3JDaGFubmVsc1szXSkgfSwgY29sb3JTcGFjZSB9OwogfQogCiBzdGF0aWMgT3B0aW9uYWw8
U1JHQkE8dWludDhfdD4+IHBhcnNlSGV4Q29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGJvb2wgYWNjZXB0UXVpcmt5Q29sb3JzKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShy
ZXZpc2lvbiAyNjQyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MjIxLDcgKzcyMjEsNyBAQCBPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0
aW9ucz4gRG9jdW1lbnQ6CiAKIENvbXBvc2l0ZU9wZXJhdG9yIERvY3VtZW50Ojpjb21wb3NpdGVP
cGVyYXRvckZvckJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IFJlbmRl
ck9iamVjdCYgcmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgaWYgKExJS0VMWSghc2V0dGluZ3MoKS5w
dW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKCkgfHwgIUNvbG9yOjppc1doaXRlQ29s
b3IoY29sb3IpIHx8ICFyZW5kZXJlci51c2VEYXJrQXBwZWFyYW5jZSgpKSkKKyAgICBpZiAoTElL
RUxZKCFzZXR0aW5ncygpLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUoKSB8fCAh
Q29sb3I6OmlzV2hpdGUoY29sb3IpIHx8ICFyZW5kZXJlci51c2VEYXJrQXBwZWFyYW5jZSgpKSkK
ICAgICAgICAgcmV0dXJuIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyOwogCiAgICAgYXV0
byogZnJhbWVWaWV3ID0gdmlldygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAko
cmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MDMwLDggKzQwMzAsOCBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6
OmZvbnRBdHRyaWJ1dGVzQXRTCiAgICAgICAgIGF0dHJpYnV0ZXMuYmFja2dyb3VuZENvbG9yID0g
YmFja2dyb3VuZENvbG9yOwogCiAgICAgYXV0byBmb3JlZ3JvdW5kQ29sb3IgPSBzdHlsZS0+dmlz
aXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKENTU1Byb3BlcnR5Q29sb3IpOwotICAg
IC8vIEZJWE1FOiBpc0JsYWNrQ29sb3Igbm90IHN1aXRhYmxlIGZvciBkYXJrIG1vZGUuCi0gICAg
aWYgKGZvcmVncm91bmRDb2xvci5pc1ZhbGlkKCkgJiYgIUNvbG9yOjppc0JsYWNrQ29sb3IoZm9y
ZWdyb3VuZENvbG9yKSkKKyAgICAvLyBGSVhNRTogQ29sb3I6OmlzQmxhY2sgbm90IHN1aXRhYmxl
IGZvciBkYXJrIG1vZGUuCisgICAgaWYgKGZvcmVncm91bmRDb2xvci5pc1ZhbGlkKCkgJiYgIUNv
bG9yOjppc0JsYWNrKGZvcmVncm91bmRDb2xvcikpCiAgICAgICAgIGF0dHJpYnV0ZXMuZm9yZWdy
b3VuZENvbG9yID0gZm9yZWdyb3VuZENvbG9yOwogCiAgICAgaWYgKGF1dG8qIHNoYWRvd0RhdGEg
PSBzdHlsZS0+dGV4dFNoYWRvdygpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9IVE1MQ29udmVydGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvSFRNTENvbnZlcnRlci5tbQkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NTks
MTAgKzg1OSwxMCBAQCBzdGF0aWMgQ29sb3Igbm9ybWFsaXplZENvbG9yKENvbG9yIGNvbG9yCiAg
ICAgICAgIHJldHVybiBjb2xvcjsKIAogICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UgPSBlbGVt
ZW50LmRvY3VtZW50KCkudXNlRGFya0FwcGVhcmFuY2UoZWxlbWVudC5leGlzdGluZ0NvbXB1dGVk
U3R5bGUoKSk7Ci0gICAgaWYgKHVzZURhcmtBcHBlYXJhbmNlICYmIENvbG9yOjppc1doaXRlQ29s
b3IoY29sb3IpKQorICAgIGlmICh1c2VEYXJrQXBwZWFyYW5jZSAmJiBDb2xvcjo6aXNXaGl0ZShj
b2xvcikpCiAgICAgICAgIHJldHVybiBDb2xvcigpOwogCi0gICAgaWYgKCF1c2VEYXJrQXBwZWFy
YW5jZSAmJiBDb2xvcjo6aXNCbGFja0NvbG9yKGNvbG9yKSkKKyAgICBpZiAoIXVzZURhcmtBcHBl
YXJhbmNlICYmIENvbG9yOjppc0JsYWNrKGNvbG9yKSkKICAgICAgICAgcmV0dXJuIENvbG9yKCk7
CiAKICAgICByZXR1cm4gY29sb3I7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjQyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiw5IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKIAotI2luY2x1ZGUgIkFu
aW1hdGlvblV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgogI2lu
Y2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTEyNiwyMiArMTIzLDI2IEBAIGZsb2F0IENvbG9yOjpsdW1pbmFuY2UoKSBjb25z
dAogCiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0CiB7Ci0g
ICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5jb2xvcldp
dGhBbHBoYShhbHBoYSk7Ci0KLSAgICBDb2xvciByZXN1bHQgPSBjb2xvcldpdGhPdmVycmlkZW5B
bHBoYShhc0lubGluZSgpLCBhbHBoYSk7Ci0KLSAgICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZp
bmcgdGhlIHNlbWFudGljIGJpdCBkZXNpcmVkIGFuZC9vciBjb3JyZWN0IGhlcmU/Ci0gICAgaWYg
KGlzU2VtYW50aWMoKSkKLSAgICAgICAgcmVzdWx0LnRhZ0FzU2VtYW50aWMoKTsKLSAgICByZXR1
cm4gcmVzdWx0OworICAgIHJldHVybiBjYWxsT25VbmRlcmx5aW5nVHlwZShXVEY6Om1ha2VWaXNp
dG9yKAorICAgICAgICBbJl0gKGNvbnN0IFNSR0JBPHVpbnQ4X3Q+JiBjb2xvcikgLT4gQ29sb3Ig
eworICAgICAgICAgICAgQ29sb3IgcmVzdWx0ID0gY29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29s
b3IsIGFscGhhKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IFdoeSBpcyBwcmVzZXJ2aW5nIHRo
ZSBzZW1hbnRpYyBiaXQgZGVzaXJlZCBhbmQvb3IgY29ycmVjdCBoZXJlPworICAgICAgICAgICAg
aWYgKGlzU2VtYW50aWMoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygp
OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChj
b25zdCBhdXRvJiBjb2xvcikgLT4gQ29sb3IgeworICAgICAgICAgICAgcmV0dXJuIGNvbG9yV2l0
aE92ZXJyaWRlbkFscGhhKGNvbG9yLCBhbHBoYSk7CisgICAgICAgIH0KKyAgICApKTsKIH0KIAog
Q29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0CiB7
Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5pbnZl
cnRlZENvbG9yV2l0aEFscGhhKGFscGhhKTsKLSAgICByZXR1cm4gaW52ZXJ0ZWRDb2xvcldpdGhP
dmVycmlkZW5BbHBoYShhc0lubGluZSgpLCBhbHBoYSk7CisgICAgcmV0dXJuIGNhbGxPblVuZGVy
bHlpbmdUeXBlKFsmXSAoY29uc3QgYXV0byYgY29sb3IpIC0+IENvbG9yIHsKKyAgICAgICAgcmV0
dXJuIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29sb3IsIGFscGhhKTsKKyAgICB9
KTsKIH0KIAogQ29sb3IgQ29sb3I6OnNlbWFudGljQ29sb3IoKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjQyMzApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiU2ltcGxlQ29sb3IuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiAjaWYgVVNFKENHKQpAQCAt
NTEsNiArNTIsMTggQEAgdHlwZWRlZiBzdHJ1Y3QgX0dka1JHQkEgR2RrUkdCQTsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCisvLyBBYmxlIHRvIHJlcHJlc2VudDoKKy8vICAgIC0gU3BlY2lhbCAi
aW52YWxpZCBjb2xvciIgc3RhdGUKKy8vICAgIC0gNHggOC1iaXQgKDAtMjU1KSBzUkdCQSwgc3Rv
cmVkIGlubGluZSwgbm8gYWxsb2NhdGlvbgorLy8gICAgLSA0eCBmbG9hdCAoMC0xKSBzUkdCQSwg
c3RvcmVkIGluIGEgcmVmZXJlbmNlIGNvdW50ZWQgc3ViLW9iamVjdAorLy8gICAgLSA0eCBmbG9h
dCAoMC0xKSBMaW5lYXIgc1JHQkEsIHN0b3JlZCBpbiBhIHJlZmVyZW5jZSBjb3VudGVkIHN1Yi1v
YmplY3QKKy8vICAgIC0gNHggZmxvYXQgKDAtMSkgRGlzcGxheVAzLCBzdG9yZWQgaW4gYSByZWZl
cmVuY2UgY291bnRlZCBzdWItb2JqZWN0CisvLworLy8gQWRkaXRpb25hbGx5LCB0aGUgaW5saW5l
IDgtYml0IHNSR0JBIGNhbiBoYXZlIGFuIG9wdGlvbmFsICJzZW1hbnRpYyIgYml0IHNldCBvbiBp
dCwKKy8vIHdoaWNoIGluZGljYXRlcyB0aGUgY29sb3Igb3JpZ2luYXRlZCBmcm9tIGEgQ1NTIHNl
bWFudGljIGNvbG9yIG5hbWUuCisvLyBGSVhNRTogSWYgd2Uga2VlcCB0aGUgInNlbWFudGljIiBi
aXQgb24gQ29sb3IsIHdlIHNob3VsZCBleHRlbmQgc3VwcG9ydCB0byBhbGwgY29sb3JzLAorLy8g
bm90IGp1c3QgaW5saW5lIG9uZXMsIGJ5IHVzaW5nIHRoZSB1bnVzZWQgcG9pbnRlciBiaXRzLgor
CiBjbGFzcyBDb2xvciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBA
IC02Myw3ICs3NiwxMCBAQCBwdWJsaWM6CiAgICAgQ29sb3IoU1JHQkE8dWludDhfdD4sIFNlbWFu
dGljVGFnKTsKICAgICBDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4sIFNlbWFudGljVGFn
KTsKIAotICAgIENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmKTsKKyAgICBDb2xvcihDb2xvckNv
bXBvbmVudHM8ZmxvYXQ+LCBDb2xvclNwYWNlKTsKKyAgICBDb2xvcihjb25zdCBTUkdCQTxmbG9h
dD4mKTsKKyAgICBDb2xvcihjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mKTsKKyAgICBDb2xvcihj
b25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CiAKICAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hU
YWJsZUVtcHR5VmFsdWVUeXBlKTsKICAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZVR5cGUpOwpAQCAtNzIsMzQgKzg4LDM3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JF
X0VYUE9SVCBDb2xvcihjb25zdCBDb2xvciYpOwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKENv
bG9yJiYpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3ImIG9wZXJhdG9yPShjb25zdCBDb2xv
ciYpOworICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yJiBvcGVyYXRvcj0oQ29sb3ImJik7CisKICAg
ICB+Q29sb3IoKTsKIAotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5k
ZWQoKSB8fCAobV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyAmIHZhbGlkSW5saW5lQ29s
b3JCaXQpOyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwogCi0gICAgLy8gVHJ1ZSBpZiB0
aGUgY29sb3Igb3JpZ2luYXRlZCBmcm9tIGEgQ1NTIHNlbWFudGljIGNvbG9yIG5hbWUuCisgICAg
Ym9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpIHx8IChtX2NvbG9yRGF0
YS5pbmxpbmVDb2xvckFuZEZsYWdzICYgdmFsaWRJbmxpbmVDb2xvckJpdCk7IH0KICAgICBib29s
IGlzU2VtYW50aWMoKSBjb25zdCB7IHJldHVybiBpc0lubGluZSgpICYmIChtX2NvbG9yRGF0YS5p
bmxpbmVDb2xvckFuZEZsYWdzICYgaXNTZW1hbnRpY0lubGluZUNvbG9yQml0KTsgfQogCisKICAg
ICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRl
ZCgpLmFscGhhKCkgPT0gMS4wIDogYXNJbmxpbmUoKS5hbHBoYSA9PSAyNTU7IH0KICAgICBib29s
IGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5h
bHBoYSgpID4gMC4wIDogYXNJbmxpbmUoKS5hbHBoYSA+IDA7IH0KIAogICAgIHVpbnQ4X3QgYWxw
aGEoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBjb252ZXJ0VG9Db21wb25lbnRCeXRl
KGFzRXh0ZW5kZWQoKS5hbHBoYSgpKSA6IGFzSW5saW5lKCkuYWxwaGE7IH0KICAgICBmbG9hdCBh
bHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCku
YWxwaGEoKSA6IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGFzSW5saW5lKCkuYWxwaGEpOyB9CiAK
LSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgbHVt
aW5hbmNlKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgbGlnaHRuZXNzKCkgY29u
c3Q7IC8vIEZJWE1FOiBSZXBsYWNlIHJlbWFpbmluZyB1c2VzIHdpdGggbHVtaW5hbmNlLgogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxm
bG9hdD4+IGNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPiBkZWNsdHlwZShhdXRvKSBjYWxsT25VbmRlcmx5aW5nVHlwZShGdW5j
dG9yJiYpIGNvbnN0OwogCiAgICAgLy8gVGhpcyB3aWxsIGNvbnZlcnQgbm9uLXNSR0IgY29sb3Jz
cGFjZSBjb2xvcnMgaW50byBzUkdCLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFNSR0JBPFQ+
IHRvU1JHQkFMb3NzeSgpIGNvbnN0OwogCisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPENv
bG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+IGNvbG9yU3BhY2VBbmRDb21wb25lbnRz
KCkgY29uc3Q7CisKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBsaWdodGVuZWQoKSBjb25zdDsK
ICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBkYXJrZW5lZCgpIGNvbnN0OwogCi0gICAgV0VCQ09S
RV9FWFBPUlQgZmxvYXQgbHVtaW5hbmNlKCkgY29uc3Q7Ci0KLSAgICAvLyBGSVhNRTogUmVwbGFj
ZSByZW1haW5pbmcgdXNlcyB3aXRoIGx1bWluYW5jZS4KLSAgICBXRUJDT1JFX0VYUE9SVCBmbG9h
dCBsaWdodG5lc3MoKSBjb25zdDsKLQogICAgIENvbG9yIGludmVydGVkQ29sb3JXaXRoQWxwaGEo
T3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdDsKICAgICBDb2xvciBpbnZlcnRlZENvbG9yV2l0
aEFscGhhKGZsb2F0IGFscGhhKSBjb25zdDsKIApAQCAtMTQ0LDIyICsxNjMsMjQgQEAgcHVibGlj
OgogICAgIGNvbnN0IEV4dGVuZGVkQ29sb3ImIGFzRXh0ZW5kZWQoKSBjb25zdDsKICAgICBTUkdC
QTx1aW50OF90PiBhc0lubGluZSgpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3Im
IG9wZXJhdG9yPShjb25zdCBDb2xvciYpOwotICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yJiBvcGVy
YXRvcj0oQ29sb3ImJik7Ci0KICAgICAvLyBFeHRlbmRlZCBhbmQgbm9uLWV4dGVuZGVkIGNvbG9y
cyB3aWxsIGFsd2F5cyBiZSBub24tZXF1YWwuCiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpOwogICAgIGZyaWVuZCBib29sIGVxdWFsSWdu
b3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYik7CiAgICAg
ZnJpZW5kIGJvb2wgZXh0ZW5kZWRDb2xvcnNFcXVhbChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9y
Jik7CiAKLSAgICBzdGF0aWMgYm9vbCBpc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICBz
dGF0aWMgYm9vbCBpc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICBzdGF0aWMgYm9vbCBp
c0JsYWNrKGNvbnN0IENvbG9yJik7CisgICAgc3RhdGljIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xv
ciYpOwogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxDb2xv
cj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHNldElubGluZUNvbG9y
KFNSR0JBPHVpbnQ4X3Q+KTsKKyAgICBDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJik7CisKKyAg
ICB2b2lkIHNldENvbG9yKFNSR0JBPHVpbnQ4X3Q+KTsKKyAgICB2b2lkIHNldENvbG9yKGNvbnN0
IFNSR0JBPGZsb2F0PiYpOworICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgTGluZWFyU1JHQkE8Zmxv
YXQ+Jik7CisgICAgdm9pZCBzZXRDb2xvcihjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CiAgICAg
dm9pZCBzZXRFeHRlbmRlZENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmKTsKIAogICAgIHZvaWQg
dGFnQXNTZW1hbnRpYygpIHsgbV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyB8PSBpc1Nl
bWFudGljSW5saW5lQ29sb3JCaXQ7IH0KQEAgLTIyNywyOSArMjQ4LDU5IEBAIGlubGluZSBib29s
IGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGMKIAogaW5saW5lIENvbG9yOjpDb2xvcihTUkdC
QTx1aW50OF90PiBjb2xvcikKIHsKLSAgICBzZXRJbmxpbmVDb2xvcihjb2xvcik7CisgICAgc2V0
Q29sb3IoY29sb3IpOwogfQogCiBpbmxpbmUgQ29sb3I6OkNvbG9yKE9wdGlvbmFsPFNSR0JBPHVp
bnQ4X3Q+PiBjb2xvcikKIHsKICAgICBpZiAoY29sb3IpCi0gICAgICAgIHNldElubGluZUNvbG9y
KCpjb2xvcik7CisgICAgICAgIHNldENvbG9yKCpjb2xvcik7CiB9CiAKIGlubGluZSBDb2xvcjo6
Q29sb3IoU1JHQkE8dWludDhfdD4gY29sb3IsIFNlbWFudGljVGFnKQogewotICAgIHNldElubGlu
ZUNvbG9yKGNvbG9yKTsKKyAgICBzZXRDb2xvcihjb2xvcik7CiAgICAgdGFnQXNTZW1hbnRpYygp
OwogfQogCiBpbmxpbmUgQ29sb3I6OkNvbG9yKE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBjb2xv
ciwgU2VtYW50aWNUYWcpCiB7CiAgICAgaWYgKGNvbG9yKSB7Ci0gICAgICAgIHNldElubGluZUNv
bG9yKCpjb2xvcik7CisgICAgICAgIHNldENvbG9yKCpjb2xvcik7CiAgICAgICAgIHRhZ0FzU2Vt
YW50aWMoKTsKICAgICB9CiB9CiAKK2lubGluZSBDb2xvcjo6Q29sb3IoQ29sb3JDb21wb25lbnRz
PGZsb2F0PiBjb21wb25lbnRzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgc3dpdGNo
IChjb2xvclNwYWNlKSB7CisgICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgorICAgICAgICBzZXRD
b2xvcihhc1NSR0JBKGNvbXBvbmVudHMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29s
b3JTcGFjZTo6TGluZWFyUkdCOgorICAgICAgICBzZXRDb2xvcihhc0xpbmVhclNSR0JBKGNvbXBv
bmVudHMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAz
OgorICAgICAgICBzZXRDb2xvcihhc0Rpc3BsYXlQMyhjb21wb25lbnRzKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9Cit9CisKK2lubGluZSBDb2xvcjo6Q29sb3IoY29uc3QgU1JHQkE8ZmxvYXQ+
JiBjb2xvcikKK3sKKyAgICBzZXRDb2xvcihjb2xvcik7Cit9CisKK2lubGluZSBDb2xvcjo6Q29s
b3IoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBzZXRDb2xvcihjb2xv
cik7Cit9CisKK2lubGluZSBDb2xvcjo6Q29sb3IoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYgY29s
b3IpCit7CisgICAgc2V0Q29sb3IoY29sb3IpOworfQorCiBpbmxpbmUgQ29sb3I6OkNvbG9yKFJl
ZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCiB7CiAgICAgc2V0RXh0ZW5kZWRDb2xv
cihXVEZNb3ZlKGV4dGVuZGVkQ29sb3IpKTsKQEAgLTI4MCwxOSArMzMxLDM2IEBAIGlubGluZSBD
b2xvcjo6fkNvbG9yKCkKIAogaW5saW5lIHVuc2lnbmVkIENvbG9yOjpoYXNoKCkgY29uc3QKIHsK
LSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmhhc2go
KTsKKyAgICBpZiAoaXNFeHRlbmRlZCgpKSB7CisgICAgICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFs
cGhhXSA9IGFzRXh0ZW5kZWQoKS5jb21wb25lbnRzKCk7CisgICAgICAgIHJldHVybiBjb21wdXRl
SGFzaChjMSwgYzIsIGMzLCBhbHBoYSwgYXNFeHRlbmRlZCgpLmNvbG9yU3BhY2UoKSk7CisgICAg
fQogICAgIHJldHVybiBXVEY6OmludEhhc2gobV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFn
cyk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFNSR0JBPFQ+IENvbG9yOjp0b1NSR0JBTG9z
c3koKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gZGVjbHR5cGUoYXV0bykgQ29s
b3I6OmNhbGxPblVuZGVybHlpbmdUeXBlKEZ1bmN0b3ImJiBmdW5jdG9yKSBjb25zdAogewogICAg
IGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkudG9TUkdCQUxv
c3N5PFQ+KCk7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCB1aW50OF90PikK
LSAgICAgICAgcmV0dXJuIGFzSW5saW5lKCk7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3Nh
bWVfdjxULCBmbG9hdD4pCi0gICAgICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMo
YXNJbmxpbmUoKSk7CisgICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY2FsbE9uVW5kZXJseWlu
Z1R5cGUoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKKyAgICByZXR1cm4gZnVuY3Rv
cihhc0lubGluZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4gQ29sb3I6
OnRvU1JHQkFMb3NzeSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNhbGxPblVuZGVybHlpbmdUeXBl
KFdURjo6bWFrZVZpc2l0b3IoCisgICAgICAgIFtdIChjb25zdCBTUkdCQTx1aW50OF90PiYgY29s
b3IpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhf
dD4pCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbG9yOworICAgICAgICAgICAgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX3NhbWVfdjxULCBmbG9hdD4pCisgICAgICAgICAgICAgICAgcmV0dXJuIGNv
bnZlcnRUb0NvbXBvbmVudEZsb2F0cyhjb2xvcik7CisgICAgICAgIH0sCisgICAgICAgIFtdIChj
b25zdCBhdXRvJiBjb2xvcikgeworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3Nh
bWVfdjxULCB1aW50OF90PikKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvQ29tcG9u
ZW50Qnl0ZXModG9TUkdCQShjb2xvcikpOworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX3NhbWVfdjxULCBmbG9hdD4pCisgICAgICAgICAgICAgICAgcmV0dXJuIHRvU1JHQkEoY29s
b3IpOworICAgICAgICB9CisgICAgKSk7CiB9CiAKIGlubGluZSBDb2xvciBDb2xvcjo6aW52ZXJ0
ZWRDb2xvcldpdGhBbHBoYShPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0CkBAIC0zMjcsMTIg
KzM5NSwzMyBAQCBpbmxpbmUgU1JHQkE8dWludDhfdD4gQ29sb3I6OmFzSW5saW5lKCkgCiAgICAg
cmV0dXJuIGFzU1JHQkEoUGFja2VkOjpSR0JBIHsgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1fY29s
b3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgPj4gMzIpIH0pOwogfQogCi1pbmxpbmUgdm9pZCBD
b2xvcjo6c2V0SW5saW5lQ29sb3IoU1JHQkE8dWludDhfdD4gY29sb3IpCitpbmxpbmUgdm9pZCBD
b2xvcjo6c2V0Q29sb3IoU1JHQkE8dWludDhfdD4gY29sb3IpCiB7CiAgICAgbV9jb2xvckRhdGEu
aW5saW5lQ29sb3JBbmRGbGFncyA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihQYWNrZWQ6OlJHQkEg
eyBjb2xvciB9LnZhbHVlKSA8PCAzMjsKICAgICB0YWdBc1ZhbGlkKCk7CiB9CiAKK2lubGluZSB2
b2lkIENvbG9yOjpzZXRDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQoreworICAgIGF1
dG8gY29udmVydGVkID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoY29sb3IpOworICAgIGlmIChj
b2xvciA9PSBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoY29udmVydGVkKSkgeworICAgICAgICBz
ZXRDb2xvcihjb252ZXJ0ZWQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2V0RXh0
ZW5kZWRDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoY29sb3IpKTsKK30KKworaW5saW5lIHZv
aWQgQ29sb3I6OnNldENvbG9yKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3IpCit7Cisg
ICAgc2V0RXh0ZW5kZWRDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoY29sb3IpKTsKK30KKwor
aW5saW5lIHZvaWQgQ29sb3I6OnNldENvbG9yKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9y
KQoreworICAgIHNldEV4dGVuZGVkQ29sb3IoRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGNvbG9yKSk7
Cit9CisKIGlubGluZSB2b2lkIENvbG9yOjpzZXRFeHRlbmRlZENvbG9yKFJlZjxFeHRlbmRlZENv
bG9yPiYmIGV4dGVuZGVkQ29sb3IpCiB7CiAgICAgLy8gWmVybyB0aGUgdW5pb24sIGp1c3QgaW4g
Y2FzZSBhIDMyLWJpdCBzeXN0ZW0gb25seSBhc3NpZ25zIHRoZQpAQCAtMzQyLDE4ICs0MzEsMTgg
QEAgaW5saW5lIHZvaWQgQ29sb3I6OnNldEV4dGVuZGVkQ29sb3IoUmVmPAogICAgIEFTU0VSVChp
c0V4dGVuZGVkKCkpOwogfQogCi1pbmxpbmUgYm9vbCBDb2xvcjo6aXNCbGFja0NvbG9yKGNvbnN0
IENvbG9yJiBjb2xvcikKK2lubGluZSBib29sIENvbG9yOjppc0JsYWNrKGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKLSAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gY29s
b3IuYXNFeHRlbmRlZCgpLmlzQmxhY2soKTsKLSAgICByZXR1cm4gY29sb3IuYXNJbmxpbmUoKSA9
PSBDb2xvcjo6YmxhY2s7CisgICAgcmV0dXJuIGNvbG9yLmNhbGxPblVuZGVybHlpbmdUeXBlKFtd
IChjb25zdCBhdXRvJiBjb2xvcikgeworICAgICAgICByZXR1cm4gaXNCbGFjayhjb2xvcik7Cisg
ICAgfSk7CiB9CiAKLWlubGluZSBib29sIENvbG9yOjppc1doaXRlQ29sb3IoY29uc3QgQ29sb3Im
IGNvbG9yKQoraW5saW5lIGJvb2wgQ29sb3I6OmlzV2hpdGUoY29uc3QgQ29sb3ImIGNvbG9yKQog
ewotICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBjb2xvci5hc0V4
dGVuZGVkKCkuaXNXaGl0ZSgpOwotICAgIHJldHVybiBjb2xvci5hc0lubGluZSgpID09IENvbG9y
Ojp3aGl0ZTsKKyAgICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJseWluZ1R5cGUoW10gKGNvbnN0
IGF1dG8mIGNvbG9yKSB7CisgICAgICAgIHJldHVybiBpc1doaXRlKGNvbG9yKTsKKyAgICB9KTsK
IH0KIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KQEAgLTQwOCw3ICs0OTcsNyBAQCBPcHRpb25h
bDxDb2xvcj4gQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkCiAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbG9yU3BhY2UpKQogICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIENvbG9yIHsgRXh0
ZW5kZWRDb2xvcjo6Y3JlYXRlKGMxLCBjMiwgYzMsIGFscGhhLCBjb2xvclNwYWNlKSB9OworICAg
ICAgICByZXR1cm4gQ29sb3IgeyBFeHRlbmRlZENvbG9yOjpjcmVhdGUoeyBjMSwgYzIsIGMzLCBh
bHBoYSB9LCBjb2xvclNwYWNlKSB9OwogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lv
bi5oCShyZXZpc2lvbiAyNjQyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvckNvbnZlcnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTQgKzI1LDkgQEAKIAog
I3ByYWdtYSBvbmNlCiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKKyNpbmNsdWRlICJDb2xvclR5cGVz
LmgiCiAKLXRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgQ01ZS0E7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZT4gc3RydWN0IERpc3BsYXlQMzsKLXRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgSFNMQTsKLXRl
bXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgTGluZWFyRGlzcGxheVAzOwotdGVtcGxhdGU8dHlwZW5h
bWU+IHN0cnVjdCBMaW5lYXJTUkdCQTsKLXRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgU1JHQkE7
CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIFRoZXNlIGFyZSB0aGUgc3RhbmRhcmQgc1JHQiA8
LT4gTGluZWFyUkdCIC8gRGlzcGxheVAzIDwtPiBMaW5lYXJEaXNwbGF5UDMgY29udmVyc2lvbiBm
dW5jdGlvbnMgKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IpLgogZmxvYXQgbGlu
ZWFyVG9SR0JDb2xvckNvbXBvbmVudChmbG9hdCk7CkBAIC01Miw0ICs0NywxMyBAQCBXRUJDT1JF
X0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zCiAKIFNSR0JBPGZsb2F0PiB0b1NSR0JB
KGNvbnN0IENNWUtBPGZsb2F0PiYpOwogCisKKy8vIElkZW50aXR5IGNvbnZlcnNpb25zICh1c2Vm
dWwgZm9yIGdlbmVyaWMgY29udGV4dHMpCisKK2NvbnN0ZXhwciBTUkdCQTxmbG9hdD4gdG9TUkdC
QShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKSB7IHJldHVybiBjb2xvcjsgfQorY29uc3RleHBy
IExpbmVhclNSR0JBPGZsb2F0PiB0b0xpbmVhclNSR0JBKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0
PiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9Citjb25zdGV4cHIgRGlzcGxheVAzPGZsb2F0PiB0
b0Rpc3BsYXlQMyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikgeyByZXR1cm4gY29sb3I7
IH0KK2NvbnN0ZXhwciBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+IHRvTGluZWFyRGlzcGxheVAzKGNv
bnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKSB7IHJldHVybiBjb2xvcjsgfQorY29u
c3RleHByIEhTTEE8ZmxvYXQ+IHRvSFNMQShjb25zdCBIU0xBPGZsb2F0PiYgY29sb3IpIHsgcmV0
dXJuIGNvbG9yOyB9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNw
cAkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JTZXJpYWxpemF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDQ1ICsxMDAsODcg
QEAgc3RhdGljIEFTQ0lJTGl0ZXJhbCBzZXJpYWxpemF0aW9uKENvbG9yUwogICAgIHJldHVybiAi
Il9zOwogfQogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBFeHRlbmRlZENvbG9y
JiBjb2xvcikKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RhdGljIFN0cmluZyBzZXJp
YWxpemF0aW9uKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0gICAgYXV0byBbYzEsIGMyLCBj
MywgYWxwaGFdID0gY29sb3IuY29tcG9uZW50cygpOworICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFs
cGhhXSA9IGNvbG9yOwogICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYWxwaGEsIDEu
MGYpKQotICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiY29sb3IoIiwgc2VyaWFsaXphdGlvbihj
b2xvci5jb2xvclNwYWNlKCkpLCAnICcsIGMxLCAnICcsIGMyLCAnICcsIGMzLCAnKScpOwotICAg
IHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBzZXJpYWxpemF0aW9uKGNvbG9yLmNvbG9yU3Bh
Y2UoKSksICcgJywgYzEsICcgJywgYzIsICcgJywgYzMsICIgLyAiLCBhbHBoYSwgJyknKTsKKyAg
ICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIsIHNlcmlhbGl6YXRpb24oY29sb3IuY29s
b3JTcGFjZSksICcgJywgYzEsICcgJywgYzIsICcgJywgYzMsICcpJyk7CisgICAgcmV0dXJuIG1h
a2VTdHJpbmcoImNvbG9yKCIsIHNlcmlhbGl6YXRpb24oY29sb3IuY29sb3JTcGFjZSksICcgJywg
YzEsICcgJywgYzIsICcgJywgYzMsICIgLyAiLCBhbHBoYSwgJyknKTsKIH0KIAotU3RyaW5nIHNl
cmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IEV4dGVuZGVkQ29sb3ImIGNvbG9yKQorLy8gU1JHQkE8
ZmxvYXQ+IG92ZXJsb2FkcworCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBTUkdC
QTxmbG9hdD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKK30K
KworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3Ip
CiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29sb3IpOworICAgIHJldHVybiBz
ZXJpYWxpemF0aW9uKGNvbG9yKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJU
cmVlQXNUZXh0KGNvbnN0IEV4dGVuZGVkQ29sb3ImIGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6YXRp
b25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAg
cmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29sb3IpOworICAgIHJldHVybiBzZXJpYWxpemF0
aW9uKGNvbG9yKTsKIH0KIAorLy8gTGluZWFyU1JHQkE8ZmxvYXQ+IG92ZXJsb2FkcworCitTdHJp
bmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQor
eworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKK30KKworU3RyaW5nIHNlcmlhbGl6
YXRpb25Gb3JIVE1MKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAgcmV0
dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworfQorCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJl
bmRlclRyZWVBc1RleHQoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBy
ZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7Cit9CisKKy8vIERpc3BsYXlQMzxmbG9hdD4gb3Zl
cmxvYWRzCisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IERpc3BsYXlQMzxmbG9h
dD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKK30KKworU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQor
eworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKK30KKworU3RyaW5nIHNlcmlhbGl6
YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQor
eworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKK30KKworCiAvLyBDb2xvciBvdmVy
bG9hZHMKIAogU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgQ29sb3ImIGNvbG9yKQog
ewotICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBzZXJpYWxpemF0
aW9uRm9yQ1NTKGNvbG9yLmFzRXh0ZW5kZWQoKSk7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb25G
b3JDU1MoY29sb3IuYXNJbmxpbmUoKSk7CisgICAgcmV0dXJuIGNvbG9yLmNhbGxPblVuZGVybHlp
bmdUeXBlKFtdIChhdXRvIGMpIHsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1Mo
Yyk7CisgICAgfSk7CiB9CiAKIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBDb2xv
ciYgY29sb3IpCiB7Ci0gICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJu
IHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9yLmFzRXh0ZW5kZWQoKSk7Ci0gICAgcmV0dXJuIHNl
cmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9yLmFzSW5saW5lKCkpOworICAgIHJldHVybiBjb2xvci5j
YWxsT25VbmRlcmx5aW5nVHlwZShbXSAoYXV0byBjKSB7CisgICAgICAgIHJldHVybiBzZXJpYWxp
emF0aW9uRm9ySFRNTChjKTsKKyAgICB9KTsKIH0KIAogU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JS
ZW5kZXJUcmVlQXNUZXh0KGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAoY29sb3IuaXNF
eHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1Rl
eHQoY29sb3IuYXNFeHRlbmRlZCgpKTsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvclJlbmRl
clRyZWVBc1RleHQoY29sb3IuYXNJbmxpbmUoKSk7CisgICAgcmV0dXJuIGNvbG9yLmNhbGxPblVu
ZGVybHlpbmdUeXBlKFtdIChhdXRvIGMpIHsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25G
b3JSZW5kZXJUcmVlQXNUZXh0KGMpOworICAgIH0pOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uaAko
cmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JTZXJpYWxpemF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDkgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29sb3I7Ci1jbGFzcyBFeHRlbmRlZENvbG9yOwogCit0
ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IERpc3BsYXlQMzsKK3RlbXBsYXRlPHR5cGVuYW1lPiBz
dHJ1Y3QgTGluZWFyU1JHQkE7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IFNSR0JBOwogCiAv
LyBzZXJpYWxpemF0aW9uRm9ySFRNTCByZXR1cm5zIHRoZSBjb2xvciBzZXJpYWxpemVkIGFjY29y
ZGluZyB0byBIVE1MNSA8aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2Ny
aXB0aW5nLmh0bWwjZmlsbC1hbmQtc3Ryb2tlLXN0eWxlcz4gKDEwIFNlcHRlbWJlciAyMDE1KQpA
QCAtNDAsOSArNDEsMTcgQEAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JD
UwogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKFNSR0JBPHVpbnQ4
X3Q+KTsKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFz
VGV4dChTUkdCQTx1aW50OF90Pik7CiAKLVdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0
aW9uRm9yQ1NTKGNvbnN0IEV4dGVuZGVkQ29sb3ImKTsKLVdFQkNPUkVfRVhQT1JUIFN0cmluZyBz
ZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBFeHRlbmRlZENvbG9yJik7Ci1XRUJDT1JFX0VYUE9S
VCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgRXh0ZW5kZWRD
b2xvciYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3Qg
U1JHQkE8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhU
TUwoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXph
dGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CisKK1dFQkNPUkVf
RVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0
PiYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IExp
bmVhclNSR0JBPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYpOworCitXRUJDT1JF
X0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+
Jik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgRGlz
cGxheVAzPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JS
ZW5kZXJUcmVlQXNUZXh0KGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsKIAogV0VCQ09SRV9FWFBP
UlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgQ29sb3ImKTsKIFdFQkNPUkVfRVhQ
T1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBDb2xvciYpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAkocmV2aXNpb24g
MjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsMzEgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb21wb25lbnRU
cmFpdHM7CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbXBvbmVudFRyYWl0czx1aW50OF90PiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IG1pblZhbHVlID0gMDsKKyAgICBzdGF0aWMgY29u
c3RleHByIHVpbnQ4X3QgbWF4VmFsdWUgPSAyNTU7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b21wb25lbnRUcmFpdHM8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0IG1pblZh
bHVlID0gMC4wZjsKKyAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0IG1heFZhbHVlID0gMS4wZjsK
K307CisKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFNSR0JBIHsKICAgICBUIHJlZDsK
ICAgICBUIGdyZWVuOwogICAgIFQgYmx1ZTsKICAgICBUIGFscGhhOworCisgICAgdXNpbmcgQ29t
cG9uZW50VHlwZSA9IFQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UgPSBDb2xvclNwYWNlOjpTUkdCOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkEo
VCwgVCwgVCwgVCkgLT4gU1JHQkE8VD47CkBAIC02NCw2ICs4MSw5IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBMaW5lYXJTUkdCQSAKICAgICBUIGdyZWVuOwogICAgIFQgYmx1ZTsKICAg
ICBUIGFscGhhOworCisgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpMaW5lYXJSR0I7CiB9
OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBMaW5lYXJTUkdCQShULCBULCBULCBUKSAtPiBMaW5l
YXJTUkdCQTxUPjsKQEAgLTk0LDYgKzExNCw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBEaXNwbGF5UDMgewogICAgIFQgZ3JlZW47CiAgICAgVCBibHVlOwogICAgIFQgYWxwaGE7CisK
KyAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKKyAgICBzdGF0aWMgY29uc3RleHByIENvbG9y
U3BhY2UgY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkRpc3BsYXlQMzsKIH07CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IERpc3BsYXlQMyhULCBULCBULCBUKSAtPiBEaXNwbGF5UDM8VD47CkBAIC0x
MjQsNiArMTQ3LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IExpbmVhckRpc3BsYQog
ICAgIFQgZ3JlZW47CiAgICAgVCBibHVlOwogICAgIFQgYWxwaGE7CisKKyAgICB1c2luZyBDb21w
b25lbnRUeXBlID0gVDsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IExpbmVhckRpc3BsYXlQ
MyhULCBULCBULCBUKSAtPiBMaW5lYXJEaXNwbGF5UDM8VD47CkBAIC0xNTQsNiArMTc5LDggQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhTTEEgewogICAgIFQgc2F0dXJhdGlvbjsKICAg
ICBUIGxpZ2h0bmVzczsKICAgICBUIGFscGhhOworCisgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9
IFQ7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBIU0xBKFQsIFQsIFQsIFQpIC0+IEhTTEE8
VD47CkBAIC0xODYsNiArMjEzLDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENNWUtB
IHsKICAgICBUIHllbGxvdzsKICAgICBUIGJsYWNrOwogICAgIFQgYWxwaGE7CisKKyAgICB1c2lu
ZyBDb21wb25lbnRUeXBlID0gVDsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IENNWUtBKFQs
IFQsIFQsIFQsIFQpIC0+IENNWUtBPFQ+OwpAQCAtMjA2LDYgKzIzNSw4IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBYWVpBIHsKICAgICBUIHk7CiAgICAgVCB6OwogICAgIFQgYWxwaGE7
CisKKyAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IFhZWkEoVCwgVCwgVCwgVCkgLT4gWFlaQTxUPjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkocmV2aXNpb24gMjY0MjMw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGU+IENvbG9yVHlwZSBjCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBD
b2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb25zdCBDb2xvclR5cGUm
LCB1aW50OF90IG92ZXJyaWRlQWxwaGEpOwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBD
b2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb25zdCBDb2xvclR5cGUm
LCBmbG9hdCBvdmVycmlkZUFscGhhKTsKIAordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBj
b25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYpOwordGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYpOwor
CiBjb25zdGV4cHIgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2X3QpOwogY29uc3Rl
eHByIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZfdCk7CiAKQEAgLTE5Miw2ICsxOTUs
MjMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgaQogICAgIHJldHVy
biBjb3B5OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBib29s
IGlzQmxhY2soY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKK3sKKyAgICBjb25zdGV4cHIgYXV0byBt
aW4gPSBDb21wb25lbnRUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6
bWluVmFsdWU7CisgICAgY29uc3RleHByIGF1dG8gbWF4ID0gQ29tcG9uZW50VHJhaXRzPHR5cGVu
YW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om1heFZhbHVlOworCisgICAgYXV0byBbYzEs
IGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgcmV0dXJuIGMxID09IG1pbiAmJiBjMiA9PSBt
aW4gJiYgYzMgPT0gbWluICYmIGFscGhhID09IG1heDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlPiBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYgY29sb3Ip
Cit7CisgICAgY29uc3RleHByIGF1dG8gbWF4ID0gQ29tcG9uZW50VHJhaXRzPHR5cGVuYW1lIENv
bG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om1heFZhbHVlOworCisgICAgYXV0byBbYzEsIGMyLCBj
MywgYWxwaGFdID0gY29sb3I7CisgICAgcmV0dXJuIGMxID09IG1heCAmJiBjMiA9PSBtYXggJiYg
YzMgPT0gbWF4ICYmIGFscGhhID09IG1heDsKK30KKwogY29uc3RleHByIHVpbnQxNl90IGZhc3RN
dWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKQogewogICAgIHJldHVybiAodmFsdWUgPDwgOCkg
LSB2YWx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVk
Q29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9F
eHRlbmRlZENvbG9yLmgJKHJldmlzaW9uIDI2NDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNTEgKzI2
LDI4IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgorI2lu
Y2x1ZGUgIkNvbG9yQ29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKICNpbmNs
dWRlICJDb2xvclR5cGVzLmgiCi0jaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRl
IDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBDb2xvcjsKLXRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgU1JHQkE7
Ci0KIGNsYXNzIEV4dGVuZGVkQ29sb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxFeHRlbmRlZENvbG9y
PiB7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxFeHRlbmRlZENvbG9y
PiBjcmVhdGUoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjMywgZmxvYXQgYWxwaGEsIENvbG9y
U3BhY2UpOwotCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMgUmVmPEV4
dGVuZGVkQ29sb3I+IGNyZWF0ZShjb25zdCBDb2xvclR5cGUmKTsKKyAgICBzdGF0aWMgUmVmPEV4
dGVuZGVkQ29sb3I+IGNyZWF0ZShDb2xvckNvbXBvbmVudHM8ZmxvYXQ+LCBDb2xvclNwYWNlKTsK
KyAgICAKICAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9uZW50c1szXTsg
fQogCiAgICAgY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgY29tcG9uZW50cygpIGNvbnN0
IHsgcmV0dXJuIG1fY29tcG9uZW50czsgfQogICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0OwotCi0gICAgUmVmPEV4dGVuZGVkQ29sb3I+IGNvbG9yV2l0aEFscGhh
KGZsb2F0KSBjb25zdDsKLSAgICBSZWY8RXh0ZW5kZWRDb2xvcj4gaW52ZXJ0ZWRDb2xvcldpdGhB
bHBoYShmbG9hdCkgY29uc3Q7Ci0KLSAgICBib29sIGlzV2hpdGUoKSBjb25zdDsKLSAgICBib29s
IGlzQmxhY2soKSBjb25zdDsKLQotICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNv
bG9yc3BhY2UgY29sb3JzIGludG8gc1JHQi4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25z
dGV4cHIgU1JHQkE8VD4gdG9TUkdCQUxvc3N5KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIGNv
bnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgZmxvYXQ+KQotICAgICAgICAgICAgcmV0dXJuIHRv
U1JHQkFGbG9hdENvbXBvbmVudHNMb3NzeSgpOwotICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4pCi0gICAgICAgICAgICByZXR1cm4gY29udmVydFRv
Q29tcG9uZW50Qnl0ZXModG9TUkdCQUZsb2F0Q29tcG9uZW50c0xvc3N5KCkpOwotICAgIH0KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBkZWNsdHlwZShhdXRvKSBjYWxsT25VbmRlcmx5
aW5nVHlwZShGdW5jdG9yJiYpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIEV4dGVuZGVkQ29sb3Io
ZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjMywgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSkKLSAgICAgICAgOiBtX2NvbXBvbmVudHMoYzEsIGMyLCBjMywgYWxwaGEpCi0gICAg
ICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCi0gICAgewotICAgIH0KLQotICAgIFdFQkNP
UkVfRVhQT1JUIFNSR0JBPGZsb2F0PiB0b1NSR0JBRmxvYXRDb21wb25lbnRzTG9zc3koKSBjb25z
dDsKKyAgICBFeHRlbmRlZENvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4sIENvbG9yU3BhY2Up
OwogCiAgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBtX2NvbXBvbmVudHM7CiAgICAgQ29sb3JT
cGFjZSBtX2NvbG9yU3BhY2U7CkBAIC04Niw4ICs2MywzMiBAQCBpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IEV4dGVuZGVkQ29sCiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KIAotLy8gRklY
TUU6IElmIHRoZSBDb2xvclNwYWNlIGlzIHNSR0IgYW5kIHRoZSB2YWx1ZXMgY2FuIGFsbCBiZQot
Ly8gY29udmVydGVkIGV4YWN0bHkgdG8gaW50ZWdlcnMsIHdlIHNob3VsZCBtYWtlIGEgU2ltcGxl
Q29sb3IuCi1XRUJDT1JFX0VYUE9SVCBDb2xvciBtYWtlRXh0ZW5kZWRDb2xvcihmbG9hdCBjMSwg
ZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSk7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBSZWY8RXh0ZW5kZWRDb2xvcj4gRXh0ZW5kZWRDb2xv
cjo6Y3JlYXRlKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRXh0ZW5kZWRDb2xvcihhc0NvbG9yQ29tcG9uZW50cyhjb2xvciksIGNvbG9yLmNvbG9y
U3BhY2UpKTsKK30KKworaW5saW5lIFJlZjxFeHRlbmRlZENvbG9yPiBFeHRlbmRlZENvbG9yOjpj
cmVhdGUoQ29sb3JDb21wb25lbnRzPGZsb2F0PiBjb21wb25lbnRzLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRXh0ZW5kZWRDb2xvcihjb21wb25l
bnRzLCBjb2xvclNwYWNlKSk7Cit9CisKK2lubGluZSBFeHRlbmRlZENvbG9yOjpFeHRlbmRlZENv
bG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4gY29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNw
YWNlKQorICAgIDogbV9jb21wb25lbnRzKGNvbXBvbmVudHMpCisgICAgLCBtX2NvbG9yU3BhY2Uo
Y29sb3JTcGFjZSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gZGVjbHR5cGUo
YXV0bykgRXh0ZW5kZWRDb2xvcjo6Y2FsbE9uVW5kZXJseWluZ1R5cGUoRnVuY3RvciYmIGZ1bmN0
b3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2NvbG9yU3BhY2UpIHsKKyAgICBjYXNlIENvbG9y
U3BhY2U6OlNSR0I6CisgICAgICAgIHJldHVybiBmdW5jdG9yKGFzU1JHQkEobV9jb21wb25lbnRz
KSk7CisgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJSR0I6CisgICAgICAgIHJldHVybiBmdW5j
dG9yKGFzTGluZWFyU1JHQkEobV9jb21wb25lbnRzKSk7CisgICAgY2FzZSBDb2xvclNwYWNlOjpE
aXNwbGF5UDM6CisgICAgICAgIHJldHVybiBmdW5jdG9yKGFzRGlzcGxheVAzKG1fY29tcG9uZW50
cykpOworICAgIH0KK30KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDI2NDIzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Mzk4LDcgKzMzOTgsNyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6c2hvdWxkRHVtcFByb3Bl
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgLy8gQmFja2dyb3VuZCBjb2xv
ciBjb3VsZCBiZSBvZiBpbnRlcmVzdCB0byB0ZXN0cyBvciBvdGhlciBkdW1wZXJzIGlmIGl0J3Mg
bm9uLXdoaXRlLgotICAgICAgICBpZiAoIXN0cmNtcChwcm9wZXJ0eU5hbWUsICJiYWNrZ3JvdW5k
Q29sb3IiKSAmJiBDb2xvcjo6aXNXaGl0ZUNvbG9yKGxheWVyLT5iYWNrZ3JvdW5kQ29sb3IoKSkp
CisgICAgICAgIGlmICghc3RyY21wKHByb3BlcnR5TmFtZSwgImJhY2tncm91bmRDb2xvciIpICYm
IENvbG9yOjppc1doaXRlKGxheWVyLT5iYWNrZ3JvdW5kQ29sb3IoKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAgICAgLy8gVGhlIHJvb3QgdGlsZSBjYWNoZSdzIHJlcGFpbnRz
IHdpbGwgc2hvdyB1cCBhdCB0aGUgdG9wIHdpdGggRnJhbWVWaWV3J3MsCkluZGV4OiBUb29scy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjQyNDIp
CisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAy
MC0wNy0xMCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVkdWNl
IHN1cmZhY2UgYXJlYSBvZiB0aGUgRXh0ZW5kZWRDb2xvciBjbGFzcyB0byBhIGJhcmUgbWluaW11
bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0MjA0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRklYTUU6
IERPIE5PVCBMQU5EIFVOVElMIEFERElORyBORVcgVEVTVFMgRk9SIE5FVyBCRUhBVklPUiBPRiBT
VE9SSU5HIFJFUFJFU0VOVEFCTEUgU1JHQkE8ZmxvYXQ+IElOTElORS4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjptYWtlQ29s
b3IpOgorICAgICAgICBVcGRhdGUgdXNpbmcgbmV3IENvbG9yIGNvbnN0cnVjdG9yIGZvciBleHRl
bmRlZCBjb2xvcnMuCisgICAgICAgIAorCiAyMDIwLTA3LTEwICBHZW9mZnJleSBHYXJlbiAgPGdn
YXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHNvbWUgdGVzdGluZyBmb3IgSlNSdW5Mb29w
VGltZXIKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENv
bG9yVGVzdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNjQyMzApCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIFRF
U1QoRXh0ZW5kZWRDb2xvciwgQ29uc3RydWN0b3IpCiB7Ci0gICAgQ29sb3IgYzEgeyBtYWtlRXh0
ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07
CisgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9
IH07CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIGF1dG8gW3IsIGcs
IGIsIGFscGhhXSA9IGMxLmFzRXh0ZW5kZWQoKS5jb21wb25lbnRzKCk7CkBAIC01Miw3ICs1Miw3
IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29uc3RydWN0b3IpCiAKIFRFU1QoRXh0ZW5kZWRDb2xv
ciwgQ29weUNvbnN0cnVjdG9yKQogewotICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3Io
MS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgIENvbG9y
IGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgIEVY
UEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xvciBjMihjMSk7CkBAIC03MCw3
ICs3MCw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29weUNvbnN0cnVjdG9yKQogCiBURVNUKEV4
dGVuZGVkQ29sb3IsIEFzc2lnbm1lbnQpCiB7Ci0gICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRD
b2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAg
Q29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAg
ICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIGMyID0gYzE7CkBA
IC04OSwyMCArODksMjAgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBBc3NpZ25tZW50KQogVEVTVChF
eHRlbmRlZENvbG9yLCBFcXVhbGl0eSkKIHsKICAgICB7Ci0gICAgICAgIENvbG9yIGMxIHsgbWFr
ZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAz
KSB9OworICAgICAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4y
NSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAotICAg
ICAgICBDb2xvciBjMiB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENv
bG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICAgICAgQ29sb3IgYzIgeyBEaXNwbGF5UDM8Zmxv
YXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgICAgIEVYUEVDVF9UUlVFKGMxLmlz
RXh0ZW5kZWQoKSk7CiAKICAgICAgICAgRVhQRUNUX0VRKGMxLCBjMik7CiAgICAgfQogCiAgICAg
ewotICAgICAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAx
LjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICAgICAgQ29sb3IgYzEgeyBEaXNwbGF5
UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgICAgIEVYUEVDVF9UUlVF
KGMxLmlzRXh0ZW5kZWQoKSk7CiAKLSAgICAgICAgQ29sb3IgYzIgeyBtYWtlRXh0ZW5kZWRDb2xv
cigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpTUkdCKSB9OworICAgICAgICBDb2xv
ciBjMiB7IFNSR0JBPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgICAgICBF
WFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgICAgIEVYUEVDVF9ORShjMSwgYzIp
OwpAQCAtMTEyLDcgKzExMiw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgRXF1YWxpdHkpCiAgICAg
aW50IGcgPSAxMjg7CiAgICAgaW50IGIgPSA2MzsKICAgICBpbnQgYSA9IDEyNzsKLSAgICBDb2xv
ciByZ2IxIHsgbWFrZUV4dGVuZGVkQ29sb3IociAvIDI1NS4wLCBnIC8gMjU1LjAsIGIgLyAyNTUu
MCwgYSAvIDI1NS4wLCBDb2xvclNwYWNlOjpTUkdCKSB9OworICAgIENvbG9yIHJnYjEgeyBTUkdC
QTxmbG9hdD4geyByIC8gMjU1LjBmLCBnIC8gMjU1LjBmLCBiIC8gMjU1LjBmLCBhIC8gMjU1LjBm
IH0gfTsKICAgICBDb2xvciByZ2IyID0gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIGEpOwogICAg
IEVYUEVDVF9ORShyZ2IxLCByZ2IyKTsKICAgICBFWFBFQ1RfTkUocmdiMiwgcmdiMSk7CkBAIC0x
MjEsMjAgKzEyMSwyMCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEVxdWFsaXR5KQogVEVTVChFeHRl
bmRlZENvbG9yLCBIYXNoKQogewogICAgIHsKLSAgICAgICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5k
ZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07Cisg
ICAgICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAg
fSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCi0gICAgICAgIENv
bG9yIGMyIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFj
ZTo6RGlzcGxheVAzKSB9OworICAgICAgICBDb2xvciBjMiB7IERpc3BsYXlQMzxmbG9hdD4geyAx
LjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRl
ZCgpKTsKIAogICAgICAgICBFWFBFQ1RfRVEoYzEuaGFzaCgpLCBjMi5oYXNoKCkpOwogICAgIH0K
IAogICAgIHsKLSAgICAgICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwg
MC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgICAgIENvbG9yIGMxIHsg
RGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgICAgICBFWFBF
Q1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCi0gICAgICAgIENvbG9yIGMyIHsgbWFrZUV4dGVu
ZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6U1JHQikgfTsKKyAgICAg
ICAgQ29sb3IgYzIgeyBTUkdCQTxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAg
ICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgICAgICBFWFBFQ1RfTkUo
YzEuaGFzaCgpLCBjMi5oYXNoKCkpOwpAQCAtMTQ0LDE0ICsxNDQsMTQgQEAgVEVTVChFeHRlbmRl
ZENvbG9yLCBIYXNoKQogICAgIGludCBnID0gMTI4OwogICAgIGludCBiID0gNjM7CiAgICAgaW50
IGEgPSAxMjc7Ci0gICAgQ29sb3IgcmdiMSB7IG1ha2VFeHRlbmRlZENvbG9yKHIgLyAyNTUuMCwg
ZyAvIDI1NS4wLCBiIC8gMjU1LjAsIGEgLyAyNTUuMCwgQ29sb3JTcGFjZTo6U1JHQikgfTsKKyAg
ICBDb2xvciByZ2IxIHsgU1JHQkE8ZmxvYXQ+IHsgciAvIDI1NS4wZiwgZyAvIDI1NS4wZiwgYiAv
IDI1NS4wZiwgYSAvIDI1NS4wZiB9IH07CiAgICAgQ29sb3IgcmdiMiA9IG1ha2VTaW1wbGVDb2xv
cihyLCBnLCBiLCBhKTsKICAgICBFWFBFQ1RfTkUocmdiMS5oYXNoKCksIHJnYjIuaGFzaCgpKTsK
IH0KIAogVEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQ29uc3RydWN0b3IpCiB7Ci0gICAgQ29sb3Ig
YzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpE
aXNwbGF5UDMpIH07CisgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUs
IDAuMjUsIDEuMCB9IH07CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAg
IENvbG9yIGMyKFdURk1vdmUoYzEpKTsKQEAgLTE3Miw3ICsxNzIsNyBAQCBURVNUKEV4dGVuZGVk
Q29sb3IsIE1vdmVDb25zdHJ1Y3RvcikKIAogVEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQXNzaWdu
bWVudCkKIHsKLSAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1
LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICBDb2xvciBjMSB7IERpc3BsYXlQ
MzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICBFWFBFQ1RfVFJVRShjMS5p
c0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IgYzIgPSBXVEZNb3ZlKGMxKTsKQEAgLTE5NCw3ICsx
OTQsOCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVBc3NpZ25tZW50KQogCiBURVNUKEV4dGVu
ZGVkQ29sb3IsIEJhc2ljUmVmZXJlbmNlQ291bnRpbmcpCiB7Ci0gICAgQ29sb3IqIGMxID0gbmV3
IENvbG9yIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFj
ZTo6RGlzcGxheVAzKSB9OworICAgIENvbG9yKiBjMSA9IG5ldyBDb2xvciB7IERpc3BsYXlQMzxm
bG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKKyAgICAKICAgICBFWFBFQ1RfVFJVRShj
MS0+aXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yKiBjMiA9IG5ldyBDb2xvcigqYzEpOwpAQCAt
MjIwLDcgKzIyMSw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQmFzaWNSZWZlcmVuY2VDb3VudGkK
IAogQ29sb3IgbWFrZUNvbG9yKCkKIHsKLSAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9y
KDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICBDb2xv
ciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICBF
WFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogICAgIEVYUEVDVF9FUSgxdSwgYzEuYXNFeHRl
bmRlZCgpLnJlZkNvdW50KCkpOwogCkBAIC0yMzgsNyArMjM5LDcgQEAgVEVTVChFeHRlbmRlZENv
bG9yLCBSZXR1cm5WYWx1ZXMpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgUDNDb252ZXJzaW9uVG9T
UkdCKQogewotICAgIENvbG9yIHAzQ29sb3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwg
MC4yNSwgMC43NSwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgIENvbG9yIHAzQ29sb3Ig
eyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDAuNzUgfSB9OwogICAgIEVYUEVD
VF9UUlVFKHAzQ29sb3IuaXNFeHRlbmRlZCgpKTsKIAogICAgIGF1dG8gc1JHQkFDb2xvciA9IHAz
Q29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwpAQCAtMjUwLDkgKzI1MSwxMCBAQCBURVNUKEV4
dGVuZGVkQ29sb3IsIFAzQ29udmVyc2lvblRvU1JHQikKIAogVEVTVChFeHRlbmRlZENvbG9yLCBM
aW5lYXJTUkdCQ29udmVyc2lvblRvU1JHQikKIHsKLSAgICBDb2xvciBsaW5lYXJDb2xvciB7IG1h
a2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAwLjc1LCBDb2xvclNwYWNlOjpMaW5lYXJS
R0IpIH07Ci0gICAgRVhQRUNUX1RSVUUobGluZWFyQ29sb3IuaXNFeHRlbmRlZCgpKTsKLSAgICBh
dXRvIHNSR0JBQ29sb3IgPSBsaW5lYXJDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAg
Q29sb3IgbGluZWFyU1JHQkFDb2xvciB7IExpbmVhclNSR0JBPGZsb2F0PiB7IDEuMCwgMC41LCAw
LjI1LCAwLjc1IH0gfTsKKyAgICBFWFBFQ1RfVFJVRShsaW5lYXJTUkdCQUNvbG9yLmlzRXh0ZW5k
ZWQoKSk7CisKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBsaW5lYXJTUkdCQUNvbG9yLnRvU1JHQkFM
b3NzeTxmbG9hdD4oKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwo
c1JHQkFDb2xvci5yZWQsIDEuMGYpKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlh
bGx5RXF1YWwoc1JHQkFDb2xvci5ncmVlbiwgMC43MzUzNTY5MjdmKSk7CiAgICAgRVhQRUNUX1RS
VUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IuYmx1ZSwgMC41MzcwOTg3MDZm
KSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404023</attachid>
            <date>2020-07-10 16:45:13 -0700</date>
            <delta_ts>2020-07-10 18:47:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214204-20200710164513.patch</filename>
            <type>text/plain</type>
            <size>48808</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDIwLTA3LTEwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZWR1Y2Ugc3VyZmFjZSBhcmVhIG9m
IHRoZSBFeHRlbmRlZENvbG9yIGNsYXNzIHRvIGEgYmFyZSBtaW5pbXVtCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQyMDQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkZCBoZWxwZXIgZnVuY3Rpb24g
dG8gQ29sb3IgdG8gb3BlcmF0ZSBvbiB0aGUgdW5kZXJseWluZyBjb2xvciB0eXBlCisgICAgICAg
ICAgYW5kIHJlaW1wbGVtZW50IGEgYnVuY2ggb2YgZnVuY3Rpb25hbGl0eSB1c2luZyBpdCwgcmVk
dWNpbmcgdGhlIG5lZWQKKyAgICAgICAgICBmb3IgZHVwbGljYXRlIGltcGxlbWVudGF0aW9ucyBp
biBFeHRlbmRlZENvbG9yLgorICAgICAgICAtIEFkZCBjb25zdHJ1Y3RvcnMgdG8gQ29sb3IgdGhh
dCB0YWtlIGV4dGVuZGVkIGNvbG9yIHR5cGVzLgorICAgICAgICAgICAgLSBXaGVuIGNvbnN0cnVj
dGluZyBhIENvbG9yIGZyb20gYSBTUkdCQTxmbG9hdD4sIGNoZWNrIHRvIHNlZSBpZiB0aGUKKyAg
ICAgICAgICAgICAgY29sb3IgY2FuIGJlIHJlcHJlc2VudGVkIGxvc3NsZXNzbHkgYnkgYSBTUkdC
QTx1aW50OF90PiBhbmQgaWYgY2FuLAorICAgICAgICAgICAgICBzdG9yZSBpdCBpbmxpbmUuCisK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgIFJlbW92ZSBFeHRlbmVkQ29sb3IuY3BwCisKKyAgICAgICAg
KiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRl
cnMpOgorICAgICAgICBVc2UgbmV3IENvbG9yIGNvbnN0cnVjdG9yIHRha2luZyBDb2xvckNvbXBv
bmVudHMgYW5kIENvbG9yU3BhY2UuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvbXBvc2l0ZU9wZXJhdG9yRm9yQmFja2dyb3VuZENv
bG9yIGNvbnN0KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFydCBjb25zdCk6CisgICAg
ICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tOgorICAgICAgICAobm9ybWFsaXpl
ZENvbG9yKToKKyAgICAgICAgVXBkYXRlIGZvciByZW5hbWUgZnJvbSBDb2xvcjo6aXNCbGFja0Nv
bG9yL0NvbG9yOjppc1doaXRlQ29sb3IgdG8gQ29sb3I6OmlzQmxhY2svQ29sb3I6OmlzV2hpdGUu
CisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6aGFzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y2FsbE9u
VW5kZXJseWluZ1R5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFM
b3NzeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2V0Q29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6OmlzQmxhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omlz
V2hpdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6c2V0SW5saW5lQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmlzQmxhY2tDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
aXNXaGl0ZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ckNvbnZlcnNpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvU1JHQkEpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9MaW5lYXJTUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjp0b0Rpc3BsYXlQMyk6Cisg
ICAgICAgIChXZWJDb3JlOjp0b0xpbmVhckRpc3BsYXlQMyk6CisgICAgICAgIChXZWJDb3JlOjp0
b0hTTEEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OnNlcmlhbGl6YXRpb25Gb3JDU1MpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXphdGlvbkZv
ckhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1Rl
eHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6aXNCbGFj
ayk6CisgICAgICAgIChXZWJDb3JlOjppc1doaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9FeHRlbmRlZENvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6RXh0ZW5kZWRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjpjYWxsT25VbmRlcmx5aW5nVHlwZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjp0b1NSR0JBTG9zc3kgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzaG91bGREdW1wUHJvcGVy
dHlGb3JMYXllciBjb25zdCk6CisKIDIwMjAtMDctMTAgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBw
bGUuY29tPgogCiAgICAgICAgIFBhcnQgNCBvZiBTaW1wbGVDb2xvciBhbmQgU1JHQkE8dWludDhf
dD4gYXJlIGVzc2VudGlhbGx5IHRoZSBzYW1lIC0gbGV0J3MgY29udmVyZ2UgdGhlbQpJbmRleDog
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQJKHJldmlzaW9uIDI2NDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xODI3LDcgKzE4MjcsNiBAQCBwbGF0Zm9ybS9ncmFwaGlj
cy9DdXN0b21QYWludEltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hN
b25pdG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5jcHAK
LXBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY0MjMwKQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC03MjI4LDcgKzcyMjgsNiBAQAogCQkzMUQyNkJDNTFGODZEMjY4MDA4RkYyNTUg
LyogSlNJbWFnZUJpdG1hcE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNJbWFnZUJpdG1hcE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MzFEMjZCQzYxRjg2RDI2OTAwOEZGMjU1IC8qIEpTSW1hZ2VCaXRtYXAuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbWFnZUJpdG1hcC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTMxRDU5MUIxMTY2OTdBNkMwMEU2QkYwMiAvKiBQbHVnSW5DbGll
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z0luQ2xpZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxRENERjQxMURBMUM0NTQwMEVBNUI5MyAvKiBF
eHRlbmRlZENvbG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4
dGVuZGVkQ29sb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMURDREY0MjFE
QTFDNDU0MDBFQTVCOTMgLyogRXh0ZW5kZWRDb2xvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFeHRlbmRlZENvbG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxREVBNDUzMUIzOUY0RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU3lzdGVtQmFja2Ryb3BM
YXllci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFERUE0NTQxQjM5RjREOTAw
Rjc3MTc4IC8qIFdlYlN5c3RlbUJhY2tkcm9wTGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViU3lzdGVtQmFja2Ryb3BMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTk1ODIsOCArMTk1ODEsOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNTE1
QkUxOTcxRDU0RjZCRDAwREQ3QzY4IC8qIEhJREdhbWVwYWQuY3BwICovLAogCQkJCTUxNUJFMTk4
MUQ1NEY2QkQwMEREN0M2OCAvKiBISURHYW1lcGFkLmggKi8sCi0JCQkJNTE1QkUxOTkxRDU0RjZC
RDAwREQ3QzY4IC8qIEhJREdhbWVwYWRQcm92aWRlci5tbSAqLywKIAkJCQk1MTVCRTE5QTFENTRG
NkJEMDBERDdDNjggLyogSElER2FtZXBhZFByb3ZpZGVyLmggKi8sCisJCQkJNTE1QkUxOTkxRDU0
RjZCRDAwREQ3QzY4IC8qIEhJREdhbWVwYWRQcm92aWRlci5tbSAqLywKIAkJCQk1MTdFMDNGNDI0
QjZCOTYzMDA1NDg5NUEgLyogTXVsdGlHYW1lcGFkUHJvdmlkZXIuaCAqLywKIAkJCQk1MTdFMDNG
NTI0QjZCOTY0MDA1NDg5NUEgLyogTXVsdGlHYW1lcGFkUHJvdmlkZXIubW0gKi8sCiAJCQkpOwpA
QCAtMjU1NTYsNyArMjU1NTUsNiBAQAogCQkJCTJEMjlFQ0MyMTkyRUNDODMwMDk4NEI3OCAvKiBE
aXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuaCAqLywKIAkJCQkyRDI5RUNDMzE5MkVDQzgzMDA5
ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5jcHAgKi8sCiAJCQkJMkQyOUVD
QzQxOTJFQ0M4MzAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuaCAqLywK
LQkJCQkzMURDREY0MTFEQTFDNDU0MDBFQTVCOTMgLyogRXh0ZW5kZWRDb2xvci5jcHAgKi8sCiAJ
CQkJMzFEQ0RGNDIxREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuaCAqLywKIAkJCQk2
RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uc0dMLmggKi8sCiAJCQkJQjI3NTM1
M0EwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuY3BwICovLApAQCAtMjY4ODAsNyArMjY4
NzgsNiBAQAogCQlDRDk0QTVDQjFGNzFDQjQ2MDBGNTI1QzUgLyogZW5jcnlwdGVkbWVkaWEgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUNERTNBRTEzMjRC
NDkzNkYwMDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuY3BwICovLAogCQkJCUNEOTRBNUQ5MUY3MUNC
OUYwMEY1MjVDNSAvKiBjbGVhcmtleSAqLywKIAkJCQlDREY3NTY5QjIxNUMyM0E0MDBFRkNCNTAg
LyogQ0RNRW5jcnlwdGlvblNjaGVtZS5oICovLAogCQkJCUNEOTRBNUQxMUY3MUNCNkIwMEY1MjVD
NSAvKiBDRE1GYWN0b3J5LmNwcCAqLywKQEAgLTI2ODk1LDEyICsyNjg5MiwxMyBAQAogCQkJCUNE
OTRBNUQ2MUY3MUNCNkQwMEY1MjVDNSAvKiBDRE1NZXNzYWdlVHlwZS5oICovLAogCQkJCUNEM0NF
MTFDMjQwNDUxQUYwMDRCQTAxRCAvKiBDRE1Qcml2YXRlLmNwcCAqLywKIAkJCQlDRDk0QTVDRjFG
NzFDQjZBMDBGNTI1QzUgLyogQ0RNUHJpdmF0ZS5oICovLAotCQkJCUNERTNBRTEwMjRCNDkxNjkw
MDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuaCAqLywKIAkJCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1
RDUgLyogQ0RNUHJveHkuY3BwICovLAogCQkJCUNEOTRBNUNGMUY3MUNCNjEwMEY1MjVDNSAvKiBD
RE1Qcm94eS5oICovLAogCQkJCUNEOTRBNUNDMUY3MUNCNjkwMEY1MjVDNSAvKiBDRE1SZXF1aXJl
bWVudC5oICovLAogCQkJCUNEOTRBNUQwMUY3MUNCNkIwMEY1MjVDNSAvKiBDRE1SZXN0cmljdGlv
bnMuaCAqLywKIAkJCQlDRDk0QTVENTFGNzFDQjZEMDBGNTI1QzUgLyogQ0RNU2Vzc2lvblR5cGUu
aCAqLywKKwkJCQlDREUzQUUxMzI0QjQ5MzZGMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmNwcCAq
LywKKwkJCQlDREUzQUUxMDI0QjQ5MTY5MDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmggKi8sCiAJ
CQkpOwogCQkJcGF0aCA9IGVuY3J5cHRlZG1lZGlhOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKQEAgLTMwMDgyLDYgKzMwMDgwLDcgQEAKIAkJCQlDRDNDRTEwMzI0MDFBQURBMDA0QkEwMUQg
LyogQ0RNUmVzdHJpY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREU1OTU5NzFCRjI2RTIx
MDBBMUNCRTggLyogQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQ0QzQ0UxMDQyNDAxQUFEQTAwNEJBMDFEIC8qIENETVNlc3Npb25UeXBlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlDREUzQUUxMjI0QjQ5MTZBMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1RkE5MDRDQTE3OEU2MUY1MDA0QzhBMkQgLyogQ2VydGlmaWNh
dGVJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MUI4RjBCNTIxOTUzRDY1MDAwQzJCMDAgLyog
Q2VydGlmaWNhdGVJbmZvQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzNkZEMTUxNkM3ODI2
NTAwRjg4N0MxIC8qIENoYW5nZVZlcnNpb25EYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMjE5
LDcgKzMxMjE4LDYgQEAKIAkJCQlGMzQ0Qzc1MzExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0EwRTc3MEYxMEMwMEE4
ODAwQTAyNzZFIC8qIEluc3BlY3RvckZyb250ZW5kSG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0E1NDg1ODAxNEUwMkQ1MTAwNkFFMDVBIC8qIEluc3BlY3Rvckhpc3RvcnkuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUNERTNBRTEyMjRCNDkxNkEwMDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1QjgxQ0FFMUZBQTQ0NjIwMDM3RDFFNiAvKiBJbnNwZWN0b3JJbmRl
eGVkREJBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjBENjI5MjcxMjUzNjkwQjAwMDgxNTQz
IC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NjBF
NkQyMzBERTMwMzAwNDYxQUFFIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvblB1YmxpYy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMjQwMiw2ICszMjQwMCw3IEBACiAJCQkJODUwMzFCNDgwQTQ0RUZD
NzAwRjk5MkUwIC8qIE1vdXNlUmVsYXRlZEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMw
OURGQzA5OUU2NDkyMDA1NkU1ODEgLyogTW92ZVNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZEQjE3MDA2MTRBMkJBQjIwMEEyQjVEOSAvKiBNdWx0aUNoYW5uZWxSZXNhbXBs
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxN0UwM0Y3MjRCNkQ5ODQwMDU0ODk1QSAvKiBNdWx0
aUdhbWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2QjAxQjNCNjVBQzAw
MDVERDc5IC8qIE11dGFibGVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2QjExQjNC
NjVBQzAwMDVERDc5IC8qIE11dGFibGVSYW5nZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM2
RjA5MDBBMTQzMjdCNjEwMDY4NTg0OSAvKiBNdXRhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAq
LywKQEAgLTMzMjgxLDcgKzMzMjgwLDYgQEAKIAkJCQlFQ0E2ODBDNzFFNjc3MjQ1MDA3MzFEMjAg
LyogU3RyaW5nVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5QjZDNDE1MzEzNDQ5NDkw
MDAwODVCNjIgLyogU3RyaW5nV2l0aERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ5
Rjc3NzYwRUZFQzYyMDAwOTA4NDlEIC8qIFN0cm9rZVN0eWxlQXBwbGllci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNTE3RTAzRjcyNEI2RDk4NDAwNTQ4OTVBIC8qIE11bHRpR2FtZXBhZFByb3ZpZGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTRCODIwNTFENkRGMEU1MDA3N0VCRTMgLyogU3RydWN0
dXJlZENsb25lLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDVCQTZCNjIzNzYyMkEzMDA0REZDMDcg
LyogU3R5bGVBZGp1c3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI2QTMwRTgxREM0RjAw
QjI1OTY1IC8qIFN0eWxlQmFja2dyb3VuZERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ0NzMs
NiArMzQ0NzEsNyBAQAogCQkJCUNEREUwMkVEMThCM0VENkQwMENGN0ZGMSAvKiBDRE1TZXNzaW9u
QVZGb3VuZGF0aW9uT2JqQy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEREUwMkYwMThCNTY1MTMw
MENGN0ZGMSAvKiBDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQ0RFNTk1OUQxQkYyNzU3MTAwQTFDQkU4IC8qIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9i
akMubW0gaW4gU291cmNlcyAqLywKKwkJCQlDREUzQUUxNDI0QjQ5MzcwMDAxMjhFN0UgLyogQ0RN
VXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExNDA5MEZCMUFBNTFFMUQwMDkxMTkx
QSAvKiBDb250ZW50RmlsdGVyVW5ibG9ja0hhbmRsZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTA3QUZGNDIzMUVGQjE0NDkwMEI1NDVCMyAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9T
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDZDNjk2Q0MxRTcyMDVGQzAwNTk3OTM3IC8qIENQVU1v
bml0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zNDgwMiw3ICszNDgwMSw2IEBACiAJCQkJREVD
QTdEQjcxRjlFNjdCNjAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNjcuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJREVDQTdEQjgxRjlFNjdCNjAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNjguY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJREVDQTdEQjkxRjlFNjdCNjAwRTNCNjYxIC8qIFVuaWZpZWRT
b3VyY2UxNjkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RFM0FFMTQyNEI0OTM3MDAwMTI4RTdF
IC8qIENETVV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBN0RCQTFGOUU2N0I2
MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTE3MC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNB
N0RGQjFGOUVCMzY0MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTE3MS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlERUNBN0RGQzFGOUVCMzY0MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTE3Mi5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI2NDIzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjU4LDcgKzY1OCw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVu
Y3Rpb25QYXJhbWV0ZXIKICAgICAgICAgY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkRpc3BsYXlQ
MzsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7
CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIGNvbnN1bWVJZGVudChhcmdzKTsKIApA
QCAtNjc2LDcgKzY3Niw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0
ZXIKICAgICAgICAgaWYgKCFhbHBoYVBhcmFtZXRlcikKICAgICAgICAgICAgIGFscGhhUGFyYW1l
dGVyID0gY29uc3VtZU51bWJlcihhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKICAgICAgICAgaWYgKCFh
bHBoYVBhcmFtZXRlcikKLSAgICAgICAgICAgIHJldHVybiBDb2xvcigpOworICAgICAgICAgICAg
cmV0dXJuIHsgfTsKIAogICAgICAgICBjb2xvckNoYW5uZWxzWzNdID0gc3RkOjptYXgoMC4wLCBz
dGQ6Om1pbigxLjAsIGFscGhhUGFyYW1ldGVyLT5pc1BlcmNlbnRhZ2UoKSA/IChhbHBoYVBhcmFt
ZXRlci0+ZG91YmxlVmFsdWUoKSAvIDEwMCkgOiBhbHBoYVBhcmFtZXRlci0+ZG91YmxlVmFsdWUo
KSkpOwogICAgIH0KQEAgLTY4NCw5ICs2ODQsOSBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1
bmN0aW9uUGFyYW1ldGVyCiAgICAgLy8gRklYTUU6IFN1cHBvcnQgdGhlIGNvbW1hLXNlcGFyYXRl
ZCBsaXN0IG9mIGZhbGxiYWNrIGNvbG9yIHZhbHVlcy4KIAogICAgIGlmICghYXJncy5hdEVuZCgp
KQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAKLSAgICByZXR1cm4gbWFrZUV4dGVuZGVk
Q29sb3IoY29sb3JDaGFubmVsc1swXSwgY29sb3JDaGFubmVsc1sxXSwgY29sb3JDaGFubmVsc1sy
XSwgY29sb3JDaGFubmVsc1szXSwgY29sb3JTcGFjZSk7CisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICByZXR1cm4gQ29sb3IgeyBDb2xvckNvbXBvbmVudHMgeyBzdGF0aWNfY2FzdDxmbG9hdD4o
Y29sb3JDaGFubmVsc1swXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckNoYW5uZWxzWzFdKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQ2hhbm5lbHNbMl0pLCBzdGF0aWNfY2FzdDxmbG9hdD4o
Y29sb3JDaGFubmVsc1szXSkgfSwgY29sb3JTcGFjZSB9OwogfQogCiBzdGF0aWMgT3B0aW9uYWw8
U1JHQkE8dWludDhfdD4+IHBhcnNlSGV4Q29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGJvb2wgYWNjZXB0UXVpcmt5Q29sb3JzKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShy
ZXZpc2lvbiAyNjQyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MjIxLDcgKzcyMjEsNyBAQCBPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0
aW9ucz4gRG9jdW1lbnQ6CiAKIENvbXBvc2l0ZU9wZXJhdG9yIERvY3VtZW50Ojpjb21wb3NpdGVP
cGVyYXRvckZvckJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IFJlbmRl
ck9iamVjdCYgcmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgaWYgKExJS0VMWSghc2V0dGluZ3MoKS5w
dW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKCkgfHwgIUNvbG9yOjppc1doaXRlQ29s
b3IoY29sb3IpIHx8ICFyZW5kZXJlci51c2VEYXJrQXBwZWFyYW5jZSgpKSkKKyAgICBpZiAoTElL
RUxZKCFzZXR0aW5ncygpLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUoKSB8fCAh
Q29sb3I6OmlzV2hpdGUoY29sb3IpIHx8ICFyZW5kZXJlci51c2VEYXJrQXBwZWFyYW5jZSgpKSkK
ICAgICAgICAgcmV0dXJuIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyOwogCiAgICAgYXV0
byogZnJhbWVWaWV3ID0gdmlldygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAko
cmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MDMwLDggKzQwMzAsOCBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6
OmZvbnRBdHRyaWJ1dGVzQXRTCiAgICAgICAgIGF0dHJpYnV0ZXMuYmFja2dyb3VuZENvbG9yID0g
YmFja2dyb3VuZENvbG9yOwogCiAgICAgYXV0byBmb3JlZ3JvdW5kQ29sb3IgPSBzdHlsZS0+dmlz
aXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKENTU1Byb3BlcnR5Q29sb3IpOwotICAg
IC8vIEZJWE1FOiBpc0JsYWNrQ29sb3Igbm90IHN1aXRhYmxlIGZvciBkYXJrIG1vZGUuCi0gICAg
aWYgKGZvcmVncm91bmRDb2xvci5pc1ZhbGlkKCkgJiYgIUNvbG9yOjppc0JsYWNrQ29sb3IoZm9y
ZWdyb3VuZENvbG9yKSkKKyAgICAvLyBGSVhNRTogQ29sb3I6OmlzQmxhY2sgbm90IHN1aXRhYmxl
IGZvciBkYXJrIG1vZGUuCisgICAgaWYgKGZvcmVncm91bmRDb2xvci5pc1ZhbGlkKCkgJiYgIUNv
bG9yOjppc0JsYWNrKGZvcmVncm91bmRDb2xvcikpCiAgICAgICAgIGF0dHJpYnV0ZXMuZm9yZWdy
b3VuZENvbG9yID0gZm9yZWdyb3VuZENvbG9yOwogCiAgICAgaWYgKGF1dG8qIHNoYWRvd0RhdGEg
PSBzdHlsZS0+dGV4dFNoYWRvdygpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9IVE1MQ29udmVydGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvSFRNTENvbnZlcnRlci5tbQkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NTks
MTAgKzg1OSwxMCBAQCBzdGF0aWMgQ29sb3Igbm9ybWFsaXplZENvbG9yKENvbG9yIGNvbG9yCiAg
ICAgICAgIHJldHVybiBjb2xvcjsKIAogICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UgPSBlbGVt
ZW50LmRvY3VtZW50KCkudXNlRGFya0FwcGVhcmFuY2UoZWxlbWVudC5leGlzdGluZ0NvbXB1dGVk
U3R5bGUoKSk7Ci0gICAgaWYgKHVzZURhcmtBcHBlYXJhbmNlICYmIENvbG9yOjppc1doaXRlQ29s
b3IoY29sb3IpKQorICAgIGlmICh1c2VEYXJrQXBwZWFyYW5jZSAmJiBDb2xvcjo6aXNXaGl0ZShj
b2xvcikpCiAgICAgICAgIHJldHVybiBDb2xvcigpOwogCi0gICAgaWYgKCF1c2VEYXJrQXBwZWFy
YW5jZSAmJiBDb2xvcjo6aXNCbGFja0NvbG9yKGNvbG9yKSkKKyAgICBpZiAoIXVzZURhcmtBcHBl
YXJhbmNlICYmIENvbG9yOjppc0JsYWNrKGNvbG9yKSkKICAgICAgICAgcmV0dXJuIENvbG9yKCk7
CiAKICAgICByZXR1cm4gY29sb3I7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjQyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiw5IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKIAotI2luY2x1ZGUgIkFu
aW1hdGlvblV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgogI2lu
Y2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTEyNiwyMiArMTIzLDI2IEBAIGZsb2F0IENvbG9yOjpsdW1pbmFuY2UoKSBjb25z
dAogCiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0CiB7Ci0g
ICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5jb2xvcldp
dGhBbHBoYShhbHBoYSk7Ci0KLSAgICBDb2xvciByZXN1bHQgPSBjb2xvcldpdGhPdmVycmlkZW5B
bHBoYShhc0lubGluZSgpLCBhbHBoYSk7Ci0KLSAgICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZp
bmcgdGhlIHNlbWFudGljIGJpdCBkZXNpcmVkIGFuZC9vciBjb3JyZWN0IGhlcmU/Ci0gICAgaWYg
KGlzU2VtYW50aWMoKSkKLSAgICAgICAgcmVzdWx0LnRhZ0FzU2VtYW50aWMoKTsKLSAgICByZXR1
cm4gcmVzdWx0OworICAgIHJldHVybiBjYWxsT25VbmRlcmx5aW5nVHlwZShXVEY6Om1ha2VWaXNp
dG9yKAorICAgICAgICBbJl0gKGNvbnN0IFNSR0JBPHVpbnQ4X3Q+JiBjb2xvcikgLT4gQ29sb3Ig
eworICAgICAgICAgICAgQ29sb3IgcmVzdWx0ID0gY29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29s
b3IsIGFscGhhKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IFdoeSBpcyBwcmVzZXJ2aW5nIHRo
ZSBzZW1hbnRpYyBiaXQgZGVzaXJlZCBhbmQvb3IgY29ycmVjdCBoZXJlPworICAgICAgICAgICAg
aWYgKGlzU2VtYW50aWMoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygp
OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChj
b25zdCBhdXRvJiBjb2xvcikgLT4gQ29sb3IgeworICAgICAgICAgICAgcmV0dXJuIGNvbG9yV2l0
aE92ZXJyaWRlbkFscGhhKGNvbG9yLCBhbHBoYSk7CisgICAgICAgIH0KKyAgICApKTsKIH0KIAog
Q29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0CiB7
Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5pbnZl
cnRlZENvbG9yV2l0aEFscGhhKGFscGhhKTsKLSAgICByZXR1cm4gaW52ZXJ0ZWRDb2xvcldpdGhP
dmVycmlkZW5BbHBoYShhc0lubGluZSgpLCBhbHBoYSk7CisgICAgcmV0dXJuIGNhbGxPblVuZGVy
bHlpbmdUeXBlKFsmXSAoY29uc3QgYXV0byYgY29sb3IpIC0+IENvbG9yIHsKKyAgICAgICAgcmV0
dXJuIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29sb3IsIGFscGhhKTsKKyAgICB9
KTsKIH0KIAogQ29sb3IgQ29sb3I6OnNlbWFudGljQ29sb3IoKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjQyMzApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiU2ltcGxlQ29sb3IuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiAjaWYgVVNFKENHKQpAQCAt
NTEsNiArNTIsMTggQEAgdHlwZWRlZiBzdHJ1Y3QgX0dka1JHQkEgR2RrUkdCQTsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCisvLyBBYmxlIHRvIHJlcHJlc2VudDoKKy8vICAgIC0gU3BlY2lhbCAi
aW52YWxpZCBjb2xvciIgc3RhdGUKKy8vICAgIC0gNHggOC1iaXQgKDAtMjU1KSBzUkdCQSwgc3Rv
cmVkIGlubGluZSwgbm8gYWxsb2NhdGlvbgorLy8gICAgLSA0eCBmbG9hdCAoMC0xKSBzUkdCQSwg
c3RvcmVkIGluIGEgcmVmZXJlbmNlIGNvdW50ZWQgc3ViLW9iamVjdAorLy8gICAgLSA0eCBmbG9h
dCAoMC0xKSBMaW5lYXIgc1JHQkEsIHN0b3JlZCBpbiBhIHJlZmVyZW5jZSBjb3VudGVkIHN1Yi1v
YmplY3QKKy8vICAgIC0gNHggZmxvYXQgKDAtMSkgRGlzcGxheVAzLCBzdG9yZWQgaW4gYSByZWZl
cmVuY2UgY291bnRlZCBzdWItb2JqZWN0CisvLworLy8gQWRkaXRpb25hbGx5LCB0aGUgaW5saW5l
IDgtYml0IHNSR0JBIGNhbiBoYXZlIGFuIG9wdGlvbmFsICJzZW1hbnRpYyIgYml0IHNldCBvbiBp
dCwKKy8vIHdoaWNoIGluZGljYXRlcyB0aGUgY29sb3Igb3JpZ2luYXRlZCBmcm9tIGEgQ1NTIHNl
bWFudGljIGNvbG9yIG5hbWUuCisvLyBGSVhNRTogSWYgd2Uga2VlcCB0aGUgInNlbWFudGljIiBi
aXQgb24gQ29sb3IsIHdlIHNob3VsZCBleHRlbmQgc3VwcG9ydCB0byBhbGwgY29sb3JzLAorLy8g
bm90IGp1c3QgaW5saW5lIG9uZXMsIGJ5IHVzaW5nIHRoZSB1bnVzZWQgcG9pbnRlciBiaXRzLgor
CiBjbGFzcyBDb2xvciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBA
IC02Myw3ICs3NiwxMCBAQCBwdWJsaWM6CiAgICAgQ29sb3IoU1JHQkE8dWludDhfdD4sIFNlbWFu
dGljVGFnKTsKICAgICBDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4sIFNlbWFudGljVGFn
KTsKIAotICAgIENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmKTsKKyAgICBDb2xvcihDb2xvckNv
bXBvbmVudHM8ZmxvYXQ+LCBDb2xvclNwYWNlKTsKKyAgICBDb2xvcihjb25zdCBTUkdCQTxmbG9h
dD4mKTsKKyAgICBDb2xvcihjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mKTsKKyAgICBDb2xvcihj
b25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CiAKICAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hU
YWJsZUVtcHR5VmFsdWVUeXBlKTsKICAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZVR5cGUpOwpAQCAtNzIsMzQgKzg4LDM3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JF
X0VYUE9SVCBDb2xvcihjb25zdCBDb2xvciYpOwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKENv
bG9yJiYpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3ImIG9wZXJhdG9yPShjb25zdCBDb2xv
ciYpOworICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yJiBvcGVyYXRvcj0oQ29sb3ImJik7CisKICAg
ICB+Q29sb3IoKTsKIAotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5k
ZWQoKSB8fCAobV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyAmIHZhbGlkSW5saW5lQ29s
b3JCaXQpOyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwogCi0gICAgLy8gVHJ1ZSBpZiB0
aGUgY29sb3Igb3JpZ2luYXRlZCBmcm9tIGEgQ1NTIHNlbWFudGljIGNvbG9yIG5hbWUuCisgICAg
Ym9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpIHx8IChtX2NvbG9yRGF0
YS5pbmxpbmVDb2xvckFuZEZsYWdzICYgdmFsaWRJbmxpbmVDb2xvckJpdCk7IH0KICAgICBib29s
IGlzU2VtYW50aWMoKSBjb25zdCB7IHJldHVybiBpc0lubGluZSgpICYmIChtX2NvbG9yRGF0YS5p
bmxpbmVDb2xvckFuZEZsYWdzICYgaXNTZW1hbnRpY0lubGluZUNvbG9yQml0KTsgfQogCisKICAg
ICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRl
ZCgpLmFscGhhKCkgPT0gMS4wIDogYXNJbmxpbmUoKS5hbHBoYSA9PSAyNTU7IH0KICAgICBib29s
IGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5h
bHBoYSgpID4gMC4wIDogYXNJbmxpbmUoKS5hbHBoYSA+IDA7IH0KIAogICAgIHVpbnQ4X3QgYWxw
aGEoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBjb252ZXJ0VG9Db21wb25lbnRCeXRl
KGFzRXh0ZW5kZWQoKS5hbHBoYSgpKSA6IGFzSW5saW5lKCkuYWxwaGE7IH0KICAgICBmbG9hdCBh
bHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCku
YWxwaGEoKSA6IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGFzSW5saW5lKCkuYWxwaGEpOyB9CiAK
LSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgbHVt
aW5hbmNlKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgbGlnaHRuZXNzKCkgY29u
c3Q7IC8vIEZJWE1FOiBSZXBsYWNlIHJlbWFpbmluZyB1c2VzIHdpdGggbHVtaW5hbmNlLgogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxm
bG9hdD4+IGNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPiBkZWNsdHlwZShhdXRvKSBjYWxsT25VbmRlcmx5aW5nVHlwZShGdW5j
dG9yJiYpIGNvbnN0OwogCiAgICAgLy8gVGhpcyB3aWxsIGNvbnZlcnQgbm9uLXNSR0IgY29sb3Jz
cGFjZSBjb2xvcnMgaW50byBzUkdCLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFNSR0JBPFQ+
IHRvU1JHQkFMb3NzeSgpIGNvbnN0OwogCisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPENv
bG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+IGNvbG9yU3BhY2VBbmRDb21wb25lbnRz
KCkgY29uc3Q7CisKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBsaWdodGVuZWQoKSBjb25zdDsK
ICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBkYXJrZW5lZCgpIGNvbnN0OwogCi0gICAgV0VCQ09S
RV9FWFBPUlQgZmxvYXQgbHVtaW5hbmNlKCkgY29uc3Q7Ci0KLSAgICAvLyBGSVhNRTogUmVwbGFj
ZSByZW1haW5pbmcgdXNlcyB3aXRoIGx1bWluYW5jZS4KLSAgICBXRUJDT1JFX0VYUE9SVCBmbG9h
dCBsaWdodG5lc3MoKSBjb25zdDsKLQogICAgIENvbG9yIGludmVydGVkQ29sb3JXaXRoQWxwaGEo
T3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdDsKICAgICBDb2xvciBpbnZlcnRlZENvbG9yV2l0
aEFscGhhKGZsb2F0IGFscGhhKSBjb25zdDsKIApAQCAtMTQ0LDIyICsxNjMsMjQgQEAgcHVibGlj
OgogICAgIGNvbnN0IEV4dGVuZGVkQ29sb3ImIGFzRXh0ZW5kZWQoKSBjb25zdDsKICAgICBTUkdC
QTx1aW50OF90PiBhc0lubGluZSgpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3Im
IG9wZXJhdG9yPShjb25zdCBDb2xvciYpOwotICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yJiBvcGVy
YXRvcj0oQ29sb3ImJik7Ci0KICAgICAvLyBFeHRlbmRlZCBhbmQgbm9uLWV4dGVuZGVkIGNvbG9y
cyB3aWxsIGFsd2F5cyBiZSBub24tZXF1YWwuCiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpOwogICAgIGZyaWVuZCBib29sIGVxdWFsSWdu
b3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYik7CiAgICAg
ZnJpZW5kIGJvb2wgZXh0ZW5kZWRDb2xvcnNFcXVhbChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9y
Jik7CiAKLSAgICBzdGF0aWMgYm9vbCBpc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICBz
dGF0aWMgYm9vbCBpc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICBzdGF0aWMgYm9vbCBp
c0JsYWNrKGNvbnN0IENvbG9yJik7CisgICAgc3RhdGljIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xv
ciYpOwogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxDb2xv
cj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHNldElubGluZUNvbG9y
KFNSR0JBPHVpbnQ4X3Q+KTsKKyAgICBDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJik7CisKKyAg
ICB2b2lkIHNldENvbG9yKFNSR0JBPHVpbnQ4X3Q+KTsKKyAgICB2b2lkIHNldENvbG9yKGNvbnN0
IFNSR0JBPGZsb2F0PiYpOworICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgTGluZWFyU1JHQkE8Zmxv
YXQ+Jik7CisgICAgdm9pZCBzZXRDb2xvcihjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CiAgICAg
dm9pZCBzZXRFeHRlbmRlZENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmKTsKIAogICAgIHZvaWQg
dGFnQXNTZW1hbnRpYygpIHsgbV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyB8PSBpc1Nl
bWFudGljSW5saW5lQ29sb3JCaXQ7IH0KQEAgLTIyNywyOSArMjQ4LDU5IEBAIGlubGluZSBib29s
IGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGMKIAogaW5saW5lIENvbG9yOjpDb2xvcihTUkdC
QTx1aW50OF90PiBjb2xvcikKIHsKLSAgICBzZXRJbmxpbmVDb2xvcihjb2xvcik7CisgICAgc2V0
Q29sb3IoY29sb3IpOwogfQogCiBpbmxpbmUgQ29sb3I6OkNvbG9yKE9wdGlvbmFsPFNSR0JBPHVp
bnQ4X3Q+PiBjb2xvcikKIHsKICAgICBpZiAoY29sb3IpCi0gICAgICAgIHNldElubGluZUNvbG9y
KCpjb2xvcik7CisgICAgICAgIHNldENvbG9yKCpjb2xvcik7CiB9CiAKIGlubGluZSBDb2xvcjo6
Q29sb3IoU1JHQkE8dWludDhfdD4gY29sb3IsIFNlbWFudGljVGFnKQogewotICAgIHNldElubGlu
ZUNvbG9yKGNvbG9yKTsKKyAgICBzZXRDb2xvcihjb2xvcik7CiAgICAgdGFnQXNTZW1hbnRpYygp
OwogfQogCiBpbmxpbmUgQ29sb3I6OkNvbG9yKE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBjb2xv
ciwgU2VtYW50aWNUYWcpCiB7CiAgICAgaWYgKGNvbG9yKSB7Ci0gICAgICAgIHNldElubGluZUNv
bG9yKCpjb2xvcik7CisgICAgICAgIHNldENvbG9yKCpjb2xvcik7CiAgICAgICAgIHRhZ0FzU2Vt
YW50aWMoKTsKICAgICB9CiB9CiAKK2lubGluZSBDb2xvcjo6Q29sb3IoQ29sb3JDb21wb25lbnRz
PGZsb2F0PiBjb21wb25lbnRzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgc3dpdGNo
IChjb2xvclNwYWNlKSB7CisgICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgorICAgICAgICBzZXRD
b2xvcihhc1NSR0JBKGNvbXBvbmVudHMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29s
b3JTcGFjZTo6TGluZWFyUkdCOgorICAgICAgICBzZXRDb2xvcihhc0xpbmVhclNSR0JBKGNvbXBv
bmVudHMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAz
OgorICAgICAgICBzZXRDb2xvcihhc0Rpc3BsYXlQMyhjb21wb25lbnRzKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9Cit9CisKK2lubGluZSBDb2xvcjo6Q29sb3IoY29uc3QgU1JHQkE8ZmxvYXQ+
JiBjb2xvcikKK3sKKyAgICBzZXRDb2xvcihjb2xvcik7Cit9CisKK2lubGluZSBDb2xvcjo6Q29s
b3IoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBzZXRDb2xvcihjb2xv
cik7Cit9CisKK2lubGluZSBDb2xvcjo6Q29sb3IoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYgY29s
b3IpCit7CisgICAgc2V0Q29sb3IoY29sb3IpOworfQorCiBpbmxpbmUgQ29sb3I6OkNvbG9yKFJl
ZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCiB7CiAgICAgc2V0RXh0ZW5kZWRDb2xv
cihXVEZNb3ZlKGV4dGVuZGVkQ29sb3IpKTsKQEAgLTI4MCwxOSArMzMxLDM2IEBAIGlubGluZSBD
b2xvcjo6fkNvbG9yKCkKIAogaW5saW5lIHVuc2lnbmVkIENvbG9yOjpoYXNoKCkgY29uc3QKIHsK
LSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmhhc2go
KTsKKyAgICBpZiAoaXNFeHRlbmRlZCgpKSB7CisgICAgICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFs
cGhhXSA9IGFzRXh0ZW5kZWQoKS5jb21wb25lbnRzKCk7CisgICAgICAgIHJldHVybiBjb21wdXRl
SGFzaChjMSwgYzIsIGMzLCBhbHBoYSwgYXNFeHRlbmRlZCgpLmNvbG9yU3BhY2UoKSk7CisgICAg
fQogICAgIHJldHVybiBXVEY6OmludEhhc2gobV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFn
cyk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFNSR0JBPFQ+IENvbG9yOjp0b1NSR0JBTG9z
c3koKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gZGVjbHR5cGUoYXV0bykgQ29s
b3I6OmNhbGxPblVuZGVybHlpbmdUeXBlKEZ1bmN0b3ImJiBmdW5jdG9yKSBjb25zdAogewogICAg
IGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkudG9TUkdCQUxv
c3N5PFQ+KCk7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCB1aW50OF90PikK
LSAgICAgICAgcmV0dXJuIGFzSW5saW5lKCk7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3Nh
bWVfdjxULCBmbG9hdD4pCi0gICAgICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMo
YXNJbmxpbmUoKSk7CisgICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY2FsbE9uVW5kZXJseWlu
Z1R5cGUoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKKyAgICByZXR1cm4gZnVuY3Rv
cihhc0lubGluZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4gQ29sb3I6
OnRvU1JHQkFMb3NzeSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNhbGxPblVuZGVybHlpbmdUeXBl
KFdURjo6bWFrZVZpc2l0b3IoCisgICAgICAgIFtdIChjb25zdCBTUkdCQTx1aW50OF90PiYgY29s
b3IpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhf
dD4pCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbG9yOworICAgICAgICAgICAgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX3NhbWVfdjxULCBmbG9hdD4pCisgICAgICAgICAgICAgICAgcmV0dXJuIGNv
bnZlcnRUb0NvbXBvbmVudEZsb2F0cyhjb2xvcik7CisgICAgICAgIH0sCisgICAgICAgIFtdIChj
b25zdCBhdXRvJiBjb2xvcikgeworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3Nh
bWVfdjxULCB1aW50OF90PikKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvQ29tcG9u
ZW50Qnl0ZXModG9TUkdCQShjb2xvcikpOworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX3NhbWVfdjxULCBmbG9hdD4pCisgICAgICAgICAgICAgICAgcmV0dXJuIHRvU1JHQkEoY29s
b3IpOworICAgICAgICB9CisgICAgKSk7CiB9CiAKIGlubGluZSBDb2xvciBDb2xvcjo6aW52ZXJ0
ZWRDb2xvcldpdGhBbHBoYShPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0CkBAIC0zMjcsMTIg
KzM5NSwzMyBAQCBpbmxpbmUgU1JHQkE8dWludDhfdD4gQ29sb3I6OmFzSW5saW5lKCkgCiAgICAg
cmV0dXJuIGFzU1JHQkEoUGFja2VkOjpSR0JBIHsgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1fY29s
b3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgPj4gMzIpIH0pOwogfQogCi1pbmxpbmUgdm9pZCBD
b2xvcjo6c2V0SW5saW5lQ29sb3IoU1JHQkE8dWludDhfdD4gY29sb3IpCitpbmxpbmUgdm9pZCBD
b2xvcjo6c2V0Q29sb3IoU1JHQkE8dWludDhfdD4gY29sb3IpCiB7CiAgICAgbV9jb2xvckRhdGEu
aW5saW5lQ29sb3JBbmRGbGFncyA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihQYWNrZWQ6OlJHQkEg
eyBjb2xvciB9LnZhbHVlKSA8PCAzMjsKICAgICB0YWdBc1ZhbGlkKCk7CiB9CiAKK2lubGluZSB2
b2lkIENvbG9yOjpzZXRDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQoreworICAgIGF1
dG8gY29udmVydGVkID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoY29sb3IpOworICAgIGlmIChj
b2xvciA9PSBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoY29udmVydGVkKSkgeworICAgICAgICBz
ZXRDb2xvcihjb252ZXJ0ZWQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2V0RXh0
ZW5kZWRDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoY29sb3IpKTsKK30KKworaW5saW5lIHZv
aWQgQ29sb3I6OnNldENvbG9yKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3IpCit7Cisg
ICAgc2V0RXh0ZW5kZWRDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoY29sb3IpKTsKK30KKwor
aW5saW5lIHZvaWQgQ29sb3I6OnNldENvbG9yKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9y
KQoreworICAgIHNldEV4dGVuZGVkQ29sb3IoRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGNvbG9yKSk7
Cit9CisKIGlubGluZSB2b2lkIENvbG9yOjpzZXRFeHRlbmRlZENvbG9yKFJlZjxFeHRlbmRlZENv
bG9yPiYmIGV4dGVuZGVkQ29sb3IpCiB7CiAgICAgLy8gWmVybyB0aGUgdW5pb24sIGp1c3QgaW4g
Y2FzZSBhIDMyLWJpdCBzeXN0ZW0gb25seSBhc3NpZ25zIHRoZQpAQCAtMzQyLDE4ICs0MzEsMTgg
QEAgaW5saW5lIHZvaWQgQ29sb3I6OnNldEV4dGVuZGVkQ29sb3IoUmVmPAogICAgIEFTU0VSVChp
c0V4dGVuZGVkKCkpOwogfQogCi1pbmxpbmUgYm9vbCBDb2xvcjo6aXNCbGFja0NvbG9yKGNvbnN0
IENvbG9yJiBjb2xvcikKK2lubGluZSBib29sIENvbG9yOjppc0JsYWNrKGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKLSAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gY29s
b3IuYXNFeHRlbmRlZCgpLmlzQmxhY2soKTsKLSAgICByZXR1cm4gY29sb3IuYXNJbmxpbmUoKSA9
PSBDb2xvcjo6YmxhY2s7CisgICAgcmV0dXJuIGNvbG9yLmNhbGxPblVuZGVybHlpbmdUeXBlKFtd
IChjb25zdCBhdXRvJiBjb2xvcikgeworICAgICAgICByZXR1cm4gaXNCbGFjayhjb2xvcik7Cisg
ICAgfSk7CiB9CiAKLWlubGluZSBib29sIENvbG9yOjppc1doaXRlQ29sb3IoY29uc3QgQ29sb3Im
IGNvbG9yKQoraW5saW5lIGJvb2wgQ29sb3I6OmlzV2hpdGUoY29uc3QgQ29sb3ImIGNvbG9yKQog
ewotICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBjb2xvci5hc0V4
dGVuZGVkKCkuaXNXaGl0ZSgpOwotICAgIHJldHVybiBjb2xvci5hc0lubGluZSgpID09IENvbG9y
Ojp3aGl0ZTsKKyAgICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJseWluZ1R5cGUoW10gKGNvbnN0
IGF1dG8mIGNvbG9yKSB7CisgICAgICAgIHJldHVybiBpc1doaXRlKGNvbG9yKTsKKyAgICB9KTsK
IH0KIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KQEAgLTQwOCw3ICs0OTcsNyBAQCBPcHRpb25h
bDxDb2xvcj4gQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkCiAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbG9yU3BhY2UpKQogICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIENvbG9yIHsgRXh0
ZW5kZWRDb2xvcjo6Y3JlYXRlKGMxLCBjMiwgYzMsIGFscGhhLCBjb2xvclNwYWNlKSB9OworICAg
ICAgICByZXR1cm4gQ29sb3IgeyBFeHRlbmRlZENvbG9yOjpjcmVhdGUoeyBjMSwgYzIsIGMzLCBh
bHBoYSB9LCBjb2xvclNwYWNlKSB9OwogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lv
bi5oCShyZXZpc2lvbiAyNjQyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvckNvbnZlcnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMzEgKzI1LDM1IEBACiAK
ICNwcmFnbWEgb25jZQogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CisjaW5jbHVkZSAiQ29sb3JUeXBl
cy5oIgogCi10ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IENNWUtBOwotdGVtcGxhdGU8dHlwZW5h
bWU+IHN0cnVjdCBEaXNwbGF5UDM7Ci10ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEhTTEE7Ci10
ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IExpbmVhckRpc3BsYXlQMzsKLXRlbXBsYXRlPHR5cGVu
YW1lPiBzdHJ1Y3QgTGluZWFyU1JHQkE7Ci10ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IFNSR0JB
OworbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBUaGVzZSBhcmUgdGhlIHN0YW5kYXJkIHNSR0Ig
PC0+IExpbmVhclJHQiAvIERpc3BsYXlQMyA8LT4gTGluZWFyRGlzcGxheVAzIGNvbnZlcnNpb24g
ZnVuY3Rpb25zIChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUkdCKS4KIGZsb2F0IGxp
bmVhclRvUkdCQ29sb3JDb21wb25lbnQoZmxvYXQpOwogZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNv
bXBvbmVudChmbG9hdCk7CiAKLUxpbmVhclNSR0JBPGZsb2F0PiB0b0xpbmVhclNSR0JBKGNvbnN0
IFNSR0JBPGZsb2F0PiYpOwotU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3QgTGluZWFyU1JHQkE8
ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBMaW5lYXJTUkdCQTxmbG9hdD4gdG9MaW5lYXJTUkdC
QShjb25zdCBTUkdCQTxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFNSR0JBPGZsb2F0PiB0b1NS
R0JBKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYpOwogCi1MaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+
IHRvTGluZWFyRGlzcGxheVAzKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsKLURpc3BsYXlQMzxm
bG9hdD4gdG9EaXNwbGF5UDMoY29uc3QgTGluZWFyRGlzcGxheVAzPGZsb2F0PiYpOworV0VCQ09S
RV9FWFBPUlQgTGluZWFyRGlzcGxheVAzPGZsb2F0PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBE
aXNwbGF5UDM8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBEaXNwbGF5UDM8ZmxvYXQ+IHRvRGlz
cGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mKTsKIAotU1JHQkE8ZmxvYXQ+IHRv
U1JHQkEoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOwotRGlzcGxheVAzPGZsb2F0PiB0b0Rpc3Bs
YXlQMyhjb25zdCBTUkdCQTxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFNSR0JBPGZsb2F0PiB0
b1NSR0JBKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIERpc3BsYXlQ
MzxmbG9hdD4gdG9EaXNwbGF5UDMoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiAKIFdFQkNPUkVfRVhQ
T1JUIEhTTEE8ZmxvYXQ+IHRvSFNMQShjb25zdCBTUkdCQTxmbG9hdD4mKTsKIFdFQkNPUkVfRVhQ
T1JUIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IEhTTEE8ZmxvYXQ+Jik7CiAKIFNSR0JBPGZs
b2F0PiB0b1NSR0JBKGNvbnN0IENNWUtBPGZsb2F0PiYpOwogCisKKy8vIElkZW50aXR5IGNvbnZl
cnNpb25zICh1c2VmdWwgZm9yIGdlbmVyaWMgY29udGV4dHMpCisKK2NvbnN0ZXhwciBTUkdCQTxm
bG9hdD4gdG9TUkdCQShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKSB7IHJldHVybiBjb2xvcjsg
fQorY29uc3RleHByIExpbmVhclNSR0JBPGZsb2F0PiB0b0xpbmVhclNSR0JBKGNvbnN0IExpbmVh
clNSR0JBPGZsb2F0PiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9Citjb25zdGV4cHIgRGlzcGxh
eVAzPGZsb2F0PiB0b0Rpc3BsYXlQMyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikgeyBy
ZXR1cm4gY29sb3I7IH0KK2NvbnN0ZXhwciBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+IHRvTGluZWFy
RGlzcGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKSB7IHJldHVybiBj
b2xvcjsgfQorY29uc3RleHByIEhTTEE8ZmxvYXQ+IHRvSFNMQShjb25zdCBIU0xBPGZsb2F0PiYg
Y29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJp
YWxpemF0aW9uLmNwcAkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAw
LDQ1ICsxMDAsODcgQEAgc3RhdGljIEFTQ0lJTGl0ZXJhbCBzZXJpYWxpemF0aW9uKENvbG9yUwog
ICAgIHJldHVybiAiIl9zOwogfQogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBF
eHRlbmRlZENvbG9yJiBjb2xvcikKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RhdGlj
IFN0cmluZyBzZXJpYWxpemF0aW9uKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0gICAgYXV0
byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IuY29tcG9uZW50cygpOworICAgIGF1dG8gW2Mx
LCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOwogICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1
YWwoYWxwaGEsIDEuMGYpKQotICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiY29sb3IoIiwgc2Vy
aWFsaXphdGlvbihjb2xvci5jb2xvclNwYWNlKCkpLCAnICcsIGMxLCAnICcsIGMyLCAnICcsIGMz
LCAnKScpOwotICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBzZXJpYWxpemF0aW9uKGNv
bG9yLmNvbG9yU3BhY2UoKSksICcgJywgYzEsICcgJywgYzIsICcgJywgYzMsICIgLyAiLCBhbHBo
YSwgJyknKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIsIHNlcmlhbGl6YXRp
b24oY29sb3IuY29sb3JTcGFjZSksICcgJywgYzEsICcgJywgYzIsICcgJywgYzMsICcpJyk7Cisg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIsIHNlcmlhbGl6YXRpb24oY29sb3IuY29sb3JT
cGFjZSksICcgJywgYzEsICcgJywgYzIsICcgJywgYzMsICIgLyAiLCBhbHBoYSwgJyknKTsKIH0K
IAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IEV4dGVuZGVkQ29sb3ImIGNvbG9y
KQorLy8gU1JHQkE8ZmxvYXQ+IG92ZXJsb2FkcworCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNT
Uyhjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9u
KGNvbG9yKTsKK30KKworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IFNSR0JBPGZs
b2F0PiYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29sb3IpOwor
ICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRp
b25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IEV4dGVuZGVkQ29sb3ImIGNvbG9yKQorU3RyaW5n
IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IFNSR0JBPGZsb2F0PiYgY29s
b3IpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29sb3IpOworICAgIHJldHVy
biBzZXJpYWxpemF0aW9uKGNvbG9yKTsKIH0KIAorLy8gTGluZWFyU1JHQkE8ZmxvYXQ+IG92ZXJs
b2FkcworCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBMaW5lYXJTUkdCQTxmbG9h
dD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKK30KKworU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3Ip
Cit7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworfQorCitTdHJpbmcgc2VyaWFs
aXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xv
cikKK3sKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7Cit9CisKKy8vIERpc3BsYXlQ
MzxmbG9hdD4gb3ZlcmxvYWRzCisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IERp
c3BsYXlQMzxmbG9hdD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9y
KTsKK30KKworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IERpc3BsYXlQMzxmbG9h
dD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKK30KKworU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IERpc3BsYXlQMzxmbG9h
dD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKK30KKworCiAv
LyBDb2xvciBvdmVybG9hZHMKIAogU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgQ29s
b3ImIGNvbG9yKQogewotICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVy
biBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yLmFzRXh0ZW5kZWQoKSk7Ci0gICAgcmV0dXJuIHNl
cmlhbGl6YXRpb25Gb3JDU1MoY29sb3IuYXNJbmxpbmUoKSk7CisgICAgcmV0dXJuIGNvbG9yLmNh
bGxPblVuZGVybHlpbmdUeXBlKFtdIChhdXRvIGMpIHsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6
YXRpb25Gb3JDU1MoYyk7CisgICAgfSk7CiB9CiAKIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRN
TChjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKLSAg
ICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9yLmFzRXh0ZW5kZWQoKSk7Ci0g
ICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9yLmFzSW5saW5lKCkpOworICAgIHJl
dHVybiBjb2xvci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoYXV0byBjKSB7CisgICAgICAgIHJl
dHVybiBzZXJpYWxpemF0aW9uRm9ySFRNTChjKTsKKyAgICB9KTsKIH0KIAogU3RyaW5nIHNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBp
ZiAoY29sb3IuaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvclJl
bmRlclRyZWVBc1RleHQoY29sb3IuYXNFeHRlbmRlZCgpKTsKLSAgICByZXR1cm4gc2VyaWFsaXph
dGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29sb3IuYXNJbmxpbmUoKSk7CisgICAgcmV0dXJuIGNv
bG9yLmNhbGxPblVuZGVybHlpbmdUeXBlKFtdIChhdXRvIGMpIHsKKyAgICAgICAgcmV0dXJuIHNl
cmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGMpOworICAgIH0pOwogfQogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlh
bGl6YXRpb24uaAkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4
LDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29sb3I7Ci1jbGFzcyBFeHRlbmRl
ZENvbG9yOwogCit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IERpc3BsYXlQMzsKK3RlbXBsYXRl
PHR5cGVuYW1lPiBzdHJ1Y3QgTGluZWFyU1JHQkE7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0
IFNSR0JBOwogCiAvLyBzZXJpYWxpemF0aW9uRm9ySFRNTCByZXR1cm5zIHRoZSBjb2xvciBzZXJp
YWxpemVkIGFjY29yZGluZyB0byBIVE1MNSA8aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9t
dWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjZmlsbC1hbmQtc3Ryb2tlLXN0eWxlcz4gKDEwIFNlcHRl
bWJlciAyMDE1KQpAQCAtNDAsOSArNDEsMTcgQEAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlh
bGl6YXRpb25Gb3JDUwogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1M
KFNSR0JBPHVpbnQ4X3Q+KTsKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9y
UmVuZGVyVHJlZUFzVGV4dChTUkdCQTx1aW50OF90Pik7CiAKLVdFQkNPUkVfRVhQT1JUIFN0cmlu
ZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IEV4dGVuZGVkQ29sb3ImKTsKLVdFQkNPUkVfRVhQ
T1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBFeHRlbmRlZENvbG9yJik7Ci1X
RUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29u
c3QgRXh0ZW5kZWRDb2xvciYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JDU1MoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFs
aXphdGlvbkZvckhUTUwoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBTdHJp
bmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7
CisKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IExpbmVh
clNSR0JBPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JI
VE1MKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNl
cmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYp
OworCitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBEaXNw
bGF5UDM8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhU
TUwoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsKIAog
V0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgQ29sb3ImKTsK
IFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBDb2xvciYp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMu
aAkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsMzEgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiQ29sb3JTcGFj
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb21wb25lbnRUcmFpdHM7CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbXBvbmVudFRyYWl0czx1
aW50OF90PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IG1pblZhbHVlID0gMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgbWF4VmFsdWUgPSAyNTU7Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBDb21wb25lbnRUcmFpdHM8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGZsb2F0IG1pblZhbHVlID0gMC4wZjsKKyAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0IG1heFZh
bHVlID0gMS4wZjsKK307CisKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFNSR0JBIHsK
ICAgICBUIHJlZDsKICAgICBUIGdyZWVuOwogICAgIFQgYmx1ZTsKICAgICBUIGFscGhhOworCisg
ICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDb2xvclNw
YWNlIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCOwogfTsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgVD4gU1JHQkEoVCwgVCwgVCwgVCkgLT4gU1JHQkE8VD47CkBAIC02NCw2ICs4MSw5IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMaW5lYXJTUkdCQSAKICAgICBUIGdyZWVuOwogICAg
IFQgYmx1ZTsKICAgICBUIGFscGhhOworCisgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpM
aW5lYXJSR0I7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBMaW5lYXJTUkdCQShULCBULCBU
LCBUKSAtPiBMaW5lYXJTUkdCQTxUPjsKQEAgLTk0LDYgKzExNCw5IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBEaXNwbGF5UDMgewogICAgIFQgZ3JlZW47CiAgICAgVCBibHVlOwogICAg
IFQgYWxwaGE7CisKKyAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKKyAgICBzdGF0aWMgY29u
c3RleHByIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkRpc3BsYXlQMzsKIH07
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IERpc3BsYXlQMyhULCBULCBULCBUKSAtPiBEaXNwbGF5
UDM8VD47CkBAIC0xMjQsNiArMTQ3LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IExp
bmVhckRpc3BsYQogICAgIFQgZ3JlZW47CiAgICAgVCBibHVlOwogICAgIFQgYWxwaGE7CisKKyAg
ICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IExp
bmVhckRpc3BsYXlQMyhULCBULCBULCBUKSAtPiBMaW5lYXJEaXNwbGF5UDM8VD47CkBAIC0xNTQs
NiArMTc5LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhTTEEgewogICAgIFQgc2F0
dXJhdGlvbjsKICAgICBUIGxpZ2h0bmVzczsKICAgICBUIGFscGhhOworCisgICAgdXNpbmcgQ29t
cG9uZW50VHlwZSA9IFQ7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBIU0xBKFQsIFQsIFQs
IFQpIC0+IEhTTEE8VD47CkBAIC0xODYsNiArMjEzLDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENNWUtBIHsKICAgICBUIHllbGxvdzsKICAgICBUIGJsYWNrOwogICAgIFQgYWxwaGE7
CisKKyAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IENNWUtBKFQsIFQsIFQsIFQsIFQpIC0+IENNWUtBPFQ+OwpAQCAtMjA2LDYgKzIzNSw4IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBYWVpBIHsKICAgICBUIHk7CiAgICAgVCB6Owog
ICAgIFQgYWxwaGE7CisKKyAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKIH07CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IFhZWkEoVCwgVCwgVCwgVCkgLT4gWFlaQTxUPjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkocmV2
aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JV
dGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksOSBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBjCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+
IGNvbnN0ZXhwciBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb25z
dCBDb2xvclR5cGUmLCB1aW50OF90IG92ZXJyaWRlQWxwaGEpOwogdGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlPiBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb25z
dCBDb2xvclR5cGUmLCBmbG9hdCBvdmVycmlkZUFscGhhKTsKIAordGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlPiBjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYpOwordGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENv
bG9yVHlwZSYpOworCiBjb25zdGV4cHIgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2
X3QpOwogY29uc3RleHByIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZfdCk7CiAKQEAg
LTE5Miw2ICsxOTUsMjMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUg
aQogICAgIHJldHVybiBjb3B5OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNv
bnN0ZXhwciBib29sIGlzQmxhY2soY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKK3sKKyAgICBjb25z
dGV4cHIgYXV0byBtaW4gPSBDb21wb25lbnRUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21w
b25lbnRUeXBlPjo6bWluVmFsdWU7CisgICAgY29uc3RleHByIGF1dG8gbWF4ID0gQ29tcG9uZW50
VHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om1heFZhbHVlOworCisg
ICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgcmV0dXJuIGMxID09IG1p
biAmJiBjMiA9PSBtaW4gJiYgYzMgPT0gbWluICYmIGFscGhhID09IG1heDsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9y
VHlwZSYgY29sb3IpCit7CisgICAgY29uc3RleHByIGF1dG8gbWF4ID0gQ29tcG9uZW50VHJhaXRz
PHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om1heFZhbHVlOworCisgICAgYXV0
byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgcmV0dXJuIGMxID09IG1heCAmJiBj
MiA9PSBtYXggJiYgYzMgPT0gbWF4ICYmIGFscGhhID09IG1heDsKK30KKwogY29uc3RleHByIHVp
bnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKQogewogICAgIHJldHVybiAo
dmFsdWUgPDwgOCkgLSB2YWx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0V4dGVuZGVkQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgJKHJldmlzaW9uIDI2NDIzMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNTEgKzI2LDI4IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yQ29tcG9u
ZW50cy5oIgorI2luY2x1ZGUgIkNvbG9yQ29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkNvbG9yU3Bh
Y2UuaCIKICNpbmNsdWRlICJDb2xvclR5cGVzLmgiCi0jaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMu
aCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDb2xvcjsKLXRlbXBsYXRlPHR5cGVuYW1lPiBz
dHJ1Y3QgU1JHQkE7Ci0KIGNsYXNzIEV4dGVuZGVkQ29sb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxF
eHRlbmRlZENvbG9yPiB7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxF
eHRlbmRlZENvbG9yPiBjcmVhdGUoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjMywgZmxvYXQg
YWxwaGEsIENvbG9yU3BhY2UpOwotCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBz
dGF0aWMgUmVmPEV4dGVuZGVkQ29sb3I+IGNyZWF0ZShjb25zdCBDb2xvclR5cGUmKTsKKyAgICBz
dGF0aWMgUmVmPEV4dGVuZGVkQ29sb3I+IGNyZWF0ZShDb2xvckNvbXBvbmVudHM8ZmxvYXQ+LCBD
b2xvclNwYWNlKTsKKyAgICAKICAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fY29t
cG9uZW50c1szXTsgfQogCiAgICAgY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgY29tcG9u
ZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9uZW50czsgfQogICAgIENvbG9yU3BhY2UgY29s
b3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwotCi0gICAgUmVmPEV4dGVuZGVkQ29sb3I+IGNv
bG9yV2l0aEFscGhhKGZsb2F0KSBjb25zdDsKLSAgICBSZWY8RXh0ZW5kZWRDb2xvcj4gaW52ZXJ0
ZWRDb2xvcldpdGhBbHBoYShmbG9hdCkgY29uc3Q7Ci0KLSAgICBib29sIGlzV2hpdGUoKSBjb25z
dDsKLSAgICBib29sIGlzQmxhY2soKSBjb25zdDsKLQotICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0
IG5vbi1zUkdCIGNvbG9yc3BhY2UgY29sb3JzIGludG8gc1JHQi4KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBjb25zdGV4cHIgU1JHQkE8VD4gdG9TUkdCQUxvc3N5KCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgZmxvYXQ+KQotICAgICAgICAg
ICAgcmV0dXJuIHRvU1JHQkFGbG9hdENvbXBvbmVudHNMb3NzeSgpOwotICAgICAgICBlbHNlIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4pCi0gICAgICAgICAgICByZXR1
cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZXModG9TUkdCQUZsb2F0Q29tcG9uZW50c0xvc3N5KCkp
OwotICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBkZWNsdHlwZShhdXRvKSBj
YWxsT25VbmRlcmx5aW5nVHlwZShGdW5jdG9yJiYpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIEV4
dGVuZGVkQ29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjMywgZmxvYXQgYWxwaGEsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSkKLSAgICAgICAgOiBtX2NvbXBvbmVudHMoYzEsIGMyLCBjMywg
YWxwaGEpCi0gICAgICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCi0gICAgewotICAgIH0K
LQotICAgIFdFQkNPUkVfRVhQT1JUIFNSR0JBPGZsb2F0PiB0b1NSR0JBRmxvYXRDb21wb25lbnRz
TG9zc3koKSBjb25zdDsKKyAgICBFeHRlbmRlZENvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4s
IENvbG9yU3BhY2UpOwogCiAgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBtX2NvbXBvbmVudHM7
CiAgICAgQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7CkBAIC04Niw4ICs2MywzMiBAQCBpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IEV4dGVuZGVkQ29sCiAgICAgcmV0dXJuICEoYSA9PSBiKTsK
IH0KIAotLy8gRklYTUU6IElmIHRoZSBDb2xvclNwYWNlIGlzIHNSR0IgYW5kIHRoZSB2YWx1ZXMg
Y2FuIGFsbCBiZQotLy8gY29udmVydGVkIGV4YWN0bHkgdG8gaW50ZWdlcnMsIHdlIHNob3VsZCBt
YWtlIGEgU2ltcGxlQ29sb3IuCi1XRUJDT1JFX0VYUE9SVCBDb2xvciBtYWtlRXh0ZW5kZWRDb2xv
cihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSk7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBSZWY8RXh0ZW5kZWRDb2xvcj4g
RXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRXh0ZW5kZWRDb2xvcihhc0NvbG9yQ29tcG9uZW50cyhjb2xvciks
IGNvbG9yLmNvbG9yU3BhY2UpKTsKK30KKworaW5saW5lIFJlZjxFeHRlbmRlZENvbG9yPiBFeHRl
bmRlZENvbG9yOjpjcmVhdGUoQ29sb3JDb21wb25lbnRzPGZsb2F0PiBjb21wb25lbnRzLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRXh0ZW5kZWRD
b2xvcihjb21wb25lbnRzLCBjb2xvclNwYWNlKSk7Cit9CisKK2lubGluZSBFeHRlbmRlZENvbG9y
OjpFeHRlbmRlZENvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4gY29tcG9uZW50cywgQ29sb3JT
cGFjZSBjb2xvclNwYWNlKQorICAgIDogbV9jb21wb25lbnRzKGNvbXBvbmVudHMpCisgICAgLCBt
X2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4gZGVjbHR5cGUoYXV0bykgRXh0ZW5kZWRDb2xvcjo6Y2FsbE9uVW5kZXJseWluZ1R5cGUoRnVu
Y3RvciYmIGZ1bmN0b3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2NvbG9yU3BhY2UpIHsKKyAg
ICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6CisgICAgICAgIHJldHVybiBmdW5jdG9yKGFzU1JHQkEo
bV9jb21wb25lbnRzKSk7CisgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJSR0I6CisgICAgICAg
IHJldHVybiBmdW5jdG9yKGFzTGluZWFyU1JHQkEobV9jb21wb25lbnRzKSk7CisgICAgY2FzZSBD
b2xvclNwYWNlOjpEaXNwbGF5UDM6CisgICAgICAgIHJldHVybiBmdW5jdG9yKGFzRGlzcGxheVAz
KG1fY29tcG9uZW50cykpOworICAgIH0KK30KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDI2NDIzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzk4LDcgKzMzOTgsNyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6c2hv
dWxkRHVtcFByb3BlCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgLy8gQmFj
a2dyb3VuZCBjb2xvciBjb3VsZCBiZSBvZiBpbnRlcmVzdCB0byB0ZXN0cyBvciBvdGhlciBkdW1w
ZXJzIGlmIGl0J3Mgbm9uLXdoaXRlLgotICAgICAgICBpZiAoIXN0cmNtcChwcm9wZXJ0eU5hbWUs
ICJiYWNrZ3JvdW5kQ29sb3IiKSAmJiBDb2xvcjo6aXNXaGl0ZUNvbG9yKGxheWVyLT5iYWNrZ3Jv
dW5kQ29sb3IoKSkpCisgICAgICAgIGlmICghc3RyY21wKHByb3BlcnR5TmFtZSwgImJhY2tncm91
bmRDb2xvciIpICYmIENvbG9yOjppc1doaXRlKGxheWVyLT5iYWNrZ3JvdW5kQ29sb3IoKSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgLy8gVGhlIHJvb3QgdGlsZSBjYWNo
ZSdzIHJlcGFpbnRzIHdpbGwgc2hvdyB1cCBhdCB0aGUgdG9wIHdpdGggRnJhbWVWaWV3J3MsCklu
ZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyNjQyNDIpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxOCBAQAorMjAyMC0wNy0xMCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAg
ICAgICAgUmVkdWNlIHN1cmZhY2UgYXJlYSBvZiB0aGUgRXh0ZW5kZWRDb2xvciBjbGFzcyB0byBh
IGJhcmUgbWluaW11bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE0MjA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRklYTUU6IERPIE5PVCBMQU5EIFVOVElMIEFERElORyBORVcgVEVTVFMgRk9SIE5FVyBC
RUhBVklPUiBPRiBTVE9SSU5HIFJFUFJFU0VOVEFCTEUgU1JHQkE8ZmxvYXQ+IElOTElORS4KKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMu
Y3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjptYWtlQ29sb3IpOgorICAgICAgICBVcGRhdGUgdXNpbmcgbmV3IENvbG9yIGNvbnN0cnVj
dG9yIGZvciBleHRlbmRlZCBjb2xvcnMuCisgICAgICAgIAorCiAyMDIwLTA3LTEwICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHNvbWUgdGVzdGluZyBm
b3IgSlNSdW5Mb29wVGltZXIKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNjQyMzAp
CisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3Rz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgVGVzdFdlYktp
dEFQSSB7CiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29uc3RydWN0b3IpCiB7Ci0gICAgQ29sb3Ig
YzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpE
aXNwbGF5UDMpIH07CisgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUs
IDAuMjUsIDEuMCB9IH07CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAg
IGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGMxLmFzRXh0ZW5kZWQoKS5jb21wb25lbnRzKCk7CkBA
IC01Miw3ICs1Miw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29uc3RydWN0b3IpCiAKIFRFU1Qo
RXh0ZW5kZWRDb2xvciwgQ29weUNvbnN0cnVjdG9yKQogewotICAgIENvbG9yIGMxIHsgbWFrZUV4
dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9
OworICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAg
fSB9OwogICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xvciBjMihj
MSk7CkBAIC03MCw3ICs3MCw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29weUNvbnN0cnVjdG9y
KQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIEFzc2lnbm1lbnQpCiB7Ci0gICAgQ29sb3IgYzEgeyBt
YWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5
UDMpIH07CisgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUs
IDEuMCB9IH07CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9y
IGMyID0gYzE7CkBAIC04OSwyMCArODksMjAgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBBc3NpZ25t
ZW50KQogVEVTVChFeHRlbmRlZENvbG9yLCBFcXVhbGl0eSkKIHsKICAgICB7Ci0gICAgICAgIENv
bG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFj
ZTo6RGlzcGxheVAzKSB9OworICAgICAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAx
LjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRl
ZCgpKTsKIAotICAgICAgICBDb2xvciBjMiB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAw
LjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICAgICAgQ29sb3IgYzIgeyBE
aXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgICAgIEVYUEVD
VF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICAgICAgRVhQRUNUX0VRKGMxLCBjMik7CiAg
ICAgfQogCiAgICAgewotICAgICAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwg
MC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICAgICAgQ29sb3Ig
YzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgICAg
IEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKLSAgICAgICAgQ29sb3IgYzIgeyBtYWtl
RXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpTUkdCKSB9Owor
ICAgICAgICBDb2xvciBjMiB7IFNSR0JBPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9
OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgICAgIEVYUEVD
VF9ORShjMSwgYzIpOwpAQCAtMTEyLDcgKzExMiw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgRXF1
YWxpdHkpCiAgICAgaW50IGcgPSAxMjg7CiAgICAgaW50IGIgPSA2MzsKICAgICBpbnQgYSA9IDEy
NzsKLSAgICBDb2xvciByZ2IxIHsgbWFrZUV4dGVuZGVkQ29sb3IociAvIDI1NS4wLCBnIC8gMjU1
LjAsIGIgLyAyNTUuMCwgYSAvIDI1NS4wLCBDb2xvclNwYWNlOjpTUkdCKSB9OworICAgIENvbG9y
IHJnYjEgeyBTUkdCQTxmbG9hdD4geyByIC8gMjU1LjBmLCBnIC8gMjU1LjBmLCBiIC8gMjU1LjBm
LCBhIC8gMjU1LjBmIH0gfTsKICAgICBDb2xvciByZ2IyID0gbWFrZVNpbXBsZUNvbG9yKHIsIGcs
IGIsIGEpOwogICAgIEVYUEVDVF9ORShyZ2IxLCByZ2IyKTsKICAgICBFWFBFQ1RfTkUocmdiMiwg
cmdiMSk7CkBAIC0xMjEsMjAgKzEyMSwyMCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEVxdWFsaXR5
KQogVEVTVChFeHRlbmRlZENvbG9yLCBIYXNoKQogewogICAgIHsKLSAgICAgICAgQ29sb3IgYzEg
eyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNw
bGF5UDMpIH07CisgICAgICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41
LCAwLjI1LCAxLjAgfSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwog
Ci0gICAgICAgIENvbG9yIGMyIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEu
MCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgICAgICBDb2xvciBjMiB7IERpc3BsYXlQ
MzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RSVUUo
YzEuaXNFeHRlbmRlZCgpKTsKIAogICAgICAgICBFWFBFQ1RfRVEoYzEuaGFzaCgpLCBjMi5oYXNo
KCkpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xv
cigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgICAg
IENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9Owog
ICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCi0gICAgICAgIENvbG9yIGMy
IHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6U1JH
QikgfTsKKyAgICAgICAgQ29sb3IgYzIgeyBTUkdCQTxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwg
MS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgICAg
ICBFWFBFQ1RfTkUoYzEuaGFzaCgpLCBjMi5oYXNoKCkpOwpAQCAtMTQ0LDE0ICsxNDQsMTQgQEAg
VEVTVChFeHRlbmRlZENvbG9yLCBIYXNoKQogICAgIGludCBnID0gMTI4OwogICAgIGludCBiID0g
NjM7CiAgICAgaW50IGEgPSAxMjc7Ci0gICAgQ29sb3IgcmdiMSB7IG1ha2VFeHRlbmRlZENvbG9y
KHIgLyAyNTUuMCwgZyAvIDI1NS4wLCBiIC8gMjU1LjAsIGEgLyAyNTUuMCwgQ29sb3JTcGFjZTo6
U1JHQikgfTsKKyAgICBDb2xvciByZ2IxIHsgU1JHQkE8ZmxvYXQ+IHsgciAvIDI1NS4wZiwgZyAv
IDI1NS4wZiwgYiAvIDI1NS4wZiwgYSAvIDI1NS4wZiB9IH07CiAgICAgQ29sb3IgcmdiMiA9IG1h
a2VTaW1wbGVDb2xvcihyLCBnLCBiLCBhKTsKICAgICBFWFBFQ1RfTkUocmdiMS5oYXNoKCksIHJn
YjIuaGFzaCgpKTsKIH0KIAogVEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQ29uc3RydWN0b3IpCiB7
Ci0gICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBD
b2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+
IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRl
ZCgpKTsKIAogICAgIENvbG9yIGMyKFdURk1vdmUoYzEpKTsKQEAgLTE3Miw3ICsxNzIsNyBAQCBU
RVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVDb25zdHJ1Y3RvcikKIAogVEVTVChFeHRlbmRlZENvbG9y
LCBNb3ZlQXNzaWdubWVudCkKIHsKLSAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEu
MCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICBDb2xvciBj
MSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICBFWFBF
Q1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IgYzIgPSBXVEZNb3ZlKGMxKTsK
QEAgLTE5NCw3ICsxOTQsOCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVBc3NpZ25tZW50KQog
CiBURVNUKEV4dGVuZGVkQ29sb3IsIEJhc2ljUmVmZXJlbmNlQ291bnRpbmcpCiB7Ci0gICAgQ29s
b3IqIGMxID0gbmV3IENvbG9yIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEu
MCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgIENvbG9yKiBjMSA9IG5ldyBDb2xvciB7
IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKKyAgICAKICAgICBF
WFBFQ1RfVFJVRShjMS0+aXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yKiBjMiA9IG5ldyBDb2xv
cigqYzEpOwpAQCAtMjIwLDcgKzIyMSw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQmFzaWNSZWZl
cmVuY2VDb3VudGkKIAogQ29sb3IgbWFrZUNvbG9yKCkKIHsKLSAgICBDb2xvciBjMSB7IG1ha2VF
eHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykg
fTsKKyAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4w
IH0gfTsKICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogICAgIEVYUEVDVF9FUSgx
dSwgYzEuYXNFeHRlbmRlZCgpLnJlZkNvdW50KCkpOwogCkBAIC0yMzgsNyArMjM5LDcgQEAgVEVT
VChFeHRlbmRlZENvbG9yLCBSZXR1cm5WYWx1ZXMpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgUDND
b252ZXJzaW9uVG9TUkdCKQogewotICAgIENvbG9yIHAzQ29sb3IgeyBtYWtlRXh0ZW5kZWRDb2xv
cigxLjAsIDAuNSwgMC4yNSwgMC43NSwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgIENv
bG9yIHAzQ29sb3IgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDAuNzUgfSB9
OwogICAgIEVYUEVDVF9UUlVFKHAzQ29sb3IuaXNFeHRlbmRlZCgpKTsKIAogICAgIGF1dG8gc1JH
QkFDb2xvciA9IHAzQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwpAQCAtMjUwLDkgKzI1MSwx
MCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIFAzQ29udmVyc2lvblRvU1JHQikKIAogVEVTVChFeHRl
bmRlZENvbG9yLCBMaW5lYXJTUkdCQ29udmVyc2lvblRvU1JHQikKIHsKLSAgICBDb2xvciBsaW5l
YXJDb2xvciB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAwLjc1LCBDb2xvclNw
YWNlOjpMaW5lYXJSR0IpIH07Ci0gICAgRVhQRUNUX1RSVUUobGluZWFyQ29sb3IuaXNFeHRlbmRl
ZCgpKTsKLSAgICBhdXRvIHNSR0JBQ29sb3IgPSBsaW5lYXJDb2xvci50b1NSR0JBTG9zc3k8Zmxv
YXQ+KCk7CisgICAgQ29sb3IgbGluZWFyU1JHQkFDb2xvciB7IExpbmVhclNSR0JBPGZsb2F0PiB7
IDEuMCwgMC41LCAwLjI1LCAwLjc1IH0gfTsKKyAgICBFWFBFQ1RfVFJVRShsaW5lYXJTUkdCQUNv
bG9yLmlzRXh0ZW5kZWQoKSk7CisKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBsaW5lYXJTUkdCQUNv
bG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2Vu
dGlhbGx5RXF1YWwoc1JHQkFDb2xvci5yZWQsIDEuMGYpKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6
OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ncmVlbiwgMC43MzUzNTY5MjdmKSk7CiAg
ICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IuYmx1ZSwg
MC41MzcwOTg3MDZmKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404033</attachid>
            <date>2020-07-10 18:47:21 -0700</date>
            <delta_ts>2020-07-10 20:18:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214204-20200710184716.patch</filename>
            <type>text/plain</type>
            <size>52444</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NDI1MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDIwLTA3LTEwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZWR1Y2Ugc3VyZmFjZSBhcmVhIG9m
IHRoZSBFeHRlbmRlZENvbG9yIGNsYXNzIHRvIGEgYmFyZSBtaW5pbXVtCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQyMDQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkZCBoZWxwZXIgZnVuY3Rpb24g
dG8gQ29sb3IgdG8gb3BlcmF0ZSBvbiB0aGUgdW5kZXJseWluZyBjb2xvciB0eXBlCisgICAgICAg
ICAgYW5kIHJlaW1wbGVtZW50IGEgYnVuY2ggb2YgZnVuY3Rpb25hbGl0eSB1c2luZyBpdCwgcmVk
dWNpbmcgdGhlIG5lZWQKKyAgICAgICAgICBmb3IgZHVwbGljYXRlIGltcGxlbWVudGF0aW9ucyBp
biBFeHRlbmRlZENvbG9yLgorICAgICAgICAtIEFkZCBjb25zdHJ1Y3RvcnMgdG8gQ29sb3IgdGhh
dCB0YWtlIGV4dGVuZGVkIGNvbG9yIHR5cGVzLgorICAgICAgICAgICAgLSBXaGVuIGNvbnN0cnVj
dGluZyBhIENvbG9yIGZyb20gYSBTUkdCQTxmbG9hdD4sIGNoZWNrIHRvIHNlZSBpZiB0aGUKKyAg
ICAgICAgICAgICAgY29sb3IgY2FuIGJlIHJlcHJlc2VudGVkIGxvc3NsZXNzbHkgYnkgYSBTUkdC
QTx1aW50OF90PiBhbmQgaWYgY2FuLAorICAgICAgICAgICAgICBzdG9yZSBpdCBpbmxpbmUuCisK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgIFJlbW92ZSBFeHRlbmVkQ29sb3IuY3BwCisKKyAgICAgICAg
KiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRl
cnMpOgorICAgICAgICBVc2UgbmV3IENvbG9yIGNvbnN0cnVjdG9yIHRha2luZyBDb2xvckNvbXBv
bmVudHMgYW5kIENvbG9yU3BhY2UuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvbXBvc2l0ZU9wZXJhdG9yRm9yQmFja2dyb3VuZENv
bG9yIGNvbnN0KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFydCBjb25zdCk6CisgICAg
ICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tOgorICAgICAgICAobm9ybWFsaXpl
ZENvbG9yKToKKyAgICAgICAgVXBkYXRlIGZvciByZW5hbWUgZnJvbSBDb2xvcjo6aXNCbGFja0Nv
bG9yL0NvbG9yOjppc1doaXRlQ29sb3IgdG8gQ29sb3I6OmlzQmxhY2svQ29sb3I6OmlzV2hpdGUu
CisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6aGFzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y2FsbE9u
VW5kZXJseWluZ1R5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFM
b3NzeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2V0Q29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6OmlzQmxhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omlz
V2hpdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6c2V0SW5saW5lQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmlzQmxhY2tDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
aXNXaGl0ZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ckNvbnZlcnNpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvU1JHQkEpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9MaW5lYXJTUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjp0b0Rpc3BsYXlQMyk6Cisg
ICAgICAgIChXZWJDb3JlOjp0b0xpbmVhckRpc3BsYXlQMyk6CisgICAgICAgIChXZWJDb3JlOjp0
b0hTTEEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OnNlcmlhbGl6YXRpb25Gb3JDU1MpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXphdGlvbkZv
ckhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1Rl
eHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6aXNCbGFj
ayk6CisgICAgICAgIChXZWJDb3JlOjppc1doaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9FeHRlbmRlZENvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6RXh0ZW5kZWRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjpjYWxsT25VbmRlcmx5aW5nVHlwZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjp0b1NSR0JBTG9zc3kgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzaG91bGREdW1wUHJvcGVy
dHlGb3JMYXllciBjb25zdCk6CisKIDIwMjAtMDctMTAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCBidWlsZCBmb3IgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYg
IUVOQUJMRShSRVZFQUwpLCBmb3IgZXhhbXBsZSwgdHZPUwpJbmRleDogU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJl
dmlzaW9uIDI2NDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xODI3LDcgKzE4MjcsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9DdXN0b21QYWludElt
YWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5jcHAKLXBsYXRmb3JtL2dyYXBo
aWNzL0V4dGVuZGVkQ29sb3IuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2x5Z29uLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03MjI4
LDcgKzcyMjgsNiBAQAogCQkzMUQyNkJDNTFGODZEMjY4MDA4RkYyNTUgLyogSlNJbWFnZUJpdG1h
cE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbWFnZUJpdG1h
cE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFEMjZCQzYxRjg2RDI2
OTAwOEZGMjU1IC8qIEpTSW1hZ2VCaXRtYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNJbWFnZUJpdG1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTMxRDU5MUIxMTY2OTdBNkMwMEU2QkYwMiAvKiBQbHVnSW5DbGllbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z0luQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTMxRENERjQxMURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuZGVkQ29sb3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMURDREY0MjFEQTFDNDU0MDBFQTVCOTMg
LyogRXh0ZW5kZWRDb2xvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRl
bmRlZENvbG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxREVBNDUzMUIzOUY0
RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU3lzdGVtQmFja2Ryb3BMYXllci5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFERUE0NTQxQjM5RjREOTAwRjc3MTc4IC8qIFdlYlN5
c3RlbUJhY2tkcm9wTGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
U3lzdGVtQmFja2Ryb3BMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk1
ODIsOCArMTk1ODEsOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNTE1QkUxOTcxRDU0RjZCRDAw
REQ3QzY4IC8qIEhJREdhbWVwYWQuY3BwICovLAogCQkJCTUxNUJFMTk4MUQ1NEY2QkQwMEREN0M2
OCAvKiBISURHYW1lcGFkLmggKi8sCi0JCQkJNTE1QkUxOTkxRDU0RjZCRDAwREQ3QzY4IC8qIEhJ
REdhbWVwYWRQcm92aWRlci5tbSAqLywKIAkJCQk1MTVCRTE5QTFENTRGNkJEMDBERDdDNjggLyog
SElER2FtZXBhZFByb3ZpZGVyLmggKi8sCisJCQkJNTE1QkUxOTkxRDU0RjZCRDAwREQ3QzY4IC8q
IEhJREdhbWVwYWRQcm92aWRlci5tbSAqLywKIAkJCQk1MTdFMDNGNDI0QjZCOTYzMDA1NDg5NUEg
LyogTXVsdGlHYW1lcGFkUHJvdmlkZXIuaCAqLywKIAkJCQk1MTdFMDNGNTI0QjZCOTY0MDA1NDg5
NUEgLyogTXVsdGlHYW1lcGFkUHJvdmlkZXIubW0gKi8sCiAJCQkpOwpAQCAtMjU1NTYsNyArMjU1
NTUsNiBAQAogCQkJCTJEMjlFQ0MyMTkyRUNDODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVzaE1v
bml0b3JDbGllbnQuaCAqLywKIAkJCQkyRDI5RUNDMzE5MkVDQzgzMDA5ODRCNzggLyogRGlzcGxh
eVJlZnJlc2hNb25pdG9yTWFuYWdlci5jcHAgKi8sCiAJCQkJMkQyOUVDQzQxOTJFQ0M4MzAwOTg0
Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuaCAqLywKLQkJCQkzMURDREY0MTFE
QTFDNDU0MDBFQTVCOTMgLyogRXh0ZW5kZWRDb2xvci5jcHAgKi8sCiAJCQkJMzFEQ0RGNDIxREEx
QzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuaCAqLywKIAkJCQk2RTY3RDJBODEyODBFOEJE
MDA4NzU4RjcgLyogRXh0ZW5zaW9uc0dMLmggKi8sCiAJCQkJQjI3NTM1M0EwQjA1MzgxNDAwMkNF
NjRGIC8qIEZsb2F0UG9pbnQuY3BwICovLApAQCAtMjY4ODAsNyArMjY4NzgsNiBAQAogCQlDRDk0
QTVDQjFGNzFDQjQ2MDBGNTI1QzUgLyogZW5jcnlwdGVkbWVkaWEgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUNERTNBRTEzMjRCNDkzNkYwMDEyOEU3RSAv
KiBDRE1VdGlsaXRpZXMuY3BwICovLAogCQkJCUNEOTRBNUQ5MUY3MUNCOUYwMEY1MjVDNSAvKiBj
bGVhcmtleSAqLywKIAkJCQlDREY3NTY5QjIxNUMyM0E0MDBFRkNCNTAgLyogQ0RNRW5jcnlwdGlv
blNjaGVtZS5oICovLAogCQkJCUNEOTRBNUQxMUY3MUNCNkIwMEY1MjVDNSAvKiBDRE1GYWN0b3J5
LmNwcCAqLywKQEAgLTI2ODk1LDEyICsyNjg5MiwxMyBAQAogCQkJCUNEOTRBNUQ2MUY3MUNCNkQw
MEY1MjVDNSAvKiBDRE1NZXNzYWdlVHlwZS5oICovLAogCQkJCUNEM0NFMTFDMjQwNDUxQUYwMDRC
QTAxRCAvKiBDRE1Qcml2YXRlLmNwcCAqLywKIAkJCQlDRDk0QTVDRjFGNzFDQjZBMDBGNTI1QzUg
LyogQ0RNUHJpdmF0ZS5oICovLAotCQkJCUNERTNBRTEwMjRCNDkxNjkwMDEyOEU3RSAvKiBDRE1V
dGlsaXRpZXMuaCAqLywKIAkJCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1RDUgLyogQ0RNUHJveHku
Y3BwICovLAogCQkJCUNEOTRBNUNGMUY3MUNCNjEwMEY1MjVDNSAvKiBDRE1Qcm94eS5oICovLAog
CQkJCUNEOTRBNUNDMUY3MUNCNjkwMEY1MjVDNSAvKiBDRE1SZXF1aXJlbWVudC5oICovLAogCQkJ
CUNEOTRBNUQwMUY3MUNCNkIwMEY1MjVDNSAvKiBDRE1SZXN0cmljdGlvbnMuaCAqLywKIAkJCQlD
RDk0QTVENTFGNzFDQjZEMDBGNTI1QzUgLyogQ0RNU2Vzc2lvblR5cGUuaCAqLywKKwkJCQlDREUz
QUUxMzI0QjQ5MzZGMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmNwcCAqLywKKwkJCQlDREUzQUUx
MDI0QjQ5MTY5MDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9
IGVuY3J5cHRlZG1lZGlhOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTMwMDgyLDYg
KzMwMDgwLDcgQEAKIAkJCQlDRDNDRTEwMzI0MDFBQURBMDA0QkEwMUQgLyogQ0RNUmVzdHJpY3Rp
b25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREU1OTU5NzFCRjI2RTIxMDBBMUNCRTggLyogQ0RN
U2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0QzQ0UxMDQy
NDAxQUFEQTAwNEJBMDFEIC8qIENETVNlc3Npb25UeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlD
REUzQUUxMjI0QjQ5MTZBMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1RkE5MDRDQTE3OEU2MUY1MDA0QzhBMkQgLyogQ2VydGlmaWNhdGVJbmZvLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MUI4RjBCNTIxOTUzRDY1MDAwQzJCMDAgLyogQ2VydGlmaWNhdGVJbmZv
QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzNkZEMTUxNkM3ODI2NTAwRjg4N0MxIC8qIENo
YW5nZVZlcnNpb25EYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMjE5LDcgKzMxMjE4LDYgQEAK
IAkJCQlGMzQ0Qzc1MzExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0EwRTc3MEYxMEMwMEE4ODAwQTAyNzZFIC8qIElu
c3BlY3RvckZyb250ZW5kSG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0E1NDg1ODAxNEUwMkQ1
MTAwNkFFMDVBIC8qIEluc3BlY3Rvckhpc3RvcnkuaCBpbiBIZWFkZXJzICovLAotCQkJCUNERTNB
RTEyMjRCNDkxNkEwMDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1QjgxQ0FFMUZBQTQ0NjIwMDM3RDFFNiAvKiBJbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMjBENjI5MjcxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NjBFNkQyMzBERTMwMzAwNDYx
QUFFIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvblB1YmxpYy5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zMjQwMiw2ICszMjQwMCw3IEBACiAJCQkJODUwMzFCNDgwQTQ0RUZDNzAwRjk5MkUwIC8qIE1v
dXNlUmVsYXRlZEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOURGQzA5OUU2NDkyMDA1
NkU1ODEgLyogTW92ZVNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQjE3
MDA2MTRBMkJBQjIwMEEyQjVEOSAvKiBNdWx0aUNoYW5uZWxSZXNhbXBsZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUxN0UwM0Y3MjRCNkQ5ODQwMDU0ODk1QSAvKiBNdWx0aUdhbWVwYWRQcm92aWRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2QjAxQjNCNjVBQzAwMDVERDc5IC8qIE11dGFi
bGVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2QjExQjNCNjVBQzAwMDVERDc5IC8q
IE11dGFibGVSYW5nZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM2RjA5MDBBMTQzMjdCNjEw
MDY4NTg0OSAvKiBNdXRhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTMzMjgxLDcg
KzMzMjgwLDYgQEAKIAkJCQlFQ0E2ODBDNzFFNjc3MjQ1MDA3MzFEMjAgLyogU3RyaW5nVXRpbGl0
aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5QjZDNDE1MzEzNDQ5NDkwMDAwODVCNjIgLyogU3Ry
aW5nV2l0aERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ5Rjc3NzYwRUZFQzYyMDAw
OTA4NDlEIC8qIFN0cm9rZVN0eWxlQXBwbGllci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE3RTAz
RjcyNEI2RDk4NDAwNTQ4OTVBIC8qIE11bHRpR2FtZXBhZFByb3ZpZGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0MTRCODIwNTFENkRGMEU1MDA3N0VCRTMgLyogU3RydWN0dXJlZENsb25lLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFNDVCQTZCNjIzNzYyMkEzMDA0REZDMDcgLyogU3R5bGVBZGp1c3Rl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI2QTMwRTgxREM0RjAwQjI1OTY1IC8qIFN0eWxl
QmFja2dyb3VuZERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ0NzMsNiArMzQ0NzEsNyBAQAog
CQkJCUNEREUwMkVEMThCM0VENkQwMENGN0ZGMSAvKiBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uT2Jq
Qy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEREUwMkYwMThCNTY1MTMwMENGN0ZGMSAvKiBDRE1T
ZXNzaW9uQVZTdHJlYW1TZXNzaW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RFNTk1OUQxQkYy
NzU3MTAwQTFDQkU4IC8qIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMubW0gaW4gU291cmNl
cyAqLywKKwkJCQlDREUzQUUxNDI0QjQ5MzcwMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUExNDA5MEZCMUFBNTFFMUQwMDkxMTkxQSAvKiBDb250ZW50Rmls
dGVyVW5ibG9ja0hhbmRsZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3QUZGNDIzMUVG
QjE0NDkwMEI1NDVCMyAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNDZDNjk2Q0MxRTcyMDVGQzAwNTk3OTM3IC8qIENQVU1vbml0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0zNDgwMiw3ICszNDgwMSw2IEBACiAJCQkJREVDQTdEQjcxRjlFNjdCNjAw
RTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNjcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREVDQTdE
QjgxRjlFNjdCNjAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNjguY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJREVDQTdEQjkxRjlFNjdCNjAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNjkuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQ0RFM0FFMTQyNEI0OTM3MDAwMTI4RTdFIC8qIENETVV0aWxpdGll
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBN0RCQTFGOUU2N0I2MDBFM0I2NjEgLyogVW5p
ZmllZFNvdXJjZTE3MC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBN0RGQjFGOUVCMzY0MDBF
M0I2NjEgLyogVW5pZmllZFNvdXJjZTE3MS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBN0RG
QzFGOUVCMzY0MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTE3Mi5jcHAgaW4gU291cmNlcyAqLywK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5
UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI2NDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjU4LDcgKzY1OCw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXIK
ICAgICAgICAgY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkRpc3BsYXlQMzsKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogICAgIGNvbnN1bWVJZGVudChhcmdzKTsKIApAQCAtNjc2LDcgKzY3Niw3
IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXIKICAgICAgICAgaWYg
KCFhbHBoYVBhcmFtZXRlcikKICAgICAgICAgICAgIGFscGhhUGFyYW1ldGVyID0gY29uc3VtZU51
bWJlcihhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKICAgICAgICAgaWYgKCFhbHBoYVBhcmFtZXRlcikK
LSAgICAgICAgICAgIHJldHVybiBDb2xvcigpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAog
ICAgICAgICBjb2xvckNoYW5uZWxzWzNdID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigxLjAsIGFs
cGhhUGFyYW1ldGVyLT5pc1BlcmNlbnRhZ2UoKSA/IChhbHBoYVBhcmFtZXRlci0+ZG91YmxlVmFs
dWUoKSAvIDEwMCkgOiBhbHBoYVBhcmFtZXRlci0+ZG91YmxlVmFsdWUoKSkpOwogICAgIH0KQEAg
LTY4NCw5ICs2ODQsOSBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uUGFyYW1ldGVy
CiAgICAgLy8gRklYTUU6IFN1cHBvcnQgdGhlIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZhbGxi
YWNrIGNvbG9yIHZhbHVlcy4KIAogICAgIGlmICghYXJncy5hdEVuZCgpKQotICAgICAgICByZXR1
cm4gQ29sb3IoKTsKLSAgICAKLSAgICByZXR1cm4gbWFrZUV4dGVuZGVkQ29sb3IoY29sb3JDaGFu
bmVsc1swXSwgY29sb3JDaGFubmVsc1sxXSwgY29sb3JDaGFubmVsc1syXSwgY29sb3JDaGFubmVs
c1szXSwgY29sb3JTcGFjZSk7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gQ29s
b3IgeyBDb2xvckNvbXBvbmVudHMgeyBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JDaGFubmVsc1sw
XSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckNoYW5uZWxzWzFdKSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGNvbG9yQ2hhbm5lbHNbMl0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JDaGFubmVsc1sz
XSkgfSwgY29sb3JTcGFjZSB9OwogfQogCiBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+
IHBhcnNlSGV4Q29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGJvb2wgYWNjZXB0UXVp
cmt5Q29sb3JzKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyNjQyMzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MjIxLDcgKzcyMjEsNyBAQCBPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4gRG9jdW1lbnQ6
CiAKIENvbXBvc2l0ZU9wZXJhdG9yIERvY3VtZW50Ojpjb21wb3NpdGVPcGVyYXRvckZvckJhY2tn
cm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVy
ZXIpIGNvbnN0CiB7Ci0gICAgaWYgKExJS0VMWSghc2V0dGluZ3MoKS5wdW5jaE91dFdoaXRlQmFj
a2dyb3VuZHNJbkRhcmtNb2RlKCkgfHwgIUNvbG9yOjppc1doaXRlQ29sb3IoY29sb3IpIHx8ICFy
ZW5kZXJlci51c2VEYXJrQXBwZWFyYW5jZSgpKSkKKyAgICBpZiAoTElLRUxZKCFzZXR0aW5ncygp
LnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUoKSB8fCAhQ29sb3I6OmlzV2hpdGUo
Y29sb3IpIHx8ICFyZW5kZXJlci51c2VEYXJrQXBwZWFyYW5jZSgpKSkKICAgICAgICAgcmV0dXJu
IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyOwogCiAgICAgYXV0byogZnJhbWVWaWV3ID0g
dmlldygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMjY0MjMw
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MDMwLDggKzQwMzAsOCBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVz
QXRTCiAgICAgICAgIGF0dHJpYnV0ZXMuYmFja2dyb3VuZENvbG9yID0gYmFja2dyb3VuZENvbG9y
OwogCiAgICAgYXV0byBmb3JlZ3JvdW5kQ29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENv
bG9yV2l0aENvbG9yRmlsdGVyKENTU1Byb3BlcnR5Q29sb3IpOwotICAgIC8vIEZJWE1FOiBpc0Js
YWNrQ29sb3Igbm90IHN1aXRhYmxlIGZvciBkYXJrIG1vZGUuCi0gICAgaWYgKGZvcmVncm91bmRD
b2xvci5pc1ZhbGlkKCkgJiYgIUNvbG9yOjppc0JsYWNrQ29sb3IoZm9yZWdyb3VuZENvbG9yKSkK
KyAgICAvLyBGSVhNRTogQ29sb3I6OmlzQmxhY2sgbm90IHN1aXRhYmxlIGZvciBkYXJrIG1vZGUu
CisgICAgaWYgKGZvcmVncm91bmRDb2xvci5pc1ZhbGlkKCkgJiYgIUNvbG9yOjppc0JsYWNrKGZv
cmVncm91bmRDb2xvcikpCiAgICAgICAgIGF0dHJpYnV0ZXMuZm9yZWdyb3VuZENvbG9yID0gZm9y
ZWdyb3VuZENvbG9yOwogCiAgICAgaWYgKGF1dG8qIHNoYWRvd0RhdGEgPSBzdHlsZS0+dGV4dFNo
YWRvdygpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVy
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZl
cnRlci5tbQkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9IVE1MQ29udmVydGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NTksMTAgKzg1OSwxMCBAQCBz
dGF0aWMgQ29sb3Igbm9ybWFsaXplZENvbG9yKENvbG9yIGNvbG9yCiAgICAgICAgIHJldHVybiBj
b2xvcjsKIAogICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UgPSBlbGVtZW50LmRvY3VtZW50KCku
dXNlRGFya0FwcGVhcmFuY2UoZWxlbWVudC5leGlzdGluZ0NvbXB1dGVkU3R5bGUoKSk7Ci0gICAg
aWYgKHVzZURhcmtBcHBlYXJhbmNlICYmIENvbG9yOjppc1doaXRlQ29sb3IoY29sb3IpKQorICAg
IGlmICh1c2VEYXJrQXBwZWFyYW5jZSAmJiBDb2xvcjo6aXNXaGl0ZShjb2xvcikpCiAgICAgICAg
IHJldHVybiBDb2xvcigpOwogCi0gICAgaWYgKCF1c2VEYXJrQXBwZWFyYW5jZSAmJiBDb2xvcjo6
aXNCbGFja0NvbG9yKGNvbG9yKSkKKyAgICBpZiAoIXVzZURhcmtBcHBlYXJhbmNlICYmIENvbG9y
Ojppc0JsYWNrKGNvbG9yKSkKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAKICAgICByZXR1cm4g
Y29sb3I7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3Bw
CShyZXZpc2lvbiAyNjQyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiw5IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKIAotI2luY2x1ZGUgIkFuaW1hdGlvblV0aWxpdGll
cy5oIgogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkNvbG9yVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEyNiwy
MiArMTIzLDI2IEBAIGZsb2F0IENvbG9yOjpsdW1pbmFuY2UoKSBjb25zdAogCiBDb2xvciBDb2xv
cjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0CiB7Ci0gICAgaWYgKGlzRXh0ZW5k
ZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5jb2xvcldpdGhBbHBoYShhbHBoYSk7
Ci0KLSAgICBDb2xvciByZXN1bHQgPSBjb2xvcldpdGhPdmVycmlkZW5BbHBoYShhc0lubGluZSgp
LCBhbHBoYSk7Ci0KLSAgICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZpbmcgdGhlIHNlbWFudGlj
IGJpdCBkZXNpcmVkIGFuZC9vciBjb3JyZWN0IGhlcmU/Ci0gICAgaWYgKGlzU2VtYW50aWMoKSkK
LSAgICAgICAgcmVzdWx0LnRhZ0FzU2VtYW50aWMoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAg
IHJldHVybiBjYWxsT25VbmRlcmx5aW5nVHlwZShXVEY6Om1ha2VWaXNpdG9yKAorICAgICAgICBb
Jl0gKGNvbnN0IFNSR0JBPHVpbnQ4X3Q+JiB1bmRlcmx5aW5nQ29sb3IpIC0+IENvbG9yIHsKKyAg
ICAgICAgICAgIENvbG9yIHJlc3VsdCA9IGNvbG9yV2l0aE92ZXJyaWRlbkFscGhhKHVuZGVybHlp
bmdDb2xvciwgYWxwaGEpOworCisgICAgICAgICAgICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZp
bmcgdGhlIHNlbWFudGljIGJpdCBkZXNpcmVkIGFuZC9vciBjb3JyZWN0IGhlcmU/CisgICAgICAg
ICAgICBpZiAoaXNTZW1hbnRpYygpKQorICAgICAgICAgICAgICAgIHJlc3VsdC50YWdBc1NlbWFu
dGljKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9LAorICAgICAgICBb
Jl0gKGNvbnN0IGF1dG8mIHVuZGVybHlpbmdDb2xvcikgLT4gQ29sb3IgeworICAgICAgICAgICAg
cmV0dXJuIGNvbG9yV2l0aE92ZXJyaWRlbkFscGhhKHVuZGVybHlpbmdDb2xvciwgYWxwaGEpOwor
ICAgICAgICB9CisgICAgKSk7CiB9CiAKIENvbG9yIENvbG9yOjppbnZlcnRlZENvbG9yV2l0aEFs
cGhhKGZsb2F0IGFscGhhKSBjb25zdAogewotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAg
IHJldHVybiBhc0V4dGVuZGVkKCkuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShhbHBoYSk7Ci0gICAg
cmV0dXJuIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoYXNJbmxpbmUoKSwgYWxwaGEp
OworICAgIHJldHVybiBjYWxsT25VbmRlcmx5aW5nVHlwZShbJl0gKGNvbnN0IGF1dG8mIHVuZGVy
bHlpbmdDb2xvcikgLT4gQ29sb3IgeworICAgICAgICByZXR1cm4gaW52ZXJ0ZWRDb2xvcldpdGhP
dmVycmlkZW5BbHBoYSh1bmRlcmx5aW5nQ29sb3IsIGFscGhhKTsKKyAgICB9KTsKIH0KIAogQ29s
b3IgQ29sb3I6OnNlbWFudGljQ29sb3IoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjQyMzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAjaW5jbHVkZSAiU2ltcGxlQ29sb3IuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgog
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiAjaWYgVVNFKENHKQpAQCAtNTEsNiArNTIsMTgg
QEAgdHlwZWRlZiBzdHJ1Y3QgX0dka1JHQkEgR2RrUkdCQTsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCisvLyBBYmxlIHRvIHJlcHJlc2VudDoKKy8vICAgIC0gU3BlY2lhbCAiaW52YWxpZCBjb2xv
ciIgc3RhdGUKKy8vICAgIC0gNHggOC1iaXQgKDAtMjU1KSBzUkdCQSwgc3RvcmVkIGlubGluZSwg
bm8gYWxsb2NhdGlvbgorLy8gICAgLSA0eCBmbG9hdCAoMC0xKSBzUkdCQSwgc3RvcmVkIGluIGEg
cmVmZXJlbmNlIGNvdW50ZWQgc3ViLW9iamVjdAorLy8gICAgLSA0eCBmbG9hdCAoMC0xKSBMaW5l
YXIgc1JHQkEsIHN0b3JlZCBpbiBhIHJlZmVyZW5jZSBjb3VudGVkIHN1Yi1vYmplY3QKKy8vICAg
IC0gNHggZmxvYXQgKDAtMSkgRGlzcGxheVAzLCBzdG9yZWQgaW4gYSByZWZlcmVuY2UgY291bnRl
ZCBzdWItb2JqZWN0CisvLworLy8gQWRkaXRpb25hbGx5LCB0aGUgaW5saW5lIDgtYml0IHNSR0JB
IGNhbiBoYXZlIGFuIG9wdGlvbmFsICJzZW1hbnRpYyIgYml0IHNldCBvbiBpdCwKKy8vIHdoaWNo
IGluZGljYXRlcyB0aGUgY29sb3Igb3JpZ2luYXRlZCBmcm9tIGEgQ1NTIHNlbWFudGljIGNvbG9y
IG5hbWUuCisvLyBGSVhNRTogSWYgd2Uga2VlcCB0aGUgInNlbWFudGljIiBiaXQgb24gQ29sb3Is
IHdlIHNob3VsZCBleHRlbmQgc3VwcG9ydCB0byBhbGwgY29sb3JzLAorLy8gbm90IGp1c3QgaW5s
aW5lIG9uZXMsIGJ5IHVzaW5nIHRoZSB1bnVzZWQgcG9pbnRlciBiaXRzLgorCiBjbGFzcyBDb2xv
ciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC02Myw3ICs3Niwx
MCBAQCBwdWJsaWM6CiAgICAgQ29sb3IoU1JHQkE8dWludDhfdD4sIFNlbWFudGljVGFnKTsKICAg
ICBDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4sIFNlbWFudGljVGFnKTsKIAotICAgIENv
bG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmKTsKKyAgICBDb2xvcihDb2xvckNvbXBvbmVudHM8Zmxv
YXQ+LCBDb2xvclNwYWNlKTsKKyAgICBDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4mKTsKKyAgICBD
b2xvcihjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mKTsKKyAgICBDb2xvcihjb25zdCBEaXNwbGF5
UDM8ZmxvYXQ+Jik7CiAKICAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZUVtcHR5VmFs
dWVUeXBlKTsKICAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUpOwpAQCAtNzIsMzQgKzg4LDM3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xv
cihjb25zdCBDb2xvciYpOwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKENvbG9yJiYpOwogCisg
ICAgV0VCQ09SRV9FWFBPUlQgQ29sb3ImIG9wZXJhdG9yPShjb25zdCBDb2xvciYpOworICAgIFdF
QkNPUkVfRVhQT1JUIENvbG9yJiBvcGVyYXRvcj0oQ29sb3ImJik7CisKICAgICB+Q29sb3IoKTsK
IAotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSB8fCAobV9j
b2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyAmIHZhbGlkSW5saW5lQ29sb3JCaXQpOyB9Cisg
ICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwogCi0gICAgLy8gVHJ1ZSBpZiB0aGUgY29sb3Igb3Jp
Z2luYXRlZCBmcm9tIGEgQ1NTIHNlbWFudGljIGNvbG9yIG5hbWUuCisgICAgYm9vbCBpc1ZhbGlk
KCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpIHx8IChtX2NvbG9yRGF0YS5pbmxpbmVDb2xv
ckFuZEZsYWdzICYgdmFsaWRJbmxpbmVDb2xvckJpdCk7IH0KICAgICBib29sIGlzU2VtYW50aWMo
KSBjb25zdCB7IHJldHVybiBpc0lubGluZSgpICYmIChtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFu
ZEZsYWdzICYgaXNTZW1hbnRpY0lubGluZUNvbG9yQml0KTsgfQogCisKICAgICBib29sIGlzT3Bh
cXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkg
PT0gMS4wIDogYXNJbmxpbmUoKS5hbHBoYSA9PSAyNTU7IH0KICAgICBib29sIGlzVmlzaWJsZSgp
IGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID4gMC4w
IDogYXNJbmxpbmUoKS5hbHBoYSA+IDA7IH0KIAogICAgIHVpbnQ4X3QgYWxwaGEoKSBjb25zdCB7
IHJldHVybiBpc0V4dGVuZGVkKCkgPyBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGFzRXh0ZW5kZWQo
KS5hbHBoYSgpKSA6IGFzSW5saW5lKCkuYWxwaGE7IH0KICAgICBmbG9hdCBhbHBoYUFzRmxvYXQo
KSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IGNv
bnZlcnRUb0NvbXBvbmVudEZsb2F0KGFzSW5saW5lKCkuYWxwaGEpOyB9CiAKLSAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgbHVtaW5hbmNlKCkgY29u
c3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgbGlnaHRuZXNzKCkgY29uc3Q7IC8vIEZJWE1F
OiBSZXBsYWNlIHJlbWFpbmluZyB1c2VzIHdpdGggbHVtaW5hbmNlLgogCi0gICAgV0VCQ09SRV9F
WFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+IGNvbG9y
U3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiBkZWNsdHlwZShhdXRvKSBjYWxsT25VbmRlcmx5aW5nVHlwZShGdW5jdG9yJiYpIGNvbnN0
OwogCiAgICAgLy8gVGhpcyB3aWxsIGNvbnZlcnQgbm9uLXNSR0IgY29sb3JzcGFjZSBjb2xvcnMg
aW50byBzUkdCLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFNSR0JBPFQ+IHRvU1JHQkFMb3Nz
eSgpIGNvbnN0OwogCisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIENv
bG9yQ29tcG9uZW50czxmbG9hdD4+IGNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3Q7CisK
ICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBsaWdodGVuZWQoKSBjb25zdDsKICAgICBXRUJDT1JF
X0VYUE9SVCBDb2xvciBkYXJrZW5lZCgpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgZmxv
YXQgbHVtaW5hbmNlKCkgY29uc3Q7Ci0KLSAgICAvLyBGSVhNRTogUmVwbGFjZSByZW1haW5pbmcg
dXNlcyB3aXRoIGx1bWluYW5jZS4KLSAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBsaWdodG5lc3Mo
KSBjb25zdDsKLQogICAgIENvbG9yIGludmVydGVkQ29sb3JXaXRoQWxwaGEoT3B0aW9uYWw8Zmxv
YXQ+IGFscGhhKSBjb25zdDsKICAgICBDb2xvciBpbnZlcnRlZENvbG9yV2l0aEFscGhhKGZsb2F0
IGFscGhhKSBjb25zdDsKIApAQCAtMTQ0LDIyICsxNjMsMjQgQEAgcHVibGljOgogICAgIGNvbnN0
IEV4dGVuZGVkQ29sb3ImIGFzRXh0ZW5kZWQoKSBjb25zdDsKICAgICBTUkdCQTx1aW50OF90PiBh
c0lubGluZSgpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3ImIG9wZXJhdG9yPShj
b25zdCBDb2xvciYpOwotICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yJiBvcGVyYXRvcj0oQ29sb3Im
Jik7Ci0KICAgICAvLyBFeHRlbmRlZCBhbmQgbm9uLWV4dGVuZGVkIGNvbG9ycyB3aWxsIGFsd2F5
cyBiZSBub24tZXF1YWwuCiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYg
YSwgY29uc3QgQ29sb3ImIGIpOwogICAgIGZyaWVuZCBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRp
Y0NvbG9yKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYik7CiAgICAgZnJpZW5kIGJvb2wg
ZXh0ZW5kZWRDb2xvcnNFcXVhbChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CiAKLSAgICBz
dGF0aWMgYm9vbCBpc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICBzdGF0aWMgYm9vbCBp
c1doaXRlQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICBzdGF0aWMgYm9vbCBpc0JsYWNrKGNvbnN0
IENvbG9yJik7CisgICAgc3RhdGljIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvciYpOwogCiAgICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxDb2xvcj4gZGVjb2RlKERl
Y29kZXImKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHNldElubGluZUNvbG9yKFNSR0JBPHVpbnQ4
X3Q+KTsKKyAgICBDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJik7CisKKyAgICB2b2lkIHNldENv
bG9yKFNSR0JBPHVpbnQ4X3Q+KTsKKyAgICB2b2lkIHNldENvbG9yKGNvbnN0IFNSR0JBPGZsb2F0
PiYpOworICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+Jik7CisgICAg
dm9pZCBzZXRDb2xvcihjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CiAgICAgdm9pZCBzZXRFeHRl
bmRlZENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmKTsKIAogICAgIHZvaWQgdGFnQXNTZW1hbnRp
YygpIHsgbV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyB8PSBpc1NlbWFudGljSW5saW5l
Q29sb3JCaXQ7IH0KQEAgLTIyNywyOSArMjQ4LDU5IEBAIGlubGluZSBib29sIGVxdWFsSWdub3Jp
bmdTZW1hbnRpY0NvbG9yKGMKIAogaW5saW5lIENvbG9yOjpDb2xvcihTUkdCQTx1aW50OF90PiBj
b2xvcikKIHsKLSAgICBzZXRJbmxpbmVDb2xvcihjb2xvcik7CisgICAgc2V0Q29sb3IoY29sb3Ip
OwogfQogCiBpbmxpbmUgQ29sb3I6OkNvbG9yKE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBjb2xv
cikKIHsKICAgICBpZiAoY29sb3IpCi0gICAgICAgIHNldElubGluZUNvbG9yKCpjb2xvcik7Cisg
ICAgICAgIHNldENvbG9yKCpjb2xvcik7CiB9CiAKIGlubGluZSBDb2xvcjo6Q29sb3IoU1JHQkE8
dWludDhfdD4gY29sb3IsIFNlbWFudGljVGFnKQogewotICAgIHNldElubGluZUNvbG9yKGNvbG9y
KTsKKyAgICBzZXRDb2xvcihjb2xvcik7CiAgICAgdGFnQXNTZW1hbnRpYygpOwogfQogCiBpbmxp
bmUgQ29sb3I6OkNvbG9yKE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvciwgU2VtYW50aWNU
YWcpCiB7CiAgICAgaWYgKGNvbG9yKSB7Ci0gICAgICAgIHNldElubGluZUNvbG9yKCpjb2xvcik7
CisgICAgICAgIHNldENvbG9yKCpjb2xvcik7CiAgICAgICAgIHRhZ0FzU2VtYW50aWMoKTsKICAg
ICB9CiB9CiAKK2lubGluZSBDb2xvcjo6Q29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiBjb21w
b25lbnRzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgc3dpdGNoIChjb2xvclNwYWNl
KSB7CisgICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgorICAgICAgICBzZXRDb2xvcihhc1NSR0JB
KGNvbXBvbmVudHMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29sb3JTcGFjZTo6TGlu
ZWFyUkdCOgorICAgICAgICBzZXRDb2xvcihhc0xpbmVhclNSR0JBKGNvbXBvbmVudHMpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgorICAgICAgICBz
ZXRDb2xvcihhc0Rpc3BsYXlQMyhjb21wb25lbnRzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
Cit9CisKK2lubGluZSBDb2xvcjo6Q29sb3IoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK3sK
KyAgICBzZXRDb2xvcihjb2xvcik7Cit9CisKK2lubGluZSBDb2xvcjo6Q29sb3IoY29uc3QgTGlu
ZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBzZXRDb2xvcihjb2xvcik7Cit9CisKK2lu
bGluZSBDb2xvcjo6Q29sb3IoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYgY29sb3IpCit7CisgICAg
c2V0Q29sb3IoY29sb3IpOworfQorCiBpbmxpbmUgQ29sb3I6OkNvbG9yKFJlZjxFeHRlbmRlZENv
bG9yPiYmIGV4dGVuZGVkQ29sb3IpCiB7CiAgICAgc2V0RXh0ZW5kZWRDb2xvcihXVEZNb3ZlKGV4
dGVuZGVkQ29sb3IpKTsKQEAgLTI4MCwxOSArMzMxLDM2IEBAIGlubGluZSBDb2xvcjo6fkNvbG9y
KCkKIAogaW5saW5lIHVuc2lnbmVkIENvbG9yOjpoYXNoKCkgY29uc3QKIHsKLSAgICBpZiAoaXNF
eHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmhhc2goKTsKKyAgICBpZiAo
aXNFeHRlbmRlZCgpKSB7CisgICAgICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGFzRXh0
ZW5kZWQoKS5jb21wb25lbnRzKCk7CisgICAgICAgIHJldHVybiBjb21wdXRlSGFzaChjMSwgYzIs
IGMzLCBhbHBoYSwgYXNFeHRlbmRlZCgpLmNvbG9yU3BhY2UoKSk7CisgICAgfQogICAgIHJldHVy
biBXVEY6OmludEhhc2gobV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IFNSR0JBPFQ+IENvbG9yOjp0b1NSR0JBTG9zc3koKSBjb25zdAor
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gZGVjbHR5cGUoYXV0bykgQ29sb3I6OmNhbGxPblVu
ZGVybHlpbmdUeXBlKEZ1bmN0b3ImJiBmdW5jdG9yKSBjb25zdAogewogICAgIGlmIChpc0V4dGVu
ZGVkKCkpCi0gICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkudG9TUkdCQUxvc3N5PFQ+KCk7Ci0g
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCB1aW50OF90PikKLSAgICAgICAgcmV0
dXJuIGFzSW5saW5lKCk7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCBmbG9h
dD4pCi0gICAgICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoYXNJbmxpbmUoKSk7
CisgICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY2FsbE9uVW5kZXJseWluZ1R5cGUoc3RkOjpm
b3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKKyAgICByZXR1cm4gZnVuY3Rvcihhc0lubGluZSgp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4gQ29sb3I6OnRvU1JHQkFMb3Nz
eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNhbGxPblVuZGVybHlpbmdUeXBlKFdURjo6bWFrZVZp
c2l0b3IoCisgICAgICAgIFtdIChjb25zdCBTUkdCQTx1aW50OF90PiYgY29sb3IpIHsKKyAgICAg
ICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4pCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNvbG9yOworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X3NhbWVfdjxULCBmbG9hdD4pCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBv
bmVudEZsb2F0cyhjb2xvcik7CisgICAgICAgIH0sCisgICAgICAgIFtdIChjb25zdCBhdXRvJiBj
b2xvcikgeworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCB1aW50
OF90PikKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZXModG9T
UkdCQShjb2xvcikpOworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxU
LCBmbG9hdD4pCisgICAgICAgICAgICAgICAgcmV0dXJuIHRvU1JHQkEoY29sb3IpOworICAgICAg
ICB9CisgICAgKSk7CiB9CiAKIGlubGluZSBDb2xvciBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhB
bHBoYShPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0CkBAIC0zMjcsMTIgKzM5NSwzMyBAQCBp
bmxpbmUgU1JHQkE8dWludDhfdD4gQ29sb3I6OmFzSW5saW5lKCkgCiAgICAgcmV0dXJuIGFzU1JH
QkEoUGFja2VkOjpSR0JBIHsgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1fY29sb3JEYXRhLmlubGlu
ZUNvbG9yQW5kRmxhZ3MgPj4gMzIpIH0pOwogfQogCi1pbmxpbmUgdm9pZCBDb2xvcjo6c2V0SW5s
aW5lQ29sb3IoU1JHQkE8dWludDhfdD4gY29sb3IpCitpbmxpbmUgdm9pZCBDb2xvcjo6c2V0Q29s
b3IoU1JHQkE8dWludDhfdD4gY29sb3IpCiB7CiAgICAgbV9jb2xvckRhdGEuaW5saW5lQ29sb3JB
bmRGbGFncyA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihQYWNrZWQ6OlJHQkEgeyBjb2xvciB9LnZh
bHVlKSA8PCAzMjsKICAgICB0YWdBc1ZhbGlkKCk7CiB9CiAKK2lubGluZSB2b2lkIENvbG9yOjpz
ZXRDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQoreworICAgIGF1dG8gY29udmVydGVk
ID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoY29sb3IpOworICAgIGlmIChjb2xvciA9PSBjb252
ZXJ0VG9Db21wb25lbnRGbG9hdHMoY29udmVydGVkKSkgeworICAgICAgICBzZXRDb2xvcihjb252
ZXJ0ZWQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2V0RXh0ZW5kZWRDb2xvcihF
eHRlbmRlZENvbG9yOjpjcmVhdGUoY29sb3IpKTsKK30KKworaW5saW5lIHZvaWQgQ29sb3I6OnNl
dENvbG9yKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAgc2V0RXh0ZW5k
ZWRDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoY29sb3IpKTsKK30KKworaW5saW5lIHZvaWQg
Q29sb3I6OnNldENvbG9yKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQoreworICAgIHNl
dEV4dGVuZGVkQ29sb3IoRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGNvbG9yKSk7Cit9CisKIGlubGlu
ZSB2b2lkIENvbG9yOjpzZXRFeHRlbmRlZENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVu
ZGVkQ29sb3IpCiB7CiAgICAgLy8gWmVybyB0aGUgdW5pb24sIGp1c3QgaW4gY2FzZSBhIDMyLWJp
dCBzeXN0ZW0gb25seSBhc3NpZ25zIHRoZQpAQCAtMzQyLDE4ICs0MzEsMTggQEAgaW5saW5lIHZv
aWQgQ29sb3I6OnNldEV4dGVuZGVkQ29sb3IoUmVmPAogICAgIEFTU0VSVChpc0V4dGVuZGVkKCkp
OwogfQogCi1pbmxpbmUgYm9vbCBDb2xvcjo6aXNCbGFja0NvbG9yKGNvbnN0IENvbG9yJiBjb2xv
cikKK2lubGluZSBib29sIENvbG9yOjppc0JsYWNrKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAg
ICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gY29sb3IuYXNFeHRlbmRl
ZCgpLmlzQmxhY2soKTsKLSAgICByZXR1cm4gY29sb3IuYXNJbmxpbmUoKSA9PSBDb2xvcjo6Ymxh
Y2s7CisgICAgcmV0dXJuIGNvbG9yLmNhbGxPblVuZGVybHlpbmdUeXBlKFtdIChjb25zdCBhdXRv
JiBjb2xvcikgeworICAgICAgICByZXR1cm4gV2ViQ29yZTo6aXNCbGFjayhjb2xvcik7CisgICAg
fSk7CiB9CiAKLWlubGluZSBib29sIENvbG9yOjppc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImIGNv
bG9yKQoraW5saW5lIGJvb2wgQ29sb3I6OmlzV2hpdGUoY29uc3QgQ29sb3ImIGNvbG9yKQogewot
ICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBjb2xvci5hc0V4dGVu
ZGVkKCkuaXNXaGl0ZSgpOwotICAgIHJldHVybiBjb2xvci5hc0lubGluZSgpID09IENvbG9yOjp3
aGl0ZTsKKyAgICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJseWluZ1R5cGUoW10gKGNvbnN0IGF1
dG8mIGNvbG9yKSB7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjppc1doaXRlKGNvbG9yKTsKKyAg
ICB9KTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KQEAgLTQwOCw3ICs0OTcsNyBAQCBP
cHRpb25hbDxDb2xvcj4gQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkCiAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbG9yU3BhY2Up
KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIENvbG9y
IHsgRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGMxLCBjMiwgYzMsIGFscGhhLCBjb2xvclNwYWNlKSB9
OworICAgICAgICByZXR1cm4gQ29sb3IgeyBFeHRlbmRlZENvbG9yOjpjcmVhdGUoeyBjMSwgYzIs
IGMzLCBhbHBoYSB9LCBjb2xvclNwYWNlKSB9OwogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29u
dmVyc2lvbi5oCShyZXZpc2lvbiAyNjQyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMzEgKzI1LDM1
IEBACiAKICNwcmFnbWEgb25jZQogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CisjaW5jbHVkZSAiQ29s
b3JUeXBlcy5oIgogCi10ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IENNWUtBOwotdGVtcGxhdGU8
dHlwZW5hbWU+IHN0cnVjdCBEaXNwbGF5UDM7Ci10ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEhT
TEE7Ci10ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IExpbmVhckRpc3BsYXlQMzsKLXRlbXBsYXRl
PHR5cGVuYW1lPiBzdHJ1Y3QgTGluZWFyU1JHQkE7Ci10ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0
IFNSR0JBOworbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBUaGVzZSBhcmUgdGhlIHN0YW5kYXJk
IHNSR0IgPC0+IExpbmVhclJHQiAvIERpc3BsYXlQMyA8LT4gTGluZWFyRGlzcGxheVAzIGNvbnZl
cnNpb24gZnVuY3Rpb25zIChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUkdCKS4KIGZs
b2F0IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoZmxvYXQpOwogZmxvYXQgcmdiVG9MaW5lYXJD
b2xvckNvbXBvbmVudChmbG9hdCk7CiAKLUxpbmVhclNSR0JBPGZsb2F0PiB0b0xpbmVhclNSR0JB
KGNvbnN0IFNSR0JBPGZsb2F0PiYpOwotU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3QgTGluZWFy
U1JHQkE8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBMaW5lYXJTUkdCQTxmbG9hdD4gdG9MaW5l
YXJTUkdCQShjb25zdCBTUkdCQTxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFNSR0JBPGZsb2F0
PiB0b1NSR0JBKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYpOwogCi1MaW5lYXJEaXNwbGF5UDM8
ZmxvYXQ+IHRvTGluZWFyRGlzcGxheVAzKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsKLURpc3Bs
YXlQMzxmbG9hdD4gdG9EaXNwbGF5UDMoY29uc3QgTGluZWFyRGlzcGxheVAzPGZsb2F0PiYpOwor
V0VCQ09SRV9FWFBPUlQgTGluZWFyRGlzcGxheVAzPGZsb2F0PiB0b0xpbmVhckRpc3BsYXlQMyhj
b25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBEaXNwbGF5UDM8ZmxvYXQ+
IHRvRGlzcGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mKTsKIAotU1JHQkE8Zmxv
YXQ+IHRvU1JHQkEoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOwotRGlzcGxheVAzPGZsb2F0PiB0
b0Rpc3BsYXlQMyhjb25zdCBTUkdCQTxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFNSR0JBPGZs
b2F0PiB0b1NSR0JBKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIERp
c3BsYXlQMzxmbG9hdD4gdG9EaXNwbGF5UDMoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiAKIFdFQkNP
UkVfRVhQT1JUIEhTTEE8ZmxvYXQ+IHRvSFNMQShjb25zdCBTUkdCQTxmbG9hdD4mKTsKIFdFQkNP
UkVfRVhQT1JUIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IEhTTEE8ZmxvYXQ+Jik7CiAKIFNS
R0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IENNWUtBPGZsb2F0PiYpOwogCisKKy8vIElkZW50aXR5
IGNvbnZlcnNpb25zICh1c2VmdWwgZm9yIGdlbmVyaWMgY29udGV4dHMpCisKK2NvbnN0ZXhwciBT
UkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKSB7IHJldHVybiBj
b2xvcjsgfQorY29uc3RleHByIExpbmVhclNSR0JBPGZsb2F0PiB0b0xpbmVhclNSR0JBKGNvbnN0
IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9Citjb25zdGV4cHIg
RGlzcGxheVAzPGZsb2F0PiB0b0Rpc3BsYXlQMyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xv
cikgeyByZXR1cm4gY29sb3I7IH0KK2NvbnN0ZXhwciBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+IHRv
TGluZWFyRGlzcGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKSB7IHJl
dHVybiBjb2xvcjsgfQorY29uc3RleHByIEhTTEE8ZmxvYXQ+IHRvSFNMQShjb25zdCBIU0xBPGZs
b2F0PiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JTZXJpYWxpemF0aW9uLmNwcAkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAwLDQ1ICsxMDAsODcgQEAgc3RhdGljIEFTQ0lJTGl0ZXJhbCBzZXJpYWxpemF0aW9uKENv
bG9yUwogICAgIHJldHVybiAiIl9zOwogfQogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhj
b25zdCBFeHRlbmRlZENvbG9yJiBjb2xvcikKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4g
c3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0g
ICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IuY29tcG9uZW50cygpOworICAgIGF1
dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOwogICAgIGlmIChXVEY6OmFyZUVzc2VudGlh
bGx5RXF1YWwoYWxwaGEsIDEuMGYpKQotICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiY29sb3Io
Iiwgc2VyaWFsaXphdGlvbihjb2xvci5jb2xvclNwYWNlKCkpLCAnICcsIGMxLCAnICcsIGMyLCAn
ICcsIGMzLCAnKScpOwotICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBzZXJpYWxpemF0
aW9uKGNvbG9yLmNvbG9yU3BhY2UoKSksICcgJywgYzEsICcgJywgYzIsICcgJywgYzMsICIgLyAi
LCBhbHBoYSwgJyknKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIsIHNlcmlh
bGl6YXRpb24oY29sb3IuY29sb3JTcGFjZSksICcgJywgYzEsICcgJywgYzIsICcgJywgYzMsICcp
Jyk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIsIHNlcmlhbGl6YXRpb24oY29sb3Iu
Y29sb3JTcGFjZSksICcgJywgYzEsICcgJywgYzIsICcgJywgYzMsICIgLyAiLCBhbHBoYSwgJykn
KTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IEV4dGVuZGVkQ29sb3Im
IGNvbG9yKQorLy8gU1JHQkE8ZmxvYXQ+IG92ZXJsb2FkcworCitTdHJpbmcgc2VyaWFsaXphdGlv
bkZvckNTUyhjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJpYWxp
emF0aW9uKGNvbG9yKTsKK30KKworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IFNS
R0JBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29s
b3IpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKIH0KIAotU3RyaW5nIHNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IEV4dGVuZGVkQ29sb3ImIGNvbG9yKQor
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IFNSR0JBPGZsb2F0
PiYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29sb3IpOworICAg
IHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKIH0KIAorLy8gTGluZWFyU1JHQkE8ZmxvYXQ+
IG92ZXJsb2FkcworCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBMaW5lYXJTUkdC
QTxmbG9hdD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKK30K
KworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYg
Y29sb3IpCit7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworfQorCitTdHJpbmcg
c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+
JiBjb2xvcikKK3sKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7Cit9CisKKy8vIERp
c3BsYXlQMzxmbG9hdD4gb3ZlcmxvYWRzCisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNv
bnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9u
KGNvbG9yKTsKK30KKworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IERpc3BsYXlQ
MzxmbG9hdD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKK30K
KworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IERpc3BsYXlQ
MzxmbG9hdD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKK30K
KworCiAvLyBDb2xvciBvdmVybG9hZHMKIAogU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAg
IHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yLmFzRXh0ZW5kZWQoKSk7Ci0gICAgcmV0
dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29sb3IuYXNJbmxpbmUoKSk7CisgICAgcmV0dXJuIGNv
bG9yLmNhbGxPblVuZGVybHlpbmdUeXBlKFtdIChhdXRvIGMpIHsKKyAgICAgICAgcmV0dXJuIHNl
cmlhbGl6YXRpb25Gb3JDU1MoYyk7CisgICAgfSk7CiB9CiAKIFN0cmluZyBzZXJpYWxpemF0aW9u
Rm9ySFRNTChjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQo
KSkKLSAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9yLmFzRXh0ZW5kZWQo
KSk7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9yLmFzSW5saW5lKCkpOwor
ICAgIHJldHVybiBjb2xvci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoYXV0byBjKSB7CisgICAg
ICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9ySFRNTChjKTsKKyAgICB9KTsKIH0KIAogU3RyaW5n
IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
LSAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlv
bkZvclJlbmRlclRyZWVBc1RleHQoY29sb3IuYXNFeHRlbmRlZCgpKTsKLSAgICByZXR1cm4gc2Vy
aWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29sb3IuYXNJbmxpbmUoKSk7CisgICAgcmV0
dXJuIGNvbG9yLmNhbGxPblVuZGVybHlpbmdUeXBlKFtdIChhdXRvIGMpIHsKKyAgICAgICAgcmV0
dXJuIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGMpOworICAgIH0pOwogfQogCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clNlcmlhbGl6YXRpb24uaAkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDggKzI4LDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29sb3I7Ci1jbGFzcyBF
eHRlbmRlZENvbG9yOwogCit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IERpc3BsYXlQMzsKK3Rl
bXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgTGluZWFyU1JHQkE7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4g
c3RydWN0IFNSR0JBOwogCiAvLyBzZXJpYWxpemF0aW9uRm9ySFRNTCByZXR1cm5zIHRoZSBjb2xv
ciBzZXJpYWxpemVkIGFjY29yZGluZyB0byBIVE1MNSA8aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdn
Lm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjZmlsbC1hbmQtc3Ryb2tlLXN0eWxlcz4gKDEw
IFNlcHRlbWJlciAyMDE1KQpAQCAtNDAsOSArNDEsMTcgQEAgV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IHNlcmlhbGl6YXRpb25Gb3JDUwogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JIVE1MKFNSR0JBPHVpbnQ4X3Q+KTsKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0
aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChTUkdCQTx1aW50OF90Pik7CiAKLVdFQkNPUkVfRVhQT1JU
IFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IEV4dGVuZGVkQ29sb3ImKTsKLVdFQkNP
UkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBFeHRlbmRlZENvbG9y
Jik7Ci1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1Rl
eHQoY29uc3QgRXh0ZW5kZWRDb2xvciYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6
YXRpb25Gb3JDU1MoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcg
c2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgU1JHQkE8Zmxv
YXQ+Jik7CisKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0
IExpbmVhclNSR0JBPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRp
b25Gb3JIVE1MKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IExpbmVhclNSR0JBPGZs
b2F0PiYpOworCitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25z
dCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlv
bkZvckhUTUwoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IERpc3BsYXlQMzxmbG9hdD4m
KTsKIAogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgQ29s
b3ImKTsKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBD
b2xvciYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
VHlwZXMuaAkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsMzEgQEAKICNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiQ29s
b3JTcGFjZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDb21wb25lbnRUcmFpdHM7CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbXBvbmVudFRy
YWl0czx1aW50OF90PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IG1pblZhbHVlID0g
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgbWF4VmFsdWUgPSAyNTU7Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb21wb25lbnRUcmFpdHM8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgY29u
c3RleHByIGZsb2F0IG1pblZhbHVlID0gMC4wZjsKKyAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0
IG1heFZhbHVlID0gMS4wZjsKK307CisKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFNS
R0JBIHsKICAgICBUIHJlZDsKICAgICBUIGdyZWVuOwogICAgIFQgYmx1ZTsKICAgICBUIGFscGhh
OworCisgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBD
b2xvclNwYWNlIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCOwogfTsKIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4gU1JHQkEoVCwgVCwgVCwgVCkgLT4gU1JHQkE8VD47CkBAIC02NCw2ICs4MSw5
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMaW5lYXJTUkdCQSAKICAgICBUIGdyZWVu
OwogICAgIFQgYmx1ZTsKICAgICBUIGFscGhhOworCisgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9
IFQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBDb2xvclNw
YWNlOjpMaW5lYXJSR0I7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBMaW5lYXJTUkdCQShU
LCBULCBULCBUKSAtPiBMaW5lYXJTUkdCQTxUPjsKQEAgLTk0LDYgKzExNCw5IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBEaXNwbGF5UDMgewogICAgIFQgZ3JlZW47CiAgICAgVCBibHVl
OwogICAgIFQgYWxwaGE7CisKKyAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKKyAgICBzdGF0
aWMgY29uc3RleHByIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkRpc3BsYXlQ
MzsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IERpc3BsYXlQMyhULCBULCBULCBUKSAtPiBE
aXNwbGF5UDM8VD47CkBAIC0xMjQsNiArMTQ3LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IExpbmVhckRpc3BsYQogICAgIFQgZ3JlZW47CiAgICAgVCBibHVlOwogICAgIFQgYWxwaGE7
CisKKyAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IExpbmVhckRpc3BsYXlQMyhULCBULCBULCBUKSAtPiBMaW5lYXJEaXNwbGF5UDM8VD47CkBA
IC0xNTQsNiArMTc5LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhTTEEgewogICAg
IFQgc2F0dXJhdGlvbjsKICAgICBUIGxpZ2h0bmVzczsKICAgICBUIGFscGhhOworCisgICAgdXNp
bmcgQ29tcG9uZW50VHlwZSA9IFQ7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBIU0xBKFQs
IFQsIFQsIFQpIC0+IEhTTEE8VD47CkBAIC0xODYsNiArMjEzLDggQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENNWUtBIHsKICAgICBUIHllbGxvdzsKICAgICBUIGJsYWNrOwogICAgIFQg
YWxwaGE7CisKKyAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKIH07CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IENNWUtBKFQsIFQsIFQsIFQsIFQpIC0+IENNWUtBPFQ+OwpAQCAtMjA2LDYgKzIz
NSw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBYWVpBIHsKICAgICBUIHk7CiAgICAg
VCB6OwogICAgIFQgYWxwaGE7CisKKyAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKIH07CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFhZWkEoVCwgVCwgVCwgVCkgLT4gWFlaQTxUPjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMu
aAkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksOSBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBjCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xv
clR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBo
YShjb25zdCBDb2xvclR5cGUmLCB1aW50OF90IG92ZXJyaWRlQWxwaGEpOwogdGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBo
YShjb25zdCBDb2xvclR5cGUmLCBmbG9hdCBvdmVycmlkZUFscGhhKTsKIAordGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYp
OwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNv
bnN0IENvbG9yVHlwZSYpOworCiBjb25zdGV4cHIgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUo
dWludDE2X3QpOwogY29uc3RleHByIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZfdCk7
CiAKQEAgLTE5Miw2ICsxOTUsMjMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xv
clR5cGUgaQogICAgIHJldHVybiBjb3B5OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGU+IGNvbnN0ZXhwciBib29sIGlzQmxhY2soY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKK3sKKyAg
ICBjb25zdGV4cHIgYXV0byBtaW4gPSBDb21wb25lbnRUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBl
OjpDb21wb25lbnRUeXBlPjo6bWluVmFsdWU7CisgICAgY29uc3RleHByIGF1dG8gbWF4ID0gQ29t
cG9uZW50VHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om1heFZhbHVl
OworCisgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgcmV0dXJuIGMx
ID09IG1pbiAmJiBjMiA9PSBtaW4gJiYgYzMgPT0gbWluICYmIGFscGhhID09IG1heDsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0
IENvbG9yVHlwZSYgY29sb3IpCit7CisgICAgY29uc3RleHByIGF1dG8gbWF4ID0gQ29tcG9uZW50
VHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om1heFZhbHVlOworCisg
ICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgcmV0dXJuIGMxID09IG1h
eCAmJiBjMiA9PSBtYXggJiYgYzMgPT0gbWF4ICYmIGFscGhhID09IG1heDsKK30KKwogY29uc3Rl
eHByIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKQogewogICAgIHJl
dHVybiAodmFsdWUgPDwgOCkgLSB2YWx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCShyZXZpc2lvbiAyNjQyMzApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRD
b2xvci5oIgotCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJDb2xvckNvbnZlcnNpb24u
aCIKLSNpbmNsdWRlICJDb2xvclR5cGVzLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hlci5oPgotI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVmPEV4
dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShmbG9hdCBjMSwgZmxvYXQgYzIsIGZs
b2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEV4dGVuZGVkQ29sb3IoYzEsIGMyLCBjMywgYWxwaGEsIGNvbG9yU3Bh
Y2UpKTsKLX0KLQotdW5zaWduZWQgRXh0ZW5kZWRDb2xvcjo6aGFzaCgpIGNvbnN0Ci17Ci0gICAg
YXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29tcG9uZW50cygpOwotICAgIHJldHVybiBjb21w
dXRlSGFzaChjMSwgYzIsIGMzLCBhbHBoYSwgbV9jb2xvclNwYWNlKTsKLX0KLQotUmVmPEV4dGVu
ZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmNvbG9yV2l0aEFscGhhKGZsb2F0IG92ZXJyaWRlQWxw
aGEpIGNvbnN0Ci17Ci0gICAgYXV0byBbYzEsIGMyLCBjMywgZXhpc3RpbmdBbHBoYV0gPSBjb21w
b25lbnRzKCk7Ci0gICAgcmV0dXJuIEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjMSwgYzIsIGMzLCBv
dmVycmlkZUFscGhhLCBjb2xvclNwYWNlKCkpOwotfQotCi1SZWY8RXh0ZW5kZWRDb2xvcj4gRXh0
ZW5kZWRDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBvdmVycmlkZUFscGhhKSBj
b25zdAotewotICAgIGF1dG8gW2MxLCBjMiwgYzMsIGV4aXN0aW5nQWxwaGFdID0gY29tcG9uZW50
cygpOwotICAgIHJldHVybiBFeHRlbmRlZENvbG9yOjpjcmVhdGUoMS4wZiAtIGMxLCAxLjBmIC0g
YzIsIDEuMGYgLSBjMywgb3ZlcnJpZGVBbHBoYSwgY29sb3JTcGFjZSgpKTsKLX0KLQotU1JHQkE8
ZmxvYXQ+IEV4dGVuZGVkQ29sb3I6OnRvU1JHQkFGbG9hdENvbXBvbmVudHNMb3NzeSgpIGNvbnN0
Ci17Ci0gICAgc3dpdGNoIChtX2NvbG9yU3BhY2UpIHsKLSAgICBjYXNlIENvbG9yU3BhY2U6OlNS
R0I6Ci0gICAgICAgIHJldHVybiBhc1NSR0JBKG1fY29tcG9uZW50cyk7Ci0gICAgY2FzZSBDb2xv
clNwYWNlOjpMaW5lYXJSR0I6Ci0gICAgICAgIHJldHVybiB0b1NSR0JBKGFzTGluZWFyU1JHQkEo
bV9jb21wb25lbnRzKSk7Ci0gICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6Ci0gICAgICAg
IHJldHVybiB0b1NSR0JBKGFzRGlzcGxheVAzKG1fY29tcG9uZW50cykpOwotICAgIH0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyAwLCAwLCAwLCAwIH07Ci19Ci0KLWJv
b2wgRXh0ZW5kZWRDb2xvcjo6aXNXaGl0ZSgpIGNvbnN0Ci17Ci0gICAgYXV0byBbYzEsIGMyLCBj
MywgYWxwaGFdID0gY29tcG9uZW50cygpOwotICAgIHJldHVybiBjMSA9PSAxICYmIGMyID09IDEg
JiYgYzMgPT0gMSAmJiBhbHBoYSA9PSAxOwotfQotCi1ib29sIEV4dGVuZGVkQ29sb3I6OmlzQmxh
Y2soKSBjb25zdAotewotICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbXBvbmVudHMo
KTsKLSAgICByZXR1cm4gIWMxICYmICFjMiAmJiAhYzMgJiYgYWxwaGEgPT0gMTsKLX0KLQotQ29s
b3IgbWFrZUV4dGVuZGVkQ29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjMywgZmxvYXQg
YWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKLXsKLSAgICByZXR1cm4gRXh0ZW5kZWRDb2xv
cjo6Y3JlYXRlKGMxLCBjMiwgYzMsIGFscGhhLCBjb2xvclNwYWNlKTsKLX0KLQotfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAko
cmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0
ZW5kZWRDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw1MSArMjYsMjggQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiQ29sb3JDb252
ZXJzaW9uLmgiCiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIkNvbG9yVHlwZXMu
aCIKLSNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IENvbG9yOwotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBTUkdCQTsKLQogY2xhc3MgRXh0ZW5k
ZWRDb2xvciA6IHB1YmxpYyBSZWZDb3VudGVkPEV4dGVuZGVkQ29sb3I+IHsKIHB1YmxpYzoKLSAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEV4dGVuZGVkQ29sb3I+IGNyZWF0ZShmbG9hdCBj
MSwgZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSk7Ci0KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBSZWY8RXh0ZW5kZWRDb2xvcj4gY3Jl
YXRlKGNvbnN0IENvbG9yVHlwZSYpOworICAgIHN0YXRpYyBSZWY8RXh0ZW5kZWRDb2xvcj4gY3Jl
YXRlKENvbG9yQ29tcG9uZW50czxmbG9hdD4sIENvbG9yU3BhY2UpOworICAgIAogICAgIGZsb2F0
IGFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25lbnRzWzNdOyB9CiAKICAgICBjb25zdCBD
b2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjb21wb25lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb21w
b25lbnRzOyB9CiAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xvclNwYWNlOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7
Ci0KLSAgICBSZWY8RXh0ZW5kZWRDb2xvcj4gY29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0Owot
ICAgIFJlZjxFeHRlbmRlZENvbG9yPiBpbnZlcnRlZENvbG9yV2l0aEFscGhhKGZsb2F0KSBjb25z
dDsKLQotICAgIGJvb2wgaXNXaGl0ZSgpIGNvbnN0OwotICAgIGJvb2wgaXNCbGFjaygpIGNvbnN0
OwotCi0gICAgLy8gVGhpcyB3aWxsIGNvbnZlcnQgbm9uLXNSR0IgY29sb3JzcGFjZSBjb2xvcnMg
aW50byBzUkdCLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBTUkdCQTxUPiB0
b1NSR0JBTG9zc3koKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X3NhbWVfdjxULCBmbG9hdD4pCi0gICAgICAgICAgICByZXR1cm4gdG9TUkdCQUZsb2F0Q29tcG9u
ZW50c0xvc3N5KCk7Ci0gICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxU
LCB1aW50OF90PikKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0
b1NSR0JBRmxvYXRDb21wb25lbnRzTG9zc3koKSk7Ci0gICAgfQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+IGRlY2x0eXBlKGF1dG8pIGNhbGxPblVuZGVybHlpbmdUeXBlKEZ1bmN0b3Im
JikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgRXh0ZW5kZWRDb2xvcihmbG9hdCBjMSwgZmxvYXQg
YzIsIGZsb2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotICAgICAg
ICA6IG1fY29tcG9uZW50cyhjMSwgYzIsIGMzLCBhbHBoYSkKLSAgICAgICAgLCBtX2NvbG9yU3Bh
Y2UoY29sb3JTcGFjZSkKLSAgICB7Ci0gICAgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgU1JHQkE8
ZmxvYXQ+IHRvU1JHQkFGbG9hdENvbXBvbmVudHNMb3NzeSgpIGNvbnN0OworICAgIEV4dGVuZGVk
Q29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiwgQ29sb3JTcGFjZSk7CiAKICAgICBDb2xvckNv
bXBvbmVudHM8ZmxvYXQ+IG1fY29tcG9uZW50czsKICAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFj
ZTsKQEAgLTg2LDggKzYzLDM1IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRXh0ZW5k
ZWRDb2wKICAgICByZXR1cm4gIShhID09IGIpOwogfQogCi0vLyBGSVhNRTogSWYgdGhlIENvbG9y
U3BhY2UgaXMgc1JHQiBhbmQgdGhlIHZhbHVlcyBjYW4gYWxsIGJlCi0vLyBjb252ZXJ0ZWQgZXhh
Y3RseSB0byBpbnRlZ2Vycywgd2Ugc2hvdWxkIG1ha2UgYSBTaW1wbGVDb2xvci4KLVdFQkNPUkVf
RVhQT1JUIENvbG9yIG1ha2VFeHRlbmRlZENvbG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQg
YzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZT4gaW5saW5lIFJlZjxFeHRlbmRlZENvbG9yPiBFeHRlbmRlZENvbG9yOjpjcmVhdGUoY29uc3Qg
Q29sb3JUeXBlJiBjb2xvcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFeHRlbmRlZENv
bG9yKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSwgY29sb3IuY29sb3JTcGFjZSkpOworfQorCitp
bmxpbmUgUmVmPEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShDb2xvckNvbXBv
bmVudHM8ZmxvYXQ+IGNvbXBvbmVudHMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBFeHRlbmRlZENvbG9yKGNvbXBvbmVudHMsIGNvbG9yU3BhY2Up
KTsKK30KKworaW5saW5lIEV4dGVuZGVkQ29sb3I6OkV4dGVuZGVkQ29sb3IoQ29sb3JDb21wb25l
bnRzPGZsb2F0PiBjb21wb25lbnRzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgOiBtX2Nv
bXBvbmVudHMoY29tcG9uZW50cykKKyAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQorewor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBkZWNsdHlwZShhdXRvKSBFeHRlbmRlZENv
bG9yOjpjYWxsT25VbmRlcmx5aW5nVHlwZShGdW5jdG9yJiYgZnVuY3RvcikgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKG1fY29sb3JTcGFjZSkgeworICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoKKyAg
ICAgICAgcmV0dXJuIGZ1bmN0b3IoYXNTUkdCQShtX2NvbXBvbmVudHMpKTsKKyAgICBjYXNlIENv
bG9yU3BhY2U6OkxpbmVhclJHQjoKKyAgICAgICAgcmV0dXJuIGZ1bmN0b3IoYXNMaW5lYXJTUkdC
QShtX2NvbXBvbmVudHMpKTsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoKKyAgICAg
ICAgcmV0dXJuIGZ1bmN0b3IoYXNEaXNwbGF5UDMobV9jb21wb25lbnRzKSk7CisgICAgfQorCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZ1bmN0b3IoYXNTUkdCQShtX2Nv
bXBvbmVudHMpKTsKK30KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDI2NDIzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Mzk4LDcgKzMzOTgsNyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6c2hvdWxkRHVtcFByb3Bl
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgLy8gQmFja2dyb3VuZCBjb2xv
ciBjb3VsZCBiZSBvZiBpbnRlcmVzdCB0byB0ZXN0cyBvciBvdGhlciBkdW1wZXJzIGlmIGl0J3Mg
bm9uLXdoaXRlLgotICAgICAgICBpZiAoIXN0cmNtcChwcm9wZXJ0eU5hbWUsICJiYWNrZ3JvdW5k
Q29sb3IiKSAmJiBDb2xvcjo6aXNXaGl0ZUNvbG9yKGxheWVyLT5iYWNrZ3JvdW5kQ29sb3IoKSkp
CisgICAgICAgIGlmICghc3RyY21wKHByb3BlcnR5TmFtZSwgImJhY2tncm91bmRDb2xvciIpICYm
IENvbG9yOjppc1doaXRlKGxheWVyLT5iYWNrZ3JvdW5kQ29sb3IoKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAgICAgLy8gVGhlIHJvb3QgdGlsZSBjYWNoZSdzIHJlcGFpbnRz
IHdpbGwgc2hvdyB1cCBhdCB0aGUgdG9wIHdpdGggRnJhbWVWaWV3J3MsCkluZGV4OiBUb29scy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjQyNDIp
CisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAy
MC0wNy0xMCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVkdWNl
IHN1cmZhY2UgYXJlYSBvZiB0aGUgRXh0ZW5kZWRDb2xvciBjbGFzcyB0byBhIGJhcmUgbWluaW11
bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0MjA0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRklYTUU6
IERPIE5PVCBMQU5EIFVOVElMIEFERElORyBORVcgVEVTVFMgRk9SIE5FVyBCRUhBVklPUiBPRiBT
VE9SSU5HIFJFUFJFU0VOVEFCTEUgU1JHQkE8ZmxvYXQ+IElOTElORS4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjptYWtlQ29s
b3IpOgorICAgICAgICBVcGRhdGUgdXNpbmcgbmV3IENvbG9yIGNvbnN0cnVjdG9yIGZvciBleHRl
bmRlZCBjb2xvcnMuCisgICAgICAgIAorCiAyMDIwLTA3LTEwICBHZW9mZnJleSBHYXJlbiAgPGdn
YXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHNvbWUgdGVzdGluZyBmb3IgSlNSdW5Mb29w
VGltZXIKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENv
bG9yVGVzdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNjQyMzApCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIFRF
U1QoRXh0ZW5kZWRDb2xvciwgQ29uc3RydWN0b3IpCiB7Ci0gICAgQ29sb3IgYzEgeyBtYWtlRXh0
ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07
CisgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9
IH07CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIGF1dG8gW3IsIGcs
IGIsIGFscGhhXSA9IGMxLmFzRXh0ZW5kZWQoKS5jb21wb25lbnRzKCk7CkBAIC01Miw3ICs1Miw3
IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29uc3RydWN0b3IpCiAKIFRFU1QoRXh0ZW5kZWRDb2xv
ciwgQ29weUNvbnN0cnVjdG9yKQogewotICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3Io
MS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgIENvbG9y
IGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgIEVY
UEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xvciBjMihjMSk7CkBAIC03MCw3
ICs3MCw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29weUNvbnN0cnVjdG9yKQogCiBURVNUKEV4
dGVuZGVkQ29sb3IsIEFzc2lnbm1lbnQpCiB7Ci0gICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRD
b2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAg
Q29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAg
ICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIGMyID0gYzE7CkBA
IC04OSwyMCArODksMjAgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBBc3NpZ25tZW50KQogVEVTVChF
eHRlbmRlZENvbG9yLCBFcXVhbGl0eSkKIHsKICAgICB7Ci0gICAgICAgIENvbG9yIGMxIHsgbWFr
ZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAz
KSB9OworICAgICAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4y
NSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAotICAg
ICAgICBDb2xvciBjMiB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENv
bG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICAgICAgQ29sb3IgYzIgeyBEaXNwbGF5UDM8Zmxv
YXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgICAgIEVYUEVDVF9UUlVFKGMxLmlz
RXh0ZW5kZWQoKSk7CiAKICAgICAgICAgRVhQRUNUX0VRKGMxLCBjMik7CiAgICAgfQogCiAgICAg
ewotICAgICAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAx
LjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICAgICAgQ29sb3IgYzEgeyBEaXNwbGF5
UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgICAgIEVYUEVDVF9UUlVF
KGMxLmlzRXh0ZW5kZWQoKSk7CiAKLSAgICAgICAgQ29sb3IgYzIgeyBtYWtlRXh0ZW5kZWRDb2xv
cigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpTUkdCKSB9OworICAgICAgICBDb2xv
ciBjMiB7IFNSR0JBPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgICAgICBF
WFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgICAgIEVYUEVDVF9ORShjMSwgYzIp
OwpAQCAtMTEyLDcgKzExMiw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgRXF1YWxpdHkpCiAgICAg
aW50IGcgPSAxMjg7CiAgICAgaW50IGIgPSA2MzsKICAgICBpbnQgYSA9IDEyNzsKLSAgICBDb2xv
ciByZ2IxIHsgbWFrZUV4dGVuZGVkQ29sb3IociAvIDI1NS4wLCBnIC8gMjU1LjAsIGIgLyAyNTUu
MCwgYSAvIDI1NS4wLCBDb2xvclNwYWNlOjpTUkdCKSB9OworICAgIENvbG9yIHJnYjEgeyBTUkdC
QTxmbG9hdD4geyByIC8gMjU1LjBmLCBnIC8gMjU1LjBmLCBiIC8gMjU1LjBmLCBhIC8gMjU1LjBm
IH0gfTsKICAgICBDb2xvciByZ2IyID0gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIGEpOwogICAg
IEVYUEVDVF9ORShyZ2IxLCByZ2IyKTsKICAgICBFWFBFQ1RfTkUocmdiMiwgcmdiMSk7CkBAIC0x
MjEsMjAgKzEyMSwyMCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEVxdWFsaXR5KQogVEVTVChFeHRl
bmRlZENvbG9yLCBIYXNoKQogewogICAgIHsKLSAgICAgICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5k
ZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07Cisg
ICAgICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAg
fSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCi0gICAgICAgIENv
bG9yIGMyIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFj
ZTo6RGlzcGxheVAzKSB9OworICAgICAgICBDb2xvciBjMiB7IERpc3BsYXlQMzxmbG9hdD4geyAx
LjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRl
ZCgpKTsKIAogICAgICAgICBFWFBFQ1RfRVEoYzEuaGFzaCgpLCBjMi5oYXNoKCkpOwogICAgIH0K
IAogICAgIHsKLSAgICAgICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwg
MC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgICAgIENvbG9yIGMxIHsg
RGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgICAgICBFWFBF
Q1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCi0gICAgICAgIENvbG9yIGMyIHsgbWFrZUV4dGVu
ZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6U1JHQikgfTsKKyAgICAg
ICAgQ29sb3IgYzIgeyBTUkdCQTxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAg
ICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgICAgICBFWFBFQ1RfTkUo
YzEuaGFzaCgpLCBjMi5oYXNoKCkpOwpAQCAtMTQ0LDE0ICsxNDQsMTQgQEAgVEVTVChFeHRlbmRl
ZENvbG9yLCBIYXNoKQogICAgIGludCBnID0gMTI4OwogICAgIGludCBiID0gNjM7CiAgICAgaW50
IGEgPSAxMjc7Ci0gICAgQ29sb3IgcmdiMSB7IG1ha2VFeHRlbmRlZENvbG9yKHIgLyAyNTUuMCwg
ZyAvIDI1NS4wLCBiIC8gMjU1LjAsIGEgLyAyNTUuMCwgQ29sb3JTcGFjZTo6U1JHQikgfTsKKyAg
ICBDb2xvciByZ2IxIHsgU1JHQkE8ZmxvYXQ+IHsgciAvIDI1NS4wZiwgZyAvIDI1NS4wZiwgYiAv
IDI1NS4wZiwgYSAvIDI1NS4wZiB9IH07CiAgICAgQ29sb3IgcmdiMiA9IG1ha2VTaW1wbGVDb2xv
cihyLCBnLCBiLCBhKTsKICAgICBFWFBFQ1RfTkUocmdiMS5oYXNoKCksIHJnYjIuaGFzaCgpKTsK
IH0KIAogVEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQ29uc3RydWN0b3IpCiB7Ci0gICAgQ29sb3Ig
YzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpE
aXNwbGF5UDMpIH07CisgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUs
IDAuMjUsIDEuMCB9IH07CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAg
IENvbG9yIGMyKFdURk1vdmUoYzEpKTsKQEAgLTE3Miw3ICsxNzIsNyBAQCBURVNUKEV4dGVuZGVk
Q29sb3IsIE1vdmVDb25zdHJ1Y3RvcikKIAogVEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQXNzaWdu
bWVudCkKIHsKLSAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1
LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICBDb2xvciBjMSB7IERpc3BsYXlQ
MzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICBFWFBFQ1RfVFJVRShjMS5p
c0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IgYzIgPSBXVEZNb3ZlKGMxKTsKQEAgLTE5NCw3ICsx
OTQsOCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVBc3NpZ25tZW50KQogCiBURVNUKEV4dGVu
ZGVkQ29sb3IsIEJhc2ljUmVmZXJlbmNlQ291bnRpbmcpCiB7Ci0gICAgQ29sb3IqIGMxID0gbmV3
IENvbG9yIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFj
ZTo6RGlzcGxheVAzKSB9OworICAgIENvbG9yKiBjMSA9IG5ldyBDb2xvciB7IERpc3BsYXlQMzxm
bG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKKyAgICAKICAgICBFWFBFQ1RfVFJVRShj
MS0+aXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yKiBjMiA9IG5ldyBDb2xvcigqYzEpOwpAQCAt
MjIwLDcgKzIyMSw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQmFzaWNSZWZlcmVuY2VDb3VudGkK
IAogQ29sb3IgbWFrZUNvbG9yKCkKIHsKLSAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9y
KDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICBDb2xv
ciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICBF
WFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogICAgIEVYUEVDVF9FUSgxdSwgYzEuYXNFeHRl
bmRlZCgpLnJlZkNvdW50KCkpOwogCkBAIC0yMzgsNyArMjM5LDcgQEAgVEVTVChFeHRlbmRlZENv
bG9yLCBSZXR1cm5WYWx1ZXMpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgUDNDb252ZXJzaW9uVG9T
UkdCKQogewotICAgIENvbG9yIHAzQ29sb3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwg
MC4yNSwgMC43NSwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgIENvbG9yIHAzQ29sb3Ig
eyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDAuNzUgfSB9OwogICAgIEVYUEVD
VF9UUlVFKHAzQ29sb3IuaXNFeHRlbmRlZCgpKTsKIAogICAgIGF1dG8gc1JHQkFDb2xvciA9IHAz
Q29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwpAQCAtMjUwLDkgKzI1MSwxMCBAQCBURVNUKEV4
dGVuZGVkQ29sb3IsIFAzQ29udmVyc2lvblRvU1JHQikKIAogVEVTVChFeHRlbmRlZENvbG9yLCBM
aW5lYXJTUkdCQ29udmVyc2lvblRvU1JHQikKIHsKLSAgICBDb2xvciBsaW5lYXJDb2xvciB7IG1h
a2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAwLjc1LCBDb2xvclNwYWNlOjpMaW5lYXJS
R0IpIH07Ci0gICAgRVhQRUNUX1RSVUUobGluZWFyQ29sb3IuaXNFeHRlbmRlZCgpKTsKLSAgICBh
dXRvIHNSR0JBQ29sb3IgPSBsaW5lYXJDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAg
Q29sb3IgbGluZWFyU1JHQkFDb2xvciB7IExpbmVhclNSR0JBPGZsb2F0PiB7IDEuMCwgMC41LCAw
LjI1LCAwLjc1IH0gfTsKKyAgICBFWFBFQ1RfVFJVRShsaW5lYXJTUkdCQUNvbG9yLmlzRXh0ZW5k
ZWQoKSk7CisKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBsaW5lYXJTUkdCQUNvbG9yLnRvU1JHQkFM
b3NzeTxmbG9hdD4oKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwo
c1JHQkFDb2xvci5yZWQsIDEuMGYpKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlh
bGx5RXF1YWwoc1JHQkFDb2xvci5ncmVlbiwgMC43MzUzNTY5MjdmKSk7CiAgICAgRVhQRUNUX1RS
VUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IuYmx1ZSwgMC41MzcwOTg3MDZm
KSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404035</attachid>
            <date>2020-07-10 18:54:18 -0700</date>
            <delta_ts>2020-07-10 20:19:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214204-20200710185411.patch</filename>
            <type>text/plain</type>
            <size>53768</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NDI1MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDIwLTA3LTEwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZWR1Y2Ugc3VyZmFjZSBhcmVhIG9m
IHRoZSBFeHRlbmRlZENvbG9yIGNsYXNzIHRvIGEgYmFyZSBtaW5pbXVtCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQyMDQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkZCBoZWxwZXIgZnVuY3Rpb24g
dG8gQ29sb3IgdG8gb3BlcmF0ZSBvbiB0aGUgdW5kZXJseWluZyBjb2xvciB0eXBlCisgICAgICAg
ICAgYW5kIHJlaW1wbGVtZW50IGEgYnVuY2ggb2YgZnVuY3Rpb25hbGl0eSB1c2luZyBpdCwgcmVk
dWNpbmcgdGhlIG5lZWQKKyAgICAgICAgICBmb3IgZHVwbGljYXRlIGltcGxlbWVudGF0aW9ucyBp
biBFeHRlbmRlZENvbG9yLgorICAgICAgICAtIEFkZCBjb25zdHJ1Y3RvcnMgdG8gQ29sb3IgdGhh
dCB0YWtlIGV4dGVuZGVkIGNvbG9yIHR5cGVzLgorICAgICAgICAgICAgLSBXaGVuIGNvbnN0cnVj
dGluZyBhIENvbG9yIGZyb20gYSBTUkdCQTxmbG9hdD4sIGNoZWNrIHRvIHNlZSBpZiB0aGUKKyAg
ICAgICAgICAgICAgY29sb3IgY2FuIGJlIHJlcHJlc2VudGVkIGxvc3NsZXNzbHkgYnkgYSBTUkdC
QTx1aW50OF90PiBhbmQgaWYgY2FuLAorICAgICAgICAgICAgICBzdG9yZSBpdCBpbmxpbmUuCisK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgIFJlbW92ZSBFeHRlbmVkQ29sb3IuY3BwCisKKyAgICAgICAg
KiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRl
cnMpOgorICAgICAgICBVc2UgbmV3IENvbG9yIGNvbnN0cnVjdG9yIHRha2luZyBDb2xvckNvbXBv
bmVudHMgYW5kIENvbG9yU3BhY2UuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvbXBvc2l0ZU9wZXJhdG9yRm9yQmFja2dyb3VuZENv
bG9yIGNvbnN0KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFydCBjb25zdCk6CisgICAg
ICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tOgorICAgICAgICAobm9ybWFsaXpl
ZENvbG9yKToKKyAgICAgICAgVXBkYXRlIGZvciByZW5hbWUgZnJvbSBDb2xvcjo6aXNCbGFja0Nv
bG9yL0NvbG9yOjppc1doaXRlQ29sb3IgdG8gQ29sb3I6OmlzQmxhY2svQ29sb3I6OmlzV2hpdGUu
CisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6aGFzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y2FsbE9u
VW5kZXJseWluZ1R5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFM
b3NzeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2V0Q29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6OmlzQmxhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omlz
V2hpdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6c2V0SW5saW5lQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmlzQmxhY2tDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
aXNXaGl0ZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ckNvbnZlcnNpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvU1JHQkEpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9MaW5lYXJTUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjp0b0Rpc3BsYXlQMyk6Cisg
ICAgICAgIChXZWJDb3JlOjp0b0xpbmVhckRpc3BsYXlQMyk6CisgICAgICAgIChXZWJDb3JlOjp0
b0hTTEEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OnNlcmlhbGl6YXRpb25Gb3JDU1MpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXphdGlvbkZv
ckhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1Rl
eHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6aXNCbGFj
ayk6CisgICAgICAgIChXZWJDb3JlOjppc1doaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9FeHRlbmRlZENvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6RXh0ZW5kZWRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjpjYWxsT25VbmRlcmx5aW5nVHlwZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjp0b1NSR0JBTG9zc3kgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzaG91bGREdW1wUHJvcGVy
dHlGb3JMYXllciBjb25zdCk6CisKIDIwMjAtMDctMTAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCBidWlsZCBmb3IgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYg
IUVOQUJMRShSRVZFQUwpLCBmb3IgZXhhbXBsZSwgdHZPUwpJbmRleDogU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJl
dmlzaW9uIDI2NDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xODI3LDcgKzE4MjcsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9DdXN0b21QYWludElt
YWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5jcHAKLXBsYXRmb3JtL2dyYXBo
aWNzL0V4dGVuZGVkQ29sb3IuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2x5Z29uLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03MjI4
LDcgKzcyMjgsNiBAQAogCQkzMUQyNkJDNTFGODZEMjY4MDA4RkYyNTUgLyogSlNJbWFnZUJpdG1h
cE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbWFnZUJpdG1h
cE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFEMjZCQzYxRjg2RDI2
OTAwOEZGMjU1IC8qIEpTSW1hZ2VCaXRtYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNJbWFnZUJpdG1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTMxRDU5MUIxMTY2OTdBNkMwMEU2QkYwMiAvKiBQbHVnSW5DbGllbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z0luQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTMxRENERjQxMURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuZGVkQ29sb3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMURDREY0MjFEQTFDNDU0MDBFQTVCOTMg
LyogRXh0ZW5kZWRDb2xvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRl
bmRlZENvbG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxREVBNDUzMUIzOUY0
RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU3lzdGVtQmFja2Ryb3BMYXllci5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFERUE0NTQxQjM5RjREOTAwRjc3MTc4IC8qIFdlYlN5
c3RlbUJhY2tkcm9wTGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
U3lzdGVtQmFja2Ryb3BMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk1
ODIsOCArMTk1ODEsOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNTE1QkUxOTcxRDU0RjZCRDAw
REQ3QzY4IC8qIEhJREdhbWVwYWQuY3BwICovLAogCQkJCTUxNUJFMTk4MUQ1NEY2QkQwMEREN0M2
OCAvKiBISURHYW1lcGFkLmggKi8sCi0JCQkJNTE1QkUxOTkxRDU0RjZCRDAwREQ3QzY4IC8qIEhJ
REdhbWVwYWRQcm92aWRlci5tbSAqLywKIAkJCQk1MTVCRTE5QTFENTRGNkJEMDBERDdDNjggLyog
SElER2FtZXBhZFByb3ZpZGVyLmggKi8sCisJCQkJNTE1QkUxOTkxRDU0RjZCRDAwREQ3QzY4IC8q
IEhJREdhbWVwYWRQcm92aWRlci5tbSAqLywKIAkJCQk1MTdFMDNGNDI0QjZCOTYzMDA1NDg5NUEg
LyogTXVsdGlHYW1lcGFkUHJvdmlkZXIuaCAqLywKIAkJCQk1MTdFMDNGNTI0QjZCOTY0MDA1NDg5
NUEgLyogTXVsdGlHYW1lcGFkUHJvdmlkZXIubW0gKi8sCiAJCQkpOwpAQCAtMjU1NTYsNyArMjU1
NTUsNiBAQAogCQkJCTJEMjlFQ0MyMTkyRUNDODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVzaE1v
bml0b3JDbGllbnQuaCAqLywKIAkJCQkyRDI5RUNDMzE5MkVDQzgzMDA5ODRCNzggLyogRGlzcGxh
eVJlZnJlc2hNb25pdG9yTWFuYWdlci5jcHAgKi8sCiAJCQkJMkQyOUVDQzQxOTJFQ0M4MzAwOTg0
Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuaCAqLywKLQkJCQkzMURDREY0MTFE
QTFDNDU0MDBFQTVCOTMgLyogRXh0ZW5kZWRDb2xvci5jcHAgKi8sCiAJCQkJMzFEQ0RGNDIxREEx
QzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuaCAqLywKIAkJCQk2RTY3RDJBODEyODBFOEJE
MDA4NzU4RjcgLyogRXh0ZW5zaW9uc0dMLmggKi8sCiAJCQkJQjI3NTM1M0EwQjA1MzgxNDAwMkNF
NjRGIC8qIEZsb2F0UG9pbnQuY3BwICovLApAQCAtMjY4ODAsNyArMjY4NzgsNiBAQAogCQlDRDk0
QTVDQjFGNzFDQjQ2MDBGNTI1QzUgLyogZW5jcnlwdGVkbWVkaWEgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUNERTNBRTEzMjRCNDkzNkYwMDEyOEU3RSAv
KiBDRE1VdGlsaXRpZXMuY3BwICovLAogCQkJCUNEOTRBNUQ5MUY3MUNCOUYwMEY1MjVDNSAvKiBj
bGVhcmtleSAqLywKIAkJCQlDREY3NTY5QjIxNUMyM0E0MDBFRkNCNTAgLyogQ0RNRW5jcnlwdGlv
blNjaGVtZS5oICovLAogCQkJCUNEOTRBNUQxMUY3MUNCNkIwMEY1MjVDNSAvKiBDRE1GYWN0b3J5
LmNwcCAqLywKQEAgLTI2ODk1LDEyICsyNjg5MiwxMyBAQAogCQkJCUNEOTRBNUQ2MUY3MUNCNkQw
MEY1MjVDNSAvKiBDRE1NZXNzYWdlVHlwZS5oICovLAogCQkJCUNEM0NFMTFDMjQwNDUxQUYwMDRC
QTAxRCAvKiBDRE1Qcml2YXRlLmNwcCAqLywKIAkJCQlDRDk0QTVDRjFGNzFDQjZBMDBGNTI1QzUg
LyogQ0RNUHJpdmF0ZS5oICovLAotCQkJCUNERTNBRTEwMjRCNDkxNjkwMDEyOEU3RSAvKiBDRE1V
dGlsaXRpZXMuaCAqLywKIAkJCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1RDUgLyogQ0RNUHJveHku
Y3BwICovLAogCQkJCUNEOTRBNUNGMUY3MUNCNjEwMEY1MjVDNSAvKiBDRE1Qcm94eS5oICovLAog
CQkJCUNEOTRBNUNDMUY3MUNCNjkwMEY1MjVDNSAvKiBDRE1SZXF1aXJlbWVudC5oICovLAogCQkJ
CUNEOTRBNUQwMUY3MUNCNkIwMEY1MjVDNSAvKiBDRE1SZXN0cmljdGlvbnMuaCAqLywKIAkJCQlD
RDk0QTVENTFGNzFDQjZEMDBGNTI1QzUgLyogQ0RNU2Vzc2lvblR5cGUuaCAqLywKKwkJCQlDREUz
QUUxMzI0QjQ5MzZGMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmNwcCAqLywKKwkJCQlDREUzQUUx
MDI0QjQ5MTY5MDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9
IGVuY3J5cHRlZG1lZGlhOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTMwMDgyLDYg
KzMwMDgwLDcgQEAKIAkJCQlDRDNDRTEwMzI0MDFBQURBMDA0QkEwMUQgLyogQ0RNUmVzdHJpY3Rp
b25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREU1OTU5NzFCRjI2RTIxMDBBMUNCRTggLyogQ0RN
U2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0QzQ0UxMDQy
NDAxQUFEQTAwNEJBMDFEIC8qIENETVNlc3Npb25UeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlD
REUzQUUxMjI0QjQ5MTZBMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1RkE5MDRDQTE3OEU2MUY1MDA0QzhBMkQgLyogQ2VydGlmaWNhdGVJbmZvLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MUI4RjBCNTIxOTUzRDY1MDAwQzJCMDAgLyogQ2VydGlmaWNhdGVJbmZv
QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzNkZEMTUxNkM3ODI2NTAwRjg4N0MxIC8qIENo
YW5nZVZlcnNpb25EYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMjE5LDcgKzMxMjE4LDYgQEAK
IAkJCQlGMzQ0Qzc1MzExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0EwRTc3MEYxMEMwMEE4ODAwQTAyNzZFIC8qIElu
c3BlY3RvckZyb250ZW5kSG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0E1NDg1ODAxNEUwMkQ1
MTAwNkFFMDVBIC8qIEluc3BlY3Rvckhpc3RvcnkuaCBpbiBIZWFkZXJzICovLAotCQkJCUNERTNB
RTEyMjRCNDkxNkEwMDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1QjgxQ0FFMUZBQTQ0NjIwMDM3RDFFNiAvKiBJbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMjBENjI5MjcxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NjBFNkQyMzBERTMwMzAwNDYx
QUFFIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvblB1YmxpYy5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zMjQwMiw2ICszMjQwMCw3IEBACiAJCQkJODUwMzFCNDgwQTQ0RUZDNzAwRjk5MkUwIC8qIE1v
dXNlUmVsYXRlZEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOURGQzA5OUU2NDkyMDA1
NkU1ODEgLyogTW92ZVNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQjE3
MDA2MTRBMkJBQjIwMEEyQjVEOSAvKiBNdWx0aUNoYW5uZWxSZXNhbXBsZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUxN0UwM0Y3MjRCNkQ5ODQwMDU0ODk1QSAvKiBNdWx0aUdhbWVwYWRQcm92aWRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2QjAxQjNCNjVBQzAwMDVERDc5IC8qIE11dGFi
bGVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2QjExQjNCNjVBQzAwMDVERDc5IC8q
IE11dGFibGVSYW5nZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM2RjA5MDBBMTQzMjdCNjEw
MDY4NTg0OSAvKiBNdXRhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTMzMjgxLDcg
KzMzMjgwLDYgQEAKIAkJCQlFQ0E2ODBDNzFFNjc3MjQ1MDA3MzFEMjAgLyogU3RyaW5nVXRpbGl0
aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5QjZDNDE1MzEzNDQ5NDkwMDAwODVCNjIgLyogU3Ry
aW5nV2l0aERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ5Rjc3NzYwRUZFQzYyMDAw
OTA4NDlEIC8qIFN0cm9rZVN0eWxlQXBwbGllci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE3RTAz
RjcyNEI2RDk4NDAwNTQ4OTVBIC8qIE11bHRpR2FtZXBhZFByb3ZpZGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0MTRCODIwNTFENkRGMEU1MDA3N0VCRTMgLyogU3RydWN0dXJlZENsb25lLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFNDVCQTZCNjIzNzYyMkEzMDA0REZDMDcgLyogU3R5bGVBZGp1c3Rl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI2QTMwRTgxREM0RjAwQjI1OTY1IC8qIFN0eWxl
QmFja2dyb3VuZERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ0NzMsNiArMzQ0NzEsNyBAQAog
CQkJCUNEREUwMkVEMThCM0VENkQwMENGN0ZGMSAvKiBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uT2Jq
Qy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEREUwMkYwMThCNTY1MTMwMENGN0ZGMSAvKiBDRE1T
ZXNzaW9uQVZTdHJlYW1TZXNzaW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RFNTk1OUQxQkYy
NzU3MTAwQTFDQkU4IC8qIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMubW0gaW4gU291cmNl
cyAqLywKKwkJCQlDREUzQUUxNDI0QjQ5MzcwMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUExNDA5MEZCMUFBNTFFMUQwMDkxMTkxQSAvKiBDb250ZW50Rmls
dGVyVW5ibG9ja0hhbmRsZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3QUZGNDIzMUVG
QjE0NDkwMEI1NDVCMyAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNDZDNjk2Q0MxRTcyMDVGQzAwNTk3OTM3IC8qIENQVU1vbml0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0zNDgwMiw3ICszNDgwMSw2IEBACiAJCQkJREVDQTdEQjcxRjlFNjdCNjAw
RTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNjcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREVDQTdE
QjgxRjlFNjdCNjAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNjguY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJREVDQTdEQjkxRjlFNjdCNjAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNjkuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQ0RFM0FFMTQyNEI0OTM3MDAwMTI4RTdFIC8qIENETVV0aWxpdGll
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBN0RCQTFGOUU2N0I2MDBFM0I2NjEgLyogVW5p
ZmllZFNvdXJjZTE3MC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBN0RGQjFGOUVCMzY0MDBF
M0I2NjEgLyogVW5pZmllZFNvdXJjZTE3MS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBN0RG
QzFGOUVCMzY0MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTE3Mi5jcHAgaW4gU291cmNlcyAqLywK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5
UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI2NDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjU4LDcgKzY1OCw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXIK
ICAgICAgICAgY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkRpc3BsYXlQMzsKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogICAgIGNvbnN1bWVJZGVudChhcmdzKTsKIApAQCAtNjc2LDcgKzY3Niw3
IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXIKICAgICAgICAgaWYg
KCFhbHBoYVBhcmFtZXRlcikKICAgICAgICAgICAgIGFscGhhUGFyYW1ldGVyID0gY29uc3VtZU51
bWJlcihhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKICAgICAgICAgaWYgKCFhbHBoYVBhcmFtZXRlcikK
LSAgICAgICAgICAgIHJldHVybiBDb2xvcigpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAog
ICAgICAgICBjb2xvckNoYW5uZWxzWzNdID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigxLjAsIGFs
cGhhUGFyYW1ldGVyLT5pc1BlcmNlbnRhZ2UoKSA/IChhbHBoYVBhcmFtZXRlci0+ZG91YmxlVmFs
dWUoKSAvIDEwMCkgOiBhbHBoYVBhcmFtZXRlci0+ZG91YmxlVmFsdWUoKSkpOwogICAgIH0KQEAg
LTY4NCw5ICs2ODQsOSBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uUGFyYW1ldGVy
CiAgICAgLy8gRklYTUU6IFN1cHBvcnQgdGhlIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZhbGxi
YWNrIGNvbG9yIHZhbHVlcy4KIAogICAgIGlmICghYXJncy5hdEVuZCgpKQotICAgICAgICByZXR1
cm4gQ29sb3IoKTsKLSAgICAKLSAgICByZXR1cm4gbWFrZUV4dGVuZGVkQ29sb3IoY29sb3JDaGFu
bmVsc1swXSwgY29sb3JDaGFubmVsc1sxXSwgY29sb3JDaGFubmVsc1syXSwgY29sb3JDaGFubmVs
c1szXSwgY29sb3JTcGFjZSk7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gQ29s
b3IgeyBDb2xvckNvbXBvbmVudHMgeyBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JDaGFubmVsc1sw
XSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckNoYW5uZWxzWzFdKSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGNvbG9yQ2hhbm5lbHNbMl0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JDaGFubmVsc1sz
XSkgfSwgY29sb3JTcGFjZSB9OwogfQogCiBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+
IHBhcnNlSGV4Q29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGJvb2wgYWNjZXB0UXVp
cmt5Q29sb3JzKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyNjQyMzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MjIxLDcgKzcyMjEsNyBAQCBPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4gRG9jdW1lbnQ6
CiAKIENvbXBvc2l0ZU9wZXJhdG9yIERvY3VtZW50Ojpjb21wb3NpdGVPcGVyYXRvckZvckJhY2tn
cm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVy
ZXIpIGNvbnN0CiB7Ci0gICAgaWYgKExJS0VMWSghc2V0dGluZ3MoKS5wdW5jaE91dFdoaXRlQmFj
a2dyb3VuZHNJbkRhcmtNb2RlKCkgfHwgIUNvbG9yOjppc1doaXRlQ29sb3IoY29sb3IpIHx8ICFy
ZW5kZXJlci51c2VEYXJrQXBwZWFyYW5jZSgpKSkKKyAgICBpZiAoTElLRUxZKCFzZXR0aW5ncygp
LnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUoKSB8fCAhQ29sb3I6OmlzV2hpdGUo
Y29sb3IpIHx8ICFyZW5kZXJlci51c2VEYXJrQXBwZWFyYW5jZSgpKSkKICAgICAgICAgcmV0dXJu
IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyOwogCiAgICAgYXV0byogZnJhbWVWaWV3ID0g
dmlldygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMjY0MjMw
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MDMwLDggKzQwMzAsOCBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVz
QXRTCiAgICAgICAgIGF0dHJpYnV0ZXMuYmFja2dyb3VuZENvbG9yID0gYmFja2dyb3VuZENvbG9y
OwogCiAgICAgYXV0byBmb3JlZ3JvdW5kQ29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENv
bG9yV2l0aENvbG9yRmlsdGVyKENTU1Byb3BlcnR5Q29sb3IpOwotICAgIC8vIEZJWE1FOiBpc0Js
YWNrQ29sb3Igbm90IHN1aXRhYmxlIGZvciBkYXJrIG1vZGUuCi0gICAgaWYgKGZvcmVncm91bmRD
b2xvci5pc1ZhbGlkKCkgJiYgIUNvbG9yOjppc0JsYWNrQ29sb3IoZm9yZWdyb3VuZENvbG9yKSkK
KyAgICAvLyBGSVhNRTogQ29sb3I6OmlzQmxhY2sgbm90IHN1aXRhYmxlIGZvciBkYXJrIG1vZGUu
CisgICAgaWYgKGZvcmVncm91bmRDb2xvci5pc1ZhbGlkKCkgJiYgIUNvbG9yOjppc0JsYWNrKGZv
cmVncm91bmRDb2xvcikpCiAgICAgICAgIGF0dHJpYnV0ZXMuZm9yZWdyb3VuZENvbG9yID0gZm9y
ZWdyb3VuZENvbG9yOwogCiAgICAgaWYgKGF1dG8qIHNoYWRvd0RhdGEgPSBzdHlsZS0+dGV4dFNo
YWRvdygpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVy
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZl
cnRlci5tbQkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9IVE1MQ29udmVydGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NTksMTAgKzg1OSwxMCBAQCBz
dGF0aWMgQ29sb3Igbm9ybWFsaXplZENvbG9yKENvbG9yIGNvbG9yCiAgICAgICAgIHJldHVybiBj
b2xvcjsKIAogICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UgPSBlbGVtZW50LmRvY3VtZW50KCku
dXNlRGFya0FwcGVhcmFuY2UoZWxlbWVudC5leGlzdGluZ0NvbXB1dGVkU3R5bGUoKSk7Ci0gICAg
aWYgKHVzZURhcmtBcHBlYXJhbmNlICYmIENvbG9yOjppc1doaXRlQ29sb3IoY29sb3IpKQorICAg
IGlmICh1c2VEYXJrQXBwZWFyYW5jZSAmJiBDb2xvcjo6aXNXaGl0ZShjb2xvcikpCiAgICAgICAg
IHJldHVybiBDb2xvcigpOwogCi0gICAgaWYgKCF1c2VEYXJrQXBwZWFyYW5jZSAmJiBDb2xvcjo6
aXNCbGFja0NvbG9yKGNvbG9yKSkKKyAgICBpZiAoIXVzZURhcmtBcHBlYXJhbmNlICYmIENvbG9y
Ojppc0JsYWNrKGNvbG9yKSkKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAKICAgICByZXR1cm4g
Y29sb3I7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3Bw
CShyZXZpc2lvbiAyNjQyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiw5IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKIAotI2luY2x1ZGUgIkFuaW1hdGlvblV0aWxpdGll
cy5oIgogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkNvbG9yVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEyNiwy
MiArMTIzLDI2IEBAIGZsb2F0IENvbG9yOjpsdW1pbmFuY2UoKSBjb25zdAogCiBDb2xvciBDb2xv
cjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0CiB7Ci0gICAgaWYgKGlzRXh0ZW5k
ZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5jb2xvcldpdGhBbHBoYShhbHBoYSk7
Ci0KLSAgICBDb2xvciByZXN1bHQgPSBjb2xvcldpdGhPdmVycmlkZW5BbHBoYShhc0lubGluZSgp
LCBhbHBoYSk7Ci0KLSAgICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZpbmcgdGhlIHNlbWFudGlj
IGJpdCBkZXNpcmVkIGFuZC9vciBjb3JyZWN0IGhlcmU/Ci0gICAgaWYgKGlzU2VtYW50aWMoKSkK
LSAgICAgICAgcmVzdWx0LnRhZ0FzU2VtYW50aWMoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAg
IHJldHVybiBjYWxsT25VbmRlcmx5aW5nVHlwZShXVEY6Om1ha2VWaXNpdG9yKAorICAgICAgICBb
Jl0gKGNvbnN0IFNSR0JBPHVpbnQ4X3Q+JiB1bmRlcmx5aW5nQ29sb3IpIC0+IENvbG9yIHsKKyAg
ICAgICAgICAgIENvbG9yIHJlc3VsdCA9IGNvbG9yV2l0aE92ZXJyaWRlbkFscGhhKHVuZGVybHlp
bmdDb2xvciwgYWxwaGEpOworCisgICAgICAgICAgICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZp
bmcgdGhlIHNlbWFudGljIGJpdCBkZXNpcmVkIGFuZC9vciBjb3JyZWN0IGhlcmU/CisgICAgICAg
ICAgICBpZiAoaXNTZW1hbnRpYygpKQorICAgICAgICAgICAgICAgIHJlc3VsdC50YWdBc1NlbWFu
dGljKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9LAorICAgICAgICBb
Jl0gKGNvbnN0IGF1dG8mIHVuZGVybHlpbmdDb2xvcikgLT4gQ29sb3IgeworICAgICAgICAgICAg
cmV0dXJuIGNvbG9yV2l0aE92ZXJyaWRlbkFscGhhKHVuZGVybHlpbmdDb2xvciwgYWxwaGEpOwor
ICAgICAgICB9CisgICAgKSk7CiB9CiAKIENvbG9yIENvbG9yOjppbnZlcnRlZENvbG9yV2l0aEFs
cGhhKGZsb2F0IGFscGhhKSBjb25zdAogewotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAg
IHJldHVybiBhc0V4dGVuZGVkKCkuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShhbHBoYSk7Ci0gICAg
cmV0dXJuIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoYXNJbmxpbmUoKSwgYWxwaGEp
OworICAgIHJldHVybiBjYWxsT25VbmRlcmx5aW5nVHlwZShbJl0gKGNvbnN0IGF1dG8mIHVuZGVy
bHlpbmdDb2xvcikgLT4gQ29sb3IgeworICAgICAgICByZXR1cm4gaW52ZXJ0ZWRDb2xvcldpdGhP
dmVycmlkZW5BbHBoYSh1bmRlcmx5aW5nQ29sb3IsIGFscGhhKTsKKyAgICB9KTsKIH0KIAogQ29s
b3IgQ29sb3I6OnNlbWFudGljQ29sb3IoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjQyMzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAjaW5jbHVkZSAiU2ltcGxlQ29sb3IuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgog
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiAjaWYgVVNFKENHKQpAQCAtNTEsNiArNTIsMTgg
QEAgdHlwZWRlZiBzdHJ1Y3QgX0dka1JHQkEgR2RrUkdCQTsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCisvLyBBYmxlIHRvIHJlcHJlc2VudDoKKy8vICAgIC0gU3BlY2lhbCAiaW52YWxpZCBjb2xv
ciIgc3RhdGUKKy8vICAgIC0gNHggOC1iaXQgKDAtMjU1KSBzUkdCQSwgc3RvcmVkIGlubGluZSwg
bm8gYWxsb2NhdGlvbgorLy8gICAgLSA0eCBmbG9hdCAoMC0xKSBzUkdCQSwgc3RvcmVkIGluIGEg
cmVmZXJlbmNlIGNvdW50ZWQgc3ViLW9iamVjdAorLy8gICAgLSA0eCBmbG9hdCAoMC0xKSBMaW5l
YXIgc1JHQkEsIHN0b3JlZCBpbiBhIHJlZmVyZW5jZSBjb3VudGVkIHN1Yi1vYmplY3QKKy8vICAg
IC0gNHggZmxvYXQgKDAtMSkgRGlzcGxheVAzLCBzdG9yZWQgaW4gYSByZWZlcmVuY2UgY291bnRl
ZCBzdWItb2JqZWN0CisvLworLy8gQWRkaXRpb25hbGx5LCB0aGUgaW5saW5lIDgtYml0IHNSR0JB
IGNhbiBoYXZlIGFuIG9wdGlvbmFsICJzZW1hbnRpYyIgYml0IHNldCBvbiBpdCwKKy8vIHdoaWNo
IGluZGljYXRlcyB0aGUgY29sb3Igb3JpZ2luYXRlZCBmcm9tIGEgQ1NTIHNlbWFudGljIGNvbG9y
IG5hbWUuCisvLyBGSVhNRTogSWYgd2Uga2VlcCB0aGUgInNlbWFudGljIiBiaXQgb24gQ29sb3Is
IHdlIHNob3VsZCBleHRlbmQgc3VwcG9ydCB0byBhbGwgY29sb3JzLAorLy8gbm90IGp1c3QgaW5s
aW5lIG9uZXMsIGJ5IHVzaW5nIHRoZSB1bnVzZWQgcG9pbnRlciBiaXRzLgorCiBjbGFzcyBDb2xv
ciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC02Myw3ICs3Niwx
MCBAQCBwdWJsaWM6CiAgICAgQ29sb3IoU1JHQkE8dWludDhfdD4sIFNlbWFudGljVGFnKTsKICAg
ICBDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4sIFNlbWFudGljVGFnKTsKIAotICAgIENv
bG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmKTsKKyAgICBDb2xvcihDb2xvckNvbXBvbmVudHM8Zmxv
YXQ+LCBDb2xvclNwYWNlKTsKKyAgICBDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4mKTsKKyAgICBD
b2xvcihjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mKTsKKyAgICBDb2xvcihjb25zdCBEaXNwbGF5
UDM8ZmxvYXQ+Jik7CiAKICAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZUVtcHR5VmFs
dWVUeXBlKTsKICAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUpOwpAQCAtNzIsMzQgKzg4LDM3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xv
cihjb25zdCBDb2xvciYpOwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKENvbG9yJiYpOwogCisg
ICAgV0VCQ09SRV9FWFBPUlQgQ29sb3ImIG9wZXJhdG9yPShjb25zdCBDb2xvciYpOworICAgIFdF
QkNPUkVfRVhQT1JUIENvbG9yJiBvcGVyYXRvcj0oQ29sb3ImJik7CisKICAgICB+Q29sb3IoKTsK
IAotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSB8fCAobV9j
b2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyAmIHZhbGlkSW5saW5lQ29sb3JCaXQpOyB9Cisg
ICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwogCi0gICAgLy8gVHJ1ZSBpZiB0aGUgY29sb3Igb3Jp
Z2luYXRlZCBmcm9tIGEgQ1NTIHNlbWFudGljIGNvbG9yIG5hbWUuCisgICAgYm9vbCBpc1ZhbGlk
KCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpIHx8IChtX2NvbG9yRGF0YS5pbmxpbmVDb2xv
ckFuZEZsYWdzICYgdmFsaWRJbmxpbmVDb2xvckJpdCk7IH0KICAgICBib29sIGlzU2VtYW50aWMo
KSBjb25zdCB7IHJldHVybiBpc0lubGluZSgpICYmIChtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFu
ZEZsYWdzICYgaXNTZW1hbnRpY0lubGluZUNvbG9yQml0KTsgfQogCisKICAgICBib29sIGlzT3Bh
cXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkg
PT0gMS4wIDogYXNJbmxpbmUoKS5hbHBoYSA9PSAyNTU7IH0KICAgICBib29sIGlzVmlzaWJsZSgp
IGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID4gMC4w
IDogYXNJbmxpbmUoKS5hbHBoYSA+IDA7IH0KIAogICAgIHVpbnQ4X3QgYWxwaGEoKSBjb25zdCB7
IHJldHVybiBpc0V4dGVuZGVkKCkgPyBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGFzRXh0ZW5kZWQo
KS5hbHBoYSgpKSA6IGFzSW5saW5lKCkuYWxwaGE7IH0KICAgICBmbG9hdCBhbHBoYUFzRmxvYXQo
KSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IGNv
bnZlcnRUb0NvbXBvbmVudEZsb2F0KGFzSW5saW5lKCkuYWxwaGEpOyB9CiAKLSAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgbHVtaW5hbmNlKCkgY29u
c3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgbGlnaHRuZXNzKCkgY29uc3Q7IC8vIEZJWE1F
OiBSZXBsYWNlIHJlbWFpbmluZyB1c2VzIHdpdGggbHVtaW5hbmNlLgogCi0gICAgV0VCQ09SRV9F
WFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+IGNvbG9y
U3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiBkZWNsdHlwZShhdXRvKSBjYWxsT25VbmRlcmx5aW5nVHlwZShGdW5jdG9yJiYpIGNvbnN0
OwogCiAgICAgLy8gVGhpcyB3aWxsIGNvbnZlcnQgbm9uLXNSR0IgY29sb3JzcGFjZSBjb2xvcnMg
aW50byBzUkdCLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFNSR0JBPFQ+IHRvU1JHQkFMb3Nz
eSgpIGNvbnN0OwogCisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIENv
bG9yQ29tcG9uZW50czxmbG9hdD4+IGNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3Q7CisK
ICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBsaWdodGVuZWQoKSBjb25zdDsKICAgICBXRUJDT1JF
X0VYUE9SVCBDb2xvciBkYXJrZW5lZCgpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgZmxv
YXQgbHVtaW5hbmNlKCkgY29uc3Q7Ci0KLSAgICAvLyBGSVhNRTogUmVwbGFjZSByZW1haW5pbmcg
dXNlcyB3aXRoIGx1bWluYW5jZS4KLSAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBsaWdodG5lc3Mo
KSBjb25zdDsKLQogICAgIENvbG9yIGludmVydGVkQ29sb3JXaXRoQWxwaGEoT3B0aW9uYWw8Zmxv
YXQ+IGFscGhhKSBjb25zdDsKICAgICBDb2xvciBpbnZlcnRlZENvbG9yV2l0aEFscGhhKGZsb2F0
IGFscGhhKSBjb25zdDsKIApAQCAtMTQ0LDIyICsxNjMsMjQgQEAgcHVibGljOgogICAgIGNvbnN0
IEV4dGVuZGVkQ29sb3ImIGFzRXh0ZW5kZWQoKSBjb25zdDsKICAgICBTUkdCQTx1aW50OF90PiBh
c0lubGluZSgpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3ImIG9wZXJhdG9yPShj
b25zdCBDb2xvciYpOwotICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yJiBvcGVyYXRvcj0oQ29sb3Im
Jik7Ci0KICAgICAvLyBFeHRlbmRlZCBhbmQgbm9uLWV4dGVuZGVkIGNvbG9ycyB3aWxsIGFsd2F5
cyBiZSBub24tZXF1YWwuCiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYg
YSwgY29uc3QgQ29sb3ImIGIpOwogICAgIGZyaWVuZCBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRp
Y0NvbG9yKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYik7CiAgICAgZnJpZW5kIGJvb2wg
ZXh0ZW5kZWRDb2xvcnNFcXVhbChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CiAKLSAgICBz
dGF0aWMgYm9vbCBpc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICBzdGF0aWMgYm9vbCBp
c1doaXRlQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICBzdGF0aWMgYm9vbCBpc0JsYWNrKGNvbnN0
IENvbG9yJik7CisgICAgc3RhdGljIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvciYpOwogCiAgICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxDb2xvcj4gZGVjb2RlKERl
Y29kZXImKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHNldElubGluZUNvbG9yKFNSR0JBPHVpbnQ4
X3Q+KTsKKyAgICBDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJik7CisKKyAgICB2b2lkIHNldENv
bG9yKFNSR0JBPHVpbnQ4X3Q+KTsKKyAgICB2b2lkIHNldENvbG9yKGNvbnN0IFNSR0JBPGZsb2F0
PiYpOworICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+Jik7CisgICAg
dm9pZCBzZXRDb2xvcihjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CiAgICAgdm9pZCBzZXRFeHRl
bmRlZENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmKTsKIAogICAgIHZvaWQgdGFnQXNTZW1hbnRp
YygpIHsgbV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyB8PSBpc1NlbWFudGljSW5saW5l
Q29sb3JCaXQ7IH0KQEAgLTIyNywyOSArMjQ4LDU5IEBAIGlubGluZSBib29sIGVxdWFsSWdub3Jp
bmdTZW1hbnRpY0NvbG9yKGMKIAogaW5saW5lIENvbG9yOjpDb2xvcihTUkdCQTx1aW50OF90PiBj
b2xvcikKIHsKLSAgICBzZXRJbmxpbmVDb2xvcihjb2xvcik7CisgICAgc2V0Q29sb3IoY29sb3Ip
OwogfQogCiBpbmxpbmUgQ29sb3I6OkNvbG9yKE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBjb2xv
cikKIHsKICAgICBpZiAoY29sb3IpCi0gICAgICAgIHNldElubGluZUNvbG9yKCpjb2xvcik7Cisg
ICAgICAgIHNldENvbG9yKCpjb2xvcik7CiB9CiAKIGlubGluZSBDb2xvcjo6Q29sb3IoU1JHQkE8
dWludDhfdD4gY29sb3IsIFNlbWFudGljVGFnKQogewotICAgIHNldElubGluZUNvbG9yKGNvbG9y
KTsKKyAgICBzZXRDb2xvcihjb2xvcik7CiAgICAgdGFnQXNTZW1hbnRpYygpOwogfQogCiBpbmxp
bmUgQ29sb3I6OkNvbG9yKE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvciwgU2VtYW50aWNU
YWcpCiB7CiAgICAgaWYgKGNvbG9yKSB7Ci0gICAgICAgIHNldElubGluZUNvbG9yKCpjb2xvcik7
CisgICAgICAgIHNldENvbG9yKCpjb2xvcik7CiAgICAgICAgIHRhZ0FzU2VtYW50aWMoKTsKICAg
ICB9CiB9CiAKK2lubGluZSBDb2xvcjo6Q29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiBjb21w
b25lbnRzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgc3dpdGNoIChjb2xvclNwYWNl
KSB7CisgICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgorICAgICAgICBzZXRDb2xvcihhc1NSR0JB
KGNvbXBvbmVudHMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29sb3JTcGFjZTo6TGlu
ZWFyUkdCOgorICAgICAgICBzZXRDb2xvcihhc0xpbmVhclNSR0JBKGNvbXBvbmVudHMpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgorICAgICAgICBz
ZXRDb2xvcihhc0Rpc3BsYXlQMyhjb21wb25lbnRzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
Cit9CisKK2lubGluZSBDb2xvcjo6Q29sb3IoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK3sK
KyAgICBzZXRDb2xvcihjb2xvcik7Cit9CisKK2lubGluZSBDb2xvcjo6Q29sb3IoY29uc3QgTGlu
ZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBzZXRDb2xvcihjb2xvcik7Cit9CisKK2lu
bGluZSBDb2xvcjo6Q29sb3IoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYgY29sb3IpCit7CisgICAg
c2V0Q29sb3IoY29sb3IpOworfQorCiBpbmxpbmUgQ29sb3I6OkNvbG9yKFJlZjxFeHRlbmRlZENv
bG9yPiYmIGV4dGVuZGVkQ29sb3IpCiB7CiAgICAgc2V0RXh0ZW5kZWRDb2xvcihXVEZNb3ZlKGV4
dGVuZGVkQ29sb3IpKTsKQEAgLTI4MCwxOSArMzMxLDM2IEBAIGlubGluZSBDb2xvcjo6fkNvbG9y
KCkKIAogaW5saW5lIHVuc2lnbmVkIENvbG9yOjpoYXNoKCkgY29uc3QKIHsKLSAgICBpZiAoaXNF
eHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmhhc2goKTsKKyAgICBpZiAo
aXNFeHRlbmRlZCgpKSB7CisgICAgICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGFzRXh0
ZW5kZWQoKS5jb21wb25lbnRzKCk7CisgICAgICAgIHJldHVybiBjb21wdXRlSGFzaChjMSwgYzIs
IGMzLCBhbHBoYSwgYXNFeHRlbmRlZCgpLmNvbG9yU3BhY2UoKSk7CisgICAgfQogICAgIHJldHVy
biBXVEY6OmludEhhc2gobV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IFNSR0JBPFQ+IENvbG9yOjp0b1NSR0JBTG9zc3koKSBjb25zdAor
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gZGVjbHR5cGUoYXV0bykgQ29sb3I6OmNhbGxPblVu
ZGVybHlpbmdUeXBlKEZ1bmN0b3ImJiBmdW5jdG9yKSBjb25zdAogewogICAgIGlmIChpc0V4dGVu
ZGVkKCkpCi0gICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkudG9TUkdCQUxvc3N5PFQ+KCk7Ci0g
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCB1aW50OF90PikKLSAgICAgICAgcmV0
dXJuIGFzSW5saW5lKCk7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCBmbG9h
dD4pCi0gICAgICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoYXNJbmxpbmUoKSk7
CisgICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY2FsbE9uVW5kZXJseWluZ1R5cGUoc3RkOjpm
b3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKKyAgICByZXR1cm4gZnVuY3Rvcihhc0lubGluZSgp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4gQ29sb3I6OnRvU1JHQkFMb3Nz
eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNhbGxPblVuZGVybHlpbmdUeXBlKFdURjo6bWFrZVZp
c2l0b3IoCisgICAgICAgIFtdIChjb25zdCBTUkdCQTx1aW50OF90PiYgY29sb3IpIHsKKyAgICAg
ICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4pCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNvbG9yOworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X3NhbWVfdjxULCBmbG9hdD4pCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBv
bmVudEZsb2F0cyhjb2xvcik7CisgICAgICAgIH0sCisgICAgICAgIFtdIChjb25zdCBhdXRvJiBj
b2xvcikgeworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCB1aW50
OF90PikKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZXModG9T
UkdCQShjb2xvcikpOworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxU
LCBmbG9hdD4pCisgICAgICAgICAgICAgICAgcmV0dXJuIHRvU1JHQkEoY29sb3IpOworICAgICAg
ICB9CisgICAgKSk7CiB9CiAKIGlubGluZSBDb2xvciBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhB
bHBoYShPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0CkBAIC0zMjcsMTIgKzM5NSwzMyBAQCBp
bmxpbmUgU1JHQkE8dWludDhfdD4gQ29sb3I6OmFzSW5saW5lKCkgCiAgICAgcmV0dXJuIGFzU1JH
QkEoUGFja2VkOjpSR0JBIHsgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1fY29sb3JEYXRhLmlubGlu
ZUNvbG9yQW5kRmxhZ3MgPj4gMzIpIH0pOwogfQogCi1pbmxpbmUgdm9pZCBDb2xvcjo6c2V0SW5s
aW5lQ29sb3IoU1JHQkE8dWludDhfdD4gY29sb3IpCitpbmxpbmUgdm9pZCBDb2xvcjo6c2V0Q29s
b3IoU1JHQkE8dWludDhfdD4gY29sb3IpCiB7CiAgICAgbV9jb2xvckRhdGEuaW5saW5lQ29sb3JB
bmRGbGFncyA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihQYWNrZWQ6OlJHQkEgeyBjb2xvciB9LnZh
bHVlKSA8PCAzMjsKICAgICB0YWdBc1ZhbGlkKCk7CiB9CiAKK2lubGluZSB2b2lkIENvbG9yOjpz
ZXRDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQoreworICAgIGF1dG8gY29udmVydGVk
ID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoY29sb3IpOworICAgIGlmIChjb2xvciA9PSBjb252
ZXJ0VG9Db21wb25lbnRGbG9hdHMoY29udmVydGVkKSkgeworICAgICAgICBzZXRDb2xvcihjb252
ZXJ0ZWQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2V0RXh0ZW5kZWRDb2xvcihF
eHRlbmRlZENvbG9yOjpjcmVhdGUoY29sb3IpKTsKK30KKworaW5saW5lIHZvaWQgQ29sb3I6OnNl
dENvbG9yKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAgc2V0RXh0ZW5k
ZWRDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoY29sb3IpKTsKK30KKworaW5saW5lIHZvaWQg
Q29sb3I6OnNldENvbG9yKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQoreworICAgIHNl
dEV4dGVuZGVkQ29sb3IoRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGNvbG9yKSk7Cit9CisKIGlubGlu
ZSB2b2lkIENvbG9yOjpzZXRFeHRlbmRlZENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVu
ZGVkQ29sb3IpCiB7CiAgICAgLy8gWmVybyB0aGUgdW5pb24sIGp1c3QgaW4gY2FzZSBhIDMyLWJp
dCBzeXN0ZW0gb25seSBhc3NpZ25zIHRoZQpAQCAtMzQyLDE4ICs0MzEsMTggQEAgaW5saW5lIHZv
aWQgQ29sb3I6OnNldEV4dGVuZGVkQ29sb3IoUmVmPAogICAgIEFTU0VSVChpc0V4dGVuZGVkKCkp
OwogfQogCi1pbmxpbmUgYm9vbCBDb2xvcjo6aXNCbGFja0NvbG9yKGNvbnN0IENvbG9yJiBjb2xv
cikKK2lubGluZSBib29sIENvbG9yOjppc0JsYWNrKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAg
ICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gY29sb3IuYXNFeHRlbmRl
ZCgpLmlzQmxhY2soKTsKLSAgICByZXR1cm4gY29sb3IuYXNJbmxpbmUoKSA9PSBDb2xvcjo6Ymxh
Y2s7CisgICAgcmV0dXJuIGNvbG9yLmNhbGxPblVuZGVybHlpbmdUeXBlKFtdIChjb25zdCBhdXRv
JiBjb2xvcikgeworICAgICAgICByZXR1cm4gV2ViQ29yZTo6aXNCbGFjayhjb2xvcik7CisgICAg
fSk7CiB9CiAKLWlubGluZSBib29sIENvbG9yOjppc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImIGNv
bG9yKQoraW5saW5lIGJvb2wgQ29sb3I6OmlzV2hpdGUoY29uc3QgQ29sb3ImIGNvbG9yKQogewot
ICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBjb2xvci5hc0V4dGVu
ZGVkKCkuaXNXaGl0ZSgpOwotICAgIHJldHVybiBjb2xvci5hc0lubGluZSgpID09IENvbG9yOjp3
aGl0ZTsKKyAgICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJseWluZ1R5cGUoW10gKGNvbnN0IGF1
dG8mIGNvbG9yKSB7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjppc1doaXRlKGNvbG9yKTsKKyAg
ICB9KTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KQEAgLTQwOCw3ICs0OTcsNyBAQCBP
cHRpb25hbDxDb2xvcj4gQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkCiAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbG9yU3BhY2Up
KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIENvbG9y
IHsgRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGMxLCBjMiwgYzMsIGFscGhhLCBjb2xvclNwYWNlKSB9
OworICAgICAgICByZXR1cm4gQ29sb3IgeyBFeHRlbmRlZENvbG9yOjpjcmVhdGUoeyBjMSwgYzIs
IGMzLCBhbHBoYSB9LCBjb2xvclNwYWNlKSB9OwogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29u
dmVyc2lvbi5oCShyZXZpc2lvbiAyNjQyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMzEgKzI1LDM1
IEBACiAKICNwcmFnbWEgb25jZQogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CisjaW5jbHVkZSAiQ29s
b3JUeXBlcy5oIgogCi10ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IENNWUtBOwotdGVtcGxhdGU8
dHlwZW5hbWU+IHN0cnVjdCBEaXNwbGF5UDM7Ci10ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEhT
TEE7Ci10ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IExpbmVhckRpc3BsYXlQMzsKLXRlbXBsYXRl
PHR5cGVuYW1lPiBzdHJ1Y3QgTGluZWFyU1JHQkE7Ci10ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0
IFNSR0JBOworbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBUaGVzZSBhcmUgdGhlIHN0YW5kYXJk
IHNSR0IgPC0+IExpbmVhclJHQiAvIERpc3BsYXlQMyA8LT4gTGluZWFyRGlzcGxheVAzIGNvbnZl
cnNpb24gZnVuY3Rpb25zIChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUkdCKS4KIGZs
b2F0IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoZmxvYXQpOwogZmxvYXQgcmdiVG9MaW5lYXJD
b2xvckNvbXBvbmVudChmbG9hdCk7CiAKLUxpbmVhclNSR0JBPGZsb2F0PiB0b0xpbmVhclNSR0JB
KGNvbnN0IFNSR0JBPGZsb2F0PiYpOwotU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3QgTGluZWFy
U1JHQkE8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBMaW5lYXJTUkdCQTxmbG9hdD4gdG9MaW5l
YXJTUkdCQShjb25zdCBTUkdCQTxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFNSR0JBPGZsb2F0
PiB0b1NSR0JBKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYpOwogCi1MaW5lYXJEaXNwbGF5UDM8
ZmxvYXQ+IHRvTGluZWFyRGlzcGxheVAzKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsKLURpc3Bs
YXlQMzxmbG9hdD4gdG9EaXNwbGF5UDMoY29uc3QgTGluZWFyRGlzcGxheVAzPGZsb2F0PiYpOwor
V0VCQ09SRV9FWFBPUlQgTGluZWFyRGlzcGxheVAzPGZsb2F0PiB0b0xpbmVhckRpc3BsYXlQMyhj
b25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBEaXNwbGF5UDM8ZmxvYXQ+
IHRvRGlzcGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mKTsKIAotU1JHQkE8Zmxv
YXQ+IHRvU1JHQkEoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOwotRGlzcGxheVAzPGZsb2F0PiB0
b0Rpc3BsYXlQMyhjb25zdCBTUkdCQTxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFNSR0JBPGZs
b2F0PiB0b1NSR0JBKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIERp
c3BsYXlQMzxmbG9hdD4gdG9EaXNwbGF5UDMoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiAKIFdFQkNP
UkVfRVhQT1JUIEhTTEE8ZmxvYXQ+IHRvSFNMQShjb25zdCBTUkdCQTxmbG9hdD4mKTsKIFdFQkNP
UkVfRVhQT1JUIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IEhTTEE8ZmxvYXQ+Jik7CiAKIFNS
R0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IENNWUtBPGZsb2F0PiYpOwogCisKKy8vIElkZW50aXR5
IGNvbnZlcnNpb25zICh1c2VmdWwgZm9yIGdlbmVyaWMgY29udGV4dHMpCisKK2NvbnN0ZXhwciBT
UkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKSB7IHJldHVybiBj
b2xvcjsgfQorY29uc3RleHByIExpbmVhclNSR0JBPGZsb2F0PiB0b0xpbmVhclNSR0JBKGNvbnN0
IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9Citjb25zdGV4cHIg
RGlzcGxheVAzPGZsb2F0PiB0b0Rpc3BsYXlQMyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xv
cikgeyByZXR1cm4gY29sb3I7IH0KK2NvbnN0ZXhwciBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+IHRv
TGluZWFyRGlzcGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKSB7IHJl
dHVybiBjb2xvcjsgfQorY29uc3RleHByIEhTTEE8ZmxvYXQ+IHRvSFNMQShjb25zdCBIU0xBPGZs
b2F0PiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JTZXJpYWxpemF0aW9uLmNwcAkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAwLDQ1ICsxMDAsODcgQEAgc3RhdGljIEFTQ0lJTGl0ZXJhbCBzZXJpYWxpemF0aW9uKENv
bG9yUwogICAgIHJldHVybiAiIl9zOwogfQogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhj
b25zdCBFeHRlbmRlZENvbG9yJiBjb2xvcikKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4g
c3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0g
ICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IuY29tcG9uZW50cygpOworICAgIGF1
dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOwogICAgIGlmIChXVEY6OmFyZUVzc2VudGlh
bGx5RXF1YWwoYWxwaGEsIDEuMGYpKQotICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiY29sb3Io
Iiwgc2VyaWFsaXphdGlvbihjb2xvci5jb2xvclNwYWNlKCkpLCAnICcsIGMxLCAnICcsIGMyLCAn
ICcsIGMzLCAnKScpOwotICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBzZXJpYWxpemF0
aW9uKGNvbG9yLmNvbG9yU3BhY2UoKSksICcgJywgYzEsICcgJywgYzIsICcgJywgYzMsICIgLyAi
LCBhbHBoYSwgJyknKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIsIHNlcmlh
bGl6YXRpb24oY29sb3IuY29sb3JTcGFjZSksICcgJywgYzEsICcgJywgYzIsICcgJywgYzMsICcp
Jyk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIsIHNlcmlhbGl6YXRpb24oY29sb3Iu
Y29sb3JTcGFjZSksICcgJywgYzEsICcgJywgYzIsICcgJywgYzMsICIgLyAiLCBhbHBoYSwgJykn
KTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IEV4dGVuZGVkQ29sb3Im
IGNvbG9yKQorLy8gU1JHQkE8ZmxvYXQ+IG92ZXJsb2FkcworCitTdHJpbmcgc2VyaWFsaXphdGlv
bkZvckNTUyhjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJpYWxp
emF0aW9uKGNvbG9yKTsKK30KKworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IFNS
R0JBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29s
b3IpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKIH0KIAotU3RyaW5nIHNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IEV4dGVuZGVkQ29sb3ImIGNvbG9yKQor
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IFNSR0JBPGZsb2F0
PiYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29sb3IpOworICAg
IHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKIH0KIAorLy8gTGluZWFyU1JHQkE8ZmxvYXQ+
IG92ZXJsb2FkcworCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBMaW5lYXJTUkdC
QTxmbG9hdD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKK30K
KworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYg
Y29sb3IpCit7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworfQorCitTdHJpbmcg
c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+
JiBjb2xvcikKK3sKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7Cit9CisKKy8vIERp
c3BsYXlQMzxmbG9hdD4gb3ZlcmxvYWRzCisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNv
bnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9u
KGNvbG9yKTsKK30KKworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IERpc3BsYXlQ
MzxmbG9hdD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKK30K
KworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IERpc3BsYXlQ
MzxmbG9hdD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKK30K
KworCiAvLyBDb2xvciBvdmVybG9hZHMKIAogU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAg
IHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yLmFzRXh0ZW5kZWQoKSk7Ci0gICAgcmV0
dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29sb3IuYXNJbmxpbmUoKSk7CisgICAgcmV0dXJuIGNv
bG9yLmNhbGxPblVuZGVybHlpbmdUeXBlKFtdIChhdXRvIGMpIHsKKyAgICAgICAgcmV0dXJuIHNl
cmlhbGl6YXRpb25Gb3JDU1MoYyk7CisgICAgfSk7CiB9CiAKIFN0cmluZyBzZXJpYWxpemF0aW9u
Rm9ySFRNTChjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQo
KSkKLSAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9yLmFzRXh0ZW5kZWQo
KSk7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9yLmFzSW5saW5lKCkpOwor
ICAgIHJldHVybiBjb2xvci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoYXV0byBjKSB7CisgICAg
ICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9ySFRNTChjKTsKKyAgICB9KTsKIH0KIAogU3RyaW5n
IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
LSAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlv
bkZvclJlbmRlclRyZWVBc1RleHQoY29sb3IuYXNFeHRlbmRlZCgpKTsKLSAgICByZXR1cm4gc2Vy
aWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29sb3IuYXNJbmxpbmUoKSk7CisgICAgcmV0
dXJuIGNvbG9yLmNhbGxPblVuZGVybHlpbmdUeXBlKFtdIChhdXRvIGMpIHsKKyAgICAgICAgcmV0
dXJuIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGMpOworICAgIH0pOwogfQogCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clNlcmlhbGl6YXRpb24uaAkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDggKzI4LDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29sb3I7Ci1jbGFzcyBF
eHRlbmRlZENvbG9yOwogCit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IERpc3BsYXlQMzsKK3Rl
bXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgTGluZWFyU1JHQkE7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4g
c3RydWN0IFNSR0JBOwogCiAvLyBzZXJpYWxpemF0aW9uRm9ySFRNTCByZXR1cm5zIHRoZSBjb2xv
ciBzZXJpYWxpemVkIGFjY29yZGluZyB0byBIVE1MNSA8aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdn
Lm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjZmlsbC1hbmQtc3Ryb2tlLXN0eWxlcz4gKDEw
IFNlcHRlbWJlciAyMDE1KQpAQCAtNDAsOSArNDEsMTcgQEAgV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IHNlcmlhbGl6YXRpb25Gb3JDUwogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JIVE1MKFNSR0JBPHVpbnQ4X3Q+KTsKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0
aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChTUkdCQTx1aW50OF90Pik7CiAKLVdFQkNPUkVfRVhQT1JU
IFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IEV4dGVuZGVkQ29sb3ImKTsKLVdFQkNP
UkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBFeHRlbmRlZENvbG9y
Jik7Ci1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1Rl
eHQoY29uc3QgRXh0ZW5kZWRDb2xvciYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6
YXRpb25Gb3JDU1MoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcg
c2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgU1JHQkE8Zmxv
YXQ+Jik7CisKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0
IExpbmVhclNSR0JBPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRp
b25Gb3JIVE1MKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IExpbmVhclNSR0JBPGZs
b2F0PiYpOworCitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25z
dCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlv
bkZvckhUTUwoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IERpc3BsYXlQMzxmbG9hdD4m
KTsKIAogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgQ29s
b3ImKTsKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBD
b2xvciYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
VHlwZXMuaAkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsMzEgQEAKICNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiQ29s
b3JTcGFjZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDb21wb25lbnRUcmFpdHM7CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbXBvbmVudFRy
YWl0czx1aW50OF90PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IG1pblZhbHVlID0g
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgbWF4VmFsdWUgPSAyNTU7Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb21wb25lbnRUcmFpdHM8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgY29u
c3RleHByIGZsb2F0IG1pblZhbHVlID0gMC4wZjsKKyAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0
IG1heFZhbHVlID0gMS4wZjsKK307CisKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFNS
R0JBIHsKICAgICBUIHJlZDsKICAgICBUIGdyZWVuOwogICAgIFQgYmx1ZTsKICAgICBUIGFscGhh
OworCisgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBD
b2xvclNwYWNlIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCOwogfTsKIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4gU1JHQkEoVCwgVCwgVCwgVCkgLT4gU1JHQkE8VD47CkBAIC02NCw2ICs4MSw5
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMaW5lYXJTUkdCQSAKICAgICBUIGdyZWVu
OwogICAgIFQgYmx1ZTsKICAgICBUIGFscGhhOworCisgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9
IFQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBDb2xvclNw
YWNlOjpMaW5lYXJSR0I7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBMaW5lYXJTUkdCQShU
LCBULCBULCBUKSAtPiBMaW5lYXJTUkdCQTxUPjsKQEAgLTk0LDYgKzExNCw5IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBEaXNwbGF5UDMgewogICAgIFQgZ3JlZW47CiAgICAgVCBibHVl
OwogICAgIFQgYWxwaGE7CisKKyAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKKyAgICBzdGF0
aWMgY29uc3RleHByIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkRpc3BsYXlQ
MzsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IERpc3BsYXlQMyhULCBULCBULCBUKSAtPiBE
aXNwbGF5UDM8VD47CkBAIC0xMjQsNiArMTQ3LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IExpbmVhckRpc3BsYQogICAgIFQgZ3JlZW47CiAgICAgVCBibHVlOwogICAgIFQgYWxwaGE7
CisKKyAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IExpbmVhckRpc3BsYXlQMyhULCBULCBULCBUKSAtPiBMaW5lYXJEaXNwbGF5UDM8VD47CkBA
IC0xNTQsNiArMTc5LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhTTEEgewogICAg
IFQgc2F0dXJhdGlvbjsKICAgICBUIGxpZ2h0bmVzczsKICAgICBUIGFscGhhOworCisgICAgdXNp
bmcgQ29tcG9uZW50VHlwZSA9IFQ7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBIU0xBKFQs
IFQsIFQsIFQpIC0+IEhTTEE8VD47CkBAIC0xODYsNiArMjEzLDggQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENNWUtBIHsKICAgICBUIHllbGxvdzsKICAgICBUIGJsYWNrOwogICAgIFQg
YWxwaGE7CisKKyAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKIH07CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IENNWUtBKFQsIFQsIFQsIFQsIFQpIC0+IENNWUtBPFQ+OwpAQCAtMjA2LDYgKzIz
NSw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBYWVpBIHsKICAgICBUIHk7CiAgICAg
VCB6OwogICAgIFQgYWxwaGE7CisKKyAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKIH07CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFhZWkEoVCwgVCwgVCwgVCkgLT4gWFlaQTxUPjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMu
aAkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksOSBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBjCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xv
clR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBo
YShjb25zdCBDb2xvclR5cGUmLCB1aW50OF90IG92ZXJyaWRlQWxwaGEpOwogdGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBo
YShjb25zdCBDb2xvclR5cGUmLCBmbG9hdCBvdmVycmlkZUFscGhhKTsKIAordGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYp
OwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNv
bnN0IENvbG9yVHlwZSYpOworCiBjb25zdGV4cHIgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUo
dWludDE2X3QpOwogY29uc3RleHByIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZfdCk7
CiAKQEAgLTE5Miw2ICsxOTUsMjMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xv
clR5cGUgaQogICAgIHJldHVybiBjb3B5OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGU+IGNvbnN0ZXhwciBib29sIGlzQmxhY2soY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKK3sKKyAg
ICBjb25zdGV4cHIgYXV0byBtaW4gPSBDb21wb25lbnRUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBl
OjpDb21wb25lbnRUeXBlPjo6bWluVmFsdWU7CisgICAgY29uc3RleHByIGF1dG8gbWF4ID0gQ29t
cG9uZW50VHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om1heFZhbHVl
OworCisgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgcmV0dXJuIGMx
ID09IG1pbiAmJiBjMiA9PSBtaW4gJiYgYzMgPT0gbWluICYmIGFscGhhID09IG1heDsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0
IENvbG9yVHlwZSYgY29sb3IpCit7CisgICAgY29uc3RleHByIGF1dG8gbWF4ID0gQ29tcG9uZW50
VHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om1heFZhbHVlOworCisg
ICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgcmV0dXJuIGMxID09IG1h
eCAmJiBjMiA9PSBtYXggJiYgYzMgPT0gbWF4ICYmIGFscGhhID09IG1heDsKK30KKwogY29uc3Rl
eHByIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKQogewogICAgIHJl
dHVybiAodmFsdWUgPDwgOCkgLSB2YWx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCShyZXZpc2lvbiAyNjQyMzApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRD
b2xvci5oIgotCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJDb2xvckNvbnZlcnNpb24u
aCIKLSNpbmNsdWRlICJDb2xvclR5cGVzLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hlci5oPgotI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVmPEV4
dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShmbG9hdCBjMSwgZmxvYXQgYzIsIGZs
b2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEV4dGVuZGVkQ29sb3IoYzEsIGMyLCBjMywgYWxwaGEsIGNvbG9yU3Bh
Y2UpKTsKLX0KLQotdW5zaWduZWQgRXh0ZW5kZWRDb2xvcjo6aGFzaCgpIGNvbnN0Ci17Ci0gICAg
YXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29tcG9uZW50cygpOwotICAgIHJldHVybiBjb21w
dXRlSGFzaChjMSwgYzIsIGMzLCBhbHBoYSwgbV9jb2xvclNwYWNlKTsKLX0KLQotUmVmPEV4dGVu
ZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmNvbG9yV2l0aEFscGhhKGZsb2F0IG92ZXJyaWRlQWxw
aGEpIGNvbnN0Ci17Ci0gICAgYXV0byBbYzEsIGMyLCBjMywgZXhpc3RpbmdBbHBoYV0gPSBjb21w
b25lbnRzKCk7Ci0gICAgcmV0dXJuIEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjMSwgYzIsIGMzLCBv
dmVycmlkZUFscGhhLCBjb2xvclNwYWNlKCkpOwotfQotCi1SZWY8RXh0ZW5kZWRDb2xvcj4gRXh0
ZW5kZWRDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBvdmVycmlkZUFscGhhKSBj
b25zdAotewotICAgIGF1dG8gW2MxLCBjMiwgYzMsIGV4aXN0aW5nQWxwaGFdID0gY29tcG9uZW50
cygpOwotICAgIHJldHVybiBFeHRlbmRlZENvbG9yOjpjcmVhdGUoMS4wZiAtIGMxLCAxLjBmIC0g
YzIsIDEuMGYgLSBjMywgb3ZlcnJpZGVBbHBoYSwgY29sb3JTcGFjZSgpKTsKLX0KLQotU1JHQkE8
ZmxvYXQ+IEV4dGVuZGVkQ29sb3I6OnRvU1JHQkFGbG9hdENvbXBvbmVudHNMb3NzeSgpIGNvbnN0
Ci17Ci0gICAgc3dpdGNoIChtX2NvbG9yU3BhY2UpIHsKLSAgICBjYXNlIENvbG9yU3BhY2U6OlNS
R0I6Ci0gICAgICAgIHJldHVybiBhc1NSR0JBKG1fY29tcG9uZW50cyk7Ci0gICAgY2FzZSBDb2xv
clNwYWNlOjpMaW5lYXJSR0I6Ci0gICAgICAgIHJldHVybiB0b1NSR0JBKGFzTGluZWFyU1JHQkEo
bV9jb21wb25lbnRzKSk7Ci0gICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6Ci0gICAgICAg
IHJldHVybiB0b1NSR0JBKGFzRGlzcGxheVAzKG1fY29tcG9uZW50cykpOwotICAgIH0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyAwLCAwLCAwLCAwIH07Ci19Ci0KLWJv
b2wgRXh0ZW5kZWRDb2xvcjo6aXNXaGl0ZSgpIGNvbnN0Ci17Ci0gICAgYXV0byBbYzEsIGMyLCBj
MywgYWxwaGFdID0gY29tcG9uZW50cygpOwotICAgIHJldHVybiBjMSA9PSAxICYmIGMyID09IDEg
JiYgYzMgPT0gMSAmJiBhbHBoYSA9PSAxOwotfQotCi1ib29sIEV4dGVuZGVkQ29sb3I6OmlzQmxh
Y2soKSBjb25zdAotewotICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbXBvbmVudHMo
KTsKLSAgICByZXR1cm4gIWMxICYmICFjMiAmJiAhYzMgJiYgYWxwaGEgPT0gMTsKLX0KLQotQ29s
b3IgbWFrZUV4dGVuZGVkQ29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjMywgZmxvYXQg
YWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKLXsKLSAgICByZXR1cm4gRXh0ZW5kZWRDb2xv
cjo6Y3JlYXRlKGMxLCBjMiwgYzMsIGFscGhhLCBjb2xvclNwYWNlKTsKLX0KLQotfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAko
cmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0
ZW5kZWRDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw1MSArMjYsMjggQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiQ29sb3JDb252
ZXJzaW9uLmgiCiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIkNvbG9yVHlwZXMu
aCIKLSNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IENvbG9yOwotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBTUkdCQTsKLQogY2xhc3MgRXh0ZW5k
ZWRDb2xvciA6IHB1YmxpYyBSZWZDb3VudGVkPEV4dGVuZGVkQ29sb3I+IHsKIHB1YmxpYzoKLSAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEV4dGVuZGVkQ29sb3I+IGNyZWF0ZShmbG9hdCBj
MSwgZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSk7Ci0KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBSZWY8RXh0ZW5kZWRDb2xvcj4gY3Jl
YXRlKGNvbnN0IENvbG9yVHlwZSYpOworICAgIHN0YXRpYyBSZWY8RXh0ZW5kZWRDb2xvcj4gY3Jl
YXRlKENvbG9yQ29tcG9uZW50czxmbG9hdD4sIENvbG9yU3BhY2UpOworICAgIAogICAgIGZsb2F0
IGFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25lbnRzWzNdOyB9CiAKICAgICBjb25zdCBD
b2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjb21wb25lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb21w
b25lbnRzOyB9CiAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xvclNwYWNlOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7
Ci0KLSAgICBSZWY8RXh0ZW5kZWRDb2xvcj4gY29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0Owot
ICAgIFJlZjxFeHRlbmRlZENvbG9yPiBpbnZlcnRlZENvbG9yV2l0aEFscGhhKGZsb2F0KSBjb25z
dDsKLQotICAgIGJvb2wgaXNXaGl0ZSgpIGNvbnN0OwotICAgIGJvb2wgaXNCbGFjaygpIGNvbnN0
OwotCi0gICAgLy8gVGhpcyB3aWxsIGNvbnZlcnQgbm9uLXNSR0IgY29sb3JzcGFjZSBjb2xvcnMg
aW50byBzUkdCLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBTUkdCQTxUPiB0
b1NSR0JBTG9zc3koKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X3NhbWVfdjxULCBmbG9hdD4pCi0gICAgICAgICAgICByZXR1cm4gdG9TUkdCQUZsb2F0Q29tcG9u
ZW50c0xvc3N5KCk7Ci0gICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxU
LCB1aW50OF90PikKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0
b1NSR0JBRmxvYXRDb21wb25lbnRzTG9zc3koKSk7Ci0gICAgfQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+IGRlY2x0eXBlKGF1dG8pIGNhbGxPblVuZGVybHlpbmdUeXBlKEZ1bmN0b3Im
JikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgRXh0ZW5kZWRDb2xvcihmbG9hdCBjMSwgZmxvYXQg
YzIsIGZsb2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotICAgICAg
ICA6IG1fY29tcG9uZW50cyhjMSwgYzIsIGMzLCBhbHBoYSkKLSAgICAgICAgLCBtX2NvbG9yU3Bh
Y2UoY29sb3JTcGFjZSkKLSAgICB7Ci0gICAgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgU1JHQkE8
ZmxvYXQ+IHRvU1JHQkFGbG9hdENvbXBvbmVudHNMb3NzeSgpIGNvbnN0OworICAgIEV4dGVuZGVk
Q29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiwgQ29sb3JTcGFjZSk7CiAKICAgICBDb2xvckNv
bXBvbmVudHM8ZmxvYXQ+IG1fY29tcG9uZW50czsKICAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFj
ZTsKQEAgLTg2LDggKzYzLDM1IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRXh0ZW5k
ZWRDb2wKICAgICByZXR1cm4gIShhID09IGIpOwogfQogCi0vLyBGSVhNRTogSWYgdGhlIENvbG9y
U3BhY2UgaXMgc1JHQiBhbmQgdGhlIHZhbHVlcyBjYW4gYWxsIGJlCi0vLyBjb252ZXJ0ZWQgZXhh
Y3RseSB0byBpbnRlZ2Vycywgd2Ugc2hvdWxkIG1ha2UgYSBTaW1wbGVDb2xvci4KLVdFQkNPUkVf
RVhQT1JUIENvbG9yIG1ha2VFeHRlbmRlZENvbG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQg
YzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZT4gaW5saW5lIFJlZjxFeHRlbmRlZENvbG9yPiBFeHRlbmRlZENvbG9yOjpjcmVhdGUoY29uc3Qg
Q29sb3JUeXBlJiBjb2xvcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFeHRlbmRlZENv
bG9yKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSwgY29sb3IuY29sb3JTcGFjZSkpOworfQorCitp
bmxpbmUgUmVmPEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShDb2xvckNvbXBv
bmVudHM8ZmxvYXQ+IGNvbXBvbmVudHMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBFeHRlbmRlZENvbG9yKGNvbXBvbmVudHMsIGNvbG9yU3BhY2Up
KTsKK30KKworaW5saW5lIEV4dGVuZGVkQ29sb3I6OkV4dGVuZGVkQ29sb3IoQ29sb3JDb21wb25l
bnRzPGZsb2F0PiBjb21wb25lbnRzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgOiBtX2Nv
bXBvbmVudHMoY29tcG9uZW50cykKKyAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQorewor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBkZWNsdHlwZShhdXRvKSBFeHRlbmRlZENv
bG9yOjpjYWxsT25VbmRlcmx5aW5nVHlwZShGdW5jdG9yJiYgZnVuY3RvcikgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKG1fY29sb3JTcGFjZSkgeworICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoKKyAg
ICAgICAgcmV0dXJuIGZ1bmN0b3IoYXNTUkdCQShtX2NvbXBvbmVudHMpKTsKKyAgICBjYXNlIENv
bG9yU3BhY2U6OkxpbmVhclJHQjoKKyAgICAgICAgcmV0dXJuIGZ1bmN0b3IoYXNMaW5lYXJTUkdC
QShtX2NvbXBvbmVudHMpKTsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoKKyAgICAg
ICAgcmV0dXJuIGZ1bmN0b3IoYXNEaXNwbGF5UDMobV9jb21wb25lbnRzKSk7CisgICAgfQorCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZ1bmN0b3IoYXNTUkdCQShtX2Nv
bXBvbmVudHMpKTsKK30KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0NvbG9yR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCShyZXZpc2lvbiAyNjQyMzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw4ICsyNiw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENvbG9yOjpDb2xvcihj
b25zdCBHZGtSR0JBJiBjb2xvcikKKyAgICA6IENvbG9yKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVz
KFNSR0JBIHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLnJlZCksIHN0YXRpY19jYXN0PGZsb2F0
Pihjb2xvci5ncmVlbiksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5ibHVlKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGNvbG9yLmFscGhhKSB9KSkKIHsKLSAgICBzZXRJbmxpbmVDb2xvcihjb252ZXJ0
VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5yZWQpLCBz
dGF0aWNfY2FzdDxmbG9hdD4oY29sb3IuZ3JlZW4pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3Iu
Ymx1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5hbHBoYSkgfSkpOwogfQogCiBDb2xvcjo6
b3BlcmF0b3IgR2RrUkdCQSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNjQy
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3Qy
RC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogQ29sb3I6OkNvbG9yKEQyRDFfQ09MT1JfRiBjb2xvcikKKyAgICA6IENvbG9yKGNvbnZl
cnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29s
b3IuYSB9KSkKIHsKLSAgICBzZXRJbmxpbmVDb2xvcihjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhT
UkdCQSB7IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgfSkpOwogfQogCiBDb2xv
cjo6b3BlcmF0b3IgRDJEMV9DT0xPUl9GKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiAyNjQyMzApCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzM5OCw3ICszMzk4LDcgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnNo
b3VsZER1bXBQcm9wZQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIC8vIEJh
Y2tncm91bmQgY29sb3IgY291bGQgYmUgb2YgaW50ZXJlc3QgdG8gdGVzdHMgb3Igb3RoZXIgZHVt
cGVycyBpZiBpdCdzIG5vbi13aGl0ZS4KLSAgICAgICAgaWYgKCFzdHJjbXAocHJvcGVydHlOYW1l
LCAiYmFja2dyb3VuZENvbG9yIikgJiYgQ29sb3I6OmlzV2hpdGVDb2xvcihsYXllci0+YmFja2dy
b3VuZENvbG9yKCkpKQorICAgICAgICBpZiAoIXN0cmNtcChwcm9wZXJ0eU5hbWUsICJiYWNrZ3Jv
dW5kQ29sb3IiKSAmJiBDb2xvcjo6aXNXaGl0ZShsYXllci0+YmFja2dyb3VuZENvbG9yKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIC8vIFRoZSByb290IHRpbGUgY2Fj
aGUncyByZXBhaW50cyB3aWxsIHNob3cgdXAgYXQgdGhlIHRvcCB3aXRoIEZyYW1lVmlldydzLApJ
bmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2
aXNpb24gMjY0MjQyKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTggQEAKKzIwMjAtMDctMTAgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisg
ICAgICAgIFJlZHVjZSBzdXJmYWNlIGFyZWEgb2YgdGhlIEV4dGVuZGVkQ29sb3IgY2xhc3MgdG8g
YSBiYXJlIG1pbmltdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNDIwNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEZJWE1FOiBETyBOT1QgTEFORCBVTlRJTCBBRERJTkcgTkVXIFRFU1RTIEZPUiBORVcg
QkVIQVZJT1IgT0YgU1RPUklORyBSRVBSRVNFTlRBQkxFIFNSR0JBPGZsb2F0PiBJTkxJTkUuCisK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3Rz
LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6bWFrZUNvbG9yKToKKyAgICAgICAgVXBkYXRlIHVzaW5nIG5ldyBDb2xvciBjb25zdHJ1
Y3RvciBmb3IgZXh0ZW5kZWQgY29sb3JzLgorICAgICAgICAKKwogMjAyMC0wNy0xMCAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzb21lIHRlc3Rpbmcg
Zm9yIEpTUnVuTG9vcFRpbWVyCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAkocmV2aXNpb24gMjY0MjMw
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkgewogCiBURVNUKEV4dGVuZGVkQ29sb3IsIENvbnN0cnVjdG9yKQogewotICAgIENvbG9y
IGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6
RGlzcGxheVAzKSB9OworICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41
LCAwLjI1LCAxLjAgfSB9OwogICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAg
ICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjMS5hc0V4dGVuZGVkKCkuY29tcG9uZW50cygpOwpA
QCAtNTIsNyArNTIsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIENvbnN0cnVjdG9yKQogCiBURVNU
KEV4dGVuZGVkQ29sb3IsIENvcHlDb25zdHJ1Y3RvcikKIHsKLSAgICBDb2xvciBjMSB7IG1ha2VF
eHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykg
fTsKKyAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4w
IH0gfTsKICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IgYzIo
YzEpOwpAQCAtNzAsNyArNzAsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIENvcHlDb25zdHJ1Y3Rv
cikKIAogVEVTVChFeHRlbmRlZENvbG9yLCBBc3NpZ25tZW50KQogewotICAgIENvbG9yIGMxIHsg
bWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxh
eVAzKSB9OworICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1
LCAxLjAgfSB9OwogICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xv
ciBjMiA9IGMxOwpAQCAtODksMjAgKzg5LDIwIEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQXNzaWdu
bWVudCkKIFRFU1QoRXh0ZW5kZWRDb2xvciwgRXF1YWxpdHkpCiB7CiAgICAgewotICAgICAgICBD
b2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3Bh
Y2U6OkRpc3BsYXlQMykgfTsKKyAgICAgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsg
MS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5k
ZWQoKSk7CiAKLSAgICAgICAgQ29sb3IgYzIgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwg
MC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgICAgIENvbG9yIGMyIHsg
RGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgICAgICBFWFBF
Q1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgICAgIEVYUEVDVF9FUShjMSwgYzIpOwog
ICAgIH0KIAogICAgIHsKLSAgICAgICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAs
IDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgICAgIENvbG9y
IGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgICAg
ICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCi0gICAgICAgIENvbG9yIGMyIHsgbWFr
ZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6U1JHQikgfTsK
KyAgICAgICAgQ29sb3IgYzIgeyBTUkdCQTxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0g
fTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgICAgICBFWFBF
Q1RfTkUoYzEsIGMyKTsKQEAgLTExMiw3ICsxMTIsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEVx
dWFsaXR5KQogICAgIGludCBnID0gMTI4OwogICAgIGludCBiID0gNjM7CiAgICAgaW50IGEgPSAx
Mjc7Ci0gICAgQ29sb3IgcmdiMSB7IG1ha2VFeHRlbmRlZENvbG9yKHIgLyAyNTUuMCwgZyAvIDI1
NS4wLCBiIC8gMjU1LjAsIGEgLyAyNTUuMCwgQ29sb3JTcGFjZTo6U1JHQikgfTsKKyAgICBDb2xv
ciByZ2IxIHsgU1JHQkE8ZmxvYXQ+IHsgciAvIDI1NS4wZiwgZyAvIDI1NS4wZiwgYiAvIDI1NS4w
ZiwgYSAvIDI1NS4wZiB9IH07CiAgICAgQ29sb3IgcmdiMiA9IG1ha2VTaW1wbGVDb2xvcihyLCBn
LCBiLCBhKTsKICAgICBFWFBFQ1RfTkUocmdiMSwgcmdiMik7CiAgICAgRVhQRUNUX05FKHJnYjIs
IHJnYjEpOwpAQCAtMTIxLDIwICsxMjEsMjAgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBFcXVhbGl0
eSkKIFRFU1QoRXh0ZW5kZWRDb2xvciwgSGFzaCkKIHsKICAgICB7Ci0gICAgICAgIENvbG9yIGMx
IHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlz
cGxheVAzKSB9OworICAgICAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAu
NSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsK
IAotICAgICAgICBDb2xvciBjMiB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAx
LjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICAgICAgQ29sb3IgYzIgeyBEaXNwbGF5
UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgICAgIEVYUEVDVF9UUlVF
KGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICAgICAgRVhQRUNUX0VRKGMxLmhhc2goKSwgYzIuaGFz
aCgpKTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29s
b3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgICAg
ICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsK
ICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAotICAgICAgICBDb2xvciBj
MiB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OlNS
R0IpIH07CisgICAgICAgIENvbG9yIGMyIHsgU1JHQkE8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUs
IDEuMCB9IH07CiAgICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICAg
ICAgRVhQRUNUX05FKGMxLmhhc2goKSwgYzIuaGFzaCgpKTsKQEAgLTE0NCwxNCArMTQ0LDE0IEBA
IFRFU1QoRXh0ZW5kZWRDb2xvciwgSGFzaCkKICAgICBpbnQgZyA9IDEyODsKICAgICBpbnQgYiA9
IDYzOwogICAgIGludCBhID0gMTI3OwotICAgIENvbG9yIHJnYjEgeyBtYWtlRXh0ZW5kZWRDb2xv
cihyIC8gMjU1LjAsIGcgLyAyNTUuMCwgYiAvIDI1NS4wLCBhIC8gMjU1LjAsIENvbG9yU3BhY2U6
OlNSR0IpIH07CisgICAgQ29sb3IgcmdiMSB7IFNSR0JBPGZsb2F0PiB7IHIgLyAyNTUuMGYsIGcg
LyAyNTUuMGYsIGIgLyAyNTUuMGYsIGEgLyAyNTUuMGYgfSB9OwogICAgIENvbG9yIHJnYjIgPSBt
YWtlU2ltcGxlQ29sb3IociwgZywgYiwgYSk7CiAgICAgRVhQRUNUX05FKHJnYjEuaGFzaCgpLCBy
Z2IyLmhhc2goKSk7CiB9CiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgTW92ZUNvbnN0cnVjdG9yKQog
ewotICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwg
Q29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0
PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5k
ZWQoKSk7CiAKICAgICBDb2xvciBjMihXVEZNb3ZlKGMxKSk7CkBAIC0xNzIsNyArMTcyLDcgQEAg
VEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQ29uc3RydWN0b3IpCiAKIFRFU1QoRXh0ZW5kZWRDb2xv
ciwgTW92ZUFzc2lnbm1lbnQpCiB7Ci0gICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigx
LjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgQ29sb3Ig
YzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgRVhQ
RUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIGMyID0gV1RGTW92ZShjMSk7
CkBAIC0xOTQsNyArMTk0LDggQEAgVEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQXNzaWdubWVudCkK
IAogVEVTVChFeHRlbmRlZENvbG9yLCBCYXNpY1JlZmVyZW5jZUNvdW50aW5nKQogewotICAgIENv
bG9yKiBjMSA9IG5ldyBDb2xvciB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAx
LjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICBDb2xvciogYzEgPSBuZXcgQ29sb3Ig
eyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CisgICAgCiAgICAg
RVhQRUNUX1RSVUUoYzEtPmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xvciogYzIgPSBuZXcgQ29s
b3IoKmMxKTsKQEAgLTIyMCw3ICsyMjEsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEJhc2ljUmVm
ZXJlbmNlQ291bnRpCiAKIENvbG9yIG1ha2VDb2xvcigpCiB7Ci0gICAgQ29sb3IgYzEgeyBtYWtl
RXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMp
IH07CisgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEu
MCB9IH07CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKICAgICBFWFBFQ1RfRVEo
MXUsIGMxLmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKIApAQCAtMjM4LDcgKzIzOSw3IEBAIFRF
U1QoRXh0ZW5kZWRDb2xvciwgUmV0dXJuVmFsdWVzKQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIFAz
Q29udmVyc2lvblRvU1JHQikKIHsKLSAgICBDb2xvciBwM0NvbG9yIHsgbWFrZUV4dGVuZGVkQ29s
b3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICBD
b2xvciBwM0NvbG9yIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAwLjc1IH0g
fTsKICAgICBFWFBFQ1RfVFJVRShwM0NvbG9yLmlzRXh0ZW5kZWQoKSk7CiAKICAgICBhdXRvIHNS
R0JBQ29sb3IgPSBwM0NvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKQEAgLTI1MCw5ICsyNTEs
MTAgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBQM0NvbnZlcnNpb25Ub1NSR0IpCiAKIFRFU1QoRXh0
ZW5kZWRDb2xvciwgTGluZWFyU1JHQkNvbnZlcnNpb25Ub1NSR0IpCiB7Ci0gICAgQ29sb3IgbGlu
ZWFyQ29sb3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMC43NSwgQ29sb3JT
cGFjZTo6TGluZWFyUkdCKSB9OwotICAgIEVYUEVDVF9UUlVFKGxpbmVhckNvbG9yLmlzRXh0ZW5k
ZWQoKSk7Ci0gICAgYXV0byBzUkdCQUNvbG9yID0gbGluZWFyQ29sb3IudG9TUkdCQUxvc3N5PGZs
b2F0PigpOworICAgIENvbG9yIGxpbmVhclNSR0JBQ29sb3IgeyBMaW5lYXJTUkdCQTxmbG9hdD4g
eyAxLjAsIDAuNSwgMC4yNSwgMC43NSB9IH07CisgICAgRVhQRUNUX1RSVUUobGluZWFyU1JHQkFD
b2xvci5pc0V4dGVuZGVkKCkpOworCisgICAgYXV0byBzUkdCQUNvbG9yID0gbGluZWFyU1JHQkFD
b2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3Nl
bnRpYWxseUVxdWFsKHNSR0JBQ29sb3IucmVkLCAxLjBmKSk7CiAgICAgRVhQRUNUX1RSVUUoV1RG
OjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IuZ3JlZW4sIDAuNzM1MzU2OTI3ZikpOwog
ICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLmJsdWUs
IDAuNTM3MDk4NzA2ZikpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404038</attachid>
            <date>2020-07-10 20:19:02 -0700</date>
            <delta_ts>2020-07-10 20:22:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214204-20200710201901.patch</filename>
            <type>text/plain</type>
            <size>51160</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NDI1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBACisyMDIwLTA3LTEwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZWR1Y2Ugc3VyZmFjZSBhcmVhIG9m
IHRoZSBFeHRlbmRlZENvbG9yIGNsYXNzIHRvIGEgYmFyZSBtaW5pbXVtCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQyMDQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkZCBoZWxwZXIgZnVuY3Rpb24g
dG8gQ29sb3IgdG8gb3BlcmF0ZSBvbiB0aGUgdW5kZXJseWluZyBjb2xvciB0eXBlCisgICAgICAg
ICAgYW5kIHJlaW1wbGVtZW50IGEgYnVuY2ggb2YgZnVuY3Rpb25hbGl0eSB1c2luZyBpdCwgcmVk
dWNpbmcgdGhlIG5lZWQKKyAgICAgICAgICBmb3IgZHVwbGljYXRlIGltcGxlbWVudGF0aW9ucyBp
biBFeHRlbmRlZENvbG9yLgorICAgICAgICAtIEFkZCBjb25zdHJ1Y3RvcnMgdG8gQ29sb3IgdGhh
dCB0YWtlIGV4dGVuZGVkIGNvbG9yIHR5cGVzLCByZXBsYWNpbmcKKyAgICAgICAgICB0aGUgbWFr
ZUV4dGVuZGVkQ29sb3IgaGVscGVyIGZ1bmN0aW9uLiAKKworICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
UmVtb3ZlIEV4dGVuZWRDb2xvci5jcHAKKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6cGFyc2VDb2xvckZ1bmN0aW9uUGFyYW1ldGVycyk6CisgICAgICAgIFVzZSBuZXcg
Q29sb3IgY29uc3RydWN0b3IgdGFraW5nIENvbG9yQ29tcG9uZW50cyBhbmQgQ29sb3JTcGFjZS4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6IFJlaW1wbGltZW50IHVzaW5nIGNhbGxP
blVuZGVybHlpbmdUeXBlLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmludmVydGVkQ29sb3JX
aXRoQWxwaGEgY29uc3QpOiBSZWltcGxpbWVudCB1c2luZyBjYWxsT25VbmRlcmx5aW5nVHlwZS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OkNvbG9yKTogIAorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omhhc2ggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNhbGxPblVuZGVybHlpbmdUeXBlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBTG9zc3kgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0JsYWNr
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzV2hpdGVDb2xvcik6CisgICAgICAg
IC0gQWRkIG5ldyBjb25zdHJ1Y3RvcnMgdGFraW5nIGV4dGVuZGVkIGNvbG9yIHR5cGVzOiBTUkdC
QTxmbG9hdD4sIExpbmVhclNSR0JBPGZsb2F0PiBhbmQgRGlwbGF5UDM8ZmxvYXQ+LgorICAgICAg
ICAtIEFkZCBuZXcgZnVuY3Rpb24sIGNhbGxPblVuZGVybHlpbmdUeXBlLCB0byBtYWtlIHdvcmtp
bmcgd2l0aCBhbnkgdW5kZXJseWluZyB0eXBlIG1vcmUgc3RyZWFtbGluZWQuCisgICAgICAgIC0g
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OnRvU1JHQkEpOgorICAgICAgICAoV2ViQ29yZTo6dG9MaW5lYXJTUkdCQSk6
CisgICAgICAgIChXZWJDb3JlOjp0b0Rpc3BsYXlQMyk6CisgICAgICAgIChXZWJDb3JlOjp0b0xp
bmVhckRpc3BsYXlQMyk6CisgICAgICAgIChXZWJDb3JlOjp0b0hTTEEpOgorICAgICAgICBBZGQg
aWRlbnRpdHkgY29udmVyc2lvbiBmdW5jdGlvbnMgdG8gbWFrZSBpbXBsZW1lbnRpbmcgZ2VuZXJp
YyBmdW5jdGlvbnMgbGlrZSBDb2xvcjo6dG9TUkdCQUxvc3N5IG1vcmUKKyAgICAgICAgc3RyYWln
dGZvcndhcmQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXphdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpzZXJpYWxpemF0aW9uRm9yQ1NTKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRp
b25Gb3JIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVl
QXNUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24u
aDoKKyAgICAgICAgUmVwbGFjZSBzZXJpYWxpemF0aW9uIG9mIHRoZSBFeHRlbmRlZENvbG9yIHR5
cGUgaXRzZWxmLCB3aXRoIHNlcmlhbGl6YXRpb24gZm9yIHRoZSB1bmRlcmx5aW5nIGNvbG9yCisg
ICAgICAgIHR5cGVzLiBVc2UgY2FsbE9uVW5kZXJseWluZ1R5cGUgdG8gZGlzcGF0Y2ggdG8gdGhl
IHJpZ2h0IG9uZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaDoK
KyAgICAgICAgLSBBZGRzIENvbXBvbmVudFRyYWl0cyBzdHJ1Y3QgdG8gZ2V0IGluZm9ybWF0aW9u
IGxpa2UgbWluL21heCB2YWx1ZSBvZiB0aGUgY29tcG9uZW50IHR5cGVzLgorICAgICAgICAtIEFk
ZHMgYHVzaW5nIENvbXBvbmVudFR5cGUgPSBUO2AgdG8gZWFjaCBjb2xvciB0eXBlLCB0byBhbGxv
dyBlYXN5IGFjY2VzcyB0byB0aGUgdHlwZSBpbgorICAgICAgICAgIGRlZHVjZWQgY29udGV4dHMu
CisgICAgICAgIC0gQWRkcyBzdGF0aWMgY29uc3RleHByIENvbG9yU3BhY2UgdG8gZWFjaCBjb2xv
ciB0eXBlIHRoYXQgY3VycmVudGx5IGhhcyBhIENvbG9yU3BhY2UgbWFwcGluZy4gCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29y
ZTo6aXNCbGFjayk6CisgICAgICAgIChXZWJDb3JlOjppc1doaXRlKToKKyAgICAgICAgQWRkIGhl
bHBlcnMgdG8gaW1wbGVtZW50IENvbG9yOjppc0JsYWNrL0NvbG9yOjppc1doaXRlQ29sb3IgZm9y
IGVhY2ggY29sb3IgdHlwZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVk
Q29sb3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVk
Q29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjpFeHRlbmRlZENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkV4dGVuZGVkQ29sb3I6OmNhbGxPblVuZGVybHlpbmdUeXBlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIFJlZHVjZSBkb3duIHRvIGp1c3QgY29uc3RydWN0aW9uLCBtZW1iZXIgYWNjZXNz
IGFuZCB0aGUgY2FsbE9uVW5kZXJseWluZ1R5cGUgaGVscGVyLgorICAgICAgICBJbiBmdXR1cmUg
cmV2aXNpb25zLCBFeHRlbmRlZENvbG9yIHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZXJu
YWwgY2xhc3Mgb2YgQ29sb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29s
b3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6Q29sb3IpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIGNvbnN0cnVjdG9yIGRlbGVn
YXRpb24uCisKIDIwMjAtMDctMTAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIEZpeCBidWlsZCBmb3IgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIUVOQUJMRShSRVZF
QUwpLCBmb3IgZXhhbXBsZSwgdHZPUwpJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI2NDIz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xODI3
LDcgKzE4MjcsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9DdXN0b21QYWludEltYWdlLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRGlz
cGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVk
Q29sb3IuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRQb2ludDNELmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmNw
cApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03MjI4LDcgKzcyMjgsNiBA
QAogCQkzMUQyNkJDNTFGODZEMjY4MDA4RkYyNTUgLyogSlNJbWFnZUJpdG1hcE9wdGlvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbWFnZUJpdG1hcE9wdGlvbnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFEMjZCQzYxRjg2RDI2OTAwOEZGMjU1IC8q
IEpTSW1hZ2VCaXRtYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNJbWFnZUJpdG1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxRDU5MUIx
MTY2OTdBNkMwMEU2QkYwMiAvKiBQbHVnSW5DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUGx1Z0luQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTMxRENERjQxMURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuZGVkQ29sb3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzMURDREY0MjFEQTFDNDU0MDBFQTVCOTMgLyogRXh0ZW5kZWRD
b2xvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbmRlZENvbG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxREVBNDUzMUIzOUY0RDkwMEY3NzE3OCAv
KiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV2ViU3lzdGVtQmFja2Ryb3BMYXllci5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzFERUE0NTQxQjM5RjREOTAwRjc3MTc4IC8qIFdlYlN5c3RlbUJhY2tkcm9w
TGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU3lzdGVtQmFja2Ry
b3BMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk1ODIsOCArMTk1ODEs
OCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNTE1QkUxOTcxRDU0RjZCRDAwREQ3QzY4IC8qIEhJ
REdhbWVwYWQuY3BwICovLAogCQkJCTUxNUJFMTk4MUQ1NEY2QkQwMEREN0M2OCAvKiBISURHYW1l
cGFkLmggKi8sCi0JCQkJNTE1QkUxOTkxRDU0RjZCRDAwREQ3QzY4IC8qIEhJREdhbWVwYWRQcm92
aWRlci5tbSAqLywKIAkJCQk1MTVCRTE5QTFENTRGNkJEMDBERDdDNjggLyogSElER2FtZXBhZFBy
b3ZpZGVyLmggKi8sCisJCQkJNTE1QkUxOTkxRDU0RjZCRDAwREQ3QzY4IC8qIEhJREdhbWVwYWRQ
cm92aWRlci5tbSAqLywKIAkJCQk1MTdFMDNGNDI0QjZCOTYzMDA1NDg5NUEgLyogTXVsdGlHYW1l
cGFkUHJvdmlkZXIuaCAqLywKIAkJCQk1MTdFMDNGNTI0QjZCOTY0MDA1NDg5NUEgLyogTXVsdGlH
YW1lcGFkUHJvdmlkZXIubW0gKi8sCiAJCQkpOwpAQCAtMjU1NTYsNyArMjU1NTUsNiBAQAogCQkJ
CTJEMjlFQ0MyMTkyRUNDODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQu
aCAqLywKIAkJCQkyRDI5RUNDMzE5MkVDQzgzMDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25p
dG9yTWFuYWdlci5jcHAgKi8sCiAJCQkJMkQyOUVDQzQxOTJFQ0M4MzAwOTg0Qjc4IC8qIERpc3Bs
YXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuaCAqLywKLQkJCQkzMURDREY0MTFEQTFDNDU0MDBFQTVC
OTMgLyogRXh0ZW5kZWRDb2xvci5jcHAgKi8sCiAJCQkJMzFEQ0RGNDIxREExQzQ1NDAwRUE1Qjkz
IC8qIEV4dGVuZGVkQ29sb3IuaCAqLywKIAkJCQk2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyog
RXh0ZW5zaW9uc0dMLmggKi8sCiAJCQkJQjI3NTM1M0EwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0
UG9pbnQuY3BwICovLApAQCAtMjY4ODAsNyArMjY4NzgsNiBAQAogCQlDRDk0QTVDQjFGNzFDQjQ2
MDBGNTI1QzUgLyogZW5jcnlwdGVkbWVkaWEgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAotCQkJCUNERTNBRTEzMjRCNDkzNkYwMDEyOEU3RSAvKiBDRE1VdGlsaXRp
ZXMuY3BwICovLAogCQkJCUNEOTRBNUQ5MUY3MUNCOUYwMEY1MjVDNSAvKiBjbGVhcmtleSAqLywK
IAkJCQlDREY3NTY5QjIxNUMyM0E0MDBFRkNCNTAgLyogQ0RNRW5jcnlwdGlvblNjaGVtZS5oICov
LAogCQkJCUNEOTRBNUQxMUY3MUNCNkIwMEY1MjVDNSAvKiBDRE1GYWN0b3J5LmNwcCAqLywKQEAg
LTI2ODk1LDEyICsyNjg5MiwxMyBAQAogCQkJCUNEOTRBNUQ2MUY3MUNCNkQwMEY1MjVDNSAvKiBD
RE1NZXNzYWdlVHlwZS5oICovLAogCQkJCUNEM0NFMTFDMjQwNDUxQUYwMDRCQTAxRCAvKiBDRE1Q
cml2YXRlLmNwcCAqLywKIAkJCQlDRDk0QTVDRjFGNzFDQjZBMDBGNTI1QzUgLyogQ0RNUHJpdmF0
ZS5oICovLAotCQkJCUNERTNBRTEwMjRCNDkxNjkwMDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuaCAq
LywKIAkJCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1RDUgLyogQ0RNUHJveHkuY3BwICovLAogCQkJ
CUNEOTRBNUNGMUY3MUNCNjEwMEY1MjVDNSAvKiBDRE1Qcm94eS5oICovLAogCQkJCUNEOTRBNUND
MUY3MUNCNjkwMEY1MjVDNSAvKiBDRE1SZXF1aXJlbWVudC5oICovLAogCQkJCUNEOTRBNUQwMUY3
MUNCNkIwMEY1MjVDNSAvKiBDRE1SZXN0cmljdGlvbnMuaCAqLywKIAkJCQlDRDk0QTVENTFGNzFD
QjZEMDBGNTI1QzUgLyogQ0RNU2Vzc2lvblR5cGUuaCAqLywKKwkJCQlDREUzQUUxMzI0QjQ5MzZG
MDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmNwcCAqLywKKwkJCQlDREUzQUUxMDI0QjQ5MTY5MDAx
MjhFN0UgLyogQ0RNVXRpbGl0aWVzLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGVuY3J5cHRlZG1l
ZGlhOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTMwMDgyLDYgKzMwMDgwLDcgQEAK
IAkJCQlDRDNDRTEwMzI0MDFBQURBMDA0QkEwMUQgLyogQ0RNUmVzdHJpY3Rpb25zLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDREU1OTU5NzFCRjI2RTIxMDBBMUNCRTggLyogQ0RNU2Vzc2lvbk1lZGlh
U291cmNlQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0QzQ0UxMDQyNDAxQUFEQTAwNEJB
MDFEIC8qIENETVNlc3Npb25UeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlDREUzQUUxMjI0QjQ5
MTZBMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1RkE5MDRD
QTE3OEU2MUY1MDA0QzhBMkQgLyogQ2VydGlmaWNhdGVJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5MUI4RjBCNTIxOTUzRDY1MDAwQzJCMDAgLyogQ2VydGlmaWNhdGVJbmZvQmFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkUzNkZEMTUxNkM3ODI2NTAwRjg4N0MxIC8qIENoYW5nZVZlcnNpb25E
YXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMjE5LDcgKzMxMjE4LDYgQEAKIAkJCQlGMzQ0Qzc1
MzExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJN0EwRTc3MEYxMEMwMEE4ODAwQTAyNzZFIC8qIEluc3BlY3RvckZyb250
ZW5kSG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0E1NDg1ODAxNEUwMkQ1MTAwNkFFMDVBIC8q
IEluc3BlY3Rvckhpc3RvcnkuaCBpbiBIZWFkZXJzICovLAotCQkJCUNERTNBRTEyMjRCNDkxNkEw
MDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QjgxQ0FFMUZB
QTQ0NjIwMDM3RDFFNiAvKiBJbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMjBENjI5MjcxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NjBFNkQyMzBERTMwMzAwNDYxQUFFIC8qIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvblB1YmxpYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjQwMiw2ICsz
MjQwMCw3IEBACiAJCQkJODUwMzFCNDgwQTQ0RUZDNzAwRjk5MkUwIC8qIE1vdXNlUmVsYXRlZEV2
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOURGQzA5OUU2NDkyMDA1NkU1ODEgLyogTW92
ZVNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQjE3MDA2MTRBMkJBQjIw
MEEyQjVEOSAvKiBNdWx0aUNoYW5uZWxSZXNhbXBsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTUx
N0UwM0Y3MjRCNkQ5ODQwMDU0ODk1QSAvKiBNdWx0aUdhbWVwYWRQcm92aWRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMjZGNzU2QjAxQjNCNjVBQzAwMDVERDc5IC8qIE11dGFibGVSYW5nZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2QjExQjNCNjVBQzAwMDVERDc5IC8qIE11dGFibGVSYW5n
ZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM2RjA5MDBBMTQzMjdCNjEwMDY4NTg0OSAvKiBN
dXRhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTMzMjgxLDcgKzMzMjgwLDYgQEAK
IAkJCQlFQ0E2ODBDNzFFNjc3MjQ1MDA3MzFEMjAgLyogU3RyaW5nVXRpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5QjZDNDE1MzEzNDQ5NDkwMDAwODVCNjIgLyogU3RyaW5nV2l0aERpcmVj
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ5Rjc3NzYwRUZFQzYyMDAwOTA4NDlEIC8qIFN0
cm9rZVN0eWxlQXBwbGllci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE3RTAzRjcyNEI2RDk4NDAw
NTQ4OTVBIC8qIE11bHRpR2FtZXBhZFByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTRC
ODIwNTFENkRGMEU1MDA3N0VCRTMgLyogU3RydWN0dXJlZENsb25lLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNDVCQTZCNjIzNzYyMkEzMDA0REZDMDcgLyogU3R5bGVBZGp1c3Rlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkM1RUI2QTMwRTgxREM0RjAwQjI1OTY1IC8qIFN0eWxlQmFja2dyb3VuZERh
dGEuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ0NzMsNiArMzQ0NzEsNyBAQAogCQkJCUNEREUwMkVE
MThCM0VENkQwMENGN0ZGMSAvKiBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uT2JqQy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUNEREUwMkYwMThCNTY1MTMwMENGN0ZGMSAvKiBDRE1TZXNzaW9uQVZTdHJl
YW1TZXNzaW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RFNTk1OUQxQkYyNzU3MTAwQTFDQkU4
IC8qIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMubW0gaW4gU291cmNlcyAqLywKKwkJCQlD
REUzQUUxNDI0QjQ5MzcwMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUExNDA5MEZCMUFBNTFFMUQwMDkxMTkxQSAvKiBDb250ZW50RmlsdGVyVW5ibG9ja0hh
bmRsZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3QUZGNDIzMUVGQjE0NDkwMEI1NDVC
MyAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDZD
Njk2Q0MxRTcyMDVGQzAwNTk3OTM3IC8qIENQVU1vbml0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0zNDgwMiw3ICszNDgwMSw2IEBACiAJCQkJREVDQTdEQjcxRjlFNjdCNjAwRTNCNjYxIC8qIFVu
aWZpZWRTb3VyY2UxNjcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREVDQTdEQjgxRjlFNjdCNjAw
RTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNjguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREVDQTdE
QjkxRjlFNjdCNjAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNjkuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQ0RFM0FFMTQyNEI0OTM3MDAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlERUNBN0RCQTFGOUU2N0I2MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTE3
MC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBN0RGQjFGOUVCMzY0MDBFM0I2NjEgLyogVW5p
ZmllZFNvdXJjZTE3MS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBN0RGQzFGOUVCMzY0MDBF
M0I2NjEgLyogVW5pZmllZFNvdXJjZTE3Mi5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5jcHAJKHJldmlzaW9uIDI2NDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjU4LDcgKzY1OCw3
IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXIKICAgICAgICAgY29s
b3JTcGFjZSA9IENvbG9yU3BhY2U6OkRpc3BsYXlQMzsKICAgICAgICAgYnJlYWs7CiAgICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAg
fQogICAgIGNvbnN1bWVJZGVudChhcmdzKTsKIApAQCAtNjc2LDcgKzY3Niw3IEBAIHN0YXRpYyBD
b2xvciBwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXIKICAgICAgICAgaWYgKCFhbHBoYVBhcmFt
ZXRlcikKICAgICAgICAgICAgIGFscGhhUGFyYW1ldGVyID0gY29uc3VtZU51bWJlcihhcmdzLCBW
YWx1ZVJhbmdlQWxsKTsKICAgICAgICAgaWYgKCFhbHBoYVBhcmFtZXRlcikKLSAgICAgICAgICAg
IHJldHVybiBDb2xvcigpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgICAgICBjb2xv
ckNoYW5uZWxzWzNdID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigxLjAsIGFscGhhUGFyYW1ldGVy
LT5pc1BlcmNlbnRhZ2UoKSA/IChhbHBoYVBhcmFtZXRlci0+ZG91YmxlVmFsdWUoKSAvIDEwMCkg
OiBhbHBoYVBhcmFtZXRlci0+ZG91YmxlVmFsdWUoKSkpOwogICAgIH0KQEAgLTY4NCw5ICs2ODQs
OSBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uUGFyYW1ldGVyCiAgICAgLy8gRklY
TUU6IFN1cHBvcnQgdGhlIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZhbGxiYWNrIGNvbG9yIHZh
bHVlcy4KIAogICAgIGlmICghYXJncy5hdEVuZCgpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsK
LSAgICAKLSAgICByZXR1cm4gbWFrZUV4dGVuZGVkQ29sb3IoY29sb3JDaGFubmVsc1swXSwgY29s
b3JDaGFubmVsc1sxXSwgY29sb3JDaGFubmVsc1syXSwgY29sb3JDaGFubmVsc1szXSwgY29sb3JT
cGFjZSk7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gQ29sb3IgeyBDb2xvckNv
bXBvbmVudHMgeyBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JDaGFubmVsc1swXSksIHN0YXRpY19j
YXN0PGZsb2F0Pihjb2xvckNoYW5uZWxzWzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQ2hh
bm5lbHNbMl0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JDaGFubmVsc1szXSkgfSwgY29sb3JT
cGFjZSB9OwogfQogCiBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHBhcnNlSGV4Q29s
b3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGJvb2wgYWNjZXB0UXVpcmt5Q29sb3JzKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNp
b24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkNvbG9yLmgiCiAKLSNpbmNsdWRlICJBbmltYXRpb25VdGlsaXRpZXMuaCIKICNp
bmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5o
IgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMjYsMjIgKzEyMywy
NiBAQCBmbG9hdCBDb2xvcjo6bHVtaW5hbmNlKCkgY29uc3QKIAogQ29sb3IgQ29sb3I6OmNvbG9y
V2l0aEFscGhhKGZsb2F0IGFscGhhKSBjb25zdAogewotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0g
ICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY29sb3JXaXRoQWxwaGEoYWxwaGEpOwotCi0gICAg
Q29sb3IgcmVzdWx0ID0gY29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoYXNJbmxpbmUoKSwgYWxwaGEp
OwotCi0gICAgLy8gRklYTUU6IFdoeSBpcyBwcmVzZXJ2aW5nIHRoZSBzZW1hbnRpYyBiaXQgZGVz
aXJlZCBhbmQvb3IgY29ycmVjdCBoZXJlPwotICAgIGlmIChpc1NlbWFudGljKCkpCi0gICAgICAg
IHJlc3VsdC50YWdBc1NlbWFudGljKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4g
Y2FsbE9uVW5kZXJseWluZ1R5cGUoV1RGOjptYWtlVmlzaXRvcigKKyAgICAgICAgWyZdIChjb25z
dCBTUkdCQTx1aW50OF90PiYgdW5kZXJseWluZ0NvbG9yKSAtPiBDb2xvciB7CisgICAgICAgICAg
ICBDb2xvciByZXN1bHQgPSBjb2xvcldpdGhPdmVycmlkZW5BbHBoYSh1bmRlcmx5aW5nQ29sb3Is
IGFscGhhKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IFdoeSBpcyBwcmVzZXJ2aW5nIHRoZSBz
ZW1hbnRpYyBiaXQgZGVzaXJlZCBhbmQvb3IgY29ycmVjdCBoZXJlPworICAgICAgICAgICAgaWYg
KGlzU2VtYW50aWMoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChjb25z
dCBhdXRvJiB1bmRlcmx5aW5nQ29sb3IpIC0+IENvbG9yIHsKKyAgICAgICAgICAgIHJldHVybiBj
b2xvcldpdGhPdmVycmlkZW5BbHBoYSh1bmRlcmx5aW5nQ29sb3IsIGFscGhhKTsKKyAgICAgICAg
fQorICAgICkpOwogfQogCiBDb2xvciBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9h
dCBhbHBoYSkgY29uc3QKIHsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4g
YXNFeHRlbmRlZCgpLmludmVydGVkQ29sb3JXaXRoQWxwaGEoYWxwaGEpOwotICAgIHJldHVybiBp
bnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGFzSW5saW5lKCksIGFscGhhKTsKKyAgICBy
ZXR1cm4gY2FsbE9uVW5kZXJseWluZ1R5cGUoWyZdIChjb25zdCBhdXRvJiB1bmRlcmx5aW5nQ29s
b3IpIC0+IENvbG9yIHsKKyAgICAgICAgcmV0dXJuIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGVu
QWxwaGEodW5kZXJseWluZ0NvbG9yLCBhbHBoYSk7CisgICAgfSk7CiB9CiAKIENvbG9yIENvbG9y
OjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2lu
Y2x1ZGUgIlNpbXBsZUNvbG9yLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KIAogI2lmIFVTRShDRykKQEAgLTUxLDYgKzUyLDE4IEBAIHR5cGVk
ZWYgc3RydWN0IF9HZGtSR0JBIEdka1JHQkE7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8g
QWJsZSB0byByZXByZXNlbnQ6CisvLyAgICAtIFNwZWNpYWwgImludmFsaWQgY29sb3IiIHN0YXRl
LCB0cmVhdGVkIGFzIHRyYW5zcGFyZW50IGJsYWNrIGJ1dCBkaXN0aW5ndWlzaGFibGUKKy8vICAg
IC0gNHggOC1iaXQgKDAtMjU1KSBzUkdCQSwgc3RvcmVkIGlubGluZSwgbm8gYWxsb2NhdGlvbgor
Ly8gICAgLSA0eCBmbG9hdCAoMC0xKSBzUkdCQSwgc3RvcmVkIGluIGEgcmVmZXJlbmNlIGNvdW50
ZWQgc3ViLW9iamVjdAorLy8gICAgLSA0eCBmbG9hdCAoMC0xKSBMaW5lYXIgc1JHQkEsIHN0b3Jl
ZCBpbiBhIHJlZmVyZW5jZSBjb3VudGVkIHN1Yi1vYmplY3QKKy8vICAgIC0gNHggZmxvYXQgKDAt
MSkgRGlzcGxheVAzLCBzdG9yZWQgaW4gYSByZWZlcmVuY2UgY291bnRlZCBzdWItb2JqZWN0Cisv
LworLy8gQWRkaXRpb25hbGx5LCB0aGUgaW5saW5lIDgtYml0IHNSR0JBIGNhbiBoYXZlIGFuIG9w
dGlvbmFsICJzZW1hbnRpYyIgYml0IHNldCBvbiBpdCwKKy8vIHdoaWNoIGluZGljYXRlcyB0aGUg
Y29sb3Igb3JpZ2luYXRlZCBmcm9tIGEgQ1NTIHNlbWFudGljIGNvbG9yIG5hbWUuCisvLyBGSVhN
RTogSWYgd2Uga2VlcCB0aGUgInNlbWFudGljIiBiaXQgb24gQ29sb3IsIHdlIHNob3VsZCBleHRl
bmQgc3VwcG9ydCB0byBhbGwgY29sb3JzLAorLy8gbm90IGp1c3QgaW5saW5lIG9uZXMsIGJ5IHVz
aW5nIHRoZSB1bnVzZWQgcG9pbnRlciBiaXRzLgorCiBjbGFzcyBDb2xvciB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC02Myw3ICs3NiwxMCBAQCBwdWJsaWM6CiAg
ICAgQ29sb3IoU1JHQkE8dWludDhfdD4sIFNlbWFudGljVGFnKTsKICAgICBDb2xvcihPcHRpb25h
bDxTUkdCQTx1aW50OF90Pj4sIFNlbWFudGljVGFnKTsKIAotICAgIENvbG9yKFJlZjxFeHRlbmRl
ZENvbG9yPiYmKTsKKyAgICBDb2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+LCBDb2xvclNwYWNl
KTsKKyAgICBDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4mKTsKKyAgICBDb2xvcihjb25zdCBMaW5l
YXJTUkdCQTxmbG9hdD4mKTsKKyAgICBDb2xvcihjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CiAK
ICAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZUVtcHR5VmFsdWVUeXBlKTsKICAgICBl
eHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpOwpAQCAtNzIsMzQg
Kzg4LDM0IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihjb25zdCBDb2xvciYp
OwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKENvbG9yJiYpOwogCisgICAgV0VCQ09SRV9FWFBP
UlQgQ29sb3ImIG9wZXJhdG9yPShjb25zdCBDb2xvciYpOworICAgIFdFQkNPUkVfRVhQT1JUIENv
bG9yJiBvcGVyYXRvcj0oQ29sb3ImJik7CisKICAgICB+Q29sb3IoKTsKIAotICAgIGJvb2wgaXNW
YWxpZCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSB8fCAobV9jb2xvckRhdGEuaW5saW5l
Q29sb3JBbmRGbGFncyAmIHZhbGlkSW5saW5lQ29sb3JCaXQpOyB9CisgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0OwogCi0gICAgLy8gVHJ1ZSBpZiB0aGUgY29sb3Igb3JpZ2luYXRlZCBmcm9tIGEg
Q1NTIHNlbWFudGljIGNvbG9yIG5hbWUuCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1
cm4gaXNFeHRlbmRlZCgpIHx8IChtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzICYgdmFs
aWRJbmxpbmVDb2xvckJpdCk7IH0KICAgICBib29sIGlzU2VtYW50aWMoKSBjb25zdCB7IHJldHVy
biBpc0lubGluZSgpICYmIChtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzICYgaXNTZW1h
bnRpY0lubGluZUNvbG9yQml0KTsgfQogCiAgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0
dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID09IDEuMCA6IGFzSW5saW5l
KCkuYWxwaGEgPT0gMjU1OyB9CiAgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBp
c0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IGFzSW5saW5lKCkuYWxw
aGEgPiAwOyB9Ci0KICAgICB1aW50OF90IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRl
ZCgpID8gY29udmVydFRvQ29tcG9uZW50Qnl0ZShhc0V4dGVuZGVkKCkuYWxwaGEoKSkgOiBhc0lu
bGluZSgpLmFscGhhOyB9CiAgICAgZmxvYXQgYWxwaGFBc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4g
aXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgOiBjb252ZXJ0VG9Db21wb25lbnRG
bG9hdChhc0lubGluZSgpLmFscGhhKTsgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Owor
ICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGx1bWluYW5jZSgpIGNvbnN0OworICAgIFdFQkNPUkVf
RVhQT1JUIGZsb2F0IGxpZ2h0bmVzcygpIGNvbnN0OyAvLyBGSVhNRTogUmVwbGFjZSByZW1haW5p
bmcgdXNlcyB3aXRoIGx1bWluYW5jZS4KIAotICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxD
b2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+PiBjb2xvclNwYWNlQW5kQ29tcG9uZW50
cygpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGRlY2x0eXBlKGF1dG8p
IGNhbGxPblVuZGVybHlpbmdUeXBlKEZ1bmN0b3ImJikgY29uc3Q7CiAKICAgICAvLyBUaGlzIHdp
bGwgY29udmVydCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBpbnRvIHNSR0IuCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4gdG9TUkdCQUxvc3N5KCkgY29uc3Q7CiAKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0
Pj4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKKwogICAgIFdFQkNPUkVfRVhQT1JU
IENvbG9yIGxpZ2h0ZW5lZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGRhcmtl
bmVkKCkgY29uc3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBsdW1pbmFuY2UoKSBjb25z
dDsKLQotICAgIC8vIEZJWE1FOiBSZXBsYWNlIHJlbWFpbmluZyB1c2VzIHdpdGggbHVtaW5hbmNl
LgotICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGxpZ2h0bmVzcygpIGNvbnN0OwotCiAgICAgQ29s
b3IgaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0Owog
ICAgIENvbG9yIGludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0OwogCkBA
IC0xNDQsOSArMTYwLDYgQEAgcHVibGljOgogICAgIGNvbnN0IEV4dGVuZGVkQ29sb3ImIGFzRXh0
ZW5kZWQoKSBjb25zdDsKICAgICBTUkdCQTx1aW50OF90PiBhc0lubGluZSgpIGNvbnN0OwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgQ29sb3ImIG9wZXJhdG9yPShjb25zdCBDb2xvciYpOwotICAgIFdF
QkNPUkVfRVhQT1JUIENvbG9yJiBvcGVyYXRvcj0oQ29sb3ImJik7Ci0KICAgICAvLyBFeHRlbmRl
ZCBhbmQgbm9uLWV4dGVuZGVkIGNvbG9ycyB3aWxsIGFsd2F5cyBiZSBub24tZXF1YWwuCiAgICAg
ZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpOwog
ICAgIGZyaWVuZCBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiBh
LCBjb25zdCBDb2xvciYgYik7CkBAIC0xNTksNyArMTcyLDEyIEBAIHB1YmxpYzoKICAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+IGRlY29kZShEZWNvZGVy
Jik7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBzZXRJbmxpbmVDb2xvcihTUkdCQTx1aW50OF90Pik7
CisgICAgQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYpOworCisgICAgdm9pZCBzZXRDb2xvcihT
UkdCQTx1aW50OF90Pik7CisgICAgdm9pZCBzZXRDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4mKTsK
KyAgICB2b2lkIHNldENvbG9yKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYpOworICAgIHZvaWQg
c2V0Q29sb3IoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOwogICAgIHZvaWQgc2V0RXh0ZW5kZWRD
b2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJik7CiAKICAgICB2b2lkIHRhZ0FzU2VtYW50aWMoKSB7
IG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgfD0gaXNTZW1hbnRpY0lubGluZUNvbG9y
Qml0OyB9CkBAIC0yMjcsMjkgKzI0NSw1OSBAQCBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nU2Vt
YW50aWNDb2xvcihjCiAKIGlubGluZSBDb2xvcjo6Q29sb3IoU1JHQkE8dWludDhfdD4gY29sb3Ip
CiB7Ci0gICAgc2V0SW5saW5lQ29sb3IoY29sb3IpOworICAgIHNldENvbG9yKGNvbG9yKTsKIH0K
IAogaW5saW5lIENvbG9yOjpDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gY29sb3IpCiB7
CiAgICAgaWYgKGNvbG9yKQotICAgICAgICBzZXRJbmxpbmVDb2xvcigqY29sb3IpOworICAgICAg
ICBzZXRDb2xvcigqY29sb3IpOwogfQogCiBpbmxpbmUgQ29sb3I6OkNvbG9yKFNSR0JBPHVpbnQ4
X3Q+IGNvbG9yLCBTZW1hbnRpY1RhZykKIHsKLSAgICBzZXRJbmxpbmVDb2xvcihjb2xvcik7Cisg
ICAgc2V0Q29sb3IoY29sb3IpOwogICAgIHRhZ0FzU2VtYW50aWMoKTsKIH0KIAogaW5saW5lIENv
bG9yOjpDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gY29sb3IsIFNlbWFudGljVGFnKQog
ewogICAgIGlmIChjb2xvcikgewotICAgICAgICBzZXRJbmxpbmVDb2xvcigqY29sb3IpOworICAg
ICAgICBzZXRDb2xvcigqY29sb3IpOwogICAgICAgICB0YWdBc1NlbWFudGljKCk7CiAgICAgfQog
fQogCitpbmxpbmUgQ29sb3I6OkNvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4gY29tcG9uZW50
cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIHN3aXRjaCAoY29sb3JTcGFjZSkgewor
ICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoKKyAgICAgICAgc2V0Q29sb3IoYXNTUkdCQShjb21w
b25lbnRzKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclJH
QjoKKyAgICAgICAgc2V0Q29sb3IoYXNMaW5lYXJTUkdCQShjb21wb25lbnRzKSk7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoKKyAgICAgICAgc2V0Q29s
b3IoYXNEaXNwbGF5UDMoY29tcG9uZW50cykpOworICAgICAgICByZXR1cm47CisgICAgfQorfQor
CitpbmxpbmUgQ29sb3I6OkNvbG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAg
c2V0Q29sb3IoY29sb3IpOworfQorCitpbmxpbmUgQ29sb3I6OkNvbG9yKGNvbnN0IExpbmVhclNS
R0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAgc2V0Q29sb3IoY29sb3IpOworfQorCitpbmxpbmUg
Q29sb3I6OkNvbG9yKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQoreworICAgIHNldENv
bG9yKGNvbG9yKTsKK30KKwogaW5saW5lIENvbG9yOjpDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4m
JiBleHRlbmRlZENvbG9yKQogewogICAgIHNldEV4dGVuZGVkQ29sb3IoV1RGTW92ZShleHRlbmRl
ZENvbG9yKSk7CkBAIC0yODEsMTggKzMyOSwzMyBAQCBpbmxpbmUgQ29sb3I6On5Db2xvcigpCiBp
bmxpbmUgdW5zaWduZWQgQ29sb3I6Omhhc2goKSBjb25zdAogewogICAgIGlmIChpc0V4dGVuZGVk
KCkpCi0gICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuaGFzaCgpOworICAgICAgICByZXR1cm4g
Y29tcHV0ZUhhc2goYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKSwgYXNFeHRlbmRlZCgpLmNvbG9y
U3BhY2UoKSk7CiAgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2NvbG9yRGF0YS5pbmxpbmVDb2xv
ckFuZEZsYWdzKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4gQ29sb3I6OnRv
U1JHQkFMb3NzeSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBkZWNsdHlwZShh
dXRvKSBDb2xvcjo6Y2FsbE9uVW5kZXJseWluZ1R5cGUoRnVuY3RvciYmIGZ1bmN0b3IpIGNvbnN0
CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS50
b1NSR0JBTG9zc3k8VD4oKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIHVp
bnQ4X3Q+KQotICAgICAgICByZXR1cm4gYXNJbmxpbmUoKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVu
dEZsb2F0cyhhc0lubGluZSgpKTsKKyAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5jYWxsT25V
bmRlcmx5aW5nVHlwZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOworICAgIHJldHVy
biBmdW5jdG9yKGFzSW5saW5lKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTUkdCQTxU
PiBDb2xvcjo6dG9TUkdCQUxvc3N5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2FsbE9uVW5kZXJs
eWluZ1R5cGUoV1RGOjptYWtlVmlzaXRvcigKKyAgICAgICAgW10gKGNvbnN0IFNSR0JBPHVpbnQ4
X3Q+JiBjb2xvcikgeworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxU
LCB1aW50OF90PikKKyAgICAgICAgICAgICAgICByZXR1cm4gY29sb3I7CisgICAgICAgICAgICBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKGNvbG9yKTsKKyAgICAgICAgfSwKKyAgICAg
ICAgW10gKGNvbnN0IGF1dG8mIGNvbG9yKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfc2FtZV92PFQsIHVpbnQ4X3Q+KQorICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0
VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBKGNvbG9yKSk7CisgICAgICAgICAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9T
UkdCQShjb2xvcik7CisgICAgICAgIH0KKyAgICApKTsKIH0KIAogaW5saW5lIENvbG9yIENvbG9y
OjppbnZlcnRlZENvbG9yV2l0aEFscGhhKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3QKQEAg
LTMyNywxMiArMzkwLDI3IEBAIGlubGluZSBTUkdCQTx1aW50OF90PiBDb2xvcjo6YXNJbmxpbmUo
KSAKICAgICByZXR1cm4gYXNTUkdCQShQYWNrZWQ6OlJHQkEgeyBzdGF0aWNfY2FzdDx1aW50MzJf
dD4obV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyA+PiAzMikgfSk7CiB9CiAKLWlubGlu
ZSB2b2lkIENvbG9yOjpzZXRJbmxpbmVDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikKK2lubGlu
ZSB2b2lkIENvbG9yOjpzZXRDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikKIHsKICAgICBtX2Nv
bG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KFBhY2tl
ZDo6UkdCQSB7IGNvbG9yIH0udmFsdWUpIDw8IDMyOwogICAgIHRhZ0FzVmFsaWQoKTsKIH0KIAor
aW5saW5lIHZvaWQgQ29sb3I6OnNldENvbG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCit7
CisgICAgc2V0RXh0ZW5kZWRDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoY29sb3IpKTsKK30K
KworaW5saW5lIHZvaWQgQ29sb3I6OnNldENvbG9yKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYg
Y29sb3IpCit7CisgICAgc2V0RXh0ZW5kZWRDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoY29s
b3IpKTsKK30KKworaW5saW5lIHZvaWQgQ29sb3I6OnNldENvbG9yKGNvbnN0IERpc3BsYXlQMzxm
bG9hdD4mIGNvbG9yKQoreworICAgIHNldEV4dGVuZGVkQ29sb3IoRXh0ZW5kZWRDb2xvcjo6Y3Jl
YXRlKGNvbG9yKSk7Cit9CisKIGlubGluZSB2b2lkIENvbG9yOjpzZXRFeHRlbmRlZENvbG9yKFJl
ZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCiB7CiAgICAgLy8gWmVybyB0aGUgdW5p
b24sIGp1c3QgaW4gY2FzZSBhIDMyLWJpdCBzeXN0ZW0gb25seSBhc3NpZ25zIHRoZQpAQCAtMzQ0
LDIwICs0MjIsMTkgQEAgaW5saW5lIHZvaWQgQ29sb3I6OnNldEV4dGVuZGVkQ29sb3IoUmVmPAog
CiBpbmxpbmUgYm9vbCBDb2xvcjo6aXNCbGFja0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
LSAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gY29sb3IuYXNFeHRl
bmRlZCgpLmlzQmxhY2soKTsKLSAgICByZXR1cm4gY29sb3IuYXNJbmxpbmUoKSA9PSBDb2xvcjo6
YmxhY2s7CisgICAgcmV0dXJuIGNvbG9yLmNhbGxPblVuZGVybHlpbmdUeXBlKFtdIChjb25zdCBh
dXRvJiBjb2xvcikgeworICAgICAgICByZXR1cm4gV2ViQ29yZTo6aXNCbGFjayhjb2xvcik7Cisg
ICAgfSk7CiB9CiAKIGlubGluZSBib29sIENvbG9yOjppc1doaXRlQ29sb3IoY29uc3QgQ29sb3Im
IGNvbG9yKQogewotICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBj
b2xvci5hc0V4dGVuZGVkKCkuaXNXaGl0ZSgpOwotICAgIHJldHVybiBjb2xvci5hc0lubGluZSgp
ID09IENvbG9yOjp3aGl0ZTsKKyAgICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJseWluZ1R5cGUo
W10gKGNvbnN0IGF1dG8mIGNvbG9yKSB7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjppc1doaXRl
KGNvbG9yKTsKKyAgICB9KTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ29s
b3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBDb2xvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgaWYg
KGlzRXh0ZW5kZWQoKSkgewogICAgICAgICBlbmNvZGVyIDw8IHRydWU7CkBAIC0zODUsOCArNDYy
LDcgQEAgdm9pZCBDb2xvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbgogICAgIGVuY29k
ZXIgPDwgUGFja2VkOjpSR0JBIHsgYXNJbmxpbmUoKSB9LnZhbHVlOwogfQogCi10ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8Q29sb3I+IENvbG9yOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+IE9wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgYm9vbCBpc0V4dGVuZGVkOwogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoaXNFeHRlbmRlZCkpCkBAIC00MDgsNyArNDg0LDcgQEAgT3B0aW9uYWw8
Q29sb3I+IENvbG9yOjpkZWNvZGUoRGVjb2RlciYgZAogICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb2xvclNwYWNlKSkKICAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiBDb2xvciB7IEV4dGVu
ZGVkQ29sb3I6OmNyZWF0ZShjMSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSkgfTsKKyAgICAg
ICAgcmV0dXJuIENvbG9yIHsgRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKHsgYzEsIGMyLCBjMywgYWxw
aGEgfSwgY29sb3JTcGFjZSkgfTsKICAgICB9CiAKICAgICBib29sIGlzVmFsaWQ7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24u
aAkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JDb252ZXJzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDMxICsyNSwzNSBAQAogCiAj
cHJhZ21hIG9uY2UKIAotbmFtZXNwYWNlIFdlYkNvcmUgeworI2luY2x1ZGUgIkNvbG9yVHlwZXMu
aCIKIAotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBDTVlLQTsKLXRlbXBsYXRlPHR5cGVuYW1l
PiBzdHJ1Y3QgRGlzcGxheVAzOwotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBIU0xBOwotdGVt
cGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBMaW5lYXJEaXNwbGF5UDM7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZT4gc3RydWN0IExpbmVhclNSR0JBOwotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBTUkdCQTsK
K25hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gVGhlc2UgYXJlIHRoZSBzdGFuZGFyZCBzUkdCIDwt
PiBMaW5lYXJSR0IgLyBEaXNwbGF5UDMgPC0+IExpbmVhckRpc3BsYXlQMyBjb252ZXJzaW9uIGZ1
bmN0aW9ucyAoaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQikuCiBmbG9hdCBsaW5l
YXJUb1JHQkNvbG9yQ29tcG9uZW50KGZsb2F0KTsKIGZsb2F0IHJnYlRvTGluZWFyQ29sb3JDb21w
b25lbnQoZmxvYXQpOwogCi1MaW5lYXJTUkdCQTxmbG9hdD4gdG9MaW5lYXJTUkdCQShjb25zdCBT
UkdCQTxmbG9hdD4mKTsKLVNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IExpbmVhclNSR0JBPGZs
b2F0PiYpOworV0VCQ09SRV9FWFBPUlQgTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEo
Y29uc3QgU1JHQkE8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdC
QShjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mKTsKIAotTGluZWFyRGlzcGxheVAzPGZsb2F0PiB0
b0xpbmVhckRpc3BsYXlQMyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7Ci1EaXNwbGF5UDM8Zmxv
YXQ+IHRvRGlzcGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mKTsKK1dFQkNPUkVf
RVhQT1JUIExpbmVhckRpc3BsYXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3QgRGlz
cGxheVAzPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgRGlzcGxheVAzPGZsb2F0PiB0b0Rpc3Bs
YXlQMyhjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+Jik7CiAKLVNSR0JBPGZsb2F0PiB0b1NS
R0JBKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsKLURpc3BsYXlQMzxmbG9hdD4gdG9EaXNwbGF5
UDMoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9T
UkdCQShjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBEaXNwbGF5UDM8
ZmxvYXQ+IHRvRGlzcGxheVAzKGNvbnN0IFNSR0JBPGZsb2F0PiYpOwogCiBXRUJDT1JFX0VYUE9S
VCBIU0xBPGZsb2F0PiB0b0hTTEEoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiBXRUJDT1JFX0VYUE9S
VCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBIU0xBPGZsb2F0PiYpOwogCiBTUkdCQTxmbG9h
dD4gdG9TUkdCQShjb25zdCBDTVlLQTxmbG9hdD4mKTsKIAorCisvLyBJZGVudGl0eSBjb252ZXJz
aW9ucyAodXNlZnVsIGZvciBnZW5lcmljIGNvbnRleHRzKQorCitjb25zdGV4cHIgU1JHQkE8Zmxv
YXQ+IHRvU1JHQkEoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikgeyByZXR1cm4gY29sb3I7IH0K
K2NvbnN0ZXhwciBMaW5lYXJTUkdCQTxmbG9hdD4gdG9MaW5lYXJTUkdCQShjb25zdCBMaW5lYXJT
UkdCQTxmbG9hdD4mIGNvbG9yKSB7IHJldHVybiBjb2xvcjsgfQorY29uc3RleHByIERpc3BsYXlQ
MzxmbG9hdD4gdG9EaXNwbGF5UDMoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYgY29sb3IpIHsgcmV0
dXJuIGNvbG9yOyB9Citjb25zdGV4cHIgTGluZWFyRGlzcGxheVAzPGZsb2F0PiB0b0xpbmVhckRp
c3BsYXlQMyhjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikgeyByZXR1cm4gY29s
b3I7IH0KK2NvbnN0ZXhwciBIU0xBPGZsb2F0PiB0b0hTTEEoY29uc3QgSFNMQTxmbG9hdD4mIGNv
bG9yKSB7IHJldHVybiBjb2xvcjsgfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFs
aXphdGlvbi5jcHAJKHJldmlzaW9uIDI2NDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw0
NSArMTAwLDg3IEBAIHN0YXRpYyBBU0NJSUxpdGVyYWwgc2VyaWFsaXphdGlvbihDb2xvclMKICAg
ICByZXR1cm4gIiJfczsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgRXh0
ZW5kZWRDb2xvciYgY29sb3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBT
dHJpbmcgc2VyaWFsaXphdGlvbihjb25zdCBDb2xvclR5cGUmIGNvbG9yKQogewotICAgIGF1dG8g
W2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yLmNvbXBvbmVudHMoKTsKKyAgICBhdXRvIFtjMSwg
YzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKICAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFs
KGFscGhhLCAxLjBmKSkKLSAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIsIHNlcmlh
bGl6YXRpb24oY29sb3IuY29sb3JTcGFjZSgpKSwgJyAnLCBjMSwgJyAnLCBjMiwgJyAnLCBjMywg
JyknKTsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiY29sb3IoIiwgc2VyaWFsaXphdGlvbihjb2xv
ci5jb2xvclNwYWNlKCkpLCAnICcsIGMxLCAnICcsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEs
ICcpJyk7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBzZXJpYWxpemF0aW9u
KGNvbG9yLmNvbG9yU3BhY2UpLCAnICcsIGMxLCAnICcsIGMyLCAnICcsIGMzLCAnKScpOworICAg
IHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBzZXJpYWxpemF0aW9uKGNvbG9yLmNvbG9yU3Bh
Y2UpLCAnICcsIGMxLCAnICcsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7CiB9CiAK
LVN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBFeHRlbmRlZENvbG9yJiBjb2xvcikK
Ky8vIFNSR0JBPGZsb2F0PiBvdmVybG9hZHMKKworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1Mo
Y29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbihj
b2xvcik7Cit9CisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBTUkdCQTxmbG9h
dD4mIGNvbG9yKQogewotICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yKTsKKyAg
ICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7CiB9CiAKLVN0cmluZyBzZXJpYWxpemF0aW9u
Rm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBFeHRlbmRlZENvbG9yJiBjb2xvcikKK1N0cmluZyBz
ZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9y
KQogewotICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yKTsKKyAgICByZXR1cm4g
c2VyaWFsaXphdGlvbihjb2xvcik7CiB9CiAKKy8vIExpbmVhclNSR0JBPGZsb2F0PiBvdmVybG9h
ZHMKKworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+
JiBjb2xvcikKK3sKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7Cit9CisKK1N0cmlu
ZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQor
eworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKK30KKworU3RyaW5nIHNlcmlhbGl6
YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3Ip
Cit7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworfQorCisvLyBEaXNwbGF5UDM8
ZmxvYXQ+IG92ZXJsb2FkcworCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBEaXNw
bGF5UDM8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7
Cit9CisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+
JiBjb2xvcikKK3sKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7Cit9CisKK1N0cmlu
ZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+
JiBjb2xvcikKK3sKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7Cit9CisKKwogLy8g
Q29sb3Igb3ZlcmxvYWRzCiAKIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IENvbG9y
JiBjb2xvcikKIHsKLSAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4g
c2VyaWFsaXphdGlvbkZvckNTUyhjb2xvci5hc0V4dGVuZGVkKCkpOwotICAgIHJldHVybiBzZXJp
YWxpemF0aW9uRm9yQ1NTKGNvbG9yLmFzSW5saW5lKCkpOworICAgIHJldHVybiBjb2xvci5jYWxs
T25VbmRlcmx5aW5nVHlwZShbXSAoYXV0byBjKSB7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0
aW9uRm9yQ1NTKGMpOworICAgIH0pOwogfQogCiBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwo
Y29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAg
ICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9ySFRNTChjb2xvci5hc0V4dGVuZGVkKCkpOwotICAg
IHJldHVybiBzZXJpYWxpemF0aW9uRm9ySFRNTChjb2xvci5hc0lubGluZSgpKTsKKyAgICByZXR1
cm4gY29sb3IuY2FsbE9uVW5kZXJseWluZ1R5cGUoW10gKGF1dG8gYykgeworICAgICAgICByZXR1
cm4gc2VyaWFsaXphdGlvbkZvckhUTUwoYyk7CisgICAgfSk7CiB9CiAKIFN0cmluZyBzZXJpYWxp
emF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYg
KGNvbG9yLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JSZW5k
ZXJUcmVlQXNUZXh0KGNvbG9yLmFzRXh0ZW5kZWQoKSk7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRp
b25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yLmFzSW5saW5lKCkpOworICAgIHJldHVybiBjb2xv
ci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoYXV0byBjKSB7CisgICAgICAgIHJldHVybiBzZXJp
YWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjKTsKKyAgICB9KTsKIH0KIAogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxp
emF0aW9uLmgJKHJldmlzaW9uIDI2NDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw5
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbG9yOwotY2xhc3MgRXh0ZW5kZWRD
b2xvcjsKIAordGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBEaXNwbGF5UDM7Cit0ZW1wbGF0ZTx0
eXBlbmFtZT4gc3RydWN0IExpbmVhclNSR0JBOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBT
UkdCQTsKIAogLy8gc2VyaWFsaXphdGlvbkZvckhUTUwgcmV0dXJucyB0aGUgY29sb3Igc2VyaWFs
aXplZCBhY2NvcmRpbmcgdG8gSFRNTDUgPGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVs
dGlwYWdlL3NjcmlwdGluZy5odG1sI2ZpbGwtYW5kLXN0cm9rZS1zdHlsZXM+ICgxMCBTZXB0ZW1i
ZXIgMjAxNSkKQEAgLTQwLDkgKzQxLDE3IEBAIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxp
emF0aW9uRm9yQ1MKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChT
UkdCQTx1aW50OF90Pik7CiBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJl
bmRlclRyZWVBc1RleHQoU1JHQkE8dWludDhfdD4pOwogCi1XRUJDT1JFX0VYUE9SVCBTdHJpbmcg
c2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBFeHRlbmRlZENvbG9yJik7Ci1XRUJDT1JFX0VYUE9S
VCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgRXh0ZW5kZWRDb2xvciYpOwotV0VC
Q09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0
IEV4dGVuZGVkQ29sb3ImKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9y
Q1NTKGNvbnN0IFNSR0JBPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6
YXRpb25Gb3JIVE1MKGNvbnN0IFNSR0JBPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IFNSR0JBPGZsb2F0PiYpOwor
CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBMaW5lYXJT
UkdCQTxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRN
TChjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJp
YWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mKTsK
KworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgRGlzcGxh
eVAzPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1M
KGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxp
emF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CiAKIFdF
QkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IENvbG9yJik7CiBX
RUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgQ29sb3ImKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgJ
KHJldmlzaW9uIDI2NDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDMxIEBACiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkNvbG9yU3BhY2Uu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29tcG9uZW50VHJhaXRzOworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb21wb25lbnRUcmFpdHM8dWlu
dDhfdD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBtaW5WYWx1ZSA9IDA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1aW50OF90IG1heFZhbHVlID0gMjU1OworfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQ29tcG9uZW50VHJhaXRzPGZsb2F0PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBm
bG9hdCBtaW5WYWx1ZSA9IDAuMGY7CisgICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBtYXhWYWx1
ZSA9IDEuMGY7Cit9OworCisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBTUkdCQSB7CiAg
ICAgVCByZWQ7CiAgICAgVCBncmVlbjsKICAgICBUIGJsdWU7CiAgICAgVCBhbHBoYTsKKworICAg
IHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOworICAgIHN0YXRpYyBjb25zdGV4cHIgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQjsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IFNSR0JBKFQsIFQsIFQsIFQpIC0+IFNSR0JBPFQ+OwpAQCAtNjQsNiArODEsOSBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTGluZWFyU1JHQkEgCiAgICAgVCBncmVlbjsKICAgICBU
IGJsdWU7CiAgICAgVCBhbHBoYTsKKworICAgIHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOworICAg
IHN0YXRpYyBjb25zdGV4cHIgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6TGlu
ZWFyUkdCOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gTGluZWFyU1JHQkEoVCwgVCwgVCwg
VCkgLT4gTGluZWFyU1JHQkE8VD47CkBAIC05NCw2ICsxMTQsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgRGlzcGxheVAzIHsKICAgICBUIGdyZWVuOwogICAgIFQgYmx1ZTsKICAgICBU
IGFscGhhOworCisgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpEaXNwbGF5UDM7CiB9Owog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBEaXNwbGF5UDMoVCwgVCwgVCwgVCkgLT4gRGlzcGxheVAz
PFQ+OwpAQCAtMTI0LDYgKzE0Nyw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMaW5l
YXJEaXNwbGEKICAgICBUIGdyZWVuOwogICAgIFQgYmx1ZTsKICAgICBUIGFscGhhOworCisgICAg
dXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBMaW5l
YXJEaXNwbGF5UDMoVCwgVCwgVCwgVCkgLT4gTGluZWFyRGlzcGxheVAzPFQ+OwpAQCAtMTU0LDYg
KzE3OSw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIU0xBIHsKICAgICBUIHNhdHVy
YXRpb247CiAgICAgVCBsaWdodG5lc3M7CiAgICAgVCBhbHBoYTsKKworICAgIHVzaW5nIENvbXBv
bmVudFR5cGUgPSBUOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gSFNMQShULCBULCBULCBU
KSAtPiBIU0xBPFQ+OwpAQCAtMTg2LDYgKzIxMyw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDTVlLQSB7CiAgICAgVCB5ZWxsb3c7CiAgICAgVCBibGFjazsKICAgICBUIGFscGhhOwor
CisgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBDTVlLQShULCBULCBULCBULCBUKSAtPiBDTVlLQTxUPjsKQEAgLTIwNiw2ICsyMzUsOCBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgWFlaQSB7CiAgICAgVCB5OwogICAgIFQgejsKICAg
ICBUIGFscGhhOworCisgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CiB9OwogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBYWVpBKFQsIFQsIFQsIFQpIC0+IFhZWkE8VD47CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHJldmlz
aW9uIDI2NDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRp
bGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDkgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgYwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBj
b25zdGV4cHIgQ29sb3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3Qg
Q29sb3JUeXBlJiwgdWludDhfdCBvdmVycmlkZUFscGhhKTsKIHRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZT4gQ29sb3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3Qg
Q29sb3JUeXBlJiwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZT4gY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmKTsKK3RlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xv
clR5cGUmKTsKKwogY29uc3RleHByIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90
KTsKIGNvbnN0ZXhwciB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QpOwogCkBAIC0x
OTIsNiArMTk1LDIzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGkK
ICAgICByZXR1cm4gY29weTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25z
dGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCit7CisgICAgY29uc3Rl
eHByIGF1dG8gbWluID0gQ29tcG9uZW50VHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9u
ZW50VHlwZT46Om1pblZhbHVlOworICAgIGNvbnN0ZXhwciBhdXRvIG1heCA9IENvbXBvbmVudFRy
YWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+OjptYXhWYWx1ZTsKKworICAg
IGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOworICAgIHJldHVybiBjMSA9PSBtaW4g
JiYgYzIgPT0gbWluICYmIGMzID09IG1pbiAmJiBhbHBoYSA9PSBtYXg7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5
cGUmIGNvbG9yKQoreworICAgIGNvbnN0ZXhwciBhdXRvIG1heCA9IENvbXBvbmVudFRyYWl0czx0
eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+OjptYXhWYWx1ZTsKKworICAgIGF1dG8g
W2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOworICAgIHJldHVybiBjMSA9PSBtYXggJiYgYzIg
PT0gbWF4ICYmIGMzID09IG1heCAmJiBhbHBoYSA9PSBtYXg7Cit9CisKIGNvbnN0ZXhwciB1aW50
MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCB2YWx1ZSkKIHsKICAgICByZXR1cm4gKHZh
bHVlIDw8IDgpIC0gdmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9FeHRlbmRlZENvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAJKG5vbmV4aXN0ZW50
KQpAQCAtMSw5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkQ29sb3IuaCIK
LQotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiQ29sb3JDb252ZXJzaW9uLmgiCi0jaW5j
bHVkZSAiQ29sb3JUeXBlcy5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KLSNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZjxFeHRlbmRlZENv
bG9yPiBFeHRlbmRlZENvbG9yOjpjcmVhdGUoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjMywg
ZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKLXsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBFeHRlbmRlZENvbG9yKGMxLCBjMiwgYzMsIGFscGhhLCBjb2xvclNwYWNlKSk7Ci19
Ci0KLXVuc2lnbmVkIEV4dGVuZGVkQ29sb3I6Omhhc2goKSBjb25zdAotewotICAgIGF1dG8gW2Mx
LCBjMiwgYzMsIGFscGhhXSA9IGNvbXBvbmVudHMoKTsKLSAgICByZXR1cm4gY29tcHV0ZUhhc2go
YzEsIGMyLCBjMywgYWxwaGEsIG1fY29sb3JTcGFjZSk7Ci19Ci0KLVJlZjxFeHRlbmRlZENvbG9y
PiBFeHRlbmRlZENvbG9yOjpjb2xvcldpdGhBbHBoYShmbG9hdCBvdmVycmlkZUFscGhhKSBjb25z
dAotewotICAgIGF1dG8gW2MxLCBjMiwgYzMsIGV4aXN0aW5nQWxwaGFdID0gY29tcG9uZW50cygp
OwotICAgIHJldHVybiBFeHRlbmRlZENvbG9yOjpjcmVhdGUoYzEsIGMyLCBjMywgb3ZlcnJpZGVB
bHBoYSwgY29sb3JTcGFjZSgpKTsKLX0KLQotUmVmPEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29s
b3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgb3ZlcnJpZGVBbHBoYSkgY29uc3QKLXsK
LSAgICBhdXRvIFtjMSwgYzIsIGMzLCBleGlzdGluZ0FscGhhXSA9IGNvbXBvbmVudHMoKTsKLSAg
ICByZXR1cm4gRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKDEuMGYgLSBjMSwgMS4wZiAtIGMyLCAxLjBm
IC0gYzMsIG92ZXJyaWRlQWxwaGEsIGNvbG9yU3BhY2UoKSk7Ci19Ci0KLVNSR0JBPGZsb2F0PiBF
eHRlbmRlZENvbG9yOjp0b1NSR0JBRmxvYXRDb21wb25lbnRzTG9zc3koKSBjb25zdAotewotICAg
IHN3aXRjaCAobV9jb2xvclNwYWNlKSB7Ci0gICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgotICAg
ICAgICByZXR1cm4gYXNTUkdCQShtX2NvbXBvbmVudHMpOwotICAgIGNhc2UgQ29sb3JTcGFjZTo6
TGluZWFyUkdCOgotICAgICAgICByZXR1cm4gdG9TUkdCQShhc0xpbmVhclNSR0JBKG1fY29tcG9u
ZW50cykpOwotICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgotICAgICAgICByZXR1cm4g
dG9TUkdCQShhc0Rpc3BsYXlQMyhtX2NvbXBvbmVudHMpKTsKLSAgICB9Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgMCwgMCwgMCwgMCB9OwotfQotCi1ib29sIEV4dGVu
ZGVkQ29sb3I6OmlzV2hpdGUoKSBjb25zdAotewotICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhh
XSA9IGNvbXBvbmVudHMoKTsKLSAgICByZXR1cm4gYzEgPT0gMSAmJiBjMiA9PSAxICYmIGMzID09
IDEgJiYgYWxwaGEgPT0gMTsKLX0KLQotYm9vbCBFeHRlbmRlZENvbG9yOjppc0JsYWNrKCkgY29u
c3QKLXsKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb21wb25lbnRzKCk7Ci0gICAg
cmV0dXJuICFjMSAmJiAhYzIgJiYgIWMzICYmIGFscGhhID09IDE7Ci19Ci0KLUNvbG9yIG1ha2VF
eHRlbmRlZENvbG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UpCi17Ci0gICAgcmV0dXJuIEV4dGVuZGVkQ29sb3I6OmNyZWF0
ZShjMSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSk7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgJKHJldmlzaW9u
IDI2NDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29s
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNTEgKzI2LDI4IEBACiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkNvbG9yQ29udmVyc2lvbi5o
IgogI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKICNpbmNsdWRlICJDb2xvclR5cGVzLmgiCi0jaW5j
bHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDb2xvcjsK
LXRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgU1JHQkE7Ci0KIGNsYXNzIEV4dGVuZGVkQ29sb3Ig
OiBwdWJsaWMgUmVmQ291bnRlZDxFeHRlbmRlZENvbG9yPiB7CiBwdWJsaWM6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZjxFeHRlbmRlZENvbG9yPiBjcmVhdGUoZmxvYXQgYzEsIGZsb2F0
IGMyLCBmbG9hdCBjMywgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UpOwotCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMgUmVmPEV4dGVuZGVkQ29sb3I+IGNyZWF0ZShjb25z
dCBDb2xvclR5cGUmKTsKKyAgICBzdGF0aWMgUmVmPEV4dGVuZGVkQ29sb3I+IGNyZWF0ZShDb2xv
ckNvbXBvbmVudHM8ZmxvYXQ+LCBDb2xvclNwYWNlKTsKKyAgICAKICAgICBmbG9hdCBhbHBoYSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29tcG9uZW50c1szXTsgfQogCiAgICAgY29uc3QgQ29sb3JDb21w
b25lbnRzPGZsb2F0PiYgY29tcG9uZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9uZW50czsg
fQogICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFj
ZTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwotCi0gICAg
UmVmPEV4dGVuZGVkQ29sb3I+IGNvbG9yV2l0aEFscGhhKGZsb2F0KSBjb25zdDsKLSAgICBSZWY8
RXh0ZW5kZWRDb2xvcj4gaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCkgY29uc3Q7Ci0KLSAg
ICBib29sIGlzV2hpdGUoKSBjb25zdDsKLSAgICBib29sIGlzQmxhY2soKSBjb25zdDsKLQotICAg
IC8vIFRoaXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2UgY29sb3JzIGludG8gc1JH
Qi4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JHQkE8VD4gdG9TUkdCQUxv
c3N5KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8
VCwgZmxvYXQ+KQotICAgICAgICAgICAgcmV0dXJuIHRvU1JHQkFGbG9hdENvbXBvbmVudHNMb3Nz
eSgpOwotICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhf
dD4pCi0gICAgICAgICAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZXModG9TUkdCQUZs
b2F0Q29tcG9uZW50c0xvc3N5KCkpOwotICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiBkZWNsdHlwZShhdXRvKSBjYWxsT25VbmRlcmx5aW5nVHlwZShGdW5jdG9yJiYpIGNvbnN0
OwogCiBwcml2YXRlOgotICAgIEV4dGVuZGVkQ29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9h
dCBjMywgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKLSAgICAgICAgOiBtX2Nv
bXBvbmVudHMoYzEsIGMyLCBjMywgYWxwaGEpCi0gICAgICAgICwgbV9jb2xvclNwYWNlKGNvbG9y
U3BhY2UpCi0gICAgewotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIFNSR0JBPGZsb2F0PiB0
b1NSR0JBRmxvYXRDb21wb25lbnRzTG9zc3koKSBjb25zdDsKKyAgICBFeHRlbmRlZENvbG9yKENv
bG9yQ29tcG9uZW50czxmbG9hdD4sIENvbG9yU3BhY2UpOwogCiAgICAgQ29sb3JDb21wb25lbnRz
PGZsb2F0PiBtX2NvbXBvbmVudHM7CiAgICAgQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7CkBAIC04
Niw4ICs2MywzNSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEV4dGVuZGVkQ29sCiAg
ICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KIAotLy8gRklYTUU6IElmIHRoZSBDb2xvclNwYWNlIGlz
IHNSR0IgYW5kIHRoZSB2YWx1ZXMgY2FuIGFsbCBiZQotLy8gY29udmVydGVkIGV4YWN0bHkgdG8g
aW50ZWdlcnMsIHdlIHNob3VsZCBtYWtlIGEgU2ltcGxlQ29sb3IuCi1XRUJDT1JFX0VYUE9SVCBD
b2xvciBtYWtlRXh0ZW5kZWRDb2xvcihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9h
dCBhbHBoYSwgQ29sb3JTcGFjZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGlu
ZSBSZWY8RXh0ZW5kZWRDb2xvcj4gRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGNvbnN0IENvbG9yVHlw
ZSYgY29sb3IpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRXh0ZW5kZWRDb2xvcihhc0Nv
bG9yQ29tcG9uZW50cyhjb2xvciksIGNvbG9yLmNvbG9yU3BhY2UpKTsKK30KKworaW5saW5lIFJl
ZjxFeHRlbmRlZENvbG9yPiBFeHRlbmRlZENvbG9yOjpjcmVhdGUoQ29sb3JDb21wb25lbnRzPGZs
b2F0PiBjb21wb25lbnRzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRXh0ZW5kZWRDb2xvcihjb21wb25lbnRzLCBjb2xvclNwYWNlKSk7Cit9CisK
K2lubGluZSBFeHRlbmRlZENvbG9yOjpFeHRlbmRlZENvbG9yKENvbG9yQ29tcG9uZW50czxmbG9h
dD4gY29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQorICAgIDogbV9jb21wb25lbnRz
KGNvbXBvbmVudHMpCisgICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKK3sKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gZGVjbHR5cGUoYXV0bykgRXh0ZW5kZWRDb2xvcjo6Y2Fs
bE9uVW5kZXJseWluZ1R5cGUoRnVuY3RvciYmIGZ1bmN0b3IpIGNvbnN0Cit7CisgICAgc3dpdGNo
IChtX2NvbG9yU3BhY2UpIHsKKyAgICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6CisgICAgICAgIHJl
dHVybiBmdW5jdG9yKGFzU1JHQkEobV9jb21wb25lbnRzKSk7CisgICAgY2FzZSBDb2xvclNwYWNl
OjpMaW5lYXJSR0I6CisgICAgICAgIHJldHVybiBmdW5jdG9yKGFzTGluZWFyU1JHQkEobV9jb21w
b25lbnRzKSk7CisgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6CisgICAgICAgIHJldHVy
biBmdW5jdG9yKGFzRGlzcGxheVAzKG1fY29tcG9uZW50cykpOworICAgIH0KKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmdW5jdG9yKGFzU1JHQkEobV9jb21wb25lbnRz
KSk7Cit9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9D
b2xvckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0NvbG9yR3RrLmNwcAkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
OCArMjYsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDb2xvcjo6Q29sb3IoY29uc3QgR2Rr
UkdCQSYgY29sb3IpCisgICAgOiBDb2xvcihjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7
IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5yZWQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3Iu
Z3JlZW4pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3IuYmx1ZSksIHN0YXRpY19jYXN0PGZsb2F0
Pihjb2xvci5hbHBoYSkgfSkpCiB7Ci0gICAgc2V0SW5saW5lQ29sb3IoY29udmVydFRvQ29tcG9u
ZW50Qnl0ZXMoU1JHQkEgeyBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3IucmVkKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGNvbG9yLmdyZWVuKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmJsdWUpLCBz
dGF0aWNfY2FzdDxmbG9hdD4oY29sb3IuYWxwaGEpIH0pKTsKIH0KIAogQ29sb3I6Om9wZXJhdG9y
IEdka1JHQkEoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0NvbG9yRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjY0MjMwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENv
bG9yOjpDb2xvcihEMkQxX0NPTE9SX0YgY29sb3IpCisgICAgOiBDb2xvcihjb252ZXJ0VG9Db21w
b25lbnRCeXRlcyhTUkdCQSB7IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgfSkp
CiB7Ci0gICAgc2V0SW5saW5lQ29sb3IoY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JHQkEgeyBj
b2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hIH0pKTsKIH0KIAogQ29sb3I6Om9wZXJh
dG9yIEQyRDFfQ09MT1JfRigpIGNvbnN0CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjQyNDIpCisrKyBUb29scy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAyMC0wNy0xMCAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVkdWNlIHN1cmZhY2UgYXJlYSBvZiB0
aGUgRXh0ZW5kZWRDb2xvciBjbGFzcyB0byBhIGJhcmUgbWluaW11bQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0MjA0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRF
U1QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6bWFrZUNvbG9yKToKKyAgICAgICAgVXBkYXRl
IHVzaW5nIG5ldyBDb2xvciBjb25zdHJ1Y3RvciBmb3IgZXh0ZW5kZWQgY29sb3JzLgorCiAyMDIw
LTA3LTEwICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRk
IHNvbWUgdGVzdGluZyBmb3IgSlNSdW5Mb29wVGltZXIKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCShy
ZXZpc2lvbiAyNjQyMzApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0
ZW5kZWRDb2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1l
c3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29uc3RydWN0b3Ip
CiB7Ci0gICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4w
LCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8Zmxv
YXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRl
bmRlZCgpKTsKIAogICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGMxLmFzRXh0ZW5kZWQoKS5j
b21wb25lbnRzKCk7CkBAIC01Miw3ICs1Miw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29uc3Ry
dWN0b3IpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29weUNvbnN0cnVjdG9yKQogewotICAgIENv
bG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFj
ZTo6RGlzcGxheVAzKSB9OworICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwg
MC41LCAwLjI1LCAxLjAgfSB9OwogICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAK
ICAgICBDb2xvciBjMihjMSk7CkBAIC03MCw3ICs3MCw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwg
Q29weUNvbnN0cnVjdG9yKQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIEFzc2lnbm1lbnQpCiB7Ci0g
ICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xv
clNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsg
MS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgp
KTsKIAogICAgIENvbG9yIGMyID0gYzE7CkBAIC04OSwyMCArODksMjAgQEAgVEVTVChFeHRlbmRl
ZENvbG9yLCBBc3NpZ25tZW50KQogVEVTVChFeHRlbmRlZENvbG9yLCBFcXVhbGl0eSkKIHsKICAg
ICB7Ci0gICAgICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUs
IDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgICAgICBDb2xvciBjMSB7IERpc3Bs
YXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RS
VUUoYzEuaXNFeHRlbmRlZCgpKTsKIAotICAgICAgICBDb2xvciBjMiB7IG1ha2VFeHRlbmRlZENv
bG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICAg
ICAgQ29sb3IgYzIgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07
CiAgICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICAgICAgRVhQRUNU
X0VRKGMxLCBjMik7CiAgICAgfQogCiAgICAgewotICAgICAgICBDb2xvciBjMSB7IG1ha2VFeHRl
bmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsK
KyAgICAgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEu
MCB9IH07CiAgICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKLSAgICAgICAg
Q29sb3IgYzIgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNw
YWNlOjpTUkdCKSB9OworICAgICAgICBDb2xvciBjMiB7IFNSR0JBPGZsb2F0PiB7IDEuMCwgMC41
LCAwLjI1LCAxLjAgfSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwog
CiAgICAgICAgIEVYUEVDVF9ORShjMSwgYzIpOwpAQCAtMTEyLDcgKzExMiw3IEBAIFRFU1QoRXh0
ZW5kZWRDb2xvciwgRXF1YWxpdHkpCiAgICAgaW50IGcgPSAxMjg7CiAgICAgaW50IGIgPSA2MzsK
ICAgICBpbnQgYSA9IDEyNzsKLSAgICBDb2xvciByZ2IxIHsgbWFrZUV4dGVuZGVkQ29sb3IociAv
IDI1NS4wLCBnIC8gMjU1LjAsIGIgLyAyNTUuMCwgYSAvIDI1NS4wLCBDb2xvclNwYWNlOjpTUkdC
KSB9OworICAgIENvbG9yIHJnYjEgeyBTUkdCQTxmbG9hdD4geyByIC8gMjU1LjBmLCBnIC8gMjU1
LjBmLCBiIC8gMjU1LjBmLCBhIC8gMjU1LjBmIH0gfTsKICAgICBDb2xvciByZ2IyID0gbWFrZVNp
bXBsZUNvbG9yKHIsIGcsIGIsIGEpOwogICAgIEVYUEVDVF9ORShyZ2IxLCByZ2IyKTsKICAgICBF
WFBFQ1RfTkUocmdiMiwgcmdiMSk7CkBAIC0xMjEsMjAgKzEyMSwyMCBAQCBURVNUKEV4dGVuZGVk
Q29sb3IsIEVxdWFsaXR5KQogVEVTVChFeHRlbmRlZENvbG9yLCBIYXNoKQogewogICAgIHsKLSAg
ICAgICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBD
b2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZs
b2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5p
c0V4dGVuZGVkKCkpOwogCi0gICAgICAgIENvbG9yIGMyIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4w
LCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgICAgICBDb2xv
ciBjMiB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICAg
ICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgICAgICBFWFBFQ1RfRVEoYzEu
aGFzaCgpLCBjMi5oYXNoKCkpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgQ29sb3IgYzEgeyBt
YWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5
UDMpIH07CisgICAgICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAw
LjI1LCAxLjAgfSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCi0g
ICAgICAgIENvbG9yIGMyIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwg
Q29sb3JTcGFjZTo6U1JHQikgfTsKKyAgICAgICAgQ29sb3IgYzIgeyBTUkdCQTxmbG9hdD4geyAx
LjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRl
ZCgpKTsKIAogICAgICAgICBFWFBFQ1RfTkUoYzEuaGFzaCgpLCBjMi5oYXNoKCkpOwpAQCAtMTQ0
LDE0ICsxNDQsMTQgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBIYXNoKQogICAgIGludCBnID0gMTI4
OwogICAgIGludCBiID0gNjM7CiAgICAgaW50IGEgPSAxMjc7Ci0gICAgQ29sb3IgcmdiMSB7IG1h
a2VFeHRlbmRlZENvbG9yKHIgLyAyNTUuMCwgZyAvIDI1NS4wLCBiIC8gMjU1LjAsIGEgLyAyNTUu
MCwgQ29sb3JTcGFjZTo6U1JHQikgfTsKKyAgICBDb2xvciByZ2IxIHsgU1JHQkE8ZmxvYXQ+IHsg
ciAvIDI1NS4wZiwgZyAvIDI1NS4wZiwgYiAvIDI1NS4wZiwgYSAvIDI1NS4wZiB9IH07CiAgICAg
Q29sb3IgcmdiMiA9IG1ha2VTaW1wbGVDb2xvcihyLCBnLCBiLCBhKTsKICAgICBFWFBFQ1RfTkUo
cmdiMS5oYXNoKCksIHJnYjIuaGFzaCgpKTsKIH0KIAogVEVTVChFeHRlbmRlZENvbG9yLCBNb3Zl
Q29uc3RydWN0b3IpCiB7Ci0gICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAu
NSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgQ29sb3IgYzEgeyBE
aXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgRVhQRUNUX1RS
VUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIGMyKFdURk1vdmUoYzEpKTsKQEAgLTE3
Miw3ICsxNzIsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVDb25zdHJ1Y3RvcikKIAogVEVT
VChFeHRlbmRlZENvbG9yLCBNb3ZlQXNzaWdubWVudCkKIHsKLSAgICBDb2xvciBjMSB7IG1ha2VF
eHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykg
fTsKKyAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4w
IH0gfTsKICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IgYzIg
PSBXVEZNb3ZlKGMxKTsKQEAgLTE5NCw3ICsxOTQsOCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIE1v
dmVBc3NpZ25tZW50KQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIEJhc2ljUmVmZXJlbmNlQ291bnRp
bmcpCiB7Ci0gICAgQ29sb3IqIGMxID0gbmV3IENvbG9yIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4w
LCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgIENvbG9yKiBj
MSA9IG5ldyBDb2xvciB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0g
fTsKKyAgICAKICAgICBFWFBFQ1RfVFJVRShjMS0+aXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9y
KiBjMiA9IG5ldyBDb2xvcigqYzEpOwpAQCAtMjIwLDcgKzIyMSw3IEBAIFRFU1QoRXh0ZW5kZWRD
b2xvciwgQmFzaWNSZWZlcmVuY2VDb3VudGkKIAogQ29sb3IgbWFrZUNvbG9yKCkKIHsKLSAgICBD
b2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3Bh
Y2U6OkRpc3BsYXlQMykgfTsKKyAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAs
IDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwog
ICAgIEVYUEVDVF9FUSgxdSwgYzEuYXNFeHRlbmRlZCgpLnJlZkNvdW50KCkpOwogCkBAIC0yMzgs
NyArMjM5LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBSZXR1cm5WYWx1ZXMpCiAKIFRFU1QoRXh0
ZW5kZWRDb2xvciwgUDNDb252ZXJzaW9uVG9TUkdCKQogewotICAgIENvbG9yIHAzQ29sb3IgeyBt
YWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMC43NSwgQ29sb3JTcGFjZTo6RGlzcGxh
eVAzKSB9OworICAgIENvbG9yIHAzQ29sb3IgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUs
IDAuMjUsIDAuNzUgfSB9OwogICAgIEVYUEVDVF9UUlVFKHAzQ29sb3IuaXNFeHRlbmRlZCgpKTsK
IAogICAgIGF1dG8gc1JHQkFDb2xvciA9IHAzQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwpA
QCAtMjUwLDkgKzI1MSwxMCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIFAzQ29udmVyc2lvblRvU1JH
QikKIAogVEVTVChFeHRlbmRlZENvbG9yLCBMaW5lYXJTUkdCQ29udmVyc2lvblRvU1JHQikKIHsK
LSAgICBDb2xvciBsaW5lYXJDb2xvciB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1
LCAwLjc1LCBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIH07Ci0gICAgRVhQRUNUX1RSVUUobGluZWFy
Q29sb3IuaXNFeHRlbmRlZCgpKTsKLSAgICBhdXRvIHNSR0JBQ29sb3IgPSBsaW5lYXJDb2xvci50
b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgQ29sb3IgbGluZWFyU1JHQkFDb2xvciB7IExpbmVh
clNSR0JBPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAwLjc1IH0gfTsKKyAgICBFWFBFQ1RfVFJV
RShsaW5lYXJTUkdCQUNvbG9yLmlzRXh0ZW5kZWQoKSk7CisKKyAgICBhdXRvIHNSR0JBQ29sb3Ig
PSBsaW5lYXJTUkdCQUNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBFWFBFQ1RfVFJV
RShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5yZWQsIDEuMGYpKTsKICAgICBF
WFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ncmVlbiwgMC43
MzUzNTY5MjdmKSk7CiAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNS
R0JBQ29sb3IuYmx1ZSwgMC41MzcwOTg3MDZmKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404039</attachid>
            <date>2020-07-10 20:22:41 -0700</date>
            <delta_ts>2020-07-11 15:15:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214204-20200710202240.patch</filename>
            <type>text/plain</type>
            <size>51249</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NDI1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBACisyMDIwLTA3LTEwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZWR1Y2Ugc3VyZmFjZSBhcmVhIG9m
IHRoZSBFeHRlbmRlZENvbG9yIGNsYXNzIHRvIGEgYmFyZSBtaW5pbXVtCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQyMDQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkZCBoZWxwZXIgZnVuY3Rpb24g
dG8gQ29sb3IgdG8gb3BlcmF0ZSBvbiB0aGUgdW5kZXJseWluZyBjb2xvciB0eXBlCisgICAgICAg
ICAgYW5kIHJlaW1wbGVtZW50IGEgYnVuY2ggb2YgZnVuY3Rpb25hbGl0eSB1c2luZyBpdCwgcmVk
dWNpbmcgdGhlIG5lZWQKKyAgICAgICAgICBmb3IgZHVwbGljYXRlIGltcGxlbWVudGF0aW9ucyBp
biBFeHRlbmRlZENvbG9yLgorICAgICAgICAtIEFkZCBjb25zdHJ1Y3RvcnMgdG8gQ29sb3IgdGhh
dCB0YWtlIGV4dGVuZGVkIGNvbG9yIHR5cGVzLCByZXBsYWNpbmcKKyAgICAgICAgICB0aGUgbWFr
ZUV4dGVuZGVkQ29sb3IgaGVscGVyIGZ1bmN0aW9uLiAKKworICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
UmVtb3ZlIEV4dGVuZWRDb2xvci5jcHAKKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6cGFyc2VDb2xvckZ1bmN0aW9uUGFyYW1ldGVycyk6CisgICAgICAgIFVzZSBuZXcg
Q29sb3IgY29uc3RydWN0b3IgdGFraW5nIENvbG9yQ29tcG9uZW50cyBhbmQgQ29sb3JTcGFjZS4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6IFJlaW1wbGltZW50IHVzaW5nIGNhbGxP
blVuZGVybHlpbmdUeXBlLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmludmVydGVkQ29sb3JX
aXRoQWxwaGEgY29uc3QpOiBSZWltcGxpbWVudCB1c2luZyBjYWxsT25VbmRlcmx5aW5nVHlwZS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OkNvbG9yKTogIAorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omhhc2ggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNhbGxPblVuZGVybHlpbmdUeXBlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBTG9zc3kgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0JsYWNr
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzV2hpdGVDb2xvcik6CisgICAgICAg
IC0gQWRkIG5ldyBjb25zdHJ1Y3RvcnMgdGFraW5nIGV4dGVuZGVkIGNvbG9yIHR5cGVzOiBTUkdC
QTxmbG9hdD4sIExpbmVhclNSR0JBPGZsb2F0PiBhbmQgRGlwbGF5UDM8ZmxvYXQ+LgorICAgICAg
ICAtIEFkZCBuZXcgZnVuY3Rpb24sIGNhbGxPblVuZGVybHlpbmdUeXBlLCB0byBtYWtlIHdvcmtp
bmcgd2l0aCBhbnkgdW5kZXJseWluZyB0eXBlIG1vcmUgc3RyZWFtbGluZWQuCisgICAgICAgIC0g
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OnRvU1JHQkEpOgorICAgICAgICAoV2ViQ29yZTo6dG9MaW5lYXJTUkdCQSk6
CisgICAgICAgIChXZWJDb3JlOjp0b0Rpc3BsYXlQMyk6CisgICAgICAgIChXZWJDb3JlOjp0b0xp
bmVhckRpc3BsYXlQMyk6CisgICAgICAgIChXZWJDb3JlOjp0b0hTTEEpOgorICAgICAgICBBZGQg
aWRlbnRpdHkgY29udmVyc2lvbiBmdW5jdGlvbnMgdG8gbWFrZSBpbXBsZW1lbnRpbmcgZ2VuZXJp
YyBmdW5jdGlvbnMgbGlrZSBDb2xvcjo6dG9TUkdCQUxvc3N5IG1vcmUKKyAgICAgICAgc3RyYWln
dGZvcndhcmQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXphdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpzZXJpYWxpemF0aW9uRm9yQ1NTKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRp
b25Gb3JIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVl
QXNUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24u
aDoKKyAgICAgICAgUmVwbGFjZSBzZXJpYWxpemF0aW9uIG9mIHRoZSBFeHRlbmRlZENvbG9yIHR5
cGUgaXRzZWxmLCB3aXRoIHNlcmlhbGl6YXRpb24gZm9yIHRoZSB1bmRlcmx5aW5nIGNvbG9yCisg
ICAgICAgIHR5cGVzLiBVc2UgY2FsbE9uVW5kZXJseWluZ1R5cGUgdG8gZGlzcGF0Y2ggdG8gdGhl
IHJpZ2h0IG9uZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaDoK
KyAgICAgICAgLSBBZGRzIENvbXBvbmVudFRyYWl0cyBzdHJ1Y3QgdG8gZ2V0IGluZm9ybWF0aW9u
IGxpa2UgbWluL21heCB2YWx1ZSBvZiB0aGUgY29tcG9uZW50IHR5cGVzLgorICAgICAgICAtIEFk
ZHMgYHVzaW5nIENvbXBvbmVudFR5cGUgPSBUO2AgdG8gZWFjaCBjb2xvciB0eXBlLCB0byBhbGxv
dyBlYXN5IGFjY2VzcyB0byB0aGUgdHlwZSBpbgorICAgICAgICAgIGRlZHVjZWQgY29udGV4dHMu
CisgICAgICAgIC0gQWRkcyBzdGF0aWMgY29uc3RleHByIENvbG9yU3BhY2UgdG8gZWFjaCBjb2xv
ciB0eXBlIHRoYXQgY3VycmVudGx5IGhhcyBhIENvbG9yU3BhY2UgbWFwcGluZy4gCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29y
ZTo6aXNCbGFjayk6CisgICAgICAgIChXZWJDb3JlOjppc1doaXRlKToKKyAgICAgICAgQWRkIGhl
bHBlcnMgdG8gaW1wbGVtZW50IENvbG9yOjppc0JsYWNrL0NvbG9yOjppc1doaXRlQ29sb3IgZm9y
IGVhY2ggY29sb3IgdHlwZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVk
Q29sb3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVk
Q29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjpFeHRlbmRlZENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkV4dGVuZGVkQ29sb3I6OmNhbGxPblVuZGVybHlpbmdUeXBlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIFJlZHVjZSBkb3duIHRvIGp1c3QgY29uc3RydWN0aW9uLCBtZW1iZXIgYWNjZXNz
IGFuZCB0aGUgY2FsbE9uVW5kZXJseWluZ1R5cGUgaGVscGVyLgorICAgICAgICBJbiBmdXR1cmUg
cmV2aXNpb25zLCBFeHRlbmRlZENvbG9yIHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZXJu
YWwgY2xhc3Mgb2YgQ29sb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29s
b3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6Q29sb3IpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIGNvbnN0cnVjdG9yIGRlbGVn
YXRpb24uCisKIDIwMjAtMDctMTAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIEZpeCBidWlsZCBmb3IgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIUVOQUJMRShSRVZF
QUwpLCBmb3IgZXhhbXBsZSwgdHZPUwpJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI2NDIz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xODI3
LDcgKzE4MjcsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9DdXN0b21QYWludEltYWdlLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRGlz
cGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVk
Q29sb3IuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRQb2ludDNELmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmNw
cApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03MjI4LDcgKzcyMjgsNiBA
QAogCQkzMUQyNkJDNTFGODZEMjY4MDA4RkYyNTUgLyogSlNJbWFnZUJpdG1hcE9wdGlvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbWFnZUJpdG1hcE9wdGlvbnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFEMjZCQzYxRjg2RDI2OTAwOEZGMjU1IC8q
IEpTSW1hZ2VCaXRtYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNJbWFnZUJpdG1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxRDU5MUIx
MTY2OTdBNkMwMEU2QkYwMiAvKiBQbHVnSW5DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUGx1Z0luQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTMxRENERjQxMURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuZGVkQ29sb3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzMURDREY0MjFEQTFDNDU0MDBFQTVCOTMgLyogRXh0ZW5kZWRD
b2xvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbmRlZENvbG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxREVBNDUzMUIzOUY0RDkwMEY3NzE3OCAv
KiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV2ViU3lzdGVtQmFja2Ryb3BMYXllci5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzFERUE0NTQxQjM5RjREOTAwRjc3MTc4IC8qIFdlYlN5c3RlbUJhY2tkcm9w
TGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU3lzdGVtQmFja2Ry
b3BMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk1ODIsOCArMTk1ODEs
OCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNTE1QkUxOTcxRDU0RjZCRDAwREQ3QzY4IC8qIEhJ
REdhbWVwYWQuY3BwICovLAogCQkJCTUxNUJFMTk4MUQ1NEY2QkQwMEREN0M2OCAvKiBISURHYW1l
cGFkLmggKi8sCi0JCQkJNTE1QkUxOTkxRDU0RjZCRDAwREQ3QzY4IC8qIEhJREdhbWVwYWRQcm92
aWRlci5tbSAqLywKIAkJCQk1MTVCRTE5QTFENTRGNkJEMDBERDdDNjggLyogSElER2FtZXBhZFBy
b3ZpZGVyLmggKi8sCisJCQkJNTE1QkUxOTkxRDU0RjZCRDAwREQ3QzY4IC8qIEhJREdhbWVwYWRQ
cm92aWRlci5tbSAqLywKIAkJCQk1MTdFMDNGNDI0QjZCOTYzMDA1NDg5NUEgLyogTXVsdGlHYW1l
cGFkUHJvdmlkZXIuaCAqLywKIAkJCQk1MTdFMDNGNTI0QjZCOTY0MDA1NDg5NUEgLyogTXVsdGlH
YW1lcGFkUHJvdmlkZXIubW0gKi8sCiAJCQkpOwpAQCAtMjU1NTYsNyArMjU1NTUsNiBAQAogCQkJ
CTJEMjlFQ0MyMTkyRUNDODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQu
aCAqLywKIAkJCQkyRDI5RUNDMzE5MkVDQzgzMDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25p
dG9yTWFuYWdlci5jcHAgKi8sCiAJCQkJMkQyOUVDQzQxOTJFQ0M4MzAwOTg0Qjc4IC8qIERpc3Bs
YXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuaCAqLywKLQkJCQkzMURDREY0MTFEQTFDNDU0MDBFQTVC
OTMgLyogRXh0ZW5kZWRDb2xvci5jcHAgKi8sCiAJCQkJMzFEQ0RGNDIxREExQzQ1NDAwRUE1Qjkz
IC8qIEV4dGVuZGVkQ29sb3IuaCAqLywKIAkJCQk2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyog
RXh0ZW5zaW9uc0dMLmggKi8sCiAJCQkJQjI3NTM1M0EwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0
UG9pbnQuY3BwICovLApAQCAtMjY4ODAsNyArMjY4NzgsNiBAQAogCQlDRDk0QTVDQjFGNzFDQjQ2
MDBGNTI1QzUgLyogZW5jcnlwdGVkbWVkaWEgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAotCQkJCUNERTNBRTEzMjRCNDkzNkYwMDEyOEU3RSAvKiBDRE1VdGlsaXRp
ZXMuY3BwICovLAogCQkJCUNEOTRBNUQ5MUY3MUNCOUYwMEY1MjVDNSAvKiBjbGVhcmtleSAqLywK
IAkJCQlDREY3NTY5QjIxNUMyM0E0MDBFRkNCNTAgLyogQ0RNRW5jcnlwdGlvblNjaGVtZS5oICov
LAogCQkJCUNEOTRBNUQxMUY3MUNCNkIwMEY1MjVDNSAvKiBDRE1GYWN0b3J5LmNwcCAqLywKQEAg
LTI2ODk1LDEyICsyNjg5MiwxMyBAQAogCQkJCUNEOTRBNUQ2MUY3MUNCNkQwMEY1MjVDNSAvKiBD
RE1NZXNzYWdlVHlwZS5oICovLAogCQkJCUNEM0NFMTFDMjQwNDUxQUYwMDRCQTAxRCAvKiBDRE1Q
cml2YXRlLmNwcCAqLywKIAkJCQlDRDk0QTVDRjFGNzFDQjZBMDBGNTI1QzUgLyogQ0RNUHJpdmF0
ZS5oICovLAotCQkJCUNERTNBRTEwMjRCNDkxNjkwMDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuaCAq
LywKIAkJCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1RDUgLyogQ0RNUHJveHkuY3BwICovLAogCQkJ
CUNEOTRBNUNGMUY3MUNCNjEwMEY1MjVDNSAvKiBDRE1Qcm94eS5oICovLAogCQkJCUNEOTRBNUND
MUY3MUNCNjkwMEY1MjVDNSAvKiBDRE1SZXF1aXJlbWVudC5oICovLAogCQkJCUNEOTRBNUQwMUY3
MUNCNkIwMEY1MjVDNSAvKiBDRE1SZXN0cmljdGlvbnMuaCAqLywKIAkJCQlDRDk0QTVENTFGNzFD
QjZEMDBGNTI1QzUgLyogQ0RNU2Vzc2lvblR5cGUuaCAqLywKKwkJCQlDREUzQUUxMzI0QjQ5MzZG
MDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmNwcCAqLywKKwkJCQlDREUzQUUxMDI0QjQ5MTY5MDAx
MjhFN0UgLyogQ0RNVXRpbGl0aWVzLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGVuY3J5cHRlZG1l
ZGlhOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTMwMDgyLDYgKzMwMDgwLDcgQEAK
IAkJCQlDRDNDRTEwMzI0MDFBQURBMDA0QkEwMUQgLyogQ0RNUmVzdHJpY3Rpb25zLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDREU1OTU5NzFCRjI2RTIxMDBBMUNCRTggLyogQ0RNU2Vzc2lvbk1lZGlh
U291cmNlQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0QzQ0UxMDQyNDAxQUFEQTAwNEJB
MDFEIC8qIENETVNlc3Npb25UeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlDREUzQUUxMjI0QjQ5
MTZBMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1RkE5MDRD
QTE3OEU2MUY1MDA0QzhBMkQgLyogQ2VydGlmaWNhdGVJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5MUI4RjBCNTIxOTUzRDY1MDAwQzJCMDAgLyogQ2VydGlmaWNhdGVJbmZvQmFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkUzNkZEMTUxNkM3ODI2NTAwRjg4N0MxIC8qIENoYW5nZVZlcnNpb25E
YXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMjE5LDcgKzMxMjE4LDYgQEAKIAkJCQlGMzQ0Qzc1
MzExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJN0EwRTc3MEYxMEMwMEE4ODAwQTAyNzZFIC8qIEluc3BlY3RvckZyb250
ZW5kSG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0E1NDg1ODAxNEUwMkQ1MTAwNkFFMDVBIC8q
IEluc3BlY3Rvckhpc3RvcnkuaCBpbiBIZWFkZXJzICovLAotCQkJCUNERTNBRTEyMjRCNDkxNkEw
MDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QjgxQ0FFMUZB
QTQ0NjIwMDM3RDFFNiAvKiBJbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMjBENjI5MjcxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NjBFNkQyMzBERTMwMzAwNDYxQUFFIC8qIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvblB1YmxpYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjQwMiw2ICsz
MjQwMCw3IEBACiAJCQkJODUwMzFCNDgwQTQ0RUZDNzAwRjk5MkUwIC8qIE1vdXNlUmVsYXRlZEV2
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOURGQzA5OUU2NDkyMDA1NkU1ODEgLyogTW92
ZVNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQjE3MDA2MTRBMkJBQjIw
MEEyQjVEOSAvKiBNdWx0aUNoYW5uZWxSZXNhbXBsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTUx
N0UwM0Y3MjRCNkQ5ODQwMDU0ODk1QSAvKiBNdWx0aUdhbWVwYWRQcm92aWRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMjZGNzU2QjAxQjNCNjVBQzAwMDVERDc5IC8qIE11dGFibGVSYW5nZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2QjExQjNCNjVBQzAwMDVERDc5IC8qIE11dGFibGVSYW5n
ZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM2RjA5MDBBMTQzMjdCNjEwMDY4NTg0OSAvKiBN
dXRhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTMzMjgxLDcgKzMzMjgwLDYgQEAK
IAkJCQlFQ0E2ODBDNzFFNjc3MjQ1MDA3MzFEMjAgLyogU3RyaW5nVXRpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5QjZDNDE1MzEzNDQ5NDkwMDAwODVCNjIgLyogU3RyaW5nV2l0aERpcmVj
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ5Rjc3NzYwRUZFQzYyMDAwOTA4NDlEIC8qIFN0
cm9rZVN0eWxlQXBwbGllci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE3RTAzRjcyNEI2RDk4NDAw
NTQ4OTVBIC8qIE11bHRpR2FtZXBhZFByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTRC
ODIwNTFENkRGMEU1MDA3N0VCRTMgLyogU3RydWN0dXJlZENsb25lLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNDVCQTZCNjIzNzYyMkEzMDA0REZDMDcgLyogU3R5bGVBZGp1c3Rlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkM1RUI2QTMwRTgxREM0RjAwQjI1OTY1IC8qIFN0eWxlQmFja2dyb3VuZERh
dGEuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ0NzMsNiArMzQ0NzEsNyBAQAogCQkJCUNEREUwMkVE
MThCM0VENkQwMENGN0ZGMSAvKiBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uT2JqQy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUNEREUwMkYwMThCNTY1MTMwMENGN0ZGMSAvKiBDRE1TZXNzaW9uQVZTdHJl
YW1TZXNzaW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RFNTk1OUQxQkYyNzU3MTAwQTFDQkU4
IC8qIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMubW0gaW4gU291cmNlcyAqLywKKwkJCQlD
REUzQUUxNDI0QjQ5MzcwMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUExNDA5MEZCMUFBNTFFMUQwMDkxMTkxQSAvKiBDb250ZW50RmlsdGVyVW5ibG9ja0hh
bmRsZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3QUZGNDIzMUVGQjE0NDkwMEI1NDVC
MyAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDZD
Njk2Q0MxRTcyMDVGQzAwNTk3OTM3IC8qIENQVU1vbml0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0zNDgwMiw3ICszNDgwMSw2IEBACiAJCQkJREVDQTdEQjcxRjlFNjdCNjAwRTNCNjYxIC8qIFVu
aWZpZWRTb3VyY2UxNjcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREVDQTdEQjgxRjlFNjdCNjAw
RTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNjguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREVDQTdE
QjkxRjlFNjdCNjAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNjkuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQ0RFM0FFMTQyNEI0OTM3MDAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlERUNBN0RCQTFGOUU2N0I2MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTE3
MC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBN0RGQjFGOUVCMzY0MDBFM0I2NjEgLyogVW5p
ZmllZFNvdXJjZTE3MS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBN0RGQzFGOUVCMzY0MDBF
M0I2NjEgLyogVW5pZmllZFNvdXJjZTE3Mi5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5jcHAJKHJldmlzaW9uIDI2NDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjU4LDcgKzY1OCw3
IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXIKICAgICAgICAgY29s
b3JTcGFjZSA9IENvbG9yU3BhY2U6OkRpc3BsYXlQMzsKICAgICAgICAgYnJlYWs7CiAgICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAg
fQogICAgIGNvbnN1bWVJZGVudChhcmdzKTsKIApAQCAtNjc2LDcgKzY3Niw3IEBAIHN0YXRpYyBD
b2xvciBwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXIKICAgICAgICAgaWYgKCFhbHBoYVBhcmFt
ZXRlcikKICAgICAgICAgICAgIGFscGhhUGFyYW1ldGVyID0gY29uc3VtZU51bWJlcihhcmdzLCBW
YWx1ZVJhbmdlQWxsKTsKICAgICAgICAgaWYgKCFhbHBoYVBhcmFtZXRlcikKLSAgICAgICAgICAg
IHJldHVybiBDb2xvcigpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgICAgICBjb2xv
ckNoYW5uZWxzWzNdID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigxLjAsIGFscGhhUGFyYW1ldGVy
LT5pc1BlcmNlbnRhZ2UoKSA/IChhbHBoYVBhcmFtZXRlci0+ZG91YmxlVmFsdWUoKSAvIDEwMCkg
OiBhbHBoYVBhcmFtZXRlci0+ZG91YmxlVmFsdWUoKSkpOwogICAgIH0KQEAgLTY4NCw5ICs2ODQs
OSBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uUGFyYW1ldGVyCiAgICAgLy8gRklY
TUU6IFN1cHBvcnQgdGhlIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZhbGxiYWNrIGNvbG9yIHZh
bHVlcy4KIAogICAgIGlmICghYXJncy5hdEVuZCgpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsK
LSAgICAKLSAgICByZXR1cm4gbWFrZUV4dGVuZGVkQ29sb3IoY29sb3JDaGFubmVsc1swXSwgY29s
b3JDaGFubmVsc1sxXSwgY29sb3JDaGFubmVsc1syXSwgY29sb3JDaGFubmVsc1szXSwgY29sb3JT
cGFjZSk7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gQ29sb3IgeyBDb2xvckNv
bXBvbmVudHMgeyBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JDaGFubmVsc1swXSksIHN0YXRpY19j
YXN0PGZsb2F0Pihjb2xvckNoYW5uZWxzWzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQ2hh
bm5lbHNbMl0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JDaGFubmVsc1szXSkgfSwgY29sb3JT
cGFjZSB9OwogfQogCiBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHBhcnNlSGV4Q29s
b3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGJvb2wgYWNjZXB0UXVpcmt5Q29sb3JzKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNp
b24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkNvbG9yLmgiCiAKLSNpbmNsdWRlICJBbmltYXRpb25VdGlsaXRpZXMuaCIKICNp
bmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5o
IgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMjYsMjIgKzEyMywy
NiBAQCBmbG9hdCBDb2xvcjo6bHVtaW5hbmNlKCkgY29uc3QKIAogQ29sb3IgQ29sb3I6OmNvbG9y
V2l0aEFscGhhKGZsb2F0IGFscGhhKSBjb25zdAogewotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0g
ICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY29sb3JXaXRoQWxwaGEoYWxwaGEpOwotCi0gICAg
Q29sb3IgcmVzdWx0ID0gY29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoYXNJbmxpbmUoKSwgYWxwaGEp
OwotCi0gICAgLy8gRklYTUU6IFdoeSBpcyBwcmVzZXJ2aW5nIHRoZSBzZW1hbnRpYyBiaXQgZGVz
aXJlZCBhbmQvb3IgY29ycmVjdCBoZXJlPwotICAgIGlmIChpc1NlbWFudGljKCkpCi0gICAgICAg
IHJlc3VsdC50YWdBc1NlbWFudGljKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4g
Y2FsbE9uVW5kZXJseWluZ1R5cGUoV1RGOjptYWtlVmlzaXRvcigKKyAgICAgICAgWyZdIChjb25z
dCBTUkdCQTx1aW50OF90PiYgdW5kZXJseWluZ0NvbG9yKSAtPiBDb2xvciB7CisgICAgICAgICAg
ICBDb2xvciByZXN1bHQgPSBjb2xvcldpdGhPdmVycmlkZW5BbHBoYSh1bmRlcmx5aW5nQ29sb3Is
IGFscGhhKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IFdoeSBpcyBwcmVzZXJ2aW5nIHRoZSBz
ZW1hbnRpYyBiaXQgZGVzaXJlZCBhbmQvb3IgY29ycmVjdCBoZXJlPworICAgICAgICAgICAgaWYg
KGlzU2VtYW50aWMoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChjb25z
dCBhdXRvJiB1bmRlcmx5aW5nQ29sb3IpIC0+IENvbG9yIHsKKyAgICAgICAgICAgIHJldHVybiBj
b2xvcldpdGhPdmVycmlkZW5BbHBoYSh1bmRlcmx5aW5nQ29sb3IsIGFscGhhKTsKKyAgICAgICAg
fQorICAgICkpOwogfQogCiBDb2xvciBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9h
dCBhbHBoYSkgY29uc3QKIHsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4g
YXNFeHRlbmRlZCgpLmludmVydGVkQ29sb3JXaXRoQWxwaGEoYWxwaGEpOwotICAgIHJldHVybiBp
bnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGFzSW5saW5lKCksIGFscGhhKTsKKyAgICBy
ZXR1cm4gY2FsbE9uVW5kZXJseWluZ1R5cGUoWyZdIChjb25zdCBhdXRvJiB1bmRlcmx5aW5nQ29s
b3IpIC0+IENvbG9yIHsKKyAgICAgICAgcmV0dXJuIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGVu
QWxwaGEodW5kZXJseWluZ0NvbG9yLCBhbHBoYSk7CisgICAgfSk7CiB9CiAKIENvbG9yIENvbG9y
OjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2lu
Y2x1ZGUgIlNpbXBsZUNvbG9yLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KIAogI2lmIFVTRShDRykKQEAgLTUxLDYgKzUyLDE4IEBAIHR5cGVk
ZWYgc3RydWN0IF9HZGtSR0JBIEdka1JHQkE7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8g
QWJsZSB0byByZXByZXNlbnQ6CisvLyAgICAtIFNwZWNpYWwgImludmFsaWQgY29sb3IiIHN0YXRl
LCB0cmVhdGVkIGFzIHRyYW5zcGFyZW50IGJsYWNrIGJ1dCBkaXN0aW5ndWlzaGFibGUKKy8vICAg
IC0gNHggOC1iaXQgKDAtMjU1KSBzUkdCQSwgc3RvcmVkIGlubGluZSwgbm8gYWxsb2NhdGlvbgor
Ly8gICAgLSA0eCBmbG9hdCAoMC0xKSBzUkdCQSwgc3RvcmVkIGluIGEgcmVmZXJlbmNlIGNvdW50
ZWQgc3ViLW9iamVjdAorLy8gICAgLSA0eCBmbG9hdCAoMC0xKSBMaW5lYXIgc1JHQkEsIHN0b3Jl
ZCBpbiBhIHJlZmVyZW5jZSBjb3VudGVkIHN1Yi1vYmplY3QKKy8vICAgIC0gNHggZmxvYXQgKDAt
MSkgRGlzcGxheVAzLCBzdG9yZWQgaW4gYSByZWZlcmVuY2UgY291bnRlZCBzdWItb2JqZWN0Cisv
LworLy8gQWRkaXRpb25hbGx5LCB0aGUgaW5saW5lIDgtYml0IHNSR0JBIGNhbiBoYXZlIGFuIG9w
dGlvbmFsICJzZW1hbnRpYyIgYml0IHNldCBvbiBpdCwKKy8vIHdoaWNoIGluZGljYXRlcyB0aGUg
Y29sb3Igb3JpZ2luYXRlZCBmcm9tIGEgQ1NTIHNlbWFudGljIGNvbG9yIG5hbWUuCisvLyBGSVhN
RTogSWYgd2Uga2VlcCB0aGUgInNlbWFudGljIiBiaXQgb24gQ29sb3IsIHdlIHNob3VsZCBleHRl
bmQgc3VwcG9ydCB0byBhbGwgY29sb3JzLAorLy8gbm90IGp1c3QgaW5saW5lIG9uZXMsIGJ5IHVz
aW5nIHRoZSB1bnVzZWQgcG9pbnRlciBiaXRzLgorCiBjbGFzcyBDb2xvciB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC02Myw3ICs3NiwxMCBAQCBwdWJsaWM6CiAg
ICAgQ29sb3IoU1JHQkE8dWludDhfdD4sIFNlbWFudGljVGFnKTsKICAgICBDb2xvcihPcHRpb25h
bDxTUkdCQTx1aW50OF90Pj4sIFNlbWFudGljVGFnKTsKIAotICAgIENvbG9yKFJlZjxFeHRlbmRl
ZENvbG9yPiYmKTsKKyAgICBDb2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+LCBDb2xvclNwYWNl
KTsKKyAgICBDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4mKTsKKyAgICBDb2xvcihjb25zdCBMaW5l
YXJTUkdCQTxmbG9hdD4mKTsKKyAgICBDb2xvcihjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CiAK
ICAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZUVtcHR5VmFsdWVUeXBlKTsKICAgICBl
eHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpOwpAQCAtNzIsMzQg
Kzg4LDM0IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihjb25zdCBDb2xvciYp
OwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKENvbG9yJiYpOwogCisgICAgV0VCQ09SRV9FWFBP
UlQgQ29sb3ImIG9wZXJhdG9yPShjb25zdCBDb2xvciYpOworICAgIFdFQkNPUkVfRVhQT1JUIENv
bG9yJiBvcGVyYXRvcj0oQ29sb3ImJik7CisKICAgICB+Q29sb3IoKTsKIAotICAgIGJvb2wgaXNW
YWxpZCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSB8fCAobV9jb2xvckRhdGEuaW5saW5l
Q29sb3JBbmRGbGFncyAmIHZhbGlkSW5saW5lQ29sb3JCaXQpOyB9CisgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0OwogCi0gICAgLy8gVHJ1ZSBpZiB0aGUgY29sb3Igb3JpZ2luYXRlZCBmcm9tIGEg
Q1NTIHNlbWFudGljIGNvbG9yIG5hbWUuCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1
cm4gaXNFeHRlbmRlZCgpIHx8IChtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzICYgdmFs
aWRJbmxpbmVDb2xvckJpdCk7IH0KICAgICBib29sIGlzU2VtYW50aWMoKSBjb25zdCB7IHJldHVy
biBpc0lubGluZSgpICYmIChtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzICYgaXNTZW1h
bnRpY0lubGluZUNvbG9yQml0KTsgfQogCiAgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0
dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID09IDEuMCA6IGFzSW5saW5l
KCkuYWxwaGEgPT0gMjU1OyB9CiAgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBp
c0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IGFzSW5saW5lKCkuYWxw
aGEgPiAwOyB9Ci0KICAgICB1aW50OF90IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRl
ZCgpID8gY29udmVydFRvQ29tcG9uZW50Qnl0ZShhc0V4dGVuZGVkKCkuYWxwaGEoKSkgOiBhc0lu
bGluZSgpLmFscGhhOyB9CiAgICAgZmxvYXQgYWxwaGFBc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4g
aXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgOiBjb252ZXJ0VG9Db21wb25lbnRG
bG9hdChhc0lubGluZSgpLmFscGhhKTsgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Owor
ICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGx1bWluYW5jZSgpIGNvbnN0OworICAgIFdFQkNPUkVf
RVhQT1JUIGZsb2F0IGxpZ2h0bmVzcygpIGNvbnN0OyAvLyBGSVhNRTogUmVwbGFjZSByZW1haW5p
bmcgdXNlcyB3aXRoIGx1bWluYW5jZS4KIAotICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxD
b2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+PiBjb2xvclNwYWNlQW5kQ29tcG9uZW50
cygpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGRlY2x0eXBlKGF1dG8p
IGNhbGxPblVuZGVybHlpbmdUeXBlKEZ1bmN0b3ImJikgY29uc3Q7CiAKICAgICAvLyBUaGlzIHdp
bGwgY29udmVydCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBpbnRvIHNSR0IuCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4gdG9TUkdCQUxvc3N5KCkgY29uc3Q7CiAKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0
Pj4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKKwogICAgIFdFQkNPUkVfRVhQT1JU
IENvbG9yIGxpZ2h0ZW5lZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGRhcmtl
bmVkKCkgY29uc3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBsdW1pbmFuY2UoKSBjb25z
dDsKLQotICAgIC8vIEZJWE1FOiBSZXBsYWNlIHJlbWFpbmluZyB1c2VzIHdpdGggbHVtaW5hbmNl
LgotICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGxpZ2h0bmVzcygpIGNvbnN0OwotCiAgICAgQ29s
b3IgaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0Owog
ICAgIENvbG9yIGludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0OwogCkBA
IC0xNDQsOSArMTYwLDYgQEAgcHVibGljOgogICAgIGNvbnN0IEV4dGVuZGVkQ29sb3ImIGFzRXh0
ZW5kZWQoKSBjb25zdDsKICAgICBTUkdCQTx1aW50OF90PiBhc0lubGluZSgpIGNvbnN0OwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgQ29sb3ImIG9wZXJhdG9yPShjb25zdCBDb2xvciYpOwotICAgIFdF
QkNPUkVfRVhQT1JUIENvbG9yJiBvcGVyYXRvcj0oQ29sb3ImJik7Ci0KICAgICAvLyBFeHRlbmRl
ZCBhbmQgbm9uLWV4dGVuZGVkIGNvbG9ycyB3aWxsIGFsd2F5cyBiZSBub24tZXF1YWwuCiAgICAg
ZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpOwog
ICAgIGZyaWVuZCBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiBh
LCBjb25zdCBDb2xvciYgYik7CkBAIC0xNTksNyArMTcyLDEyIEBAIHB1YmxpYzoKICAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+IGRlY29kZShEZWNvZGVy
Jik7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBzZXRJbmxpbmVDb2xvcihTUkdCQTx1aW50OF90Pik7
CisgICAgQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYpOworCisgICAgdm9pZCBzZXRDb2xvcihT
UkdCQTx1aW50OF90Pik7CisgICAgdm9pZCBzZXRDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4mKTsK
KyAgICB2b2lkIHNldENvbG9yKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYpOworICAgIHZvaWQg
c2V0Q29sb3IoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOwogICAgIHZvaWQgc2V0RXh0ZW5kZWRD
b2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJik7CiAKICAgICB2b2lkIHRhZ0FzU2VtYW50aWMoKSB7
IG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgfD0gaXNTZW1hbnRpY0lubGluZUNvbG9y
Qml0OyB9CkBAIC0yMjcsMjkgKzI0NSw1OSBAQCBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nU2Vt
YW50aWNDb2xvcihjCiAKIGlubGluZSBDb2xvcjo6Q29sb3IoU1JHQkE8dWludDhfdD4gY29sb3Ip
CiB7Ci0gICAgc2V0SW5saW5lQ29sb3IoY29sb3IpOworICAgIHNldENvbG9yKGNvbG9yKTsKIH0K
IAogaW5saW5lIENvbG9yOjpDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gY29sb3IpCiB7
CiAgICAgaWYgKGNvbG9yKQotICAgICAgICBzZXRJbmxpbmVDb2xvcigqY29sb3IpOworICAgICAg
ICBzZXRDb2xvcigqY29sb3IpOwogfQogCiBpbmxpbmUgQ29sb3I6OkNvbG9yKFNSR0JBPHVpbnQ4
X3Q+IGNvbG9yLCBTZW1hbnRpY1RhZykKIHsKLSAgICBzZXRJbmxpbmVDb2xvcihjb2xvcik7Cisg
ICAgc2V0Q29sb3IoY29sb3IpOwogICAgIHRhZ0FzU2VtYW50aWMoKTsKIH0KIAogaW5saW5lIENv
bG9yOjpDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gY29sb3IsIFNlbWFudGljVGFnKQog
ewogICAgIGlmIChjb2xvcikgewotICAgICAgICBzZXRJbmxpbmVDb2xvcigqY29sb3IpOworICAg
ICAgICBzZXRDb2xvcigqY29sb3IpOwogICAgICAgICB0YWdBc1NlbWFudGljKCk7CiAgICAgfQog
fQogCitpbmxpbmUgQ29sb3I6OkNvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4gY29tcG9uZW50
cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIHN3aXRjaCAoY29sb3JTcGFjZSkgewor
ICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoKKyAgICAgICAgc2V0Q29sb3IoYXNTUkdCQShjb21w
b25lbnRzKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclJH
QjoKKyAgICAgICAgc2V0Q29sb3IoYXNMaW5lYXJTUkdCQShjb21wb25lbnRzKSk7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoKKyAgICAgICAgc2V0Q29s
b3IoYXNEaXNwbGF5UDMoY29tcG9uZW50cykpOworICAgICAgICByZXR1cm47CisgICAgfQorfQor
CitpbmxpbmUgQ29sb3I6OkNvbG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAg
c2V0Q29sb3IoY29sb3IpOworfQorCitpbmxpbmUgQ29sb3I6OkNvbG9yKGNvbnN0IExpbmVhclNS
R0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAgc2V0Q29sb3IoY29sb3IpOworfQorCitpbmxpbmUg
Q29sb3I6OkNvbG9yKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQoreworICAgIHNldENv
bG9yKGNvbG9yKTsKK30KKwogaW5saW5lIENvbG9yOjpDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4m
JiBleHRlbmRlZENvbG9yKQogewogICAgIHNldEV4dGVuZGVkQ29sb3IoV1RGTW92ZShleHRlbmRl
ZENvbG9yKSk7CkBAIC0yODAsMTkgKzMyOCwzNiBAQCBpbmxpbmUgQ29sb3I6On5Db2xvcigpCiAK
IGlubGluZSB1bnNpZ25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0CiB7Ci0gICAgaWYgKGlzRXh0ZW5k
ZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5oYXNoKCk7CisgICAgaWYgKGlzRXh0
ZW5kZWQoKSkgeworICAgICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBhc0V4dGVuZGVk
KCkuY29tcG9uZW50cygpOworICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2goYzEsIGMyLCBjMywg
YWxwaGEsIGFzRXh0ZW5kZWQoKS5jb2xvclNwYWNlKCkpOworICAgIH0KICAgICByZXR1cm4gV1RG
OjppbnRIYXNoKG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MpOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBTUkdCQTxUPiBDb2xvcjo6dG9TUkdCQUxvc3N5KCkgY29uc3QKK3RlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGRlY2x0eXBlKGF1dG8pIENvbG9yOjpjYWxsT25VbmRlcmx5
aW5nVHlwZShGdW5jdG9yJiYgZnVuY3RvcikgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgp
KQotICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLnRvU1JHQkFMb3NzeTxUPigpOwotICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4pCi0gICAgICAgIHJldHVybiBh
c0lubGluZSgpOwotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgZmxvYXQ+KQot
ICAgICAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKGFzSW5saW5lKCkpOworICAg
ICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmNhbGxPblVuZGVybHlpbmdUeXBlKHN0ZDo6Zm9yd2Fy
ZDxGdW5jdG9yPihmdW5jdG9yKSk7CisgICAgcmV0dXJuIGZ1bmN0b3IoYXNJbmxpbmUoKSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFNSR0JBPFQ+IENvbG9yOjp0b1NSR0JBTG9zc3koKSBj
b25zdAoreworICAgIHJldHVybiBjYWxsT25VbmRlcmx5aW5nVHlwZShXVEY6Om1ha2VWaXNpdG9y
KAorICAgICAgICBbXSAoY29uc3QgU1JHQkE8dWludDhfdD4mIGNvbG9yKSB7CisgICAgICAgICAg
ICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIHVpbnQ4X3Q+KQorICAgICAgICAgICAg
ICAgIHJldHVybiBjb2xvcjsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1l
X3Y8VCwgZmxvYXQ+KQorICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRG
bG9hdHMoY29sb3IpOworICAgICAgICB9LAorICAgICAgICBbXSAoY29uc3QgYXV0byYgY29sb3Ip
IHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4p
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEo
Y29sb3IpKTsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgZmxv
YXQ+KQorICAgICAgICAgICAgICAgIHJldHVybiB0b1NSR0JBKGNvbG9yKTsKKyAgICAgICAgfQor
ICAgICkpOwogfQogCiBpbmxpbmUgQ29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEo
T3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdApAQCAtMzI3LDEyICszOTIsMjcgQEAgaW5saW5l
IFNSR0JBPHVpbnQ4X3Q+IENvbG9yOjphc0lubGluZSgpIAogICAgIHJldHVybiBhc1NSR0JBKFBh
Y2tlZDo6UkdCQSB7IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2NvbG9yRGF0YS5pbmxpbmVDb2xv
ckFuZEZsYWdzID4+IDMyKSB9KTsKIH0KIAotaW5saW5lIHZvaWQgQ29sb3I6OnNldElubGluZUNv
bG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQoraW5saW5lIHZvaWQgQ29sb3I6OnNldENvbG9yKFNS
R0JBPHVpbnQ4X3Q+IGNvbG9yKQogewogICAgIG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxh
Z3MgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oUGFja2VkOjpSR0JBIHsgY29sb3IgfS52YWx1ZSkg
PDwgMzI7CiAgICAgdGFnQXNWYWxpZCgpOwogfQogCitpbmxpbmUgdm9pZCBDb2xvcjo6c2V0Q29s
b3IoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBzZXRFeHRlbmRlZENvbG9yKEV4
dGVuZGVkQ29sb3I6OmNyZWF0ZShjb2xvcikpOworfQorCitpbmxpbmUgdm9pZCBDb2xvcjo6c2V0
Q29sb3IoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBzZXRFeHRlbmRl
ZENvbG9yKEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjb2xvcikpOworfQorCitpbmxpbmUgdm9pZCBD
b2xvcjo6c2V0Q29sb3IoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYgY29sb3IpCit7CisgICAgc2V0
RXh0ZW5kZWRDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoY29sb3IpKTsKK30KKwogaW5saW5l
IHZvaWQgQ29sb3I6OnNldEV4dGVuZGVkQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYgZXh0ZW5k
ZWRDb2xvcikKIHsKICAgICAvLyBaZXJvIHRoZSB1bmlvbiwganVzdCBpbiBjYXNlIGEgMzItYml0
IHN5c3RlbSBvbmx5IGFzc2lnbnMgdGhlCkBAIC0zNDQsMjAgKzQyNCwxOSBAQCBpbmxpbmUgdm9p
ZCBDb2xvcjo6c2V0RXh0ZW5kZWRDb2xvcihSZWY8CiAKIGlubGluZSBib29sIENvbG9yOjppc0Js
YWNrQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChjb2xvci5pc0V4dGVuZGVk
KCkpCi0gICAgICAgIHJldHVybiBjb2xvci5hc0V4dGVuZGVkKCkuaXNCbGFjaygpOwotICAgIHJl
dHVybiBjb2xvci5hc0lubGluZSgpID09IENvbG9yOjpibGFjazsKKyAgICByZXR1cm4gY29sb3Iu
Y2FsbE9uVW5kZXJseWluZ1R5cGUoW10gKGNvbnN0IGF1dG8mIGNvbG9yKSB7CisgICAgICAgIHJl
dHVybiBXZWJDb3JlOjppc0JsYWNrKGNvbG9yKTsKKyAgICB9KTsKIH0KIAogaW5saW5lIGJvb2wg
Q29sb3I6OmlzV2hpdGVDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKGNvbG9y
LmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGNvbG9yLmFzRXh0ZW5kZWQoKS5pc1doaXRl
KCk7Ci0gICAgcmV0dXJuIGNvbG9yLmFzSW5saW5lKCkgPT0gQ29sb3I6OndoaXRlOworICAgIHJl
dHVybiBjb2xvci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYgY29sb3IpIHsK
KyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OmlzV2hpdGUoY29sb3IpOworICAgIH0pOwogfQogCi10
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBDb2xvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Cit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIENvbG9yOjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKSB7CiAgICAgICAg
IGVuY29kZXIgPDwgdHJ1ZTsKQEAgLTM4NSw4ICs0NjQsNyBAQCB2b2lkIENvbG9yOjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uCiAgICAgZW5jb2RlciA8PCBQYWNrZWQ6OlJHQkEgeyBhc0lu
bGluZSgpIH0udmFsdWU7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxD
b2xvcj4gQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQordGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gT3B0aW9uYWw8Q29sb3I+IENvbG9yOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsK
ICAgICBib29sIGlzRXh0ZW5kZWQ7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc0V4dGVuZGVk
KSkKQEAgLTQwOCw3ICs0ODYsNyBAQCBPcHRpb25hbDxDb2xvcj4gQ29sb3I6OmRlY29kZShEZWNv
ZGVyJiBkCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGNvbG9yU3BhY2UpKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLSAgICAgICAgcmV0dXJuIENvbG9yIHsgRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGMxLCBjMiwg
YzMsIGFscGhhLCBjb2xvclNwYWNlKSB9OworICAgICAgICByZXR1cm4gQ29sb3IgeyBFeHRlbmRl
ZENvbG9yOjpjcmVhdGUoeyBjMSwgYzIsIGMzLCBhbHBoYSB9LCBjb2xvclNwYWNlKSB9OwogICAg
IH0KIAogICAgIGJvb2wgaXNWYWxpZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yQ29udmVyc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5oCShyZXZpc2lvbiAyNjQyMzApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsMzEgKzI1LDM1IEBACiAKICNwcmFnbWEgb25jZQogCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7CisjaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgogCi10ZW1wbGF0ZTx0eXBlbmFtZT4g
c3RydWN0IENNWUtBOwotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBEaXNwbGF5UDM7Ci10ZW1w
bGF0ZTx0eXBlbmFtZT4gc3RydWN0IEhTTEE7Ci10ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IExp
bmVhckRpc3BsYXlQMzsKLXRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgTGluZWFyU1JHQkE7Ci10
ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IFNSR0JBOworbmFtZXNwYWNlIFdlYkNvcmUgewogCiAv
LyBUaGVzZSBhcmUgdGhlIHN0YW5kYXJkIHNSR0IgPC0+IExpbmVhclJHQiAvIERpc3BsYXlQMyA8
LT4gTGluZWFyRGlzcGxheVAzIGNvbnZlcnNpb24gZnVuY3Rpb25zIChodHRwczovL2VuLndpa2lw
ZWRpYS5vcmcvd2lraS9TUkdCKS4KIGZsb2F0IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoZmxv
YXQpOwogZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChmbG9hdCk7CiAKLUxpbmVhclNS
R0JBPGZsb2F0PiB0b0xpbmVhclNSR0JBKGNvbnN0IFNSR0JBPGZsb2F0PiYpOwotU1JHQkE8Zmxv
YXQ+IHRvU1JHQkEoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBM
aW5lYXJTUkdCQTxmbG9hdD4gdG9MaW5lYXJTUkdCQShjb25zdCBTUkdCQTxmbG9hdD4mKTsKK1dF
QkNPUkVfRVhQT1JUIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0
PiYpOwogCi1MaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+IHRvTGluZWFyRGlzcGxheVAzKGNvbnN0IERp
c3BsYXlQMzxmbG9hdD4mKTsKLURpc3BsYXlQMzxmbG9hdD4gdG9EaXNwbGF5UDMoY29uc3QgTGlu
ZWFyRGlzcGxheVAzPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgTGluZWFyRGlzcGxheVAzPGZs
b2F0PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CitXRUJDT1JF
X0VYUE9SVCBEaXNwbGF5UDM8ZmxvYXQ+IHRvRGlzcGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQ
MzxmbG9hdD4mKTsKIAotU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3QgRGlzcGxheVAzPGZsb2F0
PiYpOwotRGlzcGxheVAzPGZsb2F0PiB0b0Rpc3BsYXlQMyhjb25zdCBTUkdCQTxmbG9hdD4mKTsK
K1dFQkNPUkVfRVhQT1JUIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IERpc3BsYXlQMzxmbG9h
dD4mKTsKK1dFQkNPUkVfRVhQT1JUIERpc3BsYXlQMzxmbG9hdD4gdG9EaXNwbGF5UDMoY29uc3Qg
U1JHQkE8ZmxvYXQ+Jik7CiAKIFdFQkNPUkVfRVhQT1JUIEhTTEE8ZmxvYXQ+IHRvSFNMQShjb25z
dCBTUkdCQTxmbG9hdD4mKTsKIFdFQkNPUkVfRVhQT1JUIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNv
bnN0IEhTTEE8ZmxvYXQ+Jik7CiAKIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IENNWUtBPGZs
b2F0PiYpOwogCisKKy8vIElkZW50aXR5IGNvbnZlcnNpb25zICh1c2VmdWwgZm9yIGdlbmVyaWMg
Y29udGV4dHMpCisKK2NvbnN0ZXhwciBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBTUkdCQTxm
bG9hdD4mIGNvbG9yKSB7IHJldHVybiBjb2xvcjsgfQorY29uc3RleHByIExpbmVhclNSR0JBPGZs
b2F0PiB0b0xpbmVhclNSR0JBKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3IpIHsgcmV0
dXJuIGNvbG9yOyB9Citjb25zdGV4cHIgRGlzcGxheVAzPGZsb2F0PiB0b0Rpc3BsYXlQMyhjb25z
dCBEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikgeyByZXR1cm4gY29sb3I7IH0KK2NvbnN0ZXhwciBM
aW5lYXJEaXNwbGF5UDM8ZmxvYXQ+IHRvTGluZWFyRGlzcGxheVAzKGNvbnN0IExpbmVhckRpc3Bs
YXlQMzxmbG9hdD4mIGNvbG9yKSB7IHJldHVybiBjb2xvcjsgfQorY29uc3RleHByIEhTTEE8Zmxv
YXQ+IHRvSFNMQShjb25zdCBIU0xBPGZsb2F0PiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcAkocmV2aXNpb24gMjY0
MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDQ1ICsxMDAsODcgQEAgc3RhdGljIEFTQ0lJ
TGl0ZXJhbCBzZXJpYWxpemF0aW9uKENvbG9yUwogICAgIHJldHVybiAiIl9zOwogfQogCi1TdHJp
bmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBFeHRlbmRlZENvbG9yJiBjb2xvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aW9uKGNvbnN0
IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0gICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29s
b3IuY29tcG9uZW50cygpOworICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOwog
ICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYWxwaGEsIDEuMGYpKQotICAgICAgICBy
ZXR1cm4gbWFrZVN0cmluZygiY29sb3IoIiwgc2VyaWFsaXphdGlvbihjb2xvci5jb2xvclNwYWNl
KCkpLCAnICcsIGMxLCAnICcsIGMyLCAnICcsIGMzLCAnKScpOwotICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJjb2xvcigiLCBzZXJpYWxpemF0aW9uKGNvbG9yLmNvbG9yU3BhY2UoKSksICcgJywgYzEs
ICcgJywgYzIsICcgJywgYzMsICIgLyAiLCBhbHBoYSwgJyknKTsKKyAgICAgICAgcmV0dXJuIG1h
a2VTdHJpbmcoImNvbG9yKCIsIHNlcmlhbGl6YXRpb24oY29sb3IuY29sb3JTcGFjZSksICcgJywg
YzEsICcgJywgYzIsICcgJywgYzMsICcpJyk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9y
KCIsIHNlcmlhbGl6YXRpb24oY29sb3IuY29sb3JTcGFjZSksICcgJywgYzEsICcgJywgYzIsICcg
JywgYzMsICIgLyAiLCBhbHBoYSwgJyknKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JI
VE1MKGNvbnN0IEV4dGVuZGVkQ29sb3ImIGNvbG9yKQorLy8gU1JHQkE8ZmxvYXQ+IG92ZXJsb2Fk
cworCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9y
KQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKK30KKworU3RyaW5nIHNlcmlh
bGl6YXRpb25Gb3JIVE1MKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgcmV0dXJu
IHNlcmlhbGl6YXRpb25Gb3JDU1MoY29sb3IpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNv
bG9yKTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0
IEV4dGVuZGVkQ29sb3ImIGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVl
QXNUZXh0KGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6
YXRpb25Gb3JDU1MoY29sb3IpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKIH0K
IAorLy8gTGluZWFyU1JHQkE8ZmxvYXQ+IG92ZXJsb2FkcworCitTdHJpbmcgc2VyaWFsaXphdGlv
bkZvckNTUyhjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQoreworICAgIHJldHVybiBz
ZXJpYWxpemF0aW9uKGNvbG9yKTsKK30KKworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNv
bnN0IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRp
b24oY29sb3IpOworfQorCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQo
Y29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICByZXR1cm4gc2VyaWFsaXph
dGlvbihjb2xvcik7Cit9CisKKy8vIERpc3BsYXlQMzxmbG9hdD4gb3ZlcmxvYWRzCisKK1N0cmlu
ZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQorewor
ICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKK30KKworU3RyaW5nIHNlcmlhbGl6YXRp
b25Gb3JIVE1MKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQoreworICAgIHJldHVybiBz
ZXJpYWxpemF0aW9uKGNvbG9yKTsKK30KKworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJU
cmVlQXNUZXh0KGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQoreworICAgIHJldHVybiBz
ZXJpYWxpemF0aW9uKGNvbG9yKTsKK30KKworCiAvLyBDb2xvciBvdmVybG9hZHMKIAogU3RyaW5n
IHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChjb2xv
ci5pc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9y
LmFzRXh0ZW5kZWQoKSk7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29sb3IuYXNJ
bmxpbmUoKSk7CisgICAgcmV0dXJuIGNvbG9yLmNhbGxPblVuZGVybHlpbmdUeXBlKFtdIChhdXRv
IGMpIHsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoYyk7CisgICAgfSk7CiB9
CiAKIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0g
ICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25G
b3JIVE1MKGNvbG9yLmFzRXh0ZW5kZWQoKSk7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JI
VE1MKGNvbG9yLmFzSW5saW5lKCkpOworICAgIHJldHVybiBjb2xvci5jYWxsT25VbmRlcmx5aW5n
VHlwZShbXSAoYXV0byBjKSB7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9ySFRNTChj
KTsKKyAgICB9KTsKIH0KIAogU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQotICAg
ICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29sb3IuYXNFeHRl
bmRlZCgpKTsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29s
b3IuYXNJbmxpbmUoKSk7CisgICAgcmV0dXJuIGNvbG9yLmNhbGxPblVuZGVybHlpbmdUeXBlKFtd
IChhdXRvIGMpIHsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNU
ZXh0KGMpOworICAgIH0pOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uaAkocmV2aXNpb24gMjY0MjMw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQ29sb3I7Ci1jbGFzcyBFeHRlbmRlZENvbG9yOwogCit0ZW1wbGF0ZTx0eXBlbmFt
ZT4gc3RydWN0IERpc3BsYXlQMzsKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgTGluZWFyU1JH
QkE7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IFNSR0JBOwogCiAvLyBzZXJpYWxpemF0aW9u
Rm9ySFRNTCByZXR1cm5zIHRoZSBjb2xvciBzZXJpYWxpemVkIGFjY29yZGluZyB0byBIVE1MNSA8
aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjZmls
bC1hbmQtc3Ryb2tlLXN0eWxlcz4gKDEwIFNlcHRlbWJlciAyMDE1KQpAQCAtNDAsOSArNDEsMTcg
QEAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDUwogV0VCQ09SRV9FWFBP
UlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKFNSR0JBPHVpbnQ4X3Q+KTsKIFdFQkNPUkVf
RVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChTUkdCQTx1aW50
OF90Pik7CiAKLVdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0
IEV4dGVuZGVkQ29sb3ImKTsKLVdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9y
SFRNTChjb25zdCBFeHRlbmRlZENvbG9yJik7Ci1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFs
aXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgRXh0ZW5kZWRDb2xvciYpOworV0VCQ09S
RV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7
CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgU1JHQkE8
ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRy
ZWVBc1RleHQoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CisKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBz
ZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYpOworV0VCQ09SRV9F
WFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0
PiYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNU
ZXh0KGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYpOworCitXRUJDT1JFX0VYUE9SVCBTdHJpbmcg
c2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CitXRUJDT1JFX0VY
UE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYp
OworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsKIAogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlh
bGl6YXRpb25Gb3JDU1MoY29uc3QgQ29sb3ImKTsKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJp
YWxpemF0aW9uRm9ySFRNTChjb25zdCBDb2xvciYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAkocmV2aXNpb24gMjY0MjMwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiwxNCArMjYsMzEgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3JDb21w
b25lbnRzLmgiCisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb21wb25lbnRUcmFpdHM7CisKK3RlbXBs
YXRlPD4gc3RydWN0IENvbXBvbmVudFRyYWl0czx1aW50OF90PiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1aW50OF90IG1pblZhbHVlID0gMDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3Qg
bWF4VmFsdWUgPSAyNTU7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb21wb25lbnRUcmFpdHM8
ZmxvYXQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0IG1pblZhbHVlID0gMC4wZjsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGZsb2F0IG1heFZhbHVlID0gMS4wZjsKK307CisKKwogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IFNSR0JBIHsKICAgICBUIHJlZDsKICAgICBUIGdyZWVuOwog
ICAgIFQgYmx1ZTsKICAgICBUIGFscGhhOworCisgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNl
OjpTUkdCOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkEoVCwgVCwgVCwgVCkgLT4g
U1JHQkE8VD47CkBAIC02NCw2ICs4MSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBM
aW5lYXJTUkdCQSAKICAgICBUIGdyZWVuOwogICAgIFQgYmx1ZTsKICAgICBUIGFscGhhOworCisg
ICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDb2xvclNw
YWNlIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpMaW5lYXJSR0I7CiB9OwogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBMaW5lYXJTUkdCQShULCBULCBULCBUKSAtPiBMaW5lYXJTUkdCQTxUPjsKQEAg
LTk0LDYgKzExNCw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEaXNwbGF5UDMgewog
ICAgIFQgZ3JlZW47CiAgICAgVCBibHVlOwogICAgIFQgYWxwaGE7CisKKyAgICB1c2luZyBDb21w
b25lbnRUeXBlID0gVDsKKyAgICBzdGF0aWMgY29uc3RleHByIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSA9IENvbG9yU3BhY2U6OkRpc3BsYXlQMzsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IERp
c3BsYXlQMyhULCBULCBULCBUKSAtPiBEaXNwbGF5UDM8VD47CkBAIC0xMjQsNiArMTQ3LDggQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IExpbmVhckRpc3BsYQogICAgIFQgZ3JlZW47CiAg
ICAgVCBibHVlOwogICAgIFQgYWxwaGE7CisKKyAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsK
IH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IExpbmVhckRpc3BsYXlQMyhULCBULCBULCBUKSAt
PiBMaW5lYXJEaXNwbGF5UDM8VD47CkBAIC0xNTQsNiArMTc5LDggQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEhTTEEgewogICAgIFQgc2F0dXJhdGlvbjsKICAgICBUIGxpZ2h0bmVzczsK
ICAgICBUIGFscGhhOworCisgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CiB9OwogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBIU0xBKFQsIFQsIFQsIFQpIC0+IEhTTEE8VD47CkBAIC0xODYsNiAr
MjEzLDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENNWUtBIHsKICAgICBUIHllbGxv
dzsKICAgICBUIGJsYWNrOwogICAgIFQgYWxwaGE7CisKKyAgICB1c2luZyBDb21wb25lbnRUeXBl
ID0gVDsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IENNWUtBKFQsIFQsIFQsIFQsIFQpIC0+
IENNWUtBPFQ+OwpAQCAtMjA2LDYgKzIzNSw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBYWVpBIHsKICAgICBUIHk7CiAgICAgVCB6OwogICAgIFQgYWxwaGE7CisKKyAgICB1c2luZyBD
b21wb25lbnRUeXBlID0gVDsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFhZWkEoVCwgVCwg
VCwgVCkgLT4gWFlaQTxUPjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNjksNiArNjksOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBj
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGUgaW52ZXJ0
ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCB1aW50OF90IG92ZXJy
aWRlQWxwaGEpOwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgaW52ZXJ0
ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCBmbG9hdCBvdmVycmlk
ZUFscGhhKTsKIAordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYm9vbCBp
c0JsYWNrKGNvbnN0IENvbG9yVHlwZSYpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBj
b25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYpOworCiBjb25zdGV4cHIgdWlu
dDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2X3QpOwogY29uc3RleHByIHVpbnQxNl90IGZh
c3REaXZpZGVCeTI1NSh1aW50MTZfdCk7CiAKQEAgLTE5Miw2ICsxOTUsMjMgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgaQogICAgIHJldHVybiBjb3B5OwogfQogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBib29sIGlzQmxhY2soY29uc3Qg
Q29sb3JUeXBlJiBjb2xvcikKK3sKKyAgICBjb25zdGV4cHIgYXV0byBtaW4gPSBDb21wb25lbnRU
cmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6bWluVmFsdWU7CisgICAg
Y29uc3RleHByIGF1dG8gbWF4ID0gQ29tcG9uZW50VHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6
Q29tcG9uZW50VHlwZT46Om1heFZhbHVlOworCisgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFd
ID0gY29sb3I7CisgICAgcmV0dXJuIGMxID09IG1pbiAmJiBjMiA9PSBtaW4gJiYgYzMgPT0gbWlu
ICYmIGFscGhhID09IG1heDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25z
dGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCit7CisgICAgY29uc3Rl
eHByIGF1dG8gbWF4ID0gQ29tcG9uZW50VHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9u
ZW50VHlwZT46Om1heFZhbHVlOworCisgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29s
b3I7CisgICAgcmV0dXJuIGMxID09IG1heCAmJiBjMiA9PSBtYXggJiYgYzMgPT0gbWF4ICYmIGFs
cGhhID09IG1heDsKK30KKwogY29uc3RleHByIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVp
bnQxNl90IHZhbHVlKQogewogICAgIHJldHVybiAodmFsdWUgPDwgOCkgLSB2YWx1ZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3Iu
Y3BwCShyZXZpc2lvbiAyNjQyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9FeHRlbmRlZENvbG9yLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDkxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRDb2xvci5oIgotCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNp
bmNsdWRlICJDb2xvckNvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJDb2xvclR5cGVzLmgiCi0jaW5j
bHVkZSA8d3RmL0hhc2hlci5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotUmVmPEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmNyZWF0
ZShmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEV4dGVuZGVkQ29sb3IoYzEs
IGMyLCBjMywgYWxwaGEsIGNvbG9yU3BhY2UpKTsKLX0KLQotdW5zaWduZWQgRXh0ZW5kZWRDb2xv
cjo6aGFzaCgpIGNvbnN0Ci17Ci0gICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29tcG9u
ZW50cygpOwotICAgIHJldHVybiBjb21wdXRlSGFzaChjMSwgYzIsIGMzLCBhbHBoYSwgbV9jb2xv
clNwYWNlKTsKLX0KLQotUmVmPEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmNvbG9yV2l0
aEFscGhhKGZsb2F0IG92ZXJyaWRlQWxwaGEpIGNvbnN0Ci17Ci0gICAgYXV0byBbYzEsIGMyLCBj
MywgZXhpc3RpbmdBbHBoYV0gPSBjb21wb25lbnRzKCk7Ci0gICAgcmV0dXJuIEV4dGVuZGVkQ29s
b3I6OmNyZWF0ZShjMSwgYzIsIGMzLCBvdmVycmlkZUFscGhhLCBjb2xvclNwYWNlKCkpOwotfQot
Ci1SZWY8RXh0ZW5kZWRDb2xvcj4gRXh0ZW5kZWRDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBo
YShmbG9hdCBvdmVycmlkZUFscGhhKSBjb25zdAotewotICAgIGF1dG8gW2MxLCBjMiwgYzMsIGV4
aXN0aW5nQWxwaGFdID0gY29tcG9uZW50cygpOwotICAgIHJldHVybiBFeHRlbmRlZENvbG9yOjpj
cmVhdGUoMS4wZiAtIGMxLCAxLjBmIC0gYzIsIDEuMGYgLSBjMywgb3ZlcnJpZGVBbHBoYSwgY29s
b3JTcGFjZSgpKTsKLX0KLQotU1JHQkE8ZmxvYXQ+IEV4dGVuZGVkQ29sb3I6OnRvU1JHQkFGbG9h
dENvbXBvbmVudHNMb3NzeSgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX2NvbG9yU3BhY2UpIHsK
LSAgICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6Ci0gICAgICAgIHJldHVybiBhc1NSR0JBKG1fY29t
cG9uZW50cyk7Ci0gICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJSR0I6Ci0gICAgICAgIHJldHVy
biB0b1NSR0JBKGFzTGluZWFyU1JHQkEobV9jb21wb25lbnRzKSk7Ci0gICAgY2FzZSBDb2xvclNw
YWNlOjpEaXNwbGF5UDM6Ci0gICAgICAgIHJldHVybiB0b1NSR0JBKGFzRGlzcGxheVAzKG1fY29t
cG9uZW50cykpOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
eyAwLCAwLCAwLCAwIH07Ci19Ci0KLWJvb2wgRXh0ZW5kZWRDb2xvcjo6aXNXaGl0ZSgpIGNvbnN0
Ci17Ci0gICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29tcG9uZW50cygpOwotICAgIHJl
dHVybiBjMSA9PSAxICYmIGMyID09IDEgJiYgYzMgPT0gMSAmJiBhbHBoYSA9PSAxOwotfQotCi1i
b29sIEV4dGVuZGVkQ29sb3I6OmlzQmxhY2soKSBjb25zdAotewotICAgIGF1dG8gW2MxLCBjMiwg
YzMsIGFscGhhXSA9IGNvbXBvbmVudHMoKTsKLSAgICByZXR1cm4gIWMxICYmICFjMiAmJiAhYzMg
JiYgYWxwaGEgPT0gMTsKLX0KLQotQ29sb3IgbWFrZUV4dGVuZGVkQ29sb3IoZmxvYXQgYzEsIGZs
b2F0IGMyLCBmbG9hdCBjMywgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKLXsK
LSAgICByZXR1cm4gRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGMxLCBjMiwgYzMsIGFscGhhLCBjb2xv
clNwYWNlKTsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RXh0ZW5kZWRDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0V4dGVuZGVkQ29sb3IuaAkocmV2aXNpb24gMjY0MjMwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw1MSArMjYsMjggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3JDb21wb25lbnRz
LmgiCisjaW5jbHVkZSAiQ29sb3JDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5o
IgogI2luY2x1ZGUgIkNvbG9yVHlwZXMuaCIKLSNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgog
I2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENvbG9yOwotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVj
dCBTUkdCQTsKLQogY2xhc3MgRXh0ZW5kZWRDb2xvciA6IHB1YmxpYyBSZWZDb3VudGVkPEV4dGVu
ZGVkQ29sb3I+IHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEV4dGVu
ZGVkQ29sb3I+IGNyZWF0ZShmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9hdCBhbHBo
YSwgQ29sb3JTcGFjZSk7Ci0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRp
YyBSZWY8RXh0ZW5kZWRDb2xvcj4gY3JlYXRlKGNvbnN0IENvbG9yVHlwZSYpOworICAgIHN0YXRp
YyBSZWY8RXh0ZW5kZWRDb2xvcj4gY3JlYXRlKENvbG9yQ29tcG9uZW50czxmbG9hdD4sIENvbG9y
U3BhY2UpOworICAgIAogICAgIGZsb2F0IGFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25l
bnRzWzNdOyB9CiAKICAgICBjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjb21wb25lbnRz
KCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25lbnRzOyB9CiAgICAgQ29sb3JTcGFjZSBjb2xvclNw
YWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclNwYWNlOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7Ci0KLSAgICBSZWY8RXh0ZW5kZWRDb2xvcj4gY29sb3JX
aXRoQWxwaGEoZmxvYXQpIGNvbnN0OwotICAgIFJlZjxFeHRlbmRlZENvbG9yPiBpbnZlcnRlZENv
bG9yV2l0aEFscGhhKGZsb2F0KSBjb25zdDsKLQotICAgIGJvb2wgaXNXaGl0ZSgpIGNvbnN0Owot
ICAgIGJvb2wgaXNCbGFjaygpIGNvbnN0OwotCi0gICAgLy8gVGhpcyB3aWxsIGNvbnZlcnQgbm9u
LXNSR0IgY29sb3JzcGFjZSBjb2xvcnMgaW50byBzUkdCLgotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNvbnN0ZXhwciBTUkdCQTxUPiB0b1NSR0JBTG9zc3koKSBjb25zdAotICAgIHsKLSAgICAg
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCBmbG9hdD4pCi0gICAgICAgICAgICBy
ZXR1cm4gdG9TUkdCQUZsb2F0Q29tcG9uZW50c0xvc3N5KCk7Ci0gICAgICAgIGVsc2UgaWYgY29u
c3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCB1aW50OF90PikKLSAgICAgICAgICAgIHJldHVybiBj
b252ZXJ0VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBRmxvYXRDb21wb25lbnRzTG9zc3koKSk7Ci0g
ICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGRlY2x0eXBlKGF1dG8pIGNhbGxP
blVuZGVybHlpbmdUeXBlKEZ1bmN0b3ImJikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgRXh0ZW5k
ZWRDb2xvcihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlKQotICAgICAgICA6IG1fY29tcG9uZW50cyhjMSwgYzIsIGMzLCBhbHBo
YSkKLSAgICAgICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKLSAgICB7Ci0gICAgfQotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgU1JHQkE8ZmxvYXQ+IHRvU1JHQkFGbG9hdENvbXBvbmVudHNMb3Nz
eSgpIGNvbnN0OworICAgIEV4dGVuZGVkQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiwgQ29s
b3JTcGFjZSk7CiAKICAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IG1fY29tcG9uZW50czsKICAg
ICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKQEAgLTg2LDggKzYzLDM1IEBAIGlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgRXh0ZW5kZWRDb2wKICAgICByZXR1cm4gIShhID09IGIpOwogfQog
Ci0vLyBGSVhNRTogSWYgdGhlIENvbG9yU3BhY2UgaXMgc1JHQiBhbmQgdGhlIHZhbHVlcyBjYW4g
YWxsIGJlCi0vLyBjb252ZXJ0ZWQgZXhhY3RseSB0byBpbnRlZ2Vycywgd2Ugc2hvdWxkIG1ha2Ug
YSBTaW1wbGVDb2xvci4KLVdFQkNPUkVfRVhQT1JUIENvbG9yIG1ha2VFeHRlbmRlZENvbG9yKGZs
b2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlKTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIFJlZjxFeHRlbmRlZENvbG9yPiBFeHRl
bmRlZENvbG9yOjpjcmVhdGUoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBFeHRlbmRlZENvbG9yKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSwgY29s
b3IuY29sb3JTcGFjZSkpOworfQorCitpbmxpbmUgUmVmPEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVk
Q29sb3I6OmNyZWF0ZShDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGNvbXBvbmVudHMsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFeHRlbmRlZENvbG9y
KGNvbXBvbmVudHMsIGNvbG9yU3BhY2UpKTsKK30KKworaW5saW5lIEV4dGVuZGVkQ29sb3I6OkV4
dGVuZGVkQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiBjb21wb25lbnRzLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UpCisgICAgOiBtX2NvbXBvbmVudHMoY29tcG9uZW50cykKKyAgICAsIG1fY29s
b3JTcGFjZShjb2xvclNwYWNlKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBk
ZWNsdHlwZShhdXRvKSBFeHRlbmRlZENvbG9yOjpjYWxsT25VbmRlcmx5aW5nVHlwZShGdW5jdG9y
JiYgZnVuY3RvcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fY29sb3JTcGFjZSkgeworICAgIGNh
c2UgQ29sb3JTcGFjZTo6U1JHQjoKKyAgICAgICAgcmV0dXJuIGZ1bmN0b3IoYXNTUkdCQShtX2Nv
bXBvbmVudHMpKTsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclJHQjoKKyAgICAgICAgcmV0
dXJuIGZ1bmN0b3IoYXNMaW5lYXJTUkdCQShtX2NvbXBvbmVudHMpKTsKKyAgICBjYXNlIENvbG9y
U3BhY2U6OkRpc3BsYXlQMzoKKyAgICAgICAgcmV0dXJuIGZ1bmN0b3IoYXNEaXNwbGF5UDMobV9j
b21wb25lbnRzKSk7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIGZ1bmN0b3IoYXNTUkdCQShtX2NvbXBvbmVudHMpKTsKK30KIAogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCShyZXZp
c2lvbiAyNjQyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29s
b3JHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIENvbG9yOjpDb2xvcihjb25zdCBHZGtSR0JBJiBjb2xvcikKKyAgICA6IENvbG9y
KGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9y
LnJlZCksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5ncmVlbiksIHN0YXRpY19jYXN0PGZsb2F0
Pihjb2xvci5ibHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmFscGhhKSB9KSkKIHsKLSAg
ICBzZXRJbmxpbmVDb2xvcihjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHN0YXRpY19j
YXN0PGZsb2F0Pihjb2xvci5yZWQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3IuZ3JlZW4pLCBz
dGF0aWNfY2FzdDxmbG9hdD4oY29sb3IuYmx1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5h
bHBoYSkgfSkpOwogfQogCiBDb2xvcjo6b3BlcmF0b3IgR2RrUkdCQSgpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGly
ZWN0MkQuY3BwCShyZXZpc2lvbiAyNjQyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0
LDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ29sb3I6OkNvbG9yKEQyRDFfQ09MT1JfRiBj
b2xvcikKKyAgICA6IENvbG9yKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgY29sb3Iu
ciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSB9KSkKIHsKLSAgICBzZXRJbmxpbmVDb2xvcihj
b252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIs
IGNvbG9yLmEgfSkpOwogfQogCiBDb2xvcjo6b3BlcmF0b3IgRDJEMV9DT0xPUl9GKCkgY29uc3QK
SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2NDI0MikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1IEBACisyMDIwLTA3LTEwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZWR1Y2Ugc3VyZmFjZSBhcmVhIG9mIHRoZSBFeHRlbmRlZENvbG9yIGNsYXNzIHRv
IGEgYmFyZSBtaW5pbXVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTQyMDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMu
Y3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjptYWtlQ29sb3IpOgorICAgICAgICBVcGRhdGUgdXNpbmcgbmV3IENvbG9yIGNvbnN0cnVj
dG9yIGZvciBleHRlbmRlZCBjb2xvcnMuCisKIDIwMjAtMDctMTAgIEdlb2ZmcmV5IEdhcmVuICA8
Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc29tZSB0ZXN0aW5nIGZvciBKU1J1bkxv
b3BUaW1lcgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVk
Q29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2NDIzMCkKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAog
VEVTVChFeHRlbmRlZENvbG9yLCBDb25zdHJ1Y3RvcikKIHsKLSAgICBDb2xvciBjMSB7IG1ha2VF
eHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykg
fTsKKyAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4w
IH0gfTsKICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgYXV0byBbciwg
ZywgYiwgYWxwaGFdID0gYzEuYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKTsKQEAgLTUyLDcgKzUy
LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBDb25zdHJ1Y3RvcikKIAogVEVTVChFeHRlbmRlZENv
bG9yLCBDb3B5Q29uc3RydWN0b3IpCiB7Ci0gICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xv
cigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgQ29s
b3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAg
RVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIGMyKGMxKTsKQEAgLTcw
LDcgKzcwLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBDb3B5Q29uc3RydWN0b3IpCiAKIFRFU1Qo
RXh0ZW5kZWRDb2xvciwgQXNzaWdubWVudCkKIHsKLSAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRl
ZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAg
ICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsK
ICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IgYzIgPSBjMTsK
QEAgLTg5LDIwICs4OSwyMCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEFzc2lnbm1lbnQpCiBURVNU
KEV4dGVuZGVkQ29sb3IsIEVxdWFsaXR5KQogewogICAgIHsKLSAgICAgICAgQ29sb3IgYzEgeyBt
YWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5
UDMpIH07CisgICAgICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAw
LjI1LCAxLjAgfSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCi0g
ICAgICAgIENvbG9yIGMyIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwg
Q29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgICAgICBDb2xvciBjMiB7IERpc3BsYXlQMzxm
bG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEu
aXNFeHRlbmRlZCgpKTsKIAogICAgICAgICBFWFBFQ1RfRVEoYzEsIGMyKTsKICAgICB9CiAKICAg
ICB7Ci0gICAgICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUs
IDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgICAgICBDb2xvciBjMSB7IERpc3Bs
YXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RS
VUUoYzEuaXNFeHRlbmRlZCgpKTsKIAotICAgICAgICBDb2xvciBjMiB7IG1ha2VFeHRlbmRlZENv
bG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OlNSR0IpIH07CisgICAgICAgIENv
bG9yIGMyIHsgU1JHQkE8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgICAg
IEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICAgICAgRVhQRUNUX05FKGMxLCBj
Mik7CkBAIC0xMTIsNyArMTEyLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBFcXVhbGl0eSkKICAg
ICBpbnQgZyA9IDEyODsKICAgICBpbnQgYiA9IDYzOwogICAgIGludCBhID0gMTI3OwotICAgIENv
bG9yIHJnYjEgeyBtYWtlRXh0ZW5kZWRDb2xvcihyIC8gMjU1LjAsIGcgLyAyNTUuMCwgYiAvIDI1
NS4wLCBhIC8gMjU1LjAsIENvbG9yU3BhY2U6OlNSR0IpIH07CisgICAgQ29sb3IgcmdiMSB7IFNS
R0JBPGZsb2F0PiB7IHIgLyAyNTUuMGYsIGcgLyAyNTUuMGYsIGIgLyAyNTUuMGYsIGEgLyAyNTUu
MGYgfSB9OwogICAgIENvbG9yIHJnYjIgPSBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgYSk7CiAg
ICAgRVhQRUNUX05FKHJnYjEsIHJnYjIpOwogICAgIEVYUEVDVF9ORShyZ2IyLCByZ2IxKTsKQEAg
LTEyMSwyMCArMTIxLDIwIEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgRXF1YWxpdHkpCiBURVNUKEV4
dGVuZGVkQ29sb3IsIEhhc2gpCiB7CiAgICAgewotICAgICAgICBDb2xvciBjMSB7IG1ha2VFeHRl
bmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsK
KyAgICAgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEu
MCB9IH07CiAgICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKLSAgICAgICAg
Q29sb3IgYzIgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNw
YWNlOjpEaXNwbGF5UDMpIH07CisgICAgICAgIENvbG9yIGMyIHsgRGlzcGxheVAzPGZsb2F0PiB7
IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVu
ZGVkKCkpOwogCiAgICAgICAgIEVYUEVDVF9FUShjMS5oYXNoKCksIGMyLmhhc2goKSk7CiAgICAg
fQogCiAgICAgewotICAgICAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41
LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICAgICAgQ29sb3IgYzEg
eyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgICAgIEVY
UEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKLSAgICAgICAgQ29sb3IgYzIgeyBtYWtlRXh0
ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpTUkdCKSB9OworICAg
ICAgICBDb2xvciBjMiB7IFNSR0JBPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9Owog
ICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgICAgIEVYUEVDVF9O
RShjMS5oYXNoKCksIGMyLmhhc2goKSk7CkBAIC0xNDQsMTQgKzE0NCwxNCBAQCBURVNUKEV4dGVu
ZGVkQ29sb3IsIEhhc2gpCiAgICAgaW50IGcgPSAxMjg7CiAgICAgaW50IGIgPSA2MzsKICAgICBp
bnQgYSA9IDEyNzsKLSAgICBDb2xvciByZ2IxIHsgbWFrZUV4dGVuZGVkQ29sb3IociAvIDI1NS4w
LCBnIC8gMjU1LjAsIGIgLyAyNTUuMCwgYSAvIDI1NS4wLCBDb2xvclNwYWNlOjpTUkdCKSB9Owor
ICAgIENvbG9yIHJnYjEgeyBTUkdCQTxmbG9hdD4geyByIC8gMjU1LjBmLCBnIC8gMjU1LjBmLCBi
IC8gMjU1LjBmLCBhIC8gMjU1LjBmIH0gfTsKICAgICBDb2xvciByZ2IyID0gbWFrZVNpbXBsZUNv
bG9yKHIsIGcsIGIsIGEpOwogICAgIEVYUEVDVF9ORShyZ2IxLmhhc2goKSwgcmdiMi5oYXNoKCkp
OwogfQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVDb25zdHJ1Y3RvcikKIHsKLSAgICBDb2xv
ciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6
OkRpc3BsYXlQMykgfTsKKyAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAu
NSwgMC4yNSwgMS4wIH0gfTsKICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAg
ICAgQ29sb3IgYzIoV1RGTW92ZShjMSkpOwpAQCAtMTcyLDcgKzE3Miw3IEBAIFRFU1QoRXh0ZW5k
ZWRDb2xvciwgTW92ZUNvbnN0cnVjdG9yKQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVBc3Np
Z25tZW50KQogewotICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAu
MjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgIENvbG9yIGMxIHsgRGlzcGxh
eVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgIEVYUEVDVF9UUlVFKGMx
LmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xvciBjMiA9IFdURk1vdmUoYzEpOwpAQCAtMTk0LDcg
KzE5NCw4IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgTW92ZUFzc2lnbm1lbnQpCiAKIFRFU1QoRXh0
ZW5kZWRDb2xvciwgQmFzaWNSZWZlcmVuY2VDb3VudGluZykKIHsKLSAgICBDb2xvciogYzEgPSBu
ZXcgQ29sb3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNw
YWNlOjpEaXNwbGF5UDMpIH07CisgICAgQ29sb3IqIGMxID0gbmV3IENvbG9yIHsgRGlzcGxheVAz
PGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OworICAgIAogICAgIEVYUEVDVF9UUlVF
KGMxLT5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IqIGMyID0gbmV3IENvbG9yKCpjMSk7CkBA
IC0yMjAsNyArMjIxLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBCYXNpY1JlZmVyZW5jZUNvdW50
aQogCiBDb2xvciBtYWtlQ29sb3IoKQogewotICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29s
b3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgIENv
bG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAg
IEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAgICAgRVhQRUNUX0VRKDF1LCBjMS5hc0V4
dGVuZGVkKCkucmVmQ291bnQoKSk7CiAKQEAgLTIzOCw3ICsyMzksNyBAQCBURVNUKEV4dGVuZGVk
Q29sb3IsIFJldHVyblZhbHVlcykKIAogVEVTVChFeHRlbmRlZENvbG9yLCBQM0NvbnZlcnNpb25U
b1NSR0IpCiB7Ci0gICAgQ29sb3IgcDNDb2xvciB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41
LCAwLjI1LCAwLjc1LCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgQ29sb3IgcDNDb2xv
ciB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMC43NSB9IH07CiAgICAgRVhQ
RUNUX1RSVUUocDNDb2xvci5pc0V4dGVuZGVkKCkpOwogCiAgICAgYXV0byBzUkdCQUNvbG9yID0g
cDNDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CkBAIC0yNTAsOSArMjUxLDEwIEBAIFRFU1Qo
RXh0ZW5kZWRDb2xvciwgUDNDb252ZXJzaW9uVG9TUkdCKQogCiBURVNUKEV4dGVuZGVkQ29sb3Is
IExpbmVhclNSR0JDb252ZXJzaW9uVG9TUkdCKQogewotICAgIENvbG9yIGxpbmVhckNvbG9yIHsg
bWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkxpbmVh
clJHQikgfTsKLSAgICBFWFBFQ1RfVFJVRShsaW5lYXJDb2xvci5pc0V4dGVuZGVkKCkpOwotICAg
IGF1dG8gc1JHQkFDb2xvciA9IGxpbmVhckNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAg
ICBDb2xvciBsaW5lYXJTUkdCQUNvbG9yIHsgTGluZWFyU1JHQkE8ZmxvYXQ+IHsgMS4wLCAwLjUs
IDAuMjUsIDAuNzUgfSB9OworICAgIEVYUEVDVF9UUlVFKGxpbmVhclNSR0JBQ29sb3IuaXNFeHRl
bmRlZCgpKTsKKworICAgIGF1dG8gc1JHQkFDb2xvciA9IGxpbmVhclNSR0JBQ29sb3IudG9TUkdC
QUxvc3N5PGZsb2F0PigpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVh
bChzUkdCQUNvbG9yLnJlZCwgMS4wZikpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50
aWFsbHlFcXVhbChzUkdCQUNvbG9yLmdyZWVuLCAwLjczNTM1NjkyN2YpKTsKICAgICBFWFBFQ1Rf
VFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ibHVlLCAwLjUzNzA5ODcw
NmYpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404072</attachid>
            <date>2020-07-11 15:15:54 -0700</date>
            <delta_ts>2020-07-11 16:21:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214204-20200711151553.patch</filename>
            <type>text/plain</type>
            <size>51167</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NDI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDIwLTA3LTExICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZWR1Y2Ugc3VyZmFjZSBhcmVhIG9m
IHRoZSBFeHRlbmRlZENvbG9yIGNsYXNzIHRvIGEgYmFyZSBtaW5pbXVtCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQyMDQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkZCBoZWxwZXIgZnVuY3Rpb24g
dG8gQ29sb3IgdG8gb3BlcmF0ZSBvbiB0aGUgdW5kZXJseWluZyBjb2xvciB0eXBlCisgICAgICAg
ICAgYW5kIHJlaW1wbGVtZW50IGEgYnVuY2ggb2YgZnVuY3Rpb25hbGl0eSB1c2luZyBpdCwgcmVk
dWNpbmcgdGhlIG5lZWQKKyAgICAgICAgICBmb3IgZHVwbGljYXRlIGltcGxlbWVudGF0aW9ucyBp
biBFeHRlbmRlZENvbG9yLgorICAgICAgICAtIEFkZCBjb25zdHJ1Y3RvcnMgdG8gQ29sb3IgdGhh
dCB0YWtlIGV4dGVuZGVkIGNvbG9yIHR5cGVzLCByZXBsYWNpbmcKKyAgICAgICAgICB0aGUgbWFr
ZUV4dGVuZGVkQ29sb3IgaGVscGVyIGZ1bmN0aW9uLiAKKworICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
UmVtb3ZlIEV4dGVuZWRDb2xvci5jcHAKKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6cGFyc2VDb2xvckZ1bmN0aW9uUGFyYW1ldGVycyk6CisgICAgICAgIFVzZSBuZXcg
Q29sb3IgY29uc3RydWN0b3IgdGFraW5nIENvbG9yQ29tcG9uZW50cyBhbmQgQ29sb3JTcGFjZS4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6IFJlaW1wbGltZW50IHVzaW5nIGNhbGxP
blVuZGVybHlpbmdUeXBlLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmludmVydGVkQ29sb3JX
aXRoQWxwaGEgY29uc3QpOiBSZWltcGxpbWVudCB1c2luZyBjYWxsT25VbmRlcmx5aW5nVHlwZS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OkNvbG9yKTogIAorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omhhc2ggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNhbGxPblVuZGVybHlpbmdUeXBlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBTG9zc3kgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0JsYWNr
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzV2hpdGVDb2xvcik6CisgICAgICAg
IC0gQWRkIG5ldyBjb25zdHJ1Y3RvcnMgdGFraW5nIGV4dGVuZGVkIGNvbG9yIHR5cGVzOiBTUkdC
QTxmbG9hdD4sIExpbmVhclNSR0JBPGZsb2F0PiBhbmQgRGlwbGF5UDM8ZmxvYXQ+LgorICAgICAg
ICAtIEFkZCBuZXcgZnVuY3Rpb24sIGNhbGxPblVuZGVybHlpbmdUeXBlLCB0byBtYWtlIHdvcmtp
bmcgd2l0aCBhbnkgdW5kZXJseWluZyB0eXBlIG1vcmUgc3RyZWFtbGluZWQuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6
OnRvU1JHQkEpOgorICAgICAgICAoV2ViQ29yZTo6dG9MaW5lYXJTUkdCQSk6CisgICAgICAgIChX
ZWJDb3JlOjp0b0Rpc3BsYXlQMyk6CisgICAgICAgIChXZWJDb3JlOjp0b0xpbmVhckRpc3BsYXlQ
Myk6CisgICAgICAgIChXZWJDb3JlOjp0b0hTTEEpOgorICAgICAgICBBZGQgaWRlbnRpdHkgY29u
dmVyc2lvbiBmdW5jdGlvbnMgdG8gbWFrZSBpbXBsZW1lbnRpbmcgZ2VuZXJpYyBmdW5jdGlvbnMg
bGlrZSBDb2xvcjo6dG9TUkdCQUxvc3N5IG1vcmUKKyAgICAgICAgc3RyYWlndGZvcndhcmQuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2VyaWFsaXphdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxp
emF0aW9uRm9yQ1NTKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JIVE1MKToK
KyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uaDoKKyAgICAgICAg
UmVwbGFjZSBzZXJpYWxpemF0aW9uIG9mIHRoZSBFeHRlbmRlZENvbG9yIHR5cGUgaXRzZWxmLCB3
aXRoIHNlcmlhbGl6YXRpb24gZm9yIHRoZSB1bmRlcmx5aW5nIGNvbG9yCisgICAgICAgIHR5cGVz
LiBVc2UgY2FsbE9uVW5kZXJseWluZ1R5cGUgdG8gZGlzcGF0Y2ggdG8gdGhlIHJpZ2h0IG9uZS4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaDoKKyAgICAgICAgLSBB
ZGRzIENvbXBvbmVudFRyYWl0cyBzdHJ1Y3QgdG8gZ2V0IGluZm9ybWF0aW9uIGxpa2UgbWluL21h
eCB2YWx1ZSBvZiB0aGUgY29tcG9uZW50IHR5cGVzLgorICAgICAgICAtIEFkZHMgYHVzaW5nIENv
bXBvbmVudFR5cGUgPSBUO2AgdG8gZWFjaCBjb2xvciB0eXBlLCB0byBhbGxvdyBlYXN5IGFjY2Vz
cyB0byB0aGUgdHlwZSBpbgorICAgICAgICAgIGRlZHVjZWQgY29udGV4dHMuCisgICAgICAgIC0g
QWRkcyBzdGF0aWMgY29uc3RleHByIENvbG9yU3BhY2UgdG8gZWFjaCBjb2xvciB0eXBlIHRoYXQg
Y3VycmVudGx5IGhhcyBhIENvbG9yU3BhY2UgbWFwcGluZy4gCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6aXNCbGFjayk6
CisgICAgICAgIChXZWJDb3JlOjppc1doaXRlKToKKyAgICAgICAgQWRkIGhlbHBlcnMgdG8gaW1w
bGVtZW50IENvbG9yOjppc0JsYWNrL0NvbG9yOjppc1doaXRlQ29sb3IgZm9yIGVhY2ggY29sb3Ig
dHlwZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbmRlZENvbG9yOjpFeHRlbmRlZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
ZGVkQ29sb3I6OmNhbGxPblVuZGVybHlpbmdUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkV4dGVuZGVkQ29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJl
ZHVjZSBkb3duIHRvIGp1c3QgY29uc3RydWN0aW9uLCBtZW1iZXIgYWNjZXNzIGFuZCB0aGUgY2Fs
bE9uVW5kZXJseWluZ1R5cGUgaGVscGVyLgorICAgICAgICBJbiBmdXR1cmUgcmV2aXNpb25zLCBF
eHRlbmRlZENvbG9yIHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZXJuYWwgY2xhc3Mgb2Yg
Q29sb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Q29s
b3IpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIGNvbnN0cnVjdG9yIGRlbGVnYXRpb24uCisKIDIw
MjAtMDctMTEgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAg
ICAgUkVHUkVTU0lPTihyMjYwMjc2KTogT3ZlcmZsb3cgc2Nyb2xsaW5nIGxheWVycyBtaXNwbGFj
ZWQgaW5zaWRlIFNWRyBmb3JlaWduIG9iamVjdApJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9u
IDI2NDI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0xODI3LDcgKzE4MjcsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9DdXN0b21QYWludEltYWdlLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL0V4
dGVuZGVkQ29sb3IuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5
Z29uLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY0MjY5KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03MjI4LDcgKzcy
MjgsNiBAQAogCQkzMUQyNkJDNTFGODZEMjY4MDA4RkYyNTUgLyogSlNJbWFnZUJpdG1hcE9wdGlv
bnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbWFnZUJpdG1hcE9wdGlv
bnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFEMjZCQzYxRjg2RDI2OTAwOEZG
MjU1IC8qIEpTSW1hZ2VCaXRtYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNJbWFnZUJpdG1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMx
RDU5MUIxMTY2OTdBNkMwMEU2QkYwMiAvKiBQbHVnSW5DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGx1Z0luQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTMxRENERjQxMURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuZGVkQ29sb3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMURDREY0MjFEQTFDNDU0MDBFQTVCOTMgLyogRXh0
ZW5kZWRDb2xvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbmRlZENv
bG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxREVBNDUzMUIzOUY0RDkwMEY3
NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViU3lzdGVtQmFja2Ryb3BMYXllci5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMzFERUE0NTQxQjM5RjREOTAwRjc3MTc4IC8qIFdlYlN5c3RlbUJh
Y2tkcm9wTGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU3lzdGVt
QmFja2Ryb3BMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk1ODIsOCAr
MTk1ODEsOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNTE1QkUxOTcxRDU0RjZCRDAwREQ3QzY4
IC8qIEhJREdhbWVwYWQuY3BwICovLAogCQkJCTUxNUJFMTk4MUQ1NEY2QkQwMEREN0M2OCAvKiBI
SURHYW1lcGFkLmggKi8sCi0JCQkJNTE1QkUxOTkxRDU0RjZCRDAwREQ3QzY4IC8qIEhJREdhbWVw
YWRQcm92aWRlci5tbSAqLywKIAkJCQk1MTVCRTE5QTFENTRGNkJEMDBERDdDNjggLyogSElER2Ft
ZXBhZFByb3ZpZGVyLmggKi8sCisJCQkJNTE1QkUxOTkxRDU0RjZCRDAwREQ3QzY4IC8qIEhJREdh
bWVwYWRQcm92aWRlci5tbSAqLywKIAkJCQk1MTdFMDNGNDI0QjZCOTYzMDA1NDg5NUEgLyogTXVs
dGlHYW1lcGFkUHJvdmlkZXIuaCAqLywKIAkJCQk1MTdFMDNGNTI0QjZCOTY0MDA1NDg5NUEgLyog
TXVsdGlHYW1lcGFkUHJvdmlkZXIubW0gKi8sCiAJCQkpOwpAQCAtMjU1NTYsNyArMjU1NTUsNiBA
QAogCQkJCTJEMjlFQ0MyMTkyRUNDODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JD
bGllbnQuaCAqLywKIAkJCQkyRDI5RUNDMzE5MkVDQzgzMDA5ODRCNzggLyogRGlzcGxheVJlZnJl
c2hNb25pdG9yTWFuYWdlci5jcHAgKi8sCiAJCQkJMkQyOUVDQzQxOTJFQ0M4MzAwOTg0Qjc4IC8q
IERpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuaCAqLywKLQkJCQkzMURDREY0MTFEQTFDNDU0
MDBFQTVCOTMgLyogRXh0ZW5kZWRDb2xvci5jcHAgKi8sCiAJCQkJMzFEQ0RGNDIxREExQzQ1NDAw
RUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuaCAqLywKIAkJCQk2RTY3RDJBODEyODBFOEJEMDA4NzU4
RjcgLyogRXh0ZW5zaW9uc0dMLmggKi8sCiAJCQkJQjI3NTM1M0EwQjA1MzgxNDAwMkNFNjRGIC8q
IEZsb2F0UG9pbnQuY3BwICovLApAQCAtMjY4ODAsNyArMjY4NzgsNiBAQAogCQlDRDk0QTVDQjFG
NzFDQjQ2MDBGNTI1QzUgLyogZW5jcnlwdGVkbWVkaWEgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUNERTNBRTEzMjRCNDkzNkYwMDEyOEU3RSAvKiBDRE1V
dGlsaXRpZXMuY3BwICovLAogCQkJCUNEOTRBNUQ5MUY3MUNCOUYwMEY1MjVDNSAvKiBjbGVhcmtl
eSAqLywKIAkJCQlDREY3NTY5QjIxNUMyM0E0MDBFRkNCNTAgLyogQ0RNRW5jcnlwdGlvblNjaGVt
ZS5oICovLAogCQkJCUNEOTRBNUQxMUY3MUNCNkIwMEY1MjVDNSAvKiBDRE1GYWN0b3J5LmNwcCAq
LywKQEAgLTI2ODk1LDEyICsyNjg5MiwxMyBAQAogCQkJCUNEOTRBNUQ2MUY3MUNCNkQwMEY1MjVD
NSAvKiBDRE1NZXNzYWdlVHlwZS5oICovLAogCQkJCUNEM0NFMTFDMjQwNDUxQUYwMDRCQTAxRCAv
KiBDRE1Qcml2YXRlLmNwcCAqLywKIAkJCQlDRDk0QTVDRjFGNzFDQjZBMDBGNTI1QzUgLyogQ0RN
UHJpdmF0ZS5oICovLAotCQkJCUNERTNBRTEwMjRCNDkxNjkwMDEyOEU3RSAvKiBDRE1VdGlsaXRp
ZXMuaCAqLywKIAkJCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1RDUgLyogQ0RNUHJveHkuY3BwICov
LAogCQkJCUNEOTRBNUNGMUY3MUNCNjEwMEY1MjVDNSAvKiBDRE1Qcm94eS5oICovLAogCQkJCUNE
OTRBNUNDMUY3MUNCNjkwMEY1MjVDNSAvKiBDRE1SZXF1aXJlbWVudC5oICovLAogCQkJCUNEOTRB
NUQwMUY3MUNCNkIwMEY1MjVDNSAvKiBDRE1SZXN0cmljdGlvbnMuaCAqLywKIAkJCQlDRDk0QTVE
NTFGNzFDQjZEMDBGNTI1QzUgLyogQ0RNU2Vzc2lvblR5cGUuaCAqLywKKwkJCQlDREUzQUUxMzI0
QjQ5MzZGMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmNwcCAqLywKKwkJCQlDREUzQUUxMDI0QjQ5
MTY5MDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGVuY3J5
cHRlZG1lZGlhOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTMwMDgyLDYgKzMwMDgw
LDcgQEAKIAkJCQlDRDNDRTEwMzI0MDFBQURBMDA0QkEwMUQgLyogQ0RNUmVzdHJpY3Rpb25zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDREU1OTU5NzFCRjI2RTIxMDBBMUNCRTggLyogQ0RNU2Vzc2lv
bk1lZGlhU291cmNlQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0QzQ0UxMDQyNDAxQUFE
QTAwNEJBMDFEIC8qIENETVNlc3Npb25UeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlDREUzQUUx
MjI0QjQ5MTZBMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
RkE5MDRDQTE3OEU2MUY1MDA0QzhBMkQgLyogQ2VydGlmaWNhdGVJbmZvLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MUI4RjBCNTIxOTUzRDY1MDAwQzJCMDAgLyogQ2VydGlmaWNhdGVJbmZvQmFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzNkZEMTUxNkM3ODI2NTAwRjg4N0MxIC8qIENoYW5nZVZl
cnNpb25EYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMjE5LDcgKzMxMjE4LDYgQEAKIAkJCQlG
MzQ0Qzc1MzExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0EwRTc3MEYxMEMwMEE4ODAwQTAyNzZFIC8qIEluc3BlY3Rv
ckZyb250ZW5kSG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0E1NDg1ODAxNEUwMkQ1MTAwNkFF
MDVBIC8qIEluc3BlY3Rvckhpc3RvcnkuaCBpbiBIZWFkZXJzICovLAotCQkJCUNERTNBRTEyMjRC
NDkxNkEwMDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1Qjgx
Q0FFMUZBQTQ0NjIwMDM3RDFFNiAvKiBJbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMjBENjI5MjcxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NjBFNkQyMzBERTMwMzAwNDYxQUFFIC8q
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvblB1YmxpYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjQw
Miw2ICszMjQwMCw3IEBACiAJCQkJODUwMzFCNDgwQTQ0RUZDNzAwRjk5MkUwIC8qIE1vdXNlUmVs
YXRlZEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOURGQzA5OUU2NDkyMDA1NkU1ODEg
LyogTW92ZVNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQjE3MDA2MTRB
MkJBQjIwMEEyQjVEOSAvKiBNdWx0aUNoYW5uZWxSZXNhbXBsZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTUxN0UwM0Y3MjRCNkQ5ODQwMDU0ODk1QSAvKiBNdWx0aUdhbWVwYWRQcm92aWRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2QjAxQjNCNjVBQzAwMDVERDc5IC8qIE11dGFibGVSYW5n
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2QjExQjNCNjVBQzAwMDVERDc5IC8qIE11dGFi
bGVSYW5nZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM2RjA5MDBBMTQzMjdCNjEwMDY4NTg0
OSAvKiBNdXRhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTMzMjgxLDcgKzMzMjgw
LDYgQEAKIAkJCQlFQ0E2ODBDNzFFNjc3MjQ1MDA3MzFEMjAgLyogU3RyaW5nVXRpbGl0aWVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5QjZDNDE1MzEzNDQ5NDkwMDAwODVCNjIgLyogU3RyaW5nV2l0
aERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ5Rjc3NzYwRUZFQzYyMDAwOTA4NDlE
IC8qIFN0cm9rZVN0eWxlQXBwbGllci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE3RTAzRjcyNEI2
RDk4NDAwNTQ4OTVBIC8qIE11bHRpR2FtZXBhZFByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0MTRCODIwNTFENkRGMEU1MDA3N0VCRTMgLyogU3RydWN0dXJlZENsb25lLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFNDVCQTZCNjIzNzYyMkEzMDA0REZDMDcgLyogU3R5bGVBZGp1c3Rlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI2QTMwRTgxREM0RjAwQjI1OTY1IC8qIFN0eWxlQmFja2dy
b3VuZERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ0NzMsNiArMzQ0NzEsNyBAQAogCQkJCUNE
REUwMkVEMThCM0VENkQwMENGN0ZGMSAvKiBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uT2JqQy5tbSBp
biBTb3VyY2VzICovLAogCQkJCUNEREUwMkYwMThCNTY1MTMwMENGN0ZGMSAvKiBDRE1TZXNzaW9u
QVZTdHJlYW1TZXNzaW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RFNTk1OUQxQkYyNzU3MTAw
QTFDQkU4IC8qIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMubW0gaW4gU291cmNlcyAqLywK
KwkJCQlDREUzQUUxNDI0QjQ5MzcwMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUExNDA5MEZCMUFBNTFFMUQwMDkxMTkxQSAvKiBDb250ZW50RmlsdGVyVW5i
bG9ja0hhbmRsZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3QUZGNDIzMUVGQjE0NDkw
MEI1NDVCMyAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDZDNjk2Q0MxRTcyMDVGQzAwNTk3OTM3IC8qIENQVU1vbml0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0zNDgwMiw3ICszNDgwMSw2IEBACiAJCQkJREVDQTdEQjcxRjlFNjdCNjAwRTNCNjYx
IC8qIFVuaWZpZWRTb3VyY2UxNjcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREVDQTdEQjgxRjlF
NjdCNjAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNjguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
REVDQTdEQjkxRjlFNjdCNjAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNjkuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQ0RFM0FFMTQyNEI0OTM3MDAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlERUNBN0RCQTFGOUU2N0I2MDBFM0I2NjEgLyogVW5pZmllZFNv
dXJjZTE3MC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBN0RGQjFGOUVCMzY0MDBFM0I2NjEg
LyogVW5pZmllZFNvdXJjZTE3MS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBN0RGQzFGOUVC
MzY0MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTE3Mi5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2Vy
SGVscGVycy5jcHAJKHJldmlzaW9uIDI2NDI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjU4LDcg
KzY1OCw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXIKICAgICAg
ICAgY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkRpc3BsYXlQMzsKICAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogICAgIGNvbnN1bWVJZGVudChhcmdzKTsKIApAQCAtNjc2LDcgKzY3Niw3IEBAIHN0
YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXIKICAgICAgICAgaWYgKCFhbHBo
YVBhcmFtZXRlcikKICAgICAgICAgICAgIGFscGhhUGFyYW1ldGVyID0gY29uc3VtZU51bWJlcihh
cmdzLCBWYWx1ZVJhbmdlQWxsKTsKICAgICAgICAgaWYgKCFhbHBoYVBhcmFtZXRlcikKLSAgICAg
ICAgICAgIHJldHVybiBDb2xvcigpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgICAg
ICBjb2xvckNoYW5uZWxzWzNdID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigxLjAsIGFscGhhUGFy
YW1ldGVyLT5pc1BlcmNlbnRhZ2UoKSA/IChhbHBoYVBhcmFtZXRlci0+ZG91YmxlVmFsdWUoKSAv
IDEwMCkgOiBhbHBoYVBhcmFtZXRlci0+ZG91YmxlVmFsdWUoKSkpOwogICAgIH0KQEAgLTY4NCw5
ICs2ODQsOSBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uUGFyYW1ldGVyCiAgICAg
Ly8gRklYTUU6IFN1cHBvcnQgdGhlIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZhbGxiYWNrIGNv
bG9yIHZhbHVlcy4KIAogICAgIGlmICghYXJncy5hdEVuZCgpKQotICAgICAgICByZXR1cm4gQ29s
b3IoKTsKLSAgICAKLSAgICByZXR1cm4gbWFrZUV4dGVuZGVkQ29sb3IoY29sb3JDaGFubmVsc1sw
XSwgY29sb3JDaGFubmVsc1sxXSwgY29sb3JDaGFubmVsc1syXSwgY29sb3JDaGFubmVsc1szXSwg
Y29sb3JTcGFjZSk7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gQ29sb3IgeyBD
b2xvckNvbXBvbmVudHMgeyBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JDaGFubmVsc1swXSksIHN0
YXRpY19jYXN0PGZsb2F0Pihjb2xvckNoYW5uZWxzWzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNv
bG9yQ2hhbm5lbHNbMl0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JDaGFubmVsc1szXSkgfSwg
Y29sb3JTcGFjZSB9OwogfQogCiBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHBhcnNl
SGV4Q29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGJvb2wgYWNjZXB0UXVpcmt5Q29s
b3JzKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAko
cmV2aXNpb24gMjY0MjY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAKLSNpbmNsdWRlICJBbmltYXRpb25VdGlsaXRpZXMu
aCIKICNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJDb2xvclV0aWxp
dGllcy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMjYsMjIg
KzEyMywyNiBAQCBmbG9hdCBDb2xvcjo6bHVtaW5hbmNlKCkgY29uc3QKIAogQ29sb3IgQ29sb3I6
OmNvbG9yV2l0aEFscGhhKGZsb2F0IGFscGhhKSBjb25zdAogewotICAgIGlmIChpc0V4dGVuZGVk
KCkpCi0gICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY29sb3JXaXRoQWxwaGEoYWxwaGEpOwot
Ci0gICAgQ29sb3IgcmVzdWx0ID0gY29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoYXNJbmxpbmUoKSwg
YWxwaGEpOwotCi0gICAgLy8gRklYTUU6IFdoeSBpcyBwcmVzZXJ2aW5nIHRoZSBzZW1hbnRpYyBi
aXQgZGVzaXJlZCBhbmQvb3IgY29ycmVjdCBoZXJlPwotICAgIGlmIChpc1NlbWFudGljKCkpCi0g
ICAgICAgIHJlc3VsdC50YWdBc1NlbWFudGljKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBy
ZXR1cm4gY2FsbE9uVW5kZXJseWluZ1R5cGUoV1RGOjptYWtlVmlzaXRvcigKKyAgICAgICAgWyZd
IChjb25zdCBTUkdCQTx1aW50OF90PiYgdW5kZXJseWluZ0NvbG9yKSAtPiBDb2xvciB7CisgICAg
ICAgICAgICBDb2xvciByZXN1bHQgPSBjb2xvcldpdGhPdmVycmlkZW5BbHBoYSh1bmRlcmx5aW5n
Q29sb3IsIGFscGhhKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IFdoeSBpcyBwcmVzZXJ2aW5n
IHRoZSBzZW1hbnRpYyBiaXQgZGVzaXJlZCBhbmQvb3IgY29ycmVjdCBoZXJlPworICAgICAgICAg
ICAgaWYgKGlzU2VtYW50aWMoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRp
YygpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfSwKKyAgICAgICAgWyZd
IChjb25zdCBhdXRvJiB1bmRlcmx5aW5nQ29sb3IpIC0+IENvbG9yIHsKKyAgICAgICAgICAgIHJl
dHVybiBjb2xvcldpdGhPdmVycmlkZW5BbHBoYSh1bmRlcmx5aW5nQ29sb3IsIGFscGhhKTsKKyAg
ICAgICAgfQorICAgICkpOwogfQogCiBDb2xvciBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBo
YShmbG9hdCBhbHBoYSkgY29uc3QKIHsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICBy
ZXR1cm4gYXNFeHRlbmRlZCgpLmludmVydGVkQ29sb3JXaXRoQWxwaGEoYWxwaGEpOwotICAgIHJl
dHVybiBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGFzSW5saW5lKCksIGFscGhhKTsK
KyAgICByZXR1cm4gY2FsbE9uVW5kZXJseWluZ1R5cGUoWyZdIChjb25zdCBhdXRvJiB1bmRlcmx5
aW5nQ29sb3IpIC0+IENvbG9yIHsKKyAgICAgICAgcmV0dXJuIGludmVydGVkQ29sb3JXaXRoT3Zl
cnJpZGVuQWxwaGEodW5kZXJseWluZ0NvbG9yLCBhbHBoYSk7CisgICAgfSk7CiB9CiAKIENvbG9y
IENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjY0MjY5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIlNpbXBsZUNvbG9yLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogI2lmIFVTRShDRykKQEAgLTUxLDYgKzUyLDE4IEBA
IHR5cGVkZWYgc3RydWN0IF9HZGtSR0JBIEdka1JHQkE7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorLy8gQWJsZSB0byByZXByZXNlbnQ6CisvLyAgICAtIFNwZWNpYWwgImludmFsaWQgY29sb3Ii
IHN0YXRlLCB0cmVhdGVkIGFzIHRyYW5zcGFyZW50IGJsYWNrIGJ1dCBkaXN0aW5ndWlzaGFibGUK
Ky8vICAgIC0gNHggOC1iaXQgKDAtMjU1KSBzUkdCQSwgc3RvcmVkIGlubGluZSwgbm8gYWxsb2Nh
dGlvbgorLy8gICAgLSA0eCBmbG9hdCAoMC0xKSBzUkdCQSwgc3RvcmVkIGluIGEgcmVmZXJlbmNl
IGNvdW50ZWQgc3ViLW9iamVjdAorLy8gICAgLSA0eCBmbG9hdCAoMC0xKSBMaW5lYXIgc1JHQkEs
IHN0b3JlZCBpbiBhIHJlZmVyZW5jZSBjb3VudGVkIHN1Yi1vYmplY3QKKy8vICAgIC0gNHggZmxv
YXQgKDAtMSkgRGlzcGxheVAzLCBzdG9yZWQgaW4gYSByZWZlcmVuY2UgY291bnRlZCBzdWItb2Jq
ZWN0CisvLworLy8gQWRkaXRpb25hbGx5LCB0aGUgaW5saW5lIDgtYml0IHNSR0JBIGNhbiBoYXZl
IGFuIG9wdGlvbmFsICJzZW1hbnRpYyIgYml0IHNldCBvbiBpdCwKKy8vIHdoaWNoIGluZGljYXRl
cyB0aGUgY29sb3Igb3JpZ2luYXRlZCBmcm9tIGEgQ1NTIHNlbWFudGljIGNvbG9yIG5hbWUuCisv
LyBGSVhNRTogSWYgd2Uga2VlcCB0aGUgInNlbWFudGljIiBiaXQgb24gQ29sb3IsIHdlIHNob3Vs
ZCBleHRlbmQgc3VwcG9ydCB0byBhbGwgY29sb3JzLAorLy8gbm90IGp1c3QgaW5saW5lIG9uZXMs
IGJ5IHVzaW5nIHRoZSB1bnVzZWQgcG9pbnRlciBiaXRzLgorCiBjbGFzcyBDb2xvciB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC02Myw3ICs3NiwxMCBAQCBwdWJs
aWM6CiAgICAgQ29sb3IoU1JHQkE8dWludDhfdD4sIFNlbWFudGljVGFnKTsKICAgICBDb2xvcihP
cHRpb25hbDxTUkdCQTx1aW50OF90Pj4sIFNlbWFudGljVGFnKTsKIAotICAgIENvbG9yKFJlZjxF
eHRlbmRlZENvbG9yPiYmKTsKKyAgICBDb2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+LCBDb2xv
clNwYWNlKTsKKyAgICBDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4mKTsKKyAgICBDb2xvcihjb25z
dCBMaW5lYXJTUkdCQTxmbG9hdD4mKTsKKyAgICBDb2xvcihjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+
Jik7CiAKICAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZUVtcHR5VmFsdWVUeXBlKTsK
ICAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpOwpAQCAt
NzIsMzQgKzg4LDM0IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihjb25zdCBD
b2xvciYpOwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKENvbG9yJiYpOwogCisgICAgV0VCQ09S
RV9FWFBPUlQgQ29sb3ImIG9wZXJhdG9yPShjb25zdCBDb2xvciYpOworICAgIFdFQkNPUkVfRVhQ
T1JUIENvbG9yJiBvcGVyYXRvcj0oQ29sb3ImJik7CisKICAgICB+Q29sb3IoKTsKIAotICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSB8fCAobV9jb2xvckRhdGEu
aW5saW5lQ29sb3JBbmRGbGFncyAmIHZhbGlkSW5saW5lQ29sb3JCaXQpOyB9CisgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0OwogCi0gICAgLy8gVHJ1ZSBpZiB0aGUgY29sb3Igb3JpZ2luYXRlZCBm
cm9tIGEgQ1NTIHNlbWFudGljIGNvbG9yIG5hbWUuCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Qg
eyByZXR1cm4gaXNFeHRlbmRlZCgpIHx8IChtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdz
ICYgdmFsaWRJbmxpbmVDb2xvckJpdCk7IH0KICAgICBib29sIGlzU2VtYW50aWMoKSBjb25zdCB7
IHJldHVybiBpc0lubGluZSgpICYmIChtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzICYg
aXNTZW1hbnRpY0lubGluZUNvbG9yQml0KTsgfQogCiAgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0
IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID09IDEuMCA6IGFz
SW5saW5lKCkuYWxwaGEgPT0gMjU1OyB9CiAgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJl
dHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IGFzSW5saW5l
KCkuYWxwaGEgPiAwOyB9Ci0KICAgICB1aW50OF90IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNF
eHRlbmRlZCgpID8gY29udmVydFRvQ29tcG9uZW50Qnl0ZShhc0V4dGVuZGVkKCkuYWxwaGEoKSkg
OiBhc0lubGluZSgpLmFscGhhOyB9CiAgICAgZmxvYXQgYWxwaGFBc0Zsb2F0KCkgY29uc3QgeyBy
ZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgOiBjb252ZXJ0VG9Db21w
b25lbnRGbG9hdChhc0lubGluZSgpLmFscGhhKTsgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGx1bWluYW5jZSgpIGNvbnN0OworICAgIFdF
QkNPUkVfRVhQT1JUIGZsb2F0IGxpZ2h0bmVzcygpIGNvbnN0OyAvLyBGSVhNRTogUmVwbGFjZSBy
ZW1haW5pbmcgdXNlcyB3aXRoIGx1bWluYW5jZS4KIAotICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6
cGFpcjxDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+PiBjb2xvclNwYWNlQW5kQ29t
cG9uZW50cygpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGRlY2x0eXBl
KGF1dG8pIGNhbGxPblVuZGVybHlpbmdUeXBlKEZ1bmN0b3ImJikgY29uc3Q7CiAKICAgICAvLyBU
aGlzIHdpbGwgY29udmVydCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBpbnRvIHNSR0IuCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4gdG9TUkdCQUxvc3N5KCkgY29uc3Q7CiAK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRz
PGZsb2F0Pj4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKKwogICAgIFdFQkNPUkVf
RVhQT1JUIENvbG9yIGxpZ2h0ZW5lZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9y
IGRhcmtlbmVkKCkgY29uc3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBsdW1pbmFuY2Uo
KSBjb25zdDsKLQotICAgIC8vIEZJWE1FOiBSZXBsYWNlIHJlbWFpbmluZyB1c2VzIHdpdGggbHVt
aW5hbmNlLgotICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGxpZ2h0bmVzcygpIGNvbnN0OwotCiAg
ICAgQ29sb3IgaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNv
bnN0OwogICAgIENvbG9yIGludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0
OwogCkBAIC0xNDQsOSArMTYwLDYgQEAgcHVibGljOgogICAgIGNvbnN0IEV4dGVuZGVkQ29sb3Im
IGFzRXh0ZW5kZWQoKSBjb25zdDsKICAgICBTUkdCQTx1aW50OF90PiBhc0lubGluZSgpIGNvbnN0
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3ImIG9wZXJhdG9yPShjb25zdCBDb2xvciYpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yJiBvcGVyYXRvcj0oQ29sb3ImJik7Ci0KICAgICAvLyBF
eHRlbmRlZCBhbmQgbm9uLWV4dGVuZGVkIGNvbG9ycyB3aWxsIGFsd2F5cyBiZSBub24tZXF1YWwu
CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3Im
IGIpOwogICAgIGZyaWVuZCBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0IENv
bG9yJiBhLCBjb25zdCBDb2xvciYgYik7CkBAIC0xNTksNyArMTcyLDEyIEBAIHB1YmxpYzoKICAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+IGRlY29kZShE
ZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBzZXRJbmxpbmVDb2xvcihTUkdCQTx1aW50
OF90Pik7CisgICAgQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYpOworCisgICAgdm9pZCBzZXRD
b2xvcihTUkdCQTx1aW50OF90Pik7CisgICAgdm9pZCBzZXRDb2xvcihjb25zdCBTUkdCQTxmbG9h
dD4mKTsKKyAgICB2b2lkIHNldENvbG9yKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYpOworICAg
IHZvaWQgc2V0Q29sb3IoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOwogICAgIHZvaWQgc2V0RXh0
ZW5kZWRDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJik7CiAKICAgICB2b2lkIHRhZ0FzU2VtYW50
aWMoKSB7IG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgfD0gaXNTZW1hbnRpY0lubGlu
ZUNvbG9yQml0OyB9CkBAIC0yMjcsMjkgKzI0NSw1OSBAQCBpbmxpbmUgYm9vbCBlcXVhbElnbm9y
aW5nU2VtYW50aWNDb2xvcihjCiAKIGlubGluZSBDb2xvcjo6Q29sb3IoU1JHQkE8dWludDhfdD4g
Y29sb3IpCiB7Ci0gICAgc2V0SW5saW5lQ29sb3IoY29sb3IpOworICAgIHNldENvbG9yKGNvbG9y
KTsKIH0KIAogaW5saW5lIENvbG9yOjpDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gY29s
b3IpCiB7CiAgICAgaWYgKGNvbG9yKQotICAgICAgICBzZXRJbmxpbmVDb2xvcigqY29sb3IpOwor
ICAgICAgICBzZXRDb2xvcigqY29sb3IpOwogfQogCiBpbmxpbmUgQ29sb3I6OkNvbG9yKFNSR0JB
PHVpbnQ4X3Q+IGNvbG9yLCBTZW1hbnRpY1RhZykKIHsKLSAgICBzZXRJbmxpbmVDb2xvcihjb2xv
cik7CisgICAgc2V0Q29sb3IoY29sb3IpOwogICAgIHRhZ0FzU2VtYW50aWMoKTsKIH0KIAogaW5s
aW5lIENvbG9yOjpDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gY29sb3IsIFNlbWFudGlj
VGFnKQogewogICAgIGlmIChjb2xvcikgewotICAgICAgICBzZXRJbmxpbmVDb2xvcigqY29sb3Ip
OworICAgICAgICBzZXRDb2xvcigqY29sb3IpOwogICAgICAgICB0YWdBc1NlbWFudGljKCk7CiAg
ICAgfQogfQogCitpbmxpbmUgQ29sb3I6OkNvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4gY29t
cG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIHN3aXRjaCAoY29sb3JTcGFj
ZSkgeworICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoKKyAgICAgICAgc2V0Q29sb3IoYXNTUkdC
QShjb21wb25lbnRzKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbG9yU3BhY2U6Okxp
bmVhclJHQjoKKyAgICAgICAgc2V0Q29sb3IoYXNMaW5lYXJTUkdCQShjb21wb25lbnRzKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoKKyAgICAgICAg
c2V0Q29sb3IoYXNEaXNwbGF5UDMoY29tcG9uZW50cykpOworICAgICAgICByZXR1cm47CisgICAg
fQorfQorCitpbmxpbmUgQ29sb3I6OkNvbG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCit7
CisgICAgc2V0Q29sb3IoY29sb3IpOworfQorCitpbmxpbmUgQ29sb3I6OkNvbG9yKGNvbnN0IExp
bmVhclNSR0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAgc2V0Q29sb3IoY29sb3IpOworfQorCitp
bmxpbmUgQ29sb3I6OkNvbG9yKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQoreworICAg
IHNldENvbG9yKGNvbG9yKTsKK30KKwogaW5saW5lIENvbG9yOjpDb2xvcihSZWY8RXh0ZW5kZWRD
b2xvcj4mJiBleHRlbmRlZENvbG9yKQogewogICAgIHNldEV4dGVuZGVkQ29sb3IoV1RGTW92ZShl
eHRlbmRlZENvbG9yKSk7CkBAIC0yODEsMTggKzMyOSwzMyBAQCBpbmxpbmUgQ29sb3I6On5Db2xv
cigpCiBpbmxpbmUgdW5zaWduZWQgQ29sb3I6Omhhc2goKSBjb25zdAogewogICAgIGlmIChpc0V4
dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuaGFzaCgpOworICAgICAgICBy
ZXR1cm4gY29tcHV0ZUhhc2goYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKSwgYXNFeHRlbmRlZCgp
LmNvbG9yU3BhY2UoKSk7CiAgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2NvbG9yRGF0YS5pbmxp
bmVDb2xvckFuZEZsYWdzKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4gQ29s
b3I6OnRvU1JHQkFMb3NzeSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBkZWNs
dHlwZShhdXRvKSBDb2xvcjo6Y2FsbE9uVW5kZXJseWluZ1R5cGUoRnVuY3RvciYmIGZ1bmN0b3Ip
IGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5k
ZWQoKS50b1NSR0JBTG9zc3k8VD4oKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92
PFQsIHVpbnQ4X3Q+KQotICAgICAgICByZXR1cm4gYXNJbmxpbmUoKTsKLSAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0Nv
bXBvbmVudEZsb2F0cyhhc0lubGluZSgpKTsKKyAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5j
YWxsT25VbmRlcmx5aW5nVHlwZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOworICAg
IHJldHVybiBmdW5jdG9yKGFzSW5saW5lKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBT
UkdCQTxUPiBDb2xvcjo6dG9TUkdCQUxvc3N5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2FsbE9u
VW5kZXJseWluZ1R5cGUoV1RGOjptYWtlVmlzaXRvcigKKyAgICAgICAgW10gKGNvbnN0IFNSR0JB
PHVpbnQ4X3Q+JiBjb2xvcikgeworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3Nh
bWVfdjxULCB1aW50OF90PikKKyAgICAgICAgICAgICAgICByZXR1cm4gY29sb3I7CisgICAgICAg
ICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKKyAgICAgICAgICAg
ICAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKGNvbG9yKTsKKyAgICAgICAgfSwK
KyAgICAgICAgW10gKGNvbnN0IGF1dG8mIGNvbG9yKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfc2FtZV92PFQsIHVpbnQ4X3Q+KQorICAgICAgICAgICAgICAgIHJldHVybiBj
b252ZXJ0VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBKGNvbG9yKSk7CisgICAgICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKKyAgICAgICAgICAgICAgICByZXR1
cm4gdG9TUkdCQShjb2xvcik7CisgICAgICAgIH0KKyAgICApKTsKIH0KIAogaW5saW5lIENvbG9y
IENvbG9yOjppbnZlcnRlZENvbG9yV2l0aEFscGhhKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29u
c3QKQEAgLTMyNywxMiArMzkwLDI3IEBAIGlubGluZSBTUkdCQTx1aW50OF90PiBDb2xvcjo6YXNJ
bmxpbmUoKSAKICAgICByZXR1cm4gYXNTUkdCQShQYWNrZWQ6OlJHQkEgeyBzdGF0aWNfY2FzdDx1
aW50MzJfdD4obV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyA+PiAzMikgfSk7CiB9CiAK
LWlubGluZSB2b2lkIENvbG9yOjpzZXRJbmxpbmVDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikK
K2lubGluZSB2b2lkIENvbG9yOjpzZXRDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikKIHsKICAg
ICBtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KFBhY2tlZDo6UkdCQSB7IGNvbG9yIH0udmFsdWUpIDw8IDMyOwogICAgIHRhZ0FzVmFsaWQoKTsK
IH0KIAoraW5saW5lIHZvaWQgQ29sb3I6OnNldENvbG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29s
b3IpCit7CisgICAgc2V0RXh0ZW5kZWRDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoY29sb3Ip
KTsKK30KKworaW5saW5lIHZvaWQgQ29sb3I6OnNldENvbG9yKGNvbnN0IExpbmVhclNSR0JBPGZs
b2F0PiYgY29sb3IpCit7CisgICAgc2V0RXh0ZW5kZWRDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVh
dGUoY29sb3IpKTsKK30KKworaW5saW5lIHZvaWQgQ29sb3I6OnNldENvbG9yKGNvbnN0IERpc3Bs
YXlQMzxmbG9hdD4mIGNvbG9yKQoreworICAgIHNldEV4dGVuZGVkQ29sb3IoRXh0ZW5kZWRDb2xv
cjo6Y3JlYXRlKGNvbG9yKSk7Cit9CisKIGlubGluZSB2b2lkIENvbG9yOjpzZXRFeHRlbmRlZENv
bG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCiB7CiAgICAgLy8gWmVybyB0
aGUgdW5pb24sIGp1c3QgaW4gY2FzZSBhIDMyLWJpdCBzeXN0ZW0gb25seSBhc3NpZ25zIHRoZQpA
QCAtMzQ0LDIwICs0MjIsMTkgQEAgaW5saW5lIHZvaWQgQ29sb3I6OnNldEV4dGVuZGVkQ29sb3Io
UmVmPAogCiBpbmxpbmUgYm9vbCBDb2xvcjo6aXNCbGFja0NvbG9yKGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gY29sb3Iu
YXNFeHRlbmRlZCgpLmlzQmxhY2soKTsKLSAgICByZXR1cm4gY29sb3IuYXNJbmxpbmUoKSA9PSBD
b2xvcjo6YmxhY2s7CisgICAgcmV0dXJuIGNvbG9yLmNhbGxPblVuZGVybHlpbmdUeXBlKFtdIChj
b25zdCBhdXRvJiBjb2xvcikgeworICAgICAgICByZXR1cm4gV2ViQ29yZTo6aXNCbGFjayhjb2xv
cik7CisgICAgfSk7CiB9CiAKIGlubGluZSBib29sIENvbG9yOjppc1doaXRlQ29sb3IoY29uc3Qg
Q29sb3ImIGNvbG9yKQogewotICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAgIHJl
dHVybiBjb2xvci5hc0V4dGVuZGVkKCkuaXNXaGl0ZSgpOwotICAgIHJldHVybiBjb2xvci5hc0lu
bGluZSgpID09IENvbG9yOjp3aGl0ZTsKKyAgICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJseWlu
Z1R5cGUoW10gKGNvbnN0IGF1dG8mIGNvbG9yKSB7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpp
c1doaXRlKGNvbG9yKTsKKyAgICB9KTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZv
aWQgQ29sb3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAordGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBDb2xvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAg
ICAgaWYgKGlzRXh0ZW5kZWQoKSkgewogICAgICAgICBlbmNvZGVyIDw8IHRydWU7CkBAIC0zODUs
OCArNDYyLDcgQEAgdm9pZCBDb2xvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbgogICAg
IGVuY29kZXIgPDwgUGFja2VkOjpSR0JBIHsgYXNJbmxpbmUoKSB9LnZhbHVlOwogfQogCi10ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8Q29sb3I+IENvbG9yOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+IE9wdGlvbmFsPENvbG9yPiBDb2xv
cjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgYm9vbCBpc0V4dGVuZGVkOwogICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoaXNFeHRlbmRlZCkpCkBAIC00MDgsNyArNDg0LDcgQEAgT3B0
aW9uYWw8Q29sb3I+IENvbG9yOjpkZWNvZGUoRGVjb2RlciYgZAogICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb2xvclNwYWNlKSkK
ICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiBDb2xvciB7
IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjMSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSkgfTsK
KyAgICAgICAgcmV0dXJuIENvbG9yIHsgRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKHsgYzEsIGMyLCBj
MywgYWxwaGEgfSwgY29sb3JTcGFjZSkgfTsKICAgICB9CiAKICAgICBib29sIGlzVmFsaWQ7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZl
cnNpb24uaAkocmV2aXNpb24gMjY0MjY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JDb252ZXJzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDMxICsyNSwzNSBA
QAogCiAjcHJhZ21hIG9uY2UKIAotbmFtZXNwYWNlIFdlYkNvcmUgeworI2luY2x1ZGUgIkNvbG9y
VHlwZXMuaCIKIAotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBDTVlLQTsKLXRlbXBsYXRlPHR5
cGVuYW1lPiBzdHJ1Y3QgRGlzcGxheVAzOwotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBIU0xB
OwotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBMaW5lYXJEaXNwbGF5UDM7Ci10ZW1wbGF0ZTx0
eXBlbmFtZT4gc3RydWN0IExpbmVhclNSR0JBOwotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBT
UkdCQTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gVGhlc2UgYXJlIHRoZSBzdGFuZGFyZCBz
UkdCIDwtPiBMaW5lYXJSR0IgLyBEaXNwbGF5UDMgPC0+IExpbmVhckRpc3BsYXlQMyBjb252ZXJz
aW9uIGZ1bmN0aW9ucyAoaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQikuCiBmbG9h
dCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGZsb2F0KTsKIGZsb2F0IHJnYlRvTGluZWFyQ29s
b3JDb21wb25lbnQoZmxvYXQpOwogCi1MaW5lYXJTUkdCQTxmbG9hdD4gdG9MaW5lYXJTUkdCQShj
b25zdCBTUkdCQTxmbG9hdD4mKTsKLVNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IExpbmVhclNS
R0JBPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFy
U1JHQkEoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4g
dG9TUkdCQShjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mKTsKIAotTGluZWFyRGlzcGxheVAzPGZs
b2F0PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7Ci1EaXNwbGF5
UDM8ZmxvYXQ+IHRvRGlzcGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mKTsKK1dF
QkNPUkVfRVhQT1JUIExpbmVhckRpc3BsYXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29u
c3QgRGlzcGxheVAzPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgRGlzcGxheVAzPGZsb2F0PiB0
b0Rpc3BsYXlQMyhjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+Jik7CiAKLVNSR0JBPGZsb2F0
PiB0b1NSR0JBKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsKLURpc3BsYXlQMzxmbG9hdD4gdG9E
aXNwbGF5UDMoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9h
dD4gdG9TUkdCQShjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBEaXNw
bGF5UDM8ZmxvYXQ+IHRvRGlzcGxheVAzKGNvbnN0IFNSR0JBPGZsb2F0PiYpOwogCiBXRUJDT1JF
X0VYUE9SVCBIU0xBPGZsb2F0PiB0b0hTTEEoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiBXRUJDT1JF
X0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBIU0xBPGZsb2F0PiYpOwogCiBTUkdC
QTxmbG9hdD4gdG9TUkdCQShjb25zdCBDTVlLQTxmbG9hdD4mKTsKIAorCisvLyBJZGVudGl0eSBj
b252ZXJzaW9ucyAodXNlZnVsIGZvciBnZW5lcmljIGNvbnRleHRzKQorCitjb25zdGV4cHIgU1JH
QkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikgeyByZXR1cm4gY29s
b3I7IH0KK2NvbnN0ZXhwciBMaW5lYXJTUkdCQTxmbG9hdD4gdG9MaW5lYXJTUkdCQShjb25zdCBM
aW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKSB7IHJldHVybiBjb2xvcjsgfQorY29uc3RleHByIERp
c3BsYXlQMzxmbG9hdD4gdG9EaXNwbGF5UDMoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYgY29sb3Ip
IHsgcmV0dXJuIGNvbG9yOyB9Citjb25zdGV4cHIgTGluZWFyRGlzcGxheVAzPGZsb2F0PiB0b0xp
bmVhckRpc3BsYXlQMyhjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikgeyByZXR1
cm4gY29sb3I7IH0KK2NvbnN0ZXhwciBIU0xBPGZsb2F0PiB0b0hTTEEoY29uc3QgSFNMQTxmbG9h
dD4mIGNvbG9yKSB7IHJldHVybiBjb2xvcjsgfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
U2VyaWFsaXphdGlvbi5jcHAJKHJldmlzaW9uIDI2NDI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMCw0NSArMTAwLDg3IEBAIHN0YXRpYyBBU0NJSUxpdGVyYWwgc2VyaWFsaXphdGlvbihDb2xv
clMKICAgICByZXR1cm4gIiJfczsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29u
c3QgRXh0ZW5kZWRDb2xvciYgY29sb3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0
YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbihjb25zdCBDb2xvclR5cGUmIGNvbG9yKQogewotICAg
IGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yLmNvbXBvbmVudHMoKTsKKyAgICBhdXRv
IFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKICAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxs
eUVxdWFsKGFscGhhLCAxLjBmKSkKLSAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIs
IHNlcmlhbGl6YXRpb24oY29sb3IuY29sb3JTcGFjZSgpKSwgJyAnLCBjMSwgJyAnLCBjMiwgJyAn
LCBjMywgJyknKTsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiY29sb3IoIiwgc2VyaWFsaXphdGlv
bihjb2xvci5jb2xvclNwYWNlKCkpLCAnICcsIGMxLCAnICcsIGMyLCAnICcsIGMzLCAiIC8gIiwg
YWxwaGEsICcpJyk7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBzZXJpYWxp
emF0aW9uKGNvbG9yLmNvbG9yU3BhY2UpLCAnICcsIGMxLCAnICcsIGMyLCAnICcsIGMzLCAnKScp
OworICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBzZXJpYWxpemF0aW9uKGNvbG9yLmNv
bG9yU3BhY2UpLCAnICcsIGMxLCAnICcsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7
CiB9CiAKLVN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBFeHRlbmRlZENvbG9yJiBj
b2xvcikKKy8vIFNSR0JBPGZsb2F0PiBvdmVybG9hZHMKKworU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JDU1MoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICByZXR1cm4gc2VyaWFsaXph
dGlvbihjb2xvcik7Cit9CisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBTUkdC
QTxmbG9hdD4mIGNvbG9yKQogewotICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9y
KTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7CiB9CiAKLVN0cmluZyBzZXJpYWxp
emF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBFeHRlbmRlZENvbG9yJiBjb2xvcikKK1N0
cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBTUkdCQTxmbG9hdD4m
IGNvbG9yKQogewotICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yKTsKKyAgICBy
ZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7CiB9CiAKKy8vIExpbmVhclNSR0JBPGZsb2F0PiBv
dmVybG9hZHMKKworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgTGluZWFyU1JHQkE8
ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7Cit9CisK
K1N0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNv
bG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKK30KKworU3RyaW5nIHNl
cmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYg
Y29sb3IpCit7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworfQorCisvLyBEaXNw
bGF5UDM8ZmxvYXQ+IG92ZXJsb2FkcworCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25z
dCBEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbihj
b2xvcik7Cit9CisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBEaXNwbGF5UDM8
ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7Cit9CisK
K1N0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBEaXNwbGF5UDM8
ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7Cit9CisK
KwogLy8gQ29sb3Igb3ZlcmxvYWRzCiAKIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQotICAgICAgICBy
ZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xvci5hc0V4dGVuZGVkKCkpOwotICAgIHJldHVy
biBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yLmFzSW5saW5lKCkpOworICAgIHJldHVybiBjb2xv
ci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoYXV0byBjKSB7CisgICAgICAgIHJldHVybiBzZXJp
YWxpemF0aW9uRm9yQ1NTKGMpOworICAgIH0pOwogfQogCiBTdHJpbmcgc2VyaWFsaXphdGlvbkZv
ckhUTUwoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkp
Ci0gICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9ySFRNTChjb2xvci5hc0V4dGVuZGVkKCkp
OwotICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9ySFRNTChjb2xvci5hc0lubGluZSgpKTsKKyAg
ICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJseWluZ1R5cGUoW10gKGF1dG8gYykgeworICAgICAg
ICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckhUTUwoYyk7CisgICAgfSk7CiB9CiAKIFN0cmluZyBz
ZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0g
ICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25G
b3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yLmFzRXh0ZW5kZWQoKSk7Ci0gICAgcmV0dXJuIHNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yLmFzSW5saW5lKCkpOworICAgIHJldHVy
biBjb2xvci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoYXV0byBjKSB7CisgICAgICAgIHJldHVy
biBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjKTsKKyAgICB9KTsKIH0KIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JT
ZXJpYWxpemF0aW9uLmgJKHJldmlzaW9uIDI2NDI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4
ICsyOCw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbG9yOwotY2xhc3MgRXh0
ZW5kZWRDb2xvcjsKIAordGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBEaXNwbGF5UDM7Cit0ZW1w
bGF0ZTx0eXBlbmFtZT4gc3RydWN0IExpbmVhclNSR0JBOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0
cnVjdCBTUkdCQTsKIAogLy8gc2VyaWFsaXphdGlvbkZvckhUTUwgcmV0dXJucyB0aGUgY29sb3Ig
c2VyaWFsaXplZCBhY2NvcmRpbmcgdG8gSFRNTDUgPGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5v
cmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI2ZpbGwtYW5kLXN0cm9rZS1zdHlsZXM+ICgxMCBT
ZXB0ZW1iZXIgMjAxNSkKQEAgLTQwLDkgKzQxLDE3IEBAIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBz
ZXJpYWxpemF0aW9uRm9yQ1MKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9y
SFRNTChTUkdCQTx1aW50OF90Pik7CiBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlv
bkZvclJlbmRlclRyZWVBc1RleHQoU1JHQkE8dWludDhfdD4pOwogCi1XRUJDT1JFX0VYUE9SVCBT
dHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBFeHRlbmRlZENvbG9yJik7Ci1XRUJDT1JF
X0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgRXh0ZW5kZWRDb2xvciYp
OwotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KGNvbnN0IEV4dGVuZGVkQ29sb3ImKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0
aW9uRm9yQ1NTKGNvbnN0IFNSR0JBPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNl
cmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IFNSR0JBPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IFNSR0JBPGZsb2F0
PiYpOworCitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBM
aW5lYXJTUkdCQTxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9u
Rm9ySFRNTChjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmlu
ZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBMaW5lYXJTUkdCQTxmbG9h
dD4mKTsKKworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3Qg
RGlzcGxheVAzPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JIVE1MKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBz
ZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7
CiAKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IENvbG9y
Jik7CiBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgQ29s
b3ImKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5
cGVzLmgJKHJldmlzaW9uIDI2NDI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDMxIEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkNvbG9y
U3BhY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQ29tcG9uZW50VHJhaXRzOworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb21wb25lbnRUcmFp
dHM8dWludDhfdD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBtaW5WYWx1ZSA9IDA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IG1heFZhbHVlID0gMjU1OworfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgQ29tcG9uZW50VHJhaXRzPGZsb2F0PiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBmbG9hdCBtaW5WYWx1ZSA9IDAuMGY7CisgICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBt
YXhWYWx1ZSA9IDEuMGY7Cit9OworCisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBTUkdC
QSB7CiAgICAgVCByZWQ7CiAgICAgVCBncmVlbjsKICAgICBUIGJsdWU7CiAgICAgVCBhbHBoYTsK
KworICAgIHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOworICAgIHN0YXRpYyBjb25zdGV4cHIgQ29s
b3JTcGFjZSBjb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQjsKIH07CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IFNSR0JBKFQsIFQsIFQsIFQpIC0+IFNSR0JBPFQ+OwpAQCAtNjQsNiArODEsOSBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTGluZWFyU1JHQkEgCiAgICAgVCBncmVlbjsK
ICAgICBUIGJsdWU7CiAgICAgVCBhbHBoYTsKKworICAgIHVzaW5nIENvbXBvbmVudFR5cGUgPSBU
OworICAgIHN0YXRpYyBjb25zdGV4cHIgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gQ29sb3JTcGFj
ZTo6TGluZWFyUkdCOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gTGluZWFyU1JHQkEoVCwg
VCwgVCwgVCkgLT4gTGluZWFyU1JHQkE8VD47CkBAIC05NCw2ICsxMTQsOSBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgRGlzcGxheVAzIHsKICAgICBUIGdyZWVuOwogICAgIFQgYmx1ZTsK
ICAgICBUIGFscGhhOworCisgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpEaXNwbGF5UDM7
CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBEaXNwbGF5UDMoVCwgVCwgVCwgVCkgLT4gRGlz
cGxheVAzPFQ+OwpAQCAtMTI0LDYgKzE0Nyw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBMaW5lYXJEaXNwbGEKICAgICBUIGdyZWVuOwogICAgIFQgYmx1ZTsKICAgICBUIGFscGhhOwor
CisgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBMaW5lYXJEaXNwbGF5UDMoVCwgVCwgVCwgVCkgLT4gTGluZWFyRGlzcGxheVAzPFQ+OwpAQCAt
MTU0LDYgKzE3OSw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIU0xBIHsKICAgICBU
IHNhdHVyYXRpb247CiAgICAgVCBsaWdodG5lc3M7CiAgICAgVCBhbHBoYTsKKworICAgIHVzaW5n
IENvbXBvbmVudFR5cGUgPSBUOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gSFNMQShULCBU
LCBULCBUKSAtPiBIU0xBPFQ+OwpAQCAtMTg2LDYgKzIxMyw4IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBDTVlLQSB7CiAgICAgVCB5ZWxsb3c7CiAgICAgVCBibGFjazsKICAgICBUIGFs
cGhhOworCisgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CiB9OwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBDTVlLQShULCBULCBULCBULCBUKSAtPiBDTVlLQTxUPjsKQEAgLTIwNiw2ICsyMzUs
OCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgWFlaQSB7CiAgICAgVCB5OwogICAgIFQg
ejsKICAgICBUIGFscGhhOworCisgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CiB9OwogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBYWVpBKFQsIFQsIFQsIFQpIC0+IFhZWkE8VD47CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJ
KHJldmlzaW9uIDI2NDI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDkgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgYwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JU
eXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEo
Y29uc3QgQ29sb3JUeXBlJiwgdWludDhfdCBvdmVycmlkZUFscGhhKTsKIHRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEo
Y29uc3QgQ29sb3JUeXBlJiwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZT4gY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25z
dCBDb2xvclR5cGUmKTsKKwogY29uc3RleHByIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVp
bnQxNl90KTsKIGNvbnN0ZXhwciB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QpOwog
CkBAIC0xOTIsNiArMTk1LDIzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JU
eXBlIGkKICAgICByZXR1cm4gY29weTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBl
PiBjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCit7CisgICAg
Y29uc3RleHByIGF1dG8gbWluID0gQ29tcG9uZW50VHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6
Q29tcG9uZW50VHlwZT46Om1pblZhbHVlOworICAgIGNvbnN0ZXhwciBhdXRvIG1heCA9IENvbXBv
bmVudFRyYWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+OjptYXhWYWx1ZTsK
KworICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOworICAgIHJldHVybiBjMSA9
PSBtaW4gJiYgYzIgPT0gbWluICYmIGMzID09IG1pbiAmJiBhbHBoYSA9PSBtYXg7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBD
b2xvclR5cGUmIGNvbG9yKQoreworICAgIGNvbnN0ZXhwciBhdXRvIG1heCA9IENvbXBvbmVudFRy
YWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+OjptYXhWYWx1ZTsKKworICAg
IGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOworICAgIHJldHVybiBjMSA9PSBtYXgg
JiYgYzIgPT0gbWF4ICYmIGMzID09IG1heCAmJiBhbHBoYSA9PSBtYXg7Cit9CisKIGNvbnN0ZXhw
ciB1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCB2YWx1ZSkKIHsKICAgICByZXR1
cm4gKHZhbHVlIDw8IDgpIC0gdmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAkocmV2aXNpb24gMjY0MjY5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAJKG5vbmV4
aXN0ZW50KQpAQCAtMSw5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkV4dGVuZGVkQ29s
b3IuaCIKLQotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiQ29sb3JDb252ZXJzaW9uLmgi
Ci0jaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KLSNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZjxFeHRl
bmRlZENvbG9yPiBFeHRlbmRlZENvbG9yOjpjcmVhdGUoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9h
dCBjMywgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBFeHRlbmRlZENvbG9yKGMxLCBjMiwgYzMsIGFscGhhLCBjb2xvclNwYWNl
KSk7Ci19Ci0KLXVuc2lnbmVkIEV4dGVuZGVkQ29sb3I6Omhhc2goKSBjb25zdAotewotICAgIGF1
dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbXBvbmVudHMoKTsKLSAgICByZXR1cm4gY29tcHV0
ZUhhc2goYzEsIGMyLCBjMywgYWxwaGEsIG1fY29sb3JTcGFjZSk7Ci19Ci0KLVJlZjxFeHRlbmRl
ZENvbG9yPiBFeHRlbmRlZENvbG9yOjpjb2xvcldpdGhBbHBoYShmbG9hdCBvdmVycmlkZUFscGhh
KSBjb25zdAotewotICAgIGF1dG8gW2MxLCBjMiwgYzMsIGV4aXN0aW5nQWxwaGFdID0gY29tcG9u
ZW50cygpOwotICAgIHJldHVybiBFeHRlbmRlZENvbG9yOjpjcmVhdGUoYzEsIGMyLCBjMywgb3Zl
cnJpZGVBbHBoYSwgY29sb3JTcGFjZSgpKTsKLX0KLQotUmVmPEV4dGVuZGVkQ29sb3I+IEV4dGVu
ZGVkQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgb3ZlcnJpZGVBbHBoYSkgY29u
c3QKLXsKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBleGlzdGluZ0FscGhhXSA9IGNvbXBvbmVudHMo
KTsKLSAgICByZXR1cm4gRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKDEuMGYgLSBjMSwgMS4wZiAtIGMy
LCAxLjBmIC0gYzMsIG92ZXJyaWRlQWxwaGEsIGNvbG9yU3BhY2UoKSk7Ci19Ci0KLVNSR0JBPGZs
b2F0PiBFeHRlbmRlZENvbG9yOjp0b1NSR0JBRmxvYXRDb21wb25lbnRzTG9zc3koKSBjb25zdAot
ewotICAgIHN3aXRjaCAobV9jb2xvclNwYWNlKSB7Ci0gICAgY2FzZSBDb2xvclNwYWNlOjpTUkdC
OgotICAgICAgICByZXR1cm4gYXNTUkdCQShtX2NvbXBvbmVudHMpOwotICAgIGNhc2UgQ29sb3JT
cGFjZTo6TGluZWFyUkdCOgotICAgICAgICByZXR1cm4gdG9TUkdCQShhc0xpbmVhclNSR0JBKG1f
Y29tcG9uZW50cykpOwotICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgotICAgICAgICBy
ZXR1cm4gdG9TUkdCQShhc0Rpc3BsYXlQMyhtX2NvbXBvbmVudHMpKTsKLSAgICB9Ci0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgMCwgMCwgMCwgMCB9OwotfQotCi1ib29s
IEV4dGVuZGVkQ29sb3I6OmlzV2hpdGUoKSBjb25zdAotewotICAgIGF1dG8gW2MxLCBjMiwgYzMs
IGFscGhhXSA9IGNvbXBvbmVudHMoKTsKLSAgICByZXR1cm4gYzEgPT0gMSAmJiBjMiA9PSAxICYm
IGMzID09IDEgJiYgYWxwaGEgPT0gMTsKLX0KLQotYm9vbCBFeHRlbmRlZENvbG9yOjppc0JsYWNr
KCkgY29uc3QKLXsKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb21wb25lbnRzKCk7
Ci0gICAgcmV0dXJuICFjMSAmJiAhYzIgJiYgIWMzICYmIGFscGhhID09IDE7Ci19Ci0KLUNvbG9y
IG1ha2VFeHRlbmRlZENvbG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFs
cGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCi17Ci0gICAgcmV0dXJuIEV4dGVuZGVkQ29sb3I6
OmNyZWF0ZShjMSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSk7Ci19Ci0KLX0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgJKHJl
dmlzaW9uIDI2NDI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVu
ZGVkQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNTEgKzI2LDI4IEBACiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkNvbG9yQ29udmVy
c2lvbi5oIgogI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKICNpbmNsdWRlICJDb2xvclR5cGVzLmgi
Ci0jaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBD
b2xvcjsKLXRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgU1JHQkE7Ci0KIGNsYXNzIEV4dGVuZGVk
Q29sb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxFeHRlbmRlZENvbG9yPiB7CiBwdWJsaWM6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxFeHRlbmRlZENvbG9yPiBjcmVhdGUoZmxvYXQgYzEs
IGZsb2F0IGMyLCBmbG9hdCBjMywgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UpOwotCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMgUmVmPEV4dGVuZGVkQ29sb3I+IGNyZWF0
ZShjb25zdCBDb2xvclR5cGUmKTsKKyAgICBzdGF0aWMgUmVmPEV4dGVuZGVkQ29sb3I+IGNyZWF0
ZShDb2xvckNvbXBvbmVudHM8ZmxvYXQ+LCBDb2xvclNwYWNlKTsKKyAgICAKICAgICBmbG9hdCBh
bHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9uZW50c1szXTsgfQogCiAgICAgY29uc3QgQ29s
b3JDb21wb25lbnRzPGZsb2F0PiYgY29tcG9uZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9u
ZW50czsgfQogICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29s
b3JTcGFjZTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgaGFzaCgpIGNvbnN0Owot
Ci0gICAgUmVmPEV4dGVuZGVkQ29sb3I+IGNvbG9yV2l0aEFscGhhKGZsb2F0KSBjb25zdDsKLSAg
ICBSZWY8RXh0ZW5kZWRDb2xvcj4gaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCkgY29uc3Q7
Ci0KLSAgICBib29sIGlzV2hpdGUoKSBjb25zdDsKLSAgICBib29sIGlzQmxhY2soKSBjb25zdDsK
LQotICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2UgY29sb3JzIGlu
dG8gc1JHQi4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JHQkE8VD4gdG9T
UkdCQUxvc3N5KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19z
YW1lX3Y8VCwgZmxvYXQ+KQotICAgICAgICAgICAgcmV0dXJuIHRvU1JHQkFGbG9hdENvbXBvbmVu
dHNMb3NzeSgpOwotICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwg
dWludDhfdD4pCi0gICAgICAgICAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZXModG9T
UkdCQUZsb2F0Q29tcG9uZW50c0xvc3N5KCkpOwotICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPiBkZWNsdHlwZShhdXRvKSBjYWxsT25VbmRlcmx5aW5nVHlwZShGdW5jdG9yJiYp
IGNvbnN0OwogCiBwcml2YXRlOgotICAgIEV4dGVuZGVkQ29sb3IoZmxvYXQgYzEsIGZsb2F0IGMy
LCBmbG9hdCBjMywgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKLSAgICAgICAg
OiBtX2NvbXBvbmVudHMoYzEsIGMyLCBjMywgYWxwaGEpCi0gICAgICAgICwgbV9jb2xvclNwYWNl
KGNvbG9yU3BhY2UpCi0gICAgewotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIFNSR0JBPGZs
b2F0PiB0b1NSR0JBRmxvYXRDb21wb25lbnRzTG9zc3koKSBjb25zdDsKKyAgICBFeHRlbmRlZENv
bG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4sIENvbG9yU3BhY2UpOwogCiAgICAgQ29sb3JDb21w
b25lbnRzPGZsb2F0PiBtX2NvbXBvbmVudHM7CiAgICAgQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7
CkBAIC04Niw4ICs2MywzNSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEV4dGVuZGVk
Q29sCiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KIAotLy8gRklYTUU6IElmIHRoZSBDb2xvclNw
YWNlIGlzIHNSR0IgYW5kIHRoZSB2YWx1ZXMgY2FuIGFsbCBiZQotLy8gY29udmVydGVkIGV4YWN0
bHkgdG8gaW50ZWdlcnMsIHdlIHNob3VsZCBtYWtlIGEgU2ltcGxlQ29sb3IuCi1XRUJDT1JFX0VY
UE9SVCBDb2xvciBtYWtlRXh0ZW5kZWRDb2xvcihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMz
LCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+
IGlubGluZSBSZWY8RXh0ZW5kZWRDb2xvcj4gRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGNvbnN0IENv
bG9yVHlwZSYgY29sb3IpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRXh0ZW5kZWRDb2xv
cihhc0NvbG9yQ29tcG9uZW50cyhjb2xvciksIGNvbG9yLmNvbG9yU3BhY2UpKTsKK30KKworaW5s
aW5lIFJlZjxFeHRlbmRlZENvbG9yPiBFeHRlbmRlZENvbG9yOjpjcmVhdGUoQ29sb3JDb21wb25l
bnRzPGZsb2F0PiBjb21wb25lbnRzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRXh0ZW5kZWRDb2xvcihjb21wb25lbnRzLCBjb2xvclNwYWNlKSk7
Cit9CisKK2lubGluZSBFeHRlbmRlZENvbG9yOjpFeHRlbmRlZENvbG9yKENvbG9yQ29tcG9uZW50
czxmbG9hdD4gY29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQorICAgIDogbV9jb21w
b25lbnRzKGNvbXBvbmVudHMpCisgICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKK3sKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gZGVjbHR5cGUoYXV0bykgRXh0ZW5kZWRDb2xv
cjo6Y2FsbE9uVW5kZXJseWluZ1R5cGUoRnVuY3RvciYmIGZ1bmN0b3IpIGNvbnN0Cit7CisgICAg
c3dpdGNoIChtX2NvbG9yU3BhY2UpIHsKKyAgICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6CisgICAg
ICAgIHJldHVybiBmdW5jdG9yKGFzU1JHQkEobV9jb21wb25lbnRzKSk7CisgICAgY2FzZSBDb2xv
clNwYWNlOjpMaW5lYXJSR0I6CisgICAgICAgIHJldHVybiBmdW5jdG9yKGFzTGluZWFyU1JHQkEo
bV9jb21wb25lbnRzKSk7CisgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6CisgICAgICAg
IHJldHVybiBmdW5jdG9yKGFzRGlzcGxheVAzKG1fY29tcG9uZW50cykpOworICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmdW5jdG9yKGFzU1JHQkEobV9jb21w
b25lbnRzKSk7Cit9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9Db2xvckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkocmV2aXNpb24gMjY0MjY5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsOCArMjYsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDb2xvcjo6Q29sb3IoY29u
c3QgR2RrUkdCQSYgY29sb3IpCisgICAgOiBDb2xvcihjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhT
UkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5yZWQpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
Y29sb3IuZ3JlZW4pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3IuYmx1ZSksIHN0YXRpY19jYXN0
PGZsb2F0Pihjb2xvci5hbHBoYSkgfSkpCiB7Ci0gICAgc2V0SW5saW5lQ29sb3IoY29udmVydFRv
Q29tcG9uZW50Qnl0ZXMoU1JHQkEgeyBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3IucmVkKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmdyZWVuKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmJs
dWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3IuYWxwaGEpIH0pKTsKIH0KIAogQ29sb3I6Om9w
ZXJhdG9yIEdka1JHQkEoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjY0MjY5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIENvbG9yOjpDb2xvcihEMkQxX0NPTE9SX0YgY29sb3IpCisgICAgOiBDb2xvcihjb252ZXJ0
VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9y
LmEgfSkpCiB7Ci0gICAgc2V0SW5saW5lQ29sb3IoY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JH
QkEgeyBjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hIH0pKTsKIH0KIAogQ29sb3I6
Om9wZXJhdG9yIEQyRDFfQ09MT1JfRigpIGNvbnN0CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjQyNzApCisrKyBUb29scy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAyMC0wNy0xMSAgU2Ft
IFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVkdWNlIHN1cmZhY2UgYXJl
YSBvZiB0aGUgRXh0ZW5kZWRDb2xvciBjbGFzcyB0byBhIGJhcmUgbWluaW11bQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0MjA0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlRFU1QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6bWFrZUNvbG9yKToKKyAgICAgICAg
VXBkYXRlIHVzaW5nIG5ldyBDb2xvciBjb25zdHJ1Y3RvciBmb3IgZXh0ZW5kZWQgY29sb3JzLgor
CiAyMDIwLTA3LTExICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBN
YWtlIGhhc2hlciB3b3JrIHdpdGggdHVwbGUtbGlrZSBjbGFzc2VzCkluZGV4OiBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3Rz
LmNwcAkocmV2aXNpb24gMjY0MjY5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcg
QEAgbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBURVNUKEV4dGVuZGVkQ29sb3IsIENvbnN0
cnVjdG9yKQogewotICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAu
MjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgIENvbG9yIGMxIHsgRGlzcGxh
eVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgIEVYUEVDVF9UUlVFKGMx
LmlzRXh0ZW5kZWQoKSk7CiAKICAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjMS5hc0V4dGVu
ZGVkKCkuY29tcG9uZW50cygpOwpAQCAtNTIsNyArNTIsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3Is
IENvbnN0cnVjdG9yKQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIENvcHlDb25zdHJ1Y3RvcikKIHsK
LSAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENv
bG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4g
eyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVk
KCkpOwogCiAgICAgQ29sb3IgYzIoYzEpOwpAQCAtNzAsNyArNzAsNyBAQCBURVNUKEV4dGVuZGVk
Q29sb3IsIENvcHlDb25zdHJ1Y3RvcikKIAogVEVTVChFeHRlbmRlZENvbG9yLCBBc3NpZ25tZW50
KQogewotICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEu
MCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZs
b2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0
ZW5kZWQoKSk7CiAKICAgICBDb2xvciBjMiA9IGMxOwpAQCAtODksMjAgKzg5LDIwIEBAIFRFU1Qo
RXh0ZW5kZWRDb2xvciwgQXNzaWdubWVudCkKIFRFU1QoRXh0ZW5kZWRDb2xvciwgRXF1YWxpdHkp
CiB7CiAgICAgewotICAgICAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41
LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICAgICAgQ29sb3IgYzEg
eyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgICAgIEVY
UEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKLSAgICAgICAgQ29sb3IgYzIgeyBtYWtlRXh0
ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07
CisgICAgICAgIENvbG9yIGMyIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAx
LjAgfSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgICAg
IEVYUEVDVF9FUShjMSwgYzIpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgQ29sb3IgYzEgeyBt
YWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5
UDMpIH07CisgICAgICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAw
LjI1LCAxLjAgfSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCi0g
ICAgICAgIENvbG9yIGMyIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwg
Q29sb3JTcGFjZTo6U1JHQikgfTsKKyAgICAgICAgQ29sb3IgYzIgeyBTUkdCQTxmbG9hdD4geyAx
LjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRl
ZCgpKTsKIAogICAgICAgICBFWFBFQ1RfTkUoYzEsIGMyKTsKQEAgLTExMiw3ICsxMTIsNyBAQCBU
RVNUKEV4dGVuZGVkQ29sb3IsIEVxdWFsaXR5KQogICAgIGludCBnID0gMTI4OwogICAgIGludCBi
ID0gNjM7CiAgICAgaW50IGEgPSAxMjc7Ci0gICAgQ29sb3IgcmdiMSB7IG1ha2VFeHRlbmRlZENv
bG9yKHIgLyAyNTUuMCwgZyAvIDI1NS4wLCBiIC8gMjU1LjAsIGEgLyAyNTUuMCwgQ29sb3JTcGFj
ZTo6U1JHQikgfTsKKyAgICBDb2xvciByZ2IxIHsgU1JHQkE8ZmxvYXQ+IHsgciAvIDI1NS4wZiwg
ZyAvIDI1NS4wZiwgYiAvIDI1NS4wZiwgYSAvIDI1NS4wZiB9IH07CiAgICAgQ29sb3IgcmdiMiA9
IG1ha2VTaW1wbGVDb2xvcihyLCBnLCBiLCBhKTsKICAgICBFWFBFQ1RfTkUocmdiMSwgcmdiMik7
CiAgICAgRVhQRUNUX05FKHJnYjIsIHJnYjEpOwpAQCAtMTIxLDIwICsxMjEsMjAgQEAgVEVTVChF
eHRlbmRlZENvbG9yLCBFcXVhbGl0eSkKIFRFU1QoRXh0ZW5kZWRDb2xvciwgSGFzaCkKIHsKICAg
ICB7Ci0gICAgICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUs
IDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgICAgICBDb2xvciBjMSB7IERpc3Bs
YXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RS
VUUoYzEuaXNFeHRlbmRlZCgpKTsKIAotICAgICAgICBDb2xvciBjMiB7IG1ha2VFeHRlbmRlZENv
bG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICAg
ICAgQ29sb3IgYzIgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07
CiAgICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICAgICAgRVhQRUNU
X0VRKGMxLmhhc2goKSwgYzIuaGFzaCgpKTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIENvbG9y
IGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6
RGlzcGxheVAzKSB9OworICAgICAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAs
IDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgp
KTsKIAotICAgICAgICBDb2xvciBjMiB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1
LCAxLjAsIENvbG9yU3BhY2U6OlNSR0IpIH07CisgICAgICAgIENvbG9yIGMyIHsgU1JHQkE8Zmxv
YXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgICAgIEVYUEVDVF9UUlVFKGMxLmlz
RXh0ZW5kZWQoKSk7CiAKICAgICAgICAgRVhQRUNUX05FKGMxLmhhc2goKSwgYzIuaGFzaCgpKTsK
QEAgLTE0NCwxNCArMTQ0LDE0IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgSGFzaCkKICAgICBpbnQg
ZyA9IDEyODsKICAgICBpbnQgYiA9IDYzOwogICAgIGludCBhID0gMTI3OwotICAgIENvbG9yIHJn
YjEgeyBtYWtlRXh0ZW5kZWRDb2xvcihyIC8gMjU1LjAsIGcgLyAyNTUuMCwgYiAvIDI1NS4wLCBh
IC8gMjU1LjAsIENvbG9yU3BhY2U6OlNSR0IpIH07CisgICAgQ29sb3IgcmdiMSB7IFNSR0JBPGZs
b2F0PiB7IHIgLyAyNTUuMGYsIGcgLyAyNTUuMGYsIGIgLyAyNTUuMGYsIGEgLyAyNTUuMGYgfSB9
OwogICAgIENvbG9yIHJnYjIgPSBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgYSk7CiAgICAgRVhQ
RUNUX05FKHJnYjEuaGFzaCgpLCByZ2IyLmhhc2goKSk7CiB9CiAKIFRFU1QoRXh0ZW5kZWRDb2xv
ciwgTW92ZUNvbnN0cnVjdG9yKQogewotICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3Io
MS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgIENvbG9y
IGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgIEVY
UEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xvciBjMihXVEZNb3ZlKGMxKSk7
CkBAIC0xNzIsNyArMTcyLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQ29uc3RydWN0b3Ip
CiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgTW92ZUFzc2lnbm1lbnQpCiB7Ci0gICAgQ29sb3IgYzEg
eyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNw
bGF5UDMpIH07CisgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAu
MjUsIDEuMCB9IH07CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENv
bG9yIGMyID0gV1RGTW92ZShjMSk7CkBAIC0xOTQsNyArMTk0LDggQEAgVEVTVChFeHRlbmRlZENv
bG9yLCBNb3ZlQXNzaWdubWVudCkKIAogVEVTVChFeHRlbmRlZENvbG9yLCBCYXNpY1JlZmVyZW5j
ZUNvdW50aW5nKQogewotICAgIENvbG9yKiBjMSA9IG5ldyBDb2xvciB7IG1ha2VFeHRlbmRlZENv
bG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICBD
b2xvciogYzEgPSBuZXcgQ29sb3IgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUs
IDEuMCB9IH07CisgICAgCiAgICAgRVhQRUNUX1RSVUUoYzEtPmlzRXh0ZW5kZWQoKSk7CiAKICAg
ICBDb2xvciogYzIgPSBuZXcgQ29sb3IoKmMxKTsKQEAgLTIyMCw3ICsyMjEsNyBAQCBURVNUKEV4
dGVuZGVkQ29sb3IsIEJhc2ljUmVmZXJlbmNlQ291bnRpCiAKIENvbG9yIG1ha2VDb2xvcigpCiB7
Ci0gICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBD
b2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+
IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRl
ZCgpKTsKICAgICBFWFBFQ1RfRVEoMXUsIGMxLmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKIApA
QCAtMjM4LDcgKzIzOSw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgUmV0dXJuVmFsdWVzKQogCiBU
RVNUKEV4dGVuZGVkQ29sb3IsIFAzQ29udmVyc2lvblRvU1JHQikKIHsKLSAgICBDb2xvciBwM0Nv
bG9yIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6
OkRpc3BsYXlQMykgfTsKKyAgICBDb2xvciBwM0NvbG9yIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEu
MCwgMC41LCAwLjI1LCAwLjc1IH0gfTsKICAgICBFWFBFQ1RfVFJVRShwM0NvbG9yLmlzRXh0ZW5k
ZWQoKSk7CiAKICAgICBhdXRvIHNSR0JBQ29sb3IgPSBwM0NvbG9yLnRvU1JHQkFMb3NzeTxmbG9h
dD4oKTsKQEAgLTI1MCw5ICsyNTEsMTAgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBQM0NvbnZlcnNp
b25Ub1NSR0IpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgTGluZWFyU1JHQkNvbnZlcnNpb25Ub1NS
R0IpCiB7Ci0gICAgQ29sb3IgbGluZWFyQ29sb3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAu
NSwgMC4yNSwgMC43NSwgQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB9OwotICAgIEVYUEVDVF9UUlVF
KGxpbmVhckNvbG9yLmlzRXh0ZW5kZWQoKSk7Ci0gICAgYXV0byBzUkdCQUNvbG9yID0gbGluZWFy
Q29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIENvbG9yIGxpbmVhclNSR0JBQ29sb3Ig
eyBMaW5lYXJTUkdCQTxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMC43NSB9IH07CisgICAgRVhQ
RUNUX1RSVUUobGluZWFyU1JHQkFDb2xvci5pc0V4dGVuZGVkKCkpOworCisgICAgYXV0byBzUkdC
QUNvbG9yID0gbGluZWFyU1JHQkFDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgRVhQ
RUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IucmVkLCAxLjBmKSk7
CiAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IuZ3Jl
ZW4sIDAuNzM1MzU2OTI3ZikpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlF
cXVhbChzUkdCQUNvbG9yLmJsdWUsIDAuNTM3MDk4NzA2ZikpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404075</attachid>
            <date>2020-07-11 16:21:49 -0700</date>
            <delta_ts>2020-07-11 18:01:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214204-20200711162148.patch</filename>
            <type>text/plain</type>
            <size>51405</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NDI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDIwLTA3LTExICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZWR1Y2Ugc3VyZmFjZSBhcmVhIG9m
IHRoZSBFeHRlbmRlZENvbG9yIGNsYXNzIHRvIGEgYmFyZSBtaW5pbXVtCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQyMDQKKworICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAtIEFkZCBoZWxwZXIgZnVuY3Rpb24gdG8g
Q29sb3IgdG8gb3BlcmF0ZSBvbiB0aGUgdW5kZXJseWluZyBjb2xvciB0eXBlCisgICAgICAgICAg
YW5kIHJlaW1wbGVtZW50IGEgYnVuY2ggb2YgZnVuY3Rpb25hbGl0eSB1c2luZyBpdCwgcmVkdWNp
bmcgdGhlIG5lZWQKKyAgICAgICAgICBmb3IgZHVwbGljYXRlIGltcGxlbWVudGF0aW9ucyBpbiBF
eHRlbmRlZENvbG9yLgorICAgICAgICAtIEFkZCBjb25zdHJ1Y3RvcnMgdG8gQ29sb3IgdGhhdCB0
YWtlIGV4dGVuZGVkIGNvbG9yIHR5cGVzLCByZXBsYWNpbmcKKyAgICAgICAgICB0aGUgbWFrZUV4
dGVuZGVkQ29sb3IgaGVscGVyIGZ1bmN0aW9uLiAKKworICAgICAgICAqIFNvdXJjZXMudHh0Ogor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgUmVt
b3ZlIEV4dGVuZWRDb2xvci5jcHAKKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6cGFyc2VDb2xvckZ1bmN0aW9uUGFyYW1ldGVycyk6CisgICAgICAgIFVzZSBuZXcgQ29s
b3IgY29uc3RydWN0b3IgdGFraW5nIENvbG9yQ29tcG9uZW50cyBhbmQgQ29sb3JTcGFjZS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6IFJlaW1wbGltZW50IHVzaW5nIGNhbGxPblVu
ZGVybHlpbmdUeXBlLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmludmVydGVkQ29sb3JXaXRo
QWxwaGEgY29uc3QpOiBSZWltcGxpbWVudCB1c2luZyBjYWxsT25VbmRlcmx5aW5nVHlwZS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OkNvbG9yKTogIAorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omhhc2ggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmNhbGxPblVuZGVybHlpbmdUeXBlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBTG9zc3kgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0JsYWNrQ29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzV2hpdGVDb2xvcik6CisgICAgICAgIC0g
QWRkIG5ldyBjb25zdHJ1Y3RvcnMgdGFraW5nIGV4dGVuZGVkIGNvbG9yIHR5cGVzOiBTUkdCQTxm
bG9hdD4sIExpbmVhclNSR0JBPGZsb2F0PiBhbmQgRGlwbGF5UDM8ZmxvYXQ+LgorICAgICAgICAt
IEFkZCBuZXcgZnVuY3Rpb24sIGNhbGxPblVuZGVybHlpbmdUeXBlLCB0byBtYWtlIHdvcmtpbmcg
d2l0aCBhbnkgdW5kZXJseWluZyB0eXBlIG1vcmUgc3RyZWFtbGluZWQuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OnRv
U1JHQkEpOgorICAgICAgICAoV2ViQ29yZTo6dG9MaW5lYXJTUkdCQSk6CisgICAgICAgIChXZWJD
b3JlOjp0b0Rpc3BsYXlQMyk6CisgICAgICAgIChXZWJDb3JlOjp0b0xpbmVhckRpc3BsYXlQMyk6
CisgICAgICAgIChXZWJDb3JlOjp0b0hTTEEpOgorICAgICAgICBBZGQgaWRlbnRpdHkgY29udmVy
c2lvbiBmdW5jdGlvbnMgdG8gbWFrZSBpbXBsZW1lbnRpbmcgZ2VuZXJpYyBmdW5jdGlvbnMgbGlr
ZSBDb2xvcjo6dG9TUkdCQUxvc3N5IG1vcmUKKyAgICAgICAgc3RyYWlndGZvcndhcmQuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6c2VyaWFsaXphdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemF0
aW9uRm9yQ1NTKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JIVE1MKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uaDoKKyAgICAgICAgUmVw
bGFjZSBzZXJpYWxpemF0aW9uIG9mIHRoZSBFeHRlbmRlZENvbG9yIHR5cGUgaXRzZWxmLCB3aXRo
IHNlcmlhbGl6YXRpb24gZm9yIHRoZSB1bmRlcmx5aW5nIGNvbG9yCisgICAgICAgIHR5cGVzLiBV
c2UgY2FsbE9uVW5kZXJseWluZ1R5cGUgdG8gZGlzcGF0Y2ggdG8gdGhlIHJpZ2h0IG9uZS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaDoKKyAgICAgICAgLSBBZGRz
IENvbXBvbmVudFRyYWl0cyBzdHJ1Y3QgdG8gZ2V0IGluZm9ybWF0aW9uIGxpa2UgbWluL21heCB2
YWx1ZSBvZiB0aGUgY29tcG9uZW50IHR5cGVzLgorICAgICAgICAtIEFkZHMgYHVzaW5nIENvbXBv
bmVudFR5cGUgPSBUO2AgdG8gZWFjaCBjb2xvciB0eXBlLCB0byBhbGxvdyBlYXN5IGFjY2VzcyB0
byB0aGUgdHlwZSBpbgorICAgICAgICAgIGRlZHVjZWQgY29udGV4dHMuCisgICAgICAgIC0gQWRk
cyBzdGF0aWMgY29uc3RleHByIENvbG9yU3BhY2UgdG8gZWFjaCBjb2xvciB0eXBlIHRoYXQgY3Vy
cmVudGx5IGhhcyBhIENvbG9yU3BhY2UgbWFwcGluZy4gCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6aXNCbGFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjppc1doaXRlKToKKyAgICAgICAgQWRkIGhlbHBlcnMgdG8gaW1wbGVt
ZW50IENvbG9yOjppc0JsYWNrL0NvbG9yOjppc1doaXRlQ29sb3IgZm9yIGVhY2ggY29sb3IgdHlw
ZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbmRlZENvbG9yOjpFeHRlbmRlZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVk
Q29sb3I6OmNhbGxPblVuZGVybHlpbmdUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuZGVkQ29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlZHVj
ZSBkb3duIHRvIGp1c3QgY29uc3RydWN0aW9uLCBtZW1iZXIgYWNjZXNzIGFuZCB0aGUgY2FsbE9u
VW5kZXJseWluZ1R5cGUgaGVscGVyLgorICAgICAgICBJbiBmdXR1cmUgcmV2aXNpb25zLCBFeHRl
bmRlZENvbG9yIHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZXJuYWwgY2xhc3Mgb2YgQ29s
b3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vQ29sb3JEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Q29sb3Ip
OgorICAgICAgICBVcGRhdGUgdG8gdXNlIGNvbnN0cnVjdG9yIGRlbGVnYXRpb24uCisKIDIwMjAt
MDctMTEgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAg
UkVHUkVTU0lPTihyMjYwMjc2KTogT3ZlcmZsb3cgc2Nyb2xsaW5nIGxheWVycyBtaXNwbGFjZWQg
aW5zaWRlIFNWRyBmb3JlaWduIG9iamVjdApJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI2
NDI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
ODI3LDcgKzE4MjcsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9DdXN0b21QYWludEltYWdlLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
RGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL0V4dGVu
ZGVkQ29sb3IuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29u
LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjY0MjY5KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03MjI4LDcgKzcyMjgs
NiBAQAogCQkzMUQyNkJDNTFGODZEMjY4MDA4RkYyNTUgLyogSlNJbWFnZUJpdG1hcE9wdGlvbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbWFnZUJpdG1hcE9wdGlvbnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFEMjZCQzYxRjg2RDI2OTAwOEZGMjU1
IC8qIEpTSW1hZ2VCaXRtYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNJbWFnZUJpdG1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxRDU5
MUIxMTY2OTdBNkMwMEU2QkYwMiAvKiBQbHVnSW5DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGx1Z0luQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTMxRENERjQxMURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuZGVkQ29sb3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkzMURDREY0MjFEQTFDNDU0MDBFQTVCOTMgLyogRXh0ZW5k
ZWRDb2xvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbmRlZENvbG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxREVBNDUzMUIzOUY0RDkwMEY3NzE3
OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViU3lzdGVtQmFja2Ryb3BMYXllci5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzFERUE0NTQxQjM5RjREOTAwRjc3MTc4IC8qIFdlYlN5c3RlbUJhY2tk
cm9wTGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU3lzdGVtQmFj
a2Ryb3BMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk1ODIsOCArMTk1
ODEsOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNTE1QkUxOTcxRDU0RjZCRDAwREQ3QzY4IC8q
IEhJREdhbWVwYWQuY3BwICovLAogCQkJCTUxNUJFMTk4MUQ1NEY2QkQwMEREN0M2OCAvKiBISURH
YW1lcGFkLmggKi8sCi0JCQkJNTE1QkUxOTkxRDU0RjZCRDAwREQ3QzY4IC8qIEhJREdhbWVwYWRQ
cm92aWRlci5tbSAqLywKIAkJCQk1MTVCRTE5QTFENTRGNkJEMDBERDdDNjggLyogSElER2FtZXBh
ZFByb3ZpZGVyLmggKi8sCisJCQkJNTE1QkUxOTkxRDU0RjZCRDAwREQ3QzY4IC8qIEhJREdhbWVw
YWRQcm92aWRlci5tbSAqLywKIAkJCQk1MTdFMDNGNDI0QjZCOTYzMDA1NDg5NUEgLyogTXVsdGlH
YW1lcGFkUHJvdmlkZXIuaCAqLywKIAkJCQk1MTdFMDNGNTI0QjZCOTY0MDA1NDg5NUEgLyogTXVs
dGlHYW1lcGFkUHJvdmlkZXIubW0gKi8sCiAJCQkpOwpAQCAtMjU1NTYsNyArMjU1NTUsNiBAQAog
CQkJCTJEMjlFQ0MyMTkyRUNDODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGll
bnQuaCAqLywKIAkJCQkyRDI5RUNDMzE5MkVDQzgzMDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hN
b25pdG9yTWFuYWdlci5jcHAgKi8sCiAJCQkJMkQyOUVDQzQxOTJFQ0M4MzAwOTg0Qjc4IC8qIERp
c3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuaCAqLywKLQkJCQkzMURDREY0MTFEQTFDNDU0MDBF
QTVCOTMgLyogRXh0ZW5kZWRDb2xvci5jcHAgKi8sCiAJCQkJMzFEQ0RGNDIxREExQzQ1NDAwRUE1
QjkzIC8qIEV4dGVuZGVkQ29sb3IuaCAqLywKIAkJCQk2RTY3RDJBODEyODBFOEJEMDA4NzU4Rjcg
LyogRXh0ZW5zaW9uc0dMLmggKi8sCiAJCQkJQjI3NTM1M0EwQjA1MzgxNDAwMkNFNjRGIC8qIEZs
b2F0UG9pbnQuY3BwICovLApAQCAtMjY4ODAsNyArMjY4NzgsNiBAQAogCQlDRDk0QTVDQjFGNzFD
QjQ2MDBGNTI1QzUgLyogZW5jcnlwdGVkbWVkaWEgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAotCQkJCUNERTNBRTEzMjRCNDkzNkYwMDEyOEU3RSAvKiBDRE1VdGls
aXRpZXMuY3BwICovLAogCQkJCUNEOTRBNUQ5MUY3MUNCOUYwMEY1MjVDNSAvKiBjbGVhcmtleSAq
LywKIAkJCQlDREY3NTY5QjIxNUMyM0E0MDBFRkNCNTAgLyogQ0RNRW5jcnlwdGlvblNjaGVtZS5o
ICovLAogCQkJCUNEOTRBNUQxMUY3MUNCNkIwMEY1MjVDNSAvKiBDRE1GYWN0b3J5LmNwcCAqLywK
QEAgLTI2ODk1LDEyICsyNjg5MiwxMyBAQAogCQkJCUNEOTRBNUQ2MUY3MUNCNkQwMEY1MjVDNSAv
KiBDRE1NZXNzYWdlVHlwZS5oICovLAogCQkJCUNEM0NFMTFDMjQwNDUxQUYwMDRCQTAxRCAvKiBD
RE1Qcml2YXRlLmNwcCAqLywKIAkJCQlDRDk0QTVDRjFGNzFDQjZBMDBGNTI1QzUgLyogQ0RNUHJp
dmF0ZS5oICovLAotCQkJCUNERTNBRTEwMjRCNDkxNjkwMDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMu
aCAqLywKIAkJCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1RDUgLyogQ0RNUHJveHkuY3BwICovLAog
CQkJCUNEOTRBNUNGMUY3MUNCNjEwMEY1MjVDNSAvKiBDRE1Qcm94eS5oICovLAogCQkJCUNEOTRB
NUNDMUY3MUNCNjkwMEY1MjVDNSAvKiBDRE1SZXF1aXJlbWVudC5oICovLAogCQkJCUNEOTRBNUQw
MUY3MUNCNkIwMEY1MjVDNSAvKiBDRE1SZXN0cmljdGlvbnMuaCAqLywKIAkJCQlDRDk0QTVENTFG
NzFDQjZEMDBGNTI1QzUgLyogQ0RNU2Vzc2lvblR5cGUuaCAqLywKKwkJCQlDREUzQUUxMzI0QjQ5
MzZGMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmNwcCAqLywKKwkJCQlDREUzQUUxMDI0QjQ5MTY5
MDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGVuY3J5cHRl
ZG1lZGlhOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTMwMDgyLDYgKzMwMDgwLDcg
QEAKIAkJCQlDRDNDRTEwMzI0MDFBQURBMDA0QkEwMUQgLyogQ0RNUmVzdHJpY3Rpb25zLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDREU1OTU5NzFCRjI2RTIxMDBBMUNCRTggLyogQ0RNU2Vzc2lvbk1l
ZGlhU291cmNlQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0QzQ0UxMDQyNDAxQUFEQTAw
NEJBMDFEIC8qIENETVNlc3Npb25UeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlDREUzQUUxMjI0
QjQ5MTZBMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1RkE5
MDRDQTE3OEU2MUY1MDA0QzhBMkQgLyogQ2VydGlmaWNhdGVJbmZvLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5MUI4RjBCNTIxOTUzRDY1MDAwQzJCMDAgLyogQ2VydGlmaWNhdGVJbmZvQmFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkUzNkZEMTUxNkM3ODI2NTAwRjg4N0MxIC8qIENoYW5nZVZlcnNp
b25EYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMjE5LDcgKzMxMjE4LDYgQEAKIAkJCQlGMzQ0
Qzc1MzExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJN0EwRTc3MEYxMEMwMEE4ODAwQTAyNzZFIC8qIEluc3BlY3RvckZy
b250ZW5kSG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0E1NDg1ODAxNEUwMkQ1MTAwNkFFMDVB
IC8qIEluc3BlY3Rvckhpc3RvcnkuaCBpbiBIZWFkZXJzICovLAotCQkJCUNERTNBRTEyMjRCNDkx
NkEwMDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QjgxQ0FF
MUZBQTQ0NjIwMDM3RDFFNiAvKiBJbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMjBENjI5MjcxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NjBFNkQyMzBERTMwMzAwNDYxQUFFIC8qIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvblB1YmxpYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjQwMiw2
ICszMjQwMCw3IEBACiAJCQkJODUwMzFCNDgwQTQ0RUZDNzAwRjk5MkUwIC8qIE1vdXNlUmVsYXRl
ZEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOURGQzA5OUU2NDkyMDA1NkU1ODEgLyog
TW92ZVNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQjE3MDA2MTRBMkJB
QjIwMEEyQjVEOSAvKiBNdWx0aUNoYW5uZWxSZXNhbXBsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUxN0UwM0Y3MjRCNkQ5ODQwMDU0ODk1QSAvKiBNdWx0aUdhbWVwYWRQcm92aWRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMjZGNzU2QjAxQjNCNjVBQzAwMDVERDc5IC8qIE11dGFibGVSYW5nZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2QjExQjNCNjVBQzAwMDVERDc5IC8qIE11dGFibGVS
YW5nZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUM2RjA5MDBBMTQzMjdCNjEwMDY4NTg0OSAv
KiBNdXRhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTMzMjgxLDcgKzMzMjgwLDYg
QEAKIAkJCQlFQ0E2ODBDNzFFNjc3MjQ1MDA3MzFEMjAgLyogU3RyaW5nVXRpbGl0aWVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5QjZDNDE1MzEzNDQ5NDkwMDAwODVCNjIgLyogU3RyaW5nV2l0aERp
cmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ5Rjc3NzYwRUZFQzYyMDAwOTA4NDlEIC8q
IFN0cm9rZVN0eWxlQXBwbGllci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE3RTAzRjcyNEI2RDk4
NDAwNTQ4OTVBIC8qIE11bHRpR2FtZXBhZFByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
MTRCODIwNTFENkRGMEU1MDA3N0VCRTMgLyogU3RydWN0dXJlZENsb25lLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFNDVCQTZCNjIzNzYyMkEzMDA0REZDMDcgLyogU3R5bGVBZGp1c3Rlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM1RUI2QTMwRTgxREM0RjAwQjI1OTY1IC8qIFN0eWxlQmFja2dyb3Vu
ZERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ0NzMsNiArMzQ0NzEsNyBAQAogCQkJCUNEREUw
MkVEMThCM0VENkQwMENGN0ZGMSAvKiBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uT2JqQy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUNEREUwMkYwMThCNTY1MTMwMENGN0ZGMSAvKiBDRE1TZXNzaW9uQVZT
dHJlYW1TZXNzaW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RFNTk1OUQxQkYyNzU3MTAwQTFD
QkU4IC8qIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMubW0gaW4gU291cmNlcyAqLywKKwkJ
CQlDREUzQUUxNDI0QjQ5MzcwMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUExNDA5MEZCMUFBNTFFMUQwMDkxMTkxQSAvKiBDb250ZW50RmlsdGVyVW5ibG9j
a0hhbmRsZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3QUZGNDIzMUVGQjE0NDkwMEI1
NDVCMyAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NDZDNjk2Q0MxRTcyMDVGQzAwNTk3OTM3IC8qIENQVU1vbml0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0zNDgwMiw3ICszNDgwMSw2IEBACiAJCQkJREVDQTdEQjcxRjlFNjdCNjAwRTNCNjYxIC8q
IFVuaWZpZWRTb3VyY2UxNjcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREVDQTdEQjgxRjlFNjdC
NjAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNjguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREVD
QTdEQjkxRjlFNjdCNjAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNjkuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQ0RFM0FFMTQyNEI0OTM3MDAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlERUNBN0RCQTFGOUU2N0I2MDBFM0I2NjEgLyogVW5pZmllZFNvdXJj
ZTE3MC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBN0RGQjFGOUVCMzY0MDBFM0I2NjEgLyog
VW5pZmllZFNvdXJjZTE3MS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBN0RGQzFGOUVCMzY0
MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTE3Mi5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5jcHAJKHJldmlzaW9uIDI2NDI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjU4LDcgKzY1
OCw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXIKICAgICAgICAg
Y29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkRpc3BsYXlQMzsKICAgICAgICAgYnJlYWs7CiAgICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfQogICAgIGNvbnN1bWVJZGVudChhcmdzKTsKIApAQCAtNjc2LDcgKzY3Niw3IEBAIHN0YXRp
YyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXIKICAgICAgICAgaWYgKCFhbHBoYVBh
cmFtZXRlcikKICAgICAgICAgICAgIGFscGhhUGFyYW1ldGVyID0gY29uc3VtZU51bWJlcihhcmdz
LCBWYWx1ZVJhbmdlQWxsKTsKICAgICAgICAgaWYgKCFhbHBoYVBhcmFtZXRlcikKLSAgICAgICAg
ICAgIHJldHVybiBDb2xvcigpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgICAgICBj
b2xvckNoYW5uZWxzWzNdID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigxLjAsIGFscGhhUGFyYW1l
dGVyLT5pc1BlcmNlbnRhZ2UoKSA/IChhbHBoYVBhcmFtZXRlci0+ZG91YmxlVmFsdWUoKSAvIDEw
MCkgOiBhbHBoYVBhcmFtZXRlci0+ZG91YmxlVmFsdWUoKSkpOwogICAgIH0KQEAgLTY4NCw5ICs2
ODQsOSBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uUGFyYW1ldGVyCiAgICAgLy8g
RklYTUU6IFN1cHBvcnQgdGhlIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZhbGxiYWNrIGNvbG9y
IHZhbHVlcy4KIAogICAgIGlmICghYXJncy5hdEVuZCgpKQotICAgICAgICByZXR1cm4gQ29sb3Io
KTsKLSAgICAKLSAgICByZXR1cm4gbWFrZUV4dGVuZGVkQ29sb3IoY29sb3JDaGFubmVsc1swXSwg
Y29sb3JDaGFubmVsc1sxXSwgY29sb3JDaGFubmVsc1syXSwgY29sb3JDaGFubmVsc1szXSwgY29s
b3JTcGFjZSk7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gQ29sb3IgeyBDb2xv
ckNvbXBvbmVudHMgeyBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JDaGFubmVsc1swXSksIHN0YXRp
Y19jYXN0PGZsb2F0Pihjb2xvckNoYW5uZWxzWzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9y
Q2hhbm5lbHNbMl0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JDaGFubmVsc1szXSkgfSwgY29s
b3JTcGFjZSB9OwogfQogCiBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHBhcnNlSGV4
Q29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGJvb2wgYWNjZXB0UXVpcmt5Q29sb3Jz
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2
aXNpb24gMjY0MjY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkNvbG9yLmgiCiAKLSNpbmNsdWRlICJBbmltYXRpb25VdGlsaXRpZXMuaCIK
ICNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJDb2xvclV0aWxpdGll
cy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMjYsMjIgKzEy
MywyNiBAQCBmbG9hdCBDb2xvcjo6bHVtaW5hbmNlKCkgY29uc3QKIAogQ29sb3IgQ29sb3I6OmNv
bG9yV2l0aEFscGhhKGZsb2F0IGFscGhhKSBjb25zdAogewotICAgIGlmIChpc0V4dGVuZGVkKCkp
Ci0gICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY29sb3JXaXRoQWxwaGEoYWxwaGEpOwotCi0g
ICAgQ29sb3IgcmVzdWx0ID0gY29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoYXNJbmxpbmUoKSwgYWxw
aGEpOwotCi0gICAgLy8gRklYTUU6IFdoeSBpcyBwcmVzZXJ2aW5nIHRoZSBzZW1hbnRpYyBiaXQg
ZGVzaXJlZCBhbmQvb3IgY29ycmVjdCBoZXJlPwotICAgIGlmIChpc1NlbWFudGljKCkpCi0gICAg
ICAgIHJlc3VsdC50YWdBc1NlbWFudGljKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gY2FsbE9uVW5kZXJseWluZ1R5cGUoV1RGOjptYWtlVmlzaXRvcigKKyAgICAgICAgWyZdIChj
b25zdCBTUkdCQTx1aW50OF90PiYgdW5kZXJseWluZ0NvbG9yKSAtPiBDb2xvciB7CisgICAgICAg
ICAgICBDb2xvciByZXN1bHQgPSBjb2xvcldpdGhPdmVycmlkZW5BbHBoYSh1bmRlcmx5aW5nQ29s
b3IsIGFscGhhKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IFdoeSBpcyBwcmVzZXJ2aW5nIHRo
ZSBzZW1hbnRpYyBiaXQgZGVzaXJlZCBhbmQvb3IgY29ycmVjdCBoZXJlPworICAgICAgICAgICAg
aWYgKGlzU2VtYW50aWMoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygp
OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChj
b25zdCBhdXRvJiB1bmRlcmx5aW5nQ29sb3IpIC0+IENvbG9yIHsKKyAgICAgICAgICAgIHJldHVy
biBjb2xvcldpdGhPdmVycmlkZW5BbHBoYSh1bmRlcmx5aW5nQ29sb3IsIGFscGhhKTsKKyAgICAg
ICAgfQorICAgICkpOwogfQogCiBDb2xvciBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShm
bG9hdCBhbHBoYSkgY29uc3QKIHsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1
cm4gYXNFeHRlbmRlZCgpLmludmVydGVkQ29sb3JXaXRoQWxwaGEoYWxwaGEpOwotICAgIHJldHVy
biBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGFzSW5saW5lKCksIGFscGhhKTsKKyAg
ICByZXR1cm4gY2FsbE9uVW5kZXJseWluZ1R5cGUoWyZdIChjb25zdCBhdXRvJiB1bmRlcmx5aW5n
Q29sb3IpIC0+IENvbG9yIHsKKyAgICAgICAgcmV0dXJuIGludmVydGVkQ29sb3JXaXRoT3ZlcnJp
ZGVuQWxwaGEodW5kZXJseWluZ0NvbG9yLCBhbHBoYSk7CisgICAgfSk7CiB9CiAKIENvbG9yIENv
bG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjY0MjY5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIlNpbXBsZUNvbG9yLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogI2lmIFVTRShDRykKQEAgLTUxLDYgKzUyLDE4IEBAIHR5
cGVkZWYgc3RydWN0IF9HZGtSR0JBIEdka1JHQkE7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
Ly8gQWJsZSB0byByZXByZXNlbnQ6CisvLyAgICAtIFNwZWNpYWwgImludmFsaWQgY29sb3IiIHN0
YXRlLCB0cmVhdGVkIGFzIHRyYW5zcGFyZW50IGJsYWNrIGJ1dCBkaXN0aW5ndWlzaGFibGUKKy8v
ICAgIC0gNHggOC1iaXQgKDAtMjU1KSBzUkdCQSwgc3RvcmVkIGlubGluZSwgbm8gYWxsb2NhdGlv
bgorLy8gICAgLSA0eCBmbG9hdCAoMC0xKSBzUkdCQSwgc3RvcmVkIGluIGEgcmVmZXJlbmNlIGNv
dW50ZWQgc3ViLW9iamVjdAorLy8gICAgLSA0eCBmbG9hdCAoMC0xKSBMaW5lYXIgc1JHQkEsIHN0
b3JlZCBpbiBhIHJlZmVyZW5jZSBjb3VudGVkIHN1Yi1vYmplY3QKKy8vICAgIC0gNHggZmxvYXQg
KDAtMSkgRGlzcGxheVAzLCBzdG9yZWQgaW4gYSByZWZlcmVuY2UgY291bnRlZCBzdWItb2JqZWN0
CisvLworLy8gQWRkaXRpb25hbGx5LCB0aGUgaW5saW5lIDgtYml0IHNSR0JBIGNhbiBoYXZlIGFu
IG9wdGlvbmFsICJzZW1hbnRpYyIgYml0IHNldCBvbiBpdCwKKy8vIHdoaWNoIGluZGljYXRlcyB0
aGUgY29sb3Igb3JpZ2luYXRlZCBmcm9tIGEgQ1NTIHNlbWFudGljIGNvbG9yIG5hbWUuCisvLyBG
SVhNRTogSWYgd2Uga2VlcCB0aGUgInNlbWFudGljIiBiaXQgb24gQ29sb3IsIHdlIHNob3VsZCBl
eHRlbmQgc3VwcG9ydCB0byBhbGwgY29sb3JzLAorLy8gbm90IGp1c3QgaW5saW5lIG9uZXMsIGJ5
IHVzaW5nIHRoZSB1bnVzZWQgcG9pbnRlciBiaXRzLgorCiBjbGFzcyBDb2xvciB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC02Myw3ICs3NiwxMCBAQCBwdWJsaWM6
CiAgICAgQ29sb3IoU1JHQkE8dWludDhfdD4sIFNlbWFudGljVGFnKTsKICAgICBDb2xvcihPcHRp
b25hbDxTUkdCQTx1aW50OF90Pj4sIFNlbWFudGljVGFnKTsKIAotICAgIENvbG9yKFJlZjxFeHRl
bmRlZENvbG9yPiYmKTsKKyAgICBDb2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+LCBDb2xvclNw
YWNlKTsKKyAgICBDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4mKTsKKyAgICBDb2xvcihjb25zdCBM
aW5lYXJTUkdCQTxmbG9hdD4mKTsKKyAgICBDb2xvcihjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7
CiAKICAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZUVtcHR5VmFsdWVUeXBlKTsKICAg
ICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpOwpAQCAtNzIs
MzQgKzg4LDM0IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihjb25zdCBDb2xv
ciYpOwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKENvbG9yJiYpOwogCisgICAgV0VCQ09SRV9F
WFBPUlQgQ29sb3ImIG9wZXJhdG9yPShjb25zdCBDb2xvciYpOworICAgIFdFQkNPUkVfRVhQT1JU
IENvbG9yJiBvcGVyYXRvcj0oQ29sb3ImJik7CisKICAgICB+Q29sb3IoKTsKIAotICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSB8fCAobV9jb2xvckRhdGEuaW5s
aW5lQ29sb3JBbmRGbGFncyAmIHZhbGlkSW5saW5lQ29sb3JCaXQpOyB9CisgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0OwogCi0gICAgLy8gVHJ1ZSBpZiB0aGUgY29sb3Igb3JpZ2luYXRlZCBmcm9t
IGEgQ1NTIHNlbWFudGljIGNvbG9yIG5hbWUuCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyBy
ZXR1cm4gaXNFeHRlbmRlZCgpIHx8IChtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzICYg
dmFsaWRJbmxpbmVDb2xvckJpdCk7IH0KICAgICBib29sIGlzU2VtYW50aWMoKSBjb25zdCB7IHJl
dHVybiBpc0lubGluZSgpICYmIChtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzICYgaXNT
ZW1hbnRpY0lubGluZUNvbG9yQml0KTsgfQogCiAgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsg
cmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID09IDEuMCA6IGFzSW5s
aW5lKCkuYWxwaGEgPT0gMjU1OyB9CiAgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVy
biBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IGFzSW5saW5lKCku
YWxwaGEgPiAwOyB9Ci0KICAgICB1aW50OF90IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNFeHRl
bmRlZCgpID8gY29udmVydFRvQ29tcG9uZW50Qnl0ZShhc0V4dGVuZGVkKCkuYWxwaGEoKSkgOiBh
c0lubGluZSgpLmFscGhhOyB9CiAgICAgZmxvYXQgYWxwaGFBc0Zsb2F0KCkgY29uc3QgeyByZXR1
cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgOiBjb252ZXJ0VG9Db21wb25l
bnRGbG9hdChhc0lubGluZSgpLmFscGhhKTsgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0
OworICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGx1bWluYW5jZSgpIGNvbnN0OworICAgIFdFQkNP
UkVfRVhQT1JUIGZsb2F0IGxpZ2h0bmVzcygpIGNvbnN0OyAvLyBGSVhNRTogUmVwbGFjZSByZW1h
aW5pbmcgdXNlcyB3aXRoIGx1bWluYW5jZS4KIAotICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFp
cjxDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+PiBjb2xvclNwYWNlQW5kQ29tcG9u
ZW50cygpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGRlY2x0eXBlKGF1
dG8pIGNhbGxPblVuZGVybHlpbmdUeXBlKEZ1bmN0b3ImJikgY29uc3Q7CiAKICAgICAvLyBUaGlz
IHdpbGwgY29udmVydCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBpbnRvIHNSR0IuCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4gdG9TUkdCQUxvc3N5KCkgY29uc3Q7CiAKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZs
b2F0Pj4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKKwogICAgIFdFQkNPUkVfRVhQ
T1JUIENvbG9yIGxpZ2h0ZW5lZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGRh
cmtlbmVkKCkgY29uc3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBsdW1pbmFuY2UoKSBj
b25zdDsKLQotICAgIC8vIEZJWE1FOiBSZXBsYWNlIHJlbWFpbmluZyB1c2VzIHdpdGggbHVtaW5h
bmNlLgotICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGxpZ2h0bmVzcygpIGNvbnN0OwotCiAgICAg
Q29sb3IgaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0
OwogICAgIENvbG9yIGludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0Owog
CkBAIC0xNDQsOSArMTYwLDYgQEAgcHVibGljOgogICAgIGNvbnN0IEV4dGVuZGVkQ29sb3ImIGFz
RXh0ZW5kZWQoKSBjb25zdDsKICAgICBTUkdCQTx1aW50OF90PiBhc0lubGluZSgpIGNvbnN0Owog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3ImIG9wZXJhdG9yPShjb25zdCBDb2xvciYpOwotICAg
IFdFQkNPUkVfRVhQT1JUIENvbG9yJiBvcGVyYXRvcj0oQ29sb3ImJik7Ci0KICAgICAvLyBFeHRl
bmRlZCBhbmQgbm9uLWV4dGVuZGVkIGNvbG9ycyB3aWxsIGFsd2F5cyBiZSBub24tZXF1YWwuCiAg
ICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIp
OwogICAgIGZyaWVuZCBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9y
JiBhLCBjb25zdCBDb2xvciYgYik7CkBAIC0xNTksNyArMTcyLDEyIEBAIHB1YmxpYzoKICAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+IGRlY29kZShEZWNv
ZGVyJik7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBzZXRJbmxpbmVDb2xvcihTUkdCQTx1aW50OF90
Pik7CisgICAgQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYpOworCisgICAgdm9pZCBzZXRDb2xv
cihTUkdCQTx1aW50OF90Pik7CisgICAgdm9pZCBzZXRDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4m
KTsKKyAgICB2b2lkIHNldENvbG9yKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYpOworICAgIHZv
aWQgc2V0Q29sb3IoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOwogICAgIHZvaWQgc2V0RXh0ZW5k
ZWRDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJik7CiAKICAgICB2b2lkIHRhZ0FzU2VtYW50aWMo
KSB7IG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgfD0gaXNTZW1hbnRpY0lubGluZUNv
bG9yQml0OyB9CkBAIC0yMjcsMjkgKzI0NSw1OSBAQCBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5n
U2VtYW50aWNDb2xvcihjCiAKIGlubGluZSBDb2xvcjo6Q29sb3IoU1JHQkE8dWludDhfdD4gY29s
b3IpCiB7Ci0gICAgc2V0SW5saW5lQ29sb3IoY29sb3IpOworICAgIHNldENvbG9yKGNvbG9yKTsK
IH0KIAogaW5saW5lIENvbG9yOjpDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gY29sb3Ip
CiB7CiAgICAgaWYgKGNvbG9yKQotICAgICAgICBzZXRJbmxpbmVDb2xvcigqY29sb3IpOworICAg
ICAgICBzZXRDb2xvcigqY29sb3IpOwogfQogCiBpbmxpbmUgQ29sb3I6OkNvbG9yKFNSR0JBPHVp
bnQ4X3Q+IGNvbG9yLCBTZW1hbnRpY1RhZykKIHsKLSAgICBzZXRJbmxpbmVDb2xvcihjb2xvcik7
CisgICAgc2V0Q29sb3IoY29sb3IpOwogICAgIHRhZ0FzU2VtYW50aWMoKTsKIH0KIAogaW5saW5l
IENvbG9yOjpDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gY29sb3IsIFNlbWFudGljVGFn
KQogewogICAgIGlmIChjb2xvcikgewotICAgICAgICBzZXRJbmxpbmVDb2xvcigqY29sb3IpOwor
ICAgICAgICBzZXRDb2xvcigqY29sb3IpOwogICAgICAgICB0YWdBc1NlbWFudGljKCk7CiAgICAg
fQogfQogCitpbmxpbmUgQ29sb3I6OkNvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4gY29tcG9u
ZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIHN3aXRjaCAoY29sb3JTcGFjZSkg
eworICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoKKyAgICAgICAgc2V0Q29sb3IoYXNTUkdCQShj
b21wb25lbnRzKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVh
clJHQjoKKyAgICAgICAgc2V0Q29sb3IoYXNMaW5lYXJTUkdCQShjb21wb25lbnRzKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoKKyAgICAgICAgc2V0
Q29sb3IoYXNEaXNwbGF5UDMoY29tcG9uZW50cykpOworICAgICAgICByZXR1cm47CisgICAgfQor
fQorCitpbmxpbmUgQ29sb3I6OkNvbG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCit7Cisg
ICAgc2V0Q29sb3IoY29sb3IpOworfQorCitpbmxpbmUgQ29sb3I6OkNvbG9yKGNvbnN0IExpbmVh
clNSR0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAgc2V0Q29sb3IoY29sb3IpOworfQorCitpbmxp
bmUgQ29sb3I6OkNvbG9yKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQoreworICAgIHNl
dENvbG9yKGNvbG9yKTsKK30KKwogaW5saW5lIENvbG9yOjpDb2xvcihSZWY8RXh0ZW5kZWRDb2xv
cj4mJiBleHRlbmRlZENvbG9yKQogewogICAgIHNldEV4dGVuZGVkQ29sb3IoV1RGTW92ZShleHRl
bmRlZENvbG9yKSk7CkBAIC0yODEsMTggKzMyOSwzMyBAQCBpbmxpbmUgQ29sb3I6On5Db2xvcigp
CiBpbmxpbmUgdW5zaWduZWQgQ29sb3I6Omhhc2goKSBjb25zdAogewogICAgIGlmIChpc0V4dGVu
ZGVkKCkpCi0gICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuaGFzaCgpOworICAgICAgICByZXR1
cm4gY29tcHV0ZUhhc2goYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKSwgYXNFeHRlbmRlZCgpLmNv
bG9yU3BhY2UoKSk7CiAgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2NvbG9yRGF0YS5pbmxpbmVD
b2xvckFuZEZsYWdzKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4gQ29sb3I6
OnRvU1JHQkFMb3NzeSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBkZWNsdHlw
ZShhdXRvKSBDb2xvcjo6Y2FsbE9uVW5kZXJseWluZ1R5cGUoRnVuY3RvciYmIGZ1bmN0b3IpIGNv
bnN0CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQo
KS50b1NSR0JBTG9zc3k8VD4oKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQs
IHVpbnQ4X3Q+KQotICAgICAgICByZXR1cm4gYXNJbmxpbmUoKTsKLSAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBv
bmVudEZsb2F0cyhhc0lubGluZSgpKTsKKyAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5jYWxs
T25VbmRlcmx5aW5nVHlwZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOworICAgIHJl
dHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIGFzSW5saW5l
KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTUkdCQTxUPiBDb2xvcjo6dG9TUkdCQUxv
c3N5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2FsbE9uVW5kZXJseWluZ1R5cGUoV1RGOjptYWtl
VmlzaXRvcigKKyAgICAgICAgW10gKGNvbnN0IFNSR0JBPHVpbnQ4X3Q+JiBjb2xvcikgeworICAg
ICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCB1aW50OF90PikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gY29sb3I7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6
aXNfc2FtZV92PFQsIGZsb2F0PikKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvQ29t
cG9uZW50RmxvYXRzKGNvbG9yKTsKKyAgICAgICAgfSwKKyAgICAgICAgW10gKGNvbnN0IGF1dG8m
IGNvbG9yKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIHVp
bnQ4X3Q+KQorICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0
b1NSR0JBKGNvbG9yKSk7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92
PFQsIGZsb2F0PikKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9TUkdCQShjb2xvcik7CisgICAg
ICAgIH0KKyAgICApKTsKIH0KIAogaW5saW5lIENvbG9yIENvbG9yOjppbnZlcnRlZENvbG9yV2l0
aEFscGhhKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3QKQEAgLTMyNywxMiArMzkwLDI3IEBA
IGlubGluZSBTUkdCQTx1aW50OF90PiBDb2xvcjo6YXNJbmxpbmUoKSAKICAgICByZXR1cm4gYXNT
UkdCQShQYWNrZWQ6OlJHQkEgeyBzdGF0aWNfY2FzdDx1aW50MzJfdD4obV9jb2xvckRhdGEuaW5s
aW5lQ29sb3JBbmRGbGFncyA+PiAzMikgfSk7CiB9CiAKLWlubGluZSB2b2lkIENvbG9yOjpzZXRJ
bmxpbmVDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikKK2lubGluZSB2b2lkIENvbG9yOjpzZXRD
b2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikKIHsKICAgICBtX2NvbG9yRGF0YS5pbmxpbmVDb2xv
ckFuZEZsYWdzID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KFBhY2tlZDo6UkdCQSB7IGNvbG9yIH0u
dmFsdWUpIDw8IDMyOwogICAgIHRhZ0FzVmFsaWQoKTsKIH0KIAoraW5saW5lIHZvaWQgQ29sb3I6
OnNldENvbG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAgc2V0RXh0ZW5kZWRD
b2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoY29sb3IpKTsKK30KKworaW5saW5lIHZvaWQgQ29s
b3I6OnNldENvbG9yKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAgc2V0
RXh0ZW5kZWRDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoY29sb3IpKTsKK30KKworaW5saW5l
IHZvaWQgQ29sb3I6OnNldENvbG9yKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQorewor
ICAgIHNldEV4dGVuZGVkQ29sb3IoRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGNvbG9yKSk7Cit9CisK
IGlubGluZSB2b2lkIENvbG9yOjpzZXRFeHRlbmRlZENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYm
IGV4dGVuZGVkQ29sb3IpCiB7CiAgICAgLy8gWmVybyB0aGUgdW5pb24sIGp1c3QgaW4gY2FzZSBh
IDMyLWJpdCBzeXN0ZW0gb25seSBhc3NpZ25zIHRoZQpAQCAtMzQ0LDIwICs0MjIsMTkgQEAgaW5s
aW5lIHZvaWQgQ29sb3I6OnNldEV4dGVuZGVkQ29sb3IoUmVmPAogCiBpbmxpbmUgYm9vbCBDb2xv
cjo6aXNCbGFja0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAoY29sb3IuaXNF
eHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gY29sb3IuYXNFeHRlbmRlZCgpLmlzQmxhY2soKTsK
LSAgICByZXR1cm4gY29sb3IuYXNJbmxpbmUoKSA9PSBDb2xvcjo6YmxhY2s7CisgICAgcmV0dXJu
IGNvbG9yLmNhbGxPblVuZGVybHlpbmdUeXBlKFtdIChjb25zdCBhdXRvJiBjb2xvcikgeworICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6aXNCbGFjayhjb2xvcik7CisgICAgfSk7CiB9CiAKIGlubGlu
ZSBib29sIENvbG9yOjppc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlm
IChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBjb2xvci5hc0V4dGVuZGVkKCku
aXNXaGl0ZSgpOwotICAgIHJldHVybiBjb2xvci5hc0lubGluZSgpID09IENvbG9yOjp3aGl0ZTsK
KyAgICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJseWluZ1R5cGUoW10gKGNvbnN0IGF1dG8mIGNv
bG9yKSB7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjppc1doaXRlKGNvbG9yKTsKKyAgICB9KTsK
IH0KIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ29sb3I6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBDb2xvcjo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkgewog
ICAgICAgICBlbmNvZGVyIDw8IHRydWU7CkBAIC0zODUsOCArNDYyLDcgQEAgdm9pZCBDb2xvcjo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbgogICAgIGVuY29kZXIgPDwgUGFja2VkOjpSR0JB
IHsgYXNJbmxpbmUoKSB9LnZhbHVlOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0
aW9uYWw8Q29sb3I+IENvbG9yOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3RlbXBsYXRlPGNs
YXNzIERlY29kZXI+IE9wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCiB7CiAgICAgYm9vbCBpc0V4dGVuZGVkOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNF
eHRlbmRlZCkpCkBAIC00MDgsNyArNDg0LDcgQEAgT3B0aW9uYWw8Q29sb3I+IENvbG9yOjpkZWNv
ZGUoRGVjb2RlciYgZAogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShjb2xvclNwYWNlKSkKICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiBDb2xvciB7IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShj
MSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSkgfTsKKyAgICAgICAgcmV0dXJuIENvbG9yIHsg
RXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKHsgYzEsIGMyLCBjMywgYWxwaGEgfSwgY29sb3JTcGFjZSkg
fTsKICAgICB9CiAKICAgICBib29sIGlzVmFsaWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAkocmV2aXNpb24gMjY0MjY5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDMxICsyNSwzNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotbmFt
ZXNwYWNlIFdlYkNvcmUgeworI2luY2x1ZGUgIkNvbG9yVHlwZXMuaCIKIAotdGVtcGxhdGU8dHlw
ZW5hbWU+IHN0cnVjdCBDTVlLQTsKLXRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgRGlzcGxheVAz
OwotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBIU0xBOwotdGVtcGxhdGU8dHlwZW5hbWU+IHN0
cnVjdCBMaW5lYXJEaXNwbGF5UDM7Ci10ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IExpbmVhclNS
R0JBOwotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBTUkdCQTsKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogLy8gVGhlc2UgYXJlIHRoZSBzdGFuZGFyZCBzUkdCIDwtPiBMaW5lYXJSR0IgLyBEaXNw
bGF5UDMgPC0+IExpbmVhckRpc3BsYXlQMyBjb252ZXJzaW9uIGZ1bmN0aW9ucyAoaHR0cHM6Ly9l
bi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQikuCiBmbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9u
ZW50KGZsb2F0KTsKIGZsb2F0IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoZmxvYXQpOwogCi1M
aW5lYXJTUkdCQTxmbG9hdD4gdG9MaW5lYXJTUkdCQShjb25zdCBTUkdCQTxmbG9hdD4mKTsKLVNS
R0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYpOworV0VCQ09SRV9F
WFBPUlQgTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgU1JHQkE8ZmxvYXQ+
Jik7CitXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBMaW5lYXJTUkdC
QTxmbG9hdD4mKTsKIAotTGluZWFyRGlzcGxheVAzPGZsb2F0PiB0b0xpbmVhckRpc3BsYXlQMyhj
b25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7Ci1EaXNwbGF5UDM8ZmxvYXQ+IHRvRGlzcGxheVAzKGNv
bnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIExpbmVhckRpc3Bs
YXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOwor
V0VCQ09SRV9FWFBPUlQgRGlzcGxheVAzPGZsb2F0PiB0b0Rpc3BsYXlQMyhjb25zdCBMaW5lYXJE
aXNwbGF5UDM8ZmxvYXQ+Jik7CiAKLVNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IERpc3BsYXlQ
MzxmbG9hdD4mKTsKLURpc3BsYXlQMzxmbG9hdD4gdG9EaXNwbGF5UDMoY29uc3QgU1JHQkE8Zmxv
YXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBEaXNwbGF5
UDM8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBEaXNwbGF5UDM8ZmxvYXQ+IHRvRGlzcGxheVAz
KGNvbnN0IFNSR0JBPGZsb2F0PiYpOwogCiBXRUJDT1JFX0VYUE9SVCBIU0xBPGZsb2F0PiB0b0hT
TEEoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9T
UkdCQShjb25zdCBIU0xBPGZsb2F0PiYpOwogCiBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBD
TVlLQTxmbG9hdD4mKTsKIAorCisvLyBJZGVudGl0eSBjb252ZXJzaW9ucyAodXNlZnVsIGZvciBn
ZW5lcmljIGNvbnRleHRzKQorCitjb25zdGV4cHIgU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3Qg
U1JHQkE8ZmxvYXQ+JiBjb2xvcikgeyByZXR1cm4gY29sb3I7IH0KK2NvbnN0ZXhwciBMaW5lYXJT
UkdCQTxmbG9hdD4gdG9MaW5lYXJTUkdCQShjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9y
KSB7IHJldHVybiBjb2xvcjsgfQorY29uc3RleHByIERpc3BsYXlQMzxmbG9hdD4gdG9EaXNwbGF5
UDMoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9Citjb25z
dGV4cHIgTGluZWFyRGlzcGxheVAzPGZsb2F0PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBMaW5l
YXJEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikgeyByZXR1cm4gY29sb3I7IH0KK2NvbnN0ZXhwciBI
U0xBPGZsb2F0PiB0b0hTTEEoY29uc3QgSFNMQTxmbG9hdD4mIGNvbG9yKSB7IHJldHVybiBjb2xv
cjsgfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHAJKHJldmlz
aW9uIDI2NDI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2Vy
aWFsaXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw0NSArMTAwLDg3IEBAIHN0YXRp
YyBBU0NJSUxpdGVyYWwgc2VyaWFsaXphdGlvbihDb2xvclMKICAgICByZXR1cm4gIiJfczsKIH0K
IAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgRXh0ZW5kZWRDb2xvciYgY29sb3Ip
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlv
bihjb25zdCBDb2xvclR5cGUmIGNvbG9yKQogewotICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhh
XSA9IGNvbG9yLmNvbXBvbmVudHMoKTsKKyAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBj
b2xvcjsKICAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFscGhhLCAxLjBmKSkKLSAg
ICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIsIHNlcmlhbGl6YXRpb24oY29sb3IuY29s
b3JTcGFjZSgpKSwgJyAnLCBjMSwgJyAnLCBjMiwgJyAnLCBjMywgJyknKTsKLSAgICByZXR1cm4g
bWFrZVN0cmluZygiY29sb3IoIiwgc2VyaWFsaXphdGlvbihjb2xvci5jb2xvclNwYWNlKCkpLCAn
ICcsIGMxLCAnICcsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7CisgICAgICAgIHJl
dHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBzZXJpYWxpemF0aW9uKGNvbG9yLmNvbG9yU3BhY2Up
LCAnICcsIGMxLCAnICcsIGMyLCAnICcsIGMzLCAnKScpOworICAgIHJldHVybiBtYWtlU3RyaW5n
KCJjb2xvcigiLCBzZXJpYWxpemF0aW9uKGNvbG9yLmNvbG9yU3BhY2UpLCAnICcsIGMxLCAnICcs
IGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7CiB9CiAKLVN0cmluZyBzZXJpYWxpemF0
aW9uRm9ySFRNTChjb25zdCBFeHRlbmRlZENvbG9yJiBjb2xvcikKKy8vIFNSR0JBPGZsb2F0PiBv
dmVybG9hZHMKKworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgU1JHQkE8ZmxvYXQ+
JiBjb2xvcikKK3sKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7Cit9CisKK1N0cmlu
ZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQogewotICAg
IHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yKTsKKyAgICByZXR1cm4gc2VyaWFsaXph
dGlvbihjb2xvcik7CiB9CiAKLVN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4
dChjb25zdCBFeHRlbmRlZENvbG9yJiBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVu
ZGVyVHJlZUFzVGV4dChjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQogewotICAgIHJldHVybiBz
ZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xv
cik7CiB9CiAKKy8vIExpbmVhclNSR0JBPGZsb2F0PiBvdmVybG9hZHMKKworU3RyaW5nIHNlcmlh
bGl6YXRpb25Gb3JDU1MoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBy
ZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7Cit9CisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9y
SFRNTChjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJp
YWxpemF0aW9uKGNvbG9yKTsKK30KKworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVl
QXNUZXh0KGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAgcmV0dXJuIHNl
cmlhbGl6YXRpb24oY29sb3IpOworfQorCisvLyBEaXNwbGF5UDM8ZmxvYXQ+IG92ZXJsb2Fkcwor
CitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xv
cikKK3sKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7Cit9CisKK1N0cmluZyBzZXJp
YWxpemF0aW9uRm9ySFRNTChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBy
ZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7Cit9CisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9y
UmVuZGVyVHJlZUFzVGV4dChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBy
ZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7Cit9CisKKwogLy8gQ29sb3Igb3ZlcmxvYWRzCiAK
IFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBp
ZiAoY29sb3IuaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNT
Uyhjb2xvci5hc0V4dGVuZGVkKCkpOwotICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNv
bG9yLmFzSW5saW5lKCkpOworICAgIHJldHVybiBjb2xvci5jYWxsT25VbmRlcmx5aW5nVHlwZShb
XSAoYXV0byB1bmRlcmx5aW5nQ29sb3IpIHsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25G
b3JDU1ModW5kZXJseWluZ0NvbG9yKTsKKyAgICB9KTsKIH0KIAogU3RyaW5nIHNlcmlhbGl6YXRp
b25Gb3JIVE1MKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAoY29sb3IuaXNFeHRlbmRl
ZCgpKQotICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckhUTUwoY29sb3IuYXNFeHRlbmRl
ZCgpKTsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckhUTUwoY29sb3IuYXNJbmxpbmUoKSk7
CisgICAgcmV0dXJuIGNvbG9yLmNhbGxPblVuZGVybHlpbmdUeXBlKFtdIChhdXRvIHVuZGVybHlp
bmdDb2xvcikgeworICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckhUTUwodW5kZXJseWlu
Z0NvbG9yKTsKKyAgICB9KTsKIH0KIAogU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVl
QXNUZXh0KGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgp
KQotICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29sb3Iu
YXNFeHRlbmRlZCgpKTsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1Rl
eHQoY29sb3IuYXNJbmxpbmUoKSk7CisgICAgcmV0dXJuIGNvbG9yLmNhbGxPblVuZGVybHlpbmdU
eXBlKFtdIChhdXRvIHVuZGVybHlpbmdDb2xvcikgeworICAgICAgICByZXR1cm4gc2VyaWFsaXph
dGlvbkZvclJlbmRlclRyZWVBc1RleHQodW5kZXJseWluZ0NvbG9yKTsKKyAgICB9KTsKIH0KIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JTZXJpYWxpemF0aW9uLmgJKHJldmlzaW9uIDI2NDI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw4ICsyOCw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbG9yOwotY2xhc3Mg
RXh0ZW5kZWRDb2xvcjsKIAordGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBEaXNwbGF5UDM7Cit0
ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IExpbmVhclNSR0JBOwogdGVtcGxhdGU8dHlwZW5hbWU+
IHN0cnVjdCBTUkdCQTsKIAogLy8gc2VyaWFsaXphdGlvbkZvckhUTUwgcmV0dXJucyB0aGUgY29s
b3Igc2VyaWFsaXplZCBhY2NvcmRpbmcgdG8gSFRNTDUgPGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3
Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI2ZpbGwtYW5kLXN0cm9rZS1zdHlsZXM+ICgx
MCBTZXB0ZW1iZXIgMjAxNSkKQEAgLTQwLDkgKzQxLDE3IEBAIFdFQkNPUkVfRVhQT1JUIFN0cmlu
ZyBzZXJpYWxpemF0aW9uRm9yQ1MKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9u
Rm9ySFRNTChTUkdCQTx1aW50OF90Pik7CiBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXph
dGlvbkZvclJlbmRlclRyZWVBc1RleHQoU1JHQkE8dWludDhfdD4pOwogCi1XRUJDT1JFX0VYUE9S
VCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBFeHRlbmRlZENvbG9yJik7Ci1XRUJD
T1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgRXh0ZW5kZWRDb2xv
ciYpOwotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNU
ZXh0KGNvbnN0IEV4dGVuZGVkQ29sb3ImKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxp
emF0aW9uRm9yQ1NTKGNvbnN0IFNSR0JBPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IFNSR0JBPGZsb2F0PiYpOworV0VCQ09SRV9FWFBP
UlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IFNSR0JBPGZs
b2F0PiYpOworCitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25z
dCBMaW5lYXJTUkdCQTxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0
aW9uRm9ySFRNTChjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFN0
cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBMaW5lYXJTUkdCQTxm
bG9hdD4mKTsKKworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29u
c3QgRGlzcGxheVAzPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRp
b25Gb3JIVE1MKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmlu
ZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+
Jik7CiAKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IENv
bG9yJik7CiBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3Qg
Q29sb3ImKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlw
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clR5cGVzLmgJKHJldmlzaW9uIDI2NDI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDMxIEBACiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkNv
bG9yU3BhY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit0ZW1wbGF0ZTx0eXBlbmFtZT4g
c3RydWN0IENvbXBvbmVudFRyYWl0czsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29tcG9uZW50VHJh
aXRzPHVpbnQ4X3Q+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgbWluVmFsdWUgPSAw
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBtYXhWYWx1ZSA9IDI1NTsKK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IENvbXBvbmVudFRyYWl0czxmbG9hdD4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgZmxvYXQgbWluVmFsdWUgPSAwLjBmOworICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQg
bWF4VmFsdWUgPSAxLjBmOworfTsKKworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgU1JH
QkEgewogICAgIFQgcmVkOwogICAgIFQgZ3JlZW47CiAgICAgVCBibHVlOwogICAgIFQgYWxwaGE7
CisKKyAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKKyAgICBzdGF0aWMgY29uc3RleHByIGF1
dG8gY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0I7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBTUkdCQShULCBULCBULCBUKSAtPiBTUkdCQTxUPjsKQEAgLTY0LDYgKzgxLDkgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IExpbmVhclNSR0JBIAogICAgIFQgZ3JlZW47CiAgICAg
VCBibHVlOwogICAgIFQgYWxwaGE7CisKKyAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkxpbmVhclJH
QjsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IExpbmVhclNSR0JBKFQsIFQsIFQsIFQpIC0+
IExpbmVhclNSR0JBPFQ+OwpAQCAtOTQsNiArMTE0LDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IERpc3BsYXlQMyB7CiAgICAgVCBncmVlbjsKICAgICBUIGJsdWU7CiAgICAgVCBhbHBo
YTsKKworICAgIHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOworICAgIHN0YXRpYyBjb25zdGV4cHIg
YXV0byBjb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6RGlzcGxheVAzOwogfTsKIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4gRGlzcGxheVAzKFQsIFQsIFQsIFQpIC0+IERpc3BsYXlQMzxUPjsKQEAgLTEy
NCw2ICsxNDcsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTGluZWFyRGlzcGxhCiAg
ICAgVCBncmVlbjsKICAgICBUIGJsdWU7CiAgICAgVCBhbHBoYTsKKworICAgIHVzaW5nIENvbXBv
bmVudFR5cGUgPSBUOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gTGluZWFyRGlzcGxheVAz
KFQsIFQsIFQsIFQpIC0+IExpbmVhckRpc3BsYXlQMzxUPjsKQEAgLTE1NCw2ICsxNzksOCBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSFNMQSB7CiAgICAgVCBzYXR1cmF0aW9uOwogICAg
IFQgbGlnaHRuZXNzOwogICAgIFQgYWxwaGE7CisKKyAgICB1c2luZyBDb21wb25lbnRUeXBlID0g
VDsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEhTTEEoVCwgVCwgVCwgVCkgLT4gSFNMQTxU
PjsKQEAgLTE4Niw2ICsyMTMsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ01ZS0Eg
ewogICAgIFQgeWVsbG93OwogICAgIFQgYmxhY2s7CiAgICAgVCBhbHBoYTsKKworICAgIHVzaW5n
IENvbXBvbmVudFR5cGUgPSBUOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gQ01ZS0EoVCwg
VCwgVCwgVCwgVCkgLT4gQ01ZS0E8VD47CkBAIC0yMDYsNiArMjM1LDggQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IFhZWkEgewogICAgIFQgeTsKICAgICBUIHo7CiAgICAgVCBhbHBoYTsK
KworICAgIHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUg
VD4gWFlaQShULCBULCBULCBUKSAtPiBYWVpBPFQ+OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCShyZXZpc2lvbiAyNjQyNjkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZT4gQ29sb3JUeXBlIGMKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENv
bG9yVHlwZSBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYs
IHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSk7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENv
bG9yVHlwZSBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYs
IGZsb2F0IG92ZXJyaWRlQWxwaGEpOwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNv
bnN0ZXhwciBib29sIGlzQmxhY2soY29uc3QgQ29sb3JUeXBlJik7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBib29sIGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJik7CisK
IGNvbnN0ZXhwciB1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCk7CiBjb25zdGV4
cHIgdWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90KTsKIApAQCAtMTkyLDYgKzE5NSwy
MyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBpCiAgICAgcmV0dXJu
IGNvcHk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGJvb2wg
aXNCbGFjayhjb25zdCBDb2xvclR5cGUmIGNvbG9yKQoreworICAgIGNvbnN0ZXhwciBhdXRvIG1p
biA9IENvbXBvbmVudFRyYWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+Ojpt
aW5WYWx1ZTsKKyAgICBjb25zdGV4cHIgYXV0byBtYXggPSBDb21wb25lbnRUcmFpdHM8dHlwZW5h
bWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6bWF4VmFsdWU7CisKKyAgICBhdXRvIFtjMSwg
YzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICByZXR1cm4gYzEgPT0gbWluICYmIGMyID09IG1p
biAmJiBjMyA9PSBtaW4gJiYgYWxwaGEgPT0gbWF4OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGU+IGNvbnN0ZXhwciBib29sIGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikK
K3sKKyAgICBjb25zdGV4cHIgYXV0byBtYXggPSBDb21wb25lbnRUcmFpdHM8dHlwZW5hbWUgQ29s
b3JUeXBlOjpDb21wb25lbnRUeXBlPjo6bWF4VmFsdWU7CisKKyAgICBhdXRvIFtjMSwgYzIsIGMz
LCBhbHBoYV0gPSBjb2xvcjsKKyAgICByZXR1cm4gYzEgPT0gbWF4ICYmIGMyID09IG1heCAmJiBj
MyA9PSBtYXggJiYgYWxwaGEgPT0gbWF4OworfQorCiBjb25zdGV4cHIgdWludDE2X3QgZmFzdE11
bHRpcGx5QnkyNTUodWludDE2X3QgdmFsdWUpCiB7CiAgICAgcmV0dXJuICh2YWx1ZSA8PCA4KSAt
IHZhbHVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRD
b2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RXh0ZW5kZWRDb2xvci5jcHAJKHJldmlzaW9uIDI2NDI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCShub25leGlzdGVudCkKQEAgLTEsOTEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJFeHRlbmRlZENvbG9yLmgiCi0KLSNpbmNsdWRl
ICJDb2xvci5oIgotI2luY2x1ZGUgIkNvbG9yQ29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkNvbG9y
VHlwZXMuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWY8RXh0ZW5kZWRDb2xvcj4gRXh0ZW5k
ZWRDb2xvcjo6Y3JlYXRlKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFscGhh
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRXh0
ZW5kZWRDb2xvcihjMSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSkpOwotfQotCi11bnNpZ25l
ZCBFeHRlbmRlZENvbG9yOjpoYXNoKCkgY29uc3QKLXsKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBh
bHBoYV0gPSBjb21wb25lbnRzKCk7Ci0gICAgcmV0dXJuIGNvbXB1dGVIYXNoKGMxLCBjMiwgYzMs
IGFscGhhLCBtX2NvbG9yU3BhY2UpOwotfQotCi1SZWY8RXh0ZW5kZWRDb2xvcj4gRXh0ZW5kZWRD
b2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgb3ZlcnJpZGVBbHBoYSkgY29uc3QKLXsKLSAgICBh
dXRvIFtjMSwgYzIsIGMzLCBleGlzdGluZ0FscGhhXSA9IGNvbXBvbmVudHMoKTsKLSAgICByZXR1
cm4gRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGMxLCBjMiwgYzMsIG92ZXJyaWRlQWxwaGEsIGNvbG9y
U3BhY2UoKSk7Ci19Ci0KLVJlZjxFeHRlbmRlZENvbG9yPiBFeHRlbmRlZENvbG9yOjppbnZlcnRl
ZENvbG9yV2l0aEFscGhhKGZsb2F0IG92ZXJyaWRlQWxwaGEpIGNvbnN0Ci17Ci0gICAgYXV0byBb
YzEsIGMyLCBjMywgZXhpc3RpbmdBbHBoYV0gPSBjb21wb25lbnRzKCk7Ci0gICAgcmV0dXJuIEV4
dGVuZGVkQ29sb3I6OmNyZWF0ZSgxLjBmIC0gYzEsIDEuMGYgLSBjMiwgMS4wZiAtIGMzLCBvdmVy
cmlkZUFscGhhLCBjb2xvclNwYWNlKCkpOwotfQotCi1TUkdCQTxmbG9hdD4gRXh0ZW5kZWRDb2xv
cjo6dG9TUkdCQUZsb2F0Q29tcG9uZW50c0xvc3N5KCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1f
Y29sb3JTcGFjZSkgewotICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoKLSAgICAgICAgcmV0dXJu
IGFzU1JHQkEobV9jb21wb25lbnRzKTsKLSAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclJHQjoK
LSAgICAgICAgcmV0dXJuIHRvU1JHQkEoYXNMaW5lYXJTUkdCQShtX2NvbXBvbmVudHMpKTsKLSAg
ICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoKLSAgICAgICAgcmV0dXJuIHRvU1JHQkEoYXNE
aXNwbGF5UDMobV9jb21wb25lbnRzKSk7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiB7IDAsIDAsIDAsIDAgfTsKLX0KLQotYm9vbCBFeHRlbmRlZENvbG9yOjpp
c1doaXRlKCkgY29uc3QKLXsKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb21wb25l
bnRzKCk7Ci0gICAgcmV0dXJuIGMxID09IDEgJiYgYzIgPT0gMSAmJiBjMyA9PSAxICYmIGFscGhh
ID09IDE7Ci19Ci0KLWJvb2wgRXh0ZW5kZWRDb2xvcjo6aXNCbGFjaygpIGNvbnN0Ci17Ci0gICAg
YXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29tcG9uZW50cygpOwotICAgIHJldHVybiAhYzEg
JiYgIWMyICYmICFjMyAmJiBhbHBoYSA9PSAxOwotfQotCi1Db2xvciBtYWtlRXh0ZW5kZWRDb2xv
cihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlKQotewotICAgIHJldHVybiBFeHRlbmRlZENvbG9yOjpjcmVhdGUoYzEsIGMyLCBj
MywgYWxwaGEsIGNvbG9yU3BhY2UpOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCShyZXZpc2lvbiAyNjQyNjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDUxICsyNiwyOCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJD
b2xvckNvbXBvbmVudHMuaCIKKyNpbmNsdWRlICJDb2xvckNvbnZlcnNpb24uaCIKICNpbmNsdWRl
ICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgotI2luY2x1ZGUgIkNvbG9y
VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ29sb3I7Ci10ZW1wbGF0ZTx0
eXBlbmFtZT4gc3RydWN0IFNSR0JBOwotCiBjbGFzcyBFeHRlbmRlZENvbG9yIDogcHVibGljIFJl
ZkNvdW50ZWQ8RXh0ZW5kZWRDb2xvcj4gewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBSZWY8RXh0ZW5kZWRDb2xvcj4gY3JlYXRlKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQg
YzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlKTsKLQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZT4gc3RhdGljIFJlZjxFeHRlbmRlZENvbG9yPiBjcmVhdGUoY29uc3QgQ29sb3JUeXBl
Jik7CisgICAgc3RhdGljIFJlZjxFeHRlbmRlZENvbG9yPiBjcmVhdGUoQ29sb3JDb21wb25lbnRz
PGZsb2F0PiwgQ29sb3JTcGFjZSk7CisgICAgCiAgICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJl
dHVybiBtX2NvbXBvbmVudHNbM107IH0KIAogICAgIGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9h
dD4mIGNvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvbmVudHM7IH0KICAgICBDb2xv
clNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yU3BhY2U7IH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKLQotICAgIFJlZjxFeHRlbmRl
ZENvbG9yPiBjb2xvcldpdGhBbHBoYShmbG9hdCkgY29uc3Q7Ci0gICAgUmVmPEV4dGVuZGVkQ29s
b3I+IGludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0OwotCi0gICAgYm9vbCBpc1do
aXRlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0JsYWNrKCkgY29uc3Q7Ci0KLSAgICAvLyBUaGlzIHdp
bGwgY29udmVydCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBpbnRvIHNSR0IuCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIFNSR0JBPFQ+IHRvU1JHQkFMb3NzeSgpIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikK
LSAgICAgICAgICAgIHJldHVybiB0b1NSR0JBRmxvYXRDb21wb25lbnRzTG9zc3koKTsKLSAgICAg
ICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIHVpbnQ4X3Q+KQotICAgICAg
ICAgICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkFGbG9hdENvbXBvbmVu
dHNMb3NzeSgpKTsKLSAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gZGVjbHR5
cGUoYXV0bykgY2FsbE9uVW5kZXJseWluZ1R5cGUoRnVuY3RvciYmKSBjb25zdDsKIAogcHJpdmF0
ZToKLSAgICBFeHRlbmRlZENvbG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0
IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCi0gICAgICAgIDogbV9jb21wb25lbnRzKGMx
LCBjMiwgYzMsIGFscGhhKQotICAgICAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQotICAg
IHsKLSAgICB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQUZsb2F0
Q29tcG9uZW50c0xvc3N5KCkgY29uc3Q7CisgICAgRXh0ZW5kZWRDb2xvcihDb2xvckNvbXBvbmVu
dHM8ZmxvYXQ+LCBDb2xvclNwYWNlKTsKIAogICAgIENvbG9yQ29tcG9uZW50czxmbG9hdD4gbV9j
b21wb25lbnRzOwogICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlOwpAQCAtODYsOCArNjMsMzUg
QEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBFeHRlbmRlZENvbAogICAgIHJldHVybiAh
KGEgPT0gYik7CiB9CiAKLS8vIEZJWE1FOiBJZiB0aGUgQ29sb3JTcGFjZSBpcyBzUkdCIGFuZCB0
aGUgdmFsdWVzIGNhbiBhbGwgYmUKLS8vIGNvbnZlcnRlZCBleGFjdGx5IHRvIGludGVnZXJzLCB3
ZSBzaG91bGQgbWFrZSBhIFNpbXBsZUNvbG9yLgotV0VCQ09SRV9FWFBPUlQgQ29sb3IgbWFrZUV4
dGVuZGVkQ29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjMywgZmxvYXQgYWxwaGEsIENv
bG9yU3BhY2UpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgUmVmPEV4dGVu
ZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjb25zdCBDb2xvclR5cGUmIGNvbG9yKQor
eworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEV4dGVuZGVkQ29sb3IoYXNDb2xvckNvbXBvbmVu
dHMoY29sb3IpLCBjb2xvci5jb2xvclNwYWNlKSk7Cit9CisKK2lubGluZSBSZWY8RXh0ZW5kZWRD
b2xvcj4gRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKENvbG9yQ29tcG9uZW50czxmbG9hdD4gY29tcG9u
ZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEV4dGVuZGVkQ29sb3IoY29tcG9uZW50cywgY29sb3JTcGFjZSkpOworfQorCitpbmxpbmUgRXh0
ZW5kZWRDb2xvcjo6RXh0ZW5kZWRDb2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGNvbXBvbmVu
dHMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKKyAgICA6IG1fY29tcG9uZW50cyhjb21wb25lbnRz
KQorICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+IGRlY2x0eXBlKGF1dG8pIEV4dGVuZGVkQ29sb3I6OmNhbGxPblVuZGVybHlp
bmdUeXBlKEZ1bmN0b3ImJiBmdW5jdG9yKSBjb25zdAoreworICAgIHN3aXRjaCAobV9jb2xvclNw
YWNlKSB7CisgICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgorICAgICAgICByZXR1cm4gc3RkOjpp
bnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBhc1NSR0JBKG1fY29tcG9uZW50
cykpOworICAgIGNhc2UgQ29sb3JTcGFjZTo6TGluZWFyUkdCOgorICAgICAgICByZXR1cm4gc3Rk
OjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBhc0xpbmVhclNSR0JBKG1f
Y29tcG9uZW50cykpOworICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgorICAgICAgICBy
ZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBhc0Rpc3Bs
YXlQMyhtX2NvbXBvbmVudHMpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBh
c1NSR0JBKG1fY29tcG9uZW50cykpOworfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAJKHJldmlzaW9uIDI2NDI2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ29s
b3I6OkNvbG9yKGNvbnN0IEdka1JHQkEmIGNvbG9yKQorICAgIDogQ29sb3IoY29udmVydFRvQ29t
cG9uZW50Qnl0ZXMoU1JHQkEgeyBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3IucmVkKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGNvbG9yLmdyZWVuKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmJsdWUp
LCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3IuYWxwaGEpIH0pKQogewotICAgIHNldElubGluZUNv
bG9yKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNv
bG9yLnJlZCksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5ncmVlbiksIHN0YXRpY19jYXN0PGZs
b2F0Pihjb2xvci5ibHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmFscGhhKSB9KSk7CiB9
CiAKIENvbG9yOjpvcGVyYXRvciBHZGtSR0JBKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAJKHJl
dmlzaW9uIDI2NDI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9D
b2xvckRpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsOCBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBDb2xvcjo6Q29sb3IoRDJEMV9DT0xPUl9GIGNvbG9yKQorICAgIDog
Q29sb3IoY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JHQkEgeyBjb2xvci5yLCBjb2xvci5nLCBj
b2xvci5iLCBjb2xvci5hIH0pKQogewotICAgIHNldElubGluZUNvbG9yKGNvbnZlcnRUb0NvbXBv
bmVudEJ5dGVzKFNSR0JBIHsgY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSB9KSk7
CiB9CiAKIENvbG9yOjpvcGVyYXRvciBEMkQxX0NPTE9SX0YoKSBjb25zdApJbmRleDogVG9vbHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjY0Mjcw
KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MjAtMDctMTEgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlZHVj
ZSBzdXJmYWNlIGFyZWEgb2YgdGhlIEV4dGVuZGVkQ29sb3IgY2xhc3MgdG8gYSBiYXJlIG1pbmlt
dW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDIw
NAorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHA6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6Om1ha2VDb2xvcik6
CisgICAgICAgIFVwZGF0ZSB1c2luZyBuZXcgQ29sb3IgY29uc3RydWN0b3IgZm9yIGV4dGVuZGVk
IGNvbG9ycy4KKwogMjAyMC0wNy0xMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAK
ICAgICAgICAgTWFrZSBoYXNoZXIgd29yayB3aXRoIHR1cGxlLWxpa2UgY2xhc3NlcwpJbmRleDog
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVk
Q29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2NDI2OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw3ICszNyw3IEBAIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogVEVTVChFeHRlbmRlZENv
bG9yLCBDb25zdHJ1Y3RvcikKIHsKLSAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEu
MCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICBDb2xvciBj
MSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICBFWFBF
Q1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0g
YzEuYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKTsKQEAgLTUyLDcgKzUyLDcgQEAgVEVTVChFeHRl
bmRlZENvbG9yLCBDb25zdHJ1Y3RvcikKIAogVEVTVChFeHRlbmRlZENvbG9yLCBDb3B5Q29uc3Ry
dWN0b3IpCiB7Ci0gICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4y
NSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgQ29sb3IgYzEgeyBEaXNwbGF5
UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgRVhQRUNUX1RSVUUoYzEu
aXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIGMyKGMxKTsKQEAgLTcwLDcgKzcwLDcgQEAgVEVT
VChFeHRlbmRlZENvbG9yLCBDb3B5Q29uc3RydWN0b3IpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwg
QXNzaWdubWVudCkKIHsKLSAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41
LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICBDb2xvciBjMSB7IERp
c3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICBFWFBFQ1RfVFJV
RShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IgYzIgPSBjMTsKQEAgLTg5LDIwICs4OSwy
MCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEFzc2lnbm1lbnQpCiBURVNUKEV4dGVuZGVkQ29sb3Is
IEVxdWFsaXR5KQogewogICAgIHsKLSAgICAgICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xv
cigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgICAg
IENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9Owog
ICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCi0gICAgICAgIENvbG9yIGMy
IHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlz
cGxheVAzKSB9OworICAgICAgICBDb2xvciBjMiB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAu
NSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsK
IAogICAgICAgICBFWFBFQ1RfRVEoYzEsIGMyKTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIENv
bG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFj
ZTo6RGlzcGxheVAzKSB9OworICAgICAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAx
LjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRl
ZCgpKTsKIAotICAgICAgICBDb2xvciBjMiB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAw
LjI1LCAxLjAsIENvbG9yU3BhY2U6OlNSR0IpIH07CisgICAgICAgIENvbG9yIGMyIHsgU1JHQkE8
ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgICAgIEVYUEVDVF9UUlVFKGMx
LmlzRXh0ZW5kZWQoKSk7CiAKICAgICAgICAgRVhQRUNUX05FKGMxLCBjMik7CkBAIC0xMTIsNyAr
MTEyLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBFcXVhbGl0eSkKICAgICBpbnQgZyA9IDEyODsK
ICAgICBpbnQgYiA9IDYzOwogICAgIGludCBhID0gMTI3OwotICAgIENvbG9yIHJnYjEgeyBtYWtl
RXh0ZW5kZWRDb2xvcihyIC8gMjU1LjAsIGcgLyAyNTUuMCwgYiAvIDI1NS4wLCBhIC8gMjU1LjAs
IENvbG9yU3BhY2U6OlNSR0IpIH07CisgICAgQ29sb3IgcmdiMSB7IFNSR0JBPGZsb2F0PiB7IHIg
LyAyNTUuMGYsIGcgLyAyNTUuMGYsIGIgLyAyNTUuMGYsIGEgLyAyNTUuMGYgfSB9OwogICAgIENv
bG9yIHJnYjIgPSBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgYSk7CiAgICAgRVhQRUNUX05FKHJn
YjEsIHJnYjIpOwogICAgIEVYUEVDVF9ORShyZ2IyLCByZ2IxKTsKQEAgLTEyMSwyMCArMTIxLDIw
IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgRXF1YWxpdHkpCiBURVNUKEV4dGVuZGVkQ29sb3IsIEhh
c2gpCiB7CiAgICAgewotICAgICAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwg
MC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICAgICAgQ29sb3Ig
YzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgICAg
IEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKLSAgICAgICAgQ29sb3IgYzIgeyBtYWtl
RXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMp
IH07CisgICAgICAgIENvbG9yIGMyIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1
LCAxLjAgfSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAg
ICAgIEVYUEVDVF9FUShjMS5oYXNoKCksIGMyLmhhc2goKSk7CiAgICAgfQogCiAgICAgewotICAg
ICAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENv
bG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICAgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8Zmxv
YXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgICAgIEVYUEVDVF9UUlVFKGMxLmlz
RXh0ZW5kZWQoKSk7CiAKLSAgICAgICAgQ29sb3IgYzIgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAs
IDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpTUkdCKSB9OworICAgICAgICBDb2xvciBjMiB7
IFNSR0JBPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgICAgICBFWFBFQ1Rf
VFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgICAgIEVYUEVDVF9ORShjMS5oYXNoKCksIGMy
Lmhhc2goKSk7CkBAIC0xNDQsMTQgKzE0NCwxNCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEhhc2gp
CiAgICAgaW50IGcgPSAxMjg7CiAgICAgaW50IGIgPSA2MzsKICAgICBpbnQgYSA9IDEyNzsKLSAg
ICBDb2xvciByZ2IxIHsgbWFrZUV4dGVuZGVkQ29sb3IociAvIDI1NS4wLCBnIC8gMjU1LjAsIGIg
LyAyNTUuMCwgYSAvIDI1NS4wLCBDb2xvclNwYWNlOjpTUkdCKSB9OworICAgIENvbG9yIHJnYjEg
eyBTUkdCQTxmbG9hdD4geyByIC8gMjU1LjBmLCBnIC8gMjU1LjBmLCBiIC8gMjU1LjBmLCBhIC8g
MjU1LjBmIH0gfTsKICAgICBDb2xvciByZ2IyID0gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIGEp
OwogICAgIEVYUEVDVF9ORShyZ2IxLmhhc2goKSwgcmdiMi5oYXNoKCkpOwogfQogCiBURVNUKEV4
dGVuZGVkQ29sb3IsIE1vdmVDb25zdHJ1Y3RvcikKIHsKLSAgICBDb2xvciBjMSB7IG1ha2VFeHRl
bmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsK
KyAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0g
fTsKICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IgYzIoV1RG
TW92ZShjMSkpOwpAQCAtMTcyLDcgKzE3Miw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgTW92ZUNv
bnN0cnVjdG9yKQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVBc3NpZ25tZW50KQogewotICAg
IENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JT
cGFjZTo6RGlzcGxheVAzKSB9OworICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEu
MCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7
CiAKICAgICBDb2xvciBjMiA9IFdURk1vdmUoYzEpOwpAQCAtMTk0LDcgKzE5NCw4IEBAIFRFU1Qo
RXh0ZW5kZWRDb2xvciwgTW92ZUFzc2lnbm1lbnQpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgQmFz
aWNSZWZlcmVuY2VDb3VudGluZykKIHsKLSAgICBDb2xvciogYzEgPSBuZXcgQ29sb3IgeyBtYWtl
RXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMp
IH07CisgICAgQ29sb3IqIGMxID0gbmV3IENvbG9yIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwg
MC41LCAwLjI1LCAxLjAgfSB9OworICAgIAogICAgIEVYUEVDVF9UUlVFKGMxLT5pc0V4dGVuZGVk
KCkpOwogCiAgICAgQ29sb3IqIGMyID0gbmV3IENvbG9yKCpjMSk7CkBAIC0yMjAsNyArMjIxLDcg
QEAgVEVTVChFeHRlbmRlZENvbG9yLCBCYXNpY1JlZmVyZW5jZUNvdW50aQogCiBDb2xvciBtYWtl
Q29sb3IoKQogewotICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAu
MjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgIENvbG9yIGMxIHsgRGlzcGxh
eVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgIEVYUEVDVF9UUlVFKGMx
LmlzRXh0ZW5kZWQoKSk7CiAgICAgRVhQRUNUX0VRKDF1LCBjMS5hc0V4dGVuZGVkKCkucmVmQ291
bnQoKSk7CiAKQEAgLTIzOCw3ICsyMzksNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIFJldHVyblZh
bHVlcykKIAogVEVTVChFeHRlbmRlZENvbG9yLCBQM0NvbnZlcnNpb25Ub1NSR0IpCiB7Ci0gICAg
Q29sb3IgcDNDb2xvciB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAwLjc1LCBD
b2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgQ29sb3IgcDNDb2xvciB7IERpc3BsYXlQMzxm
bG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMC43NSB9IH07CiAgICAgRVhQRUNUX1RSVUUocDNDb2xv
ci5pc0V4dGVuZGVkKCkpOwogCiAgICAgYXV0byBzUkdCQUNvbG9yID0gcDNDb2xvci50b1NSR0JB
TG9zc3k8ZmxvYXQ+KCk7CkBAIC0yNTAsOSArMjUxLDEwIEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwg
UDNDb252ZXJzaW9uVG9TUkdCKQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIExpbmVhclNSR0JDb252
ZXJzaW9uVG9TUkdCKQogewotICAgIENvbG9yIGxpbmVhckNvbG9yIHsgbWFrZUV4dGVuZGVkQ29s
b3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkxpbmVhclJHQikgfTsKLSAgICBF
WFBFQ1RfVFJVRShsaW5lYXJDb2xvci5pc0V4dGVuZGVkKCkpOwotICAgIGF1dG8gc1JHQkFDb2xv
ciA9IGxpbmVhckNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBDb2xvciBsaW5lYXJT
UkdCQUNvbG9yIHsgTGluZWFyU1JHQkE8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDAuNzUgfSB9
OworICAgIEVYUEVDVF9UUlVFKGxpbmVhclNSR0JBQ29sb3IuaXNFeHRlbmRlZCgpKTsKKworICAg
IGF1dG8gc1JHQkFDb2xvciA9IGxpbmVhclNSR0JBQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0Pigp
OwogICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLnJl
ZCwgMS4wZikpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdC
QUNvbG9yLmdyZWVuLCAwLjczNTM1NjkyN2YpKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVz
c2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ibHVlLCAwLjUzNzA5ODcwNmYpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>