<?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>166967</bug_id>
          
          <creation_ts>2017-01-12 03:49:29 -0800</creation_ts>
          <short_desc>[SOUP] Simplify cookie storage handling</short_desc>
          <delta_ts>2017-01-15 10:58:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Soup</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>166969</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1266117</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-12 03:49:29 -0800</bug_when>
    <thetext>We currently have a global cookie storage, and several create() methods in SoupNetworkSession to create sessions with different cookie jars. This could be simplified by moving the cookie storage handling to NetworkStorageSession and removing all create() methods from SoupNetworkSession.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266119</commentid>
    <comment_count>1</comment_count>
      <attachid>298668</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-12 04:02:16 -0800</bug_when>
    <thetext>Created attachment 298668
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266123</commentid>
    <comment_count>2</comment_count>
      <attachid>298670</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-12 05:16:33 -0800</bug_when>
    <thetext>Created attachment 298670
Try to fix EFL build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266144</commentid>
    <comment_count>3</comment_count>
      <attachid>298670</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2017-01-12 06:38:42 -0800</bug_when>
    <thetext>Comment on attachment 298670
Try to fix EFL build

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

Nice!

&gt; Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp:87
&gt; +    // FIXME: Creating a testing session is losing soup session values set when initializing the network process.

Is this comment still valid?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266146</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-12 06:55:38 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 298670 [details]
&gt; Try to fix EFL build
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=298670&amp;action=review
&gt; 
&gt; Nice!

Thanks!

&gt; &gt; Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp:87
&gt; &gt; +    // FIXME: Creating a testing session is losing soup session values set when initializing the network process.
&gt; 
&gt; Is this comment still valid?

Yes, that&apos;s what bug #166969 fixes on top of this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266213</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-01-12 11:15:35 -0800</bug_when>
    <thetext>(I want to review this too.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266273</commentid>
    <comment_count>6</comment_count>
      <attachid>298670</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-01-12 13:50:07 -0800</bug_when>
    <thetext>Comment on attachment 298670
Try to fix EFL build

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

I have a couple questions.

Also, please look at bug #166029.

&gt; Source/WebCore/ChangeLog:11
&gt; +        NetworkStorageSession and removing all create() methods from SoupNetworkSession. This patch also removes the
&gt; +        default SoupNetworkSession in favor of using the default NetworkStorageSession.

That&apos;s a big change to hide in a patch named &quot;Simplify cookie storage handling&quot;. Then again, I&apos;m probably not one to complain, having just tried to sneak WebKitSecurityOrigin into a notifications patch... but consider landing in two parts if you have time.

But I&apos;m curious: what was the motivation for this change?

&gt; Source/WebCore/ChangeLog:41
&gt; +        (WebCore::NetworkStorageSession::cookieStorage): Return the cookie sotrage from the SoupNetworkSession if we

sotrage -&gt; storage

&gt; Source/WebCore/platform/network/soup/DNSSoup.cpp:82
&gt; -    g_object_get(SoupNetworkSession::defaultSession().soupSession(), &quot;proxy-resolver&quot;, &amp;resolver.outPtr(), nullptr);
&gt; +    g_object_get(NetworkStorageSession::defaultStorageSession().soupNetworkSession().soupSession(), &quot;proxy-resolver&quot;, &amp;resolver.outPtr(), nullptr);

Shame it&apos;s a lot more typing to get the SoupNetworkSession for the default NetworkStorageSession than it was to just get the default SoupNetworkSession. Hence why I&apos;m curious to know your reasoning for changing this.

&gt; Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp:110
&gt; +SoupCookieJar* NetworkStorageSession::cookieStorage() const
&gt; +{
&gt; +    if (m_session) {
&gt; +        ASSERT(m_session-&gt;cookieJar());
&gt; +        return m_session-&gt;cookieJar();
&gt; +    }
&gt; +
&gt; +    if (!m_cookieStorage) {
&gt; +        m_cookieStorage = adoptGRef(soup_cookie_jar_new());
&gt; +        soup_cookie_jar_set_accept_policy(m_cookieStorage.get(), SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY);
&gt; +    }
&gt; +    return m_cookieStorage.get();
&gt;  }

What? What is the advantage of having the NetworkStorageSession and SoupNetworkSession store separate pointers to the SoupCookieJar? It looks like you intentionally allow a SoupNetworkSession to &quot;override&quot; the SoupCookieJar of the NetworkStorageSession. Why is that?

This has a serious disadvantage that you have to create a SoupCookieJar in two different places, and now have the default accept policy hardcoded in two different places. If you really want to do this, then you should introduce some global defaultCookieAcceptPolicy() function somewhere that returns SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY. But even avoiding that problem, I don&apos;t understand why you&apos;ve done this. That the implementation of what should be a simple const getter function is so convoluted should be a warning sign.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266433</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-13 00:16:45 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 298670 [details]
&gt; Try to fix EFL build
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=298670&amp;action=review
&gt; 
&gt; I have a couple questions.
&gt; 
&gt; Also, please look at bug #166029.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        NetworkStorageSession and removing all create() methods from SoupNetworkSession. This patch also removes the
&gt; &gt; +        default SoupNetworkSession in favor of using the default NetworkStorageSession.
&gt; 
&gt; That&apos;s a big change to hide in a patch named &quot;Simplify cookie storage
&gt; handling&quot;. Then again, I&apos;m probably not one to complain, having just tried
&gt; to sneak WebKitSecurityOrigin into a notifications patch... but consider
&gt; landing in two parts if you have time.

I tried to do it separately at first, but I ended up doing it together because it was not that easy. I don&apos;t think it&apos;s such a big change, though, we currently have two ways to get the default soup session, and this is removing one of them. So, it&apos;s indeed a simplification.

&gt; But I&apos;m curious: what was the motivation for this change?

Simplification and avoid misusing the SoupNetworkSession::defaultSession() when you don&apos;t really want the default, but the current session one.

Same happens for the cookies, we have default cookies storage in different places, you can use soupCookieJar() or SoupNetworkSession::defaultSession().cookieJar(). That&apos;s quite confusing, and it&apos;s not exactly the same thing.

&gt; &gt; Source/WebCore/ChangeLog:41
&gt; &gt; +        (WebCore::NetworkStorageSession::cookieStorage): Return the cookie sotrage from the SoupNetworkSession if we
&gt; 
&gt; sotrage -&gt; storage
&gt; 
&gt; &gt; Source/WebCore/platform/network/soup/DNSSoup.cpp:82
&gt; &gt; -    g_object_get(SoupNetworkSession::defaultSession().soupSession(), &quot;proxy-resolver&quot;, &amp;resolver.outPtr(), nullptr);
&gt; &gt; +    g_object_get(NetworkStorageSession::defaultStorageSession().soupNetworkSession().soupSession(), &quot;proxy-resolver&quot;, &amp;resolver.outPtr(), nullptr);
&gt; 
&gt; Shame it&apos;s a lot more typing to get the SoupNetworkSession for the default
&gt; NetworkStorageSession than it was to just get the default
&gt; SoupNetworkSession. Hence why I&apos;m curious to know your reasoning for
&gt; changing this.

This is not a matter of typing, that&apos;s not what i wanted to simplify, but if that&apos;s a problem we can always add a convenient getter in NetworkStorageSession to the the SoupSession directly.

Again the reasoning is to have only one way to get the default session, and it&apos;s from the NetworkStorageSession. The same for the cookie storage.

&gt; &gt; Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp:110
&gt; &gt; +SoupCookieJar* NetworkStorageSession::cookieStorage() const
&gt; &gt; +{
&gt; &gt; +    if (m_session) {
&gt; &gt; +        ASSERT(m_session-&gt;cookieJar());
&gt; &gt; +        return m_session-&gt;cookieJar();
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    if (!m_cookieStorage) {
&gt; &gt; +        m_cookieStorage = adoptGRef(soup_cookie_jar_new());
&gt; &gt; +        soup_cookie_jar_set_accept_policy(m_cookieStorage.get(), SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY);
&gt; &gt; +    }
&gt; &gt; +    return m_cookieStorage.get();
&gt; &gt;  }
&gt; 
&gt; What? What is the advantage of having the NetworkStorageSession and
&gt; SoupNetworkSession store separate pointers to the SoupCookieJar? It looks
&gt; like you intentionally allow a SoupNetworkSession to &quot;override&quot; the
&gt; SoupCookieJar of the NetworkStorageSession. Why is that?

Note that the behavior hasn&apos;t changed here, except for one thing. In current code we have:

soupCookieJar() -&gt; The default shared cookie storage
SoupNetworkSession::defaultSession() -&gt; The default shared cookie storage

It&apos;s the same, this is what the current code does:

SoupNetworkSession::defaultSession().setCookieJar(jar.get());
WebCore::setSoupCookieJar(jar.get());

So, it indeed has to be set twice. The patch is doing the opposite, it makes NetworkStorageSession::cookieStorage() the only way to get the cookie jar. Of course you can use SoupNetworkSession::cookieJar(), but you know that&apos;s the jar used by that particular soup session. 

Note that the default NetworkStorageSession is always created without a SoupNetworkSession, which is specially interesting in the web process because most of the times we don&apos;t even need a soup session at all there. If you ask for the cookie storage of the default NetworkStorageSession we don&apos;t need to have a default SoupNetworkSession at all, the same way it happens with current code when you call soupCookieJar(). And the only difference in behavior is that now the default SoupNetworkSession is created on demand when asked to the default NetworkStorageSession and the default cookie storage is set in that case, but only stored in NetworkStorageSession (of course the feature is set in the soup session). It&apos;s true that for every session, if the cookie storage is asked before the soup session is created, when the soup session is created we have two references of the cookie jar, we could probably clear the NetworkStorageSession one in that case. That can only happen for the default session, all others are created with a SoupNetworkSession.

&gt; This has a serious disadvantage that you have to create a SoupCookieJar in
&gt; two different places, and now have the default accept policy hardcoded in
&gt; two different places. If you really want to do this, then you should
&gt; introduce some global defaultCookieAcceptPolicy() function somewhere that
&gt; returns SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY. But even avoiding that
&gt; problem, I don&apos;t understand why you&apos;ve done this. That the implementation of
&gt; what should be a simple const getter function is so convoluted should be a
&gt; warning sign.

Again, no change here. In current code there are 2 places where a cookie jar is set and default policy is hardcoded:

soupCookieJar()
createPrivateBrowsingCookieJar()

We have 3 different create methods for SoupNetworkSession where the only difference is the cookie jar passed to the constructor, using createPrivateBrowsingCookieJar() which is confusing because it&apos;s exactly the same as the shared one, the cookie jar itself has nothing of private. So, this is simplified in this patch by removing all create() methods, and simply allowing a nullptr jar in the constructor, meaning don&apos;t use the given one (the shared one normally), but create your own.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266435</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-13 00:26:12 -0800</bug_when>
    <thetext>Committed r210729: &lt;http://trac.webkit.org/changeset/210729&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266445</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-01-13 06:30:18 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Note that the default NetworkStorageSession is always created without a
&gt; SoupNetworkSession, which is specially interesting in the web process
&gt; because most of the times we don&apos;t even need a soup session at all there. If
&gt; you ask for the cookie storage of the default NetworkStorageSession we don&apos;t
&gt; need to have a default SoupNetworkSession at all, the same way it happens
&gt; with current code when you call soupCookieJar(). And the only difference in
&gt; behavior is that now the default SoupNetworkSession is created on demand
&gt; when asked to the default NetworkStorageSession and the default cookie
&gt; storage is set in that case, but only stored in NetworkStorageSession (of
&gt; course the feature is set in the soup session).

OK, that makes sense to me now. The problem I see here is that nothing prevents you from accidentally creating a SoupNetworkSession in the web process or UI process. Indeed, it seems easier than before because just calling NetworkStorageSession::soupNetworkSession has the effect of creating a new SoupNetworkSession. Is there some time when a SoupSession really is needed in the web process? If so, we should add a FIXME to change that, because it prevents future sandboxing. If not, can you add an assertion to ensure NetworkStorageSession::soupNetworkSession is only ever called from the network process?

&gt; It&apos;s true that for every
&gt; session, if the cookie storage is asked before the soup session is created,
&gt; when the soup session is created we have two references of the cookie jar,
&gt; we could probably clear the NetworkStorageSession one in that case. That can
&gt; only happen for the default session, all others are created with a
&gt; SoupNetworkSession.

OK, I think you should indeed clear the NetworkStorageSession jar and have it return the SoupNetworkSession jar instead. Even if it&apos;s the same thing, that would make the code clearer and more robust.

&gt; We have 3 different create methods for SoupNetworkSession where the only
&gt; difference is the cookie jar passed to the constructor, using
&gt; createPrivateBrowsingCookieJar() which is confusing because it&apos;s exactly the
&gt; same as the shared one, the cookie jar itself has nothing of private. So,
&gt; this is simplified in this patch by removing all create() methods, and
&gt; simply allowing a nullptr jar in the constructor, meaning don&apos;t use the
&gt; given one (the shared one normally), but create your own.

I think you should still add some function that returns SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY and use it in the different places. That was the default setting can be changed at just one point if we want to change it in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266447</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-13 06:43:32 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; Note that the default NetworkStorageSession is always created without a
&gt; &gt; SoupNetworkSession, which is specially interesting in the web process
&gt; &gt; because most of the times we don&apos;t even need a soup session at all there. If
&gt; &gt; you ask for the cookie storage of the default NetworkStorageSession we don&apos;t
&gt; &gt; need to have a default SoupNetworkSession at all, the same way it happens
&gt; &gt; with current code when you call soupCookieJar(). And the only difference in
&gt; &gt; behavior is that now the default SoupNetworkSession is created on demand
&gt; &gt; when asked to the default NetworkStorageSession and the default cookie
&gt; &gt; storage is set in that case, but only stored in NetworkStorageSession (of
&gt; &gt; course the feature is set in the soup session).
&gt; 
&gt; OK, that makes sense to me now. The problem I see here is that nothing
&gt; prevents you from accidentally creating a SoupNetworkSession in the web
&gt; process or UI process. Indeed, it seems easier than before because just
&gt; calling NetworkStorageSession::soupNetworkSession has the effect of creating
&gt; a new SoupNetworkSession. Is there some time when a SoupSession really is
&gt; needed in the web process? If so, we should add a FIXME to change that,
&gt; because it prevents future sandboxing. If not, can you add an assertion to
&gt; ensure NetworkStorageSession::soupNetworkSession is only ever called from
&gt; the network process?

Nothing prevents you from calling SoupNetworkSession::defaultSession() from any process. Unfortunately we haven&apos;t moved all the network to the network process yet, we still download the appcache manifest in the web process for example. We also use ResourceHandle to downloads fragments of HLS streams.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266506</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-01-13 10:20:41 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; It&apos;s true that for every
&gt; &gt; session, if the cookie storage is asked before the soup session is created,
&gt; &gt; when the soup session is created we have two references of the cookie jar,
&gt; &gt; we could probably clear the NetworkStorageSession one in that case. That can
&gt; &gt; only happen for the default session, all others are created with a
&gt; &gt; SoupNetworkSession.
&gt; 
&gt; OK, I think you should indeed clear the NetworkStorageSession jar and have
&gt; it return the SoupNetworkSession jar instead. Even if it&apos;s the same thing,
&gt; that would make the code clearer and more robust.

Um, I see the current code already returns the SoupNetworkSession&apos;s pointer to the jar. I think it should also clear the NetworkStorageSession&apos;s pointer to the jar, for clarity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266979</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-01-15 10:58:31 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Um, I see the current code already returns the SoupNetworkSession&apos;s pointer
&gt; to the jar. I think it should also clear the NetworkStorageSession&apos;s pointer
&gt; to the jar, for clarity.

Um, that&apos;s what it does. I&apos;m dumb? OK then.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298668</attachid>
            <date>2017-01-12 04:02:16 -0800</date>
            <delta_ts>2017-01-12 05:16:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-soup-cookies.diff</filename>
            <type>text/plain</type>
            <size>34348</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzMWMxNTQ0MGUyOC4uZjc3ZDM0MjUwMTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MiBAQAorMjAxNy0wMS0xMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIFNpbXBsaWZ5IGNvb2tpZSBzdG9yYWdlIGhhbmRs
aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY5
NjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBj
dXJyZW50bHkgaGF2ZSBhIGdsb2JhbCBjb29raWUgc3RvcmFnZSwgYW5kIHNldmVyYWwgY3JlYXRl
KCkgbWV0aG9kcyBpbiBTb3VwTmV0d29ya1Nlc3Npb24gdG8gY3JlYXRlIHNlc3Npb25zCisgICAg
ICAgIHdpdGggZGlmZmVyZW50IGNvb2tpZSBqYXJzLiBUaGlzIGNvdWxkIGJlIHNpbXBsaWZpZWQg
YnkgbW92aW5nIHRoZSBjb29raWUgc3RvcmFnZSBoYW5kbGluZyB0bworICAgICAgICBOZXR3b3Jr
U3RvcmFnZVNlc3Npb24gYW5kIHJlbW92aW5nIGFsbCBjcmVhdGUoKSBtZXRob2RzIGZyb20gU291
cE5ldHdvcmtTZXNzaW9uLiBUaGlzIHBhdGNoIGFsc28gcmVtb3ZlcyB0aGUKKyAgICAgICAgZGVm
YXVsdCBTb3VwTmV0d29ya1Nlc3Npb24gaW4gZmF2b3Igb2YgdXNpbmcgdGhlIGRlZmF1bHQgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9OZXR3b3Jr
U3RvcmFnZVNlc3Npb24uaDogQWRkIGEgZGVmYXVsdCBjb29raWUgc3RvcmFnZSB0byBiZSB1c2Vk
IHdoZW4gdGhlCisgICAgICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiBkb2Vzbid0IGhhdmUgYSBw
bGF0Zm9ybSBzb3VwIHNlc3Npb24uCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nv
b2tpZUphclNvdXAuY3BwOiBSZW1vdmUgdGhlIGdsb2JhbCBjb29raWUgc3RvcmFnZSBoYW5kbGlu
Zy4KKyAgICAgICAgKFdlYkNvcmU6OnNldENvb2tpZXNGcm9tRE9NKTogVXNlIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6Y29va2llU3RvcmFnZSgpIGluc3RlYWQuCisgICAgICAgIChXZWJDb3JlOjpj
b29raWVzRm9yU2Vzc2lvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0VuYWJs
ZWQpOiBDaGVjayB0aGUgcG9saWN5IGluc3RlYWQgbGlrZSBhbGwgb3RoZXIgcG9ydHMgZG8sIHNp
bmNlIG5vdyB3ZSB3aWxsIGFsd2F5cyBoYXZlIGEKKyAgICAgICAgZGVmYXVsdCBzaGFyZWQgY29v
a2llIGphci4KKyAgICAgICAgKFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMpOiBVc2UgTmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpjb29raWVTdG9yYWdlKCkgaW5zdGVhZC4KKyAgICAgICAgKFdlYkNvcmU6
OmRlbGV0ZUNvb2tpZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6YWRkQ29va2llKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6ZGVsZXRlQWxsQ29va2llcyk6IERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVN0b3JhZ2VTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNvdXBDb29raWVzQ2hhbmdlZCk6IFVzZSB0aGUgY29va2llIHN0b3JhZ2UgZnJvbSB0aGUg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS4KKyAgICAgICAg
KFdlYkNvcmU6OnN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6c3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMpOiBEaXR0by4KKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TU291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpETlNS
ZXNvbHZlUXVldWU6OnVwZGF0ZUlzVXNpbmdQcm94eSk6IEdldCB0aGUgU291cFNlc3Npb24gZnJv
bSB0aGUgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS4KKyAg
ICAgICAgKFdlYkNvcmU6OkROU1Jlc29sdmVRdWV1ZTo6cGxhdGZvcm1SZXNvbHZlKTogRGl0dG8u
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNv
dXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKTogQ3JlYXRlIGEgbmV3IFNvdXBOZXR3b3Jr
U2Vzc2lvbiB3aXRob3V0CisgICAgICAgIHByb3ZpZGluZyBhIGNvb2tpZSBzdG9yYWdlIHRvIGVu
c3VyZSBpdCBjcmVhdGVzIGl0cyBvd24gcHJpdmF0ZSBvbmUuCisgICAgICAgIChXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb246OnN3aXRjaFRvTmV3VGVzdGluZ1Nlc3Npb24pOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c291cE5ldHdvcmtTZXNz
aW9uKTogQ3JlYXRlIHRoZSBTb3VwTmV0d29ya1Nlc3Npb24gb24gZGVtYW5kIHBhc3NpbmcgdGhl
IGdsb2JhbAorICAgICAgICBzaGFyZWQgY29va2llIHN0b3JhZ2UuCisgICAgICAgIChXZWJDb3Jl
OjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVN0b3JhZ2UpOiBSZXR1cm4gdGhlIGNvb2tp
ZSBzb3RyYWdlIGZyb20gdGhlIFNvdXBOZXR3b3JrU2Vzc2lvbiBpZiB3ZQorICAgICAgICBoYXZl
IG9uZSwgb3RoZXJ3aXNlIGNyZWF0ZSB0aGUgZ2xvYmFsIHNoYXJlZCBvbmUgYW5kIHJldHVybiBp
dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNlc3Npb25Gcm9tQ29udGV4dCk6IEdldCB0aGUgU291cFNl
c3Npb24gZnJvbSB0aGUgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Np
b24oKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXBOZXR3b3JrU2Vzc2lvbjo6U291cE5ldHdvcmtT
ZXNzaW9uKTogUmVtb3ZlIGFsbCBjcmVhdGUgbWV0aG9kcyBhbmQgdGhlIHVudXNlZCBjb25zdHJ1
Y3RvciB0aGF0CisgICAgICAgIHJlY2VpdmVzIGEgU291cFNlc3Npb24uIEFsbG93IHRvIHBhc3Mg
YSBudWxscHRyIFNvdXBDb29raWVKYXIgYW5kIGNyZWF0ZSBvbmUgaW4gc3VjaCBjYXNlLgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uaDoKKwogMjAx
Ny0wMS0xMSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbTWVkaWFTdHJlYW0sIE1hY10gUmVuZGVyIG1lZGlhIHN0cmVhbSBhdWRpbyBidWZmZXJzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdl
U2Vzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFn
ZVNlc3Npb24uaAppbmRleCBjZjFmNTcxNzM1NC4uYjEyMDFmYTIzMGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb24u
aApAQCAtMzcsNiArMzcsNyBAQAogI2lmIFVTRShTT1VQKQogI2luY2x1ZGUgPHd0Zi9GdW5jdGlv
bi5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KK3R5cGVkZWYgc3RydWN0IF9Tb3Vw
Q29va2llSmFyIFNvdXBDb29raWVKYXI7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNjcsMTAgKzY4LDExIEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSgpIGNvbnN0OwogICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVk
KGJvb2wpOwogI2VsaWYgVVNFKFNPVVApCi0gICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFNlc3Np
b25JRCwgc3RkOjp1bmlxdWVfcHRyPFNvdXBOZXR3b3JrU2Vzc2lvbj4pOworICAgIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbihTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxTb3VwTmV0d29ya1Nlc3Np
b24+JiYpOwogICAgIH5OZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsKIAogICAgIFNvdXBOZXR3b3Jr
U2Vzc2lvbiYgc291cE5ldHdvcmtTZXNzaW9uKCkgY29uc3Q7CisgICAgU291cENvb2tpZUphciog
Y29va2llU3RvcmFnZSgpIGNvbnN0OwogICAgIHZvaWQgZ2V0Q3JlZGVudGlhbEZyb21QZXJzaXN0
ZW50U3RvcmFnZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmLCBGdW5jdGlvbjx2b2lkIChDcmVkZW50
aWFsJiYpPiBjb21wbGV0aW9uSGFuZGxlcik7CiAgICAgdm9pZCBzYXZlQ3JlZGVudGlhbFRvUGVy
c2lzdGVudFN0b3JhZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJiwgY29uc3QgQ3JlZGVudGlhbCYp
OwogI2Vsc2UKQEAgLTg3LDcgKzg5LDggQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkg
fHwgVVNFKENGVVJMQ09OTkVDVElPTikKICAgICBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lv
blJlZj4gbV9wbGF0Zm9ybVNlc3Npb247CiAjZWxpZiBVU0UoU09VUCkKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8U291cE5ldHdvcmtTZXNzaW9uPiBtX3Nlc3Npb247CisgICAgbXV0YWJsZSBzdGQ6OnVu
aXF1ZV9wdHI8U291cE5ldHdvcmtTZXNzaW9uPiBtX3Nlc3Npb247CisgICAgbXV0YWJsZSBHUmVm
UHRyPFNvdXBDb29raWVKYXI+IG1fY29va2llU3RvcmFnZTsKICNpZiBVU0UoTElCU0VDUkVUKQog
ICAgIEZ1bmN0aW9uPHZvaWQgKENyZWRlbnRpYWwmJik+IG1fcGVyc2lzZW50U3RvcmFnZUNvbXBs
ZXRpb25IYW5kbGVyOwogICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX3BlcnNpc2VudFN0b3Jh
Z2VDYW5jZWxsYWJsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9Db29raWVKYXJTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9Db29raWVKYXJTb3VwLmNwcAppbmRleCA1ZDJlYzJiOWI3Yy4uNjQxNDkzZmJiZmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVK
YXJTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29v
a2llSmFyU291cC5jcHAKQEAgLTIyLDggKzIyLDYgQEAKIAogI2lmIFVTRShTT1VQKQogCi0jaW5j
bHVkZSAiQ29va2llSmFyU291cC5oIgotCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAi
R1VuaXF1ZVB0clNvdXAuaCIKICNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZVNlc3Npb24uaCIKQEAg
LTM3LDQyICszNSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFNvdXBDb29r
aWVKYXIqIGNvb2tpZUphckZvclNlc3Npb24oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBz
ZXNzaW9uKQotewotICAgIHJldHVybiBzZXNzaW9uLnNvdXBOZXR3b3JrU2Vzc2lvbigpLmNvb2tp
ZUphcigpOwotfQotCi1zdGF0aWMgR1JlZlB0cjxTb3VwQ29va2llSmFyPiYgZGVmYXVsdENvb2tp
ZUphcigpCi17Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEdSZWZQdHI8U291
cENvb2tpZUphcj4sIGNvb2tpZUphciwgKCkpOwotICAgIHJldHVybiBjb29raWVKYXI7Ci19Ci0K
LVNvdXBDb29raWVKYXIqIHNvdXBDb29raWVKYXIoKQotewotICAgIGlmIChHUmVmUHRyPFNvdXBD
b29raWVKYXI+JiBqYXIgPSBkZWZhdWx0Q29va2llSmFyKCkpCi0gICAgICAgIHJldHVybiBqYXIu
Z2V0KCk7Ci0KLSAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBzb3VwX2Nvb2tpZV9qYXJfbmV3KCk7
Ci0gICAgc291cF9jb29raWVfamFyX3NldF9hY2NlcHRfcG9saWN5KGphciwgU09VUF9DT09LSUVf
SkFSX0FDQ0VQVF9OT19USElSRF9QQVJUWSk7Ci0gICAgc2V0U291cENvb2tpZUphcihqYXIpOwot
ICAgIHJldHVybiBqYXI7Ci19Ci0KLVNvdXBDb29raWVKYXIqIGNyZWF0ZVByaXZhdGVCcm93c2lu
Z0Nvb2tpZUphcigpCi17Ci0gICAgU291cENvb2tpZUphciogamFyID0gc291cF9jb29raWVfamFy
X25ldygpOwotCi0gICAgc291cF9jb29raWVfamFyX3NldF9hY2NlcHRfcG9saWN5KGphciwgU09V
UF9DT09LSUVfSkFSX0FDQ0VQVF9OT19USElSRF9QQVJUWSk7Ci0KLSAgICByZXR1cm4gamFyOwot
fQotCi12b2lkIHNldFNvdXBDb29raWVKYXIoU291cENvb2tpZUphciogamFyKQotewotICAgIGRl
ZmF1bHRDb29raWVKYXIoKSA9IGphcjsKLX0KLQogc3RhdGljIGlubGluZSBib29sIGh0dHBPbmx5
Q29va2llRXhpc3RzKGNvbnN0IEdTTGlzdCogY29va2llcywgY29uc3QgZ2NoYXIqIG5hbWUsIGNv
bnN0IGdjaGFyKiBwYXRoKQogewogICAgIGZvciAoY29uc3QgR1NMaXN0KiBpdGVyID0gY29va2ll
czsgaXRlcjsgaXRlciA9IGdfc2xpc3RfbmV4dChpdGVyKSkgewpAQCAtODksOSArNTEsNyBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgaHR0cE9ubHlDb29raWVFeGlzdHMoY29uc3QgR1NMaXN0KiBjb29r
aWVzLCBjb25zdCBnY2hhciogbmFtZQogCiB2b2lkIHNldENvb2tpZXNGcm9tRE9NKGNvbnN0IE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25z
dCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBTb3VwQ29va2llSmFyKiBq
YXIgPSBjb29raWVKYXJGb3JTZXNzaW9uKHNlc3Npb24pOwotICAgIGlmICghamFyKQotICAgICAg
ICByZXR1cm47CisgICAgU291cENvb2tpZUphciogamFyID0gc2Vzc2lvbi5jb29raWVTdG9yYWdl
KCk7CiAKICAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IG9yaWdpbiA9IHVybC5jcmVhdGVTb3VwVVJJ
KCk7CiAgICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiBmaXJzdFBhcnR5VVJJID0gZmlyc3RQYXJ0eS5j
cmVhdGVTb3VwVVJJKCk7CkBAIC0xMjMsMTIgKzgzLDggQEAgdm9pZCBzZXRDb29raWVzRnJvbURP
TShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQ
YXIKIAogc3RhdGljIFN0cmluZyBjb29raWVzRm9yU2Vzc2lvbihjb25zdCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgdXJsLCBib29sIGZvckhUVFBIZWFkZXIpCiB7
Ci0gICAgU291cENvb2tpZUphciogamFyID0gY29va2llSmFyRm9yU2Vzc2lvbihzZXNzaW9uKTsK
LSAgICBpZiAoIWphcikKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCiAgICAgR1VuaXF1ZVB0
cjxTb3VwVVJJPiB1cmkgPSB1cmwuY3JlYXRlU291cFVSSSgpOwotICAgIEdVbmlxdWVQdHI8Y2hh
cj4gY29va2llcyhzb3VwX2Nvb2tpZV9qYXJfZ2V0X2Nvb2tpZXMoamFyLCB1cmkuZ2V0KCksIGZv
ckhUVFBIZWFkZXIpKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGNvb2tpZXMoc291cF9jb29raWVf
amFyX2dldF9jb29raWVzKHNlc3Npb24uY29va2llU3RvcmFnZSgpLCB1cmkuZ2V0KCksIGZvckhU
VFBIZWFkZXIpKTsKICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChjb29raWVzLmdldCgpKTsK
IH0KIApAQCAtMTQ0LDE4ICsxMDAsMTUgQEAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QKIAogYm9v
bCBjb29raWVzRW5hYmxlZChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNv
bnN0IFVSTCYgLypmaXJzdFBhcnR5Ki8sIGNvbnN0IFVSTCYgLyp1cmwqLykKIHsKLSAgICByZXR1
cm4gISFjb29raWVKYXJGb3JTZXNzaW9uKHNlc3Npb24pOworICAgIGF1dG8gcG9saWN5ID0gc291
cF9jb29raWVfamFyX2dldF9hY2NlcHRfcG9saWN5KHNlc3Npb24uY29va2llU3RvcmFnZSgpKTsK
KyAgICByZXR1cm4gcG9saWN5ID09IFNPVVBfQ09PS0lFX0pBUl9BQ0NFUFRfQUxXQVlTIHx8IHBv
bGljeSA9PSBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX05PX1RISVJEX1BBUlRZOwogfQogCiBib29s
IGdldFJhd0Nvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25z
dCBVUkwmIC8qZmlyc3RQYXJ0eSovLCBjb25zdCBVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJh
d0Nvb2tpZXMpCiB7CiAgICAgcmF3Q29va2llcy5jbGVhcigpOwotICAgIFNvdXBDb29raWVKYXIq
IGphciA9IGNvb2tpZUphckZvclNlc3Npb24oc2Vzc2lvbik7Ci0gICAgaWYgKCFqYXIpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQogICAgIEdVbmlxdWVQdHI8U291cFVSST4gdXJpID0gdXJsLmNy
ZWF0ZVNvdXBVUkkoKTsKLSAgICBHVW5pcXVlUHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nvb2tp
ZV9qYXJfZ2V0X2Nvb2tpZV9saXN0KGphciwgdXJpLmdldCgpLCBUUlVFKSk7CisgICAgR1VuaXF1
ZVB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFyX2dldF9jb29raWVfbGlzdChzZXNz
aW9uLmNvb2tpZVN0b3JhZ2UoKSwgdXJpLmdldCgpLCBUUlVFKSk7CiAgICAgaWYgKCFjb29raWVz
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE3Miw5ICsxMjUsNyBAQCBib29sIGdldFJh
d0Nvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwm
IC8qZmlyc3RQYXJ0eQogCiB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBOZXR3b3JrU3RvcmFnZVNl
c3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0g
ICAgU291cENvb2tpZUphciogamFyID0gY29va2llSmFyRm9yU2Vzc2lvbihzZXNzaW9uKTsKLSAg
ICBpZiAoIWphcikKLSAgICAgICAgcmV0dXJuOworICAgIFNvdXBDb29raWVKYXIqIGphciA9IHNl
c3Npb24uY29va2llU3RvcmFnZSgpOwogCiAgICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiB1cmkgPSB1
cmwuY3JlYXRlU291cFVSSSgpOwogICAgIEdVbmlxdWVQdHI8R1NMaXN0PiBjb29raWVzKHNvdXBf
Y29va2llX2phcl9nZXRfY29va2llX2xpc3QoamFyLCB1cmkuZ2V0KCksIFRSVUUpKTsKQEAgLTIx
NywxMyArMTY4LDEyIEBAIHN0YXRpYyBTb3VwQ29va2llKiB0b1NvdXBDb29raWUoY29uc3QgQ29v
a2llJiBjb29raWUpCiAKIHZvaWQgYWRkQ29va2llKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lv
biYgc2Vzc2lvbiwgY29uc3QgVVJMJiwgY29uc3QgQ29va2llJiBjb29raWUpCiB7Ci0gICAgc291
cF9jb29raWVfamFyX2FkZF9jb29raWUoY29va2llSmFyRm9yU2Vzc2lvbihzZXNzaW9uKSwgdG9T
b3VwQ29va2llKGNvb2tpZSkpOworICAgIHNvdXBfY29va2llX2phcl9hZGRfY29va2llKHNlc3Np
b24uY29va2llU3RvcmFnZSgpLCB0b1NvdXBDb29raWUoY29va2llKSk7CiB9CiAKIHZvaWQgZ2V0
SG9zdG5hbWVzV2l0aENvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9u
LCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBTb3VwQ29va2llSmFyKiBjb29r
aWVKYXIgPSBjb29raWVKYXJGb3JTZXNzaW9uKHNlc3Npb24pOwotICAgIEdVbmlxdWVQdHI8R1NM
aXN0PiBjb29raWVzKHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVKYXIpKTsKKyAg
ICBHVW5pcXVlUHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMo
c2Vzc2lvbi5jb29raWVTdG9yYWdlKCkpKTsKICAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tp
ZXMuZ2V0KCk7IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsKICAgICAgICAgU291
cENvb2tpZSogY29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpOwog
ICAgICAgICBpZiAoY29va2llLT5kb21haW4pCkBAIC0yMzQsOSArMTg0LDExIEBAIHZvaWQgZ2V0
SG9zdG5hbWVzV2l0aENvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9u
LCBIYXNoU2V0PFN0cmluCiAKIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhjb25zdCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBob3N0
bmFtZXMpCiB7CisgICAgU291cENvb2tpZUphciogY29va2llSmFyID0gc2Vzc2lvbi5jb29raWVT
dG9yYWdlKCk7CisKICAgICBmb3IgKGNvbnN0IGF1dG8mIGhvc3RuYW1lIDogaG9zdG5hbWVzKSB7
CiAgICAgICAgIENTdHJpbmcgaG9zdE5hbWVTdHJpbmcgPSBob3N0bmFtZS51dGY4KCk7Ci0gICAg
ICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZUphciA9IGNvb2tpZUphckZvclNlc3Npb24oc2Vzc2lv
bik7CisKICAgICAgICAgR1VuaXF1ZVB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFy
X2FsbF9jb29raWVzKGNvb2tpZUphcikpOwogICAgICAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNv
b2tpZXMuZ2V0KCk7IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsKICAgICAgICAg
ICAgIFNvdXBDb29raWUqIGNvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5k
YXRhKTsKQEAgLTI0OSw3ICsyMDEsNyBAQCB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMo
Y29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBWZWN0bwogCiB2b2lk
IGRlbGV0ZUFsbENvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uKQog
ewotICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZUphciA9IGNvb2tpZUphckZvclNlc3Npb24oc2Vz
c2lvbik7CisgICAgU291cENvb2tpZUphciogY29va2llSmFyID0gc2Vzc2lvbi5jb29raWVTdG9y
YWdlKCk7CiAgICAgR1VuaXF1ZVB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFyX2Fs
bF9jb29raWVzKGNvb2tpZUphcikpOwogICAgIGZvciAoR1NMaXN0KiBpdGVtID0gY29va2llcy5n
ZXQoKTsgaXRlbTsgaXRlbSA9IGdfc2xpc3RfbmV4dChpdGVtKSkgewogICAgICAgICBTb3VwQ29v
a2llKiBjb29raWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291
cC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZkZWMxNGNkZDQuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3Vw
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA4IFhhbiBMb3BleiA8eGFuQGdub21lLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgQ29va2llSmFyU291cF9oCi0jZGVmaW5lIENvb2tpZUph
clNvdXBfaAotCi0jaW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotU291cENvb2tpZUphciogc291cENvb2tpZUphcigpOwotdm9pZCBzZXRTb3VwQ29va2ll
SmFyKFNvdXBDb29raWVKYXIqKTsKLQotU291cENvb2tpZUphciogY3JlYXRlUHJpdmF0ZUJyb3dz
aW5nQ29va2llSmFyKCk7Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU3RvcmFnZVNvdXAuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVN0b3JhZ2VTb3VwLmNwcAppbmRleCBi
YWYwOTdiOWZmYy4uZjQ3ZmVmMDNiNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9Db29raWVTdG9yYWdlU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVN0b3JhZ2VTb3VwLmNwcApAQCAtMjEsMTgg
KzIxLDE2IEBACiAKICNpZiBVU0UoU09VUCkKIAotI2luY2x1ZGUgIkNvb2tpZUphclNvdXAuaCIK
LSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs
dWRlICJOZXR3b3JrU3RvcmFnZVNlc3Npb24uaCIKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgQ29va2llQ2hhbmdlQ2FsbGJhY2tQdHIg
Y29va2llQ2hhbmdlQ2FsbGJhY2s7CiAKLXN0YXRpYyB2b2lkIHNvdXBDb29raWVzQ2hhbmdlZChT
b3VwQ29va2llSmFyKiBqYXIsIFNvdXBDb29raWUqLCBTb3VwQ29va2llKiwgZ3BvaW50ZXIpCitz
dGF0aWMgdm9pZCBzb3VwQ29va2llc0NoYW5nZWQoU291cENvb2tpZUphciogamFyKQogewotICAg
IGlmIChqYXIgIT0gc291cENvb2tpZUphcigpKQorICAgIGlmIChqYXIgIT0gTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVTdG9yYWdlKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBjb29raWVDaGFuZ2VDYWxsYmFjaygpOwogfQpAQCAtNDIsMTMgKzQw
LDEzIEBAIHZvaWQgc3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKENvb2tpZUNoYW5nZUNhbGxi
YWNrUHRyIGNhbGxiYWNrKQogICAgIEFTU0VSVCghY29va2llQ2hhbmdlQ2FsbGJhY2spOwogICAg
IGNvb2tpZUNoYW5nZUNhbGxiYWNrID0gY2FsbGJhY2s7CiAKLSAgICBnX3NpZ25hbF9jb25uZWN0
KHNvdXBDb29raWVKYXIoKSwgImNoYW5nZWQiLCBHX0NBTExCQUNLKHNvdXBDb29raWVzQ2hhbmdl
ZCksIDApOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZh
dWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVTdG9yYWdlKCksICJjaGFuZ2VkIiwgR19DQUxMQkFD
Syhzb3VwQ29va2llc0NoYW5nZWQpLCAwKTsKIH0KIAogdm9pZCBzdG9wT2JzZXJ2aW5nQ29va2ll
Q2hhbmdlcygpCiB7Ci0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHNv
dXBDb29raWVKYXIoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cENvb2tpZXNDaGFuZ2Vk
KSwgMCk7Ci0gICAgY29va2llQ2hhbmdlQ2FsbGJhY2sgPSAwOworICAgIGdfc2lnbmFsX2hhbmRs
ZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9y
YWdlU2Vzc2lvbigpLmNvb2tpZVN0b3JhZ2UoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291
cENvb2tpZXNDaGFuZ2VkKSwgbnVsbHB0cik7CisgICAgY29va2llQ2hhbmdlQ2FsbGJhY2sgPSBu
dWxscHRyOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvRE5TU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvRE5TU291cC5jcHAKaW5kZXggZWNlYWIxNGY5NmYuLjEwMTNlYWE3MDM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TU291cC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1NvdXAuY3BwCkBAIC0zMCw2
ICszMCw3IEBACiAKICNpZiBVU0UoU09VUCkKIAorI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlU2Vz
c2lvbi5oIgogI2luY2x1ZGUgIlNvdXBOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgPGxpYnNv
dXAvc291cC5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC03OCw3ICs3OSw3IEBA
IHN0YXRpYyB2b2lkIHByb3h5UmVzb2x2ZWRGb3JIdHRwc1VyaUNhbGxiYWNrKEdPYmplY3QqIHNv
dXJjZSwgR0FzeW5jUmVzdWx0KiByZXN1CiB2b2lkIEROU1Jlc29sdmVRdWV1ZTo6dXBkYXRlSXNV
c2luZ1Byb3h5KCkKIHsKICAgICBHUmVmUHRyPEdQcm94eVJlc29sdmVyPiByZXNvbHZlcjsKLSAg
ICBnX29iamVjdF9nZXQoU291cE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigpLnNvdXBT
ZXNzaW9uKCksICJwcm94eS1yZXNvbHZlciIsICZyZXNvbHZlci5vdXRQdHIoKSwgbnVsbHB0cik7
CisgICAgZ19vYmplY3RfZ2V0KE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uKCkuc291cE5ldHdvcmtTZXNzaW9uKCkuc291cFNlc3Npb24oKSwgInByb3h5LXJlc29s
dmVyIiwgJnJlc29sdmVyLm91dFB0cigpLCBudWxscHRyKTsKICAgICBBU1NFUlQocmVzb2x2ZXIp
OwogCiAgICAgZ19wcm94eV9yZXNvbHZlcl9sb29rdXBfYXN5bmMocmVzb2x2ZXIuZ2V0KCksICJo
dHRwOi8vZXhhbXBsZS5jb20vIiwgbnVsbHB0ciwgcHJveHlSZXNvbHZlZEZvckh0dHBVcmlDYWxs
YmFjaywgJm1faXNVc2luZ1Byb3h5KTsKQEAgLTk0LDcgKzk1LDcgQEAgdm9pZCBETlNSZXNvbHZl
UXVldWU6OnBsYXRmb3JtUmVzb2x2ZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBzb3VwX3Nlc3Npb25fcHJlZmV0Y2hfZG5zKFNv
dXBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKS5zb3VwU2Vzc2lvbigpLCBob3N0bmFt
ZS51dGY4KCkuZGF0YSgpLCBudWxscHRyLCByZXNvbHZlZENhbGxiYWNrLCBudWxscHRyKTsKKyAg
ICBzb3VwX3Nlc3Npb25fcHJlZmV0Y2hfZG5zKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVs
dFN0b3JhZ2VTZXNzaW9uKCkuc291cE5ldHdvcmtTZXNzaW9uKCkuc291cFNlc3Npb24oKSwgaG9z
dG5hbWUudXRmOCgpLmRhdGEoKSwgbnVsbHB0ciwgcmVzb2x2ZWRDYWxsYmFjaywgbnVsbHB0cik7
CiB9CiAKIHZvaWQgcHJlZmV0Y2hETlMoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3JrU3RvcmFnZVNl
c3Npb25Tb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3
b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcAppbmRleCAxZTA5NTViNGUwZi4uNzE2OTA0YjdhOTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3Jr
U3RvcmFnZVNlc3Npb25Tb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1OZXR3b3JrU3RvcmFnZVNlc3Npb246Ok5ldHdvcmtT
dG9yYWdlU2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8U291cE5l
dHdvcmtTZXNzaW9uPiBzZXNzaW9uKQorTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpOZXR3b3JrU3Rv
cmFnZVNlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPFNvdXBOZXR3
b3JrU2Vzc2lvbj4mJiBzZXNzaW9uKQogICAgIDogbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQogICAg
ICwgbV9zZXNzaW9uKFdURk1vdmUoc2Vzc2lvbikpCiB7CkBAIC03NiwyMCArNzYsMzcgQEAgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdl
U2Vzc2lvbigpCiAKIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjplbnN1cmVQcml2YXRlQnJv
d3NpbmdTZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAg
YXV0byBzZXNzaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrU3RvcmFnZVNlc3Npb24+KHNl
c3Npb25JRCwgU291cE5ldHdvcmtTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9u
KCkpOwogICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCkpOwogICAgIEFTU0VSVCghZ2xvYmFsU2Vzc2lvbk1hcCgpLmNvbnRhaW5zKHNlc3Npb25JRCkp
OwotICAgIGdsb2JhbFNlc3Npb25NYXAoKS5hZGQoc2Vzc2lvbklELCBXVEZNb3ZlKHNlc3Npb24p
KTsKKyAgICBnbG9iYWxTZXNzaW9uTWFwKCkuYWRkKHNlc3Npb25JRCwgc3RkOjptYWtlX3VuaXF1
ZTxOZXR3b3JrU3RvcmFnZVNlc3Npb24+KHNlc3Npb25JRCwgc3RkOjptYWtlX3VuaXF1ZTxTb3Vw
TmV0d29ya1Nlc3Npb24+KCkpKTsKIH0KIAogdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN3
aXRjaFRvTmV3VGVzdGluZ1Nlc3Npb24oKQogewotICAgIGRlZmF1bHRTZXNzaW9uKCkgPSBzdGQ6
Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oU2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCksIFNvdXBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlVGVzdGluZ1Nlc3Npb24oKSk7Cisg
ICAgZGVmYXVsdFNlc3Npb24oKSA9IHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPihTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgc3RkOjptYWtlX3VuaXF1ZTxTb3Vw
TmV0d29ya1Nlc3Npb24+KCkpOworICAgIC8vIEZJWE1FOiBDcmVhdGluZyBhIHRlc3Rpbmcgc2Vz
c2lvbiBpcyBsb3Npbmcgc291cCBzZXNzaW9uIHZhbHVlcyBzZXQgd2hlbiBpbml0aWFsaXppbmcg
dGhlIG5ldHdvcmsgcHJvY2Vzcy4KKyAgICBnX29iamVjdF9zZXQoZGVmYXVsdFNlc3Npb24oKS0+
c291cE5ldHdvcmtTZXNzaW9uKCkuc291cFNlc3Npb24oKSwgImFjY2VwdC1sYW5ndWFnZSIsICJl
bi11cyIsIG51bGxwdHIpOwogfQogCiBTb3VwTmV0d29ya1Nlc3Npb24mIE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6c291cE5ldHdvcmtTZXNzaW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9zZXNz
aW9uID8gKm1fc2Vzc2lvbiA6IFNvdXBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKTsK
KyAgICBpZiAoIW1fc2Vzc2lvbikKKyAgICAgICAgbV9zZXNzaW9uID0gc3RkOjptYWtlX3VuaXF1
ZTxTb3VwTmV0d29ya1Nlc3Npb24+KGNvb2tpZVN0b3JhZ2UoKSk7CisgICAgcmV0dXJuICptX3Nl
c3Npb247Cit9CisKK1NvdXBDb29raWVKYXIqIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2ll
U3RvcmFnZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Vzc2lvbikgeworICAgICAgICBBU1NFUlQo
bV9zZXNzaW9uLT5jb29raWVKYXIoKSk7CisgICAgICAgIHJldHVybiBtX3Nlc3Npb24tPmNvb2tp
ZUphcigpOworICAgIH0KKworICAgIGlmICghbV9jb29raWVTdG9yYWdlKSB7CisgICAgICAgIG1f
Y29va2llU3RvcmFnZSA9IGFkb3B0R1JlZihzb3VwX2Nvb2tpZV9qYXJfbmV3KCkpOworICAgICAg
ICBzb3VwX2Nvb2tpZV9qYXJfc2V0X2FjY2VwdF9wb2xpY3kobV9jb29raWVTdG9yYWdlLmdldCgp
LCBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX05PX1RISVJEX1BBUlRZKTsKKyAgICB9CisgICAgcmV0
dXJuIG1fY29va2llU3RvcmFnZS5nZXQoKTsKIH0KIAogI2lmIFVTRShMSUJTRUNSRVQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5k
bGVTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJj
ZUhhbmRsZVNvdXAuY3BwCmluZGV4IDg4N2E5ZWQ3OTVkLi45NWJhY2U1NzgzNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291
cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNl
SGFuZGxlU291cC5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2lmIFVTRShTT1VQKQogCi0jaW5j
bHVkZSAiQ29va2llSmFyU291cC5oIgogI2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCiAj
aW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkdVbmlxdWVQdHJTb3VwLmgiCkBAIC04
MSw3ICs4MCw3IEBAIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVy
bmFsKCkKIHN0YXRpYyBTb3VwU2Vzc2lvbiogc2Vzc2lvbkZyb21Db250ZXh0KE5ldHdvcmtpbmdD
b250ZXh0KiBjb250ZXh0KQogewogICAgIGlmICghY29udGV4dCB8fCAhY29udGV4dC0+aXNWYWxp
ZCgpKQotICAgICAgICByZXR1cm4gU291cE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigp
LnNvdXBTZXNzaW9uKCk7CisgICAgICAgIHJldHVybiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRl
ZmF1bHRTdG9yYWdlU2Vzc2lvbigpLnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNvdXBTZXNzaW9uKCk7
CiAgICAgcmV0dXJuIGNvbnRleHQtPnN0b3JhZ2VTZXNzaW9uKCkuc291cE5ldHdvcmtTZXNzaW9u
KCkuc291cFNlc3Npb24oKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcAppbmRleCBjMzQ1NTdk
OTdjYy4uMTVhODg2N2JlMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwCkBAIC0zMCw3ICszMCw2
IEBACiAjaW5jbHVkZSAiU291cE5ldHdvcmtTZXNzaW9uLmgiCiAKICNpbmNsdWRlICJBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZS5oIgotI2luY2x1ZGUgIkNvb2tpZUphclNvdXAuaCIKICNpbmNsdWRl
ICJDcnlwdG9EaWdlc3QuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiR1Vu
aXF1ZVB0clNvdXAuaCIKQEAgLTkzLDMxICs5Miw2IEBAIHN0YXRpYyBIYXNoTWFwPFN0cmluZywg
SG9zdFRMU0NlcnRpZmljYXRlU2V0LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBjbGllbnRD
CiAgICAgcmV0dXJuIGNlcnRpZmljYXRlczsKIH0KIAotU291cE5ldHdvcmtTZXNzaW9uJiBTb3Vw
TmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8U291cE5ldHdvcmtTZXNzaW9uPiBuZXR3b3JrU2Vzc2lvbihzb3VwQ29va2llSmFyKCkp
OwotICAgIHJldHVybiBuZXR3b3JrU2Vzc2lvbjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFNvdXBO
ZXR3b3JrU2Vzc2lvbj4gU291cE5ldHdvcmtTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdT
ZXNzaW9uKCkKLXsKLSAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFNvdXBOZXR3b3JrU2Vzc2lv
bj4obmV3IFNvdXBOZXR3b3JrU2Vzc2lvbihzb3VwQ29va2llSmFyKCkpKTsKLX0KLQotc3RkOjp1
bmlxdWVfcHRyPFNvdXBOZXR3b3JrU2Vzc2lvbj4gU291cE5ldHdvcmtTZXNzaW9uOjpjcmVhdGVU
ZXN0aW5nU2Vzc2lvbigpCi17Ci0gICAgYXV0byBjb29raWVKYXIgPSBhZG9wdEdSZWYoY3JlYXRl
UHJpdmF0ZUJyb3dzaW5nQ29va2llSmFyKCkpOwotICAgIGF1dG8gbmV3U291cFNlc3Npb24gPSBz
dGQ6OnVuaXF1ZV9wdHI8U291cE5ldHdvcmtTZXNzaW9uPihuZXcgU291cE5ldHdvcmtTZXNzaW9u
KGNvb2tpZUphci5nZXQoKSkpOwotICAgIC8vIEZJWE1FOiBDcmVhdGluZyBhIHRlc3Rpbmcgc2Vz
c2lvbiBpcyBsb3Npbmcgc291cCBzZXNzaW9uIHZhbHVlcyBzZXQgd2hlbiBpbml0aWFsaXppbmcg
dGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBnX29iamVjdF9zZXQobmV3U291cFNlc3Npb24tPnNv
dXBTZXNzaW9uKCksICJhY2NlcHQtbGFuZ3VhZ2UiLCAiZW4tdXMiLCBudWxscHRyKTsKLSAgICBy
ZXR1cm4gbmV3U291cFNlc3Npb247Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxTb3VwTmV0d29ya1Nl
c3Npb24+IFNvdXBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlRm9yU291cFNlc3Npb24oU291cFNlc3Np
b24qIHNvdXBTZXNzaW9uKQotewotICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8U291cE5ldHdv
cmtTZXNzaW9uPihuZXcgU291cE5ldHdvcmtTZXNzaW9uKHNvdXBTZXNzaW9uKSk7Ci19Ci0KIHN0
YXRpYyB2b2lkIGF1dGhlbnRpY2F0ZUNhbGxiYWNrKFNvdXBTZXNzaW9uKiwgU291cE1lc3NhZ2Uq
IHNvdXBNZXNzYWdlLCBTb3VwQXV0aCogc291cEF1dGgsIGdib29sZWFuIHJldHJ5aW5nKQogewog
ICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VI
YW5kbGUqPihnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChzb3VwTWVzc2FnZSksICJoYW5kbGUi
KSk7CkBAIC0xNDYsMTMgKzEyMCwxOSBAQCBTb3VwTmV0d29ya1Nlc3Npb246OlNvdXBOZXR3b3Jr
U2Vzc2lvbihTb3VwQ29va2llSmFyKiBjb29raWVKYXIpCiAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhDb25uZWN0aW9ucyA9IDE3OwogICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4Q29ubmVjdGlvbnNQ
ZXJIb3N0ID0gNjsKIAorICAgIEdSZWZQdHI8U291cENvb2tpZUphcj4gamFyID0gY29va2llSmFy
OworICAgIGlmICghamFyKSB7CisgICAgICAgIGphciA9IGFkb3B0R1JlZihzb3VwX2Nvb2tpZV9q
YXJfbmV3KCkpOworICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfc2V0X2FjY2VwdF9wb2xpY3koamFy
LmdldCgpLCBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX05PX1RISVJEX1BBUlRZKTsKKyAgICB9CisK
ICAgICBnX29iamVjdF9zZXQobV9zb3VwU2Vzc2lvbi5nZXQoKSwKICAgICAgICAgU09VUF9TRVNT
SU9OX01BWF9DT05OUywgbWF4Q29ubmVjdGlvbnMsCiAgICAgICAgIFNPVVBfU0VTU0lPTl9NQVhf
Q09OTlNfUEVSX0hPU1QsIG1heENvbm5lY3Rpb25zUGVySG9zdCwKICAgICAgICAgU09VUF9TRVNT
SU9OX0FERF9GRUFUVVJFX0JZX1RZUEUsIFNPVVBfVFlQRV9DT05URU5UX0RFQ09ERVIsCiAgICAg
ICAgIFNPVVBfU0VTU0lPTl9BRERfRkVBVFVSRV9CWV9UWVBFLCBTT1VQX1RZUEVfQ09OVEVOVF9T
TklGRkVSLAogICAgICAgICBTT1VQX1NFU1NJT05fQUREX0ZFQVRVUkVfQllfVFlQRSwgU09VUF9U
WVBFX1BST1hZX1JFU09MVkVSX0RFRkFVTFQsCi0gICAgICAgIFNPVVBfU0VTU0lPTl9BRERfRkVB
VFVSRSwgY29va2llSmFyLAorICAgICAgICBTT1VQX1NFU1NJT05fQUREX0ZFQVRVUkUsIGphci5n
ZXQoKSwKICAgICAgICAgU09VUF9TRVNTSU9OX1VTRV9USFJFQURfQ09OVEVYVCwgVFJVRSwKICAg
ICAgICAgU09VUF9TRVNTSU9OX1NTTF9VU0VfU1lTVEVNX0NBX0ZJTEUsIFRSVUUsCiAgICAgICAg
IFNPVVBfU0VTU0lPTl9TU0xfU1RSSUNULCBGQUxTRSwKQEAgLTE3NCwxMiArMTU0LDYgQEAgU291
cE5ldHdvcmtTZXNzaW9uOjpTb3VwTmV0d29ya1Nlc3Npb24oU291cENvb2tpZUphciogY29va2ll
SmFyKQogI2VuZGlmCiB9CiAKLVNvdXBOZXR3b3JrU2Vzc2lvbjo6U291cE5ldHdvcmtTZXNzaW9u
KFNvdXBTZXNzaW9uKiBzb3VwU2Vzc2lvbikKLSAgICA6IG1fc291cFNlc3Npb24oc291cFNlc3Np
b24pCi17Ci0gICAgc2V0dXBMb2dnZXIoKTsKLX0KLQogU291cE5ldHdvcmtTZXNzaW9uOjp+U291
cE5ldHdvcmtTZXNzaW9uKCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uaAppbmRleCAwMTMyY2I0YThi
Yy4uNTA5NGM4NmJmNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmgKQEAgLTQ2LDEzICs0Niw5IEBAIGNs
YXNzIFJlc291cmNlRXJyb3I7CiBjbGFzcyBTb3VwTmV0d29ya1Nlc3Npb24gewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFNvdXBOZXR3b3JrU2Vzc2lvbik7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgorICAgIFNvdXBOZXR3b3JrU2Vzc2lvbihTb3VwQ29va2llSmFyKiA9IG51
bGxwdHIpOwogICAgIH5Tb3VwTmV0d29ya1Nlc3Npb24oKTsKIAotICAgIHN0YXRpYyBTb3VwTmV0
d29ya1Nlc3Npb24mIGRlZmF1bHRTZXNzaW9uKCk7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxTb3VwTmV0d29ya1Nlc3Npb24+IGNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oKTsKLSAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNvdXBOZXR3b3JrU2Vzc2lvbj4gY3JlYXRlVGVzdGlu
Z1Nlc3Npb24oKTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNvdXBOZXR3b3JrU2Vzc2lv
bj4gY3JlYXRlRm9yU291cFNlc3Npb24oU291cFNlc3Npb24qKTsKLQogICAgIFNvdXBTZXNzaW9u
KiBzb3VwU2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fc291cFNlc3Npb24uZ2V0KCk7IH0KIAog
ICAgIHZvaWQgc2V0Q29va2llSmFyKFNvdXBDb29raWVKYXIqKTsKQEAgLTY5LDExICs2NSw2IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZv
ckhvc3QoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiwgY29uc3QgU3RyaW5nJiBob3N0KTsKIAogcHJp
dmF0ZToKLSAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8U291cE5ldHdvcmtTZXNzaW9u
PjsKLQotICAgIFNvdXBOZXR3b3JrU2Vzc2lvbihTb3VwQ29va2llSmFyKik7Ci0gICAgU291cE5l
dHdvcmtTZXNzaW9uKFNvdXBTZXNzaW9uKik7Ci0KICAgICB2b2lkIHNldEhUVFBQcm94eShjb25z
dCBjaGFyKiBodHRwUHJveHksIGNvbnN0IGNoYXIqIGh0dHBQcm94eUV4Y2VwdGlvbnMpOwogCiAg
ICAgdm9pZCBzZXR1cExvZ2dlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDU2NWIwM2M0NTVkLi5mZTJkOTRh
ODQzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE3LTAxLTEyICBDYXJsb3MgR2Fy
Y2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbU09VUF0gU2ltcGxp
ZnkgY29va2llIHN0b3JhZ2UgaGFuZGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2Njk2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEdldCB0aGUgU291cFNlc3Npb24gZnJvbSBOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLgorCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291cC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6cmVnaXN0ZXJTY2hlbWUp
OiBHZXQgdGhlIFNvdXBTZXNzaW9uIGZyb20gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0
U3RvcmFnZVNlc3Npb24oKS4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9lZmwvTmV0d29ya1By
b2Nlc3NNYWluRWZsLmNwcDogRGl0dG8uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9O
ZXR3b3JrUHJvY2Vzc1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
dXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKTogU291cE5l
dHdvcmtTZXNzaW9uOjpjbGVhck9sZFNvdXBDYWNoZSBpcyBzdGF0aWMuCisgICAgICAgICogV2Vi
UHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybUdldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kpOiBVc2UgdGhlIGNvb2tpZSBzdG9yYWdlIGZyb20gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpk
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKS4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
cjo6c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UpOiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNldENvb2tpZUFjY2Vw
dFBvbGljeUZvckFsbENvbnRleHRzKTogRGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9lZmwv
V2ViUHJvY2Vzc01haW5FZmwuY3BwOgorCiAyMDE3LTAxLTExICBCcmFkeSBFaWRzb24gIDxiZWlk
c29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgSWNvbkxvYWRpbmdEZWxlZ2F0ZSBmdW5jdGlv
bmFsaXR5IHRvIFdLVmlldy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlclNvdXAuY3BwIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyU291cC5jcHAKaW5kZXggYzg3NTM1MTgzNjAuLjcyYjBkYjZkMGRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMv
c291cC9DdXN0b21Qcm90b2NvbE1hbmFnZXJTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9DdXN0b21Qcm90b2NvbE1hbmFnZXJT
b3VwLmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNp
bmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgogI2luY2x1ZGUgIldlYktpdFNvdXBSZXF1ZXN0SW5w
dXRTdHJlYW0uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlRXJyb3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgpAQCAt
OTAsNyArOTEsNyBAQCB2b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6cmVnaXN0ZXJTY2hlbWUo
Y29uc3QgU3RyaW5nJiBzY2hlbWUpCiAKICAgICBhdXRvKiBnZW5lcmljUmVxdWVzdENsYXNzID0g
c3RhdGljX2Nhc3Q8U291cFJlcXVlc3RDbGFzcyo+KGdfdHlwZV9jbGFzc19yZWYoV0VCS0lUX1RZ
UEVfU09VUF9SRVFVRVNUX0dFTkVSSUMpKTsKICAgICBnZW5lcmljUmVxdWVzdENsYXNzLT5zY2hl
bWVzID0gY29uc3RfY2FzdDxjb25zdCBjaGFyKio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPiht
X3JlZ2lzdGVyZWRTY2hlbWVzLT5wZGF0YSkpOwotICAgIHNvdXBfc2Vzc2lvbl9hZGRfZmVhdHVy
ZV9ieV90eXBlKFNvdXBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKS5zb3VwU2Vzc2lv
bigpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfR0VORVJJQyk7CisgICAgc291cF9zZXNzaW9u
X2FkZF9mZWF0dXJlX2J5X3R5cGUoTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFn
ZVNlc3Npb24oKS5zb3VwTmV0d29ya1Nlc3Npb24oKS5zb3VwU2Vzc2lvbigpLCBXRUJLSVRfVFlQ
RV9TT1VQX1JFUVVFU1RfR0VORVJJQyk7CiB9CiAKIHZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Ojp1bnJlZ2lzdGVyU2NoZW1lKGNvbnN0IFN0cmluZyYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9lZmwvTmV0d29ya1Byb2Nlc3NNYWluRWZsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2VmbC9OZXR3b3JrUHJvY2Vzc01haW5FZmwuY3BwCmlu
ZGV4IGU0MTkzMmZmZjVjLi5mMjQxNGYwOWVmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvZWZsL05ldHdvcmtQcm9jZXNzTWFpbkVmbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvZWZsL05ldHdvcmtQcm9jZXNzTWFpbkVmbC5jcHAKQEAg
LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJDaGlsZFByb2Nlc3NNYWluLmgiCiAjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
TmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Tb3VwTmV0d29ya1Nl
c3Npb24uaD4KICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KIApAQCAtNDcsNyArNDgsNyBAQCBw
dWJsaWM6CiAgICAgICAgIGlmICghZWNvcmVfbWFpbl9sb29wX2dsaWJfaW50ZWdyYXRlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgU291cE5ldHdvcmtTZXNzaW9uOjpk
ZWZhdWx0U2Vzc2lvbigpLnNldHVwSFRUUFByb3h5RnJvbUVudmlyb25tZW50KCk7CisgICAgICAg
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuc291cE5ldHdv
cmtTZXNzaW9uKCkuc291cFNlc3Npb24oKS5zZXR1cEhUVFBQcm94eUZyb21FbnZpcm9ubWVudCgp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRleCBj
ZTA3NTQ1NzM4YS4uZjZjYTg2NDEzM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKQEAgLTMzLDYgKzMz
LDcgQEAKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9D
ZXJ0aWZpY2F0ZUluZm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
Tm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9Tb3VwTmV0d29ya1Nlc3Npb24uaD4KQEAgLTQ3LDcgKzQ4LDcgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnVzZXJQcmVmZXJyZWRM
YW5ndWFnZXNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMpCiB7Ci0gICAg
U291cE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigpLnNldEFjY2VwdExhbmd1YWdlcyhs
YW5ndWFnZXMpOworICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNz
aW9uKCkuc291cE5ldHdvcmtTZXNzaW9uKCkuc2V0QWNjZXB0TGFuZ3VhZ2VzKGxhbmd1YWdlcyk7
CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9j
ZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQpA
QCAtNTUsNyArNTYsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVO
ZXR3b3JrUHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIEFTU0VSVCghcGFy
YW1ldGVycy5kaXNrQ2FjaGVEaXJlY3RvcnkuaXNFbXB0eSgpKTsKICAgICBtX2Rpc2tDYWNoZURp
cmVjdG9yeSA9IHBhcmFtZXRlcnMuZGlza0NhY2hlRGlyZWN0b3J5OwogCi0gICAgU291cE5ldHdv
cmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigpLmNsZWFyT2xkU291cENhY2hlKFdlYkNvcmU6OmRp
cmVjdG9yeU5hbWUobV9kaXNrQ2FjaGVEaXJlY3RvcnkpKTsKKyAgICBTb3VwTmV0d29ya1Nlc3Np
b246OmNsZWFyT2xkU291cENhY2hlKFdlYkNvcmU6OmRpcmVjdG9yeU5hbWUobV9kaXNrQ2FjaGVE
aXJlY3RvcnkpKTsKIAogICAgIE5ldHdvcmtDYWNoZTo6Q2FjaGU6OlBhcmFtZXRlcnMgY2FjaGVQ
YXJhbWV0ZXJzIHsKICAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVOZXR3b3JrQ2FjaGVF
ZmZpY2FjeUxvZ2dpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQ29v
a2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAppbmRleCBlZmY0ODc0
OTk0OC4uMmRlNTIyMTk2NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Q29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJDb29raWVNYW5hZ2VyU291cC5jcHAKQEAgLTI5
LDcgKzI5LDcgQEAKICNpbmNsdWRlICJDaGlsZFByb2Nlc3MuaCIKICNpbmNsdWRlICJXZWJGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViS2l0U291cENvb2tpZUphclNxbGl0
ZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llSmFyU291cC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Tb3VwTmV0d29y
a1Nlc3Npb24uaD4KICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KICNpbmNsdWRlIDx3dGYvZ2xp
Yi9HUmVmUHRyLmg+CkBAIC00NiwyNiArNDYsMTcgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpw
bGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeQog
CiBIVFRQQ29va2llQWNjZXB0UG9saWN5IFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtR2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeSgpCiB7Ci0gICAgU291cENvb2tpZUphciogY29va2llSmFyID0g
V2ViQ29yZTo6c291cENvb2tpZUphcigpOwotICAgIFNvdXBDb29raWVKYXJBY2NlcHRQb2xpY3kg
c291cFBvbGljeTsKLQotICAgIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5OwotCi0gICAg
c291cFBvbGljeSA9IHNvdXBfY29va2llX2phcl9nZXRfYWNjZXB0X3BvbGljeShjb29raWVKYXIp
OwotICAgIHN3aXRjaCAoc291cFBvbGljeSkgeworICAgIHN3aXRjaCAoc291cF9jb29raWVfamFy
X2dldF9hY2NlcHRfcG9saWN5KE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uKCkuY29va2llU3RvcmFnZSgpKSkgewogICAgIGNhc2UgU09VUF9DT09LSUVfSkFSX0FD
Q0VQVF9BTFdBWVM6Ci0gICAgICAgIHBvbGljeSA9IEhUVFBDb29raWVBY2NlcHRQb2xpY3lBbHdh
eXM7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gSFRUUENvb2tpZUFjY2VwdFBvbGlj
eUFsd2F5czsKICAgICBjYXNlIFNPVVBfQ09PS0lFX0pBUl9BQ0NFUFRfTkVWRVI6Ci0gICAgICAg
IHBvbGljeSA9IEhUVFBDb29raWVBY2NlcHRQb2xpY3lOZXZlcjsKLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHJldHVybiBIVFRQQ29va2llQWNjZXB0UG9saWN5TmV2ZXI7CiAgICAgY2FzZSBTT1VQ
X0NPT0tJRV9KQVJfQUNDRVBUX05PX1RISVJEX1BBUlRZOgotICAgICAgICBwb2xpY3kgPSBIVFRQ
Q29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW47Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHBvbGljeSA9IEhUVFBDb29raWVBY2NlcHRQb2xp
Y3lBbHdheXM7CisgICAgICAgIHJldHVybiBIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21N
YWluRG9jdW1lbnREb21haW47CiAgICAgfQotICAgIHJldHVybiBwb2xpY3k7CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlG
cm9tTWFpbkRvY3VtZW50RG9tYWluOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnNldENv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIHVpbnQzMl90
IHN0b3JhZ2VUeXBlKQpAQCAtODIsOSArNzMsOSBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnNl
dENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIHVpbgog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKLSAgICBzb3VwX2Nvb2tpZV9q
YXJfc2V0X2FjY2VwdF9wb2xpY3koamFyLmdldCgpLCBzb3VwX2Nvb2tpZV9qYXJfZ2V0X2FjY2Vw
dF9wb2xpY3koV2ViQ29yZTo6c291cENvb2tpZUphcigpKSk7Ci0gICAgU291cE5ldHdvcmtTZXNz
aW9uOjpkZWZhdWx0U2Vzc2lvbigpLnNldENvb2tpZUphcihqYXIuZ2V0KCkpOwotICAgIFdlYkNv
cmU6OnNldFNvdXBDb29raWVKYXIoamFyLmdldCgpKTsKKyAgICBhdXRvJiBzdG9yYWdlU2Vzc2lv
biA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7CisgICAg
c291cF9jb29raWVfamFyX3NldF9hY2NlcHRfcG9saWN5KGphci5nZXQoKSwgc291cF9jb29raWVf
amFyX2dldF9hY2NlcHRfcG9saWN5KHN0b3JhZ2VTZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKSkpOwor
ICAgIHN0b3JhZ2VTZXNzaW9uLnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNldENvb2tpZUphcihqYXIu
Z2V0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291cC9XZWJGcmFtZU5ldHdvcmtpbmdD
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291
cC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcAppbmRleCBlNmI1NjRjYTRhYS4uMjYwZmIy
ZmM1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvc291cC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dC5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJTZXNzaW9uVHJhY2tlci5oIgogI2lu
Y2x1ZGUgIldlYkZyYW1lLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvQ29va2llSmFyU291cC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNz
aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1NldHRpbmdzLmg+CkBAIC02OCwxMSArNjcsMTAgQEAgdm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdD
b250ZXh0OjpzZXRDb29raWVBY2NlcHRQb2xpY3lGb3JBbGxDb250ZXh0cyhIVFRQQ29va2llQWMK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgU291cENvb2tpZUphciogY29va2llSmFyID0g
V2ViQ29yZTo6c291cENvb2tpZUphcigpOwotICAgIHNvdXBfY29va2llX2phcl9zZXRfYWNjZXB0
X3BvbGljeShjb29raWVKYXIsIHNvdXBQb2xpY3kpOworICAgIHNvdXBfY29va2llX2phcl9zZXRf
YWNjZXB0X3BvbGljeShOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lv
bigpLmNvb2tpZVN0b3JhZ2UoKSwgc291cFBvbGljeSk7CiAKICAgICBOZXR3b3JrU3RvcmFnZVNl
c3Npb246OmZvckVhY2goWyZdIChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24p
IHsKLSAgICAgICAgc291cF9jb29raWVfamFyX3NldF9hY2NlcHRfcG9saWN5KHNlc3Npb24uc291
cE5ldHdvcmtTZXNzaW9uKCkuY29va2llSmFyKCksIHNvdXBQb2xpY3kpOworICAgICAgICBzb3Vw
X2Nvb2tpZV9qYXJfc2V0X2FjY2VwdF9wb2xpY3koc2Vzc2lvbi5jb29raWVTdG9yYWdlKCksIHNv
dXBQb2xpY3kpOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL2VmbC9XZWJQcm9jZXNzTWFpbkVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL2VmbC9XZWJQcm9jZXNzTWFpbkVmbC5jcHAKaW5kZXggNDYxMWM2ZTM4MTcuLmNhZWM3YTE5
NjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9XZWJQcm9jZXNz
TWFpbkVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvV2ViUHJvY2Vz
c01haW5FZmwuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgog
I2luY2x1ZGUgPEVkamUuaD4KICNpbmNsdWRlIDxFZnJlZXQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU291cE5ldHdvcmtT
ZXNzaW9uLmg+CiAjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CiAKQEAgLTk4LDcgKzk5LDcgQEAg
cHVibGljOgogICAgICAgICBpZiAoIWVjb3JlX21haW5fbG9vcF9nbGliX2ludGVncmF0ZSgpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6
ZGVmYXVsdFNlc3Npb24oKS5zZXR1cEhUVFBQcm94eUZyb21FbnZpcm9ubWVudCgpOworICAgICAg
ICBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLnNvdXBOZXR3
b3JrU2Vzc2lvbigpLnNvdXBTZXNzaW9uKCkuc2V0dXBIVFRQUHJveHlGcm9tRW52aXJvbm1lbnQo
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298670</attachid>
            <date>2017-01-12 05:16:33 -0800</date>
            <delta_ts>2017-01-12 06:38:42 -0800</delta_ts>
            <desc>Try to fix EFL build</desc>
            <filename>wcore-soup-cookies.diff</filename>
            <type>text/plain</type>
            <size>34320</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzMWMxNTQ0MGUyOC4uZjc3ZDM0MjUwMTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MiBAQAorMjAxNy0wMS0xMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIFNpbXBsaWZ5IGNvb2tpZSBzdG9yYWdlIGhhbmRs
aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY5
NjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBj
dXJyZW50bHkgaGF2ZSBhIGdsb2JhbCBjb29raWUgc3RvcmFnZSwgYW5kIHNldmVyYWwgY3JlYXRl
KCkgbWV0aG9kcyBpbiBTb3VwTmV0d29ya1Nlc3Npb24gdG8gY3JlYXRlIHNlc3Npb25zCisgICAg
ICAgIHdpdGggZGlmZmVyZW50IGNvb2tpZSBqYXJzLiBUaGlzIGNvdWxkIGJlIHNpbXBsaWZpZWQg
YnkgbW92aW5nIHRoZSBjb29raWUgc3RvcmFnZSBoYW5kbGluZyB0bworICAgICAgICBOZXR3b3Jr
U3RvcmFnZVNlc3Npb24gYW5kIHJlbW92aW5nIGFsbCBjcmVhdGUoKSBtZXRob2RzIGZyb20gU291
cE5ldHdvcmtTZXNzaW9uLiBUaGlzIHBhdGNoIGFsc28gcmVtb3ZlcyB0aGUKKyAgICAgICAgZGVm
YXVsdCBTb3VwTmV0d29ya1Nlc3Npb24gaW4gZmF2b3Igb2YgdXNpbmcgdGhlIGRlZmF1bHQgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9OZXR3b3Jr
U3RvcmFnZVNlc3Npb24uaDogQWRkIGEgZGVmYXVsdCBjb29raWUgc3RvcmFnZSB0byBiZSB1c2Vk
IHdoZW4gdGhlCisgICAgICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiBkb2Vzbid0IGhhdmUgYSBw
bGF0Zm9ybSBzb3VwIHNlc3Npb24uCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nv
b2tpZUphclNvdXAuY3BwOiBSZW1vdmUgdGhlIGdsb2JhbCBjb29raWUgc3RvcmFnZSBoYW5kbGlu
Zy4KKyAgICAgICAgKFdlYkNvcmU6OnNldENvb2tpZXNGcm9tRE9NKTogVXNlIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6Y29va2llU3RvcmFnZSgpIGluc3RlYWQuCisgICAgICAgIChXZWJDb3JlOjpj
b29raWVzRm9yU2Vzc2lvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0VuYWJs
ZWQpOiBDaGVjayB0aGUgcG9saWN5IGluc3RlYWQgbGlrZSBhbGwgb3RoZXIgcG9ydHMgZG8sIHNp
bmNlIG5vdyB3ZSB3aWxsIGFsd2F5cyBoYXZlIGEKKyAgICAgICAgZGVmYXVsdCBzaGFyZWQgY29v
a2llIGphci4KKyAgICAgICAgKFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMpOiBVc2UgTmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpjb29raWVTdG9yYWdlKCkgaW5zdGVhZC4KKyAgICAgICAgKFdlYkNvcmU6
OmRlbGV0ZUNvb2tpZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6YWRkQ29va2llKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6ZGVsZXRlQWxsQ29va2llcyk6IERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVN0b3JhZ2VTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNvdXBDb29raWVzQ2hhbmdlZCk6IFVzZSB0aGUgY29va2llIHN0b3JhZ2UgZnJvbSB0aGUg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS4KKyAgICAgICAg
KFdlYkNvcmU6OnN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6c3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMpOiBEaXR0by4KKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TU291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpETlNS
ZXNvbHZlUXVldWU6OnVwZGF0ZUlzVXNpbmdQcm94eSk6IEdldCB0aGUgU291cFNlc3Npb24gZnJv
bSB0aGUgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS4KKyAg
ICAgICAgKFdlYkNvcmU6OkROU1Jlc29sdmVRdWV1ZTo6cGxhdGZvcm1SZXNvbHZlKTogRGl0dG8u
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNv
dXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKTogQ3JlYXRlIGEgbmV3IFNvdXBOZXR3b3Jr
U2Vzc2lvbiB3aXRob3V0CisgICAgICAgIHByb3ZpZGluZyBhIGNvb2tpZSBzdG9yYWdlIHRvIGVu
c3VyZSBpdCBjcmVhdGVzIGl0cyBvd24gcHJpdmF0ZSBvbmUuCisgICAgICAgIChXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb246OnN3aXRjaFRvTmV3VGVzdGluZ1Nlc3Npb24pOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c291cE5ldHdvcmtTZXNz
aW9uKTogQ3JlYXRlIHRoZSBTb3VwTmV0d29ya1Nlc3Npb24gb24gZGVtYW5kIHBhc3NpbmcgdGhl
IGdsb2JhbAorICAgICAgICBzaGFyZWQgY29va2llIHN0b3JhZ2UuCisgICAgICAgIChXZWJDb3Jl
OjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVN0b3JhZ2UpOiBSZXR1cm4gdGhlIGNvb2tp
ZSBzb3RyYWdlIGZyb20gdGhlIFNvdXBOZXR3b3JrU2Vzc2lvbiBpZiB3ZQorICAgICAgICBoYXZl
IG9uZSwgb3RoZXJ3aXNlIGNyZWF0ZSB0aGUgZ2xvYmFsIHNoYXJlZCBvbmUgYW5kIHJldHVybiBp
dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNlc3Npb25Gcm9tQ29udGV4dCk6IEdldCB0aGUgU291cFNl
c3Npb24gZnJvbSB0aGUgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Np
b24oKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXBOZXR3b3JrU2Vzc2lvbjo6U291cE5ldHdvcmtT
ZXNzaW9uKTogUmVtb3ZlIGFsbCBjcmVhdGUgbWV0aG9kcyBhbmQgdGhlIHVudXNlZCBjb25zdHJ1
Y3RvciB0aGF0CisgICAgICAgIHJlY2VpdmVzIGEgU291cFNlc3Npb24uIEFsbG93IHRvIHBhc3Mg
YSBudWxscHRyIFNvdXBDb29raWVKYXIgYW5kIGNyZWF0ZSBvbmUgaW4gc3VjaCBjYXNlLgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uaDoKKwogMjAx
Ny0wMS0xMSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbTWVkaWFTdHJlYW0sIE1hY10gUmVuZGVyIG1lZGlhIHN0cmVhbSBhdWRpbyBidWZmZXJzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdl
U2Vzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFn
ZVNlc3Npb24uaAppbmRleCBjZjFmNTcxNzM1NC4uYjEyMDFmYTIzMGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb24u
aApAQCAtMzcsNiArMzcsNyBAQAogI2lmIFVTRShTT1VQKQogI2luY2x1ZGUgPHd0Zi9GdW5jdGlv
bi5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KK3R5cGVkZWYgc3RydWN0IF9Tb3Vw
Q29va2llSmFyIFNvdXBDb29raWVKYXI7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNjcsMTAgKzY4LDExIEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSgpIGNvbnN0OwogICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVk
KGJvb2wpOwogI2VsaWYgVVNFKFNPVVApCi0gICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFNlc3Np
b25JRCwgc3RkOjp1bmlxdWVfcHRyPFNvdXBOZXR3b3JrU2Vzc2lvbj4pOworICAgIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbihTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxTb3VwTmV0d29ya1Nlc3Np
b24+JiYpOwogICAgIH5OZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsKIAogICAgIFNvdXBOZXR3b3Jr
U2Vzc2lvbiYgc291cE5ldHdvcmtTZXNzaW9uKCkgY29uc3Q7CisgICAgU291cENvb2tpZUphciog
Y29va2llU3RvcmFnZSgpIGNvbnN0OwogICAgIHZvaWQgZ2V0Q3JlZGVudGlhbEZyb21QZXJzaXN0
ZW50U3RvcmFnZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmLCBGdW5jdGlvbjx2b2lkIChDcmVkZW50
aWFsJiYpPiBjb21wbGV0aW9uSGFuZGxlcik7CiAgICAgdm9pZCBzYXZlQ3JlZGVudGlhbFRvUGVy
c2lzdGVudFN0b3JhZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJiwgY29uc3QgQ3JlZGVudGlhbCYp
OwogI2Vsc2UKQEAgLTg3LDcgKzg5LDggQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkg
fHwgVVNFKENGVVJMQ09OTkVDVElPTikKICAgICBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lv
blJlZj4gbV9wbGF0Zm9ybVNlc3Npb247CiAjZWxpZiBVU0UoU09VUCkKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8U291cE5ldHdvcmtTZXNzaW9uPiBtX3Nlc3Npb247CisgICAgbXV0YWJsZSBzdGQ6OnVu
aXF1ZV9wdHI8U291cE5ldHdvcmtTZXNzaW9uPiBtX3Nlc3Npb247CisgICAgbXV0YWJsZSBHUmVm
UHRyPFNvdXBDb29raWVKYXI+IG1fY29va2llU3RvcmFnZTsKICNpZiBVU0UoTElCU0VDUkVUKQog
ICAgIEZ1bmN0aW9uPHZvaWQgKENyZWRlbnRpYWwmJik+IG1fcGVyc2lzZW50U3RvcmFnZUNvbXBs
ZXRpb25IYW5kbGVyOwogICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX3BlcnNpc2VudFN0b3Jh
Z2VDYW5jZWxsYWJsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9Db29raWVKYXJTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9Db29raWVKYXJTb3VwLmNwcAppbmRleCA1ZDJlYzJiOWI3Yy4uNjQxNDkzZmJiZmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVK
YXJTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29v
a2llSmFyU291cC5jcHAKQEAgLTIyLDggKzIyLDYgQEAKIAogI2lmIFVTRShTT1VQKQogCi0jaW5j
bHVkZSAiQ29va2llSmFyU291cC5oIgotCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAi
R1VuaXF1ZVB0clNvdXAuaCIKICNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZVNlc3Npb24uaCIKQEAg
LTM3LDQyICszNSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFNvdXBDb29r
aWVKYXIqIGNvb2tpZUphckZvclNlc3Npb24oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBz
ZXNzaW9uKQotewotICAgIHJldHVybiBzZXNzaW9uLnNvdXBOZXR3b3JrU2Vzc2lvbigpLmNvb2tp
ZUphcigpOwotfQotCi1zdGF0aWMgR1JlZlB0cjxTb3VwQ29va2llSmFyPiYgZGVmYXVsdENvb2tp
ZUphcigpCi17Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEdSZWZQdHI8U291
cENvb2tpZUphcj4sIGNvb2tpZUphciwgKCkpOwotICAgIHJldHVybiBjb29raWVKYXI7Ci19Ci0K
LVNvdXBDb29raWVKYXIqIHNvdXBDb29raWVKYXIoKQotewotICAgIGlmIChHUmVmUHRyPFNvdXBD
b29raWVKYXI+JiBqYXIgPSBkZWZhdWx0Q29va2llSmFyKCkpCi0gICAgICAgIHJldHVybiBqYXIu
Z2V0KCk7Ci0KLSAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBzb3VwX2Nvb2tpZV9qYXJfbmV3KCk7
Ci0gICAgc291cF9jb29raWVfamFyX3NldF9hY2NlcHRfcG9saWN5KGphciwgU09VUF9DT09LSUVf
SkFSX0FDQ0VQVF9OT19USElSRF9QQVJUWSk7Ci0gICAgc2V0U291cENvb2tpZUphcihqYXIpOwot
ICAgIHJldHVybiBqYXI7Ci19Ci0KLVNvdXBDb29raWVKYXIqIGNyZWF0ZVByaXZhdGVCcm93c2lu
Z0Nvb2tpZUphcigpCi17Ci0gICAgU291cENvb2tpZUphciogamFyID0gc291cF9jb29raWVfamFy
X25ldygpOwotCi0gICAgc291cF9jb29raWVfamFyX3NldF9hY2NlcHRfcG9saWN5KGphciwgU09V
UF9DT09LSUVfSkFSX0FDQ0VQVF9OT19USElSRF9QQVJUWSk7Ci0KLSAgICByZXR1cm4gamFyOwot
fQotCi12b2lkIHNldFNvdXBDb29raWVKYXIoU291cENvb2tpZUphciogamFyKQotewotICAgIGRl
ZmF1bHRDb29raWVKYXIoKSA9IGphcjsKLX0KLQogc3RhdGljIGlubGluZSBib29sIGh0dHBPbmx5
Q29va2llRXhpc3RzKGNvbnN0IEdTTGlzdCogY29va2llcywgY29uc3QgZ2NoYXIqIG5hbWUsIGNv
bnN0IGdjaGFyKiBwYXRoKQogewogICAgIGZvciAoY29uc3QgR1NMaXN0KiBpdGVyID0gY29va2ll
czsgaXRlcjsgaXRlciA9IGdfc2xpc3RfbmV4dChpdGVyKSkgewpAQCAtODksOSArNTEsNyBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgaHR0cE9ubHlDb29raWVFeGlzdHMoY29uc3QgR1NMaXN0KiBjb29r
aWVzLCBjb25zdCBnY2hhciogbmFtZQogCiB2b2lkIHNldENvb2tpZXNGcm9tRE9NKGNvbnN0IE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25z
dCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBTb3VwQ29va2llSmFyKiBq
YXIgPSBjb29raWVKYXJGb3JTZXNzaW9uKHNlc3Npb24pOwotICAgIGlmICghamFyKQotICAgICAg
ICByZXR1cm47CisgICAgU291cENvb2tpZUphciogamFyID0gc2Vzc2lvbi5jb29raWVTdG9yYWdl
KCk7CiAKICAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IG9yaWdpbiA9IHVybC5jcmVhdGVTb3VwVVJJ
KCk7CiAgICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiBmaXJzdFBhcnR5VVJJID0gZmlyc3RQYXJ0eS5j
cmVhdGVTb3VwVVJJKCk7CkBAIC0xMjMsMTIgKzgzLDggQEAgdm9pZCBzZXRDb29raWVzRnJvbURP
TShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQ
YXIKIAogc3RhdGljIFN0cmluZyBjb29raWVzRm9yU2Vzc2lvbihjb25zdCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgdXJsLCBib29sIGZvckhUVFBIZWFkZXIpCiB7
Ci0gICAgU291cENvb2tpZUphciogamFyID0gY29va2llSmFyRm9yU2Vzc2lvbihzZXNzaW9uKTsK
LSAgICBpZiAoIWphcikKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCiAgICAgR1VuaXF1ZVB0
cjxTb3VwVVJJPiB1cmkgPSB1cmwuY3JlYXRlU291cFVSSSgpOwotICAgIEdVbmlxdWVQdHI8Y2hh
cj4gY29va2llcyhzb3VwX2Nvb2tpZV9qYXJfZ2V0X2Nvb2tpZXMoamFyLCB1cmkuZ2V0KCksIGZv
ckhUVFBIZWFkZXIpKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGNvb2tpZXMoc291cF9jb29raWVf
amFyX2dldF9jb29raWVzKHNlc3Npb24uY29va2llU3RvcmFnZSgpLCB1cmkuZ2V0KCksIGZvckhU
VFBIZWFkZXIpKTsKICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChjb29raWVzLmdldCgpKTsK
IH0KIApAQCAtMTQ0LDE4ICsxMDAsMTUgQEAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QKIAogYm9v
bCBjb29raWVzRW5hYmxlZChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNv
bnN0IFVSTCYgLypmaXJzdFBhcnR5Ki8sIGNvbnN0IFVSTCYgLyp1cmwqLykKIHsKLSAgICByZXR1
cm4gISFjb29raWVKYXJGb3JTZXNzaW9uKHNlc3Npb24pOworICAgIGF1dG8gcG9saWN5ID0gc291
cF9jb29raWVfamFyX2dldF9hY2NlcHRfcG9saWN5KHNlc3Npb24uY29va2llU3RvcmFnZSgpKTsK
KyAgICByZXR1cm4gcG9saWN5ID09IFNPVVBfQ09PS0lFX0pBUl9BQ0NFUFRfQUxXQVlTIHx8IHBv
bGljeSA9PSBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX05PX1RISVJEX1BBUlRZOwogfQogCiBib29s
IGdldFJhd0Nvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25z
dCBVUkwmIC8qZmlyc3RQYXJ0eSovLCBjb25zdCBVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJh
d0Nvb2tpZXMpCiB7CiAgICAgcmF3Q29va2llcy5jbGVhcigpOwotICAgIFNvdXBDb29raWVKYXIq
IGphciA9IGNvb2tpZUphckZvclNlc3Npb24oc2Vzc2lvbik7Ci0gICAgaWYgKCFqYXIpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQogICAgIEdVbmlxdWVQdHI8U291cFVSST4gdXJpID0gdXJsLmNy
ZWF0ZVNvdXBVUkkoKTsKLSAgICBHVW5pcXVlUHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nvb2tp
ZV9qYXJfZ2V0X2Nvb2tpZV9saXN0KGphciwgdXJpLmdldCgpLCBUUlVFKSk7CisgICAgR1VuaXF1
ZVB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFyX2dldF9jb29raWVfbGlzdChzZXNz
aW9uLmNvb2tpZVN0b3JhZ2UoKSwgdXJpLmdldCgpLCBUUlVFKSk7CiAgICAgaWYgKCFjb29raWVz
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE3Miw5ICsxMjUsNyBAQCBib29sIGdldFJh
d0Nvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwm
IC8qZmlyc3RQYXJ0eQogCiB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBOZXR3b3JrU3RvcmFnZVNl
c3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0g
ICAgU291cENvb2tpZUphciogamFyID0gY29va2llSmFyRm9yU2Vzc2lvbihzZXNzaW9uKTsKLSAg
ICBpZiAoIWphcikKLSAgICAgICAgcmV0dXJuOworICAgIFNvdXBDb29raWVKYXIqIGphciA9IHNl
c3Npb24uY29va2llU3RvcmFnZSgpOwogCiAgICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiB1cmkgPSB1
cmwuY3JlYXRlU291cFVSSSgpOwogICAgIEdVbmlxdWVQdHI8R1NMaXN0PiBjb29raWVzKHNvdXBf
Y29va2llX2phcl9nZXRfY29va2llX2xpc3QoamFyLCB1cmkuZ2V0KCksIFRSVUUpKTsKQEAgLTIx
NywxMyArMTY4LDEyIEBAIHN0YXRpYyBTb3VwQ29va2llKiB0b1NvdXBDb29raWUoY29uc3QgQ29v
a2llJiBjb29raWUpCiAKIHZvaWQgYWRkQ29va2llKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lv
biYgc2Vzc2lvbiwgY29uc3QgVVJMJiwgY29uc3QgQ29va2llJiBjb29raWUpCiB7Ci0gICAgc291
cF9jb29raWVfamFyX2FkZF9jb29raWUoY29va2llSmFyRm9yU2Vzc2lvbihzZXNzaW9uKSwgdG9T
b3VwQ29va2llKGNvb2tpZSkpOworICAgIHNvdXBfY29va2llX2phcl9hZGRfY29va2llKHNlc3Np
b24uY29va2llU3RvcmFnZSgpLCB0b1NvdXBDb29raWUoY29va2llKSk7CiB9CiAKIHZvaWQgZ2V0
SG9zdG5hbWVzV2l0aENvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9u
LCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBTb3VwQ29va2llSmFyKiBjb29r
aWVKYXIgPSBjb29raWVKYXJGb3JTZXNzaW9uKHNlc3Npb24pOwotICAgIEdVbmlxdWVQdHI8R1NM
aXN0PiBjb29raWVzKHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVKYXIpKTsKKyAg
ICBHVW5pcXVlUHRyPEdTTGlzdD4gY29va2llcyhzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMo
c2Vzc2lvbi5jb29raWVTdG9yYWdlKCkpKTsKICAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tp
ZXMuZ2V0KCk7IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsKICAgICAgICAgU291
cENvb2tpZSogY29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KGl0ZW0tPmRhdGEpOwog
ICAgICAgICBpZiAoY29va2llLT5kb21haW4pCkBAIC0yMzQsOSArMTg0LDExIEBAIHZvaWQgZ2V0
SG9zdG5hbWVzV2l0aENvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9u
LCBIYXNoU2V0PFN0cmluCiAKIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhjb25zdCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBob3N0
bmFtZXMpCiB7CisgICAgU291cENvb2tpZUphciogY29va2llSmFyID0gc2Vzc2lvbi5jb29raWVT
dG9yYWdlKCk7CisKICAgICBmb3IgKGNvbnN0IGF1dG8mIGhvc3RuYW1lIDogaG9zdG5hbWVzKSB7
CiAgICAgICAgIENTdHJpbmcgaG9zdE5hbWVTdHJpbmcgPSBob3N0bmFtZS51dGY4KCk7Ci0gICAg
ICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZUphciA9IGNvb2tpZUphckZvclNlc3Npb24oc2Vzc2lv
bik7CisKICAgICAgICAgR1VuaXF1ZVB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFy
X2FsbF9jb29raWVzKGNvb2tpZUphcikpOwogICAgICAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNv
b2tpZXMuZ2V0KCk7IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQoaXRlbSkpIHsKICAgICAgICAg
ICAgIFNvdXBDb29raWUqIGNvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5k
YXRhKTsKQEAgLTI0OSw3ICsyMDEsNyBAQCB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMo
Y29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBWZWN0bwogCiB2b2lk
IGRlbGV0ZUFsbENvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uKQog
ewotICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZUphciA9IGNvb2tpZUphckZvclNlc3Npb24oc2Vz
c2lvbik7CisgICAgU291cENvb2tpZUphciogY29va2llSmFyID0gc2Vzc2lvbi5jb29raWVTdG9y
YWdlKCk7CiAgICAgR1VuaXF1ZVB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFyX2Fs
bF9jb29raWVzKGNvb2tpZUphcikpOwogICAgIGZvciAoR1NMaXN0KiBpdGVtID0gY29va2llcy5n
ZXQoKTsgaXRlbTsgaXRlbSA9IGdfc2xpc3RfbmV4dChpdGVtKSkgewogICAgICAgICBTb3VwQ29v
a2llKiBjb29raWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291
cC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZkZWMxNGNkZDQuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3Vw
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA4IFhhbiBMb3BleiA8eGFuQGdub21lLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgQ29va2llSmFyU291cF9oCi0jZGVmaW5lIENvb2tpZUph
clNvdXBfaAotCi0jaW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotU291cENvb2tpZUphciogc291cENvb2tpZUphcigpOwotdm9pZCBzZXRTb3VwQ29va2ll
SmFyKFNvdXBDb29raWVKYXIqKTsKLQotU291cENvb2tpZUphciogY3JlYXRlUHJpdmF0ZUJyb3dz
aW5nQ29va2llSmFyKCk7Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llU3RvcmFnZVNvdXAuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVN0b3JhZ2VTb3VwLmNwcAppbmRleCBi
YWYwOTdiOWZmYy4uZjQ3ZmVmMDNiNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9Db29raWVTdG9yYWdlU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZVN0b3JhZ2VTb3VwLmNwcApAQCAtMjEsMTgg
KzIxLDE2IEBACiAKICNpZiBVU0UoU09VUCkKIAotI2luY2x1ZGUgIkNvb2tpZUphclNvdXAuaCIK
LSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs
dWRlICJOZXR3b3JrU3RvcmFnZVNlc3Npb24uaCIKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgQ29va2llQ2hhbmdlQ2FsbGJhY2tQdHIg
Y29va2llQ2hhbmdlQ2FsbGJhY2s7CiAKLXN0YXRpYyB2b2lkIHNvdXBDb29raWVzQ2hhbmdlZChT
b3VwQ29va2llSmFyKiBqYXIsIFNvdXBDb29raWUqLCBTb3VwQ29va2llKiwgZ3BvaW50ZXIpCitz
dGF0aWMgdm9pZCBzb3VwQ29va2llc0NoYW5nZWQoU291cENvb2tpZUphciogamFyKQogewotICAg
IGlmIChqYXIgIT0gc291cENvb2tpZUphcigpKQorICAgIGlmIChqYXIgIT0gTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVTdG9yYWdlKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBjb29raWVDaGFuZ2VDYWxsYmFjaygpOwogfQpAQCAtNDIsMTMgKzQw
LDEzIEBAIHZvaWQgc3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKENvb2tpZUNoYW5nZUNhbGxi
YWNrUHRyIGNhbGxiYWNrKQogICAgIEFTU0VSVCghY29va2llQ2hhbmdlQ2FsbGJhY2spOwogICAg
IGNvb2tpZUNoYW5nZUNhbGxiYWNrID0gY2FsbGJhY2s7CiAKLSAgICBnX3NpZ25hbF9jb25uZWN0
KHNvdXBDb29raWVKYXIoKSwgImNoYW5nZWQiLCBHX0NBTExCQUNLKHNvdXBDb29raWVzQ2hhbmdl
ZCksIDApOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZh
dWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVTdG9yYWdlKCksICJjaGFuZ2VkIiwgR19DQUxMQkFD
Syhzb3VwQ29va2llc0NoYW5nZWQpLCAwKTsKIH0KIAogdm9pZCBzdG9wT2JzZXJ2aW5nQ29va2ll
Q2hhbmdlcygpCiB7Ci0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHNv
dXBDb29raWVKYXIoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cENvb2tpZXNDaGFuZ2Vk
KSwgMCk7Ci0gICAgY29va2llQ2hhbmdlQ2FsbGJhY2sgPSAwOworICAgIGdfc2lnbmFsX2hhbmRs
ZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9y
YWdlU2Vzc2lvbigpLmNvb2tpZVN0b3JhZ2UoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291
cENvb2tpZXNDaGFuZ2VkKSwgbnVsbHB0cik7CisgICAgY29va2llQ2hhbmdlQ2FsbGJhY2sgPSBu
dWxscHRyOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvRE5TU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvRE5TU291cC5jcHAKaW5kZXggZWNlYWIxNGY5NmYuLjEwMTNlYWE3MDM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TU291cC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1NvdXAuY3BwCkBAIC0zMCw2
ICszMCw3IEBACiAKICNpZiBVU0UoU09VUCkKIAorI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlU2Vz
c2lvbi5oIgogI2luY2x1ZGUgIlNvdXBOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgPGxpYnNv
dXAvc291cC5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC03OCw3ICs3OSw3IEBA
IHN0YXRpYyB2b2lkIHByb3h5UmVzb2x2ZWRGb3JIdHRwc1VyaUNhbGxiYWNrKEdPYmplY3QqIHNv
dXJjZSwgR0FzeW5jUmVzdWx0KiByZXN1CiB2b2lkIEROU1Jlc29sdmVRdWV1ZTo6dXBkYXRlSXNV
c2luZ1Byb3h5KCkKIHsKICAgICBHUmVmUHRyPEdQcm94eVJlc29sdmVyPiByZXNvbHZlcjsKLSAg
ICBnX29iamVjdF9nZXQoU291cE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigpLnNvdXBT
ZXNzaW9uKCksICJwcm94eS1yZXNvbHZlciIsICZyZXNvbHZlci5vdXRQdHIoKSwgbnVsbHB0cik7
CisgICAgZ19vYmplY3RfZ2V0KE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uKCkuc291cE5ldHdvcmtTZXNzaW9uKCkuc291cFNlc3Npb24oKSwgInByb3h5LXJlc29s
dmVyIiwgJnJlc29sdmVyLm91dFB0cigpLCBudWxscHRyKTsKICAgICBBU1NFUlQocmVzb2x2ZXIp
OwogCiAgICAgZ19wcm94eV9yZXNvbHZlcl9sb29rdXBfYXN5bmMocmVzb2x2ZXIuZ2V0KCksICJo
dHRwOi8vZXhhbXBsZS5jb20vIiwgbnVsbHB0ciwgcHJveHlSZXNvbHZlZEZvckh0dHBVcmlDYWxs
YmFjaywgJm1faXNVc2luZ1Byb3h5KTsKQEAgLTk0LDcgKzk1LDcgQEAgdm9pZCBETlNSZXNvbHZl
UXVldWU6OnBsYXRmb3JtUmVzb2x2ZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBzb3VwX3Nlc3Npb25fcHJlZmV0Y2hfZG5zKFNv
dXBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKS5zb3VwU2Vzc2lvbigpLCBob3N0bmFt
ZS51dGY4KCkuZGF0YSgpLCBudWxscHRyLCByZXNvbHZlZENhbGxiYWNrLCBudWxscHRyKTsKKyAg
ICBzb3VwX3Nlc3Npb25fcHJlZmV0Y2hfZG5zKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVs
dFN0b3JhZ2VTZXNzaW9uKCkuc291cE5ldHdvcmtTZXNzaW9uKCkuc291cFNlc3Npb24oKSwgaG9z
dG5hbWUudXRmOCgpLmRhdGEoKSwgbnVsbHB0ciwgcmVzb2x2ZWRDYWxsYmFjaywgbnVsbHB0cik7
CiB9CiAKIHZvaWQgcHJlZmV0Y2hETlMoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3JrU3RvcmFnZVNl
c3Npb25Tb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3
b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcAppbmRleCAxZTA5NTViNGUwZi4uNzE2OTA0YjdhOTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3Jr
U3RvcmFnZVNlc3Npb25Tb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1OZXR3b3JrU3RvcmFnZVNlc3Npb246Ok5ldHdvcmtT
dG9yYWdlU2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8U291cE5l
dHdvcmtTZXNzaW9uPiBzZXNzaW9uKQorTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpOZXR3b3JrU3Rv
cmFnZVNlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPFNvdXBOZXR3
b3JrU2Vzc2lvbj4mJiBzZXNzaW9uKQogICAgIDogbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQogICAg
ICwgbV9zZXNzaW9uKFdURk1vdmUoc2Vzc2lvbikpCiB7CkBAIC03NiwyMCArNzYsMzcgQEAgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdl
U2Vzc2lvbigpCiAKIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjplbnN1cmVQcml2YXRlQnJv
d3NpbmdTZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAg
YXV0byBzZXNzaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrU3RvcmFnZVNlc3Npb24+KHNl
c3Npb25JRCwgU291cE5ldHdvcmtTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9u
KCkpOwogICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCkpOwogICAgIEFTU0VSVCghZ2xvYmFsU2Vzc2lvbk1hcCgpLmNvbnRhaW5zKHNlc3Npb25JRCkp
OwotICAgIGdsb2JhbFNlc3Npb25NYXAoKS5hZGQoc2Vzc2lvbklELCBXVEZNb3ZlKHNlc3Npb24p
KTsKKyAgICBnbG9iYWxTZXNzaW9uTWFwKCkuYWRkKHNlc3Npb25JRCwgc3RkOjptYWtlX3VuaXF1
ZTxOZXR3b3JrU3RvcmFnZVNlc3Npb24+KHNlc3Npb25JRCwgc3RkOjptYWtlX3VuaXF1ZTxTb3Vw
TmV0d29ya1Nlc3Npb24+KCkpKTsKIH0KIAogdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN3
aXRjaFRvTmV3VGVzdGluZ1Nlc3Npb24oKQogewotICAgIGRlZmF1bHRTZXNzaW9uKCkgPSBzdGQ6
Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oU2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCksIFNvdXBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlVGVzdGluZ1Nlc3Npb24oKSk7Cisg
ICAgZGVmYXVsdFNlc3Npb24oKSA9IHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPihTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgc3RkOjptYWtlX3VuaXF1ZTxTb3Vw
TmV0d29ya1Nlc3Npb24+KCkpOworICAgIC8vIEZJWE1FOiBDcmVhdGluZyBhIHRlc3Rpbmcgc2Vz
c2lvbiBpcyBsb3Npbmcgc291cCBzZXNzaW9uIHZhbHVlcyBzZXQgd2hlbiBpbml0aWFsaXppbmcg
dGhlIG5ldHdvcmsgcHJvY2Vzcy4KKyAgICBnX29iamVjdF9zZXQoZGVmYXVsdFNlc3Npb24oKS0+
c291cE5ldHdvcmtTZXNzaW9uKCkuc291cFNlc3Npb24oKSwgImFjY2VwdC1sYW5ndWFnZSIsICJl
bi11cyIsIG51bGxwdHIpOwogfQogCiBTb3VwTmV0d29ya1Nlc3Npb24mIE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6c291cE5ldHdvcmtTZXNzaW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9zZXNz
aW9uID8gKm1fc2Vzc2lvbiA6IFNvdXBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKTsK
KyAgICBpZiAoIW1fc2Vzc2lvbikKKyAgICAgICAgbV9zZXNzaW9uID0gc3RkOjptYWtlX3VuaXF1
ZTxTb3VwTmV0d29ya1Nlc3Npb24+KGNvb2tpZVN0b3JhZ2UoKSk7CisgICAgcmV0dXJuICptX3Nl
c3Npb247Cit9CisKK1NvdXBDb29raWVKYXIqIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2ll
U3RvcmFnZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Vzc2lvbikgeworICAgICAgICBBU1NFUlQo
bV9zZXNzaW9uLT5jb29raWVKYXIoKSk7CisgICAgICAgIHJldHVybiBtX3Nlc3Npb24tPmNvb2tp
ZUphcigpOworICAgIH0KKworICAgIGlmICghbV9jb29raWVTdG9yYWdlKSB7CisgICAgICAgIG1f
Y29va2llU3RvcmFnZSA9IGFkb3B0R1JlZihzb3VwX2Nvb2tpZV9qYXJfbmV3KCkpOworICAgICAg
ICBzb3VwX2Nvb2tpZV9qYXJfc2V0X2FjY2VwdF9wb2xpY3kobV9jb29raWVTdG9yYWdlLmdldCgp
LCBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX05PX1RISVJEX1BBUlRZKTsKKyAgICB9CisgICAgcmV0
dXJuIG1fY29va2llU3RvcmFnZS5nZXQoKTsKIH0KIAogI2lmIFVTRShMSUJTRUNSRVQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5k
bGVTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJj
ZUhhbmRsZVNvdXAuY3BwCmluZGV4IDg4N2E5ZWQ3OTVkLi45NWJhY2U1NzgzNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291
cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNl
SGFuZGxlU291cC5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2lmIFVTRShTT1VQKQogCi0jaW5j
bHVkZSAiQ29va2llSmFyU291cC5oIgogI2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCiAj
aW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkdVbmlxdWVQdHJTb3VwLmgiCkBAIC04
MSw3ICs4MCw3IEBAIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVy
bmFsKCkKIHN0YXRpYyBTb3VwU2Vzc2lvbiogc2Vzc2lvbkZyb21Db250ZXh0KE5ldHdvcmtpbmdD
b250ZXh0KiBjb250ZXh0KQogewogICAgIGlmICghY29udGV4dCB8fCAhY29udGV4dC0+aXNWYWxp
ZCgpKQotICAgICAgICByZXR1cm4gU291cE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigp
LnNvdXBTZXNzaW9uKCk7CisgICAgICAgIHJldHVybiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRl
ZmF1bHRTdG9yYWdlU2Vzc2lvbigpLnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNvdXBTZXNzaW9uKCk7
CiAgICAgcmV0dXJuIGNvbnRleHQtPnN0b3JhZ2VTZXNzaW9uKCkuc291cE5ldHdvcmtTZXNzaW9u
KCkuc291cFNlc3Npb24oKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcAppbmRleCBjMzQ1NTdk
OTdjYy4uMTVhODg2N2JlMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwCkBAIC0zMCw3ICszMCw2
IEBACiAjaW5jbHVkZSAiU291cE5ldHdvcmtTZXNzaW9uLmgiCiAKICNpbmNsdWRlICJBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZS5oIgotI2luY2x1ZGUgIkNvb2tpZUphclNvdXAuaCIKICNpbmNsdWRl
ICJDcnlwdG9EaWdlc3QuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiR1Vu
aXF1ZVB0clNvdXAuaCIKQEAgLTkzLDMxICs5Miw2IEBAIHN0YXRpYyBIYXNoTWFwPFN0cmluZywg
SG9zdFRMU0NlcnRpZmljYXRlU2V0LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBjbGllbnRD
CiAgICAgcmV0dXJuIGNlcnRpZmljYXRlczsKIH0KIAotU291cE5ldHdvcmtTZXNzaW9uJiBTb3Vw
TmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8U291cE5ldHdvcmtTZXNzaW9uPiBuZXR3b3JrU2Vzc2lvbihzb3VwQ29va2llSmFyKCkp
OwotICAgIHJldHVybiBuZXR3b3JrU2Vzc2lvbjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFNvdXBO
ZXR3b3JrU2Vzc2lvbj4gU291cE5ldHdvcmtTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdT
ZXNzaW9uKCkKLXsKLSAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFNvdXBOZXR3b3JrU2Vzc2lv
bj4obmV3IFNvdXBOZXR3b3JrU2Vzc2lvbihzb3VwQ29va2llSmFyKCkpKTsKLX0KLQotc3RkOjp1
bmlxdWVfcHRyPFNvdXBOZXR3b3JrU2Vzc2lvbj4gU291cE5ldHdvcmtTZXNzaW9uOjpjcmVhdGVU
ZXN0aW5nU2Vzc2lvbigpCi17Ci0gICAgYXV0byBjb29raWVKYXIgPSBhZG9wdEdSZWYoY3JlYXRl
UHJpdmF0ZUJyb3dzaW5nQ29va2llSmFyKCkpOwotICAgIGF1dG8gbmV3U291cFNlc3Npb24gPSBz
dGQ6OnVuaXF1ZV9wdHI8U291cE5ldHdvcmtTZXNzaW9uPihuZXcgU291cE5ldHdvcmtTZXNzaW9u
KGNvb2tpZUphci5nZXQoKSkpOwotICAgIC8vIEZJWE1FOiBDcmVhdGluZyBhIHRlc3Rpbmcgc2Vz
c2lvbiBpcyBsb3Npbmcgc291cCBzZXNzaW9uIHZhbHVlcyBzZXQgd2hlbiBpbml0aWFsaXppbmcg
dGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBnX29iamVjdF9zZXQobmV3U291cFNlc3Npb24tPnNv
dXBTZXNzaW9uKCksICJhY2NlcHQtbGFuZ3VhZ2UiLCAiZW4tdXMiLCBudWxscHRyKTsKLSAgICBy
ZXR1cm4gbmV3U291cFNlc3Npb247Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxTb3VwTmV0d29ya1Nl
c3Npb24+IFNvdXBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlRm9yU291cFNlc3Npb24oU291cFNlc3Np
b24qIHNvdXBTZXNzaW9uKQotewotICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8U291cE5ldHdv
cmtTZXNzaW9uPihuZXcgU291cE5ldHdvcmtTZXNzaW9uKHNvdXBTZXNzaW9uKSk7Ci19Ci0KIHN0
YXRpYyB2b2lkIGF1dGhlbnRpY2F0ZUNhbGxiYWNrKFNvdXBTZXNzaW9uKiwgU291cE1lc3NhZ2Uq
IHNvdXBNZXNzYWdlLCBTb3VwQXV0aCogc291cEF1dGgsIGdib29sZWFuIHJldHJ5aW5nKQogewog
ICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VI
YW5kbGUqPihnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChzb3VwTWVzc2FnZSksICJoYW5kbGUi
KSk7CkBAIC0xNDYsMTMgKzEyMCwxOSBAQCBTb3VwTmV0d29ya1Nlc3Npb246OlNvdXBOZXR3b3Jr
U2Vzc2lvbihTb3VwQ29va2llSmFyKiBjb29raWVKYXIpCiAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhDb25uZWN0aW9ucyA9IDE3OwogICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4Q29ubmVjdGlvbnNQ
ZXJIb3N0ID0gNjsKIAorICAgIEdSZWZQdHI8U291cENvb2tpZUphcj4gamFyID0gY29va2llSmFy
OworICAgIGlmICghamFyKSB7CisgICAgICAgIGphciA9IGFkb3B0R1JlZihzb3VwX2Nvb2tpZV9q
YXJfbmV3KCkpOworICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfc2V0X2FjY2VwdF9wb2xpY3koamFy
LmdldCgpLCBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX05PX1RISVJEX1BBUlRZKTsKKyAgICB9CisK
ICAgICBnX29iamVjdF9zZXQobV9zb3VwU2Vzc2lvbi5nZXQoKSwKICAgICAgICAgU09VUF9TRVNT
SU9OX01BWF9DT05OUywgbWF4Q29ubmVjdGlvbnMsCiAgICAgICAgIFNPVVBfU0VTU0lPTl9NQVhf
Q09OTlNfUEVSX0hPU1QsIG1heENvbm5lY3Rpb25zUGVySG9zdCwKICAgICAgICAgU09VUF9TRVNT
SU9OX0FERF9GRUFUVVJFX0JZX1RZUEUsIFNPVVBfVFlQRV9DT05URU5UX0RFQ09ERVIsCiAgICAg
ICAgIFNPVVBfU0VTU0lPTl9BRERfRkVBVFVSRV9CWV9UWVBFLCBTT1VQX1RZUEVfQ09OVEVOVF9T
TklGRkVSLAogICAgICAgICBTT1VQX1NFU1NJT05fQUREX0ZFQVRVUkVfQllfVFlQRSwgU09VUF9U
WVBFX1BST1hZX1JFU09MVkVSX0RFRkFVTFQsCi0gICAgICAgIFNPVVBfU0VTU0lPTl9BRERfRkVB
VFVSRSwgY29va2llSmFyLAorICAgICAgICBTT1VQX1NFU1NJT05fQUREX0ZFQVRVUkUsIGphci5n
ZXQoKSwKICAgICAgICAgU09VUF9TRVNTSU9OX1VTRV9USFJFQURfQ09OVEVYVCwgVFJVRSwKICAg
ICAgICAgU09VUF9TRVNTSU9OX1NTTF9VU0VfU1lTVEVNX0NBX0ZJTEUsIFRSVUUsCiAgICAgICAg
IFNPVVBfU0VTU0lPTl9TU0xfU1RSSUNULCBGQUxTRSwKQEAgLTE3NCwxMiArMTU0LDYgQEAgU291
cE5ldHdvcmtTZXNzaW9uOjpTb3VwTmV0d29ya1Nlc3Npb24oU291cENvb2tpZUphciogY29va2ll
SmFyKQogI2VuZGlmCiB9CiAKLVNvdXBOZXR3b3JrU2Vzc2lvbjo6U291cE5ldHdvcmtTZXNzaW9u
KFNvdXBTZXNzaW9uKiBzb3VwU2Vzc2lvbikKLSAgICA6IG1fc291cFNlc3Npb24oc291cFNlc3Np
b24pCi17Ci0gICAgc2V0dXBMb2dnZXIoKTsKLX0KLQogU291cE5ldHdvcmtTZXNzaW9uOjp+U291
cE5ldHdvcmtTZXNzaW9uKCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uaAppbmRleCAwMTMyY2I0YThi
Yy4uNTA5NGM4NmJmNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmgKQEAgLTQ2LDEzICs0Niw5IEBAIGNs
YXNzIFJlc291cmNlRXJyb3I7CiBjbGFzcyBTb3VwTmV0d29ya1Nlc3Npb24gewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFNvdXBOZXR3b3JrU2Vzc2lvbik7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgorICAgIFNvdXBOZXR3b3JrU2Vzc2lvbihTb3VwQ29va2llSmFyKiA9IG51
bGxwdHIpOwogICAgIH5Tb3VwTmV0d29ya1Nlc3Npb24oKTsKIAotICAgIHN0YXRpYyBTb3VwTmV0
d29ya1Nlc3Npb24mIGRlZmF1bHRTZXNzaW9uKCk7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxTb3VwTmV0d29ya1Nlc3Npb24+IGNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oKTsKLSAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNvdXBOZXR3b3JrU2Vzc2lvbj4gY3JlYXRlVGVzdGlu
Z1Nlc3Npb24oKTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNvdXBOZXR3b3JrU2Vzc2lv
bj4gY3JlYXRlRm9yU291cFNlc3Npb24oU291cFNlc3Npb24qKTsKLQogICAgIFNvdXBTZXNzaW9u
KiBzb3VwU2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fc291cFNlc3Npb24uZ2V0KCk7IH0KIAog
ICAgIHZvaWQgc2V0Q29va2llSmFyKFNvdXBDb29raWVKYXIqKTsKQEAgLTY5LDExICs2NSw2IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZv
ckhvc3QoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiwgY29uc3QgU3RyaW5nJiBob3N0KTsKIAogcHJp
dmF0ZToKLSAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8U291cE5ldHdvcmtTZXNzaW9u
PjsKLQotICAgIFNvdXBOZXR3b3JrU2Vzc2lvbihTb3VwQ29va2llSmFyKik7Ci0gICAgU291cE5l
dHdvcmtTZXNzaW9uKFNvdXBTZXNzaW9uKik7Ci0KICAgICB2b2lkIHNldEhUVFBQcm94eShjb25z
dCBjaGFyKiBodHRwUHJveHksIGNvbnN0IGNoYXIqIGh0dHBQcm94eUV4Y2VwdGlvbnMpOwogCiAg
ICAgdm9pZCBzZXR1cExvZ2dlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDU2NWIwM2M0NTVkLi5mZTJkOTRh
ODQzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE3LTAxLTEyICBDYXJsb3MgR2Fy
Y2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbU09VUF0gU2ltcGxp
ZnkgY29va2llIHN0b3JhZ2UgaGFuZGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2Njk2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEdldCB0aGUgU291cFNlc3Npb24gZnJvbSBOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLgorCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291cC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6cmVnaXN0ZXJTY2hlbWUp
OiBHZXQgdGhlIFNvdXBTZXNzaW9uIGZyb20gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0
U3RvcmFnZVNlc3Npb24oKS4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9lZmwvTmV0d29ya1By
b2Nlc3NNYWluRWZsLmNwcDogRGl0dG8uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9O
ZXR3b3JrUHJvY2Vzc1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
dXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKTogU291cE5l
dHdvcmtTZXNzaW9uOjpjbGVhck9sZFNvdXBDYWNoZSBpcyBzdGF0aWMuCisgICAgICAgICogV2Vi
UHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybUdldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kpOiBVc2UgdGhlIGNvb2tpZSBzdG9yYWdlIGZyb20gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpk
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKS4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
cjo6c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UpOiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNldENvb2tpZUFjY2Vw
dFBvbGljeUZvckFsbENvbnRleHRzKTogRGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9lZmwv
V2ViUHJvY2Vzc01haW5FZmwuY3BwOgorCiAyMDE3LTAxLTExICBCcmFkeSBFaWRzb24gIDxiZWlk
c29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgSWNvbkxvYWRpbmdEZWxlZ2F0ZSBmdW5jdGlv
bmFsaXR5IHRvIFdLVmlldy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlclNvdXAuY3BwIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyU291cC5jcHAKaW5kZXggYzg3NTM1MTgzNjAuLjcyYjBkYjZkMGRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMv
c291cC9DdXN0b21Qcm90b2NvbE1hbmFnZXJTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9DdXN0b21Qcm90b2NvbE1hbmFnZXJT
b3VwLmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNp
bmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgogI2luY2x1ZGUgIldlYktpdFNvdXBSZXF1ZXN0SW5w
dXRTdHJlYW0uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlRXJyb3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgpAQCAt
OTAsNyArOTEsNyBAQCB2b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6cmVnaXN0ZXJTY2hlbWUo
Y29uc3QgU3RyaW5nJiBzY2hlbWUpCiAKICAgICBhdXRvKiBnZW5lcmljUmVxdWVzdENsYXNzID0g
c3RhdGljX2Nhc3Q8U291cFJlcXVlc3RDbGFzcyo+KGdfdHlwZV9jbGFzc19yZWYoV0VCS0lUX1RZ
UEVfU09VUF9SRVFVRVNUX0dFTkVSSUMpKTsKICAgICBnZW5lcmljUmVxdWVzdENsYXNzLT5zY2hl
bWVzID0gY29uc3RfY2FzdDxjb25zdCBjaGFyKio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPiht
X3JlZ2lzdGVyZWRTY2hlbWVzLT5wZGF0YSkpOwotICAgIHNvdXBfc2Vzc2lvbl9hZGRfZmVhdHVy
ZV9ieV90eXBlKFNvdXBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKS5zb3VwU2Vzc2lv
bigpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfR0VORVJJQyk7CisgICAgc291cF9zZXNzaW9u
X2FkZF9mZWF0dXJlX2J5X3R5cGUoTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFn
ZVNlc3Npb24oKS5zb3VwTmV0d29ya1Nlc3Npb24oKS5zb3VwU2Vzc2lvbigpLCBXRUJLSVRfVFlQ
RV9TT1VQX1JFUVVFU1RfR0VORVJJQyk7CiB9CiAKIHZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Ojp1bnJlZ2lzdGVyU2NoZW1lKGNvbnN0IFN0cmluZyYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9lZmwvTmV0d29ya1Byb2Nlc3NNYWluRWZsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2VmbC9OZXR3b3JrUHJvY2Vzc01haW5FZmwuY3BwCmlu
ZGV4IGU0MTkzMmZmZjVjLi44ZTEwNGE1OGU5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvZWZsL05ldHdvcmtQcm9jZXNzTWFpbkVmbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvZWZsL05ldHdvcmtQcm9jZXNzTWFpbkVmbC5jcHAKQEAg
LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJDaGlsZFByb2Nlc3NNYWluLmgiCiAjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
TmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Tb3VwTmV0d29ya1Nl
c3Npb24uaD4KICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KIApAQCAtNDcsNyArNDgsNyBAQCBw
dWJsaWM6CiAgICAgICAgIGlmICghZWNvcmVfbWFpbl9sb29wX2dsaWJfaW50ZWdyYXRlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgU291cE5ldHdvcmtTZXNzaW9uOjpk
ZWZhdWx0U2Vzc2lvbigpLnNldHVwSFRUUFByb3h5RnJvbUVudmlyb25tZW50KCk7CisgICAgICAg
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuc291cE5ldHdv
cmtTZXNzaW9uKCkuc2V0dXBIVFRQUHJveHlGcm9tRW52aXJvbm1lbnQoKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKaW5kZXggY2UwNzU0NTczOGEuLmY2
Y2E4NjQxMzNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3Vw
L05ldHdvcmtQcm9jZXNzU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSAiV2ViQ29va2llTWFuYWdlci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZv
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9O
ZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvU291cE5ldHdvcmtTZXNzaW9uLmg+CkBAIC00Nyw3ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjp1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdl
ZChjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKQogewotICAgIFNvdXBOZXR3b3JrU2Vz
c2lvbjo6ZGVmYXVsdFNlc3Npb24oKS5zZXRBY2NlcHRMYW5ndWFnZXMobGFuZ3VhZ2VzKTsKKyAg
ICBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLnNvdXBOZXR3
b3JrU2Vzc2lvbigpLnNldEFjY2VwdExhbmd1YWdlcyhsYW5ndWFnZXMpOwogfQogCiB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhjb25zdCBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKQEAgLTU1LDcgKzU2LDcg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3Mo
Y29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkKICAgICBBU1NFUlQoIXBhcmFtZXRlcnMuZGlza0Nh
Y2hlRGlyZWN0b3J5LmlzRW1wdHkoKSk7CiAgICAgbV9kaXNrQ2FjaGVEaXJlY3RvcnkgPSBwYXJh
bWV0ZXJzLmRpc2tDYWNoZURpcmVjdG9yeTsKIAotICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6ZGVm
YXVsdFNlc3Npb24oKS5jbGVhck9sZFNvdXBDYWNoZShXZWJDb3JlOjpkaXJlY3RvcnlOYW1lKG1f
ZGlza0NhY2hlRGlyZWN0b3J5KSk7CisgICAgU291cE5ldHdvcmtTZXNzaW9uOjpjbGVhck9sZFNv
dXBDYWNoZShXZWJDb3JlOjpkaXJlY3RvcnlOYW1lKG1fZGlza0NhY2hlRGlyZWN0b3J5KSk7CiAK
ICAgICBOZXR3b3JrQ2FjaGU6OkNhY2hlOjpQYXJhbWV0ZXJzIGNhY2hlUGFyYW1ldGVycyB7CiAg
ICAgICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5n
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJD
b29raWVNYW5hZ2VyU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Nvb2tpZXMv
c291cC9XZWJDb29raWVNYW5hZ2VyU291cC5jcHAKaW5kZXggZWZmNDg3NDk5NDguLjJkZTUyMjE5
NjQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Nvb2tpZXMvc291cC9X
ZWJDb29raWVNYW5hZ2VyU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9D
b29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAj
aW5jbHVkZSAiQ2hpbGRQcm9jZXNzLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVOZXR3b3JraW5nQ29u
dGV4dC5oIgogI2luY2x1ZGUgIldlYktpdFNvdXBDb29raWVKYXJTcWxpdGUuaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL0Nvb2tpZUphclNvdXAuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9y
YWdlU2Vzc2lvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU291cE5ldHdvcmtTZXNzaW9uLmg+CiAj
aW5jbHVkZSA8bGlic291cC9zb3VwLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgpA
QCAtNDYsMjYgKzQ2LDE3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQ
Q29va2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kKIAogSFRUUENvb2tpZUFj
Y2VwdFBvbGljeSBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybUdldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3koKQogewotICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZUphciA9IFdlYkNvcmU6OnNvdXBD
b29raWVKYXIoKTsKLSAgICBTb3VwQ29va2llSmFyQWNjZXB0UG9saWN5IHNvdXBQb2xpY3k7Ci0K
LSAgICBIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeTsKLQotICAgIHNvdXBQb2xpY3kgPSBz
b3VwX2Nvb2tpZV9qYXJfZ2V0X2FjY2VwdF9wb2xpY3koY29va2llSmFyKTsKLSAgICBzd2l0Y2gg
KHNvdXBQb2xpY3kpIHsKKyAgICBzd2l0Y2ggKHNvdXBfY29va2llX2phcl9nZXRfYWNjZXB0X3Bv
bGljeShOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLmNvb2tp
ZVN0b3JhZ2UoKSkpIHsKICAgICBjYXNlIFNPVVBfQ09PS0lFX0pBUl9BQ0NFUFRfQUxXQVlTOgot
ICAgICAgICBwb2xpY3kgPSBIVFRQQ29va2llQWNjZXB0UG9saWN5QWx3YXlzOwotICAgICAgICBi
cmVhazsKKyAgICAgICAgcmV0dXJuIEhUVFBDb29raWVBY2NlcHRQb2xpY3lBbHdheXM7CiAgICAg
Y2FzZSBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX05FVkVSOgotICAgICAgICBwb2xpY3kgPSBIVFRQ
Q29va2llQWNjZXB0UG9saWN5TmV2ZXI7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4g
SFRUUENvb2tpZUFjY2VwdFBvbGljeU5ldmVyOwogICAgIGNhc2UgU09VUF9DT09LSUVfSkFSX0FD
Q0VQVF9OT19USElSRF9QQVJUWToKLSAgICAgICAgcG9saWN5ID0gSFRUUENvb2tpZUFjY2VwdFBv
bGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBwb2xpY3kgPSBIVFRQQ29va2llQWNjZXB0UG9saWN5QWx3YXlzOworICAg
ICAgICByZXR1cm4gSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9t
YWluOwogICAgIH0KLSAgICByZXR1cm4gcG9saWN5OworCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIEhUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVu
dERvbWFpbjsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzZXRDb29raWVQZXJzaXN0ZW50
U3RvcmFnZShjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCB1aW50MzJfdCBzdG9yYWdlVHlwZSkK
QEAgLTgyLDkgKzczLDkgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzZXRDb29raWVQZXJzaXN0
ZW50U3RvcmFnZShjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCB1aW4KICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgc291cF9jb29raWVfamFyX3NldF9hY2NlcHRf
cG9saWN5KGphci5nZXQoKSwgc291cF9jb29raWVfamFyX2dldF9hY2NlcHRfcG9saWN5KFdlYkNv
cmU6OnNvdXBDb29raWVKYXIoKSkpOwotICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNl
c3Npb24oKS5zZXRDb29raWVKYXIoamFyLmdldCgpKTsKLSAgICBXZWJDb3JlOjpzZXRTb3VwQ29v
a2llSmFyKGphci5nZXQoKSk7CisgICAgYXV0byYgc3RvcmFnZVNlc3Npb24gPSBOZXR3b3JrU3Rv
cmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOworICAgIHNvdXBfY29va2llX2ph
cl9zZXRfYWNjZXB0X3BvbGljeShqYXIuZ2V0KCksIHNvdXBfY29va2llX2phcl9nZXRfYWNjZXB0
X3BvbGljeShzdG9yYWdlU2Vzc2lvbi5jb29raWVTdG9yYWdlKCkpKTsKKyAgICBzdG9yYWdlU2Vz
c2lvbi5zb3VwTmV0d29ya1Nlc3Npb24oKS5zZXRDb29raWVKYXIoamFyLmdldCgpKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3
b3JraW5nQ29udGV4dC5jcHAKaW5kZXggZTZiNTY0Y2E0YWEuLjI2MGZiMmZjNTczIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwCkBAIC0zMSw3
ICszMSw2IEBACiAjaW5jbHVkZSAiU2Vzc2lvblRyYWNrZXIuaCIKICNpbmNsdWRlICJXZWJGcmFt
ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZUphclNv
dXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvU2Vzc2lvbklELmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgpA
QCAtNjgsMTEgKzY3LDEwIEBAIHZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2V0Q29v
a2llQWNjZXB0UG9saWN5Rm9yQWxsQ29udGV4dHMoSFRUUENvb2tpZUFjCiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAotICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZUphciA9IFdlYkNvcmU6OnNvdXBD
b29raWVKYXIoKTsKLSAgICBzb3VwX2Nvb2tpZV9qYXJfc2V0X2FjY2VwdF9wb2xpY3koY29va2ll
SmFyLCBzb3VwUG9saWN5KTsKKyAgICBzb3VwX2Nvb2tpZV9qYXJfc2V0X2FjY2VwdF9wb2xpY3ko
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVTdG9y
YWdlKCksIHNvdXBQb2xpY3kpOwogCiAgICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpmb3JFYWNo
KFsmXSAoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uKSB7Ci0gICAgICAgIHNv
dXBfY29va2llX2phcl9zZXRfYWNjZXB0X3BvbGljeShzZXNzaW9uLnNvdXBOZXR3b3JrU2Vzc2lv
bigpLmNvb2tpZUphcigpLCBzb3VwUG9saWN5KTsKKyAgICAgICAgc291cF9jb29raWVfamFyX3Nl
dF9hY2NlcHRfcG9saWN5KHNlc3Npb24uY29va2llU3RvcmFnZSgpLCBzb3VwUG9saWN5KTsKICAg
ICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvV2Vi
UHJvY2Vzc01haW5FZmwuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvV2ViUHJv
Y2Vzc01haW5FZmwuY3BwCmluZGV4IDQ2MTFjNmUzODE3Li4yNDE5M2M4ZDkwNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvV2ViUHJvY2Vzc01haW5FZmwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1dlYlByb2Nlc3NNYWluRWZsLmNwcApA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KICNpbmNsdWRlIDxFZGpl
Lmg+CiAjaW5jbHVkZSA8RWZyZWV0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFn
ZVNlc3Npb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NvdXBOZXR3b3JrU2Vzc2lvbi5oPgogI2lu
Y2x1ZGUgPGxpYnNvdXAvc291cC5oPgogCkBAIC05OCw3ICs5OSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgaWYgKCFlY29yZV9tYWluX2xvb3BfZ2xpYl9pbnRlZ3JhdGUoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgICAgICBTb3VwTmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9u
KCkuc2V0dXBIVFRQUHJveHlGcm9tRW52aXJvbm1lbnQoKTsKKyAgICAgICAgTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5zb3VwTmV0d29ya1Nlc3Npb24oKS5z
ZXR1cEhUVFBQcm94eUZyb21FbnZpcm9ubWVudCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAK
</data>
<flag name="review"
          id="320786"
          type_id="1"
          status="+"
          setter="svillar"
    />
          </attachment>
      

    </bug>

</bugzilla>