<?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>31737</bug_id>
          
          <creation_ts>2009-11-20 12:02:22 -0800</creation_ts>
          <short_desc>Chromium WebKit API WebPageSerializer</short_desc>
          <delta_ts>2009-12-17 16:27:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yaar Schnitman">yaar</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yaar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>165390</commentid>
    <comment_count>0</comment_count>
      <attachid>43602</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-20 12:02:22 -0800</bug_when>
    <thetext>Created attachment 43602
Patch

Upstreaming of webkit/glue/dom_serializer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165405</commentid>
    <comment_count>1</comment_count>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-20 12:44:11 -0800</bug_when>
    <thetext>Almost compiles. Note a few FIXME with questions for you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165607</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-21 07:22:27 -0800</bug_when>
    <thetext>I guess we would unify some of this with markup.h/cpp once it&apos;s upstream?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165955</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-11-23 15:54:40 -0800</bug_when>
    <thetext>Eric, yeah... that&apos;s the idea!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166259</commentid>
    <comment_count>4</comment_count>
      <attachid>43602</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-11-24 13:21:57 -0800</bug_when>
    <thetext>Comment on attachment 43602
Patch

The StringBuilder additions seem quite handy.


&gt; +++ b/WebKit/chromium/public/WebPageSerializer.h
...
&gt; +// Get html data by serializing all frames of current page with lists
&gt; +// which contain all resource links that have local copy.
&gt; +// contain all saved auxiliary files included all sub frames and resources.

did you mean to delete this second sentence?


&gt; +// This function will find out all frames and serialize them to HTML data.
&gt; +// We have a data buffer to temporary saving generated html data. We will
&gt; +// sequentially call WebViewDelegate::SendSerializedHtmlData once the data
&gt; +// buffer is full. See comments of WebViewDelegate::SendSerializedHtmlData

nit: please fix these references to WebViewDelegate since that interface no
longer exists.


&gt; +class WebPageSerializer {
&gt; +public:
&gt; +

nit: ^^^ kill this new line

&gt; +    // Do serialization action. Return false means no available frame has been
&gt; +    // serialized, otherwise return true.
&gt; +    // The parameter specifies which frame need to be serialized.
&gt; +    // The parameter recursive specifies whether we need to
&gt; +    // serialize all sub frames of the specified frame or not.
&gt; +    // The parameter client specifies the pointer of interface

nit: ^^^ add a trailing period


&gt; +    // WebPageSerializerClient provide sink interface which can receive the
&gt; +    // individual chunks of data to be saved.
&gt; +    // The parameter links contain original URLs of all saved links.
&gt; +    // The parameter localPaths contain corresponding local file paths of all
&gt; +    // saved links, which matched with vector:links one by one.
&gt; +    // The parameter localDirectoryName is relative path of directory which
&gt; +    // contain all saved auxiliary files included all sub frames and resources.
&gt; +    WEBKIT_API static bool serialize(WebFrame* frame,
&gt; +                                     bool recursive,
&gt; +                                     WebPageSerializerClient* client,
&gt; +                                     const WebVector&lt;WebURL&gt;&amp; links,
&gt; +                                     const WebVector&lt;WebString&gt;&amp; localPaths,
&gt; +                                     const WebString&amp; localDirectoryName);
&gt; +
&gt; +    // FIXME: The following are here for unit testing purposes. Consider
&gt; +    // fixing the unit tests instead.

nit: s/fixing/changing/


&gt; +++ b/WebKit/chromium/public/WebPageSerializerClient.h
...
&gt; +class WebPageSerializerClient {
&gt; +public:
&gt; +    // This enum indicates  This sink interface can receive the individual chunks
&gt; +    // of serialized data to be saved, so we use values of following enum
&gt; +    // definition to indicate the serialization status of serializing all html
&gt; +    // content. If current frame is not complete serialized, call
&gt; +    // DidSerializeDataForFrame with URL of current frame, data, data length and

nit: DidSerializeDataForFrame -&gt; didSerializeDataForFrame 


&gt; +    // flag CurrentFrameIsNotFinished.
&gt; +    // If current frame is complete serialized, call DidSerializeDataForFrame

ditto


&gt; +    // with URL of current frame, data, data length and flag
&gt; +    // CurrentFrameIsFinished.
&gt; +    // If all frames of page are complete serialized, call
&gt; +    // DidSerializeDataForFrame with empty URL, empty data, 0 and flag

ditto


&gt; +    enum PageSerializationStatus {
&gt; +        // Current frame is not finished saving.
&gt; +        CurrentFrameIsNotFinished = 0,
&gt; +        // Current frame is finished saving.
&gt; +        CurrentFrameIsFinished,
&gt; +        // All frame are finished saving.
&gt; +        AllFramesAreFinished,
&gt; +    };

nit: ^^^ those comments are just restating the name of the enum with the exception
of the &quot;saving&quot; word.  can we delete the comments?


&gt; +    // Receive the individual chunks of serialized data to be saved.
&gt; +    // The parameter frameURL specifies what frame the data belongs. The
&gt; +    // parameter data contains the available data for saving. The parameter
&gt; +    // status indicates the status of data serialization.
&gt; +    virtual void didSerializeDataForFrame(const WebURL&amp; frameURL,
&gt; +                                          const WebString&amp; data,
&gt; +                                          PageSerializationStatus status) = 0;
&gt; +
&gt; +    WebPageSerializerClient() { }
&gt; +    virtual ~WebPageSerializerClient() { }

^^^ can this destructor be made protected instead?  i think we can do this
to make it clear that WebPageSerializer does not delete the given client.


&gt; +#endif  // WEBKIT_GLUE_DOM_SERIALIZER_DELEGATE_H__

^^^ please fix that comment


&gt; +++ b/WebKit/chromium/src/DOMUtilitiesPrivate.cpp
...
&gt; +    if (attrName == HTMLNames::srcAttr) {
&gt; +        // Check src attribute.
&gt; +        if (element-&gt;hasTagName(HTMLNames::imgTag) ||
&gt; +            element-&gt;hasTagName(HTMLNames::scriptTag) ||
&gt; +            element-&gt;hasTagName(HTMLNames::iframeTag) ||

nit: in webkit style, the &quot;||&quot; should go at the start of the next line


&gt; +++ b/WebKit/chromium/src/WebEntities.cpp
...
&gt; +#include &quot;config.h&quot;
&gt; +#include &quot;WebEntities.h&quot;
&gt; +
&gt; +#include &lt;string.h&gt;
&gt; +// Note that this file is also included by HTMLTokenizer.cpp so we are getting

nit: ^^^ please add a new line after #include &lt;string.h&gt;


&gt; +// two copies of the data in memory.  We can fix this by changing the script
&gt; +// that generated the array to create a static const that is its length, but
&gt; +// this is low priority since the data is less than 4K.
&gt; +#include &quot;HTMLEntityNames.c&quot;
&gt; +#include &quot;PlatformString.h&quot;
&gt; +#include &quot;StringBuilder.h&quot;
&gt; +#include &lt;wtf/HashMap.h&gt;
&gt; +
&gt; +#undef LOG

nit: ^^^ i think can delete this #undef now.


&gt; +
&gt; +#include &quot;WebString.h&quot;
&gt; +
&gt; +using namespace WebCore;
&gt; +
&gt; +namespace WebKit {
&gt; +
&gt; +void populateMap(EntitiesMapType&amp; map,
&gt; +                 const Entity* entities,
&gt; +                 int entitiesCount,

nit: the type of entitiesCount should probably be size_t since you
pass the result of sizeof to it.


&gt; +                 bool standardHTML)
&gt; +{
&gt; +    ASSERT(map.isEmpty());
&gt; +    const Entity* entity = &amp;entities[0];
&gt; +    for (int i = 0; i &lt; entitiesCount; i++, entity++) {

^^^ loop index, i, should then also be size_t.


&gt; +        int code = entity-&gt;code;
&gt; +        String name = entity-&gt;name;
&gt; +        // For consistency, use case insensitive compare for entity codes that have both.
&gt; +        if (map.contains(code)
&gt; +            &amp;&amp; equalIgnoringCase(map.get(code), name))

nit: ^^^ given the long comment, it seems odd to line break here.


&gt; +static const Entity xmlBuiltInEntityCodes[] = {
&gt; +    {&quot;lt&quot;, 0x003c},
&gt; +    {&quot;gt&quot;, 0x003e},
&gt; +    {&quot;amp&quot;, 0x0026},
&gt; +    {&quot;apos&quot;, 0x0027},
&gt; +    {&quot;quot&quot;, 0x0022}

nit: ^^^ please insert a space after &quot;{&quot; and before &quot;}&quot;


&gt; +String WebEntities::convertEntitiesInString(const String&amp; value) const
...
&gt; +        } else {
&gt; +            curPos++;
&gt; +        }

nit: ^^^ no brackets


&gt; +++ b/WebKit/chromium/src/WebEntities.h

&gt; +#include &quot;WebCommon.h&quot;

nit: WebCommon.h doesn&apos;t seem to be needed here.


&gt; +namespace WebKit {
&gt; +typedef HashMap&lt;int, WebCore::String&gt; EntitiesMapType;

can you move this typedef into the WebEntities class?  maybe as a MapType typedef?


&gt; +class WebEntities {
&gt; +public:
...
&gt; +    WebEntities(bool xmlEntities);

nit: ^^^ can this ctor be made explicit?


&gt; +
&gt; +    // Check whether specified unicode has corresponding html or xml built-in
&gt; +    // entity name. If yes, return the entity notation. If not, returns an
&gt; +    // empty string. Parameter isHTML indicates check the code in html entity
&gt; +    // map or in xml entity map.
&gt; +    WebCore::String getEntityNameByCode(int code) const;

nit: I think it would be more conventional to name this method &quot;entityNameByCode&quot;


&gt; +++ b/WebKit/chromium/src/WebFrameImpl.cpp

&gt; +WebFrameImpl* WebFrameImpl::fromFrameOwnerElement(Element* element)
&gt; +{
&gt; +    if (!element
&gt; +        || !element-&gt;isFrameOwnerElement()
&gt; +        || (!element-&gt;hasTagName(WebCore::HTMLNames::iframeTag) 
&gt; +            &amp;&amp; !element-&gt;hasTagName(WebCore::HTMLNames::frameTag)))
&gt; +        return 0;
&gt; +
&gt; +    WebCore::HTMLFrameOwnerElement* frameElement =
&gt; +        static_cast&lt;WebCore::HTMLFrameOwnerElement*&gt;(element);

nit: I think you can drop the WebCore:: prefixes above.


&gt; +++ b/WebKit/chromium/src/WebPageSerializer.cpp
...
&gt; +// FIXME: verify unicode conversions below with Darin.

please remove this comment once settled here.


&gt; +WebString WebPageSerializer::generateMetaCharsetDeclaration(const WebString&amp; charset)
&gt; +{
&gt; +    return String::format(&quot;&lt;META http-equiv=\&quot;Content-Type\&quot; content=\&quot;text/html; charset=%ls\&quot;&gt;&quot;,
&gt; +                          charset.utf8().data());

I think %ls is wrong since you are passing in a UTF-8 string.


&gt; +WebString WebPageSerializer::generateMarkOfTheWebDeclaration(const WebURL&amp; url)
&gt; +{
&gt; +    KURL kurl = url;
&gt; +    return String::format(&quot;\n&lt;!-- saved from url=(%04d)%s --&gt;\n&quot;,
&gt; +                          kurl.string().length(),
&gt; +                          kurl.string().utf8().data());

do you really mean to report the number of UTF-16 code points here?  also, since
you are printing the UTF-8 string, it seems like you would be better off just getting
the string value of the WebURL, which is a WebCString, which is already UTF-8.


&gt; +WebString WebPageSerializer::generateBaseTagDeclaration(const WebString&amp; baseTarget)
&gt; +{
&gt; +    String targetDeclaration;
&gt; +    if (!baseTarget.isEmpty())
&gt; +        targetDeclaration = String::format(&quot; target=\&quot;%ls\&quot;&quot;, baseTarget.utf8().data());
&gt; +    return String::format(&quot;&lt;BASE href=\&quot;.\&quot;%ls&gt;&quot;, targetDeclaration.utf8().data());

same issue with %ls.  i think you want %s.


&gt; +++ b/WebKit/chromium/src/WebPageSerializerImpl.cpp
...

In the ChangeLog, I think you should attribute Johnny Ding as the original author
of this code.

&gt; +namespace WebKit {
...
&gt; +static const WebEntities htmlEntities(false);
&gt; +static const WebEntities xmlEntities(true);

please avoid file static instances of non-POD types.  these should be changed
to either be local variables or function statics that get lazily initialized.


&gt; +// SerializeDomParam Constructor.

this comment isn&apos;t useful, so we should just delete it.


&gt; +String WebPageSerializerImpl::preActionBeforeSerializeEndTag(
...
&gt; +    if (param-&gt;skipMetaElement == element) {
&gt; +        *needSkip = true;
&gt; +    } else if (element-&gt;hasTagName(HTMLNames::scriptTag) ||
&gt; +               element-&gt;hasTagName(HTMLNames::styleTag)) {

nits: ^^^ no brackets around single line statements and &quot;||&quot;
should go at the start of the next line.


&gt; +void WebPageSerializerImpl::openTagToString(const Element* element,
...
&gt; +                    if (attrValue.startsWith(&quot;javascript:&quot;, false)) {
&gt; +                        result += attrValue;
&gt; +                    } else {

nit: ^^^ no brackets around single line statments



&gt; +                       // Get the absolute link
&gt; +                        String completeURL = param-&gt;doc-&gt;completeURL(attrValue);

nit: fix indentation of comment


&gt; +void WebPageSerializerImpl::buildContentForNode(const Node* node,
&gt; +                                                SerializeDomParam* param)
&gt; +{
&gt; +    switch (node-&gt;nodeType()) {
&gt; +        case Node::ELEMENT_NODE: {

nit: case should not be indented inside a switch


&gt; +++ b/WebKit/chromium/src/WebPageSerializerImpl.h

&gt; +#include &quot;config.h&quot;

do not include config.h in header files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166507</commentid>
    <comment_count>5</comment_count>
      <attachid>43858</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-25 10:48:23 -0800</bug_when>
    <thetext>Created attachment 43858
WebPageSerializer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166508</commentid>
    <comment_count>6</comment_count>
      <attachid>43859</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-25 10:56:52 -0800</bug_when>
    <thetext>Created attachment 43859
Patch 3

Further changes in the API were required to support downstream dom_serializer_unittest.cc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166525</commentid>
    <comment_count>7</comment_count>
      <attachid>43859</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-11-25 12:12:32 -0800</bug_when>
    <thetext>Comment on attachment 43859
Patch 3

&gt; +++ b/WebKit/chromium/ChangeLog

^^^ I think this ChangeLog needs to be updated to include WebDocument.


&gt; +++ b/WebKit/chromium/public/WebDocument.h
...
&gt; +// Provides readonly access to some properties of a DOM element node.

nit: did you mean &quot;some properties of a DOM document&quot;?


&gt; +class WebDocument : public WebNode {
&gt; +
&gt; +public:

^^^ no new line before &quot;public:&quot;


&gt; +    WebDocument() : WebNode() { }

nit: no need to call WebNode() explicitly since that happens implicitly.
it is more common to not mention the base class constructor in such cases.


&gt; +    template&lt;typename T&gt; T toElementConst() const
&gt; +    {
&gt; +        T res;
&gt; +        res.m_private = m_private;
&gt; +        return res;
&gt; +    }

^^^ Shouldn&apos;t toElementConst return &apos;const T&apos; to preserve constness?

Also, a naming nit:  You have constUnwrap, which uses const as a prefix,
but here you have it as a suffix.   maybe constUnwrap should be renamed
to unwrapConst for consistency?


&gt; +++ b/WebKit/chromium/public/WebElement.h
...
&gt;          WebElement&amp; operator=(const WTF::PassRefPtr&lt;WebCore::Element&gt;&amp;);
&gt;          operator WTF::PassRefPtr&lt;WebCore::Element&gt;() const;
&gt;  #endif
&gt; +        WEBKIT_API bool hasTagName(const WebString&amp;) const;
&gt; +        WEBKIT_API bool hasAttribute(const WebString&amp;) const;
&gt; +        WEBKIT_API WebString getAttribute(const WebString&amp;) const;

We usually put the WEBKIT_IMPLEMENTATION helpers at the bottom of the
public section.  So, I think you should move these accessors up above
the WEBKIT_IMPLEMENTATION section.


&gt; +++ b/WebKit/chromium/public/WebFrame.h
...
&gt; +    // Return the frame&apos;s encoding.
&gt; +    virtual WebString encoding() const = 0;

We already have WebView::pageEncoding().  Should we deprecate that in
favor of this?


&gt; +    // Returns the page&apos;s document element.
&gt; +    virtual WebDocument document() const = 0;

WebDocument is not an element.  A &quot;document element&quot; is something else.

I think you can just delete this comment.


&gt; +    // Returns the frame inside a given frame or iframe element. Returns 0 if
&gt; +    // the given element is not a frame, iframe or if the frame is empty.
&gt; +    virtual WebFrame* fromFrameElement(WebElement&amp;) const = 0;

^^^ This should be a static function, and it should probably be named
fromFrameOwnerElement.  I think the parameter should be a &quot;const WebElement&amp;&quot;

I would move this to the top-most section of WebFrame, where have other static
methods that return a WebFrame pointer.


&gt; +++ b/WebKit/chromium/public/WebNode.h
...
&gt;      WEBKIT_API WebFrame* frame() const;

I think we should deprecate the &quot;frame()&quot; accessor and replace it with a
document() accessor.  WebDocument should then get a frame() accessor.  This way
it better matches WebCore.

The container for nodes is a document and the container for a document is a
frame.  It seems cleaner for the API to just expose the next containing layer
for any given layer.  Makes sense?


&gt; +++ b/WebKit/chromium/public/WebNodeCollection.h
...
&gt; +#if WEBKIT_IMPLEMENTATION
&gt; +    WebNodeCollection(const WTF::PassRefPtr&lt;WebCore::HTMLCollection&gt;&amp;);
&gt; +#endif
&gt; +
&gt; +    WEBKIT_API unsigned length() const;
&gt; +    WEBKIT_API WebNode nextItem() const;
&gt; +    WEBKIT_API WebNode firstItem() const;

Same nit as before.  Please push the WEBKIT_IMPLEMENTATION section to
the bottom of the public section.


&gt; +protected:
&gt; +    void assign(WebCore::HTMLCollection*);
&gt; +    WebCore::HTMLCollection* m_private;
&gt; +};

^^^ why protected and not private?  Do you anticipate subclassing?


&gt; +++ b/WebKit/chromium/public/WebPageSerializerClient.h
...
&gt; +#ifndef WebDomSerializerClient_h
&gt; +#define WebDomSerializerClient_h

Please fix this include guard.


&gt; +    WebPageSerializerClient() { }
&gt; +protected:
&gt; +    virtual ~WebPageSerializerClient() { }
&gt; +};

^^^ nit: please add a new line above &quot;protected:&quot;


&gt; +++ b/WebKit/chromium/public/WebView.h
...
&gt; +    // Returns the frame with the given url. Returns 0 if no frame has this url.
&gt; +    // If more than one frame has this url, returns the first one.
&gt; +    virtual WebFrame* findFrameByURL(const WebURL&amp; url) = 0;
&gt;  
&gt;      // Focus ---------------------------------------------------------------

^^^ nit: please preserve the two blank line separator between sections


&gt; +++ b/WebKit/chromium/src/WebEntities.cpp

&gt; +    // Optimization: Create StringBuilder only if value has any entities.
&gt; +/*    while (len--) {
&gt; +        if (m_entitiesMap.contains(*curPos)){
&gt; +            len++;
&gt; +            break;
&gt; +        }
&gt; +        curPos++;
&gt; +    }
&gt; +    if (!len)
&gt; +        return value; */

^^^ delete this commented-out code?


&gt; +++ b/WebKit/chromium/src/WebFrameImpl.cpp

&gt; +WebFrame* WebFrameImpl::fromFrameElement(WebElement&amp; element) const
&gt; +{
&gt; +    RefPtr&lt;Element&gt; e = element.operator WTF::PassRefPtr&lt;WebCore::Element&gt;();
&gt; +    return fromFrameOwnerElement(e.get());

it is a bit ugly to call that operator directly like this.  i think it
is better to write it like so:

  return fromFrameOwnerElement(PassRefPtr&lt;Element&gt;(element).get());

Or, perhaps the unwrap and constUnwrap methods should be made public.


&gt; +++ b/WebKit/chromium/src/WebFrameImpl.h
...
&gt; @@ -157,7 +160,7 @@ public:
&gt;      virtual WebURL completeURL(const WebString&amp; url) const;
&gt;      virtual WebString contentAsText(size_t maxChars) const;
&gt;      virtual WebString contentAsMarkup() const;
&gt; -
&gt; +    
&gt;      static PassRefPtr&lt;WebFrameImpl&gt; create(WebFrameClient* client);

^^^ nit: please avoid adding unnecessary whitespace



&gt; +++ b/WebKit/chromium/src/WebNode.cpp

&gt; +WebVector&lt;WebNode&gt; WebNode::childNodes()
&gt; +{
&gt; +    WTF::Vector&lt;WebNode&gt; res;
&gt; +    WTF::PassRefPtr&lt;NodeList&gt; nodeList = m_private-&gt;childNodes();
&gt; +    for (unsigned i = 0; i &lt; nodeList-&gt;length(); i++)
&gt; +        res.append(nodeList-&gt;item(i));
&gt; +    return WebVector&lt;WebNode&gt;(res);

^^^ no need to specify WTF:: in .cpp files.

Also, should we have a WebNodeList type?


&gt; +++ b/WebKit/chromium/src/WebPageSerializerImpl.cpp
&gt; +    , isInScriptOrStyleTag(false)
&gt; +    , hasDocDeclaration(false)
&gt; +{
&gt; +    // Cache the value since we check it lots of times.
&gt; +   isHTMLDocument = doc-&gt;isHTMLDocument();

nit: ^^^ please indent by 4 spaces


&gt; +        // See http://bugs.webkit.org/show_bug.cgi?id=16621.
&gt; +        // First we generate new content for writing correct META element.
&gt; +        result.append(WebPageSerializer::generateMetaCharsetDeclaration(
&gt; +            String(param-&gt;textEncoding.name())));
&gt; +
&gt; +        param-&gt;hasAddedContentsBeforeEnd = true;
&gt; +        // Will search each META which has charset declaration, and skip them all
&gt; +        // in PreActionBeforeSerializeOpenTag.
&gt; +    } else if (element-&gt;hasTagName(HTMLNames::scriptTag) ||
&gt; +               element-&gt;hasTagName(HTMLNames::styleTag)) {

nit: the || should be at the beginning of the next line


&gt; +    switch (node-&gt;nodeType()) {
&gt; +    case Node::ELEMENT_NODE: {
&gt; +        // Process open tag of element.
&gt; +        openTagToString(static_cast&lt;const Element*&gt;(node), param);
&gt; +        // Walk through the children nodes and process it.
&gt; +        for (const Node *child = node-&gt;firstChild(); child != NULL;
&gt; +             child = child-&gt;nextSibling())
&gt; +            buildContentForNode(child, param);
&gt; +        // Process end tag of element.
&gt; +        endTagToString(static_cast&lt;const Element*&gt;(node), param);
&gt; +        break;
&gt; +    }
&gt; +    case Node::TEXT_NODE: {
&gt; +        saveHTMLContentToBuffer(createMarkup(node), param);
&gt; +        break;
&gt; +    }
&gt; +    case Node::ATTRIBUTE_NODE:
&gt; +    case Node::DOCUMENT_NODE:
&gt; +    case Node::DOCUMENT_FRAGMENT_NODE: {
&gt; +        // Should not exist.
&gt; +        ASSERT(false);
&gt; +        break;
&gt; +    }
&gt; +        // Document type node can be in DOM?
&gt; +    case Node::DOCUMENT_TYPE_NODE:
&gt; +        param-&gt;hasDoctype = true;
&gt; +    default: {
&gt; +        // For other type node, call default action.
&gt; +        saveHTMLContentToBuffer(createMarkup(node), param);
&gt; +        break;
&gt; +    }
&gt; +    }

^^^ the brackets for each case are not needed.  you only need
those if there are local variables.

nit: ASSERT(false) should be changed to ASSERT_NOT_REACHED.


&gt; +    // Go through all frames for serializing DOM for whole page, include
&gt; +    // sub-frames.
&gt; +    for (int i = 0; i &lt; static_cast&lt;int&gt;(m_frames.size()); ++i) {

nit: use size_t for i instead of int so you can avoid the static_cast?


&gt; +++ b/WebKit/chromium/src/WebPageSerializerImpl.h
&gt; +public:
&gt; +    // Do serialization action. Return false means no available frame has been
&gt; +    // serialized, otherwise return true.
&gt; +    bool serialize();
&gt; +    // The parameter specifies which frame need to be serialized.

nit: please add a new line after &apos;serialize()&apos;


&gt; +++ b/WebKit/chromium/src/WebViewImpl.cpp

&gt; +WebFrame* WebViewImpl::findFrameByURL(const WebURL&amp; url)
&gt; +{
&gt; +    if (!mainFrameImpl())
&gt; +        return 0;
&gt; +    KURL kurl = url;
&gt; +
&gt; +    WTF::Vector&lt;WebFrameImpl*&gt; frames;

nit: please drop the WTF:: prefix in .cpp files


&gt; +    // First, process main frame.
&gt; +    frames.append(mainFrameImpl());
&gt; +    // Collect all frames inside the specified frame.
&gt; +    for (int i = 0; i &lt; static_cast&lt;int&gt;(frames.size()); ++i) {

nit: please use size_t instead of int for i


&gt; +        WebFrameImpl* currentFrame = frames[i];
&gt; +        // Check whether current frame has the desired url or not.
&gt; +        const KURL&amp; currentFrameURL =
&gt; +            currentFrame-&gt;frame()-&gt;loader()-&gt;url();
&gt; +        if (kurl == currentFrameURL)
&gt; +            return currentFrame;
&gt; +        // Go through nodes and look for sub-frames.
&gt; +        RefPtr&lt;HTMLCollection&gt; all = currentFrame-&gt;frame()-&gt;document()-&gt;all();
&gt; +        for (Node* node = all-&gt;firstItem(); node; node = all-&gt;nextItem()) {
&gt; +            if (!node-&gt;isHTMLElement())
&gt; +                continue;
&gt; +            Element* element = static_cast&lt;WebCore::Element*&gt;(node);
&gt; +        
&gt; +            // Check frame tag and iframe tag.
&gt; +            WebFrameImpl* webFrame = WebFrameImpl::fromFrameOwnerElement(element);
&gt; +            if (webFrame)
&gt; +                frames.append(webFrame);
&gt; +        }
&gt; +    }
&gt; +
&gt; +    return 0;
&gt; +}

Given all of the new additions to the WebKit API, I don&apos;t think you need
to expose findFrameByURL on WebViewImpl.  We can write that function in
the Chromium code base without any troubles.  Let&apos;s keep the WebKit API
as minimal as possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167270</commentid>
    <comment_count>8</comment_count>
      <attachid>44025</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-30 09:18:35 -0800</bug_when>
    <thetext>Created attachment 44025
Added WebPageSerializer to WebKit API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167287</commentid>
    <comment_count>9</comment_count>
      <attachid>44025</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-11-30 10:00:44 -0800</bug_when>
    <thetext>Comment on attachment 44025
Added WebPageSerializer to WebKit API.

&gt; +++ b/WebKit/chromium/public/WebDocument.h
...
&gt; +class WebDocument : public WebNode {
&gt; +public:
&gt; +    WebDocument() { }
&gt; +    WebDocument(const WebDocument&amp; e) : WebNode(e) { }
&gt; +
&gt; +    WebDocument&amp; operator=(const WebDocument&amp; e) { WebNode::assign(e); return *this; }
&gt; +    WEBKIT_API void assign(const WebDocument&amp; e) { WebNode::assign(e); }

since this assign method is implemented inline, it should not be
exported from a WebKit.dll, so drop the WEBKIT_API prefix.


&gt; +    WEBKIT_API WebFrame* frame() const;

perhaps we should document the fact that document&apos;s frame might be null?


&gt; +++ b/WebKit/chromium/public/WebElement.h
...
&gt;          WEBKIT_API void assign(const WebElement&amp; e) { WebNode::assign(e); }

ditto.  drop the WEBKIT_API prefix.


&gt; +++ b/WebKit/chromium/public/WebFrame.h
...
&gt; +    // Returns the frame inside a given frame or iframe element. Returns 0 if
&gt; +    // the given element is not a frame, iframe or if the frame is empty.
&gt; +    WEBKIT_API static WebFrame* fromFrameOwnerElement(WebElement&amp;);

the parameter should be a |const WebElement&amp;|


&gt; +++ b/WebKit/chromium/public/WebNodeCollection.h
...
&gt; +// Provides readonly access to some properties of a DOM node.
&gt; +class WebNodeCollection {
&gt; +public:
&gt; +    virtual ~WebNodeCollection() { reset(); }

does this destructor need to be virtual?  this class doesn&apos;t have
any other virtual methods.  if we can avoid a vtable, then we should.


&gt; +++ b/WebKit/chromium/public/WebNodeList.h
...
&gt; +    virtual ~WebNodeList() { reset(); }

ditto.  seems that we should drop the virtual keyword here.


&gt; +++ b/WebKit/chromium/public/WebPageSerializerClient.h
...
&gt; +    enum PageSerializationStatus {
&gt; +        CurrentFrameIsNotFinished = 0,

nit: no need for &quot;= 0&quot; since that is the default.


&gt; +++ b/WebKit/chromium/public/WebString.h

this patch has grown quite large.  i think in the future it would be much
better to break it up into multiple patches.


&gt; @@ -87,6 +87,9 @@ public:
&gt;      WEBKIT_API static WebString fromUTF8(const char* data, size_t length);
&gt;      WEBKIT_API static WebString fromUTF8(const char* data);
&gt;  
&gt; +    WebString(const char* data);
&gt; +    WebString&amp; operator=(const char* s);

given the implicit WebString(const char*) constructor, I think we can do
without the operator=.  We already have operator=(const WebString&amp;), so
the compiler should invoke the WebString(const char*) constructor when
you write expressions like this:

  WebString s;
  s = &quot;foo&quot;;

also, please remember that any public method not implemented inline needs
WEBKIT_API prefix.  however, please avoid adding that to constructors.
i&apos;ve tried to not need to export constructors.

also, see WebData which has a fancy constructor for initialization from
a string literal that avoids a strlen call.

i think i&apos;d change to this:

  template &lt;int N&gt;
  WebString(const char (&amp;data)[N]) : m_private(0) { assign(fromUTF8(data, N - 1)); }

we could optimize this later to avoid the fromUTF8.


&gt; +++ b/WebKit/chromium/public/WebView.h
&gt; @@ -44,6 +44,7 @@ class WebFrameClient;
&gt;  class WebNode;
&gt;  class WebSettings;
&gt;  class WebString;
&gt; +class WebURL;
&gt;  class WebViewClient;
&gt;  struct WebMediaPlayerAction;
&gt;  struct WebPoint;

^^^ is this change needed?


&gt; +++ b/WebKit/chromium/src/DOMUtilitiesPrivate.cpp
&gt; +++ b/WebKit/chromium/src/WebDocument.cpp
...
&gt; +WebDocument::WebDocument(const WTF::PassRefPtr&lt;WebCore::Document&gt;&amp; elem)
&gt; +    : WebNode(elem.releaseRef())
&gt; +{
&gt; +}
&gt; +
&gt; +WebDocument&amp; WebDocument::operator=(const WTF::PassRefPtr&lt;WebCore::Document&gt;&amp; elem)

please drop the WTF:: prefix and the WebCore:: prefix throughout this file.


&gt; +++ b/WebKit/chromium/src/WebFrameImpl.cpp
...
&gt; +WebFrameImpl* WebFrameImpl::fromFrameOwnerElement(Element* element)
&gt; +{
&gt; +    if (!element
&gt; +        || !element-&gt;isFrameOwnerElement()
&gt; +        || (!element-&gt;hasTagName(HTMLNames::iframeTag)
&gt; +            &amp;&amp; !element-&gt;hasTagName(HTMLNames::frameTag)))
&gt; +        return 0;
&gt; +
&gt; +    WebCore::HTMLFrameOwnerElement* frameElement =
&gt; +        static_cast&lt;WebCore::HTMLFrameOwnerElement*&gt;(element);

drop the WebCore:: prefix


&gt; +++ b/WebKit/chromium/src/WebNode.cpp

&gt; +WebNode::NodeType WebNode::nodeType() const
&gt; +{
&gt; +    return static_cast&lt;WebNode::NodeType&gt;(m_private-&gt;nodeType());
&gt; +}

nit: no need for the WebNode:: prefix within the implementation of
a WebNode method.


&gt;  WebNode::WebNode(const WTF::PassRefPtr&lt;WebCore::Node&gt;&amp; node)
&gt;      : m_private(static_cast&lt;WebNodePrivate*&gt;(node.releaseRef()))
&gt;  {

nit: please avoid the WTF:: and WebCore:: prefixes in .cpp files.


&gt; +++ b/WebKit/chromium/src/WebNodeCollection.cpp
&gt; @@ -0,0 +1,86 @@
&gt; +/*
&gt; + * Copyright (C) 2009 Google Inc. All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions are
&gt; + * met:
&gt; + *
&gt; + *     * Redistributions of source code must retain the above copyright
&gt; + * notice, this list of conditions and the following disclaimer.
&gt; + *     * Redistributions in binary form must reproduce the above
&gt; + * copyright notice, this list of conditions and the following disclaimer
&gt; + * in the documentation and/or other materials provided with the
&gt; + * distribution.
&gt; + *     * Neither the name of Google Inc. nor the names of its
&gt; + * contributors may be used to endorse or promote products derived from
&gt; + * this software without specific prior written permission.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
&gt; + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
&gt; + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
&gt; + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
&gt; + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
&gt; + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
&gt; + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
&gt; + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
&gt; + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +
&gt; +#include &quot;config.h&quot;
&gt; +#include &quot;WebNodeCollection.h&quot;
&gt; +
&gt; +#include &quot;HTMLCollection.h&quot;
&gt; +#include &quot;Node.h&quot;
&gt; +
&gt; +#include &quot;WebNode.h&quot;
&gt; +
&gt; +#include &lt;wtf/PassRefPtr.h&gt;

nit: please place the wtf include in the same group as the WebCore headers.
in this case just below Node.h


&gt; +WebNodeCollection::WebNodeCollection(const WTF::PassRefPtr&lt;HTMLCollection&gt;&amp; col)
&gt; +    : m_private(static_cast&lt;HTMLCollection*&gt;(col.releaseRef()))

drop WTF:: prefix


&gt; +++ b/WebKit/chromium/src/WebNodeList.cpp
...
&gt; +#include &quot;NodeList.h&quot;
&gt; +#include &quot;Node.h&quot;
&gt; +
&gt; +#include &quot;WebNode.h&quot;
&gt; +
&gt; +#include &lt;wtf/PassRefPtr.h&gt;

nit: please place the wtf include in the same group as the WebCore headers.
in this case just below Node.h


&gt; +WebNodeList::WebNodeList(const WTF::PassRefPtr&lt;NodeList&gt;&amp; col)
&gt; +    : m_private(static_cast&lt;NodeList*&gt;(col.releaseRef()))

drop WTF:: prefix


&gt; +++ b/WebKit/chromium/src/WebPageSerializerImpl.h

&gt; +#include &quot;PlatformString.h&quot;
&gt; +#include &quot;StringBuilder.h&quot;
&gt; +#include &quot;StringHash.h&quot;
&gt; +
&gt; +#include &quot;WebEntities.h&quot;
&gt; +#include &quot;WebPageSerializer.h&quot;
&gt; +#include &quot;WebPageSerializerClient.h&quot;
&gt; +#include &quot;WebString.h&quot;
&gt; +#include &quot;WebURL.h&quot;
&gt; +#include &lt;wtf/HashMap.h&gt;
&gt; +#include &lt;wtf/Vector.h&gt;

nit: place the wtf headers up in the same section as the WebCore includes.


&gt; +++ b/WebKit/chromium/src/WebViewImpl.cpp
&gt; @@ -50,6 +50,7 @@
&gt;  #include &quot;FrameView.h&quot;
&gt;  #include &quot;GraphicsContext.h&quot;
&gt;  #include &quot;HitTestResult.h&quot;
&gt; +#include &quot;HTMLAllCollection.h&quot;
&gt;  #include &quot;HTMLInputElement.h&quot;
&gt;  #include &quot;HTMLMediaElement.h&quot;
&gt;  #include &quot;HTMLNames.h&quot;

^^^ is this include needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167293</commentid>
    <comment_count>10</comment_count>
      <attachid>44029</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-30 10:24:08 -0800</bug_when>
    <thetext>Created attachment 44029
Added WebPageSerializer to WebKit API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167387</commentid>
    <comment_count>11</comment_count>
      <attachid>44029</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-11-30 12:50:37 -0800</bug_when>
    <thetext>Comment on attachment 44029
Added WebPageSerializer to WebKit API.

&gt; +++ b/WebKit/chromium/public/WebNodeCollection.h
...
&gt; +class WebNodeCollection {
&gt; +public:
&gt; +    ~WebNodeCollection() { reset(); }
&gt; +
&gt; +    WebNodeCollection(const WebNodeCollection&amp; n) : m_private(0) { assign(n); }
&gt; +    WebNodeCollection&amp; operator=(const WebNodeCollection&amp; n)
&gt; +    {
&gt; +        assign(n);
&gt; +        return *this;
&gt; +    }
&gt; +
&gt; +    WEBKIT_API void reset();
&gt; +    WEBKIT_API void assign(const WebNodeCollection&amp;);
&gt; +
&gt; +    WEBKIT_API unsigned length() const;
&gt; +    WEBKIT_API WebNode nextItem() const;
&gt; +    WEBKIT_API WebNode firstItem() const;
&gt; +
&gt; +#if WEBKIT_IMPLEMENTATION
&gt; +    WebNodeCollection(const WTF::PassRefPtr&lt;WebCore::HTMLCollection&gt;&amp;);
&gt; +#endif
&gt; +
&gt; +private:
&gt; +    void assign(WebCore::HTMLCollection*);
&gt; +    WebCore::HTMLCollection* m_private;
&gt; +};

It looks like this class is missing a default constructor.  I think that&apos;ll
cause some crashes.


&gt; +++ b/WebKit/chromium/public/WebNodeList.h
...
&gt; +class WebNodeList {
&gt; +public:
&gt; +    ~WebNodeList() { reset(); }
&gt; +
&gt; +    WebNodeList(const WebNodeList&amp; n) : m_private(0) { assign(n); }
&gt; +    WebNodeList&amp; operator=(const WebNodeList&amp; n)
&gt; +    {
&gt; +        assign(n);
&gt; +        return *this;
&gt; +    }
&gt; +
&gt; +    WEBKIT_API void reset();
&gt; +    WEBKIT_API void assign(const WebNodeList&amp;);
&gt; +
&gt; +    WEBKIT_API unsigned length() const;
&gt; +    WEBKIT_API WebNode item(size_t) const;
&gt; +
&gt; +#if WEBKIT_IMPLEMENTATION
&gt; +    WebNodeList(const WTF::PassRefPtr&lt;WebCore::NodeList&gt;&amp;);
&gt; +#endif
&gt; +
&gt; +private:
&gt; +    void assign(WebCore::NodeList*);
&gt; +    WebCore::NodeList* m_private;
&gt; +};

ditto



&gt; +++ b/WebKit/chromium/public/WebPageSerializerClient.h
...
&gt; +    enum PageSerializationStatus {
&gt; +        CurrentFrameIsNotFinished = 0,

See previous nit about removing the &quot;= 0&quot;...


&gt; +++ b/WebKit/chromium/public/WebString.h
&gt; @@ -87,6 +87,9 @@ public:
&gt;      WEBKIT_API static WebString fromUTF8(const char* data, size_t length);
&gt;      WEBKIT_API static WebString fromUTF8(const char* data);
&gt;  
&gt; +    WebString(const char* data);
&gt; +    WebString&amp; operator=(const char* s);

looks like this is the same as before.  did you update the wrong patch?


&gt; +++ b/WebKit/chromium/src/WebNode.cpp
...
&gt; +WebNode::NodeType WebNode::nodeType() const
&gt; +{
&gt; +    return static_cast&lt;WebNode::NodeType&gt;(m_private-&gt;nodeType());
&gt; +}

see previous nit about dropping the WebNode:: prefix within the body
of a WebNode method.


&gt; +++ b/WebKit/chromium/src/WebNodeList.cpp
...
&gt; +#include &quot;NodeList.h&quot;
&gt; +#include &quot;Node.h&quot;
&gt; +
&gt; +#include &quot;WebNode.h&quot;
&gt; +
&gt; +#include &lt;wtf/PassRefPtr.h&gt;

see previous nit about moving the wtf header up to the section
including Node.h

[stopping here since i&apos;m repeating myself... is this the right patch?]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167486</commentid>
    <comment_count>12</comment_count>
      <attachid>44049</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-30 17:57:24 -0800</bug_when>
    <thetext>Created attachment 44049
Added WebPageSerializer to WebKit API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167487</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-11-30 17:58:35 -0800</bug_when>
    <thetext>Attachment 44049 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Done processing WebCore/platform/text/StringBuilder.cpp
WebKit/chromium/src/WebNodeList.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/src/WebNodeList.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
Done processing WebKit/chromium/src/WebNodeList.cpp
Done processing WebKit/chromium/src/WebString.cpp
Done processing WebKit/chromium/public/WebPageSerializer.h
Done processing WebKit/chromium/src/AssertMatchingEnums.cpp
Done processing WebKit/chromium/src/WebFrameImpl.h
Done processing WebKit/chromium/public/WebElement.h
WebKit/chromium/src/WebPageSerializerImpl.h:40:  Alphabetical sorting problem.  [build/include_order] [4]
Done processing WebKit/chromium/src/WebPageSerializerImpl.h
WebKit/chromium/src/WebNode.cpp:41:  Alphabetical sorting problem.  [build/include_order] [4]
Done processing WebKit/chromium/src/WebNode.cpp
Done processing WebKit/chromium/src/WebElement.cpp
WebKit/chromium/src/WebPageSerializerImpl.cpp:92:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/src/WebPageSerializerImpl.cpp:96:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/src/WebPageSerializerImpl.cpp:201:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebKit/chromium/src/WebPageSerializerImpl.cpp:235:  Use 0 instead of NULL.  [readability/null] [4]
WebKit/chromium/src/WebPageSerializerImpl.cpp:329:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
WebKit/chromium/src/WebPageSerializerImpl.cpp:401:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebKit/chromium/src/WebPageSerializerImpl.cpp:401:  Use 0 instead of NULL.  [readability/null] [5]
WebKit/chromium/src/WebPageSerializerImpl.cpp:442:  Use 0 instead of NULL.  [readability/null] [4]
WebKit/chromium/src/WebPageSerializerImpl.cpp:473:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebKit/chromium/src/WebPageSerializerImpl.cpp:473:  Use 0 instead of NULL.  [readability/null] [5]
Done processing WebKit/chromium/src/WebPageSerializerImpl.cpp
Done processing WebKit/chromium/public/WebPageSerializerClient.h
WebKit/chromium/src/WebEntities.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/src/WebEntities.cpp:40:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/src/WebEntities.cpp:50:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/src/WebEntities.cpp:125:  One line control clauses should not use braces.  [whitespace/braces] [4]
Done processing WebKit/chromium/src/WebEntities.cpp
Done processing WebKit/chromium/public/WebNodeCollection.h
WebKit/chromium/src/WebDocument.cpp:43:  Alphabetical sorting problem.  [build/include_order] [4]
Done processing WebKit/chromium/src/WebDocument.cpp
Done processing WebKit/chromium/public/WebNodeList.h
Done processing WebCore/platform/text/StringBuilder.h
Done processing WebKit/chromium/src/WebEntities.h
WebKit/chromium/src/WebPageSerializer.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/src/WebPageSerializer.cpp:42:  Alphabetical sorting problem.  [build/include_order] [4]
Done processing WebKit/chromium/src/WebPageSerializer.cpp
Done processing WebKit/chromium/src/DOMUtilitiesPrivate.cpp
Done processing WebKit/chromium/src/DOMUtilitiesPrivate.h
WebKit/chromium/public/WebDocument.h:54:  More than one command on the same line  [whitespace/newline] [4]
Done processing WebKit/chromium/public/WebDocument.h
Done processing WebKit/chromium/src/WebFrameImpl.cpp
Done processing WebKit/chromium/public/WebNode.h
WebKit/chromium/public/WebFormElement.h:53:  More than one command on the same line  [whitespace/newline] [4]
Done processing WebKit/chromium/public/WebFormElement.h
Done processing WebKit/chromium/public/WebFrame.h
Done processing WebKit/chromium/public/WebString.h
WebKit/chromium/src/WebNodeCollection.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
Done processing WebKit/chromium/src/WebNodeCollection.cpp
Total errors found: 24</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167849</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-12-01 19:55:03 -0800</bug_when>
    <thetext>The WebKit Review Bot seems to have spotted a number of valid issues.  Can you please address those?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167850</commentid>
    <comment_count>15</comment_count>
      <attachid>44049</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-12-01 19:57:29 -0800</bug_when>
    <thetext>Comment on attachment 44049
Added WebPageSerializer to WebKit API.

This patch is still missing default constructors for WebNodeCollection and WebNodeList.  Uninitialized memory equals crashiness. R-</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170876</commentid>
    <comment_count>16</comment_count>
      <attachid>44703</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-12-11 12:49:20 -0800</bug_when>
    <thetext>Created attachment 44703
Added WebPageSerializer to WebKit API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170881</commentid>
    <comment_count>17</comment_count>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-12-11 12:52:20 -0800</bug_when>
    <thetext>&gt; Created an attachment (id=44703) [details]
&gt; Added WebPageSerializer to WebKit API.
This patch fixes regression crashes.

Main change is in didSerializeDataForFrame(... WebString ...) which I changed to WebCString, to prevent double encoding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170890</commentid>
    <comment_count>18</comment_count>
      <attachid>44703</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-12-11 13:04:02 -0800</bug_when>
    <thetext>Comment on attachment 44703
Added WebPageSerializer to WebKit API.

Please fix these nits and then R=me.


&gt; +++ b/WebKit/chromium/public/WebNodeCollection.h
...
&gt; +    WebNodeCollection() : m_private(0) { };

^^^ nit: delete the trailing semicolon


&gt; +++ b/WebKit/chromium/public/WebNodeList.h
...
&gt; +    WebNodeList() : m_private(0) { };

ditto


&gt; +    WEBKIT_API WebString&amp; operator=(const char* s);

why not implement this using the same template approach?  it would be
nice for the conversion constructor to be similar to the operator=.

&gt; +++ b/WebKit/chromium/src/DOMUtilitiesPrivate.cpp
...
&gt;  }
&gt;  
&gt; +
&gt; +bool elementHasLegalLinkAttribute(const Element* element,

^^^ nit: no extra new line above.


&gt; +++ b/WebKit/chromium/src/WebDocument.cpp

&gt; +#include &quot;Document.h&quot;
&gt; +#include &quot;Element.h&quot;
&gt; +#include &quot;HTMLAllCollection.h&quot;
&gt; +#include &quot;HTMLBodyElement.h&quot;
&gt; +#include &quot;HTMLCollection.h&quot;
&gt; +#include &quot;HTMLElement.h&quot;
&gt; +#include &quot;HTMLHeadElement.h&quot;
&gt; +
&gt; +#include &quot;WebElement.h&quot;
&gt; +#include &quot;WebFrameImpl.h&quot;
&gt; +#include &quot;WebNodeCollection.h&quot;
&gt; +#include &quot;WebURL.h&quot;
&gt; +
&gt; +#include &lt;wtf/PassRefPtr.h&gt;

^^^ nit: please move wtf/ includes up with the WebCore includes.


&gt; +++ b/WebKit/chromium/src/WebEntities.cpp
...
&gt; +#include &quot;config.h&quot;
&gt; +#include &quot;WebEntities.h&quot;
&gt; +
&gt; +#include &quot;PlatformString.h&quot;
&gt; +#include &quot;StringBuilder.h&quot;
&gt; +
&gt; +#include &quot;WebString.h&quot;
&gt; +
&gt; +#include &lt;string.h&gt;
&gt; +#include &lt;wtf/HashMap.h&gt;

the above should be:

#include &quot;config.h&quot;
#include &quot;WebEntities.h&quot;

#include &lt;string.h&gt;

#include &quot;PlatformString.h&quot;
#include &quot;StringBuilder.h&quot;
#include &lt;wtf/HashMap.h&gt;

#include &quot;WebString.h&quot;




&gt; +
&gt; +
&gt; +using namespace WebCore;
&gt; +
&gt; +namespace {
&gt; +// Note that this file is also included by HTMLTokenizer.cpp so we are getting
&gt; +// two copies of the data in memory.  We can fix this by changing the script
&gt; +// that generated the array to create a static const that is its length, but
&gt; +// this is low priority since the data is less than 4K. We use anonymous
&gt; +// namespace to prevent name collisions.
&gt; +#include &quot;HTMLEntityNames.c&quot; // NOLINT

nit: what is the NOLINT comment doing here?  i don&apos;t think we want to use that
in the webkit repository.


&gt; +++ b/WebKit/chromium/src/WebNodeCollection.cpp
...
&gt; +#include &quot;config.h&quot;
&gt; +#include &quot;WebNodeCollection.h&quot;
&gt; +
&gt; +#include &quot;HTMLCollection.h&quot;
&gt; +#include &quot;Node.h&quot;
&gt; +
&gt; +#include &quot;WebNode.h&quot;
&gt; +
&gt; +#include &lt;wtf/PassRefPtr.h&gt;

^^^ same nit about wtf/ header placement.  please group with webcore headers.


&gt; +++ b/WebKit/chromium/src/WebNodeList.cpp
...
&gt; +#include &quot;config.h&quot;
&gt; +#include &quot;WebNodeList.h&quot;
&gt; +
&gt; +#include &quot;Node.h&quot;
&gt; +#include &quot;NodeList.h&quot;
&gt; +
&gt; +#include &quot;WebNode.h&quot;
&gt; +
&gt; +#include &lt;wtf/PassRefPtr.h&gt;

ditto


&gt; +++ b/WebKit/chromium/src/WebPageSerializerImpl.cpp
...
&gt; +#include &quot;config.h&quot;
&gt; +#include &quot;WebPageSerializerImpl.h&quot;
&gt; +
&gt; +#include &quot;DOMUtilitiesPrivate.h&quot;
&gt; +#include &quot;Document.h&quot;
&gt; +#include &quot;DocumentType.h&quot;
&gt; +#include &quot;Element.h&quot;
&gt; +#include &quot;FrameLoader.h&quot;
&gt; +#include &quot;HTMLAllCollection.h&quot;
&gt; +#include &quot;HTMLElement.h&quot;
&gt; +#include &quot;HTMLFormElement.h&quot;
&gt; +#include &quot;HTMLMetaElement.h&quot;
&gt; +#include &quot;HTMLNames.h&quot;
&gt; +#include &quot;KURL.h&quot;
&gt; +#include &quot;PlatformString.h&quot;
&gt; +#include &quot;StringBuilder.h&quot;
&gt; +#include &quot;TextEncoding.h&quot;
&gt; +
&gt; +#include &quot;WebFrameImpl.h&quot;
&gt; +#include &quot;WebURL.h&quot;
&gt; +#include &quot;WebVector.h&quot;
&gt; +
&gt; +#include &quot;markup.h&quot;

^^^ markup.h should be grouped with the other webcore headers.


&gt; +++ b/WebKit/chromium/src/WebPageSerializerImpl.h
...
&gt; +#include &quot;PlatformString.h&quot;
&gt; +#include &quot;StringBuilder.h&quot;
&gt; +#include &quot;StringHash.h&quot;
&gt; +
&gt; +#include &quot;WebEntities.h&quot;
&gt; +#include &quot;WebPageSerializer.h&quot;
&gt; +#include &quot;WebPageSerializerClient.h&quot;
&gt; +#include &quot;WebString.h&quot;
&gt; +#include &quot;WebURL.h&quot;
&gt; +
&gt; +#include &lt;wtf/HashMap.h&gt;
&gt; +#include &lt;wtf/Vector.h&gt;

^^^ nit: please group wtf/ headers with the webcore headers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170949</commentid>
    <comment_count>19</comment_count>
      <attachid>44712</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-12-11 15:07:50 -0800</bug_when>
    <thetext>Created attachment 44712
Added WebPageSerializer to WebKit API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171512</commentid>
    <comment_count>20</comment_count>
      <attachid>44712</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-12-14 12:49:07 -0800</bug_when>
    <thetext>Comment on attachment 44712
Added WebPageSerializer to WebKit API.

Did you upload the wrong patch?  This looks like the previous one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171663</commentid>
    <comment_count>21</comment_count>
      <attachid>44834</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-12-14 19:26:52 -0800</bug_when>
    <thetext>Created attachment 44834
Added WebPageSerializer to WebKit API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171673</commentid>
    <comment_count>22</comment_count>
      <attachid>44834</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-12-14 20:53:21 -0800</bug_when>
    <thetext>Comment on attachment 44834
Added WebPageSerializer to WebKit API.

R=me :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171924</commentid>
    <comment_count>23</comment_count>
      <attachid>44834</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-15 10:43:50 -0800</bug_when>
    <thetext>Comment on attachment 44834
Added WebPageSerializer to WebKit API.

Rejecting patch 44834 from commit-queue.

Failed to run &quot;[&apos;/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, &apos;--reviewer&apos;, &apos;Darin Fisher&apos;, &apos;--force&apos;]&quot; exit_code: 1
Last 500 characters of output:
t/chromium/src/WebEntities.h
patching file WebKit/chromium/src/WebFrameImpl.cpp
Hunk #5 succeeded at 1649 (offset -1 lines).
patching file WebKit/chromium/src/WebFrameImpl.h
patching file WebKit/chromium/src/WebNode.cpp
patching file WebKit/chromium/src/WebNodeCollection.cpp
patching file WebKit/chromium/src/WebNodeList.cpp
patching file WebKit/chromium/src/WebPageSerializer.cpp
patching file WebKit/chromium/src/WebPageSerializerImpl.cpp
patching file WebKit/chromium/src/WebPageSerializerImpl.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172984</commentid>
    <comment_count>24</comment_count>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-12-17 16:27:53 -0800</bug_when>
    <thetext>Landed: http://trac.webkit.org/changeset/52268/trunk</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43602</attachid>
            <date>2009-11-20 12:02:22 -0800</date>
            <delta_ts>2009-11-25 10:48:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>20091120120221.patch</filename>
            <type>text/plain</type>
            <size>61317</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAppbmRleCBjMjFlMzY2Li4zZTM0
OTgxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCkBAIC05NSw0ICs5
NSwxNyBAQCBTdHJpbmcgU3RyaW5nQnVpbGRlcjo6dG9TdHJpbmcoKSBjb25zdAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6Y2xlYXIoKQoreworICAgIG1fdG90
YWxMZW5ndGggPSBVSU5UX01BWDsKKyAgICBtX3N0cmluZ3MuY2xlYXIoKTsKK30KKwordW5zaWdu
ZWQgU3RyaW5nQnVpbGRlcjo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICBpZiAobV90b3RhbExlbmd0
aCA9PSBVSU5UX01BWCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fdG90YWxMZW5n
dGg7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWls
ZGVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5oCmluZGV4IDhkNzZi
OWMuLjdmNzJmYmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWls
ZGVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxkZXIuaApAQCAtNDIs
NiArNDIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgYXBwZW5kKGNvbnN0
IFN0cmluZyYpOwogICAgICAgICB2b2lkIGFwcGVuZChVQ2hhcik7CiAgICAgICAgIHZvaWQgYXBw
ZW5kKGNoYXIpOworICAgICAgICAKKyAgICAgICAgdm9pZCBjbGVhcigpOworICAgICAgICB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdDsKIAogICAgICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsK
IApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cAppbmRleCBhYjA4ZGM5Li5hMjYwZTZmIDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAt
MTMxLDYgKzEzMSw4IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJOb3RpZmljYXRpb24u
aCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJOb3RpZmljYXRpb25QcmVzZW50ZXIuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJh
Y2suaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oJywKKyAg
ICAgICAgICAgICAgICAncHVibGljL1dlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgnLAogICAgICAg
ICAgICAgICAgICdwdWJsaWMvV2ViUGFzc3dvcmRBdXRvY29tcGxldGVMaXN0ZW5lci5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYlBhc3N3b3JkRm9ybURhdGEuaCcsCiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJQbHVnaW4uaCcsCkBAIC0yNDIsNiArMjQ0LDggQEAKICAgICAgICAg
ICAgICAgICAnc3JjL1dlYkRhdGFTb3VyY2VJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViRHJhZ0RhdGEuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkVsZW1lbnQuY3BwJywK
KyAgICAgICAgICAgICAgICAnc3JjL1dlYkVudGl0aWVzLmNwcCcsCisgICAgICAgICAgICAgICAg
J3NyYy9XZWJFbnRpdGllcy5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZpbGVDaG9vc2Vy
Q29tcGxldGlvbkltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZpbGVDaG9vc2Vy
Q29tcGxldGlvbkltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGb250Q2FjaGUuY3Bw
JywKQEAgLTI2MSw2ICsyNjUsOSBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFQbGF5
ZXJDbGllbnRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTm9kZS5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViTm90aWZpY2F0aW9uLmNwcCcsCisgICAgICAgICAgICAgICAg
J3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViUGFn
ZVNlcmlhbGl6ZXJJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJQYWdlU2VyaWFs
aXplckltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJQYXNzd29yZEZvcm1EYXRhLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJQYXNzd29yZEZvcm1VdGlscy5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViUGFzc3dvcmRGb3JtVXRpbHMuaCcsCmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmggYi9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYTAzOTQyMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViUGFnZVNlcmlhbGl6ZXIuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQYWdlU2Vy
aWFsaXplcl9oCisjZGVmaW5lIFdlYlBhZ2VTZXJpYWxpemVyX2gKKworI2luY2x1ZGUgIldlYkNv
bW1vbi5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkZyYW1lOworY2xhc3MgV2Vi
UGFnZVNlcmlhbGl6ZXJDbGllbnQ7CitjbGFzcyBXZWJTdHJpbmc7CitjbGFzcyBXZWJVUkw7Cit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2ViVmVjdG9yOworCisvLyBHZXQgaHRtbCBkYXRh
IGJ5IHNlcmlhbGl6aW5nIGFsbCBmcmFtZXMgb2YgY3VycmVudCBwYWdlIHdpdGggbGlzdHMKKy8v
IHdoaWNoIGNvbnRhaW4gYWxsIHJlc291cmNlIGxpbmtzIHRoYXQgaGF2ZSBsb2NhbCBjb3B5Lgor
Ly8gY29udGFpbiBhbGwgc2F2ZWQgYXV4aWxpYXJ5IGZpbGVzIGluY2x1ZGVkIGFsbCBzdWIgZnJh
bWVzIGFuZCByZXNvdXJjZXMuCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgZmluZCBvdXQgYWxsIGZy
YW1lcyBhbmQgc2VyaWFsaXplIHRoZW0gdG8gSFRNTCBkYXRhLgorLy8gV2UgaGF2ZSBhIGRhdGEg
YnVmZmVyIHRvIHRlbXBvcmFyeSBzYXZpbmcgZ2VuZXJhdGVkIGh0bWwgZGF0YS4gV2Ugd2lsbAor
Ly8gc2VxdWVudGlhbGx5IGNhbGwgV2ViVmlld0RlbGVnYXRlOjpTZW5kU2VyaWFsaXplZEh0bWxE
YXRhIG9uY2UgdGhlIGRhdGEKKy8vIGJ1ZmZlciBpcyBmdWxsLiBTZWUgY29tbWVudHMgb2YgV2Vi
Vmlld0RlbGVnYXRlOjpTZW5kU2VyaWFsaXplZEh0bWxEYXRhCisvLyBmb3IgZ2V0dGluZyBtb3Jl
IGluZm9ybWF0aW9uLgorY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXIgeworcHVibGljOgorCisgICAg
Ly8gRG8gc2VyaWFsaXphdGlvbiBhY3Rpb24uIFJldHVybiBmYWxzZSBtZWFucyBubyBhdmFpbGFi
bGUgZnJhbWUgaGFzIGJlZW4KKyAgICAvLyBzZXJpYWxpemVkLCBvdGhlcndpc2UgcmV0dXJuIHRy
dWUuCisgICAgLy8gVGhlIHBhcmFtZXRlciBzcGVjaWZpZXMgd2hpY2ggZnJhbWUgbmVlZCB0byBi
ZSBzZXJpYWxpemVkLgorICAgIC8vIFRoZSBwYXJhbWV0ZXIgcmVjdXJzaXZlIHNwZWNpZmllcyB3
aGV0aGVyIHdlIG5lZWQgdG8KKyAgICAvLyBzZXJpYWxpemUgYWxsIHN1YiBmcmFtZXMgb2YgdGhl
IHNwZWNpZmllZCBmcmFtZSBvciBub3QuCisgICAgLy8gVGhlIHBhcmFtZXRlciBjbGllbnQgc3Bl
Y2lmaWVzIHRoZSBwb2ludGVyIG9mIGludGVyZmFjZQorICAgIC8vIFdlYlBhZ2VTZXJpYWxpemVy
Q2xpZW50IHByb3ZpZGUgc2luayBpbnRlcmZhY2Ugd2hpY2ggY2FuIHJlY2VpdmUgdGhlCisgICAg
Ly8gaW5kaXZpZHVhbCBjaHVua3Mgb2YgZGF0YSB0byBiZSBzYXZlZC4KKyAgICAvLyBUaGUgcGFy
YW1ldGVyIGxpbmtzIGNvbnRhaW4gb3JpZ2luYWwgVVJMcyBvZiBhbGwgc2F2ZWQgbGlua3MuCisg
ICAgLy8gVGhlIHBhcmFtZXRlciBsb2NhbFBhdGhzIGNvbnRhaW4gY29ycmVzcG9uZGluZyBsb2Nh
bCBmaWxlIHBhdGhzIG9mIGFsbAorICAgIC8vIHNhdmVkIGxpbmtzLCB3aGljaCBtYXRjaGVkIHdp
dGggdmVjdG9yOmxpbmtzIG9uZSBieSBvbmUuCisgICAgLy8gVGhlIHBhcmFtZXRlciBsb2NhbERp
cmVjdG9yeU5hbWUgaXMgcmVsYXRpdmUgcGF0aCBvZiBkaXJlY3Rvcnkgd2hpY2gKKyAgICAvLyBj
b250YWluIGFsbCBzYXZlZCBhdXhpbGlhcnkgZmlsZXMgaW5jbHVkZWQgYWxsIHN1YiBmcmFtZXMg
YW5kIHJlc291cmNlcy4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBib29sIHNlcmlhbGl6ZShXZWJG
cmFtZSogZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBy
ZWN1cnNpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViUGFnZVNl
cmlhbGl6ZXJDbGllbnQqIGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBXZWJWZWN0b3I8V2ViVVJMPiYgbGlua3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGxvY2FsUGF0aHMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBs
b2NhbERpcmVjdG9yeU5hbWUpOworCisgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgYXJlIGhl
cmUgZm9yIHVuaXQgdGVzdGluZyBwdXJwb3Nlcy4gQ29uc2lkZXIKKyAgICAvLyBmaXhpbmcgdGhl
IHVuaXQgdGVzdHMgaW5zdGVhZC4KKworICAgIC8vIEdlbmVyYXRlIHRoZSBNRVRBIGZvciBjaGFy
c2V0IGRlY2xhcmF0aW9uLgorICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0
ZU1ldGFDaGFyc2V0RGVjbGFyYXRpb24oY29uc3QgV2ViU3RyaW5nJiBjaGFyc2V0KTsKKyAgICAv
LyBHZW5lcmF0ZSB0aGUgTU9UVyBkZWNsYXJhdGlvbi4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBX
ZWJTdHJpbmcgZ2VuZXJhdGVNYXJrT2ZUaGVXZWJEZWNsYXJhdGlvbihjb25zdCBXZWJVUkwmIHVy
bCk7CisgICAgLy8gR2VuZXJhdGUgdGhlIGRlZmF1bHQgYmFzZSB0YWcgZGVjbGFyYXRpb24uCisg
ICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5nIGdlbmVyYXRlQmFzZVRhZ0RlY2xhcmF0aW9u
KGNvbnN0IFdlYlN0cmluZyYgYmFzZVRhcmdldCk7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdl
U2VyaWFsaXplckNsaWVudC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFs
aXplckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMWZjZTMK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxp
emVyQ2xpZW50LmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRG9tU2VyaWFsaXplckNsaWVu
dF9oCisjZGVmaW5lIFdlYkRvbVNlcmlhbGl6ZXJDbGllbnRfaAorCituYW1lc3BhY2UgV2ViS2l0
IHsKK2NsYXNzIFdlYlN0cmluZzsKK2NsYXNzIFdlYlVSTDsKKworLy8gVGhpcyBjbGFzcyBpcyB1
c2VkIGZvciBwcm92aWRpbmcgc2luayBpbnRlcmZhY2UgdGhhdCBjYW4gYmUgdXNlZCB0byByZWNl
aXZlCisvLyB0aGUgaW5kaXZpZHVhbCBjaHVua3Mgb2YgZGF0YSB0byBiZSBzYXZlZC4KK2NsYXNz
IFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICAvLyBUaGlzIGVudW0gaW5k
aWNhdGVzICBUaGlzIHNpbmsgaW50ZXJmYWNlIGNhbiByZWNlaXZlIHRoZSBpbmRpdmlkdWFsIGNo
dW5rcworICAgIC8vIG9mIHNlcmlhbGl6ZWQgZGF0YSB0byBiZSBzYXZlZCwgc28gd2UgdXNlIHZh
bHVlcyBvZiBmb2xsb3dpbmcgZW51bQorICAgIC8vIGRlZmluaXRpb24gdG8gaW5kaWNhdGUgdGhl
IHNlcmlhbGl6YXRpb24gc3RhdHVzIG9mIHNlcmlhbGl6aW5nIGFsbCBodG1sCisgICAgLy8gY29u
dGVudC4gSWYgY3VycmVudCBmcmFtZSBpcyBub3QgY29tcGxldGUgc2VyaWFsaXplZCwgY2FsbAor
ICAgIC8vIERpZFNlcmlhbGl6ZURhdGFGb3JGcmFtZSB3aXRoIFVSTCBvZiBjdXJyZW50IGZyYW1l
LCBkYXRhLCBkYXRhIGxlbmd0aCBhbmQKKyAgICAvLyBmbGFnIEN1cnJlbnRGcmFtZUlzTm90Rmlu
aXNoZWQuCisgICAgLy8gSWYgY3VycmVudCBmcmFtZSBpcyBjb21wbGV0ZSBzZXJpYWxpemVkLCBj
YWxsIERpZFNlcmlhbGl6ZURhdGFGb3JGcmFtZQorICAgIC8vIHdpdGggVVJMIG9mIGN1cnJlbnQg
ZnJhbWUsIGRhdGEsIGRhdGEgbGVuZ3RoIGFuZCBmbGFnCisgICAgLy8gQ3VycmVudEZyYW1lSXNG
aW5pc2hlZC4KKyAgICAvLyBJZiBhbGwgZnJhbWVzIG9mIHBhZ2UgYXJlIGNvbXBsZXRlIHNlcmlh
bGl6ZWQsIGNhbGwKKyAgICAvLyBEaWRTZXJpYWxpemVEYXRhRm9yRnJhbWUgd2l0aCBlbXB0eSBV
UkwsIGVtcHR5IGRhdGEsIDAgYW5kIGZsYWcKKyAgICAvLyBBbGxGcmFtZXNBcmVGaW5pc2hlZC4K
KyAgICBlbnVtIFBhZ2VTZXJpYWxpemF0aW9uU3RhdHVzIHsKKyAgICAgICAgLy8gQ3VycmVudCBm
cmFtZSBpcyBub3QgZmluaXNoZWQgc2F2aW5nLgorICAgICAgICBDdXJyZW50RnJhbWVJc05vdEZp
bmlzaGVkID0gMCwKKyAgICAgICAgLy8gQ3VycmVudCBmcmFtZSBpcyBmaW5pc2hlZCBzYXZpbmcu
CisgICAgICAgIEN1cnJlbnRGcmFtZUlzRmluaXNoZWQsCisgICAgICAgIC8vIEFsbCBmcmFtZSBh
cmUgZmluaXNoZWQgc2F2aW5nLgorICAgICAgICBBbGxGcmFtZXNBcmVGaW5pc2hlZCwKKyAgICB9
OworCisgICAgLy8gUmVjZWl2ZSB0aGUgaW5kaXZpZHVhbCBjaHVua3Mgb2Ygc2VyaWFsaXplZCBk
YXRhIHRvIGJlIHNhdmVkLgorICAgIC8vIFRoZSBwYXJhbWV0ZXIgZnJhbWVVUkwgc3BlY2lmaWVz
IHdoYXQgZnJhbWUgdGhlIGRhdGEgYmVsb25ncy4gVGhlCisgICAgLy8gcGFyYW1ldGVyIGRhdGEg
Y29udGFpbnMgdGhlIGF2YWlsYWJsZSBkYXRhIGZvciBzYXZpbmcuIFRoZSBwYXJhbWV0ZXIKKyAg
ICAvLyBzdGF0dXMgaW5kaWNhdGVzIHRoZSBzdGF0dXMgb2YgZGF0YSBzZXJpYWxpemF0aW9uLgor
ICAgIHZpcnR1YWwgdm9pZCBkaWRTZXJpYWxpemVEYXRhRm9yRnJhbWUoY29uc3QgV2ViVVJMJiBm
cmFtZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFdlYlN0cmluZyYgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBhZ2VTZXJpYWxpemF0aW9uU3RhdHVzIHN0YXR1cykgPSAwOworCisgICAgV2ViUGFnZVNl
cmlhbGl6ZXJDbGllbnQoKSB7IH0KKyAgICB2aXJ0dWFsIH5XZWJQYWdlU2VyaWFsaXplckNsaWVu
dCgpIHsgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgIC8vIFdFQktJ
VF9HTFVFX0RPTV9TRVJJQUxJWkVSX0RFTEVHQVRFX0hfXwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3NyYy9ET01VdGlsaXRpZXNQcml2YXRlLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
RE9NVXRpbGl0aWVzUHJpdmF0ZS5jcHAKaW5kZXggZTg0ZDRmYi4uYzRlNTU0MyAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9ET01VdGlsaXRpZXNQcml2YXRlLmNwcAorKysgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL0RPTVV0aWxpdGllc1ByaXZhdGUuY3BwCkBAIC05Miw0ICs5Miw1NSBA
QCBTdHJpbmcgbmFtZU9mSW5wdXRFbGVtZW50KEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCiAg
ICAgcmV0dXJuIFN0cmluZygpOwogfQogCisKK2Jvb2wgZWxlbWVudEhhc0xlZ2FsTGlua0F0dHJp
YnV0ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIGlmIChhdHRyTmFt
ZSA9PSBIVE1MTmFtZXM6OnNyY0F0dHIpIHsKKyAgICAgICAgLy8gQ2hlY2sgc3JjIGF0dHJpYnV0
ZS4KKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWdUYWcpIHx8
CisgICAgICAgICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0VGFnKSB8
fAorICAgICAgICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZVRhZykg
fHwKKyAgICAgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZVRhZykp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjppbnB1dFRhZykpIHsKKyAgICAgICAgICAgIGNvbnN0IEhUTUxJbnB1dEVs
ZW1lbnQqIGlucHV0ID0KKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IEhUTUxJbnB1dEVs
ZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChpbnB1dC0+aW5wdXRUeXBlKCkgPT0g
SFRNTElucHV0RWxlbWVudDo6SU1BR0UpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IEhUTUxOYW1lczo6aHJlZkF0dHIp
IHsKKyAgICAgICAgLy8gQ2hlY2sgaHJlZiBhdHRyaWJ1dGUuCisgICAgICAgIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGlua1RhZykgfHwKKyAgICAgICAgICAgIGVsZW1lbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphVGFnKSB8fAorICAgICAgICAgICAgZWxlbWVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmFyZWFUYWcpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBIVE1MTmFtZXM6OmFjdGlvbkF0dHIpIHsKKyAgICAg
ICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtVGFnKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjpi
YWNrZ3JvdW5kQXR0cikgeworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmJvZHlUYWcpIHx8CisgICAgICAgICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6dGFibGVUYWcpIHx8CisgICAgICAgICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6dHJUYWcpIHx8CisgICAgICAgICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGRUYWcpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIGlmIChhdHRyTmFt
ZSA9PSBIVE1MTmFtZXM6OmNpdGVBdHRyKSB7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZVRhZykgfHwKKyAgICAgICAgICAgIGVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpxVGFnKSB8fAorICAgICAgICAgICAgZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmRlbFRhZykgfHwKKyAgICAgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjppbnNUYWcpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBl
bHNlIGlmIChhdHRyTmFtZSA9PSBIVE1MTmFtZXM6OmNsYXNzaWRBdHRyIHx8CisgICAgICAgICAg
ICAgICBhdHRyTmFtZSA9PSBIVE1MTmFtZXM6OmRhdGFBdHRyKSB7CisgICAgICAgIGlmIChlbGVt
ZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjpjb2RlYmFzZUF0
dHIpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3RU
YWcpIHx8CisgICAgICAgICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YXBwbGV0
VGFnKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL0RPTVV0aWxpdGllc1ByaXZhdGUuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRE9NVXRp
bGl0aWVzUHJpdmF0ZS5oCmluZGV4IGM3MDFkMGEuLjZkNWM5YmUgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5oCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5oCkBAIC0zMiwxMSArMzIsMTMgQEAKICNkZWZpbmUg
RE9NVXRpbGl0aWVzUHJpdmF0ZV9oCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEVsZW1l
bnQ7CiBjbGFzcyBIVE1MSW5wdXRFbGVtZW50OwogY2xhc3MgSFRNTExpbmtFbGVtZW50OwogY2xh
c3MgSFRNTE1ldGFFbGVtZW50OwogY2xhc3MgSFRNTE9wdGlvbkVsZW1lbnQ7CiBjbGFzcyBOb2Rl
OworY2xhc3MgUXVhbGlmaWVkTmFtZTsKIGNsYXNzIFN0cmluZzsKIH0KIApAQCAtNTUsNiArNTcs
MTYgQEAgV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQqIHRvSFRNTE9wdGlvbkVsZW1lbnQoV2Vi
Q29yZTo6Tm9kZSopOwogLy8gc3RyaW5nIGlmIGl0IGhhcyBubyBuYW1lIGFuZCBubyBpZC4KIFdl
YkNvcmU6OlN0cmluZyBuYW1lT2ZJbnB1dEVsZW1lbnQoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dCopOwogCisvLyBGb3IgaW1nLCBzY3JpcHQsIGlmcmFtZSwgZnJhbWUgZWxlbWVudCwgd2hlbiBh
dHRyaWJ1dGUgbmFtZSBpcyBzcmMsCisvLyBmb3IgbGluaywgYSwgYXJlYSBlbGVtZW50LCB3aGVu
IGF0dHJpYnV0ZSBuYW1lIGlzIGhyZWYsCisvLyBmb3IgZm9ybSBlbGVtZW50LCB3aGVuIGF0dHJp
YnV0ZSBuYW1lIGlzIGFjdGlvbiwKKy8vIGZvciBpbnB1dCwgdHlwZT1pbWFnZSwgd2hlbiBhdHRy
aWJ1dGUgbmFtZSBpcyBzcmMsCisvLyBmb3IgYm9keSwgdGFibGUsIHRyLCB0ZCwgd2hlbiBhdHRy
aWJ1dGUgbmFtZSBpcyBiYWNrZ3JvdW5kLAorLy8gZm9yIGJsb2NrcXVvdGUsIHEsIGRlbCwgaW5z
LCB3aGVuIGF0dHJpYnV0ZSBuYW1lIGlzIGNpdGUsCisvLyB3ZSBjYW4gY29uc2lkZXIgdGhlIGF0
dHJpYnV0ZSB2YWx1ZSBoYXMgbGVnYWwgbGluay4KK2Jvb2wgZWxlbWVudEhhc0xlZ2FsTGlua0F0
dHJpYnV0ZShjb25zdCBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6OlF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJFbnRpdGllcy5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkVu
dGl0aWVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzRkZmUzCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFbnRpdGllcy5jcHAKQEAg
LTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViRW50aXRpZXMu
aCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorLy8gTm90ZSB0aGF0IHRoaXMgZmlsZSBpcyBhbHNv
IGluY2x1ZGVkIGJ5IEhUTUxUb2tlbml6ZXIuY3BwIHNvIHdlIGFyZSBnZXR0aW5nCisvLyB0d28g
Y29waWVzIG9mIHRoZSBkYXRhIGluIG1lbW9yeS4gIFdlIGNhbiBmaXggdGhpcyBieSBjaGFuZ2lu
ZyB0aGUgc2NyaXB0CisvLyB0aGF0IGdlbmVyYXRlZCB0aGUgYXJyYXkgdG8gY3JlYXRlIGEgc3Rh
dGljIGNvbnN0IHRoYXQgaXMgaXRzIGxlbmd0aCwgYnV0CisvLyB0aGlzIGlzIGxvdyBwcmlvcml0
eSBzaW5jZSB0aGUgZGF0YSBpcyBsZXNzIHRoYW4gNEsuCisjaW5jbHVkZSAiSFRNTEVudGl0eU5h
bWVzLmMiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdCdWls
ZGVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworI3VuZGVmIExPRworCisjaW5jbHVk
ZSAiV2ViU3RyaW5nLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ug
V2ViS2l0IHsKKwordm9pZCBwb3B1bGF0ZU1hcChFbnRpdGllc01hcFR5cGUmIG1hcCwKKyAgICAg
ICAgICAgICAgICAgY29uc3QgRW50aXR5KiBlbnRpdGllcywKKyAgICAgICAgICAgICAgICAgaW50
IGVudGl0aWVzQ291bnQsCisgICAgICAgICAgICAgICAgIGJvb2wgc3RhbmRhcmRIVE1MKQorewor
ICAgIEFTU0VSVChtYXAuaXNFbXB0eSgpKTsKKyAgICBjb25zdCBFbnRpdHkqIGVudGl0eSA9ICZl
bnRpdGllc1swXTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGVudGl0aWVzQ291bnQ7IGkrKywg
ZW50aXR5KyspIHsKKyAgICAgICAgaW50IGNvZGUgPSBlbnRpdHktPmNvZGU7CisgICAgICAgIFN0
cmluZyBuYW1lID0gZW50aXR5LT5uYW1lOworICAgICAgICAvLyBGb3IgY29uc2lzdGVuY3ksIHVz
ZSBjYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmUgZm9yIGVudGl0eSBjb2RlcyB0aGF0IGhhdmUgYm90
aC4KKyAgICAgICAgaWYgKG1hcC5jb250YWlucyhjb2RlKQorICAgICAgICAgICAgJiYgZXF1YWxJ
Z25vcmluZ0Nhc2UobWFwLmdldChjb2RlKSwgbmFtZSkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgLy8gRG9uJ3QgcmVnaXN0ZXIgJnBlcmNudDssICZuc3VwOyBhbmQgJnN1cGw7Lgor
ICAgICAgICBpZiAoc3RhbmRhcmRIVE1MCisgICAgICAgICAgICAmJiAoY29kZSA9PSAnJScgfHwg
Y29kZSA9PSAweDIyODUgfHwgY29kZSA9PSAweDAwYjkpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIG1hcC5zZXQoY29kZSwgbmFtZSk7CisgICAgfQorICAgIGlmIChzdGFuZGFyZEhU
TUwpCisgICAgICAgIG1hcC5zZXQoc3RhdGljX2Nhc3Q8aW50PigweDAwMjcpLCBTdHJpbmcoIiMz
OSIpKTsKK30KKworc3RhdGljIGNvbnN0IEVudGl0eSB4bWxCdWlsdEluRW50aXR5Q29kZXNbXSA9
IHsKKyAgICB7Imx0IiwgMHgwMDNjfSwKKyAgICB7Imd0IiwgMHgwMDNlfSwKKyAgICB7ImFtcCIs
IDB4MDAyNn0sCisgICAgeyJhcG9zIiwgMHgwMDI3fSwKKyAgICB7InF1b3QiLCAweDAwMjJ9Cit9
OworCitXZWJFbnRpdGllczo6V2ViRW50aXRpZXMoYm9vbCB4bWxFbnRpdGllcykKK3sKKyAgICBp
ZiAoeG1sRW50aXRpZXMpIHsKKyAgICAgICAgcG9wdWxhdGVNYXAobV9lbnRpdGllc01hcCwKKyAg
ICAgICAgICAgICAgICAgICAgeG1sQnVpbHRJbkVudGl0eUNvZGVzLAorICAgICAgICAgICAgICAg
ICAgICBzaXplb2YoeG1sQnVpbHRJbkVudGl0eUNvZGVzKSAvIHNpemVvZihFbnRpdHkpLAorICAg
ICAgICAgICAgICAgICAgICBmYWxzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcG9wdWxhdGVN
YXAobV9lbnRpdGllc01hcCwKKyAgICAgICAgICAgICAgICAgICAgd29yZGxpc3QsCisgICAgICAg
ICAgICAgICAgICAgIHNpemVvZih3b3JkbGlzdCkgLyBzaXplb2YoRW50aXR5KSwKKyAgICAgICAg
ICAgICAgICAgICAgdHJ1ZSk7CisgICAgfQorfQorCitTdHJpbmcgV2ViRW50aXRpZXM6OmdldEVu
dGl0eU5hbWVCeUNvZGUoaW50IGNvZGUpIGNvbnN0Cit7CisgICAgaWYgKG1fZW50aXRpZXNNYXAu
Y29udGFpbnMoY29kZSkpCisgICAgICAgIHJldHVybiBtX2VudGl0aWVzTWFwLmdldChjb2RlKTsK
KyAgICByZXR1cm4gIiI7Cit9CisKK1N0cmluZyBXZWJFbnRpdGllczo6Y29udmVydEVudGl0aWVz
SW5TdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBsZW4g
PSB2YWx1ZS5sZW5ndGgoKTsKKyAgICBjb25zdCBVQ2hhciogc3RhcnRQb3MgPSB2YWx1ZS5jaGFy
YWN0ZXJzKCk7CisgICAgY29uc3QgVUNoYXIqIGN1clBvcyA9IHN0YXJ0UG9zOworCisgICAgLy8g
T3B0aW1pemF0aW9uOiBDcmVhdGUgU3RyaW5nQnVpbGRlciBvbmx5IGlmIHZhbHVlIGhhcyBhbnkg
ZW50aXRpZXMuCisgICAgd2hpbGUgKGxlbi0tKSB7CisgICAgICAgIGlmIChtX2VudGl0aWVzTWFw
LmNvbnRhaW5zKCpjdXJQb3MpKXsKKyAgICAgICAgICAgIGxlbisrOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY3VyUG9zKys7CisgICAgfQorICAgIGlmICghbGVuKQor
ICAgICAgICByZXR1cm4gdmFsdWU7CisKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICB3
aGlsZSAobGVuLS0pIHsKKyAgICAgICAgaWYgKG1fZW50aXRpZXNNYXAuY29udGFpbnMoKmN1clBv
cykpIHsKKyAgICAgICAgICAgIC8vIEFwcGVuZCBjb250ZW50IGJlZm9yZSBlbnRpdHkgY29kZS4K
KyAgICAgICAgICAgIGlmIChjdXJQb3MgPiBzdGFydFBvcykKKyAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKFN0cmluZyhzdGFydFBvcywgY3VyUG9zIC0gc3RhcnRQb3MpKTsKKyAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoIiYiKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9lbnRp
dGllc01hcC5nZXQoKmN1clBvcykpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiOyIpOwor
ICAgICAgICAgICAgc3RhcnRQb3MgPSArK2N1clBvczsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGN1clBvcysrOworICAgICAgICB9CisgICAgfQorICAgIC8vIEFwcGVuZCB0aGUgcmVt
YWluaW5nIGNvbnRlbnQuCisgICAgaWYgKGN1clBvcyA+IHN0YXJ0UG9zKQorICAgICAgICByZXN1
bHQuYXBwZW5kKFN0cmluZyhzdGFydFBvcywgY3VyUG9zIC0gc3RhcnRQb3MpKTsKKworICAgIHJl
dHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkVudGl0aWVzLmggYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkVudGl0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NTc2Y2NkZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRW50aXRp
ZXMuaApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJFbnRpdGllc19oCisjZGVmaW5lIFdlYkVu
dGl0aWVzX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
K3R5cGVkZWYgSGFzaE1hcDxpbnQsIFdlYkNvcmU6OlN0cmluZz4gRW50aXRpZXNNYXBUeXBlOwor
CitjbGFzcyBXZWJFbnRpdGllcyB7CitwdWJsaWM6CisgICAgLy8gJmFwb3M7LCAmcGVyY250Oywg
Jm5zdXA7LCAmc3VwbDsgYXJlIG5vdCBkZWZpbmVkIGJ5IHRoZSBIVE1MIHN0YW5kYXJkcy4KKyAg
ICAvLyAgLSBJRSBkb2VzIG5vdCBzdXBwb3J0ICZhcG9zOyBhcyBhbiBIVE1MIGVudGl0eSAoYnV0
IHN1cHBvcnQgaXQgYXMgYW4gWE1MCisgICAgLy8gICAgZW50aXR5LikKKyAgICAvLyAgLSBGaXJl
Zm94IHN1cHBvcnRzICZhcG9zOyBhcyBhbiBIVE1MIGVudGl0eS4KKyAgICAvLyAgLSBCb3RoIG9m
IElFIGFuZCBGaXJlZm94IGRvbid0IHN1cHBvcnQgJnBlcmNudDssICZuc3VwOyBhbmQgJnN1cGw7
LgorICAgIC8vCisgICAgLy8gQSB3ZWIgcGFnZSBzYXZlZCBieSBDaHJvbWl1bSBzaG91bGQgYmUg
YWJsZSB0byBiZSByZWFkIGJ5IG90aGVyIGJyb3dzZXJzCisgICAgLy8gc3VjaCBhcyBJRSBhbmQg
RmlyZWZveC4gIENocm9taXVtIHNob3VsZCBwcm9kdWNlIG9ubHkgdGhlIHN0YW5kYXJkIGVudGl0
eQorICAgIC8vIHJlZmVyZW5jZXMgd2hpY2ggb3RoZXIgYnJvd3NlcnMgY2FuIHJlY29nbml6ZS4K
KyAgICAvLyBTbyBpZiBzdGFuZGFyZF9odG1sX2VudGl0aWVzXyBpcyB0cnVlLCB3ZSB3aWxsIHVz
ZSBhIG51bWVyaWMgY2hhcmFjdGVyCisgICAgLy8gcmVmZXJlbmNlIGZvciAmYXBvczssIGFuZCBk
b24ndCB1c2UgZW50aXR5IHJlZmVyZW5jZXMgZm9yICZwZXJjbnQ7LCAmbnN1cDsKKyAgICAvLyBh
bmQgJnN1cGw7IGZvciBzZXJpYWxpemF0aW9uLgorICAgIC8vCisgICAgLy8gSWYgeG1sRW50aXRp
ZXMgaXMgdHJ1ZSwgV2ViRW50aXRpZXMgd2lsbCBvbmx5IGNvbnRhaW4gc3RhbmRhcmQgWE1MCisg
ICAgLy8gZW50aXRpZXMuCisgICAgV2ViRW50aXRpZXMoYm9vbCB4bWxFbnRpdGllcyk7CisKKyAg
ICAvLyBDaGVjayB3aGV0aGVyIHNwZWNpZmllZCB1bmljb2RlIGhhcyBjb3JyZXNwb25kaW5nIGh0
bWwgb3IgeG1sIGJ1aWx0LWluCisgICAgLy8gZW50aXR5IG5hbWUuIElmIHllcywgcmV0dXJuIHRo
ZSBlbnRpdHkgbm90YXRpb24uIElmIG5vdCwgcmV0dXJucyBhbgorICAgIC8vIGVtcHR5IHN0cmlu
Zy4gUGFyYW1ldGVyIGlzSFRNTCBpbmRpY2F0ZXMgY2hlY2sgdGhlIGNvZGUgaW4gaHRtbCBlbnRp
dHkKKyAgICAvLyBtYXAgb3IgaW4geG1sIGVudGl0eSBtYXAuCisgICAgV2ViQ29yZTo6U3RyaW5n
IGdldEVudGl0eU5hbWVCeUNvZGUoaW50IGNvZGUpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyBh
IG5ldyBzdHJpbmcgd2l0aCBjb3JyZXNwb25kaW5nIGVudGl0eSBuYW1lcyByZXBsYWNlZC4KKyAg
ICBXZWJDb3JlOjpTdHJpbmcgY29udmVydEVudGl0aWVzSW5TdHJpbmcoY29uc3QgV2ViQ29yZTo6
U3RyaW5nJikgY29uc3Q7Citwcml2YXRlOgorICAgIC8vIEEgcG9pbnRlciB0byBhbiBpbnRlcm5h
bCBvYmplY3QgdGhhdCBtYXBzIHRoZSBVbmljb2RlIGNoYXJhY3RlciB0bworICAgIC8vIGNvcnJl
c3BvbmRpbmcgZW50aXR5IG5vdGF0aW9uLgorICAgIEVudGl0aWVzTWFwVHlwZSBtX2VudGl0aWVz
TWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJGcmFtZUltcGwuY3BwCmluZGV4IDA2ZDM5NGYuLjM3MTA1NDkgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkZyYW1lSW1wbC5jcHAKQEAgLTE2MTksNiArMTYxOSwxOSBAQCBXZWJGcmFtZUltcGwq
IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKEZyYW1lKiBmcmFtZSkKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8RnJhbWVMb2FkZXJDbGllbnRJbXBsKj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSkt
PndlYkZyYW1lKCk7CiB9CiAKK1dlYkZyYW1lSW1wbCogV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWVP
d25lckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBpZiAoIWVsZW1lbnQKKyAgICAg
ICAgfHwgIWVsZW1lbnQtPmlzRnJhbWVPd25lckVsZW1lbnQoKQorICAgICAgICB8fCAoIWVsZW1l
bnQtPmhhc1RhZ05hbWUoV2ViQ29yZTo6SFRNTE5hbWVzOjppZnJhbWVUYWcpIAorICAgICAgICAg
ICAgJiYgIWVsZW1lbnQtPmhhc1RhZ05hbWUoV2ViQ29yZTo6SFRNTE5hbWVzOjpmcmFtZVRhZykp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVu
dCogZnJhbWVFbGVtZW50ID0KKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEZyYW1l
T3duZXJFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgcmV0dXJuIGZyb21GcmFtZShmcmFtZUVsZW1l
bnQtPmNvbnRlbnRGcmFtZSgpKTsKK30KKyAgICAKIFdlYlZpZXdJbXBsKiBXZWJGcmFtZUltcGw6
OnZpZXdJbXBsKCkgY29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUpCmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJG
cmFtZUltcGwuaAppbmRleCAwNTA2NzViLi5iMTVlMWM3IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJh
bWVJbXBsLmgKQEAgLTE3NCw2ICsxNzQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVhdGVGcmFt
ZVZpZXcoKTsKIAogICAgIHN0YXRpYyBXZWJGcmFtZUltcGwqIGZyb21GcmFtZShXZWJDb3JlOjpG
cmFtZSogZnJhbWUpOworICAgIHN0YXRpYyBXZWJGcmFtZUltcGwqIGZyb21GcmFtZU93bmVyRWxl
bWVudChXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50KTsKIAogICAgIFdlYlZpZXdJbXBsKiB2aWV3
SW1wbCgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VT
ZXJpYWxpemVyLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZTdiYzAKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcApAQCAtMCww
ICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVy
LmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIktVUkwuaCIKKwor
I2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQu
aCIKKyNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplckltcGwuaCIKKyNpbmNsdWRlICJXZWJTdHJp
bmcuaCIKKyNpbmNsdWRlICJXZWJWZWN0b3IuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitib29sIFdlYlBh
Z2VTZXJpYWxpemVyOjpzZXJpYWxpemUoV2ViRnJhbWUqIGZyYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KiBjbGllbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlVSTD4mIGxpbmtzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJp
bmc+JiBsb2NhbFBhdGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFdlYlN0cmluZyYgbG9jYWxEaXJlY3RvcnlOYW1lKQoreworICAgIFdlYlBhZ2VTZXJpYWxpemVy
SW1wbCBzZXJpYWxpemVySW1wbCgKKyAgICAgICAgZnJhbWUsIHJlY3Vyc2l2ZSwgY2xpZW50LCBs
aW5rcywgbG9jYWxQYXRocywgbG9jYWxEaXJlY3RvcnlOYW1lKTsKKyAgICByZXR1cm4gc2VyaWFs
aXplckltcGwuc2VyaWFsaXplKCk7Cit9CisKKy8vIEZJWE1FOiB2ZXJpZnkgdW5pY29kZSBjb252
ZXJzaW9ucyBiZWxvdyB3aXRoIERhcmluLgorCitXZWJTdHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXI6
OmdlbmVyYXRlTWV0YUNoYXJzZXREZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGNoYXJzZXQp
Cit7CisgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCI8TUVUQSBodHRwLWVxdWl2PVwiQ29udGVu
dC1UeXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD0lbHNcIj4iLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyc2V0LnV0ZjgoKS5kYXRhKCkpOworfQorCitXZWJTdHJpbmcg
V2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlTWFya09mVGhlV2ViRGVjbGFyYXRpb24oY29uc3Qg
V2ViVVJMJiB1cmwpCit7CisgICAgS1VSTCBrdXJsID0gdXJsOworICAgIHJldHVybiBTdHJpbmc6
OmZvcm1hdCgiXG48IS0tIHNhdmVkIGZyb20gdXJsPSglMDRkKSVzIC0tPlxuIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAga3VybC5zdHJpbmcoKS5sZW5ndGgoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAga3VybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKK30KKworV2ViU3RyaW5n
IFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZUJhc2VUYWdEZWNsYXJhdGlvbihjb25zdCBXZWJT
dHJpbmcmIGJhc2VUYXJnZXQpCit7CisgICAgU3RyaW5nIHRhcmdldERlY2xhcmF0aW9uOworICAg
IGlmICghYmFzZVRhcmdldC5pc0VtcHR5KCkpCisgICAgICAgIHRhcmdldERlY2xhcmF0aW9uID0g
U3RyaW5nOjpmb3JtYXQoIiB0YXJnZXQ9XCIlbHNcIiIsIGJhc2VUYXJnZXQudXRmOCgpLmRhdGEo
KSk7CisgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCI8QkFTRSBocmVmPVwiLlwiJWxzPiIsIHRh
cmdldERlY2xhcmF0aW9uLnV0ZjgoKS5kYXRhKCkpOworfQorCit9ICAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1w
bC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA5YjQxMQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcApAQCAtMCww
ICsxLDU0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIEhvdyB3ZSBoYW5kbGUgdGhlIGJhc2UgdGFnIGJldHRlci4KKy8vIEN1cnJl
bnQgc3RhdHVzOgorLy8gQXQgbm93IHRoZSBub3JtYWwgd2F5IHdlIHVzZSB0byBoYW5kbGluZyBi
YXNlIHRhZyBpcworLy8gYSkgRm9yIHRob3NlIGxpbmtzIHdoaWNoIGhhdmUgY29ycmVzcG9uZGlu
ZyBsb2NhbCBzYXZlZCBmaWxlcywgc3VjaCBhcworLy8gc2F2YWJsZSBDU1MsIEphdmFTY3JpcHQg
ZmlsZXMsIHRoZXkgd2lsbCBiZSB3cml0dGVuIHRvIHJlbGF0aXZlIFVSTHMgd2hpY2gKKy8vIHBv
aW50IHRvIGxvY2FsIHNhdmVkIGZpbGUuIFdoeSB0aG9zZSBsaW5rcyBjYW4gbm90IGJlIHJlc29s
dmVkIGFzIGFic29sdXRlCisvLyBmaWxlIFVSTHMsIGJlY2F1c2UgaWYgdGhleSBhcmUgcmVzb2x2
ZWQgYXMgYWJzb2x1dGUgVVJMcywgYWZ0ZXIgbW92aW5nIHRoZQorLy8gZmlsZSBsb2NhdGlvbiBm
cm9tIG9uZSBkaXJlY3RvcnkgdG8gYW5vdGhlciBkaXJlY3RvcnksIHRoZSBmaWxlIFVSTHMgd2ls
bAorLy8gYmUgZGVhZCBsaW5rcy4KKy8vIGIpIEZvciB0aG9zZSBsaW5rcyB3aGljaCBoYXZlIG5v
dCBjb3JyZXNwb25kaW5nIGxvY2FsIHNhdmVkIGZpbGVzLCBzdWNoIGFzCisvLyBsaW5rcyBpbiBB
LCBBUkVBIHRhZ3MsIHRoZXkgd2lsbCBiZSByZXNvbHZlZCBhcyBhYnNvbHV0ZSBVUkxzLgorLy8g
YykgV2UgY29tbWVudCBhbGwgYmFzZSB0YWdzIHdoZW4gc2VyaWFsemluZyBET00gZm9yIHRoZSBw
YWdlLgorLy8gRmlyZUZveCBhbHNvIHVzZXMgYWJvdmUgd2F5IHRvIGhhbmRsZSBiYXNlIHRhZy4K
Ky8vCisvLyBQcm9ibGVtOgorLy8gVGhpcyB3YXkgY2FuIG5vdCBoYW5kbGUgdGhlIGZvbGxvd2lu
ZyBzaXR1YXRpb246CisvLyB0aGUgYmFzZSB0YWcgaXMgd3JpdHRlbiBieSBKYXZhU2NyaXB0Lgor
Ly8gRm9yIGV4YW1wbGUuIFRoZSBwYWdlICJ3d3cueWFob28uY29tIiB1c2UKKy8vICJkb2N1bWVu
dC53cml0ZSgnPGJhc2UgaHJlZj0iaHR0cDovL3d3dy55YWhvby5jb20vIi4uLicpOyIgdG8gc2V0
dXAgYmFzZSBVUkwKKy8vIG9mIHBhZ2Ugd2hlbiBsb2FkaW5nIHBhZ2UuIFNvIHdoZW4gc2F2aW5n
IHBhZ2UgYXMgY29tcGxldGVkLUhUTUwsIHdlIGFzc3VtZQorLy8gdGhhdCB3ZSBzYXZlICJ3d3cu
eWFob28uY29tIiB0byAiYzpceWFob28uaHRtIi4gQWZ0ZXIgdGhlbiB3ZSBsb2FkIHRoZSBzYXZl
ZAorLy8gY29tcGxldGVkLUhUTUwgcGFnZSwgdGhlbiB0aGUgSmF2YVNjcmlwdCB3aWxsIGluc2Vy
dCBhIGJhc2UgdGFnCisvLyA8YmFzZSBocmVmPSJodHRwOi8vd3d3LnlhaG9vLmNvbS8iLi4uPiB0
byBET00sIHNvIGFsbCBVUkxzIHdoaWNoIHBvaW50IHRvCisvLyBsb2NhbCBzYXZlZCByZXNvdXJj
ZSBmaWxlcyB3aWxsIGJlIHJlc29sdmVkIGFzCisvLyAiaHR0cDovL3d3dy55YWhvby5jb20veWFo
b29fZmlsZXMvLi4uIiwgd2hpY2ggd2lsbCBjYXVzZSBhbGwgc2F2ZWQgIHJlc291cmNlCisvLyBm
aWxlcyBjYW4gbm90IGJlIGxvYWRlZCBjb3JyZWN0bHkuIEFsc28gdGhlIHBhZ2Ugd2lsbCBiZSBy
ZW5kZXJlZCB1Z2x5IHNpbmNlCisvLyBhbGwgc2F2ZWQgc3ViLXJlc291cmNlIGZpbGVzIChzdWNo
IGFzIENTUywgSmF2YVNjcmlwdCBmaWxlcykgYW5kIHN1Yi1mcmFtZQorLy8gZmlsZXMgY2FuIG5v
dCBiZSBmZXRjaGVkLgorLy8gTm93IEZpcmVGb3gsIElFIGFuZCBXZWJLaXQgYmFzZWQgQnJvd3Nl
ciBhbGwgaGF2ZSB0aGlzIHByb2JsZW0uCisvLworLy8gU29sdXRpb246CisvLyBNeSBzb2x1dGlv
biBpcyB0aGF0IHdlIGNvbW1lbnQgb2xkIGJhc2UgdGFnIGFuZCB3cml0ZSBuZXcgYmFzZSB0YWc6
CisvLyA8YmFzZSBocmVmPSIuIiAuLi4+IGFmdGVyIHRoZSBwcmV2aW91cyBjb21tZW50ZWQgYmFz
ZSB0YWcuIEluIFdlYktpdCwgaXQKKy8vIGFsd2F5cyB1c2VzIHRoZSBsYXRlc3QgImhyZWYiIGF0
dHJpYnV0ZSBvZiBiYXNlIHRhZyB0byBzZXQgZG9jdW1lbnQncyBiYXNlCisvLyBVUkwuIEJhc2Vk
IG9uIHRoaXMgYmVoYXZpb3IsIHdoZW4gd2UgZW5jb3VudGVyIGEgYmFzZSB0YWcsIHdlIGNvbW1l
bnQgaXQgYW5kCisvLyB3cml0ZSBhIG5ldyBiYXNlIHRhZyA8YmFzZSBocmVmPSIuIj4gYWZ0ZXIg
dGhlIHByZXZpb3VzIGNvbW1lbnRlZCBiYXNlIHRhZy4KKy8vIFRoZSBuZXcgYWRkZWQgYmFzZSB0
YWcgY2FuIGhlbHAgZW5naW5lIHRvIGxvY2F0ZSBjb3JyZWN0IGJhc2UgVVJMIGZvcgorLy8gY29y
cmVjdGx5IGxvYWRpbmcgbG9jYWwgc2F2ZWQgcmVzb3VyY2UgZmlsZXMuIEFsc28gSSB0aGluayB3
ZSBuZWVkIHRvIGluaGVyaXQKKy8vIHRoZSBiYXNlIHRhcmdldCB2YWx1ZSBmcm9tIGRvY3VtZW50
IG9iamVjdCB3aGVuIGFwcGVuZGluZyBuZXcgYmFzZSB0YWcuCisvLyBJZiB0aGVyZSBhcmUgbXVs
dGlwbGUgYmFzZSB0YWdzIGluIG9yaWdpbmFsIGRvY3VtZW50LCB3ZSB3aWxsIGNvbW1lbnQgYWxs
IG9sZAorLy8gYmFzZSB0YWdzIGFuZCBhcHBlbmQgbmV3IGJhc2UgdGFnIGFmdGVyIGVhY2ggb2xk
IGJhc2UgdGFnIGJlY2F1c2Ugd2UgZG8gbm90CisvLyBrbm93IHRob3NlIG9sZCBiYXNlIHRhZ3Mg
YXJlIG9yaWdpbmFsIGNvbnRlbnQgb3IgYWRkZWQgYnkgSmF2YVNjcmlwdC4gSWYKKy8vIHRoZXkg
YXJlIGFkZGVkIGJ5IEphdmFTY3JpcHQsIGl0IG1lYW5zIHdoZW4gbG9hZGluZyBzYXZlZCBwYWdl
LCB0aGUgc2NyaXB0KHMpCisvLyB3aWxsIHN0aWxsIGluc2VydCBiYXNlIHRhZyhzKSB0byBET00s
IHNvIHRoZSBuZXcgYWRkZWQgYmFzZSB0YWcocykgY2FuCisvLyBvdmVycmlkZSB0aGUgaW5jb3Jy
ZWN0IGJhc2UgVVJMIGFuZCBtYWtlIHN1cmUgd2UgYWx3YXkgbG9hZCBjb3JyZWN0IGxvY2FsCisv
LyBzYXZlZCByZXNvdXJjZSBmaWxlcy4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYlBhZ2VTZXJpYWxpemVySW1wbC5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJEb2N1bWVudFR5cGUuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKKyNpbmNsdWRlICJIVE1MQWxsQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIkhU
TUxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TE1ldGFFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiS1VSTC5o
IgorI2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5j
bHVkZSAiU3RyaW5nQnVpbGRlci5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorCisjaW5j
bHVkZSAiRE9NVXRpbGl0aWVzUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgor
I2luY2x1ZGUgIldlYlVSTC5oIgorI2luY2x1ZGUgIldlYlZlY3Rvci5oIgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIE1heGltdW0gbGVuZ3Ro
IG9mIGRhdGEgYnVmZmVyIHdoaWNoIGlzIHVzZWQgdG8gdGVtcG9yYXJ5IHNhdmUgZ2VuZXJhdGVk
CisvLyBodG1sIGNvbnRlbnQgZGF0YS4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBkYXRhQnVmZmVy
Q2FwYWNpdHkgPSA2NTUzNjsKKworc3RhdGljIGNvbnN0IFdlYkVudGl0aWVzIGh0bWxFbnRpdGll
cyhmYWxzZSk7CitzdGF0aWMgY29uc3QgV2ViRW50aXRpZXMgeG1sRW50aXRpZXModHJ1ZSk7CisK
Ky8vIFNlcmlhbGl6ZURvbVBhcmFtIENvbnN0cnVjdG9yLgorV2ViUGFnZVNlcmlhbGl6ZXJJbXBs
OjpTZXJpYWxpemVEb21QYXJhbTo6U2VyaWFsaXplRG9tUGFyYW0oY29uc3QgS1VSTCYgY3VycmVu
dEZyYW1lVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVGV4dEVuY29kaW5nJiB0ZXh0RW5jb2RpbmcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb2N1
bWVudCogZG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXJlY3RvcnlOYW1lKQorICAgIDogY3VycmVu
dEZyYW1lVVJMKGN1cnJlbnRGcmFtZVVSTCkKKyAgICAsIHRleHRFbmNvZGluZyh0ZXh0RW5jb2Rp
bmcpCisgICAgLCBkb2MoZG9jKQorICAgICwgZGlyZWN0b3J5TmFtZShkaXJlY3RvcnlOYW1lKQor
ICAgICwgaGFzRG9jdHlwZShmYWxzZSkKKyAgICAsIGhhc0NoZWNrZWRNZXRhKGZhbHNlKQorICAg
ICwgc2tpcE1ldGFFbGVtZW50KDApCisgICAgLCBpc0luU2NyaXB0T3JTdHlsZVRhZyhmYWxzZSkK
KyAgICAsIGhhc0RvY0RlY2xhcmF0aW9uKGZhbHNlKQoreworICAgIC8vIENhY2hlIHRoZSB2YWx1
ZSBzaW5jZSB3ZSBjaGVjayBpdCBsb3RzIG9mIHRpbWVzLgorICAgaXNIVE1MRG9jdW1lbnQgPSBk
b2MtPmlzSFRNTERvY3VtZW50KCk7Cit9CisKK1N0cmluZyBXZWJQYWdlU2VyaWFsaXplckltcGw6
OnByZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZU9wZW5UYWcoCisgICAgY29uc3QgRWxlbWVudCogZWxl
bWVudCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLCBib29sKiBuZWVkU2tpcCkKK3sKKyAgICBT
dHJpbmdCdWlsZGVyIHJlc3VsdDsKKworICAgICpuZWVkU2tpcCA9IGZhbHNlOworICAgIGlmIChw
YXJhbS0+aXNIVE1MRG9jdW1lbnQpIHsKKyAgICAgICAgLy8gU2tpcCB0aGUgb3BlbiB0YWcgb2Yg
b3JpZ2luYWwgTUVUQSB0YWcgd2hpY2ggZGVjbGFyZSBjaGFyc2V0IHNpbmNlIHdlCisgICAgICAg
IC8vIGhhdmUgb3ZlcnJpZGVkIHRoZSBNRVRBIHdoaWNoIGhhdmUgY29ycmVjdCBjaGFyc2V0IGRl
Y2xhcmF0aW9uIGFmdGVyCisgICAgICAgIC8vIHNlcmlhbGl6aW5nIG9wZW4gdGFnIG9mIEhFQUQg
ZWxlbWVudC4KKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjptZXRh
VGFnKSkgeworICAgICAgICAgICAgY29uc3QgSFRNTE1ldGFFbGVtZW50KiBtZXRhID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgSFRNTE1ldGFFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgICAgICAvLyBD
aGVjayB3aGV0aGVyIHRoZSBNRVRBIHRhZyBoYXMgZGVjbGFyZWQgY2hhcnNldCBvciBub3QuCisg
ICAgICAgICAgICBTdHJpbmcgZXF1aXYgPSBtZXRhLT5odHRwRXF1aXYoKTsKKyAgICAgICAgICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShlcXVpdiwgImNvbnRlbnQtdHlwZSIpKSB7CisgICAgICAg
ICAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSBtZXRhLT5jb250ZW50KCk7CisgICAgICAgICAgICAg
ICAgaWYgKGNvbnRlbnQubGVuZ3RoKCkgJiYgY29udGVudC5jb250YWlucygiY2hhcnNldCIsIGZh
bHNlKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGaW5kIE1FVEEgdGFnIGRlY2xhcmVkIGNo
YXJzZXQsIHdlIG5lZWQgdG8gc2tpcCBpdCB3aGVuCisgICAgICAgICAgICAgICAgICAgIC8vIHNl
cmlhbGl6aW5nIERPTS4KKyAgICAgICAgICAgICAgICAgICAgcGFyYW0tPnNraXBNZXRhRWxlbWVu
dCA9IGVsZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgICpuZWVkU2tpcCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFnKSkgeworICAgICAgICAgICAgLy8gQ2hlY2sg
c29tZXRoaW5nIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSBvcGVuIHRhZyBvZiBIRUFEIGVsZW1lbnQu
CisgICAgICAgICAgICAvLyBGaXJzdCB3ZSBhZGQgZG9jIHR5cGUgZGVjbGFyYXRpb24gaWYgb3Jp
Z2luYWwgZG9jIGhhcyBpdC4KKyAgICAgICAgICAgIGlmICghcGFyYW0tPmhhc0RvY3R5cGUpIHsK
KyAgICAgICAgICAgICAgICBwYXJhbS0+aGFzRG9jdHlwZSA9IHRydWU7CisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChjcmVhdGVNYXJrdXAocGFyYW0tPmRvYy0+ZG9jdHlwZSgpKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEFkZCBNT1RXIGRlY2xhcmF0aW9uIGJlZm9y
ZSBodG1sIHRhZy4KKyAgICAgICAgICAgIC8vIFNlZSBodHRwOi8vbXNkbjIubWljcm9zb2Z0LmNv
bS9lbi11cy9saWJyYXJ5L21zNTM3NjI4KFZTLjg1KS5hc3B4LgorICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChXZWJQYWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVNYXJrT2ZUaGVXZWJEZWNsYXJhdGlv
bihwYXJhbS0+Y3VycmVudEZyYW1lVVJMKSk7CisgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJhc2VUYWcpKSB7CisgICAgICAgICAgICAvLyBDb21tZW50
IHRoZSBCQVNFIHRhZyB3aGVuIHNlcmlhbGl6aW5nIGRvbS4KKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoIjwhLS0iKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdyaXRl
IFhNTCBkZWNsYXJhdGlvbi4KKyAgICAgICAgaWYgKCFwYXJhbS0+aGFzRG9jRGVjbGFyYXRpb24p
IHsKKyAgICAgICAgICAgIHBhcmFtLT5oYXNEb2NEZWNsYXJhdGlvbiA9IHRydWU7CisgICAgICAg
ICAgICAvLyBHZXQgZW5jb2RpbmcgaW5mby4KKyAgICAgICAgICAgIFN0cmluZyB4bWxFbmNvZGlu
ZyA9IHBhcmFtLT5kb2MtPnhtbEVuY29kaW5nKCk7CisgICAgICAgICAgICBpZiAoeG1sRW5jb2Rp
bmcuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHhtbEVuY29kaW5nID0gcGFyYW0tPmRvYy0+
ZnJhbWUoKS0+bG9hZGVyKCktPmVuY29kaW5nKCk7CisgICAgICAgICAgICBpZiAoeG1sRW5jb2Rp
bmcuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHhtbEVuY29kaW5nID0gVVRGOEVuY29kaW5n
KCkubmFtZSgpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiPD94bWwgdmVyc2lvbj1cIiIp
OworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwYXJhbS0+ZG9jLT54bWxWZXJzaW9uKCkpOwor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiXCIgZW5jb2Rpbmc9XCIiKTsKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoeG1sRW5jb2RpbmcpOworICAgICAgICAgICAgaWYgKHBhcmFtLT5kb2Mt
PnhtbFN0YW5kYWxvbmUoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJcIiBzdGFu
ZGFsb25lPVwieWVzIik7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJcIj8+XG4iKTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBBZGQgZG9jIHR5cGUgZGVjbGFyYXRpb24gaWYgb3JpZ2luYWwg
ZG9jIGhhcyBpdC4KKyAgICAgICAgaWYgKCFwYXJhbS0+aGFzRG9jdHlwZSkgeworICAgICAgICAg
ICAgcGFyYW0tPmhhc0RvY3R5cGUgPSB0cnVlOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChj
cmVhdGVNYXJrdXAocGFyYW0tPmRvYy0+ZG9jdHlwZSgpKSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworfQorCitTdHJpbmcgV2ViUGFnZVNlcmlhbGl6
ZXJJbXBsOjpwb3N0QWN0aW9uQWZ0ZXJTZXJpYWxpemVPcGVuVGFnKAorICAgIGNvbnN0IEVsZW1l
bnQqIGVsZW1lbnQsIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSkKK3sKKyAgICBTdHJpbmdCdWls
ZGVyIHJlc3VsdDsKKworICAgIHBhcmFtLT5oYXNBZGRlZENvbnRlbnRzQmVmb3JlRW5kID0gZmFs
c2U7CisgICAgaWYgKCFwYXJhbS0+aXNIVE1MRG9jdW1lbnQpCisgICAgICAgIHJldHVybiByZXN1
bHQudG9TdHJpbmcoKTsKKyAgICAvLyBDaGVjayBhZnRlciBwcm9jZXNzaW5nIHRoZSBvcGVuIHRh
ZyBvZiBIRUFEIGVsZW1lbnQKKyAgICBpZiAoIXBhcmFtLT5oYXNDaGVja2VkTWV0YSAmJgorICAg
ICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZFRhZykpIHsKKyAgICAgICAg
cGFyYW0tPmhhc0NoZWNrZWRNZXRhID0gdHJ1ZTsKKyAgICAgICAgLy8gQ2hlY2sgbWV0YSBlbGVt
ZW50LiBXZWJLaXQgb25seSBwcmUtcGFyc2UgdGhlIGZpcnN0IDUxMiBieXRlcworICAgICAgICAv
LyBvZiB0aGUgZG9jdW1lbnQuIElmIHRoZSB3aG9sZSA8SEVBRD4gaXMgbGFyZ2VyIGFuZCBtZXRh
IGlzIHRoZQorICAgICAgICAvLyBlbmQgb2YgaGVhZCBwYXJ0LCB0aGVuIHRoaXMga2luZCBvZiBw
YWdlcyBhcmVuJ3QgZGVjb2RlZCBjb3JyZWN0bHkKKyAgICAgICAgLy8gYmVjYXVzZSBvZiB0aGlz
IGlzc3VlLiBTbyB3aGVuIHdlIHNlcmlhbGl6ZSB0aGUgRE9NLCB3ZSBuZWVkIHRvCisgICAgICAg
IC8vIG1ha2Ugc3VyZSB0aGUgbWV0YSB3aWxsIGluIGZpcnN0IGNoaWxkIG9mIGhlYWQgdGFnLgor
ICAgICAgICAvLyBTZWUgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2
MjEuCisgICAgICAgIC8vIEZpcnN0IHdlIGdlbmVyYXRlIG5ldyBjb250ZW50IGZvciB3cml0aW5n
IGNvcnJlY3QgTUVUQSBlbGVtZW50LgorICAgICAgICByZXN1bHQuYXBwZW5kKFdlYlBhZ2VTZXJp
YWxpemVyOjpnZW5lcmF0ZU1ldGFDaGFyc2V0RGVjbGFyYXRpb24oCisgICAgICAgICAgICBTdHJp
bmcocGFyYW0tPnRleHRFbmNvZGluZy5uYW1lKCkpKSk7CisKKyAgICAgICAgcGFyYW0tPmhhc0Fk
ZGVkQ29udGVudHNCZWZvcmVFbmQgPSB0cnVlOworICAgICAgICAvLyBXaWxsIHNlYXJjaCBlYWNo
IE1FVEEgd2hpY2ggaGFzIGNoYXJzZXQgZGVjbGFyYXRpb24sIGFuZCBza2lwIHRoZW0gYWxsCisg
ICAgICAgIC8vIGluIFByZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZU9wZW5UYWcuCisgICAgfSBlbHNl
IGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0VGFnKSB8fAorICAgICAg
ICAgICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlVGFnKSkgeworICAg
ICAgICBwYXJhbS0+aXNJblNjcmlwdE9yU3R5bGVUYWcgPSB0cnVlOworICAgIH0KKworICAgIHJl
dHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVySW1w
bDo6cHJlQWN0aW9uQmVmb3JlU2VyaWFsaXplRW5kVGFnKAorICAgIGNvbnN0IEVsZW1lbnQqIGVs
ZW1lbnQsIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSwgYm9vbCogbmVlZFNraXApCit7CisgICAg
U3RyaW5nIHJlc3VsdDsKKworICAgICpuZWVkU2tpcCA9IGZhbHNlOworICAgIGlmICghcGFyYW0t
PmlzSFRNTERvY3VtZW50KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIC8vIFNraXAgdGhl
IGVuZCB0YWcgb2Ygb3JpZ2luYWwgTUVUQSB0YWcgd2hpY2ggZGVjbGFyZSBjaGFyc2V0LgorICAg
IC8vIE5lZWQgbm90IHRvIGNoZWNrIHdoZXRoZXIgaXQncyBNRVRBIHRhZyBzaW5jZSB3ZSBndWFy
YW50ZWUKKyAgICAvLyBza2lwTWV0YUVsZW1lbnQgaXMgZGVmaW5pdGVseSBNRVRBIHRhZyBpZiBp
dCdzIG5vdCBOVUxMLgorICAgIGlmIChwYXJhbS0+c2tpcE1ldGFFbGVtZW50ID09IGVsZW1lbnQp
IHsKKyAgICAgICAgKm5lZWRTa2lwID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHRUYWcpIHx8CisgICAgICAgICAgICAgICBlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKSB7CisgICAgICAgIEFTU0VSVChwYXJh
bS0+aXNJblNjcmlwdE9yU3R5bGVUYWcpOworICAgICAgICBwYXJhbS0+aXNJblNjcmlwdE9yU3R5
bGVUYWcgPSBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBBZnRl
ciB3ZSBmaW5pc2ggc2VyaWFsaXppbmcgZW5kIHRhZyBvZiBhIGVsZW1lbnQsIHdlIGdpdmUgdGhl
IHRhcmdldAorLy8gZWxlbWVudCBhIGNoYW5jZSB0byBkbyBzb21lIHBvc3Qgd29yayB0byBhZGQg
c29tZSBhZGRpdGlvbmFsIGRhdGEuCitTdHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpwb3N0
QWN0aW9uQWZ0ZXJTZXJpYWxpemVFbmRUYWcoCisgICAgY29uc3QgRWxlbWVudCogZWxlbWVudCwg
U2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQoreworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0Owor
CisgICAgaWYgKCFwYXJhbS0+aXNIVE1MRG9jdW1lbnQpCisgICAgICAgIHJldHVybiByZXN1bHQu
dG9TdHJpbmcoKTsKKyAgICAvLyBDb21tZW50IHRoZSBCQVNFIHRhZyB3aGVuIHNlcmlhbGl6aW5n
IERPTS4KKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJhc2VUYWcpKSB7
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIi0tPiIpOworICAgICAgICAvLyBBcHBlbmQgYSBuZXcg
YmFzZSB0YWcgZGVjbGFyYXRpb24uCisgICAgICAgIHJlc3VsdC5hcHBlbmQoV2ViUGFnZVNlcmlh
bGl6ZXI6OmdlbmVyYXRlQmFzZVRhZ0RlY2xhcmF0aW9uKAorICAgICAgICAgICAgcGFyYW0tPmRv
Yy0+YmFzZVRhcmdldCgpKSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygp
OworfQorCit2b2lkIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6c2F2ZUhUTUxDb250ZW50VG9CdWZm
ZXIoCisgICAgY29uc3QgU3RyaW5nJiByZXN1bHQsIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSkK
K3sKKyAgICBpZiAoIXJlc3VsdC5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuOworICAgIC8vIENv
bnZlcnQgdGhlIHVuaWNvZGUgY29udGVudCB0byB0YXJnZXQgZW5jb2RpbmcKKyAgICBDU3RyaW5n
IGVuY29kaW5nUmVzdWx0ID0gcGFyYW0tPnRleHRFbmNvZGluZy5lbmNvZGUoCisgICAgICAgIHJl
c3VsdC5jaGFyYWN0ZXJzKCksIHJlc3VsdC5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJs
ZXMpOworCisgICAgLy8gaWYgdGhlIGRhdGEgYnVmZmVyIHdpbGwgYmUgZnVsbCwgdGhlbiBzZW5k
IGl0IG91dCBmaXJzdC4KKyAgICBpZiAoZW5jb2RpbmdSZXN1bHQubGVuZ3RoKCkgKyBtX2RhdGFC
dWZmZXIubGVuZ3RoKCkgPiBkYXRhQnVmZmVyQ2FwYWNpdHkpIHsKKyAgICAgICAgLy8gU2VuZCBk
YXRhIHRvIGRlbGVnYXRlLCB0ZWxsIGl0IG5vdyB3ZSBhcmUgc2VyaWFsaXppbmcgY3VycmVudCBm
cmFtZS4KKyAgICAgICAgbV9jbGllbnQtPmRpZFNlcmlhbGl6ZURhdGFGb3JGcmFtZShwYXJhbS0+
Y3VycmVudEZyYW1lVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZGF0YUJ1ZmZlci50b1N0cmluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50OjpDdXJyZW50RnJhbWVJc05v
dEZpbmlzaGVkKTsKKyAgICAgICAgbV9kYXRhQnVmZmVyLmNsZWFyKCk7CisgICAgfQorCisgICAg
Ly8gQXBwZW5kIHJlc3VsdCB0byBkYXRhIGJ1ZmZlci4KKyAgICBtX2RhdGFCdWZmZXIuYXBwZW5k
KFN0cmluZzo6ZnJvbVVURjgoZW5jb2RpbmdSZXN1bHQuZGF0YSgpKSk7Cit9CisKK3ZvaWQgV2Vi
UGFnZVNlcmlhbGl6ZXJJbXBsOjpvcGVuVGFnVG9TdHJpbmcoY29uc3QgRWxlbWVudCogZWxlbWVu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXpl
RG9tUGFyYW0qIHBhcmFtKQoreworICAgIC8vIEZJWE1FOiB1c2UgU3RyaW5nQnVpbGRlciBpbnN0
ZWFkIG9mIFN0cmluZy4KKyAgICBib29sIG5lZWRTa2lwOworICAgIC8vIERvIHByZSBhY3Rpb24g
Zm9yIG9wZW4gdGFnLgorICAgIFN0cmluZyByZXN1bHQgPSBwcmVBY3Rpb25CZWZvcmVTZXJpYWxp
emVPcGVuVGFnKGVsZW1lbnQsIHBhcmFtLCAmbmVlZFNraXApOworICAgIGlmIChuZWVkU2tpcCkK
KyAgICAgICAgcmV0dXJuOworICAgIC8vIEFkZCBvcGVuIHRhZworICAgIHJlc3VsdCArPSAiPCIg
KyBlbGVtZW50LT5ub2RlTmFtZSgpOworICAgIC8vIEdvIHRocm91Z2ggYWxsIGF0dHJpYnV0ZXMg
YW5kIHNlcmlhbGl6ZSB0aGVtLgorICAgIGNvbnN0IE5hbWVkTm9kZU1hcCAqYXR0ck1hcCA9IGVs
ZW1lbnQtPmF0dHJpYnV0ZXModHJ1ZSk7CisgICAgaWYgKGF0dHJNYXApIHsKKyAgICAgICAgdW5z
aWduZWQgbnVtQXR0cnMgPSBhdHRyTWFwLT5sZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bUF0dHJzOyBpKyspIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSAiICI7
CisgICAgICAgICAgICAvLyBBZGQgYXR0cmlidXRlIHBhaXIKKyAgICAgICAgICAgIGNvbnN0IEF0
dHJpYnV0ZSAqYXR0cmlidXRlID0gYXR0ck1hcC0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAg
ICAgIHJlc3VsdCArPSBhdHRyaWJ1dGUtPm5hbWUoKS50b1N0cmluZygpOworICAgICAgICAgICAg
cmVzdWx0ICs9ICI9XCIiOworICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGUtPnZhbHVlKCkuaXNF
bXB0eSgpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBhdHRyVmFsdWUgPSBhdHRy
aWJ1dGUtPnZhbHVlKCk7CisKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHdlIG5l
ZWQgdG8gcmVwbGFjZSBzb21lIHJlc291cmNlIGxpbmtzCisgICAgICAgICAgICAgICAgLy8gd2l0
aCBsb2NhbCByZXNvdXJjZSBwYXRocy4KKyAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSA9IGF0dHJpYnV0ZS0+bmFtZSgpOworICAgICAgICAgICAgICAgIGlmIChl
bGVtZW50SGFzTGVnYWxMaW5rQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJOYW1lKSkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBGb3IgbGlua3Mgc3RhcnQgd2l0aCAiamF2YXNjcmlwdDoiLCB3ZSBk
byBub3QgY2hhbmdlIGl0LgorICAgICAgICAgICAgICAgICAgICBpZiAoYXR0clZhbHVlLnN0YXJ0
c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgKz0gYXR0clZhbHVlOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGFic29sdXRlIGxpbmsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFN0cmluZyBjb21wbGV0ZVVSTCA9IHBhcmFtLT5kb2MtPmNvbXBsZXRlVVJMKGF0
dHJWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHdlIGhh
dmUgbG9jYWwgZmlsZXMgZm9yIHRob3NlIGxpbmsuCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobV9sb2NhbExpbmtzLmNvbnRhaW5zKGNvbXBsZXRlVVJMKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgKz0gbV9sb2NhbExpbmtzLmdldChjb21wbGV0ZVVSTCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ICs9IGNvbXBsZXRlVVJMOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLT5pc0hUTUxEb2N1bWVu
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBodG1sRW50aXRpZXMuY29udmVy
dEVudGl0aWVzSW5TdHJpbmcoYXR0clZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHhtbEVudGl0aWVzLmNvbnZlcnRFbnRp
dGllc0luU3RyaW5nKGF0dHJWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmVzdWx0ICs9ICJcIiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBEbyBwb3N0IGFjdGlvbiBmb3Igb3BlbiB0YWcuCisgICAgU3RyaW5nIGFkZGVkQ29udGVudHMg
PSBwb3N0QWN0aW9uQWZ0ZXJTZXJpYWxpemVPcGVuVGFnKGVsZW1lbnQsIHBhcmFtKTsKKyAgICAv
LyBDb21wbGV0ZSB0aGUgb3BlbiB0YWcgZm9yIGVsZW1lbnQgd2hlbiBpdCBoYXMgY2hpbGQvY2hp
bGRyZW4uCisgICAgaWYgKGVsZW1lbnQtPmhhc0NoaWxkTm9kZXMoKSB8fCBwYXJhbS0+aGFzQWRk
ZWRDb250ZW50c0JlZm9yZUVuZCkKKyAgICAgICAgcmVzdWx0ICs9ICI+IjsKKyAgICAvLyBBcHBl
bmQgdGhlIGFkZGVkIGNvbnRlbnRzIGdlbmVyYXRlIGluICBwb3N0IGFjdGlvbiBvZiBvcGVuIHRh
Zy4KKyAgICByZXN1bHQgKz0gYWRkZWRDb250ZW50czsKKyAgICAvLyBTYXZlIHRoZSByZXN1bHQg
dG8gZGF0YSBidWZmZXIuCisgICAgc2F2ZUhUTUxDb250ZW50VG9CdWZmZXIocmVzdWx0LCBwYXJh
bSk7Cit9CisKKy8vIFNlcmlhbGl6ZSBlbmQgdGFnIG9mIGFuIHNwZWNpZmllZCBlbGVtZW50Lgor
dm9pZCBXZWJQYWdlU2VyaWFsaXplckltcGw6OmVuZFRhZ1RvU3RyaW5nKGNvbnN0IEVsZW1lbnQq
IGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Vy
aWFsaXplRG9tUGFyYW0qIHBhcmFtKQoreworICAgIGJvb2wgbmVlZFNraXA7CisgICAgLy8gRG8g
cHJlIGFjdGlvbiBmb3IgZW5kIHRhZy4KKyAgICBTdHJpbmcgcmVzdWx0ID0gcHJlQWN0aW9uQmVm
b3JlU2VyaWFsaXplRW5kVGFnKGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkU2tpcCk7CisgICAgaWYgKG5lZWRTa2lwKQor
ICAgICAgICByZXR1cm47CisgICAgLy8gV3JpdGUgZW5kIHRhZyB3aGVuIGVsZW1lbnQgaGFzIGNo
aWxkL2NoaWxkcmVuLgorICAgIGlmIChlbGVtZW50LT5oYXNDaGlsZE5vZGVzKCkgfHwgcGFyYW0t
Pmhhc0FkZGVkQ29udGVudHNCZWZvcmVFbmQpIHsKKyAgICAgICAgcmVzdWx0ICs9ICI8LyI7Cisg
ICAgICAgIHJlc3VsdCArPSBlbGVtZW50LT5ub2RlTmFtZSgpOworICAgICAgICByZXN1bHQgKz0g
Ij4iOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byB3
cml0ZSBlbmQgdGFnIGZvciBlbXB0eSBlbGVtZW50LgorICAgICAgICBpZiAocGFyYW0tPmlzSFRN
TERvY3VtZW50KSB7CisgICAgICAgICAgICByZXN1bHQgKz0gIj4iOworICAgICAgICAgICAgY29u
c3QgSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0KKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGNv
bnN0IEhUTUxFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgICAgICBpZiAoaHRtbEVsZW1lbnQt
PmVuZFRhZ1JlcXVpcmVtZW50KCkgPT0gVGFnU3RhdHVzUmVxdWlyZWQpIHsKKyAgICAgICAgICAg
ICAgICAvLyBXZSBuZWVkIHRvIHdyaXRlIGVuZCB0YWcgd2hlbiBpdCBpcyByZXF1aXJlZC4KKyAg
ICAgICAgICAgICAgICByZXN1bHQgKz0gIjwvIjsKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0g
ZWxlbWVudC0+bm9kZU5hbWUoKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gIj4iOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRm9yIHhtbCBiYXNl
IGRvY3VtZW50LgorICAgICAgICAgICAgcmVzdWx0ICs9ICIgLz4iOworICAgICAgICB9CisgICAg
fQorICAgIC8vIERvIHBvc3QgYWN0aW9uIGZvciBlbmQgdGFnLgorICAgIHJlc3VsdCArPSBwb3N0
QWN0aW9uQWZ0ZXJTZXJpYWxpemVFbmRUYWcoZWxlbWVudCwgcGFyYW0pOworICAgIC8vIFNhdmUg
dGhlIHJlc3VsdCB0byBkYXRhIGJ1ZmZlci4KKyAgICBzYXZlSFRNTENvbnRlbnRUb0J1ZmZlcihy
ZXN1bHQsIHBhcmFtKTsKK30KKwordm9pZCBXZWJQYWdlU2VyaWFsaXplckltcGw6OmJ1aWxkQ29u
dGVudEZvck5vZGUoY29uc3QgTm9kZSogbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSkKK3sKKyAgICBz
d2l0Y2ggKG5vZGUtPm5vZGVUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05P
REU6IHsKKyAgICAgICAgICAgIC8vIFByb2Nlc3Mgb3BlbiB0YWcgb2YgZWxlbWVudC4KKyAgICAg
ICAgICAgIG9wZW5UYWdUb1N0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50Kj4obm9kZSks
IHBhcmFtKTsKKyAgICAgICAgICAgIC8vIFdhbGsgdGhyb3VnaCB0aGUgY2hpbGRyZW4gbm9kZXMg
YW5kIHByb2Nlc3MgaXQuCisgICAgICAgICAgICBmb3IgKGNvbnN0IE5vZGUgKmNoaWxkID0gbm9k
ZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZCAhPSBOVUxMOworICAgICAgICAgICAgICAgICBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICAgICAgICAgIGJ1aWxkQ29udGVudEZvck5v
ZGUoY2hpbGQsIHBhcmFtKTsKKyAgICAgICAgICAgIC8vIFByb2Nlc3MgZW5kIHRhZyBvZiBlbGVt
ZW50LgorICAgICAgICAgICAgZW5kVGFnVG9TdHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgRWxlbWVu
dCo+KG5vZGUpLCBwYXJhbSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIE5vZGU6OlRFWFRfTk9ERTogeworICAgICAgICAgICAgc2F2ZUhUTUxDb250ZW50VG9C
dWZmZXIoY3JlYXRlTWFya3VwKG5vZGUpLCBwYXJhbSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIE5vZGU6OkFUVFJJQlVURV9OT0RFOgorICAgICAgICBjYXNl
IE5vZGU6OkRPQ1VNRU5UX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfRlJBR01F
TlRfTk9ERTogeworICAgICAgICAgICAgLy8gU2hvdWxkIG5vdCBleGlzdC4KKyAgICAgICAgICAg
IEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgLy8gRG9jdW1lbnQgdHlwZSBub2RlIGNhbiBiZSBpbiBET00/CisgICAgICAgIGNhc2UgTm9k
ZTo6RE9DVU1FTlRfVFlQRV9OT0RFOgorICAgICAgICAgICAgcGFyYW0tPmhhc0RvY3R5cGUgPSB0
cnVlOworICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAvLyBGb3Igb3RoZXIgdHlwZSBu
b2RlLCBjYWxsIGRlZmF1bHQgYWN0aW9uLgorICAgICAgICAgICAgc2F2ZUhUTUxDb250ZW50VG9C
dWZmZXIoY3JlYXRlTWFya3VwKG5vZGUpLCBwYXJhbSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KK30KKworV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpXZWJQYWdlU2VyaWFs
aXplckltcGwoV2ViRnJhbWUqIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCByZWN1cnNpdmVTZXJpYWxpemF0aW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQq
IGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFdlYlZlY3RvcjxXZWJVUkw+JiBsaW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBsb2NhbFBhdGhz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2Vi
U3RyaW5nJiBsb2NhbERpcmVjdG9yeU5hbWUpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAg
LCBtX3JlY3Vyc2l2ZVNlcmlhbGl6YXRpb24ocmVjdXJzaXZlU2VyaWFsaXphdGlvbikKKyAgICAs
IG1fZnJhbWVzQ29sbGVjdGVkKGZhbHNlKQorICAgICwgbV9sb2NhbERpcmVjdG9yeU5hbWUobG9j
YWxEaXJlY3RvcnlOYW1lKQoreworICAgIC8vIE11c3Qgc3BlY2lmeSBhdmFpbGFibGUgd2ViZnJh
bWUuCisgICAgQVNTRVJUKGZyYW1lKTsKKyAgICBtX3NwZWNpZmllZFdlYkZyYW1lSW1wbCA9IHN0
YXRpY19jYXN0PFdlYkZyYW1lSW1wbCo+KGZyYW1lKTsKKyAgICAvLyBNYWtlIHN1cmUgd2UgaGF2
ZSBub3QtTlVMTCBkZWxlZ2F0ZS4KKyAgICBBU1NFUlQoY2xpZW50KTsKKyAgICAvLyBCdWlsZCBs
b2NhbCByZXNvdXJjZXMgbWFwLgorICAgIEFTU0VSVChsaW5rcy5zaXplKCkgPT0gbG9jYWxQYXRo
cy5zaXplKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8aW50PihsaW5r
cy5zaXplKCkpOyBpKyspIHsKKyAgICAgICAgLy8gRklYTUU6IGhvdyB0byBjb252ZXJ0IGZyb20g
c3BlYyAoV2ViQ1N0cmluZyB0byBTdHJpbmcpPworICAgICAgICBLVVJMIHVybCA9IGxpbmtzW2ld
OworICAgICAgICBBU1NFUlQoIW1fbG9jYWxMaW5rcy5jb250YWlucyh1cmwuc3RyaW5nKCkpKTsK
KyAgICAgICAgbV9sb2NhbExpbmtzLnNldCh1cmwuc3RyaW5nKCksIGxvY2FsUGF0aHNbaV0pOwor
ICAgIH0KKworICAgIEFTU0VSVCghbV9kYXRhQnVmZmVyLmxlbmd0aCgpKTsKK30KKwordm9pZCBX
ZWJQYWdlU2VyaWFsaXplckltcGw6OmNvbGxlY3RUYXJnZXRGcmFtZXMoKQoreworICAgIEFTU0VS
VCghbV9mcmFtZXNDb2xsZWN0ZWQpOworICAgIG1fZnJhbWVzQ29sbGVjdGVkID0gdHJ1ZTsKKwor
ICAgIC8vIEZpcnN0LCBwcm9jZXNzIG1haW4gZnJhbWUuCisgICAgbV9mcmFtZXMuYXBwZW5kKG1f
c3BlY2lmaWVkV2ViRnJhbWVJbXBsKTsKKyAgICAvLyBSZXR1cm4gbm93IGlmIHVzZXIgb25seSBu
ZWVkcyB0byBzZXJpYWxpemUgc3BlY2lmaWVkIGZyYW1lLCBub3QgaW5jbHVkaW5nCisgICAgLy8g
YWxsIHN1Yi1mcmFtZXMuCisgICAgaWYgKCFtX3JlY3Vyc2l2ZVNlcmlhbGl6YXRpb24pCisgICAg
ICAgIHJldHVybjsKKyAgICAvLyBDb2xsZWN0IGFsbCBmcmFtZXMgaW5zaWRlIHRoZSBzcGVjaWZp
ZWQgZnJhbWUuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxpbnQ+KG1fZnJh
bWVzLnNpemUoKSk7ICsraSkgeworICAgICAgICBXZWJGcmFtZUltcGwqIGN1cnJlbnRGcmFtZSA9
IG1fZnJhbWVzW2ldOworICAgICAgICAvLyBHZXQgY3VycmVudCB1c2luZyBkb2N1bWVudC4KKyAg
ICAgICAgRG9jdW1lbnQqIGN1cnJlbnREb2MgPSBjdXJyZW50RnJhbWUtPmZyYW1lKCktPmRvY3Vt
ZW50KCk7CisgICAgICAgIC8vIEdvIHRocm91Z2ggc3ViLWZyYW1lcy4KKyAgICAgICAgUmVmUHRy
PEhUTUxBbGxDb2xsZWN0aW9uPiBhbGwgPSBjdXJyZW50RG9jLT5hbGwoKTsKKyAgICAgICAgZm9y
IChOb2RlKiBub2RlID0gYWxsLT5maXJzdEl0ZW0oKTsgbm9kZSAhPSBOVUxMOyBub2RlID0gYWxs
LT5uZXh0SXRlbSgpKSB7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CisgICAgICAgICAgICBXZWJGcmFtZUltcGwq
IHdlYkZyYW1lID0KKyAgICAgICAgICAgICAgICBXZWJGcmFtZUltcGw6OmZyb21GcmFtZU93bmVy
RWxlbWVudChlbGVtZW50KTsKKyAgICAgICAgICAgIGlmICh3ZWJGcmFtZSkKKyAgICAgICAgICAg
ICAgICBtX2ZyYW1lcy5hcHBlbmQod2ViRnJhbWUpOworICAgICAgICB9CisgICAgfQorfQorCiti
b29sIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6c2VyaWFsaXplKCkKK3sKKyAgICAvLyBDb2xsZWN0
IHRhcmdldCBmcmFtZXMuCisgICAgaWYgKCFtX2ZyYW1lc0NvbGxlY3RlZCkKKyAgICAgICAgY29s
bGVjdFRhcmdldEZyYW1lcygpOworICAgIGJvb2wgZGlkU2VyaWFsaXphdGlvbiA9IGZhbHNlOwor
ICAgIC8vIEdldCBLVVJMIGZvciBtYWluIGZyYW1lLgorICAgIEtVUkwgbWFpblBhZ2VVUkwgPSBt
X3NwZWNpZmllZFdlYkZyYW1lSW1wbC0+ZnJhbWUoKS0+bG9hZGVyKCktPnVybCgpOworCisgICAg
Ly8gR28gdGhyb3VnaCBhbGwgZnJhbWVzIGZvciBzZXJpYWxpemluZyBET00gZm9yIHdob2xlIHBh
Z2UsIGluY2x1ZGUKKyAgICAvLyBzdWItZnJhbWVzLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c3RhdGljX2Nhc3Q8aW50PihtX2ZyYW1lcy5zaXplKCkpOyArK2kpIHsKKyAgICAgICAgLy8gR2V0
IGN1cnJlbnQgc2VyaWFsaXppbmcgZnJhbWUuCisgICAgICAgIFdlYkZyYW1lSW1wbCogY3VycmVu
dEZyYW1lID0gbV9mcmFtZXNbaV07CisgICAgICAgIC8vIEdldCBjdXJyZW50IHVzaW5nIGRvY3Vt
ZW50LgorICAgICAgICBEb2N1bWVudCogY3VycmVudERvYyA9IGN1cnJlbnRGcmFtZS0+ZnJhbWUo
KS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgLy8gR2V0IGN1cnJlbnQgZnJhbWUncyBVUkwuCisgICAg
ICAgIGNvbnN0IEtVUkwmIGN1cnJlbnRGcmFtZVVSTCA9IGN1cnJlbnRGcmFtZS0+ZnJhbWUoKS0+
bG9hZGVyKCktPnVybCgpOworCisgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSBkb25l
IHRoaXMgZG9jdW1lbnQuCisgICAgICAgIGlmIChtX2xvY2FsTGlua3MuY29udGFpbnMoY3VycmVu
dEZyYW1lVVJMLnN0cmluZygpKSkgeworICAgICAgICAgICAgLy8gQSBuZXcgZG9jdW1lbnQsIHdl
IHdpbGwgc2VyaWFsaXplIGl0LgorICAgICAgICAgICAgZGlkU2VyaWFsaXphdGlvbiA9IHRydWU7
CisgICAgICAgICAgICAvLyBHZXQgdGFyZ2V0IGVuY29kaW5nIGZvciBjdXJyZW50IGRvY3VtZW50
LgorICAgICAgICAgICAgU3RyaW5nIGVuY29kaW5nID0gY3VycmVudEZyYW1lLT5mcmFtZSgpLT5s
b2FkZXIoKS0+ZW5jb2RpbmcoKTsKKyAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgdGV4dCBlbmNv
ZGluZyBvYmplY3Qgd2l0aCB0YXJnZXQgZW5jb2RpbmcuCisgICAgICAgICAgICBUZXh0RW5jb2Rp
bmcgdGV4dEVuY29kaW5nKGVuY29kaW5nKTsKKyAgICAgICAgICAgIC8vIENvbnN0cnVjdCBzZXJp
YWxpemUgcGFyYW1ldGVyIGZvciBsYXRlIHByb2Nlc3NpbmcgZG9jdW1lbnQuCisgICAgICAgICAg
ICBTZXJpYWxpemVEb21QYXJhbSBwYXJhbShjdXJyZW50RnJhbWVVUkwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZy5sZW5ndGgoKSA/IHRleHRFbmNvZGluZyA6
IFVURjhFbmNvZGluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudERvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFt
ZVVSTCA9PSBtYWluUGFnZVVSTCA/IG1fbG9jYWxEaXJlY3RvcnlOYW1lIDogIiIpOworCisgICAg
ICAgICAgICAvLyBQcm9jZXNzIGN1cnJlbnQgZG9jdW1lbnQuCisgICAgICAgICAgICBFbGVtZW50
KiByb290RWxlbWVudCA9IGN1cnJlbnREb2MtPmRvY3VtZW50RWxlbWVudCgpOworICAgICAgICAg
ICAgaWYgKHJvb3RFbGVtZW50KQorICAgICAgICAgICAgICAgIGJ1aWxkQ29udGVudEZvck5vZGUo
cm9vdEVsZW1lbnQsICZwYXJhbSk7CisKKyAgICAgICAgICAgIC8vIFNpbmsgdGhlIHJlbWFpbmRl
ciBkYXRhIGFuZCBmaW5pc2ggc2VyaWFsaXppbmcgY3VycmVudCBmcmFtZS4KKyAgICAgICAgICAg
IG1fY2xpZW50LT5kaWRTZXJpYWxpemVEYXRhRm9yRnJhbWUoY3VycmVudEZyYW1lVVJMLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGFCdWZmZXIu
dG9TdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQ6OkN1cnJlbnRGcmFtZUlzRmluaXNoZWQpOworICAg
ICAgICAgICAgLy8gQ2xlYXIgdGhlIGJ1ZmZlci4KKyAgICAgICAgICAgIG1fZGF0YUJ1ZmZlci5j
bGVhcigpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gV2UgaGF2ZSBkb25lIGNhbGwgZnJh
bWVzLCBzbyB3ZSBzZW5kIG1lc3NhZ2UgdG8gZW1iZWRkZXIgdG8gdGVsbCBpdCB0aGF0CisgICAg
Ly8gZnJhbWVzIGFyZSBmaW5pc2hlZCBzZXJpYWxpemluZy4KKyAgICBBU1NFUlQoIW1fZGF0YUJ1
ZmZlci5sZW5ndGgoKSk7CisgICAgbV9jbGllbnQtPmRpZFNlcmlhbGl6ZURhdGFGb3JGcmFtZShL
VVJMKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGFCdWZm
ZXIudG9TdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YlBhZ2VTZXJpYWxpemVyQ2xpZW50OjpBbGxGcmFtZXNBcmVGaW5pc2hlZCk7CisgICAgcmV0dXJu
IGRpZFNlcmlhbGl6YXRpb247Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmggYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmI2YTdiNTUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5oCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBX
ZWJQYWdlU2VyaWFsaXplckltcGxfaAorI2RlZmluZSBXZWJQYWdlU2VyaWFsaXplckltcGxfaAor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNs
dWRlICJTdHJpbmdCdWlsZGVyLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorCisjaW5jbHVk
ZSAiV2ViRW50aXRpZXMuaCIKKyNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplci5oIgorI2luY2x1
ZGUgIldlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisj
aW5jbHVkZSAiV2ViVVJMLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIERvY3VtZW50OworY2xh
c3MgRWxlbWVudDsKK2NsYXNzIE5vZGU7CitjbGFzcyBTdHJpbmc7CitjbGFzcyBUZXh0RW5jb2Rp
bmc7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViRnJhbWVJbXBsOworCisvLyBH
ZXQgaHRtbCBkYXRhIGJ5IHNlcmlhbGl6aW5nIGFsbCBmcmFtZXMgb2YgY3VycmVudCBwYWdlIHdp
dGggbGlzdHMKKy8vIHdoaWNoIGNvbnRhaW4gYWxsIHJlc291cmNlIGxpbmtzIHRoYXQgaGF2ZSBs
b2NhbCBjb3B5LgorLy8gY29udGFpbiBhbGwgc2F2ZWQgYXV4aWxpYXJ5IGZpbGVzIGluY2x1ZGVk
IGFsbCBzdWIgZnJhbWVzIGFuZCByZXNvdXJjZXMuCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgZmlu
ZCBvdXQgYWxsIGZyYW1lcyBhbmQgc2VyaWFsaXplIHRoZW0gdG8gSFRNTCBkYXRhLgorLy8gV2Ug
aGF2ZSBhIGRhdGEgYnVmZmVyIHRvIHRlbXBvcmFyeSBzYXZpbmcgZ2VuZXJhdGVkIGh0bWwgZGF0
YS4gV2Ugd2lsbAorLy8gc2VxdWVudGlhbGx5IGNhbGwgV2ViVmlld0RlbGVnYXRlOjpTZW5kU2Vy
aWFsaXplZEh0bWxEYXRhIG9uY2UgdGhlIGRhdGEKKy8vIGJ1ZmZlciBpcyBmdWxsLiBTZWUgY29t
bWVudHMgb2YgV2ViVmlld0RlbGVnYXRlOjpTZW5kU2VyaWFsaXplZEh0bWxEYXRhCisvLyBmb3Ig
Z2V0dGluZyBtb3JlIGluZm9ybWF0aW9uLgorY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsIHsK
K3B1YmxpYzoKKyAgICAvLyBEbyBzZXJpYWxpemF0aW9uIGFjdGlvbi4gUmV0dXJuIGZhbHNlIG1l
YW5zIG5vIGF2YWlsYWJsZSBmcmFtZSBoYXMgYmVlbgorICAgIC8vIHNlcmlhbGl6ZWQsIG90aGVy
d2lzZSByZXR1cm4gdHJ1ZS4KKyAgICBib29sIHNlcmlhbGl6ZSgpOworICAgIC8vIFRoZSBwYXJh
bWV0ZXIgc3BlY2lmaWVzIHdoaWNoIGZyYW1lIG5lZWQgdG8gYmUgc2VyaWFsaXplZC4KKyAgICAv
LyBUaGUgcGFyYW1ldGVyIHJlY3Vyc2l2ZV9zZXJpYWxpemF0aW9uIHNwZWNpZmllcyB3aGV0aGVy
IHdlIG5lZWQgdG8KKyAgICAvLyBzZXJpYWxpemUgYWxsIHN1YiBmcmFtZXMgb2YgdGhlIHNwZWNp
ZmllZCBmcmFtZSBvciBub3QuCisgICAgLy8gVGhlIHBhcmFtZXRlciBkZWxlZ2F0ZSBzcGVjaWZp
ZXMgdGhlIHBvaW50ZXIgb2YgaW50ZXJmYWNlCisgICAgLy8gRG9tU2VyaWFsaXplckRlbGVnYXRl
IHByb3ZpZGUgc2luayBpbnRlcmZhY2Ugd2hpY2ggY2FuIHJlY2VpdmUgdGhlCisgICAgLy8gaW5k
aXZpZHVhbCBjaHVua3Mgb2YgZGF0YSB0byBiZSBzYXZlZC4KKyAgICAvLyBUaGUgcGFyYW1ldGVy
IGxpbmtzIGNvbnRhaW4gb3JpZ2luYWwgVVJMcyBvZiBhbGwgc2F2ZWQgbGlua3MuCisgICAgLy8g
VGhlIHBhcmFtZXRlciBsb2NhbF9wYXRocyBjb250YWluIGNvcnJlc3BvbmRpbmcgbG9jYWwgZmls
ZSBwYXRocyBvZiBhbGwKKyAgICAvLyBzYXZlZCBsaW5rcywgd2hpY2ggbWF0Y2hlZCB3aXRoIHZl
Y3RvcjpsaW5rcyBvbmUgYnkgb25lLgorICAgIC8vIFRoZSBwYXJhbWV0ZXIgbG9jYWxfZGlyZWN0
b3J5X25hbWUgaXMgcmVsYXRpdmUgcGF0aCBvZiBkaXJlY3Rvcnkgd2hpY2gKKyAgICAvLyBjb250
YWluIGFsbCBzYXZlZCBhdXhpbGlhcnkgZmlsZXMgaW5jbHVkZWQgYWxsIHN1YiBmcmFtZXMgYW5k
IHJlc291cmNlcy4KKyAgICBXZWJQYWdlU2VyaWFsaXplckltcGwoV2ViRnJhbWUqIGZyYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlY3Vyc2l2ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqIGNsaWVudCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlVSTD4mIGxpbmtzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbG9jYWxQYXRocywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBsb2NhbERpcmVjdG9y
eU5hbWUpOworCitwcml2YXRlOgorICAgIC8vIFNwZWNpZmllZCBmcmFtZSB3aGljaCBuZWVkIHRv
IGJlIHNlcmlhbGl6ZWQ7CisgICAgV2ViRnJhbWVJbXBsKiBtX3NwZWNpZmllZFdlYkZyYW1lSW1w
bDsKKyAgICAvLyBQb2ludGVyIG9mIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50CisgICAgV2ViUGFn
ZVNlcmlhbGl6ZXJDbGllbnQqIG1fY2xpZW50OworICAgIC8vIFRoaXMgaGFzaCBtYXAgaXMgdXNl
ZCB0byBtYXAgcmVzb3VyY2UgVVJMIG9mIG9yaWdpbmFsIGxpbmsgdG8gaXRzIGxvY2FsCisgICAg
Ly8gZmlsZSBwYXRoLgorICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJDb3JlOjpTdHJpbmcsIFdlYkNv
cmU6OlN0cmluZz4gTGlua0xvY2FsUGF0aE1hcDsKKyAgICAvLyBsb2NhbF9saW5rc18gaW5jbHVk
ZSBhbGwgcGFpciBvZiBsb2NhbCByZXNvdXJjZSBwYXRoIGFuZCBjb3JyZXNwb25kaW5nCisgICAg
Ly8gb3JpZ2luYWwgbGluay4KKyAgICBMaW5rTG9jYWxQYXRoTWFwIG1fbG9jYWxMaW5rczsKKyAg
ICAvLyBEYXRhIGJ1ZmZlciBmb3Igc2F2aW5nIHJlc3VsdCBvZiBzZXJpYWxpemVkIERPTSBkYXRh
LgorICAgIFdlYkNvcmU6OlN0cmluZ0J1aWxkZXIgbV9kYXRhQnVmZmVyOworICAgIC8vIFBhc3Np
bmcgdHJ1ZSB0byByZWN1cnNpdmVfc2VyaWFsaXphdGlvbl8gaW5kaWNhdGVzIHdlIHdpbGwgc2Vy
aWFsaXplIG5vdAorICAgIC8vIG9ubHkgdGhlIHNwZWNpZmllZCBmcmFtZSBidXQgYWxzbyBhbGwg
c3ViLWZyYW1lcyBpbiB0aGUgc3BlY2lmaWMgZnJhbWUuCisgICAgLy8gT3RoZXJ3aXNlIHdlIG9u
bHkgc2VyaWFsaXplIHRoZSBzcGVjaWZpZWQgZnJhbWUgZXhjbHVkZWQgYWxsIHN1Yi1mcmFtZXMu
CisgICAgYm9vbCBtX3JlY3Vyc2l2ZVNlcmlhbGl6YXRpb247CisgICAgLy8gRmxhZyBpbmRpY2F0
ZXMgd2hldGhlciB3ZSBoYXZlIGNvbGxlY3RlZCBhbGwgZnJhbWVzIHdoaWNoIG5lZWQgdG8gYmUK
KyAgICAvLyBzZXJpYWxpemVkIG9yIG5vdDsKKyAgICBib29sIG1fZnJhbWVzQ29sbGVjdGVkOwor
ICAgIC8vIExvY2FsIGRpcmVjdG9yeSBuYW1lIG9mIGFsbCBsb2NhbCByZXNvdXJjZSBmaWxlcy4K
KyAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1fbG9jYWxEaXJlY3RvcnlOYW1lOworICAgIC8v
IFZlY3RvciBmb3Igc2F2aW5nIGFsbCBmcmFtZXMgd2hpY2ggbmVlZCB0byBiZSBzZXJpYWxpemVk
LgorICAgIFZlY3RvcjxXZWJGcmFtZUltcGwqPiBtX2ZyYW1lczsKKworICAgIHN0cnVjdCBTZXJp
YWxpemVEb21QYXJhbSB7CisgICAgICAgIC8vIEZyYW1lIFVSTCBvZiBjdXJyZW50IHByb2Nlc3Np
bmcgZG9jdW1lbnQgcHJlc2VudGVkIGJ5IEdVUkwKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6S1VS
TCYgY3VycmVudEZyYW1lVVJMOworICAgICAgICAvLyBDdXJyZW50IHVzaW5nIHRleHQgZW5jb2Rp
bmcgb2JqZWN0LgorICAgICAgICBjb25zdCBXZWJDb3JlOjpUZXh0RW5jb2RpbmcmIHRleHRFbmNv
ZGluZzsKKworICAgICAgICAvLyBEb2N1bWVudCBvYmplY3Qgb2YgY3VycmVudCBmcmFtZS4KKyAg
ICAgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGRvYzsKKyAgICAgICAgLy8gTG9jYWwgZGlyZWN0b3J5
IG5hbWUgb2YgYWxsIGxvY2FsIHJlc291cmNlIGZpbGVzLgorICAgICAgICBjb25zdCBXZWJDb3Jl
OjpTdHJpbmcmIGRpcmVjdG9yeU5hbWU7CisKKyAgICAgICAgLy8gRmxhZyBpbmRpY2F0ZXMgY3Vy
cmVudCBkb2MgaXMgaHRtbCBkb2N1bWVudCBvciBub3QuIEl0J3MgYSBjYWNoZSB2YWx1ZQorICAg
ICAgICAvLyBvZiBEb2N1bWVudC5pc0hUTUxEb2N1bWVudCgpLgorICAgICAgICBib29sIGlzSFRN
TERvY3VtZW50OworICAgICAgICAvLyBGbGFnIHdoaWNoIGluZGljYXRlIHdoZXRoZXIgd2UgaGF2
ZSBtZXQgZG9jdW1lbnQgdHlwZSBkZWNsYXJhdGlvbi4KKyAgICAgICAgYm9vbCBoYXNEb2N0eXBl
OworICAgICAgICAvLyBGbGFnIHdoaWNoIGluZGljYXRlIHdoZXRoZXIgd2lsbCBwcm9jZXNzIG1l
dGEgaXNzdWUuCisgICAgICAgIGJvb2wgaGFzQ2hlY2tlZE1ldGE7CisgICAgICAgIC8vIFRoaXMg
bWV0YSBlbGVtZW50IG5lZWQgdG8gYmUgc2tpcHBlZCB3aGVuIHNlcmlhbGl6aW5nIERPTS4KKyAg
ICAgICAgY29uc3QgV2ViQ29yZTo6RWxlbWVudCogc2tpcE1ldGFFbGVtZW50OworICAgICAgICAv
LyBGbGFnIGluZGljYXRlcyB3ZSBhcmUgaW4gc2NyaXB0IG9yIHN0eWxlIHRhZy4KKyAgICAgICAg
Ym9vbCBpc0luU2NyaXB0T3JTdHlsZVRhZzsKKyAgICAgICAgLy8gRmxhZyBpbmRpY2F0ZXMgd2hl
dGhlciB3ZSBoYXZlIHdyaXR0ZW4geG1sIGRvY3VtZW50IGRlY2xhcmF0aW9uLgorICAgICAgICAv
LyBJdCBpcyBvbmx5IHVzZWQgaW4geG1sIGRvY3VtZW50CisgICAgICAgIGJvb2wgaGFzRG9jRGVj
bGFyYXRpb247CisgICAgICAgIC8vIEZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgd2UgaGF2ZSBhZGRl
ZCBhZGRpdGlvbmFsIGNvbnRlbnRzIGJlZm9yZSBlbmQgdGFnLgorICAgICAgICAvLyBUaGlzIGZs
YWcgd2lsbCBiZSByZS1hc3NpZ25lZCBpbiBlYWNoIGNhbGwgb2YgZnVuY3Rpb24KKyAgICAgICAg
Ly8gUG9zdEFjdGlvbkFmdGVyU2VyaWFsaXplT3BlblRhZyBhbmQgaXQgY291bGQgYmUgY2hhbmdl
ZCBpbiBmdW5jdGlvbgorICAgICAgICAvLyBQcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVFbmRUYWcg
aWYgdGhlIGZ1bmN0aW9uIGFkZHMgbmV3IGNvbnRlbnRzIGludG8KKyAgICAgICAgLy8gc2VyaWFs
aXphdGlvbiBzdHJlYW0uCisgICAgICAgIGJvb2wgaGFzQWRkZWRDb250ZW50c0JlZm9yZUVuZDsK
KworICAgICAgICAvLyBDb25zdHJ1Y3Rvci4KKyAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0oY29u
c3QgV2ViQ29yZTo6S1VSTCYgY3VycmVudEZyYW1lVVJMLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBXZWJDb3JlOjpUZXh0RW5jb2RpbmcmIHRleHRFbmNvZGluZywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGRvYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBkaXJlY3RvcnlOYW1lKTsKKyAgICB9
OworCisgICAgLy8gQ29sbGVjdCBhbGwgdGFyZ2V0IGZyYW1lcyB3aGljaCBuZWVkIHRvIGJlIHNl
cmlhbGl6ZWQuCisgICAgdm9pZCBjb2xsZWN0VGFyZ2V0RnJhbWVzKCk7CisgICAgLy8gQmVmb3Jl
IHdlIGJlZ2luIHNlcmlhbGl6aW5nIG9wZW4gdGFnIG9mIGEgZWxlbWVudCwgd2UgZ2l2ZSB0aGUg
dGFyZ2V0CisgICAgLy8gZWxlbWVudCBhIGNoYW5jZSB0byBkbyBzb21lIHdvcmsgcHJpb3IgdG8g
YWRkIHNvbWUgYWRkaXRpb25hbCBkYXRhLgorICAgIFdlYkNvcmU6OlN0cmluZyBwcmVBY3Rpb25C
ZWZvcmVTZXJpYWxpemVPcGVuVGFnKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFs
aXplRG9tUGFyYW0qIHBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wqIG5lZWRTa2lwKTsKKyAgICAvLyBBZnRlciB3ZSBmaW5pc2gg
c2VyaWFsaXppbmcgb3BlbiB0YWcgb2YgYSBlbGVtZW50LCB3ZSBnaXZlIHRoZSB0YXJnZXQKKyAg
ICAvLyBlbGVtZW50IGEgY2hhbmNlIHRvIGRvIHNvbWUgcG9zdCB3b3JrIHRvIGFkZCBzb21lIGFk
ZGl0aW9uYWwgZGF0YS4KKyAgICBXZWJDb3JlOjpTdHJpbmcgcG9zdEFjdGlvbkFmdGVyU2VyaWFs
aXplT3BlblRhZyhjb25zdCBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZURvbVBhcmFt
KiBwYXJhbSk7CisgICAgLy8gQmVmb3JlIHdlIGJlZ2luIHNlcmlhbGl6aW5nIGVuZCB0YWcgb2Yg
YSBlbGVtZW50LCB3ZSBnaXZlIHRoZSB0YXJnZXQKKyAgICAvLyBlbGVtZW50IGEgY2hhbmNlIHRv
IGRvIHNvbWUgd29yayBwcmlvciB0byBhZGQgc29tZSBhZGRpdGlvbmFsIGRhdGEuCisgICAgV2Vi
Q29yZTo6U3RyaW5nIHByZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZUVuZFRhZyhjb25zdCBXZWJDb3Jl
OjpFbGVtZW50KiBlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogbmVlZFNraXApOworICAg
IC8vIEFmdGVyIHdlIGZpbmlzaCBzZXJpYWxpemluZyBlbmQgdGFnIG9mIGEgZWxlbWVudCwgd2Ug
Z2l2ZSB0aGUgdGFyZ2V0CisgICAgLy8gZWxlbWVudCBhIGNoYW5jZSB0byBkbyBzb21lIHBvc3Qg
d29yayB0byBhZGQgc29tZSBhZGRpdGlvbmFsIGRhdGEuCisgICAgV2ViQ29yZTo6U3RyaW5nIHBv
c3RBY3Rpb25BZnRlclNlcmlhbGl6ZUVuZFRhZyhjb25zdCBXZWJDb3JlOjpFbGVtZW50KiBlbGVt
ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKTsKKyAgICAvLyBTYXZlIGdlbmVyYXRlZCBodG1sIGNv
bnRlbnQgdG8gZGF0YSBidWZmZXIuCisgICAgdm9pZCBzYXZlSFRNTENvbnRlbnRUb0J1ZmZlcihj
b25zdCBXZWJDb3JlOjpTdHJpbmcmIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSk7CisgICAgLy8gU2VyaWFsaXplIG9wZW4g
dGFnIG9mIGFuIHNwZWNpZmllZCBlbGVtZW50LgorICAgIHZvaWQgb3BlblRhZ1RvU3RyaW5nKGNv
bnN0IFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
U2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKTsKKyAgICAvLyBTZXJpYWxpemUgZW5kIHRhZyBvZiBh
biBzcGVjaWZpZWQgZWxlbWVudC4KKyAgICB2b2lkIGVuZFRhZ1RvU3RyaW5nKGNvbnN0IFdlYkNv
cmU6OkVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVE
b21QYXJhbSogcGFyYW0pOworICAgIC8vIEJ1aWxkIGNvbnRlbnQgZm9yIGEgc3BlY2lmaWVkIG5v
ZGUKKyAgICB2b2lkIGJ1aWxkQ29udGVudEZvck5vZGUoY29uc3QgV2ViQ29yZTo6Tm9kZSogbm9k
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFt
KTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43858</attachid>
            <date>2009-11-25 10:48:23 -0800</date>
            <delta_ts>2009-11-25 10:56:52 -0800</delta_ts>
            <desc>WebPageSerializer</desc>
            <filename>bug-31737-20091125104822.patch</filename>
            <type>text/plain</type>
            <size>61379</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAppbmRleCBjMjFlMzY2Li4zZTM0
OTgxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCkBAIC05NSw0ICs5
NSwxNyBAQCBTdHJpbmcgU3RyaW5nQnVpbGRlcjo6dG9TdHJpbmcoKSBjb25zdAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6Y2xlYXIoKQoreworICAgIG1fdG90
YWxMZW5ndGggPSBVSU5UX01BWDsKKyAgICBtX3N0cmluZ3MuY2xlYXIoKTsKK30KKwordW5zaWdu
ZWQgU3RyaW5nQnVpbGRlcjo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICBpZiAobV90b3RhbExlbmd0
aCA9PSBVSU5UX01BWCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fdG90YWxMZW5n
dGg7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWls
ZGVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5oCmluZGV4IDhkNzZi
OWMuLjdmNzJmYmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWls
ZGVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxkZXIuaApAQCAtNDIs
NiArNDIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgYXBwZW5kKGNvbnN0
IFN0cmluZyYpOwogICAgICAgICB2b2lkIGFwcGVuZChVQ2hhcik7CiAgICAgICAgIHZvaWQgYXBw
ZW5kKGNoYXIpOworICAgICAgICAKKyAgICAgICAgdm9pZCBjbGVhcigpOworICAgICAgICB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdDsKIAogICAgICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsK
IApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cAppbmRleCBhYjA4ZGM5Li5hMjYwZTZmIDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAt
MTMxLDYgKzEzMSw4IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJOb3RpZmljYXRpb24u
aCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJOb3RpZmljYXRpb25QcmVzZW50ZXIuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJh
Y2suaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oJywKKyAg
ICAgICAgICAgICAgICAncHVibGljL1dlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgnLAogICAgICAg
ICAgICAgICAgICdwdWJsaWMvV2ViUGFzc3dvcmRBdXRvY29tcGxldGVMaXN0ZW5lci5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYlBhc3N3b3JkRm9ybURhdGEuaCcsCiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJQbHVnaW4uaCcsCkBAIC0yNDIsNiArMjQ0LDggQEAKICAgICAgICAg
ICAgICAgICAnc3JjL1dlYkRhdGFTb3VyY2VJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViRHJhZ0RhdGEuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkVsZW1lbnQuY3BwJywK
KyAgICAgICAgICAgICAgICAnc3JjL1dlYkVudGl0aWVzLmNwcCcsCisgICAgICAgICAgICAgICAg
J3NyYy9XZWJFbnRpdGllcy5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZpbGVDaG9vc2Vy
Q29tcGxldGlvbkltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZpbGVDaG9vc2Vy
Q29tcGxldGlvbkltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGb250Q2FjaGUuY3Bw
JywKQEAgLTI2MSw2ICsyNjUsOSBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFQbGF5
ZXJDbGllbnRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTm9kZS5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViTm90aWZpY2F0aW9uLmNwcCcsCisgICAgICAgICAgICAgICAg
J3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViUGFn
ZVNlcmlhbGl6ZXJJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJQYWdlU2VyaWFs
aXplckltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJQYXNzd29yZEZvcm1EYXRhLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJQYXNzd29yZEZvcm1VdGlscy5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViUGFzc3dvcmRGb3JtVXRpbHMuaCcsCmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmggYi9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYTAzOTQyMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViUGFnZVNlcmlhbGl6ZXIuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQYWdlU2Vy
aWFsaXplcl9oCisjZGVmaW5lIFdlYlBhZ2VTZXJpYWxpemVyX2gKKworI2luY2x1ZGUgIldlYkNv
bW1vbi5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkZyYW1lOworY2xhc3MgV2Vi
UGFnZVNlcmlhbGl6ZXJDbGllbnQ7CitjbGFzcyBXZWJTdHJpbmc7CitjbGFzcyBXZWJVUkw7Cit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2ViVmVjdG9yOworCisvLyBHZXQgaHRtbCBkYXRh
IGJ5IHNlcmlhbGl6aW5nIGFsbCBmcmFtZXMgb2YgY3VycmVudCBwYWdlIHdpdGggbGlzdHMKKy8v
IHdoaWNoIGNvbnRhaW4gYWxsIHJlc291cmNlIGxpbmtzIHRoYXQgaGF2ZSBsb2NhbCBjb3B5Lgor
Ly8gY29udGFpbiBhbGwgc2F2ZWQgYXV4aWxpYXJ5IGZpbGVzIGluY2x1ZGVkIGFsbCBzdWIgZnJh
bWVzIGFuZCByZXNvdXJjZXMuCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgZmluZCBvdXQgYWxsIGZy
YW1lcyBhbmQgc2VyaWFsaXplIHRoZW0gdG8gSFRNTCBkYXRhLgorLy8gV2UgaGF2ZSBhIGRhdGEg
YnVmZmVyIHRvIHRlbXBvcmFyeSBzYXZpbmcgZ2VuZXJhdGVkIGh0bWwgZGF0YS4gV2Ugd2lsbAor
Ly8gc2VxdWVudGlhbGx5IGNhbGwgV2ViVmlld0RlbGVnYXRlOjpTZW5kU2VyaWFsaXplZEh0bWxE
YXRhIG9uY2UgdGhlIGRhdGEKKy8vIGJ1ZmZlciBpcyBmdWxsLiBTZWUgY29tbWVudHMgb2YgV2Vi
Vmlld0RlbGVnYXRlOjpTZW5kU2VyaWFsaXplZEh0bWxEYXRhCisvLyBmb3IgZ2V0dGluZyBtb3Jl
IGluZm9ybWF0aW9uLgorY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXIgeworcHVibGljOgorCisgICAg
Ly8gRG8gc2VyaWFsaXphdGlvbiBhY3Rpb24uIFJldHVybiBmYWxzZSBtZWFucyBubyBhdmFpbGFi
bGUgZnJhbWUgaGFzIGJlZW4KKyAgICAvLyBzZXJpYWxpemVkLCBvdGhlcndpc2UgcmV0dXJuIHRy
dWUuCisgICAgLy8gVGhlIHBhcmFtZXRlciBzcGVjaWZpZXMgd2hpY2ggZnJhbWUgbmVlZCB0byBi
ZSBzZXJpYWxpemVkLgorICAgIC8vIFRoZSBwYXJhbWV0ZXIgcmVjdXJzaXZlIHNwZWNpZmllcyB3
aGV0aGVyIHdlIG5lZWQgdG8KKyAgICAvLyBzZXJpYWxpemUgYWxsIHN1YiBmcmFtZXMgb2YgdGhl
IHNwZWNpZmllZCBmcmFtZSBvciBub3QuCisgICAgLy8gVGhlIHBhcmFtZXRlciBjbGllbnQgc3Bl
Y2lmaWVzIHRoZSBwb2ludGVyIG9mIGludGVyZmFjZQorICAgIC8vIFdlYlBhZ2VTZXJpYWxpemVy
Q2xpZW50IHByb3ZpZGUgc2luayBpbnRlcmZhY2Ugd2hpY2ggY2FuIHJlY2VpdmUgdGhlCisgICAg
Ly8gaW5kaXZpZHVhbCBjaHVua3Mgb2YgZGF0YSB0byBiZSBzYXZlZC4KKyAgICAvLyBUaGUgcGFy
YW1ldGVyIGxpbmtzIGNvbnRhaW4gb3JpZ2luYWwgVVJMcyBvZiBhbGwgc2F2ZWQgbGlua3MuCisg
ICAgLy8gVGhlIHBhcmFtZXRlciBsb2NhbFBhdGhzIGNvbnRhaW4gY29ycmVzcG9uZGluZyBsb2Nh
bCBmaWxlIHBhdGhzIG9mIGFsbAorICAgIC8vIHNhdmVkIGxpbmtzLCB3aGljaCBtYXRjaGVkIHdp
dGggdmVjdG9yOmxpbmtzIG9uZSBieSBvbmUuCisgICAgLy8gVGhlIHBhcmFtZXRlciBsb2NhbERp
cmVjdG9yeU5hbWUgaXMgcmVsYXRpdmUgcGF0aCBvZiBkaXJlY3Rvcnkgd2hpY2gKKyAgICAvLyBj
b250YWluIGFsbCBzYXZlZCBhdXhpbGlhcnkgZmlsZXMgaW5jbHVkZWQgYWxsIHN1YiBmcmFtZXMg
YW5kIHJlc291cmNlcy4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBib29sIHNlcmlhbGl6ZShXZWJG
cmFtZSogZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBy
ZWN1cnNpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViUGFnZVNl
cmlhbGl6ZXJDbGllbnQqIGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBXZWJWZWN0b3I8V2ViVVJMPiYgbGlua3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGxvY2FsUGF0aHMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBs
b2NhbERpcmVjdG9yeU5hbWUpOworCisgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgYXJlIGhl
cmUgZm9yIHVuaXQgdGVzdGluZyBwdXJwb3Nlcy4gQ29uc2lkZXIKKyAgICAvLyBmaXhpbmcgdGhl
IHVuaXQgdGVzdHMgaW5zdGVhZC4KKworICAgIC8vIEdlbmVyYXRlIHRoZSBNRVRBIGZvciBjaGFy
c2V0IGRlY2xhcmF0aW9uLgorICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0
ZU1ldGFDaGFyc2V0RGVjbGFyYXRpb24oY29uc3QgV2ViU3RyaW5nJiBjaGFyc2V0KTsKKyAgICAv
LyBHZW5lcmF0ZSB0aGUgTU9UVyBkZWNsYXJhdGlvbi4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBX
ZWJTdHJpbmcgZ2VuZXJhdGVNYXJrT2ZUaGVXZWJEZWNsYXJhdGlvbihjb25zdCBXZWJVUkwmIHVy
bCk7CisgICAgLy8gR2VuZXJhdGUgdGhlIGRlZmF1bHQgYmFzZSB0YWcgZGVjbGFyYXRpb24uCisg
ICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5nIGdlbmVyYXRlQmFzZVRhZ0RlY2xhcmF0aW9u
KGNvbnN0IFdlYlN0cmluZyYgYmFzZVRhcmdldCk7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdl
U2VyaWFsaXplckNsaWVudC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFs
aXplckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMWZjZTMK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxp
emVyQ2xpZW50LmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRG9tU2VyaWFsaXplckNsaWVu
dF9oCisjZGVmaW5lIFdlYkRvbVNlcmlhbGl6ZXJDbGllbnRfaAorCituYW1lc3BhY2UgV2ViS2l0
IHsKK2NsYXNzIFdlYlN0cmluZzsKK2NsYXNzIFdlYlVSTDsKKworLy8gVGhpcyBjbGFzcyBpcyB1
c2VkIGZvciBwcm92aWRpbmcgc2luayBpbnRlcmZhY2UgdGhhdCBjYW4gYmUgdXNlZCB0byByZWNl
aXZlCisvLyB0aGUgaW5kaXZpZHVhbCBjaHVua3Mgb2YgZGF0YSB0byBiZSBzYXZlZC4KK2NsYXNz
IFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICAvLyBUaGlzIGVudW0gaW5k
aWNhdGVzICBUaGlzIHNpbmsgaW50ZXJmYWNlIGNhbiByZWNlaXZlIHRoZSBpbmRpdmlkdWFsIGNo
dW5rcworICAgIC8vIG9mIHNlcmlhbGl6ZWQgZGF0YSB0byBiZSBzYXZlZCwgc28gd2UgdXNlIHZh
bHVlcyBvZiBmb2xsb3dpbmcgZW51bQorICAgIC8vIGRlZmluaXRpb24gdG8gaW5kaWNhdGUgdGhl
IHNlcmlhbGl6YXRpb24gc3RhdHVzIG9mIHNlcmlhbGl6aW5nIGFsbCBodG1sCisgICAgLy8gY29u
dGVudC4gSWYgY3VycmVudCBmcmFtZSBpcyBub3QgY29tcGxldGUgc2VyaWFsaXplZCwgY2FsbAor
ICAgIC8vIERpZFNlcmlhbGl6ZURhdGFGb3JGcmFtZSB3aXRoIFVSTCBvZiBjdXJyZW50IGZyYW1l
LCBkYXRhLCBkYXRhIGxlbmd0aCBhbmQKKyAgICAvLyBmbGFnIEN1cnJlbnRGcmFtZUlzTm90Rmlu
aXNoZWQuCisgICAgLy8gSWYgY3VycmVudCBmcmFtZSBpcyBjb21wbGV0ZSBzZXJpYWxpemVkLCBj
YWxsIERpZFNlcmlhbGl6ZURhdGFGb3JGcmFtZQorICAgIC8vIHdpdGggVVJMIG9mIGN1cnJlbnQg
ZnJhbWUsIGRhdGEsIGRhdGEgbGVuZ3RoIGFuZCBmbGFnCisgICAgLy8gQ3VycmVudEZyYW1lSXNG
aW5pc2hlZC4KKyAgICAvLyBJZiBhbGwgZnJhbWVzIG9mIHBhZ2UgYXJlIGNvbXBsZXRlIHNlcmlh
bGl6ZWQsIGNhbGwKKyAgICAvLyBEaWRTZXJpYWxpemVEYXRhRm9yRnJhbWUgd2l0aCBlbXB0eSBV
UkwsIGVtcHR5IGRhdGEsIDAgYW5kIGZsYWcKKyAgICAvLyBBbGxGcmFtZXNBcmVGaW5pc2hlZC4K
KyAgICBlbnVtIFBhZ2VTZXJpYWxpemF0aW9uU3RhdHVzIHsKKyAgICAgICAgLy8gQ3VycmVudCBm
cmFtZSBpcyBub3QgZmluaXNoZWQgc2F2aW5nLgorICAgICAgICBDdXJyZW50RnJhbWVJc05vdEZp
bmlzaGVkID0gMCwKKyAgICAgICAgLy8gQ3VycmVudCBmcmFtZSBpcyBmaW5pc2hlZCBzYXZpbmcu
CisgICAgICAgIEN1cnJlbnRGcmFtZUlzRmluaXNoZWQsCisgICAgICAgIC8vIEFsbCBmcmFtZSBh
cmUgZmluaXNoZWQgc2F2aW5nLgorICAgICAgICBBbGxGcmFtZXNBcmVGaW5pc2hlZCwKKyAgICB9
OworCisgICAgLy8gUmVjZWl2ZSB0aGUgaW5kaXZpZHVhbCBjaHVua3Mgb2Ygc2VyaWFsaXplZCBk
YXRhIHRvIGJlIHNhdmVkLgorICAgIC8vIFRoZSBwYXJhbWV0ZXIgZnJhbWVVUkwgc3BlY2lmaWVz
IHdoYXQgZnJhbWUgdGhlIGRhdGEgYmVsb25ncy4gVGhlCisgICAgLy8gcGFyYW1ldGVyIGRhdGEg
Y29udGFpbnMgdGhlIGF2YWlsYWJsZSBkYXRhIGZvciBzYXZpbmcuIFRoZSBwYXJhbWV0ZXIKKyAg
ICAvLyBzdGF0dXMgaW5kaWNhdGVzIHRoZSBzdGF0dXMgb2YgZGF0YSBzZXJpYWxpemF0aW9uLgor
ICAgIHZpcnR1YWwgdm9pZCBkaWRTZXJpYWxpemVEYXRhRm9yRnJhbWUoY29uc3QgV2ViVVJMJiBm
cmFtZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFdlYlN0cmluZyYgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBhZ2VTZXJpYWxpemF0aW9uU3RhdHVzIHN0YXR1cykgPSAwOworCisgICAgV2ViUGFnZVNl
cmlhbGl6ZXJDbGllbnQoKSB7IH0KKyAgICB2aXJ0dWFsIH5XZWJQYWdlU2VyaWFsaXplckNsaWVu
dCgpIHsgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgIC8vIFdFQktJ
VF9HTFVFX0RPTV9TRVJJQUxJWkVSX0RFTEVHQVRFX0hfXwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3NyYy9ET01VdGlsaXRpZXNQcml2YXRlLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
RE9NVXRpbGl0aWVzUHJpdmF0ZS5jcHAKaW5kZXggZmZkZDg1ZC4uN2M3ODMyMSAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9ET01VdGlsaXRpZXNQcml2YXRlLmNwcAorKysgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL0RPTVV0aWxpdGllc1ByaXZhdGUuY3BwCkBAIC04NCw0ICs4NCw1NSBA
QCBTdHJpbmcgbmFtZU9mSW5wdXRFbGVtZW50KEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCiAg
ICAgcmV0dXJuIFdlYklucHV0RWxlbWVudChlbGVtZW50KS5uYW1lRm9yQXV0b2ZpbGwoKTsKIH0K
IAorCitib29sIGVsZW1lbnRIYXNMZWdhbExpbmtBdHRyaWJ1dGUoY29uc3QgRWxlbWVudCogZWxl
bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKK3sKKyAgICBpZiAoYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjpzcmNBdHRy
KSB7CisgICAgICAgIC8vIENoZWNrIHNyYyBhdHRyaWJ1dGUuCisgICAgICAgIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nVGFnKSB8fAorICAgICAgICAgICAgZWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykgfHwKKyAgICAgICAgICAgIGVsZW1lbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppZnJhbWVUYWcpIHx8CisgICAgICAgICAgICBlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVUYWcpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcp
KSB7CisgICAgICAgICAgICBjb25zdCBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9CisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxjb25zdCBIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCk7CisgICAg
ICAgICAgICBpZiAoaW5wdXQtPmlucHV0VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnQ6OklNQUdF
KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfSBlbHNlIGlm
IChhdHRyTmFtZSA9PSBIVE1MTmFtZXM6OmhyZWZBdHRyKSB7CisgICAgICAgIC8vIENoZWNrIGhy
ZWYgYXR0cmlidXRlLgorICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmxpbmtUYWcpIHx8CisgICAgICAgICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
YVRhZykgfHwKKyAgICAgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphcmVh
VGFnKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUg
PT0gSFRNTE5hbWVzOjphY3Rpb25BdHRyKSB7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6Zm9ybVRhZykpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
IGVsc2UgaWYgKGF0dHJOYW1lID09IEhUTUxOYW1lczo6YmFja2dyb3VuZEF0dHIpIHsKKyAgICAg
ICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5VGFnKSB8fAorICAgICAg
ICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlVGFnKSB8fAorICAgICAg
ICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyVGFnKSB8fAorICAgICAgICAg
ICAgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkVGFnKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjpjaXRlQXR0
cikgeworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVv
dGVUYWcpIHx8CisgICAgICAgICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cVRh
ZykgfHwKKyAgICAgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkZWxUYWcp
IHx8CisgICAgICAgICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5zVGFnKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gSFRN
TE5hbWVzOjpjbGFzc2lkQXR0ciB8fAorICAgICAgICAgICAgICAgYXR0ck5hbWUgPT0gSFRNTE5h
bWVzOjpkYXRhQXR0cikgeworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Om9iamVjdFRhZykpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgaWYg
KGF0dHJOYW1lID09IEhUTUxOYW1lczo6Y29kZWJhc2VBdHRyKSB7CisgICAgICAgIGlmIChlbGVt
ZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSB8fAorICAgICAgICAgICAgZWxl
bWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFwcGxldFRhZykpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9ET01VdGlsaXRpZXNQcml2
YXRlLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RPTVV0aWxpdGllc1ByaXZhdGUuaAppbmRleCBj
MDJiZjg0Li4yNTNhYjNmIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0RPTVV0aWxp
dGllc1ByaXZhdGUuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RPTVV0aWxpdGllc1ByaXZh
dGUuaApAQCAtMzIsMTEgKzMyLDEzIEBACiAjZGVmaW5lIERPTVV0aWxpdGllc1ByaXZhdGVfaAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBFbGVtZW50OwogY2xhc3MgSFRNTElucHV0RWxl
bWVudDsKIGNsYXNzIEhUTUxMaW5rRWxlbWVudDsKIGNsYXNzIEhUTUxNZXRhRWxlbWVudDsKIGNs
YXNzIEhUTUxPcHRpb25FbGVtZW50OwogY2xhc3MgTm9kZTsKK2NsYXNzIFF1YWxpZmllZE5hbWU7
CiBjbGFzcyBTdHJpbmc7CiB9CiAKQEAgLTUzLDYgKzU1LDE2IEBAIFdlYkNvcmU6OkhUTUxPcHRp
b25FbGVtZW50KiB0b0hUTUxPcHRpb25FbGVtZW50KFdlYkNvcmU6Ok5vZGUqKTsKIC8vIEZJWE1F
OiBEZXByZWNhdGUuIFVzZSBXZWJJbnB1dEVsZW1lbnQ6Om5hbWVGb3JBdXRvZmlsbCBpbnN0ZWFk
LgogV2ViQ29yZTo6U3RyaW5nIG5hbWVPZklucHV0RWxlbWVudChXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50Kik7CiAKKy8vIEZvciBpbWcsIHNjcmlwdCwgaWZyYW1lLCBmcmFtZSBlbGVtZW50LCB3
aGVuIGF0dHJpYnV0ZSBuYW1lIGlzIHNyYywKKy8vIGZvciBsaW5rLCBhLCBhcmVhIGVsZW1lbnQs
IHdoZW4gYXR0cmlidXRlIG5hbWUgaXMgaHJlZiwKKy8vIGZvciBmb3JtIGVsZW1lbnQsIHdoZW4g
YXR0cmlidXRlIG5hbWUgaXMgYWN0aW9uLAorLy8gZm9yIGlucHV0LCB0eXBlPWltYWdlLCB3aGVu
IGF0dHJpYnV0ZSBuYW1lIGlzIHNyYywKKy8vIGZvciBib2R5LCB0YWJsZSwgdHIsIHRkLCB3aGVu
IGF0dHJpYnV0ZSBuYW1lIGlzIGJhY2tncm91bmQsCisvLyBmb3IgYmxvY2txdW90ZSwgcSwgZGVs
LCBpbnMsIHdoZW4gYXR0cmlidXRlIG5hbWUgaXMgY2l0ZSwKKy8vIHdlIGNhbiBjb25zaWRlciB0
aGUgYXR0cmlidXRlIHZhbHVlIGhhcyBsZWdhbCBsaW5rLgorYm9vbCBlbGVtZW50SGFzTGVnYWxM
aW5rQXR0cmlidXRlKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6UXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkVudGl0aWVzLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRW50aXRpZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNGRm
ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkVudGl0aWVzLmNw
cApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJFbnRp
dGllcy5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisvLyBOb3RlIHRoYXQgdGhpcyBmaWxlIGlz
IGFsc28gaW5jbHVkZWQgYnkgSFRNTFRva2VuaXplci5jcHAgc28gd2UgYXJlIGdldHRpbmcKKy8v
IHR3byBjb3BpZXMgb2YgdGhlIGRhdGEgaW4gbWVtb3J5LiAgV2UgY2FuIGZpeCB0aGlzIGJ5IGNo
YW5naW5nIHRoZSBzY3JpcHQKKy8vIHRoYXQgZ2VuZXJhdGVkIHRoZSBhcnJheSB0byBjcmVhdGUg
YSBzdGF0aWMgY29uc3QgdGhhdCBpcyBpdHMgbGVuZ3RoLCBidXQKKy8vIHRoaXMgaXMgbG93IHBy
aW9yaXR5IHNpbmNlIHRoZSBkYXRhIGlzIGxlc3MgdGhhbiA0Sy4KKyNpbmNsdWRlICJIVE1MRW50
aXR5TmFtZXMuYyIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmlu
Z0J1aWxkZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCisjdW5kZWYgTE9HCisKKyNp
bmNsdWRlICJXZWJTdHJpbmcuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCit2b2lkIHBvcHVsYXRlTWFwKEVudGl0aWVzTWFwVHlwZSYgbWFwLAor
ICAgICAgICAgICAgICAgICBjb25zdCBFbnRpdHkqIGVudGl0aWVzLAorICAgICAgICAgICAgICAg
ICBpbnQgZW50aXRpZXNDb3VudCwKKyAgICAgICAgICAgICAgICAgYm9vbCBzdGFuZGFyZEhUTUwp
Cit7CisgICAgQVNTRVJUKG1hcC5pc0VtcHR5KCkpOworICAgIGNvbnN0IEVudGl0eSogZW50aXR5
ID0gJmVudGl0aWVzWzBdOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZW50aXRpZXNDb3VudDsg
aSsrLCBlbnRpdHkrKykgeworICAgICAgICBpbnQgY29kZSA9IGVudGl0eS0+Y29kZTsKKyAgICAg
ICAgU3RyaW5nIG5hbWUgPSBlbnRpdHktPm5hbWU7CisgICAgICAgIC8vIEZvciBjb25zaXN0ZW5j
eSwgdXNlIGNhc2UgaW5zZW5zaXRpdmUgY29tcGFyZSBmb3IgZW50aXR5IGNvZGVzIHRoYXQgaGF2
ZSBib3RoLgorICAgICAgICBpZiAobWFwLmNvbnRhaW5zKGNvZGUpCisgICAgICAgICAgICAmJiBl
cXVhbElnbm9yaW5nQ2FzZShtYXAuZ2V0KGNvZGUpLCBuYW1lKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAvLyBEb24ndCByZWdpc3RlciAmcGVyY250OywgJm5zdXA7IGFuZCAmc3Vw
bDsuCisgICAgICAgIGlmIChzdGFuZGFyZEhUTUwKKyAgICAgICAgICAgICYmIChjb2RlID09ICcl
JyB8fCBjb2RlID09IDB4MjI4NSB8fCBjb2RlID09IDB4MDBiOSkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgbWFwLnNldChjb2RlLCBuYW1lKTsKKyAgICB9CisgICAgaWYgKHN0YW5k
YXJkSFRNTCkKKyAgICAgICAgbWFwLnNldChzdGF0aWNfY2FzdDxpbnQ+KDB4MDAyNyksIFN0cmlu
ZygiIzM5IikpOworfQorCitzdGF0aWMgY29uc3QgRW50aXR5IHhtbEJ1aWx0SW5FbnRpdHlDb2Rl
c1tdID0geworICAgIHsibHQiLCAweDAwM2N9LAorICAgIHsiZ3QiLCAweDAwM2V9LAorICAgIHsi
YW1wIiwgMHgwMDI2fSwKKyAgICB7ImFwb3MiLCAweDAwMjd9LAorICAgIHsicXVvdCIsIDB4MDAy
Mn0KK307CisKK1dlYkVudGl0aWVzOjpXZWJFbnRpdGllcyhib29sIHhtbEVudGl0aWVzKQorewor
ICAgIGlmICh4bWxFbnRpdGllcykgeworICAgICAgICBwb3B1bGF0ZU1hcChtX2VudGl0aWVzTWFw
LAorICAgICAgICAgICAgICAgICAgICB4bWxCdWlsdEluRW50aXR5Q29kZXMsCisgICAgICAgICAg
ICAgICAgICAgIHNpemVvZih4bWxCdWlsdEluRW50aXR5Q29kZXMpIC8gc2l6ZW9mKEVudGl0eSks
CisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwb3B1
bGF0ZU1hcChtX2VudGl0aWVzTWFwLAorICAgICAgICAgICAgICAgICAgICB3b3JkbGlzdCwKKyAg
ICAgICAgICAgICAgICAgICAgc2l6ZW9mKHdvcmRsaXN0KSAvIHNpemVvZihFbnRpdHkpLAorICAg
ICAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICB9Cit9CisKK1N0cmluZyBXZWJFbnRpdGllczo6
Z2V0RW50aXR5TmFtZUJ5Q29kZShpbnQgY29kZSkgY29uc3QKK3sKKyAgICBpZiAobV9lbnRpdGll
c01hcC5jb250YWlucyhjb2RlKSkKKyAgICAgICAgcmV0dXJuIG1fZW50aXRpZXNNYXAuZ2V0KGNv
ZGUpOworICAgIHJldHVybiAiIjsKK30KKworU3RyaW5nIFdlYkVudGl0aWVzOjpjb252ZXJ0RW50
aXRpZXNJblN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAoreworICAgIHVuc2lnbmVk
IGxlbiA9IHZhbHVlLmxlbmd0aCgpOworICAgIGNvbnN0IFVDaGFyKiBzdGFydFBvcyA9IHZhbHVl
LmNoYXJhY3RlcnMoKTsKKyAgICBjb25zdCBVQ2hhciogY3VyUG9zID0gc3RhcnRQb3M7CisKKyAg
ICAvLyBPcHRpbWl6YXRpb246IENyZWF0ZSBTdHJpbmdCdWlsZGVyIG9ubHkgaWYgdmFsdWUgaGFz
IGFueSBlbnRpdGllcy4KKyAgICB3aGlsZSAobGVuLS0pIHsKKyAgICAgICAgaWYgKG1fZW50aXRp
ZXNNYXAuY29udGFpbnMoKmN1clBvcykpeworICAgICAgICAgICAgbGVuKys7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjdXJQb3MrKzsKKyAgICB9CisgICAgaWYgKCFs
ZW4pCisgICAgICAgIHJldHVybiB2YWx1ZTsKKworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0Owor
ICAgIHdoaWxlIChsZW4tLSkgeworICAgICAgICBpZiAobV9lbnRpdGllc01hcC5jb250YWlucygq
Y3VyUG9zKSkgeworICAgICAgICAgICAgLy8gQXBwZW5kIGNvbnRlbnQgYmVmb3JlIGVudGl0eSBj
b2RlLgorICAgICAgICAgICAgaWYgKGN1clBvcyA+IHN0YXJ0UG9zKQorICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoU3RyaW5nKHN0YXJ0UG9zLCBjdXJQb3MgLSBzdGFydFBvcykpOworICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgiJiIpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCht
X2VudGl0aWVzTWFwLmdldCgqY3VyUG9zKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCI7
Iik7CisgICAgICAgICAgICBzdGFydFBvcyA9ICsrY3VyUG9zOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgY3VyUG9zKys7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gQXBwZW5kIHRo
ZSByZW1haW5pbmcgY29udGVudC4KKyAgICBpZiAoY3VyUG9zID4gc3RhcnRQb3MpCisgICAgICAg
IHJlc3VsdC5hcHBlbmQoU3RyaW5nKHN0YXJ0UG9zLCBjdXJQb3MgLSBzdGFydFBvcykpOworCisg
ICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRW50aXRpZXMuaCBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRW50aXRpZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi41NzZjY2RmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJF
bnRpdGllcy5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkVudGl0aWVzX2gKKyNkZWZpbmUg
V2ViRW50aXRpZXNfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisKKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgewordHlwZWRlZiBIYXNoTWFwPGludCwgV2ViQ29yZTo6U3RyaW5nPiBFbnRpdGllc01hcFR5
cGU7CisKK2NsYXNzIFdlYkVudGl0aWVzIHsKK3B1YmxpYzoKKyAgICAvLyAmYXBvczssICZwZXJj
bnQ7LCAmbnN1cDssICZzdXBsOyBhcmUgbm90IGRlZmluZWQgYnkgdGhlIEhUTUwgc3RhbmRhcmRz
LgorICAgIC8vICAtIElFIGRvZXMgbm90IHN1cHBvcnQgJmFwb3M7IGFzIGFuIEhUTUwgZW50aXR5
IChidXQgc3VwcG9ydCBpdCBhcyBhbiBYTUwKKyAgICAvLyAgICBlbnRpdHkuKQorICAgIC8vICAt
IEZpcmVmb3ggc3VwcG9ydHMgJmFwb3M7IGFzIGFuIEhUTUwgZW50aXR5LgorICAgIC8vICAtIEJv
dGggb2YgSUUgYW5kIEZpcmVmb3ggZG9uJ3Qgc3VwcG9ydCAmcGVyY250OywgJm5zdXA7IGFuZCAm
c3VwbDsuCisgICAgLy8KKyAgICAvLyBBIHdlYiBwYWdlIHNhdmVkIGJ5IENocm9taXVtIHNob3Vs
ZCBiZSBhYmxlIHRvIGJlIHJlYWQgYnkgb3RoZXIgYnJvd3NlcnMKKyAgICAvLyBzdWNoIGFzIElF
IGFuZCBGaXJlZm94LiAgQ2hyb21pdW0gc2hvdWxkIHByb2R1Y2Ugb25seSB0aGUgc3RhbmRhcmQg
ZW50aXR5CisgICAgLy8gcmVmZXJlbmNlcyB3aGljaCBvdGhlciBicm93c2VycyBjYW4gcmVjb2du
aXplLgorICAgIC8vIFNvIGlmIHN0YW5kYXJkX2h0bWxfZW50aXRpZXNfIGlzIHRydWUsIHdlIHdp
bGwgdXNlIGEgbnVtZXJpYyBjaGFyYWN0ZXIKKyAgICAvLyByZWZlcmVuY2UgZm9yICZhcG9zOywg
YW5kIGRvbid0IHVzZSBlbnRpdHkgcmVmZXJlbmNlcyBmb3IgJnBlcmNudDssICZuc3VwOworICAg
IC8vIGFuZCAmc3VwbDsgZm9yIHNlcmlhbGl6YXRpb24uCisgICAgLy8KKyAgICAvLyBJZiB4bWxF
bnRpdGllcyBpcyB0cnVlLCBXZWJFbnRpdGllcyB3aWxsIG9ubHkgY29udGFpbiBzdGFuZGFyZCBY
TUwKKyAgICAvLyBlbnRpdGllcy4KKyAgICBXZWJFbnRpdGllcyhib29sIHhtbEVudGl0aWVzKTsK
KworICAgIC8vIENoZWNrIHdoZXRoZXIgc3BlY2lmaWVkIHVuaWNvZGUgaGFzIGNvcnJlc3BvbmRp
bmcgaHRtbCBvciB4bWwgYnVpbHQtaW4KKyAgICAvLyBlbnRpdHkgbmFtZS4gSWYgeWVzLCByZXR1
cm4gdGhlIGVudGl0eSBub3RhdGlvbi4gSWYgbm90LCByZXR1cm5zIGFuCisgICAgLy8gZW1wdHkg
c3RyaW5nLiBQYXJhbWV0ZXIgaXNIVE1MIGluZGljYXRlcyBjaGVjayB0aGUgY29kZSBpbiBodG1s
IGVudGl0eQorICAgIC8vIG1hcCBvciBpbiB4bWwgZW50aXR5IG1hcC4KKyAgICBXZWJDb3JlOjpT
dHJpbmcgZ2V0RW50aXR5TmFtZUJ5Q29kZShpbnQgY29kZSkgY29uc3Q7CisKKyAgICAvLyBSZXR1
cm5zIGEgbmV3IHN0cmluZyB3aXRoIGNvcnJlc3BvbmRpbmcgZW50aXR5IG5hbWVzIHJlcGxhY2Vk
LgorICAgIFdlYkNvcmU6OlN0cmluZyBjb252ZXJ0RW50aXRpZXNJblN0cmluZyhjb25zdCBXZWJD
b3JlOjpTdHJpbmcmKSBjb25zdDsKK3ByaXZhdGU6CisgICAgLy8gQSBwb2ludGVyIHRvIGFuIGlu
dGVybmFsIG9iamVjdCB0aGF0IG1hcHMgdGhlIFVuaWNvZGUgY2hhcmFjdGVyIHRvCisgICAgLy8g
Y29ycmVzcG9uZGluZyBlbnRpdHkgbm90YXRpb24uCisgICAgRW50aXRpZXNNYXBUeXBlIG1fZW50
aXRpZXNNYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKaW5kZXggMDZkMzk0Zi4uMzcxMDU0OSAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcApAQCAtMTYxOSw2ICsxNjE5LDE5IEBAIFdlYkZyYW1l
SW1wbCogV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoRnJhbWUqIGZyYW1lKQogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxGcmFtZUxvYWRlckNsaWVudEltcGwqPihmcmFtZS0+bG9hZGVyKCktPmNsaWVu
dCgpKS0+d2ViRnJhbWUoKTsKIH0KIAorV2ViRnJhbWVJbXBsKiBXZWJGcmFtZUltcGw6OmZyb21G
cmFtZU93bmVyRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQoreworICAgIGlmICghZWxlbWVudAor
ICAgICAgICB8fCAhZWxlbWVudC0+aXNGcmFtZU93bmVyRWxlbWVudCgpCisgICAgICAgIHx8ICgh
ZWxlbWVudC0+aGFzVGFnTmFtZShXZWJDb3JlOjpIVE1MTmFtZXM6OmlmcmFtZVRhZykgCisgICAg
ICAgICAgICAmJiAhZWxlbWVudC0+aGFzVGFnTmFtZShXZWJDb3JlOjpIVE1MTmFtZXM6OmZyYW1l
VGFnKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJF
bGVtZW50KiBmcmFtZUVsZW1lbnQgPQorICAgICAgICBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1M
RnJhbWVPd25lckVsZW1lbnQqPihlbGVtZW50KTsKKyAgICByZXR1cm4gZnJvbUZyYW1lKGZyYW1l
RWxlbWVudC0+Y29udGVudEZyYW1lKCkpOworfQorICAgIAogV2ViVmlld0ltcGwqIFdlYkZyYW1l
SW1wbDo6dmlld0ltcGwoKSBjb25zdAogewogICAgIGlmICghbV9mcmFtZSkKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZyYW1lSW1wbC5oCmluZGV4IDA1MDY3NWIuLmIxNWUxYzcgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJGcmFtZUltcGwuaApAQCAtMTc0LDYgKzE3NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNyZWF0
ZUZyYW1lVmlldygpOwogCiAgICAgc3RhdGljIFdlYkZyYW1lSW1wbCogZnJvbUZyYW1lKFdlYkNv
cmU6OkZyYW1lKiBmcmFtZSk7CisgICAgc3RhdGljIFdlYkZyYW1lSW1wbCogZnJvbUZyYW1lT3du
ZXJFbGVtZW50KFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQpOwogCiAgICAgV2ViVmlld0ltcGwq
IHZpZXdJbXBsKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
UGFnZVNlcmlhbGl6ZXIuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXpl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JlN2JjMAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwCkBA
IC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUGFnZVNlcmlh
bGl6ZXIuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiS1VSTC5o
IgorCisjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplckNs
aWVudC5oIgorI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVySW1wbC5oIgorI2luY2x1ZGUgIldl
YlN0cmluZy5oIgorI2luY2x1ZGUgIldlYlZlY3Rvci5oIgorI2luY2x1ZGUgIldlYlVSTC5oIgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Jvb2wg
V2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShXZWJGcmFtZSogZnJhbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZWN1cnNpdmUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqIGNsaWVudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViVVJMPiYgbGlu
a3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdl
YlN0cmluZz4mIGxvY2FsUGF0aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgV2ViU3RyaW5nJiBsb2NhbERpcmVjdG9yeU5hbWUpCit7CisgICAgV2ViUGFnZVNlcmlh
bGl6ZXJJbXBsIHNlcmlhbGl6ZXJJbXBsKAorICAgICAgICBmcmFtZSwgcmVjdXJzaXZlLCBjbGll
bnQsIGxpbmtzLCBsb2NhbFBhdGhzLCBsb2NhbERpcmVjdG9yeU5hbWUpOworICAgIHJldHVybiBz
ZXJpYWxpemVySW1wbC5zZXJpYWxpemUoKTsKK30KKworLy8gRklYTUU6IHZlcmlmeSB1bmljb2Rl
IGNvbnZlcnNpb25zIGJlbG93IHdpdGggRGFyaW4uCisKK1dlYlN0cmluZyBXZWJQYWdlU2VyaWFs
aXplcjo6Z2VuZXJhdGVNZXRhQ2hhcnNldERlY2xhcmF0aW9uKGNvbnN0IFdlYlN0cmluZyYgY2hh
cnNldCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIjxNRVRBIGh0dHAtZXF1aXY9XCJD
b250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PSVsc1wiPiIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQudXRmOCgpLmRhdGEoKSk7Cit9CisKK1dlYlN0
cmluZyBXZWJQYWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVNYXJrT2ZUaGVXZWJEZWNsYXJhdGlvbihj
b25zdCBXZWJVUkwmIHVybCkKK3sKKyAgICBLVVJMIGt1cmwgPSB1cmw7CisgICAgcmV0dXJuIFN0
cmluZzo6Zm9ybWF0KCJcbjwhLS0gc2F2ZWQgZnJvbSB1cmw9KCUwNGQpJXMgLS0+XG4iLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBrdXJsLnN0cmluZygpLmxlbmd0aCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBrdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworfQorCitXZWJT
dHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlQmFzZVRhZ0RlY2xhcmF0aW9uKGNvbnN0
IFdlYlN0cmluZyYgYmFzZVRhcmdldCkKK3sKKyAgICBTdHJpbmcgdGFyZ2V0RGVjbGFyYXRpb247
CisgICAgaWYgKCFiYXNlVGFyZ2V0LmlzRW1wdHkoKSkKKyAgICAgICAgdGFyZ2V0RGVjbGFyYXRp
b24gPSBTdHJpbmc6OmZvcm1hdCgiIHRhcmdldD1cIiVsc1wiIiwgYmFzZVRhcmdldC51dGY4KCku
ZGF0YSgpKTsKKyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIjxCQVNFIGhyZWY9XCIuXCIlbHM+
IiwgdGFyZ2V0RGVjbGFyYXRpb24udXRmOCgpLmRhdGEoKSk7Cit9CisKK30gIC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6
ZXJJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDliNDExCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuY3BwCkBA
IC0wLDAgKzEsNTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gSG93IHdlIGhhbmRsZSB0aGUgYmFzZSB0YWcgYmV0dGVyLgorLy8g
Q3VycmVudCBzdGF0dXM6CisvLyBBdCBub3cgdGhlIG5vcm1hbCB3YXkgd2UgdXNlIHRvIGhhbmRs
aW5nIGJhc2UgdGFnIGlzCisvLyBhKSBGb3IgdGhvc2UgbGlua3Mgd2hpY2ggaGF2ZSBjb3JyZXNw
b25kaW5nIGxvY2FsIHNhdmVkIGZpbGVzLCBzdWNoIGFzCisvLyBzYXZhYmxlIENTUywgSmF2YVNj
cmlwdCBmaWxlcywgdGhleSB3aWxsIGJlIHdyaXR0ZW4gdG8gcmVsYXRpdmUgVVJMcyB3aGljaAor
Ly8gcG9pbnQgdG8gbG9jYWwgc2F2ZWQgZmlsZS4gV2h5IHRob3NlIGxpbmtzIGNhbiBub3QgYmUg
cmVzb2x2ZWQgYXMgYWJzb2x1dGUKKy8vIGZpbGUgVVJMcywgYmVjYXVzZSBpZiB0aGV5IGFyZSBy
ZXNvbHZlZCBhcyBhYnNvbHV0ZSBVUkxzLCBhZnRlciBtb3ZpbmcgdGhlCisvLyBmaWxlIGxvY2F0
aW9uIGZyb20gb25lIGRpcmVjdG9yeSB0byBhbm90aGVyIGRpcmVjdG9yeSwgdGhlIGZpbGUgVVJM
cyB3aWxsCisvLyBiZSBkZWFkIGxpbmtzLgorLy8gYikgRm9yIHRob3NlIGxpbmtzIHdoaWNoIGhh
dmUgbm90IGNvcnJlc3BvbmRpbmcgbG9jYWwgc2F2ZWQgZmlsZXMsIHN1Y2ggYXMKKy8vIGxpbmtz
IGluIEEsIEFSRUEgdGFncywgdGhleSB3aWxsIGJlIHJlc29sdmVkIGFzIGFic29sdXRlIFVSTHMu
CisvLyBjKSBXZSBjb21tZW50IGFsbCBiYXNlIHRhZ3Mgd2hlbiBzZXJpYWx6aW5nIERPTSBmb3Ig
dGhlIHBhZ2UuCisvLyBGaXJlRm94IGFsc28gdXNlcyBhYm92ZSB3YXkgdG8gaGFuZGxlIGJhc2Ug
dGFnLgorLy8KKy8vIFByb2JsZW06CisvLyBUaGlzIHdheSBjYW4gbm90IGhhbmRsZSB0aGUgZm9s
bG93aW5nIHNpdHVhdGlvbjoKKy8vIHRoZSBiYXNlIHRhZyBpcyB3cml0dGVuIGJ5IEphdmFTY3Jp
cHQuCisvLyBGb3IgZXhhbXBsZS4gVGhlIHBhZ2UgInd3dy55YWhvby5jb20iIHVzZQorLy8gImRv
Y3VtZW50LndyaXRlKCc8YmFzZSBocmVmPSJodHRwOi8vd3d3LnlhaG9vLmNvbS8iLi4uJyk7IiB0
byBzZXR1cCBiYXNlIFVSTAorLy8gb2YgcGFnZSB3aGVuIGxvYWRpbmcgcGFnZS4gU28gd2hlbiBz
YXZpbmcgcGFnZSBhcyBjb21wbGV0ZWQtSFRNTCwgd2UgYXNzdW1lCisvLyB0aGF0IHdlIHNhdmUg
Ind3dy55YWhvby5jb20iIHRvICJjOlx5YWhvby5odG0iLiBBZnRlciB0aGVuIHdlIGxvYWQgdGhl
IHNhdmVkCisvLyBjb21wbGV0ZWQtSFRNTCBwYWdlLCB0aGVuIHRoZSBKYXZhU2NyaXB0IHdpbGwg
aW5zZXJ0IGEgYmFzZSB0YWcKKy8vIDxiYXNlIGhyZWY9Imh0dHA6Ly93d3cueWFob28uY29tLyIu
Li4+IHRvIERPTSwgc28gYWxsIFVSTHMgd2hpY2ggcG9pbnQgdG8KKy8vIGxvY2FsIHNhdmVkIHJl
c291cmNlIGZpbGVzIHdpbGwgYmUgcmVzb2x2ZWQgYXMKKy8vICJodHRwOi8vd3d3LnlhaG9vLmNv
bS95YWhvb19maWxlcy8uLi4iLCB3aGljaCB3aWxsIGNhdXNlIGFsbCBzYXZlZCAgcmVzb3VyY2UK
Ky8vIGZpbGVzIGNhbiBub3QgYmUgbG9hZGVkIGNvcnJlY3RseS4gQWxzbyB0aGUgcGFnZSB3aWxs
IGJlIHJlbmRlcmVkIHVnbHkgc2luY2UKKy8vIGFsbCBzYXZlZCBzdWItcmVzb3VyY2UgZmlsZXMg
KHN1Y2ggYXMgQ1NTLCBKYXZhU2NyaXB0IGZpbGVzKSBhbmQgc3ViLWZyYW1lCisvLyBmaWxlcyBj
YW4gbm90IGJlIGZldGNoZWQuCisvLyBOb3cgRmlyZUZveCwgSUUgYW5kIFdlYktpdCBiYXNlZCBC
cm93c2VyIGFsbCBoYXZlIHRoaXMgcHJvYmxlbS4KKy8vCisvLyBTb2x1dGlvbjoKKy8vIE15IHNv
bHV0aW9uIGlzIHRoYXQgd2UgY29tbWVudCBvbGQgYmFzZSB0YWcgYW5kIHdyaXRlIG5ldyBiYXNl
IHRhZzoKKy8vIDxiYXNlIGhyZWY9Ii4iIC4uLj4gYWZ0ZXIgdGhlIHByZXZpb3VzIGNvbW1lbnRl
ZCBiYXNlIHRhZy4gSW4gV2ViS2l0LCBpdAorLy8gYWx3YXlzIHVzZXMgdGhlIGxhdGVzdCAiaHJl
ZiIgYXR0cmlidXRlIG9mIGJhc2UgdGFnIHRvIHNldCBkb2N1bWVudCdzIGJhc2UKKy8vIFVSTC4g
QmFzZWQgb24gdGhpcyBiZWhhdmlvciwgd2hlbiB3ZSBlbmNvdW50ZXIgYSBiYXNlIHRhZywgd2Ug
Y29tbWVudCBpdCBhbmQKKy8vIHdyaXRlIGEgbmV3IGJhc2UgdGFnIDxiYXNlIGhyZWY9Ii4iPiBh
ZnRlciB0aGUgcHJldmlvdXMgY29tbWVudGVkIGJhc2UgdGFnLgorLy8gVGhlIG5ldyBhZGRlZCBi
YXNlIHRhZyBjYW4gaGVscCBlbmdpbmUgdG8gbG9jYXRlIGNvcnJlY3QgYmFzZSBVUkwgZm9yCisv
LyBjb3JyZWN0bHkgbG9hZGluZyBsb2NhbCBzYXZlZCByZXNvdXJjZSBmaWxlcy4gQWxzbyBJIHRo
aW5rIHdlIG5lZWQgdG8gaW5oZXJpdAorLy8gdGhlIGJhc2UgdGFyZ2V0IHZhbHVlIGZyb20gZG9j
dW1lbnQgb2JqZWN0IHdoZW4gYXBwZW5kaW5nIG5ldyBiYXNlIHRhZy4KKy8vIElmIHRoZXJlIGFy
ZSBtdWx0aXBsZSBiYXNlIHRhZ3MgaW4gb3JpZ2luYWwgZG9jdW1lbnQsIHdlIHdpbGwgY29tbWVu
dCBhbGwgb2xkCisvLyBiYXNlIHRhZ3MgYW5kIGFwcGVuZCBuZXcgYmFzZSB0YWcgYWZ0ZXIgZWFj
aCBvbGQgYmFzZSB0YWcgYmVjYXVzZSB3ZSBkbyBub3QKKy8vIGtub3cgdGhvc2Ugb2xkIGJhc2Ug
dGFncyBhcmUgb3JpZ2luYWwgY29udGVudCBvciBhZGRlZCBieSBKYXZhU2NyaXB0LiBJZgorLy8g
dGhleSBhcmUgYWRkZWQgYnkgSmF2YVNjcmlwdCwgaXQgbWVhbnMgd2hlbiBsb2FkaW5nIHNhdmVk
IHBhZ2UsIHRoZSBzY3JpcHQocykKKy8vIHdpbGwgc3RpbGwgaW5zZXJ0IGJhc2UgdGFnKHMpIHRv
IERPTSwgc28gdGhlIG5ldyBhZGRlZCBiYXNlIHRhZyhzKSBjYW4KKy8vIG92ZXJyaWRlIHRoZSBp
bmNvcnJlY3QgYmFzZSBVUkwgYW5kIG1ha2Ugc3VyZSB3ZSBhbHdheSBsb2FkIGNvcnJlY3QgbG9j
YWwKKy8vIHNhdmVkIHJlc291cmNlIGZpbGVzLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIkRvY3VtZW50VHlwZS5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkhUTUxBbGxDb2xsZWN0aW9uLmgiCisjaW5jbHVk
ZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJIVE1MTWV0YUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJL
VVJMLmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisK
KyNpbmNsdWRlICJET01VdGlsaXRpZXNQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVJbXBs
LmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCisjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gTWF4aW11bSBs
ZW5ndGggb2YgZGF0YSBidWZmZXIgd2hpY2ggaXMgdXNlZCB0byB0ZW1wb3Jhcnkgc2F2ZSBnZW5l
cmF0ZWQKKy8vIGh0bWwgY29udGVudCBkYXRhLgorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRhdGFC
dWZmZXJDYXBhY2l0eSA9IDY1NTM2OworCitzdGF0aWMgY29uc3QgV2ViRW50aXRpZXMgaHRtbEVu
dGl0aWVzKGZhbHNlKTsKK3N0YXRpYyBjb25zdCBXZWJFbnRpdGllcyB4bWxFbnRpdGllcyh0cnVl
KTsKKworLy8gU2VyaWFsaXplRG9tUGFyYW0gQ29uc3RydWN0b3IuCitXZWJQYWdlU2VyaWFsaXpl
ckltcGw6OlNlcmlhbGl6ZURvbVBhcmFtOjpTZXJpYWxpemVEb21QYXJhbShjb25zdCBLVVJMJiBj
dXJyZW50RnJhbWVVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXh0RW5jb2RpbmcmIHRleHRFbmNvZGluZywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IERvY3VtZW50KiBkb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpcmVjdG9yeU5hbWUpCisgICAgOiBj
dXJyZW50RnJhbWVVUkwoY3VycmVudEZyYW1lVVJMKQorICAgICwgdGV4dEVuY29kaW5nKHRleHRF
bmNvZGluZykKKyAgICAsIGRvYyhkb2MpCisgICAgLCBkaXJlY3RvcnlOYW1lKGRpcmVjdG9yeU5h
bWUpCisgICAgLCBoYXNEb2N0eXBlKGZhbHNlKQorICAgICwgaGFzQ2hlY2tlZE1ldGEoZmFsc2Up
CisgICAgLCBza2lwTWV0YUVsZW1lbnQoMCkKKyAgICAsIGlzSW5TY3JpcHRPclN0eWxlVGFnKGZh
bHNlKQorICAgICwgaGFzRG9jRGVjbGFyYXRpb24oZmFsc2UpCit7CisgICAgLy8gQ2FjaGUgdGhl
IHZhbHVlIHNpbmNlIHdlIGNoZWNrIGl0IGxvdHMgb2YgdGltZXMuCisgICBpc0hUTUxEb2N1bWVu
dCA9IGRvYy0+aXNIVE1MRG9jdW1lbnQoKTsKK30KKworU3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVy
SW1wbDo6cHJlQWN0aW9uQmVmb3JlU2VyaWFsaXplT3BlblRhZygKKyAgICBjb25zdCBFbGVtZW50
KiBlbGVtZW50LCBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0sIGJvb2wqIG5lZWRTa2lwKQorewor
ICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworCisgICAgKm5lZWRTa2lwID0gZmFsc2U7CisgICAg
aWYgKHBhcmFtLT5pc0hUTUxEb2N1bWVudCkgeworICAgICAgICAvLyBTa2lwIHRoZSBvcGVuIHRh
ZyBvZiBvcmlnaW5hbCBNRVRBIHRhZyB3aGljaCBkZWNsYXJlIGNoYXJzZXQgc2luY2Ugd2UKKyAg
ICAgICAgLy8gaGF2ZSBvdmVycmlkZWQgdGhlIE1FVEEgd2hpY2ggaGF2ZSBjb3JyZWN0IGNoYXJz
ZXQgZGVjbGFyYXRpb24gYWZ0ZXIKKyAgICAgICAgLy8gc2VyaWFsaXppbmcgb3BlbiB0YWcgb2Yg
SEVBRCBlbGVtZW50LgorICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
Om1ldGFUYWcpKSB7CisgICAgICAgICAgICBjb25zdCBIVE1MTWV0YUVsZW1lbnQqIG1ldGEgPSBz
dGF0aWNfY2FzdDxjb25zdCBIVE1MTWV0YUVsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAg
IC8vIENoZWNrIHdoZXRoZXIgdGhlIE1FVEEgdGFnIGhhcyBkZWNsYXJlZCBjaGFyc2V0IG9yIG5v
dC4KKyAgICAgICAgICAgIFN0cmluZyBlcXVpdiA9IG1ldGEtPmh0dHBFcXVpdigpOworICAgICAg
ICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAiY29udGVudC10eXBlIikpIHsKKyAg
ICAgICAgICAgICAgICBTdHJpbmcgY29udGVudCA9IG1ldGEtPmNvbnRlbnQoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoY29udGVudC5sZW5ndGgoKSAmJiBjb250ZW50LmNvbnRhaW5zKCJjaGFyc2V0
IiwgZmFsc2UpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgTUVUQSB0YWcgZGVjbGFy
ZWQgY2hhcnNldCwgd2UgbmVlZCB0byBza2lwIGl0IHdoZW4KKyAgICAgICAgICAgICAgICAgICAg
Ly8gc2VyaWFsaXppbmcgRE9NLgorICAgICAgICAgICAgICAgICAgICBwYXJhbS0+c2tpcE1ldGFF
bGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgICAgICAgICAgICAgKm5lZWRTa2lwID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZWxl
bWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKSB7CisgICAgICAgICAgICAvLyBD
aGVjayBzb21ldGhpbmcgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIG9wZW4gdGFnIG9mIEhFQUQgZWxl
bWVudC4KKyAgICAgICAgICAgIC8vIEZpcnN0IHdlIGFkZCBkb2MgdHlwZSBkZWNsYXJhdGlvbiBp
ZiBvcmlnaW5hbCBkb2MgaGFzIGl0LgorICAgICAgICAgICAgaWYgKCFwYXJhbS0+aGFzRG9jdHlw
ZSkgeworICAgICAgICAgICAgICAgIHBhcmFtLT5oYXNEb2N0eXBlID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKGNyZWF0ZU1hcmt1cChwYXJhbS0+ZG9jLT5kb2N0eXBlKCkp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIE1PVFcgZGVjbGFyYXRpb24g
YmVmb3JlIGh0bWwgdGFnLgorICAgICAgICAgICAgLy8gU2VlIGh0dHA6Ly9tc2RuMi5taWNyb3Nv
ZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1Mzc2MjgoVlMuODUpLmFzcHguCisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZU1hcmtPZlRoZVdlYkRlY2xh
cmF0aW9uKHBhcmFtLT5jdXJyZW50RnJhbWVVUkwpKTsKKyAgICAgICAgfSBlbHNlIGlmIChlbGVt
ZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmFzZVRhZykpIHsKKyAgICAgICAgICAgIC8vIENv
bW1lbnQgdGhlIEJBU0UgdGFnIHdoZW4gc2VyaWFsaXppbmcgZG9tLgorICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgiPCEtLSIpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
V3JpdGUgWE1MIGRlY2xhcmF0aW9uLgorICAgICAgICBpZiAoIXBhcmFtLT5oYXNEb2NEZWNsYXJh
dGlvbikgeworICAgICAgICAgICAgcGFyYW0tPmhhc0RvY0RlY2xhcmF0aW9uID0gdHJ1ZTsKKyAg
ICAgICAgICAgIC8vIEdldCBlbmNvZGluZyBpbmZvLgorICAgICAgICAgICAgU3RyaW5nIHhtbEVu
Y29kaW5nID0gcGFyYW0tPmRvYy0+eG1sRW5jb2RpbmcoKTsKKyAgICAgICAgICAgIGlmICh4bWxF
bmNvZGluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgeG1sRW5jb2RpbmcgPSBwYXJhbS0+
ZG9jLT5mcmFtZSgpLT5sb2FkZXIoKS0+ZW5jb2RpbmcoKTsKKyAgICAgICAgICAgIGlmICh4bWxF
bmNvZGluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgeG1sRW5jb2RpbmcgPSBVVEY4RW5j
b2RpbmcoKS5uYW1lKCk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCI8P3htbCB2ZXJzaW9u
PVwiIik7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHBhcmFtLT5kb2MtPnhtbFZlcnNpb24o
KSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJcIiBlbmNvZGluZz1cIiIpOworICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCh4bWxFbmNvZGluZyk7CisgICAgICAgICAgICBpZiAocGFyYW0t
PmRvYy0+eG1sU3RhbmRhbG9uZSgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIlwi
IHN0YW5kYWxvbmU9XCJ5ZXMiKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIlwiPz5cbiIp
OworICAgICAgICB9CisgICAgICAgIC8vIEFkZCBkb2MgdHlwZSBkZWNsYXJhdGlvbiBpZiBvcmln
aW5hbCBkb2MgaGFzIGl0LgorICAgICAgICBpZiAoIXBhcmFtLT5oYXNEb2N0eXBlKSB7CisgICAg
ICAgICAgICBwYXJhbS0+aGFzRG9jdHlwZSA9IHRydWU7CisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKGNyZWF0ZU1hcmt1cChwYXJhbS0+ZG9jLT5kb2N0eXBlKCkpKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBXZWJQYWdlU2Vy
aWFsaXplckltcGw6OnBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZU9wZW5UYWcoCisgICAgY29uc3Qg
RWxlbWVudCogZWxlbWVudCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQoreworICAgIFN0cmlu
Z0J1aWxkZXIgcmVzdWx0OworCisgICAgcGFyYW0tPmhhc0FkZGVkQ29udGVudHNCZWZvcmVFbmQg
PSBmYWxzZTsKKyAgICBpZiAoIXBhcmFtLT5pc0hUTUxEb2N1bWVudCkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdC50b1N0cmluZygpOworICAgIC8vIENoZWNrIGFmdGVyIHByb2Nlc3NpbmcgdGhlIG9w
ZW4gdGFnIG9mIEhFQUQgZWxlbWVudAorICAgIGlmICghcGFyYW0tPmhhc0NoZWNrZWRNZXRhICYm
CisgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSkgeworICAg
ICAgICBwYXJhbS0+aGFzQ2hlY2tlZE1ldGEgPSB0cnVlOworICAgICAgICAvLyBDaGVjayBtZXRh
IGVsZW1lbnQuIFdlYktpdCBvbmx5IHByZS1wYXJzZSB0aGUgZmlyc3QgNTEyIGJ5dGVzCisgICAg
ICAgIC8vIG9mIHRoZSBkb2N1bWVudC4gSWYgdGhlIHdob2xlIDxIRUFEPiBpcyBsYXJnZXIgYW5k
IG1ldGEgaXMgdGhlCisgICAgICAgIC8vIGVuZCBvZiBoZWFkIHBhcnQsIHRoZW4gdGhpcyBraW5k
IG9mIHBhZ2VzIGFyZW4ndCBkZWNvZGVkIGNvcnJlY3RseQorICAgICAgICAvLyBiZWNhdXNlIG9m
IHRoaXMgaXNzdWUuIFNvIHdoZW4gd2Ugc2VyaWFsaXplIHRoZSBET00sIHdlIG5lZWQgdG8KKyAg
ICAgICAgLy8gbWFrZSBzdXJlIHRoZSBtZXRhIHdpbGwgaW4gZmlyc3QgY2hpbGQgb2YgaGVhZCB0
YWcuCisgICAgICAgIC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjYyMS4KKyAgICAgICAgLy8gRmlyc3Qgd2UgZ2VuZXJhdGUgbmV3IGNvbnRlbnQgZm9yIHdy
aXRpbmcgY29ycmVjdCBNRVRBIGVsZW1lbnQuCisgICAgICAgIHJlc3VsdC5hcHBlbmQoV2ViUGFn
ZVNlcmlhbGl6ZXI6OmdlbmVyYXRlTWV0YUNoYXJzZXREZWNsYXJhdGlvbigKKyAgICAgICAgICAg
IFN0cmluZyhwYXJhbS0+dGV4dEVuY29kaW5nLm5hbWUoKSkpKTsKKworICAgICAgICBwYXJhbS0+
aGFzQWRkZWRDb250ZW50c0JlZm9yZUVuZCA9IHRydWU7CisgICAgICAgIC8vIFdpbGwgc2VhcmNo
IGVhY2ggTUVUQSB3aGljaCBoYXMgY2hhcnNldCBkZWNsYXJhdGlvbiwgYW5kIHNraXAgdGhlbSBh
bGwKKyAgICAgICAgLy8gaW4gUHJlQWN0aW9uQmVmb3JlU2VyaWFsaXplT3BlblRhZy4KKyAgICB9
IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHRUYWcpIHx8Cisg
ICAgICAgICAgICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKSB7
CisgICAgICAgIHBhcmFtLT5pc0luU2NyaXB0T3JTdHlsZVRhZyA9IHRydWU7CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworfQorCitTdHJpbmcgV2ViUGFnZVNlcmlhbGl6
ZXJJbXBsOjpwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVFbmRUYWcoCisgICAgY29uc3QgRWxlbWVu
dCogZWxlbWVudCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLCBib29sKiBuZWVkU2tpcCkKK3sK
KyAgICBTdHJpbmcgcmVzdWx0OworCisgICAgKm5lZWRTa2lwID0gZmFsc2U7CisgICAgaWYgKCFw
YXJhbS0+aXNIVE1MRG9jdW1lbnQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgLy8gU2tp
cCB0aGUgZW5kIHRhZyBvZiBvcmlnaW5hbCBNRVRBIHRhZyB3aGljaCBkZWNsYXJlIGNoYXJzZXQu
CisgICAgLy8gTmVlZCBub3QgdG8gY2hlY2sgd2hldGhlciBpdCdzIE1FVEEgdGFnIHNpbmNlIHdl
IGd1YXJhbnRlZQorICAgIC8vIHNraXBNZXRhRWxlbWVudCBpcyBkZWZpbml0ZWx5IE1FVEEgdGFn
IGlmIGl0J3Mgbm90IE5VTEwuCisgICAgaWYgKHBhcmFtLT5za2lwTWV0YUVsZW1lbnQgPT0gZWxl
bWVudCkgeworICAgICAgICAqbmVlZFNraXAgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoZWxlbWVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykgfHwKKyAgICAgICAgICAgICAgIGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZVRhZykpIHsKKyAgICAgICAgQVNTRVJU
KHBhcmFtLT5pc0luU2NyaXB0T3JTdHlsZVRhZyk7CisgICAgICAgIHBhcmFtLT5pc0luU2NyaXB0
T3JTdHlsZVRhZyA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8v
IEFmdGVyIHdlIGZpbmlzaCBzZXJpYWxpemluZyBlbmQgdGFnIG9mIGEgZWxlbWVudCwgd2UgZ2l2
ZSB0aGUgdGFyZ2V0CisvLyBlbGVtZW50IGEgY2hhbmNlIHRvIGRvIHNvbWUgcG9zdCB3b3JrIHRv
IGFkZCBzb21lIGFkZGl0aW9uYWwgZGF0YS4KK1N0cmluZyBXZWJQYWdlU2VyaWFsaXplckltcGw6
OnBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZUVuZFRhZygKKyAgICBjb25zdCBFbGVtZW50KiBlbGVt
ZW50LCBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pCit7CisgICAgU3RyaW5nQnVpbGRlciByZXN1
bHQ7CisKKyAgICBpZiAoIXBhcmFtLT5pc0hUTUxEb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC50b1N0cmluZygpOworICAgIC8vIENvbW1lbnQgdGhlIEJBU0UgdGFnIHdoZW4gc2VyaWFs
aXppbmcgRE9NLgorICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmFzZVRh
ZykpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiLS0+Iik7CisgICAgICAgIC8vIEFwcGVuZCBh
IG5ldyBiYXNlIHRhZyBkZWNsYXJhdGlvbi4KKyAgICAgICAgcmVzdWx0LmFwcGVuZChXZWJQYWdl
U2VyaWFsaXplcjo6Z2VuZXJhdGVCYXNlVGFnRGVjbGFyYXRpb24oCisgICAgICAgICAgICBwYXJh
bS0+ZG9jLT5iYXNlVGFyZ2V0KCkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0LnRvU3Ry
aW5nKCk7Cit9CisKK3ZvaWQgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpzYXZlSFRNTENvbnRlbnRU
b0J1ZmZlcigKKyAgICBjb25zdCBTdHJpbmcmIHJlc3VsdCwgU2VyaWFsaXplRG9tUGFyYW0qIHBh
cmFtKQoreworICAgIGlmICghcmVzdWx0Lmxlbmd0aCgpKQorICAgICAgICByZXR1cm47CisgICAg
Ly8gQ29udmVydCB0aGUgdW5pY29kZSBjb250ZW50IHRvIHRhcmdldCBlbmNvZGluZworICAgIENT
dHJpbmcgZW5jb2RpbmdSZXN1bHQgPSBwYXJhbS0+dGV4dEVuY29kaW5nLmVuY29kZSgKKyAgICAg
ICAgcmVzdWx0LmNoYXJhY3RlcnMoKSwgcmVzdWx0Lmxlbmd0aCgpLCBFbnRpdGllc0ZvclVuZW5j
b2RhYmxlcyk7CisKKyAgICAvLyBpZiB0aGUgZGF0YSBidWZmZXIgd2lsbCBiZSBmdWxsLCB0aGVu
IHNlbmQgaXQgb3V0IGZpcnN0LgorICAgIGlmIChlbmNvZGluZ1Jlc3VsdC5sZW5ndGgoKSArIG1f
ZGF0YUJ1ZmZlci5sZW5ndGgoKSA+IGRhdGFCdWZmZXJDYXBhY2l0eSkgeworICAgICAgICAvLyBT
ZW5kIGRhdGEgdG8gZGVsZWdhdGUsIHRlbGwgaXQgbm93IHdlIGFyZSBzZXJpYWxpemluZyBjdXJy
ZW50IGZyYW1lLgorICAgICAgICBtX2NsaWVudC0+ZGlkU2VyaWFsaXplRGF0YUZvckZyYW1lKHBh
cmFtLT5jdXJyZW50RnJhbWVVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9kYXRhQnVmZmVyLnRvU3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQ6OkN1cnJlbnRGcmFt
ZUlzTm90RmluaXNoZWQpOworICAgICAgICBtX2RhdGFCdWZmZXIuY2xlYXIoKTsKKyAgICB9CisK
KyAgICAvLyBBcHBlbmQgcmVzdWx0IHRvIGRhdGEgYnVmZmVyLgorICAgIG1fZGF0YUJ1ZmZlci5h
cHBlbmQoU3RyaW5nOjpmcm9tVVRGOChlbmNvZGluZ1Jlc3VsdC5kYXRhKCkpKTsKK30KKwordm9p
ZCBXZWJQYWdlU2VyaWFsaXplckltcGw6Om9wZW5UYWdUb1N0cmluZyhjb25zdCBFbGVtZW50KiBl
bGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJp
YWxpemVEb21QYXJhbSogcGFyYW0pCit7CisgICAgLy8gRklYTUU6IHVzZSBTdHJpbmdCdWlsZGVy
IGluc3RlYWQgb2YgU3RyaW5nLgorICAgIGJvb2wgbmVlZFNraXA7CisgICAgLy8gRG8gcHJlIGFj
dGlvbiBmb3Igb3BlbiB0YWcuCisgICAgU3RyaW5nIHJlc3VsdCA9IHByZUFjdGlvbkJlZm9yZVNl
cmlhbGl6ZU9wZW5UYWcoZWxlbWVudCwgcGFyYW0sICZuZWVkU2tpcCk7CisgICAgaWYgKG5lZWRT
a2lwKQorICAgICAgICByZXR1cm47CisgICAgLy8gQWRkIG9wZW4gdGFnCisgICAgcmVzdWx0ICs9
ICI8IiArIGVsZW1lbnQtPm5vZGVOYW1lKCk7CisgICAgLy8gR28gdGhyb3VnaCBhbGwgYXR0cmli
dXRlcyBhbmQgc2VyaWFsaXplIHRoZW0uCisgICAgY29uc3QgTmFtZWROb2RlTWFwICphdHRyTWFw
ID0gZWxlbWVudC0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICBpZiAoYXR0ck1hcCkgeworICAgICAg
ICB1bnNpZ25lZCBudW1BdHRycyA9IGF0dHJNYXAtPmxlbmd0aCgpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtQXR0cnM7IGkrKykgeworICAgICAgICAgICAgcmVzdWx0ICs9
ICIgIjsKKyAgICAgICAgICAgIC8vIEFkZCBhdHRyaWJ1dGUgcGFpcgorICAgICAgICAgICAgY29u
c3QgQXR0cmlidXRlICphdHRyaWJ1dGUgPSBhdHRyTWFwLT5hdHRyaWJ1dGVJdGVtKGkpOworICAg
ICAgICAgICAgcmVzdWx0ICs9IGF0dHJpYnV0ZS0+bmFtZSgpLnRvU3RyaW5nKCk7CisgICAgICAg
ICAgICByZXN1bHQgKz0gIj1cIiI7CisgICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZS0+dmFsdWUo
KS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGF0dHJWYWx1ZSA9
IGF0dHJpYnV0ZS0+dmFsdWUoKTsKKworICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIg
d2UgbmVlZCB0byByZXBsYWNlIHNvbWUgcmVzb3VyY2UgbGlua3MKKyAgICAgICAgICAgICAgICAv
LyB3aXRoIGxvY2FsIHJlc291cmNlIHBhdGhzLgorICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lID0gYXR0cmlidXRlLT5uYW1lKCk7CisgICAgICAgICAgICAgICAg
aWYgKGVsZW1lbnRIYXNMZWdhbExpbmtBdHRyaWJ1dGUoZWxlbWVudCwgYXR0ck5hbWUpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIEZvciBsaW5rcyBzdGFydCB3aXRoICJqYXZhc2NyaXB0OiIs
IHdlIGRvIG5vdCBjaGFuZ2UgaXQuCisgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyVmFsdWUu
c3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCArPSBhdHRyVmFsdWU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgYWJzb2x1dGUgbGluaworICAgICAgICAg
ICAgICAgICAgICAgICAgU3RyaW5nIGNvbXBsZXRlVVJMID0gcGFyYW0tPmRvYy0+Y29tcGxldGVV
UkwoYXR0clZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIg
d2UgaGF2ZSBsb2NhbCBmaWxlcyBmb3IgdGhvc2UgbGluay4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2xvY2FsTGlua3MuY29udGFpbnMoY29tcGxldGVVUkwpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSBtX2xvY2FsTGlua3MuZ2V0KGNvbXBsZXRlVVJMKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgKz0gY29tcGxldGVVUkw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW0tPmlzSFRNTERv
Y3VtZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGh0bWxFbnRpdGllcy5j
b252ZXJ0RW50aXRpZXNJblN0cmluZyhhdHRyVmFsdWUpOworICAgICAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0geG1sRW50aXRpZXMuY29udmVy
dEVudGl0aWVzSW5TdHJpbmcoYXR0clZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXN1bHQgKz0gIlwiIjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIERvIHBvc3QgYWN0aW9uIGZvciBvcGVuIHRhZy4KKyAgICBTdHJpbmcgYWRkZWRDb250
ZW50cyA9IHBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZU9wZW5UYWcoZWxlbWVudCwgcGFyYW0pOwor
ICAgIC8vIENvbXBsZXRlIHRoZSBvcGVuIHRhZyBmb3IgZWxlbWVudCB3aGVuIGl0IGhhcyBjaGls
ZC9jaGlsZHJlbi4KKyAgICBpZiAoZWxlbWVudC0+aGFzQ2hpbGROb2RlcygpIHx8IHBhcmFtLT5o
YXNBZGRlZENvbnRlbnRzQmVmb3JlRW5kKQorICAgICAgICByZXN1bHQgKz0gIj4iOworICAgIC8v
IEFwcGVuZCB0aGUgYWRkZWQgY29udGVudHMgZ2VuZXJhdGUgaW4gIHBvc3QgYWN0aW9uIG9mIG9w
ZW4gdGFnLgorICAgIHJlc3VsdCArPSBhZGRlZENvbnRlbnRzOworICAgIC8vIFNhdmUgdGhlIHJl
c3VsdCB0byBkYXRhIGJ1ZmZlci4KKyAgICBzYXZlSFRNTENvbnRlbnRUb0J1ZmZlcihyZXN1bHQs
IHBhcmFtKTsKK30KKworLy8gU2VyaWFsaXplIGVuZCB0YWcgb2YgYW4gc3BlY2lmaWVkIGVsZW1l
bnQuCit2b2lkIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6ZW5kVGFnVG9TdHJpbmcoY29uc3QgRWxl
bWVudCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pCit7CisgICAgYm9vbCBuZWVkU2tpcDsKKyAgICAv
LyBEbyBwcmUgYWN0aW9uIGZvciBlbmQgdGFnLgorICAgIFN0cmluZyByZXN1bHQgPSBwcmVBY3Rp
b25CZWZvcmVTZXJpYWxpemVFbmRUYWcoZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRTa2lwKTsKKyAgICBpZiAobmVlZFNr
aXApCisgICAgICAgIHJldHVybjsKKyAgICAvLyBXcml0ZSBlbmQgdGFnIHdoZW4gZWxlbWVudCBo
YXMgY2hpbGQvY2hpbGRyZW4uCisgICAgaWYgKGVsZW1lbnQtPmhhc0NoaWxkTm9kZXMoKSB8fCBw
YXJhbS0+aGFzQWRkZWRDb250ZW50c0JlZm9yZUVuZCkgeworICAgICAgICByZXN1bHQgKz0gIjwv
IjsKKyAgICAgICAgcmVzdWx0ICs9IGVsZW1lbnQtPm5vZGVOYW1lKCk7CisgICAgICAgIHJlc3Vs
dCArPSAiPiI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB3ZSBoYXZl
IHRvIHdyaXRlIGVuZCB0YWcgZm9yIGVtcHR5IGVsZW1lbnQuCisgICAgICAgIGlmIChwYXJhbS0+
aXNIVE1MRG9jdW1lbnQpIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSAiPiI7CisgICAgICAgICAg
ICBjb25zdCBIVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPQorICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChodG1sRWxl
bWVudC0+ZW5kVGFnUmVxdWlyZW1lbnQoKSA9PSBUYWdTdGF0dXNSZXF1aXJlZCkgeworICAgICAg
ICAgICAgICAgIC8vIFdlIG5lZWQgdG8gd3JpdGUgZW5kIHRhZyB3aGVuIGl0IGlzIHJlcXVpcmVk
LgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiPC8iOworICAgICAgICAgICAgICAgIHJlc3Vs
dCArPSBlbGVtZW50LT5ub2RlTmFtZSgpOworICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiPiI7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGb3IgeG1s
IGJhc2UgZG9jdW1lbnQuCisgICAgICAgICAgICByZXN1bHQgKz0gIiAvPiI7CisgICAgICAgIH0K
KyAgICB9CisgICAgLy8gRG8gcG9zdCBhY3Rpb24gZm9yIGVuZCB0YWcuCisgICAgcmVzdWx0ICs9
IHBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZUVuZFRhZyhlbGVtZW50LCBwYXJhbSk7CisgICAgLy8g
U2F2ZSB0aGUgcmVzdWx0IHRvIGRhdGEgYnVmZmVyLgorICAgIHNhdmVIVE1MQ29udGVudFRvQnVm
ZmVyKHJlc3VsdCwgcGFyYW0pOworfQorCit2b2lkIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6YnVp
bGRDb250ZW50Rm9yTm9kZShjb25zdCBOb2RlKiBub2RlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQorewor
ICAgIHN3aXRjaCAobm9kZS0+bm9kZVR5cGUoKSkgeworICAgICAgICBjYXNlIE5vZGU6OkVMRU1F
TlRfTk9ERTogeworICAgICAgICAgICAgLy8gUHJvY2VzcyBvcGVuIHRhZyBvZiBlbGVtZW50Lgor
ICAgICAgICAgICAgb3BlblRhZ1RvU3RyaW5nKHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQqPihu
b2RlKSwgcGFyYW0pOworICAgICAgICAgICAgLy8gV2FsayB0aHJvdWdoIHRoZSBjaGlsZHJlbiBu
b2RlcyBhbmQgcHJvY2VzcyBpdC4KKyAgICAgICAgICAgIGZvciAoY29uc3QgTm9kZSAqY2hpbGQg
PSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkICE9IE5VTEw7CisgICAgICAgICAgICAgICAgIGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAgICAgICAgYnVpbGRDb250ZW50
Rm9yTm9kZShjaGlsZCwgcGFyYW0pOworICAgICAgICAgICAgLy8gUHJvY2VzcyBlbmQgdGFnIG9m
IGVsZW1lbnQuCisgICAgICAgICAgICBlbmRUYWdUb1N0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBF
bGVtZW50Kj4obm9kZSksIHBhcmFtKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOiB7CisgICAgICAgICAgICBzYXZlSFRNTENvbnRl
bnRUb0J1ZmZlcihjcmVhdGVNYXJrdXAobm9kZSksIHBhcmFtKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgTm9kZTo6QVRUUklCVVRFX05PREU6CisgICAgICAg
IGNhc2UgTm9kZTo6RE9DVU1FTlRfTk9ERToKKyAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9G
UkFHTUVOVF9OT0RFOiB7CisgICAgICAgICAgICAvLyBTaG91bGQgbm90IGV4aXN0LgorICAgICAg
ICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgICAgICAvLyBEb2N1bWVudCB0eXBlIG5vZGUgY2FuIGJlIGluIERPTT8KKyAgICAgICAgY2Fz
ZSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREU6CisgICAgICAgICAgICBwYXJhbS0+aGFzRG9jdHlw
ZSA9IHRydWU7CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIC8vIEZvciBvdGhlciB0
eXBlIG5vZGUsIGNhbGwgZGVmYXVsdCBhY3Rpb24uCisgICAgICAgICAgICBzYXZlSFRNTENvbnRl
bnRUb0J1ZmZlcihjcmVhdGVNYXJrdXAobm9kZSksIHBhcmFtKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorfQorCitXZWJQYWdlU2VyaWFsaXplckltcGw6OldlYlBhZ2VT
ZXJpYWxpemVySW1wbChXZWJGcmFtZSogZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHJlY3Vyc2l2ZVNlcmlhbGl6YXRpb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQYWdlU2VyaWFsaXplckNs
aWVudCogY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgV2ViVmVjdG9yPFdlYlVSTD4mIGxpbmtzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGxvY2Fs
UGF0aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBXZWJTdHJpbmcmIGxvY2FsRGlyZWN0b3J5TmFtZSkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkK
KyAgICAsIG1fcmVjdXJzaXZlU2VyaWFsaXphdGlvbihyZWN1cnNpdmVTZXJpYWxpemF0aW9uKQor
ICAgICwgbV9mcmFtZXNDb2xsZWN0ZWQoZmFsc2UpCisgICAgLCBtX2xvY2FsRGlyZWN0b3J5TmFt
ZShsb2NhbERpcmVjdG9yeU5hbWUpCit7CisgICAgLy8gTXVzdCBzcGVjaWZ5IGF2YWlsYWJsZSB3
ZWJmcmFtZS4KKyAgICBBU1NFUlQoZnJhbWUpOworICAgIG1fc3BlY2lmaWVkV2ViRnJhbWVJbXBs
ID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVJbXBsKj4oZnJhbWUpOworICAgIC8vIE1ha2Ugc3VyZSB3
ZSBoYXZlIG5vdC1OVUxMIGRlbGVnYXRlLgorICAgIEFTU0VSVChjbGllbnQpOworICAgIC8vIEJ1
aWxkIGxvY2FsIHJlc291cmNlcyBtYXAuCisgICAgQVNTRVJUKGxpbmtzLnNpemUoKSA9PSBsb2Nh
bFBhdGhzLnNpemUoKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxpbnQ+
KGxpbmtzLnNpemUoKSk7IGkrKykgeworICAgICAgICAvLyBGSVhNRTogaG93IHRvIGNvbnZlcnQg
ZnJvbSBzcGVjIChXZWJDU3RyaW5nIHRvIFN0cmluZyk/CisgICAgICAgIEtVUkwgdXJsID0gbGlu
a3NbaV07CisgICAgICAgIEFTU0VSVCghbV9sb2NhbExpbmtzLmNvbnRhaW5zKHVybC5zdHJpbmco
KSkpOworICAgICAgICBtX2xvY2FsTGlua3Muc2V0KHVybC5zdHJpbmcoKSwgbG9jYWxQYXRoc1tp
XSk7CisgICAgfQorCisgICAgQVNTRVJUKCFtX2RhdGFCdWZmZXIubGVuZ3RoKCkpOworfQorCit2
b2lkIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6Y29sbGVjdFRhcmdldEZyYW1lcygpCit7CisgICAg
QVNTRVJUKCFtX2ZyYW1lc0NvbGxlY3RlZCk7CisgICAgbV9mcmFtZXNDb2xsZWN0ZWQgPSB0cnVl
OworCisgICAgLy8gRmlyc3QsIHByb2Nlc3MgbWFpbiBmcmFtZS4KKyAgICBtX2ZyYW1lcy5hcHBl
bmQobV9zcGVjaWZpZWRXZWJGcmFtZUltcGwpOworICAgIC8vIFJldHVybiBub3cgaWYgdXNlciBv
bmx5IG5lZWRzIHRvIHNlcmlhbGl6ZSBzcGVjaWZpZWQgZnJhbWUsIG5vdCBpbmNsdWRpbmcKKyAg
ICAvLyBhbGwgc3ViLWZyYW1lcy4KKyAgICBpZiAoIW1fcmVjdXJzaXZlU2VyaWFsaXphdGlvbikK
KyAgICAgICAgcmV0dXJuOworICAgIC8vIENvbGxlY3QgYWxsIGZyYW1lcyBpbnNpZGUgdGhlIHNw
ZWNpZmllZCBmcmFtZS4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PGludD4o
bV9mcmFtZXMuc2l6ZSgpKTsgKytpKSB7CisgICAgICAgIFdlYkZyYW1lSW1wbCogY3VycmVudEZy
YW1lID0gbV9mcmFtZXNbaV07CisgICAgICAgIC8vIEdldCBjdXJyZW50IHVzaW5nIGRvY3VtZW50
LgorICAgICAgICBEb2N1bWVudCogY3VycmVudERvYyA9IGN1cnJlbnRGcmFtZS0+ZnJhbWUoKS0+
ZG9jdW1lbnQoKTsKKyAgICAgICAgLy8gR28gdGhyb3VnaCBzdWItZnJhbWVzLgorICAgICAgICBS
ZWZQdHI8SFRNTEFsbENvbGxlY3Rpb24+IGFsbCA9IGN1cnJlbnREb2MtPmFsbCgpOworICAgICAg
ICBmb3IgKE5vZGUqIG5vZGUgPSBhbGwtPmZpcnN0SXRlbSgpOyBub2RlICE9IE5VTEw7IG5vZGUg
PSBhbGwtPm5leHRJdGVtKCkpIHsKKyAgICAgICAgICAgIGlmICghbm9kZS0+aXNIVE1MRWxlbWVu
dCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgRWxlbWVudCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgICAgIFdlYkZyYW1l
SW1wbCogd2ViRnJhbWUgPQorICAgICAgICAgICAgICAgIFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1l
T3duZXJFbGVtZW50KGVsZW1lbnQpOworICAgICAgICAgICAgaWYgKHdlYkZyYW1lKQorICAgICAg
ICAgICAgICAgIG1fZnJhbWVzLmFwcGVuZCh3ZWJGcmFtZSk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK2Jvb2wgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpzZXJpYWxpemUoKQoreworICAgIC8vIENv
bGxlY3QgdGFyZ2V0IGZyYW1lcy4KKyAgICBpZiAoIW1fZnJhbWVzQ29sbGVjdGVkKQorICAgICAg
ICBjb2xsZWN0VGFyZ2V0RnJhbWVzKCk7CisgICAgYm9vbCBkaWRTZXJpYWxpemF0aW9uID0gZmFs
c2U7CisgICAgLy8gR2V0IEtVUkwgZm9yIG1haW4gZnJhbWUuCisgICAgS1VSTCBtYWluUGFnZVVS
TCA9IG1fc3BlY2lmaWVkV2ViRnJhbWVJbXBsLT5mcmFtZSgpLT5sb2FkZXIoKS0+dXJsKCk7CisK
KyAgICAvLyBHbyB0aHJvdWdoIGFsbCBmcmFtZXMgZm9yIHNlcmlhbGl6aW5nIERPTSBmb3Igd2hv
bGUgcGFnZSwgaW5jbHVkZQorICAgIC8vIHN1Yi1mcmFtZXMuCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBzdGF0aWNfY2FzdDxpbnQ+KG1fZnJhbWVzLnNpemUoKSk7ICsraSkgeworICAgICAgICAv
LyBHZXQgY3VycmVudCBzZXJpYWxpemluZyBmcmFtZS4KKyAgICAgICAgV2ViRnJhbWVJbXBsKiBj
dXJyZW50RnJhbWUgPSBtX2ZyYW1lc1tpXTsKKyAgICAgICAgLy8gR2V0IGN1cnJlbnQgdXNpbmcg
ZG9jdW1lbnQuCisgICAgICAgIERvY3VtZW50KiBjdXJyZW50RG9jID0gY3VycmVudEZyYW1lLT5m
cmFtZSgpLT5kb2N1bWVudCgpOworICAgICAgICAvLyBHZXQgY3VycmVudCBmcmFtZSdzIFVSTC4K
KyAgICAgICAgY29uc3QgS1VSTCYgY3VycmVudEZyYW1lVVJMID0gY3VycmVudEZyYW1lLT5mcmFt
ZSgpLT5sb2FkZXIoKS0+dXJsKCk7CisKKyAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB3ZSBoYXZl
IGRvbmUgdGhpcyBkb2N1bWVudC4KKyAgICAgICAgaWYgKG1fbG9jYWxMaW5rcy5jb250YWlucyhj
dXJyZW50RnJhbWVVUkwuc3RyaW5nKCkpKSB7CisgICAgICAgICAgICAvLyBBIG5ldyBkb2N1bWVu
dCwgd2Ugd2lsbCBzZXJpYWxpemUgaXQuCisgICAgICAgICAgICBkaWRTZXJpYWxpemF0aW9uID0g
dHJ1ZTsKKyAgICAgICAgICAgIC8vIEdldCB0YXJnZXQgZW5jb2RpbmcgZm9yIGN1cnJlbnQgZG9j
dW1lbnQuCisgICAgICAgICAgICBTdHJpbmcgZW5jb2RpbmcgPSBjdXJyZW50RnJhbWUtPmZyYW1l
KCktPmxvYWRlcigpLT5lbmNvZGluZygpOworICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSB0ZXh0
IGVuY29kaW5nIG9iamVjdCB3aXRoIHRhcmdldCBlbmNvZGluZy4KKyAgICAgICAgICAgIFRleHRF
bmNvZGluZyB0ZXh0RW5jb2RpbmcoZW5jb2RpbmcpOworICAgICAgICAgICAgLy8gQ29uc3RydWN0
IHNlcmlhbGl6ZSBwYXJhbWV0ZXIgZm9yIGxhdGUgcHJvY2Vzc2luZyBkb2N1bWVudC4KKyAgICAg
ICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtIHBhcmFtKGN1cnJlbnRGcmFtZVVSTCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLmxlbmd0aCgpID8gdGV4dEVuY29k
aW5nIDogVVRGOEVuY29kaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50RG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVu
dEZyYW1lVVJMID09IG1haW5QYWdlVVJMID8gbV9sb2NhbERpcmVjdG9yeU5hbWUgOiAiIik7CisK
KyAgICAgICAgICAgIC8vIFByb2Nlc3MgY3VycmVudCBkb2N1bWVudC4KKyAgICAgICAgICAgIEVs
ZW1lbnQqIHJvb3RFbGVtZW50ID0gY3VycmVudERvYy0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAg
ICAgICAgICBpZiAocm9vdEVsZW1lbnQpCisgICAgICAgICAgICAgICAgYnVpbGRDb250ZW50Rm9y
Tm9kZShyb290RWxlbWVudCwgJnBhcmFtKTsKKworICAgICAgICAgICAgLy8gU2luayB0aGUgcmVt
YWluZGVyIGRhdGEgYW5kIGZpbmlzaCBzZXJpYWxpemluZyBjdXJyZW50IGZyYW1lLgorICAgICAg
ICAgICAgbV9jbGllbnQtPmRpZFNlcmlhbGl6ZURhdGFGb3JGcmFtZShjdXJyZW50RnJhbWVVUkws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YUJ1
ZmZlci50b1N0cmluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudDo6Q3VycmVudEZyYW1lSXNGaW5pc2hlZCk7
CisgICAgICAgICAgICAvLyBDbGVhciB0aGUgYnVmZmVyLgorICAgICAgICAgICAgbV9kYXRhQnVm
ZmVyLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBXZSBoYXZlIGRvbmUgY2Fs
bCBmcmFtZXMsIHNvIHdlIHNlbmQgbWVzc2FnZSB0byBlbWJlZGRlciB0byB0ZWxsIGl0IHRoYXQK
KyAgICAvLyBmcmFtZXMgYXJlIGZpbmlzaGVkIHNlcmlhbGl6aW5nLgorICAgIEFTU0VSVCghbV9k
YXRhQnVmZmVyLmxlbmd0aCgpKTsKKyAgICBtX2NsaWVudC0+ZGlkU2VyaWFsaXplRGF0YUZvckZy
YW1lKEtVUkwoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0
YUJ1ZmZlci50b1N0cmluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQ6OkFsbEZyYW1lc0FyZUZpbmlzaGVkKTsKKyAgICBy
ZXR1cm4gZGlkU2VyaWFsaXphdGlvbjsKK30KKworfSAgLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuaCBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYjZhN2I1NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmgKQEAgLTAsMCArMSwxODkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFdlYlBhZ2VTZXJpYWxpemVySW1wbF9oCisjZGVmaW5lIFdlYlBhZ2VTZXJpYWxpemVySW1w
bF9oCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgor
I2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisKKyNp
bmNsdWRlICJXZWJFbnRpdGllcy5oIgorI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyLmgiCisj
aW5jbHVkZSAiV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcu
aCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRG9jdW1lbnQ7
CitjbGFzcyBFbGVtZW50OworY2xhc3MgTm9kZTsKK2NsYXNzIFN0cmluZzsKK2NsYXNzIFRleHRF
bmNvZGluZzsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJGcmFtZUltcGw7CisK
Ky8vIEdldCBodG1sIGRhdGEgYnkgc2VyaWFsaXppbmcgYWxsIGZyYW1lcyBvZiBjdXJyZW50IHBh
Z2Ugd2l0aCBsaXN0cworLy8gd2hpY2ggY29udGFpbiBhbGwgcmVzb3VyY2UgbGlua3MgdGhhdCBo
YXZlIGxvY2FsIGNvcHkuCisvLyBjb250YWluIGFsbCBzYXZlZCBhdXhpbGlhcnkgZmlsZXMgaW5j
bHVkZWQgYWxsIHN1YiBmcmFtZXMgYW5kIHJlc291cmNlcy4KKy8vIFRoaXMgZnVuY3Rpb24gd2ls
bCBmaW5kIG91dCBhbGwgZnJhbWVzIGFuZCBzZXJpYWxpemUgdGhlbSB0byBIVE1MIGRhdGEuCisv
LyBXZSBoYXZlIGEgZGF0YSBidWZmZXIgdG8gdGVtcG9yYXJ5IHNhdmluZyBnZW5lcmF0ZWQgaHRt
bCBkYXRhLiBXZSB3aWxsCisvLyBzZXF1ZW50aWFsbHkgY2FsbCBXZWJWaWV3RGVsZWdhdGU6OlNl
bmRTZXJpYWxpemVkSHRtbERhdGEgb25jZSB0aGUgZGF0YQorLy8gYnVmZmVyIGlzIGZ1bGwuIFNl
ZSBjb21tZW50cyBvZiBXZWJWaWV3RGVsZWdhdGU6OlNlbmRTZXJpYWxpemVkSHRtbERhdGEKKy8v
IGZvciBnZXR0aW5nIG1vcmUgaW5mb3JtYXRpb24uCitjbGFzcyBXZWJQYWdlU2VyaWFsaXplcklt
cGwgeworcHVibGljOgorICAgIC8vIERvIHNlcmlhbGl6YXRpb24gYWN0aW9uLiBSZXR1cm4gZmFs
c2UgbWVhbnMgbm8gYXZhaWxhYmxlIGZyYW1lIGhhcyBiZWVuCisgICAgLy8gc2VyaWFsaXplZCwg
b3RoZXJ3aXNlIHJldHVybiB0cnVlLgorICAgIGJvb2wgc2VyaWFsaXplKCk7CisgICAgLy8gVGhl
IHBhcmFtZXRlciBzcGVjaWZpZXMgd2hpY2ggZnJhbWUgbmVlZCB0byBiZSBzZXJpYWxpemVkLgor
ICAgIC8vIFRoZSBwYXJhbWV0ZXIgcmVjdXJzaXZlX3NlcmlhbGl6YXRpb24gc3BlY2lmaWVzIHdo
ZXRoZXIgd2UgbmVlZCB0bworICAgIC8vIHNlcmlhbGl6ZSBhbGwgc3ViIGZyYW1lcyBvZiB0aGUg
c3BlY2lmaWVkIGZyYW1lIG9yIG5vdC4KKyAgICAvLyBUaGUgcGFyYW1ldGVyIGRlbGVnYXRlIHNw
ZWNpZmllcyB0aGUgcG9pbnRlciBvZiBpbnRlcmZhY2UKKyAgICAvLyBEb21TZXJpYWxpemVyRGVs
ZWdhdGUgcHJvdmlkZSBzaW5rIGludGVyZmFjZSB3aGljaCBjYW4gcmVjZWl2ZSB0aGUKKyAgICAv
LyBpbmRpdmlkdWFsIGNodW5rcyBvZiBkYXRhIHRvIGJlIHNhdmVkLgorICAgIC8vIFRoZSBwYXJh
bWV0ZXIgbGlua3MgY29udGFpbiBvcmlnaW5hbCBVUkxzIG9mIGFsbCBzYXZlZCBsaW5rcy4KKyAg
ICAvLyBUaGUgcGFyYW1ldGVyIGxvY2FsX3BhdGhzIGNvbnRhaW4gY29ycmVzcG9uZGluZyBsb2Nh
bCBmaWxlIHBhdGhzIG9mIGFsbAorICAgIC8vIHNhdmVkIGxpbmtzLCB3aGljaCBtYXRjaGVkIHdp
dGggdmVjdG9yOmxpbmtzIG9uZSBieSBvbmUuCisgICAgLy8gVGhlIHBhcmFtZXRlciBsb2NhbF9k
aXJlY3RvcnlfbmFtZSBpcyByZWxhdGl2ZSBwYXRoIG9mIGRpcmVjdG9yeSB3aGljaAorICAgIC8v
IGNvbnRhaW4gYWxsIHNhdmVkIGF1eGlsaWFyeSBmaWxlcyBpbmNsdWRlZCBhbGwgc3ViIGZyYW1l
cyBhbmQgcmVzb3VyY2VzLgorICAgIFdlYlBhZ2VTZXJpYWxpemVySW1wbChXZWJGcmFtZSogZnJh
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudCogY2xpZW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViVVJMPiYgbGlua3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBsb2NhbFBh
dGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGxvY2FsRGly
ZWN0b3J5TmFtZSk7CisKK3ByaXZhdGU6CisgICAgLy8gU3BlY2lmaWVkIGZyYW1lIHdoaWNoIG5l
ZWQgdG8gYmUgc2VyaWFsaXplZDsKKyAgICBXZWJGcmFtZUltcGwqIG1fc3BlY2lmaWVkV2ViRnJh
bWVJbXBsOworICAgIC8vIFBvaW50ZXIgb2YgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQKKyAgICBX
ZWJQYWdlU2VyaWFsaXplckNsaWVudCogbV9jbGllbnQ7CisgICAgLy8gVGhpcyBoYXNoIG1hcCBp
cyB1c2VkIHRvIG1hcCByZXNvdXJjZSBVUkwgb2Ygb3JpZ2luYWwgbGluayB0byBpdHMgbG9jYWwK
KyAgICAvLyBmaWxlIHBhdGguCisgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OlN0cmluZywg
V2ViQ29yZTo6U3RyaW5nPiBMaW5rTG9jYWxQYXRoTWFwOworICAgIC8vIGxvY2FsX2xpbmtzXyBp
bmNsdWRlIGFsbCBwYWlyIG9mIGxvY2FsIHJlc291cmNlIHBhdGggYW5kIGNvcnJlc3BvbmRpbmcK
KyAgICAvLyBvcmlnaW5hbCBsaW5rLgorICAgIExpbmtMb2NhbFBhdGhNYXAgbV9sb2NhbExpbmtz
OworICAgIC8vIERhdGEgYnVmZmVyIGZvciBzYXZpbmcgcmVzdWx0IG9mIHNlcmlhbGl6ZWQgRE9N
IGRhdGEuCisgICAgV2ViQ29yZTo6U3RyaW5nQnVpbGRlciBtX2RhdGFCdWZmZXI7CisgICAgLy8g
UGFzc2luZyB0cnVlIHRvIHJlY3Vyc2l2ZV9zZXJpYWxpemF0aW9uXyBpbmRpY2F0ZXMgd2Ugd2ls
bCBzZXJpYWxpemUgbm90CisgICAgLy8gb25seSB0aGUgc3BlY2lmaWVkIGZyYW1lIGJ1dCBhbHNv
IGFsbCBzdWItZnJhbWVzIGluIHRoZSBzcGVjaWZpYyBmcmFtZS4KKyAgICAvLyBPdGhlcndpc2Ug
d2Ugb25seSBzZXJpYWxpemUgdGhlIHNwZWNpZmllZCBmcmFtZSBleGNsdWRlZCBhbGwgc3ViLWZy
YW1lcy4KKyAgICBib29sIG1fcmVjdXJzaXZlU2VyaWFsaXphdGlvbjsKKyAgICAvLyBGbGFnIGlu
ZGljYXRlcyB3aGV0aGVyIHdlIGhhdmUgY29sbGVjdGVkIGFsbCBmcmFtZXMgd2hpY2ggbmVlZCB0
byBiZQorICAgIC8vIHNlcmlhbGl6ZWQgb3Igbm90OworICAgIGJvb2wgbV9mcmFtZXNDb2xsZWN0
ZWQ7CisgICAgLy8gTG9jYWwgZGlyZWN0b3J5IG5hbWUgb2YgYWxsIGxvY2FsIHJlc291cmNlIGZp
bGVzLgorICAgIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbV9sb2NhbERpcmVjdG9yeU5hbWU7Cisg
ICAgLy8gVmVjdG9yIGZvciBzYXZpbmcgYWxsIGZyYW1lcyB3aGljaCBuZWVkIHRvIGJlIHNlcmlh
bGl6ZWQuCisgICAgVmVjdG9yPFdlYkZyYW1lSW1wbCo+IG1fZnJhbWVzOworCisgICAgc3RydWN0
IFNlcmlhbGl6ZURvbVBhcmFtIHsKKyAgICAgICAgLy8gRnJhbWUgVVJMIG9mIGN1cnJlbnQgcHJv
Y2Vzc2luZyBkb2N1bWVudCBwcmVzZW50ZWQgYnkgR1VSTAorICAgICAgICBjb25zdCBXZWJDb3Jl
OjpLVVJMJiBjdXJyZW50RnJhbWVVUkw7CisgICAgICAgIC8vIEN1cnJlbnQgdXNpbmcgdGV4dCBl
bmNvZGluZyBvYmplY3QuCisgICAgICAgIGNvbnN0IFdlYkNvcmU6OlRleHRFbmNvZGluZyYgdGV4
dEVuY29kaW5nOworCisgICAgICAgIC8vIERvY3VtZW50IG9iamVjdCBvZiBjdXJyZW50IGZyYW1l
LgorICAgICAgICBXZWJDb3JlOjpEb2N1bWVudCogZG9jOworICAgICAgICAvLyBMb2NhbCBkaXJl
Y3RvcnkgbmFtZSBvZiBhbGwgbG9jYWwgcmVzb3VyY2UgZmlsZXMuCisgICAgICAgIGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYgZGlyZWN0b3J5TmFtZTsKKworICAgICAgICAvLyBGbGFnIGluZGljYXRl
cyBjdXJyZW50IGRvYyBpcyBodG1sIGRvY3VtZW50IG9yIG5vdC4gSXQncyBhIGNhY2hlIHZhbHVl
CisgICAgICAgIC8vIG9mIERvY3VtZW50LmlzSFRNTERvY3VtZW50KCkuCisgICAgICAgIGJvb2wg
aXNIVE1MRG9jdW1lbnQ7CisgICAgICAgIC8vIEZsYWcgd2hpY2ggaW5kaWNhdGUgd2hldGhlciB3
ZSBoYXZlIG1ldCBkb2N1bWVudCB0eXBlIGRlY2xhcmF0aW9uLgorICAgICAgICBib29sIGhhc0Rv
Y3R5cGU7CisgICAgICAgIC8vIEZsYWcgd2hpY2ggaW5kaWNhdGUgd2hldGhlciB3aWxsIHByb2Nl
c3MgbWV0YSBpc3N1ZS4KKyAgICAgICAgYm9vbCBoYXNDaGVja2VkTWV0YTsKKyAgICAgICAgLy8g
VGhpcyBtZXRhIGVsZW1lbnQgbmVlZCB0byBiZSBza2lwcGVkIHdoZW4gc2VyaWFsaXppbmcgRE9N
LgorICAgICAgICBjb25zdCBXZWJDb3JlOjpFbGVtZW50KiBza2lwTWV0YUVsZW1lbnQ7CisgICAg
ICAgIC8vIEZsYWcgaW5kaWNhdGVzIHdlIGFyZSBpbiBzY3JpcHQgb3Igc3R5bGUgdGFnLgorICAg
ICAgICBib29sIGlzSW5TY3JpcHRPclN0eWxlVGFnOworICAgICAgICAvLyBGbGFnIGluZGljYXRl
cyB3aGV0aGVyIHdlIGhhdmUgd3JpdHRlbiB4bWwgZG9jdW1lbnQgZGVjbGFyYXRpb24uCisgICAg
ICAgIC8vIEl0IGlzIG9ubHkgdXNlZCBpbiB4bWwgZG9jdW1lbnQKKyAgICAgICAgYm9vbCBoYXNE
b2NEZWNsYXJhdGlvbjsKKyAgICAgICAgLy8gRmxhZyBpbmRpY2F0ZXMgd2hldGhlciB3ZSBoYXZl
IGFkZGVkIGFkZGl0aW9uYWwgY29udGVudHMgYmVmb3JlIGVuZCB0YWcuCisgICAgICAgIC8vIFRo
aXMgZmxhZyB3aWxsIGJlIHJlLWFzc2lnbmVkIGluIGVhY2ggY2FsbCBvZiBmdW5jdGlvbgorICAg
ICAgICAvLyBQb3N0QWN0aW9uQWZ0ZXJTZXJpYWxpemVPcGVuVGFnIGFuZCBpdCBjb3VsZCBiZSBj
aGFuZ2VkIGluIGZ1bmN0aW9uCisgICAgICAgIC8vIFByZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZUVu
ZFRhZyBpZiB0aGUgZnVuY3Rpb24gYWRkcyBuZXcgY29udGVudHMgaW50bworICAgICAgICAvLyBz
ZXJpYWxpemF0aW9uIHN0cmVhbS4KKyAgICAgICAgYm9vbCBoYXNBZGRlZENvbnRlbnRzQmVmb3Jl
RW5kOworCisgICAgICAgIC8vIENvbnN0cnVjdG9yLgorICAgICAgICBTZXJpYWxpemVEb21QYXJh
bShjb25zdCBXZWJDb3JlOjpLVVJMJiBjdXJyZW50RnJhbWVVUkwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFdlYkNvcmU6OlRleHRFbmNvZGluZyYgdGV4dEVuY29kaW5nLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpEb2N1bWVudCogZG9jLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGRpcmVjdG9yeU5hbWUpOwor
ICAgIH07CisKKyAgICAvLyBDb2xsZWN0IGFsbCB0YXJnZXQgZnJhbWVzIHdoaWNoIG5lZWQgdG8g
YmUgc2VyaWFsaXplZC4KKyAgICB2b2lkIGNvbGxlY3RUYXJnZXRGcmFtZXMoKTsKKyAgICAvLyBC
ZWZvcmUgd2UgYmVnaW4gc2VyaWFsaXppbmcgb3BlbiB0YWcgb2YgYSBlbGVtZW50LCB3ZSBnaXZl
IHRoZSB0YXJnZXQKKyAgICAvLyBlbGVtZW50IGEgY2hhbmNlIHRvIGRvIHNvbWUgd29yayBwcmlv
ciB0byBhZGQgc29tZSBhZGRpdGlvbmFsIGRhdGEuCisgICAgV2ViQ29yZTo6U3RyaW5nIHByZUFj
dGlvbkJlZm9yZVNlcmlhbGl6ZU9wZW5UYWcoY29uc3QgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
ZXJpYWxpemVEb21QYXJhbSogcGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCogbmVlZFNraXApOworICAgIC8vIEFmdGVyIHdlIGZp
bmlzaCBzZXJpYWxpemluZyBvcGVuIHRhZyBvZiBhIGVsZW1lbnQsIHdlIGdpdmUgdGhlIHRhcmdl
dAorICAgIC8vIGVsZW1lbnQgYSBjaGFuY2UgdG8gZG8gc29tZSBwb3N0IHdvcmsgdG8gYWRkIHNv
bWUgYWRkaXRpb25hbCBkYXRhLgorICAgIFdlYkNvcmU6OlN0cmluZyBwb3N0QWN0aW9uQWZ0ZXJT
ZXJpYWxpemVPcGVuVGFnKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9t
UGFyYW0qIHBhcmFtKTsKKyAgICAvLyBCZWZvcmUgd2UgYmVnaW4gc2VyaWFsaXppbmcgZW5kIHRh
ZyBvZiBhIGVsZW1lbnQsIHdlIGdpdmUgdGhlIHRhcmdldAorICAgIC8vIGVsZW1lbnQgYSBjaGFu
Y2UgdG8gZG8gc29tZSB3b3JrIHByaW9yIHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgZGF0YS4KKyAg
ICBXZWJDb3JlOjpTdHJpbmcgcHJlQWN0aW9uQmVmb3JlU2VyaWFsaXplRW5kVGFnKGNvbnN0IFdl
YkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiBuZWVkU2tpcCk7
CisgICAgLy8gQWZ0ZXIgd2UgZmluaXNoIHNlcmlhbGl6aW5nIGVuZCB0YWcgb2YgYSBlbGVtZW50
LCB3ZSBnaXZlIHRoZSB0YXJnZXQKKyAgICAvLyBlbGVtZW50IGEgY2hhbmNlIHRvIGRvIHNvbWUg
cG9zdCB3b3JrIHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgZGF0YS4KKyAgICBXZWJDb3JlOjpTdHJp
bmcgcG9zdEFjdGlvbkFmdGVyU2VyaWFsaXplRW5kVGFnKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQq
IGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pOworICAgIC8vIFNhdmUgZ2VuZXJhdGVkIGh0
bWwgY29udGVudCB0byBkYXRhIGJ1ZmZlci4KKyAgICB2b2lkIHNhdmVIVE1MQ29udGVudFRvQnVm
ZmVyKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKTsKKyAgICAvLyBTZXJpYWxpemUg
b3BlbiB0YWcgb2YgYW4gc3BlY2lmaWVkIGVsZW1lbnQuCisgICAgdm9pZCBvcGVuVGFnVG9TdHJp
bmcoY29uc3QgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pOworICAgIC8vIFNlcmlhbGl6ZSBlbmQgdGFn
IG9mIGFuIHNwZWNpZmllZCBlbGVtZW50LgorICAgIHZvaWQgZW5kVGFnVG9TdHJpbmcoY29uc3Qg
V2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlh
bGl6ZURvbVBhcmFtKiBwYXJhbSk7CisgICAgLy8gQnVpbGQgY29udGVudCBmb3IgYSBzcGVjaWZp
ZWQgbm9kZQorICAgIHZvaWQgYnVpbGRDb250ZW50Rm9yTm9kZShjb25zdCBXZWJDb3JlOjpOb2Rl
KiBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSog
cGFyYW0pOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43859</attachid>
            <date>2009-11-25 10:56:52 -0800</date>
            <delta_ts>2009-11-30 09:18:30 -0800</delta_ts>
            <desc>Patch 3</desc>
            <filename>wk31737.diff</filename>
            <type>text/plain</type>
            <size>92238</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzdhZmRlMi4uYzY3ZmE2OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAwOS0xMS0yNSAgWWFhciBTY2huaXRt
YW4gIDx5YWFyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDaHJvbWl1bSBXZWJLaXQgQVBJIFdlYlBhZ2VTZXJpYWxpemVyLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTczNwor
CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0cmluZ0J1aWxkZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0J1
aWxkZXI6Omxlbmd0aCk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmg6
CisKIDIwMDktMTEtMjMgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBOaWtvbGFzIFppbW1lcm1hbm4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3Ry
aW5nQnVpbGRlci5jcHAKaW5kZXggYzIxZTM2Ni4uM2UzNDk4MSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9TdHJpbmdCdWlsZGVyLmNwcApAQCAtOTUsNCArOTUsMTcgQEAgU3RyaW5nIFN0cmluZ0J1
aWxkZXI6OnRvU3RyaW5nKCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit2b2lkIFN0
cmluZ0J1aWxkZXI6OmNsZWFyKCkKK3sKKyAgICBtX3RvdGFsTGVuZ3RoID0gVUlOVF9NQVg7Cisg
ICAgbV9zdHJpbmdzLmNsZWFyKCk7Cit9CisKK3Vuc2lnbmVkIFN0cmluZ0J1aWxkZXI6Omxlbmd0
aCgpIGNvbnN0Cit7CisgICAgaWYgKG1fdG90YWxMZW5ndGggPT0gVUlOVF9NQVgpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiBtX3RvdGFsTGVuZ3RoOworfQorCiB9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1N0cmluZ0J1aWxkZXIuaAppbmRleCA4ZDc2YjljLi43ZjcyZmJmIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5oCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmgKQEAgLTQyLDYgKzQyLDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmKTsKICAgICAgICAgdm9p
ZCBhcHBlbmQoVUNoYXIpOwogICAgICAgICB2b2lkIGFwcGVuZChjaGFyKTsKKyAgICAgICAgCisg
ICAgICAgIHZvaWQgY2xlYXIoKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAK
ICAgICAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGJkYTdl
N2MuLjk1ZDcxNWUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDA5LTExLTI1ICBZ
YWFyIFNjaG5pdG1hbiAgPHlhYXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENocm9taXVtIFdlYktpdCBBUEkgV2ViUGFnZVNl
cmlhbGl6ZXIuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTMxNzM3CisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJQ
YWdlU2VyaWFsaXplci5oOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvV2ViUGFnZVNlcmlhbGl6
ZXJDbGllbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVyQ2xp
ZW50OjopOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplckNsaWVudDo6V2ViUGFn
ZVNlcmlhbGl6ZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplckNs
aWVudDo6fldlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KToKKyAgICAgICAgKiBzcmMvRE9NVXRpbGl0
aWVzUHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OmVsZW1lbnRIYXNMZWdhbExpbmtBdHRy
aWJ1dGUpOgorICAgICAgICAqIHNyYy9ET01VdGlsaXRpZXNQcml2YXRlLmg6CisgICAgICAgICog
c3JjL1dlYkVudGl0aWVzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OnBvcHVsYXRlTWFw
KToKKyAgICAgICAgKFdlYktpdDo6KToKKyAgICAgICAgKFdlYktpdDo6V2ViRW50aXRpZXM6Oldl
YkVudGl0aWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViRW50aXRpZXM6OmVudGl0eU5hbWVCeUNv
ZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJFbnRpdGllczo6Y29udmVydEVudGl0aWVzSW5TdHJp
bmcpOgorICAgICAgICAqIHNyYy9XZWJFbnRpdGllcy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMv
V2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpjcmVhdGVG
cmFtZVZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmZyb21GcmFtZSk6Cisg
ICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJQYWdlU2VyaWFs
aXplci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplcjo6c2Vy
aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlTWV0
YUNoYXJzZXREZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVy
OjpnZW5lcmF0ZU1hcmtPZlRoZVdlYkRlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlQmFzZVRhZ0RlY2xhcmF0aW9uKToKKyAgICAgICAgKiBz
cmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VTZXJpYWxpemVySW1wbDo6U2VyaWFsaXplRG9tUGFyYW06OlNlcmlhbGl6ZURvbVBhcmFt
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpwcmVBY3Rpb25CZWZv
cmVTZXJpYWxpemVPcGVuVGFnKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJ
bXBsOjpwb3N0QWN0aW9uQWZ0ZXJTZXJpYWxpemVPcGVuVGFnKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVFbmRUYWcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6OnBvc3RBY3Rpb25BZnRlclNl
cmlhbGl6ZUVuZFRhZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6
c2F2ZUhUTUxDb250ZW50VG9CdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFs
aXplckltcGw6Om9wZW5UYWdUb1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJp
YWxpemVySW1wbDo6ZW5kVGFnVG9TdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2Vy
aWFsaXplckltcGw6OmJ1aWxkQ29udGVudEZvck5vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlU2VyaWFsaXplckltcGw6OldlYlBhZ2VTZXJpYWxpemVySW1wbCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6Y29sbGVjdFRhcmdldEZyYW1lcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6c2VyaWFsaXplKToKKyAgICAgICAgKiBz
cmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmg6IEFkZGVkLgorCiAyMDA5LTExLTIwICBKaWFuIExp
ICA8amlhbmxpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQuIEZpeCBjaHJv
bWl1bSBidWlsZC4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggYWIwOGRjOS4uOTUyZWI5NyAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXAKQEAgLTEwMiw2ICsxMDIsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRGV2
VG9vbHNBZ2VudENsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkRldlRvb2xz
RnJvbnRlbmQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJEZXZUb29sc0Zyb250ZW5k
Q2xpZW50LmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRG9jdW1lbnQuaCcsCiAgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJEcmFnRGF0YS5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL1dlYkVkaXRpbmdBY3Rpb24uaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJFbGVt
ZW50LmgnLApAQCAtMTI3LDEwICsxMjgsMTMgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dl
Yk1pbWVSZWdpc3RyeS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk5hdmlnYXRpb25U
eXBlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTm9kZS5oJywKKyAgICAgICAgICAg
ICAgICAncHVibGljL1dlYk5vZGVDb2xsZWN0aW9uLmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViTm9uQ29weWFibGUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJOb3RpZmlj
YXRpb24uaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJOb3RpZmljYXRpb25QcmVzZW50
ZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJOb3RpZmljYXRpb25QZXJtaXNzaW9u
Q2FsbGJhY2suaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5o
JywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUGFzc3dvcmRBdXRvY29tcGxldGVMaXN0ZW5lci5o
JywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlBhc3N3b3JkRm9ybURhdGEuaCcsCiAgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJQbHVnaW4uaCcsCkBAIC0yNDAsOCArMjQ0LDExIEBACiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJEYXRhYmFzZS5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViRGF0YVNvdXJjZUltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkRhdGFT
b3VyY2VJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViRG9jdW1lbnQuY3BwJywKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYkRyYWdEYXRhLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJFbGVtZW50LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJFbnRpdGllcy5jcHAn
LAorICAgICAgICAgICAgICAgICdzcmMvV2ViRW50aXRpZXMuaCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9XZWJGaWxlQ2hvb3NlckNvbXBsZXRpb25JbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9XZWJGaWxlQ2hvb3NlckNvbXBsZXRpb25JbXBsLmgnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViRm9udENhY2hlLmNwcCcsCkBAIC0yNjAsNyArMjY3LDExIEBACiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAn
c3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
Yk5vZGUuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYk5vZGVDb2xsZWN0aW9uLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJOb3RpZmljYXRpb24uY3BwJywKKyAgICAgICAgICAg
ICAgICAnc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJQYWdlU2VyaWFsaXplckltcGwuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlBhZ2VT
ZXJpYWxpemVySW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlBhc3N3b3JkRm9ybURh
dGEuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlBhc3N3b3JkRm9ybVV0aWxzLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJQYXNzd29yZEZvcm1VdGlscy5oJywKZGlmZiAtLWdp
dCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRG9jdW1lbnQuaCBiL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViRG9jdW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li44NmVhYTk5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJE
b2N1bWVudC5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkRvY3VtZW50X2gKKyNkZWZpbmUg
V2ViRG9jdW1lbnRfaAorCisjaW5jbHVkZSAiV2ViTm9kZS5oIgorCisjaWYgV0VCS0lUX0lNUExF
TUVOVEFUSU9OCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIERvY3VtZW50OyB9CituYW1lc3Bh
Y2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NSZWZQdHI7IH0KKyNlbmRp
ZgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkVsZW1lbnQ7CitjbGFzcyBXZWJOb2Rl
Q29sbGVjdGlvbjsKK2NsYXNzIFdlYlN0cmluZzsKK2NsYXNzIFdlYlVSTDsKKworLy8gUHJvdmlk
ZXMgcmVhZG9ubHkgYWNjZXNzIHRvIHNvbWUgcHJvcGVydGllcyBvZiBhIERPTSBlbGVtZW50IG5v
ZGUuCitjbGFzcyBXZWJEb2N1bWVudCA6IHB1YmxpYyBXZWJOb2RlIHsKKworcHVibGljOgorICAg
IFdlYkRvY3VtZW50KCkgOiBXZWJOb2RlKCkgeyB9CisgICAgV2ViRG9jdW1lbnQoY29uc3QgV2Vi
RG9jdW1lbnQmIGUpIDogV2ViTm9kZShlKSB7IH0KKworICAgIFdlYkRvY3VtZW50JiBvcGVyYXRv
cj0oY29uc3QgV2ViRG9jdW1lbnQmIGUpIHsgV2ViTm9kZTo6YXNzaWduKGUpOyByZXR1cm4gKnRo
aXM7IH0KKyAgICBXRUJLSVRfQVBJIHZvaWQgYXNzaWduKGNvbnN0IFdlYkRvY3VtZW50JiBlKSB7
IFdlYk5vZGU6OmFzc2lnbihlKTsgfQorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAg
V2ViRG9jdW1lbnQoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50PiYpOwor
ICAgIFdlYkRvY3VtZW50JiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6
OkRvY3VtZW50PiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpEb2N1
bWVudD4oKSBjb25zdDsKKyNlbmRpZgorCisgICAgV0VCS0lUX0FQSSBib29sIGlzSFRNTERvY3Vt
ZW50KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJVUkwgYmFzZVVSTCgpIGNvbnN0OworICAg
IFdFQktJVF9BUEkgV2ViRWxlbWVudCBib2R5KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJF
bGVtZW50IGhlYWQoKTsKKyAgICBXRUJLSVRfQVBJIFdlYk5vZGVDb2xsZWN0aW9uIGFsbCgpOwor
ICAgIFdFQktJVF9BUEkgV2ViVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFdlYlN0cmluZyYpIGNvbnN0
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJFbGVtZW50LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkVsZW1lbnQuaAppbmRleCBkN2EyY2JmLi4wMzljY2ZkIDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkVsZW1lbnQuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkVsZW1lbnQuaApAQCAtMzksNyArMzksNiBAQCBuYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NSZWZQdHI7IH0KICNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKLQogICAgIC8vIFByb3ZpZGVzIHJlYWRvbmx5IGFjY2VzcyB0byBzb21lIHByb3BlcnRp
ZXMgb2YgYSBET00gZWxlbWVudCBub2RlLgogICAgIGNsYXNzIFdlYkVsZW1lbnQgOiBwdWJsaWMg
V2ViTm9kZSB7CiAgICAgcHVibGljOgpAQCAtNTQsNiArNTMsOSBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKICAgICAgICAgV2ViRWxlbWVudCYgb3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxX
ZWJDb3JlOjpFbGVtZW50PiYpOwogICAgICAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2Vi
Q29yZTo6RWxlbWVudD4oKSBjb25zdDsKICNlbmRpZgorICAgICAgICBXRUJLSVRfQVBJIGJvb2wg
aGFzVGFnTmFtZShjb25zdCBXZWJTdHJpbmcmKSBjb25zdDsKKyAgICAgICAgV0VCS0lUX0FQSSBi
b29sIGhhc0F0dHJpYnV0ZShjb25zdCBXZWJTdHJpbmcmKSBjb25zdDsKKyAgICAgICAgV0VCS0lU
X0FQSSBXZWJTdHJpbmcgZ2V0QXR0cmlidXRlKGNvbnN0IFdlYlN0cmluZyYpIGNvbnN0OwogICAg
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJGb3JtRWxlbWVudC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGb3Jt
RWxlbWVudC5oCmluZGV4IDI3YTFlZGIuLmQ5ODAxZTEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViRm9ybUVsZW1lbnQuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkZvcm1FbGVtZW50LmgKQEAgLTUwLDcgKzUwLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAg
ICAgICAgIFdlYkZvcm1FbGVtZW50KCkgOiBXZWJFbGVtZW50KCkgeyB9CiAgICAgICAgIFdlYkZv
cm1FbGVtZW50KGNvbnN0IFdlYkZvcm1FbGVtZW50JiBlKSA6IFdlYkVsZW1lbnQoZSkgeyB9CiAK
LSAgICAgICAgV2ViRWxlbWVudCYgb3BlcmF0b3I9KGNvbnN0IFdlYkZvcm1FbGVtZW50JiBlKSB7
IFdlYkVsZW1lbnQ6OmFzc2lnbihlKTsgcmV0dXJuICp0aGlzOyB9CisgICAgICAgIFdlYkZvcm1F
bGVtZW50JiBvcGVyYXRvcj0oY29uc3QgV2ViRm9ybUVsZW1lbnQmIGUpIHsgV2ViRWxlbWVudDo6
YXNzaWduKGUpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgICAgV0VCS0lUX0FQSSB2b2lkIGFzc2ln
bihjb25zdCBXZWJGb3JtRWxlbWVudCYgZSkgeyBXZWJFbGVtZW50Ojphc3NpZ24oZSk7IH0KIAog
I2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJGcmFtZS5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oCmluZGV4
IDQ0YjU3YWEuLjkwYWIzNDkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
RnJhbWUuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgKQEAgLTQ3LDYg
KzQ3LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYkRhdGE7CiBjbGFzcyBXZWJE
YXRhU291cmNlOworY2xhc3MgV2ViRG9jdW1lbnQ7CitjbGFzcyBXZWJFbGVtZW50OwogY2xhc3Mg
V2ViRm9ybUVsZW1lbnQ7CiBjbGFzcyBXZWJIaXN0b3J5SXRlbTsKIGNsYXNzIFdlYklucHV0RWxl
bWVudDsKQEAgLTEwMyw2ICsxMDUsOCBAQCBwdWJsaWM6CiAgICAgLy8gdGhlIGRvY3VtZW50IGxv
YWRlZCBpbiB0aGlzIGZyYW1lLgogICAgIHZpcnR1YWwgV2ViVVJMIG9wZW5TZWFyY2hEZXNjcmlw
dGlvblVSTCgpIGNvbnN0ID0gMDsKIAorICAgIC8vIFJldHVybiB0aGUgZnJhbWUncyBlbmNvZGlu
Zy4KKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBlbmNvZGluZygpIGNvbnN0ID0gMDsKIAogICAgIC8v
IEdlb21ldHJ5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKQEAgLTE2NCw4ICsxNjgsMTQgQEAgcHVibGljOgogCiAgICAgLy8gQ29u
dGVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAorICAgIC8vIFJldHVybnMgdGhlIHBhZ2UncyBkb2N1bWVudCBlbGVtZW50Lgor
ICAgIHZpcnR1YWwgV2ViRG9jdW1lbnQgZG9jdW1lbnQoKSBjb25zdCA9IDA7CisKICAgICB2aXJ0
dWFsIHZvaWQgZm9ybXMoV2ViVmVjdG9yPFdlYkZvcm1FbGVtZW50PiYpIGNvbnN0ID0gMDsKIAor
ICAgIC8vIFJldHVybnMgdGhlIGZyYW1lIGluc2lkZSBhIGdpdmVuIGZyYW1lIG9yIGlmcmFtZSBl
bGVtZW50LiBSZXR1cm5zIDAgaWYKKyAgICAvLyB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBub3QgYSBm
cmFtZSwgaWZyYW1lIG9yIGlmIHRoZSBmcmFtZSBpcyBlbXB0eS4KKyAgICB2aXJ0dWFsIFdlYkZy
YW1lKiBmcm9tRnJhbWVFbGVtZW50KFdlYkVsZW1lbnQmKSBjb25zdCA9IDA7CiAKICAgICAvLyBT
Y3JpcHRpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCkBAIC00NDQsNiArNDU0LDcgQEAgcHVibGljOgogICAgIC8vIHJlbGF0aXZl
IHRvIHRoZSBiYXNlIFVSTCBvZiB0aGUgZnJhbWUncyBkb2N1bWVudC4gIFRoaXMgdXNlcyB0aGUK
ICAgICAvLyBzYW1lIGFsZ29yaXRobSB0aGF0IFdlYktpdCB1c2VzIHRvIHJlc29sdmUgaHlwZXJs
aW5rcyBmb3VuZCBpbiBhCiAgICAgLy8gSFRNTCBkb2N1bWVudC4KKyAgICAvLyBEZXByZWNhdGVk
LiBVc2UgZG9jdW1lbnQoKS5jb21wbGV0ZVVSTCgpIGluc3RlYWQuCiAgICAgdmlydHVhbCBXZWJV
UkwgY29tcGxldGVVUkwoY29uc3QgV2ViU3RyaW5nJikgY29uc3QgPSAwOwogCiAgICAgLy8gUmV0
dXJucyB0aGUgY29udGVudHMgb2YgdGhpcyBmcmFtZSBhcyBhIHN0cmluZy4gIElmIHRoZSB0ZXh0
IGlzCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5vZGUuaCBiL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViTm9kZS5oCmluZGV4IDAzYWZhOTAuLmRkYTE2MDUgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTm9kZS5oCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViTm9kZS5oCkBAIC00MSw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXVEYgeyB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1JlZlB0cjsgfQogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIGNsYXNzIFdlYkZyYW1lOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZl
Y3RvcjsKIAogLy8gUHJvdmlkZXMgcmVhZG9ubHkgYWNjZXNzIHRvIHNvbWUgcHJvcGVydGllcyBv
ZiBhIERPTSBub2RlLgogY2xhc3MgV2ViTm9kZSB7CkBAIC02Niw5ICs2NywzNSBAQCBwdWJsaWM6
CiAgICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok5vZGU+KCkgY29uc3Q7CiAj
ZW5kaWYKIAorICAgIGVudW0gTm9kZVR5cGUgeworICAgICAgICBFbGVtZW50Tm9kZSA9IDEsCisg
ICAgICAgIEF0dHJpYnV0ZU5vZGUsCisgICAgICAgIFRleHROb2RlLAorICAgICAgICBDRGF0YVNl
Y3Rpb25Ob2RlLAorICAgICAgICBFbnRpdHlSZWZlcmVuY2VOb2RlLAorICAgICAgICBFbnRpdHlO
b2RlLAorICAgICAgICBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25zTm9kZSwKKyAgICAgICAgQ29tbWVu
dE5vZGUsCisgICAgICAgIERvY3VtZW50Tm9kZSwKKyAgICAgICAgRG9jdW1lbnRUeXBlTm9kZSwK
KyAgICAgICAgRG9jdW1lbnRGcmFnbWVudE5vZGUsCisgICAgICAgIE5vdGF0aW9uTm9kZSwKKyAg
ICAgICAgWFBhdGhOYW1lc3BhY2VOb2RlCisgICAgfTsKKyAgICBXRUJLSVRfQVBJIE5vZGVUeXBl
IG5vZGVUeXBlKCkgY29uc3Q7CiAgICAgV0VCS0lUX0FQSSBXZWJOb2RlIHBhcmVudE5vZGUoKSBj
b25zdDsKICAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyBub2RlTmFtZSgpIGNvbnN0OworICAgIFdF
QktJVF9BUEkgV2ViU3RyaW5nIG5vZGVWYWx1ZSgpIGNvbnN0OwogICAgIFdFQktJVF9BUEkgV2Vi
RnJhbWUqIGZyYW1lKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJOb2RlIGZpcnN0Q2hpbGQo
KSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIFdlYk5vZGUgbGFzdENoaWxkKCkgY29uc3Q7CisgICAg
V0VCS0lUX0FQSSBXZWJOb2RlIHByZXZpb3VzU2libGluZygpIGNvbnN0OworICAgIFdFQktJVF9B
UEkgV2ViTm9kZSBuZXh0U2libGluZygpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBoYXND
aGlsZE5vZGVzKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJWZWN0b3I8V2ViTm9kZT4gY2hp
bGROb2RlcygpOworICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGNyZWF0ZU1hcmt1cCgpIGNvbnN0
OworICAgIFdFQktJVF9BUEkgYm9vbCBpc1RleHROb2RlKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQ
SSBib29sIGlzRWxlbWVudE5vZGUoKSBjb25zdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IFQgdG9FbGVtZW50KCkKICAgICB7CkBAIC03Nyw2ICsxMDQsMTMgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gcmVzOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgdG9FbGVt
ZW50Q29uc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgVCByZXM7CisgICAgICAgIHJlcy5tX3By
aXZhdGUgPSBtX3ByaXZhdGU7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCiBwcm90ZWN0
ZWQ6CiAgICAgdHlwZWRlZiBXZWJDb3JlOjpOb2RlIFdlYk5vZGVQcml2YXRlOwogICAgIHZvaWQg
YXNzaWduKFdlYk5vZGVQcml2YXRlKik7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYk5vZGVDb2xsZWN0aW9uLmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5vZGVD
b2xsZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzliZTQ2Zgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTm9kZUNvbGxlY3Rp
b24uaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJOb2RlQ29sbGVjdGlvbl9oCisjZGVmaW5l
IFdlYk5vZGVDb2xsZWN0aW9uX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7IGNsYXNzIEhUTUxDb2xsZWN0aW9uOyB9CisjaWYgV0VCS0lUX0lNUExFTUVO
VEFUSU9OCituYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NS
ZWZQdHI7IH0KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYk5vZGU7CisK
Ky8vIFByb3ZpZGVzIHJlYWRvbmx5IGFjY2VzcyB0byBzb21lIHByb3BlcnRpZXMgb2YgYSBET00g
bm9kZS4KK2NsYXNzIFdlYk5vZGVDb2xsZWN0aW9uIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5X
ZWJOb2RlQ29sbGVjdGlvbigpIHsgcmVzZXQoKTsgfQorCisgICAgV2ViTm9kZUNvbGxlY3Rpb24o
Y29uc3QgV2ViTm9kZUNvbGxlY3Rpb24mIG4pIDogbV9wcml2YXRlKDApIHsgYXNzaWduKG4pOyB9
CisgICAgV2ViTm9kZUNvbGxlY3Rpb24mIG9wZXJhdG9yPShjb25zdCBXZWJOb2RlQ29sbGVjdGlv
biYgbikKKyAgICB7CisgICAgICAgIGFzc2lnbihuKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgIH0KKworICAgIFdFQktJVF9BUEkgdm9pZCByZXNldCgpOworICAgIFdFQktJVF9BUEkgdm9p
ZCBhc3NpZ24oY29uc3QgV2ViTm9kZUNvbGxlY3Rpb24mKTsKKworI2lmIFdFQktJVF9JTVBMRU1F
TlRBVElPTgorICAgIFdlYk5vZGVDb2xsZWN0aW9uKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJD
b3JlOjpIVE1MQ29sbGVjdGlvbj4mKTsKKyNlbmRpZgorCisgICAgV0VCS0lUX0FQSSB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIFdlYk5vZGUgbmV4dEl0ZW0oKSBjb25z
dDsKKyAgICBXRUJLSVRfQVBJIFdlYk5vZGUgZmlyc3RJdGVtKCkgY29uc3Q7CisKK3Byb3RlY3Rl
ZDoKKyAgICB2b2lkIGFzc2lnbihXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbiopOworICAgIFdlYkNv
cmU6OkhUTUxDb2xsZWN0aW9uKiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VT
ZXJpYWxpemVyLmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRmNzk5NAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaApAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBXZWJQYWdlU2VyaWFsaXplcl9oCisjZGVmaW5lIFdlYlBhZ2VTZXJp
YWxpemVyX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsK
K2NsYXNzIFdlYkZyYW1lOworY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQ7CitjbGFzcyBX
ZWJTdHJpbmc7CitjbGFzcyBXZWJVUkw7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2Vi
VmVjdG9yOworCisvLyBHZXQgaHRtbCBkYXRhIGJ5IHNlcmlhbGl6aW5nIGFsbCBmcmFtZXMgb2Yg
Y3VycmVudCBwYWdlIHdpdGggbGlzdHMKKy8vIHdoaWNoIGNvbnRhaW4gYWxsIHJlc291cmNlIGxp
bmtzIHRoYXQgaGF2ZSBsb2NhbCBjb3B5LgorY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXIgeworcHVi
bGljOgorICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBmaW5kIG91dCBhbGwgZnJhbWVzIGFuZCBz
ZXJpYWxpemUgdGhlbSB0byBIVE1MIGRhdGEuCisgICAgLy8gV2UgaGF2ZSBhIGRhdGEgYnVmZmVy
IHRvIHRlbXBvcmFyeSBzYXZpbmcgZ2VuZXJhdGVkIGh0bWwgZGF0YS4gV2Ugd2lsbAorICAgIC8v
IHNlcXVlbnRpYWxseSBjYWxsIFdlYlBhZ2VTZXJpYXpsaWVyQ2xpZW50IG9uY2UgdGhlIGRhdGEg
YnVmZmVyIGlzIGZ1bGwuCisgICAgLy8KKyAgICAvLyBSZXR1cm4gZmFsc2UgbWVhbnMgbm8gYXZh
aWxhYmxlIGZyYW1lIGhhcyBiZWVuIHNlcmlhbGl6ZWQsIG90aGVyd2lzZQorICAgIC8vIHJldHVy
biB0cnVlLgorICAgIC8vCisgICAgLy8gVGhlIHBhcmFtZXRlciBmcmFtZSBzcGVjaWZpZXMgd2hp
Y2ggZnJhbWUgbmVlZCB0byBiZSBzZXJpYWxpemVkLgorICAgIC8vIFRoZSBwYXJhbWV0ZXIgcmVj
dXJzaXZlIHNwZWNpZmllcyB3aGV0aGVyIHdlIG5lZWQgdG8KKyAgICAvLyBzZXJpYWxpemUgYWxs
IHN1YiBmcmFtZXMgb2YgdGhlIHNwZWNpZmllZCBmcmFtZSBvciBub3QuCisgICAgLy8gVGhlIHBh
cmFtZXRlciBjbGllbnQgc3BlY2lmaWVzIHRoZSBwb2ludGVyIG9mIGludGVyZmFjZQorICAgIC8v
IFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50IHByb3ZpZGluZyBhIHNpbmsgaW50ZXJmYWNlIHRvIHJl
Y2VpdmUgdGhlCisgICAgLy8gaW5kaXZpZHVhbCBjaHVua3Mgb2YgZGF0YSB0byBiZSBzYXZlZC4K
KyAgICAvLyBUaGUgcGFyYW1ldGVyIGxpbmtzIGNvbnRhaW4gb3JpZ2luYWwgVVJMcyBvZiBhbGwg
c2F2ZWQgbGlua3MuCisgICAgLy8gVGhlIHBhcmFtZXRlciBsb2NhbFBhdGhzIGNvbnRhaW4gY29y
cmVzcG9uZGluZyBsb2NhbCBmaWxlIHBhdGhzIG9mIGFsbAorICAgIC8vIHNhdmVkIGxpbmtzLCB3
aGljaCBtYXRjaGVkIHdpdGggdmVjdG9yOmxpbmtzIG9uZSBieSBvbmUuCisgICAgLy8gVGhlIHBh
cmFtZXRlciBsb2NhbERpcmVjdG9yeU5hbWUgaXMgcmVsYXRpdmUgcGF0aCBvZiBkaXJlY3Rvcnkg
d2hpY2gKKyAgICAvLyBjb250YWluIGFsbCBzYXZlZCBhdXhpbGlhcnkgZmlsZXMgaW5jbHVkZWQg
YWxsIHN1YiBmcmFtZXMgYW5kIHJlc291cmNlcy4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBib29s
IHNlcmlhbGl6ZShXZWJGcmFtZSogZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCByZWN1cnNpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqIGNsaWVudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViVVJMPiYgbGlua3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmlu
Zz4mIGxvY2FsUGF0aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgV2ViU3RyaW5nJiBsb2NhbERpcmVjdG9yeU5hbWUpOworCisgICAgLy8gRklYTUU6IFRoZSBm
b2xsb3dpbmcgYXJlIGhlcmUgZm9yIHVuaXQgdGVzdGluZyBwdXJwb3Nlcy4gQ29uc2lkZXIKKyAg
ICAvLyBjaGFuZ2luZyB0aGUgdW5pdCB0ZXN0cyBpbnN0ZWFkLgorCisgICAgLy8gR2VuZXJhdGUg
dGhlIE1FVEEgZm9yIGNoYXJzZXQgZGVjbGFyYXRpb24uCisgICAgV0VCS0lUX0FQSSBzdGF0aWMg
V2ViU3RyaW5nIGdlbmVyYXRlTWV0YUNoYXJzZXREZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcm
IGNoYXJzZXQpOworICAgIC8vIEdlbmVyYXRlIHRoZSBNT1RXIGRlY2xhcmF0aW9uLgorICAgIFdF
QktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0ZU1hcmtPZlRoZVdlYkRlY2xhcmF0aW9u
KGNvbnN0IFdlYlVSTCYgdXJsKTsKKyAgICAvLyBHZW5lcmF0ZSB0aGUgZGVmYXVsdCBiYXNlIHRh
ZyBkZWNsYXJhdGlvbi4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJTdHJpbmcgZ2VuZXJhdGVC
YXNlVGFnRGVjbGFyYXRpb24oY29uc3QgV2ViU3RyaW5nJiBiYXNlVGFyZ2V0KTsKK307CisKK30g
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmggYi9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNjA5MjIzNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJE
b21TZXJpYWxpemVyQ2xpZW50X2gKKyNkZWZpbmUgV2ViRG9tU2VyaWFsaXplckNsaWVudF9oCisK
K25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViU3RyaW5nOworY2xhc3MgV2ViVVJMOworCisv
LyBUaGlzIGNsYXNzIGlzIHVzZWQgZm9yIHByb3ZpZGluZyBzaW5rIGludGVyZmFjZSB0aGF0IGNh
biBiZSB1c2VkIHRvIHJlY2VpdmUKKy8vIHRoZSBpbmRpdmlkdWFsIGNodW5rcyBvZiBkYXRhIHRv
IGJlIHNhdmVkLgorY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQgeworcHVibGljOgorICAg
IC8vIFRoaXMgZW51bSBpbmRpY2F0ZXMgIFRoaXMgc2luayBpbnRlcmZhY2UgY2FuIHJlY2VpdmUg
dGhlIGluZGl2aWR1YWwgY2h1bmtzCisgICAgLy8gb2Ygc2VyaWFsaXplZCBkYXRhIHRvIGJlIHNh
dmVkLCBzbyB3ZSB1c2UgdmFsdWVzIG9mIGZvbGxvd2luZyBlbnVtCisgICAgLy8gZGVmaW5pdGlv
biB0byBpbmRpY2F0ZSB0aGUgc2VyaWFsaXphdGlvbiBzdGF0dXMgb2Ygc2VyaWFsaXppbmcgYWxs
IGh0bWwKKyAgICAvLyBjb250ZW50LiBJZiBjdXJyZW50IGZyYW1lIGlzIG5vdCBjb21wbGV0ZSBz
ZXJpYWxpemVkLCBjYWxsCisgICAgLy8gZGlkU2VyaWFsaXplRGF0YUZvckZyYW1lIHdpdGggVVJM
IG9mIGN1cnJlbnQgZnJhbWUsIGRhdGEsIGRhdGEgbGVuZ3RoIGFuZAorICAgIC8vIGZsYWcgQ3Vy
cmVudEZyYW1lSXNOb3RGaW5pc2hlZC4KKyAgICAvLyBJZiBjdXJyZW50IGZyYW1lIGlzIGNvbXBs
ZXRlIHNlcmlhbGl6ZWQsIGNhbGwgZGlkU2VyaWFsaXplRGF0YUZvckZyYW1lCisgICAgLy8gd2l0
aCBVUkwgb2YgY3VycmVudCBmcmFtZSwgZGF0YSwgZGF0YSBsZW5ndGggYW5kIGZsYWcKKyAgICAv
LyBDdXJyZW50RnJhbWVJc0ZpbmlzaGVkLgorICAgIC8vIElmIGFsbCBmcmFtZXMgb2YgcGFnZSBh
cmUgY29tcGxldGUgc2VyaWFsaXplZCwgY2FsbAorICAgIC8vIGRpZFNlcmlhbGl6ZURhdGFGb3JG
cmFtZSB3aXRoIGVtcHR5IFVSTCwgZW1wdHkgZGF0YSwgMCBhbmQgZmxhZworICAgIC8vIEFsbEZy
YW1lc0FyZUZpbmlzaGVkLgorICAgIGVudW0gUGFnZVNlcmlhbGl6YXRpb25TdGF0dXMgeworICAg
ICAgICBDdXJyZW50RnJhbWVJc05vdEZpbmlzaGVkID0gMCwKKyAgICAgICAgQ3VycmVudEZyYW1l
SXNGaW5pc2hlZCwKKyAgICAgICAgQWxsRnJhbWVzQXJlRmluaXNoZWQsCisgICAgfTsKKworICAg
IC8vIFJlY2VpdmUgdGhlIGluZGl2aWR1YWwgY2h1bmtzIG9mIHNlcmlhbGl6ZWQgZGF0YSB0byBi
ZSBzYXZlZC4KKyAgICAvLyBUaGUgcGFyYW1ldGVyIGZyYW1lVVJMIHNwZWNpZmllcyB3aGF0IGZy
YW1lIHRoZSBkYXRhIGJlbG9uZ3MuIFRoZQorICAgIC8vIHBhcmFtZXRlciBkYXRhIGNvbnRhaW5z
IHRoZSBhdmFpbGFibGUgZGF0YSBmb3Igc2F2aW5nLiBUaGUgcGFyYW1ldGVyCisgICAgLy8gc3Rh
dHVzIGluZGljYXRlcyB0aGUgc3RhdHVzIG9mIGRhdGEgc2VyaWFsaXphdGlvbi4KKyAgICB2aXJ0
dWFsIHZvaWQgZGlkU2VyaWFsaXplRGF0YUZvckZyYW1lKGNvbnN0IFdlYlVSTCYgZnJhbWVVUkws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJp
bmcmIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWdl
U2VyaWFsaXphdGlvblN0YXR1cyBzdGF0dXMpID0gMDsKKyAgICBXZWJQYWdlU2VyaWFsaXplckNs
aWVudCgpIHsgfQorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfldlYlBhZ2VTZXJpYWxpemVyQ2xp
ZW50KCkgeyB9Cit9OworCit9ICAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmggYi9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlZpZXcuaAppbmRleCA4MjYxYWZjLi4xNGEzNzg2IDEwMDY0NAotLS0gYS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlZpZXcuaApAQCAtNDQsNiArNDQsNyBAQCBjbGFzcyBXZWJGcmFtZUNsaWVudDsKIGNsYXNz
IFdlYk5vZGU7CiBjbGFzcyBXZWJTZXR0aW5nczsKIGNsYXNzIFdlYlN0cmluZzsKK2NsYXNzIFdl
YlVSTDsKIGNsYXNzIFdlYlZpZXdDbGllbnQ7CiBzdHJ1Y3QgV2ViTWVkaWFQbGF5ZXJBY3Rpb247
CiBzdHJ1Y3QgV2ViUG9pbnQ7CkBAIC0xMTgsNiArMTE5LDkgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgV2ViRnJhbWUqIGZpbmRGcmFtZUJ5TmFtZSgKICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBu
YW1lLCBXZWJGcmFtZSogcmVsYXRpdmVUb0ZyYW1lID0gMCkgPSAwOwogCisgICAgLy8gUmV0dXJu
cyB0aGUgZnJhbWUgd2l0aCB0aGUgZ2l2ZW4gdXJsLiBSZXR1cm5zIDAgaWYgbm8gZnJhbWUgaGFz
IHRoaXMgdXJsLgorICAgIC8vIElmIG1vcmUgdGhhbiBvbmUgZnJhbWUgaGFzIHRoaXMgdXJsLCBy
ZXR1cm5zIHRoZSBmaXJzdCBvbmUuCisgICAgdmlydHVhbCBXZWJGcmFtZSogZmluZEZyYW1lQnlV
UkwoY29uc3QgV2ViVVJMJiB1cmwpID0gMDsKIAogICAgIC8vIEZvY3VzIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcAppbmRleCBmMzQ5Y2MzLi5j
NDY2OTJmIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51
bXMuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAK
QEAgLTI0Myw2ICsyNDMsMjAgQEAgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJJbnB1
dEVsZW1lbnQ6Ok1vbnRoLCBIVE1MSW5wdXRFbGVtZW50OjpNT05USCk7CiBDT01QSUxFX0FTU0VS
VF9NQVRDSElOR19FTlVNKFdlYklucHV0RWxlbWVudDo6VGltZSwgSFRNTElucHV0RWxlbWVudDo6
VElNRSk7CiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYklucHV0RWxlbWVudDo6V2Vl
aywgSFRNTElucHV0RWxlbWVudDo6V0VFSyk7CiAKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VO
VU0oV2ViTm9kZTo6RWxlbWVudE5vZGUsIE5vZGU6OkVMRU1FTlRfTk9ERSk7CitDT01QSUxFX0FT
U0VSVF9NQVRDSElOR19FTlVNKFdlYk5vZGU6OkF0dHJpYnV0ZU5vZGUsIE5vZGU6OkFUVFJJQlVU
RV9OT0RFKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTm9kZTo6VGV4dE5vZGUs
IE5vZGU6OlRFWFRfTk9ERSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk5vZGU6
OkNEYXRhU2VjdGlvbk5vZGUsIE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSk7CitDT01QSUxFX0FT
U0VSVF9NQVRDSElOR19FTlVNKFdlYk5vZGU6OkVudGl0eVJlZmVyZW5jZU5vZGUsIE5vZGU6OkVO
VElUWV9SRUZFUkVOQ0VfTk9ERSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk5v
ZGU6OkVudGl0eU5vZGUsIE5vZGU6OkVOVElUWV9OT0RFKTsKK0NPTVBJTEVfQVNTRVJUX01BVENI
SU5HX0VOVU0oV2ViTm9kZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uc05vZGUsIE5vZGU6OlBST0NF
U1NJTkdfSU5TVFJVQ1RJT05fTk9ERSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdl
Yk5vZGU6OkNvbW1lbnROb2RlLCBOb2RlOjpDT01NRU5UX05PREUpOworQ09NUElMRV9BU1NFUlRf
TUFUQ0hJTkdfRU5VTShXZWJOb2RlOjpEb2N1bWVudE5vZGUsIE5vZGU6OkRPQ1VNRU5UX05PREUp
OworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJOb2RlOjpEb2N1bWVudFR5cGVOb2Rl
LCBOb2RlOjpET0NVTUVOVF9UWVBFX05PREUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5V
TShXZWJOb2RlOjpEb2N1bWVudEZyYWdtZW50Tm9kZSwgTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRf
Tk9ERSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk5vZGU6Ok5vdGF0aW9uTm9k
ZSwgTm9kZTo6Tk9UQVRJT05fTk9ERSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdl
Yk5vZGU6OlhQYXRoTmFtZXNwYWNlTm9kZSwgTm9kZTo6WFBBVEhfTkFNRVNQQUNFX05PREUpOwor
CiAjaWYgRU5BQkxFKFZJREVPKQogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJNZWRp
YVBsYXllcjo6RW1wdHksIE1lZGlhUGxheWVyOjpFbXB0eSk7CiBDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdlYk1lZGlhUGxheWVyOjpJZGxlLCBNZWRpYVBsYXllcjo6SWRsZSk7CmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0RPTVV0aWxpdGllc1ByaXZhdGUuY3BwIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9ET01VdGlsaXRpZXNQcml2YXRlLmNwcAppbmRleCBmZmRkODVkLi5j
MmFhY2ZiIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0RPTVV0aWxpdGllc1ByaXZh
dGUuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5jcHAK
QEAgLTg0LDQgKzg0LDU0IEBAIFN0cmluZyBuYW1lT2ZJbnB1dEVsZW1lbnQoSFRNTElucHV0RWxl
bWVudCogZWxlbWVudCkKICAgICByZXR1cm4gV2ViSW5wdXRFbGVtZW50KGVsZW1lbnQpLm5hbWVG
b3JBdXRvZmlsbCgpOwogfQogCisKK2Jvb2wgZWxlbWVudEhhc0xlZ2FsTGlua0F0dHJpYnV0ZShj
b25zdCBFbGVtZW50KiBlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIGlmIChhdHRyTmFtZSA9PSBI
VE1MTmFtZXM6OnNyY0F0dHIpIHsKKyAgICAgICAgLy8gQ2hlY2sgc3JjIGF0dHJpYnV0ZS4KKyAg
ICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWdUYWcpCisgICAgICAg
ICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0VGFnKQorICAgICAg
ICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZVRhZykKKyAgICAg
ICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZVRhZykpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjppbnB1dFRhZykpIHsKKyAgICAgICAgICAgIGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQq
IGlucHV0ID0KKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQq
PihlbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChpbnB1dC0+aW5wdXRUeXBlKCkgPT0gSFRNTElu
cHV0RWxlbWVudDo6SU1BR0UpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IEhUTUxOYW1lczo6aHJlZkF0dHIpIHsKKyAg
ICAgICAgLy8gQ2hlY2sgaHJlZiBhdHRyaWJ1dGUuCisgICAgICAgIGlmIChlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6bGlua1RhZykKKyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjphVGFnKQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmFyZWFUYWcpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBl
bHNlIGlmIChhdHRyTmFtZSA9PSBIVE1MTmFtZXM6OmFjdGlvbkF0dHIpIHsKKyAgICAgICAgaWYg
KGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtVGFnKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjpiYWNrZ3Jv
dW5kQXR0cikgeworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJv
ZHlUYWcpCisgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFi
bGVUYWcpCisgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHJU
YWcpCisgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGRUYWcp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBI
VE1MTmFtZXM6OmNpdGVBdHRyKSB7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6YmxvY2txdW90ZVRhZykKKyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpxVGFnKQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmRlbFRhZykKKyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjppbnNUYWcpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIGlm
IChhdHRyTmFtZSA9PSBIVE1MTmFtZXM6OmNsYXNzaWRBdHRyCisgICAgICAgICAgICAgICB8fCBh
dHRyTmFtZSA9PSBIVE1MTmFtZXM6OmRhdGFBdHRyKSB7CisgICAgICAgIGlmIChlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjpjb2RlYmFzZUF0dHIpIHsK
KyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3RUYWcpCisg
ICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YXBwbGV0VGFnKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9E
T01VdGlsaXRpZXNQcml2YXRlLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RPTVV0aWxpdGllc1By
aXZhdGUuaAppbmRleCBjMDJiZjg0Li4yNTNhYjNmIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21p
dW0vc3JjL0RPTVV0aWxpdGllc1ByaXZhdGUuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RP
TVV0aWxpdGllc1ByaXZhdGUuaApAQCAtMzIsMTEgKzMyLDEzIEBACiAjZGVmaW5lIERPTVV0aWxp
dGllc1ByaXZhdGVfaAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBFbGVtZW50OwogY2xh
c3MgSFRNTElucHV0RWxlbWVudDsKIGNsYXNzIEhUTUxMaW5rRWxlbWVudDsKIGNsYXNzIEhUTUxN
ZXRhRWxlbWVudDsKIGNsYXNzIEhUTUxPcHRpb25FbGVtZW50OwogY2xhc3MgTm9kZTsKK2NsYXNz
IFF1YWxpZmllZE5hbWU7CiBjbGFzcyBTdHJpbmc7CiB9CiAKQEAgLTUzLDYgKzU1LDE2IEBAIFdl
YkNvcmU6OkhUTUxPcHRpb25FbGVtZW50KiB0b0hUTUxPcHRpb25FbGVtZW50KFdlYkNvcmU6Ok5v
ZGUqKTsKIC8vIEZJWE1FOiBEZXByZWNhdGUuIFVzZSBXZWJJbnB1dEVsZW1lbnQ6Om5hbWVGb3JB
dXRvZmlsbCBpbnN0ZWFkLgogV2ViQ29yZTo6U3RyaW5nIG5hbWVPZklucHV0RWxlbWVudChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50Kik7CiAKKy8vIEZvciBpbWcsIHNjcmlwdCwgaWZyYW1lLCBm
cmFtZSBlbGVtZW50LCB3aGVuIGF0dHJpYnV0ZSBuYW1lIGlzIHNyYywKKy8vIGZvciBsaW5rLCBh
LCBhcmVhIGVsZW1lbnQsIHdoZW4gYXR0cmlidXRlIG5hbWUgaXMgaHJlZiwKKy8vIGZvciBmb3Jt
IGVsZW1lbnQsIHdoZW4gYXR0cmlidXRlIG5hbWUgaXMgYWN0aW9uLAorLy8gZm9yIGlucHV0LCB0
eXBlPWltYWdlLCB3aGVuIGF0dHJpYnV0ZSBuYW1lIGlzIHNyYywKKy8vIGZvciBib2R5LCB0YWJs
ZSwgdHIsIHRkLCB3aGVuIGF0dHJpYnV0ZSBuYW1lIGlzIGJhY2tncm91bmQsCisvLyBmb3IgYmxv
Y2txdW90ZSwgcSwgZGVsLCBpbnMsIHdoZW4gYXR0cmlidXRlIG5hbWUgaXMgY2l0ZSwKKy8vIHdl
IGNhbiBjb25zaWRlciB0aGUgYXR0cmlidXRlIHZhbHVlIGhhcyBsZWdhbCBsaW5rLgorYm9vbCBl
bGVtZW50SGFzTGVnYWxMaW5rQXR0cmlidXRlKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1l
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6UXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRvY3VtZW50LmNwcCBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRG9jdW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjNiNjIxY2IKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkRvY3VtZW50LmNwcApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldlYkRvY3VtZW50LmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MQWxsQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIkhU
TUxCb2R5RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAi
SFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorCisjaW5jbHVkZSAiV2ViRWxlbWVudC5oIgorI2luY2x1ZGUgIldl
Yk5vZGVDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViRG9jdW1lbnQ6OldlYkRvY3Vt
ZW50KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4mIGVsZW0pCisgICAg
OiBXZWJOb2RlKGVsZW0ucmVsZWFzZVJlZigpKQoreworfQorCitXZWJEb2N1bWVudCYgV2ViRG9j
dW1lbnQ6Om9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnQ+
JiBlbGVtKQoreworICAgIFdlYk5vZGU6OmFzc2lnbihlbGVtLnJlbGVhc2VSZWYoKSk7CisgICAg
cmV0dXJuICp0aGlzOworfQorCitXZWJEb2N1bWVudDo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRy
PERvY3VtZW50PigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8RG9jdW1lbnQ+KHN0
YXRpY19jYXN0PERvY3VtZW50Kj4obV9wcml2YXRlKSk7Cit9CisKK2Jvb2wgV2ViRG9jdW1lbnQ6
OmlzSFRNTERvY3VtZW50KCkgY29uc3QKK3sgIAorICAgIHJldHVybiBjb25zdFVud3JhcDxEb2N1
bWVudD4oKS0+aXNIVE1MRG9jdW1lbnQoKTsKK30KKworV2ViVVJMIFdlYkRvY3VtZW50OjpiYXNl
VVJMKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8RG9jdW1lbnQ+KCktPmJhc2VV
UkwoKTsKK30KKworV2ViRWxlbWVudCBXZWJEb2N1bWVudDo6Ym9keSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIFdlYkVsZW1lbnQoY29uc3RVbndyYXA8RG9jdW1lbnQ+KCktPmJvZHkoKSk7Cit9CisK
K1dlYkVsZW1lbnQgV2ViRG9jdW1lbnQ6OmhlYWQoKQoreworICAgIHJldHVybiBXZWJFbGVtZW50
KHVud3JhcDxEb2N1bWVudD4oKS0+aGVhZCgpKTsKK30KKworV2ViTm9kZUNvbGxlY3Rpb24gV2Vi
RG9jdW1lbnQ6OmFsbCgpCit7CisgICAgcmV0dXJuIFdlYk5vZGVDb2xsZWN0aW9uKHVud3JhcDxE
b2N1bWVudD4oKS0+YWxsKCkpOworfQorCitXZWJVUkwgV2ViRG9jdW1lbnQ6OmNvbXBsZXRlVVJM
KGNvbnN0IFdlYlN0cmluZyYgcGFydGlhbFVSTCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RV
bndyYXA8RG9jdW1lbnQ+KCktPmNvbXBsZXRlVVJMKHBhcnRpYWxVUkwpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRWxlbWVu
dC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkVsZW1lbnQuY3BwCmluZGV4IDNmMTNlZTEu
LjU2OTgwZmUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRWxlbWVudC5jcHAK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFbGVtZW50LmNwcApAQCAtNTQsNSArNTQsMjEg
QEAgV2ViRWxlbWVudDo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPEVsZW1lbnQ+KCkgY29uc3QK
ICAgICByZXR1cm4gUGFzc1JlZlB0cjxFbGVtZW50PihzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9w
cml2YXRlKSk7CiB9CiAKK2Jvb2wgV2ViRWxlbWVudDo6aGFzVGFnTmFtZShjb25zdCBXZWJTdHJp
bmcmIHRhZ05hbWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0
VW53cmFwPEVsZW1lbnQ+KCktPnRhZ05hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGFnTmFtZS5vcGVyYXRvciBXZWJDb3JlOjpTdHJpbmcoKSk7Cit9CisKK2Jvb2wgV2ViRWxl
bWVudDo6aGFzQXR0cmlidXRlKGNvbnN0IFdlYlN0cmluZyYgYXR0ck5hbWUpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGNvbnN0VW53cmFwPEVsZW1lbnQ+KCktPmhhc0F0dHJpYnV0ZShhdHRyTmFtZSk7
Cit9CisKK1dlYlN0cmluZyBXZWJFbGVtZW50OjpnZXRBdHRyaWJ1dGUoY29uc3QgV2ViU3RyaW5n
JiBhdHRyTmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8RWxlbWVudD4oKS0+
Z2V0QXR0cmlidXRlKGF0dHJOYW1lKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRW50aXRpZXMuY3BwIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJFbnRpdGllcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uN2RjZGVjNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RW50aXRpZXMuY3BwCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYkVudGl0aWVzLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLy8gTm90ZSB0aGF0
IHRoaXMgZmlsZSBpcyBhbHNvIGluY2x1ZGVkIGJ5IEhUTUxUb2tlbml6ZXIuY3BwIHNvIHdlIGFy
ZSBnZXR0aW5nCisvLyB0d28gY29waWVzIG9mIHRoZSBkYXRhIGluIG1lbW9yeS4gIFdlIGNhbiBm
aXggdGhpcyBieSBjaGFuZ2luZyB0aGUgc2NyaXB0CisvLyB0aGF0IGdlbmVyYXRlZCB0aGUgYXJy
YXkgdG8gY3JlYXRlIGEgc3RhdGljIGNvbnN0IHRoYXQgaXMgaXRzIGxlbmd0aCwgYnV0CisvLyB0
aGlzIGlzIGxvdyBwcmlvcml0eSBzaW5jZSB0aGUgZGF0YSBpcyBsZXNzIHRoYW4gNEsuCisjaW5j
bHVkZSAiSFRNTEVudGl0eU5hbWVzLmMiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNp
bmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworI2lu
Y2x1ZGUgIldlYlN0cmluZy5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK3ZvaWQgcG9wdWxhdGVNYXAoV1RGOjpIYXNoTWFwPGludCwgV2ViQ29y
ZTo6U3RyaW5nPiYgbWFwLAorICAgICAgICAgICAgICAgICBjb25zdCBFbnRpdHkqIGVudGl0aWVz
LAorICAgICAgICAgICAgICAgICBzaXplX3QgZW50aXRpZXNDb3VudCwKKyAgICAgICAgICAgICAg
ICAgYm9vbCBzdGFuZGFyZEhUTUwpCit7CisgICAgQVNTRVJUKG1hcC5pc0VtcHR5KCkpOworICAg
IGNvbnN0IEVudGl0eSogZW50aXR5ID0gJmVudGl0aWVzWzBdOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZW50aXRpZXNDb3VudDsgaSsrLCBlbnRpdHkrKykgeworICAgICAgICBpbnQgY29k
ZSA9IGVudGl0eS0+Y29kZTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBlbnRpdHktPm5hbWU7Cisg
ICAgICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgdXNlIHRoZSBsb3dlIGNhc2UgZm9yIGVudGl0aWVz
IHRoYXQgaGF2ZSBib3RoLgorICAgICAgICBpZiAobWFwLmNvbnRhaW5zKGNvZGUpICYmIG1hcC5n
ZXQoY29kZSkgPT0gbmFtZS5sb3dlcigpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IC8vIERvbid0IHJlZ2lzdGVyICZwZXJjbnQ7LCAmbnN1cDsgYW5kICZzdXBsOy4KKyAgICAgICAg
aWYgKHN0YW5kYXJkSFRNTCAmJiAoY29kZSA9PSAnJScgfHwgY29kZSA9PSAweDIyODUgfHwgY29k
ZSA9PSAweDAwYjkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1hcC5zZXQoY29k
ZSwgbmFtZSk7CisgICAgfQorICAgIGlmIChzdGFuZGFyZEhUTUwpCisgICAgICAgIG1hcC5zZXQo
c3RhdGljX2Nhc3Q8aW50PigweDAwMjcpLCBTdHJpbmcoIiMzOSIpKTsKK30KKworc3RhdGljIGNv
bnN0IEVudGl0eSB4bWxCdWlsdEluRW50aXR5Q29kZXNbXSA9IHsKKyAgICB7ICJsdCIsIDB4MDAz
YyB9LAorICAgIHsgImd0IiwgMHgwMDNlIH0sCisgICAgeyAiYW1wIiwgMHgwMDI2IH0sCisgICAg
eyAiYXBvcyIsIDB4MDAyNyB9LAorICAgIHsgInF1b3QiLCAweDAwMjIgfQorfTsKKworV2ViRW50
aXRpZXM6OldlYkVudGl0aWVzKGJvb2wgeG1sRW50aXRpZXMpCit7CisgICAgaWYgKHhtbEVudGl0
aWVzKQorICAgICAgICBwb3B1bGF0ZU1hcChtX2VudGl0aWVzTWFwLAorICAgICAgICAgICAgICAg
ICAgICB4bWxCdWlsdEluRW50aXR5Q29kZXMsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZih4
bWxCdWlsdEluRW50aXR5Q29kZXMpIC8gc2l6ZW9mKEVudGl0eSksCisgICAgICAgICAgICAgICAg
ICAgIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIHBvcHVsYXRlTWFwKG1fZW50aXRpZXNNYXAs
CisgICAgICAgICAgICAgICAgICAgIHdvcmRsaXN0LAorICAgICAgICAgICAgICAgICAgICBzaXpl
b2Yod29yZGxpc3QpIC8gc2l6ZW9mKEVudGl0eSksCisgICAgICAgICAgICAgICAgICAgIHRydWUp
OworfQorCitTdHJpbmcgV2ViRW50aXRpZXM6OmVudGl0eU5hbWVCeUNvZGUoaW50IGNvZGUpIGNv
bnN0Cit7CisgICAgaWYgKG1fZW50aXRpZXNNYXAuY29udGFpbnMoY29kZSkpCisgICAgICAgIHJl
dHVybiBtX2VudGl0aWVzTWFwLmdldChjb2RlKTsKKyAgICByZXR1cm4gIiI7Cit9CisKK1N0cmlu
ZyBXZWJFbnRpdGllczo6Y29udmVydEVudGl0aWVzSW5TdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBsZW4gPSB2YWx1ZS5sZW5ndGgoKTsKKyAgICBjb25z
dCBVQ2hhciogc3RhcnRQb3MgPSB2YWx1ZS5jaGFyYWN0ZXJzKCk7CisgICAgY29uc3QgVUNoYXIq
IGN1clBvcyA9IHN0YXJ0UG9zOworCisgICAgLy8gT3B0aW1pemF0aW9uOiBDcmVhdGUgU3RyaW5n
QnVpbGRlciBvbmx5IGlmIHZhbHVlIGhhcyBhbnkgZW50aXRpZXMuCisvKiAgICB3aGlsZSAobGVu
LS0pIHsKKyAgICAgICAgaWYgKG1fZW50aXRpZXNNYXAuY29udGFpbnMoKmN1clBvcykpeworICAg
ICAgICAgICAgbGVuKys7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
dXJQb3MrKzsKKyAgICB9CisgICAgaWYgKCFsZW4pCisgICAgICAgIHJldHVybiB2YWx1ZTsgKi8K
KworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHdoaWxlIChsZW4tLSkgeworICAgICAg
ICBpZiAobV9lbnRpdGllc01hcC5jb250YWlucygqY3VyUG9zKSkgeworICAgICAgICAgICAgLy8g
QXBwZW5kIGNvbnRlbnQgYmVmb3JlIGVudGl0eSBjb2RlLgorICAgICAgICAgICAgaWYgKGN1clBv
cyA+IHN0YXJ0UG9zKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoU3RyaW5nKHN0YXJ0
UG9zLCBjdXJQb3MgLSBzdGFydFBvcykpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiJiIp
OworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2VudGl0aWVzTWFwLmdldCgqY3VyUG9zKSk7
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCI7Iik7CisgICAgICAgICAgICBzdGFydFBvcyA9
ICsrY3VyUG9zOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY3VyUG9zKys7CisgICAg
ICAgIH0KKyAgICB9CisgICAgLy8gQXBwZW5kIHRoZSByZW1haW5pbmcgY29udGVudC4KKyAgICBp
ZiAoY3VyUG9zID4gc3RhcnRQb3MpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoU3RyaW5nKHN0YXJ0
UG9zLCBjdXJQb3MgLSBzdGFydFBvcykpOworCisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRW50aXRpZXMuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRW50aXRpZXMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDNjMzEwCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFbnRpdGllcy5oCkBAIC0wLDAgKzEsNzUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFdlYkVudGl0aWVzX2gKKyNkZWZpbmUgV2ViRW50aXRpZXNfaAorCisjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgV2ViRW50aXRpZXMgeworcHVibGljOgorICAgIC8vICZhcG9zOywg
JnBlcmNudDssICZuc3VwOywgJnN1cGw7IGFyZSBub3QgZGVmaW5lZCBieSB0aGUgSFRNTCBzdGFu
ZGFyZHMuCisgICAgLy8gIC0gSUUgZG9lcyBub3Qgc3VwcG9ydCAmYXBvczsgYXMgYW4gSFRNTCBl
bnRpdHkgKGJ1dCBzdXBwb3J0IGl0IGFzIGFuIFhNTAorICAgIC8vICAgIGVudGl0eS4pCisgICAg
Ly8gIC0gRmlyZWZveCBzdXBwb3J0cyAmYXBvczsgYXMgYW4gSFRNTCBlbnRpdHkuCisgICAgLy8g
IC0gQm90aCBvZiBJRSBhbmQgRmlyZWZveCBkb24ndCBzdXBwb3J0ICZwZXJjbnQ7LCAmbnN1cDsg
YW5kICZzdXBsOy4KKyAgICAvLworICAgIC8vIEEgd2ViIHBhZ2Ugc2F2ZWQgYnkgQ2hyb21pdW0g
c2hvdWxkIGJlIGFibGUgdG8gYmUgcmVhZCBieSBvdGhlciBicm93c2VycworICAgIC8vIHN1Y2gg
YXMgSUUgYW5kIEZpcmVmb3guICBDaHJvbWl1bSBzaG91bGQgcHJvZHVjZSBvbmx5IHRoZSBzdGFu
ZGFyZCBlbnRpdHkKKyAgICAvLyByZWZlcmVuY2VzIHdoaWNoIG90aGVyIGJyb3dzZXJzIGNhbiBy
ZWNvZ25pemUuCisgICAgLy8gU28gaWYgc3RhbmRhcmRfaHRtbF9lbnRpdGllc18gaXMgdHJ1ZSwg
d2Ugd2lsbCB1c2UgYSBudW1lcmljIGNoYXJhY3RlcgorICAgIC8vIHJlZmVyZW5jZSBmb3IgJmFw
b3M7LCBhbmQgZG9uJ3QgdXNlIGVudGl0eSByZWZlcmVuY2VzIGZvciAmcGVyY250OywgJm5zdXA7
CisgICAgLy8gYW5kICZzdXBsOyBmb3Igc2VyaWFsaXphdGlvbi4KKyAgICAvLworICAgIC8vIElm
IHhtbEVudGl0aWVzIGlzIHRydWUsIFdlYkVudGl0aWVzIHdpbGwgb25seSBjb250YWluIHN0YW5k
YXJkIFhNTAorICAgIC8vIGVudGl0aWVzLgorICAgIGV4cGxpY2l0IFdlYkVudGl0aWVzKGJvb2wg
eG1sRW50aXRpZXMpOworCisgICAgLy8gQ2hlY2sgd2hldGhlciBzcGVjaWZpZWQgdW5pY29kZSBo
YXMgY29ycmVzcG9uZGluZyBodG1sIG9yIHhtbCBidWlsdC1pbgorICAgIC8vIGVudGl0eSBuYW1l
LiBJZiB5ZXMsIHJldHVybiB0aGUgZW50aXR5IG5vdGF0aW9uLiBJZiBub3QsIHJldHVybnMgYW4K
KyAgICAvLyBlbXB0eSBzdHJpbmcuIFBhcmFtZXRlciBpc0hUTUwgaW5kaWNhdGVzIGNoZWNrIHRo
ZSBjb2RlIGluIGh0bWwgZW50aXR5CisgICAgLy8gbWFwIG9yIGluIHhtbCBlbnRpdHkgbWFwLgor
ICAgIFdlYkNvcmU6OlN0cmluZyBlbnRpdHlOYW1lQnlDb2RlKGludCBjb2RlKSBjb25zdDsKKwor
ICAgIC8vIFJldHVybnMgYSBuZXcgc3RyaW5nIHdpdGggY29ycmVzcG9uZGluZyBlbnRpdHkgbmFt
ZXMgcmVwbGFjZWQuCisgICAgV2ViQ29yZTo6U3RyaW5nIGNvbnZlcnRFbnRpdGllc0luU3RyaW5n
KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpIGNvbnN0OworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhh
c2hNYXA8aW50LCBXZWJDb3JlOjpTdHJpbmc+IEVudGl0aWVzTWFwVHlwZTsKKyAgICAvLyBBbiBp
bnRlcm5hbCBvYmplY3QgdGhhdCBtYXBzIHRoZSBVbmljb2RlIGNoYXJhY3RlciB0byBjb3JyZXNw
b25kaW5nCisgICAgLy8gZW50aXR5IG5vdGF0aW9uLgorICAgIEVudGl0aWVzTWFwVHlwZSBtX2Vu
dGl0aWVzTWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCmluZGV4IDA2ZDM5NGYuLjdkMTZhMmMgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKQEAgLTEyMiw2ICsxMjIsNyBAQAogI2luY2x1ZGUg
IlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIldlYkNvbnNvbGVNZXNzYWdlLmgiCiAjaW5jbHVk
ZSAiV2ViRGF0YVNvdXJjZUltcGwuaCIKKyNpbmNsdWRlICJXZWJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIldlYkZpbmRPcHRpb25zLmgiCiAjaW5jbHVkZSAiV2ViRm9ybUVsZW1lbnQuaCIKICNpbmNs
dWRlICJXZWJGcmFtZUNsaWVudC5oIgpAQCAtMzkxLDYgKzM5MiwxMSBAQCBXZWJVUkwgV2ViRnJh
bWVJbXBsOjpvcGVuU2VhcmNoRGVzY3JpcHRpb25VUkwoKSBjb25zdAogICAgIHJldHVybiBXZWJV
UkwoKTsKIH0KIAorV2ViU3RyaW5nIFdlYkZyYW1lSW1wbDo6ZW5jb2RpbmcoKSBjb25zdAorewor
ICAgIHJldHVybiBmcmFtZSgpLT5sb2FkZXIoKS0+ZW5jb2RpbmcoKTsKK30KKwogV2ViU2l6ZSBX
ZWJGcmFtZUltcGw6OnNjcm9sbE9mZnNldCgpIGNvbnN0CiB7CiAgICAgRnJhbWVWaWV3KiB2aWV3
ID0gZnJhbWVWaWV3KCk7CkBAIC01MTUsNiArNTIxLDEzIEBAIFdlYkZyYW1lKiBXZWJGcmFtZUlt
cGw6OmZpbmRDaGlsZEJ5RXhwcmVzc2lvbihjb25zdCBXZWJTdHJpbmcmIHhwYXRoKSBjb25zdAog
ICAgIHJldHVybiBmcm9tRnJhbWUoZnJhbWVFbGVtZW50LT5jb250ZW50RnJhbWUoKSk7CiB9CiAK
K1dlYkRvY3VtZW50IFdlYkZyYW1lSW1wbDo6ZG9jdW1lbnQoKSBjb25zdAoreworICAgIGlmICgh
bV9mcmFtZSB8fCAhbV9mcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIFdlYkRvY3Vt
ZW50KCk7CisgICAgcmV0dXJuIFdlYkRvY3VtZW50KG1fZnJhbWUtPmRvY3VtZW50KCkpOworfQor
CiB2b2lkIFdlYkZyYW1lSW1wbDo6Zm9ybXMoV2ViVmVjdG9yPFdlYkZvcm1FbGVtZW50PiYgcmVz
dWx0cykgY29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUpCkBAIC01MzMsNiArNTQ2LDEyIEBAIHZv
aWQgV2ViRnJhbWVJbXBsOjpmb3JtcyhXZWJWZWN0b3I8V2ViRm9ybUVsZW1lbnQ+JiByZXN1bHRz
KSBjb25zdAogICAgIHJlc3VsdHMuc3dhcCh0ZW1wKTsKIH0KIAorV2ViRnJhbWUqIFdlYkZyYW1l
SW1wbDo6ZnJvbUZyYW1lRWxlbWVudChXZWJFbGVtZW50JiBlbGVtZW50KSBjb25zdAoreworICAg
IFJlZlB0cjxFbGVtZW50PiBlID0gZWxlbWVudC5vcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2Vi
Q29yZTo6RWxlbWVudD4oKTsKKyAgICByZXR1cm4gZnJvbUZyYW1lT3duZXJFbGVtZW50KGUuZ2V0
KCkpOworfQorCiBXZWJTZWN1cml0eU9yaWdpbiBXZWJGcmFtZUltcGw6OnNlY3VyaXR5T3JpZ2lu
KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUtPmRvY3VtZW50KCkpCkBA
IC0xNjE5LDYgKzE2MzgsMTkgQEAgV2ViRnJhbWVJbXBsKiBXZWJGcmFtZUltcGw6OmZyb21GcmFt
ZShGcmFtZSogZnJhbWUpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lTG9hZGVyQ2xpZW50
SW1wbCo+KGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpLT53ZWJGcmFtZSgpOwogfQogCitXZWJG
cmFtZUltcGwqIFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lT3duZXJFbGVtZW50KEVsZW1lbnQqIGVs
ZW1lbnQpCit7CisgICAgaWYgKCFlbGVtZW50CisgICAgICAgIHx8ICFlbGVtZW50LT5pc0ZyYW1l
T3duZXJFbGVtZW50KCkKKyAgICAgICAgfHwgKCFlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aWZyYW1lVGFnKQorICAgICAgICAgICAgJiYgIWVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpmcmFtZVRhZykpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFdlYkNvcmU6OkhUTUxG
cmFtZU93bmVyRWxlbWVudCogZnJhbWVFbGVtZW50ID0KKyAgICAgICAgc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgcmV0dXJuIGZyb21G
cmFtZShmcmFtZUVsZW1lbnQtPmNvbnRlbnRGcmFtZSgpKTsKK30KKyAgICAKIFdlYlZpZXdJbXBs
KiBXZWJGcmFtZUltcGw6OnZpZXdJbXBsKCkgY29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUpCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaAppbmRleCAwNTA2NzViLi5hZjhjYWFiIDEwMDY0NAot
LS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgKQEAgLTY1LDYgKzY1LDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgV2ViVVJMIHVybCgpIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViVVJMIGZhdkljb25VUkwo
KSBjb25zdDsKICAgICB2aXJ0dWFsIFdlYlVSTCBvcGVuU2VhcmNoRGVzY3JpcHRpb25VUkwoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBlbmNvZGluZygpIGNvbnN0OwogICAgIHZpcnR1
YWwgV2ViU2l6ZSBzY3JvbGxPZmZzZXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFdlYlNpemUgY29u
dGVudHNTaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgY29udGVudHNQcmVmZXJyZWRXaWR0
aCgpIGNvbnN0OwpAQCAtODIsNyArODMsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJGcmFt
ZSogdHJhdmVyc2VQcmV2aW91cyhib29sIHdyYXApIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViRnJh
bWUqIGZpbmRDaGlsZEJ5TmFtZShjb25zdCBXZWJTdHJpbmcmKSBjb25zdDsKICAgICB2aXJ0dWFs
IFdlYkZyYW1lKiBmaW5kQ2hpbGRCeUV4cHJlc3Npb24oY29uc3QgV2ViU3RyaW5nJikgY29uc3Q7
CisgICAgdmlydHVhbCBXZWJEb2N1bWVudCBkb2N1bWVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
dm9pZCBmb3JtcyhXZWJWZWN0b3I8V2ViRm9ybUVsZW1lbnQ+JikgY29uc3Q7CisgICAgdmlydHVh
bCBXZWJGcmFtZSogZnJvbUZyYW1lRWxlbWVudChXZWJFbGVtZW50JikgY29uc3Q7CiAgICAgdmly
dHVhbCBXZWJTZWN1cml0eU9yaWdpbiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBncmFudFVuaXZlcnNhbEFjY2VzcygpOwogICAgIHZpcnR1YWwgTlBPYmplY3QqIHdp
bmRvd09iamVjdCgpIGNvbnN0OwpAQCAtMTU3LDcgKzE2MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIFdlYlVSTCBjb21wbGV0ZVVSTChjb25zdCBXZWJTdHJpbmcmIHVybCkgY29uc3Q7CiAgICAg
dmlydHVhbCBXZWJTdHJpbmcgY29udGVudEFzVGV4dChzaXplX3QgbWF4Q2hhcnMpIGNvbnN0Owog
ICAgIHZpcnR1YWwgV2ViU3RyaW5nIGNvbnRlbnRBc01hcmt1cCgpIGNvbnN0OwotCisgICAgCiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViRnJhbWVJbXBsPiBjcmVhdGUoV2ViRnJhbWVDbGllbnQq
IGNsaWVudCk7CiAgICAgfldlYkZyYW1lSW1wbCgpOwogCkBAIC0xNzQsNiArMTc3LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgY3JlYXRlRnJhbWVWaWV3KCk7CiAKICAgICBzdGF0aWMgV2ViRnJhbWVJ
bXBsKiBmcm9tRnJhbWUoV2ViQ29yZTo6RnJhbWUqIGZyYW1lKTsKKyAgICBzdGF0aWMgV2ViRnJh
bWVJbXBsKiBmcm9tRnJhbWVPd25lckVsZW1lbnQoV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCk7
CiAKICAgICBXZWJWaWV3SW1wbCogdmlld0ltcGwoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJOb2RlLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9k
ZS5jcHAKaW5kZXggOTY1YzQxMi4uNGUyOWY3MCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJOb2RlLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5vZGUuY3BwCkBA
IC0zNSw5ICszNSwxMiBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXJDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5vZGVMaXN0Lmgi
CisjaW5jbHVkZSAibWFya3VwLmgiCiAKICNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKICNpbmNs
dWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJWZWN0b3IuaCIKIAogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAKQEAgLTYxLDYgKzY0LDExIEBAIHZvaWQgV2ViTm9kZTo6YXNzaWdu
KGNvbnN0IFdlYk5vZGUmIG90aGVyKQogICAgIGFzc2lnbihwKTsKIH0KIAorV2ViTm9kZTo6Tm9k
ZVR5cGUgV2ViTm9kZTo6bm9kZVR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXZWJOb2RlOjpOb2RlVHlwZT4obV9wcml2YXRlLT5ub2RlVHlwZSgpKTsKK30KKwogV2ViTm9k
ZSBXZWJOb2RlOjpwYXJlbnROb2RlKCkgY29uc3QKIHsKICAgICByZXR1cm4gUGFzc1JlZlB0cjxO
b2RlPihjb25zdF9jYXN0PE5vZGUqPihtX3ByaXZhdGUtPnBhcmVudE5vZGUoKSkpOwpAQCAtNzEs
NiArNzksMTEgQEAgV2ViU3RyaW5nIFdlYk5vZGU6Om5vZGVOYW1lKCkgY29uc3QKICAgICByZXR1
cm4gbV9wcml2YXRlLT5ub2RlTmFtZSgpOwogfQogCitXZWJTdHJpbmcgV2ViTm9kZTo6bm9kZVZh
bHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5ub2RlVmFsdWUoKTsKK30KKwog
V2ViTm9kZTo6V2ViTm9kZShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Tm9kZT4mIG5v
ZGUpCiAgICAgOiBtX3ByaXZhdGUoc3RhdGljX2Nhc3Q8V2ViTm9kZVByaXZhdGUqPihub2RlLnJl
bGVhc2VSZWYoKSkpCiB7CkBAIC0xMDAsNCArMTEzLDUzIEBAIFdlYkZyYW1lKiBXZWJOb2RlOjpm
cmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuIFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKG1fcHJpdmF0
ZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CiB9CiAKK1dlYk5vZGUgV2ViTm9kZTo6Zmlyc3RDaGls
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYk5vZGUobV9wcml2YXRlLT5maXJzdENoaWxkKCkp
OworfQorCitXZWJOb2RlIFdlYk5vZGU6Omxhc3RDaGlsZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFdlYk5vZGUobV9wcml2YXRlLT5sYXN0Q2hpbGQoKSk7Cit9CisKK1dlYk5vZGUgV2ViTm9kZTo6
cHJldmlvdXNTaWJsaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViTm9kZShtX3ByaXZhdGUt
PnByZXZpb3VzU2libGluZygpKTsKK30KKworV2ViTm9kZSBXZWJOb2RlOjpuZXh0U2libGluZygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYk5vZGUobV9wcml2YXRlLT5uZXh0U2libGluZygpKTsK
K30KKworYm9vbCBXZWJOb2RlOjpoYXNDaGlsZE5vZGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wcml2YXRlLT5oYXNDaGlsZE5vZGVzKCk7Cit9CisKK1dlYlZlY3RvcjxXZWJOb2RlPiBXZWJO
b2RlOjpjaGlsZE5vZGVzKCkKK3sKKyAgICBXVEY6OlZlY3RvcjxXZWJOb2RlPiByZXM7CisgICAg
V1RGOjpQYXNzUmVmUHRyPE5vZGVMaXN0PiBub2RlTGlzdCA9IG1fcHJpdmF0ZS0+Y2hpbGROb2Rl
cygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlTGlzdC0+bGVuZ3RoKCk7IGkr
KykKKyAgICAgICAgcmVzLmFwcGVuZChub2RlTGlzdC0+aXRlbShpKSk7CisgICAgcmV0dXJuIFdl
YlZlY3RvcjxXZWJOb2RlPihyZXMpOworfQorCitXZWJTdHJpbmcgV2ViTm9kZTo6Y3JlYXRlTWFy
a3VwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y3JlYXRlTWFya3VwKG1fcHJpdmF0
ZSk7Cit9CisKK2Jvb2wgV2ViTm9kZTo6aXNUZXh0Tm9kZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+aXNUZXh0Tm9kZSgpOworfQorCitib29sIFdlYk5vZGU6OmlzRWxlbWVudE5v
ZGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzRWxlbWVudE5vZGUoKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYk5vZGVDb2xsZWN0aW9uLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZUNvbGxl
Y3Rpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MzBjNzIKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5vZGVDb2xsZWN0aW9uLmNw
cApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYk5vZGVD
b2xsZWN0aW9uLmgiCisKKyNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIk5v
ZGUuaCIKKworI2luY2x1ZGUgIldlYk5vZGUuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
dm9pZCBXZWJOb2RlQ29sbGVjdGlvbjo6cmVzZXQoKQoreworICAgIGFzc2lnbigwKTsKK30KKwor
dm9pZCBXZWJOb2RlQ29sbGVjdGlvbjo6YXNzaWduKGNvbnN0IFdlYk5vZGVDb2xsZWN0aW9uJiBv
dGhlcikKK3sKKyAgICBIVE1MQ29sbGVjdGlvbiogcCA9IGNvbnN0X2Nhc3Q8SFRNTENvbGxlY3Rp
b24qPihvdGhlci5tX3ByaXZhdGUpOworICAgIGlmIChwKQorICAgICAgICBwLT5yZWYoKTsKKyAg
ICBhc3NpZ24ocCk7Cit9CisKK1dlYk5vZGVDb2xsZWN0aW9uOjpXZWJOb2RlQ29sbGVjdGlvbihj
b25zdCBXVEY6OlBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+JiBjb2wpCisgICAgOiBtX3ByaXZh
dGUoc3RhdGljX2Nhc3Q8SFRNTENvbGxlY3Rpb24qPihjb2wucmVsZWFzZVJlZigpKSkKK3sKK30K
Kwordm9pZCBXZWJOb2RlQ29sbGVjdGlvbjo6YXNzaWduKEhUTUxDb2xsZWN0aW9uKiBwKQorewor
ICAgIC8vIHAgaXMgYWxyZWFkeSByZWYnZCBmb3IgdXMgYnkgdGhlIGNhbGxlcgorICAgIGlmICht
X3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICBtX3ByaXZhdGUgPSBw
OworfQorCit1bnNpZ25lZCBXZWJOb2RlQ29sbGVjdGlvbjo6bGVuZ3RoKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5sZW5ndGgoKTsKK30KKworV2ViTm9kZSBXZWJOb2RlQ29sbGVj
dGlvbjo6bmV4dEl0ZW0oKSBjb25zdAoreworICAgIHJldHVybiBXZWJOb2RlKG1fcHJpdmF0ZS0+
bmV4dEl0ZW0oKSk7Cit9CisKK1dlYk5vZGUgV2ViTm9kZUNvbGxlY3Rpb246OmZpcnN0SXRlbSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYk5vZGUobV9wcml2YXRlLT5maXJzdEl0ZW0oKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJQYWdlU2VyaWFsaXplci5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJp
YWxpemVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjBiZWU3Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5j
cHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQYWdl
U2VyaWFsaXplci5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJL
VVJMLmgiCisKKyNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxp
emVyQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmgiCisjaW5jbHVk
ZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCisjaW5jbHVkZSAiV2ViVVJM
LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Ym9vbCBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKFdlYkZyYW1lKiBmcmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlY3Vyc2l2ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudCogY2xpZW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+
JiBsaW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0
b3I8V2ViU3RyaW5nPiYgbG9jYWxQYXRocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBXZWJTdHJpbmcmIGxvY2FsRGlyZWN0b3J5TmFtZSkKK3sKKyAgICBXZWJQYWdl
U2VyaWFsaXplckltcGwgc2VyaWFsaXplckltcGwoCisgICAgICAgIGZyYW1lLCByZWN1cnNpdmUs
IGNsaWVudCwgbGlua3MsIGxvY2FsUGF0aHMsIGxvY2FsRGlyZWN0b3J5TmFtZSk7CisgICAgcmV0
dXJuIHNlcmlhbGl6ZXJJbXBsLnNlcmlhbGl6ZSgpOworfQorCitXZWJTdHJpbmcgV2ViUGFnZVNl
cmlhbGl6ZXI6OmdlbmVyYXRlTWV0YUNoYXJzZXREZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcm
IGNoYXJzZXQpCit7CisgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCI8TUVUQSBodHRwLWVxdWl2
PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD0lc1wiPiIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQudXRmOCgpLmRhdGEoKSk7Cit9CisKK1dl
YlN0cmluZyBXZWJQYWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVNYXJrT2ZUaGVXZWJEZWNsYXJhdGlv
bihjb25zdCBXZWJVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIlxuPCEt
LSBzYXZlZCBmcm9tIHVybD0oJTA0ZCklcyAtLT5cbiIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludD4odXJsLnNwZWMoKS5sZW5ndGgoKSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVybC5zcGVjKCkuZGF0YSgpKTsKK30KKworV2ViU3RyaW5nIFdlYlBhZ2VT
ZXJpYWxpemVyOjpnZW5lcmF0ZUJhc2VUYWdEZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGJh
c2VUYXJnZXQpCit7CisgICAgU3RyaW5nIHRhcmdldERlY2xhcmF0aW9uOworICAgIGlmICghYmFz
ZVRhcmdldC5pc0VtcHR5KCkpCisgICAgICAgIHRhcmdldERlY2xhcmF0aW9uID0gU3RyaW5nOjpm
b3JtYXQoIiB0YXJnZXQ9XCIlc1wiIiwgYmFzZVRhcmdldC51dGY4KCkuZGF0YSgpKTsKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmb3JtYXQoIjxCQVNFIGhyZWY9XCIuXCIlcz4iLCB0YXJnZXREZWNsYXJh
dGlvbi51dGY4KCkuZGF0YSgpKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuY3BwIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYWUzNWIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5jcHAKQEAgLTAsMCArMSw1NDMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBIb3cgd2UgaGFuZGxlIHRoZSBiYXNlIHRhZyBiZXR0ZXIuCisvLyBDdXJyZW50IHN0YXR1czoK
Ky8vIEF0IG5vdyB0aGUgbm9ybWFsIHdheSB3ZSB1c2UgdG8gaGFuZGxpbmcgYmFzZSB0YWcgaXMK
Ky8vIGEpIEZvciB0aG9zZSBsaW5rcyB3aGljaCBoYXZlIGNvcnJlc3BvbmRpbmcgbG9jYWwgc2F2
ZWQgZmlsZXMsIHN1Y2ggYXMKKy8vIHNhdmFibGUgQ1NTLCBKYXZhU2NyaXB0IGZpbGVzLCB0aGV5
IHdpbGwgYmUgd3JpdHRlbiB0byByZWxhdGl2ZSBVUkxzIHdoaWNoCisvLyBwb2ludCB0byBsb2Nh
bCBzYXZlZCBmaWxlLiBXaHkgdGhvc2UgbGlua3MgY2FuIG5vdCBiZSByZXNvbHZlZCBhcyBhYnNv
bHV0ZQorLy8gZmlsZSBVUkxzLCBiZWNhdXNlIGlmIHRoZXkgYXJlIHJlc29sdmVkIGFzIGFic29s
dXRlIFVSTHMsIGFmdGVyIG1vdmluZyB0aGUKKy8vIGZpbGUgbG9jYXRpb24gZnJvbSBvbmUgZGly
ZWN0b3J5IHRvIGFub3RoZXIgZGlyZWN0b3J5LCB0aGUgZmlsZSBVUkxzIHdpbGwKKy8vIGJlIGRl
YWQgbGlua3MuCisvLyBiKSBGb3IgdGhvc2UgbGlua3Mgd2hpY2ggaGF2ZSBub3QgY29ycmVzcG9u
ZGluZyBsb2NhbCBzYXZlZCBmaWxlcywgc3VjaCBhcworLy8gbGlua3MgaW4gQSwgQVJFQSB0YWdz
LCB0aGV5IHdpbGwgYmUgcmVzb2x2ZWQgYXMgYWJzb2x1dGUgVVJMcy4KKy8vIGMpIFdlIGNvbW1l
bnQgYWxsIGJhc2UgdGFncyB3aGVuIHNlcmlhbHppbmcgRE9NIGZvciB0aGUgcGFnZS4KKy8vIEZp
cmVGb3ggYWxzbyB1c2VzIGFib3ZlIHdheSB0byBoYW5kbGUgYmFzZSB0YWcuCisvLworLy8gUHJv
YmxlbToKKy8vIFRoaXMgd2F5IGNhbiBub3QgaGFuZGxlIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9u
OgorLy8gdGhlIGJhc2UgdGFnIGlzIHdyaXR0ZW4gYnkgSmF2YVNjcmlwdC4KKy8vIEZvciBleGFt
cGxlLiBUaGUgcGFnZSAid3d3LnlhaG9vLmNvbSIgdXNlCisvLyAiZG9jdW1lbnQud3JpdGUoJzxi
YXNlIGhyZWY9Imh0dHA6Ly93d3cueWFob28uY29tLyIuLi4nKTsiIHRvIHNldHVwIGJhc2UgVVJM
CisvLyBvZiBwYWdlIHdoZW4gbG9hZGluZyBwYWdlLiBTbyB3aGVuIHNhdmluZyBwYWdlIGFzIGNv
bXBsZXRlZC1IVE1MLCB3ZSBhc3N1bWUKKy8vIHRoYXQgd2Ugc2F2ZSAid3d3LnlhaG9vLmNvbSIg
dG8gImM6XHlhaG9vLmh0bSIuIEFmdGVyIHRoZW4gd2UgbG9hZCB0aGUgc2F2ZWQKKy8vIGNvbXBs
ZXRlZC1IVE1MIHBhZ2UsIHRoZW4gdGhlIEphdmFTY3JpcHQgd2lsbCBpbnNlcnQgYSBiYXNlIHRh
ZworLy8gPGJhc2UgaHJlZj0iaHR0cDovL3d3dy55YWhvby5jb20vIi4uLj4gdG8gRE9NLCBzbyBh
bGwgVVJMcyB3aGljaCBwb2ludCB0bworLy8gbG9jYWwgc2F2ZWQgcmVzb3VyY2UgZmlsZXMgd2ls
bCBiZSByZXNvbHZlZCBhcworLy8gImh0dHA6Ly93d3cueWFob28uY29tL3lhaG9vX2ZpbGVzLy4u
LiIsIHdoaWNoIHdpbGwgY2F1c2UgYWxsIHNhdmVkICByZXNvdXJjZQorLy8gZmlsZXMgY2FuIG5v
dCBiZSBsb2FkZWQgY29ycmVjdGx5LiBBbHNvIHRoZSBwYWdlIHdpbGwgYmUgcmVuZGVyZWQgdWds
eSBzaW5jZQorLy8gYWxsIHNhdmVkIHN1Yi1yZXNvdXJjZSBmaWxlcyAoc3VjaCBhcyBDU1MsIEph
dmFTY3JpcHQgZmlsZXMpIGFuZCBzdWItZnJhbWUKKy8vIGZpbGVzIGNhbiBub3QgYmUgZmV0Y2hl
ZC4KKy8vIE5vdyBGaXJlRm94LCBJRSBhbmQgV2ViS2l0IGJhc2VkIEJyb3dzZXIgYWxsIGhhdmUg
dGhpcyBwcm9ibGVtLgorLy8KKy8vIFNvbHV0aW9uOgorLy8gTXkgc29sdXRpb24gaXMgdGhhdCB3
ZSBjb21tZW50IG9sZCBiYXNlIHRhZyBhbmQgd3JpdGUgbmV3IGJhc2UgdGFnOgorLy8gPGJhc2Ug
aHJlZj0iLiIgLi4uPiBhZnRlciB0aGUgcHJldmlvdXMgY29tbWVudGVkIGJhc2UgdGFnLiBJbiBX
ZWJLaXQsIGl0CisvLyBhbHdheXMgdXNlcyB0aGUgbGF0ZXN0ICJocmVmIiBhdHRyaWJ1dGUgb2Yg
YmFzZSB0YWcgdG8gc2V0IGRvY3VtZW50J3MgYmFzZQorLy8gVVJMLiBCYXNlZCBvbiB0aGlzIGJl
aGF2aW9yLCB3aGVuIHdlIGVuY291bnRlciBhIGJhc2UgdGFnLCB3ZSBjb21tZW50IGl0IGFuZAor
Ly8gd3JpdGUgYSBuZXcgYmFzZSB0YWcgPGJhc2UgaHJlZj0iLiI+IGFmdGVyIHRoZSBwcmV2aW91
cyBjb21tZW50ZWQgYmFzZSB0YWcuCisvLyBUaGUgbmV3IGFkZGVkIGJhc2UgdGFnIGNhbiBoZWxw
IGVuZ2luZSB0byBsb2NhdGUgY29ycmVjdCBiYXNlIFVSTCBmb3IKKy8vIGNvcnJlY3RseSBsb2Fk
aW5nIGxvY2FsIHNhdmVkIHJlc291cmNlIGZpbGVzLiBBbHNvIEkgdGhpbmsgd2UgbmVlZCB0byBp
bmhlcml0CisvLyB0aGUgYmFzZSB0YXJnZXQgdmFsdWUgZnJvbSBkb2N1bWVudCBvYmplY3Qgd2hl
biBhcHBlbmRpbmcgbmV3IGJhc2UgdGFnLgorLy8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGJhc2Ug
dGFncyBpbiBvcmlnaW5hbCBkb2N1bWVudCwgd2Ugd2lsbCBjb21tZW50IGFsbCBvbGQKKy8vIGJh
c2UgdGFncyBhbmQgYXBwZW5kIG5ldyBiYXNlIHRhZyBhZnRlciBlYWNoIG9sZCBiYXNlIHRhZyBi
ZWNhdXNlIHdlIGRvIG5vdAorLy8ga25vdyB0aG9zZSBvbGQgYmFzZSB0YWdzIGFyZSBvcmlnaW5h
bCBjb250ZW50IG9yIGFkZGVkIGJ5IEphdmFTY3JpcHQuIElmCisvLyB0aGV5IGFyZSBhZGRlZCBi
eSBKYXZhU2NyaXB0LCBpdCBtZWFucyB3aGVuIGxvYWRpbmcgc2F2ZWQgcGFnZSwgdGhlIHNjcmlw
dChzKQorLy8gd2lsbCBzdGlsbCBpbnNlcnQgYmFzZSB0YWcocykgdG8gRE9NLCBzbyB0aGUgbmV3
IGFkZGVkIGJhc2UgdGFnKHMpIGNhbgorLy8gb3ZlcnJpZGUgdGhlIGluY29ycmVjdCBiYXNlIFVS
TCBhbmQgbWFrZSBzdXJlIHdlIGFsd2F5IGxvYWQgY29ycmVjdCBsb2NhbAorLy8gc2F2ZWQgcmVz
b3VyY2UgZmlsZXMuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlU2Vy
aWFsaXplckltcGwuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1l
bnRUeXBlLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgi
CisjaW5jbHVkZSAiSFRNTEFsbENvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5o
IgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxNZXRhRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRl
ICJtYXJrdXAuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmlu
Z0J1aWxkZXIuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKworI2luY2x1ZGUgIkRPTVV0
aWxpdGllc1ByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKKyNpbmNsdWRlICJX
ZWJVUkwuaCIKKyNpbmNsdWRlICJXZWJWZWN0b3IuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBNYXhpbXVtIGxlbmd0aCBvZiBkYXRhIGJ1
ZmZlciB3aGljaCBpcyB1c2VkIHRvIHRlbXBvcmFyeSBzYXZlIGdlbmVyYXRlZAorLy8gaHRtbCBj
b250ZW50IGRhdGEuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgZGF0YUJ1ZmZlckNhcGFjaXR5ID0g
NjU1MzY7CisKK1dlYlBhZ2VTZXJpYWxpemVySW1wbDo6U2VyaWFsaXplRG9tUGFyYW06OlNlcmlh
bGl6ZURvbVBhcmFtKGNvbnN0IEtVUkwmIGN1cnJlbnRGcmFtZVVSTCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHRF
bmNvZGluZyYgdGV4dEVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnQqIGRvYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyYgZGlyZWN0b3J5TmFtZSkKKyAgICA6IGN1cnJlbnRGcmFtZVVSTChjdXJyZW50RnJhbWVVUkwp
CisgICAgLCB0ZXh0RW5jb2RpbmcodGV4dEVuY29kaW5nKQorICAgICwgZG9jKGRvYykKKyAgICAs
IGRpcmVjdG9yeU5hbWUoZGlyZWN0b3J5TmFtZSkKKyAgICAsIGhhc0RvY3R5cGUoZmFsc2UpCisg
ICAgLCBoYXNDaGVja2VkTWV0YShmYWxzZSkKKyAgICAsIHNraXBNZXRhRWxlbWVudCgwKQorICAg
ICwgaXNJblNjcmlwdE9yU3R5bGVUYWcoZmFsc2UpCisgICAgLCBoYXNEb2NEZWNsYXJhdGlvbihm
YWxzZSkKK3sKKyAgICAvLyBDYWNoZSB0aGUgdmFsdWUgc2luY2Ugd2UgY2hlY2sgaXQgbG90cyBv
ZiB0aW1lcy4KKyAgIGlzSFRNTERvY3VtZW50ID0gZG9jLT5pc0hUTUxEb2N1bWVudCgpOworfQor
CitTdHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVP
cGVuVGFnKAorICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIFNlcmlhbGl6ZURvbVBhcmFtKiBw
YXJhbSwgYm9vbCogbmVlZFNraXApCit7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisKKyAg
ICAqbmVlZFNraXAgPSBmYWxzZTsKKyAgICBpZiAocGFyYW0tPmlzSFRNTERvY3VtZW50KSB7Cisg
ICAgICAgIC8vIFNraXAgdGhlIG9wZW4gdGFnIG9mIG9yaWdpbmFsIE1FVEEgdGFnIHdoaWNoIGRl
Y2xhcmUgY2hhcnNldCBzaW5jZSB3ZQorICAgICAgICAvLyBoYXZlIG92ZXJyaWRlZCB0aGUgTUVU
QSB3aGljaCBoYXZlIGNvcnJlY3QgY2hhcnNldCBkZWNsYXJhdGlvbiBhZnRlcgorICAgICAgICAv
LyBzZXJpYWxpemluZyBvcGVuIHRhZyBvZiBIRUFEIGVsZW1lbnQuCisgICAgICAgIGlmIChlbGVt
ZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bWV0YVRhZykpIHsKKyAgICAgICAgICAgIGNvbnN0
IEhUTUxNZXRhRWxlbWVudCogbWV0YSA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxNZXRhRWxlbWVu
dCo+KGVsZW1lbnQpOworICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgTUVUQSB0YWcg
aGFzIGRlY2xhcmVkIGNoYXJzZXQgb3Igbm90LgorICAgICAgICAgICAgU3RyaW5nIGVxdWl2ID0g
bWV0YS0+aHR0cEVxdWl2KCk7CisgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZXF1
aXYsICJjb250ZW50LXR5cGUiKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBjb250ZW50ID0g
bWV0YS0+Y29udGVudCgpOworICAgICAgICAgICAgICAgIGlmIChjb250ZW50Lmxlbmd0aCgpICYm
IGNvbnRlbnQuY29udGFpbnMoImNoYXJzZXQiLCBmYWxzZSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gRmluZCBNRVRBIHRhZyBkZWNsYXJlZCBjaGFyc2V0LCB3ZSBuZWVkIHRvIHNraXAgaXQg
d2hlbgorICAgICAgICAgICAgICAgICAgICAvLyBzZXJpYWxpemluZyBET00uCisgICAgICAgICAg
ICAgICAgICAgIHBhcmFtLT5za2lwTWV0YUVsZW1lbnQgPSBlbGVtZW50OworICAgICAgICAgICAg
ICAgICAgICAqbmVlZFNraXAgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRt
bFRhZykpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIHNvbWV0aGluZyBiZWZvcmUgcHJvY2Vzc2lu
ZyB0aGUgb3BlbiB0YWcgb2YgSEVBRCBlbGVtZW50LgorICAgICAgICAgICAgLy8gRmlyc3Qgd2Ug
YWRkIGRvYyB0eXBlIGRlY2xhcmF0aW9uIGlmIG9yaWdpbmFsIGRvYyBoYXMgaXQuCisgICAgICAg
ICAgICBpZiAoIXBhcmFtLT5oYXNEb2N0eXBlKSB7CisgICAgICAgICAgICAgICAgcGFyYW0tPmhh
c0RvY3R5cGUgPSB0cnVlOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY3JlYXRlTWFy
a3VwKHBhcmFtLT5kb2MtPmRvY3R5cGUoKSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBBZGQgTU9UVyBkZWNsYXJhdGlvbiBiZWZvcmUgaHRtbCB0YWcuCisgICAgICAgICAgICAv
LyBTZWUgaHR0cDovL21zZG4yLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczUzNzYyOChW
Uy44NSkuYXNweC4KKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV2ViUGFnZVNlcmlhbGl6ZXI6
OmdlbmVyYXRlTWFya09mVGhlV2ViRGVjbGFyYXRpb24ocGFyYW0tPmN1cnJlbnRGcmFtZVVSTCkp
OworICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpiYXNl
VGFnKSkgeworICAgICAgICAgICAgLy8gQ29tbWVudCB0aGUgQkFTRSB0YWcgd2hlbiBzZXJpYWxp
emluZyBkb20uCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCI8IS0tIik7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBXcml0ZSBYTUwgZGVjbGFyYXRpb24uCisgICAgICAg
IGlmICghcGFyYW0tPmhhc0RvY0RlY2xhcmF0aW9uKSB7CisgICAgICAgICAgICBwYXJhbS0+aGFz
RG9jRGVjbGFyYXRpb24gPSB0cnVlOworICAgICAgICAgICAgLy8gR2V0IGVuY29kaW5nIGluZm8u
CisgICAgICAgICAgICBTdHJpbmcgeG1sRW5jb2RpbmcgPSBwYXJhbS0+ZG9jLT54bWxFbmNvZGlu
ZygpOworICAgICAgICAgICAgaWYgKHhtbEVuY29kaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICB4bWxFbmNvZGluZyA9IHBhcmFtLT5kb2MtPmZyYW1lKCktPmxvYWRlcigpLT5lbmNvZGlu
ZygpOworICAgICAgICAgICAgaWYgKHhtbEVuY29kaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICB4bWxFbmNvZGluZyA9IFVURjhFbmNvZGluZygpLm5hbWUoKTsKKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoIjw/eG1sIHZlcnNpb249XCIiKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQocGFyYW0tPmRvYy0+eG1sVmVyc2lvbigpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
IlwiIGVuY29kaW5nPVwiIik7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHhtbEVuY29kaW5n
KTsKKyAgICAgICAgICAgIGlmIChwYXJhbS0+ZG9jLT54bWxTdGFuZGFsb25lKCkpCisgICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgiXCIgc3RhbmRhbG9uZT1cInllcyIpOworICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgiXCI/PlxuIik7CisgICAgICAgIH0KKyAgICAgICAgLy8gQWRkIGRv
YyB0eXBlIGRlY2xhcmF0aW9uIGlmIG9yaWdpbmFsIGRvYyBoYXMgaXQuCisgICAgICAgIGlmICgh
cGFyYW0tPmhhc0RvY3R5cGUpIHsKKyAgICAgICAgICAgIHBhcmFtLT5oYXNEb2N0eXBlID0gdHJ1
ZTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY3JlYXRlTWFya3VwKHBhcmFtLT5kb2MtPmRv
Y3R5cGUoKSkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQudG9TdHJpbmco
KTsKK30KKworU3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6cG9zdEFjdGlvbkFmdGVyU2Vy
aWFsaXplT3BlblRhZygKKyAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBTZXJpYWxpemVEb21Q
YXJhbSogcGFyYW0pCit7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisKKyAgICBwYXJhbS0+
aGFzQWRkZWRDb250ZW50c0JlZm9yZUVuZCA9IGZhbHNlOworICAgIGlmICghcGFyYW0tPmlzSFRN
TERvY3VtZW50KQorICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisgICAgLy8gQ2hl
Y2sgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUgb3BlbiB0YWcgb2YgSEVBRCBlbGVtZW50CisgICAgaWYg
KCFwYXJhbS0+aGFzQ2hlY2tlZE1ldGEgJiYKKyAgICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmhlYWRUYWcpKSB7CisgICAgICAgIHBhcmFtLT5oYXNDaGVja2VkTWV0YSA9IHRy
dWU7CisgICAgICAgIC8vIENoZWNrIG1ldGEgZWxlbWVudC4gV2ViS2l0IG9ubHkgcHJlLXBhcnNl
IHRoZSBmaXJzdCA1MTIgYnl0ZXMKKyAgICAgICAgLy8gb2YgdGhlIGRvY3VtZW50LiBJZiB0aGUg
d2hvbGUgPEhFQUQ+IGlzIGxhcmdlciBhbmQgbWV0YSBpcyB0aGUKKyAgICAgICAgLy8gZW5kIG9m
IGhlYWQgcGFydCwgdGhlbiB0aGlzIGtpbmQgb2YgcGFnZXMgYXJlbid0IGRlY29kZWQgY29ycmVj
dGx5CisgICAgICAgIC8vIGJlY2F1c2Ugb2YgdGhpcyBpc3N1ZS4gU28gd2hlbiB3ZSBzZXJpYWxp
emUgdGhlIERPTSwgd2UgbmVlZCB0bworICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIG1ldGEgd2ls
bCBpbiBmaXJzdCBjaGlsZCBvZiBoZWFkIHRhZy4KKyAgICAgICAgLy8gU2VlIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjIxLgorICAgICAgICAvLyBGaXJzdCB3ZSBn
ZW5lcmF0ZSBuZXcgY29udGVudCBmb3Igd3JpdGluZyBjb3JyZWN0IE1FVEEgZWxlbWVudC4KKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChXZWJQYWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVNZXRhQ2hhcnNl
dERlY2xhcmF0aW9uKAorICAgICAgICAgICAgU3RyaW5nKHBhcmFtLT50ZXh0RW5jb2RpbmcubmFt
ZSgpKSkpOworCisgICAgICAgIHBhcmFtLT5oYXNBZGRlZENvbnRlbnRzQmVmb3JlRW5kID0gdHJ1
ZTsKKyAgICAgICAgLy8gV2lsbCBzZWFyY2ggZWFjaCBNRVRBIHdoaWNoIGhhcyBjaGFyc2V0IGRl
Y2xhcmF0aW9uLCBhbmQgc2tpcCB0aGVtIGFsbAorICAgICAgICAvLyBpbiBQcmVBY3Rpb25CZWZv
cmVTZXJpYWxpemVPcGVuVGFnLgorICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnNjcmlwdFRhZykgfHwKKyAgICAgICAgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpzdHlsZVRhZykpIHsKKyAgICAgICAgcGFyYW0tPmlzSW5TY3JpcHRPclN0
eWxlVGFnID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9
CisKK1N0cmluZyBXZWJQYWdlU2VyaWFsaXplckltcGw6OnByZUFjdGlvbkJlZm9yZVNlcmlhbGl6
ZUVuZFRhZygKKyAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBTZXJpYWxpemVEb21QYXJhbSog
cGFyYW0sIGJvb2wqIG5lZWRTa2lwKQoreworICAgIFN0cmluZyByZXN1bHQ7CisKKyAgICAqbmVl
ZFNraXAgPSBmYWxzZTsKKyAgICBpZiAoIXBhcmFtLT5pc0hUTUxEb2N1bWVudCkKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAvLyBTa2lwIHRoZSBlbmQgdGFnIG9mIG9yaWdpbmFsIE1FVEEg
dGFnIHdoaWNoIGRlY2xhcmUgY2hhcnNldC4KKyAgICAvLyBOZWVkIG5vdCB0byBjaGVjayB3aGV0
aGVyIGl0J3MgTUVUQSB0YWcgc2luY2Ugd2UgZ3VhcmFudGVlCisgICAgLy8gc2tpcE1ldGFFbGVt
ZW50IGlzIGRlZmluaXRlbHkgTUVUQSB0YWcgaWYgaXQncyBub3QgTlVMTC4KKyAgICBpZiAocGFy
YW0tPnNraXBNZXRhRWxlbWVudCA9PSBlbGVtZW50KQorICAgICAgICAqbmVlZFNraXAgPSB0cnVl
OworICAgIGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHRUYWcp
CisgICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlVGFn
KSkgeworICAgICAgICBBU1NFUlQocGFyYW0tPmlzSW5TY3JpcHRPclN0eWxlVGFnKTsKKyAgICAg
ICAgcGFyYW0tPmlzSW5TY3JpcHRPclN0eWxlVGFnID0gZmFsc2U7CisgICAgfQorCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworLy8gQWZ0ZXIgd2UgZmluaXNoIHNlcmlhbGl6aW5nIGVuZCB0YWcg
b2YgYSBlbGVtZW50LCB3ZSBnaXZlIHRoZSB0YXJnZXQKKy8vIGVsZW1lbnQgYSBjaGFuY2UgdG8g
ZG8gc29tZSBwb3N0IHdvcmsgdG8gYWRkIHNvbWUgYWRkaXRpb25hbCBkYXRhLgorU3RyaW5nIFdl
YlBhZ2VTZXJpYWxpemVySW1wbDo6cG9zdEFjdGlvbkFmdGVyU2VyaWFsaXplRW5kVGFnKAorICAg
IGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSkKK3sKKyAg
ICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKworICAgIGlmICghcGFyYW0tPmlzSFRNTERvY3VtZW50
KQorICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisgICAgLy8gQ29tbWVudCB0aGUg
QkFTRSB0YWcgd2hlbiBzZXJpYWxpemluZyBET00uCisgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpiYXNlVGFnKSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKCItLT4iKTsK
KyAgICAgICAgLy8gQXBwZW5kIGEgbmV3IGJhc2UgdGFnIGRlY2xhcmF0aW9uLgorICAgICAgICBy
ZXN1bHQuYXBwZW5kKFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZUJhc2VUYWdEZWNsYXJhdGlv
bigKKyAgICAgICAgICAgIHBhcmFtLT5kb2MtPmJhc2VUYXJnZXQoKSkpOworICAgIH0KKworICAg
IHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKwordm9pZCBXZWJQYWdlU2VyaWFsaXplcklt
cGw6OnNhdmVIVE1MQ29udGVudFRvQnVmZmVyKAorICAgIGNvbnN0IFN0cmluZyYgcmVzdWx0LCBT
ZXJpYWxpemVEb21QYXJhbSogcGFyYW0pCit7CisgICAgaWYgKCFyZXN1bHQubGVuZ3RoKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICAvLyBDb252ZXJ0IHRoZSB1bmljb2RlIGNvbnRlbnQgdG8gdGFy
Z2V0IGVuY29kaW5nCisgICAgQ1N0cmluZyBlbmNvZGluZ1Jlc3VsdCA9IHBhcmFtLT50ZXh0RW5j
b2RpbmcuZW5jb2RlKAorICAgICAgICByZXN1bHQuY2hhcmFjdGVycygpLCByZXN1bHQubGVuZ3Ro
KCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKworICAgIC8vIGlmIHRoZSBkYXRhIGJ1ZmZl
ciB3aWxsIGJlIGZ1bGwsIHRoZW4gc2VuZCBpdCBvdXQgZmlyc3QuCisgICAgaWYgKGVuY29kaW5n
UmVzdWx0Lmxlbmd0aCgpICsgbV9kYXRhQnVmZmVyLmxlbmd0aCgpID4gZGF0YUJ1ZmZlckNhcGFj
aXR5KSB7CisgICAgICAgIC8vIFNlbmQgZGF0YSB0byBkZWxlZ2F0ZSwgdGVsbCBpdCBub3cgd2Ug
YXJlIHNlcmlhbGl6aW5nIGN1cnJlbnQgZnJhbWUuCisgICAgICAgIG1fY2xpZW50LT5kaWRTZXJp
YWxpemVEYXRhRm9yRnJhbWUocGFyYW0tPmN1cnJlbnRGcmFtZVVSTCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGFCdWZmZXIudG9TdHJpbmcoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQYWdlU2VyaWFsaXpl
ckNsaWVudDo6Q3VycmVudEZyYW1lSXNOb3RGaW5pc2hlZCk7CisgICAgICAgIG1fZGF0YUJ1ZmZl
ci5jbGVhcigpOworICAgIH0KKworICAgIC8vIEFwcGVuZCByZXN1bHQgdG8gZGF0YSBidWZmZXIu
CisgICAgbV9kYXRhQnVmZmVyLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KGVuY29kaW5nUmVzdWx0
LmRhdGEoKSkpOworfQorCit2b2lkIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6b3BlblRhZ1RvU3Ry
aW5nKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSkKK3sKKyAgICAvLyBGSVhN
RTogdXNlIFN0cmluZ0J1aWxkZXIgaW5zdGVhZCBvZiBTdHJpbmcuCisgICAgYm9vbCBuZWVkU2tp
cDsKKyAgICAvLyBEbyBwcmUgYWN0aW9uIGZvciBvcGVuIHRhZy4KKyAgICBTdHJpbmcgcmVzdWx0
ID0gcHJlQWN0aW9uQmVmb3JlU2VyaWFsaXplT3BlblRhZyhlbGVtZW50LCBwYXJhbSwgJm5lZWRT
a2lwKTsKKyAgICBpZiAobmVlZFNraXApCisgICAgICAgIHJldHVybjsKKyAgICAvLyBBZGQgb3Bl
biB0YWcKKyAgICByZXN1bHQgKz0gIjwiICsgZWxlbWVudC0+bm9kZU5hbWUoKTsKKyAgICAvLyBH
byB0aHJvdWdoIGFsbCBhdHRyaWJ1dGVzIGFuZCBzZXJpYWxpemUgdGhlbS4KKyAgICBjb25zdCBO
YW1lZE5vZGVNYXAgKmF0dHJNYXAgPSBlbGVtZW50LT5hdHRyaWJ1dGVzKHRydWUpOworICAgIGlm
IChhdHRyTWFwKSB7CisgICAgICAgIHVuc2lnbmVkIG51bUF0dHJzID0gYXR0ck1hcC0+bGVuZ3Ro
KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1BdHRyczsgaSsrKSB7Cisg
ICAgICAgICAgICByZXN1bHQgKz0gIiAiOworICAgICAgICAgICAgLy8gQWRkIGF0dHJpYnV0ZSBw
YWlyCisgICAgICAgICAgICBjb25zdCBBdHRyaWJ1dGUgKmF0dHJpYnV0ZSA9IGF0dHJNYXAtPmF0
dHJpYnV0ZUl0ZW0oaSk7CisgICAgICAgICAgICByZXN1bHQgKz0gYXR0cmlidXRlLT5uYW1lKCku
dG9TdHJpbmcoKTsKKyAgICAgICAgICAgIHJlc3VsdCArPSAiPVwiIjsKKyAgICAgICAgICAgIGlm
ICghYXR0cmlidXRlLT52YWx1ZSgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgYXR0clZhbHVlID0gYXR0cmlidXRlLT52YWx1ZSgpOworCisgICAgICAgICAgICAg
ICAgLy8gQ2hlY2sgd2hldGhlciB3ZSBuZWVkIHRvIHJlcGxhY2Ugc29tZSByZXNvdXJjZSBsaW5r
cworICAgICAgICAgICAgICAgIC8vIHdpdGggbG9jYWwgcmVzb3VyY2UgcGF0aHMuCisgICAgICAg
ICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUgPSBhdHRyaWJ1dGUtPm5hbWUo
KTsKKyAgICAgICAgICAgICAgICBpZiAoZWxlbWVudEhhc0xlZ2FsTGlua0F0dHJpYnV0ZShlbGVt
ZW50LCBhdHRyTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGxpbmtzIHN0YXJ0
IHdpdGggImphdmFzY3JpcHQ6Iiwgd2UgZG8gbm90IGNoYW5nZSBpdC4KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGF0dHJWYWx1ZS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBhdHRyVmFsdWU7CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBhYnNvbHV0
ZSBsaW5rCisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY29tcGxldGVVUkwgPSBwYXJh
bS0+ZG9jLT5jb21wbGV0ZVVSTChhdHRyVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQ2hlY2sgd2hldGhlciB3ZSBoYXZlIGxvY2FsIGZpbGVzIGZvciB0aG9zZSBsaW5rLgorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbG9jYWxMaW5rcy5jb250YWlucyhjb21wbGV0ZVVS
TCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IG1fbG9jYWxMaW5rcy5n
ZXQoY29tcGxldGVVUkwpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjb21wbGV0ZVVSTDsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChwYXJhbS0+aXNIVE1MRG9jdW1lbnQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQg
Kz0gbV9odG1sRW50aXRpZXMuY29udmVydEVudGl0aWVzSW5TdHJpbmcoYXR0clZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9
IG1feG1sRW50aXRpZXMuY29udmVydEVudGl0aWVzSW5TdHJpbmcoYXR0clZhbHVlKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHQgKz0gIlwiIjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIERvIHBvc3QgYWN0aW9uIGZvciBvcGVuIHRhZy4K
KyAgICBTdHJpbmcgYWRkZWRDb250ZW50cyA9IHBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZU9wZW5U
YWcoZWxlbWVudCwgcGFyYW0pOworICAgIC8vIENvbXBsZXRlIHRoZSBvcGVuIHRhZyBmb3IgZWxl
bWVudCB3aGVuIGl0IGhhcyBjaGlsZC9jaGlsZHJlbi4KKyAgICBpZiAoZWxlbWVudC0+aGFzQ2hp
bGROb2RlcygpIHx8IHBhcmFtLT5oYXNBZGRlZENvbnRlbnRzQmVmb3JlRW5kKQorICAgICAgICBy
ZXN1bHQgKz0gIj4iOworICAgIC8vIEFwcGVuZCB0aGUgYWRkZWQgY29udGVudHMgZ2VuZXJhdGUg
aW4gIHBvc3QgYWN0aW9uIG9mIG9wZW4gdGFnLgorICAgIHJlc3VsdCArPSBhZGRlZENvbnRlbnRz
OworICAgIC8vIFNhdmUgdGhlIHJlc3VsdCB0byBkYXRhIGJ1ZmZlci4KKyAgICBzYXZlSFRNTENv
bnRlbnRUb0J1ZmZlcihyZXN1bHQsIHBhcmFtKTsKK30KKworLy8gU2VyaWFsaXplIGVuZCB0YWcg
b2YgYW4gc3BlY2lmaWVkIGVsZW1lbnQuCit2b2lkIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6ZW5k
VGFnVG9TdHJpbmcoY29uc3QgRWxlbWVudCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pCit7CisgICAg
Ym9vbCBuZWVkU2tpcDsKKyAgICAvLyBEbyBwcmUgYWN0aW9uIGZvciBlbmQgdGFnLgorICAgIFN0
cmluZyByZXN1bHQgPSBwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVFbmRUYWcoZWxlbWVudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRT
a2lwKTsKKyAgICBpZiAobmVlZFNraXApCisgICAgICAgIHJldHVybjsKKyAgICAvLyBXcml0ZSBl
bmQgdGFnIHdoZW4gZWxlbWVudCBoYXMgY2hpbGQvY2hpbGRyZW4uCisgICAgaWYgKGVsZW1lbnQt
Pmhhc0NoaWxkTm9kZXMoKSB8fCBwYXJhbS0+aGFzQWRkZWRDb250ZW50c0JlZm9yZUVuZCkgewor
ICAgICAgICByZXN1bHQgKz0gIjwvIjsKKyAgICAgICAgcmVzdWx0ICs9IGVsZW1lbnQtPm5vZGVO
YW1lKCk7CisgICAgICAgIHJlc3VsdCArPSAiPiI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
Q2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHdyaXRlIGVuZCB0YWcgZm9yIGVtcHR5IGVsZW1lbnQu
CisgICAgICAgIGlmIChwYXJhbS0+aXNIVE1MRG9jdW1lbnQpIHsKKyAgICAgICAgICAgIHJlc3Vs
dCArPSAiPiI7CisgICAgICAgICAgICBjb25zdCBIVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPQor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihlbGVtZW50KTsKKyAg
ICAgICAgICAgIGlmIChodG1sRWxlbWVudC0+ZW5kVGFnUmVxdWlyZW1lbnQoKSA9PSBUYWdTdGF0
dXNSZXF1aXJlZCkgeworICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gd3JpdGUgZW5kIHRh
ZyB3aGVuIGl0IGlzIHJlcXVpcmVkLgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiPC8iOwor
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSBlbGVtZW50LT5ub2RlTmFtZSgpOworICAgICAgICAg
ICAgICAgIHJlc3VsdCArPSAiPiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBGb3IgeG1sIGJhc2UgZG9jdW1lbnQuCisgICAgICAgICAgICByZXN1bHQg
Kz0gIiAvPiI7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gRG8gcG9zdCBhY3Rpb24gZm9yIGVu
ZCB0YWcuCisgICAgcmVzdWx0ICs9IHBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZUVuZFRhZyhlbGVt
ZW50LCBwYXJhbSk7CisgICAgLy8gU2F2ZSB0aGUgcmVzdWx0IHRvIGRhdGEgYnVmZmVyLgorICAg
IHNhdmVIVE1MQ29udGVudFRvQnVmZmVyKHJlc3VsdCwgcGFyYW0pOworfQorCit2b2lkIFdlYlBh
Z2VTZXJpYWxpemVySW1wbDo6YnVpbGRDb250ZW50Rm9yTm9kZShjb25zdCBOb2RlKiBub2RlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXpl
RG9tUGFyYW0qIHBhcmFtKQoreworICAgIHN3aXRjaCAobm9kZS0+bm9kZVR5cGUoKSkgeworICAg
IGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOiB7CisgICAgICAgIC8vIFByb2Nlc3Mgb3BlbiB0YWcg
b2YgZWxlbWVudC4KKyAgICAgICAgb3BlblRhZ1RvU3RyaW5nKHN0YXRpY19jYXN0PGNvbnN0IEVs
ZW1lbnQqPihub2RlKSwgcGFyYW0pOworICAgICAgICAvLyBXYWxrIHRocm91Z2ggdGhlIGNoaWxk
cmVuIG5vZGVzIGFuZCBwcm9jZXNzIGl0LgorICAgICAgICBmb3IgKGNvbnN0IE5vZGUgKmNoaWxk
ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZCAhPSBOVUxMOworICAgICAgICAgICAgIGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAgICBidWlsZENvbnRlbnRGb3JOb2Rl
KGNoaWxkLCBwYXJhbSk7CisgICAgICAgIC8vIFByb2Nlc3MgZW5kIHRhZyBvZiBlbGVtZW50Lgor
ICAgICAgICBlbmRUYWdUb1N0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50Kj4obm9kZSks
IHBhcmFtKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RF
OiB7CisgICAgICAgIHNhdmVIVE1MQ29udGVudFRvQnVmZmVyKGNyZWF0ZU1hcmt1cChub2RlKSwg
cGFyYW0pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVf
Tk9ERToKKyAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX05PREU6CisgICAgY2FzZSBOb2RlOjpET0NV
TUVOVF9GUkFHTUVOVF9OT0RFOiB7CisgICAgICAgIC8vIFNob3VsZCBub3QgZXhpc3QuCisgICAg
ICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgLy8gRG9j
dW1lbnQgdHlwZSBub2RlIGNhbiBiZSBpbiBET00/CisgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9U
WVBFX05PREU6CisgICAgICAgIHBhcmFtLT5oYXNEb2N0eXBlID0gdHJ1ZTsKKyAgICBkZWZhdWx0
OiB7CisgICAgICAgIC8vIEZvciBvdGhlciB0eXBlIG5vZGUsIGNhbGwgZGVmYXVsdCBhY3Rpb24u
CisgICAgICAgIHNhdmVIVE1MQ29udGVudFRvQnVmZmVyKGNyZWF0ZU1hcmt1cChub2RlKSwgcGFy
YW0pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorfQorCitXZWJQYWdlU2VyaWFsaXpl
ckltcGw6OldlYlBhZ2VTZXJpYWxpemVySW1wbChXZWJGcmFtZSogZnJhbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlY3Vyc2l2ZVNlcmlhbGl6
YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQ
YWdlU2VyaWFsaXplckNsaWVudCogY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlVSTD4mIGxpbmtzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdl
YlN0cmluZz4mIGxvY2FsUGF0aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGxvY2FsRGlyZWN0b3J5TmFtZSkKKyAgICA6IG1f
Y2xpZW50KGNsaWVudCkKKyAgICAsIG1fcmVjdXJzaXZlU2VyaWFsaXphdGlvbihyZWN1cnNpdmVT
ZXJpYWxpemF0aW9uKQorICAgICwgbV9mcmFtZXNDb2xsZWN0ZWQoZmFsc2UpCisgICAgLCBtX2xv
Y2FsRGlyZWN0b3J5TmFtZShsb2NhbERpcmVjdG9yeU5hbWUpCisgICAgLCBtX2h0bWxFbnRpdGll
cyhmYWxzZSkKKyAgICAsIG1feG1sRW50aXRpZXModHJ1ZSkKK3sKKyAgICAvLyBNdXN0IHNwZWNp
ZnkgYXZhaWxhYmxlIHdlYmZyYW1lLgorICAgIEFTU0VSVChmcmFtZSk7CisgICAgbV9zcGVjaWZp
ZWRXZWJGcmFtZUltcGwgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZUltcGwqPihmcmFtZSk7CisgICAg
Ly8gTWFrZSBzdXJlIHdlIGhhdmUgbm90LU5VTEwgZGVsZWdhdGUuCisgICAgQVNTRVJUKGNsaWVu
dCk7CisgICAgLy8gQnVpbGQgbG9jYWwgcmVzb3VyY2VzIG1hcC4KKyAgICBBU1NFUlQobGlua3Mu
c2l6ZSgpID09IGxvY2FsUGF0aHMuc2l6ZSgpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0
YXRpY19jYXN0PGludD4obGlua3Muc2l6ZSgpKTsgaSsrKSB7CisgICAgICAgIC8vIEZJWE1FOiBo
b3cgdG8gY29udmVydCBmcm9tIHNwZWMgKFdlYkNTdHJpbmcgdG8gU3RyaW5nKT8KKyAgICAgICAg
S1VSTCB1cmwgPSBsaW5rc1tpXTsKKyAgICAgICAgQVNTRVJUKCFtX2xvY2FsTGlua3MuY29udGFp
bnModXJsLnN0cmluZygpKSk7CisgICAgICAgIG1fbG9jYWxMaW5rcy5zZXQodXJsLnN0cmluZygp
LCBsb2NhbFBhdGhzW2ldKTsKKyAgICB9CisKKyAgICBBU1NFUlQoIW1fZGF0YUJ1ZmZlci5sZW5n
dGgoKSk7Cit9CisKK3ZvaWQgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpjb2xsZWN0VGFyZ2V0RnJh
bWVzKCkKK3sKKyAgICBBU1NFUlQoIW1fZnJhbWVzQ29sbGVjdGVkKTsKKyAgICBtX2ZyYW1lc0Nv
bGxlY3RlZCA9IHRydWU7CisKKyAgICAvLyBGaXJzdCwgcHJvY2VzcyBtYWluIGZyYW1lLgorICAg
IG1fZnJhbWVzLmFwcGVuZChtX3NwZWNpZmllZFdlYkZyYW1lSW1wbCk7CisgICAgLy8gUmV0dXJu
IG5vdyBpZiB1c2VyIG9ubHkgbmVlZHMgdG8gc2VyaWFsaXplIHNwZWNpZmllZCBmcmFtZSwgbm90
IGluY2x1ZGluZworICAgIC8vIGFsbCBzdWItZnJhbWVzLgorICAgIGlmICghbV9yZWN1cnNpdmVT
ZXJpYWxpemF0aW9uKQorICAgICAgICByZXR1cm47CisgICAgLy8gQ29sbGVjdCBhbGwgZnJhbWVz
IGluc2lkZSB0aGUgc3BlY2lmaWVkIGZyYW1lLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3Rh
dGljX2Nhc3Q8aW50PihtX2ZyYW1lcy5zaXplKCkpOyArK2kpIHsKKyAgICAgICAgV2ViRnJhbWVJ
bXBsKiBjdXJyZW50RnJhbWUgPSBtX2ZyYW1lc1tpXTsKKyAgICAgICAgLy8gR2V0IGN1cnJlbnQg
dXNpbmcgZG9jdW1lbnQuCisgICAgICAgIERvY3VtZW50KiBjdXJyZW50RG9jID0gY3VycmVudEZy
YW1lLT5mcmFtZSgpLT5kb2N1bWVudCgpOworICAgICAgICAvLyBHbyB0aHJvdWdoIHN1Yi1mcmFt
ZXMuCisgICAgICAgIFJlZlB0cjxIVE1MQWxsQ29sbGVjdGlvbj4gYWxsID0gY3VycmVudERvYy0+
YWxsKCk7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IGFsbC0+Zmlyc3RJdGVtKCk7IG5vZGUg
IT0gTlVMTDsgbm9kZSA9IGFsbC0+bmV4dEl0ZW0oKSkgeworICAgICAgICAgICAgaWYgKCFub2Rl
LT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOworICAgICAg
ICAgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9CisgICAgICAgICAgICAgICAgV2ViRnJhbWVJ
bXBsOjpmcm9tRnJhbWVPd25lckVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgICAgICBpZiAod2Vi
RnJhbWUpCisgICAgICAgICAgICAgICAgbV9mcmFtZXMuYXBwZW5kKHdlYkZyYW1lKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKworYm9vbCBXZWJQYWdlU2VyaWFsaXplckltcGw6OnNlcmlhbGl6ZSgp
Cit7CisgICAgLy8gQ29sbGVjdCB0YXJnZXQgZnJhbWVzLgorICAgIGlmICghbV9mcmFtZXNDb2xs
ZWN0ZWQpCisgICAgICAgIGNvbGxlY3RUYXJnZXRGcmFtZXMoKTsKKyAgICBib29sIGRpZFNlcmlh
bGl6YXRpb24gPSBmYWxzZTsKKyAgICAvLyBHZXQgS1VSTCBmb3IgbWFpbiBmcmFtZS4KKyAgICBL
VVJMIG1haW5QYWdlVVJMID0gbV9zcGVjaWZpZWRXZWJGcmFtZUltcGwtPmZyYW1lKCktPmxvYWRl
cigpLT51cmwoKTsKKworICAgIC8vIEdvIHRocm91Z2ggYWxsIGZyYW1lcyBmb3Igc2VyaWFsaXpp
bmcgRE9NIGZvciB3aG9sZSBwYWdlLCBpbmNsdWRlCisgICAgLy8gc3ViLWZyYW1lcy4KKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PGludD4obV9mcmFtZXMuc2l6ZSgpKTsgKytp
KSB7CisgICAgICAgIC8vIEdldCBjdXJyZW50IHNlcmlhbGl6aW5nIGZyYW1lLgorICAgICAgICBX
ZWJGcmFtZUltcGwqIGN1cnJlbnRGcmFtZSA9IG1fZnJhbWVzW2ldOworICAgICAgICAvLyBHZXQg
Y3VycmVudCB1c2luZyBkb2N1bWVudC4KKyAgICAgICAgRG9jdW1lbnQqIGN1cnJlbnREb2MgPSBj
dXJyZW50RnJhbWUtPmZyYW1lKCktPmRvY3VtZW50KCk7CisgICAgICAgIC8vIEdldCBjdXJyZW50
IGZyYW1lJ3MgVVJMLgorICAgICAgICBjb25zdCBLVVJMJiBjdXJyZW50RnJhbWVVUkwgPSBjdXJy
ZW50RnJhbWUtPmZyYW1lKCktPmxvYWRlcigpLT51cmwoKTsKKworICAgICAgICAvLyBDaGVjayB3
aGV0aGVyIHdlIGhhdmUgZG9uZSB0aGlzIGRvY3VtZW50LgorICAgICAgICBpZiAobV9sb2NhbExp
bmtzLmNvbnRhaW5zKGN1cnJlbnRGcmFtZVVSTC5zdHJpbmcoKSkpIHsKKyAgICAgICAgICAgIC8v
IEEgbmV3IGRvY3VtZW50LCB3ZSB3aWxsIHNlcmlhbGl6ZSBpdC4KKyAgICAgICAgICAgIGRpZFNl
cmlhbGl6YXRpb24gPSB0cnVlOworICAgICAgICAgICAgLy8gR2V0IHRhcmdldCBlbmNvZGluZyBm
b3IgY3VycmVudCBkb2N1bWVudC4KKyAgICAgICAgICAgIFN0cmluZyBlbmNvZGluZyA9IGN1cnJl
bnRGcmFtZS0+ZnJhbWUoKS0+bG9hZGVyKCktPmVuY29kaW5nKCk7CisgICAgICAgICAgICAvLyBD
cmVhdGUgdGhlIHRleHQgZW5jb2Rpbmcgb2JqZWN0IHdpdGggdGFyZ2V0IGVuY29kaW5nLgorICAg
ICAgICAgICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGluZyhlbmNvZGluZyk7CisgICAgICAgICAg
ICAvLyBDb25zdHJ1Y3Qgc2VyaWFsaXplIHBhcmFtZXRlciBmb3IgbGF0ZSBwcm9jZXNzaW5nIGRv
Y3VtZW50LgorICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0gcGFyYW0oY3VycmVudEZyYW1l
VVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcubGVuZ3Ro
KCkgPyB0ZXh0RW5jb2RpbmcgOiBVVEY4RW5jb2RpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnREb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50RnJhbWVVUkwgPT0gbWFpblBhZ2VVUkwgPyBtX2xvY2FsRGlyZWN0b3J5
TmFtZSA6ICIiKTsKKworICAgICAgICAgICAgLy8gUHJvY2VzcyBjdXJyZW50IGRvY3VtZW50Lgor
ICAgICAgICAgICAgRWxlbWVudCogcm9vdEVsZW1lbnQgPSBjdXJyZW50RG9jLT5kb2N1bWVudEVs
ZW1lbnQoKTsKKyAgICAgICAgICAgIGlmIChyb290RWxlbWVudCkKKyAgICAgICAgICAgICAgICBi
dWlsZENvbnRlbnRGb3JOb2RlKHJvb3RFbGVtZW50LCAmcGFyYW0pOworCisgICAgICAgICAgICAv
LyBTaW5rIHRoZSByZW1haW5kZXIgZGF0YSBhbmQgZmluaXNoIHNlcmlhbGl6aW5nIGN1cnJlbnQg
ZnJhbWUuCisgICAgICAgICAgICBtX2NsaWVudC0+ZGlkU2VyaWFsaXplRGF0YUZvckZyYW1lKGN1
cnJlbnRGcmFtZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9kYXRhQnVmZmVyLnRvU3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50OjpDdXJyZW50RnJh
bWVJc0ZpbmlzaGVkKTsKKyAgICAgICAgICAgIC8vIENsZWFyIHRoZSBidWZmZXIuCisgICAgICAg
ICAgICBtX2RhdGFCdWZmZXIuY2xlYXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFdl
IGhhdmUgZG9uZSBjYWxsIGZyYW1lcywgc28gd2Ugc2VuZCBtZXNzYWdlIHRvIGVtYmVkZGVyIHRv
IHRlbGwgaXQgdGhhdAorICAgIC8vIGZyYW1lcyBhcmUgZmluaXNoZWQgc2VyaWFsaXppbmcuCisg
ICAgQVNTRVJUKCFtX2RhdGFCdWZmZXIubGVuZ3RoKCkpOworICAgIG1fY2xpZW50LT5kaWRTZXJp
YWxpemVEYXRhRm9yRnJhbWUoS1VSTCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9kYXRhQnVmZmVyLnRvU3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudDo6QWxsRnJhbWVzQXJlRmlu
aXNoZWQpOworICAgIHJldHVybiBkaWRTZXJpYWxpemF0aW9uOworfQorCit9ICAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxp
emVySW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODhlMTFmCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuaApAQCAtMCww
ICsxLDE5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsX2gKKyNkZWZpbmUgV2ViUGFn
ZVNlcmlhbGl6ZXJJbXBsX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVk
ZSAiU3RyaW5nQnVpbGRlci5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKworI2luY2x1ZGUg
IldlYkVudGl0aWVzLmgiCisjaW5jbHVkZSAiV2ViUGFnZVNlcmlhbGl6ZXIuaCIKKyNpbmNsdWRl
ICJXZWJQYWdlU2VyaWFsaXplckNsaWVudC5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorI2lu
Y2x1ZGUgIldlYlVSTC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNz
IEVsZW1lbnQ7CitjbGFzcyBOb2RlOworY2xhc3MgU3RyaW5nOworY2xhc3MgVGV4dEVuY29kaW5n
OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkZyYW1lSW1wbDsKKworLy8gR2V0
IGh0bWwgZGF0YSBieSBzZXJpYWxpemluZyBhbGwgZnJhbWVzIG9mIGN1cnJlbnQgcGFnZSB3aXRo
IGxpc3RzCisvLyB3aGljaCBjb250YWluIGFsbCByZXNvdXJjZSBsaW5rcyB0aGF0IGhhdmUgbG9j
YWwgY29weS4KKy8vIGNvbnRhaW4gYWxsIHNhdmVkIGF1eGlsaWFyeSBmaWxlcyBpbmNsdWRlZCBh
bGwgc3ViIGZyYW1lcyBhbmQgcmVzb3VyY2VzLgorLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGZpbmQg
b3V0IGFsbCBmcmFtZXMgYW5kIHNlcmlhbGl6ZSB0aGVtIHRvIEhUTUwgZGF0YS4KKy8vIFdlIGhh
dmUgYSBkYXRhIGJ1ZmZlciB0byB0ZW1wb3Jhcnkgc2F2aW5nIGdlbmVyYXRlZCBodG1sIGRhdGEu
IFdlIHdpbGwKKy8vIHNlcXVlbnRpYWxseSBjYWxsIFdlYlZpZXdEZWxlZ2F0ZTo6U2VuZFNlcmlh
bGl6ZWRIdG1sRGF0YSBvbmNlIHRoZSBkYXRhCisvLyBidWZmZXIgaXMgZnVsbC4gU2VlIGNvbW1l
bnRzIG9mIFdlYlZpZXdEZWxlZ2F0ZTo6U2VuZFNlcmlhbGl6ZWRIdG1sRGF0YQorLy8gZm9yIGdl
dHRpbmcgbW9yZSBpbmZvcm1hdGlvbi4KK2NsYXNzIFdlYlBhZ2VTZXJpYWxpemVySW1wbCB7Citw
dWJsaWM6CisgICAgLy8gRG8gc2VyaWFsaXphdGlvbiBhY3Rpb24uIFJldHVybiBmYWxzZSBtZWFu
cyBubyBhdmFpbGFibGUgZnJhbWUgaGFzIGJlZW4KKyAgICAvLyBzZXJpYWxpemVkLCBvdGhlcndp
c2UgcmV0dXJuIHRydWUuCisgICAgYm9vbCBzZXJpYWxpemUoKTsKKyAgICAvLyBUaGUgcGFyYW1l
dGVyIHNwZWNpZmllcyB3aGljaCBmcmFtZSBuZWVkIHRvIGJlIHNlcmlhbGl6ZWQuCisgICAgLy8g
VGhlIHBhcmFtZXRlciByZWN1cnNpdmVfc2VyaWFsaXphdGlvbiBzcGVjaWZpZXMgd2hldGhlciB3
ZSBuZWVkIHRvCisgICAgLy8gc2VyaWFsaXplIGFsbCBzdWIgZnJhbWVzIG9mIHRoZSBzcGVjaWZp
ZWQgZnJhbWUgb3Igbm90LgorICAgIC8vIFRoZSBwYXJhbWV0ZXIgZGVsZWdhdGUgc3BlY2lmaWVz
IHRoZSBwb2ludGVyIG9mIGludGVyZmFjZQorICAgIC8vIERvbVNlcmlhbGl6ZXJEZWxlZ2F0ZSBw
cm92aWRlIHNpbmsgaW50ZXJmYWNlIHdoaWNoIGNhbiByZWNlaXZlIHRoZQorICAgIC8vIGluZGl2
aWR1YWwgY2h1bmtzIG9mIGRhdGEgdG8gYmUgc2F2ZWQuCisgICAgLy8gVGhlIHBhcmFtZXRlciBs
aW5rcyBjb250YWluIG9yaWdpbmFsIFVSTHMgb2YgYWxsIHNhdmVkIGxpbmtzLgorICAgIC8vIFRo
ZSBwYXJhbWV0ZXIgbG9jYWxfcGF0aHMgY29udGFpbiBjb3JyZXNwb25kaW5nIGxvY2FsIGZpbGUg
cGF0aHMgb2YgYWxsCisgICAgLy8gc2F2ZWQgbGlua3MsIHdoaWNoIG1hdGNoZWQgd2l0aCB2ZWN0
b3I6bGlua3Mgb25lIGJ5IG9uZS4KKyAgICAvLyBUaGUgcGFyYW1ldGVyIGxvY2FsX2RpcmVjdG9y
eV9uYW1lIGlzIHJlbGF0aXZlIHBhdGggb2YgZGlyZWN0b3J5IHdoaWNoCisgICAgLy8gY29udGFp
biBhbGwgc2F2ZWQgYXV4aWxpYXJ5IGZpbGVzIGluY2x1ZGVkIGFsbCBzdWIgZnJhbWVzIGFuZCBy
ZXNvdXJjZXMuCisgICAgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsKFdlYkZyYW1lKiBmcmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZWN1cnNpdmUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KiBjbGllbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+JiBsaW5rcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGxvY2FsUGF0aHMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbG9jYWxEaXJlY3RvcnlO
YW1lKTsKKworcHJpdmF0ZToKKyAgICAvLyBTcGVjaWZpZWQgZnJhbWUgd2hpY2ggbmVlZCB0byBi
ZSBzZXJpYWxpemVkOworICAgIFdlYkZyYW1lSW1wbCogbV9zcGVjaWZpZWRXZWJGcmFtZUltcGw7
CisgICAgLy8gUG9pbnRlciBvZiBXZWJQYWdlU2VyaWFsaXplckNsaWVudAorICAgIFdlYlBhZ2VT
ZXJpYWxpemVyQ2xpZW50KiBtX2NsaWVudDsKKyAgICAvLyBUaGlzIGhhc2ggbWFwIGlzIHVzZWQg
dG8gbWFwIHJlc291cmNlIFVSTCBvZiBvcmlnaW5hbCBsaW5rIHRvIGl0cyBsb2NhbAorICAgIC8v
IGZpbGUgcGF0aC4KKyAgICB0eXBlZGVmIEhhc2hNYXA8V2ViQ29yZTo6U3RyaW5nLCBXZWJDb3Jl
OjpTdHJpbmc+IExpbmtMb2NhbFBhdGhNYXA7CisgICAgLy8gbG9jYWxfbGlua3NfIGluY2x1ZGUg
YWxsIHBhaXIgb2YgbG9jYWwgcmVzb3VyY2UgcGF0aCBhbmQgY29ycmVzcG9uZGluZworICAgIC8v
IG9yaWdpbmFsIGxpbmsuCisgICAgTGlua0xvY2FsUGF0aE1hcCBtX2xvY2FsTGlua3M7CisgICAg
Ly8gRGF0YSBidWZmZXIgZm9yIHNhdmluZyByZXN1bHQgb2Ygc2VyaWFsaXplZCBET00gZGF0YS4K
KyAgICBXZWJDb3JlOjpTdHJpbmdCdWlsZGVyIG1fZGF0YUJ1ZmZlcjsKKyAgICAvLyBQYXNzaW5n
IHRydWUgdG8gcmVjdXJzaXZlX3NlcmlhbGl6YXRpb25fIGluZGljYXRlcyB3ZSB3aWxsIHNlcmlh
bGl6ZSBub3QKKyAgICAvLyBvbmx5IHRoZSBzcGVjaWZpZWQgZnJhbWUgYnV0IGFsc28gYWxsIHN1
Yi1mcmFtZXMgaW4gdGhlIHNwZWNpZmljIGZyYW1lLgorICAgIC8vIE90aGVyd2lzZSB3ZSBvbmx5
IHNlcmlhbGl6ZSB0aGUgc3BlY2lmaWVkIGZyYW1lIGV4Y2x1ZGVkIGFsbCBzdWItZnJhbWVzLgor
ICAgIGJvb2wgbV9yZWN1cnNpdmVTZXJpYWxpemF0aW9uOworICAgIC8vIEZsYWcgaW5kaWNhdGVz
IHdoZXRoZXIgd2UgaGF2ZSBjb2xsZWN0ZWQgYWxsIGZyYW1lcyB3aGljaCBuZWVkIHRvIGJlCisg
ICAgLy8gc2VyaWFsaXplZCBvciBub3Q7CisgICAgYm9vbCBtX2ZyYW1lc0NvbGxlY3RlZDsKKyAg
ICAvLyBMb2NhbCBkaXJlY3RvcnkgbmFtZSBvZiBhbGwgbG9jYWwgcmVzb3VyY2UgZmlsZXMuCisg
ICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBtX2xvY2FsRGlyZWN0b3J5TmFtZTsKKyAgICAvLyBW
ZWN0b3IgZm9yIHNhdmluZyBhbGwgZnJhbWVzIHdoaWNoIG5lZWQgdG8gYmUgc2VyaWFsaXplZC4K
KyAgICBWZWN0b3I8V2ViRnJhbWVJbXBsKj4gbV9mcmFtZXM7CisKKyAgICAvLyBXZWIgZW50aXRp
ZXMgY29udmVyc2lvbiBtYXBzLgorICAgIFdlYkVudGl0aWVzIG1faHRtbEVudGl0aWVzOworICAg
IFdlYkVudGl0aWVzIG1feG1sRW50aXRpZXM7CisKKyAgICBzdHJ1Y3QgU2VyaWFsaXplRG9tUGFy
YW0geworICAgICAgICAvLyBGcmFtZSBVUkwgb2YgY3VycmVudCBwcm9jZXNzaW5nIGRvY3VtZW50
IHByZXNlbnRlZCBieSBHVVJMCisgICAgICAgIGNvbnN0IFdlYkNvcmU6OktVUkwmIGN1cnJlbnRG
cmFtZVVSTDsKKyAgICAgICAgLy8gQ3VycmVudCB1c2luZyB0ZXh0IGVuY29kaW5nIG9iamVjdC4K
KyAgICAgICAgY29uc3QgV2ViQ29yZTo6VGV4dEVuY29kaW5nJiB0ZXh0RW5jb2Rpbmc7CisKKyAg
ICAgICAgLy8gRG9jdW1lbnQgb2JqZWN0IG9mIGN1cnJlbnQgZnJhbWUuCisgICAgICAgIFdlYkNv
cmU6OkRvY3VtZW50KiBkb2M7CisgICAgICAgIC8vIExvY2FsIGRpcmVjdG9yeSBuYW1lIG9mIGFs
bCBsb2NhbCByZXNvdXJjZSBmaWxlcy4KKyAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBk
aXJlY3RvcnlOYW1lOworCisgICAgICAgIC8vIEZsYWcgaW5kaWNhdGVzIGN1cnJlbnQgZG9jIGlz
IGh0bWwgZG9jdW1lbnQgb3Igbm90LiBJdCdzIGEgY2FjaGUgdmFsdWUKKyAgICAgICAgLy8gb2Yg
RG9jdW1lbnQuaXNIVE1MRG9jdW1lbnQoKS4KKyAgICAgICAgYm9vbCBpc0hUTUxEb2N1bWVudDsK
KyAgICAgICAgLy8gRmxhZyB3aGljaCBpbmRpY2F0ZSB3aGV0aGVyIHdlIGhhdmUgbWV0IGRvY3Vt
ZW50IHR5cGUgZGVjbGFyYXRpb24uCisgICAgICAgIGJvb2wgaGFzRG9jdHlwZTsKKyAgICAgICAg
Ly8gRmxhZyB3aGljaCBpbmRpY2F0ZSB3aGV0aGVyIHdpbGwgcHJvY2VzcyBtZXRhIGlzc3VlLgor
ICAgICAgICBib29sIGhhc0NoZWNrZWRNZXRhOworICAgICAgICAvLyBUaGlzIG1ldGEgZWxlbWVu
dCBuZWVkIHRvIGJlIHNraXBwZWQgd2hlbiBzZXJpYWxpemluZyBET00uCisgICAgICAgIGNvbnN0
IFdlYkNvcmU6OkVsZW1lbnQqIHNraXBNZXRhRWxlbWVudDsKKyAgICAgICAgLy8gRmxhZyBpbmRp
Y2F0ZXMgd2UgYXJlIGluIHNjcmlwdCBvciBzdHlsZSB0YWcuCisgICAgICAgIGJvb2wgaXNJblNj
cmlwdE9yU3R5bGVUYWc7CisgICAgICAgIC8vIEZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgd2UgaGF2
ZSB3cml0dGVuIHhtbCBkb2N1bWVudCBkZWNsYXJhdGlvbi4KKyAgICAgICAgLy8gSXQgaXMgb25s
eSB1c2VkIGluIHhtbCBkb2N1bWVudAorICAgICAgICBib29sIGhhc0RvY0RlY2xhcmF0aW9uOwor
ICAgICAgICAvLyBGbGFnIGluZGljYXRlcyB3aGV0aGVyIHdlIGhhdmUgYWRkZWQgYWRkaXRpb25h
bCBjb250ZW50cyBiZWZvcmUgZW5kIHRhZy4KKyAgICAgICAgLy8gVGhpcyBmbGFnIHdpbGwgYmUg
cmUtYXNzaWduZWQgaW4gZWFjaCBjYWxsIG9mIGZ1bmN0aW9uCisgICAgICAgIC8vIFBvc3RBY3Rp
b25BZnRlclNlcmlhbGl6ZU9wZW5UYWcgYW5kIGl0IGNvdWxkIGJlIGNoYW5nZWQgaW4gZnVuY3Rp
b24KKyAgICAgICAgLy8gUHJlQWN0aW9uQmVmb3JlU2VyaWFsaXplRW5kVGFnIGlmIHRoZSBmdW5j
dGlvbiBhZGRzIG5ldyBjb250ZW50cyBpbnRvCisgICAgICAgIC8vIHNlcmlhbGl6YXRpb24gc3Ry
ZWFtLgorICAgICAgICBib29sIGhhc0FkZGVkQ29udGVudHNCZWZvcmVFbmQ7CisKKyAgICAgICAg
Ly8gQ29uc3RydWN0b3IuCisgICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtKGNvbnN0IFdlYkNvcmU6
OktVUkwmIGN1cnJlbnRGcmFtZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
V2ViQ29yZTo6VGV4dEVuY29kaW5nJiB0ZXh0RW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYkNvcmU6OkRvY3VtZW50KiBkb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgZGlyZWN0b3J5TmFtZSk7CisgICAgfTsKKworICAgIC8v
IENvbGxlY3QgYWxsIHRhcmdldCBmcmFtZXMgd2hpY2ggbmVlZCB0byBiZSBzZXJpYWxpemVkLgor
ICAgIHZvaWQgY29sbGVjdFRhcmdldEZyYW1lcygpOworICAgIC8vIEJlZm9yZSB3ZSBiZWdpbiBz
ZXJpYWxpemluZyBvcGVuIHRhZyBvZiBhIGVsZW1lbnQsIHdlIGdpdmUgdGhlIHRhcmdldAorICAg
IC8vIGVsZW1lbnQgYSBjaGFuY2UgdG8gZG8gc29tZSB3b3JrIHByaW9yIHRvIGFkZCBzb21lIGFk
ZGl0aW9uYWwgZGF0YS4KKyAgICBXZWJDb3JlOjpTdHJpbmcgcHJlQWN0aW9uQmVmb3JlU2VyaWFs
aXplT3BlblRhZyhjb25zdCBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZURvbVBhcmFt
KiBwYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sKiBuZWVkU2tpcCk7CisgICAgLy8gQWZ0ZXIgd2UgZmluaXNoIHNlcmlhbGl6aW5n
IG9wZW4gdGFnIG9mIGEgZWxlbWVudCwgd2UgZ2l2ZSB0aGUgdGFyZ2V0CisgICAgLy8gZWxlbWVu
dCBhIGNoYW5jZSB0byBkbyBzb21lIHBvc3Qgd29yayB0byBhZGQgc29tZSBhZGRpdGlvbmFsIGRh
dGEuCisgICAgV2ViQ29yZTo6U3RyaW5nIHBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZU9wZW5UYWco
Y29uc3QgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pOwor
ICAgIC8vIEJlZm9yZSB3ZSBiZWdpbiBzZXJpYWxpemluZyBlbmQgdGFnIG9mIGEgZWxlbWVudCwg
d2UgZ2l2ZSB0aGUgdGFyZ2V0CisgICAgLy8gZWxlbWVudCBhIGNoYW5jZSB0byBkbyBzb21lIHdv
cmsgcHJpb3IgdG8gYWRkIHNvbWUgYWRkaXRpb25hbCBkYXRhLgorICAgIFdlYkNvcmU6OlN0cmlu
ZyBwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVFbmRUYWcoY29uc3QgV2ViQ29yZTo6RWxlbWVudCog
ZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIG5lZWRTa2lwKTsKKyAgICAvLyBBZnRlciB3
ZSBmaW5pc2ggc2VyaWFsaXppbmcgZW5kIHRhZyBvZiBhIGVsZW1lbnQsIHdlIGdpdmUgdGhlIHRh
cmdldAorICAgIC8vIGVsZW1lbnQgYSBjaGFuY2UgdG8gZG8gc29tZSBwb3N0IHdvcmsgdG8gYWRk
IHNvbWUgYWRkaXRpb25hbCBkYXRhLgorICAgIFdlYkNvcmU6OlN0cmluZyBwb3N0QWN0aW9uQWZ0
ZXJTZXJpYWxpemVFbmRUYWcoY29uc3QgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZURv
bVBhcmFtKiBwYXJhbSk7CisgICAgLy8gU2F2ZSBnZW5lcmF0ZWQgaHRtbCBjb250ZW50IHRvIGRh
dGEgYnVmZmVyLgorICAgIHZvaWQgc2F2ZUhUTUxDb250ZW50VG9CdWZmZXIoY29uc3QgV2ViQ29y
ZTo6U3RyaW5nJiByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJp
YWxpemVEb21QYXJhbSogcGFyYW0pOworICAgIC8vIFNlcmlhbGl6ZSBvcGVuIHRhZyBvZiBhbiBz
cGVjaWZpZWQgZWxlbWVudC4KKyAgICB2b2lkIG9wZW5UYWdUb1N0cmluZyhjb25zdCBXZWJDb3Jl
OjpFbGVtZW50KiBlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZURv
bVBhcmFtKiBwYXJhbSk7CisgICAgLy8gU2VyaWFsaXplIGVuZCB0YWcgb2YgYW4gc3BlY2lmaWVk
IGVsZW1lbnQuCisgICAgdm9pZCBlbmRUYWdUb1N0cmluZyhjb25zdCBXZWJDb3JlOjpFbGVtZW50
KiBlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBh
cmFtKTsKKyAgICAvLyBCdWlsZCBjb250ZW50IGZvciBhIHNwZWNpZmllZCBub2RlCisgICAgdm9p
ZCBidWlsZENvbnRlbnRGb3JOb2RlKGNvbnN0IFdlYkNvcmU6Ok5vZGUqIG5vZGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSk7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwCmluZGV4IGFhZjcxNzQuLjVkNWI0ZWQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUg
IkhUTUxBbGxDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKQEAgLTEx
NzIsNiArMTE3Myw0MCBAQCBXZWJGcmFtZSogV2ViVmlld0ltcGw6OmZpbmRGcmFtZUJ5TmFtZSgK
ICAgICByZXR1cm4gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZnJhbWUpOwogfQogCitXZWJGcmFt
ZSogV2ViVmlld0ltcGw6OmZpbmRGcmFtZUJ5VVJMKGNvbnN0IFdlYlVSTCYgdXJsKQoreworICAg
IGlmICghbWFpbkZyYW1lSW1wbCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBLVVJMIGt1cmwg
PSB1cmw7CisKKyAgICBXVEY6OlZlY3RvcjxXZWJGcmFtZUltcGwqPiBmcmFtZXM7CisgICAgLy8g
Rmlyc3QsIHByb2Nlc3MgbWFpbiBmcmFtZS4KKyAgICBmcmFtZXMuYXBwZW5kKG1haW5GcmFtZUlt
cGwoKSk7CisgICAgLy8gQ29sbGVjdCBhbGwgZnJhbWVzIGluc2lkZSB0aGUgc3BlY2lmaWVkIGZy
YW1lLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8aW50PihmcmFtZXMuc2l6
ZSgpKTsgKytpKSB7CisgICAgICAgIFdlYkZyYW1lSW1wbCogY3VycmVudEZyYW1lID0gZnJhbWVz
W2ldOworICAgICAgICAvLyBDaGVjayB3aGV0aGVyIGN1cnJlbnQgZnJhbWUgaGFzIHRoZSBkZXNp
cmVkIHVybCBvciBub3QuCisgICAgICAgIGNvbnN0IEtVUkwmIGN1cnJlbnRGcmFtZVVSTCA9Cisg
ICAgICAgICAgICBjdXJyZW50RnJhbWUtPmZyYW1lKCktPmxvYWRlcigpLT51cmwoKTsKKyAgICAg
ICAgaWYgKGt1cmwgPT0gY3VycmVudEZyYW1lVVJMKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJl
bnRGcmFtZTsKKyAgICAgICAgLy8gR28gdGhyb3VnaCBub2RlcyBhbmQgbG9vayBmb3Igc3ViLWZy
YW1lcy4KKyAgICAgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBhbGwgPSBjdXJyZW50RnJhbWUt
PmZyYW1lKCktPmRvY3VtZW50KCktPmFsbCgpOworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBh
bGwtPmZpcnN0SXRlbSgpOyBub2RlOyBub2RlID0gYWxsLT5uZXh0SXRlbSgpKSB7CisgICAgICAg
ICAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpF
bGVtZW50Kj4obm9kZSk7CisgICAgICAgIAorICAgICAgICAgICAgLy8gQ2hlY2sgZnJhbWUgdGFn
IGFuZCBpZnJhbWUgdGFnLgorICAgICAgICAgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IFdl
YkZyYW1lSW1wbDo6ZnJvbUZyYW1lT3duZXJFbGVtZW50KGVsZW1lbnQpOworICAgICAgICAgICAg
aWYgKHdlYkZyYW1lKQorICAgICAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQod2ViRnJhbWUpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIFdlYkZyYW1lKiBXZWJWaWV3
SW1wbDo6Zm9jdXNlZEZyYW1lKCkKIHsKICAgICByZXR1cm4gV2ViRnJhbWVJbXBsOjpmcm9tRnJh
bWUoZm9jdXNlZFdlYkNvcmVGcmFtZSgpKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRl
eCAyYjgzYThlLi4wNmU5ZTY2IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC0xMTIs
NiArMTEyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgV2ViRnJhbWUqIG1haW5GcmFtZSgpOwog
ICAgIHZpcnR1YWwgV2ViRnJhbWUqIGZpbmRGcmFtZUJ5TmFtZSgKICAgICAgICAgY29uc3QgV2Vi
U3RyaW5nJiBuYW1lLCBXZWJGcmFtZSogcmVsYXRpdmVUb0ZyYW1lKTsKKyAgICB2aXJ0dWFsIFdl
YkZyYW1lKiBmaW5kRnJhbWVCeVVSTChjb25zdCBXZWJVUkwmIHVybCk7CiAgICAgdmlydHVhbCBX
ZWJGcmFtZSogZm9jdXNlZEZyYW1lKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzZWRGcmFt
ZShXZWJGcmFtZSogZnJhbWUpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJbml0aWFsRm9jdXMoYm9v
bCByZXZlcnNlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44025</attachid>
            <date>2009-11-30 09:18:35 -0800</date>
            <delta_ts>2009-11-30 10:24:04 -0800</delta_ts>
            <desc>Added WebPageSerializer to WebKit API.</desc>
            <filename>bug-31737-20091130091834.patch</filename>
            <type>text/plain</type>
            <size>100246</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzdhZmRlMi4uMjliODgxNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAwOS0xMS0zMCAgWWFhciBTY2huaXRt
YW4gIDx5YWFyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBXZWJQYWdlU2VyaWFsaXplciB0byBXZWJLaXQgQVBJLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTczNwor
CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmNwcDogQWRkZWQgbWV0aG9k
cyB0byBtYWtlIFN0cmluZ0J1aWxkZXIgZXZlbiBtb3JlIHVzZWZ1bCBmb3IgbGFyZ2Ugc2NhbGUg
c3RyaW5nIGNvbmNhdGVuYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdCdWlsZGVyOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdCdWlsZGVyOjpsZW5ndGgpOgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5oOgorCiAyMDA5LTExLTIzICBEaXJrIFNj
aHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTmlrb2xhcyBa
aW1tZXJtYW5uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxk
ZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCmluZGV4IGMy
MWUzNjYuLjNlMzQ5ODEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdC
dWlsZGVyLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5jcHAK
QEAgLTk1LDQgKzk1LDE3IEBAIFN0cmluZyBTdHJpbmdCdWlsZGVyOjp0b1N0cmluZygpIGNvbnN0
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBTdHJpbmdCdWlsZGVyOjpjbGVhcigpCit7
CisgICAgbV90b3RhbExlbmd0aCA9IFVJTlRfTUFYOworICAgIG1fc3RyaW5ncy5jbGVhcigpOwor
fQorCit1bnNpZ25lZCBTdHJpbmdCdWlsZGVyOjpsZW5ndGgoKSBjb25zdAoreworICAgIGlmICht
X3RvdGFsTGVuZ3RoID09IFVJTlRfTUFYKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
bV90b3RhbExlbmd0aDsKK30KKwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1N0cmluZ0J1aWxkZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmgK
aW5kZXggOGQ3NmI5Yy4uN2Y3MmZiZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1N0cmluZ0J1aWxkZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRl
ci5oCkBAIC00Miw2ICs0Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBh
cHBlbmQoY29uc3QgU3RyaW5nJik7CiAgICAgICAgIHZvaWQgYXBwZW5kKFVDaGFyKTsKICAgICAg
ICAgdm9pZCBhcHBlbmQoY2hhcik7CisgICAgICAgIAorICAgICAgICB2b2lkIGNsZWFyKCk7Cisg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogCiAgICAgICAgIFN0cmluZyB0b1N0cmlu
ZygpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBiZGE3ZTdjLi5lMDc0MDc1IDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMjEgQEAKKzIwMDktMTEtMzAgIFlhYXIgU2Nobml0bWFuICA8eWFhckBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkZWQgV2ViUGFnZVNlcmlhbGl6ZXIgdG8gV2ViS2l0IEFQSSBhbmQgZW5yaWNoZWQg
dGhlIFdlYk5vZGUgaGllcmFyY2h5IHRvIHN1cHBvcnQKKyAgICAgICAgZG93bnN0cmVhbSB1bml0
LXRlc3Rpbmcgb2Ygc2VyaWFsaXphdGlvbi4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE3MzcKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAg
ICAgICogcHVibGljL1dlYkRvY3VtZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJE
b2N1bWVudDo6V2ViRG9jdW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6b3Bl
cmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViRG9jdW1lbnQ6OmFzc2lnbik6CisgICAgICAg
ICogcHVibGljL1dlYkVsZW1lbnQuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViRm9ybUVsZW1lbnQu
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViRm9ybUVsZW1lbnQ6Om9wZXJhdG9yPSk6CisgICAgICAg
ICogcHVibGljL1dlYkZyYW1lLmg6CisgICAgICAgICogcHVibGljL1dlYk5vZGUuaDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViTm9kZTo6KToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6dG9Db25z
dEVsZW1lbnQpOgorICAgICAgICAqIHB1YmxpYy9XZWJOb2RlQ29sbGVjdGlvbi5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViTm9kZUNvbGxlY3Rpb246On5XZWJOb2RlQ29sbGVjdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVDb2xsZWN0aW9uOjpXZWJOb2RlQ29sbGVjdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVDb2xsZWN0aW9uOjpvcGVyYXRvcj0pOgorICAgICAg
ICAqIHB1YmxpYy9XZWJOb2RlTGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTm9k
ZUxpc3Q6On5XZWJOb2RlTGlzdCk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVMaXN0OjpXZWJO
b2RlTGlzdCk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVMaXN0OjpvcGVyYXRvcj0pOgorICAg
ICAgICAqIHB1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oOiBBZGRlZC4KKyAgICAgICAgKiBwdWJs
aWMvV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VTZXJpYWxpemVyQ2xpZW50OjopOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFs
aXplckNsaWVudDo6V2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlU2VyaWFsaXplckNsaWVudDo6fldlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KToKKyAgICAg
ICAgKiBwdWJsaWMvV2ViU3RyaW5nLmg6CisgICAgICAgICogcHVibGljL1dlYlZpZXcuaDoKKyAg
ICAgICAgKiBzcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHA6CisgICAgICAgICogc3JjL0RPTVV0
aWxpdGllc1ByaXZhdGUuY3BwOgorICAgICAgICAoV2ViS2l0OjplbGVtZW50SGFzTGVnYWxMaW5r
QXR0cmlidXRlKToKKyAgICAgICAgKiBzcmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5oOgorICAgICAg
ICAqIHNyYy9XZWJEb2N1bWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1
bWVudDo6V2ViRG9jdW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6b3BlcmF0
b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViRG9jdW1lbnQ6Om9wZXJhdG9yIFdURjo6UGFzc1Jl
ZlB0cjxEb2N1bWVudD4pOgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6ZnJhbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6aXNIVE1MRG9jdW1lbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJEb2N1bWVudDo6YmFzZVVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRvY3Vt
ZW50Ojpib2R5KToKKyAgICAgICAgKFdlYktpdDo6V2ViRG9jdW1lbnQ6OmhlYWQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6YWxsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRG9jdW1l
bnQ6OmNvbXBsZXRlVVJMKToKKyAgICAgICAgKiBzcmMvV2ViRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkVsZW1lbnQ6Omhhc1RhZ05hbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJF
bGVtZW50OjpoYXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJFbGVtZW50OjpnZXRB
dHRyaWJ1dGUpOgorICAgICAgICAqIHNyYy9XZWJFbnRpdGllcy5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0Ojpwb3B1bGF0ZU1hcCk6CisgICAgICAgIChXZWJLaXQ6Oik6CisgICAgICAgIChX
ZWJLaXQ6OldlYkVudGl0aWVzOjpXZWJFbnRpdGllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkVu
dGl0aWVzOjplbnRpdHlOYW1lQnlDb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRW50aXRpZXM6
OmNvbnZlcnRFbnRpdGllc0luU3RyaW5nKToKKyAgICAgICAgKiBzcmMvV2ViRW50aXRpZXMuaDog
QWRkZWQuCisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lOjpmcm9tRnJhbWVPd25lckVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJG
cmFtZUltcGw6OmVuY29kaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpkb2N1
bWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lT3duZXJFbGVt
ZW50KToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmg6CisgICAgICAgICogc3JjL1dlYk5v
ZGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjpub2RlVHlwZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYk5vZGU6Om5vZGVWYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6OmRv
Y3VtZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6Zmlyc3RDaGlsZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYk5vZGU6Omxhc3RDaGlsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6
OnByZXZpb3VzU2libGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6Om5leHRTaWJsaW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6aGFzQ2hpbGROb2Rlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYk5vZGU6OmNoaWxkTm9kZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjpj
cmVhdGVNYXJrdXApOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjppc1RleHROb2RlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTm9kZTo6aXNFbGVtZW50Tm9kZSk6CisgICAgICAgICogc3JjL1dl
Yk5vZGVDb2xsZWN0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVDb2xs
ZWN0aW9uOjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVDb2xsZWN0aW9uOjphc3Np
Z24pOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlQ29sbGVjdGlvbjo6V2ViTm9kZUNvbGxlY3Rp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlQ29sbGVjdGlvbjo6bGVuZ3RoKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTm9kZUNvbGxlY3Rpb246Om5leHRJdGVtKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTm9kZUNvbGxlY3Rpb246OmZpcnN0SXRlbSk6CisgICAgICAgICogc3JjL1dlYk5vZGVM
aXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVMaXN0OjpyZXNldCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYk5vZGVMaXN0Ojphc3NpZ24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJOb2RlTGlzdDo6V2ViTm9kZUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlTGlzdDo6
bGVuZ3RoKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZUxpc3Q6Oml0ZW0pOgorICAgICAgICAq
IHNyYy9XZWJQYWdlU2VyaWFsaXplci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlh
bGl6ZXI6OmdlbmVyYXRlTWV0YUNoYXJzZXREZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZU1hcmtPZlRoZVdlYkRlY2xhcmF0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlQmFzZVRhZ0RlY2xhcmF0
aW9uKToKKyAgICAgICAgKiBzcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6U2VyaWFsaXplRG9tUGFyYW06
OlNlcmlhbGl6ZURvbVBhcmFtKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJ
bXBsOjpwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVPcGVuVGFnKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpwb3N0QWN0aW9uQWZ0ZXJTZXJpYWxpemVPcGVuVGFnKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpwcmVBY3Rpb25CZWZvcmVT
ZXJpYWxpemVFbmRUYWcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6
OnBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZUVuZFRhZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VTZXJpYWxpemVySW1wbDo6c2F2ZUhUTUxDb250ZW50VG9CdWZmZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6Om9wZW5UYWdUb1N0cmluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6ZW5kVGFnVG9TdHJpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6OmJ1aWxkQ29udGVudEZvck5vZGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6OldlYlBhZ2VTZXJpYWxpemVySW1w
bCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6Y29sbGVjdFRhcmdl
dEZyYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6c2VyaWFs
aXplKToKKyAgICAgICAgKiBzcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmg6IEFkZGVkLgorICAg
ICAgICAqIHNyYy9XZWJTdHJpbmcuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6Oldl
YlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorCiAyMDA5LTExLTIwICBKaWFuIExpICA8amlhbmxp
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQuIEZpeCBjaHJvbWl1bSBidWls
ZC4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAKaW5kZXggYWIwOGRjOS4uZDM3OWM1MiAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAg
LTEwMiw2ICsxMDIsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRGV2VG9vbHNBZ2Vu
dENsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkRldlRvb2xzRnJvbnRlbmQu
aCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJEZXZUb29sc0Zyb250ZW5kQ2xpZW50Lmgn
LAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRG9jdW1lbnQuaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJEcmFnRGF0YS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkVk
aXRpbmdBY3Rpb24uaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJFbGVtZW50LmgnLApA
QCAtMTI3LDEwICsxMjgsMTQgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1pbWVSZWdp
c3RyeS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk5hdmlnYXRpb25UeXBlLmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTm9kZS5oJywKKyAgICAgICAgICAgICAgICAncHVi
bGljL1dlYk5vZGVDb2xsZWN0aW9uLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTm9k
ZUxpc3QuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJOb25Db3B5YWJsZS5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYk5vdGlmaWNhdGlvbi5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYk5vdGlmaWNhdGlvblByZXNlbnRlci5oJywKICAgICAgICAgICAgICAgICAn
cHVibGljL1dlYk5vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFjay5oJywKKyAgICAgICAgICAg
ICAgICAncHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgnLAorICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9X
ZWJQYXNzd29yZEF1dG9jb21wbGV0ZUxpc3RlbmVyLmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViUGFzc3dvcmRGb3JtRGF0YS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlBs
dWdpbi5oJywKQEAgLTI0MCw4ICsyNDUsMTEgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYkRh
dGFiYXNlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJEYXRhU291cmNlSW1wbC5jcHAn
LAogICAgICAgICAgICAgICAgICdzcmMvV2ViRGF0YVNvdXJjZUltcGwuaCcsCisgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJEb2N1bWVudC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRHJh
Z0RhdGEuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkVsZW1lbnQuY3BwJywKKyAgICAg
ICAgICAgICAgICAnc3JjL1dlYkVudGl0aWVzLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJFbnRpdGllcy5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZpbGVDaG9vc2VyQ29tcGxl
dGlvbkltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZpbGVDaG9vc2VyQ29tcGxl
dGlvbkltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGb250Q2FjaGUuY3BwJywKQEAg
LTI2MCw3ICsyNjgsMTIgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhUGxheWVyQ2xp
ZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJ
bXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTm9kZS5jcHAnLAorICAgICAgICAgICAg
ICAgICdzcmMvV2ViTm9kZUNvbGxlY3Rpb24uY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dl
Yk5vZGVMaXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJOb3RpZmljYXRpb24uY3Bw
JywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcCcsCisgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuY3BwJywKKyAgICAgICAgICAgICAg
ICAnc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YlBhc3N3b3JkRm9ybURhdGEuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlBhc3N3b3Jk
Rm9ybVV0aWxzLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJQYXNzd29yZEZvcm1VdGls
cy5oJywKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRG9jdW1lbnQuaCBi
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRG9jdW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4zNmE4Y2M0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJEb2N1bWVudC5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkRvY3Vt
ZW50X2gKKyNkZWZpbmUgV2ViRG9jdW1lbnRfaAorCisjaW5jbHVkZSAiV2ViTm9kZS5oIgorCisj
aWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIERvY3Vt
ZW50OyB9CituYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NS
ZWZQdHI7IH0KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkVsZW1lbnQ7
CitjbGFzcyBXZWJGcmFtZTsKK2NsYXNzIFdlYk5vZGVDb2xsZWN0aW9uOworY2xhc3MgV2ViU3Ry
aW5nOworY2xhc3MgV2ViVVJMOworCisvLyBQcm92aWRlcyByZWFkb25seSBhY2Nlc3MgdG8gc29t
ZSBwcm9wZXJ0aWVzIG9mIGEgRE9NIGRvY3VtZW50LgorY2xhc3MgV2ViRG9jdW1lbnQgOiBwdWJs
aWMgV2ViTm9kZSB7CitwdWJsaWM6CisgICAgV2ViRG9jdW1lbnQoKSB7IH0KKyAgICBXZWJEb2N1
bWVudChjb25zdCBXZWJEb2N1bWVudCYgZSkgOiBXZWJOb2RlKGUpIHsgfQorCisgICAgV2ViRG9j
dW1lbnQmIG9wZXJhdG9yPShjb25zdCBXZWJEb2N1bWVudCYgZSkgeyBXZWJOb2RlOjphc3NpZ24o
ZSk7IHJldHVybiAqdGhpczsgfQorICAgIFdFQktJVF9BUEkgdm9pZCBhc3NpZ24oY29uc3QgV2Vi
RG9jdW1lbnQmIGUpIHsgV2ViTm9kZTo6YXNzaWduKGUpOyB9CisKKyAgICBXRUJLSVRfQVBJIFdl
YkZyYW1lKiBmcmFtZSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBpc0hUTUxEb2N1bWVu
dCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViVVJMIGJhc2VVUkwoKSBjb25zdDsKKyAgICBX
RUJLSVRfQVBJIFdlYkVsZW1lbnQgYm9keSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViRWxl
bWVudCBoZWFkKCk7CisgICAgV0VCS0lUX0FQSSBXZWJOb2RlQ29sbGVjdGlvbiBhbGwoKTsKKyAg
ICBXRUJLSVRfQVBJIFdlYlVSTCBjb21wbGV0ZVVSTChjb25zdCBXZWJTdHJpbmcmKSBjb25zdDsK
KworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkRvY3VtZW50KGNvbnN0IFdURjo6
UGFzc1JlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4mKTsKKyAgICBXZWJEb2N1bWVudCYgb3BlcmF0
b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4mKTsKKyAgICBvcGVy
YXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnQ+KCkgY29uc3Q7CisjZW5kaWYK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViRWxlbWVudC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJFbGVtZW50LmgKaW5kZXggZDdhMmNiZi4uMzI5M2YzNSAxMDA2NDQKLS0tIGEvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJFbGVtZW50LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJFbGVtZW50LmgKQEAgLTM5LDcgKzM5LDYgQEAgbmFtZXNwYWNlIFdURiB7IHRlbXBsYXRlIDx0
eXBlbmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOyB9CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktp
dCB7Ci0KICAgICAvLyBQcm92aWRlcyByZWFkb25seSBhY2Nlc3MgdG8gc29tZSBwcm9wZXJ0aWVz
IG9mIGEgRE9NIGVsZW1lbnQgbm9kZS4KICAgICBjbGFzcyBXZWJFbGVtZW50IDogcHVibGljIFdl
Yk5vZGUgewogICAgIHB1YmxpYzoKQEAgLTQ5LDYgKzQ4LDEwIEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogICAgICAgICBXZWJFbGVtZW50JiBvcGVyYXRvcj0oY29uc3QgV2ViRWxlbWVudCYgZSkgeyBX
ZWJOb2RlOjphc3NpZ24oZSk7IHJldHVybiAqdGhpczsgfQogICAgICAgICBXRUJLSVRfQVBJIHZv
aWQgYXNzaWduKGNvbnN0IFdlYkVsZW1lbnQmIGUpIHsgV2ViTm9kZTo6YXNzaWduKGUpOyB9CiAK
KyAgICAgICAgV0VCS0lUX0FQSSBib29sIGhhc1RhZ05hbWUoY29uc3QgV2ViU3RyaW5nJikgY29u
c3Q7CisgICAgICAgIFdFQktJVF9BUEkgYm9vbCBoYXNBdHRyaWJ1dGUoY29uc3QgV2ViU3RyaW5n
JikgY29uc3Q7CisgICAgICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGdldEF0dHJpYnV0ZShjb25z
dCBXZWJTdHJpbmcmKSBjb25zdDsKKwogI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgogICAgICAg
ICBXZWJFbGVtZW50KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiYpOwog
ICAgICAgICBXZWJFbGVtZW50JiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNv
cmU6OkVsZW1lbnQ+Jik7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZv
cm1FbGVtZW50LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZvcm1FbGVtZW50LmgKaW5k
ZXggMjdhMWVkYi4uZDk4MDFlMSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJGb3JtRWxlbWVudC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRm9ybUVsZW1l
bnQuaApAQCAtNTAsNyArNTAsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICAgICAgV2ViRm9y
bUVsZW1lbnQoKSA6IFdlYkVsZW1lbnQoKSB7IH0KICAgICAgICAgV2ViRm9ybUVsZW1lbnQoY29u
c3QgV2ViRm9ybUVsZW1lbnQmIGUpIDogV2ViRWxlbWVudChlKSB7IH0KIAotICAgICAgICBXZWJF
bGVtZW50JiBvcGVyYXRvcj0oY29uc3QgV2ViRm9ybUVsZW1lbnQmIGUpIHsgV2ViRWxlbWVudDo6
YXNzaWduKGUpOyByZXR1cm4gKnRoaXM7IH0KKyAgICAgICAgV2ViRm9ybUVsZW1lbnQmIG9wZXJh
dG9yPShjb25zdCBXZWJGb3JtRWxlbWVudCYgZSkgeyBXZWJFbGVtZW50Ojphc3NpZ24oZSk7IHJl
dHVybiAqdGhpczsgfQogICAgICAgICBXRUJLSVRfQVBJIHZvaWQgYXNzaWduKGNvbnN0IFdlYkZv
cm1FbGVtZW50JiBlKSB7IFdlYkVsZW1lbnQ6OmFzc2lnbihlKTsgfQogCiAjaWYgV0VCS0lUX0lN
UExFTUVOVEFUSU9OCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1l
LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgKaW5kZXggNDRiNTdhYS4uNmEx
MmRmZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oCisrKyBi
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaApAQCAtNDcsNiArNDcsOCBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViRGF0YTsKIGNsYXNzIFdlYkRhdGFTb3VyY2U7Citj
bGFzcyBXZWJEb2N1bWVudDsKK2NsYXNzIFdlYkVsZW1lbnQ7CiBjbGFzcyBXZWJGb3JtRWxlbWVu
dDsKIGNsYXNzIFdlYkhpc3RvcnlJdGVtOwogY2xhc3MgV2ViSW5wdXRFbGVtZW50OwpAQCAtODUs
NiArODcsMTAgQEAgcHVibGljOgogICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYkZyYW1lKiBmcmFt
ZUZvckVudGVyZWRDb250ZXh0KCk7CiAgICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViRnJhbWUqIGZy
YW1lRm9yQ3VycmVudENvbnRleHQoKTsKIAorICAgIC8vIFJldHVybnMgdGhlIGZyYW1lIGluc2lk
ZSBhIGdpdmVuIGZyYW1lIG9yIGlmcmFtZSBlbGVtZW50LiBSZXR1cm5zIDAgaWYKKyAgICAvLyB0
aGUgZ2l2ZW4gZWxlbWVudCBpcyBub3QgYSBmcmFtZSwgaWZyYW1lIG9yIGlmIHRoZSBmcmFtZSBp
cyBlbXB0eS4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJGcmFtZSogZnJvbUZyYW1lT3duZXJF
bGVtZW50KFdlYkVsZW1lbnQmKTsKKwogCiAgICAgLy8gQmFzaWMgcHJvcGVydGllcyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTAzLDYg
KzEwOSw4IEBAIHB1YmxpYzoKICAgICAvLyB0aGUgZG9jdW1lbnQgbG9hZGVkIGluIHRoaXMgZnJh
bWUuCiAgICAgdmlydHVhbCBXZWJVUkwgb3BlblNlYXJjaERlc2NyaXB0aW9uVVJMKCkgY29uc3Qg
PSAwOwogCisgICAgLy8gUmV0dXJuIHRoZSBmcmFtZSdzIGVuY29kaW5nLgorICAgIHZpcnR1YWwg
V2ViU3RyaW5nIGVuY29kaW5nKCkgY29uc3QgPSAwOwogCiAgICAgLy8gR2VvbWV0cnkgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApA
QCAtMTY0LDggKzE3Miw5IEBAIHB1YmxpYzoKIAogICAgIC8vIENvbnRlbnQgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICB2
aXJ0dWFsIHZvaWQgZm9ybXMoV2ViVmVjdG9yPFdlYkZvcm1FbGVtZW50PiYpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIFdlYkRvY3VtZW50IGRvY3VtZW50KCkgY29uc3QgPSAwOwogCisgICAgdmly
dHVhbCB2b2lkIGZvcm1zKFdlYlZlY3RvcjxXZWJGb3JtRWxlbWVudD4mKSBjb25zdCA9IDA7CiAK
ICAgICAvLyBTY3JpcHRpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC00NDQsNiArNDUzLDcgQEAgcHVibGljOgogICAgIC8v
IHJlbGF0aXZlIHRvIHRoZSBiYXNlIFVSTCBvZiB0aGUgZnJhbWUncyBkb2N1bWVudC4gIFRoaXMg
dXNlcyB0aGUKICAgICAvLyBzYW1lIGFsZ29yaXRobSB0aGF0IFdlYktpdCB1c2VzIHRvIHJlc29s
dmUgaHlwZXJsaW5rcyBmb3VuZCBpbiBhCiAgICAgLy8gSFRNTCBkb2N1bWVudC4KKyAgICAvLyBE
ZXByZWNhdGVkLiBVc2UgZG9jdW1lbnQoKS5jb21wbGV0ZVVSTCgpIGluc3RlYWQuCiAgICAgdmly
dHVhbCBXZWJVUkwgY29tcGxldGVVUkwoY29uc3QgV2ViU3RyaW5nJikgY29uc3QgPSAwOwogCiAg
ICAgLy8gUmV0dXJucyB0aGUgY29udGVudHMgb2YgdGhpcyBmcmFtZSBhcyBhIHN0cmluZy4gIElm
IHRoZSB0ZXh0IGlzCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5vZGUu
aCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTm9kZS5oCmluZGV4IDAzYWZhOTAuLmRmYmIw
YWEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTm9kZS5oCisrKyBiL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTm9kZS5oCkBAIC00MCw3ICs0MCw5IEBAIG5hbWVzcGFj
ZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1JlZlB0cjsgfQogI2VuZGlm
CiAKIG5hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViRG9jdW1lbnQ7CiBjbGFzcyBXZWJGcmFt
ZTsKK2NsYXNzIFdlYk5vZGVMaXN0OwogCiAvLyBQcm92aWRlcyByZWFkb25seSBhY2Nlc3MgdG8g
c29tZSBwcm9wZXJ0aWVzIG9mIGEgRE9NIG5vZGUuCiBjbGFzcyBXZWJOb2RlIHsKQEAgLTY2LDkg
KzY4LDM3IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6
Tm9kZT4oKSBjb25zdDsKICNlbmRpZgogCisgICAgZW51bSBOb2RlVHlwZSB7CisgICAgICAgIEVs
ZW1lbnROb2RlID0gMSwKKyAgICAgICAgQXR0cmlidXRlTm9kZSwKKyAgICAgICAgVGV4dE5vZGUs
CisgICAgICAgIENEYXRhU2VjdGlvbk5vZGUsCisgICAgICAgIEVudGl0eVJlZmVyZW5jZU5vZGUs
CisgICAgICAgIEVudGl0eU5vZGUsCisgICAgICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbnNOb2Rl
LAorICAgICAgICBDb21tZW50Tm9kZSwKKyAgICAgICAgRG9jdW1lbnROb2RlLAorICAgICAgICBE
b2N1bWVudFR5cGVOb2RlLAorICAgICAgICBEb2N1bWVudEZyYWdtZW50Tm9kZSwKKyAgICAgICAg
Tm90YXRpb25Ob2RlLAorICAgICAgICBYUGF0aE5hbWVzcGFjZU5vZGUKKyAgICB9OworICAgIFdF
QktJVF9BUEkgTm9kZVR5cGUgbm9kZVR5cGUoKSBjb25zdDsKICAgICBXRUJLSVRfQVBJIFdlYk5v
ZGUgcGFyZW50Tm9kZSgpIGNvbnN0OwogICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIG5vZGVOYW1l
KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgbm9kZVZhbHVlKCkgY29uc3Q7Cisg
ICAgLy8gRGVwcmVjYXRlZC4gVXNlIGRvY3VtZW50KCkuZnJhbWUoKSBpbnN0ZWFkLgogICAgIFdF
QktJVF9BUEkgV2ViRnJhbWUqIGZyYW1lKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJEb2N1
bWVudCBkb2N1bWVudCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViTm9kZSBmaXJzdENoaWxk
KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJOb2RlIGxhc3RDaGlsZCgpIGNvbnN0OworICAg
IFdFQktJVF9BUEkgV2ViTm9kZSBwcmV2aW91c1NpYmxpbmcoKSBjb25zdDsKKyAgICBXRUJLSVRf
QVBJIFdlYk5vZGUgbmV4dFNpYmxpbmcoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaGFz
Q2hpbGROb2RlcygpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViTm9kZUxpc3QgY2hpbGROb2Rl
cygpOworICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGNyZWF0ZU1hcmt1cCgpIGNvbnN0OworICAg
IFdFQktJVF9BUEkgYm9vbCBpc1RleHROb2RlKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29s
IGlzRWxlbWVudE5vZGUoKSBjb25zdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgdG9F
bGVtZW50KCkKICAgICB7CkBAIC03Nyw2ICsxMDcsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gcmVzOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IFQgdG9Db25z
dEVsZW1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgVCByZXM7CisgICAgICAgIHJlcy5tX3By
aXZhdGUgPSBtX3ByaXZhdGU7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCiBwcm90ZWN0
ZWQ6CiAgICAgdHlwZWRlZiBXZWJDb3JlOjpOb2RlIFdlYk5vZGVQcml2YXRlOwogICAgIHZvaWQg
YXNzaWduKFdlYk5vZGVQcml2YXRlKik7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYk5vZGVDb2xsZWN0aW9uLmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5vZGVD
b2xsZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0ODgwOQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTm9kZUNvbGxlY3Rp
b24uaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJOb2RlQ29sbGVjdGlvbl9oCisjZGVmaW5l
IFdlYk5vZGVDb2xsZWN0aW9uX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7IGNsYXNzIEhUTUxDb2xsZWN0aW9uOyB9CisjaWYgV0VCS0lUX0lNUExFTUVO
VEFUSU9OCituYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NS
ZWZQdHI7IH0KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYk5vZGU7CisK
Ky8vIFByb3ZpZGVzIHJlYWRvbmx5IGFjY2VzcyB0byBzb21lIHByb3BlcnRpZXMgb2YgYSBET00g
bm9kZS4KK2NsYXNzIFdlYk5vZGVDb2xsZWN0aW9uIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5X
ZWJOb2RlQ29sbGVjdGlvbigpIHsgcmVzZXQoKTsgfQorCisgICAgV2ViTm9kZUNvbGxlY3Rpb24o
Y29uc3QgV2ViTm9kZUNvbGxlY3Rpb24mIG4pIDogbV9wcml2YXRlKDApIHsgYXNzaWduKG4pOyB9
CisgICAgV2ViTm9kZUNvbGxlY3Rpb24mIG9wZXJhdG9yPShjb25zdCBXZWJOb2RlQ29sbGVjdGlv
biYgbikKKyAgICB7CisgICAgICAgIGFzc2lnbihuKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgIH0KKworICAgIFdFQktJVF9BUEkgdm9pZCByZXNldCgpOworICAgIFdFQktJVF9BUEkgdm9p
ZCBhc3NpZ24oY29uc3QgV2ViTm9kZUNvbGxlY3Rpb24mKTsKKworICAgIFdFQktJVF9BUEkgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJOb2RlIG5leHRJdGVtKCkg
Y29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJOb2RlIGZpcnN0SXRlbSgpIGNvbnN0OworCisjaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViTm9kZUNvbGxlY3Rpb24oY29uc3QgV1RGOjpQ
YXNzUmVmUHRyPFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uPiYpOworI2VuZGlmCisKK3ByaXZhdGU6
CisgICAgdm9pZCBhc3NpZ24oV2ViQ29yZTo6SFRNTENvbGxlY3Rpb24qKTsKKyAgICBXZWJDb3Jl
OjpIVE1MQ29sbGVjdGlvbiogbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJOb2RlTGlz
dC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJOb2RlTGlzdC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YjJmNmYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYk5vZGVMaXN0LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2Vi
Tm9kZUxpc3RfaAorI2RlZmluZSBXZWJOb2RlTGlzdF9oCisKKyNpbmNsdWRlICJXZWJDb21tb24u
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBOb2RlTGlzdDsgfQorI2lmIFdFQktJVF9J
TVBMRU1FTlRBVElPTgorbmFtZXNwYWNlIFdURiB7IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFz
cyBQYXNzUmVmUHRyOyB9CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJO
b2RlOworCisvLyBQcm92aWRlcyByZWFkb25seSBhY2Nlc3MgdG8gc29tZSBwcm9wZXJ0aWVzIG9m
IGEgRE9NIG5vZGUuCitjbGFzcyBXZWJOb2RlTGlzdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+
V2ViTm9kZUxpc3QoKSB7IHJlc2V0KCk7IH0KKworICAgIFdlYk5vZGVMaXN0KGNvbnN0IFdlYk5v
ZGVMaXN0JiBuKSA6IG1fcHJpdmF0ZSgwKSB7IGFzc2lnbihuKTsgfQorICAgIFdlYk5vZGVMaXN0
JiBvcGVyYXRvcj0oY29uc3QgV2ViTm9kZUxpc3QmIG4pCisgICAgeworICAgICAgICBhc3NpZ24o
bik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBXRUJLSVRfQVBJIHZvaWQg
cmVzZXQoKTsKKyAgICBXRUJLSVRfQVBJIHZvaWQgYXNzaWduKGNvbnN0IFdlYk5vZGVMaXN0Jik7
CisKKyAgICBXRUJLSVRfQVBJIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgIFdFQktJVF9B
UEkgV2ViTm9kZSBpdGVtKHNpemVfdCkgY29uc3Q7CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJ
T04KKyAgICBXZWJOb2RlTGlzdChjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Tm9kZUxp
c3Q+Jik7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICB2b2lkIGFzc2lnbihXZWJDb3JlOjpOb2Rl
TGlzdCopOworICAgIFdlYkNvcmU6Ok5vZGVMaXN0KiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlBhZ2VTZXJpYWxpemVyLmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VT
ZXJpYWxpemVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRmNzk5NAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6
ZXIuaApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQYWdlU2VyaWFsaXplcl9oCisjZGVmaW5l
IFdlYlBhZ2VTZXJpYWxpemVyX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKK2NsYXNzIFdlYkZyYW1lOworY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXJDbGll
bnQ7CitjbGFzcyBXZWJTdHJpbmc7CitjbGFzcyBXZWJVUkw7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gY2xhc3MgV2ViVmVjdG9yOworCisvLyBHZXQgaHRtbCBkYXRhIGJ5IHNlcmlhbGl6aW5nIGFs
bCBmcmFtZXMgb2YgY3VycmVudCBwYWdlIHdpdGggbGlzdHMKKy8vIHdoaWNoIGNvbnRhaW4gYWxs
IHJlc291cmNlIGxpbmtzIHRoYXQgaGF2ZSBsb2NhbCBjb3B5LgorY2xhc3MgV2ViUGFnZVNlcmlh
bGl6ZXIgeworcHVibGljOgorICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBmaW5kIG91dCBhbGwg
ZnJhbWVzIGFuZCBzZXJpYWxpemUgdGhlbSB0byBIVE1MIGRhdGEuCisgICAgLy8gV2UgaGF2ZSBh
IGRhdGEgYnVmZmVyIHRvIHRlbXBvcmFyeSBzYXZpbmcgZ2VuZXJhdGVkIGh0bWwgZGF0YS4gV2Ug
d2lsbAorICAgIC8vIHNlcXVlbnRpYWxseSBjYWxsIFdlYlBhZ2VTZXJpYXpsaWVyQ2xpZW50IG9u
Y2UgdGhlIGRhdGEgYnVmZmVyIGlzIGZ1bGwuCisgICAgLy8KKyAgICAvLyBSZXR1cm4gZmFsc2Ug
bWVhbnMgbm8gYXZhaWxhYmxlIGZyYW1lIGhhcyBiZWVuIHNlcmlhbGl6ZWQsIG90aGVyd2lzZQor
ICAgIC8vIHJldHVybiB0cnVlLgorICAgIC8vCisgICAgLy8gVGhlIHBhcmFtZXRlciBmcmFtZSBz
cGVjaWZpZXMgd2hpY2ggZnJhbWUgbmVlZCB0byBiZSBzZXJpYWxpemVkLgorICAgIC8vIFRoZSBw
YXJhbWV0ZXIgcmVjdXJzaXZlIHNwZWNpZmllcyB3aGV0aGVyIHdlIG5lZWQgdG8KKyAgICAvLyBz
ZXJpYWxpemUgYWxsIHN1YiBmcmFtZXMgb2YgdGhlIHNwZWNpZmllZCBmcmFtZSBvciBub3QuCisg
ICAgLy8gVGhlIHBhcmFtZXRlciBjbGllbnQgc3BlY2lmaWVzIHRoZSBwb2ludGVyIG9mIGludGVy
ZmFjZQorICAgIC8vIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50IHByb3ZpZGluZyBhIHNpbmsgaW50
ZXJmYWNlIHRvIHJlY2VpdmUgdGhlCisgICAgLy8gaW5kaXZpZHVhbCBjaHVua3Mgb2YgZGF0YSB0
byBiZSBzYXZlZC4KKyAgICAvLyBUaGUgcGFyYW1ldGVyIGxpbmtzIGNvbnRhaW4gb3JpZ2luYWwg
VVJMcyBvZiBhbGwgc2F2ZWQgbGlua3MuCisgICAgLy8gVGhlIHBhcmFtZXRlciBsb2NhbFBhdGhz
IGNvbnRhaW4gY29ycmVzcG9uZGluZyBsb2NhbCBmaWxlIHBhdGhzIG9mIGFsbAorICAgIC8vIHNh
dmVkIGxpbmtzLCB3aGljaCBtYXRjaGVkIHdpdGggdmVjdG9yOmxpbmtzIG9uZSBieSBvbmUuCisg
ICAgLy8gVGhlIHBhcmFtZXRlciBsb2NhbERpcmVjdG9yeU5hbWUgaXMgcmVsYXRpdmUgcGF0aCBv
ZiBkaXJlY3Rvcnkgd2hpY2gKKyAgICAvLyBjb250YWluIGFsbCBzYXZlZCBhdXhpbGlhcnkgZmls
ZXMgaW5jbHVkZWQgYWxsIHN1YiBmcmFtZXMgYW5kIHJlc291cmNlcy4KKyAgICBXRUJLSVRfQVBJ
IHN0YXRpYyBib29sIHNlcmlhbGl6ZShXZWJGcmFtZSogZnJhbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCByZWN1cnNpdmUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqIGNsaWVudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViVVJMPiYg
bGlua3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVj
dG9yPFdlYlN0cmluZz4mIGxvY2FsUGF0aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBsb2NhbERpcmVjdG9yeU5hbWUpOworCisgICAgLy8g
RklYTUU6IFRoZSBmb2xsb3dpbmcgYXJlIGhlcmUgZm9yIHVuaXQgdGVzdGluZyBwdXJwb3Nlcy4g
Q29uc2lkZXIKKyAgICAvLyBjaGFuZ2luZyB0aGUgdW5pdCB0ZXN0cyBpbnN0ZWFkLgorCisgICAg
Ly8gR2VuZXJhdGUgdGhlIE1FVEEgZm9yIGNoYXJzZXQgZGVjbGFyYXRpb24uCisgICAgV0VCS0lU
X0FQSSBzdGF0aWMgV2ViU3RyaW5nIGdlbmVyYXRlTWV0YUNoYXJzZXREZWNsYXJhdGlvbihjb25z
dCBXZWJTdHJpbmcmIGNoYXJzZXQpOworICAgIC8vIEdlbmVyYXRlIHRoZSBNT1RXIGRlY2xhcmF0
aW9uLgorICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0ZU1hcmtPZlRoZVdl
YkRlY2xhcmF0aW9uKGNvbnN0IFdlYlVSTCYgdXJsKTsKKyAgICAvLyBHZW5lcmF0ZSB0aGUgZGVm
YXVsdCBiYXNlIHRhZyBkZWNsYXJhdGlvbi4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJTdHJp
bmcgZ2VuZXJhdGVCYXNlVGFnRGVjbGFyYXRpb24oY29uc3QgV2ViU3RyaW5nJiBiYXNlVGFyZ2V0
KTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmggYi9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ5YTFkNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaApAQCAtMCwwICsxLDc1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJQYWdlU2VyaWFsaXplckNsaWVudF9oCisjZGVmaW5lIFdlYlBhZ2VTZXJpYWxp
emVyQ2xpZW50X2gKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJTdHJpbmc7CitjbGFz
cyBXZWJVUkw7CisKKy8vIFRoaXMgY2xhc3MgaXMgdXNlZCBmb3IgcHJvdmlkaW5nIHNpbmsgaW50
ZXJmYWNlIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVjZWl2ZQorLy8gdGhlIGluZGl2aWR1YWwgY2h1
bmtzIG9mIGRhdGEgdG8gYmUgc2F2ZWQuCitjbGFzcyBXZWJQYWdlU2VyaWFsaXplckNsaWVudCB7
CitwdWJsaWM6CisgICAgLy8gVGhpcyBlbnVtIGluZGljYXRlcyAgVGhpcyBzaW5rIGludGVyZmFj
ZSBjYW4gcmVjZWl2ZSB0aGUgaW5kaXZpZHVhbCBjaHVua3MKKyAgICAvLyBvZiBzZXJpYWxpemVk
IGRhdGEgdG8gYmUgc2F2ZWQsIHNvIHdlIHVzZSB2YWx1ZXMgb2YgZm9sbG93aW5nIGVudW0KKyAg
ICAvLyBkZWZpbml0aW9uIHRvIGluZGljYXRlIHRoZSBzZXJpYWxpemF0aW9uIHN0YXR1cyBvZiBz
ZXJpYWxpemluZyBhbGwgaHRtbAorICAgIC8vIGNvbnRlbnQuIElmIGN1cnJlbnQgZnJhbWUgaXMg
bm90IGNvbXBsZXRlIHNlcmlhbGl6ZWQsIGNhbGwKKyAgICAvLyBkaWRTZXJpYWxpemVEYXRhRm9y
RnJhbWUgd2l0aCBVUkwgb2YgY3VycmVudCBmcmFtZSwgZGF0YSwgZGF0YSBsZW5ndGggYW5kCisg
ICAgLy8gZmxhZyBDdXJyZW50RnJhbWVJc05vdEZpbmlzaGVkLgorICAgIC8vIElmIGN1cnJlbnQg
ZnJhbWUgaXMgY29tcGxldGUgc2VyaWFsaXplZCwgY2FsbCBkaWRTZXJpYWxpemVEYXRhRm9yRnJh
bWUKKyAgICAvLyB3aXRoIFVSTCBvZiBjdXJyZW50IGZyYW1lLCBkYXRhLCBkYXRhIGxlbmd0aCBh
bmQgZmxhZworICAgIC8vIEN1cnJlbnRGcmFtZUlzRmluaXNoZWQuCisgICAgLy8gSWYgYWxsIGZy
YW1lcyBvZiBwYWdlIGFyZSBjb21wbGV0ZSBzZXJpYWxpemVkLCBjYWxsCisgICAgLy8gZGlkU2Vy
aWFsaXplRGF0YUZvckZyYW1lIHdpdGggZW1wdHkgVVJMLCBlbXB0eSBkYXRhLCAwIGFuZCBmbGFn
CisgICAgLy8gQWxsRnJhbWVzQXJlRmluaXNoZWQuCisgICAgZW51bSBQYWdlU2VyaWFsaXphdGlv
blN0YXR1cyB7CisgICAgICAgIEN1cnJlbnRGcmFtZUlzTm90RmluaXNoZWQgPSAwLAorICAgICAg
ICBDdXJyZW50RnJhbWVJc0ZpbmlzaGVkLAorICAgICAgICBBbGxGcmFtZXNBcmVGaW5pc2hlZCwK
KyAgICB9OworCisgICAgLy8gUmVjZWl2ZSB0aGUgaW5kaXZpZHVhbCBjaHVua3Mgb2Ygc2VyaWFs
aXplZCBkYXRhIHRvIGJlIHNhdmVkLgorICAgIC8vIFRoZSBwYXJhbWV0ZXIgZnJhbWVVUkwgc3Bl
Y2lmaWVzIHdoYXQgZnJhbWUgdGhlIGRhdGEgYmVsb25ncy4gVGhlCisgICAgLy8gcGFyYW1ldGVy
IGRhdGEgY29udGFpbnMgdGhlIGF2YWlsYWJsZSBkYXRhIGZvciBzYXZpbmcuIFRoZSBwYXJhbWV0
ZXIKKyAgICAvLyBzdGF0dXMgaW5kaWNhdGVzIHRoZSBzdGF0dXMgb2YgZGF0YSBzZXJpYWxpemF0
aW9uLgorICAgIHZpcnR1YWwgdm9pZCBkaWRTZXJpYWxpemVEYXRhRm9yRnJhbWUoY29uc3QgV2Vi
VVJMJiBmcmFtZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFdlYlN0cmluZyYgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBhZ2VTZXJpYWxpemF0aW9uU3RhdHVzIHN0YXR1cykgPSAwOworICAgIFdlYlBh
Z2VTZXJpYWxpemVyQ2xpZW50KCkgeyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5XZWJQ
YWdlU2VyaWFsaXplckNsaWVudCgpIHsgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3RyaW5nLmgg
Yi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlN0cmluZy5oCmluZGV4IGQ5YjY2YjIuLjlkYzRj
M2MgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3RyaW5nLmgKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTdHJpbmcuaApAQCAtODcsNiArODcsOSBAQCBwdWJs
aWM6CiAgICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5nIGZyb21VVEY4KGNvbnN0IGNoYXIq
IGRhdGEsIHNpemVfdCBsZW5ndGgpOwogICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBm
cm9tVVRGOChjb25zdCBjaGFyKiBkYXRhKTsKIAorICAgIFdlYlN0cmluZyhjb25zdCBjaGFyKiBk
YXRhKTsKKyAgICBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBjaGFyKiBzKTsKKwogI2lmIFdF
QktJVF9JTVBMRU1FTlRBVElPTgogICAgIFdlYlN0cmluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcm
KTsKICAgICBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKQEAg
LTk2LDYgKzk5LDcgQEAgcHVibGljOgogICAgIFdlYlN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IFdl
YkNvcmU6OkF0b21pY1N0cmluZyYpOwogICAgIG9wZXJhdG9yIFdlYkNvcmU6OkF0b21pY1N0cmlu
ZygpIGNvbnN0OwogI2Vsc2UKKwogICAgIFdlYlN0cmluZyhjb25zdCBzdHJpbmcxNiYgcykgOiBt
X3ByaXZhdGUoMCkKICAgICB7CiAgICAgICAgIGFzc2lnbihzLmRhdGEoKSwgcy5sZW5ndGgoKSk7
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaCBiL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCmluZGV4IDgyNjFhZmMuLjY1Nzc2NzUgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViVmlldy5oCkBAIC00NCw2ICs0NCw3IEBAIGNsYXNzIFdlYkZyYW1lQ2xpZW50
OwogY2xhc3MgV2ViTm9kZTsKIGNsYXNzIFdlYlNldHRpbmdzOwogY2xhc3MgV2ViU3RyaW5nOwor
Y2xhc3MgV2ViVVJMOwogY2xhc3MgV2ViVmlld0NsaWVudDsKIHN0cnVjdCBXZWJNZWRpYVBsYXll
ckFjdGlvbjsKIHN0cnVjdCBXZWJQb2ludDsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1h
dGNoaW5nRW51bXMuY3BwCmluZGV4IGYzNDljYzMuLmM0NjY5MmYgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcApAQCAtMjQzLDYgKzI0MywyMCBAQCBDT01Q
SUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYklucHV0RWxlbWVudDo6TW9udGgsIEhUTUxJbnB1
dEVsZW1lbnQ6Ok1PTlRIKTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViSW5wdXRF
bGVtZW50OjpUaW1lLCBIVE1MSW5wdXRFbGVtZW50OjpUSU1FKTsKIENPTVBJTEVfQVNTRVJUX01B
VENISU5HX0VOVU0oV2ViSW5wdXRFbGVtZW50OjpXZWVrLCBIVE1MSW5wdXRFbGVtZW50OjpXRUVL
KTsKIAorQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJOb2RlOjpFbGVtZW50Tm9kZSwg
Tm9kZTo6RUxFTUVOVF9OT0RFKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTm9k
ZTo6QXR0cmlidXRlTm9kZSwgTm9kZTo6QVRUUklCVVRFX05PREUpOworQ09NUElMRV9BU1NFUlRf
TUFUQ0hJTkdfRU5VTShXZWJOb2RlOjpUZXh0Tm9kZSwgTm9kZTo6VEVYVF9OT0RFKTsKK0NPTVBJ
TEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTm9kZTo6Q0RhdGFTZWN0aW9uTm9kZSwgTm9kZTo6
Q0RBVEFfU0VDVElPTl9OT0RFKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTm9k
ZTo6RW50aXR5UmVmZXJlbmNlTm9kZSwgTm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFKTsKK0NP
TVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTm9kZTo6RW50aXR5Tm9kZSwgTm9kZTo6RU5U
SVRZX05PREUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJOb2RlOjpQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb25zTm9kZSwgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKTsK
K0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTm9kZTo6Q29tbWVudE5vZGUsIE5vZGU6
OkNPTU1FTlRfTk9ERSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk5vZGU6OkRv
Y3VtZW50Tm9kZSwgTm9kZTo6RE9DVU1FTlRfTk9ERSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElO
R19FTlVNKFdlYk5vZGU6OkRvY3VtZW50VHlwZU5vZGUsIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9E
RSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk5vZGU6OkRvY3VtZW50RnJhZ21l
bnROb2RlLCBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFKTsKK0NPTVBJTEVfQVNTRVJUX01B
VENISU5HX0VOVU0oV2ViTm9kZTo6Tm90YXRpb25Ob2RlLCBOb2RlOjpOT1RBVElPTl9OT0RFKTsK
K0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTm9kZTo6WFBhdGhOYW1lc3BhY2VOb2Rl
LCBOb2RlOjpYUEFUSF9OQU1FU1BBQ0VfTk9ERSk7CisKICNpZiBFTkFCTEUoVklERU8pCiBDT01Q
SUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk1lZGlhUGxheWVyOjpFbXB0eSwgTWVkaWFQbGF5
ZXI6OkVtcHR5KTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTWVkaWFQbGF5ZXI6
OklkbGUsIE1lZGlhUGxheWVyOjpJZGxlKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RPTVV0aWxp
dGllc1ByaXZhdGUuY3BwCmluZGV4IGZmZGQ4NWQuLmMyYWFjZmIgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5jcHAKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9ET01VdGlsaXRpZXNQcml2YXRlLmNwcApAQCAtODQsNCArODQsNTQgQEAgU3RyaW5n
IG5hbWVPZklucHV0RWxlbWVudChIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQogICAgIHJldHVy
biBXZWJJbnB1dEVsZW1lbnQoZWxlbWVudCkubmFtZUZvckF1dG9maWxsKCk7CiB9CiAKKworYm9v
bCBlbGVtZW50SGFzTGVnYWxMaW5rQXR0cmlidXRlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCit7CisgICAgaWYgKGF0dHJOYW1lID09IEhUTUxOYW1lczo6c3JjQXR0cikgeworICAg
ICAgICAvLyBDaGVjayBzcmMgYXR0cmlidXRlLgorICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmltZ1RhZykKKyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpzY3JpcHRUYWcpCisgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aWZyYW1lVGFnKQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmZyYW1lVGFnKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSkgeworICAg
ICAgICAgICAgY29uc3QgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPQorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8Y29uc3QgSFRNTElucHV0RWxlbWVudCo+KGVsZW1lbnQpOworICAgICAgICAgICAg
aWYgKGlucHV0LT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRFbGVtZW50OjpJTUFHRSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoYXR0ck5h
bWUgPT0gSFRNTE5hbWVzOjpocmVmQXR0cikgeworICAgICAgICAvLyBDaGVjayBocmVmIGF0dHJp
YnV0ZS4KKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaW5rVGFn
KQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFUYWcpCisg
ICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YXJlYVRhZykpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IEhUTUxO
YW1lczo6YWN0aW9uQXR0cikgeworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmZvcm1UYWcpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIGlm
IChhdHRyTmFtZSA9PSBIVE1MTmFtZXM6OmJhY2tncm91bmRBdHRyKSB7CisgICAgICAgIGlmIChl
bGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykKKyAgICAgICAgICAgIHx8IGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZVRhZykKKyAgICAgICAgICAgIHx8IGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0clRhZykKKyAgICAgICAgICAgIHx8IGVsZW1l
bnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZFRhZykpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IEhUTUxOYW1lczo6Y2l0ZUF0dHIpIHsKKyAg
ICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpibG9ja3F1b3RlVGFnKQor
ICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnFUYWcpCisgICAg
ICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGVsVGFnKQorICAgICAg
ICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omluc1RhZykpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IEhUTUxOYW1lczo6
Y2xhc3NpZEF0dHIKKyAgICAgICAgICAgICAgIHx8IGF0dHJOYW1lID09IEhUTUxOYW1lczo6ZGF0
YUF0dHIpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmpl
Y3RUYWcpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIGlmIChhdHRyTmFt
ZSA9PSBIVE1MTmFtZXM6OmNvZGViYXNlQXR0cikgeworICAgICAgICBpZiAoZWxlbWVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdFRhZykKKyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjphcHBsZXRUYWcpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0RPTVV0aWxpdGllc1ByaXZhdGUuaCBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5oCmluZGV4IGMwMmJmODQuLjI1
M2FiM2YgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvRE9NVXRpbGl0aWVzUHJpdmF0
ZS5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5oCkBAIC0z
MiwxMSArMzIsMTMgQEAKICNkZWZpbmUgRE9NVXRpbGl0aWVzUHJpdmF0ZV9oCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKK2NsYXNzIEVsZW1lbnQ7CiBjbGFzcyBIVE1MSW5wdXRFbGVtZW50OwogY2xh
c3MgSFRNTExpbmtFbGVtZW50OwogY2xhc3MgSFRNTE1ldGFFbGVtZW50OwogY2xhc3MgSFRNTE9w
dGlvbkVsZW1lbnQ7CiBjbGFzcyBOb2RlOworY2xhc3MgUXVhbGlmaWVkTmFtZTsKIGNsYXNzIFN0
cmluZzsKIH0KIApAQCAtNTMsNiArNTUsMTYgQEAgV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQq
IHRvSFRNTE9wdGlvbkVsZW1lbnQoV2ViQ29yZTo6Tm9kZSopOwogLy8gRklYTUU6IERlcHJlY2F0
ZS4gVXNlIFdlYklucHV0RWxlbWVudDo6bmFtZUZvckF1dG9maWxsIGluc3RlYWQuCiBXZWJDb3Jl
OjpTdHJpbmcgbmFtZU9mSW5wdXRFbGVtZW50KFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqKTsK
IAorLy8gRm9yIGltZywgc2NyaXB0LCBpZnJhbWUsIGZyYW1lIGVsZW1lbnQsIHdoZW4gYXR0cmli
dXRlIG5hbWUgaXMgc3JjLAorLy8gZm9yIGxpbmssIGEsIGFyZWEgZWxlbWVudCwgd2hlbiBhdHRy
aWJ1dGUgbmFtZSBpcyBocmVmLAorLy8gZm9yIGZvcm0gZWxlbWVudCwgd2hlbiBhdHRyaWJ1dGUg
bmFtZSBpcyBhY3Rpb24sCisvLyBmb3IgaW5wdXQsIHR5cGU9aW1hZ2UsIHdoZW4gYXR0cmlidXRl
IG5hbWUgaXMgc3JjLAorLy8gZm9yIGJvZHksIHRhYmxlLCB0ciwgdGQsIHdoZW4gYXR0cmlidXRl
IG5hbWUgaXMgYmFja2dyb3VuZCwKKy8vIGZvciBibG9ja3F1b3RlLCBxLCBkZWwsIGlucywgd2hl
biBhdHRyaWJ1dGUgbmFtZSBpcyBjaXRlLAorLy8gd2UgY2FuIGNvbnNpZGVyIHRoZSBhdHRyaWJ1
dGUgdmFsdWUgaGFzIGxlZ2FsIGxpbmsuCitib29sIGVsZW1lbnRIYXNMZWdhbExpbmtBdHRyaWJ1
dGUoY29uc3QgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSk7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRG9jdW1lbnQuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEb2N1bWVu
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZlZDg0YwotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRG9jdW1lbnQuY3BwCkBAIC0wLDAg
KzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkRvY3VtZW50LmgiCisK
KyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MQWxsQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIkhUTUxCb2R5RWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJIVE1MSGVhZEVsZW1lbnQuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCisjaW5j
bHVkZSAiV2ViRWxlbWVudC5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgorI2luY2x1ZGUg
IldlYk5vZGVDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViRG9jdW1lbnQ6OldlYkRv
Y3VtZW50KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4mIGVsZW0pCisg
ICAgOiBXZWJOb2RlKGVsZW0ucmVsZWFzZVJlZigpKQoreworfQorCitXZWJEb2N1bWVudCYgV2Vi
RG9jdW1lbnQ6Om9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RG9jdW1l
bnQ+JiBlbGVtKQoreworICAgIFdlYk5vZGU6OmFzc2lnbihlbGVtLnJlbGVhc2VSZWYoKSk7Cisg
ICAgcmV0dXJuICp0aGlzOworfQorCitXZWJEb2N1bWVudDo6b3BlcmF0b3IgV1RGOjpQYXNzUmVm
UHRyPERvY3VtZW50PigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8RG9jdW1lbnQ+
KHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9wcml2YXRlKSk7Cit9CisKK1dlYkZyYW1lKiBXZWJE
b2N1bWVudDo6ZnJhbWUoKSBjb25zdAoreworICAgIHJldHVybiBXZWJGcmFtZUltcGw6OmZyb21G
cmFtZShjb25zdFVud3JhcDxEb2N1bWVudD4oKS0+ZnJhbWUoKSk7Cit9CisKK2Jvb2wgV2ViRG9j
dW1lbnQ6OmlzSFRNTERvY3VtZW50KCkgY29uc3QKK3sgIAorICAgIHJldHVybiBjb25zdFVud3Jh
cDxEb2N1bWVudD4oKS0+aXNIVE1MRG9jdW1lbnQoKTsKK30KKworV2ViVVJMIFdlYkRvY3VtZW50
OjpiYXNlVVJMKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8RG9jdW1lbnQ+KCkt
PmJhc2VVUkwoKTsKK30KKworV2ViRWxlbWVudCBXZWJEb2N1bWVudDo6Ym9keSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIFdlYkVsZW1lbnQoY29uc3RVbndyYXA8RG9jdW1lbnQ+KCktPmJvZHkoKSk7
Cit9CisKK1dlYkVsZW1lbnQgV2ViRG9jdW1lbnQ6OmhlYWQoKQoreworICAgIHJldHVybiBXZWJF
bGVtZW50KHVud3JhcDxEb2N1bWVudD4oKS0+aGVhZCgpKTsKK30KKworV2ViTm9kZUNvbGxlY3Rp
b24gV2ViRG9jdW1lbnQ6OmFsbCgpCit7CisgICAgcmV0dXJuIFdlYk5vZGVDb2xsZWN0aW9uKHVu
d3JhcDxEb2N1bWVudD4oKS0+YWxsKCkpOworfQorCitXZWJVUkwgV2ViRG9jdW1lbnQ6OmNvbXBs
ZXRlVVJMKGNvbnN0IFdlYlN0cmluZyYgcGFydGlhbFVSTCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Y29uc3RVbndyYXA8RG9jdW1lbnQ+KCktPmNvbXBsZXRlVVJMKHBhcnRpYWxVUkwpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RWxlbWVudC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkVsZW1lbnQuY3BwCmluZGV4IDNm
MTNlZTEuLjU2OTgwZmUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRWxlbWVu
dC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFbGVtZW50LmNwcApAQCAtNTQsNSAr
NTQsMjEgQEAgV2ViRWxlbWVudDo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPEVsZW1lbnQ+KCkg
Y29uc3QKICAgICByZXR1cm4gUGFzc1JlZlB0cjxFbGVtZW50PihzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obV9wcml2YXRlKSk7CiB9CiAKK2Jvb2wgV2ViRWxlbWVudDo6aGFzVGFnTmFtZShjb25zdCBX
ZWJTdHJpbmcmIHRhZ05hbWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNl
KGNvbnN0VW53cmFwPEVsZW1lbnQ+KCktPnRhZ05hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGFnTmFtZS5vcGVyYXRvciBXZWJDb3JlOjpTdHJpbmcoKSk7Cit9CisKK2Jvb2wg
V2ViRWxlbWVudDo6aGFzQXR0cmlidXRlKGNvbnN0IFdlYlN0cmluZyYgYXR0ck5hbWUpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPEVsZW1lbnQ+KCktPmhhc0F0dHJpYnV0ZShhdHRy
TmFtZSk7Cit9CisKK1dlYlN0cmluZyBXZWJFbGVtZW50OjpnZXRBdHRyaWJ1dGUoY29uc3QgV2Vi
U3RyaW5nJiBhdHRyTmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8RWxlbWVu
dD4oKS0+Z2V0QXR0cmlidXRlKGF0dHJOYW1lKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRW50aXRpZXMuY3BwIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJFbnRpdGllcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOGRmNmNjMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRW50aXRpZXMuY3BwCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYkVudGl0aWVzLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLy8gTm90
ZSB0aGF0IHRoaXMgZmlsZSBpcyBhbHNvIGluY2x1ZGVkIGJ5IEhUTUxUb2tlbml6ZXIuY3BwIHNv
IHdlIGFyZSBnZXR0aW5nCisvLyB0d28gY29waWVzIG9mIHRoZSBkYXRhIGluIG1lbW9yeS4gIFdl
IGNhbiBmaXggdGhpcyBieSBjaGFuZ2luZyB0aGUgc2NyaXB0CisvLyB0aGF0IGdlbmVyYXRlZCB0
aGUgYXJyYXkgdG8gY3JlYXRlIGEgc3RhdGljIGNvbnN0IHRoYXQgaXMgaXRzIGxlbmd0aCwgYnV0
CisvLyB0aGlzIGlzIGxvdyBwcmlvcml0eSBzaW5jZSB0aGUgZGF0YSBpcyBsZXNzIHRoYW4gNEsu
CisjaW5jbHVkZSAiSFRNTEVudGl0eU5hbWVzLmMiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KworI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgcG9wdWxhdGVNYXAoV1RGOjpIYXNoTWFwPGludCwg
V2ViQ29yZTo6U3RyaW5nPiYgbWFwLAorICAgICAgICAgICAgICAgICBjb25zdCBFbnRpdHkqIGVu
dGl0aWVzLAorICAgICAgICAgICAgICAgICBzaXplX3QgZW50aXRpZXNDb3VudCwKKyAgICAgICAg
ICAgICAgICAgYm9vbCBzdGFuZGFyZEhUTUwpCit7CisgICAgQVNTRVJUKG1hcC5pc0VtcHR5KCkp
OworICAgIGNvbnN0IEVudGl0eSogZW50aXR5ID0gJmVudGl0aWVzWzBdOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZW50aXRpZXNDb3VudDsgaSsrLCBlbnRpdHkrKykgeworICAgICAgICBp
bnQgY29kZSA9IGVudGl0eS0+Y29kZTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBlbnRpdHktPm5h
bWU7CisgICAgICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgdXNlIHRoZSBsb3dlIGNhc2UgZm9yIGVu
dGl0aWVzIHRoYXQgaGF2ZSBib3RoLgorICAgICAgICBpZiAobWFwLmNvbnRhaW5zKGNvZGUpICYm
IG1hcC5nZXQoY29kZSkgPT0gbmFtZS5sb3dlcigpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIC8vIERvbid0IHJlZ2lzdGVyICZwZXJjbnQ7LCAmbnN1cDsgYW5kICZzdXBsOy4KKyAg
ICAgICAgaWYgKHN0YW5kYXJkSFRNTCAmJiAoY29kZSA9PSAnJScgfHwgY29kZSA9PSAweDIyODUg
fHwgY29kZSA9PSAweDAwYjkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1hcC5z
ZXQoY29kZSwgbmFtZSk7CisgICAgfQorICAgIGlmIChzdGFuZGFyZEhUTUwpCisgICAgICAgIG1h
cC5zZXQoc3RhdGljX2Nhc3Q8aW50PigweDAwMjcpLCBTdHJpbmcoIiMzOSIpKTsKK30KKworc3Rh
dGljIGNvbnN0IEVudGl0eSB4bWxCdWlsdEluRW50aXR5Q29kZXNbXSA9IHsKKyAgICB7ICJsdCIs
IDB4MDAzYyB9LAorICAgIHsgImd0IiwgMHgwMDNlIH0sCisgICAgeyAiYW1wIiwgMHgwMDI2IH0s
CisgICAgeyAiYXBvcyIsIDB4MDAyNyB9LAorICAgIHsgInF1b3QiLCAweDAwMjIgfQorfTsKKwor
V2ViRW50aXRpZXM6OldlYkVudGl0aWVzKGJvb2wgeG1sRW50aXRpZXMpCit7CisgICAgaWYgKHht
bEVudGl0aWVzKQorICAgICAgICBwb3B1bGF0ZU1hcChtX2VudGl0aWVzTWFwLAorICAgICAgICAg
ICAgICAgICAgICB4bWxCdWlsdEluRW50aXR5Q29kZXMsCisgICAgICAgICAgICAgICAgICAgIHNp
emVvZih4bWxCdWlsdEluRW50aXR5Q29kZXMpIC8gc2l6ZW9mKEVudGl0eSksCisgICAgICAgICAg
ICAgICAgICAgIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIHBvcHVsYXRlTWFwKG1fZW50aXRp
ZXNNYXAsCisgICAgICAgICAgICAgICAgICAgIHdvcmRsaXN0LAorICAgICAgICAgICAgICAgICAg
ICBzaXplb2Yod29yZGxpc3QpIC8gc2l6ZW9mKEVudGl0eSksCisgICAgICAgICAgICAgICAgICAg
IHRydWUpOworfQorCitTdHJpbmcgV2ViRW50aXRpZXM6OmVudGl0eU5hbWVCeUNvZGUoaW50IGNv
ZGUpIGNvbnN0Cit7CisgICAgaWYgKG1fZW50aXRpZXNNYXAuY29udGFpbnMoY29kZSkpCisgICAg
ICAgIHJldHVybiBtX2VudGl0aWVzTWFwLmdldChjb2RlKTsKKyAgICByZXR1cm4gIiI7Cit9CisK
K1N0cmluZyBXZWJFbnRpdGllczo6Y29udmVydEVudGl0aWVzSW5TdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBsZW4gPSB2YWx1ZS5sZW5ndGgoKTsKKyAg
ICBjb25zdCBVQ2hhciogc3RhcnRQb3MgPSB2YWx1ZS5jaGFyYWN0ZXJzKCk7CisgICAgY29uc3Qg
VUNoYXIqIGN1clBvcyA9IHN0YXJ0UG9zOworCisgICAgLy8gRklYTUU6IE9wdGltaXplIC0gY3Jl
YXRlIFN0cmluZ0J1aWxkZXIgb25seSBpZiB2YWx1ZSBoYXMgYW55IGVudGl0aWVzLgorICAgIFN0
cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHdoaWxlIChsZW4tLSkgeworICAgICAgICBpZiAobV9l
bnRpdGllc01hcC5jb250YWlucygqY3VyUG9zKSkgeworICAgICAgICAgICAgLy8gQXBwZW5kIGNv
bnRlbnQgYmVmb3JlIGVudGl0eSBjb2RlLgorICAgICAgICAgICAgaWYgKGN1clBvcyA+IHN0YXJ0
UG9zKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoU3RyaW5nKHN0YXJ0UG9zLCBjdXJQ
b3MgLSBzdGFydFBvcykpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiJiIpOworICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChtX2VudGl0aWVzTWFwLmdldCgqY3VyUG9zKSk7CisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCI7Iik7CisgICAgICAgICAgICBzdGFydFBvcyA9ICsrY3VyUG9z
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY3VyUG9zKys7CisgICAgICAgIH0KKyAg
ICB9CisgICAgLy8gQXBwZW5kIHRoZSByZW1haW5pbmcgY29udGVudC4KKyAgICBpZiAoY3VyUG9z
ID4gc3RhcnRQb3MpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoU3RyaW5nKHN0YXJ0UG9zLCBjdXJQ
b3MgLSBzdGFydFBvcykpOworCisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RW50aXRpZXMuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRW50aXRpZXMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDNjMzEwCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJFbnRpdGllcy5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
YkVudGl0aWVzX2gKKyNkZWZpbmUgV2ViRW50aXRpZXNfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgV2ViRW50aXRpZXMgeworcHVibGljOgorICAgIC8vICZhcG9zOywgJnBlcmNudDss
ICZuc3VwOywgJnN1cGw7IGFyZSBub3QgZGVmaW5lZCBieSB0aGUgSFRNTCBzdGFuZGFyZHMuCisg
ICAgLy8gIC0gSUUgZG9lcyBub3Qgc3VwcG9ydCAmYXBvczsgYXMgYW4gSFRNTCBlbnRpdHkgKGJ1
dCBzdXBwb3J0IGl0IGFzIGFuIFhNTAorICAgIC8vICAgIGVudGl0eS4pCisgICAgLy8gIC0gRmly
ZWZveCBzdXBwb3J0cyAmYXBvczsgYXMgYW4gSFRNTCBlbnRpdHkuCisgICAgLy8gIC0gQm90aCBv
ZiBJRSBhbmQgRmlyZWZveCBkb24ndCBzdXBwb3J0ICZwZXJjbnQ7LCAmbnN1cDsgYW5kICZzdXBs
Oy4KKyAgICAvLworICAgIC8vIEEgd2ViIHBhZ2Ugc2F2ZWQgYnkgQ2hyb21pdW0gc2hvdWxkIGJl
IGFibGUgdG8gYmUgcmVhZCBieSBvdGhlciBicm93c2VycworICAgIC8vIHN1Y2ggYXMgSUUgYW5k
IEZpcmVmb3guICBDaHJvbWl1bSBzaG91bGQgcHJvZHVjZSBvbmx5IHRoZSBzdGFuZGFyZCBlbnRp
dHkKKyAgICAvLyByZWZlcmVuY2VzIHdoaWNoIG90aGVyIGJyb3dzZXJzIGNhbiByZWNvZ25pemUu
CisgICAgLy8gU28gaWYgc3RhbmRhcmRfaHRtbF9lbnRpdGllc18gaXMgdHJ1ZSwgd2Ugd2lsbCB1
c2UgYSBudW1lcmljIGNoYXJhY3RlcgorICAgIC8vIHJlZmVyZW5jZSBmb3IgJmFwb3M7LCBhbmQg
ZG9uJ3QgdXNlIGVudGl0eSByZWZlcmVuY2VzIGZvciAmcGVyY250OywgJm5zdXA7CisgICAgLy8g
YW5kICZzdXBsOyBmb3Igc2VyaWFsaXphdGlvbi4KKyAgICAvLworICAgIC8vIElmIHhtbEVudGl0
aWVzIGlzIHRydWUsIFdlYkVudGl0aWVzIHdpbGwgb25seSBjb250YWluIHN0YW5kYXJkIFhNTAor
ICAgIC8vIGVudGl0aWVzLgorICAgIGV4cGxpY2l0IFdlYkVudGl0aWVzKGJvb2wgeG1sRW50aXRp
ZXMpOworCisgICAgLy8gQ2hlY2sgd2hldGhlciBzcGVjaWZpZWQgdW5pY29kZSBoYXMgY29ycmVz
cG9uZGluZyBodG1sIG9yIHhtbCBidWlsdC1pbgorICAgIC8vIGVudGl0eSBuYW1lLiBJZiB5ZXMs
IHJldHVybiB0aGUgZW50aXR5IG5vdGF0aW9uLiBJZiBub3QsIHJldHVybnMgYW4KKyAgICAvLyBl
bXB0eSBzdHJpbmcuIFBhcmFtZXRlciBpc0hUTUwgaW5kaWNhdGVzIGNoZWNrIHRoZSBjb2RlIGlu
IGh0bWwgZW50aXR5CisgICAgLy8gbWFwIG9yIGluIHhtbCBlbnRpdHkgbWFwLgorICAgIFdlYkNv
cmU6OlN0cmluZyBlbnRpdHlOYW1lQnlDb2RlKGludCBjb2RlKSBjb25zdDsKKworICAgIC8vIFJl
dHVybnMgYSBuZXcgc3RyaW5nIHdpdGggY29ycmVzcG9uZGluZyBlbnRpdHkgbmFtZXMgcmVwbGFj
ZWQuCisgICAgV2ViQ29yZTo6U3RyaW5nIGNvbnZlcnRFbnRpdGllc0luU3RyaW5nKGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYpIGNvbnN0OworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50
LCBXZWJDb3JlOjpTdHJpbmc+IEVudGl0aWVzTWFwVHlwZTsKKyAgICAvLyBBbiBpbnRlcm5hbCBv
YmplY3QgdGhhdCBtYXBzIHRoZSBVbmljb2RlIGNoYXJhY3RlciB0byBjb3JyZXNwb25kaW5nCisg
ICAgLy8gZW50aXR5IG5vdGF0aW9uLgorICAgIEVudGl0aWVzTWFwVHlwZSBtX2VudGl0aWVzTWFw
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJGcmFtZUltcGwuY3BwCmluZGV4IDA2ZDM5NGYuLjQxOGYwYzQgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZyYW1lSW1wbC5jcHAKQEAgLTEyMiw2ICsxMjIsNyBAQAogI2luY2x1ZGUgIlRleHRJdGVy
YXRvci5oIgogI2luY2x1ZGUgIldlYkNvbnNvbGVNZXNzYWdlLmgiCiAjaW5jbHVkZSAiV2ViRGF0
YVNvdXJjZUltcGwuaCIKKyNpbmNsdWRlICJXZWJEb2N1bWVudC5oIgogI2luY2x1ZGUgIldlYkZp
bmRPcHRpb25zLmgiCiAjaW5jbHVkZSAiV2ViRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJXZWJG
cmFtZUNsaWVudC5oIgpAQCAtMzQzLDYgKzM0NCwxMiBAQCBXZWJGcmFtZSogV2ViRnJhbWU6OmZy
YW1lRm9yQ3VycmVudENvbnRleHQoKQogICAgIHJldHVybiBXZWJGcmFtZUltcGw6OmZyb21GcmFt
ZShmcmFtZSk7CiB9CiAKK1dlYkZyYW1lKiBXZWJGcmFtZTo6ZnJvbUZyYW1lT3duZXJFbGVtZW50
KFdlYkVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgcmV0dXJuIFdlYkZyYW1lSW1wbDo6ZnJvbUZy
YW1lT3duZXJFbGVtZW50KAorICAgICAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+KGVsZW1lbnQpLmdl
dCgpKTsKK30KKwogV2ViU3RyaW5nIFdlYkZyYW1lSW1wbDo6bmFtZSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fZnJhbWUtPnRyZWUoKS0+bmFtZSgpOwpAQCAtMzkxLDYgKzM5OCwxMSBAQCBXZWJV
UkwgV2ViRnJhbWVJbXBsOjpvcGVuU2VhcmNoRGVzY3JpcHRpb25VUkwoKSBjb25zdAogICAgIHJl
dHVybiBXZWJVUkwoKTsKIH0KIAorV2ViU3RyaW5nIFdlYkZyYW1lSW1wbDo6ZW5jb2RpbmcoKSBj
b25zdAoreworICAgIHJldHVybiBmcmFtZSgpLT5sb2FkZXIoKS0+ZW5jb2RpbmcoKTsKK30KKwog
V2ViU2l6ZSBXZWJGcmFtZUltcGw6OnNjcm9sbE9mZnNldCgpIGNvbnN0CiB7CiAgICAgRnJhbWVW
aWV3KiB2aWV3ID0gZnJhbWVWaWV3KCk7CkBAIC01MTUsNiArNTI3LDEzIEBAIFdlYkZyYW1lKiBX
ZWJGcmFtZUltcGw6OmZpbmRDaGlsZEJ5RXhwcmVzc2lvbihjb25zdCBXZWJTdHJpbmcmIHhwYXRo
KSBjb25zdAogICAgIHJldHVybiBmcm9tRnJhbWUoZnJhbWVFbGVtZW50LT5jb250ZW50RnJhbWUo
KSk7CiB9CiAKK1dlYkRvY3VtZW50IFdlYkZyYW1lSW1wbDo6ZG9jdW1lbnQoKSBjb25zdAorewor
ICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJu
IFdlYkRvY3VtZW50KCk7CisgICAgcmV0dXJuIFdlYkRvY3VtZW50KG1fZnJhbWUtPmRvY3VtZW50
KCkpOworfQorCiB2b2lkIFdlYkZyYW1lSW1wbDo6Zm9ybXMoV2ViVmVjdG9yPFdlYkZvcm1FbGVt
ZW50PiYgcmVzdWx0cykgY29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUpCkBAIC0xNjE5LDYgKzE2
MzgsMTkgQEAgV2ViRnJhbWVJbXBsKiBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShGcmFtZSogZnJh
bWUpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lTG9hZGVyQ2xpZW50SW1wbCo+KGZyYW1l
LT5sb2FkZXIoKS0+Y2xpZW50KCkpLT53ZWJGcmFtZSgpOwogfQogCitXZWJGcmFtZUltcGwqIFdl
YkZyYW1lSW1wbDo6ZnJvbUZyYW1lT3duZXJFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCit7Cisg
ICAgaWYgKCFlbGVtZW50CisgICAgICAgIHx8ICFlbGVtZW50LT5pc0ZyYW1lT3duZXJFbGVtZW50
KCkKKyAgICAgICAgfHwgKCFlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lVGFn
KQorICAgICAgICAgICAgJiYgIWVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZVRh
ZykpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxl
bWVudCogZnJhbWVFbGVtZW50ID0KKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEZy
YW1lT3duZXJFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgcmV0dXJuIGZyb21GcmFtZShmcmFtZUVs
ZW1lbnQtPmNvbnRlbnRGcmFtZSgpKTsKK30KKyAgICAKIFdlYlZpZXdJbXBsKiBXZWJGcmFtZUlt
cGw6OnZpZXdJbXBsKCkgY29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUpCmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJGcmFtZUltcGwuaAppbmRleCAwNTA2NzViLi42NTllN2Y4IDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RnJhbWVJbXBsLmgKQEAgLTY1LDYgKzY1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgV2ViVVJM
IHVybCgpIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViVVJMIGZhdkljb25VUkwoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIFdlYlVSTCBvcGVuU2VhcmNoRGVzY3JpcHRpb25VUkwoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFdlYlN0cmluZyBlbmNvZGluZygpIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViU2l6ZSBz
Y3JvbGxPZmZzZXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFdlYlNpemUgY29udGVudHNTaXplKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBpbnQgY29udGVudHNQcmVmZXJyZWRXaWR0aCgpIGNvbnN0OwpA
QCAtODIsNiArODMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJGcmFtZSogdHJhdmVyc2VQ
cmV2aW91cyhib29sIHdyYXApIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViRnJhbWUqIGZpbmRDaGls
ZEJ5TmFtZShjb25zdCBXZWJTdHJpbmcmKSBjb25zdDsKICAgICB2aXJ0dWFsIFdlYkZyYW1lKiBm
aW5kQ2hpbGRCeUV4cHJlc3Npb24oY29uc3QgV2ViU3RyaW5nJikgY29uc3Q7CisgICAgdmlydHVh
bCBXZWJEb2N1bWVudCBkb2N1bWVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBmb3JtcyhX
ZWJWZWN0b3I8V2ViRm9ybUVsZW1lbnQ+JikgY29uc3Q7CiAgICAgdmlydHVhbCBXZWJTZWN1cml0
eU9yaWdpbiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBncmFudFVu
aXZlcnNhbEFjY2VzcygpOwpAQCAtMTU3LDcgKzE1OSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IFdlYlVSTCBjb21wbGV0ZVVSTChjb25zdCBXZWJTdHJpbmcmIHVybCkgY29uc3Q7CiAgICAgdmly
dHVhbCBXZWJTdHJpbmcgY29udGVudEFzVGV4dChzaXplX3QgbWF4Q2hhcnMpIGNvbnN0OwogICAg
IHZpcnR1YWwgV2ViU3RyaW5nIGNvbnRlbnRBc01hcmt1cCgpIGNvbnN0OwotCiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8V2ViRnJhbWVJbXBsPiBjcmVhdGUoV2ViRnJhbWVDbGllbnQqIGNsaWVudCk7
CiAgICAgfldlYkZyYW1lSW1wbCgpOwogCkBAIC0xNzQsNiArMTc1LDcgQEAgcHVibGljOgogICAg
IHZvaWQgY3JlYXRlRnJhbWVWaWV3KCk7CiAKICAgICBzdGF0aWMgV2ViRnJhbWVJbXBsKiBmcm9t
RnJhbWUoV2ViQ29yZTo6RnJhbWUqIGZyYW1lKTsKKyAgICBzdGF0aWMgV2ViRnJhbWVJbXBsKiBm
cm9tRnJhbWVPd25lckVsZW1lbnQoV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCk7CiAKICAgICBX
ZWJWaWV3SW1wbCogdmlld0ltcGwoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJOb2RlLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZS5jcHAKaW5k
ZXggOTY1YzQxMi4uNTQ4YTRhNyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJO
b2RlLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5vZGUuY3BwCkBAIC0zNSw5ICsz
NSwxNCBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRJ
bXBsLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVk
ZSAibWFya3VwLmgiCiAKKyNpbmNsdWRlICJXZWJEb2N1bWVudC5oIgogI2luY2x1ZGUgIldlYkZy
YW1lSW1wbC5oIgorI2luY2x1ZGUgIldlYk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5n
LmgiCisjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogCkBAIC02MSw2ICs2NiwxMSBAQCB2b2lkIFdlYk5vZGU6OmFzc2lnbihjb25zdCBXZWJOb2Rl
JiBvdGhlcikKICAgICBhc3NpZ24ocCk7CiB9CiAKK1dlYk5vZGU6Ok5vZGVUeXBlIFdlYk5vZGU6
Om5vZGVUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViTm9kZTo6Tm9k
ZVR5cGU+KG1fcHJpdmF0ZS0+bm9kZVR5cGUoKSk7Cit9CisKIFdlYk5vZGUgV2ViTm9kZTo6cGFy
ZW50Tm9kZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFBhc3NSZWZQdHI8Tm9kZT4oY29uc3RfY2Fz
dDxOb2RlKj4obV9wcml2YXRlLT5wYXJlbnROb2RlKCkpKTsKQEAgLTcxLDYgKzgxLDExIEBAIFdl
YlN0cmluZyBXZWJOb2RlOjpub2RlTmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
bm9kZU5hbWUoKTsKIH0KIAorV2ViU3RyaW5nIFdlYk5vZGU6Om5vZGVWYWx1ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bm9kZVZhbHVlKCk7Cit9CisKIFdlYk5vZGU6OldlYk5v
ZGUoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok5vZGU+JiBub2RlKQogICAgIDogbV9w
cml2YXRlKHN0YXRpY19jYXN0PFdlYk5vZGVQcml2YXRlKj4obm9kZS5yZWxlYXNlUmVmKCkpKQog
ewpAQCAtMTAwLDQgKzExNSw1NCBAQCBXZWJGcmFtZSogV2ViTm9kZTo6ZnJhbWUoKSBjb25zdAog
ICAgIHJldHVybiBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShtX3ByaXZhdGUtPmRvY3VtZW50KCkt
PmZyYW1lKCkpOwogfQogCitXZWJEb2N1bWVudCBXZWJOb2RlOjpkb2N1bWVudCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIFdlYkRvY3VtZW50KG1fcHJpdmF0ZS0+ZG9jdW1lbnQoKSk7Cit9CisKK1dl
Yk5vZGUgV2ViTm9kZTo6Zmlyc3RDaGlsZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYk5vZGUo
bV9wcml2YXRlLT5maXJzdENoaWxkKCkpOworfQorCitXZWJOb2RlIFdlYk5vZGU6Omxhc3RDaGls
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYk5vZGUobV9wcml2YXRlLT5sYXN0Q2hpbGQoKSk7
Cit9CisKK1dlYk5vZGUgV2ViTm9kZTo6cHJldmlvdXNTaWJsaW5nKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gV2ViTm9kZShtX3ByaXZhdGUtPnByZXZpb3VzU2libGluZygpKTsKK30KKworV2ViTm9k
ZSBXZWJOb2RlOjpuZXh0U2libGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYk5vZGUobV9w
cml2YXRlLT5uZXh0U2libGluZygpKTsKK30KKworYm9vbCBXZWJOb2RlOjpoYXNDaGlsZE5vZGVz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5oYXNDaGlsZE5vZGVzKCk7Cit9CisK
K1dlYk5vZGVMaXN0IFdlYk5vZGU6OmNoaWxkTm9kZXMoKQoreworICAgIHJldHVybiBXZWJOb2Rl
TGlzdChtX3ByaXZhdGUtPmNoaWxkTm9kZXMoKSk7Cit9CisKK1dlYlN0cmluZyBXZWJOb2RlOjpj
cmVhdGVNYXJrdXAoKSBjb25zdAoreworICAgIHJldHVybiBXZWJDb3JlOjpjcmVhdGVNYXJrdXAo
bV9wcml2YXRlKTsKK30KKworYm9vbCBXZWJOb2RlOjppc1RleHROb2RlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5pc1RleHROb2RlKCk7Cit9CisKK2Jvb2wgV2ViTm9kZTo6aXNF
bGVtZW50Tm9kZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNFbGVtZW50Tm9k
ZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViTm9kZUNvbGxlY3Rpb24uY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJO
b2RlQ29sbGVjdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgz
MGM3MgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZUNvbGxl
Y3Rpb24uY3BwCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViTm9kZUNvbGxlY3Rpb24uaCIKKworI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCisjaW5j
bHVkZSAiTm9kZS5oIgorCisjaW5jbHVkZSAiV2ViTm9kZS5oIgorCisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCit2b2lkIFdlYk5vZGVDb2xsZWN0aW9uOjpyZXNldCgpCit7CisgICAgYXNzaWduKDAp
OworfQorCit2b2lkIFdlYk5vZGVDb2xsZWN0aW9uOjphc3NpZ24oY29uc3QgV2ViTm9kZUNvbGxl
Y3Rpb24mIG90aGVyKQoreworICAgIEhUTUxDb2xsZWN0aW9uKiBwID0gY29uc3RfY2FzdDxIVE1M
Q29sbGVjdGlvbio+KG90aGVyLm1fcHJpdmF0ZSk7CisgICAgaWYgKHApCisgICAgICAgIHAtPnJl
ZigpOworICAgIGFzc2lnbihwKTsKK30KKworV2ViTm9kZUNvbGxlY3Rpb246OldlYk5vZGVDb2xs
ZWN0aW9uKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4mIGNvbCkKKyAgICA6
IG1fcHJpdmF0ZShzdGF0aWNfY2FzdDxIVE1MQ29sbGVjdGlvbio+KGNvbC5yZWxlYXNlUmVmKCkp
KQoreworfQorCit2b2lkIFdlYk5vZGVDb2xsZWN0aW9uOjphc3NpZ24oSFRNTENvbGxlY3Rpb24q
IHApCit7CisgICAgLy8gcCBpcyBhbHJlYWR5IHJlZidkIGZvciB1cyBieSB0aGUgY2FsbGVyCisg
ICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5kZXJlZigpOworICAgIG1fcHJp
dmF0ZSA9IHA7Cit9CisKK3Vuc2lnbmVkIFdlYk5vZGVDb2xsZWN0aW9uOjpsZW5ndGgoKSBjb25z
dAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmxlbmd0aCgpOworfQorCitXZWJOb2RlIFdlYk5v
ZGVDb2xsZWN0aW9uOjpuZXh0SXRlbSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYk5vZGUobV9w
cml2YXRlLT5uZXh0SXRlbSgpKTsKK30KKworV2ViTm9kZSBXZWJOb2RlQ29sbGVjdGlvbjo6Zmly
c3RJdGVtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViTm9kZShtX3ByaXZhdGUtPmZpcnN0SXRl
bSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYk5vZGVMaXN0LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZUxp
c3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOTQwYjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5vZGVMaXN0LmNwcApAQCAtMCww
ICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYk5vZGVMaXN0LmgiCisK
KyNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKworI2luY2x1ZGUgIldl
Yk5vZGUuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJOb2RlTGlzdDo6cmVz
ZXQoKQoreworICAgIGFzc2lnbigwKTsKK30KKwordm9pZCBXZWJOb2RlTGlzdDo6YXNzaWduKGNv
bnN0IFdlYk5vZGVMaXN0JiBvdGhlcikKK3sKKyAgICBOb2RlTGlzdCogcCA9IGNvbnN0X2Nhc3Q8
Tm9kZUxpc3QqPihvdGhlci5tX3ByaXZhdGUpOworICAgIGlmIChwKQorICAgICAgICBwLT5yZWYo
KTsKKyAgICBhc3NpZ24ocCk7Cit9CisKK1dlYk5vZGVMaXN0OjpXZWJOb2RlTGlzdChjb25zdCBX
VEY6OlBhc3NSZWZQdHI8Tm9kZUxpc3Q+JiBjb2wpCisgICAgOiBtX3ByaXZhdGUoc3RhdGljX2Nh
c3Q8Tm9kZUxpc3QqPihjb2wucmVsZWFzZVJlZigpKSkKK3sKK30KKwordm9pZCBXZWJOb2RlTGlz
dDo6YXNzaWduKE5vZGVMaXN0KiBwKQoreworICAgIC8vIHAgaXMgYWxyZWFkeSByZWYnZCBmb3Ig
dXMgYnkgdGhlIGNhbGxlcgorICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+
ZGVyZWYoKTsKKyAgICBtX3ByaXZhdGUgPSBwOworfQorCit1bnNpZ25lZCBXZWJOb2RlTGlzdDo6
bGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5sZW5ndGgoKTsKK30KKwor
V2ViTm9kZSBXZWJOb2RlTGlzdDo6aXRlbShzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFdlYk5vZGUobV9wcml2YXRlLT5pdGVtKGluZGV4KSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXpl
ci5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjBiZWU3Ci0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAKQEAgLTAsMCArMSw4MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplci5oIgorCisj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisKKyNpbmNsdWRl
ICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgiCisjaW5j
bHVkZSAiV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisj
aW5jbHVkZSAiV2ViVmVjdG9yLmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworYm9vbCBXZWJQYWdlU2VyaWFs
aXplcjo6c2VyaWFsaXplKFdlYkZyYW1lKiBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHJlY3Vyc2l2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudCogY2xpZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+JiBsaW5rcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbG9j
YWxQYXRocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJp
bmcmIGxvY2FsRGlyZWN0b3J5TmFtZSkKK3sKKyAgICBXZWJQYWdlU2VyaWFsaXplckltcGwgc2Vy
aWFsaXplckltcGwoCisgICAgICAgIGZyYW1lLCByZWN1cnNpdmUsIGNsaWVudCwgbGlua3MsIGxv
Y2FsUGF0aHMsIGxvY2FsRGlyZWN0b3J5TmFtZSk7CisgICAgcmV0dXJuIHNlcmlhbGl6ZXJJbXBs
LnNlcmlhbGl6ZSgpOworfQorCitXZWJTdHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRl
TWV0YUNoYXJzZXREZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGNoYXJzZXQpCit7CisgICAg
cmV0dXJuIFN0cmluZzo6Zm9ybWF0KCI8TUVUQSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIg
Y29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD0lc1wiPiIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXJzZXQudXRmOCgpLmRhdGEoKSk7Cit9CisKK1dlYlN0cmluZyBXZWJQYWdlU2Vy
aWFsaXplcjo6Z2VuZXJhdGVNYXJrT2ZUaGVXZWJEZWNsYXJhdGlvbihjb25zdCBXZWJVUkwmIHVy
bCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIlxuPCEtLSBzYXZlZCBmcm9tIHVybD0o
JTA0ZCklcyAtLT5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dD4odXJsLnNwZWMoKS5sZW5ndGgoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVybC5z
cGVjKCkuZGF0YSgpKTsKK30KKworV2ViU3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0
ZUJhc2VUYWdEZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGJhc2VUYXJnZXQpCit7CisgICAg
U3RyaW5nIHRhcmdldERlY2xhcmF0aW9uOworICAgIGlmICghYmFzZVRhcmdldC5pc0VtcHR5KCkp
CisgICAgICAgIHRhcmdldERlY2xhcmF0aW9uID0gU3RyaW5nOjpmb3JtYXQoIiB0YXJnZXQ9XCIl
c1wiIiwgYmFzZVRhcmdldC51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gU3RyaW5nOjpmb3Jt
YXQoIjxCQVNFIGhyZWY9XCIuXCIlcz4iLCB0YXJnZXREZWNsYXJhdGlvbi51dGY4KCkuZGF0YSgp
KTsKK30KKworfSAgLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJQYWdlU2VyaWFsaXplckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjJjNTg0MGUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBh
Z2VTZXJpYWxpemVySW1wbC5jcHAKQEAgLTAsMCArMSw1NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBIb3cgd2UgaGFuZGxlIHRo
ZSBiYXNlIHRhZyBiZXR0ZXIuCisvLyBDdXJyZW50IHN0YXR1czoKKy8vIEF0IG5vdyB0aGUgbm9y
bWFsIHdheSB3ZSB1c2UgdG8gaGFuZGxpbmcgYmFzZSB0YWcgaXMKKy8vIGEpIEZvciB0aG9zZSBs
aW5rcyB3aGljaCBoYXZlIGNvcnJlc3BvbmRpbmcgbG9jYWwgc2F2ZWQgZmlsZXMsIHN1Y2ggYXMK
Ky8vIHNhdmFibGUgQ1NTLCBKYXZhU2NyaXB0IGZpbGVzLCB0aGV5IHdpbGwgYmUgd3JpdHRlbiB0
byByZWxhdGl2ZSBVUkxzIHdoaWNoCisvLyBwb2ludCB0byBsb2NhbCBzYXZlZCBmaWxlLiBXaHkg
dGhvc2UgbGlua3MgY2FuIG5vdCBiZSByZXNvbHZlZCBhcyBhYnNvbHV0ZQorLy8gZmlsZSBVUkxz
LCBiZWNhdXNlIGlmIHRoZXkgYXJlIHJlc29sdmVkIGFzIGFic29sdXRlIFVSTHMsIGFmdGVyIG1v
dmluZyB0aGUKKy8vIGZpbGUgbG9jYXRpb24gZnJvbSBvbmUgZGlyZWN0b3J5IHRvIGFub3RoZXIg
ZGlyZWN0b3J5LCB0aGUgZmlsZSBVUkxzIHdpbGwKKy8vIGJlIGRlYWQgbGlua3MuCisvLyBiKSBG
b3IgdGhvc2UgbGlua3Mgd2hpY2ggaGF2ZSBub3QgY29ycmVzcG9uZGluZyBsb2NhbCBzYXZlZCBm
aWxlcywgc3VjaCBhcworLy8gbGlua3MgaW4gQSwgQVJFQSB0YWdzLCB0aGV5IHdpbGwgYmUgcmVz
b2x2ZWQgYXMgYWJzb2x1dGUgVVJMcy4KKy8vIGMpIFdlIGNvbW1lbnQgYWxsIGJhc2UgdGFncyB3
aGVuIHNlcmlhbHppbmcgRE9NIGZvciB0aGUgcGFnZS4KKy8vIEZpcmVGb3ggYWxzbyB1c2VzIGFi
b3ZlIHdheSB0byBoYW5kbGUgYmFzZSB0YWcuCisvLworLy8gUHJvYmxlbToKKy8vIFRoaXMgd2F5
IGNhbiBub3QgaGFuZGxlIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9uOgorLy8gdGhlIGJhc2UgdGFn
IGlzIHdyaXR0ZW4gYnkgSmF2YVNjcmlwdC4KKy8vIEZvciBleGFtcGxlLiBUaGUgcGFnZSAid3d3
LnlhaG9vLmNvbSIgdXNlCisvLyAiZG9jdW1lbnQud3JpdGUoJzxiYXNlIGhyZWY9Imh0dHA6Ly93
d3cueWFob28uY29tLyIuLi4nKTsiIHRvIHNldHVwIGJhc2UgVVJMCisvLyBvZiBwYWdlIHdoZW4g
bG9hZGluZyBwYWdlLiBTbyB3aGVuIHNhdmluZyBwYWdlIGFzIGNvbXBsZXRlZC1IVE1MLCB3ZSBh
c3N1bWUKKy8vIHRoYXQgd2Ugc2F2ZSAid3d3LnlhaG9vLmNvbSIgdG8gImM6XHlhaG9vLmh0bSIu
IEFmdGVyIHRoZW4gd2UgbG9hZCB0aGUgc2F2ZWQKKy8vIGNvbXBsZXRlZC1IVE1MIHBhZ2UsIHRo
ZW4gdGhlIEphdmFTY3JpcHQgd2lsbCBpbnNlcnQgYSBiYXNlIHRhZworLy8gPGJhc2UgaHJlZj0i
aHR0cDovL3d3dy55YWhvby5jb20vIi4uLj4gdG8gRE9NLCBzbyBhbGwgVVJMcyB3aGljaCBwb2lu
dCB0bworLy8gbG9jYWwgc2F2ZWQgcmVzb3VyY2UgZmlsZXMgd2lsbCBiZSByZXNvbHZlZCBhcwor
Ly8gImh0dHA6Ly93d3cueWFob28uY29tL3lhaG9vX2ZpbGVzLy4uLiIsIHdoaWNoIHdpbGwgY2F1
c2UgYWxsIHNhdmVkICByZXNvdXJjZQorLy8gZmlsZXMgY2FuIG5vdCBiZSBsb2FkZWQgY29ycmVj
dGx5LiBBbHNvIHRoZSBwYWdlIHdpbGwgYmUgcmVuZGVyZWQgdWdseSBzaW5jZQorLy8gYWxsIHNh
dmVkIHN1Yi1yZXNvdXJjZSBmaWxlcyAoc3VjaCBhcyBDU1MsIEphdmFTY3JpcHQgZmlsZXMpIGFu
ZCBzdWItZnJhbWUKKy8vIGZpbGVzIGNhbiBub3QgYmUgZmV0Y2hlZC4KKy8vIE5vdyBGaXJlRm94
LCBJRSBhbmQgV2ViS2l0IGJhc2VkIEJyb3dzZXIgYWxsIGhhdmUgdGhpcyBwcm9ibGVtLgorLy8K
Ky8vIFNvbHV0aW9uOgorLy8gTXkgc29sdXRpb24gaXMgdGhhdCB3ZSBjb21tZW50IG9sZCBiYXNl
IHRhZyBhbmQgd3JpdGUgbmV3IGJhc2UgdGFnOgorLy8gPGJhc2UgaHJlZj0iLiIgLi4uPiBhZnRl
ciB0aGUgcHJldmlvdXMgY29tbWVudGVkIGJhc2UgdGFnLiBJbiBXZWJLaXQsIGl0CisvLyBhbHdh
eXMgdXNlcyB0aGUgbGF0ZXN0ICJocmVmIiBhdHRyaWJ1dGUgb2YgYmFzZSB0YWcgdG8gc2V0IGRv
Y3VtZW50J3MgYmFzZQorLy8gVVJMLiBCYXNlZCBvbiB0aGlzIGJlaGF2aW9yLCB3aGVuIHdlIGVu
Y291bnRlciBhIGJhc2UgdGFnLCB3ZSBjb21tZW50IGl0IGFuZAorLy8gd3JpdGUgYSBuZXcgYmFz
ZSB0YWcgPGJhc2UgaHJlZj0iLiI+IGFmdGVyIHRoZSBwcmV2aW91cyBjb21tZW50ZWQgYmFzZSB0
YWcuCisvLyBUaGUgbmV3IGFkZGVkIGJhc2UgdGFnIGNhbiBoZWxwIGVuZ2luZSB0byBsb2NhdGUg
Y29ycmVjdCBiYXNlIFVSTCBmb3IKKy8vIGNvcnJlY3RseSBsb2FkaW5nIGxvY2FsIHNhdmVkIHJl
c291cmNlIGZpbGVzLiBBbHNvIEkgdGhpbmsgd2UgbmVlZCB0byBpbmhlcml0CisvLyB0aGUgYmFz
ZSB0YXJnZXQgdmFsdWUgZnJvbSBkb2N1bWVudCBvYmplY3Qgd2hlbiBhcHBlbmRpbmcgbmV3IGJh
c2UgdGFnLgorLy8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGJhc2UgdGFncyBpbiBvcmlnaW5hbCBk
b2N1bWVudCwgd2Ugd2lsbCBjb21tZW50IGFsbCBvbGQKKy8vIGJhc2UgdGFncyBhbmQgYXBwZW5k
IG5ldyBiYXNlIHRhZyBhZnRlciBlYWNoIG9sZCBiYXNlIHRhZyBiZWNhdXNlIHdlIGRvIG5vdAor
Ly8ga25vdyB0aG9zZSBvbGQgYmFzZSB0YWdzIGFyZSBvcmlnaW5hbCBjb250ZW50IG9yIGFkZGVk
IGJ5IEphdmFTY3JpcHQuIElmCisvLyB0aGV5IGFyZSBhZGRlZCBieSBKYXZhU2NyaXB0LCBpdCBt
ZWFucyB3aGVuIGxvYWRpbmcgc2F2ZWQgcGFnZSwgdGhlIHNjcmlwdChzKQorLy8gd2lsbCBzdGls
bCBpbnNlcnQgYmFzZSB0YWcocykgdG8gRE9NLCBzbyB0aGUgbmV3IGFkZGVkIGJhc2UgdGFnKHMp
IGNhbgorLy8gb3ZlcnJpZGUgdGhlIGluY29ycmVjdCBiYXNlIFVSTCBhbmQgbWFrZSBzdXJlIHdl
IGFsd2F5IGxvYWQgY29ycmVjdCBsb2NhbAorLy8gc2F2ZWQgcmVzb3VyY2UgZmlsZXMuCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplckltcGwuaCIKKwor
I2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCisjaW5jbHVk
ZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiSFRNTEFs
bENvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxG
b3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxNZXRhRWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJtYXJrdXAuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKKyNpbmNs
dWRlICJUZXh0RW5jb2RpbmcuaCIKKworI2luY2x1ZGUgIkRPTVV0aWxpdGllc1ByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKyNpbmNsdWRl
ICJXZWJWZWN0b3IuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCisvLyBNYXhpbXVtIGxlbmd0aCBvZiBkYXRhIGJ1ZmZlciB3aGljaCBpcyB1c2Vk
IHRvIHRlbXBvcmFyeSBzYXZlIGdlbmVyYXRlZAorLy8gaHRtbCBjb250ZW50IGRhdGEuCitzdGF0
aWMgY29uc3QgdW5zaWduZWQgZGF0YUJ1ZmZlckNhcGFjaXR5ID0gNjU1MzY7CisKK1dlYlBhZ2VT
ZXJpYWxpemVySW1wbDo6U2VyaWFsaXplRG9tUGFyYW06OlNlcmlhbGl6ZURvbVBhcmFtKGNvbnN0
IEtVUkwmIGN1cnJlbnRGcmFtZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHRFbmNvZGluZyYgdGV4dEVuY29k
aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRG9jdW1lbnQqIGRvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5TmFtZSkK
KyAgICA6IGN1cnJlbnRGcmFtZVVSTChjdXJyZW50RnJhbWVVUkwpCisgICAgLCB0ZXh0RW5jb2Rp
bmcodGV4dEVuY29kaW5nKQorICAgICwgZG9jKGRvYykKKyAgICAsIGRpcmVjdG9yeU5hbWUoZGly
ZWN0b3J5TmFtZSkKKyAgICAsIGhhc0RvY3R5cGUoZmFsc2UpCisgICAgLCBoYXNDaGVja2VkTWV0
YShmYWxzZSkKKyAgICAsIHNraXBNZXRhRWxlbWVudCgwKQorICAgICwgaXNJblNjcmlwdE9yU3R5
bGVUYWcoZmFsc2UpCisgICAgLCBoYXNEb2NEZWNsYXJhdGlvbihmYWxzZSkKK3sKKyAgICAvLyBD
YWNoZSB0aGUgdmFsdWUgc2luY2Ugd2UgY2hlY2sgaXQgbG90cyBvZiB0aW1lcy4KKyAgICBpc0hU
TUxEb2N1bWVudCA9IGRvYy0+aXNIVE1MRG9jdW1lbnQoKTsKK30KKworU3RyaW5nIFdlYlBhZ2VT
ZXJpYWxpemVySW1wbDo6cHJlQWN0aW9uQmVmb3JlU2VyaWFsaXplT3BlblRhZygKKyAgICBjb25z
dCBFbGVtZW50KiBlbGVtZW50LCBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0sIGJvb2wqIG5lZWRT
a2lwKQoreworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworCisgICAgKm5lZWRTa2lwID0gZmFs
c2U7CisgICAgaWYgKHBhcmFtLT5pc0hUTUxEb2N1bWVudCkgeworICAgICAgICAvLyBTa2lwIHRo
ZSBvcGVuIHRhZyBvZiBvcmlnaW5hbCBNRVRBIHRhZyB3aGljaCBkZWNsYXJlIGNoYXJzZXQgc2lu
Y2Ugd2UKKyAgICAgICAgLy8gaGF2ZSBvdmVycmlkZWQgdGhlIE1FVEEgd2hpY2ggaGF2ZSBjb3Jy
ZWN0IGNoYXJzZXQgZGVjbGFyYXRpb24gYWZ0ZXIKKyAgICAgICAgLy8gc2VyaWFsaXppbmcgb3Bl
biB0YWcgb2YgSEVBRCBlbGVtZW50LgorICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Om1ldGFUYWcpKSB7CisgICAgICAgICAgICBjb25zdCBIVE1MTWV0YUVsZW1lbnQq
IG1ldGEgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MTWV0YUVsZW1lbnQqPihlbGVtZW50KTsKKyAg
ICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIE1FVEEgdGFnIGhhcyBkZWNsYXJlZCBjaGFy
c2V0IG9yIG5vdC4KKyAgICAgICAgICAgIFN0cmluZyBlcXVpdiA9IG1ldGEtPmh0dHBFcXVpdigp
OworICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAiY29udGVudC10eXBl
IikpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgY29udGVudCA9IG1ldGEtPmNvbnRlbnQoKTsK
KyAgICAgICAgICAgICAgICBpZiAoY29udGVudC5sZW5ndGgoKSAmJiBjb250ZW50LmNvbnRhaW5z
KCJjaGFyc2V0IiwgZmFsc2UpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgTUVUQSB0
YWcgZGVjbGFyZWQgY2hhcnNldCwgd2UgbmVlZCB0byBza2lwIGl0IHdoZW4KKyAgICAgICAgICAg
ICAgICAgICAgLy8gc2VyaWFsaXppbmcgRE9NLgorICAgICAgICAgICAgICAgICAgICBwYXJhbS0+
c2tpcE1ldGFFbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgICAgICAgICAgICAgKm5lZWRTa2lw
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKSB7CisgICAgICAg
ICAgICAvLyBDaGVjayBzb21ldGhpbmcgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIG9wZW4gdGFnIG9m
IEhFQUQgZWxlbWVudC4KKyAgICAgICAgICAgIC8vIEZpcnN0IHdlIGFkZCBkb2MgdHlwZSBkZWNs
YXJhdGlvbiBpZiBvcmlnaW5hbCBkb2MgaGFzIGl0LgorICAgICAgICAgICAgaWYgKCFwYXJhbS0+
aGFzRG9jdHlwZSkgeworICAgICAgICAgICAgICAgIHBhcmFtLT5oYXNEb2N0eXBlID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNyZWF0ZU1hcmt1cChwYXJhbS0+ZG9jLT5k
b2N0eXBlKCkpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIE1PVFcgZGVj
bGFyYXRpb24gYmVmb3JlIGh0bWwgdGFnLgorICAgICAgICAgICAgLy8gU2VlIGh0dHA6Ly9tc2Ru
Mi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1Mzc2MjgoVlMuODUpLmFzcHguCisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZU1hcmtPZlRo
ZVdlYkRlY2xhcmF0aW9uKHBhcmFtLT5jdXJyZW50RnJhbWVVUkwpKTsKKyAgICAgICAgfSBlbHNl
IGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmFzZVRhZykpIHsKKyAgICAgICAg
ICAgIC8vIENvbW1lbnQgdGhlIEJBU0UgdGFnIHdoZW4gc2VyaWFsaXppbmcgZG9tLgorICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiPCEtLSIpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gV3JpdGUgWE1MIGRlY2xhcmF0aW9uLgorICAgICAgICBpZiAoIXBhcmFtLT5oYXNE
b2NEZWNsYXJhdGlvbikgeworICAgICAgICAgICAgcGFyYW0tPmhhc0RvY0RlY2xhcmF0aW9uID0g
dHJ1ZTsKKyAgICAgICAgICAgIC8vIEdldCBlbmNvZGluZyBpbmZvLgorICAgICAgICAgICAgU3Ry
aW5nIHhtbEVuY29kaW5nID0gcGFyYW0tPmRvYy0+eG1sRW5jb2RpbmcoKTsKKyAgICAgICAgICAg
IGlmICh4bWxFbmNvZGluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgeG1sRW5jb2Rpbmcg
PSBwYXJhbS0+ZG9jLT5mcmFtZSgpLT5sb2FkZXIoKS0+ZW5jb2RpbmcoKTsKKyAgICAgICAgICAg
IGlmICh4bWxFbmNvZGluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgeG1sRW5jb2Rpbmcg
PSBVVEY4RW5jb2RpbmcoKS5uYW1lKCk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCI8P3ht
bCB2ZXJzaW9uPVwiIik7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHBhcmFtLT5kb2MtPnht
bFZlcnNpb24oKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJcIiBlbmNvZGluZz1cIiIp
OworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh4bWxFbmNvZGluZyk7CisgICAgICAgICAgICBp
ZiAocGFyYW0tPmRvYy0+eG1sU3RhbmRhbG9uZSgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoIlwiIHN0YW5kYWxvbmU9XCJ5ZXMiKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
IlwiPz5cbiIpOworICAgICAgICB9CisgICAgICAgIC8vIEFkZCBkb2MgdHlwZSBkZWNsYXJhdGlv
biBpZiBvcmlnaW5hbCBkb2MgaGFzIGl0LgorICAgICAgICBpZiAoIXBhcmFtLT5oYXNEb2N0eXBl
KSB7CisgICAgICAgICAgICBwYXJhbS0+aGFzRG9jdHlwZSA9IHRydWU7CisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKGNyZWF0ZU1hcmt1cChwYXJhbS0+ZG9jLT5kb2N0eXBlKCkpKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBX
ZWJQYWdlU2VyaWFsaXplckltcGw6OnBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZU9wZW5UYWcoCisg
ICAgY29uc3QgRWxlbWVudCogZWxlbWVudCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQorewor
ICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworCisgICAgcGFyYW0tPmhhc0FkZGVkQ29udGVudHNC
ZWZvcmVFbmQgPSBmYWxzZTsKKyAgICBpZiAoIXBhcmFtLT5pc0hUTUxEb2N1bWVudCkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworICAgIC8vIENoZWNrIGFmdGVyIHByb2Nlc3Np
bmcgdGhlIG9wZW4gdGFnIG9mIEhFQUQgZWxlbWVudAorICAgIGlmICghcGFyYW0tPmhhc0NoZWNr
ZWRNZXRhICYmCisgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkVGFn
KSkgeworICAgICAgICBwYXJhbS0+aGFzQ2hlY2tlZE1ldGEgPSB0cnVlOworICAgICAgICAvLyBD
aGVjayBtZXRhIGVsZW1lbnQuIFdlYktpdCBvbmx5IHByZS1wYXJzZSB0aGUgZmlyc3QgNTEyIGJ5
dGVzCisgICAgICAgIC8vIG9mIHRoZSBkb2N1bWVudC4gSWYgdGhlIHdob2xlIDxIRUFEPiBpcyBs
YXJnZXIgYW5kIG1ldGEgaXMgdGhlCisgICAgICAgIC8vIGVuZCBvZiBoZWFkIHBhcnQsIHRoZW4g
dGhpcyBraW5kIG9mIHBhZ2VzIGFyZW4ndCBkZWNvZGVkIGNvcnJlY3RseQorICAgICAgICAvLyBi
ZWNhdXNlIG9mIHRoaXMgaXNzdWUuIFNvIHdoZW4gd2Ugc2VyaWFsaXplIHRoZSBET00sIHdlIG5l
ZWQgdG8KKyAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBtZXRhIHdpbGwgaW4gZmlyc3QgY2hpbGQg
b2YgaGVhZCB0YWcuCisgICAgICAgIC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjYyMS4KKyAgICAgICAgLy8gRmlyc3Qgd2UgZ2VuZXJhdGUgbmV3IGNvbnRl
bnQgZm9yIHdyaXRpbmcgY29ycmVjdCBNRVRBIGVsZW1lbnQuCisgICAgICAgIHJlc3VsdC5hcHBl
bmQoV2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlTWV0YUNoYXJzZXREZWNsYXJhdGlvbigKKyAg
ICAgICAgICAgIFN0cmluZyhwYXJhbS0+dGV4dEVuY29kaW5nLm5hbWUoKSkpKTsKKworICAgICAg
ICBwYXJhbS0+aGFzQWRkZWRDb250ZW50c0JlZm9yZUVuZCA9IHRydWU7CisgICAgICAgIC8vIFdp
bGwgc2VhcmNoIGVhY2ggTUVUQSB3aGljaCBoYXMgY2hhcnNldCBkZWNsYXJhdGlvbiwgYW5kIHNr
aXAgdGhlbSBhbGwKKyAgICAgICAgLy8gaW4gUHJlQWN0aW9uQmVmb3JlU2VyaWFsaXplT3BlblRh
Zy4KKyAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHRU
YWcpCisgICAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5
bGVUYWcpKSB7CisgICAgICAgIHBhcmFtLT5pc0luU2NyaXB0T3JTdHlsZVRhZyA9IHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworfQorCitTdHJpbmcgV2ViUGFn
ZVNlcmlhbGl6ZXJJbXBsOjpwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVFbmRUYWcoCisgICAgY29u
c3QgRWxlbWVudCogZWxlbWVudCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLCBib29sKiBuZWVk
U2tpcCkKK3sKKyAgICBTdHJpbmcgcmVzdWx0OworCisgICAgKm5lZWRTa2lwID0gZmFsc2U7Cisg
ICAgaWYgKCFwYXJhbS0+aXNIVE1MRG9jdW1lbnQpCisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgLy8gU2tpcCB0aGUgZW5kIHRhZyBvZiBvcmlnaW5hbCBNRVRBIHRhZyB3aGljaCBkZWNsYXJl
IGNoYXJzZXQuCisgICAgLy8gTmVlZCBub3QgdG8gY2hlY2sgd2hldGhlciBpdCdzIE1FVEEgdGFn
IHNpbmNlIHdlIGd1YXJhbnRlZQorICAgIC8vIHNraXBNZXRhRWxlbWVudCBpcyBkZWZpbml0ZWx5
IE1FVEEgdGFnIGlmIGl0J3Mgbm90IE5VTEwuCisgICAgaWYgKHBhcmFtLT5za2lwTWV0YUVsZW1l
bnQgPT0gZWxlbWVudCkKKyAgICAgICAgKm5lZWRTa2lwID0gdHJ1ZTsKKyAgICBlbHNlIGlmIChl
bGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0VGFnKQorICAgICAgICAgICAgIHx8
IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZVRhZykpIHsKKyAgICAgICAgQVNT
RVJUKHBhcmFtLT5pc0luU2NyaXB0T3JTdHlsZVRhZyk7CisgICAgICAgIHBhcmFtLT5pc0luU2Ny
aXB0T3JTdHlsZVRhZyA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
Ky8vIEFmdGVyIHdlIGZpbmlzaCBzZXJpYWxpemluZyBlbmQgdGFnIG9mIGEgZWxlbWVudCwgd2Ug
Z2l2ZSB0aGUgdGFyZ2V0CisvLyBlbGVtZW50IGEgY2hhbmNlIHRvIGRvIHNvbWUgcG9zdCB3b3Jr
IHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgZGF0YS4KK1N0cmluZyBXZWJQYWdlU2VyaWFsaXplcklt
cGw6OnBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZUVuZFRhZygKKyAgICBjb25zdCBFbGVtZW50KiBl
bGVtZW50LCBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pCit7CisgICAgU3RyaW5nQnVpbGRlciBy
ZXN1bHQ7CisKKyAgICBpZiAoIXBhcmFtLT5pc0hUTUxEb2N1bWVudCkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdC50b1N0cmluZygpOworICAgIC8vIENvbW1lbnQgdGhlIEJBU0UgdGFnIHdoZW4gc2Vy
aWFsaXppbmcgRE9NLgorICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmFz
ZVRhZykpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiLS0+Iik7CisgICAgICAgIC8vIEFwcGVu
ZCBhIG5ldyBiYXNlIHRhZyBkZWNsYXJhdGlvbi4KKyAgICAgICAgcmVzdWx0LmFwcGVuZChXZWJQ
YWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVCYXNlVGFnRGVjbGFyYXRpb24oCisgICAgICAgICAgICBw
YXJhbS0+ZG9jLT5iYXNlVGFyZ2V0KCkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0LnRv
U3RyaW5nKCk7Cit9CisKK3ZvaWQgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpzYXZlSFRNTENvbnRl
bnRUb0J1ZmZlcigKKyAgICBjb25zdCBTdHJpbmcmIHJlc3VsdCwgU2VyaWFsaXplRG9tUGFyYW0q
IHBhcmFtKQoreworICAgIGlmICghcmVzdWx0Lmxlbmd0aCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgLy8gQ29udmVydCB0aGUgdW5pY29kZSBjb250ZW50IHRvIHRhcmdldCBlbmNvZGluZworICAg
IENTdHJpbmcgZW5jb2RpbmdSZXN1bHQgPSBwYXJhbS0+dGV4dEVuY29kaW5nLmVuY29kZSgKKyAg
ICAgICAgcmVzdWx0LmNoYXJhY3RlcnMoKSwgcmVzdWx0Lmxlbmd0aCgpLCBFbnRpdGllc0ZvclVu
ZW5jb2RhYmxlcyk7CisKKyAgICAvLyBpZiB0aGUgZGF0YSBidWZmZXIgd2lsbCBiZSBmdWxsLCB0
aGVuIHNlbmQgaXQgb3V0IGZpcnN0LgorICAgIGlmIChlbmNvZGluZ1Jlc3VsdC5sZW5ndGgoKSAr
IG1fZGF0YUJ1ZmZlci5sZW5ndGgoKSA+IGRhdGFCdWZmZXJDYXBhY2l0eSkgeworICAgICAgICAv
LyBTZW5kIGRhdGEgdG8gZGVsZWdhdGUsIHRlbGwgaXQgbm93IHdlIGFyZSBzZXJpYWxpemluZyBj
dXJyZW50IGZyYW1lLgorICAgICAgICBtX2NsaWVudC0+ZGlkU2VyaWFsaXplRGF0YUZvckZyYW1l
KHBhcmFtLT5jdXJyZW50RnJhbWVVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9kYXRhQnVmZmVyLnRvU3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQ6OkN1cnJlbnRG
cmFtZUlzTm90RmluaXNoZWQpOworICAgICAgICBtX2RhdGFCdWZmZXIuY2xlYXIoKTsKKyAgICB9
CisKKyAgICAvLyBBcHBlbmQgcmVzdWx0IHRvIGRhdGEgYnVmZmVyLgorICAgIG1fZGF0YUJ1ZmZl
ci5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChlbmNvZGluZ1Jlc3VsdC5kYXRhKCkpKTsKK30KKwor
dm9pZCBXZWJQYWdlU2VyaWFsaXplckltcGw6Om9wZW5UYWdUb1N0cmluZyhjb25zdCBFbGVtZW50
KiBlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
ZXJpYWxpemVEb21QYXJhbSogcGFyYW0pCit7CisgICAgLy8gRklYTUU6IHVzZSBTdHJpbmdCdWls
ZGVyIGluc3RlYWQgb2YgU3RyaW5nLgorICAgIGJvb2wgbmVlZFNraXA7CisgICAgLy8gRG8gcHJl
IGFjdGlvbiBmb3Igb3BlbiB0YWcuCisgICAgU3RyaW5nIHJlc3VsdCA9IHByZUFjdGlvbkJlZm9y
ZVNlcmlhbGl6ZU9wZW5UYWcoZWxlbWVudCwgcGFyYW0sICZuZWVkU2tpcCk7CisgICAgaWYgKG5l
ZWRTa2lwKQorICAgICAgICByZXR1cm47CisgICAgLy8gQWRkIG9wZW4gdGFnCisgICAgcmVzdWx0
ICs9ICI8IiArIGVsZW1lbnQtPm5vZGVOYW1lKCk7CisgICAgLy8gR28gdGhyb3VnaCBhbGwgYXR0
cmlidXRlcyBhbmQgc2VyaWFsaXplIHRoZW0uCisgICAgY29uc3QgTmFtZWROb2RlTWFwICphdHRy
TWFwID0gZWxlbWVudC0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICBpZiAoYXR0ck1hcCkgeworICAg
ICAgICB1bnNpZ25lZCBudW1BdHRycyA9IGF0dHJNYXAtPmxlbmd0aCgpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQXR0cnM7IGkrKykgeworICAgICAgICAgICAgcmVzdWx0
ICs9ICIgIjsKKyAgICAgICAgICAgIC8vIEFkZCBhdHRyaWJ1dGUgcGFpcgorICAgICAgICAgICAg
Y29uc3QgQXR0cmlidXRlICphdHRyaWJ1dGUgPSBhdHRyTWFwLT5hdHRyaWJ1dGVJdGVtKGkpOwor
ICAgICAgICAgICAgcmVzdWx0ICs9IGF0dHJpYnV0ZS0+bmFtZSgpLnRvU3RyaW5nKCk7CisgICAg
ICAgICAgICByZXN1bHQgKz0gIj1cIiI7CisgICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZS0+dmFs
dWUoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGF0dHJWYWx1
ZSA9IGF0dHJpYnV0ZS0+dmFsdWUoKTsKKworICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRo
ZXIgd2UgbmVlZCB0byByZXBsYWNlIHNvbWUgcmVzb3VyY2UgbGlua3MKKyAgICAgICAgICAgICAg
ICAvLyB3aXRoIGxvY2FsIHJlc291cmNlIHBhdGhzLgorICAgICAgICAgICAgICAgIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lID0gYXR0cmlidXRlLT5uYW1lKCk7CisgICAgICAgICAgICAg
ICAgaWYgKGVsZW1lbnRIYXNMZWdhbExpbmtBdHRyaWJ1dGUoZWxlbWVudCwgYXR0ck5hbWUpKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIEZvciBsaW5rcyBzdGFydCB3aXRoICJqYXZhc2NyaXB0
OiIsIHdlIGRvIG5vdCBjaGFuZ2UgaXQuCisgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyVmFs
dWUuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgKz0gYXR0clZhbHVlOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgYWJzb2x1dGUgbGluaworICAgICAgICAg
ICAgICAgICAgICAgICAgU3RyaW5nIGNvbXBsZXRlVVJMID0gcGFyYW0tPmRvYy0+Y29tcGxldGVV
UkwoYXR0clZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIg
d2UgaGF2ZSBsb2NhbCBmaWxlcyBmb3IgdGhvc2UgbGluay4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2xvY2FsTGlua3MuY29udGFpbnMoY29tcGxldGVVUkwpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFtX2xvY2FsRGlyZWN0b3J5TmFtZS5pc0VtcHR5KCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBtX2xvY2FsRGlyZWN0b3J5
TmFtZSArICIvIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gbV9sb2Nh
bExpbmtzLmdldChjb21wbGV0ZVVSTCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ICs9IGNvbXBsZXRlVVJMOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLT5pc0hUTUxEb2N1bWVu
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBtX2h0bWxFbnRpdGllcy5jb252
ZXJ0RW50aXRpZXNJblN0cmluZyhhdHRyVmFsdWUpOworICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gbV94bWxFbnRpdGllcy5jb252ZXJ0
RW50aXRpZXNJblN0cmluZyhhdHRyVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJlc3VsdCArPSAiXCIiOworICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gRG8gcG9zdCBhY3Rpb24gZm9yIG9wZW4gdGFnLgorICAgIFN0cmluZyBhZGRlZENvbnRl
bnRzID0gcG9zdEFjdGlvbkFmdGVyU2VyaWFsaXplT3BlblRhZyhlbGVtZW50LCBwYXJhbSk7Cisg
ICAgLy8gQ29tcGxldGUgdGhlIG9wZW4gdGFnIGZvciBlbGVtZW50IHdoZW4gaXQgaGFzIGNoaWxk
L2NoaWxkcmVuLgorICAgIGlmIChlbGVtZW50LT5oYXNDaGlsZE5vZGVzKCkgfHwgcGFyYW0tPmhh
c0FkZGVkQ29udGVudHNCZWZvcmVFbmQpCisgICAgICAgIHJlc3VsdCArPSAiPiI7CisgICAgLy8g
QXBwZW5kIHRoZSBhZGRlZCBjb250ZW50cyBnZW5lcmF0ZSBpbiAgcG9zdCBhY3Rpb24gb2Ygb3Bl
biB0YWcuCisgICAgcmVzdWx0ICs9IGFkZGVkQ29udGVudHM7CisgICAgLy8gU2F2ZSB0aGUgcmVz
dWx0IHRvIGRhdGEgYnVmZmVyLgorICAgIHNhdmVIVE1MQ29udGVudFRvQnVmZmVyKHJlc3VsdCwg
cGFyYW0pOworfQorCisvLyBTZXJpYWxpemUgZW5kIHRhZyBvZiBhbiBzcGVjaWZpZWQgZWxlbWVu
dC4KK3ZvaWQgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjplbmRUYWdUb1N0cmluZyhjb25zdCBFbGVt
ZW50KiBlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSkKK3sKKyAgICBib29sIG5lZWRTa2lwOworICAgIC8v
IERvIHByZSBhY3Rpb24gZm9yIGVuZCB0YWcuCisgICAgU3RyaW5nIHJlc3VsdCA9IHByZUFjdGlv
bkJlZm9yZVNlcmlhbGl6ZUVuZFRhZyhlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZFNraXApOworICAgIGlmIChuZWVkU2tp
cCkKKyAgICAgICAgcmV0dXJuOworICAgIC8vIFdyaXRlIGVuZCB0YWcgd2hlbiBlbGVtZW50IGhh
cyBjaGlsZC9jaGlsZHJlbi4KKyAgICBpZiAoZWxlbWVudC0+aGFzQ2hpbGROb2RlcygpIHx8IHBh
cmFtLT5oYXNBZGRlZENvbnRlbnRzQmVmb3JlRW5kKSB7CisgICAgICAgIHJlc3VsdCArPSAiPC8i
OworICAgICAgICByZXN1bHQgKz0gZWxlbWVudC0+bm9kZU5hbWUoKTsKKyAgICAgICAgcmVzdWx0
ICs9ICI+IjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHdlIGhhdmUg
dG8gd3JpdGUgZW5kIHRhZyBmb3IgZW1wdHkgZWxlbWVudC4KKyAgICAgICAgaWYgKHBhcmFtLT5p
c0hUTUxEb2N1bWVudCkgeworICAgICAgICAgICAgcmVzdWx0ICs9ICI+IjsKKyAgICAgICAgICAg
IGNvbnN0IEhUTUxFbGVtZW50KiBodG1sRWxlbWVudCA9CisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxjb25zdCBIVE1MRWxlbWVudCo+KGVsZW1lbnQpOworICAgICAgICAgICAgaWYgKGh0bWxFbGVt
ZW50LT5lbmRUYWdSZXF1aXJlbWVudCgpID09IFRhZ1N0YXR1c1JlcXVpcmVkKSB7CisgICAgICAg
ICAgICAgICAgLy8gV2UgbmVlZCB0byB3cml0ZSBlbmQgdGFnIHdoZW4gaXQgaXMgcmVxdWlyZWQu
CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICI8LyI7CisgICAgICAgICAgICAgICAgcmVzdWx0
ICs9IGVsZW1lbnQtPm5vZGVOYW1lKCk7CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICI+IjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZvciB4bWwg
YmFzZSBkb2N1bWVudC4KKyAgICAgICAgICAgIHJlc3VsdCArPSAiIC8+IjsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAvLyBEbyBwb3N0IGFjdGlvbiBmb3IgZW5kIHRhZy4KKyAgICByZXN1bHQgKz0g
cG9zdEFjdGlvbkFmdGVyU2VyaWFsaXplRW5kVGFnKGVsZW1lbnQsIHBhcmFtKTsKKyAgICAvLyBT
YXZlIHRoZSByZXN1bHQgdG8gZGF0YSBidWZmZXIuCisgICAgc2F2ZUhUTUxDb250ZW50VG9CdWZm
ZXIocmVzdWx0LCBwYXJhbSk7Cit9CisKK3ZvaWQgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpidWls
ZENvbnRlbnRGb3JOb2RlKGNvbnN0IE5vZGUqIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pCit7Cisg
ICAgc3dpdGNoIChub2RlLT5ub2RlVHlwZSgpKSB7CisgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05P
REU6CisgICAgICAgIC8vIFByb2Nlc3Mgb3BlbiB0YWcgb2YgZWxlbWVudC4KKyAgICAgICAgb3Bl
blRhZ1RvU3RyaW5nKHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQqPihub2RlKSwgcGFyYW0pOwor
ICAgICAgICAvLyBXYWxrIHRocm91Z2ggdGhlIGNoaWxkcmVuIG5vZGVzIGFuZCBwcm9jZXNzIGl0
LgorICAgICAgICBmb3IgKGNvbnN0IE5vZGUgKmNoaWxkID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBj
aGlsZCAhPSBOVUxMOworICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkp
CisgICAgICAgICAgICBidWlsZENvbnRlbnRGb3JOb2RlKGNoaWxkLCBwYXJhbSk7CisgICAgICAg
IC8vIFByb2Nlc3MgZW5kIHRhZyBvZiBlbGVtZW50LgorICAgICAgICBlbmRUYWdUb1N0cmluZyhz
dGF0aWNfY2FzdDxjb25zdCBFbGVtZW50Kj4obm9kZSksIHBhcmFtKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBOb2RlOjpURVhUX05PREU6CisgICAgICAgIHNhdmVIVE1MQ29udGVudFRvQnVm
ZmVyKGNyZWF0ZU1hcmt1cChub2RlKSwgcGFyYW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IE5vZGU6OkFUVFJJQlVURV9OT0RFOgorICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfTk9ERToKKyAg
ICBjYXNlIE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6CisgICAgICAgIC8vIFNob3VsZCBu
b3QgZXhpc3QuCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
KyAgICAvLyBEb2N1bWVudCB0eXBlIG5vZGUgY2FuIGJlIGluIERPTT8KKyAgICBjYXNlIE5vZGU6
OkRPQ1VNRU5UX1RZUEVfTk9ERToKKyAgICAgICAgcGFyYW0tPmhhc0RvY3R5cGUgPSB0cnVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIEZvciBvdGhlciB0eXBlIG5vZGUsIGNhbGwgZGVmYXVs
dCBhY3Rpb24uCisgICAgICAgIHNhdmVIVE1MQ29udGVudFRvQnVmZmVyKGNyZWF0ZU1hcmt1cChu
b2RlKSwgcGFyYW0pOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK1dlYlBhZ2VTZXJpYWxp
emVySW1wbDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsKFdlYkZyYW1lKiBmcmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlU2VyaWFs
aXphdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YlBhZ2VTZXJpYWxpemVyQ2xpZW50KiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViVVJMPiYgbGlua3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8
V2ViU3RyaW5nPiYgbG9jYWxQYXRocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbG9jYWxEaXJlY3RvcnlOYW1lKQorICAgIDog
bV9jbGllbnQoY2xpZW50KQorICAgICwgbV9yZWN1cnNpdmVTZXJpYWxpemF0aW9uKHJlY3Vyc2l2
ZVNlcmlhbGl6YXRpb24pCisgICAgLCBtX2ZyYW1lc0NvbGxlY3RlZChmYWxzZSkKKyAgICAsIG1f
bG9jYWxEaXJlY3RvcnlOYW1lKGxvY2FsRGlyZWN0b3J5TmFtZSkKKyAgICAsIG1faHRtbEVudGl0
aWVzKGZhbHNlKQorICAgICwgbV94bWxFbnRpdGllcyh0cnVlKQoreworICAgIC8vIE11c3Qgc3Bl
Y2lmeSBhdmFpbGFibGUgd2ViZnJhbWUuCisgICAgQVNTRVJUKGZyYW1lKTsKKyAgICBtX3NwZWNp
ZmllZFdlYkZyYW1lSW1wbCA9IHN0YXRpY19jYXN0PFdlYkZyYW1lSW1wbCo+KGZyYW1lKTsKKyAg
ICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBub3QtTlVMTCBkZWxlZ2F0ZS4KKyAgICBBU1NFUlQoY2xp
ZW50KTsKKyAgICAvLyBCdWlsZCBsb2NhbCByZXNvdXJjZXMgbWFwLgorICAgIEFTU0VSVChsaW5r
cy5zaXplKCkgPT0gbG9jYWxQYXRocy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGlua3Muc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgS1VSTCB1cmwgPSBsaW5rc1tpXTsKKyAg
ICAgICAgQVNTRVJUKCFtX2xvY2FsTGlua3MuY29udGFpbnModXJsLnN0cmluZygpKSk7CisgICAg
ICAgIG1fbG9jYWxMaW5rcy5zZXQodXJsLnN0cmluZygpLCBsb2NhbFBhdGhzW2ldKTsKKyAgICB9
CisKKyAgICBBU1NFUlQoIW1fZGF0YUJ1ZmZlci5sZW5ndGgoKSk7Cit9CisKK3ZvaWQgV2ViUGFn
ZVNlcmlhbGl6ZXJJbXBsOjpjb2xsZWN0VGFyZ2V0RnJhbWVzKCkKK3sKKyAgICBBU1NFUlQoIW1f
ZnJhbWVzQ29sbGVjdGVkKTsKKyAgICBtX2ZyYW1lc0NvbGxlY3RlZCA9IHRydWU7CisKKyAgICAv
LyBGaXJzdCwgcHJvY2VzcyBtYWluIGZyYW1lLgorICAgIG1fZnJhbWVzLmFwcGVuZChtX3NwZWNp
ZmllZFdlYkZyYW1lSW1wbCk7CisgICAgLy8gUmV0dXJuIG5vdyBpZiB1c2VyIG9ubHkgbmVlZHMg
dG8gc2VyaWFsaXplIHNwZWNpZmllZCBmcmFtZSwgbm90IGluY2x1ZGluZworICAgIC8vIGFsbCBz
dWItZnJhbWVzLgorICAgIGlmICghbV9yZWN1cnNpdmVTZXJpYWxpemF0aW9uKQorICAgICAgICBy
ZXR1cm47CisgICAgLy8gQ29sbGVjdCBhbGwgZnJhbWVzIGluc2lkZSB0aGUgc3BlY2lmaWVkIGZy
YW1lLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8aW50PihtX2ZyYW1lcy5z
aXplKCkpOyArK2kpIHsKKyAgICAgICAgV2ViRnJhbWVJbXBsKiBjdXJyZW50RnJhbWUgPSBtX2Zy
YW1lc1tpXTsKKyAgICAgICAgLy8gR2V0IGN1cnJlbnQgdXNpbmcgZG9jdW1lbnQuCisgICAgICAg
IERvY3VtZW50KiBjdXJyZW50RG9jID0gY3VycmVudEZyYW1lLT5mcmFtZSgpLT5kb2N1bWVudCgp
OworICAgICAgICAvLyBHbyB0aHJvdWdoIHN1Yi1mcmFtZXMuCisgICAgICAgIFJlZlB0cjxIVE1M
QWxsQ29sbGVjdGlvbj4gYWxsID0gY3VycmVudERvYy0+YWxsKCk7CisgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA9IGFsbC0+Zmlyc3RJdGVtKCk7IG5vZGUgIT0gTlVMTDsgbm9kZSA9IGFsbC0+bmV4
dEl0ZW0oKSkgeworICAgICAgICAgICAgaWYgKCFub2RlLT5pc0hUTUxFbGVtZW50KCkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOworICAgICAgICAgICAgV2ViRnJhbWVJbXBsKiB3ZWJG
cmFtZSA9CisgICAgICAgICAgICAgICAgV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWVPd25lckVsZW1l
bnQoZWxlbWVudCk7CisgICAgICAgICAgICBpZiAod2ViRnJhbWUpCisgICAgICAgICAgICAgICAg
bV9mcmFtZXMuYXBwZW5kKHdlYkZyYW1lKTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBX
ZWJQYWdlU2VyaWFsaXplckltcGw6OnNlcmlhbGl6ZSgpCit7CisgICAgLy8gQ29sbGVjdCB0YXJn
ZXQgZnJhbWVzLgorICAgIGlmICghbV9mcmFtZXNDb2xsZWN0ZWQpCisgICAgICAgIGNvbGxlY3RU
YXJnZXRGcmFtZXMoKTsKKyAgICBib29sIGRpZFNlcmlhbGl6YXRpb24gPSBmYWxzZTsKKyAgICAv
LyBHZXQgS1VSTCBmb3IgbWFpbiBmcmFtZS4KKyAgICBLVVJMIG1haW5QYWdlVVJMID0gbV9zcGVj
aWZpZWRXZWJGcmFtZUltcGwtPmZyYW1lKCktPmxvYWRlcigpLT51cmwoKTsKKworICAgIC8vIEdv
IHRocm91Z2ggYWxsIGZyYW1lcyBmb3Igc2VyaWFsaXppbmcgRE9NIGZvciB3aG9sZSBwYWdlLCBp
bmNsdWRlCisgICAgLy8gc3ViLWZyYW1lcy4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0YXRp
Y19jYXN0PGludD4obV9mcmFtZXMuc2l6ZSgpKTsgKytpKSB7CisgICAgICAgIC8vIEdldCBjdXJy
ZW50IHNlcmlhbGl6aW5nIGZyYW1lLgorICAgICAgICBXZWJGcmFtZUltcGwqIGN1cnJlbnRGcmFt
ZSA9IG1fZnJhbWVzW2ldOworICAgICAgICAvLyBHZXQgY3VycmVudCB1c2luZyBkb2N1bWVudC4K
KyAgICAgICAgRG9jdW1lbnQqIGN1cnJlbnREb2MgPSBjdXJyZW50RnJhbWUtPmZyYW1lKCktPmRv
Y3VtZW50KCk7CisgICAgICAgIC8vIEdldCBjdXJyZW50IGZyYW1lJ3MgVVJMLgorICAgICAgICBj
b25zdCBLVVJMJiBjdXJyZW50RnJhbWVVUkwgPSBjdXJyZW50RnJhbWUtPmZyYW1lKCktPmxvYWRl
cigpLT51cmwoKTsKKworICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHdlIGhhdmUgZG9uZSB0aGlz
IGRvY3VtZW50LgorICAgICAgICBpZiAobV9sb2NhbExpbmtzLmNvbnRhaW5zKGN1cnJlbnRGcmFt
ZVVSTC5zdHJpbmcoKSkpIHsKKyAgICAgICAgICAgIC8vIEEgbmV3IGRvY3VtZW50LCB3ZSB3aWxs
IHNlcmlhbGl6ZSBpdC4KKyAgICAgICAgICAgIGRpZFNlcmlhbGl6YXRpb24gPSB0cnVlOworICAg
ICAgICAgICAgLy8gR2V0IHRhcmdldCBlbmNvZGluZyBmb3IgY3VycmVudCBkb2N1bWVudC4KKyAg
ICAgICAgICAgIFN0cmluZyBlbmNvZGluZyA9IGN1cnJlbnRGcmFtZS0+ZnJhbWUoKS0+bG9hZGVy
KCktPmVuY29kaW5nKCk7CisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIHRleHQgZW5jb2Rpbmcg
b2JqZWN0IHdpdGggdGFyZ2V0IGVuY29kaW5nLgorICAgICAgICAgICAgVGV4dEVuY29kaW5nIHRl
eHRFbmNvZGluZyhlbmNvZGluZyk7CisgICAgICAgICAgICAvLyBDb25zdHJ1Y3Qgc2VyaWFsaXpl
IHBhcmFtZXRlciBmb3IgbGF0ZSBwcm9jZXNzaW5nIGRvY3VtZW50LgorICAgICAgICAgICAgU2Vy
aWFsaXplRG9tUGFyYW0gcGFyYW0oY3VycmVudEZyYW1lVVJMLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZW5jb2RpbmcubGVuZ3RoKCkgPyB0ZXh0RW5jb2RpbmcgOiBVVEY4
RW5jb2RpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRE
b2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWVVUkwg
PT0gbWFpblBhZ2VVUkwgPyBtX2xvY2FsRGlyZWN0b3J5TmFtZSA6ICIiKTsKKworICAgICAgICAg
ICAgLy8gUHJvY2VzcyBjdXJyZW50IGRvY3VtZW50LgorICAgICAgICAgICAgRWxlbWVudCogcm9v
dEVsZW1lbnQgPSBjdXJyZW50RG9jLT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlm
IChyb290RWxlbWVudCkKKyAgICAgICAgICAgICAgICBidWlsZENvbnRlbnRGb3JOb2RlKHJvb3RF
bGVtZW50LCAmcGFyYW0pOworCisgICAgICAgICAgICAvLyBTaW5rIHRoZSByZW1haW5kZXIgZGF0
YSBhbmQgZmluaXNoIHNlcmlhbGl6aW5nIGN1cnJlbnQgZnJhbWUuCisgICAgICAgICAgICBtX2Ns
aWVudC0+ZGlkU2VyaWFsaXplRGF0YUZvckZyYW1lKGN1cnJlbnRGcmFtZVVSTCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhQnVmZmVyLnRvU3Ry
aW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YlBhZ2VTZXJpYWxpemVyQ2xpZW50OjpDdXJyZW50RnJhbWVJc0ZpbmlzaGVkKTsKKyAgICAgICAg
ICAgIC8vIENsZWFyIHRoZSBidWZmZXIuCisgICAgICAgICAgICBtX2RhdGFCdWZmZXIuY2xlYXIo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFdlIGhhdmUgZG9uZSBjYWxsIGZyYW1lcywg
c28gd2Ugc2VuZCBtZXNzYWdlIHRvIGVtYmVkZGVyIHRvIHRlbGwgaXQgdGhhdAorICAgIC8vIGZy
YW1lcyBhcmUgZmluaXNoZWQgc2VyaWFsaXppbmcuCisgICAgQVNTRVJUKCFtX2RhdGFCdWZmZXIu
bGVuZ3RoKCkpOworICAgIG1fY2xpZW50LT5kaWRTZXJpYWxpemVEYXRhRm9yRnJhbWUoS1VSTCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhQnVmZmVyLnRv
U3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQYWdl
U2VyaWFsaXplckNsaWVudDo6QWxsRnJhbWVzQXJlRmluaXNoZWQpOworICAgIHJldHVybiBkaWRT
ZXJpYWxpemF0aW9uOworfQorCit9ICAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5oIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5jZmU3ZDMwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJQYWdlU2VyaWFsaXplckltcGwuaApAQCAtMCwwICsxLDE5MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViUGFn
ZVNlcmlhbGl6ZXJJbXBsX2gKKyNkZWZpbmUgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsX2gKKworI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU3RyaW5nQnVpbGRlci5oIgorI2lu
Y2x1ZGUgIlN0cmluZ0hhc2guaCIKKworI2luY2x1ZGUgIldlYkVudGl0aWVzLmgiCisjaW5jbHVk
ZSAiV2ViUGFnZVNlcmlhbGl6ZXIuaCIKKyNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplckNsaWVu
dC5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorI2luY2x1ZGUgIldlYlVSTC5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEVsZW1lbnQ7CitjbGFzcyBOb2RlOwor
Y2xhc3MgU3RyaW5nOworY2xhc3MgVGV4dEVuY29kaW5nOworfQorCituYW1lc3BhY2UgV2ViS2l0
IHsKK2NsYXNzIFdlYkZyYW1lSW1wbDsKKworLy8gR2V0IGh0bWwgZGF0YSBieSBzZXJpYWxpemlu
ZyBhbGwgZnJhbWVzIG9mIGN1cnJlbnQgcGFnZSB3aXRoIGxpc3RzCisvLyB3aGljaCBjb250YWlu
IGFsbCByZXNvdXJjZSBsaW5rcyB0aGF0IGhhdmUgbG9jYWwgY29weS4KKy8vIGNvbnRhaW4gYWxs
IHNhdmVkIGF1eGlsaWFyeSBmaWxlcyBpbmNsdWRlZCBhbGwgc3ViIGZyYW1lcyBhbmQgcmVzb3Vy
Y2VzLgorLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGZpbmQgb3V0IGFsbCBmcmFtZXMgYW5kIHNlcmlh
bGl6ZSB0aGVtIHRvIEhUTUwgZGF0YS4KKy8vIFdlIGhhdmUgYSBkYXRhIGJ1ZmZlciB0byB0ZW1w
b3Jhcnkgc2F2aW5nIGdlbmVyYXRlZCBodG1sIGRhdGEuIFdlIHdpbGwKKy8vIHNlcXVlbnRpYWxs
eSBjYWxsIFdlYlZpZXdEZWxlZ2F0ZTo6U2VuZFNlcmlhbGl6ZWRIdG1sRGF0YSBvbmNlIHRoZSBk
YXRhCisvLyBidWZmZXIgaXMgZnVsbC4gU2VlIGNvbW1lbnRzIG9mIFdlYlZpZXdEZWxlZ2F0ZTo6
U2VuZFNlcmlhbGl6ZWRIdG1sRGF0YQorLy8gZm9yIGdldHRpbmcgbW9yZSBpbmZvcm1hdGlvbi4K
K2NsYXNzIFdlYlBhZ2VTZXJpYWxpemVySW1wbCB7CitwdWJsaWM6CisgICAgLy8gRG8gc2VyaWFs
aXphdGlvbiBhY3Rpb24uIFJldHVybiBmYWxzZSBtZWFucyBubyBhdmFpbGFibGUgZnJhbWUgaGFz
IGJlZW4KKyAgICAvLyBzZXJpYWxpemVkLCBvdGhlcndpc2UgcmV0dXJuIHRydWUuCisgICAgYm9v
bCBzZXJpYWxpemUoKTsKKworICAgIC8vIFRoZSBwYXJhbWV0ZXIgc3BlY2lmaWVzIHdoaWNoIGZy
YW1lIG5lZWQgdG8gYmUgc2VyaWFsaXplZC4KKyAgICAvLyBUaGUgcGFyYW1ldGVyIHJlY3Vyc2l2
ZV9zZXJpYWxpemF0aW9uIHNwZWNpZmllcyB3aGV0aGVyIHdlIG5lZWQgdG8KKyAgICAvLyBzZXJp
YWxpemUgYWxsIHN1YiBmcmFtZXMgb2YgdGhlIHNwZWNpZmllZCBmcmFtZSBvciBub3QuCisgICAg
Ly8gVGhlIHBhcmFtZXRlciBkZWxlZ2F0ZSBzcGVjaWZpZXMgdGhlIHBvaW50ZXIgb2YgaW50ZXJm
YWNlCisgICAgLy8gRG9tU2VyaWFsaXplckRlbGVnYXRlIHByb3ZpZGUgc2luayBpbnRlcmZhY2Ug
d2hpY2ggY2FuIHJlY2VpdmUgdGhlCisgICAgLy8gaW5kaXZpZHVhbCBjaHVua3Mgb2YgZGF0YSB0
byBiZSBzYXZlZC4KKyAgICAvLyBUaGUgcGFyYW1ldGVyIGxpbmtzIGNvbnRhaW4gb3JpZ2luYWwg
VVJMcyBvZiBhbGwgc2F2ZWQgbGlua3MuCisgICAgLy8gVGhlIHBhcmFtZXRlciBsb2NhbF9wYXRo
cyBjb250YWluIGNvcnJlc3BvbmRpbmcgbG9jYWwgZmlsZSBwYXRocyBvZiBhbGwKKyAgICAvLyBz
YXZlZCBsaW5rcywgd2hpY2ggbWF0Y2hlZCB3aXRoIHZlY3RvcjpsaW5rcyBvbmUgYnkgb25lLgor
ICAgIC8vIFRoZSBwYXJhbWV0ZXIgbG9jYWxfZGlyZWN0b3J5X25hbWUgaXMgcmVsYXRpdmUgcGF0
aCBvZiBkaXJlY3Rvcnkgd2hpY2gKKyAgICAvLyBjb250YWluIGFsbCBzYXZlZCBhdXhpbGlhcnkg
ZmlsZXMgaW5jbHVkZWQgYWxsIHN1YiBmcmFtZXMgYW5kIHJlc291cmNlcy4KKyAgICBXZWJQYWdl
U2VyaWFsaXplckltcGwoV2ViRnJhbWUqIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIHJlY3Vyc2l2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlh
bGl6ZXJDbGllbnQqIGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2Vi
VmVjdG9yPFdlYlVSTD4mIGxpbmtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBX
ZWJWZWN0b3I8V2ViU3RyaW5nPiYgbG9jYWxQYXRocywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgV2ViU3RyaW5nJiBsb2NhbERpcmVjdG9yeU5hbWUpOworCitwcml2YXRlOgorICAg
IC8vIFNwZWNpZmllZCBmcmFtZSB3aGljaCBuZWVkIHRvIGJlIHNlcmlhbGl6ZWQ7CisgICAgV2Vi
RnJhbWVJbXBsKiBtX3NwZWNpZmllZFdlYkZyYW1lSW1wbDsKKyAgICAvLyBQb2ludGVyIG9mIFdl
YlBhZ2VTZXJpYWxpemVyQ2xpZW50CisgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqIG1fY2xp
ZW50OworICAgIC8vIFRoaXMgaGFzaCBtYXAgaXMgdXNlZCB0byBtYXAgcmVzb3VyY2UgVVJMIG9m
IG9yaWdpbmFsIGxpbmsgdG8gaXRzIGxvY2FsCisgICAgLy8gZmlsZSBwYXRoLgorICAgIHR5cGVk
ZWYgSGFzaE1hcDxXZWJDb3JlOjpTdHJpbmcsIFdlYkNvcmU6OlN0cmluZz4gTGlua0xvY2FsUGF0
aE1hcDsKKyAgICAvLyBsb2NhbF9saW5rc18gaW5jbHVkZSBhbGwgcGFpciBvZiBsb2NhbCByZXNv
dXJjZSBwYXRoIGFuZCBjb3JyZXNwb25kaW5nCisgICAgLy8gb3JpZ2luYWwgbGluay4KKyAgICBM
aW5rTG9jYWxQYXRoTWFwIG1fbG9jYWxMaW5rczsKKyAgICAvLyBEYXRhIGJ1ZmZlciBmb3Igc2F2
aW5nIHJlc3VsdCBvZiBzZXJpYWxpemVkIERPTSBkYXRhLgorICAgIFdlYkNvcmU6OlN0cmluZ0J1
aWxkZXIgbV9kYXRhQnVmZmVyOworICAgIC8vIFBhc3NpbmcgdHJ1ZSB0byByZWN1cnNpdmVfc2Vy
aWFsaXphdGlvbl8gaW5kaWNhdGVzIHdlIHdpbGwgc2VyaWFsaXplIG5vdAorICAgIC8vIG9ubHkg
dGhlIHNwZWNpZmllZCBmcmFtZSBidXQgYWxzbyBhbGwgc3ViLWZyYW1lcyBpbiB0aGUgc3BlY2lm
aWMgZnJhbWUuCisgICAgLy8gT3RoZXJ3aXNlIHdlIG9ubHkgc2VyaWFsaXplIHRoZSBzcGVjaWZp
ZWQgZnJhbWUgZXhjbHVkZWQgYWxsIHN1Yi1mcmFtZXMuCisgICAgYm9vbCBtX3JlY3Vyc2l2ZVNl
cmlhbGl6YXRpb247CisgICAgLy8gRmxhZyBpbmRpY2F0ZXMgd2hldGhlciB3ZSBoYXZlIGNvbGxl
Y3RlZCBhbGwgZnJhbWVzIHdoaWNoIG5lZWQgdG8gYmUKKyAgICAvLyBzZXJpYWxpemVkIG9yIG5v
dDsKKyAgICBib29sIG1fZnJhbWVzQ29sbGVjdGVkOworICAgIC8vIExvY2FsIGRpcmVjdG9yeSBu
YW1lIG9mIGFsbCBsb2NhbCByZXNvdXJjZSBmaWxlcy4KKyAgICBjb25zdCBXZWJDb3JlOjpTdHJp
bmcmIG1fbG9jYWxEaXJlY3RvcnlOYW1lOworICAgIC8vIFZlY3RvciBmb3Igc2F2aW5nIGFsbCBm
cmFtZXMgd2hpY2ggbmVlZCB0byBiZSBzZXJpYWxpemVkLgorICAgIFZlY3RvcjxXZWJGcmFtZUlt
cGwqPiBtX2ZyYW1lczsKKworICAgIC8vIFdlYiBlbnRpdGllcyBjb252ZXJzaW9uIG1hcHMuCisg
ICAgV2ViRW50aXRpZXMgbV9odG1sRW50aXRpZXM7CisgICAgV2ViRW50aXRpZXMgbV94bWxFbnRp
dGllczsKKworICAgIHN0cnVjdCBTZXJpYWxpemVEb21QYXJhbSB7CisgICAgICAgIC8vIEZyYW1l
IFVSTCBvZiBjdXJyZW50IHByb2Nlc3NpbmcgZG9jdW1lbnQgcHJlc2VudGVkIGJ5IEdVUkwKKyAg
ICAgICAgY29uc3QgV2ViQ29yZTo6S1VSTCYgY3VycmVudEZyYW1lVVJMOworICAgICAgICAvLyBD
dXJyZW50IHVzaW5nIHRleHQgZW5jb2Rpbmcgb2JqZWN0LgorICAgICAgICBjb25zdCBXZWJDb3Jl
OjpUZXh0RW5jb2RpbmcmIHRleHRFbmNvZGluZzsKKworICAgICAgICAvLyBEb2N1bWVudCBvYmpl
Y3Qgb2YgY3VycmVudCBmcmFtZS4KKyAgICAgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGRvYzsKKyAg
ICAgICAgLy8gTG9jYWwgZGlyZWN0b3J5IG5hbWUgb2YgYWxsIGxvY2FsIHJlc291cmNlIGZpbGVz
LgorICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGRpcmVjdG9yeU5hbWU7CisKKyAgICAg
ICAgLy8gRmxhZyBpbmRpY2F0ZXMgY3VycmVudCBkb2MgaXMgaHRtbCBkb2N1bWVudCBvciBub3Qu
IEl0J3MgYSBjYWNoZSB2YWx1ZQorICAgICAgICAvLyBvZiBEb2N1bWVudC5pc0hUTUxEb2N1bWVu
dCgpLgorICAgICAgICBib29sIGlzSFRNTERvY3VtZW50OworICAgICAgICAvLyBGbGFnIHdoaWNo
IGluZGljYXRlIHdoZXRoZXIgd2UgaGF2ZSBtZXQgZG9jdW1lbnQgdHlwZSBkZWNsYXJhdGlvbi4K
KyAgICAgICAgYm9vbCBoYXNEb2N0eXBlOworICAgICAgICAvLyBGbGFnIHdoaWNoIGluZGljYXRl
IHdoZXRoZXIgd2lsbCBwcm9jZXNzIG1ldGEgaXNzdWUuCisgICAgICAgIGJvb2wgaGFzQ2hlY2tl
ZE1ldGE7CisgICAgICAgIC8vIFRoaXMgbWV0YSBlbGVtZW50IG5lZWQgdG8gYmUgc2tpcHBlZCB3
aGVuIHNlcmlhbGl6aW5nIERPTS4KKyAgICAgICAgY29uc3QgV2ViQ29yZTo6RWxlbWVudCogc2tp
cE1ldGFFbGVtZW50OworICAgICAgICAvLyBGbGFnIGluZGljYXRlcyB3ZSBhcmUgaW4gc2NyaXB0
IG9yIHN0eWxlIHRhZy4KKyAgICAgICAgYm9vbCBpc0luU2NyaXB0T3JTdHlsZVRhZzsKKyAgICAg
ICAgLy8gRmxhZyBpbmRpY2F0ZXMgd2hldGhlciB3ZSBoYXZlIHdyaXR0ZW4geG1sIGRvY3VtZW50
IGRlY2xhcmF0aW9uLgorICAgICAgICAvLyBJdCBpcyBvbmx5IHVzZWQgaW4geG1sIGRvY3VtZW50
CisgICAgICAgIGJvb2wgaGFzRG9jRGVjbGFyYXRpb247CisgICAgICAgIC8vIEZsYWcgaW5kaWNh
dGVzIHdoZXRoZXIgd2UgaGF2ZSBhZGRlZCBhZGRpdGlvbmFsIGNvbnRlbnRzIGJlZm9yZSBlbmQg
dGFnLgorICAgICAgICAvLyBUaGlzIGZsYWcgd2lsbCBiZSByZS1hc3NpZ25lZCBpbiBlYWNoIGNh
bGwgb2YgZnVuY3Rpb24KKyAgICAgICAgLy8gUG9zdEFjdGlvbkFmdGVyU2VyaWFsaXplT3BlblRh
ZyBhbmQgaXQgY291bGQgYmUgY2hhbmdlZCBpbiBmdW5jdGlvbgorICAgICAgICAvLyBQcmVBY3Rp
b25CZWZvcmVTZXJpYWxpemVFbmRUYWcgaWYgdGhlIGZ1bmN0aW9uIGFkZHMgbmV3IGNvbnRlbnRz
IGludG8KKyAgICAgICAgLy8gc2VyaWFsaXphdGlvbiBzdHJlYW0uCisgICAgICAgIGJvb2wgaGFz
QWRkZWRDb250ZW50c0JlZm9yZUVuZDsKKworICAgICAgICAvLyBDb25zdHJ1Y3Rvci4KKyAgICAg
ICAgU2VyaWFsaXplRG9tUGFyYW0oY29uc3QgV2ViQ29yZTo6S1VSTCYgY3VycmVudEZyYW1lVVJM
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpUZXh0RW5jb2Rpbmcm
IHRleHRFbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6RG9jdW1l
bnQqIGRvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5n
JiBkaXJlY3RvcnlOYW1lKTsKKyAgICB9OworCisgICAgLy8gQ29sbGVjdCBhbGwgdGFyZ2V0IGZy
YW1lcyB3aGljaCBuZWVkIHRvIGJlIHNlcmlhbGl6ZWQuCisgICAgdm9pZCBjb2xsZWN0VGFyZ2V0
RnJhbWVzKCk7CisgICAgLy8gQmVmb3JlIHdlIGJlZ2luIHNlcmlhbGl6aW5nIG9wZW4gdGFnIG9m
IGEgZWxlbWVudCwgd2UgZ2l2ZSB0aGUgdGFyZ2V0CisgICAgLy8gZWxlbWVudCBhIGNoYW5jZSB0
byBkbyBzb21lIHdvcmsgcHJpb3IgdG8gYWRkIHNvbWUgYWRkaXRpb25hbCBkYXRhLgorICAgIFdl
YkNvcmU6OlN0cmluZyBwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVPcGVuVGFnKGNvbnN0IFdlYkNv
cmU6OkVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIG5lZWRTa2lwKTsK
KyAgICAvLyBBZnRlciB3ZSBmaW5pc2ggc2VyaWFsaXppbmcgb3BlbiB0YWcgb2YgYSBlbGVtZW50
LCB3ZSBnaXZlIHRoZSB0YXJnZXQKKyAgICAvLyBlbGVtZW50IGEgY2hhbmNlIHRvIGRvIHNvbWUg
cG9zdCB3b3JrIHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgZGF0YS4KKyAgICBXZWJDb3JlOjpTdHJp
bmcgcG9zdEFjdGlvbkFmdGVyU2VyaWFsaXplT3BlblRhZyhjb25zdCBXZWJDb3JlOjpFbGVtZW50
KiBlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSk7CisgICAgLy8gQmVmb3JlIHdlIGJlZ2lu
IHNlcmlhbGl6aW5nIGVuZCB0YWcgb2YgYSBlbGVtZW50LCB3ZSBnaXZlIHRoZSB0YXJnZXQKKyAg
ICAvLyBlbGVtZW50IGEgY2hhbmNlIHRvIGRvIHNvbWUgd29yayBwcmlvciB0byBhZGQgc29tZSBh
ZGRpdGlvbmFsIGRhdGEuCisgICAgV2ViQ29yZTo6U3RyaW5nIHByZUFjdGlvbkJlZm9yZVNlcmlh
bGl6ZUVuZFRhZyhjb25zdCBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0q
IHBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCogbmVlZFNraXApOworICAgIC8vIEFmdGVyIHdlIGZpbmlzaCBzZXJpYWxpemluZyBl
bmQgdGFnIG9mIGEgZWxlbWVudCwgd2UgZ2l2ZSB0aGUgdGFyZ2V0CisgICAgLy8gZWxlbWVudCBh
IGNoYW5jZSB0byBkbyBzb21lIHBvc3Qgd29yayB0byBhZGQgc29tZSBhZGRpdGlvbmFsIGRhdGEu
CisgICAgV2ViQ29yZTo6U3RyaW5nIHBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZUVuZFRhZyhjb25z
dCBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKTsKKyAgICAv
LyBTYXZlIGdlbmVyYXRlZCBodG1sIGNvbnRlbnQgdG8gZGF0YSBidWZmZXIuCisgICAgdm9pZCBz
YXZlSFRNTENvbnRlbnRUb0J1ZmZlcihjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHJlc3VsdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSk7
CisgICAgLy8gU2VyaWFsaXplIG9wZW4gdGFnIG9mIGFuIHNwZWNpZmllZCBlbGVtZW50LgorICAg
IHZvaWQgb3BlblRhZ1RvU3RyaW5nKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKTsKKyAgICAv
LyBTZXJpYWxpemUgZW5kIHRhZyBvZiBhbiBzcGVjaWZpZWQgZWxlbWVudC4KKyAgICB2b2lkIGVu
ZFRhZ1RvU3RyaW5nKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pOworICAgIC8vIEJ1aWxkIGNv
bnRlbnQgZm9yIGEgc3BlY2lmaWVkIG5vZGUKKyAgICB2b2lkIGJ1aWxkQ29udGVudEZvck5vZGUo
Y29uc3QgV2ViQ29yZTo6Tm9kZSogbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3RyaW5nLmNwcCBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3RyaW5nLmNwcAppbmRleCBmNDVlMDVmLi44NzIxZGI5
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlN0cmluZy5jcHAKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTdHJpbmcuY3BwCkBAIC0xMjEsNiArMTIxLDE4IEBAIFdlYlN0
cmluZzo6b3BlcmF0b3IgV2ViQ29yZTo6QXRvbWljU3RyaW5nKCkgY29uc3QKICAgICByZXR1cm4g
V2ViQ29yZTo6QXRvbWljU3RyaW5nKHN0YXRpY19jYXN0PFdlYkNvcmU6OlN0cmluZ0ltcGwgKj4o
bV9wcml2YXRlKSk7CiB9CiAKK1dlYlN0cmluZzo6V2ViU3RyaW5nKGNvbnN0IGNoYXIqIGRhdGEp
CisgICAgOiBtX3ByaXZhdGUoMCkKK3sKKyAgICBhc3NpZ24oV2ViQ29yZTo6U3RyaW5nOjpmcm9t
VVRGOChkYXRhKSk7Cit9CisKK1dlYlN0cmluZyYgV2ViU3RyaW5nOjpvcGVyYXRvcj0oY29uc3Qg
Y2hhciogZGF0YSkKK3sKKyAgICBhc3NpZ24oV2ViQ29yZTo6U3RyaW5nOjpmcm9tVVRGOChkYXRh
KSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCiB2b2lkIFdlYlN0cmluZzo6YXNzaWduKFdlYlN0
cmluZ1ByaXZhdGUqIHApCiB7CiAgICAgLy8gVGFrZSBjYXJlIHRvIGhhbmRsZSB0aGUgY2FzZSB3
aGVyZSBtX3ByaXZhdGUgPT0gcApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCBh
YWY3MTc0Li41ZTE2YWUwIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtNTAs
NiArNTAsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJIVE1MQWxsQ29s
bGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
TWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44029</attachid>
            <date>2009-11-30 10:24:08 -0800</date>
            <delta_ts>2009-11-30 17:57:19 -0800</delta_ts>
            <desc>Added WebPageSerializer to WebKit API.</desc>
            <filename>bug-31737-20091130102407.patch</filename>
            <type>text/plain</type>
            <size>99530</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzdhZmRlMi4uMjliODgxNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAwOS0xMS0zMCAgWWFhciBTY2huaXRt
YW4gIDx5YWFyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBXZWJQYWdlU2VyaWFsaXplciB0byBXZWJLaXQgQVBJLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTczNwor
CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmNwcDogQWRkZWQgbWV0aG9k
cyB0byBtYWtlIFN0cmluZ0J1aWxkZXIgZXZlbiBtb3JlIHVzZWZ1bCBmb3IgbGFyZ2Ugc2NhbGUg
c3RyaW5nIGNvbmNhdGVuYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdCdWlsZGVyOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdCdWlsZGVyOjpsZW5ndGgpOgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5oOgorCiAyMDA5LTExLTIzICBEaXJrIFNj
aHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTmlrb2xhcyBa
aW1tZXJtYW5uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxk
ZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCmluZGV4IGMy
MWUzNjYuLjNlMzQ5ODEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdC
dWlsZGVyLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5jcHAK
QEAgLTk1LDQgKzk1LDE3IEBAIFN0cmluZyBTdHJpbmdCdWlsZGVyOjp0b1N0cmluZygpIGNvbnN0
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBTdHJpbmdCdWlsZGVyOjpjbGVhcigpCit7
CisgICAgbV90b3RhbExlbmd0aCA9IFVJTlRfTUFYOworICAgIG1fc3RyaW5ncy5jbGVhcigpOwor
fQorCit1bnNpZ25lZCBTdHJpbmdCdWlsZGVyOjpsZW5ndGgoKSBjb25zdAoreworICAgIGlmICht
X3RvdGFsTGVuZ3RoID09IFVJTlRfTUFYKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
bV90b3RhbExlbmd0aDsKK30KKwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1N0cmluZ0J1aWxkZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmgK
aW5kZXggOGQ3NmI5Yy4uN2Y3MmZiZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1N0cmluZ0J1aWxkZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRl
ci5oCkBAIC00Miw2ICs0Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBh
cHBlbmQoY29uc3QgU3RyaW5nJik7CiAgICAgICAgIHZvaWQgYXBwZW5kKFVDaGFyKTsKICAgICAg
ICAgdm9pZCBhcHBlbmQoY2hhcik7CisgICAgICAgIAorICAgICAgICB2b2lkIGNsZWFyKCk7Cisg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogCiAgICAgICAgIFN0cmluZyB0b1N0cmlu
ZygpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBiZGE3ZTdjLi5lMDc0MDc1IDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMjEgQEAKKzIwMDktMTEtMzAgIFlhYXIgU2Nobml0bWFuICA8eWFhckBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkZWQgV2ViUGFnZVNlcmlhbGl6ZXIgdG8gV2ViS2l0IEFQSSBhbmQgZW5yaWNoZWQg
dGhlIFdlYk5vZGUgaGllcmFyY2h5IHRvIHN1cHBvcnQKKyAgICAgICAgZG93bnN0cmVhbSB1bml0
LXRlc3Rpbmcgb2Ygc2VyaWFsaXphdGlvbi4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE3MzcKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAg
ICAgICogcHVibGljL1dlYkRvY3VtZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJE
b2N1bWVudDo6V2ViRG9jdW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6b3Bl
cmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViRG9jdW1lbnQ6OmFzc2lnbik6CisgICAgICAg
ICogcHVibGljL1dlYkVsZW1lbnQuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViRm9ybUVsZW1lbnQu
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViRm9ybUVsZW1lbnQ6Om9wZXJhdG9yPSk6CisgICAgICAg
ICogcHVibGljL1dlYkZyYW1lLmg6CisgICAgICAgICogcHVibGljL1dlYk5vZGUuaDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViTm9kZTo6KToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6dG9Db25z
dEVsZW1lbnQpOgorICAgICAgICAqIHB1YmxpYy9XZWJOb2RlQ29sbGVjdGlvbi5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViTm9kZUNvbGxlY3Rpb246On5XZWJOb2RlQ29sbGVjdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVDb2xsZWN0aW9uOjpXZWJOb2RlQ29sbGVjdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVDb2xsZWN0aW9uOjpvcGVyYXRvcj0pOgorICAgICAg
ICAqIHB1YmxpYy9XZWJOb2RlTGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTm9k
ZUxpc3Q6On5XZWJOb2RlTGlzdCk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVMaXN0OjpXZWJO
b2RlTGlzdCk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVMaXN0OjpvcGVyYXRvcj0pOgorICAg
ICAgICAqIHB1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oOiBBZGRlZC4KKyAgICAgICAgKiBwdWJs
aWMvV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VTZXJpYWxpemVyQ2xpZW50OjopOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFs
aXplckNsaWVudDo6V2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlU2VyaWFsaXplckNsaWVudDo6fldlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KToKKyAgICAg
ICAgKiBwdWJsaWMvV2ViU3RyaW5nLmg6CisgICAgICAgICogcHVibGljL1dlYlZpZXcuaDoKKyAg
ICAgICAgKiBzcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHA6CisgICAgICAgICogc3JjL0RPTVV0
aWxpdGllc1ByaXZhdGUuY3BwOgorICAgICAgICAoV2ViS2l0OjplbGVtZW50SGFzTGVnYWxMaW5r
QXR0cmlidXRlKToKKyAgICAgICAgKiBzcmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5oOgorICAgICAg
ICAqIHNyYy9XZWJEb2N1bWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1
bWVudDo6V2ViRG9jdW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6b3BlcmF0
b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViRG9jdW1lbnQ6Om9wZXJhdG9yIFdURjo6UGFzc1Jl
ZlB0cjxEb2N1bWVudD4pOgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6ZnJhbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6aXNIVE1MRG9jdW1lbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJEb2N1bWVudDo6YmFzZVVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRvY3Vt
ZW50Ojpib2R5KToKKyAgICAgICAgKFdlYktpdDo6V2ViRG9jdW1lbnQ6OmhlYWQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6YWxsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRG9jdW1l
bnQ6OmNvbXBsZXRlVVJMKToKKyAgICAgICAgKiBzcmMvV2ViRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkVsZW1lbnQ6Omhhc1RhZ05hbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJF
bGVtZW50OjpoYXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJFbGVtZW50OjpnZXRB
dHRyaWJ1dGUpOgorICAgICAgICAqIHNyYy9XZWJFbnRpdGllcy5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0Ojpwb3B1bGF0ZU1hcCk6CisgICAgICAgIChXZWJLaXQ6Oik6CisgICAgICAgIChX
ZWJLaXQ6OldlYkVudGl0aWVzOjpXZWJFbnRpdGllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkVu
dGl0aWVzOjplbnRpdHlOYW1lQnlDb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRW50aXRpZXM6
OmNvbnZlcnRFbnRpdGllc0luU3RyaW5nKToKKyAgICAgICAgKiBzcmMvV2ViRW50aXRpZXMuaDog
QWRkZWQuCisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lOjpmcm9tRnJhbWVPd25lckVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJG
cmFtZUltcGw6OmVuY29kaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpkb2N1
bWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lT3duZXJFbGVt
ZW50KToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmg6CisgICAgICAgICogc3JjL1dlYk5v
ZGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjpub2RlVHlwZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYk5vZGU6Om5vZGVWYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6OmRv
Y3VtZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6Zmlyc3RDaGlsZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYk5vZGU6Omxhc3RDaGlsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6
OnByZXZpb3VzU2libGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6Om5leHRTaWJsaW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6aGFzQ2hpbGROb2Rlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYk5vZGU6OmNoaWxkTm9kZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjpj
cmVhdGVNYXJrdXApOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjppc1RleHROb2RlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTm9kZTo6aXNFbGVtZW50Tm9kZSk6CisgICAgICAgICogc3JjL1dl
Yk5vZGVDb2xsZWN0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVDb2xs
ZWN0aW9uOjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVDb2xsZWN0aW9uOjphc3Np
Z24pOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlQ29sbGVjdGlvbjo6V2ViTm9kZUNvbGxlY3Rp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlQ29sbGVjdGlvbjo6bGVuZ3RoKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTm9kZUNvbGxlY3Rpb246Om5leHRJdGVtKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTm9kZUNvbGxlY3Rpb246OmZpcnN0SXRlbSk6CisgICAgICAgICogc3JjL1dlYk5vZGVM
aXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVMaXN0OjpyZXNldCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYk5vZGVMaXN0Ojphc3NpZ24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJOb2RlTGlzdDo6V2ViTm9kZUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlTGlzdDo6
bGVuZ3RoKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZUxpc3Q6Oml0ZW0pOgorICAgICAgICAq
IHNyYy9XZWJQYWdlU2VyaWFsaXplci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlh
bGl6ZXI6OmdlbmVyYXRlTWV0YUNoYXJzZXREZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZU1hcmtPZlRoZVdlYkRlY2xhcmF0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlQmFzZVRhZ0RlY2xhcmF0
aW9uKToKKyAgICAgICAgKiBzcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6U2VyaWFsaXplRG9tUGFyYW06
OlNlcmlhbGl6ZURvbVBhcmFtKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJ
bXBsOjpwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVPcGVuVGFnKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpwb3N0QWN0aW9uQWZ0ZXJTZXJpYWxpemVPcGVuVGFnKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpwcmVBY3Rpb25CZWZvcmVT
ZXJpYWxpemVFbmRUYWcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6
OnBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZUVuZFRhZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VTZXJpYWxpemVySW1wbDo6c2F2ZUhUTUxDb250ZW50VG9CdWZmZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6Om9wZW5UYWdUb1N0cmluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6ZW5kVGFnVG9TdHJpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6OmJ1aWxkQ29udGVudEZvck5vZGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6OldlYlBhZ2VTZXJpYWxpemVySW1w
bCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6Y29sbGVjdFRhcmdl
dEZyYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6c2VyaWFs
aXplKToKKyAgICAgICAgKiBzcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmg6IEFkZGVkLgorICAg
ICAgICAqIHNyYy9XZWJTdHJpbmcuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6Oldl
YlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorCiAyMDA5LTExLTIwICBKaWFuIExpICA8amlhbmxp
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQuIEZpeCBjaHJvbWl1bSBidWls
ZC4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAKaW5kZXggYWIwOGRjOS4uZDM3OWM1MiAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAg
LTEwMiw2ICsxMDIsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRGV2VG9vbHNBZ2Vu
dENsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkRldlRvb2xzRnJvbnRlbmQu
aCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJEZXZUb29sc0Zyb250ZW5kQ2xpZW50Lmgn
LAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRG9jdW1lbnQuaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJEcmFnRGF0YS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkVk
aXRpbmdBY3Rpb24uaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJFbGVtZW50LmgnLApA
QCAtMTI3LDEwICsxMjgsMTQgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1pbWVSZWdp
c3RyeS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk5hdmlnYXRpb25UeXBlLmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTm9kZS5oJywKKyAgICAgICAgICAgICAgICAncHVi
bGljL1dlYk5vZGVDb2xsZWN0aW9uLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTm9k
ZUxpc3QuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJOb25Db3B5YWJsZS5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYk5vdGlmaWNhdGlvbi5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYk5vdGlmaWNhdGlvblByZXNlbnRlci5oJywKICAgICAgICAgICAgICAgICAn
cHVibGljL1dlYk5vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFjay5oJywKKyAgICAgICAgICAg
ICAgICAncHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgnLAorICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9X
ZWJQYXNzd29yZEF1dG9jb21wbGV0ZUxpc3RlbmVyLmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViUGFzc3dvcmRGb3JtRGF0YS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlBs
dWdpbi5oJywKQEAgLTI0MCw4ICsyNDUsMTEgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYkRh
dGFiYXNlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJEYXRhU291cmNlSW1wbC5jcHAn
LAogICAgICAgICAgICAgICAgICdzcmMvV2ViRGF0YVNvdXJjZUltcGwuaCcsCisgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJEb2N1bWVudC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRHJh
Z0RhdGEuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkVsZW1lbnQuY3BwJywKKyAgICAg
ICAgICAgICAgICAnc3JjL1dlYkVudGl0aWVzLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJFbnRpdGllcy5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZpbGVDaG9vc2VyQ29tcGxl
dGlvbkltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZpbGVDaG9vc2VyQ29tcGxl
dGlvbkltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGb250Q2FjaGUuY3BwJywKQEAg
LTI2MCw3ICsyNjgsMTIgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhUGxheWVyQ2xp
ZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJ
bXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTm9kZS5jcHAnLAorICAgICAgICAgICAg
ICAgICdzcmMvV2ViTm9kZUNvbGxlY3Rpb24uY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dl
Yk5vZGVMaXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJOb3RpZmljYXRpb24uY3Bw
JywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcCcsCisgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuY3BwJywKKyAgICAgICAgICAgICAg
ICAnc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YlBhc3N3b3JkRm9ybURhdGEuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlBhc3N3b3Jk
Rm9ybVV0aWxzLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJQYXNzd29yZEZvcm1VdGls
cy5oJywKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRG9jdW1lbnQuaCBi
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRG9jdW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5kMDc0YWI2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJEb2N1bWVudC5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkRvY3Vt
ZW50X2gKKyNkZWZpbmUgV2ViRG9jdW1lbnRfaAorCisjaW5jbHVkZSAiV2ViTm9kZS5oIgorCisj
aWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIERvY3Vt
ZW50OyB9CituYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NS
ZWZQdHI7IH0KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkVsZW1lbnQ7
CitjbGFzcyBXZWJGcmFtZTsKK2NsYXNzIFdlYk5vZGVDb2xsZWN0aW9uOworY2xhc3MgV2ViU3Ry
aW5nOworY2xhc3MgV2ViVVJMOworCisvLyBQcm92aWRlcyByZWFkb25seSBhY2Nlc3MgdG8gc29t
ZSBwcm9wZXJ0aWVzIG9mIGEgRE9NIGRvY3VtZW50LgorY2xhc3MgV2ViRG9jdW1lbnQgOiBwdWJs
aWMgV2ViTm9kZSB7CitwdWJsaWM6CisgICAgV2ViRG9jdW1lbnQoKSB7IH0KKyAgICBXZWJEb2N1
bWVudChjb25zdCBXZWJEb2N1bWVudCYgZSkgOiBXZWJOb2RlKGUpIHsgfQorCisgICAgV2ViRG9j
dW1lbnQmIG9wZXJhdG9yPShjb25zdCBXZWJEb2N1bWVudCYgZSkgeyBXZWJOb2RlOjphc3NpZ24o
ZSk7IHJldHVybiAqdGhpczsgfQorICAgIHZvaWQgYXNzaWduKGNvbnN0IFdlYkRvY3VtZW50JiBl
KSB7IFdlYk5vZGU6OmFzc2lnbihlKTsgfQorCisgICAgLy8gUmV0dXJucyB0aGUgZnJhbWUgdGhl
IGRvY3VtZW50IGJlbG9uZ3MgdG8gb3IgMCBpZiB0aGUgZG9jdW1lbnQgaXMgZnJhbWVsZXNzLgor
ICAgIFdFQktJVF9BUEkgV2ViRnJhbWUqIGZyYW1lKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBi
b29sIGlzSFRNTERvY3VtZW50KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJVUkwgYmFzZVVS
TCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViRWxlbWVudCBib2R5KCkgY29uc3Q7CisgICAg
V0VCS0lUX0FQSSBXZWJFbGVtZW50IGhlYWQoKTsKKyAgICBXRUJLSVRfQVBJIFdlYk5vZGVDb2xs
ZWN0aW9uIGFsbCgpOworICAgIFdFQktJVF9BUEkgV2ViVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFdl
YlN0cmluZyYpIGNvbnN0OworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViRG9j
dW1lbnQoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50PiYpOworICAgIFdl
YkRvY3VtZW50JiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkRvY3Vt
ZW50PiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4o
KSBjb25zdDsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJFbGVtZW50LmggYi9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkVsZW1lbnQuaAppbmRleCBkN2EyY2JmLi5hYzU1NTkzIDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkVsZW1lbnQuaAorKysgYi9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkVsZW1lbnQuaApAQCAtMzksNyArMzksNiBAQCBuYW1lc3BhY2Ug
V1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NSZWZQdHI7IH0KICNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKLQogICAgIC8vIFByb3ZpZGVzIHJlYWRvbmx5IGFjY2VzcyB0
byBzb21lIHByb3BlcnRpZXMgb2YgYSBET00gZWxlbWVudCBub2RlLgogICAgIGNsYXNzIFdlYkVs
ZW1lbnQgOiBwdWJsaWMgV2ViTm9kZSB7CiAgICAgcHVibGljOgpAQCAtNDcsNyArNDYsMTEgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAgICAgICAgIFdlYkVsZW1lbnQoY29uc3QgV2ViRWxlbWVudCYg
ZSkgOiBXZWJOb2RlKGUpIHsgfQogCiAgICAgICAgIFdlYkVsZW1lbnQmIG9wZXJhdG9yPShjb25z
dCBXZWJFbGVtZW50JiBlKSB7IFdlYk5vZGU6OmFzc2lnbihlKTsgcmV0dXJuICp0aGlzOyB9Ci0g
ICAgICAgIFdFQktJVF9BUEkgdm9pZCBhc3NpZ24oY29uc3QgV2ViRWxlbWVudCYgZSkgeyBXZWJO
b2RlOjphc3NpZ24oZSk7IH0KKyAgICAgICAgdm9pZCBhc3NpZ24oY29uc3QgV2ViRWxlbWVudCYg
ZSkgeyBXZWJOb2RlOjphc3NpZ24oZSk7IH0KKworICAgICAgICBXRUJLSVRfQVBJIGJvb2wgaGFz
VGFnTmFtZShjb25zdCBXZWJTdHJpbmcmKSBjb25zdDsKKyAgICAgICAgV0VCS0lUX0FQSSBib29s
IGhhc0F0dHJpYnV0ZShjb25zdCBXZWJTdHJpbmcmKSBjb25zdDsKKyAgICAgICAgV0VCS0lUX0FQ
SSBXZWJTdHJpbmcgZ2V0QXR0cmlidXRlKGNvbnN0IFdlYlN0cmluZyYpIGNvbnN0OwogCiAjaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OCiAgICAgICAgIFdlYkVsZW1lbnQoY29uc3QgV1RGOjpQYXNz
UmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+Jik7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkZvcm1FbGVtZW50LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZvcm1F
bGVtZW50LmgKaW5kZXggMjdhMWVkYi4uZDk4MDFlMSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJGb3JtRWxlbWVudC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViRm9ybUVsZW1lbnQuaApAQCAtNTAsNyArNTAsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAg
ICAgICAgV2ViRm9ybUVsZW1lbnQoKSA6IFdlYkVsZW1lbnQoKSB7IH0KICAgICAgICAgV2ViRm9y
bUVsZW1lbnQoY29uc3QgV2ViRm9ybUVsZW1lbnQmIGUpIDogV2ViRWxlbWVudChlKSB7IH0KIAot
ICAgICAgICBXZWJFbGVtZW50JiBvcGVyYXRvcj0oY29uc3QgV2ViRm9ybUVsZW1lbnQmIGUpIHsg
V2ViRWxlbWVudDo6YXNzaWduKGUpOyByZXR1cm4gKnRoaXM7IH0KKyAgICAgICAgV2ViRm9ybUVs
ZW1lbnQmIG9wZXJhdG9yPShjb25zdCBXZWJGb3JtRWxlbWVudCYgZSkgeyBXZWJFbGVtZW50Ojph
c3NpZ24oZSk7IHJldHVybiAqdGhpczsgfQogICAgICAgICBXRUJLSVRfQVBJIHZvaWQgYXNzaWdu
KGNvbnN0IFdlYkZvcm1FbGVtZW50JiBlKSB7IFdlYkVsZW1lbnQ6OmFzc2lnbihlKTsgfQogCiAj
aWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkZyYW1lLmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgKaW5kZXgg
NDRiNTdhYS4uZGI2Y2ZhZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJG
cmFtZS5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaApAQCAtNDcsNiAr
NDcsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViRGF0YTsKIGNsYXNzIFdlYkRh
dGFTb3VyY2U7CitjbGFzcyBXZWJEb2N1bWVudDsKK2NsYXNzIFdlYkVsZW1lbnQ7CiBjbGFzcyBX
ZWJGb3JtRWxlbWVudDsKIGNsYXNzIFdlYkhpc3RvcnlJdGVtOwogY2xhc3MgV2ViSW5wdXRFbGVt
ZW50OwpAQCAtODUsNiArODcsMTAgQEAgcHVibGljOgogICAgIFdFQktJVF9BUEkgc3RhdGljIFdl
YkZyYW1lKiBmcmFtZUZvckVudGVyZWRDb250ZXh0KCk7CiAgICAgV0VCS0lUX0FQSSBzdGF0aWMg
V2ViRnJhbWUqIGZyYW1lRm9yQ3VycmVudENvbnRleHQoKTsKIAorICAgIC8vIFJldHVybnMgdGhl
IGZyYW1lIGluc2lkZSBhIGdpdmVuIGZyYW1lIG9yIGlmcmFtZSBlbGVtZW50LiBSZXR1cm5zIDAg
aWYKKyAgICAvLyB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBub3QgYSBmcmFtZSwgaWZyYW1lIG9yIGlm
IHRoZSBmcmFtZSBpcyBlbXB0eS4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJGcmFtZSogZnJv
bUZyYW1lT3duZXJFbGVtZW50KGNvbnN0IFdlYkVsZW1lbnQmKTsKKwogCiAgICAgLy8gQmFzaWMg
cHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIApAQCAtMTAzLDYgKzEwOSw4IEBAIHB1YmxpYzoKICAgICAvLyB0aGUgZG9jdW1lbnQg
bG9hZGVkIGluIHRoaXMgZnJhbWUuCiAgICAgdmlydHVhbCBXZWJVUkwgb3BlblNlYXJjaERlc2Ny
aXB0aW9uVVJMKCkgY29uc3QgPSAwOwogCisgICAgLy8gUmV0dXJuIHRoZSBmcmFtZSdzIGVuY29k
aW5nLgorICAgIHZpcnR1YWwgV2ViU3RyaW5nIGVuY29kaW5nKCkgY29uc3QgPSAwOwogCiAgICAg
Ly8gR2VvbWV0cnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIApAQCAtMTY0LDggKzE3Miw5IEBAIHB1YmxpYzoKIAogICAgIC8vIENv
bnRlbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKLSAgICB2aXJ0dWFsIHZvaWQgZm9ybXMoV2ViVmVjdG9yPFdlYkZvcm1FbGVt
ZW50PiYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFdlYkRvY3VtZW50IGRvY3VtZW50KCkgY29u
c3QgPSAwOwogCisgICAgdmlydHVhbCB2b2lkIGZvcm1zKFdlYlZlY3RvcjxXZWJGb3JtRWxlbWVu
dD4mKSBjb25zdCA9IDA7CiAKICAgICAvLyBTY3JpcHRpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC00NDQsNiArNDUzLDcg
QEAgcHVibGljOgogICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBiYXNlIFVSTCBvZiB0aGUgZnJhbWUn
cyBkb2N1bWVudC4gIFRoaXMgdXNlcyB0aGUKICAgICAvLyBzYW1lIGFsZ29yaXRobSB0aGF0IFdl
YktpdCB1c2VzIHRvIHJlc29sdmUgaHlwZXJsaW5rcyBmb3VuZCBpbiBhCiAgICAgLy8gSFRNTCBk
b2N1bWVudC4KKyAgICAvLyBEZXByZWNhdGVkLiBVc2UgZG9jdW1lbnQoKS5jb21wbGV0ZVVSTCgp
IGluc3RlYWQuCiAgICAgdmlydHVhbCBXZWJVUkwgY29tcGxldGVVUkwoY29uc3QgV2ViU3RyaW5n
JikgY29uc3QgPSAwOwogCiAgICAgLy8gUmV0dXJucyB0aGUgY29udGVudHMgb2YgdGhpcyBmcmFt
ZSBhcyBhIHN0cmluZy4gIElmIHRoZSB0ZXh0IGlzCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYk5vZGUuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTm9kZS5oCmlu
ZGV4IDAzYWZhOTAuLmRmYmIwYWEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViTm9kZS5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTm9kZS5oCkBAIC00MCw3
ICs0MCw5IEBAIG5hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUGFz
c1JlZlB0cjsgfQogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViRG9jdW1l
bnQ7CiBjbGFzcyBXZWJGcmFtZTsKK2NsYXNzIFdlYk5vZGVMaXN0OwogCiAvLyBQcm92aWRlcyBy
ZWFkb25seSBhY2Nlc3MgdG8gc29tZSBwcm9wZXJ0aWVzIG9mIGEgRE9NIG5vZGUuCiBjbGFzcyBX
ZWJOb2RlIHsKQEAgLTY2LDkgKzY4LDM3IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBXVEY6OlBh
c3NSZWZQdHI8V2ViQ29yZTo6Tm9kZT4oKSBjb25zdDsKICNlbmRpZgogCisgICAgZW51bSBOb2Rl
VHlwZSB7CisgICAgICAgIEVsZW1lbnROb2RlID0gMSwKKyAgICAgICAgQXR0cmlidXRlTm9kZSwK
KyAgICAgICAgVGV4dE5vZGUsCisgICAgICAgIENEYXRhU2VjdGlvbk5vZGUsCisgICAgICAgIEVu
dGl0eVJlZmVyZW5jZU5vZGUsCisgICAgICAgIEVudGl0eU5vZGUsCisgICAgICAgIFByb2Nlc3Np
bmdJbnN0cnVjdGlvbnNOb2RlLAorICAgICAgICBDb21tZW50Tm9kZSwKKyAgICAgICAgRG9jdW1l
bnROb2RlLAorICAgICAgICBEb2N1bWVudFR5cGVOb2RlLAorICAgICAgICBEb2N1bWVudEZyYWdt
ZW50Tm9kZSwKKyAgICAgICAgTm90YXRpb25Ob2RlLAorICAgICAgICBYUGF0aE5hbWVzcGFjZU5v
ZGUKKyAgICB9OworICAgIFdFQktJVF9BUEkgTm9kZVR5cGUgbm9kZVR5cGUoKSBjb25zdDsKICAg
ICBXRUJLSVRfQVBJIFdlYk5vZGUgcGFyZW50Tm9kZSgpIGNvbnN0OwogICAgIFdFQktJVF9BUEkg
V2ViU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgbm9k
ZVZhbHVlKCkgY29uc3Q7CisgICAgLy8gRGVwcmVjYXRlZC4gVXNlIGRvY3VtZW50KCkuZnJhbWUo
KSBpbnN0ZWFkLgogICAgIFdFQktJVF9BUEkgV2ViRnJhbWUqIGZyYW1lKCkgY29uc3Q7CisgICAg
V0VCS0lUX0FQSSBXZWJEb2N1bWVudCBkb2N1bWVudCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkg
V2ViTm9kZSBmaXJzdENoaWxkKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJOb2RlIGxhc3RD
aGlsZCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViTm9kZSBwcmV2aW91c1NpYmxpbmcoKSBj
b25zdDsKKyAgICBXRUJLSVRfQVBJIFdlYk5vZGUgbmV4dFNpYmxpbmcoKSBjb25zdDsKKyAgICBX
RUJLSVRfQVBJIGJvb2wgaGFzQ2hpbGROb2RlcygpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2Vi
Tm9kZUxpc3QgY2hpbGROb2RlcygpOworICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGNyZWF0ZU1h
cmt1cCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBpc1RleHROb2RlKCkgY29uc3Q7Cisg
ICAgV0VCS0lUX0FQSSBib29sIGlzRWxlbWVudE5vZGUoKSBjb25zdDsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IFQgdG9FbGVtZW50KCkKICAgICB7CkBAIC03Nyw2ICsxMDcsMTMgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNvbnN0IFQgdG9Db25zdEVsZW1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgVCByZXM7
CisgICAgICAgIHJlcy5tX3ByaXZhdGUgPSBtX3ByaXZhdGU7CisgICAgICAgIHJldHVybiByZXM7
CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdHlwZWRlZiBXZWJDb3JlOjpOb2RlIFdlYk5vZGVQ
cml2YXRlOwogICAgIHZvaWQgYXNzaWduKFdlYk5vZGVQcml2YXRlKik7CmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5vZGVDb2xsZWN0aW9uLmggYi9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYk5vZGVDb2xsZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNzQyMDljNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViTm9kZUNvbGxlY3Rpb24uaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJOb2RlQ29s
bGVjdGlvbl9oCisjZGVmaW5lIFdlYk5vZGVDb2xsZWN0aW9uX2gKKworI2luY2x1ZGUgIldlYkNv
bW1vbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEhUTUxDb2xsZWN0aW9uOyB9Cisj
aWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IGNsYXNzIFBhc3NSZWZQdHI7IH0KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsK
K2NsYXNzIFdlYk5vZGU7CisKKy8vIFByb3ZpZGVzIHJlYWRvbmx5IGFjY2VzcyB0byBzb21lIHBy
b3BlcnRpZXMgb2YgYSBET00gbm9kZS4KK2NsYXNzIFdlYk5vZGVDb2xsZWN0aW9uIHsKK3B1Ymxp
YzoKKyAgICB+V2ViTm9kZUNvbGxlY3Rpb24oKSB7IHJlc2V0KCk7IH0KKworICAgIFdlYk5vZGVD
b2xsZWN0aW9uKGNvbnN0IFdlYk5vZGVDb2xsZWN0aW9uJiBuKSA6IG1fcHJpdmF0ZSgwKSB7IGFz
c2lnbihuKTsgfQorICAgIFdlYk5vZGVDb2xsZWN0aW9uJiBvcGVyYXRvcj0oY29uc3QgV2ViTm9k
ZUNvbGxlY3Rpb24mIG4pCisgICAgeworICAgICAgICBhc3NpZ24obik7CisgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICB9CisKKyAgICBXRUJLSVRfQVBJIHZvaWQgcmVzZXQoKTsKKyAgICBXRUJL
SVRfQVBJIHZvaWQgYXNzaWduKGNvbnN0IFdlYk5vZGVDb2xsZWN0aW9uJik7CisKKyAgICBXRUJL
SVRfQVBJIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViTm9kZSBu
ZXh0SXRlbSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViTm9kZSBmaXJzdEl0ZW0oKSBjb25z
dDsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYk5vZGVDb2xsZWN0aW9uKGNv
bnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4mKTsKKyNlbmRpZgor
Citwcml2YXRlOgorICAgIHZvaWQgYXNzaWduKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uKik7Cisg
ICAgV2ViQ29yZTo6SFRNTENvbGxlY3Rpb24qIG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViTm9kZUxpc3QuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTm9kZUxpc3QuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2U4MjgwCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJOb2RlTGlzdC5oCkBAIC0wLDAgKzEsNzMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFdlYk5vZGVMaXN0X2gKKyNkZWZpbmUgV2ViTm9kZUxpc3RfaAorCisjaW5jbHVkZSAi
V2ViQ29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgTm9kZUxpc3Q7IH0KKyNp
ZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KK25hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gY2xhc3MgUGFzc1JlZlB0cjsgfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgewor
Y2xhc3MgV2ViTm9kZTsKKworLy8gUHJvdmlkZXMgcmVhZG9ubHkgYWNjZXNzIHRvIHNvbWUgcHJv
cGVydGllcyBvZiBhIERPTSBub2RlLgorY2xhc3MgV2ViTm9kZUxpc3QgeworcHVibGljOgorICAg
IH5XZWJOb2RlTGlzdCgpIHsgcmVzZXQoKTsgfQorCisgICAgV2ViTm9kZUxpc3QoY29uc3QgV2Vi
Tm9kZUxpc3QmIG4pIDogbV9wcml2YXRlKDApIHsgYXNzaWduKG4pOyB9CisgICAgV2ViTm9kZUxp
c3QmIG9wZXJhdG9yPShjb25zdCBXZWJOb2RlTGlzdCYgbikKKyAgICB7CisgICAgICAgIGFzc2ln
bihuKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFdFQktJVF9BUEkgdm9p
ZCByZXNldCgpOworICAgIFdFQktJVF9BUEkgdm9pZCBhc3NpZ24oY29uc3QgV2ViTm9kZUxpc3Qm
KTsKKworICAgIFdFQktJVF9BUEkgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgV0VCS0lU
X0FQSSBXZWJOb2RlIGl0ZW0oc2l6ZV90KSBjb25zdDsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRB
VElPTgorICAgIFdlYk5vZGVMaXN0KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpOb2Rl
TGlzdD4mKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIHZvaWQgYXNzaWduKFdlYkNvcmU6Ok5v
ZGVMaXN0Kik7CisgICAgV2ViQ29yZTo6Tm9kZUxpc3QqIG1fcHJpdmF0ZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFn
ZVNlcmlhbGl6ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGY3OTk0
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFs
aXplci5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlBhZ2VTZXJpYWxpemVyX2gKKyNkZWZp
bmUgV2ViUGFnZVNlcmlhbGl6ZXJfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworY2xhc3MgV2ViRnJhbWU7CitjbGFzcyBXZWJQYWdlU2VyaWFsaXplckNs
aWVudDsKK2NsYXNzIFdlYlN0cmluZzsKK2NsYXNzIFdlYlVSTDsKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBjbGFzcyBXZWJWZWN0b3I7CisKKy8vIEdldCBodG1sIGRhdGEgYnkgc2VyaWFsaXppbmcg
YWxsIGZyYW1lcyBvZiBjdXJyZW50IHBhZ2Ugd2l0aCBsaXN0cworLy8gd2hpY2ggY29udGFpbiBh
bGwgcmVzb3VyY2UgbGlua3MgdGhhdCBoYXZlIGxvY2FsIGNvcHkuCitjbGFzcyBXZWJQYWdlU2Vy
aWFsaXplciB7CitwdWJsaWM6CisgICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGZpbmQgb3V0IGFs
bCBmcmFtZXMgYW5kIHNlcmlhbGl6ZSB0aGVtIHRvIEhUTUwgZGF0YS4KKyAgICAvLyBXZSBoYXZl
IGEgZGF0YSBidWZmZXIgdG8gdGVtcG9yYXJ5IHNhdmluZyBnZW5lcmF0ZWQgaHRtbCBkYXRhLiBX
ZSB3aWxsCisgICAgLy8gc2VxdWVudGlhbGx5IGNhbGwgV2ViUGFnZVNlcmlhemxpZXJDbGllbnQg
b25jZSB0aGUgZGF0YSBidWZmZXIgaXMgZnVsbC4KKyAgICAvLworICAgIC8vIFJldHVybiBmYWxz
ZSBtZWFucyBubyBhdmFpbGFibGUgZnJhbWUgaGFzIGJlZW4gc2VyaWFsaXplZCwgb3RoZXJ3aXNl
CisgICAgLy8gcmV0dXJuIHRydWUuCisgICAgLy8KKyAgICAvLyBUaGUgcGFyYW1ldGVyIGZyYW1l
IHNwZWNpZmllcyB3aGljaCBmcmFtZSBuZWVkIHRvIGJlIHNlcmlhbGl6ZWQuCisgICAgLy8gVGhl
IHBhcmFtZXRlciByZWN1cnNpdmUgc3BlY2lmaWVzIHdoZXRoZXIgd2UgbmVlZCB0bworICAgIC8v
IHNlcmlhbGl6ZSBhbGwgc3ViIGZyYW1lcyBvZiB0aGUgc3BlY2lmaWVkIGZyYW1lIG9yIG5vdC4K
KyAgICAvLyBUaGUgcGFyYW1ldGVyIGNsaWVudCBzcGVjaWZpZXMgdGhlIHBvaW50ZXIgb2YgaW50
ZXJmYWNlCisgICAgLy8gV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQgcHJvdmlkaW5nIGEgc2luayBp
bnRlcmZhY2UgdG8gcmVjZWl2ZSB0aGUKKyAgICAvLyBpbmRpdmlkdWFsIGNodW5rcyBvZiBkYXRh
IHRvIGJlIHNhdmVkLgorICAgIC8vIFRoZSBwYXJhbWV0ZXIgbGlua3MgY29udGFpbiBvcmlnaW5h
bCBVUkxzIG9mIGFsbCBzYXZlZCBsaW5rcy4KKyAgICAvLyBUaGUgcGFyYW1ldGVyIGxvY2FsUGF0
aHMgY29udGFpbiBjb3JyZXNwb25kaW5nIGxvY2FsIGZpbGUgcGF0aHMgb2YgYWxsCisgICAgLy8g
c2F2ZWQgbGlua3MsIHdoaWNoIG1hdGNoZWQgd2l0aCB2ZWN0b3I6bGlua3Mgb25lIGJ5IG9uZS4K
KyAgICAvLyBUaGUgcGFyYW1ldGVyIGxvY2FsRGlyZWN0b3J5TmFtZSBpcyByZWxhdGl2ZSBwYXRo
IG9mIGRpcmVjdG9yeSB3aGljaAorICAgIC8vIGNvbnRhaW4gYWxsIHNhdmVkIGF1eGlsaWFyeSBm
aWxlcyBpbmNsdWRlZCBhbGwgc3ViIGZyYW1lcyBhbmQgcmVzb3VyY2VzLgorICAgIFdFQktJVF9B
UEkgc3RhdGljIGJvb2wgc2VyaWFsaXplKFdlYkZyYW1lKiBmcmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlY3Vyc2l2ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudCogY2xpZW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+
JiBsaW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJW
ZWN0b3I8V2ViU3RyaW5nPiYgbG9jYWxQYXRocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGxvY2FsRGlyZWN0b3J5TmFtZSk7CisKKyAgICAv
LyBGSVhNRTogVGhlIGZvbGxvd2luZyBhcmUgaGVyZSBmb3IgdW5pdCB0ZXN0aW5nIHB1cnBvc2Vz
LiBDb25zaWRlcgorICAgIC8vIGNoYW5naW5nIHRoZSB1bml0IHRlc3RzIGluc3RlYWQuCisKKyAg
ICAvLyBHZW5lcmF0ZSB0aGUgTUVUQSBmb3IgY2hhcnNldCBkZWNsYXJhdGlvbi4KKyAgICBXRUJL
SVRfQVBJIHN0YXRpYyBXZWJTdHJpbmcgZ2VuZXJhdGVNZXRhQ2hhcnNldERlY2xhcmF0aW9uKGNv
bnN0IFdlYlN0cmluZyYgY2hhcnNldCk7CisgICAgLy8gR2VuZXJhdGUgdGhlIE1PVFcgZGVjbGFy
YXRpb24uCisgICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5nIGdlbmVyYXRlTWFya09mVGhl
V2ViRGVjbGFyYXRpb24oY29uc3QgV2ViVVJMJiB1cmwpOworICAgIC8vIEdlbmVyYXRlIHRoZSBk
ZWZhdWx0IGJhc2UgdGFnIGRlY2xhcmF0aW9uLgorICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0
cmluZyBnZW5lcmF0ZUJhc2VUYWdEZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGJhc2VUYXJn
ZXQpOworfTsKKworfSAgLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaCBiL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDlhMWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplckNsaWVudC5oCkBAIC0wLDAgKzEsNzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50X2gKKyNkZWZpbmUgV2ViUGFnZVNlcmlh
bGl6ZXJDbGllbnRfaAorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlN0cmluZzsKK2Ns
YXNzIFdlYlVSTDsKKworLy8gVGhpcyBjbGFzcyBpcyB1c2VkIGZvciBwcm92aWRpbmcgc2luayBp
bnRlcmZhY2UgdGhhdCBjYW4gYmUgdXNlZCB0byByZWNlaXZlCisvLyB0aGUgaW5kaXZpZHVhbCBj
aHVua3Mgb2YgZGF0YSB0byBiZSBzYXZlZC4KK2NsYXNzIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50
IHsKK3B1YmxpYzoKKyAgICAvLyBUaGlzIGVudW0gaW5kaWNhdGVzICBUaGlzIHNpbmsgaW50ZXJm
YWNlIGNhbiByZWNlaXZlIHRoZSBpbmRpdmlkdWFsIGNodW5rcworICAgIC8vIG9mIHNlcmlhbGl6
ZWQgZGF0YSB0byBiZSBzYXZlZCwgc28gd2UgdXNlIHZhbHVlcyBvZiBmb2xsb3dpbmcgZW51bQor
ICAgIC8vIGRlZmluaXRpb24gdG8gaW5kaWNhdGUgdGhlIHNlcmlhbGl6YXRpb24gc3RhdHVzIG9m
IHNlcmlhbGl6aW5nIGFsbCBodG1sCisgICAgLy8gY29udGVudC4gSWYgY3VycmVudCBmcmFtZSBp
cyBub3QgY29tcGxldGUgc2VyaWFsaXplZCwgY2FsbAorICAgIC8vIGRpZFNlcmlhbGl6ZURhdGFG
b3JGcmFtZSB3aXRoIFVSTCBvZiBjdXJyZW50IGZyYW1lLCBkYXRhLCBkYXRhIGxlbmd0aCBhbmQK
KyAgICAvLyBmbGFnIEN1cnJlbnRGcmFtZUlzTm90RmluaXNoZWQuCisgICAgLy8gSWYgY3VycmVu
dCBmcmFtZSBpcyBjb21wbGV0ZSBzZXJpYWxpemVkLCBjYWxsIGRpZFNlcmlhbGl6ZURhdGFGb3JG
cmFtZQorICAgIC8vIHdpdGggVVJMIG9mIGN1cnJlbnQgZnJhbWUsIGRhdGEsIGRhdGEgbGVuZ3Ro
IGFuZCBmbGFnCisgICAgLy8gQ3VycmVudEZyYW1lSXNGaW5pc2hlZC4KKyAgICAvLyBJZiBhbGwg
ZnJhbWVzIG9mIHBhZ2UgYXJlIGNvbXBsZXRlIHNlcmlhbGl6ZWQsIGNhbGwKKyAgICAvLyBkaWRT
ZXJpYWxpemVEYXRhRm9yRnJhbWUgd2l0aCBlbXB0eSBVUkwsIGVtcHR5IGRhdGEsIDAgYW5kIGZs
YWcKKyAgICAvLyBBbGxGcmFtZXNBcmVGaW5pc2hlZC4KKyAgICBlbnVtIFBhZ2VTZXJpYWxpemF0
aW9uU3RhdHVzIHsKKyAgICAgICAgQ3VycmVudEZyYW1lSXNOb3RGaW5pc2hlZCA9IDAsCisgICAg
ICAgIEN1cnJlbnRGcmFtZUlzRmluaXNoZWQsCisgICAgICAgIEFsbEZyYW1lc0FyZUZpbmlzaGVk
LAorICAgIH07CisKKyAgICAvLyBSZWNlaXZlIHRoZSBpbmRpdmlkdWFsIGNodW5rcyBvZiBzZXJp
YWxpemVkIGRhdGEgdG8gYmUgc2F2ZWQuCisgICAgLy8gVGhlIHBhcmFtZXRlciBmcmFtZVVSTCBz
cGVjaWZpZXMgd2hhdCBmcmFtZSB0aGUgZGF0YSBiZWxvbmdzLiBUaGUKKyAgICAvLyBwYXJhbWV0
ZXIgZGF0YSBjb250YWlucyB0aGUgYXZhaWxhYmxlIGRhdGEgZm9yIHNhdmluZy4gVGhlIHBhcmFt
ZXRlcgorICAgIC8vIHN0YXR1cyBpbmRpY2F0ZXMgdGhlIHN0YXR1cyBvZiBkYXRhIHNlcmlhbGl6
YXRpb24uCisgICAgdmlydHVhbCB2b2lkIGRpZFNlcmlhbGl6ZURhdGFGb3JGcmFtZShjb25zdCBX
ZWJVUkwmIGZyYW1lVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgV2ViU3RyaW5nJiBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUGFnZVNlcmlhbGl6YXRpb25TdGF0dXMgc3RhdHVzKSA9IDA7CisgICAgV2Vi
UGFnZVNlcmlhbGl6ZXJDbGllbnQoKSB7IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfldl
YlBhZ2VTZXJpYWxpemVyQ2xpZW50KCkgeyB9Cit9OworCit9ICAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTdHJpbmcu
aCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3RyaW5nLmgKaW5kZXggZDliNjZiMi4uOWRj
NGMzYyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTdHJpbmcuaAorKysg
Yi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlN0cmluZy5oCkBAIC04Nyw2ICs4Nyw5IEBAIHB1
YmxpYzoKICAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJTdHJpbmcgZnJvbVVURjgoY29uc3QgY2hh
ciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7CiAgICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5n
IGZyb21VVEY4KGNvbnN0IGNoYXIqIGRhdGEpOwogCisgICAgV2ViU3RyaW5nKGNvbnN0IGNoYXIq
IGRhdGEpOworICAgIFdlYlN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IGNoYXIqIHMpOworCiAjaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OCiAgICAgV2ViU3RyaW5nKGNvbnN0IFdlYkNvcmU6OlN0cmlu
ZyYpOwogICAgIFdlYlN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpOwpA
QCAtOTYsNiArOTksNyBAQCBwdWJsaWM6CiAgICAgV2ViU3RyaW5nJiBvcGVyYXRvcj0oY29uc3Qg
V2ViQ29yZTo6QXRvbWljU3RyaW5nJik7CiAgICAgb3BlcmF0b3IgV2ViQ29yZTo6QXRvbWljU3Ry
aW5nKCkgY29uc3Q7CiAjZWxzZQorCiAgICAgV2ViU3RyaW5nKGNvbnN0IHN0cmluZzE2JiBzKSA6
IG1fcHJpdmF0ZSgwKQogICAgIHsKICAgICAgICAgYXNzaWduKHMuZGF0YSgpLCBzLmxlbmd0aCgp
KTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5j
cHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwCmluZGV4IGYz
NDljYzMuLmM0NjY5MmYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0
Y2hpbmdFbnVtcy5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0Vu
dW1zLmNwcApAQCAtMjQzLDYgKzI0MywyMCBAQCBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVN
KFdlYklucHV0RWxlbWVudDo6TW9udGgsIEhUTUxJbnB1dEVsZW1lbnQ6Ok1PTlRIKTsKIENPTVBJ
TEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViSW5wdXRFbGVtZW50OjpUaW1lLCBIVE1MSW5wdXRF
bGVtZW50OjpUSU1FKTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViSW5wdXRFbGVt
ZW50OjpXZWVrLCBIVE1MSW5wdXRFbGVtZW50OjpXRUVLKTsKIAorQ09NUElMRV9BU1NFUlRfTUFU
Q0hJTkdfRU5VTShXZWJOb2RlOjpFbGVtZW50Tm9kZSwgTm9kZTo6RUxFTUVOVF9OT0RFKTsKK0NP
TVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTm9kZTo6QXR0cmlidXRlTm9kZSwgTm9kZTo6
QVRUUklCVVRFX05PREUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJOb2RlOjpU
ZXh0Tm9kZSwgTm9kZTo6VEVYVF9OT0RFKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0o
V2ViTm9kZTo6Q0RhdGFTZWN0aW9uTm9kZSwgTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFKTsKK0NP
TVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTm9kZTo6RW50aXR5UmVmZXJlbmNlTm9kZSwg
Tm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VO
VU0oV2ViTm9kZTo6RW50aXR5Tm9kZSwgTm9kZTo6RU5USVRZX05PREUpOworQ09NUElMRV9BU1NF
UlRfTUFUQ0hJTkdfRU5VTShXZWJOb2RlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25zTm9kZSwgTm9k
ZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5H
X0VOVU0oV2ViTm9kZTo6Q29tbWVudE5vZGUsIE5vZGU6OkNPTU1FTlRfTk9ERSk7CitDT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk5vZGU6OkRvY3VtZW50Tm9kZSwgTm9kZTo6RE9DVU1F
TlRfTk9ERSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk5vZGU6OkRvY3VtZW50
VHlwZU5vZGUsIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERSk7CitDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdlYk5vZGU6OkRvY3VtZW50RnJhZ21lbnROb2RlLCBOb2RlOjpET0NVTUVOVF9G
UkFHTUVOVF9OT0RFKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTm9kZTo6Tm90
YXRpb25Ob2RlLCBOb2RlOjpOT1RBVElPTl9OT0RFKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5H
X0VOVU0oV2ViTm9kZTo6WFBhdGhOYW1lc3BhY2VOb2RlLCBOb2RlOjpYUEFUSF9OQU1FU1BBQ0Vf
Tk9ERSk7CisKICNpZiBFTkFCTEUoVklERU8pCiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVN
KFdlYk1lZGlhUGxheWVyOjpFbXB0eSwgTWVkaWFQbGF5ZXI6OkVtcHR5KTsKIENPTVBJTEVfQVNT
RVJUX01BVENISU5HX0VOVU0oV2ViTWVkaWFQbGF5ZXI6OklkbGUsIE1lZGlhUGxheWVyOjpJZGxl
KTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5j
cHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RPTVV0aWxpdGllc1ByaXZhdGUuY3BwCmluZGV4IGZm
ZGQ4NWQuLmMyYWFjZmIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvRE9NVXRpbGl0
aWVzUHJpdmF0ZS5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9ET01VdGlsaXRpZXNQcml2
YXRlLmNwcApAQCAtODQsNCArODQsNTQgQEAgU3RyaW5nIG5hbWVPZklucHV0RWxlbWVudChIVE1M
SW5wdXRFbGVtZW50KiBlbGVtZW50KQogICAgIHJldHVybiBXZWJJbnB1dEVsZW1lbnQoZWxlbWVu
dCkubmFtZUZvckF1dG9maWxsKCk7CiB9CiAKKworYm9vbCBlbGVtZW50SGFzTGVnYWxMaW5rQXR0
cmlidXRlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgaWYgKGF0dHJO
YW1lID09IEhUTUxOYW1lczo6c3JjQXR0cikgeworICAgICAgICAvLyBDaGVjayBzcmMgYXR0cmli
dXRlLgorICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZ1RhZykK
KyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHRUYWcp
CisgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lVGFn
KQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lVGFn
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSkgeworICAgICAgICAgICAgY29uc3QgSFRNTElucHV0
RWxlbWVudCogaW5wdXQgPQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTElucHV0
RWxlbWVudCo+KGVsZW1lbnQpOworICAgICAgICAgICAgaWYgKGlucHV0LT5pbnB1dFR5cGUoKSA9
PSBIVE1MSW5wdXRFbGVtZW50OjpJTUFHRSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjpocmVmQXR0
cikgeworICAgICAgICAvLyBDaGVjayBocmVmIGF0dHJpYnV0ZS4KKyAgICAgICAgaWYgKGVsZW1l
bnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaW5rVGFnKQorICAgICAgICAgICAgfHwgZWxlbWVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFUYWcpCisgICAgICAgICAgICB8fCBlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6YXJlYVRhZykpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IEhUTUxOYW1lczo6YWN0aW9uQXR0cikgeworICAg
ICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm1UYWcpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBIVE1MTmFtZXM6
OmJhY2tncm91bmRBdHRyKSB7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6Ym9keVRhZykKKyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp0YWJsZVRhZykKKyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp0clRhZykKKyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp0ZFRhZykpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGF0dHJO
YW1lID09IEhUTUxOYW1lczo6Y2l0ZUF0dHIpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpibG9ja3F1b3RlVGFnKQorICAgICAgICAgICAgfHwgZWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnFUYWcpCisgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6ZGVsVGFnKQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6Omluc1RhZykpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
IGVsc2UgaWYgKGF0dHJOYW1lID09IEhUTUxOYW1lczo6Y2xhc3NpZEF0dHIKKyAgICAgICAgICAg
ICAgIHx8IGF0dHJOYW1lID09IEhUTUxOYW1lczo6ZGF0YUF0dHIpIHsKKyAgICAgICAgaWYgKGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3RUYWcpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBIVE1MTmFtZXM6OmNvZGViYXNl
QXR0cikgeworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVj
dFRhZykKKyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphcHBs
ZXRUYWcpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL0RPTVV0aWxpdGllc1ByaXZhdGUuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRE9NVXRp
bGl0aWVzUHJpdmF0ZS5oCmluZGV4IGMwMmJmODQuLjI1M2FiM2YgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5oCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5oCkBAIC0zMiwxMSArMzIsMTMgQEAKICNkZWZpbmUg
RE9NVXRpbGl0aWVzUHJpdmF0ZV9oCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEVsZW1l
bnQ7CiBjbGFzcyBIVE1MSW5wdXRFbGVtZW50OwogY2xhc3MgSFRNTExpbmtFbGVtZW50OwogY2xh
c3MgSFRNTE1ldGFFbGVtZW50OwogY2xhc3MgSFRNTE9wdGlvbkVsZW1lbnQ7CiBjbGFzcyBOb2Rl
OworY2xhc3MgUXVhbGlmaWVkTmFtZTsKIGNsYXNzIFN0cmluZzsKIH0KIApAQCAtNTMsNiArNTUs
MTYgQEAgV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQqIHRvSFRNTE9wdGlvbkVsZW1lbnQoV2Vi
Q29yZTo6Tm9kZSopOwogLy8gRklYTUU6IERlcHJlY2F0ZS4gVXNlIFdlYklucHV0RWxlbWVudDo6
bmFtZUZvckF1dG9maWxsIGluc3RlYWQuCiBXZWJDb3JlOjpTdHJpbmcgbmFtZU9mSW5wdXRFbGVt
ZW50KFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqKTsKIAorLy8gRm9yIGltZywgc2NyaXB0LCBp
ZnJhbWUsIGZyYW1lIGVsZW1lbnQsIHdoZW4gYXR0cmlidXRlIG5hbWUgaXMgc3JjLAorLy8gZm9y
IGxpbmssIGEsIGFyZWEgZWxlbWVudCwgd2hlbiBhdHRyaWJ1dGUgbmFtZSBpcyBocmVmLAorLy8g
Zm9yIGZvcm0gZWxlbWVudCwgd2hlbiBhdHRyaWJ1dGUgbmFtZSBpcyBhY3Rpb24sCisvLyBmb3Ig
aW5wdXQsIHR5cGU9aW1hZ2UsIHdoZW4gYXR0cmlidXRlIG5hbWUgaXMgc3JjLAorLy8gZm9yIGJv
ZHksIHRhYmxlLCB0ciwgdGQsIHdoZW4gYXR0cmlidXRlIG5hbWUgaXMgYmFja2dyb3VuZCwKKy8v
IGZvciBibG9ja3F1b3RlLCBxLCBkZWwsIGlucywgd2hlbiBhdHRyaWJ1dGUgbmFtZSBpcyBjaXRl
LAorLy8gd2UgY2FuIGNvbnNpZGVyIHRoZSBhdHRyaWJ1dGUgdmFsdWUgaGFzIGxlZ2FsIGxpbmsu
Citib29sIGVsZW1lbnRIYXNMZWdhbExpbmtBdHRyaWJ1dGUoY29uc3QgV2ViQ29yZTo6RWxlbWVu
dCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJD
b3JlOjpRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAog
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRG9jdW1lbnQuY3Bw
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEb2N1bWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZDE0NGZjZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRG9jdW1lbnQuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYkRvY3VtZW50LmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MQWxsQ29sbGVjdGlvbi5oIgorI2lu
Y2x1ZGUgIkhUTUxCb2R5RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCisj
aW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCisjaW5jbHVkZSAiV2ViRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIldlYkZyYW1lSW1wbC5oIgorI2luY2x1ZGUgIldlYk5vZGVDb2xsZWN0aW9uLmgiCisj
aW5jbHVkZSAiV2ViVVJMLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworV2ViRG9jdW1lbnQ6OldlYkRvY3VtZW50KGNvbnN0IFBhc3NSZWZQdHI8
RG9jdW1lbnQ+JiBlbGVtKQorICAgIDogV2ViTm9kZShlbGVtLnJlbGVhc2VSZWYoKSkKK3sKK30K
KworV2ViRG9jdW1lbnQmIFdlYkRvY3VtZW50OjpvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxE
b2N1bWVudD4mIGVsZW0pCit7CisgICAgV2ViTm9kZTo6YXNzaWduKGVsZW0ucmVsZWFzZVJlZigp
KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYkRvY3VtZW50OjpvcGVyYXRvciBQYXNzUmVm
UHRyPERvY3VtZW50PigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8RG9jdW1lbnQ+
KHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9wcml2YXRlKSk7Cit9CisKK1dlYkZyYW1lKiBXZWJE
b2N1bWVudDo6ZnJhbWUoKSBjb25zdAoreworICAgIHJldHVybiBXZWJGcmFtZUltcGw6OmZyb21G
cmFtZShjb25zdFVud3JhcDxEb2N1bWVudD4oKS0+ZnJhbWUoKSk7Cit9CisKK2Jvb2wgV2ViRG9j
dW1lbnQ6OmlzSFRNTERvY3VtZW50KCkgY29uc3QKK3sgIAorICAgIHJldHVybiBjb25zdFVud3Jh
cDxEb2N1bWVudD4oKS0+aXNIVE1MRG9jdW1lbnQoKTsKK30KKworV2ViVVJMIFdlYkRvY3VtZW50
OjpiYXNlVVJMKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8RG9jdW1lbnQ+KCkt
PmJhc2VVUkwoKTsKK30KKworV2ViRWxlbWVudCBXZWJEb2N1bWVudDo6Ym9keSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIFdlYkVsZW1lbnQoY29uc3RVbndyYXA8RG9jdW1lbnQ+KCktPmJvZHkoKSk7
Cit9CisKK1dlYkVsZW1lbnQgV2ViRG9jdW1lbnQ6OmhlYWQoKQoreworICAgIHJldHVybiBXZWJF
bGVtZW50KHVud3JhcDxEb2N1bWVudD4oKS0+aGVhZCgpKTsKK30KKworV2ViTm9kZUNvbGxlY3Rp
b24gV2ViRG9jdW1lbnQ6OmFsbCgpCit7CisgICAgcmV0dXJuIFdlYk5vZGVDb2xsZWN0aW9uKHVu
d3JhcDxEb2N1bWVudD4oKS0+YWxsKCkpOworfQorCitXZWJVUkwgV2ViRG9jdW1lbnQ6OmNvbXBs
ZXRlVVJMKGNvbnN0IFdlYlN0cmluZyYgcGFydGlhbFVSTCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Y29uc3RVbndyYXA8RG9jdW1lbnQ+KCktPmNvbXBsZXRlVVJMKHBhcnRpYWxVUkwpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RWxlbWVudC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkVsZW1lbnQuY3BwCmluZGV4IDNm
MTNlZTEuLjU2OTgwZmUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRWxlbWVu
dC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFbGVtZW50LmNwcApAQCAtNTQsNSAr
NTQsMjEgQEAgV2ViRWxlbWVudDo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPEVsZW1lbnQ+KCkg
Y29uc3QKICAgICByZXR1cm4gUGFzc1JlZlB0cjxFbGVtZW50PihzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obV9wcml2YXRlKSk7CiB9CiAKK2Jvb2wgV2ViRWxlbWVudDo6aGFzVGFnTmFtZShjb25zdCBX
ZWJTdHJpbmcmIHRhZ05hbWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNl
KGNvbnN0VW53cmFwPEVsZW1lbnQ+KCktPnRhZ05hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGFnTmFtZS5vcGVyYXRvciBXZWJDb3JlOjpTdHJpbmcoKSk7Cit9CisKK2Jvb2wg
V2ViRWxlbWVudDo6aGFzQXR0cmlidXRlKGNvbnN0IFdlYlN0cmluZyYgYXR0ck5hbWUpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPEVsZW1lbnQ+KCktPmhhc0F0dHJpYnV0ZShhdHRy
TmFtZSk7Cit9CisKK1dlYlN0cmluZyBXZWJFbGVtZW50OjpnZXRBdHRyaWJ1dGUoY29uc3QgV2Vi
U3RyaW5nJiBhdHRyTmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8RWxlbWVu
dD4oKS0+Z2V0QXR0cmlidXRlKGF0dHJOYW1lKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRW50aXRpZXMuY3BwIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJFbnRpdGllcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOGRmNmNjMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRW50aXRpZXMuY3BwCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYkVudGl0aWVzLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLy8gTm90
ZSB0aGF0IHRoaXMgZmlsZSBpcyBhbHNvIGluY2x1ZGVkIGJ5IEhUTUxUb2tlbml6ZXIuY3BwIHNv
IHdlIGFyZSBnZXR0aW5nCisvLyB0d28gY29waWVzIG9mIHRoZSBkYXRhIGluIG1lbW9yeS4gIFdl
IGNhbiBmaXggdGhpcyBieSBjaGFuZ2luZyB0aGUgc2NyaXB0CisvLyB0aGF0IGdlbmVyYXRlZCB0
aGUgYXJyYXkgdG8gY3JlYXRlIGEgc3RhdGljIGNvbnN0IHRoYXQgaXMgaXRzIGxlbmd0aCwgYnV0
CisvLyB0aGlzIGlzIGxvdyBwcmlvcml0eSBzaW5jZSB0aGUgZGF0YSBpcyBsZXNzIHRoYW4gNEsu
CisjaW5jbHVkZSAiSFRNTEVudGl0eU5hbWVzLmMiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KworI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgcG9wdWxhdGVNYXAoV1RGOjpIYXNoTWFwPGludCwg
V2ViQ29yZTo6U3RyaW5nPiYgbWFwLAorICAgICAgICAgICAgICAgICBjb25zdCBFbnRpdHkqIGVu
dGl0aWVzLAorICAgICAgICAgICAgICAgICBzaXplX3QgZW50aXRpZXNDb3VudCwKKyAgICAgICAg
ICAgICAgICAgYm9vbCBzdGFuZGFyZEhUTUwpCit7CisgICAgQVNTRVJUKG1hcC5pc0VtcHR5KCkp
OworICAgIGNvbnN0IEVudGl0eSogZW50aXR5ID0gJmVudGl0aWVzWzBdOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZW50aXRpZXNDb3VudDsgaSsrLCBlbnRpdHkrKykgeworICAgICAgICBp
bnQgY29kZSA9IGVudGl0eS0+Y29kZTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBlbnRpdHktPm5h
bWU7CisgICAgICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgdXNlIHRoZSBsb3dlIGNhc2UgZm9yIGVu
dGl0aWVzIHRoYXQgaGF2ZSBib3RoLgorICAgICAgICBpZiAobWFwLmNvbnRhaW5zKGNvZGUpICYm
IG1hcC5nZXQoY29kZSkgPT0gbmFtZS5sb3dlcigpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIC8vIERvbid0IHJlZ2lzdGVyICZwZXJjbnQ7LCAmbnN1cDsgYW5kICZzdXBsOy4KKyAg
ICAgICAgaWYgKHN0YW5kYXJkSFRNTCAmJiAoY29kZSA9PSAnJScgfHwgY29kZSA9PSAweDIyODUg
fHwgY29kZSA9PSAweDAwYjkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1hcC5z
ZXQoY29kZSwgbmFtZSk7CisgICAgfQorICAgIGlmIChzdGFuZGFyZEhUTUwpCisgICAgICAgIG1h
cC5zZXQoc3RhdGljX2Nhc3Q8aW50PigweDAwMjcpLCBTdHJpbmcoIiMzOSIpKTsKK30KKworc3Rh
dGljIGNvbnN0IEVudGl0eSB4bWxCdWlsdEluRW50aXR5Q29kZXNbXSA9IHsKKyAgICB7ICJsdCIs
IDB4MDAzYyB9LAorICAgIHsgImd0IiwgMHgwMDNlIH0sCisgICAgeyAiYW1wIiwgMHgwMDI2IH0s
CisgICAgeyAiYXBvcyIsIDB4MDAyNyB9LAorICAgIHsgInF1b3QiLCAweDAwMjIgfQorfTsKKwor
V2ViRW50aXRpZXM6OldlYkVudGl0aWVzKGJvb2wgeG1sRW50aXRpZXMpCit7CisgICAgaWYgKHht
bEVudGl0aWVzKQorICAgICAgICBwb3B1bGF0ZU1hcChtX2VudGl0aWVzTWFwLAorICAgICAgICAg
ICAgICAgICAgICB4bWxCdWlsdEluRW50aXR5Q29kZXMsCisgICAgICAgICAgICAgICAgICAgIHNp
emVvZih4bWxCdWlsdEluRW50aXR5Q29kZXMpIC8gc2l6ZW9mKEVudGl0eSksCisgICAgICAgICAg
ICAgICAgICAgIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIHBvcHVsYXRlTWFwKG1fZW50aXRp
ZXNNYXAsCisgICAgICAgICAgICAgICAgICAgIHdvcmRsaXN0LAorICAgICAgICAgICAgICAgICAg
ICBzaXplb2Yod29yZGxpc3QpIC8gc2l6ZW9mKEVudGl0eSksCisgICAgICAgICAgICAgICAgICAg
IHRydWUpOworfQorCitTdHJpbmcgV2ViRW50aXRpZXM6OmVudGl0eU5hbWVCeUNvZGUoaW50IGNv
ZGUpIGNvbnN0Cit7CisgICAgaWYgKG1fZW50aXRpZXNNYXAuY29udGFpbnMoY29kZSkpCisgICAg
ICAgIHJldHVybiBtX2VudGl0aWVzTWFwLmdldChjb2RlKTsKKyAgICByZXR1cm4gIiI7Cit9CisK
K1N0cmluZyBXZWJFbnRpdGllczo6Y29udmVydEVudGl0aWVzSW5TdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBsZW4gPSB2YWx1ZS5sZW5ndGgoKTsKKyAg
ICBjb25zdCBVQ2hhciogc3RhcnRQb3MgPSB2YWx1ZS5jaGFyYWN0ZXJzKCk7CisgICAgY29uc3Qg
VUNoYXIqIGN1clBvcyA9IHN0YXJ0UG9zOworCisgICAgLy8gRklYTUU6IE9wdGltaXplIC0gY3Jl
YXRlIFN0cmluZ0J1aWxkZXIgb25seSBpZiB2YWx1ZSBoYXMgYW55IGVudGl0aWVzLgorICAgIFN0
cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHdoaWxlIChsZW4tLSkgeworICAgICAgICBpZiAobV9l
bnRpdGllc01hcC5jb250YWlucygqY3VyUG9zKSkgeworICAgICAgICAgICAgLy8gQXBwZW5kIGNv
bnRlbnQgYmVmb3JlIGVudGl0eSBjb2RlLgorICAgICAgICAgICAgaWYgKGN1clBvcyA+IHN0YXJ0
UG9zKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoU3RyaW5nKHN0YXJ0UG9zLCBjdXJQ
b3MgLSBzdGFydFBvcykpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiJiIpOworICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChtX2VudGl0aWVzTWFwLmdldCgqY3VyUG9zKSk7CisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCI7Iik7CisgICAgICAgICAgICBzdGFydFBvcyA9ICsrY3VyUG9z
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY3VyUG9zKys7CisgICAgICAgIH0KKyAg
ICB9CisgICAgLy8gQXBwZW5kIHRoZSByZW1haW5pbmcgY29udGVudC4KKyAgICBpZiAoY3VyUG9z
ID4gc3RhcnRQb3MpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoU3RyaW5nKHN0YXJ0UG9zLCBjdXJQ
b3MgLSBzdGFydFBvcykpOworCisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RW50aXRpZXMuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRW50aXRpZXMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDNjMzEwCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJFbnRpdGllcy5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
YkVudGl0aWVzX2gKKyNkZWZpbmUgV2ViRW50aXRpZXNfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgV2ViRW50aXRpZXMgeworcHVibGljOgorICAgIC8vICZhcG9zOywgJnBlcmNudDss
ICZuc3VwOywgJnN1cGw7IGFyZSBub3QgZGVmaW5lZCBieSB0aGUgSFRNTCBzdGFuZGFyZHMuCisg
ICAgLy8gIC0gSUUgZG9lcyBub3Qgc3VwcG9ydCAmYXBvczsgYXMgYW4gSFRNTCBlbnRpdHkgKGJ1
dCBzdXBwb3J0IGl0IGFzIGFuIFhNTAorICAgIC8vICAgIGVudGl0eS4pCisgICAgLy8gIC0gRmly
ZWZveCBzdXBwb3J0cyAmYXBvczsgYXMgYW4gSFRNTCBlbnRpdHkuCisgICAgLy8gIC0gQm90aCBv
ZiBJRSBhbmQgRmlyZWZveCBkb24ndCBzdXBwb3J0ICZwZXJjbnQ7LCAmbnN1cDsgYW5kICZzdXBs
Oy4KKyAgICAvLworICAgIC8vIEEgd2ViIHBhZ2Ugc2F2ZWQgYnkgQ2hyb21pdW0gc2hvdWxkIGJl
IGFibGUgdG8gYmUgcmVhZCBieSBvdGhlciBicm93c2VycworICAgIC8vIHN1Y2ggYXMgSUUgYW5k
IEZpcmVmb3guICBDaHJvbWl1bSBzaG91bGQgcHJvZHVjZSBvbmx5IHRoZSBzdGFuZGFyZCBlbnRp
dHkKKyAgICAvLyByZWZlcmVuY2VzIHdoaWNoIG90aGVyIGJyb3dzZXJzIGNhbiByZWNvZ25pemUu
CisgICAgLy8gU28gaWYgc3RhbmRhcmRfaHRtbF9lbnRpdGllc18gaXMgdHJ1ZSwgd2Ugd2lsbCB1
c2UgYSBudW1lcmljIGNoYXJhY3RlcgorICAgIC8vIHJlZmVyZW5jZSBmb3IgJmFwb3M7LCBhbmQg
ZG9uJ3QgdXNlIGVudGl0eSByZWZlcmVuY2VzIGZvciAmcGVyY250OywgJm5zdXA7CisgICAgLy8g
YW5kICZzdXBsOyBmb3Igc2VyaWFsaXphdGlvbi4KKyAgICAvLworICAgIC8vIElmIHhtbEVudGl0
aWVzIGlzIHRydWUsIFdlYkVudGl0aWVzIHdpbGwgb25seSBjb250YWluIHN0YW5kYXJkIFhNTAor
ICAgIC8vIGVudGl0aWVzLgorICAgIGV4cGxpY2l0IFdlYkVudGl0aWVzKGJvb2wgeG1sRW50aXRp
ZXMpOworCisgICAgLy8gQ2hlY2sgd2hldGhlciBzcGVjaWZpZWQgdW5pY29kZSBoYXMgY29ycmVz
cG9uZGluZyBodG1sIG9yIHhtbCBidWlsdC1pbgorICAgIC8vIGVudGl0eSBuYW1lLiBJZiB5ZXMs
IHJldHVybiB0aGUgZW50aXR5IG5vdGF0aW9uLiBJZiBub3QsIHJldHVybnMgYW4KKyAgICAvLyBl
bXB0eSBzdHJpbmcuIFBhcmFtZXRlciBpc0hUTUwgaW5kaWNhdGVzIGNoZWNrIHRoZSBjb2RlIGlu
IGh0bWwgZW50aXR5CisgICAgLy8gbWFwIG9yIGluIHhtbCBlbnRpdHkgbWFwLgorICAgIFdlYkNv
cmU6OlN0cmluZyBlbnRpdHlOYW1lQnlDb2RlKGludCBjb2RlKSBjb25zdDsKKworICAgIC8vIFJl
dHVybnMgYSBuZXcgc3RyaW5nIHdpdGggY29ycmVzcG9uZGluZyBlbnRpdHkgbmFtZXMgcmVwbGFj
ZWQuCisgICAgV2ViQ29yZTo6U3RyaW5nIGNvbnZlcnRFbnRpdGllc0luU3RyaW5nKGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYpIGNvbnN0OworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50
LCBXZWJDb3JlOjpTdHJpbmc+IEVudGl0aWVzTWFwVHlwZTsKKyAgICAvLyBBbiBpbnRlcm5hbCBv
YmplY3QgdGhhdCBtYXBzIHRoZSBVbmljb2RlIGNoYXJhY3RlciB0byBjb3JyZXNwb25kaW5nCisg
ICAgLy8gZW50aXR5IG5vdGF0aW9uLgorICAgIEVudGl0aWVzTWFwVHlwZSBtX2VudGl0aWVzTWFw
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJGcmFtZUltcGwuY3BwCmluZGV4IDA2ZDM5NGYuLjdjYmY0ZWQgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZyYW1lSW1wbC5jcHAKQEAgLTEyMiw2ICsxMjIsNyBAQAogI2luY2x1ZGUgIlRleHRJdGVy
YXRvci5oIgogI2luY2x1ZGUgIldlYkNvbnNvbGVNZXNzYWdlLmgiCiAjaW5jbHVkZSAiV2ViRGF0
YVNvdXJjZUltcGwuaCIKKyNpbmNsdWRlICJXZWJEb2N1bWVudC5oIgogI2luY2x1ZGUgIldlYkZp
bmRPcHRpb25zLmgiCiAjaW5jbHVkZSAiV2ViRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJXZWJG
cmFtZUNsaWVudC5oIgpAQCAtMzQzLDYgKzM0NCwxMiBAQCBXZWJGcmFtZSogV2ViRnJhbWU6OmZy
YW1lRm9yQ3VycmVudENvbnRleHQoKQogICAgIHJldHVybiBXZWJGcmFtZUltcGw6OmZyb21GcmFt
ZShmcmFtZSk7CiB9CiAKK1dlYkZyYW1lKiBXZWJGcmFtZTo6ZnJvbUZyYW1lT3duZXJFbGVtZW50
KGNvbnN0IFdlYkVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgcmV0dXJuIFdlYkZyYW1lSW1wbDo6
ZnJvbUZyYW1lT3duZXJFbGVtZW50KAorICAgICAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+KGVsZW1l
bnQpLmdldCgpKTsKK30KKwogV2ViU3RyaW5nIFdlYkZyYW1lSW1wbDo6bmFtZSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1fZnJhbWUtPnRyZWUoKS0+bmFtZSgpOwpAQCAtMzkxLDYgKzM5OCwxMSBA
QCBXZWJVUkwgV2ViRnJhbWVJbXBsOjpvcGVuU2VhcmNoRGVzY3JpcHRpb25VUkwoKSBjb25zdAog
ICAgIHJldHVybiBXZWJVUkwoKTsKIH0KIAorV2ViU3RyaW5nIFdlYkZyYW1lSW1wbDo6ZW5jb2Rp
bmcoKSBjb25zdAoreworICAgIHJldHVybiBmcmFtZSgpLT5sb2FkZXIoKS0+ZW5jb2RpbmcoKTsK
K30KKwogV2ViU2l6ZSBXZWJGcmFtZUltcGw6OnNjcm9sbE9mZnNldCgpIGNvbnN0CiB7CiAgICAg
RnJhbWVWaWV3KiB2aWV3ID0gZnJhbWVWaWV3KCk7CkBAIC01MTUsNiArNTI3LDEzIEBAIFdlYkZy
YW1lKiBXZWJGcmFtZUltcGw6OmZpbmRDaGlsZEJ5RXhwcmVzc2lvbihjb25zdCBXZWJTdHJpbmcm
IHhwYXRoKSBjb25zdAogICAgIHJldHVybiBmcm9tRnJhbWUoZnJhbWVFbGVtZW50LT5jb250ZW50
RnJhbWUoKSk7CiB9CiAKK1dlYkRvY3VtZW50IFdlYkZyYW1lSW1wbDo6ZG9jdW1lbnQoKSBjb25z
dAoreworICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAg
cmV0dXJuIFdlYkRvY3VtZW50KCk7CisgICAgcmV0dXJuIFdlYkRvY3VtZW50KG1fZnJhbWUtPmRv
Y3VtZW50KCkpOworfQorCiB2b2lkIFdlYkZyYW1lSW1wbDo6Zm9ybXMoV2ViVmVjdG9yPFdlYkZv
cm1FbGVtZW50PiYgcmVzdWx0cykgY29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUpCkBAIC0xNjE5
LDYgKzE2MzgsMTkgQEAgV2ViRnJhbWVJbXBsKiBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShGcmFt
ZSogZnJhbWUpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lTG9hZGVyQ2xpZW50SW1wbCo+
KGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpLT53ZWJGcmFtZSgpOwogfQogCitXZWJGcmFtZUlt
cGwqIFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lT3duZXJFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQp
Cit7CisgICAgaWYgKCFlbGVtZW50CisgICAgICAgIHx8ICFlbGVtZW50LT5pc0ZyYW1lT3duZXJF
bGVtZW50KCkKKyAgICAgICAgfHwgKCFlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZy
YW1lVGFnKQorICAgICAgICAgICAgJiYgIWVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpm
cmFtZVRhZykpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEhUTUxGcmFtZU93bmVyRWxlbWVu
dCogZnJhbWVFbGVtZW50ID0KKyAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVt
ZW50Kj4oZWxlbWVudCk7CisgICAgcmV0dXJuIGZyb21GcmFtZShmcmFtZUVsZW1lbnQtPmNvbnRl
bnRGcmFtZSgpKTsKK30KKyAgICAKIFdlYlZpZXdJbXBsKiBXZWJGcmFtZUltcGw6OnZpZXdJbXBs
KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUpCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkZyYW1lSW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwu
aAppbmRleCAwNTA2NzViLi42NTllN2Y4IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZyYW1lSW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgK
QEAgLTY1LDYgKzY1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgV2ViVVJMIHVybCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgV2ViVVJMIGZhdkljb25VUkwoKSBjb25zdDsKICAgICB2aXJ0dWFsIFdl
YlVSTCBvcGVuU2VhcmNoRGVzY3JpcHRpb25VUkwoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYlN0
cmluZyBlbmNvZGluZygpIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViU2l6ZSBzY3JvbGxPZmZzZXQo
KSBjb25zdDsKICAgICB2aXJ0dWFsIFdlYlNpemUgY29udGVudHNTaXplKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBpbnQgY29udGVudHNQcmVmZXJyZWRXaWR0aCgpIGNvbnN0OwpAQCAtODIsNiArODMs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJGcmFtZSogdHJhdmVyc2VQcmV2aW91cyhib29s
IHdyYXApIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViRnJhbWUqIGZpbmRDaGlsZEJ5TmFtZShjb25z
dCBXZWJTdHJpbmcmKSBjb25zdDsKICAgICB2aXJ0dWFsIFdlYkZyYW1lKiBmaW5kQ2hpbGRCeUV4
cHJlc3Npb24oY29uc3QgV2ViU3RyaW5nJikgY29uc3Q7CisgICAgdmlydHVhbCBXZWJEb2N1bWVu
dCBkb2N1bWVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBmb3JtcyhXZWJWZWN0b3I8V2Vi
Rm9ybUVsZW1lbnQ+JikgY29uc3Q7CiAgICAgdmlydHVhbCBXZWJTZWN1cml0eU9yaWdpbiBzZWN1
cml0eU9yaWdpbigpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBncmFudFVuaXZlcnNhbEFjY2Vz
cygpOwpAQCAtMTU3LDcgKzE1OSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYlVSTCBjb21w
bGV0ZVVSTChjb25zdCBXZWJTdHJpbmcmIHVybCkgY29uc3Q7CiAgICAgdmlydHVhbCBXZWJTdHJp
bmcgY29udGVudEFzVGV4dChzaXplX3QgbWF4Q2hhcnMpIGNvbnN0OwogICAgIHZpcnR1YWwgV2Vi
U3RyaW5nIGNvbnRlbnRBc01hcmt1cCgpIGNvbnN0OwotCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
V2ViRnJhbWVJbXBsPiBjcmVhdGUoV2ViRnJhbWVDbGllbnQqIGNsaWVudCk7CiAgICAgfldlYkZy
YW1lSW1wbCgpOwogCkBAIC0xNzQsNiArMTc1LDcgQEAgcHVibGljOgogICAgIHZvaWQgY3JlYXRl
RnJhbWVWaWV3KCk7CiAKICAgICBzdGF0aWMgV2ViRnJhbWVJbXBsKiBmcm9tRnJhbWUoV2ViQ29y
ZTo6RnJhbWUqIGZyYW1lKTsKKyAgICBzdGF0aWMgV2ViRnJhbWVJbXBsKiBmcm9tRnJhbWVPd25l
ckVsZW1lbnQoV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCk7CiAKICAgICBXZWJWaWV3SW1wbCog
dmlld0ltcGwoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJO
b2RlLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZS5jcHAKaW5kZXggOTY1YzQxMi4u
NTQ4YTRhNyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOb2RlLmNwcAorKysg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5vZGUuY3BwCkBAIC0zNSw5ICszNSwxNCBAQAogI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgiCiAjaW5j
bHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAibWFya3VwLmgi
CiAKKyNpbmNsdWRlICJXZWJEb2N1bWVudC5oIgogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgor
I2luY2x1ZGUgIldlYk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVk
ZSAiV2ViVmVjdG9yLmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCkBAIC02MSw2
ICs2NiwxMSBAQCB2b2lkIFdlYk5vZGU6OmFzc2lnbihjb25zdCBXZWJOb2RlJiBvdGhlcikKICAg
ICBhc3NpZ24ocCk7CiB9CiAKK1dlYk5vZGU6Ok5vZGVUeXBlIFdlYk5vZGU6Om5vZGVUeXBlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViTm9kZTo6Tm9kZVR5cGU+KG1fcHJp
dmF0ZS0+bm9kZVR5cGUoKSk7Cit9CisKIFdlYk5vZGUgV2ViTm9kZTo6cGFyZW50Tm9kZSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIFBhc3NSZWZQdHI8Tm9kZT4oY29uc3RfY2FzdDxOb2RlKj4obV9w
cml2YXRlLT5wYXJlbnROb2RlKCkpKTsKQEAgLTcxLDYgKzgxLDExIEBAIFdlYlN0cmluZyBXZWJO
b2RlOjpub2RlTmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bm9kZU5hbWUoKTsK
IH0KIAorV2ViU3RyaW5nIFdlYk5vZGU6Om5vZGVWYWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+bm9kZVZhbHVlKCk7Cit9CisKIFdlYk5vZGU6OldlYk5vZGUoY29uc3QgV1RG
OjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok5vZGU+JiBub2RlKQogICAgIDogbV9wcml2YXRlKHN0YXRp
Y19jYXN0PFdlYk5vZGVQcml2YXRlKj4obm9kZS5yZWxlYXNlUmVmKCkpKQogewpAQCAtMTAwLDQg
KzExNSw1NCBAQCBXZWJGcmFtZSogV2ViTm9kZTo6ZnJhbWUoKSBjb25zdAogICAgIHJldHVybiBX
ZWJGcmFtZUltcGw6OmZyb21GcmFtZShtX3ByaXZhdGUtPmRvY3VtZW50KCktPmZyYW1lKCkpOwog
fQogCitXZWJEb2N1bWVudCBXZWJOb2RlOjpkb2N1bWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFdlYkRvY3VtZW50KG1fcHJpdmF0ZS0+ZG9jdW1lbnQoKSk7Cit9CisKK1dlYk5vZGUgV2ViTm9k
ZTo6Zmlyc3RDaGlsZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYk5vZGUobV9wcml2YXRlLT5m
aXJzdENoaWxkKCkpOworfQorCitXZWJOb2RlIFdlYk5vZGU6Omxhc3RDaGlsZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIFdlYk5vZGUobV9wcml2YXRlLT5sYXN0Q2hpbGQoKSk7Cit9CisKK1dlYk5v
ZGUgV2ViTm9kZTo6cHJldmlvdXNTaWJsaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViTm9k
ZShtX3ByaXZhdGUtPnByZXZpb3VzU2libGluZygpKTsKK30KKworV2ViTm9kZSBXZWJOb2RlOjpu
ZXh0U2libGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYk5vZGUobV9wcml2YXRlLT5uZXh0
U2libGluZygpKTsKK30KKworYm9vbCBXZWJOb2RlOjpoYXNDaGlsZE5vZGVzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcml2YXRlLT5oYXNDaGlsZE5vZGVzKCk7Cit9CisKK1dlYk5vZGVMaXN0
IFdlYk5vZGU6OmNoaWxkTm9kZXMoKQoreworICAgIHJldHVybiBXZWJOb2RlTGlzdChtX3ByaXZh
dGUtPmNoaWxkTm9kZXMoKSk7Cit9CisKK1dlYlN0cmluZyBXZWJOb2RlOjpjcmVhdGVNYXJrdXAo
KSBjb25zdAoreworICAgIHJldHVybiBXZWJDb3JlOjpjcmVhdGVNYXJrdXAobV9wcml2YXRlKTsK
K30KKworYm9vbCBXZWJOb2RlOjppc1RleHROb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
cml2YXRlLT5pc1RleHROb2RlKCk7Cit9CisKK2Jvb2wgV2ViTm9kZTo6aXNFbGVtZW50Tm9kZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNFbGVtZW50Tm9kZSgpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Tm9kZUNvbGxlY3Rpb24uY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOb2RlQ29sbGVjdGlv
bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgzMGM3MgotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZUNvbGxlY3Rpb24uY3BwCkBA
IC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViTm9kZUNvbGxl
Y3Rpb24uaCIKKworI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiTm9kZS5o
IgorCisjaW5jbHVkZSAiV2ViTm9kZS5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lk
IFdlYk5vZGVDb2xsZWN0aW9uOjpyZXNldCgpCit7CisgICAgYXNzaWduKDApOworfQorCit2b2lk
IFdlYk5vZGVDb2xsZWN0aW9uOjphc3NpZ24oY29uc3QgV2ViTm9kZUNvbGxlY3Rpb24mIG90aGVy
KQoreworICAgIEhUTUxDb2xsZWN0aW9uKiBwID0gY29uc3RfY2FzdDxIVE1MQ29sbGVjdGlvbio+
KG90aGVyLm1fcHJpdmF0ZSk7CisgICAgaWYgKHApCisgICAgICAgIHAtPnJlZigpOworICAgIGFz
c2lnbihwKTsKK30KKworV2ViTm9kZUNvbGxlY3Rpb246OldlYk5vZGVDb2xsZWN0aW9uKGNvbnN0
IFdURjo6UGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4mIGNvbCkKKyAgICA6IG1fcHJpdmF0ZShz
dGF0aWNfY2FzdDxIVE1MQ29sbGVjdGlvbio+KGNvbC5yZWxlYXNlUmVmKCkpKQoreworfQorCit2
b2lkIFdlYk5vZGVDb2xsZWN0aW9uOjphc3NpZ24oSFRNTENvbGxlY3Rpb24qIHApCit7CisgICAg
Ly8gcCBpcyBhbHJlYWR5IHJlZidkIGZvciB1cyBieSB0aGUgY2FsbGVyCisgICAgaWYgKG1fcHJp
dmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5kZXJlZigpOworICAgIG1fcHJpdmF0ZSA9IHA7Cit9
CisKK3Vuc2lnbmVkIFdlYk5vZGVDb2xsZWN0aW9uOjpsZW5ndGgoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ByaXZhdGUtPmxlbmd0aCgpOworfQorCitXZWJOb2RlIFdlYk5vZGVDb2xsZWN0aW9u
OjpuZXh0SXRlbSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYk5vZGUobV9wcml2YXRlLT5uZXh0
SXRlbSgpKTsKK30KKworV2ViTm9kZSBXZWJOb2RlQ29sbGVjdGlvbjo6Zmlyc3RJdGVtKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gV2ViTm9kZShtX3ByaXZhdGUtPmZpcnN0SXRlbSgpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
Yk5vZGVMaXN0LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZUxpc3QuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOTQwYjIKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5vZGVMaXN0LmNwcApAQCAtMCwwICsxLDgxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYk5vZGVMaXN0LmgiCisKKyNpbmNsdWRlICJO
b2RlTGlzdC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKworI2luY2x1ZGUgIldlYk5vZGUuaCIKKwor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJOb2RlTGlzdDo6cmVzZXQoKQoreworICAg
IGFzc2lnbigwKTsKK30KKwordm9pZCBXZWJOb2RlTGlzdDo6YXNzaWduKGNvbnN0IFdlYk5vZGVM
aXN0JiBvdGhlcikKK3sKKyAgICBOb2RlTGlzdCogcCA9IGNvbnN0X2Nhc3Q8Tm9kZUxpc3QqPihv
dGhlci5tX3ByaXZhdGUpOworICAgIGlmIChwKQorICAgICAgICBwLT5yZWYoKTsKKyAgICBhc3Np
Z24ocCk7Cit9CisKK1dlYk5vZGVMaXN0OjpXZWJOb2RlTGlzdChjb25zdCBXVEY6OlBhc3NSZWZQ
dHI8Tm9kZUxpc3Q+JiBjb2wpCisgICAgOiBtX3ByaXZhdGUoc3RhdGljX2Nhc3Q8Tm9kZUxpc3Qq
Pihjb2wucmVsZWFzZVJlZigpKSkKK3sKK30KKwordm9pZCBXZWJOb2RlTGlzdDo6YXNzaWduKE5v
ZGVMaXN0KiBwKQoreworICAgIC8vIHAgaXMgYWxyZWFkeSByZWYnZCBmb3IgdXMgYnkgdGhlIGNh
bGxlcgorICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAg
ICBtX3ByaXZhdGUgPSBwOworfQorCit1bnNpZ25lZCBXZWJOb2RlTGlzdDo6bGVuZ3RoKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5sZW5ndGgoKTsKK30KKworV2ViTm9kZSBXZWJO
b2RlTGlzdDo6aXRlbShzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYk5vZGUo
bV9wcml2YXRlLT5pdGVtKGluZGV4KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5hYjBiZWU3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplci5oIgorCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisKKyNpbmNsdWRlICJXZWJGcmFtZS5o
IgorI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViUGFn
ZVNlcmlhbGl6ZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2Vi
VmVjdG9yLmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworYm9vbCBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFs
aXplKFdlYkZyYW1lKiBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHJlY3Vyc2l2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQYWdl
U2VyaWFsaXplckNsaWVudCogY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+JiBsaW5rcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbG9jYWxQYXRocywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGxvY2FsRGly
ZWN0b3J5TmFtZSkKK3sKKyAgICBXZWJQYWdlU2VyaWFsaXplckltcGwgc2VyaWFsaXplckltcGwo
CisgICAgICAgIGZyYW1lLCByZWN1cnNpdmUsIGNsaWVudCwgbGlua3MsIGxvY2FsUGF0aHMsIGxv
Y2FsRGlyZWN0b3J5TmFtZSk7CisgICAgcmV0dXJuIHNlcmlhbGl6ZXJJbXBsLnNlcmlhbGl6ZSgp
OworfQorCitXZWJTdHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlTWV0YUNoYXJzZXRE
ZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGNoYXJzZXQpCit7CisgICAgcmV0dXJuIFN0cmlu
Zzo6Zm9ybWF0KCI8TUVUQSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cInRl
eHQvaHRtbDsgY2hhcnNldD0lc1wiPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJz
ZXQudXRmOCgpLmRhdGEoKSk7Cit9CisKK1dlYlN0cmluZyBXZWJQYWdlU2VyaWFsaXplcjo6Z2Vu
ZXJhdGVNYXJrT2ZUaGVXZWJEZWNsYXJhdGlvbihjb25zdCBXZWJVUkwmIHVybCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmb3JtYXQoIlxuPCEtLSBzYXZlZCBmcm9tIHVybD0oJTA0ZCklcyAtLT5c
biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4odXJsLnNwZWMo
KS5sZW5ndGgoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVybC5zcGVjKCkuZGF0YSgp
KTsKK30KKworV2ViU3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZUJhc2VUYWdEZWNs
YXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGJhc2VUYXJnZXQpCit7CisgICAgU3RyaW5nIHRhcmdl
dERlY2xhcmF0aW9uOworICAgIGlmICghYmFzZVRhcmdldC5pc0VtcHR5KCkpCisgICAgICAgIHRh
cmdldERlY2xhcmF0aW9uID0gU3RyaW5nOjpmb3JtYXQoIiB0YXJnZXQ9XCIlc1wiIiwgYmFzZVRh
cmdldC51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIjxCQVNFIGhy
ZWY9XCIuXCIlcz4iLCB0YXJnZXREZWNsYXJhdGlvbi51dGY4KCkuZGF0YSgpKTsKK30KKworfSAg
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQ
YWdlU2VyaWFsaXplckltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFs
aXplckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNTg0MGUK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVy
SW1wbC5jcHAKQEAgLTAsMCArMSw1NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBIb3cgd2UgaGFuZGxlIHRoZSBiYXNlIHRhZyBi
ZXR0ZXIuCisvLyBDdXJyZW50IHN0YXR1czoKKy8vIEF0IG5vdyB0aGUgbm9ybWFsIHdheSB3ZSB1
c2UgdG8gaGFuZGxpbmcgYmFzZSB0YWcgaXMKKy8vIGEpIEZvciB0aG9zZSBsaW5rcyB3aGljaCBo
YXZlIGNvcnJlc3BvbmRpbmcgbG9jYWwgc2F2ZWQgZmlsZXMsIHN1Y2ggYXMKKy8vIHNhdmFibGUg
Q1NTLCBKYXZhU2NyaXB0IGZpbGVzLCB0aGV5IHdpbGwgYmUgd3JpdHRlbiB0byByZWxhdGl2ZSBV
UkxzIHdoaWNoCisvLyBwb2ludCB0byBsb2NhbCBzYXZlZCBmaWxlLiBXaHkgdGhvc2UgbGlua3Mg
Y2FuIG5vdCBiZSByZXNvbHZlZCBhcyBhYnNvbHV0ZQorLy8gZmlsZSBVUkxzLCBiZWNhdXNlIGlm
IHRoZXkgYXJlIHJlc29sdmVkIGFzIGFic29sdXRlIFVSTHMsIGFmdGVyIG1vdmluZyB0aGUKKy8v
IGZpbGUgbG9jYXRpb24gZnJvbSBvbmUgZGlyZWN0b3J5IHRvIGFub3RoZXIgZGlyZWN0b3J5LCB0
aGUgZmlsZSBVUkxzIHdpbGwKKy8vIGJlIGRlYWQgbGlua3MuCisvLyBiKSBGb3IgdGhvc2UgbGlu
a3Mgd2hpY2ggaGF2ZSBub3QgY29ycmVzcG9uZGluZyBsb2NhbCBzYXZlZCBmaWxlcywgc3VjaCBh
cworLy8gbGlua3MgaW4gQSwgQVJFQSB0YWdzLCB0aGV5IHdpbGwgYmUgcmVzb2x2ZWQgYXMgYWJz
b2x1dGUgVVJMcy4KKy8vIGMpIFdlIGNvbW1lbnQgYWxsIGJhc2UgdGFncyB3aGVuIHNlcmlhbHpp
bmcgRE9NIGZvciB0aGUgcGFnZS4KKy8vIEZpcmVGb3ggYWxzbyB1c2VzIGFib3ZlIHdheSB0byBo
YW5kbGUgYmFzZSB0YWcuCisvLworLy8gUHJvYmxlbToKKy8vIFRoaXMgd2F5IGNhbiBub3QgaGFu
ZGxlIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9uOgorLy8gdGhlIGJhc2UgdGFnIGlzIHdyaXR0ZW4g
YnkgSmF2YVNjcmlwdC4KKy8vIEZvciBleGFtcGxlLiBUaGUgcGFnZSAid3d3LnlhaG9vLmNvbSIg
dXNlCisvLyAiZG9jdW1lbnQud3JpdGUoJzxiYXNlIGhyZWY9Imh0dHA6Ly93d3cueWFob28uY29t
LyIuLi4nKTsiIHRvIHNldHVwIGJhc2UgVVJMCisvLyBvZiBwYWdlIHdoZW4gbG9hZGluZyBwYWdl
LiBTbyB3aGVuIHNhdmluZyBwYWdlIGFzIGNvbXBsZXRlZC1IVE1MLCB3ZSBhc3N1bWUKKy8vIHRo
YXQgd2Ugc2F2ZSAid3d3LnlhaG9vLmNvbSIgdG8gImM6XHlhaG9vLmh0bSIuIEFmdGVyIHRoZW4g
d2UgbG9hZCB0aGUgc2F2ZWQKKy8vIGNvbXBsZXRlZC1IVE1MIHBhZ2UsIHRoZW4gdGhlIEphdmFT
Y3JpcHQgd2lsbCBpbnNlcnQgYSBiYXNlIHRhZworLy8gPGJhc2UgaHJlZj0iaHR0cDovL3d3dy55
YWhvby5jb20vIi4uLj4gdG8gRE9NLCBzbyBhbGwgVVJMcyB3aGljaCBwb2ludCB0bworLy8gbG9j
YWwgc2F2ZWQgcmVzb3VyY2UgZmlsZXMgd2lsbCBiZSByZXNvbHZlZCBhcworLy8gImh0dHA6Ly93
d3cueWFob28uY29tL3lhaG9vX2ZpbGVzLy4uLiIsIHdoaWNoIHdpbGwgY2F1c2UgYWxsIHNhdmVk
ICByZXNvdXJjZQorLy8gZmlsZXMgY2FuIG5vdCBiZSBsb2FkZWQgY29ycmVjdGx5LiBBbHNvIHRo
ZSBwYWdlIHdpbGwgYmUgcmVuZGVyZWQgdWdseSBzaW5jZQorLy8gYWxsIHNhdmVkIHN1Yi1yZXNv
dXJjZSBmaWxlcyAoc3VjaCBhcyBDU1MsIEphdmFTY3JpcHQgZmlsZXMpIGFuZCBzdWItZnJhbWUK
Ky8vIGZpbGVzIGNhbiBub3QgYmUgZmV0Y2hlZC4KKy8vIE5vdyBGaXJlRm94LCBJRSBhbmQgV2Vi
S2l0IGJhc2VkIEJyb3dzZXIgYWxsIGhhdmUgdGhpcyBwcm9ibGVtLgorLy8KKy8vIFNvbHV0aW9u
OgorLy8gTXkgc29sdXRpb24gaXMgdGhhdCB3ZSBjb21tZW50IG9sZCBiYXNlIHRhZyBhbmQgd3Jp
dGUgbmV3IGJhc2UgdGFnOgorLy8gPGJhc2UgaHJlZj0iLiIgLi4uPiBhZnRlciB0aGUgcHJldmlv
dXMgY29tbWVudGVkIGJhc2UgdGFnLiBJbiBXZWJLaXQsIGl0CisvLyBhbHdheXMgdXNlcyB0aGUg
bGF0ZXN0ICJocmVmIiBhdHRyaWJ1dGUgb2YgYmFzZSB0YWcgdG8gc2V0IGRvY3VtZW50J3MgYmFz
ZQorLy8gVVJMLiBCYXNlZCBvbiB0aGlzIGJlaGF2aW9yLCB3aGVuIHdlIGVuY291bnRlciBhIGJh
c2UgdGFnLCB3ZSBjb21tZW50IGl0IGFuZAorLy8gd3JpdGUgYSBuZXcgYmFzZSB0YWcgPGJhc2Ug
aHJlZj0iLiI+IGFmdGVyIHRoZSBwcmV2aW91cyBjb21tZW50ZWQgYmFzZSB0YWcuCisvLyBUaGUg
bmV3IGFkZGVkIGJhc2UgdGFnIGNhbiBoZWxwIGVuZ2luZSB0byBsb2NhdGUgY29ycmVjdCBiYXNl
IFVSTCBmb3IKKy8vIGNvcnJlY3RseSBsb2FkaW5nIGxvY2FsIHNhdmVkIHJlc291cmNlIGZpbGVz
LiBBbHNvIEkgdGhpbmsgd2UgbmVlZCB0byBpbmhlcml0CisvLyB0aGUgYmFzZSB0YXJnZXQgdmFs
dWUgZnJvbSBkb2N1bWVudCBvYmplY3Qgd2hlbiBhcHBlbmRpbmcgbmV3IGJhc2UgdGFnLgorLy8g
SWYgdGhlcmUgYXJlIG11bHRpcGxlIGJhc2UgdGFncyBpbiBvcmlnaW5hbCBkb2N1bWVudCwgd2Ug
d2lsbCBjb21tZW50IGFsbCBvbGQKKy8vIGJhc2UgdGFncyBhbmQgYXBwZW5kIG5ldyBiYXNlIHRh
ZyBhZnRlciBlYWNoIG9sZCBiYXNlIHRhZyBiZWNhdXNlIHdlIGRvIG5vdAorLy8ga25vdyB0aG9z
ZSBvbGQgYmFzZSB0YWdzIGFyZSBvcmlnaW5hbCBjb250ZW50IG9yIGFkZGVkIGJ5IEphdmFTY3Jp
cHQuIElmCisvLyB0aGV5IGFyZSBhZGRlZCBieSBKYXZhU2NyaXB0LCBpdCBtZWFucyB3aGVuIGxv
YWRpbmcgc2F2ZWQgcGFnZSwgdGhlIHNjcmlwdChzKQorLy8gd2lsbCBzdGlsbCBpbnNlcnQgYmFz
ZSB0YWcocykgdG8gRE9NLCBzbyB0aGUgbmV3IGFkZGVkIGJhc2UgdGFnKHMpIGNhbgorLy8gb3Zl
cnJpZGUgdGhlIGluY29ycmVjdCBiYXNlIFVSTCBhbmQgbWFrZSBzdXJlIHdlIGFsd2F5IGxvYWQg
Y29ycmVjdCBsb2NhbAorLy8gc2F2ZWQgcmVzb3VyY2UgZmlsZXMuCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplckltcGwuaCIKKworI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCisjaW5jbHVkZSAiRWxlbWVudC5o
IgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiSFRNTEFsbENvbGxlY3Rpb24u
aCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5o
IgorI2luY2x1ZGUgIkhUTUxNZXRhRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgor
I2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJtYXJrdXAuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKKyNpbmNsdWRlICJUZXh0RW5j
b2RpbmcuaCIKKworI2luY2x1ZGUgIkRPTVV0aWxpdGllc1ByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJGcmFtZUltcGwuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlICJXZWJWZWN0b3Iu
aCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisv
LyBNYXhpbXVtIGxlbmd0aCBvZiBkYXRhIGJ1ZmZlciB3aGljaCBpcyB1c2VkIHRvIHRlbXBvcmFy
eSBzYXZlIGdlbmVyYXRlZAorLy8gaHRtbCBjb250ZW50IGRhdGEuCitzdGF0aWMgY29uc3QgdW5z
aWduZWQgZGF0YUJ1ZmZlckNhcGFjaXR5ID0gNjU1MzY7CisKK1dlYlBhZ2VTZXJpYWxpemVySW1w
bDo6U2VyaWFsaXplRG9tUGFyYW06OlNlcmlhbGl6ZURvbVBhcmFtKGNvbnN0IEtVUkwmIGN1cnJl
bnRGcmFtZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRleHRFbmNvZGluZyYgdGV4dEVuY29kaW5nLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9j
dW1lbnQqIGRvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5TmFtZSkKKyAgICA6IGN1cnJl
bnRGcmFtZVVSTChjdXJyZW50RnJhbWVVUkwpCisgICAgLCB0ZXh0RW5jb2RpbmcodGV4dEVuY29k
aW5nKQorICAgICwgZG9jKGRvYykKKyAgICAsIGRpcmVjdG9yeU5hbWUoZGlyZWN0b3J5TmFtZSkK
KyAgICAsIGhhc0RvY3R5cGUoZmFsc2UpCisgICAgLCBoYXNDaGVja2VkTWV0YShmYWxzZSkKKyAg
ICAsIHNraXBNZXRhRWxlbWVudCgwKQorICAgICwgaXNJblNjcmlwdE9yU3R5bGVUYWcoZmFsc2Up
CisgICAgLCBoYXNEb2NEZWNsYXJhdGlvbihmYWxzZSkKK3sKKyAgICAvLyBDYWNoZSB0aGUgdmFs
dWUgc2luY2Ugd2UgY2hlY2sgaXQgbG90cyBvZiB0aW1lcy4KKyAgICBpc0hUTUxEb2N1bWVudCA9
IGRvYy0+aXNIVE1MRG9jdW1lbnQoKTsKK30KKworU3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVySW1w
bDo6cHJlQWN0aW9uQmVmb3JlU2VyaWFsaXplT3BlblRhZygKKyAgICBjb25zdCBFbGVtZW50KiBl
bGVtZW50LCBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0sIGJvb2wqIG5lZWRTa2lwKQoreworICAg
IFN0cmluZ0J1aWxkZXIgcmVzdWx0OworCisgICAgKm5lZWRTa2lwID0gZmFsc2U7CisgICAgaWYg
KHBhcmFtLT5pc0hUTUxEb2N1bWVudCkgeworICAgICAgICAvLyBTa2lwIHRoZSBvcGVuIHRhZyBv
ZiBvcmlnaW5hbCBNRVRBIHRhZyB3aGljaCBkZWNsYXJlIGNoYXJzZXQgc2luY2Ugd2UKKyAgICAg
ICAgLy8gaGF2ZSBvdmVycmlkZWQgdGhlIE1FVEEgd2hpY2ggaGF2ZSBjb3JyZWN0IGNoYXJzZXQg
ZGVjbGFyYXRpb24gYWZ0ZXIKKyAgICAgICAgLy8gc2VyaWFsaXppbmcgb3BlbiB0YWcgb2YgSEVB
RCBlbGVtZW50LgorICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om1l
dGFUYWcpKSB7CisgICAgICAgICAgICBjb25zdCBIVE1MTWV0YUVsZW1lbnQqIG1ldGEgPSBzdGF0
aWNfY2FzdDxjb25zdCBIVE1MTWV0YUVsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIC8v
IENoZWNrIHdoZXRoZXIgdGhlIE1FVEEgdGFnIGhhcyBkZWNsYXJlZCBjaGFyc2V0IG9yIG5vdC4K
KyAgICAgICAgICAgIFN0cmluZyBlcXVpdiA9IG1ldGEtPmh0dHBFcXVpdigpOworICAgICAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAiY29udGVudC10eXBlIikpIHsKKyAgICAg
ICAgICAgICAgICBTdHJpbmcgY29udGVudCA9IG1ldGEtPmNvbnRlbnQoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoY29udGVudC5sZW5ndGgoKSAmJiBjb250ZW50LmNvbnRhaW5zKCJjaGFyc2V0Iiwg
ZmFsc2UpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgTUVUQSB0YWcgZGVjbGFyZWQg
Y2hhcnNldCwgd2UgbmVlZCB0byBza2lwIGl0IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgLy8g
c2VyaWFsaXppbmcgRE9NLgorICAgICAgICAgICAgICAgICAgICBwYXJhbS0+c2tpcE1ldGFFbGVt
ZW50ID0gZWxlbWVudDsKKyAgICAgICAgICAgICAgICAgICAgKm5lZWRTa2lwID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKSB7CisgICAgICAgICAgICAvLyBDaGVj
ayBzb21ldGhpbmcgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIG9wZW4gdGFnIG9mIEhFQUQgZWxlbWVu
dC4KKyAgICAgICAgICAgIC8vIEZpcnN0IHdlIGFkZCBkb2MgdHlwZSBkZWNsYXJhdGlvbiBpZiBv
cmlnaW5hbCBkb2MgaGFzIGl0LgorICAgICAgICAgICAgaWYgKCFwYXJhbS0+aGFzRG9jdHlwZSkg
eworICAgICAgICAgICAgICAgIHBhcmFtLT5oYXNEb2N0eXBlID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKGNyZWF0ZU1hcmt1cChwYXJhbS0+ZG9jLT5kb2N0eXBlKCkpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIE1PVFcgZGVjbGFyYXRpb24gYmVm
b3JlIGh0bWwgdGFnLgorICAgICAgICAgICAgLy8gU2VlIGh0dHA6Ly9tc2RuMi5taWNyb3NvZnQu
Y29tL2VuLXVzL2xpYnJhcnkvbXM1Mzc2MjgoVlMuODUpLmFzcHguCisgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZU1hcmtPZlRoZVdlYkRlY2xhcmF0
aW9uKHBhcmFtLT5jdXJyZW50RnJhbWVVUkwpKTsKKyAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmFzZVRhZykpIHsKKyAgICAgICAgICAgIC8vIENvbW1l
bnQgdGhlIEJBU0UgdGFnIHdoZW4gc2VyaWFsaXppbmcgZG9tLgorICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgiPCEtLSIpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV3Jp
dGUgWE1MIGRlY2xhcmF0aW9uLgorICAgICAgICBpZiAoIXBhcmFtLT5oYXNEb2NEZWNsYXJhdGlv
bikgeworICAgICAgICAgICAgcGFyYW0tPmhhc0RvY0RlY2xhcmF0aW9uID0gdHJ1ZTsKKyAgICAg
ICAgICAgIC8vIEdldCBlbmNvZGluZyBpbmZvLgorICAgICAgICAgICAgU3RyaW5nIHhtbEVuY29k
aW5nID0gcGFyYW0tPmRvYy0+eG1sRW5jb2RpbmcoKTsKKyAgICAgICAgICAgIGlmICh4bWxFbmNv
ZGluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgeG1sRW5jb2RpbmcgPSBwYXJhbS0+ZG9j
LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZW5jb2RpbmcoKTsKKyAgICAgICAgICAgIGlmICh4bWxFbmNv
ZGluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgeG1sRW5jb2RpbmcgPSBVVEY4RW5jb2Rp
bmcoKS5uYW1lKCk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCI8P3htbCB2ZXJzaW9uPVwi
Iik7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHBhcmFtLT5kb2MtPnhtbFZlcnNpb24oKSk7
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJcIiBlbmNvZGluZz1cIiIpOworICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCh4bWxFbmNvZGluZyk7CisgICAgICAgICAgICBpZiAocGFyYW0tPmRv
Yy0+eG1sU3RhbmRhbG9uZSgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIlwiIHN0
YW5kYWxvbmU9XCJ5ZXMiKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIlwiPz5cbiIpOwor
ICAgICAgICB9CisgICAgICAgIC8vIEFkZCBkb2MgdHlwZSBkZWNsYXJhdGlvbiBpZiBvcmlnaW5h
bCBkb2MgaGFzIGl0LgorICAgICAgICBpZiAoIXBhcmFtLT5oYXNEb2N0eXBlKSB7CisgICAgICAg
ICAgICBwYXJhbS0+aGFzRG9jdHlwZSA9IHRydWU7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KGNyZWF0ZU1hcmt1cChwYXJhbS0+ZG9jLT5kb2N0eXBlKCkpKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBXZWJQYWdlU2VyaWFs
aXplckltcGw6OnBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZU9wZW5UYWcoCisgICAgY29uc3QgRWxl
bWVudCogZWxlbWVudCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQoreworICAgIFN0cmluZ0J1
aWxkZXIgcmVzdWx0OworCisgICAgcGFyYW0tPmhhc0FkZGVkQ29udGVudHNCZWZvcmVFbmQgPSBm
YWxzZTsKKyAgICBpZiAoIXBhcmFtLT5pc0hUTUxEb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC50b1N0cmluZygpOworICAgIC8vIENoZWNrIGFmdGVyIHByb2Nlc3NpbmcgdGhlIG9wZW4g
dGFnIG9mIEhFQUQgZWxlbWVudAorICAgIGlmICghcGFyYW0tPmhhc0NoZWNrZWRNZXRhICYmCisg
ICAgICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSkgeworICAgICAg
ICBwYXJhbS0+aGFzQ2hlY2tlZE1ldGEgPSB0cnVlOworICAgICAgICAvLyBDaGVjayBtZXRhIGVs
ZW1lbnQuIFdlYktpdCBvbmx5IHByZS1wYXJzZSB0aGUgZmlyc3QgNTEyIGJ5dGVzCisgICAgICAg
IC8vIG9mIHRoZSBkb2N1bWVudC4gSWYgdGhlIHdob2xlIDxIRUFEPiBpcyBsYXJnZXIgYW5kIG1l
dGEgaXMgdGhlCisgICAgICAgIC8vIGVuZCBvZiBoZWFkIHBhcnQsIHRoZW4gdGhpcyBraW5kIG9m
IHBhZ2VzIGFyZW4ndCBkZWNvZGVkIGNvcnJlY3RseQorICAgICAgICAvLyBiZWNhdXNlIG9mIHRo
aXMgaXNzdWUuIFNvIHdoZW4gd2Ugc2VyaWFsaXplIHRoZSBET00sIHdlIG5lZWQgdG8KKyAgICAg
ICAgLy8gbWFrZSBzdXJlIHRoZSBtZXRhIHdpbGwgaW4gZmlyc3QgY2hpbGQgb2YgaGVhZCB0YWcu
CisgICAgICAgIC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjYyMS4KKyAgICAgICAgLy8gRmlyc3Qgd2UgZ2VuZXJhdGUgbmV3IGNvbnRlbnQgZm9yIHdyaXRp
bmcgY29ycmVjdCBNRVRBIGVsZW1lbnQuCisgICAgICAgIHJlc3VsdC5hcHBlbmQoV2ViUGFnZVNl
cmlhbGl6ZXI6OmdlbmVyYXRlTWV0YUNoYXJzZXREZWNsYXJhdGlvbigKKyAgICAgICAgICAgIFN0
cmluZyhwYXJhbS0+dGV4dEVuY29kaW5nLm5hbWUoKSkpKTsKKworICAgICAgICBwYXJhbS0+aGFz
QWRkZWRDb250ZW50c0JlZm9yZUVuZCA9IHRydWU7CisgICAgICAgIC8vIFdpbGwgc2VhcmNoIGVh
Y2ggTUVUQSB3aGljaCBoYXMgY2hhcnNldCBkZWNsYXJhdGlvbiwgYW5kIHNraXAgdGhlbSBhbGwK
KyAgICAgICAgLy8gaW4gUHJlQWN0aW9uQmVmb3JlU2VyaWFsaXplT3BlblRhZy4KKyAgICB9IGVs
c2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHRUYWcpCisgICAgICAg
ICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKSB7Cisg
ICAgICAgIHBhcmFtLT5pc0luU2NyaXB0T3JTdHlsZVRhZyA9IHRydWU7CisgICAgfQorCisgICAg
cmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworfQorCitTdHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXJJ
bXBsOjpwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVFbmRUYWcoCisgICAgY29uc3QgRWxlbWVudCog
ZWxlbWVudCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLCBib29sKiBuZWVkU2tpcCkKK3sKKyAg
ICBTdHJpbmcgcmVzdWx0OworCisgICAgKm5lZWRTa2lwID0gZmFsc2U7CisgICAgaWYgKCFwYXJh
bS0+aXNIVE1MRG9jdW1lbnQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgLy8gU2tpcCB0
aGUgZW5kIHRhZyBvZiBvcmlnaW5hbCBNRVRBIHRhZyB3aGljaCBkZWNsYXJlIGNoYXJzZXQuCisg
ICAgLy8gTmVlZCBub3QgdG8gY2hlY2sgd2hldGhlciBpdCdzIE1FVEEgdGFnIHNpbmNlIHdlIGd1
YXJhbnRlZQorICAgIC8vIHNraXBNZXRhRWxlbWVudCBpcyBkZWZpbml0ZWx5IE1FVEEgdGFnIGlm
IGl0J3Mgbm90IE5VTEwuCisgICAgaWYgKHBhcmFtLT5za2lwTWV0YUVsZW1lbnQgPT0gZWxlbWVu
dCkKKyAgICAgICAgKm5lZWRTa2lwID0gdHJ1ZTsKKyAgICBlbHNlIGlmIChlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0VGFnKQorICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZVRhZykpIHsKKyAgICAgICAgQVNTRVJUKHBhcmFtLT5p
c0luU2NyaXB0T3JTdHlsZVRhZyk7CisgICAgICAgIHBhcmFtLT5pc0luU2NyaXB0T3JTdHlsZVRh
ZyA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIEFmdGVyIHdl
IGZpbmlzaCBzZXJpYWxpemluZyBlbmQgdGFnIG9mIGEgZWxlbWVudCwgd2UgZ2l2ZSB0aGUgdGFy
Z2V0CisvLyBlbGVtZW50IGEgY2hhbmNlIHRvIGRvIHNvbWUgcG9zdCB3b3JrIHRvIGFkZCBzb21l
IGFkZGl0aW9uYWwgZGF0YS4KK1N0cmluZyBXZWJQYWdlU2VyaWFsaXplckltcGw6OnBvc3RBY3Rp
b25BZnRlclNlcmlhbGl6ZUVuZFRhZygKKyAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBTZXJp
YWxpemVEb21QYXJhbSogcGFyYW0pCit7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisKKyAg
ICBpZiAoIXBhcmFtLT5pc0hUTUxEb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0
cmluZygpOworICAgIC8vIENvbW1lbnQgdGhlIEJBU0UgdGFnIHdoZW4gc2VyaWFsaXppbmcgRE9N
LgorICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmFzZVRhZykpIHsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiLS0+Iik7CisgICAgICAgIC8vIEFwcGVuZCBhIG5ldyBiYXNl
IHRhZyBkZWNsYXJhdGlvbi4KKyAgICAgICAgcmVzdWx0LmFwcGVuZChXZWJQYWdlU2VyaWFsaXpl
cjo6Z2VuZXJhdGVCYXNlVGFnRGVjbGFyYXRpb24oCisgICAgICAgICAgICBwYXJhbS0+ZG9jLT5i
YXNlVGFyZ2V0KCkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9
CisKK3ZvaWQgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpzYXZlSFRNTENvbnRlbnRUb0J1ZmZlcigK
KyAgICBjb25zdCBTdHJpbmcmIHJlc3VsdCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQorewor
ICAgIGlmICghcmVzdWx0Lmxlbmd0aCgpKQorICAgICAgICByZXR1cm47CisgICAgLy8gQ29udmVy
dCB0aGUgdW5pY29kZSBjb250ZW50IHRvIHRhcmdldCBlbmNvZGluZworICAgIENTdHJpbmcgZW5j
b2RpbmdSZXN1bHQgPSBwYXJhbS0+dGV4dEVuY29kaW5nLmVuY29kZSgKKyAgICAgICAgcmVzdWx0
LmNoYXJhY3RlcnMoKSwgcmVzdWx0Lmxlbmd0aCgpLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7
CisKKyAgICAvLyBpZiB0aGUgZGF0YSBidWZmZXIgd2lsbCBiZSBmdWxsLCB0aGVuIHNlbmQgaXQg
b3V0IGZpcnN0LgorICAgIGlmIChlbmNvZGluZ1Jlc3VsdC5sZW5ndGgoKSArIG1fZGF0YUJ1ZmZl
ci5sZW5ndGgoKSA+IGRhdGFCdWZmZXJDYXBhY2l0eSkgeworICAgICAgICAvLyBTZW5kIGRhdGEg
dG8gZGVsZWdhdGUsIHRlbGwgaXQgbm93IHdlIGFyZSBzZXJpYWxpemluZyBjdXJyZW50IGZyYW1l
LgorICAgICAgICBtX2NsaWVudC0+ZGlkU2VyaWFsaXplRGF0YUZvckZyYW1lKHBhcmFtLT5jdXJy
ZW50RnJhbWVVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9kYXRhQnVmZmVyLnRvU3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQ6OkN1cnJlbnRGcmFtZUlzTm90Rmlu
aXNoZWQpOworICAgICAgICBtX2RhdGFCdWZmZXIuY2xlYXIoKTsKKyAgICB9CisKKyAgICAvLyBB
cHBlbmQgcmVzdWx0IHRvIGRhdGEgYnVmZmVyLgorICAgIG1fZGF0YUJ1ZmZlci5hcHBlbmQoU3Ry
aW5nOjpmcm9tVVRGOChlbmNvZGluZ1Jlc3VsdC5kYXRhKCkpKTsKK30KKwordm9pZCBXZWJQYWdl
U2VyaWFsaXplckltcGw6Om9wZW5UYWdUb1N0cmluZyhjb25zdCBFbGVtZW50KiBlbGVtZW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21Q
YXJhbSogcGFyYW0pCit7CisgICAgLy8gRklYTUU6IHVzZSBTdHJpbmdCdWlsZGVyIGluc3RlYWQg
b2YgU3RyaW5nLgorICAgIGJvb2wgbmVlZFNraXA7CisgICAgLy8gRG8gcHJlIGFjdGlvbiBmb3Ig
b3BlbiB0YWcuCisgICAgU3RyaW5nIHJlc3VsdCA9IHByZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZU9w
ZW5UYWcoZWxlbWVudCwgcGFyYW0sICZuZWVkU2tpcCk7CisgICAgaWYgKG5lZWRTa2lwKQorICAg
ICAgICByZXR1cm47CisgICAgLy8gQWRkIG9wZW4gdGFnCisgICAgcmVzdWx0ICs9ICI8IiArIGVs
ZW1lbnQtPm5vZGVOYW1lKCk7CisgICAgLy8gR28gdGhyb3VnaCBhbGwgYXR0cmlidXRlcyBhbmQg
c2VyaWFsaXplIHRoZW0uCisgICAgY29uc3QgTmFtZWROb2RlTWFwICphdHRyTWFwID0gZWxlbWVu
dC0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICBpZiAoYXR0ck1hcCkgeworICAgICAgICB1bnNpZ25l
ZCBudW1BdHRycyA9IGF0dHJNYXAtPmxlbmd0aCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtQXR0cnM7IGkrKykgeworICAgICAgICAgICAgcmVzdWx0ICs9ICIgIjsKKyAg
ICAgICAgICAgIC8vIEFkZCBhdHRyaWJ1dGUgcGFpcgorICAgICAgICAgICAgY29uc3QgQXR0cmli
dXRlICphdHRyaWJ1dGUgPSBhdHRyTWFwLT5hdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICAgICAg
cmVzdWx0ICs9IGF0dHJpYnV0ZS0+bmFtZSgpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICByZXN1
bHQgKz0gIj1cIiI7CisgICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZS0+dmFsdWUoKS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGF0dHJWYWx1ZSA9IGF0dHJpYnV0
ZS0+dmFsdWUoKTsKKworICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2UgbmVlZCB0
byByZXBsYWNlIHNvbWUgcmVzb3VyY2UgbGlua3MKKyAgICAgICAgICAgICAgICAvLyB3aXRoIGxv
Y2FsIHJlc291cmNlIHBhdGhzLgorICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lID0gYXR0cmlidXRlLT5uYW1lKCk7CisgICAgICAgICAgICAgICAgaWYgKGVsZW1l
bnRIYXNMZWdhbExpbmtBdHRyaWJ1dGUoZWxlbWVudCwgYXR0ck5hbWUpKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIEZvciBsaW5rcyBzdGFydCB3aXRoICJqYXZhc2NyaXB0OiIsIHdlIGRvIG5v
dCBjaGFuZ2UgaXQuCisgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyVmFsdWUuc3RhcnRzV2l0
aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQg
Kz0gYXR0clZhbHVlOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEdldCB0aGUgYWJzb2x1dGUgbGluaworICAgICAgICAgICAgICAgICAgICAg
ICAgU3RyaW5nIGNvbXBsZXRlVVJMID0gcGFyYW0tPmRvYy0+Y29tcGxldGVVUkwoYXR0clZhbHVl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSBsb2Nh
bCBmaWxlcyBmb3IgdGhvc2UgbGluay4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2xv
Y2FsTGlua3MuY29udGFpbnMoY29tcGxldGVVUkwpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtX2xvY2FsRGlyZWN0b3J5TmFtZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBtX2xvY2FsRGlyZWN0b3J5TmFtZSArICIvIjsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gbV9sb2NhbExpbmtzLmdldChj
b21wbGV0ZVVSTCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNvbXBs
ZXRlVVJMOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLT5pc0hUTUxEb2N1bWVudCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSBtX2h0bWxFbnRpdGllcy5jb252ZXJ0RW50aXRpZXNJ
blN0cmluZyhhdHRyVmFsdWUpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgKz0gbV94bWxFbnRpdGllcy5jb252ZXJ0RW50aXRpZXNJblN0
cmluZyhhdHRyVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJlc3VsdCArPSAiXCIiOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRG8gcG9z
dCBhY3Rpb24gZm9yIG9wZW4gdGFnLgorICAgIFN0cmluZyBhZGRlZENvbnRlbnRzID0gcG9zdEFj
dGlvbkFmdGVyU2VyaWFsaXplT3BlblRhZyhlbGVtZW50LCBwYXJhbSk7CisgICAgLy8gQ29tcGxl
dGUgdGhlIG9wZW4gdGFnIGZvciBlbGVtZW50IHdoZW4gaXQgaGFzIGNoaWxkL2NoaWxkcmVuLgor
ICAgIGlmIChlbGVtZW50LT5oYXNDaGlsZE5vZGVzKCkgfHwgcGFyYW0tPmhhc0FkZGVkQ29udGVu
dHNCZWZvcmVFbmQpCisgICAgICAgIHJlc3VsdCArPSAiPiI7CisgICAgLy8gQXBwZW5kIHRoZSBh
ZGRlZCBjb250ZW50cyBnZW5lcmF0ZSBpbiAgcG9zdCBhY3Rpb24gb2Ygb3BlbiB0YWcuCisgICAg
cmVzdWx0ICs9IGFkZGVkQ29udGVudHM7CisgICAgLy8gU2F2ZSB0aGUgcmVzdWx0IHRvIGRhdGEg
YnVmZmVyLgorICAgIHNhdmVIVE1MQ29udGVudFRvQnVmZmVyKHJlc3VsdCwgcGFyYW0pOworfQor
CisvLyBTZXJpYWxpemUgZW5kIHRhZyBvZiBhbiBzcGVjaWZpZWQgZWxlbWVudC4KK3ZvaWQgV2Vi
UGFnZVNlcmlhbGl6ZXJJbXBsOjplbmRUYWdUb1N0cmluZyhjb25zdCBFbGVtZW50KiBlbGVtZW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZURv
bVBhcmFtKiBwYXJhbSkKK3sKKyAgICBib29sIG5lZWRTa2lwOworICAgIC8vIERvIHByZSBhY3Rp
b24gZm9yIGVuZCB0YWcuCisgICAgU3RyaW5nIHJlc3VsdCA9IHByZUFjdGlvbkJlZm9yZVNlcmlh
bGl6ZUVuZFRhZyhlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmbmVlZFNraXApOworICAgIGlmIChuZWVkU2tpcCkKKyAgICAgICAg
cmV0dXJuOworICAgIC8vIFdyaXRlIGVuZCB0YWcgd2hlbiBlbGVtZW50IGhhcyBjaGlsZC9jaGls
ZHJlbi4KKyAgICBpZiAoZWxlbWVudC0+aGFzQ2hpbGROb2RlcygpIHx8IHBhcmFtLT5oYXNBZGRl
ZENvbnRlbnRzQmVmb3JlRW5kKSB7CisgICAgICAgIHJlc3VsdCArPSAiPC8iOworICAgICAgICBy
ZXN1bHQgKz0gZWxlbWVudC0+bm9kZU5hbWUoKTsKKyAgICAgICAgcmVzdWx0ICs9ICI+IjsKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdG8gd3JpdGUgZW5k
IHRhZyBmb3IgZW1wdHkgZWxlbWVudC4KKyAgICAgICAgaWYgKHBhcmFtLT5pc0hUTUxEb2N1bWVu
dCkgeworICAgICAgICAgICAgcmVzdWx0ICs9ICI+IjsKKyAgICAgICAgICAgIGNvbnN0IEhUTUxF
bGVtZW50KiBodG1sRWxlbWVudCA9CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBIVE1M
RWxlbWVudCo+KGVsZW1lbnQpOworICAgICAgICAgICAgaWYgKGh0bWxFbGVtZW50LT5lbmRUYWdS
ZXF1aXJlbWVudCgpID09IFRhZ1N0YXR1c1JlcXVpcmVkKSB7CisgICAgICAgICAgICAgICAgLy8g
V2UgbmVlZCB0byB3cml0ZSBlbmQgdGFnIHdoZW4gaXQgaXMgcmVxdWlyZWQuCisgICAgICAgICAg
ICAgICAgcmVzdWx0ICs9ICI8LyI7CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGVsZW1lbnQt
Pm5vZGVOYW1lKCk7CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICI+IjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZvciB4bWwgYmFzZSBkb2N1bWVu
dC4KKyAgICAgICAgICAgIHJlc3VsdCArPSAiIC8+IjsKKyAgICAgICAgfQorICAgIH0KKyAgICAv
LyBEbyBwb3N0IGFjdGlvbiBmb3IgZW5kIHRhZy4KKyAgICByZXN1bHQgKz0gcG9zdEFjdGlvbkFm
dGVyU2VyaWFsaXplRW5kVGFnKGVsZW1lbnQsIHBhcmFtKTsKKyAgICAvLyBTYXZlIHRoZSByZXN1
bHQgdG8gZGF0YSBidWZmZXIuCisgICAgc2F2ZUhUTUxDb250ZW50VG9CdWZmZXIocmVzdWx0LCBw
YXJhbSk7Cit9CisKK3ZvaWQgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpidWlsZENvbnRlbnRGb3JO
b2RlKGNvbnN0IE5vZGUqIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pCit7CisgICAgc3dpdGNoIChu
b2RlLT5ub2RlVHlwZSgpKSB7CisgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6CisgICAgICAg
IC8vIFByb2Nlc3Mgb3BlbiB0YWcgb2YgZWxlbWVudC4KKyAgICAgICAgb3BlblRhZ1RvU3RyaW5n
KHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQqPihub2RlKSwgcGFyYW0pOworICAgICAgICAvLyBX
YWxrIHRocm91Z2ggdGhlIGNoaWxkcmVuIG5vZGVzIGFuZCBwcm9jZXNzIGl0LgorICAgICAgICBm
b3IgKGNvbnN0IE5vZGUgKmNoaWxkID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZCAhPSBOVUxM
OworICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAg
ICBidWlsZENvbnRlbnRGb3JOb2RlKGNoaWxkLCBwYXJhbSk7CisgICAgICAgIC8vIFByb2Nlc3Mg
ZW5kIHRhZyBvZiBlbGVtZW50LgorICAgICAgICBlbmRUYWdUb1N0cmluZyhzdGF0aWNfY2FzdDxj
b25zdCBFbGVtZW50Kj4obm9kZSksIHBhcmFtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBO
b2RlOjpURVhUX05PREU6CisgICAgICAgIHNhdmVIVE1MQ29udGVudFRvQnVmZmVyKGNyZWF0ZU1h
cmt1cChub2RlKSwgcGFyYW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5vZGU6OkFUVFJJ
QlVURV9OT0RFOgorICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfTk9ERToKKyAgICBjYXNlIE5vZGU6
OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6CisgICAgICAgIC8vIFNob3VsZCBub3QgZXhpc3QuCisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICAvLyBEb2N1
bWVudCB0eXBlIG5vZGUgY2FuIGJlIGluIERPTT8KKyAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZ
UEVfTk9ERToKKyAgICAgICAgcGFyYW0tPmhhc0RvY3R5cGUgPSB0cnVlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIC8vIEZvciBvdGhlciB0eXBlIG5vZGUsIGNhbGwgZGVmYXVsdCBhY3Rpb24uCisg
ICAgICAgIHNhdmVIVE1MQ29udGVudFRvQnVmZmVyKGNyZWF0ZU1hcmt1cChub2RlKSwgcGFyYW0p
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK1dlYlBhZ2VTZXJpYWxpemVySW1wbDo6V2Vi
UGFnZVNlcmlhbGl6ZXJJbXBsKFdlYkZyYW1lKiBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlU2VyaWFsaXphdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlBhZ2VTZXJpYWxp
emVyQ2xpZW50KiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViVVJMPiYgbGlua3MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYg
bG9jYWxQYXRocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFdlYlN0cmluZyYgbG9jYWxEaXJlY3RvcnlOYW1lKQorICAgIDogbV9jbGllbnQoY2xp
ZW50KQorICAgICwgbV9yZWN1cnNpdmVTZXJpYWxpemF0aW9uKHJlY3Vyc2l2ZVNlcmlhbGl6YXRp
b24pCisgICAgLCBtX2ZyYW1lc0NvbGxlY3RlZChmYWxzZSkKKyAgICAsIG1fbG9jYWxEaXJlY3Rv
cnlOYW1lKGxvY2FsRGlyZWN0b3J5TmFtZSkKKyAgICAsIG1faHRtbEVudGl0aWVzKGZhbHNlKQor
ICAgICwgbV94bWxFbnRpdGllcyh0cnVlKQoreworICAgIC8vIE11c3Qgc3BlY2lmeSBhdmFpbGFi
bGUgd2ViZnJhbWUuCisgICAgQVNTRVJUKGZyYW1lKTsKKyAgICBtX3NwZWNpZmllZFdlYkZyYW1l
SW1wbCA9IHN0YXRpY19jYXN0PFdlYkZyYW1lSW1wbCo+KGZyYW1lKTsKKyAgICAvLyBNYWtlIHN1
cmUgd2UgaGF2ZSBub3QtTlVMTCBkZWxlZ2F0ZS4KKyAgICBBU1NFUlQoY2xpZW50KTsKKyAgICAv
LyBCdWlsZCBsb2NhbCByZXNvdXJjZXMgbWFwLgorICAgIEFTU0VSVChsaW5rcy5zaXplKCkgPT0g
bG9jYWxQYXRocy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlua3Muc2l6
ZSgpOyBpKyspIHsKKyAgICAgICAgS1VSTCB1cmwgPSBsaW5rc1tpXTsKKyAgICAgICAgQVNTRVJU
KCFtX2xvY2FsTGlua3MuY29udGFpbnModXJsLnN0cmluZygpKSk7CisgICAgICAgIG1fbG9jYWxM
aW5rcy5zZXQodXJsLnN0cmluZygpLCBsb2NhbFBhdGhzW2ldKTsKKyAgICB9CisKKyAgICBBU1NF
UlQoIW1fZGF0YUJ1ZmZlci5sZW5ndGgoKSk7Cit9CisKK3ZvaWQgV2ViUGFnZVNlcmlhbGl6ZXJJ
bXBsOjpjb2xsZWN0VGFyZ2V0RnJhbWVzKCkKK3sKKyAgICBBU1NFUlQoIW1fZnJhbWVzQ29sbGVj
dGVkKTsKKyAgICBtX2ZyYW1lc0NvbGxlY3RlZCA9IHRydWU7CisKKyAgICAvLyBGaXJzdCwgcHJv
Y2VzcyBtYWluIGZyYW1lLgorICAgIG1fZnJhbWVzLmFwcGVuZChtX3NwZWNpZmllZFdlYkZyYW1l
SW1wbCk7CisgICAgLy8gUmV0dXJuIG5vdyBpZiB1c2VyIG9ubHkgbmVlZHMgdG8gc2VyaWFsaXpl
IHNwZWNpZmllZCBmcmFtZSwgbm90IGluY2x1ZGluZworICAgIC8vIGFsbCBzdWItZnJhbWVzLgor
ICAgIGlmICghbV9yZWN1cnNpdmVTZXJpYWxpemF0aW9uKQorICAgICAgICByZXR1cm47CisgICAg
Ly8gQ29sbGVjdCBhbGwgZnJhbWVzIGluc2lkZSB0aGUgc3BlY2lmaWVkIGZyYW1lLgorICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8aW50PihtX2ZyYW1lcy5zaXplKCkpOyArK2kp
IHsKKyAgICAgICAgV2ViRnJhbWVJbXBsKiBjdXJyZW50RnJhbWUgPSBtX2ZyYW1lc1tpXTsKKyAg
ICAgICAgLy8gR2V0IGN1cnJlbnQgdXNpbmcgZG9jdW1lbnQuCisgICAgICAgIERvY3VtZW50KiBj
dXJyZW50RG9jID0gY3VycmVudEZyYW1lLT5mcmFtZSgpLT5kb2N1bWVudCgpOworICAgICAgICAv
LyBHbyB0aHJvdWdoIHN1Yi1mcmFtZXMuCisgICAgICAgIFJlZlB0cjxIVE1MQWxsQ29sbGVjdGlv
bj4gYWxsID0gY3VycmVudERvYy0+YWxsKCk7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IGFs
bC0+Zmlyc3RJdGVtKCk7IG5vZGUgIT0gTlVMTDsgbm9kZSA9IGFsbC0+bmV4dEl0ZW0oKSkgewor
ICAgICAgICAgICAgaWYgKCFub2RlLT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG5vZGUpOworICAgICAgICAgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9CisgICAg
ICAgICAgICAgICAgV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWVPd25lckVsZW1lbnQoZWxlbWVudCk7
CisgICAgICAgICAgICBpZiAod2ViRnJhbWUpCisgICAgICAgICAgICAgICAgbV9mcmFtZXMuYXBw
ZW5kKHdlYkZyYW1lKTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBXZWJQYWdlU2VyaWFs
aXplckltcGw6OnNlcmlhbGl6ZSgpCit7CisgICAgLy8gQ29sbGVjdCB0YXJnZXQgZnJhbWVzLgor
ICAgIGlmICghbV9mcmFtZXNDb2xsZWN0ZWQpCisgICAgICAgIGNvbGxlY3RUYXJnZXRGcmFtZXMo
KTsKKyAgICBib29sIGRpZFNlcmlhbGl6YXRpb24gPSBmYWxzZTsKKyAgICAvLyBHZXQgS1VSTCBm
b3IgbWFpbiBmcmFtZS4KKyAgICBLVVJMIG1haW5QYWdlVVJMID0gbV9zcGVjaWZpZWRXZWJGcmFt
ZUltcGwtPmZyYW1lKCktPmxvYWRlcigpLT51cmwoKTsKKworICAgIC8vIEdvIHRocm91Z2ggYWxs
IGZyYW1lcyBmb3Igc2VyaWFsaXppbmcgRE9NIGZvciB3aG9sZSBwYWdlLCBpbmNsdWRlCisgICAg
Ly8gc3ViLWZyYW1lcy4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PGludD4o
bV9mcmFtZXMuc2l6ZSgpKTsgKytpKSB7CisgICAgICAgIC8vIEdldCBjdXJyZW50IHNlcmlhbGl6
aW5nIGZyYW1lLgorICAgICAgICBXZWJGcmFtZUltcGwqIGN1cnJlbnRGcmFtZSA9IG1fZnJhbWVz
W2ldOworICAgICAgICAvLyBHZXQgY3VycmVudCB1c2luZyBkb2N1bWVudC4KKyAgICAgICAgRG9j
dW1lbnQqIGN1cnJlbnREb2MgPSBjdXJyZW50RnJhbWUtPmZyYW1lKCktPmRvY3VtZW50KCk7Cisg
ICAgICAgIC8vIEdldCBjdXJyZW50IGZyYW1lJ3MgVVJMLgorICAgICAgICBjb25zdCBLVVJMJiBj
dXJyZW50RnJhbWVVUkwgPSBjdXJyZW50RnJhbWUtPmZyYW1lKCktPmxvYWRlcigpLT51cmwoKTsK
KworICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHdlIGhhdmUgZG9uZSB0aGlzIGRvY3VtZW50Lgor
ICAgICAgICBpZiAobV9sb2NhbExpbmtzLmNvbnRhaW5zKGN1cnJlbnRGcmFtZVVSTC5zdHJpbmco
KSkpIHsKKyAgICAgICAgICAgIC8vIEEgbmV3IGRvY3VtZW50LCB3ZSB3aWxsIHNlcmlhbGl6ZSBp
dC4KKyAgICAgICAgICAgIGRpZFNlcmlhbGl6YXRpb24gPSB0cnVlOworICAgICAgICAgICAgLy8g
R2V0IHRhcmdldCBlbmNvZGluZyBmb3IgY3VycmVudCBkb2N1bWVudC4KKyAgICAgICAgICAgIFN0
cmluZyBlbmNvZGluZyA9IGN1cnJlbnRGcmFtZS0+ZnJhbWUoKS0+bG9hZGVyKCktPmVuY29kaW5n
KCk7CisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIHRleHQgZW5jb2Rpbmcgb2JqZWN0IHdpdGgg
dGFyZ2V0IGVuY29kaW5nLgorICAgICAgICAgICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGluZyhl
bmNvZGluZyk7CisgICAgICAgICAgICAvLyBDb25zdHJ1Y3Qgc2VyaWFsaXplIHBhcmFtZXRlciBm
b3IgbGF0ZSBwcm9jZXNzaW5nIGRvY3VtZW50LgorICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFy
YW0gcGFyYW0oY3VycmVudEZyYW1lVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW5jb2RpbmcubGVuZ3RoKCkgPyB0ZXh0RW5jb2RpbmcgOiBVVEY4RW5jb2RpbmcoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnREb2MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWVVUkwgPT0gbWFpblBhZ2VV
UkwgPyBtX2xvY2FsRGlyZWN0b3J5TmFtZSA6ICIiKTsKKworICAgICAgICAgICAgLy8gUHJvY2Vz
cyBjdXJyZW50IGRvY3VtZW50LgorICAgICAgICAgICAgRWxlbWVudCogcm9vdEVsZW1lbnQgPSBj
dXJyZW50RG9jLT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmIChyb290RWxlbWVu
dCkKKyAgICAgICAgICAgICAgICBidWlsZENvbnRlbnRGb3JOb2RlKHJvb3RFbGVtZW50LCAmcGFy
YW0pOworCisgICAgICAgICAgICAvLyBTaW5rIHRoZSByZW1haW5kZXIgZGF0YSBhbmQgZmluaXNo
IHNlcmlhbGl6aW5nIGN1cnJlbnQgZnJhbWUuCisgICAgICAgICAgICBtX2NsaWVudC0+ZGlkU2Vy
aWFsaXplRGF0YUZvckZyYW1lKGN1cnJlbnRGcmFtZVVSTCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhQnVmZmVyLnRvU3RyaW5nKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlBhZ2VTZXJpYWxp
emVyQ2xpZW50OjpDdXJyZW50RnJhbWVJc0ZpbmlzaGVkKTsKKyAgICAgICAgICAgIC8vIENsZWFy
IHRoZSBidWZmZXIuCisgICAgICAgICAgICBtX2RhdGFCdWZmZXIuY2xlYXIoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIFdlIGhhdmUgZG9uZSBjYWxsIGZyYW1lcywgc28gd2Ugc2VuZCBt
ZXNzYWdlIHRvIGVtYmVkZGVyIHRvIHRlbGwgaXQgdGhhdAorICAgIC8vIGZyYW1lcyBhcmUgZmlu
aXNoZWQgc2VyaWFsaXppbmcuCisgICAgQVNTRVJUKCFtX2RhdGFCdWZmZXIubGVuZ3RoKCkpOwor
ICAgIG1fY2xpZW50LT5kaWRTZXJpYWxpemVEYXRhRm9yRnJhbWUoS1VSTCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhQnVmZmVyLnRvU3RyaW5nKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQYWdlU2VyaWFsaXplckNs
aWVudDo6QWxsRnJhbWVzQXJlRmluaXNoZWQpOworICAgIHJldHVybiBkaWRTZXJpYWxpemF0aW9u
OworfQorCit9ICAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQ
YWdlU2VyaWFsaXplckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5i
Yjg2MDI3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2Vy
aWFsaXplckltcGwuaApAQCAtMCwwICsxLDE5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViUGFnZVNlcmlhbGl6ZXJJ
bXBsX2gKKyNkZWZpbmUgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsX2gKKworI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU3RyaW5nQnVpbGRlci5oIgorI2luY2x1ZGUgIlN0cmlu
Z0hhc2guaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworI2luY2x1ZGUgIldlYkVudGl0aWVzLmgiCisjaW5jbHVkZSAiV2ViUGFnZVNlcmlhbGl6
ZXIuaCIKKyNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplckNsaWVudC5oIgorI2luY2x1ZGUgIldl
YlN0cmluZy5oIgorI2luY2x1ZGUgIldlYlVSTC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBEb2N1bWVudDsKK2NsYXNzIEVsZW1lbnQ7CitjbGFzcyBOb2RlOworY2xhc3MgU3RyaW5n
OworY2xhc3MgVGV4dEVuY29kaW5nOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdl
YkZyYW1lSW1wbDsKKworLy8gR2V0IGh0bWwgZGF0YSBieSBzZXJpYWxpemluZyBhbGwgZnJhbWVz
IG9mIGN1cnJlbnQgcGFnZSB3aXRoIGxpc3RzCisvLyB3aGljaCBjb250YWluIGFsbCByZXNvdXJj
ZSBsaW5rcyB0aGF0IGhhdmUgbG9jYWwgY29weS4KKy8vIGNvbnRhaW4gYWxsIHNhdmVkIGF1eGls
aWFyeSBmaWxlcyBpbmNsdWRlZCBhbGwgc3ViIGZyYW1lcyBhbmQgcmVzb3VyY2VzLgorLy8gVGhp
cyBmdW5jdGlvbiB3aWxsIGZpbmQgb3V0IGFsbCBmcmFtZXMgYW5kIHNlcmlhbGl6ZSB0aGVtIHRv
IEhUTUwgZGF0YS4KKy8vIFdlIGhhdmUgYSBkYXRhIGJ1ZmZlciB0byB0ZW1wb3Jhcnkgc2F2aW5n
IGdlbmVyYXRlZCBodG1sIGRhdGEuIFdlIHdpbGwKKy8vIHNlcXVlbnRpYWxseSBjYWxsIFdlYlZp
ZXdEZWxlZ2F0ZTo6U2VuZFNlcmlhbGl6ZWRIdG1sRGF0YSBvbmNlIHRoZSBkYXRhCisvLyBidWZm
ZXIgaXMgZnVsbC4gU2VlIGNvbW1lbnRzIG9mIFdlYlZpZXdEZWxlZ2F0ZTo6U2VuZFNlcmlhbGl6
ZWRIdG1sRGF0YQorLy8gZm9yIGdldHRpbmcgbW9yZSBpbmZvcm1hdGlvbi4KK2NsYXNzIFdlYlBh
Z2VTZXJpYWxpemVySW1wbCB7CitwdWJsaWM6CisgICAgLy8gRG8gc2VyaWFsaXphdGlvbiBhY3Rp
b24uIFJldHVybiBmYWxzZSBtZWFucyBubyBhdmFpbGFibGUgZnJhbWUgaGFzIGJlZW4KKyAgICAv
LyBzZXJpYWxpemVkLCBvdGhlcndpc2UgcmV0dXJuIHRydWUuCisgICAgYm9vbCBzZXJpYWxpemUo
KTsKKworICAgIC8vIFRoZSBwYXJhbWV0ZXIgc3BlY2lmaWVzIHdoaWNoIGZyYW1lIG5lZWQgdG8g
YmUgc2VyaWFsaXplZC4KKyAgICAvLyBUaGUgcGFyYW1ldGVyIHJlY3Vyc2l2ZV9zZXJpYWxpemF0
aW9uIHNwZWNpZmllcyB3aGV0aGVyIHdlIG5lZWQgdG8KKyAgICAvLyBzZXJpYWxpemUgYWxsIHN1
YiBmcmFtZXMgb2YgdGhlIHNwZWNpZmllZCBmcmFtZSBvciBub3QuCisgICAgLy8gVGhlIHBhcmFt
ZXRlciBkZWxlZ2F0ZSBzcGVjaWZpZXMgdGhlIHBvaW50ZXIgb2YgaW50ZXJmYWNlCisgICAgLy8g
RG9tU2VyaWFsaXplckRlbGVnYXRlIHByb3ZpZGUgc2luayBpbnRlcmZhY2Ugd2hpY2ggY2FuIHJl
Y2VpdmUgdGhlCisgICAgLy8gaW5kaXZpZHVhbCBjaHVua3Mgb2YgZGF0YSB0byBiZSBzYXZlZC4K
KyAgICAvLyBUaGUgcGFyYW1ldGVyIGxpbmtzIGNvbnRhaW4gb3JpZ2luYWwgVVJMcyBvZiBhbGwg
c2F2ZWQgbGlua3MuCisgICAgLy8gVGhlIHBhcmFtZXRlciBsb2NhbF9wYXRocyBjb250YWluIGNv
cnJlc3BvbmRpbmcgbG9jYWwgZmlsZSBwYXRocyBvZiBhbGwKKyAgICAvLyBzYXZlZCBsaW5rcywg
d2hpY2ggbWF0Y2hlZCB3aXRoIHZlY3RvcjpsaW5rcyBvbmUgYnkgb25lLgorICAgIC8vIFRoZSBw
YXJhbWV0ZXIgbG9jYWxfZGlyZWN0b3J5X25hbWUgaXMgcmVsYXRpdmUgcGF0aCBvZiBkaXJlY3Rv
cnkgd2hpY2gKKyAgICAvLyBjb250YWluIGFsbCBzYXZlZCBhdXhpbGlhcnkgZmlsZXMgaW5jbHVk
ZWQgYWxsIHN1YiBmcmFtZXMgYW5kIHJlc291cmNlcy4KKyAgICBXZWJQYWdlU2VyaWFsaXplcklt
cGwoV2ViRnJhbWUqIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlY3Vy
c2l2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQq
IGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlVS
TD4mIGxpbmtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2Vi
U3RyaW5nPiYgbG9jYWxQYXRocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2Vi
U3RyaW5nJiBsb2NhbERpcmVjdG9yeU5hbWUpOworCitwcml2YXRlOgorICAgIC8vIFNwZWNpZmll
ZCBmcmFtZSB3aGljaCBuZWVkIHRvIGJlIHNlcmlhbGl6ZWQ7CisgICAgV2ViRnJhbWVJbXBsKiBt
X3NwZWNpZmllZFdlYkZyYW1lSW1wbDsKKyAgICAvLyBQb2ludGVyIG9mIFdlYlBhZ2VTZXJpYWxp
emVyQ2xpZW50CisgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqIG1fY2xpZW50OworICAgIC8v
IFRoaXMgaGFzaCBtYXAgaXMgdXNlZCB0byBtYXAgcmVzb3VyY2UgVVJMIG9mIG9yaWdpbmFsIGxp
bmsgdG8gaXRzIGxvY2FsCisgICAgLy8gZmlsZSBwYXRoLgorICAgIHR5cGVkZWYgSGFzaE1hcDxX
ZWJDb3JlOjpTdHJpbmcsIFdlYkNvcmU6OlN0cmluZz4gTGlua0xvY2FsUGF0aE1hcDsKKyAgICAv
LyBsb2NhbF9saW5rc18gaW5jbHVkZSBhbGwgcGFpciBvZiBsb2NhbCByZXNvdXJjZSBwYXRoIGFu
ZCBjb3JyZXNwb25kaW5nCisgICAgLy8gb3JpZ2luYWwgbGluay4KKyAgICBMaW5rTG9jYWxQYXRo
TWFwIG1fbG9jYWxMaW5rczsKKyAgICAvLyBEYXRhIGJ1ZmZlciBmb3Igc2F2aW5nIHJlc3VsdCBv
ZiBzZXJpYWxpemVkIERPTSBkYXRhLgorICAgIFdlYkNvcmU6OlN0cmluZ0J1aWxkZXIgbV9kYXRh
QnVmZmVyOworICAgIC8vIFBhc3NpbmcgdHJ1ZSB0byByZWN1cnNpdmVfc2VyaWFsaXphdGlvbl8g
aW5kaWNhdGVzIHdlIHdpbGwgc2VyaWFsaXplIG5vdAorICAgIC8vIG9ubHkgdGhlIHNwZWNpZmll
ZCBmcmFtZSBidXQgYWxzbyBhbGwgc3ViLWZyYW1lcyBpbiB0aGUgc3BlY2lmaWMgZnJhbWUuCisg
ICAgLy8gT3RoZXJ3aXNlIHdlIG9ubHkgc2VyaWFsaXplIHRoZSBzcGVjaWZpZWQgZnJhbWUgZXhj
bHVkZWQgYWxsIHN1Yi1mcmFtZXMuCisgICAgYm9vbCBtX3JlY3Vyc2l2ZVNlcmlhbGl6YXRpb247
CisgICAgLy8gRmxhZyBpbmRpY2F0ZXMgd2hldGhlciB3ZSBoYXZlIGNvbGxlY3RlZCBhbGwgZnJh
bWVzIHdoaWNoIG5lZWQgdG8gYmUKKyAgICAvLyBzZXJpYWxpemVkIG9yIG5vdDsKKyAgICBib29s
IG1fZnJhbWVzQ29sbGVjdGVkOworICAgIC8vIExvY2FsIGRpcmVjdG9yeSBuYW1lIG9mIGFsbCBs
b2NhbCByZXNvdXJjZSBmaWxlcy4KKyAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1fbG9jYWxE
aXJlY3RvcnlOYW1lOworICAgIC8vIFZlY3RvciBmb3Igc2F2aW5nIGFsbCBmcmFtZXMgd2hpY2gg
bmVlZCB0byBiZSBzZXJpYWxpemVkLgorICAgIFZlY3RvcjxXZWJGcmFtZUltcGwqPiBtX2ZyYW1l
czsKKworICAgIC8vIFdlYiBlbnRpdGllcyBjb252ZXJzaW9uIG1hcHMuCisgICAgV2ViRW50aXRp
ZXMgbV9odG1sRW50aXRpZXM7CisgICAgV2ViRW50aXRpZXMgbV94bWxFbnRpdGllczsKKworICAg
IHN0cnVjdCBTZXJpYWxpemVEb21QYXJhbSB7CisgICAgICAgIC8vIEZyYW1lIFVSTCBvZiBjdXJy
ZW50IHByb2Nlc3NpbmcgZG9jdW1lbnQgcHJlc2VudGVkIGJ5IEdVUkwKKyAgICAgICAgY29uc3Qg
V2ViQ29yZTo6S1VSTCYgY3VycmVudEZyYW1lVVJMOworICAgICAgICAvLyBDdXJyZW50IHVzaW5n
IHRleHQgZW5jb2Rpbmcgb2JqZWN0LgorICAgICAgICBjb25zdCBXZWJDb3JlOjpUZXh0RW5jb2Rp
bmcmIHRleHRFbmNvZGluZzsKKworICAgICAgICAvLyBEb2N1bWVudCBvYmplY3Qgb2YgY3VycmVu
dCBmcmFtZS4KKyAgICAgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGRvYzsKKyAgICAgICAgLy8gTG9j
YWwgZGlyZWN0b3J5IG5hbWUgb2YgYWxsIGxvY2FsIHJlc291cmNlIGZpbGVzLgorICAgICAgICBj
b25zdCBXZWJDb3JlOjpTdHJpbmcmIGRpcmVjdG9yeU5hbWU7CisKKyAgICAgICAgLy8gRmxhZyBp
bmRpY2F0ZXMgY3VycmVudCBkb2MgaXMgaHRtbCBkb2N1bWVudCBvciBub3QuIEl0J3MgYSBjYWNo
ZSB2YWx1ZQorICAgICAgICAvLyBvZiBEb2N1bWVudC5pc0hUTUxEb2N1bWVudCgpLgorICAgICAg
ICBib29sIGlzSFRNTERvY3VtZW50OworICAgICAgICAvLyBGbGFnIHdoaWNoIGluZGljYXRlIHdo
ZXRoZXIgd2UgaGF2ZSBtZXQgZG9jdW1lbnQgdHlwZSBkZWNsYXJhdGlvbi4KKyAgICAgICAgYm9v
bCBoYXNEb2N0eXBlOworICAgICAgICAvLyBGbGFnIHdoaWNoIGluZGljYXRlIHdoZXRoZXIgd2ls
bCBwcm9jZXNzIG1ldGEgaXNzdWUuCisgICAgICAgIGJvb2wgaGFzQ2hlY2tlZE1ldGE7CisgICAg
ICAgIC8vIFRoaXMgbWV0YSBlbGVtZW50IG5lZWQgdG8gYmUgc2tpcHBlZCB3aGVuIHNlcmlhbGl6
aW5nIERPTS4KKyAgICAgICAgY29uc3QgV2ViQ29yZTo6RWxlbWVudCogc2tpcE1ldGFFbGVtZW50
OworICAgICAgICAvLyBGbGFnIGluZGljYXRlcyB3ZSBhcmUgaW4gc2NyaXB0IG9yIHN0eWxlIHRh
Zy4KKyAgICAgICAgYm9vbCBpc0luU2NyaXB0T3JTdHlsZVRhZzsKKyAgICAgICAgLy8gRmxhZyBp
bmRpY2F0ZXMgd2hldGhlciB3ZSBoYXZlIHdyaXR0ZW4geG1sIGRvY3VtZW50IGRlY2xhcmF0aW9u
LgorICAgICAgICAvLyBJdCBpcyBvbmx5IHVzZWQgaW4geG1sIGRvY3VtZW50CisgICAgICAgIGJv
b2wgaGFzRG9jRGVjbGFyYXRpb247CisgICAgICAgIC8vIEZsYWcgaW5kaWNhdGVzIHdoZXRoZXIg
d2UgaGF2ZSBhZGRlZCBhZGRpdGlvbmFsIGNvbnRlbnRzIGJlZm9yZSBlbmQgdGFnLgorICAgICAg
ICAvLyBUaGlzIGZsYWcgd2lsbCBiZSByZS1hc3NpZ25lZCBpbiBlYWNoIGNhbGwgb2YgZnVuY3Rp
b24KKyAgICAgICAgLy8gUG9zdEFjdGlvbkFmdGVyU2VyaWFsaXplT3BlblRhZyBhbmQgaXQgY291
bGQgYmUgY2hhbmdlZCBpbiBmdW5jdGlvbgorICAgICAgICAvLyBQcmVBY3Rpb25CZWZvcmVTZXJp
YWxpemVFbmRUYWcgaWYgdGhlIGZ1bmN0aW9uIGFkZHMgbmV3IGNvbnRlbnRzIGludG8KKyAgICAg
ICAgLy8gc2VyaWFsaXphdGlvbiBzdHJlYW0uCisgICAgICAgIGJvb2wgaGFzQWRkZWRDb250ZW50
c0JlZm9yZUVuZDsKKworICAgICAgICAvLyBDb25zdHJ1Y3Rvci4KKyAgICAgICAgU2VyaWFsaXpl
RG9tUGFyYW0oY29uc3QgV2ViQ29yZTo6S1VSTCYgY3VycmVudEZyYW1lVVJMLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpUZXh0RW5jb2RpbmcmIHRleHRFbmNvZGlu
ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGRvYywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBkaXJlY3RvcnlO
YW1lKTsKKyAgICB9OworCisgICAgLy8gQ29sbGVjdCBhbGwgdGFyZ2V0IGZyYW1lcyB3aGljaCBu
ZWVkIHRvIGJlIHNlcmlhbGl6ZWQuCisgICAgdm9pZCBjb2xsZWN0VGFyZ2V0RnJhbWVzKCk7Cisg
ICAgLy8gQmVmb3JlIHdlIGJlZ2luIHNlcmlhbGl6aW5nIG9wZW4gdGFnIG9mIGEgZWxlbWVudCwg
d2UgZ2l2ZSB0aGUgdGFyZ2V0CisgICAgLy8gZWxlbWVudCBhIGNoYW5jZSB0byBkbyBzb21lIHdv
cmsgcHJpb3IgdG8gYWRkIHNvbWUgYWRkaXRpb25hbCBkYXRhLgorICAgIFdlYkNvcmU6OlN0cmlu
ZyBwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVPcGVuVGFnKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQq
IGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIG5lZWRTa2lwKTsKKyAgICAvLyBBZnRl
ciB3ZSBmaW5pc2ggc2VyaWFsaXppbmcgb3BlbiB0YWcgb2YgYSBlbGVtZW50LCB3ZSBnaXZlIHRo
ZSB0YXJnZXQKKyAgICAvLyBlbGVtZW50IGEgY2hhbmNlIHRvIGRvIHNvbWUgcG9zdCB3b3JrIHRv
IGFkZCBzb21lIGFkZGl0aW9uYWwgZGF0YS4KKyAgICBXZWJDb3JlOjpTdHJpbmcgcG9zdEFjdGlv
bkFmdGVyU2VyaWFsaXplT3BlblRhZyhjb25zdCBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlh
bGl6ZURvbVBhcmFtKiBwYXJhbSk7CisgICAgLy8gQmVmb3JlIHdlIGJlZ2luIHNlcmlhbGl6aW5n
IGVuZCB0YWcgb2YgYSBlbGVtZW50LCB3ZSBnaXZlIHRoZSB0YXJnZXQKKyAgICAvLyBlbGVtZW50
IGEgY2hhbmNlIHRvIGRvIHNvbWUgd29yayBwcmlvciB0byBhZGQgc29tZSBhZGRpdGlvbmFsIGRh
dGEuCisgICAgV2ViQ29yZTo6U3RyaW5nIHByZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZUVuZFRhZyhj
b25zdCBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogbmVl
ZFNraXApOworICAgIC8vIEFmdGVyIHdlIGZpbmlzaCBzZXJpYWxpemluZyBlbmQgdGFnIG9mIGEg
ZWxlbWVudCwgd2UgZ2l2ZSB0aGUgdGFyZ2V0CisgICAgLy8gZWxlbWVudCBhIGNoYW5jZSB0byBk
byBzb21lIHBvc3Qgd29yayB0byBhZGQgc29tZSBhZGRpdGlvbmFsIGRhdGEuCisgICAgV2ViQ29y
ZTo6U3RyaW5nIHBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZUVuZFRhZyhjb25zdCBXZWJDb3JlOjpF
bGVtZW50KiBlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKTsKKyAgICAvLyBTYXZlIGdlbmVy
YXRlZCBodG1sIGNvbnRlbnQgdG8gZGF0YSBidWZmZXIuCisgICAgdm9pZCBzYXZlSFRNTENvbnRl
bnRUb0J1ZmZlcihjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHJlc3VsdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSk7CisgICAgLy8gU2Vy
aWFsaXplIG9wZW4gdGFnIG9mIGFuIHNwZWNpZmllZCBlbGVtZW50LgorICAgIHZvaWQgb3BlblRh
Z1RvU3RyaW5nKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKTsKKyAgICAvLyBTZXJpYWxpemUg
ZW5kIHRhZyBvZiBhbiBzcGVjaWZpZWQgZWxlbWVudC4KKyAgICB2b2lkIGVuZFRhZ1RvU3RyaW5n
KGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pOworICAgIC8vIEJ1aWxkIGNvbnRlbnQgZm9yIGEg
c3BlY2lmaWVkIG5vZGUKKyAgICB2b2lkIGJ1aWxkQ29udGVudEZvck5vZGUoY29uc3QgV2ViQ29y
ZTo6Tm9kZSogbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9t
UGFyYW0qIHBhcmFtKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3RyaW5nLmNwcCBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViU3RyaW5nLmNwcAppbmRleCBmNDVlMDVmLi44NzIxZGI5IDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlN0cmluZy5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJTdHJpbmcuY3BwCkBAIC0xMjEsNiArMTIxLDE4IEBAIFdlYlN0cmluZzo6b3BlcmF0
b3IgV2ViQ29yZTo6QXRvbWljU3RyaW5nKCkgY29uc3QKICAgICByZXR1cm4gV2ViQ29yZTo6QXRv
bWljU3RyaW5nKHN0YXRpY19jYXN0PFdlYkNvcmU6OlN0cmluZ0ltcGwgKj4obV9wcml2YXRlKSk7
CiB9CiAKK1dlYlN0cmluZzo6V2ViU3RyaW5nKGNvbnN0IGNoYXIqIGRhdGEpCisgICAgOiBtX3By
aXZhdGUoMCkKK3sKKyAgICBhc3NpZ24oV2ViQ29yZTo6U3RyaW5nOjpmcm9tVVRGOChkYXRhKSk7
Cit9CisKK1dlYlN0cmluZyYgV2ViU3RyaW5nOjpvcGVyYXRvcj0oY29uc3QgY2hhciogZGF0YSkK
K3sKKyAgICBhc3NpZ24oV2ViQ29yZTo6U3RyaW5nOjpmcm9tVVRGOChkYXRhKSk7CisgICAgcmV0
dXJuICp0aGlzOworfQorCiB2b2lkIFdlYlN0cmluZzo6YXNzaWduKFdlYlN0cmluZ1ByaXZhdGUq
IHApCiB7CiAgICAgLy8gVGFrZSBjYXJlIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBtX3ByaXZh
dGUgPT0gcAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44049</attachid>
            <date>2009-11-30 17:57:24 -0800</date>
            <delta_ts>2009-12-11 12:49:14 -0800</delta_ts>
            <desc>Added WebPageSerializer to WebKit API.</desc>
            <filename>bug-31737-20091130175722.patch</filename>
            <type>text/plain</type>
            <size>99982</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzdhZmRlMi4uMjliODgxNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAwOS0xMS0zMCAgWWFhciBTY2huaXRt
YW4gIDx5YWFyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBXZWJQYWdlU2VyaWFsaXplciB0byBXZWJLaXQgQVBJLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTczNwor
CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmNwcDogQWRkZWQgbWV0aG9k
cyB0byBtYWtlIFN0cmluZ0J1aWxkZXIgZXZlbiBtb3JlIHVzZWZ1bCBmb3IgbGFyZ2Ugc2NhbGUg
c3RyaW5nIGNvbmNhdGVuYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdCdWlsZGVyOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdCdWlsZGVyOjpsZW5ndGgpOgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5oOgorCiAyMDA5LTExLTIzICBEaXJrIFNj
aHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTmlrb2xhcyBa
aW1tZXJtYW5uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxk
ZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCmluZGV4IGMy
MWUzNjYuLjNlMzQ5ODEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdC
dWlsZGVyLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5jcHAK
QEAgLTk1LDQgKzk1LDE3IEBAIFN0cmluZyBTdHJpbmdCdWlsZGVyOjp0b1N0cmluZygpIGNvbnN0
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBTdHJpbmdCdWlsZGVyOjpjbGVhcigpCit7
CisgICAgbV90b3RhbExlbmd0aCA9IFVJTlRfTUFYOworICAgIG1fc3RyaW5ncy5jbGVhcigpOwor
fQorCit1bnNpZ25lZCBTdHJpbmdCdWlsZGVyOjpsZW5ndGgoKSBjb25zdAoreworICAgIGlmICht
X3RvdGFsTGVuZ3RoID09IFVJTlRfTUFYKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
bV90b3RhbExlbmd0aDsKK30KKwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1N0cmluZ0J1aWxkZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmgK
aW5kZXggOGQ3NmI5Yy4uN2Y3MmZiZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1N0cmluZ0J1aWxkZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRl
ci5oCkBAIC00Miw2ICs0Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBh
cHBlbmQoY29uc3QgU3RyaW5nJik7CiAgICAgICAgIHZvaWQgYXBwZW5kKFVDaGFyKTsKICAgICAg
ICAgdm9pZCBhcHBlbmQoY2hhcik7CisgICAgICAgIAorICAgICAgICB2b2lkIGNsZWFyKCk7Cisg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogCiAgICAgICAgIFN0cmluZyB0b1N0cmlu
ZygpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBiZGE3ZTdjLi5lMDc0MDc1IDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMjEgQEAKKzIwMDktMTEtMzAgIFlhYXIgU2Nobml0bWFuICA8eWFhckBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkZWQgV2ViUGFnZVNlcmlhbGl6ZXIgdG8gV2ViS2l0IEFQSSBhbmQgZW5yaWNoZWQg
dGhlIFdlYk5vZGUgaGllcmFyY2h5IHRvIHN1cHBvcnQKKyAgICAgICAgZG93bnN0cmVhbSB1bml0
LXRlc3Rpbmcgb2Ygc2VyaWFsaXphdGlvbi4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE3MzcKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAg
ICAgICogcHVibGljL1dlYkRvY3VtZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJE
b2N1bWVudDo6V2ViRG9jdW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6b3Bl
cmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViRG9jdW1lbnQ6OmFzc2lnbik6CisgICAgICAg
ICogcHVibGljL1dlYkVsZW1lbnQuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViRm9ybUVsZW1lbnQu
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViRm9ybUVsZW1lbnQ6Om9wZXJhdG9yPSk6CisgICAgICAg
ICogcHVibGljL1dlYkZyYW1lLmg6CisgICAgICAgICogcHVibGljL1dlYk5vZGUuaDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViTm9kZTo6KToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6dG9Db25z
dEVsZW1lbnQpOgorICAgICAgICAqIHB1YmxpYy9XZWJOb2RlQ29sbGVjdGlvbi5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViTm9kZUNvbGxlY3Rpb246On5XZWJOb2RlQ29sbGVjdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVDb2xsZWN0aW9uOjpXZWJOb2RlQ29sbGVjdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVDb2xsZWN0aW9uOjpvcGVyYXRvcj0pOgorICAgICAg
ICAqIHB1YmxpYy9XZWJOb2RlTGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTm9k
ZUxpc3Q6On5XZWJOb2RlTGlzdCk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVMaXN0OjpXZWJO
b2RlTGlzdCk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVMaXN0OjpvcGVyYXRvcj0pOgorICAg
ICAgICAqIHB1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oOiBBZGRlZC4KKyAgICAgICAgKiBwdWJs
aWMvV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VTZXJpYWxpemVyQ2xpZW50OjopOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFs
aXplckNsaWVudDo6V2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlU2VyaWFsaXplckNsaWVudDo6fldlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KToKKyAgICAg
ICAgKiBwdWJsaWMvV2ViU3RyaW5nLmg6CisgICAgICAgICogcHVibGljL1dlYlZpZXcuaDoKKyAg
ICAgICAgKiBzcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHA6CisgICAgICAgICogc3JjL0RPTVV0
aWxpdGllc1ByaXZhdGUuY3BwOgorICAgICAgICAoV2ViS2l0OjplbGVtZW50SGFzTGVnYWxMaW5r
QXR0cmlidXRlKToKKyAgICAgICAgKiBzcmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5oOgorICAgICAg
ICAqIHNyYy9XZWJEb2N1bWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1
bWVudDo6V2ViRG9jdW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6b3BlcmF0
b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViRG9jdW1lbnQ6Om9wZXJhdG9yIFdURjo6UGFzc1Jl
ZlB0cjxEb2N1bWVudD4pOgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6ZnJhbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6aXNIVE1MRG9jdW1lbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJEb2N1bWVudDo6YmFzZVVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRvY3Vt
ZW50Ojpib2R5KToKKyAgICAgICAgKFdlYktpdDo6V2ViRG9jdW1lbnQ6OmhlYWQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6YWxsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRG9jdW1l
bnQ6OmNvbXBsZXRlVVJMKToKKyAgICAgICAgKiBzcmMvV2ViRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkVsZW1lbnQ6Omhhc1RhZ05hbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJF
bGVtZW50OjpoYXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJFbGVtZW50OjpnZXRB
dHRyaWJ1dGUpOgorICAgICAgICAqIHNyYy9XZWJFbnRpdGllcy5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0Ojpwb3B1bGF0ZU1hcCk6CisgICAgICAgIChXZWJLaXQ6Oik6CisgICAgICAgIChX
ZWJLaXQ6OldlYkVudGl0aWVzOjpXZWJFbnRpdGllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkVu
dGl0aWVzOjplbnRpdHlOYW1lQnlDb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRW50aXRpZXM6
OmNvbnZlcnRFbnRpdGllc0luU3RyaW5nKToKKyAgICAgICAgKiBzcmMvV2ViRW50aXRpZXMuaDog
QWRkZWQuCisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lOjpmcm9tRnJhbWVPd25lckVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJG
cmFtZUltcGw6OmVuY29kaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpkb2N1
bWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lT3duZXJFbGVt
ZW50KToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmg6CisgICAgICAgICogc3JjL1dlYk5v
ZGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjpub2RlVHlwZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYk5vZGU6Om5vZGVWYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6OmRv
Y3VtZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6Zmlyc3RDaGlsZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYk5vZGU6Omxhc3RDaGlsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6
OnByZXZpb3VzU2libGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6Om5leHRTaWJsaW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6aGFzQ2hpbGROb2Rlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYk5vZGU6OmNoaWxkTm9kZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjpj
cmVhdGVNYXJrdXApOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjppc1RleHROb2RlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTm9kZTo6aXNFbGVtZW50Tm9kZSk6CisgICAgICAgICogc3JjL1dl
Yk5vZGVDb2xsZWN0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVDb2xs
ZWN0aW9uOjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVDb2xsZWN0aW9uOjphc3Np
Z24pOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlQ29sbGVjdGlvbjo6V2ViTm9kZUNvbGxlY3Rp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlQ29sbGVjdGlvbjo6bGVuZ3RoKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTm9kZUNvbGxlY3Rpb246Om5leHRJdGVtKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTm9kZUNvbGxlY3Rpb246OmZpcnN0SXRlbSk6CisgICAgICAgICogc3JjL1dlYk5vZGVM
aXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVMaXN0OjpyZXNldCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYk5vZGVMaXN0Ojphc3NpZ24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJOb2RlTGlzdDo6V2ViTm9kZUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlTGlzdDo6
bGVuZ3RoKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZUxpc3Q6Oml0ZW0pOgorICAgICAgICAq
IHNyYy9XZWJQYWdlU2VyaWFsaXplci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlh
bGl6ZXI6OmdlbmVyYXRlTWV0YUNoYXJzZXREZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZU1hcmtPZlRoZVdlYkRlY2xhcmF0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlQmFzZVRhZ0RlY2xhcmF0
aW9uKToKKyAgICAgICAgKiBzcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6U2VyaWFsaXplRG9tUGFyYW06
OlNlcmlhbGl6ZURvbVBhcmFtKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJ
bXBsOjpwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVPcGVuVGFnKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpwb3N0QWN0aW9uQWZ0ZXJTZXJpYWxpemVPcGVuVGFnKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpwcmVBY3Rpb25CZWZvcmVT
ZXJpYWxpemVFbmRUYWcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6
OnBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZUVuZFRhZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VTZXJpYWxpemVySW1wbDo6c2F2ZUhUTUxDb250ZW50VG9CdWZmZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6Om9wZW5UYWdUb1N0cmluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6ZW5kVGFnVG9TdHJpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6OmJ1aWxkQ29udGVudEZvck5vZGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6OldlYlBhZ2VTZXJpYWxpemVySW1w
bCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6Y29sbGVjdFRhcmdl
dEZyYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6c2VyaWFs
aXplKToKKyAgICAgICAgKiBzcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmg6IEFkZGVkLgorICAg
ICAgICAqIHNyYy9XZWJTdHJpbmcuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6Oldl
YlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorCiAyMDA5LTExLTIwICBKaWFuIExpICA8amlhbmxp
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQuIEZpeCBjaHJvbWl1bSBidWls
ZC4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAKaW5kZXggYWIwOGRjOS4uZDM3OWM1MiAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAg
LTEwMiw2ICsxMDIsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRGV2VG9vbHNBZ2Vu
dENsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkRldlRvb2xzRnJvbnRlbmQu
aCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJEZXZUb29sc0Zyb250ZW5kQ2xpZW50Lmgn
LAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRG9jdW1lbnQuaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJEcmFnRGF0YS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkVk
aXRpbmdBY3Rpb24uaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJFbGVtZW50LmgnLApA
QCAtMTI3LDEwICsxMjgsMTQgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1pbWVSZWdp
c3RyeS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk5hdmlnYXRpb25UeXBlLmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTm9kZS5oJywKKyAgICAgICAgICAgICAgICAncHVi
bGljL1dlYk5vZGVDb2xsZWN0aW9uLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTm9k
ZUxpc3QuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJOb25Db3B5YWJsZS5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYk5vdGlmaWNhdGlvbi5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYk5vdGlmaWNhdGlvblByZXNlbnRlci5oJywKICAgICAgICAgICAgICAgICAn
cHVibGljL1dlYk5vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFjay5oJywKKyAgICAgICAgICAg
ICAgICAncHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgnLAorICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9X
ZWJQYXNzd29yZEF1dG9jb21wbGV0ZUxpc3RlbmVyLmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViUGFzc3dvcmRGb3JtRGF0YS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlBs
dWdpbi5oJywKQEAgLTI0MCw4ICsyNDUsMTEgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYkRh
dGFiYXNlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJEYXRhU291cmNlSW1wbC5jcHAn
LAogICAgICAgICAgICAgICAgICdzcmMvV2ViRGF0YVNvdXJjZUltcGwuaCcsCisgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJEb2N1bWVudC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRHJh
Z0RhdGEuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkVsZW1lbnQuY3BwJywKKyAgICAg
ICAgICAgICAgICAnc3JjL1dlYkVudGl0aWVzLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJFbnRpdGllcy5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZpbGVDaG9vc2VyQ29tcGxl
dGlvbkltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZpbGVDaG9vc2VyQ29tcGxl
dGlvbkltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGb250Q2FjaGUuY3BwJywKQEAg
LTI2MCw3ICsyNjgsMTIgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhUGxheWVyQ2xp
ZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJ
bXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTm9kZS5jcHAnLAorICAgICAgICAgICAg
ICAgICdzcmMvV2ViTm9kZUNvbGxlY3Rpb24uY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dl
Yk5vZGVMaXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJOb3RpZmljYXRpb24uY3Bw
JywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcCcsCisgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuY3BwJywKKyAgICAgICAgICAgICAg
ICAnc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YlBhc3N3b3JkRm9ybURhdGEuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlBhc3N3b3Jk
Rm9ybVV0aWxzLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJQYXNzd29yZEZvcm1VdGls
cy5oJywKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRG9jdW1lbnQuaCBi
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRG9jdW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5kMDc0YWI2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJEb2N1bWVudC5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkRvY3Vt
ZW50X2gKKyNkZWZpbmUgV2ViRG9jdW1lbnRfaAorCisjaW5jbHVkZSAiV2ViTm9kZS5oIgorCisj
aWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIERvY3Vt
ZW50OyB9CituYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NS
ZWZQdHI7IH0KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkVsZW1lbnQ7
CitjbGFzcyBXZWJGcmFtZTsKK2NsYXNzIFdlYk5vZGVDb2xsZWN0aW9uOworY2xhc3MgV2ViU3Ry
aW5nOworY2xhc3MgV2ViVVJMOworCisvLyBQcm92aWRlcyByZWFkb25seSBhY2Nlc3MgdG8gc29t
ZSBwcm9wZXJ0aWVzIG9mIGEgRE9NIGRvY3VtZW50LgorY2xhc3MgV2ViRG9jdW1lbnQgOiBwdWJs
aWMgV2ViTm9kZSB7CitwdWJsaWM6CisgICAgV2ViRG9jdW1lbnQoKSB7IH0KKyAgICBXZWJEb2N1
bWVudChjb25zdCBXZWJEb2N1bWVudCYgZSkgOiBXZWJOb2RlKGUpIHsgfQorCisgICAgV2ViRG9j
dW1lbnQmIG9wZXJhdG9yPShjb25zdCBXZWJEb2N1bWVudCYgZSkgeyBXZWJOb2RlOjphc3NpZ24o
ZSk7IHJldHVybiAqdGhpczsgfQorICAgIHZvaWQgYXNzaWduKGNvbnN0IFdlYkRvY3VtZW50JiBl
KSB7IFdlYk5vZGU6OmFzc2lnbihlKTsgfQorCisgICAgLy8gUmV0dXJucyB0aGUgZnJhbWUgdGhl
IGRvY3VtZW50IGJlbG9uZ3MgdG8gb3IgMCBpZiB0aGUgZG9jdW1lbnQgaXMgZnJhbWVsZXNzLgor
ICAgIFdFQktJVF9BUEkgV2ViRnJhbWUqIGZyYW1lKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBi
b29sIGlzSFRNTERvY3VtZW50KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJVUkwgYmFzZVVS
TCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViRWxlbWVudCBib2R5KCkgY29uc3Q7CisgICAg
V0VCS0lUX0FQSSBXZWJFbGVtZW50IGhlYWQoKTsKKyAgICBXRUJLSVRfQVBJIFdlYk5vZGVDb2xs
ZWN0aW9uIGFsbCgpOworICAgIFdFQktJVF9BUEkgV2ViVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFdl
YlN0cmluZyYpIGNvbnN0OworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViRG9j
dW1lbnQoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50PiYpOworICAgIFdl
YkRvY3VtZW50JiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkRvY3Vt
ZW50PiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4o
KSBjb25zdDsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJFbGVtZW50LmggYi9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkVsZW1lbnQuaAppbmRleCBkN2EyY2JmLi5hYzU1NTkzIDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkVsZW1lbnQuaAorKysgYi9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkVsZW1lbnQuaApAQCAtMzksNyArMzksNiBAQCBuYW1lc3BhY2Ug
V1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NSZWZQdHI7IH0KICNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKLQogICAgIC8vIFByb3ZpZGVzIHJlYWRvbmx5IGFjY2VzcyB0
byBzb21lIHByb3BlcnRpZXMgb2YgYSBET00gZWxlbWVudCBub2RlLgogICAgIGNsYXNzIFdlYkVs
ZW1lbnQgOiBwdWJsaWMgV2ViTm9kZSB7CiAgICAgcHVibGljOgpAQCAtNDcsNyArNDYsMTEgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAgICAgICAgIFdlYkVsZW1lbnQoY29uc3QgV2ViRWxlbWVudCYg
ZSkgOiBXZWJOb2RlKGUpIHsgfQogCiAgICAgICAgIFdlYkVsZW1lbnQmIG9wZXJhdG9yPShjb25z
dCBXZWJFbGVtZW50JiBlKSB7IFdlYk5vZGU6OmFzc2lnbihlKTsgcmV0dXJuICp0aGlzOyB9Ci0g
ICAgICAgIFdFQktJVF9BUEkgdm9pZCBhc3NpZ24oY29uc3QgV2ViRWxlbWVudCYgZSkgeyBXZWJO
b2RlOjphc3NpZ24oZSk7IH0KKyAgICAgICAgdm9pZCBhc3NpZ24oY29uc3QgV2ViRWxlbWVudCYg
ZSkgeyBXZWJOb2RlOjphc3NpZ24oZSk7IH0KKworICAgICAgICBXRUJLSVRfQVBJIGJvb2wgaGFz
VGFnTmFtZShjb25zdCBXZWJTdHJpbmcmKSBjb25zdDsKKyAgICAgICAgV0VCS0lUX0FQSSBib29s
IGhhc0F0dHJpYnV0ZShjb25zdCBXZWJTdHJpbmcmKSBjb25zdDsKKyAgICAgICAgV0VCS0lUX0FQ
SSBXZWJTdHJpbmcgZ2V0QXR0cmlidXRlKGNvbnN0IFdlYlN0cmluZyYpIGNvbnN0OwogCiAjaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OCiAgICAgICAgIFdlYkVsZW1lbnQoY29uc3QgV1RGOjpQYXNz
UmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+Jik7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkZvcm1FbGVtZW50LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZvcm1F
bGVtZW50LmgKaW5kZXggMjdhMWVkYi4uZDk4MDFlMSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJGb3JtRWxlbWVudC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViRm9ybUVsZW1lbnQuaApAQCAtNTAsNyArNTAsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAg
ICAgICAgV2ViRm9ybUVsZW1lbnQoKSA6IFdlYkVsZW1lbnQoKSB7IH0KICAgICAgICAgV2ViRm9y
bUVsZW1lbnQoY29uc3QgV2ViRm9ybUVsZW1lbnQmIGUpIDogV2ViRWxlbWVudChlKSB7IH0KIAot
ICAgICAgICBXZWJFbGVtZW50JiBvcGVyYXRvcj0oY29uc3QgV2ViRm9ybUVsZW1lbnQmIGUpIHsg
V2ViRWxlbWVudDo6YXNzaWduKGUpOyByZXR1cm4gKnRoaXM7IH0KKyAgICAgICAgV2ViRm9ybUVs
ZW1lbnQmIG9wZXJhdG9yPShjb25zdCBXZWJGb3JtRWxlbWVudCYgZSkgeyBXZWJFbGVtZW50Ojph
c3NpZ24oZSk7IHJldHVybiAqdGhpczsgfQogICAgICAgICBXRUJLSVRfQVBJIHZvaWQgYXNzaWdu
KGNvbnN0IFdlYkZvcm1FbGVtZW50JiBlKSB7IFdlYkVsZW1lbnQ6OmFzc2lnbihlKTsgfQogCiAj
aWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkZyYW1lLmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgKaW5kZXgg
NDRiNTdhYS4uZGI2Y2ZhZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJG
cmFtZS5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaApAQCAtNDcsNiAr
NDcsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViRGF0YTsKIGNsYXNzIFdlYkRh
dGFTb3VyY2U7CitjbGFzcyBXZWJEb2N1bWVudDsKK2NsYXNzIFdlYkVsZW1lbnQ7CiBjbGFzcyBX
ZWJGb3JtRWxlbWVudDsKIGNsYXNzIFdlYkhpc3RvcnlJdGVtOwogY2xhc3MgV2ViSW5wdXRFbGVt
ZW50OwpAQCAtODUsNiArODcsMTAgQEAgcHVibGljOgogICAgIFdFQktJVF9BUEkgc3RhdGljIFdl
YkZyYW1lKiBmcmFtZUZvckVudGVyZWRDb250ZXh0KCk7CiAgICAgV0VCS0lUX0FQSSBzdGF0aWMg
V2ViRnJhbWUqIGZyYW1lRm9yQ3VycmVudENvbnRleHQoKTsKIAorICAgIC8vIFJldHVybnMgdGhl
IGZyYW1lIGluc2lkZSBhIGdpdmVuIGZyYW1lIG9yIGlmcmFtZSBlbGVtZW50LiBSZXR1cm5zIDAg
aWYKKyAgICAvLyB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBub3QgYSBmcmFtZSwgaWZyYW1lIG9yIGlm
IHRoZSBmcmFtZSBpcyBlbXB0eS4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJGcmFtZSogZnJv
bUZyYW1lT3duZXJFbGVtZW50KGNvbnN0IFdlYkVsZW1lbnQmKTsKKwogCiAgICAgLy8gQmFzaWMg
cHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIApAQCAtMTAzLDYgKzEwOSw4IEBAIHB1YmxpYzoKICAgICAvLyB0aGUgZG9jdW1lbnQg
bG9hZGVkIGluIHRoaXMgZnJhbWUuCiAgICAgdmlydHVhbCBXZWJVUkwgb3BlblNlYXJjaERlc2Ny
aXB0aW9uVVJMKCkgY29uc3QgPSAwOwogCisgICAgLy8gUmV0dXJuIHRoZSBmcmFtZSdzIGVuY29k
aW5nLgorICAgIHZpcnR1YWwgV2ViU3RyaW5nIGVuY29kaW5nKCkgY29uc3QgPSAwOwogCiAgICAg
Ly8gR2VvbWV0cnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIApAQCAtMTY0LDggKzE3Miw5IEBAIHB1YmxpYzoKIAogICAgIC8vIENv
bnRlbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKLSAgICB2aXJ0dWFsIHZvaWQgZm9ybXMoV2ViVmVjdG9yPFdlYkZvcm1FbGVt
ZW50PiYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFdlYkRvY3VtZW50IGRvY3VtZW50KCkgY29u
c3QgPSAwOwogCisgICAgdmlydHVhbCB2b2lkIGZvcm1zKFdlYlZlY3RvcjxXZWJGb3JtRWxlbWVu
dD4mKSBjb25zdCA9IDA7CiAKICAgICAvLyBTY3JpcHRpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC00NDQsNiArNDUzLDcg
QEAgcHVibGljOgogICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBiYXNlIFVSTCBvZiB0aGUgZnJhbWUn
cyBkb2N1bWVudC4gIFRoaXMgdXNlcyB0aGUKICAgICAvLyBzYW1lIGFsZ29yaXRobSB0aGF0IFdl
YktpdCB1c2VzIHRvIHJlc29sdmUgaHlwZXJsaW5rcyBmb3VuZCBpbiBhCiAgICAgLy8gSFRNTCBk
b2N1bWVudC4KKyAgICAvLyBEZXByZWNhdGVkLiBVc2UgZG9jdW1lbnQoKS5jb21wbGV0ZVVSTCgp
IGluc3RlYWQuCiAgICAgdmlydHVhbCBXZWJVUkwgY29tcGxldGVVUkwoY29uc3QgV2ViU3RyaW5n
JikgY29uc3QgPSAwOwogCiAgICAgLy8gUmV0dXJucyB0aGUgY29udGVudHMgb2YgdGhpcyBmcmFt
ZSBhcyBhIHN0cmluZy4gIElmIHRoZSB0ZXh0IGlzCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYk5vZGUuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTm9kZS5oCmlu
ZGV4IDAzYWZhOTAuLmRmYmIwYWEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViTm9kZS5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTm9kZS5oCkBAIC00MCw3
ICs0MCw5IEBAIG5hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUGFz
c1JlZlB0cjsgfQogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViRG9jdW1l
bnQ7CiBjbGFzcyBXZWJGcmFtZTsKK2NsYXNzIFdlYk5vZGVMaXN0OwogCiAvLyBQcm92aWRlcyBy
ZWFkb25seSBhY2Nlc3MgdG8gc29tZSBwcm9wZXJ0aWVzIG9mIGEgRE9NIG5vZGUuCiBjbGFzcyBX
ZWJOb2RlIHsKQEAgLTY2LDkgKzY4LDM3IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBXVEY6OlBh
c3NSZWZQdHI8V2ViQ29yZTo6Tm9kZT4oKSBjb25zdDsKICNlbmRpZgogCisgICAgZW51bSBOb2Rl
VHlwZSB7CisgICAgICAgIEVsZW1lbnROb2RlID0gMSwKKyAgICAgICAgQXR0cmlidXRlTm9kZSwK
KyAgICAgICAgVGV4dE5vZGUsCisgICAgICAgIENEYXRhU2VjdGlvbk5vZGUsCisgICAgICAgIEVu
dGl0eVJlZmVyZW5jZU5vZGUsCisgICAgICAgIEVudGl0eU5vZGUsCisgICAgICAgIFByb2Nlc3Np
bmdJbnN0cnVjdGlvbnNOb2RlLAorICAgICAgICBDb21tZW50Tm9kZSwKKyAgICAgICAgRG9jdW1l
bnROb2RlLAorICAgICAgICBEb2N1bWVudFR5cGVOb2RlLAorICAgICAgICBEb2N1bWVudEZyYWdt
ZW50Tm9kZSwKKyAgICAgICAgTm90YXRpb25Ob2RlLAorICAgICAgICBYUGF0aE5hbWVzcGFjZU5v
ZGUKKyAgICB9OworICAgIFdFQktJVF9BUEkgTm9kZVR5cGUgbm9kZVR5cGUoKSBjb25zdDsKICAg
ICBXRUJLSVRfQVBJIFdlYk5vZGUgcGFyZW50Tm9kZSgpIGNvbnN0OwogICAgIFdFQktJVF9BUEkg
V2ViU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgbm9k
ZVZhbHVlKCkgY29uc3Q7CisgICAgLy8gRGVwcmVjYXRlZC4gVXNlIGRvY3VtZW50KCkuZnJhbWUo
KSBpbnN0ZWFkLgogICAgIFdFQktJVF9BUEkgV2ViRnJhbWUqIGZyYW1lKCkgY29uc3Q7CisgICAg
V0VCS0lUX0FQSSBXZWJEb2N1bWVudCBkb2N1bWVudCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkg
V2ViTm9kZSBmaXJzdENoaWxkKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJOb2RlIGxhc3RD
aGlsZCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViTm9kZSBwcmV2aW91c1NpYmxpbmcoKSBj
b25zdDsKKyAgICBXRUJLSVRfQVBJIFdlYk5vZGUgbmV4dFNpYmxpbmcoKSBjb25zdDsKKyAgICBX
RUJLSVRfQVBJIGJvb2wgaGFzQ2hpbGROb2RlcygpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2Vi
Tm9kZUxpc3QgY2hpbGROb2RlcygpOworICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGNyZWF0ZU1h
cmt1cCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBpc1RleHROb2RlKCkgY29uc3Q7Cisg
ICAgV0VCS0lUX0FQSSBib29sIGlzRWxlbWVudE5vZGUoKSBjb25zdDsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IFQgdG9FbGVtZW50KCkKICAgICB7CkBAIC03Nyw2ICsxMDcsMTMgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNvbnN0IFQgdG9Db25zdEVsZW1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgVCByZXM7
CisgICAgICAgIHJlcy5tX3ByaXZhdGUgPSBtX3ByaXZhdGU7CisgICAgICAgIHJldHVybiByZXM7
CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdHlwZWRlZiBXZWJDb3JlOjpOb2RlIFdlYk5vZGVQ
cml2YXRlOwogICAgIHZvaWQgYXNzaWduKFdlYk5vZGVQcml2YXRlKik7CmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5vZGVDb2xsZWN0aW9uLmggYi9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYk5vZGVDb2xsZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNzQyMDljNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViTm9kZUNvbGxlY3Rpb24uaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJOb2RlQ29s
bGVjdGlvbl9oCisjZGVmaW5lIFdlYk5vZGVDb2xsZWN0aW9uX2gKKworI2luY2x1ZGUgIldlYkNv
bW1vbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEhUTUxDb2xsZWN0aW9uOyB9Cisj
aWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IGNsYXNzIFBhc3NSZWZQdHI7IH0KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsK
K2NsYXNzIFdlYk5vZGU7CisKKy8vIFByb3ZpZGVzIHJlYWRvbmx5IGFjY2VzcyB0byBzb21lIHBy
b3BlcnRpZXMgb2YgYSBET00gbm9kZS4KK2NsYXNzIFdlYk5vZGVDb2xsZWN0aW9uIHsKK3B1Ymxp
YzoKKyAgICB+V2ViTm9kZUNvbGxlY3Rpb24oKSB7IHJlc2V0KCk7IH0KKworICAgIFdlYk5vZGVD
b2xsZWN0aW9uKGNvbnN0IFdlYk5vZGVDb2xsZWN0aW9uJiBuKSA6IG1fcHJpdmF0ZSgwKSB7IGFz
c2lnbihuKTsgfQorICAgIFdlYk5vZGVDb2xsZWN0aW9uJiBvcGVyYXRvcj0oY29uc3QgV2ViTm9k
ZUNvbGxlY3Rpb24mIG4pCisgICAgeworICAgICAgICBhc3NpZ24obik7CisgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICB9CisKKyAgICBXRUJLSVRfQVBJIHZvaWQgcmVzZXQoKTsKKyAgICBXRUJL
SVRfQVBJIHZvaWQgYXNzaWduKGNvbnN0IFdlYk5vZGVDb2xsZWN0aW9uJik7CisKKyAgICBXRUJL
SVRfQVBJIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViTm9kZSBu
ZXh0SXRlbSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViTm9kZSBmaXJzdEl0ZW0oKSBjb25z
dDsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYk5vZGVDb2xsZWN0aW9uKGNv
bnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4mKTsKKyNlbmRpZgor
Citwcml2YXRlOgorICAgIHZvaWQgYXNzaWduKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uKik7Cisg
ICAgV2ViQ29yZTo6SFRNTENvbGxlY3Rpb24qIG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViTm9kZUxpc3QuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTm9kZUxpc3QuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2U4MjgwCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJOb2RlTGlzdC5oCkBAIC0wLDAgKzEsNzMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFdlYk5vZGVMaXN0X2gKKyNkZWZpbmUgV2ViTm9kZUxpc3RfaAorCisjaW5jbHVkZSAi
V2ViQ29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgTm9kZUxpc3Q7IH0KKyNp
ZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KK25hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gY2xhc3MgUGFzc1JlZlB0cjsgfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgewor
Y2xhc3MgV2ViTm9kZTsKKworLy8gUHJvdmlkZXMgcmVhZG9ubHkgYWNjZXNzIHRvIHNvbWUgcHJv
cGVydGllcyBvZiBhIERPTSBub2RlLgorY2xhc3MgV2ViTm9kZUxpc3QgeworcHVibGljOgorICAg
IH5XZWJOb2RlTGlzdCgpIHsgcmVzZXQoKTsgfQorCisgICAgV2ViTm9kZUxpc3QoY29uc3QgV2Vi
Tm9kZUxpc3QmIG4pIDogbV9wcml2YXRlKDApIHsgYXNzaWduKG4pOyB9CisgICAgV2ViTm9kZUxp
c3QmIG9wZXJhdG9yPShjb25zdCBXZWJOb2RlTGlzdCYgbikKKyAgICB7CisgICAgICAgIGFzc2ln
bihuKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFdFQktJVF9BUEkgdm9p
ZCByZXNldCgpOworICAgIFdFQktJVF9BUEkgdm9pZCBhc3NpZ24oY29uc3QgV2ViTm9kZUxpc3Qm
KTsKKworICAgIFdFQktJVF9BUEkgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgV0VCS0lU
X0FQSSBXZWJOb2RlIGl0ZW0oc2l6ZV90KSBjb25zdDsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRB
VElPTgorICAgIFdlYk5vZGVMaXN0KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpOb2Rl
TGlzdD4mKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIHZvaWQgYXNzaWduKFdlYkNvcmU6Ok5v
ZGVMaXN0Kik7CisgICAgV2ViQ29yZTo6Tm9kZUxpc3QqIG1fcHJpdmF0ZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFn
ZVNlcmlhbGl6ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGY3OTk0
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFs
aXplci5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlBhZ2VTZXJpYWxpemVyX2gKKyNkZWZp
bmUgV2ViUGFnZVNlcmlhbGl6ZXJfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworY2xhc3MgV2ViRnJhbWU7CitjbGFzcyBXZWJQYWdlU2VyaWFsaXplckNs
aWVudDsKK2NsYXNzIFdlYlN0cmluZzsKK2NsYXNzIFdlYlVSTDsKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBjbGFzcyBXZWJWZWN0b3I7CisKKy8vIEdldCBodG1sIGRhdGEgYnkgc2VyaWFsaXppbmcg
YWxsIGZyYW1lcyBvZiBjdXJyZW50IHBhZ2Ugd2l0aCBsaXN0cworLy8gd2hpY2ggY29udGFpbiBh
bGwgcmVzb3VyY2UgbGlua3MgdGhhdCBoYXZlIGxvY2FsIGNvcHkuCitjbGFzcyBXZWJQYWdlU2Vy
aWFsaXplciB7CitwdWJsaWM6CisgICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGZpbmQgb3V0IGFs
bCBmcmFtZXMgYW5kIHNlcmlhbGl6ZSB0aGVtIHRvIEhUTUwgZGF0YS4KKyAgICAvLyBXZSBoYXZl
IGEgZGF0YSBidWZmZXIgdG8gdGVtcG9yYXJ5IHNhdmluZyBnZW5lcmF0ZWQgaHRtbCBkYXRhLiBX
ZSB3aWxsCisgICAgLy8gc2VxdWVudGlhbGx5IGNhbGwgV2ViUGFnZVNlcmlhemxpZXJDbGllbnQg
b25jZSB0aGUgZGF0YSBidWZmZXIgaXMgZnVsbC4KKyAgICAvLworICAgIC8vIFJldHVybiBmYWxz
ZSBtZWFucyBubyBhdmFpbGFibGUgZnJhbWUgaGFzIGJlZW4gc2VyaWFsaXplZCwgb3RoZXJ3aXNl
CisgICAgLy8gcmV0dXJuIHRydWUuCisgICAgLy8KKyAgICAvLyBUaGUgcGFyYW1ldGVyIGZyYW1l
IHNwZWNpZmllcyB3aGljaCBmcmFtZSBuZWVkIHRvIGJlIHNlcmlhbGl6ZWQuCisgICAgLy8gVGhl
IHBhcmFtZXRlciByZWN1cnNpdmUgc3BlY2lmaWVzIHdoZXRoZXIgd2UgbmVlZCB0bworICAgIC8v
IHNlcmlhbGl6ZSBhbGwgc3ViIGZyYW1lcyBvZiB0aGUgc3BlY2lmaWVkIGZyYW1lIG9yIG5vdC4K
KyAgICAvLyBUaGUgcGFyYW1ldGVyIGNsaWVudCBzcGVjaWZpZXMgdGhlIHBvaW50ZXIgb2YgaW50
ZXJmYWNlCisgICAgLy8gV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQgcHJvdmlkaW5nIGEgc2luayBp
bnRlcmZhY2UgdG8gcmVjZWl2ZSB0aGUKKyAgICAvLyBpbmRpdmlkdWFsIGNodW5rcyBvZiBkYXRh
IHRvIGJlIHNhdmVkLgorICAgIC8vIFRoZSBwYXJhbWV0ZXIgbGlua3MgY29udGFpbiBvcmlnaW5h
bCBVUkxzIG9mIGFsbCBzYXZlZCBsaW5rcy4KKyAgICAvLyBUaGUgcGFyYW1ldGVyIGxvY2FsUGF0
aHMgY29udGFpbiBjb3JyZXNwb25kaW5nIGxvY2FsIGZpbGUgcGF0aHMgb2YgYWxsCisgICAgLy8g
c2F2ZWQgbGlua3MsIHdoaWNoIG1hdGNoZWQgd2l0aCB2ZWN0b3I6bGlua3Mgb25lIGJ5IG9uZS4K
KyAgICAvLyBUaGUgcGFyYW1ldGVyIGxvY2FsRGlyZWN0b3J5TmFtZSBpcyByZWxhdGl2ZSBwYXRo
IG9mIGRpcmVjdG9yeSB3aGljaAorICAgIC8vIGNvbnRhaW4gYWxsIHNhdmVkIGF1eGlsaWFyeSBm
aWxlcyBpbmNsdWRlZCBhbGwgc3ViIGZyYW1lcyBhbmQgcmVzb3VyY2VzLgorICAgIFdFQktJVF9B
UEkgc3RhdGljIGJvb2wgc2VyaWFsaXplKFdlYkZyYW1lKiBmcmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlY3Vyc2l2ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudCogY2xpZW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+
JiBsaW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJW
ZWN0b3I8V2ViU3RyaW5nPiYgbG9jYWxQYXRocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGxvY2FsRGlyZWN0b3J5TmFtZSk7CisKKyAgICAv
LyBGSVhNRTogVGhlIGZvbGxvd2luZyBhcmUgaGVyZSBmb3IgdW5pdCB0ZXN0aW5nIHB1cnBvc2Vz
LiBDb25zaWRlcgorICAgIC8vIGNoYW5naW5nIHRoZSB1bml0IHRlc3RzIGluc3RlYWQuCisKKyAg
ICAvLyBHZW5lcmF0ZSB0aGUgTUVUQSBmb3IgY2hhcnNldCBkZWNsYXJhdGlvbi4KKyAgICBXRUJL
SVRfQVBJIHN0YXRpYyBXZWJTdHJpbmcgZ2VuZXJhdGVNZXRhQ2hhcnNldERlY2xhcmF0aW9uKGNv
bnN0IFdlYlN0cmluZyYgY2hhcnNldCk7CisgICAgLy8gR2VuZXJhdGUgdGhlIE1PVFcgZGVjbGFy
YXRpb24uCisgICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5nIGdlbmVyYXRlTWFya09mVGhl
V2ViRGVjbGFyYXRpb24oY29uc3QgV2ViVVJMJiB1cmwpOworICAgIC8vIEdlbmVyYXRlIHRoZSBk
ZWZhdWx0IGJhc2UgdGFnIGRlY2xhcmF0aW9uLgorICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0
cmluZyBnZW5lcmF0ZUJhc2VUYWdEZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGJhc2VUYXJn
ZXQpOworfTsKKworfSAgLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaCBiL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTY2ZmYzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplckNsaWVudC5oCkBAIC0wLDAgKzEsNzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50X2gKKyNkZWZpbmUgV2ViUGFnZVNlcmlh
bGl6ZXJDbGllbnRfaAorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlN0cmluZzsKK2Ns
YXNzIFdlYlVSTDsKKworLy8gVGhpcyBjbGFzcyBpcyB1c2VkIGZvciBwcm92aWRpbmcgc2luayBp
bnRlcmZhY2UgdGhhdCBjYW4gYmUgdXNlZCB0byByZWNlaXZlCisvLyB0aGUgaW5kaXZpZHVhbCBj
aHVua3Mgb2YgZGF0YSB0byBiZSBzYXZlZC4KK2NsYXNzIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50
IHsKK3B1YmxpYzoKKyAgICAvLyBUaGlzIGVudW0gaW5kaWNhdGVzICBUaGlzIHNpbmsgaW50ZXJm
YWNlIGNhbiByZWNlaXZlIHRoZSBpbmRpdmlkdWFsIGNodW5rcworICAgIC8vIG9mIHNlcmlhbGl6
ZWQgZGF0YSB0byBiZSBzYXZlZCwgc28gd2UgdXNlIHZhbHVlcyBvZiBmb2xsb3dpbmcgZW51bQor
ICAgIC8vIGRlZmluaXRpb24gdG8gaW5kaWNhdGUgdGhlIHNlcmlhbGl6YXRpb24gc3RhdHVzIG9m
IHNlcmlhbGl6aW5nIGFsbCBodG1sCisgICAgLy8gY29udGVudC4gSWYgY3VycmVudCBmcmFtZSBp
cyBub3QgY29tcGxldGUgc2VyaWFsaXplZCwgY2FsbAorICAgIC8vIGRpZFNlcmlhbGl6ZURhdGFG
b3JGcmFtZSB3aXRoIFVSTCBvZiBjdXJyZW50IGZyYW1lLCBkYXRhLCBkYXRhIGxlbmd0aCBhbmQK
KyAgICAvLyBmbGFnIEN1cnJlbnRGcmFtZUlzTm90RmluaXNoZWQuCisgICAgLy8gSWYgY3VycmVu
dCBmcmFtZSBpcyBjb21wbGV0ZSBzZXJpYWxpemVkLCBjYWxsIGRpZFNlcmlhbGl6ZURhdGFGb3JG
cmFtZQorICAgIC8vIHdpdGggVVJMIG9mIGN1cnJlbnQgZnJhbWUsIGRhdGEsIGRhdGEgbGVuZ3Ro
IGFuZCBmbGFnCisgICAgLy8gQ3VycmVudEZyYW1lSXNGaW5pc2hlZC4KKyAgICAvLyBJZiBhbGwg
ZnJhbWVzIG9mIHBhZ2UgYXJlIGNvbXBsZXRlIHNlcmlhbGl6ZWQsIGNhbGwKKyAgICAvLyBkaWRT
ZXJpYWxpemVEYXRhRm9yRnJhbWUgd2l0aCBlbXB0eSBVUkwsIGVtcHR5IGRhdGEsIDAgYW5kIGZs
YWcKKyAgICAvLyBBbGxGcmFtZXNBcmVGaW5pc2hlZC4KKyAgICBlbnVtIFBhZ2VTZXJpYWxpemF0
aW9uU3RhdHVzIHsKKyAgICAgICAgQ3VycmVudEZyYW1lSXNOb3RGaW5pc2hlZCwKKyAgICAgICAg
Q3VycmVudEZyYW1lSXNGaW5pc2hlZCwKKyAgICAgICAgQWxsRnJhbWVzQXJlRmluaXNoZWQsCisg
ICAgfTsKKworICAgIC8vIFJlY2VpdmUgdGhlIGluZGl2aWR1YWwgY2h1bmtzIG9mIHNlcmlhbGl6
ZWQgZGF0YSB0byBiZSBzYXZlZC4KKyAgICAvLyBUaGUgcGFyYW1ldGVyIGZyYW1lVVJMIHNwZWNp
ZmllcyB3aGF0IGZyYW1lIHRoZSBkYXRhIGJlbG9uZ3MuIFRoZQorICAgIC8vIHBhcmFtZXRlciBk
YXRhIGNvbnRhaW5zIHRoZSBhdmFpbGFibGUgZGF0YSBmb3Igc2F2aW5nLiBUaGUgcGFyYW1ldGVy
CisgICAgLy8gc3RhdHVzIGluZGljYXRlcyB0aGUgc3RhdHVzIG9mIGRhdGEgc2VyaWFsaXphdGlv
bi4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2VyaWFsaXplRGF0YUZvckZyYW1lKGNvbnN0IFdlYlVS
TCYgZnJhbWVVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBXZWJTdHJpbmcmIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQYWdlU2VyaWFsaXphdGlvblN0YXR1cyBzdGF0dXMpID0gMDsKKyAgICBXZWJQYWdl
U2VyaWFsaXplckNsaWVudCgpIHsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+V2ViUGFn
ZVNlcmlhbGl6ZXJDbGllbnQoKSB7IH0KK307CisKK30gIC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlN0cmluZy5oIGIv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTdHJpbmcuaAppbmRleCBkOWI2NmIyLi5kZmY0ODY3
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlN0cmluZy5oCisrKyBiL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3RyaW5nLmgKQEAgLTg2LDYgKzg2LDEyIEBAIHB1Ymxp
YzoKIAogICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBmcm9tVVRGOChjb25zdCBjaGFy
KiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKICAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJTdHJpbmcg
ZnJvbVVURjgoY29uc3QgY2hhciogZGF0YSk7CisgICAgdGVtcGxhdGUgPGludCBOPiBXZWJTdHJp
bmcoY29uc3QgY2hhciAoJmRhdGEpW05dKQorICAgICAgICA6IG1fcHJpdmF0ZSgwKQorICAgIHsK
KyAgICAgICAgYXNzaWduKGZyb21VVEY4KGRhdGEsIE4gLSAxKSk7CisgICAgfQorICAgIFdFQktJ
VF9BUEkgV2ViU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgY2hhciogcyk7CiAKICNpZiBXRUJLSVRf
SU1QTEVNRU5UQVRJT04KICAgICBXZWJTdHJpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CkBA
IC05Niw2ICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgV2ViU3RyaW5nJiBvcGVyYXRvcj0oY29uc3Qg
V2ViQ29yZTo6QXRvbWljU3RyaW5nJik7CiAgICAgb3BlcmF0b3IgV2ViQ29yZTo6QXRvbWljU3Ry
aW5nKCkgY29uc3Q7CiAjZWxzZQorCiAgICAgV2ViU3RyaW5nKGNvbnN0IHN0cmluZzE2JiBzKSA6
IG1fcHJpdmF0ZSgwKQogICAgIHsKICAgICAgICAgYXNzaWduKHMuZGF0YSgpLCBzLmxlbmd0aCgp
KTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5j
cHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwCmluZGV4IGYz
NDljYzMuLmM0NjY5MmYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0
Y2hpbmdFbnVtcy5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0Vu
dW1zLmNwcApAQCAtMjQzLDYgKzI0MywyMCBAQCBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVN
KFdlYklucHV0RWxlbWVudDo6TW9udGgsIEhUTUxJbnB1dEVsZW1lbnQ6Ok1PTlRIKTsKIENPTVBJ
TEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViSW5wdXRFbGVtZW50OjpUaW1lLCBIVE1MSW5wdXRF
bGVtZW50OjpUSU1FKTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViSW5wdXRFbGVt
ZW50OjpXZWVrLCBIVE1MSW5wdXRFbGVtZW50OjpXRUVLKTsKIAorQ09NUElMRV9BU1NFUlRfTUFU
Q0hJTkdfRU5VTShXZWJOb2RlOjpFbGVtZW50Tm9kZSwgTm9kZTo6RUxFTUVOVF9OT0RFKTsKK0NP
TVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTm9kZTo6QXR0cmlidXRlTm9kZSwgTm9kZTo6
QVRUUklCVVRFX05PREUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJOb2RlOjpU
ZXh0Tm9kZSwgTm9kZTo6VEVYVF9OT0RFKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0o
V2ViTm9kZTo6Q0RhdGFTZWN0aW9uTm9kZSwgTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFKTsKK0NP
TVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTm9kZTo6RW50aXR5UmVmZXJlbmNlTm9kZSwg
Tm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VO
VU0oV2ViTm9kZTo6RW50aXR5Tm9kZSwgTm9kZTo6RU5USVRZX05PREUpOworQ09NUElMRV9BU1NF
UlRfTUFUQ0hJTkdfRU5VTShXZWJOb2RlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25zTm9kZSwgTm9k
ZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5H
X0VOVU0oV2ViTm9kZTo6Q29tbWVudE5vZGUsIE5vZGU6OkNPTU1FTlRfTk9ERSk7CitDT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk5vZGU6OkRvY3VtZW50Tm9kZSwgTm9kZTo6RE9DVU1F
TlRfTk9ERSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk5vZGU6OkRvY3VtZW50
VHlwZU5vZGUsIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERSk7CitDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdlYk5vZGU6OkRvY3VtZW50RnJhZ21lbnROb2RlLCBOb2RlOjpET0NVTUVOVF9G
UkFHTUVOVF9OT0RFKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTm9kZTo6Tm90
YXRpb25Ob2RlLCBOb2RlOjpOT1RBVElPTl9OT0RFKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5H
X0VOVU0oV2ViTm9kZTo6WFBhdGhOYW1lc3BhY2VOb2RlLCBOb2RlOjpYUEFUSF9OQU1FU1BBQ0Vf
Tk9ERSk7CisKICNpZiBFTkFCTEUoVklERU8pCiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVN
KFdlYk1lZGlhUGxheWVyOjpFbXB0eSwgTWVkaWFQbGF5ZXI6OkVtcHR5KTsKIENPTVBJTEVfQVNT
RVJUX01BVENISU5HX0VOVU0oV2ViTWVkaWFQbGF5ZXI6OklkbGUsIE1lZGlhUGxheWVyOjpJZGxl
KTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5j
cHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RPTVV0aWxpdGllc1ByaXZhdGUuY3BwCmluZGV4IGZm
ZGQ4NWQuLmMyYWFjZmIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvRE9NVXRpbGl0
aWVzUHJpdmF0ZS5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9ET01VdGlsaXRpZXNQcml2
YXRlLmNwcApAQCAtODQsNCArODQsNTQgQEAgU3RyaW5nIG5hbWVPZklucHV0RWxlbWVudChIVE1M
SW5wdXRFbGVtZW50KiBlbGVtZW50KQogICAgIHJldHVybiBXZWJJbnB1dEVsZW1lbnQoZWxlbWVu
dCkubmFtZUZvckF1dG9maWxsKCk7CiB9CiAKKworYm9vbCBlbGVtZW50SGFzTGVnYWxMaW5rQXR0
cmlidXRlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgaWYgKGF0dHJO
YW1lID09IEhUTUxOYW1lczo6c3JjQXR0cikgeworICAgICAgICAvLyBDaGVjayBzcmMgYXR0cmli
dXRlLgorICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZ1RhZykK
KyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHRUYWcp
CisgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lVGFn
KQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lVGFn
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSkgeworICAgICAgICAgICAgY29uc3QgSFRNTElucHV0
RWxlbWVudCogaW5wdXQgPQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTElucHV0
RWxlbWVudCo+KGVsZW1lbnQpOworICAgICAgICAgICAgaWYgKGlucHV0LT5pbnB1dFR5cGUoKSA9
PSBIVE1MSW5wdXRFbGVtZW50OjpJTUFHRSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjpocmVmQXR0
cikgeworICAgICAgICAvLyBDaGVjayBocmVmIGF0dHJpYnV0ZS4KKyAgICAgICAgaWYgKGVsZW1l
bnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaW5rVGFnKQorICAgICAgICAgICAgfHwgZWxlbWVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFUYWcpCisgICAgICAgICAgICB8fCBlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6YXJlYVRhZykpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IEhUTUxOYW1lczo6YWN0aW9uQXR0cikgeworICAg
ICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm1UYWcpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBIVE1MTmFtZXM6
OmJhY2tncm91bmRBdHRyKSB7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6Ym9keVRhZykKKyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp0YWJsZVRhZykKKyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp0clRhZykKKyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp0ZFRhZykpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGF0dHJO
YW1lID09IEhUTUxOYW1lczo6Y2l0ZUF0dHIpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpibG9ja3F1b3RlVGFnKQorICAgICAgICAgICAgfHwgZWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnFUYWcpCisgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6ZGVsVGFnKQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6Omluc1RhZykpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
IGVsc2UgaWYgKGF0dHJOYW1lID09IEhUTUxOYW1lczo6Y2xhc3NpZEF0dHIKKyAgICAgICAgICAg
ICAgIHx8IGF0dHJOYW1lID09IEhUTUxOYW1lczo6ZGF0YUF0dHIpIHsKKyAgICAgICAgaWYgKGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3RUYWcpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBIVE1MTmFtZXM6OmNvZGViYXNl
QXR0cikgeworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVj
dFRhZykKKyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphcHBs
ZXRUYWcpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL0RPTVV0aWxpdGllc1ByaXZhdGUuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRE9NVXRp
bGl0aWVzUHJpdmF0ZS5oCmluZGV4IGMwMmJmODQuLjI1M2FiM2YgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5oCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5oCkBAIC0zMiwxMSArMzIsMTMgQEAKICNkZWZpbmUg
RE9NVXRpbGl0aWVzUHJpdmF0ZV9oCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEVsZW1l
bnQ7CiBjbGFzcyBIVE1MSW5wdXRFbGVtZW50OwogY2xhc3MgSFRNTExpbmtFbGVtZW50OwogY2xh
c3MgSFRNTE1ldGFFbGVtZW50OwogY2xhc3MgSFRNTE9wdGlvbkVsZW1lbnQ7CiBjbGFzcyBOb2Rl
OworY2xhc3MgUXVhbGlmaWVkTmFtZTsKIGNsYXNzIFN0cmluZzsKIH0KIApAQCAtNTMsNiArNTUs
MTYgQEAgV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQqIHRvSFRNTE9wdGlvbkVsZW1lbnQoV2Vi
Q29yZTo6Tm9kZSopOwogLy8gRklYTUU6IERlcHJlY2F0ZS4gVXNlIFdlYklucHV0RWxlbWVudDo6
bmFtZUZvckF1dG9maWxsIGluc3RlYWQuCiBXZWJDb3JlOjpTdHJpbmcgbmFtZU9mSW5wdXRFbGVt
ZW50KFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqKTsKIAorLy8gRm9yIGltZywgc2NyaXB0LCBp
ZnJhbWUsIGZyYW1lIGVsZW1lbnQsIHdoZW4gYXR0cmlidXRlIG5hbWUgaXMgc3JjLAorLy8gZm9y
IGxpbmssIGEsIGFyZWEgZWxlbWVudCwgd2hlbiBhdHRyaWJ1dGUgbmFtZSBpcyBocmVmLAorLy8g
Zm9yIGZvcm0gZWxlbWVudCwgd2hlbiBhdHRyaWJ1dGUgbmFtZSBpcyBhY3Rpb24sCisvLyBmb3Ig
aW5wdXQsIHR5cGU9aW1hZ2UsIHdoZW4gYXR0cmlidXRlIG5hbWUgaXMgc3JjLAorLy8gZm9yIGJv
ZHksIHRhYmxlLCB0ciwgdGQsIHdoZW4gYXR0cmlidXRlIG5hbWUgaXMgYmFja2dyb3VuZCwKKy8v
IGZvciBibG9ja3F1b3RlLCBxLCBkZWwsIGlucywgd2hlbiBhdHRyaWJ1dGUgbmFtZSBpcyBjaXRl
LAorLy8gd2UgY2FuIGNvbnNpZGVyIHRoZSBhdHRyaWJ1dGUgdmFsdWUgaGFzIGxlZ2FsIGxpbmsu
Citib29sIGVsZW1lbnRIYXNMZWdhbExpbmtBdHRyaWJ1dGUoY29uc3QgV2ViQ29yZTo6RWxlbWVu
dCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJD
b3JlOjpRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAog
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRG9jdW1lbnQuY3Bw
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEb2N1bWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZDE0NGZjZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRG9jdW1lbnQuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYkRvY3VtZW50LmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MQWxsQ29sbGVjdGlvbi5oIgorI2lu
Y2x1ZGUgIkhUTUxCb2R5RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCisj
aW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCisjaW5jbHVkZSAiV2ViRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIldlYkZyYW1lSW1wbC5oIgorI2luY2x1ZGUgIldlYk5vZGVDb2xsZWN0aW9uLmgiCisj
aW5jbHVkZSAiV2ViVVJMLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworV2ViRG9jdW1lbnQ6OldlYkRvY3VtZW50KGNvbnN0IFBhc3NSZWZQdHI8
RG9jdW1lbnQ+JiBlbGVtKQorICAgIDogV2ViTm9kZShlbGVtLnJlbGVhc2VSZWYoKSkKK3sKK30K
KworV2ViRG9jdW1lbnQmIFdlYkRvY3VtZW50OjpvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxE
b2N1bWVudD4mIGVsZW0pCit7CisgICAgV2ViTm9kZTo6YXNzaWduKGVsZW0ucmVsZWFzZVJlZigp
KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYkRvY3VtZW50OjpvcGVyYXRvciBQYXNzUmVm
UHRyPERvY3VtZW50PigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8RG9jdW1lbnQ+
KHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9wcml2YXRlKSk7Cit9CisKK1dlYkZyYW1lKiBXZWJE
b2N1bWVudDo6ZnJhbWUoKSBjb25zdAoreworICAgIHJldHVybiBXZWJGcmFtZUltcGw6OmZyb21G
cmFtZShjb25zdFVud3JhcDxEb2N1bWVudD4oKS0+ZnJhbWUoKSk7Cit9CisKK2Jvb2wgV2ViRG9j
dW1lbnQ6OmlzSFRNTERvY3VtZW50KCkgY29uc3QKK3sgIAorICAgIHJldHVybiBjb25zdFVud3Jh
cDxEb2N1bWVudD4oKS0+aXNIVE1MRG9jdW1lbnQoKTsKK30KKworV2ViVVJMIFdlYkRvY3VtZW50
OjpiYXNlVVJMKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8RG9jdW1lbnQ+KCkt
PmJhc2VVUkwoKTsKK30KKworV2ViRWxlbWVudCBXZWJEb2N1bWVudDo6Ym9keSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIFdlYkVsZW1lbnQoY29uc3RVbndyYXA8RG9jdW1lbnQ+KCktPmJvZHkoKSk7
Cit9CisKK1dlYkVsZW1lbnQgV2ViRG9jdW1lbnQ6OmhlYWQoKQoreworICAgIHJldHVybiBXZWJF
bGVtZW50KHVud3JhcDxEb2N1bWVudD4oKS0+aGVhZCgpKTsKK30KKworV2ViTm9kZUNvbGxlY3Rp
b24gV2ViRG9jdW1lbnQ6OmFsbCgpCit7CisgICAgcmV0dXJuIFdlYk5vZGVDb2xsZWN0aW9uKHVu
d3JhcDxEb2N1bWVudD4oKS0+YWxsKCkpOworfQorCitXZWJVUkwgV2ViRG9jdW1lbnQ6OmNvbXBs
ZXRlVVJMKGNvbnN0IFdlYlN0cmluZyYgcGFydGlhbFVSTCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Y29uc3RVbndyYXA8RG9jdW1lbnQ+KCktPmNvbXBsZXRlVVJMKHBhcnRpYWxVUkwpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RWxlbWVudC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkVsZW1lbnQuY3BwCmluZGV4IDNm
MTNlZTEuLjU2OTgwZmUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRWxlbWVu
dC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFbGVtZW50LmNwcApAQCAtNTQsNSAr
NTQsMjEgQEAgV2ViRWxlbWVudDo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPEVsZW1lbnQ+KCkg
Y29uc3QKICAgICByZXR1cm4gUGFzc1JlZlB0cjxFbGVtZW50PihzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obV9wcml2YXRlKSk7CiB9CiAKK2Jvb2wgV2ViRWxlbWVudDo6aGFzVGFnTmFtZShjb25zdCBX
ZWJTdHJpbmcmIHRhZ05hbWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNl
KGNvbnN0VW53cmFwPEVsZW1lbnQ+KCktPnRhZ05hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGFnTmFtZS5vcGVyYXRvciBXZWJDb3JlOjpTdHJpbmcoKSk7Cit9CisKK2Jvb2wg
V2ViRWxlbWVudDo6aGFzQXR0cmlidXRlKGNvbnN0IFdlYlN0cmluZyYgYXR0ck5hbWUpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPEVsZW1lbnQ+KCktPmhhc0F0dHJpYnV0ZShhdHRy
TmFtZSk7Cit9CisKK1dlYlN0cmluZyBXZWJFbGVtZW50OjpnZXRBdHRyaWJ1dGUoY29uc3QgV2Vi
U3RyaW5nJiBhdHRyTmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8RWxlbWVu
dD4oKS0+Z2V0QXR0cmlidXRlKGF0dHJOYW1lKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRW50aXRpZXMuY3BwIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJFbnRpdGllcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNzI5N2M1MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRW50aXRpZXMuY3BwCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYkVudGl0aWVzLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU3RyaW5nQnVpbGRlci5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisvLyBOb3RlIHRoYXQgdGhpcyBmaWxlIGlz
IGFsc28gaW5jbHVkZWQgYnkgSFRNTFRva2VuaXplci5jcHAgc28gd2UgYXJlIGdldHRpbmcKKy8v
IHR3byBjb3BpZXMgb2YgdGhlIGRhdGEgaW4gbWVtb3J5LiAgV2UgY2FuIGZpeCB0aGlzIGJ5IGNo
YW5naW5nIHRoZSBzY3JpcHQKKy8vIHRoYXQgZ2VuZXJhdGVkIHRoZSBhcnJheSB0byBjcmVhdGUg
YSBzdGF0aWMgY29uc3QgdGhhdCBpcyBpdHMgbGVuZ3RoLCBidXQKKy8vIHRoaXMgaXMgbG93IHBy
aW9yaXR5IHNpbmNlIHRoZSBkYXRhIGlzIGxlc3MgdGhhbiA0Sy4gV2UgdXNlIGFub255bW91cwor
Ly8gbmFtZXNwYWNlIHRvIHByZXZlbnQgbmFtZSBjb2xsaXNpb25zLgorI2luY2x1ZGUgIkhUTUxF
bnRpdHlOYW1lcy5jIgorfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBwb3B1bGF0ZU1h
cChXVEY6Okhhc2hNYXA8aW50LCBXZWJDb3JlOjpTdHJpbmc+JiBtYXAsCisgICAgICAgICAgICAg
ICAgIGNvbnN0IEVudGl0eSogZW50aXRpZXMsCisgICAgICAgICAgICAgICAgIHNpemVfdCBlbnRp
dGllc0NvdW50LAorICAgICAgICAgICAgICAgICBib29sIHN0YW5kYXJkSFRNTCkKK3sKKyAgICBB
U1NFUlQobWFwLmlzRW1wdHkoKSk7CisgICAgY29uc3QgRW50aXR5KiBlbnRpdHkgPSAmZW50aXRp
ZXNbMF07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRpdGllc0NvdW50OyBpKyssIGVu
dGl0eSsrKSB7CisgICAgICAgIGludCBjb2RlID0gZW50aXR5LT5jb2RlOworICAgICAgICBTdHJp
bmcgbmFtZSA9IGVudGl0eS0+bmFtZTsKKyAgICAgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCB1c2Ug
dGhlIGxvd2UgY2FzZSBmb3IgZW50aXRpZXMgdGhhdCBoYXZlIGJvdGguCisgICAgICAgIGlmICht
YXAuY29udGFpbnMoY29kZSkgJiYgbWFwLmdldChjb2RlKSA9PSBuYW1lLmxvd2VyKCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgLy8gRG9uJ3QgcmVnaXN0ZXIgJnBlcmNudDssICZu
c3VwOyBhbmQgJnN1cGw7LgorICAgICAgICBpZiAoc3RhbmRhcmRIVE1MICYmIChjb2RlID09ICcl
JyB8fCBjb2RlID09IDB4MjI4NSB8fCBjb2RlID09IDB4MDBiOSkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgbWFwLnNldChjb2RlLCBuYW1lKTsKKyAgICB9CisgICAgaWYgKHN0YW5k
YXJkSFRNTCkKKyAgICAgICAgbWFwLnNldChzdGF0aWNfY2FzdDxpbnQ+KDB4MDAyNyksIFN0cmlu
ZygiIzM5IikpOworfQorCitzdGF0aWMgY29uc3QgRW50aXR5IHhtbEJ1aWx0SW5FbnRpdHlDb2Rl
c1tdID0geworICAgIHsgImx0IiwgMHgwMDNjIH0sCisgICAgeyAiZ3QiLCAweDAwM2UgfSwKKyAg
ICB7ICJhbXAiLCAweDAwMjYgfSwKKyAgICB7ICJhcG9zIiwgMHgwMDI3IH0sCisgICAgeyAicXVv
dCIsIDB4MDAyMiB9Cit9OworCitXZWJFbnRpdGllczo6V2ViRW50aXRpZXMoYm9vbCB4bWxFbnRp
dGllcykKK3sKKyAgICBpZiAoeG1sRW50aXRpZXMpCisgICAgICAgIHBvcHVsYXRlTWFwKG1fZW50
aXRpZXNNYXAsCisgICAgICAgICAgICAgICAgICAgIHhtbEJ1aWx0SW5FbnRpdHlDb2RlcywKKyAg
ICAgICAgICAgICAgICAgICAgc2l6ZW9mKHhtbEJ1aWx0SW5FbnRpdHlDb2RlcykgLyBzaXplb2Yo
RW50aXR5KSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAg
cG9wdWxhdGVNYXAobV9lbnRpdGllc01hcCwKKyAgICAgICAgICAgICAgICAgICAgd29yZGxpc3Qs
CisgICAgICAgICAgICAgICAgICAgIHNpemVvZih3b3JkbGlzdCkgLyBzaXplb2YoRW50aXR5KSwK
KyAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7Cit9CisKK1N0cmluZyBXZWJFbnRpdGllczo6ZW50
aXR5TmFtZUJ5Q29kZShpbnQgY29kZSkgY29uc3QKK3sKKyAgICBpZiAobV9lbnRpdGllc01hcC5j
b250YWlucyhjb2RlKSkKKyAgICAgICAgcmV0dXJuIG1fZW50aXRpZXNNYXAuZ2V0KGNvZGUpOwor
ICAgIHJldHVybiAiIjsKK30KKworU3RyaW5nIFdlYkVudGl0aWVzOjpjb252ZXJ0RW50aXRpZXNJ
blN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAoreworICAgIHVuc2lnbmVkIGxlbiA9
IHZhbHVlLmxlbmd0aCgpOworICAgIGNvbnN0IFVDaGFyKiBzdGFydFBvcyA9IHZhbHVlLmNoYXJh
Y3RlcnMoKTsKKyAgICBjb25zdCBVQ2hhciogY3VyUG9zID0gc3RhcnRQb3M7CisKKyAgICAvLyBG
SVhNRTogT3B0aW1pemUgLSBjcmVhdGUgU3RyaW5nQnVpbGRlciBvbmx5IGlmIHZhbHVlIGhhcyBh
bnkgZW50aXRpZXMuCisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgd2hpbGUgKGxlbi0t
KSB7CisgICAgICAgIGlmIChtX2VudGl0aWVzTWFwLmNvbnRhaW5zKCpjdXJQb3MpKSB7CisgICAg
ICAgICAgICAvLyBBcHBlbmQgY29udGVudCBiZWZvcmUgZW50aXR5IGNvZGUuCisgICAgICAgICAg
ICBpZiAoY3VyUG9zID4gc3RhcnRQb3MpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChT
dHJpbmcoc3RhcnRQb3MsIGN1clBvcyAtIHN0YXJ0UG9zKSk7CisgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCImIik7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fZW50aXRpZXNNYXAuZ2V0
KCpjdXJQb3MpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIjsiKTsKKyAgICAgICAgICAg
IHN0YXJ0UG9zID0gKytjdXJQb3M7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjdXJQ
b3MrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBBcHBlbmQgdGhlIHJlbWFpbmluZyBjb250
ZW50LgorICAgIGlmIChjdXJQb3MgPiBzdGFydFBvcykKKyAgICAgICAgcmVzdWx0LmFwcGVuZChT
dHJpbmcoc3RhcnRQb3MsIGN1clBvcyAtIHN0YXJ0UG9zKSk7CisKKyAgICByZXR1cm4gcmVzdWx0
LnRvU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJFbnRpdGllcy5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJF
bnRpdGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkM2MzMTAKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkVudGl0aWVzLmgKQEAgLTAs
MCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgV2ViRW50aXRpZXNfaAorI2RlZmluZSBXZWJFbnRpdGllc19oCisK
KyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJFbnRpdGllcyB7CitwdWJsaWM6CisgICAg
Ly8gJmFwb3M7LCAmcGVyY250OywgJm5zdXA7LCAmc3VwbDsgYXJlIG5vdCBkZWZpbmVkIGJ5IHRo
ZSBIVE1MIHN0YW5kYXJkcy4KKyAgICAvLyAgLSBJRSBkb2VzIG5vdCBzdXBwb3J0ICZhcG9zOyBh
cyBhbiBIVE1MIGVudGl0eSAoYnV0IHN1cHBvcnQgaXQgYXMgYW4gWE1MCisgICAgLy8gICAgZW50
aXR5LikKKyAgICAvLyAgLSBGaXJlZm94IHN1cHBvcnRzICZhcG9zOyBhcyBhbiBIVE1MIGVudGl0
eS4KKyAgICAvLyAgLSBCb3RoIG9mIElFIGFuZCBGaXJlZm94IGRvbid0IHN1cHBvcnQgJnBlcmNu
dDssICZuc3VwOyBhbmQgJnN1cGw7LgorICAgIC8vCisgICAgLy8gQSB3ZWIgcGFnZSBzYXZlZCBi
eSBDaHJvbWl1bSBzaG91bGQgYmUgYWJsZSB0byBiZSByZWFkIGJ5IG90aGVyIGJyb3dzZXJzCisg
ICAgLy8gc3VjaCBhcyBJRSBhbmQgRmlyZWZveC4gIENocm9taXVtIHNob3VsZCBwcm9kdWNlIG9u
bHkgdGhlIHN0YW5kYXJkIGVudGl0eQorICAgIC8vIHJlZmVyZW5jZXMgd2hpY2ggb3RoZXIgYnJv
d3NlcnMgY2FuIHJlY29nbml6ZS4KKyAgICAvLyBTbyBpZiBzdGFuZGFyZF9odG1sX2VudGl0aWVz
XyBpcyB0cnVlLCB3ZSB3aWxsIHVzZSBhIG51bWVyaWMgY2hhcmFjdGVyCisgICAgLy8gcmVmZXJl
bmNlIGZvciAmYXBvczssIGFuZCBkb24ndCB1c2UgZW50aXR5IHJlZmVyZW5jZXMgZm9yICZwZXJj
bnQ7LCAmbnN1cDsKKyAgICAvLyBhbmQgJnN1cGw7IGZvciBzZXJpYWxpemF0aW9uLgorICAgIC8v
CisgICAgLy8gSWYgeG1sRW50aXRpZXMgaXMgdHJ1ZSwgV2ViRW50aXRpZXMgd2lsbCBvbmx5IGNv
bnRhaW4gc3RhbmRhcmQgWE1MCisgICAgLy8gZW50aXRpZXMuCisgICAgZXhwbGljaXQgV2ViRW50
aXRpZXMoYm9vbCB4bWxFbnRpdGllcyk7CisKKyAgICAvLyBDaGVjayB3aGV0aGVyIHNwZWNpZmll
ZCB1bmljb2RlIGhhcyBjb3JyZXNwb25kaW5nIGh0bWwgb3IgeG1sIGJ1aWx0LWluCisgICAgLy8g
ZW50aXR5IG5hbWUuIElmIHllcywgcmV0dXJuIHRoZSBlbnRpdHkgbm90YXRpb24uIElmIG5vdCwg
cmV0dXJucyBhbgorICAgIC8vIGVtcHR5IHN0cmluZy4gUGFyYW1ldGVyIGlzSFRNTCBpbmRpY2F0
ZXMgY2hlY2sgdGhlIGNvZGUgaW4gaHRtbCBlbnRpdHkKKyAgICAvLyBtYXAgb3IgaW4geG1sIGVu
dGl0eSBtYXAuCisgICAgV2ViQ29yZTo6U3RyaW5nIGVudGl0eU5hbWVCeUNvZGUoaW50IGNvZGUp
IGNvbnN0OworCisgICAgLy8gUmV0dXJucyBhIG5ldyBzdHJpbmcgd2l0aCBjb3JyZXNwb25kaW5n
IGVudGl0eSBuYW1lcyByZXBsYWNlZC4KKyAgICBXZWJDb3JlOjpTdHJpbmcgY29udmVydEVudGl0
aWVzSW5TdHJpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJikgY29uc3Q7Citwcml2YXRlOgorICAg
IHR5cGVkZWYgSGFzaE1hcDxpbnQsIFdlYkNvcmU6OlN0cmluZz4gRW50aXRpZXNNYXBUeXBlOwor
ICAgIC8vIEFuIGludGVybmFsIG9iamVjdCB0aGF0IG1hcHMgdGhlIFVuaWNvZGUgY2hhcmFjdGVy
IHRvIGNvcnJlc3BvbmRpbmcKKyAgICAvLyBlbnRpdHkgbm90YXRpb24uCisgICAgRW50aXRpZXNN
YXBUeXBlIG1fZW50aXRpZXNNYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKaW5kZXggMDZkMzk0Zi4uN2NiZjRl
ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCisrKyBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcApAQCAtMTIyLDYgKzEyMiw3IEBA
CiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2ViQ29uc29sZU1lc3NhZ2Uu
aCIKICNpbmNsdWRlICJXZWJEYXRhU291cmNlSW1wbC5oIgorI2luY2x1ZGUgIldlYkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiV2ViRmluZE9wdGlvbnMuaCIKICNpbmNsdWRlICJXZWJGb3JtRWxlbWVu
dC5oIgogI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCkBAIC0zNDMsNiArMzQ0LDEyIEBAIFdl
YkZyYW1lKiBXZWJGcmFtZTo6ZnJhbWVGb3JDdXJyZW50Q29udGV4dCgpCiAgICAgcmV0dXJuIFdl
YkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGZyYW1lKTsKIH0KIAorV2ViRnJhbWUqIFdlYkZyYW1lOjpm
cm9tRnJhbWVPd25lckVsZW1lbnQoY29uc3QgV2ViRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBy
ZXR1cm4gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWVPd25lckVsZW1lbnQoCisgICAgICAgIFBhc3NS
ZWZQdHI8RWxlbWVudD4oZWxlbWVudCkuZ2V0KCkpOworfQorCiBXZWJTdHJpbmcgV2ViRnJhbWVJ
bXBsOjpuYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9mcmFtZS0+dHJlZSgpLT5uYW1lKCk7
CkBAIC0zOTEsNiArMzk4LDExIEBAIFdlYlVSTCBXZWJGcmFtZUltcGw6Om9wZW5TZWFyY2hEZXNj
cmlwdGlvblVSTCgpIGNvbnN0CiAgICAgcmV0dXJuIFdlYlVSTCgpOwogfQogCitXZWJTdHJpbmcg
V2ViRnJhbWVJbXBsOjplbmNvZGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZyYW1lKCktPmxv
YWRlcigpLT5lbmNvZGluZygpOworfQorCiBXZWJTaXplIFdlYkZyYW1lSW1wbDo6c2Nyb2xsT2Zm
c2V0KCkgY29uc3QKIHsKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZVZpZXcoKTsKQEAgLTUx
NSw2ICs1MjcsMTMgQEAgV2ViRnJhbWUqIFdlYkZyYW1lSW1wbDo6ZmluZENoaWxkQnlFeHByZXNz
aW9uKGNvbnN0IFdlYlN0cmluZyYgeHBhdGgpIGNvbnN0CiAgICAgcmV0dXJuIGZyb21GcmFtZShm
cmFtZUVsZW1lbnQtPmNvbnRlbnRGcmFtZSgpKTsKIH0KIAorV2ViRG9jdW1lbnQgV2ViRnJhbWVJ
bXBsOjpkb2N1bWVudCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5k
b2N1bWVudCgpKQorICAgICAgICByZXR1cm4gV2ViRG9jdW1lbnQoKTsKKyAgICByZXR1cm4gV2Vi
RG9jdW1lbnQobV9mcmFtZS0+ZG9jdW1lbnQoKSk7Cit9CisKIHZvaWQgV2ViRnJhbWVJbXBsOjpm
b3JtcyhXZWJWZWN0b3I8V2ViRm9ybUVsZW1lbnQ+JiByZXN1bHRzKSBjb25zdAogewogICAgIGlm
ICghbV9mcmFtZSkKQEAgLTE2MTksNiArMTYzOCwxOSBAQCBXZWJGcmFtZUltcGwqIFdlYkZyYW1l
SW1wbDo6ZnJvbUZyYW1lKEZyYW1lKiBmcmFtZSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJh
bWVMb2FkZXJDbGllbnRJbXBsKj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPndlYkZyYW1l
KCk7CiB9CiAKK1dlYkZyYW1lSW1wbCogV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWVPd25lckVsZW1l
bnQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBpZiAoIWVsZW1lbnQKKyAgICAgICAgfHwgIWVs
ZW1lbnQtPmlzRnJhbWVPd25lckVsZW1lbnQoKQorICAgICAgICB8fCAoIWVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjppZnJhbWVUYWcpCisgICAgICAgICAgICAmJiAhZWxlbWVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lVGFnKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
SFRNTEZyYW1lT3duZXJFbGVtZW50KiBmcmFtZUVsZW1lbnQgPQorICAgICAgICBzdGF0aWNfY2Fz
dDxIVE1MRnJhbWVPd25lckVsZW1lbnQqPihlbGVtZW50KTsKKyAgICByZXR1cm4gZnJvbUZyYW1l
KGZyYW1lRWxlbWVudC0+Y29udGVudEZyYW1lKCkpOworfQorICAgIAogV2ViVmlld0ltcGwqIFdl
YkZyYW1lSW1wbDo6dmlld0ltcGwoKSBjb25zdAogewogICAgIGlmICghbV9mcmFtZSkKZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmggYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkZyYW1lSW1wbC5oCmluZGV4IDA1MDY3NWIuLjY1OWU3ZjggMTAwNjQ0Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGcmFtZUltcGwuaApAQCAtNjUsNiArNjUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBXZWJVUkwgdXJsKCkgY29uc3Q7CiAgICAgdmlydHVhbCBXZWJVUkwgZmF2SWNvblVSTCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgV2ViVVJMIG9wZW5TZWFyY2hEZXNjcmlwdGlvblVSTCgpIGNvbnN0
OworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGVuY29kaW5nKCkgY29uc3Q7CiAgICAgdmlydHVhbCBX
ZWJTaXplIHNjcm9sbE9mZnNldCgpIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViU2l6ZSBjb250ZW50
c1NpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBjb250ZW50c1ByZWZlcnJlZFdpZHRoKCkg
Y29uc3Q7CkBAIC04Miw2ICs4Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYkZyYW1lKiB0
cmF2ZXJzZVByZXZpb3VzKGJvb2wgd3JhcCkgY29uc3Q7CiAgICAgdmlydHVhbCBXZWJGcmFtZSog
ZmluZENoaWxkQnlOYW1lKGNvbnN0IFdlYlN0cmluZyYpIGNvbnN0OwogICAgIHZpcnR1YWwgV2Vi
RnJhbWUqIGZpbmRDaGlsZEJ5RXhwcmVzc2lvbihjb25zdCBXZWJTdHJpbmcmKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFdlYkRvY3VtZW50IGRvY3VtZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IGZvcm1zKFdlYlZlY3RvcjxXZWJGb3JtRWxlbWVudD4mKSBjb25zdDsKICAgICB2aXJ0dWFsIFdl
YlNlY3VyaXR5T3JpZ2luIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IGdyYW50VW5pdmVyc2FsQWNjZXNzKCk7CkBAIC0xNTcsNyArMTU5LDYgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgV2ViVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFdlYlN0cmluZyYgdXJsKSBjb25zdDsK
ICAgICB2aXJ0dWFsIFdlYlN0cmluZyBjb250ZW50QXNUZXh0KHNpemVfdCBtYXhDaGFycykgY29u
c3Q7CiAgICAgdmlydHVhbCBXZWJTdHJpbmcgY29udGVudEFzTWFya3VwKCkgY29uc3Q7Ci0KICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJGcmFtZUltcGw+IGNyZWF0ZShXZWJGcmFtZUNsaWVudCog
Y2xpZW50KTsKICAgICB+V2ViRnJhbWVJbXBsKCk7CiAKQEAgLTE3NCw2ICsxNzUsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjcmVhdGVGcmFtZVZpZXcoKTsKIAogICAgIHN0YXRpYyBXZWJGcmFtZUlt
cGwqIGZyb21GcmFtZShXZWJDb3JlOjpGcmFtZSogZnJhbWUpOworICAgIHN0YXRpYyBXZWJGcmFt
ZUltcGwqIGZyb21GcmFtZU93bmVyRWxlbWVudChXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50KTsK
IAogICAgIFdlYlZpZXdJbXBsKiB2aWV3SW1wbCgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYk5vZGUuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOb2Rl
LmNwcAppbmRleCA5NjVjNDEyLi5iMDBkMWY1IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYk5vZGUuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZS5jcHAKQEAg
LTM1LDkgKzM1LDE0IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRl
ckNsaWVudEltcGwuaCIKICNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIK
KyNpbmNsdWRlICJtYXJrdXAuaCIKIAorI2luY2x1ZGUgIldlYkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5jbHVkZSAiV2ViTm9kZUxpc3QuaCIKICNpbmNsdWRlICJX
ZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJWZWN0b3IuaCIKIAogI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CiAKQEAgLTYxLDYgKzY2LDExIEBAIHZvaWQgV2ViTm9kZTo6YXNzaWduKGNvbnN0
IFdlYk5vZGUmIG90aGVyKQogICAgIGFzc2lnbihwKTsKIH0KIAorV2ViTm9kZTo6Tm9kZVR5cGUg
V2ViTm9kZTo6bm9kZVR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxOb2Rl
VHlwZT4obV9wcml2YXRlLT5ub2RlVHlwZSgpKTsKK30KKwogV2ViTm9kZSBXZWJOb2RlOjpwYXJl
bnROb2RlKCkgY29uc3QKIHsKICAgICByZXR1cm4gUGFzc1JlZlB0cjxOb2RlPihjb25zdF9jYXN0
PE5vZGUqPihtX3ByaXZhdGUtPnBhcmVudE5vZGUoKSkpOwpAQCAtNzEsMTggKzgxLDIzIEBAIFdl
YlN0cmluZyBXZWJOb2RlOjpub2RlTmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
bm9kZU5hbWUoKTsKIH0KIAotV2ViTm9kZTo6V2ViTm9kZShjb25zdCBXVEY6OlBhc3NSZWZQdHI8
V2ViQ29yZTo6Tm9kZT4mIG5vZGUpCitXZWJTdHJpbmcgV2ViTm9kZTo6bm9kZVZhbHVlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5ub2RlVmFsdWUoKTsKK30KKworV2ViTm9kZTo6
V2ViTm9kZShjb25zdCBQYXNzUmVmUHRyPE5vZGU+JiBub2RlKQogICAgIDogbV9wcml2YXRlKHN0
YXRpY19jYXN0PFdlYk5vZGVQcml2YXRlKj4obm9kZS5yZWxlYXNlUmVmKCkpKQogewogfQogCi1X
ZWJOb2RlJiBXZWJOb2RlOjpvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6
Ok5vZGU+JiBub2RlKQorV2ViTm9kZSYgV2ViTm9kZTo6b3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQ
dHI8Tm9kZT4mIG5vZGUpCiB7CiAgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYk5vZGVQcml2YXRl
Kj4obm9kZS5yZWxlYXNlUmVmKCkpKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLVdlYk5vZGU6
Om9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpOb2RlPigpIGNvbnN0CitXZWJOb2Rl
OjpvcGVyYXRvciBQYXNzUmVmUHRyPE5vZGU+KCkgY29uc3QKIHsKICAgICByZXR1cm4gUGFzc1Jl
ZlB0cjxOb2RlPihjb25zdF9jYXN0PFdlYk5vZGVQcml2YXRlKj4obV9wcml2YXRlKSk7CiB9CkBA
IC0xMDAsNCArMTE1LDU0IEBAIFdlYkZyYW1lKiBXZWJOb2RlOjpmcmFtZSgpIGNvbnN0CiAgICAg
cmV0dXJuIFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKG1fcHJpdmF0ZS0+ZG9jdW1lbnQoKS0+ZnJh
bWUoKSk7CiB9CiAKK1dlYkRvY3VtZW50IFdlYk5vZGU6OmRvY3VtZW50KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gV2ViRG9jdW1lbnQobV9wcml2YXRlLT5kb2N1bWVudCgpKTsKK30KKworV2ViTm9k
ZSBXZWJOb2RlOjpmaXJzdENoaWxkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViTm9kZShtX3By
aXZhdGUtPmZpcnN0Q2hpbGQoKSk7Cit9CisKK1dlYk5vZGUgV2ViTm9kZTo6bGFzdENoaWxkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gV2ViTm9kZShtX3ByaXZhdGUtPmxhc3RDaGlsZCgpKTsKK30K
KworV2ViTm9kZSBXZWJOb2RlOjpwcmV2aW91c1NpYmxpbmcoKSBjb25zdAoreworICAgIHJldHVy
biBXZWJOb2RlKG1fcHJpdmF0ZS0+cHJldmlvdXNTaWJsaW5nKCkpOworfQorCitXZWJOb2RlIFdl
Yk5vZGU6Om5leHRTaWJsaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViTm9kZShtX3ByaXZh
dGUtPm5leHRTaWJsaW5nKCkpOworfQorCitib29sIFdlYk5vZGU6Omhhc0NoaWxkTm9kZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmhhc0NoaWxkTm9kZXMoKTsKK30KKworV2Vi
Tm9kZUxpc3QgV2ViTm9kZTo6Y2hpbGROb2RlcygpCit7CisgICAgcmV0dXJuIFdlYk5vZGVMaXN0
KG1fcHJpdmF0ZS0+Y2hpbGROb2RlcygpKTsKK30KKworV2ViU3RyaW5nIFdlYk5vZGU6OmNyZWF0
ZU1hcmt1cCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNvcmU6OmNyZWF0ZU1hcmt1cChtX3By
aXZhdGUpOworfQorCitib29sIFdlYk5vZGU6OmlzVGV4dE5vZGUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ByaXZhdGUtPmlzVGV4dE5vZGUoKTsKK30KKworYm9vbCBXZWJOb2RlOjppc0VsZW1l
bnROb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc0VsZW1lbnROb2RlKCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJOb2RlQ29sbGVjdGlvbi5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5vZGVD
b2xsZWN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWU1MzJm
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOb2RlQ29sbGVjdGlv
bi5jcHAKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJO
b2RlQ29sbGVjdGlvbi5oIgorCisjaW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKKyNpbmNsdWRl
ICJOb2RlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworI2luY2x1ZGUgIldlYk5v
ZGUuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgewor
Cit2b2lkIFdlYk5vZGVDb2xsZWN0aW9uOjpyZXNldCgpCit7CisgICAgYXNzaWduKDApOworfQor
Cit2b2lkIFdlYk5vZGVDb2xsZWN0aW9uOjphc3NpZ24oY29uc3QgV2ViTm9kZUNvbGxlY3Rpb24m
IG90aGVyKQoreworICAgIEhUTUxDb2xsZWN0aW9uKiBwID0gY29uc3RfY2FzdDxIVE1MQ29sbGVj
dGlvbio+KG90aGVyLm1fcHJpdmF0ZSk7CisgICAgaWYgKHApCisgICAgICAgIHAtPnJlZigpOwor
ICAgIGFzc2lnbihwKTsKK30KKworV2ViTm9kZUNvbGxlY3Rpb246OldlYk5vZGVDb2xsZWN0aW9u
KGNvbnN0IFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+JiBjb2wpCisgICAgOiBtX3ByaXZhdGUo
c3RhdGljX2Nhc3Q8SFRNTENvbGxlY3Rpb24qPihjb2wucmVsZWFzZVJlZigpKSkKK3sKK30KKwor
dm9pZCBXZWJOb2RlQ29sbGVjdGlvbjo6YXNzaWduKEhUTUxDb2xsZWN0aW9uKiBwKQoreworICAg
IC8vIHAgaXMgYWxyZWFkeSByZWYnZCBmb3IgdXMgYnkgdGhlIGNhbGxlcgorICAgIGlmIChtX3By
aXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICBtX3ByaXZhdGUgPSBwOwor
fQorCit1bnNpZ25lZCBXZWJOb2RlQ29sbGVjdGlvbjo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5sZW5ndGgoKTsKK30KKworV2ViTm9kZSBXZWJOb2RlQ29sbGVjdGlv
bjo6bmV4dEl0ZW0oKSBjb25zdAoreworICAgIHJldHVybiBXZWJOb2RlKG1fcHJpdmF0ZS0+bmV4
dEl0ZW0oKSk7Cit9CisKK1dlYk5vZGUgV2ViTm9kZUNvbGxlY3Rpb246OmZpcnN0SXRlbSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFdlYk5vZGUobV9wcml2YXRlLT5maXJzdEl0ZW0oKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJOb2RlTGlzdC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5vZGVMaXN0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjU4NWU0Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOb2RlTGlzdC5jcHAKQEAgLTAsMCArMSw4MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJOb2RlTGlzdC5oIgorCisjaW5jbHVkZSAi
Tm9kZUxpc3QuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKworI2luY2x1ZGUgIldlYk5vZGUuaCIKKworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViTm9kZUxpc3Q6OnJlc2V0KCkKK3sKKyAg
ICBhc3NpZ24oMCk7Cit9CisKK3ZvaWQgV2ViTm9kZUxpc3Q6OmFzc2lnbihjb25zdCBXZWJOb2Rl
TGlzdCYgb3RoZXIpCit7CisgICAgTm9kZUxpc3QqIHAgPSBjb25zdF9jYXN0PE5vZGVMaXN0Kj4o
b3RoZXIubV9wcml2YXRlKTsKKyAgICBpZiAocCkKKyAgICAgICAgcC0+cmVmKCk7CisgICAgYXNz
aWduKHApOworfQorCitXZWJOb2RlTGlzdDo6V2ViTm9kZUxpc3QoY29uc3QgUGFzc1JlZlB0cjxO
b2RlTGlzdD4mIGNvbCkKKyAgICA6IG1fcHJpdmF0ZShzdGF0aWNfY2FzdDxOb2RlTGlzdCo+KGNv
bC5yZWxlYXNlUmVmKCkpKQoreworfQorCit2b2lkIFdlYk5vZGVMaXN0Ojphc3NpZ24oTm9kZUxp
c3QqIHApCit7CisgICAgLy8gcCBpcyBhbHJlYWR5IHJlZidkIGZvciB1cyBieSB0aGUgY2FsbGVy
CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5kZXJlZigpOworICAgIG1f
cHJpdmF0ZSA9IHA7Cit9CisKK3Vuc2lnbmVkIFdlYk5vZGVMaXN0OjpsZW5ndGgoKSBjb25zdAor
eworICAgIHJldHVybiBtX3ByaXZhdGUtPmxlbmd0aCgpOworfQorCitXZWJOb2RlIFdlYk5vZGVM
aXN0OjppdGVtKHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViTm9kZShtX3By
aXZhdGUtPml0ZW0oaW5kZXgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcCBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmFiMGJlZTcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorI2luY2x1ZGUgIktVUkwuaCIKKworI2luY2x1ZGUgIldlYkZyYW1lLmgiCisj
aW5jbHVkZSAiV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJQYWdlU2Vy
aWFsaXplckltcGwuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJWZWN0
b3IuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitib29sIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUo
V2ViRnJhbWUqIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
cmVjdXJzaXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlBhZ2VTZXJp
YWxpemVyQ2xpZW50KiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgV2ViVmVjdG9yPFdlYlVSTD4mIGxpbmtzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBsb2NhbFBhdGhzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbG9jYWxEaXJlY3Rv
cnlOYW1lKQoreworICAgIFdlYlBhZ2VTZXJpYWxpemVySW1wbCBzZXJpYWxpemVySW1wbCgKKyAg
ICAgICAgZnJhbWUsIHJlY3Vyc2l2ZSwgY2xpZW50LCBsaW5rcywgbG9jYWxQYXRocywgbG9jYWxE
aXJlY3RvcnlOYW1lKTsKKyAgICByZXR1cm4gc2VyaWFsaXplckltcGwuc2VyaWFsaXplKCk7Cit9
CisKK1dlYlN0cmluZyBXZWJQYWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVNZXRhQ2hhcnNldERlY2xh
cmF0aW9uKGNvbnN0IFdlYlN0cmluZyYgY2hhcnNldCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpm
b3JtYXQoIjxNRVRBIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9o
dG1sOyBjaGFyc2V0PSVzXCI+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldC51
dGY4KCkuZGF0YSgpKTsKK30KKworV2ViU3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0
ZU1hcmtPZlRoZVdlYkRlY2xhcmF0aW9uKGNvbnN0IFdlYlVSTCYgdXJsKQoreworICAgIHJldHVy
biBTdHJpbmc6OmZvcm1hdCgiXG48IS0tIHNhdmVkIGZyb20gdXJsPSglMDRkKSVzIC0tPlxuIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pih1cmwuc3BlYygpLmxl
bmd0aCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsLnNwZWMoKS5kYXRhKCkpOwor
fQorCitXZWJTdHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlQmFzZVRhZ0RlY2xhcmF0
aW9uKGNvbnN0IFdlYlN0cmluZyYgYmFzZVRhcmdldCkKK3sKKyAgICBTdHJpbmcgdGFyZ2V0RGVj
bGFyYXRpb247CisgICAgaWYgKCFiYXNlVGFyZ2V0LmlzRW1wdHkoKSkKKyAgICAgICAgdGFyZ2V0
RGVjbGFyYXRpb24gPSBTdHJpbmc6OmZvcm1hdCgiIHRhcmdldD1cIiVzXCIiLCBiYXNlVGFyZ2V0
LnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiPEJBU0UgaHJlZj1c
Ii5cIiVzPiIsIHRhcmdldERlY2xhcmF0aW9uLnV0ZjgoKS5kYXRhKCkpOworfQorCit9ICAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VT
ZXJpYWxpemVySW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVy
SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM1ODQwZQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBs
LmNwcApAQCAtMCwwICsxLDU0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIEhvdyB3ZSBoYW5kbGUgdGhlIGJhc2UgdGFnIGJldHRl
ci4KKy8vIEN1cnJlbnQgc3RhdHVzOgorLy8gQXQgbm93IHRoZSBub3JtYWwgd2F5IHdlIHVzZSB0
byBoYW5kbGluZyBiYXNlIHRhZyBpcworLy8gYSkgRm9yIHRob3NlIGxpbmtzIHdoaWNoIGhhdmUg
Y29ycmVzcG9uZGluZyBsb2NhbCBzYXZlZCBmaWxlcywgc3VjaCBhcworLy8gc2F2YWJsZSBDU1Ms
IEphdmFTY3JpcHQgZmlsZXMsIHRoZXkgd2lsbCBiZSB3cml0dGVuIHRvIHJlbGF0aXZlIFVSTHMg
d2hpY2gKKy8vIHBvaW50IHRvIGxvY2FsIHNhdmVkIGZpbGUuIFdoeSB0aG9zZSBsaW5rcyBjYW4g
bm90IGJlIHJlc29sdmVkIGFzIGFic29sdXRlCisvLyBmaWxlIFVSTHMsIGJlY2F1c2UgaWYgdGhl
eSBhcmUgcmVzb2x2ZWQgYXMgYWJzb2x1dGUgVVJMcywgYWZ0ZXIgbW92aW5nIHRoZQorLy8gZmls
ZSBsb2NhdGlvbiBmcm9tIG9uZSBkaXJlY3RvcnkgdG8gYW5vdGhlciBkaXJlY3RvcnksIHRoZSBm
aWxlIFVSTHMgd2lsbAorLy8gYmUgZGVhZCBsaW5rcy4KKy8vIGIpIEZvciB0aG9zZSBsaW5rcyB3
aGljaCBoYXZlIG5vdCBjb3JyZXNwb25kaW5nIGxvY2FsIHNhdmVkIGZpbGVzLCBzdWNoIGFzCisv
LyBsaW5rcyBpbiBBLCBBUkVBIHRhZ3MsIHRoZXkgd2lsbCBiZSByZXNvbHZlZCBhcyBhYnNvbHV0
ZSBVUkxzLgorLy8gYykgV2UgY29tbWVudCBhbGwgYmFzZSB0YWdzIHdoZW4gc2VyaWFsemluZyBE
T00gZm9yIHRoZSBwYWdlLgorLy8gRmlyZUZveCBhbHNvIHVzZXMgYWJvdmUgd2F5IHRvIGhhbmRs
ZSBiYXNlIHRhZy4KKy8vCisvLyBQcm9ibGVtOgorLy8gVGhpcyB3YXkgY2FuIG5vdCBoYW5kbGUg
dGhlIGZvbGxvd2luZyBzaXR1YXRpb246CisvLyB0aGUgYmFzZSB0YWcgaXMgd3JpdHRlbiBieSBK
YXZhU2NyaXB0LgorLy8gRm9yIGV4YW1wbGUuIFRoZSBwYWdlICJ3d3cueWFob28uY29tIiB1c2UK
Ky8vICJkb2N1bWVudC53cml0ZSgnPGJhc2UgaHJlZj0iaHR0cDovL3d3dy55YWhvby5jb20vIi4u
LicpOyIgdG8gc2V0dXAgYmFzZSBVUkwKKy8vIG9mIHBhZ2Ugd2hlbiBsb2FkaW5nIHBhZ2UuIFNv
IHdoZW4gc2F2aW5nIHBhZ2UgYXMgY29tcGxldGVkLUhUTUwsIHdlIGFzc3VtZQorLy8gdGhhdCB3
ZSBzYXZlICJ3d3cueWFob28uY29tIiB0byAiYzpceWFob28uaHRtIi4gQWZ0ZXIgdGhlbiB3ZSBs
b2FkIHRoZSBzYXZlZAorLy8gY29tcGxldGVkLUhUTUwgcGFnZSwgdGhlbiB0aGUgSmF2YVNjcmlw
dCB3aWxsIGluc2VydCBhIGJhc2UgdGFnCisvLyA8YmFzZSBocmVmPSJodHRwOi8vd3d3LnlhaG9v
LmNvbS8iLi4uPiB0byBET00sIHNvIGFsbCBVUkxzIHdoaWNoIHBvaW50IHRvCisvLyBsb2NhbCBz
YXZlZCByZXNvdXJjZSBmaWxlcyB3aWxsIGJlIHJlc29sdmVkIGFzCisvLyAiaHR0cDovL3d3dy55
YWhvby5jb20veWFob29fZmlsZXMvLi4uIiwgd2hpY2ggd2lsbCBjYXVzZSBhbGwgc2F2ZWQgIHJl
c291cmNlCisvLyBmaWxlcyBjYW4gbm90IGJlIGxvYWRlZCBjb3JyZWN0bHkuIEFsc28gdGhlIHBh
Z2Ugd2lsbCBiZSByZW5kZXJlZCB1Z2x5IHNpbmNlCisvLyBhbGwgc2F2ZWQgc3ViLXJlc291cmNl
IGZpbGVzIChzdWNoIGFzIENTUywgSmF2YVNjcmlwdCBmaWxlcykgYW5kIHN1Yi1mcmFtZQorLy8g
ZmlsZXMgY2FuIG5vdCBiZSBmZXRjaGVkLgorLy8gTm93IEZpcmVGb3gsIElFIGFuZCBXZWJLaXQg
YmFzZWQgQnJvd3NlciBhbGwgaGF2ZSB0aGlzIHByb2JsZW0uCisvLworLy8gU29sdXRpb246Cisv
LyBNeSBzb2x1dGlvbiBpcyB0aGF0IHdlIGNvbW1lbnQgb2xkIGJhc2UgdGFnIGFuZCB3cml0ZSBu
ZXcgYmFzZSB0YWc6CisvLyA8YmFzZSBocmVmPSIuIiAuLi4+IGFmdGVyIHRoZSBwcmV2aW91cyBj
b21tZW50ZWQgYmFzZSB0YWcuIEluIFdlYktpdCwgaXQKKy8vIGFsd2F5cyB1c2VzIHRoZSBsYXRl
c3QgImhyZWYiIGF0dHJpYnV0ZSBvZiBiYXNlIHRhZyB0byBzZXQgZG9jdW1lbnQncyBiYXNlCisv
LyBVUkwuIEJhc2VkIG9uIHRoaXMgYmVoYXZpb3IsIHdoZW4gd2UgZW5jb3VudGVyIGEgYmFzZSB0
YWcsIHdlIGNvbW1lbnQgaXQgYW5kCisvLyB3cml0ZSBhIG5ldyBiYXNlIHRhZyA8YmFzZSBocmVm
PSIuIj4gYWZ0ZXIgdGhlIHByZXZpb3VzIGNvbW1lbnRlZCBiYXNlIHRhZy4KKy8vIFRoZSBuZXcg
YWRkZWQgYmFzZSB0YWcgY2FuIGhlbHAgZW5naW5lIHRvIGxvY2F0ZSBjb3JyZWN0IGJhc2UgVVJM
IGZvcgorLy8gY29ycmVjdGx5IGxvYWRpbmcgbG9jYWwgc2F2ZWQgcmVzb3VyY2UgZmlsZXMuIEFs
c28gSSB0aGluayB3ZSBuZWVkIHRvIGluaGVyaXQKKy8vIHRoZSBiYXNlIHRhcmdldCB2YWx1ZSBm
cm9tIGRvY3VtZW50IG9iamVjdCB3aGVuIGFwcGVuZGluZyBuZXcgYmFzZSB0YWcuCisvLyBJZiB0
aGVyZSBhcmUgbXVsdGlwbGUgYmFzZSB0YWdzIGluIG9yaWdpbmFsIGRvY3VtZW50LCB3ZSB3aWxs
IGNvbW1lbnQgYWxsIG9sZAorLy8gYmFzZSB0YWdzIGFuZCBhcHBlbmQgbmV3IGJhc2UgdGFnIGFm
dGVyIGVhY2ggb2xkIGJhc2UgdGFnIGJlY2F1c2Ugd2UgZG8gbm90CisvLyBrbm93IHRob3NlIG9s
ZCBiYXNlIHRhZ3MgYXJlIG9yaWdpbmFsIGNvbnRlbnQgb3IgYWRkZWQgYnkgSmF2YVNjcmlwdC4g
SWYKKy8vIHRoZXkgYXJlIGFkZGVkIGJ5IEphdmFTY3JpcHQsIGl0IG1lYW5zIHdoZW4gbG9hZGlu
ZyBzYXZlZCBwYWdlLCB0aGUgc2NyaXB0KHMpCisvLyB3aWxsIHN0aWxsIGluc2VydCBiYXNlIHRh
ZyhzKSB0byBET00sIHNvIHRoZSBuZXcgYWRkZWQgYmFzZSB0YWcocykgY2FuCisvLyBvdmVycmlk
ZSB0aGUgaW5jb3JyZWN0IGJhc2UgVVJMIGFuZCBtYWtlIHN1cmUgd2UgYWx3YXkgbG9hZCBjb3Jy
ZWN0IGxvY2FsCisvLyBzYXZlZCByZXNvdXJjZSBmaWxlcy4KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVySW1wbC5oIgorCisjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudFR5cGUuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisj
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJIVE1MQWxsQ29sbGVjdGlvbi5oIgor
I2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTE1ldGFFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5j
bHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisjaW5jbHVkZSAiU3RyaW5nQnVpbGRlci5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGlu
Zy5oIgorCisjaW5jbHVkZSAiRE9NVXRpbGl0aWVzUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYkZy
YW1lSW1wbC5oIgorI2luY2x1ZGUgIldlYlVSTC5oIgorI2luY2x1ZGUgIldlYlZlY3Rvci5oIgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIE1h
eGltdW0gbGVuZ3RoIG9mIGRhdGEgYnVmZmVyIHdoaWNoIGlzIHVzZWQgdG8gdGVtcG9yYXJ5IHNh
dmUgZ2VuZXJhdGVkCisvLyBodG1sIGNvbnRlbnQgZGF0YS4KK3N0YXRpYyBjb25zdCB1bnNpZ25l
ZCBkYXRhQnVmZmVyQ2FwYWNpdHkgPSA2NTUzNjsKKworV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpT
ZXJpYWxpemVEb21QYXJhbTo6U2VyaWFsaXplRG9tUGFyYW0oY29uc3QgS1VSTCYgY3VycmVudEZy
YW1lVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVGV4dEVuY29kaW5nJiB0ZXh0RW5jb2RpbmcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb2N1bWVu
dCogZG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXJlY3RvcnlOYW1lKQorICAgIDogY3VycmVudEZy
YW1lVVJMKGN1cnJlbnRGcmFtZVVSTCkKKyAgICAsIHRleHRFbmNvZGluZyh0ZXh0RW5jb2Rpbmcp
CisgICAgLCBkb2MoZG9jKQorICAgICwgZGlyZWN0b3J5TmFtZShkaXJlY3RvcnlOYW1lKQorICAg
ICwgaGFzRG9jdHlwZShmYWxzZSkKKyAgICAsIGhhc0NoZWNrZWRNZXRhKGZhbHNlKQorICAgICwg
c2tpcE1ldGFFbGVtZW50KDApCisgICAgLCBpc0luU2NyaXB0T3JTdHlsZVRhZyhmYWxzZSkKKyAg
ICAsIGhhc0RvY0RlY2xhcmF0aW9uKGZhbHNlKQoreworICAgIC8vIENhY2hlIHRoZSB2YWx1ZSBz
aW5jZSB3ZSBjaGVjayBpdCBsb3RzIG9mIHRpbWVzLgorICAgIGlzSFRNTERvY3VtZW50ID0gZG9j
LT5pc0hUTUxEb2N1bWVudCgpOworfQorCitTdHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpw
cmVBY3Rpb25CZWZvcmVTZXJpYWxpemVPcGVuVGFnKAorICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1l
bnQsIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSwgYm9vbCogbmVlZFNraXApCit7CisgICAgU3Ry
aW5nQnVpbGRlciByZXN1bHQ7CisKKyAgICAqbmVlZFNraXAgPSBmYWxzZTsKKyAgICBpZiAocGFy
YW0tPmlzSFRNTERvY3VtZW50KSB7CisgICAgICAgIC8vIFNraXAgdGhlIG9wZW4gdGFnIG9mIG9y
aWdpbmFsIE1FVEEgdGFnIHdoaWNoIGRlY2xhcmUgY2hhcnNldCBzaW5jZSB3ZQorICAgICAgICAv
LyBoYXZlIG92ZXJyaWRlZCB0aGUgTUVUQSB3aGljaCBoYXZlIGNvcnJlY3QgY2hhcnNldCBkZWNs
YXJhdGlvbiBhZnRlcgorICAgICAgICAvLyBzZXJpYWxpemluZyBvcGVuIHRhZyBvZiBIRUFEIGVs
ZW1lbnQuCisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bWV0YVRh
ZykpIHsKKyAgICAgICAgICAgIGNvbnN0IEhUTUxNZXRhRWxlbWVudCogbWV0YSA9IHN0YXRpY19j
YXN0PGNvbnN0IEhUTUxNZXRhRWxlbWVudCo+KGVsZW1lbnQpOworICAgICAgICAgICAgLy8gQ2hl
Y2sgd2hldGhlciB0aGUgTUVUQSB0YWcgaGFzIGRlY2xhcmVkIGNoYXJzZXQgb3Igbm90LgorICAg
ICAgICAgICAgU3RyaW5nIGVxdWl2ID0gbWV0YS0+aHR0cEVxdWl2KCk7CisgICAgICAgICAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZXF1aXYsICJjb250ZW50LXR5cGUiKSkgeworICAgICAgICAg
ICAgICAgIFN0cmluZyBjb250ZW50ID0gbWV0YS0+Y29udGVudCgpOworICAgICAgICAgICAgICAg
IGlmIChjb250ZW50Lmxlbmd0aCgpICYmIGNvbnRlbnQuY29udGFpbnMoImNoYXJzZXQiLCBmYWxz
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRmluZCBNRVRBIHRhZyBkZWNsYXJlZCBjaGFy
c2V0LCB3ZSBuZWVkIHRvIHNraXAgaXQgd2hlbgorICAgICAgICAgICAgICAgICAgICAvLyBzZXJp
YWxpemluZyBET00uCisgICAgICAgICAgICAgICAgICAgIHBhcmFtLT5za2lwTWV0YUVsZW1lbnQg
PSBlbGVtZW50OworICAgICAgICAgICAgICAgICAgICAqbmVlZFNraXAgPSB0cnVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbFRhZykpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIHNv
bWV0aGluZyBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgb3BlbiB0YWcgb2YgSEVBRCBlbGVtZW50Lgor
ICAgICAgICAgICAgLy8gRmlyc3Qgd2UgYWRkIGRvYyB0eXBlIGRlY2xhcmF0aW9uIGlmIG9yaWdp
bmFsIGRvYyBoYXMgaXQuCisgICAgICAgICAgICBpZiAoIXBhcmFtLT5oYXNEb2N0eXBlKSB7Cisg
ICAgICAgICAgICAgICAgcGFyYW0tPmhhc0RvY3R5cGUgPSB0cnVlOworICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoY3JlYXRlTWFya3VwKHBhcmFtLT5kb2MtPmRvY3R5cGUoKSkpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBBZGQgTU9UVyBkZWNsYXJhdGlvbiBiZWZvcmUg
aHRtbCB0YWcuCisgICAgICAgICAgICAvLyBTZWUgaHR0cDovL21zZG4yLm1pY3Jvc29mdC5jb20v
ZW4tdXMvbGlicmFyeS9tczUzNzYyOChWUy44NSkuYXNweC4KKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoV2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlTWFya09mVGhlV2ViRGVjbGFyYXRpb24o
cGFyYW0tPmN1cnJlbnRGcmFtZVVSTCkpOworICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpiYXNlVGFnKSkgeworICAgICAgICAgICAgLy8gQ29tbWVudCB0
aGUgQkFTRSB0YWcgd2hlbiBzZXJpYWxpemluZyBkb20uCisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCI8IS0tIik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXcml0ZSBY
TUwgZGVjbGFyYXRpb24uCisgICAgICAgIGlmICghcGFyYW0tPmhhc0RvY0RlY2xhcmF0aW9uKSB7
CisgICAgICAgICAgICBwYXJhbS0+aGFzRG9jRGVjbGFyYXRpb24gPSB0cnVlOworICAgICAgICAg
ICAgLy8gR2V0IGVuY29kaW5nIGluZm8uCisgICAgICAgICAgICBTdHJpbmcgeG1sRW5jb2Rpbmcg
PSBwYXJhbS0+ZG9jLT54bWxFbmNvZGluZygpOworICAgICAgICAgICAgaWYgKHhtbEVuY29kaW5n
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICB4bWxFbmNvZGluZyA9IHBhcmFtLT5kb2MtPmZy
YW1lKCktPmxvYWRlcigpLT5lbmNvZGluZygpOworICAgICAgICAgICAgaWYgKHhtbEVuY29kaW5n
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICB4bWxFbmNvZGluZyA9IFVURjhFbmNvZGluZygp
Lm5hbWUoKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIjw/eG1sIHZlcnNpb249XCIiKTsK
KyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocGFyYW0tPmRvYy0+eG1sVmVyc2lvbigpKTsKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIlwiIGVuY29kaW5nPVwiIik7CisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHhtbEVuY29kaW5nKTsKKyAgICAgICAgICAgIGlmIChwYXJhbS0+ZG9jLT54
bWxTdGFuZGFsb25lKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiXCIgc3RhbmRh
bG9uZT1cInllcyIpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiXCI/PlxuIik7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gQWRkIGRvYyB0eXBlIGRlY2xhcmF0aW9uIGlmIG9yaWdpbmFsIGRv
YyBoYXMgaXQuCisgICAgICAgIGlmICghcGFyYW0tPmhhc0RvY3R5cGUpIHsKKyAgICAgICAgICAg
IHBhcmFtLT5oYXNEb2N0eXBlID0gdHJ1ZTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY3Jl
YXRlTWFya3VwKHBhcmFtLT5kb2MtPmRvY3R5cGUoKSkpOworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVy
SW1wbDo6cG9zdEFjdGlvbkFmdGVyU2VyaWFsaXplT3BlblRhZygKKyAgICBjb25zdCBFbGVtZW50
KiBlbGVtZW50LCBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pCit7CisgICAgU3RyaW5nQnVpbGRl
ciByZXN1bHQ7CisKKyAgICBwYXJhbS0+aGFzQWRkZWRDb250ZW50c0JlZm9yZUVuZCA9IGZhbHNl
OworICAgIGlmICghcGFyYW0tPmlzSFRNTERvY3VtZW50KQorICAgICAgICByZXR1cm4gcmVzdWx0
LnRvU3RyaW5nKCk7CisgICAgLy8gQ2hlY2sgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUgb3BlbiB0YWcg
b2YgSEVBRCBlbGVtZW50CisgICAgaWYgKCFwYXJhbS0+aGFzQ2hlY2tlZE1ldGEgJiYKKyAgICAg
ICAgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWRUYWcpKSB7CisgICAgICAgIHBh
cmFtLT5oYXNDaGVja2VkTWV0YSA9IHRydWU7CisgICAgICAgIC8vIENoZWNrIG1ldGEgZWxlbWVu
dC4gV2ViS2l0IG9ubHkgcHJlLXBhcnNlIHRoZSBmaXJzdCA1MTIgYnl0ZXMKKyAgICAgICAgLy8g
b2YgdGhlIGRvY3VtZW50LiBJZiB0aGUgd2hvbGUgPEhFQUQ+IGlzIGxhcmdlciBhbmQgbWV0YSBp
cyB0aGUKKyAgICAgICAgLy8gZW5kIG9mIGhlYWQgcGFydCwgdGhlbiB0aGlzIGtpbmQgb2YgcGFn
ZXMgYXJlbid0IGRlY29kZWQgY29ycmVjdGx5CisgICAgICAgIC8vIGJlY2F1c2Ugb2YgdGhpcyBp
c3N1ZS4gU28gd2hlbiB3ZSBzZXJpYWxpemUgdGhlIERPTSwgd2UgbmVlZCB0bworICAgICAgICAv
LyBtYWtlIHN1cmUgdGhlIG1ldGEgd2lsbCBpbiBmaXJzdCBjaGlsZCBvZiBoZWFkIHRhZy4KKyAg
ICAgICAgLy8gU2VlIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjIx
LgorICAgICAgICAvLyBGaXJzdCB3ZSBnZW5lcmF0ZSBuZXcgY29udGVudCBmb3Igd3JpdGluZyBj
b3JyZWN0IE1FVEEgZWxlbWVudC4KKyAgICAgICAgcmVzdWx0LmFwcGVuZChXZWJQYWdlU2VyaWFs
aXplcjo6Z2VuZXJhdGVNZXRhQ2hhcnNldERlY2xhcmF0aW9uKAorICAgICAgICAgICAgU3RyaW5n
KHBhcmFtLT50ZXh0RW5jb2RpbmcubmFtZSgpKSkpOworCisgICAgICAgIHBhcmFtLT5oYXNBZGRl
ZENvbnRlbnRzQmVmb3JlRW5kID0gdHJ1ZTsKKyAgICAgICAgLy8gV2lsbCBzZWFyY2ggZWFjaCBN
RVRBIHdoaWNoIGhhcyBjaGFyc2V0IGRlY2xhcmF0aW9uLCBhbmQgc2tpcCB0aGVtIGFsbAorICAg
ICAgICAvLyBpbiBQcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVPcGVuVGFnLgorICAgIH0gZWxzZSBp
ZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykKKyAgICAgICAgICAg
ICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZVRhZykpIHsKKyAgICAg
ICAgcGFyYW0tPmlzSW5TY3JpcHRPclN0eWxlVGFnID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1
cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBXZWJQYWdlU2VyaWFsaXplckltcGw6
OnByZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZUVuZFRhZygKKyAgICBjb25zdCBFbGVtZW50KiBlbGVt
ZW50LCBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0sIGJvb2wqIG5lZWRTa2lwKQoreworICAgIFN0
cmluZyByZXN1bHQ7CisKKyAgICAqbmVlZFNraXAgPSBmYWxzZTsKKyAgICBpZiAoIXBhcmFtLT5p
c0hUTUxEb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAvLyBTa2lwIHRoZSBl
bmQgdGFnIG9mIG9yaWdpbmFsIE1FVEEgdGFnIHdoaWNoIGRlY2xhcmUgY2hhcnNldC4KKyAgICAv
LyBOZWVkIG5vdCB0byBjaGVjayB3aGV0aGVyIGl0J3MgTUVUQSB0YWcgc2luY2Ugd2UgZ3VhcmFu
dGVlCisgICAgLy8gc2tpcE1ldGFFbGVtZW50IGlzIGRlZmluaXRlbHkgTUVUQSB0YWcgaWYgaXQn
cyBub3QgTlVMTC4KKyAgICBpZiAocGFyYW0tPnNraXBNZXRhRWxlbWVudCA9PSBlbGVtZW50KQor
ICAgICAgICAqbmVlZFNraXAgPSB0cnVlOworICAgIGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpzY3JpcHRUYWcpCisgICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnN0eWxlVGFnKSkgeworICAgICAgICBBU1NFUlQocGFyYW0tPmlzSW5T
Y3JpcHRPclN0eWxlVGFnKTsKKyAgICAgICAgcGFyYW0tPmlzSW5TY3JpcHRPclN0eWxlVGFnID0g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gQWZ0ZXIgd2UgZmlu
aXNoIHNlcmlhbGl6aW5nIGVuZCB0YWcgb2YgYSBlbGVtZW50LCB3ZSBnaXZlIHRoZSB0YXJnZXQK
Ky8vIGVsZW1lbnQgYSBjaGFuY2UgdG8gZG8gc29tZSBwb3N0IHdvcmsgdG8gYWRkIHNvbWUgYWRk
aXRpb25hbCBkYXRhLgorU3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6cG9zdEFjdGlvbkFm
dGVyU2VyaWFsaXplRW5kVGFnKAorICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIFNlcmlhbGl6
ZURvbVBhcmFtKiBwYXJhbSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKworICAgIGlm
ICghcGFyYW0tPmlzSFRNTERvY3VtZW50KQorICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5n
KCk7CisgICAgLy8gQ29tbWVudCB0aGUgQkFTRSB0YWcgd2hlbiBzZXJpYWxpemluZyBET00uCisg
ICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpiYXNlVGFnKSkgeworICAgICAg
ICByZXN1bHQuYXBwZW5kKCItLT4iKTsKKyAgICAgICAgLy8gQXBwZW5kIGEgbmV3IGJhc2UgdGFn
IGRlY2xhcmF0aW9uLgorICAgICAgICByZXN1bHQuYXBwZW5kKFdlYlBhZ2VTZXJpYWxpemVyOjpn
ZW5lcmF0ZUJhc2VUYWdEZWNsYXJhdGlvbigKKyAgICAgICAgICAgIHBhcmFtLT5kb2MtPmJhc2VU
YXJnZXQoKSkpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKwor
dm9pZCBXZWJQYWdlU2VyaWFsaXplckltcGw6OnNhdmVIVE1MQ29udGVudFRvQnVmZmVyKAorICAg
IGNvbnN0IFN0cmluZyYgcmVzdWx0LCBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pCit7CisgICAg
aWYgKCFyZXN1bHQubGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBDb252ZXJ0IHRo
ZSB1bmljb2RlIGNvbnRlbnQgdG8gdGFyZ2V0IGVuY29kaW5nCisgICAgQ1N0cmluZyBlbmNvZGlu
Z1Jlc3VsdCA9IHBhcmFtLT50ZXh0RW5jb2RpbmcuZW5jb2RlKAorICAgICAgICByZXN1bHQuY2hh
cmFjdGVycygpLCByZXN1bHQubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKwor
ICAgIC8vIGlmIHRoZSBkYXRhIGJ1ZmZlciB3aWxsIGJlIGZ1bGwsIHRoZW4gc2VuZCBpdCBvdXQg
Zmlyc3QuCisgICAgaWYgKGVuY29kaW5nUmVzdWx0Lmxlbmd0aCgpICsgbV9kYXRhQnVmZmVyLmxl
bmd0aCgpID4gZGF0YUJ1ZmZlckNhcGFjaXR5KSB7CisgICAgICAgIC8vIFNlbmQgZGF0YSB0byBk
ZWxlZ2F0ZSwgdGVsbCBpdCBub3cgd2UgYXJlIHNlcmlhbGl6aW5nIGN1cnJlbnQgZnJhbWUuCisg
ICAgICAgIG1fY2xpZW50LT5kaWRTZXJpYWxpemVEYXRhRm9yRnJhbWUocGFyYW0tPmN1cnJlbnRG
cmFtZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Rh
dGFCdWZmZXIudG9TdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudDo6Q3VycmVudEZyYW1lSXNOb3RGaW5pc2hl
ZCk7CisgICAgICAgIG1fZGF0YUJ1ZmZlci5jbGVhcigpOworICAgIH0KKworICAgIC8vIEFwcGVu
ZCByZXN1bHQgdG8gZGF0YSBidWZmZXIuCisgICAgbV9kYXRhQnVmZmVyLmFwcGVuZChTdHJpbmc6
OmZyb21VVEY4KGVuY29kaW5nUmVzdWx0LmRhdGEoKSkpOworfQorCit2b2lkIFdlYlBhZ2VTZXJp
YWxpemVySW1wbDo6b3BlblRhZ1RvU3RyaW5nKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZURvbVBhcmFt
KiBwYXJhbSkKK3sKKyAgICAvLyBGSVhNRTogdXNlIFN0cmluZ0J1aWxkZXIgaW5zdGVhZCBvZiBT
dHJpbmcuCisgICAgYm9vbCBuZWVkU2tpcDsKKyAgICAvLyBEbyBwcmUgYWN0aW9uIGZvciBvcGVu
IHRhZy4KKyAgICBTdHJpbmcgcmVzdWx0ID0gcHJlQWN0aW9uQmVmb3JlU2VyaWFsaXplT3BlblRh
ZyhlbGVtZW50LCBwYXJhbSwgJm5lZWRTa2lwKTsKKyAgICBpZiAobmVlZFNraXApCisgICAgICAg
IHJldHVybjsKKyAgICAvLyBBZGQgb3BlbiB0YWcKKyAgICByZXN1bHQgKz0gIjwiICsgZWxlbWVu
dC0+bm9kZU5hbWUoKTsKKyAgICAvLyBHbyB0aHJvdWdoIGFsbCBhdHRyaWJ1dGVzIGFuZCBzZXJp
YWxpemUgdGhlbS4KKyAgICBjb25zdCBOYW1lZE5vZGVNYXAgKmF0dHJNYXAgPSBlbGVtZW50LT5h
dHRyaWJ1dGVzKHRydWUpOworICAgIGlmIChhdHRyTWFwKSB7CisgICAgICAgIHVuc2lnbmVkIG51
bUF0dHJzID0gYXR0ck1hcC0+bGVuZ3RoKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1BdHRyczsgaSsrKSB7CisgICAgICAgICAgICByZXN1bHQgKz0gIiAiOworICAgICAg
ICAgICAgLy8gQWRkIGF0dHJpYnV0ZSBwYWlyCisgICAgICAgICAgICBjb25zdCBBdHRyaWJ1dGUg
KmF0dHJpYnV0ZSA9IGF0dHJNYXAtPmF0dHJpYnV0ZUl0ZW0oaSk7CisgICAgICAgICAgICByZXN1
bHQgKz0gYXR0cmlidXRlLT5uYW1lKCkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIHJlc3VsdCAr
PSAiPVwiIjsKKyAgICAgICAgICAgIGlmICghYXR0cmlidXRlLT52YWx1ZSgpLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgYXR0clZhbHVlID0gYXR0cmlidXRlLT52
YWx1ZSgpOworCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB3ZSBuZWVkIHRvIHJl
cGxhY2Ugc29tZSByZXNvdXJjZSBsaW5rcworICAgICAgICAgICAgICAgIC8vIHdpdGggbG9jYWwg
cmVzb3VyY2UgcGF0aHMuCisgICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUgPSBhdHRyaWJ1dGUtPm5hbWUoKTsKKyAgICAgICAgICAgICAgICBpZiAoZWxlbWVudEhh
c0xlZ2FsTGlua0F0dHJpYnV0ZShlbGVtZW50LCBhdHRyTmFtZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gRm9yIGxpbmtzIHN0YXJ0IHdpdGggImphdmFzY3JpcHQ6Iiwgd2UgZG8gbm90IGNo
YW5nZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJWYWx1ZS5zdGFydHNXaXRoKCJq
YXZhc2NyaXB0OiIsIGZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBh
dHRyVmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gR2V0IHRoZSBhYnNvbHV0ZSBsaW5rCisgICAgICAgICAgICAgICAgICAgICAgICBT
dHJpbmcgY29tcGxldGVVUkwgPSBwYXJhbS0+ZG9jLT5jb21wbGV0ZVVSTChhdHRyVmFsdWUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB3ZSBoYXZlIGxvY2FsIGZp
bGVzIGZvciB0aG9zZSBsaW5rLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbG9jYWxM
aW5rcy5jb250YWlucyhjb21wbGV0ZVVSTCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIW1fbG9jYWxEaXJlY3RvcnlOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ICs9IG1fbG9jYWxEaXJlY3RvcnlOYW1lICsgIi8iOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBtX2xvY2FsTGlua3MuZ2V0KGNvbXBs
ZXRlVVJMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gY29tcGxldGVV
Ukw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBpZiAocGFyYW0tPmlzSFRNTERvY3VtZW50KQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ICs9IG1faHRtbEVudGl0aWVzLmNvbnZlcnRFbnRpdGllc0luU3Ry
aW5nKGF0dHJWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCArPSBtX3htbEVudGl0aWVzLmNvbnZlcnRFbnRpdGllc0luU3RyaW5n
KGF0dHJWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmVzdWx0ICs9ICJcIiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBEbyBwb3N0IGFj
dGlvbiBmb3Igb3BlbiB0YWcuCisgICAgU3RyaW5nIGFkZGVkQ29udGVudHMgPSBwb3N0QWN0aW9u
QWZ0ZXJTZXJpYWxpemVPcGVuVGFnKGVsZW1lbnQsIHBhcmFtKTsKKyAgICAvLyBDb21wbGV0ZSB0
aGUgb3BlbiB0YWcgZm9yIGVsZW1lbnQgd2hlbiBpdCBoYXMgY2hpbGQvY2hpbGRyZW4uCisgICAg
aWYgKGVsZW1lbnQtPmhhc0NoaWxkTm9kZXMoKSB8fCBwYXJhbS0+aGFzQWRkZWRDb250ZW50c0Jl
Zm9yZUVuZCkKKyAgICAgICAgcmVzdWx0ICs9ICI+IjsKKyAgICAvLyBBcHBlbmQgdGhlIGFkZGVk
IGNvbnRlbnRzIGdlbmVyYXRlIGluICBwb3N0IGFjdGlvbiBvZiBvcGVuIHRhZy4KKyAgICByZXN1
bHQgKz0gYWRkZWRDb250ZW50czsKKyAgICAvLyBTYXZlIHRoZSByZXN1bHQgdG8gZGF0YSBidWZm
ZXIuCisgICAgc2F2ZUhUTUxDb250ZW50VG9CdWZmZXIocmVzdWx0LCBwYXJhbSk7Cit9CisKKy8v
IFNlcmlhbGl6ZSBlbmQgdGFnIG9mIGFuIHNwZWNpZmllZCBlbGVtZW50Lgordm9pZCBXZWJQYWdl
U2VyaWFsaXplckltcGw6OmVuZFRhZ1RvU3RyaW5nKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFy
YW0qIHBhcmFtKQoreworICAgIGJvb2wgbmVlZFNraXA7CisgICAgLy8gRG8gcHJlIGFjdGlvbiBm
b3IgZW5kIHRhZy4KKyAgICBTdHJpbmcgcmVzdWx0ID0gcHJlQWN0aW9uQmVmb3JlU2VyaWFsaXpl
RW5kVGFnKGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZuZWVkU2tpcCk7CisgICAgaWYgKG5lZWRTa2lwKQorICAgICAgICByZXR1
cm47CisgICAgLy8gV3JpdGUgZW5kIHRhZyB3aGVuIGVsZW1lbnQgaGFzIGNoaWxkL2NoaWxkcmVu
LgorICAgIGlmIChlbGVtZW50LT5oYXNDaGlsZE5vZGVzKCkgfHwgcGFyYW0tPmhhc0FkZGVkQ29u
dGVudHNCZWZvcmVFbmQpIHsKKyAgICAgICAgcmVzdWx0ICs9ICI8LyI7CisgICAgICAgIHJlc3Vs
dCArPSBlbGVtZW50LT5ub2RlTmFtZSgpOworICAgICAgICByZXN1bHQgKz0gIj4iOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byB3cml0ZSBlbmQgdGFn
IGZvciBlbXB0eSBlbGVtZW50LgorICAgICAgICBpZiAocGFyYW0tPmlzSFRNTERvY3VtZW50KSB7
CisgICAgICAgICAgICByZXN1bHQgKz0gIj4iOworICAgICAgICAgICAgY29uc3QgSFRNTEVsZW1l
bnQqIGh0bWxFbGVtZW50ID0KKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVt
ZW50Kj4oZWxlbWVudCk7CisgICAgICAgICAgICBpZiAoaHRtbEVsZW1lbnQtPmVuZFRhZ1JlcXVp
cmVtZW50KCkgPT0gVGFnU3RhdHVzUmVxdWlyZWQpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBu
ZWVkIHRvIHdyaXRlIGVuZCB0YWcgd2hlbiBpdCBpcyByZXF1aXJlZC4KKyAgICAgICAgICAgICAg
ICByZXN1bHQgKz0gIjwvIjsKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gZWxlbWVudC0+bm9k
ZU5hbWUoKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gIj4iOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRm9yIHhtbCBiYXNlIGRvY3VtZW50Lgor
ICAgICAgICAgICAgcmVzdWx0ICs9ICIgLz4iOworICAgICAgICB9CisgICAgfQorICAgIC8vIERv
IHBvc3QgYWN0aW9uIGZvciBlbmQgdGFnLgorICAgIHJlc3VsdCArPSBwb3N0QWN0aW9uQWZ0ZXJT
ZXJpYWxpemVFbmRUYWcoZWxlbWVudCwgcGFyYW0pOworICAgIC8vIFNhdmUgdGhlIHJlc3VsdCB0
byBkYXRhIGJ1ZmZlci4KKyAgICBzYXZlSFRNTENvbnRlbnRUb0J1ZmZlcihyZXN1bHQsIHBhcmFt
KTsKK30KKwordm9pZCBXZWJQYWdlU2VyaWFsaXplckltcGw6OmJ1aWxkQ29udGVudEZvck5vZGUo
Y29uc3QgTm9kZSogbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUt
Pm5vZGVUeXBlKCkpIHsKKyAgICBjYXNlIE5vZGU6OkVMRU1FTlRfTk9ERToKKyAgICAgICAgLy8g
UHJvY2VzcyBvcGVuIHRhZyBvZiBlbGVtZW50LgorICAgICAgICBvcGVuVGFnVG9TdHJpbmcoc3Rh
dGljX2Nhc3Q8Y29uc3QgRWxlbWVudCo+KG5vZGUpLCBwYXJhbSk7CisgICAgICAgIC8vIFdhbGsg
dGhyb3VnaCB0aGUgY2hpbGRyZW4gbm9kZXMgYW5kIHByb2Nlc3MgaXQuCisgICAgICAgIGZvciAo
Y29uc3QgTm9kZSAqY2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkICE9IE5VTEw7Cisg
ICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgICAgIGJ1
aWxkQ29udGVudEZvck5vZGUoY2hpbGQsIHBhcmFtKTsKKyAgICAgICAgLy8gUHJvY2VzcyBlbmQg
dGFnIG9mIGVsZW1lbnQuCisgICAgICAgIGVuZFRhZ1RvU3RyaW5nKHN0YXRpY19jYXN0PGNvbnN0
IEVsZW1lbnQqPihub2RlKSwgcGFyYW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5vZGU6
OlRFWFRfTk9ERToKKyAgICAgICAgc2F2ZUhUTUxDb250ZW50VG9CdWZmZXIoY3JlYXRlTWFya3Vw
KG5vZGUpLCBwYXJhbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm9kZTo6QVRUUklCVVRF
X05PREU6CisgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9OT0RFOgorICAgIGNhc2UgTm9kZTo6RE9D
VU1FTlRfRlJBR01FTlRfTk9ERToKKyAgICAgICAgLy8gU2hvdWxkIG5vdCBleGlzdC4KKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIC8vIERvY3VtZW50
IHR5cGUgbm9kZSBjYW4gYmUgaW4gRE9NPworICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfVFlQRV9O
T0RFOgorICAgICAgICBwYXJhbS0+aGFzRG9jdHlwZSA9IHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgLy8gRm9yIG90aGVyIHR5cGUgbm9kZSwgY2FsbCBkZWZhdWx0IGFjdGlvbi4KKyAgICAg
ICAgc2F2ZUhUTUxDb250ZW50VG9CdWZmZXIoY3JlYXRlTWFya3VwKG5vZGUpLCBwYXJhbSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpXZWJQYWdl
U2VyaWFsaXplckltcGwoV2ViRnJhbWUqIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCByZWN1cnNpdmVTZXJpYWxpemF0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJD
bGllbnQqIGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+JiBsaW5rcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBsb2Nh
bFBhdGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgV2ViU3RyaW5nJiBsb2NhbERpcmVjdG9yeU5hbWUpCisgICAgOiBtX2NsaWVudChjbGllbnQp
CisgICAgLCBtX3JlY3Vyc2l2ZVNlcmlhbGl6YXRpb24ocmVjdXJzaXZlU2VyaWFsaXphdGlvbikK
KyAgICAsIG1fZnJhbWVzQ29sbGVjdGVkKGZhbHNlKQorICAgICwgbV9sb2NhbERpcmVjdG9yeU5h
bWUobG9jYWxEaXJlY3RvcnlOYW1lKQorICAgICwgbV9odG1sRW50aXRpZXMoZmFsc2UpCisgICAg
LCBtX3htbEVudGl0aWVzKHRydWUpCit7CisgICAgLy8gTXVzdCBzcGVjaWZ5IGF2YWlsYWJsZSB3
ZWJmcmFtZS4KKyAgICBBU1NFUlQoZnJhbWUpOworICAgIG1fc3BlY2lmaWVkV2ViRnJhbWVJbXBs
ID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVJbXBsKj4oZnJhbWUpOworICAgIC8vIE1ha2Ugc3VyZSB3
ZSBoYXZlIG5vdC1OVUxMIGRlbGVnYXRlLgorICAgIEFTU0VSVChjbGllbnQpOworICAgIC8vIEJ1
aWxkIGxvY2FsIHJlc291cmNlcyBtYXAuCisgICAgQVNTRVJUKGxpbmtzLnNpemUoKSA9PSBsb2Nh
bFBhdGhzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaW5rcy5zaXplKCk7
IGkrKykgeworICAgICAgICBLVVJMIHVybCA9IGxpbmtzW2ldOworICAgICAgICBBU1NFUlQoIW1f
bG9jYWxMaW5rcy5jb250YWlucyh1cmwuc3RyaW5nKCkpKTsKKyAgICAgICAgbV9sb2NhbExpbmtz
LnNldCh1cmwuc3RyaW5nKCksIGxvY2FsUGF0aHNbaV0pOworICAgIH0KKworICAgIEFTU0VSVCgh
bV9kYXRhQnVmZmVyLmxlbmd0aCgpKTsKK30KKwordm9pZCBXZWJQYWdlU2VyaWFsaXplckltcGw6
OmNvbGxlY3RUYXJnZXRGcmFtZXMoKQoreworICAgIEFTU0VSVCghbV9mcmFtZXNDb2xsZWN0ZWQp
OworICAgIG1fZnJhbWVzQ29sbGVjdGVkID0gdHJ1ZTsKKworICAgIC8vIEZpcnN0LCBwcm9jZXNz
IG1haW4gZnJhbWUuCisgICAgbV9mcmFtZXMuYXBwZW5kKG1fc3BlY2lmaWVkV2ViRnJhbWVJbXBs
KTsKKyAgICAvLyBSZXR1cm4gbm93IGlmIHVzZXIgb25seSBuZWVkcyB0byBzZXJpYWxpemUgc3Bl
Y2lmaWVkIGZyYW1lLCBub3QgaW5jbHVkaW5nCisgICAgLy8gYWxsIHN1Yi1mcmFtZXMuCisgICAg
aWYgKCFtX3JlY3Vyc2l2ZVNlcmlhbGl6YXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAvLyBD
b2xsZWN0IGFsbCBmcmFtZXMgaW5zaWRlIHRoZSBzcGVjaWZpZWQgZnJhbWUuCisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxpbnQ+KG1fZnJhbWVzLnNpemUoKSk7ICsraSkgewor
ICAgICAgICBXZWJGcmFtZUltcGwqIGN1cnJlbnRGcmFtZSA9IG1fZnJhbWVzW2ldOworICAgICAg
ICAvLyBHZXQgY3VycmVudCB1c2luZyBkb2N1bWVudC4KKyAgICAgICAgRG9jdW1lbnQqIGN1cnJl
bnREb2MgPSBjdXJyZW50RnJhbWUtPmZyYW1lKCktPmRvY3VtZW50KCk7CisgICAgICAgIC8vIEdv
IHRocm91Z2ggc3ViLWZyYW1lcy4KKyAgICAgICAgUmVmUHRyPEhUTUxBbGxDb2xsZWN0aW9uPiBh
bGwgPSBjdXJyZW50RG9jLT5hbGwoKTsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlID0gYWxsLT5m
aXJzdEl0ZW0oKTsgbm9kZSAhPSBOVUxMOyBub2RlID0gYWxsLT5uZXh0SXRlbSgpKSB7CisgICAg
ICAgICAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obm9kZSk7CisgICAgICAgICAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0KKyAgICAgICAg
ICAgICAgICBXZWJGcmFtZUltcGw6OmZyb21GcmFtZU93bmVyRWxlbWVudChlbGVtZW50KTsKKyAg
ICAgICAgICAgIGlmICh3ZWJGcmFtZSkKKyAgICAgICAgICAgICAgICBtX2ZyYW1lcy5hcHBlbmQo
d2ViRnJhbWUpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFdlYlBhZ2VTZXJpYWxpemVy
SW1wbDo6c2VyaWFsaXplKCkKK3sKKyAgICAvLyBDb2xsZWN0IHRhcmdldCBmcmFtZXMuCisgICAg
aWYgKCFtX2ZyYW1lc0NvbGxlY3RlZCkKKyAgICAgICAgY29sbGVjdFRhcmdldEZyYW1lcygpOwor
ICAgIGJvb2wgZGlkU2VyaWFsaXphdGlvbiA9IGZhbHNlOworICAgIC8vIEdldCBLVVJMIGZvciBt
YWluIGZyYW1lLgorICAgIEtVUkwgbWFpblBhZ2VVUkwgPSBtX3NwZWNpZmllZFdlYkZyYW1lSW1w
bC0+ZnJhbWUoKS0+bG9hZGVyKCktPnVybCgpOworCisgICAgLy8gR28gdGhyb3VnaCBhbGwgZnJh
bWVzIGZvciBzZXJpYWxpemluZyBET00gZm9yIHdob2xlIHBhZ2UsIGluY2x1ZGUKKyAgICAvLyBz
dWItZnJhbWVzLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8aW50PihtX2Zy
YW1lcy5zaXplKCkpOyArK2kpIHsKKyAgICAgICAgLy8gR2V0IGN1cnJlbnQgc2VyaWFsaXppbmcg
ZnJhbWUuCisgICAgICAgIFdlYkZyYW1lSW1wbCogY3VycmVudEZyYW1lID0gbV9mcmFtZXNbaV07
CisgICAgICAgIC8vIEdldCBjdXJyZW50IHVzaW5nIGRvY3VtZW50LgorICAgICAgICBEb2N1bWVu
dCogY3VycmVudERvYyA9IGN1cnJlbnRGcmFtZS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICAg
ICAgLy8gR2V0IGN1cnJlbnQgZnJhbWUncyBVUkwuCisgICAgICAgIGNvbnN0IEtVUkwmIGN1cnJl
bnRGcmFtZVVSTCA9IGN1cnJlbnRGcmFtZS0+ZnJhbWUoKS0+bG9hZGVyKCktPnVybCgpOworCisg
ICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSBkb25lIHRoaXMgZG9jdW1lbnQuCisgICAg
ICAgIGlmIChtX2xvY2FsTGlua3MuY29udGFpbnMoY3VycmVudEZyYW1lVVJMLnN0cmluZygpKSkg
eworICAgICAgICAgICAgLy8gQSBuZXcgZG9jdW1lbnQsIHdlIHdpbGwgc2VyaWFsaXplIGl0Lgor
ICAgICAgICAgICAgZGlkU2VyaWFsaXphdGlvbiA9IHRydWU7CisgICAgICAgICAgICAvLyBHZXQg
dGFyZ2V0IGVuY29kaW5nIGZvciBjdXJyZW50IGRvY3VtZW50LgorICAgICAgICAgICAgU3RyaW5n
IGVuY29kaW5nID0gY3VycmVudEZyYW1lLT5mcmFtZSgpLT5sb2FkZXIoKS0+ZW5jb2RpbmcoKTsK
KyAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgdGV4dCBlbmNvZGluZyBvYmplY3Qgd2l0aCB0YXJn
ZXQgZW5jb2RpbmcuCisgICAgICAgICAgICBUZXh0RW5jb2RpbmcgdGV4dEVuY29kaW5nKGVuY29k
aW5nKTsKKyAgICAgICAgICAgIC8vIENvbnN0cnVjdCBzZXJpYWxpemUgcGFyYW1ldGVyIGZvciBs
YXRlIHByb2Nlc3NpbmcgZG9jdW1lbnQuCisgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSBw
YXJhbShjdXJyZW50RnJhbWVVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbmNvZGluZy5sZW5ndGgoKSA/IHRleHRFbmNvZGluZyA6IFVURjhFbmNvZGluZygpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudERvYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZVVSTCA9PSBtYWluUGFnZVVSTCA/
IG1fbG9jYWxEaXJlY3RvcnlOYW1lIDogIiIpOworCisgICAgICAgICAgICAvLyBQcm9jZXNzIGN1
cnJlbnQgZG9jdW1lbnQuCisgICAgICAgICAgICBFbGVtZW50KiByb290RWxlbWVudCA9IGN1cnJl
bnREb2MtPmRvY3VtZW50RWxlbWVudCgpOworICAgICAgICAgICAgaWYgKHJvb3RFbGVtZW50KQor
ICAgICAgICAgICAgICAgIGJ1aWxkQ29udGVudEZvck5vZGUocm9vdEVsZW1lbnQsICZwYXJhbSk7
CisKKyAgICAgICAgICAgIC8vIFNpbmsgdGhlIHJlbWFpbmRlciBkYXRhIGFuZCBmaW5pc2ggc2Vy
aWFsaXppbmcgY3VycmVudCBmcmFtZS4KKyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRTZXJpYWxp
emVEYXRhRm9yRnJhbWUoY3VycmVudEZyYW1lVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGFCdWZmZXIudG9TdHJpbmcoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJD
bGllbnQ6OkN1cnJlbnRGcmFtZUlzRmluaXNoZWQpOworICAgICAgICAgICAgLy8gQ2xlYXIgdGhl
IGJ1ZmZlci4KKyAgICAgICAgICAgIG1fZGF0YUJ1ZmZlci5jbGVhcigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gV2UgaGF2ZSBkb25lIGNhbGwgZnJhbWVzLCBzbyB3ZSBzZW5kIG1lc3Nh
Z2UgdG8gZW1iZWRkZXIgdG8gdGVsbCBpdCB0aGF0CisgICAgLy8gZnJhbWVzIGFyZSBmaW5pc2hl
ZCBzZXJpYWxpemluZy4KKyAgICBBU1NFUlQoIW1fZGF0YUJ1ZmZlci5sZW5ndGgoKSk7CisgICAg
bV9jbGllbnQtPmRpZFNlcmlhbGl6ZURhdGFGb3JGcmFtZShLVVJMKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGFCdWZmZXIudG9TdHJpbmcoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50
OjpBbGxGcmFtZXNBcmVGaW5pc2hlZCk7CisgICAgcmV0dXJuIGRpZFNlcmlhbGl6YXRpb247Cit9
CisKK30gIC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VT
ZXJpYWxpemVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiODYw
MjcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxp
emVySW1wbC5oCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQYWdlU2VyaWFsaXplckltcGxf
aAorI2RlZmluZSBXZWJQYWdlU2VyaWFsaXplckltcGxfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFz
aC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CisjaW5jbHVkZSAiV2ViRW50aXRpZXMuaCIKKyNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplci5o
IgorI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViU3Ry
aW5nLmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IERvY3VtZW50OworY2xhc3MgRWxlbWVudDsKK2NsYXNzIE5vZGU7CitjbGFzcyBTdHJpbmc7Citj
bGFzcyBUZXh0RW5jb2Rpbmc7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViRnJh
bWVJbXBsOworCisvLyBHZXQgaHRtbCBkYXRhIGJ5IHNlcmlhbGl6aW5nIGFsbCBmcmFtZXMgb2Yg
Y3VycmVudCBwYWdlIHdpdGggbGlzdHMKKy8vIHdoaWNoIGNvbnRhaW4gYWxsIHJlc291cmNlIGxp
bmtzIHRoYXQgaGF2ZSBsb2NhbCBjb3B5LgorLy8gY29udGFpbiBhbGwgc2F2ZWQgYXV4aWxpYXJ5
IGZpbGVzIGluY2x1ZGVkIGFsbCBzdWIgZnJhbWVzIGFuZCByZXNvdXJjZXMuCisvLyBUaGlzIGZ1
bmN0aW9uIHdpbGwgZmluZCBvdXQgYWxsIGZyYW1lcyBhbmQgc2VyaWFsaXplIHRoZW0gdG8gSFRN
TCBkYXRhLgorLy8gV2UgaGF2ZSBhIGRhdGEgYnVmZmVyIHRvIHRlbXBvcmFyeSBzYXZpbmcgZ2Vu
ZXJhdGVkIGh0bWwgZGF0YS4gV2Ugd2lsbAorLy8gc2VxdWVudGlhbGx5IGNhbGwgV2ViVmlld0Rl
bGVnYXRlOjpTZW5kU2VyaWFsaXplZEh0bWxEYXRhIG9uY2UgdGhlIGRhdGEKKy8vIGJ1ZmZlciBp
cyBmdWxsLiBTZWUgY29tbWVudHMgb2YgV2ViVmlld0RlbGVnYXRlOjpTZW5kU2VyaWFsaXplZEh0
bWxEYXRhCisvLyBmb3IgZ2V0dGluZyBtb3JlIGluZm9ybWF0aW9uLgorY2xhc3MgV2ViUGFnZVNl
cmlhbGl6ZXJJbXBsIHsKK3B1YmxpYzoKKyAgICAvLyBEbyBzZXJpYWxpemF0aW9uIGFjdGlvbi4g
UmV0dXJuIGZhbHNlIG1lYW5zIG5vIGF2YWlsYWJsZSBmcmFtZSBoYXMgYmVlbgorICAgIC8vIHNl
cmlhbGl6ZWQsIG90aGVyd2lzZSByZXR1cm4gdHJ1ZS4KKyAgICBib29sIHNlcmlhbGl6ZSgpOwor
CisgICAgLy8gVGhlIHBhcmFtZXRlciBzcGVjaWZpZXMgd2hpY2ggZnJhbWUgbmVlZCB0byBiZSBz
ZXJpYWxpemVkLgorICAgIC8vIFRoZSBwYXJhbWV0ZXIgcmVjdXJzaXZlX3NlcmlhbGl6YXRpb24g
c3BlY2lmaWVzIHdoZXRoZXIgd2UgbmVlZCB0bworICAgIC8vIHNlcmlhbGl6ZSBhbGwgc3ViIGZy
YW1lcyBvZiB0aGUgc3BlY2lmaWVkIGZyYW1lIG9yIG5vdC4KKyAgICAvLyBUaGUgcGFyYW1ldGVy
IGRlbGVnYXRlIHNwZWNpZmllcyB0aGUgcG9pbnRlciBvZiBpbnRlcmZhY2UKKyAgICAvLyBEb21T
ZXJpYWxpemVyRGVsZWdhdGUgcHJvdmlkZSBzaW5rIGludGVyZmFjZSB3aGljaCBjYW4gcmVjZWl2
ZSB0aGUKKyAgICAvLyBpbmRpdmlkdWFsIGNodW5rcyBvZiBkYXRhIHRvIGJlIHNhdmVkLgorICAg
IC8vIFRoZSBwYXJhbWV0ZXIgbGlua3MgY29udGFpbiBvcmlnaW5hbCBVUkxzIG9mIGFsbCBzYXZl
ZCBsaW5rcy4KKyAgICAvLyBUaGUgcGFyYW1ldGVyIGxvY2FsX3BhdGhzIGNvbnRhaW4gY29ycmVz
cG9uZGluZyBsb2NhbCBmaWxlIHBhdGhzIG9mIGFsbAorICAgIC8vIHNhdmVkIGxpbmtzLCB3aGlj
aCBtYXRjaGVkIHdpdGggdmVjdG9yOmxpbmtzIG9uZSBieSBvbmUuCisgICAgLy8gVGhlIHBhcmFt
ZXRlciBsb2NhbF9kaXJlY3RvcnlfbmFtZSBpcyByZWxhdGl2ZSBwYXRoIG9mIGRpcmVjdG9yeSB3
aGljaAorICAgIC8vIGNvbnRhaW4gYWxsIHNhdmVkIGF1eGlsaWFyeSBmaWxlcyBpbmNsdWRlZCBh
bGwgc3ViIGZyYW1lcyBhbmQgcmVzb3VyY2VzLgorICAgIFdlYlBhZ2VTZXJpYWxpemVySW1wbChX
ZWJGcmFtZSogZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudCogY2xp
ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViVVJMPiYg
bGlua3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJp
bmc+JiBsb2NhbFBhdGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJp
bmcmIGxvY2FsRGlyZWN0b3J5TmFtZSk7CisKK3ByaXZhdGU6CisgICAgLy8gU3BlY2lmaWVkIGZy
YW1lIHdoaWNoIG5lZWQgdG8gYmUgc2VyaWFsaXplZDsKKyAgICBXZWJGcmFtZUltcGwqIG1fc3Bl
Y2lmaWVkV2ViRnJhbWVJbXBsOworICAgIC8vIFBvaW50ZXIgb2YgV2ViUGFnZVNlcmlhbGl6ZXJD
bGllbnQKKyAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudCogbV9jbGllbnQ7CisgICAgLy8gVGhp
cyBoYXNoIG1hcCBpcyB1c2VkIHRvIG1hcCByZXNvdXJjZSBVUkwgb2Ygb3JpZ2luYWwgbGluayB0
byBpdHMgbG9jYWwKKyAgICAvLyBmaWxlIHBhdGguCisgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNv
cmU6OlN0cmluZywgV2ViQ29yZTo6U3RyaW5nPiBMaW5rTG9jYWxQYXRoTWFwOworICAgIC8vIGxv
Y2FsX2xpbmtzXyBpbmNsdWRlIGFsbCBwYWlyIG9mIGxvY2FsIHJlc291cmNlIHBhdGggYW5kIGNv
cnJlc3BvbmRpbmcKKyAgICAvLyBvcmlnaW5hbCBsaW5rLgorICAgIExpbmtMb2NhbFBhdGhNYXAg
bV9sb2NhbExpbmtzOworICAgIC8vIERhdGEgYnVmZmVyIGZvciBzYXZpbmcgcmVzdWx0IG9mIHNl
cmlhbGl6ZWQgRE9NIGRhdGEuCisgICAgV2ViQ29yZTo6U3RyaW5nQnVpbGRlciBtX2RhdGFCdWZm
ZXI7CisgICAgLy8gUGFzc2luZyB0cnVlIHRvIHJlY3Vyc2l2ZV9zZXJpYWxpemF0aW9uXyBpbmRp
Y2F0ZXMgd2Ugd2lsbCBzZXJpYWxpemUgbm90CisgICAgLy8gb25seSB0aGUgc3BlY2lmaWVkIGZy
YW1lIGJ1dCBhbHNvIGFsbCBzdWItZnJhbWVzIGluIHRoZSBzcGVjaWZpYyBmcmFtZS4KKyAgICAv
LyBPdGhlcndpc2Ugd2Ugb25seSBzZXJpYWxpemUgdGhlIHNwZWNpZmllZCBmcmFtZSBleGNsdWRl
ZCBhbGwgc3ViLWZyYW1lcy4KKyAgICBib29sIG1fcmVjdXJzaXZlU2VyaWFsaXphdGlvbjsKKyAg
ICAvLyBGbGFnIGluZGljYXRlcyB3aGV0aGVyIHdlIGhhdmUgY29sbGVjdGVkIGFsbCBmcmFtZXMg
d2hpY2ggbmVlZCB0byBiZQorICAgIC8vIHNlcmlhbGl6ZWQgb3Igbm90OworICAgIGJvb2wgbV9m
cmFtZXNDb2xsZWN0ZWQ7CisgICAgLy8gTG9jYWwgZGlyZWN0b3J5IG5hbWUgb2YgYWxsIGxvY2Fs
IHJlc291cmNlIGZpbGVzLgorICAgIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbV9sb2NhbERpcmVj
dG9yeU5hbWU7CisgICAgLy8gVmVjdG9yIGZvciBzYXZpbmcgYWxsIGZyYW1lcyB3aGljaCBuZWVk
IHRvIGJlIHNlcmlhbGl6ZWQuCisgICAgVmVjdG9yPFdlYkZyYW1lSW1wbCo+IG1fZnJhbWVzOwor
CisgICAgLy8gV2ViIGVudGl0aWVzIGNvbnZlcnNpb24gbWFwcy4KKyAgICBXZWJFbnRpdGllcyBt
X2h0bWxFbnRpdGllczsKKyAgICBXZWJFbnRpdGllcyBtX3htbEVudGl0aWVzOworCisgICAgc3Ry
dWN0IFNlcmlhbGl6ZURvbVBhcmFtIHsKKyAgICAgICAgLy8gRnJhbWUgVVJMIG9mIGN1cnJlbnQg
cHJvY2Vzc2luZyBkb2N1bWVudCBwcmVzZW50ZWQgYnkgR1VSTAorICAgICAgICBjb25zdCBXZWJD
b3JlOjpLVVJMJiBjdXJyZW50RnJhbWVVUkw7CisgICAgICAgIC8vIEN1cnJlbnQgdXNpbmcgdGV4
dCBlbmNvZGluZyBvYmplY3QuCisgICAgICAgIGNvbnN0IFdlYkNvcmU6OlRleHRFbmNvZGluZyYg
dGV4dEVuY29kaW5nOworCisgICAgICAgIC8vIERvY3VtZW50IG9iamVjdCBvZiBjdXJyZW50IGZy
YW1lLgorICAgICAgICBXZWJDb3JlOjpEb2N1bWVudCogZG9jOworICAgICAgICAvLyBMb2NhbCBk
aXJlY3RvcnkgbmFtZSBvZiBhbGwgbG9jYWwgcmVzb3VyY2UgZmlsZXMuCisgICAgICAgIGNvbnN0
IFdlYkNvcmU6OlN0cmluZyYgZGlyZWN0b3J5TmFtZTsKKworICAgICAgICAvLyBGbGFnIGluZGlj
YXRlcyBjdXJyZW50IGRvYyBpcyBodG1sIGRvY3VtZW50IG9yIG5vdC4gSXQncyBhIGNhY2hlIHZh
bHVlCisgICAgICAgIC8vIG9mIERvY3VtZW50LmlzSFRNTERvY3VtZW50KCkuCisgICAgICAgIGJv
b2wgaXNIVE1MRG9jdW1lbnQ7CisgICAgICAgIC8vIEZsYWcgd2hpY2ggaW5kaWNhdGUgd2hldGhl
ciB3ZSBoYXZlIG1ldCBkb2N1bWVudCB0eXBlIGRlY2xhcmF0aW9uLgorICAgICAgICBib29sIGhh
c0RvY3R5cGU7CisgICAgICAgIC8vIEZsYWcgd2hpY2ggaW5kaWNhdGUgd2hldGhlciB3aWxsIHBy
b2Nlc3MgbWV0YSBpc3N1ZS4KKyAgICAgICAgYm9vbCBoYXNDaGVja2VkTWV0YTsKKyAgICAgICAg
Ly8gVGhpcyBtZXRhIGVsZW1lbnQgbmVlZCB0byBiZSBza2lwcGVkIHdoZW4gc2VyaWFsaXppbmcg
RE9NLgorICAgICAgICBjb25zdCBXZWJDb3JlOjpFbGVtZW50KiBza2lwTWV0YUVsZW1lbnQ7Cisg
ICAgICAgIC8vIEZsYWcgaW5kaWNhdGVzIHdlIGFyZSBpbiBzY3JpcHQgb3Igc3R5bGUgdGFnLgor
ICAgICAgICBib29sIGlzSW5TY3JpcHRPclN0eWxlVGFnOworICAgICAgICAvLyBGbGFnIGluZGlj
YXRlcyB3aGV0aGVyIHdlIGhhdmUgd3JpdHRlbiB4bWwgZG9jdW1lbnQgZGVjbGFyYXRpb24uCisg
ICAgICAgIC8vIEl0IGlzIG9ubHkgdXNlZCBpbiB4bWwgZG9jdW1lbnQKKyAgICAgICAgYm9vbCBo
YXNEb2NEZWNsYXJhdGlvbjsKKyAgICAgICAgLy8gRmxhZyBpbmRpY2F0ZXMgd2hldGhlciB3ZSBo
YXZlIGFkZGVkIGFkZGl0aW9uYWwgY29udGVudHMgYmVmb3JlIGVuZCB0YWcuCisgICAgICAgIC8v
IFRoaXMgZmxhZyB3aWxsIGJlIHJlLWFzc2lnbmVkIGluIGVhY2ggY2FsbCBvZiBmdW5jdGlvbgor
ICAgICAgICAvLyBQb3N0QWN0aW9uQWZ0ZXJTZXJpYWxpemVPcGVuVGFnIGFuZCBpdCBjb3VsZCBi
ZSBjaGFuZ2VkIGluIGZ1bmN0aW9uCisgICAgICAgIC8vIFByZUFjdGlvbkJlZm9yZVNlcmlhbGl6
ZUVuZFRhZyBpZiB0aGUgZnVuY3Rpb24gYWRkcyBuZXcgY29udGVudHMgaW50bworICAgICAgICAv
LyBzZXJpYWxpemF0aW9uIHN0cmVhbS4KKyAgICAgICAgYm9vbCBoYXNBZGRlZENvbnRlbnRzQmVm
b3JlRW5kOworCisgICAgICAgIC8vIENvbnN0cnVjdG9yLgorICAgICAgICBTZXJpYWxpemVEb21Q
YXJhbShjb25zdCBXZWJDb3JlOjpLVVJMJiBjdXJyZW50RnJhbWVVUkwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6OlRleHRFbmNvZGluZyYgdGV4dEVuY29kaW5nLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpEb2N1bWVudCogZG9jLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGRpcmVjdG9yeU5hbWUp
OworICAgIH07CisKKyAgICAvLyBDb2xsZWN0IGFsbCB0YXJnZXQgZnJhbWVzIHdoaWNoIG5lZWQg
dG8gYmUgc2VyaWFsaXplZC4KKyAgICB2b2lkIGNvbGxlY3RUYXJnZXRGcmFtZXMoKTsKKyAgICAv
LyBCZWZvcmUgd2UgYmVnaW4gc2VyaWFsaXppbmcgb3BlbiB0YWcgb2YgYSBlbGVtZW50LCB3ZSBn
aXZlIHRoZSB0YXJnZXQKKyAgICAvLyBlbGVtZW50IGEgY2hhbmNlIHRvIGRvIHNvbWUgd29yayBw
cmlvciB0byBhZGQgc29tZSBhZGRpdGlvbmFsIGRhdGEuCisgICAgV2ViQ29yZTo6U3RyaW5nIHBy
ZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZU9wZW5UYWcoY29uc3QgV2ViQ29yZTo6RWxlbWVudCogZWxl
bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogbmVlZFNraXApOworICAgIC8vIEFmdGVyIHdl
IGZpbmlzaCBzZXJpYWxpemluZyBvcGVuIHRhZyBvZiBhIGVsZW1lbnQsIHdlIGdpdmUgdGhlIHRh
cmdldAorICAgIC8vIGVsZW1lbnQgYSBjaGFuY2UgdG8gZG8gc29tZSBwb3N0IHdvcmsgdG8gYWRk
IHNvbWUgYWRkaXRpb25hbCBkYXRhLgorICAgIFdlYkNvcmU6OlN0cmluZyBwb3N0QWN0aW9uQWZ0
ZXJTZXJpYWxpemVPcGVuVGFnKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXpl
RG9tUGFyYW0qIHBhcmFtKTsKKyAgICAvLyBCZWZvcmUgd2UgYmVnaW4gc2VyaWFsaXppbmcgZW5k
IHRhZyBvZiBhIGVsZW1lbnQsIHdlIGdpdmUgdGhlIHRhcmdldAorICAgIC8vIGVsZW1lbnQgYSBj
aGFuY2UgdG8gZG8gc29tZSB3b3JrIHByaW9yIHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgZGF0YS4K
KyAgICBXZWJDb3JlOjpTdHJpbmcgcHJlQWN0aW9uQmVmb3JlU2VyaWFsaXplRW5kVGFnKGNvbnN0
IFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiBuZWVkU2tp
cCk7CisgICAgLy8gQWZ0ZXIgd2UgZmluaXNoIHNlcmlhbGl6aW5nIGVuZCB0YWcgb2YgYSBlbGVt
ZW50LCB3ZSBnaXZlIHRoZSB0YXJnZXQKKyAgICAvLyBlbGVtZW50IGEgY2hhbmNlIHRvIGRvIHNv
bWUgcG9zdCB3b3JrIHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgZGF0YS4KKyAgICBXZWJDb3JlOjpT
dHJpbmcgcG9zdEFjdGlvbkFmdGVyU2VyaWFsaXplRW5kVGFnKGNvbnN0IFdlYkNvcmU6OkVsZW1l
bnQqIGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pOworICAgIC8vIFNhdmUgZ2VuZXJhdGVk
IGh0bWwgY29udGVudCB0byBkYXRhIGJ1ZmZlci4KKyAgICB2b2lkIHNhdmVIVE1MQ29udGVudFRv
QnVmZmVyKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgcmVzdWx0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKTsKKyAgICAvLyBTZXJpYWxp
emUgb3BlbiB0YWcgb2YgYW4gc3BlY2lmaWVkIGVsZW1lbnQuCisgICAgdm9pZCBvcGVuVGFnVG9T
dHJpbmcoY29uc3QgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pOworICAgIC8vIFNlcmlhbGl6ZSBlbmQg
dGFnIG9mIGFuIHNwZWNpZmllZCBlbGVtZW50LgorICAgIHZvaWQgZW5kVGFnVG9TdHJpbmcoY29u
c3QgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNl
cmlhbGl6ZURvbVBhcmFtKiBwYXJhbSk7CisgICAgLy8gQnVpbGQgY29udGVudCBmb3IgYSBzcGVj
aWZpZWQgbm9kZQorICAgIHZvaWQgYnVpbGRDb250ZW50Rm9yTm9kZShjb25zdCBXZWJDb3JlOjpO
b2RlKiBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJh
bSogcGFyYW0pOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdHJpbmcuY3BwIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJTdHJpbmcuY3BwCmluZGV4IGY0NWUwNWYuLjUzMTM5MDcgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViU3RyaW5nLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlN0cmluZy5jcHAKQEAgLTEyMSw2ICsxMjEsMTIgQEAgV2ViU3RyaW5nOjpvcGVyYXRvciBX
ZWJDb3JlOjpBdG9taWNTdHJpbmcoKSBjb25zdAogICAgIHJldHVybiBXZWJDb3JlOjpBdG9taWNT
dHJpbmcoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U3RyaW5nSW1wbCAqPihtX3ByaXZhdGUpKTsKIH0K
IAorV2ViU3RyaW5nJiBXZWJTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBjaGFyKiBkYXRhKQorewor
ICAgIGFzc2lnbihXZWJDb3JlOjpTdHJpbmc6OmZyb21VVEY4KGRhdGEpKTsKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKIHZvaWQgV2ViU3RyaW5nOjphc3NpZ24oV2ViU3RyaW5nUHJpdmF0ZSogcCkK
IHsKICAgICAvLyBUYWtlIGNhcmUgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG1fcHJpdmF0ZSA9
PSBwCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44703</attachid>
            <date>2009-12-11 12:49:20 -0800</date>
            <delta_ts>2009-12-11 15:07:42 -0800</delta_ts>
            <desc>Added WebPageSerializer to WebKit API.</desc>
            <filename>bug-31737-20091211124918.patch</filename>
            <type>text/plain</type>
            <size>100597</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjJjZDdhMS4uYmNlM2Q4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAwOS0xMi0wNyAgWWFhciBTY2huaXRt
YW4gIDx5YWFyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBXZWJQYWdlU2VyaWFsaXplciB0byBXZWJLaXQgQVBJLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTczNwor
CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmNwcDogQWRkZWQgbWV0aG9k
cyB0byBtYWtlIFN0cmluZ0J1aWxkZXIgZXZlbiBtb3JlIHVzZWZ1bCBmb3IgbGFyZ2Ugc2NhbGUg
c3RyaW5nIGNvbmNhdGVuYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdCdWlsZGVyOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdCdWlsZGVyOjpsZW5ndGgpOgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5oOgorCiAyMDA5LTEyLTA3ICBHeXV5b3Vu
ZyBLaW0gIDxneXV5b3VuZ0BnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKaW5kZXggYzIxZTM2
Ni4uM2UzNDk4MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxk
ZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmNwcApAQCAt
OTUsNCArOTUsMTcgQEAgU3RyaW5nIFN0cmluZ0J1aWxkZXI6OnRvU3RyaW5nKCkgY29uc3QKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCit2b2lkIFN0cmluZ0J1aWxkZXI6OmNsZWFyKCkKK3sKKyAg
ICBtX3RvdGFsTGVuZ3RoID0gVUlOVF9NQVg7CisgICAgbV9zdHJpbmdzLmNsZWFyKCk7Cit9CisK
K3Vuc2lnbmVkIFN0cmluZ0J1aWxkZXI6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgaWYgKG1fdG90
YWxMZW5ndGggPT0gVUlOVF9NQVgpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3Rv
dGFsTGVuZ3RoOworfQorCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3Ry
aW5nQnVpbGRlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxkZXIuaAppbmRl
eCA4ZDc2YjljLi43ZjcyZmJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3Ry
aW5nQnVpbGRlci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmgK
QEAgLTQyLDYgKzQyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGFwcGVu
ZChjb25zdCBTdHJpbmcmKTsKICAgICAgICAgdm9pZCBhcHBlbmQoVUNoYXIpOwogICAgICAgICB2
b2lkIGFwcGVuZChjaGFyKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgY2xlYXIoKTsKKyAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAKICAgICAgICAgU3RyaW5nIHRvU3RyaW5nKCkg
Y29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDU3OTdkM2UuLjY3MzRkNGQgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEyMSBAQAorMjAwOS0xMi0wNyAgWWFhciBTY2huaXRtYW4gIDx5YWFyQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRlZCBXZWJQYWdlU2VyaWFsaXplciB0byBXZWJLaXQgQVBJIGFuZCBlbnJpY2hlZCB0aGUg
V2ViTm9kZSBoaWVyYXJjaHkgdG8gc3VwcG9ydAorICAgICAgICBkb3duc3RyZWFtIHVuaXQtdGVz
dGluZyBvZiBzZXJpYWxpemF0aW9uLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zMTczNworCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAg
KiBwdWJsaWMvV2ViRG9jdW1lbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkRvY3Vt
ZW50OjpXZWJEb2N1bWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRvY3VtZW50OjpvcGVyYXRv
cj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6YXNzaWduKToKKyAgICAgICAgKiBw
dWJsaWMvV2ViRWxlbWVudC5oOgorICAgICAgICAqIHB1YmxpYy9XZWJGb3JtRWxlbWVudC5oOgor
ICAgICAgICAoV2ViS2l0OjpXZWJGb3JtRWxlbWVudDo6b3BlcmF0b3I9KToKKyAgICAgICAgKiBw
dWJsaWMvV2ViRnJhbWUuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViTm9kZS5oOgorICAgICAgICAo
V2ViS2l0OjpXZWJOb2RlOjopOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjp0b0NvbnN0RWxl
bWVudCk6CisgICAgICAgICogcHVibGljL1dlYk5vZGVDb2xsZWN0aW9uLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJOb2RlQ29sbGVjdGlvbjo6fldlYk5vZGVDb2xsZWN0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTm9kZUNvbGxlY3Rpb246OldlYk5vZGVDb2xsZWN0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTm9kZUNvbGxlY3Rpb246Om9wZXJhdG9yPSk6CisgICAgICAgICog
cHVibGljL1dlYk5vZGVMaXN0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlTGlz
dDo6fldlYk5vZGVMaXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZUxpc3Q6OldlYk5vZGVM
aXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZUxpc3Q6Om9wZXJhdG9yPSk6CisgICAgICAg
ICogcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9X
ZWJQYWdlU2VyaWFsaXplckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVNlcmlhbGl6ZXJDbGllbnQ6Oik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVy
Q2xpZW50OjpXZWJQYWdlU2VyaWFsaXplckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VTZXJpYWxpemVyQ2xpZW50Ojp+V2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQpOgorICAgICAgICAq
IHB1YmxpYy9XZWJTdHJpbmcuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViVmlldy5oOgorICAgICAg
ICAqIHNyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcDoKKyAgICAgICAgKiBzcmMvRE9NVXRpbGl0
aWVzUHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OmVsZW1lbnRIYXNMZWdhbExpbmtBdHRy
aWJ1dGUpOgorICAgICAgICAqIHNyYy9ET01VdGlsaXRpZXNQcml2YXRlLmg6CisgICAgICAgICog
c3JjL1dlYkRvY3VtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkRvY3VtZW50
OjpXZWJEb2N1bWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRvY3VtZW50OjpvcGVyYXRvcj0p
OgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRy
PERvY3VtZW50Pik6CisgICAgICAgIChXZWJLaXQ6OldlYkRvY3VtZW50OjpmcmFtZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkRvY3VtZW50Ojppc0hUTUxEb2N1bWVudCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkRvY3VtZW50OjpiYXNlVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViRG9jdW1lbnQ6
OmJvZHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6aGVhZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkRvY3VtZW50OjphbGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6
Y29tcGxldGVVUkwpOgorICAgICAgICAqIHNyYy9XZWJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViRWxlbWVudDo6aGFzVGFnTmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkVsZW1l
bnQ6Omhhc0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkVsZW1lbnQ6OmdldEF0dHJp
YnV0ZSk6CisgICAgICAgICogc3JjL1dlYkVudGl0aWVzLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OnBvcHVsYXRlTWFwKToKKyAgICAgICAgKFdlYktpdDo6KToKKyAgICAgICAgKFdlYktp
dDo6V2ViRW50aXRpZXM6OldlYkVudGl0aWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViRW50aXRp
ZXM6OmVudGl0eU5hbWVCeUNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJFbnRpdGllczo6Y29u
dmVydEVudGl0aWVzSW5TdHJpbmcpOgorICAgICAgICAqIHNyYy9XZWJFbnRpdGllcy5oOiBBZGRl
ZC4KKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
RnJhbWU6OmZyb21GcmFtZU93bmVyRWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
SW1wbDo6ZW5jb2RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmRvY3VtZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpmcm9tRnJhbWVPd25lckVsZW1lbnQp
OgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViTm9kZS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6Om5vZGVUeXBlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTm9kZTo6bm9kZVZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6ZG9jdW1l
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjpmaXJzdENoaWxkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViTm9kZTo6bGFzdENoaWxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6cHJl
dmlvdXNTaWJsaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6bmV4dFNpYmxpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjpoYXNDaGlsZE5vZGVzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTm9kZTo6Y2hpbGROb2Rlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6OmNyZWF0
ZU1hcmt1cCk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6OmlzVGV4dE5vZGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJOb2RlOjppc0VsZW1lbnROb2RlKToKKyAgICAgICAgKiBzcmMvV2ViTm9k
ZUNvbGxlY3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZUNvbGxlY3Rp
b246OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZUNvbGxlY3Rpb246OmFzc2lnbik6
CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVDb2xsZWN0aW9uOjpXZWJOb2RlQ29sbGVjdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVDb2xsZWN0aW9uOjpsZW5ndGgpOgorICAgICAgICAo
V2ViS2l0OjpXZWJOb2RlQ29sbGVjdGlvbjo6bmV4dEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJOb2RlQ29sbGVjdGlvbjo6Zmlyc3RJdGVtKToKKyAgICAgICAgKiBzcmMvV2ViTm9kZUxpc3Qu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZUxpc3Q6OnJlc2V0KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTm9kZUxpc3Q6OmFzc2lnbik6CisgICAgICAgIChXZWJLaXQ6OldlYk5v
ZGVMaXN0OjpXZWJOb2RlTGlzdCk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVMaXN0OjpsZW5n
dGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlTGlzdDo6aXRlbSk6CisgICAgICAgICogc3Jj
L1dlYlBhZ2VTZXJpYWxpemVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VT
ZXJpYWxpemVyOjpzZXJpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXpl
cjo6Z2VuZXJhdGVNZXRhQ2hhcnNldERlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlTWFya09mVGhlV2ViRGVjbGFyYXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVCYXNlVGFnRGVjbGFyYXRpb24p
OgorICAgICAgICAqIHNyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpTZXJpYWxpemVEb21QYXJhbTo6U2Vy
aWFsaXplRG9tUGFyYW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6
OnByZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZU9wZW5UYWcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlU2VyaWFsaXplckltcGw6OnBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZU9wZW5UYWcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6OnByZUFjdGlvbkJlZm9yZVNlcmlh
bGl6ZUVuZFRhZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6cG9z
dEFjdGlvbkFmdGVyU2VyaWFsaXplRW5kVGFnKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNl
cmlhbGl6ZXJJbXBsOjpzYXZlSFRNTENvbnRlbnRUb0J1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6b3BlblRhZ1RvU3RyaW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjplbmRUYWdUb1N0cmluZyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6YnVpbGRDb250ZW50Rm9yTm9kZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpjb2xsZWN0VGFyZ2V0RnJh
bWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpzZXJpYWxpemUp
OgorICAgICAgICAqIHNyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuaDogQWRkZWQuCisgICAgICAg
ICogc3JjL1dlYlN0cmluZy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6V2ViU3Ry
aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvcj0pOgorICAgICAgICAq
IHNyYy9XZWJWaWV3SW1wbC5jcHA6CisKIDIwMDktMTItMDcgIE1pa2hhaWwgTmFnYW5vdiAgPG1u
YWdhbm92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFu
LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cAppbmRleCBkN2JkMzBkLi44M2M5ZmJkIDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAt
MTAyLDYgKzEwMiw3IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJEZXZUb29sc0FnZW50
Q2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRGV2VG9vbHNGcm9udGVuZC5o
JywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkRldlRvb2xzRnJvbnRlbmRDbGllbnQuaCcs
CisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJEb2N1bWVudC5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYkRyYWdEYXRhLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRWRp
dGluZ0FjdGlvbi5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkVsZW1lbnQuaCcsCkBA
IC0xMjcsMTAgKzEyOCwxNCBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWltZVJlZ2lz
dHJ5LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTmF2aWdhdGlvblR5cGUuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJOb2RlLmgnLAorICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViTm9kZUNvbGxlY3Rpb24uaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJOb2Rl
TGlzdC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk5vbkNvcHlhYmxlLmgnLAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViTm90aWZpY2F0aW9uLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyLmgnLAogICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrLmgnLAorICAgICAgICAgICAg
ICAgICdwdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaCcsCisgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJQYWdlU2VyaWFsaXplckNsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YlBhc3N3b3JkQXV0b2NvbXBsZXRlTGlzdGVuZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJQYXNzd29yZEZvcm1EYXRhLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUGx1
Z2luLmgnLApAQCAtMjQyLDggKzI0NywxMSBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViRGF0
YWJhc2UuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkRhdGFTb3VyY2VJbXBsLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJEYXRhU291cmNlSW1wbC5oJywKKyAgICAgICAgICAg
ICAgICAnc3JjL1dlYkRvY3VtZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJEcmFn
RGF0YS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRWxlbWVudC5jcHAnLAorICAgICAg
ICAgICAgICAgICdzcmMvV2ViRW50aXRpZXMuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dl
YkVudGl0aWVzLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRmlsZUNob29zZXJDb21wbGV0
aW9uSW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRmlsZUNob29zZXJDb21wbGV0
aW9uSW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZvbnRDYWNoZS5jcHAnLApAQCAt
MjYyLDcgKzI3MCwxMiBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFQbGF5ZXJDbGll
bnRJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYVBsYXllckNsaWVudElt
cGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJOb2RlLmNwcCcsCisgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJOb2RlQ29sbGVjdGlvbi5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2Vi
Tm9kZUxpc3QuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYk5vdGlmaWNhdGlvbi5jcHAn
LAorICAgICAgICAgICAgICAgICdzcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwJywKKyAgICAgICAg
ICAgICAgICAnc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5jcHAnLAorICAgICAgICAgICAgICAg
ICdzcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
UGFzc3dvcmRGb3JtRGF0YS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViUGFzc3dvcmRG
b3JtVXRpbHMuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlBhc3N3b3JkRm9ybVV0aWxz
LmgnLApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEb2N1bWVudC5oIGIv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEb2N1bWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjU4YmYxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkRvY3VtZW50LmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRG9jdW1l
bnRfaAorI2RlZmluZSBXZWJEb2N1bWVudF9oCisKKyNpbmNsdWRlICJXZWJOb2RlLmgiCisKKyNp
ZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgRG9jdW1l
bnQ7IH0KK25hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1Jl
ZlB0cjsgfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViRWxlbWVudDsK
K2NsYXNzIFdlYkZyYW1lOworY2xhc3MgV2ViTm9kZUNvbGxlY3Rpb247CitjbGFzcyBXZWJTdHJp
bmc7CitjbGFzcyBXZWJVUkw7CisKKy8vIFByb3ZpZGVzIHJlYWRvbmx5IGFjY2VzcyB0byBzb21l
IHByb3BlcnRpZXMgb2YgYSBET00gZG9jdW1lbnQuCitjbGFzcyBXZWJEb2N1bWVudCA6IHB1Ymxp
YyBXZWJOb2RlIHsKK3B1YmxpYzoKKyAgICBXZWJEb2N1bWVudCgpIHsgfQorICAgIFdlYkRvY3Vt
ZW50KGNvbnN0IFdlYkRvY3VtZW50JiBlKSA6IFdlYk5vZGUoZSkgeyB9CisKKyAgICBXZWJEb2N1
bWVudCYgb3BlcmF0b3I9KGNvbnN0IFdlYkRvY3VtZW50JiBlKQorICAgIHsKKyAgICAgICAgV2Vi
Tm9kZTo6YXNzaWduKGUpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIHZvaWQg
YXNzaWduKGNvbnN0IFdlYkRvY3VtZW50JiBlKSB7IFdlYk5vZGU6OmFzc2lnbihlKTsgfQorCisg
ICAgLy8gUmV0dXJucyB0aGUgZnJhbWUgdGhlIGRvY3VtZW50IGJlbG9uZ3MgdG8gb3IgMCBpZiB0
aGUgZG9jdW1lbnQgaXMgZnJhbWVsZXNzLgorICAgIFdFQktJVF9BUEkgV2ViRnJhbWUqIGZyYW1l
KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzSFRNTERvY3VtZW50KCkgY29uc3Q7Cisg
ICAgV0VCS0lUX0FQSSBXZWJVUkwgYmFzZVVSTCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2Vi
RWxlbWVudCBib2R5KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJFbGVtZW50IGhlYWQoKTsK
KyAgICBXRUJLSVRfQVBJIFdlYk5vZGVDb2xsZWN0aW9uIGFsbCgpOworICAgIFdFQktJVF9BUEkg
V2ViVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFdlYlN0cmluZyYpIGNvbnN0OworCisjaWYgV0VCS0lU
X0lNUExFTUVOVEFUSU9OCisgICAgV2ViRG9jdW1lbnQoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdl
YkNvcmU6OkRvY3VtZW50PiYpOworICAgIFdlYkRvY3VtZW50JiBvcGVyYXRvcj0oY29uc3QgV1RG
OjpQYXNzUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50PiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFz
c1JlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4oKSBjb25zdDsKKyNlbmRpZgorfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJFbGVtZW50LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkVsZW1lbnQuaApp
bmRleCBkN2EyY2JmLi5hYzU1NTkzIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkVsZW1lbnQuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkVsZW1lbnQuaApA
QCAtMzksNyArMzksNiBAQCBuYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNs
YXNzIFBhc3NSZWZQdHI7IH0KICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLQogICAgIC8v
IFByb3ZpZGVzIHJlYWRvbmx5IGFjY2VzcyB0byBzb21lIHByb3BlcnRpZXMgb2YgYSBET00gZWxl
bWVudCBub2RlLgogICAgIGNsYXNzIFdlYkVsZW1lbnQgOiBwdWJsaWMgV2ViTm9kZSB7CiAgICAg
cHVibGljOgpAQCAtNDcsNyArNDYsMTEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgICAgIFdl
YkVsZW1lbnQoY29uc3QgV2ViRWxlbWVudCYgZSkgOiBXZWJOb2RlKGUpIHsgfQogCiAgICAgICAg
IFdlYkVsZW1lbnQmIG9wZXJhdG9yPShjb25zdCBXZWJFbGVtZW50JiBlKSB7IFdlYk5vZGU6OmFz
c2lnbihlKTsgcmV0dXJuICp0aGlzOyB9Ci0gICAgICAgIFdFQktJVF9BUEkgdm9pZCBhc3NpZ24o
Y29uc3QgV2ViRWxlbWVudCYgZSkgeyBXZWJOb2RlOjphc3NpZ24oZSk7IH0KKyAgICAgICAgdm9p
ZCBhc3NpZ24oY29uc3QgV2ViRWxlbWVudCYgZSkgeyBXZWJOb2RlOjphc3NpZ24oZSk7IH0KKwor
ICAgICAgICBXRUJLSVRfQVBJIGJvb2wgaGFzVGFnTmFtZShjb25zdCBXZWJTdHJpbmcmKSBjb25z
dDsKKyAgICAgICAgV0VCS0lUX0FQSSBib29sIGhhc0F0dHJpYnV0ZShjb25zdCBXZWJTdHJpbmcm
KSBjb25zdDsKKyAgICAgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgZ2V0QXR0cmlidXRlKGNvbnN0
IFdlYlN0cmluZyYpIGNvbnN0OwogCiAjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCiAgICAgICAg
IFdlYkVsZW1lbnQoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+Jik7CmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZvcm1FbGVtZW50LmggYi9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkZvcm1FbGVtZW50LmgKaW5kZXggMjdhMWVkYi4uYjA3YmZm
OSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGb3JtRWxlbWVudC5oCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRm9ybUVsZW1lbnQuaApAQCAtNTAsNyArNTAs
MTEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgICAgIFdlYkZvcm1FbGVtZW50KCkgOiBXZWJF
bGVtZW50KCkgeyB9CiAgICAgICAgIFdlYkZvcm1FbGVtZW50KGNvbnN0IFdlYkZvcm1FbGVtZW50
JiBlKSA6IFdlYkVsZW1lbnQoZSkgeyB9CiAKLSAgICAgICAgV2ViRWxlbWVudCYgb3BlcmF0b3I9
KGNvbnN0IFdlYkZvcm1FbGVtZW50JiBlKSB7IFdlYkVsZW1lbnQ6OmFzc2lnbihlKTsgcmV0dXJu
ICp0aGlzOyB9CisgICAgICAgIFdlYkZvcm1FbGVtZW50JiBvcGVyYXRvcj0oY29uc3QgV2ViRm9y
bUVsZW1lbnQmIGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIFdlYkVsZW1lbnQ6OmFzc2lnbihl
KTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQogICAgICAgICBXRUJLSVRf
QVBJIHZvaWQgYXNzaWduKGNvbnN0IFdlYkZvcm1FbGVtZW50JiBlKSB7IFdlYkVsZW1lbnQ6OmFz
c2lnbihlKTsgfQogCiAjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkZyYW1lLmgKaW5kZXggNDRiNTdhYS4uZGI2Y2ZhZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJGcmFtZS5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJh
bWUuaApAQCAtNDcsNiArNDcsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViRGF0
YTsKIGNsYXNzIFdlYkRhdGFTb3VyY2U7CitjbGFzcyBXZWJEb2N1bWVudDsKK2NsYXNzIFdlYkVs
ZW1lbnQ7CiBjbGFzcyBXZWJGb3JtRWxlbWVudDsKIGNsYXNzIFdlYkhpc3RvcnlJdGVtOwogY2xh
c3MgV2ViSW5wdXRFbGVtZW50OwpAQCAtODUsNiArODcsMTAgQEAgcHVibGljOgogICAgIFdFQktJ
VF9BUEkgc3RhdGljIFdlYkZyYW1lKiBmcmFtZUZvckVudGVyZWRDb250ZXh0KCk7CiAgICAgV0VC
S0lUX0FQSSBzdGF0aWMgV2ViRnJhbWUqIGZyYW1lRm9yQ3VycmVudENvbnRleHQoKTsKIAorICAg
IC8vIFJldHVybnMgdGhlIGZyYW1lIGluc2lkZSBhIGdpdmVuIGZyYW1lIG9yIGlmcmFtZSBlbGVt
ZW50LiBSZXR1cm5zIDAgaWYKKyAgICAvLyB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBub3QgYSBmcmFt
ZSwgaWZyYW1lIG9yIGlmIHRoZSBmcmFtZSBpcyBlbXB0eS4KKyAgICBXRUJLSVRfQVBJIHN0YXRp
YyBXZWJGcmFtZSogZnJvbUZyYW1lT3duZXJFbGVtZW50KGNvbnN0IFdlYkVsZW1lbnQmKTsKKwog
CiAgICAgLy8gQmFzaWMgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTAzLDYgKzEwOSw4IEBAIHB1YmxpYzoKICAgICAv
LyB0aGUgZG9jdW1lbnQgbG9hZGVkIGluIHRoaXMgZnJhbWUuCiAgICAgdmlydHVhbCBXZWJVUkwg
b3BlblNlYXJjaERlc2NyaXB0aW9uVVJMKCkgY29uc3QgPSAwOwogCisgICAgLy8gUmV0dXJuIHRo
ZSBmcmFtZSdzIGVuY29kaW5nLgorICAgIHZpcnR1YWwgV2ViU3RyaW5nIGVuY29kaW5nKCkgY29u
c3QgPSAwOwogCiAgICAgLy8gR2VvbWV0cnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTY0LDggKzE3Miw5IEBAIHB1Ymxp
YzoKIAogICAgIC8vIENvbnRlbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICB2aXJ0dWFsIHZvaWQgZm9ybXMoV2ViVmVj
dG9yPFdlYkZvcm1FbGVtZW50PiYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFdlYkRvY3VtZW50
IGRvY3VtZW50KCkgY29uc3QgPSAwOwogCisgICAgdmlydHVhbCB2b2lkIGZvcm1zKFdlYlZlY3Rv
cjxXZWJGb3JtRWxlbWVudD4mKSBjb25zdCA9IDA7CiAKICAgICAvLyBTY3JpcHRpbmcgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBA
IC00NDQsNiArNDUzLDcgQEAgcHVibGljOgogICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBiYXNlIFVS
TCBvZiB0aGUgZnJhbWUncyBkb2N1bWVudC4gIFRoaXMgdXNlcyB0aGUKICAgICAvLyBzYW1lIGFs
Z29yaXRobSB0aGF0IFdlYktpdCB1c2VzIHRvIHJlc29sdmUgaHlwZXJsaW5rcyBmb3VuZCBpbiBh
CiAgICAgLy8gSFRNTCBkb2N1bWVudC4KKyAgICAvLyBEZXByZWNhdGVkLiBVc2UgZG9jdW1lbnQo
KS5jb21wbGV0ZVVSTCgpIGluc3RlYWQuCiAgICAgdmlydHVhbCBXZWJVUkwgY29tcGxldGVVUkwo
Y29uc3QgV2ViU3RyaW5nJikgY29uc3QgPSAwOwogCiAgICAgLy8gUmV0dXJucyB0aGUgY29udGVu
dHMgb2YgdGhpcyBmcmFtZSBhcyBhIHN0cmluZy4gIElmIHRoZSB0ZXh0IGlzCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5vZGUuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViTm9kZS5oCmluZGV4IDAzYWZhOTAuLmRmYmIwYWEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViTm9kZS5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
Tm9kZS5oCkBAIC00MCw3ICs0MCw5IEBAIG5hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gY2xhc3MgUGFzc1JlZlB0cjsgfQogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewor
Y2xhc3MgV2ViRG9jdW1lbnQ7CiBjbGFzcyBXZWJGcmFtZTsKK2NsYXNzIFdlYk5vZGVMaXN0Owog
CiAvLyBQcm92aWRlcyByZWFkb25seSBhY2Nlc3MgdG8gc29tZSBwcm9wZXJ0aWVzIG9mIGEgRE9N
IG5vZGUuCiBjbGFzcyBXZWJOb2RlIHsKQEAgLTY2LDkgKzY4LDM3IEBAIHB1YmxpYzoKICAgICBv
cGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Tm9kZT4oKSBjb25zdDsKICNlbmRpZgog
CisgICAgZW51bSBOb2RlVHlwZSB7CisgICAgICAgIEVsZW1lbnROb2RlID0gMSwKKyAgICAgICAg
QXR0cmlidXRlTm9kZSwKKyAgICAgICAgVGV4dE5vZGUsCisgICAgICAgIENEYXRhU2VjdGlvbk5v
ZGUsCisgICAgICAgIEVudGl0eVJlZmVyZW5jZU5vZGUsCisgICAgICAgIEVudGl0eU5vZGUsCisg
ICAgICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbnNOb2RlLAorICAgICAgICBDb21tZW50Tm9kZSwK
KyAgICAgICAgRG9jdW1lbnROb2RlLAorICAgICAgICBEb2N1bWVudFR5cGVOb2RlLAorICAgICAg
ICBEb2N1bWVudEZyYWdtZW50Tm9kZSwKKyAgICAgICAgTm90YXRpb25Ob2RlLAorICAgICAgICBY
UGF0aE5hbWVzcGFjZU5vZGUKKyAgICB9OworICAgIFdFQktJVF9BUEkgTm9kZVR5cGUgbm9kZVR5
cGUoKSBjb25zdDsKICAgICBXRUJLSVRfQVBJIFdlYk5vZGUgcGFyZW50Tm9kZSgpIGNvbnN0Owog
ICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQ
SSBXZWJTdHJpbmcgbm9kZVZhbHVlKCkgY29uc3Q7CisgICAgLy8gRGVwcmVjYXRlZC4gVXNlIGRv
Y3VtZW50KCkuZnJhbWUoKSBpbnN0ZWFkLgogICAgIFdFQktJVF9BUEkgV2ViRnJhbWUqIGZyYW1l
KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJEb2N1bWVudCBkb2N1bWVudCgpIGNvbnN0Owor
ICAgIFdFQktJVF9BUEkgV2ViTm9kZSBmaXJzdENoaWxkKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQ
SSBXZWJOb2RlIGxhc3RDaGlsZCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViTm9kZSBwcmV2
aW91c1NpYmxpbmcoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIFdlYk5vZGUgbmV4dFNpYmxpbmco
KSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaGFzQ2hpbGROb2RlcygpIGNvbnN0OworICAg
IFdFQktJVF9BUEkgV2ViTm9kZUxpc3QgY2hpbGROb2RlcygpOworICAgIFdFQktJVF9BUEkgV2Vi
U3RyaW5nIGNyZWF0ZU1hcmt1cCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBpc1RleHRO
b2RlKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzRWxlbWVudE5vZGUoKSBjb25zdDsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgdG9FbGVtZW50KCkKICAgICB7CkBAIC03Nyw2
ICsxMDcsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IFQgdG9Db25zdEVsZW1lbnQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgVCByZXM7CisgICAgICAgIHJlcy5tX3ByaXZhdGUgPSBtX3ByaXZhdGU7CisgICAg
ICAgIHJldHVybiByZXM7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdHlwZWRlZiBXZWJDb3Jl
OjpOb2RlIFdlYk5vZGVQcml2YXRlOwogICAgIHZvaWQgYXNzaWduKFdlYk5vZGVQcml2YXRlKik7
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5vZGVDb2xsZWN0aW9uLmgg
Yi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5vZGVDb2xsZWN0aW9uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJhNWNkOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViTm9kZUNvbGxlY3Rpb24uaApAQCAtMCwwICsxLDc1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXZWJOb2RlQ29sbGVjdGlvbl9oCisjZGVmaW5lIFdlYk5vZGVDb2xsZWN0aW9uX2gKKwor
I2luY2x1ZGUgIldlYkNvbW1vbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEhUTUxD
b2xsZWN0aW9uOyB9CisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2UgV1RGIHsg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NSZWZQdHI7IH0KKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYk5vZGU7CisKKy8vIFByb3ZpZGVzIHJlYWRvbmx5IGFj
Y2VzcyB0byBzb21lIHByb3BlcnRpZXMgb2YgYSBET00gbm9kZS4KK2NsYXNzIFdlYk5vZGVDb2xs
ZWN0aW9uIHsKK3B1YmxpYzoKKyAgICB+V2ViTm9kZUNvbGxlY3Rpb24oKSB7IHJlc2V0KCk7IH0K
KworICAgIFdlYk5vZGVDb2xsZWN0aW9uKCkgOiBtX3ByaXZhdGUoMCkgeyB9OworICAgIFdlYk5v
ZGVDb2xsZWN0aW9uKGNvbnN0IFdlYk5vZGVDb2xsZWN0aW9uJiBuKSA6IG1fcHJpdmF0ZSgwKSB7
IGFzc2lnbihuKTsgfQorICAgIFdlYk5vZGVDb2xsZWN0aW9uJiBvcGVyYXRvcj0oY29uc3QgV2Vi
Tm9kZUNvbGxlY3Rpb24mIG4pCisgICAgeworICAgICAgICBhc3NpZ24obik7CisgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICB9CisKKyAgICBXRUJLSVRfQVBJIHZvaWQgcmVzZXQoKTsKKyAgICBX
RUJLSVRfQVBJIHZvaWQgYXNzaWduKGNvbnN0IFdlYk5vZGVDb2xsZWN0aW9uJik7CisKKyAgICBX
RUJLSVRfQVBJIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViTm9k
ZSBuZXh0SXRlbSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViTm9kZSBmaXJzdEl0ZW0oKSBj
b25zdDsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYk5vZGVDb2xsZWN0aW9u
KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4mKTsKKyNlbmRp
ZgorCitwcml2YXRlOgorICAgIHZvaWQgYXNzaWduKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uKik7
CisgICAgV2ViQ29yZTo6SFRNTENvbGxlY3Rpb24qIG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViTm9kZUxpc3QuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTm9kZUxpc3QuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmMyNDgzCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJOb2RlTGlzdC5oCkBAIC0wLDAgKzEsNzQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYk5vZGVMaXN0X2gKKyNkZWZpbmUgV2ViTm9kZUxpc3RfaAorCisjaW5jbHVk
ZSAiV2ViQ29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgTm9kZUxpc3Q7IH0K
KyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KK25hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gY2xhc3MgUGFzc1JlZlB0cjsgfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQg
eworY2xhc3MgV2ViTm9kZTsKKworLy8gUHJvdmlkZXMgcmVhZG9ubHkgYWNjZXNzIHRvIHNvbWUg
cHJvcGVydGllcyBvZiBhIERPTSBub2RlLgorY2xhc3MgV2ViTm9kZUxpc3QgeworcHVibGljOgor
ICAgIH5XZWJOb2RlTGlzdCgpIHsgcmVzZXQoKTsgfQorCisgICAgV2ViTm9kZUxpc3QoKSA6IG1f
cHJpdmF0ZSgwKSB7IH07CisgICAgV2ViTm9kZUxpc3QoY29uc3QgV2ViTm9kZUxpc3QmIG4pIDog
bV9wcml2YXRlKDApIHsgYXNzaWduKG4pOyB9CisgICAgV2ViTm9kZUxpc3QmIG9wZXJhdG9yPShj
b25zdCBXZWJOb2RlTGlzdCYgbikKKyAgICB7CisgICAgICAgIGFzc2lnbihuKTsKKyAgICAgICAg
cmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFdFQktJVF9BUEkgdm9pZCByZXNldCgpOworICAg
IFdFQktJVF9BUEkgdm9pZCBhc3NpZ24oY29uc3QgV2ViTm9kZUxpc3QmKTsKKworICAgIFdFQktJ
VF9BUEkgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJOb2RlIGl0
ZW0oc2l6ZV90KSBjb25zdDsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYk5v
ZGVMaXN0KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpOb2RlTGlzdD4mKTsKKyNlbmRp
ZgorCitwcml2YXRlOgorICAgIHZvaWQgYXNzaWduKFdlYkNvcmU6Ok5vZGVMaXN0Kik7CisgICAg
V2ViQ29yZTo6Tm9kZUxpc3QqIG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNl
cmlhbGl6ZXIuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGY3OTk0Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oCkBAIC0wLDAg
KzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYlBhZ2VTZXJpYWxpemVyX2gKKyNkZWZpbmUgV2ViUGFnZVNlcmlh
bGl6ZXJfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewor
Y2xhc3MgV2ViRnJhbWU7CitjbGFzcyBXZWJQYWdlU2VyaWFsaXplckNsaWVudDsKK2NsYXNzIFdl
YlN0cmluZzsKK2NsYXNzIFdlYlVSTDsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJW
ZWN0b3I7CisKKy8vIEdldCBodG1sIGRhdGEgYnkgc2VyaWFsaXppbmcgYWxsIGZyYW1lcyBvZiBj
dXJyZW50IHBhZ2Ugd2l0aCBsaXN0cworLy8gd2hpY2ggY29udGFpbiBhbGwgcmVzb3VyY2UgbGlu
a3MgdGhhdCBoYXZlIGxvY2FsIGNvcHkuCitjbGFzcyBXZWJQYWdlU2VyaWFsaXplciB7CitwdWJs
aWM6CisgICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGZpbmQgb3V0IGFsbCBmcmFtZXMgYW5kIHNl
cmlhbGl6ZSB0aGVtIHRvIEhUTUwgZGF0YS4KKyAgICAvLyBXZSBoYXZlIGEgZGF0YSBidWZmZXIg
dG8gdGVtcG9yYXJ5IHNhdmluZyBnZW5lcmF0ZWQgaHRtbCBkYXRhLiBXZSB3aWxsCisgICAgLy8g
c2VxdWVudGlhbGx5IGNhbGwgV2ViUGFnZVNlcmlhemxpZXJDbGllbnQgb25jZSB0aGUgZGF0YSBi
dWZmZXIgaXMgZnVsbC4KKyAgICAvLworICAgIC8vIFJldHVybiBmYWxzZSBtZWFucyBubyBhdmFp
bGFibGUgZnJhbWUgaGFzIGJlZW4gc2VyaWFsaXplZCwgb3RoZXJ3aXNlCisgICAgLy8gcmV0dXJu
IHRydWUuCisgICAgLy8KKyAgICAvLyBUaGUgcGFyYW1ldGVyIGZyYW1lIHNwZWNpZmllcyB3aGlj
aCBmcmFtZSBuZWVkIHRvIGJlIHNlcmlhbGl6ZWQuCisgICAgLy8gVGhlIHBhcmFtZXRlciByZWN1
cnNpdmUgc3BlY2lmaWVzIHdoZXRoZXIgd2UgbmVlZCB0bworICAgIC8vIHNlcmlhbGl6ZSBhbGwg
c3ViIGZyYW1lcyBvZiB0aGUgc3BlY2lmaWVkIGZyYW1lIG9yIG5vdC4KKyAgICAvLyBUaGUgcGFy
YW1ldGVyIGNsaWVudCBzcGVjaWZpZXMgdGhlIHBvaW50ZXIgb2YgaW50ZXJmYWNlCisgICAgLy8g
V2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQgcHJvdmlkaW5nIGEgc2luayBpbnRlcmZhY2UgdG8gcmVj
ZWl2ZSB0aGUKKyAgICAvLyBpbmRpdmlkdWFsIGNodW5rcyBvZiBkYXRhIHRvIGJlIHNhdmVkLgor
ICAgIC8vIFRoZSBwYXJhbWV0ZXIgbGlua3MgY29udGFpbiBvcmlnaW5hbCBVUkxzIG9mIGFsbCBz
YXZlZCBsaW5rcy4KKyAgICAvLyBUaGUgcGFyYW1ldGVyIGxvY2FsUGF0aHMgY29udGFpbiBjb3Jy
ZXNwb25kaW5nIGxvY2FsIGZpbGUgcGF0aHMgb2YgYWxsCisgICAgLy8gc2F2ZWQgbGlua3MsIHdo
aWNoIG1hdGNoZWQgd2l0aCB2ZWN0b3I6bGlua3Mgb25lIGJ5IG9uZS4KKyAgICAvLyBUaGUgcGFy
YW1ldGVyIGxvY2FsRGlyZWN0b3J5TmFtZSBpcyByZWxhdGl2ZSBwYXRoIG9mIGRpcmVjdG9yeSB3
aGljaAorICAgIC8vIGNvbnRhaW4gYWxsIHNhdmVkIGF1eGlsaWFyeSBmaWxlcyBpbmNsdWRlZCBh
bGwgc3ViIGZyYW1lcyBhbmQgcmVzb3VyY2VzLgorICAgIFdFQktJVF9BUEkgc3RhdGljIGJvb2wg
c2VyaWFsaXplKFdlYkZyYW1lKiBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHJlY3Vyc2l2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudCogY2xpZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+JiBsaW5rcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5n
PiYgbG9jYWxQYXRocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBXZWJTdHJpbmcmIGxvY2FsRGlyZWN0b3J5TmFtZSk7CisKKyAgICAvLyBGSVhNRTogVGhlIGZv
bGxvd2luZyBhcmUgaGVyZSBmb3IgdW5pdCB0ZXN0aW5nIHB1cnBvc2VzLiBDb25zaWRlcgorICAg
IC8vIGNoYW5naW5nIHRoZSB1bml0IHRlc3RzIGluc3RlYWQuCisKKyAgICAvLyBHZW5lcmF0ZSB0
aGUgTUVUQSBmb3IgY2hhcnNldCBkZWNsYXJhdGlvbi4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBX
ZWJTdHJpbmcgZ2VuZXJhdGVNZXRhQ2hhcnNldERlY2xhcmF0aW9uKGNvbnN0IFdlYlN0cmluZyYg
Y2hhcnNldCk7CisgICAgLy8gR2VuZXJhdGUgdGhlIE1PVFcgZGVjbGFyYXRpb24uCisgICAgV0VC
S0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5nIGdlbmVyYXRlTWFya09mVGhlV2ViRGVjbGFyYXRpb24o
Y29uc3QgV2ViVVJMJiB1cmwpOworICAgIC8vIEdlbmVyYXRlIHRoZSBkZWZhdWx0IGJhc2UgdGFn
IGRlY2xhcmF0aW9uLgorICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0ZUJh
c2VUYWdEZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGJhc2VUYXJnZXQpOworfTsKKworfSAg
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jMzBkZGJjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJQYWdlU2VyaWFsaXplckNsaWVudC5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlBh
Z2VTZXJpYWxpemVyQ2xpZW50X2gKKyNkZWZpbmUgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnRfaAor
CituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkNTdHJpbmc7CitjbGFzcyBXZWJVUkw7CisK
Ky8vIFRoaXMgY2xhc3MgaXMgdXNlZCBmb3IgcHJvdmlkaW5nIHNpbmsgaW50ZXJmYWNlIHRoYXQg
Y2FuIGJlIHVzZWQgdG8gcmVjZWl2ZQorLy8gdGhlIGluZGl2aWR1YWwgY2h1bmtzIG9mIGRhdGEg
dG8gYmUgc2F2ZWQuCitjbGFzcyBXZWJQYWdlU2VyaWFsaXplckNsaWVudCB7CitwdWJsaWM6Cisg
ICAgLy8gVGhpcyBlbnVtIGluZGljYXRlcyAgVGhpcyBzaW5rIGludGVyZmFjZSBjYW4gcmVjZWl2
ZSB0aGUgaW5kaXZpZHVhbCBjaHVua3MKKyAgICAvLyBvZiBzZXJpYWxpemVkIGRhdGEgdG8gYmUg
c2F2ZWQsIHNvIHdlIHVzZSB2YWx1ZXMgb2YgZm9sbG93aW5nIGVudW0KKyAgICAvLyBkZWZpbml0
aW9uIHRvIGluZGljYXRlIHRoZSBzZXJpYWxpemF0aW9uIHN0YXR1cyBvZiBzZXJpYWxpemluZyBh
bGwgaHRtbAorICAgIC8vIGNvbnRlbnQuIElmIGN1cnJlbnQgZnJhbWUgaXMgbm90IGNvbXBsZXRl
IHNlcmlhbGl6ZWQsIGNhbGwKKyAgICAvLyBkaWRTZXJpYWxpemVEYXRhRm9yRnJhbWUgd2l0aCBV
Ukwgb2YgY3VycmVudCBmcmFtZSwgZGF0YSwgZGF0YSBsZW5ndGggYW5kCisgICAgLy8gZmxhZyBD
dXJyZW50RnJhbWVJc05vdEZpbmlzaGVkLgorICAgIC8vIElmIGN1cnJlbnQgZnJhbWUgaXMgY29t
cGxldGUgc2VyaWFsaXplZCwgY2FsbCBkaWRTZXJpYWxpemVEYXRhRm9yRnJhbWUKKyAgICAvLyB3
aXRoIFVSTCBvZiBjdXJyZW50IGZyYW1lLCBkYXRhLCBkYXRhIGxlbmd0aCBhbmQgZmxhZworICAg
IC8vIEN1cnJlbnRGcmFtZUlzRmluaXNoZWQuCisgICAgLy8gSWYgYWxsIGZyYW1lcyBvZiBwYWdl
IGFyZSBjb21wbGV0ZSBzZXJpYWxpemVkLCBjYWxsCisgICAgLy8gZGlkU2VyaWFsaXplRGF0YUZv
ckZyYW1lIHdpdGggZW1wdHkgVVJMLCBlbXB0eSBkYXRhLCAwIGFuZCBmbGFnCisgICAgLy8gQWxs
RnJhbWVzQXJlRmluaXNoZWQuCisgICAgZW51bSBQYWdlU2VyaWFsaXphdGlvblN0YXR1cyB7Cisg
ICAgICAgIEN1cnJlbnRGcmFtZUlzTm90RmluaXNoZWQsCisgICAgICAgIEN1cnJlbnRGcmFtZUlz
RmluaXNoZWQsCisgICAgICAgIEFsbEZyYW1lc0FyZUZpbmlzaGVkLAorICAgIH07CisKKyAgICAv
LyBSZWNlaXZlIHRoZSBpbmRpdmlkdWFsIGNodW5rcyBvZiBzZXJpYWxpemVkIGFuZCBlbmNvZGVk
IGRhdGEgdG8gYmUgc2F2ZWQuCisgICAgLy8gVGhlIHBhcmFtZXRlciBmcmFtZVVSTCBzcGVjaWZp
ZXMgd2hhdCBmcmFtZSB0aGUgZGF0YSBiZWxvbmdzLiBUaGUKKyAgICAvLyBwYXJhbWV0ZXIgZGF0
YSBjb250YWlucyB0aGUgYXZhaWxhYmxlIGRhdGEgZm9yIHNhdmluZy4gVGhlIHBhcmFtZXRlcgor
ICAgIC8vIHN0YXR1cyBpbmRpY2F0ZXMgdGhlIHN0YXR1cyBvZiBkYXRhIHNlcmlhbGl6YXRpb24u
CisgICAgdmlydHVhbCB2b2lkIGRpZFNlcmlhbGl6ZURhdGFGb3JGcmFtZShjb25zdCBXZWJVUkwm
IGZyYW1lVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgV2ViQ1N0cmluZyYgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBhZ2VTZXJpYWxpemF0aW9uU3RhdHVzIHN0YXR1cykgPSAwOworICAgIFdlYlBhZ2VT
ZXJpYWxpemVyQ2xpZW50KCkgeyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5XZWJQYWdl
U2VyaWFsaXplckNsaWVudCgpIHsgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3RyaW5nLmggYi9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlN0cmluZy5oCmluZGV4IGQ5YjY2YjIuLmRmZjQ4Njcg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3RyaW5nLmgKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTdHJpbmcuaApAQCAtODYsNiArODYsMTIgQEAgcHVibGlj
OgogCiAgICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5nIGZyb21VVEY4KGNvbnN0IGNoYXIq
IGRhdGEsIHNpemVfdCBsZW5ndGgpOwogICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBm
cm9tVVRGOChjb25zdCBjaGFyKiBkYXRhKTsKKyAgICB0ZW1wbGF0ZSA8aW50IE4+IFdlYlN0cmlu
Zyhjb25zdCBjaGFyICgmZGF0YSlbTl0pCisgICAgICAgIDogbV9wcml2YXRlKDApCisgICAgewor
ICAgICAgICBhc3NpZ24oZnJvbVVURjgoZGF0YSwgTiAtIDEpKTsKKyAgICB9CisgICAgV0VCS0lU
X0FQSSBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBjaGFyKiBzKTsKIAogI2lmIFdFQktJVF9J
TVBMRU1FTlRBVElPTgogICAgIFdlYlN0cmluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKQEAg
LTk2LDYgKzEwMiw3IEBAIHB1YmxpYzoKICAgICBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBX
ZWJDb3JlOjpBdG9taWNTdHJpbmcmKTsKICAgICBvcGVyYXRvciBXZWJDb3JlOjpBdG9taWNTdHJp
bmcoKSBjb25zdDsKICNlbHNlCisKICAgICBXZWJTdHJpbmcoY29uc3Qgc3RyaW5nMTYmIHMpIDog
bV9wcml2YXRlKDApCiAgICAgewogICAgICAgICBhc3NpZ24ocy5kYXRhKCksIHMubGVuZ3RoKCkp
OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNw
cCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKaW5kZXggMzVl
MjA1Ny4uMjEwNGU1ZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRj
aGluZ0VudW1zLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51
bXMuY3BwCkBAIC0yNDUsNiArMjQ1LDIwIEBAIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0o
V2ViSW5wdXRFbGVtZW50OjpNb250aCwgSFRNTElucHV0RWxlbWVudDo6TU9OVEgpOwogQ09NUElM
RV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJJbnB1dEVsZW1lbnQ6OlRpbWUsIEhUTUxJbnB1dEVs
ZW1lbnQ6OlRJTUUpOwogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJJbnB1dEVsZW1l
bnQ6OldlZWssIEhUTUxJbnB1dEVsZW1lbnQ6OldFRUspOwogCitDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdlYk5vZGU6OkVsZW1lbnROb2RlLCBOb2RlOjpFTEVNRU5UX05PREUpOworQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJOb2RlOjpBdHRyaWJ1dGVOb2RlLCBOb2RlOjpB
VFRSSUJVVEVfTk9ERSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk5vZGU6OlRl
eHROb2RlLCBOb2RlOjpURVhUX05PREUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShX
ZWJOb2RlOjpDRGF0YVNlY3Rpb25Ob2RlLCBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUpOworQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJOb2RlOjpFbnRpdHlSZWZlcmVuY2VOb2RlLCBO
b2RlOjpFTlRJVFlfUkVGRVJFTkNFX05PREUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5V
TShXZWJOb2RlOjpFbnRpdHlOb2RlLCBOb2RlOjpFTlRJVFlfTk9ERSk7CitDT01QSUxFX0FTU0VS
VF9NQVRDSElOR19FTlVNKFdlYk5vZGU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbnNOb2RlLCBOb2Rl
OjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdf
RU5VTShXZWJOb2RlOjpDb21tZW50Tm9kZSwgTm9kZTo6Q09NTUVOVF9OT0RFKTsKK0NPTVBJTEVf
QVNTRVJUX01BVENISU5HX0VOVU0oV2ViTm9kZTo6RG9jdW1lbnROb2RlLCBOb2RlOjpET0NVTUVO
VF9OT0RFKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTm9kZTo6RG9jdW1lbnRU
eXBlTm9kZSwgTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFKTsKK0NPTVBJTEVfQVNTRVJUX01BVENI
SU5HX0VOVU0oV2ViTm9kZTo6RG9jdW1lbnRGcmFnbWVudE5vZGUsIE5vZGU6OkRPQ1VNRU5UX0ZS
QUdNRU5UX05PREUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJOb2RlOjpOb3Rh
dGlvbk5vZGUsIE5vZGU6Ok5PVEFUSU9OX05PREUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdf
RU5VTShXZWJOb2RlOjpYUGF0aE5hbWVzcGFjZU5vZGUsIE5vZGU6OlhQQVRIX05BTUVTUEFDRV9O
T0RFKTsKKwogI2lmIEVOQUJMRShWSURFTykKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0o
V2ViTWVkaWFQbGF5ZXI6OkVtcHR5LCBNZWRpYVBsYXllcjo6RW1wdHkpOwogQ09NUElMRV9BU1NF
UlRfTUFUQ0hJTkdfRU5VTShXZWJNZWRpYVBsYXllcjo6SWRsZSwgTWVkaWFQbGF5ZXI6OklkbGUp
OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9ET01VdGlsaXRpZXNQcml2YXRlLmNw
cCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5jcHAKaW5kZXggZmZk
ZDg1ZC4uYzJhYWNmYiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9ET01VdGlsaXRp
ZXNQcml2YXRlLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RPTVV0aWxpdGllc1ByaXZh
dGUuY3BwCkBAIC04NCw0ICs4NCw1NCBAQCBTdHJpbmcgbmFtZU9mSW5wdXRFbGVtZW50KEhUTUxJ
bnB1dEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmV0dXJuIFdlYklucHV0RWxlbWVudChlbGVtZW50
KS5uYW1lRm9yQXV0b2ZpbGwoKTsKIH0KIAorCitib29sIGVsZW1lbnRIYXNMZWdhbExpbmtBdHRy
aWJ1dGUoY29uc3QgRWxlbWVudCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBpZiAoYXR0ck5h
bWUgPT0gSFRNTE5hbWVzOjpzcmNBdHRyKSB7CisgICAgICAgIC8vIENoZWNrIHNyYyBhdHRyaWJ1
dGUuCisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nVGFnKQor
ICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykK
KyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppZnJhbWVUYWcp
CisgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVUYWcp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpKSB7CisgICAgICAgICAgICBjb25zdCBIVE1MSW5wdXRF
bGVtZW50KiBpbnB1dCA9CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBIVE1MSW5wdXRF
bGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgICAgICBpZiAoaW5wdXQtPmlucHV0VHlwZSgpID09
IEhUTUxJbnB1dEVsZW1lbnQ6OklNQUdFKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBIVE1MTmFtZXM6OmhyZWZBdHRy
KSB7CisgICAgICAgIC8vIENoZWNrIGhyZWYgYXR0cmlidXRlLgorICAgICAgICBpZiAoZWxlbWVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpbmtUYWcpCisgICAgICAgICAgICB8fCBlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YVRhZykKKyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjphcmVhVGFnKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjphY3Rpb25BdHRyKSB7CisgICAg
ICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybVRhZykpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IEhUTUxOYW1lczo6
YmFja2dyb3VuZEF0dHIpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpib2R5VGFnKQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRhYmxlVGFnKQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRyVGFnKQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnRkVGFnKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZWxzZSBpZiAoYXR0ck5h
bWUgPT0gSFRNTE5hbWVzOjpjaXRlQXR0cikgeworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGVUYWcpCisgICAgICAgICAgICB8fCBlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6cVRhZykKKyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpkZWxUYWcpCisgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aW5zVGFnKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0g
ZWxzZSBpZiAoYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjpjbGFzc2lkQXR0cgorICAgICAgICAgICAg
ICAgfHwgYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjpkYXRhQXR0cikgeworICAgICAgICBpZiAoZWxl
bWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdFRhZykpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IEhUTUxOYW1lczo6Y29kZWJhc2VB
dHRyKSB7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0
VGFnKQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFwcGxl
dFRhZykpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1
bS9zcmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9ET01VdGls
aXRpZXNQcml2YXRlLmgKaW5kZXggYzAyYmY4NC4uMjUzYWIzZiAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9ET01VdGlsaXRpZXNQcml2YXRlLmgKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9ET01VdGlsaXRpZXNQcml2YXRlLmgKQEAgLTMyLDExICszMiwxMyBAQAogI2RlZmluZSBE
T01VdGlsaXRpZXNQcml2YXRlX2gKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRWxlbWVu
dDsKIGNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiBjbGFzcyBIVE1MTGlua0VsZW1lbnQ7CiBjbGFz
cyBIVE1MTWV0YUVsZW1lbnQ7CiBjbGFzcyBIVE1MT3B0aW9uRWxlbWVudDsKIGNsYXNzIE5vZGU7
CitjbGFzcyBRdWFsaWZpZWROYW1lOwogY2xhc3MgU3RyaW5nOwogfQogCkBAIC01Myw2ICs1NSwx
NiBAQCBXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudCogdG9IVE1MT3B0aW9uRWxlbWVudChXZWJD
b3JlOjpOb2RlKik7CiAvLyBGSVhNRTogRGVwcmVjYXRlLiBVc2UgV2ViSW5wdXRFbGVtZW50Ojpu
YW1lRm9yQXV0b2ZpbGwgaW5zdGVhZC4KIFdlYkNvcmU6OlN0cmluZyBuYW1lT2ZJbnB1dEVsZW1l
bnQoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCopOwogCisvLyBGb3IgaW1nLCBzY3JpcHQsIGlm
cmFtZSwgZnJhbWUgZWxlbWVudCwgd2hlbiBhdHRyaWJ1dGUgbmFtZSBpcyBzcmMsCisvLyBmb3Ig
bGluaywgYSwgYXJlYSBlbGVtZW50LCB3aGVuIGF0dHJpYnV0ZSBuYW1lIGlzIGhyZWYsCisvLyBm
b3IgZm9ybSBlbGVtZW50LCB3aGVuIGF0dHJpYnV0ZSBuYW1lIGlzIGFjdGlvbiwKKy8vIGZvciBp
bnB1dCwgdHlwZT1pbWFnZSwgd2hlbiBhdHRyaWJ1dGUgbmFtZSBpcyBzcmMsCisvLyBmb3IgYm9k
eSwgdGFibGUsIHRyLCB0ZCwgd2hlbiBhdHRyaWJ1dGUgbmFtZSBpcyBiYWNrZ3JvdW5kLAorLy8g
Zm9yIGJsb2NrcXVvdGUsIHEsIGRlbCwgaW5zLCB3aGVuIGF0dHJpYnV0ZSBuYW1lIGlzIGNpdGUs
CisvLyB3ZSBjYW4gY29uc2lkZXIgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBoYXMgbGVnYWwgbGluay4K
K2Jvb2wgZWxlbWVudEhhc0xlZ2FsTGlua0F0dHJpYnV0ZShjb25zdCBXZWJDb3JlOjpFbGVtZW50
KiBlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkNv
cmU6OlF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEb2N1bWVudC5jcHAg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRvY3VtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4yNDY3YTY5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJEb2N1bWVudC5jcHAKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViRG9jdW1lbnQuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisj
aW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxBbGxDb2xsZWN0aW9uLmgiCisjaW5j
bHVkZSAiSFRNTEJvZHlFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKKyNp
bmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxIZWFkRWxlbWVudC5oIgorCisj
aW5jbHVkZSAiV2ViRWxlbWVudC5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgorI2luY2x1
ZGUgIldlYk5vZGVDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCisKKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK1dlYkRvY3VtZW50OjpXZWJEb2N1bWVudChjb25zdCBQYXNzUmVmUHRy
PERvY3VtZW50PiYgZWxlbSkKKyAgICA6IFdlYk5vZGUoZWxlbS5yZWxlYXNlUmVmKCkpCit7Cit9
CisKK1dlYkRvY3VtZW50JiBXZWJEb2N1bWVudDo6b3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8
RG9jdW1lbnQ+JiBlbGVtKQoreworICAgIFdlYk5vZGU6OmFzc2lnbihlbGVtLnJlbGVhc2VSZWYo
KSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJEb2N1bWVudDo6b3BlcmF0b3IgUGFzc1Jl
ZlB0cjxEb2N1bWVudD4oKSBjb25zdAoreworICAgIHJldHVybiBQYXNzUmVmUHRyPERvY3VtZW50
PihzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fcHJpdmF0ZSkpOworfQorCitXZWJGcmFtZSogV2Vi
RG9jdW1lbnQ6OmZyYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViRnJhbWVJbXBsOjpmcm9t
RnJhbWUoY29uc3RVbndyYXA8RG9jdW1lbnQ+KCktPmZyYW1lKCkpOworfQorCitib29sIFdlYkRv
Y3VtZW50Ojppc0hUTUxEb2N1bWVudCgpIGNvbnN0Cit7ICAKKyAgICByZXR1cm4gY29uc3RVbndy
YXA8RG9jdW1lbnQ+KCktPmlzSFRNTERvY3VtZW50KCk7Cit9CisKK1dlYlVSTCBXZWJEb2N1bWVu
dDo6YmFzZVVSTCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPERvY3VtZW50Pigp
LT5iYXNlVVJMKCk7Cit9CisKK1dlYkVsZW1lbnQgV2ViRG9jdW1lbnQ6OmJvZHkoKSBjb25zdAor
eworICAgIHJldHVybiBXZWJFbGVtZW50KGNvbnN0VW53cmFwPERvY3VtZW50PigpLT5ib2R5KCkp
OworfQorCitXZWJFbGVtZW50IFdlYkRvY3VtZW50OjpoZWFkKCkKK3sKKyAgICByZXR1cm4gV2Vi
RWxlbWVudCh1bndyYXA8RG9jdW1lbnQ+KCktPmhlYWQoKSk7Cit9CisKK1dlYk5vZGVDb2xsZWN0
aW9uIFdlYkRvY3VtZW50OjphbGwoKQoreworICAgIHJldHVybiBXZWJOb2RlQ29sbGVjdGlvbih1
bndyYXA8RG9jdW1lbnQ+KCktPmFsbCgpKTsKK30KKworV2ViVVJMIFdlYkRvY3VtZW50Ojpjb21w
bGV0ZVVSTChjb25zdCBXZWJTdHJpbmcmIHBhcnRpYWxVUkwpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGNvbnN0VW53cmFwPERvY3VtZW50PigpLT5jb21wbGV0ZVVSTChwYXJ0aWFsVVJMKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkVsZW1lbnQuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFbGVtZW50LmNwcAppbmRleCAz
ZjEzZWUxLi41Njk4MGZlIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkVsZW1l
bnQuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRWxlbWVudC5jcHAKQEAgLTU0LDUg
KzU0LDIxIEBAIFdlYkVsZW1lbnQ6Om9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxFbGVtZW50Pigp
IGNvbnN0CiAgICAgcmV0dXJuIFBhc3NSZWZQdHI8RWxlbWVudD4oc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KG1fcHJpdmF0ZSkpOwogfQogCitib29sIFdlYkVsZW1lbnQ6Omhhc1RhZ05hbWUoY29uc3Qg
V2ViU3RyaW5nJiB0YWdOYW1lKSBjb25zdAoreworICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2Fz
ZShjb25zdFVud3JhcDxFbGVtZW50PigpLT50YWdOYW1lKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRhZ05hbWUub3BlcmF0b3IgV2ViQ29yZTo6U3RyaW5nKCkpOworfQorCitib29s
IFdlYkVsZW1lbnQ6Omhhc0F0dHJpYnV0ZShjb25zdCBXZWJTdHJpbmcmIGF0dHJOYW1lKSBjb25z
dAoreworICAgIHJldHVybiBjb25zdFVud3JhcDxFbGVtZW50PigpLT5oYXNBdHRyaWJ1dGUoYXR0
ck5hbWUpOworfQorCitXZWJTdHJpbmcgV2ViRWxlbWVudDo6Z2V0QXR0cmlidXRlKGNvbnN0IFdl
YlN0cmluZyYgYXR0ck5hbWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPEVsZW1l
bnQ+KCktPmdldEF0dHJpYnV0ZShhdHRyTmFtZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkVudGl0aWVzLmNwcCBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRW50aXRpZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmU1MDFiZTUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkVudGl0aWVzLmNwcApAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJFbnRpdGllcy5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCisKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKwor
I2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisvLyBOb3RlIHRoYXQgdGhpcyBmaWxl
IGlzIGFsc28gaW5jbHVkZWQgYnkgSFRNTFRva2VuaXplci5jcHAgc28gd2UgYXJlIGdldHRpbmcK
Ky8vIHR3byBjb3BpZXMgb2YgdGhlIGRhdGEgaW4gbWVtb3J5LiAgV2UgY2FuIGZpeCB0aGlzIGJ5
IGNoYW5naW5nIHRoZSBzY3JpcHQKKy8vIHRoYXQgZ2VuZXJhdGVkIHRoZSBhcnJheSB0byBjcmVh
dGUgYSBzdGF0aWMgY29uc3QgdGhhdCBpcyBpdHMgbGVuZ3RoLCBidXQKKy8vIHRoaXMgaXMgbG93
IHByaW9yaXR5IHNpbmNlIHRoZSBkYXRhIGlzIGxlc3MgdGhhbiA0Sy4gV2UgdXNlIGFub255bW91
cworLy8gbmFtZXNwYWNlIHRvIHByZXZlbnQgbmFtZSBjb2xsaXNpb25zLgorI2luY2x1ZGUgIkhU
TUxFbnRpdHlOYW1lcy5jIiAvLyBOT0xJTlQKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3Zv
aWQgcG9wdWxhdGVNYXAoV1RGOjpIYXNoTWFwPGludCwgV2ViQ29yZTo6U3RyaW5nPiYgbWFwLAor
ICAgICAgICAgICAgICAgICBjb25zdCBFbnRpdHkqIGVudGl0aWVzLAorICAgICAgICAgICAgICAg
ICBzaXplX3QgZW50aXRpZXNDb3VudCwKKyAgICAgICAgICAgICAgICAgYm9vbCBzdGFuZGFyZEhU
TUwpCit7CisgICAgQVNTRVJUKG1hcC5pc0VtcHR5KCkpOworICAgIGNvbnN0IEVudGl0eSogZW50
aXR5ID0gJmVudGl0aWVzWzBdOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50aXRpZXND
b3VudDsgaSsrLCBlbnRpdHkrKykgeworICAgICAgICBpbnQgY29kZSA9IGVudGl0eS0+Y29kZTsK
KyAgICAgICAgU3RyaW5nIG5hbWUgPSBlbnRpdHktPm5hbWU7CisgICAgICAgIC8vIEZvciBjb25z
aXN0ZW5jeSwgdXNlIHRoZSBsb3dlIGNhc2UgZm9yIGVudGl0aWVzIHRoYXQgaGF2ZSBib3RoLgor
ICAgICAgICBpZiAobWFwLmNvbnRhaW5zKGNvZGUpICYmIG1hcC5nZXQoY29kZSkgPT0gbmFtZS5s
b3dlcigpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIC8vIERvbid0IHJlZ2lzdGVy
ICZwZXJjbnQ7LCAmbnN1cDsgYW5kICZzdXBsOy4KKyAgICAgICAgaWYgKHN0YW5kYXJkSFRNTCAm
JiAoY29kZSA9PSAnJScgfHwgY29kZSA9PSAweDIyODUgfHwgY29kZSA9PSAweDAwYjkpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIG1hcC5zZXQoY29kZSwgbmFtZSk7CisgICAgfQor
ICAgIGlmIChzdGFuZGFyZEhUTUwpCisgICAgICAgIG1hcC5zZXQoc3RhdGljX2Nhc3Q8aW50Pigw
eDAwMjcpLCBTdHJpbmcoIiMzOSIpKTsKK30KKworc3RhdGljIGNvbnN0IEVudGl0eSB4bWxCdWls
dEluRW50aXR5Q29kZXNbXSA9IHsKKyAgICB7ICJsdCIsIDB4MDAzYyB9LAorICAgIHsgImd0Iiwg
MHgwMDNlIH0sCisgICAgeyAiYW1wIiwgMHgwMDI2IH0sCisgICAgeyAiYXBvcyIsIDB4MDAyNyB9
LAorICAgIHsgInF1b3QiLCAweDAwMjIgfQorfTsKKworV2ViRW50aXRpZXM6OldlYkVudGl0aWVz
KGJvb2wgeG1sRW50aXRpZXMpCit7CisgICAgaWYgKHhtbEVudGl0aWVzKQorICAgICAgICBwb3B1
bGF0ZU1hcChtX2VudGl0aWVzTWFwLAorICAgICAgICAgICAgICAgICAgICB4bWxCdWlsdEluRW50
aXR5Q29kZXMsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZih4bWxCdWlsdEluRW50aXR5Q29k
ZXMpIC8gc2l6ZW9mKEVudGl0eSksCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgICBl
bHNlCisgICAgICAgIHBvcHVsYXRlTWFwKG1fZW50aXRpZXNNYXAsCisgICAgICAgICAgICAgICAg
ICAgIHdvcmRsaXN0LAorICAgICAgICAgICAgICAgICAgICBzaXplb2Yod29yZGxpc3QpIC8gc2l6
ZW9mKEVudGl0eSksCisgICAgICAgICAgICAgICAgICAgIHRydWUpOworfQorCitTdHJpbmcgV2Vi
RW50aXRpZXM6OmVudGl0eU5hbWVCeUNvZGUoaW50IGNvZGUpIGNvbnN0Cit7CisgICAgaWYgKG1f
ZW50aXRpZXNNYXAuY29udGFpbnMoY29kZSkpCisgICAgICAgIHJldHVybiBtX2VudGl0aWVzTWFw
LmdldChjb2RlKTsKKyAgICByZXR1cm4gIiI7Cit9CisKK1N0cmluZyBXZWJFbnRpdGllczo6Y29u
dmVydEVudGl0aWVzSW5TdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKK3sKKyAgICB1
bnNpZ25lZCBsZW4gPSB2YWx1ZS5sZW5ndGgoKTsKKyAgICBjb25zdCBVQ2hhciogc3RhcnRQb3Mg
PSB2YWx1ZS5jaGFyYWN0ZXJzKCk7CisgICAgY29uc3QgVUNoYXIqIGN1clBvcyA9IHN0YXJ0UG9z
OworCisgICAgLy8gRklYTUU6IE9wdGltaXplIC0gY3JlYXRlIFN0cmluZ0J1aWxkZXIgb25seSBp
ZiB2YWx1ZSBoYXMgYW55IGVudGl0aWVzLgorICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAg
IHdoaWxlIChsZW4tLSkgeworICAgICAgICBpZiAobV9lbnRpdGllc01hcC5jb250YWlucygqY3Vy
UG9zKSkgeworICAgICAgICAgICAgLy8gQXBwZW5kIGNvbnRlbnQgYmVmb3JlIGVudGl0eSBjb2Rl
LgorICAgICAgICAgICAgaWYgKGN1clBvcyA+IHN0YXJ0UG9zKQorICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoU3RyaW5nKHN0YXJ0UG9zLCBjdXJQb3MgLSBzdGFydFBvcykpOworICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiJiIpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2Vu
dGl0aWVzTWFwLmdldCgqY3VyUG9zKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCI7Iik7
CisgICAgICAgICAgICBzdGFydFBvcyA9ICsrY3VyUG9zOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIGN1clBvcysrOworICAgIH0KKyAgICAvLyBBcHBlbmQgdGhlIHJlbWFpbmluZyBjb250
ZW50LgorICAgIGlmIChjdXJQb3MgPiBzdGFydFBvcykKKyAgICAgICAgcmVzdWx0LmFwcGVuZChT
dHJpbmcoc3RhcnRQb3MsIGN1clBvcyAtIHN0YXJ0UG9zKSk7CisKKyAgICByZXR1cm4gcmVzdWx0
LnRvU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJFbnRpdGllcy5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJF
bnRpdGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkM2MzMTAKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkVudGl0aWVzLmgKQEAgLTAs
MCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgV2ViRW50aXRpZXNfaAorI2RlZmluZSBXZWJFbnRpdGllc19oCisK
KyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJFbnRpdGllcyB7CitwdWJsaWM6CisgICAg
Ly8gJmFwb3M7LCAmcGVyY250OywgJm5zdXA7LCAmc3VwbDsgYXJlIG5vdCBkZWZpbmVkIGJ5IHRo
ZSBIVE1MIHN0YW5kYXJkcy4KKyAgICAvLyAgLSBJRSBkb2VzIG5vdCBzdXBwb3J0ICZhcG9zOyBh
cyBhbiBIVE1MIGVudGl0eSAoYnV0IHN1cHBvcnQgaXQgYXMgYW4gWE1MCisgICAgLy8gICAgZW50
aXR5LikKKyAgICAvLyAgLSBGaXJlZm94IHN1cHBvcnRzICZhcG9zOyBhcyBhbiBIVE1MIGVudGl0
eS4KKyAgICAvLyAgLSBCb3RoIG9mIElFIGFuZCBGaXJlZm94IGRvbid0IHN1cHBvcnQgJnBlcmNu
dDssICZuc3VwOyBhbmQgJnN1cGw7LgorICAgIC8vCisgICAgLy8gQSB3ZWIgcGFnZSBzYXZlZCBi
eSBDaHJvbWl1bSBzaG91bGQgYmUgYWJsZSB0byBiZSByZWFkIGJ5IG90aGVyIGJyb3dzZXJzCisg
ICAgLy8gc3VjaCBhcyBJRSBhbmQgRmlyZWZveC4gIENocm9taXVtIHNob3VsZCBwcm9kdWNlIG9u
bHkgdGhlIHN0YW5kYXJkIGVudGl0eQorICAgIC8vIHJlZmVyZW5jZXMgd2hpY2ggb3RoZXIgYnJv
d3NlcnMgY2FuIHJlY29nbml6ZS4KKyAgICAvLyBTbyBpZiBzdGFuZGFyZF9odG1sX2VudGl0aWVz
XyBpcyB0cnVlLCB3ZSB3aWxsIHVzZSBhIG51bWVyaWMgY2hhcmFjdGVyCisgICAgLy8gcmVmZXJl
bmNlIGZvciAmYXBvczssIGFuZCBkb24ndCB1c2UgZW50aXR5IHJlZmVyZW5jZXMgZm9yICZwZXJj
bnQ7LCAmbnN1cDsKKyAgICAvLyBhbmQgJnN1cGw7IGZvciBzZXJpYWxpemF0aW9uLgorICAgIC8v
CisgICAgLy8gSWYgeG1sRW50aXRpZXMgaXMgdHJ1ZSwgV2ViRW50aXRpZXMgd2lsbCBvbmx5IGNv
bnRhaW4gc3RhbmRhcmQgWE1MCisgICAgLy8gZW50aXRpZXMuCisgICAgZXhwbGljaXQgV2ViRW50
aXRpZXMoYm9vbCB4bWxFbnRpdGllcyk7CisKKyAgICAvLyBDaGVjayB3aGV0aGVyIHNwZWNpZmll
ZCB1bmljb2RlIGhhcyBjb3JyZXNwb25kaW5nIGh0bWwgb3IgeG1sIGJ1aWx0LWluCisgICAgLy8g
ZW50aXR5IG5hbWUuIElmIHllcywgcmV0dXJuIHRoZSBlbnRpdHkgbm90YXRpb24uIElmIG5vdCwg
cmV0dXJucyBhbgorICAgIC8vIGVtcHR5IHN0cmluZy4gUGFyYW1ldGVyIGlzSFRNTCBpbmRpY2F0
ZXMgY2hlY2sgdGhlIGNvZGUgaW4gaHRtbCBlbnRpdHkKKyAgICAvLyBtYXAgb3IgaW4geG1sIGVu
dGl0eSBtYXAuCisgICAgV2ViQ29yZTo6U3RyaW5nIGVudGl0eU5hbWVCeUNvZGUoaW50IGNvZGUp
IGNvbnN0OworCisgICAgLy8gUmV0dXJucyBhIG5ldyBzdHJpbmcgd2l0aCBjb3JyZXNwb25kaW5n
IGVudGl0eSBuYW1lcyByZXBsYWNlZC4KKyAgICBXZWJDb3JlOjpTdHJpbmcgY29udmVydEVudGl0
aWVzSW5TdHJpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJikgY29uc3Q7Citwcml2YXRlOgorICAg
IHR5cGVkZWYgSGFzaE1hcDxpbnQsIFdlYkNvcmU6OlN0cmluZz4gRW50aXRpZXNNYXBUeXBlOwor
ICAgIC8vIEFuIGludGVybmFsIG9iamVjdCB0aGF0IG1hcHMgdGhlIFVuaWNvZGUgY2hhcmFjdGVy
IHRvIGNvcnJlc3BvbmRpbmcKKyAgICAvLyBlbnRpdHkgbm90YXRpb24uCisgICAgRW50aXRpZXNN
YXBUeXBlIG1fZW50aXRpZXNNYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKaW5kZXggZjcyMjg2MC4uZWUzZGUy
ZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCisrKyBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcApAQCAtMTIyLDYgKzEyMiw3IEBA
CiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2ViQ29uc29sZU1lc3NhZ2Uu
aCIKICNpbmNsdWRlICJXZWJEYXRhU291cmNlSW1wbC5oIgorI2luY2x1ZGUgIldlYkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiV2ViRmluZE9wdGlvbnMuaCIKICNpbmNsdWRlICJXZWJGb3JtRWxlbWVu
dC5oIgogI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCkBAIC0zNDMsNiArMzQ0LDEyIEBAIFdl
YkZyYW1lKiBXZWJGcmFtZTo6ZnJhbWVGb3JDdXJyZW50Q29udGV4dCgpCiAgICAgcmV0dXJuIFdl
YkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGZyYW1lKTsKIH0KIAorV2ViRnJhbWUqIFdlYkZyYW1lOjpm
cm9tRnJhbWVPd25lckVsZW1lbnQoY29uc3QgV2ViRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBy
ZXR1cm4gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWVPd25lckVsZW1lbnQoCisgICAgICAgIFBhc3NS
ZWZQdHI8RWxlbWVudD4oZWxlbWVudCkuZ2V0KCkpOworfQorCiBXZWJTdHJpbmcgV2ViRnJhbWVJ
bXBsOjpuYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9mcmFtZS0+dHJlZSgpLT5uYW1lKCk7
CkBAIC0zOTEsNiArMzk4LDExIEBAIFdlYlVSTCBXZWJGcmFtZUltcGw6Om9wZW5TZWFyY2hEZXNj
cmlwdGlvblVSTCgpIGNvbnN0CiAgICAgcmV0dXJuIFdlYlVSTCgpOwogfQogCitXZWJTdHJpbmcg
V2ViRnJhbWVJbXBsOjplbmNvZGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZyYW1lKCktPmxv
YWRlcigpLT5lbmNvZGluZygpOworfQorCiBXZWJTaXplIFdlYkZyYW1lSW1wbDo6c2Nyb2xsT2Zm
c2V0KCkgY29uc3QKIHsKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZVZpZXcoKTsKQEAgLTUx
NSw2ICs1MjcsMTMgQEAgV2ViRnJhbWUqIFdlYkZyYW1lSW1wbDo6ZmluZENoaWxkQnlFeHByZXNz
aW9uKGNvbnN0IFdlYlN0cmluZyYgeHBhdGgpIGNvbnN0CiAgICAgcmV0dXJuIGZyb21GcmFtZShm
cmFtZUVsZW1lbnQtPmNvbnRlbnRGcmFtZSgpKTsKIH0KIAorV2ViRG9jdW1lbnQgV2ViRnJhbWVJ
bXBsOjpkb2N1bWVudCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5k
b2N1bWVudCgpKQorICAgICAgICByZXR1cm4gV2ViRG9jdW1lbnQoKTsKKyAgICByZXR1cm4gV2Vi
RG9jdW1lbnQobV9mcmFtZS0+ZG9jdW1lbnQoKSk7Cit9CisKIHZvaWQgV2ViRnJhbWVJbXBsOjpm
b3JtcyhXZWJWZWN0b3I8V2ViRm9ybUVsZW1lbnQ+JiByZXN1bHRzKSBjb25zdAogewogICAgIGlm
ICghbV9mcmFtZSkKQEAgLTE2MzEsNiArMTY1MCwxOSBAQCBXZWJGcmFtZUltcGwqIFdlYkZyYW1l
SW1wbDo6ZnJvbUZyYW1lKEZyYW1lKiBmcmFtZSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJh
bWVMb2FkZXJDbGllbnRJbXBsKj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPndlYkZyYW1l
KCk7CiB9CiAKK1dlYkZyYW1lSW1wbCogV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWVPd25lckVsZW1l
bnQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBpZiAoIWVsZW1lbnQKKyAgICAgICAgfHwgIWVs
ZW1lbnQtPmlzRnJhbWVPd25lckVsZW1lbnQoKQorICAgICAgICB8fCAoIWVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjppZnJhbWVUYWcpCisgICAgICAgICAgICAmJiAhZWxlbWVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lVGFnKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
SFRNTEZyYW1lT3duZXJFbGVtZW50KiBmcmFtZUVsZW1lbnQgPQorICAgICAgICBzdGF0aWNfY2Fz
dDxIVE1MRnJhbWVPd25lckVsZW1lbnQqPihlbGVtZW50KTsKKyAgICByZXR1cm4gZnJvbUZyYW1l
KGZyYW1lRWxlbWVudC0+Y29udGVudEZyYW1lKCkpOworfQorICAgIAogV2ViVmlld0ltcGwqIFdl
YkZyYW1lSW1wbDo6dmlld0ltcGwoKSBjb25zdAogewogICAgIGlmICghbV9mcmFtZSkKZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmggYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkZyYW1lSW1wbC5oCmluZGV4IDA1MDY3NWIuLjY1OWU3ZjggMTAwNjQ0Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGcmFtZUltcGwuaApAQCAtNjUsNiArNjUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBXZWJVUkwgdXJsKCkgY29uc3Q7CiAgICAgdmlydHVhbCBXZWJVUkwgZmF2SWNvblVSTCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgV2ViVVJMIG9wZW5TZWFyY2hEZXNjcmlwdGlvblVSTCgpIGNvbnN0
OworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGVuY29kaW5nKCkgY29uc3Q7CiAgICAgdmlydHVhbCBX
ZWJTaXplIHNjcm9sbE9mZnNldCgpIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViU2l6ZSBjb250ZW50
c1NpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBjb250ZW50c1ByZWZlcnJlZFdpZHRoKCkg
Y29uc3Q7CkBAIC04Miw2ICs4Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYkZyYW1lKiB0
cmF2ZXJzZVByZXZpb3VzKGJvb2wgd3JhcCkgY29uc3Q7CiAgICAgdmlydHVhbCBXZWJGcmFtZSog
ZmluZENoaWxkQnlOYW1lKGNvbnN0IFdlYlN0cmluZyYpIGNvbnN0OwogICAgIHZpcnR1YWwgV2Vi
RnJhbWUqIGZpbmRDaGlsZEJ5RXhwcmVzc2lvbihjb25zdCBXZWJTdHJpbmcmKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFdlYkRvY3VtZW50IGRvY3VtZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IGZvcm1zKFdlYlZlY3RvcjxXZWJGb3JtRWxlbWVudD4mKSBjb25zdDsKICAgICB2aXJ0dWFsIFdl
YlNlY3VyaXR5T3JpZ2luIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IGdyYW50VW5pdmVyc2FsQWNjZXNzKCk7CkBAIC0xNTcsNyArMTU5LDYgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgV2ViVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFdlYlN0cmluZyYgdXJsKSBjb25zdDsK
ICAgICB2aXJ0dWFsIFdlYlN0cmluZyBjb250ZW50QXNUZXh0KHNpemVfdCBtYXhDaGFycykgY29u
c3Q7CiAgICAgdmlydHVhbCBXZWJTdHJpbmcgY29udGVudEFzTWFya3VwKCkgY29uc3Q7Ci0KICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJGcmFtZUltcGw+IGNyZWF0ZShXZWJGcmFtZUNsaWVudCog
Y2xpZW50KTsKICAgICB+V2ViRnJhbWVJbXBsKCk7CiAKQEAgLTE3NCw2ICsxNzUsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjcmVhdGVGcmFtZVZpZXcoKTsKIAogICAgIHN0YXRpYyBXZWJGcmFtZUlt
cGwqIGZyb21GcmFtZShXZWJDb3JlOjpGcmFtZSogZnJhbWUpOworICAgIHN0YXRpYyBXZWJGcmFt
ZUltcGwqIGZyb21GcmFtZU93bmVyRWxlbWVudChXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50KTsK
IAogICAgIFdlYlZpZXdJbXBsKiB2aWV3SW1wbCgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYk5vZGUuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOb2Rl
LmNwcAppbmRleCA5NjVjNDEyLi41ZGNkMGM5IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYk5vZGUuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZS5jcHAKQEAg
LTM1LDkgKzM1LDE1IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRl
ckNsaWVudEltcGwuaCIKICNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIK
IAorI2luY2x1ZGUgIldlYkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisj
aW5jbHVkZSAiV2ViTm9kZUxpc3QuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRl
ICJXZWJWZWN0b3IuaCIKKworI2luY2x1ZGUgIm1hcmt1cC5oIgogCiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KIApAQCAtNjEsNiArNjcsMTEgQEAgdm9pZCBXZWJOb2RlOjphc3NpZ24oY29u
c3QgV2ViTm9kZSYgb3RoZXIpCiAgICAgYXNzaWduKHApOwogfQogCitXZWJOb2RlOjpOb2RlVHlw
ZSBXZWJOb2RlOjpub2RlVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5v
ZGVUeXBlPihtX3ByaXZhdGUtPm5vZGVUeXBlKCkpOworfQorCiBXZWJOb2RlIFdlYk5vZGU6OnBh
cmVudE5vZGUoKSBjb25zdAogewogICAgIHJldHVybiBQYXNzUmVmUHRyPE5vZGU+KGNvbnN0X2Nh
c3Q8Tm9kZSo+KG1fcHJpdmF0ZS0+cGFyZW50Tm9kZSgpKSk7CkBAIC03MSwxOCArODIsMjMgQEAg
V2ViU3RyaW5nIFdlYk5vZGU6Om5vZGVOYW1lKCkgY29uc3QKICAgICByZXR1cm4gbV9wcml2YXRl
LT5ub2RlTmFtZSgpOwogfQogCi1XZWJOb2RlOjpXZWJOb2RlKGNvbnN0IFdURjo6UGFzc1JlZlB0
cjxXZWJDb3JlOjpOb2RlPiYgbm9kZSkKK1dlYlN0cmluZyBXZWJOb2RlOjpub2RlVmFsdWUoKSBj
b25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm5vZGVWYWx1ZSgpOworfQorCitXZWJOb2Rl
OjpXZWJOb2RlKGNvbnN0IFBhc3NSZWZQdHI8Tm9kZT4mIG5vZGUpCiAgICAgOiBtX3ByaXZhdGUo
c3RhdGljX2Nhc3Q8V2ViTm9kZVByaXZhdGUqPihub2RlLnJlbGVhc2VSZWYoKSkpCiB7CiB9CiAK
LVdlYk5vZGUmIFdlYk5vZGU6Om9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29y
ZTo6Tm9kZT4mIG5vZGUpCitXZWJOb2RlJiBXZWJOb2RlOjpvcGVyYXRvcj0oY29uc3QgUGFzc1Jl
ZlB0cjxOb2RlPiYgbm9kZSkKIHsKICAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViTm9kZVByaXZh
dGUqPihub2RlLnJlbGVhc2VSZWYoKSkpOwogICAgIHJldHVybiAqdGhpczsKIH0KIAotV2ViTm9k
ZTo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok5vZGU+KCkgY29uc3QKK1dlYk5v
ZGU6Om9wZXJhdG9yIFBhc3NSZWZQdHI8Tm9kZT4oKSBjb25zdAogewogICAgIHJldHVybiBQYXNz
UmVmUHRyPE5vZGU+KGNvbnN0X2Nhc3Q8V2ViTm9kZVByaXZhdGUqPihtX3ByaXZhdGUpKTsKIH0K
QEAgLTEwMCw0ICsxMTYsNTQgQEAgV2ViRnJhbWUqIFdlYk5vZGU6OmZyYW1lKCkgY29uc3QKICAg
ICByZXR1cm4gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUobV9wcml2YXRlLT5kb2N1bWVudCgpLT5m
cmFtZSgpKTsKIH0KIAorV2ViRG9jdW1lbnQgV2ViTm9kZTo6ZG9jdW1lbnQoKSBjb25zdAorewor
ICAgIHJldHVybiBXZWJEb2N1bWVudChtX3ByaXZhdGUtPmRvY3VtZW50KCkpOworfQorCitXZWJO
b2RlIFdlYk5vZGU6OmZpcnN0Q2hpbGQoKSBjb25zdAoreworICAgIHJldHVybiBXZWJOb2RlKG1f
cHJpdmF0ZS0+Zmlyc3RDaGlsZCgpKTsKK30KKworV2ViTm9kZSBXZWJOb2RlOjpsYXN0Q2hpbGQo
KSBjb25zdAoreworICAgIHJldHVybiBXZWJOb2RlKG1fcHJpdmF0ZS0+bGFzdENoaWxkKCkpOwor
fQorCitXZWJOb2RlIFdlYk5vZGU6OnByZXZpb3VzU2libGluZygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFdlYk5vZGUobV9wcml2YXRlLT5wcmV2aW91c1NpYmxpbmcoKSk7Cit9CisKK1dlYk5vZGUg
V2ViTm9kZTo6bmV4dFNpYmxpbmcoKSBjb25zdAoreworICAgIHJldHVybiBXZWJOb2RlKG1fcHJp
dmF0ZS0+bmV4dFNpYmxpbmcoKSk7Cit9CisKK2Jvb2wgV2ViTm9kZTo6aGFzQ2hpbGROb2Rlcygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aGFzQ2hpbGROb2RlcygpOworfQorCitX
ZWJOb2RlTGlzdCBXZWJOb2RlOjpjaGlsZE5vZGVzKCkKK3sKKyAgICByZXR1cm4gV2ViTm9kZUxp
c3QobV9wcml2YXRlLT5jaGlsZE5vZGVzKCkpOworfQorCitXZWJTdHJpbmcgV2ViTm9kZTo6Y3Jl
YXRlTWFya3VwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y3JlYXRlTWFya3VwKG1f
cHJpdmF0ZSk7Cit9CisKK2Jvb2wgV2ViTm9kZTo6aXNUZXh0Tm9kZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+aXNUZXh0Tm9kZSgpOworfQorCitib29sIFdlYk5vZGU6OmlzRWxl
bWVudE5vZGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzRWxlbWVudE5vZGUo
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYk5vZGVDb2xsZWN0aW9uLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9k
ZUNvbGxlY3Rpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZDFm
NWYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5vZGVDb2xsZWN0
aW9uLmNwcApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
Yk5vZGVDb2xsZWN0aW9uLmgiCisKKyNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgorI2luY2x1
ZGUgIk5vZGUuaCIKKworI2luY2x1ZGUgIldlYk5vZGUuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKwordm9pZCBXZWJOb2RlQ29sbGVjdGlvbjo6cmVzZXQoKQoreworICAgIGFzc2lnbigwKTsK
K30KKwordm9pZCBXZWJOb2RlQ29sbGVjdGlvbjo6YXNzaWduKGNvbnN0IFdlYk5vZGVDb2xsZWN0
aW9uJiBvdGhlcikKK3sKKyAgICBIVE1MQ29sbGVjdGlvbiogcCA9IGNvbnN0X2Nhc3Q8SFRNTENv
bGxlY3Rpb24qPihvdGhlci5tX3ByaXZhdGUpOworICAgIGlmIChwKQorICAgICAgICBwLT5yZWYo
KTsKKyAgICBhc3NpZ24ocCk7Cit9CisKK1dlYk5vZGVDb2xsZWN0aW9uOjpXZWJOb2RlQ29sbGVj
dGlvbihjb25zdCBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiYgY29sKQorICAgIDogbV9wcml2
YXRlKHN0YXRpY19jYXN0PEhUTUxDb2xsZWN0aW9uKj4oY29sLnJlbGVhc2VSZWYoKSkpCit7Cit9
CisKK3ZvaWQgV2ViTm9kZUNvbGxlY3Rpb246OmFzc2lnbihIVE1MQ29sbGVjdGlvbiogcCkKK3sK
KyAgICAvLyBwIGlzIGFscmVhZHkgcmVmJ2QgZm9yIHVzIGJ5IHRoZSBjYWxsZXIKKyAgICBpZiAo
bV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7CisgICAgbV9wcml2YXRlID0g
cDsKK30KKwordW5zaWduZWQgV2ViTm9kZUNvbGxlY3Rpb246Omxlbmd0aCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+bGVuZ3RoKCk7Cit9CisKK1dlYk5vZGUgV2ViTm9kZUNvbGxl
Y3Rpb246Om5leHRJdGVtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViTm9kZShtX3ByaXZhdGUt
Pm5leHRJdGVtKCkpOworfQorCitXZWJOb2RlIFdlYk5vZGVDb2xsZWN0aW9uOjpmaXJzdEl0ZW0o
KSBjb25zdAoreworICAgIHJldHVybiBXZWJOb2RlKG1fcHJpdmF0ZS0+Zmlyc3RJdGVtKCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViTm9kZUxpc3QuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOb2RlTGlzdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRlZDg5NgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZUxpc3QuY3BwCkBAIC0wLDAgKzEsODEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViTm9kZUxpc3QuaCIKKworI2luY2x1
ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJOb2RlTGlzdC5oIgorCisjaW5jbHVkZSAiV2ViTm9kZS5o
IgorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFdlYk5vZGVMaXN0OjpyZXNldCgpCit7
CisgICAgYXNzaWduKDApOworfQorCit2b2lkIFdlYk5vZGVMaXN0Ojphc3NpZ24oY29uc3QgV2Vi
Tm9kZUxpc3QmIG90aGVyKQoreworICAgIE5vZGVMaXN0KiBwID0gY29uc3RfY2FzdDxOb2RlTGlz
dCo+KG90aGVyLm1fcHJpdmF0ZSk7CisgICAgaWYgKHApCisgICAgICAgIHAtPnJlZigpOworICAg
IGFzc2lnbihwKTsKK30KKworV2ViTm9kZUxpc3Q6OldlYk5vZGVMaXN0KGNvbnN0IFBhc3NSZWZQ
dHI8Tm9kZUxpc3Q+JiBjb2wpCisgICAgOiBtX3ByaXZhdGUoc3RhdGljX2Nhc3Q8Tm9kZUxpc3Qq
Pihjb2wucmVsZWFzZVJlZigpKSkKK3sKK30KKwordm9pZCBXZWJOb2RlTGlzdDo6YXNzaWduKE5v
ZGVMaXN0KiBwKQoreworICAgIC8vIHAgaXMgYWxyZWFkeSByZWYnZCBmb3IgdXMgYnkgdGhlIGNh
bGxlcgorICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAg
ICBtX3ByaXZhdGUgPSBwOworfQorCit1bnNpZ25lZCBXZWJOb2RlTGlzdDo6bGVuZ3RoKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5sZW5ndGgoKTsKK30KKworV2ViTm9kZSBXZWJO
b2RlTGlzdDo6aXRlbShzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYk5vZGUo
bV9wcml2YXRlLT5pdGVtKGluZGV4KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xMDEwMjg1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplci5oIgorCisjaW5jbHVkZSAiS1VS
TC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlICJXZWJGcmFtZS5o
IgorI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViUGFn
ZVNlcmlhbGl6ZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2Vi
VVJMLmgiCisjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworYm9vbCBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFs
aXplKFdlYkZyYW1lKiBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHJlY3Vyc2l2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQYWdl
U2VyaWFsaXplckNsaWVudCogY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+JiBsaW5rcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbG9jYWxQYXRocywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGxvY2FsRGly
ZWN0b3J5TmFtZSkKK3sKKyAgICBXZWJQYWdlU2VyaWFsaXplckltcGwgc2VyaWFsaXplckltcGwo
CisgICAgICAgIGZyYW1lLCByZWN1cnNpdmUsIGNsaWVudCwgbGlua3MsIGxvY2FsUGF0aHMsIGxv
Y2FsRGlyZWN0b3J5TmFtZSk7CisgICAgcmV0dXJuIHNlcmlhbGl6ZXJJbXBsLnNlcmlhbGl6ZSgp
OworfQorCitXZWJTdHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlTWV0YUNoYXJzZXRE
ZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGNoYXJzZXQpCit7CisgICAgcmV0dXJuIFN0cmlu
Zzo6Zm9ybWF0KCI8TUVUQSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cInRl
eHQvaHRtbDsgY2hhcnNldD0lc1wiPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJz
ZXQudXRmOCgpLmRhdGEoKSk7Cit9CisKK1dlYlN0cmluZyBXZWJQYWdlU2VyaWFsaXplcjo6Z2Vu
ZXJhdGVNYXJrT2ZUaGVXZWJEZWNsYXJhdGlvbihjb25zdCBXZWJVUkwmIHVybCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmb3JtYXQoIlxuPCEtLSBzYXZlZCBmcm9tIHVybD0oJTA0ZCklcyAtLT5c
biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4odXJsLnNwZWMo
KS5sZW5ndGgoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVybC5zcGVjKCkuZGF0YSgp
KTsKK30KKworV2ViU3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZUJhc2VUYWdEZWNs
YXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGJhc2VUYXJnZXQpCit7CisgICAgU3RyaW5nIHRhcmdl
dERlY2xhcmF0aW9uOworICAgIGlmICghYmFzZVRhcmdldC5pc0VtcHR5KCkpCisgICAgICAgIHRh
cmdldERlY2xhcmF0aW9uID0gU3RyaW5nOjpmb3JtYXQoIiB0YXJnZXQ9XCIlc1wiIiwgYmFzZVRh
cmdldC51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIjxCQVNFIGhy
ZWY9XCIuXCIlcz4iLCB0YXJnZXREZWNsYXJhdGlvbi51dGY4KCkuZGF0YSgpKTsKK30KKworfSAg
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQ
YWdlU2VyaWFsaXplckltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFs
aXplckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZmQ2MjYK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVy
SW1wbC5jcHAKQEAgLTAsMCArMSw1NDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBIb3cgd2UgaGFuZGxlIHRoZSBiYXNlIHRhZyBi
ZXR0ZXIuCisvLyBDdXJyZW50IHN0YXR1czoKKy8vIEF0IG5vdyB0aGUgbm9ybWFsIHdheSB3ZSB1
c2UgdG8gaGFuZGxpbmcgYmFzZSB0YWcgaXMKKy8vIGEpIEZvciB0aG9zZSBsaW5rcyB3aGljaCBo
YXZlIGNvcnJlc3BvbmRpbmcgbG9jYWwgc2F2ZWQgZmlsZXMsIHN1Y2ggYXMKKy8vIHNhdmFibGUg
Q1NTLCBKYXZhU2NyaXB0IGZpbGVzLCB0aGV5IHdpbGwgYmUgd3JpdHRlbiB0byByZWxhdGl2ZSBV
UkxzIHdoaWNoCisvLyBwb2ludCB0byBsb2NhbCBzYXZlZCBmaWxlLiBXaHkgdGhvc2UgbGlua3Mg
Y2FuIG5vdCBiZSByZXNvbHZlZCBhcyBhYnNvbHV0ZQorLy8gZmlsZSBVUkxzLCBiZWNhdXNlIGlm
IHRoZXkgYXJlIHJlc29sdmVkIGFzIGFic29sdXRlIFVSTHMsIGFmdGVyIG1vdmluZyB0aGUKKy8v
IGZpbGUgbG9jYXRpb24gZnJvbSBvbmUgZGlyZWN0b3J5IHRvIGFub3RoZXIgZGlyZWN0b3J5LCB0
aGUgZmlsZSBVUkxzIHdpbGwKKy8vIGJlIGRlYWQgbGlua3MuCisvLyBiKSBGb3IgdGhvc2UgbGlu
a3Mgd2hpY2ggaGF2ZSBub3QgY29ycmVzcG9uZGluZyBsb2NhbCBzYXZlZCBmaWxlcywgc3VjaCBh
cworLy8gbGlua3MgaW4gQSwgQVJFQSB0YWdzLCB0aGV5IHdpbGwgYmUgcmVzb2x2ZWQgYXMgYWJz
b2x1dGUgVVJMcy4KKy8vIGMpIFdlIGNvbW1lbnQgYWxsIGJhc2UgdGFncyB3aGVuIHNlcmlhbHpp
bmcgRE9NIGZvciB0aGUgcGFnZS4KKy8vIEZpcmVGb3ggYWxzbyB1c2VzIGFib3ZlIHdheSB0byBo
YW5kbGUgYmFzZSB0YWcuCisvLworLy8gUHJvYmxlbToKKy8vIFRoaXMgd2F5IGNhbiBub3QgaGFu
ZGxlIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9uOgorLy8gdGhlIGJhc2UgdGFnIGlzIHdyaXR0ZW4g
YnkgSmF2YVNjcmlwdC4KKy8vIEZvciBleGFtcGxlLiBUaGUgcGFnZSAid3d3LnlhaG9vLmNvbSIg
dXNlCisvLyAiZG9jdW1lbnQud3JpdGUoJzxiYXNlIGhyZWY9Imh0dHA6Ly93d3cueWFob28uY29t
LyIuLi4nKTsiIHRvIHNldHVwIGJhc2UgVVJMCisvLyBvZiBwYWdlIHdoZW4gbG9hZGluZyBwYWdl
LiBTbyB3aGVuIHNhdmluZyBwYWdlIGFzIGNvbXBsZXRlZC1IVE1MLCB3ZSBhc3N1bWUKKy8vIHRo
YXQgd2Ugc2F2ZSAid3d3LnlhaG9vLmNvbSIgdG8gImM6XHlhaG9vLmh0bSIuIEFmdGVyIHRoZW4g
d2UgbG9hZCB0aGUgc2F2ZWQKKy8vIGNvbXBsZXRlZC1IVE1MIHBhZ2UsIHRoZW4gdGhlIEphdmFT
Y3JpcHQgd2lsbCBpbnNlcnQgYSBiYXNlIHRhZworLy8gPGJhc2UgaHJlZj0iaHR0cDovL3d3dy55
YWhvby5jb20vIi4uLj4gdG8gRE9NLCBzbyBhbGwgVVJMcyB3aGljaCBwb2ludCB0bworLy8gbG9j
YWwgc2F2ZWQgcmVzb3VyY2UgZmlsZXMgd2lsbCBiZSByZXNvbHZlZCBhcworLy8gImh0dHA6Ly93
d3cueWFob28uY29tL3lhaG9vX2ZpbGVzLy4uLiIsIHdoaWNoIHdpbGwgY2F1c2UgYWxsIHNhdmVk
ICByZXNvdXJjZQorLy8gZmlsZXMgY2FuIG5vdCBiZSBsb2FkZWQgY29ycmVjdGx5LiBBbHNvIHRo
ZSBwYWdlIHdpbGwgYmUgcmVuZGVyZWQgdWdseSBzaW5jZQorLy8gYWxsIHNhdmVkIHN1Yi1yZXNv
dXJjZSBmaWxlcyAoc3VjaCBhcyBDU1MsIEphdmFTY3JpcHQgZmlsZXMpIGFuZCBzdWItZnJhbWUK
Ky8vIGZpbGVzIGNhbiBub3QgYmUgZmV0Y2hlZC4KKy8vIE5vdyBGaXJlRm94LCBJRSBhbmQgV2Vi
S2l0IGJhc2VkIEJyb3dzZXIgYWxsIGhhdmUgdGhpcyBwcm9ibGVtLgorLy8KKy8vIFNvbHV0aW9u
OgorLy8gTXkgc29sdXRpb24gaXMgdGhhdCB3ZSBjb21tZW50IG9sZCBiYXNlIHRhZyBhbmQgd3Jp
dGUgbmV3IGJhc2UgdGFnOgorLy8gPGJhc2UgaHJlZj0iLiIgLi4uPiBhZnRlciB0aGUgcHJldmlv
dXMgY29tbWVudGVkIGJhc2UgdGFnLiBJbiBXZWJLaXQsIGl0CisvLyBhbHdheXMgdXNlcyB0aGUg
bGF0ZXN0ICJocmVmIiBhdHRyaWJ1dGUgb2YgYmFzZSB0YWcgdG8gc2V0IGRvY3VtZW50J3MgYmFz
ZQorLy8gVVJMLiBCYXNlZCBvbiB0aGlzIGJlaGF2aW9yLCB3aGVuIHdlIGVuY291bnRlciBhIGJh
c2UgdGFnLCB3ZSBjb21tZW50IGl0IGFuZAorLy8gd3JpdGUgYSBuZXcgYmFzZSB0YWcgPGJhc2Ug
aHJlZj0iLiI+IGFmdGVyIHRoZSBwcmV2aW91cyBjb21tZW50ZWQgYmFzZSB0YWcuCisvLyBUaGUg
bmV3IGFkZGVkIGJhc2UgdGFnIGNhbiBoZWxwIGVuZ2luZSB0byBsb2NhdGUgY29ycmVjdCBiYXNl
IFVSTCBmb3IKKy8vIGNvcnJlY3RseSBsb2FkaW5nIGxvY2FsIHNhdmVkIHJlc291cmNlIGZpbGVz
LiBBbHNvIEkgdGhpbmsgd2UgbmVlZCB0byBpbmhlcml0CisvLyB0aGUgYmFzZSB0YXJnZXQgdmFs
dWUgZnJvbSBkb2N1bWVudCBvYmplY3Qgd2hlbiBhcHBlbmRpbmcgbmV3IGJhc2UgdGFnLgorLy8g
SWYgdGhlcmUgYXJlIG11bHRpcGxlIGJhc2UgdGFncyBpbiBvcmlnaW5hbCBkb2N1bWVudCwgd2Ug
d2lsbCBjb21tZW50IGFsbCBvbGQKKy8vIGJhc2UgdGFncyBhbmQgYXBwZW5kIG5ldyBiYXNlIHRh
ZyBhZnRlciBlYWNoIG9sZCBiYXNlIHRhZyBiZWNhdXNlIHdlIGRvIG5vdAorLy8ga25vdyB0aG9z
ZSBvbGQgYmFzZSB0YWdzIGFyZSBvcmlnaW5hbCBjb250ZW50IG9yIGFkZGVkIGJ5IEphdmFTY3Jp
cHQuIElmCisvLyB0aGV5IGFyZSBhZGRlZCBieSBKYXZhU2NyaXB0LCBpdCBtZWFucyB3aGVuIGxv
YWRpbmcgc2F2ZWQgcGFnZSwgdGhlIHNjcmlwdChzKQorLy8gd2lsbCBzdGlsbCBpbnNlcnQgYmFz
ZSB0YWcocykgdG8gRE9NLCBzbyB0aGUgbmV3IGFkZGVkIGJhc2UgdGFnKHMpIGNhbgorLy8gb3Zl
cnJpZGUgdGhlIGluY29ycmVjdCBiYXNlIFVSTCBhbmQgbWFrZSBzdXJlIHdlIGFsd2F5IGxvYWQg
Y29ycmVjdCBsb2NhbAorLy8gc2F2ZWQgcmVzb3VyY2UgZmlsZXMuCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplckltcGwuaCIKKworI2luY2x1ZGUgIkRP
TVV0aWxpdGllc1ByaXZhdGUuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRv
Y3VtZW50VHlwZS5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgorI2luY2x1ZGUgIkhUTUxBbGxDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiSFRNTEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTWV0YUVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCisjaW5j
bHVkZSAiVGV4dEVuY29kaW5nLmgiCisKKyNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKKyNpbmNs
dWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlICJXZWJWZWN0b3IuaCIKKworI2luY2x1ZGUgIm1hcmt1
cC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
Ky8vIE1heGltdW0gbGVuZ3RoIG9mIGRhdGEgYnVmZmVyIHdoaWNoIGlzIHVzZWQgdG8gdGVtcG9y
YXJ5IHNhdmUgZ2VuZXJhdGVkCisvLyBodG1sIGNvbnRlbnQgZGF0YS4gVGhpcyBpcyBhIHNvZnQg
bGltaXQgd2hpY2ggbWlnaHQgYmUgcGFzc2VkIGlmIGEgdmVyeSBsYXJnZQorLy8gY29udGVnaW91
cyBzdHJpbmcgaXMgZm91bmQgaW4gdGhlIHBhZ2UuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgZGF0
YUJ1ZmZlckNhcGFjaXR5ID0gNjU1MzY7CisKK1dlYlBhZ2VTZXJpYWxpemVySW1wbDo6U2VyaWFs
aXplRG9tUGFyYW06OlNlcmlhbGl6ZURvbVBhcmFtKGNvbnN0IEtVUkwmIGN1cnJlbnRGcmFtZVVS
TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRleHRFbmNvZGluZyYgdGV4dEVuY29kaW5nLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnQqIGRv
YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5TmFtZSkKKyAgICA6IGN1cnJlbnRGcmFtZVVS
TChjdXJyZW50RnJhbWVVUkwpCisgICAgLCB0ZXh0RW5jb2RpbmcodGV4dEVuY29kaW5nKQorICAg
ICwgZG9jKGRvYykKKyAgICAsIGRpcmVjdG9yeU5hbWUoZGlyZWN0b3J5TmFtZSkKKyAgICAsIGhh
c0RvY3R5cGUoZmFsc2UpCisgICAgLCBoYXNDaGVja2VkTWV0YShmYWxzZSkKKyAgICAsIHNraXBN
ZXRhRWxlbWVudCgwKQorICAgICwgaXNJblNjcmlwdE9yU3R5bGVUYWcoZmFsc2UpCisgICAgLCBo
YXNEb2NEZWNsYXJhdGlvbihmYWxzZSkKK3sKKyAgICAvLyBDYWNoZSB0aGUgdmFsdWUgc2luY2Ug
d2UgY2hlY2sgaXQgbG90cyBvZiB0aW1lcy4KKyAgICBpc0hUTUxEb2N1bWVudCA9IGRvYy0+aXNI
VE1MRG9jdW1lbnQoKTsKK30KKworU3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6cHJlQWN0
aW9uQmVmb3JlU2VyaWFsaXplT3BlblRhZygKKyAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBT
ZXJpYWxpemVEb21QYXJhbSogcGFyYW0sIGJvb2wqIG5lZWRTa2lwKQoreworICAgIFN0cmluZ0J1
aWxkZXIgcmVzdWx0OworCisgICAgKm5lZWRTa2lwID0gZmFsc2U7CisgICAgaWYgKHBhcmFtLT5p
c0hUTUxEb2N1bWVudCkgeworICAgICAgICAvLyBTa2lwIHRoZSBvcGVuIHRhZyBvZiBvcmlnaW5h
bCBNRVRBIHRhZyB3aGljaCBkZWNsYXJlIGNoYXJzZXQgc2luY2Ugd2UKKyAgICAgICAgLy8gaGF2
ZSBvdmVycmlkZWQgdGhlIE1FVEEgd2hpY2ggaGF2ZSBjb3JyZWN0IGNoYXJzZXQgZGVjbGFyYXRp
b24gYWZ0ZXIKKyAgICAgICAgLy8gc2VyaWFsaXppbmcgb3BlbiB0YWcgb2YgSEVBRCBlbGVtZW50
LgorICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om1ldGFUYWcpKSB7
CisgICAgICAgICAgICBjb25zdCBIVE1MTWV0YUVsZW1lbnQqIG1ldGEgPSBzdGF0aWNfY2FzdDxj
b25zdCBIVE1MTWV0YUVsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIC8vIENoZWNrIHdo
ZXRoZXIgdGhlIE1FVEEgdGFnIGhhcyBkZWNsYXJlZCBjaGFyc2V0IG9yIG5vdC4KKyAgICAgICAg
ICAgIFN0cmluZyBlcXVpdiA9IG1ldGEtPmh0dHBFcXVpdigpOworICAgICAgICAgICAgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKGVxdWl2LCAiY29udGVudC10eXBlIikpIHsKKyAgICAgICAgICAgICAg
ICBTdHJpbmcgY29udGVudCA9IG1ldGEtPmNvbnRlbnQoKTsKKyAgICAgICAgICAgICAgICBpZiAo
Y29udGVudC5sZW5ndGgoKSAmJiBjb250ZW50LmNvbnRhaW5zKCJjaGFyc2V0IiwgZmFsc2UpKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgTUVUQSB0YWcgZGVjbGFyZWQgY2hhcnNldCwg
d2UgbmVlZCB0byBza2lwIGl0IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgLy8gc2VyaWFsaXpp
bmcgRE9NLgorICAgICAgICAgICAgICAgICAgICBwYXJhbS0+c2tpcE1ldGFFbGVtZW50ID0gZWxl
bWVudDsKKyAgICAgICAgICAgICAgICAgICAgKm5lZWRTa2lwID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKSB7CisgICAgICAgICAgICAvLyBDaGVjayBzb21ldGhp
bmcgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIG9wZW4gdGFnIG9mIEhFQUQgZWxlbWVudC4KKyAgICAg
ICAgICAgIC8vIEZpcnN0IHdlIGFkZCBkb2MgdHlwZSBkZWNsYXJhdGlvbiBpZiBvcmlnaW5hbCBk
b2MgaGFzIGl0LgorICAgICAgICAgICAgaWYgKCFwYXJhbS0+aGFzRG9jdHlwZSkgeworICAgICAg
ICAgICAgICAgIHBhcmFtLT5oYXNEb2N0eXBlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKGNyZWF0ZU1hcmt1cChwYXJhbS0+ZG9jLT5kb2N0eXBlKCkpKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIE1PVFcgZGVjbGFyYXRpb24gYmVmb3JlIGh0bWwg
dGFnLgorICAgICAgICAgICAgLy8gU2VlIGh0dHA6Ly9tc2RuMi5taWNyb3NvZnQuY29tL2VuLXVz
L2xpYnJhcnkvbXM1Mzc2MjgoVlMuODUpLmFzcHguCisgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZU1hcmtPZlRoZVdlYkRlY2xhcmF0aW9uKHBhcmFt
LT5jdXJyZW50RnJhbWVVUkwpKTsKKyAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YmFzZVRhZykpIHsKKyAgICAgICAgICAgIC8vIENvbW1lbnQgdGhlIEJB
U0UgdGFnIHdoZW4gc2VyaWFsaXppbmcgZG9tLgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgi
PCEtLSIpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV3JpdGUgWE1MIGRl
Y2xhcmF0aW9uLgorICAgICAgICBpZiAoIXBhcmFtLT5oYXNEb2NEZWNsYXJhdGlvbikgeworICAg
ICAgICAgICAgcGFyYW0tPmhhc0RvY0RlY2xhcmF0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIC8v
IEdldCBlbmNvZGluZyBpbmZvLgorICAgICAgICAgICAgU3RyaW5nIHhtbEVuY29kaW5nID0gcGFy
YW0tPmRvYy0+eG1sRW5jb2RpbmcoKTsKKyAgICAgICAgICAgIGlmICh4bWxFbmNvZGluZy5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAgICAgeG1sRW5jb2RpbmcgPSBwYXJhbS0+ZG9jLT5mcmFtZSgp
LT5sb2FkZXIoKS0+ZW5jb2RpbmcoKTsKKyAgICAgICAgICAgIGlmICh4bWxFbmNvZGluZy5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAgICAgeG1sRW5jb2RpbmcgPSBVVEY4RW5jb2RpbmcoKS5uYW1l
KCk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCI8P3htbCB2ZXJzaW9uPVwiIik7CisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHBhcmFtLT5kb2MtPnhtbFZlcnNpb24oKSk7CisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCJcIiBlbmNvZGluZz1cIiIpOworICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCh4bWxFbmNvZGluZyk7CisgICAgICAgICAgICBpZiAocGFyYW0tPmRvYy0+eG1sU3Rh
bmRhbG9uZSgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIlwiIHN0YW5kYWxvbmU9
XCJ5ZXMiKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIlwiPz5cbiIpOworICAgICAgICB9
CisgICAgICAgIC8vIEFkZCBkb2MgdHlwZSBkZWNsYXJhdGlvbiBpZiBvcmlnaW5hbCBkb2MgaGFz
IGl0LgorICAgICAgICBpZiAoIXBhcmFtLT5oYXNEb2N0eXBlKSB7CisgICAgICAgICAgICBwYXJh
bS0+aGFzRG9jdHlwZSA9IHRydWU7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNyZWF0ZU1h
cmt1cChwYXJhbS0+ZG9jLT5kb2N0eXBlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBXZWJQYWdlU2VyaWFsaXplckltcGw6
OnBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZU9wZW5UYWcoCisgICAgY29uc3QgRWxlbWVudCogZWxl
bWVudCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQoreworICAgIFN0cmluZ0J1aWxkZXIgcmVz
dWx0OworCisgICAgcGFyYW0tPmhhc0FkZGVkQ29udGVudHNCZWZvcmVFbmQgPSBmYWxzZTsKKyAg
ICBpZiAoIXBhcmFtLT5pc0hUTUxEb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0
cmluZygpOworICAgIC8vIENoZWNrIGFmdGVyIHByb2Nlc3NpbmcgdGhlIG9wZW4gdGFnIG9mIEhF
QUQgZWxlbWVudAorICAgIGlmICghcGFyYW0tPmhhc0NoZWNrZWRNZXRhCisgICAgICAgICYmIGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSkgeworICAgICAgICBwYXJhbS0+
aGFzQ2hlY2tlZE1ldGEgPSB0cnVlOworICAgICAgICAvLyBDaGVjayBtZXRhIGVsZW1lbnQuIFdl
YktpdCBvbmx5IHByZS1wYXJzZSB0aGUgZmlyc3QgNTEyIGJ5dGVzCisgICAgICAgIC8vIG9mIHRo
ZSBkb2N1bWVudC4gSWYgdGhlIHdob2xlIDxIRUFEPiBpcyBsYXJnZXIgYW5kIG1ldGEgaXMgdGhl
CisgICAgICAgIC8vIGVuZCBvZiBoZWFkIHBhcnQsIHRoZW4gdGhpcyBraW5kIG9mIHBhZ2VzIGFy
ZW4ndCBkZWNvZGVkIGNvcnJlY3RseQorICAgICAgICAvLyBiZWNhdXNlIG9mIHRoaXMgaXNzdWUu
IFNvIHdoZW4gd2Ugc2VyaWFsaXplIHRoZSBET00sIHdlIG5lZWQgdG8KKyAgICAgICAgLy8gbWFr
ZSBzdXJlIHRoZSBtZXRhIHdpbGwgaW4gZmlyc3QgY2hpbGQgb2YgaGVhZCB0YWcuCisgICAgICAg
IC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYyMS4KKyAg
ICAgICAgLy8gRmlyc3Qgd2UgZ2VuZXJhdGUgbmV3IGNvbnRlbnQgZm9yIHdyaXRpbmcgY29ycmVj
dCBNRVRBIGVsZW1lbnQuCisgICAgICAgIHJlc3VsdC5hcHBlbmQoV2ViUGFnZVNlcmlhbGl6ZXI6
OmdlbmVyYXRlTWV0YUNoYXJzZXREZWNsYXJhdGlvbigKKyAgICAgICAgICAgIFN0cmluZyhwYXJh
bS0+dGV4dEVuY29kaW5nLm5hbWUoKSkpKTsKKworICAgICAgICBwYXJhbS0+aGFzQWRkZWRDb250
ZW50c0JlZm9yZUVuZCA9IHRydWU7CisgICAgICAgIC8vIFdpbGwgc2VhcmNoIGVhY2ggTUVUQSB3
aGljaCBoYXMgY2hhcnNldCBkZWNsYXJhdGlvbiwgYW5kIHNraXAgdGhlbSBhbGwKKyAgICAgICAg
Ly8gaW4gUHJlQWN0aW9uQmVmb3JlU2VyaWFsaXplT3BlblRhZy4KKyAgICB9IGVsc2UgaWYgKGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHRUYWcpCisgICAgICAgICAgICAgICB8
fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKSB7CisgICAgICAgIHBh
cmFtLT5pc0luU2NyaXB0T3JTdHlsZVRhZyA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIHJl
c3VsdC50b1N0cmluZygpOworfQorCitTdHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpwcmVB
Y3Rpb25CZWZvcmVTZXJpYWxpemVFbmRUYWcoCisgICAgY29uc3QgRWxlbWVudCogZWxlbWVudCwg
U2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLCBib29sKiBuZWVkU2tpcCkKK3sKKyAgICBTdHJpbmcg
cmVzdWx0OworCisgICAgKm5lZWRTa2lwID0gZmFsc2U7CisgICAgaWYgKCFwYXJhbS0+aXNIVE1M
RG9jdW1lbnQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgLy8gU2tpcCB0aGUgZW5kIHRh
ZyBvZiBvcmlnaW5hbCBNRVRBIHRhZyB3aGljaCBkZWNsYXJlIGNoYXJzZXQuCisgICAgLy8gTmVl
ZCBub3QgdG8gY2hlY2sgd2hldGhlciBpdCdzIE1FVEEgdGFnIHNpbmNlIHdlIGd1YXJhbnRlZQor
ICAgIC8vIHNraXBNZXRhRWxlbWVudCBpcyBkZWZpbml0ZWx5IE1FVEEgdGFnIGlmIGl0J3Mgbm90
IDAuCisgICAgaWYgKHBhcmFtLT5za2lwTWV0YUVsZW1lbnQgPT0gZWxlbWVudCkKKyAgICAgICAg
Km5lZWRTa2lwID0gdHJ1ZTsKKyAgICBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6c2NyaXB0VGFnKQorICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpzdHlsZVRhZykpIHsKKyAgICAgICAgQVNTRVJUKHBhcmFtLT5pc0luU2NyaXB0T3JT
dHlsZVRhZyk7CisgICAgICAgIHBhcmFtLT5pc0luU2NyaXB0T3JTdHlsZVRhZyA9IGZhbHNlOwor
ICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIEFmdGVyIHdlIGZpbmlzaCBzZXJp
YWxpemluZyBlbmQgdGFnIG9mIGEgZWxlbWVudCwgd2UgZ2l2ZSB0aGUgdGFyZ2V0CisvLyBlbGVt
ZW50IGEgY2hhbmNlIHRvIGRvIHNvbWUgcG9zdCB3b3JrIHRvIGFkZCBzb21lIGFkZGl0aW9uYWwg
ZGF0YS4KK1N0cmluZyBXZWJQYWdlU2VyaWFsaXplckltcGw6OnBvc3RBY3Rpb25BZnRlclNlcmlh
bGl6ZUVuZFRhZygKKyAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBTZXJpYWxpemVEb21QYXJh
bSogcGFyYW0pCit7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisKKyAgICBpZiAoIXBhcmFt
LT5pc0hUTUxEb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworICAg
IC8vIENvbW1lbnQgdGhlIEJBU0UgdGFnIHdoZW4gc2VyaWFsaXppbmcgRE9NLgorICAgIGlmIChl
bGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmFzZVRhZykpIHsKKyAgICAgICAgcmVzdWx0
LmFwcGVuZCgiLS0+Iik7CisgICAgICAgIC8vIEFwcGVuZCBhIG5ldyBiYXNlIHRhZyBkZWNsYXJh
dGlvbi4KKyAgICAgICAgcmVzdWx0LmFwcGVuZChXZWJQYWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVC
YXNlVGFnRGVjbGFyYXRpb24oCisgICAgICAgICAgICBwYXJhbS0+ZG9jLT5iYXNlVGFyZ2V0KCkp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKK3ZvaWQgV2Vi
UGFnZVNlcmlhbGl6ZXJJbXBsOjpzYXZlSFRNTENvbnRlbnRUb0J1ZmZlcigKKyAgICBjb25zdCBT
dHJpbmcmIHJlc3VsdCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQoreworICAgIG1fZGF0YUJ1
ZmZlci5hcHBlbmQocmVzdWx0KTsKKyAgICBlbmNvZGVBbmRGbHVzaEJ1ZmZlcihXZWJQYWdlU2Vy
aWFsaXplckNsaWVudDo6Q3VycmVudEZyYW1lSXNOb3RGaW5pc2hlZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKK30KKwordm9p
ZCBXZWJQYWdlU2VyaWFsaXplckltcGw6OmVuY29kZUFuZEZsdXNoQnVmZmVyKAorICAgIFdlYlBh
Z2VTZXJpYWxpemVyQ2xpZW50OjpQYWdlU2VyaWFsaXphdGlvblN0YXR1cyBzdGF0dXMsCisgICAg
U2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLAorICAgIGJvb2wgZm9yY2UpCit7CisgICAgLy8gRGF0
YSBidWZmZXIgaXMgbm90IGZ1bGwgbm9yIGRvIHdlIHdhbnQgdG8gZm9yY2UgZmx1c2guCisgICAg
aWYgKCFmb3JjZSAmJiBtX2RhdGFCdWZmZXIubGVuZ3RoKCkgPD0gZGF0YUJ1ZmZlckNhcGFjaXR5
KQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgY29udGVudCA9IG1fZGF0YUJ1ZmZlci50
b1N0cmluZygpOworICAgIG1fZGF0YUJ1ZmZlci5jbGVhcigpOworCisgICAgLy8gQ29udmVydCB0
aGUgdW5pY29kZSBjb250ZW50IHRvIHRhcmdldCBlbmNvZGluZworICAgIENTdHJpbmcgZW5jb2Rl
ZENvbnRlbnQgPSBwYXJhbS0+dGV4dEVuY29kaW5nLmVuY29kZSgKKyAgICAgICAgY29udGVudC5j
aGFyYWN0ZXJzKCksIGNvbnRlbnQubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsK
KworICAgIC8vIFNlbmQgcmVzdWx0IHRvIHRoZSBjbGllbnQuCisgICAgbV9jbGllbnQtPmRpZFNl
cmlhbGl6ZURhdGFGb3JGcmFtZShwYXJhbS0+Y3VycmVudEZyYW1lVVJMLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ1N0cmluZyhlbmNvZGVkQ29udGVudC5kYXRh
KCksIGVuY29kZWRDb250ZW50Lmxlbmd0aCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXR1cyk7Cit9CisKK3ZvaWQgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpv
cGVuVGFnVG9TdHJpbmcoY29uc3QgRWxlbWVudCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQorewor
ICAgIC8vIEZJWE1FOiB1c2UgU3RyaW5nQnVpbGRlciBpbnN0ZWFkIG9mIFN0cmluZy4KKyAgICBi
b29sIG5lZWRTa2lwOworICAgIC8vIERvIHByZSBhY3Rpb24gZm9yIG9wZW4gdGFnLgorICAgIFN0
cmluZyByZXN1bHQgPSBwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVPcGVuVGFnKGVsZW1lbnQsIHBh
cmFtLCAmbmVlZFNraXApOworICAgIGlmIChuZWVkU2tpcCkKKyAgICAgICAgcmV0dXJuOworICAg
IC8vIEFkZCBvcGVuIHRhZworICAgIHJlc3VsdCArPSAiPCIgKyBlbGVtZW50LT5ub2RlTmFtZSgp
OworICAgIC8vIEdvIHRocm91Z2ggYWxsIGF0dHJpYnV0ZXMgYW5kIHNlcmlhbGl6ZSB0aGVtLgor
ICAgIGNvbnN0IE5hbWVkTm9kZU1hcCAqYXR0ck1hcCA9IGVsZW1lbnQtPmF0dHJpYnV0ZXModHJ1
ZSk7CisgICAgaWYgKGF0dHJNYXApIHsKKyAgICAgICAgdW5zaWduZWQgbnVtQXR0cnMgPSBhdHRy
TWFwLT5sZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUF0dHJz
OyBpKyspIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSAiICI7CisgICAgICAgICAgICAvLyBBZGQg
YXR0cmlidXRlIHBhaXIKKyAgICAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSAqYXR0cmlidXRlID0g
YXR0ck1hcC0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAgICAgIHJlc3VsdCArPSBhdHRyaWJ1
dGUtPm5hbWUoKS50b1N0cmluZygpOworICAgICAgICAgICAgcmVzdWx0ICs9ICI9XCIiOworICAg
ICAgICAgICAgaWYgKCFhdHRyaWJ1dGUtPnZhbHVlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICAgICAgY29uc3QgU3RyaW5nJiBhdHRyVmFsdWUgPSBhdHRyaWJ1dGUtPnZhbHVlKCk7CisKKyAg
ICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHdlIG5lZWQgdG8gcmVwbGFjZSBzb21lIHJl
c291cmNlIGxpbmtzCisgICAgICAgICAgICAgICAgLy8gd2l0aCBsb2NhbCByZXNvdXJjZSBwYXRo
cy4KKyAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9IGF0dHJp
YnV0ZS0+bmFtZSgpOworICAgICAgICAgICAgICAgIGlmIChlbGVtZW50SGFzTGVnYWxMaW5rQXR0
cmlidXRlKGVsZW1lbnQsIGF0dHJOYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGb3Ig
bGlua3Mgc3RhcnQgd2l0aCAiamF2YXNjcmlwdDoiLCB3ZSBkbyBub3QgY2hhbmdlIGl0LgorICAg
ICAgICAgICAgICAgICAgICBpZiAoYXR0clZhbHVlLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6Iiwg
ZmFsc2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGF0dHJWYWx1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQg
dGhlIGFic29sdXRlIGxpbmsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjb21wbGV0
ZVVSTCA9IHBhcmFtLT5kb2MtPmNvbXBsZXRlVVJMKGF0dHJWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHdlIGhhdmUgbG9jYWwgZmlsZXMgZm9yIHRob3Nl
IGxpbmsuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9sb2NhbExpbmtzLmNvbnRhaW5z
KGNvbXBsZXRlVVJMKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9sb2Nh
bERpcmVjdG9yeU5hbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgKz0gIi4vIiArIG1fbG9jYWxEaXJlY3RvcnlOYW1lICsgIi8iOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBtX2xvY2FsTGlua3MuZ2V0KGNvbXBsZXRlVVJM
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCArPSBjb21wbGV0ZVVSTDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS0+aXNI
VE1MRG9jdW1lbnQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gbV9odG1sRW50
aXRpZXMuY29udmVydEVudGl0aWVzSW5TdHJpbmcoYXR0clZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IG1feG1sRW50aXRp
ZXMuY29udmVydEVudGl0aWVzSW5TdHJpbmcoYXR0clZhbHVlKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHQgKz0gIlwiIjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIERvIHBvc3QgYWN0aW9uIGZvciBvcGVuIHRhZy4KKyAgICBTdHJpbmcg
YWRkZWRDb250ZW50cyA9IHBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZU9wZW5UYWcoZWxlbWVudCwg
cGFyYW0pOworICAgIC8vIENvbXBsZXRlIHRoZSBvcGVuIHRhZyBmb3IgZWxlbWVudCB3aGVuIGl0
IGhhcyBjaGlsZC9jaGlsZHJlbi4KKyAgICBpZiAoZWxlbWVudC0+aGFzQ2hpbGROb2RlcygpIHx8
IHBhcmFtLT5oYXNBZGRlZENvbnRlbnRzQmVmb3JlRW5kKQorICAgICAgICByZXN1bHQgKz0gIj4i
OworICAgIC8vIEFwcGVuZCB0aGUgYWRkZWQgY29udGVudHMgZ2VuZXJhdGUgaW4gIHBvc3QgYWN0
aW9uIG9mIG9wZW4gdGFnLgorICAgIHJlc3VsdCArPSBhZGRlZENvbnRlbnRzOworICAgIC8vIFNh
dmUgdGhlIHJlc3VsdCB0byBkYXRhIGJ1ZmZlci4KKyAgICBzYXZlSFRNTENvbnRlbnRUb0J1ZmZl
cihyZXN1bHQsIHBhcmFtKTsKK30KKworLy8gU2VyaWFsaXplIGVuZCB0YWcgb2YgYW4gc3BlY2lm
aWVkIGVsZW1lbnQuCit2b2lkIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6ZW5kVGFnVG9TdHJpbmco
Y29uc3QgRWxlbWVudCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pCit7CisgICAgYm9vbCBuZWVkU2tp
cDsKKyAgICAvLyBEbyBwcmUgYWN0aW9uIGZvciBlbmQgdGFnLgorICAgIFN0cmluZyByZXN1bHQg
PSBwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVFbmRUYWcoZWxlbWVudCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRTa2lwKTsKKyAgICBp
ZiAobmVlZFNraXApCisgICAgICAgIHJldHVybjsKKyAgICAvLyBXcml0ZSBlbmQgdGFnIHdoZW4g
ZWxlbWVudCBoYXMgY2hpbGQvY2hpbGRyZW4uCisgICAgaWYgKGVsZW1lbnQtPmhhc0NoaWxkTm9k
ZXMoKSB8fCBwYXJhbS0+aGFzQWRkZWRDb250ZW50c0JlZm9yZUVuZCkgeworICAgICAgICByZXN1
bHQgKz0gIjwvIjsKKyAgICAgICAgcmVzdWx0ICs9IGVsZW1lbnQtPm5vZGVOYW1lKCk7CisgICAg
ICAgIHJlc3VsdCArPSAiPiI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ2hlY2sgd2hldGhl
ciB3ZSBoYXZlIHRvIHdyaXRlIGVuZCB0YWcgZm9yIGVtcHR5IGVsZW1lbnQuCisgICAgICAgIGlm
IChwYXJhbS0+aXNIVE1MRG9jdW1lbnQpIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSAiPiI7Cisg
ICAgICAgICAgICBjb25zdCBIVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPQorICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIGlm
IChodG1sRWxlbWVudC0+ZW5kVGFnUmVxdWlyZW1lbnQoKSA9PSBUYWdTdGF0dXNSZXF1aXJlZCkg
eworICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gd3JpdGUgZW5kIHRhZyB3aGVuIGl0IGlz
IHJlcXVpcmVkLgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiPC8iOworICAgICAgICAgICAg
ICAgIHJlc3VsdCArPSBlbGVtZW50LT5ub2RlTmFtZSgpOworICAgICAgICAgICAgICAgIHJlc3Vs
dCArPSAiPiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBGb3IgeG1sIGJhc2UgZG9jdW1lbnQuCisgICAgICAgICAgICByZXN1bHQgKz0gIiAvPiI7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgLy8gRG8gcG9zdCBhY3Rpb24gZm9yIGVuZCB0YWcuCisgICAg
cmVzdWx0ICs9IHBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZUVuZFRhZyhlbGVtZW50LCBwYXJhbSk7
CisgICAgLy8gU2F2ZSB0aGUgcmVzdWx0IHRvIGRhdGEgYnVmZmVyLgorICAgIHNhdmVIVE1MQ29u
dGVudFRvQnVmZmVyKHJlc3VsdCwgcGFyYW0pOworfQorCit2b2lkIFdlYlBhZ2VTZXJpYWxpemVy
SW1wbDo6YnVpbGRDb250ZW50Rm9yTm9kZShjb25zdCBOb2RlKiBub2RlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBh
cmFtKQoreworICAgIHN3aXRjaCAobm9kZS0+bm9kZVR5cGUoKSkgeworICAgIGNhc2UgTm9kZTo6
RUxFTUVOVF9OT0RFOgorICAgICAgICAvLyBQcm9jZXNzIG9wZW4gdGFnIG9mIGVsZW1lbnQuCisg
ICAgICAgIG9wZW5UYWdUb1N0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50Kj4obm9kZSks
IHBhcmFtKTsKKyAgICAgICAgLy8gV2FsayB0aHJvdWdoIHRoZSBjaGlsZHJlbiBub2RlcyBhbmQg
cHJvY2VzcyBpdC4KKyAgICAgICAgZm9yIChjb25zdCBOb2RlICpjaGlsZCA9IG5vZGUtPmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAg
ICBidWlsZENvbnRlbnRGb3JOb2RlKGNoaWxkLCBwYXJhbSk7CisgICAgICAgIC8vIFByb2Nlc3Mg
ZW5kIHRhZyBvZiBlbGVtZW50LgorICAgICAgICBlbmRUYWdUb1N0cmluZyhzdGF0aWNfY2FzdDxj
b25zdCBFbGVtZW50Kj4obm9kZSksIHBhcmFtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBO
b2RlOjpURVhUX05PREU6CisgICAgICAgIHNhdmVIVE1MQ29udGVudFRvQnVmZmVyKGNyZWF0ZU1h
cmt1cChub2RlKSwgcGFyYW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5vZGU6OkFUVFJJ
QlVURV9OT0RFOgorICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfTk9ERToKKyAgICBjYXNlIE5vZGU6
OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6CisgICAgICAgIC8vIFNob3VsZCBub3QgZXhpc3QuCisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICAvLyBEb2N1
bWVudCB0eXBlIG5vZGUgY2FuIGJlIGluIERPTT8KKyAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZ
UEVfTk9ERToKKyAgICAgICAgcGFyYW0tPmhhc0RvY3R5cGUgPSB0cnVlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIC8vIEZvciBvdGhlciB0eXBlIG5vZGUsIGNhbGwgZGVmYXVsdCBhY3Rpb24uCisg
ICAgICAgIHNhdmVIVE1MQ29udGVudFRvQnVmZmVyKGNyZWF0ZU1hcmt1cChub2RlKSwgcGFyYW0p
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK1dlYlBhZ2VTZXJpYWxpemVySW1wbDo6V2Vi
UGFnZVNlcmlhbGl6ZXJJbXBsKFdlYkZyYW1lKiBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlU2VyaWFsaXphdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlBhZ2VTZXJpYWxp
emVyQ2xpZW50KiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViVVJMPiYgbGlua3MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYg
bG9jYWxQYXRocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFdlYlN0cmluZyYgbG9jYWxEaXJlY3RvcnlOYW1lKQorICAgIDogbV9jbGllbnQoY2xp
ZW50KQorICAgICwgbV9yZWN1cnNpdmVTZXJpYWxpemF0aW9uKHJlY3Vyc2l2ZVNlcmlhbGl6YXRp
b24pCisgICAgLCBtX2ZyYW1lc0NvbGxlY3RlZChmYWxzZSkKKyAgICAsIG1fbG9jYWxEaXJlY3Rv
cnlOYW1lKGxvY2FsRGlyZWN0b3J5TmFtZSkKKyAgICAsIG1faHRtbEVudGl0aWVzKGZhbHNlKQor
ICAgICwgbV94bWxFbnRpdGllcyh0cnVlKQoreworICAgIC8vIE11c3Qgc3BlY2lmeSBhdmFpbGFi
bGUgd2ViZnJhbWUuCisgICAgQVNTRVJUKGZyYW1lKTsKKyAgICBtX3NwZWNpZmllZFdlYkZyYW1l
SW1wbCA9IHN0YXRpY19jYXN0PFdlYkZyYW1lSW1wbCo+KGZyYW1lKTsKKyAgICAvLyBNYWtlIHN1
cmUgd2UgaGF2ZSBub24gMCBjbGllbnQuCisgICAgQVNTRVJUKGNsaWVudCk7CisgICAgLy8gQnVp
bGQgbG9jYWwgcmVzb3VyY2VzIG1hcC4KKyAgICBBU1NFUlQobGlua3Muc2l6ZSgpID09IGxvY2Fs
UGF0aHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmtzLnNpemUoKTsg
aSsrKSB7CisgICAgICAgIEtVUkwgdXJsID0gbGlua3NbaV07CisgICAgICAgIEFTU0VSVCghbV9s
b2NhbExpbmtzLmNvbnRhaW5zKHVybC5zdHJpbmcoKSkpOworICAgICAgICBtX2xvY2FsTGlua3Mu
c2V0KHVybC5zdHJpbmcoKSwgbG9jYWxQYXRoc1tpXSk7CisgICAgfQorCisgICAgQVNTRVJUKCFt
X2RhdGFCdWZmZXIubGVuZ3RoKCkpOworfQorCit2b2lkIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6
Y29sbGVjdFRhcmdldEZyYW1lcygpCit7CisgICAgQVNTRVJUKCFtX2ZyYW1lc0NvbGxlY3RlZCk7
CisgICAgbV9mcmFtZXNDb2xsZWN0ZWQgPSB0cnVlOworCisgICAgLy8gRmlyc3QsIHByb2Nlc3Mg
bWFpbiBmcmFtZS4KKyAgICBtX2ZyYW1lcy5hcHBlbmQobV9zcGVjaWZpZWRXZWJGcmFtZUltcGwp
OworICAgIC8vIFJldHVybiBub3cgaWYgdXNlciBvbmx5IG5lZWRzIHRvIHNlcmlhbGl6ZSBzcGVj
aWZpZWQgZnJhbWUsIG5vdCBpbmNsdWRpbmcKKyAgICAvLyBhbGwgc3ViLWZyYW1lcy4KKyAgICBp
ZiAoIW1fcmVjdXJzaXZlU2VyaWFsaXphdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIC8vIENv
bGxlY3QgYWxsIGZyYW1lcyBpbnNpZGUgdGhlIHNwZWNpZmllZCBmcmFtZS4KKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PGludD4obV9mcmFtZXMuc2l6ZSgpKTsgKytpKSB7Cisg
ICAgICAgIFdlYkZyYW1lSW1wbCogY3VycmVudEZyYW1lID0gbV9mcmFtZXNbaV07CisgICAgICAg
IC8vIEdldCBjdXJyZW50IHVzaW5nIGRvY3VtZW50LgorICAgICAgICBEb2N1bWVudCogY3VycmVu
dERvYyA9IGN1cnJlbnRGcmFtZS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgLy8gR28g
dGhyb3VnaCBzdWItZnJhbWVzLgorICAgICAgICBSZWZQdHI8SFRNTEFsbENvbGxlY3Rpb24+IGFs
bCA9IGN1cnJlbnREb2MtPmFsbCgpOworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBhbGwtPmZp
cnN0SXRlbSgpOyBub2RlOyBub2RlID0gYWxsLT5uZXh0SXRlbSgpKSB7CisgICAgICAgICAgICBp
ZiAoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7
CisgICAgICAgICAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0KKyAgICAgICAgICAgICAgICBX
ZWJGcmFtZUltcGw6OmZyb21GcmFtZU93bmVyRWxlbWVudChlbGVtZW50KTsKKyAgICAgICAgICAg
IGlmICh3ZWJGcmFtZSkKKyAgICAgICAgICAgICAgICBtX2ZyYW1lcy5hcHBlbmQod2ViRnJhbWUp
OworICAgICAgICB9CisgICAgfQorfQorCitib29sIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6c2Vy
aWFsaXplKCkKK3sKKyAgICAvLyBDb2xsZWN0IHRhcmdldCBmcmFtZXMuCisgICAgaWYgKCFtX2Zy
YW1lc0NvbGxlY3RlZCkKKyAgICAgICAgY29sbGVjdFRhcmdldEZyYW1lcygpOworICAgIGJvb2wg
ZGlkU2VyaWFsaXphdGlvbiA9IGZhbHNlOworICAgIC8vIEdldCBLVVJMIGZvciBtYWluIGZyYW1l
LgorICAgIEtVUkwgbWFpblBhZ2VVUkwgPSBtX3NwZWNpZmllZFdlYkZyYW1lSW1wbC0+ZnJhbWUo
KS0+bG9hZGVyKCktPnVybCgpOworCisgICAgLy8gR28gdGhyb3VnaCBhbGwgZnJhbWVzIGZvciBz
ZXJpYWxpemluZyBET00gZm9yIHdob2xlIHBhZ2UsIGluY2x1ZGUKKyAgICAvLyBzdWItZnJhbWVz
LgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8aW50PihtX2ZyYW1lcy5zaXpl
KCkpOyArK2kpIHsKKyAgICAgICAgLy8gR2V0IGN1cnJlbnQgc2VyaWFsaXppbmcgZnJhbWUuCisg
ICAgICAgIFdlYkZyYW1lSW1wbCogY3VycmVudEZyYW1lID0gbV9mcmFtZXNbaV07CisgICAgICAg
IC8vIEdldCBjdXJyZW50IHVzaW5nIGRvY3VtZW50LgorICAgICAgICBEb2N1bWVudCogY3VycmVu
dERvYyA9IGN1cnJlbnRGcmFtZS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgLy8gR2V0
IGN1cnJlbnQgZnJhbWUncyBVUkwuCisgICAgICAgIGNvbnN0IEtVUkwmIGN1cnJlbnRGcmFtZVVS
TCA9IGN1cnJlbnRGcmFtZS0+ZnJhbWUoKS0+bG9hZGVyKCktPnVybCgpOworCisgICAgICAgIC8v
IENoZWNrIHdoZXRoZXIgd2UgaGF2ZSBkb25lIHRoaXMgZG9jdW1lbnQuCisgICAgICAgIGlmICht
X2xvY2FsTGlua3MuY29udGFpbnMoY3VycmVudEZyYW1lVVJMLnN0cmluZygpKSkgeworICAgICAg
ICAgICAgLy8gQSBuZXcgZG9jdW1lbnQsIHdlIHdpbGwgc2VyaWFsaXplIGl0LgorICAgICAgICAg
ICAgZGlkU2VyaWFsaXphdGlvbiA9IHRydWU7CisgICAgICAgICAgICAvLyBHZXQgdGFyZ2V0IGVu
Y29kaW5nIGZvciBjdXJyZW50IGRvY3VtZW50LgorICAgICAgICAgICAgU3RyaW5nIGVuY29kaW5n
ID0gY3VycmVudEZyYW1lLT5mcmFtZSgpLT5sb2FkZXIoKS0+ZW5jb2RpbmcoKTsKKyAgICAgICAg
ICAgIC8vIENyZWF0ZSB0aGUgdGV4dCBlbmNvZGluZyBvYmplY3Qgd2l0aCB0YXJnZXQgZW5jb2Rp
bmcuCisgICAgICAgICAgICBUZXh0RW5jb2RpbmcgdGV4dEVuY29kaW5nKGVuY29kaW5nKTsKKyAg
ICAgICAgICAgIC8vIENvbnN0cnVjdCBzZXJpYWxpemUgcGFyYW1ldGVyIGZvciBsYXRlIHByb2Nl
c3NpbmcgZG9jdW1lbnQuCisgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSBwYXJhbShjdXJy
ZW50RnJhbWVVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGlu
Zy5sZW5ndGgoKSA/IHRleHRFbmNvZGluZyA6IFVURjhFbmNvZGluZygpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudERvYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZVVSTCA9PSBtYWluUGFnZVVSTCA/IG1fbG9jYWxE
aXJlY3RvcnlOYW1lIDogIiIpOworCisgICAgICAgICAgICAvLyBQcm9jZXNzIGN1cnJlbnQgZG9j
dW1lbnQuCisgICAgICAgICAgICBFbGVtZW50KiByb290RWxlbWVudCA9IGN1cnJlbnREb2MtPmRv
Y3VtZW50RWxlbWVudCgpOworICAgICAgICAgICAgaWYgKHJvb3RFbGVtZW50KQorICAgICAgICAg
ICAgICAgIGJ1aWxkQ29udGVudEZvck5vZGUocm9vdEVsZW1lbnQsICZwYXJhbSk7CisKKyAgICAg
ICAgICAgIC8vIEZsdXNoIHRoZSByZW1haW5kZXIgZGF0YSBhbmQgZmluaXNoIHNlcmlhbGl6aW5n
IGN1cnJlbnQgZnJhbWUuCisgICAgICAgICAgICBlbmNvZGVBbmRGbHVzaEJ1ZmZlcihXZWJQYWdl
U2VyaWFsaXplckNsaWVudDo6Q3VycmVudEZyYW1lSXNGaW5pc2hlZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZwYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gV2UgaGF2ZSBkb25lIGNhbGwgZnJh
bWVzLCBzbyB3ZSBzZW5kIG1lc3NhZ2UgdG8gZW1iZWRkZXIgdG8gdGVsbCBpdCB0aGF0CisgICAg
Ly8gZnJhbWVzIGFyZSBmaW5pc2hlZCBzZXJpYWxpemluZy4KKyAgICBBU1NFUlQoIW1fZGF0YUJ1
ZmZlci5sZW5ndGgoKSk7CisgICAgbV9jbGllbnQtPmRpZFNlcmlhbGl6ZURhdGFGb3JGcmFtZShL
VVJMKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDU3RyaW5n
KCIiLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlBhZ2VT
ZXJpYWxpemVyQ2xpZW50OjpBbGxGcmFtZXNBcmVGaW5pc2hlZCk7CisgICAgcmV0dXJuIGRpZFNl
cmlhbGl6YXRpb247Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmggYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjRkOGI4YjMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlBhZ2VTZXJpYWxpemVySW1wbC5oCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQYWdl
U2VyaWFsaXplckltcGxfaAorI2RlZmluZSBXZWJQYWdlU2VyaWFsaXplckltcGxfaAorCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCisjaW5j
bHVkZSAiU3RyaW5nSGFzaC5oIgorCisjaW5jbHVkZSAiV2ViRW50aXRpZXMuaCIKKyNpbmNsdWRl
ICJXZWJQYWdlU2VyaWFsaXplci5oIgorI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyQ2xpZW50
LmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCisKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBFbGVtZW50OworY2xhc3MgTm9kZTsK
K2NsYXNzIFN0cmluZzsKK2NsYXNzIFRleHRFbmNvZGluZzsKK30KKworbmFtZXNwYWNlIFdlYktp
dCB7CitjbGFzcyBXZWJGcmFtZUltcGw7CisKKy8vIEdldCBodG1sIGRhdGEgYnkgc2VyaWFsaXpp
bmcgYWxsIGZyYW1lcyBvZiBjdXJyZW50IHBhZ2Ugd2l0aCBsaXN0cworLy8gd2hpY2ggY29udGFp
biBhbGwgcmVzb3VyY2UgbGlua3MgdGhhdCBoYXZlIGxvY2FsIGNvcHkuCisvLyBjb250YWluIGFs
bCBzYXZlZCBhdXhpbGlhcnkgZmlsZXMgaW5jbHVkZWQgYWxsIHN1YiBmcmFtZXMgYW5kIHJlc291
cmNlcy4KKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBmaW5kIG91dCBhbGwgZnJhbWVzIGFuZCBzZXJp
YWxpemUgdGhlbSB0byBIVE1MIGRhdGEuCisvLyBXZSBoYXZlIGEgZGF0YSBidWZmZXIgdG8gdGVt
cG9yYXJ5IHNhdmluZyBnZW5lcmF0ZWQgaHRtbCBkYXRhLiBXZSB3aWxsCisvLyBzZXF1ZW50aWFs
bHkgY2FsbCBXZWJWaWV3RGVsZWdhdGU6OlNlbmRTZXJpYWxpemVkSHRtbERhdGEgb25jZSB0aGUg
ZGF0YQorLy8gYnVmZmVyIGlzIGZ1bGwuIFNlZSBjb21tZW50cyBvZiBXZWJWaWV3RGVsZWdhdGU6
OlNlbmRTZXJpYWxpemVkSHRtbERhdGEKKy8vIGZvciBnZXR0aW5nIG1vcmUgaW5mb3JtYXRpb24u
CitjbGFzcyBXZWJQYWdlU2VyaWFsaXplckltcGwgeworcHVibGljOgorICAgIC8vIERvIHNlcmlh
bGl6YXRpb24gYWN0aW9uLiBSZXR1cm4gZmFsc2UgbWVhbnMgbm8gYXZhaWxhYmxlIGZyYW1lIGhh
cyBiZWVuCisgICAgLy8gc2VyaWFsaXplZCwgb3RoZXJ3aXNlIHJldHVybiB0cnVlLgorICAgIGJv
b2wgc2VyaWFsaXplKCk7CisKKyAgICAvLyBUaGUgcGFyYW1ldGVyIHNwZWNpZmllcyB3aGljaCBm
cmFtZSBuZWVkIHRvIGJlIHNlcmlhbGl6ZWQuCisgICAgLy8gVGhlIHBhcmFtZXRlciByZWN1cnNp
dmVfc2VyaWFsaXphdGlvbiBzcGVjaWZpZXMgd2hldGhlciB3ZSBuZWVkIHRvCisgICAgLy8gc2Vy
aWFsaXplIGFsbCBzdWIgZnJhbWVzIG9mIHRoZSBzcGVjaWZpZWQgZnJhbWUgb3Igbm90LgorICAg
IC8vIFRoZSBwYXJhbWV0ZXIgZGVsZWdhdGUgc3BlY2lmaWVzIHRoZSBwb2ludGVyIG9mIGludGVy
ZmFjZQorICAgIC8vIERvbVNlcmlhbGl6ZXJEZWxlZ2F0ZSBwcm92aWRlIHNpbmsgaW50ZXJmYWNl
IHdoaWNoIGNhbiByZWNlaXZlIHRoZQorICAgIC8vIGluZGl2aWR1YWwgY2h1bmtzIG9mIGRhdGEg
dG8gYmUgc2F2ZWQuCisgICAgLy8gVGhlIHBhcmFtZXRlciBsaW5rcyBjb250YWluIG9yaWdpbmFs
IFVSTHMgb2YgYWxsIHNhdmVkIGxpbmtzLgorICAgIC8vIFRoZSBwYXJhbWV0ZXIgbG9jYWxfcGF0
aHMgY29udGFpbiBjb3JyZXNwb25kaW5nIGxvY2FsIGZpbGUgcGF0aHMgb2YgYWxsCisgICAgLy8g
c2F2ZWQgbGlua3MsIHdoaWNoIG1hdGNoZWQgd2l0aCB2ZWN0b3I6bGlua3Mgb25lIGJ5IG9uZS4K
KyAgICAvLyBUaGUgcGFyYW1ldGVyIGxvY2FsX2RpcmVjdG9yeV9uYW1lIGlzIHJlbGF0aXZlIHBh
dGggb2YgZGlyZWN0b3J5IHdoaWNoCisgICAgLy8gY29udGFpbiBhbGwgc2F2ZWQgYXV4aWxpYXJ5
IGZpbGVzIGluY2x1ZGVkIGFsbCBzdWIgZnJhbWVzIGFuZCByZXNvdXJjZXMuCisgICAgV2ViUGFn
ZVNlcmlhbGl6ZXJJbXBsKFdlYkZyYW1lKiBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCByZWN1cnNpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlBhZ2VTZXJp
YWxpemVyQ2xpZW50KiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdl
YlZlY3RvcjxXZWJVUkw+JiBsaW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
V2ViVmVjdG9yPFdlYlN0cmluZz4mIGxvY2FsUGF0aHMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFdlYlN0cmluZyYgbG9jYWxEaXJlY3RvcnlOYW1lKTsKKworcHJpdmF0ZToKKyAg
ICAvLyBTcGVjaWZpZWQgZnJhbWUgd2hpY2ggbmVlZCB0byBiZSBzZXJpYWxpemVkOworICAgIFdl
YkZyYW1lSW1wbCogbV9zcGVjaWZpZWRXZWJGcmFtZUltcGw7CisgICAgLy8gUG9pbnRlciBvZiBX
ZWJQYWdlU2VyaWFsaXplckNsaWVudAorICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KiBtX2Ns
aWVudDsKKyAgICAvLyBUaGlzIGhhc2ggbWFwIGlzIHVzZWQgdG8gbWFwIHJlc291cmNlIFVSTCBv
ZiBvcmlnaW5hbCBsaW5rIHRvIGl0cyBsb2NhbAorICAgIC8vIGZpbGUgcGF0aC4KKyAgICB0eXBl
ZGVmIEhhc2hNYXA8V2ViQ29yZTo6U3RyaW5nLCBXZWJDb3JlOjpTdHJpbmc+IExpbmtMb2NhbFBh
dGhNYXA7CisgICAgLy8gbG9jYWxfbGlua3NfIGluY2x1ZGUgYWxsIHBhaXIgb2YgbG9jYWwgcmVz
b3VyY2UgcGF0aCBhbmQgY29ycmVzcG9uZGluZworICAgIC8vIG9yaWdpbmFsIGxpbmsuCisgICAg
TGlua0xvY2FsUGF0aE1hcCBtX2xvY2FsTGlua3M7CisgICAgLy8gRGF0YSBidWZmZXIgZm9yIHNh
dmluZyByZXN1bHQgb2Ygc2VyaWFsaXplZCBET00gZGF0YS4KKyAgICBXZWJDb3JlOjpTdHJpbmdC
dWlsZGVyIG1fZGF0YUJ1ZmZlcjsKKyAgICAvLyBQYXNzaW5nIHRydWUgdG8gcmVjdXJzaXZlX3Nl
cmlhbGl6YXRpb25fIGluZGljYXRlcyB3ZSB3aWxsIHNlcmlhbGl6ZSBub3QKKyAgICAvLyBvbmx5
IHRoZSBzcGVjaWZpZWQgZnJhbWUgYnV0IGFsc28gYWxsIHN1Yi1mcmFtZXMgaW4gdGhlIHNwZWNp
ZmljIGZyYW1lLgorICAgIC8vIE90aGVyd2lzZSB3ZSBvbmx5IHNlcmlhbGl6ZSB0aGUgc3BlY2lm
aWVkIGZyYW1lIGV4Y2x1ZGVkIGFsbCBzdWItZnJhbWVzLgorICAgIGJvb2wgbV9yZWN1cnNpdmVT
ZXJpYWxpemF0aW9uOworICAgIC8vIEZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgd2UgaGF2ZSBjb2xs
ZWN0ZWQgYWxsIGZyYW1lcyB3aGljaCBuZWVkIHRvIGJlCisgICAgLy8gc2VyaWFsaXplZCBvciBu
b3Q7CisgICAgYm9vbCBtX2ZyYW1lc0NvbGxlY3RlZDsKKyAgICAvLyBMb2NhbCBkaXJlY3Rvcnkg
bmFtZSBvZiBhbGwgbG9jYWwgcmVzb3VyY2UgZmlsZXMuCisgICAgV2ViQ29yZTo6U3RyaW5nIG1f
bG9jYWxEaXJlY3RvcnlOYW1lOworICAgIC8vIFZlY3RvciBmb3Igc2F2aW5nIGFsbCBmcmFtZXMg
d2hpY2ggbmVlZCB0byBiZSBzZXJpYWxpemVkLgorICAgIFZlY3RvcjxXZWJGcmFtZUltcGwqPiBt
X2ZyYW1lczsKKworICAgIC8vIFdlYiBlbnRpdGllcyBjb252ZXJzaW9uIG1hcHMuCisgICAgV2Vi
RW50aXRpZXMgbV9odG1sRW50aXRpZXM7CisgICAgV2ViRW50aXRpZXMgbV94bWxFbnRpdGllczsK
KworICAgIHN0cnVjdCBTZXJpYWxpemVEb21QYXJhbSB7CisgICAgICAgIC8vIEZyYW1lIFVSTCBv
ZiBjdXJyZW50IHByb2Nlc3NpbmcgZG9jdW1lbnQgcHJlc2VudGVkIGJ5IEdVUkwKKyAgICAgICAg
Y29uc3QgV2ViQ29yZTo6S1VSTCYgY3VycmVudEZyYW1lVVJMOworICAgICAgICAvLyBDdXJyZW50
IHVzaW5nIHRleHQgZW5jb2Rpbmcgb2JqZWN0LgorICAgICAgICBjb25zdCBXZWJDb3JlOjpUZXh0
RW5jb2RpbmcmIHRleHRFbmNvZGluZzsKKworICAgICAgICAvLyBEb2N1bWVudCBvYmplY3Qgb2Yg
Y3VycmVudCBmcmFtZS4KKyAgICAgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGRvYzsKKyAgICAgICAg
Ly8gTG9jYWwgZGlyZWN0b3J5IG5hbWUgb2YgYWxsIGxvY2FsIHJlc291cmNlIGZpbGVzLgorICAg
ICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGRpcmVjdG9yeU5hbWU7CisKKyAgICAgICAgLy8g
RmxhZyBpbmRpY2F0ZXMgY3VycmVudCBkb2MgaXMgaHRtbCBkb2N1bWVudCBvciBub3QuIEl0J3Mg
YSBjYWNoZSB2YWx1ZQorICAgICAgICAvLyBvZiBEb2N1bWVudC5pc0hUTUxEb2N1bWVudCgpLgor
ICAgICAgICBib29sIGlzSFRNTERvY3VtZW50OworICAgICAgICAvLyBGbGFnIHdoaWNoIGluZGlj
YXRlIHdoZXRoZXIgd2UgaGF2ZSBtZXQgZG9jdW1lbnQgdHlwZSBkZWNsYXJhdGlvbi4KKyAgICAg
ICAgYm9vbCBoYXNEb2N0eXBlOworICAgICAgICAvLyBGbGFnIHdoaWNoIGluZGljYXRlIHdoZXRo
ZXIgd2lsbCBwcm9jZXNzIG1ldGEgaXNzdWUuCisgICAgICAgIGJvb2wgaGFzQ2hlY2tlZE1ldGE7
CisgICAgICAgIC8vIFRoaXMgbWV0YSBlbGVtZW50IG5lZWQgdG8gYmUgc2tpcHBlZCB3aGVuIHNl
cmlhbGl6aW5nIERPTS4KKyAgICAgICAgY29uc3QgV2ViQ29yZTo6RWxlbWVudCogc2tpcE1ldGFF
bGVtZW50OworICAgICAgICAvLyBGbGFnIGluZGljYXRlcyB3ZSBhcmUgaW4gc2NyaXB0IG9yIHN0
eWxlIHRhZy4KKyAgICAgICAgYm9vbCBpc0luU2NyaXB0T3JTdHlsZVRhZzsKKyAgICAgICAgLy8g
RmxhZyBpbmRpY2F0ZXMgd2hldGhlciB3ZSBoYXZlIHdyaXR0ZW4geG1sIGRvY3VtZW50IGRlY2xh
cmF0aW9uLgorICAgICAgICAvLyBJdCBpcyBvbmx5IHVzZWQgaW4geG1sIGRvY3VtZW50CisgICAg
ICAgIGJvb2wgaGFzRG9jRGVjbGFyYXRpb247CisgICAgICAgIC8vIEZsYWcgaW5kaWNhdGVzIHdo
ZXRoZXIgd2UgaGF2ZSBhZGRlZCBhZGRpdGlvbmFsIGNvbnRlbnRzIGJlZm9yZSBlbmQgdGFnLgor
ICAgICAgICAvLyBUaGlzIGZsYWcgd2lsbCBiZSByZS1hc3NpZ25lZCBpbiBlYWNoIGNhbGwgb2Yg
ZnVuY3Rpb24KKyAgICAgICAgLy8gUG9zdEFjdGlvbkFmdGVyU2VyaWFsaXplT3BlblRhZyBhbmQg
aXQgY291bGQgYmUgY2hhbmdlZCBpbiBmdW5jdGlvbgorICAgICAgICAvLyBQcmVBY3Rpb25CZWZv
cmVTZXJpYWxpemVFbmRUYWcgaWYgdGhlIGZ1bmN0aW9uIGFkZHMgbmV3IGNvbnRlbnRzIGludG8K
KyAgICAgICAgLy8gc2VyaWFsaXphdGlvbiBzdHJlYW0uCisgICAgICAgIGJvb2wgaGFzQWRkZWRD
b250ZW50c0JlZm9yZUVuZDsKKworICAgICAgICAvLyBDb25zdHJ1Y3Rvci4KKyAgICAgICAgU2Vy
aWFsaXplRG9tUGFyYW0oY29uc3QgV2ViQ29yZTo6S1VSTCYgY3VycmVudEZyYW1lVVJMLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpUZXh0RW5jb2RpbmcmIHRleHRF
bmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGRv
YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBkaXJl
Y3RvcnlOYW1lKTsKKyAgICB9OworCisgICAgLy8gQ29sbGVjdCBhbGwgdGFyZ2V0IGZyYW1lcyB3
aGljaCBuZWVkIHRvIGJlIHNlcmlhbGl6ZWQuCisgICAgdm9pZCBjb2xsZWN0VGFyZ2V0RnJhbWVz
KCk7CisgICAgLy8gQmVmb3JlIHdlIGJlZ2luIHNlcmlhbGl6aW5nIG9wZW4gdGFnIG9mIGEgZWxl
bWVudCwgd2UgZ2l2ZSB0aGUgdGFyZ2V0CisgICAgLy8gZWxlbWVudCBhIGNoYW5jZSB0byBkbyBz
b21lIHdvcmsgcHJpb3IgdG8gYWRkIHNvbWUgYWRkaXRpb25hbCBkYXRhLgorICAgIFdlYkNvcmU6
OlN0cmluZyBwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVPcGVuVGFnKGNvbnN0IFdlYkNvcmU6OkVs
ZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIG5lZWRTa2lwKTsKKyAgICAv
LyBBZnRlciB3ZSBmaW5pc2ggc2VyaWFsaXppbmcgb3BlbiB0YWcgb2YgYSBlbGVtZW50LCB3ZSBn
aXZlIHRoZSB0YXJnZXQKKyAgICAvLyBlbGVtZW50IGEgY2hhbmNlIHRvIGRvIHNvbWUgcG9zdCB3
b3JrIHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgZGF0YS4KKyAgICBXZWJDb3JlOjpTdHJpbmcgcG9z
dEFjdGlvbkFmdGVyU2VyaWFsaXplT3BlblRhZyhjb25zdCBXZWJDb3JlOjpFbGVtZW50KiBlbGVt
ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSk7CisgICAgLy8gQmVmb3JlIHdlIGJlZ2luIHNlcmlh
bGl6aW5nIGVuZCB0YWcgb2YgYSBlbGVtZW50LCB3ZSBnaXZlIHRoZSB0YXJnZXQKKyAgICAvLyBl
bGVtZW50IGEgY2hhbmNlIHRvIGRvIHNvbWUgd29yayBwcmlvciB0byBhZGQgc29tZSBhZGRpdGlv
bmFsIGRhdGEuCisgICAgV2ViQ29yZTo6U3RyaW5nIHByZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZUVu
ZFRhZyhjb25zdCBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFt
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCogbmVlZFNraXApOworICAgIC8vIEFmdGVyIHdlIGZpbmlzaCBzZXJpYWxpemluZyBlbmQgdGFn
IG9mIGEgZWxlbWVudCwgd2UgZ2l2ZSB0aGUgdGFyZ2V0CisgICAgLy8gZWxlbWVudCBhIGNoYW5j
ZSB0byBkbyBzb21lIHBvc3Qgd29yayB0byBhZGQgc29tZSBhZGRpdGlvbmFsIGRhdGEuCisgICAg
V2ViQ29yZTo6U3RyaW5nIHBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZUVuZFRhZyhjb25zdCBXZWJD
b3JlOjpFbGVtZW50KiBlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKTsKKyAgICAvLyBTYXZl
IGdlbmVyYXRlZCBodG1sIGNvbnRlbnQgdG8gZGF0YSBidWZmZXIuCisgICAgdm9pZCBzYXZlSFRN
TENvbnRlbnRUb0J1ZmZlcihjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGNvbnRlbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pOworICAg
IC8vIEZsdXNoZXMgdGhlIGNvbnRlbnQgYnVmZmVyIGJ5IGVuY29kaW5nIGFuZCBzZW5kaW5nIHRo
ZSBjb250ZW50IHRvIHRoZQorICAgIC8vIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LiBDb250ZW50
IGlzIG5vdCBmbHVzaGVkIGlmIHRoZSBidWZmZXIgaXMgbm90IGZ1bGwKKyAgICAvLyB1bmxlc3Mg
Zm9yY2UgaXMgMS4KKyAgICB2b2lkIGVuY29kZUFuZEZsdXNoQnVmZmVyKFdlYlBhZ2VTZXJpYWxp
emVyQ2xpZW50OjpQYWdlU2VyaWFsaXphdGlvblN0YXR1cyBzdGF0dXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGZvcmNlKTsKKyAgICAvLyBTZXJpYWxpemUgb3BlbiB0YWcg
b2YgYW4gc3BlY2lmaWVkIGVsZW1lbnQuCisgICAgdm9pZCBvcGVuVGFnVG9TdHJpbmcoY29uc3Qg
V2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBTZXJp
YWxpemVEb21QYXJhbSogcGFyYW0pOworICAgIC8vIFNlcmlhbGl6ZSBlbmQgdGFnIG9mIGFuIHNw
ZWNpZmllZCBlbGVtZW50LgorICAgIHZvaWQgZW5kVGFnVG9TdHJpbmcoY29uc3QgV2ViQ29yZTo6
RWxlbWVudCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZURvbVBh
cmFtKiBwYXJhbSk7CisgICAgLy8gQnVpbGQgY29udGVudCBmb3IgYSBzcGVjaWZpZWQgbm9kZQor
ICAgIHZvaWQgYnVpbGRDb250ZW50Rm9yTm9kZShjb25zdCBXZWJDb3JlOjpOb2RlKiBub2RlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTdHJpbmcuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdHJp
bmcuY3BwCmluZGV4IGY0NWUwNWYuLjUzMTM5MDcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViU3RyaW5nLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlN0cmluZy5j
cHAKQEAgLTEyMSw2ICsxMjEsMTIgQEAgV2ViU3RyaW5nOjpvcGVyYXRvciBXZWJDb3JlOjpBdG9t
aWNTdHJpbmcoKSBjb25zdAogICAgIHJldHVybiBXZWJDb3JlOjpBdG9taWNTdHJpbmcoc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6U3RyaW5nSW1wbCAqPihtX3ByaXZhdGUpKTsKIH0KIAorV2ViU3RyaW5n
JiBXZWJTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBjaGFyKiBkYXRhKQoreworICAgIGFzc2lnbihX
ZWJDb3JlOjpTdHJpbmc6OmZyb21VVEY4KGRhdGEpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisK
IHZvaWQgV2ViU3RyaW5nOjphc3NpZ24oV2ViU3RyaW5nUHJpdmF0ZSogcCkKIHsKICAgICAvLyBU
YWtlIGNhcmUgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG1fcHJpdmF0ZSA9PSBwCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44712</attachid>
            <date>2009-12-11 15:07:50 -0800</date>
            <delta_ts>2009-12-14 19:26:47 -0800</delta_ts>
            <desc>Added WebPageSerializer to WebKit API.</desc>
            <filename>bug-31737-20091211150749.patch</filename>
            <type>text/plain</type>
            <size>100597</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjJjZDdhMS4uYmNlM2Q4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAwOS0xMi0wNyAgWWFhciBTY2huaXRt
YW4gIDx5YWFyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBXZWJQYWdlU2VyaWFsaXplciB0byBXZWJLaXQgQVBJLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTczNwor
CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmNwcDogQWRkZWQgbWV0aG9k
cyB0byBtYWtlIFN0cmluZ0J1aWxkZXIgZXZlbiBtb3JlIHVzZWZ1bCBmb3IgbGFyZ2Ugc2NhbGUg
c3RyaW5nIGNvbmNhdGVuYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdCdWlsZGVyOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdCdWlsZGVyOjpsZW5ndGgpOgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5oOgorCiAyMDA5LTEyLTA3ICBHeXV5b3Vu
ZyBLaW0gIDxneXV5b3VuZ0BnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKaW5kZXggYzIxZTM2
Ni4uM2UzNDk4MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxk
ZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmNwcApAQCAt
OTUsNCArOTUsMTcgQEAgU3RyaW5nIFN0cmluZ0J1aWxkZXI6OnRvU3RyaW5nKCkgY29uc3QKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCit2b2lkIFN0cmluZ0J1aWxkZXI6OmNsZWFyKCkKK3sKKyAg
ICBtX3RvdGFsTGVuZ3RoID0gVUlOVF9NQVg7CisgICAgbV9zdHJpbmdzLmNsZWFyKCk7Cit9CisK
K3Vuc2lnbmVkIFN0cmluZ0J1aWxkZXI6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgaWYgKG1fdG90
YWxMZW5ndGggPT0gVUlOVF9NQVgpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3Rv
dGFsTGVuZ3RoOworfQorCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3Ry
aW5nQnVpbGRlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxkZXIuaAppbmRl
eCA4ZDc2YjljLi43ZjcyZmJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3Ry
aW5nQnVpbGRlci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmgK
QEAgLTQyLDYgKzQyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGFwcGVu
ZChjb25zdCBTdHJpbmcmKTsKICAgICAgICAgdm9pZCBhcHBlbmQoVUNoYXIpOwogICAgICAgICB2
b2lkIGFwcGVuZChjaGFyKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgY2xlYXIoKTsKKyAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAKICAgICAgICAgU3RyaW5nIHRvU3RyaW5nKCkg
Y29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDU3OTdkM2UuLjY3MzRkNGQgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEyMSBAQAorMjAwOS0xMi0wNyAgWWFhciBTY2huaXRtYW4gIDx5YWFyQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRlZCBXZWJQYWdlU2VyaWFsaXplciB0byBXZWJLaXQgQVBJIGFuZCBlbnJpY2hlZCB0aGUg
V2ViTm9kZSBoaWVyYXJjaHkgdG8gc3VwcG9ydAorICAgICAgICBkb3duc3RyZWFtIHVuaXQtdGVz
dGluZyBvZiBzZXJpYWxpemF0aW9uLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zMTczNworCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAg
KiBwdWJsaWMvV2ViRG9jdW1lbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkRvY3Vt
ZW50OjpXZWJEb2N1bWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRvY3VtZW50OjpvcGVyYXRv
cj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6YXNzaWduKToKKyAgICAgICAgKiBw
dWJsaWMvV2ViRWxlbWVudC5oOgorICAgICAgICAqIHB1YmxpYy9XZWJGb3JtRWxlbWVudC5oOgor
ICAgICAgICAoV2ViS2l0OjpXZWJGb3JtRWxlbWVudDo6b3BlcmF0b3I9KToKKyAgICAgICAgKiBw
dWJsaWMvV2ViRnJhbWUuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViTm9kZS5oOgorICAgICAgICAo
V2ViS2l0OjpXZWJOb2RlOjopOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjp0b0NvbnN0RWxl
bWVudCk6CisgICAgICAgICogcHVibGljL1dlYk5vZGVDb2xsZWN0aW9uLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJOb2RlQ29sbGVjdGlvbjo6fldlYk5vZGVDb2xsZWN0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTm9kZUNvbGxlY3Rpb246OldlYk5vZGVDb2xsZWN0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTm9kZUNvbGxlY3Rpb246Om9wZXJhdG9yPSk6CisgICAgICAgICog
cHVibGljL1dlYk5vZGVMaXN0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlTGlz
dDo6fldlYk5vZGVMaXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZUxpc3Q6OldlYk5vZGVM
aXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZUxpc3Q6Om9wZXJhdG9yPSk6CisgICAgICAg
ICogcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9X
ZWJQYWdlU2VyaWFsaXplckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVNlcmlhbGl6ZXJDbGllbnQ6Oik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVy
Q2xpZW50OjpXZWJQYWdlU2VyaWFsaXplckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VTZXJpYWxpemVyQ2xpZW50Ojp+V2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQpOgorICAgICAgICAq
IHB1YmxpYy9XZWJTdHJpbmcuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViVmlldy5oOgorICAgICAg
ICAqIHNyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcDoKKyAgICAgICAgKiBzcmMvRE9NVXRpbGl0
aWVzUHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OmVsZW1lbnRIYXNMZWdhbExpbmtBdHRy
aWJ1dGUpOgorICAgICAgICAqIHNyYy9ET01VdGlsaXRpZXNQcml2YXRlLmg6CisgICAgICAgICog
c3JjL1dlYkRvY3VtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkRvY3VtZW50
OjpXZWJEb2N1bWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRvY3VtZW50OjpvcGVyYXRvcj0p
OgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRy
PERvY3VtZW50Pik6CisgICAgICAgIChXZWJLaXQ6OldlYkRvY3VtZW50OjpmcmFtZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkRvY3VtZW50Ojppc0hUTUxEb2N1bWVudCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkRvY3VtZW50OjpiYXNlVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViRG9jdW1lbnQ6
OmJvZHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6aGVhZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkRvY3VtZW50OjphbGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6
Y29tcGxldGVVUkwpOgorICAgICAgICAqIHNyYy9XZWJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViRWxlbWVudDo6aGFzVGFnTmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkVsZW1l
bnQ6Omhhc0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkVsZW1lbnQ6OmdldEF0dHJp
YnV0ZSk6CisgICAgICAgICogc3JjL1dlYkVudGl0aWVzLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OnBvcHVsYXRlTWFwKToKKyAgICAgICAgKFdlYktpdDo6KToKKyAgICAgICAgKFdlYktp
dDo6V2ViRW50aXRpZXM6OldlYkVudGl0aWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViRW50aXRp
ZXM6OmVudGl0eU5hbWVCeUNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJFbnRpdGllczo6Y29u
dmVydEVudGl0aWVzSW5TdHJpbmcpOgorICAgICAgICAqIHNyYy9XZWJFbnRpdGllcy5oOiBBZGRl
ZC4KKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
RnJhbWU6OmZyb21GcmFtZU93bmVyRWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
SW1wbDo6ZW5jb2RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmRvY3VtZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpmcm9tRnJhbWVPd25lckVsZW1lbnQp
OgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViTm9kZS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6Om5vZGVUeXBlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTm9kZTo6bm9kZVZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6ZG9jdW1l
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjpmaXJzdENoaWxkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViTm9kZTo6bGFzdENoaWxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6cHJl
dmlvdXNTaWJsaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6bmV4dFNpYmxpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjpoYXNDaGlsZE5vZGVzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTm9kZTo6Y2hpbGROb2Rlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6OmNyZWF0
ZU1hcmt1cCk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6OmlzVGV4dE5vZGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJOb2RlOjppc0VsZW1lbnROb2RlKToKKyAgICAgICAgKiBzcmMvV2ViTm9k
ZUNvbGxlY3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZUNvbGxlY3Rp
b246OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZUNvbGxlY3Rpb246OmFzc2lnbik6
CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVDb2xsZWN0aW9uOjpXZWJOb2RlQ29sbGVjdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVDb2xsZWN0aW9uOjpsZW5ndGgpOgorICAgICAgICAo
V2ViS2l0OjpXZWJOb2RlQ29sbGVjdGlvbjo6bmV4dEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJOb2RlQ29sbGVjdGlvbjo6Zmlyc3RJdGVtKToKKyAgICAgICAgKiBzcmMvV2ViTm9kZUxpc3Qu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZUxpc3Q6OnJlc2V0KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTm9kZUxpc3Q6OmFzc2lnbik6CisgICAgICAgIChXZWJLaXQ6OldlYk5v
ZGVMaXN0OjpXZWJOb2RlTGlzdCk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVMaXN0OjpsZW5n
dGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlTGlzdDo6aXRlbSk6CisgICAgICAgICogc3Jj
L1dlYlBhZ2VTZXJpYWxpemVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VT
ZXJpYWxpemVyOjpzZXJpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXpl
cjo6Z2VuZXJhdGVNZXRhQ2hhcnNldERlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlTWFya09mVGhlV2ViRGVjbGFyYXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVCYXNlVGFnRGVjbGFyYXRpb24p
OgorICAgICAgICAqIHNyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpTZXJpYWxpemVEb21QYXJhbTo6U2Vy
aWFsaXplRG9tUGFyYW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6
OnByZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZU9wZW5UYWcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlU2VyaWFsaXplckltcGw6OnBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZU9wZW5UYWcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6OnByZUFjdGlvbkJlZm9yZVNlcmlh
bGl6ZUVuZFRhZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6cG9z
dEFjdGlvbkFmdGVyU2VyaWFsaXplRW5kVGFnKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNl
cmlhbGl6ZXJJbXBsOjpzYXZlSFRNTENvbnRlbnRUb0J1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6b3BlblRhZ1RvU3RyaW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjplbmRUYWdUb1N0cmluZyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6YnVpbGRDb250ZW50Rm9yTm9kZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpjb2xsZWN0VGFyZ2V0RnJh
bWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpzZXJpYWxpemUp
OgorICAgICAgICAqIHNyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuaDogQWRkZWQuCisgICAgICAg
ICogc3JjL1dlYlN0cmluZy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6V2ViU3Ry
aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvcj0pOgorICAgICAgICAq
IHNyYy9XZWJWaWV3SW1wbC5jcHA6CisKIDIwMDktMTItMDcgIE1pa2hhaWwgTmFnYW5vdiAgPG1u
YWdhbm92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFu
LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cAppbmRleCBkN2JkMzBkLi44M2M5ZmJkIDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAt
MTAyLDYgKzEwMiw3IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJEZXZUb29sc0FnZW50
Q2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRGV2VG9vbHNGcm9udGVuZC5o
JywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkRldlRvb2xzRnJvbnRlbmRDbGllbnQuaCcs
CisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJEb2N1bWVudC5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYkRyYWdEYXRhLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRWRp
dGluZ0FjdGlvbi5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkVsZW1lbnQuaCcsCkBA
IC0xMjcsMTAgKzEyOCwxNCBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWltZVJlZ2lz
dHJ5LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTmF2aWdhdGlvblR5cGUuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJOb2RlLmgnLAorICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViTm9kZUNvbGxlY3Rpb24uaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJOb2Rl
TGlzdC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk5vbkNvcHlhYmxlLmgnLAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViTm90aWZpY2F0aW9uLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyLmgnLAogICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrLmgnLAorICAgICAgICAgICAg
ICAgICdwdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaCcsCisgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJQYWdlU2VyaWFsaXplckNsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YlBhc3N3b3JkQXV0b2NvbXBsZXRlTGlzdGVuZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJQYXNzd29yZEZvcm1EYXRhLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUGx1
Z2luLmgnLApAQCAtMjQyLDggKzI0NywxMSBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViRGF0
YWJhc2UuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkRhdGFTb3VyY2VJbXBsLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJEYXRhU291cmNlSW1wbC5oJywKKyAgICAgICAgICAg
ICAgICAnc3JjL1dlYkRvY3VtZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJEcmFn
RGF0YS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRWxlbWVudC5jcHAnLAorICAgICAg
ICAgICAgICAgICdzcmMvV2ViRW50aXRpZXMuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dl
YkVudGl0aWVzLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRmlsZUNob29zZXJDb21wbGV0
aW9uSW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRmlsZUNob29zZXJDb21wbGV0
aW9uSW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZvbnRDYWNoZS5jcHAnLApAQCAt
MjYyLDcgKzI3MCwxMiBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFQbGF5ZXJDbGll
bnRJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYVBsYXllckNsaWVudElt
cGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJOb2RlLmNwcCcsCisgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJOb2RlQ29sbGVjdGlvbi5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2Vi
Tm9kZUxpc3QuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYk5vdGlmaWNhdGlvbi5jcHAn
LAorICAgICAgICAgICAgICAgICdzcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwJywKKyAgICAgICAg
ICAgICAgICAnc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5jcHAnLAorICAgICAgICAgICAgICAg
ICdzcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
UGFzc3dvcmRGb3JtRGF0YS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViUGFzc3dvcmRG
b3JtVXRpbHMuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlBhc3N3b3JkRm9ybVV0aWxz
LmgnLApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEb2N1bWVudC5oIGIv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEb2N1bWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjU4YmYxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkRvY3VtZW50LmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRG9jdW1l
bnRfaAorI2RlZmluZSBXZWJEb2N1bWVudF9oCisKKyNpbmNsdWRlICJXZWJOb2RlLmgiCisKKyNp
ZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgRG9jdW1l
bnQ7IH0KK25hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1Jl
ZlB0cjsgfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViRWxlbWVudDsK
K2NsYXNzIFdlYkZyYW1lOworY2xhc3MgV2ViTm9kZUNvbGxlY3Rpb247CitjbGFzcyBXZWJTdHJp
bmc7CitjbGFzcyBXZWJVUkw7CisKKy8vIFByb3ZpZGVzIHJlYWRvbmx5IGFjY2VzcyB0byBzb21l
IHByb3BlcnRpZXMgb2YgYSBET00gZG9jdW1lbnQuCitjbGFzcyBXZWJEb2N1bWVudCA6IHB1Ymxp
YyBXZWJOb2RlIHsKK3B1YmxpYzoKKyAgICBXZWJEb2N1bWVudCgpIHsgfQorICAgIFdlYkRvY3Vt
ZW50KGNvbnN0IFdlYkRvY3VtZW50JiBlKSA6IFdlYk5vZGUoZSkgeyB9CisKKyAgICBXZWJEb2N1
bWVudCYgb3BlcmF0b3I9KGNvbnN0IFdlYkRvY3VtZW50JiBlKQorICAgIHsKKyAgICAgICAgV2Vi
Tm9kZTo6YXNzaWduKGUpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIHZvaWQg
YXNzaWduKGNvbnN0IFdlYkRvY3VtZW50JiBlKSB7IFdlYk5vZGU6OmFzc2lnbihlKTsgfQorCisg
ICAgLy8gUmV0dXJucyB0aGUgZnJhbWUgdGhlIGRvY3VtZW50IGJlbG9uZ3MgdG8gb3IgMCBpZiB0
aGUgZG9jdW1lbnQgaXMgZnJhbWVsZXNzLgorICAgIFdFQktJVF9BUEkgV2ViRnJhbWUqIGZyYW1l
KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzSFRNTERvY3VtZW50KCkgY29uc3Q7Cisg
ICAgV0VCS0lUX0FQSSBXZWJVUkwgYmFzZVVSTCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2Vi
RWxlbWVudCBib2R5KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJFbGVtZW50IGhlYWQoKTsK
KyAgICBXRUJLSVRfQVBJIFdlYk5vZGVDb2xsZWN0aW9uIGFsbCgpOworICAgIFdFQktJVF9BUEkg
V2ViVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFdlYlN0cmluZyYpIGNvbnN0OworCisjaWYgV0VCS0lU
X0lNUExFTUVOVEFUSU9OCisgICAgV2ViRG9jdW1lbnQoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdl
YkNvcmU6OkRvY3VtZW50PiYpOworICAgIFdlYkRvY3VtZW50JiBvcGVyYXRvcj0oY29uc3QgV1RG
OjpQYXNzUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50PiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFz
c1JlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4oKSBjb25zdDsKKyNlbmRpZgorfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJFbGVtZW50LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkVsZW1lbnQuaApp
bmRleCBkN2EyY2JmLi5hYzU1NTkzIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkVsZW1lbnQuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkVsZW1lbnQuaApA
QCAtMzksNyArMzksNiBAQCBuYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNs
YXNzIFBhc3NSZWZQdHI7IH0KICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLQogICAgIC8v
IFByb3ZpZGVzIHJlYWRvbmx5IGFjY2VzcyB0byBzb21lIHByb3BlcnRpZXMgb2YgYSBET00gZWxl
bWVudCBub2RlLgogICAgIGNsYXNzIFdlYkVsZW1lbnQgOiBwdWJsaWMgV2ViTm9kZSB7CiAgICAg
cHVibGljOgpAQCAtNDcsNyArNDYsMTEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgICAgIFdl
YkVsZW1lbnQoY29uc3QgV2ViRWxlbWVudCYgZSkgOiBXZWJOb2RlKGUpIHsgfQogCiAgICAgICAg
IFdlYkVsZW1lbnQmIG9wZXJhdG9yPShjb25zdCBXZWJFbGVtZW50JiBlKSB7IFdlYk5vZGU6OmFz
c2lnbihlKTsgcmV0dXJuICp0aGlzOyB9Ci0gICAgICAgIFdFQktJVF9BUEkgdm9pZCBhc3NpZ24o
Y29uc3QgV2ViRWxlbWVudCYgZSkgeyBXZWJOb2RlOjphc3NpZ24oZSk7IH0KKyAgICAgICAgdm9p
ZCBhc3NpZ24oY29uc3QgV2ViRWxlbWVudCYgZSkgeyBXZWJOb2RlOjphc3NpZ24oZSk7IH0KKwor
ICAgICAgICBXRUJLSVRfQVBJIGJvb2wgaGFzVGFnTmFtZShjb25zdCBXZWJTdHJpbmcmKSBjb25z
dDsKKyAgICAgICAgV0VCS0lUX0FQSSBib29sIGhhc0F0dHJpYnV0ZShjb25zdCBXZWJTdHJpbmcm
KSBjb25zdDsKKyAgICAgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgZ2V0QXR0cmlidXRlKGNvbnN0
IFdlYlN0cmluZyYpIGNvbnN0OwogCiAjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCiAgICAgICAg
IFdlYkVsZW1lbnQoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+Jik7CmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZvcm1FbGVtZW50LmggYi9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkZvcm1FbGVtZW50LmgKaW5kZXggMjdhMWVkYi4uYjA3YmZm
OSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGb3JtRWxlbWVudC5oCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRm9ybUVsZW1lbnQuaApAQCAtNTAsNyArNTAs
MTEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgICAgIFdlYkZvcm1FbGVtZW50KCkgOiBXZWJF
bGVtZW50KCkgeyB9CiAgICAgICAgIFdlYkZvcm1FbGVtZW50KGNvbnN0IFdlYkZvcm1FbGVtZW50
JiBlKSA6IFdlYkVsZW1lbnQoZSkgeyB9CiAKLSAgICAgICAgV2ViRWxlbWVudCYgb3BlcmF0b3I9
KGNvbnN0IFdlYkZvcm1FbGVtZW50JiBlKSB7IFdlYkVsZW1lbnQ6OmFzc2lnbihlKTsgcmV0dXJu
ICp0aGlzOyB9CisgICAgICAgIFdlYkZvcm1FbGVtZW50JiBvcGVyYXRvcj0oY29uc3QgV2ViRm9y
bUVsZW1lbnQmIGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIFdlYkVsZW1lbnQ6OmFzc2lnbihl
KTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQogICAgICAgICBXRUJLSVRf
QVBJIHZvaWQgYXNzaWduKGNvbnN0IFdlYkZvcm1FbGVtZW50JiBlKSB7IFdlYkVsZW1lbnQ6OmFz
c2lnbihlKTsgfQogCiAjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkZyYW1lLmgKaW5kZXggNDRiNTdhYS4uZGI2Y2ZhZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJGcmFtZS5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJh
bWUuaApAQCAtNDcsNiArNDcsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViRGF0
YTsKIGNsYXNzIFdlYkRhdGFTb3VyY2U7CitjbGFzcyBXZWJEb2N1bWVudDsKK2NsYXNzIFdlYkVs
ZW1lbnQ7CiBjbGFzcyBXZWJGb3JtRWxlbWVudDsKIGNsYXNzIFdlYkhpc3RvcnlJdGVtOwogY2xh
c3MgV2ViSW5wdXRFbGVtZW50OwpAQCAtODUsNiArODcsMTAgQEAgcHVibGljOgogICAgIFdFQktJ
VF9BUEkgc3RhdGljIFdlYkZyYW1lKiBmcmFtZUZvckVudGVyZWRDb250ZXh0KCk7CiAgICAgV0VC
S0lUX0FQSSBzdGF0aWMgV2ViRnJhbWUqIGZyYW1lRm9yQ3VycmVudENvbnRleHQoKTsKIAorICAg
IC8vIFJldHVybnMgdGhlIGZyYW1lIGluc2lkZSBhIGdpdmVuIGZyYW1lIG9yIGlmcmFtZSBlbGVt
ZW50LiBSZXR1cm5zIDAgaWYKKyAgICAvLyB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBub3QgYSBmcmFt
ZSwgaWZyYW1lIG9yIGlmIHRoZSBmcmFtZSBpcyBlbXB0eS4KKyAgICBXRUJLSVRfQVBJIHN0YXRp
YyBXZWJGcmFtZSogZnJvbUZyYW1lT3duZXJFbGVtZW50KGNvbnN0IFdlYkVsZW1lbnQmKTsKKwog
CiAgICAgLy8gQmFzaWMgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTAzLDYgKzEwOSw4IEBAIHB1YmxpYzoKICAgICAv
LyB0aGUgZG9jdW1lbnQgbG9hZGVkIGluIHRoaXMgZnJhbWUuCiAgICAgdmlydHVhbCBXZWJVUkwg
b3BlblNlYXJjaERlc2NyaXB0aW9uVVJMKCkgY29uc3QgPSAwOwogCisgICAgLy8gUmV0dXJuIHRo
ZSBmcmFtZSdzIGVuY29kaW5nLgorICAgIHZpcnR1YWwgV2ViU3RyaW5nIGVuY29kaW5nKCkgY29u
c3QgPSAwOwogCiAgICAgLy8gR2VvbWV0cnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTY0LDggKzE3Miw5IEBAIHB1Ymxp
YzoKIAogICAgIC8vIENvbnRlbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICB2aXJ0dWFsIHZvaWQgZm9ybXMoV2ViVmVj
dG9yPFdlYkZvcm1FbGVtZW50PiYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFdlYkRvY3VtZW50
IGRvY3VtZW50KCkgY29uc3QgPSAwOwogCisgICAgdmlydHVhbCB2b2lkIGZvcm1zKFdlYlZlY3Rv
cjxXZWJGb3JtRWxlbWVudD4mKSBjb25zdCA9IDA7CiAKICAgICAvLyBTY3JpcHRpbmcgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBA
IC00NDQsNiArNDUzLDcgQEAgcHVibGljOgogICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBiYXNlIFVS
TCBvZiB0aGUgZnJhbWUncyBkb2N1bWVudC4gIFRoaXMgdXNlcyB0aGUKICAgICAvLyBzYW1lIGFs
Z29yaXRobSB0aGF0IFdlYktpdCB1c2VzIHRvIHJlc29sdmUgaHlwZXJsaW5rcyBmb3VuZCBpbiBh
CiAgICAgLy8gSFRNTCBkb2N1bWVudC4KKyAgICAvLyBEZXByZWNhdGVkLiBVc2UgZG9jdW1lbnQo
KS5jb21wbGV0ZVVSTCgpIGluc3RlYWQuCiAgICAgdmlydHVhbCBXZWJVUkwgY29tcGxldGVVUkwo
Y29uc3QgV2ViU3RyaW5nJikgY29uc3QgPSAwOwogCiAgICAgLy8gUmV0dXJucyB0aGUgY29udGVu
dHMgb2YgdGhpcyBmcmFtZSBhcyBhIHN0cmluZy4gIElmIHRoZSB0ZXh0IGlzCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5vZGUuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViTm9kZS5oCmluZGV4IDAzYWZhOTAuLmRmYmIwYWEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViTm9kZS5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
Tm9kZS5oCkBAIC00MCw3ICs0MCw5IEBAIG5hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gY2xhc3MgUGFzc1JlZlB0cjsgfQogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewor
Y2xhc3MgV2ViRG9jdW1lbnQ7CiBjbGFzcyBXZWJGcmFtZTsKK2NsYXNzIFdlYk5vZGVMaXN0Owog
CiAvLyBQcm92aWRlcyByZWFkb25seSBhY2Nlc3MgdG8gc29tZSBwcm9wZXJ0aWVzIG9mIGEgRE9N
IG5vZGUuCiBjbGFzcyBXZWJOb2RlIHsKQEAgLTY2LDkgKzY4LDM3IEBAIHB1YmxpYzoKICAgICBv
cGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Tm9kZT4oKSBjb25zdDsKICNlbmRpZgog
CisgICAgZW51bSBOb2RlVHlwZSB7CisgICAgICAgIEVsZW1lbnROb2RlID0gMSwKKyAgICAgICAg
QXR0cmlidXRlTm9kZSwKKyAgICAgICAgVGV4dE5vZGUsCisgICAgICAgIENEYXRhU2VjdGlvbk5v
ZGUsCisgICAgICAgIEVudGl0eVJlZmVyZW5jZU5vZGUsCisgICAgICAgIEVudGl0eU5vZGUsCisg
ICAgICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbnNOb2RlLAorICAgICAgICBDb21tZW50Tm9kZSwK
KyAgICAgICAgRG9jdW1lbnROb2RlLAorICAgICAgICBEb2N1bWVudFR5cGVOb2RlLAorICAgICAg
ICBEb2N1bWVudEZyYWdtZW50Tm9kZSwKKyAgICAgICAgTm90YXRpb25Ob2RlLAorICAgICAgICBY
UGF0aE5hbWVzcGFjZU5vZGUKKyAgICB9OworICAgIFdFQktJVF9BUEkgTm9kZVR5cGUgbm9kZVR5
cGUoKSBjb25zdDsKICAgICBXRUJLSVRfQVBJIFdlYk5vZGUgcGFyZW50Tm9kZSgpIGNvbnN0Owog
ICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQ
SSBXZWJTdHJpbmcgbm9kZVZhbHVlKCkgY29uc3Q7CisgICAgLy8gRGVwcmVjYXRlZC4gVXNlIGRv
Y3VtZW50KCkuZnJhbWUoKSBpbnN0ZWFkLgogICAgIFdFQktJVF9BUEkgV2ViRnJhbWUqIGZyYW1l
KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJEb2N1bWVudCBkb2N1bWVudCgpIGNvbnN0Owor
ICAgIFdFQktJVF9BUEkgV2ViTm9kZSBmaXJzdENoaWxkKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQ
SSBXZWJOb2RlIGxhc3RDaGlsZCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViTm9kZSBwcmV2
aW91c1NpYmxpbmcoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIFdlYk5vZGUgbmV4dFNpYmxpbmco
KSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaGFzQ2hpbGROb2RlcygpIGNvbnN0OworICAg
IFdFQktJVF9BUEkgV2ViTm9kZUxpc3QgY2hpbGROb2RlcygpOworICAgIFdFQktJVF9BUEkgV2Vi
U3RyaW5nIGNyZWF0ZU1hcmt1cCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBpc1RleHRO
b2RlKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzRWxlbWVudE5vZGUoKSBjb25zdDsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgdG9FbGVtZW50KCkKICAgICB7CkBAIC03Nyw2
ICsxMDcsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IFQgdG9Db25zdEVsZW1lbnQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgVCByZXM7CisgICAgICAgIHJlcy5tX3ByaXZhdGUgPSBtX3ByaXZhdGU7CisgICAg
ICAgIHJldHVybiByZXM7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdHlwZWRlZiBXZWJDb3Jl
OjpOb2RlIFdlYk5vZGVQcml2YXRlOwogICAgIHZvaWQgYXNzaWduKFdlYk5vZGVQcml2YXRlKik7
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5vZGVDb2xsZWN0aW9uLmgg
Yi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5vZGVDb2xsZWN0aW9uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJhNWNkOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViTm9kZUNvbGxlY3Rpb24uaApAQCAtMCwwICsxLDc1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXZWJOb2RlQ29sbGVjdGlvbl9oCisjZGVmaW5lIFdlYk5vZGVDb2xsZWN0aW9uX2gKKwor
I2luY2x1ZGUgIldlYkNvbW1vbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEhUTUxD
b2xsZWN0aW9uOyB9CisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2UgV1RGIHsg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NSZWZQdHI7IH0KKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYk5vZGU7CisKKy8vIFByb3ZpZGVzIHJlYWRvbmx5IGFj
Y2VzcyB0byBzb21lIHByb3BlcnRpZXMgb2YgYSBET00gbm9kZS4KK2NsYXNzIFdlYk5vZGVDb2xs
ZWN0aW9uIHsKK3B1YmxpYzoKKyAgICB+V2ViTm9kZUNvbGxlY3Rpb24oKSB7IHJlc2V0KCk7IH0K
KworICAgIFdlYk5vZGVDb2xsZWN0aW9uKCkgOiBtX3ByaXZhdGUoMCkgeyB9OworICAgIFdlYk5v
ZGVDb2xsZWN0aW9uKGNvbnN0IFdlYk5vZGVDb2xsZWN0aW9uJiBuKSA6IG1fcHJpdmF0ZSgwKSB7
IGFzc2lnbihuKTsgfQorICAgIFdlYk5vZGVDb2xsZWN0aW9uJiBvcGVyYXRvcj0oY29uc3QgV2Vi
Tm9kZUNvbGxlY3Rpb24mIG4pCisgICAgeworICAgICAgICBhc3NpZ24obik7CisgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICB9CisKKyAgICBXRUJLSVRfQVBJIHZvaWQgcmVzZXQoKTsKKyAgICBX
RUJLSVRfQVBJIHZvaWQgYXNzaWduKGNvbnN0IFdlYk5vZGVDb2xsZWN0aW9uJik7CisKKyAgICBX
RUJLSVRfQVBJIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViTm9k
ZSBuZXh0SXRlbSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViTm9kZSBmaXJzdEl0ZW0oKSBj
b25zdDsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYk5vZGVDb2xsZWN0aW9u
KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4mKTsKKyNlbmRp
ZgorCitwcml2YXRlOgorICAgIHZvaWQgYXNzaWduKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uKik7
CisgICAgV2ViQ29yZTo6SFRNTENvbGxlY3Rpb24qIG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViTm9kZUxpc3QuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTm9kZUxpc3QuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmMyNDgzCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJOb2RlTGlzdC5oCkBAIC0wLDAgKzEsNzQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYk5vZGVMaXN0X2gKKyNkZWZpbmUgV2ViTm9kZUxpc3RfaAorCisjaW5jbHVk
ZSAiV2ViQ29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgTm9kZUxpc3Q7IH0K
KyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KK25hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gY2xhc3MgUGFzc1JlZlB0cjsgfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQg
eworY2xhc3MgV2ViTm9kZTsKKworLy8gUHJvdmlkZXMgcmVhZG9ubHkgYWNjZXNzIHRvIHNvbWUg
cHJvcGVydGllcyBvZiBhIERPTSBub2RlLgorY2xhc3MgV2ViTm9kZUxpc3QgeworcHVibGljOgor
ICAgIH5XZWJOb2RlTGlzdCgpIHsgcmVzZXQoKTsgfQorCisgICAgV2ViTm9kZUxpc3QoKSA6IG1f
cHJpdmF0ZSgwKSB7IH07CisgICAgV2ViTm9kZUxpc3QoY29uc3QgV2ViTm9kZUxpc3QmIG4pIDog
bV9wcml2YXRlKDApIHsgYXNzaWduKG4pOyB9CisgICAgV2ViTm9kZUxpc3QmIG9wZXJhdG9yPShj
b25zdCBXZWJOb2RlTGlzdCYgbikKKyAgICB7CisgICAgICAgIGFzc2lnbihuKTsKKyAgICAgICAg
cmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFdFQktJVF9BUEkgdm9pZCByZXNldCgpOworICAg
IFdFQktJVF9BUEkgdm9pZCBhc3NpZ24oY29uc3QgV2ViTm9kZUxpc3QmKTsKKworICAgIFdFQktJ
VF9BUEkgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJOb2RlIGl0
ZW0oc2l6ZV90KSBjb25zdDsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYk5v
ZGVMaXN0KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpOb2RlTGlzdD4mKTsKKyNlbmRp
ZgorCitwcml2YXRlOgorICAgIHZvaWQgYXNzaWduKFdlYkNvcmU6Ok5vZGVMaXN0Kik7CisgICAg
V2ViQ29yZTo6Tm9kZUxpc3QqIG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNl
cmlhbGl6ZXIuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGY3OTk0Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oCkBAIC0wLDAg
KzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYlBhZ2VTZXJpYWxpemVyX2gKKyNkZWZpbmUgV2ViUGFnZVNlcmlh
bGl6ZXJfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewor
Y2xhc3MgV2ViRnJhbWU7CitjbGFzcyBXZWJQYWdlU2VyaWFsaXplckNsaWVudDsKK2NsYXNzIFdl
YlN0cmluZzsKK2NsYXNzIFdlYlVSTDsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJW
ZWN0b3I7CisKKy8vIEdldCBodG1sIGRhdGEgYnkgc2VyaWFsaXppbmcgYWxsIGZyYW1lcyBvZiBj
dXJyZW50IHBhZ2Ugd2l0aCBsaXN0cworLy8gd2hpY2ggY29udGFpbiBhbGwgcmVzb3VyY2UgbGlu
a3MgdGhhdCBoYXZlIGxvY2FsIGNvcHkuCitjbGFzcyBXZWJQYWdlU2VyaWFsaXplciB7CitwdWJs
aWM6CisgICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGZpbmQgb3V0IGFsbCBmcmFtZXMgYW5kIHNl
cmlhbGl6ZSB0aGVtIHRvIEhUTUwgZGF0YS4KKyAgICAvLyBXZSBoYXZlIGEgZGF0YSBidWZmZXIg
dG8gdGVtcG9yYXJ5IHNhdmluZyBnZW5lcmF0ZWQgaHRtbCBkYXRhLiBXZSB3aWxsCisgICAgLy8g
c2VxdWVudGlhbGx5IGNhbGwgV2ViUGFnZVNlcmlhemxpZXJDbGllbnQgb25jZSB0aGUgZGF0YSBi
dWZmZXIgaXMgZnVsbC4KKyAgICAvLworICAgIC8vIFJldHVybiBmYWxzZSBtZWFucyBubyBhdmFp
bGFibGUgZnJhbWUgaGFzIGJlZW4gc2VyaWFsaXplZCwgb3RoZXJ3aXNlCisgICAgLy8gcmV0dXJu
IHRydWUuCisgICAgLy8KKyAgICAvLyBUaGUgcGFyYW1ldGVyIGZyYW1lIHNwZWNpZmllcyB3aGlj
aCBmcmFtZSBuZWVkIHRvIGJlIHNlcmlhbGl6ZWQuCisgICAgLy8gVGhlIHBhcmFtZXRlciByZWN1
cnNpdmUgc3BlY2lmaWVzIHdoZXRoZXIgd2UgbmVlZCB0bworICAgIC8vIHNlcmlhbGl6ZSBhbGwg
c3ViIGZyYW1lcyBvZiB0aGUgc3BlY2lmaWVkIGZyYW1lIG9yIG5vdC4KKyAgICAvLyBUaGUgcGFy
YW1ldGVyIGNsaWVudCBzcGVjaWZpZXMgdGhlIHBvaW50ZXIgb2YgaW50ZXJmYWNlCisgICAgLy8g
V2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQgcHJvdmlkaW5nIGEgc2luayBpbnRlcmZhY2UgdG8gcmVj
ZWl2ZSB0aGUKKyAgICAvLyBpbmRpdmlkdWFsIGNodW5rcyBvZiBkYXRhIHRvIGJlIHNhdmVkLgor
ICAgIC8vIFRoZSBwYXJhbWV0ZXIgbGlua3MgY29udGFpbiBvcmlnaW5hbCBVUkxzIG9mIGFsbCBz
YXZlZCBsaW5rcy4KKyAgICAvLyBUaGUgcGFyYW1ldGVyIGxvY2FsUGF0aHMgY29udGFpbiBjb3Jy
ZXNwb25kaW5nIGxvY2FsIGZpbGUgcGF0aHMgb2YgYWxsCisgICAgLy8gc2F2ZWQgbGlua3MsIHdo
aWNoIG1hdGNoZWQgd2l0aCB2ZWN0b3I6bGlua3Mgb25lIGJ5IG9uZS4KKyAgICAvLyBUaGUgcGFy
YW1ldGVyIGxvY2FsRGlyZWN0b3J5TmFtZSBpcyByZWxhdGl2ZSBwYXRoIG9mIGRpcmVjdG9yeSB3
aGljaAorICAgIC8vIGNvbnRhaW4gYWxsIHNhdmVkIGF1eGlsaWFyeSBmaWxlcyBpbmNsdWRlZCBh
bGwgc3ViIGZyYW1lcyBhbmQgcmVzb3VyY2VzLgorICAgIFdFQktJVF9BUEkgc3RhdGljIGJvb2wg
c2VyaWFsaXplKFdlYkZyYW1lKiBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHJlY3Vyc2l2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudCogY2xpZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+JiBsaW5rcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5n
PiYgbG9jYWxQYXRocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBXZWJTdHJpbmcmIGxvY2FsRGlyZWN0b3J5TmFtZSk7CisKKyAgICAvLyBGSVhNRTogVGhlIGZv
bGxvd2luZyBhcmUgaGVyZSBmb3IgdW5pdCB0ZXN0aW5nIHB1cnBvc2VzLiBDb25zaWRlcgorICAg
IC8vIGNoYW5naW5nIHRoZSB1bml0IHRlc3RzIGluc3RlYWQuCisKKyAgICAvLyBHZW5lcmF0ZSB0
aGUgTUVUQSBmb3IgY2hhcnNldCBkZWNsYXJhdGlvbi4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBX
ZWJTdHJpbmcgZ2VuZXJhdGVNZXRhQ2hhcnNldERlY2xhcmF0aW9uKGNvbnN0IFdlYlN0cmluZyYg
Y2hhcnNldCk7CisgICAgLy8gR2VuZXJhdGUgdGhlIE1PVFcgZGVjbGFyYXRpb24uCisgICAgV0VC
S0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5nIGdlbmVyYXRlTWFya09mVGhlV2ViRGVjbGFyYXRpb24o
Y29uc3QgV2ViVVJMJiB1cmwpOworICAgIC8vIEdlbmVyYXRlIHRoZSBkZWZhdWx0IGJhc2UgdGFn
IGRlY2xhcmF0aW9uLgorICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0ZUJh
c2VUYWdEZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGJhc2VUYXJnZXQpOworfTsKKworfSAg
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jMzBkZGJjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJQYWdlU2VyaWFsaXplckNsaWVudC5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlBh
Z2VTZXJpYWxpemVyQ2xpZW50X2gKKyNkZWZpbmUgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnRfaAor
CituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkNTdHJpbmc7CitjbGFzcyBXZWJVUkw7CisK
Ky8vIFRoaXMgY2xhc3MgaXMgdXNlZCBmb3IgcHJvdmlkaW5nIHNpbmsgaW50ZXJmYWNlIHRoYXQg
Y2FuIGJlIHVzZWQgdG8gcmVjZWl2ZQorLy8gdGhlIGluZGl2aWR1YWwgY2h1bmtzIG9mIGRhdGEg
dG8gYmUgc2F2ZWQuCitjbGFzcyBXZWJQYWdlU2VyaWFsaXplckNsaWVudCB7CitwdWJsaWM6Cisg
ICAgLy8gVGhpcyBlbnVtIGluZGljYXRlcyAgVGhpcyBzaW5rIGludGVyZmFjZSBjYW4gcmVjZWl2
ZSB0aGUgaW5kaXZpZHVhbCBjaHVua3MKKyAgICAvLyBvZiBzZXJpYWxpemVkIGRhdGEgdG8gYmUg
c2F2ZWQsIHNvIHdlIHVzZSB2YWx1ZXMgb2YgZm9sbG93aW5nIGVudW0KKyAgICAvLyBkZWZpbml0
aW9uIHRvIGluZGljYXRlIHRoZSBzZXJpYWxpemF0aW9uIHN0YXR1cyBvZiBzZXJpYWxpemluZyBh
bGwgaHRtbAorICAgIC8vIGNvbnRlbnQuIElmIGN1cnJlbnQgZnJhbWUgaXMgbm90IGNvbXBsZXRl
IHNlcmlhbGl6ZWQsIGNhbGwKKyAgICAvLyBkaWRTZXJpYWxpemVEYXRhRm9yRnJhbWUgd2l0aCBV
Ukwgb2YgY3VycmVudCBmcmFtZSwgZGF0YSwgZGF0YSBsZW5ndGggYW5kCisgICAgLy8gZmxhZyBD
dXJyZW50RnJhbWVJc05vdEZpbmlzaGVkLgorICAgIC8vIElmIGN1cnJlbnQgZnJhbWUgaXMgY29t
cGxldGUgc2VyaWFsaXplZCwgY2FsbCBkaWRTZXJpYWxpemVEYXRhRm9yRnJhbWUKKyAgICAvLyB3
aXRoIFVSTCBvZiBjdXJyZW50IGZyYW1lLCBkYXRhLCBkYXRhIGxlbmd0aCBhbmQgZmxhZworICAg
IC8vIEN1cnJlbnRGcmFtZUlzRmluaXNoZWQuCisgICAgLy8gSWYgYWxsIGZyYW1lcyBvZiBwYWdl
IGFyZSBjb21wbGV0ZSBzZXJpYWxpemVkLCBjYWxsCisgICAgLy8gZGlkU2VyaWFsaXplRGF0YUZv
ckZyYW1lIHdpdGggZW1wdHkgVVJMLCBlbXB0eSBkYXRhLCAwIGFuZCBmbGFnCisgICAgLy8gQWxs
RnJhbWVzQXJlRmluaXNoZWQuCisgICAgZW51bSBQYWdlU2VyaWFsaXphdGlvblN0YXR1cyB7Cisg
ICAgICAgIEN1cnJlbnRGcmFtZUlzTm90RmluaXNoZWQsCisgICAgICAgIEN1cnJlbnRGcmFtZUlz
RmluaXNoZWQsCisgICAgICAgIEFsbEZyYW1lc0FyZUZpbmlzaGVkLAorICAgIH07CisKKyAgICAv
LyBSZWNlaXZlIHRoZSBpbmRpdmlkdWFsIGNodW5rcyBvZiBzZXJpYWxpemVkIGFuZCBlbmNvZGVk
IGRhdGEgdG8gYmUgc2F2ZWQuCisgICAgLy8gVGhlIHBhcmFtZXRlciBmcmFtZVVSTCBzcGVjaWZp
ZXMgd2hhdCBmcmFtZSB0aGUgZGF0YSBiZWxvbmdzLiBUaGUKKyAgICAvLyBwYXJhbWV0ZXIgZGF0
YSBjb250YWlucyB0aGUgYXZhaWxhYmxlIGRhdGEgZm9yIHNhdmluZy4gVGhlIHBhcmFtZXRlcgor
ICAgIC8vIHN0YXR1cyBpbmRpY2F0ZXMgdGhlIHN0YXR1cyBvZiBkYXRhIHNlcmlhbGl6YXRpb24u
CisgICAgdmlydHVhbCB2b2lkIGRpZFNlcmlhbGl6ZURhdGFGb3JGcmFtZShjb25zdCBXZWJVUkwm
IGZyYW1lVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgV2ViQ1N0cmluZyYgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBhZ2VTZXJpYWxpemF0aW9uU3RhdHVzIHN0YXR1cykgPSAwOworICAgIFdlYlBhZ2VT
ZXJpYWxpemVyQ2xpZW50KCkgeyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5XZWJQYWdl
U2VyaWFsaXplckNsaWVudCgpIHsgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3RyaW5nLmggYi9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlN0cmluZy5oCmluZGV4IGQ5YjY2YjIuLmRmZjQ4Njcg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3RyaW5nLmgKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTdHJpbmcuaApAQCAtODYsNiArODYsMTIgQEAgcHVibGlj
OgogCiAgICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5nIGZyb21VVEY4KGNvbnN0IGNoYXIq
IGRhdGEsIHNpemVfdCBsZW5ndGgpOwogICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBm
cm9tVVRGOChjb25zdCBjaGFyKiBkYXRhKTsKKyAgICB0ZW1wbGF0ZSA8aW50IE4+IFdlYlN0cmlu
Zyhjb25zdCBjaGFyICgmZGF0YSlbTl0pCisgICAgICAgIDogbV9wcml2YXRlKDApCisgICAgewor
ICAgICAgICBhc3NpZ24oZnJvbVVURjgoZGF0YSwgTiAtIDEpKTsKKyAgICB9CisgICAgV0VCS0lU
X0FQSSBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBjaGFyKiBzKTsKIAogI2lmIFdFQktJVF9J
TVBMRU1FTlRBVElPTgogICAgIFdlYlN0cmluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKQEAg
LTk2LDYgKzEwMiw3IEBAIHB1YmxpYzoKICAgICBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBX
ZWJDb3JlOjpBdG9taWNTdHJpbmcmKTsKICAgICBvcGVyYXRvciBXZWJDb3JlOjpBdG9taWNTdHJp
bmcoKSBjb25zdDsKICNlbHNlCisKICAgICBXZWJTdHJpbmcoY29uc3Qgc3RyaW5nMTYmIHMpIDog
bV9wcml2YXRlKDApCiAgICAgewogICAgICAgICBhc3NpZ24ocy5kYXRhKCksIHMubGVuZ3RoKCkp
OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNw
cCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKaW5kZXggMzVl
MjA1Ny4uMjEwNGU1ZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRj
aGluZ0VudW1zLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51
bXMuY3BwCkBAIC0yNDUsNiArMjQ1LDIwIEBAIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0o
V2ViSW5wdXRFbGVtZW50OjpNb250aCwgSFRNTElucHV0RWxlbWVudDo6TU9OVEgpOwogQ09NUElM
RV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJJbnB1dEVsZW1lbnQ6OlRpbWUsIEhUTUxJbnB1dEVs
ZW1lbnQ6OlRJTUUpOwogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJJbnB1dEVsZW1l
bnQ6OldlZWssIEhUTUxJbnB1dEVsZW1lbnQ6OldFRUspOwogCitDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdlYk5vZGU6OkVsZW1lbnROb2RlLCBOb2RlOjpFTEVNRU5UX05PREUpOworQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJOb2RlOjpBdHRyaWJ1dGVOb2RlLCBOb2RlOjpB
VFRSSUJVVEVfTk9ERSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk5vZGU6OlRl
eHROb2RlLCBOb2RlOjpURVhUX05PREUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShX
ZWJOb2RlOjpDRGF0YVNlY3Rpb25Ob2RlLCBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUpOworQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJOb2RlOjpFbnRpdHlSZWZlcmVuY2VOb2RlLCBO
b2RlOjpFTlRJVFlfUkVGRVJFTkNFX05PREUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5V
TShXZWJOb2RlOjpFbnRpdHlOb2RlLCBOb2RlOjpFTlRJVFlfTk9ERSk7CitDT01QSUxFX0FTU0VS
VF9NQVRDSElOR19FTlVNKFdlYk5vZGU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbnNOb2RlLCBOb2Rl
OjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdf
RU5VTShXZWJOb2RlOjpDb21tZW50Tm9kZSwgTm9kZTo6Q09NTUVOVF9OT0RFKTsKK0NPTVBJTEVf
QVNTRVJUX01BVENISU5HX0VOVU0oV2ViTm9kZTo6RG9jdW1lbnROb2RlLCBOb2RlOjpET0NVTUVO
VF9OT0RFKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTm9kZTo6RG9jdW1lbnRU
eXBlTm9kZSwgTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFKTsKK0NPTVBJTEVfQVNTRVJUX01BVENI
SU5HX0VOVU0oV2ViTm9kZTo6RG9jdW1lbnRGcmFnbWVudE5vZGUsIE5vZGU6OkRPQ1VNRU5UX0ZS
QUdNRU5UX05PREUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJOb2RlOjpOb3Rh
dGlvbk5vZGUsIE5vZGU6Ok5PVEFUSU9OX05PREUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdf
RU5VTShXZWJOb2RlOjpYUGF0aE5hbWVzcGFjZU5vZGUsIE5vZGU6OlhQQVRIX05BTUVTUEFDRV9O
T0RFKTsKKwogI2lmIEVOQUJMRShWSURFTykKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0o
V2ViTWVkaWFQbGF5ZXI6OkVtcHR5LCBNZWRpYVBsYXllcjo6RW1wdHkpOwogQ09NUElMRV9BU1NF
UlRfTUFUQ0hJTkdfRU5VTShXZWJNZWRpYVBsYXllcjo6SWRsZSwgTWVkaWFQbGF5ZXI6OklkbGUp
OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9ET01VdGlsaXRpZXNQcml2YXRlLmNw
cCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5jcHAKaW5kZXggZmZk
ZDg1ZC4uYzJhYWNmYiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9ET01VdGlsaXRp
ZXNQcml2YXRlLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RPTVV0aWxpdGllc1ByaXZh
dGUuY3BwCkBAIC04NCw0ICs4NCw1NCBAQCBTdHJpbmcgbmFtZU9mSW5wdXRFbGVtZW50KEhUTUxJ
bnB1dEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmV0dXJuIFdlYklucHV0RWxlbWVudChlbGVtZW50
KS5uYW1lRm9yQXV0b2ZpbGwoKTsKIH0KIAorCitib29sIGVsZW1lbnRIYXNMZWdhbExpbmtBdHRy
aWJ1dGUoY29uc3QgRWxlbWVudCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBpZiAoYXR0ck5h
bWUgPT0gSFRNTE5hbWVzOjpzcmNBdHRyKSB7CisgICAgICAgIC8vIENoZWNrIHNyYyBhdHRyaWJ1
dGUuCisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nVGFnKQor
ICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykK
KyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppZnJhbWVUYWcp
CisgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVUYWcp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpKSB7CisgICAgICAgICAgICBjb25zdCBIVE1MSW5wdXRF
bGVtZW50KiBpbnB1dCA9CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBIVE1MSW5wdXRF
bGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgICAgICBpZiAoaW5wdXQtPmlucHV0VHlwZSgpID09
IEhUTUxJbnB1dEVsZW1lbnQ6OklNQUdFKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBIVE1MTmFtZXM6OmhyZWZBdHRy
KSB7CisgICAgICAgIC8vIENoZWNrIGhyZWYgYXR0cmlidXRlLgorICAgICAgICBpZiAoZWxlbWVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpbmtUYWcpCisgICAgICAgICAgICB8fCBlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YVRhZykKKyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjphcmVhVGFnKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjphY3Rpb25BdHRyKSB7CisgICAg
ICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybVRhZykpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IEhUTUxOYW1lczo6
YmFja2dyb3VuZEF0dHIpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpib2R5VGFnKQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRhYmxlVGFnKQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRyVGFnKQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnRkVGFnKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZWxzZSBpZiAoYXR0ck5h
bWUgPT0gSFRNTE5hbWVzOjpjaXRlQXR0cikgeworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGVUYWcpCisgICAgICAgICAgICB8fCBlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6cVRhZykKKyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpkZWxUYWcpCisgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aW5zVGFnKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0g
ZWxzZSBpZiAoYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjpjbGFzc2lkQXR0cgorICAgICAgICAgICAg
ICAgfHwgYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjpkYXRhQXR0cikgeworICAgICAgICBpZiAoZWxl
bWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdFRhZykpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IEhUTUxOYW1lczo6Y29kZWJhc2VB
dHRyKSB7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0
VGFnKQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFwcGxl
dFRhZykpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1
bS9zcmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9ET01VdGls
aXRpZXNQcml2YXRlLmgKaW5kZXggYzAyYmY4NC4uMjUzYWIzZiAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9ET01VdGlsaXRpZXNQcml2YXRlLmgKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9ET01VdGlsaXRpZXNQcml2YXRlLmgKQEAgLTMyLDExICszMiwxMyBAQAogI2RlZmluZSBE
T01VdGlsaXRpZXNQcml2YXRlX2gKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRWxlbWVu
dDsKIGNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiBjbGFzcyBIVE1MTGlua0VsZW1lbnQ7CiBjbGFz
cyBIVE1MTWV0YUVsZW1lbnQ7CiBjbGFzcyBIVE1MT3B0aW9uRWxlbWVudDsKIGNsYXNzIE5vZGU7
CitjbGFzcyBRdWFsaWZpZWROYW1lOwogY2xhc3MgU3RyaW5nOwogfQogCkBAIC01Myw2ICs1NSwx
NiBAQCBXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudCogdG9IVE1MT3B0aW9uRWxlbWVudChXZWJD
b3JlOjpOb2RlKik7CiAvLyBGSVhNRTogRGVwcmVjYXRlLiBVc2UgV2ViSW5wdXRFbGVtZW50Ojpu
YW1lRm9yQXV0b2ZpbGwgaW5zdGVhZC4KIFdlYkNvcmU6OlN0cmluZyBuYW1lT2ZJbnB1dEVsZW1l
bnQoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCopOwogCisvLyBGb3IgaW1nLCBzY3JpcHQsIGlm
cmFtZSwgZnJhbWUgZWxlbWVudCwgd2hlbiBhdHRyaWJ1dGUgbmFtZSBpcyBzcmMsCisvLyBmb3Ig
bGluaywgYSwgYXJlYSBlbGVtZW50LCB3aGVuIGF0dHJpYnV0ZSBuYW1lIGlzIGhyZWYsCisvLyBm
b3IgZm9ybSBlbGVtZW50LCB3aGVuIGF0dHJpYnV0ZSBuYW1lIGlzIGFjdGlvbiwKKy8vIGZvciBp
bnB1dCwgdHlwZT1pbWFnZSwgd2hlbiBhdHRyaWJ1dGUgbmFtZSBpcyBzcmMsCisvLyBmb3IgYm9k
eSwgdGFibGUsIHRyLCB0ZCwgd2hlbiBhdHRyaWJ1dGUgbmFtZSBpcyBiYWNrZ3JvdW5kLAorLy8g
Zm9yIGJsb2NrcXVvdGUsIHEsIGRlbCwgaW5zLCB3aGVuIGF0dHJpYnV0ZSBuYW1lIGlzIGNpdGUs
CisvLyB3ZSBjYW4gY29uc2lkZXIgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBoYXMgbGVnYWwgbGluay4K
K2Jvb2wgZWxlbWVudEhhc0xlZ2FsTGlua0F0dHJpYnV0ZShjb25zdCBXZWJDb3JlOjpFbGVtZW50
KiBlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkNv
cmU6OlF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEb2N1bWVudC5jcHAg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRvY3VtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4yNDY3YTY5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJEb2N1bWVudC5jcHAKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViRG9jdW1lbnQuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisj
aW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxBbGxDb2xsZWN0aW9uLmgiCisjaW5j
bHVkZSAiSFRNTEJvZHlFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKKyNp
bmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxIZWFkRWxlbWVudC5oIgorCisj
aW5jbHVkZSAiV2ViRWxlbWVudC5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgorI2luY2x1
ZGUgIldlYk5vZGVDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCisKKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK1dlYkRvY3VtZW50OjpXZWJEb2N1bWVudChjb25zdCBQYXNzUmVmUHRy
PERvY3VtZW50PiYgZWxlbSkKKyAgICA6IFdlYk5vZGUoZWxlbS5yZWxlYXNlUmVmKCkpCit7Cit9
CisKK1dlYkRvY3VtZW50JiBXZWJEb2N1bWVudDo6b3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8
RG9jdW1lbnQ+JiBlbGVtKQoreworICAgIFdlYk5vZGU6OmFzc2lnbihlbGVtLnJlbGVhc2VSZWYo
KSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJEb2N1bWVudDo6b3BlcmF0b3IgUGFzc1Jl
ZlB0cjxEb2N1bWVudD4oKSBjb25zdAoreworICAgIHJldHVybiBQYXNzUmVmUHRyPERvY3VtZW50
PihzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fcHJpdmF0ZSkpOworfQorCitXZWJGcmFtZSogV2Vi
RG9jdW1lbnQ6OmZyYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViRnJhbWVJbXBsOjpmcm9t
RnJhbWUoY29uc3RVbndyYXA8RG9jdW1lbnQ+KCktPmZyYW1lKCkpOworfQorCitib29sIFdlYkRv
Y3VtZW50Ojppc0hUTUxEb2N1bWVudCgpIGNvbnN0Cit7ICAKKyAgICByZXR1cm4gY29uc3RVbndy
YXA8RG9jdW1lbnQ+KCktPmlzSFRNTERvY3VtZW50KCk7Cit9CisKK1dlYlVSTCBXZWJEb2N1bWVu
dDo6YmFzZVVSTCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPERvY3VtZW50Pigp
LT5iYXNlVVJMKCk7Cit9CisKK1dlYkVsZW1lbnQgV2ViRG9jdW1lbnQ6OmJvZHkoKSBjb25zdAor
eworICAgIHJldHVybiBXZWJFbGVtZW50KGNvbnN0VW53cmFwPERvY3VtZW50PigpLT5ib2R5KCkp
OworfQorCitXZWJFbGVtZW50IFdlYkRvY3VtZW50OjpoZWFkKCkKK3sKKyAgICByZXR1cm4gV2Vi
RWxlbWVudCh1bndyYXA8RG9jdW1lbnQ+KCktPmhlYWQoKSk7Cit9CisKK1dlYk5vZGVDb2xsZWN0
aW9uIFdlYkRvY3VtZW50OjphbGwoKQoreworICAgIHJldHVybiBXZWJOb2RlQ29sbGVjdGlvbih1
bndyYXA8RG9jdW1lbnQ+KCktPmFsbCgpKTsKK30KKworV2ViVVJMIFdlYkRvY3VtZW50Ojpjb21w
bGV0ZVVSTChjb25zdCBXZWJTdHJpbmcmIHBhcnRpYWxVUkwpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGNvbnN0VW53cmFwPERvY3VtZW50PigpLT5jb21wbGV0ZVVSTChwYXJ0aWFsVVJMKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkVsZW1lbnQuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFbGVtZW50LmNwcAppbmRleCAz
ZjEzZWUxLi41Njk4MGZlIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkVsZW1l
bnQuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRWxlbWVudC5jcHAKQEAgLTU0LDUg
KzU0LDIxIEBAIFdlYkVsZW1lbnQ6Om9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxFbGVtZW50Pigp
IGNvbnN0CiAgICAgcmV0dXJuIFBhc3NSZWZQdHI8RWxlbWVudD4oc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KG1fcHJpdmF0ZSkpOwogfQogCitib29sIFdlYkVsZW1lbnQ6Omhhc1RhZ05hbWUoY29uc3Qg
V2ViU3RyaW5nJiB0YWdOYW1lKSBjb25zdAoreworICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2Fz
ZShjb25zdFVud3JhcDxFbGVtZW50PigpLT50YWdOYW1lKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRhZ05hbWUub3BlcmF0b3IgV2ViQ29yZTo6U3RyaW5nKCkpOworfQorCitib29s
IFdlYkVsZW1lbnQ6Omhhc0F0dHJpYnV0ZShjb25zdCBXZWJTdHJpbmcmIGF0dHJOYW1lKSBjb25z
dAoreworICAgIHJldHVybiBjb25zdFVud3JhcDxFbGVtZW50PigpLT5oYXNBdHRyaWJ1dGUoYXR0
ck5hbWUpOworfQorCitXZWJTdHJpbmcgV2ViRWxlbWVudDo6Z2V0QXR0cmlidXRlKGNvbnN0IFdl
YlN0cmluZyYgYXR0ck5hbWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPEVsZW1l
bnQ+KCktPmdldEF0dHJpYnV0ZShhdHRyTmFtZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkVudGl0aWVzLmNwcCBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRW50aXRpZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmU1MDFiZTUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkVudGl0aWVzLmNwcApAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJFbnRpdGllcy5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCisKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKwor
I2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisvLyBOb3RlIHRoYXQgdGhpcyBmaWxl
IGlzIGFsc28gaW5jbHVkZWQgYnkgSFRNTFRva2VuaXplci5jcHAgc28gd2UgYXJlIGdldHRpbmcK
Ky8vIHR3byBjb3BpZXMgb2YgdGhlIGRhdGEgaW4gbWVtb3J5LiAgV2UgY2FuIGZpeCB0aGlzIGJ5
IGNoYW5naW5nIHRoZSBzY3JpcHQKKy8vIHRoYXQgZ2VuZXJhdGVkIHRoZSBhcnJheSB0byBjcmVh
dGUgYSBzdGF0aWMgY29uc3QgdGhhdCBpcyBpdHMgbGVuZ3RoLCBidXQKKy8vIHRoaXMgaXMgbG93
IHByaW9yaXR5IHNpbmNlIHRoZSBkYXRhIGlzIGxlc3MgdGhhbiA0Sy4gV2UgdXNlIGFub255bW91
cworLy8gbmFtZXNwYWNlIHRvIHByZXZlbnQgbmFtZSBjb2xsaXNpb25zLgorI2luY2x1ZGUgIkhU
TUxFbnRpdHlOYW1lcy5jIiAvLyBOT0xJTlQKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3Zv
aWQgcG9wdWxhdGVNYXAoV1RGOjpIYXNoTWFwPGludCwgV2ViQ29yZTo6U3RyaW5nPiYgbWFwLAor
ICAgICAgICAgICAgICAgICBjb25zdCBFbnRpdHkqIGVudGl0aWVzLAorICAgICAgICAgICAgICAg
ICBzaXplX3QgZW50aXRpZXNDb3VudCwKKyAgICAgICAgICAgICAgICAgYm9vbCBzdGFuZGFyZEhU
TUwpCit7CisgICAgQVNTRVJUKG1hcC5pc0VtcHR5KCkpOworICAgIGNvbnN0IEVudGl0eSogZW50
aXR5ID0gJmVudGl0aWVzWzBdOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50aXRpZXND
b3VudDsgaSsrLCBlbnRpdHkrKykgeworICAgICAgICBpbnQgY29kZSA9IGVudGl0eS0+Y29kZTsK
KyAgICAgICAgU3RyaW5nIG5hbWUgPSBlbnRpdHktPm5hbWU7CisgICAgICAgIC8vIEZvciBjb25z
aXN0ZW5jeSwgdXNlIHRoZSBsb3dlIGNhc2UgZm9yIGVudGl0aWVzIHRoYXQgaGF2ZSBib3RoLgor
ICAgICAgICBpZiAobWFwLmNvbnRhaW5zKGNvZGUpICYmIG1hcC5nZXQoY29kZSkgPT0gbmFtZS5s
b3dlcigpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIC8vIERvbid0IHJlZ2lzdGVy
ICZwZXJjbnQ7LCAmbnN1cDsgYW5kICZzdXBsOy4KKyAgICAgICAgaWYgKHN0YW5kYXJkSFRNTCAm
JiAoY29kZSA9PSAnJScgfHwgY29kZSA9PSAweDIyODUgfHwgY29kZSA9PSAweDAwYjkpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIG1hcC5zZXQoY29kZSwgbmFtZSk7CisgICAgfQor
ICAgIGlmIChzdGFuZGFyZEhUTUwpCisgICAgICAgIG1hcC5zZXQoc3RhdGljX2Nhc3Q8aW50Pigw
eDAwMjcpLCBTdHJpbmcoIiMzOSIpKTsKK30KKworc3RhdGljIGNvbnN0IEVudGl0eSB4bWxCdWls
dEluRW50aXR5Q29kZXNbXSA9IHsKKyAgICB7ICJsdCIsIDB4MDAzYyB9LAorICAgIHsgImd0Iiwg
MHgwMDNlIH0sCisgICAgeyAiYW1wIiwgMHgwMDI2IH0sCisgICAgeyAiYXBvcyIsIDB4MDAyNyB9
LAorICAgIHsgInF1b3QiLCAweDAwMjIgfQorfTsKKworV2ViRW50aXRpZXM6OldlYkVudGl0aWVz
KGJvb2wgeG1sRW50aXRpZXMpCit7CisgICAgaWYgKHhtbEVudGl0aWVzKQorICAgICAgICBwb3B1
bGF0ZU1hcChtX2VudGl0aWVzTWFwLAorICAgICAgICAgICAgICAgICAgICB4bWxCdWlsdEluRW50
aXR5Q29kZXMsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZih4bWxCdWlsdEluRW50aXR5Q29k
ZXMpIC8gc2l6ZW9mKEVudGl0eSksCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgICBl
bHNlCisgICAgICAgIHBvcHVsYXRlTWFwKG1fZW50aXRpZXNNYXAsCisgICAgICAgICAgICAgICAg
ICAgIHdvcmRsaXN0LAorICAgICAgICAgICAgICAgICAgICBzaXplb2Yod29yZGxpc3QpIC8gc2l6
ZW9mKEVudGl0eSksCisgICAgICAgICAgICAgICAgICAgIHRydWUpOworfQorCitTdHJpbmcgV2Vi
RW50aXRpZXM6OmVudGl0eU5hbWVCeUNvZGUoaW50IGNvZGUpIGNvbnN0Cit7CisgICAgaWYgKG1f
ZW50aXRpZXNNYXAuY29udGFpbnMoY29kZSkpCisgICAgICAgIHJldHVybiBtX2VudGl0aWVzTWFw
LmdldChjb2RlKTsKKyAgICByZXR1cm4gIiI7Cit9CisKK1N0cmluZyBXZWJFbnRpdGllczo6Y29u
dmVydEVudGl0aWVzSW5TdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKK3sKKyAgICB1
bnNpZ25lZCBsZW4gPSB2YWx1ZS5sZW5ndGgoKTsKKyAgICBjb25zdCBVQ2hhciogc3RhcnRQb3Mg
PSB2YWx1ZS5jaGFyYWN0ZXJzKCk7CisgICAgY29uc3QgVUNoYXIqIGN1clBvcyA9IHN0YXJ0UG9z
OworCisgICAgLy8gRklYTUU6IE9wdGltaXplIC0gY3JlYXRlIFN0cmluZ0J1aWxkZXIgb25seSBp
ZiB2YWx1ZSBoYXMgYW55IGVudGl0aWVzLgorICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAg
IHdoaWxlIChsZW4tLSkgeworICAgICAgICBpZiAobV9lbnRpdGllc01hcC5jb250YWlucygqY3Vy
UG9zKSkgeworICAgICAgICAgICAgLy8gQXBwZW5kIGNvbnRlbnQgYmVmb3JlIGVudGl0eSBjb2Rl
LgorICAgICAgICAgICAgaWYgKGN1clBvcyA+IHN0YXJ0UG9zKQorICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoU3RyaW5nKHN0YXJ0UG9zLCBjdXJQb3MgLSBzdGFydFBvcykpOworICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiJiIpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2Vu
dGl0aWVzTWFwLmdldCgqY3VyUG9zKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCI7Iik7
CisgICAgICAgICAgICBzdGFydFBvcyA9ICsrY3VyUG9zOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIGN1clBvcysrOworICAgIH0KKyAgICAvLyBBcHBlbmQgdGhlIHJlbWFpbmluZyBjb250
ZW50LgorICAgIGlmIChjdXJQb3MgPiBzdGFydFBvcykKKyAgICAgICAgcmVzdWx0LmFwcGVuZChT
dHJpbmcoc3RhcnRQb3MsIGN1clBvcyAtIHN0YXJ0UG9zKSk7CisKKyAgICByZXR1cm4gcmVzdWx0
LnRvU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJFbnRpdGllcy5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJF
bnRpdGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkM2MzMTAKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkVudGl0aWVzLmgKQEAgLTAs
MCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgV2ViRW50aXRpZXNfaAorI2RlZmluZSBXZWJFbnRpdGllc19oCisK
KyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJFbnRpdGllcyB7CitwdWJsaWM6CisgICAg
Ly8gJmFwb3M7LCAmcGVyY250OywgJm5zdXA7LCAmc3VwbDsgYXJlIG5vdCBkZWZpbmVkIGJ5IHRo
ZSBIVE1MIHN0YW5kYXJkcy4KKyAgICAvLyAgLSBJRSBkb2VzIG5vdCBzdXBwb3J0ICZhcG9zOyBh
cyBhbiBIVE1MIGVudGl0eSAoYnV0IHN1cHBvcnQgaXQgYXMgYW4gWE1MCisgICAgLy8gICAgZW50
aXR5LikKKyAgICAvLyAgLSBGaXJlZm94IHN1cHBvcnRzICZhcG9zOyBhcyBhbiBIVE1MIGVudGl0
eS4KKyAgICAvLyAgLSBCb3RoIG9mIElFIGFuZCBGaXJlZm94IGRvbid0IHN1cHBvcnQgJnBlcmNu
dDssICZuc3VwOyBhbmQgJnN1cGw7LgorICAgIC8vCisgICAgLy8gQSB3ZWIgcGFnZSBzYXZlZCBi
eSBDaHJvbWl1bSBzaG91bGQgYmUgYWJsZSB0byBiZSByZWFkIGJ5IG90aGVyIGJyb3dzZXJzCisg
ICAgLy8gc3VjaCBhcyBJRSBhbmQgRmlyZWZveC4gIENocm9taXVtIHNob3VsZCBwcm9kdWNlIG9u
bHkgdGhlIHN0YW5kYXJkIGVudGl0eQorICAgIC8vIHJlZmVyZW5jZXMgd2hpY2ggb3RoZXIgYnJv
d3NlcnMgY2FuIHJlY29nbml6ZS4KKyAgICAvLyBTbyBpZiBzdGFuZGFyZF9odG1sX2VudGl0aWVz
XyBpcyB0cnVlLCB3ZSB3aWxsIHVzZSBhIG51bWVyaWMgY2hhcmFjdGVyCisgICAgLy8gcmVmZXJl
bmNlIGZvciAmYXBvczssIGFuZCBkb24ndCB1c2UgZW50aXR5IHJlZmVyZW5jZXMgZm9yICZwZXJj
bnQ7LCAmbnN1cDsKKyAgICAvLyBhbmQgJnN1cGw7IGZvciBzZXJpYWxpemF0aW9uLgorICAgIC8v
CisgICAgLy8gSWYgeG1sRW50aXRpZXMgaXMgdHJ1ZSwgV2ViRW50aXRpZXMgd2lsbCBvbmx5IGNv
bnRhaW4gc3RhbmRhcmQgWE1MCisgICAgLy8gZW50aXRpZXMuCisgICAgZXhwbGljaXQgV2ViRW50
aXRpZXMoYm9vbCB4bWxFbnRpdGllcyk7CisKKyAgICAvLyBDaGVjayB3aGV0aGVyIHNwZWNpZmll
ZCB1bmljb2RlIGhhcyBjb3JyZXNwb25kaW5nIGh0bWwgb3IgeG1sIGJ1aWx0LWluCisgICAgLy8g
ZW50aXR5IG5hbWUuIElmIHllcywgcmV0dXJuIHRoZSBlbnRpdHkgbm90YXRpb24uIElmIG5vdCwg
cmV0dXJucyBhbgorICAgIC8vIGVtcHR5IHN0cmluZy4gUGFyYW1ldGVyIGlzSFRNTCBpbmRpY2F0
ZXMgY2hlY2sgdGhlIGNvZGUgaW4gaHRtbCBlbnRpdHkKKyAgICAvLyBtYXAgb3IgaW4geG1sIGVu
dGl0eSBtYXAuCisgICAgV2ViQ29yZTo6U3RyaW5nIGVudGl0eU5hbWVCeUNvZGUoaW50IGNvZGUp
IGNvbnN0OworCisgICAgLy8gUmV0dXJucyBhIG5ldyBzdHJpbmcgd2l0aCBjb3JyZXNwb25kaW5n
IGVudGl0eSBuYW1lcyByZXBsYWNlZC4KKyAgICBXZWJDb3JlOjpTdHJpbmcgY29udmVydEVudGl0
aWVzSW5TdHJpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJikgY29uc3Q7Citwcml2YXRlOgorICAg
IHR5cGVkZWYgSGFzaE1hcDxpbnQsIFdlYkNvcmU6OlN0cmluZz4gRW50aXRpZXNNYXBUeXBlOwor
ICAgIC8vIEFuIGludGVybmFsIG9iamVjdCB0aGF0IG1hcHMgdGhlIFVuaWNvZGUgY2hhcmFjdGVy
IHRvIGNvcnJlc3BvbmRpbmcKKyAgICAvLyBlbnRpdHkgbm90YXRpb24uCisgICAgRW50aXRpZXNN
YXBUeXBlIG1fZW50aXRpZXNNYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKaW5kZXggZjcyMjg2MC4uZWUzZGUy
ZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCisrKyBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcApAQCAtMTIyLDYgKzEyMiw3IEBA
CiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2ViQ29uc29sZU1lc3NhZ2Uu
aCIKICNpbmNsdWRlICJXZWJEYXRhU291cmNlSW1wbC5oIgorI2luY2x1ZGUgIldlYkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiV2ViRmluZE9wdGlvbnMuaCIKICNpbmNsdWRlICJXZWJGb3JtRWxlbWVu
dC5oIgogI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCkBAIC0zNDMsNiArMzQ0LDEyIEBAIFdl
YkZyYW1lKiBXZWJGcmFtZTo6ZnJhbWVGb3JDdXJyZW50Q29udGV4dCgpCiAgICAgcmV0dXJuIFdl
YkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGZyYW1lKTsKIH0KIAorV2ViRnJhbWUqIFdlYkZyYW1lOjpm
cm9tRnJhbWVPd25lckVsZW1lbnQoY29uc3QgV2ViRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBy
ZXR1cm4gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWVPd25lckVsZW1lbnQoCisgICAgICAgIFBhc3NS
ZWZQdHI8RWxlbWVudD4oZWxlbWVudCkuZ2V0KCkpOworfQorCiBXZWJTdHJpbmcgV2ViRnJhbWVJ
bXBsOjpuYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9mcmFtZS0+dHJlZSgpLT5uYW1lKCk7
CkBAIC0zOTEsNiArMzk4LDExIEBAIFdlYlVSTCBXZWJGcmFtZUltcGw6Om9wZW5TZWFyY2hEZXNj
cmlwdGlvblVSTCgpIGNvbnN0CiAgICAgcmV0dXJuIFdlYlVSTCgpOwogfQogCitXZWJTdHJpbmcg
V2ViRnJhbWVJbXBsOjplbmNvZGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZyYW1lKCktPmxv
YWRlcigpLT5lbmNvZGluZygpOworfQorCiBXZWJTaXplIFdlYkZyYW1lSW1wbDo6c2Nyb2xsT2Zm
c2V0KCkgY29uc3QKIHsKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZVZpZXcoKTsKQEAgLTUx
NSw2ICs1MjcsMTMgQEAgV2ViRnJhbWUqIFdlYkZyYW1lSW1wbDo6ZmluZENoaWxkQnlFeHByZXNz
aW9uKGNvbnN0IFdlYlN0cmluZyYgeHBhdGgpIGNvbnN0CiAgICAgcmV0dXJuIGZyb21GcmFtZShm
cmFtZUVsZW1lbnQtPmNvbnRlbnRGcmFtZSgpKTsKIH0KIAorV2ViRG9jdW1lbnQgV2ViRnJhbWVJ
bXBsOjpkb2N1bWVudCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5k
b2N1bWVudCgpKQorICAgICAgICByZXR1cm4gV2ViRG9jdW1lbnQoKTsKKyAgICByZXR1cm4gV2Vi
RG9jdW1lbnQobV9mcmFtZS0+ZG9jdW1lbnQoKSk7Cit9CisKIHZvaWQgV2ViRnJhbWVJbXBsOjpm
b3JtcyhXZWJWZWN0b3I8V2ViRm9ybUVsZW1lbnQ+JiByZXN1bHRzKSBjb25zdAogewogICAgIGlm
ICghbV9mcmFtZSkKQEAgLTE2MzEsNiArMTY1MCwxOSBAQCBXZWJGcmFtZUltcGwqIFdlYkZyYW1l
SW1wbDo6ZnJvbUZyYW1lKEZyYW1lKiBmcmFtZSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJh
bWVMb2FkZXJDbGllbnRJbXBsKj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPndlYkZyYW1l
KCk7CiB9CiAKK1dlYkZyYW1lSW1wbCogV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWVPd25lckVsZW1l
bnQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBpZiAoIWVsZW1lbnQKKyAgICAgICAgfHwgIWVs
ZW1lbnQtPmlzRnJhbWVPd25lckVsZW1lbnQoKQorICAgICAgICB8fCAoIWVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjppZnJhbWVUYWcpCisgICAgICAgICAgICAmJiAhZWxlbWVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lVGFnKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
SFRNTEZyYW1lT3duZXJFbGVtZW50KiBmcmFtZUVsZW1lbnQgPQorICAgICAgICBzdGF0aWNfY2Fz
dDxIVE1MRnJhbWVPd25lckVsZW1lbnQqPihlbGVtZW50KTsKKyAgICByZXR1cm4gZnJvbUZyYW1l
KGZyYW1lRWxlbWVudC0+Y29udGVudEZyYW1lKCkpOworfQorICAgIAogV2ViVmlld0ltcGwqIFdl
YkZyYW1lSW1wbDo6dmlld0ltcGwoKSBjb25zdAogewogICAgIGlmICghbV9mcmFtZSkKZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmggYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkZyYW1lSW1wbC5oCmluZGV4IDA1MDY3NWIuLjY1OWU3ZjggMTAwNjQ0Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGcmFtZUltcGwuaApAQCAtNjUsNiArNjUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBXZWJVUkwgdXJsKCkgY29uc3Q7CiAgICAgdmlydHVhbCBXZWJVUkwgZmF2SWNvblVSTCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgV2ViVVJMIG9wZW5TZWFyY2hEZXNjcmlwdGlvblVSTCgpIGNvbnN0
OworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGVuY29kaW5nKCkgY29uc3Q7CiAgICAgdmlydHVhbCBX
ZWJTaXplIHNjcm9sbE9mZnNldCgpIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViU2l6ZSBjb250ZW50
c1NpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBjb250ZW50c1ByZWZlcnJlZFdpZHRoKCkg
Y29uc3Q7CkBAIC04Miw2ICs4Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYkZyYW1lKiB0
cmF2ZXJzZVByZXZpb3VzKGJvb2wgd3JhcCkgY29uc3Q7CiAgICAgdmlydHVhbCBXZWJGcmFtZSog
ZmluZENoaWxkQnlOYW1lKGNvbnN0IFdlYlN0cmluZyYpIGNvbnN0OwogICAgIHZpcnR1YWwgV2Vi
RnJhbWUqIGZpbmRDaGlsZEJ5RXhwcmVzc2lvbihjb25zdCBXZWJTdHJpbmcmKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFdlYkRvY3VtZW50IGRvY3VtZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IGZvcm1zKFdlYlZlY3RvcjxXZWJGb3JtRWxlbWVudD4mKSBjb25zdDsKICAgICB2aXJ0dWFsIFdl
YlNlY3VyaXR5T3JpZ2luIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IGdyYW50VW5pdmVyc2FsQWNjZXNzKCk7CkBAIC0xNTcsNyArMTU5LDYgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgV2ViVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFdlYlN0cmluZyYgdXJsKSBjb25zdDsK
ICAgICB2aXJ0dWFsIFdlYlN0cmluZyBjb250ZW50QXNUZXh0KHNpemVfdCBtYXhDaGFycykgY29u
c3Q7CiAgICAgdmlydHVhbCBXZWJTdHJpbmcgY29udGVudEFzTWFya3VwKCkgY29uc3Q7Ci0KICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJGcmFtZUltcGw+IGNyZWF0ZShXZWJGcmFtZUNsaWVudCog
Y2xpZW50KTsKICAgICB+V2ViRnJhbWVJbXBsKCk7CiAKQEAgLTE3NCw2ICsxNzUsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjcmVhdGVGcmFtZVZpZXcoKTsKIAogICAgIHN0YXRpYyBXZWJGcmFtZUlt
cGwqIGZyb21GcmFtZShXZWJDb3JlOjpGcmFtZSogZnJhbWUpOworICAgIHN0YXRpYyBXZWJGcmFt
ZUltcGwqIGZyb21GcmFtZU93bmVyRWxlbWVudChXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50KTsK
IAogICAgIFdlYlZpZXdJbXBsKiB2aWV3SW1wbCgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYk5vZGUuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOb2Rl
LmNwcAppbmRleCA5NjVjNDEyLi41ZGNkMGM5IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYk5vZGUuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZS5jcHAKQEAg
LTM1LDkgKzM1LDE1IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRl
ckNsaWVudEltcGwuaCIKICNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIK
IAorI2luY2x1ZGUgIldlYkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisj
aW5jbHVkZSAiV2ViTm9kZUxpc3QuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRl
ICJXZWJWZWN0b3IuaCIKKworI2luY2x1ZGUgIm1hcmt1cC5oIgogCiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KIApAQCAtNjEsNiArNjcsMTEgQEAgdm9pZCBXZWJOb2RlOjphc3NpZ24oY29u
c3QgV2ViTm9kZSYgb3RoZXIpCiAgICAgYXNzaWduKHApOwogfQogCitXZWJOb2RlOjpOb2RlVHlw
ZSBXZWJOb2RlOjpub2RlVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5v
ZGVUeXBlPihtX3ByaXZhdGUtPm5vZGVUeXBlKCkpOworfQorCiBXZWJOb2RlIFdlYk5vZGU6OnBh
cmVudE5vZGUoKSBjb25zdAogewogICAgIHJldHVybiBQYXNzUmVmUHRyPE5vZGU+KGNvbnN0X2Nh
c3Q8Tm9kZSo+KG1fcHJpdmF0ZS0+cGFyZW50Tm9kZSgpKSk7CkBAIC03MSwxOCArODIsMjMgQEAg
V2ViU3RyaW5nIFdlYk5vZGU6Om5vZGVOYW1lKCkgY29uc3QKICAgICByZXR1cm4gbV9wcml2YXRl
LT5ub2RlTmFtZSgpOwogfQogCi1XZWJOb2RlOjpXZWJOb2RlKGNvbnN0IFdURjo6UGFzc1JlZlB0
cjxXZWJDb3JlOjpOb2RlPiYgbm9kZSkKK1dlYlN0cmluZyBXZWJOb2RlOjpub2RlVmFsdWUoKSBj
b25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm5vZGVWYWx1ZSgpOworfQorCitXZWJOb2Rl
OjpXZWJOb2RlKGNvbnN0IFBhc3NSZWZQdHI8Tm9kZT4mIG5vZGUpCiAgICAgOiBtX3ByaXZhdGUo
c3RhdGljX2Nhc3Q8V2ViTm9kZVByaXZhdGUqPihub2RlLnJlbGVhc2VSZWYoKSkpCiB7CiB9CiAK
LVdlYk5vZGUmIFdlYk5vZGU6Om9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29y
ZTo6Tm9kZT4mIG5vZGUpCitXZWJOb2RlJiBXZWJOb2RlOjpvcGVyYXRvcj0oY29uc3QgUGFzc1Jl
ZlB0cjxOb2RlPiYgbm9kZSkKIHsKICAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViTm9kZVByaXZh
dGUqPihub2RlLnJlbGVhc2VSZWYoKSkpOwogICAgIHJldHVybiAqdGhpczsKIH0KIAotV2ViTm9k
ZTo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok5vZGU+KCkgY29uc3QKK1dlYk5v
ZGU6Om9wZXJhdG9yIFBhc3NSZWZQdHI8Tm9kZT4oKSBjb25zdAogewogICAgIHJldHVybiBQYXNz
UmVmUHRyPE5vZGU+KGNvbnN0X2Nhc3Q8V2ViTm9kZVByaXZhdGUqPihtX3ByaXZhdGUpKTsKIH0K
QEAgLTEwMCw0ICsxMTYsNTQgQEAgV2ViRnJhbWUqIFdlYk5vZGU6OmZyYW1lKCkgY29uc3QKICAg
ICByZXR1cm4gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUobV9wcml2YXRlLT5kb2N1bWVudCgpLT5m
cmFtZSgpKTsKIH0KIAorV2ViRG9jdW1lbnQgV2ViTm9kZTo6ZG9jdW1lbnQoKSBjb25zdAorewor
ICAgIHJldHVybiBXZWJEb2N1bWVudChtX3ByaXZhdGUtPmRvY3VtZW50KCkpOworfQorCitXZWJO
b2RlIFdlYk5vZGU6OmZpcnN0Q2hpbGQoKSBjb25zdAoreworICAgIHJldHVybiBXZWJOb2RlKG1f
cHJpdmF0ZS0+Zmlyc3RDaGlsZCgpKTsKK30KKworV2ViTm9kZSBXZWJOb2RlOjpsYXN0Q2hpbGQo
KSBjb25zdAoreworICAgIHJldHVybiBXZWJOb2RlKG1fcHJpdmF0ZS0+bGFzdENoaWxkKCkpOwor
fQorCitXZWJOb2RlIFdlYk5vZGU6OnByZXZpb3VzU2libGluZygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFdlYk5vZGUobV9wcml2YXRlLT5wcmV2aW91c1NpYmxpbmcoKSk7Cit9CisKK1dlYk5vZGUg
V2ViTm9kZTo6bmV4dFNpYmxpbmcoKSBjb25zdAoreworICAgIHJldHVybiBXZWJOb2RlKG1fcHJp
dmF0ZS0+bmV4dFNpYmxpbmcoKSk7Cit9CisKK2Jvb2wgV2ViTm9kZTo6aGFzQ2hpbGROb2Rlcygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aGFzQ2hpbGROb2RlcygpOworfQorCitX
ZWJOb2RlTGlzdCBXZWJOb2RlOjpjaGlsZE5vZGVzKCkKK3sKKyAgICByZXR1cm4gV2ViTm9kZUxp
c3QobV9wcml2YXRlLT5jaGlsZE5vZGVzKCkpOworfQorCitXZWJTdHJpbmcgV2ViTm9kZTo6Y3Jl
YXRlTWFya3VwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y3JlYXRlTWFya3VwKG1f
cHJpdmF0ZSk7Cit9CisKK2Jvb2wgV2ViTm9kZTo6aXNUZXh0Tm9kZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+aXNUZXh0Tm9kZSgpOworfQorCitib29sIFdlYk5vZGU6OmlzRWxl
bWVudE5vZGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzRWxlbWVudE5vZGUo
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYk5vZGVDb2xsZWN0aW9uLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9k
ZUNvbGxlY3Rpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZDFm
NWYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5vZGVDb2xsZWN0
aW9uLmNwcApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
Yk5vZGVDb2xsZWN0aW9uLmgiCisKKyNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgorI2luY2x1
ZGUgIk5vZGUuaCIKKworI2luY2x1ZGUgIldlYk5vZGUuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKwordm9pZCBXZWJOb2RlQ29sbGVjdGlvbjo6cmVzZXQoKQoreworICAgIGFzc2lnbigwKTsK
K30KKwordm9pZCBXZWJOb2RlQ29sbGVjdGlvbjo6YXNzaWduKGNvbnN0IFdlYk5vZGVDb2xsZWN0
aW9uJiBvdGhlcikKK3sKKyAgICBIVE1MQ29sbGVjdGlvbiogcCA9IGNvbnN0X2Nhc3Q8SFRNTENv
bGxlY3Rpb24qPihvdGhlci5tX3ByaXZhdGUpOworICAgIGlmIChwKQorICAgICAgICBwLT5yZWYo
KTsKKyAgICBhc3NpZ24ocCk7Cit9CisKK1dlYk5vZGVDb2xsZWN0aW9uOjpXZWJOb2RlQ29sbGVj
dGlvbihjb25zdCBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiYgY29sKQorICAgIDogbV9wcml2
YXRlKHN0YXRpY19jYXN0PEhUTUxDb2xsZWN0aW9uKj4oY29sLnJlbGVhc2VSZWYoKSkpCit7Cit9
CisKK3ZvaWQgV2ViTm9kZUNvbGxlY3Rpb246OmFzc2lnbihIVE1MQ29sbGVjdGlvbiogcCkKK3sK
KyAgICAvLyBwIGlzIGFscmVhZHkgcmVmJ2QgZm9yIHVzIGJ5IHRoZSBjYWxsZXIKKyAgICBpZiAo
bV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7CisgICAgbV9wcml2YXRlID0g
cDsKK30KKwordW5zaWduZWQgV2ViTm9kZUNvbGxlY3Rpb246Omxlbmd0aCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+bGVuZ3RoKCk7Cit9CisKK1dlYk5vZGUgV2ViTm9kZUNvbGxl
Y3Rpb246Om5leHRJdGVtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViTm9kZShtX3ByaXZhdGUt
Pm5leHRJdGVtKCkpOworfQorCitXZWJOb2RlIFdlYk5vZGVDb2xsZWN0aW9uOjpmaXJzdEl0ZW0o
KSBjb25zdAoreworICAgIHJldHVybiBXZWJOb2RlKG1fcHJpdmF0ZS0+Zmlyc3RJdGVtKCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViTm9kZUxpc3QuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOb2RlTGlzdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRlZDg5NgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZUxpc3QuY3BwCkBAIC0wLDAgKzEsODEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViTm9kZUxpc3QuaCIKKworI2luY2x1
ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJOb2RlTGlzdC5oIgorCisjaW5jbHVkZSAiV2ViTm9kZS5o
IgorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFdlYk5vZGVMaXN0OjpyZXNldCgpCit7
CisgICAgYXNzaWduKDApOworfQorCit2b2lkIFdlYk5vZGVMaXN0Ojphc3NpZ24oY29uc3QgV2Vi
Tm9kZUxpc3QmIG90aGVyKQoreworICAgIE5vZGVMaXN0KiBwID0gY29uc3RfY2FzdDxOb2RlTGlz
dCo+KG90aGVyLm1fcHJpdmF0ZSk7CisgICAgaWYgKHApCisgICAgICAgIHAtPnJlZigpOworICAg
IGFzc2lnbihwKTsKK30KKworV2ViTm9kZUxpc3Q6OldlYk5vZGVMaXN0KGNvbnN0IFBhc3NSZWZQ
dHI8Tm9kZUxpc3Q+JiBjb2wpCisgICAgOiBtX3ByaXZhdGUoc3RhdGljX2Nhc3Q8Tm9kZUxpc3Qq
Pihjb2wucmVsZWFzZVJlZigpKSkKK3sKK30KKwordm9pZCBXZWJOb2RlTGlzdDo6YXNzaWduKE5v
ZGVMaXN0KiBwKQoreworICAgIC8vIHAgaXMgYWxyZWFkeSByZWYnZCBmb3IgdXMgYnkgdGhlIGNh
bGxlcgorICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAg
ICBtX3ByaXZhdGUgPSBwOworfQorCit1bnNpZ25lZCBXZWJOb2RlTGlzdDo6bGVuZ3RoKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5sZW5ndGgoKTsKK30KKworV2ViTm9kZSBXZWJO
b2RlTGlzdDo6aXRlbShzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYk5vZGUo
bV9wcml2YXRlLT5pdGVtKGluZGV4KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xMDEwMjg1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplci5oIgorCisjaW5jbHVkZSAiS1VS
TC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlICJXZWJGcmFtZS5o
IgorI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViUGFn
ZVNlcmlhbGl6ZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2Vi
VVJMLmgiCisjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworYm9vbCBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFs
aXplKFdlYkZyYW1lKiBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHJlY3Vyc2l2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQYWdl
U2VyaWFsaXplckNsaWVudCogY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+JiBsaW5rcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbG9jYWxQYXRocywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGxvY2FsRGly
ZWN0b3J5TmFtZSkKK3sKKyAgICBXZWJQYWdlU2VyaWFsaXplckltcGwgc2VyaWFsaXplckltcGwo
CisgICAgICAgIGZyYW1lLCByZWN1cnNpdmUsIGNsaWVudCwgbGlua3MsIGxvY2FsUGF0aHMsIGxv
Y2FsRGlyZWN0b3J5TmFtZSk7CisgICAgcmV0dXJuIHNlcmlhbGl6ZXJJbXBsLnNlcmlhbGl6ZSgp
OworfQorCitXZWJTdHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlTWV0YUNoYXJzZXRE
ZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGNoYXJzZXQpCit7CisgICAgcmV0dXJuIFN0cmlu
Zzo6Zm9ybWF0KCI8TUVUQSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cInRl
eHQvaHRtbDsgY2hhcnNldD0lc1wiPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJz
ZXQudXRmOCgpLmRhdGEoKSk7Cit9CisKK1dlYlN0cmluZyBXZWJQYWdlU2VyaWFsaXplcjo6Z2Vu
ZXJhdGVNYXJrT2ZUaGVXZWJEZWNsYXJhdGlvbihjb25zdCBXZWJVUkwmIHVybCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmb3JtYXQoIlxuPCEtLSBzYXZlZCBmcm9tIHVybD0oJTA0ZCklcyAtLT5c
biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4odXJsLnNwZWMo
KS5sZW5ndGgoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVybC5zcGVjKCkuZGF0YSgp
KTsKK30KKworV2ViU3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZUJhc2VUYWdEZWNs
YXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGJhc2VUYXJnZXQpCit7CisgICAgU3RyaW5nIHRhcmdl
dERlY2xhcmF0aW9uOworICAgIGlmICghYmFzZVRhcmdldC5pc0VtcHR5KCkpCisgICAgICAgIHRh
cmdldERlY2xhcmF0aW9uID0gU3RyaW5nOjpmb3JtYXQoIiB0YXJnZXQ9XCIlc1wiIiwgYmFzZVRh
cmdldC51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIjxCQVNFIGhy
ZWY9XCIuXCIlcz4iLCB0YXJnZXREZWNsYXJhdGlvbi51dGY4KCkuZGF0YSgpKTsKK30KKworfSAg
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQ
YWdlU2VyaWFsaXplckltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFs
aXplckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZmQ2MjYK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVy
SW1wbC5jcHAKQEAgLTAsMCArMSw1NDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBIb3cgd2UgaGFuZGxlIHRoZSBiYXNlIHRhZyBi
ZXR0ZXIuCisvLyBDdXJyZW50IHN0YXR1czoKKy8vIEF0IG5vdyB0aGUgbm9ybWFsIHdheSB3ZSB1
c2UgdG8gaGFuZGxpbmcgYmFzZSB0YWcgaXMKKy8vIGEpIEZvciB0aG9zZSBsaW5rcyB3aGljaCBo
YXZlIGNvcnJlc3BvbmRpbmcgbG9jYWwgc2F2ZWQgZmlsZXMsIHN1Y2ggYXMKKy8vIHNhdmFibGUg
Q1NTLCBKYXZhU2NyaXB0IGZpbGVzLCB0aGV5IHdpbGwgYmUgd3JpdHRlbiB0byByZWxhdGl2ZSBV
UkxzIHdoaWNoCisvLyBwb2ludCB0byBsb2NhbCBzYXZlZCBmaWxlLiBXaHkgdGhvc2UgbGlua3Mg
Y2FuIG5vdCBiZSByZXNvbHZlZCBhcyBhYnNvbHV0ZQorLy8gZmlsZSBVUkxzLCBiZWNhdXNlIGlm
IHRoZXkgYXJlIHJlc29sdmVkIGFzIGFic29sdXRlIFVSTHMsIGFmdGVyIG1vdmluZyB0aGUKKy8v
IGZpbGUgbG9jYXRpb24gZnJvbSBvbmUgZGlyZWN0b3J5IHRvIGFub3RoZXIgZGlyZWN0b3J5LCB0
aGUgZmlsZSBVUkxzIHdpbGwKKy8vIGJlIGRlYWQgbGlua3MuCisvLyBiKSBGb3IgdGhvc2UgbGlu
a3Mgd2hpY2ggaGF2ZSBub3QgY29ycmVzcG9uZGluZyBsb2NhbCBzYXZlZCBmaWxlcywgc3VjaCBh
cworLy8gbGlua3MgaW4gQSwgQVJFQSB0YWdzLCB0aGV5IHdpbGwgYmUgcmVzb2x2ZWQgYXMgYWJz
b2x1dGUgVVJMcy4KKy8vIGMpIFdlIGNvbW1lbnQgYWxsIGJhc2UgdGFncyB3aGVuIHNlcmlhbHpp
bmcgRE9NIGZvciB0aGUgcGFnZS4KKy8vIEZpcmVGb3ggYWxzbyB1c2VzIGFib3ZlIHdheSB0byBo
YW5kbGUgYmFzZSB0YWcuCisvLworLy8gUHJvYmxlbToKKy8vIFRoaXMgd2F5IGNhbiBub3QgaGFu
ZGxlIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9uOgorLy8gdGhlIGJhc2UgdGFnIGlzIHdyaXR0ZW4g
YnkgSmF2YVNjcmlwdC4KKy8vIEZvciBleGFtcGxlLiBUaGUgcGFnZSAid3d3LnlhaG9vLmNvbSIg
dXNlCisvLyAiZG9jdW1lbnQud3JpdGUoJzxiYXNlIGhyZWY9Imh0dHA6Ly93d3cueWFob28uY29t
LyIuLi4nKTsiIHRvIHNldHVwIGJhc2UgVVJMCisvLyBvZiBwYWdlIHdoZW4gbG9hZGluZyBwYWdl
LiBTbyB3aGVuIHNhdmluZyBwYWdlIGFzIGNvbXBsZXRlZC1IVE1MLCB3ZSBhc3N1bWUKKy8vIHRo
YXQgd2Ugc2F2ZSAid3d3LnlhaG9vLmNvbSIgdG8gImM6XHlhaG9vLmh0bSIuIEFmdGVyIHRoZW4g
d2UgbG9hZCB0aGUgc2F2ZWQKKy8vIGNvbXBsZXRlZC1IVE1MIHBhZ2UsIHRoZW4gdGhlIEphdmFT
Y3JpcHQgd2lsbCBpbnNlcnQgYSBiYXNlIHRhZworLy8gPGJhc2UgaHJlZj0iaHR0cDovL3d3dy55
YWhvby5jb20vIi4uLj4gdG8gRE9NLCBzbyBhbGwgVVJMcyB3aGljaCBwb2ludCB0bworLy8gbG9j
YWwgc2F2ZWQgcmVzb3VyY2UgZmlsZXMgd2lsbCBiZSByZXNvbHZlZCBhcworLy8gImh0dHA6Ly93
d3cueWFob28uY29tL3lhaG9vX2ZpbGVzLy4uLiIsIHdoaWNoIHdpbGwgY2F1c2UgYWxsIHNhdmVk
ICByZXNvdXJjZQorLy8gZmlsZXMgY2FuIG5vdCBiZSBsb2FkZWQgY29ycmVjdGx5LiBBbHNvIHRo
ZSBwYWdlIHdpbGwgYmUgcmVuZGVyZWQgdWdseSBzaW5jZQorLy8gYWxsIHNhdmVkIHN1Yi1yZXNv
dXJjZSBmaWxlcyAoc3VjaCBhcyBDU1MsIEphdmFTY3JpcHQgZmlsZXMpIGFuZCBzdWItZnJhbWUK
Ky8vIGZpbGVzIGNhbiBub3QgYmUgZmV0Y2hlZC4KKy8vIE5vdyBGaXJlRm94LCBJRSBhbmQgV2Vi
S2l0IGJhc2VkIEJyb3dzZXIgYWxsIGhhdmUgdGhpcyBwcm9ibGVtLgorLy8KKy8vIFNvbHV0aW9u
OgorLy8gTXkgc29sdXRpb24gaXMgdGhhdCB3ZSBjb21tZW50IG9sZCBiYXNlIHRhZyBhbmQgd3Jp
dGUgbmV3IGJhc2UgdGFnOgorLy8gPGJhc2UgaHJlZj0iLiIgLi4uPiBhZnRlciB0aGUgcHJldmlv
dXMgY29tbWVudGVkIGJhc2UgdGFnLiBJbiBXZWJLaXQsIGl0CisvLyBhbHdheXMgdXNlcyB0aGUg
bGF0ZXN0ICJocmVmIiBhdHRyaWJ1dGUgb2YgYmFzZSB0YWcgdG8gc2V0IGRvY3VtZW50J3MgYmFz
ZQorLy8gVVJMLiBCYXNlZCBvbiB0aGlzIGJlaGF2aW9yLCB3aGVuIHdlIGVuY291bnRlciBhIGJh
c2UgdGFnLCB3ZSBjb21tZW50IGl0IGFuZAorLy8gd3JpdGUgYSBuZXcgYmFzZSB0YWcgPGJhc2Ug
aHJlZj0iLiI+IGFmdGVyIHRoZSBwcmV2aW91cyBjb21tZW50ZWQgYmFzZSB0YWcuCisvLyBUaGUg
bmV3IGFkZGVkIGJhc2UgdGFnIGNhbiBoZWxwIGVuZ2luZSB0byBsb2NhdGUgY29ycmVjdCBiYXNl
IFVSTCBmb3IKKy8vIGNvcnJlY3RseSBsb2FkaW5nIGxvY2FsIHNhdmVkIHJlc291cmNlIGZpbGVz
LiBBbHNvIEkgdGhpbmsgd2UgbmVlZCB0byBpbmhlcml0CisvLyB0aGUgYmFzZSB0YXJnZXQgdmFs
dWUgZnJvbSBkb2N1bWVudCBvYmplY3Qgd2hlbiBhcHBlbmRpbmcgbmV3IGJhc2UgdGFnLgorLy8g
SWYgdGhlcmUgYXJlIG11bHRpcGxlIGJhc2UgdGFncyBpbiBvcmlnaW5hbCBkb2N1bWVudCwgd2Ug
d2lsbCBjb21tZW50IGFsbCBvbGQKKy8vIGJhc2UgdGFncyBhbmQgYXBwZW5kIG5ldyBiYXNlIHRh
ZyBhZnRlciBlYWNoIG9sZCBiYXNlIHRhZyBiZWNhdXNlIHdlIGRvIG5vdAorLy8ga25vdyB0aG9z
ZSBvbGQgYmFzZSB0YWdzIGFyZSBvcmlnaW5hbCBjb250ZW50IG9yIGFkZGVkIGJ5IEphdmFTY3Jp
cHQuIElmCisvLyB0aGV5IGFyZSBhZGRlZCBieSBKYXZhU2NyaXB0LCBpdCBtZWFucyB3aGVuIGxv
YWRpbmcgc2F2ZWQgcGFnZSwgdGhlIHNjcmlwdChzKQorLy8gd2lsbCBzdGlsbCBpbnNlcnQgYmFz
ZSB0YWcocykgdG8gRE9NLCBzbyB0aGUgbmV3IGFkZGVkIGJhc2UgdGFnKHMpIGNhbgorLy8gb3Zl
cnJpZGUgdGhlIGluY29ycmVjdCBiYXNlIFVSTCBhbmQgbWFrZSBzdXJlIHdlIGFsd2F5IGxvYWQg
Y29ycmVjdCBsb2NhbAorLy8gc2F2ZWQgcmVzb3VyY2UgZmlsZXMuCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplckltcGwuaCIKKworI2luY2x1ZGUgIkRP
TVV0aWxpdGllc1ByaXZhdGUuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRv
Y3VtZW50VHlwZS5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgorI2luY2x1ZGUgIkhUTUxBbGxDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiSFRNTEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTWV0YUVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCisjaW5j
bHVkZSAiVGV4dEVuY29kaW5nLmgiCisKKyNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKKyNpbmNs
dWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlICJXZWJWZWN0b3IuaCIKKworI2luY2x1ZGUgIm1hcmt1
cC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
Ky8vIE1heGltdW0gbGVuZ3RoIG9mIGRhdGEgYnVmZmVyIHdoaWNoIGlzIHVzZWQgdG8gdGVtcG9y
YXJ5IHNhdmUgZ2VuZXJhdGVkCisvLyBodG1sIGNvbnRlbnQgZGF0YS4gVGhpcyBpcyBhIHNvZnQg
bGltaXQgd2hpY2ggbWlnaHQgYmUgcGFzc2VkIGlmIGEgdmVyeSBsYXJnZQorLy8gY29udGVnaW91
cyBzdHJpbmcgaXMgZm91bmQgaW4gdGhlIHBhZ2UuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgZGF0
YUJ1ZmZlckNhcGFjaXR5ID0gNjU1MzY7CisKK1dlYlBhZ2VTZXJpYWxpemVySW1wbDo6U2VyaWFs
aXplRG9tUGFyYW06OlNlcmlhbGl6ZURvbVBhcmFtKGNvbnN0IEtVUkwmIGN1cnJlbnRGcmFtZVVS
TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRleHRFbmNvZGluZyYgdGV4dEVuY29kaW5nLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnQqIGRv
YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5TmFtZSkKKyAgICA6IGN1cnJlbnRGcmFtZVVS
TChjdXJyZW50RnJhbWVVUkwpCisgICAgLCB0ZXh0RW5jb2RpbmcodGV4dEVuY29kaW5nKQorICAg
ICwgZG9jKGRvYykKKyAgICAsIGRpcmVjdG9yeU5hbWUoZGlyZWN0b3J5TmFtZSkKKyAgICAsIGhh
c0RvY3R5cGUoZmFsc2UpCisgICAgLCBoYXNDaGVja2VkTWV0YShmYWxzZSkKKyAgICAsIHNraXBN
ZXRhRWxlbWVudCgwKQorICAgICwgaXNJblNjcmlwdE9yU3R5bGVUYWcoZmFsc2UpCisgICAgLCBo
YXNEb2NEZWNsYXJhdGlvbihmYWxzZSkKK3sKKyAgICAvLyBDYWNoZSB0aGUgdmFsdWUgc2luY2Ug
d2UgY2hlY2sgaXQgbG90cyBvZiB0aW1lcy4KKyAgICBpc0hUTUxEb2N1bWVudCA9IGRvYy0+aXNI
VE1MRG9jdW1lbnQoKTsKK30KKworU3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6cHJlQWN0
aW9uQmVmb3JlU2VyaWFsaXplT3BlblRhZygKKyAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBT
ZXJpYWxpemVEb21QYXJhbSogcGFyYW0sIGJvb2wqIG5lZWRTa2lwKQoreworICAgIFN0cmluZ0J1
aWxkZXIgcmVzdWx0OworCisgICAgKm5lZWRTa2lwID0gZmFsc2U7CisgICAgaWYgKHBhcmFtLT5p
c0hUTUxEb2N1bWVudCkgeworICAgICAgICAvLyBTa2lwIHRoZSBvcGVuIHRhZyBvZiBvcmlnaW5h
bCBNRVRBIHRhZyB3aGljaCBkZWNsYXJlIGNoYXJzZXQgc2luY2Ugd2UKKyAgICAgICAgLy8gaGF2
ZSBvdmVycmlkZWQgdGhlIE1FVEEgd2hpY2ggaGF2ZSBjb3JyZWN0IGNoYXJzZXQgZGVjbGFyYXRp
b24gYWZ0ZXIKKyAgICAgICAgLy8gc2VyaWFsaXppbmcgb3BlbiB0YWcgb2YgSEVBRCBlbGVtZW50
LgorICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om1ldGFUYWcpKSB7
CisgICAgICAgICAgICBjb25zdCBIVE1MTWV0YUVsZW1lbnQqIG1ldGEgPSBzdGF0aWNfY2FzdDxj
b25zdCBIVE1MTWV0YUVsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIC8vIENoZWNrIHdo
ZXRoZXIgdGhlIE1FVEEgdGFnIGhhcyBkZWNsYXJlZCBjaGFyc2V0IG9yIG5vdC4KKyAgICAgICAg
ICAgIFN0cmluZyBlcXVpdiA9IG1ldGEtPmh0dHBFcXVpdigpOworICAgICAgICAgICAgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKGVxdWl2LCAiY29udGVudC10eXBlIikpIHsKKyAgICAgICAgICAgICAg
ICBTdHJpbmcgY29udGVudCA9IG1ldGEtPmNvbnRlbnQoKTsKKyAgICAgICAgICAgICAgICBpZiAo
Y29udGVudC5sZW5ndGgoKSAmJiBjb250ZW50LmNvbnRhaW5zKCJjaGFyc2V0IiwgZmFsc2UpKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgTUVUQSB0YWcgZGVjbGFyZWQgY2hhcnNldCwg
d2UgbmVlZCB0byBza2lwIGl0IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgLy8gc2VyaWFsaXpp
bmcgRE9NLgorICAgICAgICAgICAgICAgICAgICBwYXJhbS0+c2tpcE1ldGFFbGVtZW50ID0gZWxl
bWVudDsKKyAgICAgICAgICAgICAgICAgICAgKm5lZWRTa2lwID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKSB7CisgICAgICAgICAgICAvLyBDaGVjayBzb21ldGhp
bmcgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIG9wZW4gdGFnIG9mIEhFQUQgZWxlbWVudC4KKyAgICAg
ICAgICAgIC8vIEZpcnN0IHdlIGFkZCBkb2MgdHlwZSBkZWNsYXJhdGlvbiBpZiBvcmlnaW5hbCBk
b2MgaGFzIGl0LgorICAgICAgICAgICAgaWYgKCFwYXJhbS0+aGFzRG9jdHlwZSkgeworICAgICAg
ICAgICAgICAgIHBhcmFtLT5oYXNEb2N0eXBlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKGNyZWF0ZU1hcmt1cChwYXJhbS0+ZG9jLT5kb2N0eXBlKCkpKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIE1PVFcgZGVjbGFyYXRpb24gYmVmb3JlIGh0bWwg
dGFnLgorICAgICAgICAgICAgLy8gU2VlIGh0dHA6Ly9tc2RuMi5taWNyb3NvZnQuY29tL2VuLXVz
L2xpYnJhcnkvbXM1Mzc2MjgoVlMuODUpLmFzcHguCisgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZU1hcmtPZlRoZVdlYkRlY2xhcmF0aW9uKHBhcmFt
LT5jdXJyZW50RnJhbWVVUkwpKTsKKyAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YmFzZVRhZykpIHsKKyAgICAgICAgICAgIC8vIENvbW1lbnQgdGhlIEJB
U0UgdGFnIHdoZW4gc2VyaWFsaXppbmcgZG9tLgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgi
PCEtLSIpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV3JpdGUgWE1MIGRl
Y2xhcmF0aW9uLgorICAgICAgICBpZiAoIXBhcmFtLT5oYXNEb2NEZWNsYXJhdGlvbikgeworICAg
ICAgICAgICAgcGFyYW0tPmhhc0RvY0RlY2xhcmF0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIC8v
IEdldCBlbmNvZGluZyBpbmZvLgorICAgICAgICAgICAgU3RyaW5nIHhtbEVuY29kaW5nID0gcGFy
YW0tPmRvYy0+eG1sRW5jb2RpbmcoKTsKKyAgICAgICAgICAgIGlmICh4bWxFbmNvZGluZy5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAgICAgeG1sRW5jb2RpbmcgPSBwYXJhbS0+ZG9jLT5mcmFtZSgp
LT5sb2FkZXIoKS0+ZW5jb2RpbmcoKTsKKyAgICAgICAgICAgIGlmICh4bWxFbmNvZGluZy5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAgICAgeG1sRW5jb2RpbmcgPSBVVEY4RW5jb2RpbmcoKS5uYW1l
KCk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCI8P3htbCB2ZXJzaW9uPVwiIik7CisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHBhcmFtLT5kb2MtPnhtbFZlcnNpb24oKSk7CisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCJcIiBlbmNvZGluZz1cIiIpOworICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCh4bWxFbmNvZGluZyk7CisgICAgICAgICAgICBpZiAocGFyYW0tPmRvYy0+eG1sU3Rh
bmRhbG9uZSgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIlwiIHN0YW5kYWxvbmU9
XCJ5ZXMiKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIlwiPz5cbiIpOworICAgICAgICB9
CisgICAgICAgIC8vIEFkZCBkb2MgdHlwZSBkZWNsYXJhdGlvbiBpZiBvcmlnaW5hbCBkb2MgaGFz
IGl0LgorICAgICAgICBpZiAoIXBhcmFtLT5oYXNEb2N0eXBlKSB7CisgICAgICAgICAgICBwYXJh
bS0+aGFzRG9jdHlwZSA9IHRydWU7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNyZWF0ZU1h
cmt1cChwYXJhbS0+ZG9jLT5kb2N0eXBlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBXZWJQYWdlU2VyaWFsaXplckltcGw6
OnBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZU9wZW5UYWcoCisgICAgY29uc3QgRWxlbWVudCogZWxl
bWVudCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQoreworICAgIFN0cmluZ0J1aWxkZXIgcmVz
dWx0OworCisgICAgcGFyYW0tPmhhc0FkZGVkQ29udGVudHNCZWZvcmVFbmQgPSBmYWxzZTsKKyAg
ICBpZiAoIXBhcmFtLT5pc0hUTUxEb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0
cmluZygpOworICAgIC8vIENoZWNrIGFmdGVyIHByb2Nlc3NpbmcgdGhlIG9wZW4gdGFnIG9mIEhF
QUQgZWxlbWVudAorICAgIGlmICghcGFyYW0tPmhhc0NoZWNrZWRNZXRhCisgICAgICAgICYmIGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSkgeworICAgICAgICBwYXJhbS0+
aGFzQ2hlY2tlZE1ldGEgPSB0cnVlOworICAgICAgICAvLyBDaGVjayBtZXRhIGVsZW1lbnQuIFdl
YktpdCBvbmx5IHByZS1wYXJzZSB0aGUgZmlyc3QgNTEyIGJ5dGVzCisgICAgICAgIC8vIG9mIHRo
ZSBkb2N1bWVudC4gSWYgdGhlIHdob2xlIDxIRUFEPiBpcyBsYXJnZXIgYW5kIG1ldGEgaXMgdGhl
CisgICAgICAgIC8vIGVuZCBvZiBoZWFkIHBhcnQsIHRoZW4gdGhpcyBraW5kIG9mIHBhZ2VzIGFy
ZW4ndCBkZWNvZGVkIGNvcnJlY3RseQorICAgICAgICAvLyBiZWNhdXNlIG9mIHRoaXMgaXNzdWUu
IFNvIHdoZW4gd2Ugc2VyaWFsaXplIHRoZSBET00sIHdlIG5lZWQgdG8KKyAgICAgICAgLy8gbWFr
ZSBzdXJlIHRoZSBtZXRhIHdpbGwgaW4gZmlyc3QgY2hpbGQgb2YgaGVhZCB0YWcuCisgICAgICAg
IC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYyMS4KKyAg
ICAgICAgLy8gRmlyc3Qgd2UgZ2VuZXJhdGUgbmV3IGNvbnRlbnQgZm9yIHdyaXRpbmcgY29ycmVj
dCBNRVRBIGVsZW1lbnQuCisgICAgICAgIHJlc3VsdC5hcHBlbmQoV2ViUGFnZVNlcmlhbGl6ZXI6
OmdlbmVyYXRlTWV0YUNoYXJzZXREZWNsYXJhdGlvbigKKyAgICAgICAgICAgIFN0cmluZyhwYXJh
bS0+dGV4dEVuY29kaW5nLm5hbWUoKSkpKTsKKworICAgICAgICBwYXJhbS0+aGFzQWRkZWRDb250
ZW50c0JlZm9yZUVuZCA9IHRydWU7CisgICAgICAgIC8vIFdpbGwgc2VhcmNoIGVhY2ggTUVUQSB3
aGljaCBoYXMgY2hhcnNldCBkZWNsYXJhdGlvbiwgYW5kIHNraXAgdGhlbSBhbGwKKyAgICAgICAg
Ly8gaW4gUHJlQWN0aW9uQmVmb3JlU2VyaWFsaXplT3BlblRhZy4KKyAgICB9IGVsc2UgaWYgKGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHRUYWcpCisgICAgICAgICAgICAgICB8
fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKSB7CisgICAgICAgIHBh
cmFtLT5pc0luU2NyaXB0T3JTdHlsZVRhZyA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIHJl
c3VsdC50b1N0cmluZygpOworfQorCitTdHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpwcmVB
Y3Rpb25CZWZvcmVTZXJpYWxpemVFbmRUYWcoCisgICAgY29uc3QgRWxlbWVudCogZWxlbWVudCwg
U2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLCBib29sKiBuZWVkU2tpcCkKK3sKKyAgICBTdHJpbmcg
cmVzdWx0OworCisgICAgKm5lZWRTa2lwID0gZmFsc2U7CisgICAgaWYgKCFwYXJhbS0+aXNIVE1M
RG9jdW1lbnQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgLy8gU2tpcCB0aGUgZW5kIHRh
ZyBvZiBvcmlnaW5hbCBNRVRBIHRhZyB3aGljaCBkZWNsYXJlIGNoYXJzZXQuCisgICAgLy8gTmVl
ZCBub3QgdG8gY2hlY2sgd2hldGhlciBpdCdzIE1FVEEgdGFnIHNpbmNlIHdlIGd1YXJhbnRlZQor
ICAgIC8vIHNraXBNZXRhRWxlbWVudCBpcyBkZWZpbml0ZWx5IE1FVEEgdGFnIGlmIGl0J3Mgbm90
IDAuCisgICAgaWYgKHBhcmFtLT5za2lwTWV0YUVsZW1lbnQgPT0gZWxlbWVudCkKKyAgICAgICAg
Km5lZWRTa2lwID0gdHJ1ZTsKKyAgICBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6c2NyaXB0VGFnKQorICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpzdHlsZVRhZykpIHsKKyAgICAgICAgQVNTRVJUKHBhcmFtLT5pc0luU2NyaXB0T3JT
dHlsZVRhZyk7CisgICAgICAgIHBhcmFtLT5pc0luU2NyaXB0T3JTdHlsZVRhZyA9IGZhbHNlOwor
ICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIEFmdGVyIHdlIGZpbmlzaCBzZXJp
YWxpemluZyBlbmQgdGFnIG9mIGEgZWxlbWVudCwgd2UgZ2l2ZSB0aGUgdGFyZ2V0CisvLyBlbGVt
ZW50IGEgY2hhbmNlIHRvIGRvIHNvbWUgcG9zdCB3b3JrIHRvIGFkZCBzb21lIGFkZGl0aW9uYWwg
ZGF0YS4KK1N0cmluZyBXZWJQYWdlU2VyaWFsaXplckltcGw6OnBvc3RBY3Rpb25BZnRlclNlcmlh
bGl6ZUVuZFRhZygKKyAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBTZXJpYWxpemVEb21QYXJh
bSogcGFyYW0pCit7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisKKyAgICBpZiAoIXBhcmFt
LT5pc0hUTUxEb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworICAg
IC8vIENvbW1lbnQgdGhlIEJBU0UgdGFnIHdoZW4gc2VyaWFsaXppbmcgRE9NLgorICAgIGlmIChl
bGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmFzZVRhZykpIHsKKyAgICAgICAgcmVzdWx0
LmFwcGVuZCgiLS0+Iik7CisgICAgICAgIC8vIEFwcGVuZCBhIG5ldyBiYXNlIHRhZyBkZWNsYXJh
dGlvbi4KKyAgICAgICAgcmVzdWx0LmFwcGVuZChXZWJQYWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVC
YXNlVGFnRGVjbGFyYXRpb24oCisgICAgICAgICAgICBwYXJhbS0+ZG9jLT5iYXNlVGFyZ2V0KCkp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKK3ZvaWQgV2Vi
UGFnZVNlcmlhbGl6ZXJJbXBsOjpzYXZlSFRNTENvbnRlbnRUb0J1ZmZlcigKKyAgICBjb25zdCBT
dHJpbmcmIHJlc3VsdCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQoreworICAgIG1fZGF0YUJ1
ZmZlci5hcHBlbmQocmVzdWx0KTsKKyAgICBlbmNvZGVBbmRGbHVzaEJ1ZmZlcihXZWJQYWdlU2Vy
aWFsaXplckNsaWVudDo6Q3VycmVudEZyYW1lSXNOb3RGaW5pc2hlZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKK30KKwordm9p
ZCBXZWJQYWdlU2VyaWFsaXplckltcGw6OmVuY29kZUFuZEZsdXNoQnVmZmVyKAorICAgIFdlYlBh
Z2VTZXJpYWxpemVyQ2xpZW50OjpQYWdlU2VyaWFsaXphdGlvblN0YXR1cyBzdGF0dXMsCisgICAg
U2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLAorICAgIGJvb2wgZm9yY2UpCit7CisgICAgLy8gRGF0
YSBidWZmZXIgaXMgbm90IGZ1bGwgbm9yIGRvIHdlIHdhbnQgdG8gZm9yY2UgZmx1c2guCisgICAg
aWYgKCFmb3JjZSAmJiBtX2RhdGFCdWZmZXIubGVuZ3RoKCkgPD0gZGF0YUJ1ZmZlckNhcGFjaXR5
KQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgY29udGVudCA9IG1fZGF0YUJ1ZmZlci50
b1N0cmluZygpOworICAgIG1fZGF0YUJ1ZmZlci5jbGVhcigpOworCisgICAgLy8gQ29udmVydCB0
aGUgdW5pY29kZSBjb250ZW50IHRvIHRhcmdldCBlbmNvZGluZworICAgIENTdHJpbmcgZW5jb2Rl
ZENvbnRlbnQgPSBwYXJhbS0+dGV4dEVuY29kaW5nLmVuY29kZSgKKyAgICAgICAgY29udGVudC5j
aGFyYWN0ZXJzKCksIGNvbnRlbnQubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsK
KworICAgIC8vIFNlbmQgcmVzdWx0IHRvIHRoZSBjbGllbnQuCisgICAgbV9jbGllbnQtPmRpZFNl
cmlhbGl6ZURhdGFGb3JGcmFtZShwYXJhbS0+Y3VycmVudEZyYW1lVVJMLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ1N0cmluZyhlbmNvZGVkQ29udGVudC5kYXRh
KCksIGVuY29kZWRDb250ZW50Lmxlbmd0aCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXR1cyk7Cit9CisKK3ZvaWQgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpv
cGVuVGFnVG9TdHJpbmcoY29uc3QgRWxlbWVudCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQorewor
ICAgIC8vIEZJWE1FOiB1c2UgU3RyaW5nQnVpbGRlciBpbnN0ZWFkIG9mIFN0cmluZy4KKyAgICBi
b29sIG5lZWRTa2lwOworICAgIC8vIERvIHByZSBhY3Rpb24gZm9yIG9wZW4gdGFnLgorICAgIFN0
cmluZyByZXN1bHQgPSBwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVPcGVuVGFnKGVsZW1lbnQsIHBh
cmFtLCAmbmVlZFNraXApOworICAgIGlmIChuZWVkU2tpcCkKKyAgICAgICAgcmV0dXJuOworICAg
IC8vIEFkZCBvcGVuIHRhZworICAgIHJlc3VsdCArPSAiPCIgKyBlbGVtZW50LT5ub2RlTmFtZSgp
OworICAgIC8vIEdvIHRocm91Z2ggYWxsIGF0dHJpYnV0ZXMgYW5kIHNlcmlhbGl6ZSB0aGVtLgor
ICAgIGNvbnN0IE5hbWVkTm9kZU1hcCAqYXR0ck1hcCA9IGVsZW1lbnQtPmF0dHJpYnV0ZXModHJ1
ZSk7CisgICAgaWYgKGF0dHJNYXApIHsKKyAgICAgICAgdW5zaWduZWQgbnVtQXR0cnMgPSBhdHRy
TWFwLT5sZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUF0dHJz
OyBpKyspIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSAiICI7CisgICAgICAgICAgICAvLyBBZGQg
YXR0cmlidXRlIHBhaXIKKyAgICAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSAqYXR0cmlidXRlID0g
YXR0ck1hcC0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAgICAgIHJlc3VsdCArPSBhdHRyaWJ1
dGUtPm5hbWUoKS50b1N0cmluZygpOworICAgICAgICAgICAgcmVzdWx0ICs9ICI9XCIiOworICAg
ICAgICAgICAgaWYgKCFhdHRyaWJ1dGUtPnZhbHVlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICAgICAgY29uc3QgU3RyaW5nJiBhdHRyVmFsdWUgPSBhdHRyaWJ1dGUtPnZhbHVlKCk7CisKKyAg
ICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHdlIG5lZWQgdG8gcmVwbGFjZSBzb21lIHJl
c291cmNlIGxpbmtzCisgICAgICAgICAgICAgICAgLy8gd2l0aCBsb2NhbCByZXNvdXJjZSBwYXRo
cy4KKyAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9IGF0dHJp
YnV0ZS0+bmFtZSgpOworICAgICAgICAgICAgICAgIGlmIChlbGVtZW50SGFzTGVnYWxMaW5rQXR0
cmlidXRlKGVsZW1lbnQsIGF0dHJOYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGb3Ig
bGlua3Mgc3RhcnQgd2l0aCAiamF2YXNjcmlwdDoiLCB3ZSBkbyBub3QgY2hhbmdlIGl0LgorICAg
ICAgICAgICAgICAgICAgICBpZiAoYXR0clZhbHVlLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6Iiwg
ZmFsc2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGF0dHJWYWx1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQg
dGhlIGFic29sdXRlIGxpbmsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjb21wbGV0
ZVVSTCA9IHBhcmFtLT5kb2MtPmNvbXBsZXRlVVJMKGF0dHJWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHdlIGhhdmUgbG9jYWwgZmlsZXMgZm9yIHRob3Nl
IGxpbmsuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9sb2NhbExpbmtzLmNvbnRhaW5z
KGNvbXBsZXRlVVJMKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9sb2Nh
bERpcmVjdG9yeU5hbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgKz0gIi4vIiArIG1fbG9jYWxEaXJlY3RvcnlOYW1lICsgIi8iOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBtX2xvY2FsTGlua3MuZ2V0KGNvbXBsZXRlVVJM
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCArPSBjb21wbGV0ZVVSTDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS0+aXNI
VE1MRG9jdW1lbnQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gbV9odG1sRW50
aXRpZXMuY29udmVydEVudGl0aWVzSW5TdHJpbmcoYXR0clZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IG1feG1sRW50aXRp
ZXMuY29udmVydEVudGl0aWVzSW5TdHJpbmcoYXR0clZhbHVlKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHQgKz0gIlwiIjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIERvIHBvc3QgYWN0aW9uIGZvciBvcGVuIHRhZy4KKyAgICBTdHJpbmcg
YWRkZWRDb250ZW50cyA9IHBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZU9wZW5UYWcoZWxlbWVudCwg
cGFyYW0pOworICAgIC8vIENvbXBsZXRlIHRoZSBvcGVuIHRhZyBmb3IgZWxlbWVudCB3aGVuIGl0
IGhhcyBjaGlsZC9jaGlsZHJlbi4KKyAgICBpZiAoZWxlbWVudC0+aGFzQ2hpbGROb2RlcygpIHx8
IHBhcmFtLT5oYXNBZGRlZENvbnRlbnRzQmVmb3JlRW5kKQorICAgICAgICByZXN1bHQgKz0gIj4i
OworICAgIC8vIEFwcGVuZCB0aGUgYWRkZWQgY29udGVudHMgZ2VuZXJhdGUgaW4gIHBvc3QgYWN0
aW9uIG9mIG9wZW4gdGFnLgorICAgIHJlc3VsdCArPSBhZGRlZENvbnRlbnRzOworICAgIC8vIFNh
dmUgdGhlIHJlc3VsdCB0byBkYXRhIGJ1ZmZlci4KKyAgICBzYXZlSFRNTENvbnRlbnRUb0J1ZmZl
cihyZXN1bHQsIHBhcmFtKTsKK30KKworLy8gU2VyaWFsaXplIGVuZCB0YWcgb2YgYW4gc3BlY2lm
aWVkIGVsZW1lbnQuCit2b2lkIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6ZW5kVGFnVG9TdHJpbmco
Y29uc3QgRWxlbWVudCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pCit7CisgICAgYm9vbCBuZWVkU2tp
cDsKKyAgICAvLyBEbyBwcmUgYWN0aW9uIGZvciBlbmQgdGFnLgorICAgIFN0cmluZyByZXN1bHQg
PSBwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVFbmRUYWcoZWxlbWVudCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRTa2lwKTsKKyAgICBp
ZiAobmVlZFNraXApCisgICAgICAgIHJldHVybjsKKyAgICAvLyBXcml0ZSBlbmQgdGFnIHdoZW4g
ZWxlbWVudCBoYXMgY2hpbGQvY2hpbGRyZW4uCisgICAgaWYgKGVsZW1lbnQtPmhhc0NoaWxkTm9k
ZXMoKSB8fCBwYXJhbS0+aGFzQWRkZWRDb250ZW50c0JlZm9yZUVuZCkgeworICAgICAgICByZXN1
bHQgKz0gIjwvIjsKKyAgICAgICAgcmVzdWx0ICs9IGVsZW1lbnQtPm5vZGVOYW1lKCk7CisgICAg
ICAgIHJlc3VsdCArPSAiPiI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ2hlY2sgd2hldGhl
ciB3ZSBoYXZlIHRvIHdyaXRlIGVuZCB0YWcgZm9yIGVtcHR5IGVsZW1lbnQuCisgICAgICAgIGlm
IChwYXJhbS0+aXNIVE1MRG9jdW1lbnQpIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSAiPiI7Cisg
ICAgICAgICAgICBjb25zdCBIVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPQorICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIGlm
IChodG1sRWxlbWVudC0+ZW5kVGFnUmVxdWlyZW1lbnQoKSA9PSBUYWdTdGF0dXNSZXF1aXJlZCkg
eworICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gd3JpdGUgZW5kIHRhZyB3aGVuIGl0IGlz
IHJlcXVpcmVkLgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiPC8iOworICAgICAgICAgICAg
ICAgIHJlc3VsdCArPSBlbGVtZW50LT5ub2RlTmFtZSgpOworICAgICAgICAgICAgICAgIHJlc3Vs
dCArPSAiPiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBGb3IgeG1sIGJhc2UgZG9jdW1lbnQuCisgICAgICAgICAgICByZXN1bHQgKz0gIiAvPiI7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgLy8gRG8gcG9zdCBhY3Rpb24gZm9yIGVuZCB0YWcuCisgICAg
cmVzdWx0ICs9IHBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZUVuZFRhZyhlbGVtZW50LCBwYXJhbSk7
CisgICAgLy8gU2F2ZSB0aGUgcmVzdWx0IHRvIGRhdGEgYnVmZmVyLgorICAgIHNhdmVIVE1MQ29u
dGVudFRvQnVmZmVyKHJlc3VsdCwgcGFyYW0pOworfQorCit2b2lkIFdlYlBhZ2VTZXJpYWxpemVy
SW1wbDo6YnVpbGRDb250ZW50Rm9yTm9kZShjb25zdCBOb2RlKiBub2RlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBh
cmFtKQoreworICAgIHN3aXRjaCAobm9kZS0+bm9kZVR5cGUoKSkgeworICAgIGNhc2UgTm9kZTo6
RUxFTUVOVF9OT0RFOgorICAgICAgICAvLyBQcm9jZXNzIG9wZW4gdGFnIG9mIGVsZW1lbnQuCisg
ICAgICAgIG9wZW5UYWdUb1N0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50Kj4obm9kZSks
IHBhcmFtKTsKKyAgICAgICAgLy8gV2FsayB0aHJvdWdoIHRoZSBjaGlsZHJlbiBub2RlcyBhbmQg
cHJvY2VzcyBpdC4KKyAgICAgICAgZm9yIChjb25zdCBOb2RlICpjaGlsZCA9IG5vZGUtPmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAg
ICBidWlsZENvbnRlbnRGb3JOb2RlKGNoaWxkLCBwYXJhbSk7CisgICAgICAgIC8vIFByb2Nlc3Mg
ZW5kIHRhZyBvZiBlbGVtZW50LgorICAgICAgICBlbmRUYWdUb1N0cmluZyhzdGF0aWNfY2FzdDxj
b25zdCBFbGVtZW50Kj4obm9kZSksIHBhcmFtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBO
b2RlOjpURVhUX05PREU6CisgICAgICAgIHNhdmVIVE1MQ29udGVudFRvQnVmZmVyKGNyZWF0ZU1h
cmt1cChub2RlKSwgcGFyYW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5vZGU6OkFUVFJJ
QlVURV9OT0RFOgorICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfTk9ERToKKyAgICBjYXNlIE5vZGU6
OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6CisgICAgICAgIC8vIFNob3VsZCBub3QgZXhpc3QuCisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICAvLyBEb2N1
bWVudCB0eXBlIG5vZGUgY2FuIGJlIGluIERPTT8KKyAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZ
UEVfTk9ERToKKyAgICAgICAgcGFyYW0tPmhhc0RvY3R5cGUgPSB0cnVlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIC8vIEZvciBvdGhlciB0eXBlIG5vZGUsIGNhbGwgZGVmYXVsdCBhY3Rpb24uCisg
ICAgICAgIHNhdmVIVE1MQ29udGVudFRvQnVmZmVyKGNyZWF0ZU1hcmt1cChub2RlKSwgcGFyYW0p
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK1dlYlBhZ2VTZXJpYWxpemVySW1wbDo6V2Vi
UGFnZVNlcmlhbGl6ZXJJbXBsKFdlYkZyYW1lKiBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlU2VyaWFsaXphdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlBhZ2VTZXJpYWxp
emVyQ2xpZW50KiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViVVJMPiYgbGlua3MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYg
bG9jYWxQYXRocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFdlYlN0cmluZyYgbG9jYWxEaXJlY3RvcnlOYW1lKQorICAgIDogbV9jbGllbnQoY2xp
ZW50KQorICAgICwgbV9yZWN1cnNpdmVTZXJpYWxpemF0aW9uKHJlY3Vyc2l2ZVNlcmlhbGl6YXRp
b24pCisgICAgLCBtX2ZyYW1lc0NvbGxlY3RlZChmYWxzZSkKKyAgICAsIG1fbG9jYWxEaXJlY3Rv
cnlOYW1lKGxvY2FsRGlyZWN0b3J5TmFtZSkKKyAgICAsIG1faHRtbEVudGl0aWVzKGZhbHNlKQor
ICAgICwgbV94bWxFbnRpdGllcyh0cnVlKQoreworICAgIC8vIE11c3Qgc3BlY2lmeSBhdmFpbGFi
bGUgd2ViZnJhbWUuCisgICAgQVNTRVJUKGZyYW1lKTsKKyAgICBtX3NwZWNpZmllZFdlYkZyYW1l
SW1wbCA9IHN0YXRpY19jYXN0PFdlYkZyYW1lSW1wbCo+KGZyYW1lKTsKKyAgICAvLyBNYWtlIHN1
cmUgd2UgaGF2ZSBub24gMCBjbGllbnQuCisgICAgQVNTRVJUKGNsaWVudCk7CisgICAgLy8gQnVp
bGQgbG9jYWwgcmVzb3VyY2VzIG1hcC4KKyAgICBBU1NFUlQobGlua3Muc2l6ZSgpID09IGxvY2Fs
UGF0aHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmtzLnNpemUoKTsg
aSsrKSB7CisgICAgICAgIEtVUkwgdXJsID0gbGlua3NbaV07CisgICAgICAgIEFTU0VSVCghbV9s
b2NhbExpbmtzLmNvbnRhaW5zKHVybC5zdHJpbmcoKSkpOworICAgICAgICBtX2xvY2FsTGlua3Mu
c2V0KHVybC5zdHJpbmcoKSwgbG9jYWxQYXRoc1tpXSk7CisgICAgfQorCisgICAgQVNTRVJUKCFt
X2RhdGFCdWZmZXIubGVuZ3RoKCkpOworfQorCit2b2lkIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6
Y29sbGVjdFRhcmdldEZyYW1lcygpCit7CisgICAgQVNTRVJUKCFtX2ZyYW1lc0NvbGxlY3RlZCk7
CisgICAgbV9mcmFtZXNDb2xsZWN0ZWQgPSB0cnVlOworCisgICAgLy8gRmlyc3QsIHByb2Nlc3Mg
bWFpbiBmcmFtZS4KKyAgICBtX2ZyYW1lcy5hcHBlbmQobV9zcGVjaWZpZWRXZWJGcmFtZUltcGwp
OworICAgIC8vIFJldHVybiBub3cgaWYgdXNlciBvbmx5IG5lZWRzIHRvIHNlcmlhbGl6ZSBzcGVj
aWZpZWQgZnJhbWUsIG5vdCBpbmNsdWRpbmcKKyAgICAvLyBhbGwgc3ViLWZyYW1lcy4KKyAgICBp
ZiAoIW1fcmVjdXJzaXZlU2VyaWFsaXphdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIC8vIENv
bGxlY3QgYWxsIGZyYW1lcyBpbnNpZGUgdGhlIHNwZWNpZmllZCBmcmFtZS4KKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PGludD4obV9mcmFtZXMuc2l6ZSgpKTsgKytpKSB7Cisg
ICAgICAgIFdlYkZyYW1lSW1wbCogY3VycmVudEZyYW1lID0gbV9mcmFtZXNbaV07CisgICAgICAg
IC8vIEdldCBjdXJyZW50IHVzaW5nIGRvY3VtZW50LgorICAgICAgICBEb2N1bWVudCogY3VycmVu
dERvYyA9IGN1cnJlbnRGcmFtZS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgLy8gR28g
dGhyb3VnaCBzdWItZnJhbWVzLgorICAgICAgICBSZWZQdHI8SFRNTEFsbENvbGxlY3Rpb24+IGFs
bCA9IGN1cnJlbnREb2MtPmFsbCgpOworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBhbGwtPmZp
cnN0SXRlbSgpOyBub2RlOyBub2RlID0gYWxsLT5uZXh0SXRlbSgpKSB7CisgICAgICAgICAgICBp
ZiAoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7
CisgICAgICAgICAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0KKyAgICAgICAgICAgICAgICBX
ZWJGcmFtZUltcGw6OmZyb21GcmFtZU93bmVyRWxlbWVudChlbGVtZW50KTsKKyAgICAgICAgICAg
IGlmICh3ZWJGcmFtZSkKKyAgICAgICAgICAgICAgICBtX2ZyYW1lcy5hcHBlbmQod2ViRnJhbWUp
OworICAgICAgICB9CisgICAgfQorfQorCitib29sIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6c2Vy
aWFsaXplKCkKK3sKKyAgICAvLyBDb2xsZWN0IHRhcmdldCBmcmFtZXMuCisgICAgaWYgKCFtX2Zy
YW1lc0NvbGxlY3RlZCkKKyAgICAgICAgY29sbGVjdFRhcmdldEZyYW1lcygpOworICAgIGJvb2wg
ZGlkU2VyaWFsaXphdGlvbiA9IGZhbHNlOworICAgIC8vIEdldCBLVVJMIGZvciBtYWluIGZyYW1l
LgorICAgIEtVUkwgbWFpblBhZ2VVUkwgPSBtX3NwZWNpZmllZFdlYkZyYW1lSW1wbC0+ZnJhbWUo
KS0+bG9hZGVyKCktPnVybCgpOworCisgICAgLy8gR28gdGhyb3VnaCBhbGwgZnJhbWVzIGZvciBz
ZXJpYWxpemluZyBET00gZm9yIHdob2xlIHBhZ2UsIGluY2x1ZGUKKyAgICAvLyBzdWItZnJhbWVz
LgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8aW50PihtX2ZyYW1lcy5zaXpl
KCkpOyArK2kpIHsKKyAgICAgICAgLy8gR2V0IGN1cnJlbnQgc2VyaWFsaXppbmcgZnJhbWUuCisg
ICAgICAgIFdlYkZyYW1lSW1wbCogY3VycmVudEZyYW1lID0gbV9mcmFtZXNbaV07CisgICAgICAg
IC8vIEdldCBjdXJyZW50IHVzaW5nIGRvY3VtZW50LgorICAgICAgICBEb2N1bWVudCogY3VycmVu
dERvYyA9IGN1cnJlbnRGcmFtZS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgLy8gR2V0
IGN1cnJlbnQgZnJhbWUncyBVUkwuCisgICAgICAgIGNvbnN0IEtVUkwmIGN1cnJlbnRGcmFtZVVS
TCA9IGN1cnJlbnRGcmFtZS0+ZnJhbWUoKS0+bG9hZGVyKCktPnVybCgpOworCisgICAgICAgIC8v
IENoZWNrIHdoZXRoZXIgd2UgaGF2ZSBkb25lIHRoaXMgZG9jdW1lbnQuCisgICAgICAgIGlmICht
X2xvY2FsTGlua3MuY29udGFpbnMoY3VycmVudEZyYW1lVVJMLnN0cmluZygpKSkgeworICAgICAg
ICAgICAgLy8gQSBuZXcgZG9jdW1lbnQsIHdlIHdpbGwgc2VyaWFsaXplIGl0LgorICAgICAgICAg
ICAgZGlkU2VyaWFsaXphdGlvbiA9IHRydWU7CisgICAgICAgICAgICAvLyBHZXQgdGFyZ2V0IGVu
Y29kaW5nIGZvciBjdXJyZW50IGRvY3VtZW50LgorICAgICAgICAgICAgU3RyaW5nIGVuY29kaW5n
ID0gY3VycmVudEZyYW1lLT5mcmFtZSgpLT5sb2FkZXIoKS0+ZW5jb2RpbmcoKTsKKyAgICAgICAg
ICAgIC8vIENyZWF0ZSB0aGUgdGV4dCBlbmNvZGluZyBvYmplY3Qgd2l0aCB0YXJnZXQgZW5jb2Rp
bmcuCisgICAgICAgICAgICBUZXh0RW5jb2RpbmcgdGV4dEVuY29kaW5nKGVuY29kaW5nKTsKKyAg
ICAgICAgICAgIC8vIENvbnN0cnVjdCBzZXJpYWxpemUgcGFyYW1ldGVyIGZvciBsYXRlIHByb2Nl
c3NpbmcgZG9jdW1lbnQuCisgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSBwYXJhbShjdXJy
ZW50RnJhbWVVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGlu
Zy5sZW5ndGgoKSA/IHRleHRFbmNvZGluZyA6IFVURjhFbmNvZGluZygpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudERvYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZVVSTCA9PSBtYWluUGFnZVVSTCA/IG1fbG9jYWxE
aXJlY3RvcnlOYW1lIDogIiIpOworCisgICAgICAgICAgICAvLyBQcm9jZXNzIGN1cnJlbnQgZG9j
dW1lbnQuCisgICAgICAgICAgICBFbGVtZW50KiByb290RWxlbWVudCA9IGN1cnJlbnREb2MtPmRv
Y3VtZW50RWxlbWVudCgpOworICAgICAgICAgICAgaWYgKHJvb3RFbGVtZW50KQorICAgICAgICAg
ICAgICAgIGJ1aWxkQ29udGVudEZvck5vZGUocm9vdEVsZW1lbnQsICZwYXJhbSk7CisKKyAgICAg
ICAgICAgIC8vIEZsdXNoIHRoZSByZW1haW5kZXIgZGF0YSBhbmQgZmluaXNoIHNlcmlhbGl6aW5n
IGN1cnJlbnQgZnJhbWUuCisgICAgICAgICAgICBlbmNvZGVBbmRGbHVzaEJ1ZmZlcihXZWJQYWdl
U2VyaWFsaXplckNsaWVudDo6Q3VycmVudEZyYW1lSXNGaW5pc2hlZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZwYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gV2UgaGF2ZSBkb25lIGNhbGwgZnJh
bWVzLCBzbyB3ZSBzZW5kIG1lc3NhZ2UgdG8gZW1iZWRkZXIgdG8gdGVsbCBpdCB0aGF0CisgICAg
Ly8gZnJhbWVzIGFyZSBmaW5pc2hlZCBzZXJpYWxpemluZy4KKyAgICBBU1NFUlQoIW1fZGF0YUJ1
ZmZlci5sZW5ndGgoKSk7CisgICAgbV9jbGllbnQtPmRpZFNlcmlhbGl6ZURhdGFGb3JGcmFtZShL
VVJMKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDU3RyaW5n
KCIiLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlBhZ2VT
ZXJpYWxpemVyQ2xpZW50OjpBbGxGcmFtZXNBcmVGaW5pc2hlZCk7CisgICAgcmV0dXJuIGRpZFNl
cmlhbGl6YXRpb247Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmggYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjRkOGI4YjMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlBhZ2VTZXJpYWxpemVySW1wbC5oCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQYWdl
U2VyaWFsaXplckltcGxfaAorI2RlZmluZSBXZWJQYWdlU2VyaWFsaXplckltcGxfaAorCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCisjaW5j
bHVkZSAiU3RyaW5nSGFzaC5oIgorCisjaW5jbHVkZSAiV2ViRW50aXRpZXMuaCIKKyNpbmNsdWRl
ICJXZWJQYWdlU2VyaWFsaXplci5oIgorI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyQ2xpZW50
LmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCisKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBFbGVtZW50OworY2xhc3MgTm9kZTsK
K2NsYXNzIFN0cmluZzsKK2NsYXNzIFRleHRFbmNvZGluZzsKK30KKworbmFtZXNwYWNlIFdlYktp
dCB7CitjbGFzcyBXZWJGcmFtZUltcGw7CisKKy8vIEdldCBodG1sIGRhdGEgYnkgc2VyaWFsaXpp
bmcgYWxsIGZyYW1lcyBvZiBjdXJyZW50IHBhZ2Ugd2l0aCBsaXN0cworLy8gd2hpY2ggY29udGFp
biBhbGwgcmVzb3VyY2UgbGlua3MgdGhhdCBoYXZlIGxvY2FsIGNvcHkuCisvLyBjb250YWluIGFs
bCBzYXZlZCBhdXhpbGlhcnkgZmlsZXMgaW5jbHVkZWQgYWxsIHN1YiBmcmFtZXMgYW5kIHJlc291
cmNlcy4KKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBmaW5kIG91dCBhbGwgZnJhbWVzIGFuZCBzZXJp
YWxpemUgdGhlbSB0byBIVE1MIGRhdGEuCisvLyBXZSBoYXZlIGEgZGF0YSBidWZmZXIgdG8gdGVt
cG9yYXJ5IHNhdmluZyBnZW5lcmF0ZWQgaHRtbCBkYXRhLiBXZSB3aWxsCisvLyBzZXF1ZW50aWFs
bHkgY2FsbCBXZWJWaWV3RGVsZWdhdGU6OlNlbmRTZXJpYWxpemVkSHRtbERhdGEgb25jZSB0aGUg
ZGF0YQorLy8gYnVmZmVyIGlzIGZ1bGwuIFNlZSBjb21tZW50cyBvZiBXZWJWaWV3RGVsZWdhdGU6
OlNlbmRTZXJpYWxpemVkSHRtbERhdGEKKy8vIGZvciBnZXR0aW5nIG1vcmUgaW5mb3JtYXRpb24u
CitjbGFzcyBXZWJQYWdlU2VyaWFsaXplckltcGwgeworcHVibGljOgorICAgIC8vIERvIHNlcmlh
bGl6YXRpb24gYWN0aW9uLiBSZXR1cm4gZmFsc2UgbWVhbnMgbm8gYXZhaWxhYmxlIGZyYW1lIGhh
cyBiZWVuCisgICAgLy8gc2VyaWFsaXplZCwgb3RoZXJ3aXNlIHJldHVybiB0cnVlLgorICAgIGJv
b2wgc2VyaWFsaXplKCk7CisKKyAgICAvLyBUaGUgcGFyYW1ldGVyIHNwZWNpZmllcyB3aGljaCBm
cmFtZSBuZWVkIHRvIGJlIHNlcmlhbGl6ZWQuCisgICAgLy8gVGhlIHBhcmFtZXRlciByZWN1cnNp
dmVfc2VyaWFsaXphdGlvbiBzcGVjaWZpZXMgd2hldGhlciB3ZSBuZWVkIHRvCisgICAgLy8gc2Vy
aWFsaXplIGFsbCBzdWIgZnJhbWVzIG9mIHRoZSBzcGVjaWZpZWQgZnJhbWUgb3Igbm90LgorICAg
IC8vIFRoZSBwYXJhbWV0ZXIgZGVsZWdhdGUgc3BlY2lmaWVzIHRoZSBwb2ludGVyIG9mIGludGVy
ZmFjZQorICAgIC8vIERvbVNlcmlhbGl6ZXJEZWxlZ2F0ZSBwcm92aWRlIHNpbmsgaW50ZXJmYWNl
IHdoaWNoIGNhbiByZWNlaXZlIHRoZQorICAgIC8vIGluZGl2aWR1YWwgY2h1bmtzIG9mIGRhdGEg
dG8gYmUgc2F2ZWQuCisgICAgLy8gVGhlIHBhcmFtZXRlciBsaW5rcyBjb250YWluIG9yaWdpbmFs
IFVSTHMgb2YgYWxsIHNhdmVkIGxpbmtzLgorICAgIC8vIFRoZSBwYXJhbWV0ZXIgbG9jYWxfcGF0
aHMgY29udGFpbiBjb3JyZXNwb25kaW5nIGxvY2FsIGZpbGUgcGF0aHMgb2YgYWxsCisgICAgLy8g
c2F2ZWQgbGlua3MsIHdoaWNoIG1hdGNoZWQgd2l0aCB2ZWN0b3I6bGlua3Mgb25lIGJ5IG9uZS4K
KyAgICAvLyBUaGUgcGFyYW1ldGVyIGxvY2FsX2RpcmVjdG9yeV9uYW1lIGlzIHJlbGF0aXZlIHBh
dGggb2YgZGlyZWN0b3J5IHdoaWNoCisgICAgLy8gY29udGFpbiBhbGwgc2F2ZWQgYXV4aWxpYXJ5
IGZpbGVzIGluY2x1ZGVkIGFsbCBzdWIgZnJhbWVzIGFuZCByZXNvdXJjZXMuCisgICAgV2ViUGFn
ZVNlcmlhbGl6ZXJJbXBsKFdlYkZyYW1lKiBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCByZWN1cnNpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlBhZ2VTZXJp
YWxpemVyQ2xpZW50KiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdl
YlZlY3RvcjxXZWJVUkw+JiBsaW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
V2ViVmVjdG9yPFdlYlN0cmluZz4mIGxvY2FsUGF0aHMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFdlYlN0cmluZyYgbG9jYWxEaXJlY3RvcnlOYW1lKTsKKworcHJpdmF0ZToKKyAg
ICAvLyBTcGVjaWZpZWQgZnJhbWUgd2hpY2ggbmVlZCB0byBiZSBzZXJpYWxpemVkOworICAgIFdl
YkZyYW1lSW1wbCogbV9zcGVjaWZpZWRXZWJGcmFtZUltcGw7CisgICAgLy8gUG9pbnRlciBvZiBX
ZWJQYWdlU2VyaWFsaXplckNsaWVudAorICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KiBtX2Ns
aWVudDsKKyAgICAvLyBUaGlzIGhhc2ggbWFwIGlzIHVzZWQgdG8gbWFwIHJlc291cmNlIFVSTCBv
ZiBvcmlnaW5hbCBsaW5rIHRvIGl0cyBsb2NhbAorICAgIC8vIGZpbGUgcGF0aC4KKyAgICB0eXBl
ZGVmIEhhc2hNYXA8V2ViQ29yZTo6U3RyaW5nLCBXZWJDb3JlOjpTdHJpbmc+IExpbmtMb2NhbFBh
dGhNYXA7CisgICAgLy8gbG9jYWxfbGlua3NfIGluY2x1ZGUgYWxsIHBhaXIgb2YgbG9jYWwgcmVz
b3VyY2UgcGF0aCBhbmQgY29ycmVzcG9uZGluZworICAgIC8vIG9yaWdpbmFsIGxpbmsuCisgICAg
TGlua0xvY2FsUGF0aE1hcCBtX2xvY2FsTGlua3M7CisgICAgLy8gRGF0YSBidWZmZXIgZm9yIHNh
dmluZyByZXN1bHQgb2Ygc2VyaWFsaXplZCBET00gZGF0YS4KKyAgICBXZWJDb3JlOjpTdHJpbmdC
dWlsZGVyIG1fZGF0YUJ1ZmZlcjsKKyAgICAvLyBQYXNzaW5nIHRydWUgdG8gcmVjdXJzaXZlX3Nl
cmlhbGl6YXRpb25fIGluZGljYXRlcyB3ZSB3aWxsIHNlcmlhbGl6ZSBub3QKKyAgICAvLyBvbmx5
IHRoZSBzcGVjaWZpZWQgZnJhbWUgYnV0IGFsc28gYWxsIHN1Yi1mcmFtZXMgaW4gdGhlIHNwZWNp
ZmljIGZyYW1lLgorICAgIC8vIE90aGVyd2lzZSB3ZSBvbmx5IHNlcmlhbGl6ZSB0aGUgc3BlY2lm
aWVkIGZyYW1lIGV4Y2x1ZGVkIGFsbCBzdWItZnJhbWVzLgorICAgIGJvb2wgbV9yZWN1cnNpdmVT
ZXJpYWxpemF0aW9uOworICAgIC8vIEZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgd2UgaGF2ZSBjb2xs
ZWN0ZWQgYWxsIGZyYW1lcyB3aGljaCBuZWVkIHRvIGJlCisgICAgLy8gc2VyaWFsaXplZCBvciBu
b3Q7CisgICAgYm9vbCBtX2ZyYW1lc0NvbGxlY3RlZDsKKyAgICAvLyBMb2NhbCBkaXJlY3Rvcnkg
bmFtZSBvZiBhbGwgbG9jYWwgcmVzb3VyY2UgZmlsZXMuCisgICAgV2ViQ29yZTo6U3RyaW5nIG1f
bG9jYWxEaXJlY3RvcnlOYW1lOworICAgIC8vIFZlY3RvciBmb3Igc2F2aW5nIGFsbCBmcmFtZXMg
d2hpY2ggbmVlZCB0byBiZSBzZXJpYWxpemVkLgorICAgIFZlY3RvcjxXZWJGcmFtZUltcGwqPiBt
X2ZyYW1lczsKKworICAgIC8vIFdlYiBlbnRpdGllcyBjb252ZXJzaW9uIG1hcHMuCisgICAgV2Vi
RW50aXRpZXMgbV9odG1sRW50aXRpZXM7CisgICAgV2ViRW50aXRpZXMgbV94bWxFbnRpdGllczsK
KworICAgIHN0cnVjdCBTZXJpYWxpemVEb21QYXJhbSB7CisgICAgICAgIC8vIEZyYW1lIFVSTCBv
ZiBjdXJyZW50IHByb2Nlc3NpbmcgZG9jdW1lbnQgcHJlc2VudGVkIGJ5IEdVUkwKKyAgICAgICAg
Y29uc3QgV2ViQ29yZTo6S1VSTCYgY3VycmVudEZyYW1lVVJMOworICAgICAgICAvLyBDdXJyZW50
IHVzaW5nIHRleHQgZW5jb2Rpbmcgb2JqZWN0LgorICAgICAgICBjb25zdCBXZWJDb3JlOjpUZXh0
RW5jb2RpbmcmIHRleHRFbmNvZGluZzsKKworICAgICAgICAvLyBEb2N1bWVudCBvYmplY3Qgb2Yg
Y3VycmVudCBmcmFtZS4KKyAgICAgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGRvYzsKKyAgICAgICAg
Ly8gTG9jYWwgZGlyZWN0b3J5IG5hbWUgb2YgYWxsIGxvY2FsIHJlc291cmNlIGZpbGVzLgorICAg
ICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGRpcmVjdG9yeU5hbWU7CisKKyAgICAgICAgLy8g
RmxhZyBpbmRpY2F0ZXMgY3VycmVudCBkb2MgaXMgaHRtbCBkb2N1bWVudCBvciBub3QuIEl0J3Mg
YSBjYWNoZSB2YWx1ZQorICAgICAgICAvLyBvZiBEb2N1bWVudC5pc0hUTUxEb2N1bWVudCgpLgor
ICAgICAgICBib29sIGlzSFRNTERvY3VtZW50OworICAgICAgICAvLyBGbGFnIHdoaWNoIGluZGlj
YXRlIHdoZXRoZXIgd2UgaGF2ZSBtZXQgZG9jdW1lbnQgdHlwZSBkZWNsYXJhdGlvbi4KKyAgICAg
ICAgYm9vbCBoYXNEb2N0eXBlOworICAgICAgICAvLyBGbGFnIHdoaWNoIGluZGljYXRlIHdoZXRo
ZXIgd2lsbCBwcm9jZXNzIG1ldGEgaXNzdWUuCisgICAgICAgIGJvb2wgaGFzQ2hlY2tlZE1ldGE7
CisgICAgICAgIC8vIFRoaXMgbWV0YSBlbGVtZW50IG5lZWQgdG8gYmUgc2tpcHBlZCB3aGVuIHNl
cmlhbGl6aW5nIERPTS4KKyAgICAgICAgY29uc3QgV2ViQ29yZTo6RWxlbWVudCogc2tpcE1ldGFF
bGVtZW50OworICAgICAgICAvLyBGbGFnIGluZGljYXRlcyB3ZSBhcmUgaW4gc2NyaXB0IG9yIHN0
eWxlIHRhZy4KKyAgICAgICAgYm9vbCBpc0luU2NyaXB0T3JTdHlsZVRhZzsKKyAgICAgICAgLy8g
RmxhZyBpbmRpY2F0ZXMgd2hldGhlciB3ZSBoYXZlIHdyaXR0ZW4geG1sIGRvY3VtZW50IGRlY2xh
cmF0aW9uLgorICAgICAgICAvLyBJdCBpcyBvbmx5IHVzZWQgaW4geG1sIGRvY3VtZW50CisgICAg
ICAgIGJvb2wgaGFzRG9jRGVjbGFyYXRpb247CisgICAgICAgIC8vIEZsYWcgaW5kaWNhdGVzIHdo
ZXRoZXIgd2UgaGF2ZSBhZGRlZCBhZGRpdGlvbmFsIGNvbnRlbnRzIGJlZm9yZSBlbmQgdGFnLgor
ICAgICAgICAvLyBUaGlzIGZsYWcgd2lsbCBiZSByZS1hc3NpZ25lZCBpbiBlYWNoIGNhbGwgb2Yg
ZnVuY3Rpb24KKyAgICAgICAgLy8gUG9zdEFjdGlvbkFmdGVyU2VyaWFsaXplT3BlblRhZyBhbmQg
aXQgY291bGQgYmUgY2hhbmdlZCBpbiBmdW5jdGlvbgorICAgICAgICAvLyBQcmVBY3Rpb25CZWZv
cmVTZXJpYWxpemVFbmRUYWcgaWYgdGhlIGZ1bmN0aW9uIGFkZHMgbmV3IGNvbnRlbnRzIGludG8K
KyAgICAgICAgLy8gc2VyaWFsaXphdGlvbiBzdHJlYW0uCisgICAgICAgIGJvb2wgaGFzQWRkZWRD
b250ZW50c0JlZm9yZUVuZDsKKworICAgICAgICAvLyBDb25zdHJ1Y3Rvci4KKyAgICAgICAgU2Vy
aWFsaXplRG9tUGFyYW0oY29uc3QgV2ViQ29yZTo6S1VSTCYgY3VycmVudEZyYW1lVVJMLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpUZXh0RW5jb2RpbmcmIHRleHRF
bmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGRv
YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBkaXJl
Y3RvcnlOYW1lKTsKKyAgICB9OworCisgICAgLy8gQ29sbGVjdCBhbGwgdGFyZ2V0IGZyYW1lcyB3
aGljaCBuZWVkIHRvIGJlIHNlcmlhbGl6ZWQuCisgICAgdm9pZCBjb2xsZWN0VGFyZ2V0RnJhbWVz
KCk7CisgICAgLy8gQmVmb3JlIHdlIGJlZ2luIHNlcmlhbGl6aW5nIG9wZW4gdGFnIG9mIGEgZWxl
bWVudCwgd2UgZ2l2ZSB0aGUgdGFyZ2V0CisgICAgLy8gZWxlbWVudCBhIGNoYW5jZSB0byBkbyBz
b21lIHdvcmsgcHJpb3IgdG8gYWRkIHNvbWUgYWRkaXRpb25hbCBkYXRhLgorICAgIFdlYkNvcmU6
OlN0cmluZyBwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVPcGVuVGFnKGNvbnN0IFdlYkNvcmU6OkVs
ZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIG5lZWRTa2lwKTsKKyAgICAv
LyBBZnRlciB3ZSBmaW5pc2ggc2VyaWFsaXppbmcgb3BlbiB0YWcgb2YgYSBlbGVtZW50LCB3ZSBn
aXZlIHRoZSB0YXJnZXQKKyAgICAvLyBlbGVtZW50IGEgY2hhbmNlIHRvIGRvIHNvbWUgcG9zdCB3
b3JrIHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgZGF0YS4KKyAgICBXZWJDb3JlOjpTdHJpbmcgcG9z
dEFjdGlvbkFmdGVyU2VyaWFsaXplT3BlblRhZyhjb25zdCBXZWJDb3JlOjpFbGVtZW50KiBlbGVt
ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSk7CisgICAgLy8gQmVmb3JlIHdlIGJlZ2luIHNlcmlh
bGl6aW5nIGVuZCB0YWcgb2YgYSBlbGVtZW50LCB3ZSBnaXZlIHRoZSB0YXJnZXQKKyAgICAvLyBl
bGVtZW50IGEgY2hhbmNlIHRvIGRvIHNvbWUgd29yayBwcmlvciB0byBhZGQgc29tZSBhZGRpdGlv
bmFsIGRhdGEuCisgICAgV2ViQ29yZTo6U3RyaW5nIHByZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZUVu
ZFRhZyhjb25zdCBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFt
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCogbmVlZFNraXApOworICAgIC8vIEFmdGVyIHdlIGZpbmlzaCBzZXJpYWxpemluZyBlbmQgdGFn
IG9mIGEgZWxlbWVudCwgd2UgZ2l2ZSB0aGUgdGFyZ2V0CisgICAgLy8gZWxlbWVudCBhIGNoYW5j
ZSB0byBkbyBzb21lIHBvc3Qgd29yayB0byBhZGQgc29tZSBhZGRpdGlvbmFsIGRhdGEuCisgICAg
V2ViQ29yZTo6U3RyaW5nIHBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZUVuZFRhZyhjb25zdCBXZWJD
b3JlOjpFbGVtZW50KiBlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKTsKKyAgICAvLyBTYXZl
IGdlbmVyYXRlZCBodG1sIGNvbnRlbnQgdG8gZGF0YSBidWZmZXIuCisgICAgdm9pZCBzYXZlSFRN
TENvbnRlbnRUb0J1ZmZlcihjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGNvbnRlbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pOworICAg
IC8vIEZsdXNoZXMgdGhlIGNvbnRlbnQgYnVmZmVyIGJ5IGVuY29kaW5nIGFuZCBzZW5kaW5nIHRo
ZSBjb250ZW50IHRvIHRoZQorICAgIC8vIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LiBDb250ZW50
IGlzIG5vdCBmbHVzaGVkIGlmIHRoZSBidWZmZXIgaXMgbm90IGZ1bGwKKyAgICAvLyB1bmxlc3Mg
Zm9yY2UgaXMgMS4KKyAgICB2b2lkIGVuY29kZUFuZEZsdXNoQnVmZmVyKFdlYlBhZ2VTZXJpYWxp
emVyQ2xpZW50OjpQYWdlU2VyaWFsaXphdGlvblN0YXR1cyBzdGF0dXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGZvcmNlKTsKKyAgICAvLyBTZXJpYWxpemUgb3BlbiB0YWcg
b2YgYW4gc3BlY2lmaWVkIGVsZW1lbnQuCisgICAgdm9pZCBvcGVuVGFnVG9TdHJpbmcoY29uc3Qg
V2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBTZXJp
YWxpemVEb21QYXJhbSogcGFyYW0pOworICAgIC8vIFNlcmlhbGl6ZSBlbmQgdGFnIG9mIGFuIHNw
ZWNpZmllZCBlbGVtZW50LgorICAgIHZvaWQgZW5kVGFnVG9TdHJpbmcoY29uc3QgV2ViQ29yZTo6
RWxlbWVudCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZURvbVBh
cmFtKiBwYXJhbSk7CisgICAgLy8gQnVpbGQgY29udGVudCBmb3IgYSBzcGVjaWZpZWQgbm9kZQor
ICAgIHZvaWQgYnVpbGRDb250ZW50Rm9yTm9kZShjb25zdCBXZWJDb3JlOjpOb2RlKiBub2RlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTdHJpbmcuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdHJp
bmcuY3BwCmluZGV4IGY0NWUwNWYuLjUzMTM5MDcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViU3RyaW5nLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlN0cmluZy5j
cHAKQEAgLTEyMSw2ICsxMjEsMTIgQEAgV2ViU3RyaW5nOjpvcGVyYXRvciBXZWJDb3JlOjpBdG9t
aWNTdHJpbmcoKSBjb25zdAogICAgIHJldHVybiBXZWJDb3JlOjpBdG9taWNTdHJpbmcoc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6U3RyaW5nSW1wbCAqPihtX3ByaXZhdGUpKTsKIH0KIAorV2ViU3RyaW5n
JiBXZWJTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBjaGFyKiBkYXRhKQoreworICAgIGFzc2lnbihX
ZWJDb3JlOjpTdHJpbmc6OmZyb21VVEY4KGRhdGEpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisK
IHZvaWQgV2ViU3RyaW5nOjphc3NpZ24oV2ViU3RyaW5nUHJpdmF0ZSogcCkKIHsKICAgICAvLyBU
YWtlIGNhcmUgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG1fcHJpdmF0ZSA9PSBwCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44834</attachid>
            <date>2009-12-14 19:26:52 -0800</date>
            <delta_ts>2009-12-15 10:43:50 -0800</delta_ts>
            <desc>Added WebPageSerializer to WebKit API.</desc>
            <filename>bug-31737-20091214222651.patch</filename>
            <type>text/plain</type>
            <size>100149</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjJjZDdhMS4uYmNlM2Q4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAwOS0xMi0wNyAgWWFhciBTY2huaXRt
YW4gIDx5YWFyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBXZWJQYWdlU2VyaWFsaXplciB0byBXZWJLaXQgQVBJLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTczNwor
CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmNwcDogQWRkZWQgbWV0aG9k
cyB0byBtYWtlIFN0cmluZ0J1aWxkZXIgZXZlbiBtb3JlIHVzZWZ1bCBmb3IgbGFyZ2Ugc2NhbGUg
c3RyaW5nIGNvbmNhdGVuYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdCdWlsZGVyOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdCdWlsZGVyOjpsZW5ndGgpOgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5oOgorCiAyMDA5LTEyLTA3ICBHeXV5b3Vu
ZyBLaW0gIDxneXV5b3VuZ0BnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKaW5kZXggYzIxZTM2
Ni4uM2UzNDk4MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxk
ZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmNwcApAQCAt
OTUsNCArOTUsMTcgQEAgU3RyaW5nIFN0cmluZ0J1aWxkZXI6OnRvU3RyaW5nKCkgY29uc3QKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCit2b2lkIFN0cmluZ0J1aWxkZXI6OmNsZWFyKCkKK3sKKyAg
ICBtX3RvdGFsTGVuZ3RoID0gVUlOVF9NQVg7CisgICAgbV9zdHJpbmdzLmNsZWFyKCk7Cit9CisK
K3Vuc2lnbmVkIFN0cmluZ0J1aWxkZXI6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgaWYgKG1fdG90
YWxMZW5ndGggPT0gVUlOVF9NQVgpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3Rv
dGFsTGVuZ3RoOworfQorCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3Ry
aW5nQnVpbGRlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxkZXIuaAppbmRl
eCA4ZDc2YjljLi43ZjcyZmJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3Ry
aW5nQnVpbGRlci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmgK
QEAgLTQyLDYgKzQyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGFwcGVu
ZChjb25zdCBTdHJpbmcmKTsKICAgICAgICAgdm9pZCBhcHBlbmQoVUNoYXIpOwogICAgICAgICB2
b2lkIGFwcGVuZChjaGFyKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgY2xlYXIoKTsKKyAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAKICAgICAgICAgU3RyaW5nIHRvU3RyaW5nKCkg
Y29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDU3OTdkM2UuLjY3MzRkNGQgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEyMSBAQAorMjAwOS0xMi0wNyAgWWFhciBTY2huaXRtYW4gIDx5YWFyQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRlZCBXZWJQYWdlU2VyaWFsaXplciB0byBXZWJLaXQgQVBJIGFuZCBlbnJpY2hlZCB0aGUg
V2ViTm9kZSBoaWVyYXJjaHkgdG8gc3VwcG9ydAorICAgICAgICBkb3duc3RyZWFtIHVuaXQtdGVz
dGluZyBvZiBzZXJpYWxpemF0aW9uLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zMTczNworCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAg
KiBwdWJsaWMvV2ViRG9jdW1lbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkRvY3Vt
ZW50OjpXZWJEb2N1bWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRvY3VtZW50OjpvcGVyYXRv
cj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6YXNzaWduKToKKyAgICAgICAgKiBw
dWJsaWMvV2ViRWxlbWVudC5oOgorICAgICAgICAqIHB1YmxpYy9XZWJGb3JtRWxlbWVudC5oOgor
ICAgICAgICAoV2ViS2l0OjpXZWJGb3JtRWxlbWVudDo6b3BlcmF0b3I9KToKKyAgICAgICAgKiBw
dWJsaWMvV2ViRnJhbWUuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViTm9kZS5oOgorICAgICAgICAo
V2ViS2l0OjpXZWJOb2RlOjopOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjp0b0NvbnN0RWxl
bWVudCk6CisgICAgICAgICogcHVibGljL1dlYk5vZGVDb2xsZWN0aW9uLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJOb2RlQ29sbGVjdGlvbjo6fldlYk5vZGVDb2xsZWN0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTm9kZUNvbGxlY3Rpb246OldlYk5vZGVDb2xsZWN0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTm9kZUNvbGxlY3Rpb246Om9wZXJhdG9yPSk6CisgICAgICAgICog
cHVibGljL1dlYk5vZGVMaXN0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlTGlz
dDo6fldlYk5vZGVMaXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZUxpc3Q6OldlYk5vZGVM
aXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZUxpc3Q6Om9wZXJhdG9yPSk6CisgICAgICAg
ICogcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9X
ZWJQYWdlU2VyaWFsaXplckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVNlcmlhbGl6ZXJDbGllbnQ6Oik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVy
Q2xpZW50OjpXZWJQYWdlU2VyaWFsaXplckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VTZXJpYWxpemVyQ2xpZW50Ojp+V2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQpOgorICAgICAgICAq
IHB1YmxpYy9XZWJTdHJpbmcuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViVmlldy5oOgorICAgICAg
ICAqIHNyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcDoKKyAgICAgICAgKiBzcmMvRE9NVXRpbGl0
aWVzUHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OmVsZW1lbnRIYXNMZWdhbExpbmtBdHRy
aWJ1dGUpOgorICAgICAgICAqIHNyYy9ET01VdGlsaXRpZXNQcml2YXRlLmg6CisgICAgICAgICog
c3JjL1dlYkRvY3VtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkRvY3VtZW50
OjpXZWJEb2N1bWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRvY3VtZW50OjpvcGVyYXRvcj0p
OgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRy
PERvY3VtZW50Pik6CisgICAgICAgIChXZWJLaXQ6OldlYkRvY3VtZW50OjpmcmFtZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkRvY3VtZW50Ojppc0hUTUxEb2N1bWVudCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkRvY3VtZW50OjpiYXNlVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViRG9jdW1lbnQ6
OmJvZHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6aGVhZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkRvY3VtZW50OjphbGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJEb2N1bWVudDo6
Y29tcGxldGVVUkwpOgorICAgICAgICAqIHNyYy9XZWJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViRWxlbWVudDo6aGFzVGFnTmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkVsZW1l
bnQ6Omhhc0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkVsZW1lbnQ6OmdldEF0dHJp
YnV0ZSk6CisgICAgICAgICogc3JjL1dlYkVudGl0aWVzLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OnBvcHVsYXRlTWFwKToKKyAgICAgICAgKFdlYktpdDo6KToKKyAgICAgICAgKFdlYktp
dDo6V2ViRW50aXRpZXM6OldlYkVudGl0aWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViRW50aXRp
ZXM6OmVudGl0eU5hbWVCeUNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJFbnRpdGllczo6Y29u
dmVydEVudGl0aWVzSW5TdHJpbmcpOgorICAgICAgICAqIHNyYy9XZWJFbnRpdGllcy5oOiBBZGRl
ZC4KKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
RnJhbWU6OmZyb21GcmFtZU93bmVyRWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
SW1wbDo6ZW5jb2RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmRvY3VtZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpmcm9tRnJhbWVPd25lckVsZW1lbnQp
OgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViTm9kZS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6Om5vZGVUeXBlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTm9kZTo6bm9kZVZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6ZG9jdW1l
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjpmaXJzdENoaWxkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViTm9kZTo6bGFzdENoaWxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6cHJl
dmlvdXNTaWJsaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6bmV4dFNpYmxpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjpoYXNDaGlsZE5vZGVzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTm9kZTo6Y2hpbGROb2Rlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6OmNyZWF0
ZU1hcmt1cCk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6OmlzVGV4dE5vZGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJOb2RlOjppc0VsZW1lbnROb2RlKToKKyAgICAgICAgKiBzcmMvV2ViTm9k
ZUNvbGxlY3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZUNvbGxlY3Rp
b246OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZUNvbGxlY3Rpb246OmFzc2lnbik6
CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVDb2xsZWN0aW9uOjpXZWJOb2RlQ29sbGVjdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVDb2xsZWN0aW9uOjpsZW5ndGgpOgorICAgICAgICAo
V2ViS2l0OjpXZWJOb2RlQ29sbGVjdGlvbjo6bmV4dEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJOb2RlQ29sbGVjdGlvbjo6Zmlyc3RJdGVtKToKKyAgICAgICAgKiBzcmMvV2ViTm9kZUxpc3Qu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZUxpc3Q6OnJlc2V0KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTm9kZUxpc3Q6OmFzc2lnbik6CisgICAgICAgIChXZWJLaXQ6OldlYk5v
ZGVMaXN0OjpXZWJOb2RlTGlzdCk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGVMaXN0OjpsZW5n
dGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlTGlzdDo6aXRlbSk6CisgICAgICAgICogc3Jj
L1dlYlBhZ2VTZXJpYWxpemVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VT
ZXJpYWxpemVyOjpzZXJpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXpl
cjo6Z2VuZXJhdGVNZXRhQ2hhcnNldERlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlTWFya09mVGhlV2ViRGVjbGFyYXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVCYXNlVGFnRGVjbGFyYXRpb24p
OgorICAgICAgICAqIHNyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpTZXJpYWxpemVEb21QYXJhbTo6U2Vy
aWFsaXplRG9tUGFyYW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6
OnByZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZU9wZW5UYWcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlU2VyaWFsaXplckltcGw6OnBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZU9wZW5UYWcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6OnByZUFjdGlvbkJlZm9yZVNlcmlh
bGl6ZUVuZFRhZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6cG9z
dEFjdGlvbkFmdGVyU2VyaWFsaXplRW5kVGFnKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNl
cmlhbGl6ZXJJbXBsOjpzYXZlSFRNTENvbnRlbnRUb0J1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6b3BlblRhZ1RvU3RyaW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjplbmRUYWdUb1N0cmluZyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6YnVpbGRDb250ZW50Rm9yTm9kZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpjb2xsZWN0VGFyZ2V0RnJh
bWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpzZXJpYWxpemUp
OgorICAgICAgICAqIHNyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuaDogQWRkZWQuCisgICAgICAg
ICogc3JjL1dlYlN0cmluZy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6V2ViU3Ry
aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvcj0pOgorICAgICAgICAq
IHNyYy9XZWJWaWV3SW1wbC5jcHA6CisKIDIwMDktMTItMDcgIE1pa2hhaWwgTmFnYW5vdiAgPG1u
YWdhbm92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFu
LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cAppbmRleCBkN2JkMzBkLi44M2M5ZmJkIDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAt
MTAyLDYgKzEwMiw3IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJEZXZUb29sc0FnZW50
Q2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRGV2VG9vbHNGcm9udGVuZC5o
JywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkRldlRvb2xzRnJvbnRlbmRDbGllbnQuaCcs
CisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJEb2N1bWVudC5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYkRyYWdEYXRhLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRWRp
dGluZ0FjdGlvbi5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkVsZW1lbnQuaCcsCkBA
IC0xMjcsMTAgKzEyOCwxNCBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWltZVJlZ2lz
dHJ5LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTmF2aWdhdGlvblR5cGUuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJOb2RlLmgnLAorICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViTm9kZUNvbGxlY3Rpb24uaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJOb2Rl
TGlzdC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk5vbkNvcHlhYmxlLmgnLAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViTm90aWZpY2F0aW9uLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyLmgnLAogICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrLmgnLAorICAgICAgICAgICAg
ICAgICdwdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaCcsCisgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJQYWdlU2VyaWFsaXplckNsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YlBhc3N3b3JkQXV0b2NvbXBsZXRlTGlzdGVuZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJQYXNzd29yZEZvcm1EYXRhLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUGx1
Z2luLmgnLApAQCAtMjQyLDggKzI0NywxMSBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViRGF0
YWJhc2UuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkRhdGFTb3VyY2VJbXBsLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJEYXRhU291cmNlSW1wbC5oJywKKyAgICAgICAgICAg
ICAgICAnc3JjL1dlYkRvY3VtZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJEcmFn
RGF0YS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRWxlbWVudC5jcHAnLAorICAgICAg
ICAgICAgICAgICdzcmMvV2ViRW50aXRpZXMuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dl
YkVudGl0aWVzLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRmlsZUNob29zZXJDb21wbGV0
aW9uSW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRmlsZUNob29zZXJDb21wbGV0
aW9uSW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZvbnRDYWNoZS5jcHAnLApAQCAt
MjYyLDcgKzI3MCwxMiBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFQbGF5ZXJDbGll
bnRJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYVBsYXllckNsaWVudElt
cGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJOb2RlLmNwcCcsCisgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJOb2RlQ29sbGVjdGlvbi5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2Vi
Tm9kZUxpc3QuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYk5vdGlmaWNhdGlvbi5jcHAn
LAorICAgICAgICAgICAgICAgICdzcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwJywKKyAgICAgICAg
ICAgICAgICAnc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5jcHAnLAorICAgICAgICAgICAgICAg
ICdzcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
UGFzc3dvcmRGb3JtRGF0YS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViUGFzc3dvcmRG
b3JtVXRpbHMuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlBhc3N3b3JkRm9ybVV0aWxz
LmgnLApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEb2N1bWVudC5oIGIv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEb2N1bWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjU4YmYxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkRvY3VtZW50LmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRG9jdW1l
bnRfaAorI2RlZmluZSBXZWJEb2N1bWVudF9oCisKKyNpbmNsdWRlICJXZWJOb2RlLmgiCisKKyNp
ZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgRG9jdW1l
bnQ7IH0KK25hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1Jl
ZlB0cjsgfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViRWxlbWVudDsK
K2NsYXNzIFdlYkZyYW1lOworY2xhc3MgV2ViTm9kZUNvbGxlY3Rpb247CitjbGFzcyBXZWJTdHJp
bmc7CitjbGFzcyBXZWJVUkw7CisKKy8vIFByb3ZpZGVzIHJlYWRvbmx5IGFjY2VzcyB0byBzb21l
IHByb3BlcnRpZXMgb2YgYSBET00gZG9jdW1lbnQuCitjbGFzcyBXZWJEb2N1bWVudCA6IHB1Ymxp
YyBXZWJOb2RlIHsKK3B1YmxpYzoKKyAgICBXZWJEb2N1bWVudCgpIHsgfQorICAgIFdlYkRvY3Vt
ZW50KGNvbnN0IFdlYkRvY3VtZW50JiBlKSA6IFdlYk5vZGUoZSkgeyB9CisKKyAgICBXZWJEb2N1
bWVudCYgb3BlcmF0b3I9KGNvbnN0IFdlYkRvY3VtZW50JiBlKQorICAgIHsKKyAgICAgICAgV2Vi
Tm9kZTo6YXNzaWduKGUpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIHZvaWQg
YXNzaWduKGNvbnN0IFdlYkRvY3VtZW50JiBlKSB7IFdlYk5vZGU6OmFzc2lnbihlKTsgfQorCisg
ICAgLy8gUmV0dXJucyB0aGUgZnJhbWUgdGhlIGRvY3VtZW50IGJlbG9uZ3MgdG8gb3IgMCBpZiB0
aGUgZG9jdW1lbnQgaXMgZnJhbWVsZXNzLgorICAgIFdFQktJVF9BUEkgV2ViRnJhbWUqIGZyYW1l
KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzSFRNTERvY3VtZW50KCkgY29uc3Q7Cisg
ICAgV0VCS0lUX0FQSSBXZWJVUkwgYmFzZVVSTCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2Vi
RWxlbWVudCBib2R5KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJFbGVtZW50IGhlYWQoKTsK
KyAgICBXRUJLSVRfQVBJIFdlYk5vZGVDb2xsZWN0aW9uIGFsbCgpOworICAgIFdFQktJVF9BUEkg
V2ViVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFdlYlN0cmluZyYpIGNvbnN0OworCisjaWYgV0VCS0lU
X0lNUExFTUVOVEFUSU9OCisgICAgV2ViRG9jdW1lbnQoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdl
YkNvcmU6OkRvY3VtZW50PiYpOworICAgIFdlYkRvY3VtZW50JiBvcGVyYXRvcj0oY29uc3QgV1RG
OjpQYXNzUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50PiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFz
c1JlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4oKSBjb25zdDsKKyNlbmRpZgorfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJFbGVtZW50LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkVsZW1lbnQuaApp
bmRleCBkN2EyY2JmLi5hYzU1NTkzIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkVsZW1lbnQuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkVsZW1lbnQuaApA
QCAtMzksNyArMzksNiBAQCBuYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNs
YXNzIFBhc3NSZWZQdHI7IH0KICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLQogICAgIC8v
IFByb3ZpZGVzIHJlYWRvbmx5IGFjY2VzcyB0byBzb21lIHByb3BlcnRpZXMgb2YgYSBET00gZWxl
bWVudCBub2RlLgogICAgIGNsYXNzIFdlYkVsZW1lbnQgOiBwdWJsaWMgV2ViTm9kZSB7CiAgICAg
cHVibGljOgpAQCAtNDcsNyArNDYsMTEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgICAgIFdl
YkVsZW1lbnQoY29uc3QgV2ViRWxlbWVudCYgZSkgOiBXZWJOb2RlKGUpIHsgfQogCiAgICAgICAg
IFdlYkVsZW1lbnQmIG9wZXJhdG9yPShjb25zdCBXZWJFbGVtZW50JiBlKSB7IFdlYk5vZGU6OmFz
c2lnbihlKTsgcmV0dXJuICp0aGlzOyB9Ci0gICAgICAgIFdFQktJVF9BUEkgdm9pZCBhc3NpZ24o
Y29uc3QgV2ViRWxlbWVudCYgZSkgeyBXZWJOb2RlOjphc3NpZ24oZSk7IH0KKyAgICAgICAgdm9p
ZCBhc3NpZ24oY29uc3QgV2ViRWxlbWVudCYgZSkgeyBXZWJOb2RlOjphc3NpZ24oZSk7IH0KKwor
ICAgICAgICBXRUJLSVRfQVBJIGJvb2wgaGFzVGFnTmFtZShjb25zdCBXZWJTdHJpbmcmKSBjb25z
dDsKKyAgICAgICAgV0VCS0lUX0FQSSBib29sIGhhc0F0dHJpYnV0ZShjb25zdCBXZWJTdHJpbmcm
KSBjb25zdDsKKyAgICAgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgZ2V0QXR0cmlidXRlKGNvbnN0
IFdlYlN0cmluZyYpIGNvbnN0OwogCiAjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCiAgICAgICAg
IFdlYkVsZW1lbnQoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+Jik7CmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZvcm1FbGVtZW50LmggYi9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkZvcm1FbGVtZW50LmgKaW5kZXggMjdhMWVkYi4uYjA3YmZm
OSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGb3JtRWxlbWVudC5oCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRm9ybUVsZW1lbnQuaApAQCAtNTAsNyArNTAs
MTEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgICAgIFdlYkZvcm1FbGVtZW50KCkgOiBXZWJF
bGVtZW50KCkgeyB9CiAgICAgICAgIFdlYkZvcm1FbGVtZW50KGNvbnN0IFdlYkZvcm1FbGVtZW50
JiBlKSA6IFdlYkVsZW1lbnQoZSkgeyB9CiAKLSAgICAgICAgV2ViRWxlbWVudCYgb3BlcmF0b3I9
KGNvbnN0IFdlYkZvcm1FbGVtZW50JiBlKSB7IFdlYkVsZW1lbnQ6OmFzc2lnbihlKTsgcmV0dXJu
ICp0aGlzOyB9CisgICAgICAgIFdlYkZvcm1FbGVtZW50JiBvcGVyYXRvcj0oY29uc3QgV2ViRm9y
bUVsZW1lbnQmIGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIFdlYkVsZW1lbnQ6OmFzc2lnbihl
KTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQogICAgICAgICBXRUJLSVRf
QVBJIHZvaWQgYXNzaWduKGNvbnN0IFdlYkZvcm1FbGVtZW50JiBlKSB7IFdlYkVsZW1lbnQ6OmFz
c2lnbihlKTsgfQogCiAjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkZyYW1lLmgKaW5kZXggNDRiNTdhYS4uZGI2Y2ZhZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJGcmFtZS5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJh
bWUuaApAQCAtNDcsNiArNDcsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViRGF0
YTsKIGNsYXNzIFdlYkRhdGFTb3VyY2U7CitjbGFzcyBXZWJEb2N1bWVudDsKK2NsYXNzIFdlYkVs
ZW1lbnQ7CiBjbGFzcyBXZWJGb3JtRWxlbWVudDsKIGNsYXNzIFdlYkhpc3RvcnlJdGVtOwogY2xh
c3MgV2ViSW5wdXRFbGVtZW50OwpAQCAtODUsNiArODcsMTAgQEAgcHVibGljOgogICAgIFdFQktJ
VF9BUEkgc3RhdGljIFdlYkZyYW1lKiBmcmFtZUZvckVudGVyZWRDb250ZXh0KCk7CiAgICAgV0VC
S0lUX0FQSSBzdGF0aWMgV2ViRnJhbWUqIGZyYW1lRm9yQ3VycmVudENvbnRleHQoKTsKIAorICAg
IC8vIFJldHVybnMgdGhlIGZyYW1lIGluc2lkZSBhIGdpdmVuIGZyYW1lIG9yIGlmcmFtZSBlbGVt
ZW50LiBSZXR1cm5zIDAgaWYKKyAgICAvLyB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBub3QgYSBmcmFt
ZSwgaWZyYW1lIG9yIGlmIHRoZSBmcmFtZSBpcyBlbXB0eS4KKyAgICBXRUJLSVRfQVBJIHN0YXRp
YyBXZWJGcmFtZSogZnJvbUZyYW1lT3duZXJFbGVtZW50KGNvbnN0IFdlYkVsZW1lbnQmKTsKKwog
CiAgICAgLy8gQmFzaWMgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTAzLDYgKzEwOSw4IEBAIHB1YmxpYzoKICAgICAv
LyB0aGUgZG9jdW1lbnQgbG9hZGVkIGluIHRoaXMgZnJhbWUuCiAgICAgdmlydHVhbCBXZWJVUkwg
b3BlblNlYXJjaERlc2NyaXB0aW9uVVJMKCkgY29uc3QgPSAwOwogCisgICAgLy8gUmV0dXJuIHRo
ZSBmcmFtZSdzIGVuY29kaW5nLgorICAgIHZpcnR1YWwgV2ViU3RyaW5nIGVuY29kaW5nKCkgY29u
c3QgPSAwOwogCiAgICAgLy8gR2VvbWV0cnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTY0LDggKzE3Miw5IEBAIHB1Ymxp
YzoKIAogICAgIC8vIENvbnRlbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICB2aXJ0dWFsIHZvaWQgZm9ybXMoV2ViVmVj
dG9yPFdlYkZvcm1FbGVtZW50PiYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFdlYkRvY3VtZW50
IGRvY3VtZW50KCkgY29uc3QgPSAwOwogCisgICAgdmlydHVhbCB2b2lkIGZvcm1zKFdlYlZlY3Rv
cjxXZWJGb3JtRWxlbWVudD4mKSBjb25zdCA9IDA7CiAKICAgICAvLyBTY3JpcHRpbmcgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBA
IC00NDQsNiArNDUzLDcgQEAgcHVibGljOgogICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBiYXNlIFVS
TCBvZiB0aGUgZnJhbWUncyBkb2N1bWVudC4gIFRoaXMgdXNlcyB0aGUKICAgICAvLyBzYW1lIGFs
Z29yaXRobSB0aGF0IFdlYktpdCB1c2VzIHRvIHJlc29sdmUgaHlwZXJsaW5rcyBmb3VuZCBpbiBh
CiAgICAgLy8gSFRNTCBkb2N1bWVudC4KKyAgICAvLyBEZXByZWNhdGVkLiBVc2UgZG9jdW1lbnQo
KS5jb21wbGV0ZVVSTCgpIGluc3RlYWQuCiAgICAgdmlydHVhbCBXZWJVUkwgY29tcGxldGVVUkwo
Y29uc3QgV2ViU3RyaW5nJikgY29uc3QgPSAwOwogCiAgICAgLy8gUmV0dXJucyB0aGUgY29udGVu
dHMgb2YgdGhpcyBmcmFtZSBhcyBhIHN0cmluZy4gIElmIHRoZSB0ZXh0IGlzCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5vZGUuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViTm9kZS5oCmluZGV4IDAzYWZhOTAuLmRmYmIwYWEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViTm9kZS5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
Tm9kZS5oCkBAIC00MCw3ICs0MCw5IEBAIG5hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gY2xhc3MgUGFzc1JlZlB0cjsgfQogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewor
Y2xhc3MgV2ViRG9jdW1lbnQ7CiBjbGFzcyBXZWJGcmFtZTsKK2NsYXNzIFdlYk5vZGVMaXN0Owog
CiAvLyBQcm92aWRlcyByZWFkb25seSBhY2Nlc3MgdG8gc29tZSBwcm9wZXJ0aWVzIG9mIGEgRE9N
IG5vZGUuCiBjbGFzcyBXZWJOb2RlIHsKQEAgLTY2LDkgKzY4LDM3IEBAIHB1YmxpYzoKICAgICBv
cGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Tm9kZT4oKSBjb25zdDsKICNlbmRpZgog
CisgICAgZW51bSBOb2RlVHlwZSB7CisgICAgICAgIEVsZW1lbnROb2RlID0gMSwKKyAgICAgICAg
QXR0cmlidXRlTm9kZSwKKyAgICAgICAgVGV4dE5vZGUsCisgICAgICAgIENEYXRhU2VjdGlvbk5v
ZGUsCisgICAgICAgIEVudGl0eVJlZmVyZW5jZU5vZGUsCisgICAgICAgIEVudGl0eU5vZGUsCisg
ICAgICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbnNOb2RlLAorICAgICAgICBDb21tZW50Tm9kZSwK
KyAgICAgICAgRG9jdW1lbnROb2RlLAorICAgICAgICBEb2N1bWVudFR5cGVOb2RlLAorICAgICAg
ICBEb2N1bWVudEZyYWdtZW50Tm9kZSwKKyAgICAgICAgTm90YXRpb25Ob2RlLAorICAgICAgICBY
UGF0aE5hbWVzcGFjZU5vZGUKKyAgICB9OworICAgIFdFQktJVF9BUEkgTm9kZVR5cGUgbm9kZVR5
cGUoKSBjb25zdDsKICAgICBXRUJLSVRfQVBJIFdlYk5vZGUgcGFyZW50Tm9kZSgpIGNvbnN0Owog
ICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQ
SSBXZWJTdHJpbmcgbm9kZVZhbHVlKCkgY29uc3Q7CisgICAgLy8gRGVwcmVjYXRlZC4gVXNlIGRv
Y3VtZW50KCkuZnJhbWUoKSBpbnN0ZWFkLgogICAgIFdFQktJVF9BUEkgV2ViRnJhbWUqIGZyYW1l
KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJEb2N1bWVudCBkb2N1bWVudCgpIGNvbnN0Owor
ICAgIFdFQktJVF9BUEkgV2ViTm9kZSBmaXJzdENoaWxkKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQ
SSBXZWJOb2RlIGxhc3RDaGlsZCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViTm9kZSBwcmV2
aW91c1NpYmxpbmcoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIFdlYk5vZGUgbmV4dFNpYmxpbmco
KSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaGFzQ2hpbGROb2RlcygpIGNvbnN0OworICAg
IFdFQktJVF9BUEkgV2ViTm9kZUxpc3QgY2hpbGROb2RlcygpOworICAgIFdFQktJVF9BUEkgV2Vi
U3RyaW5nIGNyZWF0ZU1hcmt1cCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBpc1RleHRO
b2RlKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzRWxlbWVudE5vZGUoKSBjb25zdDsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgdG9FbGVtZW50KCkKICAgICB7CkBAIC03Nyw2
ICsxMDcsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IFQgdG9Db25zdEVsZW1lbnQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgVCByZXM7CisgICAgICAgIHJlcy5tX3ByaXZhdGUgPSBtX3ByaXZhdGU7CisgICAg
ICAgIHJldHVybiByZXM7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdHlwZWRlZiBXZWJDb3Jl
OjpOb2RlIFdlYk5vZGVQcml2YXRlOwogICAgIHZvaWQgYXNzaWduKFdlYk5vZGVQcml2YXRlKik7
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5vZGVDb2xsZWN0aW9uLmgg
Yi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5vZGVDb2xsZWN0aW9uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVlNGY0NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViTm9kZUNvbGxlY3Rpb24uaApAQCAtMCwwICsxLDc1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXZWJOb2RlQ29sbGVjdGlvbl9oCisjZGVmaW5lIFdlYk5vZGVDb2xsZWN0aW9uX2gKKwor
I2luY2x1ZGUgIldlYkNvbW1vbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEhUTUxD
b2xsZWN0aW9uOyB9CisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2UgV1RGIHsg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NSZWZQdHI7IH0KKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYk5vZGU7CisKKy8vIFByb3ZpZGVzIHJlYWRvbmx5IGFj
Y2VzcyB0byBzb21lIHByb3BlcnRpZXMgb2YgYSBET00gbm9kZS4KK2NsYXNzIFdlYk5vZGVDb2xs
ZWN0aW9uIHsKK3B1YmxpYzoKKyAgICB+V2ViTm9kZUNvbGxlY3Rpb24oKSB7IHJlc2V0KCk7IH0K
KworICAgIFdlYk5vZGVDb2xsZWN0aW9uKCkgOiBtX3ByaXZhdGUoMCkgeyB9CisgICAgV2ViTm9k
ZUNvbGxlY3Rpb24oY29uc3QgV2ViTm9kZUNvbGxlY3Rpb24mIG4pIDogbV9wcml2YXRlKDApIHsg
YXNzaWduKG4pOyB9CisgICAgV2ViTm9kZUNvbGxlY3Rpb24mIG9wZXJhdG9yPShjb25zdCBXZWJO
b2RlQ29sbGVjdGlvbiYgbikKKyAgICB7CisgICAgICAgIGFzc2lnbihuKTsKKyAgICAgICAgcmV0
dXJuICp0aGlzOworICAgIH0KKworICAgIFdFQktJVF9BUEkgdm9pZCByZXNldCgpOworICAgIFdF
QktJVF9BUEkgdm9pZCBhc3NpZ24oY29uc3QgV2ViTm9kZUNvbGxlY3Rpb24mKTsKKworICAgIFdF
QktJVF9BUEkgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJOb2Rl
IG5leHRJdGVtKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJOb2RlIGZpcnN0SXRlbSgpIGNv
bnN0OworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViTm9kZUNvbGxlY3Rpb24o
Y29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uPiYpOworI2VuZGlm
CisKK3ByaXZhdGU6CisgICAgdm9pZCBhc3NpZ24oV2ViQ29yZTo6SFRNTENvbGxlY3Rpb24qKTsK
KyAgICBXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbiogbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJOb2RlTGlzdC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJOb2RlTGlzdC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZWZhYjAKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5vZGVMaXN0LmgKQEAgLTAsMCArMSw3NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV2ViTm9kZUxpc3RfaAorI2RlZmluZSBXZWJOb2RlTGlzdF9oCisKKyNpbmNsdWRl
ICJXZWJDb21tb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBOb2RlTGlzdDsgfQor
I2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorbmFtZXNwYWNlIFdURiB7IHRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOyB9CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7
CitjbGFzcyBXZWJOb2RlOworCisvLyBQcm92aWRlcyByZWFkb25seSBhY2Nlc3MgdG8gc29tZSBw
cm9wZXJ0aWVzIG9mIGEgRE9NIG5vZGUuCitjbGFzcyBXZWJOb2RlTGlzdCB7CitwdWJsaWM6Cisg
ICAgfldlYk5vZGVMaXN0KCkgeyByZXNldCgpOyB9CisKKyAgICBXZWJOb2RlTGlzdCgpIDogbV9w
cml2YXRlKDApIHsgfQorICAgIFdlYk5vZGVMaXN0KGNvbnN0IFdlYk5vZGVMaXN0JiBuKSA6IG1f
cHJpdmF0ZSgwKSB7IGFzc2lnbihuKTsgfQorICAgIFdlYk5vZGVMaXN0JiBvcGVyYXRvcj0oY29u
c3QgV2ViTm9kZUxpc3QmIG4pCisgICAgeworICAgICAgICBhc3NpZ24obik7CisgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICB9CisKKyAgICBXRUJLSVRfQVBJIHZvaWQgcmVzZXQoKTsKKyAgICBX
RUJLSVRfQVBJIHZvaWQgYXNzaWduKGNvbnN0IFdlYk5vZGVMaXN0Jik7CisKKyAgICBXRUJLSVRf
QVBJIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViTm9kZSBpdGVt
KHNpemVfdCkgY29uc3Q7CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJOb2Rl
TGlzdChjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Tm9kZUxpc3Q+Jik7CisjZW5kaWYK
KworcHJpdmF0ZToKKyAgICB2b2lkIGFzc2lnbihXZWJDb3JlOjpOb2RlTGlzdCopOworICAgIFdl
YkNvcmU6Ok5vZGVMaXN0KiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJp
YWxpemVyLmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRmNzk5NAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaApAQCAtMCwwICsx
LDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXZWJQYWdlU2VyaWFsaXplcl9oCisjZGVmaW5lIFdlYlBhZ2VTZXJpYWxp
emVyX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2Ns
YXNzIFdlYkZyYW1lOworY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQ7CitjbGFzcyBXZWJT
dHJpbmc7CitjbGFzcyBXZWJVUkw7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2ViVmVj
dG9yOworCisvLyBHZXQgaHRtbCBkYXRhIGJ5IHNlcmlhbGl6aW5nIGFsbCBmcmFtZXMgb2YgY3Vy
cmVudCBwYWdlIHdpdGggbGlzdHMKKy8vIHdoaWNoIGNvbnRhaW4gYWxsIHJlc291cmNlIGxpbmtz
IHRoYXQgaGF2ZSBsb2NhbCBjb3B5LgorY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXIgeworcHVibGlj
OgorICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBmaW5kIG91dCBhbGwgZnJhbWVzIGFuZCBzZXJp
YWxpemUgdGhlbSB0byBIVE1MIGRhdGEuCisgICAgLy8gV2UgaGF2ZSBhIGRhdGEgYnVmZmVyIHRv
IHRlbXBvcmFyeSBzYXZpbmcgZ2VuZXJhdGVkIGh0bWwgZGF0YS4gV2Ugd2lsbAorICAgIC8vIHNl
cXVlbnRpYWxseSBjYWxsIFdlYlBhZ2VTZXJpYXpsaWVyQ2xpZW50IG9uY2UgdGhlIGRhdGEgYnVm
ZmVyIGlzIGZ1bGwuCisgICAgLy8KKyAgICAvLyBSZXR1cm4gZmFsc2UgbWVhbnMgbm8gYXZhaWxh
YmxlIGZyYW1lIGhhcyBiZWVuIHNlcmlhbGl6ZWQsIG90aGVyd2lzZQorICAgIC8vIHJldHVybiB0
cnVlLgorICAgIC8vCisgICAgLy8gVGhlIHBhcmFtZXRlciBmcmFtZSBzcGVjaWZpZXMgd2hpY2gg
ZnJhbWUgbmVlZCB0byBiZSBzZXJpYWxpemVkLgorICAgIC8vIFRoZSBwYXJhbWV0ZXIgcmVjdXJz
aXZlIHNwZWNpZmllcyB3aGV0aGVyIHdlIG5lZWQgdG8KKyAgICAvLyBzZXJpYWxpemUgYWxsIHN1
YiBmcmFtZXMgb2YgdGhlIHNwZWNpZmllZCBmcmFtZSBvciBub3QuCisgICAgLy8gVGhlIHBhcmFt
ZXRlciBjbGllbnQgc3BlY2lmaWVzIHRoZSBwb2ludGVyIG9mIGludGVyZmFjZQorICAgIC8vIFdl
YlBhZ2VTZXJpYWxpemVyQ2xpZW50IHByb3ZpZGluZyBhIHNpbmsgaW50ZXJmYWNlIHRvIHJlY2Vp
dmUgdGhlCisgICAgLy8gaW5kaXZpZHVhbCBjaHVua3Mgb2YgZGF0YSB0byBiZSBzYXZlZC4KKyAg
ICAvLyBUaGUgcGFyYW1ldGVyIGxpbmtzIGNvbnRhaW4gb3JpZ2luYWwgVVJMcyBvZiBhbGwgc2F2
ZWQgbGlua3MuCisgICAgLy8gVGhlIHBhcmFtZXRlciBsb2NhbFBhdGhzIGNvbnRhaW4gY29ycmVz
cG9uZGluZyBsb2NhbCBmaWxlIHBhdGhzIG9mIGFsbAorICAgIC8vIHNhdmVkIGxpbmtzLCB3aGlj
aCBtYXRjaGVkIHdpdGggdmVjdG9yOmxpbmtzIG9uZSBieSBvbmUuCisgICAgLy8gVGhlIHBhcmFt
ZXRlciBsb2NhbERpcmVjdG9yeU5hbWUgaXMgcmVsYXRpdmUgcGF0aCBvZiBkaXJlY3Rvcnkgd2hp
Y2gKKyAgICAvLyBjb250YWluIGFsbCBzYXZlZCBhdXhpbGlhcnkgZmlsZXMgaW5jbHVkZWQgYWxs
IHN1YiBmcmFtZXMgYW5kIHJlc291cmNlcy4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBib29sIHNl
cmlhbGl6ZShXZWJGcmFtZSogZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCByZWN1cnNpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqIGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViVVJMPiYgbGlua3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4m
IGxvY2FsUGF0aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
V2ViU3RyaW5nJiBsb2NhbERpcmVjdG9yeU5hbWUpOworCisgICAgLy8gRklYTUU6IFRoZSBmb2xs
b3dpbmcgYXJlIGhlcmUgZm9yIHVuaXQgdGVzdGluZyBwdXJwb3Nlcy4gQ29uc2lkZXIKKyAgICAv
LyBjaGFuZ2luZyB0aGUgdW5pdCB0ZXN0cyBpbnN0ZWFkLgorCisgICAgLy8gR2VuZXJhdGUgdGhl
IE1FVEEgZm9yIGNoYXJzZXQgZGVjbGFyYXRpb24uCisgICAgV0VCS0lUX0FQSSBzdGF0aWMgV2Vi
U3RyaW5nIGdlbmVyYXRlTWV0YUNoYXJzZXREZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGNo
YXJzZXQpOworICAgIC8vIEdlbmVyYXRlIHRoZSBNT1RXIGRlY2xhcmF0aW9uLgorICAgIFdFQktJ
VF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0ZU1hcmtPZlRoZVdlYkRlY2xhcmF0aW9uKGNv
bnN0IFdlYlVSTCYgdXJsKTsKKyAgICAvLyBHZW5lcmF0ZSB0aGUgZGVmYXVsdCBiYXNlIHRhZyBk
ZWNsYXJhdGlvbi4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJTdHJpbmcgZ2VuZXJhdGVCYXNl
VGFnRGVjbGFyYXRpb24oY29uc3QgV2ViU3RyaW5nJiBiYXNlVGFyZ2V0KTsKK307CisKK30gIC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYzMwZGRiYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQYWdl
U2VyaWFsaXplckNsaWVudF9oCisjZGVmaW5lIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50X2gKKwor
bmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJDU3RyaW5nOworY2xhc3MgV2ViVVJMOworCisv
LyBUaGlzIGNsYXNzIGlzIHVzZWQgZm9yIHByb3ZpZGluZyBzaW5rIGludGVyZmFjZSB0aGF0IGNh
biBiZSB1c2VkIHRvIHJlY2VpdmUKKy8vIHRoZSBpbmRpdmlkdWFsIGNodW5rcyBvZiBkYXRhIHRv
IGJlIHNhdmVkLgorY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQgeworcHVibGljOgorICAg
IC8vIFRoaXMgZW51bSBpbmRpY2F0ZXMgIFRoaXMgc2luayBpbnRlcmZhY2UgY2FuIHJlY2VpdmUg
dGhlIGluZGl2aWR1YWwgY2h1bmtzCisgICAgLy8gb2Ygc2VyaWFsaXplZCBkYXRhIHRvIGJlIHNh
dmVkLCBzbyB3ZSB1c2UgdmFsdWVzIG9mIGZvbGxvd2luZyBlbnVtCisgICAgLy8gZGVmaW5pdGlv
biB0byBpbmRpY2F0ZSB0aGUgc2VyaWFsaXphdGlvbiBzdGF0dXMgb2Ygc2VyaWFsaXppbmcgYWxs
IGh0bWwKKyAgICAvLyBjb250ZW50LiBJZiBjdXJyZW50IGZyYW1lIGlzIG5vdCBjb21wbGV0ZSBz
ZXJpYWxpemVkLCBjYWxsCisgICAgLy8gZGlkU2VyaWFsaXplRGF0YUZvckZyYW1lIHdpdGggVVJM
IG9mIGN1cnJlbnQgZnJhbWUsIGRhdGEsIGRhdGEgbGVuZ3RoIGFuZAorICAgIC8vIGZsYWcgQ3Vy
cmVudEZyYW1lSXNOb3RGaW5pc2hlZC4KKyAgICAvLyBJZiBjdXJyZW50IGZyYW1lIGlzIGNvbXBs
ZXRlIHNlcmlhbGl6ZWQsIGNhbGwgZGlkU2VyaWFsaXplRGF0YUZvckZyYW1lCisgICAgLy8gd2l0
aCBVUkwgb2YgY3VycmVudCBmcmFtZSwgZGF0YSwgZGF0YSBsZW5ndGggYW5kIGZsYWcKKyAgICAv
LyBDdXJyZW50RnJhbWVJc0ZpbmlzaGVkLgorICAgIC8vIElmIGFsbCBmcmFtZXMgb2YgcGFnZSBh
cmUgY29tcGxldGUgc2VyaWFsaXplZCwgY2FsbAorICAgIC8vIGRpZFNlcmlhbGl6ZURhdGFGb3JG
cmFtZSB3aXRoIGVtcHR5IFVSTCwgZW1wdHkgZGF0YSwgMCBhbmQgZmxhZworICAgIC8vIEFsbEZy
YW1lc0FyZUZpbmlzaGVkLgorICAgIGVudW0gUGFnZVNlcmlhbGl6YXRpb25TdGF0dXMgeworICAg
ICAgICBDdXJyZW50RnJhbWVJc05vdEZpbmlzaGVkLAorICAgICAgICBDdXJyZW50RnJhbWVJc0Zp
bmlzaGVkLAorICAgICAgICBBbGxGcmFtZXNBcmVGaW5pc2hlZCwKKyAgICB9OworCisgICAgLy8g
UmVjZWl2ZSB0aGUgaW5kaXZpZHVhbCBjaHVua3Mgb2Ygc2VyaWFsaXplZCBhbmQgZW5jb2RlZCBk
YXRhIHRvIGJlIHNhdmVkLgorICAgIC8vIFRoZSBwYXJhbWV0ZXIgZnJhbWVVUkwgc3BlY2lmaWVz
IHdoYXQgZnJhbWUgdGhlIGRhdGEgYmVsb25ncy4gVGhlCisgICAgLy8gcGFyYW1ldGVyIGRhdGEg
Y29udGFpbnMgdGhlIGF2YWlsYWJsZSBkYXRhIGZvciBzYXZpbmcuIFRoZSBwYXJhbWV0ZXIKKyAg
ICAvLyBzdGF0dXMgaW5kaWNhdGVzIHRoZSBzdGF0dXMgb2YgZGF0YSBzZXJpYWxpemF0aW9uLgor
ICAgIHZpcnR1YWwgdm9pZCBkaWRTZXJpYWxpemVEYXRhRm9yRnJhbWUoY29uc3QgV2ViVVJMJiBm
cmFtZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFdlYkNTdHJpbmcmIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQYWdlU2VyaWFsaXphdGlvblN0YXR1cyBzdGF0dXMpID0gMDsKKyAgICBXZWJQYWdlU2Vy
aWFsaXplckNsaWVudCgpIHsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+V2ViUGFnZVNl
cmlhbGl6ZXJDbGllbnQoKSB7IH0KK307CisKK30gIC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlN0cmluZy5oIGIvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTdHJpbmcuaAppbmRleCBkOWI2NmIyLi42NjU3ZGUxIDEw
MDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlN0cmluZy5oCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViU3RyaW5nLmgKQEAgLTg2LDYgKzg2LDE5IEBAIHB1YmxpYzoK
IAogICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBmcm9tVVRGOChjb25zdCBjaGFyKiBk
YXRhLCBzaXplX3QgbGVuZ3RoKTsKICAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJTdHJpbmcgZnJv
bVVURjgoY29uc3QgY2hhciogZGF0YSk7CisgICAgdGVtcGxhdGUgPGludCBOPiBXZWJTdHJpbmco
Y29uc3QgY2hhciAoJmRhdGEpW05dKQorICAgICAgICA6IG1fcHJpdmF0ZSgwKQorICAgIHsKKyAg
ICAgICAgYXNzaWduKGZyb21VVEY4KGRhdGEsIE4gLSAxKSk7CisgICAgfQorCisgICAgdGVtcGxh
dGUgPGludCBOPiBXZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBjaGFyICgmZGF0YSlbTl0pCisg
ICAgeworICAgICAgICBhc3NpZ24oZnJvbVVURjgoZGF0YSwgTiAtIDEpKTsKKyAgICAgICAgcmV0
dXJuICp0aGlzOworICAgIH0KKworICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nJiBvcGVyYXRvcj0o
Y29uc3QgY2hhciogcyk7CiAKICNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KICAgICBXZWJTdHJp
bmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CkBAIC05Niw2ICsxMDksNyBAQCBwdWJsaWM6CiAg
ICAgV2ViU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6QXRvbWljU3RyaW5nJik7CiAg
ICAgb3BlcmF0b3IgV2ViQ29yZTo6QXRvbWljU3RyaW5nKCkgY29uc3Q7CiAjZWxzZQorCiAgICAg
V2ViU3RyaW5nKGNvbnN0IHN0cmluZzE2JiBzKSA6IG1fcHJpdmF0ZSgwKQogICAgIHsKICAgICAg
ICAgYXNzaWduKHMuZGF0YSgpLCBzLmxlbmd0aCgpKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Fz
c2VydE1hdGNoaW5nRW51bXMuY3BwCmluZGV4IDM1ZTIwNTcuLjIxMDRlNWYgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKKysrIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcApAQCAtMjQ1LDYgKzI0NSwyMCBA
QCBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYklucHV0RWxlbWVudDo6TW9udGgsIEhU
TUxJbnB1dEVsZW1lbnQ6Ok1PTlRIKTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2Vi
SW5wdXRFbGVtZW50OjpUaW1lLCBIVE1MSW5wdXRFbGVtZW50OjpUSU1FKTsKIENPTVBJTEVfQVNT
RVJUX01BVENISU5HX0VOVU0oV2ViSW5wdXRFbGVtZW50OjpXZWVrLCBIVE1MSW5wdXRFbGVtZW50
OjpXRUVLKTsKIAorQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJOb2RlOjpFbGVtZW50
Tm9kZSwgTm9kZTo6RUxFTUVOVF9OT0RFKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0o
V2ViTm9kZTo6QXR0cmlidXRlTm9kZSwgTm9kZTo6QVRUUklCVVRFX05PREUpOworQ09NUElMRV9B
U1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJOb2RlOjpUZXh0Tm9kZSwgTm9kZTo6VEVYVF9OT0RFKTsK
K0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTm9kZTo6Q0RhdGFTZWN0aW9uTm9kZSwg
Tm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0o
V2ViTm9kZTo6RW50aXR5UmVmZXJlbmNlTm9kZSwgTm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RF
KTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTm9kZTo6RW50aXR5Tm9kZSwgTm9k
ZTo6RU5USVRZX05PREUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJOb2RlOjpQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb25zTm9kZSwgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9O
T0RFKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTm9kZTo6Q29tbWVudE5vZGUs
IE5vZGU6OkNPTU1FTlRfTk9ERSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk5v
ZGU6OkRvY3VtZW50Tm9kZSwgTm9kZTo6RE9DVU1FTlRfTk9ERSk7CitDT01QSUxFX0FTU0VSVF9N
QVRDSElOR19FTlVNKFdlYk5vZGU6OkRvY3VtZW50VHlwZU5vZGUsIE5vZGU6OkRPQ1VNRU5UX1RZ
UEVfTk9ERSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk5vZGU6OkRvY3VtZW50
RnJhZ21lbnROb2RlLCBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFKTsKK0NPTVBJTEVfQVNT
RVJUX01BVENISU5HX0VOVU0oV2ViTm9kZTo6Tm90YXRpb25Ob2RlLCBOb2RlOjpOT1RBVElPTl9O
T0RFKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTm9kZTo6WFBhdGhOYW1lc3Bh
Y2VOb2RlLCBOb2RlOjpYUEFUSF9OQU1FU1BBQ0VfTk9ERSk7CisKICNpZiBFTkFCTEUoVklERU8p
CiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk1lZGlhUGxheWVyOjpFbXB0eSwgTWVk
aWFQbGF5ZXI6OkVtcHR5KTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTWVkaWFQ
bGF5ZXI6OklkbGUsIE1lZGlhUGxheWVyOjpJZGxlKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RP
TVV0aWxpdGllc1ByaXZhdGUuY3BwCmluZGV4IGZmZGQ4NWQuLjQwODFkYjYgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5jcHAKKysrIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9ET01VdGlsaXRpZXNQcml2YXRlLmNwcApAQCAtODQsNCArODQsNTMgQEAg
U3RyaW5nIG5hbWVPZklucHV0RWxlbWVudChIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQogICAg
IHJldHVybiBXZWJJbnB1dEVsZW1lbnQoZWxlbWVudCkubmFtZUZvckF1dG9maWxsKCk7CiB9CiAK
K2Jvb2wgZWxlbWVudEhhc0xlZ2FsTGlua0F0dHJpYnV0ZShjb25zdCBFbGVtZW50KiBlbGVtZW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQoreworICAgIGlmIChhdHRyTmFtZSA9PSBIVE1MTmFtZXM6OnNyY0F0dHIpIHsK
KyAgICAgICAgLy8gQ2hlY2sgc3JjIGF0dHJpYnV0ZS4KKyAgICAgICAgaWYgKGVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjppbWdUYWcpCisgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0VGFnKQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZVRhZykKKyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZVRhZykpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykpIHsK
KyAgICAgICAgICAgIGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0KKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAg
ICAgIGlmIChpbnB1dC0+aW5wdXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVudDo6SU1BR0UpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGF0
dHJOYW1lID09IEhUTUxOYW1lczo6aHJlZkF0dHIpIHsKKyAgICAgICAgLy8gQ2hlY2sgaHJlZiBh
dHRyaWJ1dGUuCisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGlu
a1RhZykKKyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphVGFn
KQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFyZWFUYWcp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBI
VE1MTmFtZXM6OmFjdGlvbkF0dHIpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpmb3JtVGFnKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjpiYWNrZ3JvdW5kQXR0cikgeworICAgICAgICBp
ZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHlUYWcpCisgICAgICAgICAgICB8
fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGVUYWcpCisgICAgICAgICAgICB8
fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHJUYWcpCisgICAgICAgICAgICB8fCBl
bGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGRUYWcpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBIVE1MTmFtZXM6OmNpdGVBdHRyKSB7
CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZVRh
ZykKKyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpxVGFnKQor
ICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRlbFRhZykKKyAg
ICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnNUYWcpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBIVE1MTmFt
ZXM6OmNsYXNzaWRBdHRyCisgICAgICAgICAgICAgICB8fCBhdHRyTmFtZSA9PSBIVE1MTmFtZXM6
OmRhdGFBdHRyKSB7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
b2JqZWN0VGFnKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZWxzZSBpZiAoYXR0
ck5hbWUgPT0gSFRNTE5hbWVzOjpjb2RlYmFzZUF0dHIpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3RUYWcpCisgICAgICAgICAgICB8fCBlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YXBwbGV0VGFnKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9ET01VdGlsaXRpZXNQcml2YXRlLmgg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL0RPTVV0aWxpdGllc1ByaXZhdGUuaAppbmRleCBjMDJiZjg0
Li4yNTNhYjNmIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0RPTVV0aWxpdGllc1By
aXZhdGUuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RPTVV0aWxpdGllc1ByaXZhdGUuaApA
QCAtMzIsMTEgKzMyLDEzIEBACiAjZGVmaW5lIERPTVV0aWxpdGllc1ByaXZhdGVfaAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CitjbGFzcyBFbGVtZW50OwogY2xhc3MgSFRNTElucHV0RWxlbWVudDsK
IGNsYXNzIEhUTUxMaW5rRWxlbWVudDsKIGNsYXNzIEhUTUxNZXRhRWxlbWVudDsKIGNsYXNzIEhU
TUxPcHRpb25FbGVtZW50OwogY2xhc3MgTm9kZTsKK2NsYXNzIFF1YWxpZmllZE5hbWU7CiBjbGFz
cyBTdHJpbmc7CiB9CiAKQEAgLTUzLDYgKzU1LDE2IEBAIFdlYkNvcmU6OkhUTUxPcHRpb25FbGVt
ZW50KiB0b0hUTUxPcHRpb25FbGVtZW50KFdlYkNvcmU6Ok5vZGUqKTsKIC8vIEZJWE1FOiBEZXBy
ZWNhdGUuIFVzZSBXZWJJbnB1dEVsZW1lbnQ6Om5hbWVGb3JBdXRvZmlsbCBpbnN0ZWFkLgogV2Vi
Q29yZTo6U3RyaW5nIG5hbWVPZklucHV0RWxlbWVudChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50
Kik7CiAKKy8vIEZvciBpbWcsIHNjcmlwdCwgaWZyYW1lLCBmcmFtZSBlbGVtZW50LCB3aGVuIGF0
dHJpYnV0ZSBuYW1lIGlzIHNyYywKKy8vIGZvciBsaW5rLCBhLCBhcmVhIGVsZW1lbnQsIHdoZW4g
YXR0cmlidXRlIG5hbWUgaXMgaHJlZiwKKy8vIGZvciBmb3JtIGVsZW1lbnQsIHdoZW4gYXR0cmli
dXRlIG5hbWUgaXMgYWN0aW9uLAorLy8gZm9yIGlucHV0LCB0eXBlPWltYWdlLCB3aGVuIGF0dHJp
YnV0ZSBuYW1lIGlzIHNyYywKKy8vIGZvciBib2R5LCB0YWJsZSwgdHIsIHRkLCB3aGVuIGF0dHJp
YnV0ZSBuYW1lIGlzIGJhY2tncm91bmQsCisvLyBmb3IgYmxvY2txdW90ZSwgcSwgZGVsLCBpbnMs
IHdoZW4gYXR0cmlidXRlIG5hbWUgaXMgY2l0ZSwKKy8vIHdlIGNhbiBjb25zaWRlciB0aGUgYXR0
cmlidXRlIHZhbHVlIGhhcyBsZWdhbCBsaW5rLgorYm9vbCBlbGVtZW50SGFzTGVnYWxMaW5rQXR0
cmlidXRlKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
OworCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkRvY3VtZW50LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRG9j
dW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NjdhNjkKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRvY3VtZW50LmNwcApAQCAt
MCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJEb2N1bWVudC5o
IgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTEFsbENvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5j
bHVkZSAiSFRNTEhlYWRFbGVtZW50LmgiCisKKyNpbmNsdWRlICJXZWJFbGVtZW50LmgiCisjaW5j
bHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5jbHVkZSAiV2ViTm9kZUNvbGxlY3Rpb24uaCIKKyNp
bmNsdWRlICJXZWJVUkwuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViRG9jdW1lbnQ6
OldlYkRvY3VtZW50KGNvbnN0IFBhc3NSZWZQdHI8RG9jdW1lbnQ+JiBlbGVtKQorICAgIDogV2Vi
Tm9kZShlbGVtLnJlbGVhc2VSZWYoKSkKK3sKK30KKworV2ViRG9jdW1lbnQmIFdlYkRvY3VtZW50
OjpvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxEb2N1bWVudD4mIGVsZW0pCit7CisgICAgV2Vi
Tm9kZTo6YXNzaWduKGVsZW0ucmVsZWFzZVJlZigpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisK
K1dlYkRvY3VtZW50OjpvcGVyYXRvciBQYXNzUmVmUHRyPERvY3VtZW50PigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFBhc3NSZWZQdHI8RG9jdW1lbnQ+KHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9w
cml2YXRlKSk7Cit9CisKK1dlYkZyYW1lKiBXZWJEb2N1bWVudDo6ZnJhbWUoKSBjb25zdAorewor
ICAgIHJldHVybiBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShjb25zdFVud3JhcDxEb2N1bWVudD4o
KS0+ZnJhbWUoKSk7Cit9CisKK2Jvb2wgV2ViRG9jdW1lbnQ6OmlzSFRNTERvY3VtZW50KCkgY29u
c3QKK3sgIAorICAgIHJldHVybiBjb25zdFVud3JhcDxEb2N1bWVudD4oKS0+aXNIVE1MRG9jdW1l
bnQoKTsKK30KKworV2ViVVJMIFdlYkRvY3VtZW50OjpiYXNlVVJMKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gY29uc3RVbndyYXA8RG9jdW1lbnQ+KCktPmJhc2VVUkwoKTsKK30KKworV2ViRWxlbWVu
dCBXZWJEb2N1bWVudDo6Ym9keSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkVsZW1lbnQoY29u
c3RVbndyYXA8RG9jdW1lbnQ+KCktPmJvZHkoKSk7Cit9CisKK1dlYkVsZW1lbnQgV2ViRG9jdW1l
bnQ6OmhlYWQoKQoreworICAgIHJldHVybiBXZWJFbGVtZW50KHVud3JhcDxEb2N1bWVudD4oKS0+
aGVhZCgpKTsKK30KKworV2ViTm9kZUNvbGxlY3Rpb24gV2ViRG9jdW1lbnQ6OmFsbCgpCit7Cisg
ICAgcmV0dXJuIFdlYk5vZGVDb2xsZWN0aW9uKHVud3JhcDxEb2N1bWVudD4oKS0+YWxsKCkpOwor
fQorCitXZWJVUkwgV2ViRG9jdW1lbnQ6OmNvbXBsZXRlVVJMKGNvbnN0IFdlYlN0cmluZyYgcGFy
dGlhbFVSTCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8RG9jdW1lbnQ+KCktPmNv
bXBsZXRlVVJMKHBhcnRpYWxVUkwpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRWxlbWVudC5jcHAgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkVsZW1lbnQuY3BwCmluZGV4IDNmMTNlZTEuLjU2OTgwZmUgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRWxlbWVudC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJFbGVtZW50LmNwcApAQCAtNTQsNSArNTQsMjEgQEAgV2ViRWxlbWVudDo6b3BlcmF0
b3IgV1RGOjpQYXNzUmVmUHRyPEVsZW1lbnQ+KCkgY29uc3QKICAgICByZXR1cm4gUGFzc1JlZlB0
cjxFbGVtZW50PihzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9wcml2YXRlKSk7CiB9CiAKK2Jvb2wg
V2ViRWxlbWVudDo6aGFzVGFnTmFtZShjb25zdCBXZWJTdHJpbmcmIHRhZ05hbWUpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0VW53cmFwPEVsZW1lbnQ+KCktPnRh
Z05hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTmFtZS5vcGVyYXRvciBX
ZWJDb3JlOjpTdHJpbmcoKSk7Cit9CisKK2Jvb2wgV2ViRWxlbWVudDo6aGFzQXR0cmlidXRlKGNv
bnN0IFdlYlN0cmluZyYgYXR0ck5hbWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFw
PEVsZW1lbnQ+KCktPmhhc0F0dHJpYnV0ZShhdHRyTmFtZSk7Cit9CisKK1dlYlN0cmluZyBXZWJF
bGVtZW50OjpnZXRBdHRyaWJ1dGUoY29uc3QgV2ViU3RyaW5nJiBhdHRyTmFtZSkgY29uc3QKK3sK
KyAgICByZXR1cm4gY29uc3RVbndyYXA8RWxlbWVudD4oKS0+Z2V0QXR0cmlidXRlKGF0dHJOYW1l
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRW50aXRpZXMuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFbnRpdGll
cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkxNDNkOQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRW50aXRpZXMuY3BwCkBAIC0wLDAg
KzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkVudGl0aWVzLmgiCisK
KyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5j
bHVkZSAiU3RyaW5nQnVpbGRlci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKKyNpbmNs
dWRlICJXZWJTdHJpbmcuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSB7CisvLyBOb3RlIHRoYXQgdGhpcyBmaWxlIGlzIGFsc28gaW5jbHVkZWQgYnkgSFRNTFRva2Vu
aXplci5jcHAgc28gd2UgYXJlIGdldHRpbmcKKy8vIHR3byBjb3BpZXMgb2YgdGhlIGRhdGEgaW4g
bWVtb3J5LiAgV2UgY2FuIGZpeCB0aGlzIGJ5IGNoYW5naW5nIHRoZSBzY3JpcHQKKy8vIHRoYXQg
Z2VuZXJhdGVkIHRoZSBhcnJheSB0byBjcmVhdGUgYSBzdGF0aWMgY29uc3QgdGhhdCBpcyBpdHMg
bGVuZ3RoLCBidXQKKy8vIHRoaXMgaXMgbG93IHByaW9yaXR5IHNpbmNlIHRoZSBkYXRhIGlzIGxl
c3MgdGhhbiA0Sy4gV2UgdXNlIGFub255bW91cworLy8gbmFtZXNwYWNlIHRvIHByZXZlbnQgbmFt
ZSBjb2xsaXNpb25zLgorI2luY2x1ZGUgIkhUTUxFbnRpdHlOYW1lcy5jIiAvLyBOT0xJTlQKK30K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgcG9wdWxhdGVNYXAoV1RGOjpIYXNoTWFwPGlu
dCwgV2ViQ29yZTo6U3RyaW5nPiYgbWFwLAorICAgICAgICAgICAgICAgICBjb25zdCBFbnRpdHkq
IGVudGl0aWVzLAorICAgICAgICAgICAgICAgICBzaXplX3QgZW50aXRpZXNDb3VudCwKKyAgICAg
ICAgICAgICAgICAgYm9vbCBzdGFuZGFyZEhUTUwpCit7CisgICAgQVNTRVJUKG1hcC5pc0VtcHR5
KCkpOworICAgIGNvbnN0IEVudGl0eSogZW50aXR5ID0gJmVudGl0aWVzWzBdOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZW50aXRpZXNDb3VudDsgaSsrLCBlbnRpdHkrKykgeworICAgICAg
ICBpbnQgY29kZSA9IGVudGl0eS0+Y29kZTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBlbnRpdHkt
Pm5hbWU7CisgICAgICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgdXNlIHRoZSBsb3dlIGNhc2UgZm9y
IGVudGl0aWVzIHRoYXQgaGF2ZSBib3RoLgorICAgICAgICBpZiAobWFwLmNvbnRhaW5zKGNvZGUp
ICYmIG1hcC5nZXQoY29kZSkgPT0gbmFtZS5sb3dlcigpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIC8vIERvbid0IHJlZ2lzdGVyICZwZXJjbnQ7LCAmbnN1cDsgYW5kICZzdXBsOy4K
KyAgICAgICAgaWYgKHN0YW5kYXJkSFRNTCAmJiAoY29kZSA9PSAnJScgfHwgY29kZSA9PSAweDIy
ODUgfHwgY29kZSA9PSAweDAwYjkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1h
cC5zZXQoY29kZSwgbmFtZSk7CisgICAgfQorICAgIGlmIChzdGFuZGFyZEhUTUwpCisgICAgICAg
IG1hcC5zZXQoc3RhdGljX2Nhc3Q8aW50PigweDAwMjcpLCBTdHJpbmcoIiMzOSIpKTsKK30KKwor
c3RhdGljIGNvbnN0IEVudGl0eSB4bWxCdWlsdEluRW50aXR5Q29kZXNbXSA9IHsKKyAgICB7ICJs
dCIsIDB4MDAzYyB9LAorICAgIHsgImd0IiwgMHgwMDNlIH0sCisgICAgeyAiYW1wIiwgMHgwMDI2
IH0sCisgICAgeyAiYXBvcyIsIDB4MDAyNyB9LAorICAgIHsgInF1b3QiLCAweDAwMjIgfQorfTsK
KworV2ViRW50aXRpZXM6OldlYkVudGl0aWVzKGJvb2wgeG1sRW50aXRpZXMpCit7CisgICAgaWYg
KHhtbEVudGl0aWVzKQorICAgICAgICBwb3B1bGF0ZU1hcChtX2VudGl0aWVzTWFwLAorICAgICAg
ICAgICAgICAgICAgICB4bWxCdWlsdEluRW50aXR5Q29kZXMsCisgICAgICAgICAgICAgICAgICAg
IHNpemVvZih4bWxCdWlsdEluRW50aXR5Q29kZXMpIC8gc2l6ZW9mKEVudGl0eSksCisgICAgICAg
ICAgICAgICAgICAgIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIHBvcHVsYXRlTWFwKG1fZW50
aXRpZXNNYXAsCisgICAgICAgICAgICAgICAgICAgIHdvcmRsaXN0LAorICAgICAgICAgICAgICAg
ICAgICBzaXplb2Yod29yZGxpc3QpIC8gc2l6ZW9mKEVudGl0eSksCisgICAgICAgICAgICAgICAg
ICAgIHRydWUpOworfQorCitTdHJpbmcgV2ViRW50aXRpZXM6OmVudGl0eU5hbWVCeUNvZGUoaW50
IGNvZGUpIGNvbnN0Cit7CisgICAgaWYgKG1fZW50aXRpZXNNYXAuY29udGFpbnMoY29kZSkpCisg
ICAgICAgIHJldHVybiBtX2VudGl0aWVzTWFwLmdldChjb2RlKTsKKyAgICByZXR1cm4gIiI7Cit9
CisKK1N0cmluZyBXZWJFbnRpdGllczo6Y29udmVydEVudGl0aWVzSW5TdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBsZW4gPSB2YWx1ZS5sZW5ndGgoKTsK
KyAgICBjb25zdCBVQ2hhciogc3RhcnRQb3MgPSB2YWx1ZS5jaGFyYWN0ZXJzKCk7CisgICAgY29u
c3QgVUNoYXIqIGN1clBvcyA9IHN0YXJ0UG9zOworCisgICAgLy8gRklYTUU6IE9wdGltaXplIC0g
Y3JlYXRlIFN0cmluZ0J1aWxkZXIgb25seSBpZiB2YWx1ZSBoYXMgYW55IGVudGl0aWVzLgorICAg
IFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHdoaWxlIChsZW4tLSkgeworICAgICAgICBpZiAo
bV9lbnRpdGllc01hcC5jb250YWlucygqY3VyUG9zKSkgeworICAgICAgICAgICAgLy8gQXBwZW5k
IGNvbnRlbnQgYmVmb3JlIGVudGl0eSBjb2RlLgorICAgICAgICAgICAgaWYgKGN1clBvcyA+IHN0
YXJ0UG9zKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoU3RyaW5nKHN0YXJ0UG9zLCBj
dXJQb3MgLSBzdGFydFBvcykpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiJiIpOworICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2VudGl0aWVzTWFwLmdldCgqY3VyUG9zKSk7CisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCI7Iik7CisgICAgICAgICAgICBzdGFydFBvcyA9ICsrY3Vy
UG9zOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGN1clBvcysrOworICAgIH0KKyAgICAv
LyBBcHBlbmQgdGhlIHJlbWFpbmluZyBjb250ZW50LgorICAgIGlmIChjdXJQb3MgPiBzdGFydFBv
cykKKyAgICAgICAgcmVzdWx0LmFwcGVuZChTdHJpbmcoc3RhcnRQb3MsIGN1clBvcyAtIHN0YXJ0
UG9zKSk7CisKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFbnRpdGllcy5o
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFbnRpdGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmFkM2MzMTAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkVudGl0aWVzLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRW50aXRpZXNf
aAorI2RlZmluZSBXZWJFbnRpdGllc19oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBX
ZWJFbnRpdGllcyB7CitwdWJsaWM6CisgICAgLy8gJmFwb3M7LCAmcGVyY250OywgJm5zdXA7LCAm
c3VwbDsgYXJlIG5vdCBkZWZpbmVkIGJ5IHRoZSBIVE1MIHN0YW5kYXJkcy4KKyAgICAvLyAgLSBJ
RSBkb2VzIG5vdCBzdXBwb3J0ICZhcG9zOyBhcyBhbiBIVE1MIGVudGl0eSAoYnV0IHN1cHBvcnQg
aXQgYXMgYW4gWE1MCisgICAgLy8gICAgZW50aXR5LikKKyAgICAvLyAgLSBGaXJlZm94IHN1cHBv
cnRzICZhcG9zOyBhcyBhbiBIVE1MIGVudGl0eS4KKyAgICAvLyAgLSBCb3RoIG9mIElFIGFuZCBG
aXJlZm94IGRvbid0IHN1cHBvcnQgJnBlcmNudDssICZuc3VwOyBhbmQgJnN1cGw7LgorICAgIC8v
CisgICAgLy8gQSB3ZWIgcGFnZSBzYXZlZCBieSBDaHJvbWl1bSBzaG91bGQgYmUgYWJsZSB0byBi
ZSByZWFkIGJ5IG90aGVyIGJyb3dzZXJzCisgICAgLy8gc3VjaCBhcyBJRSBhbmQgRmlyZWZveC4g
IENocm9taXVtIHNob3VsZCBwcm9kdWNlIG9ubHkgdGhlIHN0YW5kYXJkIGVudGl0eQorICAgIC8v
IHJlZmVyZW5jZXMgd2hpY2ggb3RoZXIgYnJvd3NlcnMgY2FuIHJlY29nbml6ZS4KKyAgICAvLyBT
byBpZiBzdGFuZGFyZF9odG1sX2VudGl0aWVzXyBpcyB0cnVlLCB3ZSB3aWxsIHVzZSBhIG51bWVy
aWMgY2hhcmFjdGVyCisgICAgLy8gcmVmZXJlbmNlIGZvciAmYXBvczssIGFuZCBkb24ndCB1c2Ug
ZW50aXR5IHJlZmVyZW5jZXMgZm9yICZwZXJjbnQ7LCAmbnN1cDsKKyAgICAvLyBhbmQgJnN1cGw7
IGZvciBzZXJpYWxpemF0aW9uLgorICAgIC8vCisgICAgLy8gSWYgeG1sRW50aXRpZXMgaXMgdHJ1
ZSwgV2ViRW50aXRpZXMgd2lsbCBvbmx5IGNvbnRhaW4gc3RhbmRhcmQgWE1MCisgICAgLy8gZW50
aXRpZXMuCisgICAgZXhwbGljaXQgV2ViRW50aXRpZXMoYm9vbCB4bWxFbnRpdGllcyk7CisKKyAg
ICAvLyBDaGVjayB3aGV0aGVyIHNwZWNpZmllZCB1bmljb2RlIGhhcyBjb3JyZXNwb25kaW5nIGh0
bWwgb3IgeG1sIGJ1aWx0LWluCisgICAgLy8gZW50aXR5IG5hbWUuIElmIHllcywgcmV0dXJuIHRo
ZSBlbnRpdHkgbm90YXRpb24uIElmIG5vdCwgcmV0dXJucyBhbgorICAgIC8vIGVtcHR5IHN0cmlu
Zy4gUGFyYW1ldGVyIGlzSFRNTCBpbmRpY2F0ZXMgY2hlY2sgdGhlIGNvZGUgaW4gaHRtbCBlbnRp
dHkKKyAgICAvLyBtYXAgb3IgaW4geG1sIGVudGl0eSBtYXAuCisgICAgV2ViQ29yZTo6U3RyaW5n
IGVudGl0eU5hbWVCeUNvZGUoaW50IGNvZGUpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyBhIG5l
dyBzdHJpbmcgd2l0aCBjb3JyZXNwb25kaW5nIGVudGl0eSBuYW1lcyByZXBsYWNlZC4KKyAgICBX
ZWJDb3JlOjpTdHJpbmcgY29udmVydEVudGl0aWVzSW5TdHJpbmcoY29uc3QgV2ViQ29yZTo6U3Ry
aW5nJikgY29uc3Q7Citwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFdlYkNvcmU6
OlN0cmluZz4gRW50aXRpZXNNYXBUeXBlOworICAgIC8vIEFuIGludGVybmFsIG9iamVjdCB0aGF0
IG1hcHMgdGhlIFVuaWNvZGUgY2hhcmFjdGVyIHRvIGNvcnJlc3BvbmRpbmcKKyAgICAvLyBlbnRp
dHkgbm90YXRpb24uCisgICAgRW50aXRpZXNNYXBUeXBlIG1fZW50aXRpZXNNYXA7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1w
bC5jcHAKaW5kZXggZjcyMjg2MC4uZWUzZGUyZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGcmFtZUltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJ
bXBsLmNwcApAQCAtMTIyLDYgKzEyMiw3IEBACiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiV2ViQ29uc29sZU1lc3NhZ2UuaCIKICNpbmNsdWRlICJXZWJEYXRhU291cmNlSW1w
bC5oIgorI2luY2x1ZGUgIldlYkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiV2ViRmluZE9wdGlvbnMu
aCIKICNpbmNsdWRlICJXZWJGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50
LmgiCkBAIC0zNDMsNiArMzQ0LDEyIEBAIFdlYkZyYW1lKiBXZWJGcmFtZTo6ZnJhbWVGb3JDdXJy
ZW50Q29udGV4dCgpCiAgICAgcmV0dXJuIFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGZyYW1lKTsK
IH0KIAorV2ViRnJhbWUqIFdlYkZyYW1lOjpmcm9tRnJhbWVPd25lckVsZW1lbnQoY29uc3QgV2Vi
RWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICByZXR1cm4gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWVP
d25lckVsZW1lbnQoCisgICAgICAgIFBhc3NSZWZQdHI8RWxlbWVudD4oZWxlbWVudCkuZ2V0KCkp
OworfQorCiBXZWJTdHJpbmcgV2ViRnJhbWVJbXBsOjpuYW1lKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9mcmFtZS0+dHJlZSgpLT5uYW1lKCk7CkBAIC0zOTEsNiArMzk4LDExIEBAIFdlYlVSTCBX
ZWJGcmFtZUltcGw6Om9wZW5TZWFyY2hEZXNjcmlwdGlvblVSTCgpIGNvbnN0CiAgICAgcmV0dXJu
IFdlYlVSTCgpOwogfQogCitXZWJTdHJpbmcgV2ViRnJhbWVJbXBsOjplbmNvZGluZygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZyYW1lKCktPmxvYWRlcigpLT5lbmNvZGluZygpOworfQorCiBXZWJT
aXplIFdlYkZyYW1lSW1wbDo6c2Nyb2xsT2Zmc2V0KCkgY29uc3QKIHsKICAgICBGcmFtZVZpZXcq
IHZpZXcgPSBmcmFtZVZpZXcoKTsKQEAgLTUxNSw2ICs1MjcsMTMgQEAgV2ViRnJhbWUqIFdlYkZy
YW1lSW1wbDo6ZmluZENoaWxkQnlFeHByZXNzaW9uKGNvbnN0IFdlYlN0cmluZyYgeHBhdGgpIGNv
bnN0CiAgICAgcmV0dXJuIGZyb21GcmFtZShmcmFtZUVsZW1lbnQtPmNvbnRlbnRGcmFtZSgpKTsK
IH0KIAorV2ViRG9jdW1lbnQgV2ViRnJhbWVJbXBsOjpkb2N1bWVudCgpIGNvbnN0Cit7CisgICAg
aWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gV2Vi
RG9jdW1lbnQoKTsKKyAgICByZXR1cm4gV2ViRG9jdW1lbnQobV9mcmFtZS0+ZG9jdW1lbnQoKSk7
Cit9CisKIHZvaWQgV2ViRnJhbWVJbXBsOjpmb3JtcyhXZWJWZWN0b3I8V2ViRm9ybUVsZW1lbnQ+
JiByZXN1bHRzKSBjb25zdAogewogICAgIGlmICghbV9mcmFtZSkKQEAgLTE2MzEsNiArMTY1MCwx
OSBAQCBXZWJGcmFtZUltcGwqIFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKEZyYW1lKiBmcmFtZSkK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVMb2FkZXJDbGllbnRJbXBsKj4oZnJhbWUtPmxv
YWRlcigpLT5jbGllbnQoKSktPndlYkZyYW1lKCk7CiB9CiAKK1dlYkZyYW1lSW1wbCogV2ViRnJh
bWVJbXBsOjpmcm9tRnJhbWVPd25lckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBp
ZiAoIWVsZW1lbnQKKyAgICAgICAgfHwgIWVsZW1lbnQtPmlzRnJhbWVPd25lckVsZW1lbnQoKQor
ICAgICAgICB8fCAoIWVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppZnJhbWVUYWcpCisg
ICAgICAgICAgICAmJiAhZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lVGFnKSkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBmcmFtZUVs
ZW1lbnQgPQorICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRnJhbWVPd25lckVsZW1lbnQqPihlbGVt
ZW50KTsKKyAgICByZXR1cm4gZnJvbUZyYW1lKGZyYW1lRWxlbWVudC0+Y29udGVudEZyYW1lKCkp
OworfQorICAgIAogV2ViVmlld0ltcGwqIFdlYkZyYW1lSW1wbDo6dmlld0ltcGwoKSBjb25zdAog
ewogICAgIGlmICghbV9mcmFtZSkKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RnJhbWVJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCmluZGV4IDA1
MDY3NWIuLjY1OWU3ZjggMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJ
bXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaApAQCAtNjUsNiAr
NjUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJVUkwgdXJsKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBXZWJVUkwgZmF2SWNvblVSTCgpIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViVVJMIG9wZW5T
ZWFyY2hEZXNjcmlwdGlvblVSTCgpIGNvbnN0OworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGVuY29k
aW5nKCkgY29uc3Q7CiAgICAgdmlydHVhbCBXZWJTaXplIHNjcm9sbE9mZnNldCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgV2ViU2l6ZSBjb250ZW50c1NpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGlu
dCBjb250ZW50c1ByZWZlcnJlZFdpZHRoKCkgY29uc3Q7CkBAIC04Miw2ICs4Myw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIFdlYkZyYW1lKiB0cmF2ZXJzZVByZXZpb3VzKGJvb2wgd3JhcCkgY29u
c3Q7CiAgICAgdmlydHVhbCBXZWJGcmFtZSogZmluZENoaWxkQnlOYW1lKGNvbnN0IFdlYlN0cmlu
ZyYpIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViRnJhbWUqIGZpbmRDaGlsZEJ5RXhwcmVzc2lvbihj
b25zdCBXZWJTdHJpbmcmKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYkRvY3VtZW50IGRvY3VtZW50
KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGZvcm1zKFdlYlZlY3RvcjxXZWJGb3JtRWxlbWVu
dD4mKSBjb25zdDsKICAgICB2aXJ0dWFsIFdlYlNlY3VyaXR5T3JpZ2luIHNlY3VyaXR5T3JpZ2lu
KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGdyYW50VW5pdmVyc2FsQWNjZXNzKCk7CkBAIC0x
NTcsNyArMTU5LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgV2ViVVJMIGNvbXBsZXRlVVJMKGNv
bnN0IFdlYlN0cmluZyYgdXJsKSBjb25zdDsKICAgICB2aXJ0dWFsIFdlYlN0cmluZyBjb250ZW50
QXNUZXh0KHNpemVfdCBtYXhDaGFycykgY29uc3Q7CiAgICAgdmlydHVhbCBXZWJTdHJpbmcgY29u
dGVudEFzTWFya3VwKCkgY29uc3Q7Ci0KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJGcmFtZUlt
cGw+IGNyZWF0ZShXZWJGcmFtZUNsaWVudCogY2xpZW50KTsKICAgICB+V2ViRnJhbWVJbXBsKCk7
CiAKQEAgLTE3NCw2ICsxNzUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVhdGVGcmFtZVZpZXco
KTsKIAogICAgIHN0YXRpYyBXZWJGcmFtZUltcGwqIGZyb21GcmFtZShXZWJDb3JlOjpGcmFtZSog
ZnJhbWUpOworICAgIHN0YXRpYyBXZWJGcmFtZUltcGwqIGZyb21GcmFtZU93bmVyRWxlbWVudChX
ZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50KTsKIAogICAgIFdlYlZpZXdJbXBsKiB2aWV3SW1wbCgp
IGNvbnN0OwogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5vZGUuY3BwIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOb2RlLmNwcAppbmRleCA5NjVjNDEyLi41ZGNkMGM5IDEw
MDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5vZGUuY3BwCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViTm9kZS5jcHAKQEAgLTM1LDkgKzM1LDE1IEBACiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEltcGwuaCIKICNpbmNsdWRlICJOb2Rl
LmgiCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIKIAorI2luY2x1ZGUgIldlYkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5jbHVkZSAiV2ViTm9kZUxpc3QuaCIKICNpbmNs
dWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJWZWN0b3IuaCIKKworI2luY2x1ZGUgIm1h
cmt1cC5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIApAQCAtNjEsNiArNjcsMTEg
QEAgdm9pZCBXZWJOb2RlOjphc3NpZ24oY29uc3QgV2ViTm9kZSYgb3RoZXIpCiAgICAgYXNzaWdu
KHApOwogfQogCitXZWJOb2RlOjpOb2RlVHlwZSBXZWJOb2RlOjpub2RlVHlwZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5vZGVUeXBlPihtX3ByaXZhdGUtPm5vZGVUeXBlKCkp
OworfQorCiBXZWJOb2RlIFdlYk5vZGU6OnBhcmVudE5vZGUoKSBjb25zdAogewogICAgIHJldHVy
biBQYXNzUmVmUHRyPE5vZGU+KGNvbnN0X2Nhc3Q8Tm9kZSo+KG1fcHJpdmF0ZS0+cGFyZW50Tm9k
ZSgpKSk7CkBAIC03MSwxOCArODIsMjMgQEAgV2ViU3RyaW5nIFdlYk5vZGU6Om5vZGVOYW1lKCkg
Y29uc3QKICAgICByZXR1cm4gbV9wcml2YXRlLT5ub2RlTmFtZSgpOwogfQogCi1XZWJOb2RlOjpX
ZWJOb2RlKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpOb2RlPiYgbm9kZSkKK1dlYlN0
cmluZyBXZWJOb2RlOjpub2RlVmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUt
Pm5vZGVWYWx1ZSgpOworfQorCitXZWJOb2RlOjpXZWJOb2RlKGNvbnN0IFBhc3NSZWZQdHI8Tm9k
ZT4mIG5vZGUpCiAgICAgOiBtX3ByaXZhdGUoc3RhdGljX2Nhc3Q8V2ViTm9kZVByaXZhdGUqPihu
b2RlLnJlbGVhc2VSZWYoKSkpCiB7CiB9CiAKLVdlYk5vZGUmIFdlYk5vZGU6Om9wZXJhdG9yPShj
b25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Tm9kZT4mIG5vZGUpCitXZWJOb2RlJiBXZWJO
b2RlOjpvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxOb2RlPiYgbm9kZSkKIHsKICAgICBhc3Np
Z24oc3RhdGljX2Nhc3Q8V2ViTm9kZVByaXZhdGUqPihub2RlLnJlbGVhc2VSZWYoKSkpOwogICAg
IHJldHVybiAqdGhpczsKIH0KIAotV2ViTm9kZTo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdl
YkNvcmU6Ok5vZGU+KCkgY29uc3QKK1dlYk5vZGU6Om9wZXJhdG9yIFBhc3NSZWZQdHI8Tm9kZT4o
KSBjb25zdAogewogICAgIHJldHVybiBQYXNzUmVmUHRyPE5vZGU+KGNvbnN0X2Nhc3Q8V2ViTm9k
ZVByaXZhdGUqPihtX3ByaXZhdGUpKTsKIH0KQEAgLTEwMCw0ICsxMTYsNTQgQEAgV2ViRnJhbWUq
IFdlYk5vZGU6OmZyYW1lKCkgY29uc3QKICAgICByZXR1cm4gV2ViRnJhbWVJbXBsOjpmcm9tRnJh
bWUobV9wcml2YXRlLT5kb2N1bWVudCgpLT5mcmFtZSgpKTsKIH0KIAorV2ViRG9jdW1lbnQgV2Vi
Tm9kZTo6ZG9jdW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBXZWJEb2N1bWVudChtX3ByaXZh
dGUtPmRvY3VtZW50KCkpOworfQorCitXZWJOb2RlIFdlYk5vZGU6OmZpcnN0Q2hpbGQoKSBjb25z
dAoreworICAgIHJldHVybiBXZWJOb2RlKG1fcHJpdmF0ZS0+Zmlyc3RDaGlsZCgpKTsKK30KKwor
V2ViTm9kZSBXZWJOb2RlOjpsYXN0Q2hpbGQoKSBjb25zdAoreworICAgIHJldHVybiBXZWJOb2Rl
KG1fcHJpdmF0ZS0+bGFzdENoaWxkKCkpOworfQorCitXZWJOb2RlIFdlYk5vZGU6OnByZXZpb3Vz
U2libGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYk5vZGUobV9wcml2YXRlLT5wcmV2aW91
c1NpYmxpbmcoKSk7Cit9CisKK1dlYk5vZGUgV2ViTm9kZTo6bmV4dFNpYmxpbmcoKSBjb25zdAor
eworICAgIHJldHVybiBXZWJOb2RlKG1fcHJpdmF0ZS0+bmV4dFNpYmxpbmcoKSk7Cit9CisKK2Jv
b2wgV2ViTm9kZTo6aGFzQ2hpbGROb2RlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZS0+aGFzQ2hpbGROb2RlcygpOworfQorCitXZWJOb2RlTGlzdCBXZWJOb2RlOjpjaGlsZE5vZGVz
KCkKK3sKKyAgICByZXR1cm4gV2ViTm9kZUxpc3QobV9wcml2YXRlLT5jaGlsZE5vZGVzKCkpOwor
fQorCitXZWJTdHJpbmcgV2ViTm9kZTo6Y3JlYXRlTWFya3VwKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gV2ViQ29yZTo6Y3JlYXRlTWFya3VwKG1fcHJpdmF0ZSk7Cit9CisKK2Jvb2wgV2ViTm9kZTo6
aXNUZXh0Tm9kZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNUZXh0Tm9kZSgp
OworfQorCitib29sIFdlYk5vZGU6OmlzRWxlbWVudE5vZGUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3ByaXZhdGUtPmlzRWxlbWVudE5vZGUoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5vZGVDb2xsZWN0aW9uLmNwcCBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZUNvbGxlY3Rpb24uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZTUzMmYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYk5vZGVDb2xsZWN0aW9uLmNwcApAQCAtMCwwICsxLDg1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYk5vZGVDb2xsZWN0aW9uLmgiCisKKyNpbmNsdWRl
ICJIVE1MQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorCisjaW5jbHVkZSAiV2ViTm9kZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViTm9kZUNvbGxlY3Rpb246OnJl
c2V0KCkKK3sKKyAgICBhc3NpZ24oMCk7Cit9CisKK3ZvaWQgV2ViTm9kZUNvbGxlY3Rpb246OmFz
c2lnbihjb25zdCBXZWJOb2RlQ29sbGVjdGlvbiYgb3RoZXIpCit7CisgICAgSFRNTENvbGxlY3Rp
b24qIHAgPSBjb25zdF9jYXN0PEhUTUxDb2xsZWN0aW9uKj4ob3RoZXIubV9wcml2YXRlKTsKKyAg
ICBpZiAocCkKKyAgICAgICAgcC0+cmVmKCk7CisgICAgYXNzaWduKHApOworfQorCitXZWJOb2Rl
Q29sbGVjdGlvbjo6V2ViTm9kZUNvbGxlY3Rpb24oY29uc3QgUGFzc1JlZlB0cjxIVE1MQ29sbGVj
dGlvbj4mIGNvbCkKKyAgICA6IG1fcHJpdmF0ZShzdGF0aWNfY2FzdDxIVE1MQ29sbGVjdGlvbio+
KGNvbC5yZWxlYXNlUmVmKCkpKQoreworfQorCit2b2lkIFdlYk5vZGVDb2xsZWN0aW9uOjphc3Np
Z24oSFRNTENvbGxlY3Rpb24qIHApCit7CisgICAgLy8gcCBpcyBhbHJlYWR5IHJlZidkIGZvciB1
cyBieSB0aGUgY2FsbGVyCisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5k
ZXJlZigpOworICAgIG1fcHJpdmF0ZSA9IHA7Cit9CisKK3Vuc2lnbmVkIFdlYk5vZGVDb2xsZWN0
aW9uOjpsZW5ndGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmxlbmd0aCgpOwor
fQorCitXZWJOb2RlIFdlYk5vZGVDb2xsZWN0aW9uOjpuZXh0SXRlbSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIFdlYk5vZGUobV9wcml2YXRlLT5uZXh0SXRlbSgpKTsKK30KKworV2ViTm9kZSBXZWJO
b2RlQ29sbGVjdGlvbjo6Zmlyc3RJdGVtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViTm9kZSht
X3ByaXZhdGUtPmZpcnN0SXRlbSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5vZGVMaXN0LmNwcCBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViTm9kZUxpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmY2OGY5NjEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5v
ZGVMaXN0LmNwcApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYk5vZGVMaXN0LmgiCisKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiTm9kZUxpc3Qu
aCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCisjaW5jbHVkZSAiV2ViTm9kZS5oIgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQg
V2ViTm9kZUxpc3Q6OnJlc2V0KCkKK3sKKyAgICBhc3NpZ24oMCk7Cit9CisKK3ZvaWQgV2ViTm9k
ZUxpc3Q6OmFzc2lnbihjb25zdCBXZWJOb2RlTGlzdCYgb3RoZXIpCit7CisgICAgTm9kZUxpc3Qq
IHAgPSBjb25zdF9jYXN0PE5vZGVMaXN0Kj4ob3RoZXIubV9wcml2YXRlKTsKKyAgICBpZiAocCkK
KyAgICAgICAgcC0+cmVmKCk7CisgICAgYXNzaWduKHApOworfQorCitXZWJOb2RlTGlzdDo6V2Vi
Tm9kZUxpc3QoY29uc3QgUGFzc1JlZlB0cjxOb2RlTGlzdD4mIGNvbCkKKyAgICA6IG1fcHJpdmF0
ZShzdGF0aWNfY2FzdDxOb2RlTGlzdCo+KGNvbC5yZWxlYXNlUmVmKCkpKQoreworfQorCit2b2lk
IFdlYk5vZGVMaXN0Ojphc3NpZ24oTm9kZUxpc3QqIHApCit7CisgICAgLy8gcCBpcyBhbHJlYWR5
IHJlZidkIGZvciB1cyBieSB0aGUgY2FsbGVyCisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAg
bV9wcml2YXRlLT5kZXJlZigpOworICAgIG1fcHJpdmF0ZSA9IHA7Cit9CisKK3Vuc2lnbmVkIFdl
Yk5vZGVMaXN0OjpsZW5ndGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmxlbmd0
aCgpOworfQorCitXZWJOb2RlIFdlYk5vZGVMaXN0OjppdGVtKHNpemVfdCBpbmRleCkgY29uc3QK
K3sKKyAgICByZXR1cm4gV2ViTm9kZShtX3ByaXZhdGUtPml0ZW0oaW5kZXgpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBh
Z2VTZXJpYWxpemVyLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMTAyODUKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcApAQCAt
MCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxp
emVyLmgiCisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KworI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViUGFnZVNlcmlhbGl6ZXJDbGll
bnQuaCIKKyNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplckltcGwuaCIKKyNpbmNsdWRlICJXZWJT
dHJpbmcuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlICJXZWJWZWN0b3IuaCIKKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitib29sIFdl
YlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUoV2ViRnJhbWUqIGZyYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KiBjbGllbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlVSTD4mIGxpbmtz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJT
dHJpbmc+JiBsb2NhbFBhdGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFdlYlN0cmluZyYgbG9jYWxEaXJlY3RvcnlOYW1lKQoreworICAgIFdlYlBhZ2VTZXJpYWxp
emVySW1wbCBzZXJpYWxpemVySW1wbCgKKyAgICAgICAgZnJhbWUsIHJlY3Vyc2l2ZSwgY2xpZW50
LCBsaW5rcywgbG9jYWxQYXRocywgbG9jYWxEaXJlY3RvcnlOYW1lKTsKKyAgICByZXR1cm4gc2Vy
aWFsaXplckltcGwuc2VyaWFsaXplKCk7Cit9CisKK1dlYlN0cmluZyBXZWJQYWdlU2VyaWFsaXpl
cjo6Z2VuZXJhdGVNZXRhQ2hhcnNldERlY2xhcmF0aW9uKGNvbnN0IFdlYlN0cmluZyYgY2hhcnNl
dCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIjxNRVRBIGh0dHAtZXF1aXY9XCJDb250
ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PSVzXCI+IiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhcnNldC51dGY4KCkuZGF0YSgpKTsKK30KKworV2ViU3RyaW5n
IFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZU1hcmtPZlRoZVdlYkRlY2xhcmF0aW9uKGNvbnN0
IFdlYlVSTCYgdXJsKQoreworICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiXG48IS0tIHNhdmVk
IGZyb20gdXJsPSglMDRkKSVzIC0tPlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50Pih1cmwuc3BlYygpLmxlbmd0aCgpKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXJsLnNwZWMoKS5kYXRhKCkpOworfQorCitXZWJTdHJpbmcgV2ViUGFnZVNlcmlhbGl6
ZXI6OmdlbmVyYXRlQmFzZVRhZ0RlY2xhcmF0aW9uKGNvbnN0IFdlYlN0cmluZyYgYmFzZVRhcmdl
dCkKK3sKKyAgICBTdHJpbmcgdGFyZ2V0RGVjbGFyYXRpb247CisgICAgaWYgKCFiYXNlVGFyZ2V0
LmlzRW1wdHkoKSkKKyAgICAgICAgdGFyZ2V0RGVjbGFyYXRpb24gPSBTdHJpbmc6OmZvcm1hdCgi
IHRhcmdldD1cIiVzXCIiLCBiYXNlVGFyZ2V0LnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBT
dHJpbmc6OmZvcm1hdCgiPEJBU0UgaHJlZj1cIi5cIiVzPiIsIHRhcmdldERlY2xhcmF0aW9uLnV0
ZjgoKS5kYXRhKCkpOworfQorCit9ICAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5jcHAgYi9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZDViMmI3ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcApAQCAtMCwwICsxLDU0NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIEhvdyB3
ZSBoYW5kbGUgdGhlIGJhc2UgdGFnIGJldHRlci4KKy8vIEN1cnJlbnQgc3RhdHVzOgorLy8gQXQg
bm93IHRoZSBub3JtYWwgd2F5IHdlIHVzZSB0byBoYW5kbGluZyBiYXNlIHRhZyBpcworLy8gYSkg
Rm9yIHRob3NlIGxpbmtzIHdoaWNoIGhhdmUgY29ycmVzcG9uZGluZyBsb2NhbCBzYXZlZCBmaWxl
cywgc3VjaCBhcworLy8gc2F2YWJsZSBDU1MsIEphdmFTY3JpcHQgZmlsZXMsIHRoZXkgd2lsbCBi
ZSB3cml0dGVuIHRvIHJlbGF0aXZlIFVSTHMgd2hpY2gKKy8vIHBvaW50IHRvIGxvY2FsIHNhdmVk
IGZpbGUuIFdoeSB0aG9zZSBsaW5rcyBjYW4gbm90IGJlIHJlc29sdmVkIGFzIGFic29sdXRlCisv
LyBmaWxlIFVSTHMsIGJlY2F1c2UgaWYgdGhleSBhcmUgcmVzb2x2ZWQgYXMgYWJzb2x1dGUgVVJM
cywgYWZ0ZXIgbW92aW5nIHRoZQorLy8gZmlsZSBsb2NhdGlvbiBmcm9tIG9uZSBkaXJlY3Rvcnkg
dG8gYW5vdGhlciBkaXJlY3RvcnksIHRoZSBmaWxlIFVSTHMgd2lsbAorLy8gYmUgZGVhZCBsaW5r
cy4KKy8vIGIpIEZvciB0aG9zZSBsaW5rcyB3aGljaCBoYXZlIG5vdCBjb3JyZXNwb25kaW5nIGxv
Y2FsIHNhdmVkIGZpbGVzLCBzdWNoIGFzCisvLyBsaW5rcyBpbiBBLCBBUkVBIHRhZ3MsIHRoZXkg
d2lsbCBiZSByZXNvbHZlZCBhcyBhYnNvbHV0ZSBVUkxzLgorLy8gYykgV2UgY29tbWVudCBhbGwg
YmFzZSB0YWdzIHdoZW4gc2VyaWFsemluZyBET00gZm9yIHRoZSBwYWdlLgorLy8gRmlyZUZveCBh
bHNvIHVzZXMgYWJvdmUgd2F5IHRvIGhhbmRsZSBiYXNlIHRhZy4KKy8vCisvLyBQcm9ibGVtOgor
Ly8gVGhpcyB3YXkgY2FuIG5vdCBoYW5kbGUgdGhlIGZvbGxvd2luZyBzaXR1YXRpb246CisvLyB0
aGUgYmFzZSB0YWcgaXMgd3JpdHRlbiBieSBKYXZhU2NyaXB0LgorLy8gRm9yIGV4YW1wbGUuIFRo
ZSBwYWdlICJ3d3cueWFob28uY29tIiB1c2UKKy8vICJkb2N1bWVudC53cml0ZSgnPGJhc2UgaHJl
Zj0iaHR0cDovL3d3dy55YWhvby5jb20vIi4uLicpOyIgdG8gc2V0dXAgYmFzZSBVUkwKKy8vIG9m
IHBhZ2Ugd2hlbiBsb2FkaW5nIHBhZ2UuIFNvIHdoZW4gc2F2aW5nIHBhZ2UgYXMgY29tcGxldGVk
LUhUTUwsIHdlIGFzc3VtZQorLy8gdGhhdCB3ZSBzYXZlICJ3d3cueWFob28uY29tIiB0byAiYzpc
eWFob28uaHRtIi4gQWZ0ZXIgdGhlbiB3ZSBsb2FkIHRoZSBzYXZlZAorLy8gY29tcGxldGVkLUhU
TUwgcGFnZSwgdGhlbiB0aGUgSmF2YVNjcmlwdCB3aWxsIGluc2VydCBhIGJhc2UgdGFnCisvLyA8
YmFzZSBocmVmPSJodHRwOi8vd3d3LnlhaG9vLmNvbS8iLi4uPiB0byBET00sIHNvIGFsbCBVUkxz
IHdoaWNoIHBvaW50IHRvCisvLyBsb2NhbCBzYXZlZCByZXNvdXJjZSBmaWxlcyB3aWxsIGJlIHJl
c29sdmVkIGFzCisvLyAiaHR0cDovL3d3dy55YWhvby5jb20veWFob29fZmlsZXMvLi4uIiwgd2hp
Y2ggd2lsbCBjYXVzZSBhbGwgc2F2ZWQgIHJlc291cmNlCisvLyBmaWxlcyBjYW4gbm90IGJlIGxv
YWRlZCBjb3JyZWN0bHkuIEFsc28gdGhlIHBhZ2Ugd2lsbCBiZSByZW5kZXJlZCB1Z2x5IHNpbmNl
CisvLyBhbGwgc2F2ZWQgc3ViLXJlc291cmNlIGZpbGVzIChzdWNoIGFzIENTUywgSmF2YVNjcmlw
dCBmaWxlcykgYW5kIHN1Yi1mcmFtZQorLy8gZmlsZXMgY2FuIG5vdCBiZSBmZXRjaGVkLgorLy8g
Tm93IEZpcmVGb3gsIElFIGFuZCBXZWJLaXQgYmFzZWQgQnJvd3NlciBhbGwgaGF2ZSB0aGlzIHBy
b2JsZW0uCisvLworLy8gU29sdXRpb246CisvLyBNeSBzb2x1dGlvbiBpcyB0aGF0IHdlIGNvbW1l
bnQgb2xkIGJhc2UgdGFnIGFuZCB3cml0ZSBuZXcgYmFzZSB0YWc6CisvLyA8YmFzZSBocmVmPSIu
IiAuLi4+IGFmdGVyIHRoZSBwcmV2aW91cyBjb21tZW50ZWQgYmFzZSB0YWcuIEluIFdlYktpdCwg
aXQKKy8vIGFsd2F5cyB1c2VzIHRoZSBsYXRlc3QgImhyZWYiIGF0dHJpYnV0ZSBvZiBiYXNlIHRh
ZyB0byBzZXQgZG9jdW1lbnQncyBiYXNlCisvLyBVUkwuIEJhc2VkIG9uIHRoaXMgYmVoYXZpb3Is
IHdoZW4gd2UgZW5jb3VudGVyIGEgYmFzZSB0YWcsIHdlIGNvbW1lbnQgaXQgYW5kCisvLyB3cml0
ZSBhIG5ldyBiYXNlIHRhZyA8YmFzZSBocmVmPSIuIj4gYWZ0ZXIgdGhlIHByZXZpb3VzIGNvbW1l
bnRlZCBiYXNlIHRhZy4KKy8vIFRoZSBuZXcgYWRkZWQgYmFzZSB0YWcgY2FuIGhlbHAgZW5naW5l
IHRvIGxvY2F0ZSBjb3JyZWN0IGJhc2UgVVJMIGZvcgorLy8gY29ycmVjdGx5IGxvYWRpbmcgbG9j
YWwgc2F2ZWQgcmVzb3VyY2UgZmlsZXMuIEFsc28gSSB0aGluayB3ZSBuZWVkIHRvIGluaGVyaXQK
Ky8vIHRoZSBiYXNlIHRhcmdldCB2YWx1ZSBmcm9tIGRvY3VtZW50IG9iamVjdCB3aGVuIGFwcGVu
ZGluZyBuZXcgYmFzZSB0YWcuCisvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgYmFzZSB0YWdzIGlu
IG9yaWdpbmFsIGRvY3VtZW50LCB3ZSB3aWxsIGNvbW1lbnQgYWxsIG9sZAorLy8gYmFzZSB0YWdz
IGFuZCBhcHBlbmQgbmV3IGJhc2UgdGFnIGFmdGVyIGVhY2ggb2xkIGJhc2UgdGFnIGJlY2F1c2Ug
d2UgZG8gbm90CisvLyBrbm93IHRob3NlIG9sZCBiYXNlIHRhZ3MgYXJlIG9yaWdpbmFsIGNvbnRl
bnQgb3IgYWRkZWQgYnkgSmF2YVNjcmlwdC4gSWYKKy8vIHRoZXkgYXJlIGFkZGVkIGJ5IEphdmFT
Y3JpcHQsIGl0IG1lYW5zIHdoZW4gbG9hZGluZyBzYXZlZCBwYWdlLCB0aGUgc2NyaXB0KHMpCisv
LyB3aWxsIHN0aWxsIGluc2VydCBiYXNlIHRhZyhzKSB0byBET00sIHNvIHRoZSBuZXcgYWRkZWQg
YmFzZSB0YWcocykgY2FuCisvLyBvdmVycmlkZSB0aGUgaW5jb3JyZWN0IGJhc2UgVVJMIGFuZCBt
YWtlIHN1cmUgd2UgYWx3YXkgbG9hZCBjb3JyZWN0IGxvY2FsCisvLyBzYXZlZCByZXNvdXJjZSBm
aWxlcy4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVy
SW1wbC5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudFR5cGUu
aCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNs
dWRlICJIVE1MQWxsQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5j
bHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE1ldGFFbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU3RyaW5nQnVpbGRlci5oIgorI2luY2x1ZGUgIlRleHRF
bmNvZGluZy5oIgorI2luY2x1ZGUgIm1hcmt1cC5oIgorCisjaW5jbHVkZSAiRE9NVXRpbGl0aWVz
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgorI2luY2x1ZGUgIldlYlVSTC5o
IgorI2luY2x1ZGUgIldlYlZlY3Rvci5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIE1heGltdW0gbGVuZ3RoIG9mIGRhdGEgYnVmZmVyIHdo
aWNoIGlzIHVzZWQgdG8gdGVtcG9yYXJ5IHNhdmUgZ2VuZXJhdGVkCisvLyBodG1sIGNvbnRlbnQg
ZGF0YS4gVGhpcyBpcyBhIHNvZnQgbGltaXQgd2hpY2ggbWlnaHQgYmUgcGFzc2VkIGlmIGEgdmVy
eSBsYXJnZQorLy8gY29udGVnaW91cyBzdHJpbmcgaXMgZm91bmQgaW4gdGhlIHBhZ2UuCitzdGF0
aWMgY29uc3QgdW5zaWduZWQgZGF0YUJ1ZmZlckNhcGFjaXR5ID0gNjU1MzY7CisKK1dlYlBhZ2VT
ZXJpYWxpemVySW1wbDo6U2VyaWFsaXplRG9tUGFyYW06OlNlcmlhbGl6ZURvbVBhcmFtKGNvbnN0
IEtVUkwmIGN1cnJlbnRGcmFtZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHRFbmNvZGluZyYgdGV4dEVuY29k
aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRG9jdW1lbnQqIGRvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5TmFtZSkK
KyAgICA6IGN1cnJlbnRGcmFtZVVSTChjdXJyZW50RnJhbWVVUkwpCisgICAgLCB0ZXh0RW5jb2Rp
bmcodGV4dEVuY29kaW5nKQorICAgICwgZG9jKGRvYykKKyAgICAsIGRpcmVjdG9yeU5hbWUoZGly
ZWN0b3J5TmFtZSkKKyAgICAsIGhhc0RvY3R5cGUoZmFsc2UpCisgICAgLCBoYXNDaGVja2VkTWV0
YShmYWxzZSkKKyAgICAsIHNraXBNZXRhRWxlbWVudCgwKQorICAgICwgaXNJblNjcmlwdE9yU3R5
bGVUYWcoZmFsc2UpCisgICAgLCBoYXNEb2NEZWNsYXJhdGlvbihmYWxzZSkKK3sKKyAgICAvLyBD
YWNoZSB0aGUgdmFsdWUgc2luY2Ugd2UgY2hlY2sgaXQgbG90cyBvZiB0aW1lcy4KKyAgICBpc0hU
TUxEb2N1bWVudCA9IGRvYy0+aXNIVE1MRG9jdW1lbnQoKTsKK30KKworU3RyaW5nIFdlYlBhZ2VT
ZXJpYWxpemVySW1wbDo6cHJlQWN0aW9uQmVmb3JlU2VyaWFsaXplT3BlblRhZygKKyAgICBjb25z
dCBFbGVtZW50KiBlbGVtZW50LCBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0sIGJvb2wqIG5lZWRT
a2lwKQoreworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworCisgICAgKm5lZWRTa2lwID0gZmFs
c2U7CisgICAgaWYgKHBhcmFtLT5pc0hUTUxEb2N1bWVudCkgeworICAgICAgICAvLyBTa2lwIHRo
ZSBvcGVuIHRhZyBvZiBvcmlnaW5hbCBNRVRBIHRhZyB3aGljaCBkZWNsYXJlIGNoYXJzZXQgc2lu
Y2Ugd2UKKyAgICAgICAgLy8gaGF2ZSBvdmVycmlkZWQgdGhlIE1FVEEgd2hpY2ggaGF2ZSBjb3Jy
ZWN0IGNoYXJzZXQgZGVjbGFyYXRpb24gYWZ0ZXIKKyAgICAgICAgLy8gc2VyaWFsaXppbmcgb3Bl
biB0YWcgb2YgSEVBRCBlbGVtZW50LgorICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Om1ldGFUYWcpKSB7CisgICAgICAgICAgICBjb25zdCBIVE1MTWV0YUVsZW1lbnQq
IG1ldGEgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MTWV0YUVsZW1lbnQqPihlbGVtZW50KTsKKyAg
ICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIE1FVEEgdGFnIGhhcyBkZWNsYXJlZCBjaGFy
c2V0IG9yIG5vdC4KKyAgICAgICAgICAgIFN0cmluZyBlcXVpdiA9IG1ldGEtPmh0dHBFcXVpdigp
OworICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAiY29udGVudC10eXBl
IikpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgY29udGVudCA9IG1ldGEtPmNvbnRlbnQoKTsK
KyAgICAgICAgICAgICAgICBpZiAoY29udGVudC5sZW5ndGgoKSAmJiBjb250ZW50LmNvbnRhaW5z
KCJjaGFyc2V0IiwgZmFsc2UpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgTUVUQSB0
YWcgZGVjbGFyZWQgY2hhcnNldCwgd2UgbmVlZCB0byBza2lwIGl0IHdoZW4KKyAgICAgICAgICAg
ICAgICAgICAgLy8gc2VyaWFsaXppbmcgRE9NLgorICAgICAgICAgICAgICAgICAgICBwYXJhbS0+
c2tpcE1ldGFFbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgICAgICAgICAgICAgKm5lZWRTa2lw
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKSB7CisgICAgICAg
ICAgICAvLyBDaGVjayBzb21ldGhpbmcgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIG9wZW4gdGFnIG9m
IEhFQUQgZWxlbWVudC4KKyAgICAgICAgICAgIC8vIEZpcnN0IHdlIGFkZCBkb2MgdHlwZSBkZWNs
YXJhdGlvbiBpZiBvcmlnaW5hbCBkb2MgaGFzIGl0LgorICAgICAgICAgICAgaWYgKCFwYXJhbS0+
aGFzRG9jdHlwZSkgeworICAgICAgICAgICAgICAgIHBhcmFtLT5oYXNEb2N0eXBlID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNyZWF0ZU1hcmt1cChwYXJhbS0+ZG9jLT5k
b2N0eXBlKCkpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIE1PVFcgZGVj
bGFyYXRpb24gYmVmb3JlIGh0bWwgdGFnLgorICAgICAgICAgICAgLy8gU2VlIGh0dHA6Ly9tc2Ru
Mi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1Mzc2MjgoVlMuODUpLmFzcHguCisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZU1hcmtPZlRo
ZVdlYkRlY2xhcmF0aW9uKHBhcmFtLT5jdXJyZW50RnJhbWVVUkwpKTsKKyAgICAgICAgfSBlbHNl
IGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmFzZVRhZykpIHsKKyAgICAgICAg
ICAgIC8vIENvbW1lbnQgdGhlIEJBU0UgdGFnIHdoZW4gc2VyaWFsaXppbmcgZG9tLgorICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiPCEtLSIpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gV3JpdGUgWE1MIGRlY2xhcmF0aW9uLgorICAgICAgICBpZiAoIXBhcmFtLT5oYXNE
b2NEZWNsYXJhdGlvbikgeworICAgICAgICAgICAgcGFyYW0tPmhhc0RvY0RlY2xhcmF0aW9uID0g
dHJ1ZTsKKyAgICAgICAgICAgIC8vIEdldCBlbmNvZGluZyBpbmZvLgorICAgICAgICAgICAgU3Ry
aW5nIHhtbEVuY29kaW5nID0gcGFyYW0tPmRvYy0+eG1sRW5jb2RpbmcoKTsKKyAgICAgICAgICAg
IGlmICh4bWxFbmNvZGluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgeG1sRW5jb2Rpbmcg
PSBwYXJhbS0+ZG9jLT5mcmFtZSgpLT5sb2FkZXIoKS0+ZW5jb2RpbmcoKTsKKyAgICAgICAgICAg
IGlmICh4bWxFbmNvZGluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgeG1sRW5jb2Rpbmcg
PSBVVEY4RW5jb2RpbmcoKS5uYW1lKCk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCI8P3ht
bCB2ZXJzaW9uPVwiIik7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHBhcmFtLT5kb2MtPnht
bFZlcnNpb24oKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJcIiBlbmNvZGluZz1cIiIp
OworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh4bWxFbmNvZGluZyk7CisgICAgICAgICAgICBp
ZiAocGFyYW0tPmRvYy0+eG1sU3RhbmRhbG9uZSgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoIlwiIHN0YW5kYWxvbmU9XCJ5ZXMiKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
IlwiPz5cbiIpOworICAgICAgICB9CisgICAgICAgIC8vIEFkZCBkb2MgdHlwZSBkZWNsYXJhdGlv
biBpZiBvcmlnaW5hbCBkb2MgaGFzIGl0LgorICAgICAgICBpZiAoIXBhcmFtLT5oYXNEb2N0eXBl
KSB7CisgICAgICAgICAgICBwYXJhbS0+aGFzRG9jdHlwZSA9IHRydWU7CisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKGNyZWF0ZU1hcmt1cChwYXJhbS0+ZG9jLT5kb2N0eXBlKCkpKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBX
ZWJQYWdlU2VyaWFsaXplckltcGw6OnBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZU9wZW5UYWcoCisg
ICAgY29uc3QgRWxlbWVudCogZWxlbWVudCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQorewor
ICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworCisgICAgcGFyYW0tPmhhc0FkZGVkQ29udGVudHNC
ZWZvcmVFbmQgPSBmYWxzZTsKKyAgICBpZiAoIXBhcmFtLT5pc0hUTUxEb2N1bWVudCkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworICAgIC8vIENoZWNrIGFmdGVyIHByb2Nlc3Np
bmcgdGhlIG9wZW4gdGFnIG9mIEhFQUQgZWxlbWVudAorICAgIGlmICghcGFyYW0tPmhhc0NoZWNr
ZWRNZXRhCisgICAgICAgICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkVGFn
KSkgeworICAgICAgICBwYXJhbS0+aGFzQ2hlY2tlZE1ldGEgPSB0cnVlOworICAgICAgICAvLyBD
aGVjayBtZXRhIGVsZW1lbnQuIFdlYktpdCBvbmx5IHByZS1wYXJzZSB0aGUgZmlyc3QgNTEyIGJ5
dGVzCisgICAgICAgIC8vIG9mIHRoZSBkb2N1bWVudC4gSWYgdGhlIHdob2xlIDxIRUFEPiBpcyBs
YXJnZXIgYW5kIG1ldGEgaXMgdGhlCisgICAgICAgIC8vIGVuZCBvZiBoZWFkIHBhcnQsIHRoZW4g
dGhpcyBraW5kIG9mIHBhZ2VzIGFyZW4ndCBkZWNvZGVkIGNvcnJlY3RseQorICAgICAgICAvLyBi
ZWNhdXNlIG9mIHRoaXMgaXNzdWUuIFNvIHdoZW4gd2Ugc2VyaWFsaXplIHRoZSBET00sIHdlIG5l
ZWQgdG8KKyAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBtZXRhIHdpbGwgaW4gZmlyc3QgY2hpbGQg
b2YgaGVhZCB0YWcuCisgICAgICAgIC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjYyMS4KKyAgICAgICAgLy8gRmlyc3Qgd2UgZ2VuZXJhdGUgbmV3IGNvbnRl
bnQgZm9yIHdyaXRpbmcgY29ycmVjdCBNRVRBIGVsZW1lbnQuCisgICAgICAgIHJlc3VsdC5hcHBl
bmQoV2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlTWV0YUNoYXJzZXREZWNsYXJhdGlvbigKKyAg
ICAgICAgICAgIFN0cmluZyhwYXJhbS0+dGV4dEVuY29kaW5nLm5hbWUoKSkpKTsKKworICAgICAg
ICBwYXJhbS0+aGFzQWRkZWRDb250ZW50c0JlZm9yZUVuZCA9IHRydWU7CisgICAgICAgIC8vIFdp
bGwgc2VhcmNoIGVhY2ggTUVUQSB3aGljaCBoYXMgY2hhcnNldCBkZWNsYXJhdGlvbiwgYW5kIHNr
aXAgdGhlbSBhbGwKKyAgICAgICAgLy8gaW4gUHJlQWN0aW9uQmVmb3JlU2VyaWFsaXplT3BlblRh
Zy4KKyAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHRU
YWcpCisgICAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5
bGVUYWcpKSB7CisgICAgICAgIHBhcmFtLT5pc0luU2NyaXB0T3JTdHlsZVRhZyA9IHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworfQorCitTdHJpbmcgV2ViUGFn
ZVNlcmlhbGl6ZXJJbXBsOjpwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVFbmRUYWcoCisgICAgY29u
c3QgRWxlbWVudCogZWxlbWVudCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLCBib29sKiBuZWVk
U2tpcCkKK3sKKyAgICBTdHJpbmcgcmVzdWx0OworCisgICAgKm5lZWRTa2lwID0gZmFsc2U7Cisg
ICAgaWYgKCFwYXJhbS0+aXNIVE1MRG9jdW1lbnQpCisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgLy8gU2tpcCB0aGUgZW5kIHRhZyBvZiBvcmlnaW5hbCBNRVRBIHRhZyB3aGljaCBkZWNsYXJl
IGNoYXJzZXQuCisgICAgLy8gTmVlZCBub3QgdG8gY2hlY2sgd2hldGhlciBpdCdzIE1FVEEgdGFn
IHNpbmNlIHdlIGd1YXJhbnRlZQorICAgIC8vIHNraXBNZXRhRWxlbWVudCBpcyBkZWZpbml0ZWx5
IE1FVEEgdGFnIGlmIGl0J3Mgbm90IDAuCisgICAgaWYgKHBhcmFtLT5za2lwTWV0YUVsZW1lbnQg
PT0gZWxlbWVudCkKKyAgICAgICAgKm5lZWRTa2lwID0gdHJ1ZTsKKyAgICBlbHNlIGlmIChlbGVt
ZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0VGFnKQorICAgICAgICAgICAgIHx8IGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZVRhZykpIHsKKyAgICAgICAgQVNTRVJU
KHBhcmFtLT5pc0luU2NyaXB0T3JTdHlsZVRhZyk7CisgICAgICAgIHBhcmFtLT5pc0luU2NyaXB0
T3JTdHlsZVRhZyA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8v
IEFmdGVyIHdlIGZpbmlzaCBzZXJpYWxpemluZyBlbmQgdGFnIG9mIGEgZWxlbWVudCwgd2UgZ2l2
ZSB0aGUgdGFyZ2V0CisvLyBlbGVtZW50IGEgY2hhbmNlIHRvIGRvIHNvbWUgcG9zdCB3b3JrIHRv
IGFkZCBzb21lIGFkZGl0aW9uYWwgZGF0YS4KK1N0cmluZyBXZWJQYWdlU2VyaWFsaXplckltcGw6
OnBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZUVuZFRhZygKKyAgICBjb25zdCBFbGVtZW50KiBlbGVt
ZW50LCBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pCit7CisgICAgU3RyaW5nQnVpbGRlciByZXN1
bHQ7CisKKyAgICBpZiAoIXBhcmFtLT5pc0hUTUxEb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC50b1N0cmluZygpOworICAgIC8vIENvbW1lbnQgdGhlIEJBU0UgdGFnIHdoZW4gc2VyaWFs
aXppbmcgRE9NLgorICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmFzZVRh
ZykpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiLS0+Iik7CisgICAgICAgIC8vIEFwcGVuZCBh
IG5ldyBiYXNlIHRhZyBkZWNsYXJhdGlvbi4KKyAgICAgICAgcmVzdWx0LmFwcGVuZChXZWJQYWdl
U2VyaWFsaXplcjo6Z2VuZXJhdGVCYXNlVGFnRGVjbGFyYXRpb24oCisgICAgICAgICAgICBwYXJh
bS0+ZG9jLT5iYXNlVGFyZ2V0KCkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0LnRvU3Ry
aW5nKCk7Cit9CisKK3ZvaWQgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpzYXZlSFRNTENvbnRlbnRU
b0J1ZmZlcigKKyAgICBjb25zdCBTdHJpbmcmIHJlc3VsdCwgU2VyaWFsaXplRG9tUGFyYW0qIHBh
cmFtKQoreworICAgIG1fZGF0YUJ1ZmZlci5hcHBlbmQocmVzdWx0KTsKKyAgICBlbmNvZGVBbmRG
bHVzaEJ1ZmZlcihXZWJQYWdlU2VyaWFsaXplckNsaWVudDo6Q3VycmVudEZyYW1lSXNOb3RGaW5p
c2hlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAwKTsKK30KKwordm9pZCBXZWJQYWdlU2VyaWFsaXplckltcGw6OmVuY29kZUFuZEZs
dXNoQnVmZmVyKAorICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50OjpQYWdlU2VyaWFsaXphdGlv
blN0YXR1cyBzdGF0dXMsCisgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLAorICAgIGJvb2wg
Zm9yY2UpCit7CisgICAgLy8gRGF0YSBidWZmZXIgaXMgbm90IGZ1bGwgbm9yIGRvIHdlIHdhbnQg
dG8gZm9yY2UgZmx1c2guCisgICAgaWYgKCFmb3JjZSAmJiBtX2RhdGFCdWZmZXIubGVuZ3RoKCkg
PD0gZGF0YUJ1ZmZlckNhcGFjaXR5KQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgY29u
dGVudCA9IG1fZGF0YUJ1ZmZlci50b1N0cmluZygpOworICAgIG1fZGF0YUJ1ZmZlci5jbGVhcigp
OworCisgICAgLy8gQ29udmVydCB0aGUgdW5pY29kZSBjb250ZW50IHRvIHRhcmdldCBlbmNvZGlu
ZworICAgIENTdHJpbmcgZW5jb2RlZENvbnRlbnQgPSBwYXJhbS0+dGV4dEVuY29kaW5nLmVuY29k
ZSgKKyAgICAgICAgY29udGVudC5jaGFyYWN0ZXJzKCksIGNvbnRlbnQubGVuZ3RoKCksIEVudGl0
aWVzRm9yVW5lbmNvZGFibGVzKTsKKworICAgIC8vIFNlbmQgcmVzdWx0IHRvIHRoZSBjbGllbnQu
CisgICAgbV9jbGllbnQtPmRpZFNlcmlhbGl6ZURhdGFGb3JGcmFtZShwYXJhbS0+Y3VycmVudEZy
YW1lVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ1N0cmlu
ZyhlbmNvZGVkQ29udGVudC5kYXRhKCksIGVuY29kZWRDb250ZW50Lmxlbmd0aCgpKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyk7Cit9CisKK3ZvaWQgV2Vi
UGFnZVNlcmlhbGl6ZXJJbXBsOjpvcGVuVGFnVG9TdHJpbmcoY29uc3QgRWxlbWVudCogZWxlbWVu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXpl
RG9tUGFyYW0qIHBhcmFtKQoreworICAgIC8vIEZJWE1FOiB1c2UgU3RyaW5nQnVpbGRlciBpbnN0
ZWFkIG9mIFN0cmluZy4KKyAgICBib29sIG5lZWRTa2lwOworICAgIC8vIERvIHByZSBhY3Rpb24g
Zm9yIG9wZW4gdGFnLgorICAgIFN0cmluZyByZXN1bHQgPSBwcmVBY3Rpb25CZWZvcmVTZXJpYWxp
emVPcGVuVGFnKGVsZW1lbnQsIHBhcmFtLCAmbmVlZFNraXApOworICAgIGlmIChuZWVkU2tpcCkK
KyAgICAgICAgcmV0dXJuOworICAgIC8vIEFkZCBvcGVuIHRhZworICAgIHJlc3VsdCArPSAiPCIg
KyBlbGVtZW50LT5ub2RlTmFtZSgpOworICAgIC8vIEdvIHRocm91Z2ggYWxsIGF0dHJpYnV0ZXMg
YW5kIHNlcmlhbGl6ZSB0aGVtLgorICAgIGNvbnN0IE5hbWVkTm9kZU1hcCAqYXR0ck1hcCA9IGVs
ZW1lbnQtPmF0dHJpYnV0ZXModHJ1ZSk7CisgICAgaWYgKGF0dHJNYXApIHsKKyAgICAgICAgdW5z
aWduZWQgbnVtQXR0cnMgPSBhdHRyTWFwLT5sZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bUF0dHJzOyBpKyspIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSAiICI7
CisgICAgICAgICAgICAvLyBBZGQgYXR0cmlidXRlIHBhaXIKKyAgICAgICAgICAgIGNvbnN0IEF0
dHJpYnV0ZSAqYXR0cmlidXRlID0gYXR0ck1hcC0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAg
ICAgIHJlc3VsdCArPSBhdHRyaWJ1dGUtPm5hbWUoKS50b1N0cmluZygpOworICAgICAgICAgICAg
cmVzdWx0ICs9ICI9XCIiOworICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGUtPnZhbHVlKCkuaXNF
bXB0eSgpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBhdHRyVmFsdWUgPSBhdHRy
aWJ1dGUtPnZhbHVlKCk7CisKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHdlIG5l
ZWQgdG8gcmVwbGFjZSBzb21lIHJlc291cmNlIGxpbmtzCisgICAgICAgICAgICAgICAgLy8gd2l0
aCBsb2NhbCByZXNvdXJjZSBwYXRocy4KKyAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSA9IGF0dHJpYnV0ZS0+bmFtZSgpOworICAgICAgICAgICAgICAgIGlmIChl
bGVtZW50SGFzTGVnYWxMaW5rQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJOYW1lKSkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBGb3IgbGlua3Mgc3RhcnQgd2l0aCAiamF2YXNjcmlwdDoiLCB3ZSBk
byBub3QgY2hhbmdlIGl0LgorICAgICAgICAgICAgICAgICAgICBpZiAoYXR0clZhbHVlLnN0YXJ0
c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ICs9IGF0dHJWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBHZXQgdGhlIGFic29sdXRlIGxpbmsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFN0cmluZyBjb21wbGV0ZVVSTCA9IHBhcmFtLT5kb2MtPmNvbXBsZXRlVVJMKGF0dHJW
YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHdlIGhhdmUg
bG9jYWwgZmlsZXMgZm9yIHRob3NlIGxpbmsuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bV9sb2NhbExpbmtzLmNvbnRhaW5zKGNvbXBsZXRlVVJMKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghbV9sb2NhbERpcmVjdG9yeU5hbWUuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gIi4vIiArIG1fbG9jYWxEaXJlY3RvcnlO
YW1lICsgIi8iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBtX2xvY2Fs
TGlua3MuZ2V0KGNvbXBsZXRlVVJMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjb21wbGV0ZVVSTDsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChwYXJhbS0+aXNIVE1MRG9jdW1lbnQpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgKz0gbV9odG1sRW50aXRpZXMuY29udmVydEVudGl0aWVzSW5TdHJpbmcoYXR0clZh
bHVlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ICs9IG1feG1sRW50aXRpZXMuY29udmVydEVudGl0aWVzSW5TdHJpbmcoYXR0clZhbHVl
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHQg
Kz0gIlwiIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIERvIHBvc3QgYWN0aW9uIGZvciBv
cGVuIHRhZy4KKyAgICBTdHJpbmcgYWRkZWRDb250ZW50cyA9IHBvc3RBY3Rpb25BZnRlclNlcmlh
bGl6ZU9wZW5UYWcoZWxlbWVudCwgcGFyYW0pOworICAgIC8vIENvbXBsZXRlIHRoZSBvcGVuIHRh
ZyBmb3IgZWxlbWVudCB3aGVuIGl0IGhhcyBjaGlsZC9jaGlsZHJlbi4KKyAgICBpZiAoZWxlbWVu
dC0+aGFzQ2hpbGROb2RlcygpIHx8IHBhcmFtLT5oYXNBZGRlZENvbnRlbnRzQmVmb3JlRW5kKQor
ICAgICAgICByZXN1bHQgKz0gIj4iOworICAgIC8vIEFwcGVuZCB0aGUgYWRkZWQgY29udGVudHMg
Z2VuZXJhdGUgaW4gIHBvc3QgYWN0aW9uIG9mIG9wZW4gdGFnLgorICAgIHJlc3VsdCArPSBhZGRl
ZENvbnRlbnRzOworICAgIC8vIFNhdmUgdGhlIHJlc3VsdCB0byBkYXRhIGJ1ZmZlci4KKyAgICBz
YXZlSFRNTENvbnRlbnRUb0J1ZmZlcihyZXN1bHQsIHBhcmFtKTsKK30KKworLy8gU2VyaWFsaXpl
IGVuZCB0YWcgb2YgYW4gc3BlY2lmaWVkIGVsZW1lbnQuCit2b2lkIFdlYlBhZ2VTZXJpYWxpemVy
SW1wbDo6ZW5kVGFnVG9TdHJpbmcoY29uc3QgRWxlbWVudCogZWxlbWVudCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0p
Cit7CisgICAgYm9vbCBuZWVkU2tpcDsKKyAgICAvLyBEbyBwcmUgYWN0aW9uIGZvciBlbmQgdGFn
LgorICAgIFN0cmluZyByZXN1bHQgPSBwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVFbmRUYWcoZWxl
bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJm5lZWRTa2lwKTsKKyAgICBpZiAobmVlZFNraXApCisgICAgICAgIHJldHVybjsKKyAgICAv
LyBXcml0ZSBlbmQgdGFnIHdoZW4gZWxlbWVudCBoYXMgY2hpbGQvY2hpbGRyZW4uCisgICAgaWYg
KGVsZW1lbnQtPmhhc0NoaWxkTm9kZXMoKSB8fCBwYXJhbS0+aGFzQWRkZWRDb250ZW50c0JlZm9y
ZUVuZCkgeworICAgICAgICByZXN1bHQgKz0gIjwvIjsKKyAgICAgICAgcmVzdWx0ICs9IGVsZW1l
bnQtPm5vZGVOYW1lKCk7CisgICAgICAgIHJlc3VsdCArPSAiPiI7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHdyaXRlIGVuZCB0YWcgZm9yIGVtcHR5
IGVsZW1lbnQuCisgICAgICAgIGlmIChwYXJhbS0+aXNIVE1MRG9jdW1lbnQpIHsKKyAgICAgICAg
ICAgIHJlc3VsdCArPSAiPiI7CisgICAgICAgICAgICBjb25zdCBIVE1MRWxlbWVudCogaHRtbEVs
ZW1lbnQgPQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihlbGVt
ZW50KTsKKyAgICAgICAgICAgIGlmIChodG1sRWxlbWVudC0+ZW5kVGFnUmVxdWlyZW1lbnQoKSA9
PSBUYWdTdGF0dXNSZXF1aXJlZCkgeworICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gd3Jp
dGUgZW5kIHRhZyB3aGVuIGl0IGlzIHJlcXVpcmVkLgorICAgICAgICAgICAgICAgIHJlc3VsdCAr
PSAiPC8iOworICAgICAgICAgICAgICAgIHJlc3VsdCArPSBlbGVtZW50LT5ub2RlTmFtZSgpOwor
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiPiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBGb3IgeG1sIGJhc2UgZG9jdW1lbnQuCisgICAgICAgICAg
ICByZXN1bHQgKz0gIiAvPiI7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gRG8gcG9zdCBhY3Rp
b24gZm9yIGVuZCB0YWcuCisgICAgcmVzdWx0ICs9IHBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZUVu
ZFRhZyhlbGVtZW50LCBwYXJhbSk7CisgICAgLy8gU2F2ZSB0aGUgcmVzdWx0IHRvIGRhdGEgYnVm
ZmVyLgorICAgIHNhdmVIVE1MQ29udGVudFRvQnVmZmVyKHJlc3VsdCwgcGFyYW0pOworfQorCit2
b2lkIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6YnVpbGRDb250ZW50Rm9yTm9kZShjb25zdCBOb2Rl
KiBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQoreworICAgIHN3aXRjaCAobm9kZS0+bm9kZVR5cGUo
KSkgeworICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOgorICAgICAgICAvLyBQcm9jZXNzIG9w
ZW4gdGFnIG9mIGVsZW1lbnQuCisgICAgICAgIG9wZW5UYWdUb1N0cmluZyhzdGF0aWNfY2FzdDxj
b25zdCBFbGVtZW50Kj4obm9kZSksIHBhcmFtKTsKKyAgICAgICAgLy8gV2FsayB0aHJvdWdoIHRo
ZSBjaGlsZHJlbiBub2RlcyBhbmQgcHJvY2VzcyBpdC4KKyAgICAgICAgZm9yIChjb25zdCBOb2Rl
ICpjaGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCkpCisgICAgICAgICAgICBidWlsZENvbnRlbnRGb3JOb2RlKGNoaWxkLCBwYXJhbSk7
CisgICAgICAgIC8vIFByb2Nlc3MgZW5kIHRhZyBvZiBlbGVtZW50LgorICAgICAgICBlbmRUYWdU
b1N0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50Kj4obm9kZSksIHBhcmFtKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBOb2RlOjpURVhUX05PREU6CisgICAgICAgIHNhdmVIVE1MQ29u
dGVudFRvQnVmZmVyKGNyZWF0ZU1hcmt1cChub2RlKSwgcGFyYW0pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIE5vZGU6OkFUVFJJQlVURV9OT0RFOgorICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRf
Tk9ERToKKyAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6CisgICAgICAgIC8v
IFNob3VsZCBub3QgZXhpc3QuCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICBicmVhazsKKyAgICAvLyBEb2N1bWVudCB0eXBlIG5vZGUgY2FuIGJlIGluIERPTT8KKyAgICBj
YXNlIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERToKKyAgICAgICAgcGFyYW0tPmhhc0RvY3R5cGUg
PSB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIEZvciBvdGhlciB0eXBlIG5vZGUsIGNh
bGwgZGVmYXVsdCBhY3Rpb24uCisgICAgICAgIHNhdmVIVE1MQ29udGVudFRvQnVmZmVyKGNyZWF0
ZU1hcmt1cChub2RlKSwgcGFyYW0pOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK1dlYlBh
Z2VTZXJpYWxpemVySW1wbDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsKFdlYkZyYW1lKiBmcmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJz
aXZlU2VyaWFsaXphdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KiBjbGllbnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViVVJMPiYgbGlu
a3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBX
ZWJWZWN0b3I8V2ViU3RyaW5nPiYgbG9jYWxQYXRocywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbG9jYWxEaXJlY3RvcnlOYW1l
KQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9yZWN1cnNpdmVTZXJpYWxpemF0aW9u
KHJlY3Vyc2l2ZVNlcmlhbGl6YXRpb24pCisgICAgLCBtX2ZyYW1lc0NvbGxlY3RlZChmYWxzZSkK
KyAgICAsIG1fbG9jYWxEaXJlY3RvcnlOYW1lKGxvY2FsRGlyZWN0b3J5TmFtZSkKKyAgICAsIG1f
aHRtbEVudGl0aWVzKGZhbHNlKQorICAgICwgbV94bWxFbnRpdGllcyh0cnVlKQoreworICAgIC8v
IE11c3Qgc3BlY2lmeSBhdmFpbGFibGUgd2ViZnJhbWUuCisgICAgQVNTRVJUKGZyYW1lKTsKKyAg
ICBtX3NwZWNpZmllZFdlYkZyYW1lSW1wbCA9IHN0YXRpY19jYXN0PFdlYkZyYW1lSW1wbCo+KGZy
YW1lKTsKKyAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBub24gMCBjbGllbnQuCisgICAgQVNTRVJU
KGNsaWVudCk7CisgICAgLy8gQnVpbGQgbG9jYWwgcmVzb3VyY2VzIG1hcC4KKyAgICBBU1NFUlQo
bGlua3Muc2l6ZSgpID09IGxvY2FsUGF0aHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxpbmtzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIEtVUkwgdXJsID0gbGlua3NbaV07
CisgICAgICAgIEFTU0VSVCghbV9sb2NhbExpbmtzLmNvbnRhaW5zKHVybC5zdHJpbmcoKSkpOwor
ICAgICAgICBtX2xvY2FsTGlua3Muc2V0KHVybC5zdHJpbmcoKSwgbG9jYWxQYXRoc1tpXSk7Cisg
ICAgfQorCisgICAgQVNTRVJUKCFtX2RhdGFCdWZmZXIubGVuZ3RoKCkpOworfQorCit2b2lkIFdl
YlBhZ2VTZXJpYWxpemVySW1wbDo6Y29sbGVjdFRhcmdldEZyYW1lcygpCit7CisgICAgQVNTRVJU
KCFtX2ZyYW1lc0NvbGxlY3RlZCk7CisgICAgbV9mcmFtZXNDb2xsZWN0ZWQgPSB0cnVlOworCisg
ICAgLy8gRmlyc3QsIHByb2Nlc3MgbWFpbiBmcmFtZS4KKyAgICBtX2ZyYW1lcy5hcHBlbmQobV9z
cGVjaWZpZWRXZWJGcmFtZUltcGwpOworICAgIC8vIFJldHVybiBub3cgaWYgdXNlciBvbmx5IG5l
ZWRzIHRvIHNlcmlhbGl6ZSBzcGVjaWZpZWQgZnJhbWUsIG5vdCBpbmNsdWRpbmcKKyAgICAvLyBh
bGwgc3ViLWZyYW1lcy4KKyAgICBpZiAoIW1fcmVjdXJzaXZlU2VyaWFsaXphdGlvbikKKyAgICAg
ICAgcmV0dXJuOworICAgIC8vIENvbGxlY3QgYWxsIGZyYW1lcyBpbnNpZGUgdGhlIHNwZWNpZmll
ZCBmcmFtZS4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PGludD4obV9mcmFt
ZXMuc2l6ZSgpKTsgKytpKSB7CisgICAgICAgIFdlYkZyYW1lSW1wbCogY3VycmVudEZyYW1lID0g
bV9mcmFtZXNbaV07CisgICAgICAgIC8vIEdldCBjdXJyZW50IHVzaW5nIGRvY3VtZW50LgorICAg
ICAgICBEb2N1bWVudCogY3VycmVudERvYyA9IGN1cnJlbnRGcmFtZS0+ZnJhbWUoKS0+ZG9jdW1l
bnQoKTsKKyAgICAgICAgLy8gR28gdGhyb3VnaCBzdWItZnJhbWVzLgorICAgICAgICBSZWZQdHI8
SFRNTEFsbENvbGxlY3Rpb24+IGFsbCA9IGN1cnJlbnREb2MtPmFsbCgpOworICAgICAgICBmb3Ig
KE5vZGUqIG5vZGUgPSBhbGwtPmZpcnN0SXRlbSgpOyBub2RlOyBub2RlID0gYWxsLT5uZXh0SXRl
bSgpKSB7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4obm9kZSk7CisgICAgICAgICAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1l
ID0KKyAgICAgICAgICAgICAgICBXZWJGcmFtZUltcGw6OmZyb21GcmFtZU93bmVyRWxlbWVudChl
bGVtZW50KTsKKyAgICAgICAgICAgIGlmICh3ZWJGcmFtZSkKKyAgICAgICAgICAgICAgICBtX2Zy
YW1lcy5hcHBlbmQod2ViRnJhbWUpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFdlYlBh
Z2VTZXJpYWxpemVySW1wbDo6c2VyaWFsaXplKCkKK3sKKyAgICAvLyBDb2xsZWN0IHRhcmdldCBm
cmFtZXMuCisgICAgaWYgKCFtX2ZyYW1lc0NvbGxlY3RlZCkKKyAgICAgICAgY29sbGVjdFRhcmdl
dEZyYW1lcygpOworICAgIGJvb2wgZGlkU2VyaWFsaXphdGlvbiA9IGZhbHNlOworICAgIC8vIEdl
dCBLVVJMIGZvciBtYWluIGZyYW1lLgorICAgIEtVUkwgbWFpblBhZ2VVUkwgPSBtX3NwZWNpZmll
ZFdlYkZyYW1lSW1wbC0+ZnJhbWUoKS0+bG9hZGVyKCktPnVybCgpOworCisgICAgLy8gR28gdGhy
b3VnaCBhbGwgZnJhbWVzIGZvciBzZXJpYWxpemluZyBET00gZm9yIHdob2xlIHBhZ2UsIGluY2x1
ZGUKKyAgICAvLyBzdWItZnJhbWVzLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nh
c3Q8aW50PihtX2ZyYW1lcy5zaXplKCkpOyArK2kpIHsKKyAgICAgICAgLy8gR2V0IGN1cnJlbnQg
c2VyaWFsaXppbmcgZnJhbWUuCisgICAgICAgIFdlYkZyYW1lSW1wbCogY3VycmVudEZyYW1lID0g
bV9mcmFtZXNbaV07CisgICAgICAgIC8vIEdldCBjdXJyZW50IHVzaW5nIGRvY3VtZW50LgorICAg
ICAgICBEb2N1bWVudCogY3VycmVudERvYyA9IGN1cnJlbnRGcmFtZS0+ZnJhbWUoKS0+ZG9jdW1l
bnQoKTsKKyAgICAgICAgLy8gR2V0IGN1cnJlbnQgZnJhbWUncyBVUkwuCisgICAgICAgIGNvbnN0
IEtVUkwmIGN1cnJlbnRGcmFtZVVSTCA9IGN1cnJlbnRGcmFtZS0+ZnJhbWUoKS0+bG9hZGVyKCkt
PnVybCgpOworCisgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSBkb25lIHRoaXMgZG9j
dW1lbnQuCisgICAgICAgIGlmIChtX2xvY2FsTGlua3MuY29udGFpbnMoY3VycmVudEZyYW1lVVJM
LnN0cmluZygpKSkgeworICAgICAgICAgICAgLy8gQSBuZXcgZG9jdW1lbnQsIHdlIHdpbGwgc2Vy
aWFsaXplIGl0LgorICAgICAgICAgICAgZGlkU2VyaWFsaXphdGlvbiA9IHRydWU7CisgICAgICAg
ICAgICAvLyBHZXQgdGFyZ2V0IGVuY29kaW5nIGZvciBjdXJyZW50IGRvY3VtZW50LgorICAgICAg
ICAgICAgU3RyaW5nIGVuY29kaW5nID0gY3VycmVudEZyYW1lLT5mcmFtZSgpLT5sb2FkZXIoKS0+
ZW5jb2RpbmcoKTsKKyAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgdGV4dCBlbmNvZGluZyBvYmpl
Y3Qgd2l0aCB0YXJnZXQgZW5jb2RpbmcuCisgICAgICAgICAgICBUZXh0RW5jb2RpbmcgdGV4dEVu
Y29kaW5nKGVuY29kaW5nKTsKKyAgICAgICAgICAgIC8vIENvbnN0cnVjdCBzZXJpYWxpemUgcGFy
YW1ldGVyIGZvciBsYXRlIHByb2Nlc3NpbmcgZG9jdW1lbnQuCisgICAgICAgICAgICBTZXJpYWxp
emVEb21QYXJhbSBwYXJhbShjdXJyZW50RnJhbWVVUkwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbmNvZGluZy5sZW5ndGgoKSA/IHRleHRFbmNvZGluZyA6IFVURjhFbmNv
ZGluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudERvYywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZVVSTCA9PSBt
YWluUGFnZVVSTCA/IG1fbG9jYWxEaXJlY3RvcnlOYW1lIDogIiIpOworCisgICAgICAgICAgICAv
LyBQcm9jZXNzIGN1cnJlbnQgZG9jdW1lbnQuCisgICAgICAgICAgICBFbGVtZW50KiByb290RWxl
bWVudCA9IGN1cnJlbnREb2MtPmRvY3VtZW50RWxlbWVudCgpOworICAgICAgICAgICAgaWYgKHJv
b3RFbGVtZW50KQorICAgICAgICAgICAgICAgIGJ1aWxkQ29udGVudEZvck5vZGUocm9vdEVsZW1l
bnQsICZwYXJhbSk7CisKKyAgICAgICAgICAgIC8vIEZsdXNoIHRoZSByZW1haW5kZXIgZGF0YSBh
bmQgZmluaXNoIHNlcmlhbGl6aW5nIGN1cnJlbnQgZnJhbWUuCisgICAgICAgICAgICBlbmNvZGVB
bmRGbHVzaEJ1ZmZlcihXZWJQYWdlU2VyaWFsaXplckNsaWVudDo6Q3VycmVudEZyYW1lSXNGaW5p
c2hlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJhbSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDEpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
V2UgaGF2ZSBkb25lIGNhbGwgZnJhbWVzLCBzbyB3ZSBzZW5kIG1lc3NhZ2UgdG8gZW1iZWRkZXIg
dG8gdGVsbCBpdCB0aGF0CisgICAgLy8gZnJhbWVzIGFyZSBmaW5pc2hlZCBzZXJpYWxpemluZy4K
KyAgICBBU1NFUlQoIW1fZGF0YUJ1ZmZlci5sZW5ndGgoKSk7CisgICAgbV9jbGllbnQtPmRpZFNl
cmlhbGl6ZURhdGFGb3JGcmFtZShLVVJMKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXZWJDU3RyaW5nKCIiLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50OjpBbGxGcmFtZXNBcmVGaW5pc2hl
ZCk7CisgICAgcmV0dXJuIGRpZFNlcmlhbGl6YXRpb247Cit9CisKK30gIC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXJJ
bXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNmE5OWYKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5oCkBAIC0wLDAgKzEs
MTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXZWJQYWdlU2VyaWFsaXplckltcGxfaAorI2RlZmluZSBXZWJQYWdlU2Vy
aWFsaXplckltcGxfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJT
dHJpbmdCdWlsZGVyLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaW5jbHVkZSAiV2ViRW50aXRp
ZXMuaCIKKyNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplci5oIgorI2luY2x1ZGUgIldlYlBhZ2VT
ZXJpYWxpemVyQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2Vi
VVJMLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIERvY3VtZW50OworY2xhc3MgRWxl
bWVudDsKK2NsYXNzIE5vZGU7CitjbGFzcyBTdHJpbmc7CitjbGFzcyBUZXh0RW5jb2Rpbmc7Cit9
CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViRnJhbWVJbXBsOworCisvLyBHZXQgaHRt
bCBkYXRhIGJ5IHNlcmlhbGl6aW5nIGFsbCBmcmFtZXMgb2YgY3VycmVudCBwYWdlIHdpdGggbGlz
dHMKKy8vIHdoaWNoIGNvbnRhaW4gYWxsIHJlc291cmNlIGxpbmtzIHRoYXQgaGF2ZSBsb2NhbCBj
b3B5LgorLy8gY29udGFpbiBhbGwgc2F2ZWQgYXV4aWxpYXJ5IGZpbGVzIGluY2x1ZGVkIGFsbCBz
dWIgZnJhbWVzIGFuZCByZXNvdXJjZXMuCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgZmluZCBvdXQg
YWxsIGZyYW1lcyBhbmQgc2VyaWFsaXplIHRoZW0gdG8gSFRNTCBkYXRhLgorLy8gV2UgaGF2ZSBh
IGRhdGEgYnVmZmVyIHRvIHRlbXBvcmFyeSBzYXZpbmcgZ2VuZXJhdGVkIGh0bWwgZGF0YS4gV2Ug
d2lsbAorLy8gc2VxdWVudGlhbGx5IGNhbGwgV2ViVmlld0RlbGVnYXRlOjpTZW5kU2VyaWFsaXpl
ZEh0bWxEYXRhIG9uY2UgdGhlIGRhdGEKKy8vIGJ1ZmZlciBpcyBmdWxsLiBTZWUgY29tbWVudHMg
b2YgV2ViVmlld0RlbGVnYXRlOjpTZW5kU2VyaWFsaXplZEh0bWxEYXRhCisvLyBmb3IgZ2V0dGlu
ZyBtb3JlIGluZm9ybWF0aW9uLgorY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsIHsKK3B1Ymxp
YzoKKyAgICAvLyBEbyBzZXJpYWxpemF0aW9uIGFjdGlvbi4gUmV0dXJuIGZhbHNlIG1lYW5zIG5v
IGF2YWlsYWJsZSBmcmFtZSBoYXMgYmVlbgorICAgIC8vIHNlcmlhbGl6ZWQsIG90aGVyd2lzZSBy
ZXR1cm4gdHJ1ZS4KKyAgICBib29sIHNlcmlhbGl6ZSgpOworCisgICAgLy8gVGhlIHBhcmFtZXRl
ciBzcGVjaWZpZXMgd2hpY2ggZnJhbWUgbmVlZCB0byBiZSBzZXJpYWxpemVkLgorICAgIC8vIFRo
ZSBwYXJhbWV0ZXIgcmVjdXJzaXZlX3NlcmlhbGl6YXRpb24gc3BlY2lmaWVzIHdoZXRoZXIgd2Ug
bmVlZCB0bworICAgIC8vIHNlcmlhbGl6ZSBhbGwgc3ViIGZyYW1lcyBvZiB0aGUgc3BlY2lmaWVk
IGZyYW1lIG9yIG5vdC4KKyAgICAvLyBUaGUgcGFyYW1ldGVyIGRlbGVnYXRlIHNwZWNpZmllcyB0
aGUgcG9pbnRlciBvZiBpbnRlcmZhY2UKKyAgICAvLyBEb21TZXJpYWxpemVyRGVsZWdhdGUgcHJv
dmlkZSBzaW5rIGludGVyZmFjZSB3aGljaCBjYW4gcmVjZWl2ZSB0aGUKKyAgICAvLyBpbmRpdmlk
dWFsIGNodW5rcyBvZiBkYXRhIHRvIGJlIHNhdmVkLgorICAgIC8vIFRoZSBwYXJhbWV0ZXIgbGlu
a3MgY29udGFpbiBvcmlnaW5hbCBVUkxzIG9mIGFsbCBzYXZlZCBsaW5rcy4KKyAgICAvLyBUaGUg
cGFyYW1ldGVyIGxvY2FsX3BhdGhzIGNvbnRhaW4gY29ycmVzcG9uZGluZyBsb2NhbCBmaWxlIHBh
dGhzIG9mIGFsbAorICAgIC8vIHNhdmVkIGxpbmtzLCB3aGljaCBtYXRjaGVkIHdpdGggdmVjdG9y
OmxpbmtzIG9uZSBieSBvbmUuCisgICAgLy8gVGhlIHBhcmFtZXRlciBsb2NhbF9kaXJlY3Rvcnlf
bmFtZSBpcyByZWxhdGl2ZSBwYXRoIG9mIGRpcmVjdG9yeSB3aGljaAorICAgIC8vIGNvbnRhaW4g
YWxsIHNhdmVkIGF1eGlsaWFyeSBmaWxlcyBpbmNsdWRlZCBhbGwgc3ViIGZyYW1lcyBhbmQgcmVz
b3VyY2VzLgorICAgIFdlYlBhZ2VTZXJpYWxpemVySW1wbChXZWJGcmFtZSogZnJhbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudCogY2xpZW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViVVJMPiYgbGlua3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBsb2NhbFBhdGhzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGxvY2FsRGlyZWN0b3J5TmFt
ZSk7CisKK3ByaXZhdGU6CisgICAgLy8gU3BlY2lmaWVkIGZyYW1lIHdoaWNoIG5lZWQgdG8gYmUg
c2VyaWFsaXplZDsKKyAgICBXZWJGcmFtZUltcGwqIG1fc3BlY2lmaWVkV2ViRnJhbWVJbXBsOwor
ICAgIC8vIFBvaW50ZXIgb2YgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQKKyAgICBXZWJQYWdlU2Vy
aWFsaXplckNsaWVudCogbV9jbGllbnQ7CisgICAgLy8gVGhpcyBoYXNoIG1hcCBpcyB1c2VkIHRv
IG1hcCByZXNvdXJjZSBVUkwgb2Ygb3JpZ2luYWwgbGluayB0byBpdHMgbG9jYWwKKyAgICAvLyBm
aWxlIHBhdGguCisgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OlN0cmluZywgV2ViQ29yZTo6
U3RyaW5nPiBMaW5rTG9jYWxQYXRoTWFwOworICAgIC8vIGxvY2FsX2xpbmtzXyBpbmNsdWRlIGFs
bCBwYWlyIG9mIGxvY2FsIHJlc291cmNlIHBhdGggYW5kIGNvcnJlc3BvbmRpbmcKKyAgICAvLyBv
cmlnaW5hbCBsaW5rLgorICAgIExpbmtMb2NhbFBhdGhNYXAgbV9sb2NhbExpbmtzOworICAgIC8v
IERhdGEgYnVmZmVyIGZvciBzYXZpbmcgcmVzdWx0IG9mIHNlcmlhbGl6ZWQgRE9NIGRhdGEuCisg
ICAgV2ViQ29yZTo6U3RyaW5nQnVpbGRlciBtX2RhdGFCdWZmZXI7CisgICAgLy8gUGFzc2luZyB0
cnVlIHRvIHJlY3Vyc2l2ZV9zZXJpYWxpemF0aW9uXyBpbmRpY2F0ZXMgd2Ugd2lsbCBzZXJpYWxp
emUgbm90CisgICAgLy8gb25seSB0aGUgc3BlY2lmaWVkIGZyYW1lIGJ1dCBhbHNvIGFsbCBzdWIt
ZnJhbWVzIGluIHRoZSBzcGVjaWZpYyBmcmFtZS4KKyAgICAvLyBPdGhlcndpc2Ugd2Ugb25seSBz
ZXJpYWxpemUgdGhlIHNwZWNpZmllZCBmcmFtZSBleGNsdWRlZCBhbGwgc3ViLWZyYW1lcy4KKyAg
ICBib29sIG1fcmVjdXJzaXZlU2VyaWFsaXphdGlvbjsKKyAgICAvLyBGbGFnIGluZGljYXRlcyB3
aGV0aGVyIHdlIGhhdmUgY29sbGVjdGVkIGFsbCBmcmFtZXMgd2hpY2ggbmVlZCB0byBiZQorICAg
IC8vIHNlcmlhbGl6ZWQgb3Igbm90OworICAgIGJvb2wgbV9mcmFtZXNDb2xsZWN0ZWQ7CisgICAg
Ly8gTG9jYWwgZGlyZWN0b3J5IG5hbWUgb2YgYWxsIGxvY2FsIHJlc291cmNlIGZpbGVzLgorICAg
IFdlYkNvcmU6OlN0cmluZyBtX2xvY2FsRGlyZWN0b3J5TmFtZTsKKyAgICAvLyBWZWN0b3IgZm9y
IHNhdmluZyBhbGwgZnJhbWVzIHdoaWNoIG5lZWQgdG8gYmUgc2VyaWFsaXplZC4KKyAgICBWZWN0
b3I8V2ViRnJhbWVJbXBsKj4gbV9mcmFtZXM7CisKKyAgICAvLyBXZWIgZW50aXRpZXMgY29udmVy
c2lvbiBtYXBzLgorICAgIFdlYkVudGl0aWVzIG1faHRtbEVudGl0aWVzOworICAgIFdlYkVudGl0
aWVzIG1feG1sRW50aXRpZXM7CisKKyAgICBzdHJ1Y3QgU2VyaWFsaXplRG9tUGFyYW0geworICAg
ICAgICAvLyBGcmFtZSBVUkwgb2YgY3VycmVudCBwcm9jZXNzaW5nIGRvY3VtZW50IHByZXNlbnRl
ZCBieSBHVVJMCisgICAgICAgIGNvbnN0IFdlYkNvcmU6OktVUkwmIGN1cnJlbnRGcmFtZVVSTDsK
KyAgICAgICAgLy8gQ3VycmVudCB1c2luZyB0ZXh0IGVuY29kaW5nIG9iamVjdC4KKyAgICAgICAg
Y29uc3QgV2ViQ29yZTo6VGV4dEVuY29kaW5nJiB0ZXh0RW5jb2Rpbmc7CisKKyAgICAgICAgLy8g
RG9jdW1lbnQgb2JqZWN0IG9mIGN1cnJlbnQgZnJhbWUuCisgICAgICAgIFdlYkNvcmU6OkRvY3Vt
ZW50KiBkb2M7CisgICAgICAgIC8vIExvY2FsIGRpcmVjdG9yeSBuYW1lIG9mIGFsbCBsb2NhbCBy
ZXNvdXJjZSBmaWxlcy4KKyAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBkaXJlY3RvcnlO
YW1lOworCisgICAgICAgIC8vIEZsYWcgaW5kaWNhdGVzIGN1cnJlbnQgZG9jIGlzIGh0bWwgZG9j
dW1lbnQgb3Igbm90LiBJdCdzIGEgY2FjaGUgdmFsdWUKKyAgICAgICAgLy8gb2YgRG9jdW1lbnQu
aXNIVE1MRG9jdW1lbnQoKS4KKyAgICAgICAgYm9vbCBpc0hUTUxEb2N1bWVudDsKKyAgICAgICAg
Ly8gRmxhZyB3aGljaCBpbmRpY2F0ZSB3aGV0aGVyIHdlIGhhdmUgbWV0IGRvY3VtZW50IHR5cGUg
ZGVjbGFyYXRpb24uCisgICAgICAgIGJvb2wgaGFzRG9jdHlwZTsKKyAgICAgICAgLy8gRmxhZyB3
aGljaCBpbmRpY2F0ZSB3aGV0aGVyIHdpbGwgcHJvY2VzcyBtZXRhIGlzc3VlLgorICAgICAgICBi
b29sIGhhc0NoZWNrZWRNZXRhOworICAgICAgICAvLyBUaGlzIG1ldGEgZWxlbWVudCBuZWVkIHRv
IGJlIHNraXBwZWQgd2hlbiBzZXJpYWxpemluZyBET00uCisgICAgICAgIGNvbnN0IFdlYkNvcmU6
OkVsZW1lbnQqIHNraXBNZXRhRWxlbWVudDsKKyAgICAgICAgLy8gRmxhZyBpbmRpY2F0ZXMgd2Ug
YXJlIGluIHNjcmlwdCBvciBzdHlsZSB0YWcuCisgICAgICAgIGJvb2wgaXNJblNjcmlwdE9yU3R5
bGVUYWc7CisgICAgICAgIC8vIEZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgd2UgaGF2ZSB3cml0dGVu
IHhtbCBkb2N1bWVudCBkZWNsYXJhdGlvbi4KKyAgICAgICAgLy8gSXQgaXMgb25seSB1c2VkIGlu
IHhtbCBkb2N1bWVudAorICAgICAgICBib29sIGhhc0RvY0RlY2xhcmF0aW9uOworICAgICAgICAv
LyBGbGFnIGluZGljYXRlcyB3aGV0aGVyIHdlIGhhdmUgYWRkZWQgYWRkaXRpb25hbCBjb250ZW50
cyBiZWZvcmUgZW5kIHRhZy4KKyAgICAgICAgLy8gVGhpcyBmbGFnIHdpbGwgYmUgcmUtYXNzaWdu
ZWQgaW4gZWFjaCBjYWxsIG9mIGZ1bmN0aW9uCisgICAgICAgIC8vIFBvc3RBY3Rpb25BZnRlclNl
cmlhbGl6ZU9wZW5UYWcgYW5kIGl0IGNvdWxkIGJlIGNoYW5nZWQgaW4gZnVuY3Rpb24KKyAgICAg
ICAgLy8gUHJlQWN0aW9uQmVmb3JlU2VyaWFsaXplRW5kVGFnIGlmIHRoZSBmdW5jdGlvbiBhZGRz
IG5ldyBjb250ZW50cyBpbnRvCisgICAgICAgIC8vIHNlcmlhbGl6YXRpb24gc3RyZWFtLgorICAg
ICAgICBib29sIGhhc0FkZGVkQ29udGVudHNCZWZvcmVFbmQ7CisKKyAgICAgICAgLy8gQ29uc3Ry
dWN0b3IuCisgICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtKGNvbnN0IFdlYkNvcmU6OktVUkwmIGN1
cnJlbnRGcmFtZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6
VGV4dEVuY29kaW5nJiB0ZXh0RW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YkNvcmU6OkRvY3VtZW50KiBkb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYgZGlyZWN0b3J5TmFtZSk7CisgICAgfTsKKworICAgIC8vIENvbGxlY3Qg
YWxsIHRhcmdldCBmcmFtZXMgd2hpY2ggbmVlZCB0byBiZSBzZXJpYWxpemVkLgorICAgIHZvaWQg
Y29sbGVjdFRhcmdldEZyYW1lcygpOworICAgIC8vIEJlZm9yZSB3ZSBiZWdpbiBzZXJpYWxpemlu
ZyBvcGVuIHRhZyBvZiBhIGVsZW1lbnQsIHdlIGdpdmUgdGhlIHRhcmdldAorICAgIC8vIGVsZW1l
bnQgYSBjaGFuY2UgdG8gZG8gc29tZSB3b3JrIHByaW9yIHRvIGFkZCBzb21lIGFkZGl0aW9uYWwg
ZGF0YS4KKyAgICBXZWJDb3JlOjpTdHJpbmcgcHJlQWN0aW9uQmVmb3JlU2VyaWFsaXplT3BlblRh
Zyhjb25zdCBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
KiBuZWVkU2tpcCk7CisgICAgLy8gQWZ0ZXIgd2UgZmluaXNoIHNlcmlhbGl6aW5nIG9wZW4gdGFn
IG9mIGEgZWxlbWVudCwgd2UgZ2l2ZSB0aGUgdGFyZ2V0CisgICAgLy8gZWxlbWVudCBhIGNoYW5j
ZSB0byBkbyBzb21lIHBvc3Qgd29yayB0byBhZGQgc29tZSBhZGRpdGlvbmFsIGRhdGEuCisgICAg
V2ViQ29yZTo6U3RyaW5nIHBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZU9wZW5UYWcoY29uc3QgV2Vi
Q29yZTo6RWxlbWVudCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pOworICAgIC8vIEJl
Zm9yZSB3ZSBiZWdpbiBzZXJpYWxpemluZyBlbmQgdGFnIG9mIGEgZWxlbWVudCwgd2UgZ2l2ZSB0
aGUgdGFyZ2V0CisgICAgLy8gZWxlbWVudCBhIGNoYW5jZSB0byBkbyBzb21lIHdvcmsgcHJpb3Ig
dG8gYWRkIHNvbWUgYWRkaXRpb25hbCBkYXRhLgorICAgIFdlYkNvcmU6OlN0cmluZyBwcmVBY3Rp
b25CZWZvcmVTZXJpYWxpemVFbmRUYWcoY29uc3QgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlh
bGl6ZURvbVBhcmFtKiBwYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wqIG5lZWRTa2lwKTsKKyAgICAvLyBBZnRlciB3ZSBmaW5pc2gg
c2VyaWFsaXppbmcgZW5kIHRhZyBvZiBhIGVsZW1lbnQsIHdlIGdpdmUgdGhlIHRhcmdldAorICAg
IC8vIGVsZW1lbnQgYSBjaGFuY2UgdG8gZG8gc29tZSBwb3N0IHdvcmsgdG8gYWRkIHNvbWUgYWRk
aXRpb25hbCBkYXRhLgorICAgIFdlYkNvcmU6OlN0cmluZyBwb3N0QWN0aW9uQWZ0ZXJTZXJpYWxp
emVFbmRUYWcoY29uc3QgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtKiBw
YXJhbSk7CisgICAgLy8gU2F2ZSBnZW5lcmF0ZWQgaHRtbCBjb250ZW50IHRvIGRhdGEgYnVmZmVy
LgorICAgIHZvaWQgc2F2ZUhUTUxDb250ZW50VG9CdWZmZXIoY29uc3QgV2ViQ29yZTo6U3RyaW5n
JiBjb250ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9t
UGFyYW0qIHBhcmFtKTsKKyAgICAvLyBGbHVzaGVzIHRoZSBjb250ZW50IGJ1ZmZlciBieSBlbmNv
ZGluZyBhbmQgc2VuZGluZyB0aGUgY29udGVudCB0byB0aGUKKyAgICAvLyBXZWJQYWdlU2VyaWFs
aXplckNsaWVudC4gQ29udGVudCBpcyBub3QgZmx1c2hlZCBpZiB0aGUgYnVmZmVyIGlzIG5vdCBm
dWxsCisgICAgLy8gdW5sZXNzIGZvcmNlIGlzIDEuCisgICAgdm9pZCBlbmNvZGVBbmRGbHVzaEJ1
ZmZlcihXZWJQYWdlU2VyaWFsaXplckNsaWVudDo6UGFnZVNlcmlhbGl6YXRpb25TdGF0dXMgc3Rh
dHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBh
cmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3JjZSk7CisgICAgLy8g
U2VyaWFsaXplIG9wZW4gdGFnIG9mIGFuIHNwZWNpZmllZCBlbGVtZW50LgorICAgIHZvaWQgb3Bl
blRhZ1RvU3RyaW5nKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKTsKKyAgICAvLyBTZXJpYWxp
emUgZW5kIHRhZyBvZiBhbiBzcGVjaWZpZWQgZWxlbWVudC4KKyAgICB2b2lkIGVuZFRhZ1RvU3Ry
aW5nKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pOworICAgIC8vIEJ1aWxkIGNvbnRlbnQgZm9y
IGEgc3BlY2lmaWVkIG5vZGUKKyAgICB2b2lkIGJ1aWxkQ29udGVudEZvck5vZGUoY29uc3QgV2Vi
Q29yZTo6Tm9kZSogbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXpl
RG9tUGFyYW0qIHBhcmFtKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYK
</data>
<flag name="review"
          id="26752"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="26815"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>