<?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>57689</bug_id>
          
          <creation_ts>2011-04-01 18:44:07 -0700</creation_ts>
          <short_desc>Extract scoping functionality from Document</short_desc>
          <delta_ts>2011-04-04 17:41:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          <blocked>52963</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Roland Steiner">rolandsteiner</reporter>
          <assigned_to name="Roland Steiner">rolandsteiner</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dominicc</cc>
    
    <cc>eric</cc>
    
    <cc>morrita</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>378277</commentid>
    <comment_count>0</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-04-01 18:44:07 -0700</bug_when>
    <thetext>For the new shadow DOM we will need to have separate scopes of hash IDs, etc., for each shadow tree. Therefore it&apos;s necessary to extract this functionality from Document into its own class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378279</commentid>
    <comment_count>1</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-04-01 18:45:02 -0700</bug_when>
    <thetext>Q: does this include m_numNodeListCaches?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378290</commentid>
    <comment_count>2</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-01 19:31:13 -0700</bug_when>
    <thetext>Yeah.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378970</commentid>
    <comment_count>3</comment_count>
      <attachid>88100</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-04-04 12:42:20 -0700</bug_when>
    <thetext>Created attachment 88100
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378977</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-04 12:47:05 -0700</bug_when>
    <thetext>Attachment 88100 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1

Source/WebCore/dom/DOMTreeScope.cpp:59:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378984</commentid>
    <comment_count>5</comment_count>
      <attachid>88100</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-04 12:52:56 -0700</bug_when>
    <thetext>Comment on attachment 88100
Patch

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

I think it should be called TreeScope. DOM is already plenty qualified based on the directory of the file. dom/DOMTreeScope seems a bit repetitive. Comments below.

&gt; Source/WebCore/dom/DOMTreeScope.cpp:60
&gt; +void DOMTreeScope::removedLastRef()
&gt; +{
&gt; +    ASSERT(!m_deletionHasBegun);
&gt; +    if (m_guardRefCount) {
&gt; +        // If removing a child removes the last self-only ref, we don&apos;t
&gt; +        // want the scope to be destructed until after
&gt; +        // removeAllChildren returns, so we guard ourselves with an
&gt; +        // extra self-only ref.
&gt; +        guardRef();
&gt; +        destroyScope();
&gt; +        guardDeref();
&gt; +    } else {
&gt; +        ContainerNode::removedLastRef();
&gt; +    }
&gt; +}

Why do we need this in tree scope?

&gt; Source/WebCore/dom/DOMTreeScope.cpp:158
&gt; +Element* DOMTreeScope::findAnchor(const String&amp; name)
&gt; +{
&gt; +    if (name.isEmpty())
&gt; +        return 0;
&gt; +    if (Element* element = getElementById(name))
&gt; +        return element;
&gt; +    for (Node* node = this; node; node = node-&gt;traverseNextNode()) {
&gt; +        if (node-&gt;hasTagName(aTag)) {
&gt; +            HTMLAnchorElement* anchor = static_cast&lt;HTMLAnchorElement*&gt;(node);
&gt; +            if (document()-&gt;inQuirksMode()) {
&gt; +                // Quirks mode, case insensitive comparison of names.
&gt; +                if (equalIgnoringCase(anchor-&gt;name(), name))
&gt; +                    return anchor;
&gt; +            } else {
&gt; +                // Strict mode, names need to match exactly.
&gt; +                if (anchor-&gt;name() == name)
&gt; +                    return anchor;
&gt; +            }
&gt; +        }
&gt; +    }
&gt; +    return 0;
&gt; +}

Do we need this in the treescope?

&gt; Source/WebCore/dom/Document.h:210
&gt; +    typedef DOMTreeScope DocumentBaseClass;

What is this for?

&gt; Source/WebCore/dom/Document.h:1406
&gt; +        m_document-&gt;guardRef();

I like guardRef as a name.

&gt; Source/WebCore/dom/Node.cpp:-817
&gt; -void Node::setDocumentRecursively(Document* document)
&gt; -{
&gt; -    if (this-&gt;document() == document)
&gt; -        return;
&gt; -
&gt; -    // If an element is moved from a document and then eventually back again the collection cache for
&gt; -    // that element may contain stale data as changes made to it will have updated the DOMTreeVersion
&gt; -    // of the document it was moved to. By increasing the DOMTreeVersion of the donating document here
&gt; -    // we ensure that the collection cache will be invalidated as needed when the element is moved back.
&gt; -    if (this-&gt;document())
&gt; -        this-&gt;document()-&gt;incDOMTreeVersion();
&gt; -
&gt; -    for (Node* node = this; node; node = node-&gt;traverseNextNode(this)) {
&gt; -        node-&gt;setDocument(document);
&gt; -        if (!node-&gt;isElementNode())
&gt; -            continue;
&gt; -        if (Node* shadow = toElement(node)-&gt;shadowRoot())
&gt; -            shadow-&gt;setDocumentRecursively(document);
&gt; -    }
&gt; -}
&gt; -

Why did this move? Can we not do this to minimize the diff?

&gt; Source/WebCore/platform/TreeShared.h:-124
&gt; -    virtual void removedLastRef()
&gt; -    {
&gt; -#ifndef NDEBUG
&gt; -        m_deletionHasBegun = true;
&gt; -#endif
&gt; -        delete this;
&gt; -    }
&gt; -

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378990</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-04 13:02:09 -0700</bug_when>
    <thetext>Attachment 88100 did not build on chromium:
Build output: http://queues.webkit.org/results/8329319</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379003</commentid>
    <comment_count>7</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-04-04 13:19:13 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 88100 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88100&amp;action=review
&gt; 
&gt; I think it should be called TreeScope. DOM is already plenty qualified based on the directory of the file. dom/DOMTreeScope seems a bit repetitive. Comments below.

Ok, will change.

&gt; &gt; Source/WebCore/dom/DOMTreeScope.cpp:60
&gt; &gt; +void DOMTreeScope::removedLastRef()
&gt; &gt; +{
&gt; &gt;    ...
&gt; &gt; +}
&gt; 
&gt; Why do we need this in tree scope?

The first version of the change in Node will probably have 2 pointers: to document and to the containing scope. Like with Document, a Scope should stay around till the last child has been destroyed, so I figured it&apos;s better to move this into TreeScope. Note that the Document will in turn stay around, because it&apos;ll be guardRef&apos;d by the nested TreeScopes. 

Once we remove the (superfluous) additional Document pointer from Node, it&apos;ll be faster to just guardRef on the containing scope, rather than accessing the Document indirectly.

&gt; &gt; Source/WebCore/dom/DOMTreeScope.cpp:158
&gt; &gt; +Element* DOMTreeScope::findAnchor(const String&amp; name)
&gt; &gt; +{
&gt; &gt; +    if (name.isEmpty())
&gt; &gt; +        return 0;
&gt; &gt; +    if (Element* element = getElementById(name))
&gt; &gt;          ...
&gt; &gt; +    }
&gt; &gt; +    return 0;
&gt; &gt; +}
&gt; 
&gt; Do we need this in the treescope?

Dunno, but it references getElementById, so I thought it&apos;ll fit here more naturally.

&gt; &gt; Source/WebCore/dom/Document.h:210
&gt; &gt; +    typedef DOMTreeScope DocumentBaseClass;
&gt; 
&gt; What is this for?

This was meant to make subsequent changes to the class hierarchy easier (just 2 local changes rather than in multiple places), but since this habit doesn&apos;t exist in WebKit in other place, I guess I&apos;ll better remove this.

&gt; &gt; Source/WebCore/dom/Node.cpp:-817
&gt; &gt; -void Node::setDocumentRecursively(Document* document)
&gt; &gt; -{
&gt; &gt;     ...
&gt; &gt; -}
&gt; &gt; -
&gt; 
&gt; Why did this move? Can we not do this to minimize the diff?

Yes, that was already part of the next patch for Node, and shouldn&apos;t be included here.

&gt; &gt; Source/WebCore/platform/TreeShared.h:-124
&gt; &gt; -    virtual void removedLastRef()
&gt; &gt; -    {
&gt; &gt; -#ifndef NDEBUG
&gt; &gt; -        m_deletionHasBegun = true;
&gt; &gt; -#endif
&gt; &gt; -        delete this;
&gt; &gt; -    }
&gt; &gt; -
&gt; 
&gt; Ditto.

This has to move, since removedLastRef() needs to be public for the guardRef change (and IMHO really should have been public from the start).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379056</commentid>
    <comment_count>8</comment_count>
      <attachid>88124</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-04-04 14:04:30 -0700</bug_when>
    <thetext>Created attachment 88124
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379071</commentid>
    <comment_count>9</comment_count>
      <attachid>88124</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-04 14:18:00 -0700</bug_when>
    <thetext>Comment on attachment 88124
Patch

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

This is actually quite cool.

&gt; Source/WebCore/ChangeLog:55
&gt; +        (WebCore::TreeScope::DOMTreeScope):
&gt; +        (WebCore::TreeScope::removedLastRef):
&gt; +        (WebCore::TreeScope::destroyScope):
&gt; +        (WebCore::TreeScope::getElementById):
&gt; +        (WebCore::TreeScope::addElementById):
&gt; +        (WebCore::TreeScope::removeElementById):
&gt; +        (WebCore::TreeScope::getElementByAccessKey):
&gt; +        (WebCore::TreeScope::invalidateAccessKeyMap):
&gt; +        (WebCore::TreeScope::addImageMap):
&gt; +        (WebCore::TreeScope::removeImageMap):
&gt; +        (WebCore::TreeScope::getImageMap):
&gt; +        (WebCore::TreeScope::findAnchor):

You can remove these lines from the ChangeLog for brevity.

&gt; Source/WebCore/ChangeLog:60
&gt; +        (WebCore::TreeScope::guardRef):
&gt; +        (WebCore::TreeScope::guardDeref):
&gt; +        (WebCore::TreeScope::hasElementWithId):
&gt; +        (WebCore::TreeScope::containsMultipleElementsWithId):

Ditto.

&gt; Source/WebCore/WebCore.vcproj/WebCore.vcproj:47224
&gt; +				RelativePath=&quot;..\dom\TreeScope.cpp&quot;
&gt; +				&gt;
&gt; +			&lt;/File&gt;
&gt; +			&lt;File
&gt; +				RelativePath=&quot;..\dom\TreeScope.h&quot;
&gt; +				&gt;
&gt; +			&lt;/File&gt;
&gt; +			&lt;File

This is incorrect. The .cpp file should be set to not build (see nearby .cpp in ..\dom\ for an example) and then it should be added to DOMAllInOne.cpp file.

&gt; Source/WebCore/dom/Node.h:368
&gt; +    

Extra spaces here?

&gt; Source/WebCore/dom/TreeScope.h:64
&gt; +    virtual void removedLastRef();
&gt; +    virtual void destroyScope();

Can we make these protected?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379236</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-04 17:10:36 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/82882 might have broken Windows XP Debug (Tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379257</commentid>
    <comment_count>11</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-04-04 17:41:42 -0700</bug_when>
    <thetext>Committed as WK r82882.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88100</attachid>
            <date>2011-04-04 12:42:20 -0700</date>
            <delta_ts>2011-04-04 14:04:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57689-20110404124219.patch</filename>
            <type>text/plain</type>
            <size>45314</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODI4NDUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQubWsgYi9Tb3VyY2UvV2ViQ29yZS9BbmRyb2lkLm1rCmluZGV4IDkwZjUwZDZhYjZkMzNj
MTg2MzBmZGRmN2I4N2UwMDdmYzdhOGExMGMuLjgzNDRmN2UxODllZTE2NzM5ZWRhZDAwOWZjNGY4
NTJkNzc2NGVhMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
U291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawpAQCAtMTEzLDYgKzExMyw3IEBAIExPQ0FMX1NSQ19G
SUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCWRvbS9Db250YWluZXJOb2RlLmNwcCBcCiAJ
ZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcCBcCiAJZG9tL0RPTVN0cmluZ0xpc3QuY3BwIFwKKwlk
b20vRE9NVHJlZVNjb3BlLmNwcCBcCiAJZG9tL0RhdGFUcmFuc2Zlckl0ZW0uY3BwIFwKIAlkb20v
RGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5jcHAgXAogCWRvbS9EZXZpY2VNb3Rpb25Db250cm9s
bGVyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGNjNTUwMzdjZGU2MmRmNjk1ZDEwMzNl
NjFlNzNkMzM3YzMyNWM4MGMuLjhhODUxYWJjNTZhYTI1MWY5MGVhYTRjZTA2NTFmY2MyMTAyMTFl
ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC01NTIsNiArNTUyLDcgQEAgU0VUKFdlYkNvcmVf
U09VUkNFUwogICAgIGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAKICAgICBkb20vRE9NU3RyaW5n
TGlzdC5jcHAKICAgICBkb20vRE9NU3RyaW5nTWFwLmNwcAorICAgIGRvbS9ET01UcmVlU2NvcGUu
Y3BwCiAgICAgZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAKICAgICBkb20vRWRpdGluZ1RleHQuY3Bw
CiAgICAgZG9tL0VsZW1lbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZThjOWVlODMyOTdjOGExNGM3Nzg0
NTgyYWFmMTllYTI2NDE2Mzg2NS4uNDNiZDNjNTg1MTEwM2IxNDIzMjZmZTVhYzhlNjIzNzhlM2Iw
YTMyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDExLTA0LTAxICBSb2xhbmQgU3Rl
aW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA1NzY4OSAtIEV4dHJhY3Qgc2NvcGluZyBm
dW5jdGlvbmFsaXR5IGZyb20gRG9jdW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU3Njg5CisKKyAgICAgICAgTW92ZWQgc2VsZk9ubHlSZWYgKHJl
bmFtZWQgdG8gZ3VhcmRSZWYpLCBlbGVtZW50IElELCBpbWFnZSBtYXAKKyAgICAgICAgYW5kIGFj
Y2Vzc3Mga2V5IGZ1bmN0aW9uYWxpdGllcyBmcm9tIERvY3VtZW50IHRvIGEgbmV3IGJhc2UKKyAg
ICAgICAgY2xhc3MgRE9NVHJlZVNjb3BlLgorCisgICAgICAgIFRyZWVTaGFyZWQ6IG1hZGUgcmVt
b3ZlZExhc3RSZWYgcHVibGljCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAocmVmYWN0b3Jpbmcp
CisKKyAgICAgICAgKiBBbmRyb2lkLm1rOgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAg
KiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
ZG9tL0RPTVNjb3BlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBkb20vRE9NU2NvcGUuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBkb20vRE9NVHJlZVNjb3BlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpET01UcmVlU2NvcGU6OkRPTVRyZWVTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpE
T01UcmVlU2NvcGU6OnJlbW92ZWRMYXN0UmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRyZWVT
Y29wZTo6ZGVzdHJveVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRyZWVTY29wZTo6Z2V0
RWxlbWVudEJ5SWQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NVHJlZVNjb3BlOjphZGRFbGVtZW50
QnlJZCk6CisgICAgICAgIChXZWJDb3JlOjpET01UcmVlU2NvcGU6OnJlbW92ZUVsZW1lbnRCeUlk
KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRyZWVTY29wZTo6Z2V0RWxlbWVudEJ5QWNjZXNzS2V5
KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRyZWVTY29wZTo6aW52YWxpZGF0ZUFjY2Vzc0tleU1h
cCk6CisgICAgICAgIChXZWJDb3JlOjpET01UcmVlU2NvcGU6OmFkZEltYWdlTWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVRyZWVTY29wZTo6cmVtb3ZlSW1hZ2VNYXApOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NVHJlZVNjb3BlOjpnZXRJbWFnZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpET01U
cmVlU2NvcGU6OmZpbmRBbmNob3IpOgorICAgICAgICAqIGRvbS9ET01UcmVlU2NvcGUuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpET01UcmVlU2NvcGU6Omd1YXJkUmVmKToKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVRyZWVTY29wZTo6Z3VhcmREZXJlZik6CisgICAgICAgIChXZWJDb3JlOjpE
T01UcmVlU2NvcGU6Omhhc0VsZW1lbnRXaXRoSWQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NVHJl
ZVNjb3BlOjpjb250YWluc011bHRpcGxlRWxlbWVudHNXaXRoSWQpOgorICAgICAgICAqIGRvbS9E
b2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRlc3Ryb3lTY29wZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudDo6Z2V0RWxlbWVudEJ5SWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2NoZWR1bGVT
dHlsZVJlY2FsYyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YXR0YWNoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkZXRhY2gpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5o
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Tm9kZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50
T3JkZXJlZE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6Omdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUlk
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TWFw
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRC
eUxvd2VyY2FzZWRNYXBOYW1lKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRPcmRlcmVkTWFwLmg6
CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6fk5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c2V0RG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9O
b2RlLmg6CisgICAgICAgICogcGxhdGZvcm0vVHJlZVNoYXJlZC5oOgorICAgICAgICAoV2ViQ29y
ZTo6VHJlZVNoYXJlZDo6cmVtb3ZlZExhc3RSZWYpOgorCiAyMDExLTA0LTA0ICBZdXJ5IFNlbWlr
aGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVs
IEZlbGRtYW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGE4YzMzNWRiZjc4OTc0ZDU0MWI3ZjAy
MjBhMTkzMTY2OGQ0MDk0NTEuLmQ5NGMxNWYzOWQzYmNjMDM3MGFhMzQ1MWZlNDI1M2NjMDg3NWMx
OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMjExLDYgKzEyMTEsOCBAQCB3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdNYXAuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTWFwLmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9ET01U
aW1lU3RhbXAuaCBcCisJU291cmNlL1dlYkNvcmUvZG9tL0RPTVRyZWVTY29wZS5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL2RvbS9ET01UcmVlU2NvcGUuaCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0R5
bmFtaWNOb2RlTGlzdC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3Qu
aCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0VkaXRpbmdUZXh0LmNwcCBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggZmQ0M2U3OWQ0ZmY1Y2ZjN2NjMmEwYzAwODM0NDZlNmY5N2RmNjc0MS4uZjgzMDFkOGQw
ZTBhMjJhNDM4NGQ0YTcyYWNiODU5MmYzMWZjMWYzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjQw
MSw2ICsyNDAxLDggQEAKICAgICAgICAgICAgICdkb20vRE9NU3RyaW5nTGlzdC5oJywKICAgICAg
ICAgICAgICdkb20vRE9NU3RyaW5nTWFwLmNwcCcsCiAgICAgICAgICAgICAnZG9tL0RPTVN0cmlu
Z01hcC5oJywKKyAgICAgICAgICAgICdkb20vRE9NVHJlZVNjb3BlLmNwcCcsCisgICAgICAgICAg
ICAnZG9tL0RPTVRyZWVTY29wZS5oJywKICAgICAgICAgICAgICdkb20vRGF0YVRyYW5zZmVySXRl
bS5jcHAnLAogICAgICAgICAgICAgJ2RvbS9EYXRhVHJhbnNmZXJJdGVtLmgnLAogICAgICAgICAg
ICAgJ2RvbS9EYXRhVHJhbnNmZXJJdGVtcy5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUucHJvIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNGMyZTE5ZjAw
ZjNjNzIzNzc5N2UxNzBiZTE5NDNkNzdkMjhmZWU0ZS4uNGI4NThlYzNiZTc0Yzg5ZDE0MjEyMzIz
MzYwNzU0ZTIzNGExNjM4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8K
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTQ4MSw2ICs0ODEsNyBAQCBTT1VS
Q0VTICs9IFwKICAgICBkb20vRE9NSW1wbGVtZW50YXRpb24uY3BwIFwKICAgICBkb20vRE9NU3Ry
aW5nTGlzdC5jcHAgXAogICAgIGRvbS9ET01TdHJpbmdNYXAuY3BwIFwKKyAgICBkb20vRE9NVHJl
ZVNjb3BlLmNwcCBcCiAgICAgZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuY3BwIFwKICAgICBkb20v
RHluYW1pY05vZGVMaXN0LmNwcCBcCiAgICAgZG9tL0VkaXRpbmdUZXh0LmNwcCBcCkBAIC0xNDQ4
LDYgKzE0NDksNyBAQCBIRUFERVJTICs9IFwKICAgICBkb20vRE9NU3RyaW5nTGlzdC5oIFwKICAg
ICBkb20vRE9NU3RyaW5nTWFwLmggXAogICAgIGRvbS9ET01UaW1lU3RhbXAuaCBcCisgICAgZG9t
L0RPTVRyZWVTY29wZS5oIFwKICAgICBkb20vRGF0YXNldERPTVN0cmluZ01hcC5oIFwKICAgICBk
b20vRHluYW1pY05vZGVMaXN0LmggXAogICAgIGRvbS9FZGl0aW5nVGV4dC5oIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggMzdhNTJlMzBiOTJj
ZWMyNjYzMjk4OTRiNzhlZjJhMzUwMjVkYjhjNy4uOGZiNjAyNmYxMzdjNjJiNmFiODRmOGEyZTE5
OGQzOGY4OGU5MTQyNiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKQEAgLTQzODgyLDYgKzQzODgyLDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJ
PEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxET01UcmVlU2NvcGUuY3BwIgorCQkJCT4K
KwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cRE9NVHJlZVNj
b3BlLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGRvbVxEeW5hbWljTm9kZUxpc3QuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCAzNzk3YzMxZDY3NTNkZDY3NWM3NTczZjFjNGM3ZmU5ZDI4Zjg4MTUwLi5jYTdmMWIyNGQ5
MTc5NTQzMTA5YmJmNjU3MmIzMzEyNGIxZTdlMDFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMTYsNiArMzE2LDggQEAKIAkJ
MTRDRjc4QTYwOUY1OENEODAwRUIzNjY1IC8qIEpTQ1NTVmFsdWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0Y3OEE1MDlGNThDRDgwMEVCMzY2NSAv
KiBKU0NTU1ZhbHVlLmggKi87IH07CiAJCTE0Q0Y3QjMzMDlGNkVDRDcwMEVCMzY2NSAvKiBKU0NT
U1J1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTRDRjdCMzEwOUY2RUNENzAwRUIzNjY1IC8qIEpTQ1NTUnVsZS5jcHAgKi87IH07CiAJCTE0Q0Y3
QjM0MDlGNkVDRDcwMEVCMzY2NSAvKiBKU0NTU1J1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0Y3QjMyMDlGNkVDRDcwMEVCMzY2NSAvKiBKU0NT
U1J1bGUuaCAqLzsgfTsKKwkJMTRENjRBQzkxMzQ2QTYwRTAwRTU4RkRBIC8qIERPTVRyZWVTY29w
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQ2
NEFDNzEzNDZBNjBFMDBFNThGREEgLyogRE9NVHJlZVNjb3BlLmNwcCAqLzsgfTsKKwkJMTRENjRB
Q0ExMzQ2QTYwRTAwRTU4RkRBIC8qIERPTVRyZWVTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRENjRBQzgxMzQ2QTYwRTAwRTU4RkRBIC8qIERP
TVRyZWVTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTE0RDgyMzUyMEFGOTJBNzkwMDA0RjA1NyAvKiBDaHJvbWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDgyMzUwMEFGOTJBNzkwMDA0RjA1
NyAvKiBDaHJvbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxNEQ4MjM4QjBBRjkyREY2MDAwNEYwNTcgLyogQ2hyb21lLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDgyMzhBMEFGOTJERjYwMDA0
RjA1NyAvKiBDaHJvbWUuY3BwICovOyB9OwogCQkxNEQ4MjQwODBBRjkzQUVCMDAwNEYwNTcgLyog
Q2hyb21lQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNEQ4MjQwNjBBRjkzQUVCMDAwNEYwNTcgLyogQ2hyb21lQ2xpZW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTY2OTMsNiArNjY5NSw4
IEBACiAJCTE0Q0Y3QjMxMDlGNkVDRDcwMEVCMzY2NSAvKiBKU0NTU1J1bGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ1NTUnVsZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0Q0Y3QjMyMDlGNkVDRDcwMEVCMzY2NSAvKiBKU0NTU1J1bGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ1NTUnVsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNENGN0MyMDA5RjcxMTA2MDBFQjM2NjUgLyogS2V5Ym9h
cmRFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEtleWJvYXJkRXZlbnQuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQ2NEFDNzEzNDZBNjBFMDBFNThGREEgLyog
RE9NVHJlZVNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERP
TVRyZWVTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDY0QUM4MTM0
NkE2MEUwMEU1OEZEQSAvKiBET01UcmVlU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRE9NVHJlZVNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
RDgyMzUwMEFGOTJBNzkwMDA0RjA1NyAvKiBDaHJvbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ2hyb21lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RDgy
MzhBMEFGOTJERjYwMDA0RjA1NyAvKiBDaHJvbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENocm9tZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0RDgyNDA2MEFGOTNBRUIwMDA0RjA1NyAvKiBDaHJvbWVDbGllbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hyb21lQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xOTI2MSw2ICsxOTI2NSw4IEBACiAJCQkJQkM2NDY0MDgxMUQ3RjMwNDAwNjQ1
NUIwIC8qIERPTVN0cmluZ01hcC5oICovLAogCQkJCUJDNjQ2NDc5MTFEODAwQ0QwMDY0NTVCMCAv
KiBET01TdHJpbmdNYXAuaWRsICovLAogCQkJCTA1RkQ2OURGMTI4NDVENDMwMEIyQkVCMyAvKiBE
T01UaW1lU3RhbXAuaCAqLywKKwkJCQkxNEQ2NEFDNzEzNDZBNjBFMDBFNThGREEgLyogRE9NVHJl
ZVNjb3BlLmNwcCAqLywKKwkJCQkxNEQ2NEFDODEzNDZBNjBFMDBFNThGREEgLyogRE9NVHJlZVNj
b3BlLmggKi8sCiAJCQkJQkM3RkE2MUUwRDFGMENCRDAwREIyMkE5IC8qIER5bmFtaWNOb2RlTGlz
dC5jcHAgKi8sCiAJCQkJQkM3RkE2MUYwRDFGMENCRDAwREIyMkE5IC8qIER5bmFtaWNOb2RlTGlz
dC5oICovLAogCQkJCTY1NTBCNjk5MDk5REYwMjcwMDkwRDc4MSAvKiBFZGl0aW5nVGV4dC5jcHAg
Ki8sCkBAIC0yMDc4OCw2ICsyMDc5NCw3IEBACiAJCQkJMDVGRDY5RTAxMjg0NUQ0MzAwQjJCRUIz
IC8qIERPTVRpbWVTdGFtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzZGQzJCMEMxMjM3MERBMDAw
NkE5OTFBIC8qIERPTVRva2VuTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxQTM3QkUwOTdD
NzE1RjAwMTlGM0Q4IC8qIERPTVRyYXZlcnNhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTRENjRB
Q0ExMzQ2QTYwRTAwRTU4RkRBIC8qIERPTVRyZWVTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODU1MjZDRDIwQUIwQjdEOTAwMDMwMkVBIC8qIERPTVRyZWVXYWxrZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg1MEI0MUMzMEFEOUU3RTcwMEE2RUQ0RiAvKiBET01UcmVlV2Fsa2VySW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg1QzdGNDkxMEFBRjc5REMwMDQwMTRERCAvKiBET01VSUV2
ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIzNjM1LDYgKzIzNjQyLDcgQEAKIAkJCQk5MzNBMTRB
QTBCN0QxRDA5MDBBNTNGRkQgLyogRE9NVGV4dEV2ZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTg4NjA0QjMwRjJFNjU0QTAwMEI2NDQzIC8qIERPTVRpbWVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTc2RkMyQjBCMTIzNzBEQTAwMDZBOTkxQSAvKiBET01Ub2tlbkxpc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMTRENjRBQzkxMzQ2QTYwRTAwRTU4RkRBIC8qIERPTVRyZWVTY29wZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4NTUyNkNEMzBBQjBCN0RBMDAwMzAyRUEgLyogRE9NVHJlZVdh
bGtlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1QzdGNDkyMEFBRjc5REMwMDQwMTRERCAvKiBE
T01VSUV2ZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkUzN0RGREExMkRCQUZCODAwQTZCMjMz
IC8qIERPTVVSTC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9ET01UcmVlU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTVRyZWVTY29wZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNTQzOTE2Y2I5ODJhM2VkZTZhOGY5NmIzZTBmMjNiYzc2Yzg2ZDhmZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01UcmVlU2NvcGUuY3BwCkBA
IC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJET01UcmVlU2NvcGUuaCIKKwor
I2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MQW5jaG9yRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxNYXBFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworRE9NVHJlZVNj
b3BlOjpET01UcmVlU2NvcGUoRG9jdW1lbnQqIGRvY3VtZW50LCBDb25zdHJ1Y3Rpb25UeXBlIGNv
bnN0cnVjdGlvblR5cGUpCisgICAgOiBDb250YWluZXJOb2RlKGRvY3VtZW50LCBjb25zdHJ1Y3Rp
b25UeXBlKQorICAgICwgbV9ndWFyZFJlZkNvdW50KDApCisgICAgLCBtX2FjY2Vzc0tleU1hcFZh
bGlkKGZhbHNlKQorICAgICwgbV9udW1Ob2RlTGlzdENhY2hlcygwKQoreworfQorCit2b2lkIERP
TVRyZWVTY29wZTo6cmVtb3ZlZExhc3RSZWYoKQoreworICAgIEFTU0VSVCghbV9kZWxldGlvbkhh
c0JlZ3VuKTsKKyAgICBpZiAobV9ndWFyZFJlZkNvdW50KSB7CisgICAgICAgIC8vIElmIHJlbW92
aW5nIGEgY2hpbGQgcmVtb3ZlcyB0aGUgbGFzdCBzZWxmLW9ubHkgcmVmLCB3ZSBkb24ndAorICAg
ICAgICAvLyB3YW50IHRoZSBzY29wZSB0byBiZSBkZXN0cnVjdGVkIHVudGlsIGFmdGVyCisgICAg
ICAgIC8vIHJlbW92ZUFsbENoaWxkcmVuIHJldHVybnMsIHNvIHdlIGd1YXJkIG91cnNlbHZlcyB3
aXRoIGFuCisgICAgICAgIC8vIGV4dHJhIHNlbGYtb25seSByZWYuCisgICAgICAgIGd1YXJkUmVm
KCk7CisgICAgICAgIGRlc3Ryb3lTY29wZSgpOworICAgICAgICBndWFyZERlcmVmKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgQ29udGFpbmVyTm9kZTo6cmVtb3ZlZExhc3RSZWYoKTsKKyAgICB9
Cit9CisKK3ZvaWQgRE9NVHJlZVNjb3BlOjpkZXN0cm95U2NvcGUoKQoreworICAgIC8vIHJlbW92
ZUFsbENoaWxkcmVuKCkgZG9lc24ndCBhbHdheXMgdW5yZWdpc3RlciBJRHMsIGRvIGl0IHVwZnJv
bnQgdG8gYXZvaWQgaGF2aW5nIHN0YWxlIHJlZmVyZW5jZXMgaW4gdGhlIG1hcC4KKyAgICBtX2Vs
ZW1lbnRzQnlJZC5jbGVhcigpOworICAgIHJlbW92ZUFsbENoaWxkcmVuKCk7Cit9CisKK0VsZW1l
bnQqIERPTVRyZWVTY29wZTo6Z2V0RWxlbWVudEJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVt
ZW50SWQpIGNvbnN0Cit7CisgICAgaWYgKGVsZW1lbnRJZC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiBtX2VsZW1lbnRzQnlJZC5nZXRFbGVtZW50QnlJZChlbGVtZW50
SWQuaW1wbCgpLCB0aGlzKTsKK30KKwordm9pZCBET01UcmVlU2NvcGU6OmFkZEVsZW1lbnRCeUlk
KGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkLCBFbGVtZW50KiBlbGVtZW50KQoreworICAg
IG1fZWxlbWVudHNCeUlkLmFkZChlbGVtZW50SWQuaW1wbCgpLCBlbGVtZW50KTsKK30KKwordm9p
ZCBET01UcmVlU2NvcGU6OnJlbW92ZUVsZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYgZWxl
bWVudElkLCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIG1fZWxlbWVudHNCeUlkLnJlbW92ZShl
bGVtZW50SWQuaW1wbCgpLCBlbGVtZW50KTsKK30KKworRWxlbWVudCogRE9NVHJlZVNjb3BlOjpn
ZXRFbGVtZW50QnlBY2Nlc3NLZXkoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0Cit7CisgICAgaWYg
KGtleS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICghbV9hY2Nlc3NLZXlN
YXBWYWxpZCkgeworICAgICAgICBmb3IgKE5vZGUqIG4gPSBmaXJzdENoaWxkKCk7IG47IG4gPSBu
LT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICAgICAgICAgIGlmICghbi0+aXNFbGVtZW50Tm9k
ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgRWxlbWVudCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgYWNjZXNzS2V5ID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKGFjY2Vzc2tleUF0dHIp
OworICAgICAgICAgICAgaWYgKCFhY2Nlc3NLZXkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAg
IG1fZWxlbWVudHNCeUFjY2Vzc0tleS5zZXQoYWNjZXNzS2V5LmltcGwoKSwgZWxlbWVudCk7Cisg
ICAgICAgIH0KKyAgICAgICAgbV9hY2Nlc3NLZXlNYXBWYWxpZCA9IHRydWU7CisgICAgfQorICAg
IHJldHVybiBtX2VsZW1lbnRzQnlBY2Nlc3NLZXkuZ2V0KGtleS5pbXBsKCkpOworfQorCit2b2lk
IERPTVRyZWVTY29wZTo6aW52YWxpZGF0ZUFjY2Vzc0tleU1hcCgpCit7CisgICAgbV9hY2Nlc3NL
ZXlNYXBWYWxpZCA9IGZhbHNlOworICAgIG1fZWxlbWVudHNCeUFjY2Vzc0tleS5jbGVhcigpOwor
fQorCit2b2lkIERPTVRyZWVTY29wZTo6YWRkSW1hZ2VNYXAoSFRNTE1hcEVsZW1lbnQqIGltYWdl
TWFwKQoreworICAgIEF0b21pY1N0cmluZ0ltcGwqIG5hbWUgPSBpbWFnZU1hcC0+Z2V0TmFtZSgp
LmltcGwoKTsKKyAgICBpZiAoIW5hbWUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2ltYWdlTWFw
c0J5TmFtZS5hZGQobmFtZSwgaW1hZ2VNYXApOworfQorCit2b2lkIERPTVRyZWVTY29wZTo6cmVt
b3ZlSW1hZ2VNYXAoSFRNTE1hcEVsZW1lbnQqIGltYWdlTWFwKQoreworICAgIEF0b21pY1N0cmlu
Z0ltcGwqIG5hbWUgPSBpbWFnZU1hcC0+Z2V0TmFtZSgpLmltcGwoKTsKKyAgICBpZiAoIW5hbWUp
CisgICAgICAgIHJldHVybjsKKyAgICBtX2ltYWdlTWFwc0J5TmFtZS5yZW1vdmUobmFtZSwgaW1h
Z2VNYXApOworfQorCitIVE1MTWFwRWxlbWVudCogRE9NVHJlZVNjb3BlOjpnZXRJbWFnZU1hcChj
b25zdCBTdHJpbmcmIHVybCkgY29uc3QKK3sKKyAgICBpZiAodXJsLmlzTnVsbCgpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBzaXplX3QgaGFzaFBvcyA9IHVybC5maW5kKCcjJyk7CisgICAgU3Ry
aW5nIG5hbWUgPSAoaGFzaFBvcyA9PSBub3RGb3VuZCA/IHVybCA6IHVybC5zdWJzdHJpbmcoaGFz
aFBvcyArIDEpKS5pbXBsKCk7CisgICAgaWYgKGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkp
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTWFwRWxlbWVudCo+KG1faW1hZ2VNYXBz
QnlOYW1lLmdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKEF0b21pY1N0cmluZyhuYW1lLmxv
d2VyKCkpLmltcGwoKSwgdGhpcykpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTWFwRWxl
bWVudCo+KG1faW1hZ2VNYXBzQnlOYW1lLmdldEVsZW1lbnRCeU1hcE5hbWUoQXRvbWljU3RyaW5n
KG5hbWUpLmltcGwoKSwgdGhpcykpOworfQorCitFbGVtZW50KiBET01UcmVlU2NvcGU6OmZpbmRB
bmNob3IoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBnZXRFbGVtZW50QnlJ
ZChuYW1lKSkKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgZm9yIChOb2RlKiBub2RlID0g
dGhpczsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICBp
ZiAobm9kZS0+aGFzVGFnTmFtZShhVGFnKSkgeworICAgICAgICAgICAgSFRNTEFuY2hvckVsZW1l
bnQqIGFuY2hvciA9IHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50Kj4obm9kZSk7CisgICAg
ICAgICAgICBpZiAoZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBRdWlya3MgbW9kZSwgY2FzZSBpbnNlbnNpdGl2ZSBjb21wYXJpc29uIG9mIG5hbWVzLgor
ICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhbmNob3ItPm5hbWUoKSwgbmFt
ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbmNob3I7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIC8vIFN0cmljdCBtb2RlLCBuYW1lcyBuZWVkIHRvIG1hdGNo
IGV4YWN0bHkuCisgICAgICAgICAgICAgICAgaWYgKGFuY2hvci0+bmFtZSgpID09IG5hbWUpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBhbmNob3I7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RPTVRyZWVTY29wZS5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RPTVRyZWVTY29wZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiZmNlMzM3MmQ2N2Y2YWRjMjQ2
NGQzNWIwMzZkN2Q4MmUxZWNkMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRE9NVHJlZVNjb3BlLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBET01UcmVlU2NvcGVfaAorI2RlZmlu
ZSBET01UcmVlU2NvcGVfaAorCisjaW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgorI2luY2x1ZGUg
IkRvY3VtZW50T3JkZXJlZG1hcC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEVs
ZW1lbnQ7CitjbGFzcyBIVE1MTWFwRWxlbWVudDsKKworY2xhc3MgRE9NVHJlZVNjb3BlIDogcHVi
bGljIENvbnRhaW5lck5vZGUgeworcHVibGljOgorICAgIC8vIE5vZGVzIGJlbG9uZ2luZyB0byB0
aGlzIHNjb3BlIGhvbGQgZ3VhcmQgcmVmZXJlbmNlcyAtCisgICAgLy8gdGhlc2UgYXJlIGVub3Vn
aCB0byBrZWVwIHRoZSBkb2N1bWVudCBmcm9tIGJlaW5nIGRlc3Ryb3llZCwgYnV0CisgICAgLy8g
bm90IGVub3VnaCB0byBrZWVwIGl0IGZyb20gcmVtb3ZpbmcgaXRzIGNoaWxkcmVuLiBUaGlzIGFs
bG93cyBhCisgICAgLy8gbm9kZSB0aGF0IG91dGxpdmVzIGl0cyBzY29wZSB0byBzdGlsbCBoYXZl
IGEgdmFsaWQgc2NvcGUKKyAgICAvLyBwb2ludGVyIHdpdGhvdXQgaW50cm9kdWNpbmcgcmVmZXJl
bmNlIGN5Y2xlcy4KKworICAgIHZvaWQgZ3VhcmRSZWYoKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KCFtX2RlbGV0aW9uSGFzQmVndW4pOworICAgICAgICArK21fZ3VhcmRSZWZDb3VudDsKKyAgICB9
CisKKyAgICB2b2lkIGd1YXJkRGVyZWYoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2RlbGV0
aW9uSGFzQmVndW4pOworICAgICAgICAtLW1fZ3VhcmRSZWZDb3VudDsKKyAgICAgICAgaWYgKCFt
X2d1YXJkUmVmQ291bnQgJiYgIXJlZkNvdW50KCkpIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAg
ICAgICBtX2RlbGV0aW9uSGFzQmVndW4gPSB0cnVlOworI2VuZGlmCisgICAgICAgICAgICBkZWxl
dGUgdGhpczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkTGFz
dFJlZigpOworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95U2NvcGUoKTsKKworICAgIEVsZW1lbnQq
IGdldEVsZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OworICAgIGJvb2wgaGFz
RWxlbWVudFdpdGhJZChBdG9taWNTdHJpbmdJbXBsKiBpZCkgY29uc3Q7CisgICAgYm9vbCBjb250
YWluc011bHRpcGxlRWxlbWVudHNXaXRoSWQoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3Q7
CisgICAgdm9pZCBhZGRFbGVtZW50QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCwg
RWxlbWVudCopOworICAgIHZvaWQgcmVtb3ZlRWxlbWVudEJ5SWQoY29uc3QgQXRvbWljU3RyaW5n
JiBlbGVtZW50SWQsIEVsZW1lbnQqKTsKKworICAgIHZvaWQgYWRkSW1hZ2VNYXAoSFRNTE1hcEVs
ZW1lbnQqKTsKKyAgICB2b2lkIHJlbW92ZUltYWdlTWFwKEhUTUxNYXBFbGVtZW50Kik7CisgICAg
SFRNTE1hcEVsZW1lbnQqIGdldEltYWdlTWFwKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdDsKKwor
ICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeUFjY2Vzc0tleShjb25zdCBTdHJpbmcmIGtleSkgY29u
c3Q7CisgICAgdm9pZCBpbnZhbGlkYXRlQWNjZXNzS2V5TWFwKCk7CisKKyAgICB2b2lkIGFkZE5v
ZGVMaXN0Q2FjaGUoKSB7ICsrbV9udW1Ob2RlTGlzdENhY2hlczsgfQorICAgIHZvaWQgcmVtb3Zl
Tm9kZUxpc3RDYWNoZSgpIHsgQVNTRVJUKG1fbnVtTm9kZUxpc3RDYWNoZXMgPiAwKTsgLS1tX251
bU5vZGVMaXN0Q2FjaGVzOyB9CisgICAgYm9vbCBoYXNOb2RlTGlzdENhY2hlcygpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtTm9kZUxpc3RDYWNoZXM7IH0KKworICAgIC8vIEZpbmQgZmlyc3QgYW5jaG9y
IHdpdGggdGhlIGdpdmVuIG5hbWUuCisgICAgLy8gRmlyc3Qgc2VhcmNoZXMgZm9yIGFuIGVsZW1l
bnQgd2l0aCB0aGUgZ2l2ZW4gSUQsIGJ1dCBpZiB0aGF0IGZhaWxzLCB0aGVuIGxvb2tzCisgICAg
Ly8gZm9yIGFuIGFuY2hvciB3aXRoIHRoZSBnaXZlbiBuYW1lLiBJRCBtYXRjaGluZyBpcyBhbHdh
eXMgY2FzZSBzZW5zaXRpdmUsIGJ1dAorICAgIC8vIEFuY2hvciBuYW1lIG1hdGNoaW5nIGlzIGNh
c2Ugc2Vuc2l0aXZlIGluIHN0cmljdCBtb2RlIGFuZCBub3QgY2FzZSBzZW5zaXRpdmUgaW4KKyAg
ICAvLyBxdWlya3MgbW9kZSBmb3IgaGlzdG9yaWNhbCBjb21wYXRpYmlsaXR5IHJlYXNvbnMuCisg
ICAgRWxlbWVudCogZmluZEFuY2hvcihjb25zdCBTdHJpbmcmIG5hbWUpOworCitwcm90ZWN0ZWQ6
CisgICAgRE9NVHJlZVNjb3BlKERvY3VtZW50KiwgQ29uc3RydWN0aW9uVHlwZSA9IENyZWF0ZUNv
bnRhaW5lcik7CisKK3ByaXZhdGU6CisgICAgaW50IG1fZ3VhcmRSZWZDb3VudDsKKworICAgIERv
Y3VtZW50T3JkZXJlZE1hcCBtX2VsZW1lbnRzQnlJZDsKKyAgICBEb2N1bWVudE9yZGVyZWRNYXAg
bV9pbWFnZU1hcHNCeU5hbWU7CisKKyAgICBtdXRhYmxlIEhhc2hNYXA8U3RyaW5nSW1wbCosIEVs
ZW1lbnQqLCBDYXNlRm9sZGluZ0hhc2g+IG1fZWxlbWVudHNCeUFjY2Vzc0tleTsgICAgCisgICAg
bXV0YWJsZSBib29sIG1fYWNjZXNzS2V5TWFwVmFsaWQ7CisKKyAgICB1bnNpZ25lZCBtX251bU5v
ZGVMaXN0Q2FjaGVzOworfTsKKworaW5saW5lIGJvb2wgRE9NVHJlZVNjb3BlOjpoYXNFbGVtZW50
V2l0aElkKEF0b21pY1N0cmluZ0ltcGwqIGlkKSBjb25zdAoreworICAgIEFTU0VSVChpZCk7Cisg
ICAgcmV0dXJuIG1fZWxlbWVudHNCeUlkLmNvbnRhaW5zKGlkKTsKK30KKworaW5saW5lIGJvb2wg
RE9NVHJlZVNjb3BlOjpjb250YWluc011bHRpcGxlRWxlbWVudHNXaXRoSWQoY29uc3QgQXRvbWlj
U3RyaW5nJiBpZCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9lbGVtZW50c0J5SWQuY29udGFpbnNN
dWx0aXBsZShpZC5pbXBsKCkpOworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRE9NVHJlZVNjb3BlX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggNTE0
NDcwMzJlMDBmMzZlZDZiYTU5ZmI0YmI4MzMyOTk0NzJhMGQ1Ni4uZGY5OWNmMDNiZWJhOTQ5MmNl
ODA5NmE5ZWFmZDJkNDMzOWQ1MmY1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0zNzcs
NyArMzc3LDcgQEAgcHJpdmF0ZToKIHVpbnQ2NF90IERvY3VtZW50OjpzX2dsb2JhbFRyZWVWZXJz
aW9uID0gMDsKIAogRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgY29uc3QgS1VSTCYg
dXJsLCBib29sIGlzWEhUTUwsIGJvb2wgaXNIVE1MKQotICAgIDogQ29udGFpbmVyTm9kZSgwKQor
ICAgIDogRG9jdW1lbnRCYXNlQ2xhc3MoMCkKICAgICAsIG1fY29tcGF0aWJpbGl0eU1vZGUoTm9R
dWlya3NNb2RlKQogICAgICwgbV9jb21wYXRpYmlsaXR5TW9kZUxvY2tlZChmYWxzZSkKICAgICAs
IG1fZG9tVHJlZVZlcnNpb24oKytzX2dsb2JhbFRyZWVWZXJzaW9uKQpAQCAtMzk5LDcgKzM5OSw2
IEBAIERvY3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IEtVUkwmIHVybCwgYm9v
bCBpc1hIVE1MLCBib29sIGlzSFRNTCkKICAgICAsIG1feG1sU3RhbmRhbG9uZShmYWxzZSkKICAg
ICAsIG1fc2F2ZWRSZW5kZXJlcigwKQogICAgICwgbV9kZXNpZ25Nb2RlKGluaGVyaXQpCi0gICAg
LCBtX3NlbGZPbmx5UmVmQ291bnQoMCkKICNpZiBFTkFCTEUoU1ZHKQogICAgICwgbV9zdmdFeHRl
bnNpb25zKDApCiAjZW5kaWYKQEAgLTQwNyw3ICs0MDYsNiBAQCBEb2N1bWVudDo6RG9jdW1lbnQo
RnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwsIGJvb2wgaXNYSFRNTCwgYm9vbCBpc0hUTUwp
CiAgICAgLCBtX2hhc0Rhc2hib2FyZFJlZ2lvbnMoZmFsc2UpCiAgICAgLCBtX2Rhc2hib2FyZFJl
Z2lvbnNEaXJ0eShmYWxzZSkKICNlbmRpZgotICAgICwgbV9hY2Nlc3NLZXlNYXBWYWxpZChmYWxz
ZSkKICAgICAsIG1fY3JlYXRlUmVuZGVyZXJzKHRydWUpCiAgICAgLCBtX2luUGFnZUNhY2hlKGZh
bHNlKQogICAgICwgbV91c2VTZWN1cmVLZXlib2FyZEVudHJ5V2hlbkFjdGl2ZShmYWxzZSkKQEAg
LTQxNSw3ICs0MTMsNiBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBL
VVJMJiB1cmwsIGJvb2wgaXNYSFRNTCwgYm9vbCBpc0hUTUwpCiAgICAgLCBtX2lzSFRNTChpc0hU
TUwpCiAgICAgLCBtX3VzZXNWaWV3U291cmNlU3R5bGVzKGZhbHNlKQogICAgICwgbV9zYXdFbGVt
ZW50c0luS25vd25OYW1lc3BhY2VzKGZhbHNlKQotICAgICwgbV9udW1Ob2RlTGlzdENhY2hlcygw
KQogI2lmIFVTRShKU0MpCiAgICAgLCBtX25vcm1hbFdvcmxkV3JhcHBlckNhY2hlKDApCiAjZW5k
aWYKQEAgLTUxMSw1NSArNTA4LDM4IEBAIERvY3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUs
IGNvbnN0IEtVUkwmIHVybCwgYm9vbCBpc1hIVE1MLCBib29sIGlzSFRNTCkKICNlbmRpZgogfQog
Ci12b2lkIERvY3VtZW50OjpyZW1vdmVkTGFzdFJlZigpCit2b2lkIERvY3VtZW50OjpkZXN0cm95
U2NvcGUoKQogewogICAgIEFTU0VSVCghbV9kZWxldGlvbkhhc0JlZ3VuKTsKLSAgICBpZiAobV9z
ZWxmT25seVJlZkNvdW50KSB7Ci0gICAgICAgIC8vIElmIHJlbW92aW5nIGEgY2hpbGQgcmVtb3Zl
cyB0aGUgbGFzdCBzZWxmLW9ubHkgcmVmLCB3ZSBkb24ndAotICAgICAgICAvLyB3YW50IHRoZSBk
b2N1bWVudCB0byBiZSBkZXN0cnVjdGVkIHVudGlsIGFmdGVyCi0gICAgICAgIC8vIHJlbW92ZUFs
bENoaWxkcmVuIHJldHVybnMsIHNvIHdlIGd1YXJkIG91cnNlbHZlcyB3aXRoIGFuCi0gICAgICAg
IC8vIGV4dHJhIHNlbGYtb25seSByZWYuCi0gICAgICAgIHNlbGZPbmx5UmVmKCk7Ci0KLSAgICAg
ICAgLy8gV2UgbXVzdCBtYWtlIHN1cmUgbm90IHRvIGJlIHJldGFpbmluZyBhbnkgb2Ygb3VyIGNo
aWxkcmVuIHRocm91Z2gKLSAgICAgICAgLy8gdGhlc2UgZXh0cmEgcG9pbnRlcnMgb3Igd2Ugd2ls
bCBjcmVhdGUgYSByZWZlcmVuY2UgY3ljbGUuCi0gICAgICAgIG1fZG9jVHlwZSA9IDA7Ci0gICAg
ICAgIG1fZm9jdXNlZE5vZGUgPSAwOwotICAgICAgICBtX2hvdmVyTm9kZSA9IDA7Ci0gICAgICAg
IG1fYWN0aXZlTm9kZSA9IDA7Ci0gICAgICAgIG1fdGl0bGVFbGVtZW50ID0gMDsKLSAgICAgICAg
bV9kb2N1bWVudEVsZW1lbnQgPSAwOworCisgICAgLy8gV2UgbXVzdCBtYWtlIHN1cmUgbm90IHRv
IGJlIHJldGFpbmluZyBhbnkgb2Ygb3VyIGNoaWxkcmVuIHRocm91Z2gKKyAgICAvLyB0aGVzZSBl
eHRyYSBwb2ludGVycyBvciB3ZSB3aWxsIGNyZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZS4KKyAgICBt
X2RvY1R5cGUgPSAwOworICAgIG1fZm9jdXNlZE5vZGUgPSAwOworICAgIG1faG92ZXJOb2RlID0g
MDsKKyAgICBtX2FjdGl2ZU5vZGUgPSAwOworICAgIG1fdGl0bGVFbGVtZW50ID0gMDsKKyAgICBt
X2RvY3VtZW50RWxlbWVudCA9IDA7CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgICAg
ICBtX2Z1bGxTY3JlZW5FbGVtZW50ID0gMDsKKyAgICBtX2Z1bGxTY3JlZW5FbGVtZW50ID0gMDsK
ICNlbmRpZgogCi0gICAgICAgIC8vIHJlbW92ZUFsbENoaWxkcmVuKCkgZG9lc24ndCBhbHdheXMg
dW5yZWdpc3RlciBJRHMsIGRvIGl0IHVwZnJvbnQgdG8gYXZvaWQgaGF2aW5nIHN0YWxlIHJlZmVy
ZW5jZXMgaW4gdGhlIG1hcC4KLSAgICAgICAgbV9lbGVtZW50c0J5SWQuY2xlYXIoKTsKLQotICAg
ICAgICByZW1vdmVBbGxDaGlsZHJlbigpOworICAgIERvY3VtZW50QmFzZUNsYXNzOjpkZXN0cm95
U2NvcGUoKTsKIAotICAgICAgICBtX21hcmtlcnMtPmRldGFjaCgpOworICAgIG1fbWFya2Vycy0+
ZGV0YWNoKCk7CiAKLSAgICAgICAgZGV0YWNoUGFyc2VyKCk7CisgICAgZGV0YWNoUGFyc2VyKCk7
CiAKLSAgICAgICAgbV9jc3NDYW52YXNFbGVtZW50cy5jbGVhcigpOworICAgIG1fY3NzQ2FudmFz
RWxlbWVudHMuY2xlYXIoKTsKIAogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkK
LSAgICAgICAgLy8gRklYTUU6IGNvbnNpZGVyIHVzaW5nIEFjdGl2ZURPTU9iamVjdC4KLSAgICAg
ICAgbV9zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIgPSAwOwotI2VuZGlmCi0KLSNpZm5kZWYg
TkRFQlVHCi0gICAgICAgIG1faW5SZW1vdmVkTGFzdFJlZkZ1bmN0aW9uID0gZmFsc2U7CisgICAg
Ly8gRklYTUU6IGNvbnNpZGVyIHVzaW5nIEFjdGl2ZURPTU9iamVjdC4KKyAgICBtX3NjcmlwdGVk
QW5pbWF0aW9uQ29udHJvbGxlciA9IDA7CiAjZW5kaWYKIAotICAgICAgICBzZWxmT25seURlcmVm
KCk7Ci0gICAgfSBlbHNlIHsKICNpZm5kZWYgTkRFQlVHCi0gICAgICAgIG1fZGVsZXRpb25IYXNC
ZWd1biA9IHRydWU7CisgICAgbV9pblJlbW92ZWRMYXN0UmVmRnVuY3Rpb24gPSBmYWxzZTsKICNl
bmRpZgotICAgICAgICBkZWxldGUgdGhpczsKLSAgICB9CiB9CiAKIERvY3VtZW50Ojp+RG9jdW1l
bnQoKQpAQCAtNjIxLDYgKzYwMSwxMSBAQCBEb2N1bWVudDo6fkRvY3VtZW50KCkKICAgICAgICAg
bV9pbXBsZW1lbnRhdGlvbi0+b3duZXJEb2N1bWVudERlc3Ryb3llZCgpOwogfQogCitFbGVtZW50
KiBEb2N1bWVudDo6Z2V0RWxlbWVudEJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3QK
K3sKKyAgICByZXR1cm4gRE9NVHJlZVNjb3BlOjpnZXRFbGVtZW50QnlJZChpZCk7Cit9CisKIE1l
ZGlhUXVlcnlNYXRjaGVyKiBEb2N1bWVudDo6bWVkaWFRdWVyeU1hdGNoZXIoKQogewogICAgIGlm
ICghbV9tZWRpYVF1ZXJ5TWF0Y2hlcikKQEAgLTcwOSw3ICs2OTQsNyBAQCBET01JbXBsZW1lbnRh
dGlvbiogRG9jdW1lbnQ6OmltcGxlbWVudGF0aW9uKCkKIAogdm9pZCBEb2N1bWVudDo6Y2hpbGRy
ZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUq
IGFmdGVyQ2hhbmdlLCBpbnQgY2hpbGRDb3VudERlbHRhKQogewotICAgIENvbnRhaW5lck5vZGU6
OmNoaWxkcmVuQ2hhbmdlZChjaGFuZ2VkQnlQYXJzZXIsIGJlZm9yZUNoYW5nZSwgYWZ0ZXJDaGFu
Z2UsIGNoaWxkQ291bnREZWx0YSk7CisgICAgRG9jdW1lbnRCYXNlQ2xhc3M6OmNoaWxkcmVuQ2hh
bmdlZChjaGFuZ2VkQnlQYXJzZXIsIGJlZm9yZUNoYW5nZSwgYWZ0ZXJDaGFuZ2UsIGNoaWxkQ291
bnREZWx0YSk7CiAgICAgCiAgICAgLy8gSW52YWxpZGF0ZSB0aGUgZG9jdW1lbnQgZWxlbWVudCB3
ZSBoYXZlIGNhY2hlZCBpbiBjYXNlIGl0IHdhcyByZXBsYWNlZC4KICAgICBtX2RvY3VtZW50RWxl
bWVudCA9IDA7CkBAIC0xMDAyLDEzICs5ODcsNiBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IERvY3Vt
ZW50OjpjcmVhdGVFbGVtZW50TlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0CiAg
ICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQocU5hbWUsIGZhbHNlKTsKIH0KIAotRWxlbWVudCogRG9j
dW1lbnQ6OmdldEVsZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBjb25z
dAotewotICAgIGlmIChlbGVtZW50SWQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICByZXR1cm4gbV9lbGVtZW50c0J5SWQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkLmltcGwoKSwg
dGhpcyk7Ci19Ci0KIFN0cmluZyBEb2N1bWVudDo6cmVhZHlTdGF0ZSgpIGNvbnN0CiB7CiAgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGxvYWRpbmcsICgibG9hZGluZyIpKTsK
QEAgLTEyMzUsMzQgKzEyMTMsNiBAQCBQYXNzUmVmUHRyPFJhbmdlPiBEb2N1bWVudDo6Y2FyZXRS
YW5nZUZyb21Qb2ludChpbnQgeCwgaW50IHkpCiAgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUodGhp
cywgcmFuZ2VDb21wbGlhbnRQb3NpdGlvbiwgcmFuZ2VDb21wbGlhbnRQb3NpdGlvbik7CiB9CiAK
LXZvaWQgRG9jdW1lbnQ6OmFkZEVsZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVu
dElkLCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIG1fZWxlbWVudHNCeUlkLmFkZChlbGVtZW50
SWQuaW1wbCgpLCBlbGVtZW50KTsKLX0KLQotdm9pZCBEb2N1bWVudDo6cmVtb3ZlRWxlbWVudEJ5
SWQoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQsIEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0g
ICAgbV9lbGVtZW50c0J5SWQucmVtb3ZlKGVsZW1lbnRJZC5pbXBsKCksIGVsZW1lbnQpOwotfQot
Ci1FbGVtZW50KiBEb2N1bWVudDo6Z2V0RWxlbWVudEJ5QWNjZXNzS2V5KGNvbnN0IFN0cmluZyYg
a2V5KSBjb25zdAotewotICAgIGlmIChrZXkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsK
LSAgICBpZiAoIW1fYWNjZXNzS2V5TWFwVmFsaWQpIHsKLSAgICAgICAgZm9yIChOb2RlKiBuID0g
Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7Ci0gICAgICAgICAg
ICBpZiAoIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0g
ICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFjY2Vzc0tleSA9IGVsZW1lbnQtPmdldEF0
dHJpYnV0ZShhY2Nlc3NrZXlBdHRyKTsKLSAgICAgICAgICAgIGlmICghYWNjZXNzS2V5LmlzRW1w
dHkoKSkKLSAgICAgICAgICAgICAgICBtX2VsZW1lbnRzQnlBY2Nlc3NLZXkuc2V0KGFjY2Vzc0tl
eS5pbXBsKCksIGVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICAgIG1fYWNjZXNzS2V5TWFwVmFs
aWQgPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gbV9lbGVtZW50c0J5QWNjZXNzS2V5LmdldChr
ZXkuaW1wbCgpKTsKLX0KLQogLyoKICAqIFBlcmZvcm1zIHRocmVlIG9wZXJhdGlvbnM6CiAgKiAg
MS4gQ29udmVydCBjb250cm9sIGNoYXJhY3RlcnMgdG8gc3BhY2VzCkBAIC0xNDYwLDEwICsxNDEw
LDcgQEAgdm9pZCBEb2N1bWVudDo6c2NoZWR1bGVTdHlsZVJlY2FsYygpCiAgICAgZG9jdW1lbnRz
VGhhdE5lZWRTdHlsZVJlY2FsYy0+YWRkKHRoaXMpOwogICAgIAogICAgIC8vIEZJWE1FOiBXaHkg
b24gZWFydGggaXMgdGhpcyBoZXJlPyBUaGlzIGlzIGNsZWFybHkgbWlzcGxhY2VkLgotICAgIGlm
IChtX2FjY2Vzc0tleU1hcFZhbGlkKSB7Ci0gICAgICAgIG1fYWNjZXNzS2V5TWFwVmFsaWQgPSBm
YWxzZTsKLSAgICAgICAgbV9lbGVtZW50c0J5QWNjZXNzS2V5LmNsZWFyKCk7Ci0gICAgfQorICAg
IGludmFsaWRhdGVBY2Nlc3NLZXlNYXAoKTsKICAgICAKICAgICBtX3N0eWxlUmVjYWxjVGltZXIu
c3RhcnRPbmVTaG90KDApOwogfQpAQCAtMTc1NSw3ICsxNzAyLDcgQEAgdm9pZCBEb2N1bWVudDo6
YXR0YWNoKCkKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlciA9IHJlbmRlcmVyKCk7CiAgICAgc2V0
UmVuZGVyZXIoMCk7CiAKLSAgICBDb250YWluZXJOb2RlOjphdHRhY2goKTsKKyAgICBEb2N1bWVu
dEJhc2VDbGFzczo6YXR0YWNoKCk7CiAKICAgICBzZXRSZW5kZXJlcihyZW5kZXIpOwogfQpAQCAt
MTgxMiw3ICsxNzU5LDcgQEAgdm9pZCBEb2N1bWVudDo6ZGV0YWNoKCkKICAgICBtX2ZvY3VzZWRO
b2RlID0gMDsKICAgICBtX2FjdGl2ZU5vZGUgPSAwOwogCi0gICAgQ29udGFpbmVyTm9kZTo6ZGV0
YWNoKCk7CisgICAgRG9jdW1lbnRCYXNlQ2xhc3M6OmRldGFjaCgpOwogCiAgICAgdW5zY2hlZHVs
ZVN0eWxlUmVjYWxjKCk7CiAKQEAgLTM4OTUsMzMgKzM4NDIsNiBAQCBib29sIERvY3VtZW50Ojpw
YXJzZVF1YWxpZmllZE5hbWUoY29uc3QgU3RyaW5nJiBxdWFsaWZpZWROYW1lLCBTdHJpbmcmIHBy
ZWZpeCwgUwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIERvY3VtZW50OjphZGRJbWFnZU1h
cChIVE1MTWFwRWxlbWVudCogaW1hZ2VNYXApCi17Ci0gICAgQXRvbWljU3RyaW5nSW1wbCogbmFt
ZSA9IGltYWdlTWFwLT5nZXROYW1lKCkuaW1wbCgpOwotICAgIGlmICghbmFtZSkKLSAgICAgICAg
cmV0dXJuOwotICAgIG1faW1hZ2VNYXBzQnlOYW1lLmFkZChuYW1lLCBpbWFnZU1hcCk7Ci19Ci0K
LXZvaWQgRG9jdW1lbnQ6OnJlbW92ZUltYWdlTWFwKEhUTUxNYXBFbGVtZW50KiBpbWFnZU1hcCkK
LXsKLSAgICBBdG9taWNTdHJpbmdJbXBsKiBuYW1lID0gaW1hZ2VNYXAtPmdldE5hbWUoKS5pbXBs
KCk7Ci0gICAgaWYgKCFuYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgbV9pbWFnZU1hcHNCeU5h
bWUucmVtb3ZlKG5hbWUsIGltYWdlTWFwKTsKLX0KLQotSFRNTE1hcEVsZW1lbnQqIERvY3VtZW50
OjpnZXRJbWFnZU1hcChjb25zdCBTdHJpbmcmIHVybCkgY29uc3QKLXsKLSAgICBpZiAodXJsLmlz
TnVsbCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBzaXplX3QgaGFzaFBvcyA9IHVybC5maW5k
KCcjJyk7Ci0gICAgU3RyaW5nIG5hbWUgPSAoaGFzaFBvcyA9PSBub3RGb3VuZCA/IHVybCA6IHVy
bC5zdWJzdHJpbmcoaGFzaFBvcyArIDEpKS5pbXBsKCk7Ci0gICAgaWYgKGlzSFRNTERvY3VtZW50
KCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTWFwRWxlbWVudCo+KG1faW1hZ2VN
YXBzQnlOYW1lLmdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKEF0b21pY1N0cmluZyhuYW1l
Lmxvd2VyKCkpLmltcGwoKSwgdGhpcykpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTWFw
RWxlbWVudCo+KG1faW1hZ2VNYXBzQnlOYW1lLmdldEVsZW1lbnRCeU1hcE5hbWUoQXRvbWljU3Ry
aW5nKG5hbWUpLmltcGwoKSwgdGhpcykpOwotfQotCiB2b2lkIERvY3VtZW50OjpzZXREZWNvZGVy
KFBhc3NSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gZGVjb2RlcikKIHsKICAgICBtX2RlY29k
ZXIgPSBkZWNvZGVyOwpAQCAtNDc3MCwyOSArNDY5MCw2IEBAIHZvaWQgRG9jdW1lbnQ6OnJlc3Vt
ZVNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlckNhbGxiYWNrcygpCiAjZW5kaWYKIH0KIAotRWxl
bWVudCogRG9jdW1lbnQ6OmZpbmRBbmNob3IoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlm
IChuYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKEVsZW1lbnQqIGVs
ZW1lbnQgPSBnZXRFbGVtZW50QnlJZChuYW1lKSkKLSAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0g
ICAgZm9yIChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4
dE5vZGUoKSkgewotICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShhVGFnKSkgewotICAgICAg
ICAgICAgSFRNTEFuY2hvckVsZW1lbnQqIGFuY2hvciA9IHN0YXRpY19jYXN0PEhUTUxBbmNob3JF
bGVtZW50Kj4obm9kZSk7Ci0gICAgICAgICAgICBpZiAoaW5RdWlya3NNb2RlKCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBRdWlya3MgbW9kZSwgY2FzZSBpbnNlbnNpdGl2ZSBjb21wYXJpc29uIG9m
IG5hbWVzLgotICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhbmNob3ItPm5h
bWUoKSwgbmFtZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhbmNob3I7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFN0cmljdCBtb2RlLCBuYW1lcyBuZWVk
IHRvIG1hdGNoIGV4YWN0bHkuCi0gICAgICAgICAgICAgICAgaWYgKGFuY2hvci0+bmFtZSgpID09
IG5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhbmNob3I7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIFN0cmluZyBEb2N1bWVudDo6
ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhjb25zdCBTdHJpbmcmIHN0cikgY29uc3QK
IHsKICAgICBpZiAobV9kZWNvZGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCA4YTgzZDU5ZTc5
M2FhNDJkODRkNDU4MzhjNzU0OTBiOTA1N2MwYzE4Li40YTQ4MzllMTA4ZjQwZDU5OTQ4NmU1YmM4
MGMzZDk2YzU0OTEzOWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtMzEsOSArMzEsOCBAQAog
I2luY2x1ZGUgIkNvbGxlY3Rpb25DYWNoZS5oIgogI2luY2x1ZGUgIkNvbGxlY3Rpb25UeXBlLmgi
CiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJDb250YWluZXJOb2RlLmgiCiAjaW5jbHVk
ZSAiRE9NVGltZVN0YW1wLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRPcmRlcmVkTWFwLmgiCisjaW5j
bHVkZSAiRE9NVHJlZVNjb3BlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRUaW1pbmcuaCIKICNpbmNs
dWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgpAQCAtMjA2LDggKzIwNSwxMCBAQCBlbnVtIFBhZ2VzaG93RXZlbnRQZXJzaXN0ZW5jZSB7CiAK
IGVudW0gU3R5bGVTZWxlY3RvclVwZGF0ZUZsYWcgeyBSZWNhbGNTdHlsZUltbWVkaWF0ZWx5LCBE
ZWZlclJlY2FsY1N0eWxlIH07CiAKLWNsYXNzIERvY3VtZW50IDogcHVibGljIENvbnRhaW5lck5v
ZGUsIHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHsKK2NsYXNzIERvY3VtZW50IDogcHVi
bGljIERPTVRyZWVTY29wZSwgcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgewogcHVibGlj
OgorICAgIHR5cGVkZWYgRE9NVHJlZVNjb3BlIERvY3VtZW50QmFzZUNsYXNzOworCiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSogZnJhbWUsIGNvbnN0IEtVUkwm
IHVybCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRG9jdW1lbnQoZnJhbWUs
IHVybCwgZmFsc2UsIGZhbHNlKSk7CkBAIC0yMjAsMzEgKzIyMSwxMCBAQCBwdWJsaWM6CiAKICAg
ICBNZWRpYVF1ZXJ5TWF0Y2hlciogbWVkaWFRdWVyeU1hdGNoZXIoKTsKIAotICAgIHVzaW5nIENv
bnRhaW5lck5vZGU6OnJlZjsKLSAgICB1c2luZyBDb250YWluZXJOb2RlOjpkZXJlZjsKLQotICAg
IC8vIE5vZGVzIGJlbG9uZ2luZyB0byB0aGlzIGRvY3VtZW50IGhvbGQgInNlbGYtb25seSIgcmVm
ZXJlbmNlcyAtCi0gICAgLy8gdGhlc2UgYXJlIGVub3VnaCB0byBrZWVwIHRoZSBkb2N1bWVudCBm
cm9tIGJlaW5nIGRlc3Ryb3llZCwgYnV0Ci0gICAgLy8gbm90IGVub3VnaCB0byBrZWVwIGl0IGZy
b20gcmVtb3ZpbmcgaXRzIGNoaWxkcmVuLiBUaGlzIGFsbG93cyBhCi0gICAgLy8gbm9kZSB0aGF0
IG91dGxpdmVzIGl0cyBkb2N1bWVudCB0byBzdGlsbCBoYXZlIGEgdmFsaWQgZG9jdW1lbnQKLSAg
ICAvLyBwb2ludGVyIHdpdGhvdXQgaW50cm9kdWNpbmcgcmVmZXJlbmNlIGN5Y2xlcworICAgIHVz
aW5nIERvY3VtZW50QmFzZUNsYXNzOjpyZWY7CisgICAgdXNpbmcgRG9jdW1lbnRCYXNlQ2xhc3M6
OmRlcmVmOwogCi0gICAgdm9pZCBzZWxmT25seVJlZigpCi0gICAgewotICAgICAgICBBU1NFUlQo
IW1fZGVsZXRpb25IYXNCZWd1bik7Ci0gICAgICAgICsrbV9zZWxmT25seVJlZkNvdW50OwotICAg
IH0KLSAgICB2b2lkIHNlbGZPbmx5RGVyZWYoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX2Rl
bGV0aW9uSGFzQmVndW4pOwotICAgICAgICAtLW1fc2VsZk9ubHlSZWZDb3VudDsKLSAgICAgICAg
aWYgKCFtX3NlbGZPbmx5UmVmQ291bnQgJiYgIXJlZkNvdW50KCkpIHsKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgICAgICAgICBtX2RlbGV0aW9uSGFzQmVndW4gPSB0cnVlOwotI2VuZGlmCi0gICAgICAg
ICAgICBkZWxldGUgdGhpczsKLSAgICAgICAgfQotICAgIH0KKyAgICBFbGVtZW50KiBnZXRFbGVt
ZW50QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdDsKIAogICAgIC8vIERPTSBtZXRo
b2RzICYgYXR0cmlidXRlcyBmb3IgRG9jdW1lbnQKIApAQCAtMzI5LDkgKzMwOSw2IEBAIHB1Ymxp
YzoKICAgICBQYXNzUmVmUHRyPE5vZGU+IGltcG9ydE5vZGUoTm9kZSogaW1wb3J0ZWROb2RlLCBi
b29sIGRlZXAsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RWxlbWVu
dD4gY3JlYXRlRWxlbWVudE5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJp
bmcmIHF1YWxpZmllZE5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPEVsZW1l
bnQ+IGNyZWF0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGJvb2wgY3JlYXRlZEJ5UGFy
c2VyKTsKLSAgICBFbGVtZW50KiBnZXRFbGVtZW50QnlJZChjb25zdCBBdG9taWNTdHJpbmcmKSBj
b25zdDsKLSAgICBib29sIGhhc0VsZW1lbnRXaXRoSWQoQXRvbWljU3RyaW5nSW1wbCogaWQpIGNv
bnN0OwotICAgIGJvb2wgY29udGFpbnNNdWx0aXBsZUVsZW1lbnRzV2l0aElkKGNvbnN0IEF0b21p
Y1N0cmluZyYgaWQpIGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgYWxsIG5vZGVz
IHRoYXQgaW50ZXJzZWN0IGEgcmVjdCBpbiB0aGUgd2luZG93J3MgZG9jdW1lbnQsIHVudGlsIGl0
IGlzIGZ1bGx5IGVuY2xvc2VkIGJ5CkBAIC0zOTUsMTMgKzM3Miw2IEBAIHB1YmxpYzoKIAogICAg
IFBhc3NSZWZQdHI8SFRNTEFsbENvbGxlY3Rpb24+IGFsbCgpOwogCi0gICAgLy8gRmluZCBmaXJz
dCBhbmNob3Igd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLSAgICAvLyBGaXJzdCBzZWFyY2hlcyBmb3Ig
YW4gZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBJRCwgYnV0IGlmIHRoYXQgZmFpbHMsIHRoZW4gbG9v
a3MKLSAgICAvLyBmb3IgYW4gYW5jaG9yIHdpdGggdGhlIGdpdmVuIG5hbWUuIElEIG1hdGNoaW5n
IGlzIGFsd2F5cyBjYXNlIHNlbnNpdGl2ZSwgYnV0Ci0gICAgLy8gQW5jaG9yIG5hbWUgbWF0Y2hp
bmcgaXMgY2FzZSBzZW5zaXRpdmUgaW4gc3RyaWN0IG1vZGUgYW5kIG5vdCBjYXNlIHNlbnNpdGl2
ZSBpbgotICAgIC8vIHF1aXJrcyBtb2RlIGZvciBoaXN0b3JpY2FsIGNvbXBhdGliaWxpdHkgcmVh
c29ucy4KLSAgICBFbGVtZW50KiBmaW5kQW5jaG9yKGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0KICAg
ICBDb2xsZWN0aW9uQ2FjaGUqIGNvbGxlY3Rpb25JbmZvKENvbGxlY3Rpb25UeXBlIHR5cGUpCiAg
ICAgewogICAgICAgICBBU1NFUlQodHlwZSA+PSBGaXJzdFVubmFtZWREb2N1bWVudENhY2hlZFR5
cGUpOwpAQCAtNDUyLDggKzQyMiw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fc3R5bGVT
ZWxlY3Rvci5nZXQoKTsKICAgICB9CiAKLSAgICBFbGVtZW50KiBnZXRFbGVtZW50QnlBY2Nlc3NL
ZXkoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0OwotICAgIAogICAgIC8qKgogICAgICAqIFVwZGF0
ZXMgdGhlIHBlbmRpbmcgc2hlZXQgY291bnQgYW5kIHRoZW4gY2FsbHMgdXBkYXRlU3R5bGVTZWxl
Y3Rvci4KICAgICAgKi8KQEAgLTg2NywxMyArODM1LDYgQEAgcHVibGljOgogICAgIC8vIENoZWNr
cyB0byBtYWtlIHN1cmUgcHJlZml4IGFuZCBuYW1lc3BhY2UgZG8gbm90IGNvbmZsaWN0IChwZXIg
RE9NIENvcmUgMykKICAgICBzdGF0aWMgYm9vbCBoYXNQcmVmaXhOYW1lc3BhY2VNaXNtYXRjaChj
b25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgCi0gICAgdm9pZCBhZGRFbGVtZW50QnlJZChjb25z
dCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCwgRWxlbWVudCAqZWxlbWVudCk7Ci0gICAgdm9pZCBy
ZW1vdmVFbGVtZW50QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCwgRWxlbWVudCAq
ZWxlbWVudCk7Ci0KLSAgICB2b2lkIGFkZEltYWdlTWFwKEhUTUxNYXBFbGVtZW50Kik7Ci0gICAg
dm9pZCByZW1vdmVJbWFnZU1hcChIVE1MTWFwRWxlbWVudCopOwotICAgIEhUTUxNYXBFbGVtZW50
KiBnZXRJbWFnZU1hcChjb25zdCBTdHJpbmcmIHVybCkgY29uc3Q7Ci0KICAgICBIVE1MRWxlbWVu
dCogYm9keSgpIGNvbnN0OwogICAgIHZvaWQgc2V0Qm9keShQYXNzUmVmUHRyPEhUTUxFbGVtZW50
PiwgRXhjZXB0aW9uQ29kZSYpOwogCkBAIC05NDYsMTAgKzkwNyw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldFVzZVNlY3VyZUtleWJvYXJkRW50cnlXaGVuQWN0aXZlKGJvb2wpOwogICAgIGJvb2wg
dXNlU2VjdXJlS2V5Ym9hcmRFbnRyeVdoZW5BY3RpdmUoKSBjb25zdDsKIAotICAgIHZvaWQgYWRk
Tm9kZUxpc3RDYWNoZSgpIHsgKyttX251bU5vZGVMaXN0Q2FjaGVzOyB9Ci0gICAgdm9pZCByZW1v
dmVOb2RlTGlzdENhY2hlKCkgeyBBU1NFUlQobV9udW1Ob2RlTGlzdENhY2hlcyA+IDApOyAtLW1f
bnVtTm9kZUxpc3RDYWNoZXM7IH0KLSAgICBib29sIGhhc05vZGVMaXN0Q2FjaGVzKCkgY29uc3Qg
eyByZXR1cm4gbV9udW1Ob2RlTGlzdENhY2hlczsgfQotCiAgICAgdm9pZCB1cGRhdGVGb2N1c0Fw
cGVhcmFuY2VTb29uKGJvb2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKTsKICAgICB2b2lkIGNh
bmNlbEZvY3VzQXBwZWFyYW5jZVVwZGF0ZSgpOwogICAgICAgICAKQEAgLTExMzAsNiArMTA4Nyw4
IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IEtVUkwm
LCBib29sIGlzWEhUTUwsIGJvb2wgaXNIVE1MKTsKIAorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95
U2NvcGUoKTsKKwogICAgIHZvaWQgY2xlYXJYTUxWZXJzaW9uKCkgeyBtX3htbFZlcnNpb24gPSBT
dHJpbmcoKTsgfQogCiBwcml2YXRlOgpAQCAtMTE0MSw3ICsxMTAwLDYgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHByb2Nlc3NBcmd1bWVudHMoY29uc3QgU3RyaW5nJiBmZWF0dXJlcywgdm9pZCogZGF0
YSwgQXJndW1lbnRzQ2FsbGJhY2spOwogCiAgICAgdmlydHVhbCBib29sIGlzRG9jdW1lbnQoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZWRMYXN0UmVmKCk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2Vy
ID0gZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVyQ2hhbmdlID0gMCwg
aW50IGNoaWxkQ291bnREZWx0YSA9IDApOwogCkBAIC0xMzI4LDggKzEyODYsNiBAQCBwcml2YXRl
OgogICAgIFJlZlB0cjxEb2N1bWVudD4gbV90cmFuc2Zvcm1Tb3VyY2VEb2N1bWVudDsKICNlbmRp
ZgogCi0gICAgRG9jdW1lbnRPcmRlcmVkTWFwIG1faW1hZ2VNYXBzQnlOYW1lOwotCiAgICAgaW50
IG1fZG9jSUQ7IC8vIEEgdW5pcXVlIGRvY3VtZW50IGlkZW50aWZpZXIgdXNlZCBmb3IgdGhpbmdz
IGxpa2UgZG9jdW1lbnQtc3BlY2lmaWMgbWFwcGVkIGF0dHJpYnV0ZXMuCiAKICAgICBTdHJpbmcg
bV94bWxFbmNvZGluZzsKQEAgLTEzNDYsMTQgKzEzMDIsOCBAQCBwcml2YXRlOgogICAgIAogICAg
IFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBtX2RlY29kZXI7CiAKLSAgICBEb2N1bWVudE9y
ZGVyZWRNYXAgbV9lbGVtZW50c0J5SWQ7Ci0gICAgCi0gICAgbXV0YWJsZSBIYXNoTWFwPFN0cmlu
Z0ltcGwqLCBFbGVtZW50KiwgQ2FzZUZvbGRpbmdIYXNoPiBtX2VsZW1lbnRzQnlBY2Nlc3NLZXk7
Ci0gICAgCiAgICAgSW5oZXJpdGVkQm9vbCBtX2Rlc2lnbk1vZGU7CiAgICAgCi0gICAgaW50IG1f
c2VsZk9ubHlSZWZDb3VudDsKLQogICAgIENoZWNrZWRSYWRpb0J1dHRvbnMgbV9jaGVja2VkUmFk
aW9CdXR0b25zOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBDb2xs
ZWN0aW9uQ2FjaGUqPiBOYW1lZENvbGxlY3Rpb25NYXA7CkBAIC0xMzc2LDcgKzEzMjYsNiBAQCBw
cml2YXRlOgogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4g
PiBtX2Nzc0NhbnZhc0VsZW1lbnRzOwogCi0gICAgbXV0YWJsZSBib29sIG1fYWNjZXNzS2V5TWFw
VmFsaWQ7CiAgICAgYm9vbCBtX2NyZWF0ZVJlbmRlcmVyczsKICAgICBib29sIG1faW5QYWdlQ2Fj
aGU7CiAgICAgU3RyaW5nIG1faWNvblVSTDsKQEAgLTEzOTMsOCArMTM0Miw2IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX3VzZXNWaWV3U291cmNlU3R5bGVzOwogICAgIGJvb2wgbV9zYXdFbGVtZW50
c0luS25vd25OYW1lc3BhY2VzOwogCi0gICAgdW5zaWduZWQgbV9udW1Ob2RlTGlzdENhY2hlczsK
LQogI2lmIFVTRShKU0MpCiAgICAgSlNXcmFwcGVyQ2FjaGVNYXAgbV93cmFwcGVyQ2FjaGVNYXA7
CiAgICAgSlNXcmFwcGVyQ2FjaGUqIG1fbm9ybWFsV29ybGRXcmFwcGVyQ2FjaGU7CkBAIC0xNDQy
LDE3ICsxMzg5LDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Q29udGVudFNlY3VyaXR5UG9saWN5
PiBtX2NvbnRlbnRTZWN1cml0eVBvbGljeTsKIH07CiAKLWlubGluZSBib29sIERvY3VtZW50Ojpo
YXNFbGVtZW50V2l0aElkKEF0b21pY1N0cmluZ0ltcGwqIGlkKSBjb25zdAotewotICAgIEFTU0VS
VChpZCk7Ci0gICAgcmV0dXJuIG1fZWxlbWVudHNCeUlkLmNvbnRhaW5zKGlkKTsKLX0KLQotaW5s
aW5lIGJvb2wgRG9jdW1lbnQ6OmNvbnRhaW5zTXVsdGlwbGVFbGVtZW50c1dpdGhJZChjb25zdCBB
dG9taWNTdHJpbmcmIGlkKSBjb25zdAotewotICAgIHJldHVybiBtX2VsZW1lbnRzQnlJZC5jb250
YWluc011bHRpcGxlKGlkLmltcGwoKSk7Ci19Ci0gICAgCiBpbmxpbmUgYm9vbCBOb2RlOjppc0Rv
Y3VtZW50Tm9kZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRoaXMgPT0gbV9kb2N1bWVudDsKQEAg
LTE0NjcsNyArMTQwMyw3IEBAIGlubGluZSBOb2RlOjpOb2RlKERvY3VtZW50KiBkb2N1bWVudCwg
Q29uc3RydWN0aW9uVHlwZSB0eXBlKQogICAgICwgbV9ub2RlRmxhZ3ModHlwZSkKIHsKICAgICBp
ZiAobV9kb2N1bWVudCkKLSAgICAgICAgbV9kb2N1bWVudC0+c2VsZk9ubHlSZWYoKTsKKyAgICAg
ICAgbV9kb2N1bWVudC0+Z3VhcmRSZWYoKTsKICNpZiAhZGVmaW5lZChOREVCVUcpIHx8IChkZWZp
bmVkKERVTVBfTk9ERV9TVEFUSVNUSUNTKSAmJiBEVU1QX05PREVfU1RBVElTVElDUykKICAgICB0
cmFja0ZvckRlYnVnZ2luZygpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9y
ZGVyZWRNYXAuY3BwCmluZGV4IDc4N2ZjZjQ2NDVjYTJmMTViNGVlOTkxZTE3Y2I5MzJhMDZlZThi
M2UuLmNmOGJjMWE0OTUwNDA5NGQ2OTY4NzQ3Y2UzYTlmMjYyMWExZTQ2YjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCkBAIC0xMDQsNyArMTA0LDcgQEAgdm9p
ZCBEb2N1bWVudE9yZGVyZWRNYXA6OnJlbW92ZShBdG9taWNTdHJpbmdJbXBsKiBrZXksIEVsZW1l
bnQqIGVsZW1lbnQpCiB9CiAKIHRlbXBsYXRlPGJvb2wga2V5TWF0Y2hlcyhBdG9taWNTdHJpbmdJ
bXBsKiwgRWxlbWVudCopPgotaW5saW5lIEVsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0
KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KSBjb25zdAor
aW5saW5lIEVsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0KEF0b21pY1N0cmluZ0ltcGwq
IGtleSwgY29uc3QgRE9NVHJlZVNjb3BlKiBzY29wZSkgY29uc3QKIHsKICAgICBBU1NFUlQoa2V5
KTsKIApAQCAtMTE2LDcgKzExNiw3IEBAIGlubGluZSBFbGVtZW50KiBEb2N1bWVudE9yZGVyZWRN
YXA6OmdldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIGNvbnN0IERvY3VtZW50KiBkCiAKICAgICBp
ZiAobV9kdXBsaWNhdGVDb3VudHMuY29udGFpbnMoa2V5KSkgewogICAgICAgICAvLyBXZSBrbm93
IHRoZXJlJ3MgYXQgbGVhc3Qgb25lIG5vZGUgdGhhdCBtYXRjaGVzOyBpdGVyYXRlIHRvIGZpbmQg
dGhlIGZpcnN0IG9uZS4KLSAgICAgICAgZm9yIChOb2RlKiBub2RlID0gZG9jdW1lbnQtPmZpcnN0
Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAg
ICBmb3IgKE5vZGUqIG5vZGUgPSBzY29wZS0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9k
ZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CiAgICAgICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVu
dE5vZGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CkBAIC0xMzIsMTkgKzEzMiwxOSBAQCBpbmxp
bmUgRWxlbWVudCogRG9jdW1lbnRPcmRlcmVkTWFwOjpnZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5
LCBjb25zdCBEb2N1bWVudCogZAogICAgIHJldHVybiAwOwogfQogCi1FbGVtZW50KiBEb2N1bWVu
dE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUlkKEF0b21pY1N0cmluZ0ltcGwqIGtleSwgY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50KSBjb25zdAorRWxlbWVudCogRG9jdW1lbnRPcmRlcmVkTWFwOjpn
ZXRFbGVtZW50QnlJZChBdG9taWNTdHJpbmdJbXBsKiBrZXksIGNvbnN0IERPTVRyZWVTY29wZSog
c2NvcGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldDxrZXlNYXRjaGVzSWQ+KGtleSwgZG9jdW1l
bnQpOworICAgIHJldHVybiBnZXQ8a2V5TWF0Y2hlc0lkPihrZXksIHNjb3BlKTsKIH0KIAotRWxl
bWVudCogRG9jdW1lbnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlNYXBOYW1lKEF0b21pY1N0cmlu
Z0ltcGwqIGtleSwgY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KSBjb25zdAorRWxlbWVudCogRG9j
dW1lbnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlNYXBOYW1lKEF0b21pY1N0cmluZ0ltcGwqIGtl
eSwgY29uc3QgRE9NVHJlZVNjb3BlKiBzY29wZSkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0PGtl
eU1hdGNoZXNNYXBOYW1lPihrZXksIGRvY3VtZW50KTsKKyAgICByZXR1cm4gZ2V0PGtleU1hdGNo
ZXNNYXBOYW1lPihrZXksIHNjb3BlKTsKIH0KIAotRWxlbWVudCogRG9jdW1lbnRPcmRlcmVkTWFw
OjpnZXRFbGVtZW50QnlMb3dlcmNhc2VkTWFwTmFtZShBdG9taWNTdHJpbmdJbXBsKiBrZXksIGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCkgY29uc3QKK0VsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1h
cDo6Z2V0RWxlbWVudEJ5TG93ZXJjYXNlZE1hcE5hbWUoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBj
b25zdCBET01UcmVlU2NvcGUqIHNjb3BlKSBjb25zdAogewotICAgIHJldHVybiBnZXQ8a2V5TWF0
Y2hlc0xvd2VyY2FzZWRNYXBOYW1lPihrZXksIGRvY3VtZW50KTsKKyAgICByZXR1cm4gZ2V0PGtl
eU1hdGNoZXNMb3dlcmNhc2VkTWFwTmFtZT4oa2V5LCBzY29wZSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVy
ZWRNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuaAppbmRleCA1
ODc2N2M2NDMzNzFjY2FlMmRlZmFmMzFjOTkyNTY5ZDg2NzQ4Y2YyLi4zNGU5ZTM1YTM2NGMzNjZh
NTE3ODMxMjlkODIzMjVkYzIwN2NiMzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRPcmRlcmVkTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3Jk
ZXJlZE1hcC5oCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgRG9jdW1lbnQ7CitjbGFzcyBET01UcmVlU2NvcGU7CiBjbGFzcyBFbGVtZW50OwogCiBjbGFz
cyBEb2N1bWVudE9yZGVyZWRNYXAgewpAQCAtNDksMTQgKzQ5LDE0IEBAIHB1YmxpYzoKICAgICBi
b29sIGNvbnRhaW5zKEF0b21pY1N0cmluZ0ltcGwqKSBjb25zdDsKICAgICBib29sIGNvbnRhaW5z
TXVsdGlwbGUoQXRvbWljU3RyaW5nSW1wbCopIGNvbnN0OwogICAgIC8vIGNvbmNyZXRlIGluc3Rh
bnRpYXRpb25zIG9mIHRoZSBnZXQ8PigpIG1ldGhvZCB0ZW1wbGF0ZQotICAgIEVsZW1lbnQqIGdl
dEVsZW1lbnRCeUlkKEF0b21pY1N0cmluZ0ltcGwqLCBjb25zdCBEb2N1bWVudCopIGNvbnN0Owot
ICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeU1hcE5hbWUoQXRvbWljU3RyaW5nSW1wbCosIGNvbnN0
IERvY3VtZW50KikgY29uc3Q7Ci0gICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5TG93ZXJjYXNlZE1h
cE5hbWUoQXRvbWljU3RyaW5nSW1wbCosIGNvbnN0IERvY3VtZW50KikgY29uc3Q7CisgICAgRWxl
bWVudCogZ2V0RWxlbWVudEJ5SWQoQXRvbWljU3RyaW5nSW1wbCosIGNvbnN0IERPTVRyZWVTY29w
ZSopIGNvbnN0OworICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeU1hcE5hbWUoQXRvbWljU3RyaW5n
SW1wbCosIGNvbnN0IERPTVRyZWVTY29wZSopIGNvbnN0OworICAgIEVsZW1lbnQqIGdldEVsZW1l
bnRCeUxvd2VyY2FzZWRNYXBOYW1lKEF0b21pY1N0cmluZ0ltcGwqLCBjb25zdCBET01UcmVlU2Nv
cGUqKSBjb25zdDsKIAogICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0OwogCiBwcml2
YXRlOgotICAgIHRlbXBsYXRlPGJvb2wga2V5TWF0Y2hlcyhBdG9taWNTdHJpbmdJbXBsKiwgRWxl
bWVudCopPiBFbGVtZW50KiBnZXQoQXRvbWljU3RyaW5nSW1wbCosIGNvbnN0IERvY3VtZW50Kikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8Ym9vbCBrZXlNYXRjaGVzKEF0b21pY1N0cmluZ0ltcGwqLCBF
bGVtZW50Kik+IEVsZW1lbnQqIGdldChBdG9taWNTdHJpbmdJbXBsKiwgY29uc3QgRE9NVHJlZVNj
b3BlKikgY29uc3Q7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIEVs
ZW1lbnQqPiBNYXA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA5ZWNiY2NiNWNkN2NlYzhiM2I4OTMx
MWIxMTMxNjFkNTIxNDhiNTIwLi4xZjdkZDIxYjQ1NjEyZDRiOTFmNTQ3OTgxYTZkMzZkNzg0ZWY4
ZDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC00MDYsNyArNDA2LDcgQEAgTm9kZTo6fk5vZGUoKQog
ICAgICAgICBtX25leHQtPnNldFByZXZpb3VzU2libGluZygwKTsKIAogICAgIGlmIChtX2RvY3Vt
ZW50KQotICAgICAgICBtX2RvY3VtZW50LT5zZWxmT25seURlcmVmKCk7CisgICAgICAgIG1fZG9j
dW1lbnQtPmd1YXJkRGVyZWYoKTsKIH0KIAogI2lmZGVmIE5ERUJVRwpAQCAtNDQyLDcgKzQ0Miw3
IEBAIHZvaWQgTm9kZTo6c2V0RG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIGlmIChp
bkRvY3VtZW50KCkgfHwgbV9kb2N1bWVudCA9PSBkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgZG9jdW1lbnQtPnNlbGZPbmx5UmVmKCk7CisgICAgZG9jdW1lbnQtPmd1YXJkUmVmKCk7
CiAKICAgICBzZXRXaWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudFdhc0NhbGxlZChmYWxzZSk7CiAg
ICAgd2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKQEAgLTQ2MCw3ICs0NjAsNyBAQCB2b2lk
IE5vZGU6OnNldERvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKIAogICAgIGlmIChtX2RvY3Vt
ZW50KSB7CiAgICAgICAgIG1fZG9jdW1lbnQtPm1vdmVOb2RlSXRlcmF0b3JzVG9OZXdEb2N1bWVu
dCh0aGlzLCBkb2N1bWVudCk7Ci0gICAgICAgIG1fZG9jdW1lbnQtPnNlbGZPbmx5RGVyZWYoKTsK
KyAgICAgICAgbV9kb2N1bWVudC0+Z3VhcmREZXJlZigpOwogICAgIH0KIAogICAgIG1fZG9jdW1l
bnQgPSBkb2N1bWVudDsKQEAgLTQ3MCw2ICs0NzAsMjcgQEAgdm9pZCBOb2RlOjpzZXREb2N1bWVu
dChEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgQVNTRVJUKGRpZE1vdmVUb05ld093bmVyRG9jdW1l
bnRXYXNDYWxsZWQpOwogfQogCit2b2lkIE5vZGU6OnNldERvY3VtZW50UmVjdXJzaXZlbHkoRG9j
dW1lbnQqIG5ld0RvY3VtZW50KQoreworICAgIGlmIChkb2N1bWVudCgpID09IG5ld0RvY3VtZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiBhbiBlbGVtZW50IGlzIG1vdmVkIGZyb20g
YSBkb2N1bWVudCBhbmQgdGhlbiBldmVudHVhbGx5IGJhY2sgYWdhaW4gdGhlIGNvbGxlY3Rpb24g
Y2FjaGUgZm9yCisgICAgLy8gdGhhdCBlbGVtZW50IG1heSBjb250YWluIHN0YWxlIGRhdGEgYXMg
Y2hhbmdlcyBtYWRlIHRvIGl0IHdpbGwgaGF2ZSB1cGRhdGVkIHRoZSBET01UcmVlVmVyc2lvbgor
ICAgIC8vIG9mIHRoZSBkb2N1bWVudCBpdCB3YXMgbW92ZWQgdG8uIEJ5IGluY3JlYXNpbmcgdGhl
IERPTVRyZWVWZXJzaW9uIG9mIHRoZSBkb25hdGluZyBkb2N1bWVudCBoZXJlCisgICAgLy8gd2Ug
ZW5zdXJlIHRoYXQgdGhlIGNvbGxlY3Rpb24gY2FjaGUgd2lsbCBiZSBpbnZhbGlkYXRlZCBhcyBu
ZWVkZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBtb3ZlZCBiYWNrLgorICAgIGlmIChkb2N1bWVudCgp
KQorICAgICAgICBkb2N1bWVudCgpLT5pbmNET01UcmVlVmVyc2lvbigpOworCisgICAgZm9yIChO
b2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUodGhp
cykpIHsKKyAgICAgICAgbm9kZS0+c2V0RG9jdW1lbnQobmV3RG9jdW1lbnQpOworICAgICAgICBp
ZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBpZiAoTm9kZSogc2hhZG93ID0gdG9FbGVtZW50KG5vZGUpLT5zaGFkb3dSb290KCkpCisgICAg
ICAgICAgICBzaGFkb3ctPnNldERvY3VtZW50UmVjdXJzaXZlbHkobmV3RG9jdW1lbnQpOworICAg
IH0KK30KKwogTm9kZVJhcmVEYXRhKiBOb2RlOjpyYXJlRGF0YSgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGhhc1JhcmVEYXRhKCkpOwpAQCAtNzk0LDI3ICs4MTUsNiBAQCBib29sIE5vZGU6Omhhc05v
bkVtcHR5Qm91bmRpbmdCb3goKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBO
b2RlOjpzZXREb2N1bWVudFJlY3Vyc2l2ZWx5KERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBp
ZiAodGhpcy0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gSWYgYW4gZWxlbWVudCBpcyBtb3ZlZCBmcm9tIGEgZG9jdW1lbnQgYW5kIHRoZW4gZXZlbnR1
YWxseSBiYWNrIGFnYWluIHRoZSBjb2xsZWN0aW9uIGNhY2hlIGZvcgotICAgIC8vIHRoYXQgZWxl
bWVudCBtYXkgY29udGFpbiBzdGFsZSBkYXRhIGFzIGNoYW5nZXMgbWFkZSB0byBpdCB3aWxsIGhh
dmUgdXBkYXRlZCB0aGUgRE9NVHJlZVZlcnNpb24KLSAgICAvLyBvZiB0aGUgZG9jdW1lbnQgaXQg
d2FzIG1vdmVkIHRvLiBCeSBpbmNyZWFzaW5nIHRoZSBET01UcmVlVmVyc2lvbiBvZiB0aGUgZG9u
YXRpbmcgZG9jdW1lbnQgaGVyZQotICAgIC8vIHdlIGVuc3VyZSB0aGF0IHRoZSBjb2xsZWN0aW9u
IGNhY2hlIHdpbGwgYmUgaW52YWxpZGF0ZWQgYXMgbmVlZGVkIHdoZW4gdGhlIGVsZW1lbnQgaXMg
bW92ZWQgYmFjay4KLSAgICBpZiAodGhpcy0+ZG9jdW1lbnQoKSkKLSAgICAgICAgdGhpcy0+ZG9j
dW1lbnQoKS0+aW5jRE9NVHJlZVZlcnNpb24oKTsKLQotICAgIGZvciAoTm9kZSogbm9kZSA9IHRo
aXM7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSB7Ci0gICAgICAg
IG5vZGUtPnNldERvY3VtZW50KGRvY3VtZW50KTsKLSAgICAgICAgaWYgKCFub2RlLT5pc0VsZW1l
bnROb2RlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKE5vZGUqIHNoYWRv
dyA9IHRvRWxlbWVudChub2RlKS0+c2hhZG93Um9vdCgpKQotICAgICAgICAgICAgc2hhZG93LT5z
ZXREb2N1bWVudFJlY3Vyc2l2ZWx5KGRvY3VtZW50KTsKLSAgICB9Ci19Ci0KIGlubGluZSB2b2lk
IE5vZGU6OnNldFN0eWxlQ2hhbmdlKFN0eWxlQ2hhbmdlVHlwZSBjaGFuZ2VUeXBlKQogewogICAg
IG1fbm9kZUZsYWdzID0gKG1fbm9kZUZsYWdzICYgflN0eWxlQ2hhbmdlTWFzaykgfCBjaGFuZ2VU
eXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmgKaW5kZXggMTI5YTQ5M2U4NTU5YzUwNWJhYmY3YWViZWQ0MDA5NDkyNmVh
MDg3Yy4uOWZjM2ZlZjExM2ExMTQ3YWJjY2U5MjdlNDhlMTY2OTJkNWY0YzQ5MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5oCkBAIC0zNjUsNyArMzY1LDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9kb2N1bWVu
dCB8fCAhZ2V0RmxhZyhJbkRvY3VtZW50RmxhZykpOwogICAgICAgICByZXR1cm4gZ2V0RmxhZyhJ
bkRvY3VtZW50RmxhZyk7CiAgICAgfQotCisgICAgCiAgICAgYm9vbCBpc1JlYWRPbmx5Tm9kZSgp
IGNvbnN0IHsgcmV0dXJuIG5vZGVUeXBlKCkgPT0gRU5USVRZX1JFRkVSRU5DRV9OT0RFOyB9CiAg
ICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUpIHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdW5zaWduZWQgY2hpbGROb2RlQ291bnQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RyZWVTaGFyZWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1RyZWVTaGFyZWQuaAppbmRleCA5ZTI3YzVlMTYyN2JlYTI0ZjlmMGZiZjJjODQ2NjkzYzg4
NDdjYmQzLi5lNTRiMWQxYTZjNjg5N2Q1MWIyNjUyODE2N2Q2ZTVlMTAxZjE1ZmM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UcmVlU2hhcmVkLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vVHJlZVNoYXJlZC5oCkBAIC05Miw2ICs5MiwxNCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBtX3JlZkNvdW50OwogICAgIH0KIAorICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVkTGFzdFJlZigpCisgICAgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgbV9kZWxldGlvbkhh
c0JlZ3VuID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICBkZWxldGUgdGhpczsKKyAgICB9CisKICAg
ICB2b2lkIHNldFBhcmVudChUKiBwYXJlbnQpCiAgICAgeyAKICAgICAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKQEAgLTExNCwxNCArMTIyLDYgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgdm9p
ZCBhZG9wdGVkPD4oVHJlZVNoYXJlZDxUPiopOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlZExhc3RSZWYoKQotICAgIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIG1fZGVsZXRp
b25IYXNCZWd1biA9IHRydWU7Ci0jZW5kaWYKLSAgICAgICAgZGVsZXRlIHRoaXM7Ci0gICAgfQot
CiAgICAgaW50IG1fcmVmQ291bnQ7CiAgICAgVCogbV9wYXJlbnQ7CiAjaWZuZGVmIE5ERUJVRwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88124</attachid>
            <date>2011-04-04 14:04:30 -0700</date>
            <delta_ts>2011-04-04 14:18:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57689-20110404140429.patch</filename>
            <type>text/plain</type>
            <size>45162</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODI4NDUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQubWsgYi9Tb3VyY2UvV2ViQ29yZS9BbmRyb2lkLm1rCmluZGV4IDkwZjUwZDZhYjZkMzNj
MTg2MzBmZGRmN2I4N2UwMDdmYzdhOGExMGMuLjE0MzNjZjlmM2ZkOGQzYmU3Y2E3ZWMzMDdiOTRm
ZTVhYzhkZWY2NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
U291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawpAQCAtMTg4LDYgKzE4OCw3IEBAIExPQ0FMX1NSQ19G
SUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCWRvbS9Ub3VjaEV2ZW50LmNwcCBcCiAJZG9t
L1RvdWNoTGlzdC5jcHAgXAogCWRvbS9UcmF2ZXJzYWwuY3BwIFwKKwlkb20vVHJlZVNjb3BlLmNw
cCBcCiAJZG9tL1RyZWVXYWxrZXIuY3BwIFwKIAlkb20vVUlFdmVudC5jcHAgXAogCWRvbS9VSUV2
ZW50V2l0aEtleVN0YXRlLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGNjNTUwMzdjZGU2
MmRmNjk1ZDEwMzNlNjFlNzNkMzM3YzMyNWM4MGMuLjkwNTBhODExODM5ZDAyMTFmMzE1NTE2MTg4
NjJhMTcyYTg0OTJjYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC02MTQsNiArNjE0LDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGRvbS9Ub3VjaExpc3QuY3BwCiAgICAgZG9tL1RyYW5z
Zm9ybVNvdXJjZUxpYnhzbHQuY3BwCiAgICAgZG9tL1RyYXZlcnNhbC5jcHAKKyAgICBkb20vVHJl
ZVNjb3BlLmNwcAogICAgIGRvbS9UcmVlV2Fsa2VyLmNwcAogICAgIGRvbS9VSUV2ZW50LmNwcAog
ICAgIGRvbS9VSUV2ZW50V2l0aEtleVN0YXRlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGU4YzllZTgzMjk3
YzhhMTRjNzc4NDU4MmFhZjE5ZWEyNjQxNjM4NjUuLjE5ZTE4MTA3NzFhNzc1ZThlNjJlM2RmZjcy
NTdhM2I4Y2NkOTU0NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NiBAQAorMjAxMS0wNC0wMSAg
Um9sYW5kIFN0ZWluZXIgIDxyb2xhbmRzdGVpbmVyQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgNTc2ODkgLSBFeHRyYWN0
IHNjb3BpbmcgZnVuY3Rpb25hbGl0eSBmcm9tIERvY3VtZW50CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzY4OQorCisgICAgICAgIE1vdmVkIHNlbGZP
bmx5UmVmIChyZW5hbWVkIHRvIGd1YXJkUmVmKSwgZWxlbWVudCBJRCwgaW1hZ2UgbWFwCisgICAg
ICAgIGFuZCBhY2Nlc3NzIGtleSBmdW5jdGlvbmFsaXRpZXMgZnJvbSBEb2N1bWVudCB0byBhIG5l
dyBiYXNlCisgICAgICAgIGNsYXNzIFRyZWVTY29wZS4KKworICAgICAgICBUcmVlU2hhcmVkOiBt
YWRlIHJlbW92ZWRMYXN0UmVmIHB1YmxpYworCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKHJlZmFj
dG9yaW5nKQorCisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9j
dW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRlc3Ryb3lTY29wZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Z2V0RWxlbWVudEJ5SWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6c2NoZWR1bGVTdHlsZVJlY2FsYyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YXR0
YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkZXRhY2gpOgorICAgICAgICAqIGRv
bS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Tm9kZSk6CisgICAgICAgICog
ZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9y
ZGVyZWRNYXA6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6Omdl
dEVsZW1lbnRCeUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50T3JkZXJlZE1hcDo6Z2V0
RWxlbWVudEJ5TWFwTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6
OmdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRP
cmRlcmVkTWFwLmg6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6fk5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c2V0RG9jdW1lbnQpOgorICAg
ICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgICogZG9tL1RyZWVTY29wZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjpET01UcmVlU2NvcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VHJlZVNjb3BlOjpyZW1vdmVkTGFzdFJlZik6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
U2NvcGU6OmRlc3Ryb3lTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OmdldEVs
ZW1lbnRCeUlkKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6YWRkRWxlbWVudEJ5SWQp
OgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjpyZW1vdmVFbGVtZW50QnlJZCk6CisgICAg
ICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OmdldEVsZW1lbnRCeUFjY2Vzc0tleSk6CisgICAgICAg
IChXZWJDb3JlOjpUcmVlU2NvcGU6OmludmFsaWRhdGVBY2Nlc3NLZXlNYXApOgorICAgICAgICAo
V2ViQ29yZTo6VHJlZVNjb3BlOjphZGRJbWFnZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
U2NvcGU6OnJlbW92ZUltYWdlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6Z2V0
SW1hZ2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjpmaW5kQW5jaG9yKToKKyAg
ICAgICAgKiBkb20vVHJlZVNjb3BlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNj
b3BlOjpndWFyZFJlZik6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6Omd1YXJkRGVyZWYp
OgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjpoYXNFbGVtZW50V2l0aElkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6Y29udGFpbnNNdWx0aXBsZUVsZW1lbnRzV2l0aElkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9UcmVlU2hhcmVkLmg6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
U2hhcmVkOjpyZW1vdmVkTGFzdFJlZik6IG1hZGUgcHVibGljCisKIDIwMTEtMDQtMDQgIFl1cnkg
U2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
UGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggYThjMzM1ZGJmNzg5NzRkNTQx
YjdmMDIyMGExOTMxNjY4ZDQwOTQ1MS4uYjg1NzRlY2U2MzM5MGM3ZjU1NzBlOGMyNjQ0NmE4NDY2
YTg5MGU3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTEzNDcsNiArMTM0Nyw4IEBAIHdlYmNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvZG9tL1RyYXZlcnNhbC5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuaCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL1RyZWVE
ZXB0aExpbWl0LmggXAorCVNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlV2Fs
a2VyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuaCBcCiAJU291cmNlL1dl
YkNvcmUvZG9tL1VJRXZlbnQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBmZDQzZTc5ZDRmZjVj
ZmM3Y2MyYTBjMDA4MzQ0NmU2Zjk3ZGY2NzQxLi5lY2YxMmU5NjllN2JjZWYzMjZmMTM5YzhhYTA3
MGE2MjBiYmY5MzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yNTQ1LDYgKzI1NDUsOCBAQAogICAg
ICAgICAgICAgJ2RvbS9UcmF2ZXJzYWwuY3BwJywKICAgICAgICAgICAgICdkb20vVHJhdmVyc2Fs
LmgnLAogICAgICAgICAgICAgJ2RvbS9UcmVlRGVwdGhMaW1pdC5oJywKKyAgICAgICAgICAgICdk
b20vVHJlZVNjb3BlLmNwcCcsCisgICAgICAgICAgICAnZG9tL1RyZWVTY29wZS5oJywKICAgICAg
ICAgICAgICdkb20vVHJlZVdhbGtlci5jcHAnLAogICAgICAgICAgICAgJ2RvbS9UcmVlV2Fsa2Vy
LmgnLAogICAgICAgICAgICAgJ2RvbS9VSUV2ZW50LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDRj
MmUxOWYwMGYzYzcyMzc3OTdlMTcwYmUxOTQzZDc3ZDI4ZmVlNGUuLjAyYWM2MDgzN2I0ODkyMGVj
MTU0MjYwOGQzOTJhZTk0ZTMxMTllZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC01NDQsNiArNTQ0LDcg
QEAgU09VUkNFUyArPSBcCiAgICAgZG9tL1RvdWNoRXZlbnQuY3BwIFwKICAgICBkb20vVG91Y2hM
aXN0LmNwcCBcCiAgICAgZG9tL1RyYXZlcnNhbC5jcHAgXAorICAgIGRvbS9UcmVlU2NvcGUuY3Bw
IFwKICAgICBkb20vVHJlZVdhbGtlci5jcHAgXAogICAgIGRvbS9VSUV2ZW50LmNwcCBcCiAgICAg
ZG9tL1VJRXZlbnRXaXRoS2V5U3RhdGUuY3BwIFwKQEAgLTE1MDYsNiArMTUwNyw3IEBAIEhFQURF
UlMgKz0gXAogICAgIGRvbS9UcmFuc2Zvcm1Tb3VyY2UuaCBcCiAgICAgZG9tL1RyYXZlcnNhbC5o
IFwKICAgICBkb20vVHJlZURlcHRoTGltaXQuaCBcCisgICAgZG9tL1RyZWVTY29wZS5oIFwKICAg
ICBkb20vVHJlZVdhbGtlci5oIFwKICAgICBkb20vVUlFdmVudC5oIFwKICAgICBkb20vVUlFdmVu
dFdpdGhLZXlTdGF0ZS5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKaW5kZXggMzdhNTJlMzBiOTJjZWMyNjYzMjk4OTRiNzhlZjJhMzUwMjVkYjhjNy4u
NWJmMjIwYWFkZGQ4NjE0NTE5YWQ2ODA2YjUyODUyNWNmYWZhY2IxZiAxMDA3NTUKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTQ3MjE0LDYgKzQ3MjE0LDE0
IEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxkb21cVHJlZVNjb3BlLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFRyZWVTY29wZS5oIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cVHJlZVdhbGtlci5o
IgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzNzk3YzMxZDY3NTNkZDY3NWM3NTczZjFjNGM3ZmU5
ZDI4Zjg4MTUwLi5lODdhY2MxY2I1NTdiZTkxMWU3YTZjOTkzOWY0OGFkZTYxNTU5NGNkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0zMTYsNiArMzE2LDggQEAKIAkJMTRDRjc4QTYwOUY1OENEODAwRUIzNjY1IC8qIEpTQ1NTVmFs
dWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0Y3
OEE1MDlGNThDRDgwMEVCMzY2NSAvKiBKU0NTU1ZhbHVlLmggKi87IH07CiAJCTE0Q0Y3QjMzMDlG
NkVDRDcwMEVCMzY2NSAvKiBKU0NTU1J1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDRjdCMzEwOUY2RUNENzAwRUIzNjY1IC8qIEpTQ1NTUnVs
ZS5jcHAgKi87IH07CiAJCTE0Q0Y3QjM0MDlGNkVDRDcwMEVCMzY2NSAvKiBKU0NTU1J1bGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0Y3QjMyMDlG
NkVDRDcwMEVCMzY2NSAvKiBKU0NTU1J1bGUuaCAqLzsgfTsKKwkJMTRENjRCNUMxMzRBNUI2QjAw
RTU4RkRBIC8qIFRyZWVTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNEQ2NEI1QTEzNEE1QjZCMDBFNThGREEgLyogVHJlZVNjb3BlLmNwcCAq
LzsgfTsKKwkJMTRENjRCNUQxMzRBNUI2QjAwRTU4RkRBIC8qIFRyZWVTY29wZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRENjRCNUIxMzRBNUI2QjAw
RTU4RkRBIC8qIFRyZWVTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTE0RDgyMzUyMEFGOTJBNzkwMDA0RjA1NyAvKiBDaHJvbWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDgyMzUwMEFGOTJB
NzkwMDA0RjA1NyAvKiBDaHJvbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNEQ4MjM4QjBBRjkyREY2MDAwNEYwNTcgLyogQ2hyb21lLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDgyMzhBMEFG
OTJERjYwMDA0RjA1NyAvKiBDaHJvbWUuY3BwICovOyB9OwogCQkxNEQ4MjQwODBBRjkzQUVCMDAw
NEYwNTcgLyogQ2hyb21lQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNEQ4MjQwNjBBRjkzQUVCMDAwNEYwNTcgLyogQ2hyb21lQ2xpZW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTY2OTMs
NiArNjY5NSw4IEBACiAJCTE0Q0Y3QjMxMDlGNkVDRDcwMEVCMzY2NSAvKiBKU0NTU1J1bGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ1NTUnVsZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0Q0Y3QjMyMDlGNkVDRDcwMEVCMzY2NSAvKiBK
U0NTU1J1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ1NTUnVsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNENGN0MyMDA5RjcxMTA2MDBFQjM2NjUg
LyogS2V5Ym9hcmRFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEtleWJvYXJkRXZl
bnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQ2NEI1QTEzNEE1QjZCMDBF
NThGREEgLyogVHJlZVNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFRyZWVTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDY0QjVC
MTM0QTVCNkIwMEU1OEZEQSAvKiBUcmVlU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVHJlZVNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RDgy
MzUwMEFGOTJBNzkwMDA0RjA1NyAvKiBDaHJvbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ2hyb21lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RDgyMzhB
MEFGOTJERjYwMDA0RjA1NyAvKiBDaHJvbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENocm9tZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
RDgyNDA2MEFGOTNBRUIwMDA0RjA1NyAvKiBDaHJvbWVDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ2hyb21lQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xOTQzMSw2ICsxOTQzNSw4IEBACiAJCQkJODU0RkU3MkMwQTIyOTdCRTAwNThEN0FE
IC8qIFRyYXZlcnNhbC5jcHAgKi8sCiAJCQkJODU0RkU3MkQwQTIyOTdCRTAwNThEN0FEIC8qIFRy
YXZlcnNhbC5oICovLAogCQkJCTM3RkQ0Mjk3MTE4MzY4NDYwMDkzQzAyOSAvKiBUcmVlRGVwdGhM
aW1pdC5oICovLAorCQkJCTE0RDY0QjVBMTM0QTVCNkIwMEU1OEZEQSAvKiBUcmVlU2NvcGUuY3Bw
ICovLAorCQkJCTE0RDY0QjVCMTM0QTVCNkIwMEU1OEZEQSAvKiBUcmVlU2NvcGUuaCAqLywKIAkJ
CQk4NTRGRTcyRTBBMjI5N0JFMDA1OEQ3QUQgLyogVHJlZVdhbGtlci5jcHAgKi8sCiAJCQkJODU0
RkU3MkYwQTIyOTdCRTAwNThEN0FEIC8qIFRyZWVXYWxrZXIuaCAqLywKIAkJCQkxQTc1MEQzQzBB
OTBERTM1MDAwRkYyMTUgLyogVHJlZVdhbGtlci5pZGwgKi8sCkBAIC0yMTIwMiw3ICsyMTIwOCw2
IEBACiAJCQkJQjg4NUU4RDUxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEY3MDdBOUExMUVGNjc5NDAwQUNEQTY5
IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGM0Q0
QzQ3OTEyRTA3NjYzMDAzREExNTAgLyogSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaCBp
biBIZWFkZXJzICovLAotCQkJCTIyNzc3NzYwMTM0NURFQTkwMDhFQTQ1NSAvKiBJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDODFCOTVDMEU5NzMzMDgwMDI2
NkUwNyAvKiBJbnNwZWN0b3JDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzMzM1QkY5MTJF
MDdEQzMwMEQzMzAxMSAvKiBJbnNwZWN0b3JDb25zb2xlQWdlbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUYzRjVDRjExMTJFRDgxQTgwMDg0QzU2OSAvKiBJbnNwZWN0b3JDb25zb2xlSW5zdHJ1bWVu
dGF0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTIxMjE1LDYgKzIxMjIwLDcgQEAKIAkJCQk3QTI0
NTg3QzEwMjFFQUY0MDAwQTAwQUEgLyogSW5zcGVjdG9yRE9NQWdlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTdBNzRFQ0JCMTAxODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JET01TdG9yYWdlQWdl
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxRjA2MTc0MEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNw
ZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTIyNzc3NzYwMTM0
NURFQTkwMDhFQTQ1NSAvKiBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCUYzNDRDNzE0MTEyNUI4MkMwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjM0NEM3NTMxMTI5NEQ5RDAwRjI2RUVFIC8qIEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBMEU3NzBGMTBD
MDBBODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JGcm9udGVuZEhvc3QuaCBpbiBIZWFkZXJzICovLApA
QCAtMjI1ODksNiArMjI1OTUsNyBAQAogCQkJCTQ5RTkxMUQyMEVGODZENDcwMDlEMENBRiAvKiBU
cmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg1NEZFNzM3
MEEyMjk3QkUwMDU4RDdBRCAvKiBUcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3RkQ0
Mjk4MTE4MzY4NDYwMDkzQzAyOSAvKiBUcmVlRGVwdGhMaW1pdC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMTRENjRCNUQxMzRBNUI2QjAwRTU4RkRBIC8qIFRyZWVTY29wZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQxOUQyQzUwQ0VBNkY2MTAwRkY1MDdBIC8qIFRyZWVTaGFyZWQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg1NEZFNzM5MEEyMjk3QkUwMDU4RDdBRCAvKiBUcmVlV2Fsa2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk2RTk2QkIxRDExOTg2RUUyMDA3RDk0Q0QgLyogVHlwZWRBcnJheUJhc2Uu
aCBpbiBIZWFkZXJzICovLApAQCAtMjUyOTYsNiArMjUzMDMsNyBAQAogCQkJCTBGNTAwQUIxMEY1
NERCMzEwMEVFRjkyOCAvKiBUcmFuc2Zvcm1TdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0
OUU5MTFEMTBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg1NEZFNzM2MEEyMjk3QkUwMDU4RDdBRCAvKiBUcmF2ZXJz
YWwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRENjRCNUMxMzRBNUI2QjAwRTU4RkRBIC8qIFRy
ZWVTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTRGRTczODBBMjI5N0JFMDA1OEQ3QUQg
LyogVHJlZVdhbGtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxOTA5OUU2NDkyMDA1
NkU1ODEgLyogVHlwaW5nQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTAzMUI0RDBB
NDRFRkM3MDBGOTkyRTAgLyogVUlFdmVudC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCmluZGV4IDUxNDQ3MDMyZTAwZjM2ZWQ2YmE1OWZiNGJiODMzMjk5NDcyYTBkNTYu
LjI3OTMzNzFlOTI0OWI2YmY1ZTNjMzI3MDFkMzZjODhiYmJlNDFjNzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcApAQCAtMzc3LDcgKzM3Nyw3IEBAIHByaXZhdGU6CiB1aW50NjRfdCBEb2N1bWVu
dDo6c19nbG9iYWxUcmVlVmVyc2lvbiA9IDA7CiAKIERvY3VtZW50OjpEb2N1bWVudChGcmFtZSog
ZnJhbWUsIGNvbnN0IEtVUkwmIHVybCwgYm9vbCBpc1hIVE1MLCBib29sIGlzSFRNTCkKLSAgICA6
IENvbnRhaW5lck5vZGUoMCkKKyAgICA6IFRyZWVTY29wZSgwKQogICAgICwgbV9jb21wYXRpYmls
aXR5TW9kZShOb1F1aXJrc01vZGUpCiAgICAgLCBtX2NvbXBhdGliaWxpdHlNb2RlTG9ja2VkKGZh
bHNlKQogICAgICwgbV9kb21UcmVlVmVyc2lvbigrK3NfZ2xvYmFsVHJlZVZlcnNpb24pCkBAIC0z
OTksNyArMzk5LDYgQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgY29uc3QgS1VS
TCYgdXJsLCBib29sIGlzWEhUTUwsIGJvb2wgaXNIVE1MKQogICAgICwgbV94bWxTdGFuZGFsb25l
KGZhbHNlKQogICAgICwgbV9zYXZlZFJlbmRlcmVyKDApCiAgICAgLCBtX2Rlc2lnbk1vZGUoaW5o
ZXJpdCkKLSAgICAsIG1fc2VsZk9ubHlSZWZDb3VudCgwKQogI2lmIEVOQUJMRShTVkcpCiAgICAg
LCBtX3N2Z0V4dGVuc2lvbnMoMCkKICNlbmRpZgpAQCAtNDA3LDcgKzQwNiw2IEBAIERvY3VtZW50
OjpEb2N1bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IEtVUkwmIHVybCwgYm9vbCBpc1hIVE1MLCBi
b29sIGlzSFRNTCkKICAgICAsIG1faGFzRGFzaGJvYXJkUmVnaW9ucyhmYWxzZSkKICAgICAsIG1f
ZGFzaGJvYXJkUmVnaW9uc0RpcnR5KGZhbHNlKQogI2VuZGlmCi0gICAgLCBtX2FjY2Vzc0tleU1h
cFZhbGlkKGZhbHNlKQogICAgICwgbV9jcmVhdGVSZW5kZXJlcnModHJ1ZSkKICAgICAsIG1faW5Q
YWdlQ2FjaGUoZmFsc2UpCiAgICAgLCBtX3VzZVNlY3VyZUtleWJvYXJkRW50cnlXaGVuQWN0aXZl
KGZhbHNlKQpAQCAtNDE1LDcgKzQxMyw2IEBAIERvY3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJh
bWUsIGNvbnN0IEtVUkwmIHVybCwgYm9vbCBpc1hIVE1MLCBib29sIGlzSFRNTCkKICAgICAsIG1f
aXNIVE1MKGlzSFRNTCkKICAgICAsIG1fdXNlc1ZpZXdTb3VyY2VTdHlsZXMoZmFsc2UpCiAgICAg
LCBtX3Nhd0VsZW1lbnRzSW5Lbm93bk5hbWVzcGFjZXMoZmFsc2UpCi0gICAgLCBtX251bU5vZGVM
aXN0Q2FjaGVzKDApCiAjaWYgVVNFKEpTQykKICAgICAsIG1fbm9ybWFsV29ybGRXcmFwcGVyQ2Fj
aGUoMCkKICNlbmRpZgpAQCAtNTExLDU1ICs1MDgsMzggQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZy
YW1lKiBmcmFtZSwgY29uc3QgS1VSTCYgdXJsLCBib29sIGlzWEhUTUwsIGJvb2wgaXNIVE1MKQog
I2VuZGlmCiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnJlbW92ZWRMYXN0UmVmKCkKK3ZvaWQgRG9jdW1l
bnQ6OmRlc3Ryb3lTY29wZSgpCiB7CiAgICAgQVNTRVJUKCFtX2RlbGV0aW9uSGFzQmVndW4pOwot
ICAgIGlmIChtX3NlbGZPbmx5UmVmQ291bnQpIHsKLSAgICAgICAgLy8gSWYgcmVtb3ZpbmcgYSBj
aGlsZCByZW1vdmVzIHRoZSBsYXN0IHNlbGYtb25seSByZWYsIHdlIGRvbid0Ci0gICAgICAgIC8v
IHdhbnQgdGhlIGRvY3VtZW50IHRvIGJlIGRlc3RydWN0ZWQgdW50aWwgYWZ0ZXIKLSAgICAgICAg
Ly8gcmVtb3ZlQWxsQ2hpbGRyZW4gcmV0dXJucywgc28gd2UgZ3VhcmQgb3Vyc2VsdmVzIHdpdGgg
YW4KLSAgICAgICAgLy8gZXh0cmEgc2VsZi1vbmx5IHJlZi4KLSAgICAgICAgc2VsZk9ubHlSZWYo
KTsKLQotICAgICAgICAvLyBXZSBtdXN0IG1ha2Ugc3VyZSBub3QgdG8gYmUgcmV0YWluaW5nIGFu
eSBvZiBvdXIgY2hpbGRyZW4gdGhyb3VnaAotICAgICAgICAvLyB0aGVzZSBleHRyYSBwb2ludGVy
cyBvciB3ZSB3aWxsIGNyZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZS4KLSAgICAgICAgbV9kb2NUeXBl
ID0gMDsKLSAgICAgICAgbV9mb2N1c2VkTm9kZSA9IDA7Ci0gICAgICAgIG1faG92ZXJOb2RlID0g
MDsKLSAgICAgICAgbV9hY3RpdmVOb2RlID0gMDsKLSAgICAgICAgbV90aXRsZUVsZW1lbnQgPSAw
OwotICAgICAgICBtX2RvY3VtZW50RWxlbWVudCA9IDA7CisKKyAgICAvLyBXZSBtdXN0IG1ha2Ug
c3VyZSBub3QgdG8gYmUgcmV0YWluaW5nIGFueSBvZiBvdXIgY2hpbGRyZW4gdGhyb3VnaAorICAg
IC8vIHRoZXNlIGV4dHJhIHBvaW50ZXJzIG9yIHdlIHdpbGwgY3JlYXRlIGEgcmVmZXJlbmNlIGN5
Y2xlLgorICAgIG1fZG9jVHlwZSA9IDA7CisgICAgbV9mb2N1c2VkTm9kZSA9IDA7CisgICAgbV9o
b3Zlck5vZGUgPSAwOworICAgIG1fYWN0aXZlTm9kZSA9IDA7CisgICAgbV90aXRsZUVsZW1lbnQg
PSAwOworICAgIG1fZG9jdW1lbnRFbGVtZW50ID0gMDsKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9B
UEkpCi0gICAgICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQgPSAwOworICAgIG1fZnVsbFNjcmVlbkVs
ZW1lbnQgPSAwOwogI2VuZGlmCiAKLSAgICAgICAgLy8gcmVtb3ZlQWxsQ2hpbGRyZW4oKSBkb2Vz
bid0IGFsd2F5cyB1bnJlZ2lzdGVyIElEcywgZG8gaXQgdXBmcm9udCB0byBhdm9pZCBoYXZpbmcg
c3RhbGUgcmVmZXJlbmNlcyBpbiB0aGUgbWFwLgotICAgICAgICBtX2VsZW1lbnRzQnlJZC5jbGVh
cigpOwotCi0gICAgICAgIHJlbW92ZUFsbENoaWxkcmVuKCk7CisgICAgVHJlZVNjb3BlOjpkZXN0
cm95U2NvcGUoKTsKIAotICAgICAgICBtX21hcmtlcnMtPmRldGFjaCgpOworICAgIG1fbWFya2Vy
cy0+ZGV0YWNoKCk7CiAKLSAgICAgICAgZGV0YWNoUGFyc2VyKCk7CisgICAgZGV0YWNoUGFyc2Vy
KCk7CiAKLSAgICAgICAgbV9jc3NDYW52YXNFbGVtZW50cy5jbGVhcigpOworICAgIG1fY3NzQ2Fu
dmFzRWxlbWVudHMuY2xlYXIoKTsKIAogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFN
RSkKLSAgICAgICAgLy8gRklYTUU6IGNvbnNpZGVyIHVzaW5nIEFjdGl2ZURPTU9iamVjdC4KLSAg
ICAgICAgbV9zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIgPSAwOwotI2VuZGlmCi0KLSNpZm5k
ZWYgTkRFQlVHCi0gICAgICAgIG1faW5SZW1vdmVkTGFzdFJlZkZ1bmN0aW9uID0gZmFsc2U7Cisg
ICAgLy8gRklYTUU6IGNvbnNpZGVyIHVzaW5nIEFjdGl2ZURPTU9iamVjdC4KKyAgICBtX3Njcmlw
dGVkQW5pbWF0aW9uQ29udHJvbGxlciA9IDA7CiAjZW5kaWYKIAotICAgICAgICBzZWxmT25seURl
cmVmKCk7Ci0gICAgfSBlbHNlIHsKICNpZm5kZWYgTkRFQlVHCi0gICAgICAgIG1fZGVsZXRpb25I
YXNCZWd1biA9IHRydWU7CisgICAgbV9pblJlbW92ZWRMYXN0UmVmRnVuY3Rpb24gPSBmYWxzZTsK
ICNlbmRpZgotICAgICAgICBkZWxldGUgdGhpczsKLSAgICB9CiB9CiAKIERvY3VtZW50Ojp+RG9j
dW1lbnQoKQpAQCAtNjIxLDYgKzYwMSwxMSBAQCBEb2N1bWVudDo6fkRvY3VtZW50KCkKICAgICAg
ICAgbV9pbXBsZW1lbnRhdGlvbi0+b3duZXJEb2N1bWVudERlc3Ryb3llZCgpOwogfQogCitFbGVt
ZW50KiBEb2N1bWVudDo6Z2V0RWxlbWVudEJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29u
c3QKK3sKKyAgICByZXR1cm4gVHJlZVNjb3BlOjpnZXRFbGVtZW50QnlJZChpZCk7Cit9CisKIE1l
ZGlhUXVlcnlNYXRjaGVyKiBEb2N1bWVudDo6bWVkaWFRdWVyeU1hdGNoZXIoKQogewogICAgIGlm
ICghbV9tZWRpYVF1ZXJ5TWF0Y2hlcikKQEAgLTcwOSw3ICs2OTQsNyBAQCBET01JbXBsZW1lbnRh
dGlvbiogRG9jdW1lbnQ6OmltcGxlbWVudGF0aW9uKCkKIAogdm9pZCBEb2N1bWVudDo6Y2hpbGRy
ZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUq
IGFmdGVyQ2hhbmdlLCBpbnQgY2hpbGRDb3VudERlbHRhKQogewotICAgIENvbnRhaW5lck5vZGU6
OmNoaWxkcmVuQ2hhbmdlZChjaGFuZ2VkQnlQYXJzZXIsIGJlZm9yZUNoYW5nZSwgYWZ0ZXJDaGFu
Z2UsIGNoaWxkQ291bnREZWx0YSk7CisgICAgVHJlZVNjb3BlOjpjaGlsZHJlbkNoYW5nZWQoY2hh
bmdlZEJ5UGFyc2VyLCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVsdGEp
OwogICAgIAogICAgIC8vIEludmFsaWRhdGUgdGhlIGRvY3VtZW50IGVsZW1lbnQgd2UgaGF2ZSBj
YWNoZWQgaW4gY2FzZSBpdCB3YXMgcmVwbGFjZWQuCiAgICAgbV9kb2N1bWVudEVsZW1lbnQgPSAw
OwpAQCAtMTAwMiwxMyArOTg3LDYgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBEb2N1bWVudDo6Y3Jl
YXRlRWxlbWVudE5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdAogICAgIHJldHVy
biBjcmVhdGVFbGVtZW50KHFOYW1lLCBmYWxzZSk7CiB9CiAKLUVsZW1lbnQqIERvY3VtZW50Ojpn
ZXRFbGVtZW50QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCkgY29uc3QKLXsKLSAg
ICBpZiAoZWxlbWVudElkLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IG1fZWxlbWVudHNCeUlkLmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZC5pbXBsKCksIHRoaXMpOwot
fQotCiBTdHJpbmcgRG9jdW1lbnQ6OnJlYWR5U3RhdGUoKSBjb25zdAogewogICAgIERFRklORV9T
VEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBsb2FkaW5nLCAoImxvYWRpbmciKSk7CkBAIC0xMjM1
LDM0ICsxMjEzLDYgQEAgUGFzc1JlZlB0cjxSYW5nZT4gRG9jdW1lbnQ6OmNhcmV0UmFuZ2VGcm9t
UG9pbnQoaW50IHgsIGludCB5KQogICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHRoaXMsIHJhbmdl
Q29tcGxpYW50UG9zaXRpb24sIHJhbmdlQ29tcGxpYW50UG9zaXRpb24pOwogfQogCi12b2lkIERv
Y3VtZW50OjphZGRFbGVtZW50QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCwgRWxl
bWVudCogZWxlbWVudCkKLXsKLSAgICBtX2VsZW1lbnRzQnlJZC5hZGQoZWxlbWVudElkLmltcGwo
KSwgZWxlbWVudCk7Ci19Ci0KLXZvaWQgRG9jdW1lbnQ6OnJlbW92ZUVsZW1lbnRCeUlkKGNvbnN0
IEF0b21pY1N0cmluZyYgZWxlbWVudElkLCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIG1fZWxl
bWVudHNCeUlkLnJlbW92ZShlbGVtZW50SWQuaW1wbCgpLCBlbGVtZW50KTsKLX0KLQotRWxlbWVu
dCogRG9jdW1lbnQ6OmdldEVsZW1lbnRCeUFjY2Vzc0tleShjb25zdCBTdHJpbmcmIGtleSkgY29u
c3QKLXsKLSAgICBpZiAoa2V5LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYg
KCFtX2FjY2Vzc0tleU1hcFZhbGlkKSB7Ci0gICAgICAgIGZvciAoTm9kZSogbiA9IGZpcnN0Q2hp
bGQoKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgewotICAgICAgICAgICAgaWYgKCFu
LT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwotICAgICAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBhY2Nlc3NLZXkgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUo
YWNjZXNza2V5QXR0cik7Ci0gICAgICAgICAgICBpZiAoIWFjY2Vzc0tleS5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgbV9lbGVtZW50c0J5QWNjZXNzS2V5LnNldChhY2Nlc3NLZXkuaW1wbCgp
LCBlbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgICBtX2FjY2Vzc0tleU1hcFZhbGlkID0gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fZWxlbWVudHNCeUFjY2Vzc0tleS5nZXQoa2V5LmltcGwo
KSk7Ci19Ci0KIC8qCiAgKiBQZXJmb3JtcyB0aHJlZSBvcGVyYXRpb25zOgogICogIDEuIENvbnZl
cnQgY29udHJvbCBjaGFyYWN0ZXJzIHRvIHNwYWNlcwpAQCAtMTQ2MCwxMCArMTQxMCw3IEBAIHZv
aWQgRG9jdW1lbnQ6OnNjaGVkdWxlU3R5bGVSZWNhbGMoKQogICAgIGRvY3VtZW50c1RoYXROZWVk
U3R5bGVSZWNhbGMtPmFkZCh0aGlzKTsKICAgICAKICAgICAvLyBGSVhNRTogV2h5IG9uIGVhcnRo
IGlzIHRoaXMgaGVyZT8gVGhpcyBpcyBjbGVhcmx5IG1pc3BsYWNlZC4KLSAgICBpZiAobV9hY2Nl
c3NLZXlNYXBWYWxpZCkgewotICAgICAgICBtX2FjY2Vzc0tleU1hcFZhbGlkID0gZmFsc2U7Ci0g
ICAgICAgIG1fZWxlbWVudHNCeUFjY2Vzc0tleS5jbGVhcigpOwotICAgIH0KKyAgICBpbnZhbGlk
YXRlQWNjZXNzS2V5TWFwKCk7CiAgICAgCiAgICAgbV9zdHlsZVJlY2FsY1RpbWVyLnN0YXJ0T25l
U2hvdCgwKTsKIH0KQEAgLTE3NTUsNyArMTcwMiw3IEBAIHZvaWQgRG9jdW1lbnQ6OmF0dGFjaCgp
CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXIgPSByZW5kZXJlcigpOwogICAgIHNldFJlbmRlcmVy
KDApOwogCi0gICAgQ29udGFpbmVyTm9kZTo6YXR0YWNoKCk7CisgICAgVHJlZVNjb3BlOjphdHRh
Y2goKTsKIAogICAgIHNldFJlbmRlcmVyKHJlbmRlcik7CiB9CkBAIC0xODEyLDcgKzE3NTksNyBA
QCB2b2lkIERvY3VtZW50OjpkZXRhY2goKQogICAgIG1fZm9jdXNlZE5vZGUgPSAwOwogICAgIG1f
YWN0aXZlTm9kZSA9IDA7CiAKLSAgICBDb250YWluZXJOb2RlOjpkZXRhY2goKTsKKyAgICBUcmVl
U2NvcGU6OmRldGFjaCgpOwogCiAgICAgdW5zY2hlZHVsZVN0eWxlUmVjYWxjKCk7CiAKQEAgLTM4
OTUsMzMgKzM4NDIsNiBAQCBib29sIERvY3VtZW50OjpwYXJzZVF1YWxpZmllZE5hbWUoY29uc3Qg
U3RyaW5nJiBxdWFsaWZpZWROYW1lLCBTdHJpbmcmIHByZWZpeCwgUwogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIERvY3VtZW50OjphZGRJbWFnZU1hcChIVE1MTWFwRWxlbWVudCogaW1hZ2VN
YXApCi17Ci0gICAgQXRvbWljU3RyaW5nSW1wbCogbmFtZSA9IGltYWdlTWFwLT5nZXROYW1lKCku
aW1wbCgpOwotICAgIGlmICghbmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1faW1hZ2VNYXBz
QnlOYW1lLmFkZChuYW1lLCBpbWFnZU1hcCk7Ci19Ci0KLXZvaWQgRG9jdW1lbnQ6OnJlbW92ZUlt
YWdlTWFwKEhUTUxNYXBFbGVtZW50KiBpbWFnZU1hcCkKLXsKLSAgICBBdG9taWNTdHJpbmdJbXBs
KiBuYW1lID0gaW1hZ2VNYXAtPmdldE5hbWUoKS5pbXBsKCk7Ci0gICAgaWYgKCFuYW1lKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9pbWFnZU1hcHNCeU5hbWUucmVtb3ZlKG5hbWUsIGltYWdlTWFw
KTsKLX0KLQotSFRNTE1hcEVsZW1lbnQqIERvY3VtZW50OjpnZXRJbWFnZU1hcChjb25zdCBTdHJp
bmcmIHVybCkgY29uc3QKLXsKLSAgICBpZiAodXJsLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBzaXplX3QgaGFzaFBvcyA9IHVybC5maW5kKCcjJyk7Ci0gICAgU3RyaW5nIG5hbWUg
PSAoaGFzaFBvcyA9PSBub3RGb3VuZCA/IHVybCA6IHVybC5zdWJzdHJpbmcoaGFzaFBvcyArIDEp
KS5pbXBsKCk7Ci0gICAgaWYgKGlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxIVE1MTWFwRWxlbWVudCo+KG1faW1hZ2VNYXBzQnlOYW1lLmdldEVsZW1lbnRCeUxv
d2VyY2FzZWRNYXBOYW1lKEF0b21pY1N0cmluZyhuYW1lLmxvd2VyKCkpLmltcGwoKSwgdGhpcykp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTWFwRWxlbWVudCo+KG1faW1hZ2VNYXBzQnlO
YW1lLmdldEVsZW1lbnRCeU1hcE5hbWUoQXRvbWljU3RyaW5nKG5hbWUpLmltcGwoKSwgdGhpcykp
OwotfQotCiB2b2lkIERvY3VtZW50OjpzZXREZWNvZGVyKFBhc3NSZWZQdHI8VGV4dFJlc291cmNl
RGVjb2Rlcj4gZGVjb2RlcikKIHsKICAgICBtX2RlY29kZXIgPSBkZWNvZGVyOwpAQCAtNDc3MCwy
OSArNDY5MCw2IEBAIHZvaWQgRG9jdW1lbnQ6OnJlc3VtZVNjcmlwdGVkQW5pbWF0aW9uQ29udHJv
bGxlckNhbGxiYWNrcygpCiAjZW5kaWYKIH0KIAotRWxlbWVudCogRG9jdW1lbnQ6OmZpbmRBbmNo
b3IoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBnZXRFbGVtZW50QnlJZChu
YW1lKSkKLSAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gdGhp
czsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgewotICAgICAgICBpZiAo
bm9kZS0+aGFzVGFnTmFtZShhVGFnKSkgewotICAgICAgICAgICAgSFRNTEFuY2hvckVsZW1lbnQq
IGFuY2hvciA9IHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50Kj4obm9kZSk7Ci0gICAgICAg
ICAgICBpZiAoaW5RdWlya3NNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBRdWlya3MgbW9k
ZSwgY2FzZSBpbnNlbnNpdGl2ZSBjb21wYXJpc29uIG9mIG5hbWVzLgotICAgICAgICAgICAgICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShhbmNob3ItPm5hbWUoKSwgbmFtZSkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBhbmNob3I7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIC8vIFN0cmljdCBtb2RlLCBuYW1lcyBuZWVkIHRvIG1hdGNoIGV4YWN0bHkuCi0gICAg
ICAgICAgICAgICAgaWYgKGFuY2hvci0+bmFtZSgpID09IG5hbWUpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBhbmNob3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KIFN0cmluZyBEb2N1bWVudDo6ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlF
bmNvZGluZyhjb25zdCBTdHJpbmcmIHN0cikgY29uc3QKIHsKICAgICBpZiAobV9kZWNvZGVyKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAppbmRleCA4YTgzZDU5ZTc5M2FhNDJkODRkNDU4MzhjNzU0OTBiOTA1
N2MwYzE4Li40MThjZjhhZjI2M2RmZDg5YjcxYTFiMTEyODAzYTAyNzg3ZjBmZmExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaApAQCAtMzEsMTQgKzMxLDEzIEBACiAjaW5jbHVkZSAiQ29sbGVjdGlvbkNh
Y2hlLmgiCiAjaW5jbHVkZSAiQ29sbGVjdGlvblR5cGUuaCIKICNpbmNsdWRlICJDb2xvci5oIgot
I2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKICNpbmNsdWRlICJET01UaW1lU3RhbXAuaCIKLSNp
bmNsdWRlICJEb2N1bWVudE9yZGVyZWRNYXAuaCIKICNpbmNsdWRlICJEb2N1bWVudFRpbWluZy5o
IgogI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCiAjaW5jbHVkZSAiU3RyaW5nV2l0aERpcmVjdGlvbi5oIgogI2luY2x1ZGUgIlRp
bWVyLmgiCisjaW5jbHVkZSAiVHJlZVNjb3BlLmgiCiAjaW5jbHVkZSAiVmlld3BvcnRBcmd1bWVu
dHMuaCIKICNpbmNsdWRlIDx3dGYvRml4ZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KQEAgLTIwNiw3ICsyMDUsNyBAQCBlbnVtIFBhZ2VzaG93RXZlbnRQZXJzaXN0ZW5jZSB7CiAK
IGVudW0gU3R5bGVTZWxlY3RvclVwZGF0ZUZsYWcgeyBSZWNhbGNTdHlsZUltbWVkaWF0ZWx5LCBE
ZWZlclJlY2FsY1N0eWxlIH07CiAKLWNsYXNzIERvY3VtZW50IDogcHVibGljIENvbnRhaW5lck5v
ZGUsIHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHsKK2NsYXNzIERvY3VtZW50IDogcHVi
bGljIFRyZWVTY29wZSwgcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgewogcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50PiBjcmVhdGUoRnJhbWUqIGZyYW1lLCBjb25z
dCBLVVJMJiB1cmwpCiAgICAgewpAQCAtMjIwLDMxICsyMTksMTAgQEAgcHVibGljOgogCiAgICAg
TWVkaWFRdWVyeU1hdGNoZXIqIG1lZGlhUXVlcnlNYXRjaGVyKCk7CiAKLSAgICB1c2luZyBDb250
YWluZXJOb2RlOjpyZWY7Ci0gICAgdXNpbmcgQ29udGFpbmVyTm9kZTo6ZGVyZWY7CisgICAgdXNp
bmcgVHJlZVNjb3BlOjpyZWY7CisgICAgdXNpbmcgVHJlZVNjb3BlOjpkZXJlZjsKIAotICAgIC8v
IE5vZGVzIGJlbG9uZ2luZyB0byB0aGlzIGRvY3VtZW50IGhvbGQgInNlbGYtb25seSIgcmVmZXJl
bmNlcyAtCi0gICAgLy8gdGhlc2UgYXJlIGVub3VnaCB0byBrZWVwIHRoZSBkb2N1bWVudCBmcm9t
IGJlaW5nIGRlc3Ryb3llZCwgYnV0Ci0gICAgLy8gbm90IGVub3VnaCB0byBrZWVwIGl0IGZyb20g
cmVtb3ZpbmcgaXRzIGNoaWxkcmVuLiBUaGlzIGFsbG93cyBhCi0gICAgLy8gbm9kZSB0aGF0IG91
dGxpdmVzIGl0cyBkb2N1bWVudCB0byBzdGlsbCBoYXZlIGEgdmFsaWQgZG9jdW1lbnQKLSAgICAv
LyBwb2ludGVyIHdpdGhvdXQgaW50cm9kdWNpbmcgcmVmZXJlbmNlIGN5Y2xlcwotCi0gICAgdm9p
ZCBzZWxmT25seVJlZigpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1fZGVsZXRpb25IYXNCZWd1
bik7Ci0gICAgICAgICsrbV9zZWxmT25seVJlZkNvdW50OwotICAgIH0KLSAgICB2b2lkIHNlbGZP
bmx5RGVyZWYoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX2RlbGV0aW9uSGFzQmVndW4pOwot
ICAgICAgICAtLW1fc2VsZk9ubHlSZWZDb3VudDsKLSAgICAgICAgaWYgKCFtX3NlbGZPbmx5UmVm
Q291bnQgJiYgIXJlZkNvdW50KCkpIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBtX2Rl
bGV0aW9uSGFzQmVndW4gPSB0cnVlOwotI2VuZGlmCi0gICAgICAgICAgICBkZWxldGUgdGhpczsK
LSAgICAgICAgfQotICAgIH0KKyAgICBFbGVtZW50KiBnZXRFbGVtZW50QnlJZChjb25zdCBBdG9t
aWNTdHJpbmcmIGlkKSBjb25zdDsKIAogICAgIC8vIERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBm
b3IgRG9jdW1lbnQKIApAQCAtMzI5LDkgKzMwNyw2IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRy
PE5vZGU+IGltcG9ydE5vZGUoTm9kZSogaW1wb3J0ZWROb2RlLCBib29sIGRlZXAsIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlRWxlbWVudE5T
KGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIHF1YWxpZmllZE5hbWUs
IEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKLSAgICBFbGVtZW50
KiBnZXRFbGVtZW50QnlJZChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKLSAgICBib29sIGhh
c0VsZW1lbnRXaXRoSWQoQXRvbWljU3RyaW5nSW1wbCogaWQpIGNvbnN0OwotICAgIGJvb2wgY29u
dGFpbnNNdWx0aXBsZUVsZW1lbnRzV2l0aElkKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0
OwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgYWxsIG5vZGVzIHRoYXQgaW50ZXJzZWN0IGEg
cmVjdCBpbiB0aGUgd2luZG93J3MgZG9jdW1lbnQsIHVudGlsIGl0IGlzIGZ1bGx5IGVuY2xvc2Vk
IGJ5CkBAIC0zOTUsMTMgKzM3MCw2IEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8SFRNTEFs
bENvbGxlY3Rpb24+IGFsbCgpOwogCi0gICAgLy8gRmluZCBmaXJzdCBhbmNob3Igd2l0aCB0aGUg
Z2l2ZW4gbmFtZS4KLSAgICAvLyBGaXJzdCBzZWFyY2hlcyBmb3IgYW4gZWxlbWVudCB3aXRoIHRo
ZSBnaXZlbiBJRCwgYnV0IGlmIHRoYXQgZmFpbHMsIHRoZW4gbG9va3MKLSAgICAvLyBmb3IgYW4g
YW5jaG9yIHdpdGggdGhlIGdpdmVuIG5hbWUuIElEIG1hdGNoaW5nIGlzIGFsd2F5cyBjYXNlIHNl
bnNpdGl2ZSwgYnV0Ci0gICAgLy8gQW5jaG9yIG5hbWUgbWF0Y2hpbmcgaXMgY2FzZSBzZW5zaXRp
dmUgaW4gc3RyaWN0IG1vZGUgYW5kIG5vdCBjYXNlIHNlbnNpdGl2ZSBpbgotICAgIC8vIHF1aXJr
cyBtb2RlIGZvciBoaXN0b3JpY2FsIGNvbXBhdGliaWxpdHkgcmVhc29ucy4KLSAgICBFbGVtZW50
KiBmaW5kQW5jaG9yKGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0KICAgICBDb2xsZWN0aW9uQ2FjaGUq
IGNvbGxlY3Rpb25JbmZvKENvbGxlY3Rpb25UeXBlIHR5cGUpCiAgICAgewogICAgICAgICBBU1NF
UlQodHlwZSA+PSBGaXJzdFVubmFtZWREb2N1bWVudENhY2hlZFR5cGUpOwpAQCAtNDUyLDggKzQy
MCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fc3R5bGVTZWxlY3Rvci5nZXQoKTsKICAg
ICB9CiAKLSAgICBFbGVtZW50KiBnZXRFbGVtZW50QnlBY2Nlc3NLZXkoY29uc3QgU3RyaW5nJiBr
ZXkpIGNvbnN0OwotICAgIAogICAgIC8qKgogICAgICAqIFVwZGF0ZXMgdGhlIHBlbmRpbmcgc2hl
ZXQgY291bnQgYW5kIHRoZW4gY2FsbHMgdXBkYXRlU3R5bGVTZWxlY3Rvci4KICAgICAgKi8KQEAg
LTg2NywxMyArODMzLDYgQEAgcHVibGljOgogICAgIC8vIENoZWNrcyB0byBtYWtlIHN1cmUgcHJl
Zml4IGFuZCBuYW1lc3BhY2UgZG8gbm90IGNvbmZsaWN0IChwZXIgRE9NIENvcmUgMykKICAgICBz
dGF0aWMgYm9vbCBoYXNQcmVmaXhOYW1lc3BhY2VNaXNtYXRjaChjb25zdCBRdWFsaWZpZWROYW1l
Jik7CiAgICAgCi0gICAgdm9pZCBhZGRFbGVtZW50QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGVs
ZW1lbnRJZCwgRWxlbWVudCAqZWxlbWVudCk7Ci0gICAgdm9pZCByZW1vdmVFbGVtZW50QnlJZChj
b25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCwgRWxlbWVudCAqZWxlbWVudCk7Ci0KLSAgICB2
b2lkIGFkZEltYWdlTWFwKEhUTUxNYXBFbGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVJbWFnZU1h
cChIVE1MTWFwRWxlbWVudCopOwotICAgIEhUTUxNYXBFbGVtZW50KiBnZXRJbWFnZU1hcChjb25z
dCBTdHJpbmcmIHVybCkgY29uc3Q7Ci0KICAgICBIVE1MRWxlbWVudCogYm9keSgpIGNvbnN0Owog
ICAgIHZvaWQgc2V0Qm9keShQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiwgRXhjZXB0aW9uQ29kZSYp
OwogCkBAIC05NDYsMTAgKzkwNSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFVzZVNlY3VyZUtl
eWJvYXJkRW50cnlXaGVuQWN0aXZlKGJvb2wpOwogICAgIGJvb2wgdXNlU2VjdXJlS2V5Ym9hcmRF
bnRyeVdoZW5BY3RpdmUoKSBjb25zdDsKIAotICAgIHZvaWQgYWRkTm9kZUxpc3RDYWNoZSgpIHsg
KyttX251bU5vZGVMaXN0Q2FjaGVzOyB9Ci0gICAgdm9pZCByZW1vdmVOb2RlTGlzdENhY2hlKCkg
eyBBU1NFUlQobV9udW1Ob2RlTGlzdENhY2hlcyA+IDApOyAtLW1fbnVtTm9kZUxpc3RDYWNoZXM7
IH0KLSAgICBib29sIGhhc05vZGVMaXN0Q2FjaGVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Ob2Rl
TGlzdENhY2hlczsgfQotCiAgICAgdm9pZCB1cGRhdGVGb2N1c0FwcGVhcmFuY2VTb29uKGJvb2wg
cmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKTsKICAgICB2b2lkIGNhbmNlbEZvY3VzQXBwZWFyYW5j
ZVVwZGF0ZSgpOwogICAgICAgICAKQEAgLTExMzAsNiArMTA4NSw4IEBAIHB1YmxpYzoKIHByb3Rl
Y3RlZDoKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IEtVUkwmLCBib29sIGlzWEhUTUwsIGJv
b2wgaXNIVE1MKTsKIAorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95U2NvcGUoKTsKKwogICAgIHZv
aWQgY2xlYXJYTUxWZXJzaW9uKCkgeyBtX3htbFZlcnNpb24gPSBTdHJpbmcoKTsgfQogCiBwcml2
YXRlOgpAQCAtMTE0MSw3ICsxMDk4LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHByb2Nlc3NBcmd1
bWVudHMoY29uc3QgU3RyaW5nJiBmZWF0dXJlcywgdm9pZCogZGF0YSwgQXJndW1lbnRzQ2FsbGJh
Y2spOwogCiAgICAgdmlydHVhbCBib29sIGlzRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZWRMYXN0UmVmKCk7CiAKICAgICB2aXJ0dWFsIHZv
aWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJl
Zm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVyQ2hhbmdlID0gMCwgaW50IGNoaWxkQ291bnREZWx0
YSA9IDApOwogCkBAIC0xMzI4LDggKzEyODQsNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxEb2N1
bWVudD4gbV90cmFuc2Zvcm1Tb3VyY2VEb2N1bWVudDsKICNlbmRpZgogCi0gICAgRG9jdW1lbnRP
cmRlcmVkTWFwIG1faW1hZ2VNYXBzQnlOYW1lOwotCiAgICAgaW50IG1fZG9jSUQ7IC8vIEEgdW5p
cXVlIGRvY3VtZW50IGlkZW50aWZpZXIgdXNlZCBmb3IgdGhpbmdzIGxpa2UgZG9jdW1lbnQtc3Bl
Y2lmaWMgbWFwcGVkIGF0dHJpYnV0ZXMuCiAKICAgICBTdHJpbmcgbV94bWxFbmNvZGluZzsKQEAg
LTEzNDYsMTQgKzEzMDAsOCBAQCBwcml2YXRlOgogICAgIAogICAgIFJlZlB0cjxUZXh0UmVzb3Vy
Y2VEZWNvZGVyPiBtX2RlY29kZXI7CiAKLSAgICBEb2N1bWVudE9yZGVyZWRNYXAgbV9lbGVtZW50
c0J5SWQ7Ci0gICAgCi0gICAgbXV0YWJsZSBIYXNoTWFwPFN0cmluZ0ltcGwqLCBFbGVtZW50Kiwg
Q2FzZUZvbGRpbmdIYXNoPiBtX2VsZW1lbnRzQnlBY2Nlc3NLZXk7Ci0gICAgCiAgICAgSW5oZXJp
dGVkQm9vbCBtX2Rlc2lnbk1vZGU7CiAgICAgCi0gICAgaW50IG1fc2VsZk9ubHlSZWZDb3VudDsK
LQogICAgIENoZWNrZWRSYWRpb0J1dHRvbnMgbV9jaGVja2VkUmFkaW9CdXR0b25zOwogCiAgICAg
dHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBDb2xsZWN0aW9uQ2FjaGUqPiBOYW1l
ZENvbGxlY3Rpb25NYXA7CkBAIC0xMzc2LDcgKzEzMjQsNiBAQCBwcml2YXRlOgogCiAgICAgSGFz
aE1hcDxTdHJpbmcsIFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4gPiBtX2Nzc0NhbnZhc0VsZW1l
bnRzOwogCi0gICAgbXV0YWJsZSBib29sIG1fYWNjZXNzS2V5TWFwVmFsaWQ7CiAgICAgYm9vbCBt
X2NyZWF0ZVJlbmRlcmVyczsKICAgICBib29sIG1faW5QYWdlQ2FjaGU7CiAgICAgU3RyaW5nIG1f
aWNvblVSTDsKQEAgLTEzOTMsOCArMTM0MCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3VzZXNW
aWV3U291cmNlU3R5bGVzOwogICAgIGJvb2wgbV9zYXdFbGVtZW50c0luS25vd25OYW1lc3BhY2Vz
OwogCi0gICAgdW5zaWduZWQgbV9udW1Ob2RlTGlzdENhY2hlczsKLQogI2lmIFVTRShKU0MpCiAg
ICAgSlNXcmFwcGVyQ2FjaGVNYXAgbV93cmFwcGVyQ2FjaGVNYXA7CiAgICAgSlNXcmFwcGVyQ2Fj
aGUqIG1fbm9ybWFsV29ybGRXcmFwcGVyQ2FjaGU7CkBAIC0xNDQyLDE3ICsxMzg3LDYgQEAgcHJp
dmF0ZToKICAgICBSZWZQdHI8Q29udGVudFNlY3VyaXR5UG9saWN5PiBtX2NvbnRlbnRTZWN1cml0
eVBvbGljeTsKIH07CiAKLWlubGluZSBib29sIERvY3VtZW50OjpoYXNFbGVtZW50V2l0aElkKEF0
b21pY1N0cmluZ0ltcGwqIGlkKSBjb25zdAotewotICAgIEFTU0VSVChpZCk7Ci0gICAgcmV0dXJu
IG1fZWxlbWVudHNCeUlkLmNvbnRhaW5zKGlkKTsKLX0KLQotaW5saW5lIGJvb2wgRG9jdW1lbnQ6
OmNvbnRhaW5zTXVsdGlwbGVFbGVtZW50c1dpdGhJZChjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBj
b25zdAotewotICAgIHJldHVybiBtX2VsZW1lbnRzQnlJZC5jb250YWluc011bHRpcGxlKGlkLmlt
cGwoKSk7Ci19Ci0gICAgCiBpbmxpbmUgYm9vbCBOb2RlOjppc0RvY3VtZW50Tm9kZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIHRoaXMgPT0gbV9kb2N1bWVudDsKQEAgLTE0NjcsNyArMTQwMSw3IEBA
IGlubGluZSBOb2RlOjpOb2RlKERvY3VtZW50KiBkb2N1bWVudCwgQ29uc3RydWN0aW9uVHlwZSB0
eXBlKQogICAgICwgbV9ub2RlRmxhZ3ModHlwZSkKIHsKICAgICBpZiAobV9kb2N1bWVudCkKLSAg
ICAgICAgbV9kb2N1bWVudC0+c2VsZk9ubHlSZWYoKTsKKyAgICAgICAgbV9kb2N1bWVudC0+Z3Vh
cmRSZWYoKTsKICNpZiAhZGVmaW5lZChOREVCVUcpIHx8IChkZWZpbmVkKERVTVBfTk9ERV9TVEFU
SVNUSUNTKSAmJiBEVU1QX05PREVfU1RBVElTVElDUykKICAgICB0cmFja0ZvckRlYnVnZ2luZygp
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVk
TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCmluZGV4
IDc4N2ZjZjQ2NDVjYTJmMTViNGVlOTkxZTE3Y2I5MzJhMDZlZThiM2UuLjQ3MjY4YzQxODQzYzFi
YzZkYWZjN2E4M2NhNTQ4NWNiN2U3MGJkZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dE9yZGVyZWRNYXAuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxNYXBFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5j
bHVkZSAiVHJlZVNjb3BlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTA0LDcgKzEw
NSw3IEBAIHZvaWQgRG9jdW1lbnRPcmRlcmVkTWFwOjpyZW1vdmUoQXRvbWljU3RyaW5nSW1wbCog
a2V5LCBFbGVtZW50KiBlbGVtZW50KQogfQogCiB0ZW1wbGF0ZTxib29sIGtleU1hdGNoZXMoQXRv
bWljU3RyaW5nSW1wbCosIEVsZW1lbnQqKT4KLWlubGluZSBFbGVtZW50KiBEb2N1bWVudE9yZGVy
ZWRNYXA6OmdldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIGNvbnN0IERvY3VtZW50KiBkb2N1bWVu
dCkgY29uc3QKK2lubGluZSBFbGVtZW50KiBEb2N1bWVudE9yZGVyZWRNYXA6OmdldChBdG9taWNT
dHJpbmdJbXBsKiBrZXksIGNvbnN0IFRyZWVTY29wZSogc2NvcGUpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGtleSk7CiAKQEAgLTExNiw3ICsxMTcsNyBAQCBpbmxpbmUgRWxlbWVudCogRG9jdW1lbnRP
cmRlcmVkTWFwOjpnZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBjb25zdCBEb2N1bWVudCogZAog
CiAgICAgaWYgKG1fZHVwbGljYXRlQ291bnRzLmNvbnRhaW5zKGtleSkpIHsKICAgICAgICAgLy8g
V2Uga25vdyB0aGVyZSdzIGF0IGxlYXN0IG9uZSBub2RlIHRoYXQgbWF0Y2hlczsgaXRlcmF0ZSB0
byBmaW5kIHRoZSBmaXJzdCBvbmUuCi0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9IGRvY3VtZW50
LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsK
KyAgICAgICAgZm9yIChOb2RlKiBub2RlID0gc2NvcGUtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgewogICAgICAgICAgICAgaWYgKCFub2RlLT5p
c0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBl
bGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwpAQCAtMTMyLDE5ICsxMzMsMTkg
QEAgaW5saW5lIEVsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0KEF0b21pY1N0cmluZ0lt
cGwqIGtleSwgY29uc3QgRG9jdW1lbnQqIGQKICAgICByZXR1cm4gMDsKIH0KIAotRWxlbWVudCog
RG9jdW1lbnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlJZChBdG9taWNTdHJpbmdJbXBsKiBrZXks
IGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkgY29uc3QKK0VsZW1lbnQqIERvY3VtZW50T3JkZXJl
ZE1hcDo6Z2V0RWxlbWVudEJ5SWQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBjb25zdCBUcmVlU2Nv
cGUqIHNjb3BlKSBjb25zdAogewotICAgIHJldHVybiBnZXQ8a2V5TWF0Y2hlc0lkPihrZXksIGRv
Y3VtZW50KTsKKyAgICByZXR1cm4gZ2V0PGtleU1hdGNoZXNJZD4oa2V5LCBzY29wZSk7CiB9CiAK
LUVsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TWFwTmFtZShBdG9taWNT
dHJpbmdJbXBsKiBrZXksIGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkgY29uc3QKK0VsZW1lbnQq
IERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TWFwTmFtZShBdG9taWNTdHJpbmdJbXBs
KiBrZXksIGNvbnN0IFRyZWVTY29wZSogc2NvcGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldDxr
ZXlNYXRjaGVzTWFwTmFtZT4oa2V5LCBkb2N1bWVudCk7CisgICAgcmV0dXJuIGdldDxrZXlNYXRj
aGVzTWFwTmFtZT4oa2V5LCBzY29wZSk7CiB9CiAKLUVsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1h
cDo6Z2V0RWxlbWVudEJ5TG93ZXJjYXNlZE1hcE5hbWUoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0CitFbGVtZW50KiBEb2N1bWVudE9yZGVyZWRN
YXA6OmdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKEF0b21pY1N0cmluZ0ltcGwqIGtleSwg
Y29uc3QgVHJlZVNjb3BlKiBzY29wZSkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0PGtleU1hdGNo
ZXNMb3dlcmNhc2VkTWFwTmFtZT4oa2V5LCBkb2N1bWVudCk7CisgICAgcmV0dXJuIGdldDxrZXlN
YXRjaGVzTG93ZXJjYXNlZE1hcE5hbWU+KGtleSwgc2NvcGUpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVk
TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmgKaW5kZXggNTg3
NjdjNjQzMzcxY2NhZTJkZWZhZjMxYzk5MjU2OWQ4Njc0OGNmMi4uN2QxMjY4NmMzMzZhZDhmMGE2
MTc0MzlmMTY4NDlmNjRjYzNiOWIxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50T3JkZXJlZE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVy
ZWRNYXAuaApAQCAtMzcsOCArMzcsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKK2NsYXNzIFRyZWVTY29wZTsKIAogY2xhc3MgRG9j
dW1lbnRPcmRlcmVkTWFwIHsKIHB1YmxpYzoKQEAgLTQ5LDE0ICs0OSwxNCBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBjb250YWlucyhBdG9taWNTdHJpbmdJbXBsKikgY29uc3Q7CiAgICAgYm9vbCBjb250
YWluc011bHRpcGxlKEF0b21pY1N0cmluZ0ltcGwqKSBjb25zdDsKICAgICAvLyBjb25jcmV0ZSBp
bnN0YW50aWF0aW9ucyBvZiB0aGUgZ2V0PD4oKSBtZXRob2QgdGVtcGxhdGUKLSAgICBFbGVtZW50
KiBnZXRFbGVtZW50QnlJZChBdG9taWNTdHJpbmdJbXBsKiwgY29uc3QgRG9jdW1lbnQqKSBjb25z
dDsKLSAgICBFbGVtZW50KiBnZXRFbGVtZW50QnlNYXBOYW1lKEF0b21pY1N0cmluZ0ltcGwqLCBj
b25zdCBEb2N1bWVudCopIGNvbnN0OwotICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeUxvd2VyY2Fz
ZWRNYXBOYW1lKEF0b21pY1N0cmluZ0ltcGwqLCBjb25zdCBEb2N1bWVudCopIGNvbnN0OworICAg
IEVsZW1lbnQqIGdldEVsZW1lbnRCeUlkKEF0b21pY1N0cmluZ0ltcGwqLCBjb25zdCBUcmVlU2Nv
cGUqKSBjb25zdDsKKyAgICBFbGVtZW50KiBnZXRFbGVtZW50QnlNYXBOYW1lKEF0b21pY1N0cmlu
Z0ltcGwqLCBjb25zdCBUcmVlU2NvcGUqKSBjb25zdDsKKyAgICBFbGVtZW50KiBnZXRFbGVtZW50
QnlMb3dlcmNhc2VkTWFwTmFtZShBdG9taWNTdHJpbmdJbXBsKiwgY29uc3QgVHJlZVNjb3BlKikg
Y29uc3Q7CiAKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdDsKIAogcHJpdmF0ZToK
LSAgICB0ZW1wbGF0ZTxib29sIGtleU1hdGNoZXMoQXRvbWljU3RyaW5nSW1wbCosIEVsZW1lbnQq
KT4gRWxlbWVudCogZ2V0KEF0b21pY1N0cmluZ0ltcGwqLCBjb25zdCBEb2N1bWVudCopIGNvbnN0
OworICAgIHRlbXBsYXRlPGJvb2wga2V5TWF0Y2hlcyhBdG9taWNTdHJpbmdJbXBsKiwgRWxlbWVu
dCopPiBFbGVtZW50KiBnZXQoQXRvbWljU3RyaW5nSW1wbCosIGNvbnN0IFRyZWVTY29wZSopIGNv
bnN0OwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBFbGVtZW50Kj4g
TWFwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggOWVjYmNjYjVjZDdjZWM4YjNiODkzMTFiMTEzMTYx
ZDUyMTQ4YjUyMC4uYjM0NjA2NGY2NTA2YTFjOGM2MzliZTdmZTdmZGNmMjcyNGViNzVhYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcApAQCAtNDA2LDcgKzQwNiw3IEBAIE5vZGU6On5Ob2RlKCkKICAgICAgICAg
bV9uZXh0LT5zZXRQcmV2aW91c1NpYmxpbmcoMCk7CiAKICAgICBpZiAobV9kb2N1bWVudCkKLSAg
ICAgICAgbV9kb2N1bWVudC0+c2VsZk9ubHlEZXJlZigpOworICAgICAgICBtX2RvY3VtZW50LT5n
dWFyZERlcmVmKCk7CiB9CiAKICNpZmRlZiBOREVCVUcKQEAgLTQ0Miw3ICs0NDIsNyBAQCB2b2lk
IE5vZGU6OnNldERvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKICAgICBpZiAoaW5Eb2N1bWVu
dCgpIHx8IG1fZG9jdW1lbnQgPT0gZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRv
Y3VtZW50LT5zZWxmT25seVJlZigpOworICAgIGRvY3VtZW50LT5ndWFyZFJlZigpOwogCiAgICAg
c2V0V2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnRXYXNDYWxsZWQoZmFsc2UpOwogICAgIHdpbGxN
b3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CkBAIC00NjAsNyArNDYwLDcgQEAgdm9pZCBOb2RlOjpz
ZXREb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCiAKICAgICBpZiAobV9kb2N1bWVudCkgewog
ICAgICAgICBtX2RvY3VtZW50LT5tb3ZlTm9kZUl0ZXJhdG9yc1RvTmV3RG9jdW1lbnQodGhpcywg
ZG9jdW1lbnQpOwotICAgICAgICBtX2RvY3VtZW50LT5zZWxmT25seURlcmVmKCk7CisgICAgICAg
IG1fZG9jdW1lbnQtPmd1YXJkRGVyZWYoKTsKICAgICB9CiAKICAgICBtX2RvY3VtZW50ID0gZG9j
dW1lbnQ7CkBAIC03OTQsMjQgKzc5NCwyNCBAQCBib29sIE5vZGU6Omhhc05vbkVtcHR5Qm91bmRp
bmdCb3goKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBOb2RlOjpzZXREb2N1
bWVudFJlY3Vyc2l2ZWx5KERvY3VtZW50KiBkb2N1bWVudCkKK3ZvaWQgTm9kZTo6c2V0RG9jdW1l
bnRSZWN1cnNpdmVseShEb2N1bWVudCogbmV3RG9jdW1lbnQpCiB7Ci0gICAgaWYgKHRoaXMtPmRv
Y3VtZW50KCkgPT0gZG9jdW1lbnQpCisgICAgaWYgKGRvY3VtZW50KCkgPT0gbmV3RG9jdW1lbnQp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElmIGFuIGVsZW1lbnQgaXMgbW92ZWQgZnJvbSBh
IGRvY3VtZW50IGFuZCB0aGVuIGV2ZW50dWFsbHkgYmFjayBhZ2FpbiB0aGUgY29sbGVjdGlvbiBj
YWNoZSBmb3IKICAgICAvLyB0aGF0IGVsZW1lbnQgbWF5IGNvbnRhaW4gc3RhbGUgZGF0YSBhcyBj
aGFuZ2VzIG1hZGUgdG8gaXQgd2lsbCBoYXZlIHVwZGF0ZWQgdGhlIERPTVRyZWVWZXJzaW9uCiAg
ICAgLy8gb2YgdGhlIGRvY3VtZW50IGl0IHdhcyBtb3ZlZCB0by4gQnkgaW5jcmVhc2luZyB0aGUg
RE9NVHJlZVZlcnNpb24gb2YgdGhlIGRvbmF0aW5nIGRvY3VtZW50IGhlcmUKICAgICAvLyB3ZSBl
bnN1cmUgdGhhdCB0aGUgY29sbGVjdGlvbiBjYWNoZSB3aWxsIGJlIGludmFsaWRhdGVkIGFzIG5l
ZWRlZCB3aGVuIHRoZSBlbGVtZW50IGlzIG1vdmVkIGJhY2suCi0gICAgaWYgKHRoaXMtPmRvY3Vt
ZW50KCkpCi0gICAgICAgIHRoaXMtPmRvY3VtZW50KCktPmluY0RPTVRyZWVWZXJzaW9uKCk7Cisg
ICAgaWYgKGRvY3VtZW50KCkpCisgICAgICAgIGRvY3VtZW50KCktPmluY0RPTVRyZWVWZXJzaW9u
KCk7CiAKICAgICBmb3IgKE5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0gbm9kZS0+dHJh
dmVyc2VOZXh0Tm9kZSh0aGlzKSkgewotICAgICAgICBub2RlLT5zZXREb2N1bWVudChkb2N1bWVu
dCk7CisgICAgICAgIG5vZGUtPnNldERvY3VtZW50KG5ld0RvY3VtZW50KTsKICAgICAgICAgaWYg
KCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
aWYgKE5vZGUqIHNoYWRvdyA9IHRvRWxlbWVudChub2RlKS0+c2hhZG93Um9vdCgpKQotICAgICAg
ICAgICAgc2hhZG93LT5zZXREb2N1bWVudFJlY3Vyc2l2ZWx5KGRvY3VtZW50KTsKKyAgICAgICAg
ICAgIHNoYWRvdy0+c2V0RG9jdW1lbnRSZWN1cnNpdmVseShuZXdEb2N1bWVudCk7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaAppbmRleCAxMjlhNDkzZTg1NTljNTA1YmFiZjdhZWJlZDQwMDk0OTI2ZWEw
ODdjLi45ZmMzZmVmMTEzYTExNDdhYmNjZTkyN2U0OGUxNjY5MmQ1ZjRjNDkwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmgKQEAgLTM2NSw3ICszNjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2RvY3VtZW50
IHx8ICFnZXRGbGFnKEluRG9jdW1lbnRGbGFnKSk7CiAgICAgICAgIHJldHVybiBnZXRGbGFnKElu
RG9jdW1lbnRGbGFnKTsKICAgICB9Ci0KKyAgICAKICAgICBib29sIGlzUmVhZE9ubHlOb2RlKCkg
Y29uc3QgeyByZXR1cm4gbm9kZVR5cGUoKSA9PSBFTlRJVFlfUkVGRVJFTkNFX05PREU7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSkgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB1bnNpZ25lZCBjaGlsZE5vZGVDb3VudCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNj
b3BlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44NTM4NDZlM2RlN2M5NmM2ZTk4OGFhNTliYjM5YTQ2OWFjZDQ0
NDk0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAK
QEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRyZWVTY29wZS5oIgorCisj
aW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxBbmNob3JFbGVtZW50LmgiCisjaW5j
bHVkZSAiSFRNTE1hcEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitUcmVlU2NvcGU6
OlRyZWVTY29wZShEb2N1bWVudCogZG9jdW1lbnQsIENvbnN0cnVjdGlvblR5cGUgY29uc3RydWN0
aW9uVHlwZSkKKyAgICA6IENvbnRhaW5lck5vZGUoZG9jdW1lbnQsIGNvbnN0cnVjdGlvblR5cGUp
CisgICAgLCBtX2d1YXJkUmVmQ291bnQoMCkKKyAgICAsIG1fYWNjZXNzS2V5TWFwVmFsaWQoZmFs
c2UpCisgICAgLCBtX251bU5vZGVMaXN0Q2FjaGVzKDApCit7Cit9CisKK3ZvaWQgVHJlZVNjb3Bl
OjpyZW1vdmVkTGFzdFJlZigpCit7CisgICAgQVNTRVJUKCFtX2RlbGV0aW9uSGFzQmVndW4pOwor
ICAgIGlmIChtX2d1YXJkUmVmQ291bnQpIHsKKyAgICAgICAgLy8gSWYgcmVtb3ZpbmcgYSBjaGls
ZCByZW1vdmVzIHRoZSBsYXN0IHNlbGYtb25seSByZWYsIHdlIGRvbid0CisgICAgICAgIC8vIHdh
bnQgdGhlIHNjb3BlIHRvIGJlIGRlc3RydWN0ZWQgdW50aWwgYWZ0ZXIKKyAgICAgICAgLy8gcmVt
b3ZlQWxsQ2hpbGRyZW4gcmV0dXJucywgc28gd2UgZ3VhcmQgb3Vyc2VsdmVzIHdpdGggYW4KKyAg
ICAgICAgLy8gZXh0cmEgc2VsZi1vbmx5IHJlZi4KKyAgICAgICAgZ3VhcmRSZWYoKTsKKyAgICAg
ICAgZGVzdHJveVNjb3BlKCk7CisgICAgICAgIGd1YXJkRGVyZWYoKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgQ29udGFpbmVyTm9kZTo6cmVtb3ZlZExhc3RSZWYoKTsKK30KKwordm9pZCBUcmVlU2Nv
cGU6OmRlc3Ryb3lTY29wZSgpCit7CisgICAgLy8gcmVtb3ZlQWxsQ2hpbGRyZW4oKSBkb2Vzbid0
IGFsd2F5cyB1bnJlZ2lzdGVyIElEcywgZG8gaXQgdXBmcm9udCB0byBhdm9pZCBoYXZpbmcgc3Rh
bGUgcmVmZXJlbmNlcyBpbiB0aGUgbWFwLgorICAgIG1fZWxlbWVudHNCeUlkLmNsZWFyKCk7Cisg
ICAgcmVtb3ZlQWxsQ2hpbGRyZW4oKTsKK30KKworRWxlbWVudCogVHJlZVNjb3BlOjpnZXRFbGVt
ZW50QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCkgY29uc3QKK3sKKyAgICBpZiAo
ZWxlbWVudElkLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fZWxl
bWVudHNCeUlkLmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZC5pbXBsKCksIHRoaXMpOworfQorCit2
b2lkIFRyZWVTY29wZTo6YWRkRWxlbWVudEJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50
SWQsIEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgbV9lbGVtZW50c0J5SWQuYWRkKGVsZW1lbnRJ
ZC5pbXBsKCksIGVsZW1lbnQpOworfQorCit2b2lkIFRyZWVTY29wZTo6cmVtb3ZlRWxlbWVudEJ5
SWQoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQsIEVsZW1lbnQqIGVsZW1lbnQpCit7Cisg
ICAgbV9lbGVtZW50c0J5SWQucmVtb3ZlKGVsZW1lbnRJZC5pbXBsKCksIGVsZW1lbnQpOworfQor
CitFbGVtZW50KiBUcmVlU2NvcGU6OmdldEVsZW1lbnRCeUFjY2Vzc0tleShjb25zdCBTdHJpbmcm
IGtleSkgY29uc3QKK3sKKyAgICBpZiAoa2V5LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgaWYgKCFtX2FjY2Vzc0tleU1hcFZhbGlkKSB7CisgICAgICAgIGZvciAoTm9kZSogbiA9
IGZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICAg
ICAgaWYgKCFuLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwor
ICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhY2Nlc3NLZXkgPSBlbGVtZW50LT5nZXRB
dHRyaWJ1dGUoYWNjZXNza2V5QXR0cik7CisgICAgICAgICAgICBpZiAoIWFjY2Vzc0tleS5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAgICAgbV9lbGVtZW50c0J5QWNjZXNzS2V5LnNldChhY2Nlc3NL
ZXkuaW1wbCgpLCBlbGVtZW50KTsKKyAgICAgICAgfQorICAgICAgICBtX2FjY2Vzc0tleU1hcFZh
bGlkID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIG1fZWxlbWVudHNCeUFjY2Vzc0tleS5nZXQo
a2V5LmltcGwoKSk7Cit9CisKK3ZvaWQgVHJlZVNjb3BlOjppbnZhbGlkYXRlQWNjZXNzS2V5TWFw
KCkKK3sKKyAgICBtX2FjY2Vzc0tleU1hcFZhbGlkID0gZmFsc2U7CisgICAgbV9lbGVtZW50c0J5
QWNjZXNzS2V5LmNsZWFyKCk7Cit9CisKK3ZvaWQgVHJlZVNjb3BlOjphZGRJbWFnZU1hcChIVE1M
TWFwRWxlbWVudCogaW1hZ2VNYXApCit7CisgICAgQXRvbWljU3RyaW5nSW1wbCogbmFtZSA9IGlt
YWdlTWFwLT5nZXROYW1lKCkuaW1wbCgpOworICAgIGlmICghbmFtZSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1faW1hZ2VNYXBzQnlOYW1lLmFkZChuYW1lLCBpbWFnZU1hcCk7Cit9CisKK3ZvaWQg
VHJlZVNjb3BlOjpyZW1vdmVJbWFnZU1hcChIVE1MTWFwRWxlbWVudCogaW1hZ2VNYXApCit7Cisg
ICAgQXRvbWljU3RyaW5nSW1wbCogbmFtZSA9IGltYWdlTWFwLT5nZXROYW1lKCkuaW1wbCgpOwor
ICAgIGlmICghbmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1faW1hZ2VNYXBzQnlOYW1lLnJl
bW92ZShuYW1lLCBpbWFnZU1hcCk7Cit9CisKK0hUTUxNYXBFbGVtZW50KiBUcmVlU2NvcGU6Omdl
dEltYWdlTWFwKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdAoreworICAgIGlmICh1cmwuaXNOdWxs
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIHNpemVfdCBoYXNoUG9zID0gdXJsLmZpbmQoJyMn
KTsKKyAgICBTdHJpbmcgbmFtZSA9IChoYXNoUG9zID09IG5vdEZvdW5kID8gdXJsIDogdXJsLnN1
YnN0cmluZyhoYXNoUG9zICsgMSkpLmltcGwoKTsKKyAgICBpZiAoZG9jdW1lbnQoKS0+aXNIVE1M
RG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxNYXBFbGVtZW50Kj4o
bV9pbWFnZU1hcHNCeU5hbWUuZ2V0RWxlbWVudEJ5TG93ZXJjYXNlZE1hcE5hbWUoQXRvbWljU3Ry
aW5nKG5hbWUubG93ZXIoKSkuaW1wbCgpLCB0aGlzKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhUTUxNYXBFbGVtZW50Kj4obV9pbWFnZU1hcHNCeU5hbWUuZ2V0RWxlbWVudEJ5TWFwTmFtZShB
dG9taWNTdHJpbmcobmFtZSkuaW1wbCgpLCB0aGlzKSk7Cit9CisKK0VsZW1lbnQqIFRyZWVTY29w
ZTo6ZmluZEFuY2hvcihjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKG5hbWUuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IGdldEVs
ZW1lbnRCeUlkKG5hbWUpKQorICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICBmb3IgKE5vZGUq
IG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7Cisg
ICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGFUYWcpKSB7CisgICAgICAgICAgICBIVE1MQW5j
aG9yRWxlbWVudCogYW5jaG9yID0gc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnQqPihub2Rl
KTsKKyAgICAgICAgICAgIGlmIChkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkgeworICAgICAg
ICAgICAgICAgIC8vIFF1aXJrcyBtb2RlLCBjYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmlzb24gb2Yg
bmFtZXMuCisgICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGFuY2hvci0+bmFt
ZSgpLCBuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFuY2hvcjsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gU3RyaWN0IG1vZGUsIG5hbWVzIG5lZWQg
dG8gbWF0Y2ggZXhhY3RseS4KKyAgICAgICAgICAgICAgICBpZiAoYW5jaG9yLT5uYW1lKCkgPT0g
bmFtZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFuY2hvcjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMThlMzYxZTM5NjM3MTNmMWNi
MGQyNjY1ZWI4N2U2Y2I0MWI3OWIyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9UcmVlU2NvcGUuaApAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRyZWVTY29wZV9oCisjZGVmaW5lIFRy
ZWVTY29wZV9oCisKKyNpbmNsdWRlICJDb250YWluZXJOb2RlLmgiCisjaW5jbHVkZSAiRG9jdW1l
bnRPcmRlcmVkTWFwLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRWxlbWVudDsK
K2NsYXNzIEhUTUxNYXBFbGVtZW50OworCitjbGFzcyBUcmVlU2NvcGUgOiBwdWJsaWMgQ29udGFp
bmVyTm9kZSB7CitwdWJsaWM6CisgICAgLy8gTm9kZXMgYmVsb25naW5nIHRvIHRoaXMgc2NvcGUg
aG9sZCBndWFyZCByZWZlcmVuY2VzIC0KKyAgICAvLyB0aGVzZSBhcmUgZW5vdWdoIHRvIGtlZXAg
dGhlIGRvY3VtZW50IGZyb20gYmVpbmcgZGVzdHJveWVkLCBidXQKKyAgICAvLyBub3QgZW5vdWdo
IHRvIGtlZXAgaXQgZnJvbSByZW1vdmluZyBpdHMgY2hpbGRyZW4uIFRoaXMgYWxsb3dzIGEKKyAg
ICAvLyBub2RlIHRoYXQgb3V0bGl2ZXMgaXRzIHNjb3BlIHRvIHN0aWxsIGhhdmUgYSB2YWxpZCBz
Y29wZQorICAgIC8vIHBvaW50ZXIgd2l0aG91dCBpbnRyb2R1Y2luZyByZWZlcmVuY2UgY3ljbGVz
LgorCisgICAgdm9pZCBndWFyZFJlZigpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fZGVsZXRp
b25IYXNCZWd1bik7CisgICAgICAgICsrbV9ndWFyZFJlZkNvdW50OworICAgIH0KKworICAgIHZv
aWQgZ3VhcmREZXJlZigpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fZGVsZXRpb25IYXNCZWd1
bik7CisgICAgICAgIC0tbV9ndWFyZFJlZkNvdW50OworICAgICAgICBpZiAoIW1fZ3VhcmRSZWZD
b3VudCAmJiAhcmVmQ291bnQoKSkgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgIG1fZGVs
ZXRpb25IYXNCZWd1biA9IHRydWU7CisjZW5kaWYKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzOwor
ICAgICAgICB9CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRMYXN0UmVmKCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lTY29wZSgpOworCisgICAgRWxlbWVudCogZ2V0RWxlbWVu
dEJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CisgICAgYm9vbCBoYXNFbGVtZW50V2l0
aElkKEF0b21pY1N0cmluZ0ltcGwqIGlkKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zTXVsdGlw
bGVFbGVtZW50c1dpdGhJZChjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdDsKKyAgICB2b2lk
IGFkZEVsZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkLCBFbGVtZW50Kik7
CisgICAgdm9pZCByZW1vdmVFbGVtZW50QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJ
ZCwgRWxlbWVudCopOworCisgICAgdm9pZCBhZGRJbWFnZU1hcChIVE1MTWFwRWxlbWVudCopOwor
ICAgIHZvaWQgcmVtb3ZlSW1hZ2VNYXAoSFRNTE1hcEVsZW1lbnQqKTsKKyAgICBIVE1MTWFwRWxl
bWVudCogZ2V0SW1hZ2VNYXAoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0OworCisgICAgRWxlbWVu
dCogZ2V0RWxlbWVudEJ5QWNjZXNzS2V5KGNvbnN0IFN0cmluZyYga2V5KSBjb25zdDsKKyAgICB2
b2lkIGludmFsaWRhdGVBY2Nlc3NLZXlNYXAoKTsKKworICAgIHZvaWQgYWRkTm9kZUxpc3RDYWNo
ZSgpIHsgKyttX251bU5vZGVMaXN0Q2FjaGVzOyB9CisgICAgdm9pZCByZW1vdmVOb2RlTGlzdENh
Y2hlKCkgeyBBU1NFUlQobV9udW1Ob2RlTGlzdENhY2hlcyA+IDApOyAtLW1fbnVtTm9kZUxpc3RD
YWNoZXM7IH0KKyAgICBib29sIGhhc05vZGVMaXN0Q2FjaGVzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1Ob2RlTGlzdENhY2hlczsgfQorCisgICAgLy8gRmluZCBmaXJzdCBhbmNob3Igd2l0aCB0aGUg
Z2l2ZW4gbmFtZS4KKyAgICAvLyBGaXJzdCBzZWFyY2hlcyBmb3IgYW4gZWxlbWVudCB3aXRoIHRo
ZSBnaXZlbiBJRCwgYnV0IGlmIHRoYXQgZmFpbHMsIHRoZW4gbG9va3MKKyAgICAvLyBmb3IgYW4g
YW5jaG9yIHdpdGggdGhlIGdpdmVuIG5hbWUuIElEIG1hdGNoaW5nIGlzIGFsd2F5cyBjYXNlIHNl
bnNpdGl2ZSwgYnV0CisgICAgLy8gQW5jaG9yIG5hbWUgbWF0Y2hpbmcgaXMgY2FzZSBzZW5zaXRp
dmUgaW4gc3RyaWN0IG1vZGUgYW5kIG5vdCBjYXNlIHNlbnNpdGl2ZSBpbgorICAgIC8vIHF1aXJr
cyBtb2RlIGZvciBoaXN0b3JpY2FsIGNvbXBhdGliaWxpdHkgcmVhc29ucy4KKyAgICBFbGVtZW50
KiBmaW5kQW5jaG9yKGNvbnN0IFN0cmluZyYgbmFtZSk7CisKK3Byb3RlY3RlZDoKKyAgICBUcmVl
U2NvcGUoRG9jdW1lbnQqLCBDb25zdHJ1Y3Rpb25UeXBlID0gQ3JlYXRlQ29udGFpbmVyKTsKKwor
cHJpdmF0ZToKKyAgICBpbnQgbV9ndWFyZFJlZkNvdW50OworCisgICAgRG9jdW1lbnRPcmRlcmVk
TWFwIG1fZWxlbWVudHNCeUlkOworICAgIERvY3VtZW50T3JkZXJlZE1hcCBtX2ltYWdlTWFwc0J5
TmFtZTsKKworICAgIG11dGFibGUgSGFzaE1hcDxTdHJpbmdJbXBsKiwgRWxlbWVudCosIENhc2VG
b2xkaW5nSGFzaD4gbV9lbGVtZW50c0J5QWNjZXNzS2V5OyAgICAKKyAgICBtdXRhYmxlIGJvb2wg
bV9hY2Nlc3NLZXlNYXBWYWxpZDsKKworICAgIHVuc2lnbmVkIG1fbnVtTm9kZUxpc3RDYWNoZXM7
Cit9OworCitpbmxpbmUgYm9vbCBUcmVlU2NvcGU6Omhhc0VsZW1lbnRXaXRoSWQoQXRvbWljU3Ry
aW5nSW1wbCogaWQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlkKTsKKyAgICByZXR1cm4gbV9lbGVt
ZW50c0J5SWQuY29udGFpbnMoaWQpOworfQorCitpbmxpbmUgYm9vbCBUcmVlU2NvcGU6OmNvbnRh
aW5zTXVsdGlwbGVFbGVtZW50c1dpdGhJZChjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdAor
eworICAgIHJldHVybiBtX2VsZW1lbnRzQnlJZC5jb250YWluc011bHRpcGxlKGlkLmltcGwoKSk7
Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBUcmVlU2NvcGVf
aAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UcmVlU2hhcmVkLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UcmVlU2hhcmVkLmgKaW5kZXggOWUyN2M1ZTE2MjdiZWEy
NGY5ZjBmYmYyYzg0NjY5M2M4ODQ3Y2JkMy4uZTU0YjFkMWE2YzY4OTdkNTFiMjY1MjgxNjdkNmU1
ZTEwMWYxNWZjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVHJlZVNoYXJl
ZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RyZWVTaGFyZWQuaApAQCAtOTIsNiAr
OTIsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9yZWZDb3VudDsKICAgICB9CiAKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZExhc3RSZWYoKQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisg
ICAgICAgIG1fZGVsZXRpb25IYXNCZWd1biA9IHRydWU7CisjZW5kaWYKKyAgICAgICAgZGVsZXRl
IHRoaXM7CisgICAgfQorCiAgICAgdm9pZCBzZXRQYXJlbnQoVCogcGFyZW50KQogICAgIHsgCiAg
ICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC0xMTQsMTQgKzEyMiw2IEBAIHByaXZh
dGU6CiAgICAgZnJpZW5kIHZvaWQgYWRvcHRlZDw+KFRyZWVTaGFyZWQ8VD4qKTsKICNlbmRpZgog
Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZWRMYXN0UmVmKCkKLSAgICB7Ci0jaWZuZGVmIE5ERUJV
RwotICAgICAgICBtX2RlbGV0aW9uSGFzQmVndW4gPSB0cnVlOwotI2VuZGlmCi0gICAgICAgIGRl
bGV0ZSB0aGlzOwotICAgIH0KLQogICAgIGludCBtX3JlZkNvdW50OwogICAgIFQqIG1fcGFyZW50
OwogI2lmbmRlZiBOREVCVUcK
</data>
<flag name="review"
          id="80596"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>