<?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>81941</bug_id>
          
          <creation_ts>2012-03-22 11:39:17 -0700</creation_ts>
          <short_desc>-webkit-image-set should support all the image functions WebKit supports, not just url()</short_desc>
          <delta_ts>2020-05-10 18:36:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, WebExposed</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>dstockwell</cc>
    
    <cc>eoconnor</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mjs</cc>
    
    <cc>noam</cc>
    
    <cc>pdr</cc>
    
    <cc>rbyers</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>585530</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-03-22 11:39:17 -0700</bug_when>
    <thetext>Right now -webkit-image-set only supports url(). It should support all the other image functions WebKit supports:
-webkit-*-gradient(), -webkit-canvas(), image(), -webkit-cross-fade()

&lt;rdar://problem/11084394&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605754</commentid>
    <comment_count>1</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-01-13 00:02:08 -0800</bug_when>
    <thetext>This would require:
-</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605755</commentid>
    <comment_count>2</comment_count>
      <attachid>387505</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-01-13 00:52:14 -0800</bug_when>
    <thetext>Created attachment 387505
Test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605756</commentid>
    <comment_count>3</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-01-13 00:53:43 -0800</bug_when>
    <thetext>This would require (IMO):
- Fixing the parser helpers to allow generated images inside image-set()
- Refactoring StyleImageSet out of StyleCachedImage and allow it to contain both cached and generated images</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608602</commentid>
    <comment_count>4</comment_count>
      <attachid>388193</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-01-19 12:24:05 -0800</bug_when>
    <thetext>Created attachment 388193
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608605</commentid>
    <comment_count>5</comment_count>
      <attachid>388194</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-01-19 13:49:12 -0800</bug_when>
    <thetext>Created attachment 388194
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608606</commentid>
    <comment_count>6</comment_count>
      <attachid>388193</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-01-19 13:53:42 -0800</bug_when>
    <thetext>Comment on attachment 388193
Patch

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

&gt; Source/WebCore/rendering/style/StyleMultiImage.cpp:62
&gt; +    std::tie(value, scaleFactor) = selectBestFitImage(loader.document());

Given that loader.document() can return null, and that selectBestFitImage needs the Document not to be null, I would suggest either ASSERTing that loader.document() is not null here (if for some reason that can be asserted, I am not sure it can) or null checking the document here and failing the load. In either case, the document should be passed to selectBestFitImage as a reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608607</commentid>
    <comment_count>7</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-01-19 13:58:16 -0800</bug_when>
    <thetext>(In reply to Sam Weinig from comment #6)
&gt; Comment on attachment 388193 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=388193&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/style/StyleMultiImage.cpp:62
&gt; &gt; +    std::tie(value, scaleFactor) = selectBestFitImage(loader.document());
&gt; 
&gt; Given that loader.document() can return null, and that selectBestFitImage
&gt; needs the Document not to be null, I would suggest either ASSERTing that
&gt; loader.document() is not null here (if for some reason that can be asserted,
&gt; I am not sure it can) or null checking the document here and failing the
&gt; load. In either case, the document should be passed to selectBestFitImage as
&gt; a reference.

It can be asserted there (it&apos;s asserted later anyway). Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608609</commentid>
    <comment_count>8</comment_count>
      <attachid>388196</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-01-19 14:16:16 -0800</bug_when>
    <thetext>Created attachment 388196
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608807</commentid>
    <comment_count>9</comment_count>
      <attachid>388196</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-01-20 11:32:35 -0800</bug_when>
    <thetext>Comment on attachment 388196
Patch

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

Patch looks good with quite a few improvements, not just the new features.

I have a lot of comments, almost all about coding style and idiom.

I feel like there is significant boilerplate code here and would like to see it reduced and kept to a minimum if possible. Particularly ugly to have lots of &quot;forwarding functions&quot; that just call another function of the same name on a different object, but perhaps this is inevitable.

It’s especially irritating that we have so many is&lt;CSSXXX&gt; all over the place. Maybe we should add some more virtual functions to the CSS classes?

Would good to go even further with removing includes in headers if possible.

I don’t think you should land this as-is. Many of the comments are things that are well worth changing, especially use of OptionSet.

&gt; Source/WebCore/css/CSSCursorImageValue.h:63
&gt; +    std::pair&lt;CSSValue*, float&gt; selectBestFitImage(const Document&amp;);

Four thoughts about the return value here:

1) Not sure how we choose between std::pair and std::tuple when we have a two part return value.
2) When writing similar functions myself I have often chosen a struct with names for the fields instead of a pair/tuple where you have to deduce what the names mean.
3) In modern code, I think we prefer Ref/RefPtr over raw pointer for return values. I think Ref&lt;CSSValue&gt; would be right here.
4) It is kind of sad that the only common base class for CSSImageValue and CSSImageSetValue is CSSValue. Also would be nice to document which types can be returned here. Can it be a CSSImageGeneratorValue?

Maybe (3) would lead to a change?

&gt; Source/WebCore/css/CSSImageSetValue.cpp:83
&gt; +CachedImage* CSSImageSetValue::cachedImage() const

This returns nullptr when m_selectedImageValue is a CSSImageGeneratorValue. Is that correct?

&gt; Source/WebCore/css/CSSImageSetValue.cpp:88
&gt; +    if (!m_selectedImageValue)
&gt; +        return nullptr;
&gt; +    if (is&lt;CSSImageValue&gt;(m_selectedImageValue))
&gt; +        return downcast&lt;CSSImageValue&gt;(m_selectedImageValue)-&gt;cachedImage();

The &quot;is&quot; function already does null checking and returns false if null. So there is no need fo the &quot;if (!m_selectedImageValue)&quot; if statement.

Typically I would use a &quot;*&quot; inside the downcast after doing the type check to sort of &quot;take advantage&quot; of the null check that was already done.

Could also use early exit for the nullptr return.

&gt; Source/WebCore/css/CSSImageSetValue.cpp:107
&gt; +        if (is&lt;CSSImageGeneratorValue&gt;(image.value)) {
&gt; +            m_selectedImageValue = image.value;
&gt; +            return { m_selectedImageValue, m_bestFitImageScaleFactor };
&gt; +        }

This if statement can and should be removed, as long as we also remove the assertion below. The code is exactly the same as what is done below.

&gt; Source/WebCore/css/CSSImageSetValue.cpp:131
&gt; +    size_t i = 0;
&gt; +    while (i &lt; length) {

Should use a for loop even though we can’t do the &quot;i++&quot; inside the loop. We can use &quot;i += 2&quot;. Also might be slightly safer to do the length check in a way that skips the last item if somehow the length gets to be odd, rather than reading off the end of the array, even though that’s impossible, so I wrote it as &quot;i + 1 &lt; length&quot;.

    for (size_t i = 0; i + 1 &lt; length; i += 2) {

&gt; Source/WebCore/css/CSSImageSetValue.cpp:138
&gt; +        CSSValue* imageValue = item(i);
&gt; +        Ref&lt;CSSValue&gt; resolvedValue = builderState.resolveImageStyles(*imageValue);
&gt; +        result-&gt;append(WTFMove(resolvedValue));
&gt; +        ++i;
&gt; +
&gt; +        result-&gt;append(Ref(*item(i)));
&gt; +        ++i;

I think this loop body should be rewritten to be two lines. Makes the code easier to read:

    result-&gt;append(builderState.resolveImageStyles(*itemWithoutBoundsCheck(i)));
    result-&gt;append(*itemWithoutBoundsCheck(i + 1));

Would be even prettier if it called item, but since we’re looping seems we should be calling itemWithoutBoundsCheck.

&gt; Source/WebCore/css/CSSImageSetValue.cpp:178
&gt; -    if (!m_cachedImage)
&gt; +    if (!m_selectedImageValue)
&gt;          return false;
&gt; -    return handler(*m_cachedImage);
&gt; +    return m_selectedImageValue-&gt;traverseSubresources(handler);

I think this kind of thing looks really good and is really easy to read with &amp;&amp; instead of an if statement.

    return m_selectedImageValue &amp;&amp; m_selectedImageValue-&gt;traverseSubresources(handler);

&gt; Source/WebCore/css/CSSImageSetValue.h:49
&gt; -    static Ref&lt;CSSImageSetValue&gt; create(LoadedFromOpaqueSource loadedFromOpaqueSource)
&gt; +    static Ref&lt;CSSImageSetValue&gt; create()
&gt;      {
&gt; -        return adoptRef(*new CSSImageSetValue(loadedFromOpaqueSource));
&gt; +        return adoptRef(*new CSSImageSetValue());
&gt;      }

These kinds of create functions really don’t benefit from being inlined in the header; that just ends up putting code at each call site that we’d rather share, and we still end up with a function call at each site, to the constructor.

Instead we should put these create functions in the .cpp files and let the constructor be inlined. With modern compilers we get this without even explicitly marking the constructor &quot;inline&quot;; that is only really needed in headers to avoid the &quot;one definition rule&quot;. Just moving the function to the .cpp file does everything we’d want.

Also, in WebKit coding style we don’t put the empty parentheses after the type name in a case like this. Just new CSSImageSetValue without the ().

&gt; Source/WebCore/css/CSSImageSetValue.h:52
&gt; +    std::pair&lt;CSSValue*, float&gt;  selectBestFitImage(const Document&amp;);

We should consider the ImageWithScale type as the return type here instead of using a std::pair. See the comments about std::pair/tuple/struct above and the struct just below. Also, there are two spaces between the return type and the function name (in this new code and the original code too). Might need to move the structure elsewhere where we can share it with other classes more easily?

&gt; Source/WebCore/css/CSSImageSetValue.h:58
&gt; +        CSSValue* value;

We should consider Ref&lt;CSSValue&gt; or RefPtr&lt;CSSValue&gt; for this. In modern code we want to take the performance risk of not using raw pointers to reduce the security risk of a lifetime bug.

&gt; Source/WebCore/css/CSSImageSetValue.h:72
&gt; -    explicit CSSImageSetValue(LoadedFromOpaqueSource);
&gt; +    explicit CSSImageSetValue();

Typically we don’t need the explicit keyword any more now that it’s not a single-argument constructor. Although I think it might have some meaning in modern C++. Not sure.

&gt; Source/WebCore/css/CSSImageSetValue.h:77
&gt; +    CSSValue* m_selectedImageValue { nullptr };

We should consider Ref&lt;CSSValue&gt;. As long as it doesn’t create a reference cycle, i think we want to value security over performance here too.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:1722
&gt; +        AtomString uri = consumeUrlAsStringView(range).toAtomString();
&gt; +        if (!uri.isNull())
&gt; +            return CSSImageValue::create(completeURL(context, uri), context.isContentOpaque ? LoadedFromOpaqueSource::Yes : LoadedFromOpaqueSource::No);

There are some wasteful things about how this (moved, not new) code uses AtomString:

1) No need to convert something to an AtomString before checking it for null. Could just move the &quot;toAtomString&quot; down to the completeURL function.
2) Wasteful for relative URLs to convert them to AtomString then call completeURL on them. If our goal is to save memory, then we’d like to convert to AtomString in the process of doing completeURL, so that it’s the resulting completed URL that is shared with other instances of the same URL.
3) Unfortunate that calling completeURL requires that we make a String or AtomString at all. We should be able to make a completed URL out of a StringView. However, getting this exactly right is tricky. If we just change the argument to StringView then we introduce problems in the case where the URL string is used untouched where we create a new String even if one already exists. Plus we would need a version that makes an AtomString if we want to avoid wasting time in the case where we’d create and destroying a new String that happens to be the same as an existing AtomString.

Could fix some or all of this. But I suppose this can be done later.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.h:92
&gt; +enum AllowedImageTypes {

This should be enum class, not enum.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.h:93
&gt; +    Forbid = 0,

I don’t think we need this name for &quot;no type at all&quot;; not really compatible with OptionSet. If we want a named constant for it we can write something like this:

    constexpr OptionSet&lt;AllowedImageType&gt; forbidAllImages = { };
    constexpr OptionSet&lt;AllowedImageType&gt; noImageTypesAllowed = { };

But I think it’s unlikely to come up.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.h:94
&gt; +    UrlFunction = 1,

WebKit coding style calls this URLFunction, not UrlFunction.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.h:95
&gt; +    RawStringAsUrl = 2,

WebKit coding style calls this RawStringAsURL, not RawStringAsUrl.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.h:100
&gt; +RefPtr&lt;CSSValue&gt; consumeImage(CSSParserTokenRange&amp;, CSSParserContext, unsigned allowedImageTypes = AllowedImageTypes::UrlFunction | AllowedImageTypes::ImageSet | AllowedImageTypes::GeneratedImage);

New occurrences of idioms like this one in WebKit code should use OptionSet&lt;AllowedImageTypes&gt;, which is superior to a numeric type with no explicit reference to the enum type. As part of that, we’d name the enum class &quot;AllowedImageType&quot; singular, since it’s the OptionSet, not the enum itself, that can hold multiple.

&gt; Source/WebCore/page/animation/CSSPropertyAnimation.cpp:339
&gt; +    ASSERT(to);
&gt; +    ASSERT(from);

What guarantees these assertions are true here? Is there any chance a StyleImage might not have a selectedImage? If not, then why is the function returning a pointer rather than a reference?

&gt; Source/WebCore/rendering/style/StyleCachedImage.h:32
&gt;  class CSSValue;
&gt; +class CSSImageValue;

Coding style says we sort these alphabetically, so CSSImageValue should come first.

&gt; Source/WebCore/rendering/style/StyleCachedImage.h:39
&gt; +    static Ref&lt;StyleCachedImage&gt; create(CSSImageValue&amp; cssValue, float scaleFactor = 1) { return adoptRef(*new StyleCachedImage(cssValue, scaleFactor)); }

Seems a bit dangerous to default the scaleFactor to 1. What callers need to call this without a scale factor?

Also, should not be inlined (see explanation above), should instead be in the .cpp file.

&gt; Source/WebCore/rendering/style/StyleCursorImage.cpp:5
&gt; + * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
&gt; + *           (C) 2000 Antti Koivisto (koivisto@kde.org)
&gt; + *           (C) 2000 Dirk Mueller (mueller@kde.org)
&gt; + * Copyright (C) 2003, 2005-2008, 2016 Apple Inc. All rights reserved.

Surprised we need so many copyrights for so little code. Could you check to find out where this code came from to minimize the number of different names?

&gt; Source/WebCore/rendering/style/StyleCursorImage.cpp:39
&gt; +    if (!is&lt;StyleCursorImage&gt;(other))
&gt; +        return false;
&gt; +
&gt; +    return equals(downcast&lt;StyleCursorImage&gt;(other));

Works nicely as an &amp;&amp;.

    return is&lt;StyleCursorImage&gt;(other) &amp;&amp; equals(downcast&lt;StyleCursorImage&gt;(other));

&gt; Source/WebCore/rendering/style/StyleCursorImage.h:5
&gt; + * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
&gt; + *           (C) 2000 Antti Koivisto (koivisto@kde.org)
&gt; + *           (C) 2000 Dirk Mueller (mueller@kde.org)
&gt; + * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.

Surprised we need so many copyrights for so little code. Could you check to find out where this code came from to minimize the number of different names?

&gt; Source/WebCore/rendering/style/StyleCursorImage.h:26
&gt; +#include &quot;CachedResourceHandle.h&quot;

No need for this include. I see nothing below that takes advantage of it.

&gt; Source/WebCore/rendering/style/StyleCursorImage.h:33
&gt; +class CachedImage;
&gt; +class Document;

No need for these forward declarations. StyleMultiImage already needs these.

&gt; Source/WebCore/rendering/style/StyleCursorImage.h:38
&gt; +    static Ref&lt;StyleCursorImage&gt; create(CSSCursorImageValue&amp; cssValue) { return adoptRef(*new StyleCursorImage(cssValue)); }

This shouldn’t be inlined in the header. (See rationale above.)

&gt; Source/WebCore/rendering/style/StyleCursorImage.h:42
&gt; +protected:

Makes no sense to have things &quot;protected&quot; rather than &quot;private&quot; in a class that&apos;s final. These should all be private.

&gt; Source/WebCore/rendering/style/StyleCursorImage.h:48
&gt; +    StyleCursorImage(CSSCursorImageValue&amp;);

Should mark this &quot;explicit&quot;.

&gt; Source/WebCore/rendering/style/StyleImageSet.cpp:6
&gt; + * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
&gt; + *           (C) 2000 Antti Koivisto (koivisto@kde.org)
&gt; + *           (C) 2000 Dirk Mueller (mueller@kde.org)
&gt; + * Copyright (C) 2003, 2005-2008, 2016 Apple Inc. All rights reserved.
&gt; + * Copyright (C) 2020 Noam Rosenthal (noam@webkit.org)

Surprised we need so many copyrights. Could you check to find out where the code being moved came from to minimize the number of different names?

&gt; Source/WebCore/rendering/style/StyleImageSet.cpp:32
&gt; +namespace WebCore {
&gt; +
&gt; +

Double blank line here. Should only be a single.

&gt; Source/WebCore/rendering/style/StyleImageSet.cpp:44
&gt; +    if (!is&lt;StyleImageSet&gt;(other))
&gt; +        return false;
&gt; +
&gt; +    return equals(downcast&lt;StyleImageSet&gt;(other));

Looks good with &amp;&amp;.

&gt; Source/WebCore/rendering/style/StyleImageSet.cpp:46
&gt; +}
&gt; +StyleImageSet::~StyleImageSet() = default;

Missing blank line here between function bodies.

&gt; Source/WebCore/rendering/style/StyleImageSet.h:6
&gt; +* Copyright (C) 2000 Lars Knoll (knoll@kde.org)
&gt; +*           (C) 2000 Antti Koivisto (koivisto@kde.org)
&gt; +*           (C) 2000 Dirk Mueller (mueller@kde.org)
&gt; +* Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
&gt; +* Copyright (C) 2020 Noam Rosenthal (noam@webkit.org)

Surprised we need so many copyrights. Could you check to find out where the code being moved came from to minimize the number of different names?

&gt; Source/WebCore/rendering/style/StyleImageSet.h:31
&gt; +class CSSValue;

Not needed.

&gt; Source/WebCore/rendering/style/StyleImageSet.h:33
&gt; +class Document;

Not needed.

&gt; Source/WebCore/rendering/style/StyleImageSet.h:38
&gt; +    static Ref&lt;StyleImageSet&gt; create(CSSImageSetValue&amp; cssValue) { return adoptRef(*new StyleImageSet(cssValue)); }

Don’t inline.

&gt; Source/WebCore/rendering/style/StyleImageSet.h:41
&gt; +    Ref&lt;CSSValue&gt; cssValue() const final;

Can this be private?

&gt; Source/WebCore/rendering/style/StyleImageSet.h:43
&gt; +protected:

Should be private, not protected.

&gt; Source/WebCore/rendering/style/StyleImageSet.h:47
&gt; +    StyleImageSet(CSSImageSetValue&amp;);

Need explicit.

&gt; Source/WebCore/rendering/style/StyleMultiImage.cpp:6
&gt; + * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
&gt; + *           (C) 2000 Antti Koivisto (koivisto@kde.org)
&gt; + *           (C) 2000 Dirk Mueller (mueller@kde.org)
&gt; + * Copyright (C) 2003, 2005-2008, 2016 Apple Inc. All rights reserved.
&gt; + * Copyright (C) 2020 Noam Rosenthal (noam@webkit.org)

Surprised we need so many copyrights. Could you check to find out where the code being moved came from to minimize the number of different names?

&gt; Source/WebCore/rendering/style/StyleMultiImage.cpp:42
&gt; +StyleMultiImage::StyleMultiImage()
&gt; +{
&gt; +}

Use &quot;= default&quot;.

&gt; Source/WebCore/rendering/style/StyleMultiImage.cpp:48
&gt; +    auto&amp; otherCached = downcast&lt;StyleMultiImage&gt;(other);

What is this downcast for? Surprised it even compiles. This is already a StyleMultiImage.

&gt; Source/WebCore/rendering/style/StyleMultiImage.cpp:50
&gt; +    if (&amp;otherCached == this)
&gt; +        return true;

Don’t think we need this special case.

&gt; Source/WebCore/rendering/style/StyleMultiImage.cpp:53
&gt; +    if (!m_isPending &amp;&amp; !otherCached.m_isPending &amp;&amp; m_selectedImage.get() == otherCached.m_selectedImage.get())
&gt; +        return true;
&gt; +    return false;

No need for if (x) return true; return false; Just return x.

&gt; Source/WebCore/rendering/style/StyleMultiImage.cpp:63
&gt; +    CSSValue* value = nullptr;
&gt; +    float scaleFactor = 1;

No reason to initialize these.

&gt; Source/WebCore/rendering/style/StyleMultiImage.cpp:97
&gt; +    if (!m_selectedImage)
&gt; +        return false;
&gt; +    return m_selectedImage-&gt;canRender(renderer, multiplier);

Nice with &amp;&amp;

&gt; Source/WebCore/rendering/style/StyleMultiImage.cpp:109
&gt; +    if (!m_selectedImage)
&gt; +        return false;
&gt; +    return m_selectedImage-&gt;isLoaded();

Nice with &amp;&amp;

&gt; Source/WebCore/rendering/style/StyleMultiImage.cpp:116
&gt; +    if (!m_selectedImage)
&gt; +        return false;
&gt; +    return m_selectedImage-&gt;errorOccurred();

Nice with &amp;&amp;

&gt; Source/WebCore/rendering/style/StyleMultiImage.cpp:130
&gt; +    if (!m_selectedImage)
&gt; +        return false;
&gt; +    return m_selectedImage-&gt;imageHasRelativeWidth();

Nice with &amp;&amp;

&gt; Source/WebCore/rendering/style/StyleMultiImage.cpp:137
&gt; +    if (!m_selectedImage)
&gt; +        return false;
&gt; +    return m_selectedImage-&gt;imageHasRelativeHeight();

Nice with &amp;&amp;

&gt; Source/WebCore/rendering/style/StyleMultiImage.cpp:151
&gt; +    if (!m_selectedImage)
&gt; +        return false;
&gt; +    return m_selectedImage-&gt;usesImageContainerSize();

Nice with &amp;&amp;

&gt; Source/WebCore/rendering/style/StyleMultiImage.h:6
&gt; +* Copyright (C) 2000 Lars Knoll (knoll@kde.org)
&gt; +*           (C) 2000 Antti Koivisto (koivisto@kde.org)
&gt; +*           (C) 2000 Dirk Mueller (mueller@kde.org)
&gt; +* Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
&gt; +* Copyright (C) 2020 Noam Rosenthal (noam@webkit.org)

Surprised we need so many copyrights. Could you check to find out where the code being moved came from to minimize the number of different names?

&gt; Source/WebCore/rendering/style/StyleMultiImage.h:27
&gt; +#include &quot;CachedResourceHandle.h&quot;

Why is this include here? I think it’s not needed.

&gt; Source/WebCore/rendering/style/StyleMultiImage.h:35
&gt; +class CSSValue;
&gt; +class CSSImageSetValue;
&gt; +class CachedImage;
&gt; +class Document;

These are not needed. All are already declared in StyleImage.h.

&gt; Source/WebCore/rendering/style/StyleMultiImage.h:63
&gt; +    CachedImage* cachedImage() const final;
&gt; +
&gt; +    WrappedImagePtr data() const final;
&gt; +
&gt; +    bool canRender(const RenderElement*, float multiplier) const final;
&gt; +    bool isPending() const final;
&gt; +    void load(CachedResourceLoader&amp;, const ResourceLoaderOptions&amp;) final;
&gt; +    bool isLoaded() const final;
&gt; +    bool errorOccurred() const final;
&gt; +    FloatSize imageSize(const RenderElement*, float multiplier) const final;
&gt; +    bool imageHasRelativeWidth() const final;
&gt; +    bool imageHasRelativeHeight() const final;
&gt; +    void computeIntrinsicDimensions(const RenderElement*, Length&amp; intrinsicWidth, Length&amp; intrinsicHeight, FloatSize&amp; intrinsicRatio) final;
&gt; +    bool usesImageContainerSize() const final;
&gt; +    void setContainerContextForRenderer(const RenderElement&amp;, const FloatSize&amp;, float);
&gt; +    void addClient(RenderElement*) final;
&gt; +    void removeClient(RenderElement*) final;
&gt; +    RefPtr&lt;Image&gt; image(RenderElement*, const FloatSize&amp;) const final;
&gt; +    float imageScaleFactor() const final;
&gt; +    bool knownToBeOpaque(const RenderElement*) const final;
&gt; +    const StyleImage* selectedImage() const final { return m_selectedImage.get(); }
&gt; +    StyleImage* selectedImage() final { return m_selectedImage.get(); }

Can these be protected or private instead? We want things to be &quot;as private as possible&quot;.

&gt; Source/WebCore/rendering/style/StyleMultiImage.h:68
&gt; +    virtual std::pair&lt;CSSValue*, float&gt; selectBestFitImage(const Document&amp;) const = 0;

Given usage, should be private, not protected. No need to have a function visible to override it, just to call it. Please check the same for others.

&gt; Source/WebCore/style/StyleBuilderCustom.h:-1327
&gt; -        } else if (is&lt;CSSImageSetValue&gt;(item)) {

Seems unnecessary to remove the else; I would have added a little more else myself. But OK either way, I guess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608827</commentid>
    <comment_count>10</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-01-20 12:32:32 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #9)
&gt; Comment on attachment 388196 [details]

Thanks for the comments!
Regarding the copyright, the new files are extracted from StyleCachedImage.cpp/h, so I kept the same copyright headers. 

I will apply the rest of the comments of course before landing. Those are things that I was contemplating while writing this patch and it gives me a good direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608829</commentid>
    <comment_count>11</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-01-20 12:36:53 -0800</bug_when>
    <thetext>&gt; Source/WebCore/rendering/style/StyleCachedImage.h:39
&gt; +    static Ref&lt;StyleCachedImage&gt; create(CSSImageValue&amp; cssValue, float scaleFactor = 1) { return adoptRef(*new StyleCachedImage(cssValue, scaleFactor)); }


&gt; Seems a bit dangerous to default the scaleFactor to 1. What callers need to call &gt; this without a scale factor?

Most StyleCachedImages should be with scale factor 1 - the only time when they don&apos;t if they&apos;re created by a StyleImageSet. I prefer to leave this as is, but open to suggestions...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608832</commentid>
    <comment_count>12</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-01-20 12:41:02 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebCore/css/CSSImageSetValue.cpp:83
&gt; &gt; +CachedImage* CSSImageSetValue::cachedImage() const


&gt; This returns nullptr when m_selectedImageValue is a CSSImageGeneratorValue. Is that correct?

Correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608863</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-01-20 14:31:20 -0800</bug_when>
    <thetext>(In reply to Noam Rosenthal from comment #10)
&gt; Regarding the copyright, the new files are extracted from
&gt; StyleCachedImage.cpp/h, so I kept the same copyright headers. 

Maybe not worth doing, but you can do more research to see where the code came from. Often there are too many copyright headers when someone takes a few lines from a huge file that many people contributed to. With a little research you can figure out who actually contributed the code being excerpted.

But I suppose that’s too big a project to be worthwhile just to cut them down.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608875</commentid>
    <comment_count>14</comment_count>
      <attachid>388263</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-01-20 15:49:59 -0800</bug_when>
    <thetext>Created attachment 388263
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608876</commentid>
    <comment_count>15</comment_count>
      <attachid>388263</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-01-20 15:50:35 -0800</bug_when>
    <thetext>Comment on attachment 388263
Patch

Changed based on Darin&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608879</commentid>
    <comment_count>16</comment_count>
      <attachid>388264</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-01-20 16:12:18 -0800</bug_when>
    <thetext>Created attachment 388264
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608882</commentid>
    <comment_count>17</comment_count>
      <attachid>388264</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-01-20 16:26:00 -0800</bug_when>
    <thetext>Comment on attachment 388264
Patch

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

&gt; Source/WebCore/css/CSSCursorImageValue.h:33
&gt; +struct ImageWithScale;

We don’t sort the struct in with the classes. We use a separate paragraph for structs afterward.

&gt; Source/WebCore/css/CSSImageSetValue.cpp:91
&gt; +    if (!m_selectedImageValue)
&gt; +        return nullptr;

No need for this if statement since is&lt;&gt; handles null. I mentioned that in the first patch, but it was combined with another comment.

&gt; Source/WebCore/css/CSSImageSetValue.cpp:127
&gt; +    for (size_t i = 0; i &lt; length; i += 2) {

I suggest &quot;i + 1 &lt; length&quot; here.

&gt; Source/WebCore/css/CSSImageSetValue.cpp:129
&gt; +        CSSValue* imageValue = itemWithoutBoundsCheck(i);
&gt; +        result-&gt;append(builderState.resolveImageStyles(*imageValue));

Reads better without the local variable:

    result-&gt;append(builderState.resolveImageStyles(*itemWithoutBoundsCheck(i)));

I know this gets rid of the &quot;imageValue&quot; variable name, but I think it’s still better. Maybe you disagree? If we do keep a local variable I suggest a reference rather than a pointer.

&gt; Source/WebCore/css/CSSImageSetValue.h:39
&gt;  class Document;
&gt; +class CSSImageValue;

These aren’t sorted properly. CSSImageValue would come before Document.

&gt; Source/WebCore/css/CSSImageSetValue.h:50
&gt; +
&gt;  

Double blank line here, we only use one.

&gt; Source/WebCore/css/CSSImageSetValue.h:77
&gt;      bool m_accessedBestFitImage { false };

I think the code would read better if m_bestFitImage was an Optional&lt;ImageWithScale&gt; instead of having a separate m_accessedBestFitImage boolean. Can do that in a subsequent patch, I suppose.

&gt; Source/WebCore/page/animation/CSSPropertyAnimation.cpp:337
&gt; +    from = from-&gt;selectedImage();
&gt; +    to = to-&gt;selectedImage();

I’m glad you removed the assertions, but I had intended that we return if they are nullptr, not leave the assumption that they are non-null without assertions.

&gt; Source/WebCore/rendering/style/StyleMultiImage.cpp:113
&gt; +    if (!m_selectedImage)
&gt; +        return false;
&gt; +    return m_selectedImage-&gt;imageHasRelativeWidth();

Another place we could use &amp;&amp;.

&gt; Source/WebCore/style/StyleBuilderState.cpp:90
&gt; +        downcast&lt;CSSFilterImageValue&gt;(value).createFilterOperations(*this);

There is no &quot;return&quot; here. This should result in a failing test. I think this shows we don’t have enough test coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608883</commentid>
    <comment_count>18</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-01-20 16:34:55 -0800</bug_when>
    <thetext>
&gt; 
&gt; &gt; Source/WebCore/style/StyleBuilderState.cpp:90
&gt; &gt; +        downcast&lt;CSSFilterImageValue&gt;(value).createFilterOperations(*this);
&gt; 
&gt; There is no &quot;return&quot; here. This should result in a failing test. I think
&gt; this shows we don’t have enough test coverage.

No, this is ok and covered. It returns at line 95. createFilterOperations changes the CSS value without returning a new ref (this is previous behavior, copied from a different place).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608884</commentid>
    <comment_count>19</comment_count>
      <attachid>388264</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-01-20 16:38:28 -0800</bug_when>
    <thetext>Comment on attachment 388264
Patch

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

&gt;&gt; Source/WebCore/style/StyleBuilderState.cpp:90
&gt;&gt; +        downcast&lt;CSSFilterImageValue&gt;(value).createFilterOperations(*this);
&gt; 
&gt; There is no &quot;return&quot; here. This should result in a failing test. I think this shows we don’t have enough test coverage.

You said this is intentional and was copied and pasted.

I think this is really subtle. Probably should put the ImageSet case first, and add a comment saying that doing this side effect and not returning is intentional. But also I think the function name &quot;resolve image styles&quot; does not imply that it’s got responsibilities other than resolving the styles; that there will be a side effect in the case of filter images.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608885</commentid>
    <comment_count>20</comment_count>
      <attachid>388265</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-01-20 16:40:38 -0800</bug_when>
    <thetext>Created attachment 388265
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608886</commentid>
    <comment_count>21</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-01-20 16:44:48 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #19)
&gt; Comment on attachment 388264 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=388264&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/style/StyleBuilderState.cpp:90
&gt; &gt;&gt; +        downcast&lt;CSSFilterImageValue&gt;(value).createFilterOperations(*this);
&gt; &gt; 
&gt; &gt; There is no &quot;return&quot; here. This should result in a failing test. I think this shows we don’t have enough test coverage.
&gt; 
&gt; You said this is intentional and was copied and pasted.
&gt; 
&gt; I think this is really subtle. Probably should put the ImageSet case first,
&gt; and add a comment saying that doing this side effect and not returning is
&gt; intentional. But also I think the function name &quot;resolve image styles&quot; does
&gt; not imply that it’s got responsibilities other than resolving the styles;
&gt; that there will be a side effect in the case of filter images.

The effect is indeed resolving the image style - for filter images. It&apos;s not a side effect... Except in the filter case it&apos;s a void function that doesn&apos;t create a new reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608887</commentid>
    <comment_count>22</comment_count>
      <attachid>388266</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-01-20 16:49:25 -0800</bug_when>
    <thetext>Created attachment 388266
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608889</commentid>
    <comment_count>23</comment_count>
      <attachid>388267</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-01-20 16:53:14 -0800</bug_when>
    <thetext>Created attachment 388267
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608890</commentid>
    <comment_count>24</comment_count>
      <attachid>388266</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-01-20 16:59:16 -0800</bug_when>
    <thetext>Comment on attachment 388266
Patch

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

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.h:93
&gt; +enum class AllowedImageTypes : uint8_t {

We should rename the enum to be singular, AllowedImageType, since that’s the right way for OptionSet. The type for a single one is AllowedImageType. For the allowed image types, it would be OptionSet&lt;AllowedImageType&gt;.

Rename can be done after landing if you don’t have a chance beforehand.

&gt; Source/WebCore/rendering/style/StyleCachedImage.h:39
&gt; +    static Ref&lt;StyleCachedImage&gt; create(CSSImageValue&amp; cssValue, float scaleFactor = 1) { return adoptRef(*new StyleCachedImage(cssValue, scaleFactor)); }

This function should be moved out of the header into the .cpp file.

&gt; Source/WebCore/rendering/style/StyleMultiImage.cpp:43
&gt; +    auto&amp; otherCached = downcast&lt;StyleMultiImage&gt;(other);

I don’t understand why we are casting a StyleMultiImage to another StyleMultiImage. The downcast macros are suppose to make this not compile, since it’s an unnecessary cast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608946</commentid>
    <comment_count>25</comment_count>
      <attachid>388283</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-01-21 00:06:42 -0800</bug_when>
    <thetext>Created attachment 388283
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608947</commentid>
    <comment_count>26</comment_count>
      <attachid>388283</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-01-21 00:09:16 -0800</bug_when>
    <thetext>Comment on attachment 388283
Patch

I think it&apos;s ready to be landed... Still need to re-add my committer/reviewer status in contributors.json before I can land it myself (was dormant for a good 6 yeas)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608990</commentid>
    <comment_count>27</comment_count>
      <attachid>388291</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2020-01-21 04:57:28 -0800</bug_when>
    <thetext>Created attachment 388291
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609096</commentid>
    <comment_count>28</comment_count>
      <attachid>388291</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-01-21 09:49:50 -0800</bug_when>
    <thetext>Comment on attachment 388291
Patch

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

Patch seems fine to land; there are some loose ends which we can refine with a follow-up patch.

&gt; Source/WebCore/css/CSSCursorImageValue.h:41
&gt; +namespace Style {
&gt; +class BuilderState;
&gt; +}

A little confused about why we are adding this here since I don’t see any new uses of it in the header below.

&gt; Source/WebCore/css/CSSImageSetValue.cpp:97
&gt; +    updateDeviceScaleFactor(document);

Unclear to me why we do this unconditionally, given that we will ignore the result if m_accessedBestFitImage is true.

&gt; Source/WebCore/css/CSSImageSetValue.cpp:110
&gt;  {
&gt; +
&gt; +    // FIXME: In the future, we want to take much more than deviceScaleFactor into acount here.

Extraneous blank line here.

&gt; Source/WebCore/css/CSSImageSetValue.h:38
&gt; +class CSSImageValue;

Not sure why we are adding this. I don’t see any new uses of it in this header below.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:1706
&gt; +RefPtr&lt;CSSValue&gt; consumeImage(CSSParserTokenRange&amp; range, CSSParserContext context, OptionSet&lt;AllowedImageType&gt; AllowedImageType)

WebKit coding style says argument names should be lowercase, so it should be allowedImageType (actually I think it should be types or allowedTypes, it’s a set so it should be plural, and the longer name is not needed since every use will have AllowedImageType right next to it).

&gt; Source/WebCore/rendering/style/StyleCachedImage.h:31
&gt;  class CSSValue;

Seems like we should remove CSSValue since it’s not used here any more.

&gt; Source/WebCore/rendering/style/StyleCursorImage.h:33
&gt; +struct ImageWithScale;

This seems unneeded, since it’s an overridden function that is using it, so it must be declared in the base class’s header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609125</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-21 10:27:28 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 388291:

editing/spelling/spellcheck-async-remove-frame.html bug 158401 (authors: morrita@google.com, rniwa@webkit.org, and tony@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609126</commentid>
    <comment_count>30</comment_count>
      <attachid>388291</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-21 10:28:23 -0800</bug_when>
    <thetext>Comment on attachment 388291
Patch

Clearing flags on attachment: 388291

Committed r254861: &lt;https://trac.webkit.org/changeset/254861&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609127</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-21 10:28:27 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>387505</attachid>
            <date>2020-01-13 00:52:14 -0800</date>
            <delta_ts>2020-01-13 00:52:14 -0800</delta_ts>
            <desc>Test case</desc>
            <filename>gradient-inside-image-set-expected.html</filename>
            <type>text/html</type>
            <size>1417</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgo8c2NyaXB0PgogICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKICAgICAgICBp
ZiAoIXdpbmRvdy50ZXN0UnVubmVyIHx8ICF3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpCiAgICAgICAg
ICAgIHJldHVybjsKCiAgICAgICAgaWYgKCFzZXNzaW9uU3RvcmFnZS5zY2FsZUZhY3RvcklzU2V0
KSB7CiAgICAgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwogICAgICAgICAgICB0
ZXN0UnVubmVyLnNldEJhY2tpbmdTY2FsZUZhY3RvcigyLCBzY2FsZUZhY3RvcklzU2V0KTsKICAg
ICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLnBhZ2VSZWxvYWRlZCAm
JiBzZXNzaW9uU3RvcmFnZS5zY2FsZUZhY3RvcklzU2V0KSB7CiAgICAgICAgICAgIGRlbGV0ZSBz
ZXNzaW9uU3RvcmFnZS5wYWdlUmVsb2FkZWQ7CiAgICAgICAgICAgIGRlbGV0ZSBzZXNzaW9uU3Rv
cmFnZS5zY2FsZUZhY3RvcklzU2V0OwogICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBSaWdodCBub3cgdGhlcmUgaXMgYSBi
dWcgdGhhdCBpbWFnZS1zZXQgZG9lcyBub3QgcHJvcGVybHkgZGVhbCB3aXRoIGR5bmFtaWMgY2hh
bmdlcyB0byB0aGUgc2NhbGUgZmFjdG9yLAogICAgICAgICAgICAvLyBzbyB0byB3b3JrIGFyb3Vu
ZCB0aGF0LCB3ZSBtdXN0IHJlbG9hZCB0aGUgcGFnZSB0byBnZXQgdGhlIDJ4IGltYWdlLgogICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5NzY0
CiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnBhZ2VSZWxvYWRlZCA9IHRydWU7CiAgICAgICAg
ICAgIGRvY3VtZW50LmxvY2F0aW9uLnJlbG9hZCh0cnVlKTsKICAgICAgICB9CiAgICB9CiAgICAK
ICAgIGZ1bmN0aW9uIHNjYWxlRmFjdG9ySXNTZXQoKSB7CiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uu
c2NhbGVGYWN0b3JJc1NldCA9IHRydWU7CiAgICB9CgogICAgd2luZG93Lm9ubG9hZCA9IHJ1blRl
c3Q7Cjwvc2NyaXB0PgogICAgCjxzdHlsZT4KICAgICNmb28gewogICAgICAgIHdpZHRoOjEwMHB4
OwogICAgICAgIGhlaWdodDoxMDBweDsKICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXIt
Z3JhZGllbnQod2hpdGUsIGdyZWVuKTs7CiAgICB9Cjwvc3R5bGU+CjwvaGVhZD4KCjxib2R5IGlk
PSJib2R5Ij4KICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEg
Ymx1ZSAxMDBweCBzcXVhcmUgd2hlbiB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgaXMgMSwgYW5kIGlm
IGl0IGlzIGEgMTAwcHggZ3JlZW4gc3F1YXJlIHdoZW4gdGhlIGRldmljZVNjYWxlRmFjdG9yIGlz
IDIuPC9kaXY+CiAgICA8ZGl2IGlkPWZvbz48L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388193</attachid>
            <date>2020-01-19 12:24:05 -0800</date>
            <delta_ts>2020-01-19 14:16:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81941-20200119222403.patch</filename>
            <type>text/plain</type>
            <size>86594</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAyMC0wMS0xOSAgTm9hbSBS
b3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgLXdlYmtpdC1pbWFnZS1zZXQg
c2hvdWxkIHN1cHBvcnQgYWxsIHRoZSBpbWFnZSBmdW5jdGlvbnMgV2ViS2l0IHN1cHBvcnRzLCBu
b3QganVzdCB1cmwoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODE5NDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBTZXBhcmF0ZSBTdHlsZUNhY2hlZEltYWdlIHRvIDQgY2xhc3NlczoKKyAgICAgICAgLSBT
dHlsZUNhY2hlZEltYWdlOiBmb3Igc2luZ2xlIGltYWdlcyBvbmx5CisgICAgICAgIC0gU3R5bGVN
dWx0aUltYWdlOiBmb3IgdmFsdWVzIHRoYXQgY2FuIGNvbnRhaW4gbXVsdGlwbGUgaW1hZ2VzOiBs
aWtlIGN1cnNvci9pbWFnZS1zZXQKKyAgICAgICAgLSBTdHlsZUltYWdlU2V0CisgICAgICAgIC0g
U3R5bGVDdXJzb3JJbWFnZQorCisgICAgICAgIFRoZSBuZXcgY2xhc3NlcyBvbmx5IGRlYWwgd2l0
aCB0aGVpciBvd24gdmFsdWUgdHlwZS4gQmVmb3JlLCBJbWFnZVNldCBhbmQgY3Vyc29yIHdlcmUg
cmVzb2x2ZWQKKyAgICAgICAgYXMgYSBTdHlsZUNhY2hlZEltYWdlLCB3aGljaCBpcyBubyBsb25n
ZXIgYSB2YWxpZCBhc3N1bXB0aW9uIGlmIGltYWdlLXNldCBjYW4gY29udGFpbiBnZW5lcmF0ZWQg
aW1hZ2VzLgorICAgICAgICBUaG91Z2ggY3Vyc29ycyBzdGlsbCBjYW4gb25seSBjb250YWluIGNh
Y2hlZCBpbWFnZXMsIGl0IHdhcyBjbGVhbmVyIHRvIHJlZmFjdG9yIGl0IG91dCBhcyB3ZWxsLgor
CisgICAgICAgIFJlZmFjdG9yZWQgYmVzdC1maXQgaW1hZ2Ugc2VsZWN0aW9uIGZyb20gbG9hZGlu
Zy4gTm93IFN0eWxlQ2FjaGVkSW1hZ2UgaXMgaW4gY2hhcmdlIG9mIGxvYWRpbmcKKyAgICAgICAg
dGhlIGFjdHVhbCBpbWFnZSwgYW5kIFN0eWxlSW1hZ2VTZXQvU3R5bGVDdXJzb3JJbWFnZSBwZXJm
b3JtIHRoZSBzb3VyY2Ugc2VsZWN0aW9uLgorCisgICAgICAgIEFsc28sIGFkZGVkIHRoZSBuZWNl
c3NhcnkgbG9naWMgaW4gdGhlIENTUyBwYXJzZXIgdG8gY29uc3VtZSBnZW5lcmF0ZWQgaW1hZ2Vz
IGluc2lkZSBpbWFnZS1zZXRzLCBleGNsdWRpbmcKKyAgICAgICAgd2hlbiB0aGUgaW1hZ2Utc2V0
IGlzIGEgY3Vyc29yIHZhbHVlLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2Nzcy9pbWFnZS1zZXQt
cGFyc2luZy1nZW5lcmF0ZWQuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9oaWRwaS9pbWFnZS1z
ZXQtY3Jvc3MtZmFkZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2hpZHBpL2ltYWdlLXNldC1n
cmFkaWVudC1tdWx0aS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2hpZHBpL2ltYWdlLXNldC1n
cmFkaWVudC1zaW5nbGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9oaWRwaS9pbWFnZS1zZXQt
Z3JhZGllbnQuaHRtbAorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBm
aWxlcworCisgICAgICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6c2VsZWN0QmVzdEZpdEltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0N1cnNvckltYWdlVmFsdWU6OmxvYWRJbWFnZSk6IERlbGV0ZWQuCisg
ICAgICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuaDoKKyAgICAgICAgICAgICAgICBJbnN0
ZWFkIG9mIGN1cnNvciBsb2FkaW5nIHRoZSBpbWFnZSwgaXQgc2VsZWN0cyBhbiBpbWFnZSBDU1Mg
dmFsdWUKKworICAgICAgICAqIGNzcy9DU1NJbWFnZVNldFZhbHVlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ltYWdlU2V0VmFsdWU6OkNTU0ltYWdlU2V0VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTSW1hZ2VTZXRWYWx1ZTo6ZmlsbEltYWdlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ltYWdlU2V0VmFsdWU6OmNhY2hlZEltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ltYWdlU2V0VmFsdWU6OnNlbGVjdEJlc3RGaXRJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NJbWFnZVNldFZhbHVlOjp1cGRhdGVEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjppbWFnZVNldFdpdGhTdHlsZXNSZXNvbHZlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjp0cmF2ZXJzZVN1YnJlc291cmNlcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjpsb2FkQmVzdEZpdElt
YWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5oOgorICAgICAg
ICAgICAgICAgIFJlZmFjdG9yIENTU0ltYWdlU2V0VmFsdWUgdG8gaW5jbHVkZSBub24tY2FjaGVk
SW1hZ2UgaW1hZ2VzCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVDdXJzb3IpOgorICAgICAgICAqIGNzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVVybE9yU3RyaW5nQXNTdHJpbmdW
aWV3KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5oOgorICAgICAgICAgICAgICAgIAorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NTU1By
b3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRnVuYyk6CisgICAg
ICAgICAgICAgICAgV2hlbiBibGVuZGluZyB0d28gaW1hZ2VzLCBnZXQgdGhlIHNlbGVjdGVkIGlt
YWdlcyBpbiBjYXNlIGl0IGlzIGFuIGltYWdlLXNldAorCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
SW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2U6OmluaXRpYWxpemUpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FuRGlyZWN0bHlD
b21wb3NpdGVCYWNrZ3JvdW5kQmFja2dyb3VuZEltYWdlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3R5bGUvU2hhcGVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjppc0lt
YWdlVmFsaWQgY29uc3QpOgorICAgICAgICAgICAgICAgIFVzZSBoYXNDYWNoZWRJbWFnZSgpIGlu
c3RlYWQgb2YgaXNDYWNoZWRJbWFnZSgpIGFzIGEgU3R5bGVJbWFnZVNldCBpcyBubyBsb25nZXIg
YW4gaXNDYWNoZWRJbWFnZSgpCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNo
ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNhY2hlZEltYWdlOjpTdHlsZUNh
Y2hlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlVVJM
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OmxvYWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5n
L3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5
bGVDdXJzb3JJbWFnZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJ
bWFnZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZU11bHRpSW1hZ2UuY3BwOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlU2V0Lmg6CisgICAgICAgICogcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdHls
ZS9TdHlsZUltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUltYWdlOjpzZWxlY3RlZElt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW1hZ2U6OnNlbGVjdGVkSW1hZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVJbWFnZTo6aXNDdXJzb3JJbWFnZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUltYWdlOjppc0ltYWdlU2V0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlSW1hZ2U6Omhhc0NhY2hlZEltYWdlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlSW1hZ2U6OlN0eWxlSW1hZ2UpOgorICAgICAgICAgICAgICAgIFNlcGFyYXRl
IGN1cnNvci9pbWFnZS1zZXQgcmVsYXRlZCBzdHVmZiBhd2F5IGZyb20gU3R5bGVDYWNoZWRJbWFn
ZS4KKworICAgICAgICAqIHN0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OkJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb250ZW50KToKKyAgICAgICAg
KiBzdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
QnVpbGRlclN0YXRlOjpyZXNvbHZlSW1hZ2VTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OkJ1aWxkZXJTdGF0ZTo6Y3JlYXRlU3R5bGVJbWFnZSk6CisgICAgICAgICogc3R5bGUvU3R5
bGVCdWlsZGVyU3RhdGUuaDoKKyAgICAgICAgICAgICAgICBNYXRjaCB0aGUgQ1NTIHZhbHVlcyB3
aXRoIHRoZSBjb3JyZWN0IFN0eWxlIGNsYXNzLiBBbHNvLCBlbnN1cmUgaW1hZ2Utc2V0cyByZXNv
bHZlIHRoZWlyIAorICAgICAgICAgICAgICAgIGltYWdlcycgc3R5bGVzIGFzIHRoZXkgbWF5IGNv
bnRhaW4gZ3JhZGllbnRzIGFuZCBvdGhlciBjb250ZXh0LWF3YXJlIHZhbHVlcy4KKwogMjAyMC0w
MS0xOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10g
RGV2aXJ0dWFsaXplIEZvcm1hdHRpbmdTdGF0ZQpJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9u
IDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0yMjYyLDE1ICsyMjYyLDE4IEBAIHJlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmNwcAogcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5
bGVCb3hEYXRhLmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCityZW5k
ZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZURl
cHJlY2F0ZWRGbGV4aWJsZUJveERhdGEuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVGaWx0ZXJE
YXRhLmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlRmxleGlibGVCb3hEYXRhLmNwcAogcmVuZGVy
aW5nL3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVH
cmlkRGF0YS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZUdyaWRJdGVtRGF0YS5jcHAKK3JlbmRl
cmluZy9zdHlsZS9TdHlsZUltYWdlU2V0LmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJp
dGVkRGF0YS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZU1hcnF1ZWVEYXRhLmNwcAogcmVuZGVy
aW5nL3N0eWxlL1N0eWxlTXVsdGlDb2xEYXRhLmNwcAorcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVs
dGlJbWFnZS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcAog
cmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuY3BwCiByZW5kZXJpbmcv
c3R5bGUvU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjU0ODA4KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzcxNSw5ICsxMzcxNSwxNSBAQAogCQlDOURBREJDOTFCMUQzQjI1MDAx
RjE3RDggLyogSlNNZWRpYVNlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNNZWRpYVNlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDOURBREJDQTFCMUQzQjI1MDAxRjE3RDggLyogSlNNZWRpYVNlc3Npb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNZWRpYVNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzlGODdDRkQxQjI4RTVGNjAwOTc5QjgzIC8qIE1lZGlhU2Vzc2lvbkV2
ZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU2Vzc2lvbkV2ZW50cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDQTA5MUQ4NjIzQ0Y5MDc4MDBBRDQzNDYgLyogU3R5bGVJbWFnZVNl
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUltYWdlU2V0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0EwOTFEODkyM0NGOTA4ODAwQUQ0MzQ2IC8qIFN0eWxlSW1hZ2VT
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVJbWFnZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDQTE2MzVEQzIwNzJFNzY5MDBFN0QyQ0UgLyogUmVmZXJyZXJQb2xpY3kuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVmZXJyZXJQb2xpY3kuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQTNCRjY3QjEwRDk5QkFFMDBFNkNFNTMg
LyogU2Nyb2xsQW5pbWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU2Nyb2xsQW5pbWF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQTNC
RjY3RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQ0E1MkJBRTUyM0QwQUYxNjAwREUwQjg0IC8qIFN0eWxlQ3Vyc29ySW1hZ2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVDdXJzb3JJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUNBNTJCQUU3MjNEMEFGMTcwMERFMEI4NCAvKiBTdHlsZU11bHRpSW1h
Z2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVNdWx0aUltYWdlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0E1MkJBRTgyM0QwQUYxODAwREUwQjg0IC8qIFN0eWxlTXVs
dGlJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZU11bHRpSW1hZ2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0E1MkJBRTkyM0QwQUYxOTAwREUwQjg0IC8qIFN0eWxlQ3Vyc29y
SW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVDdXJzb3JJbWFnZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDQTZDMTUyRjIyMEI0QTU1MDA1NUNCRkMgLyogSlNJREJSZXF1ZXN0
Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCUmVx
dWVzdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNBNkMxNTM3MjIw
RDFFQjMwMDU1Q0JGQyAvKiBKU0lEQkN1cnNvckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0lEQkN1cnNvckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUNBNkMxNTM4MjIwRDFFQjMwMDU1Q0JGQyAvKiBKU0lEQkN1cnNvcldp
dGhWYWx1ZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yNTU1Myw2ICsyNTU1OSw4IEBACiAJCQkJQkNFRjQ0NEMwRTY3NDYyODAwMUMxMjg3IC8q
IFN0eWxlQ2FjaGVkSW1hZ2UuaCAqLywKIAkJCQkxQzBBQTE2QTIxOTQwREM3MDA4OTY4MjkgLyog
U3R5bGVDb2xvclNjaGVtZS5oICovLAogCQkJCTlEQUM3QzU2MUFGMkNCNjQwMDQzN0M0NCAvKiBT
dHlsZUNvbnRlbnRBbGlnbm1lbnREYXRhLmggKi8sCisJCQkJQ0E1MkJBRTUyM0QwQUYxNjAwREUw
Qjg0IC8qIFN0eWxlQ3Vyc29ySW1hZ2UuY3BwICovLAorCQkJCUNBNTJCQUU5MjNEMEFGMTkwMERF
MEI4NCAvKiBTdHlsZUN1cnNvckltYWdlLmggKi8sCiAJCQkJQkM3NzlFMTUxQkIyMjZBMjAwQ0FB
OEJGIC8qIFN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhLmggKi8sCiAJCQkJQkM1RUI4QjYwRTgyMDFC
RDAwQjI1OTY1IC8qIFN0eWxlRGVwcmVjYXRlZEZsZXhpYmxlQm94RGF0YS5jcHAgKi8sCiAJCQkJ
QkM1RUI4QjcwRTgyMDFCRDAwQjI1OTY1IC8qIFN0eWxlRGVwcmVjYXRlZEZsZXhpYmxlQm94RGF0
YS5oICovLApAQCAtMjU1NjcsMTIgKzI1NTc1LDE2IEBACiAJCQkJQTExMERCOUMxNEY1REY4NzAw
QTAzQjkzIC8qIFN0eWxlR3JpZEl0ZW1EYXRhLmNwcCAqLywKIAkJCQlBMTEwREI5QTE0RjVERjc3
MDBBMDNCOTMgLyogU3R5bGVHcmlkSXRlbURhdGEuaCAqLywKIAkJCQlCQ0VGNDNDRTBFNjczREEx
MDAxQzEyODcgLyogU3R5bGVJbWFnZS5oICovLAorCQkJCUNBMDkxRDg2MjNDRjkwNzgwMEFENDM0
NiAvKiBTdHlsZUltYWdlU2V0LmNwcCAqLywKKwkJCQlDQTA5MUQ4OTIzQ0Y5MDg4MDBBRDQzNDYg
LyogU3R5bGVJbWFnZVNldC5oICovLAogCQkJCUJDMjI3MzAxMEU4MkYxRTYwMEU3Rjk3NSAvKiBT
dHlsZUluaGVyaXRlZERhdGEuY3BwICovLAogCQkJCUJDMjI3MzAyMEU4MkYxRTYwMEU3Rjk3NSAv
KiBTdHlsZUluaGVyaXRlZERhdGEuaCAqLywKIAkJCQlCQzVFQjcyNzBFODFERTgxMDBCMjU5NjUg
LyogU3R5bGVNYXJxdWVlRGF0YS5jcHAgKi8sCiAJCQkJQkM1RUI3MjgwRTgxREU4MTAwQjI1OTY1
IC8qIFN0eWxlTWFycXVlZURhdGEuaCAqLywKIAkJCQlCQzVFQjc0QjBFODFFMDY3MDBCMjU5NjUg
LyogU3R5bGVNdWx0aUNvbERhdGEuY3BwICovLAogCQkJCUJDNUVCNzRDMEU4MUUwNjcwMEIyNTk2
NSAvKiBTdHlsZU11bHRpQ29sRGF0YS5oICovLAorCQkJCUNBNTJCQUU3MjNEMEFGMTcwMERFMEI4
NCAvKiBTdHlsZU11bHRpSW1hZ2UuY3BwICovLAorCQkJCUNBNTJCQUU4MjNEMEFGMTgwMERFMEI4
NCAvKiBTdHlsZU11bHRpSW1hZ2UuaCAqLywKIAkJCQlCQzIyNzJFMTBFODJFRTlCMDBFN0Y5NzUg
LyogU3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5jcHAgKi8sCiAJCQkJQkMyMjcyRTIwRTgyRUU5QjAw
RTdGOTc1IC8qIFN0eWxlUmFyZUluaGVyaXRlZERhdGEuaCAqLywKIAkJCQlCQzIyNzJCQTBFODJF
QUFFMDBFN0Y5NzUgLyogU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAgKi8sCkBAIC0zMTM1
Nyw2ICszMTM2OSw3IEBACiAJCQkJMTE5OUZBNDYyMDhFMzVBMzAwMjM1OENDIC8qIExheW91dENv
bnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkYyNkJCNkMyMzM0M0U2RjAwMkYyQkVBIC8q
IExheW91dENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTExMzEwQ0Y1MjBCQTRBNEMwMDY1
QThEMCAvKiBMYXlvdXREZXNjZW5kYW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0
MTgwMjU1MjNENDU0OUIwMEZGQjA3MSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUU0QUJBQkREMjM2MDg4RkUwMEZBNDM0NSAvKiBMYXlvdXRJbnRlZ3Jh
dGlvbkxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTExMzEwQ0Y0MjBCQTRBM0QwMDY1
QThEMCAvKiBMYXlvdXRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxRDcyRjYxNUZF
Njk1MzAwQzRDMDdFIC8qIExheW91dE1pbGVzdG9uZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjA1
MCw3ICszMjA2Myw2IEBACiAJCQkJNDU4RkU0MEExNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNl
YXJjaEZpZWxkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQg
LyogUmVuZGVyU2VsZWN0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUIyNDdBNkQwQUZE
NjM4MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQxODAy
NTUyM0Q0NTQ5QjAwRkZCMDcxIC8qIExheW91dEludGVncmF0aW9uQm94VHJlZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzE5NTVBODgxNjBEMTk5MjAwODU4MDI1IC8qIFJlbmRlclNuYXBzaG90dGVk
UGx1Z0luLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhDOEZBRTBERENEMzFCMDBCNTkyRjQgLyog
UmVuZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNjY4MEU4MUNCNzEwMEIyNTk2
NSAvKiBSZW5kZXJTdHlsZUNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk1LDE3ICs5NSwxNyBAQCB2b2lkIENTU0N1cnNvckltYWdlVmFsdWU6OmN1cnNvckVs
ZW1lbnRDCiAgICAgbV9ob3RTcG90LnNldFkoc3RhdGljX2Nhc3Q8aW50Pih5KSk7CiB9CiAKLXN0
ZDo6cGFpcjxDYWNoZWRJbWFnZSosIGZsb2F0PiBDU1NDdXJzb3JJbWFnZVZhbHVlOjpsb2FkSW1h
Z2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRp
b25zJiBvcHRpb25zKQorc3RkOjpwYWlyPENTU1ZhbHVlKiwgZmxvYXQ+IENTU0N1cnNvckltYWdl
VmFsdWU6OnNlbGVjdEJlc3RGaXRJbWFnZShEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgaWYg
KGlzPENTU0ltYWdlU2V0VmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkpCi0gICAgICAgIHJldHVy
biBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPihtX2ltYWdlVmFsdWUuZ2V0KCkpLmxvYWRCZXN0
Rml0SW1hZ2UobG9hZGVyLCBvcHRpb25zKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0lt
YWdlU2V0VmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkuc2VsZWN0QmVzdEZpdEltYWdlKGRvY3Vt
ZW50KTsKIAotICAgIGlmIChhdXRvKiBjdXJzb3JFbGVtZW50ID0gdXBkYXRlQ3Vyc29yRWxlbWVu
dCgqbG9hZGVyLmRvY3VtZW50KCkpKSB7CisgICAgaWYgKGF1dG8qIGN1cnNvckVsZW1lbnQgPSB1
cGRhdGVDdXJzb3JFbGVtZW50KCpkb2N1bWVudCkpIHsKICAgICAgICAgaWYgKGN1cnNvckVsZW1l
bnQtPmhyZWYoKSAhPSBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX2ltYWdlVmFsdWUuZ2V0KCkp
LnVybCgpKQotICAgICAgICAgICAgbV9pbWFnZVZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRl
KGxvYWRlci5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChjdXJzb3JFbGVtZW50LT5ocmVmKCkpLCBt
X2xvYWRlZEZyb21PcGFxdWVTb3VyY2UpOworICAgICAgICAgICAgbV9pbWFnZVZhbHVlID0gQ1NT
SW1hZ2VWYWx1ZTo6Y3JlYXRlKGRvY3VtZW50LT5jb21wbGV0ZVVSTChjdXJzb3JFbGVtZW50LT5o
cmVmKCkpLCBtX2xvYWRlZEZyb21PcGFxdWVTb3VyY2UpOwogICAgIH0KIAotICAgIHJldHVybiB7
IGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkubG9hZEltYWdlKGxv
YWRlciwgb3B0aW9ucyksIDEgfTsKKyAgICByZXR1cm4geyBtX2ltYWdlVmFsdWUucHRyKCkgLCAx
IH07CiB9CiAKIGJvb2wgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6ZXF1YWxzKGNvbnN0IENTU0N1cnNv
ckltYWdlVmFsdWUmIG90aGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1
cnNvckltYWdlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vy
c29ySW1hZ2VWYWx1ZS5oCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCwxMCBAQCBj
bGFzcyBFbGVtZW50OwogY2xhc3MgU1ZHQ3Vyc29yRWxlbWVudDsKIGNsYXNzIFNWR0VsZW1lbnQ7
CiAKK25hbWVzcGFjZSBTdHlsZSB7CitjbGFzcyBCdWlsZGVyU3RhdGU7Cit9CisKIGNsYXNzIENT
U0N1cnNvckltYWdlVmFsdWUgZmluYWwgOiBwdWJsaWMgQ1NTVmFsdWUgewogcHVibGljOgogICAg
IHN0YXRpYyBSZWY8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4gY3JlYXRlKFJlZjxDU1NWYWx1ZT4mJiBp
bWFnZVZhbHVlLCBib29sIGhhc0hvdFNwb3QsIGNvbnN0IEludFBvaW50JiBob3RTcG90LCBMb2Fk
ZWRGcm9tT3BhcXVlU291cmNlIGxvYWRlZEZyb21PcGFxdWVTb3VyY2UpCkBAIC01Niw3ICs2MCw3
IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3Q7CiAKLSAgICBz
dGQ6OnBhaXI8Q2FjaGVkSW1hZ2UqLCBmbG9hdD4gbG9hZEltYWdlKENhY2hlZFJlc291cmNlTG9h
ZGVyJiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJik7CisgICAgc3RkOjpwYWlyPENTU1Zh
bHVlKiwgZmxvYXQ+IHNlbGVjdEJlc3RGaXRJbWFnZShEb2N1bWVudCopOwogCiAgICAgdm9pZCBy
ZW1vdmVSZWZlcmVuY2VkRWxlbWVudChTVkdFbGVtZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NJbWFnZVNldFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTkg
KzI4LDE1IEBACiAKICNpbmNsdWRlICJDU1NJbWFnZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJp
bWl0aXZlVmFsdWUuaCIKLSNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgiCi0j
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlN0eWxlQnVpbGRlclN0YXRl
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUNTU0ltYWdlU2V0VmFsdWU6OkNTU0ltYWdlU2V0VmFsdWUoTG9hZGVkRnJvbU9w
YXF1ZVNvdXJjZSBsb2FkZWRGcm9tT3BhcXVlU291cmNlKQorQ1NTSW1hZ2VTZXRWYWx1ZTo6Q1NT
SW1hZ2VTZXRWYWx1ZSgpCiAgICAgOiBDU1NWYWx1ZUxpc3QoSW1hZ2VTZXRDbGFzcywgQ29tbWFT
ZXBhcmF0b3IpCi0gICAgLCBtX2xvYWRlZEZyb21PcGFxdWVTb3VyY2UobG9hZGVkRnJvbU9wYXF1
ZVNvdXJjZSkKIHsKIH0KIApAQCAtNTIsMTUgKzQ4LDE0IEBAIHZvaWQgQ1NTSW1hZ2VTZXRWYWx1
ZTo6ZmlsbEltYWdlU2V0KCkKICAgICBzaXplX3QgaSA9IDA7CiAgICAgd2hpbGUgKGkgPCBsZW5n
dGgpIHsKICAgICAgICAgQ1NTVmFsdWUqIGltYWdlVmFsdWUgPSBpdGVtKGkpOwotICAgICAgICBV
UkwgaW1hZ2VVUkwgPSBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPigqaW1hZ2VWYWx1ZSkudXJsKCk7
Ci0KKyAgICAgICAgQVNTRVJUKGlzPENTU0ltYWdlVmFsdWU+KGltYWdlVmFsdWUpIHx8IGlzPENT
U0ltYWdlR2VuZXJhdG9yVmFsdWU+KGltYWdlVmFsdWUpKTsKICAgICAgICAgKytpOwogICAgICAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpIDwgbGVuZ3RoKTsKICAgICAgICAg
Q1NTVmFsdWUqIHNjYWxlRmFjdG9yVmFsdWUgPSBpdGVtKGkpOwogICAgICAgICBmbG9hdCBzY2Fs
ZUZhY3RvciA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqc2NhbGVGYWN0b3JWYWx1ZSku
ZmxvYXRWYWx1ZSgpOwogCiAgICAgICAgIEltYWdlV2l0aFNjYWxlIGltYWdlOwotICAgICAgICBp
bWFnZS5pbWFnZVVSTCA9IGltYWdlVVJMOworICAgICAgICBpbWFnZS52YWx1ZSA9IGltYWdlVmFs
dWU7CiAgICAgICAgIGltYWdlLnNjYWxlRmFjdG9yID0gc2NhbGVGYWN0b3I7CiAgICAgICAgIG1f
aW1hZ2VzSW5TZXQuYXBwZW5kKGltYWdlKTsKICAgICAgICAgKytpOwpAQCAtODUsMTEgKzgwLDE4
IEBAIENTU0ltYWdlU2V0VmFsdWU6OkltYWdlV2l0aFNjYWxlIENTU0ltYWcKICAgICByZXR1cm4g
aW1hZ2U7CiB9CiAKLXN0ZDo6cGFpcjxDYWNoZWRJbWFnZSosIGZsb2F0PiBDU1NJbWFnZVNldFZh
bHVlOjpsb2FkQmVzdEZpdEltYWdlKENhY2hlZFJlc291cmNlTG9hZGVyJiBsb2FkZXIsIGNvbnN0
IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKK0NhY2hlZEltYWdlKiBDU1NJbWFnZVNl
dFZhbHVlOjpjYWNoZWRJbWFnZSgpIGNvbnN0CiB7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
bG9hZGVyLmRvY3VtZW50KCk7Ci0gICAgQVNTRVJUKGRvY3VtZW50KTsKKyAgICBpZiAoIW1fc2Vs
ZWN0ZWRJbWFnZVZhbHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoaXM8Q1NT
SW1hZ2VWYWx1ZT4obV9zZWxlY3RlZEltYWdlVmFsdWUpKQorICAgICAgICByZXR1cm4gZG93bmNh
c3Q8Q1NTSW1hZ2VWYWx1ZT4obV9zZWxlY3RlZEltYWdlVmFsdWUpLT5jYWNoZWRJbWFnZSgpOwor
ICAgIHJldHVybiBudWxscHRyOworfQogCitzdGQ6OnBhaXI8Q1NTVmFsdWUqLCBmbG9hdD4gQ1NT
SW1hZ2VTZXRWYWx1ZTo6c2VsZWN0QmVzdEZpdEltYWdlKERvY3VtZW50KiBkb2N1bWVudCkKK3sK
KyAgICBBU1NFUlQoZG9jdW1lbnQpOwogICAgIHVwZGF0ZURldmljZVNjYWxlRmFjdG9yKCpkb2N1
bWVudCk7CiAKICAgICBpZiAoIW1fYWNjZXNzZWRCZXN0Rml0SW1hZ2UpIHsKQEAgLTk5LDE4ICsx
MDEsMTcgQEAgc3RkOjpwYWlyPENhY2hlZEltYWdlKiwgZmxvYXQ+IENTU0ltYWdlUwogICAgICAg
ICAvLyBBbGwgZm9ybXMgb2Ygc2NhbGUgc2hvdWxkIGJlIGluY2x1ZGVkOiBQYWdlOjpwYWdlU2Nh
bGVGYWN0b3IoKSwgRnJhbWU6OnBhZ2Vab29tRmFjdG9yKCksCiAgICAgICAgIC8vIGFuZCBhbnkg
Q1NTIHRyYW5zZm9ybXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
MTY5OAogICAgICAgICBJbWFnZVdpdGhTY2FsZSBpbWFnZSA9IGJlc3RJbWFnZUZvclNjYWxlRmFj
dG9yKCk7Ci0KLSAgICAgICAgUmVzb3VyY2VMb2FkZXJPcHRpb25zIGxvYWRPcHRpb25zID0gb3B0
aW9uczsKLSAgICAgICAgbG9hZE9wdGlvbnMubG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSA9IG1fbG9h
ZGVkRnJvbU9wYXF1ZVNvdXJjZTsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVl
c3QoUmVzb3VyY2VSZXF1ZXN0KGRvY3VtZW50LT5jb21wbGV0ZVVSTChpbWFnZS5pbWFnZVVSTCkp
LCBsb2FkT3B0aW9ucyk7Ci0gICAgICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9yKGNhY2hlZFJlc291
cmNlUmVxdWVzdEluaXRpYXRvcnMoKS5jc3MpOwotICAgICAgICBpZiAob3B0aW9ucy5tb2RlID09
IEZldGNoT3B0aW9uczo6TW9kZTo6Q29ycykKLSAgICAgICAgICAgIHJlcXVlc3QudXBkYXRlRm9y
QWNjZXNzQ29udHJvbCgqZG9jdW1lbnQpOwotCi0gICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBsb2Fk
ZXIucmVxdWVzdEltYWdlKFdURk1vdmUocmVxdWVzdCkpLnZhbHVlX29yKG51bGxwdHIpOwogICAg
ICAgICBtX2Jlc3RGaXRJbWFnZVNjYWxlRmFjdG9yID0gaW1hZ2Uuc2NhbGVGYWN0b3I7CisgICAg
ICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihpbWFnZS52YWx1ZSkpIHsKKyAgICAg
ICAgICAgIG1fc2VsZWN0ZWRJbWFnZVZhbHVlID0gaW1hZ2UudmFsdWU7CisgICAgICAgICAgICBy
ZXR1cm4geyBtX3NlbGVjdGVkSW1hZ2VWYWx1ZSwgbV9iZXN0Rml0SW1hZ2VTY2FsZUZhY3RvciB9
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgQVNTRVJUKGlzPENTU0ltYWdlVmFs
dWU+KGltYWdlLnZhbHVlKSk7CisgICAgICAgIG1fc2VsZWN0ZWRJbWFnZVZhbHVlID0gaW1hZ2Uu
dmFsdWU7CiAgICAgfQotICAgIHJldHVybiB7IG1fY2FjaGVkSW1hZ2UuZ2V0KCksIG1fYmVzdEZp
dEltYWdlU2NhbGVGYWN0b3IgfTsKKworICAgIHJldHVybiB7IG1fc2VsZWN0ZWRJbWFnZVZhbHVl
LCBtX2Jlc3RGaXRJbWFnZVNjYWxlRmFjdG9yIH07CiB9CiAKIHZvaWQgQ1NTSW1hZ2VTZXRWYWx1
ZTo6dXBkYXRlRGV2aWNlU2NhbGVGYWN0b3IoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQpAQCAt
MTIwLDcgKzEyMSwyNSBAQCB2b2lkIENTU0ltYWdlU2V0VmFsdWU6OnVwZGF0ZURldmljZVNjYWxl
CiAgICAgICAgIHJldHVybjsKICAgICBtX2RldmljZVNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVG
YWN0b3I7CiAgICAgbV9hY2Nlc3NlZEJlc3RGaXRJbWFnZSA9IGZhbHNlOwotICAgIG1fY2FjaGVk
SW1hZ2UgPSBudWxscHRyOworICAgIG1fc2VsZWN0ZWRJbWFnZVZhbHVlID0gbnVsbHB0cjsKK30K
KworUmVmPENTU0ltYWdlU2V0VmFsdWU+IENTU0ltYWdlU2V0VmFsdWU6OmltYWdlU2V0V2l0aFN0
eWxlc1Jlc29sdmVkKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKK3sKKyAgICBS
ZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gcmVzdWx0ID0gQ1NTSW1hZ2VTZXRWYWx1ZTo6Y3JlYXRlKCk7
CisgICAgc2l6ZV90IGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAgIHNpemVfdCBpID0gMDsK
KyAgICB3aGlsZSAoaSA8IGxlbmd0aCkgeworICAgICAgICBDU1NWYWx1ZSogaW1hZ2VWYWx1ZSA9
IGl0ZW0oaSk7CisgICAgICAgIFJlZjxDU1NWYWx1ZT4gcmVzb2x2ZWRWYWx1ZSA9IGJ1aWxkZXJT
dGF0ZS5yZXNvbHZlSW1hZ2VTdHlsZXMoKmltYWdlVmFsdWUpOworICAgICAgICByZXN1bHQtPmFw
cGVuZChXVEZNb3ZlKHJlc29sdmVkVmFsdWUpKTsKKyAgICAgICAgKytpOworCisgICAgICAgIHJl
c3VsdC0+YXBwZW5kKFJlZigqaXRlbShpKSkpOworICAgICAgICArK2k7CisgICAgfQorCisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogU3RyaW5nIENTU0ltYWdlU2V0VmFsdWU6OmN1c3RvbUNTU1Rl
eHQoKSBjb25zdApAQCAtMTU1LDkgKzE3NCw5IEBAIFN0cmluZyBDU1NJbWFnZVNldFZhbHVlOjpj
dXN0b21DU1NUZXh0KCkKIAogYm9vbCBDU1NJbWFnZVNldFZhbHVlOjp0cmF2ZXJzZVN1YnJlc291
cmNlcyhjb25zdCBXVEY6OkZ1bmN0aW9uPGJvb2wgKGNvbnN0IENhY2hlZFJlc291cmNlJik+JiBo
YW5kbGVyKSBjb25zdAogewotICAgIGlmICghbV9jYWNoZWRJbWFnZSkKKyAgICBpZiAoIW1fc2Vs
ZWN0ZWRJbWFnZVZhbHVlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGhhbmRs
ZXIoKm1fY2FjaGVkSW1hZ2UpOworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2VWYWx1ZS0+dHJh
dmVyc2VTdWJyZXNvdXJjZXMoaGFuZGxlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUuaAkocmV2aXNpb24gMjU0ODA4
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsMjIgKzM1LDI3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENhY2hlZElt
YWdlOwogY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBEb2N1bWVudDsKK2NsYXNz
IENTU0ltYWdlVmFsdWU7CisKK25hbWVzcGFjZSBTdHlsZSB7CitjbGFzcyBCdWlsZGVyU3RhdGU7
Cit9CiAKIGNsYXNzIENTU0ltYWdlU2V0VmFsdWUgZmluYWwgOiBwdWJsaWMgQ1NTVmFsdWVMaXN0
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0ltYWdlU2V0VmFsdWU+IGNyZWF0ZShMb2Fk
ZWRGcm9tT3BhcXVlU291cmNlIGxvYWRlZEZyb21PcGFxdWVTb3VyY2UpCisgICAgc3RhdGljIFJl
ZjxDU1NJbWFnZVNldFZhbHVlPiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQ1NTSW1hZ2VTZXRWYWx1ZShsb2FkZWRGcm9tT3BhcXVlU291cmNlKSk7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ltYWdlU2V0VmFsdWUoKSk7CiAgICAgfQogICAg
IH5DU1NJbWFnZVNldFZhbHVlKCk7CiAKLSAgICBzdGQ6OnBhaXI8Q2FjaGVkSW1hZ2UqLCBmbG9h
dD4gIGxvYWRCZXN0Rml0SW1hZ2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJj
ZUxvYWRlck9wdGlvbnMmKTsKLSAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UoKSBjb25zdCB7
IHJldHVybiBtX2NhY2hlZEltYWdlLmdldCgpOyB9CisgICAgc3RkOjpwYWlyPENTU1ZhbHVlKiwg
ZmxvYXQ+ICBzZWxlY3RCZXN0Rml0SW1hZ2UoRG9jdW1lbnQqKTsKKyAgICBDYWNoZWRJbWFnZSog
Y2FjaGVkSW1hZ2UoKSBjb25zdDsKIAogICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3Q7
CiAKICAgICBzdHJ1Y3QgSW1hZ2VXaXRoU2NhbGUgewotICAgICAgICBVUkwgaW1hZ2VVUkw7Cisg
ICAgICAgIENTU1ZhbHVlKiB2YWx1ZTsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3I7CiAgICAg
fTsKIApAQCAtNTgsMjQgKzYzLDIzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXBkYXRlRGV2aWNl
U2NhbGVGYWN0b3IoY29uc3QgRG9jdW1lbnQmKTsKIAotICAgIFVSTCBiZXN0SW1hZ2VGb3JTY2Fs
ZUZhY3RvclVSTCgpIHsgcmV0dXJuIGJlc3RJbWFnZUZvclNjYWxlRmFjdG9yKCkuaW1hZ2VVUkw7
IH0KKyAgICBSZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gaW1hZ2VTZXRXaXRoU3R5bGVzUmVzb2x2ZWQo
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VXaXRoU2NhbGUg
YmVzdEltYWdlRm9yU2NhbGVGYWN0b3IoKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDU1NJ
bWFnZVNldFZhbHVlKExvYWRlZEZyb21PcGFxdWVTb3VyY2UpOworICAgIGV4cGxpY2l0IENTU0lt
YWdlU2V0VmFsdWUoKTsKIAogICAgIHZvaWQgZmlsbEltYWdlU2V0KCk7CiAgICAgc3RhdGljIGlu
bGluZSBib29sIGNvbXBhcmVCeVNjYWxlRmFjdG9yKEltYWdlV2l0aFNjYWxlIGZpcnN0LCBJbWFn
ZVdpdGhTY2FsZSBzZWNvbmQpIHsgcmV0dXJuIGZpcnN0LnNjYWxlRmFjdG9yIDwgc2Vjb25kLnNj
YWxlRmFjdG9yOyB9CiAKLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRJbWFnZT4gbV9j
YWNoZWRJbWFnZTsKKyAgICBDU1NWYWx1ZSogbV9zZWxlY3RlZEltYWdlVmFsdWUgeyBudWxscHRy
IH07CiAgICAgYm9vbCBtX2FjY2Vzc2VkQmVzdEZpdEltYWdlIHsgZmFsc2UgfTsKICAgICBmbG9h
dCBtX2Jlc3RGaXRJbWFnZVNjYWxlRmFjdG9yIHsgMSB9OwogICAgIGZsb2F0IG1fZGV2aWNlU2Nh
bGVGYWN0b3IgeyAxIH07CiAKICAgICBWZWN0b3I8SW1hZ2VXaXRoU2NhbGU+IG1faW1hZ2VzSW5T
ZXQ7Ci0gICAgTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSBtX2xvYWRlZEZyb21PcGFxdWVTb3VyY2Ug
eyBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpObyB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlci5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUxLDcgKzIxNTEsNyBA
QCBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lCiBzdGF0aWMgUmVmUHRy
PENTU1ZhbHVlPiBjb25zdW1lQ3Vyc29yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25z
dCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0LCBib29sIGluUXVpcmtzTW9kZSkKIHsKICAgICBS
ZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0OwotICAgIHdoaWxlIChSZWZQdHI8Q1NTVmFsdWU+IGlt
YWdlID0gY29uc3VtZUltYWdlKHJhbmdlLCBjb250ZXh0LCBDb25zdW1lR2VuZXJhdGVkSW1hZ2U6
OkZvcmJpZCkpIHsKKyAgICB3aGlsZSAoUmVmUHRyPENTU1ZhbHVlPiBpbWFnZSA9IGNvbnN1bWVJ
bWFnZShyYW5nZSwgY29udGV4dCwgQWxsb3dlZEltYWdlVHlwZXM6OlVybEZ1bmN0aW9uIHwgQWxs
b3dlZEltYWdlVHlwZXM6OkltYWdlU2V0KSkgewogICAgICAgICBkb3VibGUgbnVtOwogICAgICAg
ICBJbnRQb2ludCBob3RTcG90KC0xLCAtMSk7CiAgICAgICAgIGJvb2wgaG90U3BvdFNwZWNpZmll
ZCA9IGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDc5LDI0ICsxNDc5LDE2IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNv
bnN1bWVHZW5lcmF0ZWQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgU3RyaW5nVmll
dyBjb25zdW1lVXJsT3JTdHJpbmdBc1N0cmluZ1ZpZXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJn
cykKLXsKLSAgICBpZiAoYXJncy5wZWVrKCkudHlwZSgpID09IFN0cmluZ1Rva2VuKQotICAgICAg
ICByZXR1cm4gYXJncy5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLnZhbHVlKCk7Ci0gICAg
cmV0dXJuIGNvbnN1bWVVcmxBc1N0cmluZ1ZpZXcoYXJncyk7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8
Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZVNldChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29u
c3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNv
bnN1bWVJbWFnZVNldChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2Vy
Q29udGV4dCYgY29udGV4dCwgdW5zaWduZWQgYWxsb3dlZEltYWdlVHlwZXMpCiB7CiAgICAgQ1NT
UGFyc2VyVG9rZW5SYW5nZSByYW5nZUNvcHkgPSByYW5nZTsKICAgICBDU1NQYXJzZXJUb2tlblJh
bmdlIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2VDb3B5KTsKLSAgICBSZWZQdHI8Q1NTSW1h
Z2VTZXRWYWx1ZT4gaW1hZ2VTZXQgPSBDU1NJbWFnZVNldFZhbHVlOjpjcmVhdGUoY29udGV4dC5p
c0NvbnRlbnRPcGFxdWUgPyBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpZZXMgOiBMb2FkZWRGcm9t
T3BhcXVlU291cmNlOjpObyk7CisgICAgUmVmUHRyPENTU0ltYWdlU2V0VmFsdWU+IGltYWdlU2V0
ID0gQ1NTSW1hZ2VTZXRWYWx1ZTo6Y3JlYXRlKCk7CiAgICAgZG8gewotICAgICAgICBBdG9tU3Ry
aW5nIHVybFZhbHVlID0gY29uc3VtZVVybE9yU3RyaW5nQXNTdHJpbmdWaWV3KGFyZ3MpLnRvQXRv
bVN0cmluZygpOwotICAgICAgICBpZiAodXJsVmFsdWUuaXNOdWxsKCkpCisgICAgICAgIFJlZlB0
cjxDU1NWYWx1ZT4gaW1hZ2UgPSBjb25zdW1lSW1hZ2UoYXJncywgY29udGV4dCwgKGFsbG93ZWRJ
bWFnZVR5cGVzIHwgQWxsb3dlZEltYWdlVHlwZXM6OlJhd1N0cmluZ0FzVXJsKSAmICh+QWxsb3dl
ZEltYWdlVHlwZXM6OkltYWdlU2V0KSk7CisgICAgICAgIGlmICghaW1hZ2UpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGltYWdlID0gQ1NT
SW1hZ2VWYWx1ZTo6Y3JlYXRlKGNvbXBsZXRlVVJMKGNvbnRleHQsIHVybFZhbHVlKSwgY29udGV4
dC5pc0NvbnRlbnRPcGFxdWUgPyBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpZZXMgOiBMb2FkZWRG
cm9tT3BhcXVlU291cmNlOjpObyk7CiAgICAgICAgIGltYWdlU2V0LT5hcHBlbmQoaW1hZ2UucmVs
ZWFzZU5vbk51bGwoKSk7CiAKICAgICAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0g
YXJncy5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwpAQCAtMTcxMSwxOSArMTcwMywyNSBA
QCBSZWZQdHI8Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVTaW5nbGVTaGFkCiAgICAgcmV0dXJuIENT
U1NoYWRvd1ZhbHVlOjpjcmVhdGUoV1RGTW92ZShob3Jpem9udGFsT2Zmc2V0KSwgV1RGTW92ZSh2
ZXJ0aWNhbE9mZnNldCksIFdURk1vdmUoYmx1clJhZGl1cyksIFdURk1vdmUoc3ByZWFkRGlzdGFu
Y2UpLCBXVEZNb3ZlKHN0eWxlKSwgV1RGTW92ZShjb2xvcikpOwogfQogCi1SZWZQdHI8Q1NTVmFs
dWU+IGNvbnN1bWVJbWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyQ29u
dGV4dCBjb250ZXh0LCBDb25zdW1lR2VuZXJhdGVkSW1hZ2UgZ2VuZXJhdGVkSW1hZ2UpCitSZWZQ
dHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NT
UGFyc2VyQ29udGV4dCBjb250ZXh0LCB1bnNpZ25lZCBhbGxvd2VkSW1hZ2VUeXBlcykKIHsKLSAg
ICBBdG9tU3RyaW5nIHVyaSA9IGNvbnN1bWVVcmxBc1N0cmluZ1ZpZXcocmFuZ2UpLnRvQXRvbVN0
cmluZygpOwotICAgIGlmICghdXJpLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gQ1NTSW1hZ2VW
YWx1ZTo6Y3JlYXRlKGNvbXBsZXRlVVJMKGNvbnRleHQsIHVyaSksIGNvbnRleHQuaXNDb250ZW50
T3BhcXVlID8gTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6WWVzIDogTG9hZGVkRnJvbU9wYXF1ZVNv
dXJjZTo6Tm8pOworICAgIGlmICgocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBTdHJpbmdUb2tlbikg
JiYgKGFsbG93ZWRJbWFnZVR5cGVzICYgQWxsb3dlZEltYWdlVHlwZXM6OlJhd1N0cmluZ0FzVXJs
KSkKKyAgICAgICAgcmV0dXJuIENTU0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTChjb250
ZXh0LCByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLnZhbHVlKCkudG9BdG9tU3Ry
aW5nKCkpLCBjb250ZXh0LmlzQ29udGVudE9wYXF1ZSA/IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6
OlllcyA6IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6Ok5vKTsKIAogICAgIGlmIChyYW5nZS5wZWVr
KCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pIHsKICAgICAgICAgQ1NTVmFsdWVJRCBpZCA9IHJh
bmdlLnBlZWsoKS5mdW5jdGlvbklkKCk7Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtp
dEltYWdlU2V0IHx8IGlkID09IENTU1ZhbHVlSW1hZ2VTZXQpCi0gICAgICAgICAgICByZXR1cm4g
Y29uc3VtZUltYWdlU2V0KHJhbmdlLCBjb250ZXh0KTsKLSAgICAgICAgaWYgKGdlbmVyYXRlZElt
YWdlID09IENvbnN1bWVHZW5lcmF0ZWRJbWFnZTo6QWxsb3cgJiYgaXNHZW5lcmF0ZWRJbWFnZShp
ZCkpCisgICAgICAgIGlmICgoYWxsb3dlZEltYWdlVHlwZXMgJiBBbGxvd2VkSW1hZ2VUeXBlczo6
SW1hZ2VTZXQpICYmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdEltYWdlU2V0IHx8IGlkID09IENTU1Zh
bHVlSW1hZ2VTZXQpKQorICAgICAgICAgICAgcmV0dXJuIGNvbnN1bWVJbWFnZVNldChyYW5nZSwg
Y29udGV4dCwgYWxsb3dlZEltYWdlVHlwZXMpOworICAgICAgICBpZiAoKGFsbG93ZWRJbWFnZVR5
cGVzICYgQWxsb3dlZEltYWdlVHlwZXM6OkdlbmVyYXRlZEltYWdlKSAmJiBpc0dlbmVyYXRlZElt
YWdlKGlkKSkKICAgICAgICAgICAgIHJldHVybiBjb25zdW1lR2VuZXJhdGVkSW1hZ2UocmFuZ2Us
IGNvbnRleHQpOwogICAgIH0KKworICAgIGlmIChhbGxvd2VkSW1hZ2VUeXBlcyAmIEFsbG93ZWRJ
bWFnZVR5cGVzOjpVcmxGdW5jdGlvbikgeworICAgICAgICBBdG9tU3RyaW5nIHVyaSA9IGNvbnN1
bWVVcmxBc1N0cmluZ1ZpZXcocmFuZ2UpLnRvQXRvbVN0cmluZygpOworICAgICAgICBpZiAoIXVy
aS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY29t
cGxldGVVUkwoY29udGV4dCwgdXJpKSwgY29udGV4dC5pc0NvbnRlbnRPcGFxdWUgPyBMb2FkZWRG
cm9tT3BhcXVlU291cmNlOjpZZXMgOiBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpObyk7CisgICAg
fQorCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAkocmV2aXNpb24gMjU0
ODA4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtODksMTIgKzg5LDE2IEBAIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gY29uc3VtZVBvc2l0aW8KIGJvb2wgY29uc3VtZVBvc2l0aW9uKENTU1BhcnNlclRv
a2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBQb3NpdGlvblN5bnRheCwg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgcmVzdWx0WCwgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiYgcmVzdWx0WSk7CiBib29sIGNvbnN1bWVPbmVPclR3b1ZhbHVlZFBvc2l0aW9uKENTU1Bh
cnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+JiByZXN1bHRYLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiByZXN1
bHRZKTsKIAotZW51bSBjbGFzcyBDb25zdW1lR2VuZXJhdGVkSW1hZ2UgewotICAgIEFsbG93LAot
ICAgIEZvcmJpZAorZW51bSBBbGxvd2VkSW1hZ2VUeXBlcyB7CisgICAgRm9yYmlkID0gMCwKKyAg
ICBVcmxGdW5jdGlvbiA9IDEsCisgICAgUmF3U3RyaW5nQXNVcmwgPSAyLAorICAgIEltYWdlU2V0
ID0gNCwKKyAgICBHZW5lcmF0ZWRJbWFnZSA9IDgKIH07CiAKLVJlZlB0cjxDU1NWYWx1ZT4gY29u
c3VtZUltYWdlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJDb250ZXh0LCBDb25zdW1l
R2VuZXJhdGVkSW1hZ2UgPSBDb25zdW1lR2VuZXJhdGVkSW1hZ2U6OkFsbG93KTsKK1JlZlB0cjxD
U1NWYWx1ZT4gY29uc3VtZUltYWdlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJDb250
ZXh0LCB1bnNpZ25lZCBhbGxvd2VkSW1hZ2VUeXBlcyA9IEFsbG93ZWRJbWFnZVR5cGVzOjpVcmxG
dW5jdGlvbiB8IEFsbG93ZWRJbWFnZVR5cGVzOjpJbWFnZVNldCB8IEFsbG93ZWRJbWFnZVR5cGVz
OjpHZW5lcmF0ZWRJbWFnZSk7CisKIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlT3JOb25l
KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJDb250ZXh0KTsKIAogZW51bSBjbGFzcyBB
bGxvd2VkRmlsdGVyRnVuY3Rpb25zIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDI1NDgw
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDYgKzMzMywxMSBAQCBzdGF0aWMgaW5saW5lIFJl
ZlB0cjxTdHlsZUltYWdlPiBibGVuZEZ1CiAgICAgaWYgKCFmcm9tIHx8ICF0bykKICAgICAgICAg
cmV0dXJuIHRvOwogCisgICAgZnJvbSA9IGZyb20tPnNlbGVjdGVkSW1hZ2UoKTsKKyAgICB0byA9
IHRvLT5zZWxlY3RlZEltYWdlKCk7CisgICAgQVNTRVJUKHRvKTsKKyAgICBBU1NFUlQoZnJvbSk7
CisKICAgICAvLyBBbmltYXRpb24gYmV0d2VlbiB0d28gZ2VuZXJhdGVkIGltYWdlcy4gQ3Jvc3Mg
ZmFkZSBmb3IgYWxsIG90aGVyIGNhc2VzLgogICAgIGlmIChpczxTdHlsZUdlbmVyYXRlZEltYWdl
PigqZnJvbSkgJiYgaXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKnRvKSkgewogICAgICAgICBDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlJiBmcm9tR2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5bGVHZW5lcmF0
ZWRJbWFnZT4oKmZyb20pLmltYWdlVmFsdWUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gMjU0ODA4KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTYyLDcgKzk2Miw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6
OnBhaW50RmlsbExheWUKIAogICAgICAgICAgICAgYXV0byBkcmF3UmVzdWx0ID0gY29udGV4dC5k
cmF3VGlsZWRJbWFnZSgqaW1hZ2UsIGdlb21ldHJ5LmRlc3RSZWN0KCksIHRvTGF5b3V0UG9pbnQo
Z2VvbWV0cnkucmVsYXRpdmVQaGFzZSgpKSwgZ2VvbWV0cnkudGlsZVNpemUoKSwgZ2VvbWV0cnku
c3BhY2VTaXplKCksIG9wdGlvbnMpOwogICAgICAgICAgICAgaWYgKGRyYXdSZXN1bHQgPT0gSW1h
Z2VEcmF3UmVzdWx0OjpEaWRSZXF1ZXN0RGVjb2RpbmcpIHsKLSAgICAgICAgICAgICAgICBBU1NF
UlQoYmdJbWFnZS0+aXNDYWNoZWRJbWFnZSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoYmdJ
bWFnZS0+aGFzQ2FjaGVkSW1hZ2UoKSk7CiAgICAgICAgICAgICAgICAgYmdJbWFnZS0+Y2FjaGVk
SW1hZ2UoKS0+YWRkQ2xpZW50V2FpdGluZ0ZvckFzeW5jRGVjb2RpbmcoKnRoaXMpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5jcHAJKHJldmlzaW9uIDI1
NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlU3R5
bGVJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgUmVuZGVySW1hZ2VS
ZXNvdXJjZVN0eWxlSW1hZ2U6OlJlbmRlckltYQogCiB2b2lkIFJlbmRlckltYWdlUmVzb3VyY2VT
dHlsZUltYWdlOjppbml0aWFsaXplKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQogewotICAgIFJl
bmRlckltYWdlUmVzb3VyY2U6OmluaXRpYWxpemUocmVuZGVyZXIsIG1fc3R5bGVJbWFnZS0+aXND
YWNoZWRJbWFnZSgpID8gbV9zdHlsZUltYWdlLmdldCgpLmNhY2hlZEltYWdlKCkgOiBudWxscHRy
KTsKKyAgICBSZW5kZXJJbWFnZVJlc291cmNlOjppbml0aWFsaXplKHJlbmRlcmVyLCBtX3N0eWxl
SW1hZ2UtPmhhc0NhY2hlZEltYWdlKCkgPyBtX3N0eWxlSW1hZ2UuZ2V0KCkuY2FjaGVkSW1hZ2Uo
KSA6IG51bGxwdHIpOwogICAgIG1fc3R5bGVJbWFnZS0+YWRkQ2xpZW50KHRoaXMtPnJlbmRlcmVy
KCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDcsNyArMjEw
Nyw3IEBAIHN0YXRpYyBib29sIGNhbkRpcmVjdGx5Q29tcG9zaXRlQmFja2dyb3UKIAogICAgIC8v
IEZJWE1FOiBzdXBwb3J0IGdyYWRpZW50cyB3aXRoIGlzR2VuZXJhdGVkSW1hZ2UuCiAgICAgYXV0
byogc3R5bGVJbWFnZSA9IGZpbGxMYXllci5pbWFnZSgpOwotICAgIGlmICghc3R5bGVJbWFnZS0+
aXNDYWNoZWRJbWFnZSgpKQorICAgIGlmICghc3R5bGVJbWFnZS0+aGFzQ2FjaGVkSW1hZ2UoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byogaW1hZ2UgPSBzdHlsZUltYWdlLT5j
YWNoZWRJbWFnZSgpLT5pbWFnZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1NoYXBlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TaGFwZVZhbHVlLmNwcAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1NoYXBlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3
ICszNSw3IEBAIGJvb2wgU2hhcGVWYWx1ZTo6aXNJbWFnZVZhbGlkKCkgY29uc3QKIHsKICAgICBp
ZiAoIW1faW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9pbWFnZS0+aXND
YWNoZWRJbWFnZSgpKSB7CisgICAgaWYgKG1faW1hZ2UtPmhhc0NhY2hlZEltYWdlKCkpIHsKICAg
ICAgICAgYXV0byogY2FjaGVkSW1hZ2UgPSBtX2ltYWdlLT5jYWNoZWRJbWFnZSgpOwogICAgICAg
ICByZXR1cm4gY2FjaGVkSW1hZ2UgJiYgY2FjaGVkSW1hZ2UtPmhhc0ltYWdlKCk7CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hl
ZEltYWdlLmNwcAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsyNCw2
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgog
Ci0jaW5jbHVkZSAiQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0ltYWdlU2V0
VmFsdWUuaCIKICNpbmNsdWRlICJDU1NJbWFnZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1h
Z2UuaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCkBAIC0zMywxOSArMzEsMTQgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1TdHlsZUNhY2hlZEltYWdlOjpTdHlsZUNhY2hlZEltYWdl
KENTU1ZhbHVlJiBjc3NWYWx1ZSkKK1N0eWxlQ2FjaGVkSW1hZ2U6OlN0eWxlQ2FjaGVkSW1hZ2Uo
Q1NTSW1hZ2VWYWx1ZSYgY3NzVmFsdWUsIGZsb2F0IHNjYWxlRmFjdG9yKQogICAgIDogbV9jc3NW
YWx1ZShjc3NWYWx1ZSkKKyAgICAsIG1fc2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpCiB7Ci0gICAg
QVNTRVJUKGlzPENTU0ltYWdlVmFsdWU+KG1fY3NzVmFsdWUpIHx8IGlzPENTU0ltYWdlU2V0VmFs
dWU+KG1fY3NzVmFsdWUpIHx8IGlzPENTU0N1cnNvckltYWdlVmFsdWU+KG1fY3NzVmFsdWUpKTsK
LQogICAgIG1faXNDYWNoZWRJbWFnZSA9IHRydWU7Ci0KLSAgICAvLyBDU1NJbWFnZVZhbHVlIGRv
ZXNuJ3QgZ2V0IGludmFsaWRhdGVkIHNvIHdlIGNhbiBncmFiIHRoZSBDYWNoZWRJbWFnZSBpbW1l
ZGlhdGVseSBpZiBpdCBleGlzdHMuCi0gICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KG1fY3NzVmFs
dWUpKSB7Ci0gICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPiht
X2Nzc1ZhbHVlLmdldCgpKS5jYWNoZWRJbWFnZSgpOwotICAgICAgICBpZiAobV9jYWNoZWRJbWFn
ZSkKLSAgICAgICAgICAgIG1faXNQZW5kaW5nID0gZmFsc2U7Ci0gICAgfQorICAgIG1fY2FjaGVk
SW1hZ2UgPSBtX2Nzc1ZhbHVlLT5jYWNoZWRJbWFnZSgpOworICAgIGlmIChtX2NhY2hlZEltYWdl
KQorICAgICAgICBtX2lzUGVuZGluZyA9IGZhbHNlOwogfQogCiBTdHlsZUNhY2hlZEltYWdlOjp+
U3R5bGVDYWNoZWRJbWFnZSgpID0gZGVmYXVsdDsKQEAgLTY4LDQxICs2MSwxNCBAQCBib29sIFN0
eWxlQ2FjaGVkSW1hZ2U6Om9wZXJhdG9yPT0oY29uc3QgCiAKIFVSTCBTdHlsZUNhY2hlZEltYWdl
OjppbWFnZVVSTCgpCiB7Ci0gICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KG1fY3NzVmFsdWUpKQot
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZS5nZXQoKSku
dXJsKCk7Ci0KLSAgICBpZiAoaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4obV9jc3NWYWx1ZSkpCi0gICAg
ICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPihtX2Nzc1ZhbHVlLmdldCgpKS5i
ZXN0SW1hZ2VGb3JTY2FsZUZhY3RvclVSTCgpOwotCi0gICAgaWYgKGlzPENTU0N1cnNvckltYWdl
VmFsdWU+KG1fY3NzVmFsdWUuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ3Vy
c29ySW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZS5nZXQoKSkuaW1hZ2VVUkwoKTsKLQotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIG1fY3NzVmFsdWUt
PnVybCgpOwogfQogCiB2b2lkIFN0eWxlQ2FjaGVkSW1hZ2U6OmxvYWQoQ2FjaGVkUmVzb3VyY2VM
b2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKQogewog
ICAgIEFTU0VSVChtX2lzUGVuZGluZyk7CiAgICAgbV9pc1BlbmRpbmcgPSBmYWxzZTsKLQotICAg
IGlmIChpczxDU1NJbWFnZVZhbHVlPihtX2Nzc1ZhbHVlKSkgewotICAgICAgICBhdXRvJiBpbWFn
ZVZhbHVlID0gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZS5nZXQoKSk7Ci0gICAg
ICAgIG1fY2FjaGVkSW1hZ2UgPSBpbWFnZVZhbHVlLmxvYWRJbWFnZShsb2FkZXIsIG9wdGlvbnMp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+
KG1fY3NzVmFsdWUpKSB7Ci0gICAgICAgIGF1dG8mIGltYWdlU2V0VmFsdWUgPSBkb3duY2FzdDxD
U1NJbWFnZVNldFZhbHVlPihtX2Nzc1ZhbHVlLmdldCgpKTsKLSAgICAgICAgc3RkOjp0aWUobV9j
YWNoZWRJbWFnZSwgbV9zY2FsZUZhY3RvcikgPSBpbWFnZVNldFZhbHVlLmxvYWRCZXN0Rml0SW1h
Z2UobG9hZGVyLCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChp
czxDU1NDdXJzb3JJbWFnZVZhbHVlPihtX2Nzc1ZhbHVlLmdldCgpKSkgewotICAgICAgICBhdXRv
JiBjdXJzb3JWYWx1ZSA9IGRvd25jYXN0PENTU0N1cnNvckltYWdlVmFsdWU+KG1fY3NzVmFsdWUu
Z2V0KCkpOwotICAgICAgICBzdGQ6OnRpZShtX2NhY2hlZEltYWdlLCBtX3NjYWxlRmFjdG9yKSA9
IGN1cnNvclZhbHVlLmxvYWRJbWFnZShsb2FkZXIsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIG1fY2FjaGVkSW1hZ2UgPSBtX2Nzc1ZhbHVlLT5sb2FkSW1hZ2UobG9hZGVy
LCBvcHRpb25zKTsKIH0KIAogQ2FjaGVkSW1hZ2UqIFN0eWxlQ2FjaGVkSW1hZ2U6OmNhY2hlZElt
YWdlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNh
Y2hlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlQ2FjaGVkSW1hZ2UuaAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjks
MTMgKzI5LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU1ZhbHVlOworY2xh
c3MgQ1NTSW1hZ2VWYWx1ZTsKIGNsYXNzIENhY2hlZEltYWdlOwogY2xhc3MgRG9jdW1lbnQ7CiAK
IGNsYXNzIFN0eWxlQ2FjaGVkSW1hZ2UgZmluYWwgOiBwdWJsaWMgU3R5bGVJbWFnZSB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTdHlsZUNh
Y2hlZEltYWdlPiBjcmVhdGUoQ1NTVmFsdWUmIGNzc1ZhbHVlKSB7IHJldHVybiBhZG9wdFJlZigq
bmV3IFN0eWxlQ2FjaGVkSW1hZ2UoY3NzVmFsdWUpKTsgfQorICAgIHN0YXRpYyBSZWY8U3R5bGVD
YWNoZWRJbWFnZT4gY3JlYXRlKENTU0ltYWdlVmFsdWUmIGNzc1ZhbHVlLCBmbG9hdCBzY2FsZUZh
Y3RvciA9IDEpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3R5bGVDYWNoZWRJbWFnZShjc3NWYWx1
ZSwgc2NhbGVGYWN0b3IpKTsgfQogICAgIHZpcnR1YWwgflN0eWxlQ2FjaGVkSW1hZ2UoKTsKIAog
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZUltYWdlJiBvdGhlcikgY29uc3QgZmluYWw7
CkBAIC02NCwxMCArNjUsMTAgQEAgcHVibGljOgogICAgIGJvb2wga25vd25Ub0JlT3BhcXVlKGNv
bnN0IFJlbmRlckVsZW1lbnQqKSBjb25zdCBmaW5hbDsKIAogcHJpdmF0ZToKLSAgICBTdHlsZUNh
Y2hlZEltYWdlKENTU1ZhbHVlJik7CisgICAgU3R5bGVDYWNoZWRJbWFnZShDU1NJbWFnZVZhbHVl
JiwgZmxvYXQpOwogICAgIFVSTCBpbWFnZVVSTCgpOwogCi0gICAgUmVmPENTU1ZhbHVlPiBtX2Nz
c1ZhbHVlOworICAgIFJlZjxDU1NJbWFnZVZhbHVlPiBtX2Nzc1ZhbHVlOwogICAgIGJvb2wgbV9p
c1BlbmRpbmcgeyB0cnVlIH07CiAgICAgbXV0YWJsZSBmbG9hdCBtX3NjYWxlRmFjdG9yIHsgMSB9
OwogICAgIG11dGFibGUgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkSW1hZ2U+IG1fY2FjaGVk
SW1hZ2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJ
bWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0
eWxlQ3Vyc29ySW1hZ2UuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9TdHlsZUN1cnNvckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5v
cmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUtMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3R5bGVD
dXJzb3JJbWFnZS5oIgorCisjaW5jbHVkZSAiQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIgorI2luY2x1
ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiUmVu
ZGVyRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU3R5bGVDdXJzb3JJ
bWFnZTo6b3BlcmF0b3I9PShjb25zdCBTdHlsZUltYWdlJiBvdGhlcikgY29uc3QKK3sKKyAgICBp
ZiAoIWlzPFN0eWxlQ3Vyc29ySW1hZ2U+KG90aGVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIGVxdWFscyhkb3duY2FzdDxTdHlsZUN1cnNvckltYWdlPihvdGhlcikpOwor
fQorCitSZWY8Q1NTVmFsdWU+IFN0eWxlQ3Vyc29ySW1hZ2U6OmNzc1ZhbHVlKCkgY29uc3QKK3sg
CisgICAgcmV0dXJuIG1fY3NzVmFsdWUuY29weVJlZigpOyAKK30KKworU3R5bGVDdXJzb3JJbWFn
ZTo6U3R5bGVDdXJzb3JJbWFnZShDU1NDdXJzb3JJbWFnZVZhbHVlJiBjc3NWYWx1ZSkKKyAgICA6
IG1fY3NzVmFsdWUoY3NzVmFsdWUpCit7CisgICAgbV9pc0N1cnNvckltYWdlID0gdHJ1ZTsKK30K
KworU3R5bGVDdXJzb3JJbWFnZTo6flN0eWxlQ3Vyc29ySW1hZ2UoKSA9IGRlZmF1bHQ7CisKK3N0
ZDo6cGFpcjxDU1NWYWx1ZSosIGZsb2F0PiBTdHlsZUN1cnNvckltYWdlOjpzZWxlY3RCZXN0Rml0
SW1hZ2UoRG9jdW1lbnQqIGRvY3VtZW50KSBjb25zdAoreworICAgIHJldHVybiBtX2Nzc1ZhbHVl
LT5zZWxlY3RCZXN0Rml0SW1hZ2UoZG9jdW1lbnQpOworfQorCit2b2lkIFN0eWxlQ3Vyc29ySW1h
Z2U6OnNldENvbnRhaW5lckNvbnRleHRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlciwgY29uc3QgRmxvYXRTaXplJiBjb250YWluZXJTaXplLCBmbG9hdCBjb250YWluZXJa
b29tKQoreworICAgIGlmICghaGFzQ2FjaGVkSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGNhY2hlZEltYWdlKCktPnNldENvbnRhaW5lckNvbnRleHRGb3JDbGllbnQocmVuZGVyZXIsIExh
eW91dFNpemUoY29udGFpbmVyU2l6ZSksIGNvbnRhaW5lclpvb20sIG1fY3NzVmFsdWUtPmltYWdl
VVJMKCkpOworfQorCit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4
ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1cnNv
ckltYWdlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlQ3Vyc29ySW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAg
ICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAg
ICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhh
bmRsZS5oIgorI2luY2x1ZGUgIlN0eWxlTXVsdGlJbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIENTU0N1cnNvckltYWdlVmFsdWU7CitjbGFzcyBDYWNoZWRJbWFnZTsKK2Ns
YXNzIERvY3VtZW50OworCitjbGFzcyBTdHlsZUN1cnNvckltYWdlIGZpbmFsIDogcHVibGljIFN0
eWxlTXVsdGlJbWFnZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxTdHlsZUN1cnNvckltYWdlPiBjcmVhdGUoQ1NTQ3Vyc29ySW1hZ2VWYWx1
ZSYgY3NzVmFsdWUpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3R5bGVDdXJzb3JJbWFnZShjc3NW
YWx1ZSkpOyB9CisgICAgdmlydHVhbCB+U3R5bGVDdXJzb3JJbWFnZSgpOworICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBTdHlsZUltYWdlJiBvdGhlcikgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAg
ICB2b2lkIHNldENvbnRhaW5lckNvbnRleHRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50
JiByZW5kZXJlciwgY29uc3QgRmxvYXRTaXplJiBjb250YWluZXJTaXplLCBmbG9hdCBjb250YWlu
ZXJab29tKSBmaW5hbDsKKyAgICBSZWY8Q1NTVmFsdWU+IGNzc1ZhbHVlKCkgY29uc3QgZmluYWw7
CisgICAgc3RkOjpwYWlyPENTU1ZhbHVlKiwgZmxvYXQ+IHNlbGVjdEJlc3RGaXRJbWFnZShEb2N1
bWVudCopIGNvbnN0IGZpbmFsOworCitwcml2YXRlOgorICAgIFN0eWxlQ3Vyc29ySW1hZ2UoQ1NT
Q3Vyc29ySW1hZ2VWYWx1ZSYpOworICAgIFJlZjxDU1NDdXJzb3JJbWFnZVZhbHVlPiBtX2Nzc1Zh
bHVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX1NUWUxFX0lNQUdFKFN0eWxlQ3Vyc29ySW1hZ2UsIGlzQ3Vyc29ySW1hZ2UpCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJ
bWFnZS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02
NywxOCArNjcsMjggQEAgcHVibGljOgogICAgIHZpcnR1YWwgZmxvYXQgaW1hZ2VTY2FsZUZhY3Rv
cigpIGNvbnN0IHsgcmV0dXJuIDE7IH0KICAgICB2aXJ0dWFsIGJvb2wga25vd25Ub0JlT3BhcXVl
KGNvbnN0IFJlbmRlckVsZW1lbnQqKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBDYWNoZWRJbWFn
ZSogY2FjaGVkSW1hZ2UoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBTdHlsZUlt
YWdlKiBzZWxlY3RlZEltYWdlKCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgY29uc3Qg
U3R5bGVJbWFnZSogc2VsZWN0ZWRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KIAogICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBpc0NhY2hlZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pc0Nh
Y2hlZEltYWdlOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzR2VuZXJhdGVkSW1hZ2UoKSBj
b25zdCB7IHJldHVybiBtX2lzR2VuZXJhdGVkSW1hZ2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgaXNDdXJzb3JJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDdXJzb3JJbWFnZTsgfQorICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBpc0ltYWdlU2V0KCkgY29uc3QgeyByZXR1cm4gbV9pc0ltYWdl
U2V0OyB9CisKKyAgICBib29sIGhhc0NhY2hlZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pc0Nh
Y2hlZEltYWdlIHx8IHNlbGVjdGVkSW1hZ2UoKS0+aXNDYWNoZWRJbWFnZSgpOyB9CiAKIHByb3Rl
Y3RlZDoKICAgICBTdHlsZUltYWdlKCkKICAgICAgICAgOiBtX2lzQ2FjaGVkSW1hZ2UoZmFsc2Up
CiAgICAgICAgICwgbV9pc0dlbmVyYXRlZEltYWdlKGZhbHNlKQorICAgICAgICAsIG1faXNJbWFn
ZVNldChmYWxzZSkKKyAgICAgICAgLCBtX2lzQ3Vyc29ySW1hZ2UoZmFsc2UpCiAgICAgewogICAg
IH0KICAgICBib29sIG1faXNDYWNoZWRJbWFnZSA6IDE7CiAgICAgYm9vbCBtX2lzR2VuZXJhdGVk
SW1hZ2UgOiAxOworICAgIGJvb2wgbV9pc0ltYWdlU2V0IDogMTsKKyAgICBib29sIG1faXNDdXJz
b3JJbWFnZSA6IDE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlU2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgQW50
dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgRGly
ayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUt
MjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTdHlsZUltYWdlU2V0LmgiCisKKyNpbmNsdWRlICJDU1NJbWFn
ZVNldFZhbHVlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworCitTdHlsZUltYWdlU2V0OjpT
dHlsZUltYWdlU2V0KENTU0ltYWdlU2V0VmFsdWUmIGNzc1ZhbHVlKQorICAgIDogbV9jc3NWYWx1
ZShjc3NWYWx1ZSkKK3sKKyAgICBtX2lzSW1hZ2VTZXQgPSB0cnVlOworfQorCitib29sIFN0eWxl
SW1hZ2VTZXQ6Om9wZXJhdG9yPT0oY29uc3QgU3R5bGVJbWFnZSYgb3RoZXIpIGNvbnN0Cit7Cisg
ICAgaWYgKCFpczxTdHlsZUltYWdlU2V0PihvdGhlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiBlcXVhbHMoZG93bmNhc3Q8U3R5bGVJbWFnZVNldD4ob3RoZXIpKTsKK30K
K1N0eWxlSW1hZ2VTZXQ6On5TdHlsZUltYWdlU2V0KCkgPSBkZWZhdWx0OworCitSZWY8Q1NTVmFs
dWU+IFN0eWxlSW1hZ2VTZXQ6OmNzc1ZhbHVlKCkgY29uc3QKK3sgCisgICAgcmV0dXJuIG1fY3Nz
VmFsdWUuY29weVJlZigpOyAKK30KKworc3RkOjpwYWlyPENTU1ZhbHVlKiwgZmxvYXQ+IFN0eWxl
SW1hZ2VTZXQ6OnNlbGVjdEJlc3RGaXRJbWFnZShEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fY3NzVmFsdWUtPnNlbGVjdEJlc3RGaXRJbWFnZShkb2N1bWVudCk7Cit9
CisKK30KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TdHlsZUltYWdlU2V0LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAt
MCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlU2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAwMCBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxs
ZXIgKG11ZWxsZXJAa2RlLm9yZykKKyogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogQ29weXJpZ2h0IChD
KSAyMDIwIE5vYW0gUm9zZW50aGFsIChub2FtQHdlYmtpdC5vcmcpCisqCisqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyoKKyogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKgorKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdHls
ZU11bHRpSW1hZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NWYWx1ZTsK
K2NsYXNzIENTU0ltYWdlU2V0VmFsdWU7CitjbGFzcyBEb2N1bWVudDsKKworY2xhc3MgU3R5bGVJ
bWFnZVNldCBmaW5hbCA6IHB1YmxpYyBTdHlsZU11bHRpSW1hZ2UgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U3R5bGVJbWFnZVNldD4gY3Jl
YXRlKENTU0ltYWdlU2V0VmFsdWUmIGNzc1ZhbHVlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFN0
eWxlSW1hZ2VTZXQoY3NzVmFsdWUpKTsgfQorICAgIHZpcnR1YWwgflN0eWxlSW1hZ2VTZXQoKTsK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVJbWFnZSYgb3RoZXIpIGNvbnN0OworICAg
IFJlZjxDU1NWYWx1ZT4gY3NzVmFsdWUoKSBjb25zdCBmaW5hbDsKKworcHJvdGVjdGVkOgorICAg
IHN0ZDo6cGFpcjxDU1NWYWx1ZSosIGZsb2F0PiBzZWxlY3RCZXN0Rml0SW1hZ2UoRG9jdW1lbnQq
KSBjb25zdCBmaW5hbDsKKyAgICAKK3ByaXZhdGU6CisgICAgU3R5bGVJbWFnZVNldChDU1NJbWFn
ZVNldFZhbHVlJik7CisgICAgUmVmPENTU0ltYWdlU2V0VmFsdWU+IG1fY3NzVmFsdWU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfU1RZTEVf
SU1BR0UoU3R5bGVJbWFnZVNldCwgaXNJbWFnZVNldCkKClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlU2V0LmgKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVN
dWx0aUltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvU3R5bGVNdWx0aUltYWdlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0Br
ZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUu
b3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LTIwMDgsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIE5vYW0gUm9zZW50aGFs
IChub2FtQHdlYmtpdC5vcmcpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3R5
bGVNdWx0aUltYWdlLmgiCisKKyNpbmNsdWRlICJDU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgiCisj
aW5jbHVkZSAiQ1NTSW1hZ2VTZXRWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIK
KyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
KyNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVHZW5lcmF0ZWRJ
bWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N0eWxlTXVsdGlJbWFnZTo6U3R5bGVN
dWx0aUltYWdlKCkKK3sKK30KKworU3R5bGVNdWx0aUltYWdlOjp+U3R5bGVNdWx0aUltYWdlKCkg
PSBkZWZhdWx0OworCitib29sIFN0eWxlTXVsdGlJbWFnZTo6ZXF1YWxzKGNvbnN0IFN0eWxlTXVs
dGlJbWFnZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgYXV0byYgb3RoZXJDYWNoZWQgPSBkb3duY2Fz
dDxTdHlsZU11bHRpSW1hZ2U+KG90aGVyKTsKKyAgICBpZiAoJm90aGVyQ2FjaGVkID09IHRoaXMp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICghbV9pc1BlbmRpbmcgJiYgIW90aGVyQ2Fj
aGVkLm1faXNQZW5kaW5nICYmIG1fc2VsZWN0ZWRJbWFnZS5nZXQoKSA9PSBvdGhlckNhY2hlZC5t
X3NlbGVjdGVkSW1hZ2UuZ2V0KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBTdHlsZU11bHRpSW1hZ2U6OmxvYWQoQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKQoreworICAg
IEFTU0VSVChtX2lzUGVuZGluZyk7CisgICAgbV9pc1BlbmRpbmcgPSBmYWxzZTsKKyAgICBDU1NW
YWx1ZSogdmFsdWUgPSBudWxscHRyOworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMTsKKyAgICBz
dGQ6OnRpZSh2YWx1ZSwgc2NhbGVGYWN0b3IpID0gc2VsZWN0QmVzdEZpdEltYWdlKGxvYWRlci5k
b2N1bWVudCgpKTsKKyAgICBBU1NFUlQoaXM8Q1NTSW1hZ2VWYWx1ZT4odmFsdWUpIHx8IGlzPENT
U0ltYWdlR2VuZXJhdG9yVmFsdWU+KHZhbHVlKSk7CisKKyAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZT4odmFsdWUpKSB7CisgICAgICAgIG1fc2VsZWN0ZWRJbWFnZSA9IFN0eWxlR2Vu
ZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPigqdmFs
dWUpKTsKKyAgICAgICAgbV9zZWxlY3RlZEltYWdlLT5sb2FkKGxvYWRlciwgb3B0aW9ucyk7Cisg
ICAgfQorICAgIAorICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPih2YWx1ZSkpIHsKKyAgICAgICAg
bV9zZWxlY3RlZEltYWdlID0gU3R5bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0PENTU0lt
YWdlVmFsdWU+KCp2YWx1ZSksIHNjYWxlRmFjdG9yKTsKKyAgICAgICAgaWYgKG1fc2VsZWN0ZWRJ
bWFnZS0+aXNQZW5kaW5nKCkpCisgICAgICAgICAgICBtX3NlbGVjdGVkSW1hZ2UtPmxvYWQobG9h
ZGVyLCBvcHRpb25zKTsKKyAgICB9Cit9CisKK0NhY2hlZEltYWdlKiBTdHlsZU11bHRpSW1hZ2U6
OmNhY2hlZEltYWdlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fc2VsZWN0ZWRJbWFnZS0+Y2FjaGVkSW1h
Z2UoKTsKK30KKworV3JhcHBlZEltYWdlUHRyIFN0eWxlTXVsdGlJbWFnZTo6ZGF0YSgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX3NlbGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UtPmRhdGEoKTsKK30KKworYm9vbCBTdHlsZU11bHRp
SW1hZ2U6OmNhblJlbmRlcihjb25zdCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgZmxvYXQgbXVs
dGlwbGllcikgY29uc3QKK3sKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UtPmNhblJlbmRlcihyZW5kZXJl
ciwgbXVsdGlwbGllcik7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjppc1BlbmRpbmcoKSBj
b25zdAoreworICAgIHJldHVybiBtX2lzUGVuZGluZzsKK30KKworYm9vbCBTdHlsZU11bHRpSW1h
Z2U6OmlzTG9hZGVkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UtPmlzTG9hZGVkKCk7
Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjplcnJvck9jY3VycmVkKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBtX3NlbGVjdGVkSW1hZ2UtPmVycm9yT2NjdXJyZWQoKTsKK30KKworRmxvYXRTaXplIFN0eWxl
TXVsdGlJbWFnZTo6aW1hZ2VTaXplKGNvbnN0IFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBmbG9h
dCBtdWx0aXBsaWVyKSBjb25zdAoreworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQorICAgICAg
ICByZXR1cm4geyB9OworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UtPmltYWdlU2l6ZShyZW5k
ZXJlciwgbXVsdGlwbGllcik7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjppbWFnZUhhc1Jl
bGF0aXZlV2lkdGgoKSBjb25zdAoreworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fc2VsZWN0ZWRJbWFnZS0+aW1hZ2VIYXNSZWxh
dGl2ZVdpZHRoKCk7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjppbWFnZUhhc1JlbGF0aXZl
SGVpZ2h0KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UtPmltYWdlSGFzUmVsYXRpdmVI
ZWlnaHQoKTsKK30KKwordm9pZCBTdHlsZU11bHRpSW1hZ2U6OmNvbXB1dGVJbnRyaW5zaWNEaW1l
bnNpb25zKGNvbnN0IFJlbmRlckVsZW1lbnQqIGVsZW1lbnQsIExlbmd0aCYgaW50cmluc2ljV2lk
dGgsIExlbmd0aCYgaW50cmluc2ljSGVpZ2h0LCBGbG9hdFNpemUmIGludHJpbnNpY1JhdGlvKQor
eworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQorICAgICAgICByZXR1cm47CisgICAgbV9zZWxl
Y3RlZEltYWdlLT5jb21wdXRlSW50cmluc2ljRGltZW5zaW9ucyhlbGVtZW50LCBpbnRyaW5zaWNX
aWR0aCwgaW50cmluc2ljSGVpZ2h0LCBpbnRyaW5zaWNSYXRpbyk7Cit9CisKK2Jvb2wgU3R5bGVN
dWx0aUltYWdlOjp1c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
c2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3NlbGVj
dGVkSW1hZ2UtPnVzZXNJbWFnZUNvbnRhaW5lclNpemUoKTsKK30KKwordm9pZCBTdHlsZU11bHRp
SW1hZ2U6OnNldENvbnRhaW5lckNvbnRleHRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50
JiByZW5kZXJlciwgY29uc3QgRmxvYXRTaXplJiBjb250YWluZXJTaXplLCBmbG9hdCBjb250YWlu
ZXJab29tKQoreworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9zZWxlY3RlZEltYWdlLT5zZXRDb250YWluZXJDb250ZXh0Rm9yUmVuZGVyZXIocmVuZGVy
ZXIsIGNvbnRhaW5lclNpemUsIGNvbnRhaW5lclpvb20pOworfQorCit2b2lkIFN0eWxlTXVsdGlJ
bWFnZTo6YWRkQ2xpZW50KFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyKQoreworICAgIGlmICghbV9z
ZWxlY3RlZEltYWdlKQorICAgICAgICByZXR1cm47CisgICAgbV9zZWxlY3RlZEltYWdlLT5hZGRD
bGllbnQocmVuZGVyZXIpOworfQorCit2b2lkIFN0eWxlTXVsdGlJbWFnZTo6cmVtb3ZlQ2xpZW50
KFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyKQoreworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQor
ICAgICAgICByZXR1cm47CisgICAgbV9zZWxlY3RlZEltYWdlLT5yZW1vdmVDbGllbnQocmVuZGVy
ZXIpOworfQorCitSZWZQdHI8SW1hZ2U+IFN0eWxlTXVsdGlJbWFnZTo6aW1hZ2UoUmVuZGVyRWxl
bWVudCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBpZiAo
IW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1f
c2VsZWN0ZWRJbWFnZS0+aW1hZ2UocmVuZGVyZXIsIHNpemUpOworfQorCitmbG9hdCBTdHlsZU11
bHRpSW1hZ2U6OmltYWdlU2NhbGVGYWN0b3IoKSBjb25zdAoreworICAgIGlmICghbV9zZWxlY3Rl
ZEltYWdlKQorICAgICAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlLT5p
bWFnZVNjYWxlRmFjdG9yKCk7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjprbm93blRvQmVP
cGFxdWUoY29uc3QgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIpIGNvbnN0Cit7CisgICAgaWYgKCFt
X3NlbGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9zZWxl
Y3RlZEltYWdlLT5rbm93blRvQmVPcGFxdWUocmVuZGVyZXIpOworfQorCit9CgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUltYWdl
LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9TdHlsZU11bHRpSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUltYWdlLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQorKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlzdG8gKGtv
aXZpc3RvQGtkZS5vcmcpCisqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxs
ZXJAa2RlLm9yZykKKyogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogQ29weXJpZ2h0IChDKSAyMDIwIE5v
YW0gUm9zZW50aGFsIChub2FtQHdlYmtpdC5vcmcpCisqCisqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyoKKyogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKgorKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUhhbmRsZS5oIgorI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDU1NWYWx1ZTsKK2NsYXNzIENTU0ltYWdlU2V0VmFsdWU7CitjbGFzcyBDYWNo
ZWRJbWFnZTsKK2NsYXNzIERvY3VtZW50OworCitjbGFzcyBTdHlsZU11bHRpSW1hZ2UgOiBwdWJs
aWMgU3R5bGVJbWFnZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+U3R5bGVNdWx0aUltYWdlKCk7CisKKyAgICBDYWNoZWRJbWFnZSogY2FjaGVk
SW1hZ2UoKSBjb25zdCBmaW5hbDsKKworICAgIFdyYXBwZWRJbWFnZVB0ciBkYXRhKCkgY29uc3Qg
ZmluYWw7CisKKyAgICBib29sIGNhblJlbmRlcihjb25zdCBSZW5kZXJFbGVtZW50KiwgZmxvYXQg
bXVsdGlwbGllcikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1BlbmRpbmcoKSBjb25zdCBmaW5h
bDsKKyAgICB2b2lkIGxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJjZUxv
YWRlck9wdGlvbnMmKSBmaW5hbDsKKyAgICBib29sIGlzTG9hZGVkKCkgY29uc3QgZmluYWw7Cisg
ICAgYm9vbCBlcnJvck9jY3VycmVkKCkgY29uc3QgZmluYWw7CisgICAgRmxvYXRTaXplIGltYWdl
U2l6ZShjb25zdCBSZW5kZXJFbGVtZW50KiwgZmxvYXQgbXVsdGlwbGllcikgY29uc3QgZmluYWw7
CisgICAgYm9vbCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdCBmaW5hbDsKKyAgICBib29s
IGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGNvbXB1dGVJ
bnRyaW5zaWNEaW1lbnNpb25zKGNvbnN0IFJlbmRlckVsZW1lbnQqLCBMZW5ndGgmIGludHJpbnNp
Y1dpZHRoLCBMZW5ndGgmIGludHJpbnNpY0hlaWdodCwgRmxvYXRTaXplJiBpbnRyaW5zaWNSYXRp
bykgZmluYWw7CisgICAgYm9vbCB1c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29uc3QgZmluYWw7
CisgICAgdm9pZCBzZXRDb250YWluZXJDb250ZXh0Rm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyRWxl
bWVudCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0KTsKKyAgICB2b2lkIGFkZENsaWVudChSZW5k
ZXJFbGVtZW50KikgZmluYWw7CisgICAgdm9pZCByZW1vdmVDbGllbnQoUmVuZGVyRWxlbWVudCop
IGZpbmFsOworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UoUmVuZGVyRWxlbWVudCosIGNvbnN0IEZs
b2F0U2l6ZSYpIGNvbnN0IGZpbmFsOworICAgIGZsb2F0IGltYWdlU2NhbGVGYWN0b3IoKSBjb25z
dCBmaW5hbDsKKyAgICBib29sIGtub3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJFbGVtZW50Kikg
Y29uc3QgZmluYWw7CisgICAgY29uc3QgU3R5bGVJbWFnZSogc2VsZWN0ZWRJbWFnZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fc2VsZWN0ZWRJbWFnZS5nZXQoKTsgfQorICAgIFN0eWxlSW1hZ2Uq
IHNlbGVjdGVkSW1hZ2UoKSBmaW5hbCB7IHJldHVybiBtX3NlbGVjdGVkSW1hZ2UuZ2V0KCk7IH0K
KworcHJvdGVjdGVkOgorICAgIFN0eWxlTXVsdGlJbWFnZSgpOworICAgIGJvb2wgZXF1YWxzKGNv
bnN0IFN0eWxlTXVsdGlJbWFnZSYgb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgc3RkOjpwYWly
PENTU1ZhbHVlKiwgZmxvYXQ+IHNlbGVjdEJlc3RGaXRJbWFnZShEb2N1bWVudCopIGNvbnN0ID0g
MDsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbV9zZWxlY3RlZEltYWdlOwor
ICAgIGJvb2wgbV9pc1BlbmRpbmcgeyB0cnVlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
U3R5bGVNdWx0aUltYWdlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAs
MCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAkocmV2aXNpb24gMjU0ODA4KQorKysg
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDggKzQ2LDEwIEBACiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRl
ICJTdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCIKICNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgi
CisjaW5jbHVkZSAiU3R5bGVDdXJzb3JJbWFnZS5oIgogI2luY2x1ZGUgIlN0eWxlRm9udFNpemVG
dW5jdGlvbnMuaCIKICNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCisjaW5jbHVkZSAi
U3R5bGVJbWFnZVNldC5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJX
aWxsQ2hhbmdlRGF0YS5oIgogCkBAIC0xMzI0LDEzICsxMzI2LDE1IEBAIGlubGluZSB2b2lkIEJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb24KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6
OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihpdGVtLmdldCgpKSksIGRp
ZFNldCk7CiAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGlz
PENTU0ltYWdlU2V0VmFsdWU+KGl0ZW0pKSB7Ci0gICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5
bGUoKS5zZXRDb250ZW50KFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShpdGVtKSwgZGlkU2V0KTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KGl0
ZW0pKSB7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxl
SW1hZ2VTZXQ6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPihpdGVtLmdldCgpKS5p
bWFnZVNldFdpdGhTdHlsZXNSZXNvbHZlZChidWlsZGVyU3RhdGUpKSwgZGlkU2V0KTsKICAgICAg
ICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaXM8Q1NTSW1h
Z2VWYWx1ZT4oaXRlbSkpIHsKLSAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENv
bnRlbnQoU3R5bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKGl0ZW0pLCBkaWRTZXQpOworICAgICAgICAg
ICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChTdHlsZUNhY2hlZEltYWdlOjpjcmVh
dGUoZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oaXRlbS5nZXQoKSkpLCBkaWRTZXQpOwogICAgICAg
ICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwCShyZXZpc2lv
biAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDEwIEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
ICNpbmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgi
CisjaW5jbHVkZSAiU3R5bGVDdXJzb3JJbWFnZS5oIgogI2luY2x1ZGUgIlN0eWxlRm9udFNpemVG
dW5jdGlvbnMuaCIKICNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCisjaW5jbHVkZSAi
U3R5bGVJbWFnZVNldC5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybUZ1bmN0aW9ucy5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC03OSwyMSArODEsMzMgQEAgYm9vbCBCdWlsZGVyU3RhdGU6OnVz
ZVNWR1pvb21SdWxlc0ZvckxlbgogICAgIHJldHVybiBpczxTVkdFbGVtZW50PihlbGVtZW50KCkp
ICYmICEoaXM8U1ZHU1ZHRWxlbWVudD4oKmVsZW1lbnQoKSkgJiYgZWxlbWVudCgpLT5wYXJlbnRO
b2RlKCkpOwogfQogCitSZWY8Q1NTVmFsdWU+IEJ1aWxkZXJTdGF0ZTo6cmVzb2x2ZUltYWdlU3R5
bGVzKENTU1ZhbHVlJiB2YWx1ZSkKK3sKKyAgICBpZiAoaXM8Q1NTR3JhZGllbnRWYWx1ZT4odmFs
dWUpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1ZT4odmFsdWUpLmdy
YWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKCp0aGlzKTsKKworICAgIGlmIChpczxDU1NGaWx0ZXJJ
bWFnZVZhbHVlPih2YWx1ZSkpCisgICAgICAgIGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+
KHZhbHVlKS5jcmVhdGVGaWx0ZXJPcGVyYXRpb25zKCp0aGlzKTsKKworICAgIGlmIChpczxDU1NJ
bWFnZVNldFZhbHVlPih2YWx1ZSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVNl
dFZhbHVlPih2YWx1ZSkuaW1hZ2VTZXRXaXRoU3R5bGVzUmVzb2x2ZWQoKnRoaXMpOworCisgICAg
cmV0dXJuIG1ha2VSZWYodmFsdWUpOworfQorCiBSZWZQdHI8U3R5bGVJbWFnZT4gQnVpbGRlclN0
YXRlOjpjcmVhdGVTdHlsZUltYWdlKENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAoaXM8Q1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKSB7Ci0gICAgICAgIGlmIChpczxDU1NHcmFkaWVu
dFZhbHVlPih2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6
Y3JlYXRlKGRvd25jYXN0PENTU0dyYWRpZW50VmFsdWU+KHZhbHVlKS5ncmFkaWVudFdpdGhTdHls
ZXNSZXNvbHZlZCgqdGhpcykpOwotCi0gICAgICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVl
Pih2YWx1ZSkpIHsKLSAgICAgICAgICAgIC8vIEZpbHRlckltYWdlIG5lZWRzIHRvIGNhbGN1bGF0
ZSBGaWx0ZXJPcGVyYXRpb25zLgotICAgICAgICAgICAgZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VW
YWx1ZT4odmFsdWUpLmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoKnRoaXMpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKTsKLSAgICB9CisgICAgaWYgKGlzPENTU0ltYWdlVmFs
dWU+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShkb3du
Y2FzdDxDU1NJbWFnZVZhbHVlPih2YWx1ZSkpOworCisgICAgaWYgKGlzPENTU0N1cnNvckltYWdl
VmFsdWU+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFN0eWxlQ3Vyc29ySW1hZ2U6OmNyZWF0ZShk
b3duY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlPih2YWx1ZSkpOwogCi0gICAgaWYgKGlzPENTU0lt
YWdlVmFsdWU+KHZhbHVlKSB8fCBpczxDU1NJbWFnZVNldFZhbHVlPih2YWx1ZSkgfHwgaXM8Q1NT
Q3Vyc29ySW1hZ2VWYWx1ZT4odmFsdWUpKQotICAgICAgICByZXR1cm4gU3R5bGVDYWNoZWRJbWFn
ZTo6Y3JlYXRlKHZhbHVlKTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFs
dWUpKQorICAgICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0
PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHJlc29sdmVJbWFnZVN0eWxlcyh2YWx1ZSkuZ2V0KCkp
KTsKKyAgICAKKyAgICBpZiAoaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4odmFsdWUpKQorICAgICAgICBy
ZXR1cm4gU3R5bGVJbWFnZVNldDo6Y3JlYXRlKGRvd25jYXN0PENTU0ltYWdlU2V0VmFsdWU+KHJl
c29sdmVJbWFnZVN0eWxlcyh2YWx1ZSkuZ2V0KCkpKTsKIAogICAgIHJldHVybiBudWxscHRyOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oCShyZXZpc2lv
biAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw3IEBAIHB1YmxpYzoKICAgICBib29sIHVzZVNWR1pv
b21SdWxlc0Zvckxlbmd0aCgpIGNvbnN0OwogICAgIFNjb3BlT3JkaW5hbCBzdHlsZVNjb3BlT3Jk
aW5hbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVTY29wZU9yZGluYWw7IH0KIAorICAgIFJlZjxD
U1NWYWx1ZT4gcmVzb2x2ZUltYWdlU3R5bGVzKENTU1ZhbHVlJik7CiAgICAgUmVmUHRyPFN0eWxl
SW1hZ2U+IGNyZWF0ZVN0eWxlSW1hZ2UoQ1NTVmFsdWUmKTsKICAgICBib29sIGNyZWF0ZUZpbHRl
ck9wZXJhdGlvbnMoY29uc3QgQ1NTVmFsdWUmLCBGaWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRp
b25zKTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjU0ODA4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMjAtMDEtMTkgIE5vYW0gUm9z
ZW50aGFsICA8bm9hbUB3ZWJraXQub3JnPgorCisgICAgICAgIC13ZWJraXQtaW1hZ2Utc2V0IHNo
b3VsZCBzdXBwb3J0IGFsbCB0aGUgaW1hZ2UgZnVuY3Rpb25zIFdlYktpdCBzdXBwb3J0cywgbm90
IGp1c3QgdXJsKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTgxOTQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBmYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFz
dC9jc3MvY3Vyc29yLXBhcnNpbmcuaHRtbDoKKyAgICAgICAgICAgICAgICBBZGRlZCBwYXJzaW5n
IHRlc3QgdG8gZW5zdXJlIGFycm93IGltYWdlLXNldHMgZGlzYWJsZSBnZW5lcmF0ZWQgaW1hZ2Vz
CisKKyAgICAgICAgKiBmYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1nZW5lcmF0ZWQtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1nZW5l
cmF0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmct
aW52YWxpZC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNp
bmctaW52YWxpZC5odG1sOgorICAgICAgICAgICAgICAgIEFkZGVkIHBhcnNpbmcgdGVzdHMgZm9y
IG5ldyBnZW5lcmF0ZWQtaW5zaWRlLWltYWdlLXNldCB1c2UgY2FzZXMKKyAgICAgICAgICAgICAg
ICBUZXN0IHRoYXQgaW1hZ2Utc2V0IGluc2lkZSBpbWFnZS1zZXQgaXMgbm90IHN1cHBvcnRlZAor
CisgICAgICAgICogZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS1leHBlY3RlZC5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1mYWRlLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LWV4cGVjdGVk
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LW11
bHRpLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc2V0
LWdyYWRpZW50LW11bHRpLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Ut
c2V0LWdyYWRpZW50LXNpbmdsZS1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1zaW5nbGUuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQuaHRtbDogQWRkZWQuCisgICAgICAgICAgICAg
ICAgQWRkZWQgcmVmLXRlc3RzIGZvciBzZXZlcmFsIGdlbmVyYXRlZC1pbnNpZGUtaW1hZ2Utc2V0
IHVzZS1jYXNlcworCiAyMDIwLTAxLTE5ICBDYXRoaWUgQ2hlbiAgPGNhdGhpZWNoZW5AaWdhbGlh
LmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3Igc2Nyb2xsIGJlaGF2aW9yIHJlbGllcyBv
biBTY3JvbGxBbmltYXRpb24gb2YgdGhlIFdlYiBwcm9jZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2Nzcy9jdXJzb3ItcGFyc2luZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9jc3MvY3Vyc29yLXBhcnNpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNTQ4
MDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDggQEAgUEFTUyByb3VuZHRyaXBDc3NSdWxlKCJj
dXJzb3I6IHVybChmaWxlOgogUEFTUyByb3VuZHRyaXBDc3NSdWxlKCJjdXJzb3I6IHVybChmaWxl
Oi8vL2Zvby5wbmcpIDEyIDMgNTsiKS5jc3NUZXh0IGlzICIiCiBQQVNTIHJvdW5kdHJpcENzc1J1
bGUoImN1cnNvcjogdXJsKGZpbGU6Ly8vZm9vLnBuZykgeCB5OyIpLmNzc1RleHQgaXMgIiIKIFBB
U1Mgcm91bmR0cmlwQ3NzUnVsZSgiY3Vyc29yOiB1cmwoZmlsZTovLy9mb28ucG5nKSBhdXRvOyIp
LmNzc1RleHQgaXMgIiIKK1BBU1Mgcm91bmR0cmlwQ3NzUnVsZSgiY3Vyc29yOiBsaW5lYXItZ3Jh
ZGllbnQocmVkLCB3aGl0ZSkgLTEgLTEsIHBvaW50ZXI7IikuY3NzVGV4dCBpcyAiIgorUEFTUyBy
b3VuZHRyaXBDc3NSdWxlKCJjdXJzb3I6IGltYWdlLXNldChsaW5lYXItZ3JhZGllbnQocmVkLCB3
aGl0ZSkgMXgpIC0xIC0xLCBwb2ludGVyJzsiKS5jc3NUZXh0IGlzICIiCiBQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvY3NzL2N1cnNvci1wYXJzaW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9jc3MvY3Vyc29yLXBhcnNpbmcuaHRtbAkocmV2aXNpb24gMjU0ODA4KQorKysgTGF5b3V0VGVz
dHMvZmFzdC9jc3MvY3Vyc29yLXBhcnNpbmcuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYg
KzEwNSwxMSBAQCB0ZXN0SW52YWxpZEN1cnNvclJ1bGUoJ3VybChmaWxlOi8vL2Zvby5wCiB0ZXN0
SW52YWxpZEN1cnNvclJ1bGUoJ3VybChmaWxlOi8vL2Zvby5wbmcpIHggeScpOwogdGVzdEludmFs
aWRDdXJzb3JSdWxlKCd1cmwoZmlsZTovLy9mb28ucG5nKSBhdXRvJyk7CiAKK2RlYnVnKCcnKTsK
K2RlYnVnKCdUZXN0IGEgYnVuY2ggb2YgY3Vyc29yIHJ1bGVzIHdpdGggZ2VuZXJhdGVkIGltYWdl
cy4nKTsKK3Rlc3RJbnZhbGlkQ3Vyc29yUnVsZSgnbGluZWFyLWdyYWRpZW50KHJlZCwgd2hpdGUp
IC0xIC0xLCBwb2ludGVyJyk7Cit0ZXN0SW52YWxpZEN1cnNvclJ1bGUoJ2ltYWdlLXNldChsaW5l
YXItZ3JhZGllbnQocmVkLCB3aGl0ZSkgMXgpIC0xIC0xLCBwb2ludGVyJyk7CisKIHN1Y2Nlc3Nm
dWxseVBhcnNlZCA9IHRydWU7CiA8L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY3Nz
L2ltYWdlLXNldC1wYXJzaW5nLWdlbmVyYXRlZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctZ2VuZXJhdGVkLWV4cGVjdGVk
LnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFy
c2luZy1nZW5lcmF0ZWQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUg
QEAKK1Rlc3QgdGhlIHBhcnNpbmcgb2YgdGhlIGltYWdlLXNldCBmdW5jdGlvbi4KKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKKworU2luZ2xlIHZhbHVlIGZvciBiYWNrZ3JvdW5kLWlt
YWdlIHdpdGggZ3JhZGllbnQgOiBsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAxeAorUEFT
UyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUpIGlzICdDU1NWYWx1ZUxpc3QnCitQQVNTIGpz
V3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5fX3Byb3RvX18pIGlzICdDU1NWYWx1ZUxpc3RQcm90
b3R5cGUnCitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5jb25zdHJ1Y3RvcikgaXMg
J0Z1bmN0aW9uJworUEFTUyBpbWFnZVNldFJ1bGUubGVuZ3RoIGlzIDIKK1BBU1Mgc3ViUnVsZS5j
c3NUZXh0IGlzICdsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKScKK1BBU1Mgc3ViUnVsZS5j
c3NUZXh0IGlzICcxJworCitTaW5nbGUgdmFsdWUgZm9yIGNvbnRlbnQgd2l0aCBncmFkaWVudCA6
IGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIDF4CitQQVNTIGpzV3JhcHBlckNsYXNzKGlt
YWdlU2V0UnVsZSkgaXMgJ0NTU1ZhbHVlTGlzdCcKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VT
ZXRSdWxlLl9fcHJvdG9fXykgaXMgJ0NTU1ZhbHVlTGlzdFByb3RvdHlwZScKK1BBU1MganNXcmFw
cGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLmNvbnN0cnVjdG9yKSBpcyAnRnVuY3Rpb24nCitQQVNTIGlt
YWdlU2V0UnVsZS5sZW5ndGggaXMgMgorUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJ2xpbmVhci1n
cmFkaWVudChncmVlbiwgd2hpdGUpJworUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJzEnCisKK1Np
bmdsZSB2YWx1ZSBmb3IgYmFja2dyb3VuZC1pbWFnZSB3aXRoIGdyYWRpZW50cyA6IGxpbmVhci1n
cmFkaWVudChncmVlbiwgd2hpdGUpIDF4LCByYWRpYWwtZ3JhZGllbnQoYmx1ZSwgd2hpdGUpIDJ4
CitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZSkgaXMgJ0NTU1ZhbHVlTGlzdCcKK1BB
U1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLl9fcHJvdG9fXykgaXMgJ0NTU1ZhbHVlTGlz
dFByb3RvdHlwZScKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLmNvbnN0cnVjdG9y
KSBpcyAnRnVuY3Rpb24nCitQQVNTIGltYWdlU2V0UnVsZS5sZW5ndGggaXMgNAorUEFTUyBzdWJS
dWxlLmNzc1RleHQgaXMgJ2xpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpJworUEFTUyBzdWJS
dWxlLmNzc1RleHQgaXMgJzEnCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAncmFkaWFsLWdyYWRp
ZW50KGJsdWUsIHdoaXRlKScKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICcyJworCitDb21iaW5l
ZCBncmFkaWVudCBhbmQgVVJMIDogdXJsKCcjYScpIDF4LCBsaW5lYXItZ3JhZGllbnQoZ3JlZW4s
IHdoaXRlKSAyeAorUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUpIGlzICdDU1NWYWx1
ZUxpc3QnCitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5fX3Byb3RvX18pIGlzICdD
U1NWYWx1ZUxpc3RQcm90b3R5cGUnCitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5j
b25zdHJ1Y3RvcikgaXMgJ0Z1bmN0aW9uJworUEFTUyBpbWFnZVNldFJ1bGUubGVuZ3RoIGlzIDQK
K1BBU1Mgc3ViUnVsZSBpcyAnYScKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICcxJworUEFTUyBz
dWJSdWxlLmNzc1RleHQgaXMgJ2xpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpJworUEFTUyBz
dWJSdWxlLmNzc1RleHQgaXMgJzInCisKK0NvbWJpbmVkIGdyYWRpZW50IGFuZCBVUkwgaW4gY29u
dGVudCA6IHVybCgnI2EnKSAxeCwgbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMngKK1BB
U1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlKSBpcyAnQ1NTVmFsdWVMaXN0JworUEFTUyBq
c1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuX19wcm90b19fKSBpcyAnQ1NTVmFsdWVMaXN0UHJv
dG90eXBlJworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuY29uc3RydWN0b3IpIGlz
ICdGdW5jdGlvbicKK1BBU1MgaW1hZ2VTZXRSdWxlLmxlbmd0aCBpcyA0CitQQVNTIHN1YlJ1bGUg
aXMgJ2EnCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMScKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0
IGlzICdsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKScKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0
IGlzICcyJworCitDb21iaW5lZCBncmFkaWVudCBhbmQgY3Jvc3MtZmFkZSA6IC13ZWJraXQtY3Jv
c3MtZmFkZSh1cmwoJyNhJyksIHVybCgnI2InKSwgNzAlKSAxeCwgbGluZWFyLWdyYWRpZW50KGdy
ZWVuLCB3aGl0ZSkgMngKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlKSBpcyAnQ1NT
VmFsdWVMaXN0JworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuX19wcm90b19fKSBp
cyAnQ1NTVmFsdWVMaXN0UHJvdG90eXBlJworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1
bGUuY29uc3RydWN0b3IpIGlzICdGdW5jdGlvbicKK1BBU1MgaW1hZ2VTZXRSdWxlLmxlbmd0aCBp
cyA0CitQQVNTIHN1YlJ1bGUgaXMgJ2EnCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMScKK1BB
U1Mgc3ViUnVsZS5jc3NUZXh0IGlzICdsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKScKK1BB
U1Mgc3ViUnVsZS5jc3NUZXh0IGlzICcyJworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zh
c3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWdlbmVyYXRlZC1leHBlY3RlZC50eHQKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFy
c2luZy1nZW5lcmF0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9p
bWFnZS1zZXQtcGFyc2luZy1nZW5lcmF0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1nZW5lcmF0ZWQuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEwNyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9E
VEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2Ny
aXB0aW9uKCJUZXN0IHRoZSBwYXJzaW5nIG9mIHRoZSBpbWFnZS1zZXQgZnVuY3Rpb24uIik7CisK
K2Z1bmN0aW9uIGpzV3JhcHBlckNsYXNzKG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAg
ICByZXR1cm4gIltudWxsXSI7CisgICAgdmFyIHN0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9T
dHJpbmcuYXBwbHkobm9kZSk7CisgICAgcmV0dXJuIHN0cmluZy5zdWJzdHIoOCwgc3RyaW5nLmxl
bmd0aCAtIDkpOworfQorCitmdW5jdGlvbiBzaG91bGRCZVR5cGUoZXhwcmVzc2lvbiwgY2xhc3NO
YW1lLCBwcm90b3R5cGVOYW1lLCBjb25zdHJ1Y3Rvck5hbWUpCit7CisgICAgaWYgKCFwcm90b3R5
cGVOYW1lKQorICAgICAgICBwcm90b3R5cGVOYW1lID0gY2xhc3NOYW1lICsgIlByb3RvdHlwZSI7
CisgICAgaWYgKCFjb25zdHJ1Y3Rvck5hbWUpCisgICAgICAgIGNvbnN0cnVjdG9yTmFtZSA9IGNs
YXNzTmFtZSArICJDb25zdHJ1Y3RvciI7CisgICAgc2hvdWxkQmUoImpzV3JhcHBlckNsYXNzKCIg
KyBleHByZXNzaW9uICsgIikiLCAiJyIgKyBjbGFzc05hbWUgKyAiJyIpOworICAgIHNob3VsZEJl
KCJqc1dyYXBwZXJDbGFzcygiICsgZXhwcmVzc2lvbiArICIuX19wcm90b19fKSIsICInIiArIHBy
b3RvdHlwZU5hbWUgKyAiJyIpOworICAgIHNob3VsZEJlKCJqc1dyYXBwZXJDbGFzcygiICsgZXhw
cmVzc2lvbiArICIuY29uc3RydWN0b3IpIiwgIidGdW5jdGlvbiciKTsKK30KKworLy8gVGhlc2Ug
aGF2ZSB0byBiZSBnbG9iYWwgZm9yIHRoZSB0ZXN0IGhlbHBlcnMgdG8gc2VlIHRoZW0uCit2YXIg
aW1hZ2VTZXRSdWxlLCBzdWJSdWxlOworCitmdW5jdGlvbiB0ZXN0SW1hZ2VTZXRSdWxlKGRlc2Ny
aXB0aW9uLCBwcm9wZXJ0eSwgcnVsZSwgZXhwZWN0ZWRMZW5ndGgsIGV4cGVjdGVkVGV4dHMpCit7
CisgICAgZGVidWcoIiIpOworICAgIGRlYnVnKGRlc2NyaXB0aW9uICsgIiA6ICIgKyBydWxlKTsK
KworICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICBkaXYu
c2V0QXR0cmlidXRlKCJzdHlsZSIsIHByb3BlcnR5ICsgIjogaW1hZ2Utc2V0KCIgKyBydWxlICsg
IikiKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7CisKKyAgICBpbWFnZVNl
dFJ1bGUgPSBkaXYuc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eSk7CisgICAgc2hv
dWxkQmVUeXBlKCJpbWFnZVNldFJ1bGUiLCAiQ1NTVmFsdWVMaXN0Iik7CisKKyAgICBpZiAoaW1h
Z2VTZXRSdWxlKSB7CisgICAgICAgIGlmIChqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGVbMF0p
ID09ICJDU1NWYWx1ZUxpc3QiKSB7CisgICAgICAgICAgICAvLyBUaGUgY29udGVudCBwcm9wZXJ0
eSByZXR1cm5zIGEgQ1NTVmFsdWVMaXN0IGFueXdheSwgc28gdG8gZ2V0IHRvIHRoZSAKKyAgICAg
ICAgICAgIC8vIGltYWdlU2V0IENTUyB2YWx1ZSBsaXN0LCB3ZSBoYXZlIHRvIGxvb2sgYXQgdGhl
IGZpcnN0IGVudHJ5IGluIHRoZSAKKyAgICAgICAgICAgIC8vIGNvbnRlbnQgdmFsdWUgbGlzdC4K
KyAgICAgICAgICAgIGltYWdlU2V0UnVsZSA9IGltYWdlU2V0UnVsZVswXTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHNob3VsZEJlKCJpbWFnZVNldFJ1bGUubGVuZ3RoIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBleHBlY3RlZExlbmd0aDsgfSk7CisKKyAgICBpZiAoaW1hZ2VTZXRSdWxlKSB7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRMZW5ndGg7IGkrKykgeworICAgICAg
ICAgICAgc3RyaW5nID0gaW1hZ2VTZXRSdWxlW2ldOworICAgICAgICAgICAgaWYgKGkgJSAyID09
IDAgJiYgc3RyaW5nLmNzc1RleHQuaW5jbHVkZXMoJyMnKSkgeworICAgICAgICAgICAgICAgIHN1
YlJ1bGUgPSBzdHJpbmcuY3NzVGV4dC5zcGxpdCgnIycpWzFdLnJlcGxhY2UoJyInLCAiIik7Cisg
ICAgICAgICAgICAgICAgc3ViUnVsZSA9IHN1YlJ1bGUuc3BsaXQoJyknKVswXTsKKyAgICAgICAg
ICAgICAgICBzaG91bGRCZSgic3ViUnVsZSIsICInIiArIGV4cGVjdGVkVGV4dHNbaV0gKyAiJyIp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdWJSdWxlID0gc3RyaW5n
OworICAgICAgICAgICAgICAgIHNob3VsZEJlKCJzdWJSdWxlLmNzc1RleHQiLCAiJyIgKyBleHBl
Y3RlZFRleHRzW2ldICsgIiciKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTsKK30KKwordGVzdEltYWdlU2V0UnVs
ZSgiU2luZ2xlIHZhbHVlIGZvciBiYWNrZ3JvdW5kLWltYWdlIHdpdGggZ3JhZGllbnQiLAorICAg
ICAgICAgICAgICAgICJiYWNrZ3JvdW5kLWltYWdlIiwKKyAgICAgICAgICAgICAgICAibGluZWFy
LWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMXgiLCAyLAorICAgICAgICAgICAgICAgIFsibGluZWFy
LWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkiLCAiMSJdKTsKK3Rlc3RJbWFnZVNldFJ1bGUoIlNpbmds
ZSB2YWx1ZSBmb3IgY29udGVudCB3aXRoIGdyYWRpZW50IiwKKyAgICAgICAgICAgICAgICAiYmFj
a2dyb3VuZC1pbWFnZSIsCisgICAgICAgICAgICAgICAgImxpbmVhci1ncmFkaWVudChncmVlbiwg
d2hpdGUpIDF4IiwgMiwKKyAgICAgICAgICAgICAgICBbImxpbmVhci1ncmFkaWVudChncmVlbiwg
d2hpdGUpIiwgIjEiXSk7CisKK3Rlc3RJbWFnZVNldFJ1bGUoIlNpbmdsZSB2YWx1ZSBmb3IgYmFj
a2dyb3VuZC1pbWFnZSB3aXRoIGdyYWRpZW50cyIsCisgICAgICAgICAgICAgICAgImJhY2tncm91
bmQtaW1hZ2UiLAorICAgICAgICAgICAgICAgICJsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRl
KSAxeCwgcmFkaWFsLWdyYWRpZW50KGJsdWUsIHdoaXRlKSAyeCIsIDQsCisgICAgICAgICAgICAg
ICAgWyJsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSIsICIxIiwgInJhZGlhbC1ncmFkaWVu
dChibHVlLCB3aGl0ZSkiLCAiMiJdKTsKKwordGVzdEltYWdlU2V0UnVsZSgiQ29tYmluZWQgZ3Jh
ZGllbnQgYW5kIFVSTCIsCisgICAgICAgICAgICAgICAgImJhY2tncm91bmQtaW1hZ2UiLAorICAg
ICAgICAgICAgICAgICJ1cmwoJyNhJykgMXgsIGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUp
IDJ4IiwgNCwKKyAgICAgICAgICAgICAgICBbImEiLCAiMSIsICJsaW5lYXItZ3JhZGllbnQoZ3Jl
ZW4sIHdoaXRlKSIsICIyIl0pOworCit0ZXN0SW1hZ2VTZXRSdWxlKCJDb21iaW5lZCBncmFkaWVu
dCBhbmQgVVJMIGluIGNvbnRlbnQiLAorICAgICAgICAgICAgICAgICJjb250ZW50IiwKKyAgICAg
ICAgICAgICAgICAidXJsKCcjYScpIDF4LCBsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAy
eCIsIDQsCisgICAgICAgICAgICAgICAgWyJhIiwgIjEiLCAibGluZWFyLWdyYWRpZW50KGdyZWVu
LCB3aGl0ZSkiLCAiMiJdKTsKKwordGVzdEltYWdlU2V0UnVsZSgiQ29tYmluZWQgZ3JhZGllbnQg
YW5kIGNyb3NzLWZhZGUiLAorICAgICAgICAgICAgICAgICJiYWNrZ3JvdW5kLWltYWdlIiwKKyAg
ICAgICAgICAgICAgICAiLXdlYmtpdC1jcm9zcy1mYWRlKHVybCgnI2EnKSwgdXJsKCcjYicpLCA3
MCUpIDF4LCBsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAyeCIsIDQsCisgICAgICAgICAg
ICAgICAgWyJhIiwgIjEiLCAibGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkiLCAiMiJdKTsK
Kworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBh
cnNpbmctZ2VuZXJhdGVkLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMg
LTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1pbnZhbGlkLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1pbnZh
bGlkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjU0ODA4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9j
c3MvaW1hZ2Utc2V0LXBhcnNpbmctaW52YWxpZC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDYgKzE4LDEyIEBAIFBBU1MgY3NzUnVsZSBpcyBudWxsCiAKIFNjYWxlIGZhY3RvciBp
cyAwIDogdXJsKCcjYScpIDB4CiBQQVNTIGNzc1J1bGUgaXMgbnVsbAorCitHZW5lcmF0ZWQgaW1h
Z2UgZm9yIGN1cnNvciA6IGxpbmVhci1ncmFkaWVudChibGFjaywgd2hpdGUpIDF4CitQQVNTIGNz
c1J1bGUgaXMgbnVsbAorCitJbWFnZS1zZXQgaW5zaWRlIGltYWdlLXNldCA6IGltYWdlLXNldChp
bWFnZS1zZXQodXJsKCcjYScpIDF4KSAxeCkKK1BBU1MgY3NzUnVsZSBpcyBudWxsCiBQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWludmFsaWQuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1pbnZhbGlkLmh0bWwJKHJl
dmlzaW9uIDI1NDgwOCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5n
LWludmFsaWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQCB0ZXN0SW52YWxp
ZEltYWdlU2V0KCJObyB4IiwgImJhY2tncm91bmQtCiB0ZXN0SW52YWxpZEltYWdlU2V0KCJObyBj
b21tYSIsICJiYWNrZ3JvdW5kLWltYWdlIiwgInVybCgnI2EnKSAxeCB1cmwoJyNiJykgMngiKTsK
IHRlc3RJbnZhbGlkSW1hZ2VTZXQoIlRvbyBtYW55IHNjYWxlIGZhY3RvciBwYXJhbWV0ZXJzIiwg
ImJhY2tncm91bmQtaW1hZ2UiLCAidXJsKCcjYScpIDF4IDJ4Iik7CiB0ZXN0SW52YWxpZEltYWdl
U2V0KCJTY2FsZSBmYWN0b3IgaXMgMCIsICJiYWNrZ3JvdW5kLWltYWdlIiwgInVybCgnI2EnKSAw
eCIpOwordGVzdEludmFsaWRJbWFnZVNldCgiR2VuZXJhdGVkIGltYWdlIGZvciBjdXJzb3IiLCAi
Y3Vyc29yIiwgImxpbmVhci1ncmFkaWVudChibGFjaywgd2hpdGUpIDF4Iik7Cit0ZXN0SW52YWxp
ZEltYWdlU2V0KCJJbWFnZS1zZXQgaW5zaWRlIGltYWdlLXNldCIsICJiYWNrZ3JvdW5kLWltYWdl
IiwgImltYWdlLXNldChpbWFnZS1zZXQodXJsKCcjYScpIDF4KSAxeCkiKTsKIAogc3VjY2Vzc2Z1
bGx5UGFyc2VkID0gdHJ1ZTsKIDwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9oaWRw
aS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWNyb3NzLWZhZGUtZXhwZWN0ZWQuaHRtbAkobm9u
ZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1mYWRl
LWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQ+CisgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAgaWYgKCF3
aW5kb3cudGVzdFJ1bm5lciB8fCAhd2luZG93LnNlc3Npb25TdG9yYWdlKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmICghc2Vzc2lvblN0b3JhZ2Uuc2NhbGVGYWN0b3JJc1NldCkg
eworICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB0
ZXN0UnVubmVyLnNldEJhY2tpbmdTY2FsZUZhY3RvcigyLCBzY2FsZUZhY3RvcklzU2V0KTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLnBhZ2VSZWxvYWRl
ZCAmJiBzZXNzaW9uU3RvcmFnZS5zY2FsZUZhY3RvcklzU2V0KSB7CisgICAgICAgICAgICBkZWxl
dGUgc2Vzc2lvblN0b3JhZ2UucGFnZVJlbG9hZGVkOworICAgICAgICAgICAgZGVsZXRlIHNlc3Np
b25TdG9yYWdlLnNjYWxlRmFjdG9ySXNTZXQ7CisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFJpZ2h0IG5vdyB0aGVy
ZSBpcyBhIGJ1ZyB0aGF0IGltYWdlLXNldCBkb2VzIG5vdCBwcm9wZXJseSBkZWFsIHdpdGggZHlu
YW1pYyBjaGFuZ2VzIHRvIHRoZSBzY2FsZSBmYWN0b3IsCisgICAgICAgICAgICAvLyBzbyB0byB3
b3JrIGFyb3VuZCB0aGF0LCB3ZSBtdXN0IHJlbG9hZCB0aGUgcGFnZSB0byBnZXQgdGhlIDJ4IGlt
YWdlLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExOTc2NAorICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucGFnZVJlbG9hZGVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLnJlbG9hZCh0cnVlKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiBzY2FsZUZhY3RvcklzU2V0KCkgeworICAgICAg
ICBzZXNzaW9uU3RvcmFnZS5zY2FsZUZhY3RvcklzU2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICB3
aW5kb3cub25sb2FkID0gcnVuVGVzdDsKKzwvc2NyaXB0PgorICAgIAorPHN0eWxlPgorICAgICNm
b28geworICAgICAgICB3aWR0aDoxMDBweDsKKyAgICAgICAgaGVpZ2h0OjEwMHB4OworICAgICAg
ICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWNyb3NzLWZhZGUodXJsKCdyZXNvdXJjZXMvYmx1
ZS0xMDAtcHgtc3F1YXJlLnBuZycpLCB1cmwoJ3Jlc291cmNlcy9ncmVlbi0yMDAtcHgtc3F1YXJl
LnBuZycsIDUwJSkpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGlkPSJib2R5
Ij4KKyAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGRpdiBiZWxvdyBpcyBhIGJsdWUg
MTAwcHggc3F1YXJlIHdoZW4gdGhlIGRldmljZVNjYWxlRmFjdG9yIGlzIDEsIGFuZCBpZiBpdCBp
cyBhIDEwMHB4IGdyZWVuLXdoaXRlIGdyYWRpZW50IHNxdWFyZSB3aGVuIHRoZSBkZXZpY2VTY2Fs
ZUZhY3RvciBpcyAyLjwvZGl2PgorICAgIDxkaXYgaWQ9Zm9vPjwvZGl2PgorPC9ib2R5PgorPC9o
dG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1z
ZXQtY3Jvc3MtZmFkZS1leHBlY3RlZC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRh
YmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWNyb3NzLWZhZGUuaHRt
bAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9z
cy1mYWRlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQ+CisgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAgaWYgKCF3aW5k
b3cudGVzdFJ1bm5lciB8fCAhd2luZG93LnNlc3Npb25TdG9yYWdlKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGlmICghc2Vzc2lvblN0b3JhZ2Uuc2NhbGVGYWN0b3JJc1NldCkgewor
ICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB0ZXN0
UnVubmVyLnNldEJhY2tpbmdTY2FsZUZhY3RvcigyLCBzY2FsZUZhY3RvcklzU2V0KTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLnBhZ2VSZWxvYWRlZCAm
JiBzZXNzaW9uU3RvcmFnZS5zY2FsZUZhY3RvcklzU2V0KSB7CisgICAgICAgICAgICBkZWxldGUg
c2Vzc2lvblN0b3JhZ2UucGFnZVJlbG9hZGVkOworICAgICAgICAgICAgZGVsZXRlIHNlc3Npb25T
dG9yYWdlLnNjYWxlRmFjdG9ySXNTZXQ7CisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFJpZ2h0IG5vdyB0aGVyZSBp
cyBhIGJ1ZyB0aGF0IGltYWdlLXNldCBkb2VzIG5vdCBwcm9wZXJseSBkZWFsIHdpdGggZHluYW1p
YyBjaGFuZ2VzIHRvIHRoZSBzY2FsZSBmYWN0b3IsCisgICAgICAgICAgICAvLyBzbyB0byB3b3Jr
IGFyb3VuZCB0aGF0LCB3ZSBtdXN0IHJlbG9hZCB0aGUgcGFnZSB0byBnZXQgdGhlIDJ4IGltYWdl
LgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExOTc2NAorICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucGFnZVJlbG9hZGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLnJlbG9hZCh0cnVlKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiBzY2FsZUZhY3RvcklzU2V0KCkgeworICAgICAgICBz
ZXNzaW9uU3RvcmFnZS5zY2FsZUZhY3RvcklzU2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICB3aW5k
b3cub25sb2FkID0gcnVuVGVzdDsKKzwvc2NyaXB0PgorICAgIAorPHN0eWxlPgorICAgICNmb28g
eworICAgICAgICB3aWR0aDoxMDBweDsKKyAgICAgICAgaGVpZ2h0OjEwMHB4OworICAgICAgICBi
YWNrZ3JvdW5kLWltYWdlOiBpbWFnZS1zZXQodXJsKCdyZXNvdXJjZXMvYmx1ZS0xMDAtcHgtc3F1
YXJlLnBuZycpIDF4LCAtd2Via2l0LWNyb3NzLWZhZGUodXJsKCdyZXNvdXJjZXMvYmx1ZS0xMDAt
cHgtc3F1YXJlLnBuZycpLCB1cmwoJ3Jlc291cmNlcy9ncmVlbi0yMDAtcHgtc3F1YXJlLnBuZycs
IDUwJSkpIDJ4KTsKKyAgICB9Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBpZD0iYm9keSI+
CisgICAgPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBkaXYgYmVsb3cgaXMgYSBibHVlIDEw
MHB4IHNxdWFyZSB3aGVuIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBpcyAxLCBhbmQgaWYgaXQgaXMg
YSAxMDBweCBncmVlbi9ibHVlIGNyb3NzLWZhZGUgc3F1YXJlIHdoZW4gdGhlIGRldmljZVNjYWxl
RmFjdG9yIGlzIDIuPC9kaXY+CisgICAgPGRpdiBpZD1mb28+PC9kaXY+Cis8L2JvZHk+Cis8L2h0
bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNl
dC1jcm9zcy1mYWRlLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAs
MCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1leHBlY3RlZC5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LWV4cGVjdGVk
Lmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQt
Z3JhZGllbnQtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KKyAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAg
ICBpZiAoIXdpbmRvdy50ZXN0UnVubmVyIHx8ICF3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCFzZXNzaW9uU3RvcmFnZS5zY2FsZUZhY3Rv
cklzU2V0KSB7CisgICAgICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAg
ICAgICAgIHRlc3RSdW5uZXIuc2V0QmFja2luZ1NjYWxlRmFjdG9yKDIsIHNjYWxlRmFjdG9ySXNT
ZXQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UucGFn
ZVJlbG9hZGVkICYmIHNlc3Npb25TdG9yYWdlLnNjYWxlRmFjdG9ySXNTZXQpIHsKKyAgICAgICAg
ICAgIGRlbGV0ZSBzZXNzaW9uU3RvcmFnZS5wYWdlUmVsb2FkZWQ7CisgICAgICAgICAgICBkZWxl
dGUgc2Vzc2lvblN0b3JhZ2Uuc2NhbGVGYWN0b3JJc1NldDsKKyAgICAgICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gUmlnaHQg
bm93IHRoZXJlIGlzIGEgYnVnIHRoYXQgaW1hZ2Utc2V0IGRvZXMgbm90IHByb3Blcmx5IGRlYWwg
d2l0aCBkeW5hbWljIGNoYW5nZXMgdG8gdGhlIHNjYWxlIGZhY3RvciwKKyAgICAgICAgICAgIC8v
IHNvIHRvIHdvcmsgYXJvdW5kIHRoYXQsIHdlIG11c3QgcmVsb2FkIHRoZSBwYWdlIHRvIGdldCB0
aGUgMnggaW1hZ2UuCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTE5NzY0CisgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5wYWdlUmVsb2Fk
ZWQgPSB0cnVlOworICAgICAgICAgICAgZG9jdW1lbnQubG9jYXRpb24ucmVsb2FkKHRydWUpOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHNjYWxlRmFjdG9ySXNTZXQoKSB7
CisgICAgICAgIHNlc3Npb25TdG9yYWdlLnNjYWxlRmFjdG9ySXNTZXQgPSB0cnVlOworICAgIH0K
KworICAgIHdpbmRvdy5vbmxvYWQgPSBydW5UZXN0OworPC9zY3JpcHQ+CisgICAgCis8c3R5bGU+
CisgICAgI2ZvbyB7CisgICAgICAgIHdpZHRoOjEwMHB4OworICAgICAgICBoZWlnaHQ6MTAwcHg7
CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUp
OworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGlkPSJib2R5Ij4KKyAgICA8ZGl2
PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGRpdiBiZWxvdyBpcyBhIGJsdWUgMTAwcHggc3F1YXJl
IHdoZW4gdGhlIGRldmljZVNjYWxlRmFjdG9yIGlzIDEsIGFuZCBpZiBpdCBpcyBhIDEwMHB4IGdy
ZWVuLXdoaXRlIGdyYWRpZW50IHNxdWFyZSB3aGVuIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBpcyAy
LjwvZGl2PgorICAgIDxkaXYgaWQ9Zm9vPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQt
ZXhwZWN0ZWQuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsx
ICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LW11bHRpLWV4cGVjdGVkLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtbXVsdGkt
ZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2lt
YWdlLXNldC1ncmFkaWVudC1tdWx0aS1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDQgQEAKKzxodG1sPgorPGhlYWQ+ICAgIAorPHNjcmlwdD4KKyAgICBmdW5jdGlvbiBy
dW5UZXN0KCkgeworICAgICAgICBpZiAoIXdpbmRvdy50ZXN0UnVubmVyIHx8ICF3aW5kb3cuc2Vz
c2lvblN0b3JhZ2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCFzZXNzaW9u
U3RvcmFnZS5zY2FsZUZhY3RvcklzU2V0KSB7CisgICAgICAgICAgICB0ZXN0UnVubmVyLndhaXRV
bnRpbERvbmUoKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuc2V0QmFja2luZ1NjYWxlRmFjdG9y
KDIsIHNjYWxlRmFjdG9ySXNTZXQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
c2Vzc2lvblN0b3JhZ2UucGFnZVJlbG9hZGVkICYmIHNlc3Npb25TdG9yYWdlLnNjYWxlRmFjdG9y
SXNTZXQpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBzZXNzaW9uU3RvcmFnZS5wYWdlUmVsb2FkZWQ7
CisgICAgICAgICAgICBkZWxldGUgc2Vzc2lvblN0b3JhZ2Uuc2NhbGVGYWN0b3JJc1NldDsKKyAg
ICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gUmlnaHQgbm93IHRoZXJlIGlzIGEgYnVnIHRoYXQgaW1hZ2Utc2V0IGRvZXMg
bm90IHByb3Blcmx5IGRlYWwgd2l0aCBkeW5hbWljIGNoYW5nZXMgdG8gdGhlIHNjYWxlIGZhY3Rv
ciwKKyAgICAgICAgICAgIC8vIHNvIHRvIHdvcmsgYXJvdW5kIHRoYXQsIHdlIG11c3QgcmVsb2Fk
IHRoZSBwYWdlIHRvIGdldCB0aGUgMnggaW1hZ2UuCisgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5NzY0CisgICAgICAgICAgICBzZXNzaW9u
U3RvcmFnZS5wYWdlUmVsb2FkZWQgPSB0cnVlOworICAgICAgICAgICAgZG9jdW1lbnQubG9jYXRp
b24ucmVsb2FkKHRydWUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHNj
YWxlRmFjdG9ySXNTZXQoKSB7CisgICAgICAgIHNlc3Npb25TdG9yYWdlLnNjYWxlRmFjdG9ySXNT
ZXQgPSB0cnVlOworICAgIH0KKworICAgIHdpbmRvdy5vbmxvYWQgPSBydW5UZXN0OworPC9zY3Jp
cHQ+PHN0eWxlPgorICAgICNmb28geworICAgICAgICB3aWR0aDoxMDBweDsKKyAgICAgICAgaGVp
Z2h0OjEwMHB4OworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQocmVk
LCBibHVlKTsKKyAgICB9Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBpZD0iYm9keSI+Cisg
ICAgPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBkaXYgYmVsb3cgaXMgYSAxMDBweCBncmVl
bi13aGl0ZSBncmFkaWVudCBzcXVhcmUgd2hlbiBkZXZpY2VQaXhlbFJhdGlvIGlzIDEsIGEgcmFk
aWFsIHJlZC1ibHVlIHNxdWFyZSB3aGVuIGRldmljZVBpeGVsUmF0aW8gaXMgMiwgYW5kIGEgYmx1
ZSBzcXVhcmUgd2hlbiBkZXZpY2VQaXhlbFJhdGlvIGlzIDMuPC9kaXY+CisgICAgPGRpdiBpZD1m
b28+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRU
ZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1tdWx0aS1leHBlY3RlZC5odG1sCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFn
ZS1zZXQtZ3JhZGllbnQtbXVsdGkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1tdWx0aS5odG1sCShub25leGlzdGVudCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LW11bHRpLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorPGh0bWw+Cis8aGVhZD4gICAgCis8c2NyaXB0Pgor
ICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIg
fHwgIXdpbmRvdy5zZXNzaW9uU3RvcmFnZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBpZiAoIXNlc3Npb25TdG9yYWdlLnNjYWxlRmFjdG9ySXNTZXQpIHsKKyAgICAgICAgICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgdGVzdFJ1bm5lci5zZXRCYWNr
aW5nU2NhbGVGYWN0b3IoMiwgc2NhbGVGYWN0b3JJc1NldCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5wYWdlUmVsb2FkZWQgJiYgc2Vzc2lvblN0b3Jh
Z2Uuc2NhbGVGYWN0b3JJc1NldCkgeworICAgICAgICAgICAgZGVsZXRlIHNlc3Npb25TdG9yYWdl
LnBhZ2VSZWxvYWRlZDsKKyAgICAgICAgICAgIGRlbGV0ZSBzZXNzaW9uU3RvcmFnZS5zY2FsZUZh
Y3RvcklzU2V0OworICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBSaWdodCBub3cgdGhlcmUgaXMgYSBidWcgdGhhdCBp
bWFnZS1zZXQgZG9lcyBub3QgcHJvcGVybHkgZGVhbCB3aXRoIGR5bmFtaWMgY2hhbmdlcyB0byB0
aGUgc2NhbGUgZmFjdG9yLAorICAgICAgICAgICAgLy8gc28gdG8gd29yayBhcm91bmQgdGhhdCwg
d2UgbXVzdCByZWxvYWQgdGhlIHBhZ2UgdG8gZ2V0IHRoZSAyeCBpbWFnZS4KKyAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTk3NjQKKyAgICAg
ICAgICAgIHNlc3Npb25TdG9yYWdlLnBhZ2VSZWxvYWRlZCA9IHRydWU7CisgICAgICAgICAgICBk
b2N1bWVudC5sb2NhdGlvbi5yZWxvYWQodHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgZnVuY3Rpb24gc2NhbGVGYWN0b3JJc1NldCgpIHsKKyAgICAgICAgc2Vzc2lvblN0b3JhZ2Uu
c2NhbGVGYWN0b3JJc1NldCA9IHRydWU7CisgICAgfQorCisgICAgd2luZG93Lm9ubG9hZCA9IHJ1
blRlc3Q7Cis8L3NjcmlwdD48c3R5bGU+CisgICAgI2ZvbyB7CisgICAgICAgIHdpZHRoOjEwMHB4
OworICAgICAgICBoZWlnaHQ6MTAwcHg7CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGltYWdl
LXNldChsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAxeCwgcmFkaWFsLWdyYWRpZW50KHJl
ZCwgYmx1ZSkgMngsICdyZXNvdXJjZXMvYmx1ZS0xMDAtcHgtc3F1YXJlLnBuZycgM3gpOworICAg
IH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGlkPSJib2R5Ij4KKyAgICA8ZGl2PlRoaXMg
dGVzdCBwYXNzZXMgaWYgdGhlIGRpdiBiZWxvdyBpcyBhIDEwMHB4IGdyZWVuLXdoaXRlIGdyYWRp
ZW50IHNxdWFyZSB3aGVuIGRldmljZVBpeGVsUmF0aW8gaXMgMSwgYSByYWRpYWwgcmVkLWJsdWUg
c3F1YXJlIHdoZW4gZGV2aWNlUGl4ZWxSYXRpbyBpcyAyLCBhbmQgYSBibHVlIHNxdWFyZSB3aGVu
IGRldmljZVBpeGVsUmF0aW8gaXMgMy48L2Rpdj4KKyAgICA8ZGl2IGlkPWZvbz48L2Rpdj4KKzwv
Ym9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvaGlk
cGkvaW1hZ2Utc2V0LWdyYWRpZW50LW11bHRpLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4
ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1zaW5nbGUt
ZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdl
LXNldC1ncmFkaWVudC1zaW5nbGUtZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1zaW5nbGUtZXhwZWN0ZWQuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBACis8aHRtbD4KKzxoZWFkPgorPHN0eWxl
PgorICAgICNmb28geworICAgICAgICB3aWR0aDoxMDBweDsKKyAgICAgICAgaGVpZ2h0OjEwMHB4
OworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRl
KTsKKyAgICB9Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBpZD0iYm9keSI+CisgICAgPGRp
dj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBkaXYgYmVsb3cgaXMgYSAxMDBweCBncmVlbi13aGl0
ZSBncmFkaWVudCBzcXVhcmUuPC9kaXY+CisgICAgPGRpdiBpZD1mb28+PC9kaXY+Cis8L2JvZHk+
Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2lt
YWdlLXNldC1ncmFkaWVudC1zaW5nbGUtZXhwZWN0ZWQuaHRtbApfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBz
dm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJv
cGVydHkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNp
bmdsZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0
LWdyYWRpZW50LXNpbmdsZS5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
aGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTYgQEAKKzxodG1sPgorPGhlYWQ+ICAgIAorPHN0eWxlPgorICAgICNmb28geworICAg
ICAgICB3aWR0aDoxMDBweDsKKyAgICAgICAgaGVpZ2h0OjEwMHB4OworICAgICAgICBiYWNrZ3Jv
dW5kLWltYWdlOiBpbWFnZS1zZXQobGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMXgpOwor
ICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGlkPSJib2R5Ij4KKyAgICA8ZGl2PlRo
aXMgdGVzdCBwYXNzZXMgaWYgdGhlIGRpdiBiZWxvdyBpcyBhIDEwMHB4IGdyZWVuLXdoaXRlIGdy
YWRpZW50IHNxdWFyZS48L2Rpdj4KKyAgICA8ZGl2IGlkPWZvbz48L2Rpdj4KKzwvYm9keT4KKzwv
aHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Ut
c2V0LWdyYWRpZW50LXNpbmdsZS5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxl
CiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC5odG1sCShub25l
eGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50Lmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQ+CisgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAgaWYgKCF3aW5kb3cudGVzdFJ1
bm5lciB8fCAhd2luZG93LnNlc3Npb25TdG9yYWdlKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGlmICghc2Vzc2lvblN0b3JhZ2Uuc2NhbGVGYWN0b3JJc1NldCkgeworICAgICAgICAg
ICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB0ZXN0UnVubmVyLnNl
dEJhY2tpbmdTY2FsZUZhY3RvcigyLCBzY2FsZUZhY3RvcklzU2V0KTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLnBhZ2VSZWxvYWRlZCAmJiBzZXNzaW9u
U3RvcmFnZS5zY2FsZUZhY3RvcklzU2V0KSB7CisgICAgICAgICAgICBkZWxldGUgc2Vzc2lvblN0
b3JhZ2UucGFnZVJlbG9hZGVkOworICAgICAgICAgICAgZGVsZXRlIHNlc3Npb25TdG9yYWdlLnNj
YWxlRmFjdG9ySXNTZXQ7CisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFJpZ2h0IG5vdyB0aGVyZSBpcyBhIGJ1ZyB0
aGF0IGltYWdlLXNldCBkb2VzIG5vdCBwcm9wZXJseSBkZWFsIHdpdGggZHluYW1pYyBjaGFuZ2Vz
IHRvIHRoZSBzY2FsZSBmYWN0b3IsCisgICAgICAgICAgICAvLyBzbyB0byB3b3JrIGFyb3VuZCB0
aGF0LCB3ZSBtdXN0IHJlbG9hZCB0aGUgcGFnZSB0byBnZXQgdGhlIDJ4IGltYWdlLgorICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTc2NAor
ICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucGFnZVJlbG9hZGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGRvY3VtZW50LmxvY2F0aW9uLnJlbG9hZCh0cnVlKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBmdW5jdGlvbiBzY2FsZUZhY3RvcklzU2V0KCkgeworICAgICAgICBzZXNzaW9uU3Rv
cmFnZS5zY2FsZUZhY3RvcklzU2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICB3aW5kb3cub25sb2Fk
ID0gcnVuVGVzdDsKKzwvc2NyaXB0PgorICAgIAorPHN0eWxlPgorICAgICNmb28geworICAgICAg
ICB3aWR0aDoxMDBweDsKKyAgICAgICAgaGVpZ2h0OjEwMHB4OworICAgICAgICBiYWNrZ3JvdW5k
LWltYWdlOiBpbWFnZS1zZXQodXJsKCdyZXNvdXJjZXMvYmx1ZS0xMDAtcHgtc3F1YXJlLnBuZycp
IDF4LCBsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAyeCk7CisgICAgfQorPC9zdHlsZT4K
KzwvaGVhZD4KKworPGJvZHkgaWQ9ImJvZHkiPgorICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBp
ZiB0aGUgZGl2IGJlbG93IGlzIGEgYmx1ZSAxMDBweCBzcXVhcmUgd2hlbiB0aGUgZGV2aWNlU2Nh
bGVGYWN0b3IgaXMgMSwgYW5kIGlmIGl0IGlzIGEgMTAwcHggZ3JlZW4td2hpdGUgZ3JhZGllbnQg
c3F1YXJlIHdoZW4gdGhlIGRldmljZVNjYWxlRmFjdG9yIGlzIDIuPC9kaXY+CisgICAgPGRpdiBp
ZD1mb28+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlv
dXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC5odG1sCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBwcm9wZXJ0eQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388194</attachid>
            <date>2020-01-19 13:49:12 -0800</date>
            <delta_ts>2020-01-19 14:16:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81941-20200119234910.patch</filename>
            <type>text/plain</type>
            <size>81662</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAyMC0wMS0xOSAgTm9hbSBS
b3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgLXdlYmtpdC1pbWFnZS1zZXQg
c2hvdWxkIHN1cHBvcnQgYWxsIHRoZSBpbWFnZSBmdW5jdGlvbnMgV2ViS2l0IHN1cHBvcnRzLCBu
b3QganVzdCB1cmwoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODE5NDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBTZXBhcmF0ZSBTdHlsZUNhY2hlZEltYWdlIHRvIDQgY2xhc3NlczoKKyAgICAgICAgLSBT
dHlsZUNhY2hlZEltYWdlOiBmb3Igc2luZ2xlIGltYWdlcyBvbmx5CisgICAgICAgIC0gU3R5bGVN
dWx0aUltYWdlOiBmb3IgdmFsdWVzIHRoYXQgY2FuIGNvbnRhaW4gbXVsdGlwbGUgaW1hZ2VzOiBs
aWtlIGN1cnNvci9pbWFnZS1zZXQKKyAgICAgICAgLSBTdHlsZUltYWdlU2V0CisgICAgICAgIC0g
U3R5bGVDdXJzb3JJbWFnZQorCisgICAgICAgIFRoZSBuZXcgY2xhc3NlcyBvbmx5IGRlYWwgd2l0
aCB0aGVpciBvd24gdmFsdWUgdHlwZS4gQmVmb3JlLCBJbWFnZVNldCBhbmQgY3Vyc29yIHdlcmUg
cmVzb2x2ZWQKKyAgICAgICAgYXMgYSBTdHlsZUNhY2hlZEltYWdlLCB3aGljaCBpcyBubyBsb25n
ZXIgYSB2YWxpZCBhc3N1bXB0aW9uIGlmIGltYWdlLXNldCBjYW4gY29udGFpbiBnZW5lcmF0ZWQg
aW1hZ2VzLgorICAgICAgICBUaG91Z2ggY3Vyc29ycyBzdGlsbCBjYW4gb25seSBjb250YWluIGNh
Y2hlZCBpbWFnZXMsIGl0IHdhcyBjbGVhbmVyIHRvIHJlZmFjdG9yIGl0IG91dCBhcyB3ZWxsLgor
CisgICAgICAgIFJlZmFjdG9yZWQgYmVzdC1maXQgaW1hZ2Ugc2VsZWN0aW9uIGZyb20gbG9hZGlu
Zy4gTm93IFN0eWxlQ2FjaGVkSW1hZ2UgaXMgaW4gY2hhcmdlIG9mIGxvYWRpbmcKKyAgICAgICAg
dGhlIGFjdHVhbCBpbWFnZSwgYW5kIFN0eWxlSW1hZ2VTZXQvU3R5bGVDdXJzb3JJbWFnZSBwZXJm
b3JtIHRoZSBzb3VyY2Ugc2VsZWN0aW9uLgorCisgICAgICAgIEFsc28sIGFkZGVkIHRoZSBuZWNl
c3NhcnkgbG9naWMgaW4gdGhlIENTUyBwYXJzZXIgdG8gY29uc3VtZSBnZW5lcmF0ZWQgaW1hZ2Vz
IGluc2lkZSBpbWFnZS1zZXRzLCBleGNsdWRpbmcKKyAgICAgICAgd2hlbiB0aGUgaW1hZ2Utc2V0
IGlzIGEgY3Vyc29yIHZhbHVlLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2Nzcy9pbWFnZS1zZXQt
cGFyc2luZy1nZW5lcmF0ZWQuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9oaWRwaS9pbWFnZS1z
ZXQtY3Jvc3MtZmFkZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2hpZHBpL2ltYWdlLXNldC1n
cmFkaWVudC1tdWx0aS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2hpZHBpL2ltYWdlLXNldC1n
cmFkaWVudC1zaW5nbGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9oaWRwaS9pbWFnZS1zZXQt
Z3JhZGllbnQuaHRtbAorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBm
aWxlcworCisgICAgICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6c2VsZWN0QmVzdEZpdEltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0N1cnNvckltYWdlVmFsdWU6OmxvYWRJbWFnZSk6IERlbGV0ZWQuCisg
ICAgICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuaDoKKyAgICAgICAgICAgICAgICBJbnN0
ZWFkIG9mIGN1cnNvciBsb2FkaW5nIHRoZSBpbWFnZSwgaXQgc2VsZWN0cyBhbiBpbWFnZSBDU1Mg
dmFsdWUKKworICAgICAgICAqIGNzcy9DU1NJbWFnZVNldFZhbHVlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ltYWdlU2V0VmFsdWU6OkNTU0ltYWdlU2V0VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTSW1hZ2VTZXRWYWx1ZTo6ZmlsbEltYWdlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ltYWdlU2V0VmFsdWU6OmNhY2hlZEltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ltYWdlU2V0VmFsdWU6OnNlbGVjdEJlc3RGaXRJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NJbWFnZVNldFZhbHVlOjp1cGRhdGVEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjppbWFnZVNldFdpdGhTdHlsZXNSZXNvbHZlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjp0cmF2ZXJzZVN1YnJlc291cmNlcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjpsb2FkQmVzdEZpdElt
YWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5oOgorICAgICAg
ICAgICAgICAgIFJlZmFjdG9yIENTU0ltYWdlU2V0VmFsdWUgdG8gaW5jbHVkZSBub24tY2FjaGVk
SW1hZ2UgaW1hZ2VzCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVDdXJzb3IpOgorICAgICAgICAqIGNzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVVybE9yU3RyaW5nQXNTdHJpbmdW
aWV3KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5oOgorICAgICAgICAgICAgICAgIAorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NTU1By
b3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRnVuYyk6CisgICAg
ICAgICAgICAgICAgV2hlbiBibGVuZGluZyB0d28gaW1hZ2VzLCBnZXQgdGhlIHNlbGVjdGVkIGlt
YWdlcyBpbiBjYXNlIGl0IGlzIGFuIGltYWdlLXNldAorCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
SW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2U6OmluaXRpYWxpemUpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FuRGlyZWN0bHlD
b21wb3NpdGVCYWNrZ3JvdW5kQmFja2dyb3VuZEltYWdlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3R5bGUvU2hhcGVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjppc0lt
YWdlVmFsaWQgY29uc3QpOgorICAgICAgICAgICAgICAgIFVzZSBoYXNDYWNoZWRJbWFnZSgpIGlu
c3RlYWQgb2YgaXNDYWNoZWRJbWFnZSgpIGFzIGEgU3R5bGVJbWFnZVNldCBpcyBubyBsb25nZXIg
YW4gaXNDYWNoZWRJbWFnZSgpCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNo
ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNhY2hlZEltYWdlOjpTdHlsZUNh
Y2hlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlVVJM
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OmxvYWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5n
L3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5
bGVDdXJzb3JJbWFnZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJ
bWFnZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZU11bHRpSW1hZ2UuY3BwOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlU2V0Lmg6CisgICAgICAgICogcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdHls
ZS9TdHlsZUltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUltYWdlOjpzZWxlY3RlZElt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW1hZ2U6OnNlbGVjdGVkSW1hZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVJbWFnZTo6aXNDdXJzb3JJbWFnZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUltYWdlOjppc0ltYWdlU2V0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlSW1hZ2U6Omhhc0NhY2hlZEltYWdlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlSW1hZ2U6OlN0eWxlSW1hZ2UpOgorICAgICAgICAgICAgICAgIFNlcGFyYXRl
IGN1cnNvci9pbWFnZS1zZXQgcmVsYXRlZCBzdHVmZiBhd2F5IGZyb20gU3R5bGVDYWNoZWRJbWFn
ZS4KKworICAgICAgICAqIHN0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OkJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb250ZW50KToKKyAgICAgICAg
KiBzdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
QnVpbGRlclN0YXRlOjpyZXNvbHZlSW1hZ2VTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OkJ1aWxkZXJTdGF0ZTo6Y3JlYXRlU3R5bGVJbWFnZSk6CisgICAgICAgICogc3R5bGUvU3R5
bGVCdWlsZGVyU3RhdGUuaDoKKyAgICAgICAgICAgICAgICBNYXRjaCB0aGUgQ1NTIHZhbHVlcyB3
aXRoIHRoZSBjb3JyZWN0IFN0eWxlIGNsYXNzLiBBbHNvLCBlbnN1cmUgaW1hZ2Utc2V0cyByZXNv
bHZlIHRoZWlyIAorICAgICAgICAgICAgICAgIGltYWdlcycgc3R5bGVzIGFzIHRoZXkgbWF5IGNv
bnRhaW4gZ3JhZGllbnRzIGFuZCBvdGhlciBjb250ZXh0LWF3YXJlIHZhbHVlcy4KKwogMjAyMC0w
MS0xOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10g
RGV2aXJ0dWFsaXplIEZvcm1hdHRpbmdTdGF0ZQpJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9u
IDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0yMjYyLDE1ICsyMjYyLDE4IEBAIHJlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmNwcAogcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5
bGVCb3hEYXRhLmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCityZW5k
ZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZURl
cHJlY2F0ZWRGbGV4aWJsZUJveERhdGEuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVGaWx0ZXJE
YXRhLmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlRmxleGlibGVCb3hEYXRhLmNwcAogcmVuZGVy
aW5nL3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVH
cmlkRGF0YS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZUdyaWRJdGVtRGF0YS5jcHAKK3JlbmRl
cmluZy9zdHlsZS9TdHlsZUltYWdlU2V0LmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJp
dGVkRGF0YS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZU1hcnF1ZWVEYXRhLmNwcAogcmVuZGVy
aW5nL3N0eWxlL1N0eWxlTXVsdGlDb2xEYXRhLmNwcAorcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVs
dGlJbWFnZS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcAog
cmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuY3BwCiByZW5kZXJpbmcv
c3R5bGUvU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjU0ODA4KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzcxNSw5ICsxMzcxNSwxNSBAQAogCQlDOURBREJDOTFCMUQzQjI1MDAx
RjE3RDggLyogSlNNZWRpYVNlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNNZWRpYVNlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDOURBREJDQTFCMUQzQjI1MDAxRjE3RDggLyogSlNNZWRpYVNlc3Npb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNZWRpYVNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzlGODdDRkQxQjI4RTVGNjAwOTc5QjgzIC8qIE1lZGlhU2Vzc2lvbkV2
ZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU2Vzc2lvbkV2ZW50cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDQTA5MUQ4NjIzQ0Y5MDc4MDBBRDQzNDYgLyogU3R5bGVJbWFnZVNl
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUltYWdlU2V0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0EwOTFEODkyM0NGOTA4ODAwQUQ0MzQ2IC8qIFN0eWxlSW1hZ2VT
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVJbWFnZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDQTE2MzVEQzIwNzJFNzY5MDBFN0QyQ0UgLyogUmVmZXJyZXJQb2xpY3kuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVmZXJyZXJQb2xpY3kuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQTNCRjY3QjEwRDk5QkFFMDBFNkNFNTMg
LyogU2Nyb2xsQW5pbWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU2Nyb2xsQW5pbWF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQTNC
RjY3RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQ0E1MkJBRTUyM0QwQUYxNjAwREUwQjg0IC8qIFN0eWxlQ3Vyc29ySW1hZ2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVDdXJzb3JJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUNBNTJCQUU3MjNEMEFGMTcwMERFMEI4NCAvKiBTdHlsZU11bHRpSW1h
Z2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVNdWx0aUltYWdlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0E1MkJBRTgyM0QwQUYxODAwREUwQjg0IC8qIFN0eWxlTXVs
dGlJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZU11bHRpSW1hZ2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0E1MkJBRTkyM0QwQUYxOTAwREUwQjg0IC8qIFN0eWxlQ3Vyc29y
SW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVDdXJzb3JJbWFnZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDQTZDMTUyRjIyMEI0QTU1MDA1NUNCRkMgLyogSlNJREJSZXF1ZXN0
Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCUmVx
dWVzdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNBNkMxNTM3MjIw
RDFFQjMwMDU1Q0JGQyAvKiBKU0lEQkN1cnNvckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0lEQkN1cnNvckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUNBNkMxNTM4MjIwRDFFQjMwMDU1Q0JGQyAvKiBKU0lEQkN1cnNvcldp
dGhWYWx1ZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yNTU1Myw2ICsyNTU1OSw4IEBACiAJCQkJQkNFRjQ0NEMwRTY3NDYyODAwMUMxMjg3IC8q
IFN0eWxlQ2FjaGVkSW1hZ2UuaCAqLywKIAkJCQkxQzBBQTE2QTIxOTQwREM3MDA4OTY4MjkgLyog
U3R5bGVDb2xvclNjaGVtZS5oICovLAogCQkJCTlEQUM3QzU2MUFGMkNCNjQwMDQzN0M0NCAvKiBT
dHlsZUNvbnRlbnRBbGlnbm1lbnREYXRhLmggKi8sCisJCQkJQ0E1MkJBRTUyM0QwQUYxNjAwREUw
Qjg0IC8qIFN0eWxlQ3Vyc29ySW1hZ2UuY3BwICovLAorCQkJCUNBNTJCQUU5MjNEMEFGMTkwMERF
MEI4NCAvKiBTdHlsZUN1cnNvckltYWdlLmggKi8sCiAJCQkJQkM3NzlFMTUxQkIyMjZBMjAwQ0FB
OEJGIC8qIFN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhLmggKi8sCiAJCQkJQkM1RUI4QjYwRTgyMDFC
RDAwQjI1OTY1IC8qIFN0eWxlRGVwcmVjYXRlZEZsZXhpYmxlQm94RGF0YS5jcHAgKi8sCiAJCQkJ
QkM1RUI4QjcwRTgyMDFCRDAwQjI1OTY1IC8qIFN0eWxlRGVwcmVjYXRlZEZsZXhpYmxlQm94RGF0
YS5oICovLApAQCAtMjU1NjcsMTIgKzI1NTc1LDE2IEBACiAJCQkJQTExMERCOUMxNEY1REY4NzAw
QTAzQjkzIC8qIFN0eWxlR3JpZEl0ZW1EYXRhLmNwcCAqLywKIAkJCQlBMTEwREI5QTE0RjVERjc3
MDBBMDNCOTMgLyogU3R5bGVHcmlkSXRlbURhdGEuaCAqLywKIAkJCQlCQ0VGNDNDRTBFNjczREEx
MDAxQzEyODcgLyogU3R5bGVJbWFnZS5oICovLAorCQkJCUNBMDkxRDg2MjNDRjkwNzgwMEFENDM0
NiAvKiBTdHlsZUltYWdlU2V0LmNwcCAqLywKKwkJCQlDQTA5MUQ4OTIzQ0Y5MDg4MDBBRDQzNDYg
LyogU3R5bGVJbWFnZVNldC5oICovLAogCQkJCUJDMjI3MzAxMEU4MkYxRTYwMEU3Rjk3NSAvKiBT
dHlsZUluaGVyaXRlZERhdGEuY3BwICovLAogCQkJCUJDMjI3MzAyMEU4MkYxRTYwMEU3Rjk3NSAv
KiBTdHlsZUluaGVyaXRlZERhdGEuaCAqLywKIAkJCQlCQzVFQjcyNzBFODFERTgxMDBCMjU5NjUg
LyogU3R5bGVNYXJxdWVlRGF0YS5jcHAgKi8sCiAJCQkJQkM1RUI3MjgwRTgxREU4MTAwQjI1OTY1
IC8qIFN0eWxlTWFycXVlZURhdGEuaCAqLywKIAkJCQlCQzVFQjc0QjBFODFFMDY3MDBCMjU5NjUg
LyogU3R5bGVNdWx0aUNvbERhdGEuY3BwICovLAogCQkJCUJDNUVCNzRDMEU4MUUwNjcwMEIyNTk2
NSAvKiBTdHlsZU11bHRpQ29sRGF0YS5oICovLAorCQkJCUNBNTJCQUU3MjNEMEFGMTcwMERFMEI4
NCAvKiBTdHlsZU11bHRpSW1hZ2UuY3BwICovLAorCQkJCUNBNTJCQUU4MjNEMEFGMTgwMERFMEI4
NCAvKiBTdHlsZU11bHRpSW1hZ2UuaCAqLywKIAkJCQlCQzIyNzJFMTBFODJFRTlCMDBFN0Y5NzUg
LyogU3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5jcHAgKi8sCiAJCQkJQkMyMjcyRTIwRTgyRUU5QjAw
RTdGOTc1IC8qIFN0eWxlUmFyZUluaGVyaXRlZERhdGEuaCAqLywKIAkJCQlCQzIyNzJCQTBFODJF
QUFFMDBFN0Y5NzUgLyogU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAgKi8sCkBAIC0zMTM1
Nyw2ICszMTM2OSw3IEBACiAJCQkJMTE5OUZBNDYyMDhFMzVBMzAwMjM1OENDIC8qIExheW91dENv
bnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkYyNkJCNkMyMzM0M0U2RjAwMkYyQkVBIC8q
IExheW91dENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTExMzEwQ0Y1MjBCQTRBNEMwMDY1
QThEMCAvKiBMYXlvdXREZXNjZW5kYW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0
MTgwMjU1MjNENDU0OUIwMEZGQjA3MSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUU0QUJBQkREMjM2MDg4RkUwMEZBNDM0NSAvKiBMYXlvdXRJbnRlZ3Jh
dGlvbkxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTExMzEwQ0Y0MjBCQTRBM0QwMDY1
QThEMCAvKiBMYXlvdXRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxRDcyRjYxNUZF
Njk1MzAwQzRDMDdFIC8qIExheW91dE1pbGVzdG9uZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjA1
MCw3ICszMjA2Myw2IEBACiAJCQkJNDU4RkU0MEExNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNl
YXJjaEZpZWxkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQg
LyogUmVuZGVyU2VsZWN0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUIyNDdBNkQwQUZE
NjM4MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQxODAy
NTUyM0Q0NTQ5QjAwRkZCMDcxIC8qIExheW91dEludGVncmF0aW9uQm94VHJlZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzE5NTVBODgxNjBEMTk5MjAwODU4MDI1IC8qIFJlbmRlclNuYXBzaG90dGVk
UGx1Z0luLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhDOEZBRTBERENEMzFCMDBCNTkyRjQgLyog
UmVuZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNjY4MEU4MUNCNzEwMEIyNTk2
NSAvKiBSZW5kZXJTdHlsZUNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk1LDE3ICs5NSwxNyBAQCB2b2lkIENTU0N1cnNvckltYWdlVmFsdWU6OmN1cnNvckVs
ZW1lbnRDCiAgICAgbV9ob3RTcG90LnNldFkoc3RhdGljX2Nhc3Q8aW50Pih5KSk7CiB9CiAKLXN0
ZDo6cGFpcjxDYWNoZWRJbWFnZSosIGZsb2F0PiBDU1NDdXJzb3JJbWFnZVZhbHVlOjpsb2FkSW1h
Z2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRp
b25zJiBvcHRpb25zKQorc3RkOjpwYWlyPENTU1ZhbHVlKiwgZmxvYXQ+IENTU0N1cnNvckltYWdl
VmFsdWU6OnNlbGVjdEJlc3RGaXRJbWFnZShEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgaWYg
KGlzPENTU0ltYWdlU2V0VmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkpCi0gICAgICAgIHJldHVy
biBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPihtX2ltYWdlVmFsdWUuZ2V0KCkpLmxvYWRCZXN0
Rml0SW1hZ2UobG9hZGVyLCBvcHRpb25zKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0lt
YWdlU2V0VmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkuc2VsZWN0QmVzdEZpdEltYWdlKGRvY3Vt
ZW50KTsKIAotICAgIGlmIChhdXRvKiBjdXJzb3JFbGVtZW50ID0gdXBkYXRlQ3Vyc29yRWxlbWVu
dCgqbG9hZGVyLmRvY3VtZW50KCkpKSB7CisgICAgaWYgKGF1dG8qIGN1cnNvckVsZW1lbnQgPSB1
cGRhdGVDdXJzb3JFbGVtZW50KCpkb2N1bWVudCkpIHsKICAgICAgICAgaWYgKGN1cnNvckVsZW1l
bnQtPmhyZWYoKSAhPSBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX2ltYWdlVmFsdWUuZ2V0KCkp
LnVybCgpKQotICAgICAgICAgICAgbV9pbWFnZVZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRl
KGxvYWRlci5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChjdXJzb3JFbGVtZW50LT5ocmVmKCkpLCBt
X2xvYWRlZEZyb21PcGFxdWVTb3VyY2UpOworICAgICAgICAgICAgbV9pbWFnZVZhbHVlID0gQ1NT
SW1hZ2VWYWx1ZTo6Y3JlYXRlKGRvY3VtZW50LT5jb21wbGV0ZVVSTChjdXJzb3JFbGVtZW50LT5o
cmVmKCkpLCBtX2xvYWRlZEZyb21PcGFxdWVTb3VyY2UpOwogICAgIH0KIAotICAgIHJldHVybiB7
IGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkubG9hZEltYWdlKGxv
YWRlciwgb3B0aW9ucyksIDEgfTsKKyAgICByZXR1cm4geyBtX2ltYWdlVmFsdWUucHRyKCkgLCAx
IH07CiB9CiAKIGJvb2wgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6ZXF1YWxzKGNvbnN0IENTU0N1cnNv
ckltYWdlVmFsdWUmIG90aGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1
cnNvckltYWdlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vy
c29ySW1hZ2VWYWx1ZS5oCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCwxMCBAQCBj
bGFzcyBFbGVtZW50OwogY2xhc3MgU1ZHQ3Vyc29yRWxlbWVudDsKIGNsYXNzIFNWR0VsZW1lbnQ7
CiAKK25hbWVzcGFjZSBTdHlsZSB7CitjbGFzcyBCdWlsZGVyU3RhdGU7Cit9CisKIGNsYXNzIENT
U0N1cnNvckltYWdlVmFsdWUgZmluYWwgOiBwdWJsaWMgQ1NTVmFsdWUgewogcHVibGljOgogICAg
IHN0YXRpYyBSZWY8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4gY3JlYXRlKFJlZjxDU1NWYWx1ZT4mJiBp
bWFnZVZhbHVlLCBib29sIGhhc0hvdFNwb3QsIGNvbnN0IEludFBvaW50JiBob3RTcG90LCBMb2Fk
ZWRGcm9tT3BhcXVlU291cmNlIGxvYWRlZEZyb21PcGFxdWVTb3VyY2UpCkBAIC01Niw3ICs2MCw3
IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3Q7CiAKLSAgICBz
dGQ6OnBhaXI8Q2FjaGVkSW1hZ2UqLCBmbG9hdD4gbG9hZEltYWdlKENhY2hlZFJlc291cmNlTG9h
ZGVyJiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJik7CisgICAgc3RkOjpwYWlyPENTU1Zh
bHVlKiwgZmxvYXQ+IHNlbGVjdEJlc3RGaXRJbWFnZShEb2N1bWVudCopOwogCiAgICAgdm9pZCBy
ZW1vdmVSZWZlcmVuY2VkRWxlbWVudChTVkdFbGVtZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NJbWFnZVNldFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTkg
KzI4LDE1IEBACiAKICNpbmNsdWRlICJDU1NJbWFnZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJp
bWl0aXZlVmFsdWUuaCIKLSNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgiCi0j
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlN0eWxlQnVpbGRlclN0YXRl
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUNTU0ltYWdlU2V0VmFsdWU6OkNTU0ltYWdlU2V0VmFsdWUoTG9hZGVkRnJvbU9w
YXF1ZVNvdXJjZSBsb2FkZWRGcm9tT3BhcXVlU291cmNlKQorQ1NTSW1hZ2VTZXRWYWx1ZTo6Q1NT
SW1hZ2VTZXRWYWx1ZSgpCiAgICAgOiBDU1NWYWx1ZUxpc3QoSW1hZ2VTZXRDbGFzcywgQ29tbWFT
ZXBhcmF0b3IpCi0gICAgLCBtX2xvYWRlZEZyb21PcGFxdWVTb3VyY2UobG9hZGVkRnJvbU9wYXF1
ZVNvdXJjZSkKIHsKIH0KIApAQCAtNTIsMTUgKzQ4LDE0IEBAIHZvaWQgQ1NTSW1hZ2VTZXRWYWx1
ZTo6ZmlsbEltYWdlU2V0KCkKICAgICBzaXplX3QgaSA9IDA7CiAgICAgd2hpbGUgKGkgPCBsZW5n
dGgpIHsKICAgICAgICAgQ1NTVmFsdWUqIGltYWdlVmFsdWUgPSBpdGVtKGkpOwotICAgICAgICBV
UkwgaW1hZ2VVUkwgPSBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPigqaW1hZ2VWYWx1ZSkudXJsKCk7
Ci0KKyAgICAgICAgQVNTRVJUKGlzPENTU0ltYWdlVmFsdWU+KGltYWdlVmFsdWUpIHx8IGlzPENT
U0ltYWdlR2VuZXJhdG9yVmFsdWU+KGltYWdlVmFsdWUpKTsKICAgICAgICAgKytpOwogICAgICAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpIDwgbGVuZ3RoKTsKICAgICAgICAg
Q1NTVmFsdWUqIHNjYWxlRmFjdG9yVmFsdWUgPSBpdGVtKGkpOwogICAgICAgICBmbG9hdCBzY2Fs
ZUZhY3RvciA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqc2NhbGVGYWN0b3JWYWx1ZSku
ZmxvYXRWYWx1ZSgpOwogCiAgICAgICAgIEltYWdlV2l0aFNjYWxlIGltYWdlOwotICAgICAgICBp
bWFnZS5pbWFnZVVSTCA9IGltYWdlVVJMOworICAgICAgICBpbWFnZS52YWx1ZSA9IGltYWdlVmFs
dWU7CiAgICAgICAgIGltYWdlLnNjYWxlRmFjdG9yID0gc2NhbGVGYWN0b3I7CiAgICAgICAgIG1f
aW1hZ2VzSW5TZXQuYXBwZW5kKGltYWdlKTsKICAgICAgICAgKytpOwpAQCAtODUsMTEgKzgwLDE4
IEBAIENTU0ltYWdlU2V0VmFsdWU6OkltYWdlV2l0aFNjYWxlIENTU0ltYWcKICAgICByZXR1cm4g
aW1hZ2U7CiB9CiAKLXN0ZDo6cGFpcjxDYWNoZWRJbWFnZSosIGZsb2F0PiBDU1NJbWFnZVNldFZh
bHVlOjpsb2FkQmVzdEZpdEltYWdlKENhY2hlZFJlc291cmNlTG9hZGVyJiBsb2FkZXIsIGNvbnN0
IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKK0NhY2hlZEltYWdlKiBDU1NJbWFnZVNl
dFZhbHVlOjpjYWNoZWRJbWFnZSgpIGNvbnN0CiB7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
bG9hZGVyLmRvY3VtZW50KCk7Ci0gICAgQVNTRVJUKGRvY3VtZW50KTsKKyAgICBpZiAoIW1fc2Vs
ZWN0ZWRJbWFnZVZhbHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoaXM8Q1NT
SW1hZ2VWYWx1ZT4obV9zZWxlY3RlZEltYWdlVmFsdWUpKQorICAgICAgICByZXR1cm4gZG93bmNh
c3Q8Q1NTSW1hZ2VWYWx1ZT4obV9zZWxlY3RlZEltYWdlVmFsdWUpLT5jYWNoZWRJbWFnZSgpOwor
ICAgIHJldHVybiBudWxscHRyOworfQogCitzdGQ6OnBhaXI8Q1NTVmFsdWUqLCBmbG9hdD4gQ1NT
SW1hZ2VTZXRWYWx1ZTo6c2VsZWN0QmVzdEZpdEltYWdlKERvY3VtZW50KiBkb2N1bWVudCkKK3sK
KyAgICBBU1NFUlQoZG9jdW1lbnQpOwogICAgIHVwZGF0ZURldmljZVNjYWxlRmFjdG9yKCpkb2N1
bWVudCk7CiAKICAgICBpZiAoIW1fYWNjZXNzZWRCZXN0Rml0SW1hZ2UpIHsKQEAgLTk5LDE4ICsx
MDEsMTcgQEAgc3RkOjpwYWlyPENhY2hlZEltYWdlKiwgZmxvYXQ+IENTU0ltYWdlUwogICAgICAg
ICAvLyBBbGwgZm9ybXMgb2Ygc2NhbGUgc2hvdWxkIGJlIGluY2x1ZGVkOiBQYWdlOjpwYWdlU2Nh
bGVGYWN0b3IoKSwgRnJhbWU6OnBhZ2Vab29tRmFjdG9yKCksCiAgICAgICAgIC8vIGFuZCBhbnkg
Q1NTIHRyYW5zZm9ybXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
MTY5OAogICAgICAgICBJbWFnZVdpdGhTY2FsZSBpbWFnZSA9IGJlc3RJbWFnZUZvclNjYWxlRmFj
dG9yKCk7Ci0KLSAgICAgICAgUmVzb3VyY2VMb2FkZXJPcHRpb25zIGxvYWRPcHRpb25zID0gb3B0
aW9uczsKLSAgICAgICAgbG9hZE9wdGlvbnMubG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSA9IG1fbG9h
ZGVkRnJvbU9wYXF1ZVNvdXJjZTsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVl
c3QoUmVzb3VyY2VSZXF1ZXN0KGRvY3VtZW50LT5jb21wbGV0ZVVSTChpbWFnZS5pbWFnZVVSTCkp
LCBsb2FkT3B0aW9ucyk7Ci0gICAgICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9yKGNhY2hlZFJlc291
cmNlUmVxdWVzdEluaXRpYXRvcnMoKS5jc3MpOwotICAgICAgICBpZiAob3B0aW9ucy5tb2RlID09
IEZldGNoT3B0aW9uczo6TW9kZTo6Q29ycykKLSAgICAgICAgICAgIHJlcXVlc3QudXBkYXRlRm9y
QWNjZXNzQ29udHJvbCgqZG9jdW1lbnQpOwotCi0gICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBsb2Fk
ZXIucmVxdWVzdEltYWdlKFdURk1vdmUocmVxdWVzdCkpLnZhbHVlX29yKG51bGxwdHIpOwogICAg
ICAgICBtX2Jlc3RGaXRJbWFnZVNjYWxlRmFjdG9yID0gaW1hZ2Uuc2NhbGVGYWN0b3I7CisgICAg
ICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihpbWFnZS52YWx1ZSkpIHsKKyAgICAg
ICAgICAgIG1fc2VsZWN0ZWRJbWFnZVZhbHVlID0gaW1hZ2UudmFsdWU7CisgICAgICAgICAgICBy
ZXR1cm4geyBtX3NlbGVjdGVkSW1hZ2VWYWx1ZSwgbV9iZXN0Rml0SW1hZ2VTY2FsZUZhY3RvciB9
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgQVNTRVJUKGlzPENTU0ltYWdlVmFs
dWU+KGltYWdlLnZhbHVlKSk7CisgICAgICAgIG1fc2VsZWN0ZWRJbWFnZVZhbHVlID0gaW1hZ2Uu
dmFsdWU7CiAgICAgfQotICAgIHJldHVybiB7IG1fY2FjaGVkSW1hZ2UuZ2V0KCksIG1fYmVzdEZp
dEltYWdlU2NhbGVGYWN0b3IgfTsKKworICAgIHJldHVybiB7IG1fc2VsZWN0ZWRJbWFnZVZhbHVl
LCBtX2Jlc3RGaXRJbWFnZVNjYWxlRmFjdG9yIH07CiB9CiAKIHZvaWQgQ1NTSW1hZ2VTZXRWYWx1
ZTo6dXBkYXRlRGV2aWNlU2NhbGVGYWN0b3IoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQpAQCAt
MTIwLDcgKzEyMSwyNSBAQCB2b2lkIENTU0ltYWdlU2V0VmFsdWU6OnVwZGF0ZURldmljZVNjYWxl
CiAgICAgICAgIHJldHVybjsKICAgICBtX2RldmljZVNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVG
YWN0b3I7CiAgICAgbV9hY2Nlc3NlZEJlc3RGaXRJbWFnZSA9IGZhbHNlOwotICAgIG1fY2FjaGVk
SW1hZ2UgPSBudWxscHRyOworICAgIG1fc2VsZWN0ZWRJbWFnZVZhbHVlID0gbnVsbHB0cjsKK30K
KworUmVmPENTU0ltYWdlU2V0VmFsdWU+IENTU0ltYWdlU2V0VmFsdWU6OmltYWdlU2V0V2l0aFN0
eWxlc1Jlc29sdmVkKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKK3sKKyAgICBS
ZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gcmVzdWx0ID0gQ1NTSW1hZ2VTZXRWYWx1ZTo6Y3JlYXRlKCk7
CisgICAgc2l6ZV90IGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAgIHNpemVfdCBpID0gMDsK
KyAgICB3aGlsZSAoaSA8IGxlbmd0aCkgeworICAgICAgICBDU1NWYWx1ZSogaW1hZ2VWYWx1ZSA9
IGl0ZW0oaSk7CisgICAgICAgIFJlZjxDU1NWYWx1ZT4gcmVzb2x2ZWRWYWx1ZSA9IGJ1aWxkZXJT
dGF0ZS5yZXNvbHZlSW1hZ2VTdHlsZXMoKmltYWdlVmFsdWUpOworICAgICAgICByZXN1bHQtPmFw
cGVuZChXVEZNb3ZlKHJlc29sdmVkVmFsdWUpKTsKKyAgICAgICAgKytpOworCisgICAgICAgIHJl
c3VsdC0+YXBwZW5kKFJlZigqaXRlbShpKSkpOworICAgICAgICArK2k7CisgICAgfQorCisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogU3RyaW5nIENTU0ltYWdlU2V0VmFsdWU6OmN1c3RvbUNTU1Rl
eHQoKSBjb25zdApAQCAtMTU1LDkgKzE3NCw5IEBAIFN0cmluZyBDU1NJbWFnZVNldFZhbHVlOjpj
dXN0b21DU1NUZXh0KCkKIAogYm9vbCBDU1NJbWFnZVNldFZhbHVlOjp0cmF2ZXJzZVN1YnJlc291
cmNlcyhjb25zdCBXVEY6OkZ1bmN0aW9uPGJvb2wgKGNvbnN0IENhY2hlZFJlc291cmNlJik+JiBo
YW5kbGVyKSBjb25zdAogewotICAgIGlmICghbV9jYWNoZWRJbWFnZSkKKyAgICBpZiAoIW1fc2Vs
ZWN0ZWRJbWFnZVZhbHVlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGhhbmRs
ZXIoKm1fY2FjaGVkSW1hZ2UpOworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2VWYWx1ZS0+dHJh
dmVyc2VTdWJyZXNvdXJjZXMoaGFuZGxlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUuaAkocmV2aXNpb24gMjU0ODA4
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsMjIgKzM1LDI3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENhY2hlZElt
YWdlOwogY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBEb2N1bWVudDsKK2NsYXNz
IENTU0ltYWdlVmFsdWU7CisKK25hbWVzcGFjZSBTdHlsZSB7CitjbGFzcyBCdWlsZGVyU3RhdGU7
Cit9CiAKIGNsYXNzIENTU0ltYWdlU2V0VmFsdWUgZmluYWwgOiBwdWJsaWMgQ1NTVmFsdWVMaXN0
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0ltYWdlU2V0VmFsdWU+IGNyZWF0ZShMb2Fk
ZWRGcm9tT3BhcXVlU291cmNlIGxvYWRlZEZyb21PcGFxdWVTb3VyY2UpCisgICAgc3RhdGljIFJl
ZjxDU1NJbWFnZVNldFZhbHVlPiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQ1NTSW1hZ2VTZXRWYWx1ZShsb2FkZWRGcm9tT3BhcXVlU291cmNlKSk7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ltYWdlU2V0VmFsdWUoKSk7CiAgICAgfQogICAg
IH5DU1NJbWFnZVNldFZhbHVlKCk7CiAKLSAgICBzdGQ6OnBhaXI8Q2FjaGVkSW1hZ2UqLCBmbG9h
dD4gIGxvYWRCZXN0Rml0SW1hZ2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJj
ZUxvYWRlck9wdGlvbnMmKTsKLSAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UoKSBjb25zdCB7
IHJldHVybiBtX2NhY2hlZEltYWdlLmdldCgpOyB9CisgICAgc3RkOjpwYWlyPENTU1ZhbHVlKiwg
ZmxvYXQ+ICBzZWxlY3RCZXN0Rml0SW1hZ2UoRG9jdW1lbnQqKTsKKyAgICBDYWNoZWRJbWFnZSog
Y2FjaGVkSW1hZ2UoKSBjb25zdDsKIAogICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3Q7
CiAKICAgICBzdHJ1Y3QgSW1hZ2VXaXRoU2NhbGUgewotICAgICAgICBVUkwgaW1hZ2VVUkw7Cisg
ICAgICAgIENTU1ZhbHVlKiB2YWx1ZTsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3I7CiAgICAg
fTsKIApAQCAtNTgsMjQgKzYzLDIzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXBkYXRlRGV2aWNl
U2NhbGVGYWN0b3IoY29uc3QgRG9jdW1lbnQmKTsKIAotICAgIFVSTCBiZXN0SW1hZ2VGb3JTY2Fs
ZUZhY3RvclVSTCgpIHsgcmV0dXJuIGJlc3RJbWFnZUZvclNjYWxlRmFjdG9yKCkuaW1hZ2VVUkw7
IH0KKyAgICBSZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gaW1hZ2VTZXRXaXRoU3R5bGVzUmVzb2x2ZWQo
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VXaXRoU2NhbGUg
YmVzdEltYWdlRm9yU2NhbGVGYWN0b3IoKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDU1NJ
bWFnZVNldFZhbHVlKExvYWRlZEZyb21PcGFxdWVTb3VyY2UpOworICAgIGV4cGxpY2l0IENTU0lt
YWdlU2V0VmFsdWUoKTsKIAogICAgIHZvaWQgZmlsbEltYWdlU2V0KCk7CiAgICAgc3RhdGljIGlu
bGluZSBib29sIGNvbXBhcmVCeVNjYWxlRmFjdG9yKEltYWdlV2l0aFNjYWxlIGZpcnN0LCBJbWFn
ZVdpdGhTY2FsZSBzZWNvbmQpIHsgcmV0dXJuIGZpcnN0LnNjYWxlRmFjdG9yIDwgc2Vjb25kLnNj
YWxlRmFjdG9yOyB9CiAKLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRJbWFnZT4gbV9j
YWNoZWRJbWFnZTsKKyAgICBDU1NWYWx1ZSogbV9zZWxlY3RlZEltYWdlVmFsdWUgeyBudWxscHRy
IH07CiAgICAgYm9vbCBtX2FjY2Vzc2VkQmVzdEZpdEltYWdlIHsgZmFsc2UgfTsKICAgICBmbG9h
dCBtX2Jlc3RGaXRJbWFnZVNjYWxlRmFjdG9yIHsgMSB9OwogICAgIGZsb2F0IG1fZGV2aWNlU2Nh
bGVGYWN0b3IgeyAxIH07CiAKICAgICBWZWN0b3I8SW1hZ2VXaXRoU2NhbGU+IG1faW1hZ2VzSW5T
ZXQ7Ci0gICAgTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSBtX2xvYWRlZEZyb21PcGFxdWVTb3VyY2Ug
eyBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpObyB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlci5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUxLDcgKzIxNTEsNyBA
QCBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lCiBzdGF0aWMgUmVmUHRy
PENTU1ZhbHVlPiBjb25zdW1lQ3Vyc29yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25z
dCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0LCBib29sIGluUXVpcmtzTW9kZSkKIHsKICAgICBS
ZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0OwotICAgIHdoaWxlIChSZWZQdHI8Q1NTVmFsdWU+IGlt
YWdlID0gY29uc3VtZUltYWdlKHJhbmdlLCBjb250ZXh0LCBDb25zdW1lR2VuZXJhdGVkSW1hZ2U6
OkZvcmJpZCkpIHsKKyAgICB3aGlsZSAoUmVmUHRyPENTU1ZhbHVlPiBpbWFnZSA9IGNvbnN1bWVJ
bWFnZShyYW5nZSwgY29udGV4dCwgQWxsb3dlZEltYWdlVHlwZXM6OlVybEZ1bmN0aW9uIHwgQWxs
b3dlZEltYWdlVHlwZXM6OkltYWdlU2V0KSkgewogICAgICAgICBkb3VibGUgbnVtOwogICAgICAg
ICBJbnRQb2ludCBob3RTcG90KC0xLCAtMSk7CiAgICAgICAgIGJvb2wgaG90U3BvdFNwZWNpZmll
ZCA9IGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDc5LDI0ICsxNDc5LDE2IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNv
bnN1bWVHZW5lcmF0ZWQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgU3RyaW5nVmll
dyBjb25zdW1lVXJsT3JTdHJpbmdBc1N0cmluZ1ZpZXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJn
cykKLXsKLSAgICBpZiAoYXJncy5wZWVrKCkudHlwZSgpID09IFN0cmluZ1Rva2VuKQotICAgICAg
ICByZXR1cm4gYXJncy5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLnZhbHVlKCk7Ci0gICAg
cmV0dXJuIGNvbnN1bWVVcmxBc1N0cmluZ1ZpZXcoYXJncyk7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8
Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZVNldChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29u
c3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNv
bnN1bWVJbWFnZVNldChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2Vy
Q29udGV4dCYgY29udGV4dCwgdW5zaWduZWQgYWxsb3dlZEltYWdlVHlwZXMpCiB7CiAgICAgQ1NT
UGFyc2VyVG9rZW5SYW5nZSByYW5nZUNvcHkgPSByYW5nZTsKICAgICBDU1NQYXJzZXJUb2tlblJh
bmdlIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2VDb3B5KTsKLSAgICBSZWZQdHI8Q1NTSW1h
Z2VTZXRWYWx1ZT4gaW1hZ2VTZXQgPSBDU1NJbWFnZVNldFZhbHVlOjpjcmVhdGUoY29udGV4dC5p
c0NvbnRlbnRPcGFxdWUgPyBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpZZXMgOiBMb2FkZWRGcm9t
T3BhcXVlU291cmNlOjpObyk7CisgICAgUmVmUHRyPENTU0ltYWdlU2V0VmFsdWU+IGltYWdlU2V0
ID0gQ1NTSW1hZ2VTZXRWYWx1ZTo6Y3JlYXRlKCk7CiAgICAgZG8gewotICAgICAgICBBdG9tU3Ry
aW5nIHVybFZhbHVlID0gY29uc3VtZVVybE9yU3RyaW5nQXNTdHJpbmdWaWV3KGFyZ3MpLnRvQXRv
bVN0cmluZygpOwotICAgICAgICBpZiAodXJsVmFsdWUuaXNOdWxsKCkpCisgICAgICAgIFJlZlB0
cjxDU1NWYWx1ZT4gaW1hZ2UgPSBjb25zdW1lSW1hZ2UoYXJncywgY29udGV4dCwgKGFsbG93ZWRJ
bWFnZVR5cGVzIHwgQWxsb3dlZEltYWdlVHlwZXM6OlJhd1N0cmluZ0FzVXJsKSAmICh+QWxsb3dl
ZEltYWdlVHlwZXM6OkltYWdlU2V0KSk7CisgICAgICAgIGlmICghaW1hZ2UpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGltYWdlID0gQ1NT
SW1hZ2VWYWx1ZTo6Y3JlYXRlKGNvbXBsZXRlVVJMKGNvbnRleHQsIHVybFZhbHVlKSwgY29udGV4
dC5pc0NvbnRlbnRPcGFxdWUgPyBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpZZXMgOiBMb2FkZWRG
cm9tT3BhcXVlU291cmNlOjpObyk7CiAgICAgICAgIGltYWdlU2V0LT5hcHBlbmQoaW1hZ2UucmVs
ZWFzZU5vbk51bGwoKSk7CiAKICAgICAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0g
YXJncy5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwpAQCAtMTcxMSwxOSArMTcwMywyNSBA
QCBSZWZQdHI8Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVTaW5nbGVTaGFkCiAgICAgcmV0dXJuIENT
U1NoYWRvd1ZhbHVlOjpjcmVhdGUoV1RGTW92ZShob3Jpem9udGFsT2Zmc2V0KSwgV1RGTW92ZSh2
ZXJ0aWNhbE9mZnNldCksIFdURk1vdmUoYmx1clJhZGl1cyksIFdURk1vdmUoc3ByZWFkRGlzdGFu
Y2UpLCBXVEZNb3ZlKHN0eWxlKSwgV1RGTW92ZShjb2xvcikpOwogfQogCi1SZWZQdHI8Q1NTVmFs
dWU+IGNvbnN1bWVJbWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyQ29u
dGV4dCBjb250ZXh0LCBDb25zdW1lR2VuZXJhdGVkSW1hZ2UgZ2VuZXJhdGVkSW1hZ2UpCitSZWZQ
dHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NT
UGFyc2VyQ29udGV4dCBjb250ZXh0LCB1bnNpZ25lZCBhbGxvd2VkSW1hZ2VUeXBlcykKIHsKLSAg
ICBBdG9tU3RyaW5nIHVyaSA9IGNvbnN1bWVVcmxBc1N0cmluZ1ZpZXcocmFuZ2UpLnRvQXRvbVN0
cmluZygpOwotICAgIGlmICghdXJpLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gQ1NTSW1hZ2VW
YWx1ZTo6Y3JlYXRlKGNvbXBsZXRlVVJMKGNvbnRleHQsIHVyaSksIGNvbnRleHQuaXNDb250ZW50
T3BhcXVlID8gTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6WWVzIDogTG9hZGVkRnJvbU9wYXF1ZVNv
dXJjZTo6Tm8pOworICAgIGlmICgocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBTdHJpbmdUb2tlbikg
JiYgKGFsbG93ZWRJbWFnZVR5cGVzICYgQWxsb3dlZEltYWdlVHlwZXM6OlJhd1N0cmluZ0FzVXJs
KSkKKyAgICAgICAgcmV0dXJuIENTU0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTChjb250
ZXh0LCByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLnZhbHVlKCkudG9BdG9tU3Ry
aW5nKCkpLCBjb250ZXh0LmlzQ29udGVudE9wYXF1ZSA/IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6
OlllcyA6IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6Ok5vKTsKIAogICAgIGlmIChyYW5nZS5wZWVr
KCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pIHsKICAgICAgICAgQ1NTVmFsdWVJRCBpZCA9IHJh
bmdlLnBlZWsoKS5mdW5jdGlvbklkKCk7Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtp
dEltYWdlU2V0IHx8IGlkID09IENTU1ZhbHVlSW1hZ2VTZXQpCi0gICAgICAgICAgICByZXR1cm4g
Y29uc3VtZUltYWdlU2V0KHJhbmdlLCBjb250ZXh0KTsKLSAgICAgICAgaWYgKGdlbmVyYXRlZElt
YWdlID09IENvbnN1bWVHZW5lcmF0ZWRJbWFnZTo6QWxsb3cgJiYgaXNHZW5lcmF0ZWRJbWFnZShp
ZCkpCisgICAgICAgIGlmICgoYWxsb3dlZEltYWdlVHlwZXMgJiBBbGxvd2VkSW1hZ2VUeXBlczo6
SW1hZ2VTZXQpICYmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdEltYWdlU2V0IHx8IGlkID09IENTU1Zh
bHVlSW1hZ2VTZXQpKQorICAgICAgICAgICAgcmV0dXJuIGNvbnN1bWVJbWFnZVNldChyYW5nZSwg
Y29udGV4dCwgYWxsb3dlZEltYWdlVHlwZXMpOworICAgICAgICBpZiAoKGFsbG93ZWRJbWFnZVR5
cGVzICYgQWxsb3dlZEltYWdlVHlwZXM6OkdlbmVyYXRlZEltYWdlKSAmJiBpc0dlbmVyYXRlZElt
YWdlKGlkKSkKICAgICAgICAgICAgIHJldHVybiBjb25zdW1lR2VuZXJhdGVkSW1hZ2UocmFuZ2Us
IGNvbnRleHQpOwogICAgIH0KKworICAgIGlmIChhbGxvd2VkSW1hZ2VUeXBlcyAmIEFsbG93ZWRJ
bWFnZVR5cGVzOjpVcmxGdW5jdGlvbikgeworICAgICAgICBBdG9tU3RyaW5nIHVyaSA9IGNvbnN1
bWVVcmxBc1N0cmluZ1ZpZXcocmFuZ2UpLnRvQXRvbVN0cmluZygpOworICAgICAgICBpZiAoIXVy
aS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY29t
cGxldGVVUkwoY29udGV4dCwgdXJpKSwgY29udGV4dC5pc0NvbnRlbnRPcGFxdWUgPyBMb2FkZWRG
cm9tT3BhcXVlU291cmNlOjpZZXMgOiBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpObyk7CisgICAg
fQorCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAkocmV2aXNpb24gMjU0
ODA4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtODksMTIgKzg5LDE2IEBAIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gY29uc3VtZVBvc2l0aW8KIGJvb2wgY29uc3VtZVBvc2l0aW9uKENTU1BhcnNlclRv
a2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBQb3NpdGlvblN5bnRheCwg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgcmVzdWx0WCwgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiYgcmVzdWx0WSk7CiBib29sIGNvbnN1bWVPbmVPclR3b1ZhbHVlZFBvc2l0aW9uKENTU1Bh
cnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+JiByZXN1bHRYLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiByZXN1
bHRZKTsKIAotZW51bSBjbGFzcyBDb25zdW1lR2VuZXJhdGVkSW1hZ2UgewotICAgIEFsbG93LAot
ICAgIEZvcmJpZAorZW51bSBBbGxvd2VkSW1hZ2VUeXBlcyB7CisgICAgRm9yYmlkID0gMCwKKyAg
ICBVcmxGdW5jdGlvbiA9IDEsCisgICAgUmF3U3RyaW5nQXNVcmwgPSAyLAorICAgIEltYWdlU2V0
ID0gNCwKKyAgICBHZW5lcmF0ZWRJbWFnZSA9IDgKIH07CiAKLVJlZlB0cjxDU1NWYWx1ZT4gY29u
c3VtZUltYWdlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJDb250ZXh0LCBDb25zdW1l
R2VuZXJhdGVkSW1hZ2UgPSBDb25zdW1lR2VuZXJhdGVkSW1hZ2U6OkFsbG93KTsKK1JlZlB0cjxD
U1NWYWx1ZT4gY29uc3VtZUltYWdlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJDb250
ZXh0LCB1bnNpZ25lZCBhbGxvd2VkSW1hZ2VUeXBlcyA9IEFsbG93ZWRJbWFnZVR5cGVzOjpVcmxG
dW5jdGlvbiB8IEFsbG93ZWRJbWFnZVR5cGVzOjpJbWFnZVNldCB8IEFsbG93ZWRJbWFnZVR5cGVz
OjpHZW5lcmF0ZWRJbWFnZSk7CisKIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlT3JOb25l
KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJDb250ZXh0KTsKIAogZW51bSBjbGFzcyBB
bGxvd2VkRmlsdGVyRnVuY3Rpb25zIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDI1NDgw
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDYgKzMzMywxMSBAQCBzdGF0aWMgaW5saW5lIFJl
ZlB0cjxTdHlsZUltYWdlPiBibGVuZEZ1CiAgICAgaWYgKCFmcm9tIHx8ICF0bykKICAgICAgICAg
cmV0dXJuIHRvOwogCisgICAgZnJvbSA9IGZyb20tPnNlbGVjdGVkSW1hZ2UoKTsKKyAgICB0byA9
IHRvLT5zZWxlY3RlZEltYWdlKCk7CisgICAgQVNTRVJUKHRvKTsKKyAgICBBU1NFUlQoZnJvbSk7
CisKICAgICAvLyBBbmltYXRpb24gYmV0d2VlbiB0d28gZ2VuZXJhdGVkIGltYWdlcy4gQ3Jvc3Mg
ZmFkZSBmb3IgYWxsIG90aGVyIGNhc2VzLgogICAgIGlmIChpczxTdHlsZUdlbmVyYXRlZEltYWdl
PigqZnJvbSkgJiYgaXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKnRvKSkgewogICAgICAgICBDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlJiBmcm9tR2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5bGVHZW5lcmF0
ZWRJbWFnZT4oKmZyb20pLmltYWdlVmFsdWUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gMjU0ODA4KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTYyLDcgKzk2Miw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6
OnBhaW50RmlsbExheWUKIAogICAgICAgICAgICAgYXV0byBkcmF3UmVzdWx0ID0gY29udGV4dC5k
cmF3VGlsZWRJbWFnZSgqaW1hZ2UsIGdlb21ldHJ5LmRlc3RSZWN0KCksIHRvTGF5b3V0UG9pbnQo
Z2VvbWV0cnkucmVsYXRpdmVQaGFzZSgpKSwgZ2VvbWV0cnkudGlsZVNpemUoKSwgZ2VvbWV0cnku
c3BhY2VTaXplKCksIG9wdGlvbnMpOwogICAgICAgICAgICAgaWYgKGRyYXdSZXN1bHQgPT0gSW1h
Z2VEcmF3UmVzdWx0OjpEaWRSZXF1ZXN0RGVjb2RpbmcpIHsKLSAgICAgICAgICAgICAgICBBU1NF
UlQoYmdJbWFnZS0+aXNDYWNoZWRJbWFnZSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoYmdJ
bWFnZS0+aGFzQ2FjaGVkSW1hZ2UoKSk7CiAgICAgICAgICAgICAgICAgYmdJbWFnZS0+Y2FjaGVk
SW1hZ2UoKS0+YWRkQ2xpZW50V2FpdGluZ0ZvckFzeW5jRGVjb2RpbmcoKnRoaXMpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5jcHAJKHJldmlzaW9uIDI1
NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlU3R5
bGVJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgUmVuZGVySW1hZ2VS
ZXNvdXJjZVN0eWxlSW1hZ2U6OlJlbmRlckltYQogCiB2b2lkIFJlbmRlckltYWdlUmVzb3VyY2VT
dHlsZUltYWdlOjppbml0aWFsaXplKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQogewotICAgIFJl
bmRlckltYWdlUmVzb3VyY2U6OmluaXRpYWxpemUocmVuZGVyZXIsIG1fc3R5bGVJbWFnZS0+aXND
YWNoZWRJbWFnZSgpID8gbV9zdHlsZUltYWdlLmdldCgpLmNhY2hlZEltYWdlKCkgOiBudWxscHRy
KTsKKyAgICBSZW5kZXJJbWFnZVJlc291cmNlOjppbml0aWFsaXplKHJlbmRlcmVyLCBtX3N0eWxl
SW1hZ2UtPmhhc0NhY2hlZEltYWdlKCkgPyBtX3N0eWxlSW1hZ2UuZ2V0KCkuY2FjaGVkSW1hZ2Uo
KSA6IG51bGxwdHIpOwogICAgIG1fc3R5bGVJbWFnZS0+YWRkQ2xpZW50KHRoaXMtPnJlbmRlcmVy
KCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDcsNyArMjEw
Nyw3IEBAIHN0YXRpYyBib29sIGNhbkRpcmVjdGx5Q29tcG9zaXRlQmFja2dyb3UKIAogICAgIC8v
IEZJWE1FOiBzdXBwb3J0IGdyYWRpZW50cyB3aXRoIGlzR2VuZXJhdGVkSW1hZ2UuCiAgICAgYXV0
byogc3R5bGVJbWFnZSA9IGZpbGxMYXllci5pbWFnZSgpOwotICAgIGlmICghc3R5bGVJbWFnZS0+
aXNDYWNoZWRJbWFnZSgpKQorICAgIGlmICghc3R5bGVJbWFnZS0+aGFzQ2FjaGVkSW1hZ2UoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byogaW1hZ2UgPSBzdHlsZUltYWdlLT5j
YWNoZWRJbWFnZSgpLT5pbWFnZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1NoYXBlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TaGFwZVZhbHVlLmNwcAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1NoYXBlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3
ICszNSw3IEBAIGJvb2wgU2hhcGVWYWx1ZTo6aXNJbWFnZVZhbGlkKCkgY29uc3QKIHsKICAgICBp
ZiAoIW1faW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9pbWFnZS0+aXND
YWNoZWRJbWFnZSgpKSB7CisgICAgaWYgKG1faW1hZ2UtPmhhc0NhY2hlZEltYWdlKCkpIHsKICAg
ICAgICAgYXV0byogY2FjaGVkSW1hZ2UgPSBtX2ltYWdlLT5jYWNoZWRJbWFnZSgpOwogICAgICAg
ICByZXR1cm4gY2FjaGVkSW1hZ2UgJiYgY2FjaGVkSW1hZ2UtPmhhc0ltYWdlKCk7CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hl
ZEltYWdlLmNwcAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsyNCw2
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgog
Ci0jaW5jbHVkZSAiQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0ltYWdlU2V0
VmFsdWUuaCIKICNpbmNsdWRlICJDU1NJbWFnZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1h
Z2UuaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCkBAIC0zMywxOSArMzEsMTQgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1TdHlsZUNhY2hlZEltYWdlOjpTdHlsZUNhY2hlZEltYWdl
KENTU1ZhbHVlJiBjc3NWYWx1ZSkKK1N0eWxlQ2FjaGVkSW1hZ2U6OlN0eWxlQ2FjaGVkSW1hZ2Uo
Q1NTSW1hZ2VWYWx1ZSYgY3NzVmFsdWUsIGZsb2F0IHNjYWxlRmFjdG9yKQogICAgIDogbV9jc3NW
YWx1ZShjc3NWYWx1ZSkKKyAgICAsIG1fc2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpCiB7Ci0gICAg
QVNTRVJUKGlzPENTU0ltYWdlVmFsdWU+KG1fY3NzVmFsdWUpIHx8IGlzPENTU0ltYWdlU2V0VmFs
dWU+KG1fY3NzVmFsdWUpIHx8IGlzPENTU0N1cnNvckltYWdlVmFsdWU+KG1fY3NzVmFsdWUpKTsK
LQogICAgIG1faXNDYWNoZWRJbWFnZSA9IHRydWU7Ci0KLSAgICAvLyBDU1NJbWFnZVZhbHVlIGRv
ZXNuJ3QgZ2V0IGludmFsaWRhdGVkIHNvIHdlIGNhbiBncmFiIHRoZSBDYWNoZWRJbWFnZSBpbW1l
ZGlhdGVseSBpZiBpdCBleGlzdHMuCi0gICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KG1fY3NzVmFs
dWUpKSB7Ci0gICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPiht
X2Nzc1ZhbHVlLmdldCgpKS5jYWNoZWRJbWFnZSgpOwotICAgICAgICBpZiAobV9jYWNoZWRJbWFn
ZSkKLSAgICAgICAgICAgIG1faXNQZW5kaW5nID0gZmFsc2U7Ci0gICAgfQorICAgIG1fY2FjaGVk
SW1hZ2UgPSBtX2Nzc1ZhbHVlLT5jYWNoZWRJbWFnZSgpOworICAgIGlmIChtX2NhY2hlZEltYWdl
KQorICAgICAgICBtX2lzUGVuZGluZyA9IGZhbHNlOwogfQogCiBTdHlsZUNhY2hlZEltYWdlOjp+
U3R5bGVDYWNoZWRJbWFnZSgpID0gZGVmYXVsdDsKQEAgLTY4LDQxICs2MSwxNCBAQCBib29sIFN0
eWxlQ2FjaGVkSW1hZ2U6Om9wZXJhdG9yPT0oY29uc3QgCiAKIFVSTCBTdHlsZUNhY2hlZEltYWdl
OjppbWFnZVVSTCgpCiB7Ci0gICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KG1fY3NzVmFsdWUpKQot
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZS5nZXQoKSku
dXJsKCk7Ci0KLSAgICBpZiAoaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4obV9jc3NWYWx1ZSkpCi0gICAg
ICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPihtX2Nzc1ZhbHVlLmdldCgpKS5i
ZXN0SW1hZ2VGb3JTY2FsZUZhY3RvclVSTCgpOwotCi0gICAgaWYgKGlzPENTU0N1cnNvckltYWdl
VmFsdWU+KG1fY3NzVmFsdWUuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ3Vy
c29ySW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZS5nZXQoKSkuaW1hZ2VVUkwoKTsKLQotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIG1fY3NzVmFsdWUt
PnVybCgpOwogfQogCiB2b2lkIFN0eWxlQ2FjaGVkSW1hZ2U6OmxvYWQoQ2FjaGVkUmVzb3VyY2VM
b2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKQogewog
ICAgIEFTU0VSVChtX2lzUGVuZGluZyk7CiAgICAgbV9pc1BlbmRpbmcgPSBmYWxzZTsKLQotICAg
IGlmIChpczxDU1NJbWFnZVZhbHVlPihtX2Nzc1ZhbHVlKSkgewotICAgICAgICBhdXRvJiBpbWFn
ZVZhbHVlID0gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZS5nZXQoKSk7Ci0gICAg
ICAgIG1fY2FjaGVkSW1hZ2UgPSBpbWFnZVZhbHVlLmxvYWRJbWFnZShsb2FkZXIsIG9wdGlvbnMp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+
KG1fY3NzVmFsdWUpKSB7Ci0gICAgICAgIGF1dG8mIGltYWdlU2V0VmFsdWUgPSBkb3duY2FzdDxD
U1NJbWFnZVNldFZhbHVlPihtX2Nzc1ZhbHVlLmdldCgpKTsKLSAgICAgICAgc3RkOjp0aWUobV9j
YWNoZWRJbWFnZSwgbV9zY2FsZUZhY3RvcikgPSBpbWFnZVNldFZhbHVlLmxvYWRCZXN0Rml0SW1h
Z2UobG9hZGVyLCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChp
czxDU1NDdXJzb3JJbWFnZVZhbHVlPihtX2Nzc1ZhbHVlLmdldCgpKSkgewotICAgICAgICBhdXRv
JiBjdXJzb3JWYWx1ZSA9IGRvd25jYXN0PENTU0N1cnNvckltYWdlVmFsdWU+KG1fY3NzVmFsdWUu
Z2V0KCkpOwotICAgICAgICBzdGQ6OnRpZShtX2NhY2hlZEltYWdlLCBtX3NjYWxlRmFjdG9yKSA9
IGN1cnNvclZhbHVlLmxvYWRJbWFnZShsb2FkZXIsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIG1fY2FjaGVkSW1hZ2UgPSBtX2Nzc1ZhbHVlLT5sb2FkSW1hZ2UobG9hZGVy
LCBvcHRpb25zKTsKIH0KIAogQ2FjaGVkSW1hZ2UqIFN0eWxlQ2FjaGVkSW1hZ2U6OmNhY2hlZElt
YWdlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNh
Y2hlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlQ2FjaGVkSW1hZ2UuaAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjks
MTMgKzI5LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU1ZhbHVlOworY2xh
c3MgQ1NTSW1hZ2VWYWx1ZTsKIGNsYXNzIENhY2hlZEltYWdlOwogY2xhc3MgRG9jdW1lbnQ7CiAK
IGNsYXNzIFN0eWxlQ2FjaGVkSW1hZ2UgZmluYWwgOiBwdWJsaWMgU3R5bGVJbWFnZSB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTdHlsZUNh
Y2hlZEltYWdlPiBjcmVhdGUoQ1NTVmFsdWUmIGNzc1ZhbHVlKSB7IHJldHVybiBhZG9wdFJlZigq
bmV3IFN0eWxlQ2FjaGVkSW1hZ2UoY3NzVmFsdWUpKTsgfQorICAgIHN0YXRpYyBSZWY8U3R5bGVD
YWNoZWRJbWFnZT4gY3JlYXRlKENTU0ltYWdlVmFsdWUmIGNzc1ZhbHVlLCBmbG9hdCBzY2FsZUZh
Y3RvciA9IDEpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3R5bGVDYWNoZWRJbWFnZShjc3NWYWx1
ZSwgc2NhbGVGYWN0b3IpKTsgfQogICAgIHZpcnR1YWwgflN0eWxlQ2FjaGVkSW1hZ2UoKTsKIAog
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZUltYWdlJiBvdGhlcikgY29uc3QgZmluYWw7
CkBAIC02NCwxMCArNjUsMTAgQEAgcHVibGljOgogICAgIGJvb2wga25vd25Ub0JlT3BhcXVlKGNv
bnN0IFJlbmRlckVsZW1lbnQqKSBjb25zdCBmaW5hbDsKIAogcHJpdmF0ZToKLSAgICBTdHlsZUNh
Y2hlZEltYWdlKENTU1ZhbHVlJik7CisgICAgU3R5bGVDYWNoZWRJbWFnZShDU1NJbWFnZVZhbHVl
JiwgZmxvYXQpOwogICAgIFVSTCBpbWFnZVVSTCgpOwogCi0gICAgUmVmPENTU1ZhbHVlPiBtX2Nz
c1ZhbHVlOworICAgIFJlZjxDU1NJbWFnZVZhbHVlPiBtX2Nzc1ZhbHVlOwogICAgIGJvb2wgbV9p
c1BlbmRpbmcgeyB0cnVlIH07CiAgICAgbXV0YWJsZSBmbG9hdCBtX3NjYWxlRmFjdG9yIHsgMSB9
OwogICAgIG11dGFibGUgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkSW1hZ2U+IG1fY2FjaGVk
SW1hZ2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJ
bWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0
eWxlQ3Vyc29ySW1hZ2UuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9TdHlsZUN1cnNvckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5v
cmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUtMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3R5bGVD
dXJzb3JJbWFnZS5oIgorCisjaW5jbHVkZSAiQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIgorI2luY2x1
ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiUmVu
ZGVyRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU3R5bGVDdXJzb3JJ
bWFnZTo6b3BlcmF0b3I9PShjb25zdCBTdHlsZUltYWdlJiBvdGhlcikgY29uc3QKK3sKKyAgICBp
ZiAoIWlzPFN0eWxlQ3Vyc29ySW1hZ2U+KG90aGVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIGVxdWFscyhkb3duY2FzdDxTdHlsZUN1cnNvckltYWdlPihvdGhlcikpOwor
fQorCitSZWY8Q1NTVmFsdWU+IFN0eWxlQ3Vyc29ySW1hZ2U6OmNzc1ZhbHVlKCkgY29uc3QKK3sg
CisgICAgcmV0dXJuIG1fY3NzVmFsdWUuY29weVJlZigpOyAKK30KKworU3R5bGVDdXJzb3JJbWFn
ZTo6U3R5bGVDdXJzb3JJbWFnZShDU1NDdXJzb3JJbWFnZVZhbHVlJiBjc3NWYWx1ZSkKKyAgICA6
IG1fY3NzVmFsdWUoY3NzVmFsdWUpCit7CisgICAgbV9pc0N1cnNvckltYWdlID0gdHJ1ZTsKK30K
KworU3R5bGVDdXJzb3JJbWFnZTo6flN0eWxlQ3Vyc29ySW1hZ2UoKSA9IGRlZmF1bHQ7CisKK3N0
ZDo6cGFpcjxDU1NWYWx1ZSosIGZsb2F0PiBTdHlsZUN1cnNvckltYWdlOjpzZWxlY3RCZXN0Rml0
SW1hZ2UoRG9jdW1lbnQqIGRvY3VtZW50KSBjb25zdAoreworICAgIHJldHVybiBtX2Nzc1ZhbHVl
LT5zZWxlY3RCZXN0Rml0SW1hZ2UoZG9jdW1lbnQpOworfQorCit2b2lkIFN0eWxlQ3Vyc29ySW1h
Z2U6OnNldENvbnRhaW5lckNvbnRleHRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlciwgY29uc3QgRmxvYXRTaXplJiBjb250YWluZXJTaXplLCBmbG9hdCBjb250YWluZXJa
b29tKQoreworICAgIGlmICghaGFzQ2FjaGVkSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGNhY2hlZEltYWdlKCktPnNldENvbnRhaW5lckNvbnRleHRGb3JDbGllbnQocmVuZGVyZXIsIExh
eW91dFNpemUoY29udGFpbmVyU2l6ZSksIGNvbnRhaW5lclpvb20sIG1fY3NzVmFsdWUtPmltYWdl
VVJMKCkpOworfQorCit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4
ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1cnNv
ckltYWdlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlQ3Vyc29ySW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAg
ICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAg
ICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhh
bmRsZS5oIgorI2luY2x1ZGUgIlN0eWxlTXVsdGlJbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIENTU0N1cnNvckltYWdlVmFsdWU7CitjbGFzcyBDYWNoZWRJbWFnZTsKK2Ns
YXNzIERvY3VtZW50OworCitjbGFzcyBTdHlsZUN1cnNvckltYWdlIGZpbmFsIDogcHVibGljIFN0
eWxlTXVsdGlJbWFnZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxTdHlsZUN1cnNvckltYWdlPiBjcmVhdGUoQ1NTQ3Vyc29ySW1hZ2VWYWx1
ZSYgY3NzVmFsdWUpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3R5bGVDdXJzb3JJbWFnZShjc3NW
YWx1ZSkpOyB9CisgICAgdmlydHVhbCB+U3R5bGVDdXJzb3JJbWFnZSgpOworICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBTdHlsZUltYWdlJiBvdGhlcikgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAg
ICB2b2lkIHNldENvbnRhaW5lckNvbnRleHRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50
JiByZW5kZXJlciwgY29uc3QgRmxvYXRTaXplJiBjb250YWluZXJTaXplLCBmbG9hdCBjb250YWlu
ZXJab29tKSBmaW5hbDsKKyAgICBSZWY8Q1NTVmFsdWU+IGNzc1ZhbHVlKCkgY29uc3QgZmluYWw7
CisgICAgc3RkOjpwYWlyPENTU1ZhbHVlKiwgZmxvYXQ+IHNlbGVjdEJlc3RGaXRJbWFnZShEb2N1
bWVudCopIGNvbnN0IGZpbmFsOworCitwcml2YXRlOgorICAgIFN0eWxlQ3Vyc29ySW1hZ2UoQ1NT
Q3Vyc29ySW1hZ2VWYWx1ZSYpOworICAgIFJlZjxDU1NDdXJzb3JJbWFnZVZhbHVlPiBtX2Nzc1Zh
bHVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX1NUWUxFX0lNQUdFKFN0eWxlQ3Vyc29ySW1hZ2UsIGlzQ3Vyc29ySW1hZ2UpCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJ
bWFnZS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02
NywxOCArNjcsMjggQEAgcHVibGljOgogICAgIHZpcnR1YWwgZmxvYXQgaW1hZ2VTY2FsZUZhY3Rv
cigpIGNvbnN0IHsgcmV0dXJuIDE7IH0KICAgICB2aXJ0dWFsIGJvb2wga25vd25Ub0JlT3BhcXVl
KGNvbnN0IFJlbmRlckVsZW1lbnQqKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBDYWNoZWRJbWFn
ZSogY2FjaGVkSW1hZ2UoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBTdHlsZUlt
YWdlKiBzZWxlY3RlZEltYWdlKCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgY29uc3Qg
U3R5bGVJbWFnZSogc2VsZWN0ZWRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KIAogICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBpc0NhY2hlZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pc0Nh
Y2hlZEltYWdlOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzR2VuZXJhdGVkSW1hZ2UoKSBj
b25zdCB7IHJldHVybiBtX2lzR2VuZXJhdGVkSW1hZ2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgaXNDdXJzb3JJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDdXJzb3JJbWFnZTsgfQorICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBpc0ltYWdlU2V0KCkgY29uc3QgeyByZXR1cm4gbV9pc0ltYWdl
U2V0OyB9CisKKyAgICBib29sIGhhc0NhY2hlZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pc0Nh
Y2hlZEltYWdlIHx8IHNlbGVjdGVkSW1hZ2UoKS0+aXNDYWNoZWRJbWFnZSgpOyB9CiAKIHByb3Rl
Y3RlZDoKICAgICBTdHlsZUltYWdlKCkKICAgICAgICAgOiBtX2lzQ2FjaGVkSW1hZ2UoZmFsc2Up
CiAgICAgICAgICwgbV9pc0dlbmVyYXRlZEltYWdlKGZhbHNlKQorICAgICAgICAsIG1faXNJbWFn
ZVNldChmYWxzZSkKKyAgICAgICAgLCBtX2lzQ3Vyc29ySW1hZ2UoZmFsc2UpCiAgICAgewogICAg
IH0KICAgICBib29sIG1faXNDYWNoZWRJbWFnZSA6IDE7CiAgICAgYm9vbCBtX2lzR2VuZXJhdGVk
SW1hZ2UgOiAxOworICAgIGJvb2wgbV9pc0ltYWdlU2V0IDogMTsKKyAgICBib29sIG1faXNDdXJz
b3JJbWFnZSA6IDE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlU2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgQW50
dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgRGly
ayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUt
MjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTdHlsZUltYWdlU2V0LmgiCisKKyNpbmNsdWRlICJDU1NJbWFn
ZVNldFZhbHVlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworCitTdHlsZUltYWdlU2V0OjpT
dHlsZUltYWdlU2V0KENTU0ltYWdlU2V0VmFsdWUmIGNzc1ZhbHVlKQorICAgIDogbV9jc3NWYWx1
ZShjc3NWYWx1ZSkKK3sKKyAgICBtX2lzSW1hZ2VTZXQgPSB0cnVlOworfQorCitib29sIFN0eWxl
SW1hZ2VTZXQ6Om9wZXJhdG9yPT0oY29uc3QgU3R5bGVJbWFnZSYgb3RoZXIpIGNvbnN0Cit7Cisg
ICAgaWYgKCFpczxTdHlsZUltYWdlU2V0PihvdGhlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiBlcXVhbHMoZG93bmNhc3Q8U3R5bGVJbWFnZVNldD4ob3RoZXIpKTsKK30K
K1N0eWxlSW1hZ2VTZXQ6On5TdHlsZUltYWdlU2V0KCkgPSBkZWZhdWx0OworCitSZWY8Q1NTVmFs
dWU+IFN0eWxlSW1hZ2VTZXQ6OmNzc1ZhbHVlKCkgY29uc3QKK3sgCisgICAgcmV0dXJuIG1fY3Nz
VmFsdWUuY29weVJlZigpOyAKK30KKworc3RkOjpwYWlyPENTU1ZhbHVlKiwgZmxvYXQ+IFN0eWxl
SW1hZ2VTZXQ6OnNlbGVjdEJlc3RGaXRJbWFnZShEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fY3NzVmFsdWUtPnNlbGVjdEJlc3RGaXRJbWFnZShkb2N1bWVudCk7Cit9
CisKK30KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TdHlsZUltYWdlU2V0LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAt
MCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlU2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAwMCBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxs
ZXIgKG11ZWxsZXJAa2RlLm9yZykKKyogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogQ29weXJpZ2h0IChD
KSAyMDIwIE5vYW0gUm9zZW50aGFsIChub2FtQHdlYmtpdC5vcmcpCisqCisqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyoKKyogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKgorKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdHls
ZU11bHRpSW1hZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NWYWx1ZTsK
K2NsYXNzIENTU0ltYWdlU2V0VmFsdWU7CitjbGFzcyBEb2N1bWVudDsKKworY2xhc3MgU3R5bGVJ
bWFnZVNldCBmaW5hbCA6IHB1YmxpYyBTdHlsZU11bHRpSW1hZ2UgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U3R5bGVJbWFnZVNldD4gY3Jl
YXRlKENTU0ltYWdlU2V0VmFsdWUmIGNzc1ZhbHVlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFN0
eWxlSW1hZ2VTZXQoY3NzVmFsdWUpKTsgfQorICAgIHZpcnR1YWwgflN0eWxlSW1hZ2VTZXQoKTsK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVJbWFnZSYgb3RoZXIpIGNvbnN0OworICAg
IFJlZjxDU1NWYWx1ZT4gY3NzVmFsdWUoKSBjb25zdCBmaW5hbDsKKworcHJvdGVjdGVkOgorICAg
IHN0ZDo6cGFpcjxDU1NWYWx1ZSosIGZsb2F0PiBzZWxlY3RCZXN0Rml0SW1hZ2UoRG9jdW1lbnQq
KSBjb25zdCBmaW5hbDsKKyAgICAKK3ByaXZhdGU6CisgICAgU3R5bGVJbWFnZVNldChDU1NJbWFn
ZVNldFZhbHVlJik7CisgICAgUmVmPENTU0ltYWdlU2V0VmFsdWU+IG1fY3NzVmFsdWU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfU1RZTEVf
SU1BR0UoU3R5bGVJbWFnZVNldCwgaXNJbWFnZVNldCkKClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlU2V0LmgKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVN
dWx0aUltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvU3R5bGVNdWx0aUltYWdlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0Br
ZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUu
b3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LTIwMDgsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIE5vYW0gUm9zZW50aGFs
IChub2FtQHdlYmtpdC5vcmcpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3R5
bGVNdWx0aUltYWdlLmgiCisKKyNpbmNsdWRlICJDU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgiCisj
aW5jbHVkZSAiQ1NTSW1hZ2VTZXRWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIK
KyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
KyNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVHZW5lcmF0ZWRJ
bWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N0eWxlTXVsdGlJbWFnZTo6U3R5bGVN
dWx0aUltYWdlKCkKK3sKK30KKworU3R5bGVNdWx0aUltYWdlOjp+U3R5bGVNdWx0aUltYWdlKCkg
PSBkZWZhdWx0OworCitib29sIFN0eWxlTXVsdGlJbWFnZTo6ZXF1YWxzKGNvbnN0IFN0eWxlTXVs
dGlJbWFnZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgYXV0byYgb3RoZXJDYWNoZWQgPSBkb3duY2Fz
dDxTdHlsZU11bHRpSW1hZ2U+KG90aGVyKTsKKyAgICBpZiAoJm90aGVyQ2FjaGVkID09IHRoaXMp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICghbV9pc1BlbmRpbmcgJiYgIW90aGVyQ2Fj
aGVkLm1faXNQZW5kaW5nICYmIG1fc2VsZWN0ZWRJbWFnZS5nZXQoKSA9PSBvdGhlckNhY2hlZC5t
X3NlbGVjdGVkSW1hZ2UuZ2V0KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBTdHlsZU11bHRpSW1hZ2U6OmxvYWQoQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKQoreworICAg
IEFTU0VSVChtX2lzUGVuZGluZyk7CisgICAgbV9pc1BlbmRpbmcgPSBmYWxzZTsKKyAgICBDU1NW
YWx1ZSogdmFsdWUgPSBudWxscHRyOworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMTsKKyAgICBz
dGQ6OnRpZSh2YWx1ZSwgc2NhbGVGYWN0b3IpID0gc2VsZWN0QmVzdEZpdEltYWdlKGxvYWRlci5k
b2N1bWVudCgpKTsKKyAgICBBU1NFUlQoaXM8Q1NTSW1hZ2VWYWx1ZT4odmFsdWUpIHx8IGlzPENT
U0ltYWdlR2VuZXJhdG9yVmFsdWU+KHZhbHVlKSk7CisKKyAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZT4odmFsdWUpKSB7CisgICAgICAgIG1fc2VsZWN0ZWRJbWFnZSA9IFN0eWxlR2Vu
ZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPigqdmFs
dWUpKTsKKyAgICAgICAgbV9zZWxlY3RlZEltYWdlLT5sb2FkKGxvYWRlciwgb3B0aW9ucyk7Cisg
ICAgfQorICAgIAorICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPih2YWx1ZSkpIHsKKyAgICAgICAg
bV9zZWxlY3RlZEltYWdlID0gU3R5bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0PENTU0lt
YWdlVmFsdWU+KCp2YWx1ZSksIHNjYWxlRmFjdG9yKTsKKyAgICAgICAgaWYgKG1fc2VsZWN0ZWRJ
bWFnZS0+aXNQZW5kaW5nKCkpCisgICAgICAgICAgICBtX3NlbGVjdGVkSW1hZ2UtPmxvYWQobG9h
ZGVyLCBvcHRpb25zKTsKKyAgICB9Cit9CisKK0NhY2hlZEltYWdlKiBTdHlsZU11bHRpSW1hZ2U6
OmNhY2hlZEltYWdlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fc2VsZWN0ZWRJbWFnZS0+Y2FjaGVkSW1h
Z2UoKTsKK30KKworV3JhcHBlZEltYWdlUHRyIFN0eWxlTXVsdGlJbWFnZTo6ZGF0YSgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX3NlbGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UtPmRhdGEoKTsKK30KKworYm9vbCBTdHlsZU11bHRp
SW1hZ2U6OmNhblJlbmRlcihjb25zdCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgZmxvYXQgbXVs
dGlwbGllcikgY29uc3QKK3sKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UtPmNhblJlbmRlcihyZW5kZXJl
ciwgbXVsdGlwbGllcik7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjppc1BlbmRpbmcoKSBj
b25zdAoreworICAgIHJldHVybiBtX2lzUGVuZGluZzsKK30KKworYm9vbCBTdHlsZU11bHRpSW1h
Z2U6OmlzTG9hZGVkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UtPmlzTG9hZGVkKCk7
Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjplcnJvck9jY3VycmVkKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBtX3NlbGVjdGVkSW1hZ2UtPmVycm9yT2NjdXJyZWQoKTsKK30KKworRmxvYXRTaXplIFN0eWxl
TXVsdGlJbWFnZTo6aW1hZ2VTaXplKGNvbnN0IFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBmbG9h
dCBtdWx0aXBsaWVyKSBjb25zdAoreworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQorICAgICAg
ICByZXR1cm4geyB9OworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UtPmltYWdlU2l6ZShyZW5k
ZXJlciwgbXVsdGlwbGllcik7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjppbWFnZUhhc1Jl
bGF0aXZlV2lkdGgoKSBjb25zdAoreworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fc2VsZWN0ZWRJbWFnZS0+aW1hZ2VIYXNSZWxh
dGl2ZVdpZHRoKCk7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjppbWFnZUhhc1JlbGF0aXZl
SGVpZ2h0KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UtPmltYWdlSGFzUmVsYXRpdmVI
ZWlnaHQoKTsKK30KKwordm9pZCBTdHlsZU11bHRpSW1hZ2U6OmNvbXB1dGVJbnRyaW5zaWNEaW1l
bnNpb25zKGNvbnN0IFJlbmRlckVsZW1lbnQqIGVsZW1lbnQsIExlbmd0aCYgaW50cmluc2ljV2lk
dGgsIExlbmd0aCYgaW50cmluc2ljSGVpZ2h0LCBGbG9hdFNpemUmIGludHJpbnNpY1JhdGlvKQor
eworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQorICAgICAgICByZXR1cm47CisgICAgbV9zZWxl
Y3RlZEltYWdlLT5jb21wdXRlSW50cmluc2ljRGltZW5zaW9ucyhlbGVtZW50LCBpbnRyaW5zaWNX
aWR0aCwgaW50cmluc2ljSGVpZ2h0LCBpbnRyaW5zaWNSYXRpbyk7Cit9CisKK2Jvb2wgU3R5bGVN
dWx0aUltYWdlOjp1c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
c2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3NlbGVj
dGVkSW1hZ2UtPnVzZXNJbWFnZUNvbnRhaW5lclNpemUoKTsKK30KKwordm9pZCBTdHlsZU11bHRp
SW1hZ2U6OnNldENvbnRhaW5lckNvbnRleHRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50
JiByZW5kZXJlciwgY29uc3QgRmxvYXRTaXplJiBjb250YWluZXJTaXplLCBmbG9hdCBjb250YWlu
ZXJab29tKQoreworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9zZWxlY3RlZEltYWdlLT5zZXRDb250YWluZXJDb250ZXh0Rm9yUmVuZGVyZXIocmVuZGVy
ZXIsIGNvbnRhaW5lclNpemUsIGNvbnRhaW5lclpvb20pOworfQorCit2b2lkIFN0eWxlTXVsdGlJ
bWFnZTo6YWRkQ2xpZW50KFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyKQoreworICAgIGlmICghbV9z
ZWxlY3RlZEltYWdlKQorICAgICAgICByZXR1cm47CisgICAgbV9zZWxlY3RlZEltYWdlLT5hZGRD
bGllbnQocmVuZGVyZXIpOworfQorCit2b2lkIFN0eWxlTXVsdGlJbWFnZTo6cmVtb3ZlQ2xpZW50
KFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyKQoreworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQor
ICAgICAgICByZXR1cm47CisgICAgbV9zZWxlY3RlZEltYWdlLT5yZW1vdmVDbGllbnQocmVuZGVy
ZXIpOworfQorCitSZWZQdHI8SW1hZ2U+IFN0eWxlTXVsdGlJbWFnZTo6aW1hZ2UoUmVuZGVyRWxl
bWVudCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBpZiAo
IW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1f
c2VsZWN0ZWRJbWFnZS0+aW1hZ2UocmVuZGVyZXIsIHNpemUpOworfQorCitmbG9hdCBTdHlsZU11
bHRpSW1hZ2U6OmltYWdlU2NhbGVGYWN0b3IoKSBjb25zdAoreworICAgIGlmICghbV9zZWxlY3Rl
ZEltYWdlKQorICAgICAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlLT5p
bWFnZVNjYWxlRmFjdG9yKCk7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjprbm93blRvQmVP
cGFxdWUoY29uc3QgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIpIGNvbnN0Cit7CisgICAgaWYgKCFt
X3NlbGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9zZWxl
Y3RlZEltYWdlLT5rbm93blRvQmVPcGFxdWUocmVuZGVyZXIpOworfQorCit9CgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUltYWdl
LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9TdHlsZU11bHRpSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUltYWdlLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQorKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlzdG8gKGtv
aXZpc3RvQGtkZS5vcmcpCisqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxs
ZXJAa2RlLm9yZykKKyogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogQ29weXJpZ2h0IChDKSAyMDIwIE5v
YW0gUm9zZW50aGFsIChub2FtQHdlYmtpdC5vcmcpCisqCisqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyoKKyogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKgorKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUhhbmRsZS5oIgorI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDU1NWYWx1ZTsKK2NsYXNzIENTU0ltYWdlU2V0VmFsdWU7CitjbGFzcyBDYWNo
ZWRJbWFnZTsKK2NsYXNzIERvY3VtZW50OworCitjbGFzcyBTdHlsZU11bHRpSW1hZ2UgOiBwdWJs
aWMgU3R5bGVJbWFnZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+U3R5bGVNdWx0aUltYWdlKCk7CisKKyAgICBDYWNoZWRJbWFnZSogY2FjaGVk
SW1hZ2UoKSBjb25zdCBmaW5hbDsKKworICAgIFdyYXBwZWRJbWFnZVB0ciBkYXRhKCkgY29uc3Qg
ZmluYWw7CisKKyAgICBib29sIGNhblJlbmRlcihjb25zdCBSZW5kZXJFbGVtZW50KiwgZmxvYXQg
bXVsdGlwbGllcikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1BlbmRpbmcoKSBjb25zdCBmaW5h
bDsKKyAgICB2b2lkIGxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJjZUxv
YWRlck9wdGlvbnMmKSBmaW5hbDsKKyAgICBib29sIGlzTG9hZGVkKCkgY29uc3QgZmluYWw7Cisg
ICAgYm9vbCBlcnJvck9jY3VycmVkKCkgY29uc3QgZmluYWw7CisgICAgRmxvYXRTaXplIGltYWdl
U2l6ZShjb25zdCBSZW5kZXJFbGVtZW50KiwgZmxvYXQgbXVsdGlwbGllcikgY29uc3QgZmluYWw7
CisgICAgYm9vbCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdCBmaW5hbDsKKyAgICBib29s
IGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGNvbXB1dGVJ
bnRyaW5zaWNEaW1lbnNpb25zKGNvbnN0IFJlbmRlckVsZW1lbnQqLCBMZW5ndGgmIGludHJpbnNp
Y1dpZHRoLCBMZW5ndGgmIGludHJpbnNpY0hlaWdodCwgRmxvYXRTaXplJiBpbnRyaW5zaWNSYXRp
bykgZmluYWw7CisgICAgYm9vbCB1c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29uc3QgZmluYWw7
CisgICAgdm9pZCBzZXRDb250YWluZXJDb250ZXh0Rm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyRWxl
bWVudCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0KTsKKyAgICB2b2lkIGFkZENsaWVudChSZW5k
ZXJFbGVtZW50KikgZmluYWw7CisgICAgdm9pZCByZW1vdmVDbGllbnQoUmVuZGVyRWxlbWVudCop
IGZpbmFsOworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UoUmVuZGVyRWxlbWVudCosIGNvbnN0IEZs
b2F0U2l6ZSYpIGNvbnN0IGZpbmFsOworICAgIGZsb2F0IGltYWdlU2NhbGVGYWN0b3IoKSBjb25z
dCBmaW5hbDsKKyAgICBib29sIGtub3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJFbGVtZW50Kikg
Y29uc3QgZmluYWw7CisgICAgY29uc3QgU3R5bGVJbWFnZSogc2VsZWN0ZWRJbWFnZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fc2VsZWN0ZWRJbWFnZS5nZXQoKTsgfQorICAgIFN0eWxlSW1hZ2Uq
IHNlbGVjdGVkSW1hZ2UoKSBmaW5hbCB7IHJldHVybiBtX3NlbGVjdGVkSW1hZ2UuZ2V0KCk7IH0K
KworcHJvdGVjdGVkOgorICAgIFN0eWxlTXVsdGlJbWFnZSgpOworICAgIGJvb2wgZXF1YWxzKGNv
bnN0IFN0eWxlTXVsdGlJbWFnZSYgb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgc3RkOjpwYWly
PENTU1ZhbHVlKiwgZmxvYXQ+IHNlbGVjdEJlc3RGaXRJbWFnZShEb2N1bWVudCopIGNvbnN0ID0g
MDsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbV9zZWxlY3RlZEltYWdlOwor
ICAgIGJvb2wgbV9pc1BlbmRpbmcgeyB0cnVlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
U3R5bGVNdWx0aUltYWdlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAs
MCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAkocmV2aXNpb24gMjU0ODA4KQorKysg
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDggKzQ2LDEwIEBACiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRl
ICJTdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCIKICNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgi
CisjaW5jbHVkZSAiU3R5bGVDdXJzb3JJbWFnZS5oIgogI2luY2x1ZGUgIlN0eWxlRm9udFNpemVG
dW5jdGlvbnMuaCIKICNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCisjaW5jbHVkZSAi
U3R5bGVJbWFnZVNldC5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJX
aWxsQ2hhbmdlRGF0YS5oIgogCkBAIC0xMzI0LDEzICsxMzI2LDE1IEBAIGlubGluZSB2b2lkIEJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb24KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6
OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihpdGVtLmdldCgpKSksIGRp
ZFNldCk7CiAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGlz
PENTU0ltYWdlU2V0VmFsdWU+KGl0ZW0pKSB7Ci0gICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5
bGUoKS5zZXRDb250ZW50KFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShpdGVtKSwgZGlkU2V0KTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KGl0
ZW0pKSB7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxl
SW1hZ2VTZXQ6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPihpdGVtLmdldCgpKS5p
bWFnZVNldFdpdGhTdHlsZXNSZXNvbHZlZChidWlsZGVyU3RhdGUpKSwgZGlkU2V0KTsKICAgICAg
ICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaXM8Q1NTSW1h
Z2VWYWx1ZT4oaXRlbSkpIHsKLSAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENv
bnRlbnQoU3R5bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKGl0ZW0pLCBkaWRTZXQpOworICAgICAgICAg
ICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChTdHlsZUNhY2hlZEltYWdlOjpjcmVh
dGUoZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oaXRlbS5nZXQoKSkpLCBkaWRTZXQpOwogICAgICAg
ICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwCShyZXZpc2lv
biAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDEwIEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
ICNpbmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgi
CisjaW5jbHVkZSAiU3R5bGVDdXJzb3JJbWFnZS5oIgogI2luY2x1ZGUgIlN0eWxlRm9udFNpemVG
dW5jdGlvbnMuaCIKICNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCisjaW5jbHVkZSAi
U3R5bGVJbWFnZVNldC5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybUZ1bmN0aW9ucy5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC03OSwyMSArODEsMzMgQEAgYm9vbCBCdWlsZGVyU3RhdGU6OnVz
ZVNWR1pvb21SdWxlc0ZvckxlbgogICAgIHJldHVybiBpczxTVkdFbGVtZW50PihlbGVtZW50KCkp
ICYmICEoaXM8U1ZHU1ZHRWxlbWVudD4oKmVsZW1lbnQoKSkgJiYgZWxlbWVudCgpLT5wYXJlbnRO
b2RlKCkpOwogfQogCitSZWY8Q1NTVmFsdWU+IEJ1aWxkZXJTdGF0ZTo6cmVzb2x2ZUltYWdlU3R5
bGVzKENTU1ZhbHVlJiB2YWx1ZSkKK3sKKyAgICBpZiAoaXM8Q1NTR3JhZGllbnRWYWx1ZT4odmFs
dWUpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1ZT4odmFsdWUpLmdy
YWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKCp0aGlzKTsKKworICAgIGlmIChpczxDU1NGaWx0ZXJJ
bWFnZVZhbHVlPih2YWx1ZSkpCisgICAgICAgIGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+
KHZhbHVlKS5jcmVhdGVGaWx0ZXJPcGVyYXRpb25zKCp0aGlzKTsKKworICAgIGlmIChpczxDU1NJ
bWFnZVNldFZhbHVlPih2YWx1ZSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVNl
dFZhbHVlPih2YWx1ZSkuaW1hZ2VTZXRXaXRoU3R5bGVzUmVzb2x2ZWQoKnRoaXMpOworCisgICAg
cmV0dXJuIG1ha2VSZWYodmFsdWUpOworfQorCiBSZWZQdHI8U3R5bGVJbWFnZT4gQnVpbGRlclN0
YXRlOjpjcmVhdGVTdHlsZUltYWdlKENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAoaXM8Q1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKSB7Ci0gICAgICAgIGlmIChpczxDU1NHcmFkaWVu
dFZhbHVlPih2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6
Y3JlYXRlKGRvd25jYXN0PENTU0dyYWRpZW50VmFsdWU+KHZhbHVlKS5ncmFkaWVudFdpdGhTdHls
ZXNSZXNvbHZlZCgqdGhpcykpOwotCi0gICAgICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVl
Pih2YWx1ZSkpIHsKLSAgICAgICAgICAgIC8vIEZpbHRlckltYWdlIG5lZWRzIHRvIGNhbGN1bGF0
ZSBGaWx0ZXJPcGVyYXRpb25zLgotICAgICAgICAgICAgZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VW
YWx1ZT4odmFsdWUpLmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoKnRoaXMpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKTsKLSAgICB9CisgICAgaWYgKGlzPENTU0ltYWdlVmFs
dWU+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShkb3du
Y2FzdDxDU1NJbWFnZVZhbHVlPih2YWx1ZSkpOworCisgICAgaWYgKGlzPENTU0N1cnNvckltYWdl
VmFsdWU+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFN0eWxlQ3Vyc29ySW1hZ2U6OmNyZWF0ZShk
b3duY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlPih2YWx1ZSkpOwogCi0gICAgaWYgKGlzPENTU0lt
YWdlVmFsdWU+KHZhbHVlKSB8fCBpczxDU1NJbWFnZVNldFZhbHVlPih2YWx1ZSkgfHwgaXM8Q1NT
Q3Vyc29ySW1hZ2VWYWx1ZT4odmFsdWUpKQotICAgICAgICByZXR1cm4gU3R5bGVDYWNoZWRJbWFn
ZTo6Y3JlYXRlKHZhbHVlKTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFs
dWUpKQorICAgICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0
PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHJlc29sdmVJbWFnZVN0eWxlcyh2YWx1ZSkuZ2V0KCkp
KTsKKyAgICAKKyAgICBpZiAoaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4odmFsdWUpKQorICAgICAgICBy
ZXR1cm4gU3R5bGVJbWFnZVNldDo6Y3JlYXRlKGRvd25jYXN0PENTU0ltYWdlU2V0VmFsdWU+KHJl
c29sdmVJbWFnZVN0eWxlcyh2YWx1ZSkuZ2V0KCkpKTsKIAogICAgIHJldHVybiBudWxscHRyOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oCShyZXZpc2lv
biAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw3IEBAIHB1YmxpYzoKICAgICBib29sIHVzZVNWR1pv
b21SdWxlc0Zvckxlbmd0aCgpIGNvbnN0OwogICAgIFNjb3BlT3JkaW5hbCBzdHlsZVNjb3BlT3Jk
aW5hbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVTY29wZU9yZGluYWw7IH0KIAorICAgIFJlZjxD
U1NWYWx1ZT4gcmVzb2x2ZUltYWdlU3R5bGVzKENTU1ZhbHVlJik7CiAgICAgUmVmUHRyPFN0eWxl
SW1hZ2U+IGNyZWF0ZVN0eWxlSW1hZ2UoQ1NTVmFsdWUmKTsKICAgICBib29sIGNyZWF0ZUZpbHRl
ck9wZXJhdGlvbnMoY29uc3QgQ1NTVmFsdWUmLCBGaWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRp
b25zKTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjU0ODA4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMjAtMDEtMTkgIE5vYW0gUm9z
ZW50aGFsICA8bm9hbUB3ZWJraXQub3JnPgorCisgICAgICAgIC13ZWJraXQtaW1hZ2Utc2V0IHNo
b3VsZCBzdXBwb3J0IGFsbCB0aGUgaW1hZ2UgZnVuY3Rpb25zIFdlYktpdCBzdXBwb3J0cywgbm90
IGp1c3QgdXJsKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTgxOTQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBmYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFz
dC9jc3MvY3Vyc29yLXBhcnNpbmcuaHRtbDoKKyAgICAgICAgICAgICAgICBBZGRlZCBwYXJzaW5n
IHRlc3QgdG8gZW5zdXJlIGFycm93IGltYWdlLXNldHMgZGlzYWJsZSBnZW5lcmF0ZWQgaW1hZ2Vz
CisKKyAgICAgICAgKiBmYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1nZW5lcmF0ZWQtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1nZW5l
cmF0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmct
aW52YWxpZC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNp
bmctaW52YWxpZC5odG1sOgorICAgICAgICAgICAgICAgIEFkZGVkIHBhcnNpbmcgdGVzdHMgZm9y
IG5ldyBnZW5lcmF0ZWQtaW5zaWRlLWltYWdlLXNldCB1c2UgY2FzZXMKKyAgICAgICAgICAgICAg
ICBUZXN0IHRoYXQgaW1hZ2Utc2V0IGluc2lkZSBpbWFnZS1zZXQgaXMgbm90IHN1cHBvcnRlZAor
CisgICAgICAgICogZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS1leHBlY3RlZC5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1mYWRlLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LWV4cGVjdGVk
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LW11
bHRpLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc2V0
LWdyYWRpZW50LW11bHRpLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Ut
c2V0LWdyYWRpZW50LXNpbmdsZS1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1zaW5nbGUuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQuaHRtbDogQWRkZWQuCisgICAgICAgICAgICAg
ICAgQWRkZWQgcmVmLXRlc3RzIGZvciBzZXZlcmFsIGdlbmVyYXRlZC1pbnNpZGUtaW1hZ2Utc2V0
IHVzZS1jYXNlcworCiAyMDIwLTAxLTE5ICBDYXRoaWUgQ2hlbiAgPGNhdGhpZWNoZW5AaWdhbGlh
LmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3Igc2Nyb2xsIGJlaGF2aW9yIHJlbGllcyBv
biBTY3JvbGxBbmltYXRpb24gb2YgdGhlIFdlYiBwcm9jZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2Nzcy9jdXJzb3ItcGFyc2luZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9jc3MvY3Vyc29yLXBhcnNpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNTQ4
MDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDEwIEBAIFBBU1Mgcm91bmR0cmlwQ3NzUnVsZSgi
Y3Vyc29yOiB1cmwoZmlsZToKIFBBU1Mgcm91bmR0cmlwQ3NzUnVsZSgiY3Vyc29yOiB1cmwoZmls
ZTovLy9mb28ucG5nKSAxMiAzIDU7IikuY3NzVGV4dCBpcyAiIgogUEFTUyByb3VuZHRyaXBDc3NS
dWxlKCJjdXJzb3I6IHVybChmaWxlOi8vL2Zvby5wbmcpIHggeTsiKS5jc3NUZXh0IGlzICIiCiBQ
QVNTIHJvdW5kdHJpcENzc1J1bGUoImN1cnNvcjogdXJsKGZpbGU6Ly8vZm9vLnBuZykgYXV0bzsi
KS5jc3NUZXh0IGlzICIiCisKK1Rlc3QgYSBidW5jaCBvZiBjdXJzb3IgcnVsZXMgd2l0aCBnZW5l
cmF0ZWQgaW1hZ2VzLgorUEFTUyByb3VuZHRyaXBDc3NSdWxlKCJjdXJzb3I6IGxpbmVhci1ncmFk
aWVudChyZWQsIHdoaXRlKSAtMSAtMSwgcG9pbnRlcjsiKS5jc3NUZXh0IGlzICIiCitQQVNTIHJv
dW5kdHJpcENzc1J1bGUoImN1cnNvcjogaW1hZ2Utc2V0KGxpbmVhci1ncmFkaWVudChyZWQsIHdo
aXRlKSAxeCkgLTEgLTEsIHBvaW50ZXI7IikuY3NzVGV4dCBpcyAiIgogUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2Nzcy9jdXJzb3ItcGFyc2luZy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
Y3NzL2N1cnNvci1wYXJzaW5nLmh0bWwJKHJldmlzaW9uIDI1NDgwOCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvY3NzL2N1cnNvci1wYXJzaW5nLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsx
MDUsMTEgQEAgdGVzdEludmFsaWRDdXJzb3JSdWxlKCd1cmwoZmlsZTovLy9mb28ucAogdGVzdElu
dmFsaWRDdXJzb3JSdWxlKCd1cmwoZmlsZTovLy9mb28ucG5nKSB4IHknKTsKIHRlc3RJbnZhbGlk
Q3Vyc29yUnVsZSgndXJsKGZpbGU6Ly8vZm9vLnBuZykgYXV0bycpOwogCitkZWJ1ZygnJyk7Citk
ZWJ1ZygnVGVzdCBhIGJ1bmNoIG9mIGN1cnNvciBydWxlcyB3aXRoIGdlbmVyYXRlZCBpbWFnZXMu
Jyk7Cit0ZXN0SW52YWxpZEN1cnNvclJ1bGUoJ2xpbmVhci1ncmFkaWVudChyZWQsIHdoaXRlKSAt
MSAtMSwgcG9pbnRlcicpOwordGVzdEludmFsaWRDdXJzb3JSdWxlKCdpbWFnZS1zZXQobGluZWFy
LWdyYWRpZW50KHJlZCwgd2hpdGUpIDF4KSAtMSAtMSwgcG9pbnRlcicpOworCiBzdWNjZXNzZnVs
bHlQYXJzZWQgPSB0cnVlOwogPC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9p
bWFnZS1zZXQtcGFyc2luZy1nZW5lcmF0ZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWdlbmVyYXRlZC1leHBlY3RlZC50
eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNp
bmctZ2VuZXJhdGVkLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBA
CitUZXN0IHRoZSBwYXJzaW5nIG9mIHRoZSBpbWFnZS1zZXQgZnVuY3Rpb24uCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCisKK1NpbmdsZSB2YWx1ZSBmb3IgYmFja2dyb3VuZC1pbWFn
ZSB3aXRoIGdyYWRpZW50IDogbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMXgKK1BBU1Mg
anNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlKSBpcyAnQ1NTVmFsdWVMaXN0JworUEFTUyBqc1dy
YXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuX19wcm90b19fKSBpcyAnQ1NTVmFsdWVMaXN0UHJvdG90
eXBlJworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuY29uc3RydWN0b3IpIGlzICdG
dW5jdGlvbicKK1BBU1MgaW1hZ2VTZXRSdWxlLmxlbmd0aCBpcyAyCitQQVNTIHN1YlJ1bGUuY3Nz
VGV4dCBpcyAnbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSknCitQQVNTIHN1YlJ1bGUuY3Nz
VGV4dCBpcyAnMScKKworU2luZ2xlIHZhbHVlIGZvciBjb250ZW50IHdpdGggZ3JhZGllbnQgOiBs
aW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAxeAorUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFn
ZVNldFJ1bGUpIGlzICdDU1NWYWx1ZUxpc3QnCitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0
UnVsZS5fX3Byb3RvX18pIGlzICdDU1NWYWx1ZUxpc3RQcm90b3R5cGUnCitQQVNTIGpzV3JhcHBl
ckNsYXNzKGltYWdlU2V0UnVsZS5jb25zdHJ1Y3RvcikgaXMgJ0Z1bmN0aW9uJworUEFTUyBpbWFn
ZVNldFJ1bGUubGVuZ3RoIGlzIDIKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICdsaW5lYXItZ3Jh
ZGllbnQoZ3JlZW4sIHdoaXRlKScKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICcxJworCitTaW5n
bGUgdmFsdWUgZm9yIGJhY2tncm91bmQtaW1hZ2Ugd2l0aCBncmFkaWVudHMgOiBsaW5lYXItZ3Jh
ZGllbnQoZ3JlZW4sIHdoaXRlKSAxeCwgcmFkaWFsLWdyYWRpZW50KGJsdWUsIHdoaXRlKSAyeAor
UEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUpIGlzICdDU1NWYWx1ZUxpc3QnCitQQVNT
IGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5fX3Byb3RvX18pIGlzICdDU1NWYWx1ZUxpc3RQ
cm90b3R5cGUnCitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5jb25zdHJ1Y3Rvcikg
aXMgJ0Z1bmN0aW9uJworUEFTUyBpbWFnZVNldFJ1bGUubGVuZ3RoIGlzIDQKK1BBU1Mgc3ViUnVs
ZS5jc3NUZXh0IGlzICdsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKScKK1BBU1Mgc3ViUnVs
ZS5jc3NUZXh0IGlzICcxJworUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJ3JhZGlhbC1ncmFkaWVu
dChibHVlLCB3aGl0ZSknCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMicKKworQ29tYmluZWQg
Z3JhZGllbnQgYW5kIFVSTCA6IHVybCgnI2EnKSAxeCwgbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3
aGl0ZSkgMngKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlKSBpcyAnQ1NTVmFsdWVM
aXN0JworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuX19wcm90b19fKSBpcyAnQ1NT
VmFsdWVMaXN0UHJvdG90eXBlJworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuY29u
c3RydWN0b3IpIGlzICdGdW5jdGlvbicKK1BBU1MgaW1hZ2VTZXRSdWxlLmxlbmd0aCBpcyA0CitQ
QVNTIHN1YlJ1bGUgaXMgJ2EnCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMScKK1BBU1Mgc3Vi
UnVsZS5jc3NUZXh0IGlzICdsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKScKK1BBU1Mgc3Vi
UnVsZS5jc3NUZXh0IGlzICcyJworCitDb21iaW5lZCBncmFkaWVudCBhbmQgVVJMIGluIGNvbnRl
bnQgOiB1cmwoJyNhJykgMXgsIGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIDJ4CitQQVNT
IGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZSkgaXMgJ0NTU1ZhbHVlTGlzdCcKK1BBU1MganNX
cmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLl9fcHJvdG9fXykgaXMgJ0NTU1ZhbHVlTGlzdFByb3Rv
dHlwZScKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLmNvbnN0cnVjdG9yKSBpcyAn
RnVuY3Rpb24nCitQQVNTIGltYWdlU2V0UnVsZS5sZW5ndGggaXMgNAorUEFTUyBzdWJSdWxlIGlz
ICdhJworUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJzEnCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBp
cyAnbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSknCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBp
cyAnMicKKworQ29tYmluZWQgZ3JhZGllbnQgYW5kIGNyb3NzLWZhZGUgOiAtd2Via2l0LWNyb3Nz
LWZhZGUodXJsKCcjYScpLCB1cmwoJyNiJyksIDcwJSkgMXgsIGxpbmVhci1ncmFkaWVudChncmVl
biwgd2hpdGUpIDJ4CitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZSkgaXMgJ0NTU1Zh
bHVlTGlzdCcKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLl9fcHJvdG9fXykgaXMg
J0NTU1ZhbHVlTGlzdFByb3RvdHlwZScKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxl
LmNvbnN0cnVjdG9yKSBpcyAnRnVuY3Rpb24nCitQQVNTIGltYWdlU2V0UnVsZS5sZW5ndGggaXMg
NAorUEFTUyBzdWJSdWxlIGlzICdhJworUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJzEnCitQQVNT
IHN1YlJ1bGUuY3NzVGV4dCBpcyAnbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSknCitQQVNT
IHN1YlJ1bGUuY3NzVGV4dCBpcyAnMicKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0
L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1nZW5lcmF0ZWQtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNp
bmctZ2VuZXJhdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1h
Z2Utc2V0LXBhcnNpbmctZ2VuZXJhdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctZ2VuZXJhdGVkLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMDcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFRE
IEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2Ny
aXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlw
dGlvbigiVGVzdCB0aGUgcGFyc2luZyBvZiB0aGUgaW1hZ2Utc2V0IGZ1bmN0aW9uLiIpOworCitm
dW5jdGlvbiBqc1dyYXBwZXJDbGFzcyhub2RlKQoreworICAgIGlmICghbm9kZSkKKyAgICAgICAg
cmV0dXJuICJbbnVsbF0iOworICAgIHZhciBzdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3Ry
aW5nLmFwcGx5KG5vZGUpOworICAgIHJldHVybiBzdHJpbmcuc3Vic3RyKDgsIHN0cmluZy5sZW5n
dGggLSA5KTsKK30KKworZnVuY3Rpb24gc2hvdWxkQmVUeXBlKGV4cHJlc3Npb24sIGNsYXNzTmFt
ZSwgcHJvdG90eXBlTmFtZSwgY29uc3RydWN0b3JOYW1lKQoreworICAgIGlmICghcHJvdG90eXBl
TmFtZSkKKyAgICAgICAgcHJvdG90eXBlTmFtZSA9IGNsYXNzTmFtZSArICJQcm90b3R5cGUiOwor
ICAgIGlmICghY29uc3RydWN0b3JOYW1lKQorICAgICAgICBjb25zdHJ1Y3Rvck5hbWUgPSBjbGFz
c05hbWUgKyAiQ29uc3RydWN0b3IiOworICAgIHNob3VsZEJlKCJqc1dyYXBwZXJDbGFzcygiICsg
ZXhwcmVzc2lvbiArICIpIiwgIiciICsgY2xhc3NOYW1lICsgIiciKTsKKyAgICBzaG91bGRCZSgi
anNXcmFwcGVyQ2xhc3MoIiArIGV4cHJlc3Npb24gKyAiLl9fcHJvdG9fXykiLCAiJyIgKyBwcm90
b3R5cGVOYW1lICsgIiciKTsKKyAgICBzaG91bGRCZSgianNXcmFwcGVyQ2xhc3MoIiArIGV4cHJl
c3Npb24gKyAiLmNvbnN0cnVjdG9yKSIsICInRnVuY3Rpb24nIik7Cit9CisKKy8vIFRoZXNlIGhh
dmUgdG8gYmUgZ2xvYmFsIGZvciB0aGUgdGVzdCBoZWxwZXJzIHRvIHNlZSB0aGVtLgordmFyIGlt
YWdlU2V0UnVsZSwgc3ViUnVsZTsKKworZnVuY3Rpb24gdGVzdEltYWdlU2V0UnVsZShkZXNjcmlw
dGlvbiwgcHJvcGVydHksIHJ1bGUsIGV4cGVjdGVkTGVuZ3RoLCBleHBlY3RlZFRleHRzKQorewor
ICAgIGRlYnVnKCIiKTsKKyAgICBkZWJ1ZyhkZXNjcmlwdGlvbiArICIgOiAiICsgcnVsZSk7CisK
KyAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgZGl2LnNl
dEF0dHJpYnV0ZSgic3R5bGUiLCBwcm9wZXJ0eSArICI6IGltYWdlLXNldCgiICsgcnVsZSArICIp
Iik7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpOworCisgICAgaW1hZ2VTZXRS
dWxlID0gZGl2LnN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHkpOworICAgIHNob3Vs
ZEJlVHlwZSgiaW1hZ2VTZXRSdWxlIiwgIkNTU1ZhbHVlTGlzdCIpOworCisgICAgaWYgKGltYWdl
U2V0UnVsZSkgeworICAgICAgICBpZiAoanNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlWzBdKSA9
PSAiQ1NTVmFsdWVMaXN0IikgeworICAgICAgICAgICAgLy8gVGhlIGNvbnRlbnQgcHJvcGVydHkg
cmV0dXJucyBhIENTU1ZhbHVlTGlzdCBhbnl3YXksIHNvIHRvIGdldCB0byB0aGUgCisgICAgICAg
ICAgICAvLyBpbWFnZVNldCBDU1MgdmFsdWUgbGlzdCwgd2UgaGF2ZSB0byBsb29rIGF0IHRoZSBm
aXJzdCBlbnRyeSBpbiB0aGUgCisgICAgICAgICAgICAvLyBjb250ZW50IHZhbHVlIGxpc3QuCisg
ICAgICAgICAgICBpbWFnZVNldFJ1bGUgPSBpbWFnZVNldFJ1bGVbMF07CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBzaG91bGRCZSgiaW1hZ2VTZXRSdWxlLmxlbmd0aCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gZXhwZWN0ZWRMZW5ndGg7IH0pOworCisgICAgaWYgKGltYWdlU2V0UnVsZSkgeworICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkTGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgIHN0cmluZyA9IGltYWdlU2V0UnVsZVtpXTsKKyAgICAgICAgICAgIGlmIChpICUgMiA9PSAw
ICYmIHN0cmluZy5jc3NUZXh0LmluY2x1ZGVzKCcjJykpIHsKKyAgICAgICAgICAgICAgICBzdWJS
dWxlID0gc3RyaW5nLmNzc1RleHQuc3BsaXQoJyMnKVsxXS5yZXBsYWNlKCciJywgIiIpOworICAg
ICAgICAgICAgICAgIHN1YlJ1bGUgPSBzdWJSdWxlLnNwbGl0KCcpJylbMF07CisgICAgICAgICAg
ICAgICAgc2hvdWxkQmUoInN1YlJ1bGUiLCAiJyIgKyBleHBlY3RlZFRleHRzW2ldICsgIiciKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3ViUnVsZSA9IHN0cmluZzsK
KyAgICAgICAgICAgICAgICBzaG91bGRCZSgic3ViUnVsZS5jc3NUZXh0IiwgIiciICsgZXhwZWN0
ZWRUZXh0c1tpXSArICInIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7Cit9CisKK3Rlc3RJbWFnZVNldFJ1bGUo
IlNpbmdsZSB2YWx1ZSBmb3IgYmFja2dyb3VuZC1pbWFnZSB3aXRoIGdyYWRpZW50IiwKKyAgICAg
ICAgICAgICAgICAiYmFja2dyb3VuZC1pbWFnZSIsCisgICAgICAgICAgICAgICAgImxpbmVhci1n
cmFkaWVudChncmVlbiwgd2hpdGUpIDF4IiwgMiwKKyAgICAgICAgICAgICAgICBbImxpbmVhci1n
cmFkaWVudChncmVlbiwgd2hpdGUpIiwgIjEiXSk7Cit0ZXN0SW1hZ2VTZXRSdWxlKCJTaW5nbGUg
dmFsdWUgZm9yIGNvbnRlbnQgd2l0aCBncmFkaWVudCIsCisgICAgICAgICAgICAgICAgImJhY2tn
cm91bmQtaW1hZ2UiLAorICAgICAgICAgICAgICAgICJsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdo
aXRlKSAxeCIsIDIsCisgICAgICAgICAgICAgICAgWyJsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdo
aXRlKSIsICIxIl0pOworCit0ZXN0SW1hZ2VTZXRSdWxlKCJTaW5nbGUgdmFsdWUgZm9yIGJhY2tn
cm91bmQtaW1hZ2Ugd2l0aCBncmFkaWVudHMiLAorICAgICAgICAgICAgICAgICJiYWNrZ3JvdW5k
LWltYWdlIiwKKyAgICAgICAgICAgICAgICAibGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkg
MXgsIHJhZGlhbC1ncmFkaWVudChibHVlLCB3aGl0ZSkgMngiLCA0LAorICAgICAgICAgICAgICAg
IFsibGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkiLCAiMSIsICJyYWRpYWwtZ3JhZGllbnQo
Ymx1ZSwgd2hpdGUpIiwgIjIiXSk7CisKK3Rlc3RJbWFnZVNldFJ1bGUoIkNvbWJpbmVkIGdyYWRp
ZW50IGFuZCBVUkwiLAorICAgICAgICAgICAgICAgICJiYWNrZ3JvdW5kLWltYWdlIiwKKyAgICAg
ICAgICAgICAgICAidXJsKCcjYScpIDF4LCBsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAy
eCIsIDQsCisgICAgICAgICAgICAgICAgWyJhIiwgIjEiLCAibGluZWFyLWdyYWRpZW50KGdyZWVu
LCB3aGl0ZSkiLCAiMiJdKTsKKwordGVzdEltYWdlU2V0UnVsZSgiQ29tYmluZWQgZ3JhZGllbnQg
YW5kIFVSTCBpbiBjb250ZW50IiwKKyAgICAgICAgICAgICAgICAiY29udGVudCIsCisgICAgICAg
ICAgICAgICAgInVybCgnI2EnKSAxeCwgbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMngi
LCA0LAorICAgICAgICAgICAgICAgIFsiYSIsICIxIiwgImxpbmVhci1ncmFkaWVudChncmVlbiwg
d2hpdGUpIiwgIjIiXSk7CisKK3Rlc3RJbWFnZVNldFJ1bGUoIkNvbWJpbmVkIGdyYWRpZW50IGFu
ZCBjcm9zcy1mYWRlIiwKKyAgICAgICAgICAgICAgICAiYmFja2dyb3VuZC1pbWFnZSIsCisgICAg
ICAgICAgICAgICAgIi13ZWJraXQtY3Jvc3MtZmFkZSh1cmwoJyNhJyksIHVybCgnI2InKSwgNzAl
KSAxeCwgbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMngiLCA0LAorICAgICAgICAgICAg
ICAgIFsiYSIsICIxIiwgImxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIiwgIjIiXSk7CisK
K3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJz
aW5nLWdlbmVyYXRlZC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0w
LDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctaW52YWxpZC1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctaW52YWxp
ZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI1NDgwOCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3Nz
L2ltYWdlLXNldC1wYXJzaW5nLWludmFsaWQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0xOCw2ICsxOCwxMiBAQCBQQVNTIGNzc1J1bGUgaXMgbnVsbAogCiBTY2FsZSBmYWN0b3IgaXMg
MCA6IHVybCgnI2EnKSAweAogUEFTUyBjc3NSdWxlIGlzIG51bGwKKworR2VuZXJhdGVkIGltYWdl
IGZvciBjdXJzb3IgOiBsaW5lYXItZ3JhZGllbnQoYmxhY2ssIHdoaXRlKSAxeAorUEFTUyBjc3NS
dWxlIGlzIG51bGwKKworSW1hZ2Utc2V0IGluc2lkZSBpbWFnZS1zZXQgOiBpbWFnZS1zZXQoaW1h
Z2Utc2V0KHVybCgnI2EnKSAxeCkgMXgpCitQQVNTIGNzc1J1bGUgaXMgbnVsbAogUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1pbnZhbGlkLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctaW52YWxpZC5odG1sCShyZXZp
c2lvbiAyNTQ4MDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1p
bnZhbGlkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAgdGVzdEludmFsaWRJ
bWFnZVNldCgiTm8geCIsICJiYWNrZ3JvdW5kLQogdGVzdEludmFsaWRJbWFnZVNldCgiTm8gY29t
bWEiLCAiYmFja2dyb3VuZC1pbWFnZSIsICJ1cmwoJyNhJykgMXggdXJsKCcjYicpIDJ4Iik7CiB0
ZXN0SW52YWxpZEltYWdlU2V0KCJUb28gbWFueSBzY2FsZSBmYWN0b3IgcGFyYW1ldGVycyIsICJi
YWNrZ3JvdW5kLWltYWdlIiwgInVybCgnI2EnKSAxeCAyeCIpOwogdGVzdEludmFsaWRJbWFnZVNl
dCgiU2NhbGUgZmFjdG9yIGlzIDAiLCAiYmFja2dyb3VuZC1pbWFnZSIsICJ1cmwoJyNhJykgMHgi
KTsKK3Rlc3RJbnZhbGlkSW1hZ2VTZXQoIkdlbmVyYXRlZCBpbWFnZSBmb3IgY3Vyc29yIiwgImN1
cnNvciIsICJsaW5lYXItZ3JhZGllbnQoYmxhY2ssIHdoaXRlKSAxeCIpOwordGVzdEludmFsaWRJ
bWFnZVNldCgiSW1hZ2Utc2V0IGluc2lkZSBpbWFnZS1zZXQiLCAiYmFja2dyb3VuZC1pbWFnZSIs
ICJpbWFnZS1zZXQoaW1hZ2Utc2V0KHVybCgnI2EnKSAxeCkgMXgpIik7CiAKIHN1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7CiA8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaGlkcGkv
aW1hZ2Utc2V0LWNyb3NzLWZhZGUtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1mYWRlLWV4cGVjdGVkLmh0bWwJKG5vbmV4
aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS1l
eHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYgQEAKKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0PgorICAgIHdpbmRvdy5vbmxvYWQgPSAoKSA9PiB7CisgICAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cisg
ICAgICAgIHRlc3RSdW5uZXIuc2V0QmFja2luZ1NjYWxlRmFjdG9yKDIsICgpID0+IHNldFRpbWVv
dXQoKCkgPT4gdGVzdFJ1bm5lci5ub3RpZnlEb25lKCksIDApKTsKKyAgICAgIH0KKyAgICB9Cis8
L3NjcmlwdD4KKworICAgIAorPHN0eWxlPgorICAgICNmb28geworICAgICAgICB3aWR0aDoxMDBw
eDsKKyAgICAgICAgaGVpZ2h0OjEwMHB4OworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Vi
a2l0LWNyb3NzLWZhZGUodXJsKCdyZXNvdXJjZXMvYmx1ZS0xMDAtcHgtc3F1YXJlLnBuZycpLCB1
cmwoJ3Jlc291cmNlcy9ncmVlbi0yMDAtcHgtc3F1YXJlLnBuZycsIDUwJSkpOworICAgIH0KKzwv
c3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0
aGUgZGl2IGJlbG93IGlzIGEgYmx1ZSAxMDBweCBzcXVhcmUgd2hlbiB0aGUgZGV2aWNlU2NhbGVG
YWN0b3IgaXMgMSwgYW5kIGlmIGl0IGlzIGEgMTAwcHggZ3JlZW4vYmx1ZSBjcm9zcy1mYWRlIHNx
dWFyZSB3aGVuIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBpcyAyLjwvZGl2PgorPGRpdiBpZD1mb28+
PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0
cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1mYWRlLWV4cGVjdGVkLmh0bWwKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1j
cm9zcy1mYWRlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFn
ZS1zZXQtY3Jvc3MtZmFkZS5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
aGlkcGkvaW1hZ2Utc2V0LWNyb3NzLWZhZGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI1IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KKyAgICB3aW5kb3cub25sb2FkID0gKCkg
PT4geworICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworICAgICAgICB0ZXN0UnVubmVyLnNldEJhY2tpbmdTY2FsZUZhY3Rv
cigyLCAoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpLCAwKSk7
CisgICAgICB9CisgICAgfQorPC9zY3JpcHQ+CisgICAgCis8c3R5bGU+CisgICAgI2ZvbyB7Cisg
ICAgICAgIHdpZHRoOjEwMHB4OworICAgICAgICBoZWlnaHQ6MTAwcHg7CisgICAgICAgIGJhY2tn
cm91bmQtaW1hZ2U6IGltYWdlLXNldCh1cmwoJ3Jlc291cmNlcy9ibHVlLTEwMC1weC1zcXVhcmUu
cG5nJykgMXgsIC13ZWJraXQtY3Jvc3MtZmFkZSh1cmwoJ3Jlc291cmNlcy9ibHVlLTEwMC1weC1z
cXVhcmUucG5nJyksIHVybCgncmVzb3VyY2VzL2dyZWVuLTIwMC1weC1zcXVhcmUucG5nJywgNTAl
KSkgMngpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorICAgIDxkaXY+VGhp
cyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgYmx1ZSAxMDBweCBzcXVhcmUgd2hl
biB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgaXMgMSwgYW5kIGlmIGl0IGlzIGEgMTAwcHggZ3JlZW4v
Ymx1ZSBjcm9zcy1mYWRlIHNxdWFyZSB3aGVuIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBpcyAyLjwv
ZGl2PgorICAgIDxkaXYgaWQ9Zm9vPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS5o
dG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9oaWRw
aS9pbWFnZS1zZXQtZ3JhZGllbnQtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1leHBlY3RlZC5odG1sCShub25leGlz
dGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LWV4cGVj
dGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNiBAQAorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQ+CisgICAgd2luZG93Lm9ubG9hZCA9ICgpID0+IHsKKyAgICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAg
ICAgdGVzdFJ1bm5lci5zZXRCYWNraW5nU2NhbGVGYWN0b3IoMiwgKCkgPT4gc2V0VGltZW91dCgo
KSA9PiB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKSwgMCkpOworICAgICAgfQorICAgIH0KKzwvc2Ny
aXB0PgorCisgICAgCis8c3R5bGU+CisgICAgI2ZvbyB7CisgICAgICAgIHdpZHRoOjEwMHB4Owor
ICAgICAgICBoZWlnaHQ6MTAwcHg7CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1n
cmFkaWVudChncmVlbiwgd2hpdGUpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5
PgorICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgYmx1ZSAx
MDBweCBzcXVhcmUgd2hlbiB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgaXMgMSwgYW5kIGlmIGl0IGlz
IGEgMTAwcHggZ3JlZW4td2hpdGUgZ3JhZGllbnQgc3F1YXJlIHdoZW4gdGhlIGRldmljZVNjYWxl
RmFjdG9yIGlzIDIuPC9kaXY+CisgICAgPGRpdiBpZD1mb28+PC9kaXY+Cis8L2JvZHk+Cis8L2h0
bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNl
dC1ncmFkaWVudC1leHBlY3RlZC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxl
CiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtbXVsdGktZXhwZWN0ZWQu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFk
aWVudC1tdWx0aS1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zh
c3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LW11bHRpLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyNSBAQAorPGh0bWw+Cis8aGVhZD4gICAgCis8c2NyaXB0PgorICAg
IHdpbmRvdy5vbmxvYWQgPSAoKSA9PiB7CisgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsK
KyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIHRlc3RSdW5uZXIu
c2V0QmFja2luZ1NjYWxlRmFjdG9yKDIsICgpID0+IHNldFRpbWVvdXQoKCkgPT4gdGVzdFJ1bm5l
ci5ub3RpZnlEb25lKCksIDApKTsKKyAgICAgIH0KKyAgICB9Cis8L3NjcmlwdD4KKworPHN0eWxl
PgorICAgICNmb28geworICAgICAgICB3aWR0aDoxMDBweDsKKyAgICAgICAgaGVpZ2h0OjEwMHB4
OworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQocmVkLCBibHVlKTsK
KyAgICB9Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keT4KKyAgICA8ZGl2PlRoaXMgdGVzdCBw
YXNzZXMgaWYgdGhlIGRpdiBiZWxvdyBpcyBhIDEwMHB4IGdyZWVuLXdoaXRlIGdyYWRpZW50IHNx
dWFyZSB3aGVuIGRldmljZVBpeGVsUmF0aW8gaXMgMSwgYSByYWRpYWwgcmVkLWJsdWUgc3F1YXJl
IHdoZW4gZGV2aWNlUGl4ZWxSYXRpbyBpcyAyLCBhbmQgYSBibHVlIHNxdWFyZSB3aGVuIGRldmlj
ZVBpeGVsUmF0aW8gaXMgMy48L2Rpdj4KKyAgICA8ZGl2IGlkPWZvbz48L2Rpdj4KKzwvYm9keT4K
KzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1h
Z2Utc2V0LWdyYWRpZW50LW11bHRpLWV4cGVjdGVkLmh0bWwKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
OmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3Bl
cnR5CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1tdWx0
aS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdy
YWRpZW50LW11bHRpLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9oaWRw
aS9pbWFnZS1zZXQtZ3JhZGllbnQtbXVsdGkuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI1IEBACis8aHRtbD4KKzxoZWFkPiAgICAKKzxzY3JpcHQ+CisgICAgd2luZG93Lm9ubG9hZCA9
ICgpID0+IHsKKyAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVu
bmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRCYWNraW5nU2NhbGVG
YWN0b3IoMiwgKCkgPT4gc2V0VGltZW91dCgoKSA9PiB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKSwg
MCkpOworICAgICAgfQorICAgIH0KKzwvc2NyaXB0PgorCis8c3R5bGU+CisgICAgI2ZvbyB7Cisg
ICAgICAgIHdpZHRoOjEwMHB4OworICAgICAgICBoZWlnaHQ6MTAwcHg7CisgICAgICAgIGJhY2tn
cm91bmQtaW1hZ2U6IGltYWdlLXNldChsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAxeCwg
cmFkaWFsLWdyYWRpZW50KHJlZCwgYmx1ZSkgMngsICdyZXNvdXJjZXMvYmx1ZS0xMDAtcHgtc3F1
YXJlLnBuZycgM3gpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorICAgIDxk
aXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgMTAwcHggZ3JlZW4td2hp
dGUgZ3JhZGllbnQgc3F1YXJlIHdoZW4gZGV2aWNlUGl4ZWxSYXRpbyBpcyAxLCBhIHJhZGlhbCBy
ZWQtYmx1ZSBzcXVhcmUgd2hlbiBkZXZpY2VQaXhlbFJhdGlvIGlzIDIsIGFuZCBhIGJsdWUgc3F1
YXJlIHdoZW4gZGV2aWNlUGl4ZWxSYXRpbyBpcyAzLjwvZGl2PgorICAgIDxkaXYgaWQ9Zm9vPjwv
ZGl2PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMv
ZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtbXVsdGkuaHRtbApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50
LXNpbmdsZS1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaGlk
cGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkK
KysrIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS1leHBl
Y3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYgQEAKKzxodG1sPgorPGhlYWQ+
Cis8c3R5bGU+CisgICAgI2ZvbyB7CisgICAgICAgIHdpZHRoOjEwMHB4OworICAgICAgICBoZWln
aHQ6MTAwcHg7CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChncmVl
biwgd2hpdGUpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGlkPSJib2R5Ij4K
KyAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGRpdiBiZWxvdyBpcyBhIDEwMHB4IGdy
ZWVuLXdoaXRlIGdyYWRpZW50IHNxdWFyZS48L2Rpdj4KKyAgICA8ZGl2IGlkPWZvbz48L2Rpdj4K
KzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3Qv
aGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS1leHBlY3RlZC5odG1sCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3Jh
ZGllbnQtc2luZ2xlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9p
bWFnZS1zZXQtZ3JhZGllbnQtc2luZ2xlLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtc2luZ2xlLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNiBAQAorPGh0bWw+Cis8aGVhZD4gICAgCis8c3R5bGU+CisgICAgI2Zv
byB7CisgICAgICAgIHdpZHRoOjEwMHB4OworICAgICAgICBoZWlnaHQ6MTAwcHg7CisgICAgICAg
IGJhY2tncm91bmQtaW1hZ2U6IGltYWdlLXNldChsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRl
KSAxeCk7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgaWQ9ImJvZHkiPgorICAg
IDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgMTAwcHggZ3JlZW4t
d2hpdGUgZ3JhZGllbnQgc3F1YXJlLjwvZGl2PgorICAgIDxkaXYgaWQ9Zm9vPjwvZGl2PgorPC9i
b2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9oaWRw
aS9pbWFnZS1zZXQtZ3JhZGllbnQtc2luZ2xlLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4
ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50Lmh0
bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3Jh
ZGllbnQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1IEBACis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdD4KKyAgICB3aW5kb3cub25sb2FkID0gKCkgPT4geworICAgICAgaWYgKHdpbmRv
dy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAg
ICAgICB0ZXN0UnVubmVyLnNldEJhY2tpbmdTY2FsZUZhY3RvcigyLCAoKSA9PiBzZXRUaW1lb3V0
KCgpID0+IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpLCAwKSk7CisgICAgICB9CisgICAgfQorPC9z
Y3JpcHQ+CisKKzxzdHlsZT4KKyAgICAjZm9vIHsKKyAgICAgICAgd2lkdGg6MTAwcHg7CisgICAg
ICAgIGhlaWdodDoxMDBweDsKKyAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogaW1hZ2Utc2V0KHVy
bCgncmVzb3VyY2VzL2JsdWUtMTAwLXB4LXNxdWFyZS5wbmcnKSAxeCwgbGluZWFyLWdyYWRpZW50
KGdyZWVuLCB3aGl0ZSkgMngpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5Pgor
ICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgYmx1ZSAxMDBw
eCBzcXVhcmUgd2hlbiB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgaXMgMSwgYW5kIGlmIGl0IGlzIGEg
MTAwcHggZ3JlZW4td2hpdGUgZ3JhZGllbnQgc3F1YXJlIHdoZW4gdGhlIGRldmljZVNjYWxlRmFj
dG9yIGlzIDIuPC9kaXY+CisgICAgPGRpdiBpZD1mb28+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1n
cmFkaWVudC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEg
IyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388196</attachid>
            <date>2020-01-19 14:16:16 -0800</date>
            <delta_ts>2020-01-20 15:49:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81941-20200120001611.patch</filename>
            <type>text/plain</type>
            <size>81806</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAyMC0wMS0xOSAgTm9hbSBS
b3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgLXdlYmtpdC1pbWFnZS1zZXQg
c2hvdWxkIHN1cHBvcnQgYWxsIHRoZSBpbWFnZSBmdW5jdGlvbnMgV2ViS2l0IHN1cHBvcnRzLCBu
b3QganVzdCB1cmwoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODE5NDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBTZXBhcmF0ZSBTdHlsZUNhY2hlZEltYWdlIHRvIDQgY2xhc3NlczoKKyAgICAgICAgLSBT
dHlsZUNhY2hlZEltYWdlOiBmb3Igc2luZ2xlIGltYWdlcyBvbmx5CisgICAgICAgIC0gU3R5bGVN
dWx0aUltYWdlOiBmb3IgdmFsdWVzIHRoYXQgY2FuIGNvbnRhaW4gbXVsdGlwbGUgaW1hZ2VzOiBs
aWtlIGN1cnNvci9pbWFnZS1zZXQKKyAgICAgICAgLSBTdHlsZUltYWdlU2V0CisgICAgICAgIC0g
U3R5bGVDdXJzb3JJbWFnZQorCisgICAgICAgIFRoZSBuZXcgY2xhc3NlcyBvbmx5IGRlYWwgd2l0
aCB0aGVpciBvd24gdmFsdWUgdHlwZS4gQmVmb3JlLCBJbWFnZVNldCBhbmQgY3Vyc29yIHdlcmUg
cmVzb2x2ZWQKKyAgICAgICAgYXMgYSBTdHlsZUNhY2hlZEltYWdlLCB3aGljaCBpcyBubyBsb25n
ZXIgYSB2YWxpZCBhc3N1bXB0aW9uIGlmIGltYWdlLXNldCBjYW4gY29udGFpbiBnZW5lcmF0ZWQg
aW1hZ2VzLgorICAgICAgICBUaG91Z2ggY3Vyc29ycyBzdGlsbCBjYW4gb25seSBjb250YWluIGNh
Y2hlZCBpbWFnZXMsIGl0IHdhcyBjbGVhbmVyIHRvIHJlZmFjdG9yIGl0IG91dCBhcyB3ZWxsLgor
CisgICAgICAgIFJlZmFjdG9yZWQgYmVzdC1maXQgaW1hZ2Ugc2VsZWN0aW9uIGZyb20gbG9hZGlu
Zy4gTm93IFN0eWxlQ2FjaGVkSW1hZ2UgaXMgaW4gY2hhcmdlIG9mIGxvYWRpbmcKKyAgICAgICAg
dGhlIGFjdHVhbCBpbWFnZSwgYW5kIFN0eWxlSW1hZ2VTZXQvU3R5bGVDdXJzb3JJbWFnZSBwZXJm
b3JtIHRoZSBzb3VyY2Ugc2VsZWN0aW9uLgorCisgICAgICAgIEFsc28sIGFkZGVkIHRoZSBuZWNl
c3NhcnkgbG9naWMgaW4gdGhlIENTUyBwYXJzZXIgdG8gY29uc3VtZSBnZW5lcmF0ZWQgaW1hZ2Vz
IGluc2lkZSBpbWFnZS1zZXRzLCBleGNsdWRpbmcKKyAgICAgICAgd2hlbiB0aGUgaW1hZ2Utc2V0
IGlzIGEgY3Vyc29yIHZhbHVlLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2Nzcy9pbWFnZS1zZXQt
cGFyc2luZy1nZW5lcmF0ZWQuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9oaWRwaS9pbWFnZS1z
ZXQtY3Jvc3MtZmFkZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2hpZHBpL2ltYWdlLXNldC1n
cmFkaWVudC1tdWx0aS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2hpZHBpL2ltYWdlLXNldC1n
cmFkaWVudC1zaW5nbGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9oaWRwaS9pbWFnZS1zZXQt
Z3JhZGllbnQuaHRtbAorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBm
aWxlcworCisgICAgICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6c2VsZWN0QmVzdEZpdEltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0N1cnNvckltYWdlVmFsdWU6OmxvYWRJbWFnZSk6IERlbGV0ZWQuCisg
ICAgICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuaDoKKyAgICAgICAgICAgICAgICBJbnN0
ZWFkIG9mIGN1cnNvciBsb2FkaW5nIHRoZSBpbWFnZSwgaXQgc2VsZWN0cyBhbiBpbWFnZSBDU1Mg
dmFsdWUKKworICAgICAgICAqIGNzcy9DU1NJbWFnZVNldFZhbHVlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ltYWdlU2V0VmFsdWU6OkNTU0ltYWdlU2V0VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTSW1hZ2VTZXRWYWx1ZTo6ZmlsbEltYWdlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ltYWdlU2V0VmFsdWU6OmNhY2hlZEltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ltYWdlU2V0VmFsdWU6OnNlbGVjdEJlc3RGaXRJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NJbWFnZVNldFZhbHVlOjp1cGRhdGVEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjppbWFnZVNldFdpdGhTdHlsZXNSZXNvbHZlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjp0cmF2ZXJzZVN1YnJlc291cmNlcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjpsb2FkQmVzdEZpdElt
YWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5oOgorICAgICAg
ICAgICAgICAgIFJlZmFjdG9yIENTU0ltYWdlU2V0VmFsdWUgdG8gaW5jbHVkZSBub24tY2FjaGVk
SW1hZ2UgaW1hZ2VzCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVDdXJzb3IpOgorICAgICAgICAqIGNzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVVybE9yU3RyaW5nQXNTdHJpbmdW
aWV3KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5oOgorICAgICAgICAgICAgICAgIAorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NTU1By
b3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRnVuYyk6CisgICAg
ICAgICAgICAgICAgV2hlbiBibGVuZGluZyB0d28gaW1hZ2VzLCBnZXQgdGhlIHNlbGVjdGVkIGlt
YWdlcyBpbiBjYXNlIGl0IGlzIGFuIGltYWdlLXNldAorCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
SW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2U6OmluaXRpYWxpemUpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FuRGlyZWN0bHlD
b21wb3NpdGVCYWNrZ3JvdW5kQmFja2dyb3VuZEltYWdlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3R5bGUvU2hhcGVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjppc0lt
YWdlVmFsaWQgY29uc3QpOgorICAgICAgICAgICAgICAgIFVzZSBoYXNDYWNoZWRJbWFnZSgpIGlu
c3RlYWQgb2YgaXNDYWNoZWRJbWFnZSgpIGFzIGEgU3R5bGVJbWFnZVNldCBpcyBubyBsb25nZXIg
YW4gaXNDYWNoZWRJbWFnZSgpCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNo
ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNhY2hlZEltYWdlOjpTdHlsZUNh
Y2hlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlVVJM
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OmxvYWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5n
L3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5
bGVDdXJzb3JJbWFnZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJ
bWFnZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZU11bHRpSW1hZ2UuY3BwOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlU2V0Lmg6CisgICAgICAgICogcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdHls
ZS9TdHlsZUltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUltYWdlOjpzZWxlY3RlZElt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW1hZ2U6OnNlbGVjdGVkSW1hZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVJbWFnZTo6aXNDdXJzb3JJbWFnZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUltYWdlOjppc0ltYWdlU2V0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlSW1hZ2U6Omhhc0NhY2hlZEltYWdlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlSW1hZ2U6OlN0eWxlSW1hZ2UpOgorICAgICAgICAgICAgICAgIFNlcGFyYXRl
IGN1cnNvci9pbWFnZS1zZXQgcmVsYXRlZCBzdHVmZiBhd2F5IGZyb20gU3R5bGVDYWNoZWRJbWFn
ZS4KKworICAgICAgICAqIHN0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OkJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb250ZW50KToKKyAgICAgICAg
KiBzdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
QnVpbGRlclN0YXRlOjpyZXNvbHZlSW1hZ2VTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OkJ1aWxkZXJTdGF0ZTo6Y3JlYXRlU3R5bGVJbWFnZSk6CisgICAgICAgICogc3R5bGUvU3R5
bGVCdWlsZGVyU3RhdGUuaDoKKyAgICAgICAgICAgICAgICBNYXRjaCB0aGUgQ1NTIHZhbHVlcyB3
aXRoIHRoZSBjb3JyZWN0IFN0eWxlIGNsYXNzLiBBbHNvLCBlbnN1cmUgaW1hZ2Utc2V0cyByZXNv
bHZlIHRoZWlyIAorICAgICAgICAgICAgICAgIGltYWdlcycgc3R5bGVzIGFzIHRoZXkgbWF5IGNv
bnRhaW4gZ3JhZGllbnRzIGFuZCBvdGhlciBjb250ZXh0LWF3YXJlIHZhbHVlcy4KKwogMjAyMC0w
MS0xOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10g
RGV2aXJ0dWFsaXplIEZvcm1hdHRpbmdTdGF0ZQpJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9u
IDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0yMjYyLDE1ICsyMjYyLDE4IEBAIHJlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmNwcAogcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5
bGVCb3hEYXRhLmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCityZW5k
ZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZURl
cHJlY2F0ZWRGbGV4aWJsZUJveERhdGEuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVGaWx0ZXJE
YXRhLmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlRmxleGlibGVCb3hEYXRhLmNwcAogcmVuZGVy
aW5nL3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVH
cmlkRGF0YS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZUdyaWRJdGVtRGF0YS5jcHAKK3JlbmRl
cmluZy9zdHlsZS9TdHlsZUltYWdlU2V0LmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJp
dGVkRGF0YS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZU1hcnF1ZWVEYXRhLmNwcAogcmVuZGVy
aW5nL3N0eWxlL1N0eWxlTXVsdGlDb2xEYXRhLmNwcAorcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVs
dGlJbWFnZS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcAog
cmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuY3BwCiByZW5kZXJpbmcv
c3R5bGUvU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjU0ODA4KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzcxNSw5ICsxMzcxNSwxNSBAQAogCQlDOURBREJDOTFCMUQzQjI1MDAx
RjE3RDggLyogSlNNZWRpYVNlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNNZWRpYVNlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDOURBREJDQTFCMUQzQjI1MDAxRjE3RDggLyogSlNNZWRpYVNlc3Npb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNZWRpYVNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzlGODdDRkQxQjI4RTVGNjAwOTc5QjgzIC8qIE1lZGlhU2Vzc2lvbkV2
ZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU2Vzc2lvbkV2ZW50cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDQTA5MUQ4NjIzQ0Y5MDc4MDBBRDQzNDYgLyogU3R5bGVJbWFnZVNl
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUltYWdlU2V0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0EwOTFEODkyM0NGOTA4ODAwQUQ0MzQ2IC8qIFN0eWxlSW1hZ2VT
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVJbWFnZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDQTE2MzVEQzIwNzJFNzY5MDBFN0QyQ0UgLyogUmVmZXJyZXJQb2xpY3kuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVmZXJyZXJQb2xpY3kuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQTNCRjY3QjEwRDk5QkFFMDBFNkNFNTMg
LyogU2Nyb2xsQW5pbWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU2Nyb2xsQW5pbWF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQTNC
RjY3RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQ0E1MkJBRTUyM0QwQUYxNjAwREUwQjg0IC8qIFN0eWxlQ3Vyc29ySW1hZ2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVDdXJzb3JJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUNBNTJCQUU3MjNEMEFGMTcwMERFMEI4NCAvKiBTdHlsZU11bHRpSW1h
Z2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVNdWx0aUltYWdlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0E1MkJBRTgyM0QwQUYxODAwREUwQjg0IC8qIFN0eWxlTXVs
dGlJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZU11bHRpSW1hZ2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0E1MkJBRTkyM0QwQUYxOTAwREUwQjg0IC8qIFN0eWxlQ3Vyc29y
SW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVDdXJzb3JJbWFnZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDQTZDMTUyRjIyMEI0QTU1MDA1NUNCRkMgLyogSlNJREJSZXF1ZXN0
Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCUmVx
dWVzdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNBNkMxNTM3MjIw
RDFFQjMwMDU1Q0JGQyAvKiBKU0lEQkN1cnNvckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0lEQkN1cnNvckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUNBNkMxNTM4MjIwRDFFQjMwMDU1Q0JGQyAvKiBKU0lEQkN1cnNvcldp
dGhWYWx1ZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yNTU1Myw2ICsyNTU1OSw4IEBACiAJCQkJQkNFRjQ0NEMwRTY3NDYyODAwMUMxMjg3IC8q
IFN0eWxlQ2FjaGVkSW1hZ2UuaCAqLywKIAkJCQkxQzBBQTE2QTIxOTQwREM3MDA4OTY4MjkgLyog
U3R5bGVDb2xvclNjaGVtZS5oICovLAogCQkJCTlEQUM3QzU2MUFGMkNCNjQwMDQzN0M0NCAvKiBT
dHlsZUNvbnRlbnRBbGlnbm1lbnREYXRhLmggKi8sCisJCQkJQ0E1MkJBRTUyM0QwQUYxNjAwREUw
Qjg0IC8qIFN0eWxlQ3Vyc29ySW1hZ2UuY3BwICovLAorCQkJCUNBNTJCQUU5MjNEMEFGMTkwMERF
MEI4NCAvKiBTdHlsZUN1cnNvckltYWdlLmggKi8sCiAJCQkJQkM3NzlFMTUxQkIyMjZBMjAwQ0FB
OEJGIC8qIFN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhLmggKi8sCiAJCQkJQkM1RUI4QjYwRTgyMDFC
RDAwQjI1OTY1IC8qIFN0eWxlRGVwcmVjYXRlZEZsZXhpYmxlQm94RGF0YS5jcHAgKi8sCiAJCQkJ
QkM1RUI4QjcwRTgyMDFCRDAwQjI1OTY1IC8qIFN0eWxlRGVwcmVjYXRlZEZsZXhpYmxlQm94RGF0
YS5oICovLApAQCAtMjU1NjcsMTIgKzI1NTc1LDE2IEBACiAJCQkJQTExMERCOUMxNEY1REY4NzAw
QTAzQjkzIC8qIFN0eWxlR3JpZEl0ZW1EYXRhLmNwcCAqLywKIAkJCQlBMTEwREI5QTE0RjVERjc3
MDBBMDNCOTMgLyogU3R5bGVHcmlkSXRlbURhdGEuaCAqLywKIAkJCQlCQ0VGNDNDRTBFNjczREEx
MDAxQzEyODcgLyogU3R5bGVJbWFnZS5oICovLAorCQkJCUNBMDkxRDg2MjNDRjkwNzgwMEFENDM0
NiAvKiBTdHlsZUltYWdlU2V0LmNwcCAqLywKKwkJCQlDQTA5MUQ4OTIzQ0Y5MDg4MDBBRDQzNDYg
LyogU3R5bGVJbWFnZVNldC5oICovLAogCQkJCUJDMjI3MzAxMEU4MkYxRTYwMEU3Rjk3NSAvKiBT
dHlsZUluaGVyaXRlZERhdGEuY3BwICovLAogCQkJCUJDMjI3MzAyMEU4MkYxRTYwMEU3Rjk3NSAv
KiBTdHlsZUluaGVyaXRlZERhdGEuaCAqLywKIAkJCQlCQzVFQjcyNzBFODFERTgxMDBCMjU5NjUg
LyogU3R5bGVNYXJxdWVlRGF0YS5jcHAgKi8sCiAJCQkJQkM1RUI3MjgwRTgxREU4MTAwQjI1OTY1
IC8qIFN0eWxlTWFycXVlZURhdGEuaCAqLywKIAkJCQlCQzVFQjc0QjBFODFFMDY3MDBCMjU5NjUg
LyogU3R5bGVNdWx0aUNvbERhdGEuY3BwICovLAogCQkJCUJDNUVCNzRDMEU4MUUwNjcwMEIyNTk2
NSAvKiBTdHlsZU11bHRpQ29sRGF0YS5oICovLAorCQkJCUNBNTJCQUU3MjNEMEFGMTcwMERFMEI4
NCAvKiBTdHlsZU11bHRpSW1hZ2UuY3BwICovLAorCQkJCUNBNTJCQUU4MjNEMEFGMTgwMERFMEI4
NCAvKiBTdHlsZU11bHRpSW1hZ2UuaCAqLywKIAkJCQlCQzIyNzJFMTBFODJFRTlCMDBFN0Y5NzUg
LyogU3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5jcHAgKi8sCiAJCQkJQkMyMjcyRTIwRTgyRUU5QjAw
RTdGOTc1IC8qIFN0eWxlUmFyZUluaGVyaXRlZERhdGEuaCAqLywKIAkJCQlCQzIyNzJCQTBFODJF
QUFFMDBFN0Y5NzUgLyogU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAgKi8sCkBAIC0zMTM1
Nyw2ICszMTM2OSw3IEBACiAJCQkJMTE5OUZBNDYyMDhFMzVBMzAwMjM1OENDIC8qIExheW91dENv
bnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkYyNkJCNkMyMzM0M0U2RjAwMkYyQkVBIC8q
IExheW91dENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTExMzEwQ0Y1MjBCQTRBNEMwMDY1
QThEMCAvKiBMYXlvdXREZXNjZW5kYW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0
MTgwMjU1MjNENDU0OUIwMEZGQjA3MSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUU0QUJBQkREMjM2MDg4RkUwMEZBNDM0NSAvKiBMYXlvdXRJbnRlZ3Jh
dGlvbkxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTExMzEwQ0Y0MjBCQTRBM0QwMDY1
QThEMCAvKiBMYXlvdXRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxRDcyRjYxNUZF
Njk1MzAwQzRDMDdFIC8qIExheW91dE1pbGVzdG9uZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjA1
MCw3ICszMjA2Myw2IEBACiAJCQkJNDU4RkU0MEExNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNl
YXJjaEZpZWxkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQg
LyogUmVuZGVyU2VsZWN0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUIyNDdBNkQwQUZE
NjM4MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQxODAy
NTUyM0Q0NTQ5QjAwRkZCMDcxIC8qIExheW91dEludGVncmF0aW9uQm94VHJlZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzE5NTVBODgxNjBEMTk5MjAwODU4MDI1IC8qIFJlbmRlclNuYXBzaG90dGVk
UGx1Z0luLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhDOEZBRTBERENEMzFCMDBCNTkyRjQgLyog
UmVuZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNjY4MEU4MUNCNzEwMEIyNTk2
NSAvKiBSZW5kZXJTdHlsZUNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk1LDE3ICs5NSwxNyBAQCB2b2lkIENTU0N1cnNvckltYWdlVmFsdWU6OmN1cnNvckVs
ZW1lbnRDCiAgICAgbV9ob3RTcG90LnNldFkoc3RhdGljX2Nhc3Q8aW50Pih5KSk7CiB9CiAKLXN0
ZDo6cGFpcjxDYWNoZWRJbWFnZSosIGZsb2F0PiBDU1NDdXJzb3JJbWFnZVZhbHVlOjpsb2FkSW1h
Z2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRp
b25zJiBvcHRpb25zKQorc3RkOjpwYWlyPENTU1ZhbHVlKiwgZmxvYXQ+IENTU0N1cnNvckltYWdl
VmFsdWU6OnNlbGVjdEJlc3RGaXRJbWFnZShjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAg
ICAgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkpCi0gICAgICAg
IHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPihtX2ltYWdlVmFsdWUuZ2V0KCkpLmxv
YWRCZXN0Rml0SW1hZ2UobG9hZGVyLCBvcHRpb25zKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENTU0ltYWdlU2V0VmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkuc2VsZWN0QmVzdEZpdEltYWdl
KGRvY3VtZW50KTsKIAotICAgIGlmIChhdXRvKiBjdXJzb3JFbGVtZW50ID0gdXBkYXRlQ3Vyc29y
RWxlbWVudCgqbG9hZGVyLmRvY3VtZW50KCkpKSB7CisgICAgaWYgKGF1dG8qIGN1cnNvckVsZW1l
bnQgPSB1cGRhdGVDdXJzb3JFbGVtZW50KGRvY3VtZW50KSkgewogICAgICAgICBpZiAoY3Vyc29y
RWxlbWVudC0+aHJlZigpICE9IGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KG1faW1hZ2VWYWx1ZS5n
ZXQoKSkudXJsKCkpCi0gICAgICAgICAgICBtX2ltYWdlVmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpj
cmVhdGUobG9hZGVyLmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGN1cnNvckVsZW1lbnQtPmhyZWYo
KSksIG1fbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSk7CisgICAgICAgICAgICBtX2ltYWdlVmFsdWUg
PSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoZG9jdW1lbnQuY29tcGxldGVVUkwoY3Vyc29yRWxlbWVu
dC0+aHJlZigpKSwgbV9sb2FkZWRGcm9tT3BhcXVlU291cmNlKTsKICAgICB9CiAKLSAgICByZXR1
cm4geyBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX2ltYWdlVmFsdWUuZ2V0KCkpLmxvYWRJbWFn
ZShsb2FkZXIsIG9wdGlvbnMpLCAxIH07CisgICAgcmV0dXJuIHsgbV9pbWFnZVZhbHVlLnB0cigp
ICwgMSB9OwogfQogCiBib29sIENTU0N1cnNvckltYWdlVmFsdWU6OmVxdWFscyhjb25zdCBDU1ND
dXJzb3JJbWFnZVZhbHVlJiBvdGhlcikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NDdXJzb3JJbWFnZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NT
U0N1cnNvckltYWdlVmFsdWUuaAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0N1cnNvckltYWdlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsMTAg
QEAgY2xhc3MgRWxlbWVudDsKIGNsYXNzIFNWR0N1cnNvckVsZW1lbnQ7CiBjbGFzcyBTVkdFbGVt
ZW50OwogCituYW1lc3BhY2UgU3R5bGUgeworY2xhc3MgQnVpbGRlclN0YXRlOworfQorCiBjbGFz
cyBDU1NDdXJzb3JJbWFnZVZhbHVlIGZpbmFsIDogcHVibGljIENTU1ZhbHVlIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmPENTU0N1cnNvckltYWdlVmFsdWU+IGNyZWF0ZShSZWY8Q1NTVmFsdWU+
JiYgaW1hZ2VWYWx1ZSwgYm9vbCBoYXNIb3RTcG90LCBjb25zdCBJbnRQb2ludCYgaG90U3BvdCwg
TG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSBsb2FkZWRGcm9tT3BhcXVlU291cmNlKQpAQCAtNTYsNyAr
NjAsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4dCgpIGNvbnN0OwogCi0g
ICAgc3RkOjpwYWlyPENhY2hlZEltYWdlKiwgZmxvYXQ+IGxvYWRJbWFnZShDYWNoZWRSZXNvdXJj
ZUxvYWRlciYsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYpOworICAgIHN0ZDo6cGFpcjxD
U1NWYWx1ZSosIGZsb2F0PiBzZWxlY3RCZXN0Rml0SW1hZ2UoY29uc3QgRG9jdW1lbnQmKTsKIAog
ICAgIHZvaWQgcmVtb3ZlUmVmZXJlbmNlZEVsZW1lbnQoU1ZHRWxlbWVudCopOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDE5ICsyOCwxNSBAQAogCiAjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgogI2luY2x1
ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNs
dWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVx
dWVzdC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTdHlsZUJ1
aWxkZXJTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1DU1NJbWFnZVNldFZhbHVlOjpDU1NJbWFnZVNldFZhbHVlKExv
YWRlZEZyb21PcGFxdWVTb3VyY2UgbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSkKK0NTU0ltYWdlU2V0
VmFsdWU6OkNTU0ltYWdlU2V0VmFsdWUoKQogICAgIDogQ1NTVmFsdWVMaXN0KEltYWdlU2V0Q2xh
c3MsIENvbW1hU2VwYXJhdG9yKQotICAgICwgbV9sb2FkZWRGcm9tT3BhcXVlU291cmNlKGxvYWRl
ZEZyb21PcGFxdWVTb3VyY2UpCiB7CiB9CiAKQEAgLTUyLDE1ICs0OCwxNCBAQCB2b2lkIENTU0lt
YWdlU2V0VmFsdWU6OmZpbGxJbWFnZVNldCgpCiAgICAgc2l6ZV90IGkgPSAwOwogICAgIHdoaWxl
IChpIDwgbGVuZ3RoKSB7CiAgICAgICAgIENTU1ZhbHVlKiBpbWFnZVZhbHVlID0gaXRlbShpKTsK
LSAgICAgICAgVVJMIGltYWdlVVJMID0gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oKmltYWdlVmFs
dWUpLnVybCgpOwotCisgICAgICAgIEFTU0VSVChpczxDU1NJbWFnZVZhbHVlPihpbWFnZVZhbHVl
KSB8fCBpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihpbWFnZVZhbHVlKSk7CiAgICAgICAgICsr
aTsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaSA8IGxlbmd0aCk7
CiAgICAgICAgIENTU1ZhbHVlKiBzY2FsZUZhY3RvclZhbHVlID0gaXRlbShpKTsKICAgICAgICAg
ZmxvYXQgc2NhbGVGYWN0b3IgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnNjYWxlRmFj
dG9yVmFsdWUpLmZsb2F0VmFsdWUoKTsKIAogICAgICAgICBJbWFnZVdpdGhTY2FsZSBpbWFnZTsK
LSAgICAgICAgaW1hZ2UuaW1hZ2VVUkwgPSBpbWFnZVVSTDsKKyAgICAgICAgaW1hZ2UudmFsdWUg
PSBpbWFnZVZhbHVlOwogICAgICAgICBpbWFnZS5zY2FsZUZhY3RvciA9IHNjYWxlRmFjdG9yOwog
ICAgICAgICBtX2ltYWdlc0luU2V0LmFwcGVuZChpbWFnZSk7CiAgICAgICAgICsraTsKQEAgLTg1
LDEyICs4MCwxOCBAQCBDU1NJbWFnZVNldFZhbHVlOjpJbWFnZVdpdGhTY2FsZSBDU1NJbWFnCiAg
ICAgcmV0dXJuIGltYWdlOwogfQogCi1zdGQ6OnBhaXI8Q2FjaGVkSW1hZ2UqLCBmbG9hdD4gQ1NT
SW1hZ2VTZXRWYWx1ZTo6bG9hZEJlc3RGaXRJbWFnZShDYWNoZWRSZXNvdXJjZUxvYWRlciYgbG9h
ZGVyLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCitDYWNoZWRJbWFnZSog
Q1NTSW1hZ2VTZXRWYWx1ZTo6Y2FjaGVkSW1hZ2UoKSBjb25zdAogewotICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IGxvYWRlci5kb2N1bWVudCgpOwotICAgIEFTU0VSVChkb2N1bWVudCk7CisgICAg
aWYgKCFtX3NlbGVjdGVkSW1hZ2VWYWx1ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
aWYgKGlzPENTU0ltYWdlVmFsdWU+KG1fc2VsZWN0ZWRJbWFnZVZhbHVlKSkKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KG1fc2VsZWN0ZWRJbWFnZVZhbHVlKS0+Y2FjaGVk
SW1hZ2UoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KIAotICAgIHVwZGF0ZURldmljZVNjYWxl
RmFjdG9yKCpkb2N1bWVudCk7CitzdGQ6OnBhaXI8Q1NTVmFsdWUqLCBmbG9hdD4gQ1NTSW1hZ2VT
ZXRWYWx1ZTo6c2VsZWN0QmVzdEZpdEltYWdlKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKK3sK
KyAgICB1cGRhdGVEZXZpY2VTY2FsZUZhY3Rvcihkb2N1bWVudCk7CiAKICAgICBpZiAoIW1fYWNj
ZXNzZWRCZXN0Rml0SW1hZ2UpIHsKICAgICAgICAgbV9hY2Nlc3NlZEJlc3RGaXRJbWFnZSA9IHRy
dWU7CkBAIC05OSwxOCArMTAwLDE3IEBAIHN0ZDo6cGFpcjxDYWNoZWRJbWFnZSosIGZsb2F0PiBD
U1NJbWFnZVMKICAgICAgICAgLy8gQWxsIGZvcm1zIG9mIHNjYWxlIHNob3VsZCBiZSBpbmNsdWRl
ZDogUGFnZTo6cGFnZVNjYWxlRmFjdG9yKCksIEZyYW1lOjpwYWdlWm9vbUZhY3RvcigpLAogICAg
ICAgICAvLyBhbmQgYW55IENTUyB0cmFuc2Zvcm1zLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODE2OTgKICAgICAgICAgSW1hZ2VXaXRoU2NhbGUgaW1hZ2UgPSBiZXN0
SW1hZ2VGb3JTY2FsZUZhY3RvcigpOwotCi0gICAgICAgIFJlc291cmNlTG9hZGVyT3B0aW9ucyBs
b2FkT3B0aW9ucyA9IG9wdGlvbnM7Ci0gICAgICAgIGxvYWRPcHRpb25zLmxvYWRlZEZyb21PcGFx
dWVTb3VyY2UgPSBtX2xvYWRlZEZyb21PcGFxdWVTb3VyY2U7Ci0gICAgICAgIENhY2hlZFJlc291
cmNlUmVxdWVzdCByZXF1ZXN0KFJlc291cmNlUmVxdWVzdChkb2N1bWVudC0+Y29tcGxldGVVUkwo
aW1hZ2UuaW1hZ2VVUkwpKSwgbG9hZE9wdGlvbnMpOwotICAgICAgICByZXF1ZXN0LnNldEluaXRp
YXRvcihjYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzKCkuY3NzKTsKLSAgICAgICAgaWYg
KG9wdGlvbnMubW9kZSA9PSBGZXRjaE9wdGlvbnM6Ok1vZGU6OkNvcnMpCi0gICAgICAgICAgICBy
ZXF1ZXN0LnVwZGF0ZUZvckFjY2Vzc0NvbnRyb2woKmRvY3VtZW50KTsKLQotICAgICAgICBtX2Nh
Y2hlZEltYWdlID0gbG9hZGVyLnJlcXVlc3RJbWFnZShXVEZNb3ZlKHJlcXVlc3QpKS52YWx1ZV9v
cihudWxscHRyKTsKICAgICAgICAgbV9iZXN0Rml0SW1hZ2VTY2FsZUZhY3RvciA9IGltYWdlLnNj
YWxlRmFjdG9yOworICAgICAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oaW1hZ2Uu
dmFsdWUpKSB7CisgICAgICAgICAgICBtX3NlbGVjdGVkSW1hZ2VWYWx1ZSA9IGltYWdlLnZhbHVl
OworICAgICAgICAgICAgcmV0dXJuIHsgbV9zZWxlY3RlZEltYWdlVmFsdWUsIG1fYmVzdEZpdElt
YWdlU2NhbGVGYWN0b3IgfTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIEFTU0VS
VChpczxDU1NJbWFnZVZhbHVlPihpbWFnZS52YWx1ZSkpOworICAgICAgICBtX3NlbGVjdGVkSW1h
Z2VWYWx1ZSA9IGltYWdlLnZhbHVlOwogICAgIH0KLSAgICByZXR1cm4geyBtX2NhY2hlZEltYWdl
LmdldCgpLCBtX2Jlc3RGaXRJbWFnZVNjYWxlRmFjdG9yIH07CisKKyAgICByZXR1cm4geyBtX3Nl
bGVjdGVkSW1hZ2VWYWx1ZSwgbV9iZXN0Rml0SW1hZ2VTY2FsZUZhY3RvciB9OwogfQogCiB2b2lk
IENTU0ltYWdlU2V0VmFsdWU6OnVwZGF0ZURldmljZVNjYWxlRmFjdG9yKGNvbnN0IERvY3VtZW50
JiBkb2N1bWVudCkKQEAgLTEyMCw3ICsxMjAsMjUgQEAgdm9pZCBDU1NJbWFnZVNldFZhbHVlOjp1
cGRhdGVEZXZpY2VTY2FsZQogICAgICAgICByZXR1cm47CiAgICAgbV9kZXZpY2VTY2FsZUZhY3Rv
ciA9IGRldmljZVNjYWxlRmFjdG9yOwogICAgIG1fYWNjZXNzZWRCZXN0Rml0SW1hZ2UgPSBmYWxz
ZTsKLSAgICBtX2NhY2hlZEltYWdlID0gbnVsbHB0cjsKKyAgICBtX3NlbGVjdGVkSW1hZ2VWYWx1
ZSA9IG51bGxwdHI7Cit9CisKK1JlZjxDU1NJbWFnZVNldFZhbHVlPiBDU1NJbWFnZVNldFZhbHVl
OjppbWFnZVNldFdpdGhTdHlsZXNSZXNvbHZlZChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVy
U3RhdGUpCit7CisgICAgUmVmPENTU0ltYWdlU2V0VmFsdWU+IHJlc3VsdCA9IENTU0ltYWdlU2V0
VmFsdWU6OmNyZWF0ZSgpOworICAgIHNpemVfdCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAg
ICBzaXplX3QgaSA9IDA7CisgICAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKKyAgICAgICAgQ1NTVmFs
dWUqIGltYWdlVmFsdWUgPSBpdGVtKGkpOworICAgICAgICBSZWY8Q1NTVmFsdWU+IHJlc29sdmVk
VmFsdWUgPSBidWlsZGVyU3RhdGUucmVzb2x2ZUltYWdlU3R5bGVzKCppbWFnZVZhbHVlKTsKKyAg
ICAgICAgcmVzdWx0LT5hcHBlbmQoV1RGTW92ZShyZXNvbHZlZFZhbHVlKSk7CisgICAgICAgICsr
aTsKKworICAgICAgICByZXN1bHQtPmFwcGVuZChSZWYoKml0ZW0oaSkpKTsKKyAgICAgICAgKytp
OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFN0cmluZyBDU1NJbWFnZVNldFZh
bHVlOjpjdXN0b21DU1NUZXh0KCkgY29uc3QKQEAgLTE1NSw5ICsxNzMsOSBAQCBTdHJpbmcgQ1NT
SW1hZ2VTZXRWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCgpCiAKIGJvb2wgQ1NTSW1hZ2VTZXRWYWx1ZTo6
dHJhdmVyc2VTdWJyZXNvdXJjZXMoY29uc3QgV1RGOjpGdW5jdGlvbjxib29sIChjb25zdCBDYWNo
ZWRSZXNvdXJjZSYpPiYgaGFuZGxlcikgY29uc3QKIHsKLSAgICBpZiAoIW1fY2FjaGVkSW1hZ2Up
CisgICAgaWYgKCFtX3NlbGVjdGVkSW1hZ2VWYWx1ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiBoYW5kbGVyKCptX2NhY2hlZEltYWdlKTsKKyAgICByZXR1cm4gbV9zZWxlY3Rl
ZEltYWdlVmFsdWUtPnRyYXZlcnNlU3VicmVzb3VyY2VzKGhhbmRsZXIpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZhbHVlLmgJ
KHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDIyICszNSwyNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBDYWNoZWRJbWFnZTsKIGNsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwogY2xhc3Mg
RG9jdW1lbnQ7CitjbGFzcyBDU1NJbWFnZVZhbHVlOworCituYW1lc3BhY2UgU3R5bGUgeworY2xh
c3MgQnVpbGRlclN0YXRlOworfQogCiBjbGFzcyBDU1NJbWFnZVNldFZhbHVlIGZpbmFsIDogcHVi
bGljIENTU1ZhbHVlTGlzdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDU1NJbWFnZVNldFZh
bHVlPiBjcmVhdGUoTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSBsb2FkZWRGcm9tT3BhcXVlU291cmNl
KQorICAgIHN0YXRpYyBSZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gY3JlYXRlKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ltYWdlU2V0VmFsdWUobG9hZGVkRnJvbU9wYXF1
ZVNvdXJjZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NJbWFnZVNldFZhbHVl
KCkpOwogICAgIH0KICAgICB+Q1NTSW1hZ2VTZXRWYWx1ZSgpOwogCi0gICAgc3RkOjpwYWlyPENh
Y2hlZEltYWdlKiwgZmxvYXQ+ICBsb2FkQmVzdEZpdEltYWdlKENhY2hlZFJlc291cmNlTG9hZGVy
JiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJik7Ci0gICAgQ2FjaGVkSW1hZ2UqIGNhY2hl
ZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbWFnZS5nZXQoKTsgfQorICAgIHN0ZDo6
cGFpcjxDU1NWYWx1ZSosIGZsb2F0PiAgc2VsZWN0QmVzdEZpdEltYWdlKGNvbnN0IERvY3VtZW50
Jik7CisgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3Q7CiAKICAgICBTdHJpbmcg
Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0OwogCiAgICAgc3RydWN0IEltYWdlV2l0aFNjYWxlIHsKLSAg
ICAgICAgVVJMIGltYWdlVVJMOworICAgICAgICBDU1NWYWx1ZSogdmFsdWU7CiAgICAgICAgIGZs
b2F0IHNjYWxlRmFjdG9yOwogICAgIH07CiAKQEAgLTU4LDI0ICs2MywyMyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHVwZGF0ZURldmljZVNjYWxlRmFjdG9yKGNvbnN0IERvY3VtZW50Jik7CiAKLSAg
ICBVUkwgYmVzdEltYWdlRm9yU2NhbGVGYWN0b3JVUkwoKSB7IHJldHVybiBiZXN0SW1hZ2VGb3JT
Y2FsZUZhY3RvcigpLmltYWdlVVJMOyB9CisgICAgUmVmPENTU0ltYWdlU2V0VmFsdWU+IGltYWdl
U2V0V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlOjpCdWlsZGVyU3RhdGUmKTsKIAogcHJvdGVjdGVk
OgogICAgIEltYWdlV2l0aFNjYWxlIGJlc3RJbWFnZUZvclNjYWxlRmFjdG9yKCk7CiAKIHByaXZh
dGU6Ci0gICAgZXhwbGljaXQgQ1NTSW1hZ2VTZXRWYWx1ZShMb2FkZWRGcm9tT3BhcXVlU291cmNl
KTsKKyAgICBleHBsaWNpdCBDU1NJbWFnZVNldFZhbHVlKCk7CiAKICAgICB2b2lkIGZpbGxJbWFn
ZVNldCgpOwogICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlQnlTY2FsZUZhY3RvcihJbWFn
ZVdpdGhTY2FsZSBmaXJzdCwgSW1hZ2VXaXRoU2NhbGUgc2Vjb25kKSB7IHJldHVybiBmaXJzdC5z
Y2FsZUZhY3RvciA8IHNlY29uZC5zY2FsZUZhY3RvcjsgfQogCi0gICAgQ2FjaGVkUmVzb3VyY2VI
YW5kbGU8Q2FjaGVkSW1hZ2U+IG1fY2FjaGVkSW1hZ2U7CisgICAgQ1NTVmFsdWUqIG1fc2VsZWN0
ZWRJbWFnZVZhbHVlIHsgbnVsbHB0ciB9OwogICAgIGJvb2wgbV9hY2Nlc3NlZEJlc3RGaXRJbWFn
ZSB7IGZhbHNlIH07CiAgICAgZmxvYXQgbV9iZXN0Rml0SW1hZ2VTY2FsZUZhY3RvciB7IDEgfTsK
ICAgICBmbG9hdCBtX2RldmljZVNjYWxlRmFjdG9yIHsgMSB9OwogCiAgICAgVmVjdG9yPEltYWdl
V2l0aFNjYWxlPiBtX2ltYWdlc0luU2V0OwotICAgIExvYWRlZEZyb21PcGFxdWVTb3VyY2UgbV9s
b2FkZWRGcm9tT3BhcXVlU291cmNlIHsgTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6Tm8gfTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjE1MSw3ICsyMTUxLDcgQEAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZQogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUN1cnNvcihDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgYm9vbCBp
blF1aXJrc01vZGUpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdDsKLSAgICB3aGls
ZSAoUmVmUHRyPENTU1ZhbHVlPiBpbWFnZSA9IGNvbnN1bWVJbWFnZShyYW5nZSwgY29udGV4dCwg
Q29uc3VtZUdlbmVyYXRlZEltYWdlOjpGb3JiaWQpKSB7CisgICAgd2hpbGUgKFJlZlB0cjxDU1NW
YWx1ZT4gaW1hZ2UgPSBjb25zdW1lSW1hZ2UocmFuZ2UsIGNvbnRleHQsIEFsbG93ZWRJbWFnZVR5
cGVzOjpVcmxGdW5jdGlvbiB8IEFsbG93ZWRJbWFnZVR5cGVzOjpJbWFnZVNldCkpIHsKICAgICAg
ICAgZG91YmxlIG51bTsKICAgICAgICAgSW50UG9pbnQgaG90U3BvdCgtMSwgLTEpOwogICAgICAg
ICBib29sIGhvdFNwb3RTcGVjaWZpZWQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlz
aW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3OSwyNCArMTQ3OSwxNiBAQCBzdGF0
aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lR2VuZXJhdGVkCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotc3RhdGljIFN0cmluZ1ZpZXcgY29uc3VtZVVybE9yU3RyaW5nQXNTdHJpbmdWaWV3KENT
U1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MpCi17Ci0gICAgaWYgKGFyZ3MucGVlaygpLnR5cGUoKSA9
PSBTdHJpbmdUb2tlbikKLSAgICAgICAgcmV0dXJuIGFyZ3MuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKS52YWx1ZSgpOwotICAgIHJldHVybiBjb25zdW1lVXJsQXNTdHJpbmdWaWV3KGFyZ3Mp
OwotfQotCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2VTZXQoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCitzdGF0
aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2VTZXQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIHVuc2lnbmVkIGFsbG93ZWRJ
bWFnZVR5cGVzKQogewogICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2VDb3B5ID0gcmFuZ2U7
CiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdlQ29w
eSk7Ci0gICAgUmVmUHRyPENTU0ltYWdlU2V0VmFsdWU+IGltYWdlU2V0ID0gQ1NTSW1hZ2VTZXRW
YWx1ZTo6Y3JlYXRlKGNvbnRleHQuaXNDb250ZW50T3BhcXVlID8gTG9hZGVkRnJvbU9wYXF1ZVNv
dXJjZTo6WWVzIDogTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6Tm8pOworICAgIFJlZlB0cjxDU1NJ
bWFnZVNldFZhbHVlPiBpbWFnZVNldCA9IENTU0ltYWdlU2V0VmFsdWU6OmNyZWF0ZSgpOwogICAg
IGRvIHsKLSAgICAgICAgQXRvbVN0cmluZyB1cmxWYWx1ZSA9IGNvbnN1bWVVcmxPclN0cmluZ0Fz
U3RyaW5nVmlldyhhcmdzKS50b0F0b21TdHJpbmcoKTsKLSAgICAgICAgaWYgKHVybFZhbHVlLmlz
TnVsbCgpKQorICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGltYWdlID0gY29uc3VtZUltYWdlKGFy
Z3MsIGNvbnRleHQsIChhbGxvd2VkSW1hZ2VUeXBlcyB8IEFsbG93ZWRJbWFnZVR5cGVzOjpSYXdT
dHJpbmdBc1VybCkgJiAofkFsbG93ZWRJbWFnZVR5cGVzOjpJbWFnZVNldCkpOworICAgICAgICBp
ZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgUmVmUHRy
PENTU1ZhbHVlPiBpbWFnZSA9IENTU0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTChjb250
ZXh0LCB1cmxWYWx1ZSksIGNvbnRleHQuaXNDb250ZW50T3BhcXVlID8gTG9hZGVkRnJvbU9wYXF1
ZVNvdXJjZTo6WWVzIDogTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6Tm8pOwogICAgICAgICBpbWFn
ZVNldC0+YXBwZW5kKGltYWdlLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgICAgIGNvbnN0IENT
U1BhcnNlclRva2VuJiB0b2tlbiA9IGFyZ3MuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsK
QEAgLTE3MTEsMTkgKzE3MDMsMjUgQEAgUmVmUHRyPENTU1NoYWRvd1ZhbHVlPiBjb25zdW1lU2lu
Z2xlU2hhZAogICAgIHJldHVybiBDU1NTaGFkb3dWYWx1ZTo6Y3JlYXRlKFdURk1vdmUoaG9yaXpv
bnRhbE9mZnNldCksIFdURk1vdmUodmVydGljYWxPZmZzZXQpLCBXVEZNb3ZlKGJsdXJSYWRpdXMp
LCBXVEZNb3ZlKHNwcmVhZERpc3RhbmNlKSwgV1RGTW92ZShzdHlsZSksIFdURk1vdmUoY29sb3Ip
KTsKIH0KIAotUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2UoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIENTU1BhcnNlckNvbnRleHQgY29udGV4dCwgQ29uc3VtZUdlbmVyYXRlZEltYWdl
IGdlbmVyYXRlZEltYWdlKQorUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2UoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlckNvbnRleHQgY29udGV4dCwgdW5zaWduZWQgYWxs
b3dlZEltYWdlVHlwZXMpCiB7Ci0gICAgQXRvbVN0cmluZyB1cmkgPSBjb25zdW1lVXJsQXNTdHJp
bmdWaWV3KHJhbmdlKS50b0F0b21TdHJpbmcoKTsKLSAgICBpZiAoIXVyaS5pc051bGwoKSkKLSAg
ICAgICAgcmV0dXJuIENTU0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTChjb250ZXh0LCB1
cmkpLCBjb250ZXh0LmlzQ29udGVudE9wYXF1ZSA/IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6Olll
cyA6IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6Ok5vKTsKKyAgICBpZiAoKHJhbmdlLnBlZWsoKS50
eXBlKCkgPT0gU3RyaW5nVG9rZW4pICYmIChhbGxvd2VkSW1hZ2VUeXBlcyAmIEFsbG93ZWRJbWFn
ZVR5cGVzOjpSYXdTdHJpbmdBc1VybCkpCisgICAgICAgIHJldHVybiBDU1NJbWFnZVZhbHVlOjpj
cmVhdGUoY29tcGxldGVVUkwoY29udGV4dCwgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3Bh
Y2UoKS52YWx1ZSgpLnRvQXRvbVN0cmluZygpKSwgY29udGV4dC5pc0NvbnRlbnRPcGFxdWUgPyBM
b2FkZWRGcm9tT3BhcXVlU291cmNlOjpZZXMgOiBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpObyk7
CiAKICAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKSB7CiAgICAg
ICAgIENTU1ZhbHVlSUQgaWQgPSByYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgpOwotICAgICAgICBp
ZiAoaWQgPT0gQ1NTVmFsdWVXZWJraXRJbWFnZVNldCB8fCBpZCA9PSBDU1NWYWx1ZUltYWdlU2V0
KQotICAgICAgICAgICAgcmV0dXJuIGNvbnN1bWVJbWFnZVNldChyYW5nZSwgY29udGV4dCk7Ci0g
ICAgICAgIGlmIChnZW5lcmF0ZWRJbWFnZSA9PSBDb25zdW1lR2VuZXJhdGVkSW1hZ2U6OkFsbG93
ICYmIGlzR2VuZXJhdGVkSW1hZ2UoaWQpKQorICAgICAgICBpZiAoKGFsbG93ZWRJbWFnZVR5cGVz
ICYgQWxsb3dlZEltYWdlVHlwZXM6OkltYWdlU2V0KSAmJiAoaWQgPT0gQ1NTVmFsdWVXZWJraXRJ
bWFnZVNldCB8fCBpZCA9PSBDU1NWYWx1ZUltYWdlU2V0KSkKKyAgICAgICAgICAgIHJldHVybiBj
b25zdW1lSW1hZ2VTZXQocmFuZ2UsIGNvbnRleHQsIGFsbG93ZWRJbWFnZVR5cGVzKTsKKyAgICAg
ICAgaWYgKChhbGxvd2VkSW1hZ2VUeXBlcyAmIEFsbG93ZWRJbWFnZVR5cGVzOjpHZW5lcmF0ZWRJ
bWFnZSkgJiYgaXNHZW5lcmF0ZWRJbWFnZShpZCkpCiAgICAgICAgICAgICByZXR1cm4gY29uc3Vt
ZUdlbmVyYXRlZEltYWdlKHJhbmdlLCBjb250ZXh0KTsKICAgICB9CisKKyAgICBpZiAoYWxsb3dl
ZEltYWdlVHlwZXMgJiBBbGxvd2VkSW1hZ2VUeXBlczo6VXJsRnVuY3Rpb24pIHsKKyAgICAgICAg
QXRvbVN0cmluZyB1cmkgPSBjb25zdW1lVXJsQXNTdHJpbmdWaWV3KHJhbmdlKS50b0F0b21TdHJp
bmcoKTsKKyAgICAgICAgaWYgKCF1cmkuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gQ1NT
SW1hZ2VWYWx1ZTo6Y3JlYXRlKGNvbXBsZXRlVVJMKGNvbnRleHQsIHVyaSksIGNvbnRleHQuaXND
b250ZW50T3BhcXVlID8gTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6WWVzIDogTG9hZGVkRnJvbU9w
YXF1ZVNvdXJjZTo6Tm8pOworICAgIH0KKwogICAgIHJldHVybiBudWxscHRyOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzLmgJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDEyICs4OSwx
NiBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGlvCiBib29sIGNvbnN1
bWVQb3NpdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NR
dWlyaywgUG9zaXRpb25TeW50YXgsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHJlc3VsdFgs
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHJlc3VsdFkpOwogYm9vbCBjb25zdW1lT25lT3JU
d29WYWx1ZWRQb3NpdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5p
dGxlc3NRdWlyaywgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgcmVzdWx0WCwgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiYgcmVzdWx0WSk7CiAKLWVudW0gY2xhc3MgQ29uc3VtZUdlbmVyYXRl
ZEltYWdlIHsKLSAgICBBbGxvdywKLSAgICBGb3JiaWQKK2VudW0gQWxsb3dlZEltYWdlVHlwZXMg
eworICAgIEZvcmJpZCA9IDAsCisgICAgVXJsRnVuY3Rpb24gPSAxLAorICAgIFJhd1N0cmluZ0Fz
VXJsID0gMiwKKyAgICBJbWFnZVNldCA9IDQsCisgICAgR2VuZXJhdGVkSW1hZ2UgPSA4CiB9Owog
Ci1SZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NT
UGFyc2VyQ29udGV4dCwgQ29uc3VtZUdlbmVyYXRlZEltYWdlID0gQ29uc3VtZUdlbmVyYXRlZElt
YWdlOjpBbGxvdyk7CitSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZShDU1NQYXJzZXJUb2tl
blJhbmdlJiwgQ1NTUGFyc2VyQ29udGV4dCwgdW5zaWduZWQgYWxsb3dlZEltYWdlVHlwZXMgPSBB
bGxvd2VkSW1hZ2VUeXBlczo6VXJsRnVuY3Rpb24gfCBBbGxvd2VkSW1hZ2VUeXBlczo6SW1hZ2VT
ZXQgfCBBbGxvd2VkSW1hZ2VUeXBlczo6R2VuZXJhdGVkSW1hZ2UpOworCiBSZWZQdHI8Q1NTVmFs
dWU+IGNvbnN1bWVJbWFnZU9yTm9uZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyQ29u
dGV4dCk7CiAKIGVudW0gY2xhc3MgQWxsb3dlZEZpbHRlckZ1bmN0aW9ucyB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRp
b24uY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMyw2ICszMzMs
MTEgQEAgc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRGdQogICAgIGlmICgh
ZnJvbSB8fCAhdG8pCiAgICAgICAgIHJldHVybiB0bzsKIAorICAgIGZyb20gPSBmcm9tLT5zZWxl
Y3RlZEltYWdlKCk7CisgICAgdG8gPSB0by0+c2VsZWN0ZWRJbWFnZSgpOworICAgIEFTU0VSVCh0
byk7CisgICAgQVNTRVJUKGZyb20pOworCiAgICAgLy8gQW5pbWF0aW9uIGJldHdlZW4gdHdvIGdl
bmVyYXRlZCBpbWFnZXMuIENyb3NzIGZhZGUgZm9yIGFsbCBvdGhlciBjYXNlcy4KICAgICBpZiAo
aXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0eWxlR2VuZXJhdGVkSW1hZ2U+
KCp0bykpIHsKICAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVyYXRlZCA9
IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCpmcm9tKS5pbWFnZVZhbHVlKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2Miw3ICs5NjIsNyBAQCB2b2lk
IFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllCiAKICAgICAgICAgICAgIGF1dG8g
ZHJhd1Jlc3VsdCA9IGNvbnRleHQuZHJhd1RpbGVkSW1hZ2UoKmltYWdlLCBnZW9tZXRyeS5kZXN0
UmVjdCgpLCB0b0xheW91dFBvaW50KGdlb21ldHJ5LnJlbGF0aXZlUGhhc2UoKSksIGdlb21ldHJ5
LnRpbGVTaXplKCksIGdlb21ldHJ5LnNwYWNlU2l6ZSgpLCBvcHRpb25zKTsKICAgICAgICAgICAg
IGlmIChkcmF3UmVzdWx0ID09IEltYWdlRHJhd1Jlc3VsdDo6RGlkUmVxdWVzdERlY29kaW5nKSB7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGJnSW1hZ2UtPmlzQ2FjaGVkSW1hZ2UoKSk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGJnSW1hZ2UtPmhhc0NhY2hlZEltYWdlKCkpOwogICAgICAgICAg
ICAgICAgIGJnSW1hZ2UtPmNhY2hlZEltYWdlKCktPmFkZENsaWVudFdhaXRpbmdGb3JBc3luY0Rl
Y29kaW5nKCp0aGlzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxl
SW1hZ2UuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3
ICs0NCw3IEBAIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlOjpSZW5kZXJJbWEKIAogdm9p
ZCBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZTo6aW5pdGlhbGl6ZShSZW5kZXJFbGVtZW50
JiByZW5kZXJlcikKIHsKLSAgICBSZW5kZXJJbWFnZVJlc291cmNlOjppbml0aWFsaXplKHJlbmRl
cmVyLCBtX3N0eWxlSW1hZ2UtPmlzQ2FjaGVkSW1hZ2UoKSA/IG1fc3R5bGVJbWFnZS5nZXQoKS5j
YWNoZWRJbWFnZSgpIDogbnVsbHB0cik7CisgICAgUmVuZGVySW1hZ2VSZXNvdXJjZTo6aW5pdGlh
bGl6ZShyZW5kZXJlciwgbV9zdHlsZUltYWdlLT5oYXNDYWNoZWRJbWFnZSgpID8gbV9zdHlsZUlt
YWdlLmdldCgpLmNhY2hlZEltYWdlKCkgOiBudWxscHRyKTsKICAgICBtX3N0eWxlSW1hZ2UtPmFk
ZENsaWVudCh0aGlzLT5yZW5kZXJlcigpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTA3LDcgKzIxMDcsNyBAQCBzdGF0aWMgYm9vbCBjYW5EaXJlY3RseUNvbXBv
c2l0ZUJhY2tncm91CiAKICAgICAvLyBGSVhNRTogc3VwcG9ydCBncmFkaWVudHMgd2l0aCBpc0dl
bmVyYXRlZEltYWdlLgogICAgIGF1dG8qIHN0eWxlSW1hZ2UgPSBmaWxsTGF5ZXIuaW1hZ2UoKTsK
LSAgICBpZiAoIXN0eWxlSW1hZ2UtPmlzQ2FjaGVkSW1hZ2UoKSkKKyAgICBpZiAoIXN0eWxlSW1h
Z2UtPmhhc0NhY2hlZEltYWdlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8q
IGltYWdlID0gc3R5bGVJbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2UoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhcGVWYWx1ZS5jcHAJKHJldmlzaW9uIDI1
NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBib29sIFNoYXBlVmFsdWU6OmlzSW1hZ2VW
YWxpZCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKG1faW1hZ2UtPmlzQ2FjaGVkSW1hZ2UoKSkgeworICAgIGlmIChtX2ltYWdlLT5o
YXNDYWNoZWRJbWFnZSgpKSB7CiAgICAgICAgIGF1dG8qIGNhY2hlZEltYWdlID0gbV9pbWFnZS0+
Y2FjaGVkSW1hZ2UoKTsKICAgICAgICAgcmV0dXJuIGNhY2hlZEltYWdlICYmIGNhY2hlZEltYWdl
LT5oYXNJbWFnZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TdHlsZUNhY2hlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQsOCArMjQsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlN0eWxlQ2FjaGVkSW1hZ2UuaCIKIAotI2luY2x1ZGUgIkNTU0N1cnNvckltYWdlVmFsdWUuaCIK
LSNpbmNsdWRlICJDU1NJbWFnZVNldFZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5o
IgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgpA
QCAtMzMsMTkgKzMxLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU3R5bGVDYWNoZWRJ
bWFnZTo6U3R5bGVDYWNoZWRJbWFnZShDU1NWYWx1ZSYgY3NzVmFsdWUpCitTdHlsZUNhY2hlZElt
YWdlOjpTdHlsZUNhY2hlZEltYWdlKENTU0ltYWdlVmFsdWUmIGNzc1ZhbHVlLCBmbG9hdCBzY2Fs
ZUZhY3RvcikKICAgICA6IG1fY3NzVmFsdWUoY3NzVmFsdWUpCisgICAgLCBtX3NjYWxlRmFjdG9y
KHNjYWxlRmFjdG9yKQogewotICAgIEFTU0VSVChpczxDU1NJbWFnZVZhbHVlPihtX2Nzc1ZhbHVl
KSB8fCBpczxDU1NJbWFnZVNldFZhbHVlPihtX2Nzc1ZhbHVlKSB8fCBpczxDU1NDdXJzb3JJbWFn
ZVZhbHVlPihtX2Nzc1ZhbHVlKSk7Ci0KICAgICBtX2lzQ2FjaGVkSW1hZ2UgPSB0cnVlOwotCi0g
ICAgLy8gQ1NTSW1hZ2VWYWx1ZSBkb2Vzbid0IGdldCBpbnZhbGlkYXRlZCBzbyB3ZSBjYW4gZ3Jh
YiB0aGUgQ2FjaGVkSW1hZ2UgaW1tZWRpYXRlbHkgaWYgaXQgZXhpc3RzLgotICAgIGlmIChpczxD
U1NJbWFnZVZhbHVlPihtX2Nzc1ZhbHVlKSkgewotICAgICAgICBtX2NhY2hlZEltYWdlID0gZG93
bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZS5nZXQoKSkuY2FjaGVkSW1hZ2UoKTsKLSAg
ICAgICAgaWYgKG1fY2FjaGVkSW1hZ2UpCi0gICAgICAgICAgICBtX2lzUGVuZGluZyA9IGZhbHNl
OwotICAgIH0KKyAgICBtX2NhY2hlZEltYWdlID0gbV9jc3NWYWx1ZS0+Y2FjaGVkSW1hZ2UoKTsK
KyAgICBpZiAobV9jYWNoZWRJbWFnZSkKKyAgICAgICAgbV9pc1BlbmRpbmcgPSBmYWxzZTsKIH0K
IAogU3R5bGVDYWNoZWRJbWFnZTo6flN0eWxlQ2FjaGVkSW1hZ2UoKSA9IGRlZmF1bHQ7CkBAIC02
OCw0MSArNjEsMTQgQEAgYm9vbCBTdHlsZUNhY2hlZEltYWdlOjpvcGVyYXRvcj09KGNvbnN0IAog
CiBVUkwgU3R5bGVDYWNoZWRJbWFnZTo6aW1hZ2VVUkwoKQogewotICAgIGlmIChpczxDU1NJbWFn
ZVZhbHVlPihtX2Nzc1ZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ltYWdlVmFs
dWU+KG1fY3NzVmFsdWUuZ2V0KCkpLnVybCgpOwotCi0gICAgaWYgKGlzPENTU0ltYWdlU2V0VmFs
dWU+KG1fY3NzVmFsdWUpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1
ZT4obV9jc3NWYWx1ZS5nZXQoKSkuYmVzdEltYWdlRm9yU2NhbGVGYWN0b3JVUkwoKTsKLQotICAg
IGlmIChpczxDU1NDdXJzb3JJbWFnZVZhbHVlPihtX2Nzc1ZhbHVlLmdldCgpKSkKLSAgICAgICAg
cmV0dXJuIGRvd25jYXN0PENTU0N1cnNvckltYWdlVmFsdWU+KG1fY3NzVmFsdWUuZ2V0KCkpLmlt
YWdlVVJMKCk7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9Owor
ICAgIHJldHVybiBtX2Nzc1ZhbHVlLT51cmwoKTsKIH0KIAogdm9pZCBTdHlsZUNhY2hlZEltYWdl
Ojpsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyJiBsb2FkZXIsIGNvbnN0IFJlc291cmNlTG9hZGVy
T3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBBU1NFUlQobV9pc1BlbmRpbmcpOwogICAgIG1faXNQ
ZW5kaW5nID0gZmFsc2U7Ci0KLSAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZSkp
IHsKLSAgICAgICAgYXV0byYgaW1hZ2VWYWx1ZSA9IGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KG1f
Y3NzVmFsdWUuZ2V0KCkpOwotICAgICAgICBtX2NhY2hlZEltYWdlID0gaW1hZ2VWYWx1ZS5sb2Fk
SW1hZ2UobG9hZGVyLCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChpczxDU1NJbWFnZVNldFZhbHVlPihtX2Nzc1ZhbHVlKSkgewotICAgICAgICBhdXRvJiBpbWFn
ZVNldFZhbHVlID0gZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4obV9jc3NWYWx1ZS5nZXQoKSk7
Ci0gICAgICAgIHN0ZDo6dGllKG1fY2FjaGVkSW1hZ2UsIG1fc2NhbGVGYWN0b3IpID0gaW1hZ2VT
ZXRWYWx1ZS5sb2FkQmVzdEZpdEltYWdlKGxvYWRlciwgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoaXM8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZS5n
ZXQoKSkpIHsKLSAgICAgICAgYXV0byYgY3Vyc29yVmFsdWUgPSBkb3duY2FzdDxDU1NDdXJzb3JJ
bWFnZVZhbHVlPihtX2Nzc1ZhbHVlLmdldCgpKTsKLSAgICAgICAgc3RkOjp0aWUobV9jYWNoZWRJ
bWFnZSwgbV9zY2FsZUZhY3RvcikgPSBjdXJzb3JWYWx1ZS5sb2FkSW1hZ2UobG9hZGVyLCBvcHRp
b25zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBtX2NhY2hlZEltYWdlID0gbV9jc3NW
YWx1ZS0+bG9hZEltYWdlKGxvYWRlciwgb3B0aW9ucyk7CiB9CiAKIENhY2hlZEltYWdlKiBTdHls
ZUNhY2hlZEltYWdlOjpjYWNoZWRJbWFnZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmgJKHJldmlzaW9uIDI1NDgw
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDEzICsyOSwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBDU1NWYWx1ZTsKK2NsYXNzIENTU0ltYWdlVmFsdWU7CiBjbGFzcyBDYWNoZWRJbWFn
ZTsKIGNsYXNzIERvY3VtZW50OwogCiBjbGFzcyBTdHlsZUNhY2hlZEltYWdlIGZpbmFsIDogcHVi
bGljIFN0eWxlSW1hZ2UgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8U3R5bGVDYWNoZWRJbWFnZT4gY3JlYXRlKENTU1ZhbHVlJiBjc3NWYWx1
ZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHlsZUNhY2hlZEltYWdlKGNzc1ZhbHVlKSk7IH0K
KyAgICBzdGF0aWMgUmVmPFN0eWxlQ2FjaGVkSW1hZ2U+IGNyZWF0ZShDU1NJbWFnZVZhbHVlJiBj
c3NWYWx1ZSwgZmxvYXQgc2NhbGVGYWN0b3IgPSAxKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFN0
eWxlQ2FjaGVkSW1hZ2UoY3NzVmFsdWUsIHNjYWxlRmFjdG9yKSk7IH0KICAgICB2aXJ0dWFsIH5T
dHlsZUNhY2hlZEltYWdlKCk7CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVJbWFn
ZSYgb3RoZXIpIGNvbnN0IGZpbmFsOwpAQCAtNjQsMTAgKzY1LDEwIEBAIHB1YmxpYzoKICAgICBi
b29sIGtub3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJFbGVtZW50KikgY29uc3QgZmluYWw7CiAK
IHByaXZhdGU6Ci0gICAgU3R5bGVDYWNoZWRJbWFnZShDU1NWYWx1ZSYpOworICAgIFN0eWxlQ2Fj
aGVkSW1hZ2UoQ1NTSW1hZ2VWYWx1ZSYsIGZsb2F0KTsKICAgICBVUkwgaW1hZ2VVUkwoKTsKIAot
ICAgIFJlZjxDU1NWYWx1ZT4gbV9jc3NWYWx1ZTsKKyAgICBSZWY8Q1NTSW1hZ2VWYWx1ZT4gbV9j
c3NWYWx1ZTsKICAgICBib29sIG1faXNQZW5kaW5nIHsgdHJ1ZSB9OwogICAgIG11dGFibGUgZmxv
YXQgbV9zY2FsZUZhY3RvciB7IDEgfTsKICAgICBtdXRhYmxlIENhY2hlZFJlc291cmNlSGFuZGxl
PENhY2hlZEltYWdlPiBtX2NhY2hlZEltYWdlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1cnNvckltYWdlLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtv
aXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVl
bGxlciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LTIwMDgs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlN0eWxlQ3Vyc29ySW1hZ2UuaCIKKworI2luY2x1ZGUgIkNTU0N1cnNv
ckltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkZsb2F0
U2l6ZS5oIgorI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitib29sIFN0eWxlQ3Vyc29ySW1hZ2U6Om9wZXJhdG9yPT0oY29uc3QgU3R5bGVJbWFnZSYg
b3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFpczxTdHlsZUN1cnNvckltYWdlPihvdGhlcikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBlcXVhbHMoZG93bmNhc3Q8U3R5bGVD
dXJzb3JJbWFnZT4ob3RoZXIpKTsKK30KKworUmVmPENTU1ZhbHVlPiBTdHlsZUN1cnNvckltYWdl
Ojpjc3NWYWx1ZSgpIGNvbnN0Cit7IAorICAgIHJldHVybiBtX2Nzc1ZhbHVlLmNvcHlSZWYoKTsg
Cit9CisKK1N0eWxlQ3Vyc29ySW1hZ2U6OlN0eWxlQ3Vyc29ySW1hZ2UoQ1NTQ3Vyc29ySW1hZ2VW
YWx1ZSYgY3NzVmFsdWUpCisgICAgOiBtX2Nzc1ZhbHVlKGNzc1ZhbHVlKQoreworICAgIG1faXND
dXJzb3JJbWFnZSA9IHRydWU7Cit9CisKK1N0eWxlQ3Vyc29ySW1hZ2U6On5TdHlsZUN1cnNvcklt
YWdlKCkgPSBkZWZhdWx0OworCitzdGQ6OnBhaXI8Q1NTVmFsdWUqLCBmbG9hdD4gU3R5bGVDdXJz
b3JJbWFnZTo6c2VsZWN0QmVzdEZpdEltYWdlKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9jc3NWYWx1ZS0+c2VsZWN0QmVzdEZpdEltYWdlKGRvY3VtZW50
KTsKK30KKwordm9pZCBTdHlsZUN1cnNvckltYWdlOjpzZXRDb250YWluZXJDb250ZXh0Rm9yUmVu
ZGVyZXIoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6ZSYgY29u
dGFpbmVyU2l6ZSwgZmxvYXQgY29udGFpbmVyWm9vbSkKK3sKKyAgICBpZiAoIWhhc0NhY2hlZElt
YWdlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjYWNoZWRJbWFnZSgpLT5zZXRDb250YWluZXJD
b250ZXh0Rm9yQ2xpZW50KHJlbmRlcmVyLCBMYXlvdXRTaXplKGNvbnRhaW5lclNpemUpLCBjb250
YWluZXJab29tLCBtX2Nzc1ZhbHVlLT5pbWFnZVVSTCgpKTsKK30KKworfQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2Uu
Y3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1cnNvckltYWdlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAo
bXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJTdHlsZU11bHRp
SW1hZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NDdXJzb3JJbWFnZVZh
bHVlOworY2xhc3MgQ2FjaGVkSW1hZ2U7CitjbGFzcyBEb2N1bWVudDsKKworY2xhc3MgU3R5bGVD
dXJzb3JJbWFnZSBmaW5hbCA6IHB1YmxpYyBTdHlsZU11bHRpSW1hZ2UgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U3R5bGVDdXJzb3JJbWFn
ZT4gY3JlYXRlKENTU0N1cnNvckltYWdlVmFsdWUmIGNzc1ZhbHVlKSB7IHJldHVybiBhZG9wdFJl
ZigqbmV3IFN0eWxlQ3Vyc29ySW1hZ2UoY3NzVmFsdWUpKTsgfQorICAgIHZpcnR1YWwgflN0eWxl
Q3Vyc29ySW1hZ2UoKTsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVJbWFnZSYgb3Ro
ZXIpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBzZXRDb250YWluZXJDb250ZXh0Rm9y
UmVuZGVyZXIoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6ZSYg
Y29udGFpbmVyU2l6ZSwgZmxvYXQgY29udGFpbmVyWm9vbSkgZmluYWw7CisgICAgUmVmPENTU1Zh
bHVlPiBjc3NWYWx1ZSgpIGNvbnN0IGZpbmFsOworICAgIHN0ZDo6cGFpcjxDU1NWYWx1ZSosIGZs
b2F0PiBzZWxlY3RCZXN0Rml0SW1hZ2UoY29uc3QgRG9jdW1lbnQmKSBjb25zdCBmaW5hbDsKKwor
cHJpdmF0ZToKKyAgICBTdHlsZUN1cnNvckltYWdlKENTU0N1cnNvckltYWdlVmFsdWUmKTsKKyAg
ICBSZWY8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4gbV9jc3NWYWx1ZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19TVFlMRV9JTUFHRShTdHlsZUN1
cnNvckltYWdlLCBpc0N1cnNvckltYWdlKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuaApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1h
Z2UuaAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTggKzY3LDI4IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGZsb2F0IGltYWdlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiAxOyB9
CiAgICAgdmlydHVhbCBib29sIGtub3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJFbGVtZW50Kikg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3Qg
eyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgU3R5bGVJbWFnZSogc2VsZWN0ZWRJbWFnZSgpIHsg
cmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFN0eWxlSW1hZ2UqIHNlbGVjdGVkSW1h
Z2UoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXND
YWNoZWRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDYWNoZWRJbWFnZTsgfQogICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCBpc0dlbmVyYXRlZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pc0dlbmVy
YXRlZEltYWdlOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ3Vyc29ySW1hZ2UoKSBjb25z
dCB7IHJldHVybiBtX2lzQ3Vyc29ySW1hZ2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNJ
bWFnZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJbWFnZVNldDsgfQorCisgICAgYm9vbCBoYXND
YWNoZWRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDYWNoZWRJbWFnZSB8fCBzZWxlY3RlZElt
YWdlKCktPmlzQ2FjaGVkSW1hZ2UoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgU3R5bGVJbWFnZSgp
CiAgICAgICAgIDogbV9pc0NhY2hlZEltYWdlKGZhbHNlKQogICAgICAgICAsIG1faXNHZW5lcmF0
ZWRJbWFnZShmYWxzZSkKKyAgICAgICAgLCBtX2lzSW1hZ2VTZXQoZmFsc2UpCisgICAgICAgICwg
bV9pc0N1cnNvckltYWdlKGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgYm9vbCBtX2lzQ2FjaGVk
SW1hZ2UgOiAxOwogICAgIGJvb2wgbV9pc0dlbmVyYXRlZEltYWdlIDogMTsKKyAgICBib29sIG1f
aXNJbWFnZVNldCA6IDE7CisgICAgYm9vbCBtX2lzQ3Vyc29ySW1hZ2UgOiAxOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlSW1hZ2VTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZUltYWdlU2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0Br
ZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUu
b3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LTIwMDgsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIE5vYW0gUm9zZW50aGFs
IChub2FtQHdlYmtpdC5vcmcpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3R5
bGVJbWFnZVNldC5oIgorCisjaW5jbHVkZSAiQ1NTSW1hZ2VTZXRWYWx1ZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKworU3R5bGVJbWFnZVNldDo6U3R5bGVJbWFnZVNldChDU1NJbWFnZVNl
dFZhbHVlJiBjc3NWYWx1ZSkKKyAgICA6IG1fY3NzVmFsdWUoY3NzVmFsdWUpCit7CisgICAgbV9p
c0ltYWdlU2V0ID0gdHJ1ZTsKK30KKworYm9vbCBTdHlsZUltYWdlU2V0OjpvcGVyYXRvcj09KGNv
bnN0IFN0eWxlSW1hZ2UmIG90aGVyKSBjb25zdAoreworICAgIGlmICghaXM8U3R5bGVJbWFnZVNl
dD4ob3RoZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZXF1YWxzKGRv
d25jYXN0PFN0eWxlSW1hZ2VTZXQ+KG90aGVyKSk7Cit9CitTdHlsZUltYWdlU2V0Ojp+U3R5bGVJ
bWFnZVNldCgpID0gZGVmYXVsdDsKKworUmVmPENTU1ZhbHVlPiBTdHlsZUltYWdlU2V0Ojpjc3NW
YWx1ZSgpIGNvbnN0Cit7IAorICAgIHJldHVybiBtX2Nzc1ZhbHVlLmNvcHlSZWYoKTsgCit9CisK
K3N0ZDo6cGFpcjxDU1NWYWx1ZSosIGZsb2F0PiBTdHlsZUltYWdlU2V0OjpzZWxlY3RCZXN0Rml0
SW1hZ2UoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KSBjb25zdAoreworICAgIHJldHVybiBtX2Nz
c1ZhbHVlLT5zZWxlY3RCZXN0Rml0SW1hZ2UoZG9jdW1lbnQpOworfQorCit9CgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNldC5j
cHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU3R5bGVJbWFnZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TdHlsZUltYWdlU2V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDUzIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKKyogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0Br
ZGUub3JnKQorKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCisqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqIENvcHlyaWdodCAoQykgMjAyMCBOb2FtIFJvc2Vu
dGhhbCAobm9hbUB3ZWJraXQub3JnKQorKgorKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisqCisqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyoKKyogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyoKKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU3R5bGVNdWx0aUltYWdlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTVmFsdWU7CitjbGFzcyBDU1NJbWFnZVNl
dFZhbHVlOworY2xhc3MgRG9jdW1lbnQ7CisKK2NsYXNzIFN0eWxlSW1hZ2VTZXQgZmluYWwgOiBw
dWJsaWMgU3R5bGVNdWx0aUltYWdlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPFN0eWxlSW1hZ2VTZXQ+IGNyZWF0ZShDU1NJbWFnZVNldFZh
bHVlJiBjc3NWYWx1ZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHlsZUltYWdlU2V0KGNzc1Zh
bHVlKSk7IH0KKyAgICB2aXJ0dWFsIH5TdHlsZUltYWdlU2V0KCk7CisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFN0eWxlSW1hZ2UmIG90aGVyKSBjb25zdDsKKyAgICBSZWY8Q1NTVmFsdWU+IGNz
c1ZhbHVlKCkgY29uc3QgZmluYWw7CisKK3Byb3RlY3RlZDoKKyAgICBzdGQ6OnBhaXI8Q1NTVmFs
dWUqLCBmbG9hdD4gc2VsZWN0QmVzdEZpdEltYWdlKGNvbnN0IERvY3VtZW50JikgY29uc3QgZmlu
YWw7CisgICAgCitwcml2YXRlOgorICAgIFN0eWxlSW1hZ2VTZXQoQ1NTSW1hZ2VTZXRWYWx1ZSYp
OworICAgIFJlZjxDU1NJbWFnZVNldFZhbHVlPiBtX2Nzc1ZhbHVlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1NUWUxFX0lNQUdFKFN0eWxl
SW1hZ2VTZXQsIGlzSW1hZ2VTZXQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNldC5oCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpl
eGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVs
dGlJbWFnZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1N0eWxlTXVsdGlJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAq
ICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAq
ICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNS0yMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBOb2FtIFJvc2VudGhhbCAobm9hbUB3ZWJr
aXQub3JnKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0eWxlTXVsdGlJbWFn
ZS5oIgorCisjaW5jbHVkZSAiQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oIgorI2luY2x1ZGUgIkNT
U0ltYWdlU2V0VmFsdWUuaCIKKyNpbmNsdWRlICJDU1NJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAi
Q2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1
ZGUgIlJlbmRlckVsZW1lbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAi
U3R5bGVDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlR2VuZXJhdGVkSW1hZ2UuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitTdHlsZU11bHRpSW1hZ2U6OlN0eWxlTXVsdGlJbWFnZSgp
Cit7Cit9CisKK1N0eWxlTXVsdGlJbWFnZTo6flN0eWxlTXVsdGlJbWFnZSgpID0gZGVmYXVsdDsK
KworYm9vbCBTdHlsZU11bHRpSW1hZ2U6OmVxdWFscyhjb25zdCBTdHlsZU11bHRpSW1hZ2UmIG90
aGVyKSBjb25zdAoreworICAgIGF1dG8mIG90aGVyQ2FjaGVkID0gZG93bmNhc3Q8U3R5bGVNdWx0
aUltYWdlPihvdGhlcik7CisgICAgaWYgKCZvdGhlckNhY2hlZCA9PSB0aGlzKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIW1faXNQZW5kaW5nICYmICFvdGhlckNhY2hlZC5tX2lzUGVu
ZGluZyAmJiBtX3NlbGVjdGVkSW1hZ2UuZ2V0KCkgPT0gb3RoZXJDYWNoZWQubV9zZWxlY3RlZElt
YWdlLmdldCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgU3R5bGVNdWx0aUltYWdlOjpsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyJiBsb2FkZXIs
IGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBBU1NFUlQobV9p
c1BlbmRpbmcpOworICAgIEFTU0VSVChsb2FkZXIuZG9jdW1lbnQoKSk7CisKKyAgICBtX2lzUGVu
ZGluZyA9IGZhbHNlOworICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG51bGxwdHI7CisgICAgZmxvYXQg
c2NhbGVGYWN0b3IgPSAxOworICAgIHN0ZDo6dGllKHZhbHVlLCBzY2FsZUZhY3RvcikgPSBzZWxl
Y3RCZXN0Rml0SW1hZ2UoKmxvYWRlci5kb2N1bWVudCgpKTsKKyAgICBBU1NFUlQoaXM8Q1NTSW1h
Z2VWYWx1ZT4odmFsdWUpIHx8IGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHZhbHVlKSk7CisK
KyAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKSB7CisgICAgICAgIG1f
c2VsZWN0ZWRJbWFnZSA9IFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlPigqdmFsdWUpKTsKKyAgICAgICAgbV9zZWxlY3RlZEltYWdlLT5s
b2FkKGxvYWRlciwgb3B0aW9ucyk7CisgICAgfQorICAgIAorICAgIGlmIChpczxDU1NJbWFnZVZh
bHVlPih2YWx1ZSkpIHsKKyAgICAgICAgbV9zZWxlY3RlZEltYWdlID0gU3R5bGVDYWNoZWRJbWFn
ZTo6Y3JlYXRlKGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KCp2YWx1ZSksIHNjYWxlRmFjdG9yKTsK
KyAgICAgICAgaWYgKG1fc2VsZWN0ZWRJbWFnZS0+aXNQZW5kaW5nKCkpCisgICAgICAgICAgICBt
X3NlbGVjdGVkSW1hZ2UtPmxvYWQobG9hZGVyLCBvcHRpb25zKTsKKyAgICB9Cit9CisKK0NhY2hl
ZEltYWdlKiBTdHlsZU11bHRpSW1hZ2U6OmNhY2hlZEltYWdlKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1f
c2VsZWN0ZWRJbWFnZS0+Y2FjaGVkSW1hZ2UoKTsKK30KKworV3JhcHBlZEltYWdlUHRyIFN0eWxl
TXVsdGlJbWFnZTo6ZGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3NlbGVjdGVkSW1hZ2UpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UtPmRhdGEo
KTsKK30KKworYm9vbCBTdHlsZU11bHRpSW1hZ2U6OmNhblJlbmRlcihjb25zdCBSZW5kZXJFbGVt
ZW50KiByZW5kZXJlciwgZmxvYXQgbXVsdGlwbGllcikgY29uc3QKK3sKKyAgICBpZiAoIW1fc2Vs
ZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3NlbGVjdGVk
SW1hZ2UtPmNhblJlbmRlcihyZW5kZXJlciwgbXVsdGlwbGllcik7Cit9CisKK2Jvb2wgU3R5bGVN
dWx0aUltYWdlOjppc1BlbmRpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2lzUGVuZGluZzsK
K30KKworYm9vbCBTdHlsZU11bHRpSW1hZ2U6OmlzTG9hZGVkKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3Nl
bGVjdGVkSW1hZ2UtPmlzTG9hZGVkKCk7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjplcnJv
ck9jY3VycmVkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UtPmVycm9yT2NjdXJyZWQo
KTsKK30KKworRmxvYXRTaXplIFN0eWxlTXVsdGlJbWFnZTo6aW1hZ2VTaXplKGNvbnN0IFJlbmRl
ckVsZW1lbnQqIHJlbmRlcmVyLCBmbG9hdCBtdWx0aXBsaWVyKSBjb25zdAoreworICAgIGlmICgh
bV9zZWxlY3RlZEltYWdlKQorICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBtX3NlbGVj
dGVkSW1hZ2UtPmltYWdlU2l6ZShyZW5kZXJlciwgbXVsdGlwbGllcik7Cit9CisKK2Jvb2wgU3R5
bGVNdWx0aUltYWdlOjppbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdAoreworICAgIGlmICgh
bV9zZWxlY3RlZEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fc2Vs
ZWN0ZWRJbWFnZS0+aW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCk7Cit9CisKK2Jvb2wgU3R5bGVNdWx0
aUltYWdlOjppbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2Vs
ZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3NlbGVjdGVk
SW1hZ2UtPmltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKTsKK30KKwordm9pZCBTdHlsZU11bHRpSW1h
Z2U6OmNvbXB1dGVJbnRyaW5zaWNEaW1lbnNpb25zKGNvbnN0IFJlbmRlckVsZW1lbnQqIGVsZW1l
bnQsIExlbmd0aCYgaW50cmluc2ljV2lkdGgsIExlbmd0aCYgaW50cmluc2ljSGVpZ2h0LCBGbG9h
dFNpemUmIGludHJpbnNpY1JhdGlvKQoreworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQorICAg
ICAgICByZXR1cm47CisgICAgbV9zZWxlY3RlZEltYWdlLT5jb21wdXRlSW50cmluc2ljRGltZW5z
aW9ucyhlbGVtZW50LCBpbnRyaW5zaWNXaWR0aCwgaW50cmluc2ljSGVpZ2h0LCBpbnRyaW5zaWNS
YXRpbyk7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjp1c2VzSW1hZ2VDb250YWluZXJTaXpl
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UtPnVzZXNJbWFnZUNvbnRhaW5lclNpemUo
KTsKK30KKwordm9pZCBTdHlsZU11bHRpSW1hZ2U6OnNldENvbnRhaW5lckNvbnRleHRGb3JSZW5k
ZXJlcihjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmxvYXRTaXplJiBjb250
YWluZXJTaXplLCBmbG9hdCBjb250YWluZXJab29tKQoreworICAgIGlmICghbV9zZWxlY3RlZElt
YWdlKQorICAgICAgICByZXR1cm47CisgICAgbV9zZWxlY3RlZEltYWdlLT5zZXRDb250YWluZXJD
b250ZXh0Rm9yUmVuZGVyZXIocmVuZGVyZXIsIGNvbnRhaW5lclNpemUsIGNvbnRhaW5lclpvb20p
OworfQorCit2b2lkIFN0eWxlTXVsdGlJbWFnZTo6YWRkQ2xpZW50KFJlbmRlckVsZW1lbnQqIHJl
bmRlcmVyKQoreworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9zZWxlY3RlZEltYWdlLT5hZGRDbGllbnQocmVuZGVyZXIpOworfQorCit2b2lkIFN0eWxl
TXVsdGlJbWFnZTo6cmVtb3ZlQ2xpZW50KFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyKQoreworICAg
IGlmICghbV9zZWxlY3RlZEltYWdlKQorICAgICAgICByZXR1cm47CisgICAgbV9zZWxlY3RlZElt
YWdlLT5yZW1vdmVDbGllbnQocmVuZGVyZXIpOworfQorCitSZWZQdHI8SW1hZ2U+IFN0eWxlTXVs
dGlJbWFnZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgcmV0dXJuIG1fc2VsZWN0ZWRJbWFnZS0+aW1hZ2UocmVuZGVyZXIsIHNp
emUpOworfQorCitmbG9hdCBTdHlsZU11bHRpSW1hZ2U6OmltYWdlU2NhbGVGYWN0b3IoKSBjb25z
dAoreworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQorICAgICAgICByZXR1cm4gMTsKKyAgICBy
ZXR1cm4gbV9zZWxlY3RlZEltYWdlLT5pbWFnZVNjYWxlRmFjdG9yKCk7Cit9CisKK2Jvb2wgU3R5
bGVNdWx0aUltYWdlOjprbm93blRvQmVPcGFxdWUoY29uc3QgUmVuZGVyRWxlbWVudCogcmVuZGVy
ZXIpIGNvbnN0Cit7CisgICAgaWYgKCFtX3NlbGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlLT5rbm93blRvQmVPcGFxdWUocmVuZGVy
ZXIpOworfQorCit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU3R5bGVNdWx0aUltYWdlLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0
YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZU11bHRpSW1hZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUltYWdl
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxl
TXVsdGlJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisqIENvcHly
aWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorKiAgICAgICAgICAgKEMp
IDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisqICAgICAgICAgICAoQykg
MjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyogQ29weXJpZ2h0IChDKSAyMDIwIE5vYW0gUm9zZW50aGFsIChub2FtQHdlYmtpdC5vcmcpCisq
CisqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyoKKyogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorKgorKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKgorKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlN0eWxlSW1hZ2Uu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NWYWx1ZTsKK2NsYXNzIENTU0lt
YWdlU2V0VmFsdWU7CitjbGFzcyBDYWNoZWRJbWFnZTsKK2NsYXNzIERvY3VtZW50OworCitjbGFz
cyBTdHlsZU11bHRpSW1hZ2UgOiBwdWJsaWMgU3R5bGVJbWFnZSB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdmlydHVhbCB+U3R5bGVNdWx0aUltYWdlKCk7CisK
KyAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UoKSBjb25zdCBmaW5hbDsKKworICAgIFdyYXBw
ZWRJbWFnZVB0ciBkYXRhKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIGNhblJlbmRlcihjb25z
dCBSZW5kZXJFbGVtZW50KiwgZmxvYXQgbXVsdGlwbGllcikgY29uc3QgZmluYWw7CisgICAgYm9v
bCBpc1BlbmRpbmcoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGxvYWQoQ2FjaGVkUmVzb3VyY2VM
b2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKSBmaW5hbDsKKyAgICBib29sIGlz
TG9hZGVkKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBlcnJvck9jY3VycmVkKCkgY29uc3QgZmlu
YWw7CisgICAgRmxvYXRTaXplIGltYWdlU2l6ZShjb25zdCBSZW5kZXJFbGVtZW50KiwgZmxvYXQg
bXVsdGlwbGllcikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgo
KSBjb25zdCBmaW5hbDsKKyAgICBib29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdCBm
aW5hbDsKKyAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNEaW1lbnNpb25zKGNvbnN0IFJlbmRlckVs
ZW1lbnQqLCBMZW5ndGgmIGludHJpbnNpY1dpZHRoLCBMZW5ndGgmIGludHJpbnNpY0hlaWdodCwg
RmxvYXRTaXplJiBpbnRyaW5zaWNSYXRpbykgZmluYWw7CisgICAgYm9vbCB1c2VzSW1hZ2VDb250
YWluZXJTaXplKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBzZXRDb250YWluZXJDb250ZXh0Rm9y
UmVuZGVyZXIoY29uc3QgUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0KTsK
KyAgICB2b2lkIGFkZENsaWVudChSZW5kZXJFbGVtZW50KikgZmluYWw7CisgICAgdm9pZCByZW1v
dmVDbGllbnQoUmVuZGVyRWxlbWVudCopIGZpbmFsOworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2Uo
UmVuZGVyRWxlbWVudCosIGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0IGZpbmFsOworICAgIGZsb2F0
IGltYWdlU2NhbGVGYWN0b3IoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGtub3duVG9CZU9wYXF1
ZShjb25zdCBSZW5kZXJFbGVtZW50KikgY29uc3QgZmluYWw7CisgICAgY29uc3QgU3R5bGVJbWFn
ZSogc2VsZWN0ZWRJbWFnZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2VsZWN0ZWRJbWFnZS5n
ZXQoKTsgfQorICAgIFN0eWxlSW1hZ2UqIHNlbGVjdGVkSW1hZ2UoKSBmaW5hbCB7IHJldHVybiBt
X3NlbGVjdGVkSW1hZ2UuZ2V0KCk7IH0KKworcHJvdGVjdGVkOgorICAgIFN0eWxlTXVsdGlJbWFn
ZSgpOworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFN0eWxlTXVsdGlJbWFnZSYgb3RoZXIpIGNvbnN0
OworICAgIHZpcnR1YWwgc3RkOjpwYWlyPENTU1ZhbHVlKiwgZmxvYXQ+IHNlbGVjdEJlc3RGaXRJ
bWFnZShjb25zdCBEb2N1bWVudCYpIGNvbnN0ID0gMDsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8
U3R5bGVJbWFnZT4gbV9zZWxlY3RlZEltYWdlOworICAgIGJvb2wgbV9pc1BlbmRpbmcgeyB0cnVl
IH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUltYWdlLmgKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJD
dXN0b20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJD
dXN0b20uaAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVC
dWlsZGVyQ3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDEwIEBACiAjaW5jbHVk
ZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCIK
ICNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVDdXJzb3JJbWFn
ZS5oIgogI2luY2x1ZGUgIlN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJTdHls
ZUdlbmVyYXRlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVJbWFnZVNldC5oIgogI2luY2x1ZGUg
IlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJXaWxsQ2hhbmdlRGF0YS5oIgogCkBAIC0xMzI0
LDEzICsxMzI2LDE1IEBAIGlubGluZSB2b2lkIEJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb24K
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5z
ZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdl
bmVyYXRvclZhbHVlPihpdGVtLmdldCgpKSksIGRpZFNldCk7CiAgICAgICAgICAgICBkaWRTZXQg
PSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KGl0ZW0pKSB7
Ci0gICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxlQ2FjaGVk
SW1hZ2U6OmNyZWF0ZShpdGVtKSwgZGlkU2V0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KGl0ZW0pKSB7CisgICAgICAgICAgICBidWlsZGVy
U3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxlSW1hZ2VTZXQ6OmNyZWF0ZShkb3duY2FzdDxD
U1NJbWFnZVNldFZhbHVlPihpdGVtLmdldCgpKS5pbWFnZVNldFdpdGhTdHlsZXNSZXNvbHZlZChi
dWlsZGVyU3RhdGUpKSwgZGlkU2V0KTsKICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oaXRlbSkpIHsKLSAgICAgICAg
ICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnQoU3R5bGVDYWNoZWRJbWFnZTo6Y3Jl
YXRlKGl0ZW0pLCBkaWRTZXQpOworICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0
Q29udGVudChTdHlsZUNhY2hlZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4o
aXRlbS5nZXQoKSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZUJ1aWxkZXJTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVCdWlsZGVyU3RhdGUuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1
LDEwIEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIK
ICNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVDdXJzb3JJbWFn
ZS5oIgogI2luY2x1ZGUgIlN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJTdHls
ZUdlbmVyYXRlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVJbWFnZVNldC5oIgogI2luY2x1ZGUg
IlRyYW5zZm9ybUZ1bmN0aW9ucy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03OSwyMSAr
ODEsMzMgQEAgYm9vbCBCdWlsZGVyU3RhdGU6OnVzZVNWR1pvb21SdWxlc0ZvckxlbgogICAgIHJl
dHVybiBpczxTVkdFbGVtZW50PihlbGVtZW50KCkpICYmICEoaXM8U1ZHU1ZHRWxlbWVudD4oKmVs
ZW1lbnQoKSkgJiYgZWxlbWVudCgpLT5wYXJlbnROb2RlKCkpOwogfQogCitSZWY8Q1NTVmFsdWU+
IEJ1aWxkZXJTdGF0ZTo6cmVzb2x2ZUltYWdlU3R5bGVzKENTU1ZhbHVlJiB2YWx1ZSkKK3sKKyAg
ICBpZiAoaXM8Q1NTR3JhZGllbnRWYWx1ZT4odmFsdWUpKQorICAgICAgICByZXR1cm4gZG93bmNh
c3Q8Q1NTR3JhZGllbnRWYWx1ZT4odmFsdWUpLmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKCp0
aGlzKTsKKworICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPih2YWx1ZSkpCisgICAgICAg
IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHZhbHVlKS5jcmVhdGVGaWx0ZXJPcGVyYXRp
b25zKCp0aGlzKTsKKworICAgIGlmIChpczxDU1NJbWFnZVNldFZhbHVlPih2YWx1ZSkpCisgICAg
ICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPih2YWx1ZSkuaW1hZ2VTZXRXaXRo
U3R5bGVzUmVzb2x2ZWQoKnRoaXMpOworCisgICAgcmV0dXJuIG1ha2VSZWYodmFsdWUpOworfQor
CiBSZWZQdHI8U3R5bGVJbWFnZT4gQnVpbGRlclN0YXRlOjpjcmVhdGVTdHlsZUltYWdlKENTU1Zh
bHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUp
KSB7Ci0gICAgICAgIGlmIChpczxDU1NHcmFkaWVudFZhbHVlPih2YWx1ZSkpCi0gICAgICAgICAg
ICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0PENTU0dyYWRpZW50
VmFsdWU+KHZhbHVlKS5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCgqdGhpcykpOwotCi0gICAg
ICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPih2YWx1ZSkpIHsKLSAgICAgICAgICAgIC8v
IEZpbHRlckltYWdlIG5lZWRzIHRvIGNhbGN1bGF0ZSBGaWx0ZXJPcGVyYXRpb25zLgotICAgICAg
ICAgICAgZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpLmNyZWF0ZUZpbHRlck9w
ZXJhdGlvbnMoKnRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTdHlsZUdlbmVyYXRl
ZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKTsK
LSAgICB9CisgICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJu
IFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZVZhbHVlPih2YWx1ZSkp
OworCisgICAgaWYgKGlzPENTU0N1cnNvckltYWdlVmFsdWU+KHZhbHVlKSkKKyAgICAgICAgcmV0
dXJuIFN0eWxlQ3Vyc29ySW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVl
Pih2YWx1ZSkpOwogCi0gICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KHZhbHVlKSB8fCBpczxDU1NJ
bWFnZVNldFZhbHVlPih2YWx1ZSkgfHwgaXM8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4odmFsdWUpKQot
ICAgICAgICByZXR1cm4gU3R5bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKKyAgICBpZiAo
aXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKQorICAgICAgICByZXR1cm4gU3R5bGVH
ZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHJl
c29sdmVJbWFnZVN0eWxlcyh2YWx1ZSkuZ2V0KCkpKTsKKyAgICAKKyAgICBpZiAoaXM8Q1NTSW1h
Z2VTZXRWYWx1ZT4odmFsdWUpKQorICAgICAgICByZXR1cm4gU3R5bGVJbWFnZVNldDo6Y3JlYXRl
KGRvd25jYXN0PENTU0ltYWdlU2V0VmFsdWU+KHJlc29sdmVJbWFnZVN0eWxlcyh2YWx1ZSkuZ2V0
KCkpKTsKIAogICAgIHJldHVybiBudWxscHRyOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVCdWlsZGVyU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw3
IEBAIHB1YmxpYzoKICAgICBib29sIHVzZVNWR1pvb21SdWxlc0Zvckxlbmd0aCgpIGNvbnN0Owog
ICAgIFNjb3BlT3JkaW5hbCBzdHlsZVNjb3BlT3JkaW5hbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5
bGVTY29wZU9yZGluYWw7IH0KIAorICAgIFJlZjxDU1NWYWx1ZT4gcmVzb2x2ZUltYWdlU3R5bGVz
KENTU1ZhbHVlJik7CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGNyZWF0ZVN0eWxlSW1hZ2UoQ1NT
VmFsdWUmKTsKICAgICBib29sIGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoY29uc3QgQ1NTVmFsdWUm
LCBGaWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKTsKIApJbmRleDogTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
MjU0ODA4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMzEgQEAKKzIwMjAtMDEtMTkgIE5vYW0gUm9zZW50aGFsICA8bm9hbUB3ZWJraXQub3JnPgor
CisgICAgICAgIC13ZWJraXQtaW1hZ2Utc2V0IHNob3VsZCBzdXBwb3J0IGFsbCB0aGUgaW1hZ2Ug
ZnVuY3Rpb25zIFdlYktpdCBzdXBwb3J0cywgbm90IGp1c3QgdXJsKCkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxOTQxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2Nzcy9jdXJzb3ItcGFyc2lu
Zy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jc3MvY3Vyc29yLXBhcnNpbmcuaHRtbDoK
KyAgICAgICAgICAgICAgICBBZGRlZCBwYXJzaW5nIHRlc3QgdG8gZW5zdXJlIGFycm93IGltYWdl
LXNldHMgZGlzYWJsZSBnZW5lcmF0ZWQgaW1hZ2VzCisKKyAgICAgICAgKiBmYXN0L2Nzcy9pbWFn
ZS1zZXQtcGFyc2luZy1nZW5lcmF0ZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1nZW5lcmF0ZWQuaHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctaW52YWxpZC1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctaW52YWxpZC5odG1sOgorICAgICAgICAg
ICAgICAgIEFkZGVkIHBhcnNpbmcgdGVzdHMgZm9yIG5ldyBnZW5lcmF0ZWQtaW5zaWRlLWltYWdl
LXNldCB1c2UgY2FzZXMKKyAgICAgICAgICAgICAgICBUZXN0IHRoYXQgaW1hZ2Utc2V0IGluc2lk
ZSBpbWFnZS1zZXQgaXMgbm90IHN1cHBvcnRlZAorCisgICAgICAgICogZmFzdC9oaWRwaS9pbWFn
ZS1zZXQtY3Jvc3MtZmFkZS1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2hp
ZHBpL2ltYWdlLXNldC1jcm9zcy1mYWRlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlk
cGkvaW1hZ2Utc2V0LWdyYWRpZW50LWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LW11bHRpLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LW11bHRpLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS1leHBlY3Rl
ZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1z
aW5nbGUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGll
bnQuaHRtbDogQWRkZWQuCisgICAgICAgICAgICAgICAgQWRkZWQgcmVmLXRlc3RzIGZvciBzZXZl
cmFsIGdlbmVyYXRlZC1pbnNpZGUtaW1hZ2Utc2V0IHVzZS1jYXNlcworCiAyMDIwLTAxLTE5ICBD
YXRoaWUgQ2hlbiAgPGNhdGhpZWNoZW5AaWdhbGlhLmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9y
dCBmb3Igc2Nyb2xsIGJlaGF2aW9yIHJlbGllcyBvbiBTY3JvbGxBbmltYXRpb24gb2YgdGhlIFdl
YiBwcm9jZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvY3Vyc29yLXBhcnNp
bmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNTQ4MDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nz
cy9jdXJzb3ItcGFyc2luZy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYy
LDEwIEBAIFBBU1Mgcm91bmR0cmlwQ3NzUnVsZSgiY3Vyc29yOiB1cmwoZmlsZToKIFBBU1Mgcm91
bmR0cmlwQ3NzUnVsZSgiY3Vyc29yOiB1cmwoZmlsZTovLy9mb28ucG5nKSAxMiAzIDU7IikuY3Nz
VGV4dCBpcyAiIgogUEFTUyByb3VuZHRyaXBDc3NSdWxlKCJjdXJzb3I6IHVybChmaWxlOi8vL2Zv
by5wbmcpIHggeTsiKS5jc3NUZXh0IGlzICIiCiBQQVNTIHJvdW5kdHJpcENzc1J1bGUoImN1cnNv
cjogdXJsKGZpbGU6Ly8vZm9vLnBuZykgYXV0bzsiKS5jc3NUZXh0IGlzICIiCisKK1Rlc3QgYSBi
dW5jaCBvZiBjdXJzb3IgcnVsZXMgd2l0aCBnZW5lcmF0ZWQgaW1hZ2VzLgorUEFTUyByb3VuZHRy
aXBDc3NSdWxlKCJjdXJzb3I6IGxpbmVhci1ncmFkaWVudChyZWQsIHdoaXRlKSAtMSAtMSwgcG9p
bnRlcjsiKS5jc3NUZXh0IGlzICIiCitQQVNTIHJvdW5kdHJpcENzc1J1bGUoImN1cnNvcjogaW1h
Z2Utc2V0KGxpbmVhci1ncmFkaWVudChyZWQsIHdoaXRlKSAxeCkgLTEgLTEsIHBvaW50ZXI7Iiku
Y3NzVGV4dCBpcyAiIgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENP
TVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL2N1cnNvci1wYXJzaW5nLmh0bWwJKHJl
dmlzaW9uIDI1NDgwOCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2N1cnNvci1wYXJzaW5nLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsMTEgQEAgdGVzdEludmFsaWRDdXJzb3JS
dWxlKCd1cmwoZmlsZTovLy9mb28ucAogdGVzdEludmFsaWRDdXJzb3JSdWxlKCd1cmwoZmlsZTov
Ly9mb28ucG5nKSB4IHknKTsKIHRlc3RJbnZhbGlkQ3Vyc29yUnVsZSgndXJsKGZpbGU6Ly8vZm9v
LnBuZykgYXV0bycpOwogCitkZWJ1ZygnJyk7CitkZWJ1ZygnVGVzdCBhIGJ1bmNoIG9mIGN1cnNv
ciBydWxlcyB3aXRoIGdlbmVyYXRlZCBpbWFnZXMuJyk7Cit0ZXN0SW52YWxpZEN1cnNvclJ1bGUo
J2xpbmVhci1ncmFkaWVudChyZWQsIHdoaXRlKSAtMSAtMSwgcG9pbnRlcicpOwordGVzdEludmFs
aWRDdXJzb3JSdWxlKCdpbWFnZS1zZXQobGluZWFyLWdyYWRpZW50KHJlZCwgd2hpdGUpIDF4KSAt
MSAtMSwgcG9pbnRlcicpOworCiBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwogPC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1nZW5lcmF0ZWQt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL2ltYWdlLXNl
dC1wYXJzaW5nLWdlbmVyYXRlZC1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0
VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctZ2VuZXJhdGVkLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACitUZXN0IHRoZSBwYXJzaW5nIG9mIHRoZSBp
bWFnZS1zZXQgZnVuY3Rpb24uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisKK1Np
bmdsZSB2YWx1ZSBmb3IgYmFja2dyb3VuZC1pbWFnZSB3aXRoIGdyYWRpZW50IDogbGluZWFyLWdy
YWRpZW50KGdyZWVuLCB3aGl0ZSkgMXgKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxl
KSBpcyAnQ1NTVmFsdWVMaXN0JworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuX19w
cm90b19fKSBpcyAnQ1NTVmFsdWVMaXN0UHJvdG90eXBlJworUEFTUyBqc1dyYXBwZXJDbGFzcyhp
bWFnZVNldFJ1bGUuY29uc3RydWN0b3IpIGlzICdGdW5jdGlvbicKK1BBU1MgaW1hZ2VTZXRSdWxl
Lmxlbmd0aCBpcyAyCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnbGluZWFyLWdyYWRpZW50KGdy
ZWVuLCB3aGl0ZSknCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMScKKworU2luZ2xlIHZhbHVl
IGZvciBjb250ZW50IHdpdGggZ3JhZGllbnQgOiBsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRl
KSAxeAorUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUpIGlzICdDU1NWYWx1ZUxpc3Qn
CitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5fX3Byb3RvX18pIGlzICdDU1NWYWx1
ZUxpc3RQcm90b3R5cGUnCitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5jb25zdHJ1
Y3RvcikgaXMgJ0Z1bmN0aW9uJworUEFTUyBpbWFnZVNldFJ1bGUubGVuZ3RoIGlzIDIKK1BBU1Mg
c3ViUnVsZS5jc3NUZXh0IGlzICdsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKScKK1BBU1Mg
c3ViUnVsZS5jc3NUZXh0IGlzICcxJworCitTaW5nbGUgdmFsdWUgZm9yIGJhY2tncm91bmQtaW1h
Z2Ugd2l0aCBncmFkaWVudHMgOiBsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAxeCwgcmFk
aWFsLWdyYWRpZW50KGJsdWUsIHdoaXRlKSAyeAorUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNl
dFJ1bGUpIGlzICdDU1NWYWx1ZUxpc3QnCitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVs
ZS5fX3Byb3RvX18pIGlzICdDU1NWYWx1ZUxpc3RQcm90b3R5cGUnCitQQVNTIGpzV3JhcHBlckNs
YXNzKGltYWdlU2V0UnVsZS5jb25zdHJ1Y3RvcikgaXMgJ0Z1bmN0aW9uJworUEFTUyBpbWFnZVNl
dFJ1bGUubGVuZ3RoIGlzIDQKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICdsaW5lYXItZ3JhZGll
bnQoZ3JlZW4sIHdoaXRlKScKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICcxJworUEFTUyBzdWJS
dWxlLmNzc1RleHQgaXMgJ3JhZGlhbC1ncmFkaWVudChibHVlLCB3aGl0ZSknCitQQVNTIHN1YlJ1
bGUuY3NzVGV4dCBpcyAnMicKKworQ29tYmluZWQgZ3JhZGllbnQgYW5kIFVSTCA6IHVybCgnI2En
KSAxeCwgbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMngKK1BBU1MganNXcmFwcGVyQ2xh
c3MoaW1hZ2VTZXRSdWxlKSBpcyAnQ1NTVmFsdWVMaXN0JworUEFTUyBqc1dyYXBwZXJDbGFzcyhp
bWFnZVNldFJ1bGUuX19wcm90b19fKSBpcyAnQ1NTVmFsdWVMaXN0UHJvdG90eXBlJworUEFTUyBq
c1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuY29uc3RydWN0b3IpIGlzICdGdW5jdGlvbicKK1BB
U1MgaW1hZ2VTZXRSdWxlLmxlbmd0aCBpcyA0CitQQVNTIHN1YlJ1bGUgaXMgJ2EnCitQQVNTIHN1
YlJ1bGUuY3NzVGV4dCBpcyAnMScKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICdsaW5lYXItZ3Jh
ZGllbnQoZ3JlZW4sIHdoaXRlKScKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICcyJworCitDb21i
aW5lZCBncmFkaWVudCBhbmQgVVJMIGluIGNvbnRlbnQgOiB1cmwoJyNhJykgMXgsIGxpbmVhci1n
cmFkaWVudChncmVlbiwgd2hpdGUpIDJ4CitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVs
ZSkgaXMgJ0NTU1ZhbHVlTGlzdCcKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLl9f
cHJvdG9fXykgaXMgJ0NTU1ZhbHVlTGlzdFByb3RvdHlwZScKK1BBU1MganNXcmFwcGVyQ2xhc3Mo
aW1hZ2VTZXRSdWxlLmNvbnN0cnVjdG9yKSBpcyAnRnVuY3Rpb24nCitQQVNTIGltYWdlU2V0UnVs
ZS5sZW5ndGggaXMgNAorUEFTUyBzdWJSdWxlIGlzICdhJworUEFTUyBzdWJSdWxlLmNzc1RleHQg
aXMgJzEnCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3
aGl0ZSknCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMicKKworQ29tYmluZWQgZ3JhZGllbnQg
YW5kIGNyb3NzLWZhZGUgOiAtd2Via2l0LWNyb3NzLWZhZGUodXJsKCcjYScpLCB1cmwoJyNiJyks
IDcwJSkgMXgsIGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIDJ4CitQQVNTIGpzV3JhcHBl
ckNsYXNzKGltYWdlU2V0UnVsZSkgaXMgJ0NTU1ZhbHVlTGlzdCcKK1BBU1MganNXcmFwcGVyQ2xh
c3MoaW1hZ2VTZXRSdWxlLl9fcHJvdG9fXykgaXMgJ0NTU1ZhbHVlTGlzdFByb3RvdHlwZScKK1BB
U1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLmNvbnN0cnVjdG9yKSBpcyAnRnVuY3Rpb24n
CitQQVNTIGltYWdlU2V0UnVsZS5sZW5ndGggaXMgNAorUEFTUyBzdWJSdWxlIGlzICdhJworUEFT
UyBzdWJSdWxlLmNzc1RleHQgaXMgJzEnCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnbGluZWFy
LWdyYWRpZW50KGdyZWVuLCB3aGl0ZSknCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMicKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1nZW5l
cmF0ZWQtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0w
LDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctZ2VuZXJhdGVkLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctZ2VuZXJhdGVkLmh0
bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNp
bmctZ2VuZXJhdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDcgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCB0aGUgcGFyc2luZyBvZiB0
aGUgaW1hZ2Utc2V0IGZ1bmN0aW9uLiIpOworCitmdW5jdGlvbiBqc1dyYXBwZXJDbGFzcyhub2Rl
KQoreworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuICJbbnVsbF0iOworICAgIHZhciBz
dHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KG5vZGUpOworICAgIHJldHVy
biBzdHJpbmcuc3Vic3RyKDgsIHN0cmluZy5sZW5ndGggLSA5KTsKK30KKworZnVuY3Rpb24gc2hv
dWxkQmVUeXBlKGV4cHJlc3Npb24sIGNsYXNzTmFtZSwgcHJvdG90eXBlTmFtZSwgY29uc3RydWN0
b3JOYW1lKQoreworICAgIGlmICghcHJvdG90eXBlTmFtZSkKKyAgICAgICAgcHJvdG90eXBlTmFt
ZSA9IGNsYXNzTmFtZSArICJQcm90b3R5cGUiOworICAgIGlmICghY29uc3RydWN0b3JOYW1lKQor
ICAgICAgICBjb25zdHJ1Y3Rvck5hbWUgPSBjbGFzc05hbWUgKyAiQ29uc3RydWN0b3IiOworICAg
IHNob3VsZEJlKCJqc1dyYXBwZXJDbGFzcygiICsgZXhwcmVzc2lvbiArICIpIiwgIiciICsgY2xh
c3NOYW1lICsgIiciKTsKKyAgICBzaG91bGRCZSgianNXcmFwcGVyQ2xhc3MoIiArIGV4cHJlc3Np
b24gKyAiLl9fcHJvdG9fXykiLCAiJyIgKyBwcm90b3R5cGVOYW1lICsgIiciKTsKKyAgICBzaG91
bGRCZSgianNXcmFwcGVyQ2xhc3MoIiArIGV4cHJlc3Npb24gKyAiLmNvbnN0cnVjdG9yKSIsICIn
RnVuY3Rpb24nIik7Cit9CisKKy8vIFRoZXNlIGhhdmUgdG8gYmUgZ2xvYmFsIGZvciB0aGUgdGVz
dCBoZWxwZXJzIHRvIHNlZSB0aGVtLgordmFyIGltYWdlU2V0UnVsZSwgc3ViUnVsZTsKKworZnVu
Y3Rpb24gdGVzdEltYWdlU2V0UnVsZShkZXNjcmlwdGlvbiwgcHJvcGVydHksIHJ1bGUsIGV4cGVj
dGVkTGVuZ3RoLCBleHBlY3RlZFRleHRzKQoreworICAgIGRlYnVnKCIiKTsKKyAgICBkZWJ1Zyhk
ZXNjcmlwdGlvbiArICIgOiAiICsgcnVsZSk7CisKKyAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7CisgICAgZGl2LnNldEF0dHJpYnV0ZSgic3R5bGUiLCBwcm9wZXJ0
eSArICI6IGltYWdlLXNldCgiICsgcnVsZSArICIpIik7CisgICAgZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChkaXYpOworCisgICAgaW1hZ2VTZXRSdWxlID0gZGl2LnN0eWxlLmdldFByb3BlcnR5
Q1NTVmFsdWUocHJvcGVydHkpOworICAgIHNob3VsZEJlVHlwZSgiaW1hZ2VTZXRSdWxlIiwgIkNT
U1ZhbHVlTGlzdCIpOworCisgICAgaWYgKGltYWdlU2V0UnVsZSkgeworICAgICAgICBpZiAoanNX
cmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlWzBdKSA9PSAiQ1NTVmFsdWVMaXN0IikgeworICAgICAg
ICAgICAgLy8gVGhlIGNvbnRlbnQgcHJvcGVydHkgcmV0dXJucyBhIENTU1ZhbHVlTGlzdCBhbnl3
YXksIHNvIHRvIGdldCB0byB0aGUgCisgICAgICAgICAgICAvLyBpbWFnZVNldCBDU1MgdmFsdWUg
bGlzdCwgd2UgaGF2ZSB0byBsb29rIGF0IHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgCisgICAgICAg
ICAgICAvLyBjb250ZW50IHZhbHVlIGxpc3QuCisgICAgICAgICAgICBpbWFnZVNldFJ1bGUgPSBp
bWFnZVNldFJ1bGVbMF07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzaG91bGRCZSgiaW1hZ2VT
ZXRSdWxlLmxlbmd0aCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZXhwZWN0ZWRMZW5ndGg7IH0pOwor
CisgICAgaWYgKGltYWdlU2V0UnVsZSkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4
cGVjdGVkTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHN0cmluZyA9IGltYWdlU2V0UnVsZVtp
XTsKKyAgICAgICAgICAgIGlmIChpICUgMiA9PSAwICYmIHN0cmluZy5jc3NUZXh0LmluY2x1ZGVz
KCcjJykpIHsKKyAgICAgICAgICAgICAgICBzdWJSdWxlID0gc3RyaW5nLmNzc1RleHQuc3BsaXQo
JyMnKVsxXS5yZXBsYWNlKCciJywgIiIpOworICAgICAgICAgICAgICAgIHN1YlJ1bGUgPSBzdWJS
dWxlLnNwbGl0KCcpJylbMF07CisgICAgICAgICAgICAgICAgc2hvdWxkQmUoInN1YlJ1bGUiLCAi
JyIgKyBleHBlY3RlZFRleHRzW2ldICsgIiciKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgc3ViUnVsZSA9IHN0cmluZzsKKyAgICAgICAgICAgICAgICBzaG91bGRCZSgi
c3ViUnVsZS5jc3NUZXh0IiwgIiciICsgZXhwZWN0ZWRUZXh0c1tpXSArICInIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxk
KGRpdik7Cit9CisKK3Rlc3RJbWFnZVNldFJ1bGUoIlNpbmdsZSB2YWx1ZSBmb3IgYmFja2dyb3Vu
ZC1pbWFnZSB3aXRoIGdyYWRpZW50IiwKKyAgICAgICAgICAgICAgICAiYmFja2dyb3VuZC1pbWFn
ZSIsCisgICAgICAgICAgICAgICAgImxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIDF4Iiwg
MiwKKyAgICAgICAgICAgICAgICBbImxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIiwgIjEi
XSk7Cit0ZXN0SW1hZ2VTZXRSdWxlKCJTaW5nbGUgdmFsdWUgZm9yIGNvbnRlbnQgd2l0aCBncmFk
aWVudCIsCisgICAgICAgICAgICAgICAgImJhY2tncm91bmQtaW1hZ2UiLAorICAgICAgICAgICAg
ICAgICJsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAxeCIsIDIsCisgICAgICAgICAgICAg
ICAgWyJsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSIsICIxIl0pOworCit0ZXN0SW1hZ2VT
ZXRSdWxlKCJTaW5nbGUgdmFsdWUgZm9yIGJhY2tncm91bmQtaW1hZ2Ugd2l0aCBncmFkaWVudHMi
LAorICAgICAgICAgICAgICAgICJiYWNrZ3JvdW5kLWltYWdlIiwKKyAgICAgICAgICAgICAgICAi
bGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMXgsIHJhZGlhbC1ncmFkaWVudChibHVlLCB3
aGl0ZSkgMngiLCA0LAorICAgICAgICAgICAgICAgIFsibGluZWFyLWdyYWRpZW50KGdyZWVuLCB3
aGl0ZSkiLCAiMSIsICJyYWRpYWwtZ3JhZGllbnQoYmx1ZSwgd2hpdGUpIiwgIjIiXSk7CisKK3Rl
c3RJbWFnZVNldFJ1bGUoIkNvbWJpbmVkIGdyYWRpZW50IGFuZCBVUkwiLAorICAgICAgICAgICAg
ICAgICJiYWNrZ3JvdW5kLWltYWdlIiwKKyAgICAgICAgICAgICAgICAidXJsKCcjYScpIDF4LCBs
aW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAyeCIsIDQsCisgICAgICAgICAgICAgICAgWyJh
IiwgIjEiLCAibGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkiLCAiMiJdKTsKKwordGVzdElt
YWdlU2V0UnVsZSgiQ29tYmluZWQgZ3JhZGllbnQgYW5kIFVSTCBpbiBjb250ZW50IiwKKyAgICAg
ICAgICAgICAgICAiY29udGVudCIsCisgICAgICAgICAgICAgICAgInVybCgnI2EnKSAxeCwgbGlu
ZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMngiLCA0LAorICAgICAgICAgICAgICAgIFsiYSIs
ICIxIiwgImxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIiwgIjIiXSk7CisKK3Rlc3RJbWFn
ZVNldFJ1bGUoIkNvbWJpbmVkIGdyYWRpZW50IGFuZCBjcm9zcy1mYWRlIiwKKyAgICAgICAgICAg
ICAgICAiYmFja2dyb3VuZC1pbWFnZSIsCisgICAgICAgICAgICAgICAgIi13ZWJraXQtY3Jvc3Mt
ZmFkZSh1cmwoJyNhJyksIHVybCgnI2InKSwgNzAlKSAxeCwgbGluZWFyLWdyYWRpZW50KGdyZWVu
LCB3aGl0ZSkgMngiLCA0LAorICAgICAgICAgICAgICAgIFsiYSIsICIxIiwgImxpbmVhci1ncmFk
aWVudChncmVlbiwgd2hpdGUpIiwgIjIiXSk7CisKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7
Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91
dFRlc3RzL2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWdlbmVyYXRlZC5odG1sCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBh
cnNpbmctaW52YWxpZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctaW52YWxpZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI1
NDgwOCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWludmFsaWQt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xOCw2ICsxOCwxMiBAQCBQQVNTIGNzc1J1
bGUgaXMgbnVsbAogCiBTY2FsZSBmYWN0b3IgaXMgMCA6IHVybCgnI2EnKSAweAogUEFTUyBjc3NS
dWxlIGlzIG51bGwKKworR2VuZXJhdGVkIGltYWdlIGZvciBjdXJzb3IgOiBsaW5lYXItZ3JhZGll
bnQoYmxhY2ssIHdoaXRlKSAxeAorUEFTUyBjc3NSdWxlIGlzIG51bGwKKworSW1hZ2Utc2V0IGlu
c2lkZSBpbWFnZS1zZXQgOiBpbWFnZS1zZXQoaW1hZ2Utc2V0KHVybCgnI2EnKSAxeCkgMXgpCitQ
QVNTIGNzc1J1bGUgaXMgbnVsbAogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBU
RVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2lu
Zy1pbnZhbGlkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Ut
c2V0LXBhcnNpbmctaW52YWxpZC5odG1sCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1pbnZhbGlkLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDggQEAgdGVzdEludmFsaWRJbWFnZVNldCgiTm8geCIsICJiYWNrZ3JvdW5k
LQogdGVzdEludmFsaWRJbWFnZVNldCgiTm8gY29tbWEiLCAiYmFja2dyb3VuZC1pbWFnZSIsICJ1
cmwoJyNhJykgMXggdXJsKCcjYicpIDJ4Iik7CiB0ZXN0SW52YWxpZEltYWdlU2V0KCJUb28gbWFu
eSBzY2FsZSBmYWN0b3IgcGFyYW1ldGVycyIsICJiYWNrZ3JvdW5kLWltYWdlIiwgInVybCgnI2En
KSAxeCAyeCIpOwogdGVzdEludmFsaWRJbWFnZVNldCgiU2NhbGUgZmFjdG9yIGlzIDAiLCAiYmFj
a2dyb3VuZC1pbWFnZSIsICJ1cmwoJyNhJykgMHgiKTsKK3Rlc3RJbnZhbGlkSW1hZ2VTZXQoIkdl
bmVyYXRlZCBpbWFnZSBmb3IgY3Vyc29yIiwgImN1cnNvciIsICJsaW5lYXItZ3JhZGllbnQoYmxh
Y2ssIHdoaXRlKSAxeCIpOwordGVzdEludmFsaWRJbWFnZVNldCgiSW1hZ2Utc2V0IGluc2lkZSBp
bWFnZS1zZXQiLCAiYmFja2dyb3VuZC1pbWFnZSIsICJpbWFnZS1zZXQoaW1hZ2Utc2V0KHVybCgn
I2EnKSAxeCkgMXgpIik7CiAKIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CiA8L3NjcmlwdD4K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWNyb3NzLWZhZGUtZXhwZWN0
ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1j
cm9zcy1mYWRlLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFz
dC9oaWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjYgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorICAgIHdpbmRvdy5v
bmxvYWQgPSAoKSA9PiB7CisgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAg
dGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0QmFja2lu
Z1NjYWxlRmFjdG9yKDIsICgpID0+IHNldFRpbWVvdXQoKCkgPT4gdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCksIDApKTsKKyAgICAgIH0KKyAgICB9Cis8L3NjcmlwdD4KKworICAgIAorPHN0eWxlPgor
ICAgICNmb28geworICAgICAgICB3aWR0aDoxMDBweDsKKyAgICAgICAgaGVpZ2h0OjEwMHB4Owor
ICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWNyb3NzLWZhZGUodXJsKCdyZXNvdXJj
ZXMvYmx1ZS0xMDAtcHgtc3F1YXJlLnBuZycpLCB1cmwoJ3Jlc291cmNlcy9ncmVlbi0yMDAtcHgt
c3F1YXJlLnBuZycsIDUwJSkpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5Pgor
ICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgYmx1ZSAxMDBw
eCBzcXVhcmUgd2hlbiB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgaXMgMSwgYW5kIGlmIGl0IGlzIGEg
MTAwcHggZ3JlZW4vYmx1ZSBjcm9zcy1mYWRlIHNxdWFyZSB3aGVuIHRoZSBkZXZpY2VTY2FsZUZh
Y3RvciBpcyAyLjwvZGl2PgorPGRpdiBpZD1mb28+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9z
cy1mYWRlLWV4cGVjdGVkLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMg
LTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1mYWRlLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS5odG1sCShub25l
eGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWNyb3NzLWZhZGUu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1IEBACis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdD4KKyAgICB3aW5kb3cub25sb2FkID0gKCkgPT4geworICAgICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB0
ZXN0UnVubmVyLnNldEJhY2tpbmdTY2FsZUZhY3RvcigyLCAoKSA9PiBzZXRUaW1lb3V0KCgpID0+
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpLCAwKSk7CisgICAgICB9CisgICAgfQorPC9zY3JpcHQ+
CisgICAgCis8c3R5bGU+CisgICAgI2ZvbyB7CisgICAgICAgIHdpZHRoOjEwMHB4OworICAgICAg
ICBoZWlnaHQ6MTAwcHg7CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGltYWdlLXNldCh1cmwo
J3Jlc291cmNlcy9ibHVlLTEwMC1weC1zcXVhcmUucG5nJykgMXgsIC13ZWJraXQtY3Jvc3MtZmFk
ZSh1cmwoJ3Jlc291cmNlcy9ibHVlLTEwMC1weC1zcXVhcmUucG5nJyksIHVybCgncmVzb3VyY2Vz
L2dyZWVuLTIwMC1weC1zcXVhcmUucG5nJywgNTAlKSkgMngpOworICAgIH0KKzwvc3R5bGU+Cis8
L2hlYWQ+CisKKzxib2R5PgorICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJl
bG93IGlzIGEgYmx1ZSAxMDBweCBzcXVhcmUgd2hlbiB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgaXMg
MSwgYW5kIGlmIGl0IGlzIGEgMTAwcHggZ3JlZW4vYmx1ZSBjcm9zcy1mYWRlIHNxdWFyZSB3aGVu
IHRoZSBkZXZpY2VTY2FsZUZhY3RvciBpcyAyLjwvZGl2PgorICAgIDxkaXYgaWQ9Zm9vPjwvZGl2
PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFz
dC9oaWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS5odG1sCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpl
eGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtZXhwZWN0
ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1n
cmFkaWVudC1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
aGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyNiBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisgICAgd2luZG93Lm9ubG9h
ZCA9ICgpID0+IHsKKyAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0
UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRCYWNraW5nU2Nh
bGVGYWN0b3IoMiwgKCkgPT4gc2V0VGltZW91dCgoKSA9PiB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KSwgMCkpOworICAgICAgfQorICAgIH0KKzwvc2NyaXB0PgorCisgICAgCis8c3R5bGU+CisgICAg
I2ZvbyB7CisgICAgICAgIHdpZHRoOjEwMHB4OworICAgICAgICBoZWlnaHQ6MTAwcHg7CisgICAg
ICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpOworICAg
IH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3Nl
cyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgYmx1ZSAxMDBweCBzcXVhcmUgd2hlbiB0aGUgZGV2aWNl
U2NhbGVGYWN0b3IgaXMgMSwgYW5kIGlmIGl0IGlzIGEgMTAwcHggZ3JlZW4td2hpdGUgZ3JhZGll
bnQgc3F1YXJlIHdoZW4gdGhlIGRldmljZVNjYWxlRmFjdG9yIGlzIDIuPC9kaXY+CisgICAgPGRp
diBpZD1mb28+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBM
YXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1leHBlY3RlZC5odG1sCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFn
ZS1zZXQtZ3JhZGllbnQtbXVsdGktZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1tdWx0aS1leHBlY3RlZC5odG1sCShu
b25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50
LW11bHRpLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNSBAQAorPGh0
bWw+Cis8aGVhZD4gICAgCis8c2NyaXB0PgorICAgIHdpbmRvdy5vbmxvYWQgPSAoKSA9PiB7Cisg
ICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50
aWxEb25lKCk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0QmFja2luZ1NjYWxlRmFjdG9yKDIsICgp
ID0+IHNldFRpbWVvdXQoKCkgPT4gdGVzdFJ1bm5lci5ub3RpZnlEb25lKCksIDApKTsKKyAgICAg
IH0KKyAgICB9Cis8L3NjcmlwdD4KKworPHN0eWxlPgorICAgICNmb28geworICAgICAgICB3aWR0
aDoxMDBweDsKKyAgICAgICAgaGVpZ2h0OjEwMHB4OworICAgICAgICBiYWNrZ3JvdW5kLWltYWdl
OiByYWRpYWwtZ3JhZGllbnQocmVkLCBibHVlKTsKKyAgICB9Cis8L3N0eWxlPgorPC9oZWFkPgor
Cis8Ym9keT4KKyAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGRpdiBiZWxvdyBpcyBh
IDEwMHB4IGdyZWVuLXdoaXRlIGdyYWRpZW50IHNxdWFyZSB3aGVuIGRldmljZVBpeGVsUmF0aW8g
aXMgMSwgYSByYWRpYWwgcmVkLWJsdWUgc3F1YXJlIHdoZW4gZGV2aWNlUGl4ZWxSYXRpbyBpcyAy
LCBhbmQgYSBibHVlIHNxdWFyZSB3aGVuIGRldmljZVBpeGVsUmF0aW8gaXMgMy48L2Rpdj4KKyAg
ICA8ZGl2IGlkPWZvbz48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMg
b246IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LW11bHRpLWV4cGVj
dGVkLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIwor
KgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1tdWx0aS5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LW11bHRpLmh0bWwJKG5vbmV4aXN0
ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtbXVsdGku
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1IEBACis8aHRtbD4KKzxoZWFkPiAgICAK
KzxzY3JpcHQ+CisgICAgd2luZG93Lm9ubG9hZCA9ICgpID0+IHsKKyAgICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAg
ICAgdGVzdFJ1bm5lci5zZXRCYWNraW5nU2NhbGVGYWN0b3IoMiwgKCkgPT4gc2V0VGltZW91dCgo
KSA9PiB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKSwgMCkpOworICAgICAgfQorICAgIH0KKzwvc2Ny
aXB0PgorCis8c3R5bGU+CisgICAgI2ZvbyB7CisgICAgICAgIHdpZHRoOjEwMHB4OworICAgICAg
ICBoZWlnaHQ6MTAwcHg7CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGltYWdlLXNldChsaW5l
YXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAxeCwgcmFkaWFsLWdyYWRpZW50KHJlZCwgYmx1ZSkg
MngsICdyZXNvdXJjZXMvYmx1ZS0xMDAtcHgtc3F1YXJlLnBuZycgM3gpOworICAgIH0KKzwvc3R5
bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUg
ZGl2IGJlbG93IGlzIGEgMTAwcHggZ3JlZW4td2hpdGUgZ3JhZGllbnQgc3F1YXJlIHdoZW4gZGV2
aWNlUGl4ZWxSYXRpbyBpcyAxLCBhIHJhZGlhbCByZWQtYmx1ZSBzcXVhcmUgd2hlbiBkZXZpY2VQ
aXhlbFJhdGlvIGlzIDIsIGFuZCBhIGJsdWUgc3F1YXJlIHdoZW4gZGV2aWNlUGl4ZWxSYXRpbyBp
cyAzLjwvZGl2PgorICAgIDxkaXYgaWQ9Zm9vPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgoKUHJv
cGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGll
bnQtbXVsdGkuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsx
ICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS1leHBlY3RlZC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmds
ZS1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvaGlkcGkv
aW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTYgQEAKKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisgICAgI2ZvbyB7CisgICAg
ICAgIHdpZHRoOjEwMHB4OworICAgICAgICBoZWlnaHQ6MTAwcHg7CisgICAgICAgIGJhY2tncm91
bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpOworICAgIH0KKzwvc3R5bGU+
Cis8L2hlYWQ+CisKKzxib2R5IGlkPSJib2R5Ij4KKyAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMg
aWYgdGhlIGRpdiBiZWxvdyBpcyBhIDEwMHB4IGdyZWVuLXdoaXRlIGdyYWRpZW50IHNxdWFyZS48
L2Rpdj4KKyAgICA8ZGl2IGlkPWZvbz48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5
IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNp
bmdsZS1leHBlY3RlZC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0w
LDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtc2luZ2xlLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtc2luZ2xlLmh0
bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3Jh
ZGllbnQtc2luZ2xlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNiBAQAorPGh0bWw+
Cis8aGVhZD4gICAgCis8c3R5bGU+CisgICAgI2ZvbyB7CisgICAgICAgIHdpZHRoOjEwMHB4Owor
ICAgICAgICBoZWlnaHQ6MTAwcHg7CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGltYWdlLXNl
dChsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAxeCk7CisgICAgfQorPC9zdHlsZT4KKzwv
aGVhZD4KKworPGJvZHkgaWQ9ImJvZHkiPgorICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0
aGUgZGl2IGJlbG93IGlzIGEgMTAwcHggZ3JlZW4td2hpdGUgZ3JhZGllbnQgc3F1YXJlLjwvZGl2
PgorICAgIDxkaXYgaWQ9Zm9vPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hh
bmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtc2luZ2xl
Lmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2hp
ZHBpL2ltYWdlLXNldC1ncmFkaWVudC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50Lmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0
VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDI1IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KKyAgICB3aW5kb3cub25s
b2FkID0gKCkgPT4geworICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB0ZXN0UnVubmVyLnNldEJhY2tpbmdT
Y2FsZUZhY3RvcigyLCAoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpLCAwKSk7CisgICAgICB9CisgICAgfQorPC9zY3JpcHQ+CisKKzxzdHlsZT4KKyAgICAjZm9v
IHsKKyAgICAgICAgd2lkdGg6MTAwcHg7CisgICAgICAgIGhlaWdodDoxMDBweDsKKyAgICAgICAg
YmFja2dyb3VuZC1pbWFnZTogaW1hZ2Utc2V0KHVybCgncmVzb3VyY2VzL2JsdWUtMTAwLXB4LXNx
dWFyZS5wbmcnKSAxeCwgbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMngpOworICAgIH0K
Kzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBp
ZiB0aGUgZGl2IGJlbG93IGlzIGEgYmx1ZSAxMDBweCBzcXVhcmUgd2hlbiB0aGUgZGV2aWNlU2Nh
bGVGYWN0b3IgaXMgMSwgYW5kIGlmIGl0IGlzIGEgMTAwcHggZ3JlZW4td2hpdGUgZ3JhZGllbnQg
c3F1YXJlIHdoZW4gdGhlIGRldmljZVNjYWxlRmFjdG9yIGlzIDIuPC9kaXY+CisgICAgPGRpdiBp
ZD1mb28+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlv
dXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC5odG1sCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBwcm9wZXJ0eQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388263</attachid>
            <date>2020-01-20 15:49:59 -0800</date>
            <delta_ts>2020-01-20 16:12:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81941-20200121014956.patch</filename>
            <type>text/plain</type>
            <size>83562</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNiBAQAorMjAyMC0wMS0xOSAgTm9hbSBS
b3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgLXdlYmtpdC1pbWFnZS1zZXQg
c2hvdWxkIHN1cHBvcnQgYWxsIHRoZSBpbWFnZSBmdW5jdGlvbnMgV2ViS2l0IHN1cHBvcnRzLCBu
b3QganVzdCB1cmwoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODE5NDEKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAg
ICBTZXBhcmF0ZSBTdHlsZUNhY2hlZEltYWdlIHRvIDQgY2xhc3NlczoKKyAgICAgICAgLSBTdHls
ZUNhY2hlZEltYWdlOiBmb3Igc2luZ2xlIGltYWdlcyBvbmx5CisgICAgICAgIC0gU3R5bGVNdWx0
aUltYWdlOiBmb3IgdmFsdWVzIHRoYXQgY2FuIGNvbnRhaW4gbXVsdGlwbGUgaW1hZ2VzOiBsaWtl
IGN1cnNvci9pbWFnZS1zZXQKKyAgICAgICAgLSBTdHlsZUltYWdlU2V0CisgICAgICAgIC0gU3R5
bGVDdXJzb3JJbWFnZQorCisgICAgICAgIFRoZSBuZXcgY2xhc3NlcyBvbmx5IGRlYWwgd2l0aCB0
aGVpciBvd24gdmFsdWUgdHlwZS4gQmVmb3JlLCBJbWFnZVNldCBhbmQgY3Vyc29yIHdlcmUgcmVz
b2x2ZWQKKyAgICAgICAgYXMgYSBTdHlsZUNhY2hlZEltYWdlLCB3aGljaCBpcyBubyBsb25nZXIg
YSB2YWxpZCBhc3N1bXB0aW9uIGlmIGltYWdlLXNldCBjYW4gY29udGFpbiBnZW5lcmF0ZWQgaW1h
Z2VzLgorICAgICAgICBUaG91Z2ggY3Vyc29ycyBzdGlsbCBjYW4gb25seSBjb250YWluIGNhY2hl
ZCBpbWFnZXMsIGl0IHdhcyBjbGVhbmVyIHRvIHJlZmFjdG9yIGl0IG91dCBhcyB3ZWxsLgorCisg
ICAgICAgIFJlZmFjdG9yZWQgYmVzdC1maXQgaW1hZ2Ugc2VsZWN0aW9uIGZyb20gbG9hZGluZy4g
Tm93IFN0eWxlQ2FjaGVkSW1hZ2UgaXMgaW4gY2hhcmdlIG9mIGxvYWRpbmcKKyAgICAgICAgdGhl
IGFjdHVhbCBpbWFnZSwgYW5kIFN0eWxlSW1hZ2VTZXQvU3R5bGVDdXJzb3JJbWFnZSBwZXJmb3Jt
IHRoZSBzb3VyY2Ugc2VsZWN0aW9uLgorCisgICAgICAgIEFsc28sIGFkZGVkIHRoZSBuZWNlc3Nh
cnkgbG9naWMgaW4gdGhlIENTUyBwYXJzZXIgdG8gY29uc3VtZSBnZW5lcmF0ZWQgaW1hZ2VzIGlu
c2lkZSBpbWFnZS1zZXRzLCBleGNsdWRpbmcKKyAgICAgICAgd2hlbiB0aGUgaW1hZ2Utc2V0IGlz
IGEgY3Vyc29yIHZhbHVlLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2Nzcy9pbWFnZS1zZXQtcGFy
c2luZy1nZW5lcmF0ZWQuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9oaWRwaS9pbWFnZS1zZXQt
Y3Jvc3MtZmFkZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFk
aWVudC1tdWx0aS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFk
aWVudC1zaW5nbGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3Jh
ZGllbnQuaHRtbAorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBmaWxl
cworCisgICAgICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6c2VsZWN0QmVzdEZpdEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0N1cnNvckltYWdlVmFsdWU6OmxvYWRJbWFnZSk6IERlbGV0ZWQuCisgICAg
ICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuaDoKKyAgICAgICAgICAgICAgICBJbnN0ZWFk
IG9mIGN1cnNvciBsb2FkaW5nIHRoZSBpbWFnZSwgaXQgc2VsZWN0cyBhbiBpbWFnZSBDU1MgdmFs
dWUKKworICAgICAgICAqIGNzcy9JbWFnZVdpdGhTY2FsZS5oOgorICAgICAgICAqIGNzcy9DU1NJ
bWFnZVNldFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlU2V0VmFsdWU6OkNT
U0ltYWdlU2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VTZXRWYWx1ZTo6Zmls
bEltYWdlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlU2V0VmFsdWU6OmNhY2hlZElt
YWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlU2V0VmFsdWU6OnNlbGVjdEJl
c3RGaXRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjp1cGRhdGVE
ZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjpp
bWFnZVNldFdpdGhTdHlsZXNSZXNvbHZlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZVNl
dFZhbHVlOjp0cmF2ZXJzZVN1YnJlc291cmNlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NJbWFnZVNldFZhbHVlOjpsb2FkQmVzdEZpdEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBj
c3MvQ1NTSW1hZ2VTZXRWYWx1ZS5oOgorICAgICAgICAgICAgICAgIFJlZmFjdG9yIENTU0ltYWdl
U2V0VmFsdWUgdG8gaW5jbHVkZSBub24tY2FjaGVkSW1hZ2UgaW1hZ2VzCisKKyAgICAgICAgKiBj
c3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN1
bWVDdXJzb3IpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3Vt
ZUltYWdlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6Y29uc3VtZVVybE9yU3RyaW5nQXNTdHJpbmdWaWV3KTogRGVsZXRlZC4KKyAgICAgICAgKiBj
c3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oOgorICAgICAgICAgICAgICAgIAor
ICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmJsZW5kRnVuYyk6CisgICAgICAgICAgICAgICAgV2hlbiBibGVuZGluZyB0
d28gaW1hZ2VzLCBnZXQgdGhlIHNlbGVjdGVkIGltYWdlcyBpbiBjYXNlIGl0IGlzIGFuIGltYWdl
LXNldAorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVu
ZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2U6Omlu
aXRpYWxpemUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y2FuRGlyZWN0bHlDb21wb3NpdGVCYWNrZ3JvdW5kQmFja2dyb3Vu
ZEltYWdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU2hhcGVWYWx1ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjppc0ltYWdlVmFsaWQgY29uc3QpOgorICAgICAgICAg
ICAgICAgIFVzZSBoYXNDYWNoZWRJbWFnZSgpIGluc3RlYWQgb2YgaXNDYWNoZWRJbWFnZSgpIGFz
IGEgU3R5bGVJbWFnZVNldCBpcyBubyBsb25nZXIgYW4gaXNDYWNoZWRJbWFnZSgpCisKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUNhY2hlZEltYWdlOjpTdHlsZUNhY2hlZEltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
Q2FjaGVkSW1hZ2U6OmxvYWQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hl
ZEltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5jcHA6CisgICAgICAg
ICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdHlsZS9TdHlsZU11bHRpSW1hZ2UuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9T
dHlsZUltYWdlU2V0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQu
Y3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZUltYWdlOjpzZWxlY3RlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlSW1hZ2U6OnNlbGVjdGVkSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVJ
bWFnZTo6aXNDdXJzb3JJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUltYWdl
Ojppc0ltYWdlU2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW1hZ2U6Omhhc0Nh
Y2hlZEltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW1hZ2U6OlN0eWxlSW1h
Z2UpOgorICAgICAgICAgICAgICAgIFNlcGFyYXRlIGN1cnNvci9pbWFnZS1zZXQgcmVsYXRlZCBz
dHVmZiBhd2F5IGZyb20gU3R5bGVDYWNoZWRJbWFnZS4KKworICAgICAgICAqIHN0eWxlL1N0eWxl
QnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJDdXN0b206
OmFwcGx5VmFsdWVDb250ZW50KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpyZXNvbHZlSW1hZ2VT
dHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6Y3JlYXRlU3R5
bGVJbWFnZSk6CisgICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaDoKKyAgICAgICAg
ICAgICAgICBNYXRjaCB0aGUgQ1NTIHZhbHVlcyB3aXRoIHRoZSBjb3JyZWN0IFN0eWxlIGNsYXNz
LiBBbHNvLCBlbnN1cmUgaW1hZ2Utc2V0cyByZXNvbHZlIHRoZWlyIAorICAgICAgICAgICAgICAg
IGltYWdlcycgc3R5bGVzIGFzIHRoZXkgbWF5IGNvbnRhaW4gZ3JhZGllbnRzIGFuZCBvdGhlciBj
b250ZXh0LWF3YXJlIHZhbHVlcy4KKwogMjAyMC0wMS0xOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0
aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10gRGV2aXJ0dWFsaXplIEZvcm1hdHRpbmdTdGF0
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMjYyLDE1ICsyMjYyLDE4IEBAIHJlbmRl
cmluZy9zdHlsZS9TaGFwZVZhbHVlLmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3Vu
ZERhdGEuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVCb3hEYXRhLmNwcAogcmVuZGVyaW5nL3N0
eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCityZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFn
ZS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZURlcHJlY2F0ZWRGbGV4aWJsZUJveERhdGEuY3Bw
CiByZW5kZXJpbmcvc3R5bGUvU3R5bGVGaWx0ZXJEYXRhLmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0
eWxlRmxleGlibGVCb3hEYXRhLmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1h
Z2UuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVHcmlkRGF0YS5jcHAKIHJlbmRlcmluZy9zdHls
ZS9TdHlsZUdyaWRJdGVtRGF0YS5jcHAKK3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlU2V0LmNw
cAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJpdGVkRGF0YS5jcHAKIHJlbmRlcmluZy9zdHls
ZS9TdHlsZU1hcnF1ZWVEYXRhLmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlDb2xEYXRh
LmNwcAorcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5jcHAKIHJlbmRlcmluZy9zdHls
ZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5v
bkluaGVyaXRlZERhdGEuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVTY3JvbGxTbmFwUG9pbnRz
LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcxNSwxMiArMTM3
MTUsMTkgQEAKIAkJQzlEQURCQzkxQjFEM0IyNTAwMUYxN0Q4IC8qIEpTTWVkaWFTZXNzaW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVkaWFTZXNzaW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzlEQURCQ0ExQjFEM0IyNTAwMUYxN0Q4
IC8qIEpTTWVkaWFTZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
TWVkaWFTZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM5Rjg3Q0ZEMUIy
OEU1RjYwMDk3OUI4MyAvKiBNZWRpYVNlc3Npb25FdmVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRp
YVNlc3Npb25FdmVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0EwOTFEODYy
M0NGOTA3ODAwQUQ0MzQ2IC8qIFN0eWxlSW1hZ2VTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3R5bGVJbWFnZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNBMDkxRDg5
MjNDRjkwODgwMEFENDM0NiAvKiBTdHlsZUltYWdlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxl
SW1hZ2VTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0ExNjM1REMyMDcyRTc2
OTAwRTdEMkNFIC8qIFJlZmVycmVyUG9saWN5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlZmVycmVyUG9saWN5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQ0EzQkY2N0IxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbEFuaW1hdG9yLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNj
cm9sbEFuaW1hdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbEFu
aW1hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNBNTJCQUU1MjNEMEFGMTYw
MERFMEI4NCAvKiBTdHlsZUN1cnNvckltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxl
Q3Vyc29ySW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDQTUyQkFFNzIz
RDBBRjE3MDBERTBCODQgLyogU3R5bGVNdWx0aUltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN0eWxlTXVsdGlJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNBNTJC
QUU4MjNEMEFGMTgwMERFMEI4NCAvKiBTdHlsZU11bHRpSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3R5bGVNdWx0aUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNBNTJCQUU5
MjNEMEFGMTkwMERFMEI4NCAvKiBTdHlsZUN1cnNvckltYWdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0
eWxlQ3Vyc29ySW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0E2QzE1MkYy
MjBCNEE1NTAwNTVDQkZDIC8qIEpTSURCUmVxdWVzdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lEQlJlcXVlc3RDdXN0b20uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDQTZDMTUzNzIyMEQxRUIzMDA1NUNCRkMgLyogSlNJREJDdXJz
b3JDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJREJD
dXJzb3JDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQTZDMTUzODIy
MEQxRUIzMDA1NUNCRkMgLyogSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDQTg4QUQ1NDIzRDY2QUIzMDA3NURD
MTcgLyogSW1hZ2VXaXRoU2NhbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VXaXRoU2NhbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0FFOUY5MEQxNDY0NDFGMDAwQzI0NUIwIC8q
IENTU0FzcGVjdFJhdGlvVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ1NTQXNwZWN0UmF0aW9WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNBRTlGOTBFMTQ2NDQxRjAwMEMyNDVCMCAvKiBDU1NBc3BlY3RSYXRpb1ZhbHVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0FzcGVjdFJhdGlvVmFsdWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0IzOEZENEExQ0NDRjJERDAwNTkyQTNGIC8qIFBl
cmZvcm1hbmNlRW50cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGVyZm9ybWFuY2VFbnRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTU1
Myw2ICsyNTU2MCw4IEBACiAJCQkJQkNFRjQ0NEMwRTY3NDYyODAwMUMxMjg3IC8qIFN0eWxlQ2Fj
aGVkSW1hZ2UuaCAqLywKIAkJCQkxQzBBQTE2QTIxOTQwREM3MDA4OTY4MjkgLyogU3R5bGVDb2xv
clNjaGVtZS5oICovLAogCQkJCTlEQUM3QzU2MUFGMkNCNjQwMDQzN0M0NCAvKiBTdHlsZUNvbnRl
bnRBbGlnbm1lbnREYXRhLmggKi8sCisJCQkJQ0E1MkJBRTUyM0QwQUYxNjAwREUwQjg0IC8qIFN0
eWxlQ3Vyc29ySW1hZ2UuY3BwICovLAorCQkJCUNBNTJCQUU5MjNEMEFGMTkwMERFMEI4NCAvKiBT
dHlsZUN1cnNvckltYWdlLmggKi8sCiAJCQkJQkM3NzlFMTUxQkIyMjZBMjAwQ0FBOEJGIC8qIFN0
eWxlQ3VzdG9tUHJvcGVydHlEYXRhLmggKi8sCiAJCQkJQkM1RUI4QjYwRTgyMDFCRDAwQjI1OTY1
IC8qIFN0eWxlRGVwcmVjYXRlZEZsZXhpYmxlQm94RGF0YS5jcHAgKi8sCiAJCQkJQkM1RUI4Qjcw
RTgyMDFCRDAwQjI1OTY1IC8qIFN0eWxlRGVwcmVjYXRlZEZsZXhpYmxlQm94RGF0YS5oICovLApA
QCAtMjU1NjcsMTIgKzI1NTc2LDE2IEBACiAJCQkJQTExMERCOUMxNEY1REY4NzAwQTAzQjkzIC8q
IFN0eWxlR3JpZEl0ZW1EYXRhLmNwcCAqLywKIAkJCQlBMTEwREI5QTE0RjVERjc3MDBBMDNCOTMg
LyogU3R5bGVHcmlkSXRlbURhdGEuaCAqLywKIAkJCQlCQ0VGNDNDRTBFNjczREExMDAxQzEyODcg
LyogU3R5bGVJbWFnZS5oICovLAorCQkJCUNBMDkxRDg2MjNDRjkwNzgwMEFENDM0NiAvKiBTdHls
ZUltYWdlU2V0LmNwcCAqLywKKwkJCQlDQTA5MUQ4OTIzQ0Y5MDg4MDBBRDQzNDYgLyogU3R5bGVJ
bWFnZVNldC5oICovLAogCQkJCUJDMjI3MzAxMEU4MkYxRTYwMEU3Rjk3NSAvKiBTdHlsZUluaGVy
aXRlZERhdGEuY3BwICovLAogCQkJCUJDMjI3MzAyMEU4MkYxRTYwMEU3Rjk3NSAvKiBTdHlsZUlu
aGVyaXRlZERhdGEuaCAqLywKIAkJCQlCQzVFQjcyNzBFODFERTgxMDBCMjU5NjUgLyogU3R5bGVN
YXJxdWVlRGF0YS5jcHAgKi8sCiAJCQkJQkM1RUI3MjgwRTgxREU4MTAwQjI1OTY1IC8qIFN0eWxl
TWFycXVlZURhdGEuaCAqLywKIAkJCQlCQzVFQjc0QjBFODFFMDY3MDBCMjU5NjUgLyogU3R5bGVN
dWx0aUNvbERhdGEuY3BwICovLAogCQkJCUJDNUVCNzRDMEU4MUUwNjcwMEIyNTk2NSAvKiBTdHls
ZU11bHRpQ29sRGF0YS5oICovLAorCQkJCUNBNTJCQUU3MjNEMEFGMTcwMERFMEI4NCAvKiBTdHls
ZU11bHRpSW1hZ2UuY3BwICovLAorCQkJCUNBNTJCQUU4MjNEMEFGMTgwMERFMEI4NCAvKiBTdHls
ZU11bHRpSW1hZ2UuaCAqLywKIAkJCQlCQzIyNzJFMTBFODJFRTlCMDBFN0Y5NzUgLyogU3R5bGVS
YXJlSW5oZXJpdGVkRGF0YS5jcHAgKi8sCiAJCQkJQkMyMjcyRTIwRTgyRUU5QjAwRTdGOTc1IC8q
IFN0eWxlUmFyZUluaGVyaXRlZERhdGEuaCAqLywKIAkJCQlCQzIyNzJCQTBFODJFQUFFMDBFN0Y5
NzUgLyogU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAgKi8sCkBAIC0yNzYwNCw2ICsyNzYx
Nyw3IEBACiAJCQkJQzIwMTVDMDkxQkU2RkUyQzAwODIyMzg5IC8qIEZvbnRWYXJpYW50QnVpbGRl
ci5oICovLAogCQkJCUNENEUwQUZBMTFGN0JDMjcwMDlEMzgxMSAvKiBmdWxsc2NyZWVuLmNzcyAq
LywKIAkJCQk5M0NBNEM5OTA5REY5M0ZBMDBERjg2NzcgLyogaHRtbC5jc3MgKi8sCisJCQkJQ0E4
OEFENTQyM0Q2NkFCMzAwNzVEQzE3IC8qIEltYWdlV2l0aFNjYWxlLmggKi8sCiAJCQkJRTU1RjQ5
NzkxNTFCODg4MDAwQkI2N0RCIC8qIExlbmd0aEZ1bmN0aW9ucy5jcHAgKi8sCiAJCQkJRTVCQTdE
NjIxNTE0MzdDQTAwRkUxRTNGIC8qIExlbmd0aEZ1bmN0aW9ucy5oICovLAogCQkJCTkzQ0E0QzlB
MDlERjkzRkEwMERGODY3NyAvKiBtYWtlLWNzcy1maWxlLWFycmF5cy5wbCAqLywKQEAgLTMxMzU3
LDYgKzMxMzcxLDcgQEAKIAkJCQkxMTk5RkE0NjIwOEUzNUEzMDAyMzU4Q0MgLyogTGF5b3V0Q29u
dGFpbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RjI2QkI2QzIzMzQzRTZGMDAyRjJCRUEgLyog
TGF5b3V0Q29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTEzMTBDRjUyMEJBNEE0QzAwNjVB
OEQwIC8qIExheW91dERlc2NlbmRhbnRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQx
ODAyNTUyM0Q0NTQ5QjAwRkZCMDcxIC8qIExheW91dEludGVncmF0aW9uQm94VHJlZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTRBQkFCREQyMzYwODhGRTAwRkE0MzQ1IC8qIExheW91dEludGVncmF0
aW9uTGluZUxheW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTEzMTBDRjQyMEJBNEEzRDAwNjVB
OEQwIC8qIExheW91dEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzFENzJGNjE1RkU2
OTUzMDBDNEMwN0UgLyogTGF5b3V0TWlsZXN0b25lLmggaW4gSGVhZGVycyAqLywKQEAgLTMyMDUw
LDcgKzMyMDY1LDYgQEAKIAkJCQk0NThGRTQwQTE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2Vh
cmNoRmllbGQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTFBNTRGMEYzOTIzMzEwMEMzNzg4NCAv
KiBSZW5kZXJTZWxlY3Rpb25JbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlBQjI0N0E2RDBBRkQ2
MzgzMDAzRkE1RkQgLyogUmVuZGVyU2xpZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDE4MDI1
NTIzRDQ1NDlCMDBGRkIwNzEgLyogTGF5b3V0SW50ZWdyYXRpb25Cb3hUcmVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzMTk1NUE4ODE2MEQxOTkyMDA4NTgwMjUgLyogUmVuZGVyU25hcHNob3R0ZWRQ
bHVnSW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEM4RkFFMEREQ0QzMUIwMEI1OTJGNCAvKiBS
ZW5kZXJTdHlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI2NjgwRTgxQ0I3MTAwQjI1OTY1
IC8qIFJlbmRlclN0eWxlQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTUsMTcgKzk1LDE3IEBAIHZvaWQgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6Y3Vyc29yRWxl
bWVudEMKICAgICBtX2hvdFNwb3Quc2V0WShzdGF0aWNfY2FzdDxpbnQ+KHkpKTsKIH0KIAotc3Rk
OjpwYWlyPENhY2hlZEltYWdlKiwgZmxvYXQ+IENTU0N1cnNvckltYWdlVmFsdWU6OmxvYWRJbWFn
ZShDYWNoZWRSZXNvdXJjZUxvYWRlciYgbG9hZGVyLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlv
bnMmIG9wdGlvbnMpCitJbWFnZVdpdGhTY2FsZSBDU1NDdXJzb3JJbWFnZVZhbHVlOjpzZWxlY3RC
ZXN0Rml0SW1hZ2UoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIGlmIChpczxDU1NJ
bWFnZVNldFZhbHVlPihtX2ltYWdlVmFsdWUuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZG93bmNh
c3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKS5sb2FkQmVzdEZpdEltYWdl
KGxvYWRlciwgb3B0aW9ucyk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVNldFZh
bHVlPihtX2ltYWdlVmFsdWUuZ2V0KCkpLnNlbGVjdEJlc3RGaXRJbWFnZShkb2N1bWVudCk7CiAK
LSAgICBpZiAoYXV0byogY3Vyc29yRWxlbWVudCA9IHVwZGF0ZUN1cnNvckVsZW1lbnQoKmxvYWRl
ci5kb2N1bWVudCgpKSkgeworICAgIGlmIChhdXRvKiBjdXJzb3JFbGVtZW50ID0gdXBkYXRlQ3Vy
c29yRWxlbWVudChkb2N1bWVudCkpIHsKICAgICAgICAgaWYgKGN1cnNvckVsZW1lbnQtPmhyZWYo
KSAhPSBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX2ltYWdlVmFsdWUuZ2V0KCkpLnVybCgpKQot
ICAgICAgICAgICAgbV9pbWFnZVZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKGxvYWRlci5k
b2N1bWVudCgpLT5jb21wbGV0ZVVSTChjdXJzb3JFbGVtZW50LT5ocmVmKCkpLCBtX2xvYWRlZEZy
b21PcGFxdWVTb3VyY2UpOworICAgICAgICAgICAgbV9pbWFnZVZhbHVlID0gQ1NTSW1hZ2VWYWx1
ZTo6Y3JlYXRlKGRvY3VtZW50LmNvbXBsZXRlVVJMKGN1cnNvckVsZW1lbnQtPmhyZWYoKSksIG1f
bG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHsgZG93bmNhc3Q8
Q1NTSW1hZ2VWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKS5sb2FkSW1hZ2UobG9hZGVyLCBvcHRp
b25zKSwgMSB9OworICAgIHJldHVybiB7IG1faW1hZ2VWYWx1ZS5wdHIoKSAsIDEgfTsKIH0KIAog
Ym9vbCBDU1NDdXJzb3JJbWFnZVZhbHVlOjplcXVhbHMoY29uc3QgQ1NTQ3Vyc29ySW1hZ2VWYWx1
ZSYgb3RoZXIpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VW
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZh
bHVlLmgJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJ
bWFnZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKIAogI3ByYWdtYSBv
bmNlCiAKLSNpbmNsdWRlICJDU1NWYWx1ZS5oIgorI2luY2x1ZGUgIkltYWdlV2l0aFNjYWxlLmgi
CiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlck9wdGlvbnMu
aCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtMzQsNiArMzQsMTAgQEAgY2xhc3MgRWxl
bWVudDsKIGNsYXNzIFNWR0N1cnNvckVsZW1lbnQ7CiBjbGFzcyBTVkdFbGVtZW50OwogCituYW1l
c3BhY2UgU3R5bGUgeworY2xhc3MgQnVpbGRlclN0YXRlOworfQorCiBjbGFzcyBDU1NDdXJzb3JJ
bWFnZVZhbHVlIGZpbmFsIDogcHVibGljIENTU1ZhbHVlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UmVmPENTU0N1cnNvckltYWdlVmFsdWU+IGNyZWF0ZShSZWY8Q1NTVmFsdWU+JiYgaW1hZ2VWYWx1
ZSwgYm9vbCBoYXNIb3RTcG90LCBjb25zdCBJbnRQb2ludCYgaG90U3BvdCwgTG9hZGVkRnJvbU9w
YXF1ZVNvdXJjZSBsb2FkZWRGcm9tT3BhcXVlU291cmNlKQpAQCAtNTYsNyArNjAsNyBAQCBwdWJs
aWM6CiAKICAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4dCgpIGNvbnN0OwogCi0gICAgc3RkOjpwYWly
PENhY2hlZEltYWdlKiwgZmxvYXQ+IGxvYWRJbWFnZShDYWNoZWRSZXNvdXJjZUxvYWRlciYsIGNv
bnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYpOworICAgIEltYWdlV2l0aFNjYWxlIHNlbGVjdEJl
c3RGaXRJbWFnZShjb25zdCBEb2N1bWVudCYpOwogCiAgICAgdm9pZCByZW1vdmVSZWZlcmVuY2Vk
RWxlbWVudChTVkdFbGVtZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFn
ZVNldFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VT
ZXRWYWx1ZS5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJ
bWFnZVNldFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTkgKzI4LDIwIEBACiAKICNp
bmNsdWRlICJDU1NJbWFnZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIK
LSNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVy
LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlN0eWxlQnVpbGRlclN0YXRlLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU0lt
YWdlU2V0VmFsdWU6OkNTU0ltYWdlU2V0VmFsdWUoTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSBsb2Fk
ZWRGcm9tT3BhcXVlU291cmNlKQorUmVmPENTU0ltYWdlU2V0VmFsdWU+IENTU0ltYWdlU2V0VmFs
dWU6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTSW1hZ2VTZXRWYWx1
ZSk7Cit9CisKK0NTU0ltYWdlU2V0VmFsdWU6OkNTU0ltYWdlU2V0VmFsdWUoKQogICAgIDogQ1NT
VmFsdWVMaXN0KEltYWdlU2V0Q2xhc3MsIENvbW1hU2VwYXJhdG9yKQotICAgICwgbV9sb2FkZWRG
cm9tT3BhcXVlU291cmNlKGxvYWRlZEZyb21PcGFxdWVTb3VyY2UpCiB7CiB9CiAKQEAgLTUyLDE1
ICs1MywxNCBAQCB2b2lkIENTU0ltYWdlU2V0VmFsdWU6OmZpbGxJbWFnZVNldCgpCiAgICAgc2l6
ZV90IGkgPSAwOwogICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7CiAgICAgICAgIENTU1ZhbHVlKiBp
bWFnZVZhbHVlID0gaXRlbShpKTsKLSAgICAgICAgVVJMIGltYWdlVVJMID0gZG93bmNhc3Q8Q1NT
SW1hZ2VWYWx1ZT4oKmltYWdlVmFsdWUpLnVybCgpOwotCisgICAgICAgIEFTU0VSVChpczxDU1NJ
bWFnZVZhbHVlPihpbWFnZVZhbHVlKSB8fCBpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihpbWFn
ZVZhbHVlKSk7CiAgICAgICAgICsraTsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oaSA8IGxlbmd0aCk7CiAgICAgICAgIENTU1ZhbHVlKiBzY2FsZUZhY3RvclZhbHVl
ID0gaXRlbShpKTsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnNjYWxlRmFjdG9yVmFsdWUpLmZsb2F0VmFsdWUoKTsKIAogICAgICAgICBJ
bWFnZVdpdGhTY2FsZSBpbWFnZTsKLSAgICAgICAgaW1hZ2UuaW1hZ2VVUkwgPSBpbWFnZVVSTDsK
KyAgICAgICAgaW1hZ2UudmFsdWUgPSBpbWFnZVZhbHVlOwogICAgICAgICBpbWFnZS5zY2FsZUZh
Y3RvciA9IHNjYWxlRmFjdG9yOwogICAgICAgICBtX2ltYWdlc0luU2V0LmFwcGVuZChpbWFnZSk7
CiAgICAgICAgICsraTsKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBDU1NJbWFnZVNldFZhbHVlOjpm
aWxsSW1hZ2VTZXQoKQogICAgIHN0ZDo6c29ydChtX2ltYWdlc0luU2V0LmJlZ2luKCksIG1faW1h
Z2VzSW5TZXQuZW5kKCksIENTU0ltYWdlU2V0VmFsdWU6OmNvbXBhcmVCeVNjYWxlRmFjdG9yKTsK
IH0KIAotQ1NTSW1hZ2VTZXRWYWx1ZTo6SW1hZ2VXaXRoU2NhbGUgQ1NTSW1hZ2VTZXRWYWx1ZTo6
YmVzdEltYWdlRm9yU2NhbGVGYWN0b3IoKQorSW1hZ2VXaXRoU2NhbGUgQ1NTSW1hZ2VTZXRWYWx1
ZTo6YmVzdEltYWdlRm9yU2NhbGVGYWN0b3IoKQogewogICAgIGlmICghbV9pbWFnZXNJblNldC5z
aXplKCkpCiAgICAgICAgIGZpbGxJbWFnZVNldCgpOwpAQCAtODUsNDIgKzg1LDUyIEBAIENTU0lt
YWdlU2V0VmFsdWU6OkltYWdlV2l0aFNjYWxlIENTU0ltYWcKICAgICByZXR1cm4gaW1hZ2U7CiB9
CiAKLXN0ZDo6cGFpcjxDYWNoZWRJbWFnZSosIGZsb2F0PiBDU1NJbWFnZVNldFZhbHVlOjpsb2Fk
QmVzdEZpdEltYWdlKENhY2hlZFJlc291cmNlTG9hZGVyJiBsb2FkZXIsIGNvbnN0IFJlc291cmNl
TG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKK0NhY2hlZEltYWdlKiBDU1NJbWFnZVNldFZhbHVlOjpj
YWNoZWRJbWFnZSgpIGNvbnN0CiB7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbG9hZGVyLmRv
Y3VtZW50KCk7Ci0gICAgQVNTRVJUKGRvY3VtZW50KTsKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFn
ZVZhbHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1
ZT4obV9zZWxlY3RlZEltYWdlVmFsdWUpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1h
Z2VWYWx1ZT4oKm1fc2VsZWN0ZWRJbWFnZVZhbHVlKS5jYWNoZWRJbWFnZSgpOworICAgIHJldHVy
biBudWxscHRyOworfQogCi0gICAgdXBkYXRlRGV2aWNlU2NhbGVGYWN0b3IoKmRvY3VtZW50KTsK
K0ltYWdlV2l0aFNjYWxlIENTU0ltYWdlU2V0VmFsdWU6OnNlbGVjdEJlc3RGaXRJbWFnZShjb25z
dCBEb2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgdXBkYXRlRGV2aWNlU2NhbGVGYWN0b3IoZG9j
dW1lbnQpOwogCiAgICAgaWYgKCFtX2FjY2Vzc2VkQmVzdEZpdEltYWdlKSB7CiAgICAgICAgIG1f
YWNjZXNzZWRCZXN0Rml0SW1hZ2UgPSB0cnVlOwotCi0gICAgICAgIC8vIEZJWE1FOiBJbiB0aGUg
ZnV0dXJlLCB3ZSB3YW50IHRvIHRha2UgbXVjaCBtb3JlIHRoYW4gZGV2aWNlU2NhbGVGYWN0b3Ig
aW50byBhY291bnQgaGVyZS4KLSAgICAgICAgLy8gQWxsIGZvcm1zIG9mIHNjYWxlIHNob3VsZCBi
ZSBpbmNsdWRlZDogUGFnZTo6cGFnZVNjYWxlRmFjdG9yKCksIEZyYW1lOjpwYWdlWm9vbUZhY3Rv
cigpLAotICAgICAgICAvLyBhbmQgYW55IENTUyB0cmFuc2Zvcm1zLiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE2OTgKLSAgICAgICAgSW1hZ2VXaXRoU2NhbGUgaW1h
Z2UgPSBiZXN0SW1hZ2VGb3JTY2FsZUZhY3RvcigpOwotCi0gICAgICAgIFJlc291cmNlTG9hZGVy
T3B0aW9ucyBsb2FkT3B0aW9ucyA9IG9wdGlvbnM7Ci0gICAgICAgIGxvYWRPcHRpb25zLmxvYWRl
ZEZyb21PcGFxdWVTb3VyY2UgPSBtX2xvYWRlZEZyb21PcGFxdWVTb3VyY2U7Ci0gICAgICAgIENh
Y2hlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KFJlc291cmNlUmVxdWVzdChkb2N1bWVudC0+Y29t
cGxldGVVUkwoaW1hZ2UuaW1hZ2VVUkwpKSwgbG9hZE9wdGlvbnMpOwotICAgICAgICByZXF1ZXN0
LnNldEluaXRpYXRvcihjYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzKCkuY3NzKTsKLSAg
ICAgICAgaWYgKG9wdGlvbnMubW9kZSA9PSBGZXRjaE9wdGlvbnM6Ok1vZGU6OkNvcnMpCi0gICAg
ICAgICAgICByZXF1ZXN0LnVwZGF0ZUZvckFjY2Vzc0NvbnRyb2woKmRvY3VtZW50KTsKLQotICAg
ICAgICBtX2NhY2hlZEltYWdlID0gbG9hZGVyLnJlcXVlc3RJbWFnZShXVEZNb3ZlKHJlcXVlc3Qp
KS52YWx1ZV9vcihudWxscHRyKTsKLSAgICAgICAgbV9iZXN0Rml0SW1hZ2VTY2FsZUZhY3RvciA9
IGltYWdlLnNjYWxlRmFjdG9yOworICAgICAgICBtX2Jlc3RGaXRJbWFnZSA9IGJlc3RJbWFnZUZv
clNjYWxlRmFjdG9yKCk7CiAgICAgfQotICAgIHJldHVybiB7IG1fY2FjaGVkSW1hZ2UuZ2V0KCks
IG1fYmVzdEZpdEltYWdlU2NhbGVGYWN0b3IgfTsKKworICAgIHJldHVybiBtX2Jlc3RGaXRJbWFn
ZTsKIH0KIAogdm9pZCBDU1NJbWFnZVNldFZhbHVlOjp1cGRhdGVEZXZpY2VTY2FsZUZhY3Rvcihj
b25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCiB7CisKKyAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVy
ZSwgd2Ugd2FudCB0byB0YWtlIG11Y2ggbW9yZSB0aGFuIGRldmljZVNjYWxlRmFjdG9yIGludG8g
YWNvdW50IGhlcmUuCisgICAgLy8gQWxsIGZvcm1zIG9mIHNjYWxlIHNob3VsZCBiZSBpbmNsdWRl
ZDogUGFnZTo6cGFnZVNjYWxlRmFjdG9yKCksIEZyYW1lOjpwYWdlWm9vbUZhY3RvcigpLAorICAg
IC8vIGFuZCBhbnkgQ1NTIHRyYW5zZm9ybXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04MTY5OAogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gZG9jdW1lbnQu
cGFnZSgpID8gZG9jdW1lbnQucGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpIDogMTsKICAgICBp
ZiAoZGV2aWNlU2NhbGVGYWN0b3IgPT0gbV9kZXZpY2VTY2FsZUZhY3RvcikKICAgICAgICAgcmV0
dXJuOwogICAgIG1fZGV2aWNlU2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvcjsKICAgICBt
X2FjY2Vzc2VkQmVzdEZpdEltYWdlID0gZmFsc2U7Ci0gICAgbV9jYWNoZWRJbWFnZSA9IG51bGxw
dHI7CisgICAgbV9zZWxlY3RlZEltYWdlVmFsdWUgPSBudWxscHRyOworfQorCitSZWY8Q1NTSW1h
Z2VTZXRWYWx1ZT4gQ1NTSW1hZ2VTZXRWYWx1ZTo6aW1hZ2VTZXRXaXRoU3R5bGVzUmVzb2x2ZWQo
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQoreworICAgIFJlZjxDU1NJbWFnZVNl
dFZhbHVlPiByZXN1bHQgPSBDU1NJbWFnZVNldFZhbHVlOjpjcmVhdGUoKTsKKyAgICBzaXplX3Qg
bGVuZ3RoID0gdGhpcy0+bGVuZ3RoKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5n
dGg7IGkgKz0gMikgeworICAgICAgICBDU1NWYWx1ZSogaW1hZ2VWYWx1ZSA9IGl0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soaSk7CisgICAgICAgIHJlc3VsdC0+YXBwZW5kKGJ1aWxkZXJTdGF0ZS5yZXNv
bHZlSW1hZ2VTdHlsZXMoKmltYWdlVmFsdWUpKTsKKyAgICAgICAgcmVzdWx0LT5hcHBlbmQoKml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSArIDEpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiBTdHJpbmcgQ1NTSW1hZ2VTZXRWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CkBA
IC0xNTUsOSArMTY1LDcgQEAgU3RyaW5nIENTU0ltYWdlU2V0VmFsdWU6OmN1c3RvbUNTU1RleHQo
KQogCiBib29sIENTU0ltYWdlU2V0VmFsdWU6OnRyYXZlcnNlU3VicmVzb3VyY2VzKGNvbnN0IFdU
Rjo6RnVuY3Rpb248Ym9vbCAoY29uc3QgQ2FjaGVkUmVzb3VyY2UmKT4mIGhhbmRsZXIpIGNvbnN0
CiB7Ci0gICAgaWYgKCFtX2NhY2hlZEltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIGhhbmRsZXIoKm1fY2FjaGVkSW1hZ2UpOworICAgIHJldHVybiBtX3NlbGVjdGVkSW1h
Z2VWYWx1ZSAmJiBtX3NlbGVjdGVkSW1hZ2VWYWx1ZS0+dHJhdmVyc2VTdWJyZXNvdXJjZXMoaGFu
ZGxlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NJbWFnZVNldFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ltYWdlU2V0VmFsdWUuaAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ltYWdlU2V0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNTUgKzI3LDUzIEBA
CiAKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhh
bmRsZS5oIgorI2luY2x1ZGUgIkltYWdlV2l0aFNjYWxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VM
b2FkZXJPcHRpb25zLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhY2hlZEltYWdlOwog
Y2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBEb2N1bWVudDsKK2NsYXNzIENTU0lt
YWdlVmFsdWU7CisKK25hbWVzcGFjZSBTdHlsZSB7CitjbGFzcyBCdWlsZGVyU3RhdGU7Cit9CisK
IAogY2xhc3MgQ1NTSW1hZ2VTZXRWYWx1ZSBmaW5hbCA6IHB1YmxpYyBDU1NWYWx1ZUxpc3Qgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gY3JlYXRlKExvYWRlZEZy
b21PcGFxdWVTb3VyY2UgbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IENTU0ltYWdlU2V0VmFsdWUobG9hZGVkRnJvbU9wYXF1ZVNvdXJj
ZSkpOwotICAgIH0KKyAgICBzdGF0aWMgUmVmPENTU0ltYWdlU2V0VmFsdWU+IGNyZWF0ZSgpOwog
ICAgIH5DU1NJbWFnZVNldFZhbHVlKCk7CiAKLSAgICBzdGQ6OnBhaXI8Q2FjaGVkSW1hZ2UqLCBm
bG9hdD4gIGxvYWRCZXN0Rml0SW1hZ2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNv
dXJjZUxvYWRlck9wdGlvbnMmKTsKLSAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UoKSBjb25z
dCB7IHJldHVybiBtX2NhY2hlZEltYWdlLmdldCgpOyB9CisgICAgSW1hZ2VXaXRoU2NhbGUgc2Vs
ZWN0QmVzdEZpdEltYWdlKGNvbnN0IERvY3VtZW50Jik7CisgICAgQ2FjaGVkSW1hZ2UqIGNhY2hl
ZEltYWdlKCkgY29uc3Q7CiAKICAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4dCgpIGNvbnN0OwogCi0g
ICAgc3RydWN0IEltYWdlV2l0aFNjYWxlIHsKLSAgICAgICAgVVJMIGltYWdlVVJMOwotICAgICAg
ICBmbG9hdCBzY2FsZUZhY3RvcjsKLSAgICB9OwotCiAgICAgYm9vbCB0cmF2ZXJzZVN1YnJlc291
cmNlcyhjb25zdCBXVEY6OkZ1bmN0aW9uPGJvb2wgKGNvbnN0IENhY2hlZFJlc291cmNlJik+JiBo
YW5kbGVyKSBjb25zdDsKIAogICAgIHZvaWQgdXBkYXRlRGV2aWNlU2NhbGVGYWN0b3IoY29uc3Qg
RG9jdW1lbnQmKTsKIAotICAgIFVSTCBiZXN0SW1hZ2VGb3JTY2FsZUZhY3RvclVSTCgpIHsgcmV0
dXJuIGJlc3RJbWFnZUZvclNjYWxlRmFjdG9yKCkuaW1hZ2VVUkw7IH0KKyAgICBSZWY8Q1NTSW1h
Z2VTZXRWYWx1ZT4gaW1hZ2VTZXRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VXaXRoU2NhbGUgYmVzdEltYWdlRm9yU2NhbGVG
YWN0b3IoKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDU1NJbWFnZVNldFZhbHVlKExvYWRl
ZEZyb21PcGFxdWVTb3VyY2UpOworICAgIENTU0ltYWdlU2V0VmFsdWUoKTsKIAogICAgIHZvaWQg
ZmlsbEltYWdlU2V0KCk7CiAgICAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVCeVNjYWxlRmFj
dG9yKEltYWdlV2l0aFNjYWxlIGZpcnN0LCBJbWFnZVdpdGhTY2FsZSBzZWNvbmQpIHsgcmV0dXJu
IGZpcnN0LnNjYWxlRmFjdG9yIDwgc2Vjb25kLnNjYWxlRmFjdG9yOyB9CiAKLSAgICBDYWNoZWRS
ZXNvdXJjZUhhbmRsZTxDYWNoZWRJbWFnZT4gbV9jYWNoZWRJbWFnZTsKKyAgICBSZWZQdHI8Q1NT
VmFsdWU+IG1fc2VsZWN0ZWRJbWFnZVZhbHVlOwogICAgIGJvb2wgbV9hY2Nlc3NlZEJlc3RGaXRJ
bWFnZSB7IGZhbHNlIH07Ci0gICAgZmxvYXQgbV9iZXN0Rml0SW1hZ2VTY2FsZUZhY3RvciB7IDEg
fTsKKyAgICBJbWFnZVdpdGhTY2FsZSBtX2Jlc3RGaXRJbWFnZTsKICAgICBmbG9hdCBtX2Rldmlj
ZVNjYWxlRmFjdG9yIHsgMSB9OwotCiAgICAgVmVjdG9yPEltYWdlV2l0aFNjYWxlPiBtX2ltYWdl
c0luU2V0OwotICAgIExvYWRlZEZyb21PcGFxdWVTb3VyY2UgbV9sb2FkZWRGcm9tT3BhcXVlU291
cmNlIHsgTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6Tm8gfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXIuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1MSw3ICsyMTUx
LDcgQEAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZQogc3RhdGljIFJl
ZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUN1cnNvcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Y29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgYm9vbCBpblF1aXJrc01vZGUpCiB7CiAg
ICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdDsKLSAgICB3aGlsZSAoUmVmUHRyPENTU1ZhbHVl
PiBpbWFnZSA9IGNvbnN1bWVJbWFnZShyYW5nZSwgY29udGV4dCwgQ29uc3VtZUdlbmVyYXRlZElt
YWdlOjpGb3JiaWQpKSB7CisgICAgd2hpbGUgKFJlZlB0cjxDU1NWYWx1ZT4gaW1hZ2UgPSBjb25z
dW1lSW1hZ2UocmFuZ2UsIGNvbnRleHQsIHsgQWxsb3dlZEltYWdlVHlwZXM6OlVSTEZ1bmN0aW9u
LCBBbGxvd2VkSW1hZ2VUeXBlczo6SW1hZ2VTZXQgfSkpIHsKICAgICAgICAgZG91YmxlIG51bTsK
ICAgICAgICAgSW50UG9pbnQgaG90U3BvdCgtMSwgLTEpOwogICAgICAgICBib29sIGhvdFNwb3RT
cGVjaWZpZWQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQ3OSwyNCArMTQ3OSwxNiBAQCBzdGF0aWMgUmVmUHRyPENTU1Zh
bHVlPiBjb25zdW1lR2VuZXJhdGVkCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIFN0
cmluZ1ZpZXcgY29uc3VtZVVybE9yU3RyaW5nQXNTdHJpbmdWaWV3KENTU1BhcnNlclRva2VuUmFu
Z2UmIGFyZ3MpCi17Ci0gICAgaWYgKGFyZ3MucGVlaygpLnR5cGUoKSA9PSBTdHJpbmdUb2tlbikK
LSAgICAgICAgcmV0dXJuIGFyZ3MuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS52YWx1ZSgp
OwotICAgIHJldHVybiBjb25zdW1lVXJsQXNTdHJpbmdWaWV3KGFyZ3MpOwotfQotCi1zdGF0aWMg
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2VTZXQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCitzdGF0aWMgUmVmUHRyPENTU1Zh
bHVlPiBjb25zdW1lSW1hZ2VTZXQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENT
U1BhcnNlckNvbnRleHQmIGNvbnRleHQsIE9wdGlvblNldDxBbGxvd2VkSW1hZ2VUeXBlcz4gYWxs
b3dlZEltYWdlVHlwZXMpCiB7CiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZUNvcHkgPSBy
YW5nZTsKICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFu
Z2VDb3B5KTsKLSAgICBSZWZQdHI8Q1NTSW1hZ2VTZXRWYWx1ZT4gaW1hZ2VTZXQgPSBDU1NJbWFn
ZVNldFZhbHVlOjpjcmVhdGUoY29udGV4dC5pc0NvbnRlbnRPcGFxdWUgPyBMb2FkZWRGcm9tT3Bh
cXVlU291cmNlOjpZZXMgOiBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpObyk7CisgICAgUmVmUHRy
PENTU0ltYWdlU2V0VmFsdWU+IGltYWdlU2V0ID0gQ1NTSW1hZ2VTZXRWYWx1ZTo6Y3JlYXRlKCk7
CiAgICAgZG8gewotICAgICAgICBBdG9tU3RyaW5nIHVybFZhbHVlID0gY29uc3VtZVVybE9yU3Ry
aW5nQXNTdHJpbmdWaWV3KGFyZ3MpLnRvQXRvbVN0cmluZygpOwotICAgICAgICBpZiAodXJsVmFs
dWUuaXNOdWxsKCkpCisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gaW1hZ2UgPSBjb25zdW1lSW1h
Z2UoYXJncywgY29udGV4dCwgKGFsbG93ZWRJbWFnZVR5cGVzIHwgQWxsb3dlZEltYWdlVHlwZXM6
OlJhd1N0cmluZ0FzVVJMKSAtIEFsbG93ZWRJbWFnZVR5cGVzOjpJbWFnZVNldCk7CisgICAgICAg
IGlmICghaW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBSZWZQ
dHI8Q1NTVmFsdWU+IGltYWdlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKGNvbXBsZXRlVVJMKGNv
bnRleHQsIHVybFZhbHVlKSwgY29udGV4dC5pc0NvbnRlbnRPcGFxdWUgPyBMb2FkZWRGcm9tT3Bh
cXVlU291cmNlOjpZZXMgOiBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpObyk7CiAgICAgICAgIGlt
YWdlU2V0LT5hcHBlbmQoaW1hZ2UucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICAgICAgY29uc3Qg
Q1NTUGFyc2VyVG9rZW4mIHRva2VuID0gYXJncy5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgp
OwpAQCAtMTcxMSwxOSArMTcwMywyNSBAQCBSZWZQdHI8Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVT
aW5nbGVTaGFkCiAgICAgcmV0dXJuIENTU1NoYWRvd1ZhbHVlOjpjcmVhdGUoV1RGTW92ZShob3Jp
em9udGFsT2Zmc2V0KSwgV1RGTW92ZSh2ZXJ0aWNhbE9mZnNldCksIFdURk1vdmUoYmx1clJhZGl1
cyksIFdURk1vdmUoc3ByZWFkRGlzdGFuY2UpLCBXVEZNb3ZlKHN0eWxlKSwgV1RGTW92ZShjb2xv
cikpOwogfQogCi1SZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZShDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0LCBDb25zdW1lR2VuZXJhdGVkSW1h
Z2UgZ2VuZXJhdGVkSW1hZ2UpCitSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZShDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0LCBPcHRpb25TZXQ8
QWxsb3dlZEltYWdlVHlwZXM+IGFsbG93ZWRJbWFnZVR5cGVzKQogewotICAgIEF0b21TdHJpbmcg
dXJpID0gY29uc3VtZVVybEFzU3RyaW5nVmlldyhyYW5nZSkudG9BdG9tU3RyaW5nKCk7Ci0gICAg
aWYgKCF1cmkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBDU1NJbWFnZVZhbHVlOjpjcmVhdGUo
Y29tcGxldGVVUkwoY29udGV4dCwgdXJpKSwgY29udGV4dC5pc0NvbnRlbnRPcGFxdWUgPyBMb2Fk
ZWRGcm9tT3BhcXVlU291cmNlOjpZZXMgOiBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpObyk7Cisg
ICAgaWYgKChyYW5nZS5wZWVrKCkudHlwZSgpID09IFN0cmluZ1Rva2VuKSAmJiAoYWxsb3dlZElt
YWdlVHlwZXMgJiBBbGxvd2VkSW1hZ2VUeXBlczo6UmF3U3RyaW5nQXNVUkwpKQorICAgICAgICBy
ZXR1cm4gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKGNvbXBsZXRlVVJMKGNvbnRleHQsIHJhbmdlLmNv
bnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFsdWUoKS50b0F0b21TdHJpbmcoKSksIGNvbnRl
eHQuaXNDb250ZW50T3BhcXVlID8gTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6WWVzIDogTG9hZGVk
RnJvbU9wYXF1ZVNvdXJjZTo6Tm8pOwogCiAgICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0g
RnVuY3Rpb25Ub2tlbikgewogICAgICAgICBDU1NWYWx1ZUlEIGlkID0gcmFuZ2UucGVlaygpLmZ1
bmN0aW9uSWQoKTsKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlV2Via2l0SW1hZ2VTZXQgfHwg
aWQgPT0gQ1NTVmFsdWVJbWFnZVNldCkKLSAgICAgICAgICAgIHJldHVybiBjb25zdW1lSW1hZ2VT
ZXQocmFuZ2UsIGNvbnRleHQpOwotICAgICAgICBpZiAoZ2VuZXJhdGVkSW1hZ2UgPT0gQ29uc3Vt
ZUdlbmVyYXRlZEltYWdlOjpBbGxvdyAmJiBpc0dlbmVyYXRlZEltYWdlKGlkKSkKKyAgICAgICAg
aWYgKChhbGxvd2VkSW1hZ2VUeXBlcyAmIEFsbG93ZWRJbWFnZVR5cGVzOjpJbWFnZVNldCkgJiYg
KGlkID09IENTU1ZhbHVlV2Via2l0SW1hZ2VTZXQgfHwgaWQgPT0gQ1NTVmFsdWVJbWFnZVNldCkp
CisgICAgICAgICAgICByZXR1cm4gY29uc3VtZUltYWdlU2V0KHJhbmdlLCBjb250ZXh0LCBhbGxv
d2VkSW1hZ2VUeXBlcyk7CisgICAgICAgIGlmICgoYWxsb3dlZEltYWdlVHlwZXMgJiBBbGxvd2Vk
SW1hZ2VUeXBlczo6R2VuZXJhdGVkSW1hZ2UpICYmIGlzR2VuZXJhdGVkSW1hZ2UoaWQpKQogICAg
ICAgICAgICAgcmV0dXJuIGNvbnN1bWVHZW5lcmF0ZWRJbWFnZShyYW5nZSwgY29udGV4dCk7CiAg
ICAgfQorCisgICAgaWYgKGFsbG93ZWRJbWFnZVR5cGVzICYgQWxsb3dlZEltYWdlVHlwZXM6OlVS
TEZ1bmN0aW9uKSB7CisgICAgICAgIGF1dG8gdXJpID0gY29uc3VtZVVybEFzU3RyaW5nVmlldyhy
YW5nZSk7CisgICAgICAgIGlmICghdXJpLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIENT
U0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTChjb250ZXh0LCB1cmkudG9BdG9tU3RyaW5n
KCkpLCBjb250ZXh0LmlzQ29udGVudE9wYXF1ZSA/IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6Olll
cyA6IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6Ok5vKTsKKyAgICB9CisKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NT
U1Byb3BlcnR5UGFyc2VySGVscGVycy5oCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiQ1NTU2hhZG93VmFsdWUuaCIKICNpbmNsdWRl
ICJDU1NWYWx1ZVBvb2wuaCIKICNpbmNsdWRlICJMZW5ndGguaCIgLy8gRm9yIFZhbHVlUmFuZ2UK
KyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
ODksMTIgKzkwLDE1IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0aW8K
IGJvb2wgY29uc3VtZVBvc2l0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2Rl
LCBVbml0bGVzc1F1aXJrLCBQb3NpdGlvblN5bnRheCwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiYgcmVzdWx0WCwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgcmVzdWx0WSk7CiBib29sIGNv
bnN1bWVPbmVPclR3b1ZhbHVlZFBvc2l0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJz
ZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiByZXN1bHRY
LCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiByZXN1bHRZKTsKIAotZW51bSBjbGFzcyBDb25z
dW1lR2VuZXJhdGVkSW1hZ2UgewotICAgIEFsbG93LAotICAgIEZvcmJpZAorZW51bSBjbGFzcyBB
bGxvd2VkSW1hZ2VUeXBlcyA6IHVpbnQ4X3QgeworICAgIFVSTEZ1bmN0aW9uID0gMSA8PCAwLAor
ICAgIFJhd1N0cmluZ0FzVVJMID0gMSA8PCAxLAorICAgIEltYWdlU2V0ID0gMSA8PCAyLAorICAg
IEdlbmVyYXRlZEltYWdlID0gMSA8PCAzCiB9OwogCi1SZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJ
bWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyQ29udGV4dCwgQ29uc3VtZUdlbmVy
YXRlZEltYWdlID0gQ29uc3VtZUdlbmVyYXRlZEltYWdlOjpBbGxvdyk7CitSZWZQdHI8Q1NTVmFs
dWU+IGNvbnN1bWVJbWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyQ29udGV4dCwg
T3B0aW9uU2V0PEFsbG93ZWRJbWFnZVR5cGVzPiA9IHsgQWxsb3dlZEltYWdlVHlwZXM6OlVSTEZ1
bmN0aW9uLCBBbGxvd2VkSW1hZ2VUeXBlczo6SW1hZ2VTZXQsIEFsbG93ZWRJbWFnZVR5cGVzOjpH
ZW5lcmF0ZWRJbWFnZSB9KTsKKwogUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2VPck5vbmUo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlckNvbnRleHQpOwogCiBlbnVtIGNsYXNzIEFs
bG93ZWRGaWx0ZXJGdW5jdGlvbnMgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMjU0ODA4
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMsNiArMzMzLDkgQEAgc3RhdGljIGlubGluZSBSZWZQ
dHI8U3R5bGVJbWFnZT4gYmxlbmRGdQogICAgIGlmICghZnJvbSB8fCAhdG8pCiAgICAgICAgIHJl
dHVybiB0bzsKIAorICAgIGZyb20gPSBmcm9tLT5zZWxlY3RlZEltYWdlKCk7CisgICAgdG8gPSB0
by0+c2VsZWN0ZWRJbWFnZSgpOworCiAgICAgLy8gQW5pbWF0aW9uIGJldHdlZW4gdHdvIGdlbmVy
YXRlZCBpbWFnZXMuIENyb3NzIGZhZGUgZm9yIGFsbCBvdGhlciBjYXNlcy4KICAgICBpZiAoaXM8
U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCp0
bykpIHsKICAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVyYXRlZCA9IGRv
d25jYXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCpmcm9tKS5pbWFnZVZhbHVlKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJ
KHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2Miw3ICs5NjIsNyBAQCB2b2lkIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllCiAKICAgICAgICAgICAgIGF1dG8gZHJh
d1Jlc3VsdCA9IGNvbnRleHQuZHJhd1RpbGVkSW1hZ2UoKmltYWdlLCBnZW9tZXRyeS5kZXN0UmVj
dCgpLCB0b0xheW91dFBvaW50KGdlb21ldHJ5LnJlbGF0aXZlUGhhc2UoKSksIGdlb21ldHJ5LnRp
bGVTaXplKCksIGdlb21ldHJ5LnNwYWNlU2l6ZSgpLCBvcHRpb25zKTsKICAgICAgICAgICAgIGlm
IChkcmF3UmVzdWx0ID09IEltYWdlRHJhd1Jlc3VsdDo6RGlkUmVxdWVzdERlY29kaW5nKSB7Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKGJnSW1hZ2UtPmlzQ2FjaGVkSW1hZ2UoKSk7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKGJnSW1hZ2UtPmhhc0NhY2hlZEltYWdlKCkpOwogICAgICAgICAgICAg
ICAgIGJnSW1hZ2UtPmNhY2hlZEltYWdlKCktPmFkZENsaWVudFdhaXRpbmdGb3JBc3luY0RlY29k
aW5nKCp0aGlzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1h
Z2UuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0
NCw3IEBAIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlOjpSZW5kZXJJbWEKIAogdm9pZCBS
ZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZTo6aW5pdGlhbGl6ZShSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlcikKIHsKLSAgICBSZW5kZXJJbWFnZVJlc291cmNlOjppbml0aWFsaXplKHJlbmRlcmVy
LCBtX3N0eWxlSW1hZ2UtPmlzQ2FjaGVkSW1hZ2UoKSA/IG1fc3R5bGVJbWFnZS5nZXQoKS5jYWNo
ZWRJbWFnZSgpIDogbnVsbHB0cik7CisgICAgUmVuZGVySW1hZ2VSZXNvdXJjZTo6aW5pdGlhbGl6
ZShyZW5kZXJlciwgbV9zdHlsZUltYWdlLT5oYXNDYWNoZWRJbWFnZSgpID8gbV9zdHlsZUltYWdl
LmdldCgpLmNhY2hlZEltYWdlKCkgOiBudWxscHRyKTsKICAgICBtX3N0eWxlSW1hZ2UtPmFkZENs
aWVudCh0aGlzLT5yZW5kZXJlcigpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTA3LDcgKzIxMDcsNyBAQCBzdGF0aWMgYm9vbCBjYW5EaXJlY3RseUNvbXBvc2l0
ZUJhY2tncm91CiAKICAgICAvLyBGSVhNRTogc3VwcG9ydCBncmFkaWVudHMgd2l0aCBpc0dlbmVy
YXRlZEltYWdlLgogICAgIGF1dG8qIHN0eWxlSW1hZ2UgPSBmaWxsTGF5ZXIuaW1hZ2UoKTsKLSAg
ICBpZiAoIXN0eWxlSW1hZ2UtPmlzQ2FjaGVkSW1hZ2UoKSkKKyAgICBpZiAoIXN0eWxlSW1hZ2Ut
Pmhhc0NhY2hlZEltYWdlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8qIGlt
YWdlID0gc3R5bGVJbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2UoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhcGVWYWx1ZS5jcHAJKHJldmlzaW9uIDI1NDgw
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBib29sIFNoYXBlVmFsdWU6OmlzSW1hZ2VWYWxp
ZCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKG1faW1hZ2UtPmlzQ2FjaGVkSW1hZ2UoKSkgeworICAgIGlmIChtX2ltYWdlLT5oYXND
YWNoZWRJbWFnZSgpKSB7CiAgICAgICAgIGF1dG8qIGNhY2hlZEltYWdlID0gbV9pbWFnZS0+Y2Fj
aGVkSW1hZ2UoKTsKICAgICAgICAgcmV0dXJuIGNhY2hlZEltYWdlICYmIGNhY2hlZEltYWdlLT5o
YXNJbWFnZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
dHlsZUNhY2hlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQsOCArMjQsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0
eWxlQ2FjaGVkSW1hZ2UuaCIKIAotI2luY2x1ZGUgIkNTU0N1cnNvckltYWdlVmFsdWUuaCIKLSNp
bmNsdWRlICJDU1NJbWFnZVNldFZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgog
I2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgpAQCAt
MzMsMTkgKzMxLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU3R5bGVDYWNoZWRJbWFn
ZTo6U3R5bGVDYWNoZWRJbWFnZShDU1NWYWx1ZSYgY3NzVmFsdWUpCitTdHlsZUNhY2hlZEltYWdl
OjpTdHlsZUNhY2hlZEltYWdlKENTU0ltYWdlVmFsdWUmIGNzc1ZhbHVlLCBmbG9hdCBzY2FsZUZh
Y3RvcikKICAgICA6IG1fY3NzVmFsdWUoY3NzVmFsdWUpCisgICAgLCBtX3NjYWxlRmFjdG9yKHNj
YWxlRmFjdG9yKQogewotICAgIEFTU0VSVChpczxDU1NJbWFnZVZhbHVlPihtX2Nzc1ZhbHVlKSB8
fCBpczxDU1NJbWFnZVNldFZhbHVlPihtX2Nzc1ZhbHVlKSB8fCBpczxDU1NDdXJzb3JJbWFnZVZh
bHVlPihtX2Nzc1ZhbHVlKSk7Ci0KICAgICBtX2lzQ2FjaGVkSW1hZ2UgPSB0cnVlOwotCi0gICAg
Ly8gQ1NTSW1hZ2VWYWx1ZSBkb2Vzbid0IGdldCBpbnZhbGlkYXRlZCBzbyB3ZSBjYW4gZ3JhYiB0
aGUgQ2FjaGVkSW1hZ2UgaW1tZWRpYXRlbHkgaWYgaXQgZXhpc3RzLgotICAgIGlmIChpczxDU1NJ
bWFnZVZhbHVlPihtX2Nzc1ZhbHVlKSkgewotICAgICAgICBtX2NhY2hlZEltYWdlID0gZG93bmNh
c3Q8Q1NTSW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZS5nZXQoKSkuY2FjaGVkSW1hZ2UoKTsKLSAgICAg
ICAgaWYgKG1fY2FjaGVkSW1hZ2UpCi0gICAgICAgICAgICBtX2lzUGVuZGluZyA9IGZhbHNlOwot
ICAgIH0KKyAgICBtX2NhY2hlZEltYWdlID0gbV9jc3NWYWx1ZS0+Y2FjaGVkSW1hZ2UoKTsKKyAg
ICBpZiAobV9jYWNoZWRJbWFnZSkKKyAgICAgICAgbV9pc1BlbmRpbmcgPSBmYWxzZTsKIH0KIAog
U3R5bGVDYWNoZWRJbWFnZTo6flN0eWxlQ2FjaGVkSW1hZ2UoKSA9IGRlZmF1bHQ7CkBAIC02OCw0
MSArNjEsMTQgQEAgYm9vbCBTdHlsZUNhY2hlZEltYWdlOjpvcGVyYXRvcj09KGNvbnN0IAogCiBV
UkwgU3R5bGVDYWNoZWRJbWFnZTo6aW1hZ2VVUkwoKQogewotICAgIGlmIChpczxDU1NJbWFnZVZh
bHVlPihtX2Nzc1ZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ltYWdlVmFsdWU+
KG1fY3NzVmFsdWUuZ2V0KCkpLnVybCgpOwotCi0gICAgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+
KG1fY3NzVmFsdWUpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4o
bV9jc3NWYWx1ZS5nZXQoKSkuYmVzdEltYWdlRm9yU2NhbGVGYWN0b3JVUkwoKTsKLQotICAgIGlm
IChpczxDU1NDdXJzb3JJbWFnZVZhbHVlPihtX2Nzc1ZhbHVlLmdldCgpKSkKLSAgICAgICAgcmV0
dXJuIGRvd25jYXN0PENTU0N1cnNvckltYWdlVmFsdWU+KG1fY3NzVmFsdWUuZ2V0KCkpLmltYWdl
VVJMKCk7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9OworICAg
IHJldHVybiBtX2Nzc1ZhbHVlLT51cmwoKTsKIH0KIAogdm9pZCBTdHlsZUNhY2hlZEltYWdlOjps
b2FkKENhY2hlZFJlc291cmNlTG9hZGVyJiBsb2FkZXIsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0
aW9ucyYgb3B0aW9ucykKIHsKICAgICBBU1NFUlQobV9pc1BlbmRpbmcpOwogICAgIG1faXNQZW5k
aW5nID0gZmFsc2U7Ci0KLSAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZSkpIHsK
LSAgICAgICAgYXV0byYgaW1hZ2VWYWx1ZSA9IGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KG1fY3Nz
VmFsdWUuZ2V0KCkpOwotICAgICAgICBtX2NhY2hlZEltYWdlID0gaW1hZ2VWYWx1ZS5sb2FkSW1h
Z2UobG9hZGVyLCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChp
czxDU1NJbWFnZVNldFZhbHVlPihtX2Nzc1ZhbHVlKSkgewotICAgICAgICBhdXRvJiBpbWFnZVNl
dFZhbHVlID0gZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4obV9jc3NWYWx1ZS5nZXQoKSk7Ci0g
ICAgICAgIHN0ZDo6dGllKG1fY2FjaGVkSW1hZ2UsIG1fc2NhbGVGYWN0b3IpID0gaW1hZ2VTZXRW
YWx1ZS5sb2FkQmVzdEZpdEltYWdlKGxvYWRlciwgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoaXM8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZS5nZXQo
KSkpIHsKLSAgICAgICAgYXV0byYgY3Vyc29yVmFsdWUgPSBkb3duY2FzdDxDU1NDdXJzb3JJbWFn
ZVZhbHVlPihtX2Nzc1ZhbHVlLmdldCgpKTsKLSAgICAgICAgc3RkOjp0aWUobV9jYWNoZWRJbWFn
ZSwgbV9zY2FsZUZhY3RvcikgPSBjdXJzb3JWYWx1ZS5sb2FkSW1hZ2UobG9hZGVyLCBvcHRpb25z
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBtX2NhY2hlZEltYWdlID0gbV9jc3NWYWx1
ZS0+bG9hZEltYWdlKGxvYWRlciwgb3B0aW9ucyk7CiB9CiAKIENhY2hlZEltYWdlKiBTdHlsZUNh
Y2hlZEltYWdlOjpjYWNoZWRJbWFnZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmgJKHJldmlzaW9uIDI1NDgwOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDEzICsyOSwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDU1NWYWx1ZTsKK2NsYXNzIENTU0ltYWdlVmFsdWU7CiBjbGFzcyBDYWNoZWRJbWFnZTsK
IGNsYXNzIERvY3VtZW50OwogCiBjbGFzcyBTdHlsZUNhY2hlZEltYWdlIGZpbmFsIDogcHVibGlj
IFN0eWxlSW1hZ2UgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8U3R5bGVDYWNoZWRJbWFnZT4gY3JlYXRlKENTU1ZhbHVlJiBjc3NWYWx1ZSkg
eyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHlsZUNhY2hlZEltYWdlKGNzc1ZhbHVlKSk7IH0KKyAg
ICBzdGF0aWMgUmVmPFN0eWxlQ2FjaGVkSW1hZ2U+IGNyZWF0ZShDU1NJbWFnZVZhbHVlJiBjc3NW
YWx1ZSwgZmxvYXQgc2NhbGVGYWN0b3IgPSAxKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFN0eWxl
Q2FjaGVkSW1hZ2UoY3NzVmFsdWUsIHNjYWxlRmFjdG9yKSk7IH0KICAgICB2aXJ0dWFsIH5TdHls
ZUNhY2hlZEltYWdlKCk7CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVJbWFnZSYg
b3RoZXIpIGNvbnN0IGZpbmFsOwpAQCAtNjQsMTAgKzY1LDEwIEBAIHB1YmxpYzoKICAgICBib29s
IGtub3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJFbGVtZW50KikgY29uc3QgZmluYWw7CiAKIHBy
aXZhdGU6Ci0gICAgU3R5bGVDYWNoZWRJbWFnZShDU1NWYWx1ZSYpOworICAgIFN0eWxlQ2FjaGVk
SW1hZ2UoQ1NTSW1hZ2VWYWx1ZSYsIGZsb2F0KTsKICAgICBVUkwgaW1hZ2VVUkwoKTsKIAotICAg
IFJlZjxDU1NWYWx1ZT4gbV9jc3NWYWx1ZTsKKyAgICBSZWY8Q1NTSW1hZ2VWYWx1ZT4gbV9jc3NW
YWx1ZTsKICAgICBib29sIG1faXNQZW5kaW5nIHsgdHJ1ZSB9OwogICAgIG11dGFibGUgZmxvYXQg
bV9zY2FsZUZhY3RvciB7IDEgfTsKICAgICBtdXRhYmxlIENhY2hlZFJlc291cmNlSGFuZGxlPENh
Y2hlZEltYWdlPiBtX2NhY2hlZEltYWdlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1cnNvckltYWdlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxl
ciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LTIwMDgsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
IE5vYW0gUm9zZW50aGFsIChub2FtQHdlYmtpdC5vcmcpCisgICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlN0eWxlQ3Vyc29ySW1hZ2UuaCIKKworI2luY2x1ZGUgIkNTU0N1cnNvcklt
YWdlVmFsdWUuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkZsb2F0U2l6
ZS5oIgorI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitSZWY8U3R5bGVDdXJzb3JJbWFnZT4gU3R5bGVDdXJzb3JJbWFnZTo6Y3JlYXRlKENTU0N1cnNv
ckltYWdlVmFsdWUmIGNzc1ZhbHVlKQoreyAKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHls
ZUN1cnNvckltYWdlKGNzc1ZhbHVlKSk7IAorfQorCitib29sIFN0eWxlQ3Vyc29ySW1hZ2U6Om9w
ZXJhdG9yPT0oY29uc3QgU3R5bGVJbWFnZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlz
PFN0eWxlQ3Vyc29ySW1hZ2U+KG90aGVyKSAmJiBlcXVhbHMoZG93bmNhc3Q8U3R5bGVDdXJzb3JJ
bWFnZT4ob3RoZXIpKTsKK30KKworUmVmPENTU1ZhbHVlPiBTdHlsZUN1cnNvckltYWdlOjpjc3NW
YWx1ZSgpIGNvbnN0Cit7IAorICAgIHJldHVybiBtX2Nzc1ZhbHVlLmNvcHlSZWYoKTsgCit9CisK
K1N0eWxlQ3Vyc29ySW1hZ2U6OlN0eWxlQ3Vyc29ySW1hZ2UoQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSYg
Y3NzVmFsdWUpCisgICAgOiBtX2Nzc1ZhbHVlKGNzc1ZhbHVlKQoreworICAgIG1faXNDdXJzb3JJ
bWFnZSA9IHRydWU7Cit9CisKK1N0eWxlQ3Vyc29ySW1hZ2U6On5TdHlsZUN1cnNvckltYWdlKCkg
PSBkZWZhdWx0OworCitJbWFnZVdpdGhTY2FsZSBTdHlsZUN1cnNvckltYWdlOjpzZWxlY3RCZXN0
Rml0SW1hZ2UoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KSBjb25zdAoreworICAgIHJldHVybiBt
X2Nzc1ZhbHVlLT5zZWxlY3RCZXN0Rml0SW1hZ2UoZG9jdW1lbnQpOworfQorCit2b2lkIFN0eWxl
Q3Vyc29ySW1hZ2U6OnNldENvbnRhaW5lckNvbnRleHRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJF
bGVtZW50JiByZW5kZXJlciwgY29uc3QgRmxvYXRTaXplJiBjb250YWluZXJTaXplLCBmbG9hdCBj
b250YWluZXJab29tKQoreworICAgIGlmICghaGFzQ2FjaGVkSW1hZ2UoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGNhY2hlZEltYWdlKCktPnNldENvbnRhaW5lckNvbnRleHRGb3JDbGllbnQocmVu
ZGVyZXIsIExheW91dFNpemUoY29udGFpbmVyU2l6ZSksIGNvbnRhaW5lclpvb20sIG1fY3NzVmFs
dWUtPmltYWdlVVJMKCkpOworfQorCit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5jcHAKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXJz
b3JJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
dHlsZUN1cnNvckltYWdlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CisgKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcp
CisgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUtMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1A
d2Via2l0Lm9yZykKKyAgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0eWxlTXVsdGlJbWFn
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENTU0N1cnNvckltYWdlVmFsdWU7
CisKK2NsYXNzIFN0eWxlQ3Vyc29ySW1hZ2UgZmluYWwgOiBwdWJsaWMgU3R5bGVNdWx0aUltYWdl
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PFN0eWxlQ3Vyc29ySW1hZ2U+IGNyZWF0ZShDU1NDdXJzb3JJbWFnZVZhbHVlJik7CisgICAgdmly
dHVhbCB+U3R5bGVDdXJzb3JJbWFnZSgpOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHls
ZUltYWdlJiBvdGhlcikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZXRDb250YWluZXJD
b250ZXh0Rm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZs
b2F0U2l6ZSYgY29udGFpbmVyU2l6ZSwgZmxvYXQgY29udGFpbmVyWm9vbSkgZmluYWw7CisgICAg
UmVmPENTU1ZhbHVlPiBjc3NWYWx1ZSgpIGNvbnN0IGZpbmFsOworICAgIEltYWdlV2l0aFNjYWxl
IHNlbGVjdEJlc3RGaXRJbWFnZShjb25zdCBEb2N1bWVudCYpIGNvbnN0IGZpbmFsOworCisgICAg
ZXhwbGljaXQgU3R5bGVDdXJzb3JJbWFnZShDU1NDdXJzb3JJbWFnZVZhbHVlJik7CisgICAgUmVm
PENTU0N1cnNvckltYWdlVmFsdWU+IG1fY3NzVmFsdWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfU1RZTEVfSU1BR0UoU3R5bGVDdXJzb3JJ
bWFnZSwgaXNDdXJzb3JJbWFnZSkKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1cnNvckltYWdlLmgKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
OmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3Bl
cnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlLmgJ
KHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHls
ZUltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDE4ICs2NywyOCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBmbG9hdCBpbWFnZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gMTsgfQogICAg
IHZpcnR1YWwgYm9vbCBrbm93blRvQmVPcGFxdWUoY29uc3QgUmVuZGVyRWxlbWVudCopIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSgpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFN0eWxlSW1hZ2UqIHNlbGVjdGVkSW1hZ2UoKSB7IHJldHVy
biB0aGlzOyB9CisgICAgdmlydHVhbCBjb25zdCBTdHlsZUltYWdlKiBzZWxlY3RlZEltYWdlKCkg
Y29uc3QgeyByZXR1cm4gdGhpczsgfQogCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ2FjaGVk
SW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2lzQ2FjaGVkSW1hZ2U7IH0KICAgICBBTFdBWVNfSU5M
SU5FIGJvb2wgaXNHZW5lcmF0ZWRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNHZW5lcmF0ZWRJ
bWFnZTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0N1cnNvckltYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0N1cnNvckltYWdlOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzSW1hZ2VT
ZXQoKSBjb25zdCB7IHJldHVybiBtX2lzSW1hZ2VTZXQ7IH0KKworICAgIGJvb2wgaGFzQ2FjaGVk
SW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2lzQ2FjaGVkSW1hZ2UgfHwgc2VsZWN0ZWRJbWFnZSgp
LT5pc0NhY2hlZEltYWdlKCk7IH0KIAogcHJvdGVjdGVkOgogICAgIFN0eWxlSW1hZ2UoKQogICAg
ICAgICA6IG1faXNDYWNoZWRJbWFnZShmYWxzZSkKICAgICAgICAgLCBtX2lzR2VuZXJhdGVkSW1h
Z2UoZmFsc2UpCisgICAgICAgICwgbV9pc0ltYWdlU2V0KGZhbHNlKQorICAgICAgICAsIG1faXND
dXJzb3JJbWFnZShmYWxzZSkKICAgICB7CiAgICAgfQogICAgIGJvb2wgbV9pc0NhY2hlZEltYWdl
IDogMTsKICAgICBib29sIG1faXNHZW5lcmF0ZWRJbWFnZSA6IDE7CisgICAgYm9vbCBtX2lzSW1h
Z2VTZXQgOiAxOworICAgIGJvb2wgbV9pc0N1cnNvckltYWdlIDogMTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHls
ZUltYWdlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvU3R5bGVJbWFnZVNldC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKKyAqICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9y
ZykKKyAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykK
KyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNS0yMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBOb2FtIFJvc2VudGhhbCAobm9h
bUB3ZWJraXQub3JnKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0eWxlSW1h
Z2VTZXQuaCIKKworI2luY2x1ZGUgIkNTU0ltYWdlU2V0VmFsdWUuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitSZWY8U3R5bGVJbWFnZVNldD4gU3R5bGVJbWFnZVNldDo6Y3JlYXRlKENTU0lt
YWdlU2V0VmFsdWUmIGNzc1ZhbHVlKQoreyAKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHls
ZUltYWdlU2V0KGNzc1ZhbHVlKSk7Cit9CisKK1N0eWxlSW1hZ2VTZXQ6OlN0eWxlSW1hZ2VTZXQo
Q1NTSW1hZ2VTZXRWYWx1ZSYgY3NzVmFsdWUpCisgICAgOiBtX2Nzc1ZhbHVlKGNzc1ZhbHVlKQor
eworICAgIG1faXNJbWFnZVNldCA9IHRydWU7Cit9CisKK2Jvb2wgU3R5bGVJbWFnZVNldDo6b3Bl
cmF0b3I9PShjb25zdCBTdHlsZUltYWdlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gaXM8
U3R5bGVJbWFnZVNldD4ob3RoZXIpICYmIGVxdWFscyhkb3duY2FzdDxTdHlsZUltYWdlU2V0Pihv
dGhlcikpOworfQorCitTdHlsZUltYWdlU2V0Ojp+U3R5bGVJbWFnZVNldCgpID0gZGVmYXVsdDsK
KworUmVmPENTU1ZhbHVlPiBTdHlsZUltYWdlU2V0Ojpjc3NWYWx1ZSgpIGNvbnN0Cit7IAorICAg
IHJldHVybiBtX2Nzc1ZhbHVlLmNvcHlSZWYoKTsgCit9CisKK0ltYWdlV2l0aFNjYWxlIFN0eWxl
SW1hZ2VTZXQ6OnNlbGVjdEJlc3RGaXRJbWFnZShjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fY3NzVmFsdWUtPnNlbGVjdEJlc3RGaXRJbWFnZShkb2N1bWVu
dCk7Cit9CisKK30KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZUltYWdlU2V0LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJs
ZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlU2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisqIENvcHlyaWdodCAoQykg
MjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorKiAgICAgICAgICAgKEMpIDIwMDAgQW50
dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisqICAgICAgICAgICAoQykgMjAwMCBEaXJr
IE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogQ29weXJp
Z2h0IChDKSAyMDIwIE5vYW0gUm9zZW50aGFsIChub2FtQHdlYmtpdC5vcmcpCisqCisqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyoKKyogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKgor
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJTdHlsZU11bHRpSW1hZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NJ
bWFnZVNldFZhbHVlOworCitjbGFzcyBTdHlsZUltYWdlU2V0IGZpbmFsIDogcHVibGljIFN0eWxl
TXVsdGlJbWFnZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxTdHlsZUltYWdlU2V0PiBjcmVhdGUoQ1NTSW1hZ2VTZXRWYWx1ZSYpOworICAg
IHZpcnR1YWwgflN0eWxlSW1hZ2VTZXQoKTsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5
bGVJbWFnZSYgb3RoZXIpIGNvbnN0OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFN0eWxlSW1h
Z2VTZXQoQ1NTSW1hZ2VTZXRWYWx1ZSYpOworICAgIFJlZjxDU1NWYWx1ZT4gY3NzVmFsdWUoKSBj
b25zdCBmaW5hbDsKKyAgICBJbWFnZVdpdGhTY2FsZSBzZWxlY3RCZXN0Rml0SW1hZ2UoY29uc3Qg
RG9jdW1lbnQmKSBjb25zdCBmaW5hbDsKKyAgICBSZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gbV9jc3NW
YWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19TVFlMRV9JTUFHRShTdHlsZUltYWdlU2V0LCBpc0ltYWdlU2V0KQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuaApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9TdHlsZU11bHRpSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TdHlsZU11bHRpSW1hZ2UuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZU11bHRpSW1hZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LTIw
MDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIwIE5vYW0gUm9zZW50aGFsIChub2FtQHdlYmtpdC5vcmcpCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU3R5bGVNdWx0aUltYWdlLmgiCisKKyNpbmNsdWRlICJDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1hZ2VTZXRWYWx1ZS5oIgorI2luY2x1
ZGUgIkNTU0ltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCisjaW5j
bHVkZSAiU3R5bGVHZW5lcmF0ZWRJbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N0
eWxlTXVsdGlJbWFnZTo6U3R5bGVNdWx0aUltYWdlKCkgPSBkZWZhdWx0OworCitTdHlsZU11bHRp
SW1hZ2U6On5TdHlsZU11bHRpSW1hZ2UoKSA9IGRlZmF1bHQ7CisKK2Jvb2wgU3R5bGVNdWx0aUlt
YWdlOjplcXVhbHMoY29uc3QgU3R5bGVNdWx0aUltYWdlJiBvdGhlcikgY29uc3QKK3sKKyAgICBh
dXRvJiBvdGhlckNhY2hlZCA9IGRvd25jYXN0PFN0eWxlTXVsdGlJbWFnZT4ob3RoZXIpOworICAg
IHJldHVybiAoIW1faXNQZW5kaW5nICYmICFvdGhlckNhY2hlZC5tX2lzUGVuZGluZyAmJiBtX3Nl
bGVjdGVkSW1hZ2UuZ2V0KCkgPT0gb3RoZXJDYWNoZWQubV9zZWxlY3RlZEltYWdlLmdldCgpKTsK
K30KKwordm9pZCBTdHlsZU11bHRpSW1hZ2U6OmxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGxv
YWRlciwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKQoreworICAgIEFTU0VS
VChtX2lzUGVuZGluZyk7CisgICAgQVNTRVJUKGxvYWRlci5kb2N1bWVudCgpKTsKKworICAgIG1f
aXNQZW5kaW5nID0gZmFsc2U7CisgICAgYXV0byBpbWFnZVdpdGhTY2FsZSA9IHNlbGVjdEJlc3RG
aXRJbWFnZSgqbG9hZGVyLmRvY3VtZW50KCkpOworICAgIEFTU0VSVChpczxDU1NJbWFnZVZhbHVl
PihpbWFnZVdpdGhTY2FsZS52YWx1ZSkgfHwgaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oaW1h
Z2VXaXRoU2NhbGUudmFsdWUpKTsKKworICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVl
PihpbWFnZVdpdGhTY2FsZS52YWx1ZSkpIHsKKyAgICAgICAgbV9zZWxlY3RlZEltYWdlID0gU3R5
bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+
KCppbWFnZVdpdGhTY2FsZS52YWx1ZS5nZXQoKSkpOworICAgICAgICBtX3NlbGVjdGVkSW1hZ2Ut
PmxvYWQobG9hZGVyLCBvcHRpb25zKTsKKyAgICB9CisgICAgCisgICAgaWYgKGlzPENTU0ltYWdl
VmFsdWU+KGltYWdlV2l0aFNjYWxlLnZhbHVlKSkgeworICAgICAgICBtX3NlbGVjdGVkSW1hZ2Ug
PSBTdHlsZUNhY2hlZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oKmltYWdl
V2l0aFNjYWxlLnZhbHVlLmdldCgpKSwgaW1hZ2VXaXRoU2NhbGUuc2NhbGVGYWN0b3IpOworICAg
ICAgICBpZiAobV9zZWxlY3RlZEltYWdlLT5pc1BlbmRpbmcoKSkKKyAgICAgICAgICAgIG1fc2Vs
ZWN0ZWRJbWFnZS0+bG9hZChsb2FkZXIsIG9wdGlvbnMpOworICAgIH0KK30KKworQ2FjaGVkSW1h
Z2UqIFN0eWxlTXVsdGlJbWFnZTo6Y2FjaGVkSW1hZ2UoKSBjb25zdAoreworICAgIGlmICghbV9z
ZWxlY3RlZEltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9zZWxl
Y3RlZEltYWdlLT5jYWNoZWRJbWFnZSgpOworfQorCitXcmFwcGVkSW1hZ2VQdHIgU3R5bGVNdWx0
aUltYWdlOjpkYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fc2VsZWN0ZWRJbWFnZS0+ZGF0YSgpOwor
fQorCitib29sIFN0eWxlTXVsdGlJbWFnZTo6Y2FuUmVuZGVyKGNvbnN0IFJlbmRlckVsZW1lbnQq
IHJlbmRlcmVyLCBmbG9hdCBtdWx0aXBsaWVyKSBjb25zdAoreworICAgIHJldHVybiBtX3NlbGVj
dGVkSW1hZ2UgJiYgbV9zZWxlY3RlZEltYWdlLT5jYW5SZW5kZXIocmVuZGVyZXIsIG11bHRpcGxp
ZXIpOworfQorCitib29sIFN0eWxlTXVsdGlJbWFnZTo6aXNQZW5kaW5nKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9pc1BlbmRpbmc7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjppc0xvYWRl
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2VsZWN0ZWRJbWFnZSAmJiBtX3NlbGVjdGVkSW1h
Z2UtPmlzTG9hZGVkKCk7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjplcnJvck9jY3VycmVk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlICYmIG1fc2VsZWN0ZWRJbWFn
ZS0+ZXJyb3JPY2N1cnJlZCgpOworfQorCitGbG9hdFNpemUgU3R5bGVNdWx0aUltYWdlOjppbWFn
ZVNpemUoY29uc3QgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGZsb2F0IG11bHRpcGxpZXIpIGNv
bnN0Cit7CisgICAgaWYgKCFtX3NlbGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgcmV0dXJuIG1fc2VsZWN0ZWRJbWFnZS0+aW1hZ2VTaXplKHJlbmRlcmVyLCBtdWx0aXBsaWVy
KTsKK30KKworYm9vbCBTdHlsZU11bHRpSW1hZ2U6OmltYWdlSGFzUmVsYXRpdmVXaWR0aCgpIGNv
bnN0Cit7CisgICAgaWYgKCFtX3NlbGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlLT5pbWFnZUhhc1JlbGF0aXZlV2lkdGgoKTsKK30K
KworYm9vbCBTdHlsZU11bHRpSW1hZ2U6OmltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdAor
eworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UgJiYgbV9zZWxlY3RlZEltYWdlLT5pbWFnZUhh
c1JlbGF0aXZlSGVpZ2h0KCk7Cit9CisKK3ZvaWQgU3R5bGVNdWx0aUltYWdlOjpjb21wdXRlSW50
cmluc2ljRGltZW5zaW9ucyhjb25zdCBSZW5kZXJFbGVtZW50KiBlbGVtZW50LCBMZW5ndGgmIGlu
dHJpbnNpY1dpZHRoLCBMZW5ndGgmIGludHJpbnNpY0hlaWdodCwgRmxvYXRTaXplJiBpbnRyaW5z
aWNSYXRpbykKK3sKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fc2VsZWN0ZWRJbWFnZS0+Y29tcHV0ZUludHJpbnNpY0RpbWVuc2lvbnMoZWxlbWVudCwg
aW50cmluc2ljV2lkdGgsIGludHJpbnNpY0hlaWdodCwgaW50cmluc2ljUmF0aW8pOworfQorCiti
b29sIFN0eWxlTXVsdGlJbWFnZTo6dXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fc2VsZWN0ZWRJbWFnZSAmJiBtX3NlbGVjdGVkSW1hZ2UtPnVzZXNJbWFnZUNv
bnRhaW5lclNpemUoKTsKK30KKwordm9pZCBTdHlsZU11bHRpSW1hZ2U6OnNldENvbnRhaW5lckNv
bnRleHRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmxv
YXRTaXplJiBjb250YWluZXJTaXplLCBmbG9hdCBjb250YWluZXJab29tKQoreworICAgIGlmICgh
bV9zZWxlY3RlZEltYWdlKQorICAgICAgICByZXR1cm47CisgICAgbV9zZWxlY3RlZEltYWdlLT5z
ZXRDb250YWluZXJDb250ZXh0Rm9yUmVuZGVyZXIocmVuZGVyZXIsIGNvbnRhaW5lclNpemUsIGNv
bnRhaW5lclpvb20pOworfQorCit2b2lkIFN0eWxlTXVsdGlJbWFnZTo6YWRkQ2xpZW50KFJlbmRl
ckVsZW1lbnQqIHJlbmRlcmVyKQoreworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQorICAgICAg
ICByZXR1cm47CisgICAgbV9zZWxlY3RlZEltYWdlLT5hZGRDbGllbnQocmVuZGVyZXIpOworfQor
Cit2b2lkIFN0eWxlTXVsdGlJbWFnZTo6cmVtb3ZlQ2xpZW50KFJlbmRlckVsZW1lbnQqIHJlbmRl
cmVyKQoreworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQorICAgICAgICByZXR1cm47CisgICAg
bV9zZWxlY3RlZEltYWdlLT5yZW1vdmVDbGllbnQocmVuZGVyZXIpOworfQorCitSZWZQdHI8SW1h
Z2U+IFN0eWxlTXVsdGlJbWFnZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fc2VsZWN0ZWRJbWFnZS0+aW1hZ2Uo
cmVuZGVyZXIsIHNpemUpOworfQorCitmbG9hdCBTdHlsZU11bHRpSW1hZ2U6OmltYWdlU2NhbGVG
YWN0b3IoKSBjb25zdAoreworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQorICAgICAgICByZXR1
cm4gMTsKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlLT5pbWFnZVNjYWxlRmFjdG9yKCk7Cit9
CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjprbm93blRvQmVPcGFxdWUoY29uc3QgUmVuZGVyRWxl
bWVudCogcmVuZGVyZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2VsZWN0ZWRJbWFnZSAmJiBt
X3NlbGVjdGVkSW1hZ2UtPmtub3duVG9CZU9wYXF1ZShyZW5kZXJlcik7Cit9CisKK30KClByb3Bl
cnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZU11bHRp
SW1hZ2UuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMK
KyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZU11bHRpSW1hZ2UuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUltYWdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxl
ciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LTIwMDgsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
IE5vYW0gUm9zZW50aGFsIChub2FtQHdlYmtpdC5vcmcpCisgKgorKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisqCisqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyoKKyogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyoKKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VXaXRo
U2NhbGUuaCIKKyNpbmNsdWRlICJTdHlsZUltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgU3R5bGVNdWx0aUltYWdlIDogcHVibGljIFN0eWxlSW1hZ2UgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHZpcnR1YWwgflN0eWxlTXVsdGlJbWFn
ZSgpOworCitwcm90ZWN0ZWQ6CisgICAgU3R5bGVNdWx0aUltYWdlKCk7CisgICAgYm9vbCBlcXVh
bHMoY29uc3QgU3R5bGVNdWx0aUltYWdlJiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBJbWFn
ZVdpdGhTY2FsZSBzZWxlY3RCZXN0Rml0SW1hZ2UoY29uc3QgRG9jdW1lbnQmKSBjb25zdCA9IDA7
CisgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3QgZmluYWw7CisKK3ByaXZhdGU6
CisgICAgV3JhcHBlZEltYWdlUHRyIGRhdGEoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgY2Fu
UmVuZGVyKGNvbnN0IFJlbmRlckVsZW1lbnQqLCBmbG9hdCBtdWx0aXBsaWVyKSBjb25zdCBmaW5h
bDsKKyAgICBib29sIGlzUGVuZGluZygpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgbG9hZChDYWNo
ZWRSZXNvdXJjZUxvYWRlciYsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYpIGZpbmFsOwor
ICAgIGJvb2wgaXNMb2FkZWQoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGVycm9yT2NjdXJyZWQo
KSBjb25zdCBmaW5hbDsKKyAgICBGbG9hdFNpemUgaW1hZ2VTaXplKGNvbnN0IFJlbmRlckVsZW1l
bnQqLCBmbG9hdCBtdWx0aXBsaWVyKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGltYWdlSGFzUmVs
YXRpdmVXaWR0aCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZUhlaWdo
dCgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgY29tcHV0ZUludHJpbnNpY0RpbWVuc2lvbnMoY29u
c3QgUmVuZGVyRWxlbWVudCosIExlbmd0aCYgaW50cmluc2ljV2lkdGgsIExlbmd0aCYgaW50cmlu
c2ljSGVpZ2h0LCBGbG9hdFNpemUmIGludHJpbnNpY1JhdGlvKSBmaW5hbDsKKyAgICBib29sIHVz
ZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNldENvbnRhaW5l
ckNvbnRleHRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50JiwgY29uc3QgRmxvYXRTaXpl
JiwgZmxvYXQpOworICAgIHZvaWQgYWRkQ2xpZW50KFJlbmRlckVsZW1lbnQqKSBmaW5hbDsKKyAg
ICB2b2lkIHJlbW92ZUNsaWVudChSZW5kZXJFbGVtZW50KikgZmluYWw7CisgICAgUmVmUHRyPElt
YWdlPiBpbWFnZShSZW5kZXJFbGVtZW50KiwgY29uc3QgRmxvYXRTaXplJikgY29uc3QgZmluYWw7
CisgICAgZmxvYXQgaW1hZ2VTY2FsZUZhY3RvcigpIGNvbnN0IGZpbmFsOworICAgIGJvb2wga25v
d25Ub0JlT3BhcXVlKGNvbnN0IFJlbmRlckVsZW1lbnQqKSBjb25zdCBmaW5hbDsKKyAgICBjb25z
dCBTdHlsZUltYWdlKiBzZWxlY3RlZEltYWdlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zZWxl
Y3RlZEltYWdlLmdldCgpOyB9CisgICAgU3R5bGVJbWFnZSogc2VsZWN0ZWRJbWFnZSgpIGZpbmFs
IHsgcmV0dXJuIG1fc2VsZWN0ZWRJbWFnZS5nZXQoKTsgfQorCisgICAgUmVmUHRyPFN0eWxlSW1h
Z2U+IG1fc2VsZWN0ZWRJbWFnZTsKKyAgICBib29sIG1faXNQZW5kaW5nIHsgdHJ1ZSB9OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5oCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBw
cm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgJ
KHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1
c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0NiwxMCBAQAogI2luY2x1ZGUgIlNWR1Jl
bmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyQ29udmVydGVyLmgiCiAjaW5jbHVk
ZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlQ3Vyc29ySW1hZ2UuaCIKICNp
bmNsdWRlICJTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiU3R5bGVHZW5lcmF0
ZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlSW1hZ2VTZXQuaCIKICNpbmNsdWRlICJTdHlsZVJl
c29sdmVyLmgiCiAjaW5jbHVkZSAiV2lsbENoYW5nZURhdGEuaCIKIApAQCAtMTMyNCwxMyArMTMy
NiwxNSBAQCBpbmxpbmUgdm9pZCBCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ29uCiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVu
dChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZT4oaXRlbS5nZXQoKSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsK
LSAgICAgICAgfSBlbHNlIGlmIChpczxDU1NJbWFnZVNldFZhbHVlPihpdGVtKSkgewotICAgICAg
ICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChTdHlsZUNhY2hlZEltYWdlOjpj
cmVhdGUoaXRlbSksIGRpZFNldCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChp
czxDU1NJbWFnZVNldFZhbHVlPihpdGVtKSkgeworICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0
eWxlKCkuc2V0Q29udGVudChTdHlsZUltYWdlU2V0OjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VT
ZXRWYWx1ZT4oaXRlbS5nZXQoKSkuaW1hZ2VTZXRXaXRoU3R5bGVzUmVzb2x2ZWQoYnVpbGRlclN0
YXRlKSksIGRpZFNldCk7CiAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KGl0ZW0pKSB7Ci0gICAgICAgICAgICBidWls
ZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShpdGVt
KSwgZGlkU2V0KTsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnQo
U3R5bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KGl0ZW0uZ2V0
KCkpKSwgZGlkU2V0KTsKICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWls
ZGVyU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVp
bGRlclN0YXRlLmNwcAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVCdWlsZGVyU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0NSwxMCBAQAog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyLmgiCiAjaW5jbHVk
ZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlQ3Vyc29ySW1hZ2UuaCIKICNp
bmNsdWRlICJTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiU3R5bGVHZW5lcmF0
ZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlSW1hZ2VTZXQuaCIKICNpbmNsdWRlICJUcmFuc2Zv
cm1GdW5jdGlvbnMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzksMjEgKzgxLDMzIEBA
IGJvb2wgQnVpbGRlclN0YXRlOjp1c2VTVkdab29tUnVsZXNGb3JMZW4KICAgICByZXR1cm4gaXM8
U1ZHRWxlbWVudD4oZWxlbWVudCgpKSAmJiAhKGlzPFNWR1NWR0VsZW1lbnQ+KCplbGVtZW50KCkp
ICYmIGVsZW1lbnQoKS0+cGFyZW50Tm9kZSgpKTsKIH0KIAorUmVmPENTU1ZhbHVlPiBCdWlsZGVy
U3RhdGU6OnJlc29sdmVJbWFnZVN0eWxlcyhDU1NWYWx1ZSYgdmFsdWUpCit7CisgICAgaWYgKGlz
PENTU0dyYWRpZW50VmFsdWU+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0dy
YWRpZW50VmFsdWU+KHZhbHVlKS5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCgqdGhpcyk7CisK
KyAgICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpKQorICAgICAgICBkb3duY2Fz
dDxDU1NGaWx0ZXJJbWFnZVZhbHVlPih2YWx1ZSkuY3JlYXRlRmlsdGVyT3BlcmF0aW9ucygqdGhp
cyk7CisKKyAgICBpZiAoaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4odmFsdWUpKQorICAgICAgICByZXR1
cm4gZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4odmFsdWUpLmltYWdlU2V0V2l0aFN0eWxlc1Jl
c29sdmVkKCp0aGlzKTsKKworICAgIHJldHVybiBtYWtlUmVmKHZhbHVlKTsKK30KKwogUmVmUHRy
PFN0eWxlSW1hZ2U+IEJ1aWxkZXJTdGF0ZTo6Y3JlYXRlU3R5bGVJbWFnZShDU1NWYWx1ZSYgdmFs
dWUpCiB7Ci0gICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHZhbHVlKSkgewotICAg
ICAgICBpZiAoaXM8Q1NTR3JhZGllbnRWYWx1ZT4odmFsdWUpKQotICAgICAgICAgICAgcmV0dXJu
IFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NHcmFkaWVudFZhbHVlPih2
YWx1ZSkuZ3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoKnRoaXMpKTsKLQotICAgICAgICBpZiAo
aXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpKSB7Ci0gICAgICAgICAgICAvLyBGaWx0ZXJJ
bWFnZSBuZWVkcyB0byBjYWxjdWxhdGUgRmlsdGVyT3BlcmF0aW9ucy4KLSAgICAgICAgICAgIGRv
d25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHZhbHVlKS5jcmVhdGVGaWx0ZXJPcGVyYXRpb25z
KCp0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6
Y3JlYXRlKGRvd25jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHZhbHVlKSk7Ci0gICAgfQor
ICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPih2YWx1ZSkpCisgICAgICAgIHJldHVybiBTdHlsZUNh
Y2hlZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4odmFsdWUpKTsKKworICAg
IGlmIChpczxDU1NDdXJzb3JJbWFnZVZhbHVlPih2YWx1ZSkpCisgICAgICAgIHJldHVybiBTdHls
ZUN1cnNvckltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4odmFsdWUp
KTsKIAotICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPih2YWx1ZSkgfHwgaXM8Q1NTSW1hZ2VTZXRW
YWx1ZT4odmFsdWUpIHx8IGlzPENTU0N1cnNvckltYWdlVmFsdWU+KHZhbHVlKSkKLSAgICAgICAg
cmV0dXJuIFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7CisgICAgaWYgKGlzPENTU0lt
YWdlR2VuZXJhdG9yVmFsdWU+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVk
SW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihyZXNvbHZlSW1h
Z2VTdHlsZXModmFsdWUpLmdldCgpKSk7CisgICAgCisgICAgaWYgKGlzPENTU0ltYWdlU2V0VmFs
dWU+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFN0eWxlSW1hZ2VTZXQ6OmNyZWF0ZShkb3duY2Fz
dDxDU1NJbWFnZVNldFZhbHVlPihyZXNvbHZlSW1hZ2VTdHlsZXModmFsdWUpLmdldCgpKSk7CiAK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
QnVpbGRlclN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVC
dWlsZGVyU3RhdGUuaAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVCdWlsZGVyU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCB1c2VTVkdab29tUnVsZXNGb3JMZW5ndGgoKSBjb25zdDsKICAgICBTY29w
ZU9yZGluYWwgc3R5bGVTY29wZU9yZGluYWwoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2NvcGVP
cmRpbmFsOyB9CiAKKyAgICBSZWY8Q1NTVmFsdWU+IHJlc29sdmVJbWFnZVN0eWxlcyhDU1NWYWx1
ZSYpOwogICAgIFJlZlB0cjxTdHlsZUltYWdlPiBjcmVhdGVTdHlsZUltYWdlKENTU1ZhbHVlJik7
CiAgICAgYm9vbCBjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1ZhbHVlJiwgRmlsdGVy
T3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NDgwOCkK
KysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDIwLTAxLTE5ICBOb2FtIFJvc2VudGhhbCAgPG5vYW1Ad2Via2l0Lm9yZz4KKworICAgICAg
ICAtd2Via2l0LWltYWdlLXNldCBzaG91bGQgc3VwcG9ydCBhbGwgdGhlIGltYWdlIGZ1bmN0aW9u
cyBXZWJLaXQgc3VwcG9ydHMsIG5vdCBqdXN0IHVybCgpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTk0MQorCisgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgorCisgICAgICAgICogZmFzdC9jc3MvY3Vyc29yLXBhcnNpbmctZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIGZhc3QvY3NzL2N1cnNvci1wYXJzaW5nLmh0bWw6CisgICAgICAgICAg
ICAgICAgQWRkZWQgcGFyc2luZyB0ZXN0IHRvIGVuc3VyZSBhcnJvdyBpbWFnZS1zZXRzIGRpc2Fi
bGUgZ2VuZXJhdGVkIGltYWdlcworCisgICAgICAgICogZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNp
bmctZ2VuZXJhdGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3MvaW1h
Z2Utc2V0LXBhcnNpbmctZ2VuZXJhdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3Nz
L2ltYWdlLXNldC1wYXJzaW5nLWludmFsaWQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3Qv
Y3NzL2ltYWdlLXNldC1wYXJzaW5nLWludmFsaWQuaHRtbDoKKyAgICAgICAgICAgICAgICBBZGRl
ZCBwYXJzaW5nIHRlc3RzIGZvciBuZXcgZ2VuZXJhdGVkLWluc2lkZS1pbWFnZS1zZXQgdXNlIGNh
c2VzCisgICAgICAgICAgICAgICAgVGVzdCB0aGF0IGltYWdlLXNldCBpbnNpZGUgaW1hZ2Utc2V0
IGlzIG5vdCBzdXBwb3J0ZWQKKworICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc2V0LWNyb3Nz
LWZhZGUtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9oaWRwaS9pbWFnZS1z
ZXQtY3Jvc3MtZmFkZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNl
dC1ncmFkaWVudC1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2hpZHBpL2lt
YWdlLXNldC1ncmFkaWVudC1tdWx0aS1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1tdWx0aS5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1zaW5nbGUtZXhwZWN0ZWQuaHRtbDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtc2luZ2xlLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAgICAgICAgIEFkZGVkIHJlZi10ZXN0cyBmb3Igc2V2ZXJhbCBnZW5lcmF0
ZWQtaW5zaWRlLWltYWdlLXNldCB1c2UtY2FzZXMKKwogMjAyMC0wMS0xOSAgQ2F0aGllIENoZW4g
IDxjYXRoaWVjaGVuQGlnYWxpYS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHNjcm9s
bCBiZWhhdmlvciByZWxpZXMgb24gU2Nyb2xsQW5pbWF0aW9uIG9mIHRoZSBXZWIgcHJvY2VzcwpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvY3Vyc29yLXBhcnNpbmctZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL2N1cnNvci1wYXJzaW5nLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMjU0ODA4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvY3Vyc29yLXBh
cnNpbmctZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2MiwxMCBAQCBQQVNT
IHJvdW5kdHJpcENzc1J1bGUoImN1cnNvcjogdXJsKGZpbGU6CiBQQVNTIHJvdW5kdHJpcENzc1J1
bGUoImN1cnNvcjogdXJsKGZpbGU6Ly8vZm9vLnBuZykgMTIgMyA1OyIpLmNzc1RleHQgaXMgIiIK
IFBBU1Mgcm91bmR0cmlwQ3NzUnVsZSgiY3Vyc29yOiB1cmwoZmlsZTovLy9mb28ucG5nKSB4IHk7
IikuY3NzVGV4dCBpcyAiIgogUEFTUyByb3VuZHRyaXBDc3NSdWxlKCJjdXJzb3I6IHVybChmaWxl
Oi8vL2Zvby5wbmcpIGF1dG87IikuY3NzVGV4dCBpcyAiIgorCitUZXN0IGEgYnVuY2ggb2YgY3Vy
c29yIHJ1bGVzIHdpdGggZ2VuZXJhdGVkIGltYWdlcy4KK1BBU1Mgcm91bmR0cmlwQ3NzUnVsZSgi
Y3Vyc29yOiBsaW5lYXItZ3JhZGllbnQocmVkLCB3aGl0ZSkgLTEgLTEsIHBvaW50ZXI7IikuY3Nz
VGV4dCBpcyAiIgorUEFTUyByb3VuZHRyaXBDc3NSdWxlKCJjdXJzb3I6IGltYWdlLXNldChsaW5l
YXItZ3JhZGllbnQocmVkLCB3aGl0ZSkgMXgpIC0xIC0xLCBwb2ludGVyOyIpLmNzc1RleHQgaXMg
IiIKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvY3Vyc29yLXBhcnNpbmcuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy5odG1sCShyZXZpc2lvbiAyNTQ4
MDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDUsNiArMTA1LDExIEBAIHRlc3RJbnZhbGlkQ3Vyc29yUnVsZSgndXJsKGZp
bGU6Ly8vZm9vLnAKIHRlc3RJbnZhbGlkQ3Vyc29yUnVsZSgndXJsKGZpbGU6Ly8vZm9vLnBuZykg
eCB5Jyk7CiB0ZXN0SW52YWxpZEN1cnNvclJ1bGUoJ3VybChmaWxlOi8vL2Zvby5wbmcpIGF1dG8n
KTsKIAorZGVidWcoJycpOworZGVidWcoJ1Rlc3QgYSBidW5jaCBvZiBjdXJzb3IgcnVsZXMgd2l0
aCBnZW5lcmF0ZWQgaW1hZ2VzLicpOwordGVzdEludmFsaWRDdXJzb3JSdWxlKCdsaW5lYXItZ3Jh
ZGllbnQocmVkLCB3aGl0ZSkgLTEgLTEsIHBvaW50ZXInKTsKK3Rlc3RJbnZhbGlkQ3Vyc29yUnVs
ZSgnaW1hZ2Utc2V0KGxpbmVhci1ncmFkaWVudChyZWQsIHdoaXRlKSAxeCkgLTEgLTEsIHBvaW50
ZXInKTsKKwogc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKIDwvc2NyaXB0PgogPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctZ2VuZXJhdGVkLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1n
ZW5lcmF0ZWQtZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
Y3NzL2ltYWdlLXNldC1wYXJzaW5nLWdlbmVyYXRlZC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2NSBAQAorVGVzdCB0aGUgcGFyc2luZyBvZiB0aGUgaW1hZ2Utc2V0IGZ1
bmN0aW9uLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworCitTaW5nbGUgdmFsdWUg
Zm9yIGJhY2tncm91bmQtaW1hZ2Ugd2l0aCBncmFkaWVudCA6IGxpbmVhci1ncmFkaWVudChncmVl
biwgd2hpdGUpIDF4CitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZSkgaXMgJ0NTU1Zh
bHVlTGlzdCcKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLl9fcHJvdG9fXykgaXMg
J0NTU1ZhbHVlTGlzdFByb3RvdHlwZScKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxl
LmNvbnN0cnVjdG9yKSBpcyAnRnVuY3Rpb24nCitQQVNTIGltYWdlU2V0UnVsZS5sZW5ndGggaXMg
MgorUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJ2xpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUp
JworUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJzEnCisKK1NpbmdsZSB2YWx1ZSBmb3IgY29udGVu
dCB3aXRoIGdyYWRpZW50IDogbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMXgKK1BBU1Mg
anNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlKSBpcyAnQ1NTVmFsdWVMaXN0JworUEFTUyBqc1dy
YXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuX19wcm90b19fKSBpcyAnQ1NTVmFsdWVMaXN0UHJvdG90
eXBlJworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuY29uc3RydWN0b3IpIGlzICdG
dW5jdGlvbicKK1BBU1MgaW1hZ2VTZXRSdWxlLmxlbmd0aCBpcyAyCitQQVNTIHN1YlJ1bGUuY3Nz
VGV4dCBpcyAnbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSknCitQQVNTIHN1YlJ1bGUuY3Nz
VGV4dCBpcyAnMScKKworU2luZ2xlIHZhbHVlIGZvciBiYWNrZ3JvdW5kLWltYWdlIHdpdGggZ3Jh
ZGllbnRzIDogbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMXgsIHJhZGlhbC1ncmFkaWVu
dChibHVlLCB3aGl0ZSkgMngKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlKSBpcyAn
Q1NTVmFsdWVMaXN0JworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuX19wcm90b19f
KSBpcyAnQ1NTVmFsdWVMaXN0UHJvdG90eXBlJworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNl
dFJ1bGUuY29uc3RydWN0b3IpIGlzICdGdW5jdGlvbicKK1BBU1MgaW1hZ2VTZXRSdWxlLmxlbmd0
aCBpcyA0CitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3
aGl0ZSknCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMScKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0
IGlzICdyYWRpYWwtZ3JhZGllbnQoYmx1ZSwgd2hpdGUpJworUEFTUyBzdWJSdWxlLmNzc1RleHQg
aXMgJzInCisKK0NvbWJpbmVkIGdyYWRpZW50IGFuZCBVUkwgOiB1cmwoJyNhJykgMXgsIGxpbmVh
ci1ncmFkaWVudChncmVlbiwgd2hpdGUpIDJ4CitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0
UnVsZSkgaXMgJ0NTU1ZhbHVlTGlzdCcKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxl
Ll9fcHJvdG9fXykgaXMgJ0NTU1ZhbHVlTGlzdFByb3RvdHlwZScKK1BBU1MganNXcmFwcGVyQ2xh
c3MoaW1hZ2VTZXRSdWxlLmNvbnN0cnVjdG9yKSBpcyAnRnVuY3Rpb24nCitQQVNTIGltYWdlU2V0
UnVsZS5sZW5ndGggaXMgNAorUEFTUyBzdWJSdWxlIGlzICdhJworUEFTUyBzdWJSdWxlLmNzc1Rl
eHQgaXMgJzEnCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnbGluZWFyLWdyYWRpZW50KGdyZWVu
LCB3aGl0ZSknCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMicKKworQ29tYmluZWQgZ3JhZGll
bnQgYW5kIFVSTCBpbiBjb250ZW50IDogdXJsKCcjYScpIDF4LCBsaW5lYXItZ3JhZGllbnQoZ3Jl
ZW4sIHdoaXRlKSAyeAorUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUpIGlzICdDU1NW
YWx1ZUxpc3QnCitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5fX3Byb3RvX18pIGlz
ICdDU1NWYWx1ZUxpc3RQcm90b3R5cGUnCitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVs
ZS5jb25zdHJ1Y3RvcikgaXMgJ0Z1bmN0aW9uJworUEFTUyBpbWFnZVNldFJ1bGUubGVuZ3RoIGlz
IDQKK1BBU1Mgc3ViUnVsZSBpcyAnYScKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICcxJworUEFT
UyBzdWJSdWxlLmNzc1RleHQgaXMgJ2xpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpJworUEFT
UyBzdWJSdWxlLmNzc1RleHQgaXMgJzInCisKK0NvbWJpbmVkIGdyYWRpZW50IGFuZCBjcm9zcy1m
YWRlIDogLXdlYmtpdC1jcm9zcy1mYWRlKHVybCgnI2EnKSwgdXJsKCcjYicpLCA3MCUpIDF4LCBs
aW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAyeAorUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFn
ZVNldFJ1bGUpIGlzICdDU1NWYWx1ZUxpc3QnCitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0
UnVsZS5fX3Byb3RvX18pIGlzICdDU1NWYWx1ZUxpc3RQcm90b3R5cGUnCitQQVNTIGpzV3JhcHBl
ckNsYXNzKGltYWdlU2V0UnVsZS5jb25zdHJ1Y3RvcikgaXMgJ0Z1bmN0aW9uJworUEFTUyBpbWFn
ZVNldFJ1bGUubGVuZ3RoIGlzIDQKK1BBU1Mgc3ViUnVsZSBpcyAnYScKK1BBU1Mgc3ViUnVsZS5j
c3NUZXh0IGlzICcxJworUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJ2xpbmVhci1ncmFkaWVudChn
cmVlbiwgd2hpdGUpJworUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJzInCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwoKUHJvcGVydHkgY2hhbmdlcyBv
bjogTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctZ2VuZXJhdGVkLWV4cGVj
dGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisq
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
Y3NzL2ltYWdlLXNldC1wYXJzaW5nLWdlbmVyYXRlZC5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWdlbmVyYXRlZC5odG1sCShub25leGlz
dGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWdlbmVyYXRl
ZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA3IEBACis8IURPQ1RZUEUgSFRNTCBQ
VUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgdGhlIHBhcnNpbmcgb2YgdGhlIGltYWdlLXNl
dCBmdW5jdGlvbi4iKTsKKworZnVuY3Rpb24ganNXcmFwcGVyQ2xhc3Mobm9kZSkKK3sKKyAgICBp
ZiAoIW5vZGUpCisgICAgICAgIHJldHVybiAiW251bGxdIjsKKyAgICB2YXIgc3RyaW5nID0gT2Jq
ZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShub2RlKTsKKyAgICByZXR1cm4gc3RyaW5nLnN1
YnN0cig4LCBzdHJpbmcubGVuZ3RoIC0gOSk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZEJlVHlwZShl
eHByZXNzaW9uLCBjbGFzc05hbWUsIHByb3RvdHlwZU5hbWUsIGNvbnN0cnVjdG9yTmFtZSkKK3sK
KyAgICBpZiAoIXByb3RvdHlwZU5hbWUpCisgICAgICAgIHByb3RvdHlwZU5hbWUgPSBjbGFzc05h
bWUgKyAiUHJvdG90eXBlIjsKKyAgICBpZiAoIWNvbnN0cnVjdG9yTmFtZSkKKyAgICAgICAgY29u
c3RydWN0b3JOYW1lID0gY2xhc3NOYW1lICsgIkNvbnN0cnVjdG9yIjsKKyAgICBzaG91bGRCZSgi
anNXcmFwcGVyQ2xhc3MoIiArIGV4cHJlc3Npb24gKyAiKSIsICInIiArIGNsYXNzTmFtZSArICIn
Iik7CisgICAgc2hvdWxkQmUoImpzV3JhcHBlckNsYXNzKCIgKyBleHByZXNzaW9uICsgIi5fX3By
b3RvX18pIiwgIiciICsgcHJvdG90eXBlTmFtZSArICInIik7CisgICAgc2hvdWxkQmUoImpzV3Jh
cHBlckNsYXNzKCIgKyBleHByZXNzaW9uICsgIi5jb25zdHJ1Y3RvcikiLCAiJ0Z1bmN0aW9uJyIp
OworfQorCisvLyBUaGVzZSBoYXZlIHRvIGJlIGdsb2JhbCBmb3IgdGhlIHRlc3QgaGVscGVycyB0
byBzZWUgdGhlbS4KK3ZhciBpbWFnZVNldFJ1bGUsIHN1YlJ1bGU7CisKK2Z1bmN0aW9uIHRlc3RJ
bWFnZVNldFJ1bGUoZGVzY3JpcHRpb24sIHByb3BlcnR5LCBydWxlLCBleHBlY3RlZExlbmd0aCwg
ZXhwZWN0ZWRUZXh0cykKK3sKKyAgICBkZWJ1ZygiIik7CisgICAgZGVidWcoZGVzY3JpcHRpb24g
KyAiIDogIiArIHJ1bGUpOworCisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOworICAgIGRpdi5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgcHJvcGVydHkgKyAiOiBpbWFn
ZS1zZXQoIiArIHJ1bGUgKyAiKSIpOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2
KTsKKworICAgIGltYWdlU2V0UnVsZSA9IGRpdi5zdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHBy
b3BlcnR5KTsKKyAgICBzaG91bGRCZVR5cGUoImltYWdlU2V0UnVsZSIsICJDU1NWYWx1ZUxpc3Qi
KTsKKworICAgIGlmIChpbWFnZVNldFJ1bGUpIHsKKyAgICAgICAgaWYgKGpzV3JhcHBlckNsYXNz
KGltYWdlU2V0UnVsZVswXSkgPT0gIkNTU1ZhbHVlTGlzdCIpIHsKKyAgICAgICAgICAgIC8vIFRo
ZSBjb250ZW50IHByb3BlcnR5IHJldHVybnMgYSBDU1NWYWx1ZUxpc3QgYW55d2F5LCBzbyB0byBn
ZXQgdG8gdGhlIAorICAgICAgICAgICAgLy8gaW1hZ2VTZXQgQ1NTIHZhbHVlIGxpc3QsIHdlIGhh
dmUgdG8gbG9vayBhdCB0aGUgZmlyc3QgZW50cnkgaW4gdGhlIAorICAgICAgICAgICAgLy8gY29u
dGVudCB2YWx1ZSBsaXN0LgorICAgICAgICAgICAgaW1hZ2VTZXRSdWxlID0gaW1hZ2VTZXRSdWxl
WzBdOworICAgICAgICB9CisgICAgfQorCisgICAgc2hvdWxkQmUoImltYWdlU2V0UnVsZS5sZW5n
dGgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGV4cGVjdGVkTGVuZ3RoOyB9KTsKKworICAgIGlmIChp
bWFnZVNldFJ1bGUpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZExlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICBzdHJpbmcgPSBpbWFnZVNldFJ1bGVbaV07CisgICAgICAg
ICAgICBpZiAoaSAlIDIgPT0gMCAmJiBzdHJpbmcuY3NzVGV4dC5pbmNsdWRlcygnIycpKSB7Cisg
ICAgICAgICAgICAgICAgc3ViUnVsZSA9IHN0cmluZy5jc3NUZXh0LnNwbGl0KCcjJylbMV0ucmVw
bGFjZSgnIicsICIiKTsKKyAgICAgICAgICAgICAgICBzdWJSdWxlID0gc3ViUnVsZS5zcGxpdCgn
KScpWzBdOworICAgICAgICAgICAgICAgIHNob3VsZEJlKCJzdWJSdWxlIiwgIiciICsgZXhwZWN0
ZWRUZXh0c1tpXSArICInIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHN1YlJ1bGUgPSBzdHJpbmc7CisgICAgICAgICAgICAgICAgc2hvdWxkQmUoInN1YlJ1bGUuY3Nz
VGV4dCIsICInIiArIGV4cGVjdGVkVGV4dHNbaV0gKyAiJyIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpOworfQor
Cit0ZXN0SW1hZ2VTZXRSdWxlKCJTaW5nbGUgdmFsdWUgZm9yIGJhY2tncm91bmQtaW1hZ2Ugd2l0
aCBncmFkaWVudCIsCisgICAgICAgICAgICAgICAgImJhY2tncm91bmQtaW1hZ2UiLAorICAgICAg
ICAgICAgICAgICJsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAxeCIsIDIsCisgICAgICAg
ICAgICAgICAgWyJsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSIsICIxIl0pOwordGVzdElt
YWdlU2V0UnVsZSgiU2luZ2xlIHZhbHVlIGZvciBjb250ZW50IHdpdGggZ3JhZGllbnQiLAorICAg
ICAgICAgICAgICAgICJiYWNrZ3JvdW5kLWltYWdlIiwKKyAgICAgICAgICAgICAgICAibGluZWFy
LWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMXgiLCAyLAorICAgICAgICAgICAgICAgIFsibGluZWFy
LWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkiLCAiMSJdKTsKKwordGVzdEltYWdlU2V0UnVsZSgiU2lu
Z2xlIHZhbHVlIGZvciBiYWNrZ3JvdW5kLWltYWdlIHdpdGggZ3JhZGllbnRzIiwKKyAgICAgICAg
ICAgICAgICAiYmFja2dyb3VuZC1pbWFnZSIsCisgICAgICAgICAgICAgICAgImxpbmVhci1ncmFk
aWVudChncmVlbiwgd2hpdGUpIDF4LCByYWRpYWwtZ3JhZGllbnQoYmx1ZSwgd2hpdGUpIDJ4Iiwg
NCwKKyAgICAgICAgICAgICAgICBbImxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIiwgIjEi
LCAicmFkaWFsLWdyYWRpZW50KGJsdWUsIHdoaXRlKSIsICIyIl0pOworCit0ZXN0SW1hZ2VTZXRS
dWxlKCJDb21iaW5lZCBncmFkaWVudCBhbmQgVVJMIiwKKyAgICAgICAgICAgICAgICAiYmFja2dy
b3VuZC1pbWFnZSIsCisgICAgICAgICAgICAgICAgInVybCgnI2EnKSAxeCwgbGluZWFyLWdyYWRp
ZW50KGdyZWVuLCB3aGl0ZSkgMngiLCA0LAorICAgICAgICAgICAgICAgIFsiYSIsICIxIiwgImxp
bmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIiwgIjIiXSk7CisKK3Rlc3RJbWFnZVNldFJ1bGUo
IkNvbWJpbmVkIGdyYWRpZW50IGFuZCBVUkwgaW4gY29udGVudCIsCisgICAgICAgICAgICAgICAg
ImNvbnRlbnQiLAorICAgICAgICAgICAgICAgICJ1cmwoJyNhJykgMXgsIGxpbmVhci1ncmFkaWVu
dChncmVlbiwgd2hpdGUpIDJ4IiwgNCwKKyAgICAgICAgICAgICAgICBbImEiLCAiMSIsICJsaW5l
YXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSIsICIyIl0pOworCit0ZXN0SW1hZ2VTZXRSdWxlKCJD
b21iaW5lZCBncmFkaWVudCBhbmQgY3Jvc3MtZmFkZSIsCisgICAgICAgICAgICAgICAgImJhY2tn
cm91bmQtaW1hZ2UiLAorICAgICAgICAgICAgICAgICItd2Via2l0LWNyb3NzLWZhZGUodXJsKCcj
YScpLCB1cmwoJyNiJyksIDcwJSkgMXgsIGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIDJ4
IiwgNCwKKyAgICAgICAgICAgICAgICBbImEiLCAiMSIsICJsaW5lYXItZ3JhZGllbnQoZ3JlZW4s
IHdoaXRlKSIsICIyIl0pOworCitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0
L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1nZW5lcmF0ZWQuaHRtbApfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBz
dm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJv
cGVydHkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWludmFs
aWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL2ltYWdl
LXNldC1wYXJzaW5nLWludmFsaWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNTQ4MDgpCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1pbnZhbGlkLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMTgsNiArMTgsMTIgQEAgUEFTUyBjc3NSdWxlIGlzIG51bGwK
IAogU2NhbGUgZmFjdG9yIGlzIDAgOiB1cmwoJyNhJykgMHgKIFBBU1MgY3NzUnVsZSBpcyBudWxs
CisKK0dlbmVyYXRlZCBpbWFnZSBmb3IgY3Vyc29yIDogbGluZWFyLWdyYWRpZW50KGJsYWNrLCB3
aGl0ZSkgMXgKK1BBU1MgY3NzUnVsZSBpcyBudWxsCisKK0ltYWdlLXNldCBpbnNpZGUgaW1hZ2Ut
c2V0IDogaW1hZ2Utc2V0KGltYWdlLXNldCh1cmwoJyNhJykgMXgpIDF4KQorUEFTUyBjc3NSdWxl
IGlzIG51bGwKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVU
RQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctaW52YWxpZC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5n
LWludmFsaWQuaHRtbAkocmV2aXNpb24gMjU0ODA4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3Mv
aW1hZ2Utc2V0LXBhcnNpbmctaW52YWxpZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICsz
Miw4IEBAIHRlc3RJbnZhbGlkSW1hZ2VTZXQoIk5vIHgiLCAiYmFja2dyb3VuZC0KIHRlc3RJbnZh
bGlkSW1hZ2VTZXQoIk5vIGNvbW1hIiwgImJhY2tncm91bmQtaW1hZ2UiLCAidXJsKCcjYScpIDF4
IHVybCgnI2InKSAyeCIpOwogdGVzdEludmFsaWRJbWFnZVNldCgiVG9vIG1hbnkgc2NhbGUgZmFj
dG9yIHBhcmFtZXRlcnMiLCAiYmFja2dyb3VuZC1pbWFnZSIsICJ1cmwoJyNhJykgMXggMngiKTsK
IHRlc3RJbnZhbGlkSW1hZ2VTZXQoIlNjYWxlIGZhY3RvciBpcyAwIiwgImJhY2tncm91bmQtaW1h
Z2UiLCAidXJsKCcjYScpIDB4Iik7Cit0ZXN0SW52YWxpZEltYWdlU2V0KCJHZW5lcmF0ZWQgaW1h
Z2UgZm9yIGN1cnNvciIsICJjdXJzb3IiLCAibGluZWFyLWdyYWRpZW50KGJsYWNrLCB3aGl0ZSkg
MXgiKTsKK3Rlc3RJbnZhbGlkSW1hZ2VTZXQoIkltYWdlLXNldCBpbnNpZGUgaW1hZ2Utc2V0Iiwg
ImJhY2tncm91bmQtaW1hZ2UiLCAiaW1hZ2Utc2V0KGltYWdlLXNldCh1cmwoJyNhJykgMXgpIDF4
KSIpOwogCiBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwogPC9zY3JpcHQ+CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1mYWRlLWV4cGVjdGVkLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS1l
eHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1h
Z2Utc2V0LWNyb3NzLWZhZGUtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI2IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KKyAgICB3aW5kb3cub25sb2FkID0gKCkg
PT4geworICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworICAgICAgICB0ZXN0UnVubmVyLnNldEJhY2tpbmdTY2FsZUZhY3Rv
cigyLCAoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpLCAwKSk7
CisgICAgICB9CisgICAgfQorPC9zY3JpcHQ+CisKKyAgICAKKzxzdHlsZT4KKyAgICAjZm9vIHsK
KyAgICAgICAgd2lkdGg6MTAwcHg7CisgICAgICAgIGhlaWdodDoxMDBweDsKKyAgICAgICAgYmFj
a2dyb3VuZC1pbWFnZTogLXdlYmtpdC1jcm9zcy1mYWRlKHVybCgncmVzb3VyY2VzL2JsdWUtMTAw
LXB4LXNxdWFyZS5wbmcnKSwgdXJsKCdyZXNvdXJjZXMvZ3JlZW4tMjAwLXB4LXNxdWFyZS5wbmcn
LCA1MCUpKTsKKyAgICB9Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keT4KKyAgICA8ZGl2PlRo
aXMgdGVzdCBwYXNzZXMgaWYgdGhlIGRpdiBiZWxvdyBpcyBhIGJsdWUgMTAwcHggc3F1YXJlIHdo
ZW4gdGhlIGRldmljZVNjYWxlRmFjdG9yIGlzIDEsIGFuZCBpZiBpdCBpcyBhIDEwMHB4IGdyZWVu
L2JsdWUgY3Jvc3MtZmFkZSBzcXVhcmUgd2hlbiB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgaXMgMi48
L2Rpdj4KKzxkaXYgaWQ9Zm9vPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hh
bmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS1leHBl
Y3RlZC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMK
KyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9oaWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWNyb3NzLWZhZGUuaHRtbAkobm9uZXhpc3RlbnQpCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1mYWRlLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyNSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisgICAg
d2luZG93Lm9ubG9hZCA9ICgpID0+IHsKKyAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgewor
ICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgdGVzdFJ1bm5lci5z
ZXRCYWNraW5nU2NhbGVGYWN0b3IoMiwgKCkgPT4gc2V0VGltZW91dCgoKSA9PiB0ZXN0UnVubmVy
Lm5vdGlmeURvbmUoKSwgMCkpOworICAgICAgfQorICAgIH0KKzwvc2NyaXB0PgorICAgIAorPHN0
eWxlPgorICAgICNmb28geworICAgICAgICB3aWR0aDoxMDBweDsKKyAgICAgICAgaGVpZ2h0OjEw
MHB4OworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBpbWFnZS1zZXQodXJsKCdyZXNvdXJjZXMv
Ymx1ZS0xMDAtcHgtc3F1YXJlLnBuZycpIDF4LCAtd2Via2l0LWNyb3NzLWZhZGUodXJsKCdyZXNv
dXJjZXMvYmx1ZS0xMDAtcHgtc3F1YXJlLnBuZycpLCB1cmwoJ3Jlc291cmNlcy9ncmVlbi0yMDAt
cHgtc3F1YXJlLnBuZycsIDUwJSkpIDJ4KTsKKyAgICB9Cis8L3N0eWxlPgorPC9oZWFkPgorCis8
Ym9keT4KKyAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGRpdiBiZWxvdyBpcyBhIGJs
dWUgMTAwcHggc3F1YXJlIHdoZW4gdGhlIGRldmljZVNjYWxlRmFjdG9yIGlzIDEsIGFuZCBpZiBp
dCBpcyBhIDEwMHB4IGdyZWVuL2JsdWUgY3Jvc3MtZmFkZSBzcXVhcmUgd2hlbiB0aGUgZGV2aWNl
U2NhbGVGYWN0b3IgaXMgMi48L2Rpdj4KKyAgICA8ZGl2IGlkPWZvbz48L2Rpdj4KKzwvYm9keT4K
KzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1h
Z2Utc2V0LWNyb3NzLWZhZGUuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQoj
IyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LWV4cGVjdGVkLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtZXhw
ZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdl
LXNldC1ncmFkaWVudC1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYg
QEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorICAgIHdpbmRvdy5vbmxvYWQgPSAoKSA9PiB7
CisgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0
VW50aWxEb25lKCk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0QmFja2luZ1NjYWxlRmFjdG9yKDIs
ICgpID0+IHNldFRpbWVvdXQoKCkgPT4gdGVzdFJ1bm5lci5ub3RpZnlEb25lKCksIDApKTsKKyAg
ICAgIH0KKyAgICB9Cis8L3NjcmlwdD4KKworICAgIAorPHN0eWxlPgorICAgICNmb28geworICAg
ICAgICB3aWR0aDoxMDBweDsKKyAgICAgICAgaGVpZ2h0OjEwMHB4OworICAgICAgICBiYWNrZ3Jv
dW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKTsKKyAgICB9Cis8L3N0eWxl
PgorPC9oZWFkPgorCis8Ym9keT4KKyAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGRp
diBiZWxvdyBpcyBhIGJsdWUgMTAwcHggc3F1YXJlIHdoZW4gdGhlIGRldmljZVNjYWxlRmFjdG9y
IGlzIDEsIGFuZCBpZiBpdCBpcyBhIDEwMHB4IGdyZWVuLXdoaXRlIGdyYWRpZW50IHNxdWFyZSB3
aGVuIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBpcyAyLjwvZGl2PgorICAgIDxkaXYgaWQ9Zm9vPjwv
ZGl2PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMv
ZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtZXhwZWN0ZWQuaHRtbApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRp
ZW50LW11bHRpLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9o
aWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtbXVsdGktZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1tdWx0aS1leHBl
Y3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKKzxodG1sPgorPGhlYWQ+
ICAgIAorPHNjcmlwdD4KKyAgICB3aW5kb3cub25sb2FkID0gKCkgPT4geworICAgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgICAgICB0ZXN0UnVubmVyLnNldEJhY2tpbmdTY2FsZUZhY3RvcigyLCAoKSA9PiBzZXRUaW1l
b3V0KCgpID0+IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpLCAwKSk7CisgICAgICB9CisgICAgfQor
PC9zY3JpcHQ+CisKKzxzdHlsZT4KKyAgICAjZm9vIHsKKyAgICAgICAgd2lkdGg6MTAwcHg7Cisg
ICAgICAgIGhlaWdodDoxMDBweDsKKyAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogcmFkaWFsLWdy
YWRpZW50KHJlZCwgYmx1ZSk7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHk+Cisg
ICAgPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBkaXYgYmVsb3cgaXMgYSAxMDBweCBncmVl
bi13aGl0ZSBncmFkaWVudCBzcXVhcmUgd2hlbiBkZXZpY2VQaXhlbFJhdGlvIGlzIDEsIGEgcmFk
aWFsIHJlZC1ibHVlIHNxdWFyZSB3aGVuIGRldmljZVBpeGVsUmF0aW8gaXMgMiwgYW5kIGEgYmx1
ZSBzcXVhcmUgd2hlbiBkZXZpY2VQaXhlbFJhdGlvIGlzIDMuPC9kaXY+CisgICAgPGRpdiBpZD1m
b28+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRU
ZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1tdWx0aS1leHBlY3RlZC5odG1sCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFn
ZS1zZXQtZ3JhZGllbnQtbXVsdGkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1tdWx0aS5odG1sCShub25leGlzdGVudCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LW11bHRpLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyNSBAQAorPGh0bWw+Cis8aGVhZD4gICAgCis8c2NyaXB0Pgor
ICAgIHdpbmRvdy5vbmxvYWQgPSAoKSA9PiB7CisgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
IHsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIHRlc3RSdW5u
ZXIuc2V0QmFja2luZ1NjYWxlRmFjdG9yKDIsICgpID0+IHNldFRpbWVvdXQoKCkgPT4gdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCksIDApKTsKKyAgICAgIH0KKyAgICB9Cis8L3NjcmlwdD4KKworPHN0
eWxlPgorICAgICNmb28geworICAgICAgICB3aWR0aDoxMDBweDsKKyAgICAgICAgaGVpZ2h0OjEw
MHB4OworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBpbWFnZS1zZXQobGluZWFyLWdyYWRpZW50
KGdyZWVuLCB3aGl0ZSkgMXgsIHJhZGlhbC1ncmFkaWVudChyZWQsIGJsdWUpIDJ4LCAncmVzb3Vy
Y2VzL2JsdWUtMTAwLXB4LXNxdWFyZS5wbmcnIDN4KTsKKyAgICB9Cis8L3N0eWxlPgorPC9oZWFk
PgorCis8Ym9keT4KKyAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGRpdiBiZWxvdyBp
cyBhIDEwMHB4IGdyZWVuLXdoaXRlIGdyYWRpZW50IHNxdWFyZSB3aGVuIGRldmljZVBpeGVsUmF0
aW8gaXMgMSwgYSByYWRpYWwgcmVkLWJsdWUgc3F1YXJlIHdoZW4gZGV2aWNlUGl4ZWxSYXRpbyBp
cyAyLCBhbmQgYSBibHVlIHNxdWFyZSB3aGVuIGRldmljZVBpeGVsUmF0aW8gaXMgMy48L2Rpdj4K
KyAgICA8ZGl2IGlkPWZvbz48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5n
ZXMgb246IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LW11bHRpLmh0
bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBp
L2ltYWdlLXNldC1ncmFkaWVudC1zaW5nbGUtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1zaW5nbGUtZXhwZWN0ZWQu
aHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1n
cmFkaWVudC1zaW5nbGUtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2
IEBACis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorICAgICNmb28geworICAgICAgICB3aWR0aDox
MDBweDsKKyAgICAgICAgaGVpZ2h0OjEwMHB4OworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBs
aW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKTsKKyAgICB9Cis8L3N0eWxlPgorPC9oZWFkPgor
Cis8Ym9keSBpZD0iYm9keSI+CisgICAgPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBkaXYg
YmVsb3cgaXMgYSAxMDBweCBncmVlbi13aGl0ZSBncmFkaWVudCBzcXVhcmUuPC9kaXY+CisgICAg
PGRpdiBpZD1mb28+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1zaW5nbGUtZXhwZWN0
ZWQuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisq
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
aGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS5odG1sCShub25leGlz
dGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmds
ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYgQEAKKzxodG1sPgorPGhlYWQ+ICAg
IAorPHN0eWxlPgorICAgICNmb28geworICAgICAgICB3aWR0aDoxMDBweDsKKyAgICAgICAgaGVp
Z2h0OjEwMHB4OworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBpbWFnZS1zZXQobGluZWFyLWdy
YWRpZW50KGdyZWVuLCB3aGl0ZSkgMXgpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxi
b2R5IGlkPSJib2R5Ij4KKyAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGRpdiBiZWxv
dyBpcyBhIDEwMHB4IGdyZWVuLXdoaXRlIGdyYWRpZW50IHNxdWFyZS48L2Rpdj4KKyAgICA8ZGl2
IGlkPWZvbz48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExh
eW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS5odG1sCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1z
ZXQtZ3JhZGllbnQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2lt
YWdlLXNldC1ncmFkaWVudC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
aGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
NSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisgICAgd2luZG93Lm9ubG9hZCA9ICgpID0+
IHsKKyAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLndh
aXRVbnRpbERvbmUoKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRCYWNraW5nU2NhbGVGYWN0b3Io
MiwgKCkgPT4gc2V0VGltZW91dCgoKSA9PiB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKSwgMCkpOwor
ICAgICAgfQorICAgIH0KKzwvc2NyaXB0PgorCis8c3R5bGU+CisgICAgI2ZvbyB7CisgICAgICAg
IHdpZHRoOjEwMHB4OworICAgICAgICBoZWlnaHQ6MTAwcHg7CisgICAgICAgIGJhY2tncm91bmQt
aW1hZ2U6IGltYWdlLXNldCh1cmwoJ3Jlc291cmNlcy9ibHVlLTEwMC1weC1zcXVhcmUucG5nJykg
MXgsIGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIDJ4KTsKKyAgICB9Cis8L3N0eWxlPgor
PC9oZWFkPgorCis8Ym9keT4KKyAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGRpdiBi
ZWxvdyBpcyBhIGJsdWUgMTAwcHggc3F1YXJlIHdoZW4gdGhlIGRldmljZVNjYWxlRmFjdG9yIGlz
IDEsIGFuZCBpZiBpdCBpcyBhIDEwMHB4IGdyZWVuLXdoaXRlIGdyYWRpZW50IHNxdWFyZSB3aGVu
IHRoZSBkZXZpY2VTY2FsZUZhY3RvciBpcyAyLjwvZGl2PgorICAgIDxkaXYgaWQ9Zm9vPjwvZGl2
PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFz
dC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhl
Y3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388264</attachid>
            <date>2020-01-20 16:12:18 -0800</date>
            <delta_ts>2020-01-20 16:40:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81941-20200121021215.patch</filename>
            <type>text/plain</type>
            <size>82508</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAyMC0wMS0xOSAgTm9hbSBS
b3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgLXdlYmtpdC1pbWFnZS1zZXQg
c2hvdWxkIHN1cHBvcnQgYWxsIHRoZSBpbWFnZSBmdW5jdGlvbnMgV2ViS2l0IHN1cHBvcnRzLCBu
b3QganVzdCB1cmwoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODE5NDEKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAg
ICBTZXBhcmF0ZSBTdHlsZUNhY2hlZEltYWdlIHRvIDQgY2xhc3NlczoKKyAgICAgICAgLSBTdHls
ZUNhY2hlZEltYWdlOiBmb3Igc2luZ2xlIGltYWdlcyBvbmx5CisgICAgICAgIC0gU3R5bGVNdWx0
aUltYWdlOiBmb3IgdmFsdWVzIHRoYXQgY2FuIGNvbnRhaW4gbXVsdGlwbGUgaW1hZ2VzOiBsaWtl
IGN1cnNvci9pbWFnZS1zZXQKKyAgICAgICAgLSBTdHlsZUltYWdlU2V0CisgICAgICAgIC0gU3R5
bGVDdXJzb3JJbWFnZQorCisgICAgICAgIFRoZSBuZXcgY2xhc3NlcyBvbmx5IGRlYWwgd2l0aCB0
aGVpciBvd24gdmFsdWUgdHlwZS4gQmVmb3JlLCBJbWFnZVNldCBhbmQgY3Vyc29yIHdlcmUgcmVz
b2x2ZWQKKyAgICAgICAgYXMgYSBTdHlsZUNhY2hlZEltYWdlLCB3aGljaCBpcyBubyBsb25nZXIg
YSB2YWxpZCBhc3N1bXB0aW9uIGlmIGltYWdlLXNldCBjYW4gY29udGFpbiBnZW5lcmF0ZWQgaW1h
Z2VzLgorICAgICAgICBUaG91Z2ggY3Vyc29ycyBzdGlsbCBjYW4gb25seSBjb250YWluIGNhY2hl
ZCBpbWFnZXMsIGl0IHdhcyBjbGVhbmVyIHRvIHJlZmFjdG9yIGl0IG91dCBhcyB3ZWxsLgorCisg
ICAgICAgIFJlZmFjdG9yZWQgYmVzdC1maXQgaW1hZ2Ugc2VsZWN0aW9uIGZyb20gbG9hZGluZy4g
Tm93IFN0eWxlQ2FjaGVkSW1hZ2UgaXMgaW4gY2hhcmdlIG9mIGxvYWRpbmcKKyAgICAgICAgdGhl
IGFjdHVhbCBpbWFnZSwgYW5kIFN0eWxlSW1hZ2VTZXQvU3R5bGVDdXJzb3JJbWFnZSBwZXJmb3Jt
IHRoZSBzb3VyY2Ugc2VsZWN0aW9uLgorCisgICAgICAgIEFsc28sIGFkZGVkIHRoZSBuZWNlc3Nh
cnkgbG9naWMgaW4gdGhlIENTUyBwYXJzZXIgdG8gY29uc3VtZSBnZW5lcmF0ZWQgaW1hZ2VzIGlu
c2lkZSBpbWFnZS1zZXRzLCBleGNsdWRpbmcKKyAgICAgICAgd2hlbiB0aGUgaW1hZ2Utc2V0IGlz
IGEgY3Vyc29yIHZhbHVlLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2Nzcy9pbWFnZS1zZXQtcGFy
c2luZy1nZW5lcmF0ZWQuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9oaWRwaS9pbWFnZS1zZXQt
Y3Jvc3MtZmFkZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFk
aWVudC1tdWx0aS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFk
aWVudC1zaW5nbGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3Jh
ZGllbnQuaHRtbAorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBmaWxl
cworCisgICAgICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6c2VsZWN0QmVzdEZpdEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0N1cnNvckltYWdlVmFsdWU6OmxvYWRJbWFnZSk6IERlbGV0ZWQuCisgICAg
ICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuaDoKKyAgICAgICAgICAgICAgICBJbnN0ZWFk
IG9mIGN1cnNvciBsb2FkaW5nIHRoZSBpbWFnZSwgaXQgc2VsZWN0cyBhbiBpbWFnZSBDU1MgdmFs
dWUKKworICAgICAgICAqIGNzcy9DU1NJbWFnZVNldFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ltYWdlU2V0VmFsdWU6OkNTU0ltYWdlU2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTSW1hZ2VTZXRWYWx1ZTo6ZmlsbEltYWdlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ltYWdlU2V0VmFsdWU6OmNhY2hlZEltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ltYWdlU2V0VmFsdWU6OnNlbGVjdEJlc3RGaXRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NJbWFnZVNldFZhbHVlOjp1cGRhdGVEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpDU1NJbWFnZVNldFZhbHVlOjppbWFnZVNldFdpdGhTdHlsZXNSZXNvbHZlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjp0cmF2ZXJzZVN1YnJlc291cmNlcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjpsb2FkQmVzdEZpdEltYWdl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5oOgorICAgICAgICAg
ICAgICAgIFJlZmFjdG9yIENTU0ltYWdlU2V0VmFsdWUgdG8gaW5jbHVkZSBub24tY2FjaGVkSW1h
Z2UgaW1hZ2VzCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVDdXJzb3IpOgorICAgICAgICAqIGNzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVVybE9yU3RyaW5nQXNTdHJpbmdWaWV3
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5oOgorICAgICAgICAgICAgICAgIAorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NTU1Byb3Bl
cnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRnVuYyk6CisgICAgICAg
ICAgICAgICAgV2hlbiBibGVuZGluZyB0d28gaW1hZ2VzLCBnZXQgdGhlIHNlbGVjdGVkIGltYWdl
cyBpbiBjYXNlIGl0IGlzIGFuIGltYWdlLXNldAorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
SW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1h
Z2VSZXNvdXJjZVN0eWxlSW1hZ2U6OmluaXRpYWxpemUpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FuRGlyZWN0bHlDb21w
b3NpdGVCYWNrZ3JvdW5kQmFja2dyb3VuZEltYWdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5
bGUvU2hhcGVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjppc0ltYWdl
VmFsaWQgY29uc3QpOgorICAgICAgICAgICAgICAgIFVzZSBoYXNDYWNoZWRJbWFnZSgpIGluc3Rl
YWQgb2YgaXNDYWNoZWRJbWFnZSgpIGFzIGEgU3R5bGVJbWFnZVNldCBpcyBubyBsb25nZXIgYW4g
aXNDYWNoZWRJbWFnZSgpCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNhY2hlZEltYWdlOjpTdHlsZUNhY2hl
ZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlVVJMKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OmxvYWQpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0
eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVD
dXJzb3JJbWFnZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFn
ZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZU11bHRpSW1hZ2UuY3BwOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlU2V0Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9T
dHlsZUltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUltYWdlOjpzZWxlY3RlZEltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW1hZ2U6OnNlbGVjdGVkSW1hZ2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVJbWFnZTo6aXNDdXJzb3JJbWFnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUltYWdlOjppc0ltYWdlU2V0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlSW1hZ2U6Omhhc0NhY2hlZEltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlSW1hZ2U6OlN0eWxlSW1hZ2UpOgorICAgICAgICAgICAgICAgIFNlcGFyYXRlIGN1
cnNvci9pbWFnZS1zZXQgcmVsYXRlZCBzdHVmZiBhd2F5IGZyb20gU3R5bGVDYWNoZWRJbWFnZS4K
KworICAgICAgICAqIHN0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OkJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb250ZW50KToKKyAgICAgICAgKiBz
dHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVp
bGRlclN0YXRlOjpyZXNvbHZlSW1hZ2VTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OkJ1aWxkZXJTdGF0ZTo6Y3JlYXRlU3R5bGVJbWFnZSk6CisgICAgICAgICogc3R5bGUvU3R5bGVC
dWlsZGVyU3RhdGUuaDoKKyAgICAgICAgICAgICAgICBNYXRjaCB0aGUgQ1NTIHZhbHVlcyB3aXRo
IHRoZSBjb3JyZWN0IFN0eWxlIGNsYXNzLiBBbHNvLCBlbnN1cmUgaW1hZ2Utc2V0cyByZXNvbHZl
IHRoZWlyIAorICAgICAgICAgICAgICAgIGltYWdlcycgc3R5bGVzIGFzIHRoZXkgbWF5IGNvbnRh
aW4gZ3JhZGllbnRzIGFuZCBvdGhlciBjb250ZXh0LWF3YXJlIHZhbHVlcy4KKwogMjAyMC0wMS0x
OSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10gRGV2
aXJ0dWFsaXplIEZvcm1hdHRpbmdTdGF0ZQpJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI1
NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0y
MjYyLDE1ICsyMjYyLDE4IEBAIHJlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmNwcAogcmVuZGVy
aW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVC
b3hEYXRhLmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCityZW5kZXJp
bmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZURlcHJl
Y2F0ZWRGbGV4aWJsZUJveERhdGEuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVGaWx0ZXJEYXRh
LmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlRmxleGlibGVCb3hEYXRhLmNwcAogcmVuZGVyaW5n
L3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVHcmlk
RGF0YS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZUdyaWRJdGVtRGF0YS5jcHAKK3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZUltYWdlU2V0LmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJpdGVk
RGF0YS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZU1hcnF1ZWVEYXRhLmNwcAogcmVuZGVyaW5n
L3N0eWxlL1N0eWxlTXVsdGlDb2xEYXRhLmNwcAorcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJ
bWFnZS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcAogcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuY3BwCiByZW5kZXJpbmcvc3R5
bGUvU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjU0ODA4KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzcxNSw5ICsxMzcxNSwxNSBAQAogCQlDOURBREJDOTFCMUQzQjI1MDAxRjE3
RDggLyogSlNNZWRpYVNlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNNZWRpYVNlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
OURBREJDQTFCMUQzQjI1MDAxRjE3RDggLyogSlNNZWRpYVNlc3Npb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNZWRpYVNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzlGODdDRkQxQjI4RTVGNjAwOTc5QjgzIC8qIE1lZGlhU2Vzc2lvbkV2ZW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU2Vzc2lvbkV2ZW50cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDQTA5MUQ4NjIzQ0Y5MDc4MDBBRDQzNDYgLyogU3R5bGVJbWFnZVNldC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUltYWdlU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQ0EwOTFEODkyM0NGOTA4ODAwQUQ0MzQ2IC8qIFN0eWxlSW1hZ2VTZXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVJbWFnZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDQTE2MzVEQzIwNzJFNzY5MDBFN0QyQ0UgLyogUmVmZXJyZXJQb2xpY3kuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVmZXJyZXJQb2xpY3kuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQTNCRjY3QjEwRDk5QkFFMDBFNkNFNTMgLyog
U2Nyb2xsQW5pbWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2Nyb2xsQW5pbWF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQTNCRjY3
RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQ0E1MkJBRTUyM0QwQUYxNjAwREUwQjg0IC8qIFN0eWxlQ3Vyc29ySW1hZ2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVDdXJzb3JJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUNBNTJCQUU3MjNEMEFGMTcwMERFMEI4NCAvKiBTdHlsZU11bHRpSW1hZ2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVNdWx0aUltYWdlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0E1MkJBRTgyM0QwQUYxODAwREUwQjg0IC8qIFN0eWxlTXVsdGlJ
bWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZU11bHRpSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQ0E1MkJBRTkyM0QwQUYxOTAwREUwQjg0IC8qIFN0eWxlQ3Vyc29ySW1h
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVDdXJzb3JJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDQTZDMTUyRjIyMEI0QTU1MDA1NUNCRkMgLyogSlNJREJSZXF1ZXN0Q3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCUmVxdWVz
dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNBNkMxNTM3MjIwRDFF
QjMwMDU1Q0JGQyAvKiBKU0lEQkN1cnNvckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0lEQkN1cnNvckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNBNkMxNTM4MjIwRDFFQjMwMDU1Q0JGQyAvKiBKU0lEQkN1cnNvcldpdGhW
YWx1ZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lE
QkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yNTU1Myw2ICsyNTU1OSw4IEBACiAJCQkJQkNFRjQ0NEMwRTY3NDYyODAwMUMxMjg3IC8qIFN0
eWxlQ2FjaGVkSW1hZ2UuaCAqLywKIAkJCQkxQzBBQTE2QTIxOTQwREM3MDA4OTY4MjkgLyogU3R5
bGVDb2xvclNjaGVtZS5oICovLAogCQkJCTlEQUM3QzU2MUFGMkNCNjQwMDQzN0M0NCAvKiBTdHls
ZUNvbnRlbnRBbGlnbm1lbnREYXRhLmggKi8sCisJCQkJQ0E1MkJBRTUyM0QwQUYxNjAwREUwQjg0
IC8qIFN0eWxlQ3Vyc29ySW1hZ2UuY3BwICovLAorCQkJCUNBNTJCQUU5MjNEMEFGMTkwMERFMEI4
NCAvKiBTdHlsZUN1cnNvckltYWdlLmggKi8sCiAJCQkJQkM3NzlFMTUxQkIyMjZBMjAwQ0FBOEJG
IC8qIFN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhLmggKi8sCiAJCQkJQkM1RUI4QjYwRTgyMDFCRDAw
QjI1OTY1IC8qIFN0eWxlRGVwcmVjYXRlZEZsZXhpYmxlQm94RGF0YS5jcHAgKi8sCiAJCQkJQkM1
RUI4QjcwRTgyMDFCRDAwQjI1OTY1IC8qIFN0eWxlRGVwcmVjYXRlZEZsZXhpYmxlQm94RGF0YS5o
ICovLApAQCAtMjU1NjcsMTIgKzI1NTc1LDE2IEBACiAJCQkJQTExMERCOUMxNEY1REY4NzAwQTAz
QjkzIC8qIFN0eWxlR3JpZEl0ZW1EYXRhLmNwcCAqLywKIAkJCQlBMTEwREI5QTE0RjVERjc3MDBB
MDNCOTMgLyogU3R5bGVHcmlkSXRlbURhdGEuaCAqLywKIAkJCQlCQ0VGNDNDRTBFNjczREExMDAx
QzEyODcgLyogU3R5bGVJbWFnZS5oICovLAorCQkJCUNBMDkxRDg2MjNDRjkwNzgwMEFENDM0NiAv
KiBTdHlsZUltYWdlU2V0LmNwcCAqLywKKwkJCQlDQTA5MUQ4OTIzQ0Y5MDg4MDBBRDQzNDYgLyog
U3R5bGVJbWFnZVNldC5oICovLAogCQkJCUJDMjI3MzAxMEU4MkYxRTYwMEU3Rjk3NSAvKiBTdHls
ZUluaGVyaXRlZERhdGEuY3BwICovLAogCQkJCUJDMjI3MzAyMEU4MkYxRTYwMEU3Rjk3NSAvKiBT
dHlsZUluaGVyaXRlZERhdGEuaCAqLywKIAkJCQlCQzVFQjcyNzBFODFERTgxMDBCMjU5NjUgLyog
U3R5bGVNYXJxdWVlRGF0YS5jcHAgKi8sCiAJCQkJQkM1RUI3MjgwRTgxREU4MTAwQjI1OTY1IC8q
IFN0eWxlTWFycXVlZURhdGEuaCAqLywKIAkJCQlCQzVFQjc0QjBFODFFMDY3MDBCMjU5NjUgLyog
U3R5bGVNdWx0aUNvbERhdGEuY3BwICovLAogCQkJCUJDNUVCNzRDMEU4MUUwNjcwMEIyNTk2NSAv
KiBTdHlsZU11bHRpQ29sRGF0YS5oICovLAorCQkJCUNBNTJCQUU3MjNEMEFGMTcwMERFMEI4NCAv
KiBTdHlsZU11bHRpSW1hZ2UuY3BwICovLAorCQkJCUNBNTJCQUU4MjNEMEFGMTgwMERFMEI4NCAv
KiBTdHlsZU11bHRpSW1hZ2UuaCAqLywKIAkJCQlCQzIyNzJFMTBFODJFRTlCMDBFN0Y5NzUgLyog
U3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5jcHAgKi8sCiAJCQkJQkMyMjcyRTIwRTgyRUU5QjAwRTdG
OTc1IC8qIFN0eWxlUmFyZUluaGVyaXRlZERhdGEuaCAqLywKIAkJCQlCQzIyNzJCQTBFODJFQUFF
MDBFN0Y5NzUgLyogU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAgKi8sCkBAIC0zMTM1Nyw2
ICszMTM2OSw3IEBACiAJCQkJMTE5OUZBNDYyMDhFMzVBMzAwMjM1OENDIC8qIExheW91dENvbnRh
aW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkYyNkJCNkMyMzM0M0U2RjAwMkYyQkVBIC8qIExh
eW91dENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTExMzEwQ0Y1MjBCQTRBNEMwMDY1QThE
MCAvKiBMYXlvdXREZXNjZW5kYW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0MTgw
MjU1MjNENDU0OUIwMEZGQjA3MSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU0QUJBQkREMjM2MDg4RkUwMEZBNDM0NSAvKiBMYXlvdXRJbnRlZ3JhdGlv
bkxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTExMzEwQ0Y0MjBCQTRBM0QwMDY1QThE
MCAvKiBMYXlvdXRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxRDcyRjYxNUZFNjk1
MzAwQzRDMDdFIC8qIExheW91dE1pbGVzdG9uZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjA1MCw3
ICszMjA2Myw2IEBACiAJCQkJNDU4RkU0MEExNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNlYXJj
aEZpZWxkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQgLyog
UmVuZGVyU2VsZWN0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUIyNDdBNkQwQUZENjM4
MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQxODAyNTUy
M0Q0NTQ5QjAwRkZCMDcxIC8qIExheW91dEludGVncmF0aW9uQm94VHJlZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzE5NTVBODgxNjBEMTk5MjAwODU4MDI1IC8qIFJlbmRlclNuYXBzaG90dGVkUGx1
Z0luLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhDOEZBRTBERENEMzFCMDBCNTkyRjQgLyogUmVu
ZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNjY4MEU4MUNCNzEwMEIyNTk2NSAv
KiBSZW5kZXJTdHlsZUNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk1LDE3ICs5NSwxNyBAQCB2b2lkIENTU0N1cnNvckltYWdlVmFsdWU6OmN1cnNvckVsZW1l
bnRDCiAgICAgbV9ob3RTcG90LnNldFkoc3RhdGljX2Nhc3Q8aW50Pih5KSk7CiB9CiAKLXN0ZDo6
cGFpcjxDYWNoZWRJbWFnZSosIGZsb2F0PiBDU1NDdXJzb3JJbWFnZVZhbHVlOjpsb2FkSW1hZ2Uo
Q2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25z
JiBvcHRpb25zKQorSW1hZ2VXaXRoU2NhbGUgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6c2VsZWN0QmVz
dEZpdEltYWdlKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBpZiAoaXM8Q1NTSW1h
Z2VTZXRWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENTU0ltYWdlU2V0VmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkubG9hZEJlc3RGaXRJbWFnZShs
b2FkZXIsIG9wdGlvbnMpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1
ZT4obV9pbWFnZVZhbHVlLmdldCgpKS5zZWxlY3RCZXN0Rml0SW1hZ2UoZG9jdW1lbnQpOwogCi0g
ICAgaWYgKGF1dG8qIGN1cnNvckVsZW1lbnQgPSB1cGRhdGVDdXJzb3JFbGVtZW50KCpsb2FkZXIu
ZG9jdW1lbnQoKSkpIHsKKyAgICBpZiAoYXV0byogY3Vyc29yRWxlbWVudCA9IHVwZGF0ZUN1cnNv
ckVsZW1lbnQoZG9jdW1lbnQpKSB7CiAgICAgICAgIGlmIChjdXJzb3JFbGVtZW50LT5ocmVmKCkg
IT0gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKS51cmwoKSkKLSAg
ICAgICAgICAgIG1faW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFsdWU6OmNyZWF0ZShsb2FkZXIuZG9j
dW1lbnQoKS0+Y29tcGxldGVVUkwoY3Vyc29yRWxlbWVudC0+aHJlZigpKSwgbV9sb2FkZWRGcm9t
T3BhcXVlU291cmNlKTsKKyAgICAgICAgICAgIG1faW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFsdWU6
OmNyZWF0ZShkb2N1bWVudC5jb21wbGV0ZVVSTChjdXJzb3JFbGVtZW50LT5ocmVmKCkpLCBtX2xv
YWRlZEZyb21PcGFxdWVTb3VyY2UpOwogICAgIH0KIAotICAgIHJldHVybiB7IGRvd25jYXN0PENT
U0ltYWdlVmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkubG9hZEltYWdlKGxvYWRlciwgb3B0aW9u
cyksIDEgfTsKKyAgICByZXR1cm4geyBtX2ltYWdlVmFsdWUucHRyKCkgLCAxIH07CiB9CiAKIGJv
b2wgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6ZXF1YWxzKGNvbnN0IENTU0N1cnNvckltYWdlVmFsdWUm
IG90aGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1
ZS5oCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1h
Z2VWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw2IEBACiAKICNwcmFnbWEgb25j
ZQogCi0jaW5jbHVkZSAiQ1NTVmFsdWUuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1
ZGUgIlJlc291cmNlTG9hZGVyT3B0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBA
IC0zMSw5ICszMCwxNCBAQCBjbGFzcyBDYWNoZWRJbWFnZTsKIGNsYXNzIENhY2hlZFJlc291cmNl
TG9hZGVyOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50Oworc3RydWN0IEltYWdlV2l0
aFNjYWxlOwogY2xhc3MgU1ZHQ3Vyc29yRWxlbWVudDsKIGNsYXNzIFNWR0VsZW1lbnQ7CiAKK25h
bWVzcGFjZSBTdHlsZSB7CitjbGFzcyBCdWlsZGVyU3RhdGU7Cit9CisKIGNsYXNzIENTU0N1cnNv
ckltYWdlVmFsdWUgZmluYWwgOiBwdWJsaWMgQ1NTVmFsdWUgewogcHVibGljOgogICAgIHN0YXRp
YyBSZWY8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4gY3JlYXRlKFJlZjxDU1NWYWx1ZT4mJiBpbWFnZVZh
bHVlLCBib29sIGhhc0hvdFNwb3QsIGNvbnN0IEludFBvaW50JiBob3RTcG90LCBMb2FkZWRGcm9t
T3BhcXVlU291cmNlIGxvYWRlZEZyb21PcGFxdWVTb3VyY2UpCkBAIC01Niw3ICs2MCw3IEBAIHB1
YmxpYzoKIAogICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3Q7CiAKLSAgICBzdGQ6OnBh
aXI8Q2FjaGVkSW1hZ2UqLCBmbG9hdD4gbG9hZEltYWdlKENhY2hlZFJlc291cmNlTG9hZGVyJiwg
Y29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJik7CisgICAgSW1hZ2VXaXRoU2NhbGUgc2VsZWN0
QmVzdEZpdEltYWdlKGNvbnN0IERvY3VtZW50Jik7CiAKICAgICB2b2lkIHJlbW92ZVJlZmVyZW5j
ZWRFbGVtZW50KFNWR0VsZW1lbnQqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0lt
YWdlU2V0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFn
ZVNldFZhbHVlLmNwcAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ltYWdlU2V0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxOSArMjgsMjAgQEAKIAog
I2luY2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5o
IgotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVCdWlsZGVyU3RhdGUuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ1NT
SW1hZ2VTZXRWYWx1ZTo6Q1NTSW1hZ2VTZXRWYWx1ZShMb2FkZWRGcm9tT3BhcXVlU291cmNlIGxv
YWRlZEZyb21PcGFxdWVTb3VyY2UpCitSZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gQ1NTSW1hZ2VTZXRW
YWx1ZTo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NJbWFnZVNldFZh
bHVlKTsKK30KKworQ1NTSW1hZ2VTZXRWYWx1ZTo6Q1NTSW1hZ2VTZXRWYWx1ZSgpCiAgICAgOiBD
U1NWYWx1ZUxpc3QoSW1hZ2VTZXRDbGFzcywgQ29tbWFTZXBhcmF0b3IpCi0gICAgLCBtX2xvYWRl
ZEZyb21PcGFxdWVTb3VyY2UobG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSkKIHsKIH0KIApAQCAtNTIs
MTUgKzUzLDE0IEBAIHZvaWQgQ1NTSW1hZ2VTZXRWYWx1ZTo6ZmlsbEltYWdlU2V0KCkKICAgICBz
aXplX3QgaSA9IDA7CiAgICAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKICAgICAgICAgQ1NTVmFsdWUq
IGltYWdlVmFsdWUgPSBpdGVtKGkpOwotICAgICAgICBVUkwgaW1hZ2VVUkwgPSBkb3duY2FzdDxD
U1NJbWFnZVZhbHVlPigqaW1hZ2VWYWx1ZSkudXJsKCk7Ci0KKyAgICAgICAgQVNTRVJUKGlzPENT
U0ltYWdlVmFsdWU+KGltYWdlVmFsdWUpIHx8IGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KGlt
YWdlVmFsdWUpKTsKICAgICAgICAgKytpOwogICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihpIDwgbGVuZ3RoKTsKICAgICAgICAgQ1NTVmFsdWUqIHNjYWxlRmFjdG9yVmFs
dWUgPSBpdGVtKGkpOwogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqc2NhbGVGYWN0b3JWYWx1ZSkuZmxvYXRWYWx1ZSgpOwogCiAgICAgICAg
IEltYWdlV2l0aFNjYWxlIGltYWdlOwotICAgICAgICBpbWFnZS5pbWFnZVVSTCA9IGltYWdlVVJM
OworICAgICAgICBpbWFnZS52YWx1ZSA9IGltYWdlVmFsdWU7CiAgICAgICAgIGltYWdlLnNjYWxl
RmFjdG9yID0gc2NhbGVGYWN0b3I7CiAgICAgICAgIG1faW1hZ2VzSW5TZXQuYXBwZW5kKGltYWdl
KTsKICAgICAgICAgKytpOwpAQCAtNzAsNyArNzAsNyBAQCB2b2lkIENTU0ltYWdlU2V0VmFsdWU6
OmZpbGxJbWFnZVNldCgpCiAgICAgc3RkOjpzb3J0KG1faW1hZ2VzSW5TZXQuYmVnaW4oKSwgbV9p
bWFnZXNJblNldC5lbmQoKSwgQ1NTSW1hZ2VTZXRWYWx1ZTo6Y29tcGFyZUJ5U2NhbGVGYWN0b3Ip
OwogfQogCi1DU1NJbWFnZVNldFZhbHVlOjpJbWFnZVdpdGhTY2FsZSBDU1NJbWFnZVNldFZhbHVl
OjpiZXN0SW1hZ2VGb3JTY2FsZUZhY3RvcigpCitJbWFnZVdpdGhTY2FsZSBDU1NJbWFnZVNldFZh
bHVlOjpiZXN0SW1hZ2VGb3JTY2FsZUZhY3RvcigpCiB7CiAgICAgaWYgKCFtX2ltYWdlc0luU2V0
LnNpemUoKSkKICAgICAgICAgZmlsbEltYWdlU2V0KCk7CkBAIC04NSw0MiArODUsNTIgQEAgQ1NT
SW1hZ2VTZXRWYWx1ZTo6SW1hZ2VXaXRoU2NhbGUgQ1NTSW1hZwogICAgIHJldHVybiBpbWFnZTsK
IH0KIAotc3RkOjpwYWlyPENhY2hlZEltYWdlKiwgZmxvYXQ+IENTU0ltYWdlU2V0VmFsdWU6Omxv
YWRCZXN0Rml0SW1hZ2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3Vy
Y2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKQorQ2FjaGVkSW1hZ2UqIENTU0ltYWdlU2V0VmFsdWU6
OmNhY2hlZEltYWdlKCkgY29uc3QKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBsb2FkZXIu
ZG9jdW1lbnQoKTsKLSAgICBBU1NFUlQoZG9jdW1lbnQpOworICAgIGlmICghbV9zZWxlY3RlZElt
YWdlVmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChpczxDU1NJbWFnZVZh
bHVlPihtX3NlbGVjdGVkSW1hZ2VWYWx1ZSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NJ
bWFnZVZhbHVlPigqbV9zZWxlY3RlZEltYWdlVmFsdWUpLmNhY2hlZEltYWdlKCk7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CiAKLSAgICB1cGRhdGVEZXZpY2VTY2FsZUZhY3RvcigqZG9jdW1lbnQp
OworSW1hZ2VXaXRoU2NhbGUgQ1NTSW1hZ2VTZXRWYWx1ZTo6c2VsZWN0QmVzdEZpdEltYWdlKGNv
bnN0IERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAgICB1cGRhdGVEZXZpY2VTY2FsZUZhY3Rvcihk
b2N1bWVudCk7CiAKICAgICBpZiAoIW1fYWNjZXNzZWRCZXN0Rml0SW1hZ2UpIHsKICAgICAgICAg
bV9hY2Nlc3NlZEJlc3RGaXRJbWFnZSA9IHRydWU7Ci0KLSAgICAgICAgLy8gRklYTUU6IEluIHRo
ZSBmdXR1cmUsIHdlIHdhbnQgdG8gdGFrZSBtdWNoIG1vcmUgdGhhbiBkZXZpY2VTY2FsZUZhY3Rv
ciBpbnRvIGFjb3VudCBoZXJlLgotICAgICAgICAvLyBBbGwgZm9ybXMgb2Ygc2NhbGUgc2hvdWxk
IGJlIGluY2x1ZGVkOiBQYWdlOjpwYWdlU2NhbGVGYWN0b3IoKSwgRnJhbWU6OnBhZ2Vab29tRmFj
dG9yKCksCi0gICAgICAgIC8vIGFuZCBhbnkgQ1NTIHRyYW5zZm9ybXMuIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTY5OAotICAgICAgICBJbWFnZVdpdGhTY2FsZSBp
bWFnZSA9IGJlc3RJbWFnZUZvclNjYWxlRmFjdG9yKCk7Ci0KLSAgICAgICAgUmVzb3VyY2VMb2Fk
ZXJPcHRpb25zIGxvYWRPcHRpb25zID0gb3B0aW9uczsKLSAgICAgICAgbG9hZE9wdGlvbnMubG9h
ZGVkRnJvbU9wYXF1ZVNvdXJjZSA9IG1fbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTsKLSAgICAgICAg
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KGRvY3VtZW50LT5j
b21wbGV0ZVVSTChpbWFnZS5pbWFnZVVSTCkpLCBsb2FkT3B0aW9ucyk7Ci0gICAgICAgIHJlcXVl
c3Quc2V0SW5pdGlhdG9yKGNhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMoKS5jc3MpOwot
ICAgICAgICBpZiAob3B0aW9ucy5tb2RlID09IEZldGNoT3B0aW9uczo6TW9kZTo6Q29ycykKLSAg
ICAgICAgICAgIHJlcXVlc3QudXBkYXRlRm9yQWNjZXNzQ29udHJvbCgqZG9jdW1lbnQpOwotCi0g
ICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBsb2FkZXIucmVxdWVzdEltYWdlKFdURk1vdmUocmVxdWVz
dCkpLnZhbHVlX29yKG51bGxwdHIpOwotICAgICAgICBtX2Jlc3RGaXRJbWFnZVNjYWxlRmFjdG9y
ID0gaW1hZ2Uuc2NhbGVGYWN0b3I7CisgICAgICAgIG1fYmVzdEZpdEltYWdlID0gYmVzdEltYWdl
Rm9yU2NhbGVGYWN0b3IoKTsKICAgICB9Ci0gICAgcmV0dXJuIHsgbV9jYWNoZWRJbWFnZS5nZXQo
KSwgbV9iZXN0Rml0SW1hZ2VTY2FsZUZhY3RvciB9OworCisgICAgcmV0dXJuIG1fYmVzdEZpdElt
YWdlOwogfQogCiB2b2lkIENTU0ltYWdlU2V0VmFsdWU6OnVwZGF0ZURldmljZVNjYWxlRmFjdG9y
KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKIHsKKworICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0
dXJlLCB3ZSB3YW50IHRvIHRha2UgbXVjaCBtb3JlIHRoYW4gZGV2aWNlU2NhbGVGYWN0b3IgaW50
byBhY291bnQgaGVyZS4KKyAgICAvLyBBbGwgZm9ybXMgb2Ygc2NhbGUgc2hvdWxkIGJlIGluY2x1
ZGVkOiBQYWdlOjpwYWdlU2NhbGVGYWN0b3IoKSwgRnJhbWU6OnBhZ2Vab29tRmFjdG9yKCksCisg
ICAgLy8gYW5kIGFueSBDU1MgdHJhbnNmb3Jtcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTgxNjk4CiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBkb2N1bWVu
dC5wYWdlKCkgPyBkb2N1bWVudC5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCkgOiAxOwogICAg
IGlmIChkZXZpY2VTY2FsZUZhY3RvciA9PSBtX2RldmljZVNjYWxlRmFjdG9yKQogICAgICAgICBy
ZXR1cm47CiAgICAgbV9kZXZpY2VTY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yOwogICAg
IG1fYWNjZXNzZWRCZXN0Rml0SW1hZ2UgPSBmYWxzZTsKLSAgICBtX2NhY2hlZEltYWdlID0gbnVs
bHB0cjsKKyAgICBtX3NlbGVjdGVkSW1hZ2VWYWx1ZSA9IG51bGxwdHI7Cit9CisKK1JlZjxDU1NJ
bWFnZVNldFZhbHVlPiBDU1NJbWFnZVNldFZhbHVlOjppbWFnZVNldFdpdGhTdHlsZXNSZXNvbHZl
ZChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCit7CisgICAgUmVmPENTU0ltYWdl
U2V0VmFsdWU+IHJlc3VsdCA9IENTU0ltYWdlU2V0VmFsdWU6OmNyZWF0ZSgpOworICAgIHNpemVf
dCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aDsgaSArPSAyKSB7CisgICAgICAgIENTU1ZhbHVlKiBpbWFnZVZhbHVlID0gaXRlbVdpdGhv
dXRCb3VuZHNDaGVjayhpKTsKKyAgICAgICAgcmVzdWx0LT5hcHBlbmQoYnVpbGRlclN0YXRlLnJl
c29sdmVJbWFnZVN0eWxlcygqaW1hZ2VWYWx1ZSkpOworICAgICAgICByZXN1bHQtPmFwcGVuZCgq
aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpICsgMSkpOworICAgIH0KKworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIFN0cmluZyBDU1NJbWFnZVNldFZhbHVlOjpjdXN0b21DU1NUZXh0KCkgY29uc3QK
QEAgLTE1NSw5ICsxNjUsNyBAQCBTdHJpbmcgQ1NTSW1hZ2VTZXRWYWx1ZTo6Y3VzdG9tQ1NTVGV4
dCgpCiAKIGJvb2wgQ1NTSW1hZ2VTZXRWYWx1ZTo6dHJhdmVyc2VTdWJyZXNvdXJjZXMoY29uc3Qg
V1RGOjpGdW5jdGlvbjxib29sIChjb25zdCBDYWNoZWRSZXNvdXJjZSYpPiYgaGFuZGxlcikgY29u
c3QKIHsKLSAgICBpZiAoIW1fY2FjaGVkSW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gaGFuZGxlcigqbV9jYWNoZWRJbWFnZSk7CisgICAgcmV0dXJuIG1fc2VsZWN0ZWRJ
bWFnZVZhbHVlICYmIG1fc2VsZWN0ZWRJbWFnZVZhbHVlLT50cmF2ZXJzZVN1YnJlc291cmNlcyho
YW5kbGVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTSW1hZ2VTZXRWYWx1ZS5oCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw1MyArMjksNTUg
QEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlJlc291cmNl
TG9hZGVyT3B0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYWNoZWRJbWFnZTsK
IGNsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwogY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBDU1NJ
bWFnZVZhbHVlOworCituYW1lc3BhY2UgU3R5bGUgeworY2xhc3MgQnVpbGRlclN0YXRlOworfQor
CitzdHJ1Y3QgSW1hZ2VXaXRoU2NhbGUgeworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWU7Cisg
ICAgZmxvYXQgc2NhbGVGYWN0b3IgeyAxIH07Cit9OworCiAKIGNsYXNzIENTU0ltYWdlU2V0VmFs
dWUgZmluYWwgOiBwdWJsaWMgQ1NTVmFsdWVMaXN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PENTU0ltYWdlU2V0VmFsdWU+IGNyZWF0ZShMb2FkZWRGcm9tT3BhcXVlU291cmNlIGxvYWRlZEZy
b21PcGFxdWVTb3VyY2UpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NJ
bWFnZVNldFZhbHVlKGxvYWRlZEZyb21PcGFxdWVTb3VyY2UpKTsKLSAgICB9CisgICAgc3RhdGlj
IFJlZjxDU1NJbWFnZVNldFZhbHVlPiBjcmVhdGUoKTsKICAgICB+Q1NTSW1hZ2VTZXRWYWx1ZSgp
OwogCi0gICAgc3RkOjpwYWlyPENhY2hlZEltYWdlKiwgZmxvYXQ+ICBsb2FkQmVzdEZpdEltYWdl
KENhY2hlZFJlc291cmNlTG9hZGVyJiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJik7Ci0g
ICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbWFn
ZS5nZXQoKTsgfQorICAgIEltYWdlV2l0aFNjYWxlIHNlbGVjdEJlc3RGaXRJbWFnZShjb25zdCBE
b2N1bWVudCYpOworICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSgpIGNvbnN0OwogCiAgICAg
U3RyaW5nIGN1c3RvbUNTU1RleHQoKSBjb25zdDsKIAotICAgIHN0cnVjdCBJbWFnZVdpdGhTY2Fs
ZSB7Ci0gICAgICAgIFVSTCBpbWFnZVVSTDsKLSAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3I7Ci0g
ICAgfTsKLQogICAgIGJvb2wgdHJhdmVyc2VTdWJyZXNvdXJjZXMoY29uc3QgV1RGOjpGdW5jdGlv
bjxib29sIChjb25zdCBDYWNoZWRSZXNvdXJjZSYpPiYgaGFuZGxlcikgY29uc3Q7CiAKICAgICB2
b2lkIHVwZGF0ZURldmljZVNjYWxlRmFjdG9yKGNvbnN0IERvY3VtZW50Jik7CiAKLSAgICBVUkwg
YmVzdEltYWdlRm9yU2NhbGVGYWN0b3JVUkwoKSB7IHJldHVybiBiZXN0SW1hZ2VGb3JTY2FsZUZh
Y3RvcigpLmltYWdlVVJMOyB9CisgICAgUmVmPENTU0ltYWdlU2V0VmFsdWU+IGltYWdlU2V0V2l0
aFN0eWxlc1Jlc29sdmVkKFN0eWxlOjpCdWlsZGVyU3RhdGUmKTsKIAogcHJvdGVjdGVkOgogICAg
IEltYWdlV2l0aFNjYWxlIGJlc3RJbWFnZUZvclNjYWxlRmFjdG9yKCk7CiAKIHByaXZhdGU6Ci0g
ICAgZXhwbGljaXQgQ1NTSW1hZ2VTZXRWYWx1ZShMb2FkZWRGcm9tT3BhcXVlU291cmNlKTsKKyAg
ICBDU1NJbWFnZVNldFZhbHVlKCk7CiAKICAgICB2b2lkIGZpbGxJbWFnZVNldCgpOwogICAgIHN0
YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlQnlTY2FsZUZhY3RvcihJbWFnZVdpdGhTY2FsZSBmaXJz
dCwgSW1hZ2VXaXRoU2NhbGUgc2Vjb25kKSB7IHJldHVybiBmaXJzdC5zY2FsZUZhY3RvciA8IHNl
Y29uZC5zY2FsZUZhY3RvcjsgfQogCi0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkSW1h
Z2U+IG1fY2FjaGVkSW1hZ2U7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBtX3NlbGVjdGVkSW1hZ2VW
YWx1ZTsKICAgICBib29sIG1fYWNjZXNzZWRCZXN0Rml0SW1hZ2UgeyBmYWxzZSB9OwotICAgIGZs
b2F0IG1fYmVzdEZpdEltYWdlU2NhbGVGYWN0b3IgeyAxIH07CisgICAgSW1hZ2VXaXRoU2NhbGUg
bV9iZXN0Rml0SW1hZ2U7CiAgICAgZmxvYXQgbV9kZXZpY2VTY2FsZUZhY3RvciB7IDEgfTsKLQog
ICAgIFZlY3RvcjxJbWFnZVdpdGhTY2FsZT4gbV9pbWFnZXNJblNldDsKLSAgICBMb2FkZWRGcm9t
T3BhcXVlU291cmNlIG1fbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSB7IExvYWRlZEZyb21PcGFxdWVT
b3VyY2U6Ok5vIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAkocmV2aXNpb24g
MjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNTEsNyArMjE1MSw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUKIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVD
dXJzb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQm
IGNvbnRleHQsIGJvb2wgaW5RdWlya3NNb2RlKQogewogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+
IGxpc3Q7Ci0gICAgd2hpbGUgKFJlZlB0cjxDU1NWYWx1ZT4gaW1hZ2UgPSBjb25zdW1lSW1hZ2Uo
cmFuZ2UsIGNvbnRleHQsIENvbnN1bWVHZW5lcmF0ZWRJbWFnZTo6Rm9yYmlkKSkgeworICAgIHdo
aWxlIChSZWZQdHI8Q1NTVmFsdWU+IGltYWdlID0gY29uc3VtZUltYWdlKHJhbmdlLCBjb250ZXh0
LCB7IEFsbG93ZWRJbWFnZVR5cGVzOjpVUkxGdW5jdGlvbiwgQWxsb3dlZEltYWdlVHlwZXM6Oklt
YWdlU2V0IH0pKSB7CiAgICAgICAgIGRvdWJsZSBudW07CiAgICAgICAgIEludFBvaW50IGhvdFNw
b3QoLTEsIC0xKTsKICAgICAgICAgYm9vbCBob3RTcG90U3BlY2lmaWVkID0gZmFsc2U7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnMuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Nzks
MjQgKzE0NzksMTYgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUdlbmVyYXRlZAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBTdHJpbmdWaWV3IGNvbnN1bWVVcmxPclN0
cmluZ0FzU3RyaW5nVmlldyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzKQotewotICAgIGlmIChh
cmdzLnBlZWsoKS50eXBlKCkgPT0gU3RyaW5nVG9rZW4pCi0gICAgICAgIHJldHVybiBhcmdzLmNv
bnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFsdWUoKTsKLSAgICByZXR1cm4gY29uc3VtZVVy
bEFzU3RyaW5nVmlldyhhcmdzKTsKLX0KLQotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3Vt
ZUltYWdlU2V0KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250
ZXh0JiBjb250ZXh0KQorc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlU2V0KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0
LCBPcHRpb25TZXQ8QWxsb3dlZEltYWdlVHlwZXM+IGFsbG93ZWRJbWFnZVR5cGVzKQogewogICAg
IENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2VDb3B5ID0gcmFuZ2U7CiAgICAgQ1NTUGFyc2VyVG9r
ZW5SYW5nZSBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdlQ29weSk7Ci0gICAgUmVmUHRyPENT
U0ltYWdlU2V0VmFsdWU+IGltYWdlU2V0ID0gQ1NTSW1hZ2VTZXRWYWx1ZTo6Y3JlYXRlKGNvbnRl
eHQuaXNDb250ZW50T3BhcXVlID8gTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6WWVzIDogTG9hZGVk
RnJvbU9wYXF1ZVNvdXJjZTo6Tm8pOworICAgIFJlZlB0cjxDU1NJbWFnZVNldFZhbHVlPiBpbWFn
ZVNldCA9IENTU0ltYWdlU2V0VmFsdWU6OmNyZWF0ZSgpOwogICAgIGRvIHsKLSAgICAgICAgQXRv
bVN0cmluZyB1cmxWYWx1ZSA9IGNvbnN1bWVVcmxPclN0cmluZ0FzU3RyaW5nVmlldyhhcmdzKS50
b0F0b21TdHJpbmcoKTsKLSAgICAgICAgaWYgKHVybFZhbHVlLmlzTnVsbCgpKQorICAgICAgICBS
ZWZQdHI8Q1NTVmFsdWU+IGltYWdlID0gY29uc3VtZUltYWdlKGFyZ3MsIGNvbnRleHQsIChhbGxv
d2VkSW1hZ2VUeXBlcyB8IEFsbG93ZWRJbWFnZVR5cGVzOjpSYXdTdHJpbmdBc1VSTCkgLSBBbGxv
d2VkSW1hZ2VUeXBlczo6SW1hZ2VTZXQpOworICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBpbWFnZSA9IENT
U0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTChjb250ZXh0LCB1cmxWYWx1ZSksIGNvbnRl
eHQuaXNDb250ZW50T3BhcXVlID8gTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6WWVzIDogTG9hZGVk
RnJvbU9wYXF1ZVNvdXJjZTo6Tm8pOwogICAgICAgICBpbWFnZVNldC0+YXBwZW5kKGltYWdlLnJl
bGVhc2VOb25OdWxsKCkpOwogCiAgICAgICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9
IGFyZ3MuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKQEAgLTE3MTEsMTkgKzE3MDMsMjUg
QEAgUmVmUHRyPENTU1NoYWRvd1ZhbHVlPiBjb25zdW1lU2luZ2xlU2hhZAogICAgIHJldHVybiBD
U1NTaGFkb3dWYWx1ZTo6Y3JlYXRlKFdURk1vdmUoaG9yaXpvbnRhbE9mZnNldCksIFdURk1vdmUo
dmVydGljYWxPZmZzZXQpLCBXVEZNb3ZlKGJsdXJSYWRpdXMpLCBXVEZNb3ZlKHNwcmVhZERpc3Rh
bmNlKSwgV1RGTW92ZShzdHlsZSksIFdURk1vdmUoY29sb3IpKTsKIH0KIAotUmVmUHRyPENTU1Zh
bHVlPiBjb25zdW1lSW1hZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlckNv
bnRleHQgY29udGV4dCwgQ29uc3VtZUdlbmVyYXRlZEltYWdlIGdlbmVyYXRlZEltYWdlKQorUmVm
UHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENT
U1BhcnNlckNvbnRleHQgY29udGV4dCwgT3B0aW9uU2V0PEFsbG93ZWRJbWFnZVR5cGVzPiBhbGxv
d2VkSW1hZ2VUeXBlcykKIHsKLSAgICBBdG9tU3RyaW5nIHVyaSA9IGNvbnN1bWVVcmxBc1N0cmlu
Z1ZpZXcocmFuZ2UpLnRvQXRvbVN0cmluZygpOwotICAgIGlmICghdXJpLmlzTnVsbCgpKQotICAg
ICAgICByZXR1cm4gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKGNvbXBsZXRlVVJMKGNvbnRleHQsIHVy
aSksIGNvbnRleHQuaXNDb250ZW50T3BhcXVlID8gTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6WWVz
IDogTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6Tm8pOworICAgIGlmICgocmFuZ2UucGVlaygpLnR5
cGUoKSA9PSBTdHJpbmdUb2tlbikgJiYgKGFsbG93ZWRJbWFnZVR5cGVzICYgQWxsb3dlZEltYWdl
VHlwZXM6OlJhd1N0cmluZ0FzVVJMKSkKKyAgICAgICAgcmV0dXJuIENTU0ltYWdlVmFsdWU6OmNy
ZWF0ZShjb21wbGV0ZVVSTChjb250ZXh0LCByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFj
ZSgpLnZhbHVlKCkudG9BdG9tU3RyaW5nKCkpLCBjb250ZXh0LmlzQ29udGVudE9wYXF1ZSA/IExv
YWRlZEZyb21PcGFxdWVTb3VyY2U6OlllcyA6IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6Ok5vKTsK
IAogICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pIHsKICAgICAg
ICAgQ1NTVmFsdWVJRCBpZCA9IHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCk7Ci0gICAgICAgIGlm
IChpZCA9PSBDU1NWYWx1ZVdlYmtpdEltYWdlU2V0IHx8IGlkID09IENTU1ZhbHVlSW1hZ2VTZXQp
Ci0gICAgICAgICAgICByZXR1cm4gY29uc3VtZUltYWdlU2V0KHJhbmdlLCBjb250ZXh0KTsKLSAg
ICAgICAgaWYgKGdlbmVyYXRlZEltYWdlID09IENvbnN1bWVHZW5lcmF0ZWRJbWFnZTo6QWxsb3cg
JiYgaXNHZW5lcmF0ZWRJbWFnZShpZCkpCisgICAgICAgIGlmICgoYWxsb3dlZEltYWdlVHlwZXMg
JiBBbGxvd2VkSW1hZ2VUeXBlczo6SW1hZ2VTZXQpICYmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdElt
YWdlU2V0IHx8IGlkID09IENTU1ZhbHVlSW1hZ2VTZXQpKQorICAgICAgICAgICAgcmV0dXJuIGNv
bnN1bWVJbWFnZVNldChyYW5nZSwgY29udGV4dCwgYWxsb3dlZEltYWdlVHlwZXMpOworICAgICAg
ICBpZiAoKGFsbG93ZWRJbWFnZVR5cGVzICYgQWxsb3dlZEltYWdlVHlwZXM6OkdlbmVyYXRlZElt
YWdlKSAmJiBpc0dlbmVyYXRlZEltYWdlKGlkKSkKICAgICAgICAgICAgIHJldHVybiBjb25zdW1l
R2VuZXJhdGVkSW1hZ2UocmFuZ2UsIGNvbnRleHQpOwogICAgIH0KKworICAgIGlmIChhbGxvd2Vk
SW1hZ2VUeXBlcyAmIEFsbG93ZWRJbWFnZVR5cGVzOjpVUkxGdW5jdGlvbikgeworICAgICAgICBh
dXRvIHVyaSA9IGNvbnN1bWVVcmxBc1N0cmluZ1ZpZXcocmFuZ2UpOworICAgICAgICBpZiAoIXVy
aS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY29t
cGxldGVVUkwoY29udGV4dCwgdXJpLnRvQXRvbVN0cmluZygpKSwgY29udGV4dC5pc0NvbnRlbnRP
cGFxdWUgPyBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpZZXMgOiBMb2FkZWRGcm9tT3BhcXVlU291
cmNlOjpObyk7CisgICAgfQorCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
aAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2lu
Y2x1ZGUgIkNTU1NoYWRvd1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCiAjaW5j
bHVkZSAiTGVuZ3RoLmgiIC8vIEZvciBWYWx1ZVJhbmdlCisjaW5jbHVkZSA8d3RmL09wdGlvblNl
dC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTg5LDEyICs5MCwxNSBAQCBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGlvCiBib29sIGNvbnN1bWVQb3NpdGlvbihD
U1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgUG9zaXRp
b25TeW50YXgsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHJlc3VsdFgsIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4mIHJlc3VsdFkpOwogYm9vbCBjb25zdW1lT25lT3JUd29WYWx1ZWRQb3Np
dGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgcmVzdWx0WCwgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiYgcmVzdWx0WSk7CiAKLWVudW0gY2xhc3MgQ29uc3VtZUdlbmVyYXRlZEltYWdlIHsKLSAg
ICBBbGxvdywKLSAgICBGb3JiaWQKK2VudW0gY2xhc3MgQWxsb3dlZEltYWdlVHlwZXMgOiB1aW50
OF90IHsKKyAgICBVUkxGdW5jdGlvbiA9IDEgPDwgMCwKKyAgICBSYXdTdHJpbmdBc1VSTCA9IDEg
PDwgMSwKKyAgICBJbWFnZVNldCA9IDEgPDwgMiwKKyAgICBHZW5lcmF0ZWRJbWFnZSA9IDEgPDwg
MwogfTsKIAotUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2UoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYsIENTU1BhcnNlckNvbnRleHQsIENvbnN1bWVHZW5lcmF0ZWRJbWFnZSA9IENvbnN1bWVHZW5l
cmF0ZWRJbWFnZTo6QWxsb3cpOworUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2UoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlckNvbnRleHQsIE9wdGlvblNldDxBbGxvd2VkSW1hZ2VU
eXBlcz4gPSB7IEFsbG93ZWRJbWFnZVR5cGVzOjpVUkxGdW5jdGlvbiwgQWxsb3dlZEltYWdlVHlw
ZXM6OkltYWdlU2V0LCBBbGxvd2VkSW1hZ2VUeXBlczo6R2VuZXJhdGVkSW1hZ2UgfSk7CisKIFJl
ZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlT3JOb25lKENTU1BhcnNlclRva2VuUmFuZ2UmLCBD
U1NQYXJzZXJDb250ZXh0KTsKIAogZW51bSBjbGFzcyBBbGxvd2VkRmlsdGVyRnVuY3Rpb25zIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9w
ZXJ0eUFuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMzLDYgKzMzMyw5IEBAIHN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRnUK
ICAgICBpZiAoIWZyb20gfHwgIXRvKQogICAgICAgICByZXR1cm4gdG87CiAKKyAgICBmcm9tID0g
ZnJvbS0+c2VsZWN0ZWRJbWFnZSgpOworICAgIHRvID0gdG8tPnNlbGVjdGVkSW1hZ2UoKTsKKwog
ICAgIC8vIEFuaW1hdGlvbiBiZXR3ZWVuIHR3byBnZW5lcmF0ZWQgaW1hZ2VzLiBDcm9zcyBmYWRl
IGZvciBhbGwgb3RoZXIgY2FzZXMuCiAgICAgaWYgKGlzPFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCpm
cm9tKSAmJiBpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8pKSB7CiAgICAgICAgIENTU0ltYWdl
R2VuZXJhdG9yVmFsdWUmIGZyb21HZW5lcmF0ZWQgPSBkb3duY2FzdDxTdHlsZUdlbmVyYXRlZElt
YWdlPigqZnJvbSkuaW1hZ2VWYWx1ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05NjIsNyArOTYyLDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFp
bnRGaWxsTGF5ZQogCiAgICAgICAgICAgICBhdXRvIGRyYXdSZXN1bHQgPSBjb250ZXh0LmRyYXdU
aWxlZEltYWdlKCppbWFnZSwgZ2VvbWV0cnkuZGVzdFJlY3QoKSwgdG9MYXlvdXRQb2ludChnZW9t
ZXRyeS5yZWxhdGl2ZVBoYXNlKCkpLCBnZW9tZXRyeS50aWxlU2l6ZSgpLCBnZW9tZXRyeS5zcGFj
ZVNpemUoKSwgb3B0aW9ucyk7CiAgICAgICAgICAgICBpZiAoZHJhd1Jlc3VsdCA9PSBJbWFnZURy
YXdSZXN1bHQ6OkRpZFJlcXVlc3REZWNvZGluZykgewotICAgICAgICAgICAgICAgIEFTU0VSVChi
Z0ltYWdlLT5pc0NhY2hlZEltYWdlKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChiZ0ltYWdl
LT5oYXNDYWNoZWRJbWFnZSgpKTsKICAgICAgICAgICAgICAgICBiZ0ltYWdlLT5jYWNoZWRJbWFn
ZSgpLT5hZGRDbGllbnRXYWl0aW5nRm9yQXN5bmNEZWNvZGluZygqdGhpcyk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFn
ZVJlc291cmNlU3R5bGVJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmNwcAkocmV2aXNpb24gMjU0ODA4
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlUmVzb3VyY2VTdHlsZUlt
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBSZW5kZXJJbWFnZVJlc291
cmNlU3R5bGVJbWFnZTo6UmVuZGVySW1hCiAKIHZvaWQgUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxl
SW1hZ2U6OmluaXRpYWxpemUoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCiB7Ci0gICAgUmVuZGVy
SW1hZ2VSZXNvdXJjZTo6aW5pdGlhbGl6ZShyZW5kZXJlciwgbV9zdHlsZUltYWdlLT5pc0NhY2hl
ZEltYWdlKCkgPyBtX3N0eWxlSW1hZ2UuZ2V0KCkuY2FjaGVkSW1hZ2UoKSA6IG51bGxwdHIpOwor
ICAgIFJlbmRlckltYWdlUmVzb3VyY2U6OmluaXRpYWxpemUocmVuZGVyZXIsIG1fc3R5bGVJbWFn
ZS0+aGFzQ2FjaGVkSW1hZ2UoKSA/IG1fc3R5bGVJbWFnZS5nZXQoKS5jYWNoZWRJbWFnZSgpIDog
bnVsbHB0cik7CiAgICAgbV9zdHlsZUltYWdlLT5hZGRDbGllbnQodGhpcy0+cmVuZGVyZXIoKSk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwNyw3ICsyMTA3LDcg
QEAgc3RhdGljIGJvb2wgY2FuRGlyZWN0bHlDb21wb3NpdGVCYWNrZ3JvdQogCiAgICAgLy8gRklY
TUU6IHN1cHBvcnQgZ3JhZGllbnRzIHdpdGggaXNHZW5lcmF0ZWRJbWFnZS4KICAgICBhdXRvKiBz
dHlsZUltYWdlID0gZmlsbExheWVyLmltYWdlKCk7Ci0gICAgaWYgKCFzdHlsZUltYWdlLT5pc0Nh
Y2hlZEltYWdlKCkpCisgICAgaWYgKCFzdHlsZUltYWdlLT5oYXNDYWNoZWRJbWFnZSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvKiBpbWFnZSA9IHN0eWxlSW1hZ2UtPmNhY2hl
ZEltYWdlKCktPmltYWdlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
U2hhcGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1NoYXBlVmFsdWUuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU2hhcGVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1
LDcgQEAgYm9vbCBTaGFwZVZhbHVlOjppc0ltYWdlVmFsaWQoKSBjb25zdAogewogICAgIGlmICgh
bV9pbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2ltYWdlLT5pc0NhY2hl
ZEltYWdlKCkpIHsKKyAgICBpZiAobV9pbWFnZS0+aGFzQ2FjaGVkSW1hZ2UoKSkgewogICAgICAg
ICBhdXRvKiBjYWNoZWRJbWFnZSA9IG1faW1hZ2UtPmNhY2hlZEltYWdlKCk7CiAgICAgICAgIHJl
dHVybiBjYWNoZWRJbWFnZSAmJiBjYWNoZWRJbWFnZS0+aGFzSW1hZ2UoKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1h
Z2UuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvU3R5bGVDYWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDggKzI0LDYgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCiAKLSNp
bmNsdWRlICJDU1NDdXJzb3JJbWFnZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTSW1hZ2VTZXRWYWx1
ZS5oIgogI2luY2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5o
IgogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKQEAgLTMzLDE5ICszMSwxNCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVN0eWxlQ2FjaGVkSW1hZ2U6OlN0eWxlQ2FjaGVkSW1hZ2UoQ1NT
VmFsdWUmIGNzc1ZhbHVlKQorU3R5bGVDYWNoZWRJbWFnZTo6U3R5bGVDYWNoZWRJbWFnZShDU1NJ
bWFnZVZhbHVlJiBjc3NWYWx1ZSwgZmxvYXQgc2NhbGVGYWN0b3IpCiAgICAgOiBtX2Nzc1ZhbHVl
KGNzc1ZhbHVlKQorICAgICwgbV9zY2FsZUZhY3RvcihzY2FsZUZhY3RvcikKIHsKLSAgICBBU1NF
UlQoaXM8Q1NTSW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZSkgfHwgaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4o
bV9jc3NWYWx1ZSkgfHwgaXM8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZSkpOwotCiAg
ICAgbV9pc0NhY2hlZEltYWdlID0gdHJ1ZTsKLQotICAgIC8vIENTU0ltYWdlVmFsdWUgZG9lc24n
dCBnZXQgaW52YWxpZGF0ZWQgc28gd2UgY2FuIGdyYWIgdGhlIENhY2hlZEltYWdlIGltbWVkaWF0
ZWx5IGlmIGl0IGV4aXN0cy4KLSAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZSkp
IHsKLSAgICAgICAgbV9jYWNoZWRJbWFnZSA9IGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KG1fY3Nz
VmFsdWUuZ2V0KCkpLmNhY2hlZEltYWdlKCk7Ci0gICAgICAgIGlmIChtX2NhY2hlZEltYWdlKQot
ICAgICAgICAgICAgbV9pc1BlbmRpbmcgPSBmYWxzZTsKLSAgICB9CisgICAgbV9jYWNoZWRJbWFn
ZSA9IG1fY3NzVmFsdWUtPmNhY2hlZEltYWdlKCk7CisgICAgaWYgKG1fY2FjaGVkSW1hZ2UpCisg
ICAgICAgIG1faXNQZW5kaW5nID0gZmFsc2U7CiB9CiAKIFN0eWxlQ2FjaGVkSW1hZ2U6On5TdHls
ZUNhY2hlZEltYWdlKCkgPSBkZWZhdWx0OwpAQCAtNjgsNDEgKzYxLDE0IEBAIGJvb2wgU3R5bGVD
YWNoZWRJbWFnZTo6b3BlcmF0b3I9PShjb25zdCAKIAogVVJMIFN0eWxlQ2FjaGVkSW1hZ2U6Omlt
YWdlVVJMKCkKIHsKLSAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZSkpCi0gICAg
ICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX2Nzc1ZhbHVlLmdldCgpKS51cmwo
KTsKLQotICAgIGlmIChpczxDU1NJbWFnZVNldFZhbHVlPihtX2Nzc1ZhbHVlKSkKLSAgICAgICAg
cmV0dXJuIGRvd25jYXN0PENTU0ltYWdlU2V0VmFsdWU+KG1fY3NzVmFsdWUuZ2V0KCkpLmJlc3RJ
bWFnZUZvclNjYWxlRmFjdG9yVVJMKCk7Ci0KLSAgICBpZiAoaXM8Q1NTQ3Vyc29ySW1hZ2VWYWx1
ZT4obV9jc3NWYWx1ZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDdXJzb3JJ
bWFnZVZhbHVlPihtX2Nzc1ZhbHVlLmdldCgpKS5pbWFnZVVSTCgpOwotCi0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gbV9jc3NWYWx1ZS0+dXJs
KCk7CiB9CiAKIHZvaWQgU3R5bGVDYWNoZWRJbWFnZTo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRl
ciYgbG9hZGVyLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAg
QVNTRVJUKG1faXNQZW5kaW5nKTsKICAgICBtX2lzUGVuZGluZyA9IGZhbHNlOwotCi0gICAgaWYg
KGlzPENTU0ltYWdlVmFsdWU+KG1fY3NzVmFsdWUpKSB7Ci0gICAgICAgIGF1dG8mIGltYWdlVmFs
dWUgPSBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX2Nzc1ZhbHVlLmdldCgpKTsKLSAgICAgICAg
bV9jYWNoZWRJbWFnZSA9IGltYWdlVmFsdWUubG9hZEltYWdlKGxvYWRlciwgb3B0aW9ucyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4obV9j
c3NWYWx1ZSkpIHsKLSAgICAgICAgYXV0byYgaW1hZ2VTZXRWYWx1ZSA9IGRvd25jYXN0PENTU0lt
YWdlU2V0VmFsdWU+KG1fY3NzVmFsdWUuZ2V0KCkpOwotICAgICAgICBzdGQ6OnRpZShtX2NhY2hl
ZEltYWdlLCBtX3NjYWxlRmFjdG9yKSA9IGltYWdlU2V0VmFsdWUubG9hZEJlc3RGaXRJbWFnZShs
b2FkZXIsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGlzPENT
U0N1cnNvckltYWdlVmFsdWU+KG1fY3NzVmFsdWUuZ2V0KCkpKSB7Ci0gICAgICAgIGF1dG8mIGN1
cnNvclZhbHVlID0gZG93bmNhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZS5nZXQo
KSk7Ci0gICAgICAgIHN0ZDo6dGllKG1fY2FjaGVkSW1hZ2UsIG1fc2NhbGVGYWN0b3IpID0gY3Vy
c29yVmFsdWUubG9hZEltYWdlKGxvYWRlciwgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgbV9jYWNoZWRJbWFnZSA9IG1fY3NzVmFsdWUtPmxvYWRJbWFnZShsb2FkZXIsIG9w
dGlvbnMpOwogfQogCiBDYWNoZWRJbWFnZSogU3R5bGVDYWNoZWRJbWFnZTo6Y2FjaGVkSW1hZ2Uo
KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVk
SW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5
bGVDYWNoZWRJbWFnZS5oCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMyAr
MjksMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTVmFsdWU7CitjbGFzcyBD
U1NJbWFnZVZhbHVlOwogY2xhc3MgQ2FjaGVkSW1hZ2U7CiBjbGFzcyBEb2N1bWVudDsKIAogY2xh
c3MgU3R5bGVDYWNoZWRJbWFnZSBmaW5hbCA6IHB1YmxpYyBTdHlsZUltYWdlIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0eWxlQ2FjaGVk
SW1hZ2U+IGNyZWF0ZShDU1NWYWx1ZSYgY3NzVmFsdWUpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U3R5bGVDYWNoZWRJbWFnZShjc3NWYWx1ZSkpOyB9CisgICAgc3RhdGljIFJlZjxTdHlsZUNhY2hl
ZEltYWdlPiBjcmVhdGUoQ1NTSW1hZ2VWYWx1ZSYgY3NzVmFsdWUsIGZsb2F0IHNjYWxlRmFjdG9y
ID0gMSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHlsZUNhY2hlZEltYWdlKGNzc1ZhbHVlLCBz
Y2FsZUZhY3RvcikpOyB9CiAgICAgdmlydHVhbCB+U3R5bGVDYWNoZWRJbWFnZSgpOwogCiAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlSW1hZ2UmIG90aGVyKSBjb25zdCBmaW5hbDsKQEAg
LTY0LDEwICs2NSwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBrbm93blRvQmVPcGFxdWUoY29uc3Qg
UmVuZGVyRWxlbWVudCopIGNvbnN0IGZpbmFsOwogCiBwcml2YXRlOgotICAgIFN0eWxlQ2FjaGVk
SW1hZ2UoQ1NTVmFsdWUmKTsKKyAgICBTdHlsZUNhY2hlZEltYWdlKENTU0ltYWdlVmFsdWUmLCBm
bG9hdCk7CiAgICAgVVJMIGltYWdlVVJMKCk7CiAKLSAgICBSZWY8Q1NTVmFsdWU+IG1fY3NzVmFs
dWU7CisgICAgUmVmPENTU0ltYWdlVmFsdWU+IG1fY3NzVmFsdWU7CiAgICAgYm9vbCBtX2lzUGVu
ZGluZyB7IHRydWUgfTsKICAgICBtdXRhYmxlIGZsb2F0IG1fc2NhbGVGYWN0b3IgeyAxIH07CiAg
ICAgbXV0YWJsZSBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRJbWFnZT4gbV9jYWNoZWRJbWFn
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1cnNvckltYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVD
dXJzb3JJbWFnZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykK
KyAqICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykK
KyAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAq
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNS0yMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBOb2FtIFJvc2VudGhhbCAobm9hbUB3
ZWJraXQub3JnKQorICAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdHlsZUN1cnNv
ckltYWdlLmgiCisKKyNpbmNsdWRlICJDU1NDdXJzb3JJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAi
Q1NTSW1hZ2VTZXRWYWx1ZS5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAi
RmxvYXRTaXplLmgiCisjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1JlZjxTdHlsZUN1cnNvckltYWdlPiBTdHlsZUN1cnNvckltYWdlOjpjcmVhdGUo
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSYgY3NzVmFsdWUpCit7IAorICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFN0eWxlQ3Vyc29ySW1hZ2UoY3NzVmFsdWUpKTsgCit9CisKK2Jvb2wgU3R5bGVDdXJzb3JJ
bWFnZTo6b3BlcmF0b3I9PShjb25zdCBTdHlsZUltYWdlJiBvdGhlcikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaXM8U3R5bGVDdXJzb3JJbWFnZT4ob3RoZXIpICYmIGVxdWFscyhkb3duY2FzdDxTdHls
ZUN1cnNvckltYWdlPihvdGhlcikpOworfQorCitSZWY8Q1NTVmFsdWU+IFN0eWxlQ3Vyc29ySW1h
Z2U6OmNzc1ZhbHVlKCkgY29uc3QKK3sgCisgICAgcmV0dXJuIG1fY3NzVmFsdWUuY29weVJlZigp
OyAKK30KKworU3R5bGVDdXJzb3JJbWFnZTo6U3R5bGVDdXJzb3JJbWFnZShDU1NDdXJzb3JJbWFn
ZVZhbHVlJiBjc3NWYWx1ZSkKKyAgICA6IG1fY3NzVmFsdWUoY3NzVmFsdWUpCit7CisgICAgbV9p
c0N1cnNvckltYWdlID0gdHJ1ZTsKK30KKworU3R5bGVDdXJzb3JJbWFnZTo6flN0eWxlQ3Vyc29y
SW1hZ2UoKSA9IGRlZmF1bHQ7CisKK0ltYWdlV2l0aFNjYWxlIFN0eWxlQ3Vyc29ySW1hZ2U6OnNl
bGVjdEJlc3RGaXRJbWFnZShjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fY3NzVmFsdWUtPnNlbGVjdEJlc3RGaXRJbWFnZShkb2N1bWVudCk7Cit9CisKK3Zv
aWQgU3R5bGVDdXJzb3JJbWFnZTo6c2V0Q29udGFpbmVyQ29udGV4dEZvclJlbmRlcmVyKGNvbnN0
IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpemUmIGNvbnRhaW5lclNpemUs
IGZsb2F0IGNvbnRhaW5lclpvb20pCit7CisgICAgaWYgKCFoYXNDYWNoZWRJbWFnZSgpKQorICAg
ICAgICByZXR1cm47CisgICAgY2FjaGVkSW1hZ2UoKS0+c2V0Q29udGFpbmVyQ29udGV4dEZvckNs
aWVudChyZW5kZXJlciwgTGF5b3V0U2l6ZShjb250YWluZXJTaXplKSwgY29udGFpbmVyWm9vbSwg
bV9jc3NWYWx1ZS0+aW1hZ2VVUkwoKSk7Cit9CisKK30KClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1cnNvckltYWdlLmNwcApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
dHlsZUN1cnNvckltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9A
a2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2Rl
Lm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNS0yMDA4LCAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBOb2FtIFJvc2VudGhh
bCAobm9hbUB3ZWJraXQub3JnKQorICAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU3R5bGVN
dWx0aUltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTQ3Vyc29ySW1h
Z2VWYWx1ZTsKK3N0cnVjdCBJbWFnZVdpdGhTY2FsZTsKKworY2xhc3MgU3R5bGVDdXJzb3JJbWFn
ZSBmaW5hbCA6IHB1YmxpYyBTdHlsZU11bHRpSW1hZ2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U3R5bGVDdXJzb3JJbWFnZT4gY3JlYXRl
KENTU0N1cnNvckltYWdlVmFsdWUmKTsKKyAgICB2aXJ0dWFsIH5TdHlsZUN1cnNvckltYWdlKCk7
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlSW1hZ2UmIG90aGVyKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICB2b2lkIHNldENvbnRhaW5lckNvbnRleHRGb3JSZW5kZXJlcihjb25zdCBS
ZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmxvYXRTaXplJiBjb250YWluZXJTaXplLCBm
bG9hdCBjb250YWluZXJab29tKSBmaW5hbDsKKyAgICBSZWY8Q1NTVmFsdWU+IGNzc1ZhbHVlKCkg
Y29uc3QgZmluYWw7CisgICAgSW1hZ2VXaXRoU2NhbGUgc2VsZWN0QmVzdEZpdEltYWdlKGNvbnN0
IERvY3VtZW50JikgY29uc3QgZmluYWw7CisKKyAgICBleHBsaWNpdCBTdHlsZUN1cnNvckltYWdl
KENTU0N1cnNvckltYWdlVmFsdWUmKTsKKyAgICBSZWY8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4gbV9j
c3NWYWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19TVFlMRV9JTUFHRShTdHlsZUN1cnNvckltYWdlLCBpc0N1cnNvckltYWdlKQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ3Vy
c29ySW1hZ2UuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMj
CisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaAkocmV2aXNpb24gMjU0ODA4KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNjcsMTggKzY3LDI4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGZsb2F0IGltYWdlU2NhbGVG
YWN0b3IoKSBjb25zdCB7IHJldHVybiAxOyB9CiAgICAgdmlydHVhbCBib29sIGtub3duVG9CZU9w
YXF1ZShjb25zdCBSZW5kZXJFbGVtZW50KikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgQ2FjaGVk
SW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgU3R5
bGVJbWFnZSogc2VsZWN0ZWRJbWFnZSgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIGNv
bnN0IFN0eWxlSW1hZ2UqIHNlbGVjdGVkSW1hZ2UoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CiAK
ICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDYWNoZWRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNDYWNoZWRJbWFnZTsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0dlbmVyYXRlZEltYWdl
KCkgY29uc3QgeyByZXR1cm4gbV9pc0dlbmVyYXRlZEltYWdlOyB9CisgICAgQUxXQVlTX0lOTElO
RSBib29sIGlzQ3Vyc29ySW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2lzQ3Vyc29ySW1hZ2U7IH0K
KyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNJbWFnZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJ
bWFnZVNldDsgfQorCisgICAgYm9vbCBoYXNDYWNoZWRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNDYWNoZWRJbWFnZSB8fCBzZWxlY3RlZEltYWdlKCktPmlzQ2FjaGVkSW1hZ2UoKTsgfQogCiBw
cm90ZWN0ZWQ6CiAgICAgU3R5bGVJbWFnZSgpCiAgICAgICAgIDogbV9pc0NhY2hlZEltYWdlKGZh
bHNlKQogICAgICAgICAsIG1faXNHZW5lcmF0ZWRJbWFnZShmYWxzZSkKKyAgICAgICAgLCBtX2lz
SW1hZ2VTZXQoZmFsc2UpCisgICAgICAgICwgbV9pc0N1cnNvckltYWdlKGZhbHNlKQogICAgIHsK
ICAgICB9CiAgICAgYm9vbCBtX2lzQ2FjaGVkSW1hZ2UgOiAxOwogICAgIGJvb2wgbV9pc0dlbmVy
YXRlZEltYWdlIDogMTsKKyAgICBib29sIG1faXNJbWFnZVNldCA6IDE7CisgICAgYm9vbCBtX2lz
Q3Vyc29ySW1hZ2UgOiAxOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlU2V0LmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAw
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAw
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA1LTIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwIE5vYW0gUm9zZW50aGFsIChub2FtQHdlYmtpdC5vcmcpCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3R5bGVJbWFnZVNldC5oIgorCisjaW5jbHVkZSAiQ1NT
SW1hZ2VTZXRWYWx1ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxTdHlsZUltYWdl
U2V0PiBTdHlsZUltYWdlU2V0OjpjcmVhdGUoQ1NTSW1hZ2VTZXRWYWx1ZSYgY3NzVmFsdWUpCit7
IAorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0eWxlSW1hZ2VTZXQoY3NzVmFsdWUpKTsKK30K
KworU3R5bGVJbWFnZVNldDo6U3R5bGVJbWFnZVNldChDU1NJbWFnZVNldFZhbHVlJiBjc3NWYWx1
ZSkKKyAgICA6IG1fY3NzVmFsdWUoY3NzVmFsdWUpCit7CisgICAgbV9pc0ltYWdlU2V0ID0gdHJ1
ZTsKK30KKworYm9vbCBTdHlsZUltYWdlU2V0OjpvcGVyYXRvcj09KGNvbnN0IFN0eWxlSW1hZ2Um
IG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBpczxTdHlsZUltYWdlU2V0PihvdGhlcikgJiYg
ZXF1YWxzKGRvd25jYXN0PFN0eWxlSW1hZ2VTZXQ+KG90aGVyKSk7Cit9CisKK1N0eWxlSW1hZ2VT
ZXQ6On5TdHlsZUltYWdlU2V0KCkgPSBkZWZhdWx0OworCitSZWY8Q1NTVmFsdWU+IFN0eWxlSW1h
Z2VTZXQ6OmNzc1ZhbHVlKCkgY29uc3QKK3sgCisgICAgcmV0dXJuIG1fY3NzVmFsdWUuY29weVJl
ZigpOyAKK30KKworSW1hZ2VXaXRoU2NhbGUgU3R5bGVJbWFnZVNldDo6c2VsZWN0QmVzdEZpdElt
YWdlKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jc3NW
YWx1ZS0+c2VsZWN0QmVzdEZpdEltYWdlKGRvY3VtZW50KTsKK30KKworfQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuY3Bw
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1N0eWxlSW1hZ2VTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNldC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0OSBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCisqICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2Rl
Lm9yZykKKyogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3Jn
KQorKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiBDb3B5cmlnaHQgKEMpIDIwMjAgTm9hbSBSb3NlbnRo
YWwgKG5vYW1Ad2Via2l0Lm9yZykKKyoKKyogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
KgorKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisqCisqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
CisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0eWxlTXVsdGlJbWFnZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENTU0ltYWdlU2V0VmFsdWU7CisKK2NsYXNzIFN0
eWxlSW1hZ2VTZXQgZmluYWwgOiBwdWJsaWMgU3R5bGVNdWx0aUltYWdlIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFN0eWxlSW1hZ2VTZXQ+
IGNyZWF0ZShDU1NJbWFnZVNldFZhbHVlJik7CisgICAgdmlydHVhbCB+U3R5bGVJbWFnZVNldCgp
OworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZUltYWdlJiBvdGhlcikgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgZXhwbGljaXQgU3R5bGVJbWFnZVNldChDU1NJbWFnZVNldFZhbHVlJik7
CisgICAgUmVmPENTU1ZhbHVlPiBjc3NWYWx1ZSgpIGNvbnN0IGZpbmFsOworICAgIEltYWdlV2l0
aFNjYWxlIHNlbGVjdEJlc3RGaXRJbWFnZShjb25zdCBEb2N1bWVudCYpIGNvbnN0IGZpbmFsOwor
ICAgIFJlZjxDU1NJbWFnZVNldFZhbHVlPiBtX2Nzc1ZhbHVlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1NUWUxFX0lNQUdFKFN0eWxlSW1h
Z2VTZXQsIGlzSW1hZ2VTZXQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNldC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVj
dXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJ
bWFnZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlTXVsdGlJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUtMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5v
YW1Ad2Via2l0Lm9yZykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdHlsZU11
bHRpSW1hZ2UuaCIKKworI2luY2x1ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKKyNpbmNs
dWRlICJDU1NJbWFnZVNldFZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIK
KyNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2lu
Y2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3R5bGVNdWx0aUltYWdlOjpTdHlsZU11bHRp
SW1hZ2UoKSA9IGRlZmF1bHQ7CisKK1N0eWxlTXVsdGlJbWFnZTo6flN0eWxlTXVsdGlJbWFnZSgp
ID0gZGVmYXVsdDsKKworYm9vbCBTdHlsZU11bHRpSW1hZ2U6OmVxdWFscyhjb25zdCBTdHlsZU11
bHRpSW1hZ2UmIG90aGVyKSBjb25zdAoreworICAgIGF1dG8mIG90aGVyQ2FjaGVkID0gZG93bmNh
c3Q8U3R5bGVNdWx0aUltYWdlPihvdGhlcik7CisgICAgcmV0dXJuICghbV9pc1BlbmRpbmcgJiYg
IW90aGVyQ2FjaGVkLm1faXNQZW5kaW5nICYmIG1fc2VsZWN0ZWRJbWFnZS5nZXQoKSA9PSBvdGhl
ckNhY2hlZC5tX3NlbGVjdGVkSW1hZ2UuZ2V0KCkpOworfQorCit2b2lkIFN0eWxlTXVsdGlJbWFn
ZTo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciYgbG9hZGVyLCBjb25zdCBSZXNvdXJjZUxvYWRl
ck9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgQVNTRVJUKG1faXNQZW5kaW5nKTsKKyAgICBBU1NF
UlQobG9hZGVyLmRvY3VtZW50KCkpOworCisgICAgbV9pc1BlbmRpbmcgPSBmYWxzZTsKKyAgICBh
dXRvIGltYWdlV2l0aFNjYWxlID0gc2VsZWN0QmVzdEZpdEltYWdlKCpsb2FkZXIuZG9jdW1lbnQo
KSk7CisgICAgQVNTRVJUKGlzPENTU0ltYWdlVmFsdWU+KGltYWdlV2l0aFNjYWxlLnZhbHVlKSB8
fCBpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihpbWFnZVdpdGhTY2FsZS52YWx1ZSkpOworCisg
ICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KGltYWdlV2l0aFNjYWxlLnZhbHVlKSkg
eworICAgICAgICBtX3NlbGVjdGVkSW1hZ2UgPSBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUo
ZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oKmltYWdlV2l0aFNjYWxlLnZhbHVlLmdl
dCgpKSk7CisgICAgICAgIG1fc2VsZWN0ZWRJbWFnZS0+bG9hZChsb2FkZXIsIG9wdGlvbnMpOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oaW1hZ2VXaXRoU2NhbGUudmFs
dWUpKSB7CisgICAgICAgIG1fc2VsZWN0ZWRJbWFnZSA9IFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0
ZShkb3duY2FzdDxDU1NJbWFnZVZhbHVlPigqaW1hZ2VXaXRoU2NhbGUudmFsdWUuZ2V0KCkpLCBp
bWFnZVdpdGhTY2FsZS5zY2FsZUZhY3Rvcik7CisgICAgICAgIGlmIChtX3NlbGVjdGVkSW1hZ2Ut
PmlzUGVuZGluZygpKQorICAgICAgICAgICAgbV9zZWxlY3RlZEltYWdlLT5sb2FkKGxvYWRlciwg
b3B0aW9ucyk7CisgICAgfQorfQorCitDYWNoZWRJbWFnZSogU3R5bGVNdWx0aUltYWdlOjpjYWNo
ZWRJbWFnZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3NlbGVjdGVkSW1hZ2UpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UtPmNhY2hlZEltYWdlKCk7
Cit9CisKK1dyYXBwZWRJbWFnZVB0ciBTdHlsZU11bHRpSW1hZ2U6OmRhdGEoKSBjb25zdAorewor
ICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gbV9zZWxlY3RlZEltYWdlLT5kYXRhKCk7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdl
OjpjYW5SZW5kZXIoY29uc3QgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGZsb2F0IG11bHRpcGxp
ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2VsZWN0ZWRJbWFnZSAmJiBtX3NlbGVjdGVkSW1h
Z2UtPmNhblJlbmRlcihyZW5kZXJlciwgbXVsdGlwbGllcik7Cit9CisKK2Jvb2wgU3R5bGVNdWx0
aUltYWdlOjppc1BlbmRpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2lzUGVuZGluZzsKK30K
KworYm9vbCBTdHlsZU11bHRpSW1hZ2U6OmlzTG9hZGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9zZWxlY3RlZEltYWdlICYmIG1fc2VsZWN0ZWRJbWFnZS0+aXNMb2FkZWQoKTsKK30KKworYm9v
bCBTdHlsZU11bHRpSW1hZ2U6OmVycm9yT2NjdXJyZWQoKSBjb25zdAoreworICAgIHJldHVybiBt
X3NlbGVjdGVkSW1hZ2UgJiYgbV9zZWxlY3RlZEltYWdlLT5lcnJvck9jY3VycmVkKCk7Cit9CisK
K0Zsb2F0U2l6ZSBTdHlsZU11bHRpSW1hZ2U6OmltYWdlU2l6ZShjb25zdCBSZW5kZXJFbGVtZW50
KiByZW5kZXJlciwgZmxvYXQgbXVsdGlwbGllcikgY29uc3QKK3sKKyAgICBpZiAoIW1fc2VsZWN0
ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdl
LT5pbWFnZVNpemUocmVuZGVyZXIsIG11bHRpcGxpZXIpOworfQorCitib29sIFN0eWxlTXVsdGlJ
bWFnZTo6aW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2VsZWN0
ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3NlbGVjdGVkSW1h
Z2UtPmltYWdlSGFzUmVsYXRpdmVXaWR0aCgpOworfQorCitib29sIFN0eWxlTXVsdGlJbWFnZTo6
aW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2VsZWN0ZWRJ
bWFnZSAmJiBtX3NlbGVjdGVkSW1hZ2UtPmltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKTsKK30KKwor
dm9pZCBTdHlsZU11bHRpSW1hZ2U6OmNvbXB1dGVJbnRyaW5zaWNEaW1lbnNpb25zKGNvbnN0IFJl
bmRlckVsZW1lbnQqIGVsZW1lbnQsIExlbmd0aCYgaW50cmluc2ljV2lkdGgsIExlbmd0aCYgaW50
cmluc2ljSGVpZ2h0LCBGbG9hdFNpemUmIGludHJpbnNpY1JhdGlvKQoreworICAgIGlmICghbV9z
ZWxlY3RlZEltYWdlKQorICAgICAgICByZXR1cm47CisgICAgbV9zZWxlY3RlZEltYWdlLT5jb21w
dXRlSW50cmluc2ljRGltZW5zaW9ucyhlbGVtZW50LCBpbnRyaW5zaWNXaWR0aCwgaW50cmluc2lj
SGVpZ2h0LCBpbnRyaW5zaWNSYXRpbyk7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjp1c2Vz
SW1hZ2VDb250YWluZXJTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdl
ICYmIG1fc2VsZWN0ZWRJbWFnZS0+dXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpOworfQorCit2b2lk
IFN0eWxlTXVsdGlJbWFnZTo6c2V0Q29udGFpbmVyQ29udGV4dEZvclJlbmRlcmVyKGNvbnN0IFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpemUmIGNvbnRhaW5lclNpemUsIGZs
b2F0IGNvbnRhaW5lclpvb20pCit7CisgICAgaWYgKCFtX3NlbGVjdGVkSW1hZ2UpCisgICAgICAg
IHJldHVybjsKKyAgICBtX3NlbGVjdGVkSW1hZ2UtPnNldENvbnRhaW5lckNvbnRleHRGb3JSZW5k
ZXJlcihyZW5kZXJlciwgY29udGFpbmVyU2l6ZSwgY29udGFpbmVyWm9vbSk7Cit9CisKK3ZvaWQg
U3R5bGVNdWx0aUltYWdlOjphZGRDbGllbnQoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIpCit7Cisg
ICAgaWYgKCFtX3NlbGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBtX3NlbGVjdGVk
SW1hZ2UtPmFkZENsaWVudChyZW5kZXJlcik7Cit9CisKK3ZvaWQgU3R5bGVNdWx0aUltYWdlOjpy
ZW1vdmVDbGllbnQoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIpCit7CisgICAgaWYgKCFtX3NlbGVj
dGVkSW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBtX3NlbGVjdGVkSW1hZ2UtPnJlbW92ZUNs
aWVudChyZW5kZXJlcik7Cit9CisKK1JlZlB0cjxJbWFnZT4gU3R5bGVNdWx0aUltYWdlOjppbWFn
ZShSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgRmxvYXRTaXplJiBzaXplKSBjb25zdAor
eworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICByZXR1cm4gbV9zZWxlY3RlZEltYWdlLT5pbWFnZShyZW5kZXJlciwgc2l6ZSk7Cit9CisKK2Zs
b2F0IFN0eWxlTXVsdGlJbWFnZTo6aW1hZ2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgaWYg
KCFtX3NlbGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVybiAxOworICAgIHJldHVybiBtX3NlbGVj
dGVkSW1hZ2UtPmltYWdlU2NhbGVGYWN0b3IoKTsKK30KKworYm9vbCBTdHlsZU11bHRpSW1hZ2U6
Omtub3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJFbGVtZW50KiByZW5kZXJlcikgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlICYmIG1fc2VsZWN0ZWRJbWFnZS0+a25vd25Ub0Jl
T3BhcXVlKHJlbmRlcmVyKTsKK30KKworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5jcHAKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0
aUltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0
eWxlTXVsdGlJbWFnZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZU11bHRpSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisg
KiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisg
KiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUtMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Vi
a2l0Lm9yZykKKyAqCisqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyoKKyogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorKgorKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKgorKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdHlsZUltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RydWN0IEltYWdlV2l0aFNjYWxlOworCitjbGFzcyBTdHlsZU11bHRpSW1hZ2UgOiBw
dWJsaWMgU3R5bGVJbWFnZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+U3R5bGVNdWx0aUltYWdlKCk7CisKK3Byb3RlY3RlZDoKKyAgICBTdHls
ZU11bHRpSW1hZ2UoKTsKKyAgICBib29sIGVxdWFscyhjb25zdCBTdHlsZU11bHRpSW1hZ2UmIG90
aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIEltYWdlV2l0aFNjYWxlIHNlbGVjdEJlc3RGaXRJbWFn
ZShjb25zdCBEb2N1bWVudCYpIGNvbnN0ID0gMDsKKyAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1h
Z2UoKSBjb25zdCBmaW5hbDsKKworcHJpdmF0ZToKKyAgICBXcmFwcGVkSW1hZ2VQdHIgZGF0YSgp
IGNvbnN0IGZpbmFsOworCisgICAgYm9vbCBjYW5SZW5kZXIoY29uc3QgUmVuZGVyRWxlbWVudCos
IGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNQZW5kaW5nKCkgY29u
c3QgZmluYWw7CisgICAgdm9pZCBsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyJiwgY29uc3QgUmVz
b3VyY2VMb2FkZXJPcHRpb25zJikgZmluYWw7CisgICAgYm9vbCBpc0xvYWRlZCgpIGNvbnN0IGZp
bmFsOworICAgIGJvb2wgZXJyb3JPY2N1cnJlZCgpIGNvbnN0IGZpbmFsOworICAgIEZsb2F0U2l6
ZSBpbWFnZVNpemUoY29uc3QgUmVuZGVyRWxlbWVudCosIGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0
IGZpbmFsOworICAgIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3QgZmluYWw7Cisg
ICAgYm9vbCBpbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBj
b21wdXRlSW50cmluc2ljRGltZW5zaW9ucyhjb25zdCBSZW5kZXJFbGVtZW50KiwgTGVuZ3RoJiBp
bnRyaW5zaWNXaWR0aCwgTGVuZ3RoJiBpbnRyaW5zaWNIZWlnaHQsIEZsb2F0U2l6ZSYgaW50cmlu
c2ljUmF0aW8pIGZpbmFsOworICAgIGJvb2wgdXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0
IGZpbmFsOworICAgIHZvaWQgc2V0Q29udGFpbmVyQ29udGV4dEZvclJlbmRlcmVyKGNvbnN0IFJl
bmRlckVsZW1lbnQmLCBjb25zdCBGbG9hdFNpemUmLCBmbG9hdCk7CisgICAgdm9pZCBhZGRDbGll
bnQoUmVuZGVyRWxlbWVudCopIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFJlbmRlckVs
ZW1lbnQqKSBmaW5hbDsKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlKFJlbmRlckVsZW1lbnQqLCBj
b25zdCBGbG9hdFNpemUmKSBjb25zdCBmaW5hbDsKKyAgICBmbG9hdCBpbWFnZVNjYWxlRmFjdG9y
KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBrbm93blRvQmVPcGFxdWUoY29uc3QgUmVuZGVyRWxl
bWVudCopIGNvbnN0IGZpbmFsOworICAgIGNvbnN0IFN0eWxlSW1hZ2UqIHNlbGVjdGVkSW1hZ2Uo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NlbGVjdGVkSW1hZ2UuZ2V0KCk7IH0KKyAgICBTdHls
ZUltYWdlKiBzZWxlY3RlZEltYWdlKCkgZmluYWwgeyByZXR1cm4gbV9zZWxlY3RlZEltYWdlLmdl
dCgpOyB9CisKKyAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbV9zZWxlY3RlZEltYWdlOworICAgIGJv
b2wgbV9pc1BlbmRpbmcgeyB0cnVlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVN
dWx0aUltYWdlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAj
IworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDggKzQ2LDEwIEBACiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXIuaCIKICNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCisjaW5j
bHVkZSAiU3R5bGVDdXJzb3JJbWFnZS5oIgogI2luY2x1ZGUgIlN0eWxlRm9udFNpemVGdW5jdGlv
bnMuaCIKICNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVJ
bWFnZVNldC5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJXaWxsQ2hh
bmdlRGF0YS5oIgogCkBAIC0xMzI0LDEzICsxMzI2LDE1IEBAIGlubGluZSB2b2lkIEJ1aWxkZXJD
dXN0b206OmFwcGx5VmFsdWVDb24KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBi
dWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0
ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihpdGVtLmdldCgpKSksIGRpZFNldCk7
CiAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGlzPENTU0lt
YWdlU2V0VmFsdWU+KGl0ZW0pKSB7Ci0gICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5z
ZXRDb250ZW50KFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShpdGVtKSwgZGlkU2V0KTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KGl0ZW0pKSB7
CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxlSW1hZ2VT
ZXQ6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPihpdGVtLmdldCgpKS5pbWFnZVNl
dFdpdGhTdHlsZXNSZXNvbHZlZChidWlsZGVyU3RhdGUpKSwgZGlkU2V0KTsKICAgICAgICAgICAg
IGRpZFNldCA9IHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1
ZT4oaXRlbSkpIHsKLSAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnQo
U3R5bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKGl0ZW0pLCBkaWRTZXQpOworICAgICAgICAgICAgYnVp
bGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChTdHlsZUNhY2hlZEltYWdlOjpjcmVhdGUoZG93
bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oaXRlbS5nZXQoKSkpLCBkaWRTZXQpOwogICAgICAgICAgICAg
ZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwCShyZXZpc2lvbiAyNTQ4
MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDggKzQ1LDEwIEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNs
dWRlICJTdHlsZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCisjaW5j
bHVkZSAiU3R5bGVDdXJzb3JJbWFnZS5oIgogI2luY2x1ZGUgIlN0eWxlRm9udFNpemVGdW5jdGlv
bnMuaCIKICNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVJ
bWFnZVNldC5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybUZ1bmN0aW9ucy5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC03OSwyMSArODEsMzMgQEAgYm9vbCBCdWlsZGVyU3RhdGU6OnVzZVNWR1pv
b21SdWxlc0ZvckxlbgogICAgIHJldHVybiBpczxTVkdFbGVtZW50PihlbGVtZW50KCkpICYmICEo
aXM8U1ZHU1ZHRWxlbWVudD4oKmVsZW1lbnQoKSkgJiYgZWxlbWVudCgpLT5wYXJlbnROb2RlKCkp
OwogfQogCitSZWY8Q1NTVmFsdWU+IEJ1aWxkZXJTdGF0ZTo6cmVzb2x2ZUltYWdlU3R5bGVzKENT
U1ZhbHVlJiB2YWx1ZSkKK3sKKyAgICBpZiAoaXM8Q1NTR3JhZGllbnRWYWx1ZT4odmFsdWUpKQor
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1ZT4odmFsdWUpLmdyYWRpZW50
V2l0aFN0eWxlc1Jlc29sdmVkKCp0aGlzKTsKKworICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZh
bHVlPih2YWx1ZSkpCisgICAgICAgIGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHZhbHVl
KS5jcmVhdGVGaWx0ZXJPcGVyYXRpb25zKCp0aGlzKTsKKworICAgIGlmIChpczxDU1NJbWFnZVNl
dFZhbHVlPih2YWx1ZSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVl
Pih2YWx1ZSkuaW1hZ2VTZXRXaXRoU3R5bGVzUmVzb2x2ZWQoKnRoaXMpOworCisgICAgcmV0dXJu
IG1ha2VSZWYodmFsdWUpOworfQorCiBSZWZQdHI8U3R5bGVJbWFnZT4gQnVpbGRlclN0YXRlOjpj
cmVhdGVTdHlsZUltYWdlKENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAoaXM8Q1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZT4odmFsdWUpKSB7Ci0gICAgICAgIGlmIChpczxDU1NHcmFkaWVudFZhbHVl
Pih2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRl
KGRvd25jYXN0PENTU0dyYWRpZW50VmFsdWU+KHZhbHVlKS5ncmFkaWVudFdpdGhTdHlsZXNSZXNv
bHZlZCgqdGhpcykpOwotCi0gICAgICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPih2YWx1
ZSkpIHsKLSAgICAgICAgICAgIC8vIEZpbHRlckltYWdlIG5lZWRzIHRvIGNhbGN1bGF0ZSBGaWx0
ZXJPcGVyYXRpb25zLgotICAgICAgICAgICAgZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4o
dmFsdWUpLmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoKnRoaXMpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZT4odmFsdWUpKTsKLSAgICB9CisgICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KHZh
bHVlKSkKKyAgICAgICAgcmV0dXJuIFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxD
U1NJbWFnZVZhbHVlPih2YWx1ZSkpOworCisgICAgaWYgKGlzPENTU0N1cnNvckltYWdlVmFsdWU+
KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFN0eWxlQ3Vyc29ySW1hZ2U6OmNyZWF0ZShkb3duY2Fz
dDxDU1NDdXJzb3JJbWFnZVZhbHVlPih2YWx1ZSkpOwogCi0gICAgaWYgKGlzPENTU0ltYWdlVmFs
dWU+KHZhbHVlKSB8fCBpczxDU1NJbWFnZVNldFZhbHVlPih2YWx1ZSkgfHwgaXM8Q1NTQ3Vyc29y
SW1hZ2VWYWx1ZT4odmFsdWUpKQotICAgICAgICByZXR1cm4gU3R5bGVDYWNoZWRJbWFnZTo6Y3Jl
YXRlKHZhbHVlKTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKQor
ICAgICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0PENTU0lt
YWdlR2VuZXJhdG9yVmFsdWU+KHJlc29sdmVJbWFnZVN0eWxlcyh2YWx1ZSkuZ2V0KCkpKTsKKyAg
ICAKKyAgICBpZiAoaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4odmFsdWUpKQorICAgICAgICByZXR1cm4g
U3R5bGVJbWFnZVNldDo6Y3JlYXRlKGRvd25jYXN0PENTU0ltYWdlU2V0VmFsdWU+KHJlc29sdmVJ
bWFnZVN0eWxlcyh2YWx1ZSkuZ2V0KCkpKTsKIAogICAgIHJldHVybiBudWxscHRyOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oCShyZXZpc2lvbiAyNTQ4
MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC04Miw2ICs4Miw3IEBAIHB1YmxpYzoKICAgICBib29sIHVzZVNWR1pvb21SdWxl
c0Zvckxlbmd0aCgpIGNvbnN0OwogICAgIFNjb3BlT3JkaW5hbCBzdHlsZVNjb3BlT3JkaW5hbCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVTY29wZU9yZGluYWw7IH0KIAorICAgIFJlZjxDU1NWYWx1
ZT4gcmVzb2x2ZUltYWdlU3R5bGVzKENTU1ZhbHVlJik7CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+
IGNyZWF0ZVN0eWxlSW1hZ2UoQ1NTVmFsdWUmKTsKICAgICBib29sIGNyZWF0ZUZpbHRlck9wZXJh
dGlvbnMoY29uc3QgQ1NTVmFsdWUmLCBGaWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKTsK
IApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gMjU0ODA4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMjAtMDEtMTkgIE5vYW0gUm9zZW50aGFs
ICA8bm9hbUB3ZWJraXQub3JnPgorCisgICAgICAgIC13ZWJraXQtaW1hZ2Utc2V0IHNob3VsZCBz
dXBwb3J0IGFsbCB0aGUgaW1hZ2UgZnVuY3Rpb25zIFdlYktpdCBzdXBwb3J0cywgbm90IGp1c3Qg
dXJsKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgx
OTQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBmYXN0
L2Nzcy9jdXJzb3ItcGFyc2luZy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jc3MvY3Vy
c29yLXBhcnNpbmcuaHRtbDoKKyAgICAgICAgICAgICAgICBBZGRlZCBwYXJzaW5nIHRlc3QgdG8g
ZW5zdXJlIGFycm93IGltYWdlLXNldHMgZGlzYWJsZSBnZW5lcmF0ZWQgaW1hZ2VzCisKKyAgICAg
ICAgKiBmYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1nZW5lcmF0ZWQtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1nZW5lcmF0ZWQuaHRt
bDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctaW52YWxpZC1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctaW52YWxp
ZC5odG1sOgorICAgICAgICAgICAgICAgIEFkZGVkIHBhcnNpbmcgdGVzdHMgZm9yIG5ldyBnZW5l
cmF0ZWQtaW5zaWRlLWltYWdlLXNldCB1c2UgY2FzZXMKKyAgICAgICAgICAgICAgICBUZXN0IHRo
YXQgaW1hZ2Utc2V0IGluc2lkZSBpbWFnZS1zZXQgaXMgbm90IHN1cHBvcnRlZAorCisgICAgICAg
ICogZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS1leHBlY3RlZC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1mYWRlLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LWV4cGVjdGVkLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LW11bHRpLWV4cGVj
dGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50
LW11bHRpLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRp
ZW50LXNpbmdsZS1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2hpZHBpL2lt
YWdlLXNldC1ncmFkaWVudC1zaW5nbGUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9oaWRw
aS9pbWFnZS1zZXQtZ3JhZGllbnQuaHRtbDogQWRkZWQuCisgICAgICAgICAgICAgICAgQWRkZWQg
cmVmLXRlc3RzIGZvciBzZXZlcmFsIGdlbmVyYXRlZC1pbnNpZGUtaW1hZ2Utc2V0IHVzZS1jYXNl
cworCiAyMDIwLTAxLTE5ICBDYXRoaWUgQ2hlbiAgPGNhdGhpZWNoZW5AaWdhbGlhLmNvbT4KIAog
ICAgICAgICBBZGQgc3VwcG9ydCBmb3Igc2Nyb2xsIGJlaGF2aW9yIHJlbGllcyBvbiBTY3JvbGxB
bmltYXRpb24gb2YgdGhlIFdlYiBwcm9jZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9j
dXJzb3ItcGFyc2luZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9jc3MvY3Vyc29yLXBhcnNpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNTQ4MDgpCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDYgKzYyLDEwIEBAIFBBU1Mgcm91bmR0cmlwQ3NzUnVsZSgiY3Vyc29yOiB1
cmwoZmlsZToKIFBBU1Mgcm91bmR0cmlwQ3NzUnVsZSgiY3Vyc29yOiB1cmwoZmlsZTovLy9mb28u
cG5nKSAxMiAzIDU7IikuY3NzVGV4dCBpcyAiIgogUEFTUyByb3VuZHRyaXBDc3NSdWxlKCJjdXJz
b3I6IHVybChmaWxlOi8vL2Zvby5wbmcpIHggeTsiKS5jc3NUZXh0IGlzICIiCiBQQVNTIHJvdW5k
dHJpcENzc1J1bGUoImN1cnNvcjogdXJsKGZpbGU6Ly8vZm9vLnBuZykgYXV0bzsiKS5jc3NUZXh0
IGlzICIiCisKK1Rlc3QgYSBidW5jaCBvZiBjdXJzb3IgcnVsZXMgd2l0aCBnZW5lcmF0ZWQgaW1h
Z2VzLgorUEFTUyByb3VuZHRyaXBDc3NSdWxlKCJjdXJzb3I6IGxpbmVhci1ncmFkaWVudChyZWQs
IHdoaXRlKSAtMSAtMSwgcG9pbnRlcjsiKS5jc3NUZXh0IGlzICIiCitQQVNTIHJvdW5kdHJpcENz
c1J1bGUoImN1cnNvcjogaW1hZ2Utc2V0KGxpbmVhci1ncmFkaWVudChyZWQsIHdoaXRlKSAxeCkg
LTEgLTEsIHBvaW50ZXI7IikuY3NzVGV4dCBpcyAiIgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jdXJz
b3ItcGFyc2luZy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL2N1cnNv
ci1wYXJzaW5nLmh0bWwJKHJldmlzaW9uIDI1NDgwOCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3Nz
L2N1cnNvci1wYXJzaW5nLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsMTEgQEAg
dGVzdEludmFsaWRDdXJzb3JSdWxlKCd1cmwoZmlsZTovLy9mb28ucAogdGVzdEludmFsaWRDdXJz
b3JSdWxlKCd1cmwoZmlsZTovLy9mb28ucG5nKSB4IHknKTsKIHRlc3RJbnZhbGlkQ3Vyc29yUnVs
ZSgndXJsKGZpbGU6Ly8vZm9vLnBuZykgYXV0bycpOwogCitkZWJ1ZygnJyk7CitkZWJ1ZygnVGVz
dCBhIGJ1bmNoIG9mIGN1cnNvciBydWxlcyB3aXRoIGdlbmVyYXRlZCBpbWFnZXMuJyk7Cit0ZXN0
SW52YWxpZEN1cnNvclJ1bGUoJ2xpbmVhci1ncmFkaWVudChyZWQsIHdoaXRlKSAtMSAtMSwgcG9p
bnRlcicpOwordGVzdEludmFsaWRDdXJzb3JSdWxlKCdpbWFnZS1zZXQobGluZWFyLWdyYWRpZW50
KHJlZCwgd2hpdGUpIDF4KSAtMSAtMSwgcG9pbnRlcicpOworCiBzdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOwogPC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQt
cGFyc2luZy1nZW5lcmF0ZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWdlbmVyYXRlZC1leHBlY3RlZC50eHQJKG5vbmV4
aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctZ2VuZXJh
dGVkLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACitUZXN0IHRo
ZSBwYXJzaW5nIG9mIHRoZSBpbWFnZS1zZXQgZnVuY3Rpb24uCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCisKK1NpbmdsZSB2YWx1ZSBmb3IgYmFja2dyb3VuZC1pbWFnZSB3aXRoIGdy
YWRpZW50IDogbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMXgKK1BBU1MganNXcmFwcGVy
Q2xhc3MoaW1hZ2VTZXRSdWxlKSBpcyAnQ1NTVmFsdWVMaXN0JworUEFTUyBqc1dyYXBwZXJDbGFz
cyhpbWFnZVNldFJ1bGUuX19wcm90b19fKSBpcyAnQ1NTVmFsdWVMaXN0UHJvdG90eXBlJworUEFT
UyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuY29uc3RydWN0b3IpIGlzICdGdW5jdGlvbicK
K1BBU1MgaW1hZ2VTZXRSdWxlLmxlbmd0aCBpcyAyCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAn
bGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSknCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAn
MScKKworU2luZ2xlIHZhbHVlIGZvciBjb250ZW50IHdpdGggZ3JhZGllbnQgOiBsaW5lYXItZ3Jh
ZGllbnQoZ3JlZW4sIHdoaXRlKSAxeAorUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUp
IGlzICdDU1NWYWx1ZUxpc3QnCitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5fX3By
b3RvX18pIGlzICdDU1NWYWx1ZUxpc3RQcm90b3R5cGUnCitQQVNTIGpzV3JhcHBlckNsYXNzKGlt
YWdlU2V0UnVsZS5jb25zdHJ1Y3RvcikgaXMgJ0Z1bmN0aW9uJworUEFTUyBpbWFnZVNldFJ1bGUu
bGVuZ3RoIGlzIDIKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICdsaW5lYXItZ3JhZGllbnQoZ3Jl
ZW4sIHdoaXRlKScKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICcxJworCitTaW5nbGUgdmFsdWUg
Zm9yIGJhY2tncm91bmQtaW1hZ2Ugd2l0aCBncmFkaWVudHMgOiBsaW5lYXItZ3JhZGllbnQoZ3Jl
ZW4sIHdoaXRlKSAxeCwgcmFkaWFsLWdyYWRpZW50KGJsdWUsIHdoaXRlKSAyeAorUEFTUyBqc1dy
YXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUpIGlzICdDU1NWYWx1ZUxpc3QnCitQQVNTIGpzV3JhcHBl
ckNsYXNzKGltYWdlU2V0UnVsZS5fX3Byb3RvX18pIGlzICdDU1NWYWx1ZUxpc3RQcm90b3R5cGUn
CitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5jb25zdHJ1Y3RvcikgaXMgJ0Z1bmN0
aW9uJworUEFTUyBpbWFnZVNldFJ1bGUubGVuZ3RoIGlzIDQKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0
IGlzICdsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKScKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0
IGlzICcxJworUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJ3JhZGlhbC1ncmFkaWVudChibHVlLCB3
aGl0ZSknCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMicKKworQ29tYmluZWQgZ3JhZGllbnQg
YW5kIFVSTCA6IHVybCgnI2EnKSAxeCwgbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMngK
K1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlKSBpcyAnQ1NTVmFsdWVMaXN0JworUEFT
UyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuX19wcm90b19fKSBpcyAnQ1NTVmFsdWVMaXN0
UHJvdG90eXBlJworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuY29uc3RydWN0b3Ip
IGlzICdGdW5jdGlvbicKK1BBU1MgaW1hZ2VTZXRSdWxlLmxlbmd0aCBpcyA0CitQQVNTIHN1YlJ1
bGUgaXMgJ2EnCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMScKK1BBU1Mgc3ViUnVsZS5jc3NU
ZXh0IGlzICdsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKScKK1BBU1Mgc3ViUnVsZS5jc3NU
ZXh0IGlzICcyJworCitDb21iaW5lZCBncmFkaWVudCBhbmQgVVJMIGluIGNvbnRlbnQgOiB1cmwo
JyNhJykgMXgsIGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIDJ4CitQQVNTIGpzV3JhcHBl
ckNsYXNzKGltYWdlU2V0UnVsZSkgaXMgJ0NTU1ZhbHVlTGlzdCcKK1BBU1MganNXcmFwcGVyQ2xh
c3MoaW1hZ2VTZXRSdWxlLl9fcHJvdG9fXykgaXMgJ0NTU1ZhbHVlTGlzdFByb3RvdHlwZScKK1BB
U1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLmNvbnN0cnVjdG9yKSBpcyAnRnVuY3Rpb24n
CitQQVNTIGltYWdlU2V0UnVsZS5sZW5ndGggaXMgNAorUEFTUyBzdWJSdWxlIGlzICdhJworUEFT
UyBzdWJSdWxlLmNzc1RleHQgaXMgJzEnCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnbGluZWFy
LWdyYWRpZW50KGdyZWVuLCB3aGl0ZSknCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMicKKwor
Q29tYmluZWQgZ3JhZGllbnQgYW5kIGNyb3NzLWZhZGUgOiAtd2Via2l0LWNyb3NzLWZhZGUodXJs
KCcjYScpLCB1cmwoJyNiJyksIDcwJSkgMXgsIGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUp
IDJ4CitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZSkgaXMgJ0NTU1ZhbHVlTGlzdCcK
K1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLl9fcHJvdG9fXykgaXMgJ0NTU1ZhbHVl
TGlzdFByb3RvdHlwZScKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLmNvbnN0cnVj
dG9yKSBpcyAnRnVuY3Rpb24nCitQQVNTIGltYWdlU2V0UnVsZS5sZW5ndGggaXMgNAorUEFTUyBz
dWJSdWxlIGlzICdhJworUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJzEnCitQQVNTIHN1YlJ1bGUu
Y3NzVGV4dCBpcyAnbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSknCitQQVNTIHN1YlJ1bGUu
Y3NzVGV4dCBpcyAnMicKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFn
ZS1zZXQtcGFyc2luZy1nZW5lcmF0ZWQtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2
bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9w
ZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctZ2VuZXJh
dGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBh
cnNpbmctZ2VuZXJhdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9j
c3MvaW1hZ2Utc2V0LXBhcnNpbmctZ2VuZXJhdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMDcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VO
Ij4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48
L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVz
dCB0aGUgcGFyc2luZyBvZiB0aGUgaW1hZ2Utc2V0IGZ1bmN0aW9uLiIpOworCitmdW5jdGlvbiBq
c1dyYXBwZXJDbGFzcyhub2RlKQoreworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuICJb
bnVsbF0iOworICAgIHZhciBzdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5
KG5vZGUpOworICAgIHJldHVybiBzdHJpbmcuc3Vic3RyKDgsIHN0cmluZy5sZW5ndGggLSA5KTsK
K30KKworZnVuY3Rpb24gc2hvdWxkQmVUeXBlKGV4cHJlc3Npb24sIGNsYXNzTmFtZSwgcHJvdG90
eXBlTmFtZSwgY29uc3RydWN0b3JOYW1lKQoreworICAgIGlmICghcHJvdG90eXBlTmFtZSkKKyAg
ICAgICAgcHJvdG90eXBlTmFtZSA9IGNsYXNzTmFtZSArICJQcm90b3R5cGUiOworICAgIGlmICgh
Y29uc3RydWN0b3JOYW1lKQorICAgICAgICBjb25zdHJ1Y3Rvck5hbWUgPSBjbGFzc05hbWUgKyAi
Q29uc3RydWN0b3IiOworICAgIHNob3VsZEJlKCJqc1dyYXBwZXJDbGFzcygiICsgZXhwcmVzc2lv
biArICIpIiwgIiciICsgY2xhc3NOYW1lICsgIiciKTsKKyAgICBzaG91bGRCZSgianNXcmFwcGVy
Q2xhc3MoIiArIGV4cHJlc3Npb24gKyAiLl9fcHJvdG9fXykiLCAiJyIgKyBwcm90b3R5cGVOYW1l
ICsgIiciKTsKKyAgICBzaG91bGRCZSgianNXcmFwcGVyQ2xhc3MoIiArIGV4cHJlc3Npb24gKyAi
LmNvbnN0cnVjdG9yKSIsICInRnVuY3Rpb24nIik7Cit9CisKKy8vIFRoZXNlIGhhdmUgdG8gYmUg
Z2xvYmFsIGZvciB0aGUgdGVzdCBoZWxwZXJzIHRvIHNlZSB0aGVtLgordmFyIGltYWdlU2V0UnVs
ZSwgc3ViUnVsZTsKKworZnVuY3Rpb24gdGVzdEltYWdlU2V0UnVsZShkZXNjcmlwdGlvbiwgcHJv
cGVydHksIHJ1bGUsIGV4cGVjdGVkTGVuZ3RoLCBleHBlY3RlZFRleHRzKQoreworICAgIGRlYnVn
KCIiKTsKKyAgICBkZWJ1ZyhkZXNjcmlwdGlvbiArICIgOiAiICsgcnVsZSk7CisKKyAgICB2YXIg
ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgZGl2LnNldEF0dHJpYnV0
ZSgic3R5bGUiLCBwcm9wZXJ0eSArICI6IGltYWdlLXNldCgiICsgcnVsZSArICIpIik7CisgICAg
ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpOworCisgICAgaW1hZ2VTZXRSdWxlID0gZGl2
LnN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHkpOworICAgIHNob3VsZEJlVHlwZSgi
aW1hZ2VTZXRSdWxlIiwgIkNTU1ZhbHVlTGlzdCIpOworCisgICAgaWYgKGltYWdlU2V0UnVsZSkg
eworICAgICAgICBpZiAoanNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlWzBdKSA9PSAiQ1NTVmFs
dWVMaXN0IikgeworICAgICAgICAgICAgLy8gVGhlIGNvbnRlbnQgcHJvcGVydHkgcmV0dXJucyBh
IENTU1ZhbHVlTGlzdCBhbnl3YXksIHNvIHRvIGdldCB0byB0aGUgCisgICAgICAgICAgICAvLyBp
bWFnZVNldCBDU1MgdmFsdWUgbGlzdCwgd2UgaGF2ZSB0byBsb29rIGF0IHRoZSBmaXJzdCBlbnRy
eSBpbiB0aGUgCisgICAgICAgICAgICAvLyBjb250ZW50IHZhbHVlIGxpc3QuCisgICAgICAgICAg
ICBpbWFnZVNldFJ1bGUgPSBpbWFnZVNldFJ1bGVbMF07CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBzaG91bGRCZSgiaW1hZ2VTZXRSdWxlLmxlbmd0aCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZXhw
ZWN0ZWRMZW5ndGg7IH0pOworCisgICAgaWYgKGltYWdlU2V0UnVsZSkgeworICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGV4cGVjdGVkTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHN0cmlu
ZyA9IGltYWdlU2V0UnVsZVtpXTsKKyAgICAgICAgICAgIGlmIChpICUgMiA9PSAwICYmIHN0cmlu
Zy5jc3NUZXh0LmluY2x1ZGVzKCcjJykpIHsKKyAgICAgICAgICAgICAgICBzdWJSdWxlID0gc3Ry
aW5nLmNzc1RleHQuc3BsaXQoJyMnKVsxXS5yZXBsYWNlKCciJywgIiIpOworICAgICAgICAgICAg
ICAgIHN1YlJ1bGUgPSBzdWJSdWxlLnNwbGl0KCcpJylbMF07CisgICAgICAgICAgICAgICAgc2hv
dWxkQmUoInN1YlJ1bGUiLCAiJyIgKyBleHBlY3RlZFRleHRzW2ldICsgIiciKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3ViUnVsZSA9IHN0cmluZzsKKyAgICAgICAg
ICAgICAgICBzaG91bGRCZSgic3ViUnVsZS5jc3NUZXh0IiwgIiciICsgZXhwZWN0ZWRUZXh0c1tp
XSArICInIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkb2N1bWVu
dC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7Cit9CisKK3Rlc3RJbWFnZVNldFJ1bGUoIlNpbmdsZSB2
YWx1ZSBmb3IgYmFja2dyb3VuZC1pbWFnZSB3aXRoIGdyYWRpZW50IiwKKyAgICAgICAgICAgICAg
ICAiYmFja2dyb3VuZC1pbWFnZSIsCisgICAgICAgICAgICAgICAgImxpbmVhci1ncmFkaWVudChn
cmVlbiwgd2hpdGUpIDF4IiwgMiwKKyAgICAgICAgICAgICAgICBbImxpbmVhci1ncmFkaWVudChn
cmVlbiwgd2hpdGUpIiwgIjEiXSk7Cit0ZXN0SW1hZ2VTZXRSdWxlKCJTaW5nbGUgdmFsdWUgZm9y
IGNvbnRlbnQgd2l0aCBncmFkaWVudCIsCisgICAgICAgICAgICAgICAgImJhY2tncm91bmQtaW1h
Z2UiLAorICAgICAgICAgICAgICAgICJsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAxeCIs
IDIsCisgICAgICAgICAgICAgICAgWyJsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSIsICIx
Il0pOworCit0ZXN0SW1hZ2VTZXRSdWxlKCJTaW5nbGUgdmFsdWUgZm9yIGJhY2tncm91bmQtaW1h
Z2Ugd2l0aCBncmFkaWVudHMiLAorICAgICAgICAgICAgICAgICJiYWNrZ3JvdW5kLWltYWdlIiwK
KyAgICAgICAgICAgICAgICAibGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMXgsIHJhZGlh
bC1ncmFkaWVudChibHVlLCB3aGl0ZSkgMngiLCA0LAorICAgICAgICAgICAgICAgIFsibGluZWFy
LWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkiLCAiMSIsICJyYWRpYWwtZ3JhZGllbnQoYmx1ZSwgd2hp
dGUpIiwgIjIiXSk7CisKK3Rlc3RJbWFnZVNldFJ1bGUoIkNvbWJpbmVkIGdyYWRpZW50IGFuZCBV
UkwiLAorICAgICAgICAgICAgICAgICJiYWNrZ3JvdW5kLWltYWdlIiwKKyAgICAgICAgICAgICAg
ICAidXJsKCcjYScpIDF4LCBsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAyeCIsIDQsCisg
ICAgICAgICAgICAgICAgWyJhIiwgIjEiLCAibGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSki
LCAiMiJdKTsKKwordGVzdEltYWdlU2V0UnVsZSgiQ29tYmluZWQgZ3JhZGllbnQgYW5kIFVSTCBp
biBjb250ZW50IiwKKyAgICAgICAgICAgICAgICAiY29udGVudCIsCisgICAgICAgICAgICAgICAg
InVybCgnI2EnKSAxeCwgbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMngiLCA0LAorICAg
ICAgICAgICAgICAgIFsiYSIsICIxIiwgImxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIiwg
IjIiXSk7CisKK3Rlc3RJbWFnZVNldFJ1bGUoIkNvbWJpbmVkIGdyYWRpZW50IGFuZCBjcm9zcy1m
YWRlIiwKKyAgICAgICAgICAgICAgICAiYmFja2dyb3VuZC1pbWFnZSIsCisgICAgICAgICAgICAg
ICAgIi13ZWJraXQtY3Jvc3MtZmFkZSh1cmwoJyNhJyksIHVybCgnI2InKSwgNzAlKSAxeCwgbGlu
ZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMngiLCA0LAorICAgICAgICAgICAgICAgIFsiYSIs
ICIxIiwgImxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIiwgIjIiXSk7CisKK3N1Y2Nlc3Nm
dWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5
IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWdlbmVy
YXRlZC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMK
KyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctaW52YWxpZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctaW52YWxpZC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDI1NDgwOCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2ltYWdlLXNl
dC1wYXJzaW5nLWludmFsaWQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xOCw2ICsx
OCwxMiBAQCBQQVNTIGNzc1J1bGUgaXMgbnVsbAogCiBTY2FsZSBmYWN0b3IgaXMgMCA6IHVybCgn
I2EnKSAweAogUEFTUyBjc3NSdWxlIGlzIG51bGwKKworR2VuZXJhdGVkIGltYWdlIGZvciBjdXJz
b3IgOiBsaW5lYXItZ3JhZGllbnQoYmxhY2ssIHdoaXRlKSAxeAorUEFTUyBjc3NSdWxlIGlzIG51
bGwKKworSW1hZ2Utc2V0IGluc2lkZSBpbWFnZS1zZXQgOiBpbWFnZS1zZXQoaW1hZ2Utc2V0KHVy
bCgnI2EnKSAxeCkgMXgpCitQQVNTIGNzc1J1bGUgaXMgbnVsbAogUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nz
cy9pbWFnZS1zZXQtcGFyc2luZy1pbnZhbGlkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctaW52YWxpZC5odG1sCShyZXZpc2lvbiAyNTQ4
MDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1pbnZhbGlkLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAgdGVzdEludmFsaWRJbWFnZVNldCgi
Tm8geCIsICJiYWNrZ3JvdW5kLQogdGVzdEludmFsaWRJbWFnZVNldCgiTm8gY29tbWEiLCAiYmFj
a2dyb3VuZC1pbWFnZSIsICJ1cmwoJyNhJykgMXggdXJsKCcjYicpIDJ4Iik7CiB0ZXN0SW52YWxp
ZEltYWdlU2V0KCJUb28gbWFueSBzY2FsZSBmYWN0b3IgcGFyYW1ldGVycyIsICJiYWNrZ3JvdW5k
LWltYWdlIiwgInVybCgnI2EnKSAxeCAyeCIpOwogdGVzdEludmFsaWRJbWFnZVNldCgiU2NhbGUg
ZmFjdG9yIGlzIDAiLCAiYmFja2dyb3VuZC1pbWFnZSIsICJ1cmwoJyNhJykgMHgiKTsKK3Rlc3RJ
bnZhbGlkSW1hZ2VTZXQoIkdlbmVyYXRlZCBpbWFnZSBmb3IgY3Vyc29yIiwgImN1cnNvciIsICJs
aW5lYXItZ3JhZGllbnQoYmxhY2ssIHdoaXRlKSAxeCIpOwordGVzdEludmFsaWRJbWFnZVNldCgi
SW1hZ2Utc2V0IGluc2lkZSBpbWFnZS1zZXQiLCAiYmFja2dyb3VuZC1pbWFnZSIsICJpbWFnZS1z
ZXQoaW1hZ2Utc2V0KHVybCgnI2EnKSAxeCkgMXgpIik7CiAKIHN1Y2Nlc3NmdWxseVBhcnNlZCA9
IHRydWU7CiA8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0
LWNyb3NzLWZhZGUtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1mYWRlLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQor
KysgTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS1leHBlY3RlZC5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0PgorICAgIHdpbmRvdy5vbmxvYWQgPSAoKSA9PiB7CisgICAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIHRl
c3RSdW5uZXIuc2V0QmFja2luZ1NjYWxlRmFjdG9yKDIsICgpID0+IHNldFRpbWVvdXQoKCkgPT4g
dGVzdFJ1bm5lci5ub3RpZnlEb25lKCksIDApKTsKKyAgICAgIH0KKyAgICB9Cis8L3NjcmlwdD4K
KworICAgIAorPHN0eWxlPgorICAgICNmb28geworICAgICAgICB3aWR0aDoxMDBweDsKKyAgICAg
ICAgaGVpZ2h0OjEwMHB4OworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWNyb3Nz
LWZhZGUodXJsKCdyZXNvdXJjZXMvYmx1ZS0xMDAtcHgtc3F1YXJlLnBuZycpLCB1cmwoJ3Jlc291
cmNlcy9ncmVlbi0yMDAtcHgtc3F1YXJlLnBuZycsIDUwJSkpOworICAgIH0KKzwvc3R5bGU+Cis8
L2hlYWQ+CisKKzxib2R5PgorICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJl
bG93IGlzIGEgYmx1ZSAxMDBweCBzcXVhcmUgd2hlbiB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgaXMg
MSwgYW5kIGlmIGl0IGlzIGEgMTAwcHggZ3JlZW4vYmx1ZSBjcm9zcy1mYWRlIHNxdWFyZSB3aGVu
IHRoZSBkZXZpY2VTY2FsZUZhY3RvciBpcyAyLjwvZGl2PgorPGRpdiBpZD1mb28+PC9kaXY+Cis8
L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2hp
ZHBpL2ltYWdlLXNldC1jcm9zcy1mYWRlLWV4cGVjdGVkLmh0bWwKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHBy
b3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1mYWRl
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jv
c3MtZmFkZS5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1h
Z2Utc2V0LWNyb3NzLWZhZGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1IEBACis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KKyAgICB3aW5kb3cub25sb2FkID0gKCkgPT4geworICAg
ICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGls
RG9uZSgpOworICAgICAgICB0ZXN0UnVubmVyLnNldEJhY2tpbmdTY2FsZUZhY3RvcigyLCAoKSA9
PiBzZXRUaW1lb3V0KCgpID0+IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpLCAwKSk7CisgICAgICB9
CisgICAgfQorPC9zY3JpcHQ+CisgICAgCis8c3R5bGU+CisgICAgI2ZvbyB7CisgICAgICAgIHdp
ZHRoOjEwMHB4OworICAgICAgICBoZWlnaHQ6MTAwcHg7CisgICAgICAgIGJhY2tncm91bmQtaW1h
Z2U6IGltYWdlLXNldCh1cmwoJ3Jlc291cmNlcy9ibHVlLTEwMC1weC1zcXVhcmUucG5nJykgMXgs
IC13ZWJraXQtY3Jvc3MtZmFkZSh1cmwoJ3Jlc291cmNlcy9ibHVlLTEwMC1weC1zcXVhcmUucG5n
JyksIHVybCgncmVzb3VyY2VzL2dyZWVuLTIwMC1weC1zcXVhcmUucG5nJywgNTAlKSkgMngpOwor
ICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorICAgIDxkaXY+VGhpcyB0ZXN0IHBh
c3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgYmx1ZSAxMDBweCBzcXVhcmUgd2hlbiB0aGUgZGV2
aWNlU2NhbGVGYWN0b3IgaXMgMSwgYW5kIGlmIGl0IGlzIGEgMTAwcHggZ3JlZW4vYmx1ZSBjcm9z
cy1mYWRlIHNxdWFyZSB3aGVuIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBpcyAyLjwvZGl2PgorICAg
IDxkaXYgaWQ9Zm9vPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBv
bjogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS5odG1sCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1z
ZXQtZ3JhZGllbnQtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysr
IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LWV4cGVjdGVkLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNiBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+
CisgICAgd2luZG93Lm9ubG9hZCA9ICgpID0+IHsKKyAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikgeworICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgdGVzdFJ1
bm5lci5zZXRCYWNraW5nU2NhbGVGYWN0b3IoMiwgKCkgPT4gc2V0VGltZW91dCgoKSA9PiB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKSwgMCkpOworICAgICAgfQorICAgIH0KKzwvc2NyaXB0PgorCisg
ICAgCis8c3R5bGU+CisgICAgI2ZvbyB7CisgICAgICAgIHdpZHRoOjEwMHB4OworICAgICAgICBo
ZWlnaHQ6MTAwcHg7CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChn
cmVlbiwgd2hpdGUpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorICAgIDxk
aXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgYmx1ZSAxMDBweCBzcXVh
cmUgd2hlbiB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgaXMgMSwgYW5kIGlmIGl0IGlzIGEgMTAwcHgg
Z3JlZW4td2hpdGUgZ3JhZGllbnQgc3F1YXJlIHdoZW4gdGhlIGRldmljZVNjYWxlRmFjdG9yIGlz
IDIuPC9kaXY+CisgICAgPGRpdiBpZD1mb28+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVu
dC1leHBlY3RlZC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAg
KzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtbXVsdGktZXhwZWN0ZWQuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1tdWx0
aS1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvaGlkcGkv
aW1hZ2Utc2V0LWdyYWRpZW50LW11bHRpLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyNSBAQAorPGh0bWw+Cis8aGVhZD4gICAgCis8c2NyaXB0PgorICAgIHdpbmRvdy5v
bmxvYWQgPSAoKSA9PiB7CisgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAg
dGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0QmFja2lu
Z1NjYWxlRmFjdG9yKDIsICgpID0+IHNldFRpbWVvdXQoKCkgPT4gdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCksIDApKTsKKyAgICAgIH0KKyAgICB9Cis8L3NjcmlwdD4KKworPHN0eWxlPgorICAgICNm
b28geworICAgICAgICB3aWR0aDoxMDBweDsKKyAgICAgICAgaGVpZ2h0OjEwMHB4OworICAgICAg
ICBiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQocmVkLCBibHVlKTsKKyAgICB9Cis8
L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keT4KKyAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYg
dGhlIGRpdiBiZWxvdyBpcyBhIDEwMHB4IGdyZWVuLXdoaXRlIGdyYWRpZW50IHNxdWFyZSB3aGVu
IGRldmljZVBpeGVsUmF0aW8gaXMgMSwgYSByYWRpYWwgcmVkLWJsdWUgc3F1YXJlIHdoZW4gZGV2
aWNlUGl4ZWxSYXRpbyBpcyAyLCBhbmQgYSBibHVlIHNxdWFyZSB3aGVuIGRldmljZVBpeGVsUmF0
aW8gaXMgMy48L2Rpdj4KKyAgICA8ZGl2IGlkPWZvbz48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
ClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdy
YWRpZW50LW11bHRpLWV4cGVjdGVkLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFi
bGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1tdWx0aS5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LW11
bHRpLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1z
ZXQtZ3JhZGllbnQtbXVsdGkuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1IEBACis8
aHRtbD4KKzxoZWFkPiAgICAKKzxzY3JpcHQ+CisgICAgd2luZG93Lm9ubG9hZCA9ICgpID0+IHsK
KyAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLndhaXRV
bnRpbERvbmUoKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRCYWNraW5nU2NhbGVGYWN0b3IoMiwg
KCkgPT4gc2V0VGltZW91dCgoKSA9PiB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKSwgMCkpOworICAg
ICAgfQorICAgIH0KKzwvc2NyaXB0PgorCis8c3R5bGU+CisgICAgI2ZvbyB7CisgICAgICAgIHdp
ZHRoOjEwMHB4OworICAgICAgICBoZWlnaHQ6MTAwcHg7CisgICAgICAgIGJhY2tncm91bmQtaW1h
Z2U6IGltYWdlLXNldChsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAxeCwgcmFkaWFsLWdy
YWRpZW50KHJlZCwgYmx1ZSkgMngsICdyZXNvdXJjZXMvYmx1ZS0xMDAtcHgtc3F1YXJlLnBuZycg
M3gpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorICAgIDxkaXY+VGhpcyB0
ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgMTAwcHggZ3JlZW4td2hpdGUgZ3JhZGll
bnQgc3F1YXJlIHdoZW4gZGV2aWNlUGl4ZWxSYXRpbyBpcyAxLCBhIHJhZGlhbCByZWQtYmx1ZSBz
cXVhcmUgd2hlbiBkZXZpY2VQaXhlbFJhdGlvIGlzIDIsIGFuZCBhIGJsdWUgc3F1YXJlIHdoZW4g
ZGV2aWNlUGl4ZWxSYXRpbyBpcyAzLjwvZGl2PgorICAgIDxkaXYgaWQ9Zm9vPjwvZGl2PgorPC9i
b2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9oaWRw
aS9pbWFnZS1zZXQtZ3JhZGllbnQtbXVsdGkuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhl
Y3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS1l
eHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Ut
c2V0LWdyYWRpZW50LXNpbmdsZS1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS1leHBlY3RlZC5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYgQEAKKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+
CisgICAgI2ZvbyB7CisgICAgICAgIHdpZHRoOjEwMHB4OworICAgICAgICBoZWlnaHQ6MTAwcHg7
CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUp
OworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGlkPSJib2R5Ij4KKyAgICA8ZGl2
PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGRpdiBiZWxvdyBpcyBhIDEwMHB4IGdyZWVuLXdoaXRl
IGdyYWRpZW50IHNxdWFyZS48L2Rpdj4KKyAgICA8ZGl2IGlkPWZvbz48L2Rpdj4KKzwvYm9keT4K
KzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1h
Z2Utc2V0LWdyYWRpZW50LXNpbmdsZS1leHBlY3RlZC5odG1sCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2
bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9w
ZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtc2lu
Z2xlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQt
Z3JhZGllbnQtc2luZ2xlLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9o
aWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtc2luZ2xlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNiBAQAorPGh0bWw+Cis8aGVhZD4gICAgCis8c3R5bGU+CisgICAgI2ZvbyB7CisgICAg
ICAgIHdpZHRoOjEwMHB4OworICAgICAgICBoZWlnaHQ6MTAwcHg7CisgICAgICAgIGJhY2tncm91
bmQtaW1hZ2U6IGltYWdlLXNldChsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAxeCk7Cisg
ICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgaWQ9ImJvZHkiPgorICAgIDxkaXY+VGhp
cyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgMTAwcHggZ3JlZW4td2hpdGUgZ3Jh
ZGllbnQgc3F1YXJlLjwvZGl2PgorICAgIDxkaXYgaWQ9Zm9vPjwvZGl2PgorPC9ib2R5PgorPC9o
dG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1z
ZXQtZ3JhZGllbnQtc2luZ2xlLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUK
IyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50Lmh0bWwJKG5vbmV4
aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dD4KKyAgICB3aW5kb3cub25sb2FkID0gKCkgPT4geworICAgICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB0ZXN0
UnVubmVyLnNldEJhY2tpbmdTY2FsZUZhY3RvcigyLCAoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHRl
c3RSdW5uZXIubm90aWZ5RG9uZSgpLCAwKSk7CisgICAgICB9CisgICAgfQorPC9zY3JpcHQ+CisK
KzxzdHlsZT4KKyAgICAjZm9vIHsKKyAgICAgICAgd2lkdGg6MTAwcHg7CisgICAgICAgIGhlaWdo
dDoxMDBweDsKKyAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogaW1hZ2Utc2V0KHVybCgncmVzb3Vy
Y2VzL2JsdWUtMTAwLXB4LXNxdWFyZS5wbmcnKSAxeCwgbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3
aGl0ZSkgMngpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorICAgIDxkaXY+
VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgYmx1ZSAxMDBweCBzcXVhcmUg
d2hlbiB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgaXMgMSwgYW5kIGlmIGl0IGlzIGEgMTAwcHggZ3Jl
ZW4td2hpdGUgZ3JhZGllbnQgc3F1YXJlIHdoZW4gdGhlIGRldmljZVNjYWxlRmFjdG9yIGlzIDIu
PC9kaXY+CisgICAgPGRpdiBpZD1mb28+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC5o
dG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388265</attachid>
            <date>2020-01-20 16:40:38 -0800</date>
            <delta_ts>2020-01-20 16:49:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81941-20200121024036.patch</filename>
            <type>text/plain</type>
            <size>82241</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAyMC0wMS0xOSAgTm9hbSBS
b3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgLXdlYmtpdC1pbWFnZS1zZXQg
c2hvdWxkIHN1cHBvcnQgYWxsIHRoZSBpbWFnZSBmdW5jdGlvbnMgV2ViS2l0IHN1cHBvcnRzLCBu
b3QganVzdCB1cmwoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODE5NDEKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAg
ICBTZXBhcmF0ZSBTdHlsZUNhY2hlZEltYWdlIHRvIDQgY2xhc3NlczoKKyAgICAgICAgLSBTdHls
ZUNhY2hlZEltYWdlOiBmb3Igc2luZ2xlIGltYWdlcyBvbmx5CisgICAgICAgIC0gU3R5bGVNdWx0
aUltYWdlOiBmb3IgdmFsdWVzIHRoYXQgY2FuIGNvbnRhaW4gbXVsdGlwbGUgaW1hZ2VzOiBsaWtl
IGN1cnNvci9pbWFnZS1zZXQKKyAgICAgICAgLSBTdHlsZUltYWdlU2V0CisgICAgICAgIC0gU3R5
bGVDdXJzb3JJbWFnZQorCisgICAgICAgIFRoZSBuZXcgY2xhc3NlcyBvbmx5IGRlYWwgd2l0aCB0
aGVpciBvd24gdmFsdWUgdHlwZS4gQmVmb3JlLCBJbWFnZVNldCBhbmQgY3Vyc29yIHdlcmUgcmVz
b2x2ZWQKKyAgICAgICAgYXMgYSBTdHlsZUNhY2hlZEltYWdlLCB3aGljaCBpcyBubyBsb25nZXIg
YSB2YWxpZCBhc3N1bXB0aW9uIGlmIGltYWdlLXNldCBjYW4gY29udGFpbiBnZW5lcmF0ZWQgaW1h
Z2VzLgorICAgICAgICBUaG91Z2ggY3Vyc29ycyBzdGlsbCBjYW4gb25seSBjb250YWluIGNhY2hl
ZCBpbWFnZXMsIGl0IHdhcyBjbGVhbmVyIHRvIHJlZmFjdG9yIGl0IG91dCBhcyB3ZWxsLgorCisg
ICAgICAgIFJlZmFjdG9yZWQgYmVzdC1maXQgaW1hZ2Ugc2VsZWN0aW9uIGZyb20gbG9hZGluZy4g
Tm93IFN0eWxlQ2FjaGVkSW1hZ2UgaXMgaW4gY2hhcmdlIG9mIGxvYWRpbmcKKyAgICAgICAgdGhl
IGFjdHVhbCBpbWFnZSwgYW5kIFN0eWxlSW1hZ2VTZXQvU3R5bGVDdXJzb3JJbWFnZSBwZXJmb3Jt
IHRoZSBzb3VyY2Ugc2VsZWN0aW9uLgorCisgICAgICAgIEFsc28sIGFkZGVkIHRoZSBuZWNlc3Nh
cnkgbG9naWMgaW4gdGhlIENTUyBwYXJzZXIgdG8gY29uc3VtZSBnZW5lcmF0ZWQgaW1hZ2VzIGlu
c2lkZSBpbWFnZS1zZXRzLCBleGNsdWRpbmcKKyAgICAgICAgd2hlbiB0aGUgaW1hZ2Utc2V0IGlz
IGEgY3Vyc29yIHZhbHVlLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2Nzcy9pbWFnZS1zZXQtcGFy
c2luZy1nZW5lcmF0ZWQuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9oaWRwaS9pbWFnZS1zZXQt
Y3Jvc3MtZmFkZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFk
aWVudC1tdWx0aS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFk
aWVudC1zaW5nbGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3Jh
ZGllbnQuaHRtbAorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBmaWxl
cworCisgICAgICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6c2VsZWN0QmVzdEZpdEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0N1cnNvckltYWdlVmFsdWU6OmxvYWRJbWFnZSk6IERlbGV0ZWQuCisgICAg
ICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuaDoKKyAgICAgICAgICAgICAgICBJbnN0ZWFk
IG9mIGN1cnNvciBsb2FkaW5nIHRoZSBpbWFnZSwgaXQgc2VsZWN0cyBhbiBpbWFnZSBDU1MgdmFs
dWUKKworICAgICAgICAqIGNzcy9DU1NJbWFnZVNldFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ltYWdlU2V0VmFsdWU6OkNTU0ltYWdlU2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTSW1hZ2VTZXRWYWx1ZTo6ZmlsbEltYWdlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ltYWdlU2V0VmFsdWU6OmNhY2hlZEltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ltYWdlU2V0VmFsdWU6OnNlbGVjdEJlc3RGaXRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NJbWFnZVNldFZhbHVlOjp1cGRhdGVEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpDU1NJbWFnZVNldFZhbHVlOjppbWFnZVNldFdpdGhTdHlsZXNSZXNvbHZlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjp0cmF2ZXJzZVN1YnJlc291cmNlcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjpsb2FkQmVzdEZpdEltYWdl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5oOgorICAgICAgICAg
ICAgICAgIFJlZmFjdG9yIENTU0ltYWdlU2V0VmFsdWUgdG8gaW5jbHVkZSBub24tY2FjaGVkSW1h
Z2UgaW1hZ2VzCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVDdXJzb3IpOgorICAgICAgICAqIGNzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVVybE9yU3RyaW5nQXNTdHJpbmdWaWV3
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5oOgorICAgICAgICAgICAgICAgIAorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NTU1Byb3Bl
cnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRnVuYyk6CisgICAgICAg
ICAgICAgICAgV2hlbiBibGVuZGluZyB0d28gaW1hZ2VzLCBnZXQgdGhlIHNlbGVjdGVkIGltYWdl
cyBpbiBjYXNlIGl0IGlzIGFuIGltYWdlLXNldAorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
SW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1h
Z2VSZXNvdXJjZVN0eWxlSW1hZ2U6OmluaXRpYWxpemUpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FuRGlyZWN0bHlDb21w
b3NpdGVCYWNrZ3JvdW5kQmFja2dyb3VuZEltYWdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5
bGUvU2hhcGVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjppc0ltYWdl
VmFsaWQgY29uc3QpOgorICAgICAgICAgICAgICAgIFVzZSBoYXNDYWNoZWRJbWFnZSgpIGluc3Rl
YWQgb2YgaXNDYWNoZWRJbWFnZSgpIGFzIGEgU3R5bGVJbWFnZVNldCBpcyBubyBsb25nZXIgYW4g
aXNDYWNoZWRJbWFnZSgpCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNhY2hlZEltYWdlOjpTdHlsZUNhY2hl
ZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlVVJMKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OmxvYWQpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0
eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVD
dXJzb3JJbWFnZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFn
ZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZU11bHRpSW1hZ2UuY3BwOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlU2V0Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9T
dHlsZUltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUltYWdlOjpzZWxlY3RlZEltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW1hZ2U6OnNlbGVjdGVkSW1hZ2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVJbWFnZTo6aXNDdXJzb3JJbWFnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUltYWdlOjppc0ltYWdlU2V0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlSW1hZ2U6Omhhc0NhY2hlZEltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlSW1hZ2U6OlN0eWxlSW1hZ2UpOgorICAgICAgICAgICAgICAgIFNlcGFyYXRlIGN1
cnNvci9pbWFnZS1zZXQgcmVsYXRlZCBzdHVmZiBhd2F5IGZyb20gU3R5bGVDYWNoZWRJbWFnZS4K
KworICAgICAgICAqIHN0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OkJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb250ZW50KToKKyAgICAgICAgKiBz
dHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVp
bGRlclN0YXRlOjpyZXNvbHZlSW1hZ2VTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OkJ1aWxkZXJTdGF0ZTo6Y3JlYXRlU3R5bGVJbWFnZSk6CisgICAgICAgICogc3R5bGUvU3R5bGVC
dWlsZGVyU3RhdGUuaDoKKyAgICAgICAgICAgICAgICBNYXRjaCB0aGUgQ1NTIHZhbHVlcyB3aXRo
IHRoZSBjb3JyZWN0IFN0eWxlIGNsYXNzLiBBbHNvLCBlbnN1cmUgaW1hZ2Utc2V0cyByZXNvbHZl
IHRoZWlyIAorICAgICAgICAgICAgICAgIGltYWdlcycgc3R5bGVzIGFzIHRoZXkgbWF5IGNvbnRh
aW4gZ3JhZGllbnRzIGFuZCBvdGhlciBjb250ZXh0LWF3YXJlIHZhbHVlcy4KKwogMjAyMC0wMS0x
OSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10gRGV2
aXJ0dWFsaXplIEZvcm1hdHRpbmdTdGF0ZQpJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI1
NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0y
MjYyLDE1ICsyMjYyLDE4IEBAIHJlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmNwcAogcmVuZGVy
aW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVC
b3hEYXRhLmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCityZW5kZXJp
bmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZURlcHJl
Y2F0ZWRGbGV4aWJsZUJveERhdGEuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVGaWx0ZXJEYXRh
LmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlRmxleGlibGVCb3hEYXRhLmNwcAogcmVuZGVyaW5n
L3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVHcmlk
RGF0YS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZUdyaWRJdGVtRGF0YS5jcHAKK3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZUltYWdlU2V0LmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJpdGVk
RGF0YS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZU1hcnF1ZWVEYXRhLmNwcAogcmVuZGVyaW5n
L3N0eWxlL1N0eWxlTXVsdGlDb2xEYXRhLmNwcAorcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJ
bWFnZS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcAogcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuY3BwCiByZW5kZXJpbmcvc3R5
bGUvU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjU0ODA4KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzcxNSw5ICsxMzcxNSwxNSBAQAogCQlDOURBREJDOTFCMUQzQjI1MDAxRjE3
RDggLyogSlNNZWRpYVNlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNNZWRpYVNlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
OURBREJDQTFCMUQzQjI1MDAxRjE3RDggLyogSlNNZWRpYVNlc3Npb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNZWRpYVNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzlGODdDRkQxQjI4RTVGNjAwOTc5QjgzIC8qIE1lZGlhU2Vzc2lvbkV2ZW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU2Vzc2lvbkV2ZW50cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDQTA5MUQ4NjIzQ0Y5MDc4MDBBRDQzNDYgLyogU3R5bGVJbWFnZVNldC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUltYWdlU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQ0EwOTFEODkyM0NGOTA4ODAwQUQ0MzQ2IC8qIFN0eWxlSW1hZ2VTZXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVJbWFnZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDQTE2MzVEQzIwNzJFNzY5MDBFN0QyQ0UgLyogUmVmZXJyZXJQb2xpY3kuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVmZXJyZXJQb2xpY3kuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQTNCRjY3QjEwRDk5QkFFMDBFNkNFNTMgLyog
U2Nyb2xsQW5pbWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2Nyb2xsQW5pbWF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQTNCRjY3
RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQ0E1MkJBRTUyM0QwQUYxNjAwREUwQjg0IC8qIFN0eWxlQ3Vyc29ySW1hZ2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVDdXJzb3JJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUNBNTJCQUU3MjNEMEFGMTcwMERFMEI4NCAvKiBTdHlsZU11bHRpSW1hZ2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVNdWx0aUltYWdlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0E1MkJBRTgyM0QwQUYxODAwREUwQjg0IC8qIFN0eWxlTXVsdGlJ
bWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZU11bHRpSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQ0E1MkJBRTkyM0QwQUYxOTAwREUwQjg0IC8qIFN0eWxlQ3Vyc29ySW1h
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVDdXJzb3JJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDQTZDMTUyRjIyMEI0QTU1MDA1NUNCRkMgLyogSlNJREJSZXF1ZXN0Q3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCUmVxdWVz
dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNBNkMxNTM3MjIwRDFF
QjMwMDU1Q0JGQyAvKiBKU0lEQkN1cnNvckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0lEQkN1cnNvckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNBNkMxNTM4MjIwRDFFQjMwMDU1Q0JGQyAvKiBKU0lEQkN1cnNvcldpdGhW
YWx1ZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lE
QkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yNTU1Myw2ICsyNTU1OSw4IEBACiAJCQkJQkNFRjQ0NEMwRTY3NDYyODAwMUMxMjg3IC8qIFN0
eWxlQ2FjaGVkSW1hZ2UuaCAqLywKIAkJCQkxQzBBQTE2QTIxOTQwREM3MDA4OTY4MjkgLyogU3R5
bGVDb2xvclNjaGVtZS5oICovLAogCQkJCTlEQUM3QzU2MUFGMkNCNjQwMDQzN0M0NCAvKiBTdHls
ZUNvbnRlbnRBbGlnbm1lbnREYXRhLmggKi8sCisJCQkJQ0E1MkJBRTUyM0QwQUYxNjAwREUwQjg0
IC8qIFN0eWxlQ3Vyc29ySW1hZ2UuY3BwICovLAorCQkJCUNBNTJCQUU5MjNEMEFGMTkwMERFMEI4
NCAvKiBTdHlsZUN1cnNvckltYWdlLmggKi8sCiAJCQkJQkM3NzlFMTUxQkIyMjZBMjAwQ0FBOEJG
IC8qIFN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhLmggKi8sCiAJCQkJQkM1RUI4QjYwRTgyMDFCRDAw
QjI1OTY1IC8qIFN0eWxlRGVwcmVjYXRlZEZsZXhpYmxlQm94RGF0YS5jcHAgKi8sCiAJCQkJQkM1
RUI4QjcwRTgyMDFCRDAwQjI1OTY1IC8qIFN0eWxlRGVwcmVjYXRlZEZsZXhpYmxlQm94RGF0YS5o
ICovLApAQCAtMjU1NjcsMTIgKzI1NTc1LDE2IEBACiAJCQkJQTExMERCOUMxNEY1REY4NzAwQTAz
QjkzIC8qIFN0eWxlR3JpZEl0ZW1EYXRhLmNwcCAqLywKIAkJCQlBMTEwREI5QTE0RjVERjc3MDBB
MDNCOTMgLyogU3R5bGVHcmlkSXRlbURhdGEuaCAqLywKIAkJCQlCQ0VGNDNDRTBFNjczREExMDAx
QzEyODcgLyogU3R5bGVJbWFnZS5oICovLAorCQkJCUNBMDkxRDg2MjNDRjkwNzgwMEFENDM0NiAv
KiBTdHlsZUltYWdlU2V0LmNwcCAqLywKKwkJCQlDQTA5MUQ4OTIzQ0Y5MDg4MDBBRDQzNDYgLyog
U3R5bGVJbWFnZVNldC5oICovLAogCQkJCUJDMjI3MzAxMEU4MkYxRTYwMEU3Rjk3NSAvKiBTdHls
ZUluaGVyaXRlZERhdGEuY3BwICovLAogCQkJCUJDMjI3MzAyMEU4MkYxRTYwMEU3Rjk3NSAvKiBT
dHlsZUluaGVyaXRlZERhdGEuaCAqLywKIAkJCQlCQzVFQjcyNzBFODFERTgxMDBCMjU5NjUgLyog
U3R5bGVNYXJxdWVlRGF0YS5jcHAgKi8sCiAJCQkJQkM1RUI3MjgwRTgxREU4MTAwQjI1OTY1IC8q
IFN0eWxlTWFycXVlZURhdGEuaCAqLywKIAkJCQlCQzVFQjc0QjBFODFFMDY3MDBCMjU5NjUgLyog
U3R5bGVNdWx0aUNvbERhdGEuY3BwICovLAogCQkJCUJDNUVCNzRDMEU4MUUwNjcwMEIyNTk2NSAv
KiBTdHlsZU11bHRpQ29sRGF0YS5oICovLAorCQkJCUNBNTJCQUU3MjNEMEFGMTcwMERFMEI4NCAv
KiBTdHlsZU11bHRpSW1hZ2UuY3BwICovLAorCQkJCUNBNTJCQUU4MjNEMEFGMTgwMERFMEI4NCAv
KiBTdHlsZU11bHRpSW1hZ2UuaCAqLywKIAkJCQlCQzIyNzJFMTBFODJFRTlCMDBFN0Y5NzUgLyog
U3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5jcHAgKi8sCiAJCQkJQkMyMjcyRTIwRTgyRUU5QjAwRTdG
OTc1IC8qIFN0eWxlUmFyZUluaGVyaXRlZERhdGEuaCAqLywKIAkJCQlCQzIyNzJCQTBFODJFQUFF
MDBFN0Y5NzUgLyogU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAgKi8sCkBAIC0zMTM1Nyw2
ICszMTM2OSw3IEBACiAJCQkJMTE5OUZBNDYyMDhFMzVBMzAwMjM1OENDIC8qIExheW91dENvbnRh
aW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkYyNkJCNkMyMzM0M0U2RjAwMkYyQkVBIC8qIExh
eW91dENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTExMzEwQ0Y1MjBCQTRBNEMwMDY1QThE
MCAvKiBMYXlvdXREZXNjZW5kYW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0MTgw
MjU1MjNENDU0OUIwMEZGQjA3MSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU0QUJBQkREMjM2MDg4RkUwMEZBNDM0NSAvKiBMYXlvdXRJbnRlZ3JhdGlv
bkxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTExMzEwQ0Y0MjBCQTRBM0QwMDY1QThE
MCAvKiBMYXlvdXRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxRDcyRjYxNUZFNjk1
MzAwQzRDMDdFIC8qIExheW91dE1pbGVzdG9uZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjA1MCw3
ICszMjA2Myw2IEBACiAJCQkJNDU4RkU0MEExNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNlYXJj
aEZpZWxkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQgLyog
UmVuZGVyU2VsZWN0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUIyNDdBNkQwQUZENjM4
MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQxODAyNTUy
M0Q0NTQ5QjAwRkZCMDcxIC8qIExheW91dEludGVncmF0aW9uQm94VHJlZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzE5NTVBODgxNjBEMTk5MjAwODU4MDI1IC8qIFJlbmRlclNuYXBzaG90dGVkUGx1
Z0luLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhDOEZBRTBERENEMzFCMDBCNTkyRjQgLyogUmVu
ZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNjY4MEU4MUNCNzEwMEIyNTk2NSAv
KiBSZW5kZXJTdHlsZUNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk1LDE3ICs5NSwxNyBAQCB2b2lkIENTU0N1cnNvckltYWdlVmFsdWU6OmN1cnNvckVsZW1l
bnRDCiAgICAgbV9ob3RTcG90LnNldFkoc3RhdGljX2Nhc3Q8aW50Pih5KSk7CiB9CiAKLXN0ZDo6
cGFpcjxDYWNoZWRJbWFnZSosIGZsb2F0PiBDU1NDdXJzb3JJbWFnZVZhbHVlOjpsb2FkSW1hZ2Uo
Q2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25z
JiBvcHRpb25zKQorSW1hZ2VXaXRoU2NhbGUgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6c2VsZWN0QmVz
dEZpdEltYWdlKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBpZiAoaXM8Q1NTSW1h
Z2VTZXRWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENTU0ltYWdlU2V0VmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkubG9hZEJlc3RGaXRJbWFnZShs
b2FkZXIsIG9wdGlvbnMpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1
ZT4obV9pbWFnZVZhbHVlLmdldCgpKS5zZWxlY3RCZXN0Rml0SW1hZ2UoZG9jdW1lbnQpOwogCi0g
ICAgaWYgKGF1dG8qIGN1cnNvckVsZW1lbnQgPSB1cGRhdGVDdXJzb3JFbGVtZW50KCpsb2FkZXIu
ZG9jdW1lbnQoKSkpIHsKKyAgICBpZiAoYXV0byogY3Vyc29yRWxlbWVudCA9IHVwZGF0ZUN1cnNv
ckVsZW1lbnQoZG9jdW1lbnQpKSB7CiAgICAgICAgIGlmIChjdXJzb3JFbGVtZW50LT5ocmVmKCkg
IT0gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKS51cmwoKSkKLSAg
ICAgICAgICAgIG1faW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFsdWU6OmNyZWF0ZShsb2FkZXIuZG9j
dW1lbnQoKS0+Y29tcGxldGVVUkwoY3Vyc29yRWxlbWVudC0+aHJlZigpKSwgbV9sb2FkZWRGcm9t
T3BhcXVlU291cmNlKTsKKyAgICAgICAgICAgIG1faW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFsdWU6
OmNyZWF0ZShkb2N1bWVudC5jb21wbGV0ZVVSTChjdXJzb3JFbGVtZW50LT5ocmVmKCkpLCBtX2xv
YWRlZEZyb21PcGFxdWVTb3VyY2UpOwogICAgIH0KIAotICAgIHJldHVybiB7IGRvd25jYXN0PENT
U0ltYWdlVmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkubG9hZEltYWdlKGxvYWRlciwgb3B0aW9u
cyksIDEgfTsKKyAgICByZXR1cm4geyBtX2ltYWdlVmFsdWUucHRyKCkgLCAxIH07CiB9CiAKIGJv
b2wgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6ZXF1YWxzKGNvbnN0IENTU0N1cnNvckltYWdlVmFsdWUm
IG90aGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1
ZS5oCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1h
Z2VWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCwxMiBAQCBjbGFzcyBFbGVtZW50
OwogY2xhc3MgU1ZHQ3Vyc29yRWxlbWVudDsKIGNsYXNzIFNWR0VsZW1lbnQ7CiAKK3N0cnVjdCBJ
bWFnZVdpdGhTY2FsZTsKKworbmFtZXNwYWNlIFN0eWxlIHsKK2NsYXNzIEJ1aWxkZXJTdGF0ZTsK
K30KKwogY2xhc3MgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSBmaW5hbCA6IHB1YmxpYyBDU1NWYWx1ZSB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxDU1NDdXJzb3JJbWFnZVZhbHVlPiBjcmVhdGUoUmVm
PENTU1ZhbHVlPiYmIGltYWdlVmFsdWUsIGJvb2wgaGFzSG90U3BvdCwgY29uc3QgSW50UG9pbnQm
IGhvdFNwb3QsIExvYWRlZEZyb21PcGFxdWVTb3VyY2UgbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSkK
QEAgLTU2LDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBj
b25zdDsKIAotICAgIHN0ZDo6cGFpcjxDYWNoZWRJbWFnZSosIGZsb2F0PiBsb2FkSW1hZ2UoQ2Fj
aGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKKyAgICBJ
bWFnZVdpdGhTY2FsZSBzZWxlY3RCZXN0Rml0SW1hZ2UoY29uc3QgRG9jdW1lbnQmKTsKIAogICAg
IHZvaWQgcmVtb3ZlUmVmZXJlbmNlZEVsZW1lbnQoU1ZHRWxlbWVudCopOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDE5ICsyOCwyMCBAQAogCiAjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgogI2luY2x1ZGUg
IkNTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVz
dC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTdHlsZUJ1aWxk
ZXJTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1DU1NJbWFnZVNldFZhbHVlOjpDU1NJbWFnZVNldFZhbHVlKExvYWRl
ZEZyb21PcGFxdWVTb3VyY2UgbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSkKK1JlZjxDU1NJbWFnZVNl
dFZhbHVlPiBDU1NJbWFnZVNldFZhbHVlOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IENTU0ltYWdlU2V0VmFsdWUpOworfQorCitDU1NJbWFnZVNldFZhbHVlOjpDU1NJbWFn
ZVNldFZhbHVlKCkKICAgICA6IENTU1ZhbHVlTGlzdChJbWFnZVNldENsYXNzLCBDb21tYVNlcGFy
YXRvcikKLSAgICAsIG1fbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZShsb2FkZWRGcm9tT3BhcXVlU291
cmNlKQogewogfQogCkBAIC01MiwxNSArNTMsMTQgQEAgdm9pZCBDU1NJbWFnZVNldFZhbHVlOjpm
aWxsSW1hZ2VTZXQoKQogICAgIHNpemVfdCBpID0gMDsKICAgICB3aGlsZSAoaSA8IGxlbmd0aCkg
ewogICAgICAgICBDU1NWYWx1ZSogaW1hZ2VWYWx1ZSA9IGl0ZW0oaSk7Ci0gICAgICAgIFVSTCBp
bWFnZVVSTCA9IGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KCppbWFnZVZhbHVlKS51cmwoKTsKLQor
ICAgICAgICBBU1NFUlQoaXM8Q1NTSW1hZ2VWYWx1ZT4oaW1hZ2VWYWx1ZSkgfHwgaXM8Q1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZT4oaW1hZ2VWYWx1ZSkpOwogICAgICAgICArK2k7CiAgICAgICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBsZW5ndGgpOwogICAgICAgICBDU1NW
YWx1ZSogc2NhbGVGYWN0b3JWYWx1ZSA9IGl0ZW0oaSk7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFj
dG9yID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpzY2FsZUZhY3RvclZhbHVlKS5mbG9h
dFZhbHVlKCk7CiAKICAgICAgICAgSW1hZ2VXaXRoU2NhbGUgaW1hZ2U7Ci0gICAgICAgIGltYWdl
LmltYWdlVVJMID0gaW1hZ2VVUkw7CisgICAgICAgIGltYWdlLnZhbHVlID0gaW1hZ2VWYWx1ZTsK
ICAgICAgICAgaW1hZ2Uuc2NhbGVGYWN0b3IgPSBzY2FsZUZhY3RvcjsKICAgICAgICAgbV9pbWFn
ZXNJblNldC5hcHBlbmQoaW1hZ2UpOwogICAgICAgICArK2k7CkBAIC03MCw3ICs3MCw3IEBAIHZv
aWQgQ1NTSW1hZ2VTZXRWYWx1ZTo6ZmlsbEltYWdlU2V0KCkKICAgICBzdGQ6OnNvcnQobV9pbWFn
ZXNJblNldC5iZWdpbigpLCBtX2ltYWdlc0luU2V0LmVuZCgpLCBDU1NJbWFnZVNldFZhbHVlOjpj
b21wYXJlQnlTY2FsZUZhY3Rvcik7CiB9CiAKLUNTU0ltYWdlU2V0VmFsdWU6OkltYWdlV2l0aFNj
YWxlIENTU0ltYWdlU2V0VmFsdWU6OmJlc3RJbWFnZUZvclNjYWxlRmFjdG9yKCkKK0ltYWdlV2l0
aFNjYWxlIENTU0ltYWdlU2V0VmFsdWU6OmJlc3RJbWFnZUZvclNjYWxlRmFjdG9yKCkKIHsKICAg
ICBpZiAoIW1faW1hZ2VzSW5TZXQuc2l6ZSgpKQogICAgICAgICBmaWxsSW1hZ2VTZXQoKTsKQEAg
LTg1LDQyICs4NSw0OSBAQCBDU1NJbWFnZVNldFZhbHVlOjpJbWFnZVdpdGhTY2FsZSBDU1NJbWFn
CiAgICAgcmV0dXJuIGltYWdlOwogfQogCi1zdGQ6OnBhaXI8Q2FjaGVkSW1hZ2UqLCBmbG9hdD4g
Q1NTSW1hZ2VTZXRWYWx1ZTo6bG9hZEJlc3RGaXRJbWFnZShDYWNoZWRSZXNvdXJjZUxvYWRlciYg
bG9hZGVyLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCitDYWNoZWRJbWFn
ZSogQ1NTSW1hZ2VTZXRWYWx1ZTo6Y2FjaGVkSW1hZ2UoKSBjb25zdAogewotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGxvYWRlci5kb2N1bWVudCgpOwotICAgIEFTU0VSVChkb2N1bWVudCk7Cisg
ICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KG1fc2VsZWN0ZWRJbWFnZVZhbHVlKSkKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KCptX3NlbGVjdGVkSW1hZ2VWYWx1ZSkuY2Fj
aGVkSW1hZ2UoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KIAotICAgIHVwZGF0ZURldmljZVNj
YWxlRmFjdG9yKCpkb2N1bWVudCk7CitJbWFnZVdpdGhTY2FsZSBDU1NJbWFnZVNldFZhbHVlOjpz
ZWxlY3RCZXN0Rml0SW1hZ2UoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQoreworICAgIHVwZGF0
ZURldmljZVNjYWxlRmFjdG9yKGRvY3VtZW50KTsKIAogICAgIGlmICghbV9hY2Nlc3NlZEJlc3RG
aXRJbWFnZSkgewogICAgICAgICBtX2FjY2Vzc2VkQmVzdEZpdEltYWdlID0gdHJ1ZTsKLQotICAg
ICAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwgd2Ugd2FudCB0byB0YWtlIG11Y2ggbW9yZSB0
aGFuIGRldmljZVNjYWxlRmFjdG9yIGludG8gYWNvdW50IGhlcmUuCi0gICAgICAgIC8vIEFsbCBm
b3JtcyBvZiBzY2FsZSBzaG91bGQgYmUgaW5jbHVkZWQ6IFBhZ2U6OnBhZ2VTY2FsZUZhY3Rvcigp
LCBGcmFtZTo6cGFnZVpvb21GYWN0b3IoKSwKLSAgICAgICAgLy8gYW5kIGFueSBDU1MgdHJhbnNm
b3Jtcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNjk4Ci0gICAg
ICAgIEltYWdlV2l0aFNjYWxlIGltYWdlID0gYmVzdEltYWdlRm9yU2NhbGVGYWN0b3IoKTsKLQot
ICAgICAgICBSZXNvdXJjZUxvYWRlck9wdGlvbnMgbG9hZE9wdGlvbnMgPSBvcHRpb25zOwotICAg
ICAgICBsb2FkT3B0aW9ucy5sb2FkZWRGcm9tT3BhcXVlU291cmNlID0gbV9sb2FkZWRGcm9tT3Bh
cXVlU291cmNlOwotICAgICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJj
ZVJlcXVlc3QoZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGltYWdlLmltYWdlVVJMKSksIGxvYWRPcHRp
b25zKTsKLSAgICAgICAgcmVxdWVzdC5zZXRJbml0aWF0b3IoY2FjaGVkUmVzb3VyY2VSZXF1ZXN0
SW5pdGlhdG9ycygpLmNzcyk7Ci0gICAgICAgIGlmIChvcHRpb25zLm1vZGUgPT0gRmV0Y2hPcHRp
b25zOjpNb2RlOjpDb3JzKQotICAgICAgICAgICAgcmVxdWVzdC51cGRhdGVGb3JBY2Nlc3NDb250
cm9sKCpkb2N1bWVudCk7Ci0KLSAgICAgICAgbV9jYWNoZWRJbWFnZSA9IGxvYWRlci5yZXF1ZXN0
SW1hZ2UoV1RGTW92ZShyZXF1ZXN0KSkudmFsdWVfb3IobnVsbHB0cik7Ci0gICAgICAgIG1fYmVz
dEZpdEltYWdlU2NhbGVGYWN0b3IgPSBpbWFnZS5zY2FsZUZhY3RvcjsKKyAgICAgICAgbV9iZXN0
Rml0SW1hZ2UgPSBiZXN0SW1hZ2VGb3JTY2FsZUZhY3RvcigpOwogICAgIH0KLSAgICByZXR1cm4g
eyBtX2NhY2hlZEltYWdlLmdldCgpLCBtX2Jlc3RGaXRJbWFnZVNjYWxlRmFjdG9yIH07CisKKyAg
ICByZXR1cm4gbV9iZXN0Rml0SW1hZ2U7CiB9CiAKIHZvaWQgQ1NTSW1hZ2VTZXRWYWx1ZTo6dXBk
YXRlRGV2aWNlU2NhbGVGYWN0b3IoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQogeworCisgICAg
Ly8gRklYTUU6IEluIHRoZSBmdXR1cmUsIHdlIHdhbnQgdG8gdGFrZSBtdWNoIG1vcmUgdGhhbiBk
ZXZpY2VTY2FsZUZhY3RvciBpbnRvIGFjb3VudCBoZXJlLgorICAgIC8vIEFsbCBmb3JtcyBvZiBz
Y2FsZSBzaG91bGQgYmUgaW5jbHVkZWQ6IFBhZ2U6OnBhZ2VTY2FsZUZhY3RvcigpLCBGcmFtZTo6
cGFnZVpvb21GYWN0b3IoKSwKKyAgICAvLyBhbmQgYW55IENTUyB0cmFuc2Zvcm1zLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE2OTgKICAgICBmbG9hdCBkZXZpY2VT
Y2FsZUZhY3RvciA9IGRvY3VtZW50LnBhZ2UoKSA/IGRvY3VtZW50LnBhZ2UoKS0+ZGV2aWNlU2Nh
bGVGYWN0b3IoKSA6IDE7CiAgICAgaWYgKGRldmljZVNjYWxlRmFjdG9yID09IG1fZGV2aWNlU2Nh
bGVGYWN0b3IpCiAgICAgICAgIHJldHVybjsKICAgICBtX2RldmljZVNjYWxlRmFjdG9yID0gZGV2
aWNlU2NhbGVGYWN0b3I7CiAgICAgbV9hY2Nlc3NlZEJlc3RGaXRJbWFnZSA9IGZhbHNlOwotICAg
IG1fY2FjaGVkSW1hZ2UgPSBudWxscHRyOworICAgIG1fc2VsZWN0ZWRJbWFnZVZhbHVlID0gbnVs
bHB0cjsKK30KKworUmVmPENTU0ltYWdlU2V0VmFsdWU+IENTU0ltYWdlU2V0VmFsdWU6OmltYWdl
U2V0V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkK
K3sKKyAgICBSZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gcmVzdWx0ID0gQ1NTSW1hZ2VTZXRWYWx1ZTo6
Y3JlYXRlKCk7CisgICAgc2l6ZV90IGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpICsgMSA8IGxlbmd0aDsgaSArPSAyKSB7CisgICAgICAgIHJlc3VsdC0+
YXBwZW5kKGJ1aWxkZXJTdGF0ZS5yZXNvbHZlSW1hZ2VTdHlsZXMoKml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soaSkpKTsKKyAgICAgICAgcmVzdWx0LT5hcHBlbmQoKml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soaSArIDEpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBTdHJpbmcgQ1NT
SW1hZ2VTZXRWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CkBAIC0xNTUsOSArMTYyLDcgQEAg
U3RyaW5nIENTU0ltYWdlU2V0VmFsdWU6OmN1c3RvbUNTU1RleHQoKQogCiBib29sIENTU0ltYWdl
U2V0VmFsdWU6OnRyYXZlcnNlU3VicmVzb3VyY2VzKGNvbnN0IFdURjo6RnVuY3Rpb248Ym9vbCAo
Y29uc3QgQ2FjaGVkUmVzb3VyY2UmKT4mIGhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2Nh
Y2hlZEltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGhhbmRsZXIoKm1f
Y2FjaGVkSW1hZ2UpOworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2VWYWx1ZSAmJiBtX3NlbGVj
dGVkSW1hZ2VWYWx1ZS0+dHJhdmVyc2VTdWJyZXNvdXJjZXMoaGFuZGxlcik7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUu
aAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNTMgKzI5LDU0IEBACiAjaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlck9wdGlvbnMuaCIKICNp
bmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FjaGVkSW1hZ2U7CiBjbGFzcyBDYWNoZWRSZXNvdXJj
ZUxvYWRlcjsKK2NsYXNzIENTU0ltYWdlVmFsdWU7CiBjbGFzcyBEb2N1bWVudDsKIAorbmFtZXNw
YWNlIFN0eWxlIHsKK2NsYXNzIEJ1aWxkZXJTdGF0ZTsKK30KKworc3RydWN0IEltYWdlV2l0aFNj
YWxlIHsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOworICAgIGZsb2F0IHNjYWxlRmFjdG9y
IHsgMSB9OworfTsKKwogY2xhc3MgQ1NTSW1hZ2VTZXRWYWx1ZSBmaW5hbCA6IHB1YmxpYyBDU1NW
YWx1ZUxpc3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gY3Jl
YXRlKExvYWRlZEZyb21PcGFxdWVTb3VyY2UgbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ltYWdlU2V0VmFsdWUobG9hZGVkRnJv
bU9wYXF1ZVNvdXJjZSkpOwotICAgIH0KKyAgICBzdGF0aWMgUmVmPENTU0ltYWdlU2V0VmFsdWU+
IGNyZWF0ZSgpOwogICAgIH5DU1NJbWFnZVNldFZhbHVlKCk7CiAKLSAgICBzdGQ6OnBhaXI8Q2Fj
aGVkSW1hZ2UqLCBmbG9hdD4gIGxvYWRCZXN0Rml0SW1hZ2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXIm
LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKLSAgICBDYWNoZWRJbWFnZSogY2FjaGVk
SW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEltYWdlLmdldCgpOyB9CisgICAgSW1hZ2VX
aXRoU2NhbGUgc2VsZWN0QmVzdEZpdEltYWdlKGNvbnN0IERvY3VtZW50Jik7CisgICAgQ2FjaGVk
SW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3Q7CiAKICAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4dCgp
IGNvbnN0OwogCi0gICAgc3RydWN0IEltYWdlV2l0aFNjYWxlIHsKLSAgICAgICAgVVJMIGltYWdl
VVJMOwotICAgICAgICBmbG9hdCBzY2FsZUZhY3RvcjsKLSAgICB9OwotCiAgICAgYm9vbCB0cmF2
ZXJzZVN1YnJlc291cmNlcyhjb25zdCBXVEY6OkZ1bmN0aW9uPGJvb2wgKGNvbnN0IENhY2hlZFJl
c291cmNlJik+JiBoYW5kbGVyKSBjb25zdDsKIAogICAgIHZvaWQgdXBkYXRlRGV2aWNlU2NhbGVG
YWN0b3IoY29uc3QgRG9jdW1lbnQmKTsKIAotICAgIFVSTCBiZXN0SW1hZ2VGb3JTY2FsZUZhY3Rv
clVSTCgpIHsgcmV0dXJuIGJlc3RJbWFnZUZvclNjYWxlRmFjdG9yKCkuaW1hZ2VVUkw7IH0KKyAg
ICBSZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gaW1hZ2VTZXRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VXaXRoU2NhbGUgYmVzdElt
YWdlRm9yU2NhbGVGYWN0b3IoKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDU1NJbWFnZVNl
dFZhbHVlKExvYWRlZEZyb21PcGFxdWVTb3VyY2UpOworICAgIENTU0ltYWdlU2V0VmFsdWUoKTsK
IAogICAgIHZvaWQgZmlsbEltYWdlU2V0KCk7CiAgICAgc3RhdGljIGlubGluZSBib29sIGNvbXBh
cmVCeVNjYWxlRmFjdG9yKEltYWdlV2l0aFNjYWxlIGZpcnN0LCBJbWFnZVdpdGhTY2FsZSBzZWNv
bmQpIHsgcmV0dXJuIGZpcnN0LnNjYWxlRmFjdG9yIDwgc2Vjb25kLnNjYWxlRmFjdG9yOyB9CiAK
LSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRJbWFnZT4gbV9jYWNoZWRJbWFnZTsKKyAg
ICBSZWZQdHI8Q1NTVmFsdWU+IG1fc2VsZWN0ZWRJbWFnZVZhbHVlOwogICAgIGJvb2wgbV9hY2Nl
c3NlZEJlc3RGaXRJbWFnZSB7IGZhbHNlIH07Ci0gICAgZmxvYXQgbV9iZXN0Rml0SW1hZ2VTY2Fs
ZUZhY3RvciB7IDEgfTsKKyAgICBJbWFnZVdpdGhTY2FsZSBtX2Jlc3RGaXRJbWFnZTsKICAgICBm
bG9hdCBtX2RldmljZVNjYWxlRmFjdG9yIHsgMSB9OwotCiAgICAgVmVjdG9yPEltYWdlV2l0aFNj
YWxlPiBtX2ltYWdlc0luU2V0OwotICAgIExvYWRlZEZyb21PcGFxdWVTb3VyY2UgbV9sb2FkZWRG
cm9tT3BhcXVlU291cmNlIHsgTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6Tm8gfTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UHJvcGVydHlQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjE1MSw3ICsyMTUxLDcgQEAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZQogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUN1cnNvcihDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgYm9vbCBpblF1aXJr
c01vZGUpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdDsKLSAgICB3aGlsZSAoUmVm
UHRyPENTU1ZhbHVlPiBpbWFnZSA9IGNvbnN1bWVJbWFnZShyYW5nZSwgY29udGV4dCwgQ29uc3Vt
ZUdlbmVyYXRlZEltYWdlOjpGb3JiaWQpKSB7CisgICAgd2hpbGUgKFJlZlB0cjxDU1NWYWx1ZT4g
aW1hZ2UgPSBjb25zdW1lSW1hZ2UocmFuZ2UsIGNvbnRleHQsIHsgQWxsb3dlZEltYWdlVHlwZXM6
OlVSTEZ1bmN0aW9uLCBBbGxvd2VkSW1hZ2VUeXBlczo6SW1hZ2VTZXQgfSkpIHsKICAgICAgICAg
ZG91YmxlIG51bTsKICAgICAgICAgSW50UG9pbnQgaG90U3BvdCgtMSwgLTEpOwogICAgICAgICBi
b29sIGhvdFNwb3RTcGVjaWZpZWQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9u
IDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3OSwyNCArMTQ3OSwxNiBAQCBzdGF0aWMg
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lR2VuZXJhdGVkCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotc3RhdGljIFN0cmluZ1ZpZXcgY29uc3VtZVVybE9yU3RyaW5nQXNTdHJpbmdWaWV3KENTU1Bh
cnNlclRva2VuUmFuZ2UmIGFyZ3MpCi17Ci0gICAgaWYgKGFyZ3MucGVlaygpLnR5cGUoKSA9PSBT
dHJpbmdUb2tlbikKLSAgICAgICAgcmV0dXJuIGFyZ3MuY29uc3VtZUluY2x1ZGluZ1doaXRlc3Bh
Y2UoKS52YWx1ZSgpOwotICAgIHJldHVybiBjb25zdW1lVXJsQXNTdHJpbmdWaWV3KGFyZ3MpOwot
fQotCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2VTZXQoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCitzdGF0aWMg
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2VTZXQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIE9wdGlvblNldDxBbGxvd2VkSW1h
Z2VUeXBlcz4gYWxsb3dlZEltYWdlVHlwZXMpCiB7CiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBy
YW5nZUNvcHkgPSByYW5nZTsKICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGFyZ3MgPSBjb25zdW1l
RnVuY3Rpb24ocmFuZ2VDb3B5KTsKLSAgICBSZWZQdHI8Q1NTSW1hZ2VTZXRWYWx1ZT4gaW1hZ2VT
ZXQgPSBDU1NJbWFnZVNldFZhbHVlOjpjcmVhdGUoY29udGV4dC5pc0NvbnRlbnRPcGFxdWUgPyBM
b2FkZWRGcm9tT3BhcXVlU291cmNlOjpZZXMgOiBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpObyk7
CisgICAgUmVmUHRyPENTU0ltYWdlU2V0VmFsdWU+IGltYWdlU2V0ID0gQ1NTSW1hZ2VTZXRWYWx1
ZTo6Y3JlYXRlKCk7CiAgICAgZG8gewotICAgICAgICBBdG9tU3RyaW5nIHVybFZhbHVlID0gY29u
c3VtZVVybE9yU3RyaW5nQXNTdHJpbmdWaWV3KGFyZ3MpLnRvQXRvbVN0cmluZygpOwotICAgICAg
ICBpZiAodXJsVmFsdWUuaXNOdWxsKCkpCisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gaW1hZ2Ug
PSBjb25zdW1lSW1hZ2UoYXJncywgY29udGV4dCwgKGFsbG93ZWRJbWFnZVR5cGVzIHwgQWxsb3dl
ZEltYWdlVHlwZXM6OlJhd1N0cmluZ0FzVVJMKSAtIEFsbG93ZWRJbWFnZVR5cGVzOjpJbWFnZVNl
dCk7CisgICAgICAgIGlmICghaW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGltYWdlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKGNv
bXBsZXRlVVJMKGNvbnRleHQsIHVybFZhbHVlKSwgY29udGV4dC5pc0NvbnRlbnRPcGFxdWUgPyBM
b2FkZWRGcm9tT3BhcXVlU291cmNlOjpZZXMgOiBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpObyk7
CiAgICAgICAgIGltYWdlU2V0LT5hcHBlbmQoaW1hZ2UucmVsZWFzZU5vbk51bGwoKSk7CiAKICAg
ICAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gYXJncy5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpOwpAQCAtMTcxMSwxOSArMTcwMywyNSBAQCBSZWZQdHI8Q1NTU2hhZG93VmFs
dWU+IGNvbnN1bWVTaW5nbGVTaGFkCiAgICAgcmV0dXJuIENTU1NoYWRvd1ZhbHVlOjpjcmVhdGUo
V1RGTW92ZShob3Jpem9udGFsT2Zmc2V0KSwgV1RGTW92ZSh2ZXJ0aWNhbE9mZnNldCksIFdURk1v
dmUoYmx1clJhZGl1cyksIFdURk1vdmUoc3ByZWFkRGlzdGFuY2UpLCBXVEZNb3ZlKHN0eWxlKSwg
V1RGTW92ZShjb2xvcikpOwogfQogCi1SZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0LCBDb25zdW1l
R2VuZXJhdGVkSW1hZ2UgZ2VuZXJhdGVkSW1hZ2UpCitSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJ
bWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0
LCBPcHRpb25TZXQ8QWxsb3dlZEltYWdlVHlwZXM+IGFsbG93ZWRJbWFnZVR5cGVzKQogewotICAg
IEF0b21TdHJpbmcgdXJpID0gY29uc3VtZVVybEFzU3RyaW5nVmlldyhyYW5nZSkudG9BdG9tU3Ry
aW5nKCk7Ci0gICAgaWYgKCF1cmkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBDU1NJbWFnZVZh
bHVlOjpjcmVhdGUoY29tcGxldGVVUkwoY29udGV4dCwgdXJpKSwgY29udGV4dC5pc0NvbnRlbnRP
cGFxdWUgPyBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpZZXMgOiBMb2FkZWRGcm9tT3BhcXVlU291
cmNlOjpObyk7CisgICAgaWYgKChyYW5nZS5wZWVrKCkudHlwZSgpID09IFN0cmluZ1Rva2VuKSAm
JiAoYWxsb3dlZEltYWdlVHlwZXMgJiBBbGxvd2VkSW1hZ2VUeXBlczo6UmF3U3RyaW5nQXNVUkwp
KQorICAgICAgICByZXR1cm4gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKGNvbXBsZXRlVVJMKGNvbnRl
eHQsIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFsdWUoKS50b0F0b21TdHJp
bmcoKSksIGNvbnRleHQuaXNDb250ZW50T3BhcXVlID8gTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6
WWVzIDogTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6Tm8pOwogCiAgICAgaWYgKHJhbmdlLnBlZWso
KS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbikgewogICAgICAgICBDU1NWYWx1ZUlEIGlkID0gcmFu
Z2UucGVlaygpLmZ1bmN0aW9uSWQoKTsKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlV2Via2l0
SW1hZ2VTZXQgfHwgaWQgPT0gQ1NTVmFsdWVJbWFnZVNldCkKLSAgICAgICAgICAgIHJldHVybiBj
b25zdW1lSW1hZ2VTZXQocmFuZ2UsIGNvbnRleHQpOwotICAgICAgICBpZiAoZ2VuZXJhdGVkSW1h
Z2UgPT0gQ29uc3VtZUdlbmVyYXRlZEltYWdlOjpBbGxvdyAmJiBpc0dlbmVyYXRlZEltYWdlKGlk
KSkKKyAgICAgICAgaWYgKChhbGxvd2VkSW1hZ2VUeXBlcyAmIEFsbG93ZWRJbWFnZVR5cGVzOjpJ
bWFnZVNldCkgJiYgKGlkID09IENTU1ZhbHVlV2Via2l0SW1hZ2VTZXQgfHwgaWQgPT0gQ1NTVmFs
dWVJbWFnZVNldCkpCisgICAgICAgICAgICByZXR1cm4gY29uc3VtZUltYWdlU2V0KHJhbmdlLCBj
b250ZXh0LCBhbGxvd2VkSW1hZ2VUeXBlcyk7CisgICAgICAgIGlmICgoYWxsb3dlZEltYWdlVHlw
ZXMgJiBBbGxvd2VkSW1hZ2VUeXBlczo6R2VuZXJhdGVkSW1hZ2UpICYmIGlzR2VuZXJhdGVkSW1h
Z2UoaWQpKQogICAgICAgICAgICAgcmV0dXJuIGNvbnN1bWVHZW5lcmF0ZWRJbWFnZShyYW5nZSwg
Y29udGV4dCk7CiAgICAgfQorCisgICAgaWYgKGFsbG93ZWRJbWFnZVR5cGVzICYgQWxsb3dlZElt
YWdlVHlwZXM6OlVSTEZ1bmN0aW9uKSB7CisgICAgICAgIGF1dG8gdXJpID0gY29uc3VtZVVybEFz
U3RyaW5nVmlldyhyYW5nZSk7CisgICAgICAgIGlmICghdXJpLmlzTnVsbCgpKQorICAgICAgICAg
ICAgcmV0dXJuIENTU0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTChjb250ZXh0LCB1cmku
dG9BdG9tU3RyaW5nKCkpLCBjb250ZXh0LmlzQ29udGVudE9wYXF1ZSA/IExvYWRlZEZyb21PcGFx
dWVTb3VyY2U6OlllcyA6IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6Ok5vKTsKKyAgICB9CisKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCShyZXZpc2lvbiAyNTQ4MDgpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiQ1NTU2hhZG93VmFsdWUu
aCIKICNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKICNpbmNsdWRlICJMZW5ndGguaCIgLy8gRm9y
IFZhbHVlUmFuZ2UKKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtODksMTIgKzkwLDE1IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZVBvc2l0aW8KIGJvb2wgY29uc3VtZVBvc2l0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmLCBD
U1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBQb3NpdGlvblN5bnRheCwgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiYgcmVzdWx0WCwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgcmVzdWx0
WSk7CiBib29sIGNvbnN1bWVPbmVPclR3b1ZhbHVlZFBvc2l0aW9uKENTU1BhcnNlclRva2VuUmFu
Z2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+JiByZXN1bHRYLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiByZXN1bHRZKTsKIAotZW51
bSBjbGFzcyBDb25zdW1lR2VuZXJhdGVkSW1hZ2UgewotICAgIEFsbG93LAotICAgIEZvcmJpZAor
ZW51bSBjbGFzcyBBbGxvd2VkSW1hZ2VUeXBlcyA6IHVpbnQ4X3QgeworICAgIFVSTEZ1bmN0aW9u
ID0gMSA8PCAwLAorICAgIFJhd1N0cmluZ0FzVVJMID0gMSA8PCAxLAorICAgIEltYWdlU2V0ID0g
MSA8PCAyLAorICAgIEdlbmVyYXRlZEltYWdlID0gMSA8PCAzCiB9OwogCi1SZWZQdHI8Q1NTVmFs
dWU+IGNvbnN1bWVJbWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyQ29udGV4dCwg
Q29uc3VtZUdlbmVyYXRlZEltYWdlID0gQ29uc3VtZUdlbmVyYXRlZEltYWdlOjpBbGxvdyk7CitS
ZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFy
c2VyQ29udGV4dCwgT3B0aW9uU2V0PEFsbG93ZWRJbWFnZVR5cGVzPiA9IHsgQWxsb3dlZEltYWdl
VHlwZXM6OlVSTEZ1bmN0aW9uLCBBbGxvd2VkSW1hZ2VUeXBlczo6SW1hZ2VTZXQsIEFsbG93ZWRJ
bWFnZVR5cGVzOjpHZW5lcmF0ZWRJbWFnZSB9KTsKKwogUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1l
SW1hZ2VPck5vbmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlckNvbnRleHQpOwogCiBl
bnVtIGNsYXNzIEFsbG93ZWRGaWx0ZXJGdW5jdGlvbnMgewpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAkocmV2
aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVy
dHlBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMsNiArMzMzLDEyIEBAIHN0YXRp
YyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRnUKICAgICBpZiAoIWZyb20gfHwgIXRv
KQogICAgICAgICByZXR1cm4gdG87CiAKKyAgICBmcm9tID0gZnJvbS0+c2VsZWN0ZWRJbWFnZSgp
OworICAgIHRvID0gdG8tPnNlbGVjdGVkSW1hZ2UoKTsKKworICAgIGlmICghZnJvbSB8fCAhdG8p
CisgICAgICAgIHJldHVybiB0bzsgICAgCisKICAgICAvLyBBbmltYXRpb24gYmV0d2VlbiB0d28g
Z2VuZXJhdGVkIGltYWdlcy4gQ3Jvc3MgZmFkZSBmb3IgYWxsIG90aGVyIGNhc2VzLgogICAgIGlm
IChpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVHZW5lcmF0ZWRJbWFn
ZT4oKnRvKSkgewogICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlJiBmcm9tR2VuZXJhdGVk
ID0gZG93bmNhc3Q8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pLmltYWdlVmFsdWUoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYyLDcgKzk2Miw3IEBAIHZv
aWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWUKIAogICAgICAgICAgICAgYXV0
byBkcmF3UmVzdWx0ID0gY29udGV4dC5kcmF3VGlsZWRJbWFnZSgqaW1hZ2UsIGdlb21ldHJ5LmRl
c3RSZWN0KCksIHRvTGF5b3V0UG9pbnQoZ2VvbWV0cnkucmVsYXRpdmVQaGFzZSgpKSwgZ2VvbWV0
cnkudGlsZVNpemUoKSwgZ2VvbWV0cnkuc3BhY2VTaXplKCksIG9wdGlvbnMpOwogICAgICAgICAg
ICAgaWYgKGRyYXdSZXN1bHQgPT0gSW1hZ2VEcmF3UmVzdWx0OjpEaWRSZXF1ZXN0RGVjb2Rpbmcp
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoYmdJbWFnZS0+aXNDYWNoZWRJbWFnZSgpKTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoYmdJbWFnZS0+aGFzQ2FjaGVkSW1hZ2UoKSk7CiAgICAgICAg
ICAgICAgICAgYmdJbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+YWRkQ2xpZW50V2FpdGluZ0ZvckFzeW5j
RGVjb2RpbmcoKnRoaXMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlU3R5
bGVJbWFnZS5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDcgKzQ0LDcgQEAgUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2U6OlJlbmRlckltYQogCiB2
b2lkIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlOjppbml0aWFsaXplKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyKQogewotICAgIFJlbmRlckltYWdlUmVzb3VyY2U6OmluaXRpYWxpemUocmVu
ZGVyZXIsIG1fc3R5bGVJbWFnZS0+aXNDYWNoZWRJbWFnZSgpID8gbV9zdHlsZUltYWdlLmdldCgp
LmNhY2hlZEltYWdlKCkgOiBudWxscHRyKTsKKyAgICBSZW5kZXJJbWFnZVJlc291cmNlOjppbml0
aWFsaXplKHJlbmRlcmVyLCBtX3N0eWxlSW1hZ2UtPmhhc0NhY2hlZEltYWdlKCkgPyBtX3N0eWxl
SW1hZ2UuZ2V0KCkuY2FjaGVkSW1hZ2UoKSA6IG51bGxwdHIpOwogICAgIG1fc3R5bGVJbWFnZS0+
YWRkQ2xpZW50KHRoaXMtPnJlbmRlcmVyKCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24gMjU0ODA4KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxMDcsNyArMjEwNyw3IEBAIHN0YXRpYyBib29sIGNhbkRpcmVjdGx5Q29t
cG9zaXRlQmFja2dyb3UKIAogICAgIC8vIEZJWE1FOiBzdXBwb3J0IGdyYWRpZW50cyB3aXRoIGlz
R2VuZXJhdGVkSW1hZ2UuCiAgICAgYXV0byogc3R5bGVJbWFnZSA9IGZpbGxMYXllci5pbWFnZSgp
OwotICAgIGlmICghc3R5bGVJbWFnZS0+aXNDYWNoZWRJbWFnZSgpKQorICAgIGlmICghc3R5bGVJ
bWFnZS0+aGFzQ2FjaGVkSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0
byogaW1hZ2UgPSBzdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZSgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYXBlVmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmNwcAkocmV2aXNpb24g
MjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYXBlVmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIGJvb2wgU2hhcGVWYWx1ZTo6aXNJbWFn
ZVZhbGlkKCkgY29uc3QKIHsKICAgICBpZiAoIW1faW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAobV9pbWFnZS0+aXNDYWNoZWRJbWFnZSgpKSB7CisgICAgaWYgKG1faW1hZ2Ut
Pmhhc0NhY2hlZEltYWdlKCkpIHsKICAgICAgICAgYXV0byogY2FjaGVkSW1hZ2UgPSBtX2ltYWdl
LT5jYWNoZWRJbWFnZSgpOwogICAgICAgICByZXR1cm4gY2FjaGVkSW1hZ2UgJiYgY2FjaGVkSW1h
Z2UtPmhhc0ltYWdlKCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmNwcAkocmV2aXNpb24gMjU0ODA4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCw4ICsyNCw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgogCi0jaW5jbHVkZSAiQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5o
IgotI2luY2x1ZGUgIkNTU0ltYWdlU2V0VmFsdWUuaCIKICNpbmNsdWRlICJDU1NJbWFnZVZhbHVl
LmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50Lmgi
CkBAIC0zMywxOSArMzEsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TdHlsZUNhY2hl
ZEltYWdlOjpTdHlsZUNhY2hlZEltYWdlKENTU1ZhbHVlJiBjc3NWYWx1ZSkKK1N0eWxlQ2FjaGVk
SW1hZ2U6OlN0eWxlQ2FjaGVkSW1hZ2UoQ1NTSW1hZ2VWYWx1ZSYgY3NzVmFsdWUsIGZsb2F0IHNj
YWxlRmFjdG9yKQogICAgIDogbV9jc3NWYWx1ZShjc3NWYWx1ZSkKKyAgICAsIG1fc2NhbGVGYWN0
b3Ioc2NhbGVGYWN0b3IpCiB7Ci0gICAgQVNTRVJUKGlzPENTU0ltYWdlVmFsdWU+KG1fY3NzVmFs
dWUpIHx8IGlzPENTU0ltYWdlU2V0VmFsdWU+KG1fY3NzVmFsdWUpIHx8IGlzPENTU0N1cnNvcklt
YWdlVmFsdWU+KG1fY3NzVmFsdWUpKTsKLQogICAgIG1faXNDYWNoZWRJbWFnZSA9IHRydWU7Ci0K
LSAgICAvLyBDU1NJbWFnZVZhbHVlIGRvZXNuJ3QgZ2V0IGludmFsaWRhdGVkIHNvIHdlIGNhbiBn
cmFiIHRoZSBDYWNoZWRJbWFnZSBpbW1lZGlhdGVseSBpZiBpdCBleGlzdHMuCi0gICAgaWYgKGlz
PENTU0ltYWdlVmFsdWU+KG1fY3NzVmFsdWUpKSB7Ci0gICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBk
b3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX2Nzc1ZhbHVlLmdldCgpKS5jYWNoZWRJbWFnZSgpOwot
ICAgICAgICBpZiAobV9jYWNoZWRJbWFnZSkKLSAgICAgICAgICAgIG1faXNQZW5kaW5nID0gZmFs
c2U7Ci0gICAgfQorICAgIG1fY2FjaGVkSW1hZ2UgPSBtX2Nzc1ZhbHVlLT5jYWNoZWRJbWFnZSgp
OworICAgIGlmIChtX2NhY2hlZEltYWdlKQorICAgICAgICBtX2lzUGVuZGluZyA9IGZhbHNlOwog
fQogCiBTdHlsZUNhY2hlZEltYWdlOjp+U3R5bGVDYWNoZWRJbWFnZSgpID0gZGVmYXVsdDsKQEAg
LTY4LDQxICs2MSwxNCBAQCBib29sIFN0eWxlQ2FjaGVkSW1hZ2U6Om9wZXJhdG9yPT0oY29uc3Qg
CiAKIFVSTCBTdHlsZUNhY2hlZEltYWdlOjppbWFnZVVSTCgpCiB7Ci0gICAgaWYgKGlzPENTU0lt
YWdlVmFsdWU+KG1fY3NzVmFsdWUpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VW
YWx1ZT4obV9jc3NWYWx1ZS5nZXQoKSkudXJsKCk7Ci0KLSAgICBpZiAoaXM8Q1NTSW1hZ2VTZXRW
YWx1ZT4obV9jc3NWYWx1ZSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVNldFZh
bHVlPihtX2Nzc1ZhbHVlLmdldCgpKS5iZXN0SW1hZ2VGb3JTY2FsZUZhY3RvclVSTCgpOwotCi0g
ICAgaWYgKGlzPENTU0N1cnNvckltYWdlVmFsdWU+KG1fY3NzVmFsdWUuZ2V0KCkpKQotICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZS5nZXQoKSku
aW1hZ2VVUkwoKTsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07
CisgICAgcmV0dXJuIG1fY3NzVmFsdWUtPnVybCgpOwogfQogCiB2b2lkIFN0eWxlQ2FjaGVkSW1h
Z2U6OmxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2Fk
ZXJPcHRpb25zJiBvcHRpb25zKQogewogICAgIEFTU0VSVChtX2lzUGVuZGluZyk7CiAgICAgbV9p
c1BlbmRpbmcgPSBmYWxzZTsKLQotICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPihtX2Nzc1ZhbHVl
KSkgewotICAgICAgICBhdXRvJiBpbWFnZVZhbHVlID0gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4o
bV9jc3NWYWx1ZS5nZXQoKSk7Ci0gICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBpbWFnZVZhbHVlLmxv
YWRJbWFnZShsb2FkZXIsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KG1fY3NzVmFsdWUpKSB7Ci0gICAgICAgIGF1dG8mIGlt
YWdlU2V0VmFsdWUgPSBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPihtX2Nzc1ZhbHVlLmdldCgp
KTsKLSAgICAgICAgc3RkOjp0aWUobV9jYWNoZWRJbWFnZSwgbV9zY2FsZUZhY3RvcikgPSBpbWFn
ZVNldFZhbHVlLmxvYWRCZXN0Rml0SW1hZ2UobG9hZGVyLCBvcHRpb25zKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChpczxDU1NDdXJzb3JJbWFnZVZhbHVlPihtX2Nzc1ZhbHVl
LmdldCgpKSkgewotICAgICAgICBhdXRvJiBjdXJzb3JWYWx1ZSA9IGRvd25jYXN0PENTU0N1cnNv
ckltYWdlVmFsdWU+KG1fY3NzVmFsdWUuZ2V0KCkpOwotICAgICAgICBzdGQ6OnRpZShtX2NhY2hl
ZEltYWdlLCBtX3NjYWxlRmFjdG9yKSA9IGN1cnNvclZhbHVlLmxvYWRJbWFnZShsb2FkZXIsIG9w
dGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG1fY2FjaGVkSW1hZ2UgPSBtX2Nz
c1ZhbHVlLT5sb2FkSW1hZ2UobG9hZGVyLCBvcHRpb25zKTsKIH0KIAogQ2FjaGVkSW1hZ2UqIFN0
eWxlQ2FjaGVkSW1hZ2U6OmNhY2hlZEltYWdlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuaAkocmV2aXNpb24gMjU0
ODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIENTU1ZhbHVlOworY2xhc3MgQ1NTSW1hZ2VWYWx1ZTsKIGNsYXNzIENhY2hlZElt
YWdlOwogY2xhc3MgRG9jdW1lbnQ7CiAKIGNsYXNzIFN0eWxlQ2FjaGVkSW1hZ2UgZmluYWwgOiBw
dWJsaWMgU3R5bGVJbWFnZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxTdHlsZUNhY2hlZEltYWdlPiBjcmVhdGUoQ1NTVmFsdWUmIGNzc1Zh
bHVlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFN0eWxlQ2FjaGVkSW1hZ2UoY3NzVmFsdWUpKTsg
fQorICAgIHN0YXRpYyBSZWY8U3R5bGVDYWNoZWRJbWFnZT4gY3JlYXRlKENTU0ltYWdlVmFsdWUm
IGNzc1ZhbHVlLCBmbG9hdCBzY2FsZUZhY3RvciA9IDEpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U3R5bGVDYWNoZWRJbWFnZShjc3NWYWx1ZSwgc2NhbGVGYWN0b3IpKTsgfQogICAgIHZpcnR1YWwg
flN0eWxlQ2FjaGVkSW1hZ2UoKTsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZUlt
YWdlJiBvdGhlcikgY29uc3QgZmluYWw7CkBAIC02NCwxMCArNjUsMTAgQEAgcHVibGljOgogICAg
IGJvb2wga25vd25Ub0JlT3BhcXVlKGNvbnN0IFJlbmRlckVsZW1lbnQqKSBjb25zdCBmaW5hbDsK
IAogcHJpdmF0ZToKLSAgICBTdHlsZUNhY2hlZEltYWdlKENTU1ZhbHVlJik7CisgICAgU3R5bGVD
YWNoZWRJbWFnZShDU1NJbWFnZVZhbHVlJiwgZmxvYXQpOwogICAgIFVSTCBpbWFnZVVSTCgpOwog
Ci0gICAgUmVmPENTU1ZhbHVlPiBtX2Nzc1ZhbHVlOworICAgIFJlZjxDU1NJbWFnZVZhbHVlPiBt
X2Nzc1ZhbHVlOwogICAgIGJvb2wgbV9pc1BlbmRpbmcgeyB0cnVlIH07CiAgICAgbXV0YWJsZSBm
bG9hdCBtX3NjYWxlRmFjdG9yIHsgMSB9OwogICAgIG11dGFibGUgQ2FjaGVkUmVzb3VyY2VIYW5k
bGU8Q2FjaGVkSW1hZ2U+IG1fY2FjaGVkSW1hZ2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1cnNvckltYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAw
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUtMjAw
OCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyAgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU3R5bGVDdXJzb3JJbWFnZS5oIgorCisjaW5jbHVkZSAiQ1NTQ3Vy
c29ySW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltYWdlU2V0VmFsdWUuaCIKKyNpbmNsdWRl
ICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIlJlbmRl
ckVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWY8U3R5bGVDdXJzb3JJbWFn
ZT4gU3R5bGVDdXJzb3JJbWFnZTo6Y3JlYXRlKENTU0N1cnNvckltYWdlVmFsdWUmIGNzc1ZhbHVl
KQoreyAKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHlsZUN1cnNvckltYWdlKGNzc1ZhbHVl
KSk7IAorfQorCitib29sIFN0eWxlQ3Vyc29ySW1hZ2U6Om9wZXJhdG9yPT0oY29uc3QgU3R5bGVJ
bWFnZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzPFN0eWxlQ3Vyc29ySW1hZ2U+KG90
aGVyKSAmJiBlcXVhbHMoZG93bmNhc3Q8U3R5bGVDdXJzb3JJbWFnZT4ob3RoZXIpKTsKK30KKwor
UmVmPENTU1ZhbHVlPiBTdHlsZUN1cnNvckltYWdlOjpjc3NWYWx1ZSgpIGNvbnN0Cit7IAorICAg
IHJldHVybiBtX2Nzc1ZhbHVlLmNvcHlSZWYoKTsgCit9CisKK1N0eWxlQ3Vyc29ySW1hZ2U6OlN0
eWxlQ3Vyc29ySW1hZ2UoQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSYgY3NzVmFsdWUpCisgICAgOiBtX2Nz
c1ZhbHVlKGNzc1ZhbHVlKQoreworICAgIG1faXNDdXJzb3JJbWFnZSA9IHRydWU7Cit9CisKK1N0
eWxlQ3Vyc29ySW1hZ2U6On5TdHlsZUN1cnNvckltYWdlKCkgPSBkZWZhdWx0OworCitJbWFnZVdp
dGhTY2FsZSBTdHlsZUN1cnNvckltYWdlOjpzZWxlY3RCZXN0Rml0SW1hZ2UoY29uc3QgRG9jdW1l
bnQmIGRvY3VtZW50KSBjb25zdAoreworICAgIHJldHVybiBtX2Nzc1ZhbHVlLT5zZWxlY3RCZXN0
Rml0SW1hZ2UoZG9jdW1lbnQpOworfQorCit2b2lkIFN0eWxlQ3Vyc29ySW1hZ2U6OnNldENvbnRh
aW5lckNvbnRleHRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29u
c3QgRmxvYXRTaXplJiBjb250YWluZXJTaXplLCBmbG9hdCBjb250YWluZXJab29tKQoreworICAg
IGlmICghaGFzQ2FjaGVkSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhY2hlZEltYWdl
KCktPnNldENvbnRhaW5lckNvbnRleHRGb3JDbGllbnQocmVuZGVyZXIsIExheW91dFNpemUoY29u
dGFpbmVyU2l6ZSksIGNvbnRhaW5lclpvb20sIG1fY3NzVmFsdWUtPmltYWdlVVJMKCkpOworfQor
Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
U3R5bGVDdXJzb3JJbWFnZS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMg
LTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1cnNvckltYWdlLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ3Vyc29y
SW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIw
MDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIw
MDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDUtMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyAgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlN0eWxlTXVsdGlJbWFnZS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIENTU0N1cnNvckltYWdlVmFsdWU7CisKK3N0cnVjdCBJbWFnZVdpdGhT
Y2FsZTsKKworY2xhc3MgU3R5bGVDdXJzb3JJbWFnZSBmaW5hbCA6IHB1YmxpYyBTdHlsZU11bHRp
SW1hZ2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRp
YyBSZWY8U3R5bGVDdXJzb3JJbWFnZT4gY3JlYXRlKENTU0N1cnNvckltYWdlVmFsdWUmKTsKKyAg
ICB2aXJ0dWFsIH5TdHlsZUN1cnNvckltYWdlKCk7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFN0eWxlSW1hZ2UmIG90aGVyKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNldENvbnRh
aW5lckNvbnRleHRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29u
c3QgRmxvYXRTaXplJiBjb250YWluZXJTaXplLCBmbG9hdCBjb250YWluZXJab29tKSBmaW5hbDsK
KyAgICBSZWY8Q1NTVmFsdWU+IGNzc1ZhbHVlKCkgY29uc3QgZmluYWw7CisgICAgSW1hZ2VXaXRo
U2NhbGUgc2VsZWN0QmVzdEZpdEltYWdlKGNvbnN0IERvY3VtZW50JikgY29uc3QgZmluYWw7CisK
KyAgICBleHBsaWNpdCBTdHlsZUN1cnNvckltYWdlKENTU0N1cnNvckltYWdlVmFsdWUmKTsKKyAg
ICBSZWY8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4gbV9jc3NWYWx1ZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19TVFlMRV9JTUFHRShTdHlsZUN1
cnNvckltYWdlLCBpc0N1cnNvckltYWdlKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuaApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1h
Z2UuaAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTggKzY3LDI4IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGZsb2F0IGltYWdlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiAxOyB9
CiAgICAgdmlydHVhbCBib29sIGtub3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJFbGVtZW50Kikg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3Qg
eyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgU3R5bGVJbWFnZSogc2VsZWN0ZWRJbWFnZSgpIHsg
cmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFN0eWxlSW1hZ2UqIHNlbGVjdGVkSW1h
Z2UoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXND
YWNoZWRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDYWNoZWRJbWFnZTsgfQogICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCBpc0dlbmVyYXRlZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pc0dlbmVy
YXRlZEltYWdlOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ3Vyc29ySW1hZ2UoKSBjb25z
dCB7IHJldHVybiBtX2lzQ3Vyc29ySW1hZ2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNJ
bWFnZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJbWFnZVNldDsgfQorCisgICAgYm9vbCBoYXND
YWNoZWRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDYWNoZWRJbWFnZSB8fCBzZWxlY3RlZElt
YWdlKCktPmlzQ2FjaGVkSW1hZ2UoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgU3R5bGVJbWFnZSgp
CiAgICAgICAgIDogbV9pc0NhY2hlZEltYWdlKGZhbHNlKQogICAgICAgICAsIG1faXNHZW5lcmF0
ZWRJbWFnZShmYWxzZSkKKyAgICAgICAgLCBtX2lzSW1hZ2VTZXQoZmFsc2UpCisgICAgICAgICwg
bV9pc0N1cnNvckltYWdlKGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgYm9vbCBtX2lzQ2FjaGVk
SW1hZ2UgOiAxOwogICAgIGJvb2wgbV9pc0dlbmVyYXRlZEltYWdlIDogMTsKKyAgICBib29sIG1f
aXNJbWFnZVNldCA6IDE7CisgICAgYm9vbCBtX2lzQ3Vyc29ySW1hZ2UgOiAxOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlSW1hZ2VTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZUltYWdlU2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0Br
ZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUu
b3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LTIwMDgsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIE5vYW0gUm9zZW50aGFs
IChub2FtQHdlYmtpdC5vcmcpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3R5
bGVJbWFnZVNldC5oIgorCisjaW5jbHVkZSAiQ1NTSW1hZ2VTZXRWYWx1ZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1JlZjxTdHlsZUltYWdlU2V0PiBTdHlsZUltYWdlU2V0OjpjcmVhdGUo
Q1NTSW1hZ2VTZXRWYWx1ZSYgY3NzVmFsdWUpCit7IAorICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFN0eWxlSW1hZ2VTZXQoY3NzVmFsdWUpKTsKK30KKworU3R5bGVJbWFnZVNldDo6U3R5bGVJbWFn
ZVNldChDU1NJbWFnZVNldFZhbHVlJiBjc3NWYWx1ZSkKKyAgICA6IG1fY3NzVmFsdWUoY3NzVmFs
dWUpCit7CisgICAgbV9pc0ltYWdlU2V0ID0gdHJ1ZTsKK30KKworYm9vbCBTdHlsZUltYWdlU2V0
OjpvcGVyYXRvcj09KGNvbnN0IFN0eWxlSW1hZ2UmIG90aGVyKSBjb25zdAoreworICAgIHJldHVy
biBpczxTdHlsZUltYWdlU2V0PihvdGhlcikgJiYgZXF1YWxzKGRvd25jYXN0PFN0eWxlSW1hZ2VT
ZXQ+KG90aGVyKSk7Cit9CisKK1N0eWxlSW1hZ2VTZXQ6On5TdHlsZUltYWdlU2V0KCkgPSBkZWZh
dWx0OworCitSZWY8Q1NTVmFsdWU+IFN0eWxlSW1hZ2VTZXQ6OmNzc1ZhbHVlKCkgY29uc3QKK3sg
CisgICAgcmV0dXJuIG1fY3NzVmFsdWUuY29weVJlZigpOyAKK30KKworSW1hZ2VXaXRoU2NhbGUg
U3R5bGVJbWFnZVNldDo6c2VsZWN0QmVzdEZpdEltYWdlKGNvbnN0IERvY3VtZW50JiBkb2N1bWVu
dCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jc3NWYWx1ZS0+c2VsZWN0QmVzdEZpdEltYWdlKGRv
Y3VtZW50KTsKK30KKworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVj
dXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNldC5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUlt
YWdlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyogQ29weXJpZ2h0
IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisqICAgICAgICAgICAoQykgMjAw
MCBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyogICAgICAgICAgIChDKSAyMDAw
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiBD
b3B5cmlnaHQgKEMpIDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyoKKyog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKgorKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisqCisqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqCisqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlN0eWxlTXVsdGlJbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENTU0ltYWdlU2V0VmFsdWU7CisKK2NsYXNzIFN0eWxlSW1hZ2VTZXQgZmluYWwgOiBwdWJsaWMg
U3R5bGVNdWx0aUltYWdlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPFN0eWxlSW1hZ2VTZXQ+IGNyZWF0ZShDU1NJbWFnZVNldFZhbHVlJik7
CisgICAgdmlydHVhbCB+U3R5bGVJbWFnZVNldCgpOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBTdHlsZUltYWdlJiBvdGhlcikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgU3R5
bGVJbWFnZVNldChDU1NJbWFnZVNldFZhbHVlJik7CisgICAgUmVmPENTU1ZhbHVlPiBjc3NWYWx1
ZSgpIGNvbnN0IGZpbmFsOworICAgIEltYWdlV2l0aFNjYWxlIHNlbGVjdEJlc3RGaXRJbWFnZShj
b25zdCBEb2N1bWVudCYpIGNvbnN0IGZpbmFsOworICAgIFJlZjxDU1NJbWFnZVNldFZhbHVlPiBt
X2Nzc1ZhbHVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX1NUWUxFX0lNQUdFKFN0eWxlSW1hZ2VTZXQsIGlzSW1hZ2VTZXQpCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNl
dC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDUtMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTdHlsZU11bHRpSW1hZ2UuaCIKKworI2luY2x1ZGUgIkNT
U0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NJbWFnZVNldFZhbHVlLmgiCisj
aW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2UuaCIK
KyNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworU3R5bGVNdWx0aUltYWdlOjpTdHlsZU11bHRpSW1hZ2UoKSA9IGRlZmF1bHQ7CisKK1N0eWxl
TXVsdGlJbWFnZTo6flN0eWxlTXVsdGlJbWFnZSgpID0gZGVmYXVsdDsKKworYm9vbCBTdHlsZU11
bHRpSW1hZ2U6OmVxdWFscyhjb25zdCBTdHlsZU11bHRpSW1hZ2UmIG90aGVyKSBjb25zdAorewor
ICAgIGF1dG8mIG90aGVyQ2FjaGVkID0gZG93bmNhc3Q8U3R5bGVNdWx0aUltYWdlPihvdGhlcik7
CisgICAgcmV0dXJuICghbV9pc1BlbmRpbmcgJiYgIW90aGVyQ2FjaGVkLm1faXNQZW5kaW5nICYm
IG1fc2VsZWN0ZWRJbWFnZS5nZXQoKSA9PSBvdGhlckNhY2hlZC5tX3NlbGVjdGVkSW1hZ2UuZ2V0
KCkpOworfQorCit2b2lkIFN0eWxlTXVsdGlJbWFnZTo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRl
ciYgbG9hZGVyLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAg
QVNTRVJUKG1faXNQZW5kaW5nKTsKKyAgICBBU1NFUlQobG9hZGVyLmRvY3VtZW50KCkpOworCisg
ICAgbV9pc1BlbmRpbmcgPSBmYWxzZTsKKyAgICBhdXRvIGltYWdlV2l0aFNjYWxlID0gc2VsZWN0
QmVzdEZpdEltYWdlKCpsb2FkZXIuZG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKGlzPENTU0ltYWdl
VmFsdWU+KGltYWdlV2l0aFNjYWxlLnZhbHVlKSB8fCBpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVl
PihpbWFnZVdpdGhTY2FsZS52YWx1ZSkpOworCisgICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9y
VmFsdWU+KGltYWdlV2l0aFNjYWxlLnZhbHVlKSkgeworICAgICAgICBtX3NlbGVjdGVkSW1hZ2Ug
PSBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZT4oKmltYWdlV2l0aFNjYWxlLnZhbHVlLmdldCgpKSk7CisgICAgICAgIG1fc2VsZWN0ZWRJ
bWFnZS0+bG9hZChsb2FkZXIsIG9wdGlvbnMpOworICAgIH0KKyAgICAKKyAgICBpZiAoaXM8Q1NT
SW1hZ2VWYWx1ZT4oaW1hZ2VXaXRoU2NhbGUudmFsdWUpKSB7CisgICAgICAgIG1fc2VsZWN0ZWRJ
bWFnZSA9IFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZVZhbHVlPigq
aW1hZ2VXaXRoU2NhbGUudmFsdWUuZ2V0KCkpLCBpbWFnZVdpdGhTY2FsZS5zY2FsZUZhY3Rvcik7
CisgICAgICAgIGlmIChtX3NlbGVjdGVkSW1hZ2UtPmlzUGVuZGluZygpKQorICAgICAgICAgICAg
bV9zZWxlY3RlZEltYWdlLT5sb2FkKGxvYWRlciwgb3B0aW9ucyk7CisgICAgfQorfQorCitDYWNo
ZWRJbWFnZSogU3R5bGVNdWx0aUltYWdlOjpjYWNoZWRJbWFnZSgpIGNvbnN0Cit7CisgICAgaWYg
KCFtX3NlbGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBt
X3NlbGVjdGVkSW1hZ2UtPmNhY2hlZEltYWdlKCk7Cit9CisKK1dyYXBwZWRJbWFnZVB0ciBTdHls
ZU11bHRpSW1hZ2U6OmRhdGEoKSBjb25zdAoreworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlLT5kYXRh
KCk7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjpjYW5SZW5kZXIoY29uc3QgUmVuZGVyRWxl
bWVudCogcmVuZGVyZXIsIGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c2VsZWN0ZWRJbWFnZSAmJiBtX3NlbGVjdGVkSW1hZ2UtPmNhblJlbmRlcihyZW5kZXJlciwgbXVs
dGlwbGllcik7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjppc1BlbmRpbmcoKSBjb25zdAor
eworICAgIHJldHVybiBtX2lzUGVuZGluZzsKK30KKworYm9vbCBTdHlsZU11bHRpSW1hZ2U6Omlz
TG9hZGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlICYmIG1fc2VsZWN0
ZWRJbWFnZS0+aXNMb2FkZWQoKTsKK30KKworYm9vbCBTdHlsZU11bHRpSW1hZ2U6OmVycm9yT2Nj
dXJyZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UgJiYgbV9zZWxlY3Rl
ZEltYWdlLT5lcnJvck9jY3VycmVkKCk7Cit9CisKK0Zsb2F0U2l6ZSBTdHlsZU11bHRpSW1hZ2U6
OmltYWdlU2l6ZShjb25zdCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgZmxvYXQgbXVsdGlwbGll
cikgY29uc3QKK3sKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlLT5pbWFnZVNpemUocmVuZGVyZXIsIG11bHRp
cGxpZXIpOworfQorCitib29sIFN0eWxlTXVsdGlJbWFnZTo6aW1hZ2VIYXNSZWxhdGl2ZVdpZHRo
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlICYmIG1fc2VsZWN0ZWRJbWFn
ZS0+aW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCk7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjpp
bWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWxlY3RlZElt
YWdlICYmIG1fc2VsZWN0ZWRJbWFnZS0+aW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpOworfQorCit2
b2lkIFN0eWxlTXVsdGlJbWFnZTo6Y29tcHV0ZUludHJpbnNpY0RpbWVuc2lvbnMoY29uc3QgUmVu
ZGVyRWxlbWVudCogZWxlbWVudCwgTGVuZ3RoJiBpbnRyaW5zaWNXaWR0aCwgTGVuZ3RoJiBpbnRy
aW5zaWNIZWlnaHQsIEZsb2F0U2l6ZSYgaW50cmluc2ljUmF0aW8pCit7CisgICAgaWYgKCFtX3Nl
bGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBtX3NlbGVjdGVkSW1hZ2UtPmNvbXB1
dGVJbnRyaW5zaWNEaW1lbnNpb25zKGVsZW1lbnQsIGludHJpbnNpY1dpZHRoLCBpbnRyaW5zaWNI
ZWlnaHQsIGludHJpbnNpY1JhdGlvKTsKK30KKworYm9vbCBTdHlsZU11bHRpSW1hZ2U6OnVzZXNJ
bWFnZUNvbnRhaW5lclNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2Ug
JiYgbV9zZWxlY3RlZEltYWdlLT51c2VzSW1hZ2VDb250YWluZXJTaXplKCk7Cit9CisKK3ZvaWQg
U3R5bGVNdWx0aUltYWdlOjpzZXRDb250YWluZXJDb250ZXh0Rm9yUmVuZGVyZXIoY29uc3QgUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6ZSYgY29udGFpbmVyU2l6ZSwgZmxv
YXQgY29udGFpbmVyWm9vbSkKK3sKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fc2VsZWN0ZWRJbWFnZS0+c2V0Q29udGFpbmVyQ29udGV4dEZvclJlbmRl
cmVyKHJlbmRlcmVyLCBjb250YWluZXJTaXplLCBjb250YWluZXJab29tKTsKK30KKwordm9pZCBT
dHlsZU11bHRpSW1hZ2U6OmFkZENsaWVudChSZW5kZXJFbGVtZW50KiByZW5kZXJlcikKK3sKKyAg
ICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2VsZWN0ZWRJ
bWFnZS0+YWRkQ2xpZW50KHJlbmRlcmVyKTsKK30KKwordm9pZCBTdHlsZU11bHRpSW1hZ2U6OnJl
bW92ZUNsaWVudChSZW5kZXJFbGVtZW50KiByZW5kZXJlcikKK3sKKyAgICBpZiAoIW1fc2VsZWN0
ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2VsZWN0ZWRJbWFnZS0+cmVtb3ZlQ2xp
ZW50KHJlbmRlcmVyKTsKK30KKworUmVmUHRyPEltYWdlPiBTdHlsZU11bHRpSW1hZ2U6OmltYWdl
KFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpemUmIHNpemUpIGNvbnN0Cit7
CisgICAgaWYgKCFtX3NlbGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IHJldHVybiBtX3NlbGVjdGVkSW1hZ2UtPmltYWdlKHJlbmRlcmVyLCBzaXplKTsKK30KKworZmxv
YXQgU3R5bGVNdWx0aUltYWdlOjppbWFnZVNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIG1fc2VsZWN0
ZWRJbWFnZS0+aW1hZ2VTY2FsZUZhY3RvcigpOworfQorCitib29sIFN0eWxlTXVsdGlJbWFnZTo6
a25vd25Ub0JlT3BhcXVlKGNvbnN0IFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyKSBjb25zdAorewor
ICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UgJiYgbV9zZWxlY3RlZEltYWdlLT5rbm93blRvQmVP
cGFxdWUocmVuZGVyZXIpOworfQorCit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUltYWdlLmNwcApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZU11bHRp
SW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5
bGVNdWx0aUltYWdlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAq
ICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAq
ICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNS0yMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBOb2FtIFJvc2VudGhhbCAobm9hbUB3ZWJr
aXQub3JnKQorICoKKyogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKgorKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisqCisqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqCisqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBEb2N1bWVudDsKKworc3RydWN0IEltYWdlV2l0aFNjYWxlOworCitjbGFzcyBT
dHlsZU11bHRpSW1hZ2UgOiBwdWJsaWMgU3R5bGVJbWFnZSB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgdmlydHVhbCB+U3R5bGVNdWx0aUltYWdlKCk7CisKK3By
b3RlY3RlZDoKKyAgICBTdHlsZU11bHRpSW1hZ2UoKTsKKyAgICBib29sIGVxdWFscyhjb25zdCBT
dHlsZU11bHRpSW1hZ2UmIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIEltYWdlV2l0aFNjYWxl
IHNlbGVjdEJlc3RGaXRJbWFnZShjb25zdCBEb2N1bWVudCYpIGNvbnN0ID0gMDsKKyAgICBDYWNo
ZWRJbWFnZSogY2FjaGVkSW1hZ2UoKSBjb25zdCBmaW5hbDsKKworcHJpdmF0ZToKKyAgICBXcmFw
cGVkSW1hZ2VQdHIgZGF0YSgpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCBjYW5SZW5kZXIoY29u
c3QgUmVuZGVyRWxlbWVudCosIGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0IGZpbmFsOworICAgIGJv
b2wgaXNQZW5kaW5nKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBsb2FkKENhY2hlZFJlc291cmNl
TG9hZGVyJiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJikgZmluYWw7CisgICAgYm9vbCBp
c0xvYWRlZCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgZXJyb3JPY2N1cnJlZCgpIGNvbnN0IGZp
bmFsOworICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUoY29uc3QgUmVuZGVyRWxlbWVudCosIGZsb2F0
IG11bHRpcGxpZXIpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZVdpZHRo
KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3Qg
ZmluYWw7CisgICAgdm9pZCBjb21wdXRlSW50cmluc2ljRGltZW5zaW9ucyhjb25zdCBSZW5kZXJF
bGVtZW50KiwgTGVuZ3RoJiBpbnRyaW5zaWNXaWR0aCwgTGVuZ3RoJiBpbnRyaW5zaWNIZWlnaHQs
IEZsb2F0U2l6ZSYgaW50cmluc2ljUmF0aW8pIGZpbmFsOworICAgIGJvb2wgdXNlc0ltYWdlQ29u
dGFpbmVyU2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0Q29udGFpbmVyQ29udGV4dEZv
clJlbmRlcmVyKGNvbnN0IFJlbmRlckVsZW1lbnQmLCBjb25zdCBGbG9hdFNpemUmLCBmbG9hdCk7
CisgICAgdm9pZCBhZGRDbGllbnQoUmVuZGVyRWxlbWVudCopIGZpbmFsOworICAgIHZvaWQgcmVt
b3ZlQ2xpZW50KFJlbmRlckVsZW1lbnQqKSBmaW5hbDsKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
KFJlbmRlckVsZW1lbnQqLCBjb25zdCBGbG9hdFNpemUmKSBjb25zdCBmaW5hbDsKKyAgICBmbG9h
dCBpbWFnZVNjYWxlRmFjdG9yKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBrbm93blRvQmVPcGFx
dWUoY29uc3QgUmVuZGVyRWxlbWVudCopIGNvbnN0IGZpbmFsOworICAgIGNvbnN0IFN0eWxlSW1h
Z2UqIHNlbGVjdGVkSW1hZ2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NlbGVjdGVkSW1hZ2Uu
Z2V0KCk7IH0KKyAgICBTdHlsZUltYWdlKiBzZWxlY3RlZEltYWdlKCkgZmluYWwgeyByZXR1cm4g
bV9zZWxlY3RlZEltYWdlLmdldCgpOyB9CisKKyAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbV9zZWxl
Y3RlZEltYWdlOworICAgIGJvb2wgbV9pc1BlbmRpbmcgeyB0cnVlIH07Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUltYWdlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1
dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAkocmV2aXNpb24g
MjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDEwIEBACiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUu
aCIKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCIKICNpbmNsdWRlICJTdHlsZUNh
Y2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVDdXJzb3JJbWFnZS5oIgogI2luY2x1ZGUgIlN0
eWxlRm9udFNpemVGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgi
CisjaW5jbHVkZSAiU3R5bGVJbWFnZVNldC5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIK
ICNpbmNsdWRlICJXaWxsQ2hhbmdlRGF0YS5oIgogCkBAIC0xMzI0LDEzICsxMzI2LDE1IEBAIGlu
bGluZSB2b2lkIEJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb24KICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxlR2Vu
ZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihpdGVt
LmdldCgpKSksIGRpZFNldCk7CiAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwotICAgICAgICB9
IGVsc2UgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KGl0ZW0pKSB7Ci0gICAgICAgICAgICBidWls
ZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShpdGVt
KSwgZGlkU2V0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGlzPENTU0ltYWdl
U2V0VmFsdWU+KGl0ZW0pKSB7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRD
b250ZW50KFN0eWxlSW1hZ2VTZXQ6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPihp
dGVtLmdldCgpKS5pbWFnZVNldFdpdGhTdHlsZXNSZXNvbHZlZChidWlsZGVyU3RhdGUpKSwgZGlk
U2V0KTsKICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oaXRlbSkpIHsKLSAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5z
dHlsZSgpLnNldENvbnRlbnQoU3R5bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKGl0ZW0pLCBkaWRTZXQp
OworICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChTdHlsZUNhY2hl
ZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oaXRlbS5nZXQoKSkpLCBkaWRT
ZXQpOwogICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUu
Y3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxk
ZXJTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDEwIEBACiAjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJTdHlsZUNh
Y2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVDdXJzb3JJbWFnZS5oIgogI2luY2x1ZGUgIlN0
eWxlRm9udFNpemVGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgi
CisjaW5jbHVkZSAiU3R5bGVJbWFnZVNldC5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybUZ1bmN0aW9u
cy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03OSwyMSArODEsMzMgQEAgYm9vbCBCdWls
ZGVyU3RhdGU6OnVzZVNWR1pvb21SdWxlc0ZvckxlbgogICAgIHJldHVybiBpczxTVkdFbGVtZW50
PihlbGVtZW50KCkpICYmICEoaXM8U1ZHU1ZHRWxlbWVudD4oKmVsZW1lbnQoKSkgJiYgZWxlbWVu
dCgpLT5wYXJlbnROb2RlKCkpOwogfQogCitSZWY8Q1NTVmFsdWU+IEJ1aWxkZXJTdGF0ZTo6cmVz
b2x2ZUltYWdlU3R5bGVzKENTU1ZhbHVlJiB2YWx1ZSkKK3sKKyAgICBpZiAoaXM8Q1NTR3JhZGll
bnRWYWx1ZT4odmFsdWUpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1
ZT4odmFsdWUpLmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKCp0aGlzKTsKKworICAgIGlmIChp
czxDU1NGaWx0ZXJJbWFnZVZhbHVlPih2YWx1ZSkpCisgICAgICAgIGRvd25jYXN0PENTU0ZpbHRl
ckltYWdlVmFsdWU+KHZhbHVlKS5jcmVhdGVGaWx0ZXJPcGVyYXRpb25zKCp0aGlzKTsKKworICAg
IGlmIChpczxDU1NJbWFnZVNldFZhbHVlPih2YWx1ZSkpCisgICAgICAgIHJldHVybiBkb3duY2Fz
dDxDU1NJbWFnZVNldFZhbHVlPih2YWx1ZSkuaW1hZ2VTZXRXaXRoU3R5bGVzUmVzb2x2ZWQoKnRo
aXMpOworCisgICAgcmV0dXJuIG1ha2VSZWYodmFsdWUpOworfQorCiBSZWZQdHI8U3R5bGVJbWFn
ZT4gQnVpbGRlclN0YXRlOjpjcmVhdGVTdHlsZUltYWdlKENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAg
ICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKSB7Ci0gICAgICAgIGlmIChp
czxDU1NHcmFkaWVudFZhbHVlPih2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gU3R5bGVHZW5l
cmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0PENTU0dyYWRpZW50VmFsdWU+KHZhbHVlKS5ncmFk
aWVudFdpdGhTdHlsZXNSZXNvbHZlZCgqdGhpcykpOwotCi0gICAgICAgIGlmIChpczxDU1NGaWx0
ZXJJbWFnZVZhbHVlPih2YWx1ZSkpIHsKLSAgICAgICAgICAgIC8vIEZpbHRlckltYWdlIG5lZWRz
IHRvIGNhbGN1bGF0ZSBGaWx0ZXJPcGVyYXRpb25zLgotICAgICAgICAgICAgZG93bmNhc3Q8Q1NT
RmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpLmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoKnRoaXMpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoZG93
bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKTsKLSAgICB9CisgICAgaWYgKGlz
PENTU0ltYWdlVmFsdWU+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFN0eWxlQ2FjaGVkSW1hZ2U6
OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZVZhbHVlPih2YWx1ZSkpOworCisgICAgaWYgKGlzPENT
U0N1cnNvckltYWdlVmFsdWU+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFN0eWxlQ3Vyc29ySW1h
Z2U6OmNyZWF0ZShkb3duY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlPih2YWx1ZSkpOwogCi0gICAg
aWYgKGlzPENTU0ltYWdlVmFsdWU+KHZhbHVlKSB8fCBpczxDU1NJbWFnZVNldFZhbHVlPih2YWx1
ZSkgfHwgaXM8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4odmFsdWUpKQotICAgICAgICByZXR1cm4gU3R5
bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZT4odmFsdWUpKQorICAgICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3Jl
YXRlKGRvd25jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHJlc29sdmVJbWFnZVN0eWxlcyh2
YWx1ZSkuZ2V0KCkpKTsKKyAgICAKKyAgICBpZiAoaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4odmFsdWUp
KQorICAgICAgICByZXR1cm4gU3R5bGVJbWFnZVNldDo6Y3JlYXRlKGRvd25jYXN0PENTU0ltYWdl
U2V0VmFsdWU+KHJlc29sdmVJbWFnZVN0eWxlcyh2YWx1ZSkuZ2V0KCkpKTsKIAogICAgIHJldHVy
biBudWxscHRyOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3Rh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0
ZS5oCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxk
ZXJTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw3IEBAIHB1YmxpYzoKICAgICBi
b29sIHVzZVNWR1pvb21SdWxlc0Zvckxlbmd0aCgpIGNvbnN0OwogICAgIFNjb3BlT3JkaW5hbCBz
dHlsZVNjb3BlT3JkaW5hbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVTY29wZU9yZGluYWw7IH0K
IAorICAgIFJlZjxDU1NWYWx1ZT4gcmVzb2x2ZUltYWdlU3R5bGVzKENTU1ZhbHVlJik7CiAgICAg
UmVmUHRyPFN0eWxlSW1hZ2U+IGNyZWF0ZVN0eWxlSW1hZ2UoQ1NTVmFsdWUmKTsKICAgICBib29s
IGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoY29uc3QgQ1NTVmFsdWUmLCBGaWx0ZXJPcGVyYXRpb25z
JiBvdXRPcGVyYXRpb25zKTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjU0ODA4KQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMjAtMDEt
MTkgIE5vYW0gUm9zZW50aGFsICA8bm9hbUB3ZWJraXQub3JnPgorCisgICAgICAgIC13ZWJraXQt
aW1hZ2Utc2V0IHNob3VsZCBzdXBwb3J0IGFsbCB0aGUgaW1hZ2UgZnVuY3Rpb25zIFdlYktpdCBz
dXBwb3J0cywgbm90IGp1c3QgdXJsKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgxOTQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CisKKyAgICAgICAgKiBmYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogZmFzdC9jc3MvY3Vyc29yLXBhcnNpbmcuaHRtbDoKKyAgICAgICAgICAgICAgICBBZGRl
ZCBwYXJzaW5nIHRlc3QgdG8gZW5zdXJlIGFycm93IGltYWdlLXNldHMgZGlzYWJsZSBnZW5lcmF0
ZWQgaW1hZ2VzCisKKyAgICAgICAgKiBmYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1nZW5lcmF0
ZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9pbWFnZS1zZXQtcGFy
c2luZy1nZW5lcmF0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3MvaW1hZ2Utc2V0
LXBhcnNpbmctaW52YWxpZC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jc3MvaW1hZ2Ut
c2V0LXBhcnNpbmctaW52YWxpZC5odG1sOgorICAgICAgICAgICAgICAgIEFkZGVkIHBhcnNpbmcg
dGVzdHMgZm9yIG5ldyBnZW5lcmF0ZWQtaW5zaWRlLWltYWdlLXNldCB1c2UgY2FzZXMKKyAgICAg
ICAgICAgICAgICBUZXN0IHRoYXQgaW1hZ2Utc2V0IGluc2lkZSBpbWFnZS1zZXQgaXMgbm90IHN1
cHBvcnRlZAorCisgICAgICAgICogZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS1leHBl
Y3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1m
YWRlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50
LWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc2V0LWdy
YWRpZW50LW11bHRpLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlkcGkv
aW1hZ2Utc2V0LWdyYWRpZW50LW11bHRpLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlk
cGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1zaW5nbGUuaHRtbDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQuaHRtbDogQWRkZWQuCisgICAg
ICAgICAgICAgICAgQWRkZWQgcmVmLXRlc3RzIGZvciBzZXZlcmFsIGdlbmVyYXRlZC1pbnNpZGUt
aW1hZ2Utc2V0IHVzZS1jYXNlcworCiAyMDIwLTAxLTE5ICBDYXRoaWUgQ2hlbiAgPGNhdGhpZWNo
ZW5AaWdhbGlhLmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3Igc2Nyb2xsIGJlaGF2aW9y
IHJlbGllcyBvbiBTY3JvbGxBbmltYXRpb24gb2YgdGhlIFdlYiBwcm9jZXNzCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvY3Vyc29yLXBhcnNpbmctZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAyNTQ4MDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDEwIEBAIFBBU1Mgcm91bmR0cmlw
Q3NzUnVsZSgiY3Vyc29yOiB1cmwoZmlsZToKIFBBU1Mgcm91bmR0cmlwQ3NzUnVsZSgiY3Vyc29y
OiB1cmwoZmlsZTovLy9mb28ucG5nKSAxMiAzIDU7IikuY3NzVGV4dCBpcyAiIgogUEFTUyByb3Vu
ZHRyaXBDc3NSdWxlKCJjdXJzb3I6IHVybChmaWxlOi8vL2Zvby5wbmcpIHggeTsiKS5jc3NUZXh0
IGlzICIiCiBQQVNTIHJvdW5kdHJpcENzc1J1bGUoImN1cnNvcjogdXJsKGZpbGU6Ly8vZm9vLnBu
ZykgYXV0bzsiKS5jc3NUZXh0IGlzICIiCisKK1Rlc3QgYSBidW5jaCBvZiBjdXJzb3IgcnVsZXMg
d2l0aCBnZW5lcmF0ZWQgaW1hZ2VzLgorUEFTUyByb3VuZHRyaXBDc3NSdWxlKCJjdXJzb3I6IGxp
bmVhci1ncmFkaWVudChyZWQsIHdoaXRlKSAtMSAtMSwgcG9pbnRlcjsiKS5jc3NUZXh0IGlzICIi
CitQQVNTIHJvdW5kdHJpcENzc1J1bGUoImN1cnNvcjogaW1hZ2Utc2V0KGxpbmVhci1ncmFkaWVu
dChyZWQsIHdoaXRlKSAxeCkgLTEgLTEsIHBvaW50ZXI7IikuY3NzVGV4dCBpcyAiIgogUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvY3NzL2N1cnNvci1wYXJzaW5nLmh0bWwJKHJldmlzaW9uIDI1NDgwOCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvY3NzL2N1cnNvci1wYXJzaW5nLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTEwNSw2ICsxMDUsMTEgQEAgdGVzdEludmFsaWRDdXJzb3JSdWxlKCd1cmwoZmlsZTovLy9mb28u
cAogdGVzdEludmFsaWRDdXJzb3JSdWxlKCd1cmwoZmlsZTovLy9mb28ucG5nKSB4IHknKTsKIHRl
c3RJbnZhbGlkQ3Vyc29yUnVsZSgndXJsKGZpbGU6Ly8vZm9vLnBuZykgYXV0bycpOwogCitkZWJ1
ZygnJyk7CitkZWJ1ZygnVGVzdCBhIGJ1bmNoIG9mIGN1cnNvciBydWxlcyB3aXRoIGdlbmVyYXRl
ZCBpbWFnZXMuJyk7Cit0ZXN0SW52YWxpZEN1cnNvclJ1bGUoJ2xpbmVhci1ncmFkaWVudChyZWQs
IHdoaXRlKSAtMSAtMSwgcG9pbnRlcicpOwordGVzdEludmFsaWRDdXJzb3JSdWxlKCdpbWFnZS1z
ZXQobGluZWFyLWdyYWRpZW50KHJlZCwgd2hpdGUpIDF4KSAtMSAtMSwgcG9pbnRlcicpOworCiBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwogPC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1nZW5lcmF0ZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWdlbmVyYXRlZC1l
eHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Ut
c2V0LXBhcnNpbmctZ2VuZXJhdGVkLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDY1IEBACitUZXN0IHRoZSBwYXJzaW5nIG9mIHRoZSBpbWFnZS1zZXQgZnVuY3Rpb24uCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisKK1NpbmdsZSB2YWx1ZSBmb3IgYmFja2dy
b3VuZC1pbWFnZSB3aXRoIGdyYWRpZW50IDogbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkg
MXgKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlKSBpcyAnQ1NTVmFsdWVMaXN0Jwor
UEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuX19wcm90b19fKSBpcyAnQ1NTVmFsdWVM
aXN0UHJvdG90eXBlJworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuY29uc3RydWN0
b3IpIGlzICdGdW5jdGlvbicKK1BBU1MgaW1hZ2VTZXRSdWxlLmxlbmd0aCBpcyAyCitQQVNTIHN1
YlJ1bGUuY3NzVGV4dCBpcyAnbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSknCitQQVNTIHN1
YlJ1bGUuY3NzVGV4dCBpcyAnMScKKworU2luZ2xlIHZhbHVlIGZvciBjb250ZW50IHdpdGggZ3Jh
ZGllbnQgOiBsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAxeAorUEFTUyBqc1dyYXBwZXJD
bGFzcyhpbWFnZVNldFJ1bGUpIGlzICdDU1NWYWx1ZUxpc3QnCitQQVNTIGpzV3JhcHBlckNsYXNz
KGltYWdlU2V0UnVsZS5fX3Byb3RvX18pIGlzICdDU1NWYWx1ZUxpc3RQcm90b3R5cGUnCitQQVNT
IGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5jb25zdHJ1Y3RvcikgaXMgJ0Z1bmN0aW9uJwor
UEFTUyBpbWFnZVNldFJ1bGUubGVuZ3RoIGlzIDIKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICds
aW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKScKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICcx
JworCitTaW5nbGUgdmFsdWUgZm9yIGJhY2tncm91bmQtaW1hZ2Ugd2l0aCBncmFkaWVudHMgOiBs
aW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAxeCwgcmFkaWFsLWdyYWRpZW50KGJsdWUsIHdo
aXRlKSAyeAorUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUpIGlzICdDU1NWYWx1ZUxp
c3QnCitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5fX3Byb3RvX18pIGlzICdDU1NW
YWx1ZUxpc3RQcm90b3R5cGUnCitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5jb25z
dHJ1Y3RvcikgaXMgJ0Z1bmN0aW9uJworUEFTUyBpbWFnZVNldFJ1bGUubGVuZ3RoIGlzIDQKK1BB
U1Mgc3ViUnVsZS5jc3NUZXh0IGlzICdsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKScKK1BB
U1Mgc3ViUnVsZS5jc3NUZXh0IGlzICcxJworUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJ3JhZGlh
bC1ncmFkaWVudChibHVlLCB3aGl0ZSknCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMicKKwor
Q29tYmluZWQgZ3JhZGllbnQgYW5kIFVSTCA6IHVybCgnI2EnKSAxeCwgbGluZWFyLWdyYWRpZW50
KGdyZWVuLCB3aGl0ZSkgMngKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlKSBpcyAn
Q1NTVmFsdWVMaXN0JworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuX19wcm90b19f
KSBpcyAnQ1NTVmFsdWVMaXN0UHJvdG90eXBlJworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNl
dFJ1bGUuY29uc3RydWN0b3IpIGlzICdGdW5jdGlvbicKK1BBU1MgaW1hZ2VTZXRSdWxlLmxlbmd0
aCBpcyA0CitQQVNTIHN1YlJ1bGUgaXMgJ2EnCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMScK
K1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICdsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKScK
K1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICcyJworCitDb21iaW5lZCBncmFkaWVudCBhbmQgVVJM
IGluIGNvbnRlbnQgOiB1cmwoJyNhJykgMXgsIGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUp
IDJ4CitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZSkgaXMgJ0NTU1ZhbHVlTGlzdCcK
K1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLl9fcHJvdG9fXykgaXMgJ0NTU1ZhbHVl
TGlzdFByb3RvdHlwZScKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLmNvbnN0cnVj
dG9yKSBpcyAnRnVuY3Rpb24nCitQQVNTIGltYWdlU2V0UnVsZS5sZW5ndGggaXMgNAorUEFTUyBz
dWJSdWxlIGlzICdhJworUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJzEnCitQQVNTIHN1YlJ1bGUu
Y3NzVGV4dCBpcyAnbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSknCitQQVNTIHN1YlJ1bGUu
Y3NzVGV4dCBpcyAnMicKKworQ29tYmluZWQgZ3JhZGllbnQgYW5kIGNyb3NzLWZhZGUgOiAtd2Vi
a2l0LWNyb3NzLWZhZGUodXJsKCcjYScpLCB1cmwoJyNiJyksIDcwJSkgMXgsIGxpbmVhci1ncmFk
aWVudChncmVlbiwgd2hpdGUpIDJ4CitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZSkg
aXMgJ0NTU1ZhbHVlTGlzdCcKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLl9fcHJv
dG9fXykgaXMgJ0NTU1ZhbHVlTGlzdFByb3RvdHlwZScKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1h
Z2VTZXRSdWxlLmNvbnN0cnVjdG9yKSBpcyAnRnVuY3Rpb24nCitQQVNTIGltYWdlU2V0UnVsZS5s
ZW5ndGggaXMgNAorUEFTUyBzdWJSdWxlIGlzICdhJworUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMg
JzEnCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0
ZSknCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMicKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1nZW5lcmF0ZWQtZXhwZWN0ZWQudHh0Cl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Ut
c2V0LXBhcnNpbmctZ2VuZXJhdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctZ2VuZXJhdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysg
TGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctZ2VuZXJhdGVkLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8v
SUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+
CitkZXNjcmlwdGlvbigiVGVzdCB0aGUgcGFyc2luZyBvZiB0aGUgaW1hZ2Utc2V0IGZ1bmN0aW9u
LiIpOworCitmdW5jdGlvbiBqc1dyYXBwZXJDbGFzcyhub2RlKQoreworICAgIGlmICghbm9kZSkK
KyAgICAgICAgcmV0dXJuICJbbnVsbF0iOworICAgIHZhciBzdHJpbmcgPSBPYmplY3QucHJvdG90
eXBlLnRvU3RyaW5nLmFwcGx5KG5vZGUpOworICAgIHJldHVybiBzdHJpbmcuc3Vic3RyKDgsIHN0
cmluZy5sZW5ndGggLSA5KTsKK30KKworZnVuY3Rpb24gc2hvdWxkQmVUeXBlKGV4cHJlc3Npb24s
IGNsYXNzTmFtZSwgcHJvdG90eXBlTmFtZSwgY29uc3RydWN0b3JOYW1lKQoreworICAgIGlmICgh
cHJvdG90eXBlTmFtZSkKKyAgICAgICAgcHJvdG90eXBlTmFtZSA9IGNsYXNzTmFtZSArICJQcm90
b3R5cGUiOworICAgIGlmICghY29uc3RydWN0b3JOYW1lKQorICAgICAgICBjb25zdHJ1Y3Rvck5h
bWUgPSBjbGFzc05hbWUgKyAiQ29uc3RydWN0b3IiOworICAgIHNob3VsZEJlKCJqc1dyYXBwZXJD
bGFzcygiICsgZXhwcmVzc2lvbiArICIpIiwgIiciICsgY2xhc3NOYW1lICsgIiciKTsKKyAgICBz
aG91bGRCZSgianNXcmFwcGVyQ2xhc3MoIiArIGV4cHJlc3Npb24gKyAiLl9fcHJvdG9fXykiLCAi
JyIgKyBwcm90b3R5cGVOYW1lICsgIiciKTsKKyAgICBzaG91bGRCZSgianNXcmFwcGVyQ2xhc3Mo
IiArIGV4cHJlc3Npb24gKyAiLmNvbnN0cnVjdG9yKSIsICInRnVuY3Rpb24nIik7Cit9CisKKy8v
IFRoZXNlIGhhdmUgdG8gYmUgZ2xvYmFsIGZvciB0aGUgdGVzdCBoZWxwZXJzIHRvIHNlZSB0aGVt
LgordmFyIGltYWdlU2V0UnVsZSwgc3ViUnVsZTsKKworZnVuY3Rpb24gdGVzdEltYWdlU2V0UnVs
ZShkZXNjcmlwdGlvbiwgcHJvcGVydHksIHJ1bGUsIGV4cGVjdGVkTGVuZ3RoLCBleHBlY3RlZFRl
eHRzKQoreworICAgIGRlYnVnKCIiKTsKKyAgICBkZWJ1ZyhkZXNjcmlwdGlvbiArICIgOiAiICsg
cnVsZSk7CisKKyAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Cisg
ICAgZGl2LnNldEF0dHJpYnV0ZSgic3R5bGUiLCBwcm9wZXJ0eSArICI6IGltYWdlLXNldCgiICsg
cnVsZSArICIpIik7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpOworCisgICAg
aW1hZ2VTZXRSdWxlID0gZGl2LnN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHkpOwor
ICAgIHNob3VsZEJlVHlwZSgiaW1hZ2VTZXRSdWxlIiwgIkNTU1ZhbHVlTGlzdCIpOworCisgICAg
aWYgKGltYWdlU2V0UnVsZSkgeworICAgICAgICBpZiAoanNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRS
dWxlWzBdKSA9PSAiQ1NTVmFsdWVMaXN0IikgeworICAgICAgICAgICAgLy8gVGhlIGNvbnRlbnQg
cHJvcGVydHkgcmV0dXJucyBhIENTU1ZhbHVlTGlzdCBhbnl3YXksIHNvIHRvIGdldCB0byB0aGUg
CisgICAgICAgICAgICAvLyBpbWFnZVNldCBDU1MgdmFsdWUgbGlzdCwgd2UgaGF2ZSB0byBsb29r
IGF0IHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgCisgICAgICAgICAgICAvLyBjb250ZW50IHZhbHVl
IGxpc3QuCisgICAgICAgICAgICBpbWFnZVNldFJ1bGUgPSBpbWFnZVNldFJ1bGVbMF07CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBzaG91bGRCZSgiaW1hZ2VTZXRSdWxlLmxlbmd0aCIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gZXhwZWN0ZWRMZW5ndGg7IH0pOworCisgICAgaWYgKGltYWdlU2V0UnVs
ZSkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkTGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgIHN0cmluZyA9IGltYWdlU2V0UnVsZVtpXTsKKyAgICAgICAgICAgIGlmIChp
ICUgMiA9PSAwICYmIHN0cmluZy5jc3NUZXh0LmluY2x1ZGVzKCcjJykpIHsKKyAgICAgICAgICAg
ICAgICBzdWJSdWxlID0gc3RyaW5nLmNzc1RleHQuc3BsaXQoJyMnKVsxXS5yZXBsYWNlKCciJywg
IiIpOworICAgICAgICAgICAgICAgIHN1YlJ1bGUgPSBzdWJSdWxlLnNwbGl0KCcpJylbMF07Cisg
ICAgICAgICAgICAgICAgc2hvdWxkQmUoInN1YlJ1bGUiLCAiJyIgKyBleHBlY3RlZFRleHRzW2ld
ICsgIiciKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3ViUnVsZSA9
IHN0cmluZzsKKyAgICAgICAgICAgICAgICBzaG91bGRCZSgic3ViUnVsZS5jc3NUZXh0IiwgIici
ICsgZXhwZWN0ZWRUZXh0c1tpXSArICInIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7Cit9CisKK3Rlc3RJbWFn
ZVNldFJ1bGUoIlNpbmdsZSB2YWx1ZSBmb3IgYmFja2dyb3VuZC1pbWFnZSB3aXRoIGdyYWRpZW50
IiwKKyAgICAgICAgICAgICAgICAiYmFja2dyb3VuZC1pbWFnZSIsCisgICAgICAgICAgICAgICAg
ImxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIDF4IiwgMiwKKyAgICAgICAgICAgICAgICBb
ImxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIiwgIjEiXSk7Cit0ZXN0SW1hZ2VTZXRSdWxl
KCJTaW5nbGUgdmFsdWUgZm9yIGNvbnRlbnQgd2l0aCBncmFkaWVudCIsCisgICAgICAgICAgICAg
ICAgImJhY2tncm91bmQtaW1hZ2UiLAorICAgICAgICAgICAgICAgICJsaW5lYXItZ3JhZGllbnQo
Z3JlZW4sIHdoaXRlKSAxeCIsIDIsCisgICAgICAgICAgICAgICAgWyJsaW5lYXItZ3JhZGllbnQo
Z3JlZW4sIHdoaXRlKSIsICIxIl0pOworCit0ZXN0SW1hZ2VTZXRSdWxlKCJTaW5nbGUgdmFsdWUg
Zm9yIGJhY2tncm91bmQtaW1hZ2Ugd2l0aCBncmFkaWVudHMiLAorICAgICAgICAgICAgICAgICJi
YWNrZ3JvdW5kLWltYWdlIiwKKyAgICAgICAgICAgICAgICAibGluZWFyLWdyYWRpZW50KGdyZWVu
LCB3aGl0ZSkgMXgsIHJhZGlhbC1ncmFkaWVudChibHVlLCB3aGl0ZSkgMngiLCA0LAorICAgICAg
ICAgICAgICAgIFsibGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkiLCAiMSIsICJyYWRpYWwt
Z3JhZGllbnQoYmx1ZSwgd2hpdGUpIiwgIjIiXSk7CisKK3Rlc3RJbWFnZVNldFJ1bGUoIkNvbWJp
bmVkIGdyYWRpZW50IGFuZCBVUkwiLAorICAgICAgICAgICAgICAgICJiYWNrZ3JvdW5kLWltYWdl
IiwKKyAgICAgICAgICAgICAgICAidXJsKCcjYScpIDF4LCBsaW5lYXItZ3JhZGllbnQoZ3JlZW4s
IHdoaXRlKSAyeCIsIDQsCisgICAgICAgICAgICAgICAgWyJhIiwgIjEiLCAibGluZWFyLWdyYWRp
ZW50KGdyZWVuLCB3aGl0ZSkiLCAiMiJdKTsKKwordGVzdEltYWdlU2V0UnVsZSgiQ29tYmluZWQg
Z3JhZGllbnQgYW5kIFVSTCBpbiBjb250ZW50IiwKKyAgICAgICAgICAgICAgICAiY29udGVudCIs
CisgICAgICAgICAgICAgICAgInVybCgnI2EnKSAxeCwgbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3
aGl0ZSkgMngiLCA0LAorICAgICAgICAgICAgICAgIFsiYSIsICIxIiwgImxpbmVhci1ncmFkaWVu
dChncmVlbiwgd2hpdGUpIiwgIjIiXSk7CisKK3Rlc3RJbWFnZVNldFJ1bGUoIkNvbWJpbmVkIGdy
YWRpZW50IGFuZCBjcm9zcy1mYWRlIiwKKyAgICAgICAgICAgICAgICAiYmFja2dyb3VuZC1pbWFn
ZSIsCisgICAgICAgICAgICAgICAgIi13ZWJraXQtY3Jvc3MtZmFkZSh1cmwoJyNhJyksIHVybCgn
I2InKSwgNzAlKSAxeCwgbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMngiLCA0LAorICAg
ICAgICAgICAgICAgIFsiYSIsICIxIiwgImxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIiwg
IjIiXSk7CisKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvY3NzL2ltYWdl
LXNldC1wYXJzaW5nLWdlbmVyYXRlZC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRh
YmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctaW52YWxpZC1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNp
bmctaW52YWxpZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI1NDgwOCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWludmFsaWQtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xOCw2ICsxOCwxMiBAQCBQQVNTIGNzc1J1bGUgaXMgbnVsbAogCiBTY2FsZSBm
YWN0b3IgaXMgMCA6IHVybCgnI2EnKSAweAogUEFTUyBjc3NSdWxlIGlzIG51bGwKKworR2VuZXJh
dGVkIGltYWdlIGZvciBjdXJzb3IgOiBsaW5lYXItZ3JhZGllbnQoYmxhY2ssIHdoaXRlKSAxeAor
UEFTUyBjc3NSdWxlIGlzIG51bGwKKworSW1hZ2Utc2V0IGluc2lkZSBpbWFnZS1zZXQgOiBpbWFn
ZS1zZXQoaW1hZ2Utc2V0KHVybCgnI2EnKSAxeCkgMXgpCitQQVNTIGNzc1J1bGUgaXMgbnVsbAog
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1pbnZhbGlkLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctaW52YWxpZC5o
dG1sCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQt
cGFyc2luZy1pbnZhbGlkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAgdGVz
dEludmFsaWRJbWFnZVNldCgiTm8geCIsICJiYWNrZ3JvdW5kLQogdGVzdEludmFsaWRJbWFnZVNl
dCgiTm8gY29tbWEiLCAiYmFja2dyb3VuZC1pbWFnZSIsICJ1cmwoJyNhJykgMXggdXJsKCcjYicp
IDJ4Iik7CiB0ZXN0SW52YWxpZEltYWdlU2V0KCJUb28gbWFueSBzY2FsZSBmYWN0b3IgcGFyYW1l
dGVycyIsICJiYWNrZ3JvdW5kLWltYWdlIiwgInVybCgnI2EnKSAxeCAyeCIpOwogdGVzdEludmFs
aWRJbWFnZVNldCgiU2NhbGUgZmFjdG9yIGlzIDAiLCAiYmFja2dyb3VuZC1pbWFnZSIsICJ1cmwo
JyNhJykgMHgiKTsKK3Rlc3RJbnZhbGlkSW1hZ2VTZXQoIkdlbmVyYXRlZCBpbWFnZSBmb3IgY3Vy
c29yIiwgImN1cnNvciIsICJsaW5lYXItZ3JhZGllbnQoYmxhY2ssIHdoaXRlKSAxeCIpOwordGVz
dEludmFsaWRJbWFnZVNldCgiSW1hZ2Utc2V0IGluc2lkZSBpbWFnZS1zZXQiLCAiYmFja2dyb3Vu
ZC1pbWFnZSIsICJpbWFnZS1zZXQoaW1hZ2Utc2V0KHVybCgnI2EnKSAxeCkgMXgpIik7CiAKIHN1
Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CiA8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvaGlkcGkvaW1hZ2Utc2V0LWNyb3NzLWZhZGUtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1mYWRlLWV4cGVjdGVkLmh0
bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jv
c3MtZmFkZS1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYgQEAKKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorICAgIHdpbmRvdy5vbmxvYWQgPSAoKSA9PiB7CisgICAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxE
b25lKCk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0QmFja2luZ1NjYWxlRmFjdG9yKDIsICgpID0+
IHNldFRpbWVvdXQoKCkgPT4gdGVzdFJ1bm5lci5ub3RpZnlEb25lKCksIDApKTsKKyAgICAgIH0K
KyAgICB9Cis8L3NjcmlwdD4KKworICAgIAorPHN0eWxlPgorICAgICNmb28geworICAgICAgICB3
aWR0aDoxMDBweDsKKyAgICAgICAgaGVpZ2h0OjEwMHB4OworICAgICAgICBiYWNrZ3JvdW5kLWlt
YWdlOiAtd2Via2l0LWNyb3NzLWZhZGUodXJsKCdyZXNvdXJjZXMvYmx1ZS0xMDAtcHgtc3F1YXJl
LnBuZycpLCB1cmwoJ3Jlc291cmNlcy9ncmVlbi0yMDAtcHgtc3F1YXJlLnBuZycsIDUwJSkpOwor
ICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorICAgIDxkaXY+VGhpcyB0ZXN0IHBh
c3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgYmx1ZSAxMDBweCBzcXVhcmUgd2hlbiB0aGUgZGV2
aWNlU2NhbGVGYWN0b3IgaXMgMSwgYW5kIGlmIGl0IGlzIGEgMTAwcHggZ3JlZW4vYmx1ZSBjcm9z
cy1mYWRlIHNxdWFyZSB3aGVuIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBpcyAyLjwvZGl2PgorPGRp
diBpZD1mb28+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBM
YXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1mYWRlLWV4cGVjdGVkLmh0bWwK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2lt
YWdlLXNldC1jcm9zcy1mYWRlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9o
aWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRl
c3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWNyb3NzLWZhZGUuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDI1IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KKyAgICB3aW5kb3cub25s
b2FkID0gKCkgPT4geworICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB0ZXN0UnVubmVyLnNldEJhY2tpbmdT
Y2FsZUZhY3RvcigyLCAoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpLCAwKSk7CisgICAgICB9CisgICAgfQorPC9zY3JpcHQ+CisgICAgCis8c3R5bGU+CisgICAg
I2ZvbyB7CisgICAgICAgIHdpZHRoOjEwMHB4OworICAgICAgICBoZWlnaHQ6MTAwcHg7CisgICAg
ICAgIGJhY2tncm91bmQtaW1hZ2U6IGltYWdlLXNldCh1cmwoJ3Jlc291cmNlcy9ibHVlLTEwMC1w
eC1zcXVhcmUucG5nJykgMXgsIC13ZWJraXQtY3Jvc3MtZmFkZSh1cmwoJ3Jlc291cmNlcy9ibHVl
LTEwMC1weC1zcXVhcmUucG5nJyksIHVybCgncmVzb3VyY2VzL2dyZWVuLTIwMC1weC1zcXVhcmUu
cG5nJywgNTAlKSkgMngpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorICAg
IDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgYmx1ZSAxMDBweCBz
cXVhcmUgd2hlbiB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgaXMgMSwgYW5kIGlmIGl0IGlzIGEgMTAw
cHggZ3JlZW4vYmx1ZSBjcm9zcy1mYWRlIHNxdWFyZSB3aGVuIHRoZSBkZXZpY2VTY2FsZUZhY3Rv
ciBpcyAyLjwvZGl2PgorICAgIDxkaXYgaWQ9Zm9vPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgoK
UHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jv
c3MtZmFkZS5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEg
IyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1leHBlY3RlZC5odG1s
CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRp
ZW50LWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNiBAQAorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQ+CisgICAgd2luZG93Lm9ubG9hZCA9ICgpID0+IHsKKyAgICAgIGlm
ICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUo
KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRCYWNraW5nU2NhbGVGYWN0b3IoMiwgKCkgPT4gc2V0
VGltZW91dCgoKSA9PiB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKSwgMCkpOworICAgICAgfQorICAg
IH0KKzwvc2NyaXB0PgorCisgICAgCis8c3R5bGU+CisgICAgI2ZvbyB7CisgICAgICAgIHdpZHRo
OjEwMHB4OworICAgICAgICBoZWlnaHQ6MTAwcHg7CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6
IGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+
CisKKzxib2R5PgorICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlz
IGEgYmx1ZSAxMDBweCBzcXVhcmUgd2hlbiB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgaXMgMSwgYW5k
IGlmIGl0IGlzIGEgMTAwcHggZ3JlZW4td2hpdGUgZ3JhZGllbnQgc3F1YXJlIHdoZW4gdGhlIGRl
dmljZVNjYWxlRmFjdG9yIGlzIDIuPC9kaXY+CisgICAgPGRpdiBpZD1mb28+PC9kaXY+Cis8L2Jv
ZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBp
L2ltYWdlLXNldC1ncmFkaWVudC1leHBlY3RlZC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpl
eGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtbXVsdGkt
ZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdl
LXNldC1ncmFkaWVudC1tdWx0aS1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LW11bHRpLWV4cGVjdGVkLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNSBAQAorPGh0bWw+Cis8aGVhZD4gICAgCis8c2Ny
aXB0PgorICAgIHdpbmRvdy5vbmxvYWQgPSAoKSA9PiB7CisgICAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIHRl
c3RSdW5uZXIuc2V0QmFja2luZ1NjYWxlRmFjdG9yKDIsICgpID0+IHNldFRpbWVvdXQoKCkgPT4g
dGVzdFJ1bm5lci5ub3RpZnlEb25lKCksIDApKTsKKyAgICAgIH0KKyAgICB9Cis8L3NjcmlwdD4K
KworPHN0eWxlPgorICAgICNmb28geworICAgICAgICB3aWR0aDoxMDBweDsKKyAgICAgICAgaGVp
Z2h0OjEwMHB4OworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQocmVk
LCBibHVlKTsKKyAgICB9Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keT4KKyAgICA8ZGl2PlRo
aXMgdGVzdCBwYXNzZXMgaWYgdGhlIGRpdiBiZWxvdyBpcyBhIDEwMHB4IGdyZWVuLXdoaXRlIGdy
YWRpZW50IHNxdWFyZSB3aGVuIGRldmljZVBpeGVsUmF0aW8gaXMgMSwgYSByYWRpYWwgcmVkLWJs
dWUgc3F1YXJlIHdoZW4gZGV2aWNlUGl4ZWxSYXRpbyBpcyAyLCBhbmQgYSBibHVlIHNxdWFyZSB3
aGVuIGRldmljZVBpeGVsUmF0aW8gaXMgMy48L2Rpdj4KKyAgICA8ZGl2IGlkPWZvbz48L2Rpdj4K
KzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3Qv
aGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LW11bHRpLWV4cGVjdGVkLmh0bWwKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFk
aWVudC1tdWx0aS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1h
Z2Utc2V0LWdyYWRpZW50LW11bHRpLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtbXVsdGkuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDI1IEBACis8aHRtbD4KKzxoZWFkPiAgICAKKzxzY3JpcHQ+CisgICAgd2luZG93
Lm9ubG9hZCA9ICgpID0+IHsKKyAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAg
ICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRCYWNr
aW5nU2NhbGVGYWN0b3IoMiwgKCkgPT4gc2V0VGltZW91dCgoKSA9PiB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKSwgMCkpOworICAgICAgfQorICAgIH0KKzwvc2NyaXB0PgorCis8c3R5bGU+CisgICAg
I2ZvbyB7CisgICAgICAgIHdpZHRoOjEwMHB4OworICAgICAgICBoZWlnaHQ6MTAwcHg7CisgICAg
ICAgIGJhY2tncm91bmQtaW1hZ2U6IGltYWdlLXNldChsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdo
aXRlKSAxeCwgcmFkaWFsLWdyYWRpZW50KHJlZCwgYmx1ZSkgMngsICdyZXNvdXJjZXMvYmx1ZS0x
MDAtcHgtc3F1YXJlLnBuZycgM3gpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5
PgorICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgMTAwcHgg
Z3JlZW4td2hpdGUgZ3JhZGllbnQgc3F1YXJlIHdoZW4gZGV2aWNlUGl4ZWxSYXRpbyBpcyAxLCBh
IHJhZGlhbCByZWQtYmx1ZSBzcXVhcmUgd2hlbiBkZXZpY2VQaXhlbFJhdGlvIGlzIDIsIGFuZCBh
IGJsdWUgc3F1YXJlIHdoZW4gZGV2aWNlUGl4ZWxSYXRpbyBpcyAzLjwvZGl2PgorICAgIDxkaXYg
aWQ9Zm9vPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5
b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtbXVsdGkuaHRtbApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0
LWdyYWRpZW50LXNpbmdsZS1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS1leHBlY3RlZC5odG1sCShub25l
eGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNp
bmdsZS1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYgQEAKKzxodG1s
PgorPGhlYWQ+Cis8c3R5bGU+CisgICAgI2ZvbyB7CisgICAgICAgIHdpZHRoOjEwMHB4OworICAg
ICAgICBoZWlnaHQ6MTAwcHg7CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFk
aWVudChncmVlbiwgd2hpdGUpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGlk
PSJib2R5Ij4KKyAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGRpdiBiZWxvdyBpcyBh
IDEwMHB4IGdyZWVuLXdoaXRlIGdyYWRpZW50IHNxdWFyZS48L2Rpdj4KKyAgICA8ZGl2IGlkPWZv
bz48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRl
c3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS1leHBlY3RlZC5odG1sCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFn
ZS1zZXQtZ3JhZGllbnQtc2luZ2xlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtc2luZ2xlLmh0bWwJKG5vbmV4aXN0ZW50KQorKysg
TGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtc2luZ2xlLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNiBAQAorPGh0bWw+Cis8aGVhZD4gICAgCis8c3R5bGU+
CisgICAgI2ZvbyB7CisgICAgICAgIHdpZHRoOjEwMHB4OworICAgICAgICBoZWlnaHQ6MTAwcHg7
CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGltYWdlLXNldChsaW5lYXItZ3JhZGllbnQoZ3Jl
ZW4sIHdoaXRlKSAxeCk7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgaWQ9ImJv
ZHkiPgorICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgMTAw
cHggZ3JlZW4td2hpdGUgZ3JhZGllbnQgc3F1YXJlLjwvZGl2PgorICAgIDxkaXYgaWQ9Zm9vPjwv
ZGl2PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMv
ZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtc2luZ2xlLmh0bWwKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVu
dC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdy
YWRpZW50Lmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFn
ZS1zZXQtZ3JhZGllbnQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1IEBACis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdD4KKyAgICB3aW5kb3cub25sb2FkID0gKCkgPT4geworICAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9u
ZSgpOworICAgICAgICB0ZXN0UnVubmVyLnNldEJhY2tpbmdTY2FsZUZhY3RvcigyLCAoKSA9PiBz
ZXRUaW1lb3V0KCgpID0+IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpLCAwKSk7CisgICAgICB9Cisg
ICAgfQorPC9zY3JpcHQ+CisKKzxzdHlsZT4KKyAgICAjZm9vIHsKKyAgICAgICAgd2lkdGg6MTAw
cHg7CisgICAgICAgIGhlaWdodDoxMDBweDsKKyAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogaW1h
Z2Utc2V0KHVybCgncmVzb3VyY2VzL2JsdWUtMTAwLXB4LXNxdWFyZS5wbmcnKSAxeCwgbGluZWFy
LWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMngpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisK
Kzxib2R5PgorICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEg
Ymx1ZSAxMDBweCBzcXVhcmUgd2hlbiB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgaXMgMSwgYW5kIGlm
IGl0IGlzIGEgMTAwcHggZ3JlZW4td2hpdGUgZ3JhZGllbnQgc3F1YXJlIHdoZW4gdGhlIGRldmlj
ZVNjYWxlRmFjdG9yIGlzIDIuPC9kaXY+CisgICAgPGRpdiBpZD1mb28+PC9kaXY+Cis8L2JvZHk+
Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2lt
YWdlLXNldC1ncmFkaWVudC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMj
IC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388266</attachid>
            <date>2020-01-20 16:49:25 -0800</date>
            <delta_ts>2020-01-20 16:53:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81941-20200121024921.patch</filename>
            <type>text/plain</type>
            <size>82241</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAyMC0wMS0xOSAgTm9hbSBS
b3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgLXdlYmtpdC1pbWFnZS1zZXQg
c2hvdWxkIHN1cHBvcnQgYWxsIHRoZSBpbWFnZSBmdW5jdGlvbnMgV2ViS2l0IHN1cHBvcnRzLCBu
b3QganVzdCB1cmwoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODE5NDEKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAg
ICBTZXBhcmF0ZSBTdHlsZUNhY2hlZEltYWdlIHRvIDQgY2xhc3NlczoKKyAgICAgICAgLSBTdHls
ZUNhY2hlZEltYWdlOiBmb3Igc2luZ2xlIGltYWdlcyBvbmx5CisgICAgICAgIC0gU3R5bGVNdWx0
aUltYWdlOiBmb3IgdmFsdWVzIHRoYXQgY2FuIGNvbnRhaW4gbXVsdGlwbGUgaW1hZ2VzOiBsaWtl
IGN1cnNvci9pbWFnZS1zZXQKKyAgICAgICAgLSBTdHlsZUltYWdlU2V0CisgICAgICAgIC0gU3R5
bGVDdXJzb3JJbWFnZQorCisgICAgICAgIFRoZSBuZXcgY2xhc3NlcyBvbmx5IGRlYWwgd2l0aCB0
aGVpciBvd24gdmFsdWUgdHlwZS4gQmVmb3JlLCBJbWFnZVNldCBhbmQgY3Vyc29yIHdlcmUgcmVz
b2x2ZWQKKyAgICAgICAgYXMgYSBTdHlsZUNhY2hlZEltYWdlLCB3aGljaCBpcyBubyBsb25nZXIg
YSB2YWxpZCBhc3N1bXB0aW9uIGlmIGltYWdlLXNldCBjYW4gY29udGFpbiBnZW5lcmF0ZWQgaW1h
Z2VzLgorICAgICAgICBUaG91Z2ggY3Vyc29ycyBzdGlsbCBjYW4gb25seSBjb250YWluIGNhY2hl
ZCBpbWFnZXMsIGl0IHdhcyBjbGVhbmVyIHRvIHJlZmFjdG9yIGl0IG91dCBhcyB3ZWxsLgorCisg
ICAgICAgIFJlZmFjdG9yZWQgYmVzdC1maXQgaW1hZ2Ugc2VsZWN0aW9uIGZyb20gbG9hZGluZy4g
Tm93IFN0eWxlQ2FjaGVkSW1hZ2UgaXMgaW4gY2hhcmdlIG9mIGxvYWRpbmcKKyAgICAgICAgdGhl
IGFjdHVhbCBpbWFnZSwgYW5kIFN0eWxlSW1hZ2VTZXQvU3R5bGVDdXJzb3JJbWFnZSBwZXJmb3Jt
IHRoZSBzb3VyY2Ugc2VsZWN0aW9uLgorCisgICAgICAgIEFsc28sIGFkZGVkIHRoZSBuZWNlc3Nh
cnkgbG9naWMgaW4gdGhlIENTUyBwYXJzZXIgdG8gY29uc3VtZSBnZW5lcmF0ZWQgaW1hZ2VzIGlu
c2lkZSBpbWFnZS1zZXRzLCBleGNsdWRpbmcKKyAgICAgICAgd2hlbiB0aGUgaW1hZ2Utc2V0IGlz
IGEgY3Vyc29yIHZhbHVlLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2Nzcy9pbWFnZS1zZXQtcGFy
c2luZy1nZW5lcmF0ZWQuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9oaWRwaS9pbWFnZS1zZXQt
Y3Jvc3MtZmFkZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFk
aWVudC1tdWx0aS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFk
aWVudC1zaW5nbGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3Jh
ZGllbnQuaHRtbAorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBmaWxl
cworCisgICAgICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6c2VsZWN0QmVzdEZpdEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0N1cnNvckltYWdlVmFsdWU6OmxvYWRJbWFnZSk6IERlbGV0ZWQuCisgICAg
ICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuaDoKKyAgICAgICAgICAgICAgICBJbnN0ZWFk
IG9mIGN1cnNvciBsb2FkaW5nIHRoZSBpbWFnZSwgaXQgc2VsZWN0cyBhbiBpbWFnZSBDU1MgdmFs
dWUKKworICAgICAgICAqIGNzcy9DU1NJbWFnZVNldFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ltYWdlU2V0VmFsdWU6OkNTU0ltYWdlU2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTSW1hZ2VTZXRWYWx1ZTo6ZmlsbEltYWdlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ltYWdlU2V0VmFsdWU6OmNhY2hlZEltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ltYWdlU2V0VmFsdWU6OnNlbGVjdEJlc3RGaXRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NJbWFnZVNldFZhbHVlOjp1cGRhdGVEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpDU1NJbWFnZVNldFZhbHVlOjppbWFnZVNldFdpdGhTdHlsZXNSZXNvbHZlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjp0cmF2ZXJzZVN1YnJlc291cmNlcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjpsb2FkQmVzdEZpdEltYWdl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5oOgorICAgICAgICAg
ICAgICAgIFJlZmFjdG9yIENTU0ltYWdlU2V0VmFsdWUgdG8gaW5jbHVkZSBub24tY2FjaGVkSW1h
Z2UgaW1hZ2VzCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVDdXJzb3IpOgorICAgICAgICAqIGNzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVVybE9yU3RyaW5nQXNTdHJpbmdWaWV3
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5oOgorICAgICAgICAgICAgICAgIAorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NTU1Byb3Bl
cnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRnVuYyk6CisgICAgICAg
ICAgICAgICAgV2hlbiBibGVuZGluZyB0d28gaW1hZ2VzLCBnZXQgdGhlIHNlbGVjdGVkIGltYWdl
cyBpbiBjYXNlIGl0IGlzIGFuIGltYWdlLXNldAorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
SW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1h
Z2VSZXNvdXJjZVN0eWxlSW1hZ2U6OmluaXRpYWxpemUpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FuRGlyZWN0bHlDb21w
b3NpdGVCYWNrZ3JvdW5kQmFja2dyb3VuZEltYWdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5
bGUvU2hhcGVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjppc0ltYWdl
VmFsaWQgY29uc3QpOgorICAgICAgICAgICAgICAgIFVzZSBoYXNDYWNoZWRJbWFnZSgpIGluc3Rl
YWQgb2YgaXNDYWNoZWRJbWFnZSgpIGFzIGEgU3R5bGVJbWFnZVNldCBpcyBubyBsb25nZXIgYW4g
aXNDYWNoZWRJbWFnZSgpCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNhY2hlZEltYWdlOjpTdHlsZUNhY2hl
ZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlVVJMKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OmxvYWQpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0
eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVD
dXJzb3JJbWFnZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFn
ZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZU11bHRpSW1hZ2UuY3BwOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlU2V0Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9T
dHlsZUltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUltYWdlOjpzZWxlY3RlZEltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW1hZ2U6OnNlbGVjdGVkSW1hZ2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVJbWFnZTo6aXNDdXJzb3JJbWFnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUltYWdlOjppc0ltYWdlU2V0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlSW1hZ2U6Omhhc0NhY2hlZEltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlSW1hZ2U6OlN0eWxlSW1hZ2UpOgorICAgICAgICAgICAgICAgIFNlcGFyYXRlIGN1
cnNvci9pbWFnZS1zZXQgcmVsYXRlZCBzdHVmZiBhd2F5IGZyb20gU3R5bGVDYWNoZWRJbWFnZS4K
KworICAgICAgICAqIHN0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OkJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb250ZW50KToKKyAgICAgICAgKiBz
dHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVp
bGRlclN0YXRlOjpyZXNvbHZlSW1hZ2VTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OkJ1aWxkZXJTdGF0ZTo6Y3JlYXRlU3R5bGVJbWFnZSk6CisgICAgICAgICogc3R5bGUvU3R5bGVC
dWlsZGVyU3RhdGUuaDoKKyAgICAgICAgICAgICAgICBNYXRjaCB0aGUgQ1NTIHZhbHVlcyB3aXRo
IHRoZSBjb3JyZWN0IFN0eWxlIGNsYXNzLiBBbHNvLCBlbnN1cmUgaW1hZ2Utc2V0cyByZXNvbHZl
IHRoZWlyIAorICAgICAgICAgICAgICAgIGltYWdlcycgc3R5bGVzIGFzIHRoZXkgbWF5IGNvbnRh
aW4gZ3JhZGllbnRzIGFuZCBvdGhlciBjb250ZXh0LWF3YXJlIHZhbHVlcy4KKwogMjAyMC0wMS0x
OSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10gRGV2
aXJ0dWFsaXplIEZvcm1hdHRpbmdTdGF0ZQpJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI1
NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0y
MjYyLDE1ICsyMjYyLDE4IEBAIHJlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmNwcAogcmVuZGVy
aW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVC
b3hEYXRhLmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCityZW5kZXJp
bmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZURlcHJl
Y2F0ZWRGbGV4aWJsZUJveERhdGEuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVGaWx0ZXJEYXRh
LmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlRmxleGlibGVCb3hEYXRhLmNwcAogcmVuZGVyaW5n
L3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVHcmlk
RGF0YS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZUdyaWRJdGVtRGF0YS5jcHAKK3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZUltYWdlU2V0LmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJpdGVk
RGF0YS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZU1hcnF1ZWVEYXRhLmNwcAogcmVuZGVyaW5n
L3N0eWxlL1N0eWxlTXVsdGlDb2xEYXRhLmNwcAorcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJ
bWFnZS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcAogcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuY3BwCiByZW5kZXJpbmcvc3R5
bGUvU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjU0ODA4KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzcxNSw5ICsxMzcxNSwxNSBAQAogCQlDOURBREJDOTFCMUQzQjI1MDAxRjE3
RDggLyogSlNNZWRpYVNlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNNZWRpYVNlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
OURBREJDQTFCMUQzQjI1MDAxRjE3RDggLyogSlNNZWRpYVNlc3Npb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNZWRpYVNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzlGODdDRkQxQjI4RTVGNjAwOTc5QjgzIC8qIE1lZGlhU2Vzc2lvbkV2ZW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU2Vzc2lvbkV2ZW50cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDQTA5MUQ4NjIzQ0Y5MDc4MDBBRDQzNDYgLyogU3R5bGVJbWFnZVNldC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUltYWdlU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQ0EwOTFEODkyM0NGOTA4ODAwQUQ0MzQ2IC8qIFN0eWxlSW1hZ2VTZXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVJbWFnZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDQTE2MzVEQzIwNzJFNzY5MDBFN0QyQ0UgLyogUmVmZXJyZXJQb2xpY3kuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVmZXJyZXJQb2xpY3kuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQTNCRjY3QjEwRDk5QkFFMDBFNkNFNTMgLyog
U2Nyb2xsQW5pbWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2Nyb2xsQW5pbWF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQTNCRjY3
RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQ0E1MkJBRTUyM0QwQUYxNjAwREUwQjg0IC8qIFN0eWxlQ3Vyc29ySW1hZ2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVDdXJzb3JJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUNBNTJCQUU3MjNEMEFGMTcwMERFMEI4NCAvKiBTdHlsZU11bHRpSW1hZ2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVNdWx0aUltYWdlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0E1MkJBRTgyM0QwQUYxODAwREUwQjg0IC8qIFN0eWxlTXVsdGlJ
bWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZU11bHRpSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQ0E1MkJBRTkyM0QwQUYxOTAwREUwQjg0IC8qIFN0eWxlQ3Vyc29ySW1h
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVDdXJzb3JJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDQTZDMTUyRjIyMEI0QTU1MDA1NUNCRkMgLyogSlNJREJSZXF1ZXN0Q3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCUmVxdWVz
dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNBNkMxNTM3MjIwRDFF
QjMwMDU1Q0JGQyAvKiBKU0lEQkN1cnNvckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0lEQkN1cnNvckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNBNkMxNTM4MjIwRDFFQjMwMDU1Q0JGQyAvKiBKU0lEQkN1cnNvcldpdGhW
YWx1ZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lE
QkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yNTU1Myw2ICsyNTU1OSw4IEBACiAJCQkJQkNFRjQ0NEMwRTY3NDYyODAwMUMxMjg3IC8qIFN0
eWxlQ2FjaGVkSW1hZ2UuaCAqLywKIAkJCQkxQzBBQTE2QTIxOTQwREM3MDA4OTY4MjkgLyogU3R5
bGVDb2xvclNjaGVtZS5oICovLAogCQkJCTlEQUM3QzU2MUFGMkNCNjQwMDQzN0M0NCAvKiBTdHls
ZUNvbnRlbnRBbGlnbm1lbnREYXRhLmggKi8sCisJCQkJQ0E1MkJBRTUyM0QwQUYxNjAwREUwQjg0
IC8qIFN0eWxlQ3Vyc29ySW1hZ2UuY3BwICovLAorCQkJCUNBNTJCQUU5MjNEMEFGMTkwMERFMEI4
NCAvKiBTdHlsZUN1cnNvckltYWdlLmggKi8sCiAJCQkJQkM3NzlFMTUxQkIyMjZBMjAwQ0FBOEJG
IC8qIFN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhLmggKi8sCiAJCQkJQkM1RUI4QjYwRTgyMDFCRDAw
QjI1OTY1IC8qIFN0eWxlRGVwcmVjYXRlZEZsZXhpYmxlQm94RGF0YS5jcHAgKi8sCiAJCQkJQkM1
RUI4QjcwRTgyMDFCRDAwQjI1OTY1IC8qIFN0eWxlRGVwcmVjYXRlZEZsZXhpYmxlQm94RGF0YS5o
ICovLApAQCAtMjU1NjcsMTIgKzI1NTc1LDE2IEBACiAJCQkJQTExMERCOUMxNEY1REY4NzAwQTAz
QjkzIC8qIFN0eWxlR3JpZEl0ZW1EYXRhLmNwcCAqLywKIAkJCQlBMTEwREI5QTE0RjVERjc3MDBB
MDNCOTMgLyogU3R5bGVHcmlkSXRlbURhdGEuaCAqLywKIAkJCQlCQ0VGNDNDRTBFNjczREExMDAx
QzEyODcgLyogU3R5bGVJbWFnZS5oICovLAorCQkJCUNBMDkxRDg2MjNDRjkwNzgwMEFENDM0NiAv
KiBTdHlsZUltYWdlU2V0LmNwcCAqLywKKwkJCQlDQTA5MUQ4OTIzQ0Y5MDg4MDBBRDQzNDYgLyog
U3R5bGVJbWFnZVNldC5oICovLAogCQkJCUJDMjI3MzAxMEU4MkYxRTYwMEU3Rjk3NSAvKiBTdHls
ZUluaGVyaXRlZERhdGEuY3BwICovLAogCQkJCUJDMjI3MzAyMEU4MkYxRTYwMEU3Rjk3NSAvKiBT
dHlsZUluaGVyaXRlZERhdGEuaCAqLywKIAkJCQlCQzVFQjcyNzBFODFERTgxMDBCMjU5NjUgLyog
U3R5bGVNYXJxdWVlRGF0YS5jcHAgKi8sCiAJCQkJQkM1RUI3MjgwRTgxREU4MTAwQjI1OTY1IC8q
IFN0eWxlTWFycXVlZURhdGEuaCAqLywKIAkJCQlCQzVFQjc0QjBFODFFMDY3MDBCMjU5NjUgLyog
U3R5bGVNdWx0aUNvbERhdGEuY3BwICovLAogCQkJCUJDNUVCNzRDMEU4MUUwNjcwMEIyNTk2NSAv
KiBTdHlsZU11bHRpQ29sRGF0YS5oICovLAorCQkJCUNBNTJCQUU3MjNEMEFGMTcwMERFMEI4NCAv
KiBTdHlsZU11bHRpSW1hZ2UuY3BwICovLAorCQkJCUNBNTJCQUU4MjNEMEFGMTgwMERFMEI4NCAv
KiBTdHlsZU11bHRpSW1hZ2UuaCAqLywKIAkJCQlCQzIyNzJFMTBFODJFRTlCMDBFN0Y5NzUgLyog
U3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5jcHAgKi8sCiAJCQkJQkMyMjcyRTIwRTgyRUU5QjAwRTdG
OTc1IC8qIFN0eWxlUmFyZUluaGVyaXRlZERhdGEuaCAqLywKIAkJCQlCQzIyNzJCQTBFODJFQUFF
MDBFN0Y5NzUgLyogU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAgKi8sCkBAIC0zMTM1Nyw2
ICszMTM2OSw3IEBACiAJCQkJMTE5OUZBNDYyMDhFMzVBMzAwMjM1OENDIC8qIExheW91dENvbnRh
aW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkYyNkJCNkMyMzM0M0U2RjAwMkYyQkVBIC8qIExh
eW91dENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTExMzEwQ0Y1MjBCQTRBNEMwMDY1QThE
MCAvKiBMYXlvdXREZXNjZW5kYW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0MTgw
MjU1MjNENDU0OUIwMEZGQjA3MSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU0QUJBQkREMjM2MDg4RkUwMEZBNDM0NSAvKiBMYXlvdXRJbnRlZ3JhdGlv
bkxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTExMzEwQ0Y0MjBCQTRBM0QwMDY1QThE
MCAvKiBMYXlvdXRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxRDcyRjYxNUZFNjk1
MzAwQzRDMDdFIC8qIExheW91dE1pbGVzdG9uZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjA1MCw3
ICszMjA2Myw2IEBACiAJCQkJNDU4RkU0MEExNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNlYXJj
aEZpZWxkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQgLyog
UmVuZGVyU2VsZWN0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUIyNDdBNkQwQUZENjM4
MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQxODAyNTUy
M0Q0NTQ5QjAwRkZCMDcxIC8qIExheW91dEludGVncmF0aW9uQm94VHJlZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzE5NTVBODgxNjBEMTk5MjAwODU4MDI1IC8qIFJlbmRlclNuYXBzaG90dGVkUGx1
Z0luLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhDOEZBRTBERENEMzFCMDBCNTkyRjQgLyogUmVu
ZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNjY4MEU4MUNCNzEwMEIyNTk2NSAv
KiBSZW5kZXJTdHlsZUNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk1LDE3ICs5NSwxNyBAQCB2b2lkIENTU0N1cnNvckltYWdlVmFsdWU6OmN1cnNvckVsZW1l
bnRDCiAgICAgbV9ob3RTcG90LnNldFkoc3RhdGljX2Nhc3Q8aW50Pih5KSk7CiB9CiAKLXN0ZDo6
cGFpcjxDYWNoZWRJbWFnZSosIGZsb2F0PiBDU1NDdXJzb3JJbWFnZVZhbHVlOjpsb2FkSW1hZ2Uo
Q2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25z
JiBvcHRpb25zKQorSW1hZ2VXaXRoU2NhbGUgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6c2VsZWN0QmVz
dEZpdEltYWdlKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBpZiAoaXM8Q1NTSW1h
Z2VTZXRWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENTU0ltYWdlU2V0VmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkubG9hZEJlc3RGaXRJbWFnZShs
b2FkZXIsIG9wdGlvbnMpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1
ZT4obV9pbWFnZVZhbHVlLmdldCgpKS5zZWxlY3RCZXN0Rml0SW1hZ2UoZG9jdW1lbnQpOwogCi0g
ICAgaWYgKGF1dG8qIGN1cnNvckVsZW1lbnQgPSB1cGRhdGVDdXJzb3JFbGVtZW50KCpsb2FkZXIu
ZG9jdW1lbnQoKSkpIHsKKyAgICBpZiAoYXV0byogY3Vyc29yRWxlbWVudCA9IHVwZGF0ZUN1cnNv
ckVsZW1lbnQoZG9jdW1lbnQpKSB7CiAgICAgICAgIGlmIChjdXJzb3JFbGVtZW50LT5ocmVmKCkg
IT0gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKS51cmwoKSkKLSAg
ICAgICAgICAgIG1faW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFsdWU6OmNyZWF0ZShsb2FkZXIuZG9j
dW1lbnQoKS0+Y29tcGxldGVVUkwoY3Vyc29yRWxlbWVudC0+aHJlZigpKSwgbV9sb2FkZWRGcm9t
T3BhcXVlU291cmNlKTsKKyAgICAgICAgICAgIG1faW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFsdWU6
OmNyZWF0ZShkb2N1bWVudC5jb21wbGV0ZVVSTChjdXJzb3JFbGVtZW50LT5ocmVmKCkpLCBtX2xv
YWRlZEZyb21PcGFxdWVTb3VyY2UpOwogICAgIH0KIAotICAgIHJldHVybiB7IGRvd25jYXN0PENT
U0ltYWdlVmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkubG9hZEltYWdlKGxvYWRlciwgb3B0aW9u
cyksIDEgfTsKKyAgICByZXR1cm4geyBtX2ltYWdlVmFsdWUucHRyKCkgLCAxIH07CiB9CiAKIGJv
b2wgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6ZXF1YWxzKGNvbnN0IENTU0N1cnNvckltYWdlVmFsdWUm
IG90aGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1
ZS5oCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1h
Z2VWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCwxMiBAQCBjbGFzcyBFbGVtZW50
OwogY2xhc3MgU1ZHQ3Vyc29yRWxlbWVudDsKIGNsYXNzIFNWR0VsZW1lbnQ7CiAKK3N0cnVjdCBJ
bWFnZVdpdGhTY2FsZTsKKworbmFtZXNwYWNlIFN0eWxlIHsKK2NsYXNzIEJ1aWxkZXJTdGF0ZTsK
K30KKwogY2xhc3MgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSBmaW5hbCA6IHB1YmxpYyBDU1NWYWx1ZSB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxDU1NDdXJzb3JJbWFnZVZhbHVlPiBjcmVhdGUoUmVm
PENTU1ZhbHVlPiYmIGltYWdlVmFsdWUsIGJvb2wgaGFzSG90U3BvdCwgY29uc3QgSW50UG9pbnQm
IGhvdFNwb3QsIExvYWRlZEZyb21PcGFxdWVTb3VyY2UgbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSkK
QEAgLTU2LDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBj
b25zdDsKIAotICAgIHN0ZDo6cGFpcjxDYWNoZWRJbWFnZSosIGZsb2F0PiBsb2FkSW1hZ2UoQ2Fj
aGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKKyAgICBJ
bWFnZVdpdGhTY2FsZSBzZWxlY3RCZXN0Rml0SW1hZ2UoY29uc3QgRG9jdW1lbnQmKTsKIAogICAg
IHZvaWQgcmVtb3ZlUmVmZXJlbmNlZEVsZW1lbnQoU1ZHRWxlbWVudCopOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDE5ICsyOCwyMCBAQAogCiAjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgogI2luY2x1ZGUg
IkNTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVz
dC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTdHlsZUJ1aWxk
ZXJTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1DU1NJbWFnZVNldFZhbHVlOjpDU1NJbWFnZVNldFZhbHVlKExvYWRl
ZEZyb21PcGFxdWVTb3VyY2UgbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSkKK1JlZjxDU1NJbWFnZVNl
dFZhbHVlPiBDU1NJbWFnZVNldFZhbHVlOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IENTU0ltYWdlU2V0VmFsdWUpOworfQorCitDU1NJbWFnZVNldFZhbHVlOjpDU1NJbWFn
ZVNldFZhbHVlKCkKICAgICA6IENTU1ZhbHVlTGlzdChJbWFnZVNldENsYXNzLCBDb21tYVNlcGFy
YXRvcikKLSAgICAsIG1fbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZShsb2FkZWRGcm9tT3BhcXVlU291
cmNlKQogewogfQogCkBAIC01MiwxNSArNTMsMTQgQEAgdm9pZCBDU1NJbWFnZVNldFZhbHVlOjpm
aWxsSW1hZ2VTZXQoKQogICAgIHNpemVfdCBpID0gMDsKICAgICB3aGlsZSAoaSA8IGxlbmd0aCkg
ewogICAgICAgICBDU1NWYWx1ZSogaW1hZ2VWYWx1ZSA9IGl0ZW0oaSk7Ci0gICAgICAgIFVSTCBp
bWFnZVVSTCA9IGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KCppbWFnZVZhbHVlKS51cmwoKTsKLQor
ICAgICAgICBBU1NFUlQoaXM8Q1NTSW1hZ2VWYWx1ZT4oaW1hZ2VWYWx1ZSkgfHwgaXM8Q1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZT4oaW1hZ2VWYWx1ZSkpOwogICAgICAgICArK2k7CiAgICAgICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBsZW5ndGgpOwogICAgICAgICBDU1NW
YWx1ZSogc2NhbGVGYWN0b3JWYWx1ZSA9IGl0ZW0oaSk7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFj
dG9yID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpzY2FsZUZhY3RvclZhbHVlKS5mbG9h
dFZhbHVlKCk7CiAKICAgICAgICAgSW1hZ2VXaXRoU2NhbGUgaW1hZ2U7Ci0gICAgICAgIGltYWdl
LmltYWdlVVJMID0gaW1hZ2VVUkw7CisgICAgICAgIGltYWdlLnZhbHVlID0gaW1hZ2VWYWx1ZTsK
ICAgICAgICAgaW1hZ2Uuc2NhbGVGYWN0b3IgPSBzY2FsZUZhY3RvcjsKICAgICAgICAgbV9pbWFn
ZXNJblNldC5hcHBlbmQoaW1hZ2UpOwogICAgICAgICArK2k7CkBAIC03MCw3ICs3MCw3IEBAIHZv
aWQgQ1NTSW1hZ2VTZXRWYWx1ZTo6ZmlsbEltYWdlU2V0KCkKICAgICBzdGQ6OnNvcnQobV9pbWFn
ZXNJblNldC5iZWdpbigpLCBtX2ltYWdlc0luU2V0LmVuZCgpLCBDU1NJbWFnZVNldFZhbHVlOjpj
b21wYXJlQnlTY2FsZUZhY3Rvcik7CiB9CiAKLUNTU0ltYWdlU2V0VmFsdWU6OkltYWdlV2l0aFNj
YWxlIENTU0ltYWdlU2V0VmFsdWU6OmJlc3RJbWFnZUZvclNjYWxlRmFjdG9yKCkKK0ltYWdlV2l0
aFNjYWxlIENTU0ltYWdlU2V0VmFsdWU6OmJlc3RJbWFnZUZvclNjYWxlRmFjdG9yKCkKIHsKICAg
ICBpZiAoIW1faW1hZ2VzSW5TZXQuc2l6ZSgpKQogICAgICAgICBmaWxsSW1hZ2VTZXQoKTsKQEAg
LTg1LDQyICs4NSw0OSBAQCBDU1NJbWFnZVNldFZhbHVlOjpJbWFnZVdpdGhTY2FsZSBDU1NJbWFn
CiAgICAgcmV0dXJuIGltYWdlOwogfQogCi1zdGQ6OnBhaXI8Q2FjaGVkSW1hZ2UqLCBmbG9hdD4g
Q1NTSW1hZ2VTZXRWYWx1ZTo6bG9hZEJlc3RGaXRJbWFnZShDYWNoZWRSZXNvdXJjZUxvYWRlciYg
bG9hZGVyLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCitDYWNoZWRJbWFn
ZSogQ1NTSW1hZ2VTZXRWYWx1ZTo6Y2FjaGVkSW1hZ2UoKSBjb25zdAogewotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGxvYWRlci5kb2N1bWVudCgpOwotICAgIEFTU0VSVChkb2N1bWVudCk7Cisg
ICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KG1fc2VsZWN0ZWRJbWFnZVZhbHVlKSkKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KCptX3NlbGVjdGVkSW1hZ2VWYWx1ZSkuY2Fj
aGVkSW1hZ2UoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KIAotICAgIHVwZGF0ZURldmljZVNj
YWxlRmFjdG9yKCpkb2N1bWVudCk7CitJbWFnZVdpdGhTY2FsZSBDU1NJbWFnZVNldFZhbHVlOjpz
ZWxlY3RCZXN0Rml0SW1hZ2UoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQoreworICAgIHVwZGF0
ZURldmljZVNjYWxlRmFjdG9yKGRvY3VtZW50KTsKIAogICAgIGlmICghbV9hY2Nlc3NlZEJlc3RG
aXRJbWFnZSkgewogICAgICAgICBtX2FjY2Vzc2VkQmVzdEZpdEltYWdlID0gdHJ1ZTsKLQotICAg
ICAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwgd2Ugd2FudCB0byB0YWtlIG11Y2ggbW9yZSB0
aGFuIGRldmljZVNjYWxlRmFjdG9yIGludG8gYWNvdW50IGhlcmUuCi0gICAgICAgIC8vIEFsbCBm
b3JtcyBvZiBzY2FsZSBzaG91bGQgYmUgaW5jbHVkZWQ6IFBhZ2U6OnBhZ2VTY2FsZUZhY3Rvcigp
LCBGcmFtZTo6cGFnZVpvb21GYWN0b3IoKSwKLSAgICAgICAgLy8gYW5kIGFueSBDU1MgdHJhbnNm
b3Jtcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNjk4Ci0gICAg
ICAgIEltYWdlV2l0aFNjYWxlIGltYWdlID0gYmVzdEltYWdlRm9yU2NhbGVGYWN0b3IoKTsKLQot
ICAgICAgICBSZXNvdXJjZUxvYWRlck9wdGlvbnMgbG9hZE9wdGlvbnMgPSBvcHRpb25zOwotICAg
ICAgICBsb2FkT3B0aW9ucy5sb2FkZWRGcm9tT3BhcXVlU291cmNlID0gbV9sb2FkZWRGcm9tT3Bh
cXVlU291cmNlOwotICAgICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJj
ZVJlcXVlc3QoZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGltYWdlLmltYWdlVVJMKSksIGxvYWRPcHRp
b25zKTsKLSAgICAgICAgcmVxdWVzdC5zZXRJbml0aWF0b3IoY2FjaGVkUmVzb3VyY2VSZXF1ZXN0
SW5pdGlhdG9ycygpLmNzcyk7Ci0gICAgICAgIGlmIChvcHRpb25zLm1vZGUgPT0gRmV0Y2hPcHRp
b25zOjpNb2RlOjpDb3JzKQotICAgICAgICAgICAgcmVxdWVzdC51cGRhdGVGb3JBY2Nlc3NDb250
cm9sKCpkb2N1bWVudCk7Ci0KLSAgICAgICAgbV9jYWNoZWRJbWFnZSA9IGxvYWRlci5yZXF1ZXN0
SW1hZ2UoV1RGTW92ZShyZXF1ZXN0KSkudmFsdWVfb3IobnVsbHB0cik7Ci0gICAgICAgIG1fYmVz
dEZpdEltYWdlU2NhbGVGYWN0b3IgPSBpbWFnZS5zY2FsZUZhY3RvcjsKKyAgICAgICAgbV9iZXN0
Rml0SW1hZ2UgPSBiZXN0SW1hZ2VGb3JTY2FsZUZhY3RvcigpOwogICAgIH0KLSAgICByZXR1cm4g
eyBtX2NhY2hlZEltYWdlLmdldCgpLCBtX2Jlc3RGaXRJbWFnZVNjYWxlRmFjdG9yIH07CisKKyAg
ICByZXR1cm4gbV9iZXN0Rml0SW1hZ2U7CiB9CiAKIHZvaWQgQ1NTSW1hZ2VTZXRWYWx1ZTo6dXBk
YXRlRGV2aWNlU2NhbGVGYWN0b3IoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQogeworCisgICAg
Ly8gRklYTUU6IEluIHRoZSBmdXR1cmUsIHdlIHdhbnQgdG8gdGFrZSBtdWNoIG1vcmUgdGhhbiBk
ZXZpY2VTY2FsZUZhY3RvciBpbnRvIGFjb3VudCBoZXJlLgorICAgIC8vIEFsbCBmb3JtcyBvZiBz
Y2FsZSBzaG91bGQgYmUgaW5jbHVkZWQ6IFBhZ2U6OnBhZ2VTY2FsZUZhY3RvcigpLCBGcmFtZTo6
cGFnZVpvb21GYWN0b3IoKSwKKyAgICAvLyBhbmQgYW55IENTUyB0cmFuc2Zvcm1zLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE2OTgKICAgICBmbG9hdCBkZXZpY2VT
Y2FsZUZhY3RvciA9IGRvY3VtZW50LnBhZ2UoKSA/IGRvY3VtZW50LnBhZ2UoKS0+ZGV2aWNlU2Nh
bGVGYWN0b3IoKSA6IDE7CiAgICAgaWYgKGRldmljZVNjYWxlRmFjdG9yID09IG1fZGV2aWNlU2Nh
bGVGYWN0b3IpCiAgICAgICAgIHJldHVybjsKICAgICBtX2RldmljZVNjYWxlRmFjdG9yID0gZGV2
aWNlU2NhbGVGYWN0b3I7CiAgICAgbV9hY2Nlc3NlZEJlc3RGaXRJbWFnZSA9IGZhbHNlOwotICAg
IG1fY2FjaGVkSW1hZ2UgPSBudWxscHRyOworICAgIG1fc2VsZWN0ZWRJbWFnZVZhbHVlID0gbnVs
bHB0cjsKK30KKworUmVmPENTU0ltYWdlU2V0VmFsdWU+IENTU0ltYWdlU2V0VmFsdWU6OmltYWdl
U2V0V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkK
K3sKKyAgICBSZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gcmVzdWx0ID0gQ1NTSW1hZ2VTZXRWYWx1ZTo6
Y3JlYXRlKCk7CisgICAgc2l6ZV90IGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpICsgMSA8IGxlbmd0aDsgaSArPSAyKSB7CisgICAgICAgIHJlc3VsdC0+
YXBwZW5kKGJ1aWxkZXJTdGF0ZS5yZXNvbHZlSW1hZ2VTdHlsZXMoKml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soaSkpKTsKKyAgICAgICAgcmVzdWx0LT5hcHBlbmQoKml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soaSArIDEpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBTdHJpbmcgQ1NT
SW1hZ2VTZXRWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CkBAIC0xNTUsOSArMTYyLDcgQEAg
U3RyaW5nIENTU0ltYWdlU2V0VmFsdWU6OmN1c3RvbUNTU1RleHQoKQogCiBib29sIENTU0ltYWdl
U2V0VmFsdWU6OnRyYXZlcnNlU3VicmVzb3VyY2VzKGNvbnN0IFdURjo6RnVuY3Rpb248Ym9vbCAo
Y29uc3QgQ2FjaGVkUmVzb3VyY2UmKT4mIGhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2Nh
Y2hlZEltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGhhbmRsZXIoKm1f
Y2FjaGVkSW1hZ2UpOworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2VWYWx1ZSAmJiBtX3NlbGVj
dGVkSW1hZ2VWYWx1ZS0+dHJhdmVyc2VTdWJyZXNvdXJjZXMoaGFuZGxlcik7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUu
aAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNTMgKzI5LDU0IEBACiAjaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlck9wdGlvbnMuaCIKICNp
bmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FjaGVkSW1hZ2U7CiBjbGFzcyBDYWNoZWRSZXNvdXJj
ZUxvYWRlcjsKK2NsYXNzIENTU0ltYWdlVmFsdWU7CiBjbGFzcyBEb2N1bWVudDsKIAorbmFtZXNw
YWNlIFN0eWxlIHsKK2NsYXNzIEJ1aWxkZXJTdGF0ZTsKK30KKworc3RydWN0IEltYWdlV2l0aFNj
YWxlIHsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOworICAgIGZsb2F0IHNjYWxlRmFjdG9y
IHsgMSB9OworfTsKKwogY2xhc3MgQ1NTSW1hZ2VTZXRWYWx1ZSBmaW5hbCA6IHB1YmxpYyBDU1NW
YWx1ZUxpc3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gY3Jl
YXRlKExvYWRlZEZyb21PcGFxdWVTb3VyY2UgbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ltYWdlU2V0VmFsdWUobG9hZGVkRnJv
bU9wYXF1ZVNvdXJjZSkpOwotICAgIH0KKyAgICBzdGF0aWMgUmVmPENTU0ltYWdlU2V0VmFsdWU+
IGNyZWF0ZSgpOwogICAgIH5DU1NJbWFnZVNldFZhbHVlKCk7CiAKLSAgICBzdGQ6OnBhaXI8Q2Fj
aGVkSW1hZ2UqLCBmbG9hdD4gIGxvYWRCZXN0Rml0SW1hZ2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXIm
LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKLSAgICBDYWNoZWRJbWFnZSogY2FjaGVk
SW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEltYWdlLmdldCgpOyB9CisgICAgSW1hZ2VX
aXRoU2NhbGUgc2VsZWN0QmVzdEZpdEltYWdlKGNvbnN0IERvY3VtZW50Jik7CisgICAgQ2FjaGVk
SW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3Q7CiAKICAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4dCgp
IGNvbnN0OwogCi0gICAgc3RydWN0IEltYWdlV2l0aFNjYWxlIHsKLSAgICAgICAgVVJMIGltYWdl
VVJMOwotICAgICAgICBmbG9hdCBzY2FsZUZhY3RvcjsKLSAgICB9OwotCiAgICAgYm9vbCB0cmF2
ZXJzZVN1YnJlc291cmNlcyhjb25zdCBXVEY6OkZ1bmN0aW9uPGJvb2wgKGNvbnN0IENhY2hlZFJl
c291cmNlJik+JiBoYW5kbGVyKSBjb25zdDsKIAogICAgIHZvaWQgdXBkYXRlRGV2aWNlU2NhbGVG
YWN0b3IoY29uc3QgRG9jdW1lbnQmKTsKIAotICAgIFVSTCBiZXN0SW1hZ2VGb3JTY2FsZUZhY3Rv
clVSTCgpIHsgcmV0dXJuIGJlc3RJbWFnZUZvclNjYWxlRmFjdG9yKCkuaW1hZ2VVUkw7IH0KKyAg
ICBSZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gaW1hZ2VTZXRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VXaXRoU2NhbGUgYmVzdElt
YWdlRm9yU2NhbGVGYWN0b3IoKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDU1NJbWFnZVNl
dFZhbHVlKExvYWRlZEZyb21PcGFxdWVTb3VyY2UpOworICAgIENTU0ltYWdlU2V0VmFsdWUoKTsK
IAogICAgIHZvaWQgZmlsbEltYWdlU2V0KCk7CiAgICAgc3RhdGljIGlubGluZSBib29sIGNvbXBh
cmVCeVNjYWxlRmFjdG9yKEltYWdlV2l0aFNjYWxlIGZpcnN0LCBJbWFnZVdpdGhTY2FsZSBzZWNv
bmQpIHsgcmV0dXJuIGZpcnN0LnNjYWxlRmFjdG9yIDwgc2Vjb25kLnNjYWxlRmFjdG9yOyB9CiAK
LSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRJbWFnZT4gbV9jYWNoZWRJbWFnZTsKKyAg
ICBSZWZQdHI8Q1NTVmFsdWU+IG1fc2VsZWN0ZWRJbWFnZVZhbHVlOwogICAgIGJvb2wgbV9hY2Nl
c3NlZEJlc3RGaXRJbWFnZSB7IGZhbHNlIH07Ci0gICAgZmxvYXQgbV9iZXN0Rml0SW1hZ2VTY2Fs
ZUZhY3RvciB7IDEgfTsKKyAgICBJbWFnZVdpdGhTY2FsZSBtX2Jlc3RGaXRJbWFnZTsKICAgICBm
bG9hdCBtX2RldmljZVNjYWxlRmFjdG9yIHsgMSB9OwotCiAgICAgVmVjdG9yPEltYWdlV2l0aFNj
YWxlPiBtX2ltYWdlc0luU2V0OwotICAgIExvYWRlZEZyb21PcGFxdWVTb3VyY2UgbV9sb2FkZWRG
cm9tT3BhcXVlU291cmNlIHsgTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6Tm8gfTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UHJvcGVydHlQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjE1MSw3ICsyMTUxLDcgQEAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZQogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUN1cnNvcihDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgYm9vbCBpblF1aXJr
c01vZGUpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdDsKLSAgICB3aGlsZSAoUmVm
UHRyPENTU1ZhbHVlPiBpbWFnZSA9IGNvbnN1bWVJbWFnZShyYW5nZSwgY29udGV4dCwgQ29uc3Vt
ZUdlbmVyYXRlZEltYWdlOjpGb3JiaWQpKSB7CisgICAgd2hpbGUgKFJlZlB0cjxDU1NWYWx1ZT4g
aW1hZ2UgPSBjb25zdW1lSW1hZ2UocmFuZ2UsIGNvbnRleHQsIHsgQWxsb3dlZEltYWdlVHlwZXM6
OlVSTEZ1bmN0aW9uLCBBbGxvd2VkSW1hZ2VUeXBlczo6SW1hZ2VTZXQgfSkpIHsKICAgICAgICAg
ZG91YmxlIG51bTsKICAgICAgICAgSW50UG9pbnQgaG90U3BvdCgtMSwgLTEpOwogICAgICAgICBi
b29sIGhvdFNwb3RTcGVjaWZpZWQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9u
IDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3OSwyNCArMTQ3OSwxNiBAQCBzdGF0aWMg
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lR2VuZXJhdGVkCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotc3RhdGljIFN0cmluZ1ZpZXcgY29uc3VtZVVybE9yU3RyaW5nQXNTdHJpbmdWaWV3KENTU1Bh
cnNlclRva2VuUmFuZ2UmIGFyZ3MpCi17Ci0gICAgaWYgKGFyZ3MucGVlaygpLnR5cGUoKSA9PSBT
dHJpbmdUb2tlbikKLSAgICAgICAgcmV0dXJuIGFyZ3MuY29uc3VtZUluY2x1ZGluZ1doaXRlc3Bh
Y2UoKS52YWx1ZSgpOwotICAgIHJldHVybiBjb25zdW1lVXJsQXNTdHJpbmdWaWV3KGFyZ3MpOwot
fQotCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2VTZXQoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCitzdGF0aWMg
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2VTZXQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIE9wdGlvblNldDxBbGxvd2VkSW1h
Z2VUeXBlcz4gYWxsb3dlZEltYWdlVHlwZXMpCiB7CiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBy
YW5nZUNvcHkgPSByYW5nZTsKICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGFyZ3MgPSBjb25zdW1l
RnVuY3Rpb24ocmFuZ2VDb3B5KTsKLSAgICBSZWZQdHI8Q1NTSW1hZ2VTZXRWYWx1ZT4gaW1hZ2VT
ZXQgPSBDU1NJbWFnZVNldFZhbHVlOjpjcmVhdGUoY29udGV4dC5pc0NvbnRlbnRPcGFxdWUgPyBM
b2FkZWRGcm9tT3BhcXVlU291cmNlOjpZZXMgOiBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpObyk7
CisgICAgUmVmUHRyPENTU0ltYWdlU2V0VmFsdWU+IGltYWdlU2V0ID0gQ1NTSW1hZ2VTZXRWYWx1
ZTo6Y3JlYXRlKCk7CiAgICAgZG8gewotICAgICAgICBBdG9tU3RyaW5nIHVybFZhbHVlID0gY29u
c3VtZVVybE9yU3RyaW5nQXNTdHJpbmdWaWV3KGFyZ3MpLnRvQXRvbVN0cmluZygpOwotICAgICAg
ICBpZiAodXJsVmFsdWUuaXNOdWxsKCkpCisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gaW1hZ2Ug
PSBjb25zdW1lSW1hZ2UoYXJncywgY29udGV4dCwgKGFsbG93ZWRJbWFnZVR5cGVzIHwgQWxsb3dl
ZEltYWdlVHlwZXM6OlJhd1N0cmluZ0FzVVJMKSAtIEFsbG93ZWRJbWFnZVR5cGVzOjpJbWFnZVNl
dCk7CisgICAgICAgIGlmICghaW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGltYWdlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKGNv
bXBsZXRlVVJMKGNvbnRleHQsIHVybFZhbHVlKSwgY29udGV4dC5pc0NvbnRlbnRPcGFxdWUgPyBM
b2FkZWRGcm9tT3BhcXVlU291cmNlOjpZZXMgOiBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpObyk7
CiAgICAgICAgIGltYWdlU2V0LT5hcHBlbmQoaW1hZ2UucmVsZWFzZU5vbk51bGwoKSk7CiAKICAg
ICAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gYXJncy5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpOwpAQCAtMTcxMSwxOSArMTcwMywyNSBAQCBSZWZQdHI8Q1NTU2hhZG93VmFs
dWU+IGNvbnN1bWVTaW5nbGVTaGFkCiAgICAgcmV0dXJuIENTU1NoYWRvd1ZhbHVlOjpjcmVhdGUo
V1RGTW92ZShob3Jpem9udGFsT2Zmc2V0KSwgV1RGTW92ZSh2ZXJ0aWNhbE9mZnNldCksIFdURk1v
dmUoYmx1clJhZGl1cyksIFdURk1vdmUoc3ByZWFkRGlzdGFuY2UpLCBXVEZNb3ZlKHN0eWxlKSwg
V1RGTW92ZShjb2xvcikpOwogfQogCi1SZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0LCBDb25zdW1l
R2VuZXJhdGVkSW1hZ2UgZ2VuZXJhdGVkSW1hZ2UpCitSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJ
bWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0
LCBPcHRpb25TZXQ8QWxsb3dlZEltYWdlVHlwZXM+IGFsbG93ZWRJbWFnZVR5cGVzKQogewotICAg
IEF0b21TdHJpbmcgdXJpID0gY29uc3VtZVVybEFzU3RyaW5nVmlldyhyYW5nZSkudG9BdG9tU3Ry
aW5nKCk7Ci0gICAgaWYgKCF1cmkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBDU1NJbWFnZVZh
bHVlOjpjcmVhdGUoY29tcGxldGVVUkwoY29udGV4dCwgdXJpKSwgY29udGV4dC5pc0NvbnRlbnRP
cGFxdWUgPyBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpZZXMgOiBMb2FkZWRGcm9tT3BhcXVlU291
cmNlOjpObyk7CisgICAgaWYgKChyYW5nZS5wZWVrKCkudHlwZSgpID09IFN0cmluZ1Rva2VuKSAm
JiAoYWxsb3dlZEltYWdlVHlwZXMgJiBBbGxvd2VkSW1hZ2VUeXBlczo6UmF3U3RyaW5nQXNVUkwp
KQorICAgICAgICByZXR1cm4gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKGNvbXBsZXRlVVJMKGNvbnRl
eHQsIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFsdWUoKS50b0F0b21TdHJp
bmcoKSksIGNvbnRleHQuaXNDb250ZW50T3BhcXVlID8gTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6
WWVzIDogTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6Tm8pOwogCiAgICAgaWYgKHJhbmdlLnBlZWso
KS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbikgewogICAgICAgICBDU1NWYWx1ZUlEIGlkID0gcmFu
Z2UucGVlaygpLmZ1bmN0aW9uSWQoKTsKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlV2Via2l0
SW1hZ2VTZXQgfHwgaWQgPT0gQ1NTVmFsdWVJbWFnZVNldCkKLSAgICAgICAgICAgIHJldHVybiBj
b25zdW1lSW1hZ2VTZXQocmFuZ2UsIGNvbnRleHQpOwotICAgICAgICBpZiAoZ2VuZXJhdGVkSW1h
Z2UgPT0gQ29uc3VtZUdlbmVyYXRlZEltYWdlOjpBbGxvdyAmJiBpc0dlbmVyYXRlZEltYWdlKGlk
KSkKKyAgICAgICAgaWYgKChhbGxvd2VkSW1hZ2VUeXBlcyAmIEFsbG93ZWRJbWFnZVR5cGVzOjpJ
bWFnZVNldCkgJiYgKGlkID09IENTU1ZhbHVlV2Via2l0SW1hZ2VTZXQgfHwgaWQgPT0gQ1NTVmFs
dWVJbWFnZVNldCkpCisgICAgICAgICAgICByZXR1cm4gY29uc3VtZUltYWdlU2V0KHJhbmdlLCBj
b250ZXh0LCBhbGxvd2VkSW1hZ2VUeXBlcyk7CisgICAgICAgIGlmICgoYWxsb3dlZEltYWdlVHlw
ZXMgJiBBbGxvd2VkSW1hZ2VUeXBlczo6R2VuZXJhdGVkSW1hZ2UpICYmIGlzR2VuZXJhdGVkSW1h
Z2UoaWQpKQogICAgICAgICAgICAgcmV0dXJuIGNvbnN1bWVHZW5lcmF0ZWRJbWFnZShyYW5nZSwg
Y29udGV4dCk7CiAgICAgfQorCisgICAgaWYgKGFsbG93ZWRJbWFnZVR5cGVzICYgQWxsb3dlZElt
YWdlVHlwZXM6OlVSTEZ1bmN0aW9uKSB7CisgICAgICAgIGF1dG8gdXJpID0gY29uc3VtZVVybEFz
U3RyaW5nVmlldyhyYW5nZSk7CisgICAgICAgIGlmICghdXJpLmlzTnVsbCgpKQorICAgICAgICAg
ICAgcmV0dXJuIENTU0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTChjb250ZXh0LCB1cmku
dG9BdG9tU3RyaW5nKCkpLCBjb250ZXh0LmlzQ29udGVudE9wYXF1ZSA/IExvYWRlZEZyb21PcGFx
dWVTb3VyY2U6OlllcyA6IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6Ok5vKTsKKyAgICB9CisKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCShyZXZpc2lvbiAyNTQ4MDgpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiQ1NTU2hhZG93VmFsdWUu
aCIKICNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKICNpbmNsdWRlICJMZW5ndGguaCIgLy8gRm9y
IFZhbHVlUmFuZ2UKKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtODksMTIgKzkwLDE1IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZVBvc2l0aW8KIGJvb2wgY29uc3VtZVBvc2l0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmLCBD
U1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBQb3NpdGlvblN5bnRheCwgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiYgcmVzdWx0WCwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgcmVzdWx0
WSk7CiBib29sIGNvbnN1bWVPbmVPclR3b1ZhbHVlZFBvc2l0aW9uKENTU1BhcnNlclRva2VuUmFu
Z2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+JiByZXN1bHRYLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiByZXN1bHRZKTsKIAotZW51
bSBjbGFzcyBDb25zdW1lR2VuZXJhdGVkSW1hZ2UgewotICAgIEFsbG93LAotICAgIEZvcmJpZAor
ZW51bSBjbGFzcyBBbGxvd2VkSW1hZ2VUeXBlcyA6IHVpbnQ4X3QgeworICAgIFVSTEZ1bmN0aW9u
ID0gMSA8PCAwLAorICAgIFJhd1N0cmluZ0FzVVJMID0gMSA8PCAxLAorICAgIEltYWdlU2V0ID0g
MSA8PCAyLAorICAgIEdlbmVyYXRlZEltYWdlID0gMSA8PCAzCiB9OwogCi1SZWZQdHI8Q1NTVmFs
dWU+IGNvbnN1bWVJbWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyQ29udGV4dCwg
Q29uc3VtZUdlbmVyYXRlZEltYWdlID0gQ29uc3VtZUdlbmVyYXRlZEltYWdlOjpBbGxvdyk7CitS
ZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFy
c2VyQ29udGV4dCwgT3B0aW9uU2V0PEFsbG93ZWRJbWFnZVR5cGVzPiA9IHsgQWxsb3dlZEltYWdl
VHlwZXM6OlVSTEZ1bmN0aW9uLCBBbGxvd2VkSW1hZ2VUeXBlczo6SW1hZ2VTZXQsIEFsbG93ZWRJ
bWFnZVR5cGVzOjpHZW5lcmF0ZWRJbWFnZSB9KTsKKwogUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1l
SW1hZ2VPck5vbmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlckNvbnRleHQpOwogCiBl
bnVtIGNsYXNzIEFsbG93ZWRGaWx0ZXJGdW5jdGlvbnMgewpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAkocmV2
aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVy
dHlBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMsNiArMzMzLDEyIEBAIHN0YXRp
YyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRnUKICAgICBpZiAoIWZyb20gfHwgIXRv
KQogICAgICAgICByZXR1cm4gdG87CiAKKyAgICBmcm9tID0gZnJvbS0+c2VsZWN0ZWRJbWFnZSgp
OworICAgIHRvID0gdG8tPnNlbGVjdGVkSW1hZ2UoKTsKKworICAgIGlmICghZnJvbSB8fCAhdG8p
CisgICAgICAgIHJldHVybiB0bzsgICAgCisKICAgICAvLyBBbmltYXRpb24gYmV0d2VlbiB0d28g
Z2VuZXJhdGVkIGltYWdlcy4gQ3Jvc3MgZmFkZSBmb3IgYWxsIG90aGVyIGNhc2VzLgogICAgIGlm
IChpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVHZW5lcmF0ZWRJbWFn
ZT4oKnRvKSkgewogICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlJiBmcm9tR2VuZXJhdGVk
ID0gZG93bmNhc3Q8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pLmltYWdlVmFsdWUoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYyLDcgKzk2Miw3IEBAIHZv
aWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWUKIAogICAgICAgICAgICAgYXV0
byBkcmF3UmVzdWx0ID0gY29udGV4dC5kcmF3VGlsZWRJbWFnZSgqaW1hZ2UsIGdlb21ldHJ5LmRl
c3RSZWN0KCksIHRvTGF5b3V0UG9pbnQoZ2VvbWV0cnkucmVsYXRpdmVQaGFzZSgpKSwgZ2VvbWV0
cnkudGlsZVNpemUoKSwgZ2VvbWV0cnkuc3BhY2VTaXplKCksIG9wdGlvbnMpOwogICAgICAgICAg
ICAgaWYgKGRyYXdSZXN1bHQgPT0gSW1hZ2VEcmF3UmVzdWx0OjpEaWRSZXF1ZXN0RGVjb2Rpbmcp
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoYmdJbWFnZS0+aXNDYWNoZWRJbWFnZSgpKTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoYmdJbWFnZS0+aGFzQ2FjaGVkSW1hZ2UoKSk7CiAgICAgICAg
ICAgICAgICAgYmdJbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+YWRkQ2xpZW50V2FpdGluZ0ZvckFzeW5j
RGVjb2RpbmcoKnRoaXMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlU3R5
bGVJbWFnZS5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDcgKzQ0LDcgQEAgUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2U6OlJlbmRlckltYQogCiB2
b2lkIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlOjppbml0aWFsaXplKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyKQogewotICAgIFJlbmRlckltYWdlUmVzb3VyY2U6OmluaXRpYWxpemUocmVu
ZGVyZXIsIG1fc3R5bGVJbWFnZS0+aXNDYWNoZWRJbWFnZSgpID8gbV9zdHlsZUltYWdlLmdldCgp
LmNhY2hlZEltYWdlKCkgOiBudWxscHRyKTsKKyAgICBSZW5kZXJJbWFnZVJlc291cmNlOjppbml0
aWFsaXplKHJlbmRlcmVyLCBtX3N0eWxlSW1hZ2UtPmhhc0NhY2hlZEltYWdlKCkgPyBtX3N0eWxl
SW1hZ2UuZ2V0KCkuY2FjaGVkSW1hZ2UoKSA6IG51bGxwdHIpOwogICAgIG1fc3R5bGVJbWFnZS0+
YWRkQ2xpZW50KHRoaXMtPnJlbmRlcmVyKCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24gMjU0ODA4KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxMDcsNyArMjEwNyw3IEBAIHN0YXRpYyBib29sIGNhbkRpcmVjdGx5Q29t
cG9zaXRlQmFja2dyb3UKIAogICAgIC8vIEZJWE1FOiBzdXBwb3J0IGdyYWRpZW50cyB3aXRoIGlz
R2VuZXJhdGVkSW1hZ2UuCiAgICAgYXV0byogc3R5bGVJbWFnZSA9IGZpbGxMYXllci5pbWFnZSgp
OwotICAgIGlmICghc3R5bGVJbWFnZS0+aXNDYWNoZWRJbWFnZSgpKQorICAgIGlmICghc3R5bGVJ
bWFnZS0+aGFzQ2FjaGVkSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0
byogaW1hZ2UgPSBzdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZSgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYXBlVmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmNwcAkocmV2aXNpb24g
MjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYXBlVmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIGJvb2wgU2hhcGVWYWx1ZTo6aXNJbWFn
ZVZhbGlkKCkgY29uc3QKIHsKICAgICBpZiAoIW1faW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAobV9pbWFnZS0+aXNDYWNoZWRJbWFnZSgpKSB7CisgICAgaWYgKG1faW1hZ2Ut
Pmhhc0NhY2hlZEltYWdlKCkpIHsKICAgICAgICAgYXV0byogY2FjaGVkSW1hZ2UgPSBtX2ltYWdl
LT5jYWNoZWRJbWFnZSgpOwogICAgICAgICByZXR1cm4gY2FjaGVkSW1hZ2UgJiYgY2FjaGVkSW1h
Z2UtPmhhc0ltYWdlKCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmNwcAkocmV2aXNpb24gMjU0ODA4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCw4ICsyNCw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgogCi0jaW5jbHVkZSAiQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5o
IgotI2luY2x1ZGUgIkNTU0ltYWdlU2V0VmFsdWUuaCIKICNpbmNsdWRlICJDU1NJbWFnZVZhbHVl
LmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50Lmgi
CkBAIC0zMywxOSArMzEsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TdHlsZUNhY2hl
ZEltYWdlOjpTdHlsZUNhY2hlZEltYWdlKENTU1ZhbHVlJiBjc3NWYWx1ZSkKK1N0eWxlQ2FjaGVk
SW1hZ2U6OlN0eWxlQ2FjaGVkSW1hZ2UoQ1NTSW1hZ2VWYWx1ZSYgY3NzVmFsdWUsIGZsb2F0IHNj
YWxlRmFjdG9yKQogICAgIDogbV9jc3NWYWx1ZShjc3NWYWx1ZSkKKyAgICAsIG1fc2NhbGVGYWN0
b3Ioc2NhbGVGYWN0b3IpCiB7Ci0gICAgQVNTRVJUKGlzPENTU0ltYWdlVmFsdWU+KG1fY3NzVmFs
dWUpIHx8IGlzPENTU0ltYWdlU2V0VmFsdWU+KG1fY3NzVmFsdWUpIHx8IGlzPENTU0N1cnNvcklt
YWdlVmFsdWU+KG1fY3NzVmFsdWUpKTsKLQogICAgIG1faXNDYWNoZWRJbWFnZSA9IHRydWU7Ci0K
LSAgICAvLyBDU1NJbWFnZVZhbHVlIGRvZXNuJ3QgZ2V0IGludmFsaWRhdGVkIHNvIHdlIGNhbiBn
cmFiIHRoZSBDYWNoZWRJbWFnZSBpbW1lZGlhdGVseSBpZiBpdCBleGlzdHMuCi0gICAgaWYgKGlz
PENTU0ltYWdlVmFsdWU+KG1fY3NzVmFsdWUpKSB7Ci0gICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBk
b3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX2Nzc1ZhbHVlLmdldCgpKS5jYWNoZWRJbWFnZSgpOwot
ICAgICAgICBpZiAobV9jYWNoZWRJbWFnZSkKLSAgICAgICAgICAgIG1faXNQZW5kaW5nID0gZmFs
c2U7Ci0gICAgfQorICAgIG1fY2FjaGVkSW1hZ2UgPSBtX2Nzc1ZhbHVlLT5jYWNoZWRJbWFnZSgp
OworICAgIGlmIChtX2NhY2hlZEltYWdlKQorICAgICAgICBtX2lzUGVuZGluZyA9IGZhbHNlOwog
fQogCiBTdHlsZUNhY2hlZEltYWdlOjp+U3R5bGVDYWNoZWRJbWFnZSgpID0gZGVmYXVsdDsKQEAg
LTY4LDQxICs2MSwxNCBAQCBib29sIFN0eWxlQ2FjaGVkSW1hZ2U6Om9wZXJhdG9yPT0oY29uc3Qg
CiAKIFVSTCBTdHlsZUNhY2hlZEltYWdlOjppbWFnZVVSTCgpCiB7Ci0gICAgaWYgKGlzPENTU0lt
YWdlVmFsdWU+KG1fY3NzVmFsdWUpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VW
YWx1ZT4obV9jc3NWYWx1ZS5nZXQoKSkudXJsKCk7Ci0KLSAgICBpZiAoaXM8Q1NTSW1hZ2VTZXRW
YWx1ZT4obV9jc3NWYWx1ZSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVNldFZh
bHVlPihtX2Nzc1ZhbHVlLmdldCgpKS5iZXN0SW1hZ2VGb3JTY2FsZUZhY3RvclVSTCgpOwotCi0g
ICAgaWYgKGlzPENTU0N1cnNvckltYWdlVmFsdWU+KG1fY3NzVmFsdWUuZ2V0KCkpKQotICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZS5nZXQoKSku
aW1hZ2VVUkwoKTsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07
CisgICAgcmV0dXJuIG1fY3NzVmFsdWUtPnVybCgpOwogfQogCiB2b2lkIFN0eWxlQ2FjaGVkSW1h
Z2U6OmxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2Fk
ZXJPcHRpb25zJiBvcHRpb25zKQogewogICAgIEFTU0VSVChtX2lzUGVuZGluZyk7CiAgICAgbV9p
c1BlbmRpbmcgPSBmYWxzZTsKLQotICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPihtX2Nzc1ZhbHVl
KSkgewotICAgICAgICBhdXRvJiBpbWFnZVZhbHVlID0gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4o
bV9jc3NWYWx1ZS5nZXQoKSk7Ci0gICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBpbWFnZVZhbHVlLmxv
YWRJbWFnZShsb2FkZXIsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KG1fY3NzVmFsdWUpKSB7Ci0gICAgICAgIGF1dG8mIGlt
YWdlU2V0VmFsdWUgPSBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPihtX2Nzc1ZhbHVlLmdldCgp
KTsKLSAgICAgICAgc3RkOjp0aWUobV9jYWNoZWRJbWFnZSwgbV9zY2FsZUZhY3RvcikgPSBpbWFn
ZVNldFZhbHVlLmxvYWRCZXN0Rml0SW1hZ2UobG9hZGVyLCBvcHRpb25zKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChpczxDU1NDdXJzb3JJbWFnZVZhbHVlPihtX2Nzc1ZhbHVl
LmdldCgpKSkgewotICAgICAgICBhdXRvJiBjdXJzb3JWYWx1ZSA9IGRvd25jYXN0PENTU0N1cnNv
ckltYWdlVmFsdWU+KG1fY3NzVmFsdWUuZ2V0KCkpOwotICAgICAgICBzdGQ6OnRpZShtX2NhY2hl
ZEltYWdlLCBtX3NjYWxlRmFjdG9yKSA9IGN1cnNvclZhbHVlLmxvYWRJbWFnZShsb2FkZXIsIG9w
dGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG1fY2FjaGVkSW1hZ2UgPSBtX2Nz
c1ZhbHVlLT5sb2FkSW1hZ2UobG9hZGVyLCBvcHRpb25zKTsKIH0KIAogQ2FjaGVkSW1hZ2UqIFN0
eWxlQ2FjaGVkSW1hZ2U6OmNhY2hlZEltYWdlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuaAkocmV2aXNpb24gMjU0
ODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIENTU1ZhbHVlOworY2xhc3MgQ1NTSW1hZ2VWYWx1ZTsKIGNsYXNzIENhY2hlZElt
YWdlOwogY2xhc3MgRG9jdW1lbnQ7CiAKIGNsYXNzIFN0eWxlQ2FjaGVkSW1hZ2UgZmluYWwgOiBw
dWJsaWMgU3R5bGVJbWFnZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxTdHlsZUNhY2hlZEltYWdlPiBjcmVhdGUoQ1NTVmFsdWUmIGNzc1Zh
bHVlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFN0eWxlQ2FjaGVkSW1hZ2UoY3NzVmFsdWUpKTsg
fQorICAgIHN0YXRpYyBSZWY8U3R5bGVDYWNoZWRJbWFnZT4gY3JlYXRlKENTU0ltYWdlVmFsdWUm
IGNzc1ZhbHVlLCBmbG9hdCBzY2FsZUZhY3RvciA9IDEpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U3R5bGVDYWNoZWRJbWFnZShjc3NWYWx1ZSwgc2NhbGVGYWN0b3IpKTsgfQogICAgIHZpcnR1YWwg
flN0eWxlQ2FjaGVkSW1hZ2UoKTsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZUlt
YWdlJiBvdGhlcikgY29uc3QgZmluYWw7CkBAIC02NCwxMCArNjUsMTAgQEAgcHVibGljOgogICAg
IGJvb2wga25vd25Ub0JlT3BhcXVlKGNvbnN0IFJlbmRlckVsZW1lbnQqKSBjb25zdCBmaW5hbDsK
IAogcHJpdmF0ZToKLSAgICBTdHlsZUNhY2hlZEltYWdlKENTU1ZhbHVlJik7CisgICAgU3R5bGVD
YWNoZWRJbWFnZShDU1NJbWFnZVZhbHVlJiwgZmxvYXQpOwogICAgIFVSTCBpbWFnZVVSTCgpOwog
Ci0gICAgUmVmPENTU1ZhbHVlPiBtX2Nzc1ZhbHVlOworICAgIFJlZjxDU1NJbWFnZVZhbHVlPiBt
X2Nzc1ZhbHVlOwogICAgIGJvb2wgbV9pc1BlbmRpbmcgeyB0cnVlIH07CiAgICAgbXV0YWJsZSBm
bG9hdCBtX3NjYWxlRmFjdG9yIHsgMSB9OwogICAgIG11dGFibGUgQ2FjaGVkUmVzb3VyY2VIYW5k
bGU8Q2FjaGVkSW1hZ2U+IG1fY2FjaGVkSW1hZ2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1cnNvckltYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAw
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUtMjAw
OCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyAgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU3R5bGVDdXJzb3JJbWFnZS5oIgorCisjaW5jbHVkZSAiQ1NTQ3Vy
c29ySW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltYWdlU2V0VmFsdWUuaCIKKyNpbmNsdWRl
ICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIlJlbmRl
ckVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWY8U3R5bGVDdXJzb3JJbWFn
ZT4gU3R5bGVDdXJzb3JJbWFnZTo6Y3JlYXRlKENTU0N1cnNvckltYWdlVmFsdWUmIGNzc1ZhbHVl
KQoreyAKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHlsZUN1cnNvckltYWdlKGNzc1ZhbHVl
KSk7IAorfQorCitib29sIFN0eWxlQ3Vyc29ySW1hZ2U6Om9wZXJhdG9yPT0oY29uc3QgU3R5bGVJ
bWFnZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzPFN0eWxlQ3Vyc29ySW1hZ2U+KG90
aGVyKSAmJiBlcXVhbHMoZG93bmNhc3Q8U3R5bGVDdXJzb3JJbWFnZT4ob3RoZXIpKTsKK30KKwor
UmVmPENTU1ZhbHVlPiBTdHlsZUN1cnNvckltYWdlOjpjc3NWYWx1ZSgpIGNvbnN0Cit7IAorICAg
IHJldHVybiBtX2Nzc1ZhbHVlLmNvcHlSZWYoKTsgCit9CisKK1N0eWxlQ3Vyc29ySW1hZ2U6OlN0
eWxlQ3Vyc29ySW1hZ2UoQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSYgY3NzVmFsdWUpCisgICAgOiBtX2Nz
c1ZhbHVlKGNzc1ZhbHVlKQoreworICAgIG1faXNDdXJzb3JJbWFnZSA9IHRydWU7Cit9CisKK1N0
eWxlQ3Vyc29ySW1hZ2U6On5TdHlsZUN1cnNvckltYWdlKCkgPSBkZWZhdWx0OworCitJbWFnZVdp
dGhTY2FsZSBTdHlsZUN1cnNvckltYWdlOjpzZWxlY3RCZXN0Rml0SW1hZ2UoY29uc3QgRG9jdW1l
bnQmIGRvY3VtZW50KSBjb25zdAoreworICAgIHJldHVybiBtX2Nzc1ZhbHVlLT5zZWxlY3RCZXN0
Rml0SW1hZ2UoZG9jdW1lbnQpOworfQorCit2b2lkIFN0eWxlQ3Vyc29ySW1hZ2U6OnNldENvbnRh
aW5lckNvbnRleHRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29u
c3QgRmxvYXRTaXplJiBjb250YWluZXJTaXplLCBmbG9hdCBjb250YWluZXJab29tKQoreworICAg
IGlmICghaGFzQ2FjaGVkSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhY2hlZEltYWdl
KCktPnNldENvbnRhaW5lckNvbnRleHRGb3JDbGllbnQocmVuZGVyZXIsIExheW91dFNpemUoY29u
dGFpbmVyU2l6ZSksIGNvbnRhaW5lclpvb20sIG1fY3NzVmFsdWUtPmltYWdlVVJMKCkpOworfQor
Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
U3R5bGVDdXJzb3JJbWFnZS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMg
LTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1cnNvckltYWdlLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ3Vyc29y
SW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIw
MDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIw
MDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDUtMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyAgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlN0eWxlTXVsdGlJbWFnZS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIENTU0N1cnNvckltYWdlVmFsdWU7CisKK3N0cnVjdCBJbWFnZVdpdGhT
Y2FsZTsKKworY2xhc3MgU3R5bGVDdXJzb3JJbWFnZSBmaW5hbCA6IHB1YmxpYyBTdHlsZU11bHRp
SW1hZ2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRp
YyBSZWY8U3R5bGVDdXJzb3JJbWFnZT4gY3JlYXRlKENTU0N1cnNvckltYWdlVmFsdWUmKTsKKyAg
ICB2aXJ0dWFsIH5TdHlsZUN1cnNvckltYWdlKCk7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFN0eWxlSW1hZ2UmIG90aGVyKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNldENvbnRh
aW5lckNvbnRleHRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29u
c3QgRmxvYXRTaXplJiBjb250YWluZXJTaXplLCBmbG9hdCBjb250YWluZXJab29tKSBmaW5hbDsK
KyAgICBSZWY8Q1NTVmFsdWU+IGNzc1ZhbHVlKCkgY29uc3QgZmluYWw7CisgICAgSW1hZ2VXaXRo
U2NhbGUgc2VsZWN0QmVzdEZpdEltYWdlKGNvbnN0IERvY3VtZW50JikgY29uc3QgZmluYWw7CisK
KyAgICBleHBsaWNpdCBTdHlsZUN1cnNvckltYWdlKENTU0N1cnNvckltYWdlVmFsdWUmKTsKKyAg
ICBSZWY8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4gbV9jc3NWYWx1ZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19TVFlMRV9JTUFHRShTdHlsZUN1
cnNvckltYWdlLCBpc0N1cnNvckltYWdlKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuaApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1h
Z2UuaAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTggKzY3LDI4IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGZsb2F0IGltYWdlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiAxOyB9
CiAgICAgdmlydHVhbCBib29sIGtub3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJFbGVtZW50Kikg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3Qg
eyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgU3R5bGVJbWFnZSogc2VsZWN0ZWRJbWFnZSgpIHsg
cmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFN0eWxlSW1hZ2UqIHNlbGVjdGVkSW1h
Z2UoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXND
YWNoZWRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDYWNoZWRJbWFnZTsgfQogICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCBpc0dlbmVyYXRlZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pc0dlbmVy
YXRlZEltYWdlOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ3Vyc29ySW1hZ2UoKSBjb25z
dCB7IHJldHVybiBtX2lzQ3Vyc29ySW1hZ2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNJ
bWFnZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJbWFnZVNldDsgfQorCisgICAgYm9vbCBoYXND
YWNoZWRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDYWNoZWRJbWFnZSB8fCBzZWxlY3RlZElt
YWdlKCktPmlzQ2FjaGVkSW1hZ2UoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgU3R5bGVJbWFnZSgp
CiAgICAgICAgIDogbV9pc0NhY2hlZEltYWdlKGZhbHNlKQogICAgICAgICAsIG1faXNHZW5lcmF0
ZWRJbWFnZShmYWxzZSkKKyAgICAgICAgLCBtX2lzSW1hZ2VTZXQoZmFsc2UpCisgICAgICAgICwg
bV9pc0N1cnNvckltYWdlKGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgYm9vbCBtX2lzQ2FjaGVk
SW1hZ2UgOiAxOwogICAgIGJvb2wgbV9pc0dlbmVyYXRlZEltYWdlIDogMTsKKyAgICBib29sIG1f
aXNJbWFnZVNldCA6IDE7CisgICAgYm9vbCBtX2lzQ3Vyc29ySW1hZ2UgOiAxOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlSW1hZ2VTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZUltYWdlU2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0Br
ZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUu
b3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LTIwMDgsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIE5vYW0gUm9zZW50aGFs
IChub2FtQHdlYmtpdC5vcmcpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3R5
bGVJbWFnZVNldC5oIgorCisjaW5jbHVkZSAiQ1NTSW1hZ2VTZXRWYWx1ZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1JlZjxTdHlsZUltYWdlU2V0PiBTdHlsZUltYWdlU2V0OjpjcmVhdGUo
Q1NTSW1hZ2VTZXRWYWx1ZSYgY3NzVmFsdWUpCit7IAorICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFN0eWxlSW1hZ2VTZXQoY3NzVmFsdWUpKTsKK30KKworU3R5bGVJbWFnZVNldDo6U3R5bGVJbWFn
ZVNldChDU1NJbWFnZVNldFZhbHVlJiBjc3NWYWx1ZSkKKyAgICA6IG1fY3NzVmFsdWUoY3NzVmFs
dWUpCit7CisgICAgbV9pc0ltYWdlU2V0ID0gdHJ1ZTsKK30KKworYm9vbCBTdHlsZUltYWdlU2V0
OjpvcGVyYXRvcj09KGNvbnN0IFN0eWxlSW1hZ2UmIG90aGVyKSBjb25zdAoreworICAgIHJldHVy
biBpczxTdHlsZUltYWdlU2V0PihvdGhlcikgJiYgZXF1YWxzKGRvd25jYXN0PFN0eWxlSW1hZ2VT
ZXQ+KG90aGVyKSk7Cit9CisKK1N0eWxlSW1hZ2VTZXQ6On5TdHlsZUltYWdlU2V0KCkgPSBkZWZh
dWx0OworCitSZWY8Q1NTVmFsdWU+IFN0eWxlSW1hZ2VTZXQ6OmNzc1ZhbHVlKCkgY29uc3QKK3sg
CisgICAgcmV0dXJuIG1fY3NzVmFsdWUuY29weVJlZigpOyAKK30KKworSW1hZ2VXaXRoU2NhbGUg
U3R5bGVJbWFnZVNldDo6c2VsZWN0QmVzdEZpdEltYWdlKGNvbnN0IERvY3VtZW50JiBkb2N1bWVu
dCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jc3NWYWx1ZS0+c2VsZWN0QmVzdEZpdEltYWdlKGRv
Y3VtZW50KTsKK30KKworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVj
dXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNldC5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUlt
YWdlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyogQ29weXJpZ2h0
IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisqICAgICAgICAgICAoQykgMjAw
MCBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyogICAgICAgICAgIChDKSAyMDAw
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiBD
b3B5cmlnaHQgKEMpIDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyoKKyog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKgorKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisqCisqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqCisqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlN0eWxlTXVsdGlJbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENTU0ltYWdlU2V0VmFsdWU7CisKK2NsYXNzIFN0eWxlSW1hZ2VTZXQgZmluYWwgOiBwdWJsaWMg
U3R5bGVNdWx0aUltYWdlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPFN0eWxlSW1hZ2VTZXQ+IGNyZWF0ZShDU1NJbWFnZVNldFZhbHVlJik7
CisgICAgdmlydHVhbCB+U3R5bGVJbWFnZVNldCgpOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBTdHlsZUltYWdlJiBvdGhlcikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgU3R5
bGVJbWFnZVNldChDU1NJbWFnZVNldFZhbHVlJik7CisgICAgUmVmPENTU1ZhbHVlPiBjc3NWYWx1
ZSgpIGNvbnN0IGZpbmFsOworICAgIEltYWdlV2l0aFNjYWxlIHNlbGVjdEJlc3RGaXRJbWFnZShj
b25zdCBEb2N1bWVudCYpIGNvbnN0IGZpbmFsOworICAgIFJlZjxDU1NJbWFnZVNldFZhbHVlPiBt
X2Nzc1ZhbHVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX1NUWUxFX0lNQUdFKFN0eWxlSW1hZ2VTZXQsIGlzSW1hZ2VTZXQpCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNl
dC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDUtMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTdHlsZU11bHRpSW1hZ2UuaCIKKworI2luY2x1ZGUgIkNT
U0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NJbWFnZVNldFZhbHVlLmgiCisj
aW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2UuaCIK
KyNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworU3R5bGVNdWx0aUltYWdlOjpTdHlsZU11bHRpSW1hZ2UoKSA9IGRlZmF1bHQ7CisKK1N0eWxl
TXVsdGlJbWFnZTo6flN0eWxlTXVsdGlJbWFnZSgpID0gZGVmYXVsdDsKKworYm9vbCBTdHlsZU11
bHRpSW1hZ2U6OmVxdWFscyhjb25zdCBTdHlsZU11bHRpSW1hZ2UmIG90aGVyKSBjb25zdAorewor
ICAgIGF1dG8mIG90aGVyQ2FjaGVkID0gZG93bmNhc3Q8U3R5bGVNdWx0aUltYWdlPihvdGhlcik7
CisgICAgcmV0dXJuICghbV9pc1BlbmRpbmcgJiYgIW90aGVyQ2FjaGVkLm1faXNQZW5kaW5nICYm
IG1fc2VsZWN0ZWRJbWFnZS5nZXQoKSA9PSBvdGhlckNhY2hlZC5tX3NlbGVjdGVkSW1hZ2UuZ2V0
KCkpOworfQorCit2b2lkIFN0eWxlTXVsdGlJbWFnZTo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRl
ciYgbG9hZGVyLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAg
QVNTRVJUKG1faXNQZW5kaW5nKTsKKyAgICBBU1NFUlQobG9hZGVyLmRvY3VtZW50KCkpOworCisg
ICAgbV9pc1BlbmRpbmcgPSBmYWxzZTsKKyAgICBhdXRvIGltYWdlV2l0aFNjYWxlID0gc2VsZWN0
QmVzdEZpdEltYWdlKCpsb2FkZXIuZG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKGlzPENTU0ltYWdl
VmFsdWU+KGltYWdlV2l0aFNjYWxlLnZhbHVlKSB8fCBpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVl
PihpbWFnZVdpdGhTY2FsZS52YWx1ZSkpOworCisgICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9y
VmFsdWU+KGltYWdlV2l0aFNjYWxlLnZhbHVlKSkgeworICAgICAgICBtX3NlbGVjdGVkSW1hZ2Ug
PSBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZT4oKmltYWdlV2l0aFNjYWxlLnZhbHVlLmdldCgpKSk7CisgICAgICAgIG1fc2VsZWN0ZWRJ
bWFnZS0+bG9hZChsb2FkZXIsIG9wdGlvbnMpOworICAgIH0KKyAgICAKKyAgICBpZiAoaXM8Q1NT
SW1hZ2VWYWx1ZT4oaW1hZ2VXaXRoU2NhbGUudmFsdWUpKSB7CisgICAgICAgIG1fc2VsZWN0ZWRJ
bWFnZSA9IFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZVZhbHVlPigq
aW1hZ2VXaXRoU2NhbGUudmFsdWUuZ2V0KCkpLCBpbWFnZVdpdGhTY2FsZS5zY2FsZUZhY3Rvcik7
CisgICAgICAgIGlmIChtX3NlbGVjdGVkSW1hZ2UtPmlzUGVuZGluZygpKQorICAgICAgICAgICAg
bV9zZWxlY3RlZEltYWdlLT5sb2FkKGxvYWRlciwgb3B0aW9ucyk7CisgICAgfQorfQorCitDYWNo
ZWRJbWFnZSogU3R5bGVNdWx0aUltYWdlOjpjYWNoZWRJbWFnZSgpIGNvbnN0Cit7CisgICAgaWYg
KCFtX3NlbGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBt
X3NlbGVjdGVkSW1hZ2UtPmNhY2hlZEltYWdlKCk7Cit9CisKK1dyYXBwZWRJbWFnZVB0ciBTdHls
ZU11bHRpSW1hZ2U6OmRhdGEoKSBjb25zdAoreworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlLT5kYXRh
KCk7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjpjYW5SZW5kZXIoY29uc3QgUmVuZGVyRWxl
bWVudCogcmVuZGVyZXIsIGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c2VsZWN0ZWRJbWFnZSAmJiBtX3NlbGVjdGVkSW1hZ2UtPmNhblJlbmRlcihyZW5kZXJlciwgbXVs
dGlwbGllcik7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjppc1BlbmRpbmcoKSBjb25zdAor
eworICAgIHJldHVybiBtX2lzUGVuZGluZzsKK30KKworYm9vbCBTdHlsZU11bHRpSW1hZ2U6Omlz
TG9hZGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlICYmIG1fc2VsZWN0
ZWRJbWFnZS0+aXNMb2FkZWQoKTsKK30KKworYm9vbCBTdHlsZU11bHRpSW1hZ2U6OmVycm9yT2Nj
dXJyZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UgJiYgbV9zZWxlY3Rl
ZEltYWdlLT5lcnJvck9jY3VycmVkKCk7Cit9CisKK0Zsb2F0U2l6ZSBTdHlsZU11bHRpSW1hZ2U6
OmltYWdlU2l6ZShjb25zdCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgZmxvYXQgbXVsdGlwbGll
cikgY29uc3QKK3sKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlLT5pbWFnZVNpemUocmVuZGVyZXIsIG11bHRp
cGxpZXIpOworfQorCitib29sIFN0eWxlTXVsdGlJbWFnZTo6aW1hZ2VIYXNSZWxhdGl2ZVdpZHRo
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlICYmIG1fc2VsZWN0ZWRJbWFn
ZS0+aW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCk7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjpp
bWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWxlY3RlZElt
YWdlICYmIG1fc2VsZWN0ZWRJbWFnZS0+aW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpOworfQorCit2
b2lkIFN0eWxlTXVsdGlJbWFnZTo6Y29tcHV0ZUludHJpbnNpY0RpbWVuc2lvbnMoY29uc3QgUmVu
ZGVyRWxlbWVudCogZWxlbWVudCwgTGVuZ3RoJiBpbnRyaW5zaWNXaWR0aCwgTGVuZ3RoJiBpbnRy
aW5zaWNIZWlnaHQsIEZsb2F0U2l6ZSYgaW50cmluc2ljUmF0aW8pCit7CisgICAgaWYgKCFtX3Nl
bGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBtX3NlbGVjdGVkSW1hZ2UtPmNvbXB1
dGVJbnRyaW5zaWNEaW1lbnNpb25zKGVsZW1lbnQsIGludHJpbnNpY1dpZHRoLCBpbnRyaW5zaWNI
ZWlnaHQsIGludHJpbnNpY1JhdGlvKTsKK30KKworYm9vbCBTdHlsZU11bHRpSW1hZ2U6OnVzZXNJ
bWFnZUNvbnRhaW5lclNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2Ug
JiYgbV9zZWxlY3RlZEltYWdlLT51c2VzSW1hZ2VDb250YWluZXJTaXplKCk7Cit9CisKK3ZvaWQg
U3R5bGVNdWx0aUltYWdlOjpzZXRDb250YWluZXJDb250ZXh0Rm9yUmVuZGVyZXIoY29uc3QgUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6ZSYgY29udGFpbmVyU2l6ZSwgZmxv
YXQgY29udGFpbmVyWm9vbSkKK3sKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fc2VsZWN0ZWRJbWFnZS0+c2V0Q29udGFpbmVyQ29udGV4dEZvclJlbmRl
cmVyKHJlbmRlcmVyLCBjb250YWluZXJTaXplLCBjb250YWluZXJab29tKTsKK30KKwordm9pZCBT
dHlsZU11bHRpSW1hZ2U6OmFkZENsaWVudChSZW5kZXJFbGVtZW50KiByZW5kZXJlcikKK3sKKyAg
ICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2VsZWN0ZWRJ
bWFnZS0+YWRkQ2xpZW50KHJlbmRlcmVyKTsKK30KKwordm9pZCBTdHlsZU11bHRpSW1hZ2U6OnJl
bW92ZUNsaWVudChSZW5kZXJFbGVtZW50KiByZW5kZXJlcikKK3sKKyAgICBpZiAoIW1fc2VsZWN0
ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2VsZWN0ZWRJbWFnZS0+cmVtb3ZlQ2xp
ZW50KHJlbmRlcmVyKTsKK30KKworUmVmUHRyPEltYWdlPiBTdHlsZU11bHRpSW1hZ2U6OmltYWdl
KFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpemUmIHNpemUpIGNvbnN0Cit7
CisgICAgaWYgKCFtX3NlbGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IHJldHVybiBtX3NlbGVjdGVkSW1hZ2UtPmltYWdlKHJlbmRlcmVyLCBzaXplKTsKK30KKworZmxv
YXQgU3R5bGVNdWx0aUltYWdlOjppbWFnZVNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIG1fc2VsZWN0
ZWRJbWFnZS0+aW1hZ2VTY2FsZUZhY3RvcigpOworfQorCitib29sIFN0eWxlTXVsdGlJbWFnZTo6
a25vd25Ub0JlT3BhcXVlKGNvbnN0IFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyKSBjb25zdAorewor
ICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UgJiYgbV9zZWxlY3RlZEltYWdlLT5rbm93blRvQmVP
cGFxdWUocmVuZGVyZXIpOworfQorCit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUltYWdlLmNwcApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZU11bHRp
SW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5
bGVNdWx0aUltYWdlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAq
ICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAq
ICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNS0yMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBOb2FtIFJvc2VudGhhbCAobm9hbUB3ZWJr
aXQub3JnKQorICoKKyogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKgorKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisqCisqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqCisqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBEb2N1bWVudDsKKworc3RydWN0IEltYWdlV2l0aFNjYWxlOworCitjbGFzcyBT
dHlsZU11bHRpSW1hZ2UgOiBwdWJsaWMgU3R5bGVJbWFnZSB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgdmlydHVhbCB+U3R5bGVNdWx0aUltYWdlKCk7CisKK3By
b3RlY3RlZDoKKyAgICBTdHlsZU11bHRpSW1hZ2UoKTsKKyAgICBib29sIGVxdWFscyhjb25zdCBT
dHlsZU11bHRpSW1hZ2UmIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIEltYWdlV2l0aFNjYWxl
IHNlbGVjdEJlc3RGaXRJbWFnZShjb25zdCBEb2N1bWVudCYpIGNvbnN0ID0gMDsKKyAgICBDYWNo
ZWRJbWFnZSogY2FjaGVkSW1hZ2UoKSBjb25zdCBmaW5hbDsKKworcHJpdmF0ZToKKyAgICBXcmFw
cGVkSW1hZ2VQdHIgZGF0YSgpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCBjYW5SZW5kZXIoY29u
c3QgUmVuZGVyRWxlbWVudCosIGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0IGZpbmFsOworICAgIGJv
b2wgaXNQZW5kaW5nKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBsb2FkKENhY2hlZFJlc291cmNl
TG9hZGVyJiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJikgZmluYWw7CisgICAgYm9vbCBp
c0xvYWRlZCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgZXJyb3JPY2N1cnJlZCgpIGNvbnN0IGZp
bmFsOworICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUoY29uc3QgUmVuZGVyRWxlbWVudCosIGZsb2F0
IG11bHRpcGxpZXIpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZVdpZHRo
KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3Qg
ZmluYWw7CisgICAgdm9pZCBjb21wdXRlSW50cmluc2ljRGltZW5zaW9ucyhjb25zdCBSZW5kZXJF
bGVtZW50KiwgTGVuZ3RoJiBpbnRyaW5zaWNXaWR0aCwgTGVuZ3RoJiBpbnRyaW5zaWNIZWlnaHQs
IEZsb2F0U2l6ZSYgaW50cmluc2ljUmF0aW8pIGZpbmFsOworICAgIGJvb2wgdXNlc0ltYWdlQ29u
dGFpbmVyU2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0Q29udGFpbmVyQ29udGV4dEZv
clJlbmRlcmVyKGNvbnN0IFJlbmRlckVsZW1lbnQmLCBjb25zdCBGbG9hdFNpemUmLCBmbG9hdCk7
CisgICAgdm9pZCBhZGRDbGllbnQoUmVuZGVyRWxlbWVudCopIGZpbmFsOworICAgIHZvaWQgcmVt
b3ZlQ2xpZW50KFJlbmRlckVsZW1lbnQqKSBmaW5hbDsKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
KFJlbmRlckVsZW1lbnQqLCBjb25zdCBGbG9hdFNpemUmKSBjb25zdCBmaW5hbDsKKyAgICBmbG9h
dCBpbWFnZVNjYWxlRmFjdG9yKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBrbm93blRvQmVPcGFx
dWUoY29uc3QgUmVuZGVyRWxlbWVudCopIGNvbnN0IGZpbmFsOworICAgIGNvbnN0IFN0eWxlSW1h
Z2UqIHNlbGVjdGVkSW1hZ2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NlbGVjdGVkSW1hZ2Uu
Z2V0KCk7IH0KKyAgICBTdHlsZUltYWdlKiBzZWxlY3RlZEltYWdlKCkgZmluYWwgeyByZXR1cm4g
bV9zZWxlY3RlZEltYWdlLmdldCgpOyB9CisKKyAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbV9zZWxl
Y3RlZEltYWdlOworICAgIGJvb2wgbV9pc1BlbmRpbmcgeyB0cnVlIH07Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUltYWdlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1
dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAkocmV2aXNpb24g
MjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDEwIEBACiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUu
aCIKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCIKICNpbmNsdWRlICJTdHlsZUNh
Y2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVDdXJzb3JJbWFnZS5oIgogI2luY2x1ZGUgIlN0
eWxlRm9udFNpemVGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgi
CisjaW5jbHVkZSAiU3R5bGVJbWFnZVNldC5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIK
ICNpbmNsdWRlICJXaWxsQ2hhbmdlRGF0YS5oIgogCkBAIC0xMzI0LDEzICsxMzI2LDE1IEBAIGlu
bGluZSB2b2lkIEJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb24KICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxlR2Vu
ZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihpdGVt
LmdldCgpKSksIGRpZFNldCk7CiAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwotICAgICAgICB9
IGVsc2UgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KGl0ZW0pKSB7Ci0gICAgICAgICAgICBidWls
ZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShpdGVt
KSwgZGlkU2V0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGlzPENTU0ltYWdl
U2V0VmFsdWU+KGl0ZW0pKSB7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRD
b250ZW50KFN0eWxlSW1hZ2VTZXQ6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPihp
dGVtLmdldCgpKS5pbWFnZVNldFdpdGhTdHlsZXNSZXNvbHZlZChidWlsZGVyU3RhdGUpKSwgZGlk
U2V0KTsKICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oaXRlbSkpIHsKLSAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5z
dHlsZSgpLnNldENvbnRlbnQoU3R5bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKGl0ZW0pLCBkaWRTZXQp
OworICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChTdHlsZUNhY2hl
ZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oaXRlbS5nZXQoKSkpLCBkaWRT
ZXQpOwogICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUu
Y3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxk
ZXJTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDEwIEBACiAjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJTdHlsZUNh
Y2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVDdXJzb3JJbWFnZS5oIgogI2luY2x1ZGUgIlN0
eWxlRm9udFNpemVGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgi
CisjaW5jbHVkZSAiU3R5bGVJbWFnZVNldC5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybUZ1bmN0aW9u
cy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03OSwyMSArODEsMzMgQEAgYm9vbCBCdWls
ZGVyU3RhdGU6OnVzZVNWR1pvb21SdWxlc0ZvckxlbgogICAgIHJldHVybiBpczxTVkdFbGVtZW50
PihlbGVtZW50KCkpICYmICEoaXM8U1ZHU1ZHRWxlbWVudD4oKmVsZW1lbnQoKSkgJiYgZWxlbWVu
dCgpLT5wYXJlbnROb2RlKCkpOwogfQogCitSZWY8Q1NTVmFsdWU+IEJ1aWxkZXJTdGF0ZTo6cmVz
b2x2ZUltYWdlU3R5bGVzKENTU1ZhbHVlJiB2YWx1ZSkKK3sKKyAgICBpZiAoaXM8Q1NTR3JhZGll
bnRWYWx1ZT4odmFsdWUpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1
ZT4odmFsdWUpLmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKCp0aGlzKTsKKworICAgIGlmIChp
czxDU1NJbWFnZVNldFZhbHVlPih2YWx1ZSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NJ
bWFnZVNldFZhbHVlPih2YWx1ZSkuaW1hZ2VTZXRXaXRoU3R5bGVzUmVzb2x2ZWQoKnRoaXMpOwor
CisgICAgaWYgKGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KHZhbHVlKSkKKyAgICAgICAgZG93bmNh
c3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpLmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoKnRo
aXMpOworCisgICAgcmV0dXJuIG1ha2VSZWYodmFsdWUpOworfQorCiBSZWZQdHI8U3R5bGVJbWFn
ZT4gQnVpbGRlclN0YXRlOjpjcmVhdGVTdHlsZUltYWdlKENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAg
ICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKSB7Ci0gICAgICAgIGlmIChp
czxDU1NHcmFkaWVudFZhbHVlPih2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gU3R5bGVHZW5l
cmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0PENTU0dyYWRpZW50VmFsdWU+KHZhbHVlKS5ncmFk
aWVudFdpdGhTdHlsZXNSZXNvbHZlZCgqdGhpcykpOwotCi0gICAgICAgIGlmIChpczxDU1NGaWx0
ZXJJbWFnZVZhbHVlPih2YWx1ZSkpIHsKLSAgICAgICAgICAgIC8vIEZpbHRlckltYWdlIG5lZWRz
IHRvIGNhbGN1bGF0ZSBGaWx0ZXJPcGVyYXRpb25zLgotICAgICAgICAgICAgZG93bmNhc3Q8Q1NT
RmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpLmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoKnRoaXMpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoZG93
bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKTsKLSAgICB9CisgICAgaWYgKGlz
PENTU0ltYWdlVmFsdWU+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFN0eWxlQ2FjaGVkSW1hZ2U6
OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZVZhbHVlPih2YWx1ZSkpOworCisgICAgaWYgKGlzPENT
U0N1cnNvckltYWdlVmFsdWU+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFN0eWxlQ3Vyc29ySW1h
Z2U6OmNyZWF0ZShkb3duY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlPih2YWx1ZSkpOwogCi0gICAg
aWYgKGlzPENTU0ltYWdlVmFsdWU+KHZhbHVlKSB8fCBpczxDU1NJbWFnZVNldFZhbHVlPih2YWx1
ZSkgfHwgaXM8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4odmFsdWUpKQotICAgICAgICByZXR1cm4gU3R5
bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZT4odmFsdWUpKQorICAgICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3Jl
YXRlKGRvd25jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHJlc29sdmVJbWFnZVN0eWxlcyh2
YWx1ZSkuZ2V0KCkpKTsKKyAgICAKKyAgICBpZiAoaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4odmFsdWUp
KQorICAgICAgICByZXR1cm4gU3R5bGVJbWFnZVNldDo6Y3JlYXRlKGRvd25jYXN0PENTU0ltYWdl
U2V0VmFsdWU+KHJlc29sdmVJbWFnZVN0eWxlcyh2YWx1ZSkuZ2V0KCkpKTsKIAogICAgIHJldHVy
biBudWxscHRyOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3Rh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0
ZS5oCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxk
ZXJTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw3IEBAIHB1YmxpYzoKICAgICBi
b29sIHVzZVNWR1pvb21SdWxlc0Zvckxlbmd0aCgpIGNvbnN0OwogICAgIFNjb3BlT3JkaW5hbCBz
dHlsZVNjb3BlT3JkaW5hbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVTY29wZU9yZGluYWw7IH0K
IAorICAgIFJlZjxDU1NWYWx1ZT4gcmVzb2x2ZUltYWdlU3R5bGVzKENTU1ZhbHVlJik7CiAgICAg
UmVmUHRyPFN0eWxlSW1hZ2U+IGNyZWF0ZVN0eWxlSW1hZ2UoQ1NTVmFsdWUmKTsKICAgICBib29s
IGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoY29uc3QgQ1NTVmFsdWUmLCBGaWx0ZXJPcGVyYXRpb25z
JiBvdXRPcGVyYXRpb25zKTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjU0ODA4KQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMjAtMDEt
MTkgIE5vYW0gUm9zZW50aGFsICA8bm9hbUB3ZWJraXQub3JnPgorCisgICAgICAgIC13ZWJraXQt
aW1hZ2Utc2V0IHNob3VsZCBzdXBwb3J0IGFsbCB0aGUgaW1hZ2UgZnVuY3Rpb25zIFdlYktpdCBz
dXBwb3J0cywgbm90IGp1c3QgdXJsKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgxOTQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CisKKyAgICAgICAgKiBmYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogZmFzdC9jc3MvY3Vyc29yLXBhcnNpbmcuaHRtbDoKKyAgICAgICAgICAgICAgICBBZGRl
ZCBwYXJzaW5nIHRlc3QgdG8gZW5zdXJlIGFycm93IGltYWdlLXNldHMgZGlzYWJsZSBnZW5lcmF0
ZWQgaW1hZ2VzCisKKyAgICAgICAgKiBmYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1nZW5lcmF0
ZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9pbWFnZS1zZXQtcGFy
c2luZy1nZW5lcmF0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3MvaW1hZ2Utc2V0
LXBhcnNpbmctaW52YWxpZC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jc3MvaW1hZ2Ut
c2V0LXBhcnNpbmctaW52YWxpZC5odG1sOgorICAgICAgICAgICAgICAgIEFkZGVkIHBhcnNpbmcg
dGVzdHMgZm9yIG5ldyBnZW5lcmF0ZWQtaW5zaWRlLWltYWdlLXNldCB1c2UgY2FzZXMKKyAgICAg
ICAgICAgICAgICBUZXN0IHRoYXQgaW1hZ2Utc2V0IGluc2lkZSBpbWFnZS1zZXQgaXMgbm90IHN1
cHBvcnRlZAorCisgICAgICAgICogZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS1leHBl
Y3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1m
YWRlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50
LWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc2V0LWdy
YWRpZW50LW11bHRpLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlkcGkv
aW1hZ2Utc2V0LWdyYWRpZW50LW11bHRpLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlk
cGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1zaW5nbGUuaHRtbDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQuaHRtbDogQWRkZWQuCisgICAg
ICAgICAgICAgICAgQWRkZWQgcmVmLXRlc3RzIGZvciBzZXZlcmFsIGdlbmVyYXRlZC1pbnNpZGUt
aW1hZ2Utc2V0IHVzZS1jYXNlcworCiAyMDIwLTAxLTE5ICBDYXRoaWUgQ2hlbiAgPGNhdGhpZWNo
ZW5AaWdhbGlhLmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3Igc2Nyb2xsIGJlaGF2aW9y
IHJlbGllcyBvbiBTY3JvbGxBbmltYXRpb24gb2YgdGhlIFdlYiBwcm9jZXNzCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvY3Vyc29yLXBhcnNpbmctZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAyNTQ4MDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDEwIEBAIFBBU1Mgcm91bmR0cmlw
Q3NzUnVsZSgiY3Vyc29yOiB1cmwoZmlsZToKIFBBU1Mgcm91bmR0cmlwQ3NzUnVsZSgiY3Vyc29y
OiB1cmwoZmlsZTovLy9mb28ucG5nKSAxMiAzIDU7IikuY3NzVGV4dCBpcyAiIgogUEFTUyByb3Vu
ZHRyaXBDc3NSdWxlKCJjdXJzb3I6IHVybChmaWxlOi8vL2Zvby5wbmcpIHggeTsiKS5jc3NUZXh0
IGlzICIiCiBQQVNTIHJvdW5kdHJpcENzc1J1bGUoImN1cnNvcjogdXJsKGZpbGU6Ly8vZm9vLnBu
ZykgYXV0bzsiKS5jc3NUZXh0IGlzICIiCisKK1Rlc3QgYSBidW5jaCBvZiBjdXJzb3IgcnVsZXMg
d2l0aCBnZW5lcmF0ZWQgaW1hZ2VzLgorUEFTUyByb3VuZHRyaXBDc3NSdWxlKCJjdXJzb3I6IGxp
bmVhci1ncmFkaWVudChyZWQsIHdoaXRlKSAtMSAtMSwgcG9pbnRlcjsiKS5jc3NUZXh0IGlzICIi
CitQQVNTIHJvdW5kdHJpcENzc1J1bGUoImN1cnNvcjogaW1hZ2Utc2V0KGxpbmVhci1ncmFkaWVu
dChyZWQsIHdoaXRlKSAxeCkgLTEgLTEsIHBvaW50ZXI7IikuY3NzVGV4dCBpcyAiIgogUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvY3NzL2N1cnNvci1wYXJzaW5nLmh0bWwJKHJldmlzaW9uIDI1NDgwOCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvY3NzL2N1cnNvci1wYXJzaW5nLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTEwNSw2ICsxMDUsMTEgQEAgdGVzdEludmFsaWRDdXJzb3JSdWxlKCd1cmwoZmlsZTovLy9mb28u
cAogdGVzdEludmFsaWRDdXJzb3JSdWxlKCd1cmwoZmlsZTovLy9mb28ucG5nKSB4IHknKTsKIHRl
c3RJbnZhbGlkQ3Vyc29yUnVsZSgndXJsKGZpbGU6Ly8vZm9vLnBuZykgYXV0bycpOwogCitkZWJ1
ZygnJyk7CitkZWJ1ZygnVGVzdCBhIGJ1bmNoIG9mIGN1cnNvciBydWxlcyB3aXRoIGdlbmVyYXRl
ZCBpbWFnZXMuJyk7Cit0ZXN0SW52YWxpZEN1cnNvclJ1bGUoJ2xpbmVhci1ncmFkaWVudChyZWQs
IHdoaXRlKSAtMSAtMSwgcG9pbnRlcicpOwordGVzdEludmFsaWRDdXJzb3JSdWxlKCdpbWFnZS1z
ZXQobGluZWFyLWdyYWRpZW50KHJlZCwgd2hpdGUpIDF4KSAtMSAtMSwgcG9pbnRlcicpOworCiBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwogPC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1nZW5lcmF0ZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWdlbmVyYXRlZC1l
eHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Ut
c2V0LXBhcnNpbmctZ2VuZXJhdGVkLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDY1IEBACitUZXN0IHRoZSBwYXJzaW5nIG9mIHRoZSBpbWFnZS1zZXQgZnVuY3Rpb24uCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisKK1NpbmdsZSB2YWx1ZSBmb3IgYmFja2dy
b3VuZC1pbWFnZSB3aXRoIGdyYWRpZW50IDogbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkg
MXgKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlKSBpcyAnQ1NTVmFsdWVMaXN0Jwor
UEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuX19wcm90b19fKSBpcyAnQ1NTVmFsdWVM
aXN0UHJvdG90eXBlJworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuY29uc3RydWN0
b3IpIGlzICdGdW5jdGlvbicKK1BBU1MgaW1hZ2VTZXRSdWxlLmxlbmd0aCBpcyAyCitQQVNTIHN1
YlJ1bGUuY3NzVGV4dCBpcyAnbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSknCitQQVNTIHN1
YlJ1bGUuY3NzVGV4dCBpcyAnMScKKworU2luZ2xlIHZhbHVlIGZvciBjb250ZW50IHdpdGggZ3Jh
ZGllbnQgOiBsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAxeAorUEFTUyBqc1dyYXBwZXJD
bGFzcyhpbWFnZVNldFJ1bGUpIGlzICdDU1NWYWx1ZUxpc3QnCitQQVNTIGpzV3JhcHBlckNsYXNz
KGltYWdlU2V0UnVsZS5fX3Byb3RvX18pIGlzICdDU1NWYWx1ZUxpc3RQcm90b3R5cGUnCitQQVNT
IGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5jb25zdHJ1Y3RvcikgaXMgJ0Z1bmN0aW9uJwor
UEFTUyBpbWFnZVNldFJ1bGUubGVuZ3RoIGlzIDIKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICds
aW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKScKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICcx
JworCitTaW5nbGUgdmFsdWUgZm9yIGJhY2tncm91bmQtaW1hZ2Ugd2l0aCBncmFkaWVudHMgOiBs
aW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAxeCwgcmFkaWFsLWdyYWRpZW50KGJsdWUsIHdo
aXRlKSAyeAorUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUpIGlzICdDU1NWYWx1ZUxp
c3QnCitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5fX3Byb3RvX18pIGlzICdDU1NW
YWx1ZUxpc3RQcm90b3R5cGUnCitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5jb25z
dHJ1Y3RvcikgaXMgJ0Z1bmN0aW9uJworUEFTUyBpbWFnZVNldFJ1bGUubGVuZ3RoIGlzIDQKK1BB
U1Mgc3ViUnVsZS5jc3NUZXh0IGlzICdsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKScKK1BB
U1Mgc3ViUnVsZS5jc3NUZXh0IGlzICcxJworUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJ3JhZGlh
bC1ncmFkaWVudChibHVlLCB3aGl0ZSknCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMicKKwor
Q29tYmluZWQgZ3JhZGllbnQgYW5kIFVSTCA6IHVybCgnI2EnKSAxeCwgbGluZWFyLWdyYWRpZW50
KGdyZWVuLCB3aGl0ZSkgMngKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlKSBpcyAn
Q1NTVmFsdWVMaXN0JworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuX19wcm90b19f
KSBpcyAnQ1NTVmFsdWVMaXN0UHJvdG90eXBlJworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNl
dFJ1bGUuY29uc3RydWN0b3IpIGlzICdGdW5jdGlvbicKK1BBU1MgaW1hZ2VTZXRSdWxlLmxlbmd0
aCBpcyA0CitQQVNTIHN1YlJ1bGUgaXMgJ2EnCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMScK
K1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICdsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKScK
K1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICcyJworCitDb21iaW5lZCBncmFkaWVudCBhbmQgVVJM
IGluIGNvbnRlbnQgOiB1cmwoJyNhJykgMXgsIGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUp
IDJ4CitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZSkgaXMgJ0NTU1ZhbHVlTGlzdCcK
K1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLl9fcHJvdG9fXykgaXMgJ0NTU1ZhbHVl
TGlzdFByb3RvdHlwZScKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLmNvbnN0cnVj
dG9yKSBpcyAnRnVuY3Rpb24nCitQQVNTIGltYWdlU2V0UnVsZS5sZW5ndGggaXMgNAorUEFTUyBz
dWJSdWxlIGlzICdhJworUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJzEnCitQQVNTIHN1YlJ1bGUu
Y3NzVGV4dCBpcyAnbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSknCitQQVNTIHN1YlJ1bGUu
Y3NzVGV4dCBpcyAnMicKKworQ29tYmluZWQgZ3JhZGllbnQgYW5kIGNyb3NzLWZhZGUgOiAtd2Vi
a2l0LWNyb3NzLWZhZGUodXJsKCcjYScpLCB1cmwoJyNiJyksIDcwJSkgMXgsIGxpbmVhci1ncmFk
aWVudChncmVlbiwgd2hpdGUpIDJ4CitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZSkg
aXMgJ0NTU1ZhbHVlTGlzdCcKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLl9fcHJv
dG9fXykgaXMgJ0NTU1ZhbHVlTGlzdFByb3RvdHlwZScKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1h
Z2VTZXRSdWxlLmNvbnN0cnVjdG9yKSBpcyAnRnVuY3Rpb24nCitQQVNTIGltYWdlU2V0UnVsZS5s
ZW5ndGggaXMgNAorUEFTUyBzdWJSdWxlIGlzICdhJworUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMg
JzEnCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0
ZSknCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMicKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1nZW5lcmF0ZWQtZXhwZWN0ZWQudHh0Cl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Ut
c2V0LXBhcnNpbmctZ2VuZXJhdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctZ2VuZXJhdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysg
TGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctZ2VuZXJhdGVkLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8v
SUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+
CitkZXNjcmlwdGlvbigiVGVzdCB0aGUgcGFyc2luZyBvZiB0aGUgaW1hZ2Utc2V0IGZ1bmN0aW9u
LiIpOworCitmdW5jdGlvbiBqc1dyYXBwZXJDbGFzcyhub2RlKQoreworICAgIGlmICghbm9kZSkK
KyAgICAgICAgcmV0dXJuICJbbnVsbF0iOworICAgIHZhciBzdHJpbmcgPSBPYmplY3QucHJvdG90
eXBlLnRvU3RyaW5nLmFwcGx5KG5vZGUpOworICAgIHJldHVybiBzdHJpbmcuc3Vic3RyKDgsIHN0
cmluZy5sZW5ndGggLSA5KTsKK30KKworZnVuY3Rpb24gc2hvdWxkQmVUeXBlKGV4cHJlc3Npb24s
IGNsYXNzTmFtZSwgcHJvdG90eXBlTmFtZSwgY29uc3RydWN0b3JOYW1lKQoreworICAgIGlmICgh
cHJvdG90eXBlTmFtZSkKKyAgICAgICAgcHJvdG90eXBlTmFtZSA9IGNsYXNzTmFtZSArICJQcm90
b3R5cGUiOworICAgIGlmICghY29uc3RydWN0b3JOYW1lKQorICAgICAgICBjb25zdHJ1Y3Rvck5h
bWUgPSBjbGFzc05hbWUgKyAiQ29uc3RydWN0b3IiOworICAgIHNob3VsZEJlKCJqc1dyYXBwZXJD
bGFzcygiICsgZXhwcmVzc2lvbiArICIpIiwgIiciICsgY2xhc3NOYW1lICsgIiciKTsKKyAgICBz
aG91bGRCZSgianNXcmFwcGVyQ2xhc3MoIiArIGV4cHJlc3Npb24gKyAiLl9fcHJvdG9fXykiLCAi
JyIgKyBwcm90b3R5cGVOYW1lICsgIiciKTsKKyAgICBzaG91bGRCZSgianNXcmFwcGVyQ2xhc3Mo
IiArIGV4cHJlc3Npb24gKyAiLmNvbnN0cnVjdG9yKSIsICInRnVuY3Rpb24nIik7Cit9CisKKy8v
IFRoZXNlIGhhdmUgdG8gYmUgZ2xvYmFsIGZvciB0aGUgdGVzdCBoZWxwZXJzIHRvIHNlZSB0aGVt
LgordmFyIGltYWdlU2V0UnVsZSwgc3ViUnVsZTsKKworZnVuY3Rpb24gdGVzdEltYWdlU2V0UnVs
ZShkZXNjcmlwdGlvbiwgcHJvcGVydHksIHJ1bGUsIGV4cGVjdGVkTGVuZ3RoLCBleHBlY3RlZFRl
eHRzKQoreworICAgIGRlYnVnKCIiKTsKKyAgICBkZWJ1ZyhkZXNjcmlwdGlvbiArICIgOiAiICsg
cnVsZSk7CisKKyAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Cisg
ICAgZGl2LnNldEF0dHJpYnV0ZSgic3R5bGUiLCBwcm9wZXJ0eSArICI6IGltYWdlLXNldCgiICsg
cnVsZSArICIpIik7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpOworCisgICAg
aW1hZ2VTZXRSdWxlID0gZGl2LnN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHkpOwor
ICAgIHNob3VsZEJlVHlwZSgiaW1hZ2VTZXRSdWxlIiwgIkNTU1ZhbHVlTGlzdCIpOworCisgICAg
aWYgKGltYWdlU2V0UnVsZSkgeworICAgICAgICBpZiAoanNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRS
dWxlWzBdKSA9PSAiQ1NTVmFsdWVMaXN0IikgeworICAgICAgICAgICAgLy8gVGhlIGNvbnRlbnQg
cHJvcGVydHkgcmV0dXJucyBhIENTU1ZhbHVlTGlzdCBhbnl3YXksIHNvIHRvIGdldCB0byB0aGUg
CisgICAgICAgICAgICAvLyBpbWFnZVNldCBDU1MgdmFsdWUgbGlzdCwgd2UgaGF2ZSB0byBsb29r
IGF0IHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgCisgICAgICAgICAgICAvLyBjb250ZW50IHZhbHVl
IGxpc3QuCisgICAgICAgICAgICBpbWFnZVNldFJ1bGUgPSBpbWFnZVNldFJ1bGVbMF07CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBzaG91bGRCZSgiaW1hZ2VTZXRSdWxlLmxlbmd0aCIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gZXhwZWN0ZWRMZW5ndGg7IH0pOworCisgICAgaWYgKGltYWdlU2V0UnVs
ZSkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkTGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgIHN0cmluZyA9IGltYWdlU2V0UnVsZVtpXTsKKyAgICAgICAgICAgIGlmIChp
ICUgMiA9PSAwICYmIHN0cmluZy5jc3NUZXh0LmluY2x1ZGVzKCcjJykpIHsKKyAgICAgICAgICAg
ICAgICBzdWJSdWxlID0gc3RyaW5nLmNzc1RleHQuc3BsaXQoJyMnKVsxXS5yZXBsYWNlKCciJywg
IiIpOworICAgICAgICAgICAgICAgIHN1YlJ1bGUgPSBzdWJSdWxlLnNwbGl0KCcpJylbMF07Cisg
ICAgICAgICAgICAgICAgc2hvdWxkQmUoInN1YlJ1bGUiLCAiJyIgKyBleHBlY3RlZFRleHRzW2ld
ICsgIiciKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3ViUnVsZSA9
IHN0cmluZzsKKyAgICAgICAgICAgICAgICBzaG91bGRCZSgic3ViUnVsZS5jc3NUZXh0IiwgIici
ICsgZXhwZWN0ZWRUZXh0c1tpXSArICInIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7Cit9CisKK3Rlc3RJbWFn
ZVNldFJ1bGUoIlNpbmdsZSB2YWx1ZSBmb3IgYmFja2dyb3VuZC1pbWFnZSB3aXRoIGdyYWRpZW50
IiwKKyAgICAgICAgICAgICAgICAiYmFja2dyb3VuZC1pbWFnZSIsCisgICAgICAgICAgICAgICAg
ImxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIDF4IiwgMiwKKyAgICAgICAgICAgICAgICBb
ImxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIiwgIjEiXSk7Cit0ZXN0SW1hZ2VTZXRSdWxl
KCJTaW5nbGUgdmFsdWUgZm9yIGNvbnRlbnQgd2l0aCBncmFkaWVudCIsCisgICAgICAgICAgICAg
ICAgImJhY2tncm91bmQtaW1hZ2UiLAorICAgICAgICAgICAgICAgICJsaW5lYXItZ3JhZGllbnQo
Z3JlZW4sIHdoaXRlKSAxeCIsIDIsCisgICAgICAgICAgICAgICAgWyJsaW5lYXItZ3JhZGllbnQo
Z3JlZW4sIHdoaXRlKSIsICIxIl0pOworCit0ZXN0SW1hZ2VTZXRSdWxlKCJTaW5nbGUgdmFsdWUg
Zm9yIGJhY2tncm91bmQtaW1hZ2Ugd2l0aCBncmFkaWVudHMiLAorICAgICAgICAgICAgICAgICJi
YWNrZ3JvdW5kLWltYWdlIiwKKyAgICAgICAgICAgICAgICAibGluZWFyLWdyYWRpZW50KGdyZWVu
LCB3aGl0ZSkgMXgsIHJhZGlhbC1ncmFkaWVudChibHVlLCB3aGl0ZSkgMngiLCA0LAorICAgICAg
ICAgICAgICAgIFsibGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkiLCAiMSIsICJyYWRpYWwt
Z3JhZGllbnQoYmx1ZSwgd2hpdGUpIiwgIjIiXSk7CisKK3Rlc3RJbWFnZVNldFJ1bGUoIkNvbWJp
bmVkIGdyYWRpZW50IGFuZCBVUkwiLAorICAgICAgICAgICAgICAgICJiYWNrZ3JvdW5kLWltYWdl
IiwKKyAgICAgICAgICAgICAgICAidXJsKCcjYScpIDF4LCBsaW5lYXItZ3JhZGllbnQoZ3JlZW4s
IHdoaXRlKSAyeCIsIDQsCisgICAgICAgICAgICAgICAgWyJhIiwgIjEiLCAibGluZWFyLWdyYWRp
ZW50KGdyZWVuLCB3aGl0ZSkiLCAiMiJdKTsKKwordGVzdEltYWdlU2V0UnVsZSgiQ29tYmluZWQg
Z3JhZGllbnQgYW5kIFVSTCBpbiBjb250ZW50IiwKKyAgICAgICAgICAgICAgICAiY29udGVudCIs
CisgICAgICAgICAgICAgICAgInVybCgnI2EnKSAxeCwgbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3
aGl0ZSkgMngiLCA0LAorICAgICAgICAgICAgICAgIFsiYSIsICIxIiwgImxpbmVhci1ncmFkaWVu
dChncmVlbiwgd2hpdGUpIiwgIjIiXSk7CisKK3Rlc3RJbWFnZVNldFJ1bGUoIkNvbWJpbmVkIGdy
YWRpZW50IGFuZCBjcm9zcy1mYWRlIiwKKyAgICAgICAgICAgICAgICAiYmFja2dyb3VuZC1pbWFn
ZSIsCisgICAgICAgICAgICAgICAgIi13ZWJraXQtY3Jvc3MtZmFkZSh1cmwoJyNhJyksIHVybCgn
I2InKSwgNzAlKSAxeCwgbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMngiLCA0LAorICAg
ICAgICAgICAgICAgIFsiYSIsICIxIiwgImxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIiwg
IjIiXSk7CisKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvY3NzL2ltYWdl
LXNldC1wYXJzaW5nLWdlbmVyYXRlZC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRh
YmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctaW52YWxpZC1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNp
bmctaW52YWxpZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI1NDgwOCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWludmFsaWQtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xOCw2ICsxOCwxMiBAQCBQQVNTIGNzc1J1bGUgaXMgbnVsbAogCiBTY2FsZSBm
YWN0b3IgaXMgMCA6IHVybCgnI2EnKSAweAogUEFTUyBjc3NSdWxlIGlzIG51bGwKKworR2VuZXJh
dGVkIGltYWdlIGZvciBjdXJzb3IgOiBsaW5lYXItZ3JhZGllbnQoYmxhY2ssIHdoaXRlKSAxeAor
UEFTUyBjc3NSdWxlIGlzIG51bGwKKworSW1hZ2Utc2V0IGluc2lkZSBpbWFnZS1zZXQgOiBpbWFn
ZS1zZXQoaW1hZ2Utc2V0KHVybCgnI2EnKSAxeCkgMXgpCitQQVNTIGNzc1J1bGUgaXMgbnVsbAog
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1pbnZhbGlkLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctaW52YWxpZC5o
dG1sCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQt
cGFyc2luZy1pbnZhbGlkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAgdGVz
dEludmFsaWRJbWFnZVNldCgiTm8geCIsICJiYWNrZ3JvdW5kLQogdGVzdEludmFsaWRJbWFnZVNl
dCgiTm8gY29tbWEiLCAiYmFja2dyb3VuZC1pbWFnZSIsICJ1cmwoJyNhJykgMXggdXJsKCcjYicp
IDJ4Iik7CiB0ZXN0SW52YWxpZEltYWdlU2V0KCJUb28gbWFueSBzY2FsZSBmYWN0b3IgcGFyYW1l
dGVycyIsICJiYWNrZ3JvdW5kLWltYWdlIiwgInVybCgnI2EnKSAxeCAyeCIpOwogdGVzdEludmFs
aWRJbWFnZVNldCgiU2NhbGUgZmFjdG9yIGlzIDAiLCAiYmFja2dyb3VuZC1pbWFnZSIsICJ1cmwo
JyNhJykgMHgiKTsKK3Rlc3RJbnZhbGlkSW1hZ2VTZXQoIkdlbmVyYXRlZCBpbWFnZSBmb3IgY3Vy
c29yIiwgImN1cnNvciIsICJsaW5lYXItZ3JhZGllbnQoYmxhY2ssIHdoaXRlKSAxeCIpOwordGVz
dEludmFsaWRJbWFnZVNldCgiSW1hZ2Utc2V0IGluc2lkZSBpbWFnZS1zZXQiLCAiYmFja2dyb3Vu
ZC1pbWFnZSIsICJpbWFnZS1zZXQoaW1hZ2Utc2V0KHVybCgnI2EnKSAxeCkgMXgpIik7CiAKIHN1
Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CiA8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvaGlkcGkvaW1hZ2Utc2V0LWNyb3NzLWZhZGUtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1mYWRlLWV4cGVjdGVkLmh0
bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jv
c3MtZmFkZS1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYgQEAKKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorICAgIHdpbmRvdy5vbmxvYWQgPSAoKSA9PiB7CisgICAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxE
b25lKCk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0QmFja2luZ1NjYWxlRmFjdG9yKDIsICgpID0+
IHNldFRpbWVvdXQoKCkgPT4gdGVzdFJ1bm5lci5ub3RpZnlEb25lKCksIDApKTsKKyAgICAgIH0K
KyAgICB9Cis8L3NjcmlwdD4KKworICAgIAorPHN0eWxlPgorICAgICNmb28geworICAgICAgICB3
aWR0aDoxMDBweDsKKyAgICAgICAgaGVpZ2h0OjEwMHB4OworICAgICAgICBiYWNrZ3JvdW5kLWlt
YWdlOiAtd2Via2l0LWNyb3NzLWZhZGUodXJsKCdyZXNvdXJjZXMvYmx1ZS0xMDAtcHgtc3F1YXJl
LnBuZycpLCB1cmwoJ3Jlc291cmNlcy9ncmVlbi0yMDAtcHgtc3F1YXJlLnBuZycsIDUwJSkpOwor
ICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorICAgIDxkaXY+VGhpcyB0ZXN0IHBh
c3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgYmx1ZSAxMDBweCBzcXVhcmUgd2hlbiB0aGUgZGV2
aWNlU2NhbGVGYWN0b3IgaXMgMSwgYW5kIGlmIGl0IGlzIGEgMTAwcHggZ3JlZW4vYmx1ZSBjcm9z
cy1mYWRlIHNxdWFyZSB3aGVuIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBpcyAyLjwvZGl2PgorPGRp
diBpZD1mb28+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBM
YXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1mYWRlLWV4cGVjdGVkLmh0bWwK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2lt
YWdlLXNldC1jcm9zcy1mYWRlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9o
aWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRl
c3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWNyb3NzLWZhZGUuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDI1IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KKyAgICB3aW5kb3cub25s
b2FkID0gKCkgPT4geworICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB0ZXN0UnVubmVyLnNldEJhY2tpbmdT
Y2FsZUZhY3RvcigyLCAoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpLCAwKSk7CisgICAgICB9CisgICAgfQorPC9zY3JpcHQ+CisgICAgCis8c3R5bGU+CisgICAg
I2ZvbyB7CisgICAgICAgIHdpZHRoOjEwMHB4OworICAgICAgICBoZWlnaHQ6MTAwcHg7CisgICAg
ICAgIGJhY2tncm91bmQtaW1hZ2U6IGltYWdlLXNldCh1cmwoJ3Jlc291cmNlcy9ibHVlLTEwMC1w
eC1zcXVhcmUucG5nJykgMXgsIC13ZWJraXQtY3Jvc3MtZmFkZSh1cmwoJ3Jlc291cmNlcy9ibHVl
LTEwMC1weC1zcXVhcmUucG5nJyksIHVybCgncmVzb3VyY2VzL2dyZWVuLTIwMC1weC1zcXVhcmUu
cG5nJywgNTAlKSkgMngpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorICAg
IDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgYmx1ZSAxMDBweCBz
cXVhcmUgd2hlbiB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgaXMgMSwgYW5kIGlmIGl0IGlzIGEgMTAw
cHggZ3JlZW4vYmx1ZSBjcm9zcy1mYWRlIHNxdWFyZSB3aGVuIHRoZSBkZXZpY2VTY2FsZUZhY3Rv
ciBpcyAyLjwvZGl2PgorICAgIDxkaXYgaWQ9Zm9vPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgoK
UHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jv
c3MtZmFkZS5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEg
IyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1leHBlY3RlZC5odG1s
CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRp
ZW50LWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNiBAQAorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQ+CisgICAgd2luZG93Lm9ubG9hZCA9ICgpID0+IHsKKyAgICAgIGlm
ICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUo
KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRCYWNraW5nU2NhbGVGYWN0b3IoMiwgKCkgPT4gc2V0
VGltZW91dCgoKSA9PiB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKSwgMCkpOworICAgICAgfQorICAg
IH0KKzwvc2NyaXB0PgorCisgICAgCis8c3R5bGU+CisgICAgI2ZvbyB7CisgICAgICAgIHdpZHRo
OjEwMHB4OworICAgICAgICBoZWlnaHQ6MTAwcHg7CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6
IGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+
CisKKzxib2R5PgorICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlz
IGEgYmx1ZSAxMDBweCBzcXVhcmUgd2hlbiB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgaXMgMSwgYW5k
IGlmIGl0IGlzIGEgMTAwcHggZ3JlZW4td2hpdGUgZ3JhZGllbnQgc3F1YXJlIHdoZW4gdGhlIGRl
dmljZVNjYWxlRmFjdG9yIGlzIDIuPC9kaXY+CisgICAgPGRpdiBpZD1mb28+PC9kaXY+Cis8L2Jv
ZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBp
L2ltYWdlLXNldC1ncmFkaWVudC1leHBlY3RlZC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpl
eGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtbXVsdGkt
ZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdl
LXNldC1ncmFkaWVudC1tdWx0aS1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LW11bHRpLWV4cGVjdGVkLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNSBAQAorPGh0bWw+Cis8aGVhZD4gICAgCis8c2Ny
aXB0PgorICAgIHdpbmRvdy5vbmxvYWQgPSAoKSA9PiB7CisgICAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIHRl
c3RSdW5uZXIuc2V0QmFja2luZ1NjYWxlRmFjdG9yKDIsICgpID0+IHNldFRpbWVvdXQoKCkgPT4g
dGVzdFJ1bm5lci5ub3RpZnlEb25lKCksIDApKTsKKyAgICAgIH0KKyAgICB9Cis8L3NjcmlwdD4K
KworPHN0eWxlPgorICAgICNmb28geworICAgICAgICB3aWR0aDoxMDBweDsKKyAgICAgICAgaGVp
Z2h0OjEwMHB4OworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQocmVk
LCBibHVlKTsKKyAgICB9Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keT4KKyAgICA8ZGl2PlRo
aXMgdGVzdCBwYXNzZXMgaWYgdGhlIGRpdiBiZWxvdyBpcyBhIDEwMHB4IGdyZWVuLXdoaXRlIGdy
YWRpZW50IHNxdWFyZSB3aGVuIGRldmljZVBpeGVsUmF0aW8gaXMgMSwgYSByYWRpYWwgcmVkLWJs
dWUgc3F1YXJlIHdoZW4gZGV2aWNlUGl4ZWxSYXRpbyBpcyAyLCBhbmQgYSBibHVlIHNxdWFyZSB3
aGVuIGRldmljZVBpeGVsUmF0aW8gaXMgMy48L2Rpdj4KKyAgICA8ZGl2IGlkPWZvbz48L2Rpdj4K
KzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3Qv
aGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LW11bHRpLWV4cGVjdGVkLmh0bWwKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFk
aWVudC1tdWx0aS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1h
Z2Utc2V0LWdyYWRpZW50LW11bHRpLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtbXVsdGkuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDI1IEBACis8aHRtbD4KKzxoZWFkPiAgICAKKzxzY3JpcHQ+CisgICAgd2luZG93
Lm9ubG9hZCA9ICgpID0+IHsKKyAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAg
ICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRCYWNr
aW5nU2NhbGVGYWN0b3IoMiwgKCkgPT4gc2V0VGltZW91dCgoKSA9PiB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKSwgMCkpOworICAgICAgfQorICAgIH0KKzwvc2NyaXB0PgorCis8c3R5bGU+CisgICAg
I2ZvbyB7CisgICAgICAgIHdpZHRoOjEwMHB4OworICAgICAgICBoZWlnaHQ6MTAwcHg7CisgICAg
ICAgIGJhY2tncm91bmQtaW1hZ2U6IGltYWdlLXNldChsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdo
aXRlKSAxeCwgcmFkaWFsLWdyYWRpZW50KHJlZCwgYmx1ZSkgMngsICdyZXNvdXJjZXMvYmx1ZS0x
MDAtcHgtc3F1YXJlLnBuZycgM3gpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5
PgorICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgMTAwcHgg
Z3JlZW4td2hpdGUgZ3JhZGllbnQgc3F1YXJlIHdoZW4gZGV2aWNlUGl4ZWxSYXRpbyBpcyAxLCBh
IHJhZGlhbCByZWQtYmx1ZSBzcXVhcmUgd2hlbiBkZXZpY2VQaXhlbFJhdGlvIGlzIDIsIGFuZCBh
IGJsdWUgc3F1YXJlIHdoZW4gZGV2aWNlUGl4ZWxSYXRpbyBpcyAzLjwvZGl2PgorICAgIDxkaXYg
aWQ9Zm9vPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5
b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtbXVsdGkuaHRtbApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0
LWdyYWRpZW50LXNpbmdsZS1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS1leHBlY3RlZC5odG1sCShub25l
eGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNp
bmdsZS1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYgQEAKKzxodG1s
PgorPGhlYWQ+Cis8c3R5bGU+CisgICAgI2ZvbyB7CisgICAgICAgIHdpZHRoOjEwMHB4OworICAg
ICAgICBoZWlnaHQ6MTAwcHg7CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFk
aWVudChncmVlbiwgd2hpdGUpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGlk
PSJib2R5Ij4KKyAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGRpdiBiZWxvdyBpcyBh
IDEwMHB4IGdyZWVuLXdoaXRlIGdyYWRpZW50IHNxdWFyZS48L2Rpdj4KKyAgICA8ZGl2IGlkPWZv
bz48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRl
c3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS1leHBlY3RlZC5odG1sCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFn
ZS1zZXQtZ3JhZGllbnQtc2luZ2xlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtc2luZ2xlLmh0bWwJKG5vbmV4aXN0ZW50KQorKysg
TGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtc2luZ2xlLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNiBAQAorPGh0bWw+Cis8aGVhZD4gICAgCis8c3R5bGU+
CisgICAgI2ZvbyB7CisgICAgICAgIHdpZHRoOjEwMHB4OworICAgICAgICBoZWlnaHQ6MTAwcHg7
CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGltYWdlLXNldChsaW5lYXItZ3JhZGllbnQoZ3Jl
ZW4sIHdoaXRlKSAxeCk7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgaWQ9ImJv
ZHkiPgorICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgMTAw
cHggZ3JlZW4td2hpdGUgZ3JhZGllbnQgc3F1YXJlLjwvZGl2PgorICAgIDxkaXYgaWQ9Zm9vPjwv
ZGl2PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMv
ZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtc2luZ2xlLmh0bWwKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVu
dC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdy
YWRpZW50Lmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFn
ZS1zZXQtZ3JhZGllbnQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1IEBACis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdD4KKyAgICB3aW5kb3cub25sb2FkID0gKCkgPT4geworICAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9u
ZSgpOworICAgICAgICB0ZXN0UnVubmVyLnNldEJhY2tpbmdTY2FsZUZhY3RvcigyLCAoKSA9PiBz
ZXRUaW1lb3V0KCgpID0+IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpLCAwKSk7CisgICAgICB9Cisg
ICAgfQorPC9zY3JpcHQ+CisKKzxzdHlsZT4KKyAgICAjZm9vIHsKKyAgICAgICAgd2lkdGg6MTAw
cHg7CisgICAgICAgIGhlaWdodDoxMDBweDsKKyAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogaW1h
Z2Utc2V0KHVybCgncmVzb3VyY2VzL2JsdWUtMTAwLXB4LXNxdWFyZS5wbmcnKSAxeCwgbGluZWFy
LWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMngpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisK
Kzxib2R5PgorICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEg
Ymx1ZSAxMDBweCBzcXVhcmUgd2hlbiB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgaXMgMSwgYW5kIGlm
IGl0IGlzIGEgMTAwcHggZ3JlZW4td2hpdGUgZ3JhZGllbnQgc3F1YXJlIHdoZW4gdGhlIGRldmlj
ZVNjYWxlRmFjdG9yIGlzIDIuPC9kaXY+CisgICAgPGRpdiBpZD1mb28+PC9kaXY+Cis8L2JvZHk+
Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2lt
YWdlLXNldC1ncmFkaWVudC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMj
IC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388267</attachid>
            <date>2020-01-20 16:53:14 -0800</date>
            <delta_ts>2020-01-21 00:06:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81941-20200121025312.patch</filename>
            <type>text/plain</type>
            <size>82317</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAyMC0wMS0xOSAgTm9hbSBS
b3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgLXdlYmtpdC1pbWFnZS1zZXQg
c2hvdWxkIHN1cHBvcnQgYWxsIHRoZSBpbWFnZSBmdW5jdGlvbnMgV2ViS2l0IHN1cHBvcnRzLCBu
b3QganVzdCB1cmwoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODE5NDEKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAg
ICBTZXBhcmF0ZSBTdHlsZUNhY2hlZEltYWdlIHRvIDQgY2xhc3NlczoKKyAgICAgICAgLSBTdHls
ZUNhY2hlZEltYWdlOiBmb3Igc2luZ2xlIGltYWdlcyBvbmx5CisgICAgICAgIC0gU3R5bGVNdWx0
aUltYWdlOiBmb3IgdmFsdWVzIHRoYXQgY2FuIGNvbnRhaW4gbXVsdGlwbGUgaW1hZ2VzOiBsaWtl
IGN1cnNvci9pbWFnZS1zZXQKKyAgICAgICAgLSBTdHlsZUltYWdlU2V0CisgICAgICAgIC0gU3R5
bGVDdXJzb3JJbWFnZQorCisgICAgICAgIFRoZSBuZXcgY2xhc3NlcyBvbmx5IGRlYWwgd2l0aCB0
aGVpciBvd24gdmFsdWUgdHlwZS4gQmVmb3JlLCBJbWFnZVNldCBhbmQgY3Vyc29yIHdlcmUgcmVz
b2x2ZWQKKyAgICAgICAgYXMgYSBTdHlsZUNhY2hlZEltYWdlLCB3aGljaCBpcyBubyBsb25nZXIg
YSB2YWxpZCBhc3N1bXB0aW9uIGlmIGltYWdlLXNldCBjYW4gY29udGFpbiBnZW5lcmF0ZWQgaW1h
Z2VzLgorICAgICAgICBUaG91Z2ggY3Vyc29ycyBzdGlsbCBjYW4gb25seSBjb250YWluIGNhY2hl
ZCBpbWFnZXMsIGl0IHdhcyBjbGVhbmVyIHRvIHJlZmFjdG9yIGl0IG91dCBhcyB3ZWxsLgorCisg
ICAgICAgIFJlZmFjdG9yZWQgYmVzdC1maXQgaW1hZ2Ugc2VsZWN0aW9uIGZyb20gbG9hZGluZy4g
Tm93IFN0eWxlQ2FjaGVkSW1hZ2UgaXMgaW4gY2hhcmdlIG9mIGxvYWRpbmcKKyAgICAgICAgdGhl
IGFjdHVhbCBpbWFnZSwgYW5kIFN0eWxlSW1hZ2VTZXQvU3R5bGVDdXJzb3JJbWFnZSBwZXJmb3Jt
IHRoZSBzb3VyY2Ugc2VsZWN0aW9uLgorCisgICAgICAgIEFsc28sIGFkZGVkIHRoZSBuZWNlc3Nh
cnkgbG9naWMgaW4gdGhlIENTUyBwYXJzZXIgdG8gY29uc3VtZSBnZW5lcmF0ZWQgaW1hZ2VzIGlu
c2lkZSBpbWFnZS1zZXRzLCBleGNsdWRpbmcKKyAgICAgICAgd2hlbiB0aGUgaW1hZ2Utc2V0IGlz
IGEgY3Vyc29yIHZhbHVlLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2Nzcy9pbWFnZS1zZXQtcGFy
c2luZy1nZW5lcmF0ZWQuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9oaWRwaS9pbWFnZS1zZXQt
Y3Jvc3MtZmFkZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFk
aWVudC1tdWx0aS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFk
aWVudC1zaW5nbGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3Jh
ZGllbnQuaHRtbAorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBmaWxl
cworCisgICAgICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6c2VsZWN0QmVzdEZpdEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0N1cnNvckltYWdlVmFsdWU6OmxvYWRJbWFnZSk6IERlbGV0ZWQuCisgICAg
ICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuaDoKKyAgICAgICAgICAgICAgICBJbnN0ZWFk
IG9mIGN1cnNvciBsb2FkaW5nIHRoZSBpbWFnZSwgaXQgc2VsZWN0cyBhbiBpbWFnZSBDU1MgdmFs
dWUKKworICAgICAgICAqIGNzcy9DU1NJbWFnZVNldFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ltYWdlU2V0VmFsdWU6OkNTU0ltYWdlU2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTSW1hZ2VTZXRWYWx1ZTo6ZmlsbEltYWdlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ltYWdlU2V0VmFsdWU6OmNhY2hlZEltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ltYWdlU2V0VmFsdWU6OnNlbGVjdEJlc3RGaXRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NJbWFnZVNldFZhbHVlOjp1cGRhdGVEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpDU1NJbWFnZVNldFZhbHVlOjppbWFnZVNldFdpdGhTdHlsZXNSZXNvbHZlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjp0cmF2ZXJzZVN1YnJlc291cmNlcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjpsb2FkQmVzdEZpdEltYWdl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5oOgorICAgICAgICAg
ICAgICAgIFJlZmFjdG9yIENTU0ltYWdlU2V0VmFsdWUgdG8gaW5jbHVkZSBub24tY2FjaGVkSW1h
Z2UgaW1hZ2VzCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVDdXJzb3IpOgorICAgICAgICAqIGNzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVVybE9yU3RyaW5nQXNTdHJpbmdWaWV3
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5oOgorICAgICAgICAgICAgICAgIAorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NTU1Byb3Bl
cnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRnVuYyk6CisgICAgICAg
ICAgICAgICAgV2hlbiBibGVuZGluZyB0d28gaW1hZ2VzLCBnZXQgdGhlIHNlbGVjdGVkIGltYWdl
cyBpbiBjYXNlIGl0IGlzIGFuIGltYWdlLXNldAorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
SW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1h
Z2VSZXNvdXJjZVN0eWxlSW1hZ2U6OmluaXRpYWxpemUpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FuRGlyZWN0bHlDb21w
b3NpdGVCYWNrZ3JvdW5kQmFja2dyb3VuZEltYWdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5
bGUvU2hhcGVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjppc0ltYWdl
VmFsaWQgY29uc3QpOgorICAgICAgICAgICAgICAgIFVzZSBoYXNDYWNoZWRJbWFnZSgpIGluc3Rl
YWQgb2YgaXNDYWNoZWRJbWFnZSgpIGFzIGEgU3R5bGVJbWFnZVNldCBpcyBubyBsb25nZXIgYW4g
aXNDYWNoZWRJbWFnZSgpCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNhY2hlZEltYWdlOjpTdHlsZUNhY2hl
ZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlVVJMKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OmxvYWQpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0
eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVD
dXJzb3JJbWFnZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFn
ZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZU11bHRpSW1hZ2UuY3BwOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlU2V0Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9T
dHlsZUltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUltYWdlOjpzZWxlY3RlZEltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW1hZ2U6OnNlbGVjdGVkSW1hZ2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVJbWFnZTo6aXNDdXJzb3JJbWFnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUltYWdlOjppc0ltYWdlU2V0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlSW1hZ2U6Omhhc0NhY2hlZEltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlSW1hZ2U6OlN0eWxlSW1hZ2UpOgorICAgICAgICAgICAgICAgIFNlcGFyYXRlIGN1
cnNvci9pbWFnZS1zZXQgcmVsYXRlZCBzdHVmZiBhd2F5IGZyb20gU3R5bGVDYWNoZWRJbWFnZS4K
KworICAgICAgICAqIHN0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OkJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb250ZW50KToKKyAgICAgICAgKiBz
dHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVp
bGRlclN0YXRlOjpyZXNvbHZlSW1hZ2VTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OkJ1aWxkZXJTdGF0ZTo6Y3JlYXRlU3R5bGVJbWFnZSk6CisgICAgICAgICogc3R5bGUvU3R5bGVC
dWlsZGVyU3RhdGUuaDoKKyAgICAgICAgICAgICAgICBNYXRjaCB0aGUgQ1NTIHZhbHVlcyB3aXRo
IHRoZSBjb3JyZWN0IFN0eWxlIGNsYXNzLiBBbHNvLCBlbnN1cmUgaW1hZ2Utc2V0cyByZXNvbHZl
IHRoZWlyIAorICAgICAgICAgICAgICAgIGltYWdlcycgc3R5bGVzIGFzIHRoZXkgbWF5IGNvbnRh
aW4gZ3JhZGllbnRzIGFuZCBvdGhlciBjb250ZXh0LWF3YXJlIHZhbHVlcy4KKwogMjAyMC0wMS0x
OSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10gRGV2
aXJ0dWFsaXplIEZvcm1hdHRpbmdTdGF0ZQpJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI1
NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0y
MjYyLDE1ICsyMjYyLDE4IEBAIHJlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmNwcAogcmVuZGVy
aW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVC
b3hEYXRhLmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCityZW5kZXJp
bmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZURlcHJl
Y2F0ZWRGbGV4aWJsZUJveERhdGEuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVGaWx0ZXJEYXRh
LmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlRmxleGlibGVCb3hEYXRhLmNwcAogcmVuZGVyaW5n
L3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVHcmlk
RGF0YS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZUdyaWRJdGVtRGF0YS5jcHAKK3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZUltYWdlU2V0LmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJpdGVk
RGF0YS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZU1hcnF1ZWVEYXRhLmNwcAogcmVuZGVyaW5n
L3N0eWxlL1N0eWxlTXVsdGlDb2xEYXRhLmNwcAorcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJ
bWFnZS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcAogcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuY3BwCiByZW5kZXJpbmcvc3R5
bGUvU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjU0ODA4KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzcxNSw5ICsxMzcxNSwxNSBAQAogCQlDOURBREJDOTFCMUQzQjI1MDAxRjE3
RDggLyogSlNNZWRpYVNlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNNZWRpYVNlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
OURBREJDQTFCMUQzQjI1MDAxRjE3RDggLyogSlNNZWRpYVNlc3Npb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNZWRpYVNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzlGODdDRkQxQjI4RTVGNjAwOTc5QjgzIC8qIE1lZGlhU2Vzc2lvbkV2ZW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU2Vzc2lvbkV2ZW50cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDQTA5MUQ4NjIzQ0Y5MDc4MDBBRDQzNDYgLyogU3R5bGVJbWFnZVNldC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUltYWdlU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQ0EwOTFEODkyM0NGOTA4ODAwQUQ0MzQ2IC8qIFN0eWxlSW1hZ2VTZXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVJbWFnZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDQTE2MzVEQzIwNzJFNzY5MDBFN0QyQ0UgLyogUmVmZXJyZXJQb2xpY3kuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVmZXJyZXJQb2xpY3kuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQTNCRjY3QjEwRDk5QkFFMDBFNkNFNTMgLyog
U2Nyb2xsQW5pbWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2Nyb2xsQW5pbWF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQTNCRjY3
RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQ0E1MkJBRTUyM0QwQUYxNjAwREUwQjg0IC8qIFN0eWxlQ3Vyc29ySW1hZ2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVDdXJzb3JJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUNBNTJCQUU3MjNEMEFGMTcwMERFMEI4NCAvKiBTdHlsZU11bHRpSW1hZ2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVNdWx0aUltYWdlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0E1MkJBRTgyM0QwQUYxODAwREUwQjg0IC8qIFN0eWxlTXVsdGlJ
bWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZU11bHRpSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQ0E1MkJBRTkyM0QwQUYxOTAwREUwQjg0IC8qIFN0eWxlQ3Vyc29ySW1h
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVDdXJzb3JJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDQTZDMTUyRjIyMEI0QTU1MDA1NUNCRkMgLyogSlNJREJSZXF1ZXN0Q3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCUmVxdWVz
dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNBNkMxNTM3MjIwRDFF
QjMwMDU1Q0JGQyAvKiBKU0lEQkN1cnNvckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0lEQkN1cnNvckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNBNkMxNTM4MjIwRDFFQjMwMDU1Q0JGQyAvKiBKU0lEQkN1cnNvcldpdGhW
YWx1ZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lE
QkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yNTU1Myw2ICsyNTU1OSw4IEBACiAJCQkJQkNFRjQ0NEMwRTY3NDYyODAwMUMxMjg3IC8qIFN0
eWxlQ2FjaGVkSW1hZ2UuaCAqLywKIAkJCQkxQzBBQTE2QTIxOTQwREM3MDA4OTY4MjkgLyogU3R5
bGVDb2xvclNjaGVtZS5oICovLAogCQkJCTlEQUM3QzU2MUFGMkNCNjQwMDQzN0M0NCAvKiBTdHls
ZUNvbnRlbnRBbGlnbm1lbnREYXRhLmggKi8sCisJCQkJQ0E1MkJBRTUyM0QwQUYxNjAwREUwQjg0
IC8qIFN0eWxlQ3Vyc29ySW1hZ2UuY3BwICovLAorCQkJCUNBNTJCQUU5MjNEMEFGMTkwMERFMEI4
NCAvKiBTdHlsZUN1cnNvckltYWdlLmggKi8sCiAJCQkJQkM3NzlFMTUxQkIyMjZBMjAwQ0FBOEJG
IC8qIFN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhLmggKi8sCiAJCQkJQkM1RUI4QjYwRTgyMDFCRDAw
QjI1OTY1IC8qIFN0eWxlRGVwcmVjYXRlZEZsZXhpYmxlQm94RGF0YS5jcHAgKi8sCiAJCQkJQkM1
RUI4QjcwRTgyMDFCRDAwQjI1OTY1IC8qIFN0eWxlRGVwcmVjYXRlZEZsZXhpYmxlQm94RGF0YS5o
ICovLApAQCAtMjU1NjcsMTIgKzI1NTc1LDE2IEBACiAJCQkJQTExMERCOUMxNEY1REY4NzAwQTAz
QjkzIC8qIFN0eWxlR3JpZEl0ZW1EYXRhLmNwcCAqLywKIAkJCQlBMTEwREI5QTE0RjVERjc3MDBB
MDNCOTMgLyogU3R5bGVHcmlkSXRlbURhdGEuaCAqLywKIAkJCQlCQ0VGNDNDRTBFNjczREExMDAx
QzEyODcgLyogU3R5bGVJbWFnZS5oICovLAorCQkJCUNBMDkxRDg2MjNDRjkwNzgwMEFENDM0NiAv
KiBTdHlsZUltYWdlU2V0LmNwcCAqLywKKwkJCQlDQTA5MUQ4OTIzQ0Y5MDg4MDBBRDQzNDYgLyog
U3R5bGVJbWFnZVNldC5oICovLAogCQkJCUJDMjI3MzAxMEU4MkYxRTYwMEU3Rjk3NSAvKiBTdHls
ZUluaGVyaXRlZERhdGEuY3BwICovLAogCQkJCUJDMjI3MzAyMEU4MkYxRTYwMEU3Rjk3NSAvKiBT
dHlsZUluaGVyaXRlZERhdGEuaCAqLywKIAkJCQlCQzVFQjcyNzBFODFERTgxMDBCMjU5NjUgLyog
U3R5bGVNYXJxdWVlRGF0YS5jcHAgKi8sCiAJCQkJQkM1RUI3MjgwRTgxREU4MTAwQjI1OTY1IC8q
IFN0eWxlTWFycXVlZURhdGEuaCAqLywKIAkJCQlCQzVFQjc0QjBFODFFMDY3MDBCMjU5NjUgLyog
U3R5bGVNdWx0aUNvbERhdGEuY3BwICovLAogCQkJCUJDNUVCNzRDMEU4MUUwNjcwMEIyNTk2NSAv
KiBTdHlsZU11bHRpQ29sRGF0YS5oICovLAorCQkJCUNBNTJCQUU3MjNEMEFGMTcwMERFMEI4NCAv
KiBTdHlsZU11bHRpSW1hZ2UuY3BwICovLAorCQkJCUNBNTJCQUU4MjNEMEFGMTgwMERFMEI4NCAv
KiBTdHlsZU11bHRpSW1hZ2UuaCAqLywKIAkJCQlCQzIyNzJFMTBFODJFRTlCMDBFN0Y5NzUgLyog
U3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5jcHAgKi8sCiAJCQkJQkMyMjcyRTIwRTgyRUU5QjAwRTdG
OTc1IC8qIFN0eWxlUmFyZUluaGVyaXRlZERhdGEuaCAqLywKIAkJCQlCQzIyNzJCQTBFODJFQUFF
MDBFN0Y5NzUgLyogU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAgKi8sCkBAIC0zMTM1Nyw2
ICszMTM2OSw3IEBACiAJCQkJMTE5OUZBNDYyMDhFMzVBMzAwMjM1OENDIC8qIExheW91dENvbnRh
aW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkYyNkJCNkMyMzM0M0U2RjAwMkYyQkVBIC8qIExh
eW91dENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTExMzEwQ0Y1MjBCQTRBNEMwMDY1QThE
MCAvKiBMYXlvdXREZXNjZW5kYW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0MTgw
MjU1MjNENDU0OUIwMEZGQjA3MSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU0QUJBQkREMjM2MDg4RkUwMEZBNDM0NSAvKiBMYXlvdXRJbnRlZ3JhdGlv
bkxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTExMzEwQ0Y0MjBCQTRBM0QwMDY1QThE
MCAvKiBMYXlvdXRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxRDcyRjYxNUZFNjk1
MzAwQzRDMDdFIC8qIExheW91dE1pbGVzdG9uZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjA1MCw3
ICszMjA2Myw2IEBACiAJCQkJNDU4RkU0MEExNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNlYXJj
aEZpZWxkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQgLyog
UmVuZGVyU2VsZWN0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUIyNDdBNkQwQUZENjM4
MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQxODAyNTUy
M0Q0NTQ5QjAwRkZCMDcxIC8qIExheW91dEludGVncmF0aW9uQm94VHJlZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzE5NTVBODgxNjBEMTk5MjAwODU4MDI1IC8qIFJlbmRlclNuYXBzaG90dGVkUGx1
Z0luLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhDOEZBRTBERENEMzFCMDBCNTkyRjQgLyogUmVu
ZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNjY4MEU4MUNCNzEwMEIyNTk2NSAv
KiBSZW5kZXJTdHlsZUNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk1LDE3ICs5NSwxNyBAQCB2b2lkIENTU0N1cnNvckltYWdlVmFsdWU6OmN1cnNvckVsZW1l
bnRDCiAgICAgbV9ob3RTcG90LnNldFkoc3RhdGljX2Nhc3Q8aW50Pih5KSk7CiB9CiAKLXN0ZDo6
cGFpcjxDYWNoZWRJbWFnZSosIGZsb2F0PiBDU1NDdXJzb3JJbWFnZVZhbHVlOjpsb2FkSW1hZ2Uo
Q2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25z
JiBvcHRpb25zKQorSW1hZ2VXaXRoU2NhbGUgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6c2VsZWN0QmVz
dEZpdEltYWdlKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBpZiAoaXM8Q1NTSW1h
Z2VTZXRWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENTU0ltYWdlU2V0VmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkubG9hZEJlc3RGaXRJbWFnZShs
b2FkZXIsIG9wdGlvbnMpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1
ZT4obV9pbWFnZVZhbHVlLmdldCgpKS5zZWxlY3RCZXN0Rml0SW1hZ2UoZG9jdW1lbnQpOwogCi0g
ICAgaWYgKGF1dG8qIGN1cnNvckVsZW1lbnQgPSB1cGRhdGVDdXJzb3JFbGVtZW50KCpsb2FkZXIu
ZG9jdW1lbnQoKSkpIHsKKyAgICBpZiAoYXV0byogY3Vyc29yRWxlbWVudCA9IHVwZGF0ZUN1cnNv
ckVsZW1lbnQoZG9jdW1lbnQpKSB7CiAgICAgICAgIGlmIChjdXJzb3JFbGVtZW50LT5ocmVmKCkg
IT0gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKS51cmwoKSkKLSAg
ICAgICAgICAgIG1faW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFsdWU6OmNyZWF0ZShsb2FkZXIuZG9j
dW1lbnQoKS0+Y29tcGxldGVVUkwoY3Vyc29yRWxlbWVudC0+aHJlZigpKSwgbV9sb2FkZWRGcm9t
T3BhcXVlU291cmNlKTsKKyAgICAgICAgICAgIG1faW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFsdWU6
OmNyZWF0ZShkb2N1bWVudC5jb21wbGV0ZVVSTChjdXJzb3JFbGVtZW50LT5ocmVmKCkpLCBtX2xv
YWRlZEZyb21PcGFxdWVTb3VyY2UpOwogICAgIH0KIAotICAgIHJldHVybiB7IGRvd25jYXN0PENT
U0ltYWdlVmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkubG9hZEltYWdlKGxvYWRlciwgb3B0aW9u
cyksIDEgfTsKKyAgICByZXR1cm4geyBtX2ltYWdlVmFsdWUucHRyKCkgLCAxIH07CiB9CiAKIGJv
b2wgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6ZXF1YWxzKGNvbnN0IENTU0N1cnNvckltYWdlVmFsdWUm
IG90aGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1
ZS5oCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1h
Z2VWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCwxMiBAQCBjbGFzcyBFbGVtZW50
OwogY2xhc3MgU1ZHQ3Vyc29yRWxlbWVudDsKIGNsYXNzIFNWR0VsZW1lbnQ7CiAKK3N0cnVjdCBJ
bWFnZVdpdGhTY2FsZTsKKworbmFtZXNwYWNlIFN0eWxlIHsKK2NsYXNzIEJ1aWxkZXJTdGF0ZTsK
K30KKwogY2xhc3MgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSBmaW5hbCA6IHB1YmxpYyBDU1NWYWx1ZSB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxDU1NDdXJzb3JJbWFnZVZhbHVlPiBjcmVhdGUoUmVm
PENTU1ZhbHVlPiYmIGltYWdlVmFsdWUsIGJvb2wgaGFzSG90U3BvdCwgY29uc3QgSW50UG9pbnQm
IGhvdFNwb3QsIExvYWRlZEZyb21PcGFxdWVTb3VyY2UgbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSkK
QEAgLTU2LDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBj
b25zdDsKIAotICAgIHN0ZDo6cGFpcjxDYWNoZWRJbWFnZSosIGZsb2F0PiBsb2FkSW1hZ2UoQ2Fj
aGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKKyAgICBJ
bWFnZVdpdGhTY2FsZSBzZWxlY3RCZXN0Rml0SW1hZ2UoY29uc3QgRG9jdW1lbnQmKTsKIAogICAg
IHZvaWQgcmVtb3ZlUmVmZXJlbmNlZEVsZW1lbnQoU1ZHRWxlbWVudCopOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDE5ICsyOCwyMCBAQAogCiAjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgogI2luY2x1ZGUg
IkNTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVz
dC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTdHlsZUJ1aWxk
ZXJTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1DU1NJbWFnZVNldFZhbHVlOjpDU1NJbWFnZVNldFZhbHVlKExvYWRl
ZEZyb21PcGFxdWVTb3VyY2UgbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSkKK1JlZjxDU1NJbWFnZVNl
dFZhbHVlPiBDU1NJbWFnZVNldFZhbHVlOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IENTU0ltYWdlU2V0VmFsdWUpOworfQorCitDU1NJbWFnZVNldFZhbHVlOjpDU1NJbWFn
ZVNldFZhbHVlKCkKICAgICA6IENTU1ZhbHVlTGlzdChJbWFnZVNldENsYXNzLCBDb21tYVNlcGFy
YXRvcikKLSAgICAsIG1fbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZShsb2FkZWRGcm9tT3BhcXVlU291
cmNlKQogewogfQogCkBAIC01MiwxNSArNTMsMTQgQEAgdm9pZCBDU1NJbWFnZVNldFZhbHVlOjpm
aWxsSW1hZ2VTZXQoKQogICAgIHNpemVfdCBpID0gMDsKICAgICB3aGlsZSAoaSA8IGxlbmd0aCkg
ewogICAgICAgICBDU1NWYWx1ZSogaW1hZ2VWYWx1ZSA9IGl0ZW0oaSk7Ci0gICAgICAgIFVSTCBp
bWFnZVVSTCA9IGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KCppbWFnZVZhbHVlKS51cmwoKTsKLQor
ICAgICAgICBBU1NFUlQoaXM8Q1NTSW1hZ2VWYWx1ZT4oaW1hZ2VWYWx1ZSkgfHwgaXM8Q1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZT4oaW1hZ2VWYWx1ZSkpOwogICAgICAgICArK2k7CiAgICAgICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBsZW5ndGgpOwogICAgICAgICBDU1NW
YWx1ZSogc2NhbGVGYWN0b3JWYWx1ZSA9IGl0ZW0oaSk7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFj
dG9yID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpzY2FsZUZhY3RvclZhbHVlKS5mbG9h
dFZhbHVlKCk7CiAKICAgICAgICAgSW1hZ2VXaXRoU2NhbGUgaW1hZ2U7Ci0gICAgICAgIGltYWdl
LmltYWdlVVJMID0gaW1hZ2VVUkw7CisgICAgICAgIGltYWdlLnZhbHVlID0gaW1hZ2VWYWx1ZTsK
ICAgICAgICAgaW1hZ2Uuc2NhbGVGYWN0b3IgPSBzY2FsZUZhY3RvcjsKICAgICAgICAgbV9pbWFn
ZXNJblNldC5hcHBlbmQoaW1hZ2UpOwogICAgICAgICArK2k7CkBAIC03MCw3ICs3MCw3IEBAIHZv
aWQgQ1NTSW1hZ2VTZXRWYWx1ZTo6ZmlsbEltYWdlU2V0KCkKICAgICBzdGQ6OnNvcnQobV9pbWFn
ZXNJblNldC5iZWdpbigpLCBtX2ltYWdlc0luU2V0LmVuZCgpLCBDU1NJbWFnZVNldFZhbHVlOjpj
b21wYXJlQnlTY2FsZUZhY3Rvcik7CiB9CiAKLUNTU0ltYWdlU2V0VmFsdWU6OkltYWdlV2l0aFNj
YWxlIENTU0ltYWdlU2V0VmFsdWU6OmJlc3RJbWFnZUZvclNjYWxlRmFjdG9yKCkKK0ltYWdlV2l0
aFNjYWxlIENTU0ltYWdlU2V0VmFsdWU6OmJlc3RJbWFnZUZvclNjYWxlRmFjdG9yKCkKIHsKICAg
ICBpZiAoIW1faW1hZ2VzSW5TZXQuc2l6ZSgpKQogICAgICAgICBmaWxsSW1hZ2VTZXQoKTsKQEAg
LTg1LDQyICs4NSw0OSBAQCBDU1NJbWFnZVNldFZhbHVlOjpJbWFnZVdpdGhTY2FsZSBDU1NJbWFn
CiAgICAgcmV0dXJuIGltYWdlOwogfQogCi1zdGQ6OnBhaXI8Q2FjaGVkSW1hZ2UqLCBmbG9hdD4g
Q1NTSW1hZ2VTZXRWYWx1ZTo6bG9hZEJlc3RGaXRJbWFnZShDYWNoZWRSZXNvdXJjZUxvYWRlciYg
bG9hZGVyLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCitDYWNoZWRJbWFn
ZSogQ1NTSW1hZ2VTZXRWYWx1ZTo6Y2FjaGVkSW1hZ2UoKSBjb25zdAogewotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGxvYWRlci5kb2N1bWVudCgpOwotICAgIEFTU0VSVChkb2N1bWVudCk7Cisg
ICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KG1fc2VsZWN0ZWRJbWFnZVZhbHVlKSkKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KCptX3NlbGVjdGVkSW1hZ2VWYWx1ZSkuY2Fj
aGVkSW1hZ2UoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KIAotICAgIHVwZGF0ZURldmljZVNj
YWxlRmFjdG9yKCpkb2N1bWVudCk7CitJbWFnZVdpdGhTY2FsZSBDU1NJbWFnZVNldFZhbHVlOjpz
ZWxlY3RCZXN0Rml0SW1hZ2UoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQoreworICAgIHVwZGF0
ZURldmljZVNjYWxlRmFjdG9yKGRvY3VtZW50KTsKIAogICAgIGlmICghbV9hY2Nlc3NlZEJlc3RG
aXRJbWFnZSkgewogICAgICAgICBtX2FjY2Vzc2VkQmVzdEZpdEltYWdlID0gdHJ1ZTsKLQotICAg
ICAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwgd2Ugd2FudCB0byB0YWtlIG11Y2ggbW9yZSB0
aGFuIGRldmljZVNjYWxlRmFjdG9yIGludG8gYWNvdW50IGhlcmUuCi0gICAgICAgIC8vIEFsbCBm
b3JtcyBvZiBzY2FsZSBzaG91bGQgYmUgaW5jbHVkZWQ6IFBhZ2U6OnBhZ2VTY2FsZUZhY3Rvcigp
LCBGcmFtZTo6cGFnZVpvb21GYWN0b3IoKSwKLSAgICAgICAgLy8gYW5kIGFueSBDU1MgdHJhbnNm
b3Jtcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNjk4Ci0gICAg
ICAgIEltYWdlV2l0aFNjYWxlIGltYWdlID0gYmVzdEltYWdlRm9yU2NhbGVGYWN0b3IoKTsKLQot
ICAgICAgICBSZXNvdXJjZUxvYWRlck9wdGlvbnMgbG9hZE9wdGlvbnMgPSBvcHRpb25zOwotICAg
ICAgICBsb2FkT3B0aW9ucy5sb2FkZWRGcm9tT3BhcXVlU291cmNlID0gbV9sb2FkZWRGcm9tT3Bh
cXVlU291cmNlOwotICAgICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJj
ZVJlcXVlc3QoZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGltYWdlLmltYWdlVVJMKSksIGxvYWRPcHRp
b25zKTsKLSAgICAgICAgcmVxdWVzdC5zZXRJbml0aWF0b3IoY2FjaGVkUmVzb3VyY2VSZXF1ZXN0
SW5pdGlhdG9ycygpLmNzcyk7Ci0gICAgICAgIGlmIChvcHRpb25zLm1vZGUgPT0gRmV0Y2hPcHRp
b25zOjpNb2RlOjpDb3JzKQotICAgICAgICAgICAgcmVxdWVzdC51cGRhdGVGb3JBY2Nlc3NDb250
cm9sKCpkb2N1bWVudCk7Ci0KLSAgICAgICAgbV9jYWNoZWRJbWFnZSA9IGxvYWRlci5yZXF1ZXN0
SW1hZ2UoV1RGTW92ZShyZXF1ZXN0KSkudmFsdWVfb3IobnVsbHB0cik7Ci0gICAgICAgIG1fYmVz
dEZpdEltYWdlU2NhbGVGYWN0b3IgPSBpbWFnZS5zY2FsZUZhY3RvcjsKKyAgICAgICAgbV9iZXN0
Rml0SW1hZ2UgPSBiZXN0SW1hZ2VGb3JTY2FsZUZhY3RvcigpOwogICAgIH0KLSAgICByZXR1cm4g
eyBtX2NhY2hlZEltYWdlLmdldCgpLCBtX2Jlc3RGaXRJbWFnZVNjYWxlRmFjdG9yIH07CisKKyAg
ICByZXR1cm4gbV9iZXN0Rml0SW1hZ2U7CiB9CiAKIHZvaWQgQ1NTSW1hZ2VTZXRWYWx1ZTo6dXBk
YXRlRGV2aWNlU2NhbGVGYWN0b3IoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQogeworCisgICAg
Ly8gRklYTUU6IEluIHRoZSBmdXR1cmUsIHdlIHdhbnQgdG8gdGFrZSBtdWNoIG1vcmUgdGhhbiBk
ZXZpY2VTY2FsZUZhY3RvciBpbnRvIGFjb3VudCBoZXJlLgorICAgIC8vIEFsbCBmb3JtcyBvZiBz
Y2FsZSBzaG91bGQgYmUgaW5jbHVkZWQ6IFBhZ2U6OnBhZ2VTY2FsZUZhY3RvcigpLCBGcmFtZTo6
cGFnZVpvb21GYWN0b3IoKSwKKyAgICAvLyBhbmQgYW55IENTUyB0cmFuc2Zvcm1zLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE2OTgKICAgICBmbG9hdCBkZXZpY2VT
Y2FsZUZhY3RvciA9IGRvY3VtZW50LnBhZ2UoKSA/IGRvY3VtZW50LnBhZ2UoKS0+ZGV2aWNlU2Nh
bGVGYWN0b3IoKSA6IDE7CiAgICAgaWYgKGRldmljZVNjYWxlRmFjdG9yID09IG1fZGV2aWNlU2Nh
bGVGYWN0b3IpCiAgICAgICAgIHJldHVybjsKICAgICBtX2RldmljZVNjYWxlRmFjdG9yID0gZGV2
aWNlU2NhbGVGYWN0b3I7CiAgICAgbV9hY2Nlc3NlZEJlc3RGaXRJbWFnZSA9IGZhbHNlOwotICAg
IG1fY2FjaGVkSW1hZ2UgPSBudWxscHRyOworICAgIG1fc2VsZWN0ZWRJbWFnZVZhbHVlID0gbnVs
bHB0cjsKK30KKworUmVmPENTU0ltYWdlU2V0VmFsdWU+IENTU0ltYWdlU2V0VmFsdWU6OmltYWdl
U2V0V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkK
K3sKKyAgICBSZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gcmVzdWx0ID0gQ1NTSW1hZ2VTZXRWYWx1ZTo6
Y3JlYXRlKCk7CisgICAgc2l6ZV90IGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpICsgMSA8IGxlbmd0aDsgaSArPSAyKSB7CisgICAgICAgIHJlc3VsdC0+
YXBwZW5kKGJ1aWxkZXJTdGF0ZS5yZXNvbHZlSW1hZ2VTdHlsZXMoKml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soaSkpKTsKKyAgICAgICAgcmVzdWx0LT5hcHBlbmQoKml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soaSArIDEpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBTdHJpbmcgQ1NT
SW1hZ2VTZXRWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CkBAIC0xNTUsOSArMTYyLDcgQEAg
U3RyaW5nIENTU0ltYWdlU2V0VmFsdWU6OmN1c3RvbUNTU1RleHQoKQogCiBib29sIENTU0ltYWdl
U2V0VmFsdWU6OnRyYXZlcnNlU3VicmVzb3VyY2VzKGNvbnN0IFdURjo6RnVuY3Rpb248Ym9vbCAo
Y29uc3QgQ2FjaGVkUmVzb3VyY2UmKT4mIGhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2Nh
Y2hlZEltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGhhbmRsZXIoKm1f
Y2FjaGVkSW1hZ2UpOworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2VWYWx1ZSAmJiBtX3NlbGVj
dGVkSW1hZ2VWYWx1ZS0+dHJhdmVyc2VTdWJyZXNvdXJjZXMoaGFuZGxlcik7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUu
aAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNTMgKzI5LDU0IEBACiAjaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlck9wdGlvbnMuaCIKICNp
bmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FjaGVkSW1hZ2U7CiBjbGFzcyBDYWNoZWRSZXNvdXJj
ZUxvYWRlcjsKK2NsYXNzIENTU0ltYWdlVmFsdWU7CiBjbGFzcyBEb2N1bWVudDsKIAorbmFtZXNw
YWNlIFN0eWxlIHsKK2NsYXNzIEJ1aWxkZXJTdGF0ZTsKK30KKworc3RydWN0IEltYWdlV2l0aFNj
YWxlIHsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOworICAgIGZsb2F0IHNjYWxlRmFjdG9y
IHsgMSB9OworfTsKKwogY2xhc3MgQ1NTSW1hZ2VTZXRWYWx1ZSBmaW5hbCA6IHB1YmxpYyBDU1NW
YWx1ZUxpc3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gY3Jl
YXRlKExvYWRlZEZyb21PcGFxdWVTb3VyY2UgbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ltYWdlU2V0VmFsdWUobG9hZGVkRnJv
bU9wYXF1ZVNvdXJjZSkpOwotICAgIH0KKyAgICBzdGF0aWMgUmVmPENTU0ltYWdlU2V0VmFsdWU+
IGNyZWF0ZSgpOwogICAgIH5DU1NJbWFnZVNldFZhbHVlKCk7CiAKLSAgICBzdGQ6OnBhaXI8Q2Fj
aGVkSW1hZ2UqLCBmbG9hdD4gIGxvYWRCZXN0Rml0SW1hZ2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXIm
LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKLSAgICBDYWNoZWRJbWFnZSogY2FjaGVk
SW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEltYWdlLmdldCgpOyB9CisgICAgSW1hZ2VX
aXRoU2NhbGUgc2VsZWN0QmVzdEZpdEltYWdlKGNvbnN0IERvY3VtZW50Jik7CisgICAgQ2FjaGVk
SW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3Q7CiAKICAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4dCgp
IGNvbnN0OwogCi0gICAgc3RydWN0IEltYWdlV2l0aFNjYWxlIHsKLSAgICAgICAgVVJMIGltYWdl
VVJMOwotICAgICAgICBmbG9hdCBzY2FsZUZhY3RvcjsKLSAgICB9OwotCiAgICAgYm9vbCB0cmF2
ZXJzZVN1YnJlc291cmNlcyhjb25zdCBXVEY6OkZ1bmN0aW9uPGJvb2wgKGNvbnN0IENhY2hlZFJl
c291cmNlJik+JiBoYW5kbGVyKSBjb25zdDsKIAogICAgIHZvaWQgdXBkYXRlRGV2aWNlU2NhbGVG
YWN0b3IoY29uc3QgRG9jdW1lbnQmKTsKIAotICAgIFVSTCBiZXN0SW1hZ2VGb3JTY2FsZUZhY3Rv
clVSTCgpIHsgcmV0dXJuIGJlc3RJbWFnZUZvclNjYWxlRmFjdG9yKCkuaW1hZ2VVUkw7IH0KKyAg
ICBSZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gaW1hZ2VTZXRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VXaXRoU2NhbGUgYmVzdElt
YWdlRm9yU2NhbGVGYWN0b3IoKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDU1NJbWFnZVNl
dFZhbHVlKExvYWRlZEZyb21PcGFxdWVTb3VyY2UpOworICAgIENTU0ltYWdlU2V0VmFsdWUoKTsK
IAogICAgIHZvaWQgZmlsbEltYWdlU2V0KCk7CiAgICAgc3RhdGljIGlubGluZSBib29sIGNvbXBh
cmVCeVNjYWxlRmFjdG9yKEltYWdlV2l0aFNjYWxlIGZpcnN0LCBJbWFnZVdpdGhTY2FsZSBzZWNv
bmQpIHsgcmV0dXJuIGZpcnN0LnNjYWxlRmFjdG9yIDwgc2Vjb25kLnNjYWxlRmFjdG9yOyB9CiAK
LSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRJbWFnZT4gbV9jYWNoZWRJbWFnZTsKKyAg
ICBSZWZQdHI8Q1NTVmFsdWU+IG1fc2VsZWN0ZWRJbWFnZVZhbHVlOwogICAgIGJvb2wgbV9hY2Nl
c3NlZEJlc3RGaXRJbWFnZSB7IGZhbHNlIH07Ci0gICAgZmxvYXQgbV9iZXN0Rml0SW1hZ2VTY2Fs
ZUZhY3RvciB7IDEgfTsKKyAgICBJbWFnZVdpdGhTY2FsZSBtX2Jlc3RGaXRJbWFnZTsKICAgICBm
bG9hdCBtX2RldmljZVNjYWxlRmFjdG9yIHsgMSB9OwotCiAgICAgVmVjdG9yPEltYWdlV2l0aFNj
YWxlPiBtX2ltYWdlc0luU2V0OwotICAgIExvYWRlZEZyb21PcGFxdWVTb3VyY2UgbV9sb2FkZWRG
cm9tT3BhcXVlU291cmNlIHsgTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6Tm8gfTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UHJvcGVydHlQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjE1MSw3ICsyMTUxLDcgQEAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZQogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUN1cnNvcihDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgYm9vbCBpblF1aXJr
c01vZGUpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdDsKLSAgICB3aGlsZSAoUmVm
UHRyPENTU1ZhbHVlPiBpbWFnZSA9IGNvbnN1bWVJbWFnZShyYW5nZSwgY29udGV4dCwgQ29uc3Vt
ZUdlbmVyYXRlZEltYWdlOjpGb3JiaWQpKSB7CisgICAgd2hpbGUgKFJlZlB0cjxDU1NWYWx1ZT4g
aW1hZ2UgPSBjb25zdW1lSW1hZ2UocmFuZ2UsIGNvbnRleHQsIHsgQWxsb3dlZEltYWdlVHlwZXM6
OlVSTEZ1bmN0aW9uLCBBbGxvd2VkSW1hZ2VUeXBlczo6SW1hZ2VTZXQgfSkpIHsKICAgICAgICAg
ZG91YmxlIG51bTsKICAgICAgICAgSW50UG9pbnQgaG90U3BvdCgtMSwgLTEpOwogICAgICAgICBi
b29sIGhvdFNwb3RTcGVjaWZpZWQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9u
IDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3OSwyNCArMTQ3OSwxNiBAQCBzdGF0aWMg
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lR2VuZXJhdGVkCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotc3RhdGljIFN0cmluZ1ZpZXcgY29uc3VtZVVybE9yU3RyaW5nQXNTdHJpbmdWaWV3KENTU1Bh
cnNlclRva2VuUmFuZ2UmIGFyZ3MpCi17Ci0gICAgaWYgKGFyZ3MucGVlaygpLnR5cGUoKSA9PSBT
dHJpbmdUb2tlbikKLSAgICAgICAgcmV0dXJuIGFyZ3MuY29uc3VtZUluY2x1ZGluZ1doaXRlc3Bh
Y2UoKS52YWx1ZSgpOwotICAgIHJldHVybiBjb25zdW1lVXJsQXNTdHJpbmdWaWV3KGFyZ3MpOwot
fQotCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2VTZXQoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCitzdGF0aWMg
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2VTZXQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIE9wdGlvblNldDxBbGxvd2VkSW1h
Z2VUeXBlcz4gYWxsb3dlZEltYWdlVHlwZXMpCiB7CiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBy
YW5nZUNvcHkgPSByYW5nZTsKICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGFyZ3MgPSBjb25zdW1l
RnVuY3Rpb24ocmFuZ2VDb3B5KTsKLSAgICBSZWZQdHI8Q1NTSW1hZ2VTZXRWYWx1ZT4gaW1hZ2VT
ZXQgPSBDU1NJbWFnZVNldFZhbHVlOjpjcmVhdGUoY29udGV4dC5pc0NvbnRlbnRPcGFxdWUgPyBM
b2FkZWRGcm9tT3BhcXVlU291cmNlOjpZZXMgOiBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpObyk7
CisgICAgUmVmUHRyPENTU0ltYWdlU2V0VmFsdWU+IGltYWdlU2V0ID0gQ1NTSW1hZ2VTZXRWYWx1
ZTo6Y3JlYXRlKCk7CiAgICAgZG8gewotICAgICAgICBBdG9tU3RyaW5nIHVybFZhbHVlID0gY29u
c3VtZVVybE9yU3RyaW5nQXNTdHJpbmdWaWV3KGFyZ3MpLnRvQXRvbVN0cmluZygpOwotICAgICAg
ICBpZiAodXJsVmFsdWUuaXNOdWxsKCkpCisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gaW1hZ2Ug
PSBjb25zdW1lSW1hZ2UoYXJncywgY29udGV4dCwgKGFsbG93ZWRJbWFnZVR5cGVzIHwgQWxsb3dl
ZEltYWdlVHlwZXM6OlJhd1N0cmluZ0FzVVJMKSAtIEFsbG93ZWRJbWFnZVR5cGVzOjpJbWFnZVNl
dCk7CisgICAgICAgIGlmICghaW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGltYWdlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKGNv
bXBsZXRlVVJMKGNvbnRleHQsIHVybFZhbHVlKSwgY29udGV4dC5pc0NvbnRlbnRPcGFxdWUgPyBM
b2FkZWRGcm9tT3BhcXVlU291cmNlOjpZZXMgOiBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpObyk7
CiAgICAgICAgIGltYWdlU2V0LT5hcHBlbmQoaW1hZ2UucmVsZWFzZU5vbk51bGwoKSk7CiAKICAg
ICAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gYXJncy5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpOwpAQCAtMTcxMSwxOSArMTcwMywyNSBAQCBSZWZQdHI8Q1NTU2hhZG93VmFs
dWU+IGNvbnN1bWVTaW5nbGVTaGFkCiAgICAgcmV0dXJuIENTU1NoYWRvd1ZhbHVlOjpjcmVhdGUo
V1RGTW92ZShob3Jpem9udGFsT2Zmc2V0KSwgV1RGTW92ZSh2ZXJ0aWNhbE9mZnNldCksIFdURk1v
dmUoYmx1clJhZGl1cyksIFdURk1vdmUoc3ByZWFkRGlzdGFuY2UpLCBXVEZNb3ZlKHN0eWxlKSwg
V1RGTW92ZShjb2xvcikpOwogfQogCi1SZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0LCBDb25zdW1l
R2VuZXJhdGVkSW1hZ2UgZ2VuZXJhdGVkSW1hZ2UpCitSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJ
bWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0
LCBPcHRpb25TZXQ8QWxsb3dlZEltYWdlVHlwZXM+IGFsbG93ZWRJbWFnZVR5cGVzKQogewotICAg
IEF0b21TdHJpbmcgdXJpID0gY29uc3VtZVVybEFzU3RyaW5nVmlldyhyYW5nZSkudG9BdG9tU3Ry
aW5nKCk7Ci0gICAgaWYgKCF1cmkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBDU1NJbWFnZVZh
bHVlOjpjcmVhdGUoY29tcGxldGVVUkwoY29udGV4dCwgdXJpKSwgY29udGV4dC5pc0NvbnRlbnRP
cGFxdWUgPyBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpZZXMgOiBMb2FkZWRGcm9tT3BhcXVlU291
cmNlOjpObyk7CisgICAgaWYgKChyYW5nZS5wZWVrKCkudHlwZSgpID09IFN0cmluZ1Rva2VuKSAm
JiAoYWxsb3dlZEltYWdlVHlwZXMgJiBBbGxvd2VkSW1hZ2VUeXBlczo6UmF3U3RyaW5nQXNVUkwp
KQorICAgICAgICByZXR1cm4gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKGNvbXBsZXRlVVJMKGNvbnRl
eHQsIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFsdWUoKS50b0F0b21TdHJp
bmcoKSksIGNvbnRleHQuaXNDb250ZW50T3BhcXVlID8gTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6
WWVzIDogTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6Tm8pOwogCiAgICAgaWYgKHJhbmdlLnBlZWso
KS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbikgewogICAgICAgICBDU1NWYWx1ZUlEIGlkID0gcmFu
Z2UucGVlaygpLmZ1bmN0aW9uSWQoKTsKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlV2Via2l0
SW1hZ2VTZXQgfHwgaWQgPT0gQ1NTVmFsdWVJbWFnZVNldCkKLSAgICAgICAgICAgIHJldHVybiBj
b25zdW1lSW1hZ2VTZXQocmFuZ2UsIGNvbnRleHQpOwotICAgICAgICBpZiAoZ2VuZXJhdGVkSW1h
Z2UgPT0gQ29uc3VtZUdlbmVyYXRlZEltYWdlOjpBbGxvdyAmJiBpc0dlbmVyYXRlZEltYWdlKGlk
KSkKKyAgICAgICAgaWYgKChhbGxvd2VkSW1hZ2VUeXBlcyAmIEFsbG93ZWRJbWFnZVR5cGVzOjpJ
bWFnZVNldCkgJiYgKGlkID09IENTU1ZhbHVlV2Via2l0SW1hZ2VTZXQgfHwgaWQgPT0gQ1NTVmFs
dWVJbWFnZVNldCkpCisgICAgICAgICAgICByZXR1cm4gY29uc3VtZUltYWdlU2V0KHJhbmdlLCBj
b250ZXh0LCBhbGxvd2VkSW1hZ2VUeXBlcyk7CisgICAgICAgIGlmICgoYWxsb3dlZEltYWdlVHlw
ZXMgJiBBbGxvd2VkSW1hZ2VUeXBlczo6R2VuZXJhdGVkSW1hZ2UpICYmIGlzR2VuZXJhdGVkSW1h
Z2UoaWQpKQogICAgICAgICAgICAgcmV0dXJuIGNvbnN1bWVHZW5lcmF0ZWRJbWFnZShyYW5nZSwg
Y29udGV4dCk7CiAgICAgfQorCisgICAgaWYgKGFsbG93ZWRJbWFnZVR5cGVzICYgQWxsb3dlZElt
YWdlVHlwZXM6OlVSTEZ1bmN0aW9uKSB7CisgICAgICAgIGF1dG8gdXJpID0gY29uc3VtZVVybEFz
U3RyaW5nVmlldyhyYW5nZSk7CisgICAgICAgIGlmICghdXJpLmlzTnVsbCgpKQorICAgICAgICAg
ICAgcmV0dXJuIENTU0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTChjb250ZXh0LCB1cmku
dG9BdG9tU3RyaW5nKCkpLCBjb250ZXh0LmlzQ29udGVudE9wYXF1ZSA/IExvYWRlZEZyb21PcGFx
dWVTb3VyY2U6OlllcyA6IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6Ok5vKTsKKyAgICB9CisKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCShyZXZpc2lvbiAyNTQ4MDgpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiQ1NTU2hhZG93VmFsdWUu
aCIKICNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKICNpbmNsdWRlICJMZW5ndGguaCIgLy8gRm9y
IFZhbHVlUmFuZ2UKKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtODksMTIgKzkwLDE1IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZVBvc2l0aW8KIGJvb2wgY29uc3VtZVBvc2l0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmLCBD
U1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBQb3NpdGlvblN5bnRheCwgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiYgcmVzdWx0WCwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgcmVzdWx0
WSk7CiBib29sIGNvbnN1bWVPbmVPclR3b1ZhbHVlZFBvc2l0aW9uKENTU1BhcnNlclRva2VuUmFu
Z2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+JiByZXN1bHRYLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiByZXN1bHRZKTsKIAotZW51
bSBjbGFzcyBDb25zdW1lR2VuZXJhdGVkSW1hZ2UgewotICAgIEFsbG93LAotICAgIEZvcmJpZAor
ZW51bSBjbGFzcyBBbGxvd2VkSW1hZ2VUeXBlcyA6IHVpbnQ4X3QgeworICAgIFVSTEZ1bmN0aW9u
ID0gMSA8PCAwLAorICAgIFJhd1N0cmluZ0FzVVJMID0gMSA8PCAxLAorICAgIEltYWdlU2V0ID0g
MSA8PCAyLAorICAgIEdlbmVyYXRlZEltYWdlID0gMSA8PCAzCiB9OwogCi1SZWZQdHI8Q1NTVmFs
dWU+IGNvbnN1bWVJbWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyQ29udGV4dCwg
Q29uc3VtZUdlbmVyYXRlZEltYWdlID0gQ29uc3VtZUdlbmVyYXRlZEltYWdlOjpBbGxvdyk7CitS
ZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFy
c2VyQ29udGV4dCwgT3B0aW9uU2V0PEFsbG93ZWRJbWFnZVR5cGVzPiA9IHsgQWxsb3dlZEltYWdl
VHlwZXM6OlVSTEZ1bmN0aW9uLCBBbGxvd2VkSW1hZ2VUeXBlczo6SW1hZ2VTZXQsIEFsbG93ZWRJ
bWFnZVR5cGVzOjpHZW5lcmF0ZWRJbWFnZSB9KTsKKwogUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1l
SW1hZ2VPck5vbmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlckNvbnRleHQpOwogCiBl
bnVtIGNsYXNzIEFsbG93ZWRGaWx0ZXJGdW5jdGlvbnMgewpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAkocmV2
aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVy
dHlBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMsNiArMzMzLDEyIEBAIHN0YXRp
YyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRnUKICAgICBpZiAoIWZyb20gfHwgIXRv
KQogICAgICAgICByZXR1cm4gdG87CiAKKyAgICBmcm9tID0gZnJvbS0+c2VsZWN0ZWRJbWFnZSgp
OworICAgIHRvID0gdG8tPnNlbGVjdGVkSW1hZ2UoKTsKKworICAgIGlmICghZnJvbSB8fCAhdG8p
CisgICAgICAgIHJldHVybiB0bzsgICAgCisKICAgICAvLyBBbmltYXRpb24gYmV0d2VlbiB0d28g
Z2VuZXJhdGVkIGltYWdlcy4gQ3Jvc3MgZmFkZSBmb3IgYWxsIG90aGVyIGNhc2VzLgogICAgIGlm
IChpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVHZW5lcmF0ZWRJbWFn
ZT4oKnRvKSkgewogICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlJiBmcm9tR2VuZXJhdGVk
ID0gZG93bmNhc3Q8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pLmltYWdlVmFsdWUoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYyLDcgKzk2Miw3IEBAIHZv
aWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWUKIAogICAgICAgICAgICAgYXV0
byBkcmF3UmVzdWx0ID0gY29udGV4dC5kcmF3VGlsZWRJbWFnZSgqaW1hZ2UsIGdlb21ldHJ5LmRl
c3RSZWN0KCksIHRvTGF5b3V0UG9pbnQoZ2VvbWV0cnkucmVsYXRpdmVQaGFzZSgpKSwgZ2VvbWV0
cnkudGlsZVNpemUoKSwgZ2VvbWV0cnkuc3BhY2VTaXplKCksIG9wdGlvbnMpOwogICAgICAgICAg
ICAgaWYgKGRyYXdSZXN1bHQgPT0gSW1hZ2VEcmF3UmVzdWx0OjpEaWRSZXF1ZXN0RGVjb2Rpbmcp
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoYmdJbWFnZS0+aXNDYWNoZWRJbWFnZSgpKTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoYmdJbWFnZS0+aGFzQ2FjaGVkSW1hZ2UoKSk7CiAgICAgICAg
ICAgICAgICAgYmdJbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+YWRkQ2xpZW50V2FpdGluZ0ZvckFzeW5j
RGVjb2RpbmcoKnRoaXMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlU3R5
bGVJbWFnZS5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDcgKzQ0LDcgQEAgUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2U6OlJlbmRlckltYQogCiB2
b2lkIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlOjppbml0aWFsaXplKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyKQogewotICAgIFJlbmRlckltYWdlUmVzb3VyY2U6OmluaXRpYWxpemUocmVu
ZGVyZXIsIG1fc3R5bGVJbWFnZS0+aXNDYWNoZWRJbWFnZSgpID8gbV9zdHlsZUltYWdlLmdldCgp
LmNhY2hlZEltYWdlKCkgOiBudWxscHRyKTsKKyAgICBSZW5kZXJJbWFnZVJlc291cmNlOjppbml0
aWFsaXplKHJlbmRlcmVyLCBtX3N0eWxlSW1hZ2UtPmhhc0NhY2hlZEltYWdlKCkgPyBtX3N0eWxl
SW1hZ2UuZ2V0KCkuY2FjaGVkSW1hZ2UoKSA6IG51bGxwdHIpOwogICAgIG1fc3R5bGVJbWFnZS0+
YWRkQ2xpZW50KHRoaXMtPnJlbmRlcmVyKCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24gMjU0ODA4KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxMDcsNyArMjEwNyw3IEBAIHN0YXRpYyBib29sIGNhbkRpcmVjdGx5Q29t
cG9zaXRlQmFja2dyb3UKIAogICAgIC8vIEZJWE1FOiBzdXBwb3J0IGdyYWRpZW50cyB3aXRoIGlz
R2VuZXJhdGVkSW1hZ2UuCiAgICAgYXV0byogc3R5bGVJbWFnZSA9IGZpbGxMYXllci5pbWFnZSgp
OwotICAgIGlmICghc3R5bGVJbWFnZS0+aXNDYWNoZWRJbWFnZSgpKQorICAgIGlmICghc3R5bGVJ
bWFnZS0+aGFzQ2FjaGVkSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0
byogaW1hZ2UgPSBzdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZSgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYXBlVmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmNwcAkocmV2aXNpb24g
MjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYXBlVmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIGJvb2wgU2hhcGVWYWx1ZTo6aXNJbWFn
ZVZhbGlkKCkgY29uc3QKIHsKICAgICBpZiAoIW1faW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAobV9pbWFnZS0+aXNDYWNoZWRJbWFnZSgpKSB7CisgICAgaWYgKG1faW1hZ2Ut
Pmhhc0NhY2hlZEltYWdlKCkpIHsKICAgICAgICAgYXV0byogY2FjaGVkSW1hZ2UgPSBtX2ltYWdl
LT5jYWNoZWRJbWFnZSgpOwogICAgICAgICByZXR1cm4gY2FjaGVkSW1hZ2UgJiYgY2FjaGVkSW1h
Z2UtPmhhc0ltYWdlKCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmNwcAkocmV2aXNpb24gMjU0ODA4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCw4ICsyNCw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgogCi0jaW5jbHVkZSAiQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5o
IgotI2luY2x1ZGUgIkNTU0ltYWdlU2V0VmFsdWUuaCIKICNpbmNsdWRlICJDU1NJbWFnZVZhbHVl
LmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50Lmgi
CkBAIC0zMywxOSArMzEsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TdHlsZUNhY2hl
ZEltYWdlOjpTdHlsZUNhY2hlZEltYWdlKENTU1ZhbHVlJiBjc3NWYWx1ZSkKK1N0eWxlQ2FjaGVk
SW1hZ2U6OlN0eWxlQ2FjaGVkSW1hZ2UoQ1NTSW1hZ2VWYWx1ZSYgY3NzVmFsdWUsIGZsb2F0IHNj
YWxlRmFjdG9yKQogICAgIDogbV9jc3NWYWx1ZShjc3NWYWx1ZSkKKyAgICAsIG1fc2NhbGVGYWN0
b3Ioc2NhbGVGYWN0b3IpCiB7Ci0gICAgQVNTRVJUKGlzPENTU0ltYWdlVmFsdWU+KG1fY3NzVmFs
dWUpIHx8IGlzPENTU0ltYWdlU2V0VmFsdWU+KG1fY3NzVmFsdWUpIHx8IGlzPENTU0N1cnNvcklt
YWdlVmFsdWU+KG1fY3NzVmFsdWUpKTsKLQogICAgIG1faXNDYWNoZWRJbWFnZSA9IHRydWU7Ci0K
LSAgICAvLyBDU1NJbWFnZVZhbHVlIGRvZXNuJ3QgZ2V0IGludmFsaWRhdGVkIHNvIHdlIGNhbiBn
cmFiIHRoZSBDYWNoZWRJbWFnZSBpbW1lZGlhdGVseSBpZiBpdCBleGlzdHMuCi0gICAgaWYgKGlz
PENTU0ltYWdlVmFsdWU+KG1fY3NzVmFsdWUpKSB7Ci0gICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBk
b3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX2Nzc1ZhbHVlLmdldCgpKS5jYWNoZWRJbWFnZSgpOwot
ICAgICAgICBpZiAobV9jYWNoZWRJbWFnZSkKLSAgICAgICAgICAgIG1faXNQZW5kaW5nID0gZmFs
c2U7Ci0gICAgfQorICAgIG1fY2FjaGVkSW1hZ2UgPSBtX2Nzc1ZhbHVlLT5jYWNoZWRJbWFnZSgp
OworICAgIGlmIChtX2NhY2hlZEltYWdlKQorICAgICAgICBtX2lzUGVuZGluZyA9IGZhbHNlOwog
fQogCiBTdHlsZUNhY2hlZEltYWdlOjp+U3R5bGVDYWNoZWRJbWFnZSgpID0gZGVmYXVsdDsKQEAg
LTY4LDQxICs2MSwxNCBAQCBib29sIFN0eWxlQ2FjaGVkSW1hZ2U6Om9wZXJhdG9yPT0oY29uc3Qg
CiAKIFVSTCBTdHlsZUNhY2hlZEltYWdlOjppbWFnZVVSTCgpCiB7Ci0gICAgaWYgKGlzPENTU0lt
YWdlVmFsdWU+KG1fY3NzVmFsdWUpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VW
YWx1ZT4obV9jc3NWYWx1ZS5nZXQoKSkudXJsKCk7Ci0KLSAgICBpZiAoaXM8Q1NTSW1hZ2VTZXRW
YWx1ZT4obV9jc3NWYWx1ZSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVNldFZh
bHVlPihtX2Nzc1ZhbHVlLmdldCgpKS5iZXN0SW1hZ2VGb3JTY2FsZUZhY3RvclVSTCgpOwotCi0g
ICAgaWYgKGlzPENTU0N1cnNvckltYWdlVmFsdWU+KG1fY3NzVmFsdWUuZ2V0KCkpKQotICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZS5nZXQoKSku
aW1hZ2VVUkwoKTsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07
CisgICAgcmV0dXJuIG1fY3NzVmFsdWUtPnVybCgpOwogfQogCiB2b2lkIFN0eWxlQ2FjaGVkSW1h
Z2U6OmxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2Fk
ZXJPcHRpb25zJiBvcHRpb25zKQogewogICAgIEFTU0VSVChtX2lzUGVuZGluZyk7CiAgICAgbV9p
c1BlbmRpbmcgPSBmYWxzZTsKLQotICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPihtX2Nzc1ZhbHVl
KSkgewotICAgICAgICBhdXRvJiBpbWFnZVZhbHVlID0gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4o
bV9jc3NWYWx1ZS5nZXQoKSk7Ci0gICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBpbWFnZVZhbHVlLmxv
YWRJbWFnZShsb2FkZXIsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KG1fY3NzVmFsdWUpKSB7Ci0gICAgICAgIGF1dG8mIGlt
YWdlU2V0VmFsdWUgPSBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPihtX2Nzc1ZhbHVlLmdldCgp
KTsKLSAgICAgICAgc3RkOjp0aWUobV9jYWNoZWRJbWFnZSwgbV9zY2FsZUZhY3RvcikgPSBpbWFn
ZVNldFZhbHVlLmxvYWRCZXN0Rml0SW1hZ2UobG9hZGVyLCBvcHRpb25zKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChpczxDU1NDdXJzb3JJbWFnZVZhbHVlPihtX2Nzc1ZhbHVl
LmdldCgpKSkgewotICAgICAgICBhdXRvJiBjdXJzb3JWYWx1ZSA9IGRvd25jYXN0PENTU0N1cnNv
ckltYWdlVmFsdWU+KG1fY3NzVmFsdWUuZ2V0KCkpOwotICAgICAgICBzdGQ6OnRpZShtX2NhY2hl
ZEltYWdlLCBtX3NjYWxlRmFjdG9yKSA9IGN1cnNvclZhbHVlLmxvYWRJbWFnZShsb2FkZXIsIG9w
dGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG1fY2FjaGVkSW1hZ2UgPSBtX2Nz
c1ZhbHVlLT5sb2FkSW1hZ2UobG9hZGVyLCBvcHRpb25zKTsKIH0KIAogQ2FjaGVkSW1hZ2UqIFN0
eWxlQ2FjaGVkSW1hZ2U6OmNhY2hlZEltYWdlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuaAkocmV2aXNpb24gMjU0
ODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIENTU1ZhbHVlOworY2xhc3MgQ1NTSW1hZ2VWYWx1ZTsKIGNsYXNzIENhY2hlZElt
YWdlOwogY2xhc3MgRG9jdW1lbnQ7CiAKIGNsYXNzIFN0eWxlQ2FjaGVkSW1hZ2UgZmluYWwgOiBw
dWJsaWMgU3R5bGVJbWFnZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxTdHlsZUNhY2hlZEltYWdlPiBjcmVhdGUoQ1NTVmFsdWUmIGNzc1Zh
bHVlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFN0eWxlQ2FjaGVkSW1hZ2UoY3NzVmFsdWUpKTsg
fQorICAgIHN0YXRpYyBSZWY8U3R5bGVDYWNoZWRJbWFnZT4gY3JlYXRlKENTU0ltYWdlVmFsdWUm
IGNzc1ZhbHVlLCBmbG9hdCBzY2FsZUZhY3RvciA9IDEpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U3R5bGVDYWNoZWRJbWFnZShjc3NWYWx1ZSwgc2NhbGVGYWN0b3IpKTsgfQogICAgIHZpcnR1YWwg
flN0eWxlQ2FjaGVkSW1hZ2UoKTsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZUlt
YWdlJiBvdGhlcikgY29uc3QgZmluYWw7CkBAIC02NCwxMCArNjUsMTAgQEAgcHVibGljOgogICAg
IGJvb2wga25vd25Ub0JlT3BhcXVlKGNvbnN0IFJlbmRlckVsZW1lbnQqKSBjb25zdCBmaW5hbDsK
IAogcHJpdmF0ZToKLSAgICBTdHlsZUNhY2hlZEltYWdlKENTU1ZhbHVlJik7CisgICAgU3R5bGVD
YWNoZWRJbWFnZShDU1NJbWFnZVZhbHVlJiwgZmxvYXQpOwogICAgIFVSTCBpbWFnZVVSTCgpOwog
Ci0gICAgUmVmPENTU1ZhbHVlPiBtX2Nzc1ZhbHVlOworICAgIFJlZjxDU1NJbWFnZVZhbHVlPiBt
X2Nzc1ZhbHVlOwogICAgIGJvb2wgbV9pc1BlbmRpbmcgeyB0cnVlIH07CiAgICAgbXV0YWJsZSBm
bG9hdCBtX3NjYWxlRmFjdG9yIHsgMSB9OwogICAgIG11dGFibGUgQ2FjaGVkUmVzb3VyY2VIYW5k
bGU8Q2FjaGVkSW1hZ2U+IG1fY2FjaGVkSW1hZ2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1cnNvckltYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAw
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUtMjAw
OCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyAgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU3R5bGVDdXJzb3JJbWFnZS5oIgorCisjaW5jbHVkZSAiQ1NTQ3Vy
c29ySW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltYWdlU2V0VmFsdWUuaCIKKyNpbmNsdWRl
ICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIlJlbmRl
ckVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWY8U3R5bGVDdXJzb3JJbWFn
ZT4gU3R5bGVDdXJzb3JJbWFnZTo6Y3JlYXRlKENTU0N1cnNvckltYWdlVmFsdWUmIGNzc1ZhbHVl
KQoreyAKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHlsZUN1cnNvckltYWdlKGNzc1ZhbHVl
KSk7IAorfQorCitib29sIFN0eWxlQ3Vyc29ySW1hZ2U6Om9wZXJhdG9yPT0oY29uc3QgU3R5bGVJ
bWFnZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzPFN0eWxlQ3Vyc29ySW1hZ2U+KG90
aGVyKSAmJiBlcXVhbHMoZG93bmNhc3Q8U3R5bGVDdXJzb3JJbWFnZT4ob3RoZXIpKTsKK30KKwor
UmVmPENTU1ZhbHVlPiBTdHlsZUN1cnNvckltYWdlOjpjc3NWYWx1ZSgpIGNvbnN0Cit7IAorICAg
IHJldHVybiBtX2Nzc1ZhbHVlLmNvcHlSZWYoKTsgCit9CisKK1N0eWxlQ3Vyc29ySW1hZ2U6OlN0
eWxlQ3Vyc29ySW1hZ2UoQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSYgY3NzVmFsdWUpCisgICAgOiBtX2Nz
c1ZhbHVlKGNzc1ZhbHVlKQoreworICAgIG1faXNDdXJzb3JJbWFnZSA9IHRydWU7Cit9CisKK1N0
eWxlQ3Vyc29ySW1hZ2U6On5TdHlsZUN1cnNvckltYWdlKCkgPSBkZWZhdWx0OworCitJbWFnZVdp
dGhTY2FsZSBTdHlsZUN1cnNvckltYWdlOjpzZWxlY3RCZXN0Rml0SW1hZ2UoY29uc3QgRG9jdW1l
bnQmIGRvY3VtZW50KSBjb25zdAoreworICAgIHJldHVybiBtX2Nzc1ZhbHVlLT5zZWxlY3RCZXN0
Rml0SW1hZ2UoZG9jdW1lbnQpOworfQorCit2b2lkIFN0eWxlQ3Vyc29ySW1hZ2U6OnNldENvbnRh
aW5lckNvbnRleHRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29u
c3QgRmxvYXRTaXplJiBjb250YWluZXJTaXplLCBmbG9hdCBjb250YWluZXJab29tKQoreworICAg
IGlmICghaGFzQ2FjaGVkSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhY2hlZEltYWdl
KCktPnNldENvbnRhaW5lckNvbnRleHRGb3JDbGllbnQocmVuZGVyZXIsIExheW91dFNpemUoY29u
dGFpbmVyU2l6ZSksIGNvbnRhaW5lclpvb20sIG1fY3NzVmFsdWUtPmltYWdlVVJMKCkpOworfQor
Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
U3R5bGVDdXJzb3JJbWFnZS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMg
LTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1cnNvckltYWdlLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ3Vyc29y
SW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIw
MDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIw
MDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDUtMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyAgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlN0eWxlTXVsdGlJbWFnZS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIENTU0N1cnNvckltYWdlVmFsdWU7CisKK3N0cnVjdCBJbWFnZVdpdGhT
Y2FsZTsKKworY2xhc3MgU3R5bGVDdXJzb3JJbWFnZSBmaW5hbCA6IHB1YmxpYyBTdHlsZU11bHRp
SW1hZ2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRp
YyBSZWY8U3R5bGVDdXJzb3JJbWFnZT4gY3JlYXRlKENTU0N1cnNvckltYWdlVmFsdWUmKTsKKyAg
ICB2aXJ0dWFsIH5TdHlsZUN1cnNvckltYWdlKCk7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFN0eWxlSW1hZ2UmIG90aGVyKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNldENvbnRh
aW5lckNvbnRleHRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29u
c3QgRmxvYXRTaXplJiBjb250YWluZXJTaXplLCBmbG9hdCBjb250YWluZXJab29tKSBmaW5hbDsK
KyAgICBSZWY8Q1NTVmFsdWU+IGNzc1ZhbHVlKCkgY29uc3QgZmluYWw7CisgICAgSW1hZ2VXaXRo
U2NhbGUgc2VsZWN0QmVzdEZpdEltYWdlKGNvbnN0IERvY3VtZW50JikgY29uc3QgZmluYWw7CisK
KyAgICBleHBsaWNpdCBTdHlsZUN1cnNvckltYWdlKENTU0N1cnNvckltYWdlVmFsdWUmKTsKKyAg
ICBSZWY8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4gbV9jc3NWYWx1ZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19TVFlMRV9JTUFHRShTdHlsZUN1
cnNvckltYWdlLCBpc0N1cnNvckltYWdlKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuaApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1h
Z2UuaAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTggKzY3LDI4IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGZsb2F0IGltYWdlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiAxOyB9
CiAgICAgdmlydHVhbCBib29sIGtub3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJFbGVtZW50Kikg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3Qg
eyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgU3R5bGVJbWFnZSogc2VsZWN0ZWRJbWFnZSgpIHsg
cmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFN0eWxlSW1hZ2UqIHNlbGVjdGVkSW1h
Z2UoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXND
YWNoZWRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDYWNoZWRJbWFnZTsgfQogICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCBpc0dlbmVyYXRlZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pc0dlbmVy
YXRlZEltYWdlOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ3Vyc29ySW1hZ2UoKSBjb25z
dCB7IHJldHVybiBtX2lzQ3Vyc29ySW1hZ2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNJ
bWFnZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJbWFnZVNldDsgfQorCisgICAgYm9vbCBoYXND
YWNoZWRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDYWNoZWRJbWFnZSB8fCBzZWxlY3RlZElt
YWdlKCktPmlzQ2FjaGVkSW1hZ2UoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgU3R5bGVJbWFnZSgp
CiAgICAgICAgIDogbV9pc0NhY2hlZEltYWdlKGZhbHNlKQogICAgICAgICAsIG1faXNHZW5lcmF0
ZWRJbWFnZShmYWxzZSkKKyAgICAgICAgLCBtX2lzSW1hZ2VTZXQoZmFsc2UpCisgICAgICAgICwg
bV9pc0N1cnNvckltYWdlKGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgYm9vbCBtX2lzQ2FjaGVk
SW1hZ2UgOiAxOwogICAgIGJvb2wgbV9pc0dlbmVyYXRlZEltYWdlIDogMTsKKyAgICBib29sIG1f
aXNJbWFnZVNldCA6IDE7CisgICAgYm9vbCBtX2lzQ3Vyc29ySW1hZ2UgOiAxOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlSW1hZ2VTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZUltYWdlU2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0Br
ZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUu
b3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LTIwMDgsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIE5vYW0gUm9zZW50aGFs
IChub2FtQHdlYmtpdC5vcmcpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3R5
bGVJbWFnZVNldC5oIgorCisjaW5jbHVkZSAiQ1NTSW1hZ2VTZXRWYWx1ZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1JlZjxTdHlsZUltYWdlU2V0PiBTdHlsZUltYWdlU2V0OjpjcmVhdGUo
Q1NTSW1hZ2VTZXRWYWx1ZSYgY3NzVmFsdWUpCit7IAorICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFN0eWxlSW1hZ2VTZXQoY3NzVmFsdWUpKTsKK30KKworU3R5bGVJbWFnZVNldDo6U3R5bGVJbWFn
ZVNldChDU1NJbWFnZVNldFZhbHVlJiBjc3NWYWx1ZSkKKyAgICA6IG1fY3NzVmFsdWUoY3NzVmFs
dWUpCit7CisgICAgbV9pc0ltYWdlU2V0ID0gdHJ1ZTsKK30KKworYm9vbCBTdHlsZUltYWdlU2V0
OjpvcGVyYXRvcj09KGNvbnN0IFN0eWxlSW1hZ2UmIG90aGVyKSBjb25zdAoreworICAgIHJldHVy
biBpczxTdHlsZUltYWdlU2V0PihvdGhlcikgJiYgZXF1YWxzKGRvd25jYXN0PFN0eWxlSW1hZ2VT
ZXQ+KG90aGVyKSk7Cit9CisKK1N0eWxlSW1hZ2VTZXQ6On5TdHlsZUltYWdlU2V0KCkgPSBkZWZh
dWx0OworCitSZWY8Q1NTVmFsdWU+IFN0eWxlSW1hZ2VTZXQ6OmNzc1ZhbHVlKCkgY29uc3QKK3sg
CisgICAgcmV0dXJuIG1fY3NzVmFsdWUuY29weVJlZigpOyAKK30KKworSW1hZ2VXaXRoU2NhbGUg
U3R5bGVJbWFnZVNldDo6c2VsZWN0QmVzdEZpdEltYWdlKGNvbnN0IERvY3VtZW50JiBkb2N1bWVu
dCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jc3NWYWx1ZS0+c2VsZWN0QmVzdEZpdEltYWdlKGRv
Y3VtZW50KTsKK30KKworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVj
dXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNldC5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUlt
YWdlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyogQ29weXJpZ2h0
IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisqICAgICAgICAgICAoQykgMjAw
MCBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyogICAgICAgICAgIChDKSAyMDAw
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiBD
b3B5cmlnaHQgKEMpIDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyoKKyog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKgorKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisqCisqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqCisqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlN0eWxlTXVsdGlJbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENTU0ltYWdlU2V0VmFsdWU7CisKK2NsYXNzIFN0eWxlSW1hZ2VTZXQgZmluYWwgOiBwdWJsaWMg
U3R5bGVNdWx0aUltYWdlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPFN0eWxlSW1hZ2VTZXQ+IGNyZWF0ZShDU1NJbWFnZVNldFZhbHVlJik7
CisgICAgdmlydHVhbCB+U3R5bGVJbWFnZVNldCgpOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBTdHlsZUltYWdlJiBvdGhlcikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgU3R5
bGVJbWFnZVNldChDU1NJbWFnZVNldFZhbHVlJik7CisgICAgUmVmPENTU1ZhbHVlPiBjc3NWYWx1
ZSgpIGNvbnN0IGZpbmFsOworICAgIEltYWdlV2l0aFNjYWxlIHNlbGVjdEJlc3RGaXRJbWFnZShj
b25zdCBEb2N1bWVudCYpIGNvbnN0IGZpbmFsOworICAgIFJlZjxDU1NJbWFnZVNldFZhbHVlPiBt
X2Nzc1ZhbHVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX1NUWUxFX0lNQUdFKFN0eWxlSW1hZ2VTZXQsIGlzSW1hZ2VTZXQpCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNl
dC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDUtMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTdHlsZU11bHRpSW1hZ2UuaCIKKworI2luY2x1ZGUgIkNT
U0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NJbWFnZVNldFZhbHVlLmgiCisj
aW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2UuaCIK
KyNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworU3R5bGVNdWx0aUltYWdlOjpTdHlsZU11bHRpSW1hZ2UoKSA9IGRlZmF1bHQ7CisKK1N0eWxl
TXVsdGlJbWFnZTo6flN0eWxlTXVsdGlJbWFnZSgpID0gZGVmYXVsdDsKKworYm9vbCBTdHlsZU11
bHRpSW1hZ2U6OmVxdWFscyhjb25zdCBTdHlsZU11bHRpSW1hZ2UmIG90aGVyKSBjb25zdAorewor
ICAgIGF1dG8mIG90aGVyQ2FjaGVkID0gZG93bmNhc3Q8U3R5bGVNdWx0aUltYWdlPihvdGhlcik7
CisgICAgcmV0dXJuICghbV9pc1BlbmRpbmcgJiYgIW90aGVyQ2FjaGVkLm1faXNQZW5kaW5nICYm
IG1fc2VsZWN0ZWRJbWFnZS5nZXQoKSA9PSBvdGhlckNhY2hlZC5tX3NlbGVjdGVkSW1hZ2UuZ2V0
KCkpOworfQorCit2b2lkIFN0eWxlTXVsdGlJbWFnZTo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRl
ciYgbG9hZGVyLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAg
QVNTRVJUKG1faXNQZW5kaW5nKTsKKyAgICBBU1NFUlQobG9hZGVyLmRvY3VtZW50KCkpOworCisg
ICAgbV9pc1BlbmRpbmcgPSBmYWxzZTsKKyAgICBhdXRvIGltYWdlV2l0aFNjYWxlID0gc2VsZWN0
QmVzdEZpdEltYWdlKCpsb2FkZXIuZG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKGlzPENTU0ltYWdl
VmFsdWU+KGltYWdlV2l0aFNjYWxlLnZhbHVlKSB8fCBpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVl
PihpbWFnZVdpdGhTY2FsZS52YWx1ZSkpOworCisgICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9y
VmFsdWU+KGltYWdlV2l0aFNjYWxlLnZhbHVlKSkgeworICAgICAgICBtX3NlbGVjdGVkSW1hZ2Ug
PSBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZT4oKmltYWdlV2l0aFNjYWxlLnZhbHVlLmdldCgpKSk7CisgICAgICAgIG1fc2VsZWN0ZWRJ
bWFnZS0+bG9hZChsb2FkZXIsIG9wdGlvbnMpOworICAgIH0KKyAgICAKKyAgICBpZiAoaXM8Q1NT
SW1hZ2VWYWx1ZT4oaW1hZ2VXaXRoU2NhbGUudmFsdWUpKSB7CisgICAgICAgIG1fc2VsZWN0ZWRJ
bWFnZSA9IFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZVZhbHVlPigq
aW1hZ2VXaXRoU2NhbGUudmFsdWUuZ2V0KCkpLCBpbWFnZVdpdGhTY2FsZS5zY2FsZUZhY3Rvcik7
CisgICAgICAgIGlmIChtX3NlbGVjdGVkSW1hZ2UtPmlzUGVuZGluZygpKQorICAgICAgICAgICAg
bV9zZWxlY3RlZEltYWdlLT5sb2FkKGxvYWRlciwgb3B0aW9ucyk7CisgICAgfQorfQorCitDYWNo
ZWRJbWFnZSogU3R5bGVNdWx0aUltYWdlOjpjYWNoZWRJbWFnZSgpIGNvbnN0Cit7CisgICAgaWYg
KCFtX3NlbGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBt
X3NlbGVjdGVkSW1hZ2UtPmNhY2hlZEltYWdlKCk7Cit9CisKK1dyYXBwZWRJbWFnZVB0ciBTdHls
ZU11bHRpSW1hZ2U6OmRhdGEoKSBjb25zdAoreworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlLT5kYXRh
KCk7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjpjYW5SZW5kZXIoY29uc3QgUmVuZGVyRWxl
bWVudCogcmVuZGVyZXIsIGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c2VsZWN0ZWRJbWFnZSAmJiBtX3NlbGVjdGVkSW1hZ2UtPmNhblJlbmRlcihyZW5kZXJlciwgbXVs
dGlwbGllcik7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjppc1BlbmRpbmcoKSBjb25zdAor
eworICAgIHJldHVybiBtX2lzUGVuZGluZzsKK30KKworYm9vbCBTdHlsZU11bHRpSW1hZ2U6Omlz
TG9hZGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlICYmIG1fc2VsZWN0
ZWRJbWFnZS0+aXNMb2FkZWQoKTsKK30KKworYm9vbCBTdHlsZU11bHRpSW1hZ2U6OmVycm9yT2Nj
dXJyZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UgJiYgbV9zZWxlY3Rl
ZEltYWdlLT5lcnJvck9jY3VycmVkKCk7Cit9CisKK0Zsb2F0U2l6ZSBTdHlsZU11bHRpSW1hZ2U6
OmltYWdlU2l6ZShjb25zdCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgZmxvYXQgbXVsdGlwbGll
cikgY29uc3QKK3sKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlLT5pbWFnZVNpemUocmVuZGVyZXIsIG11bHRp
cGxpZXIpOworfQorCitib29sIFN0eWxlTXVsdGlJbWFnZTo6aW1hZ2VIYXNSZWxhdGl2ZVdpZHRo
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlICYmIG1fc2VsZWN0ZWRJbWFn
ZS0+aW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCk7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjpp
bWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWxlY3RlZElt
YWdlICYmIG1fc2VsZWN0ZWRJbWFnZS0+aW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpOworfQorCit2
b2lkIFN0eWxlTXVsdGlJbWFnZTo6Y29tcHV0ZUludHJpbnNpY0RpbWVuc2lvbnMoY29uc3QgUmVu
ZGVyRWxlbWVudCogZWxlbWVudCwgTGVuZ3RoJiBpbnRyaW5zaWNXaWR0aCwgTGVuZ3RoJiBpbnRy
aW5zaWNIZWlnaHQsIEZsb2F0U2l6ZSYgaW50cmluc2ljUmF0aW8pCit7CisgICAgaWYgKCFtX3Nl
bGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBtX3NlbGVjdGVkSW1hZ2UtPmNvbXB1
dGVJbnRyaW5zaWNEaW1lbnNpb25zKGVsZW1lbnQsIGludHJpbnNpY1dpZHRoLCBpbnRyaW5zaWNI
ZWlnaHQsIGludHJpbnNpY1JhdGlvKTsKK30KKworYm9vbCBTdHlsZU11bHRpSW1hZ2U6OnVzZXNJ
bWFnZUNvbnRhaW5lclNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2Ug
JiYgbV9zZWxlY3RlZEltYWdlLT51c2VzSW1hZ2VDb250YWluZXJTaXplKCk7Cit9CisKK3ZvaWQg
U3R5bGVNdWx0aUltYWdlOjpzZXRDb250YWluZXJDb250ZXh0Rm9yUmVuZGVyZXIoY29uc3QgUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6ZSYgY29udGFpbmVyU2l6ZSwgZmxv
YXQgY29udGFpbmVyWm9vbSkKK3sKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fc2VsZWN0ZWRJbWFnZS0+c2V0Q29udGFpbmVyQ29udGV4dEZvclJlbmRl
cmVyKHJlbmRlcmVyLCBjb250YWluZXJTaXplLCBjb250YWluZXJab29tKTsKK30KKwordm9pZCBT
dHlsZU11bHRpSW1hZ2U6OmFkZENsaWVudChSZW5kZXJFbGVtZW50KiByZW5kZXJlcikKK3sKKyAg
ICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2VsZWN0ZWRJ
bWFnZS0+YWRkQ2xpZW50KHJlbmRlcmVyKTsKK30KKwordm9pZCBTdHlsZU11bHRpSW1hZ2U6OnJl
bW92ZUNsaWVudChSZW5kZXJFbGVtZW50KiByZW5kZXJlcikKK3sKKyAgICBpZiAoIW1fc2VsZWN0
ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2VsZWN0ZWRJbWFnZS0+cmVtb3ZlQ2xp
ZW50KHJlbmRlcmVyKTsKK30KKworUmVmUHRyPEltYWdlPiBTdHlsZU11bHRpSW1hZ2U6OmltYWdl
KFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpemUmIHNpemUpIGNvbnN0Cit7
CisgICAgaWYgKCFtX3NlbGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IHJldHVybiBtX3NlbGVjdGVkSW1hZ2UtPmltYWdlKHJlbmRlcmVyLCBzaXplKTsKK30KKworZmxv
YXQgU3R5bGVNdWx0aUltYWdlOjppbWFnZVNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIG1fc2VsZWN0
ZWRJbWFnZS0+aW1hZ2VTY2FsZUZhY3RvcigpOworfQorCitib29sIFN0eWxlTXVsdGlJbWFnZTo6
a25vd25Ub0JlT3BhcXVlKGNvbnN0IFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyKSBjb25zdAorewor
ICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UgJiYgbV9zZWxlY3RlZEltYWdlLT5rbm93blRvQmVP
cGFxdWUocmVuZGVyZXIpOworfQorCit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUltYWdlLmNwcApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZU11bHRp
SW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5
bGVNdWx0aUltYWdlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAq
ICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAq
ICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNS0yMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBOb2FtIFJvc2VudGhhbCAobm9hbUB3ZWJr
aXQub3JnKQorICoKKyogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKgorKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisqCisqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqCisqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBEb2N1bWVudDsKKworc3RydWN0IEltYWdlV2l0aFNjYWxlOworCitjbGFzcyBT
dHlsZU11bHRpSW1hZ2UgOiBwdWJsaWMgU3R5bGVJbWFnZSB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgdmlydHVhbCB+U3R5bGVNdWx0aUltYWdlKCk7CisKK3By
b3RlY3RlZDoKKyAgICBTdHlsZU11bHRpSW1hZ2UoKTsKKyAgICBib29sIGVxdWFscyhjb25zdCBT
dHlsZU11bHRpSW1hZ2UmIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIEltYWdlV2l0aFNjYWxl
IHNlbGVjdEJlc3RGaXRJbWFnZShjb25zdCBEb2N1bWVudCYpIGNvbnN0ID0gMDsKKyAgICBDYWNo
ZWRJbWFnZSogY2FjaGVkSW1hZ2UoKSBjb25zdCBmaW5hbDsKKworcHJpdmF0ZToKKyAgICBXcmFw
cGVkSW1hZ2VQdHIgZGF0YSgpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCBjYW5SZW5kZXIoY29u
c3QgUmVuZGVyRWxlbWVudCosIGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0IGZpbmFsOworICAgIGJv
b2wgaXNQZW5kaW5nKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBsb2FkKENhY2hlZFJlc291cmNl
TG9hZGVyJiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJikgZmluYWw7CisgICAgYm9vbCBp
c0xvYWRlZCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgZXJyb3JPY2N1cnJlZCgpIGNvbnN0IGZp
bmFsOworICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUoY29uc3QgUmVuZGVyRWxlbWVudCosIGZsb2F0
IG11bHRpcGxpZXIpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZVdpZHRo
KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3Qg
ZmluYWw7CisgICAgdm9pZCBjb21wdXRlSW50cmluc2ljRGltZW5zaW9ucyhjb25zdCBSZW5kZXJF
bGVtZW50KiwgTGVuZ3RoJiBpbnRyaW5zaWNXaWR0aCwgTGVuZ3RoJiBpbnRyaW5zaWNIZWlnaHQs
IEZsb2F0U2l6ZSYgaW50cmluc2ljUmF0aW8pIGZpbmFsOworICAgIGJvb2wgdXNlc0ltYWdlQ29u
dGFpbmVyU2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0Q29udGFpbmVyQ29udGV4dEZv
clJlbmRlcmVyKGNvbnN0IFJlbmRlckVsZW1lbnQmLCBjb25zdCBGbG9hdFNpemUmLCBmbG9hdCk7
CisgICAgdm9pZCBhZGRDbGllbnQoUmVuZGVyRWxlbWVudCopIGZpbmFsOworICAgIHZvaWQgcmVt
b3ZlQ2xpZW50KFJlbmRlckVsZW1lbnQqKSBmaW5hbDsKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
KFJlbmRlckVsZW1lbnQqLCBjb25zdCBGbG9hdFNpemUmKSBjb25zdCBmaW5hbDsKKyAgICBmbG9h
dCBpbWFnZVNjYWxlRmFjdG9yKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBrbm93blRvQmVPcGFx
dWUoY29uc3QgUmVuZGVyRWxlbWVudCopIGNvbnN0IGZpbmFsOworICAgIGNvbnN0IFN0eWxlSW1h
Z2UqIHNlbGVjdGVkSW1hZ2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NlbGVjdGVkSW1hZ2Uu
Z2V0KCk7IH0KKyAgICBTdHlsZUltYWdlKiBzZWxlY3RlZEltYWdlKCkgZmluYWwgeyByZXR1cm4g
bV9zZWxlY3RlZEltYWdlLmdldCgpOyB9CisKKyAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbV9zZWxl
Y3RlZEltYWdlOworICAgIGJvb2wgbV9pc1BlbmRpbmcgeyB0cnVlIH07Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUltYWdlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1
dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAkocmV2aXNpb24g
MjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDEwIEBACiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUu
aCIKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCIKICNpbmNsdWRlICJTdHlsZUNh
Y2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVDdXJzb3JJbWFnZS5oIgogI2luY2x1ZGUgIlN0
eWxlRm9udFNpemVGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgi
CisjaW5jbHVkZSAiU3R5bGVJbWFnZVNldC5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIK
ICNpbmNsdWRlICJXaWxsQ2hhbmdlRGF0YS5oIgogCkBAIC0xMzI0LDEzICsxMzI2LDE1IEBAIGlu
bGluZSB2b2lkIEJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb24KICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxlR2Vu
ZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihpdGVt
LmdldCgpKSksIGRpZFNldCk7CiAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwotICAgICAgICB9
IGVsc2UgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KGl0ZW0pKSB7Ci0gICAgICAgICAgICBidWls
ZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShpdGVt
KSwgZGlkU2V0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGlzPENTU0ltYWdl
U2V0VmFsdWU+KGl0ZW0pKSB7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRD
b250ZW50KFN0eWxlSW1hZ2VTZXQ6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPihp
dGVtLmdldCgpKS5pbWFnZVNldFdpdGhTdHlsZXNSZXNvbHZlZChidWlsZGVyU3RhdGUpKSwgZGlk
U2V0KTsKICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oaXRlbSkpIHsKLSAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5z
dHlsZSgpLnNldENvbnRlbnQoU3R5bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKGl0ZW0pLCBkaWRTZXQp
OworICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChTdHlsZUNhY2hl
ZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oaXRlbS5nZXQoKSkpLCBkaWRT
ZXQpOwogICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUu
Y3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxk
ZXJTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDEwIEBACiAjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJTdHlsZUNh
Y2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVDdXJzb3JJbWFnZS5oIgogI2luY2x1ZGUgIlN0
eWxlRm9udFNpemVGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgi
CisjaW5jbHVkZSAiU3R5bGVJbWFnZVNldC5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybUZ1bmN0aW9u
cy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03OSwyMSArODEsMzQgQEAgYm9vbCBCdWls
ZGVyU3RhdGU6OnVzZVNWR1pvb21SdWxlc0ZvckxlbgogICAgIHJldHVybiBpczxTVkdFbGVtZW50
PihlbGVtZW50KCkpICYmICEoaXM8U1ZHU1ZHRWxlbWVudD4oKmVsZW1lbnQoKSkgJiYgZWxlbWVu
dCgpLT5wYXJlbnROb2RlKCkpOwogfQogCitSZWY8Q1NTVmFsdWU+IEJ1aWxkZXJTdGF0ZTo6cmVz
b2x2ZUltYWdlU3R5bGVzKENTU1ZhbHVlJiB2YWx1ZSkKK3sKKyAgICBpZiAoaXM8Q1NTR3JhZGll
bnRWYWx1ZT4odmFsdWUpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1
ZT4odmFsdWUpLmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKCp0aGlzKTsKKworICAgIGlmIChp
czxDU1NJbWFnZVNldFZhbHVlPih2YWx1ZSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NJ
bWFnZVNldFZhbHVlPih2YWx1ZSkuaW1hZ2VTZXRXaXRoU3R5bGVzUmVzb2x2ZWQoKnRoaXMpOwor
CisgICAgLy8gQ3JlYXRpbmcgZmlsdGVyIG9wZXJhdGlvbnMgZG9lc24ndCBjcmVhdGUgYSBuZXcg
Q1NTVmFsdWUgcmVmZXJlbmNlLgorICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPih2YWx1
ZSkpCisgICAgICAgIGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHZhbHVlKS5jcmVhdGVG
aWx0ZXJPcGVyYXRpb25zKCp0aGlzKTsKKworICAgIHJldHVybiBtYWtlUmVmKHZhbHVlKTsKK30K
KwogUmVmUHRyPFN0eWxlSW1hZ2U+IEJ1aWxkZXJTdGF0ZTo6Y3JlYXRlU3R5bGVJbWFnZShDU1NW
YWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHZhbHVl
KSkgewotICAgICAgICBpZiAoaXM8Q1NTR3JhZGllbnRWYWx1ZT4odmFsdWUpKQotICAgICAgICAg
ICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NHcmFkaWVu
dFZhbHVlPih2YWx1ZSkuZ3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoKnRoaXMpKTsKLQotICAg
ICAgICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpKSB7Ci0gICAgICAgICAgICAv
LyBGaWx0ZXJJbWFnZSBuZWVkcyB0byBjYWxjdWxhdGUgRmlsdGVyT3BlcmF0aW9ucy4KLSAgICAg
ICAgICAgIGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHZhbHVlKS5jcmVhdGVGaWx0ZXJP
cGVyYXRpb25zKCp0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gU3R5bGVHZW5lcmF0
ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHZhbHVlKSk7
Ci0gICAgfQorICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPih2YWx1ZSkpCisgICAgICAgIHJldHVy
biBTdHlsZUNhY2hlZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4odmFsdWUp
KTsKKworICAgIGlmIChpczxDU1NDdXJzb3JJbWFnZVZhbHVlPih2YWx1ZSkpCisgICAgICAgIHJl
dHVybiBTdHlsZUN1cnNvckltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1
ZT4odmFsdWUpKTsKIAotICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPih2YWx1ZSkgfHwgaXM8Q1NT
SW1hZ2VTZXRWYWx1ZT4odmFsdWUpIHx8IGlzPENTU0N1cnNvckltYWdlVmFsdWU+KHZhbHVlKSkK
LSAgICAgICAgcmV0dXJuIFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7CisgICAgaWYg
KGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFN0eWxl
R2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihy
ZXNvbHZlSW1hZ2VTdHlsZXModmFsdWUpLmdldCgpKSk7CisgICAgCisgICAgaWYgKGlzPENTU0lt
YWdlU2V0VmFsdWU+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFN0eWxlSW1hZ2VTZXQ6OmNyZWF0
ZShkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPihyZXNvbHZlSW1hZ2VTdHlsZXModmFsdWUpLmdl
dCgpKSk7CiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlQnVpbGRlclN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVCdWlsZGVyU3RhdGUuaAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCB1c2VTVkdab29tUnVsZXNGb3JMZW5ndGgoKSBjb25zdDsK
ICAgICBTY29wZU9yZGluYWwgc3R5bGVTY29wZU9yZGluYWwoKSBjb25zdCB7IHJldHVybiBtX3N0
eWxlU2NvcGVPcmRpbmFsOyB9CiAKKyAgICBSZWY8Q1NTVmFsdWU+IHJlc29sdmVJbWFnZVN0eWxl
cyhDU1NWYWx1ZSYpOwogICAgIFJlZlB0cjxTdHlsZUltYWdlPiBjcmVhdGVTdHlsZUltYWdlKENT
U1ZhbHVlJik7CiAgICAgYm9vbCBjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1ZhbHVl
JiwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7CiAKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDI1NDgwOCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMxIEBACisyMDIwLTAxLTE5ICBOb2FtIFJvc2VudGhhbCAgPG5vYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICAtd2Via2l0LWltYWdlLXNldCBzaG91bGQgc3VwcG9ydCBhbGwgdGhlIGltYWdl
IGZ1bmN0aW9ucyBXZWJLaXQgc3VwcG9ydHMsIG5vdCBqdXN0IHVybCgpCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTk0MQorCisgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgICogZmFzdC9jc3MvY3Vyc29yLXBhcnNpbmct
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvY3NzL2N1cnNvci1wYXJzaW5nLmh0bWw6Cisg
ICAgICAgICAgICAgICAgQWRkZWQgcGFyc2luZyB0ZXN0IHRvIGVuc3VyZSBhcnJvdyBpbWFnZS1z
ZXRzIGRpc2FibGUgZ2VuZXJhdGVkIGltYWdlcworCisgICAgICAgICogZmFzdC9jc3MvaW1hZ2Ut
c2V0LXBhcnNpbmctZ2VuZXJhdGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctZ2VuZXJhdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWludmFsaWQtZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGZhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWludmFsaWQuaHRtbDoKKyAgICAgICAgICAg
ICAgICBBZGRlZCBwYXJzaW5nIHRlc3RzIGZvciBuZXcgZ2VuZXJhdGVkLWluc2lkZS1pbWFnZS1z
ZXQgdXNlIGNhc2VzCisgICAgICAgICAgICAgICAgVGVzdCB0aGF0IGltYWdlLXNldCBpbnNpZGUg
aW1hZ2Utc2V0IGlzIG5vdCBzdXBwb3J0ZWQKKworICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Ut
c2V0LWNyb3NzLWZhZGUtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9oaWRw
aS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2hpZHBp
L2ltYWdlLXNldC1ncmFkaWVudC1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1tdWx0aS1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1tdWx0aS5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1zaW5nbGUtZXhwZWN0ZWQu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtc2lu
Z2xlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50
Lmh0bWw6IEFkZGVkLgorICAgICAgICAgICAgICAgIEFkZGVkIHJlZi10ZXN0cyBmb3Igc2V2ZXJh
bCBnZW5lcmF0ZWQtaW5zaWRlLWltYWdlLXNldCB1c2UtY2FzZXMKKwogMjAyMC0wMS0xOSAgQ2F0
aGllIENoZW4gIDxjYXRoaWVjaGVuQGlnYWxpYS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQg
Zm9yIHNjcm9sbCBiZWhhdmlvciByZWxpZXMgb24gU2Nyb2xsQW5pbWF0aW9uIG9mIHRoZSBXZWIg
cHJvY2VzcwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvY3Vyc29yLXBhcnNpbmctZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL2N1cnNvci1wYXJzaW5n
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjU0ODA4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3Mv
Y3Vyc29yLXBhcnNpbmctZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miwx
MCBAQCBQQVNTIHJvdW5kdHJpcENzc1J1bGUoImN1cnNvcjogdXJsKGZpbGU6CiBQQVNTIHJvdW5k
dHJpcENzc1J1bGUoImN1cnNvcjogdXJsKGZpbGU6Ly8vZm9vLnBuZykgMTIgMyA1OyIpLmNzc1Rl
eHQgaXMgIiIKIFBBU1Mgcm91bmR0cmlwQ3NzUnVsZSgiY3Vyc29yOiB1cmwoZmlsZTovLy9mb28u
cG5nKSB4IHk7IikuY3NzVGV4dCBpcyAiIgogUEFTUyByb3VuZHRyaXBDc3NSdWxlKCJjdXJzb3I6
IHVybChmaWxlOi8vL2Zvby5wbmcpIGF1dG87IikuY3NzVGV4dCBpcyAiIgorCitUZXN0IGEgYnVu
Y2ggb2YgY3Vyc29yIHJ1bGVzIHdpdGggZ2VuZXJhdGVkIGltYWdlcy4KK1BBU1Mgcm91bmR0cmlw
Q3NzUnVsZSgiY3Vyc29yOiBsaW5lYXItZ3JhZGllbnQocmVkLCB3aGl0ZSkgLTEgLTEsIHBvaW50
ZXI7IikuY3NzVGV4dCBpcyAiIgorUEFTUyByb3VuZHRyaXBDc3NSdWxlKCJjdXJzb3I6IGltYWdl
LXNldChsaW5lYXItZ3JhZGllbnQocmVkLCB3aGl0ZSkgMXgpIC0xIC0xLCBwb2ludGVyOyIpLmNz
c1RleHQgaXMgIiIKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01Q
TEVURQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvY3Vyc29yLXBhcnNpbmcuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy5odG1sCShyZXZp
c2lvbiAyNTQ4MDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDExIEBAIHRlc3RJbnZhbGlkQ3Vyc29yUnVs
ZSgndXJsKGZpbGU6Ly8vZm9vLnAKIHRlc3RJbnZhbGlkQ3Vyc29yUnVsZSgndXJsKGZpbGU6Ly8v
Zm9vLnBuZykgeCB5Jyk7CiB0ZXN0SW52YWxpZEN1cnNvclJ1bGUoJ3VybChmaWxlOi8vL2Zvby5w
bmcpIGF1dG8nKTsKIAorZGVidWcoJycpOworZGVidWcoJ1Rlc3QgYSBidW5jaCBvZiBjdXJzb3Ig
cnVsZXMgd2l0aCBnZW5lcmF0ZWQgaW1hZ2VzLicpOwordGVzdEludmFsaWRDdXJzb3JSdWxlKCds
aW5lYXItZ3JhZGllbnQocmVkLCB3aGl0ZSkgLTEgLTEsIHBvaW50ZXInKTsKK3Rlc3RJbnZhbGlk
Q3Vyc29yUnVsZSgnaW1hZ2Utc2V0KGxpbmVhci1ncmFkaWVudChyZWQsIHdoaXRlKSAxeCkgLTEg
LTEsIHBvaW50ZXInKTsKKwogc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKIDwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctZ2VuZXJhdGVkLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQt
cGFyc2luZy1nZW5lcmF0ZWQtZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRl
c3RzL2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWdlbmVyYXRlZC1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorVGVzdCB0aGUgcGFyc2luZyBvZiB0aGUgaW1h
Z2Utc2V0IGZ1bmN0aW9uLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworCitTaW5n
bGUgdmFsdWUgZm9yIGJhY2tncm91bmQtaW1hZ2Ugd2l0aCBncmFkaWVudCA6IGxpbmVhci1ncmFk
aWVudChncmVlbiwgd2hpdGUpIDF4CitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZSkg
aXMgJ0NTU1ZhbHVlTGlzdCcKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLl9fcHJv
dG9fXykgaXMgJ0NTU1ZhbHVlTGlzdFByb3RvdHlwZScKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1h
Z2VTZXRSdWxlLmNvbnN0cnVjdG9yKSBpcyAnRnVuY3Rpb24nCitQQVNTIGltYWdlU2V0UnVsZS5s
ZW5ndGggaXMgMgorUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJ2xpbmVhci1ncmFkaWVudChncmVl
biwgd2hpdGUpJworUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJzEnCisKK1NpbmdsZSB2YWx1ZSBm
b3IgY29udGVudCB3aXRoIGdyYWRpZW50IDogbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkg
MXgKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlKSBpcyAnQ1NTVmFsdWVMaXN0Jwor
UEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuX19wcm90b19fKSBpcyAnQ1NTVmFsdWVM
aXN0UHJvdG90eXBlJworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuY29uc3RydWN0
b3IpIGlzICdGdW5jdGlvbicKK1BBU1MgaW1hZ2VTZXRSdWxlLmxlbmd0aCBpcyAyCitQQVNTIHN1
YlJ1bGUuY3NzVGV4dCBpcyAnbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSknCitQQVNTIHN1
YlJ1bGUuY3NzVGV4dCBpcyAnMScKKworU2luZ2xlIHZhbHVlIGZvciBiYWNrZ3JvdW5kLWltYWdl
IHdpdGggZ3JhZGllbnRzIDogbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMXgsIHJhZGlh
bC1ncmFkaWVudChibHVlLCB3aGl0ZSkgMngKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRS
dWxlKSBpcyAnQ1NTVmFsdWVMaXN0JworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUu
X19wcm90b19fKSBpcyAnQ1NTVmFsdWVMaXN0UHJvdG90eXBlJworUEFTUyBqc1dyYXBwZXJDbGFz
cyhpbWFnZVNldFJ1bGUuY29uc3RydWN0b3IpIGlzICdGdW5jdGlvbicKK1BBU1MgaW1hZ2VTZXRS
dWxlLmxlbmd0aCBpcyA0CitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnbGluZWFyLWdyYWRpZW50
KGdyZWVuLCB3aGl0ZSknCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMScKK1BBU1Mgc3ViUnVs
ZS5jc3NUZXh0IGlzICdyYWRpYWwtZ3JhZGllbnQoYmx1ZSwgd2hpdGUpJworUEFTUyBzdWJSdWxl
LmNzc1RleHQgaXMgJzInCisKK0NvbWJpbmVkIGdyYWRpZW50IGFuZCBVUkwgOiB1cmwoJyNhJykg
MXgsIGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIDJ4CitQQVNTIGpzV3JhcHBlckNsYXNz
KGltYWdlU2V0UnVsZSkgaXMgJ0NTU1ZhbHVlTGlzdCcKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1h
Z2VTZXRSdWxlLl9fcHJvdG9fXykgaXMgJ0NTU1ZhbHVlTGlzdFByb3RvdHlwZScKK1BBU1MganNX
cmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLmNvbnN0cnVjdG9yKSBpcyAnRnVuY3Rpb24nCitQQVNT
IGltYWdlU2V0UnVsZS5sZW5ndGggaXMgNAorUEFTUyBzdWJSdWxlIGlzICdhJworUEFTUyBzdWJS
dWxlLmNzc1RleHQgaXMgJzEnCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnbGluZWFyLWdyYWRp
ZW50KGdyZWVuLCB3aGl0ZSknCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMicKKworQ29tYmlu
ZWQgZ3JhZGllbnQgYW5kIFVSTCBpbiBjb250ZW50IDogdXJsKCcjYScpIDF4LCBsaW5lYXItZ3Jh
ZGllbnQoZ3JlZW4sIHdoaXRlKSAyeAorUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUp
IGlzICdDU1NWYWx1ZUxpc3QnCitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5fX3By
b3RvX18pIGlzICdDU1NWYWx1ZUxpc3RQcm90b3R5cGUnCitQQVNTIGpzV3JhcHBlckNsYXNzKGlt
YWdlU2V0UnVsZS5jb25zdHJ1Y3RvcikgaXMgJ0Z1bmN0aW9uJworUEFTUyBpbWFnZVNldFJ1bGUu
bGVuZ3RoIGlzIDQKK1BBU1Mgc3ViUnVsZSBpcyAnYScKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlz
ICcxJworUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJ2xpbmVhci1ncmFkaWVudChncmVlbiwgd2hp
dGUpJworUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJzInCisKK0NvbWJpbmVkIGdyYWRpZW50IGFu
ZCBjcm9zcy1mYWRlIDogLXdlYmtpdC1jcm9zcy1mYWRlKHVybCgnI2EnKSwgdXJsKCcjYicpLCA3
MCUpIDF4LCBsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAyeAorUEFTUyBqc1dyYXBwZXJD
bGFzcyhpbWFnZVNldFJ1bGUpIGlzICdDU1NWYWx1ZUxpc3QnCitQQVNTIGpzV3JhcHBlckNsYXNz
KGltYWdlU2V0UnVsZS5fX3Byb3RvX18pIGlzICdDU1NWYWx1ZUxpc3RQcm90b3R5cGUnCitQQVNT
IGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5jb25zdHJ1Y3RvcikgaXMgJ0Z1bmN0aW9uJwor
UEFTUyBpbWFnZVNldFJ1bGUubGVuZ3RoIGlzIDQKK1BBU1Mgc3ViUnVsZSBpcyAnYScKK1BBU1Mg
c3ViUnVsZS5jc3NUZXh0IGlzICcxJworUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJ2xpbmVhci1n
cmFkaWVudChncmVlbiwgd2hpdGUpJworUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJzInCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctZ2VuZXJh
dGVkLWV4cGVjdGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCww
ICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWdlbmVyYXRlZC5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWdlbmVyYXRlZC5odG1s
CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5n
LWdlbmVyYXRlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA3IEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgdGhlIHBhcnNpbmcgb2YgdGhl
IGltYWdlLXNldCBmdW5jdGlvbi4iKTsKKworZnVuY3Rpb24ganNXcmFwcGVyQ2xhc3Mobm9kZSkK
K3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiAiW251bGxdIjsKKyAgICB2YXIgc3Ry
aW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShub2RlKTsKKyAgICByZXR1cm4g
c3RyaW5nLnN1YnN0cig4LCBzdHJpbmcubGVuZ3RoIC0gOSk7Cit9CisKK2Z1bmN0aW9uIHNob3Vs
ZEJlVHlwZShleHByZXNzaW9uLCBjbGFzc05hbWUsIHByb3RvdHlwZU5hbWUsIGNvbnN0cnVjdG9y
TmFtZSkKK3sKKyAgICBpZiAoIXByb3RvdHlwZU5hbWUpCisgICAgICAgIHByb3RvdHlwZU5hbWUg
PSBjbGFzc05hbWUgKyAiUHJvdG90eXBlIjsKKyAgICBpZiAoIWNvbnN0cnVjdG9yTmFtZSkKKyAg
ICAgICAgY29uc3RydWN0b3JOYW1lID0gY2xhc3NOYW1lICsgIkNvbnN0cnVjdG9yIjsKKyAgICBz
aG91bGRCZSgianNXcmFwcGVyQ2xhc3MoIiArIGV4cHJlc3Npb24gKyAiKSIsICInIiArIGNsYXNz
TmFtZSArICInIik7CisgICAgc2hvdWxkQmUoImpzV3JhcHBlckNsYXNzKCIgKyBleHByZXNzaW9u
ICsgIi5fX3Byb3RvX18pIiwgIiciICsgcHJvdG90eXBlTmFtZSArICInIik7CisgICAgc2hvdWxk
QmUoImpzV3JhcHBlckNsYXNzKCIgKyBleHByZXNzaW9uICsgIi5jb25zdHJ1Y3RvcikiLCAiJ0Z1
bmN0aW9uJyIpOworfQorCisvLyBUaGVzZSBoYXZlIHRvIGJlIGdsb2JhbCBmb3IgdGhlIHRlc3Qg
aGVscGVycyB0byBzZWUgdGhlbS4KK3ZhciBpbWFnZVNldFJ1bGUsIHN1YlJ1bGU7CisKK2Z1bmN0
aW9uIHRlc3RJbWFnZVNldFJ1bGUoZGVzY3JpcHRpb24sIHByb3BlcnR5LCBydWxlLCBleHBlY3Rl
ZExlbmd0aCwgZXhwZWN0ZWRUZXh0cykKK3sKKyAgICBkZWJ1ZygiIik7CisgICAgZGVidWcoZGVz
Y3JpcHRpb24gKyAiIDogIiArIHJ1bGUpOworCisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpOworICAgIGRpdi5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgcHJvcGVydHkg
KyAiOiBpbWFnZS1zZXQoIiArIHJ1bGUgKyAiKSIpOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5k
Q2hpbGQoZGl2KTsKKworICAgIGltYWdlU2V0UnVsZSA9IGRpdi5zdHlsZS5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKHByb3BlcnR5KTsKKyAgICBzaG91bGRCZVR5cGUoImltYWdlU2V0UnVsZSIsICJDU1NW
YWx1ZUxpc3QiKTsKKworICAgIGlmIChpbWFnZVNldFJ1bGUpIHsKKyAgICAgICAgaWYgKGpzV3Jh
cHBlckNsYXNzKGltYWdlU2V0UnVsZVswXSkgPT0gIkNTU1ZhbHVlTGlzdCIpIHsKKyAgICAgICAg
ICAgIC8vIFRoZSBjb250ZW50IHByb3BlcnR5IHJldHVybnMgYSBDU1NWYWx1ZUxpc3QgYW55d2F5
LCBzbyB0byBnZXQgdG8gdGhlIAorICAgICAgICAgICAgLy8gaW1hZ2VTZXQgQ1NTIHZhbHVlIGxp
c3QsIHdlIGhhdmUgdG8gbG9vayBhdCB0aGUgZmlyc3QgZW50cnkgaW4gdGhlIAorICAgICAgICAg
ICAgLy8gY29udGVudCB2YWx1ZSBsaXN0LgorICAgICAgICAgICAgaW1hZ2VTZXRSdWxlID0gaW1h
Z2VTZXRSdWxlWzBdOworICAgICAgICB9CisgICAgfQorCisgICAgc2hvdWxkQmUoImltYWdlU2V0
UnVsZS5sZW5ndGgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGV4cGVjdGVkTGVuZ3RoOyB9KTsKKwor
ICAgIGlmIChpbWFnZVNldFJ1bGUpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBl
Y3RlZExlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBzdHJpbmcgPSBpbWFnZVNldFJ1bGVbaV07
CisgICAgICAgICAgICBpZiAoaSAlIDIgPT0gMCAmJiBzdHJpbmcuY3NzVGV4dC5pbmNsdWRlcygn
IycpKSB7CisgICAgICAgICAgICAgICAgc3ViUnVsZSA9IHN0cmluZy5jc3NUZXh0LnNwbGl0KCcj
JylbMV0ucmVwbGFjZSgnIicsICIiKTsKKyAgICAgICAgICAgICAgICBzdWJSdWxlID0gc3ViUnVs
ZS5zcGxpdCgnKScpWzBdOworICAgICAgICAgICAgICAgIHNob3VsZEJlKCJzdWJSdWxlIiwgIici
ICsgZXhwZWN0ZWRUZXh0c1tpXSArICInIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHN1YlJ1bGUgPSBzdHJpbmc7CisgICAgICAgICAgICAgICAgc2hvdWxkQmUoInN1
YlJ1bGUuY3NzVGV4dCIsICInIiArIGV4cGVjdGVkVGV4dHNbaV0gKyAiJyIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChk
aXYpOworfQorCit0ZXN0SW1hZ2VTZXRSdWxlKCJTaW5nbGUgdmFsdWUgZm9yIGJhY2tncm91bmQt
aW1hZ2Ugd2l0aCBncmFkaWVudCIsCisgICAgICAgICAgICAgICAgImJhY2tncm91bmQtaW1hZ2Ui
LAorICAgICAgICAgICAgICAgICJsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAxeCIsIDIs
CisgICAgICAgICAgICAgICAgWyJsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSIsICIxIl0p
OwordGVzdEltYWdlU2V0UnVsZSgiU2luZ2xlIHZhbHVlIGZvciBjb250ZW50IHdpdGggZ3JhZGll
bnQiLAorICAgICAgICAgICAgICAgICJiYWNrZ3JvdW5kLWltYWdlIiwKKyAgICAgICAgICAgICAg
ICAibGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMXgiLCAyLAorICAgICAgICAgICAgICAg
IFsibGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkiLCAiMSJdKTsKKwordGVzdEltYWdlU2V0
UnVsZSgiU2luZ2xlIHZhbHVlIGZvciBiYWNrZ3JvdW5kLWltYWdlIHdpdGggZ3JhZGllbnRzIiwK
KyAgICAgICAgICAgICAgICAiYmFja2dyb3VuZC1pbWFnZSIsCisgICAgICAgICAgICAgICAgImxp
bmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIDF4LCByYWRpYWwtZ3JhZGllbnQoYmx1ZSwgd2hp
dGUpIDJ4IiwgNCwKKyAgICAgICAgICAgICAgICBbImxpbmVhci1ncmFkaWVudChncmVlbiwgd2hp
dGUpIiwgIjEiLCAicmFkaWFsLWdyYWRpZW50KGJsdWUsIHdoaXRlKSIsICIyIl0pOworCit0ZXN0
SW1hZ2VTZXRSdWxlKCJDb21iaW5lZCBncmFkaWVudCBhbmQgVVJMIiwKKyAgICAgICAgICAgICAg
ICAiYmFja2dyb3VuZC1pbWFnZSIsCisgICAgICAgICAgICAgICAgInVybCgnI2EnKSAxeCwgbGlu
ZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMngiLCA0LAorICAgICAgICAgICAgICAgIFsiYSIs
ICIxIiwgImxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIiwgIjIiXSk7CisKK3Rlc3RJbWFn
ZVNldFJ1bGUoIkNvbWJpbmVkIGdyYWRpZW50IGFuZCBVUkwgaW4gY29udGVudCIsCisgICAgICAg
ICAgICAgICAgImNvbnRlbnQiLAorICAgICAgICAgICAgICAgICJ1cmwoJyNhJykgMXgsIGxpbmVh
ci1ncmFkaWVudChncmVlbiwgd2hpdGUpIDJ4IiwgNCwKKyAgICAgICAgICAgICAgICBbImEiLCAi
MSIsICJsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSIsICIyIl0pOworCit0ZXN0SW1hZ2VT
ZXRSdWxlKCJDb21iaW5lZCBncmFkaWVudCBhbmQgY3Jvc3MtZmFkZSIsCisgICAgICAgICAgICAg
ICAgImJhY2tncm91bmQtaW1hZ2UiLAorICAgICAgICAgICAgICAgICItd2Via2l0LWNyb3NzLWZh
ZGUodXJsKCcjYScpLCB1cmwoJyNiJyksIDcwJSkgMXgsIGxpbmVhci1ncmFkaWVudChncmVlbiwg
d2hpdGUpIDJ4IiwgNCwKKyAgICAgICAgICAgICAgICBbImEiLCAiMSIsICJsaW5lYXItZ3JhZGll
bnQoZ3JlZW4sIHdoaXRlKSIsICIyIl0pOworCitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwor
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1nZW5lcmF0ZWQuaHRtbApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJz
aW5nLWludmFsaWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
Y3NzL2ltYWdlLXNldC1wYXJzaW5nLWludmFsaWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNTQ4
MDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1pbnZhbGlkLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTgsNiArMTgsMTIgQEAgUEFTUyBjc3NSdWxl
IGlzIG51bGwKIAogU2NhbGUgZmFjdG9yIGlzIDAgOiB1cmwoJyNhJykgMHgKIFBBU1MgY3NzUnVs
ZSBpcyBudWxsCisKK0dlbmVyYXRlZCBpbWFnZSBmb3IgY3Vyc29yIDogbGluZWFyLWdyYWRpZW50
KGJsYWNrLCB3aGl0ZSkgMXgKK1BBU1MgY3NzUnVsZSBpcyBudWxsCisKK0ltYWdlLXNldCBpbnNp
ZGUgaW1hZ2Utc2V0IDogaW1hZ2Utc2V0KGltYWdlLXNldCh1cmwoJyNhJykgMXgpIDF4KQorUEFT
UyBjc3NSdWxlIGlzIG51bGwKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVT
VCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmct
aW52YWxpZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL2ltYWdlLXNl
dC1wYXJzaW5nLWludmFsaWQuaHRtbAkocmV2aXNpb24gMjU0ODA4KQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctaW52YWxpZC5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw2ICszMiw4IEBAIHRlc3RJbnZhbGlkSW1hZ2VTZXQoIk5vIHgiLCAiYmFja2dyb3VuZC0K
IHRlc3RJbnZhbGlkSW1hZ2VTZXQoIk5vIGNvbW1hIiwgImJhY2tncm91bmQtaW1hZ2UiLCAidXJs
KCcjYScpIDF4IHVybCgnI2InKSAyeCIpOwogdGVzdEludmFsaWRJbWFnZVNldCgiVG9vIG1hbnkg
c2NhbGUgZmFjdG9yIHBhcmFtZXRlcnMiLCAiYmFja2dyb3VuZC1pbWFnZSIsICJ1cmwoJyNhJykg
MXggMngiKTsKIHRlc3RJbnZhbGlkSW1hZ2VTZXQoIlNjYWxlIGZhY3RvciBpcyAwIiwgImJhY2tn
cm91bmQtaW1hZ2UiLCAidXJsKCcjYScpIDB4Iik7Cit0ZXN0SW52YWxpZEltYWdlU2V0KCJHZW5l
cmF0ZWQgaW1hZ2UgZm9yIGN1cnNvciIsICJjdXJzb3IiLCAibGluZWFyLWdyYWRpZW50KGJsYWNr
LCB3aGl0ZSkgMXgiKTsKK3Rlc3RJbnZhbGlkSW1hZ2VTZXQoIkltYWdlLXNldCBpbnNpZGUgaW1h
Z2Utc2V0IiwgImJhY2tncm91bmQtaW1hZ2UiLCAiaW1hZ2Utc2V0KGltYWdlLXNldCh1cmwoJyNh
JykgMXgpIDF4KSIpOwogCiBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwogPC9zY3JpcHQ+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1mYWRlLWV4cGVjdGVk
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jv
c3MtZmFkZS1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
aGlkcGkvaW1hZ2Utc2V0LWNyb3NzLWZhZGUtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDI2IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KKyAgICB3aW5kb3cub25s
b2FkID0gKCkgPT4geworICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB0ZXN0UnVubmVyLnNldEJhY2tpbmdT
Y2FsZUZhY3RvcigyLCAoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpLCAwKSk7CisgICAgICB9CisgICAgfQorPC9zY3JpcHQ+CisKKyAgICAKKzxzdHlsZT4KKyAg
ICAjZm9vIHsKKyAgICAgICAgd2lkdGg6MTAwcHg7CisgICAgICAgIGhlaWdodDoxMDBweDsKKyAg
ICAgICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1jcm9zcy1mYWRlKHVybCgncmVzb3VyY2Vz
L2JsdWUtMTAwLXB4LXNxdWFyZS5wbmcnKSwgdXJsKCdyZXNvdXJjZXMvZ3JlZW4tMjAwLXB4LXNx
dWFyZS5wbmcnLCA1MCUpKTsKKyAgICB9Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keT4KKyAg
ICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGRpdiBiZWxvdyBpcyBhIGJsdWUgMTAwcHgg
c3F1YXJlIHdoZW4gdGhlIGRldmljZVNjYWxlRmFjdG9yIGlzIDEsIGFuZCBpZiBpdCBpcyBhIDEw
MHB4IGdyZWVuL2JsdWUgY3Jvc3MtZmFkZSBzcXVhcmUgd2hlbiB0aGUgZGV2aWNlU2NhbGVGYWN0
b3IgaXMgMi48L2Rpdj4KKzxkaXYgaWQ9Zm9vPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgoKUHJv
cGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jvc3Mt
ZmFkZS1leHBlY3RlZC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0w
LDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWNyb3NzLWZhZGUuaHRtbAkobm9uZXhp
c3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1mYWRlLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQ+CisgICAgd2luZG93Lm9ubG9hZCA9ICgpID0+IHsKKyAgICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgdGVz
dFJ1bm5lci5zZXRCYWNraW5nU2NhbGVGYWN0b3IoMiwgKCkgPT4gc2V0VGltZW91dCgoKSA9PiB0
ZXN0UnVubmVyLm5vdGlmeURvbmUoKSwgMCkpOworICAgICAgfQorICAgIH0KKzwvc2NyaXB0Pgor
ICAgIAorPHN0eWxlPgorICAgICNmb28geworICAgICAgICB3aWR0aDoxMDBweDsKKyAgICAgICAg
aGVpZ2h0OjEwMHB4OworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBpbWFnZS1zZXQodXJsKCdy
ZXNvdXJjZXMvYmx1ZS0xMDAtcHgtc3F1YXJlLnBuZycpIDF4LCAtd2Via2l0LWNyb3NzLWZhZGUo
dXJsKCdyZXNvdXJjZXMvYmx1ZS0xMDAtcHgtc3F1YXJlLnBuZycpLCB1cmwoJ3Jlc291cmNlcy9n
cmVlbi0yMDAtcHgtc3F1YXJlLnBuZycsIDUwJSkpIDJ4KTsKKyAgICB9Cis8L3N0eWxlPgorPC9o
ZWFkPgorCis8Ym9keT4KKyAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGRpdiBiZWxv
dyBpcyBhIGJsdWUgMTAwcHggc3F1YXJlIHdoZW4gdGhlIGRldmljZVNjYWxlRmFjdG9yIGlzIDEs
IGFuZCBpZiBpdCBpcyBhIDEwMHB4IGdyZWVuL2JsdWUgY3Jvc3MtZmFkZSBzcXVhcmUgd2hlbiB0
aGUgZGV2aWNlU2NhbGVGYWN0b3IgaXMgMi48L2Rpdj4KKyAgICA8ZGl2IGlkPWZvbz48L2Rpdj4K
KzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3Qv
aGlkcGkvaW1hZ2Utc2V0LWNyb3NzLWZhZGUuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhl
Y3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LWV4cGVjdGVk
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3Jh
ZGllbnQtZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2hp
ZHBpL2ltYWdlLXNldC1ncmFkaWVudC1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjYgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorICAgIHdpbmRvdy5vbmxvYWQg
PSAoKSA9PiB7CisgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0QmFja2luZ1NjYWxl
RmFjdG9yKDIsICgpID0+IHNldFRpbWVvdXQoKCkgPT4gdGVzdFJ1bm5lci5ub3RpZnlEb25lKCks
IDApKTsKKyAgICAgIH0KKyAgICB9Cis8L3NjcmlwdD4KKworICAgIAorPHN0eWxlPgorICAgICNm
b28geworICAgICAgICB3aWR0aDoxMDBweDsKKyAgICAgICAgaGVpZ2h0OjEwMHB4OworICAgICAg
ICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKTsKKyAgICB9
Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keT4KKyAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMg
aWYgdGhlIGRpdiBiZWxvdyBpcyBhIGJsdWUgMTAwcHggc3F1YXJlIHdoZW4gdGhlIGRldmljZVNj
YWxlRmFjdG9yIGlzIDEsIGFuZCBpZiBpdCBpcyBhIDEwMHB4IGdyZWVuLXdoaXRlIGdyYWRpZW50
IHNxdWFyZSB3aGVuIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBpcyAyLjwvZGl2PgorICAgIDxkaXYg
aWQ9Zm9vPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5
b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtZXhwZWN0ZWQuaHRtbApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Ut
c2V0LWdyYWRpZW50LW11bHRpLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtbXVsdGktZXhwZWN0ZWQuaHRtbAkobm9u
ZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1t
dWx0aS1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKKzxodG1s
PgorPGhlYWQ+ICAgIAorPHNjcmlwdD4KKyAgICB3aW5kb3cub25sb2FkID0gKCkgPT4geworICAg
ICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGls
RG9uZSgpOworICAgICAgICB0ZXN0UnVubmVyLnNldEJhY2tpbmdTY2FsZUZhY3RvcigyLCAoKSA9
PiBzZXRUaW1lb3V0KCgpID0+IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpLCAwKSk7CisgICAgICB9
CisgICAgfQorPC9zY3JpcHQ+CisKKzxzdHlsZT4KKyAgICAjZm9vIHsKKyAgICAgICAgd2lkdGg6
MTAwcHg7CisgICAgICAgIGhlaWdodDoxMDBweDsKKyAgICAgICAgYmFja2dyb3VuZC1pbWFnZTog
cmFkaWFsLWdyYWRpZW50KHJlZCwgYmx1ZSk7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKwor
PGJvZHk+CisgICAgPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBkaXYgYmVsb3cgaXMgYSAx
MDBweCBncmVlbi13aGl0ZSBncmFkaWVudCBzcXVhcmUgd2hlbiBkZXZpY2VQaXhlbFJhdGlvIGlz
IDEsIGEgcmFkaWFsIHJlZC1ibHVlIHNxdWFyZSB3aGVuIGRldmljZVBpeGVsUmF0aW8gaXMgMiwg
YW5kIGEgYmx1ZSBzcXVhcmUgd2hlbiBkZXZpY2VQaXhlbFJhdGlvIGlzIDMuPC9kaXY+CisgICAg
PGRpdiBpZD1mb28+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1tdWx0aS1leHBlY3Rl
ZC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9o
aWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtbXVsdGkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1tdWx0aS5odG1sCShub25leGlzdGVu
dCkKKysrIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LW11bHRpLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNSBAQAorPGh0bWw+Cis8aGVhZD4gICAgCis8
c2NyaXB0PgorICAgIHdpbmRvdy5vbmxvYWQgPSAoKSA9PiB7CisgICAgICBpZiAod2luZG93LnRl
c3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAg
IHRlc3RSdW5uZXIuc2V0QmFja2luZ1NjYWxlRmFjdG9yKDIsICgpID0+IHNldFRpbWVvdXQoKCkg
PT4gdGVzdFJ1bm5lci5ub3RpZnlEb25lKCksIDApKTsKKyAgICAgIH0KKyAgICB9Cis8L3Njcmlw
dD4KKworPHN0eWxlPgorICAgICNmb28geworICAgICAgICB3aWR0aDoxMDBweDsKKyAgICAgICAg
aGVpZ2h0OjEwMHB4OworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBpbWFnZS1zZXQobGluZWFy
LWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMXgsIHJhZGlhbC1ncmFkaWVudChyZWQsIGJsdWUpIDJ4
LCAncmVzb3VyY2VzL2JsdWUtMTAwLXB4LXNxdWFyZS5wbmcnIDN4KTsKKyAgICB9Cis8L3N0eWxl
PgorPC9oZWFkPgorCis8Ym9keT4KKyAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGRp
diBiZWxvdyBpcyBhIDEwMHB4IGdyZWVuLXdoaXRlIGdyYWRpZW50IHNxdWFyZSB3aGVuIGRldmlj
ZVBpeGVsUmF0aW8gaXMgMSwgYSByYWRpYWwgcmVkLWJsdWUgc3F1YXJlIHdoZW4gZGV2aWNlUGl4
ZWxSYXRpbyBpcyAyLCBhbmQgYSBibHVlIHNxdWFyZSB3aGVuIGRldmljZVBpeGVsUmF0aW8gaXMg
My48L2Rpdj4KKyAgICA8ZGl2IGlkPWZvbz48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KClByb3Bl
cnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50
LW11bHRpLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAj
IworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1zaW5nbGUtZXhwZWN0ZWQuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1zaW5nbGUt
ZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2lt
YWdlLXNldC1ncmFkaWVudC1zaW5nbGUtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE2IEBACis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorICAgICNmb28geworICAgICAg
ICB3aWR0aDoxMDBweDsKKyAgICAgICAgaGVpZ2h0OjEwMHB4OworICAgICAgICBiYWNrZ3JvdW5k
LWltYWdlOiBsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKTsKKyAgICB9Cis8L3N0eWxlPgor
PC9oZWFkPgorCis8Ym9keSBpZD0iYm9keSI+CisgICAgPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlm
IHRoZSBkaXYgYmVsb3cgaXMgYSAxMDBweCBncmVlbi13aGl0ZSBncmFkaWVudCBzcXVhcmUuPC9k
aXY+CisgICAgPGRpdiBpZD1mb28+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1zaW5n
bGUtZXhwZWN0ZWQuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCww
ICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS5odG1s
CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRp
ZW50LXNpbmdsZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYgQEAKKzxodG1sPgor
PGhlYWQ+ICAgIAorPHN0eWxlPgorICAgICNmb28geworICAgICAgICB3aWR0aDoxMDBweDsKKyAg
ICAgICAgaGVpZ2h0OjEwMHB4OworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBpbWFnZS1zZXQo
bGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMXgpOworICAgIH0KKzwvc3R5bGU+Cis8L2hl
YWQ+CisKKzxib2R5IGlkPSJib2R5Ij4KKyAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhl
IGRpdiBiZWxvdyBpcyBhIDEwMHB4IGdyZWVuLXdoaXRlIGdyYWRpZW50IHNxdWFyZS48L2Rpdj4K
KyAgICA8ZGl2IGlkPWZvbz48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5n
ZXMgb246IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS5o
dG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9oaWRw
aS9pbWFnZS1zZXQtZ3JhZGllbnQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRl
c3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyNSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisgICAgd2luZG93Lm9ubG9h
ZCA9ICgpID0+IHsKKyAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0
UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRCYWNraW5nU2Nh
bGVGYWN0b3IoMiwgKCkgPT4gc2V0VGltZW91dCgoKSA9PiB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KSwgMCkpOworICAgICAgfQorICAgIH0KKzwvc2NyaXB0PgorCis8c3R5bGU+CisgICAgI2ZvbyB7
CisgICAgICAgIHdpZHRoOjEwMHB4OworICAgICAgICBoZWlnaHQ6MTAwcHg7CisgICAgICAgIGJh
Y2tncm91bmQtaW1hZ2U6IGltYWdlLXNldCh1cmwoJ3Jlc291cmNlcy9ibHVlLTEwMC1weC1zcXVh
cmUucG5nJykgMXgsIGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIDJ4KTsKKyAgICB9Cis8
L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keT4KKyAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYg
dGhlIGRpdiBiZWxvdyBpcyBhIGJsdWUgMTAwcHggc3F1YXJlIHdoZW4gdGhlIGRldmljZVNjYWxl
RmFjdG9yIGlzIDEsIGFuZCBpZiBpdCBpcyBhIDEwMHB4IGdyZWVuLXdoaXRlIGdyYWRpZW50IHNx
dWFyZSB3aGVuIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBpcyAyLjwvZGl2PgorICAgIDxkaXYgaWQ9
Zm9vPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0
VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQuaHRtbApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388283</attachid>
            <date>2020-01-21 00:06:42 -0800</date>
            <delta_ts>2020-01-21 04:57:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81941-20200121100638.patch</filename>
            <type>text/plain</type>
            <size>82351</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAyMC0wMS0xOSAgTm9hbSBS
b3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgLXdlYmtpdC1pbWFnZS1zZXQg
c2hvdWxkIHN1cHBvcnQgYWxsIHRoZSBpbWFnZSBmdW5jdGlvbnMgV2ViS2l0IHN1cHBvcnRzLCBu
b3QganVzdCB1cmwoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODE5NDEKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAg
ICBTZXBhcmF0ZSBTdHlsZUNhY2hlZEltYWdlIHRvIDQgY2xhc3NlczoKKyAgICAgICAgLSBTdHls
ZUNhY2hlZEltYWdlOiBmb3Igc2luZ2xlIGltYWdlcyBvbmx5CisgICAgICAgIC0gU3R5bGVNdWx0
aUltYWdlOiBmb3IgdmFsdWVzIHRoYXQgY2FuIGNvbnRhaW4gbXVsdGlwbGUgaW1hZ2VzOiBsaWtl
IGN1cnNvci9pbWFnZS1zZXQKKyAgICAgICAgLSBTdHlsZUltYWdlU2V0CisgICAgICAgIC0gU3R5
bGVDdXJzb3JJbWFnZQorCisgICAgICAgIFRoZSBuZXcgY2xhc3NlcyBvbmx5IGRlYWwgd2l0aCB0
aGVpciBvd24gdmFsdWUgdHlwZS4gQmVmb3JlLCBJbWFnZVNldCBhbmQgY3Vyc29yIHdlcmUgcmVz
b2x2ZWQKKyAgICAgICAgYXMgYSBTdHlsZUNhY2hlZEltYWdlLCB3aGljaCBpcyBubyBsb25nZXIg
YSB2YWxpZCBhc3N1bXB0aW9uIGlmIGltYWdlLXNldCBjYW4gY29udGFpbiBnZW5lcmF0ZWQgaW1h
Z2VzLgorICAgICAgICBUaG91Z2ggY3Vyc29ycyBzdGlsbCBjYW4gb25seSBjb250YWluIGNhY2hl
ZCBpbWFnZXMsIGl0IHdhcyBjbGVhbmVyIHRvIHJlZmFjdG9yIGl0IG91dCBhcyB3ZWxsLgorCisg
ICAgICAgIFJlZmFjdG9yZWQgYmVzdC1maXQgaW1hZ2Ugc2VsZWN0aW9uIGZyb20gbG9hZGluZy4g
Tm93IFN0eWxlQ2FjaGVkSW1hZ2UgaXMgaW4gY2hhcmdlIG9mIGxvYWRpbmcKKyAgICAgICAgdGhl
IGFjdHVhbCBpbWFnZSwgYW5kIFN0eWxlSW1hZ2VTZXQvU3R5bGVDdXJzb3JJbWFnZSBwZXJmb3Jt
IHRoZSBzb3VyY2Ugc2VsZWN0aW9uLgorCisgICAgICAgIEFsc28sIGFkZGVkIHRoZSBuZWNlc3Nh
cnkgbG9naWMgaW4gdGhlIENTUyBwYXJzZXIgdG8gY29uc3VtZSBnZW5lcmF0ZWQgaW1hZ2VzIGlu
c2lkZSBpbWFnZS1zZXRzLCBleGNsdWRpbmcKKyAgICAgICAgd2hlbiB0aGUgaW1hZ2Utc2V0IGlz
IGEgY3Vyc29yIHZhbHVlLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2Nzcy9pbWFnZS1zZXQtcGFy
c2luZy1nZW5lcmF0ZWQuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9oaWRwaS9pbWFnZS1zZXQt
Y3Jvc3MtZmFkZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFk
aWVudC1tdWx0aS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFk
aWVudC1zaW5nbGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3Jh
ZGllbnQuaHRtbAorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBmaWxl
cworCisgICAgICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6c2VsZWN0QmVzdEZpdEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0N1cnNvckltYWdlVmFsdWU6OmxvYWRJbWFnZSk6IERlbGV0ZWQuCisgICAg
ICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuaDoKKyAgICAgICAgICAgICAgICBJbnN0ZWFk
IG9mIGN1cnNvciBsb2FkaW5nIHRoZSBpbWFnZSwgaXQgc2VsZWN0cyBhbiBpbWFnZSBDU1MgdmFs
dWUKKworICAgICAgICAqIGNzcy9DU1NJbWFnZVNldFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ltYWdlU2V0VmFsdWU6OkNTU0ltYWdlU2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTSW1hZ2VTZXRWYWx1ZTo6ZmlsbEltYWdlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ltYWdlU2V0VmFsdWU6OmNhY2hlZEltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ltYWdlU2V0VmFsdWU6OnNlbGVjdEJlc3RGaXRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NJbWFnZVNldFZhbHVlOjp1cGRhdGVEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpDU1NJbWFnZVNldFZhbHVlOjppbWFnZVNldFdpdGhTdHlsZXNSZXNvbHZlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjp0cmF2ZXJzZVN1YnJlc291cmNlcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjpsb2FkQmVzdEZpdEltYWdl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5oOgorICAgICAgICAg
ICAgICAgIFJlZmFjdG9yIENTU0ltYWdlU2V0VmFsdWUgdG8gaW5jbHVkZSBub24tY2FjaGVkSW1h
Z2UgaW1hZ2VzCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVDdXJzb3IpOgorICAgICAgICAqIGNzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVVybE9yU3RyaW5nQXNTdHJpbmdWaWV3
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5oOgorICAgICAgICAgICAgICAgIAorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NTU1Byb3Bl
cnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRnVuYyk6CisgICAgICAg
ICAgICAgICAgV2hlbiBibGVuZGluZyB0d28gaW1hZ2VzLCBnZXQgdGhlIHNlbGVjdGVkIGltYWdl
cyBpbiBjYXNlIGl0IGlzIGFuIGltYWdlLXNldAorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
SW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1h
Z2VSZXNvdXJjZVN0eWxlSW1hZ2U6OmluaXRpYWxpemUpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FuRGlyZWN0bHlDb21w
b3NpdGVCYWNrZ3JvdW5kQmFja2dyb3VuZEltYWdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5
bGUvU2hhcGVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjppc0ltYWdl
VmFsaWQgY29uc3QpOgorICAgICAgICAgICAgICAgIFVzZSBoYXNDYWNoZWRJbWFnZSgpIGluc3Rl
YWQgb2YgaXNDYWNoZWRJbWFnZSgpIGFzIGEgU3R5bGVJbWFnZVNldCBpcyBubyBsb25nZXIgYW4g
aXNDYWNoZWRJbWFnZSgpCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNhY2hlZEltYWdlOjpTdHlsZUNhY2hl
ZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlVVJMKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OmxvYWQpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0
eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVD
dXJzb3JJbWFnZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFn
ZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZU11bHRpSW1hZ2UuY3BwOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlU2V0Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9T
dHlsZUltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUltYWdlOjpzZWxlY3RlZEltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW1hZ2U6OnNlbGVjdGVkSW1hZ2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVJbWFnZTo6aXNDdXJzb3JJbWFnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUltYWdlOjppc0ltYWdlU2V0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlSW1hZ2U6Omhhc0NhY2hlZEltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlSW1hZ2U6OlN0eWxlSW1hZ2UpOgorICAgICAgICAgICAgICAgIFNlcGFyYXRlIGN1
cnNvci9pbWFnZS1zZXQgcmVsYXRlZCBzdHVmZiBhd2F5IGZyb20gU3R5bGVDYWNoZWRJbWFnZS4K
KworICAgICAgICAqIHN0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OkJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb250ZW50KToKKyAgICAgICAgKiBz
dHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVp
bGRlclN0YXRlOjpyZXNvbHZlSW1hZ2VTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OkJ1aWxkZXJTdGF0ZTo6Y3JlYXRlU3R5bGVJbWFnZSk6CisgICAgICAgICogc3R5bGUvU3R5bGVC
dWlsZGVyU3RhdGUuaDoKKyAgICAgICAgICAgICAgICBNYXRjaCB0aGUgQ1NTIHZhbHVlcyB3aXRo
IHRoZSBjb3JyZWN0IFN0eWxlIGNsYXNzLiBBbHNvLCBlbnN1cmUgaW1hZ2Utc2V0cyByZXNvbHZl
IHRoZWlyIAorICAgICAgICAgICAgICAgIGltYWdlcycgc3R5bGVzIGFzIHRoZXkgbWF5IGNvbnRh
aW4gZ3JhZGllbnRzIGFuZCBvdGhlciBjb250ZXh0LWF3YXJlIHZhbHVlcy4KKwogMjAyMC0wMS0x
OSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10gRGV2
aXJ0dWFsaXplIEZvcm1hdHRpbmdTdGF0ZQpJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI1
NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0y
MjYyLDE1ICsyMjYyLDE4IEBAIHJlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmNwcAogcmVuZGVy
aW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVC
b3hEYXRhLmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCityZW5kZXJp
bmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZURlcHJl
Y2F0ZWRGbGV4aWJsZUJveERhdGEuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVGaWx0ZXJEYXRh
LmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlRmxleGlibGVCb3hEYXRhLmNwcAogcmVuZGVyaW5n
L3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVHcmlk
RGF0YS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZUdyaWRJdGVtRGF0YS5jcHAKK3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZUltYWdlU2V0LmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJpdGVk
RGF0YS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZU1hcnF1ZWVEYXRhLmNwcAogcmVuZGVyaW5n
L3N0eWxlL1N0eWxlTXVsdGlDb2xEYXRhLmNwcAorcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJ
bWFnZS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcAogcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuY3BwCiByZW5kZXJpbmcvc3R5
bGUvU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjU0ODA4KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzcxNSw5ICsxMzcxNSwxNSBAQAogCQlDOURBREJDOTFCMUQzQjI1MDAxRjE3
RDggLyogSlNNZWRpYVNlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNNZWRpYVNlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
OURBREJDQTFCMUQzQjI1MDAxRjE3RDggLyogSlNNZWRpYVNlc3Npb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNZWRpYVNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzlGODdDRkQxQjI4RTVGNjAwOTc5QjgzIC8qIE1lZGlhU2Vzc2lvbkV2ZW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU2Vzc2lvbkV2ZW50cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDQTA5MUQ4NjIzQ0Y5MDc4MDBBRDQzNDYgLyogU3R5bGVJbWFnZVNldC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUltYWdlU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQ0EwOTFEODkyM0NGOTA4ODAwQUQ0MzQ2IC8qIFN0eWxlSW1hZ2VTZXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVJbWFnZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDQTE2MzVEQzIwNzJFNzY5MDBFN0QyQ0UgLyogUmVmZXJyZXJQb2xpY3kuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVmZXJyZXJQb2xpY3kuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQTNCRjY3QjEwRDk5QkFFMDBFNkNFNTMgLyog
U2Nyb2xsQW5pbWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2Nyb2xsQW5pbWF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQTNCRjY3
RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQ0E1MkJBRTUyM0QwQUYxNjAwREUwQjg0IC8qIFN0eWxlQ3Vyc29ySW1hZ2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVDdXJzb3JJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUNBNTJCQUU3MjNEMEFGMTcwMERFMEI4NCAvKiBTdHlsZU11bHRpSW1hZ2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVNdWx0aUltYWdlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0E1MkJBRTgyM0QwQUYxODAwREUwQjg0IC8qIFN0eWxlTXVsdGlJ
bWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZU11bHRpSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQ0E1MkJBRTkyM0QwQUYxOTAwREUwQjg0IC8qIFN0eWxlQ3Vyc29ySW1h
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVDdXJzb3JJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDQTZDMTUyRjIyMEI0QTU1MDA1NUNCRkMgLyogSlNJREJSZXF1ZXN0Q3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCUmVxdWVz
dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNBNkMxNTM3MjIwRDFF
QjMwMDU1Q0JGQyAvKiBKU0lEQkN1cnNvckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0lEQkN1cnNvckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNBNkMxNTM4MjIwRDFFQjMwMDU1Q0JGQyAvKiBKU0lEQkN1cnNvcldpdGhW
YWx1ZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lE
QkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yNTU1Myw2ICsyNTU1OSw4IEBACiAJCQkJQkNFRjQ0NEMwRTY3NDYyODAwMUMxMjg3IC8qIFN0
eWxlQ2FjaGVkSW1hZ2UuaCAqLywKIAkJCQkxQzBBQTE2QTIxOTQwREM3MDA4OTY4MjkgLyogU3R5
bGVDb2xvclNjaGVtZS5oICovLAogCQkJCTlEQUM3QzU2MUFGMkNCNjQwMDQzN0M0NCAvKiBTdHls
ZUNvbnRlbnRBbGlnbm1lbnREYXRhLmggKi8sCisJCQkJQ0E1MkJBRTUyM0QwQUYxNjAwREUwQjg0
IC8qIFN0eWxlQ3Vyc29ySW1hZ2UuY3BwICovLAorCQkJCUNBNTJCQUU5MjNEMEFGMTkwMERFMEI4
NCAvKiBTdHlsZUN1cnNvckltYWdlLmggKi8sCiAJCQkJQkM3NzlFMTUxQkIyMjZBMjAwQ0FBOEJG
IC8qIFN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhLmggKi8sCiAJCQkJQkM1RUI4QjYwRTgyMDFCRDAw
QjI1OTY1IC8qIFN0eWxlRGVwcmVjYXRlZEZsZXhpYmxlQm94RGF0YS5jcHAgKi8sCiAJCQkJQkM1
RUI4QjcwRTgyMDFCRDAwQjI1OTY1IC8qIFN0eWxlRGVwcmVjYXRlZEZsZXhpYmxlQm94RGF0YS5o
ICovLApAQCAtMjU1NjcsMTIgKzI1NTc1LDE2IEBACiAJCQkJQTExMERCOUMxNEY1REY4NzAwQTAz
QjkzIC8qIFN0eWxlR3JpZEl0ZW1EYXRhLmNwcCAqLywKIAkJCQlBMTEwREI5QTE0RjVERjc3MDBB
MDNCOTMgLyogU3R5bGVHcmlkSXRlbURhdGEuaCAqLywKIAkJCQlCQ0VGNDNDRTBFNjczREExMDAx
QzEyODcgLyogU3R5bGVJbWFnZS5oICovLAorCQkJCUNBMDkxRDg2MjNDRjkwNzgwMEFENDM0NiAv
KiBTdHlsZUltYWdlU2V0LmNwcCAqLywKKwkJCQlDQTA5MUQ4OTIzQ0Y5MDg4MDBBRDQzNDYgLyog
U3R5bGVJbWFnZVNldC5oICovLAogCQkJCUJDMjI3MzAxMEU4MkYxRTYwMEU3Rjk3NSAvKiBTdHls
ZUluaGVyaXRlZERhdGEuY3BwICovLAogCQkJCUJDMjI3MzAyMEU4MkYxRTYwMEU3Rjk3NSAvKiBT
dHlsZUluaGVyaXRlZERhdGEuaCAqLywKIAkJCQlCQzVFQjcyNzBFODFERTgxMDBCMjU5NjUgLyog
U3R5bGVNYXJxdWVlRGF0YS5jcHAgKi8sCiAJCQkJQkM1RUI3MjgwRTgxREU4MTAwQjI1OTY1IC8q
IFN0eWxlTWFycXVlZURhdGEuaCAqLywKIAkJCQlCQzVFQjc0QjBFODFFMDY3MDBCMjU5NjUgLyog
U3R5bGVNdWx0aUNvbERhdGEuY3BwICovLAogCQkJCUJDNUVCNzRDMEU4MUUwNjcwMEIyNTk2NSAv
KiBTdHlsZU11bHRpQ29sRGF0YS5oICovLAorCQkJCUNBNTJCQUU3MjNEMEFGMTcwMERFMEI4NCAv
KiBTdHlsZU11bHRpSW1hZ2UuY3BwICovLAorCQkJCUNBNTJCQUU4MjNEMEFGMTgwMERFMEI4NCAv
KiBTdHlsZU11bHRpSW1hZ2UuaCAqLywKIAkJCQlCQzIyNzJFMTBFODJFRTlCMDBFN0Y5NzUgLyog
U3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5jcHAgKi8sCiAJCQkJQkMyMjcyRTIwRTgyRUU5QjAwRTdG
OTc1IC8qIFN0eWxlUmFyZUluaGVyaXRlZERhdGEuaCAqLywKIAkJCQlCQzIyNzJCQTBFODJFQUFF
MDBFN0Y5NzUgLyogU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAgKi8sCkBAIC0zMTM1Nyw2
ICszMTM2OSw3IEBACiAJCQkJMTE5OUZBNDYyMDhFMzVBMzAwMjM1OENDIC8qIExheW91dENvbnRh
aW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkYyNkJCNkMyMzM0M0U2RjAwMkYyQkVBIC8qIExh
eW91dENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTExMzEwQ0Y1MjBCQTRBNEMwMDY1QThE
MCAvKiBMYXlvdXREZXNjZW5kYW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0MTgw
MjU1MjNENDU0OUIwMEZGQjA3MSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU0QUJBQkREMjM2MDg4RkUwMEZBNDM0NSAvKiBMYXlvdXRJbnRlZ3JhdGlv
bkxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTExMzEwQ0Y0MjBCQTRBM0QwMDY1QThE
MCAvKiBMYXlvdXRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxRDcyRjYxNUZFNjk1
MzAwQzRDMDdFIC8qIExheW91dE1pbGVzdG9uZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjA1MCw3
ICszMjA2Myw2IEBACiAJCQkJNDU4RkU0MEExNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNlYXJj
aEZpZWxkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQgLyog
UmVuZGVyU2VsZWN0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUIyNDdBNkQwQUZENjM4
MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQxODAyNTUy
M0Q0NTQ5QjAwRkZCMDcxIC8qIExheW91dEludGVncmF0aW9uQm94VHJlZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzE5NTVBODgxNjBEMTk5MjAwODU4MDI1IC8qIFJlbmRlclNuYXBzaG90dGVkUGx1
Z0luLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhDOEZBRTBERENEMzFCMDBCNTkyRjQgLyogUmVu
ZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNjY4MEU4MUNCNzEwMEIyNTk2NSAv
KiBSZW5kZXJTdHlsZUNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk1LDE3ICs5NSwxNyBAQCB2b2lkIENTU0N1cnNvckltYWdlVmFsdWU6OmN1cnNvckVsZW1l
bnRDCiAgICAgbV9ob3RTcG90LnNldFkoc3RhdGljX2Nhc3Q8aW50Pih5KSk7CiB9CiAKLXN0ZDo6
cGFpcjxDYWNoZWRJbWFnZSosIGZsb2F0PiBDU1NDdXJzb3JJbWFnZVZhbHVlOjpsb2FkSW1hZ2Uo
Q2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25z
JiBvcHRpb25zKQorSW1hZ2VXaXRoU2NhbGUgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6c2VsZWN0QmVz
dEZpdEltYWdlKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBpZiAoaXM8Q1NTSW1h
Z2VTZXRWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENTU0ltYWdlU2V0VmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkubG9hZEJlc3RGaXRJbWFnZShs
b2FkZXIsIG9wdGlvbnMpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1
ZT4obV9pbWFnZVZhbHVlLmdldCgpKS5zZWxlY3RCZXN0Rml0SW1hZ2UoZG9jdW1lbnQpOwogCi0g
ICAgaWYgKGF1dG8qIGN1cnNvckVsZW1lbnQgPSB1cGRhdGVDdXJzb3JFbGVtZW50KCpsb2FkZXIu
ZG9jdW1lbnQoKSkpIHsKKyAgICBpZiAoYXV0byogY3Vyc29yRWxlbWVudCA9IHVwZGF0ZUN1cnNv
ckVsZW1lbnQoZG9jdW1lbnQpKSB7CiAgICAgICAgIGlmIChjdXJzb3JFbGVtZW50LT5ocmVmKCkg
IT0gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKS51cmwoKSkKLSAg
ICAgICAgICAgIG1faW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFsdWU6OmNyZWF0ZShsb2FkZXIuZG9j
dW1lbnQoKS0+Y29tcGxldGVVUkwoY3Vyc29yRWxlbWVudC0+aHJlZigpKSwgbV9sb2FkZWRGcm9t
T3BhcXVlU291cmNlKTsKKyAgICAgICAgICAgIG1faW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFsdWU6
OmNyZWF0ZShkb2N1bWVudC5jb21wbGV0ZVVSTChjdXJzb3JFbGVtZW50LT5ocmVmKCkpLCBtX2xv
YWRlZEZyb21PcGFxdWVTb3VyY2UpOwogICAgIH0KIAotICAgIHJldHVybiB7IGRvd25jYXN0PENT
U0ltYWdlVmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkubG9hZEltYWdlKGxvYWRlciwgb3B0aW9u
cyksIDEgfTsKKyAgICByZXR1cm4geyBtX2ltYWdlVmFsdWUucHRyKCkgLCAxIH07CiB9CiAKIGJv
b2wgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6ZXF1YWxzKGNvbnN0IENTU0N1cnNvckltYWdlVmFsdWUm
IG90aGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1
ZS5oCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1h
Z2VWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCwxMiBAQCBjbGFzcyBFbGVtZW50
OwogY2xhc3MgU1ZHQ3Vyc29yRWxlbWVudDsKIGNsYXNzIFNWR0VsZW1lbnQ7CiAKK3N0cnVjdCBJ
bWFnZVdpdGhTY2FsZTsKKworbmFtZXNwYWNlIFN0eWxlIHsKK2NsYXNzIEJ1aWxkZXJTdGF0ZTsK
K30KKwogY2xhc3MgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSBmaW5hbCA6IHB1YmxpYyBDU1NWYWx1ZSB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxDU1NDdXJzb3JJbWFnZVZhbHVlPiBjcmVhdGUoUmVm
PENTU1ZhbHVlPiYmIGltYWdlVmFsdWUsIGJvb2wgaGFzSG90U3BvdCwgY29uc3QgSW50UG9pbnQm
IGhvdFNwb3QsIExvYWRlZEZyb21PcGFxdWVTb3VyY2UgbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSkK
QEAgLTU2LDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBj
b25zdDsKIAotICAgIHN0ZDo6cGFpcjxDYWNoZWRJbWFnZSosIGZsb2F0PiBsb2FkSW1hZ2UoQ2Fj
aGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKKyAgICBJ
bWFnZVdpdGhTY2FsZSBzZWxlY3RCZXN0Rml0SW1hZ2UoY29uc3QgRG9jdW1lbnQmKTsKIAogICAg
IHZvaWQgcmVtb3ZlUmVmZXJlbmNlZEVsZW1lbnQoU1ZHRWxlbWVudCopOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDE5ICsyOCwyMCBAQAogCiAjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgogI2luY2x1ZGUg
IkNTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVz
dC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTdHlsZUJ1aWxk
ZXJTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1DU1NJbWFnZVNldFZhbHVlOjpDU1NJbWFnZVNldFZhbHVlKExvYWRl
ZEZyb21PcGFxdWVTb3VyY2UgbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSkKK1JlZjxDU1NJbWFnZVNl
dFZhbHVlPiBDU1NJbWFnZVNldFZhbHVlOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IENTU0ltYWdlU2V0VmFsdWUpOworfQorCitDU1NJbWFnZVNldFZhbHVlOjpDU1NJbWFn
ZVNldFZhbHVlKCkKICAgICA6IENTU1ZhbHVlTGlzdChJbWFnZVNldENsYXNzLCBDb21tYVNlcGFy
YXRvcikKLSAgICAsIG1fbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZShsb2FkZWRGcm9tT3BhcXVlU291
cmNlKQogewogfQogCkBAIC01MiwxNSArNTMsMTQgQEAgdm9pZCBDU1NJbWFnZVNldFZhbHVlOjpm
aWxsSW1hZ2VTZXQoKQogICAgIHNpemVfdCBpID0gMDsKICAgICB3aGlsZSAoaSA8IGxlbmd0aCkg
ewogICAgICAgICBDU1NWYWx1ZSogaW1hZ2VWYWx1ZSA9IGl0ZW0oaSk7Ci0gICAgICAgIFVSTCBp
bWFnZVVSTCA9IGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KCppbWFnZVZhbHVlKS51cmwoKTsKLQor
ICAgICAgICBBU1NFUlQoaXM8Q1NTSW1hZ2VWYWx1ZT4oaW1hZ2VWYWx1ZSkgfHwgaXM8Q1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZT4oaW1hZ2VWYWx1ZSkpOwogICAgICAgICArK2k7CiAgICAgICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBsZW5ndGgpOwogICAgICAgICBDU1NW
YWx1ZSogc2NhbGVGYWN0b3JWYWx1ZSA9IGl0ZW0oaSk7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFj
dG9yID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpzY2FsZUZhY3RvclZhbHVlKS5mbG9h
dFZhbHVlKCk7CiAKICAgICAgICAgSW1hZ2VXaXRoU2NhbGUgaW1hZ2U7Ci0gICAgICAgIGltYWdl
LmltYWdlVVJMID0gaW1hZ2VVUkw7CisgICAgICAgIGltYWdlLnZhbHVlID0gaW1hZ2VWYWx1ZTsK
ICAgICAgICAgaW1hZ2Uuc2NhbGVGYWN0b3IgPSBzY2FsZUZhY3RvcjsKICAgICAgICAgbV9pbWFn
ZXNJblNldC5hcHBlbmQoaW1hZ2UpOwogICAgICAgICArK2k7CkBAIC03MCw3ICs3MCw3IEBAIHZv
aWQgQ1NTSW1hZ2VTZXRWYWx1ZTo6ZmlsbEltYWdlU2V0KCkKICAgICBzdGQ6OnNvcnQobV9pbWFn
ZXNJblNldC5iZWdpbigpLCBtX2ltYWdlc0luU2V0LmVuZCgpLCBDU1NJbWFnZVNldFZhbHVlOjpj
b21wYXJlQnlTY2FsZUZhY3Rvcik7CiB9CiAKLUNTU0ltYWdlU2V0VmFsdWU6OkltYWdlV2l0aFNj
YWxlIENTU0ltYWdlU2V0VmFsdWU6OmJlc3RJbWFnZUZvclNjYWxlRmFjdG9yKCkKK0ltYWdlV2l0
aFNjYWxlIENTU0ltYWdlU2V0VmFsdWU6OmJlc3RJbWFnZUZvclNjYWxlRmFjdG9yKCkKIHsKICAg
ICBpZiAoIW1faW1hZ2VzSW5TZXQuc2l6ZSgpKQogICAgICAgICBmaWxsSW1hZ2VTZXQoKTsKQEAg
LTg1LDQyICs4NSw0OSBAQCBDU1NJbWFnZVNldFZhbHVlOjpJbWFnZVdpdGhTY2FsZSBDU1NJbWFn
CiAgICAgcmV0dXJuIGltYWdlOwogfQogCi1zdGQ6OnBhaXI8Q2FjaGVkSW1hZ2UqLCBmbG9hdD4g
Q1NTSW1hZ2VTZXRWYWx1ZTo6bG9hZEJlc3RGaXRJbWFnZShDYWNoZWRSZXNvdXJjZUxvYWRlciYg
bG9hZGVyLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCitDYWNoZWRJbWFn
ZSogQ1NTSW1hZ2VTZXRWYWx1ZTo6Y2FjaGVkSW1hZ2UoKSBjb25zdAogewotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGxvYWRlci5kb2N1bWVudCgpOwotICAgIEFTU0VSVChkb2N1bWVudCk7Cisg
ICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KG1fc2VsZWN0ZWRJbWFnZVZhbHVlKSkKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KCptX3NlbGVjdGVkSW1hZ2VWYWx1ZSkuY2Fj
aGVkSW1hZ2UoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KIAotICAgIHVwZGF0ZURldmljZVNj
YWxlRmFjdG9yKCpkb2N1bWVudCk7CitJbWFnZVdpdGhTY2FsZSBDU1NJbWFnZVNldFZhbHVlOjpz
ZWxlY3RCZXN0Rml0SW1hZ2UoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQoreworICAgIHVwZGF0
ZURldmljZVNjYWxlRmFjdG9yKGRvY3VtZW50KTsKIAogICAgIGlmICghbV9hY2Nlc3NlZEJlc3RG
aXRJbWFnZSkgewogICAgICAgICBtX2FjY2Vzc2VkQmVzdEZpdEltYWdlID0gdHJ1ZTsKLQotICAg
ICAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwgd2Ugd2FudCB0byB0YWtlIG11Y2ggbW9yZSB0
aGFuIGRldmljZVNjYWxlRmFjdG9yIGludG8gYWNvdW50IGhlcmUuCi0gICAgICAgIC8vIEFsbCBm
b3JtcyBvZiBzY2FsZSBzaG91bGQgYmUgaW5jbHVkZWQ6IFBhZ2U6OnBhZ2VTY2FsZUZhY3Rvcigp
LCBGcmFtZTo6cGFnZVpvb21GYWN0b3IoKSwKLSAgICAgICAgLy8gYW5kIGFueSBDU1MgdHJhbnNm
b3Jtcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNjk4Ci0gICAg
ICAgIEltYWdlV2l0aFNjYWxlIGltYWdlID0gYmVzdEltYWdlRm9yU2NhbGVGYWN0b3IoKTsKLQot
ICAgICAgICBSZXNvdXJjZUxvYWRlck9wdGlvbnMgbG9hZE9wdGlvbnMgPSBvcHRpb25zOwotICAg
ICAgICBsb2FkT3B0aW9ucy5sb2FkZWRGcm9tT3BhcXVlU291cmNlID0gbV9sb2FkZWRGcm9tT3Bh
cXVlU291cmNlOwotICAgICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJj
ZVJlcXVlc3QoZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGltYWdlLmltYWdlVVJMKSksIGxvYWRPcHRp
b25zKTsKLSAgICAgICAgcmVxdWVzdC5zZXRJbml0aWF0b3IoY2FjaGVkUmVzb3VyY2VSZXF1ZXN0
SW5pdGlhdG9ycygpLmNzcyk7Ci0gICAgICAgIGlmIChvcHRpb25zLm1vZGUgPT0gRmV0Y2hPcHRp
b25zOjpNb2RlOjpDb3JzKQotICAgICAgICAgICAgcmVxdWVzdC51cGRhdGVGb3JBY2Nlc3NDb250
cm9sKCpkb2N1bWVudCk7Ci0KLSAgICAgICAgbV9jYWNoZWRJbWFnZSA9IGxvYWRlci5yZXF1ZXN0
SW1hZ2UoV1RGTW92ZShyZXF1ZXN0KSkudmFsdWVfb3IobnVsbHB0cik7Ci0gICAgICAgIG1fYmVz
dEZpdEltYWdlU2NhbGVGYWN0b3IgPSBpbWFnZS5zY2FsZUZhY3RvcjsKKyAgICAgICAgbV9iZXN0
Rml0SW1hZ2UgPSBiZXN0SW1hZ2VGb3JTY2FsZUZhY3RvcigpOwogICAgIH0KLSAgICByZXR1cm4g
eyBtX2NhY2hlZEltYWdlLmdldCgpLCBtX2Jlc3RGaXRJbWFnZVNjYWxlRmFjdG9yIH07CisKKyAg
ICByZXR1cm4gbV9iZXN0Rml0SW1hZ2U7CiB9CiAKIHZvaWQgQ1NTSW1hZ2VTZXRWYWx1ZTo6dXBk
YXRlRGV2aWNlU2NhbGVGYWN0b3IoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQogeworCisgICAg
Ly8gRklYTUU6IEluIHRoZSBmdXR1cmUsIHdlIHdhbnQgdG8gdGFrZSBtdWNoIG1vcmUgdGhhbiBk
ZXZpY2VTY2FsZUZhY3RvciBpbnRvIGFjb3VudCBoZXJlLgorICAgIC8vIEFsbCBmb3JtcyBvZiBz
Y2FsZSBzaG91bGQgYmUgaW5jbHVkZWQ6IFBhZ2U6OnBhZ2VTY2FsZUZhY3RvcigpLCBGcmFtZTo6
cGFnZVpvb21GYWN0b3IoKSwKKyAgICAvLyBhbmQgYW55IENTUyB0cmFuc2Zvcm1zLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE2OTgKICAgICBmbG9hdCBkZXZpY2VT
Y2FsZUZhY3RvciA9IGRvY3VtZW50LnBhZ2UoKSA/IGRvY3VtZW50LnBhZ2UoKS0+ZGV2aWNlU2Nh
bGVGYWN0b3IoKSA6IDE7CiAgICAgaWYgKGRldmljZVNjYWxlRmFjdG9yID09IG1fZGV2aWNlU2Nh
bGVGYWN0b3IpCiAgICAgICAgIHJldHVybjsKICAgICBtX2RldmljZVNjYWxlRmFjdG9yID0gZGV2
aWNlU2NhbGVGYWN0b3I7CiAgICAgbV9hY2Nlc3NlZEJlc3RGaXRJbWFnZSA9IGZhbHNlOwotICAg
IG1fY2FjaGVkSW1hZ2UgPSBudWxscHRyOworICAgIG1fc2VsZWN0ZWRJbWFnZVZhbHVlID0gbnVs
bHB0cjsKK30KKworUmVmPENTU0ltYWdlU2V0VmFsdWU+IENTU0ltYWdlU2V0VmFsdWU6OmltYWdl
U2V0V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkK
K3sKKyAgICBSZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gcmVzdWx0ID0gQ1NTSW1hZ2VTZXRWYWx1ZTo6
Y3JlYXRlKCk7CisgICAgc2l6ZV90IGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpICsgMSA8IGxlbmd0aDsgaSArPSAyKSB7CisgICAgICAgIHJlc3VsdC0+
YXBwZW5kKGJ1aWxkZXJTdGF0ZS5yZXNvbHZlSW1hZ2VTdHlsZXMoKml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soaSkpKTsKKyAgICAgICAgcmVzdWx0LT5hcHBlbmQoKml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soaSArIDEpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBTdHJpbmcgQ1NT
SW1hZ2VTZXRWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CkBAIC0xNTUsOSArMTYyLDcgQEAg
U3RyaW5nIENTU0ltYWdlU2V0VmFsdWU6OmN1c3RvbUNTU1RleHQoKQogCiBib29sIENTU0ltYWdl
U2V0VmFsdWU6OnRyYXZlcnNlU3VicmVzb3VyY2VzKGNvbnN0IFdURjo6RnVuY3Rpb248Ym9vbCAo
Y29uc3QgQ2FjaGVkUmVzb3VyY2UmKT4mIGhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2Nh
Y2hlZEltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGhhbmRsZXIoKm1f
Y2FjaGVkSW1hZ2UpOworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2VWYWx1ZSAmJiBtX3NlbGVj
dGVkSW1hZ2VWYWx1ZS0+dHJhdmVyc2VTdWJyZXNvdXJjZXMoaGFuZGxlcik7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUu
aAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNTMgKzI5LDU0IEBACiAjaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlck9wdGlvbnMuaCIKICNp
bmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FjaGVkSW1hZ2U7CiBjbGFzcyBDYWNoZWRSZXNvdXJj
ZUxvYWRlcjsKK2NsYXNzIENTU0ltYWdlVmFsdWU7CiBjbGFzcyBEb2N1bWVudDsKIAorbmFtZXNw
YWNlIFN0eWxlIHsKK2NsYXNzIEJ1aWxkZXJTdGF0ZTsKK30KKworc3RydWN0IEltYWdlV2l0aFNj
YWxlIHsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOworICAgIGZsb2F0IHNjYWxlRmFjdG9y
IHsgMSB9OworfTsKKwogY2xhc3MgQ1NTSW1hZ2VTZXRWYWx1ZSBmaW5hbCA6IHB1YmxpYyBDU1NW
YWx1ZUxpc3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gY3Jl
YXRlKExvYWRlZEZyb21PcGFxdWVTb3VyY2UgbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ltYWdlU2V0VmFsdWUobG9hZGVkRnJv
bU9wYXF1ZVNvdXJjZSkpOwotICAgIH0KKyAgICBzdGF0aWMgUmVmPENTU0ltYWdlU2V0VmFsdWU+
IGNyZWF0ZSgpOwogICAgIH5DU1NJbWFnZVNldFZhbHVlKCk7CiAKLSAgICBzdGQ6OnBhaXI8Q2Fj
aGVkSW1hZ2UqLCBmbG9hdD4gIGxvYWRCZXN0Rml0SW1hZ2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXIm
LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKLSAgICBDYWNoZWRJbWFnZSogY2FjaGVk
SW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEltYWdlLmdldCgpOyB9CisgICAgSW1hZ2VX
aXRoU2NhbGUgc2VsZWN0QmVzdEZpdEltYWdlKGNvbnN0IERvY3VtZW50Jik7CisgICAgQ2FjaGVk
SW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3Q7CiAKICAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4dCgp
IGNvbnN0OwogCi0gICAgc3RydWN0IEltYWdlV2l0aFNjYWxlIHsKLSAgICAgICAgVVJMIGltYWdl
VVJMOwotICAgICAgICBmbG9hdCBzY2FsZUZhY3RvcjsKLSAgICB9OwotCiAgICAgYm9vbCB0cmF2
ZXJzZVN1YnJlc291cmNlcyhjb25zdCBXVEY6OkZ1bmN0aW9uPGJvb2wgKGNvbnN0IENhY2hlZFJl
c291cmNlJik+JiBoYW5kbGVyKSBjb25zdDsKIAogICAgIHZvaWQgdXBkYXRlRGV2aWNlU2NhbGVG
YWN0b3IoY29uc3QgRG9jdW1lbnQmKTsKIAotICAgIFVSTCBiZXN0SW1hZ2VGb3JTY2FsZUZhY3Rv
clVSTCgpIHsgcmV0dXJuIGJlc3RJbWFnZUZvclNjYWxlRmFjdG9yKCkuaW1hZ2VVUkw7IH0KKyAg
ICBSZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gaW1hZ2VTZXRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VXaXRoU2NhbGUgYmVzdElt
YWdlRm9yU2NhbGVGYWN0b3IoKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDU1NJbWFnZVNl
dFZhbHVlKExvYWRlZEZyb21PcGFxdWVTb3VyY2UpOworICAgIENTU0ltYWdlU2V0VmFsdWUoKTsK
IAogICAgIHZvaWQgZmlsbEltYWdlU2V0KCk7CiAgICAgc3RhdGljIGlubGluZSBib29sIGNvbXBh
cmVCeVNjYWxlRmFjdG9yKEltYWdlV2l0aFNjYWxlIGZpcnN0LCBJbWFnZVdpdGhTY2FsZSBzZWNv
bmQpIHsgcmV0dXJuIGZpcnN0LnNjYWxlRmFjdG9yIDwgc2Vjb25kLnNjYWxlRmFjdG9yOyB9CiAK
LSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRJbWFnZT4gbV9jYWNoZWRJbWFnZTsKKyAg
ICBSZWZQdHI8Q1NTVmFsdWU+IG1fc2VsZWN0ZWRJbWFnZVZhbHVlOwogICAgIGJvb2wgbV9hY2Nl
c3NlZEJlc3RGaXRJbWFnZSB7IGZhbHNlIH07Ci0gICAgZmxvYXQgbV9iZXN0Rml0SW1hZ2VTY2Fs
ZUZhY3RvciB7IDEgfTsKKyAgICBJbWFnZVdpdGhTY2FsZSBtX2Jlc3RGaXRJbWFnZTsKICAgICBm
bG9hdCBtX2RldmljZVNjYWxlRmFjdG9yIHsgMSB9OwotCiAgICAgVmVjdG9yPEltYWdlV2l0aFNj
YWxlPiBtX2ltYWdlc0luU2V0OwotICAgIExvYWRlZEZyb21PcGFxdWVTb3VyY2UgbV9sb2FkZWRG
cm9tT3BhcXVlU291cmNlIHsgTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6Tm8gfTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UHJvcGVydHlQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjE1MSw3ICsyMTUxLDcgQEAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZQogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUN1cnNvcihDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgYm9vbCBpblF1aXJr
c01vZGUpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdDsKLSAgICB3aGlsZSAoUmVm
UHRyPENTU1ZhbHVlPiBpbWFnZSA9IGNvbnN1bWVJbWFnZShyYW5nZSwgY29udGV4dCwgQ29uc3Vt
ZUdlbmVyYXRlZEltYWdlOjpGb3JiaWQpKSB7CisgICAgd2hpbGUgKFJlZlB0cjxDU1NWYWx1ZT4g
aW1hZ2UgPSBjb25zdW1lSW1hZ2UocmFuZ2UsIGNvbnRleHQsIHsgQWxsb3dlZEltYWdlVHlwZTo6
VVJMRnVuY3Rpb24sIEFsbG93ZWRJbWFnZVR5cGU6OkltYWdlU2V0IH0pKSB7CiAgICAgICAgIGRv
dWJsZSBudW07CiAgICAgICAgIEludFBvaW50IGhvdFNwb3QoLTEsIC0xKTsKICAgICAgICAgYm9v
bCBob3RTcG90U3BlY2lmaWVkID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCShyZXZpc2lvbiAy
NTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NzksMjQgKzE0NzksMTYgQEAgc3RhdGljIFJl
ZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUdlbmVyYXRlZAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXN0YXRpYyBTdHJpbmdWaWV3IGNvbnN1bWVVcmxPclN0cmluZ0FzU3RyaW5nVmlldyhDU1NQYXJz
ZXJUb2tlblJhbmdlJiBhcmdzKQotewotICAgIGlmIChhcmdzLnBlZWsoKS50eXBlKCkgPT0gU3Ry
aW5nVG9rZW4pCi0gICAgICAgIHJldHVybiBhcmdzLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNl
KCkudmFsdWUoKTsKLSAgICByZXR1cm4gY29uc3VtZVVybEFzU3RyaW5nVmlldyhhcmdzKTsKLX0K
LQotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlU2V0KENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQorc3RhdGljIFJl
ZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlU2V0KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0LCBPcHRpb25TZXQ8QWxsb3dlZEltYWdl
VHlwZT4gQWxsb3dlZEltYWdlVHlwZSkKIHsKICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdl
Q29weSA9IHJhbmdlOwogICAgIENTU1BhcnNlclRva2VuUmFuZ2UgYXJncyA9IGNvbnN1bWVGdW5j
dGlvbihyYW5nZUNvcHkpOwotICAgIFJlZlB0cjxDU1NJbWFnZVNldFZhbHVlPiBpbWFnZVNldCA9
IENTU0ltYWdlU2V0VmFsdWU6OmNyZWF0ZShjb250ZXh0LmlzQ29udGVudE9wYXF1ZSA/IExvYWRl
ZEZyb21PcGFxdWVTb3VyY2U6OlllcyA6IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6Ok5vKTsKKyAg
ICBSZWZQdHI8Q1NTSW1hZ2VTZXRWYWx1ZT4gaW1hZ2VTZXQgPSBDU1NJbWFnZVNldFZhbHVlOjpj
cmVhdGUoKTsKICAgICBkbyB7Ci0gICAgICAgIEF0b21TdHJpbmcgdXJsVmFsdWUgPSBjb25zdW1l
VXJsT3JTdHJpbmdBc1N0cmluZ1ZpZXcoYXJncykudG9BdG9tU3RyaW5nKCk7Ci0gICAgICAgIGlm
ICh1cmxWYWx1ZS5pc051bGwoKSkKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBpbWFnZSA9IGNv
bnN1bWVJbWFnZShhcmdzLCBjb250ZXh0LCAoQWxsb3dlZEltYWdlVHlwZSB8IEFsbG93ZWRJbWFn
ZVR5cGU6OlJhd1N0cmluZ0FzVVJMKSAtIEFsbG93ZWRJbWFnZVR5cGU6OkltYWdlU2V0KTsKKyAg
ICAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAg
IFJlZlB0cjxDU1NWYWx1ZT4gaW1hZ2UgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY29tcGxldGVV
UkwoY29udGV4dCwgdXJsVmFsdWUpLCBjb250ZXh0LmlzQ29udGVudE9wYXF1ZSA/IExvYWRlZEZy
b21PcGFxdWVTb3VyY2U6OlllcyA6IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6Ok5vKTsKICAgICAg
ICAgaW1hZ2VTZXQtPmFwcGVuZChpbWFnZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgICAgICBj
b25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSBhcmdzLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNw
YWNlKCk7CkBAIC0xNzExLDE5ICsxNzAzLDI1IEBAIFJlZlB0cjxDU1NTaGFkb3dWYWx1ZT4gY29u
c3VtZVNpbmdsZVNoYWQKICAgICByZXR1cm4gQ1NTU2hhZG93VmFsdWU6OmNyZWF0ZShXVEZNb3Zl
KGhvcml6b250YWxPZmZzZXQpLCBXVEZNb3ZlKHZlcnRpY2FsT2Zmc2V0KSwgV1RGTW92ZShibHVy
UmFkaXVzKSwgV1RGTW92ZShzcHJlYWREaXN0YW5jZSksIFdURk1vdmUoc3R5bGUpLCBXVEZNb3Zl
KGNvbG9yKSk7CiB9CiAKLVJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJDb250ZXh0IGNvbnRleHQsIENvbnN1bWVHZW5lcmF0
ZWRJbWFnZSBnZW5lcmF0ZWRJbWFnZSkKK1JlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJDb250ZXh0IGNvbnRleHQsIE9wdGlv
blNldDxBbGxvd2VkSW1hZ2VUeXBlPiBBbGxvd2VkSW1hZ2VUeXBlKQogewotICAgIEF0b21TdHJp
bmcgdXJpID0gY29uc3VtZVVybEFzU3RyaW5nVmlldyhyYW5nZSkudG9BdG9tU3RyaW5nKCk7Ci0g
ICAgaWYgKCF1cmkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBDU1NJbWFnZVZhbHVlOjpjcmVh
dGUoY29tcGxldGVVUkwoY29udGV4dCwgdXJpKSwgY29udGV4dC5pc0NvbnRlbnRPcGFxdWUgPyBM
b2FkZWRGcm9tT3BhcXVlU291cmNlOjpZZXMgOiBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpObyk7
CisgICAgaWYgKChyYW5nZS5wZWVrKCkudHlwZSgpID09IFN0cmluZ1Rva2VuKSAmJiAoQWxsb3dl
ZEltYWdlVHlwZSAmIEFsbG93ZWRJbWFnZVR5cGU6OlJhd1N0cmluZ0FzVVJMKSkKKyAgICAgICAg
cmV0dXJuIENTU0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTChjb250ZXh0LCByYW5nZS5j
b25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLnZhbHVlKCkudG9BdG9tU3RyaW5nKCkpLCBjb250
ZXh0LmlzQ29udGVudE9wYXF1ZSA/IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6OlllcyA6IExvYWRl
ZEZyb21PcGFxdWVTb3VyY2U6Ok5vKTsKIAogICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpID09
IEZ1bmN0aW9uVG9rZW4pIHsKICAgICAgICAgQ1NTVmFsdWVJRCBpZCA9IHJhbmdlLnBlZWsoKS5m
dW5jdGlvbklkKCk7Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdEltYWdlU2V0IHx8
IGlkID09IENTU1ZhbHVlSW1hZ2VTZXQpCi0gICAgICAgICAgICByZXR1cm4gY29uc3VtZUltYWdl
U2V0KHJhbmdlLCBjb250ZXh0KTsKLSAgICAgICAgaWYgKGdlbmVyYXRlZEltYWdlID09IENvbnN1
bWVHZW5lcmF0ZWRJbWFnZTo6QWxsb3cgJiYgaXNHZW5lcmF0ZWRJbWFnZShpZCkpCisgICAgICAg
IGlmICgoQWxsb3dlZEltYWdlVHlwZSAmIEFsbG93ZWRJbWFnZVR5cGU6OkltYWdlU2V0KSAmJiAo
aWQgPT0gQ1NTVmFsdWVXZWJraXRJbWFnZVNldCB8fCBpZCA9PSBDU1NWYWx1ZUltYWdlU2V0KSkK
KyAgICAgICAgICAgIHJldHVybiBjb25zdW1lSW1hZ2VTZXQocmFuZ2UsIGNvbnRleHQsIEFsbG93
ZWRJbWFnZVR5cGUpOworICAgICAgICBpZiAoKEFsbG93ZWRJbWFnZVR5cGUgJiBBbGxvd2VkSW1h
Z2VUeXBlOjpHZW5lcmF0ZWRJbWFnZSkgJiYgaXNHZW5lcmF0ZWRJbWFnZShpZCkpCiAgICAgICAg
ICAgICByZXR1cm4gY29uc3VtZUdlbmVyYXRlZEltYWdlKHJhbmdlLCBjb250ZXh0KTsKICAgICB9
CisKKyAgICBpZiAoQWxsb3dlZEltYWdlVHlwZSAmIEFsbG93ZWRJbWFnZVR5cGU6OlVSTEZ1bmN0
aW9uKSB7CisgICAgICAgIGF1dG8gdXJpID0gY29uc3VtZVVybEFzU3RyaW5nVmlldyhyYW5nZSk7
CisgICAgICAgIGlmICghdXJpLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIENTU0ltYWdl
VmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTChjb250ZXh0LCB1cmkudG9BdG9tU3RyaW5nKCkpLCBj
b250ZXh0LmlzQ29udGVudE9wYXF1ZSA/IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6OlllcyA6IExv
YWRlZEZyb21PcGFxdWVTb3VyY2U6Ok5vKTsKKyAgICB9CisKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VySGVscGVycy5oCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw2ICszNiw3IEBACiAjaW5jbHVkZSAiQ1NTU2hhZG93VmFsdWUuaCIKICNpbmNsdWRlICJDU1NW
YWx1ZVBvb2wuaCIKICNpbmNsdWRlICJMZW5ndGguaCIgLy8gRm9yIFZhbHVlUmFuZ2UKKyNpbmNs
dWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODksMTIg
KzkwLDE1IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0aW8KIGJvb2wg
Y29uc3VtZVBvc2l0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0
bGVzc1F1aXJrLCBQb3NpdGlvblN5bnRheCwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgcmVz
dWx0WCwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgcmVzdWx0WSk7CiBib29sIGNvbnN1bWVP
bmVPclR3b1ZhbHVlZFBvc2l0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2Rl
LCBVbml0bGVzc1F1aXJrLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiByZXN1bHRYLCBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiByZXN1bHRZKTsKIAotZW51bSBjbGFzcyBDb25zdW1lR2Vu
ZXJhdGVkSW1hZ2UgewotICAgIEFsbG93LAotICAgIEZvcmJpZAorZW51bSBjbGFzcyBBbGxvd2Vk
SW1hZ2VUeXBlIDogdWludDhfdCB7CisgICAgVVJMRnVuY3Rpb24gPSAxIDw8IDAsCisgICAgUmF3
U3RyaW5nQXNVUkwgPSAxIDw8IDEsCisgICAgSW1hZ2VTZXQgPSAxIDw8IDIsCisgICAgR2VuZXJh
dGVkSW1hZ2UgPSAxIDw8IDMKIH07CiAKLVJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlKENT
U1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJDb250ZXh0LCBDb25zdW1lR2VuZXJhdGVkSW1h
Z2UgPSBDb25zdW1lR2VuZXJhdGVkSW1hZ2U6OkFsbG93KTsKK1JlZlB0cjxDU1NWYWx1ZT4gY29u
c3VtZUltYWdlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJDb250ZXh0LCBPcHRpb25T
ZXQ8QWxsb3dlZEltYWdlVHlwZT4gPSB7IEFsbG93ZWRJbWFnZVR5cGU6OlVSTEZ1bmN0aW9uLCBB
bGxvd2VkSW1hZ2VUeXBlOjpJbWFnZVNldCwgQWxsb3dlZEltYWdlVHlwZTo6R2VuZXJhdGVkSW1h
Z2UgfSk7CisKIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlT3JOb25lKENTU1BhcnNlclRv
a2VuUmFuZ2UmLCBDU1NQYXJzZXJDb250ZXh0KTsKIAogZW51bSBjbGFzcyBBbGxvd2VkRmlsdGVy
RnVuY3Rpb25zIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3Bl
cnR5QW5pbWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMzLDYgKzMzMywxMiBAQCBzdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUlt
YWdlPiBibGVuZEZ1CiAgICAgaWYgKCFmcm9tIHx8ICF0bykKICAgICAgICAgcmV0dXJuIHRvOwog
CisgICAgZnJvbSA9IGZyb20tPnNlbGVjdGVkSW1hZ2UoKTsKKyAgICB0byA9IHRvLT5zZWxlY3Rl
ZEltYWdlKCk7CisKKyAgICBpZiAoIWZyb20gfHwgIXRvKQorICAgICAgICByZXR1cm4gdG87ICAg
IAorCiAgICAgLy8gQW5pbWF0aW9uIGJldHdlZW4gdHdvIGdlbmVyYXRlZCBpbWFnZXMuIENyb3Nz
IGZhZGUgZm9yIGFsbCBvdGhlciBjYXNlcy4KICAgICBpZiAoaXM8U3R5bGVHZW5lcmF0ZWRJbWFn
ZT4oKmZyb20pICYmIGlzPFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCp0bykpIHsKICAgICAgICAgQ1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVyYXRlZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJh
dGVkSW1hZ2U+KCpmcm9tKS5pbWFnZVZhbHVlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDI1NDgwOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk2Miw3ICs5NjIsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpwYWludEZpbGxMYXllCiAKICAgICAgICAgICAgIGF1dG8gZHJhd1Jlc3VsdCA9IGNvbnRleHQu
ZHJhd1RpbGVkSW1hZ2UoKmltYWdlLCBnZW9tZXRyeS5kZXN0UmVjdCgpLCB0b0xheW91dFBvaW50
KGdlb21ldHJ5LnJlbGF0aXZlUGhhc2UoKSksIGdlb21ldHJ5LnRpbGVTaXplKCksIGdlb21ldHJ5
LnNwYWNlU2l6ZSgpLCBvcHRpb25zKTsKICAgICAgICAgICAgIGlmIChkcmF3UmVzdWx0ID09IElt
YWdlRHJhd1Jlc3VsdDo6RGlkUmVxdWVzdERlY29kaW5nKSB7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKGJnSW1hZ2UtPmlzQ2FjaGVkSW1hZ2UoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGJn
SW1hZ2UtPmhhc0NhY2hlZEltYWdlKCkpOwogICAgICAgICAgICAgICAgIGJnSW1hZ2UtPmNhY2hl
ZEltYWdlKCktPmFkZENsaWVudFdhaXRpbmdGb3JBc3luY0RlY29kaW5nKCp0aGlzKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwCShyZXZpc2lvbiAy
NTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZVN0
eWxlSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIFJlbmRlckltYWdl
UmVzb3VyY2VTdHlsZUltYWdlOjpSZW5kZXJJbWEKIAogdm9pZCBSZW5kZXJJbWFnZVJlc291cmNl
U3R5bGVJbWFnZTo6aW5pdGlhbGl6ZShSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKIHsKLSAgICBS
ZW5kZXJJbWFnZVJlc291cmNlOjppbml0aWFsaXplKHJlbmRlcmVyLCBtX3N0eWxlSW1hZ2UtPmlz
Q2FjaGVkSW1hZ2UoKSA/IG1fc3R5bGVJbWFnZS5nZXQoKS5jYWNoZWRJbWFnZSgpIDogbnVsbHB0
cik7CisgICAgUmVuZGVySW1hZ2VSZXNvdXJjZTo6aW5pdGlhbGl6ZShyZW5kZXJlciwgbV9zdHls
ZUltYWdlLT5oYXNDYWNoZWRJbWFnZSgpID8gbV9zdHlsZUltYWdlLmdldCgpLmNhY2hlZEltYWdl
KCkgOiBudWxscHRyKTsKICAgICBtX3N0eWxlSW1hZ2UtPmFkZENsaWVudCh0aGlzLT5yZW5kZXJl
cigpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA3LDcgKzIx
MDcsNyBAQCBzdGF0aWMgYm9vbCBjYW5EaXJlY3RseUNvbXBvc2l0ZUJhY2tncm91CiAKICAgICAv
LyBGSVhNRTogc3VwcG9ydCBncmFkaWVudHMgd2l0aCBpc0dlbmVyYXRlZEltYWdlLgogICAgIGF1
dG8qIHN0eWxlSW1hZ2UgPSBmaWxsTGF5ZXIuaW1hZ2UoKTsKLSAgICBpZiAoIXN0eWxlSW1hZ2Ut
PmlzQ2FjaGVkSW1hZ2UoKSkKKyAgICBpZiAoIXN0eWxlSW1hZ2UtPmhhc0NhY2hlZEltYWdlKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8qIGltYWdlID0gc3R5bGVJbWFnZS0+
Y2FjaGVkSW1hZ2UoKS0+aW1hZ2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9TaGFwZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU2hhcGVWYWx1ZS5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NyArMzUsNyBAQCBib29sIFNoYXBlVmFsdWU6OmlzSW1hZ2VWYWxpZCgpIGNvbnN0CiB7CiAgICAg
aWYgKCFtX2ltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1faW1hZ2UtPmlz
Q2FjaGVkSW1hZ2UoKSkgeworICAgIGlmIChtX2ltYWdlLT5oYXNDYWNoZWRJbWFnZSgpKSB7CiAg
ICAgICAgIGF1dG8qIGNhY2hlZEltYWdlID0gbV9pbWFnZS0+Y2FjaGVkSW1hZ2UoKTsKICAgICAg
ICAgcmV0dXJuIGNhY2hlZEltYWdlICYmIGNhY2hlZEltYWdlLT5oYXNJbWFnZSgpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNo
ZWRJbWFnZS5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQs
NiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2UuaCIK
IAotI2luY2x1ZGUgIkNTU0N1cnNvckltYWdlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NJbWFnZVNl
dFZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNhY2hlZElt
YWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgpAQCAtMzMsMTkgKzMxLDE5IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU3R5bGVDYWNoZWRJbWFnZTo6U3R5bGVDYWNoZWRJbWFn
ZShDU1NWYWx1ZSYgY3NzVmFsdWUpCi0gICAgOiBtX2Nzc1ZhbHVlKGNzc1ZhbHVlKQorUmVmPFN0
eWxlQ2FjaGVkSW1hZ2U+IFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShDU1NJbWFnZVZhbHVlJiBj
c3NWYWx1ZSwgZmxvYXQgc2NhbGVGYWN0b3IpCiB7Ci0gICAgQVNTRVJUKGlzPENTU0ltYWdlVmFs
dWU+KG1fY3NzVmFsdWUpIHx8IGlzPENTU0ltYWdlU2V0VmFsdWU+KG1fY3NzVmFsdWUpIHx8IGlz
PENTU0N1cnNvckltYWdlVmFsdWU+KG1fY3NzVmFsdWUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTdHlsZUNhY2hlZEltYWdlKGNzc1ZhbHVlLCBzY2FsZUZhY3RvcikpOworfQogCitTdHls
ZUNhY2hlZEltYWdlOjpTdHlsZUNhY2hlZEltYWdlKENTU0ltYWdlVmFsdWUmIGNzc1ZhbHVlLCBm
bG9hdCBzY2FsZUZhY3RvcikKKyAgICA6IG1fY3NzVmFsdWUoY3NzVmFsdWUpCisgICAgLCBtX3Nj
YWxlRmFjdG9yKHNjYWxlRmFjdG9yKQorewogICAgIG1faXNDYWNoZWRJbWFnZSA9IHRydWU7Ci0K
LSAgICAvLyBDU1NJbWFnZVZhbHVlIGRvZXNuJ3QgZ2V0IGludmFsaWRhdGVkIHNvIHdlIGNhbiBn
cmFiIHRoZSBDYWNoZWRJbWFnZSBpbW1lZGlhdGVseSBpZiBpdCBleGlzdHMuCi0gICAgaWYgKGlz
PENTU0ltYWdlVmFsdWU+KG1fY3NzVmFsdWUpKSB7Ci0gICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBk
b3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX2Nzc1ZhbHVlLmdldCgpKS5jYWNoZWRJbWFnZSgpOwot
ICAgICAgICBpZiAobV9jYWNoZWRJbWFnZSkKLSAgICAgICAgICAgIG1faXNQZW5kaW5nID0gZmFs
c2U7Ci0gICAgfQorICAgIG1fY2FjaGVkSW1hZ2UgPSBtX2Nzc1ZhbHVlLT5jYWNoZWRJbWFnZSgp
OworICAgIGlmIChtX2NhY2hlZEltYWdlKQorICAgICAgICBtX2lzUGVuZGluZyA9IGZhbHNlOwog
fQogCiBTdHlsZUNhY2hlZEltYWdlOjp+U3R5bGVDYWNoZWRJbWFnZSgpID0gZGVmYXVsdDsKQEAg
LTY4LDQxICs2NiwxNCBAQCBib29sIFN0eWxlQ2FjaGVkSW1hZ2U6Om9wZXJhdG9yPT0oY29uc3Qg
CiAKIFVSTCBTdHlsZUNhY2hlZEltYWdlOjppbWFnZVVSTCgpCiB7Ci0gICAgaWYgKGlzPENTU0lt
YWdlVmFsdWU+KG1fY3NzVmFsdWUpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VW
YWx1ZT4obV9jc3NWYWx1ZS5nZXQoKSkudXJsKCk7Ci0KLSAgICBpZiAoaXM8Q1NTSW1hZ2VTZXRW
YWx1ZT4obV9jc3NWYWx1ZSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVNldFZh
bHVlPihtX2Nzc1ZhbHVlLmdldCgpKS5iZXN0SW1hZ2VGb3JTY2FsZUZhY3RvclVSTCgpOwotCi0g
ICAgaWYgKGlzPENTU0N1cnNvckltYWdlVmFsdWU+KG1fY3NzVmFsdWUuZ2V0KCkpKQotICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZS5nZXQoKSku
aW1hZ2VVUkwoKTsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07
CisgICAgcmV0dXJuIG1fY3NzVmFsdWUtPnVybCgpOwogfQogCiB2b2lkIFN0eWxlQ2FjaGVkSW1h
Z2U6OmxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2Fk
ZXJPcHRpb25zJiBvcHRpb25zKQogewogICAgIEFTU0VSVChtX2lzUGVuZGluZyk7CiAgICAgbV9p
c1BlbmRpbmcgPSBmYWxzZTsKLQotICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPihtX2Nzc1ZhbHVl
KSkgewotICAgICAgICBhdXRvJiBpbWFnZVZhbHVlID0gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4o
bV9jc3NWYWx1ZS5nZXQoKSk7Ci0gICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBpbWFnZVZhbHVlLmxv
YWRJbWFnZShsb2FkZXIsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KG1fY3NzVmFsdWUpKSB7Ci0gICAgICAgIGF1dG8mIGlt
YWdlU2V0VmFsdWUgPSBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPihtX2Nzc1ZhbHVlLmdldCgp
KTsKLSAgICAgICAgc3RkOjp0aWUobV9jYWNoZWRJbWFnZSwgbV9zY2FsZUZhY3RvcikgPSBpbWFn
ZVNldFZhbHVlLmxvYWRCZXN0Rml0SW1hZ2UobG9hZGVyLCBvcHRpb25zKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChpczxDU1NDdXJzb3JJbWFnZVZhbHVlPihtX2Nzc1ZhbHVl
LmdldCgpKSkgewotICAgICAgICBhdXRvJiBjdXJzb3JWYWx1ZSA9IGRvd25jYXN0PENTU0N1cnNv
ckltYWdlVmFsdWU+KG1fY3NzVmFsdWUuZ2V0KCkpOwotICAgICAgICBzdGQ6OnRpZShtX2NhY2hl
ZEltYWdlLCBtX3NjYWxlRmFjdG9yKSA9IGN1cnNvclZhbHVlLmxvYWRJbWFnZShsb2FkZXIsIG9w
dGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG1fY2FjaGVkSW1hZ2UgPSBtX2Nz
c1ZhbHVlLT5sb2FkSW1hZ2UobG9hZGVyLCBvcHRpb25zKTsKIH0KIAogQ2FjaGVkSW1hZ2UqIFN0
eWxlQ2FjaGVkSW1hZ2U6OmNhY2hlZEltYWdlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuaAkocmV2aXNpb24gMjU0
ODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIENTU1ZhbHVlOworY2xhc3MgQ1NTSW1hZ2VWYWx1ZTsKIGNsYXNzIENhY2hlZElt
YWdlOwogY2xhc3MgRG9jdW1lbnQ7CiAKIGNsYXNzIFN0eWxlQ2FjaGVkSW1hZ2UgZmluYWwgOiBw
dWJsaWMgU3R5bGVJbWFnZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxTdHlsZUNhY2hlZEltYWdlPiBjcmVhdGUoQ1NTVmFsdWUmIGNzc1Zh
bHVlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFN0eWxlQ2FjaGVkSW1hZ2UoY3NzVmFsdWUpKTsg
fQorICAgIHN0YXRpYyBSZWY8U3R5bGVDYWNoZWRJbWFnZT4gY3JlYXRlKENTU0ltYWdlVmFsdWUm
IGNzc1ZhbHVlLCBmbG9hdCBzY2FsZUZhY3RvciA9IDEpOwogICAgIHZpcnR1YWwgflN0eWxlQ2Fj
aGVkSW1hZ2UoKTsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZUltYWdlJiBvdGhl
cikgY29uc3QgZmluYWw7CkBAIC02NCwxMCArNjUsMTAgQEAgcHVibGljOgogICAgIGJvb2wga25v
d25Ub0JlT3BhcXVlKGNvbnN0IFJlbmRlckVsZW1lbnQqKSBjb25zdCBmaW5hbDsKIAogcHJpdmF0
ZToKLSAgICBTdHlsZUNhY2hlZEltYWdlKENTU1ZhbHVlJik7CisgICAgU3R5bGVDYWNoZWRJbWFn
ZShDU1NJbWFnZVZhbHVlJiwgZmxvYXQpOwogICAgIFVSTCBpbWFnZVVSTCgpOwogCi0gICAgUmVm
PENTU1ZhbHVlPiBtX2Nzc1ZhbHVlOworICAgIFJlZjxDU1NJbWFnZVZhbHVlPiBtX2Nzc1ZhbHVl
OwogICAgIGJvb2wgbV9pc1BlbmRpbmcgeyB0cnVlIH07CiAgICAgbXV0YWJsZSBmbG9hdCBtX3Nj
YWxlRmFjdG9yIHsgMSB9OwogICAgIG11dGFibGUgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
SW1hZ2U+IG1fY2FjaGVkSW1hZ2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvU3R5bGVDdXJzb3JJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1cnNvckltYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlzdG8g
KGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyICht
dWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUtMjAwOCwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTm9h
bSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyAgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU3R5bGVDdXJzb3JJbWFnZS5oIgorCisjaW5jbHVkZSAiQ1NTQ3Vyc29ySW1hZ2VW
YWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltYWdlU2V0VmFsdWUuaCIKKyNpbmNsdWRlICJDYWNoZWRJ
bWFnZS5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWY8U3R5bGVDdXJzb3JJbWFnZT4gU3R5bGVD
dXJzb3JJbWFnZTo6Y3JlYXRlKENTU0N1cnNvckltYWdlVmFsdWUmIGNzc1ZhbHVlKQoreyAKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHlsZUN1cnNvckltYWdlKGNzc1ZhbHVlKSk7IAorfQor
Citib29sIFN0eWxlQ3Vyc29ySW1hZ2U6Om9wZXJhdG9yPT0oY29uc3QgU3R5bGVJbWFnZSYgb3Ro
ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzPFN0eWxlQ3Vyc29ySW1hZ2U+KG90aGVyKSAmJiBl
cXVhbHMoZG93bmNhc3Q8U3R5bGVDdXJzb3JJbWFnZT4ob3RoZXIpKTsKK30KKworUmVmPENTU1Zh
bHVlPiBTdHlsZUN1cnNvckltYWdlOjpjc3NWYWx1ZSgpIGNvbnN0Cit7IAorICAgIHJldHVybiBt
X2Nzc1ZhbHVlLmNvcHlSZWYoKTsgCit9CisKK1N0eWxlQ3Vyc29ySW1hZ2U6OlN0eWxlQ3Vyc29y
SW1hZ2UoQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSYgY3NzVmFsdWUpCisgICAgOiBtX2Nzc1ZhbHVlKGNz
c1ZhbHVlKQoreworICAgIG1faXNDdXJzb3JJbWFnZSA9IHRydWU7Cit9CisKK1N0eWxlQ3Vyc29y
SW1hZ2U6On5TdHlsZUN1cnNvckltYWdlKCkgPSBkZWZhdWx0OworCitJbWFnZVdpdGhTY2FsZSBT
dHlsZUN1cnNvckltYWdlOjpzZWxlY3RCZXN0Rml0SW1hZ2UoY29uc3QgRG9jdW1lbnQmIGRvY3Vt
ZW50KSBjb25zdAoreworICAgIHJldHVybiBtX2Nzc1ZhbHVlLT5zZWxlY3RCZXN0Rml0SW1hZ2Uo
ZG9jdW1lbnQpOworfQorCit2b2lkIFN0eWxlQ3Vyc29ySW1hZ2U6OnNldENvbnRhaW5lckNvbnRl
eHRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmxvYXRT
aXplJiBjb250YWluZXJTaXplLCBmbG9hdCBjb250YWluZXJab29tKQoreworICAgIGlmICghaGFz
Q2FjaGVkSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhY2hlZEltYWdlKCktPnNldENv
bnRhaW5lckNvbnRleHRGb3JDbGllbnQocmVuZGVyZXIsIExheW91dFNpemUoY29udGFpbmVyU2l6
ZSksIGNvbnRhaW5lclpvb20sIG1fY3NzVmFsdWUtPmltYWdlVVJMKCkpOworfQorCit9CgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXJz
b3JJbWFnZS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAj
IworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1cnNvckltYWdlLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAw
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUtMjAw
OCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyAgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlN0eWxlTXVsdGlJbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIENTU0N1cnNvckltYWdlVmFsdWU7CisKK3N0cnVjdCBJbWFnZVdpdGhTY2FsZTsKKwor
Y2xhc3MgU3R5bGVDdXJzb3JJbWFnZSBmaW5hbCA6IHB1YmxpYyBTdHlsZU11bHRpSW1hZ2Ugewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U3R5
bGVDdXJzb3JJbWFnZT4gY3JlYXRlKENTU0N1cnNvckltYWdlVmFsdWUmKTsKKyAgICB2aXJ0dWFs
IH5TdHlsZUN1cnNvckltYWdlKCk7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlSW1h
Z2UmIG90aGVyKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNldENvbnRhaW5lckNvbnRl
eHRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmxvYXRT
aXplJiBjb250YWluZXJTaXplLCBmbG9hdCBjb250YWluZXJab29tKSBmaW5hbDsKKyAgICBSZWY8
Q1NTVmFsdWU+IGNzc1ZhbHVlKCkgY29uc3QgZmluYWw7CisgICAgSW1hZ2VXaXRoU2NhbGUgc2Vs
ZWN0QmVzdEZpdEltYWdlKGNvbnN0IERvY3VtZW50JikgY29uc3QgZmluYWw7CisKKyAgICBleHBs
aWNpdCBTdHlsZUN1cnNvckltYWdlKENTU0N1cnNvckltYWdlVmFsdWUmKTsKKyAgICBSZWY8Q1NT
Q3Vyc29ySW1hZ2VWYWx1ZT4gbV9jc3NWYWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19TVFlMRV9JTUFHRShTdHlsZUN1cnNvckltYWdl
LCBpc0N1cnNvckltYWdlKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuaApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhl
Y3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaAkocmV2
aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1h
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTggKzY3LDI4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGZsb2F0IGltYWdlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiAxOyB9CiAgICAgdmly
dHVhbCBib29sIGtub3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJFbGVtZW50KikgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3QgeyByZXR1cm4g
MDsgfQorICAgIHZpcnR1YWwgU3R5bGVJbWFnZSogc2VsZWN0ZWRJbWFnZSgpIHsgcmV0dXJuIHRo
aXM7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFN0eWxlSW1hZ2UqIHNlbGVjdGVkSW1hZ2UoKSBjb25z
dCB7IHJldHVybiB0aGlzOyB9CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDYWNoZWRJbWFn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDYWNoZWRJbWFnZTsgfQogICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCBpc0dlbmVyYXRlZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pc0dlbmVyYXRlZEltYWdl
OyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ3Vyc29ySW1hZ2UoKSBjb25zdCB7IHJldHVy
biBtX2lzQ3Vyc29ySW1hZ2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNJbWFnZVNldCgp
IGNvbnN0IHsgcmV0dXJuIG1faXNJbWFnZVNldDsgfQorCisgICAgYm9vbCBoYXNDYWNoZWRJbWFn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDYWNoZWRJbWFnZSB8fCBzZWxlY3RlZEltYWdlKCktPmlz
Q2FjaGVkSW1hZ2UoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgU3R5bGVJbWFnZSgpCiAgICAgICAg
IDogbV9pc0NhY2hlZEltYWdlKGZhbHNlKQogICAgICAgICAsIG1faXNHZW5lcmF0ZWRJbWFnZShm
YWxzZSkKKyAgICAgICAgLCBtX2lzSW1hZ2VTZXQoZmFsc2UpCisgICAgICAgICwgbV9pc0N1cnNv
ckltYWdlKGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgYm9vbCBtX2lzQ2FjaGVkSW1hZ2UgOiAx
OwogICAgIGJvb2wgbV9pc0dlbmVyYXRlZEltYWdlIDogMTsKKyAgICBib29sIG1faXNJbWFnZVNl
dCA6IDE7CisgICAgYm9vbCBtX2lzQ3Vyc29ySW1hZ2UgOiAxOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1h
Z2VTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
dHlsZUltYWdlU2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU3R5bGVJbWFnZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQor
ICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQor
ICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICog
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LTIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIE5vYW0gUm9zZW50aGFsIChub2FtQHdl
YmtpdC5vcmcpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3R5bGVJbWFnZVNl
dC5oIgorCisjaW5jbHVkZSAiQ1NTSW1hZ2VTZXRWYWx1ZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1JlZjxTdHlsZUltYWdlU2V0PiBTdHlsZUltYWdlU2V0OjpjcmVhdGUoQ1NTSW1hZ2VT
ZXRWYWx1ZSYgY3NzVmFsdWUpCit7IAorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0eWxlSW1h
Z2VTZXQoY3NzVmFsdWUpKTsKK30KKworU3R5bGVJbWFnZVNldDo6U3R5bGVJbWFnZVNldChDU1NJ
bWFnZVNldFZhbHVlJiBjc3NWYWx1ZSkKKyAgICA6IG1fY3NzVmFsdWUoY3NzVmFsdWUpCit7Cisg
ICAgbV9pc0ltYWdlU2V0ID0gdHJ1ZTsKK30KKworYm9vbCBTdHlsZUltYWdlU2V0OjpvcGVyYXRv
cj09KGNvbnN0IFN0eWxlSW1hZ2UmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBpczxTdHls
ZUltYWdlU2V0PihvdGhlcikgJiYgZXF1YWxzKGRvd25jYXN0PFN0eWxlSW1hZ2VTZXQ+KG90aGVy
KSk7Cit9CisKK1N0eWxlSW1hZ2VTZXQ6On5TdHlsZUltYWdlU2V0KCkgPSBkZWZhdWx0OworCitS
ZWY8Q1NTVmFsdWU+IFN0eWxlSW1hZ2VTZXQ6OmNzc1ZhbHVlKCkgY29uc3QKK3sgCisgICAgcmV0
dXJuIG1fY3NzVmFsdWUuY29weVJlZigpOyAKK30KKworSW1hZ2VXaXRoU2NhbGUgU3R5bGVJbWFn
ZVNldDo6c2VsZWN0QmVzdEZpdEltYWdlKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9jc3NWYWx1ZS0+c2VsZWN0QmVzdEZpdEltYWdlKGRvY3VtZW50KTsK
K30KKworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1N0eWxlSW1hZ2VTZXQuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMj
IC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNldC5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlU2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDAw
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisqICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBL
b2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVl
bGxlciAobXVlbGxlckBrZGUub3JnKQorKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiBDb3B5cmlnaHQg
KEMpIDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyoKKyogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorKgorKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisqCisqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0
eWxlTXVsdGlJbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENTU0ltYWdl
U2V0VmFsdWU7CisKK2NsYXNzIFN0eWxlSW1hZ2VTZXQgZmluYWwgOiBwdWJsaWMgU3R5bGVNdWx0
aUltYWdlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPFN0eWxlSW1hZ2VTZXQ+IGNyZWF0ZShDU1NJbWFnZVNldFZhbHVlJik7CisgICAgdmly
dHVhbCB+U3R5bGVJbWFnZVNldCgpOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZUlt
YWdlJiBvdGhlcikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgU3R5bGVJbWFnZVNl
dChDU1NJbWFnZVNldFZhbHVlJik7CisgICAgUmVmPENTU1ZhbHVlPiBjc3NWYWx1ZSgpIGNvbnN0
IGZpbmFsOworICAgIEltYWdlV2l0aFNjYWxlIHNlbGVjdEJlc3RGaXRJbWFnZShjb25zdCBEb2N1
bWVudCYpIGNvbnN0IGZpbmFsOworICAgIFJlZjxDU1NJbWFnZVNldFZhbHVlPiBtX2Nzc1ZhbHVl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X1NUWUxFX0lNQUdFKFN0eWxlSW1hZ2VTZXQsIGlzSW1hZ2VTZXQpCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNldC5oCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlTXVsdGlJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUtMjAwOCwg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJTdHlsZU11bHRpSW1hZ2UuaCIKKworI2luY2x1ZGUgIkNTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NJbWFnZVNldFZhbHVlLmgiCisjaW5jbHVkZSAi
Q1NTSW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCisjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRl
ICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3R5bGVN
dWx0aUltYWdlOjpTdHlsZU11bHRpSW1hZ2UoKSA9IGRlZmF1bHQ7CisKK1N0eWxlTXVsdGlJbWFn
ZTo6flN0eWxlTXVsdGlJbWFnZSgpID0gZGVmYXVsdDsKKworYm9vbCBTdHlsZU11bHRpSW1hZ2U6
OmVxdWFscyhjb25zdCBTdHlsZU11bHRpSW1hZ2UmIG90aGVyKSBjb25zdAoreworICAgIHJldHVy
biAoIW1faXNQZW5kaW5nICYmICFvdGhlci5tX2lzUGVuZGluZyAmJiBtX3NlbGVjdGVkSW1hZ2Uu
Z2V0KCkgPT0gb3RoZXIubV9zZWxlY3RlZEltYWdlLmdldCgpKTsKK30KKwordm9pZCBTdHlsZU11
bHRpSW1hZ2U6OmxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3Vy
Y2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKQoreworICAgIEFTU0VSVChtX2lzUGVuZGluZyk7Cisg
ICAgQVNTRVJUKGxvYWRlci5kb2N1bWVudCgpKTsKKworICAgIG1faXNQZW5kaW5nID0gZmFsc2U7
CisgICAgYXV0byBpbWFnZVdpdGhTY2FsZSA9IHNlbGVjdEJlc3RGaXRJbWFnZSgqbG9hZGVyLmRv
Y3VtZW50KCkpOworICAgIEFTU0VSVChpczxDU1NJbWFnZVZhbHVlPihpbWFnZVdpdGhTY2FsZS52
YWx1ZSkgfHwgaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oaW1hZ2VXaXRoU2NhbGUudmFsdWUp
KTsKKworICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihpbWFnZVdpdGhTY2FsZS52
YWx1ZSkpIHsKKyAgICAgICAgbV9zZWxlY3RlZEltYWdlID0gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6
Y3JlYXRlKGRvd25jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KCppbWFnZVdpdGhTY2FsZS52
YWx1ZS5nZXQoKSkpOworICAgICAgICBtX3NlbGVjdGVkSW1hZ2UtPmxvYWQobG9hZGVyLCBvcHRp
b25zKTsKKyAgICB9CisgICAgCisgICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KGltYWdlV2l0aFNj
YWxlLnZhbHVlKSkgeworICAgICAgICBtX3NlbGVjdGVkSW1hZ2UgPSBTdHlsZUNhY2hlZEltYWdl
OjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oKmltYWdlV2l0aFNjYWxlLnZhbHVlLmdl
dCgpKSwgaW1hZ2VXaXRoU2NhbGUuc2NhbGVGYWN0b3IpOworICAgICAgICBpZiAobV9zZWxlY3Rl
ZEltYWdlLT5pc1BlbmRpbmcoKSkKKyAgICAgICAgICAgIG1fc2VsZWN0ZWRJbWFnZS0+bG9hZChs
b2FkZXIsIG9wdGlvbnMpOworICAgIH0KK30KKworQ2FjaGVkSW1hZ2UqIFN0eWxlTXVsdGlJbWFn
ZTo6Y2FjaGVkSW1hZ2UoKSBjb25zdAoreworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlLT5jYWNoZWRJ
bWFnZSgpOworfQorCitXcmFwcGVkSW1hZ2VQdHIgU3R5bGVNdWx0aUltYWdlOjpkYXRhKCkgY29u
c3QKK3sKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgcmV0dXJuIG1fc2VsZWN0ZWRJbWFnZS0+ZGF0YSgpOworfQorCitib29sIFN0eWxlTXVs
dGlJbWFnZTo6Y2FuUmVuZGVyKGNvbnN0IFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBmbG9hdCBt
dWx0aXBsaWVyKSBjb25zdAoreworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UgJiYgbV9zZWxl
Y3RlZEltYWdlLT5jYW5SZW5kZXIocmVuZGVyZXIsIG11bHRpcGxpZXIpOworfQorCitib29sIFN0
eWxlTXVsdGlJbWFnZTo6aXNQZW5kaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pc1BlbmRp
bmc7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjppc0xvYWRlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fc2VsZWN0ZWRJbWFnZSAmJiBtX3NlbGVjdGVkSW1hZ2UtPmlzTG9hZGVkKCk7Cit9
CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjplcnJvck9jY3VycmVkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9zZWxlY3RlZEltYWdlICYmIG1fc2VsZWN0ZWRJbWFnZS0+ZXJyb3JPY2N1cnJlZCgp
OworfQorCitGbG9hdFNpemUgU3R5bGVNdWx0aUltYWdlOjppbWFnZVNpemUoY29uc3QgUmVuZGVy
RWxlbWVudCogcmVuZGVyZXIsIGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0Cit7CisgICAgaWYgKCFt
X3NlbGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIG1fc2VsZWN0
ZWRJbWFnZS0+aW1hZ2VTaXplKHJlbmRlcmVyLCBtdWx0aXBsaWVyKTsKK30KKworYm9vbCBTdHls
ZU11bHRpSW1hZ2U6OmltYWdlSGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fc2VsZWN0ZWRJbWFnZSAmJiBtX3NlbGVjdGVkSW1hZ2UtPmltYWdlSGFzUmVsYXRpdmVXaWR0
aCgpOworfQorCitib29sIFN0eWxlTXVsdGlJbWFnZTo6aW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2VsZWN0ZWRJbWFnZSAmJiBtX3NlbGVjdGVkSW1hZ2Ut
PmltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKTsKK30KKwordm9pZCBTdHlsZU11bHRpSW1hZ2U6OmNv
bXB1dGVJbnRyaW5zaWNEaW1lbnNpb25zKGNvbnN0IFJlbmRlckVsZW1lbnQqIGVsZW1lbnQsIExl
bmd0aCYgaW50cmluc2ljV2lkdGgsIExlbmd0aCYgaW50cmluc2ljSGVpZ2h0LCBGbG9hdFNpemUm
IGludHJpbnNpY1JhdGlvKQoreworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9zZWxlY3RlZEltYWdlLT5jb21wdXRlSW50cmluc2ljRGltZW5zaW9ucyhl
bGVtZW50LCBpbnRyaW5zaWNXaWR0aCwgaW50cmluc2ljSGVpZ2h0LCBpbnRyaW5zaWNSYXRpbyk7
Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjp1c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlICYmIG1fc2VsZWN0ZWRJbWFnZS0+dXNl
c0ltYWdlQ29udGFpbmVyU2l6ZSgpOworfQorCit2b2lkIFN0eWxlTXVsdGlJbWFnZTo6c2V0Q29u
dGFpbmVyQ29udGV4dEZvclJlbmRlcmVyKGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBj
b25zdCBGbG9hdFNpemUmIGNvbnRhaW5lclNpemUsIGZsb2F0IGNvbnRhaW5lclpvb20pCit7Cisg
ICAgaWYgKCFtX3NlbGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBtX3NlbGVjdGVk
SW1hZ2UtPnNldENvbnRhaW5lckNvbnRleHRGb3JSZW5kZXJlcihyZW5kZXJlciwgY29udGFpbmVy
U2l6ZSwgY29udGFpbmVyWm9vbSk7Cit9CisKK3ZvaWQgU3R5bGVNdWx0aUltYWdlOjphZGRDbGll
bnQoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIpCit7CisgICAgaWYgKCFtX3NlbGVjdGVkSW1hZ2Up
CisgICAgICAgIHJldHVybjsKKyAgICBtX3NlbGVjdGVkSW1hZ2UtPmFkZENsaWVudChyZW5kZXJl
cik7Cit9CisKK3ZvaWQgU3R5bGVNdWx0aUltYWdlOjpyZW1vdmVDbGllbnQoUmVuZGVyRWxlbWVu
dCogcmVuZGVyZXIpCit7CisgICAgaWYgKCFtX3NlbGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX3NlbGVjdGVkSW1hZ2UtPnJlbW92ZUNsaWVudChyZW5kZXJlcik7Cit9CisKK1Jl
ZlB0cjxJbWFnZT4gU3R5bGVNdWx0aUltYWdlOjppbWFnZShSZW5kZXJFbGVtZW50KiByZW5kZXJl
ciwgY29uc3QgRmxvYXRTaXplJiBzaXplKSBjb25zdAoreworICAgIGlmICghbV9zZWxlY3RlZElt
YWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdl
LT5pbWFnZShyZW5kZXJlciwgc2l6ZSk7Cit9CisKK2Zsb2F0IFN0eWxlTXVsdGlJbWFnZTo6aW1h
Z2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3NlbGVjdGVkSW1hZ2UpCisgICAg
ICAgIHJldHVybiAxOworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UtPmltYWdlU2NhbGVGYWN0
b3IoKTsKK30KKworYm9vbCBTdHlsZU11bHRpSW1hZ2U6Omtub3duVG9CZU9wYXF1ZShjb25zdCBS
ZW5kZXJFbGVtZW50KiByZW5kZXJlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWxlY3RlZElt
YWdlICYmIG1fc2VsZWN0ZWRJbWFnZS0+a25vd25Ub0JlT3BhcXVlKHJlbmRlcmVyKTsKK30KKwor
fQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0
eWxlTXVsdGlJbWFnZS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAs
MCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUltYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZU11bHRpSW1hZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgQW50
dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgRGly
ayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUt
MjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyAqCisqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyoKKyogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKgorKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJT
dHlsZUltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRG9jdW1lbnQ7CisK
K3N0cnVjdCBJbWFnZVdpdGhTY2FsZTsKKworY2xhc3MgU3R5bGVNdWx0aUltYWdlIDogcHVibGlj
IFN0eWxlSW1hZ2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IHZpcnR1YWwgflN0eWxlTXVsdGlJbWFnZSgpOworCitwcm90ZWN0ZWQ6CisgICAgU3R5bGVNdWx0
aUltYWdlKCk7CisgICAgYm9vbCBlcXVhbHMoY29uc3QgU3R5bGVNdWx0aUltYWdlJiBvdGhlcikg
Y29uc3Q7CisgICAgdmlydHVhbCBJbWFnZVdpdGhTY2FsZSBzZWxlY3RCZXN0Rml0SW1hZ2UoY29u
c3QgRG9jdW1lbnQmKSBjb25zdCA9IDA7CisgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlKCkg
Y29uc3QgZmluYWw7CisKK3ByaXZhdGU6CisgICAgV3JhcHBlZEltYWdlUHRyIGRhdGEoKSBjb25z
dCBmaW5hbDsKKworICAgIGJvb2wgY2FuUmVuZGVyKGNvbnN0IFJlbmRlckVsZW1lbnQqLCBmbG9h
dCBtdWx0aXBsaWVyKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzUGVuZGluZygpIGNvbnN0IGZp
bmFsOworICAgIHZvaWQgbG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciYsIGNvbnN0IFJlc291cmNl
TG9hZGVyT3B0aW9ucyYpIGZpbmFsOworICAgIGJvb2wgaXNMb2FkZWQoKSBjb25zdCBmaW5hbDsK
KyAgICBib29sIGVycm9yT2NjdXJyZWQoKSBjb25zdCBmaW5hbDsKKyAgICBGbG9hdFNpemUgaW1h
Z2VTaXplKGNvbnN0IFJlbmRlckVsZW1lbnQqLCBmbG9hdCBtdWx0aXBsaWVyKSBjb25zdCBmaW5h
bDsKKyAgICBib29sIGltYWdlSGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0IGZpbmFsOworICAgIGJv
b2wgaW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgY29tcHV0
ZUludHJpbnNpY0RpbWVuc2lvbnMoY29uc3QgUmVuZGVyRWxlbWVudCosIExlbmd0aCYgaW50cmlu
c2ljV2lkdGgsIExlbmd0aCYgaW50cmluc2ljSGVpZ2h0LCBGbG9hdFNpemUmIGludHJpbnNpY1Jh
dGlvKSBmaW5hbDsKKyAgICBib29sIHVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdCBmaW5h
bDsKKyAgICB2b2lkIHNldENvbnRhaW5lckNvbnRleHRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJF
bGVtZW50JiwgY29uc3QgRmxvYXRTaXplJiwgZmxvYXQpOworICAgIHZvaWQgYWRkQ2xpZW50KFJl
bmRlckVsZW1lbnQqKSBmaW5hbDsKKyAgICB2b2lkIHJlbW92ZUNsaWVudChSZW5kZXJFbGVtZW50
KikgZmluYWw7CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZShSZW5kZXJFbGVtZW50KiwgY29uc3Qg
RmxvYXRTaXplJikgY29uc3QgZmluYWw7CisgICAgZmxvYXQgaW1hZ2VTY2FsZUZhY3RvcigpIGNv
bnN0IGZpbmFsOworICAgIGJvb2wga25vd25Ub0JlT3BhcXVlKGNvbnN0IFJlbmRlckVsZW1lbnQq
KSBjb25zdCBmaW5hbDsKKyAgICBjb25zdCBTdHlsZUltYWdlKiBzZWxlY3RlZEltYWdlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9zZWxlY3RlZEltYWdlLmdldCgpOyB9CisgICAgU3R5bGVJbWFn
ZSogc2VsZWN0ZWRJbWFnZSgpIGZpbmFsIHsgcmV0dXJuIG1fc2VsZWN0ZWRJbWFnZS5nZXQoKTsg
fQorCisgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IG1fc2VsZWN0ZWRJbWFnZTsKKyAgICBib29sIG1f
aXNQZW5kaW5nIHsgdHJ1ZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJ
bWFnZS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0
NiwxMCBAQAogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU3R5bGVCdWls
ZGVyQ29udmVydGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUg
IlN0eWxlQ3Vyc29ySW1hZ2UuaCIKICNpbmNsdWRlICJTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgi
CiAjaW5jbHVkZSAiU3R5bGVHZW5lcmF0ZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlSW1hZ2VT
ZXQuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiV2lsbENoYW5nZURh
dGEuaCIKIApAQCAtMTMyNCwxMyArMTMyNiwxNSBAQCBpbmxpbmUgdm9pZCBCdWlsZGVyQ3VzdG9t
OjphcHBseVZhbHVlQ29uCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYnVpbGRl
clN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoZG93
bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oaXRlbS5nZXQoKSkpLCBkaWRTZXQpOwogICAg
ICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChpczxDU1NJbWFnZVNl
dFZhbHVlPihpdGVtKSkgewotICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29u
dGVudChTdHlsZUNhY2hlZEltYWdlOjpjcmVhdGUoaXRlbSksIGRpZFNldCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChpczxDU1NJbWFnZVNldFZhbHVlPihpdGVtKSkgeworICAg
ICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChTdHlsZUltYWdlU2V0Ojpj
cmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4oaXRlbS5nZXQoKSkuaW1hZ2VTZXRXaXRo
U3R5bGVzUmVzb2x2ZWQoYnVpbGRlclN0YXRlKSksIGRpZFNldCk7CiAgICAgICAgICAgICBkaWRT
ZXQgPSB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KGl0
ZW0pKSB7Ci0gICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxl
Q2FjaGVkSW1hZ2U6OmNyZWF0ZShpdGVtKSwgZGlkU2V0KTsKKyAgICAgICAgICAgIGJ1aWxkZXJT
dGF0ZS5zdHlsZSgpLnNldENvbnRlbnQoU3R5bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0
PENTU0ltYWdlVmFsdWU+KGl0ZW0uZ2V0KCkpKSwgZGlkU2V0KTsKICAgICAgICAgICAgIGRpZFNl
dCA9IHRydWU7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcAkocmV2aXNpb24gMjU0ODA4KQor
KysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw4ICs0NSwxMCBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAi
U3R5bGVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUg
IlN0eWxlQ3Vyc29ySW1hZ2UuaCIKICNpbmNsdWRlICJTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgi
CiAjaW5jbHVkZSAiU3R5bGVHZW5lcmF0ZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlSW1hZ2VT
ZXQuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1GdW5jdGlvbnMuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNzksMjEgKzgxLDM0IEBAIGJvb2wgQnVpbGRlclN0YXRlOjp1c2VTVkdab29tUnVs
ZXNGb3JMZW4KICAgICByZXR1cm4gaXM8U1ZHRWxlbWVudD4oZWxlbWVudCgpKSAmJiAhKGlzPFNW
R1NWR0VsZW1lbnQ+KCplbGVtZW50KCkpICYmIGVsZW1lbnQoKS0+cGFyZW50Tm9kZSgpKTsKIH0K
IAorUmVmPENTU1ZhbHVlPiBCdWlsZGVyU3RhdGU6OnJlc29sdmVJbWFnZVN0eWxlcyhDU1NWYWx1
ZSYgdmFsdWUpCit7CisgICAgaWYgKGlzPENTU0dyYWRpZW50VmFsdWU+KHZhbHVlKSkKKyAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PENTU0dyYWRpZW50VmFsdWU+KHZhbHVlKS5ncmFkaWVudFdpdGhT
dHlsZXNSZXNvbHZlZCgqdGhpcyk7CisKKyAgICBpZiAoaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4odmFs
dWUpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4odmFsdWUpLmlt
YWdlU2V0V2l0aFN0eWxlc1Jlc29sdmVkKCp0aGlzKTsKKworICAgIC8vIENyZWF0aW5nIGZpbHRl
ciBvcGVyYXRpb25zIGRvZXNuJ3QgY3JlYXRlIGEgbmV3IENTU1ZhbHVlIHJlZmVyZW5jZS4KKyAg
ICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpKQorICAgICAgICBkb3duY2FzdDxD
U1NGaWx0ZXJJbWFnZVZhbHVlPih2YWx1ZSkuY3JlYXRlRmlsdGVyT3BlcmF0aW9ucygqdGhpcyk7
CisKKyAgICByZXR1cm4gbWFrZVJlZih2YWx1ZSk7Cit9CisKIFJlZlB0cjxTdHlsZUltYWdlPiBC
dWlsZGVyU3RhdGU6OmNyZWF0ZVN0eWxlSW1hZ2UoQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIGlm
IChpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPih2YWx1ZSkpIHsKLSAgICAgICAgaWYgKGlzPENT
U0dyYWRpZW50VmFsdWU+KHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBTdHlsZUdlbmVyYXRl
ZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1ZT4odmFsdWUpLmdyYWRpZW50
V2l0aFN0eWxlc1Jlc29sdmVkKCp0aGlzKSk7Ci0KLSAgICAgICAgaWYgKGlzPENTU0ZpbHRlcklt
YWdlVmFsdWU+KHZhbHVlKSkgewotICAgICAgICAgICAgLy8gRmlsdGVySW1hZ2UgbmVlZHMgdG8g
Y2FsY3VsYXRlIEZpbHRlck9wZXJhdGlvbnMuCi0gICAgICAgICAgICBkb3duY2FzdDxDU1NGaWx0
ZXJJbWFnZVZhbHVlPih2YWx1ZSkuY3JlYXRlRmlsdGVyT3BlcmF0aW9ucygqdGhpcyk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2Fz
dDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPih2YWx1ZSkpOwotICAgIH0KKyAgICBpZiAoaXM8Q1NT
SW1hZ2VWYWx1ZT4odmFsdWUpKQorICAgICAgICByZXR1cm4gU3R5bGVDYWNoZWRJbWFnZTo6Y3Jl
YXRlKGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KHZhbHVlKSk7CisKKyAgICBpZiAoaXM8Q1NTQ3Vy
c29ySW1hZ2VWYWx1ZT4odmFsdWUpKQorICAgICAgICByZXR1cm4gU3R5bGVDdXJzb3JJbWFnZTo6
Y3JlYXRlKGRvd25jYXN0PENTU0N1cnNvckltYWdlVmFsdWU+KHZhbHVlKSk7CiAKLSAgICBpZiAo
aXM8Q1NTSW1hZ2VWYWx1ZT4odmFsdWUpIHx8IGlzPENTU0ltYWdlU2V0VmFsdWU+KHZhbHVlKSB8
fCBpczxDU1NDdXJzb3JJbWFnZVZhbHVlPih2YWx1ZSkpCi0gICAgICAgIHJldHVybiBTdHlsZUNh
Y2hlZEltYWdlOjpjcmVhdGUodmFsdWUpOworICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRvclZh
bHVlPih2YWx1ZSkpCisgICAgICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUo
ZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4ocmVzb2x2ZUltYWdlU3R5bGVzKHZhbHVl
KS5nZXQoKSkpOworICAgIAorICAgIGlmIChpczxDU1NJbWFnZVNldFZhbHVlPih2YWx1ZSkpCisg
ICAgICAgIHJldHVybiBTdHlsZUltYWdlU2V0OjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VTZXRW
YWx1ZT4ocmVzb2x2ZUltYWdlU3R5bGVzKHZhbHVlKS5nZXQoKSkpOwogCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmgJ
KHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDcgQEAgcHVibGljOgogICAgIGJvb2wg
dXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCkgY29uc3Q7CiAgICAgU2NvcGVPcmRpbmFsIHN0eWxl
U2NvcGVPcmRpbmFsKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNjb3BlT3JkaW5hbDsgfQogCisg
ICAgUmVmPENTU1ZhbHVlPiByZXNvbHZlSW1hZ2VTdHlsZXMoQ1NTVmFsdWUmKTsKICAgICBSZWZQ
dHI8U3R5bGVJbWFnZT4gY3JlYXRlU3R5bGVJbWFnZShDU1NWYWx1ZSYpOwogICAgIGJvb2wgY3Jl
YXRlRmlsdGVyT3BlcmF0aW9ucyhjb25zdCBDU1NWYWx1ZSYsIEZpbHRlck9wZXJhdGlvbnMmIG91
dE9wZXJhdGlvbnMpOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMSBAQAorMjAyMC0wMS0xOSAg
Tm9hbSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgLXdlYmtpdC1pbWFn
ZS1zZXQgc2hvdWxkIHN1cHBvcnQgYWxsIHRoZSBpbWFnZSBmdW5jdGlvbnMgV2ViS2l0IHN1cHBv
cnRzLCBub3QganVzdCB1cmwoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODE5NDEKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKwor
ICAgICAgICAqIGZhc3QvY3NzL2N1cnNvci1wYXJzaW5nLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBmYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy5odG1sOgorICAgICAgICAgICAgICAgIEFkZGVkIHBh
cnNpbmcgdGVzdCB0byBlbnN1cmUgYXJyb3cgaW1hZ2Utc2V0cyBkaXNhYmxlIGdlbmVyYXRlZCBp
bWFnZXMKKworICAgICAgICAqIGZhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWdlbmVyYXRlZC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5n
LWdlbmVyYXRlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9pbWFnZS1zZXQtcGFy
c2luZy1pbnZhbGlkLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2Nzcy9pbWFnZS1zZXQt
cGFyc2luZy1pbnZhbGlkLmh0bWw6CisgICAgICAgICAgICAgICAgQWRkZWQgcGFyc2luZyB0ZXN0
cyBmb3IgbmV3IGdlbmVyYXRlZC1pbnNpZGUtaW1hZ2Utc2V0IHVzZSBjYXNlcworICAgICAgICAg
ICAgICAgIFRlc3QgdGhhdCBpbWFnZS1zZXQgaW5zaWRlIGltYWdlLXNldCBpcyBub3Qgc3VwcG9y
dGVkCisKKyAgICAgICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1mYWRlLWV4cGVjdGVk
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc2V0LWNyb3NzLWZhZGUu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtZXhw
ZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGll
bnQtbXVsdGktZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9oaWRwaS9pbWFn
ZS1zZXQtZ3JhZGllbnQtbXVsdGkuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9oaWRwaS9p
bWFnZS1zZXQtZ3JhZGllbnQtc2luZ2xlLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC5odG1sOiBBZGRlZC4KKyAgICAgICAg
ICAgICAgICBBZGRlZCByZWYtdGVzdHMgZm9yIHNldmVyYWwgZ2VuZXJhdGVkLWluc2lkZS1pbWFn
ZS1zZXQgdXNlLWNhc2VzCisKIDIwMjAtMDEtMTkgIENhdGhpZSBDaGVuICA8Y2F0aGllY2hlbkBp
Z2FsaWEuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBzY3JvbGwgYmVoYXZpb3IgcmVs
aWVzIG9uIFNjcm9sbEFuaW1hdGlvbiBvZiB0aGUgV2ViIHByb2Nlc3MKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvY3NzL2N1cnNvci1wYXJzaW5nLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDI1NDgwOCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2N1cnNvci1wYXJzaW5nLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsMTAgQEAgUEFTUyByb3VuZHRyaXBDc3NS
dWxlKCJjdXJzb3I6IHVybChmaWxlOgogUEFTUyByb3VuZHRyaXBDc3NSdWxlKCJjdXJzb3I6IHVy
bChmaWxlOi8vL2Zvby5wbmcpIDEyIDMgNTsiKS5jc3NUZXh0IGlzICIiCiBQQVNTIHJvdW5kdHJp
cENzc1J1bGUoImN1cnNvcjogdXJsKGZpbGU6Ly8vZm9vLnBuZykgeCB5OyIpLmNzc1RleHQgaXMg
IiIKIFBBU1Mgcm91bmR0cmlwQ3NzUnVsZSgiY3Vyc29yOiB1cmwoZmlsZTovLy9mb28ucG5nKSBh
dXRvOyIpLmNzc1RleHQgaXMgIiIKKworVGVzdCBhIGJ1bmNoIG9mIGN1cnNvciBydWxlcyB3aXRo
IGdlbmVyYXRlZCBpbWFnZXMuCitQQVNTIHJvdW5kdHJpcENzc1J1bGUoImN1cnNvcjogbGluZWFy
LWdyYWRpZW50KHJlZCwgd2hpdGUpIC0xIC0xLCBwb2ludGVyOyIpLmNzc1RleHQgaXMgIiIKK1BB
U1Mgcm91bmR0cmlwQ3NzUnVsZSgiY3Vyc29yOiBpbWFnZS1zZXQobGluZWFyLWdyYWRpZW50KHJl
ZCwgd2hpdGUpIDF4KSAtMSAtMSwgcG9pbnRlcjsiKS5jc3NUZXh0IGlzICIiCiBQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvY3NzL2N1cnNvci1wYXJzaW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9jc3MvY3Vyc29yLXBhcnNpbmcuaHRtbAkocmV2aXNpb24gMjU0ODA4KQorKysgTGF5b3V0
VGVzdHMvZmFzdC9jc3MvY3Vyc29yLXBhcnNpbmcuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTA1
LDYgKzEwNSwxMSBAQCB0ZXN0SW52YWxpZEN1cnNvclJ1bGUoJ3VybChmaWxlOi8vL2Zvby5wCiB0
ZXN0SW52YWxpZEN1cnNvclJ1bGUoJ3VybChmaWxlOi8vL2Zvby5wbmcpIHggeScpOwogdGVzdElu
dmFsaWRDdXJzb3JSdWxlKCd1cmwoZmlsZTovLy9mb28ucG5nKSBhdXRvJyk7CiAKK2RlYnVnKCcn
KTsKK2RlYnVnKCdUZXN0IGEgYnVuY2ggb2YgY3Vyc29yIHJ1bGVzIHdpdGggZ2VuZXJhdGVkIGlt
YWdlcy4nKTsKK3Rlc3RJbnZhbGlkQ3Vyc29yUnVsZSgnbGluZWFyLWdyYWRpZW50KHJlZCwgd2hp
dGUpIC0xIC0xLCBwb2ludGVyJyk7Cit0ZXN0SW52YWxpZEN1cnNvclJ1bGUoJ2ltYWdlLXNldChs
aW5lYXItZ3JhZGllbnQocmVkLCB3aGl0ZSkgMXgpIC0xIC0xLCBwb2ludGVyJyk7CisKIHN1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7CiA8L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
Y3NzL2ltYWdlLXNldC1wYXJzaW5nLWdlbmVyYXRlZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctZ2VuZXJhdGVkLWV4cGVj
dGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQt
cGFyc2luZy1nZW5lcmF0ZWQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjUgQEAKK1Rlc3QgdGhlIHBhcnNpbmcgb2YgdGhlIGltYWdlLXNldCBmdW5jdGlvbi4KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKKworU2luZ2xlIHZhbHVlIGZvciBiYWNrZ3JvdW5k
LWltYWdlIHdpdGggZ3JhZGllbnQgOiBsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAxeAor
UEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUpIGlzICdDU1NWYWx1ZUxpc3QnCitQQVNT
IGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5fX3Byb3RvX18pIGlzICdDU1NWYWx1ZUxpc3RQ
cm90b3R5cGUnCitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5jb25zdHJ1Y3Rvcikg
aXMgJ0Z1bmN0aW9uJworUEFTUyBpbWFnZVNldFJ1bGUubGVuZ3RoIGlzIDIKK1BBU1Mgc3ViUnVs
ZS5jc3NUZXh0IGlzICdsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKScKK1BBU1Mgc3ViUnVs
ZS5jc3NUZXh0IGlzICcxJworCitTaW5nbGUgdmFsdWUgZm9yIGNvbnRlbnQgd2l0aCBncmFkaWVu
dCA6IGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIDF4CitQQVNTIGpzV3JhcHBlckNsYXNz
KGltYWdlU2V0UnVsZSkgaXMgJ0NTU1ZhbHVlTGlzdCcKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1h
Z2VTZXRSdWxlLl9fcHJvdG9fXykgaXMgJ0NTU1ZhbHVlTGlzdFByb3RvdHlwZScKK1BBU1MganNX
cmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLmNvbnN0cnVjdG9yKSBpcyAnRnVuY3Rpb24nCitQQVNT
IGltYWdlU2V0UnVsZS5sZW5ndGggaXMgMgorUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJ2xpbmVh
ci1ncmFkaWVudChncmVlbiwgd2hpdGUpJworUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJzEnCisK
K1NpbmdsZSB2YWx1ZSBmb3IgYmFja2dyb3VuZC1pbWFnZSB3aXRoIGdyYWRpZW50cyA6IGxpbmVh
ci1ncmFkaWVudChncmVlbiwgd2hpdGUpIDF4LCByYWRpYWwtZ3JhZGllbnQoYmx1ZSwgd2hpdGUp
IDJ4CitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZSkgaXMgJ0NTU1ZhbHVlTGlzdCcK
K1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLl9fcHJvdG9fXykgaXMgJ0NTU1ZhbHVl
TGlzdFByb3RvdHlwZScKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLmNvbnN0cnVj
dG9yKSBpcyAnRnVuY3Rpb24nCitQQVNTIGltYWdlU2V0UnVsZS5sZW5ndGggaXMgNAorUEFTUyBz
dWJSdWxlLmNzc1RleHQgaXMgJ2xpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpJworUEFTUyBz
dWJSdWxlLmNzc1RleHQgaXMgJzEnCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAncmFkaWFsLWdy
YWRpZW50KGJsdWUsIHdoaXRlKScKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICcyJworCitDb21i
aW5lZCBncmFkaWVudCBhbmQgVVJMIDogdXJsKCcjYScpIDF4LCBsaW5lYXItZ3JhZGllbnQoZ3Jl
ZW4sIHdoaXRlKSAyeAorUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUpIGlzICdDU1NW
YWx1ZUxpc3QnCitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5fX3Byb3RvX18pIGlz
ICdDU1NWYWx1ZUxpc3RQcm90b3R5cGUnCitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVs
ZS5jb25zdHJ1Y3RvcikgaXMgJ0Z1bmN0aW9uJworUEFTUyBpbWFnZVNldFJ1bGUubGVuZ3RoIGlz
IDQKK1BBU1Mgc3ViUnVsZSBpcyAnYScKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICcxJworUEFT
UyBzdWJSdWxlLmNzc1RleHQgaXMgJ2xpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpJworUEFT
UyBzdWJSdWxlLmNzc1RleHQgaXMgJzInCisKK0NvbWJpbmVkIGdyYWRpZW50IGFuZCBVUkwgaW4g
Y29udGVudCA6IHVybCgnI2EnKSAxeCwgbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMngK
K1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlKSBpcyAnQ1NTVmFsdWVMaXN0JworUEFT
UyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuX19wcm90b19fKSBpcyAnQ1NTVmFsdWVMaXN0
UHJvdG90eXBlJworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuY29uc3RydWN0b3Ip
IGlzICdGdW5jdGlvbicKK1BBU1MgaW1hZ2VTZXRSdWxlLmxlbmd0aCBpcyA0CitQQVNTIHN1YlJ1
bGUgaXMgJ2EnCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMScKK1BBU1Mgc3ViUnVsZS5jc3NU
ZXh0IGlzICdsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKScKK1BBU1Mgc3ViUnVsZS5jc3NU
ZXh0IGlzICcyJworCitDb21iaW5lZCBncmFkaWVudCBhbmQgY3Jvc3MtZmFkZSA6IC13ZWJraXQt
Y3Jvc3MtZmFkZSh1cmwoJyNhJyksIHVybCgnI2InKSwgNzAlKSAxeCwgbGluZWFyLWdyYWRpZW50
KGdyZWVuLCB3aGl0ZSkgMngKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlKSBpcyAn
Q1NTVmFsdWVMaXN0JworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuX19wcm90b19f
KSBpcyAnQ1NTVmFsdWVMaXN0UHJvdG90eXBlJworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNl
dFJ1bGUuY29uc3RydWN0b3IpIGlzICdGdW5jdGlvbicKK1BBU1MgaW1hZ2VTZXRSdWxlLmxlbmd0
aCBpcyA0CitQQVNTIHN1YlJ1bGUgaXMgJ2EnCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMScK
K1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICdsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKScK
K1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICcyJworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3Rz
L2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWdlbmVyYXRlZC1leHBlY3RlZC50eHQKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQt
cGFyc2luZy1nZW5lcmF0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nz
cy9pbWFnZS1zZXQtcGFyc2luZy1nZW5lcmF0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1nZW5lcmF0ZWQuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEwNyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0i
ZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rl
c2NyaXB0aW9uKCJUZXN0IHRoZSBwYXJzaW5nIG9mIHRoZSBpbWFnZS1zZXQgZnVuY3Rpb24uIik7
CisKK2Z1bmN0aW9uIGpzV3JhcHBlckNsYXNzKG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAg
ICAgICByZXR1cm4gIltudWxsXSI7CisgICAgdmFyIHN0cmluZyA9IE9iamVjdC5wcm90b3R5cGUu
dG9TdHJpbmcuYXBwbHkobm9kZSk7CisgICAgcmV0dXJuIHN0cmluZy5zdWJzdHIoOCwgc3RyaW5n
Lmxlbmd0aCAtIDkpOworfQorCitmdW5jdGlvbiBzaG91bGRCZVR5cGUoZXhwcmVzc2lvbiwgY2xh
c3NOYW1lLCBwcm90b3R5cGVOYW1lLCBjb25zdHJ1Y3Rvck5hbWUpCit7CisgICAgaWYgKCFwcm90
b3R5cGVOYW1lKQorICAgICAgICBwcm90b3R5cGVOYW1lID0gY2xhc3NOYW1lICsgIlByb3RvdHlw
ZSI7CisgICAgaWYgKCFjb25zdHJ1Y3Rvck5hbWUpCisgICAgICAgIGNvbnN0cnVjdG9yTmFtZSA9
IGNsYXNzTmFtZSArICJDb25zdHJ1Y3RvciI7CisgICAgc2hvdWxkQmUoImpzV3JhcHBlckNsYXNz
KCIgKyBleHByZXNzaW9uICsgIikiLCAiJyIgKyBjbGFzc05hbWUgKyAiJyIpOworICAgIHNob3Vs
ZEJlKCJqc1dyYXBwZXJDbGFzcygiICsgZXhwcmVzc2lvbiArICIuX19wcm90b19fKSIsICInIiAr
IHByb3RvdHlwZU5hbWUgKyAiJyIpOworICAgIHNob3VsZEJlKCJqc1dyYXBwZXJDbGFzcygiICsg
ZXhwcmVzc2lvbiArICIuY29uc3RydWN0b3IpIiwgIidGdW5jdGlvbiciKTsKK30KKworLy8gVGhl
c2UgaGF2ZSB0byBiZSBnbG9iYWwgZm9yIHRoZSB0ZXN0IGhlbHBlcnMgdG8gc2VlIHRoZW0uCit2
YXIgaW1hZ2VTZXRSdWxlLCBzdWJSdWxlOworCitmdW5jdGlvbiB0ZXN0SW1hZ2VTZXRSdWxlKGRl
c2NyaXB0aW9uLCBwcm9wZXJ0eSwgcnVsZSwgZXhwZWN0ZWRMZW5ndGgsIGV4cGVjdGVkVGV4dHMp
Cit7CisgICAgZGVidWcoIiIpOworICAgIGRlYnVnKGRlc2NyaXB0aW9uICsgIiA6ICIgKyBydWxl
KTsKKworICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICBk
aXYuc2V0QXR0cmlidXRlKCJzdHlsZSIsIHByb3BlcnR5ICsgIjogaW1hZ2Utc2V0KCIgKyBydWxl
ICsgIikiKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7CisKKyAgICBpbWFn
ZVNldFJ1bGUgPSBkaXYuc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eSk7CisgICAg
c2hvdWxkQmVUeXBlKCJpbWFnZVNldFJ1bGUiLCAiQ1NTVmFsdWVMaXN0Iik7CisKKyAgICBpZiAo
aW1hZ2VTZXRSdWxlKSB7CisgICAgICAgIGlmIChqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGVb
MF0pID09ICJDU1NWYWx1ZUxpc3QiKSB7CisgICAgICAgICAgICAvLyBUaGUgY29udGVudCBwcm9w
ZXJ0eSByZXR1cm5zIGEgQ1NTVmFsdWVMaXN0IGFueXdheSwgc28gdG8gZ2V0IHRvIHRoZSAKKyAg
ICAgICAgICAgIC8vIGltYWdlU2V0IENTUyB2YWx1ZSBsaXN0LCB3ZSBoYXZlIHRvIGxvb2sgYXQg
dGhlIGZpcnN0IGVudHJ5IGluIHRoZSAKKyAgICAgICAgICAgIC8vIGNvbnRlbnQgdmFsdWUgbGlz
dC4KKyAgICAgICAgICAgIGltYWdlU2V0UnVsZSA9IGltYWdlU2V0UnVsZVswXTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHNob3VsZEJlKCJpbWFnZVNldFJ1bGUubGVuZ3RoIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBleHBlY3RlZExlbmd0aDsgfSk7CisKKyAgICBpZiAoaW1hZ2VTZXRSdWxlKSB7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRMZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgc3RyaW5nID0gaW1hZ2VTZXRSdWxlW2ldOworICAgICAgICAgICAgaWYgKGkgJSAy
ID09IDAgJiYgc3RyaW5nLmNzc1RleHQuaW5jbHVkZXMoJyMnKSkgeworICAgICAgICAgICAgICAg
IHN1YlJ1bGUgPSBzdHJpbmcuY3NzVGV4dC5zcGxpdCgnIycpWzFdLnJlcGxhY2UoJyInLCAiIik7
CisgICAgICAgICAgICAgICAgc3ViUnVsZSA9IHN1YlJ1bGUuc3BsaXQoJyknKVswXTsKKyAgICAg
ICAgICAgICAgICBzaG91bGRCZSgic3ViUnVsZSIsICInIiArIGV4cGVjdGVkVGV4dHNbaV0gKyAi
JyIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdWJSdWxlID0gc3Ry
aW5nOworICAgICAgICAgICAgICAgIHNob3VsZEJlKCJzdWJSdWxlLmNzc1RleHQiLCAiJyIgKyBl
eHBlY3RlZFRleHRzW2ldICsgIiciKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTsKK30KKwordGVzdEltYWdlU2V0
UnVsZSgiU2luZ2xlIHZhbHVlIGZvciBiYWNrZ3JvdW5kLWltYWdlIHdpdGggZ3JhZGllbnQiLAor
ICAgICAgICAgICAgICAgICJiYWNrZ3JvdW5kLWltYWdlIiwKKyAgICAgICAgICAgICAgICAibGlu
ZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMXgiLCAyLAorICAgICAgICAgICAgICAgIFsibGlu
ZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkiLCAiMSJdKTsKK3Rlc3RJbWFnZVNldFJ1bGUoIlNp
bmdsZSB2YWx1ZSBmb3IgY29udGVudCB3aXRoIGdyYWRpZW50IiwKKyAgICAgICAgICAgICAgICAi
YmFja2dyb3VuZC1pbWFnZSIsCisgICAgICAgICAgICAgICAgImxpbmVhci1ncmFkaWVudChncmVl
biwgd2hpdGUpIDF4IiwgMiwKKyAgICAgICAgICAgICAgICBbImxpbmVhci1ncmFkaWVudChncmVl
biwgd2hpdGUpIiwgIjEiXSk7CisKK3Rlc3RJbWFnZVNldFJ1bGUoIlNpbmdsZSB2YWx1ZSBmb3Ig
YmFja2dyb3VuZC1pbWFnZSB3aXRoIGdyYWRpZW50cyIsCisgICAgICAgICAgICAgICAgImJhY2tn
cm91bmQtaW1hZ2UiLAorICAgICAgICAgICAgICAgICJsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdo
aXRlKSAxeCwgcmFkaWFsLWdyYWRpZW50KGJsdWUsIHdoaXRlKSAyeCIsIDQsCisgICAgICAgICAg
ICAgICAgWyJsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSIsICIxIiwgInJhZGlhbC1ncmFk
aWVudChibHVlLCB3aGl0ZSkiLCAiMiJdKTsKKwordGVzdEltYWdlU2V0UnVsZSgiQ29tYmluZWQg
Z3JhZGllbnQgYW5kIFVSTCIsCisgICAgICAgICAgICAgICAgImJhY2tncm91bmQtaW1hZ2UiLAor
ICAgICAgICAgICAgICAgICJ1cmwoJyNhJykgMXgsIGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hp
dGUpIDJ4IiwgNCwKKyAgICAgICAgICAgICAgICBbImEiLCAiMSIsICJsaW5lYXItZ3JhZGllbnQo
Z3JlZW4sIHdoaXRlKSIsICIyIl0pOworCit0ZXN0SW1hZ2VTZXRSdWxlKCJDb21iaW5lZCBncmFk
aWVudCBhbmQgVVJMIGluIGNvbnRlbnQiLAorICAgICAgICAgICAgICAgICJjb250ZW50IiwKKyAg
ICAgICAgICAgICAgICAidXJsKCcjYScpIDF4LCBsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRl
KSAyeCIsIDQsCisgICAgICAgICAgICAgICAgWyJhIiwgIjEiLCAibGluZWFyLWdyYWRpZW50KGdy
ZWVuLCB3aGl0ZSkiLCAiMiJdKTsKKwordGVzdEltYWdlU2V0UnVsZSgiQ29tYmluZWQgZ3JhZGll
bnQgYW5kIGNyb3NzLWZhZGUiLAorICAgICAgICAgICAgICAgICJiYWNrZ3JvdW5kLWltYWdlIiwK
KyAgICAgICAgICAgICAgICAiLXdlYmtpdC1jcm9zcy1mYWRlKHVybCgnI2EnKSwgdXJsKCcjYicp
LCA3MCUpIDF4LCBsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAyeCIsIDQsCisgICAgICAg
ICAgICAgICAgWyJhIiwgIjEiLCAibGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkiLCAiMiJd
KTsKKworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0
LXBhcnNpbmctZ2VuZXJhdGVkLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUK
IyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1pbnZhbGlkLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1p
bnZhbGlkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjU0ODA4KQorKysgTGF5b3V0VGVzdHMvZmFz
dC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctaW52YWxpZC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTE4LDYgKzE4LDEyIEBAIFBBU1MgY3NzUnVsZSBpcyBudWxsCiAKIFNjYWxlIGZhY3Rv
ciBpcyAwIDogdXJsKCcjYScpIDB4CiBQQVNTIGNzc1J1bGUgaXMgbnVsbAorCitHZW5lcmF0ZWQg
aW1hZ2UgZm9yIGN1cnNvciA6IGxpbmVhci1ncmFkaWVudChibGFjaywgd2hpdGUpIDF4CitQQVNT
IGNzc1J1bGUgaXMgbnVsbAorCitJbWFnZS1zZXQgaW5zaWRlIGltYWdlLXNldCA6IGltYWdlLXNl
dChpbWFnZS1zZXQodXJsKCcjYScpIDF4KSAxeCkKK1BBU1MgY3NzUnVsZSBpcyBudWxsCiBQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWludmFsaWQuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1pbnZhbGlkLmh0bWwJ
KHJldmlzaW9uIDI1NDgwOCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJz
aW5nLWludmFsaWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQCB0ZXN0SW52
YWxpZEltYWdlU2V0KCJObyB4IiwgImJhY2tncm91bmQtCiB0ZXN0SW52YWxpZEltYWdlU2V0KCJO
byBjb21tYSIsICJiYWNrZ3JvdW5kLWltYWdlIiwgInVybCgnI2EnKSAxeCB1cmwoJyNiJykgMngi
KTsKIHRlc3RJbnZhbGlkSW1hZ2VTZXQoIlRvbyBtYW55IHNjYWxlIGZhY3RvciBwYXJhbWV0ZXJz
IiwgImJhY2tncm91bmQtaW1hZ2UiLCAidXJsKCcjYScpIDF4IDJ4Iik7CiB0ZXN0SW52YWxpZElt
YWdlU2V0KCJTY2FsZSBmYWN0b3IgaXMgMCIsICJiYWNrZ3JvdW5kLWltYWdlIiwgInVybCgnI2En
KSAweCIpOwordGVzdEludmFsaWRJbWFnZVNldCgiR2VuZXJhdGVkIGltYWdlIGZvciBjdXJzb3Ii
LCAiY3Vyc29yIiwgImxpbmVhci1ncmFkaWVudChibGFjaywgd2hpdGUpIDF4Iik7Cit0ZXN0SW52
YWxpZEltYWdlU2V0KCJJbWFnZS1zZXQgaW5zaWRlIGltYWdlLXNldCIsICJiYWNrZ3JvdW5kLWlt
YWdlIiwgImltYWdlLXNldChpbWFnZS1zZXQodXJsKCcjYScpIDF4KSAxeCkiKTsKIAogc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKIDwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9o
aWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWNyb3NzLWZhZGUtZXhwZWN0ZWQuaHRtbAko
bm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1m
YWRlLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNiBAQAorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQ+CisgICAgd2luZG93Lm9ubG9hZCA9ICgpID0+IHsKKyAgICAgIGlm
ICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUo
KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRCYWNraW5nU2NhbGVGYWN0b3IoMiwgKCkgPT4gc2V0
VGltZW91dCgoKSA9PiB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKSwgMCkpOworICAgICAgfQorICAg
IH0KKzwvc2NyaXB0PgorCisgICAgCis8c3R5bGU+CisgICAgI2ZvbyB7CisgICAgICAgIHdpZHRo
OjEwMHB4OworICAgICAgICBoZWlnaHQ6MTAwcHg7CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6
IC13ZWJraXQtY3Jvc3MtZmFkZSh1cmwoJ3Jlc291cmNlcy9ibHVlLTEwMC1weC1zcXVhcmUucG5n
JyksIHVybCgncmVzb3VyY2VzL2dyZWVuLTIwMC1weC1zcXVhcmUucG5nJywgNTAlKSk7CisgICAg
fQorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHk+CisgICAgPGRpdj5UaGlzIHRlc3QgcGFzc2Vz
IGlmIHRoZSBkaXYgYmVsb3cgaXMgYSBibHVlIDEwMHB4IHNxdWFyZSB3aGVuIHRoZSBkZXZpY2VT
Y2FsZUZhY3RvciBpcyAxLCBhbmQgaWYgaXQgaXMgYSAxMDBweCBncmVlbi9ibHVlIGNyb3NzLWZh
ZGUgc3F1YXJlIHdoZW4gdGhlIGRldmljZVNjYWxlRmFjdG9yIGlzIDIuPC9kaXY+Cis8ZGl2IGlk
PWZvbz48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91
dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWNyb3NzLWZhZGUtZXhwZWN0ZWQuaHRtbApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Ut
c2V0LWNyb3NzLWZhZGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2hpZHBp
L2ltYWdlLXNldC1jcm9zcy1mYWRlLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjUgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorICAgIHdpbmRvdy5vbmxvYWQg
PSAoKSA9PiB7CisgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0QmFja2luZ1NjYWxl
RmFjdG9yKDIsICgpID0+IHNldFRpbWVvdXQoKCkgPT4gdGVzdFJ1bm5lci5ub3RpZnlEb25lKCks
IDApKTsKKyAgICAgIH0KKyAgICB9Cis8L3NjcmlwdD4KKyAgICAKKzxzdHlsZT4KKyAgICAjZm9v
IHsKKyAgICAgICAgd2lkdGg6MTAwcHg7CisgICAgICAgIGhlaWdodDoxMDBweDsKKyAgICAgICAg
YmFja2dyb3VuZC1pbWFnZTogaW1hZ2Utc2V0KHVybCgncmVzb3VyY2VzL2JsdWUtMTAwLXB4LXNx
dWFyZS5wbmcnKSAxeCwgLXdlYmtpdC1jcm9zcy1mYWRlKHVybCgncmVzb3VyY2VzL2JsdWUtMTAw
LXB4LXNxdWFyZS5wbmcnKSwgdXJsKCdyZXNvdXJjZXMvZ3JlZW4tMjAwLXB4LXNxdWFyZS5wbmcn
LCA1MCUpKSAyeCk7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHk+CisgICAgPGRp
dj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBkaXYgYmVsb3cgaXMgYSBibHVlIDEwMHB4IHNxdWFy
ZSB3aGVuIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBpcyAxLCBhbmQgaWYgaXQgaXMgYSAxMDBweCBn
cmVlbi9ibHVlIGNyb3NzLWZhZGUgc3F1YXJlIHdoZW4gdGhlIGRldmljZVNjYWxlRmFjdG9yIGlz
IDIuPC9kaXY+CisgICAgPGRpdiBpZD1mb28+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1m
YWRlLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIwor
KgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LWV4cGVjdGVkLmh0bWwJKG5v
bmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQt
ZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBACis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdD4KKyAgICB3aW5kb3cub25sb2FkID0gKCkgPT4geworICAgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgICAgICB0ZXN0UnVubmVyLnNldEJhY2tpbmdTY2FsZUZhY3RvcigyLCAoKSA9PiBzZXRUaW1l
b3V0KCgpID0+IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpLCAwKSk7CisgICAgICB9CisgICAgfQor
PC9zY3JpcHQ+CisKKyAgICAKKzxzdHlsZT4KKyAgICAjZm9vIHsKKyAgICAgICAgd2lkdGg6MTAw
cHg7CisgICAgICAgIGhlaWdodDoxMDBweDsKKyAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbGlu
ZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSk7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKwor
PGJvZHk+CisgICAgPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBkaXYgYmVsb3cgaXMgYSBi
bHVlIDEwMHB4IHNxdWFyZSB3aGVuIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBpcyAxLCBhbmQgaWYg
aXQgaXMgYSAxMDBweCBncmVlbi13aGl0ZSBncmFkaWVudCBzcXVhcmUgd2hlbiB0aGUgZGV2aWNl
U2NhbGVGYWN0b3IgaXMgMi48L2Rpdj4KKyAgICA8ZGl2IGlkPWZvbz48L2Rpdj4KKzwvYm9keT4K
KzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1h
Z2Utc2V0LWdyYWRpZW50LWV4cGVjdGVkLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1
dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1tdWx0aS1leHBl
Y3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0
LWdyYWRpZW50LW11bHRpLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtbXVsdGktZXhwZWN0ZWQuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDI1IEBACis8aHRtbD4KKzxoZWFkPiAgICAKKzxzY3JpcHQ+
CisgICAgd2luZG93Lm9ubG9hZCA9ICgpID0+IHsKKyAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikgeworICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgdGVzdFJ1
bm5lci5zZXRCYWNraW5nU2NhbGVGYWN0b3IoMiwgKCkgPT4gc2V0VGltZW91dCgoKSA9PiB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKSwgMCkpOworICAgICAgfQorICAgIH0KKzwvc2NyaXB0PgorCis8
c3R5bGU+CisgICAgI2ZvbyB7CisgICAgICAgIHdpZHRoOjEwMHB4OworICAgICAgICBoZWlnaHQ6
MTAwcHg7CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHJhZGlhbC1ncmFkaWVudChyZWQsIGJs
dWUpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorICAgIDxkaXY+VGhpcyB0
ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgMTAwcHggZ3JlZW4td2hpdGUgZ3JhZGll
bnQgc3F1YXJlIHdoZW4gZGV2aWNlUGl4ZWxSYXRpbyBpcyAxLCBhIHJhZGlhbCByZWQtYmx1ZSBz
cXVhcmUgd2hlbiBkZXZpY2VQaXhlbFJhdGlvIGlzIDIsIGFuZCBhIGJsdWUgc3F1YXJlIHdoZW4g
ZGV2aWNlUGl4ZWxSYXRpbyBpcyAzLjwvZGl2PgorICAgIDxkaXYgaWQ9Zm9vPjwvZGl2PgorPC9i
b2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9oaWRw
aS9pbWFnZS1zZXQtZ3JhZGllbnQtbXVsdGktZXhwZWN0ZWQuaHRtbApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50
LW11bHRpLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1z
ZXQtZ3JhZGllbnQtbXVsdGkuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1tdWx0aS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjUgQEAKKzxodG1sPgorPGhlYWQ+ICAgIAorPHNjcmlwdD4KKyAgICB3aW5kb3cub25s
b2FkID0gKCkgPT4geworICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB0ZXN0UnVubmVyLnNldEJhY2tpbmdT
Y2FsZUZhY3RvcigyLCAoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpLCAwKSk7CisgICAgICB9CisgICAgfQorPC9zY3JpcHQ+CisKKzxzdHlsZT4KKyAgICAjZm9v
IHsKKyAgICAgICAgd2lkdGg6MTAwcHg7CisgICAgICAgIGhlaWdodDoxMDBweDsKKyAgICAgICAg
YmFja2dyb3VuZC1pbWFnZTogaW1hZ2Utc2V0KGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUp
IDF4LCByYWRpYWwtZ3JhZGllbnQocmVkLCBibHVlKSAyeCwgJ3Jlc291cmNlcy9ibHVlLTEwMC1w
eC1zcXVhcmUucG5nJyAzeCk7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHk+Cisg
ICAgPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBkaXYgYmVsb3cgaXMgYSAxMDBweCBncmVl
bi13aGl0ZSBncmFkaWVudCBzcXVhcmUgd2hlbiBkZXZpY2VQaXhlbFJhdGlvIGlzIDEsIGEgcmFk
aWFsIHJlZC1ibHVlIHNxdWFyZSB3aGVuIGRldmljZVBpeGVsUmF0aW8gaXMgMiwgYW5kIGEgYmx1
ZSBzcXVhcmUgd2hlbiBkZXZpY2VQaXhlbFJhdGlvIGlzIDMuPC9kaXY+CisgICAgPGRpdiBpZD1m
b28+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRU
ZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1tdWx0aS5odG1sCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3Jh
ZGllbnQtc2luZ2xlLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtc2luZ2xlLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0
ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtc2luZ2xl
LWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNiBAQAorPGh0bWw+Cis8
aGVhZD4KKzxzdHlsZT4KKyAgICAjZm9vIHsKKyAgICAgICAgd2lkdGg6MTAwcHg7CisgICAgICAg
IGhlaWdodDoxMDBweDsKKyAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50
KGdyZWVuLCB3aGl0ZSk7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgaWQ9ImJv
ZHkiPgorICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgMTAw
cHggZ3JlZW4td2hpdGUgZ3JhZGllbnQgc3F1YXJlLjwvZGl2PgorICAgIDxkaXYgaWQ9Zm9vPjwv
ZGl2PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMv
ZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtc2luZ2xlLWV4cGVjdGVkLmh0bWwKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNl
dC1ncmFkaWVudC1zaW5nbGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2hp
ZHBpL2ltYWdlLXNldC1ncmFkaWVudC1zaW5nbGUuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1zaW5nbGUuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBACis8aHRtbD4KKzxoZWFkPiAgICAKKzxzdHlsZT4KKyAg
ICAjZm9vIHsKKyAgICAgICAgd2lkdGg6MTAwcHg7CisgICAgICAgIGhlaWdodDoxMDBweDsKKyAg
ICAgICAgYmFja2dyb3VuZC1pbWFnZTogaW1hZ2Utc2V0KGxpbmVhci1ncmFkaWVudChncmVlbiwg
d2hpdGUpIDF4KTsKKyAgICB9Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBpZD0iYm9keSI+
CisgICAgPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBkaXYgYmVsb3cgaXMgYSAxMDBweCBn
cmVlbi13aGl0ZSBncmFkaWVudCBzcXVhcmUuPC9kaXY+CisgICAgPGRpdiBpZD1mb28+PC9kaXY+
Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0
L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1zaW5nbGUuaHRtbApfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBz
dm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJv
cGVydHkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50Lmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGll
bnQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNl
dC1ncmFkaWVudC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0PgorICAgIHdpbmRvdy5vbmxvYWQgPSAoKSA9PiB7CisgICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7
CisgICAgICAgIHRlc3RSdW5uZXIuc2V0QmFja2luZ1NjYWxlRmFjdG9yKDIsICgpID0+IHNldFRp
bWVvdXQoKCkgPT4gdGVzdFJ1bm5lci5ub3RpZnlEb25lKCksIDApKTsKKyAgICAgIH0KKyAgICB9
Cis8L3NjcmlwdD4KKworPHN0eWxlPgorICAgICNmb28geworICAgICAgICB3aWR0aDoxMDBweDsK
KyAgICAgICAgaGVpZ2h0OjEwMHB4OworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBpbWFnZS1z
ZXQodXJsKCdyZXNvdXJjZXMvYmx1ZS0xMDAtcHgtc3F1YXJlLnBuZycpIDF4LCBsaW5lYXItZ3Jh
ZGllbnQoZ3JlZW4sIHdoaXRlKSAyeCk7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJv
ZHk+CisgICAgPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBkaXYgYmVsb3cgaXMgYSBibHVl
IDEwMHB4IHNxdWFyZSB3aGVuIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBpcyAxLCBhbmQgaWYgaXQg
aXMgYSAxMDBweCBncmVlbi13aGl0ZSBncmFkaWVudCBzcXVhcmUgd2hlbiB0aGUgZGV2aWNlU2Nh
bGVGYWN0b3IgaXMgMi48L2Rpdj4KKyAgICA8ZGl2IGlkPWZvbz48L2Rpdj4KKzwvYm9keT4KKzwv
aHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Ut
c2V0LWdyYWRpZW50Lmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAs
MCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388291</attachid>
            <date>2020-01-21 04:57:28 -0800</date>
            <delta_ts>2020-01-21 10:28:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81941-20200121145725.patch</filename>
            <type>text/plain</type>
            <size>82351</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAyMC0wMS0xOSAgTm9hbSBS
b3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgLXdlYmtpdC1pbWFnZS1zZXQg
c2hvdWxkIHN1cHBvcnQgYWxsIHRoZSBpbWFnZSBmdW5jdGlvbnMgV2ViS2l0IHN1cHBvcnRzLCBu
b3QganVzdCB1cmwoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODE5NDEKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAg
ICBTZXBhcmF0ZSBTdHlsZUNhY2hlZEltYWdlIHRvIDQgY2xhc3NlczoKKyAgICAgICAgLSBTdHls
ZUNhY2hlZEltYWdlOiBmb3Igc2luZ2xlIGltYWdlcyBvbmx5CisgICAgICAgIC0gU3R5bGVNdWx0
aUltYWdlOiBmb3IgdmFsdWVzIHRoYXQgY2FuIGNvbnRhaW4gbXVsdGlwbGUgaW1hZ2VzOiBsaWtl
IGN1cnNvci9pbWFnZS1zZXQKKyAgICAgICAgLSBTdHlsZUltYWdlU2V0CisgICAgICAgIC0gU3R5
bGVDdXJzb3JJbWFnZQorCisgICAgICAgIFRoZSBuZXcgY2xhc3NlcyBvbmx5IGRlYWwgd2l0aCB0
aGVpciBvd24gdmFsdWUgdHlwZS4gQmVmb3JlLCBJbWFnZVNldCBhbmQgY3Vyc29yIHdlcmUgcmVz
b2x2ZWQKKyAgICAgICAgYXMgYSBTdHlsZUNhY2hlZEltYWdlLCB3aGljaCBpcyBubyBsb25nZXIg
YSB2YWxpZCBhc3N1bXB0aW9uIGlmIGltYWdlLXNldCBjYW4gY29udGFpbiBnZW5lcmF0ZWQgaW1h
Z2VzLgorICAgICAgICBUaG91Z2ggY3Vyc29ycyBzdGlsbCBjYW4gb25seSBjb250YWluIGNhY2hl
ZCBpbWFnZXMsIGl0IHdhcyBjbGVhbmVyIHRvIHJlZmFjdG9yIGl0IG91dCBhcyB3ZWxsLgorCisg
ICAgICAgIFJlZmFjdG9yZWQgYmVzdC1maXQgaW1hZ2Ugc2VsZWN0aW9uIGZyb20gbG9hZGluZy4g
Tm93IFN0eWxlQ2FjaGVkSW1hZ2UgaXMgaW4gY2hhcmdlIG9mIGxvYWRpbmcKKyAgICAgICAgdGhl
IGFjdHVhbCBpbWFnZSwgYW5kIFN0eWxlSW1hZ2VTZXQvU3R5bGVDdXJzb3JJbWFnZSBwZXJmb3Jt
IHRoZSBzb3VyY2Ugc2VsZWN0aW9uLgorCisgICAgICAgIEFsc28sIGFkZGVkIHRoZSBuZWNlc3Nh
cnkgbG9naWMgaW4gdGhlIENTUyBwYXJzZXIgdG8gY29uc3VtZSBnZW5lcmF0ZWQgaW1hZ2VzIGlu
c2lkZSBpbWFnZS1zZXRzLCBleGNsdWRpbmcKKyAgICAgICAgd2hlbiB0aGUgaW1hZ2Utc2V0IGlz
IGEgY3Vyc29yIHZhbHVlLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2Nzcy9pbWFnZS1zZXQtcGFy
c2luZy1nZW5lcmF0ZWQuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9oaWRwaS9pbWFnZS1zZXQt
Y3Jvc3MtZmFkZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFk
aWVudC1tdWx0aS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFk
aWVudC1zaW5nbGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3Jh
ZGllbnQuaHRtbAorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBmaWxl
cworCisgICAgICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6c2VsZWN0QmVzdEZpdEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0N1cnNvckltYWdlVmFsdWU6OmxvYWRJbWFnZSk6IERlbGV0ZWQuCisgICAg
ICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuaDoKKyAgICAgICAgICAgICAgICBJbnN0ZWFk
IG9mIGN1cnNvciBsb2FkaW5nIHRoZSBpbWFnZSwgaXQgc2VsZWN0cyBhbiBpbWFnZSBDU1MgdmFs
dWUKKworICAgICAgICAqIGNzcy9DU1NJbWFnZVNldFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ltYWdlU2V0VmFsdWU6OkNTU0ltYWdlU2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTSW1hZ2VTZXRWYWx1ZTo6ZmlsbEltYWdlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ltYWdlU2V0VmFsdWU6OmNhY2hlZEltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ltYWdlU2V0VmFsdWU6OnNlbGVjdEJlc3RGaXRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NJbWFnZVNldFZhbHVlOjp1cGRhdGVEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpDU1NJbWFnZVNldFZhbHVlOjppbWFnZVNldFdpdGhTdHlsZXNSZXNvbHZlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjp0cmF2ZXJzZVN1YnJlc291cmNlcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjpsb2FkQmVzdEZpdEltYWdl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5oOgorICAgICAgICAg
ICAgICAgIFJlZmFjdG9yIENTU0ltYWdlU2V0VmFsdWUgdG8gaW5jbHVkZSBub24tY2FjaGVkSW1h
Z2UgaW1hZ2VzCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVDdXJzb3IpOgorICAgICAgICAqIGNzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVVybE9yU3RyaW5nQXNTdHJpbmdWaWV3
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5oOgorICAgICAgICAgICAgICAgIAorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NTU1Byb3Bl
cnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRnVuYyk6CisgICAgICAg
ICAgICAgICAgV2hlbiBibGVuZGluZyB0d28gaW1hZ2VzLCBnZXQgdGhlIHNlbGVjdGVkIGltYWdl
cyBpbiBjYXNlIGl0IGlzIGFuIGltYWdlLXNldAorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
SW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1h
Z2VSZXNvdXJjZVN0eWxlSW1hZ2U6OmluaXRpYWxpemUpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FuRGlyZWN0bHlDb21w
b3NpdGVCYWNrZ3JvdW5kQmFja2dyb3VuZEltYWdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5
bGUvU2hhcGVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjppc0ltYWdl
VmFsaWQgY29uc3QpOgorICAgICAgICAgICAgICAgIFVzZSBoYXNDYWNoZWRJbWFnZSgpIGluc3Rl
YWQgb2YgaXNDYWNoZWRJbWFnZSgpIGFzIGEgU3R5bGVJbWFnZVNldCBpcyBubyBsb25nZXIgYW4g
aXNDYWNoZWRJbWFnZSgpCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNhY2hlZEltYWdlOjpTdHlsZUNhY2hl
ZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlVVJMKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OmxvYWQpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0
eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVD
dXJzb3JJbWFnZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFn
ZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZU11bHRpSW1hZ2UuY3BwOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlU2V0Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9T
dHlsZUltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUltYWdlOjpzZWxlY3RlZEltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW1hZ2U6OnNlbGVjdGVkSW1hZ2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVJbWFnZTo6aXNDdXJzb3JJbWFnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUltYWdlOjppc0ltYWdlU2V0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlSW1hZ2U6Omhhc0NhY2hlZEltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlSW1hZ2U6OlN0eWxlSW1hZ2UpOgorICAgICAgICAgICAgICAgIFNlcGFyYXRlIGN1
cnNvci9pbWFnZS1zZXQgcmVsYXRlZCBzdHVmZiBhd2F5IGZyb20gU3R5bGVDYWNoZWRJbWFnZS4K
KworICAgICAgICAqIHN0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OkJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb250ZW50KToKKyAgICAgICAgKiBz
dHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVp
bGRlclN0YXRlOjpyZXNvbHZlSW1hZ2VTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OkJ1aWxkZXJTdGF0ZTo6Y3JlYXRlU3R5bGVJbWFnZSk6CisgICAgICAgICogc3R5bGUvU3R5bGVC
dWlsZGVyU3RhdGUuaDoKKyAgICAgICAgICAgICAgICBNYXRjaCB0aGUgQ1NTIHZhbHVlcyB3aXRo
IHRoZSBjb3JyZWN0IFN0eWxlIGNsYXNzLiBBbHNvLCBlbnN1cmUgaW1hZ2Utc2V0cyByZXNvbHZl
IHRoZWlyIAorICAgICAgICAgICAgICAgIGltYWdlcycgc3R5bGVzIGFzIHRoZXkgbWF5IGNvbnRh
aW4gZ3JhZGllbnRzIGFuZCBvdGhlciBjb250ZXh0LWF3YXJlIHZhbHVlcy4KKwogMjAyMC0wMS0x
OSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10gRGV2
aXJ0dWFsaXplIEZvcm1hdHRpbmdTdGF0ZQpJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI1
NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0y
MjYyLDE1ICsyMjYyLDE4IEBAIHJlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmNwcAogcmVuZGVy
aW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVC
b3hEYXRhLmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCityZW5kZXJp
bmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZURlcHJl
Y2F0ZWRGbGV4aWJsZUJveERhdGEuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVGaWx0ZXJEYXRh
LmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlRmxleGlibGVCb3hEYXRhLmNwcAogcmVuZGVyaW5n
L3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuY3BwCiByZW5kZXJpbmcvc3R5bGUvU3R5bGVHcmlk
RGF0YS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZUdyaWRJdGVtRGF0YS5jcHAKK3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZUltYWdlU2V0LmNwcAogcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJpdGVk
RGF0YS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZU1hcnF1ZWVEYXRhLmNwcAogcmVuZGVyaW5n
L3N0eWxlL1N0eWxlTXVsdGlDb2xEYXRhLmNwcAorcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJ
bWFnZS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcAogcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuY3BwCiByZW5kZXJpbmcvc3R5
bGUvU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjU0ODA4KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzcxNSw5ICsxMzcxNSwxNSBAQAogCQlDOURBREJDOTFCMUQzQjI1MDAxRjE3
RDggLyogSlNNZWRpYVNlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNNZWRpYVNlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
OURBREJDQTFCMUQzQjI1MDAxRjE3RDggLyogSlNNZWRpYVNlc3Npb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNZWRpYVNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzlGODdDRkQxQjI4RTVGNjAwOTc5QjgzIC8qIE1lZGlhU2Vzc2lvbkV2ZW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU2Vzc2lvbkV2ZW50cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDQTA5MUQ4NjIzQ0Y5MDc4MDBBRDQzNDYgLyogU3R5bGVJbWFnZVNldC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUltYWdlU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQ0EwOTFEODkyM0NGOTA4ODAwQUQ0MzQ2IC8qIFN0eWxlSW1hZ2VTZXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVJbWFnZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDQTE2MzVEQzIwNzJFNzY5MDBFN0QyQ0UgLyogUmVmZXJyZXJQb2xpY3kuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVmZXJyZXJQb2xpY3kuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQTNCRjY3QjEwRDk5QkFFMDBFNkNFNTMgLyog
U2Nyb2xsQW5pbWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2Nyb2xsQW5pbWF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQTNCRjY3
RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQ0E1MkJBRTUyM0QwQUYxNjAwREUwQjg0IC8qIFN0eWxlQ3Vyc29ySW1hZ2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVDdXJzb3JJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUNBNTJCQUU3MjNEMEFGMTcwMERFMEI4NCAvKiBTdHlsZU11bHRpSW1hZ2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVNdWx0aUltYWdlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0E1MkJBRTgyM0QwQUYxODAwREUwQjg0IC8qIFN0eWxlTXVsdGlJ
bWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZU11bHRpSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQ0E1MkJBRTkyM0QwQUYxOTAwREUwQjg0IC8qIFN0eWxlQ3Vyc29ySW1h
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVDdXJzb3JJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDQTZDMTUyRjIyMEI0QTU1MDA1NUNCRkMgLyogSlNJREJSZXF1ZXN0Q3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCUmVxdWVz
dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNBNkMxNTM3MjIwRDFF
QjMwMDU1Q0JGQyAvKiBKU0lEQkN1cnNvckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0lEQkN1cnNvckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNBNkMxNTM4MjIwRDFFQjMwMDU1Q0JGQyAvKiBKU0lEQkN1cnNvcldpdGhW
YWx1ZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lE
QkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yNTU1Myw2ICsyNTU1OSw4IEBACiAJCQkJQkNFRjQ0NEMwRTY3NDYyODAwMUMxMjg3IC8qIFN0
eWxlQ2FjaGVkSW1hZ2UuaCAqLywKIAkJCQkxQzBBQTE2QTIxOTQwREM3MDA4OTY4MjkgLyogU3R5
bGVDb2xvclNjaGVtZS5oICovLAogCQkJCTlEQUM3QzU2MUFGMkNCNjQwMDQzN0M0NCAvKiBTdHls
ZUNvbnRlbnRBbGlnbm1lbnREYXRhLmggKi8sCisJCQkJQ0E1MkJBRTUyM0QwQUYxNjAwREUwQjg0
IC8qIFN0eWxlQ3Vyc29ySW1hZ2UuY3BwICovLAorCQkJCUNBNTJCQUU5MjNEMEFGMTkwMERFMEI4
NCAvKiBTdHlsZUN1cnNvckltYWdlLmggKi8sCiAJCQkJQkM3NzlFMTUxQkIyMjZBMjAwQ0FBOEJG
IC8qIFN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhLmggKi8sCiAJCQkJQkM1RUI4QjYwRTgyMDFCRDAw
QjI1OTY1IC8qIFN0eWxlRGVwcmVjYXRlZEZsZXhpYmxlQm94RGF0YS5jcHAgKi8sCiAJCQkJQkM1
RUI4QjcwRTgyMDFCRDAwQjI1OTY1IC8qIFN0eWxlRGVwcmVjYXRlZEZsZXhpYmxlQm94RGF0YS5o
ICovLApAQCAtMjU1NjcsMTIgKzI1NTc1LDE2IEBACiAJCQkJQTExMERCOUMxNEY1REY4NzAwQTAz
QjkzIC8qIFN0eWxlR3JpZEl0ZW1EYXRhLmNwcCAqLywKIAkJCQlBMTEwREI5QTE0RjVERjc3MDBB
MDNCOTMgLyogU3R5bGVHcmlkSXRlbURhdGEuaCAqLywKIAkJCQlCQ0VGNDNDRTBFNjczREExMDAx
QzEyODcgLyogU3R5bGVJbWFnZS5oICovLAorCQkJCUNBMDkxRDg2MjNDRjkwNzgwMEFENDM0NiAv
KiBTdHlsZUltYWdlU2V0LmNwcCAqLywKKwkJCQlDQTA5MUQ4OTIzQ0Y5MDg4MDBBRDQzNDYgLyog
U3R5bGVJbWFnZVNldC5oICovLAogCQkJCUJDMjI3MzAxMEU4MkYxRTYwMEU3Rjk3NSAvKiBTdHls
ZUluaGVyaXRlZERhdGEuY3BwICovLAogCQkJCUJDMjI3MzAyMEU4MkYxRTYwMEU3Rjk3NSAvKiBT
dHlsZUluaGVyaXRlZERhdGEuaCAqLywKIAkJCQlCQzVFQjcyNzBFODFERTgxMDBCMjU5NjUgLyog
U3R5bGVNYXJxdWVlRGF0YS5jcHAgKi8sCiAJCQkJQkM1RUI3MjgwRTgxREU4MTAwQjI1OTY1IC8q
IFN0eWxlTWFycXVlZURhdGEuaCAqLywKIAkJCQlCQzVFQjc0QjBFODFFMDY3MDBCMjU5NjUgLyog
U3R5bGVNdWx0aUNvbERhdGEuY3BwICovLAogCQkJCUJDNUVCNzRDMEU4MUUwNjcwMEIyNTk2NSAv
KiBTdHlsZU11bHRpQ29sRGF0YS5oICovLAorCQkJCUNBNTJCQUU3MjNEMEFGMTcwMERFMEI4NCAv
KiBTdHlsZU11bHRpSW1hZ2UuY3BwICovLAorCQkJCUNBNTJCQUU4MjNEMEFGMTgwMERFMEI4NCAv
KiBTdHlsZU11bHRpSW1hZ2UuaCAqLywKIAkJCQlCQzIyNzJFMTBFODJFRTlCMDBFN0Y5NzUgLyog
U3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5jcHAgKi8sCiAJCQkJQkMyMjcyRTIwRTgyRUU5QjAwRTdG
OTc1IC8qIFN0eWxlUmFyZUluaGVyaXRlZERhdGEuaCAqLywKIAkJCQlCQzIyNzJCQTBFODJFQUFF
MDBFN0Y5NzUgLyogU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAgKi8sCkBAIC0zMTM1Nyw2
ICszMTM2OSw3IEBACiAJCQkJMTE5OUZBNDYyMDhFMzVBMzAwMjM1OENDIC8qIExheW91dENvbnRh
aW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkYyNkJCNkMyMzM0M0U2RjAwMkYyQkVBIC8qIExh
eW91dENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTExMzEwQ0Y1MjBCQTRBNEMwMDY1QThE
MCAvKiBMYXlvdXREZXNjZW5kYW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0MTgw
MjU1MjNENDU0OUIwMEZGQjA3MSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU0QUJBQkREMjM2MDg4RkUwMEZBNDM0NSAvKiBMYXlvdXRJbnRlZ3JhdGlv
bkxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTExMzEwQ0Y0MjBCQTRBM0QwMDY1QThE
MCAvKiBMYXlvdXRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxRDcyRjYxNUZFNjk1
MzAwQzRDMDdFIC8qIExheW91dE1pbGVzdG9uZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjA1MCw3
ICszMjA2Myw2IEBACiAJCQkJNDU4RkU0MEExNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNlYXJj
aEZpZWxkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQgLyog
UmVuZGVyU2VsZWN0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUIyNDdBNkQwQUZENjM4
MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQxODAyNTUy
M0Q0NTQ5QjAwRkZCMDcxIC8qIExheW91dEludGVncmF0aW9uQm94VHJlZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzE5NTVBODgxNjBEMTk5MjAwODU4MDI1IC8qIFJlbmRlclNuYXBzaG90dGVkUGx1
Z0luLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhDOEZBRTBERENEMzFCMDBCNTkyRjQgLyogUmVu
ZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNjY4MEU4MUNCNzEwMEIyNTk2NSAv
KiBSZW5kZXJTdHlsZUNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk1LDE3ICs5NSwxNyBAQCB2b2lkIENTU0N1cnNvckltYWdlVmFsdWU6OmN1cnNvckVsZW1l
bnRDCiAgICAgbV9ob3RTcG90LnNldFkoc3RhdGljX2Nhc3Q8aW50Pih5KSk7CiB9CiAKLXN0ZDo6
cGFpcjxDYWNoZWRJbWFnZSosIGZsb2F0PiBDU1NDdXJzb3JJbWFnZVZhbHVlOjpsb2FkSW1hZ2Uo
Q2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25z
JiBvcHRpb25zKQorSW1hZ2VXaXRoU2NhbGUgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6c2VsZWN0QmVz
dEZpdEltYWdlKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBpZiAoaXM8Q1NTSW1h
Z2VTZXRWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENTU0ltYWdlU2V0VmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkubG9hZEJlc3RGaXRJbWFnZShs
b2FkZXIsIG9wdGlvbnMpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1
ZT4obV9pbWFnZVZhbHVlLmdldCgpKS5zZWxlY3RCZXN0Rml0SW1hZ2UoZG9jdW1lbnQpOwogCi0g
ICAgaWYgKGF1dG8qIGN1cnNvckVsZW1lbnQgPSB1cGRhdGVDdXJzb3JFbGVtZW50KCpsb2FkZXIu
ZG9jdW1lbnQoKSkpIHsKKyAgICBpZiAoYXV0byogY3Vyc29yRWxlbWVudCA9IHVwZGF0ZUN1cnNv
ckVsZW1lbnQoZG9jdW1lbnQpKSB7CiAgICAgICAgIGlmIChjdXJzb3JFbGVtZW50LT5ocmVmKCkg
IT0gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKS51cmwoKSkKLSAg
ICAgICAgICAgIG1faW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFsdWU6OmNyZWF0ZShsb2FkZXIuZG9j
dW1lbnQoKS0+Y29tcGxldGVVUkwoY3Vyc29yRWxlbWVudC0+aHJlZigpKSwgbV9sb2FkZWRGcm9t
T3BhcXVlU291cmNlKTsKKyAgICAgICAgICAgIG1faW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFsdWU6
OmNyZWF0ZShkb2N1bWVudC5jb21wbGV0ZVVSTChjdXJzb3JFbGVtZW50LT5ocmVmKCkpLCBtX2xv
YWRlZEZyb21PcGFxdWVTb3VyY2UpOwogICAgIH0KIAotICAgIHJldHVybiB7IGRvd25jYXN0PENT
U0ltYWdlVmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkubG9hZEltYWdlKGxvYWRlciwgb3B0aW9u
cyksIDEgfTsKKyAgICByZXR1cm4geyBtX2ltYWdlVmFsdWUucHRyKCkgLCAxIH07CiB9CiAKIGJv
b2wgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6ZXF1YWxzKGNvbnN0IENTU0N1cnNvckltYWdlVmFsdWUm
IG90aGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1
ZS5oCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1h
Z2VWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCwxMiBAQCBjbGFzcyBFbGVtZW50
OwogY2xhc3MgU1ZHQ3Vyc29yRWxlbWVudDsKIGNsYXNzIFNWR0VsZW1lbnQ7CiAKK3N0cnVjdCBJ
bWFnZVdpdGhTY2FsZTsKKworbmFtZXNwYWNlIFN0eWxlIHsKK2NsYXNzIEJ1aWxkZXJTdGF0ZTsK
K30KKwogY2xhc3MgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSBmaW5hbCA6IHB1YmxpYyBDU1NWYWx1ZSB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxDU1NDdXJzb3JJbWFnZVZhbHVlPiBjcmVhdGUoUmVm
PENTU1ZhbHVlPiYmIGltYWdlVmFsdWUsIGJvb2wgaGFzSG90U3BvdCwgY29uc3QgSW50UG9pbnQm
IGhvdFNwb3QsIExvYWRlZEZyb21PcGFxdWVTb3VyY2UgbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSkK
QEAgLTU2LDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBj
b25zdDsKIAotICAgIHN0ZDo6cGFpcjxDYWNoZWRJbWFnZSosIGZsb2F0PiBsb2FkSW1hZ2UoQ2Fj
aGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKKyAgICBJ
bWFnZVdpdGhTY2FsZSBzZWxlY3RCZXN0Rml0SW1hZ2UoY29uc3QgRG9jdW1lbnQmKTsKIAogICAg
IHZvaWQgcmVtb3ZlUmVmZXJlbmNlZEVsZW1lbnQoU1ZHRWxlbWVudCopOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDE5ICsyOCwyMCBAQAogCiAjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgogI2luY2x1ZGUg
IkNTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVz
dC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTdHlsZUJ1aWxk
ZXJTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1DU1NJbWFnZVNldFZhbHVlOjpDU1NJbWFnZVNldFZhbHVlKExvYWRl
ZEZyb21PcGFxdWVTb3VyY2UgbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSkKK1JlZjxDU1NJbWFnZVNl
dFZhbHVlPiBDU1NJbWFnZVNldFZhbHVlOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IENTU0ltYWdlU2V0VmFsdWUpOworfQorCitDU1NJbWFnZVNldFZhbHVlOjpDU1NJbWFn
ZVNldFZhbHVlKCkKICAgICA6IENTU1ZhbHVlTGlzdChJbWFnZVNldENsYXNzLCBDb21tYVNlcGFy
YXRvcikKLSAgICAsIG1fbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZShsb2FkZWRGcm9tT3BhcXVlU291
cmNlKQogewogfQogCkBAIC01MiwxNSArNTMsMTQgQEAgdm9pZCBDU1NJbWFnZVNldFZhbHVlOjpm
aWxsSW1hZ2VTZXQoKQogICAgIHNpemVfdCBpID0gMDsKICAgICB3aGlsZSAoaSA8IGxlbmd0aCkg
ewogICAgICAgICBDU1NWYWx1ZSogaW1hZ2VWYWx1ZSA9IGl0ZW0oaSk7Ci0gICAgICAgIFVSTCBp
bWFnZVVSTCA9IGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KCppbWFnZVZhbHVlKS51cmwoKTsKLQor
ICAgICAgICBBU1NFUlQoaXM8Q1NTSW1hZ2VWYWx1ZT4oaW1hZ2VWYWx1ZSkgfHwgaXM8Q1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZT4oaW1hZ2VWYWx1ZSkpOwogICAgICAgICArK2k7CiAgICAgICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBsZW5ndGgpOwogICAgICAgICBDU1NW
YWx1ZSogc2NhbGVGYWN0b3JWYWx1ZSA9IGl0ZW0oaSk7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFj
dG9yID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpzY2FsZUZhY3RvclZhbHVlKS5mbG9h
dFZhbHVlKCk7CiAKICAgICAgICAgSW1hZ2VXaXRoU2NhbGUgaW1hZ2U7Ci0gICAgICAgIGltYWdl
LmltYWdlVVJMID0gaW1hZ2VVUkw7CisgICAgICAgIGltYWdlLnZhbHVlID0gaW1hZ2VWYWx1ZTsK
ICAgICAgICAgaW1hZ2Uuc2NhbGVGYWN0b3IgPSBzY2FsZUZhY3RvcjsKICAgICAgICAgbV9pbWFn
ZXNJblNldC5hcHBlbmQoaW1hZ2UpOwogICAgICAgICArK2k7CkBAIC03MCw3ICs3MCw3IEBAIHZv
aWQgQ1NTSW1hZ2VTZXRWYWx1ZTo6ZmlsbEltYWdlU2V0KCkKICAgICBzdGQ6OnNvcnQobV9pbWFn
ZXNJblNldC5iZWdpbigpLCBtX2ltYWdlc0luU2V0LmVuZCgpLCBDU1NJbWFnZVNldFZhbHVlOjpj
b21wYXJlQnlTY2FsZUZhY3Rvcik7CiB9CiAKLUNTU0ltYWdlU2V0VmFsdWU6OkltYWdlV2l0aFNj
YWxlIENTU0ltYWdlU2V0VmFsdWU6OmJlc3RJbWFnZUZvclNjYWxlRmFjdG9yKCkKK0ltYWdlV2l0
aFNjYWxlIENTU0ltYWdlU2V0VmFsdWU6OmJlc3RJbWFnZUZvclNjYWxlRmFjdG9yKCkKIHsKICAg
ICBpZiAoIW1faW1hZ2VzSW5TZXQuc2l6ZSgpKQogICAgICAgICBmaWxsSW1hZ2VTZXQoKTsKQEAg
LTg1LDQyICs4NSw0OSBAQCBDU1NJbWFnZVNldFZhbHVlOjpJbWFnZVdpdGhTY2FsZSBDU1NJbWFn
CiAgICAgcmV0dXJuIGltYWdlOwogfQogCi1zdGQ6OnBhaXI8Q2FjaGVkSW1hZ2UqLCBmbG9hdD4g
Q1NTSW1hZ2VTZXRWYWx1ZTo6bG9hZEJlc3RGaXRJbWFnZShDYWNoZWRSZXNvdXJjZUxvYWRlciYg
bG9hZGVyLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCitDYWNoZWRJbWFn
ZSogQ1NTSW1hZ2VTZXRWYWx1ZTo6Y2FjaGVkSW1hZ2UoKSBjb25zdAogewotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGxvYWRlci5kb2N1bWVudCgpOwotICAgIEFTU0VSVChkb2N1bWVudCk7Cisg
ICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KG1fc2VsZWN0ZWRJbWFnZVZhbHVlKSkKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KCptX3NlbGVjdGVkSW1hZ2VWYWx1ZSkuY2Fj
aGVkSW1hZ2UoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KIAotICAgIHVwZGF0ZURldmljZVNj
YWxlRmFjdG9yKCpkb2N1bWVudCk7CitJbWFnZVdpdGhTY2FsZSBDU1NJbWFnZVNldFZhbHVlOjpz
ZWxlY3RCZXN0Rml0SW1hZ2UoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQoreworICAgIHVwZGF0
ZURldmljZVNjYWxlRmFjdG9yKGRvY3VtZW50KTsKIAogICAgIGlmICghbV9hY2Nlc3NlZEJlc3RG
aXRJbWFnZSkgewogICAgICAgICBtX2FjY2Vzc2VkQmVzdEZpdEltYWdlID0gdHJ1ZTsKLQotICAg
ICAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwgd2Ugd2FudCB0byB0YWtlIG11Y2ggbW9yZSB0
aGFuIGRldmljZVNjYWxlRmFjdG9yIGludG8gYWNvdW50IGhlcmUuCi0gICAgICAgIC8vIEFsbCBm
b3JtcyBvZiBzY2FsZSBzaG91bGQgYmUgaW5jbHVkZWQ6IFBhZ2U6OnBhZ2VTY2FsZUZhY3Rvcigp
LCBGcmFtZTo6cGFnZVpvb21GYWN0b3IoKSwKLSAgICAgICAgLy8gYW5kIGFueSBDU1MgdHJhbnNm
b3Jtcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNjk4Ci0gICAg
ICAgIEltYWdlV2l0aFNjYWxlIGltYWdlID0gYmVzdEltYWdlRm9yU2NhbGVGYWN0b3IoKTsKLQot
ICAgICAgICBSZXNvdXJjZUxvYWRlck9wdGlvbnMgbG9hZE9wdGlvbnMgPSBvcHRpb25zOwotICAg
ICAgICBsb2FkT3B0aW9ucy5sb2FkZWRGcm9tT3BhcXVlU291cmNlID0gbV9sb2FkZWRGcm9tT3Bh
cXVlU291cmNlOwotICAgICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJj
ZVJlcXVlc3QoZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGltYWdlLmltYWdlVVJMKSksIGxvYWRPcHRp
b25zKTsKLSAgICAgICAgcmVxdWVzdC5zZXRJbml0aWF0b3IoY2FjaGVkUmVzb3VyY2VSZXF1ZXN0
SW5pdGlhdG9ycygpLmNzcyk7Ci0gICAgICAgIGlmIChvcHRpb25zLm1vZGUgPT0gRmV0Y2hPcHRp
b25zOjpNb2RlOjpDb3JzKQotICAgICAgICAgICAgcmVxdWVzdC51cGRhdGVGb3JBY2Nlc3NDb250
cm9sKCpkb2N1bWVudCk7Ci0KLSAgICAgICAgbV9jYWNoZWRJbWFnZSA9IGxvYWRlci5yZXF1ZXN0
SW1hZ2UoV1RGTW92ZShyZXF1ZXN0KSkudmFsdWVfb3IobnVsbHB0cik7Ci0gICAgICAgIG1fYmVz
dEZpdEltYWdlU2NhbGVGYWN0b3IgPSBpbWFnZS5zY2FsZUZhY3RvcjsKKyAgICAgICAgbV9iZXN0
Rml0SW1hZ2UgPSBiZXN0SW1hZ2VGb3JTY2FsZUZhY3RvcigpOwogICAgIH0KLSAgICByZXR1cm4g
eyBtX2NhY2hlZEltYWdlLmdldCgpLCBtX2Jlc3RGaXRJbWFnZVNjYWxlRmFjdG9yIH07CisKKyAg
ICByZXR1cm4gbV9iZXN0Rml0SW1hZ2U7CiB9CiAKIHZvaWQgQ1NTSW1hZ2VTZXRWYWx1ZTo6dXBk
YXRlRGV2aWNlU2NhbGVGYWN0b3IoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQogeworCisgICAg
Ly8gRklYTUU6IEluIHRoZSBmdXR1cmUsIHdlIHdhbnQgdG8gdGFrZSBtdWNoIG1vcmUgdGhhbiBk
ZXZpY2VTY2FsZUZhY3RvciBpbnRvIGFjb3VudCBoZXJlLgorICAgIC8vIEFsbCBmb3JtcyBvZiBz
Y2FsZSBzaG91bGQgYmUgaW5jbHVkZWQ6IFBhZ2U6OnBhZ2VTY2FsZUZhY3RvcigpLCBGcmFtZTo6
cGFnZVpvb21GYWN0b3IoKSwKKyAgICAvLyBhbmQgYW55IENTUyB0cmFuc2Zvcm1zLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE2OTgKICAgICBmbG9hdCBkZXZpY2VT
Y2FsZUZhY3RvciA9IGRvY3VtZW50LnBhZ2UoKSA/IGRvY3VtZW50LnBhZ2UoKS0+ZGV2aWNlU2Nh
bGVGYWN0b3IoKSA6IDE7CiAgICAgaWYgKGRldmljZVNjYWxlRmFjdG9yID09IG1fZGV2aWNlU2Nh
bGVGYWN0b3IpCiAgICAgICAgIHJldHVybjsKICAgICBtX2RldmljZVNjYWxlRmFjdG9yID0gZGV2
aWNlU2NhbGVGYWN0b3I7CiAgICAgbV9hY2Nlc3NlZEJlc3RGaXRJbWFnZSA9IGZhbHNlOwotICAg
IG1fY2FjaGVkSW1hZ2UgPSBudWxscHRyOworICAgIG1fc2VsZWN0ZWRJbWFnZVZhbHVlID0gbnVs
bHB0cjsKK30KKworUmVmPENTU0ltYWdlU2V0VmFsdWU+IENTU0ltYWdlU2V0VmFsdWU6OmltYWdl
U2V0V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkK
K3sKKyAgICBSZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gcmVzdWx0ID0gQ1NTSW1hZ2VTZXRWYWx1ZTo6
Y3JlYXRlKCk7CisgICAgc2l6ZV90IGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpICsgMSA8IGxlbmd0aDsgaSArPSAyKSB7CisgICAgICAgIHJlc3VsdC0+
YXBwZW5kKGJ1aWxkZXJTdGF0ZS5yZXNvbHZlSW1hZ2VTdHlsZXMoKml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soaSkpKTsKKyAgICAgICAgcmVzdWx0LT5hcHBlbmQoKml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soaSArIDEpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBTdHJpbmcgQ1NT
SW1hZ2VTZXRWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CkBAIC0xNTUsOSArMTYyLDcgQEAg
U3RyaW5nIENTU0ltYWdlU2V0VmFsdWU6OmN1c3RvbUNTU1RleHQoKQogCiBib29sIENTU0ltYWdl
U2V0VmFsdWU6OnRyYXZlcnNlU3VicmVzb3VyY2VzKGNvbnN0IFdURjo6RnVuY3Rpb248Ym9vbCAo
Y29uc3QgQ2FjaGVkUmVzb3VyY2UmKT4mIGhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2Nh
Y2hlZEltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGhhbmRsZXIoKm1f
Y2FjaGVkSW1hZ2UpOworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2VWYWx1ZSAmJiBtX3NlbGVj
dGVkSW1hZ2VWYWx1ZS0+dHJhdmVyc2VTdWJyZXNvdXJjZXMoaGFuZGxlcik7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUu
aAkocmV2aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNTMgKzI5LDU0IEBACiAjaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlck9wdGlvbnMuaCIKICNp
bmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FjaGVkSW1hZ2U7CiBjbGFzcyBDYWNoZWRSZXNvdXJj
ZUxvYWRlcjsKK2NsYXNzIENTU0ltYWdlVmFsdWU7CiBjbGFzcyBEb2N1bWVudDsKIAorbmFtZXNw
YWNlIFN0eWxlIHsKK2NsYXNzIEJ1aWxkZXJTdGF0ZTsKK30KKworc3RydWN0IEltYWdlV2l0aFNj
YWxlIHsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOworICAgIGZsb2F0IHNjYWxlRmFjdG9y
IHsgMSB9OworfTsKKwogY2xhc3MgQ1NTSW1hZ2VTZXRWYWx1ZSBmaW5hbCA6IHB1YmxpYyBDU1NW
YWx1ZUxpc3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gY3Jl
YXRlKExvYWRlZEZyb21PcGFxdWVTb3VyY2UgbG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ltYWdlU2V0VmFsdWUobG9hZGVkRnJv
bU9wYXF1ZVNvdXJjZSkpOwotICAgIH0KKyAgICBzdGF0aWMgUmVmPENTU0ltYWdlU2V0VmFsdWU+
IGNyZWF0ZSgpOwogICAgIH5DU1NJbWFnZVNldFZhbHVlKCk7CiAKLSAgICBzdGQ6OnBhaXI8Q2Fj
aGVkSW1hZ2UqLCBmbG9hdD4gIGxvYWRCZXN0Rml0SW1hZ2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXIm
LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKLSAgICBDYWNoZWRJbWFnZSogY2FjaGVk
SW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEltYWdlLmdldCgpOyB9CisgICAgSW1hZ2VX
aXRoU2NhbGUgc2VsZWN0QmVzdEZpdEltYWdlKGNvbnN0IERvY3VtZW50Jik7CisgICAgQ2FjaGVk
SW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3Q7CiAKICAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4dCgp
IGNvbnN0OwogCi0gICAgc3RydWN0IEltYWdlV2l0aFNjYWxlIHsKLSAgICAgICAgVVJMIGltYWdl
VVJMOwotICAgICAgICBmbG9hdCBzY2FsZUZhY3RvcjsKLSAgICB9OwotCiAgICAgYm9vbCB0cmF2
ZXJzZVN1YnJlc291cmNlcyhjb25zdCBXVEY6OkZ1bmN0aW9uPGJvb2wgKGNvbnN0IENhY2hlZFJl
c291cmNlJik+JiBoYW5kbGVyKSBjb25zdDsKIAogICAgIHZvaWQgdXBkYXRlRGV2aWNlU2NhbGVG
YWN0b3IoY29uc3QgRG9jdW1lbnQmKTsKIAotICAgIFVSTCBiZXN0SW1hZ2VGb3JTY2FsZUZhY3Rv
clVSTCgpIHsgcmV0dXJuIGJlc3RJbWFnZUZvclNjYWxlRmFjdG9yKCkuaW1hZ2VVUkw7IH0KKyAg
ICBSZWY8Q1NTSW1hZ2VTZXRWYWx1ZT4gaW1hZ2VTZXRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VXaXRoU2NhbGUgYmVzdElt
YWdlRm9yU2NhbGVGYWN0b3IoKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDU1NJbWFnZVNl
dFZhbHVlKExvYWRlZEZyb21PcGFxdWVTb3VyY2UpOworICAgIENTU0ltYWdlU2V0VmFsdWUoKTsK
IAogICAgIHZvaWQgZmlsbEltYWdlU2V0KCk7CiAgICAgc3RhdGljIGlubGluZSBib29sIGNvbXBh
cmVCeVNjYWxlRmFjdG9yKEltYWdlV2l0aFNjYWxlIGZpcnN0LCBJbWFnZVdpdGhTY2FsZSBzZWNv
bmQpIHsgcmV0dXJuIGZpcnN0LnNjYWxlRmFjdG9yIDwgc2Vjb25kLnNjYWxlRmFjdG9yOyB9CiAK
LSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRJbWFnZT4gbV9jYWNoZWRJbWFnZTsKKyAg
ICBSZWZQdHI8Q1NTVmFsdWU+IG1fc2VsZWN0ZWRJbWFnZVZhbHVlOwogICAgIGJvb2wgbV9hY2Nl
c3NlZEJlc3RGaXRJbWFnZSB7IGZhbHNlIH07Ci0gICAgZmxvYXQgbV9iZXN0Rml0SW1hZ2VTY2Fs
ZUZhY3RvciB7IDEgfTsKKyAgICBJbWFnZVdpdGhTY2FsZSBtX2Jlc3RGaXRJbWFnZTsKICAgICBm
bG9hdCBtX2RldmljZVNjYWxlRmFjdG9yIHsgMSB9OwotCiAgICAgVmVjdG9yPEltYWdlV2l0aFNj
YWxlPiBtX2ltYWdlc0luU2V0OwotICAgIExvYWRlZEZyb21PcGFxdWVTb3VyY2UgbV9sb2FkZWRG
cm9tT3BhcXVlU291cmNlIHsgTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6Tm8gfTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UHJvcGVydHlQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjE1MSw3ICsyMTUxLDcgQEAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZQogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUN1cnNvcihDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgYm9vbCBpblF1aXJr
c01vZGUpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdDsKLSAgICB3aGlsZSAoUmVm
UHRyPENTU1ZhbHVlPiBpbWFnZSA9IGNvbnN1bWVJbWFnZShyYW5nZSwgY29udGV4dCwgQ29uc3Vt
ZUdlbmVyYXRlZEltYWdlOjpGb3JiaWQpKSB7CisgICAgd2hpbGUgKFJlZlB0cjxDU1NWYWx1ZT4g
aW1hZ2UgPSBjb25zdW1lSW1hZ2UocmFuZ2UsIGNvbnRleHQsIHsgQWxsb3dlZEltYWdlVHlwZTo6
VVJMRnVuY3Rpb24sIEFsbG93ZWRJbWFnZVR5cGU6OkltYWdlU2V0IH0pKSB7CiAgICAgICAgIGRv
dWJsZSBudW07CiAgICAgICAgIEludFBvaW50IGhvdFNwb3QoLTEsIC0xKTsKICAgICAgICAgYm9v
bCBob3RTcG90U3BlY2lmaWVkID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCShyZXZpc2lvbiAy
NTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NzksMjQgKzE0NzksMTYgQEAgc3RhdGljIFJl
ZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUdlbmVyYXRlZAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXN0YXRpYyBTdHJpbmdWaWV3IGNvbnN1bWVVcmxPclN0cmluZ0FzU3RyaW5nVmlldyhDU1NQYXJz
ZXJUb2tlblJhbmdlJiBhcmdzKQotewotICAgIGlmIChhcmdzLnBlZWsoKS50eXBlKCkgPT0gU3Ry
aW5nVG9rZW4pCi0gICAgICAgIHJldHVybiBhcmdzLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNl
KCkudmFsdWUoKTsKLSAgICByZXR1cm4gY29uc3VtZVVybEFzU3RyaW5nVmlldyhhcmdzKTsKLX0K
LQotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlU2V0KENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQorc3RhdGljIFJl
ZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlU2V0KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0LCBPcHRpb25TZXQ8QWxsb3dlZEltYWdl
VHlwZT4gYWxsb3dlZEltYWdlVHlwZSkKIHsKICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdl
Q29weSA9IHJhbmdlOwogICAgIENTU1BhcnNlclRva2VuUmFuZ2UgYXJncyA9IGNvbnN1bWVGdW5j
dGlvbihyYW5nZUNvcHkpOwotICAgIFJlZlB0cjxDU1NJbWFnZVNldFZhbHVlPiBpbWFnZVNldCA9
IENTU0ltYWdlU2V0VmFsdWU6OmNyZWF0ZShjb250ZXh0LmlzQ29udGVudE9wYXF1ZSA/IExvYWRl
ZEZyb21PcGFxdWVTb3VyY2U6OlllcyA6IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6Ok5vKTsKKyAg
ICBSZWZQdHI8Q1NTSW1hZ2VTZXRWYWx1ZT4gaW1hZ2VTZXQgPSBDU1NJbWFnZVNldFZhbHVlOjpj
cmVhdGUoKTsKICAgICBkbyB7Ci0gICAgICAgIEF0b21TdHJpbmcgdXJsVmFsdWUgPSBjb25zdW1l
VXJsT3JTdHJpbmdBc1N0cmluZ1ZpZXcoYXJncykudG9BdG9tU3RyaW5nKCk7Ci0gICAgICAgIGlm
ICh1cmxWYWx1ZS5pc051bGwoKSkKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBpbWFnZSA9IGNv
bnN1bWVJbWFnZShhcmdzLCBjb250ZXh0LCAoYWxsb3dlZEltYWdlVHlwZSB8IEFsbG93ZWRJbWFn
ZVR5cGU6OlJhd1N0cmluZ0FzVVJMKSAtIEFsbG93ZWRJbWFnZVR5cGU6OkltYWdlU2V0KTsKKyAg
ICAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAg
IFJlZlB0cjxDU1NWYWx1ZT4gaW1hZ2UgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY29tcGxldGVV
UkwoY29udGV4dCwgdXJsVmFsdWUpLCBjb250ZXh0LmlzQ29udGVudE9wYXF1ZSA/IExvYWRlZEZy
b21PcGFxdWVTb3VyY2U6OlllcyA6IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6Ok5vKTsKICAgICAg
ICAgaW1hZ2VTZXQtPmFwcGVuZChpbWFnZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgICAgICBj
b25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSBhcmdzLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNw
YWNlKCk7CkBAIC0xNzExLDE5ICsxNzAzLDI1IEBAIFJlZlB0cjxDU1NTaGFkb3dWYWx1ZT4gY29u
c3VtZVNpbmdsZVNoYWQKICAgICByZXR1cm4gQ1NTU2hhZG93VmFsdWU6OmNyZWF0ZShXVEZNb3Zl
KGhvcml6b250YWxPZmZzZXQpLCBXVEZNb3ZlKHZlcnRpY2FsT2Zmc2V0KSwgV1RGTW92ZShibHVy
UmFkaXVzKSwgV1RGTW92ZShzcHJlYWREaXN0YW5jZSksIFdURk1vdmUoc3R5bGUpLCBXVEZNb3Zl
KGNvbG9yKSk7CiB9CiAKLVJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJDb250ZXh0IGNvbnRleHQsIENvbnN1bWVHZW5lcmF0
ZWRJbWFnZSBnZW5lcmF0ZWRJbWFnZSkKK1JlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJDb250ZXh0IGNvbnRleHQsIE9wdGlv
blNldDxBbGxvd2VkSW1hZ2VUeXBlPiBBbGxvd2VkSW1hZ2VUeXBlKQogewotICAgIEF0b21TdHJp
bmcgdXJpID0gY29uc3VtZVVybEFzU3RyaW5nVmlldyhyYW5nZSkudG9BdG9tU3RyaW5nKCk7Ci0g
ICAgaWYgKCF1cmkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBDU1NJbWFnZVZhbHVlOjpjcmVh
dGUoY29tcGxldGVVUkwoY29udGV4dCwgdXJpKSwgY29udGV4dC5pc0NvbnRlbnRPcGFxdWUgPyBM
b2FkZWRGcm9tT3BhcXVlU291cmNlOjpZZXMgOiBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpObyk7
CisgICAgaWYgKChyYW5nZS5wZWVrKCkudHlwZSgpID09IFN0cmluZ1Rva2VuKSAmJiAoQWxsb3dl
ZEltYWdlVHlwZSAmIEFsbG93ZWRJbWFnZVR5cGU6OlJhd1N0cmluZ0FzVVJMKSkKKyAgICAgICAg
cmV0dXJuIENTU0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTChjb250ZXh0LCByYW5nZS5j
b25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLnZhbHVlKCkudG9BdG9tU3RyaW5nKCkpLCBjb250
ZXh0LmlzQ29udGVudE9wYXF1ZSA/IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6OlllcyA6IExvYWRl
ZEZyb21PcGFxdWVTb3VyY2U6Ok5vKTsKIAogICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpID09
IEZ1bmN0aW9uVG9rZW4pIHsKICAgICAgICAgQ1NTVmFsdWVJRCBpZCA9IHJhbmdlLnBlZWsoKS5m
dW5jdGlvbklkKCk7Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdEltYWdlU2V0IHx8
IGlkID09IENTU1ZhbHVlSW1hZ2VTZXQpCi0gICAgICAgICAgICByZXR1cm4gY29uc3VtZUltYWdl
U2V0KHJhbmdlLCBjb250ZXh0KTsKLSAgICAgICAgaWYgKGdlbmVyYXRlZEltYWdlID09IENvbnN1
bWVHZW5lcmF0ZWRJbWFnZTo6QWxsb3cgJiYgaXNHZW5lcmF0ZWRJbWFnZShpZCkpCisgICAgICAg
IGlmICgoQWxsb3dlZEltYWdlVHlwZSAmIEFsbG93ZWRJbWFnZVR5cGU6OkltYWdlU2V0KSAmJiAo
aWQgPT0gQ1NTVmFsdWVXZWJraXRJbWFnZVNldCB8fCBpZCA9PSBDU1NWYWx1ZUltYWdlU2V0KSkK
KyAgICAgICAgICAgIHJldHVybiBjb25zdW1lSW1hZ2VTZXQocmFuZ2UsIGNvbnRleHQsIEFsbG93
ZWRJbWFnZVR5cGUpOworICAgICAgICBpZiAoKEFsbG93ZWRJbWFnZVR5cGUgJiBBbGxvd2VkSW1h
Z2VUeXBlOjpHZW5lcmF0ZWRJbWFnZSkgJiYgaXNHZW5lcmF0ZWRJbWFnZShpZCkpCiAgICAgICAg
ICAgICByZXR1cm4gY29uc3VtZUdlbmVyYXRlZEltYWdlKHJhbmdlLCBjb250ZXh0KTsKICAgICB9
CisKKyAgICBpZiAoQWxsb3dlZEltYWdlVHlwZSAmIEFsbG93ZWRJbWFnZVR5cGU6OlVSTEZ1bmN0
aW9uKSB7CisgICAgICAgIGF1dG8gdXJpID0gY29uc3VtZVVybEFzU3RyaW5nVmlldyhyYW5nZSk7
CisgICAgICAgIGlmICghdXJpLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIENTU0ltYWdl
VmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTChjb250ZXh0LCB1cmkudG9BdG9tU3RyaW5nKCkpLCBj
b250ZXh0LmlzQ29udGVudE9wYXF1ZSA/IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6OlllcyA6IExv
YWRlZEZyb21PcGFxdWVTb3VyY2U6Ok5vKTsKKyAgICB9CisKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VySGVscGVycy5oCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw2ICszNiw3IEBACiAjaW5jbHVkZSAiQ1NTU2hhZG93VmFsdWUuaCIKICNpbmNsdWRlICJDU1NW
YWx1ZVBvb2wuaCIKICNpbmNsdWRlICJMZW5ndGguaCIgLy8gRm9yIFZhbHVlUmFuZ2UKKyNpbmNs
dWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODksMTIg
KzkwLDE1IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0aW8KIGJvb2wg
Y29uc3VtZVBvc2l0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0
bGVzc1F1aXJrLCBQb3NpdGlvblN5bnRheCwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgcmVz
dWx0WCwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgcmVzdWx0WSk7CiBib29sIGNvbnN1bWVP
bmVPclR3b1ZhbHVlZFBvc2l0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2Rl
LCBVbml0bGVzc1F1aXJrLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiByZXN1bHRYLCBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiByZXN1bHRZKTsKIAotZW51bSBjbGFzcyBDb25zdW1lR2Vu
ZXJhdGVkSW1hZ2UgewotICAgIEFsbG93LAotICAgIEZvcmJpZAorZW51bSBjbGFzcyBBbGxvd2Vk
SW1hZ2VUeXBlIDogdWludDhfdCB7CisgICAgVVJMRnVuY3Rpb24gPSAxIDw8IDAsCisgICAgUmF3
U3RyaW5nQXNVUkwgPSAxIDw8IDEsCisgICAgSW1hZ2VTZXQgPSAxIDw8IDIsCisgICAgR2VuZXJh
dGVkSW1hZ2UgPSAxIDw8IDMKIH07CiAKLVJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlKENT
U1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJDb250ZXh0LCBDb25zdW1lR2VuZXJhdGVkSW1h
Z2UgPSBDb25zdW1lR2VuZXJhdGVkSW1hZ2U6OkFsbG93KTsKK1JlZlB0cjxDU1NWYWx1ZT4gY29u
c3VtZUltYWdlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJDb250ZXh0LCBPcHRpb25T
ZXQ8QWxsb3dlZEltYWdlVHlwZT4gPSB7IEFsbG93ZWRJbWFnZVR5cGU6OlVSTEZ1bmN0aW9uLCBB
bGxvd2VkSW1hZ2VUeXBlOjpJbWFnZVNldCwgQWxsb3dlZEltYWdlVHlwZTo6R2VuZXJhdGVkSW1h
Z2UgfSk7CisKIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlT3JOb25lKENTU1BhcnNlclRv
a2VuUmFuZ2UmLCBDU1NQYXJzZXJDb250ZXh0KTsKIAogZW51bSBjbGFzcyBBbGxvd2VkRmlsdGVy
RnVuY3Rpb25zIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3Bl
cnR5QW5pbWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMzLDYgKzMzMywxMiBAQCBzdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUlt
YWdlPiBibGVuZEZ1CiAgICAgaWYgKCFmcm9tIHx8ICF0bykKICAgICAgICAgcmV0dXJuIHRvOwog
CisgICAgZnJvbSA9IGZyb20tPnNlbGVjdGVkSW1hZ2UoKTsKKyAgICB0byA9IHRvLT5zZWxlY3Rl
ZEltYWdlKCk7CisKKyAgICBpZiAoIWZyb20gfHwgIXRvKQorICAgICAgICByZXR1cm4gdG87ICAg
IAorCiAgICAgLy8gQW5pbWF0aW9uIGJldHdlZW4gdHdvIGdlbmVyYXRlZCBpbWFnZXMuIENyb3Nz
IGZhZGUgZm9yIGFsbCBvdGhlciBjYXNlcy4KICAgICBpZiAoaXM8U3R5bGVHZW5lcmF0ZWRJbWFn
ZT4oKmZyb20pICYmIGlzPFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCp0bykpIHsKICAgICAgICAgQ1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVyYXRlZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJh
dGVkSW1hZ2U+KCpmcm9tKS5pbWFnZVZhbHVlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDI1NDgwOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk2Miw3ICs5NjIsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpwYWludEZpbGxMYXllCiAKICAgICAgICAgICAgIGF1dG8gZHJhd1Jlc3VsdCA9IGNvbnRleHQu
ZHJhd1RpbGVkSW1hZ2UoKmltYWdlLCBnZW9tZXRyeS5kZXN0UmVjdCgpLCB0b0xheW91dFBvaW50
KGdlb21ldHJ5LnJlbGF0aXZlUGhhc2UoKSksIGdlb21ldHJ5LnRpbGVTaXplKCksIGdlb21ldHJ5
LnNwYWNlU2l6ZSgpLCBvcHRpb25zKTsKICAgICAgICAgICAgIGlmIChkcmF3UmVzdWx0ID09IElt
YWdlRHJhd1Jlc3VsdDo6RGlkUmVxdWVzdERlY29kaW5nKSB7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKGJnSW1hZ2UtPmlzQ2FjaGVkSW1hZ2UoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGJn
SW1hZ2UtPmhhc0NhY2hlZEltYWdlKCkpOwogICAgICAgICAgICAgICAgIGJnSW1hZ2UtPmNhY2hl
ZEltYWdlKCktPmFkZENsaWVudFdhaXRpbmdGb3JBc3luY0RlY29kaW5nKCp0aGlzKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwCShyZXZpc2lvbiAy
NTQ4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZVN0
eWxlSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIFJlbmRlckltYWdl
UmVzb3VyY2VTdHlsZUltYWdlOjpSZW5kZXJJbWEKIAogdm9pZCBSZW5kZXJJbWFnZVJlc291cmNl
U3R5bGVJbWFnZTo6aW5pdGlhbGl6ZShSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKIHsKLSAgICBS
ZW5kZXJJbWFnZVJlc291cmNlOjppbml0aWFsaXplKHJlbmRlcmVyLCBtX3N0eWxlSW1hZ2UtPmlz
Q2FjaGVkSW1hZ2UoKSA/IG1fc3R5bGVJbWFnZS5nZXQoKS5jYWNoZWRJbWFnZSgpIDogbnVsbHB0
cik7CisgICAgUmVuZGVySW1hZ2VSZXNvdXJjZTo6aW5pdGlhbGl6ZShyZW5kZXJlciwgbV9zdHls
ZUltYWdlLT5oYXNDYWNoZWRJbWFnZSgpID8gbV9zdHlsZUltYWdlLmdldCgpLmNhY2hlZEltYWdl
KCkgOiBudWxscHRyKTsKICAgICBtX3N0eWxlSW1hZ2UtPmFkZENsaWVudCh0aGlzLT5yZW5kZXJl
cigpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA3LDcgKzIx
MDcsNyBAQCBzdGF0aWMgYm9vbCBjYW5EaXJlY3RseUNvbXBvc2l0ZUJhY2tncm91CiAKICAgICAv
LyBGSVhNRTogc3VwcG9ydCBncmFkaWVudHMgd2l0aCBpc0dlbmVyYXRlZEltYWdlLgogICAgIGF1
dG8qIHN0eWxlSW1hZ2UgPSBmaWxsTGF5ZXIuaW1hZ2UoKTsKLSAgICBpZiAoIXN0eWxlSW1hZ2Ut
PmlzQ2FjaGVkSW1hZ2UoKSkKKyAgICBpZiAoIXN0eWxlSW1hZ2UtPmhhc0NhY2hlZEltYWdlKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8qIGltYWdlID0gc3R5bGVJbWFnZS0+
Y2FjaGVkSW1hZ2UoKS0+aW1hZ2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9TaGFwZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU2hhcGVWYWx1ZS5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NyArMzUsNyBAQCBib29sIFNoYXBlVmFsdWU6OmlzSW1hZ2VWYWxpZCgpIGNvbnN0CiB7CiAgICAg
aWYgKCFtX2ltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1faW1hZ2UtPmlz
Q2FjaGVkSW1hZ2UoKSkgeworICAgIGlmIChtX2ltYWdlLT5oYXNDYWNoZWRJbWFnZSgpKSB7CiAg
ICAgICAgIGF1dG8qIGNhY2hlZEltYWdlID0gbV9pbWFnZS0+Y2FjaGVkSW1hZ2UoKTsKICAgICAg
ICAgcmV0dXJuIGNhY2hlZEltYWdlICYmIGNhY2hlZEltYWdlLT5oYXNJbWFnZSgpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNo
ZWRJbWFnZS5jcHAJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQs
NiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2UuaCIK
IAotI2luY2x1ZGUgIkNTU0N1cnNvckltYWdlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NJbWFnZVNl
dFZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNhY2hlZElt
YWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgpAQCAtMzMsMTkgKzMxLDE5IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU3R5bGVDYWNoZWRJbWFnZTo6U3R5bGVDYWNoZWRJbWFn
ZShDU1NWYWx1ZSYgY3NzVmFsdWUpCi0gICAgOiBtX2Nzc1ZhbHVlKGNzc1ZhbHVlKQorUmVmPFN0
eWxlQ2FjaGVkSW1hZ2U+IFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShDU1NJbWFnZVZhbHVlJiBj
c3NWYWx1ZSwgZmxvYXQgc2NhbGVGYWN0b3IpCiB7Ci0gICAgQVNTRVJUKGlzPENTU0ltYWdlVmFs
dWU+KG1fY3NzVmFsdWUpIHx8IGlzPENTU0ltYWdlU2V0VmFsdWU+KG1fY3NzVmFsdWUpIHx8IGlz
PENTU0N1cnNvckltYWdlVmFsdWU+KG1fY3NzVmFsdWUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTdHlsZUNhY2hlZEltYWdlKGNzc1ZhbHVlLCBzY2FsZUZhY3RvcikpOworfQogCitTdHls
ZUNhY2hlZEltYWdlOjpTdHlsZUNhY2hlZEltYWdlKENTU0ltYWdlVmFsdWUmIGNzc1ZhbHVlLCBm
bG9hdCBzY2FsZUZhY3RvcikKKyAgICA6IG1fY3NzVmFsdWUoY3NzVmFsdWUpCisgICAgLCBtX3Nj
YWxlRmFjdG9yKHNjYWxlRmFjdG9yKQorewogICAgIG1faXNDYWNoZWRJbWFnZSA9IHRydWU7Ci0K
LSAgICAvLyBDU1NJbWFnZVZhbHVlIGRvZXNuJ3QgZ2V0IGludmFsaWRhdGVkIHNvIHdlIGNhbiBn
cmFiIHRoZSBDYWNoZWRJbWFnZSBpbW1lZGlhdGVseSBpZiBpdCBleGlzdHMuCi0gICAgaWYgKGlz
PENTU0ltYWdlVmFsdWU+KG1fY3NzVmFsdWUpKSB7Ci0gICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBk
b3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX2Nzc1ZhbHVlLmdldCgpKS5jYWNoZWRJbWFnZSgpOwot
ICAgICAgICBpZiAobV9jYWNoZWRJbWFnZSkKLSAgICAgICAgICAgIG1faXNQZW5kaW5nID0gZmFs
c2U7Ci0gICAgfQorICAgIG1fY2FjaGVkSW1hZ2UgPSBtX2Nzc1ZhbHVlLT5jYWNoZWRJbWFnZSgp
OworICAgIGlmIChtX2NhY2hlZEltYWdlKQorICAgICAgICBtX2lzUGVuZGluZyA9IGZhbHNlOwog
fQogCiBTdHlsZUNhY2hlZEltYWdlOjp+U3R5bGVDYWNoZWRJbWFnZSgpID0gZGVmYXVsdDsKQEAg
LTY4LDQxICs2NiwxNCBAQCBib29sIFN0eWxlQ2FjaGVkSW1hZ2U6Om9wZXJhdG9yPT0oY29uc3Qg
CiAKIFVSTCBTdHlsZUNhY2hlZEltYWdlOjppbWFnZVVSTCgpCiB7Ci0gICAgaWYgKGlzPENTU0lt
YWdlVmFsdWU+KG1fY3NzVmFsdWUpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VW
YWx1ZT4obV9jc3NWYWx1ZS5nZXQoKSkudXJsKCk7Ci0KLSAgICBpZiAoaXM8Q1NTSW1hZ2VTZXRW
YWx1ZT4obV9jc3NWYWx1ZSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVNldFZh
bHVlPihtX2Nzc1ZhbHVlLmdldCgpKS5iZXN0SW1hZ2VGb3JTY2FsZUZhY3RvclVSTCgpOwotCi0g
ICAgaWYgKGlzPENTU0N1cnNvckltYWdlVmFsdWU+KG1fY3NzVmFsdWUuZ2V0KCkpKQotICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZS5nZXQoKSku
aW1hZ2VVUkwoKTsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07
CisgICAgcmV0dXJuIG1fY3NzVmFsdWUtPnVybCgpOwogfQogCiB2b2lkIFN0eWxlQ2FjaGVkSW1h
Z2U6OmxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2Fk
ZXJPcHRpb25zJiBvcHRpb25zKQogewogICAgIEFTU0VSVChtX2lzUGVuZGluZyk7CiAgICAgbV9p
c1BlbmRpbmcgPSBmYWxzZTsKLQotICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPihtX2Nzc1ZhbHVl
KSkgewotICAgICAgICBhdXRvJiBpbWFnZVZhbHVlID0gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4o
bV9jc3NWYWx1ZS5nZXQoKSk7Ci0gICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBpbWFnZVZhbHVlLmxv
YWRJbWFnZShsb2FkZXIsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KG1fY3NzVmFsdWUpKSB7Ci0gICAgICAgIGF1dG8mIGlt
YWdlU2V0VmFsdWUgPSBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPihtX2Nzc1ZhbHVlLmdldCgp
KTsKLSAgICAgICAgc3RkOjp0aWUobV9jYWNoZWRJbWFnZSwgbV9zY2FsZUZhY3RvcikgPSBpbWFn
ZVNldFZhbHVlLmxvYWRCZXN0Rml0SW1hZ2UobG9hZGVyLCBvcHRpb25zKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChpczxDU1NDdXJzb3JJbWFnZVZhbHVlPihtX2Nzc1ZhbHVl
LmdldCgpKSkgewotICAgICAgICBhdXRvJiBjdXJzb3JWYWx1ZSA9IGRvd25jYXN0PENTU0N1cnNv
ckltYWdlVmFsdWU+KG1fY3NzVmFsdWUuZ2V0KCkpOwotICAgICAgICBzdGQ6OnRpZShtX2NhY2hl
ZEltYWdlLCBtX3NjYWxlRmFjdG9yKSA9IGN1cnNvclZhbHVlLmxvYWRJbWFnZShsb2FkZXIsIG9w
dGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG1fY2FjaGVkSW1hZ2UgPSBtX2Nz
c1ZhbHVlLT5sb2FkSW1hZ2UobG9hZGVyLCBvcHRpb25zKTsKIH0KIAogQ2FjaGVkSW1hZ2UqIFN0
eWxlQ2FjaGVkSW1hZ2U6OmNhY2hlZEltYWdlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuaAkocmV2aXNpb24gMjU0
ODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIENTU1ZhbHVlOworY2xhc3MgQ1NTSW1hZ2VWYWx1ZTsKIGNsYXNzIENhY2hlZElt
YWdlOwogY2xhc3MgRG9jdW1lbnQ7CiAKIGNsYXNzIFN0eWxlQ2FjaGVkSW1hZ2UgZmluYWwgOiBw
dWJsaWMgU3R5bGVJbWFnZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxTdHlsZUNhY2hlZEltYWdlPiBjcmVhdGUoQ1NTVmFsdWUmIGNzc1Zh
bHVlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFN0eWxlQ2FjaGVkSW1hZ2UoY3NzVmFsdWUpKTsg
fQorICAgIHN0YXRpYyBSZWY8U3R5bGVDYWNoZWRJbWFnZT4gY3JlYXRlKENTU0ltYWdlVmFsdWUm
IGNzc1ZhbHVlLCBmbG9hdCBzY2FsZUZhY3RvciA9IDEpOwogICAgIHZpcnR1YWwgflN0eWxlQ2Fj
aGVkSW1hZ2UoKTsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZUltYWdlJiBvdGhl
cikgY29uc3QgZmluYWw7CkBAIC02NCwxMCArNjUsMTAgQEAgcHVibGljOgogICAgIGJvb2wga25v
d25Ub0JlT3BhcXVlKGNvbnN0IFJlbmRlckVsZW1lbnQqKSBjb25zdCBmaW5hbDsKIAogcHJpdmF0
ZToKLSAgICBTdHlsZUNhY2hlZEltYWdlKENTU1ZhbHVlJik7CisgICAgU3R5bGVDYWNoZWRJbWFn
ZShDU1NJbWFnZVZhbHVlJiwgZmxvYXQpOwogICAgIFVSTCBpbWFnZVVSTCgpOwogCi0gICAgUmVm
PENTU1ZhbHVlPiBtX2Nzc1ZhbHVlOworICAgIFJlZjxDU1NJbWFnZVZhbHVlPiBtX2Nzc1ZhbHVl
OwogICAgIGJvb2wgbV9pc1BlbmRpbmcgeyB0cnVlIH07CiAgICAgbXV0YWJsZSBmbG9hdCBtX3Nj
YWxlRmFjdG9yIHsgMSB9OwogICAgIG11dGFibGUgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
SW1hZ2U+IG1fY2FjaGVkSW1hZ2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvU3R5bGVDdXJzb3JJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1cnNvckltYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlzdG8g
KGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyICht
dWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUtMjAwOCwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTm9h
bSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyAgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU3R5bGVDdXJzb3JJbWFnZS5oIgorCisjaW5jbHVkZSAiQ1NTQ3Vyc29ySW1hZ2VW
YWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltYWdlU2V0VmFsdWUuaCIKKyNpbmNsdWRlICJDYWNoZWRJ
bWFnZS5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWY8U3R5bGVDdXJzb3JJbWFnZT4gU3R5bGVD
dXJzb3JJbWFnZTo6Y3JlYXRlKENTU0N1cnNvckltYWdlVmFsdWUmIGNzc1ZhbHVlKQoreyAKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHlsZUN1cnNvckltYWdlKGNzc1ZhbHVlKSk7IAorfQor
Citib29sIFN0eWxlQ3Vyc29ySW1hZ2U6Om9wZXJhdG9yPT0oY29uc3QgU3R5bGVJbWFnZSYgb3Ro
ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzPFN0eWxlQ3Vyc29ySW1hZ2U+KG90aGVyKSAmJiBl
cXVhbHMoZG93bmNhc3Q8U3R5bGVDdXJzb3JJbWFnZT4ob3RoZXIpKTsKK30KKworUmVmPENTU1Zh
bHVlPiBTdHlsZUN1cnNvckltYWdlOjpjc3NWYWx1ZSgpIGNvbnN0Cit7IAorICAgIHJldHVybiBt
X2Nzc1ZhbHVlLmNvcHlSZWYoKTsgCit9CisKK1N0eWxlQ3Vyc29ySW1hZ2U6OlN0eWxlQ3Vyc29y
SW1hZ2UoQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSYgY3NzVmFsdWUpCisgICAgOiBtX2Nzc1ZhbHVlKGNz
c1ZhbHVlKQoreworICAgIG1faXNDdXJzb3JJbWFnZSA9IHRydWU7Cit9CisKK1N0eWxlQ3Vyc29y
SW1hZ2U6On5TdHlsZUN1cnNvckltYWdlKCkgPSBkZWZhdWx0OworCitJbWFnZVdpdGhTY2FsZSBT
dHlsZUN1cnNvckltYWdlOjpzZWxlY3RCZXN0Rml0SW1hZ2UoY29uc3QgRG9jdW1lbnQmIGRvY3Vt
ZW50KSBjb25zdAoreworICAgIHJldHVybiBtX2Nzc1ZhbHVlLT5zZWxlY3RCZXN0Rml0SW1hZ2Uo
ZG9jdW1lbnQpOworfQorCit2b2lkIFN0eWxlQ3Vyc29ySW1hZ2U6OnNldENvbnRhaW5lckNvbnRl
eHRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmxvYXRT
aXplJiBjb250YWluZXJTaXplLCBmbG9hdCBjb250YWluZXJab29tKQoreworICAgIGlmICghaGFz
Q2FjaGVkSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhY2hlZEltYWdlKCktPnNldENv
bnRhaW5lckNvbnRleHRGb3JDbGllbnQocmVuZGVyZXIsIExheW91dFNpemUoY29udGFpbmVyU2l6
ZSksIGNvbnRhaW5lclpvb20sIG1fY3NzVmFsdWUtPmltYWdlVVJMKCkpOworfQorCit9CgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXJz
b3JJbWFnZS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAj
IworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXJzb3JJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1cnNvckltYWdlLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAw
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUtMjAw
OCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyAgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlN0eWxlTXVsdGlJbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIENTU0N1cnNvckltYWdlVmFsdWU7CisKK3N0cnVjdCBJbWFnZVdpdGhTY2FsZTsKKwor
Y2xhc3MgU3R5bGVDdXJzb3JJbWFnZSBmaW5hbCA6IHB1YmxpYyBTdHlsZU11bHRpSW1hZ2Ugewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U3R5
bGVDdXJzb3JJbWFnZT4gY3JlYXRlKENTU0N1cnNvckltYWdlVmFsdWUmKTsKKyAgICB2aXJ0dWFs
IH5TdHlsZUN1cnNvckltYWdlKCk7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlSW1h
Z2UmIG90aGVyKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNldENvbnRhaW5lckNvbnRl
eHRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmxvYXRT
aXplJiBjb250YWluZXJTaXplLCBmbG9hdCBjb250YWluZXJab29tKSBmaW5hbDsKKyAgICBSZWY8
Q1NTVmFsdWU+IGNzc1ZhbHVlKCkgY29uc3QgZmluYWw7CisgICAgSW1hZ2VXaXRoU2NhbGUgc2Vs
ZWN0QmVzdEZpdEltYWdlKGNvbnN0IERvY3VtZW50JikgY29uc3QgZmluYWw7CisKKyAgICBleHBs
aWNpdCBTdHlsZUN1cnNvckltYWdlKENTU0N1cnNvckltYWdlVmFsdWUmKTsKKyAgICBSZWY8Q1NT
Q3Vyc29ySW1hZ2VWYWx1ZT4gbV9jc3NWYWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19TVFlMRV9JTUFHRShTdHlsZUN1cnNvckltYWdl
LCBpc0N1cnNvckltYWdlKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlQ3Vyc29ySW1hZ2UuaApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhl
Y3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaAkocmV2
aXNpb24gMjU0ODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1h
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTggKzY3LDI4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGZsb2F0IGltYWdlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiAxOyB9CiAgICAgdmly
dHVhbCBib29sIGtub3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJFbGVtZW50KikgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3QgeyByZXR1cm4g
MDsgfQorICAgIHZpcnR1YWwgU3R5bGVJbWFnZSogc2VsZWN0ZWRJbWFnZSgpIHsgcmV0dXJuIHRo
aXM7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFN0eWxlSW1hZ2UqIHNlbGVjdGVkSW1hZ2UoKSBjb25z
dCB7IHJldHVybiB0aGlzOyB9CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDYWNoZWRJbWFn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDYWNoZWRJbWFnZTsgfQogICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCBpc0dlbmVyYXRlZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pc0dlbmVyYXRlZEltYWdl
OyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ3Vyc29ySW1hZ2UoKSBjb25zdCB7IHJldHVy
biBtX2lzQ3Vyc29ySW1hZ2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNJbWFnZVNldCgp
IGNvbnN0IHsgcmV0dXJuIG1faXNJbWFnZVNldDsgfQorCisgICAgYm9vbCBoYXNDYWNoZWRJbWFn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDYWNoZWRJbWFnZSB8fCBzZWxlY3RlZEltYWdlKCktPmlz
Q2FjaGVkSW1hZ2UoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgU3R5bGVJbWFnZSgpCiAgICAgICAg
IDogbV9pc0NhY2hlZEltYWdlKGZhbHNlKQogICAgICAgICAsIG1faXNHZW5lcmF0ZWRJbWFnZShm
YWxzZSkKKyAgICAgICAgLCBtX2lzSW1hZ2VTZXQoZmFsc2UpCisgICAgICAgICwgbV9pc0N1cnNv
ckltYWdlKGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgYm9vbCBtX2lzQ2FjaGVkSW1hZ2UgOiAx
OwogICAgIGJvb2wgbV9pc0dlbmVyYXRlZEltYWdlIDogMTsKKyAgICBib29sIG1faXNJbWFnZVNl
dCA6IDE7CisgICAgYm9vbCBtX2lzQ3Vyc29ySW1hZ2UgOiAxOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1h
Z2VTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
dHlsZUltYWdlU2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU3R5bGVJbWFnZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQor
ICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQor
ICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICog
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LTIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIE5vYW0gUm9zZW50aGFsIChub2FtQHdl
YmtpdC5vcmcpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3R5bGVJbWFnZVNl
dC5oIgorCisjaW5jbHVkZSAiQ1NTSW1hZ2VTZXRWYWx1ZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1JlZjxTdHlsZUltYWdlU2V0PiBTdHlsZUltYWdlU2V0OjpjcmVhdGUoQ1NTSW1hZ2VT
ZXRWYWx1ZSYgY3NzVmFsdWUpCit7IAorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0eWxlSW1h
Z2VTZXQoY3NzVmFsdWUpKTsKK30KKworU3R5bGVJbWFnZVNldDo6U3R5bGVJbWFnZVNldChDU1NJ
bWFnZVNldFZhbHVlJiBjc3NWYWx1ZSkKKyAgICA6IG1fY3NzVmFsdWUoY3NzVmFsdWUpCit7Cisg
ICAgbV9pc0ltYWdlU2V0ID0gdHJ1ZTsKK30KKworYm9vbCBTdHlsZUltYWdlU2V0OjpvcGVyYXRv
cj09KGNvbnN0IFN0eWxlSW1hZ2UmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBpczxTdHls
ZUltYWdlU2V0PihvdGhlcikgJiYgZXF1YWxzKGRvd25jYXN0PFN0eWxlSW1hZ2VTZXQ+KG90aGVy
KSk7Cit9CisKK1N0eWxlSW1hZ2VTZXQ6On5TdHlsZUltYWdlU2V0KCkgPSBkZWZhdWx0OworCitS
ZWY8Q1NTVmFsdWU+IFN0eWxlSW1hZ2VTZXQ6OmNzc1ZhbHVlKCkgY29uc3QKK3sgCisgICAgcmV0
dXJuIG1fY3NzVmFsdWUuY29weVJlZigpOyAKK30KKworSW1hZ2VXaXRoU2NhbGUgU3R5bGVJbWFn
ZVNldDo6c2VsZWN0QmVzdEZpdEltYWdlKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9jc3NWYWx1ZS0+c2VsZWN0QmVzdEZpdEltYWdlKGRvY3VtZW50KTsK
K30KKworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1N0eWxlSW1hZ2VTZXQuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMj
IC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2VTZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNldC5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlU2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDAw
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisqICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBL
b2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVl
bGxlciAobXVlbGxlckBrZGUub3JnKQorKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiBDb3B5cmlnaHQg
KEMpIDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyoKKyogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorKgorKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisqCisqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0
eWxlTXVsdGlJbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENTU0ltYWdl
U2V0VmFsdWU7CisKK2NsYXNzIFN0eWxlSW1hZ2VTZXQgZmluYWwgOiBwdWJsaWMgU3R5bGVNdWx0
aUltYWdlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPFN0eWxlSW1hZ2VTZXQ+IGNyZWF0ZShDU1NJbWFnZVNldFZhbHVlJik7CisgICAgdmly
dHVhbCB+U3R5bGVJbWFnZVNldCgpOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZUlt
YWdlJiBvdGhlcikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgU3R5bGVJbWFnZVNl
dChDU1NJbWFnZVNldFZhbHVlJik7CisgICAgUmVmPENTU1ZhbHVlPiBjc3NWYWx1ZSgpIGNvbnN0
IGZpbmFsOworICAgIEltYWdlV2l0aFNjYWxlIHNlbGVjdEJlc3RGaXRJbWFnZShjb25zdCBEb2N1
bWVudCYpIGNvbnN0IGZpbmFsOworICAgIFJlZjxDU1NJbWFnZVNldFZhbHVlPiBtX2Nzc1ZhbHVl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X1NUWUxFX0lNQUdFKFN0eWxlSW1hZ2VTZXQsIGlzSW1hZ2VTZXQpCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZVNldC5oCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlTXVsdGlJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUtMjAwOCwg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJTdHlsZU11bHRpSW1hZ2UuaCIKKworI2luY2x1ZGUgIkNTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NJbWFnZVNldFZhbHVlLmgiCisjaW5jbHVkZSAi
Q1NTSW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCisjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRl
ICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3R5bGVN
dWx0aUltYWdlOjpTdHlsZU11bHRpSW1hZ2UoKSA9IGRlZmF1bHQ7CisKK1N0eWxlTXVsdGlJbWFn
ZTo6flN0eWxlTXVsdGlJbWFnZSgpID0gZGVmYXVsdDsKKworYm9vbCBTdHlsZU11bHRpSW1hZ2U6
OmVxdWFscyhjb25zdCBTdHlsZU11bHRpSW1hZ2UmIG90aGVyKSBjb25zdAoreworICAgIHJldHVy
biAoIW1faXNQZW5kaW5nICYmICFvdGhlci5tX2lzUGVuZGluZyAmJiBtX3NlbGVjdGVkSW1hZ2Uu
Z2V0KCkgPT0gb3RoZXIubV9zZWxlY3RlZEltYWdlLmdldCgpKTsKK30KKwordm9pZCBTdHlsZU11
bHRpSW1hZ2U6OmxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3Vy
Y2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKQoreworICAgIEFTU0VSVChtX2lzUGVuZGluZyk7Cisg
ICAgQVNTRVJUKGxvYWRlci5kb2N1bWVudCgpKTsKKworICAgIG1faXNQZW5kaW5nID0gZmFsc2U7
CisgICAgYXV0byBpbWFnZVdpdGhTY2FsZSA9IHNlbGVjdEJlc3RGaXRJbWFnZSgqbG9hZGVyLmRv
Y3VtZW50KCkpOworICAgIEFTU0VSVChpczxDU1NJbWFnZVZhbHVlPihpbWFnZVdpdGhTY2FsZS52
YWx1ZSkgfHwgaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oaW1hZ2VXaXRoU2NhbGUudmFsdWUp
KTsKKworICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihpbWFnZVdpdGhTY2FsZS52
YWx1ZSkpIHsKKyAgICAgICAgbV9zZWxlY3RlZEltYWdlID0gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6
Y3JlYXRlKGRvd25jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KCppbWFnZVdpdGhTY2FsZS52
YWx1ZS5nZXQoKSkpOworICAgICAgICBtX3NlbGVjdGVkSW1hZ2UtPmxvYWQobG9hZGVyLCBvcHRp
b25zKTsKKyAgICB9CisgICAgCisgICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KGltYWdlV2l0aFNj
YWxlLnZhbHVlKSkgeworICAgICAgICBtX3NlbGVjdGVkSW1hZ2UgPSBTdHlsZUNhY2hlZEltYWdl
OjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oKmltYWdlV2l0aFNjYWxlLnZhbHVlLmdl
dCgpKSwgaW1hZ2VXaXRoU2NhbGUuc2NhbGVGYWN0b3IpOworICAgICAgICBpZiAobV9zZWxlY3Rl
ZEltYWdlLT5pc1BlbmRpbmcoKSkKKyAgICAgICAgICAgIG1fc2VsZWN0ZWRJbWFnZS0+bG9hZChs
b2FkZXIsIG9wdGlvbnMpOworICAgIH0KK30KKworQ2FjaGVkSW1hZ2UqIFN0eWxlTXVsdGlJbWFn
ZTo6Y2FjaGVkSW1hZ2UoKSBjb25zdAoreworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlLT5jYWNoZWRJ
bWFnZSgpOworfQorCitXcmFwcGVkSW1hZ2VQdHIgU3R5bGVNdWx0aUltYWdlOjpkYXRhKCkgY29u
c3QKK3sKKyAgICBpZiAoIW1fc2VsZWN0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgcmV0dXJuIG1fc2VsZWN0ZWRJbWFnZS0+ZGF0YSgpOworfQorCitib29sIFN0eWxlTXVs
dGlJbWFnZTo6Y2FuUmVuZGVyKGNvbnN0IFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBmbG9hdCBt
dWx0aXBsaWVyKSBjb25zdAoreworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UgJiYgbV9zZWxl
Y3RlZEltYWdlLT5jYW5SZW5kZXIocmVuZGVyZXIsIG11bHRpcGxpZXIpOworfQorCitib29sIFN0
eWxlTXVsdGlJbWFnZTo6aXNQZW5kaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pc1BlbmRp
bmc7Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjppc0xvYWRlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fc2VsZWN0ZWRJbWFnZSAmJiBtX3NlbGVjdGVkSW1hZ2UtPmlzTG9hZGVkKCk7Cit9
CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjplcnJvck9jY3VycmVkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9zZWxlY3RlZEltYWdlICYmIG1fc2VsZWN0ZWRJbWFnZS0+ZXJyb3JPY2N1cnJlZCgp
OworfQorCitGbG9hdFNpemUgU3R5bGVNdWx0aUltYWdlOjppbWFnZVNpemUoY29uc3QgUmVuZGVy
RWxlbWVudCogcmVuZGVyZXIsIGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0Cit7CisgICAgaWYgKCFt
X3NlbGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIG1fc2VsZWN0
ZWRJbWFnZS0+aW1hZ2VTaXplKHJlbmRlcmVyLCBtdWx0aXBsaWVyKTsKK30KKworYm9vbCBTdHls
ZU11bHRpSW1hZ2U6OmltYWdlSGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fc2VsZWN0ZWRJbWFnZSAmJiBtX3NlbGVjdGVkSW1hZ2UtPmltYWdlSGFzUmVsYXRpdmVXaWR0
aCgpOworfQorCitib29sIFN0eWxlTXVsdGlJbWFnZTo6aW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2VsZWN0ZWRJbWFnZSAmJiBtX3NlbGVjdGVkSW1hZ2Ut
PmltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKTsKK30KKwordm9pZCBTdHlsZU11bHRpSW1hZ2U6OmNv
bXB1dGVJbnRyaW5zaWNEaW1lbnNpb25zKGNvbnN0IFJlbmRlckVsZW1lbnQqIGVsZW1lbnQsIExl
bmd0aCYgaW50cmluc2ljV2lkdGgsIExlbmd0aCYgaW50cmluc2ljSGVpZ2h0LCBGbG9hdFNpemUm
IGludHJpbnNpY1JhdGlvKQoreworICAgIGlmICghbV9zZWxlY3RlZEltYWdlKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9zZWxlY3RlZEltYWdlLT5jb21wdXRlSW50cmluc2ljRGltZW5zaW9ucyhl
bGVtZW50LCBpbnRyaW5zaWNXaWR0aCwgaW50cmluc2ljSGVpZ2h0LCBpbnRyaW5zaWNSYXRpbyk7
Cit9CisKK2Jvb2wgU3R5bGVNdWx0aUltYWdlOjp1c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdlICYmIG1fc2VsZWN0ZWRJbWFnZS0+dXNl
c0ltYWdlQ29udGFpbmVyU2l6ZSgpOworfQorCit2b2lkIFN0eWxlTXVsdGlJbWFnZTo6c2V0Q29u
dGFpbmVyQ29udGV4dEZvclJlbmRlcmVyKGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBj
b25zdCBGbG9hdFNpemUmIGNvbnRhaW5lclNpemUsIGZsb2F0IGNvbnRhaW5lclpvb20pCit7Cisg
ICAgaWYgKCFtX3NlbGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBtX3NlbGVjdGVk
SW1hZ2UtPnNldENvbnRhaW5lckNvbnRleHRGb3JSZW5kZXJlcihyZW5kZXJlciwgY29udGFpbmVy
U2l6ZSwgY29udGFpbmVyWm9vbSk7Cit9CisKK3ZvaWQgU3R5bGVNdWx0aUltYWdlOjphZGRDbGll
bnQoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIpCit7CisgICAgaWYgKCFtX3NlbGVjdGVkSW1hZ2Up
CisgICAgICAgIHJldHVybjsKKyAgICBtX3NlbGVjdGVkSW1hZ2UtPmFkZENsaWVudChyZW5kZXJl
cik7Cit9CisKK3ZvaWQgU3R5bGVNdWx0aUltYWdlOjpyZW1vdmVDbGllbnQoUmVuZGVyRWxlbWVu
dCogcmVuZGVyZXIpCit7CisgICAgaWYgKCFtX3NlbGVjdGVkSW1hZ2UpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX3NlbGVjdGVkSW1hZ2UtPnJlbW92ZUNsaWVudChyZW5kZXJlcik7Cit9CisKK1Jl
ZlB0cjxJbWFnZT4gU3R5bGVNdWx0aUltYWdlOjppbWFnZShSZW5kZXJFbGVtZW50KiByZW5kZXJl
ciwgY29uc3QgRmxvYXRTaXplJiBzaXplKSBjb25zdAoreworICAgIGlmICghbV9zZWxlY3RlZElt
YWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9zZWxlY3RlZEltYWdl
LT5pbWFnZShyZW5kZXJlciwgc2l6ZSk7Cit9CisKK2Zsb2F0IFN0eWxlTXVsdGlJbWFnZTo6aW1h
Z2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3NlbGVjdGVkSW1hZ2UpCisgICAg
ICAgIHJldHVybiAxOworICAgIHJldHVybiBtX3NlbGVjdGVkSW1hZ2UtPmltYWdlU2NhbGVGYWN0
b3IoKTsKK30KKworYm9vbCBTdHlsZU11bHRpSW1hZ2U6Omtub3duVG9CZU9wYXF1ZShjb25zdCBS
ZW5kZXJFbGVtZW50KiByZW5kZXJlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWxlY3RlZElt
YWdlICYmIG1fc2VsZWN0ZWRJbWFnZS0+a25vd25Ub0JlT3BhcXVlKHJlbmRlcmVyKTsKK30KKwor
fQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0
eWxlTXVsdGlJbWFnZS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAs
MCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUltYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJbWFnZS5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZU11bHRpSW1hZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgQW50
dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgRGly
ayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUt
MjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgTm9hbSBSb3NlbnRoYWwgKG5vYW1Ad2Via2l0Lm9yZykKKyAqCisqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyoKKyogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKgorKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJT
dHlsZUltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRG9jdW1lbnQ7CisK
K3N0cnVjdCBJbWFnZVdpdGhTY2FsZTsKKworY2xhc3MgU3R5bGVNdWx0aUltYWdlIDogcHVibGlj
IFN0eWxlSW1hZ2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IHZpcnR1YWwgflN0eWxlTXVsdGlJbWFnZSgpOworCitwcm90ZWN0ZWQ6CisgICAgU3R5bGVNdWx0
aUltYWdlKCk7CisgICAgYm9vbCBlcXVhbHMoY29uc3QgU3R5bGVNdWx0aUltYWdlJiBvdGhlcikg
Y29uc3Q7CisgICAgdmlydHVhbCBJbWFnZVdpdGhTY2FsZSBzZWxlY3RCZXN0Rml0SW1hZ2UoY29u
c3QgRG9jdW1lbnQmKSBjb25zdCA9IDA7CisgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlKCkg
Y29uc3QgZmluYWw7CisKK3ByaXZhdGU6CisgICAgV3JhcHBlZEltYWdlUHRyIGRhdGEoKSBjb25z
dCBmaW5hbDsKKworICAgIGJvb2wgY2FuUmVuZGVyKGNvbnN0IFJlbmRlckVsZW1lbnQqLCBmbG9h
dCBtdWx0aXBsaWVyKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzUGVuZGluZygpIGNvbnN0IGZp
bmFsOworICAgIHZvaWQgbG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciYsIGNvbnN0IFJlc291cmNl
TG9hZGVyT3B0aW9ucyYpIGZpbmFsOworICAgIGJvb2wgaXNMb2FkZWQoKSBjb25zdCBmaW5hbDsK
KyAgICBib29sIGVycm9yT2NjdXJyZWQoKSBjb25zdCBmaW5hbDsKKyAgICBGbG9hdFNpemUgaW1h
Z2VTaXplKGNvbnN0IFJlbmRlckVsZW1lbnQqLCBmbG9hdCBtdWx0aXBsaWVyKSBjb25zdCBmaW5h
bDsKKyAgICBib29sIGltYWdlSGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0IGZpbmFsOworICAgIGJv
b2wgaW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgY29tcHV0
ZUludHJpbnNpY0RpbWVuc2lvbnMoY29uc3QgUmVuZGVyRWxlbWVudCosIExlbmd0aCYgaW50cmlu
c2ljV2lkdGgsIExlbmd0aCYgaW50cmluc2ljSGVpZ2h0LCBGbG9hdFNpemUmIGludHJpbnNpY1Jh
dGlvKSBmaW5hbDsKKyAgICBib29sIHVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdCBmaW5h
bDsKKyAgICB2b2lkIHNldENvbnRhaW5lckNvbnRleHRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJF
bGVtZW50JiwgY29uc3QgRmxvYXRTaXplJiwgZmxvYXQpOworICAgIHZvaWQgYWRkQ2xpZW50KFJl
bmRlckVsZW1lbnQqKSBmaW5hbDsKKyAgICB2b2lkIHJlbW92ZUNsaWVudChSZW5kZXJFbGVtZW50
KikgZmluYWw7CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZShSZW5kZXJFbGVtZW50KiwgY29uc3Qg
RmxvYXRTaXplJikgY29uc3QgZmluYWw7CisgICAgZmxvYXQgaW1hZ2VTY2FsZUZhY3RvcigpIGNv
bnN0IGZpbmFsOworICAgIGJvb2wga25vd25Ub0JlT3BhcXVlKGNvbnN0IFJlbmRlckVsZW1lbnQq
KSBjb25zdCBmaW5hbDsKKyAgICBjb25zdCBTdHlsZUltYWdlKiBzZWxlY3RlZEltYWdlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9zZWxlY3RlZEltYWdlLmdldCgpOyB9CisgICAgU3R5bGVJbWFn
ZSogc2VsZWN0ZWRJbWFnZSgpIGZpbmFsIHsgcmV0dXJuIG1fc2VsZWN0ZWRJbWFnZS5nZXQoKTsg
fQorCisgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IG1fc2VsZWN0ZWRJbWFnZTsKKyAgICBib29sIG1f
aXNQZW5kaW5nIHsgdHJ1ZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlJ
bWFnZS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgJKHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0
NiwxMCBAQAogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU3R5bGVCdWls
ZGVyQ29udmVydGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUg
IlN0eWxlQ3Vyc29ySW1hZ2UuaCIKICNpbmNsdWRlICJTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgi
CiAjaW5jbHVkZSAiU3R5bGVHZW5lcmF0ZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlSW1hZ2VT
ZXQuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiV2lsbENoYW5nZURh
dGEuaCIKIApAQCAtMTMyNCwxMyArMTMyNiwxNSBAQCBpbmxpbmUgdm9pZCBCdWlsZGVyQ3VzdG9t
OjphcHBseVZhbHVlQ29uCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYnVpbGRl
clN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoZG93
bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oaXRlbS5nZXQoKSkpLCBkaWRTZXQpOwogICAg
ICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChpczxDU1NJbWFnZVNl
dFZhbHVlPihpdGVtKSkgewotICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29u
dGVudChTdHlsZUNhY2hlZEltYWdlOjpjcmVhdGUoaXRlbSksIGRpZFNldCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChpczxDU1NJbWFnZVNldFZhbHVlPihpdGVtKSkgeworICAg
ICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChTdHlsZUltYWdlU2V0Ojpj
cmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4oaXRlbS5nZXQoKSkuaW1hZ2VTZXRXaXRo
U3R5bGVzUmVzb2x2ZWQoYnVpbGRlclN0YXRlKSksIGRpZFNldCk7CiAgICAgICAgICAgICBkaWRT
ZXQgPSB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KGl0
ZW0pKSB7Ci0gICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxl
Q2FjaGVkSW1hZ2U6OmNyZWF0ZShpdGVtKSwgZGlkU2V0KTsKKyAgICAgICAgICAgIGJ1aWxkZXJT
dGF0ZS5zdHlsZSgpLnNldENvbnRlbnQoU3R5bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0
PENTU0ltYWdlVmFsdWU+KGl0ZW0uZ2V0KCkpKSwgZGlkU2V0KTsKICAgICAgICAgICAgIGRpZFNl
dCA9IHRydWU7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcAkocmV2aXNpb24gMjU0ODA4KQor
KysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw4ICs0NSwxMCBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAi
U3R5bGVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUg
IlN0eWxlQ3Vyc29ySW1hZ2UuaCIKICNpbmNsdWRlICJTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgi
CiAjaW5jbHVkZSAiU3R5bGVHZW5lcmF0ZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlSW1hZ2VT
ZXQuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1GdW5jdGlvbnMuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNzksMjEgKzgxLDM0IEBAIGJvb2wgQnVpbGRlclN0YXRlOjp1c2VTVkdab29tUnVs
ZXNGb3JMZW4KICAgICByZXR1cm4gaXM8U1ZHRWxlbWVudD4oZWxlbWVudCgpKSAmJiAhKGlzPFNW
R1NWR0VsZW1lbnQ+KCplbGVtZW50KCkpICYmIGVsZW1lbnQoKS0+cGFyZW50Tm9kZSgpKTsKIH0K
IAorUmVmPENTU1ZhbHVlPiBCdWlsZGVyU3RhdGU6OnJlc29sdmVJbWFnZVN0eWxlcyhDU1NWYWx1
ZSYgdmFsdWUpCit7CisgICAgaWYgKGlzPENTU0dyYWRpZW50VmFsdWU+KHZhbHVlKSkKKyAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PENTU0dyYWRpZW50VmFsdWU+KHZhbHVlKS5ncmFkaWVudFdpdGhT
dHlsZXNSZXNvbHZlZCgqdGhpcyk7CisKKyAgICBpZiAoaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4odmFs
dWUpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4odmFsdWUpLmlt
YWdlU2V0V2l0aFN0eWxlc1Jlc29sdmVkKCp0aGlzKTsKKworICAgIC8vIENyZWF0aW5nIGZpbHRl
ciBvcGVyYXRpb25zIGRvZXNuJ3QgY3JlYXRlIGEgbmV3IENTU1ZhbHVlIHJlZmVyZW5jZS4KKyAg
ICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpKQorICAgICAgICBkb3duY2FzdDxD
U1NGaWx0ZXJJbWFnZVZhbHVlPih2YWx1ZSkuY3JlYXRlRmlsdGVyT3BlcmF0aW9ucygqdGhpcyk7
CisKKyAgICByZXR1cm4gbWFrZVJlZih2YWx1ZSk7Cit9CisKIFJlZlB0cjxTdHlsZUltYWdlPiBC
dWlsZGVyU3RhdGU6OmNyZWF0ZVN0eWxlSW1hZ2UoQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIGlm
IChpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPih2YWx1ZSkpIHsKLSAgICAgICAgaWYgKGlzPENT
U0dyYWRpZW50VmFsdWU+KHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBTdHlsZUdlbmVyYXRl
ZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1ZT4odmFsdWUpLmdyYWRpZW50
V2l0aFN0eWxlc1Jlc29sdmVkKCp0aGlzKSk7Ci0KLSAgICAgICAgaWYgKGlzPENTU0ZpbHRlcklt
YWdlVmFsdWU+KHZhbHVlKSkgewotICAgICAgICAgICAgLy8gRmlsdGVySW1hZ2UgbmVlZHMgdG8g
Y2FsY3VsYXRlIEZpbHRlck9wZXJhdGlvbnMuCi0gICAgICAgICAgICBkb3duY2FzdDxDU1NGaWx0
ZXJJbWFnZVZhbHVlPih2YWx1ZSkuY3JlYXRlRmlsdGVyT3BlcmF0aW9ucygqdGhpcyk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2Fz
dDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPih2YWx1ZSkpOwotICAgIH0KKyAgICBpZiAoaXM8Q1NT
SW1hZ2VWYWx1ZT4odmFsdWUpKQorICAgICAgICByZXR1cm4gU3R5bGVDYWNoZWRJbWFnZTo6Y3Jl
YXRlKGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KHZhbHVlKSk7CisKKyAgICBpZiAoaXM8Q1NTQ3Vy
c29ySW1hZ2VWYWx1ZT4odmFsdWUpKQorICAgICAgICByZXR1cm4gU3R5bGVDdXJzb3JJbWFnZTo6
Y3JlYXRlKGRvd25jYXN0PENTU0N1cnNvckltYWdlVmFsdWU+KHZhbHVlKSk7CiAKLSAgICBpZiAo
aXM8Q1NTSW1hZ2VWYWx1ZT4odmFsdWUpIHx8IGlzPENTU0ltYWdlU2V0VmFsdWU+KHZhbHVlKSB8
fCBpczxDU1NDdXJzb3JJbWFnZVZhbHVlPih2YWx1ZSkpCi0gICAgICAgIHJldHVybiBTdHlsZUNh
Y2hlZEltYWdlOjpjcmVhdGUodmFsdWUpOworICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRvclZh
bHVlPih2YWx1ZSkpCisgICAgICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUo
ZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4ocmVzb2x2ZUltYWdlU3R5bGVzKHZhbHVl
KS5nZXQoKSkpOworICAgIAorICAgIGlmIChpczxDU1NJbWFnZVNldFZhbHVlPih2YWx1ZSkpCisg
ICAgICAgIHJldHVybiBTdHlsZUltYWdlU2V0OjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VTZXRW
YWx1ZT4ocmVzb2x2ZUltYWdlU3R5bGVzKHZhbHVlKS5nZXQoKSkpOwogCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmgJ
KHJldmlzaW9uIDI1NDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDcgQEAgcHVibGljOgogICAgIGJvb2wg
dXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCkgY29uc3Q7CiAgICAgU2NvcGVPcmRpbmFsIHN0eWxl
U2NvcGVPcmRpbmFsKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNjb3BlT3JkaW5hbDsgfQogCisg
ICAgUmVmPENTU1ZhbHVlPiByZXNvbHZlSW1hZ2VTdHlsZXMoQ1NTVmFsdWUmKTsKICAgICBSZWZQ
dHI8U3R5bGVJbWFnZT4gY3JlYXRlU3R5bGVJbWFnZShDU1NWYWx1ZSYpOwogICAgIGJvb2wgY3Jl
YXRlRmlsdGVyT3BlcmF0aW9ucyhjb25zdCBDU1NWYWx1ZSYsIEZpbHRlck9wZXJhdGlvbnMmIG91
dE9wZXJhdGlvbnMpOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTQ4MDgpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMSBAQAorMjAyMC0wMS0xOSAg
Tm9hbSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgLXdlYmtpdC1pbWFn
ZS1zZXQgc2hvdWxkIHN1cHBvcnQgYWxsIHRoZSBpbWFnZSBmdW5jdGlvbnMgV2ViS2l0IHN1cHBv
cnRzLCBub3QganVzdCB1cmwoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODE5NDEKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKwor
ICAgICAgICAqIGZhc3QvY3NzL2N1cnNvci1wYXJzaW5nLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBmYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy5odG1sOgorICAgICAgICAgICAgICAgIEFkZGVkIHBh
cnNpbmcgdGVzdCB0byBlbnN1cmUgYXJyb3cgaW1hZ2Utc2V0cyBkaXNhYmxlIGdlbmVyYXRlZCBp
bWFnZXMKKworICAgICAgICAqIGZhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWdlbmVyYXRlZC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5n
LWdlbmVyYXRlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9pbWFnZS1zZXQtcGFy
c2luZy1pbnZhbGlkLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2Nzcy9pbWFnZS1zZXQt
cGFyc2luZy1pbnZhbGlkLmh0bWw6CisgICAgICAgICAgICAgICAgQWRkZWQgcGFyc2luZyB0ZXN0
cyBmb3IgbmV3IGdlbmVyYXRlZC1pbnNpZGUtaW1hZ2Utc2V0IHVzZSBjYXNlcworICAgICAgICAg
ICAgICAgIFRlc3QgdGhhdCBpbWFnZS1zZXQgaW5zaWRlIGltYWdlLXNldCBpcyBub3Qgc3VwcG9y
dGVkCisKKyAgICAgICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1mYWRlLWV4cGVjdGVk
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc2V0LWNyb3NzLWZhZGUu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtZXhw
ZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGll
bnQtbXVsdGktZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9oaWRwaS9pbWFn
ZS1zZXQtZ3JhZGllbnQtbXVsdGkuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9oaWRwaS9p
bWFnZS1zZXQtZ3JhZGllbnQtc2luZ2xlLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LXNpbmdsZS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC5odG1sOiBBZGRlZC4KKyAgICAgICAg
ICAgICAgICBBZGRlZCByZWYtdGVzdHMgZm9yIHNldmVyYWwgZ2VuZXJhdGVkLWluc2lkZS1pbWFn
ZS1zZXQgdXNlLWNhc2VzCisKIDIwMjAtMDEtMTkgIENhdGhpZSBDaGVuICA8Y2F0aGllY2hlbkBp
Z2FsaWEuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBzY3JvbGwgYmVoYXZpb3IgcmVs
aWVzIG9uIFNjcm9sbEFuaW1hdGlvbiBvZiB0aGUgV2ViIHByb2Nlc3MKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvY3NzL2N1cnNvci1wYXJzaW5nLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2Nzcy9jdXJzb3ItcGFyc2luZy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDI1NDgwOCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2N1cnNvci1wYXJzaW5nLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsMTAgQEAgUEFTUyByb3VuZHRyaXBDc3NS
dWxlKCJjdXJzb3I6IHVybChmaWxlOgogUEFTUyByb3VuZHRyaXBDc3NSdWxlKCJjdXJzb3I6IHVy
bChmaWxlOi8vL2Zvby5wbmcpIDEyIDMgNTsiKS5jc3NUZXh0IGlzICIiCiBQQVNTIHJvdW5kdHJp
cENzc1J1bGUoImN1cnNvcjogdXJsKGZpbGU6Ly8vZm9vLnBuZykgeCB5OyIpLmNzc1RleHQgaXMg
IiIKIFBBU1Mgcm91bmR0cmlwQ3NzUnVsZSgiY3Vyc29yOiB1cmwoZmlsZTovLy9mb28ucG5nKSBh
dXRvOyIpLmNzc1RleHQgaXMgIiIKKworVGVzdCBhIGJ1bmNoIG9mIGN1cnNvciBydWxlcyB3aXRo
IGdlbmVyYXRlZCBpbWFnZXMuCitQQVNTIHJvdW5kdHJpcENzc1J1bGUoImN1cnNvcjogbGluZWFy
LWdyYWRpZW50KHJlZCwgd2hpdGUpIC0xIC0xLCBwb2ludGVyOyIpLmNzc1RleHQgaXMgIiIKK1BB
U1Mgcm91bmR0cmlwQ3NzUnVsZSgiY3Vyc29yOiBpbWFnZS1zZXQobGluZWFyLWdyYWRpZW50KHJl
ZCwgd2hpdGUpIDF4KSAtMSAtMSwgcG9pbnRlcjsiKS5jc3NUZXh0IGlzICIiCiBQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvY3NzL2N1cnNvci1wYXJzaW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9jc3MvY3Vyc29yLXBhcnNpbmcuaHRtbAkocmV2aXNpb24gMjU0ODA4KQorKysgTGF5b3V0
VGVzdHMvZmFzdC9jc3MvY3Vyc29yLXBhcnNpbmcuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTA1
LDYgKzEwNSwxMSBAQCB0ZXN0SW52YWxpZEN1cnNvclJ1bGUoJ3VybChmaWxlOi8vL2Zvby5wCiB0
ZXN0SW52YWxpZEN1cnNvclJ1bGUoJ3VybChmaWxlOi8vL2Zvby5wbmcpIHggeScpOwogdGVzdElu
dmFsaWRDdXJzb3JSdWxlKCd1cmwoZmlsZTovLy9mb28ucG5nKSBhdXRvJyk7CiAKK2RlYnVnKCcn
KTsKK2RlYnVnKCdUZXN0IGEgYnVuY2ggb2YgY3Vyc29yIHJ1bGVzIHdpdGggZ2VuZXJhdGVkIGlt
YWdlcy4nKTsKK3Rlc3RJbnZhbGlkQ3Vyc29yUnVsZSgnbGluZWFyLWdyYWRpZW50KHJlZCwgd2hp
dGUpIC0xIC0xLCBwb2ludGVyJyk7Cit0ZXN0SW52YWxpZEN1cnNvclJ1bGUoJ2ltYWdlLXNldChs
aW5lYXItZ3JhZGllbnQocmVkLCB3aGl0ZSkgMXgpIC0xIC0xLCBwb2ludGVyJyk7CisKIHN1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7CiA8L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
Y3NzL2ltYWdlLXNldC1wYXJzaW5nLWdlbmVyYXRlZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctZ2VuZXJhdGVkLWV4cGVj
dGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQt
cGFyc2luZy1nZW5lcmF0ZWQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjUgQEAKK1Rlc3QgdGhlIHBhcnNpbmcgb2YgdGhlIGltYWdlLXNldCBmdW5jdGlvbi4KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKKworU2luZ2xlIHZhbHVlIGZvciBiYWNrZ3JvdW5k
LWltYWdlIHdpdGggZ3JhZGllbnQgOiBsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAxeAor
UEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUpIGlzICdDU1NWYWx1ZUxpc3QnCitQQVNT
IGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5fX3Byb3RvX18pIGlzICdDU1NWYWx1ZUxpc3RQ
cm90b3R5cGUnCitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5jb25zdHJ1Y3Rvcikg
aXMgJ0Z1bmN0aW9uJworUEFTUyBpbWFnZVNldFJ1bGUubGVuZ3RoIGlzIDIKK1BBU1Mgc3ViUnVs
ZS5jc3NUZXh0IGlzICdsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKScKK1BBU1Mgc3ViUnVs
ZS5jc3NUZXh0IGlzICcxJworCitTaW5nbGUgdmFsdWUgZm9yIGNvbnRlbnQgd2l0aCBncmFkaWVu
dCA6IGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpIDF4CitQQVNTIGpzV3JhcHBlckNsYXNz
KGltYWdlU2V0UnVsZSkgaXMgJ0NTU1ZhbHVlTGlzdCcKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1h
Z2VTZXRSdWxlLl9fcHJvdG9fXykgaXMgJ0NTU1ZhbHVlTGlzdFByb3RvdHlwZScKK1BBU1MganNX
cmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLmNvbnN0cnVjdG9yKSBpcyAnRnVuY3Rpb24nCitQQVNT
IGltYWdlU2V0UnVsZS5sZW5ndGggaXMgMgorUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJ2xpbmVh
ci1ncmFkaWVudChncmVlbiwgd2hpdGUpJworUEFTUyBzdWJSdWxlLmNzc1RleHQgaXMgJzEnCisK
K1NpbmdsZSB2YWx1ZSBmb3IgYmFja2dyb3VuZC1pbWFnZSB3aXRoIGdyYWRpZW50cyA6IGxpbmVh
ci1ncmFkaWVudChncmVlbiwgd2hpdGUpIDF4LCByYWRpYWwtZ3JhZGllbnQoYmx1ZSwgd2hpdGUp
IDJ4CitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZSkgaXMgJ0NTU1ZhbHVlTGlzdCcK
K1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLl9fcHJvdG9fXykgaXMgJ0NTU1ZhbHVl
TGlzdFByb3RvdHlwZScKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlLmNvbnN0cnVj
dG9yKSBpcyAnRnVuY3Rpb24nCitQQVNTIGltYWdlU2V0UnVsZS5sZW5ndGggaXMgNAorUEFTUyBz
dWJSdWxlLmNzc1RleHQgaXMgJ2xpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpJworUEFTUyBz
dWJSdWxlLmNzc1RleHQgaXMgJzEnCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAncmFkaWFsLWdy
YWRpZW50KGJsdWUsIHdoaXRlKScKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICcyJworCitDb21i
aW5lZCBncmFkaWVudCBhbmQgVVJMIDogdXJsKCcjYScpIDF4LCBsaW5lYXItZ3JhZGllbnQoZ3Jl
ZW4sIHdoaXRlKSAyeAorUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUpIGlzICdDU1NW
YWx1ZUxpc3QnCitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVsZS5fX3Byb3RvX18pIGlz
ICdDU1NWYWx1ZUxpc3RQcm90b3R5cGUnCitQQVNTIGpzV3JhcHBlckNsYXNzKGltYWdlU2V0UnVs
ZS5jb25zdHJ1Y3RvcikgaXMgJ0Z1bmN0aW9uJworUEFTUyBpbWFnZVNldFJ1bGUubGVuZ3RoIGlz
IDQKK1BBU1Mgc3ViUnVsZSBpcyAnYScKK1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICcxJworUEFT
UyBzdWJSdWxlLmNzc1RleHQgaXMgJ2xpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUpJworUEFT
UyBzdWJSdWxlLmNzc1RleHQgaXMgJzInCisKK0NvbWJpbmVkIGdyYWRpZW50IGFuZCBVUkwgaW4g
Y29udGVudCA6IHVybCgnI2EnKSAxeCwgbGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMngK
K1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlKSBpcyAnQ1NTVmFsdWVMaXN0JworUEFT
UyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuX19wcm90b19fKSBpcyAnQ1NTVmFsdWVMaXN0
UHJvdG90eXBlJworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuY29uc3RydWN0b3Ip
IGlzICdGdW5jdGlvbicKK1BBU1MgaW1hZ2VTZXRSdWxlLmxlbmd0aCBpcyA0CitQQVNTIHN1YlJ1
bGUgaXMgJ2EnCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMScKK1BBU1Mgc3ViUnVsZS5jc3NU
ZXh0IGlzICdsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKScKK1BBU1Mgc3ViUnVsZS5jc3NU
ZXh0IGlzICcyJworCitDb21iaW5lZCBncmFkaWVudCBhbmQgY3Jvc3MtZmFkZSA6IC13ZWJraXQt
Y3Jvc3MtZmFkZSh1cmwoJyNhJyksIHVybCgnI2InKSwgNzAlKSAxeCwgbGluZWFyLWdyYWRpZW50
KGdyZWVuLCB3aGl0ZSkgMngKK1BBU1MganNXcmFwcGVyQ2xhc3MoaW1hZ2VTZXRSdWxlKSBpcyAn
Q1NTVmFsdWVMaXN0JworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGUuX19wcm90b19f
KSBpcyAnQ1NTVmFsdWVMaXN0UHJvdG90eXBlJworUEFTUyBqc1dyYXBwZXJDbGFzcyhpbWFnZVNl
dFJ1bGUuY29uc3RydWN0b3IpIGlzICdGdW5jdGlvbicKK1BBU1MgaW1hZ2VTZXRSdWxlLmxlbmd0
aCBpcyA0CitQQVNTIHN1YlJ1bGUgaXMgJ2EnCitQQVNTIHN1YlJ1bGUuY3NzVGV4dCBpcyAnMScK
K1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICdsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKScK
K1BBU1Mgc3ViUnVsZS5jc3NUZXh0IGlzICcyJworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3Rz
L2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWdlbmVyYXRlZC1leHBlY3RlZC50eHQKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQt
cGFyc2luZy1nZW5lcmF0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nz
cy9pbWFnZS1zZXQtcGFyc2luZy1nZW5lcmF0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1nZW5lcmF0ZWQuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEwNyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0i
ZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rl
c2NyaXB0aW9uKCJUZXN0IHRoZSBwYXJzaW5nIG9mIHRoZSBpbWFnZS1zZXQgZnVuY3Rpb24uIik7
CisKK2Z1bmN0aW9uIGpzV3JhcHBlckNsYXNzKG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAg
ICAgICByZXR1cm4gIltudWxsXSI7CisgICAgdmFyIHN0cmluZyA9IE9iamVjdC5wcm90b3R5cGUu
dG9TdHJpbmcuYXBwbHkobm9kZSk7CisgICAgcmV0dXJuIHN0cmluZy5zdWJzdHIoOCwgc3RyaW5n
Lmxlbmd0aCAtIDkpOworfQorCitmdW5jdGlvbiBzaG91bGRCZVR5cGUoZXhwcmVzc2lvbiwgY2xh
c3NOYW1lLCBwcm90b3R5cGVOYW1lLCBjb25zdHJ1Y3Rvck5hbWUpCit7CisgICAgaWYgKCFwcm90
b3R5cGVOYW1lKQorICAgICAgICBwcm90b3R5cGVOYW1lID0gY2xhc3NOYW1lICsgIlByb3RvdHlw
ZSI7CisgICAgaWYgKCFjb25zdHJ1Y3Rvck5hbWUpCisgICAgICAgIGNvbnN0cnVjdG9yTmFtZSA9
IGNsYXNzTmFtZSArICJDb25zdHJ1Y3RvciI7CisgICAgc2hvdWxkQmUoImpzV3JhcHBlckNsYXNz
KCIgKyBleHByZXNzaW9uICsgIikiLCAiJyIgKyBjbGFzc05hbWUgKyAiJyIpOworICAgIHNob3Vs
ZEJlKCJqc1dyYXBwZXJDbGFzcygiICsgZXhwcmVzc2lvbiArICIuX19wcm90b19fKSIsICInIiAr
IHByb3RvdHlwZU5hbWUgKyAiJyIpOworICAgIHNob3VsZEJlKCJqc1dyYXBwZXJDbGFzcygiICsg
ZXhwcmVzc2lvbiArICIuY29uc3RydWN0b3IpIiwgIidGdW5jdGlvbiciKTsKK30KKworLy8gVGhl
c2UgaGF2ZSB0byBiZSBnbG9iYWwgZm9yIHRoZSB0ZXN0IGhlbHBlcnMgdG8gc2VlIHRoZW0uCit2
YXIgaW1hZ2VTZXRSdWxlLCBzdWJSdWxlOworCitmdW5jdGlvbiB0ZXN0SW1hZ2VTZXRSdWxlKGRl
c2NyaXB0aW9uLCBwcm9wZXJ0eSwgcnVsZSwgZXhwZWN0ZWRMZW5ndGgsIGV4cGVjdGVkVGV4dHMp
Cit7CisgICAgZGVidWcoIiIpOworICAgIGRlYnVnKGRlc2NyaXB0aW9uICsgIiA6ICIgKyBydWxl
KTsKKworICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICBk
aXYuc2V0QXR0cmlidXRlKCJzdHlsZSIsIHByb3BlcnR5ICsgIjogaW1hZ2Utc2V0KCIgKyBydWxl
ICsgIikiKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7CisKKyAgICBpbWFn
ZVNldFJ1bGUgPSBkaXYuc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eSk7CisgICAg
c2hvdWxkQmVUeXBlKCJpbWFnZVNldFJ1bGUiLCAiQ1NTVmFsdWVMaXN0Iik7CisKKyAgICBpZiAo
aW1hZ2VTZXRSdWxlKSB7CisgICAgICAgIGlmIChqc1dyYXBwZXJDbGFzcyhpbWFnZVNldFJ1bGVb
MF0pID09ICJDU1NWYWx1ZUxpc3QiKSB7CisgICAgICAgICAgICAvLyBUaGUgY29udGVudCBwcm9w
ZXJ0eSByZXR1cm5zIGEgQ1NTVmFsdWVMaXN0IGFueXdheSwgc28gdG8gZ2V0IHRvIHRoZSAKKyAg
ICAgICAgICAgIC8vIGltYWdlU2V0IENTUyB2YWx1ZSBsaXN0LCB3ZSBoYXZlIHRvIGxvb2sgYXQg
dGhlIGZpcnN0IGVudHJ5IGluIHRoZSAKKyAgICAgICAgICAgIC8vIGNvbnRlbnQgdmFsdWUgbGlz
dC4KKyAgICAgICAgICAgIGltYWdlU2V0UnVsZSA9IGltYWdlU2V0UnVsZVswXTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHNob3VsZEJlKCJpbWFnZVNldFJ1bGUubGVuZ3RoIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBleHBlY3RlZExlbmd0aDsgfSk7CisKKyAgICBpZiAoaW1hZ2VTZXRSdWxlKSB7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRMZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgc3RyaW5nID0gaW1hZ2VTZXRSdWxlW2ldOworICAgICAgICAgICAgaWYgKGkgJSAy
ID09IDAgJiYgc3RyaW5nLmNzc1RleHQuaW5jbHVkZXMoJyMnKSkgeworICAgICAgICAgICAgICAg
IHN1YlJ1bGUgPSBzdHJpbmcuY3NzVGV4dC5zcGxpdCgnIycpWzFdLnJlcGxhY2UoJyInLCAiIik7
CisgICAgICAgICAgICAgICAgc3ViUnVsZSA9IHN1YlJ1bGUuc3BsaXQoJyknKVswXTsKKyAgICAg
ICAgICAgICAgICBzaG91bGRCZSgic3ViUnVsZSIsICInIiArIGV4cGVjdGVkVGV4dHNbaV0gKyAi
JyIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdWJSdWxlID0gc3Ry
aW5nOworICAgICAgICAgICAgICAgIHNob3VsZEJlKCJzdWJSdWxlLmNzc1RleHQiLCAiJyIgKyBl
eHBlY3RlZFRleHRzW2ldICsgIiciKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTsKK30KKwordGVzdEltYWdlU2V0
UnVsZSgiU2luZ2xlIHZhbHVlIGZvciBiYWNrZ3JvdW5kLWltYWdlIHdpdGggZ3JhZGllbnQiLAor
ICAgICAgICAgICAgICAgICJiYWNrZ3JvdW5kLWltYWdlIiwKKyAgICAgICAgICAgICAgICAibGlu
ZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkgMXgiLCAyLAorICAgICAgICAgICAgICAgIFsibGlu
ZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkiLCAiMSJdKTsKK3Rlc3RJbWFnZVNldFJ1bGUoIlNp
bmdsZSB2YWx1ZSBmb3IgY29udGVudCB3aXRoIGdyYWRpZW50IiwKKyAgICAgICAgICAgICAgICAi
YmFja2dyb3VuZC1pbWFnZSIsCisgICAgICAgICAgICAgICAgImxpbmVhci1ncmFkaWVudChncmVl
biwgd2hpdGUpIDF4IiwgMiwKKyAgICAgICAgICAgICAgICBbImxpbmVhci1ncmFkaWVudChncmVl
biwgd2hpdGUpIiwgIjEiXSk7CisKK3Rlc3RJbWFnZVNldFJ1bGUoIlNpbmdsZSB2YWx1ZSBmb3Ig
YmFja2dyb3VuZC1pbWFnZSB3aXRoIGdyYWRpZW50cyIsCisgICAgICAgICAgICAgICAgImJhY2tn
cm91bmQtaW1hZ2UiLAorICAgICAgICAgICAgICAgICJsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdo
aXRlKSAxeCwgcmFkaWFsLWdyYWRpZW50KGJsdWUsIHdoaXRlKSAyeCIsIDQsCisgICAgICAgICAg
ICAgICAgWyJsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSIsICIxIiwgInJhZGlhbC1ncmFk
aWVudChibHVlLCB3aGl0ZSkiLCAiMiJdKTsKKwordGVzdEltYWdlU2V0UnVsZSgiQ29tYmluZWQg
Z3JhZGllbnQgYW5kIFVSTCIsCisgICAgICAgICAgICAgICAgImJhY2tncm91bmQtaW1hZ2UiLAor
ICAgICAgICAgICAgICAgICJ1cmwoJyNhJykgMXgsIGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hp
dGUpIDJ4IiwgNCwKKyAgICAgICAgICAgICAgICBbImEiLCAiMSIsICJsaW5lYXItZ3JhZGllbnQo
Z3JlZW4sIHdoaXRlKSIsICIyIl0pOworCit0ZXN0SW1hZ2VTZXRSdWxlKCJDb21iaW5lZCBncmFk
aWVudCBhbmQgVVJMIGluIGNvbnRlbnQiLAorICAgICAgICAgICAgICAgICJjb250ZW50IiwKKyAg
ICAgICAgICAgICAgICAidXJsKCcjYScpIDF4LCBsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRl
KSAyeCIsIDQsCisgICAgICAgICAgICAgICAgWyJhIiwgIjEiLCAibGluZWFyLWdyYWRpZW50KGdy
ZWVuLCB3aGl0ZSkiLCAiMiJdKTsKKwordGVzdEltYWdlU2V0UnVsZSgiQ29tYmluZWQgZ3JhZGll
bnQgYW5kIGNyb3NzLWZhZGUiLAorICAgICAgICAgICAgICAgICJiYWNrZ3JvdW5kLWltYWdlIiwK
KyAgICAgICAgICAgICAgICAiLXdlYmtpdC1jcm9zcy1mYWRlKHVybCgnI2EnKSwgdXJsKCcjYicp
LCA3MCUpIDF4LCBsaW5lYXItZ3JhZGllbnQoZ3JlZW4sIHdoaXRlKSAyeCIsIDQsCisgICAgICAg
ICAgICAgICAgWyJhIiwgIjEiLCAibGluZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSkiLCAiMiJd
KTsKKworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9jc3MvaW1hZ2Utc2V0
LXBhcnNpbmctZ2VuZXJhdGVkLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUK
IyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1pbnZhbGlkLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1p
bnZhbGlkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjU0ODA4KQorKysgTGF5b3V0VGVzdHMvZmFz
dC9jc3MvaW1hZ2Utc2V0LXBhcnNpbmctaW52YWxpZC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTE4LDYgKzE4LDEyIEBAIFBBU1MgY3NzUnVsZSBpcyBudWxsCiAKIFNjYWxlIGZhY3Rv
ciBpcyAwIDogdXJsKCcjYScpIDB4CiBQQVNTIGNzc1J1bGUgaXMgbnVsbAorCitHZW5lcmF0ZWQg
aW1hZ2UgZm9yIGN1cnNvciA6IGxpbmVhci1ncmFkaWVudChibGFjaywgd2hpdGUpIDF4CitQQVNT
IGNzc1J1bGUgaXMgbnVsbAorCitJbWFnZS1zZXQgaW5zaWRlIGltYWdlLXNldCA6IGltYWdlLXNl
dChpbWFnZS1zZXQodXJsKCcjYScpIDF4KSAxeCkKK1BBU1MgY3NzUnVsZSBpcyBudWxsCiBQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJzaW5nLWludmFsaWQuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pbWFnZS1zZXQtcGFyc2luZy1pbnZhbGlkLmh0bWwJ
KHJldmlzaW9uIDI1NDgwOCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2ltYWdlLXNldC1wYXJz
aW5nLWludmFsaWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQCB0ZXN0SW52
YWxpZEltYWdlU2V0KCJObyB4IiwgImJhY2tncm91bmQtCiB0ZXN0SW52YWxpZEltYWdlU2V0KCJO
byBjb21tYSIsICJiYWNrZ3JvdW5kLWltYWdlIiwgInVybCgnI2EnKSAxeCB1cmwoJyNiJykgMngi
KTsKIHRlc3RJbnZhbGlkSW1hZ2VTZXQoIlRvbyBtYW55IHNjYWxlIGZhY3RvciBwYXJhbWV0ZXJz
IiwgImJhY2tncm91bmQtaW1hZ2UiLCAidXJsKCcjYScpIDF4IDJ4Iik7CiB0ZXN0SW52YWxpZElt
YWdlU2V0KCJTY2FsZSBmYWN0b3IgaXMgMCIsICJiYWNrZ3JvdW5kLWltYWdlIiwgInVybCgnI2En
KSAweCIpOwordGVzdEludmFsaWRJbWFnZVNldCgiR2VuZXJhdGVkIGltYWdlIGZvciBjdXJzb3Ii
LCAiY3Vyc29yIiwgImxpbmVhci1ncmFkaWVudChibGFjaywgd2hpdGUpIDF4Iik7Cit0ZXN0SW52
YWxpZEltYWdlU2V0KCJJbWFnZS1zZXQgaW5zaWRlIGltYWdlLXNldCIsICJiYWNrZ3JvdW5kLWlt
YWdlIiwgImltYWdlLXNldChpbWFnZS1zZXQodXJsKCcjYScpIDF4KSAxeCkiKTsKIAogc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKIDwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9o
aWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWNyb3NzLWZhZGUtZXhwZWN0ZWQuaHRtbAko
bm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1m
YWRlLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNiBAQAorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQ+CisgICAgd2luZG93Lm9ubG9hZCA9ICgpID0+IHsKKyAgICAgIGlm
ICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUo
KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRCYWNraW5nU2NhbGVGYWN0b3IoMiwgKCkgPT4gc2V0
VGltZW91dCgoKSA9PiB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKSwgMCkpOworICAgICAgfQorICAg
IH0KKzwvc2NyaXB0PgorCisgICAgCis8c3R5bGU+CisgICAgI2ZvbyB7CisgICAgICAgIHdpZHRo
OjEwMHB4OworICAgICAgICBoZWlnaHQ6MTAwcHg7CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6
IC13ZWJraXQtY3Jvc3MtZmFkZSh1cmwoJ3Jlc291cmNlcy9ibHVlLTEwMC1weC1zcXVhcmUucG5n
JyksIHVybCgncmVzb3VyY2VzL2dyZWVuLTIwMC1weC1zcXVhcmUucG5nJywgNTAlKSk7CisgICAg
fQorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHk+CisgICAgPGRpdj5UaGlzIHRlc3QgcGFzc2Vz
IGlmIHRoZSBkaXYgYmVsb3cgaXMgYSBibHVlIDEwMHB4IHNxdWFyZSB3aGVuIHRoZSBkZXZpY2VT
Y2FsZUZhY3RvciBpcyAxLCBhbmQgaWYgaXQgaXMgYSAxMDBweCBncmVlbi9ibHVlIGNyb3NzLWZh
ZGUgc3F1YXJlIHdoZW4gdGhlIGRldmljZVNjYWxlRmFjdG9yIGlzIDIuPC9kaXY+Cis8ZGl2IGlk
PWZvbz48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91
dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWNyb3NzLWZhZGUtZXhwZWN0ZWQuaHRtbApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Ut
c2V0LWNyb3NzLWZhZGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2hpZHBp
L2ltYWdlLXNldC1jcm9zcy1mYWRlLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9oaWRwaS9pbWFnZS1zZXQtY3Jvc3MtZmFkZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjUgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorICAgIHdpbmRvdy5vbmxvYWQg
PSAoKSA9PiB7CisgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0QmFja2luZ1NjYWxl
RmFjdG9yKDIsICgpID0+IHNldFRpbWVvdXQoKCkgPT4gdGVzdFJ1bm5lci5ub3RpZnlEb25lKCks
IDApKTsKKyAgICAgIH0KKyAgICB9Cis8L3NjcmlwdD4KKyAgICAKKzxzdHlsZT4KKyAgICAjZm9v
IHsKKyAgICAgICAgd2lkdGg6MTAwcHg7CisgICAgICAgIGhlaWdodDoxMDBweDsKKyAgICAgICAg
YmFja2dyb3VuZC1pbWFnZTogaW1hZ2Utc2V0KHVybCgncmVzb3VyY2VzL2JsdWUtMTAwLXB4LXNx
dWFyZS5wbmcnKSAxeCwgLXdlYmtpdC1jcm9zcy1mYWRlKHVybCgncmVzb3VyY2VzL2JsdWUtMTAw
LXB4LXNxdWFyZS5wbmcnKSwgdXJsKCdyZXNvdXJjZXMvZ3JlZW4tMjAwLXB4LXNxdWFyZS5wbmcn
LCA1MCUpKSAyeCk7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHk+CisgICAgPGRp
dj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBkaXYgYmVsb3cgaXMgYSBibHVlIDEwMHB4IHNxdWFy
ZSB3aGVuIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBpcyAxLCBhbmQgaWYgaXQgaXMgYSAxMDBweCBn
cmVlbi9ibHVlIGNyb3NzLWZhZGUgc3F1YXJlIHdoZW4gdGhlIGRldmljZVNjYWxlRmFjdG9yIGlz
IDIuPC9kaXY+CisgICAgPGRpdiBpZD1mb28+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1jcm9zcy1m
YWRlLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIwor
KgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50LWV4cGVjdGVkLmh0bWwJKG5v
bmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQt
ZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBACis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdD4KKyAgICB3aW5kb3cub25sb2FkID0gKCkgPT4geworICAgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgICAgICB0ZXN0UnVubmVyLnNldEJhY2tpbmdTY2FsZUZhY3RvcigyLCAoKSA9PiBzZXRUaW1l
b3V0KCgpID0+IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpLCAwKSk7CisgICAgICB9CisgICAgfQor
PC9zY3JpcHQ+CisKKyAgICAKKzxzdHlsZT4KKyAgICAjZm9vIHsKKyAgICAgICAgd2lkdGg6MTAw
cHg7CisgICAgICAgIGhlaWdodDoxMDBweDsKKyAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbGlu
ZWFyLWdyYWRpZW50KGdyZWVuLCB3aGl0ZSk7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKwor
PGJvZHk+CisgICAgPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBkaXYgYmVsb3cgaXMgYSBi
bHVlIDEwMHB4IHNxdWFyZSB3aGVuIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBpcyAxLCBhbmQgaWYg
aXQgaXMgYSAxMDBweCBncmVlbi13aGl0ZSBncmFkaWVudCBzcXVhcmUgd2hlbiB0aGUgZGV2aWNl
U2NhbGVGYWN0b3IgaXMgMi48L2Rpdj4KKyAgICA8ZGl2IGlkPWZvbz48L2Rpdj4KKzwvYm9keT4K
KzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1h
Z2Utc2V0LWdyYWRpZW50LWV4cGVjdGVkLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1
dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1tdWx0aS1leHBl
Y3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0
LWdyYWRpZW50LW11bHRpLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtbXVsdGktZXhwZWN0ZWQuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDI1IEBACis8aHRtbD4KKzxoZWFkPiAgICAKKzxzY3JpcHQ+
CisgICAgd2luZG93Lm9ubG9hZCA9ICgpID0+IHsKKyAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikgeworICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgdGVzdFJ1
bm5lci5zZXRCYWNraW5nU2NhbGVGYWN0b3IoMiwgKCkgPT4gc2V0VGltZW91dCgoKSA9PiB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKSwgMCkpOworICAgICAgfQorICAgIH0KKzwvc2NyaXB0PgorCis8
c3R5bGU+CisgICAgI2ZvbyB7CisgICAgICAgIHdpZHRoOjEwMHB4OworICAgICAgICBoZWlnaHQ6
MTAwcHg7CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHJhZGlhbC1ncmFkaWVudChyZWQsIGJs
dWUpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorICAgIDxkaXY+VGhpcyB0
ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgMTAwcHggZ3JlZW4td2hpdGUgZ3JhZGll
bnQgc3F1YXJlIHdoZW4gZGV2aWNlUGl4ZWxSYXRpbyBpcyAxLCBhIHJhZGlhbCByZWQtYmx1ZSBz
cXVhcmUgd2hlbiBkZXZpY2VQaXhlbFJhdGlvIGlzIDIsIGFuZCBhIGJsdWUgc3F1YXJlIHdoZW4g
ZGV2aWNlUGl4ZWxSYXRpbyBpcyAzLjwvZGl2PgorICAgIDxkaXYgaWQ9Zm9vPjwvZGl2PgorPC9i
b2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9oaWRw
aS9pbWFnZS1zZXQtZ3JhZGllbnQtbXVsdGktZXhwZWN0ZWQuaHRtbApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50
LW11bHRpLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1z
ZXQtZ3JhZGllbnQtbXVsdGkuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1tdWx0aS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjUgQEAKKzxodG1sPgorPGhlYWQ+ICAgIAorPHNjcmlwdD4KKyAgICB3aW5kb3cub25s
b2FkID0gKCkgPT4geworICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB0ZXN0UnVubmVyLnNldEJhY2tpbmdT
Y2FsZUZhY3RvcigyLCAoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpLCAwKSk7CisgICAgICB9CisgICAgfQorPC9zY3JpcHQ+CisKKzxzdHlsZT4KKyAgICAjZm9v
IHsKKyAgICAgICAgd2lkdGg6MTAwcHg7CisgICAgICAgIGhlaWdodDoxMDBweDsKKyAgICAgICAg
YmFja2dyb3VuZC1pbWFnZTogaW1hZ2Utc2V0KGxpbmVhci1ncmFkaWVudChncmVlbiwgd2hpdGUp
IDF4LCByYWRpYWwtZ3JhZGllbnQocmVkLCBibHVlKSAyeCwgJ3Jlc291cmNlcy9ibHVlLTEwMC1w
eC1zcXVhcmUucG5nJyAzeCk7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHk+Cisg
ICAgPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBkaXYgYmVsb3cgaXMgYSAxMDBweCBncmVl
bi13aGl0ZSBncmFkaWVudCBzcXVhcmUgd2hlbiBkZXZpY2VQaXhlbFJhdGlvIGlzIDEsIGEgcmFk
aWFsIHJlZC1ibHVlIHNxdWFyZSB3aGVuIGRldmljZVBpeGVsUmF0aW8gaXMgMiwgYW5kIGEgYmx1
ZSBzcXVhcmUgd2hlbiBkZXZpY2VQaXhlbFJhdGlvIGlzIDMuPC9kaXY+CisgICAgPGRpdiBpZD1m
b28+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRU
ZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1tdWx0aS5odG1sCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3Jh
ZGllbnQtc2luZ2xlLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtc2luZ2xlLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0
ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtc2luZ2xl
LWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNiBAQAorPGh0bWw+Cis8
aGVhZD4KKzxzdHlsZT4KKyAgICAjZm9vIHsKKyAgICAgICAgd2lkdGg6MTAwcHg7CisgICAgICAg
IGhlaWdodDoxMDBweDsKKyAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50
KGdyZWVuLCB3aGl0ZSk7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgaWQ9ImJv
ZHkiPgorICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgZGl2IGJlbG93IGlzIGEgMTAw
cHggZ3JlZW4td2hpdGUgZ3JhZGllbnQgc3F1YXJlLjwvZGl2PgorICAgIDxkaXYgaWQ9Zm9vPjwv
ZGl2PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMv
ZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGllbnQtc2luZ2xlLWV4cGVjdGVkLmh0bWwKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNl
dC1ncmFkaWVudC1zaW5nbGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2hp
ZHBpL2ltYWdlLXNldC1ncmFkaWVudC1zaW5nbGUuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1zaW5nbGUuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBACis8aHRtbD4KKzxoZWFkPiAgICAKKzxzdHlsZT4KKyAg
ICAjZm9vIHsKKyAgICAgICAgd2lkdGg6MTAwcHg7CisgICAgICAgIGhlaWdodDoxMDBweDsKKyAg
ICAgICAgYmFja2dyb3VuZC1pbWFnZTogaW1hZ2Utc2V0KGxpbmVhci1ncmFkaWVudChncmVlbiwg
d2hpdGUpIDF4KTsKKyAgICB9Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBpZD0iYm9keSI+
CisgICAgPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBkaXYgYmVsb3cgaXMgYSAxMDBweCBn
cmVlbi13aGl0ZSBncmFkaWVudCBzcXVhcmUuPC9kaXY+CisgICAgPGRpdiBpZD1mb28+PC9kaXY+
Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0
L2hpZHBpL2ltYWdlLXNldC1ncmFkaWVudC1zaW5nbGUuaHRtbApfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBz
dm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJv
cGVydHkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc2V0LWdyYWRpZW50Lmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zZXQtZ3JhZGll
bnQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNl
dC1ncmFkaWVudC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0PgorICAgIHdpbmRvdy5vbmxvYWQgPSAoKSA9PiB7CisgICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7
CisgICAgICAgIHRlc3RSdW5uZXIuc2V0QmFja2luZ1NjYWxlRmFjdG9yKDIsICgpID0+IHNldFRp
bWVvdXQoKCkgPT4gdGVzdFJ1bm5lci5ub3RpZnlEb25lKCksIDApKTsKKyAgICAgIH0KKyAgICB9
Cis8L3NjcmlwdD4KKworPHN0eWxlPgorICAgICNmb28geworICAgICAgICB3aWR0aDoxMDBweDsK
KyAgICAgICAgaGVpZ2h0OjEwMHB4OworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBpbWFnZS1z
ZXQodXJsKCdyZXNvdXJjZXMvYmx1ZS0xMDAtcHgtc3F1YXJlLnBuZycpIDF4LCBsaW5lYXItZ3Jh
ZGllbnQoZ3JlZW4sIHdoaXRlKSAyeCk7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJv
ZHk+CisgICAgPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBkaXYgYmVsb3cgaXMgYSBibHVl
IDEwMHB4IHNxdWFyZSB3aGVuIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBpcyAxLCBhbmQgaWYgaXQg
aXMgYSAxMDBweCBncmVlbi13aGl0ZSBncmFkaWVudCBzcXVhcmUgd2hlbiB0aGUgZGV2aWNlU2Nh
bGVGYWN0b3IgaXMgMi48L2Rpdj4KKyAgICA8ZGl2IGlkPWZvbz48L2Rpdj4KKzwvYm9keT4KKzwv
aHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Ut
c2V0LWdyYWRpZW50Lmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAs
MCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>