<?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>73093</bug_id>
          
          <creation_ts>2011-11-24 13:23:33 -0800</creation_ts>
          <short_desc>InspectorServer: Add a Generic WebSocket Server.</short_desc>
          <delta_ts>2012-04-03 06:34:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>73094</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jocelyn Turcotte">jturcotte</reporter>
          <assigned_to name="Jocelyn Turcotte">jturcotte</assigned_to>
          <cc>hausmann</cc>
    
    <cc>joepeck</cc>
    
    <cc>menard</cc>
    
    <cc>thomas</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yael</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>508881</commentid>
    <comment_count>0</comment_count>
      <attachid>116539</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-11-24 13:23:33 -0800</bug_when>
    <thetext>Created attachment 116539
Original New Part 3 patch

Tracks the &quot;New Part 3&quot; and &quot;New Part 4&quot; patches of bug #51364.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508882</commentid>
    <comment_count>1</comment_count>
      <attachid>116540</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-11-24 13:23:52 -0800</bug_when>
    <thetext>Created attachment 116540
Original New Part 4 patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508883</commentid>
    <comment_count>2</comment_count>
      <attachid>116541</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-11-24 13:28:53 -0800</bug_when>
    <thetext>Created attachment 116541
Patch

This replaces parts 3 and 4.
The shared logic was exposed as static methods of WebSocketHandshake instead of straight in the namespace as Patch 3 did.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515299</commentid>
    <comment_count>3</comment_count>
      <attachid>117917</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-12-05 12:34:01 -0800</bug_when>
    <thetext>Created attachment 117917
Patch

Changes from last patch:
- Removed the server socket abstraction (bug #73090) and merged it into WebSocketServer.
- Moved WebSocketServer from WebCore to WebKit2 until it needs to belong there. It still uses static methods from the client WebSocket code inWebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536209</commentid>
    <comment_count>4</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2012-01-14 12:50:55 -0800</bug_when>
    <thetext>You should merge the patch from https://gitorious.org/~jturcotte/webkit/jturcottes-webkit/commit/4512d6e8a37bad10fa9fd20286fc24b6339a2d9b into this one.
Without that patch I was getting a protocol error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556660</commentid>
    <comment_count>5</comment_count>
      <attachid>117917</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-02-14 15:15:02 -0800</bug_when>
    <thetext>Comment on attachment 117917
Patch

r- per comment #4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591343</commentid>
    <comment_count>6</comment_count>
      <attachid>134621</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-03-29 11:17:54 -0700</bug_when>
    <thetext>Created attachment 134621
Patch

Rebased and merged in the fixup patch specified in comment #4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591400</commentid>
    <comment_count>7</comment_count>
      <attachid>134621</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-29 11:54:16 -0700</bug_when>
    <thetext>Comment on attachment 134621
Patch

Attachment 134621 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12194417</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593349</commentid>
    <comment_count>8</comment_count>
      <attachid>134621</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-04-02 04:48:50 -0700</bug_when>
    <thetext>Comment on attachment 134621
Patch

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

This looks pretty good to me.

&gt; Source/WebKit2/ChangeLog:10
&gt; +        that handles passes on what it doesn&apos;t know on to its Client for extended

client*

&gt; Source/WebKit2/ChangeLog:13
&gt; +        There are no tests yet for a built-in WebSocket server.

Better explain why

&gt; Source/WebCore/platform/network/qt/SocketStreamHandleQt.cpp:193
&gt; +    m_p = new SocketStreamHandlePrivate(this, socket);

I think m_impl is more common in webkit code

&gt; Source/WebKit2/UIProcess/InspectorServer/WebSocketServer.cpp:31
&gt; +#include &quot;config.h&quot;
&gt; +
&gt; +#if ENABLE(INSPECTOR_SERVER)
&gt; +
&gt; +#include &quot;WebSocketServer.h&quot;

Wouldn&apos;t it makes sense to include the config.h after the ENABLE and then immediately follow it by the header file

&gt; Source/WebKit2/UIProcess/InspectorServer/WebSocketServer.cpp:85
&gt; +    for (Deque&lt;OwnPtr&lt;WebSocketServerConnection&gt; &gt;::iterator iter = m_connections.begin(); iter != end; ++iter) {

nit, we normally just use &apos;it&apos; and not &apos;iter&apos;

&gt; Source/WebKit2/UIProcess/InspectorServer/WebSocketServer.cpp:89
&gt; +            m_connections.remove(iter);
&gt; +            break;
&gt; +        }

should we assert if it is not found?

&gt; Source/WebKit2/UIProcess/InspectorServer/WebSocketServerClient.h:46
&gt; +    // Received an HTTP request but don&apos;t know what to do with it.

didn&apos;t know ?

&gt; Source/WebKit2/UIProcess/InspectorServer/WebSocketServerConnection.cpp:41
&gt; +#include &lt;wtf/UnusedParam.h&gt;

Where are you using that?

&gt; Source/WebKit2/UIProcess/InspectorServer/WebSocketServerConnection.cpp:87
&gt; +    WebSocketFrame frame(WebSocketFrame::OpCodeText, true, false, false, payload.data(), payload.length());

true, false, false :-) Very hard to understand what that means, comments?

&gt; Source/WebKit2/UIProcess/InspectorServer/WebSocketServerConnection.cpp:104
&gt; +    for (HTTPHeaderMap::const_iterator iter = headerFields.begin(); iter != end; ++iter) {

it?

&gt; Source/WebKit2/UIProcess/InspectorServer/WebSocketServerConnection.cpp:146
&gt; +    // HTTP Mode.
&gt; +    if (m_mode == HTTP) {
&gt; +        readHTTPMessage();
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    // Web Socket Mode.
&gt; +    if (m_mode == WebSocket) {
&gt; +        readWebSocketFrames();
&gt; +        return;
&gt; +    }

why not switch?

&gt; Source/WebKit2/UIProcess/InspectorServer/WebSocketServerConnection.cpp:156
&gt; +void WebSocketServerConnection::didFailSocketStream(SocketStreamHandle*, const SocketStreamError&amp;)
&gt; +{
&gt; +    // Possible read or write error.
&gt; +}
&gt; +

ASSERT_NOT_REACHED?

&gt; Source/WebKit2/UIProcess/InspectorServer/WebSocketServerConnection.cpp:175
&gt; +    if (upgradeHeaderValue == &quot;WebSocket&quot;)
&gt; +        LOG_ERROR(&quot;WebSocket protocol version &lt; Hybi-10 not supported. Upgrade your client.&quot;);

No return here? comment?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593387</commentid>
    <comment_count>9</comment_count>
      <attachid>134621</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-04-02 05:24:36 -0700</bug_when>
    <thetext>Comment on attachment 134621
Patch

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

Only nitpicks from my side, after Kenneth&apos;s review. Let&apos;s do another round :)

&gt;&gt; Source/WebKit2/ChangeLog:10
&gt;&gt; +        that handles passes on what it doesn&apos;t know on to its Client for extended
&gt; 
&gt; client*

and remove &quot;handles&quot;, so the sentence just reads &quot;... server that passes on what it doesn&apos;t know ...&quot;

&gt; Source/WebCore/platform/network/qt/SocketStreamHandleQt.cpp:90
&gt; +#ifndef QT_NO_OPENSSL

It&apos;s not exactly related to your patch, but I don&apos;t think we should disable the websocket feature altogether if Qt comes without SSL support. So I don&apos;t think we need the #ifdef here :)

&gt; Source/WebKit2/UIProcess/InspectorServer/WebSocketServerConnection.cpp:111
&gt; +    CString header = builder.toString().latin1();

I hope this is as efficient as we want it to be ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593447</commentid>
    <comment_count>10</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-04-02 07:32:17 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; Source/WebCore/platform/network/qt/SocketStreamHandleQt.cpp:193
&gt; &gt; +    m_p = new SocketStreamHandlePrivate(this, socket);
&gt; 
&gt; I think m_impl is more common in webkit code
&gt; 
Humm it&apos;s not quite an impl here, it&apos;s more just a class that inherits QObject to allow us using signals/slots. Since I didn&apos;t chose the name in this patch I think I&apos;ll leave it.

&gt; &gt; Source/WebKit2/UIProcess/InspectorServer/WebSocketServer.cpp:31
&gt; &gt; +#include &quot;config.h&quot;
&gt; &gt; +
&gt; &gt; +#if ENABLE(INSPECTOR_SERVER)
&gt; &gt; +
&gt; &gt; +#include &quot;WebSocketServer.h&quot;
&gt; 
&gt; Wouldn&apos;t it makes sense to include the config.h after the ENABLE and then immediately follow it by the header file
&gt; 
I think ENABLE is ultimately defined through config.h.

&gt; &gt; Source/WebKit2/UIProcess/InspectorServer/WebSocketServerConnection.cpp:156
&gt; &gt; +void WebSocketServerConnection::didFailSocketStream(SocketStreamHandle*, const SocketStreamError&amp;)
&gt; &gt; +{
&gt; &gt; +    // Possible read or write error.
&gt; &gt; +}
&gt; &gt; +
&gt; 
&gt; ASSERT_NOT_REACHED?
&gt; 
An assert could be bothersome in unstable networks, without much benefit since the code should work in those situations anyway.

(In reply to comment #9)
&gt; &gt; Source/WebCore/platform/network/qt/SocketStreamHandleQt.cpp:90
&gt; &gt; +#ifndef QT_NO_OPENSSL
&gt; 
&gt; It&apos;s not exactly related to your patch, but I don&apos;t think we should disable the websocket feature altogether if Qt comes without SSL support. So I don&apos;t think we need the #ifdef here :)
&gt; 
Humm I&apos;m not sure I see what you mean, this is only supposed to guard references to QSslSocket.

&gt; &gt; Source/WebKit2/UIProcess/InspectorServer/WebSocketServerConnection.cpp:111
&gt; &gt; +    CString header = builder.toString().latin1();
&gt; 
&gt; I hope this is as efficient as we want it to be ;)
Well I didn&apos;t notice any slowdown yet, neither on devices :)

I&apos;m uploading a patch fixing the rest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593451</commentid>
    <comment_count>11</comment_count>
      <attachid>135097</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-04-02 07:33:55 -0700</bug_when>
    <thetext>Created attachment 135097
Patch

Fixing the rest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593602</commentid>
    <comment_count>12</comment_count>
      <attachid>135097</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-04-02 11:01:45 -0700</bug_when>
    <thetext>Comment on attachment 135097
Patch

Attachment 135097 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12306786</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594432</commentid>
    <comment_count>13</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-04-03 06:34:59 -0700</bug_when>
    <thetext>Committed r113026: &lt;http://trac.webkit.org/changeset/113026&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116539</attachid>
            <date>2011-11-24 13:23:33 -0800</date>
            <delta_ts>2011-11-24 13:28:36 -0800</delta_ts>
            <desc>Original New Part 3 patch</desc>
            <filename>new-part-3.patch</filename>
            <type>text/plain</type>
            <size>21291</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYjg0MDQxMC4uNWMxODM0NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE2MDEsNiArMTYwMSw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICB3ZWJz
b2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcAogICAgIHdlYnNvY2tldHMvV2Vi
U29ja2V0LmNwcAogICAgIHdlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAKKyAgICB3ZWJz
b2NrZXRzL1dlYlNvY2tldEZyYW1pbmcuY3BwCiAgICAgd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5k
c2hha2UuY3BwCiAgICAgd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0LmNwcAog
ICAgIHdlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggMDQ1MDU2NS4uMTRhZDkwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDExLTAx
LTI2ICBKb3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogUmVtb3Rl
IFdlYiBJbnNwZWN0b3IgLSBDcm9zcyBQbGF0Zm9ybSBJbnNwZWN0b3JTZXJ2ZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxMzY0CisKKyAgICAgICAg
UGFydCAzIC0gR2VuZXJhbGl6ZWQgV2ViU29ja2V0IEZyYW1lIFBhcnNpbmcgYW5kIENyZWF0aW5n
LgorCisgICAgICAgIFRoaXMgaXMgbW9kZWxsZWQgYWZ0ZXIgdGhlIHJlY2VudGx5IGFkZGVkIGdl
bmVyaWMgSFRUUFBhcnNlcnMuY3BwIGZ1bmN0aW9ucworICAgICAgICBmb3IgcGFyc2luZyBIVFRQ
IGluZm9ybWF0aW9uIGZyb20gYSBidWZmZXIuIFRoZSBhbGdvcml0aG0gaGFzbid0IGNoYW5nZWQs
CisgICAgICAgIGJ1dCB0byBiZSBsZXNzIHRpZWQgdG8gdGhlIFdlYlNvY2tldENoYW5uZWwgaW50
ZXJuYWxzIHRoZXJlIHdlcmUgc29tZSBtaW5vcgorICAgICAgICBjaGFuZ2VzLgorCisgICAgICAg
IFRoaXMgd2lsbCBiZSB1c2VkIGxhdGVyIG9uIGJ5IGEgV2ViU29ja2V0IHNlcnZlciB0byByZWFk
IGFuZCB3cml0ZQorICAgICAgICBpdHMgb3duIFdlYlNvY2tldCBtZXNzYWdlcyBvdmVyIGl0cyBv
d24gc29ja2V0LCBub3QgYSBXZWJTb2NrZXRDaGFubmVsCisgICAgICAgIHdoaWNoIGlzIG92ZXJ3
aGVsbWluZ2x5IHRpZWQgdG8gYmVpbmcgYSBXZWJTb2NrZXQgY2xpZW50LgorCisgICAgICAgIENv
dmVyZWQgYnkgZXhpc3Rpbmcgd2Vic29ja2V0IHRlc3RzLgorCisgICAgICAgICogd2Vic29ja2V0
cy9XZWJTb2NrZXRDaGFubmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldENoYW5u
ZWw6OnNlbmQpOiB1c2UgV2ViU29ja2V0RnJhbWluZyBoZWxwZXIuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJTb2NrZXRDaGFubmVsOjpwcm9jZXNzQnVmZmVyKTogdXNlIFdlYlNvY2tldEZyYW1pbmcg
aGVscGVyLgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0RnJhbWluZy5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6ZnJhbWVXZWJTb2NrZXRUZXh0TWVzc2FnZSk6IEdlbmVyYWxp
emVkIGFsZ29yaXRobSBmb3IgZnJhbWluZyBmcm9tIFdlYlNvY2tldENoYW5uZWwuCisgICAgICAg
IChXZWJDb3JlOjpwYXJzZVdlYlNvY2tldEZyYW1lKTogR2VuZXJhbGl6ZWQgYWxnb3JpdGhtIGZv
ciBwYXJzaW5nIGEgZnJhbWUgZnJvbSBXZWJTb2NrZXRDaGFubmVsLgorICAgICAgICAqIHdlYnNv
Y2tldHMvV2ViU29ja2V0RnJhbWluZy5oOiBBZGRlZC4KKworICAgICAgICAgIE1pc2NlbGxhbmVv
dXMuIEFkZCBuZXcgZmlsZXMgdG8gdGhlIGJ1aWxkLgorICAgICAgICAgIE5vdGUsIEFuZHJvaWQu
bWsgZGlkbid0IGhhdmUgd2Vic29ja2V0IGZpbGVzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgor
ICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwog
MjAxMS0wMS0yNCAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBi
NjkwOGNhLi4wOTJlOTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMzUwOCw2ICszNTA4LDgg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNv
Y2tldENoYW5uZWwuaCBcCiAJU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEZyYW1pbmcuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS93
ZWJzb2NrZXRzL1dlYlNvY2tldEZyYW1pbmcuaCBcCiAJU291cmNlL1dlYkNvcmUvd2Vic29ja2V0
cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dl
YlNvY2tldEhhbmRzaGFrZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tl
dEhhbmRzaGFrZVJlcXVlc3QuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhM2MxZWU4Li5jMzA0
OWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00NTAxLDYgKzQ1MDEsOCBAQAogICAgICAgICAgICAg
J3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAnLAogICAgICAgICAgICAgJ3dlYnNvY2tl
dHMvV2ViU29ja2V0Q2hhbm5lbC5oJywKICAgICAgICAgICAgICd3ZWJzb2NrZXRzL1dlYlNvY2tl
dENoYW5uZWxDbGllbnQuaCcsCisgICAgICAgICAgICAnd2Vic29ja2V0cy9XZWJTb2NrZXRGcmFt
aW5nLmNwcCcsCisgICAgICAgICAgICAnd2Vic29ja2V0cy9XZWJTb2NrZXRGcmFtaW5nLmgnLAog
ICAgICAgICAgICAgJ3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcCcsCiAgICAgICAg
ICAgICAnd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuaCcsCiAgICAgICAgICAgICAnd2Vi
c29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4
IDg4M2ZjMWYuLmQ4YzMzM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJv
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0zNzE5LDYgKzM3MTksNyBAQCBj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCX1NPQ0tFVFM9MSkgewogICAgICAgICB3ZWJzb2Nr
ZXRzL1dlYlNvY2tldC5oIFwKICAgICAgICAgd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmgg
XAogICAgICAgICB3ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWxDbGllbnQuaCBcCisgICAgICAg
IHdlYnNvY2tldHMvV2ViU29ja2V0RnJhbWluZy5oIFwKICAgICAgICAgd2Vic29ja2V0cy9XZWJT
b2NrZXRIYW5kc2hha2UuaCBcCiAgICAgICAgIHdlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtl
UmVxdWVzdC5oIFwKICAgICAgICAgd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2VSZXNwb25z
ZS5oIFwKQEAgLTM3MjgsNiArMzcyOSw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJf
U09DS0VUUz0xKSB7CiAgICAgU09VUkNFUyArPSBcCiAgICAgICAgIHdlYnNvY2tldHMvV2ViU29j
a2V0LmNwcCBcCiAgICAgICAgIHdlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAgXAorICAg
ICAgICB3ZWJzb2NrZXRzL1dlYlNvY2tldEZyYW1pbmcuY3BwIFwKICAgICAgICAgd2Vic29ja2V0
cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwIFwKICAgICAgICAgd2Vic29ja2V0cy9XZWJTb2NrZXRI
YW5kc2hha2VSZXF1ZXN0LmNwcCBcCiAgICAgICAgIHdlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNo
YWtlUmVzcG9uc2UuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKaW5kZXggYjRiYmIyNC4uZjcxNzRkMiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTY2MTI2LDYgKzY2MTI2LDE0IEBACiAJCQkJ
PgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHdlYnNvY2tldHNc
V2ViU29ja2V0RnJhbWluZy5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHdlYnNvY2tldHNcV2ViU29ja2V0RnJhbWluZy5oIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlx3ZWJzb2NrZXRzXFdlYlNv
Y2tldEhhbmRzaGFrZS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGI0YmYxYWQuLjYxNWFk
YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTMxNTMsNiArMzE1Myw4IEBACiAJCUE1N0RDNERCMTJFN0M3NkMwMEM3QTI5QyAv
KiBTZXJ2ZXJTb2NrZXRIYW5kbGVCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE1N0RDNEQ5MTJFN0M3NkMwMEM3QTI5QyAvKiBTZXJ2ZXJTb2Nr
ZXRIYW5kbGVCYXNlLmNwcCAqLzsgfTsKIAkJQTU3REM0RUExMkU3RDNEOTAwQzdBMjlDIC8qIFNl
cnZlclNvY2tldEhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTU3REM0RTgxMkU3RDNEOTAwQzdBMjlDIC8qIFNlcnZlclNvY2tldEhhbmRsZS5o
ICovOyB9OwogCQlBNTdEQzRFQjEyRTdEM0Q5MDBDN0EyOUMgLyogU2VydmVyU29ja2V0SGFuZGxl
Q0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTU3REM0RTkxMkU3RDNEOTAwQzdBMjlDIC8qIFNlcnZlclNvY2tldEhhbmRsZUNGTmV0LmNwcCAq
LzsgfTsKKwkJQTU4NzQ4MUIxMkVGOEY5OTAwMDNGNkYwIC8qIFdlYlNvY2tldEZyYW1pbmcuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU4NzQ4MTkx
MkVGOEY5OTAwMDNGNkYwIC8qIFdlYlNvY2tldEZyYW1pbmcuY3BwICovOyB9OworCQlBNTg3NDgx
QzEyRUY4Rjk5MDAwM0Y2RjAgLyogV2ViU29ja2V0RnJhbWluZy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU4NzQ4MUExMkVGOEY5OTAwMDNGNkYwIC8q
IFdlYlNvY2tldEZyYW1pbmcuaCAqLzsgfTsKIAkJQTU5RTNDMUUxMTU4MEY1MTAwNzI5MjhFIC8q
IEtleUV2ZW50Q29kZXNJUGhvbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE1OUUzQzFDMTE1ODBGNTEwMDcyOTI4RSAvKiBLZXlFdmVudENvZGVzSVBo
b25lLmggKi87IH07CiAJCUE1OUUzQzFGMTE1ODBGNTEwMDcyOTI4RSAvKiBLZXlFdmVudElQaG9u
ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1OUUz
QzFEMTE1ODBGNTEwMDcyOTI4RSAvKiBLZXlFdmVudElQaG9uZS5tbSAqLzsgfTsKIAkJQTVBRkIz
NEYxMTUxNTFBNzAwQjA0NUNCIC8qIFN0ZXBSYW5nZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUFGQjM0RDExNTE1MUE3MDBCMDQ1Q0IgLyogU3Rl
cFJhbmdlLmNwcCAqLzsgfTsKQEAgLTk1MjQsNiArOTUyNiw4IEBACiAJCUE1N0RDNEQ5MTJFN0M3
NkMwMEM3QTI5QyAvKiBTZXJ2ZXJTb2NrZXRIYW5kbGVCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlcnZlclNvY2tldEhhbmRsZUJhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBNTdEQzRFODEyRTdEM0Q5MDBDN0EyOUMgLyogU2VydmVy
U29ja2V0SGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlcnZlclNv
Y2tldEhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTdEQzRFOTEyRTdE
M0Q5MDBDN0EyOUMgLyogU2VydmVyU29ja2V0SGFuZGxlQ0ZOZXQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VydmVyU29ja2V0SGFuZGxlQ0ZOZXQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNTg3NDgxOTEyRUY4Rjk5MDAwM0Y2RjAgLyogV2Vi
U29ja2V0RnJhbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
ZWJTb2NrZXRGcmFtaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTU4NzQ4
MUExMkVGOEY5OTAwMDNGNkYwIC8qIFdlYlNvY2tldEZyYW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViU29ja2V0RnJhbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBNTlFM0MxQzExNTgwRjUxMDA3MjkyOEUgLyogS2V5RXZlbnRDb2Rlc0lQaG9u
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBLZXlFdmVudENvZGVzSVBob25l
Lmg7IHBhdGggPSBpcGhvbmUvS2V5RXZlbnRDb2Rlc0lQaG9uZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBNTlFM0MxRDExNTgwRjUxMDA3MjkyOEUgLyogS2V5RXZlbnRJUGhvbmUu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBLZXlFdmVudElQaG9u
ZS5tbTsgcGF0aCA9IGlwaG9uZS9LZXlFdmVudElQaG9uZS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTVBRkIzNEQxMTUxNTFBNzAwQjA0NUNCIC8qIFN0ZXBSYW5nZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdGVwUmFuZ2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM2MTQsNiArMTM2MTgsOCBAQAogCQkJCTUxMEQ0QTQ3
MTAzMTc3QTIwMDQ5RUE1NCAvKiBXZWJTb2NrZXRDaGFubmVsLmNwcCAqLywKIAkJCQk1MTBENEE0
ODEwMzE3N0EyMDA0OUVBNTQgLyogV2ViU29ja2V0Q2hhbm5lbC5oICovLAogCQkJCTUxMEQ0QTQ5
MTAzMTc3QTIwMDQ5RUE1NCAvKiBXZWJTb2NrZXRDaGFubmVsQ2xpZW50LmggKi8sCisJCQkJQTU4
NzQ4MTkxMkVGOEY5OTAwMDNGNkYwIC8qIFdlYlNvY2tldEZyYW1pbmcuY3BwICovLAorCQkJCUE1
ODc0ODFBMTJFRjhGOTkwMDAzRjZGMCAvKiBXZWJTb2NrZXRGcmFtaW5nLmggKi8sCiAJCQkJNTFB
QkFFNDIxMDQzQUI0QTAwOEM1MjYwIC8qIFdlYlNvY2tldEhhbmRzaGFrZS5jcHAgKi8sCiAJCQkJ
NTFBQkFFNDMxMDQzQUI0QTAwOEM1MjYwIC8qIFdlYlNvY2tldEhhbmRzaGFrZS5oICovLAogCQkJ
CTc2MzdDNTQwMTEyRTdCNzQwMDNENkNEQyAvKiBXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0LmNw
cCAqLywKQEAgLTIyMzcxLDYgKzIyMzc3LDcgQEAKIAkJCQlBNTdEQzRFQTEyRTdEM0Q5MDBDN0Ey
OUMgLyogU2VydmVyU29ja2V0SGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUQyMTRCMjEy
RTkwNTUxMDA5MEYzNzAgLyogSFRUUFJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RDIx
NEIzMTJFOTA1NTEwMDkwRjM3MCAvKiBIVFRQUGFyc2VFcnJvci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQTU4NzQ4MUMxMkVGOEY5OTAwMDNGNkYwIC8qIFdlYlNvY2tldEZyYW1pbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpAQCAtMjUwNjIsNiArMjUwNjksNyBAQAogCQkJCUE1N0RDNERCMTJFN0M3NkMwMEM3
QTI5QyAvKiBTZXJ2ZXJTb2NrZXRIYW5kbGVCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
N0RDNEVCMTJFN0QzRDkwMEM3QTI5QyAvKiBTZXJ2ZXJTb2NrZXRIYW5kbGVDRk5ldC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNUQyMTRCMTEyRTkwNTUxMDA5MEYzNzAgLyogSFRUUFJlcXVlc3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTU4NzQ4MUIxMkVGOEY5OTAwMDNGNkYwIC8qIFdlYlNv
Y2tldEZyYW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvd2Vic29j
a2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAppbmRleCAyNjFkY2Q2Li4zMjliMzEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAKQEAgLTQ1LDYg
KzQ1LDcgQEAKICNpbmNsdWRlICJTb2NrZXRTdHJlYW1FcnJvci5oIgogI2luY2x1ZGUgIlNvY2tl
dFN0cmVhbUhhbmRsZS5oIgogI2luY2x1ZGUgIldlYlNvY2tldENoYW5uZWxDbGllbnQuaCIKKyNp
bmNsdWRlICJXZWJTb2NrZXRGcmFtaW5nLmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0SGFuZHNoYWtl
LmgiCiAKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC05NywxMSArOTgsOSBAQCBi
b29sIFdlYlNvY2tldENoYW5uZWw6OnNlbmQoY29uc3QgU3RyaW5nJiBtc2cpCiAgICAgTE9HKE5l
dHdvcmssICJXZWJTb2NrZXRDaGFubmVsICVwIHNlbmQgJXMiLCB0aGlzLCBtc2cudXRmOCgpLmRh
dGEoKSk7CiAgICAgQVNTRVJUKG1faGFuZGxlKTsKICAgICBBU1NFUlQoIW1fc3VzcGVuZGVkKTsK
KwogICAgIFZlY3RvcjxjaGFyPiBidWY7Ci0gICAgYnVmLmFwcGVuZCgnXDAnKTsgIC8vIGZyYW1l
IHR5cGUKLSAgICBDU3RyaW5nIHV0ZjggPSBtc2cudXRmOCgpOwotICAgIGJ1Zi5hcHBlbmQodXRm
OC5kYXRhKCksIHV0ZjgubGVuZ3RoKCkpOwotICAgIGJ1Zi5hcHBlbmQoJ1x4ZmYnKTsgIC8vIGZy
YW1lIGVuZAorICAgIGZyYW1lV2ViU29ja2V0VGV4dE1lc3NhZ2UobXNnLCBidWYpOwogICAgIHJl
dHVybiBtX2hhbmRsZS0+c2VuZChidWYuZGF0YSgpLCBidWYuc2l6ZSgpKTsKIH0KIApAQCAtMzA2
LDQ1ICszMDUsMTkgQEAgYm9vbCBXZWJTb2NrZXRDaGFubmVsOjpwcm9jZXNzQnVmZmVyKCkKICAg
ICBpZiAobV9oYW5kc2hha2UubW9kZSgpICE9IFdlYlNvY2tldEhhbmRzaGFrZTo6Q29ubmVjdGVk
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCBjaGFyKiBuZXh0RnJhbWUgPSBt
X2J1ZmZlcjsKLSAgICBjb25zdCBjaGFyKiBwID0gbV9idWZmZXI7Ci0gICAgY29uc3QgY2hhciog
ZW5kID0gcCArIG1fYnVmZmVyU2l6ZTsKIAotICAgIHVuc2lnbmVkIGNoYXIgZnJhbWVCeXRlID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKnArKyk7Ci0gICAgaWYgKChmcmFtZUJ5dGUgJiAw
eDgwKSA9PSAweDgwKSB7Ci0gICAgICAgIHNpemVfdCBsZW5ndGggPSAwOwotICAgICAgICBib29s
IGVycm9yRnJhbWUgPSBmYWxzZTsKLSAgICAgICAgd2hpbGUgKHAgPCBlbmQpIHsKLSAgICAgICAg
ICAgIGlmIChsZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC8gMTI4
KSB7Ci0gICAgICAgICAgICAgICAgTE9HKE5ldHdvcmssICJmcmFtZSBsZW5ndGggb3ZlcmZsb3cg
JWx1Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obGVuZ3RoKSk7Ci0gICAgICAgICAgICAg
ICAgZXJyb3JGcmFtZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBzaXplX3QgbmV3TGVuZ3RoID0gbGVuZ3RoICogMTI4OwotICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciBtc2dCeXRlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
KnApOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aE1zZ0J5dGUgPSBtc2dCeXRlICYg
MHg3ZjsKLSAgICAgICAgICAgIGlmIChuZXdMZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNp
emVfdD46Om1heCgpIC0gbGVuZ3RoTXNnQnl0ZSkgewotICAgICAgICAgICAgICAgIExPRyhOZXR3
b3JrLCAiZnJhbWUgbGVuZ3RoIG92ZXJmbG93ICVsdSsldSIsIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KG5ld0xlbmd0aCksIGxlbmd0aE1zZ0J5dGUpOwotICAgICAgICAgICAgICAgIGVycm9y
RnJhbWUgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgbmV3TGVuZ3RoICs9IGxlbmd0aE1zZ0J5dGU7Ci0gICAgICAgICAgICBpZiAobmV3
TGVuZ3RoIDwgbGVuZ3RoKSB7IC8vIHNhbml0eSBjaGVjawotICAgICAgICAgICAgICAgIExPRyhO
ZXR3b3JrLCAiZnJhbWUgbGVuZ3RoIGludGVnZXIgd3JhcCAlbHUtPiVsdSIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmc+KGxlbmd0aCksIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG5ld0xl
bmd0aCkpOwotICAgICAgICAgICAgICAgIGVycm9yRnJhbWUgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVuZ3RoID0gbmV3TGVuZ3Ro
OwotICAgICAgICAgICAgKytwOwotICAgICAgICAgICAgaWYgKCEobXNnQnl0ZSAmIDB4ODApKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwICsgbGVuZ3Ro
IDwgcCkgewotICAgICAgICAgICAgTE9HKE5ldHdvcmssICJmcmFtZSBidWZmZXIgcG9pbnRlciB3
cmFwICVwKyVsdS0+JXAiLCBwLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihsZW5ndGgpLCBw
ICsgbGVuZ3RoKTsKLSAgICAgICAgICAgIGVycm9yRnJhbWUgPSB0cnVlOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChlcnJvckZyYW1lKSB7Ci0gICAgICAgICAgICBza2lwQnVmZmVyKG1fYnVmZmVy
U2l6ZSk7IC8vIFNhdmUgbWVtb3J5LgorICAgIGJvb2wgaW5jb21wbGV0ZSA9IGZhbHNlOworICAg
IGJvb2wgZXJyb3IgPSBmYWxzZTsKKyAgICBWZWN0b3I8Y2hhcj4gbWVzc2FnZTsKKyAgICBXZWJT
b2NrZXRGcmFtZVR5cGUgZnJhbWVUeXBlOworICAgIHNpemVfdCBmcmFtZUxlbmd0aCA9IHBhcnNl
V2ViU29ja2V0RnJhbWUobV9idWZmZXIsIG1fYnVmZmVyU2l6ZSwgaW5jb21wbGV0ZSwgZXJyb3Is
IG1lc3NhZ2UsIGZyYW1lVHlwZSk7CisgICAgaWYgKGluY29tcGxldGUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoZnJhbWVMZW5ndGgpCisgICAgICAgIHNraXBCdWZmZXIoZnJhbWVM
ZW5ndGgpOworCisgICAgaWYgKGZyYW1lVHlwZSA9PSBCaW5hcnlGcmFtZSkgeworICAgICAgICBp
ZiAoZXJyb3IpIHsKICAgICAgICAgICAgIG1fc2hvdWxkRGlzY2FyZFJlY2VpdmVkRGF0YSA9IHRy
dWU7CiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZU1lc3NhZ2VFcnJvcigpOwogICAg
ICAgICAgICAgaWYgKCFtX2NsaWVudCkKQEAgLTM1MywzNSArMzI2LDIzIEBAIGJvb2wgV2ViU29j
a2V0Q2hhbm5lbDo6cHJvY2Vzc0J1ZmZlcigpCiAgICAgICAgICAgICAgICAgbV9oYW5kbGUtPmNs
b3NlKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgQVNT
RVJUKHAgKyBsZW5ndGggPj0gcCk7Ci0gICAgICAgIGlmIChwICsgbGVuZ3RoIDwgZW5kKSB7Ci0g
ICAgICAgICAgICBwICs9IGxlbmd0aDsKLSAgICAgICAgICAgIG5leHRGcmFtZSA9IHA7Ci0gICAg
ICAgICAgICBBU1NFUlQobmV4dEZyYW1lID4gbV9idWZmZXIpOwotICAgICAgICAgICAgc2tpcEJ1
ZmZlcihuZXh0RnJhbWUgLSBtX2J1ZmZlcik7CisKKyAgICAgICAgbV9jbGllbnQtPmRpZFJlY2Vp
dmVNZXNzYWdlRXJyb3IoKTsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyOworICAgIH0KKworICAg
IGlmIChmcmFtZVR5cGUgPT0gVGV4dEZyYW1lKSB7CisgICAgICAgIGlmIChlcnJvcikgewogICAg
ICAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVNZXNzYWdlRXJyb3IoKTsKICAgICAgICAgICAg
IHJldHVybiBtX2J1ZmZlcjsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQogCi0gICAgY29uc3QgY2hhciogbXNnU3RhcnQgPSBwOwotICAgIHdoaWxlIChwIDwgZW5kICYm
ICpwICE9ICdceGZmJykKLSAgICAgICAgKytwOwotICAgIGlmIChwIDwgZW5kICYmICpwID09ICdc
eGZmJykgewotICAgICAgICBpbnQgbXNnTGVuZ3RoID0gcCAtIG1zZ1N0YXJ0OwotICAgICAgICAr
K3A7Ci0gICAgICAgIG5leHRGcmFtZSA9IHA7Ci0gICAgICAgIGlmIChmcmFtZUJ5dGUgPT0gMHgw
MCkgewotICAgICAgICAgICAgU3RyaW5nIG1zZyA9IFN0cmluZzo6ZnJvbVVURjgobXNnU3RhcnQs
IG1zZ0xlbmd0aCk7Ci0gICAgICAgICAgICBza2lwQnVmZmVyKG5leHRGcmFtZSAtIG1fYnVmZmVy
KTsKLSAgICAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlTWVzc2FnZShtc2cpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgc2tpcEJ1ZmZlcihuZXh0RnJhbWUgLSBtX2J1ZmZlcik7
Ci0gICAgICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZU1lc3NhZ2VFcnJvcigpOwotICAgICAg
ICB9CisgICAgICAgIFN0cmluZyBtc2cgPSBTdHJpbmc6OmZyb21VVEY4KG1lc3NhZ2UuZGF0YSgp
LCBtZXNzYWdlLnNpemUoKSk7CisgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlTWVzc2FnZSht
c2cpOwogICAgICAgICByZXR1cm4gbV9idWZmZXI7CiAgICAgfQorCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEZyYW1pbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvd2Vi
c29ja2V0cy9XZWJTb2NrZXRGcmFtaW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5iYjE4YzllCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvd2Vic29j
a2V0cy9XZWJTb2NrZXRGcmFtaW5nLmNwcApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQorCisjaW5jbHVkZSAiV2ViU29ja2V0RnJh
bWluZy5oIgorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIGZyYW1lV2ViU29ja2V0VGV4dE1l
c3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBWZWN0b3I8Y2hhcj4mIGZyYW1lZE1lc3NhZ2Up
Cit7CisgICAgZnJhbWVkTWVzc2FnZS5jbGVhcigpOworICAgIGZyYW1lZE1lc3NhZ2UuYXBwZW5k
KCdcMCcpOyAvLyBGcmFtZSB0eXBlLgorICAgIENTdHJpbmcgdXRmOCA9IG1lc3NhZ2UudXRmOCgp
OworICAgIGZyYW1lZE1lc3NhZ2UuYXBwZW5kKHV0ZjguZGF0YSgpLCB1dGY4Lmxlbmd0aCgpKTsK
KyAgICBmcmFtZWRNZXNzYWdlLmFwcGVuZCgnXHhmZicpOyAvLyBGcmFtZSBlbmQuCit9CisKK3Np
emVfdCBwYXJzZVdlYlNvY2tldEZyYW1lKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhTGVu
Z3RoLCBib29sJiBpbmNvbXBsZXRlLCBib29sJiBlcnJvciwgVmVjdG9yPGNoYXI+JiBtZXNzYWdl
LCBXZWJTb2NrZXRGcmFtZVR5cGUmIHR5cGUpCit7CisgICAgaW5jb21wbGV0ZSA9IGZhbHNlOwor
ICAgIGVycm9yID0gZmFsc2U7CisgICAgbWVzc2FnZS5jbGVhcigpOworICAgIHR5cGUgPSBCaW5h
cnlGcmFtZTsKKworICAgIGNvbnN0IGNoYXIqIHAgPSBkYXRhOworICAgIGNvbnN0IGNoYXIqIGVu
ZCA9IHAgKyBkYXRhTGVuZ3RoOworCisgICAgdW5zaWduZWQgY2hhciBmcmFtZUJ5dGUgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqcCsrKTsKKyAgICBpZiAoKGZyYW1lQnl0ZSAmIDB4ODAp
ID09IDB4ODApIHsKKyAgICAgICAgdHlwZSA9IEJpbmFyeUZyYW1lOworICAgICAgICBzaXplX3Qg
bGVuZ3RoID0gMDsKKyAgICAgICAgYm9vbCBlcnJvckZyYW1lID0gZmFsc2U7CisgICAgICAgIHdo
aWxlIChwIDwgZW5kKSB7CisgICAgICAgICAgICBpZiAobGVuZ3RoID4gc3RkOjpudW1lcmljX2xp
bWl0czxzaXplX3Q+OjptYXgoKSAvIDEyOCkgeworICAgICAgICAgICAgICAgIExPRyhOZXR3b3Jr
LCAiZnJhbWUgbGVuZ3RoIG92ZXJmbG93ICVsdSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+
KGxlbmd0aCkpOworICAgICAgICAgICAgICAgIGVycm9yRnJhbWUgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2l6ZV90IG5ld0xlbmd0
aCA9IGxlbmd0aCAqIDEyODsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbXNnQnl0ZSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpwKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBs
ZW5ndGhNc2dCeXRlID0gbXNnQnl0ZSAmIDB4N2Y7CisgICAgICAgICAgICBpZiAobmV3TGVuZ3Ro
ID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIGxlbmd0aE1zZ0J5dGUpIHsK
KyAgICAgICAgICAgICAgICBMT0coTmV0d29yaywgImZyYW1lIGxlbmd0aCBvdmVyZmxvdyAlbHUr
JXUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihuZXdMZW5ndGgpLCBsZW5ndGhNc2dCeXRl
KTsKKyAgICAgICAgICAgICAgICBlcnJvckZyYW1lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5ld0xlbmd0aCArPSBsZW5ndGhNc2dC
eXRlOworICAgICAgICAgICAgaWYgKG5ld0xlbmd0aCA8IGxlbmd0aCkgeyAvLyBzYW5pdHkgY2hl
Y2sKKyAgICAgICAgICAgICAgICBMT0coTmV0d29yaywgImZyYW1lIGxlbmd0aCBpbnRlZ2VyIHdy
YXAgJWx1LT4lbHUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihsZW5ndGgpLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nPihuZXdMZW5ndGgpKTsKKyAgICAgICAgICAgICAgICBlcnJvckZy
YW1lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGxlbmd0aCA9IG5ld0xlbmd0aDsKKyAgICAgICAgICAgICsrcDsKKyAgICAgICAgICAg
IGlmICghKG1zZ0J5dGUgJiAweDgwKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBpZiAocCArIGxlbmd0aCA8IHApIHsKKyAgICAgICAgICAgIExPRyhOZXR3b3Jr
LCAiZnJhbWUgYnVmZmVyIHBvaW50ZXIgd3JhcCAlcCslbHUtPiVwIiwgcCwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZz4obGVuZ3RoKSwgcCArIGxlbmd0aCk7CisgICAgICAgICAgICBlcnJvckZy
YW1lID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXJyb3JGcmFtZSkgeworICAgICAg
ICAgICAgZXJyb3IgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGRhdGFMZW5ndGg7CisgICAg
ICAgIH0KKyAgICAgICAgQVNTRVJUKHAgKyBsZW5ndGggPj0gcCk7CisgICAgICAgIGlmIChwICsg
bGVuZ3RoIDwgZW5kKSB7CisgICAgICAgICAgICBBU1NFUlQobGVuZ3RoID4gMCk7CisgICAgICAg
ICAgICBBU1NFUlQocCA+IGRhdGEpOworICAgICAgICAgICAgc2l6ZV90IGZyYW1lTGVuZ3RoID0g
KHAgLSBkYXRhKSArIGxlbmd0aDsKKyAgICAgICAgICAgIG1lc3NhZ2UuYXBwZW5kKHAsIGxlbmd0
aCk7CisgICAgICAgICAgICByZXR1cm4gZnJhbWVMZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAg
aW5jb21wbGV0ZSA9IHRydWU7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHR5cGUg
PSBUZXh0RnJhbWU7CisgICAgY29uc3QgY2hhciogbXNnU3RhcnQgPSBwOworICAgIHdoaWxlIChw
IDwgZW5kICYmICpwICE9ICdceGZmJykKKyAgICAgICAgKytwOworICAgIGlmIChwIDwgZW5kICYm
ICpwID09ICdceGZmJykgeworICAgICAgICBzaXplX3QgbXNnTGVuZ3RoID0gcCAtIG1zZ1N0YXJ0
OworICAgICAgICArK3A7CisgICAgICAgIHNpemVfdCBmcmFtZUxlbmd0aCA9IHAgLSBkYXRhOwor
ICAgICAgICBpZiAoZnJhbWVCeXRlID09IDB4MDApCisgICAgICAgICAgICBtZXNzYWdlLmFwcGVu
ZChtc2dTdGFydCwgbXNnTGVuZ3RoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXJyb3Ig
PSB0cnVlOworICAgICAgICByZXR1cm4gZnJhbWVMZW5ndGg7CisgICAgfQorICAgIGluY29tcGxl
dGUgPSB0cnVlOworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRG
cmFtaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEZyYW1pbmcuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2MwZWY2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRGcmFtaW5nLmgKQEAgLTAs
MCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV2ViU29ja2V0RnJhbWluZ19oCisjZGVmaW5lIFdlYlNvY2tldEZyYW1pbmdfaAor
CisjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBX
ZWJTb2NrZXRGcmFtZVR5cGUgeyBUZXh0RnJhbWUsIEJpbmFyeUZyYW1lIH07CisKK3ZvaWQgZnJh
bWVXZWJTb2NrZXRUZXh0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFZlY3RvcjxjaGFy
PiYgZnJhbWVkTWVzc2FnZSk7CitzaXplX3QgcGFyc2VXZWJTb2NrZXRGcmFtZShjb25zdCBjaGFy
KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCwgYm9vbCYgaW5jb21wbGV0ZSwgYm9vbCYgZXJyb3Is
IFZlY3RvcjxjaGFyPiYgbWVzc2FnZSwgV2ViU29ja2V0RnJhbWVUeXBlJiB0eXBlKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1NPQ0tFVFMpCisK
KyNlbmRpZiAvLyBXZWJTb2NrZXRGcmFtaW5nX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116540</attachid>
            <date>2011-11-24 13:23:52 -0800</date>
            <delta_ts>2011-11-24 13:28:41 -0800</delta_ts>
            <desc>Original New Part 4 patch</desc>
            <filename>new-part-4.patch</filename>
            <type>text/plain</type>
            <size>45422</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNWMxODM0NC4uYzFiMjFkOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE2MDUsNiArMTYwNSw4IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICB3ZWJz
b2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKICAgICB3ZWJzb2NrZXRzL1dlYlNvY2tldEhh
bmRzaGFrZVJlcXVlc3QuY3BwCiAgICAgd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2VSZXNw
b25zZS5jcHAKKyAgICB3ZWJzb2NrZXRzL1dlYlNvY2tldFNlcnZlci5jcHAKKyAgICB3ZWJzb2Nr
ZXRzL1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uY3BwCiAgICAgd2Vic29ja2V0cy9Xb3JrZXJU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKIAogICAgIHdvcmtlcnMvQWJzdHJhY3RXb3Jr
ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggMTRhZDkwZS4uNjNlMWVjMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2
ICs1LDk1IEBACiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlbW90ZSBXZWIgSW5zcGVjdG9yIC0g
Q3Jvc3MgUGxhdGZvcm0gSW5zcGVjdG9yU2VydmVyCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTM2NAogCisgICAgICAgIFBhcnQgNCAtIEFkZCBhIEdl
bmVyaWMgV2ViU29ja2V0IFNlcnZlci4KKworICAgICAgICBUaGUgSW5zcGVjdG9yIFNlcnZlciB3
aWxsIGJlIGEgV2ViU29ja2V0IFNlcnZlciB0aGF0IGFsc28gcmVzcG9uZHMgdG8KKyAgICAgICAg
bm9uLVdlYlNvY2tldC1VcGdyYWRlIEhUVFAgUmVxdWVzdHMuIFRoaXMgaXMgYSBnZW5lcmljIFdl
YlNvY2tldCBzZXJ2ZXIKKyAgICAgICAgdGhhdCBoYW5kbGVzIHBhc3NlcyBvbiB3aGF0IGl0IGRv
ZXNuJ3Qga25vdyBvbiB0byBpdHMgQ2xpZW50IGZvciBleHRlbmRlZAorICAgICAgICBmdW5jdGlv
bmFsaXR5LgorCisgICAgICAgIFRoZXJlIGFyZSBubyB0ZXN0cyB5ZXQgZm9yIGEgYnVpbHQtaW4g
V2ViU29ja2V0IHNlcnZlci4KKworICAgICAgICAgIFRoaXMgcGF0aCBhdHRlbXB0cyB0byBrZWVw
IHRoZSBtYWpvcml0eSB0aGUgd2ViIHNvY2tldCBoYW5kc2hha2UgSFRUUAorICAgICAgICAgIHJl
cXVlc3QgYW5kIHJlc3BvbnNlIGxvZ2ljIGluc2lkZSBXZWJTb2NrZXRIYW5kc2hha2UuIFRoaXMg
c2hvdWxkIG1ha2UKKyAgICAgICAgICBpdCBlYXNpZXIgdG8gbWFpbnRhaW4gdGhlIGNvZGUgZm9y
IGJvdGggc2lkZXMuCisKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVdlYlNvY2tldENoYWxsZW5nZU51bWJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OldlYlNvY2tldEhhbmRzaGFrZSk6
IGRvbid0IGFzc3VtZSBoYW5kc2hha2UgdmFsdWVzIHNob3VsZCBiZSBnZW5lcmF0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OnNlcnZlckhhbmRzaGFrZVJlc3BvbnNl
TWVzc2FnZSk6IGdlbmVyYXRlIHRoZSBTZXJ2ZXIgc2lkZSBIYW5kc2hha2UgcmVzcG9uc2UuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OnJlYWRDbGllbnRIYW5kc2hha2Up
OiBwb3B1bGF0ZSBhIEhhbmRzaGFrZVJlc3BvbnNlIGJ5IHBhcnNpbmcgdGhlIENsaWVudCdzIEhh
bmRzaGFrZSByZXF1ZXN0LgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtl
Lmg6CisKKyAgICAgICAgICBXZWJTb2NrZXRTZXJ2ZXIgaXMgYSBzaW1wbGUgc2VydmVyLiBDYWxs
aW5nIGxpc3Rlbiwgb3IgY2xvc2UsCisgICAgICAgICAgbXVsdGlwbGUgdGltZXMgaXMgc2FmZS4g
U3ViY2xhc3NpbmcgaXMgZXhwZWN0ZWQuIFRoaXMgaXMgYQorICAgICAgICAgIGJhc2ljIHdyYXBw
ZXIgYXJvdW5kIHRoZSBTZXJ2ZXJTb2NrZXRIYW5kbGUgd2l0aCB0aGF0IGNvbnZlbmllbmNlLgor
CisgICAgICAgICogd2Vic29ja2V0cy9XZWJTb2NrZXRTZXJ2ZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OldlYlNvY2tldFNlcnZlcjo6V2ViU29ja2V0U2VydmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYlNvY2tldFNlcnZlcjo6fldlYlNvY2tldFNlcnZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJTb2NrZXRTZXJ2ZXI6OmlzTGlzdGVuaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYlNvY2tldFNlcnZlcjo6cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRTZXJ2
ZXI6Omxpc3Rlbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRTZXJ2ZXI6OmNsb3NlKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldFNlcnZlcjo6ZGlkUmVjZWl2ZUNvbm5lY3Rpb24p
OgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0U2VydmVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViU29ja2V0U2VydmVyOjpjcmVhdGUpOgorCisgICAgICAgICAgRWFjaCBX
ZWJTb2NrZXRDb25uZWN0aW9uOgorCisgICAgICAgICAgIC0gUGFzc2VzIHVua25vd24gSFRUUCBS
ZXF1ZXN0cyB0byBpdHMgY2xpZW50LgorICAgICAgICAgICAtIEhhbmRsZXMgV2ViU29ja2V0IFVw
Z3JhZGUgUmVxdWVzdHMuCisgICAgICAgICAgICAgLSBGaXJzdCBhc2sgaXRzIGNsaWVudCBpZiBp
dCBpcyBva2F5LgorICAgICAgICAgICAgIC0gTGF0ZXIgbm90aWZ5IGl0cyBjbGllbnQgYWJvdXQg
YSBzdWNjZXNzLgorICAgICAgICAgICAtIE9uY2UgdXBncmFkZWQgdGhlIGNvbm5lY3Rpb24gcGFy
c2VzIGFuZCBwYXNzZXMgV2ViU29ja2V0CisgICAgICAgICAgICAgZnJhbWVzIHRvIGl0cyBjbGll
bnQuCisKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246Oldl
YlNvY2tldFNlcnZlckNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0U2Vy
dmVyQ29ubmVjdGlvbjo6fldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6c2h1dGRvd25Ob3cpOiBzaHV0IGRvd24g
aW1tZWRpYXRlbHkuCisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9u
OjpzaHV0ZG93bkFmdGVyU2VuZE9yTm93KTogbWVhbnQgdG8gc2h1dGRvd24gYWZ0ZXIgYW4gSFRU
UCByZXNwb25zZS4gRW5zdXJlIGFsbCBwbGF0Zm9ybXMgd29yayBhcyBleHBlY3RlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OnNlbmRXZWJTb2NrZXRNZXNz
YWdlKTogc2VuZCBhIHRleHQgbWVzc2FnZSAoV2ViU29ja2V0IG1lc3NhZ2UpIG92ZXIgdGhlIGNv
bm5lY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpz
ZW5kUmF3RGF0YSk6IHNlbmQgcmF3IGRhdGEgKEhUVFAgbWVzc2FnZSkgb3ZlciB0aGUgY29ubmVj
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OmRpZENs
b3NlKTogaGFuZGxlIHNvY2tldCBjbG9zaW5nIHNjZW5hcmlvcy4KKyAgICAgICAgKFdlYkNvcmU6
OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OmRpZFJlY2VpdmVEYXRhKTogcGFyc2UgdGhlIGlu
Y29taW5nIGRhdGEgaW4gSFRUUCAvIFdlYlNvY2tldCBtb2Rlcy4KKyAgICAgICAgKFdlYkNvcmU6
OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OmRpZEZhaWwpOiBsb2cgZXJyb3JzLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6cmVhZEhUVFBNZXNzYWdlKTog
d2hlbiBzdGFydGluZywgYSB3ZWIgc29ja2V0IGNvbm5lY3Rpb24gcmVhZHMgYW4gSFRUUCBtZXNz
YWdlLgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6dXBncmFk
ZVRvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2Nr
ZXRTZXJ2ZXJDb25uZWN0aW9uOjpyZWFkV2ViU29ja2V0RnJhbWVzKTogcGFyc2Ugb3VyIGJ1ZmZl
ciBmb3IgYXMgbWFueSBmcmFtZXMgYXMgcG9zc2libGUuCisgICAgICAgIChXZWJDb3JlOjpXZWJT
b2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpyZWFkV2ViU29ja2V0RnJhbWUpOiBwYXJzZSBhbiBpbmRp
dmlkdWFsIGZyYW1lLgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0U2VydmVyQ29ubmVj
dGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rp
b246OmlkZW50aWZpZXIpOiB1c2VmdWwgZm9yIGNsaWVudHMgdG8gaGFzaC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OnNldElkZW50aWZpZXIpOgorCisgICAg
ICAgICAgV2ViU29ja2V0U2VydmVyIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIGFkZGVkIGJ5IGltcGxl
bWVudGluZworICAgICAgICAgIHRoZSBjbGllbnQgaW50ZXJmYWNlLgorCisgICAgICAgICogd2Vi
c29ja2V0cy9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uQ2xpZW50Lmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbkNsaWVudDo6fldlYlNvY2tldFNl
cnZlckNvbm5lY3Rpb25DbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0U2VydmVy
Q29ubmVjdGlvbkNsaWVudDo6ZGlkUmVjZWl2ZVVucmVjb2duaXplZEhUVFBSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb25DbGllbnQ6OmRpZFJlY2Vp
dmVXZWJTb2NrZXRVcGdyYWRlSFRUUFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29j
a2V0U2VydmVyQ29ubmVjdGlvbkNsaWVudDo6ZGlkRXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uQ2xpZW50Ojpk
aWRSZWNlaXZlV2ViU29ja2V0TWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRT
ZXJ2ZXJDb25uZWN0aW9uQ2xpZW50OjpkaWRDbG9zZVdlYlNvY2tldENvbm5lY3Rpb24pOgorCisg
ICAgICAgICAgTWlzY2VsbGFuZW91cy4gQWRkIG5ldyBmaWxlcyB0byB0aGUgYnVpbGQuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorCisyMDExLTAxLTI2ICBKb3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNr
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV2ViIEluc3BlY3RvcjogUmVtb3RlIFdlYiBJbnNwZWN0b3IgLSBDcm9zcyBQbGF0Zm9y
bSBJbnNwZWN0b3JTZXJ2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUxMzY0CisKICAgICAgICAgUGFydCAzIC0gR2VuZXJhbGl6ZWQgV2ViU29ja2V0
IEZyYW1lIFBhcnNpbmcgYW5kIENyZWF0aW5nLgogCiAgICAgICAgIFRoaXMgaXMgbW9kZWxsZWQg
YWZ0ZXIgdGhlIHJlY2VudGx5IGFkZGVkIGdlbmVyaWMgSFRUUFBhcnNlcnMuY3BwIGZ1bmN0aW9u
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCAwOTJlOTM5Li4zNjA5NzZhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQpAQCAtMzUxNiw2ICszNTE2LDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291
cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0LmggXAogCVNv
dXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlLmgg
XAorCVNvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0U2VydmVyLmNwcCBcCisJU291
cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRTZXJ2ZXIuaCBcCisJU291cmNlL1dlYkNv
cmUvd2Vic29ja2V0cy9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmNwcCBcCisJU291cmNlL1dl
YkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmggXAorCVNvdXJjZS9X
ZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbkNsaWVudC5oIFwKIAlT
b3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbC5oIFwKIAlTb3VyY2UvV2ViQ29yZS93bWwvV01MQWNjZXNzRWxlbWVudC5jcHAg
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCmluZGV4IGMzMDQ5ZjQuLmViMjZjMzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
QEAgLTQ1MDksNiArNDUwOSwxMSBAQAogICAgICAgICAgICAgJ3dlYnNvY2tldHMvV2ViU29ja2V0
SGFuZHNoYWtlUmVxdWVzdC5oJywKICAgICAgICAgICAgICd3ZWJzb2NrZXRzL1dlYlNvY2tldEhh
bmRzaGFrZVJlc3BvbnNlLmNwcCcsCiAgICAgICAgICAgICAnd2Vic29ja2V0cy9XZWJTb2NrZXRI
YW5kc2hha2VSZXNwb25zZS5oJywKKyAgICAgICAgICAgICd3ZWJzb2NrZXRzL1dlYlNvY2tldFNl
cnZlci5jcHAnLAorICAgICAgICAgICAgJ3dlYnNvY2tldHMvV2ViU29ja2V0U2VydmVyLmgnLAor
ICAgICAgICAgICAgJ3dlYnNvY2tldHMvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5jcHAnLAor
ICAgICAgICAgICAgJ3dlYnNvY2tldHMvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5oJywKKyAg
ICAgICAgICAgICd3ZWJzb2NrZXRzL1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb25DbGllbnQuaCcs
CiAgICAgICAgICAgICAnd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bC5jcHAnLAogICAgICAgICAgICAgJ3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWwuaCcsCiAgICAgICAgICAgICAnd29ya2Vycy9BYnN0cmFjdFdvcmtlci5jcHAnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnBybwppbmRleCBkOGMzMzNlLi42MmY2M2JiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMzcy
Myw2ICszNzIzLDkgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQl9TT0NLRVRTPTEpIHsK
ICAgICAgICAgd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuaCBcCiAgICAgICAgIHdlYnNv
Y2tldHMvV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdC5oIFwKICAgICAgICAgd2Vic29ja2V0cy9X
ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZS5oIFwKKyAgICAgICAgd2Vic29ja2V0cy9XZWJTb2Nr
ZXRTZXJ2ZXIuaCBcCisgICAgICAgIHdlYnNvY2tldHMvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlv
bi5oIFwKKyAgICAgICAgd2Vic29ja2V0cy9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uQ2xpZW50
LmggXAogICAgICAgICBwbGF0Zm9ybS9uZXR3b3JrL1NlcnZlclNvY2tldEhhbmRsZUJhc2UuaCBc
CiAgICAgICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZS5o
CiAKQEAgLTM3MzMsNiArMzczNiw4IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJfU09D
S0VUUz0xKSB7CiAgICAgICAgIHdlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcCBcCiAg
ICAgICAgIHdlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdC5jcHAgXAogICAgICAg
ICB3ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlLmNwcCBcCisgICAgICAgIHdl
YnNvY2tldHMvV2ViU29ja2V0U2VydmVyLmNwcCBcCisgICAgICAgIHdlYnNvY2tldHMvV2ViU29j
a2V0U2VydmVyQ29ubmVjdGlvbi5jcHAgXAogICAgICAgICB3ZWJzb2NrZXRzL1RocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL25ldHdvcmsvU2VydmVyU29j
a2V0SGFuZGxlQmFzZS5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVh
bUVycm9yQmFzZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagppbmRleCBmNzE3NGQyLi42MWU4NTE0IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNjYxNTgsNiArNjYxNTgsMjYgQEAKIAkJCQk+
CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cd2Vic29ja2V0c1xX
ZWJTb2NrZXRTZXJ2ZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlx3ZWJzb2NrZXRzXFdlYlNvY2tldFNlcnZlci5oIgorCQkJCT4KKwkJCTwv
RmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx3ZWJzb2NrZXRzXFdlYlNvY2tl
dFNlcnZlckNvbm5lY3Rpb24uY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlx3ZWJzb2NrZXRzXFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uaCIK
KwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cd2Vic29j
a2V0c1xXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uQ2xpZW50LmgiCisJCQkJPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHdlYnNvY2tldHNcV29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWwuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2MTVhZGMz
Li4yYmEyOGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0zMTQ4LDExICszMTQ4LDE2IEBACiAJCUE0NTZGQTI3MTFBRDRBODMw
MDIwQjQyMCAvKiBMYWJlbHNOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTQ1NkZBMjUxMUFENEE4MzAwMjBCNDIwIC8qIExhYmVsc05vZGVM
aXN0LmggKi87IH07CiAJCUE1MTNCM0Q3MTE0QjE2NjYwMDFDNDI5QiAvKiBLZXlFdmVudENvY29h
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUM5NzRD
RjExNDg1RkYxMDA2NkYyQUIgLyogS2V5RXZlbnRDb2NvYS5oICovOyB9OwogCQlBNTEzQjNEODEx
NEIxNjZBMDAxQzQyOUIgLyogS2V5RXZlbnRDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1Qzk3NEQwMTE0ODVGRjEwMDY2RjJBQiAvKiBLZXlF
dmVudENvY29hLm1tICovOyB9OwotCQlBNTdEQzRDNjEyRTdDNTEyMDBDN0EyOUMgLyogU2VydmVy
U29ja2V0SGFuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNTdEQzRDNDEyRTdDNTEyMDBDN0EyOUMgLyogU2VydmVyU29ja2V0SGFuZGxl
Q2xpZW50LmggKi87IH07CisJCUE1N0RDNEE5MTJFN0MwOTAwMEM3QTI5QyAvKiBXZWJTb2NrZXRT
ZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1
N0RDNEE3MTJFN0MwOTAwMEM3QTI5QyAvKiBXZWJTb2NrZXRTZXJ2ZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNTdEQzRBQTEyRTdDMDkwMDBD
N0EyOUMgLyogV2ViU29ja2V0U2VydmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE1N0RDNEE4MTJFN0MwOTAwMEM3QTI5QyAvKiBXZWJTb2NrZXRT
ZXJ2ZXIuY3BwICovOyB9OworCQlBNTdEQzRDNjEyRTdDNTEyMDBDN0EyOUMgLyogU2VydmVyU29j
a2V0SGFuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNTdEQzRDNDEyRTdDNTEyMDBDN0EyOUMgLyogU2VydmVyU29ja2V0SGFuZGxlQ2xp
ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QTU3REM0REExMkU3Qzc2QzAwQzdBMjlDIC8qIFNlcnZlclNvY2tldEhhbmRsZUJhc2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1N0RDNEQ4MTJFN0M3
NkMwMEM3QTI5QyAvKiBTZXJ2ZXJTb2NrZXRIYW5kbGVCYXNlLmggKi87IH07CiAJCUE1N0RDNERC
MTJFN0M3NkMwMEM3QTI5QyAvKiBTZXJ2ZXJTb2NrZXRIYW5kbGVCYXNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1N0RDNEQ5MTJFN0M3NkMwMEM3
QTI5QyAvKiBTZXJ2ZXJTb2NrZXRIYW5kbGVCYXNlLmNwcCAqLzsgfTsKIAkJQTU3REM0RUExMkU3
RDNEOTAwQzdBMjlDIC8qIFNlcnZlclNvY2tldEhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU3REM0RTgxMkU3RDNEOTAwQzdBMjlDIC8qIFNl
cnZlclNvY2tldEhhbmRsZS5oICovOyB9OwogCQlBNTdEQzRFQjEyRTdEM0Q5MDBDN0EyOUMgLyog
U2VydmVyU29ja2V0SGFuZGxlQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTU3REM0RTkxMkU3RDNEOTAwQzdBMjlDIC8qIFNlcnZlclNvY2tl
dEhhbmRsZUNGTmV0LmNwcCAqLzsgfTsKKwkJQTU4NzQ2NTMxMkVBMTk2QTAwMDNGNkYwIC8qIFdl
YlNvY2tldFNlcnZlckNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE1ODc0NjUxMTJFQTE5NkEwMDAzRjZGMCAvKiBXZWJTb2NrZXRTZXJ2
ZXJDb25uZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJQTU4NzQ2NTQxMkVBMTk2QTAwMDNGNkYwIC8qIFdlYlNvY2tldFNlcnZlckNvbm5l
Y3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTU4NzQ2NTIxMkVBMTk2QTAwMDNGNkYwIC8qIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uY3Bw
ICovOyB9OworCQlBNTg3NDdCMTEyRUY2NTgyMDAwM0Y2RjAgLyogV2ViU29ja2V0U2VydmVyQ29u
bmVjdGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTU4NzQ3QjAxMkVGNjU4MjAwMDNGNkYwIC8qIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rp
b25DbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlBNTg3NDgxQjEyRUY4Rjk5MDAwM0Y2RjAgLyogV2ViU29ja2V0RnJhbWluZy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTg3NDgxOTEyRUY4
Rjk5MDAwM0Y2RjAgLyogV2ViU29ja2V0RnJhbWluZy5jcHAgKi87IH07CiAJCUE1ODc0ODFDMTJF
RjhGOTkwMDAzRjZGMCAvKiBXZWJTb2NrZXRGcmFtaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTg3NDgxQTEyRUY4Rjk5MDAwM0Y2RjAgLyogV2Vi
U29ja2V0RnJhbWluZy5oICovOyB9OwogCQlBNTlFM0MxRTExNTgwRjUxMDA3MjkyOEUgLyogS2V5
RXZlbnRDb2Rlc0lQaG9uZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTU5RTNDMUMxMTU4MEY1MTAwNzI5MjhFIC8qIEtleUV2ZW50Q29kZXNJUGhvbmUu
aCAqLzsgfTsKQEAgLTk1MjEsMTEgKzk1MjYsMTYgQEAKIAkJQTQ1NDQyNEQxMTlCMzY4NzAwOUJF
OTEyIC8qIFJlbmRlck1ldGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlck1ldGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE0NTZGQTI0MTFBRDRB
ODMwMDIwQjQyMCAvKiBMYWJlbHNOb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBMYWJlbHNOb2RlTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE0NTZGQTI1MTFBRDRBODMwMDIwQjQyMCAvKiBMYWJlbHNOb2RlTGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYWJlbHNOb2RlTGlzdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBNTdEQzRBNzEyRTdDMDkwMDBDN0EyOUMgLyogV2ViU29ja2V0
U2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNvY2tldFNlcnZl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNTdEQzRBODEyRTdDMDkwMDBDN0Ey
OUMgLyogV2ViU29ja2V0U2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdlYlNvY2tldFNlcnZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE1N0RDNEM0MTJFN0M1MTIwMEM3QTI5QyAvKiBTZXJ2ZXJTb2NrZXRIYW5kbGVDbGllbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VydmVyU29ja2V0SGFuZGxlQ2xpZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1N0RDNEQ4MTJFN0M3NkMwMEM3QTI5
QyAvKiBTZXJ2ZXJTb2NrZXRIYW5kbGVCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNlcnZlclNvY2tldEhhbmRsZUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTU3REM0RDkxMkU3Qzc2QzAwQzdBMjlDIC8qIFNlcnZlclNvY2tldEhhbmRsZUJhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VydmVyU29ja2V0SGFu
ZGxlQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1N0RDNEU4MTJFN0Qz
RDkwMEM3QTI5QyAvKiBTZXJ2ZXJTb2NrZXRIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2VydmVyU29ja2V0SGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE1N0RDNEU5MTJFN0QzRDkwMEM3QTI5QyAvKiBTZXJ2ZXJTb2NrZXRIYW5kbGVDRk5l
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZXJ2ZXJTb2NrZXRI
YW5kbGVDRk5ldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1ODc0NjUxMTJF
QTE5NkEwMDAzRjZGMCAvKiBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTU4NzQ2NTIxMkVBMTk2QTAwMDNGNkYwIC8qIFdlYlNv
Y2tldFNlcnZlckNvbm5lY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUE1ODc0N0IwMTJFRjY1ODIwMDAzRjZGMCAvKiBXZWJTb2NrZXRTZXJ2ZXJDb25u
ZWN0aW9uQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNvY2tl
dFNlcnZlckNvbm5lY3Rpb25DbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTU4NzQ4MTkxMkVGOEY5OTAwMDNGNkYwIC8qIFdlYlNvY2tldEZyYW1pbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViU29ja2V0RnJhbWluZy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1ODc0ODFBMTJFRjhGOTkwMDAzRjZGMCAvKiBXZWJT
b2NrZXRGcmFtaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNvY2tl
dEZyYW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU5RTNDMUMxMTU4MEY1
MTAwNzI5MjhFIC8qIEtleUV2ZW50Q29kZXNJUGhvbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gS2V5RXZlbnRDb2Rlc0lQaG9uZS5oOyBwYXRoID0gaXBob25lL0tleUV2ZW50
Q29kZXNJUGhvbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNjI2LDYgKzEz
NjM2LDExIEBACiAJCQkJNzYzN0M1NDIxMTJFN0I3RTAwM0Q2Q0RDIC8qIFdlYlNvY2tldEhhbmRz
aGFrZVJlcXVlc3QuaCAqLywKIAkJCQk3NjdGOTlCRDExQTExOTRBMDA4MEM1MUQgLyogV2ViU29j
a2V0SGFuZHNoYWtlUmVzcG9uc2UuY3BwICovLAogCQkJCTc2N0Y5OUJGMTFBMTE5NTYwMDgwQzUx
RCAvKiBXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZS5oICovLAorCQkJCUE1N0RDNEE4MTJFN0Mw
OTAwMEM3QTI5QyAvKiBXZWJTb2NrZXRTZXJ2ZXIuY3BwICovLAorCQkJCUE1N0RDNEE3MTJFN0Mw
OTAwMEM3QTI5QyAvKiBXZWJTb2NrZXRTZXJ2ZXIuaCAqLywKKwkJCQlBNTg3NDY1MjEyRUExOTZB
MDAwM0Y2RjAgLyogV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5jcHAgKi8sCisJCQkJQTU4NzQ2
NTExMkVBMTk2QTAwMDNGNkYwIC8qIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uaCAqLywKKwkJ
CQlBNTg3NDdCMDEyRUY2NTgyMDAwM0Y2RjAgLyogV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbkNs
aWVudC5oICovLAogCQkJCTUxMTIyNDc3MTBDRkI4RjQwMDgwOTlENyAvKiBXb3JrZXJUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAgKi8sCiAJCQkJNTExMjI0NzkxMENGQjhGRjAwODA5OUQ3
IC8qIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmggKi8sCiAJCQkpOwpAQCAtMjIy
NjksNiArMjIyODQsOSBAQAogCQkJCTUxQUJBRTQ1MTA0M0FCNEEwMDhDNTI2MCAvKiBXZWJTb2Nr
ZXRIYW5kc2hha2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTc2MzdDNTQzMTEyRTdCN0UwMDNENkNE
QyAvKiBXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3NjdG
OTlDMDExQTExOTU2MDA4MEM1MUQgLyogV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUE1N0RDNEE5MTJFN0MwOTAwMEM3QTI5QyAvKiBXZWJTb2NrZXRTZXJ2
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUE1ODc0NjUzMTJFQTE5NkEwMDAzRjZGMCAvKiBXZWJT
b2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlBNTg3NDdCMTEyRUY2
NTgyMDAwM0Y2RjAgLyogV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbkNsaWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZDRjMzMkQwRjJCOUEyNTAwNEI2Nzk1IC8qIFdlYlRpbGVkTGF5ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUY1NUIzREUwMTI1MUYxMkQwMDNFRjI2OSAvKiBXZWVrSW5wdXRU
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTAzMUI1MTBBNDRFRkM3MDBGOTkyRTAgLyogV2hl
ZWxFdmVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTA3MCw2ICsyNTA4OCw4IEBACiAJCQkJQTU3
REM0RUIxMkU3RDNEOTAwQzdBMjlDIC8qIFNlcnZlclNvY2tldEhhbmRsZUNGTmV0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1RDIxNEIxMTJFOTA1NTEwMDkwRjM3MCAvKiBIVFRQUmVxdWVzdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTg3NDgxQjEyRUY4Rjk5MDAwM0Y2RjAgLyogV2ViU29j
a2V0RnJhbWluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBNTdEQzRBQTEyRTdDMDkwMDBDN0Ey
OUMgLyogV2ViU29ja2V0U2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE1ODc0NjU0MTJF
QTE5NkEwMDAzRjZGMCAvKiBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5k
c2hha2UuY3BwIGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2Uu
Y3BwCmluZGV4IDg5MDJkZGUuLjdlYWRmNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dl
YnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJz
b2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKQEAgLTU5LDYgKzU5LDggQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitzdGF0aWMgY29uc3QgdW5zaWduZWQga0NoYWxsZW5nZVJlc3BvbnNl
TGVuZ3RoID0gMTY7CisKIHN0YXRpYyBjb25zdCBjaGFyIHJhbmRvbUNoYXJhY3RlckluU2VjV2Vi
U29ja2V0S2V5W10gPSAiIVwiIyQlJicoKSorLC0uLzo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJT
VFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX4iOwogCiBzdGF0aWMg
U3RyaW5nIHJlc291cmNlTmFtZShjb25zdCBLVVJMJiB1cmwpCkBAIC0xNDgsNiArMTUwLDI1IEBA
IHN0YXRpYyB2b2lkIGdlbmVyYXRlRXhwZWN0ZWRDaGFsbGVuZ2VSZXNwb25zZSh1aW50MzJfdCBu
dW1iZXIxLCB1aW50MzJfdCBudW1iZXIyCiAgICAgbWVtY3B5KGV4cGVjdGVkQ2hhbGxlbmdlLCBk
aWdlc3QuZGF0YSgpLCAxNik7CiB9CiAKK3N0YXRpYyB1aW50MzJfdCBwYXJzZVdlYlNvY2tldENo
YWxsZW5nZU51bWJlcihjb25zdCBTdHJpbmcmIGNoYWxsZW5nZVN0cmluZykKK3sKKyAgICB1aW50
MzJfdCBudW1iZXJPZlNwYWNlcyA9IDA7CisgICAgU3RyaW5nIG51bWJlclN0cmluZzsKKworICAg
IHNpemVfdCBsZW5ndGggPSBjaGFsbGVuZ2VTdHJpbmcubGVuZ3RoKCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBVQ2hhciBjaCA9IGNoYWxsZW5n
ZVN0cmluZ1tpXTsKKyAgICAgICAgaWYgKGNoID09ICcgJykKKyAgICAgICAgICAgICsrbnVtYmVy
T2ZTcGFjZXM7CisgICAgICAgIGVsc2UgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpCisgICAg
ICAgICAgICBudW1iZXJTdHJpbmcuYXBwZW5kKGNoKTsKKyAgICB9CisKKyAgICB1aW50MzJfdCBu
dW1iZXIgPSBudW1iZXJTdHJpbmcudG9VSW50KCk7CisgICAgdWludDMyX3QgcmVzdWx0ID0gbnVt
YmVyT2ZTcGFjZXMgPyAobnVtYmVyIC8gbnVtYmVyT2ZTcGFjZXMpIDogbnVtYmVyOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKIFdlYlNvY2tldEhhbmRzaGFrZTo6V2ViU29ja2V0SGFuZHNoYWtl
KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCkKICAgICA6IG1fdXJsKHVybCkKICAgICAsIG1fY2xpZW50UHJvdG9j
b2wocHJvdG9jb2wpCkBAIC0xNTUsMTIgKzE3NiwxNSBAQCBXZWJTb2NrZXRIYW5kc2hha2U6Oldl
YlNvY2tldEhhbmRzaGFrZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2ws
CiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fbW9kZShJbmNvbXBsZXRlKQogewot
ICAgIHVpbnQzMl90IG51bWJlcjE7Ci0gICAgdWludDMyX3QgbnVtYmVyMjsKLSAgICBnZW5lcmF0
ZVNlY1dlYlNvY2tldEtleShudW1iZXIxLCBtX3NlY1dlYlNvY2tldEtleTEpOwotICAgIGdlbmVy
YXRlU2VjV2ViU29ja2V0S2V5KG51bWJlcjIsIG1fc2VjV2ViU29ja2V0S2V5Mik7Ci0gICAgZ2Vu
ZXJhdGVLZXkzKG1fa2V5Myk7Ci0gICAgZ2VuZXJhdGVFeHBlY3RlZENoYWxsZW5nZVJlc3BvbnNl
KG51bWJlcjEsIG51bWJlcjIsIG1fa2V5MywgbV9leHBlY3RlZENoYWxsZW5nZVJlc3BvbnNlKTsK
KyAgICAvLyBPbmx5IGF1dG9nZW5lcmF0ZSBoYW5kc2hha2UgaW5mb3JtYXRpb24gaWYgd2UgYXJl
IGEgY2xpZW50LgorICAgIGlmIChjb250ZXh0KSB7CisgICAgICAgIHVpbnQzMl90IG51bWJlcjE7
CisgICAgICAgIHVpbnQzMl90IG51bWJlcjI7CisgICAgICAgIGdlbmVyYXRlU2VjV2ViU29ja2V0
S2V5KG51bWJlcjEsIG1fc2VjV2ViU29ja2V0S2V5MSk7CisgICAgICAgIGdlbmVyYXRlU2VjV2Vi
U29ja2V0S2V5KG51bWJlcjIsIG1fc2VjV2ViU29ja2V0S2V5Mik7CisgICAgICAgIGdlbmVyYXRl
S2V5MyhtX2tleTMpOworICAgICAgICBnZW5lcmF0ZUV4cGVjdGVkQ2hhbGxlbmdlUmVzcG9uc2Uo
bnVtYmVyMSwgbnVtYmVyMiwgbV9rZXkzLCBtX2V4cGVjdGVkQ2hhbGxlbmdlUmVzcG9uc2UpOwor
ICAgIH0KIH0KIAogV2ViU29ja2V0SGFuZHNoYWtlOjp+V2ViU29ja2V0SGFuZHNoYWtlKCkKQEAg
LTIxMiw2ICsyMzYsMzUgQEAgU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50TG9jYXRp
b24oKSBjb25zdAogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKK0NTdHJpbmcg
V2ViU29ja2V0SGFuZHNoYWtlOjpzZXJ2ZXJIYW5kc2hha2VSZXNwb25zZU1lc3NhZ2UoKSBjb25z
dAoreworICAgIC8vIFN0YXR1cyBMaW5lLgorICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAg
ICBidWlsZGVyLmFwcGVuZCgiSFRUUC8xLjEgIik7CisgICAgYnVpbGRlci5hcHBlbmQoU3RyaW5n
OjpudW1iZXIobV9yZXNwb25zZS5zdGF0dXNDb2RlKCkpKTsKKyAgICBidWlsZGVyLmFwcGVuZCgi
ICIpOworICAgIGJ1aWxkZXIuYXBwZW5kKG1fcmVzcG9uc2Uuc3RhdHVzVGV4dCgpKTsKKyAgICBi
dWlsZGVyLmFwcGVuZCgiXHJcbiIpOworCisgICAgLy8gUmVzcG9uc2UgSGVhZGVycy4KKyAgICBj
b25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzID0gbV9yZXNwb25zZS5oZWFkZXJGaWVsZHMoKTsK
KyAgICBidWlsZGVyLmFwcGVuZCgiVXBncmFkZTogIiArIGhlYWRlcnMuZ2V0KCJVcGdyYWRlIikg
KyAiXHJcbiIpOworICAgIGJ1aWxkZXIuYXBwZW5kKCJDb25uZWN0aW9uOiAiICsgaGVhZGVycy5n
ZXQoIkNvbm5lY3Rpb24iKSArICJcclxuIik7CisgICAgYnVpbGRlci5hcHBlbmQoIlNlYy1XZWJT
b2NrZXQtT3JpZ2luOiAiICsgaGVhZGVycy5nZXQoIlNlYy1XZWJTb2NrZXQtT3JpZ2luIikgKyAi
XHJcbiIpOworICAgIGJ1aWxkZXIuYXBwZW5kKCJTZWMtV2ViU29ja2V0LUxvY2F0aW9uOiAiICsg
aGVhZGVycy5nZXQoIlNlYy1XZWJTb2NrZXQtTG9jYXRpb24iKSArICJcclxuIik7CisgICAgYnVp
bGRlci5hcHBlbmQoIkNvbnRlbnQtTGVuZ3RoOiAiICsgaGVhZGVycy5nZXQoIkNvbnRlbnQtTGVu
Z3RoIikgKyAiXHJcbiIpOworICAgIGJ1aWxkZXIuYXBwZW5kKCJcclxuIik7CisKKyAgICAvLyBS
ZXNwb25zZSBCb2R5LgorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1kNURpZ2VzdCA9IG1fcmVz
cG9uc2UuY2hhbGxlbmdlUmVzcG9uc2UoKS52YWx1ZTsKKyAgICBDU3RyaW5nIGhhbmRzaGFrZUhl
YWRlciA9IGJ1aWxkZXIudG9TdHJpbmcoKS51dGY4KCk7CisgICAgY2hhciogY2hhcmFjdGVyQnVm
ZmVyID0gMDsKKyAgICBDU3RyaW5nIG1zZyA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQoaGFu
ZHNoYWtlSGVhZGVyLmxlbmd0aCgpICsga0NoYWxsZW5nZVJlc3BvbnNlTGVuZ3RoLCBjaGFyYWN0
ZXJCdWZmZXIpOyAvLyAxNiBmb3IgTUQ1IGRpZ2VzdCBsZW5ndGguCisgICAgbWVtY3B5KGNoYXJh
Y3RlckJ1ZmZlciwgaGFuZHNoYWtlSGVhZGVyLmRhdGEoKSwgaGFuZHNoYWtlSGVhZGVyLmxlbmd0
aCgpKTsKKyAgICBtZW1jcHkoY2hhcmFjdGVyQnVmZmVyICsgaGFuZHNoYWtlSGVhZGVyLmxlbmd0
aCgpLCBtZDVEaWdlc3QsIGtDaGFsbGVuZ2VSZXNwb25zZUxlbmd0aCk7CisgICAgcmV0dXJuIG1z
ZzsKK30KKwogQ1N0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhhbmRzaGFrZU1lc3Nh
Z2UoKSBjb25zdAogewogICAgIC8vIEtlZXAgdGhlIGZvbGxvd2luZyBjb25zaXN0ZW50IHdpdGgg
Y2xpZW50SGFuZHNoYWtlUmVxdWVzdCgpLgpAQCAtMzU3LDYgKzQxMCwzOSBAQCBpbnQgV2ViU29j
a2V0SGFuZHNoYWtlOjpyZWFkU2VydmVySGFuZHNoYWtlKGNvbnN0IGNoYXIqIGhlYWRlciwgc2l6
ZV90IGxlbikKICAgICByZXR1cm4gKHAgLSBoZWFkZXIpICsgc2l6ZW9mKG1fZXhwZWN0ZWRDaGFs
bGVuZ2VSZXNwb25zZSk7CiB9CiAKK3ZvaWQgV2ViU29ja2V0SGFuZHNoYWtlOjpyZWFkQ2xpZW50
SGFuZHNoYWtlKFBhc3NSZWZQdHI8SFRUUFJlcXVlc3Q+IHJlcXVlc3QpCit7CisgICAgbV9yZXNw
b25zZS5zZXRTdGF0dXNDb2RlKDEwMSk7CisgICAgbV9yZXNwb25zZS5zZXRTdGF0dXNUZXh0KCJX
ZWJTb2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtlIik7CisgICAgY29uc3QgSFRUUEhlYWRlck1hcCYg
aGVhZGVycyA9IHJlcXVlc3QtPmhlYWRlckZpZWxkcygpOworCisgICAgLy8gVGhlIHRocmVlIHJh
dyBoYW5kc2hha2Uga2V5cy4KKyAgICBTdHJpbmcga2V5MSA9IGhlYWRlcnMuZ2V0KCJTZWMtV2Vi
U29ja2V0LUtleTEiKTsKKyAgICBTdHJpbmcga2V5MiA9IGhlYWRlcnMuZ2V0KCJTZWMtV2ViU29j
a2V0LUtleTIiKTsKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gcmVxdWVzdEJvZHkgPSByZXF1
ZXN0LT5ib2R5KCk7CisgICAgQVNTRVJUKHJlcXVlc3RCb2R5LnNpemUoKSA9PSA4KTsKKyAgICB1
bnNpZ25lZCBjaGFyKiBrZXkzID0gcmVxdWVzdEJvZHkuZGF0YSgpOworCisgICAgLy8gUGFyc2Ug
YW5kIGdlbmVyYXRlIHRoZSBjaGFsbGVuZ2UgcmVzcG9uc2UuIFNldCB0aGF0IGFzIHRoZSByZXNw
b25zZSBib2R5LgorICAgIHVpbnQzMl90IG51bWJlcjEgPSBwYXJzZVdlYlNvY2tldENoYWxsZW5n
ZU51bWJlcihrZXkxKTsKKyAgICB1aW50MzJfdCBudW1iZXIyID0gcGFyc2VXZWJTb2NrZXRDaGFs
bGVuZ2VOdW1iZXIoa2V5Mik7CisgICAgdW5zaWduZWQgY2hhciBleHBlY3RlZENoYWxsZW5nZVJl
c3BvbnNlW2tDaGFsbGVuZ2VSZXNwb25zZUxlbmd0aF07CisgICAgZ2VuZXJhdGVFeHBlY3RlZENo
YWxsZW5nZVJlc3BvbnNlKG51bWJlcjEsIG51bWJlcjIsIGtleTMsIGV4cGVjdGVkQ2hhbGxlbmdl
UmVzcG9uc2UpOworICAgIG1fcmVzcG9uc2Uuc2V0Q2hhbGxlbmdlUmVzcG9uc2UoZXhwZWN0ZWRD
aGFsbGVuZ2VSZXNwb25zZSk7CisKKyAgICAvLyBGb3JtYXQgdGhlIGxvY2F0aW9uLgorICAgIFN0
cmluZyBob3N0ID0gaGVhZGVycy5nZXQoImhvc3QiKTsKKyAgICBTdHJpbmcgdXJsID0gcmVxdWVz
dC0+dXJsKCk7CisgICAgU3RyaW5nIGxvY2F0aW9uID0gIndzOi8vIiArIGhvc3QgKyB1cmw7CisK
KyAgICAvLyBSZXNwb25zZSBIZWFkZXJzLgorICAgIG1fcmVzcG9uc2UuYWRkSGVhZGVyRmllbGQo
IlVwZ3JhZGUiLCBoZWFkZXJzLmdldCgiVXBncmFkZSIpKTsKKyAgICBtX3Jlc3BvbnNlLmFkZEhl
YWRlckZpZWxkKCJDb25uZWN0aW9uIiwgaGVhZGVycy5nZXQoIkNvbm5lY3Rpb24iKSk7CisgICAg
bV9yZXNwb25zZS5hZGRIZWFkZXJGaWVsZCgiU2VjLVdlYlNvY2tldC1PcmlnaW4iLCBoZWFkZXJz
LmdldCgiT3JpZ2luIikpOworICAgIG1fcmVzcG9uc2UuYWRkSGVhZGVyRmllbGQoIlNlYy1XZWJT
b2NrZXQtTG9jYXRpb24iLCBsb2NhdGlvbik7CisgICAgbV9yZXNwb25zZS5hZGRIZWFkZXJGaWVs
ZCgiQ29udGVudC1MZW5ndGgiLCBTdHJpbmc6Om51bWJlcihrQ2hhbGxlbmdlUmVzcG9uc2VMZW5n
dGgpKTsKK30KKwogV2ViU29ja2V0SGFuZHNoYWtlOjpNb2RlIFdlYlNvY2tldEhhbmRzaGFrZTo6
bW9kZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbW9kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmggYi9Tb3VyY2UvV2ViQ29yZS93
ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5oCmluZGV4IDFiNThlMGIuLjAwZWNmMWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuaApAQCAt
NDEsNiArNDEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFzcyBIVFRQUmVx
dWVzdDsKICAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiAgICAgY2xhc3MgV2Vi
U29ja2V0SGFuZHNoYWtlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKQEAgLTcwLDYgKzcxLDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGNsZWFyU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOwogCiAgICAgICAgIGludCByZWFkU2VydmVySGFuZHNoYWtlKGNvbnN0IGNoYXIqIGhl
YWRlciwgc2l6ZV90IGxlbik7CisgICAgICAgIHZvaWQgcmVhZENsaWVudEhhbmRzaGFrZShQYXNz
UmVmUHRyPEhUVFBSZXF1ZXN0Pik7CisKICAgICAgICAgTW9kZSBtb2RlKCkgY29uc3Q7CiAKICAg
ICAgICAgY29uc3QgU3RyaW5nJiBzZXJ2ZXJXZWJTb2NrZXRPcmlnaW4oKSBjb25zdDsKQEAgLTg2
LDYgKzg5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjb25zdCBTdHJpbmcmIHNl
cnZlclNldENvb2tpZTIoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRTZXJ2ZXJTZXRDb29raWUy
KGNvbnN0IFN0cmluZyYgc2V0Q29va2llMik7CiAKKyAgICAgICAgQ1N0cmluZyBzZXJ2ZXJIYW5k
c2hha2VSZXNwb25zZU1lc3NhZ2UoKSBjb25zdDsKICAgICAgICAgY29uc3QgV2ViU29ja2V0SGFu
ZHNoYWtlUmVzcG9uc2UmIHNlcnZlckhhbmRzaGFrZVJlc3BvbnNlKCkgY29uc3Q7CiAKICAgICBw
cml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRT
ZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRTZXJ2ZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYWVmMTAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldFNlcnZlci5jcHAKQEAg
LTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfU09DS0VUUykKKworI2lu
Y2x1ZGUgIldlYlNvY2tldFNlcnZlci5oIgorCisjaW5jbHVkZSAiU2VydmVyU29ja2V0SGFuZGxl
LmgiCisjaW5jbHVkZSAiV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIldl
YlNvY2tldFNlcnZlckNvbm5lY3Rpb25DbGllbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitXZWJTb2NrZXRTZXJ2ZXI6OldlYlNvY2tldFNlcnZlcihXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0
aW9uQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3NlcnZlclNvY2tldChTZXJ2ZXJTb2NrZXRIYW5k
bGU6OmNyZWF0ZSgwLCB0aGlzKSkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKK3sKK30KKworV2Vi
U29ja2V0U2VydmVyOjp+V2ViU29ja2V0U2VydmVyKCkKK3sKKyAgICBjbG9zZSgpOworfQorCiti
b29sIFdlYlNvY2tldFNlcnZlcjo6aXNMaXN0ZW5pbmcoKSBjb25zdAoreworICAgIHJldHVybiBt
X3NlcnZlclNvY2tldC0+c3RhdGUoKSA9PSBTZXJ2ZXJTb2NrZXRIYW5kbGU6Okxpc3RlbmluZzsK
K30KKwordW5zaWduZWQgc2hvcnQgV2ViU29ja2V0U2VydmVyOjpwb3J0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9zZXJ2ZXJTb2NrZXQtPnBvcnQoKTsKK30KKwordm9pZCBXZWJTb2NrZXRTZXJ2
ZXI6Omxpc3Rlbih1bnNpZ25lZCBzaG9ydCBwb3J0KQoreworICAgIGlmIChpc0xpc3RlbmluZygp
KSB7CisgICAgICAgIGlmIChtX3NlcnZlclNvY2tldC0+cG9ydCgpID09IHBvcnQpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9zZXJ2ZXJTb2NrZXQt
PmNsb3NlKCk7CisgICAgICAgICAgICBtX3NlcnZlclNvY2tldC0+c2V0UG9ydChwb3J0KTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBtX3NlcnZlclNvY2tldC0+c2V0UG9ydChwb3J0
KTsKKworICAgIG1fc2VydmVyU29ja2V0LT5saXN0ZW4oKTsKK30KKwordm9pZCBXZWJTb2NrZXRT
ZXJ2ZXI6OmNsb3NlKCkKK3sKKyAgICBtX3NlcnZlclNvY2tldC0+Y2xvc2UoKTsKK30KKwordm9p
ZCBXZWJTb2NrZXRTZXJ2ZXI6OmRpZFJlY2VpdmVDb25uZWN0aW9uKFNlcnZlclNvY2tldEhhbmRs
ZSosIFBhc3NSZWZQdHI8U29ja2V0U3RyZWFtSGFuZGxlPiBzb2NrZXRIYW5kbGUpCit7CisgICAg
Ly8gRklYTUU6IFRydXN0IHRoYXQgdGhpcyBkZWxldGVzIGl0c2VsZj8gSXMgdGhlcmUgYSBnb29k
IHBhcmFkaWdtIGhlcmU/CisgICAgLy8gRklYTUU6IFNob3VsZCBJIGp1c3QgaGF2ZSBhIHZpcnR1
YWwgbWV0aG9kIGxpa2U6IGNyZWF0ZVdlYlNvY2tldENvbm5lY3Rpb24oaGFuZGxlKT8KKyAgICBu
ZXcgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbihzb2NrZXRIYW5kbGUsIG1fY2xpZW50KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0U2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJz
b2NrZXRzL1dlYlNvY2tldFNlcnZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjE4NjVjNTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRz
L1dlYlNvY2tldFNlcnZlci5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNvY2tldFNlcnZlcl9oCisjZGVm
aW5lIFdlYlNvY2tldFNlcnZlcl9oCisKKyNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCisKKyNpbmNs
dWRlICJTZXJ2ZXJTb2NrZXRIYW5kbGVDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBTZXJ2ZXJTb2NrZXRIYW5kbGU7CitjbGFzcyBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9u
Q2xpZW50OworCitjbGFzcyBXZWJTb2NrZXRTZXJ2ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJT
b2NrZXRTZXJ2ZXI+LCBwdWJsaWMgU2VydmVyU29ja2V0SGFuZGxlQ2xpZW50IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJTb2NrZXRTZXJ2ZXI+IGNyZWF0ZShXZWJTb2NrZXRT
ZXJ2ZXJDb25uZWN0aW9uQ2xpZW50KiBjbGllbnQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJT
b2NrZXRTZXJ2ZXIoY2xpZW50KSk7IH0KKyAgICB2aXJ0dWFsIH5XZWJTb2NrZXRTZXJ2ZXIoKTsK
KworICAgIGJvb2wgaXNMaXN0ZW5pbmcoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBzaG9ydCBwb3J0
KCkgY29uc3Q7CisKKyAgICAvLyBTZXJ2ZXIgb3BlcmF0aW9ucy4KKyAgICB2b2lkIGxpc3Rlbih1
bnNpZ25lZCBzaG9ydCBwb3J0KTsKKyAgICB2b2lkIGNsb3NlKCk7CisKKyAgICAvLyBTZXJ2ZXJT
b2NrZXRIYW5kbGVDbGllbnQgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVDb25uZWN0aW9uKFNlcnZlclNvY2tldEhhbmRsZSosIFBhc3NSZWZQdHI8U29ja2V0U3Ry
ZWFtSGFuZGxlPik7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJTb2NrZXRTZXJ2ZXIoV2ViU29ja2V0
U2VydmVyQ29ubmVjdGlvbkNsaWVudCogY2xpZW50KTsKKworICAgIFJlZlB0cjxTZXJ2ZXJTb2Nr
ZXRIYW5kbGU+IG1fc2VydmVyU29ja2V0OworICAgIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb25D
bGllbnQqIG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCX1NPQ0tFVFMpCisKKyNlbmRpZiAvLyBXZWJTb2NrZXRTZXJ2ZXJfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRTZXJ2ZXJDb25u
ZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0U2VydmVyQ29u
bmVjdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQxYmU1MQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0U2Vy
dmVyQ29ubmVjdGlvbi5jcHAKQEAgLTAsMCArMSwyNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoV0VCX1NPQ0tFVFMpCisKKyNpbmNsdWRlICJXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmgi
CisKKyNpbmNsdWRlICJIVFRQUGFyc2VFcnJvci5oIgorI2luY2x1ZGUgIkhUVFBSZXF1ZXN0Lmgi
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUVycm9yLmgiCisj
aW5jbHVkZSAiV2ViU29ja2V0RnJhbWluZy5oIgorI2luY2x1ZGUgIldlYlNvY2tldEhhbmRzaGFr
ZS5oIgorI2luY2x1ZGUgIldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb25DbGllbnQuaCIKKyNpbmNs
dWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6V2ViU29j
a2V0U2VydmVyQ29ubmVjdGlvbihQYXNzUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gc29ja2V0
LCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2lkZW50
aWZpZXIoMCkKKyAgICAsIG1fbW9kZShIVFRQKQorICAgICwgbV9pc1NodXR0aW5nRG93bihmYWxz
ZSkKKyAgICAsIG1fc29ja2V0KHNvY2tldCkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKK3sKKyAg
ICBMT0coTmV0d29yaywgIldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246ICVwIGNsaWVudCBmb3Ig
U29ja2V0U3RyZWFtSGFuZGxlICVwIiwgdGhpcywgc29ja2V0LmdldCgpKTsKKyAgICBtX3NvY2tl
dC0+c2V0Q2xpZW50KHRoaXMpOworfQorCitXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjp+V2Vi
U29ja2V0U2VydmVyQ29ubmVjdGlvbigpCit7CisgICAgQVNTRVJUKCFtX3NvY2tldCk7Cit9CisK
K3ZvaWQgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6c2h1dGRvd25Ob3coKQoreworICAgIGlm
IChtX2lzU2h1dHRpbmdEb3duKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzU2h1dHRpbmdE
b3duID0gdHJ1ZTsKKyAgICBtX3NvY2tldC0+Y2xvc2UoKTsKKyAgICBtX3NvY2tldCA9IDA7Cisg
ICAgZGVsZXRlIHRoaXM7Cit9CisKK3ZvaWQgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6c2h1
dGRvd25BZnRlclNlbmRPck5vdygpCit7CisgICAgLy8gSWYgdGhpcyBBU1NFUlQgaGFwcGVucyBv
biBhbnkgcGxhdGZvcm0gdGhlbiB0aGVpciBTb2NrZXRTdHJlYW1IYW5kbGU6OnNlbmQKKyAgICAv
LyBmb2xsb3dlZCBieSBhIFNvY2tldFN0cmVhbUhhbmRsZTo6Y2xvc2UgaXMgbm90IGd1YXJlbnRl
ZWQgdG8gaGF2ZSBzZW50IGFsbAorICAgIC8vIGRhdGEuIElmIHRoaXMgaGFwcGVucywgd2UgbmVl
ZCB0byBzbGlnaHRseSBjaGFuZ2UgdGhlIGRlc2lnbiB0byBpbmNsdWRlIGEKKyAgICAvLyBTb2Nr
ZXRTdHJlYW1IYW5kbGVDbGllbnQ6OmRpZFNlbmQsIGhhbmRsZSBpdCBoZXJlLCBhbmQgYWRkIGFu
IG1fc2h1dGRvd25BZnRlclNlbmQKKyAgICAvLyBzdGF0ZSBvbiB0aGlzIFdlYlNvY2tldFNlcnZl
ckNvbm5lY3Rpb24uCisgICAgQVNTRVJUKCFtX3NvY2tldC0+YnVmZmVyZWRBbW91bnQoKSk7CisK
KyAgICBzaHV0ZG93bk5vdygpOworfQorCit2b2lkIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246
OnNlbmRXZWJTb2NrZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBMT0co
TmV0d29yaywgIldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24gJXAgc2VuZCAlcyIsIHRoaXMsIG1l
c3NhZ2UudXRmOCgpLmRhdGEoKSk7CisgICAgVmVjdG9yPGNoYXI+IGZyYW1lZE1lc3NhZ2U7Cisg
ICAgZnJhbWVXZWJTb2NrZXRUZXh0TWVzc2FnZShtZXNzYWdlLCBmcmFtZWRNZXNzYWdlKTsKKyAg
ICBtX3NvY2tldC0+c2VuZChmcmFtZWRNZXNzYWdlLmRhdGEoKSwgZnJhbWVkTWVzc2FnZS5zaXpl
KCkpOworfQorCit2b2lkIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OnNlbmRSYXdEYXRhKGNv
bnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgbV9zb2NrZXQtPnNlbmQoZGF0
YSwgbGVuZ3RoKTsKK30KKwordm9pZCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpkaWRDbG9z
ZShTb2NrZXRTdHJlYW1IYW5kbGUqKQoreworICAgIC8vIEhUVFAgTW9kZSwgdGhlIHNvY2tldCBz
dHJlYW0gY2xvc2luZyBpcyB1bmV4cGVjdGVkLgorICAgIGlmIChtX21vZGUgPT0gSFRUUCkgewor
ICAgICAgICBzaHV0ZG93bk5vdygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
V2ViIFNvY2tldCBNb2RlLgorICAgIC8vIEZJWE1FOiBXZSB3aWxsIGJlIGRlbGV0ZWQgYWZ0ZXIg
dGhpcy4gQW55IGdvb2Qgd2F5IGNoZWNrIHRoYXQ/CisgICAgaWYgKG1fbW9kZSA9PSBXZWJTb2Nr
ZXQpIHsKKyAgICAgICAgbV9jbGllbnQtPmRpZENsb3NlV2ViU29ja2V0Q29ubmVjdGlvbih0aGlz
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZvciBhbnkgbmV3IG1vZGVzIGFk
ZCBpbiB0aGUgZnV0dXJlLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFdl
YlNvY2tldFNlcnZlckNvbm5lY3Rpb246OmRpZFJlY2VpdmVEYXRhKFNvY2tldFN0cmVhbUhhbmRs
ZSosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgLy8gRWFjaCBkaWRSZWNl
aXZlRGF0YSBjYWxsIGFkZHMgbW9yZSBkYXRhIHRvIG91ciBidWZmZXIuCisgICAgLy8gV2UgY2xl
YXIgdGhlIGJ1ZmZlciB3aGVuIHdlIGhhdmUgaGFuZGxlZCBkYXRhIGZyb20gaXQuCisgICAgbV9i
dWZmZXJlZERhdGEuYXBwZW5kKGRhdGEsIGxlbmd0aCk7CisKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgLy8gQXNzdW1lIGJ1ZmZlcmVkIGlucHV0IGFuZCBkb24ndCB3YXN0ZSBvdXIgdGltZSBwYXJz
aW5nIGluY29tcGxldGUgaW5wdXQuCisgICAgaWYgKGxlbmd0aCA9PSAxMDI0KQorICAgICAgICBy
ZXR1cm47CisjZW5kaWYKKworICAgIC8vIEhUVFAgTW9kZS4KKyAgICBpZiAobV9tb2RlID09IEhU
VFApIHsKKyAgICAgICAgcmVhZEhUVFBNZXNzYWdlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBXZWIgU29ja2V0IE1vZGUuCisgICAgaWYgKG1fbW9kZSA9PSBXZWJTb2NrZXQp
IHsKKyAgICAgICAgcmVhZFdlYlNvY2tldEZyYW1lcygpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gRm9yIGFueSBuZXcgbW9kZXMgYWRkZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9u
OjpkaWRGYWlsKFNvY2tldFN0cmVhbUhhbmRsZSosIGNvbnN0IFNvY2tldFN0cmVhbUVycm9yJiBl
cnJvcikKK3sKKyAgICAvLyBQb3NzaWJsZSByZWFkIG9yIHdyaXRlIGVycm9yLgorICAgIExPRyhO
ZXR3b3JrLCAiV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjogU3RyZWFtIEVycm9yICglZCkiLCBl
cnJvci5lcnJvckNvZGUoKSk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKK30KKwordm9pZCBX
ZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpyZWFkSFRUUE1lc3NhZ2UoKQoreworICAgIEhUVFBQ
YXJzZUVycm9yIGVycm9yID0gSFRUUFBhcnNlRXJyb3IoKTsKKyAgICBSZWZQdHI8SFRUUFJlcXVl
c3Q+IHJlcXVlc3QgPSBIVFRQUmVxdWVzdDo6cGFyc2VIVFRQUmVxdWVzdEZyb21CdWZmZXIobV9i
dWZmZXJlZERhdGEuZGF0YSgpLCBtX2J1ZmZlcmVkRGF0YS5zaXplKCksIGVycm9yKTsKKyAgICBp
ZiAoIXJlcXVlc3QpIHsKKyAgICAgICAgTE9HKE5ldHdvcmssICJXZWJTb2NrZXRTZXJ2ZXJDb25u
ZWN0aW9uOiBFcnJvciBQYXJzaW5nIEhUVFAgTWVzc2FnZTogJXMiLCBlcnJvci5kZXNjcmlwdGlv
bi51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgaWYgKGVycm9yLndhc0xpa2VseUluY29tcGxldGVJ
bnB1dCkKKyAgICAgICAgICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0U2VydmVyQ29ubmVjdGlv
bjogVGhpcyB3YXMgbW9zdCBsaWtlbHkgZHVlIHRvIGluY29tcGxldGUgaW5wdXQuIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBc3N1bWUgYWxsIHRoZSBpbnB1dCBoYXMgYmVl
biByZWFkIGlmIHdlIGFyZSByZWFkaW5nIGFuIEhUVFAgUmVxdWVzdC4KKyAgICBtX2J1ZmZlcmVk
RGF0YS5jbGVhcigpOworCisgICAgLy8gSWYgdGhpcyBpcyBhIFdlYlNvY2tldCByZXF1ZXN0LCBw
ZXJmb3JtIHRoZSBXZWJTb2NrZXQgSGFuZHNoYWtlLgorICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAm
IGhlYWRlcnMgPSByZXF1ZXN0LT5oZWFkZXJGaWVsZHMoKTsKKyAgICBTdHJpbmcgdXBncmFkZUhl
YWRlclZhbHVlID0gaGVhZGVycy5nZXQoIlVwZ3JhZGUiKTsKKyAgICBpZiAodXBncmFkZUhlYWRl
clZhbHVlID09ICJXZWJTb2NrZXQiKSB7CisgICAgICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0
U2VydmVyQ29ubmVjdGlvbjogJXAgVXBncmFkaW5nIHRvIGEgV2ViU29ja2V0IFNlcnZlci4iLCB0
aGlzKTsKKyAgICAgICAgdXBncmFkZVRvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbihyZXF1ZXN0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIE90aGVyd2lzZSwgdGhpcyBpcyBh
biBIVFRQIFJlcXVlc3Qgd2UgZG9uJ3Qga25vdyBob3cgdG8gZGVhbCB3aXRoLgorICAgIG1fY2xp
ZW50LT5kaWRSZWNlaXZlVW5yZWNvZ25pemVkSFRUUFJlcXVlc3QodGhpcywgcmVxdWVzdCk7Cit9
CisKK3ZvaWQgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6dXBncmFkZVRvV2ViU29ja2V0U2Vy
dmVyQ29ubmVjdGlvbihQYXNzUmVmUHRyPEhUVFBSZXF1ZXN0PiByZXF1ZXN0KQoreworICAgIEFT
U0VSVChyZXF1ZXN0KTsKKyAgICBBU1NFUlQobV9tb2RlID09IEhUVFApOworICAgIG1fbW9kZSA9
IFdlYlNvY2tldDsKKyAgICBSZWZQdHI8SFRUUFJlcXVlc3Q+IHByb3RlY3RlZFJlcXVlc3QocmVx
dWVzdCk7CisKKyAgICAvLyBBc2sgdGhlIGNsaWVudCBpZiB3ZSBzaG91bGQgdXBncmFkZSBmb3Ig
dGhpcyBvciBub3QuCisgICAgaWYgKCFtX2NsaWVudC0+ZGlkUmVjZWl2ZVdlYlNvY2tldFVwZ3Jh
ZGVIVFRQUmVxdWVzdCh0aGlzLCBwcm90ZWN0ZWRSZXF1ZXN0KSkgeworICAgICAgICBzaHV0ZG93
bk5vdygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUGVyZm9ybSB0aGUgV2Vi
U29ja2V0IGhhbmRzaGFrZS4KKyAgICBXZWJTb2NrZXRIYW5kc2hha2UgaGFuZHNoYWtlKEtVUkwo
KSwgU3RyaW5nKCksIDApOworICAgIGhhbmRzaGFrZS5yZWFkQ2xpZW50SGFuZHNoYWtlKHByb3Rl
Y3RlZFJlcXVlc3QpOworICAgIENTdHJpbmcgaHR0cFJlc3BvbnNlID0gaGFuZHNoYWtlLnNlcnZl
ckhhbmRzaGFrZVJlc3BvbnNlTWVzc2FnZSgpOworCisgICAgLy8gU2VuZCB0aGUgV2ViU29ja2V0
IGhhbmRzaGFrZSByZXNwb25zZS4KKyAgICBMT0dfRVJST1IoIldlYlNvY2tldFNlcnZlckNvbm5l
Y3Rpb246IEhhbmRzaGFrZSBSZXNwb25zZTogJXMiLCBodHRwUmVzcG9uc2UuZGF0YSgpKTsKKyAg
ICBtX3NvY2tldC0+c2VuZChodHRwUmVzcG9uc2UuZGF0YSgpLCBodHRwUmVzcG9uc2UubGVuZ3Ro
KCkpOworCisgICAgLy8gTm90aWZ5IG91ciBjbGllbnQgb2YgdGhlIGVzdGFibGlzaGVkIGNvbm5l
Y3Rpb24uCisgICAgbV9jbGllbnQtPmRpZEVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24odGhp
cywgcHJvdGVjdGVkUmVxdWVzdCk7Cit9CisKK3ZvaWQgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlv
bjo6cmVhZFdlYlNvY2tldEZyYW1lcygpCit7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAg
Ym9vbCBkaWRSZWFkT25lRnJhbWUgPSByZWFkV2ViU29ja2V0RnJhbWUoKTsKKyAgICAgICAgaWYg
KCFkaWRSZWFkT25lRnJhbWUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKG1fYnVm
ZmVyZWREYXRhLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworYm9v
bCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpyZWFkV2ViU29ja2V0RnJhbWUoKQoreworICAg
IGJvb2wgaW5jb21wbGV0ZSA9IGZhbHNlOworICAgIGJvb2wgZXJyb3IgPSBmYWxzZTsKKyAgICBW
ZWN0b3I8Y2hhcj4gbWVzc2FnZTsKKyAgICBXZWJTb2NrZXRGcmFtZVR5cGUgZnJhbWVUeXBlOwor
ICAgIHNpemVfdCBmcmFtZUxlbmd0aCA9IHBhcnNlV2ViU29ja2V0RnJhbWUobV9idWZmZXJlZERh
dGEuZGF0YSgpLCBtX2J1ZmZlcmVkRGF0YS5zaXplKCksIGluY29tcGxldGUsIGVycm9yLCBtZXNz
YWdlLCBmcmFtZVR5cGUpOworCisgICAgLy8gSW5jb21wbGV0ZSBmcmFtZS4gV2FpdCB0byByZWNl
aXZlIG1vcmUgZGF0YS4KKyAgICBpZiAoaW5jb21wbGV0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gUmVtb3ZlIHRoZSBmcmFtZSBmcm9tIG91ciBidWZmZXIuCisgICAgaWYgKGZy
YW1lTGVuZ3RoKQorICAgICAgICBtX2J1ZmZlcmVkRGF0YS5yZW1vdmUoMCwgZnJhbWVMZW5ndGgp
OworCisgICAgLy8gU2lsZW50bHkgaWdub3JlIGVycm9ycy4KKyAgICBpZiAoZXJyb3IpIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOiBlcnJvciBpbiBwYXJz
aW5nIGEgd2ViIHNvY2tldCBmcmFtZS4iKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgLy8gV2UgZG9uJ3QgZG8gYW55dGhpbmcgd2l0aCBiaW5hcnkgZnJhbWVzLgorICAgIGlm
IChmcmFtZVR5cGUgPT0gQmluYXJ5RnJhbWUpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Ly8gRGVsZWdhdGUgVGV4dCBmcmFtZSB0byBvdXIgY2xpZW50LgorICAgIGlmIChmcmFtZVR5cGUg
PT0gVGV4dEZyYW1lKSB7CisgICAgICAgIFN0cmluZyBtc2cgPSBTdHJpbmc6OmZyb21VVEY4KG1l
c3NhZ2UuZGF0YSgpLCBtZXNzYWdlLnNpemUoKSk7CisgICAgICAgIG1fY2xpZW50LT5kaWRSZWNl
aXZlV2ViU29ja2V0TWVzc2FnZSh0aGlzLCBtc2cpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICAvLyBGb3IgYW55IG5ldyBXZWJTb2NrZXRGcmFtZVR5cGVzIGluIHRoZSBmdXR1
cmUuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS93ZWJzb2NrZXRzL1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3dlYnNvY2tldHMvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjE0N2M0YWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uaApAQCAtMCwwICsxLDkx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uX2gKKyNkZWZpbmUgV2ViU29ja2V0U2VydmVyQ29u
bmVjdGlvbl9oCisKKyNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCisKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZS5oIgorI2luY2x1ZGUgIlNv
Y2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhUVFBS
ZXF1ZXN0OworY2xhc3MgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbkNsaWVudDsKKworLy8gRklY
TUU6IFRoaXMgQ29ubmVjdGlvbiBjbGFzcywgaGFuZGxlcyBkZWxldGluZyBpdHNlbGYgd2hlbiBp
dHMgbm8gbG9uZ2VyCisvLyBuZWVkZWQuIElzIHRoZXJlIGEgYmV0dGVyIHBhcmFkaWdtIGZvciB0
aGlzPworCitjbGFzcyBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uIDogcHVibGljIFNvY2tldFN0
cmVhbUhhbmRsZUNsaWVudCB7CitwdWJsaWM6CisgICAgZW51bSBXZWJTb2NrZXRTZXJ2ZXJNb2Rl
IHsgSFRUUCwgV2ViU29ja2V0IH07CisgICAgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbihQYXNz
UmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gc29ja2V0LCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0
aW9uQ2xpZW50KiBjbGllbnQpOworICAgIHZpcnR1YWwgfldlYlNvY2tldFNlcnZlckNvbm5lY3Rp
b24oKTsKKworICAgIHVuc2lnbmVkIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50
aWZpZXI7IH0KKyAgICB2b2lkIHNldElkZW50aWZpZXIodW5zaWduZWQgaWQpIHsgbV9pZGVudGlm
aWVyID0gaWQ7IH0KKworICAgIC8vIFNlbmRpbmcgZGF0YSBvdmVyIHRoZSBjb25uZWN0aW9uLgor
ICAgIHZvaWQgc2VuZFdlYlNvY2tldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAg
ICB2b2lkIHNlbmRSYXdEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOworCisg
ICAgLy8gVGVybWluYXRpbmcgdGhlIGNvbm5lY3Rpb24uCisgICAgdm9pZCBzaHV0ZG93bk5vdygp
OworICAgIHZvaWQgc2h1dGRvd25BZnRlclNlbmRPck5vdygpOworCisgICAgLy8gU29ja2V0U3Ry
ZWFtSGFuZGxlQ2xpZW50IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBkaWRDbG9z
ZShTb2NrZXRTdHJlYW1IYW5kbGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEo
U29ja2V0U3RyZWFtSGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7CisgICAg
dmlydHVhbCB2b2lkIGRpZEZhaWwoU29ja2V0U3RyZWFtSGFuZGxlKiwgY29uc3QgU29ja2V0U3Ry
ZWFtRXJyb3ImKTsKKworcHJpdmF0ZToKKyAgICAvLyBIVFRQIE1vZGUuCisgICAgdm9pZCByZWFk
SFRUUE1lc3NhZ2UoKTsKKworICAgIC8vIFdlYlNvY2tldCBNb2RlLgorICAgIHZvaWQgdXBncmFk
ZVRvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbihQYXNzUmVmUHRyPEhUVFBSZXF1ZXN0Pik7Cisg
ICAgdm9pZCByZWFkV2ViU29ja2V0RnJhbWVzKCk7CisgICAgYm9vbCByZWFkV2ViU29ja2V0RnJh
bWUoKTsKKworcHJvdGVjdGVkOgorICAgIHVuc2lnbmVkIG1faWRlbnRpZmllcjsKKyAgICBWZWN0
b3I8Y2hhcj4gbV9idWZmZXJlZERhdGE7CisgICAgV2ViU29ja2V0U2VydmVyTW9kZSBtX21vZGU7
CisgICAgYm9vbCBtX2lzU2h1dHRpbmdEb3duOworICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5k
bGU+IG1fc29ja2V0OworICAgIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb25DbGllbnQqIG1fY2xp
ZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
Ql9TT0NLRVRTKQorCisjZW5kaWYgLy8gV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldFNlcnZlckNvbm5lY3Rp
b25DbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0U2VydmVyQ29u
bmVjdGlvbkNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZGJh
YjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tl
dFNlcnZlckNvbm5lY3Rpb25DbGllbnQuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJTb2NrZXRTZXJ2ZXJD
b25uZWN0aW9uQ2xpZW50X2gKKyNkZWZpbmUgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbkNsaWVu
dF9oCisKKyNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorI2luY2x1ZGUgIldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhUVFBSZXF1
ZXN0OworCitjbGFzcyBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uQ2xpZW50IHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uQ2xpZW50KCkgeyB9CisKKyAg
ICAvLyBSZWNlaXZlZCBhbiBIVFRQIHJlcXVlc3QgYnV0IGRvbid0IGtub3cgd2hhdCB0byBkbyB3
aXRoIGl0LgorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlVW5yZWNvZ25pemVkSFRUUFJlcXVl
c3QoV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbiosIFBhc3NSZWZQdHI8SFRUUFJlcXVlc3Q+KSB7
IH0KKworICAgIC8vIFJlY2VpdmVkIGEgV2ViU29ja2V0IFVwZ3JhZGUgSFRUUCByZXF1ZXN0LiBB
c2sgaWYgd2Ugc2hvdWxkIGhhbmRsZSBpdCBhbmQgdXBncmFkZS4KKyAgICB2aXJ0dWFsIGJvb2wg
ZGlkUmVjZWl2ZVdlYlNvY2tldFVwZ3JhZGVIVFRQUmVxdWVzdChXZWJTb2NrZXRTZXJ2ZXJDb25u
ZWN0aW9uKiwgUGFzc1JlZlB0cjxIVFRQUmVxdWVzdD4pIHsgcmV0dXJuIHRydWU7IH0KKworICAg
IC8vIEVzdGFibGlzaGVkIGEgV2ViU29ja2V0IENvbm5lY3Rpb24uCisgICAgdmlydHVhbCB2b2lk
IGRpZEVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24oV2ViU29ja2V0U2VydmVyQ29ubmVjdGlv
biosIFBhc3NSZWZQdHI8SFRUUFJlcXVlc3Q+KSB7IH0KKworICAgIC8vIFJlY2VpdmVkIGEgV2Vi
U29ja2V0IG1lc3NhZ2UuCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVXZWJTb2NrZXRNZXNz
YWdlKFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qLCBjb25zdCBTdHJpbmcmKSB7IH0KKworICAg
IC8vIFdlYlNvY2tldCBDb25uZWN0aW9uIGNsb3NlZC4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xv
c2VXZWJTb2NrZXRDb25uZWN0aW9uKFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qKSB7IH0KK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfU09DS0VU
UykKKworI2VuZGlmIC8vIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb25DbGllbnRfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116541</attachid>
            <date>2011-11-24 13:28:53 -0800</date>
            <delta_ts>2011-12-05 12:33:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73093-20111124222837.patch</filename>
            <type>text/plain</type>
            <size>39546</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMDYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
NGRjZmM4MDIyZTc4OGU1ZmUxNGEzODA3ZmQ2MDBlMjhjM2RjZDgxLi44ZDM4N2MzMWRlNjRjNzRl
ZTE3ZGJkN2I3ZGI5NDExMDA0ZGM4YjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxMS0xMS0yNCAgSm9jZWx5biBUdXJjb3R0ZSAgPGpvY2VseW4udHVyY290
dGVAbm9raWEuY29tPgorCisgICAgICAgIEFkZCBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUiksIGZh
bHNlIGJ5IGRlZmF1bHQsIHRydWUgZm9yIFF0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwOTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorCiAyMDExLTExLTIzICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgogCiAgICAgICAgIEFkZCBmbGFn
cy9wcmVjaXNpb24gYXJndW1lbnRzIHRvIFN0cmluZzo6bnVtYmVyKGRvdWJsZSkgdG8gYWxsb3cg
ZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB0aGUgcmVzdWx0IHN0cmluZwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGRlNTA2ZWFmMjdhOTFkYjE1N2M5YTFjZmQ2N2EzNWM3ZTA4YWFhZTUuLjQyNWYyYTkzNDRmMGY4
OWZmYjgxZjk5YmYwZTcxMTJkNDM2MzE4ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw4NiBAQAog
MjAxMS0xMS0yNCAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPiBhbmQgSm9j
ZWx5biBUdXJjb3R0ZSAgPGpvY2VseW4udHVyY290dGVAbm9raWEuY29tPgogCisgICAgICAgIEFk
ZCBhIEdlbmVyaWMgV2ViU29ja2V0IFNlcnZlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhlIEluc3BlY3RvciBTZXJ2ZXIgd2lsbCBiZSBhIFdlYlNv
Y2tldCBTZXJ2ZXIgdGhhdCBhbHNvIHJlc3BvbmRzIHRvCisgICAgICAgIG5vbi1XZWJTb2NrZXQt
VXBncmFkZSBIVFRQIFJlcXVlc3RzLiBUaGlzIGlzIGEgZ2VuZXJpYyBXZWJTb2NrZXQgc2VydmVy
CisgICAgICAgIHRoYXQgaGFuZGxlcyBwYXNzZXMgb24gd2hhdCBpdCBkb2Vzbid0IGtub3cgb24g
dG8gaXRzIENsaWVudCBmb3IgZXh0ZW5kZWQKKyAgICAgICAgZnVuY3Rpb25hbGl0eS4gVGhpcyBj
b2RlIGlzIHdyYXBwZWQgaW4gYSBuZXcgRU5BQkxFKElOU1BFQ1RPUl9TRVJWRVIpIGZsYWcuCisK
KyAgICAgICAgVGhlcmUgYXJlIG5vIHRlc3RzIHlldCBmb3IgYSBidWlsdC1pbiBXZWJTb2NrZXQg
c2VydmVyLgorCisgICAgICAgICAgVGhpcyBwYXRoIGF0dGVtcHRzIHRvIGtlZXAgdGhlIG1ham9y
aXR5IHRoZSB3ZWIgc29ja2V0IGhhbmRzaGFrZSBIVFRQCisgICAgICAgICAgcmVxdWVzdCBhbmQg
cmVzcG9uc2UgbG9naWMgaW5zaWRlIFdlYlNvY2tldEhhbmRzaGFrZSBhbmQgZXhwb3NlIGl0IHN0
YXRpY2FsbHkKKyAgICAgICAgICB0byBtYWtlIGl0IGF2YWlsYWJsZSBmb3IgdGhlIHNlcnZlci4K
KworICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpwYXJzZUZyYW1lKTogbWFkZSBzdGF0aWMuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpwcm9jZXNzRnJhbWUpOiBmZWVkIG1lbWJl
ciBkYXRhIHRvIHBhcnNlRnJhbWUgYXMgcGFyYW1ldGVycy4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YlNvY2tldENoYW5uZWw6OmJ1aWxkRnJhbWUpOiBmcmFtZSBidWlsZGluZyBsb2dpYyBleHRyYWN0
ZWQgZnJvbSBzZW5kRnJhbWUgYW5kIG1hZGUgc3RhdGljLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
U29ja2V0Q2hhbm5lbDo6c2VuZEZyYW1lKTogbm93IGp1c3QgY2FsbHMgYnVpbGRGcmFtZSBhbmQg
c2VuZHMgdGhlIGRhdGEuCisgICAgICAgICogd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmg6
IG1hZGUgT3BDb2RlLCBQYXJzZUZyYW1lUmVzdWx0IGFuZCBwYXJzZUZyYW1lIHB1YmxpYy4KKyAg
ICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmdldEV4cGVjdGVkV2ViU29ja2V0QWNjZXB0KTogZXhw
b3NlIHRoaXMgb2JqZWN0LXN0YXRpYyBmdW5jdGlvbi4KKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dl
YlNvY2tldEhhbmRzaGFrZS5oOgorCisgICAgICAgICAgV2ViU29ja2V0U2VydmVyIGlzIGEgc2lt
cGxlIHNlcnZlci4gQ2FsbGluZyBsaXN0ZW4sIG9yIGNsb3NlLAorICAgICAgICAgIG11bHRpcGxl
IHRpbWVzIGlzIHNhZmUuIFN1YmNsYXNzaW5nIGlzIGV4cGVjdGVkLiBUaGlzIGlzIGEKKyAgICAg
ICAgICBiYXNpYyB3cmFwcGVyIGFyb3VuZCB0aGUgU2VydmVyU29ja2V0SGFuZGxlIHdpdGggdGhh
dCBjb252ZW5pZW5jZS4KKworICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0U2VydmVyLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRTZXJ2ZXI6OldlYlNvY2tldFNl
cnZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRTZXJ2ZXI6On5XZWJTb2NrZXRTZXJ2
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0U2VydmVyOjpsaXN0ZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViU29ja2V0U2VydmVyOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJTb2NrZXRTZXJ2ZXI6OmRpZEFjY2VwdENvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
V2ViU29ja2V0U2VydmVyOjpkaWRDbG9zZVdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24pOgorICAg
ICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0U2VydmVyLmg6IEFkZGVkLgorICAgICAgICAqIHdl
YnNvY2tldHMvV2ViU29ja2V0U2VydmVyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViU29ja2V0U2VydmVyQ2xpZW50Ojp+V2ViU29ja2V0U2VydmVyQ2xpZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYlNvY2tldFNlcnZlckNsaWVudDo6ZGlkUmVjZWl2ZVVucmVjb2duaXpl
ZEhUVFBSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldFNlcnZlckNsaWVudDo6
ZGlkUmVjZWl2ZVdlYlNvY2tldFVwZ3JhZGVIVFRQUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJTb2NrZXRTZXJ2ZXJDbGllbnQ6OmRpZEVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0U2VydmVyQ2xpZW50OjpkaWRSZWNlaXZlV2Vi
U29ja2V0TWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRTZXJ2ZXJDbGllbnQ6
OmRpZENsb3NlV2ViU29ja2V0Q29ubmVjdGlvbik6CisKKyAgICAgICAgICBFYWNoIFdlYlNvY2tl
dENvbm5lY3Rpb246CisKKyAgICAgICAgICAgLSBQYXNzZXMgdW5rbm93biBIVFRQIFJlcXVlc3Rz
IHRvIHRoZSBzZXJ2ZXIncyBjbGllbnQuCisgICAgICAgICAgIC0gSGFuZGxlcyBXZWJTb2NrZXQg
VXBncmFkZSBSZXF1ZXN0cy4KKyAgICAgICAgICAgICAtIEZpcnN0IGFzayB0aGUgY2xpZW50IGlm
IGl0IGlzIG9rYXkuCisgICAgICAgICAgICAgLSBMYXRlciBub3RpZnkgdGhlIGNsaWVudCBhYm91
dCBhIHN1Y2Nlc3MuCisgICAgICAgICAgIC0gT25jZSB1cGdyYWRlZCB0aGUgY29ubmVjdGlvbiBw
YXJzZXMgYW5kIHBhc3NlcyBXZWJTb2NrZXQKKyAgICAgICAgICAgICBmcmFtZXMgdG8gdGhlIGNs
aWVudC4KKworICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6
V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRT
ZXJ2ZXJDb25uZWN0aW9uOjp+V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpzaHV0ZG93bk5vdyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpzaHV0ZG93bkFmdGVyU2VuZE9y
Tm93KTogbWVhbnQgdG8gc2h1dGRvd24gYWZ0ZXIgYW4gSFRUUCByZXNwb25zZS4gRW5zdXJlIGFs
bCBwbGF0Zm9ybXMgd29yayBhcyBleHBlY3RlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tl
dFNlcnZlckNvbm5lY3Rpb246OnNlbmRXZWJTb2NrZXRNZXNzYWdlKTogc2VuZCBhIHRleHQgbWVz
c2FnZSAoV2ViU29ja2V0IG1lc3NhZ2UpIG92ZXIgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgIChX
ZWJDb3JlOjpXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpzZW5kSFRUUFJlc3BvbnNlSGVhZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OnNlbmRSYXdE
YXRhKTogc2VuZCByYXcgZGF0YSAoSFRUUCBtZXNzYWdlKSBvdmVyIHRoZSBjb25uZWN0aW9uLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6ZGlkQ2xvc2VTb2Nr
ZXRTdHJlYW0pOiBoYW5kbGUgc29ja2V0IGNsb3Npbmcgc2NlbmFyaW9zLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZVNvY2tldFN0cmVhbURh
dGEpOiBwYXJzZSB0aGUgaW5jb21pbmcgZGF0YSBpbiBIVFRQIC8gV2ViU29ja2V0IG1vZGVzLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6ZGlkRmFpbFNvY2tl
dFN0cmVhbSk6IGxvZyBlcnJvcnMuCisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRTZXJ2ZXJD
b25uZWN0aW9uOjpyZWFkSFRUUE1lc3NhZ2UpOiB3aGVuIHN0YXJ0aW5nLCBhIHdlYiBzb2NrZXQg
Y29ubmVjdGlvbiByZWFkcyBhbiBIVFRQIG1lc3NhZ2UuCisgICAgICAgIChXZWJDb3JlOjpXZWJT
b2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjp1cGdyYWRlVG9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OnJlYWRXZWJT
b2NrZXRGcmFtZXMpOiBwYXJzZSBvdXIgYnVmZmVyIGZvciBhcyBtYW55IGZyYW1lcyBhcyBwb3Nz
aWJsZS4KKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OnJlYWRX
ZWJTb2NrZXRGcmFtZSk6IHBhcnNlIGFuIGluZGl2aWR1YWwgZnJhbWUuCisgICAgICAgICogd2Vi
c29ja2V0cy9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6aWRlbnRpZmllcik6IHVzZWZ1bCBmb3Ig
Y2xpZW50cyB0byBoYXNoLgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0U2VydmVyQ29ubmVj
dGlvbjo6c2V0SWRlbnRpZmllcik6CisKKyAgICAgICAgICBNaXNjZWxsYW5lb3VzLiBBZGQgbmV3
IGZpbGVzIHRvIHRoZSBRdCBidWlsZCBvbmx5IGFzIG90aGVyIHBsYXRmb3JtcworICAgICAgICAg
IGRvbid0IGhhdmUgRU5BQkxFKElOU1BFQ1RPUl9TRVJWRVIpIHlldC4KKworICAgICAgICAqIFRh
cmdldC5wcmk6CisKKzIwMTEtMTEtMjQgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0
Lm9yZz4gYW5kIEpvY2VseW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4K
KwogICAgICAgICBBZGQgR2VuZXJpYyBIVFRQIFJlcXVlc3QgQ2xhc3MuIEdlbmVyYWxpemVkIEhU
VFAgUGFyc2luZy4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTczMDkyCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZv
cm0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAppbmRleCA0Njk3Y2Rk
NmQzODRiNjlhYzcwOGRmNDAyYWVlZjc3Y2IyOGM2ZGE2Li4xYzQ5MTllN2E2MzQ0NTg3MmI0ZTU0
NTVkNWVmM2UzZDM5OTg4MzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1BsYXRmb3JtLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCkBA
IC03NTcsNiArNzU3LDcgQEAKICNpZiBQTEFURk9STShRVCkKIC8qIFdlIG11c3Qgbm90IGN1c3Rv
bWl6ZSB0aGUgZ2xvYmFsIG9wZXJhdG9yIG5ldyBhbmQgZGVsZXRlIGZvciB0aGUgUXQgcG9ydC4g
Ki8KICNkZWZpbmUgRU5BQkxFX0dMT0JBTF9GQVNUTUFMTE9DX05FVyAwCisjZGVmaW5lIEVOQUJM
RV9JTlNQRUNUT1JfU0VSVkVSIDEKICNpZiAhT1MoVU5JWCkKICNkZWZpbmUgVVNFX1NZU1RFTV9N
QUxMT0MgMQogI2VuZGlmCkBAIC04MDQsNiArODA1LDEwIEBACiAjZGVmaW5lIEVOQUJMRV9JTlNQ
RUNUT1IgMQogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChFTkFCTEVfSU5TUEVDVE9SX1NFUlZFUikK
KyNkZWZpbmUgRU5BQkxFX0lOU1BFQ1RPUl9TRVJWRVIgMAorI2VuZGlmCisKICNpZiAhZGVmaW5l
ZChFTkFCTEVfSkFWQV9CUklER0UpCiAjZGVmaW5lIEVOQUJMRV9KQVZBX0JSSURHRSAwCiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpCmluZGV4IDg5MGI5YWE1Y2I5ZjBiMGY4ZWNlYTI3ZDQwNTFkNTIzMTczNjc0
YjAuLmUxNzI0N2NlMThiNzY1MzU0NWViM2ZjMGJlNWI3MjI0OWUwNDI2MDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQpAQCAtMzU5NSw2ICszNTk1LDkgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQl9TT0NL
RVRTPTEpIHsKICAgICAgICAgd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuaCBcCiAgICAg
ICAgIHdlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdC5oIFwKICAgICAgICAgd2Vi
c29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZS5oIFwKKyAgICAgICAgd2Vic29ja2V0
cy9XZWJTb2NrZXRTZXJ2ZXIuaCBcCisgICAgICAgIHdlYnNvY2tldHMvV2ViU29ja2V0U2VydmVy
Q2xpZW50LmggXAorICAgICAgICB3ZWJzb2NrZXRzL1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24u
aCBcCiAgICAgICAgIHBsYXRmb3JtL25ldHdvcmsvU2VydmVyU29ja2V0SGFuZGxlQmFzZS5oIFwK
ICAgICAgICAgcGxhdGZvcm0vbmV0d29yay9xdC9TZXJ2ZXJTb2NrZXRIYW5kbGUuaCBcCiAgICAg
ICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZS5oCkBAIC0z
NjA1LDYgKzM2MDgsOCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCX1NPQ0tFVFM9MSkg
ewogICAgICAgICB3ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAgXAogICAgICAgICB3
ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QuY3BwIFwKICAgICAgICAgd2Vic29j
a2V0cy9XZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZS5jcHAgXAorICAgICAgICB3ZWJzb2NrZXRz
L1dlYlNvY2tldFNlcnZlci5jcHAgXAorICAgICAgICB3ZWJzb2NrZXRzL1dlYlNvY2tldFNlcnZl
ckNvbm5lY3Rpb24uY3BwIFwKICAgICAgICAgd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbC5jcHAgXAogICAgICAgICB3ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsQ2xpZW50V3JhcHBlci5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9uZXR3b3JrL1NlcnZlclNv
Y2tldEhhbmRsZUJhc2UuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tl
dHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNv
Y2tldENoYW5uZWwuY3BwCmluZGV4IDU1M2E5OWY4MzI2N2Q0YTU0Zjg1Y2JhNzUyYzI4N2M1OWIy
ZTZkYjcuLjUyODA3N2U0NjVkYWU1YjM0NjcxOWQwZDY4Zjc1YzA2YWI0ZDFmMWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcApAQCAtNTMwLDEy
ICs1MzAsMTIgQEAgdm9pZCBXZWJTb2NrZXRDaGFubmVsOjpjbG9zaW5nVGltZXJGaXJlZChUaW1l
cjxXZWJTb2NrZXRDaGFubmVsPiogdGltZXIpCiAgICAgICAgIG1faGFuZGxlLT5kaXNjb25uZWN0
KCk7CiB9CiAKLVdlYlNvY2tldENoYW5uZWw6OlBhcnNlRnJhbWVSZXN1bHQgV2ViU29ja2V0Q2hh
bm5lbDo6cGFyc2VGcmFtZShGcmFtZURhdGEmIGZyYW1lKQorV2ViU29ja2V0Q2hhbm5lbDo6UGFy
c2VGcmFtZVJlc3VsdCBXZWJTb2NrZXRDaGFubmVsOjpwYXJzZUZyYW1lKGNvbnN0IGNoYXIqIGRh
dGEsIHNpemVfdCBkYXRhTGVuZ3RoLCBGcmFtZURhdGEmIGZyYW1lLCBTdHJpbmcmIGVycm9yU3Ry
aW5nKQogewotICAgIGNvbnN0IGNoYXIqIHAgPSBtX2J1ZmZlcjsKLSAgICBjb25zdCBjaGFyKiBi
dWZmZXJFbmQgPSBtX2J1ZmZlciArIG1fYnVmZmVyU2l6ZTsKKyAgICBjb25zdCBjaGFyKiBwID0g
ZGF0YTsKKyAgICBjb25zdCBjaGFyKiBidWZmZXJFbmQgPSBkYXRhICsgZGF0YUxlbmd0aDsKIAot
ICAgIGlmIChtX2J1ZmZlclNpemUgPCAyKQorICAgIGlmIChkYXRhTGVuZ3RoIDwgMikKICAgICAg
ICAgcmV0dXJuIEZyYW1lSW5jb21wbGV0ZTsKIAogICAgIHVuc2lnbmVkIGNoYXIgZmlyc3RCeXRl
ID0gKnArKzsKQEAgLTU3NCw3ICs1NzQsNyBAQCBXZWJTb2NrZXRDaGFubmVsOjpQYXJzZUZyYW1l
UmVzdWx0IFdlYlNvY2tldENoYW5uZWw6OnBhcnNlRnJhbWUoRnJhbWVEYXRhJiBmcmFtZQogI2Vu
ZGlmCiAgICAgc2l6ZV90IG1hc2tpbmdLZXlMZW5ndGggPSBtYXNrZWQgPyBtYXNraW5nS2V5V2lk
dGhJbkJ5dGVzIDogMDsKICAgICBpZiAocGF5bG9hZExlbmd0aDY0ID4gbWF4UGF5bG9hZExlbmd0
aCB8fCBwYXlsb2FkTGVuZ3RoNjQgKyBtYXNraW5nS2V5TGVuZ3RoID4gbnVtZXJpY19saW1pdHM8
c2l6ZV90Pjo6bWF4KCkpIHsKLSAgICAgICAgZmFpbCgiV2ViU29ja2V0IGZyYW1lIGxlbmd0aCB0
b28gbGFyZ2U6ICIgKyBTdHJpbmc6Om51bWJlcihwYXlsb2FkTGVuZ3RoNjQpICsgIiBieXRlcyIp
OworICAgICAgICBlcnJvclN0cmluZyA9ICJXZWJTb2NrZXQgZnJhbWUgbGVuZ3RoIHRvbyBsYXJn
ZTogIiArIFN0cmluZzo6bnVtYmVyKHBheWxvYWRMZW5ndGg2NCkgKyAiIGJ5dGVzIjsKICAgICAg
ICAgcmV0dXJuIEZyYW1lRXJyb3I7CiAgICAgfQogICAgIHNpemVfdCBwYXlsb2FkTGVuZ3RoID0g
c3RhdGljX2Nhc3Q8c2l6ZV90PihwYXlsb2FkTGVuZ3RoNjQpOwpAQCAtNjA2LDggKzYwNiwxNCBA
QCBib29sIFdlYlNvY2tldENoYW5uZWw6OnByb2Nlc3NGcmFtZSgpCiAgICAgQVNTRVJUKG1fYnVm
ZmVyKTsKIAogICAgIEZyYW1lRGF0YSBmcmFtZTsKLSAgICBpZiAocGFyc2VGcmFtZShmcmFtZSkg
IT0gRnJhbWVPSykKKyAgICBTdHJpbmcgZXJyb3JTdHJpbmc7CisgICAgUGFyc2VGcmFtZVJlc3Vs
dCByZXN1bHQgPSBwYXJzZUZyYW1lKG1fYnVmZmVyLCBtX2J1ZmZlclNpemUsIGZyYW1lLCBlcnJv
clN0cmluZyk7CisgICAgaWYgKHJlc3VsdCA9PSBGcmFtZUluY29tcGxldGUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAocmVzdWx0ID09IEZyYW1lRXJyb3IpIHsKKyAgICAgICAgZmFp
bChlcnJvclN0cmluZyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICAvLyBW
YWxpZGF0ZSB0aGUgZnJhbWUgZGF0YS4KICAgICBpZiAoaXNSZXNlcnZlZE9wQ29kZShmcmFtZS5v
cENvZGUpKSB7CkBAIC05NTAsMjIgKzk1NiwxOSBAQCB2b2lkIFdlYlNvY2tldENoYW5uZWw6OmFi
b3J0T3V0Z29pbmdGcmFtZVF1ZXVlKCkKICNlbmRpZgogfQogCi1ib29sIFdlYlNvY2tldENoYW5u
ZWw6OnNlbmRGcmFtZShPcENvZGUgb3BDb2RlLCBjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0
YUxlbmd0aCkKK3ZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6YnVpbGRGcmFtZShPcENvZGUgb3BDb2Rl
LCBib29sIG1hc2tQYXlsb2FkLCBjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCwg
VmVjdG9yPGNoYXI+JiBmcmFtZSkKIHsKLSAgICBBU1NFUlQobV9oYW5kbGUpOwotICAgIEFTU0VS
VCghbV9zdXNwZW5kZWQpOwotCi0gICAgVmVjdG9yPGNoYXI+IGZyYW1lOwogICAgIEFTU0VSVCgh
KG9wQ29kZSAmIH5vcENvZGVNYXNrKSk7IC8vIENoZWNrcyB3aGV0aGVyICJvcENvZGUiIGZpdHMg
aW4gdGhlIHJhbmdlIG9mIG9wQ29kZXMuCisgICAgdW5zaWduZWQgY2hhciBtYXNrRmxhZyA9IG1h
c2tQYXlsb2FkID8gbWFza0JpdCA6IDA7CiAgICAgZnJhbWUuYXBwZW5kKGZpbmFsQml0IHwgb3BD
b2RlKTsKICAgICBpZiAoZGF0YUxlbmd0aCA8PSBtYXhQYXlsb2FkTGVuZ3RoV2l0aG91dEV4dGVu
ZGVkTGVuZ3RoRmllbGQpCi0gICAgICAgIGZyYW1lLmFwcGVuZChtYXNrQml0IHwgZGF0YUxlbmd0
aCk7CisgICAgICAgIGZyYW1lLmFwcGVuZChtYXNrRmxhZyB8IGRhdGFMZW5ndGgpOwogICAgIGVs
c2UgaWYgKGRhdGFMZW5ndGggPD0gMHhGRkZGKSB7Ci0gICAgICAgIGZyYW1lLmFwcGVuZChtYXNr
Qml0IHwgcGF5bG9hZExlbmd0aFdpdGhUd29CeXRlRXh0ZW5kZWRMZW5ndGhGaWVsZCk7CisgICAg
ICAgIGZyYW1lLmFwcGVuZChtYXNrRmxhZyB8IHBheWxvYWRMZW5ndGhXaXRoVHdvQnl0ZUV4dGVu
ZGVkTGVuZ3RoRmllbGQpOwogICAgICAgICBmcmFtZS5hcHBlbmQoKGRhdGFMZW5ndGggJiAweEZG
MDApID4+IDgpOwogICAgICAgICBmcmFtZS5hcHBlbmQoZGF0YUxlbmd0aCAmIDB4RkYpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIGZyYW1lLmFwcGVuZChtYXNrQml0IHwgcGF5bG9hZExlbmd0aFdp
dGhFaWdodEJ5dGVFeHRlbmRlZExlbmd0aEZpZWxkKTsKKyAgICAgICAgZnJhbWUuYXBwZW5kKG1h
c2tGbGFnIHwgcGF5bG9hZExlbmd0aFdpdGhFaWdodEJ5dGVFeHRlbmRlZExlbmd0aEZpZWxkKTsK
ICAgICAgICAgY2hhciBleHRlbmRlZFBheWxvYWRMZW5ndGhbOF07CiAgICAgICAgIHNpemVfdCBy
ZW1haW5pbmcgPSBkYXRhTGVuZ3RoOwogICAgICAgICAvLyBGaWxsIHRoZSBsZW5ndGggaW50byBl
eHRlbmRlZFBheWxvYWRMZW5ndGggaW4gdGhlIG5ldHdvcmsgYnl0ZSBvcmRlci4KQEAgLTk3Nywx
NSArOTgwLDI2IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZEZyYW1lKE9wQ29kZSBvcENv
ZGUsIGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhTGVuCiAgICAgICAgIGZyYW1lLmFwcGVu
ZChleHRlbmRlZFBheWxvYWRMZW5ndGgsIDgpOwogICAgIH0KIAotICAgIC8vIE1hc2sgdGhlIGZy
YW1lLgotICAgIHNpemVfdCBtYXNraW5nS2V5U3RhcnQgPSBmcmFtZS5zaXplKCk7Ci0gICAgZnJh
bWUuZ3JvdyhmcmFtZS5zaXplKCkgKyBtYXNraW5nS2V5V2lkdGhJbkJ5dGVzKTsgLy8gQWRkIHBs
YWNlaG9sZGVyIGZvciBtYXNraW5nIGtleS4gV2lsbCBiZSBvdmVyd3JpdHRlbi4KLSAgICBzaXpl
X3QgcGF5bG9hZFN0YXJ0ID0gZnJhbWUuc2l6ZSgpOwotICAgIGZyYW1lLmFwcGVuZChkYXRhLCBk
YXRhTGVuZ3RoKTsKKyAgICBpZiAobWFza1BheWxvYWQpIHsKKyAgICAgICAgc2l6ZV90IG1hc2tp
bmdLZXlTdGFydCA9IGZyYW1lLnNpemUoKTsKKyAgICAgICAgZnJhbWUuZ3JvdyhmcmFtZS5zaXpl
KCkgKyBtYXNraW5nS2V5V2lkdGhJbkJ5dGVzKTsgLy8gQWRkIHBsYWNlaG9sZGVyIGZvciBtYXNr
aW5nIGtleS4gV2lsbCBiZSBvdmVyd3JpdHRlbi4KKyAgICAgICAgc2l6ZV90IHBheWxvYWRTdGFy
dCA9IGZyYW1lLnNpemUoKTsKKyAgICAgICAgZnJhbWUuYXBwZW5kKGRhdGEsIGRhdGFMZW5ndGgp
OwogCi0gICAgY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXMoZnJhbWUuZGF0YSgpICsgbWFz
a2luZ0tleVN0YXJ0LCBtYXNraW5nS2V5V2lkdGhJbkJ5dGVzKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGRhdGFMZW5ndGg7ICsraSkKLSAgICAgICAgZnJhbWVbcGF5bG9hZFN0YXJ0ICsg
aV0gXj0gZnJhbWVbbWFza2luZ0tleVN0YXJ0ICsgaSAlIG1hc2tpbmdLZXlXaWR0aEluQnl0ZXNd
OworICAgICAgICBjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyhmcmFtZS5kYXRhKCkgKyBt
YXNraW5nS2V5U3RhcnQsIG1hc2tpbmdLZXlXaWR0aEluQnl0ZXMpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGRhdGFMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGZyYW1lW3BheWxv
YWRTdGFydCArIGldIF49IGZyYW1lW21hc2tpbmdLZXlTdGFydCArIGkgJSBtYXNraW5nS2V5V2lk
dGhJbkJ5dGVzXTsKKyAgICB9IGVsc2UKKyAgICAgICAgZnJhbWUuYXBwZW5kKGRhdGEsIGRhdGFM
ZW5ndGgpOworfQorCitib29sIFdlYlNvY2tldENoYW5uZWw6OnNlbmRGcmFtZShPcENvZGUgb3BD
b2RlLCBjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCkKK3sKKyAgICBBU1NFUlQo
bV9oYW5kbGUpOworICAgIEFTU0VSVCghbV9zdXNwZW5kZWQpOworCisgICAgVmVjdG9yPGNoYXI+
IGZyYW1lOworICAgIGJ1aWxkRnJhbWUob3BDb2RlLCB0cnVlLCBkYXRhLCBkYXRhTGVuZ3RoLCBm
cmFtZSk7CiAKICAgICByZXR1cm4gbV9oYW5kbGUtPnNlbmQoZnJhbWUuZGF0YSgpLCBmcmFtZS5z
aXplKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2Nr
ZXRDaGFubmVsLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwu
aAppbmRleCBlMzFiYmUzMTc3ZGFmNjZiY2U2OGRhN2IwOWQ1NmZmMTljZmU3NGQwLi40NTRlZTRi
N2UxZTMyZDNjMjAzZWJiYzExNGUyOGI5YmUzMTAwMTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93
ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuaApAQCAtMTA3LDIzICsxMDcsNiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoaW50IGVycm9yQ29kZSk7CiAjZW5kaWYKIAotICAg
IHVzaW5nIFJlZkNvdW50ZWQ8V2ViU29ja2V0Q2hhbm5lbD46OnJlZjsKLSAgICB1c2luZyBSZWZD
b3VudGVkPFdlYlNvY2tldENoYW5uZWw+OjpkZXJlZjsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1
YWwgdm9pZCByZWZUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCgpIHsgcmVmKCk7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgZGVyZWZUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCgpIHsgZGVyZWYoKTsg
fQotCi1wcml2YXRlOgotICAgIFdlYlNvY2tldENoYW5uZWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFdlYlNvY2tldENoYW5uZWxDbGllbnQqKTsKLQotICAgIGJvb2wgYXBwZW5kVG9CdWZmZXIo
Y29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbik7Ci0gICAgdm9pZCBza2lwQnVmZmVyKHNpemVf
dCBsZW4pOwotICAgIGJvb2wgcHJvY2Vzc0J1ZmZlcigpOwotICAgIHZvaWQgcmVzdW1lVGltZXJG
aXJlZChUaW1lcjxXZWJTb2NrZXRDaGFubmVsPiopOwotICAgIHZvaWQgc3RhcnRDbG9zaW5nSGFu
ZHNoYWtlKGludCBjb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNvbik7Ci0gICAgdm9pZCBjbG9zaW5n
VGltZXJGaXJlZChUaW1lcjxXZWJTb2NrZXRDaGFubmVsPiopOwotCiAgICAgLy8gSHliaS0xMCBv
cGNvZGVzLgogICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IE9wQ29kZTsKICAgICBzdGF0aWMgY29u
c3QgT3BDb2RlIE9wQ29kZUNvbnRpbnVhdGlvbjsKQEAgLTEzMywxMCArMTE2LDYgQEAgcHJpdmF0
ZToKICAgICBzdGF0aWMgY29uc3QgT3BDb2RlIE9wQ29kZVBpbmc7CiAgICAgc3RhdGljIGNvbnN0
IE9wQ29kZSBPcENvZGVQb25nOwogCi0gICAgc3RhdGljIGJvb2wgaXNOb25Db250cm9sT3BDb2Rl
KE9wQ29kZSBvcENvZGUpIHsgcmV0dXJuIG9wQ29kZSA9PSBPcENvZGVDb250aW51YXRpb24gfHwg
b3BDb2RlID09IE9wQ29kZVRleHQgfHwgb3BDb2RlID09IE9wQ29kZUJpbmFyeTsgfQotICAgIHN0
YXRpYyBib29sIGlzQ29udHJvbE9wQ29kZShPcENvZGUgb3BDb2RlKSB7IHJldHVybiBvcENvZGUg
PT0gT3BDb2RlQ2xvc2UgfHwgb3BDb2RlID09IE9wQ29kZVBpbmcgfHwgb3BDb2RlID09IE9wQ29k
ZVBvbmc7IH0KLSAgICBzdGF0aWMgYm9vbCBpc1Jlc2VydmVkT3BDb2RlKE9wQ29kZSBvcENvZGUp
IHsgcmV0dXJuICFpc05vbkNvbnRyb2xPcENvZGUob3BDb2RlKSAmJiAhaXNDb250cm9sT3BDb2Rl
KG9wQ29kZSk7IH0KLQogICAgIGVudW0gUGFyc2VGcmFtZVJlc3VsdCB7CiAgICAgICAgIEZyYW1l
T0ssCiAgICAgICAgIEZyYW1lSW5jb21wbGV0ZSwKQEAgLTE1NSw3ICsxMzQsMjkgQEAgcHJpdmF0
ZToKICAgICAgICAgY29uc3QgY2hhciogZnJhbWVFbmQ7CiAgICAgfTsKIAotICAgIFBhcnNlRnJh
bWVSZXN1bHQgcGFyc2VGcmFtZShGcmFtZURhdGEmKTsgLy8gTWF5IG1vZGlmeSBwYXJ0IG9mIG1f
YnVmZmVyIHRvIHVubWFzayB0aGUgZnJhbWUuCisgICAgc3RhdGljIFBhcnNlRnJhbWVSZXN1bHQg
cGFyc2VGcmFtZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCwgRnJhbWVEYXRh
JiwgU3RyaW5nJiBlcnJvclN0cmluZyk7IC8vIE1heSBtb2RpZnkgcGFydCBvZiAiZGF0YSIgdG8g
dW5tYXNrIHRoZSBmcmFtZS4KKyAgICBzdGF0aWMgdm9pZCBidWlsZEZyYW1lKE9wQ29kZSwgYm9v
bCBtYXNrUGF5bG9hZCwgY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgsIFZlY3Rv
cjxjaGFyPiYgZnJhbWUpOworCisgICAgdXNpbmcgUmVmQ291bnRlZDxXZWJTb2NrZXRDaGFubmVs
Pjo6cmVmOworICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViU29ja2V0Q2hhbm5lbD46OmRlcmVmOwor
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHJlZlRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsKCkgeyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZlRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsKCkgeyBkZXJlZigpOyB9CisKK3ByaXZhdGU6CisgICAgV2ViU29ja2V0Q2hhbm5l
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCopOworCisg
ICAgYm9vbCBhcHBlbmRUb0J1ZmZlcihjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuKTsKKyAg
ICB2b2lkIHNraXBCdWZmZXIoc2l6ZV90IGxlbik7CisgICAgYm9vbCBwcm9jZXNzQnVmZmVyKCk7
CisgICAgdm9pZCByZXN1bWVUaW1lckZpcmVkKFRpbWVyPFdlYlNvY2tldENoYW5uZWw+Kik7Cisg
ICAgdm9pZCBzdGFydENsb3NpbmdIYW5kc2hha2UoaW50IGNvZGUsIGNvbnN0IFN0cmluZyYgcmVh
c29uKTsKKyAgICB2b2lkIGNsb3NpbmdUaW1lckZpcmVkKFRpbWVyPFdlYlNvY2tldENoYW5uZWw+
Kik7CisKKyAgICBzdGF0aWMgYm9vbCBpc05vbkNvbnRyb2xPcENvZGUoT3BDb2RlIG9wQ29kZSkg
eyByZXR1cm4gb3BDb2RlID09IE9wQ29kZUNvbnRpbnVhdGlvbiB8fCBvcENvZGUgPT0gT3BDb2Rl
VGV4dCB8fCBvcENvZGUgPT0gT3BDb2RlQmluYXJ5OyB9CisgICAgc3RhdGljIGJvb2wgaXNDb250
cm9sT3BDb2RlKE9wQ29kZSBvcENvZGUpIHsgcmV0dXJuIG9wQ29kZSA9PSBPcENvZGVDbG9zZSB8
fCBvcENvZGUgPT0gT3BDb2RlUGluZyB8fCBvcENvZGUgPT0gT3BDb2RlUG9uZzsgfQorICAgIHN0
YXRpYyBib29sIGlzUmVzZXJ2ZWRPcENvZGUoT3BDb2RlIG9wQ29kZSkgeyByZXR1cm4gIWlzTm9u
Q29udHJvbE9wQ29kZShvcENvZGUpICYmICFpc0NvbnRyb2xPcENvZGUob3BDb2RlKTsgfQogCiAg
ICAgYm9vbCBwcm9jZXNzRnJhbWUoKTsKICAgICBib29sIHByb2Nlc3NGcmFtZUhpeGllNzYoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcApp
bmRleCA4YjFhOGY2OTFhMmI1MzI4OWQ3YzgxOGNmYTVmMTE4Y2M2NTEwZTJiLi4xMWUwZDdmNDA3
NmU2MmMyOWMzMGFmYjhkZjE4YzQ5Y2YxNmVkNmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
d2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCkBAIC0xNzAsNyArMTcwLDcgQEAgc3Rh
dGljIFN0cmluZyBnZW5lcmF0ZVNlY1dlYlNvY2tldEtleSgpCiAgICAgcmV0dXJuIGJhc2U2NEVu
Y29kZShyZWludGVycHJldF9jYXN0PGNoYXIqPihrZXkpLCBub25jZVNpemUpOwogfQogCi1zdGF0
aWMgU3RyaW5nIGdldEV4cGVjdGVkV2ViU29ja2V0QWNjZXB0KGNvbnN0IFN0cmluZyYgc2VjV2Vi
U29ja2V0S2V5KQorU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2Nr
ZXRBY2NlcHQoY29uc3QgU3RyaW5nJiBzZWNXZWJTb2NrZXRLZXkpCiB7CiAgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IHdlYlNvY2tldEtleUdVSUQgPSAiMjU4RUFGQTUtRTkxNC00N0RBLTk1
Q0EtQzVBQjBEQzg1QjExIjsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNoYTFIYXNoU2l6ZSA9
IDIwOyAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgZGVmaW5lZCBpbiBTSEExLmguCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5oIGIvU291
cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuaAppbmRleCA4OWNlMjk5
MDkwNGI2MTE5MTViZGVmZDA3NmI0NDAwZGY0ZWNkYjc3Li4wMmM5YWFiYWYwMjdiMGE4ZmI4YTM3
YjA5Y2UxYTA0OTVjNWEwYmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRz
L1dlYlNvY2tldEhhbmRzaGFrZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2Vi
U29ja2V0SGFuZHNoYWtlLmgKQEAgLTg1LDYgKzg1LDggQEAgcHVibGljOgogCiAgICAgY29uc3Qg
V2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UmIHNlcnZlckhhbmRzaGFrZVJlc3BvbnNlKCkgY29u
c3Q7CiAKKyAgICBzdGF0aWMgU3RyaW5nIGdldEV4cGVjdGVkV2ViU29ja2V0QWNjZXB0KGNvbnN0
IFN0cmluZyYgc2VjV2ViU29ja2V0S2V5KTsKKwogcHJpdmF0ZToKICAgICBLVVJMIGh0dHBVUkxG
b3JBdXRoZW50aWNhdGlvbkFuZENvb2tpZXMoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
d2Vic29ja2V0cy9XZWJTb2NrZXRTZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI4YzI4ZTc4NWIwYjYx
Zjg5OWRkZTU1MzRlYmFkM2NkMTU2ZDUzODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldFNlcnZlci5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKQorCisjaW5j
bHVkZSAiV2ViU29ja2V0U2VydmVyLmgiCisKKyNpbmNsdWRlICJTZXJ2ZXJTb2NrZXRIYW5kbGUu
aCIKKyNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGUuaCIKKyNpbmNsdWRlICJXZWJTb2NrZXRT
ZXJ2ZXJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitXZWJTb2NrZXRTZXJ2ZXI6OldlYlNvY2tldFNlcnZlcihXZWJTb2Nr
ZXRTZXJ2ZXJDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fc2VydmVyU29ja2V0KHRoaXMpCisgICAg
LCBtX2NsaWVudChjbGllbnQpCit7Cit9CisKK1dlYlNvY2tldFNlcnZlcjo6fldlYlNvY2tldFNl
cnZlcigpCit7CisgICAgY2xvc2UoKTsKK30KKworYm9vbCBXZWJTb2NrZXRTZXJ2ZXI6Omxpc3Rl
bihjb25zdCBTdHJpbmcmIGJpbmRBZGRyZXNzLCB1bnNpZ25lZCBzaG9ydCBwb3J0KQoreworICAg
IG1fc2VydmVyU29ja2V0LnNldEJpbmRBZGRyZXNzKGJpbmRBZGRyZXNzKTsKKyAgICBtX3NlcnZl
clNvY2tldC5zZXRQb3J0KHBvcnQpOworICAgIHJldHVybiBtX3NlcnZlclNvY2tldC5saXN0ZW4o
KTsKK30KKwordm9pZCBXZWJTb2NrZXRTZXJ2ZXI6OmNsb3NlKCkKK3sKKyAgICBtX3NlcnZlclNv
Y2tldC5jbG9zZSgpOworfQorCit2b2lkIFdlYlNvY2tldFNlcnZlcjo6ZGlkQWNjZXB0Q29ubmVj
dGlvbihQYXNzUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gc29ja2V0SGFuZGxlKQoreworICAg
IG1fY29ubmVjdGlvbnMuYXBwZW5kKGFkb3B0UHRyKG5ldyBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0
aW9uKHNvY2tldEhhbmRsZSwgbV9jbGllbnQsIHRoaXMpKSk7Cit9CisKK3ZvaWQgV2ViU29ja2V0
U2VydmVyOjpkaWRDbG9zZVdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24oV2ViU29ja2V0U2VydmVy
Q29ubmVjdGlvbiogY29ubmVjdGlvbikKK3sKKyAgICBEZXF1ZTxPd25QdHI8V2ViU29ja2V0U2Vy
dmVyQ29ubmVjdGlvbj4gPjo6aXRlcmF0b3IgZW5kID0gbV9jb25uZWN0aW9ucy5lbmQoKTsKKyAg
ICBmb3IgKERlcXVlPE93blB0cjxXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uPiA+OjppdGVyYXRv
ciBpdGVyID0gbV9jb25uZWN0aW9ucy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Cisg
ICAgICAgIGlmIChpdGVyLT5nZXQoKSA9PSBjb25uZWN0aW9uKSB7CisgICAgICAgICAgICBtX2Nv
bm5lY3Rpb25zLnJlbW92ZShpdGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0U2VydmVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldFNlcnZlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3OTA4
NDFmMGRmMjVkOTY4Y2U0MmZjZGIwMzhmMGIzMjMzNDU1MjEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldFNlcnZlci5oCkBAIC0wLDAgKzEsNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdlYlNvY2tldFNlcnZlcl9oCisjZGVmaW5lIFdlYlNvY2tldFNlcnZlcl9o
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKKworI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisjaW5jbHVkZSAiU2VydmVyU29ja2V0SGFuZGxlLmgiCisjaW5jbHVkZSAiU2VydmVy
U29ja2V0SGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8
d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdlYlNvY2tldFNl
cnZlckNsaWVudDsKK2NsYXNzIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb247CisKK2NsYXNzIFdl
YlNvY2tldFNlcnZlciA6IHB1YmxpYyBTZXJ2ZXJTb2NrZXRIYW5kbGVDbGllbnQgeworcHVibGlj
OgorICAgIFdlYlNvY2tldFNlcnZlcihXZWJTb2NrZXRTZXJ2ZXJDbGllbnQqKTsKKyAgICB2aXJ0
dWFsIH5XZWJTb2NrZXRTZXJ2ZXIoKTsKKworICAgIC8vIFNlcnZlciBvcGVyYXRpb25zLgorICAg
IGJvb2wgbGlzdGVuKGNvbnN0IFN0cmluZyYgYmluZEFkZHJlc3MsIHVuc2lnbmVkIHNob3J0IHBv
cnQpOworICAgIHZvaWQgY2xvc2UoKTsKKworICAgIC8vIFNlcnZlclNvY2tldEhhbmRsZUNsaWVu
dCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQWNjZXB0Q29ubmVjdGlvbihQ
YXNzUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4pOworCitwcml2YXRlOgorICAgIHZvaWQgZGlk
Q2xvc2VXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24q
KTsKKworICAgIFNlcnZlclNvY2tldEhhbmRsZSBtX3NlcnZlclNvY2tldDsKKyAgICBEZXF1ZTxP
d25QdHI8V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbj4gPiBtX2Nvbm5lY3Rpb25zOworICAgIFdl
YlNvY2tldFNlcnZlckNsaWVudCogbV9jbGllbnQ7CisgICAgZnJpZW5kIGNsYXNzIFdlYlNvY2tl
dFNlcnZlckNvbm5lY3Rpb247Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X1NFUlZFUikKKworI2VuZGlmIC8vIFdlYlNvY2tldFNlcnZlcl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldFNlcnZlckNsaWVudC5oIGIvU291cmNlL1dl
YkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRTZXJ2ZXJDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYTAx
NzdjNzI1M2YyY2NlNDc4Nzk4OWJkNTc2NzZhZjcwZmZiNTNmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRTZXJ2ZXJDbGllbnQuaApAQCAtMCww
ICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJTb2NrZXRTZXJ2ZXJDbGllbnRfaAorI2RlZmluZSBXZWJTb2NrZXRTZXJ2ZXJD
bGllbnRfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9TRVJWRVIpCisKKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSFRUUFJlcXVlc3Q7CitjbGFzcyBXZWJTb2NrZXRTZXJ2ZXJDb25u
ZWN0aW9uOworCitjbGFzcyBXZWJTb2NrZXRTZXJ2ZXJDbGllbnQgeworcHVibGljOgorICAgIHZp
cnR1YWwgfldlYlNvY2tldFNlcnZlckNsaWVudCgpIHsgfQorCisgICAgLy8gUmVjZWl2ZWQgYW4g
SFRUUCByZXF1ZXN0IGJ1dCBkb24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCBpdC4KKyAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZVVucmVjb2duaXplZEhUVFBSZXF1ZXN0KFdlYlNvY2tldFNlcnZl
ckNvbm5lY3Rpb24qLCBQYXNzUmVmUHRyPEhUVFBSZXF1ZXN0PikgeyB9CisKKyAgICAvLyBSZWNl
aXZlZCBhIFdlYlNvY2tldCBVcGdyYWRlIEhUVFAgcmVxdWVzdC4gQXNrIGlmIHdlIHNob3VsZCBo
YW5kbGUgaXQgYW5kIHVwZ3JhZGUuCisgICAgdmlydHVhbCBib29sIGRpZFJlY2VpdmVXZWJTb2Nr
ZXRVcGdyYWRlSFRUUFJlcXVlc3QoV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbiosIFBhc3NSZWZQ
dHI8SFRUUFJlcXVlc3Q+KSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBFc3RhYmxpc2hlZCBh
IFdlYlNvY2tldCBDb25uZWN0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBkaWRFc3RhYmxpc2hXZWJT
b2NrZXRDb25uZWN0aW9uKFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qLCBQYXNzUmVmUHRyPEhU
VFBSZXF1ZXN0PikgeyB9CisKKyAgICAvLyBSZWNlaXZlZCBhIFdlYlNvY2tldCBtZXNzYWdlLgor
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlV2ViU29ja2V0TWVzc2FnZShXZWJTb2NrZXRTZXJ2
ZXJDb25uZWN0aW9uKiwgY29uc3QgU3RyaW5nJikgeyB9CisKKyAgICAvLyBXZWJTb2NrZXQgQ29u
bmVjdGlvbiBjbG9zZWQuCisgICAgdmlydHVhbCB2b2lkIGRpZENsb3NlV2ViU29ja2V0Q29ubmVj
dGlvbihXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKikgeyB9Cit9OworCit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKKworI2VuZGlmIC8vIFdlYlNvY2tldFNlcnZlckNs
aWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldFNl
cnZlckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRT
ZXJ2ZXJDb25uZWN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNTc5NWViOGNjYzk0M2ExMGM2MDJjYzU1
MmFiYmRmYzA2NWQ3MDc3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvd2Vic29j
a2V0cy9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmNwcApAQCAtMCwwICsxLDI1MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKQorCisjaW5j
bHVkZSAiV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5oIgorCisjaW5jbHVkZSAiSFRUUFJlcXVl
c3QuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJTb2NrZXRTdHJlYW1FcnJvci5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhh
bmRsZS5oIgorI2luY2x1ZGUgIldlYlNvY2tldENoYW5uZWwuaCIKKyNpbmNsdWRlICJXZWJTb2Nr
ZXRIYW5kc2hha2UuaCIKKyNpbmNsdWRlICJXZWJTb2NrZXRTZXJ2ZXIuaCIKKyNpbmNsdWRlICJX
ZWJTb2NrZXRTZXJ2ZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dlYlNvY2tldFNlcnZlckNvbm5lY3Rp
b246OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24oUGFzc1JlZlB0cjxTb2NrZXRTdHJlYW1IYW5k
bGU+IHNvY2tldCwgV2ViU29ja2V0U2VydmVyQ2xpZW50KiBjbGllbnQsIFdlYlNvY2tldFNlcnZl
ciogc2VydmVyKQorICAgIDogbV9pZGVudGlmaWVyKDApCisgICAgLCBtX21vZGUoSFRUUCkKKyAg
ICAsIG1fc29ja2V0KHNvY2tldCkKKyAgICAsIG1fc2VydmVyKHNlcnZlcikKKyAgICAsIG1fY2xp
ZW50KGNsaWVudCkKK3sKKyAgICBMT0coTmV0d29yaywgIldlYlNvY2tldFNlcnZlckNvbm5lY3Rp
b246ICVwIGNsaWVudCBmb3IgU29ja2V0U3RyZWFtSGFuZGxlICVwIiwgdGhpcywgc29ja2V0Lmdl
dCgpKTsKKyAgICBtX3NvY2tldC0+c2V0Q2xpZW50KHRoaXMpOworfQorCitXZWJTb2NrZXRTZXJ2
ZXJDb25uZWN0aW9uOjp+V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbigpCit7CisgICAgc2h1dGRv
d25Ob3coKTsKK30KKwordm9pZCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpzaHV0ZG93bk5v
dygpCit7CisgICAgaWYgKCFtX3NvY2tldCkKKyAgICAgICAgcmV0dXJuOworICAgIFJlZlB0cjxT
b2NrZXRTdHJlYW1IYW5kbGU+IHNvY2tldCA9IG1fc29ja2V0LnJlbGVhc2UoKTsKKyAgICBzb2Nr
ZXQtPmNsb3NlKCk7Cit9CisKK3ZvaWQgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6c2h1dGRv
d25BZnRlclNlbmRPck5vdygpCit7CisgICAgLy8gSWYgdGhpcyBBU1NFUlQgaGFwcGVucyBvbiBh
bnkgcGxhdGZvcm0gdGhlbiB0aGVpciBTb2NrZXRTdHJlYW1IYW5kbGU6OnNlbmQKKyAgICAvLyBm
b2xsb3dlZCBieSBhIFNvY2tldFN0cmVhbUhhbmRsZTo6Y2xvc2UgaXMgbm90IGd1YXJlbnRlZWQg
dG8gaGF2ZSBzZW50IGFsbAorICAgIC8vIGRhdGEuIElmIHRoaXMgaGFwcGVucywgd2UgbmVlZCB0
byBzbGlnaHRseSBjaGFuZ2UgdGhlIGRlc2lnbiB0byBpbmNsdWRlIGEKKyAgICAvLyBTb2NrZXRT
dHJlYW1IYW5kbGVDbGllbnQ6OmRpZFNlbmQsIGhhbmRsZSBpdCBoZXJlLCBhbmQgYWRkIGFuIG1f
c2h1dGRvd25BZnRlclNlbmQKKyAgICAvLyBzdGF0ZSBvbiB0aGlzIFdlYlNvY2tldFNlcnZlckNv
bm5lY3Rpb24uCisgICAgQVNTRVJUKCFtX3NvY2tldC0+YnVmZmVyZWRBbW91bnQoKSk7CisKKyAg
ICBzaHV0ZG93bk5vdygpOworfQorCit2b2lkIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OnNl
bmRXZWJTb2NrZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBMT0coTmV0
d29yaywgIldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24gJXAgc2VuZCAlcyIsIHRoaXMsIG1lc3Nh
Z2UudXRmOCgpLmRhdGEoKSk7CisKKyAgICBjb25zdCBib29sIG1hc2tQYXlsb2FkID0gZmFsc2U7
IC8vIFRoZSBzZXJ2ZXIgZG9uJ3QgaGF2ZSB0byBtYXNrIHRoZSBwYXlsb2FkLgorICAgIENTdHJp
bmcgcGF5bG9hZCA9IG1lc3NhZ2UudXRmOCgpOworICAgIFZlY3RvcjxjaGFyPiBmcmFtZWRNZXNz
YWdlOworICAgIFdlYlNvY2tldENoYW5uZWw6OmJ1aWxkRnJhbWUoV2ViU29ja2V0Q2hhbm5lbDo6
T3BDb2RlVGV4dCwgbWFza1BheWxvYWQsIHBheWxvYWQuZGF0YSgpLCBwYXlsb2FkLmxlbmd0aCgp
LCBmcmFtZWRNZXNzYWdlKTsKKworICAgIG1fc29ja2V0LT5zZW5kKGZyYW1lZE1lc3NhZ2UuZGF0
YSgpLCBmcmFtZWRNZXNzYWdlLnNpemUoKSk7Cit9CisKK3ZvaWQgV2ViU29ja2V0U2VydmVyQ29u
bmVjdGlvbjo6c2VuZEhUVFBSZXNwb25zZUhlYWRlcihpbnQgc3RhdHVzQ29kZSwgY29uc3QgU3Ry
aW5nJiBzdGF0dXNUZXh0LCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJGaWVsZHMpCit7Cisg
ICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCJIVFRQLzEuMSAi
KTsKKyAgICBidWlsZGVyLmFwcGVuZChTdHJpbmc6Om51bWJlcihzdGF0dXNDb2RlKSk7CisgICAg
YnVpbGRlci5hcHBlbmQoIiAiKTsKKyAgICBidWlsZGVyLmFwcGVuZChzdGF0dXNUZXh0KTsKKyAg
ICBidWlsZGVyLmFwcGVuZCgiXHJcbiIpOworICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGhlYWRlckZpZWxkcy5lbmQoKTsKKyAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBoZWFkZXJGaWVsZHMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsr
aXRlcikgeworICAgICAgICBidWlsZGVyLmFwcGVuZChpdGVyLT5maXJzdCk7CisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCI6ICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZChpdGVyLT5zZWNvbmQg
KyAiXHJcbiIpOworICAgIH0KKyAgICBidWlsZGVyLmFwcGVuZCgiXHJcbiIpOworCisgICAgQ1N0
cmluZyBoZWFkZXIgPSBidWlsZGVyLnRvU3RyaW5nKCkubGF0aW4xKCk7CisgICAgbV9zb2NrZXQt
PnNlbmQoaGVhZGVyLmRhdGEoKSwgaGVhZGVyLmxlbmd0aCgpKTsKK30KKwordm9pZCBXZWJTb2Nr
ZXRTZXJ2ZXJDb25uZWN0aW9uOjpzZW5kUmF3RGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qg
bGVuZ3RoKQoreworICAgIG1fc29ja2V0LT5zZW5kKGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQg
V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6ZGlkQ2xvc2VTb2NrZXRTdHJlYW0oU29ja2V0U3Ry
ZWFtSGFuZGxlKikKK3sKKyAgICAvLyBXZWIgU29ja2V0IE1vZGUuCisgICAgaWYgKG1fbW9kZSA9
PSBXZWJTb2NrZXQpCisgICAgICAgIG1fY2xpZW50LT5kaWRDbG9zZVdlYlNvY2tldENvbm5lY3Rp
b24odGhpcyk7CisKKyAgICAvLyBUZWxsIHRoZSBzZXJ2ZXIgdG8gZ2V0IHJpZCBvZiB0aGlzLgor
ICAgIG1fc2VydmVyLT5kaWRDbG9zZVdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24odGhpcyk7Cit9
CisKK3ZvaWQgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZVNvY2tldFN0cmVh
bURhdGEoU29ja2V0U3RyZWFtSGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkK
K3sKKyAgICAvLyBFYWNoIGRpZFJlY2VpdmVEYXRhIGNhbGwgYWRkcyBtb3JlIGRhdGEgdG8gb3Vy
IGJ1ZmZlci4KKyAgICAvLyBXZSBjbGVhciB0aGUgYnVmZmVyIHdoZW4gd2UgaGF2ZSBoYW5kbGVk
IGRhdGEgZnJvbSBpdC4KKyAgICBtX2J1ZmZlcmVkRGF0YS5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsK
KworICAgIC8vIEhUVFAgTW9kZS4KKyAgICBpZiAobV9tb2RlID09IEhUVFApIHsKKyAgICAgICAg
cmVhZEhUVFBNZXNzYWdlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZWIg
U29ja2V0IE1vZGUuCisgICAgaWYgKG1fbW9kZSA9PSBXZWJTb2NrZXQpIHsKKyAgICAgICAgcmVh
ZFdlYlNvY2tldEZyYW1lcygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRm9y
IGFueSBuZXcgbW9kZXMgYWRkZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKwordm9pZCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpkaWRGYWlsU29ja2V0
U3RyZWFtKFNvY2tldFN0cmVhbUhhbmRsZSosIGNvbnN0IFNvY2tldFN0cmVhbUVycm9yJiBlcnJv
cikKK3sKKyAgICAvLyBQb3NzaWJsZSByZWFkIG9yIHdyaXRlIGVycm9yLgorICAgIExPRyhOZXR3
b3JrLCAiV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjogU3RyZWFtIEVycm9yICglZCkiLCBlcnJv
ci5lcnJvckNvZGUoKSk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKK30KKwordm9pZCBXZWJT
b2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpyZWFkSFRUUE1lc3NhZ2UoKQoreworICAgIFN0cmluZyBm
YWlsdXJlUmVhc29uOworICAgIFJlZlB0cjxIVFRQUmVxdWVzdD4gcmVxdWVzdCA9IEhUVFBSZXF1
ZXN0OjpwYXJzZUhUVFBSZXF1ZXN0RnJvbUJ1ZmZlcihtX2J1ZmZlcmVkRGF0YS5kYXRhKCksIG1f
YnVmZmVyZWREYXRhLnNpemUoKSwgZmFpbHVyZVJlYXNvbik7CisgICAgaWYgKCFyZXF1ZXN0KSB7
CisgICAgICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjogRXJyb3Ig
UGFyc2luZyBIVFRQIE1lc3NhZ2U6ICVzIiwgZmFpbHVyZVJlYXNvbi51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEFzc3VtZSBhbGwgdGhlIGlucHV0IGhh
cyBiZWVuIHJlYWQgaWYgd2UgYXJlIHJlYWRpbmcgYW4gSFRUUCBSZXF1ZXN0LgorICAgIG1fYnVm
ZmVyZWREYXRhLmNsZWFyKCk7CisKKyAgICAvLyBJZiB0aGlzIGlzIGEgV2ViU29ja2V0IHJlcXVl
c3QsIHBlcmZvcm0gdGhlIFdlYlNvY2tldCBIYW5kc2hha2UuCisgICAgY29uc3QgSFRUUEhlYWRl
ck1hcCYgaGVhZGVycyA9IHJlcXVlc3QtPmhlYWRlckZpZWxkcygpOworICAgIFN0cmluZyB1cGdy
YWRlSGVhZGVyVmFsdWUgPSBoZWFkZXJzLmdldCgiVXBncmFkZSIpOworICAgIGlmICh1cGdyYWRl
SGVhZGVyVmFsdWUgPT0gIndlYnNvY2tldCIpIHsKKyAgICAgICAgTE9HKE5ldHdvcmssICJXZWJT
b2NrZXRTZXJ2ZXJDb25uZWN0aW9uOiAlcCBVcGdyYWRpbmcgdG8gYSBXZWJTb2NrZXQgU2VydmVy
LiIsIHRoaXMpOworICAgICAgICB1cGdyYWRlVG9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKHJl
cXVlc3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICh1cGdyYWRlSGVhZGVyVmFs
dWUgPT0gIldlYlNvY2tldCIpCisgICAgICAgIExPR19FUlJPUigiV2ViU29ja2V0IHByb3RvY29s
IHZlcnNpb24gPCBIeWJpLTEwIG5vdCBzdXBwb3J0ZWQuIFVwZ3JhZGUgeW91ciBjbGllbnQuIik7
CisKKyAgICAvLyBPdGhlcndpc2UsIHRoaXMgaXMgYW4gSFRUUCBSZXF1ZXN0IHdlIGRvbid0IGtu
b3cgaG93IHRvIGRlYWwgd2l0aC4KKyAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZVVucmVjb2duaXpl
ZEhUVFBSZXF1ZXN0KHRoaXMsIHJlcXVlc3QpOworfQorCit2b2lkIFdlYlNvY2tldFNlcnZlckNv
bm5lY3Rpb246OnVwZ3JhZGVUb1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24oUGFzc1JlZlB0cjxI
VFRQUmVxdWVzdD4gcmVxdWVzdCkKK3sKKyAgICBBU1NFUlQocmVxdWVzdCk7CisgICAgQVNTRVJU
KG1fbW9kZSA9PSBIVFRQKTsKKyAgICBtX21vZGUgPSBXZWJTb2NrZXQ7CisgICAgUmVmUHRyPEhU
VFBSZXF1ZXN0PiBwcm90ZWN0ZWRSZXF1ZXN0KHJlcXVlc3QpOworCisgICAgLy8gQXNrIHRoZSBj
bGllbnQgaWYgd2Ugc2hvdWxkIHVwZ3JhZGUgZm9yIHRoaXMgb3Igbm90LgorICAgIGlmICghbV9j
bGllbnQtPmRpZFJlY2VpdmVXZWJTb2NrZXRVcGdyYWRlSFRUUFJlcXVlc3QodGhpcywgcHJvdGVj
dGVkUmVxdWVzdCkpIHsKKyAgICAgICAgc2h1dGRvd25Ob3coKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIEJ1aWxkIGFuZCBzZW5kIHRoZSBXZWJTb2NrZXQgaGFuZHNoYWtlIHJl
c3BvbnNlLgorICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIHJlcXVlc3RIZWFkZXJzID0gcHJvdGVj
dGVkUmVxdWVzdC0+aGVhZGVyRmllbGRzKCk7CisgICAgU3RyaW5nIGFjY2VwdCA9IFdlYlNvY2tl
dEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQocmVxdWVzdEhlYWRlcnMuZ2V0
KCJTZWMtV2ViU29ja2V0LUtleSIpKTsKKyAgICBIVFRQSGVhZGVyTWFwIHJlc3BvbnNlSGVhZGVy
czsKKyAgICByZXNwb25zZUhlYWRlcnMuYWRkKCJVcGdyYWRlIiwgcmVxdWVzdEhlYWRlcnMuZ2V0
KCJVcGdyYWRlIikpOworICAgIHJlc3BvbnNlSGVhZGVycy5hZGQoIkNvbm5lY3Rpb24iLCByZXF1
ZXN0SGVhZGVycy5nZXQoIkNvbm5lY3Rpb24iKSk7CisgICAgcmVzcG9uc2VIZWFkZXJzLmFkZCgi
U2VjLVdlYlNvY2tldC1BY2NlcHQiLCBhY2NlcHQpOworCisgICAgc2VuZEhUVFBSZXNwb25zZUhl
YWRlcigxMDEsICJXZWJTb2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtlIiwgcmVzcG9uc2VIZWFkZXJz
KTsKKworICAgIG1fY2xpZW50LT5kaWRFc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uKHRoaXMs
IHByb3RlY3RlZFJlcXVlc3QpOworfQorCit2b2lkIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246
OnJlYWRXZWJTb2NrZXRGcmFtZXMoKQoreworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGJv
b2wgZGlkUmVhZE9uZUZyYW1lID0gcmVhZFdlYlNvY2tldEZyYW1lKCk7CisgICAgICAgIGlmICgh
ZGlkUmVhZE9uZUZyYW1lKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChtX2J1ZmZl
cmVkRGF0YS5pc0VtcHR5KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK2Jvb2wg
V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6cmVhZFdlYlNvY2tldEZyYW1lKCkKK3sKKyAgICBX
ZWJTb2NrZXRDaGFubmVsOjpGcmFtZURhdGEgZnJhbWVEYXRhOworICAgIFN0cmluZyBlcnJvclN0
cmluZzsKKyAgICBXZWJTb2NrZXRDaGFubmVsOjpQYXJzZUZyYW1lUmVzdWx0IHJlc3VsdCA9IFdl
YlNvY2tldENoYW5uZWw6OnBhcnNlRnJhbWUobV9idWZmZXJlZERhdGEuZGF0YSgpLCBtX2J1ZmZl
cmVkRGF0YS5zaXplKCksIGZyYW1lRGF0YSwgZXJyb3JTdHJpbmcpOworCisgICAgLy8gSW5jb21w
bGV0ZSBmcmFtZS4gV2FpdCB0byByZWNlaXZlIG1vcmUgZGF0YS4KKyAgICBpZiAocmVzdWx0ID09
IFdlYlNvY2tldENoYW5uZWw6OkZyYW1lSW5jb21wbGV0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKHJlc3VsdCA9PSBXZWJTb2NrZXRDaGFubmVsOjpGcmFtZUVycm9yKSB7Cisg
ICAgICAgIC8vIFNpbGVudGx5IGlnbm9yZSBlcnJvcnMuCisgICAgICAgIExPR19FUlJPUigiV2Vi
U29ja2V0U2VydmVyQ29ubmVjdGlvbjogZXJyb3IgaW4gcGFyc2luZyBhIHdlYiBzb2NrZXQgZnJh
bWU6ICVzIiwgZXJyb3JTdHJpbmcudXRmOCgpLmRhdGEoKSk7CisgICAgfSBlbHNlIGlmIChmcmFt
ZURhdGEub3BDb2RlID09IFdlYlNvY2tldENoYW5uZWw6Ok9wQ29kZVRleHQpIHsKKyAgICAgICAg
Ly8gRGVsZWdhdGUgVGV4dCBmcmFtZXMgdG8gb3VyIGNsaWVudC4KKyAgICAgICAgU3RyaW5nIG1z
ZyA9IFN0cmluZzo6ZnJvbVVURjgoZnJhbWVEYXRhLnBheWxvYWQsIGZyYW1lRGF0YS5wYXlsb2Fk
TGVuZ3RoKTsKKyAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVXZWJTb2NrZXRNZXNzYWdlKHRo
aXMsIG1zZyk7CisgICAgfSBlbHNlCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisKKyAgICAv
LyBSZW1vdmUgdGhlIGZyYW1lIGZyb20gb3VyIGJ1ZmZlci4KKyAgICBtX2J1ZmZlcmVkRGF0YS5y
ZW1vdmUoMCwgZnJhbWVEYXRhLmZyYW1lRW5kIC0gbV9idWZmZXJlZERhdGEuZGF0YSgpKTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX1NF
UlZFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0U2Vy
dmVyQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRTZXJ2
ZXJDb25uZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGY1NTk5MWE1ZTRhN2I5ZTk4NTljODY5ZmQ1OTg0
Mzk2ODc3OTI3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMv
V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
YlNvY2tldFNlcnZlckNvbm5lY3Rpb25faAorI2RlZmluZSBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0
aW9uX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKQorCisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCIKKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSFRUUEhlYWRl
ck1hcDsKK2NsYXNzIEhUVFBSZXF1ZXN0OworY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlOworY2xh
c3MgV2ViU29ja2V0U2VydmVyOworY2xhc3MgV2ViU29ja2V0U2VydmVyQ2xpZW50OworCitjbGFz
cyBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uIDogcHVibGljIFNvY2tldFN0cmVhbUhhbmRsZUNs
aWVudCB7CitwdWJsaWM6CisgICAgZW51bSBXZWJTb2NrZXRTZXJ2ZXJNb2RlIHsgSFRUUCwgV2Vi
U29ja2V0IH07CisgICAgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbihQYXNzUmVmUHRyPFNvY2tl
dFN0cmVhbUhhbmRsZT4sIFdlYlNvY2tldFNlcnZlckNsaWVudCosIFdlYlNvY2tldFNlcnZlciop
OworICAgIHZpcnR1YWwgfldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24oKTsKKworICAgIHVuc2ln
bmVkIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKyAgICB2b2lk
IHNldElkZW50aWZpZXIodW5zaWduZWQgaWQpIHsgbV9pZGVudGlmaWVyID0gaWQ7IH0KKworICAg
IC8vIFNlbmRpbmcgZGF0YSBvdmVyIHRoZSBjb25uZWN0aW9uLgorICAgIHZvaWQgc2VuZFdlYlNv
Y2tldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICB2b2lkIHNlbmRIVFRQUmVz
cG9uc2VIZWFkZXIoaW50IHN0YXR1c0NvZGUsIGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4dCwgY29u
c3QgSFRUUEhlYWRlck1hcCYgaGVhZGVyRmllbGRzKTsKKyAgICB2b2lkIHNlbmRSYXdEYXRhKGNv
bnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOworCisgICAgLy8gVGVybWluYXRpbmcgdGhl
IGNvbm5lY3Rpb24uCisgICAgdm9pZCBzaHV0ZG93bk5vdygpOworICAgIHZvaWQgc2h1dGRvd25B
ZnRlclNlbmRPck5vdygpOworCisgICAgLy8gU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50IGltcGxl
bWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBkaWRDbG9zZVNvY2tldFN0cmVhbShTb2NrZXRT
dHJlYW1IYW5kbGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVNvY2tldFN0cmVhbURh
dGEoU29ja2V0U3RyZWFtSGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZEZhaWxTb2NrZXRTdHJlYW0oU29ja2V0U3RyZWFtSGFuZGxlKiwg
Y29uc3QgU29ja2V0U3RyZWFtRXJyb3ImKTsKKworcHJpdmF0ZToKKyAgICAvLyBIVFRQIE1vZGUu
CisgICAgdm9pZCByZWFkSFRUUE1lc3NhZ2UoKTsKKworICAgIC8vIFdlYlNvY2tldCBNb2RlLgor
ICAgIHZvaWQgdXBncmFkZVRvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbihQYXNzUmVmUHRyPEhU
VFBSZXF1ZXN0Pik7CisgICAgdm9pZCByZWFkV2ViU29ja2V0RnJhbWVzKCk7CisgICAgYm9vbCBy
ZWFkV2ViU29ja2V0RnJhbWUoKTsKKworcHJvdGVjdGVkOgorICAgIHVuc2lnbmVkIG1faWRlbnRp
ZmllcjsKKyAgICBWZWN0b3I8Y2hhcj4gbV9idWZmZXJlZERhdGE7CisgICAgV2ViU29ja2V0U2Vy
dmVyTW9kZSBtX21vZGU7CisgICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gbV9zb2NrZXQ7
CisgICAgV2ViU29ja2V0U2VydmVyKiBtX3NlcnZlcjsKKyAgICBXZWJTb2NrZXRTZXJ2ZXJDbGll
bnQqIG1fY2xpZW50OworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9TRVJW
RVIpCisKKyNlbmRpZiAvLyBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117917</attachid>
            <date>2011-12-05 12:34:01 -0800</date>
            <delta_ts>2012-03-29 11:17:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73093-20111205213358.patch</filename>
            <type>text/plain</type>
            <size>41290</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMDYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGIzZTEyNzlmMjE0NzI3
YjU1YTkyOGI5NDQ4OTUwY2E4MWM4MjRmMC4uZDkyMjIxNWVmZjhiZTk0N2E0MTgxYTI5ZTQxYThj
MTRmY2U2ZjBlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIxIEBACiAyMDExLTEyLTA1ICBKb2Nl
bHluIFR1cmNvdHRlICA8am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CiAKKyAgICAgICAgW1F0
XSBBbGxvdyBTb2NrZXRTdHJlYW1IYW5kbGUgdG8gdGFrZSBhbiBleGlzdGluZyBRVGNwU29ja2V0
IGluIGl0cyBjb25zdHJ1Y3Rvci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTczMDkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3F0L1NvY2tldFN0cmVhbUhhbmRsZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGUpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvcXQvU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvcXQvU29ja2V0U3RyZWFtSGFuZGxlUXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZTo6U29ja2V0U3RyZWFtSGFuZGxl
UHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlOjpp
bml0Q29ubmVjdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlUHJp
dmF0ZTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpTb2Nr
ZXRTdHJlYW1IYW5kbGUpOgorCisyMDExLTEyLTA1ICBKb2NlbHluIFR1cmNvdHRlICA8am9jZWx5
bi50dXJjb3R0ZUBub2tpYS5jb20+CisKICAgICAgICAgRXhwb3NlIHJldXNhYmxlIFdlYlNvY2tl
dCBjb2RlIGZvciBXZWJTb2NrZXRTZXJ2ZXIuCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03Mzg1MgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOGZmY2IyMjk2NjljNjIz
OWUxY2NkODdlMTdlNTA3MjIzOGVkZWQxMC4uMjVjZGI3YWFkMWM5OGMxNTI4NGFmOWE0MDBjMjgx
OTc1YTRlYWRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5IEBACisyMDExLTEyLTA1ICBKb3Nl
cGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+IGFuZCBKb2NlbHluIFR1cmNvdHRlICA8
am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CisKKyAgICAgICAgQWRkIGEgR2VuZXJpYyBXZWJT
b2NrZXQgU2VydmVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzMwOTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGUgSW5zcGVjdG9yIFNlcnZlciB3aWxsIGJlIGEgV2ViU29ja2V0IFNlcnZlciB0aGF0
IGFsc28gcmVzcG9uZHMgdG8KKyAgICAgICAgbm9uLVdlYlNvY2tldC1VcGdyYWRlIEhUVFAgUmVx
dWVzdHMuIFRoaXMgaXMgYSBnZW5lcmljIFdlYlNvY2tldCBzZXJ2ZXIKKyAgICAgICAgdGhhdCBo
YW5kbGVzIHBhc3NlcyBvbiB3aGF0IGl0IGRvZXNuJ3Qga25vdyBvbiB0byBpdHMgQ2xpZW50IGZv
ciBleHRlbmRlZAorICAgICAgICBmdW5jdGlvbmFsaXR5LiBUaGlzIGNvZGUgaXMgd3JhcHBlZCBp
biBhIG5ldyBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikgZmxhZy4KKworICAgICAgICBUaGVyZSBh
cmUgbm8gdGVzdHMgeWV0IGZvciBhIGJ1aWx0LWluIFdlYlNvY2tldCBzZXJ2ZXIuCisKKyAgICAg
ICAgICBXZWJTb2NrZXRTZXJ2ZXIgaXMgYSBzaW1wbGUgc2VydmVyLiBDYWxsaW5nIGxpc3Rlbiwg
b3IgY2xvc2UsCisgICAgICAgICAgbXVsdGlwbGUgdGltZXMgaXMgc2FmZS4gU3ViY2xhc3Npbmcg
aXMgZXhwZWN0ZWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNv
Y2tldFNlcnZlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRTZXJ2ZXI6
OldlYlNvY2tldFNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFNlcnZlcjo6fldl
YlNvY2tldFNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFNlcnZlcjo6bGlzdGVu
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0U2VydmVyOjpjbG9zZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNvY2tldFNlcnZlcjo6ZGlkQWNjZXB0Q29ubmVjdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNvY2tldFNlcnZlcjo6ZGlkQ2xvc2VXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9u
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZlci5o
OiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNl
cnZlckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0U2VydmVyQ2xp
ZW50Ojp+V2ViU29ja2V0U2VydmVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0
U2VydmVyQ2xpZW50OjpkaWRSZWNlaXZlVW5yZWNvZ25pemVkSFRUUFJlcXVlc3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTb2NrZXRTZXJ2ZXJDbGllbnQ6OmRpZFJlY2VpdmVXZWJTb2NrZXRVcGdy
YWRlSFRUUFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRTZXJ2ZXJDbGllbnQ6
OmRpZEVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJT
b2NrZXRTZXJ2ZXJDbGllbnQ6OmRpZFJlY2VpdmVXZWJTb2NrZXRNZXNzYWdlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViU29ja2V0U2VydmVyQ2xpZW50OjpkaWRDbG9zZVdlYlNvY2tldENvbm5lY3Rp
b24pOgorCisgICAgICAgICAgRWFjaCBXZWJTb2NrZXRDb25uZWN0aW9uOgorCisgICAgICAgICAg
IC0gUGFzc2VzIHVua25vd24gSFRUUCBSZXF1ZXN0cyB0byB0aGUgc2VydmVyJ3MgY2xpZW50Lgor
ICAgICAgICAgICAtIEhhbmRsZXMgV2ViU29ja2V0IFVwZ3JhZGUgUmVxdWVzdHMuCisgICAgICAg
ICAgICAgLSBGaXJzdCBhc2sgdGhlIGNsaWVudCBpZiBpdCBpcyBva2F5LgorICAgICAgICAgICAg
IC0gTGF0ZXIgbm90aWZ5IHRoZSBjbGllbnQgYWJvdXQgYSBzdWNjZXNzLgorICAgICAgICAgICAt
IE9uY2UgdXBncmFkZWQgdGhlIGNvbm5lY3Rpb24gcGFyc2VzIGFuZCBwYXNzZXMgV2ViU29ja2V0
CisgICAgICAgICAgICAgZnJhbWVzIHRvIHRoZSBjbGllbnQuCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6V2ViU29ja2V0U2Vy
dmVyQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rp
b246On5XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViU29j
a2V0U2VydmVyQ29ubmVjdGlvbjo6c2h1dGRvd25Ob3cpOgorICAgICAgICAoV2ViS2l0OjpXZWJT
b2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpzaHV0ZG93bkFmdGVyU2VuZE9yTm93KTogbWVhbnQgdG8g
c2h1dGRvd24gYWZ0ZXIgYW4gSFRUUCByZXNwb25zZS4gRW5zdXJlIGFsbCBwbGF0Zm9ybXMgd29y
ayBhcyBleHBlY3RlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0U2VydmVyQ29ubmVjdGlv
bjo6c2VuZFdlYlNvY2tldE1lc3NhZ2UpOiBzZW5kIGEgdGV4dCBtZXNzYWdlIChXZWJTb2NrZXQg
bWVzc2FnZSkgb3ZlciB0aGUgY29ubmVjdGlvbi4KKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0
U2VydmVyQ29ubmVjdGlvbjo6c2VuZEhUVFBSZXNwb25zZUhlYWRlcik6CisgICAgICAgIChXZWJL
aXQ6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OnNlbmRSYXdEYXRhKTogc2VuZCByYXcgZGF0
YSAoSFRUUCBtZXNzYWdlKSBvdmVyIHRoZSBjb25uZWN0aW9uLgorICAgICAgICAoV2ViS2l0OjpX
ZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpkaWRDbG9zZVNvY2tldFN0cmVhbSk6IGhhbmRsZSBz
b2NrZXQgY2xvc2luZyBzY2VuYXJpb3MuCisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFNlcnZl
ckNvbm5lY3Rpb246OmRpZFJlY2VpdmVTb2NrZXRTdHJlYW1EYXRhKTogcGFyc2UgdGhlIGluY29t
aW5nIGRhdGEgaW4gSFRUUCAvIFdlYlNvY2tldCBtb2Rlcy4KKyAgICAgICAgKFdlYktpdDo6V2Vi
U29ja2V0U2VydmVyQ29ubmVjdGlvbjo6ZGlkRmFpbFNvY2tldFN0cmVhbSk6IGxvZyBlcnJvcnMu
CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OnJlYWRIVFRQTWVz
c2FnZSk6IHdoZW4gc3RhcnRpbmcsIGEgd2ViIHNvY2tldCBjb25uZWN0aW9uIHJlYWRzIGFuIEhU
VFAgbWVzc2FnZS4KKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6
dXBncmFkZVRvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNvY2tldFNlcnZlckNvbm5lY3Rpb246OnJlYWRXZWJTb2NrZXRGcmFtZXMpOiBwYXJzZSBvdXIg
YnVmZmVyIGZvciBhcyBtYW55IGZyYW1lcyBhcyBwb3NzaWJsZS4KKyAgICAgICAgKFdlYktpdDo6
V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6cmVhZFdlYlNvY2tldEZyYW1lKTogcGFyc2UgYW4g
aW5kaXZpZHVhbCBmcmFtZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dl
YlNvY2tldFNlcnZlckNvbm5lY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlNv
Y2tldFNlcnZlckNvbm5lY3Rpb246OmlkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJT
b2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpzZXRJZGVudGlmaWVyKToKKworICAgICAgICAgIFF0IHNw
ZWNpZmljIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3RvclNl
cnZlci9xdC9XZWJTb2NrZXRTZXJ2ZXJRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJTb2NrZXRTZXJ2ZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNvY2tldFNlcnZlcjo6cGxhdGZvcm1MaXN0ZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2Nr
ZXRTZXJ2ZXI6OnBsYXRmb3JtQ2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpRdFRjcFNlcnZlckhh
bmRsZXI6OlF0VGNwU2VydmVySGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OlF0VGNwU2VydmVy
SGFuZGxlcjo6aGFuZGxlTmV3Q29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlF0VGNwU2Vy
dmVySGFuZGxlcjo6bGlzdGVuKToKKyAgICAgICAgKFdlYktpdDo6UXRUY3BTZXJ2ZXJIYW5kbGVy
OjpjbG9zZSk6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9xdC9XZWJTb2Nr
ZXRTZXJ2ZXJRdC5oOiBBZGRlZC4KKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICog
Y29uZmlnLmg6IEFkZCBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikgZm9yIFdlYktpdDIuCisKIDIw
MTEtMTEtMjMgIFJhcGhhZWwgS3VibyBkYSBDb3N0YSAgPGt1Ym9AcHJvZnVzaW9uLm1vYmk+CiAK
ICAgICAgICAgW0NNYWtlXSBNb3ZlIHRoZSB0b3AtbGV2ZWwgbG9naWMgdG8gdGhlIHRvcC1sZXZl
bCBkaXJlY3RvcnkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3F0L1NvY2tldFN0cmVhbUhhbmRsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9xdC9Tb2NrZXRTdHJlYW1IYW5kbGUuaAppbmRleCBlNzI1MzQ0MDgzYzBjZjZjMzRlMzNlNTFi
MDczNjA0NjI2NzU3NWE3Li45ZTZlYWMwZmMwNTA5ZWQwYzQ4MDI1NmU1NTk3ZTg1NDRhMWU3NGYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1NvY2tldFN0
cmVhbUhhbmRsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvU29j
a2V0U3RyZWFtSGFuZGxlLmgKQEAgLTQyLDYgKzQyLDEwIEBACiAjZXJyb3IgVGhpcyBzaG91bGQg
b25seSBiZSBidWlsdCBvbiBRdAogI2VuZGlmCiAKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3Mg
UVRjcFNvY2tldDsKK1FUX0VORF9OQU1FU1BBQ0UKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CkBAIC01Miw2ICs1Niw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGUgOiBwdWJsaWMgUmVm
Q291bnRlZDxTb2NrZXRTdHJlYW1IYW5kbGU+LCBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlQmFz
ZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTb2NrZXRTdHJlYW1I
YW5kbGU+IGNyZWF0ZShjb25zdCBLVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCog
Y2xpZW50KSB7IHJldHVybiBhZG9wdFJlZihuZXcgU29ja2V0U3RyZWFtSGFuZGxlKHVybCwgY2xp
ZW50KSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U29ja2V0U3RyZWFtSGFuZGxlPiBj
cmVhdGUoUVRjcFNvY2tldCogc29ja2V0LCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQqIGNsaWVu
dCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFNvY2tldFN0cmVhbUhhbmRsZShzb2NrZXQsIGNsaWVu
dCkpOyB9CiAKICAgICAgICAgdmlydHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCk7CiAKQEAgLTYx
LDYgKzY2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
U29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IEtVUkwmLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQq
KTsKKyAgICAgICAgU29ja2V0U3RyZWFtSGFuZGxlKFFUY3BTb2NrZXQqLCBTb2NrZXRTdHJlYW1I
YW5kbGVDbGllbnQqKTsKIAogICAgICAgICAvLyBObyBhdXRoZW50aWNhdGlvbiBmb3Igc3RyZWFt
cyBwZXIgc2UsIGJ1dCBwcm94eSBtYXkgYXNrIGZvciBjcmVkZW50aWFscy4KICAgICAgICAgdm9p
ZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
cXQvU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9xdC9Tb2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlLmgKaW5kZXggZDA3NGY0MjcyMTlm
MDIxODY0ODNmZmJjNGVhOWI0ZGRiOGNhYTdmYy4uMzAxOTI3OTA0OTkyN2NkOWY1YjQyYmMzMzJh
MWJiMzA3YjE3YjRiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9xdC9Tb2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9xdC9Tb2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlLmgKQEAgLTQ3LDYgKzQ3
LDcgQEAgY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZSA6IHB1YmxpYyBRT2JqZWN0IHsK
ICAgICBRX09CSkVDVAogcHVibGljOgogICAgIFNvY2tldFN0cmVhbUhhbmRsZVByaXZhdGUoU29j
a2V0U3RyZWFtSGFuZGxlKiwgY29uc3QgS1VSTCYpOworICAgIFNvY2tldFN0cmVhbUhhbmRsZVBy
aXZhdGUoU29ja2V0U3RyZWFtSGFuZGxlKiwgUVRjcFNvY2tldCopOwogICAgIH5Tb2NrZXRTdHJl
YW1IYW5kbGVQcml2YXRlKCk7CiAKIHB1YmxpYyBzbG90czoKQEAgLTYzLDYgKzY0LDcgQEAgcHVi
bGljIHNsb3RzOgogICAgIHZvaWQgc29ja2V0U3NsRXJyb3JzKGNvbnN0IFFMaXN0PFFTc2xFcnJv
cj4mKTsKICNlbmRpZgogcHVibGljOgorICAgIHZvaWQgaW5pdENvbm5lY3Rpb25zKCk7CiAgICAg
UVRjcFNvY2tldCogbV9zb2NrZXQ7CiAgICAgU29ja2V0U3RyZWFtSGFuZGxlKiBtX3N0cmVhbUhh
bmRsZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0
L1NvY2tldFN0cmVhbUhhbmRsZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvcXQvU29ja2V0U3RyZWFtSGFuZGxlUXQuY3BwCmluZGV4IGQ0NjM5MDllNzVkMGRkMDJiMTBl
ZWNiMGVhYmFjNjA5YmUxYjViOTkuLjI4MTAxYTY1MGYwNWQ3OWE1NzQyZGE0ZjMyNjZmZGY4YjY5
OWRlOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvU29j
a2V0U3RyZWFtSGFuZGxlUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvcXQvU29ja2V0U3RyZWFtSGFuZGxlUXQuY3BwCkBAIC00MCw3ICs0MCw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZTo6U29ja2V0U3RyZWFt
SGFuZGxlUHJpdmF0ZShTb2NrZXRTdHJlYW1IYW5kbGUqIHN0cmVhbUhhbmRsZSwgY29uc3QgS1VS
TCYgdXJsKSA6IFFPYmplY3QoKQorU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZTo6U29ja2V0U3Ry
ZWFtSGFuZGxlUHJpdmF0ZShTb2NrZXRTdHJlYW1IYW5kbGUqIHN0cmVhbUhhbmRsZSwgY29uc3Qg
S1VSTCYgdXJsKQogewogICAgIG1fc3RyZWFtSGFuZGxlID0gc3RyZWFtSGFuZGxlOwogICAgIG1f
c29ja2V0ID0gMDsKQEAgLTU2LDEyICs1Niw3IEBAIFNvY2tldFN0cmVhbUhhbmRsZVByaXZhdGU6
OlNvY2tldFN0cmVhbUhhbmRsZVByaXZhdGUoU29ja2V0U3RyZWFtSGFuZGxlKiBzdHJlYW1ICiAg
ICAgaWYgKCFtX3NvY2tldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29ubmVjdChtX3NvY2tl
dCwgU0lHTkFMKGNvbm5lY3RlZCgpKSwgdGhpcywgU0xPVChzb2NrZXRDb25uZWN0ZWQoKSkpOwot
ICAgIGNvbm5lY3QobV9zb2NrZXQsIFNJR05BTChyZWFkeVJlYWQoKSksIHRoaXMsIFNMT1Qoc29j
a2V0UmVhZHlSZWFkKCkpKTsKLSAgICBjb25uZWN0KG1fc29ja2V0LCBTSUdOQUwoZGlzY29ubmVj
dGVkKCkpLCB0aGlzLCBTTE9UKHNvY2tldENsb3NlZCgpKSk7Ci0gICAgY29ubmVjdChtX3NvY2tl
dCwgU0lHTkFMKGVycm9yKFFBYnN0cmFjdFNvY2tldDo6U29ja2V0RXJyb3IpKSwgdGhpcywgU0xP
VChzb2NrZXRFcnJvcihRQWJzdHJhY3RTb2NrZXQ6OlNvY2tldEVycm9yKSkpOwotICAgIGlmIChp
c1NlY3VyZSkKLSAgICAgICAgY29ubmVjdChtX3NvY2tldCwgU0lHTkFMKHNzbEVycm9ycyhjb25z
dCBRTGlzdDxRU3NsRXJyb3I+JikpLCB0aGlzLCBTTE9UKHNvY2tldFNzbEVycm9ycyhjb25zdCBR
TGlzdDxRU3NsRXJyb3I+JikpKTsKKyAgICBpbml0Q29ubmVjdGlvbnMoKTsKIAogICAgIHVuc2ln
bmVkIGludCBwb3J0ID0gdXJsLmhhc1BvcnQoKSA/IHVybC5wb3J0KCkgOiAoaXNTZWN1cmUgPyA0
NDMgOiA4MCk7CiAKQEAgLTc0LDExICs2OSwzNiBAQCBTb2NrZXRTdHJlYW1IYW5kbGVQcml2YXRl
OjpTb2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlKFNvY2tldFN0cmVhbUhhbmRsZSogc3RyZWFtSAog
ICAgICAgICBtX3NvY2tldC0+Y29ubmVjdFRvSG9zdChob3N0LCBwb3J0KTsKIH0KIAorU29ja2V0
U3RyZWFtSGFuZGxlUHJpdmF0ZTo6U29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZShTb2NrZXRTdHJl
YW1IYW5kbGUqIHN0cmVhbUhhbmRsZSwgUVRjcFNvY2tldCogc29ja2V0KQoreworICAgIG1fc3Ry
ZWFtSGFuZGxlID0gc3RyZWFtSGFuZGxlOworICAgIG1fc29ja2V0ID0gc29ja2V0OworICAgIGlu
aXRDb25uZWN0aW9ucygpOworfQorCiBTb2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlOjp+U29ja2V0
U3RyZWFtSGFuZGxlUHJpdmF0ZSgpCiB7CiAgICAgUV9BU1NFUlQoIShtX3NvY2tldCAmJiBtX3Nv
Y2tldC0+c3RhdGUoKSA9PSBRQWJzdHJhY3RTb2NrZXQ6OkNvbm5lY3RlZFN0YXRlKSk7CiB9CiAK
K3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZTo6aW5pdENvbm5lY3Rpb25zKCkKK3sKKyAg
ICBjb25uZWN0KG1fc29ja2V0LCBTSUdOQUwoY29ubmVjdGVkKCkpLCB0aGlzLCBTTE9UKHNvY2tl
dENvbm5lY3RlZCgpKSk7CisgICAgY29ubmVjdChtX3NvY2tldCwgU0lHTkFMKHJlYWR5UmVhZCgp
KSwgdGhpcywgU0xPVChzb2NrZXRSZWFkeVJlYWQoKSkpOworICAgIGNvbm5lY3QobV9zb2NrZXQs
IFNJR05BTChkaXNjb25uZWN0ZWQoKSksIHRoaXMsIFNMT1Qoc29ja2V0Q2xvc2VkKCkpKTsKKyAg
ICBjb25uZWN0KG1fc29ja2V0LCBTSUdOQUwoZXJyb3IoUUFic3RyYWN0U29ja2V0OjpTb2NrZXRF
cnJvcikpLCB0aGlzLCBTTE9UKHNvY2tldEVycm9yKFFBYnN0cmFjdFNvY2tldDo6U29ja2V0RXJy
b3IpKSk7CisjaWZuZGVmIFFUX05PX09QRU5TU0wKKyAgICBpZiAocW9iamVjdF9jYXN0PFFTc2xT
b2NrZXQqPihtX3NvY2tldCkpCisgICAgICAgIGNvbm5lY3QobV9zb2NrZXQsIFNJR05BTChzc2xF
cnJvcnMoY29uc3QgUUxpc3Q8UVNzbEVycm9yPiYpKSwgdGhpcywgU0xPVChzb2NrZXRTc2xFcnJv
cnMoY29uc3QgUUxpc3Q8UVNzbEVycm9yPiYpKSk7CisjZW5kaWYKKworICAgIC8vIENoZWNrIGZv
ciBtaXNzZWQgc2lnbmFscyBhbmQgY2FsbCB0aGUgc2xvdHMgYXN5bmNocm9ub3VzbHkgdG8gYWxs
b3cgYSBjbGllbnQgdG8gYmUgc2V0IGZpcnN0LgorICAgIGlmIChtX3NvY2tldC0+c3RhdGUoKSA+
PSBRQWJzdHJhY3RTb2NrZXQ6OkNvbm5lY3RlZFN0YXRlKQorICAgICAgICBRTWV0YU9iamVjdDo6
aW52b2tlTWV0aG9kKHRoaXMsICJzb2NrZXRDb25uZWN0ZWQiLCBRdDo6UXVldWVkQ29ubmVjdGlv
bik7CisgICAgaWYgKG1fc29ja2V0LT5ieXRlc0F2YWlsYWJsZSgpKQorICAgICAgICBRTWV0YU9i
amVjdDo6aW52b2tlTWV0aG9kKHRoaXMsICJzb2NrZXRSZWFkeVJlYWQiLCBRdDo6UXVldWVkQ29u
bmVjdGlvbik7Cit9CisKIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZTo6c29ja2V0Q29u
bmVjdGVkKCkKIHsKICAgICBpZiAobV9zdHJlYW1IYW5kbGUgJiYgbV9zdHJlYW1IYW5kbGUtPmNs
aWVudCgpKSB7CkBAIC0xMDYsNyArMTI2LDcgQEAgaW50IFNvY2tldFN0cmVhbUhhbmRsZVByaXZh
dGU6OnNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikKIAogdm9pZCBTb2NrZXRTdHJlYW1I
YW5kbGVQcml2YXRlOjpjbG9zZSgpCiB7Ci0gICAgaWYgKG1fc3RyZWFtSGFuZGxlLT5tX3N0YXRl
ID09IFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OkNvbm5lY3RpbmcpIHsKKyAgICBpZiAobV9zdHJl
YW1IYW5kbGUgJiYgbV9zdHJlYW1IYW5kbGUtPm1fc3RhdGUgPT0gU29ja2V0U3RyZWFtSGFuZGxl
QmFzZTo6Q29ubmVjdGluZykgewogICAgICAgICBtX3NvY2tldC0+YWJvcnQoKTsKICAgICAgICAg
bV9zdHJlYW1IYW5kbGUtPmNsaWVudCgpLT5kaWRDbG9zZVNvY2tldFN0cmVhbShtX3N0cmVhbUhh
bmRsZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTE2Niw2ICsxODYsMTMgQEAgU29ja2V0U3RyZWFt
SGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgS1VSTCYgdXJsLCBTb2NrZXRTdHJlYW1I
YW5kbGVDbGllbnQKICAgICBtX3AgPSBuZXcgU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZSh0aGlz
LCB1cmwpOwogfQogCitTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZShRVGNw
U29ja2V0KiBzb2NrZXQsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCogY2xpZW50KQorICAgIDog
U29ja2V0U3RyZWFtSGFuZGxlQmFzZShLVVJMKCksIGNsaWVudCkKK3sKKyAgICBMT0coTmV0d29y
aywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBuZXcgY2xpZW50ICVwIiwgdGhpcywgbV9jbGllbnQp
OworICAgIG1fcCA9IG5ldyBTb2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlKHRoaXMsIHNvY2tldCk7
Cit9CisKIFNvY2tldFN0cmVhbUhhbmRsZTo6flNvY2tldFN0cmVhbUhhbmRsZSgpCiB7CiAgICAg
TE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgZGVsZXRlIiwgdGhpcyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0
LnByaQppbmRleCBhNTUyZDU1ZDhkZmFhNWMyYTFmNWEwYzIzMGRmNTNmNTM3MDk3MWQzLi41ZTA4
YmMwYWZiMWE5NTc2ODU2MzBlZmY5MGNjYTdkM2ZiNTBkMzcwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTI2
NCw2ICsyNjQsMTAgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNzL0dlbmVyaWNDYWxsYmFj
ay5oIFwKICAgICBVSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQ
cm94eS5oIFwKICAgICBVSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFByb3h5
LmggXAorICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyLmggXAor
ICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ2xpZW50LmggXAor
ICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5o
IFwKKyAgICBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYlNvY2tldFNlcnZlclF0Lmgg
XAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaCBcCiAgICAgVUlQcm9j
ZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmggXAogICAgIFVJUHJvY2Vzcy9QYWdlQ2xpZW50
LmggXApAQCAtNTY5LDYgKzU3Myw5IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9GaW5k
SW5kaWNhdG9yLmNwcCBcCiAgICAgVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVl
c3RNYW5hZ2VyUHJveHkuY3BwIFwKICAgICBVSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdFByb3h5LmNwcCBcCisgICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2Nr
ZXRTZXJ2ZXIuY3BwIFwKKyAgICBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNl
cnZlckNvbm5lY3Rpb24uY3BwIFwKKyAgICBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0L1dl
YlNvY2tldFNlcnZlclF0LmNwcCBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVu
Y2hlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9UaHJlYWRMYXVuY2hlci5jcHAgXAog
ICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAgXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRT
ZXJ2ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJT
b2NrZXRTZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU3ZTRjMjNhYzQ2MDJmMDY5NTY3OGMyM2FjMzhj
NjYxNzczMWY2MTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
SW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZlci5jcHAKQEAgLTAsMCArMSw5NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKQorCisjaW5j
bHVkZSAiV2ViU29ja2V0U2VydmVyLmgiCisKKyNpbmNsdWRlICJXZWJTb2NrZXRTZXJ2ZXJDb25u
ZWN0aW9uLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Tb2NrZXRTdHJlYW1IYW5kbGUuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSAiV2Vi
U29ja2V0U2VydmVyUXQuaCIKKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlNvY2tldFNlcnZlcjo6V2ViU29ja2V0U2VydmVyKFdl
YlNvY2tldFNlcnZlckNsaWVudCogY2xpZW50KQorICAgIDogbV9zdGF0ZShDbG9zZWQpCisgICAg
LCBtX2NsaWVudChjbGllbnQpCit7CisgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7Cit9CisKK1dl
YlNvY2tldFNlcnZlcjo6fldlYlNvY2tldFNlcnZlcigpCit7CisgICAgY2xvc2UoKTsKK30KKwor
Ym9vbCBXZWJTb2NrZXRTZXJ2ZXI6Omxpc3Rlbihjb25zdCBTdHJpbmcmIGJpbmRBZGRyZXNzLCB1
bnNpZ25lZCBzaG9ydCBwb3J0KQoreworICAgIEFTU0VSVChwb3J0KTsKKworICAgIGlmIChtX3N0
YXRlID09IExpc3RlbmluZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBpc05v
d0xpc3RlbmluZyA9IHBsYXRmb3JtTGlzdGVuKGJpbmRBZGRyZXNzLCBwb3J0KTsKKyAgICBtX3N0
YXRlID0gaXNOb3dMaXN0ZW5pbmcgPyBMaXN0ZW5pbmcgOiBDbG9zZWQ7CisgICAgcmV0dXJuIGlz
Tm93TGlzdGVuaW5nOworfQorCit2b2lkIFdlYlNvY2tldFNlcnZlcjo6Y2xvc2UoKQoreworICAg
IGlmIChtX3N0YXRlID09IENsb3NlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGxhdGZvcm1D
bG9zZSgpOworfQorCit2b2lkIFdlYlNvY2tldFNlcnZlcjo6ZGlkQWNjZXB0Q29ubmVjdGlvbihQ
YXNzUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gc29ja2V0SGFuZGxlKQoreworICAgIG1fY29u
bmVjdGlvbnMuYXBwZW5kKGFkb3B0UHRyKG5ldyBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKHNv
Y2tldEhhbmRsZSwgbV9jbGllbnQsIHRoaXMpKSk7Cit9CisKK3ZvaWQgV2ViU29ja2V0U2VydmVy
OjpkaWRDbG9zZVdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24oV2ViU29ja2V0U2VydmVyQ29ubmVj
dGlvbiogY29ubmVjdGlvbikKK3sKKyAgICBEZXF1ZTxPd25QdHI8V2ViU29ja2V0U2VydmVyQ29u
bmVjdGlvbj4gPjo6aXRlcmF0b3IgZW5kID0gbV9jb25uZWN0aW9ucy5lbmQoKTsKKyAgICBmb3Ig
KERlcXVlPE93blB0cjxXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uPiA+OjppdGVyYXRvciBpdGVy
ID0gbV9jb25uZWN0aW9ucy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAg
IGlmIChpdGVyLT5nZXQoKSA9PSBjb25uZWN0aW9uKSB7CisgICAgICAgICAgICBtX2Nvbm5lY3Rp
b25zLnJlbW92ZShpdGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
fQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVy
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNl
cnZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmRhMTlhMmQ5YTQ4MTg2YTU2NzI1N2IxMDMzYjZmZjE1NjZmYmMy
ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9y
U2VydmVyL1dlYlNvY2tldFNlcnZlci5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNv
Y2tldFNlcnZlcl9oCisjZGVmaW5lIFdlYlNvY2tldFNlcnZlcl9oCisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SX1NFUlZFUikKKworI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIFBMQVRGT1JN
KFFUKQorbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBRdFRjcFNlcnZlckhhbmRsZXI7Cit9Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlOwor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViU29ja2V0U2VydmVyQ2xpZW50Owor
Y2xhc3MgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjsKKworY2xhc3MgV2ViU29ja2V0U2VydmVy
IHsKK3B1YmxpYzoKKyAgICBlbnVtIFNlcnZlclN0YXRlIHsgQ2xvc2VkLCBMaXN0ZW5pbmcgfTsK
KyAgICBXZWJTb2NrZXRTZXJ2ZXIoV2ViU29ja2V0U2VydmVyQ2xpZW50Kik7CisgICAgdmlydHVh
bCB+V2ViU29ja2V0U2VydmVyKCk7CisKKyAgICAvLyBTZXJ2ZXIgb3BlcmF0aW9ucy4KKyAgICBi
b29sIGxpc3Rlbihjb25zdCBTdHJpbmcmIGJpbmRBZGRyZXNzLCB1bnNpZ25lZCBzaG9ydCBwb3J0
KTsKKyAgICB2b2lkIGNsb3NlKCk7CisKKyAgICB2b2lkIGRpZEFjY2VwdENvbm5lY3Rpb24oUGFz
c1JlZlB0cjxXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU+KTsKKworcHJpdmF0ZToKKyAgICB2
b2lkIGRpZENsb3NlV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbihXZWJTb2NrZXRTZXJ2ZXJDb25u
ZWN0aW9uKik7CisKKyAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOworICAgIGJvb2wgcGxh
dGZvcm1MaXN0ZW4oY29uc3QgU3RyaW5nJiBiaW5kQWRkcmVzcywgdW5zaWduZWQgc2hvcnQgcG9y
dCk7CisgICAgdm9pZCBwbGF0Zm9ybUNsb3NlKCk7CisKKyAgICBTZXJ2ZXJTdGF0ZSBtX3N0YXRl
OworICAgIERlcXVlPE93blB0cjxXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uPiA+IG1fY29ubmVj
dGlvbnM7CisgICAgV2ViU29ja2V0U2VydmVyQ2xpZW50KiBtX2NsaWVudDsKKyNpZiBQTEFURk9S
TShRVCkKKyAgICBPd25QdHI8UXRUY3BTZXJ2ZXJIYW5kbGVyPiBtX3RjcFNlcnZlckhhbmRsZXI7
CisjZW5kaWYKKyAgICBmcmllbmQgY2xhc3MgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjsKK307
CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKQorCisjZW5kaWYgLy8g
V2ViU29ja2V0U2VydmVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9J
bnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZlckNsaWVudC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQ2ZjY0ZGRjOGUwNmU1OWQ2NGJjZTdjNDA5NzFjNTZiNDRjMjE1YzYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tl
dFNlcnZlckNsaWVudC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNvY2tldFNlcnZlckNsaWVudF9oCisj
ZGVmaW5lIFdlYlNvY2tldFNlcnZlckNsaWVudF9oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX1NF
UlZFUikKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEhUVFBSZXF1ZXN0Owor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlv
bjsKKworY2xhc3MgV2ViU29ja2V0U2VydmVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5XZWJTb2NrZXRTZXJ2ZXJDbGllbnQoKSB7IH0KKworICAgIC8vIFJlY2VpdmVkIGFuIEhUVFAg
cmVxdWVzdCBidXQgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIHdpdGggaXQuCisgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVVbnJlY29nbml6ZWRIVFRQUmVxdWVzdChXZWJTb2NrZXRTZXJ2ZXJDb25u
ZWN0aW9uKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpIVFRQUmVxdWVzdD4pIHsgfQorCisgICAgLy8g
UmVjZWl2ZWQgYSBXZWJTb2NrZXQgVXBncmFkZSBIVFRQIHJlcXVlc3QuIEFzayBpZiB3ZSBzaG91
bGQgaGFuZGxlIGl0IGFuZCB1cGdyYWRlLgorICAgIHZpcnR1YWwgYm9vbCBkaWRSZWNlaXZlV2Vi
U29ja2V0VXBncmFkZUhUVFBSZXF1ZXN0KFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qLCBQYXNz
UmVmUHRyPFdlYkNvcmU6OkhUVFBSZXF1ZXN0PikgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8g
RXN0YWJsaXNoZWQgYSBXZWJTb2NrZXQgQ29ubmVjdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgZGlk
RXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbihXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKiwg
UGFzc1JlZlB0cjxXZWJDb3JlOjpIVFRQUmVxdWVzdD4pIHsgfQorCisgICAgLy8gUmVjZWl2ZWQg
YSBXZWJTb2NrZXQgbWVzc2FnZS4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVdlYlNvY2tl
dE1lc3NhZ2UoV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbiosIGNvbnN0IFN0cmluZyYpIHsgfQor
CisgICAgLy8gV2ViU29ja2V0IENvbm5lY3Rpb24gY2xvc2VkLgorICAgIHZpcnR1YWwgdm9pZCBk
aWRDbG9zZVdlYlNvY2tldENvbm5lY3Rpb24oV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbiopIHsg
fQorfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9TRVJWRVIpCisKKyNlbmRp
ZiAvLyBXZWJTb2NrZXRTZXJ2ZXJDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVy
Q29ubmVjdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWJhYzQ4YjhkYjk3NTQwYjAyYzBmNTY5NjQ4ZjU4
ZDUyZjk4YjFjMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9J
bnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5jcHAKQEAgLTAsMCArMSwy
NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX1NFUlZF
UikKKworI2luY2x1ZGUgIldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uaCIKKworI2luY2x1ZGUg
IldlYlNvY2tldFNlcnZlci5oIgorI2luY2x1ZGUgIldlYlNvY2tldFNlcnZlckNsaWVudC5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvSFRUUFJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05vdElt
cGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Tb2NrZXRTdHJlYW1FcnJvci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvU29ja2V0U3RyZWFtSGFuZGxlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9X
ZWJTb2NrZXRDaGFubmVsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XZWJTb2NrZXRIYW5kc2hha2Uu
aD4KKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlNvY2tldFNlcnZlckNv
bm5lY3Rpb246OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24oUGFzc1JlZlB0cjxTb2NrZXRTdHJl
YW1IYW5kbGU+IHNvY2tldCwgV2ViU29ja2V0U2VydmVyQ2xpZW50KiBjbGllbnQsIFdlYlNvY2tl
dFNlcnZlciogc2VydmVyKQorICAgIDogbV9pZGVudGlmaWVyKDApCisgICAgLCBtX21vZGUoSFRU
UCkKKyAgICAsIG1fc29ja2V0KHNvY2tldCkKKyAgICAsIG1fc2VydmVyKHNlcnZlcikKKyAgICAs
IG1fY2xpZW50KGNsaWVudCkKK3sKKyAgICBtX3NvY2tldC0+c2V0Q2xpZW50KHRoaXMpOworfQor
CitXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjp+V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbigp
Cit7CisgICAgc2h1dGRvd25Ob3coKTsKK30KKwordm9pZCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0
aW9uOjpzaHV0ZG93bk5vdygpCit7CisgICAgaWYgKCFtX3NvY2tldCkKKyAgICAgICAgcmV0dXJu
OworICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHNvY2tldCA9IG1fc29ja2V0LnJlbGVh
c2UoKTsKKyAgICBzb2NrZXQtPmNsb3NlKCk7Cit9CisKK3ZvaWQgV2ViU29ja2V0U2VydmVyQ29u
bmVjdGlvbjo6c2h1dGRvd25BZnRlclNlbmRPck5vdygpCit7CisgICAgLy8gSWYgdGhpcyBBU1NF
UlQgaGFwcGVucyBvbiBhbnkgcGxhdGZvcm0gdGhlbiB0aGVpciBTb2NrZXRTdHJlYW1IYW5kbGU6
OnNlbmQKKyAgICAvLyBmb2xsb3dlZCBieSBhIFNvY2tldFN0cmVhbUhhbmRsZTo6Y2xvc2UgaXMg
bm90IGd1YXJlbnRlZWQgdG8gaGF2ZSBzZW50IGFsbAorICAgIC8vIGRhdGEuIElmIHRoaXMgaGFw
cGVucywgd2UgbmVlZCB0byBzbGlnaHRseSBjaGFuZ2UgdGhlIGRlc2lnbiB0byBpbmNsdWRlIGEK
KyAgICAvLyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ6OmRpZFNlbmQsIGhhbmRsZSBpdCBoZXJl
LCBhbmQgYWRkIGFuIG1fc2h1dGRvd25BZnRlclNlbmQKKyAgICAvLyBzdGF0ZSBvbiB0aGlzIFdl
YlNvY2tldFNlcnZlckNvbm5lY3Rpb24uCisgICAgQVNTRVJUKCFtX3NvY2tldC0+YnVmZmVyZWRB
bW91bnQoKSk7CisKKyAgICBzaHV0ZG93bk5vdygpOworfQorCit2b2lkIFdlYlNvY2tldFNlcnZl
ckNvbm5lY3Rpb246OnNlbmRXZWJTb2NrZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
K3sKKyAgICBjb25zdCBib29sIG1hc2tQYXlsb2FkID0gZmFsc2U7IC8vIFRoZSBzZXJ2ZXIgZG9u
J3QgaGF2ZSB0byBtYXNrIHRoZSBwYXlsb2FkLgorICAgIENTdHJpbmcgcGF5bG9hZCA9IG1lc3Nh
Z2UudXRmOCgpOworICAgIFZlY3RvcjxjaGFyPiBmcmFtZWRNZXNzYWdlOworICAgIFdlYlNvY2tl
dENoYW5uZWw6OmJ1aWxkRnJhbWUoV2ViU29ja2V0Q2hhbm5lbDo6T3BDb2RlVGV4dCwgbWFza1Bh
eWxvYWQsIHBheWxvYWQuZGF0YSgpLCBwYXlsb2FkLmxlbmd0aCgpLCBmcmFtZWRNZXNzYWdlKTsK
KworICAgIG1fc29ja2V0LT5zZW5kKGZyYW1lZE1lc3NhZ2UuZGF0YSgpLCBmcmFtZWRNZXNzYWdl
LnNpemUoKSk7Cit9CisKK3ZvaWQgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6c2VuZEhUVFBS
ZXNwb25zZUhlYWRlcihpbnQgc3RhdHVzQ29kZSwgY29uc3QgU3RyaW5nJiBzdGF0dXNUZXh0LCBj
b25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJGaWVsZHMpCit7CisgICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCJIVFRQLzEuMSAiKTsKKyAgICBidWlsZGVyLmFw
cGVuZChTdHJpbmc6Om51bWJlcihzdGF0dXNDb2RlKSk7CisgICAgYnVpbGRlci5hcHBlbmQoIiAi
KTsKKyAgICBidWlsZGVyLmFwcGVuZChzdGF0dXNUZXh0KTsKKyAgICBidWlsZGVyLmFwcGVuZCgi
XHJcbiIpOworICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlckZp
ZWxkcy5lbmQoKTsKKyAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBoZWFkZXJGaWVsZHMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBi
dWlsZGVyLmFwcGVuZChpdGVyLT5maXJzdCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCI6ICIp
OworICAgICAgICBidWlsZGVyLmFwcGVuZChpdGVyLT5zZWNvbmQgKyAiXHJcbiIpOworICAgIH0K
KyAgICBidWlsZGVyLmFwcGVuZCgiXHJcbiIpOworCisgICAgQ1N0cmluZyBoZWFkZXIgPSBidWls
ZGVyLnRvU3RyaW5nKCkubGF0aW4xKCk7CisgICAgbV9zb2NrZXQtPnNlbmQoaGVhZGVyLmRhdGEo
KSwgaGVhZGVyLmxlbmd0aCgpKTsKK30KKwordm9pZCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9u
OjpzZW5kUmF3RGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQoreworICAgIG1f
c29ja2V0LT5zZW5kKGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgV2ViU29ja2V0U2VydmVyQ29u
bmVjdGlvbjo6ZGlkQ2xvc2VTb2NrZXRTdHJlYW0oU29ja2V0U3RyZWFtSGFuZGxlKikKK3sKKyAg
ICAvLyBXZWIgU29ja2V0IE1vZGUuCisgICAgaWYgKG1fbW9kZSA9PSBXZWJTb2NrZXQpCisgICAg
ICAgIG1fY2xpZW50LT5kaWRDbG9zZVdlYlNvY2tldENvbm5lY3Rpb24odGhpcyk7CisKKyAgICAv
LyBUZWxsIHRoZSBzZXJ2ZXIgdG8gZ2V0IHJpZCBvZiB0aGlzLgorICAgIG1fc2VydmVyLT5kaWRD
bG9zZVdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24odGhpcyk7Cit9CisKK3ZvaWQgV2ViU29ja2V0
U2VydmVyQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZVNvY2tldFN0cmVhbURhdGEoU29ja2V0U3RyZWFt
SGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICAvLyBFYWNoIGRp
ZFJlY2VpdmVEYXRhIGNhbGwgYWRkcyBtb3JlIGRhdGEgdG8gb3VyIGJ1ZmZlci4KKyAgICAvLyBX
ZSBjbGVhciB0aGUgYnVmZmVyIHdoZW4gd2UgaGF2ZSBoYW5kbGVkIGRhdGEgZnJvbSBpdC4KKyAg
ICBtX2J1ZmZlcmVkRGF0YS5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsKKworICAgIC8vIEhUVFAgTW9k
ZS4KKyAgICBpZiAobV9tb2RlID09IEhUVFApIHsKKyAgICAgICAgcmVhZEhUVFBNZXNzYWdlKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZWIgU29ja2V0IE1vZGUuCisgICAg
aWYgKG1fbW9kZSA9PSBXZWJTb2NrZXQpIHsKKyAgICAgICAgcmVhZFdlYlNvY2tldEZyYW1lcygp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRm9yIGFueSBuZXcgbW9kZXMgYWRk
ZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBX
ZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpkaWRGYWlsU29ja2V0U3RyZWFtKFNvY2tldFN0cmVh
bUhhbmRsZSosIGNvbnN0IFNvY2tldFN0cmVhbUVycm9yJikKK3sKKyAgICAvLyBQb3NzaWJsZSBy
ZWFkIG9yIHdyaXRlIGVycm9yLgorfQorCit2b2lkIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246
OnJlYWRIVFRQTWVzc2FnZSgpCit7CisgICAgU3RyaW5nIGZhaWx1cmVSZWFzb247CisgICAgUmVm
UHRyPEhUVFBSZXF1ZXN0PiByZXF1ZXN0ID0gSFRUUFJlcXVlc3Q6OnBhcnNlSFRUUFJlcXVlc3RG
cm9tQnVmZmVyKG1fYnVmZmVyZWREYXRhLmRhdGEoKSwgbV9idWZmZXJlZERhdGEuc2l6ZSgpLCBm
YWlsdXJlUmVhc29uKTsKKyAgICBpZiAoIXJlcXVlc3QpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIEFzc3VtZSBhbGwgdGhlIGlucHV0IGhhcyBiZWVuIHJlYWQgaWYgd2UgYXJlIHJlYWRpbmcg
YW4gSFRUUCBSZXF1ZXN0LgorICAgIG1fYnVmZmVyZWREYXRhLmNsZWFyKCk7CisKKyAgICAvLyBJ
ZiB0aGlzIGlzIGEgV2ViU29ja2V0IHJlcXVlc3QsIHBlcmZvcm0gdGhlIFdlYlNvY2tldCBIYW5k
c2hha2UuCisgICAgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycyA9IHJlcXVlc3QtPmhlYWRl
ckZpZWxkcygpOworICAgIFN0cmluZyB1cGdyYWRlSGVhZGVyVmFsdWUgPSBoZWFkZXJzLmdldCgi
VXBncmFkZSIpOworICAgIGlmICh1cGdyYWRlSGVhZGVyVmFsdWUgPT0gIndlYnNvY2tldCIpIHsK
KyAgICAgICAgdXBncmFkZVRvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbihyZXF1ZXN0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodXBncmFkZUhlYWRlclZhbHVlID09ICJXZWJT
b2NrZXQiKQorICAgICAgICBMT0dfRVJST1IoIldlYlNvY2tldCBwcm90b2NvbCB2ZXJzaW9uIDwg
SHliaS0xMCBub3Qgc3VwcG9ydGVkLiBVcGdyYWRlIHlvdXIgY2xpZW50LiIpOworCisgICAgLy8g
T3RoZXJ3aXNlLCB0aGlzIGlzIGFuIEhUVFAgUmVxdWVzdCB3ZSBkb24ndCBrbm93IGhvdyB0byBk
ZWFsIHdpdGguCisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVVbnJlY29nbml6ZWRIVFRQUmVxdWVz
dCh0aGlzLCByZXF1ZXN0KTsKK30KKwordm9pZCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjp1
cGdyYWRlVG9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKFBhc3NSZWZQdHI8SFRUUFJlcXVlc3Q+
IHJlcXVlc3QpCit7CisgICAgQVNTRVJUKHJlcXVlc3QpOworICAgIEFTU0VSVChtX21vZGUgPT0g
SFRUUCk7CisgICAgbV9tb2RlID0gV2ViU29ja2V0OworICAgIFJlZlB0cjxIVFRQUmVxdWVzdD4g
cHJvdGVjdGVkUmVxdWVzdChyZXF1ZXN0KTsKKworICAgIC8vIEFzayB0aGUgY2xpZW50IGlmIHdl
IHNob3VsZCB1cGdyYWRlIGZvciB0aGlzIG9yIG5vdC4KKyAgICBpZiAoIW1fY2xpZW50LT5kaWRS
ZWNlaXZlV2ViU29ja2V0VXBncmFkZUhUVFBSZXF1ZXN0KHRoaXMsIHByb3RlY3RlZFJlcXVlc3Qp
KSB7CisgICAgICAgIHNodXRkb3duTm93KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBCdWlsZCBhbmQgc2VuZCB0aGUgV2ViU29ja2V0IGhhbmRzaGFrZSByZXNwb25zZS4KKyAg
ICBjb25zdCBIVFRQSGVhZGVyTWFwJiByZXF1ZXN0SGVhZGVycyA9IHByb3RlY3RlZFJlcXVlc3Qt
PmhlYWRlckZpZWxkcygpOworICAgIFN0cmluZyBhY2NlcHQgPSBXZWJTb2NrZXRIYW5kc2hha2U6
OmdldEV4cGVjdGVkV2ViU29ja2V0QWNjZXB0KHJlcXVlc3RIZWFkZXJzLmdldCgiU2VjLVdlYlNv
Y2tldC1LZXkiKSk7CisgICAgSFRUUEhlYWRlck1hcCByZXNwb25zZUhlYWRlcnM7CisgICAgcmVz
cG9uc2VIZWFkZXJzLmFkZCgiVXBncmFkZSIsIHJlcXVlc3RIZWFkZXJzLmdldCgiVXBncmFkZSIp
KTsKKyAgICByZXNwb25zZUhlYWRlcnMuYWRkKCJDb25uZWN0aW9uIiwgcmVxdWVzdEhlYWRlcnMu
Z2V0KCJDb25uZWN0aW9uIikpOworICAgIHJlc3BvbnNlSGVhZGVycy5hZGQoIlNlYy1XZWJTb2Nr
ZXQtQWNjZXB0IiwgYWNjZXB0KTsKKworICAgIHNlbmRIVFRQUmVzcG9uc2VIZWFkZXIoMTAxLCAi
V2ViU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZSIsIHJlc3BvbnNlSGVhZGVycyk7CisKKyAgICBt
X2NsaWVudC0+ZGlkRXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbih0aGlzLCBwcm90ZWN0ZWRS
ZXF1ZXN0KTsKK30KKwordm9pZCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpyZWFkV2ViU29j
a2V0RnJhbWVzKCkKK3sKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBib29sIGRpZFJlYWRP
bmVGcmFtZSA9IHJlYWRXZWJTb2NrZXRGcmFtZSgpOworICAgICAgICBpZiAoIWRpZFJlYWRPbmVG
cmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAobV9idWZmZXJlZERhdGEuaXNF
bXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitib29sIFdlYlNvY2tldFNl
cnZlckNvbm5lY3Rpb246OnJlYWRXZWJTb2NrZXRGcmFtZSgpCit7CisgICAgV2ViU29ja2V0Q2hh
bm5lbDo6RnJhbWVEYXRhIGZyYW1lRGF0YTsKKyAgICBTdHJpbmcgZXJyb3JTdHJpbmc7CisgICAg
V2ViU29ja2V0Q2hhbm5lbDo6UGFyc2VGcmFtZVJlc3VsdCByZXN1bHQgPSBXZWJTb2NrZXRDaGFu
bmVsOjpwYXJzZUZyYW1lKG1fYnVmZmVyZWREYXRhLmRhdGEoKSwgbV9idWZmZXJlZERhdGEuc2l6
ZSgpLCBmcmFtZURhdGEsIGVycm9yU3RyaW5nKTsKKworICAgIC8vIEluY29tcGxldGUgZnJhbWUu
IFdhaXQgdG8gcmVjZWl2ZSBtb3JlIGRhdGEuCisgICAgaWYgKHJlc3VsdCA9PSBXZWJTb2NrZXRD
aGFubmVsOjpGcmFtZUluY29tcGxldGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
IChyZXN1bHQgPT0gV2ViU29ja2V0Q2hhbm5lbDo6RnJhbWVFcnJvcikgeworICAgICAgICBzaHV0
ZG93bk5vdygpOworICAgIH0gZWxzZSBpZiAoZnJhbWVEYXRhLm9wQ29kZSA9PSBXZWJTb2NrZXRD
aGFubmVsOjpPcENvZGVUZXh0KSB7CisgICAgICAgIC8vIERlbGVnYXRlIFRleHQgZnJhbWVzIHRv
IG91ciBjbGllbnQuCisgICAgICAgIFN0cmluZyBtc2cgPSBTdHJpbmc6OmZyb21VVEY4KGZyYW1l
RGF0YS5wYXlsb2FkLCBmcmFtZURhdGEucGF5bG9hZExlbmd0aCk7CisgICAgICAgIG1fY2xpZW50
LT5kaWRSZWNlaXZlV2ViU29ja2V0TWVzc2FnZSh0aGlzLCBtc2cpOworICAgIH0gZWxzZQorICAg
ICAgICBub3RJbXBsZW1lbnRlZCgpOworCisgICAgLy8gUmVtb3ZlIHRoZSBmcmFtZSBmcm9tIG91
ciBidWZmZXIuCisgICAgbV9idWZmZXJlZERhdGEucmVtb3ZlKDAsIGZyYW1lRGF0YS5mcmFtZUVu
ZCAtIG1fYnVmZmVyZWREYXRhLmRhdGEoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQor
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9TRVJWRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZlckNvbm5lY3Rp
b24uaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0
U2VydmVyQ29ubmVjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjNGI1YzBjN2I2OTU4ODk3OWZjM2FmZjM1
MGFlNjRiN2RhODc4OWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uaApAQCAtMCwwICsx
LDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uX2gKKyNkZWZpbmUgV2Vi
U29ja2V0U2VydmVyQ29ubmVjdGlvbl9oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikK
KworI2luY2x1ZGUgPFdlYkNvcmUvU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50Lmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitjbGFzcyBIVFRQSGVhZGVyTWFwOworY2xhc3MgSFRUUFJlcXVlc3Q7Citj
bGFzcyBTb2NrZXRTdHJlYW1IYW5kbGU7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBXZWJTb2NrZXRTZXJ2ZXI7CitjbGFzcyBXZWJTb2NrZXRTZXJ2ZXJDbGllbnQ7CisKK2NsYXNz
IFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24gOiBwdWJsaWMgV2ViQ29yZTo6U29ja2V0U3RyZWFt
SGFuZGxlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBlbnVtIFdlYlNvY2tldFNlcnZlck1vZGUgeyBI
VFRQLCBXZWJTb2NrZXQgfTsKKyAgICBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKFBhc3NSZWZQ
dHI8V2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlPiwgV2ViU29ja2V0U2VydmVyQ2xpZW50Kiwg
V2ViU29ja2V0U2VydmVyKik7CisgICAgdmlydHVhbCB+V2ViU29ja2V0U2VydmVyQ29ubmVjdGlv
bigpOworCisgICAgdW5zaWduZWQgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRp
ZmllcjsgfQorICAgIHZvaWQgc2V0SWRlbnRpZmllcih1bnNpZ25lZCBpZCkgeyBtX2lkZW50aWZp
ZXIgPSBpZDsgfQorCisgICAgLy8gU2VuZGluZyBkYXRhIG92ZXIgdGhlIGNvbm5lY3Rpb24uCisg
ICAgdm9pZCBzZW5kV2ViU29ja2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAg
IHZvaWQgc2VuZEhUVFBSZXNwb25zZUhlYWRlcihpbnQgc3RhdHVzQ29kZSwgY29uc3QgU3RyaW5n
JiBzdGF0dXNUZXh0LCBjb25zdCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJiBoZWFkZXJGaWVsZHMp
OworICAgIHZvaWQgc2VuZFJhd0RhdGEoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7
CisKKyAgICAvLyBUZXJtaW5hdGluZyB0aGUgY29ubmVjdGlvbi4KKyAgICB2b2lkIHNodXRkb3du
Tm93KCk7CisgICAgdm9pZCBzaHV0ZG93bkFmdGVyU2VuZE9yTm93KCk7CisKKyAgICAvLyBTb2Nr
ZXRTdHJlYW1IYW5kbGVDbGllbnQgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lkIGRp
ZENsb3NlU29ja2V0U3RyZWFtKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZSopOworICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlU29ja2V0U3RyZWFtRGF0YShXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkRmFpbFNvY2tldFN0cmVhbShXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGUqLCBjb25z
dCBXZWJDb3JlOjpTb2NrZXRTdHJlYW1FcnJvciYpOworCitwcml2YXRlOgorICAgIC8vIEhUVFAg
TW9kZS4KKyAgICB2b2lkIHJlYWRIVFRQTWVzc2FnZSgpOworCisgICAgLy8gV2ViU29ja2V0IE1v
ZGUuCisgICAgdm9pZCB1cGdyYWRlVG9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKFBhc3NSZWZQ
dHI8V2ViQ29yZTo6SFRUUFJlcXVlc3Q+KTsKKyAgICB2b2lkIHJlYWRXZWJTb2NrZXRGcmFtZXMo
KTsKKyAgICBib29sIHJlYWRXZWJTb2NrZXRGcmFtZSgpOworCitwcm90ZWN0ZWQ6CisgICAgdW5z
aWduZWQgbV9pZGVudGlmaWVyOworICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcmVkRGF0YTsKKyAg
ICBXZWJTb2NrZXRTZXJ2ZXJNb2RlIG1fbW9kZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U29ja2V0
U3RyZWFtSGFuZGxlPiBtX3NvY2tldDsKKyAgICBXZWJTb2NrZXRTZXJ2ZXIqIG1fc2VydmVyOwor
ICAgIFdlYlNvY2tldFNlcnZlckNsaWVudCogbV9jbGllbnQ7Cit9OworCit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKKworI2VuZGlmIC8vIFdlYlNvY2tldFNlcnZlckNv
bm5lY3Rpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3Rv
clNlcnZlci9xdC9XZWJTb2NrZXRTZXJ2ZXJRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYlNvY2tldFNlcnZlclF0LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
MWVjNTI2ZThjYzRkMWZkMDBiOWJjMmNiMzIwYjgyZjZiNzM3Njk1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9xdC9XZWJTb2NrZXRT
ZXJ2ZXJRdC5jcHAKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlNvY2tldFNlcnZlclF0LmgiCisKKyNpbmNsdWRl
ICJXZWJTb2NrZXRTZXJ2ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NvY2tldFN0cmVhbUhhbmRs
ZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJTb2NrZXRTZXJ2ZXI6OnBsYXRm
b3JtSW5pdGlhbGl6ZSgpCit7CisgICAgbV90Y3BTZXJ2ZXJIYW5kbGVyID0gYWRvcHRQdHIobmV3
IFF0VGNwU2VydmVySGFuZGxlcih0aGlzKSk7Cit9CisKK2Jvb2wgV2ViU29ja2V0U2VydmVyOjpw
bGF0Zm9ybUxpc3Rlbihjb25zdCBTdHJpbmcmIGJpbmRBZGRyZXNzLCB1bnNpZ25lZCBzaG9ydCBw
b3J0KQoreworICAgIHJldHVybiBtX3RjcFNlcnZlckhhbmRsZXItPmxpc3RlbihiaW5kQWRkcmVz
cywgcG9ydCk7Cit9CisKK3ZvaWQgV2ViU29ja2V0U2VydmVyOjpwbGF0Zm9ybUNsb3NlKCkKK3sK
KyAgICBtX3RjcFNlcnZlckhhbmRsZXItPmNsb3NlKCk7Cit9CisKK1F0VGNwU2VydmVySGFuZGxl
cjo6UXRUY3BTZXJ2ZXJIYW5kbGVyKFdlYlNvY2tldFNlcnZlciogd2ViU29ja2V0U2VydmVyKQor
OiBtX3dlYlNvY2tldFNlcnZlcih3ZWJTb2NrZXRTZXJ2ZXIpCit7CisgICAgY29ubmVjdCgmbV9z
ZXJ2ZXJTb2NrZXQsIFNJR05BTChuZXdDb25uZWN0aW9uKCkpLCBTTE9UKGhhbmRsZU5ld0Nvbm5l
Y3Rpb24oKSkpOworfQorCit2b2lkIFF0VGNwU2VydmVySGFuZGxlcjo6aGFuZGxlTmV3Q29ubmVj
dGlvbigpCit7CisgICAgUVRjcFNvY2tldCogc29ja2V0ID0gbV9zZXJ2ZXJTb2NrZXQubmV4dFBl
bmRpbmdDb25uZWN0aW9uKCk7CisgICAgQVNTRVJUKHNvY2tldCk7CisgICAgbV93ZWJTb2NrZXRT
ZXJ2ZXItPmRpZEFjY2VwdENvbm5lY3Rpb24oU29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGUoc29j
a2V0LCAwKSk7Cit9CisKK2Jvb2wgUXRUY3BTZXJ2ZXJIYW5kbGVyOjpsaXN0ZW4oY29uc3QgU3Ry
aW5nJiBiaW5kQWRkcmVzcywgdW5zaWduZWQgc2hvcnQgcG9ydCkKK3sKKyAgICBBU1NFUlQoIWJp
bmRBZGRyZXNzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKHBvcnQpOworICAgIGJvb2wgc3VjY2Vz
cyA9IG1fc2VydmVyU29ja2V0Lmxpc3RlbihRSG9zdEFkZHJlc3MoYmluZEFkZHJlc3MpLCBwb3J0
KTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIExPR19FUlJPUigiQ2FuJ3Qgb3BlbiBzZXJ2
ZXIgc29ja2V0IG9uICVzOiVkIFslc10iLCBxUHJpbnRhYmxlKGJpbmRBZGRyZXNzKSwgcG9ydCwg
cVByaW50YWJsZShtX3NlcnZlclNvY2tldC5lcnJvclN0cmluZygpKSk7CisgICAgcmV0dXJuIHN1
Y2Nlc3M7Cit9CisKK3ZvaWQgUXRUY3BTZXJ2ZXJIYW5kbGVyOjpjbG9zZSgpCit7CisgICAgbV9z
ZXJ2ZXJTb2NrZXQuY2xvc2UoKTsKK30KKworfQorCisjaW5jbHVkZSAibW9jX1dlYlNvY2tldFNl
cnZlclF0LmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0
b3JTZXJ2ZXIvcXQvV2ViU29ja2V0U2VydmVyUXQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViU29ja2V0U2VydmVyUXQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iN2Uw
ZjJmNjA5NmY1YTI1ZTdlYzVjOTc4OGRhNjgxNmFhMGVmNmM2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9xdC9XZWJTb2NrZXRTZXJ2
ZXJRdC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNvY2tldFNlcnZlclF0X2gKKyNk
ZWZpbmUgV2ViU29ja2V0U2VydmVyUXRfaAorCisjaW5jbHVkZSA8UVRjcFNlcnZlcj4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFdlYlNvY2tldFNlcnZlcjsKKworY2xhc3MgUXRUY3BTZXJ2ZXJIYW5kbGVyIDogcHVibGljIFFP
YmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUXRUY3BTZXJ2ZXJIYW5kbGVyKFdl
YlNvY2tldFNlcnZlciopOworICAgIGJvb2wgbGlzdGVuKGNvbnN0IFN0cmluZyYgYmluZEFkZHJl
c3MsIHVuc2lnbmVkIHNob3J0IHBvcnQpOworICAgIHZvaWQgY2xvc2UoKTsKKworcHJpdmF0ZSBz
bG90czoKKyAgICB2b2lkIGhhbmRsZU5ld0Nvbm5lY3Rpb24oKTsKKworcHJpdmF0ZToKKyAgICBR
VGNwU2VydmVyIG1fc2VydmVyU29ja2V0OworICAgIFdlYlNvY2tldFNlcnZlciogbV93ZWJTb2Nr
ZXRTZXJ2ZXI7Cit9OworCit9CisKKyNlbmRpZiAvLyBXZWJTb2NrZXRTZXJ2ZXJRdF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaCBiL1NvdXJjZS9XZWJLaXQyL2NvbmZpZy5o
CmluZGV4IGViM2JkYWEzZDdkMTdkMjI3YjBkMDE0NTIxZmEzY2ViYzYxZGZjZWYuLjQ4ZDU1NTY2
OTI1MDU3YTFhM2IxNWFiMDFjODRlZTdlNTUxNmE0OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL2NvbmZpZy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL2NvbmZpZy5oCkBAIC0xNjUsMyArMTY1
LDkgQEAgc3RhdGljIGNvbnN0IHR5cGUmIG5hbWUoKSBcCiAjZW5kaWYKIAogI2RlZmluZSBQTFVH
SU5fQVJDSElURUNUVVJFKEFSQ0gpIChkZWZpbmVkIFBMVUdJTl9BUkNISVRFQ1RVUkVfIyNBUkNI
ICYmIFBMVUdJTl9BUkNISVRFQ1RVUkVfIyNBUkNIKQorCisjaWZuZGVmIEVOQUJMRV9JTlNQRUNU
T1JfU0VSVkVSCisjaWYgUExBVEZPUk0oUVQpCisjZGVmaW5lIEVOQUJMRV9JTlNQRUNUT1JfU0VS
VkVSIDEKKyNlbmRpZgorI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134621</attachid>
            <date>2012-03-29 11:17:54 -0700</date>
            <delta_ts>2012-04-02 07:33:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73093-20120329201546.patch</filename>
            <type>text/plain</type>
            <size>42292</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTY5OTljZmUxNTRmN2Jk
OTcxZGY3ZGQ5NzVhYmY5N2VhZjk3ZGYwYS4uM2E3NWRlOWQzNGEyNmY3OGYyYzIyOTg1N2E4NTE2
ZjM4YWU0NjNmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAzLTI5ICBKb3Nl
cGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+IGFuZCBKb2NlbHluIFR1cmNvdHRlICA8
am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CisKKyAgICAgICAgQWRkIGEgR2VuZXJpYyBXZWJT
b2NrZXQgU2VydmVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzMwOTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBbGxvdyBTb2NrZXRTdHJlYW1IYW5kbGUgZm9yIHRoZSBRdCBwb3J0IHRvIHRha2UgYW4g
ZXhpc3RpbmcgUVRjcFNvY2tldCBpbiBpdHMgY29uc3RydWN0b3IuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL3F0L1NvY2tldFN0cmVhbUhhbmRsZS5oOgorICAgICAgICAoV2ViQ29yZTo6
U29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGUpOgorICAgICAgICAoU29ja2V0U3RyZWFtSGFuZGxl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3F0L1NvY2tldFN0cmVhbUhhbmRsZVByaXZh
dGUuaDoKKyAgICAgICAgKFNvY2tldFN0cmVhbUhhbmRsZVByaXZhdGUpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvcXQvU29ja2V0U3RyZWFtSGFuZGxlUXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZTo6U29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0
ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhh
bmRsZVByaXZhdGU6OmluaXRDb25uZWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRT
dHJlYW1IYW5kbGVQcml2YXRlOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZSk6CisKIDIwMTItMDMtMjkgIEpvY2VseW4gVHVy
Y290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4KIAogICAgICAgICBFeHBvc2UgcmV1
c2FibGUgV2ViU29ja2V0IGNvZGUgZm9yIFdlYlNvY2tldFNlcnZlci4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA3
MjY4MjFkMDk3NDVmYjgzOTA3YmIxNTQwYjZkOWM5NjkxNDY4MzAxLi40ODkyZDYzYmRlODA1ZTI5
ZTk0MGRhYjE1MjVmOTQxYjVkN2YwNmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTUgQEAKKzIw
MTItMDMtMjkgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4gYW5kIEpvY2Vs
eW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4KKworICAgICAgICBBZGQg
YSBHZW5lcmljIFdlYlNvY2tldCBTZXJ2ZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03MzA5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoZSBJbnNwZWN0b3IgU2VydmVyIHdpbGwgYmUgYSBXZWJTb2Nr
ZXQgU2VydmVyIHRoYXQgYWxzbyByZXNwb25kcyB0bworICAgICAgICBub24tV2ViU29ja2V0LVVw
Z3JhZGUgSFRUUCBSZXF1ZXN0cy4gVGhpcyBpcyBhIGdlbmVyaWMgV2ViU29ja2V0IHNlcnZlcgor
ICAgICAgICB0aGF0IGhhbmRsZXMgcGFzc2VzIG9uIHdoYXQgaXQgZG9lc24ndCBrbm93IG9uIHRv
IGl0cyBDbGllbnQgZm9yIGV4dGVuZGVkCisgICAgICAgIGZ1bmN0aW9uYWxpdHkuIFRoaXMgY29k
ZSBpcyB3cmFwcGVkIGluIGEgbmV3IEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKSBmbGFnLgorCisg
ICAgICAgIFRoZXJlIGFyZSBubyB0ZXN0cyB5ZXQgZm9yIGEgYnVpbHQtaW4gV2ViU29ja2V0IHNl
cnZlci4KKworICAgICAgICAqIFRhcmdldC5wcmk6CisKKyAgICAgICAgICBXZWJTb2NrZXRTZXJ2
ZXIgaXMgYSBzaW1wbGUgc2VydmVyLiBDYWxsaW5nIGxpc3Rlbiwgb3IgY2xvc2UsCisgICAgICAg
ICAgbXVsdGlwbGUgdGltZXMgaXMgc2FmZS4gU3ViY2xhc3NpbmcgaXMgZXhwZWN0ZWQuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZlci5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0U2VydmVy
OjpXZWJTb2NrZXRTZXJ2ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRTZXJ2ZXI6On5X
ZWJTb2NrZXRTZXJ2ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRTZXJ2ZXI6Omxpc3Rl
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFNlcnZlcjo6Y2xvc2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJTb2NrZXRTZXJ2ZXI6OmRpZEFjY2VwdENvbm5lY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJTb2NrZXRTZXJ2ZXI6OmRpZENsb3NlV2ViU29ja2V0U2VydmVyQ29ubmVjdGlv
bik6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXIu
aDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJTb2NrZXRTZXJ2ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIv
V2ViU29ja2V0U2VydmVyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViU29ja2V0U2VydmVyQ2xpZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViU29ja2V0U2VydmVyQ2xpZW50Ojp+V2ViU29ja2V0U2VydmVyQ2xpZW50KToK
KyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0U2VydmVyQ2xpZW50OjpkaWRSZWNlaXZlVW5yZWNv
Z25pemVkSFRUUFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRTZXJ2ZXJDbGll
bnQ6OmRpZFJlY2VpdmVXZWJTb2NrZXRVcGdyYWRlSFRUUFJlcXVlc3QpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTb2NrZXRTZXJ2ZXJDbGllbnQ6OmRpZEVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRTZXJ2ZXJDbGllbnQ6OmRpZFJlY2VpdmVX
ZWJTb2NrZXRNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0U2VydmVyQ2xpZW50
OjpkaWRDbG9zZVdlYlNvY2tldENvbm5lY3Rpb24pOgorCisgICAgICAgICAgRWFjaCBXZWJTb2Nr
ZXRDb25uZWN0aW9uOgorCisgICAgICAgICAgIC0gUGFzc2VzIHVua25vd24gSFRUUCBSZXF1ZXN0
cyB0byB0aGUgc2VydmVyJ3MgY2xpZW50LgorICAgICAgICAgICAtIEhhbmRsZXMgV2ViU29ja2V0
IFVwZ3JhZGUgUmVxdWVzdHMuCisgICAgICAgICAgICAgLSBGaXJzdCBhc2sgdGhlIGNsaWVudCBp
ZiBpdCBpcyBva2F5LgorICAgICAgICAgICAgIC0gTGF0ZXIgbm90aWZ5IHRoZSBjbGllbnQgYWJv
dXQgYSBzdWNjZXNzLgorICAgICAgICAgICAtIE9uY2UgdXBncmFkZWQgdGhlIGNvbm5lY3Rpb24g
cGFyc2VzIGFuZCBwYXNzZXMgV2ViU29ja2V0CisgICAgICAgICAgICAgZnJhbWVzIHRvIHRoZSBj
bGllbnQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNl
cnZlckNvbm5lY3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OldlYlNvY2tldFNlcnZlckNvbm5lY3Rp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjp+V2ViU29j
a2V0U2VydmVyQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFNlcnZlckNv
bm5lY3Rpb246OnNodXRkb3duTm93KToKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0U2VydmVy
Q29ubmVjdGlvbjo6c2h1dGRvd25BZnRlclNlbmRPck5vdyk6IG1lYW50IHRvIHNodXRkb3duIGFm
dGVyIGFuIEhUVFAgcmVzcG9uc2UuIEVuc3VyZSBhbGwgcGxhdGZvcm1zIHdvcmsgYXMgZXhwZWN0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OnNlbmRXZWJT
b2NrZXRNZXNzYWdlKTogc2VuZCBhIHRleHQgbWVzc2FnZSAoV2ViU29ja2V0IG1lc3NhZ2UpIG92
ZXIgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFNlcnZlckNvbm5l
Y3Rpb246OnNlbmRIVFRQUmVzcG9uc2VIZWFkZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2Nr
ZXRTZXJ2ZXJDb25uZWN0aW9uOjpzZW5kUmF3RGF0YSk6IHNlbmQgcmF3IGRhdGEgKEhUVFAgbWVz
c2FnZSkgb3ZlciB0aGUgY29ubmVjdGlvbi4KKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0U2Vy
dmVyQ29ubmVjdGlvbjo6ZGlkQ2xvc2VTb2NrZXRTdHJlYW0pOiBoYW5kbGUgc29ja2V0IGNsb3Np
bmcgc2NlbmFyaW9zLgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9u
OjpkaWRSZWNlaXZlU29ja2V0U3RyZWFtRGF0YSk6IHBhcnNlIHRoZSBpbmNvbWluZyBkYXRhIGlu
IEhUVFAgLyBXZWJTb2NrZXQgbW9kZXMuCisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFNlcnZl
ckNvbm5lY3Rpb246OmRpZEZhaWxTb2NrZXRTdHJlYW0pOiBsb2cgZXJyb3JzLgorICAgICAgICAo
V2ViS2l0OjpXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpyZWFkSFRUUE1lc3NhZ2UpOiB3aGVu
IHN0YXJ0aW5nLCBhIHdlYiBzb2NrZXQgY29ubmVjdGlvbiByZWFkcyBhbiBIVFRQIG1lc3NhZ2Uu
CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OnVwZ3JhZGVUb1dl
YlNvY2tldFNlcnZlckNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRTZXJ2
ZXJDb25uZWN0aW9uOjpyZWFkV2ViU29ja2V0RnJhbWVzKTogcGFyc2Ugb3VyIGJ1ZmZlciBmb3Ig
YXMgbWFueSBmcmFtZXMgYXMgcG9zc2libGUuCisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFNl
cnZlckNvbm5lY3Rpb246OnJlYWRXZWJTb2NrZXRGcmFtZSk6IHBhcnNlIGFuIGluZGl2aWR1YWwg
ZnJhbWUuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2
ZXJDb25uZWN0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAoV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OmlkZW50aWZpZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpzZXRJZGVudGlmaWVyKToKKworICAgICAg
ICAgIFF0IHNwZWNpZmljIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICogVUlQcm9jZXNzL0lu
c3BlY3RvclNlcnZlci9xdC9XZWJTb2NrZXRTZXJ2ZXJRdC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0U2VydmVyOjpwbGF0Zm9ybUluaXRp
YWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRTZXJ2ZXI6OnBsYXRmb3JtTGlzdGVu
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0U2VydmVyOjpwbGF0Zm9ybUNsb3NlKToKKyAg
ICAgICAgKFdlYktpdDo6UXRUY3BTZXJ2ZXJIYW5kbGVyOjpRdFRjcFNlcnZlckhhbmRsZXIpOgor
ICAgICAgICAoV2ViS2l0OjpRdFRjcFNlcnZlckhhbmRsZXI6OmhhbmRsZU5ld0Nvbm5lY3Rpb24p
OgorICAgICAgICAoV2ViS2l0OjpRdFRjcFNlcnZlckhhbmRsZXI6Omxpc3Rlbik6CisgICAgICAg
IChXZWJLaXQ6OlF0VGNwU2VydmVySGFuZGxlcjo6Y2xvc2UpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViU29ja2V0U2VydmVyUXQuaDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAoUXRUY3BTZXJ2ZXJIYW5kbGVyKToKKworICAgICAgICAqIFdl
YktpdDIucHJpOgorICAgICAgICAqIGNvbmZpZy5oOiBBZGQgRU5BQkxFKElOU1BFQ1RPUl9TRVJW
RVIpIGZvciBXZWJLaXQyLgorCiAyMDEyLTAzLTI4ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNj
YUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGEgY3Jhc2ggYW5kIGFuIGFzc2VydGlvbiB3aGVu
IHJlY292ZXJpbmcgZnJvbSBhIHdlYiBwcm9jZXNzIGNyYXNoCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1NvY2tldFN0cmVhbUhhbmRsZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9Tb2NrZXRTdHJlYW1IYW5kbGUuaAppbmRleCBl
NzI1MzQ0MDgzYzBjZjZjMzRlMzNlNTFiMDczNjA0NjI2NzU3NWE3Li45ZTZlYWMwZmMwNTA5ZWQw
YzQ4MDI1NmU1NTk3ZTg1NDRhMWU3NGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3F0L1NvY2tldFN0cmVhbUhhbmRsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvcXQvU29ja2V0U3RyZWFtSGFuZGxlLmgKQEAgLTQyLDYgKzQyLDEw
IEBACiAjZXJyb3IgVGhpcyBzaG91bGQgb25seSBiZSBidWlsdCBvbiBRdAogI2VuZGlmCiAKK1FU
X0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUVRjcFNvY2tldDsKK1FUX0VORF9OQU1FU1BBQ0UKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7
CkBAIC01Miw2ICs1Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTb2NrZXRT
dHJlYW1IYW5kbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxTb2NrZXRTdHJlYW1IYW5kbGU+LCBwdWJs
aWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShjb25zdCBLVVJMJiB1cmwsIFNv
Y2tldFN0cmVhbUhhbmRsZUNsaWVudCogY2xpZW50KSB7IHJldHVybiBhZG9wdFJlZihuZXcgU29j
a2V0U3RyZWFtSGFuZGxlKHVybCwgY2xpZW50KSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U29ja2V0U3RyZWFtSGFuZGxlPiBjcmVhdGUoUVRjcFNvY2tldCogc29ja2V0LCBTb2NrZXRT
dHJlYW1IYW5kbGVDbGllbnQqIGNsaWVudCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFNvY2tldFN0
cmVhbUhhbmRsZShzb2NrZXQsIGNsaWVudCkpOyB9CiAKICAgICAgICAgdmlydHVhbCB+U29ja2V0
U3RyZWFtSGFuZGxlKCk7CiAKQEAgLTYxLDYgKzY2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgU29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IEtVUkwmLCBT
b2NrZXRTdHJlYW1IYW5kbGVDbGllbnQqKTsKKyAgICAgICAgU29ja2V0U3RyZWFtSGFuZGxlKFFU
Y3BTb2NrZXQqLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQqKTsKIAogICAgICAgICAvLyBObyBh
dXRoZW50aWNhdGlvbiBmb3Igc3RyZWFtcyBwZXIgc2UsIGJ1dCBwcm94eSBtYXkgYXNrIGZvciBj
cmVkZW50aWFscy4KICAgICAgICAgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9Tb2NrZXRTdHJlYW1IYW5kbGVQcml2
YXRlLmgKaW5kZXggZDA3NGY0MjcyMTlmMDIxODY0ODNmZmJjNGVhOWI0ZGRiOGNhYTdmYy4uMzAx
OTI3OTA0OTkyN2NkOWY1YjQyYmMzMzJhMWJiMzA3YjE3YjRiYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9Tb2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9Tb2NrZXRTdHJlYW1IYW5k
bGVQcml2YXRlLmgKQEAgLTQ3LDYgKzQ3LDcgQEAgY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlUHJp
dmF0ZSA6IHB1YmxpYyBRT2JqZWN0IHsKICAgICBRX09CSkVDVAogcHVibGljOgogICAgIFNvY2tl
dFN0cmVhbUhhbmRsZVByaXZhdGUoU29ja2V0U3RyZWFtSGFuZGxlKiwgY29uc3QgS1VSTCYpOwor
ICAgIFNvY2tldFN0cmVhbUhhbmRsZVByaXZhdGUoU29ja2V0U3RyZWFtSGFuZGxlKiwgUVRjcFNv
Y2tldCopOwogICAgIH5Tb2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlKCk7CiAKIHB1YmxpYyBzbG90
czoKQEAgLTYzLDYgKzY0LDcgQEAgcHVibGljIHNsb3RzOgogICAgIHZvaWQgc29ja2V0U3NsRXJy
b3JzKGNvbnN0IFFMaXN0PFFTc2xFcnJvcj4mKTsKICNlbmRpZgogcHVibGljOgorICAgIHZvaWQg
aW5pdENvbm5lY3Rpb25zKCk7CiAgICAgUVRjcFNvY2tldCogbV9zb2NrZXQ7CiAgICAgU29ja2V0
U3RyZWFtSGFuZGxlKiBtX3N0cmVhbUhhbmRsZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1NvY2tldFN0cmVhbUhhbmRsZVF0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvU29ja2V0U3RyZWFtSGFuZGxlUXQuY3BwCmlu
ZGV4IGQ0NjM5MDllNzVkMGRkMDJiMTBlZWNiMGVhYmFjNjA5YmUxYjViOTkuLjI4MTAxYTY1MGYw
NWQ3OWE1NzQyZGE0ZjMyNjZmZGY4YjY5OWRlOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvcXQvU29ja2V0U3RyZWFtSGFuZGxlUXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvU29ja2V0U3RyZWFtSGFuZGxlUXQuY3BwCkBA
IC00MCw3ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU29ja2V0U3RyZWFtSGFu
ZGxlUHJpdmF0ZTo6U29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZShTb2NrZXRTdHJlYW1IYW5kbGUq
IHN0cmVhbUhhbmRsZSwgY29uc3QgS1VSTCYgdXJsKSA6IFFPYmplY3QoKQorU29ja2V0U3RyZWFt
SGFuZGxlUHJpdmF0ZTo6U29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZShTb2NrZXRTdHJlYW1IYW5k
bGUqIHN0cmVhbUhhbmRsZSwgY29uc3QgS1VSTCYgdXJsKQogewogICAgIG1fc3RyZWFtSGFuZGxl
ID0gc3RyZWFtSGFuZGxlOwogICAgIG1fc29ja2V0ID0gMDsKQEAgLTU2LDEyICs1Niw3IEBAIFNv
Y2tldFN0cmVhbUhhbmRsZVByaXZhdGU6OlNvY2tldFN0cmVhbUhhbmRsZVByaXZhdGUoU29ja2V0
U3RyZWFtSGFuZGxlKiBzdHJlYW1ICiAgICAgaWYgKCFtX3NvY2tldCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgY29ubmVjdChtX3NvY2tldCwgU0lHTkFMKGNvbm5lY3RlZCgpKSwgdGhpcywgU0xP
VChzb2NrZXRDb25uZWN0ZWQoKSkpOwotICAgIGNvbm5lY3QobV9zb2NrZXQsIFNJR05BTChyZWFk
eVJlYWQoKSksIHRoaXMsIFNMT1Qoc29ja2V0UmVhZHlSZWFkKCkpKTsKLSAgICBjb25uZWN0KG1f
c29ja2V0LCBTSUdOQUwoZGlzY29ubmVjdGVkKCkpLCB0aGlzLCBTTE9UKHNvY2tldENsb3NlZCgp
KSk7Ci0gICAgY29ubmVjdChtX3NvY2tldCwgU0lHTkFMKGVycm9yKFFBYnN0cmFjdFNvY2tldDo6
U29ja2V0RXJyb3IpKSwgdGhpcywgU0xPVChzb2NrZXRFcnJvcihRQWJzdHJhY3RTb2NrZXQ6OlNv
Y2tldEVycm9yKSkpOwotICAgIGlmIChpc1NlY3VyZSkKLSAgICAgICAgY29ubmVjdChtX3NvY2tl
dCwgU0lHTkFMKHNzbEVycm9ycyhjb25zdCBRTGlzdDxRU3NsRXJyb3I+JikpLCB0aGlzLCBTTE9U
KHNvY2tldFNzbEVycm9ycyhjb25zdCBRTGlzdDxRU3NsRXJyb3I+JikpKTsKKyAgICBpbml0Q29u
bmVjdGlvbnMoKTsKIAogICAgIHVuc2lnbmVkIGludCBwb3J0ID0gdXJsLmhhc1BvcnQoKSA/IHVy
bC5wb3J0KCkgOiAoaXNTZWN1cmUgPyA0NDMgOiA4MCk7CiAKQEAgLTc0LDExICs2OSwzNiBAQCBT
b2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlOjpTb2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlKFNvY2tl
dFN0cmVhbUhhbmRsZSogc3RyZWFtSAogICAgICAgICBtX3NvY2tldC0+Y29ubmVjdFRvSG9zdCho
b3N0LCBwb3J0KTsKIH0KIAorU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZTo6U29ja2V0U3RyZWFt
SGFuZGxlUHJpdmF0ZShTb2NrZXRTdHJlYW1IYW5kbGUqIHN0cmVhbUhhbmRsZSwgUVRjcFNvY2tl
dCogc29ja2V0KQoreworICAgIG1fc3RyZWFtSGFuZGxlID0gc3RyZWFtSGFuZGxlOworICAgIG1f
c29ja2V0ID0gc29ja2V0OworICAgIGluaXRDb25uZWN0aW9ucygpOworfQorCiBTb2NrZXRTdHJl
YW1IYW5kbGVQcml2YXRlOjp+U29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZSgpCiB7CiAgICAgUV9B
U1NFUlQoIShtX3NvY2tldCAmJiBtX3NvY2tldC0+c3RhdGUoKSA9PSBRQWJzdHJhY3RTb2NrZXQ6
OkNvbm5lY3RlZFN0YXRlKSk7CiB9CiAKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZTo6
aW5pdENvbm5lY3Rpb25zKCkKK3sKKyAgICBjb25uZWN0KG1fc29ja2V0LCBTSUdOQUwoY29ubmVj
dGVkKCkpLCB0aGlzLCBTTE9UKHNvY2tldENvbm5lY3RlZCgpKSk7CisgICAgY29ubmVjdChtX3Nv
Y2tldCwgU0lHTkFMKHJlYWR5UmVhZCgpKSwgdGhpcywgU0xPVChzb2NrZXRSZWFkeVJlYWQoKSkp
OworICAgIGNvbm5lY3QobV9zb2NrZXQsIFNJR05BTChkaXNjb25uZWN0ZWQoKSksIHRoaXMsIFNM
T1Qoc29ja2V0Q2xvc2VkKCkpKTsKKyAgICBjb25uZWN0KG1fc29ja2V0LCBTSUdOQUwoZXJyb3Io
UUFic3RyYWN0U29ja2V0OjpTb2NrZXRFcnJvcikpLCB0aGlzLCBTTE9UKHNvY2tldEVycm9yKFFB
YnN0cmFjdFNvY2tldDo6U29ja2V0RXJyb3IpKSk7CisjaWZuZGVmIFFUX05PX09QRU5TU0wKKyAg
ICBpZiAocW9iamVjdF9jYXN0PFFTc2xTb2NrZXQqPihtX3NvY2tldCkpCisgICAgICAgIGNvbm5l
Y3QobV9zb2NrZXQsIFNJR05BTChzc2xFcnJvcnMoY29uc3QgUUxpc3Q8UVNzbEVycm9yPiYpKSwg
dGhpcywgU0xPVChzb2NrZXRTc2xFcnJvcnMoY29uc3QgUUxpc3Q8UVNzbEVycm9yPiYpKSk7Cisj
ZW5kaWYKKworICAgIC8vIENoZWNrIGZvciBtaXNzZWQgc2lnbmFscyBhbmQgY2FsbCB0aGUgc2xv
dHMgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgYSBjbGllbnQgdG8gYmUgc2V0IGZpcnN0LgorICAg
IGlmIChtX3NvY2tldC0+c3RhdGUoKSA+PSBRQWJzdHJhY3RTb2NrZXQ6OkNvbm5lY3RlZFN0YXRl
KQorICAgICAgICBRTWV0YU9iamVjdDo6aW52b2tlTWV0aG9kKHRoaXMsICJzb2NrZXRDb25uZWN0
ZWQiLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7CisgICAgaWYgKG1fc29ja2V0LT5ieXRlc0F2YWls
YWJsZSgpKQorICAgICAgICBRTWV0YU9iamVjdDo6aW52b2tlTWV0aG9kKHRoaXMsICJzb2NrZXRS
ZWFkeVJlYWQiLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7Cit9CisKIHZvaWQgU29ja2V0U3RyZWFt
SGFuZGxlUHJpdmF0ZTo6c29ja2V0Q29ubmVjdGVkKCkKIHsKICAgICBpZiAobV9zdHJlYW1IYW5k
bGUgJiYgbV9zdHJlYW1IYW5kbGUtPmNsaWVudCgpKSB7CkBAIC0xMDYsNyArMTI2LDcgQEAgaW50
IFNvY2tldFN0cmVhbUhhbmRsZVByaXZhdGU6OnNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxl
bikKIAogdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlOjpjbG9zZSgpCiB7Ci0gICAgaWYg
KG1fc3RyZWFtSGFuZGxlLT5tX3N0YXRlID09IFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OkNvbm5l
Y3RpbmcpIHsKKyAgICBpZiAobV9zdHJlYW1IYW5kbGUgJiYgbV9zdHJlYW1IYW5kbGUtPm1fc3Rh
dGUgPT0gU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6Q29ubmVjdGluZykgewogICAgICAgICBtX3Nv
Y2tldC0+YWJvcnQoKTsKICAgICAgICAgbV9zdHJlYW1IYW5kbGUtPmNsaWVudCgpLT5kaWRDbG9z
ZVNvY2tldFN0cmVhbShtX3N0cmVhbUhhbmRsZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTE2Niw2
ICsxODYsMTMgQEAgU29ja2V0U3RyZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3Qg
S1VSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQKICAgICBtX3AgPSBuZXcgU29ja2V0
U3RyZWFtSGFuZGxlUHJpdmF0ZSh0aGlzLCB1cmwpOwogfQogCitTb2NrZXRTdHJlYW1IYW5kbGU6
OlNvY2tldFN0cmVhbUhhbmRsZShRVGNwU29ja2V0KiBzb2NrZXQsIFNvY2tldFN0cmVhbUhhbmRs
ZUNsaWVudCogY2xpZW50KQorICAgIDogU29ja2V0U3RyZWFtSGFuZGxlQmFzZShLVVJMKCksIGNs
aWVudCkKK3sKKyAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBuZXcgY2xp
ZW50ICVwIiwgdGhpcywgbV9jbGllbnQpOworICAgIG1fcCA9IG5ldyBTb2NrZXRTdHJlYW1IYW5k
bGVQcml2YXRlKHRoaXMsIHNvY2tldCk7Cit9CisKIFNvY2tldFN0cmVhbUhhbmRsZTo6flNvY2tl
dFN0cmVhbUhhbmRsZSgpCiB7CiAgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUg
JXAgZGVsZXRlIiwgdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJp
IGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCAxNmZiYWQ0YTNjM2Y0OWRjN2I3ODU5
N2Q4YjQxNzQwYmJmNmUwY2E0Li43MGM1ODIwM2MxYzk0OGRiODFlMmYyMTE5MGIzNWFmNzdhYTQ0
Yjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1RhcmdldC5wcmkKQEAgLTIwMiw2ICsyMDIsMTAgQEAgSEVBREVSUyArPSBcCiAgICAg
VUlQcm9jZXNzL0dlbmVyaWNDYWxsYmFjay5oIFwKICAgICBVSVByb2Nlc3MvR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvR2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdFByb3h5LmggXAorICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2
ZXIvV2ViU29ja2V0U2VydmVyLmggXAorICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2Vi
U29ja2V0U2VydmVyQ2xpZW50LmggXAorICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2Vi
U29ja2V0U2VydmVyQ29ubmVjdGlvbi5oIFwKKyAgICBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVy
L3F0L1dlYlNvY2tldFNlcnZlclF0LmggXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNz
TGF1bmNoZXIuaCBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmggXAog
ICAgIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaCBcCkBAIC01MzcsNiArNTQxLDkgQEAg
U09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuY3BwIFwKICAgICBVSVBy
b2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAgXAogICAg
IFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHkuY3BwIFwKKyAgICBV
SVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZlci5jcHAgXAorICAgIFVJUHJv
Y2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5jcHAgXAorICAg
IFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViU29ja2V0U2VydmVyUXQuY3BwIFwKICAg
ICBVSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmNwcCBcCiAgICAgVUlQcm9jZXNz
L0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL3F0
L1Byb2Nlc3NMYXVuY2hlclF0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZTdlNGMyM2FjNDYwMmYwNjk1Njc4YzIzYWMzOGM2NjE3NzMxZjYxMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0
U2VydmVyLmNwcApAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9TRVJWRVIpCisKKyNpbmNsdWRlICJXZWJTb2NrZXRTZXJ2ZXIuaCIK
KworI2luY2x1ZGUgIldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL1NvY2tldFN0cmVhbUhhbmRsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisK
KyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlICJXZWJTb2NrZXRTZXJ2ZXJRdC5oIgorI2VuZGlm
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2Vi
U29ja2V0U2VydmVyOjpXZWJTb2NrZXRTZXJ2ZXIoV2ViU29ja2V0U2VydmVyQ2xpZW50KiBjbGll
bnQpCisgICAgOiBtX3N0YXRlKENsb3NlZCkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKK3sKKyAg
ICBwbGF0Zm9ybUluaXRpYWxpemUoKTsKK30KKworV2ViU29ja2V0U2VydmVyOjp+V2ViU29ja2V0
U2VydmVyKCkKK3sKKyAgICBjbG9zZSgpOworfQorCitib29sIFdlYlNvY2tldFNlcnZlcjo6bGlz
dGVuKGNvbnN0IFN0cmluZyYgYmluZEFkZHJlc3MsIHVuc2lnbmVkIHNob3J0IHBvcnQpCit7Cisg
ICAgQVNTRVJUKHBvcnQpOworCisgICAgaWYgKG1fc3RhdGUgPT0gTGlzdGVuaW5nKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGlzTm93TGlzdGVuaW5nID0gcGxhdGZvcm1MaXN0
ZW4oYmluZEFkZHJlc3MsIHBvcnQpOworICAgIG1fc3RhdGUgPSBpc05vd0xpc3RlbmluZyA/IExp
c3RlbmluZyA6IENsb3NlZDsKKyAgICByZXR1cm4gaXNOb3dMaXN0ZW5pbmc7Cit9CisKK3ZvaWQg
V2ViU29ja2V0U2VydmVyOjpjbG9zZSgpCit7CisgICAgaWYgKG1fc3RhdGUgPT0gQ2xvc2VkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBwbGF0Zm9ybUNsb3NlKCk7Cit9CisKK3ZvaWQgV2ViU29j
a2V0U2VydmVyOjpkaWRBY2NlcHRDb25uZWN0aW9uKFBhc3NSZWZQdHI8U29ja2V0U3RyZWFtSGFu
ZGxlPiBzb2NrZXRIYW5kbGUpCit7CisgICAgbV9jb25uZWN0aW9ucy5hcHBlbmQoYWRvcHRQdHIo
bmV3IFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24oc29ja2V0SGFuZGxlLCBtX2NsaWVudCwgdGhp
cykpKTsKK30KKwordm9pZCBXZWJTb2NrZXRTZXJ2ZXI6OmRpZENsb3NlV2ViU29ja2V0U2VydmVy
Q29ubmVjdGlvbihXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKiBjb25uZWN0aW9uKQoreworICAg
IERlcXVlPE93blB0cjxXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uPiA+OjppdGVyYXRvciBlbmQg
PSBtX2Nvbm5lY3Rpb25zLmVuZCgpOworICAgIGZvciAoRGVxdWU8T3duUHRyPFdlYlNvY2tldFNl
cnZlckNvbm5lY3Rpb24+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2Nvbm5lY3Rpb25zLmJlZ2luKCk7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXItPmdldCgpID09IGNvbm5l
Y3Rpb24pIHsKKyAgICAgICAgICAgIG1fY29ubmVjdGlvbnMucmVtb3ZlKGl0ZXIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfU0VSVkVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGExOWEy
ZDlhNDgxODZhNTY3MjU3YjEwMzNiNmZmMTU2NmZiYzJmYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyLmgK
QEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViU29ja2V0U2VydmVyX2gKKyNkZWZpbmUgV2Vi
U29ja2V0U2VydmVyX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKQorCisjaW5jbHVk
ZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCisjaWYgUExBVEZPUk0oUVQpCituYW1lc3BhY2UgV2ViS2l0IHsK
K2NsYXNzIFF0VGNwU2VydmVySGFuZGxlcjsKK30KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGU7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBXZWJTb2NrZXRTZXJ2ZXJDbGllbnQ7CitjbGFzcyBXZWJTb2NrZXRTZXJ2ZXJDb25u
ZWN0aW9uOworCitjbGFzcyBXZWJTb2NrZXRTZXJ2ZXIgeworcHVibGljOgorICAgIGVudW0gU2Vy
dmVyU3RhdGUgeyBDbG9zZWQsIExpc3RlbmluZyB9OworICAgIFdlYlNvY2tldFNlcnZlcihXZWJT
b2NrZXRTZXJ2ZXJDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5XZWJTb2NrZXRTZXJ2ZXIoKTsKKwor
ICAgIC8vIFNlcnZlciBvcGVyYXRpb25zLgorICAgIGJvb2wgbGlzdGVuKGNvbnN0IFN0cmluZyYg
YmluZEFkZHJlc3MsIHVuc2lnbmVkIHNob3J0IHBvcnQpOworICAgIHZvaWQgY2xvc2UoKTsKKwor
ICAgIHZvaWQgZGlkQWNjZXB0Q29ubmVjdGlvbihQYXNzUmVmUHRyPFdlYkNvcmU6OlNvY2tldFN0
cmVhbUhhbmRsZT4pOworCitwcml2YXRlOgorICAgIHZvaWQgZGlkQ2xvc2VXZWJTb2NrZXRTZXJ2
ZXJDb25uZWN0aW9uKFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qKTsKKworICAgIHZvaWQgcGxh
dGZvcm1Jbml0aWFsaXplKCk7CisgICAgYm9vbCBwbGF0Zm9ybUxpc3Rlbihjb25zdCBTdHJpbmcm
IGJpbmRBZGRyZXNzLCB1bnNpZ25lZCBzaG9ydCBwb3J0KTsKKyAgICB2b2lkIHBsYXRmb3JtQ2xv
c2UoKTsKKworICAgIFNlcnZlclN0YXRlIG1fc3RhdGU7CisgICAgRGVxdWU8T3duUHRyPFdlYlNv
Y2tldFNlcnZlckNvbm5lY3Rpb24+ID4gbV9jb25uZWN0aW9uczsKKyAgICBXZWJTb2NrZXRTZXJ2
ZXJDbGllbnQqIG1fY2xpZW50OworI2lmIFBMQVRGT1JNKFFUKQorICAgIE93blB0cjxRdFRjcFNl
cnZlckhhbmRsZXI+IG1fdGNwU2VydmVySGFuZGxlcjsKKyNlbmRpZgorICAgIGZyaWVuZCBjbGFz
cyBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9TRVJWRVIpCisKKyNlbmRpZiAvLyBXZWJTb2NrZXRTZXJ2ZXJfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRT
ZXJ2ZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIv
V2ViU29ja2V0U2VydmVyQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDZmNjRkZGM4ZTA2ZTU5ZDY0YmNl
N2M0MDk3MWM1NmI0NGMyMTVjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ2xpZW50LmgKQEAgLTAsMCAr
MSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgV2ViU29ja2V0U2VydmVyQ2xpZW50X2gKKyNkZWZpbmUgV2ViU29ja2V0U2VydmVyQ2xp
ZW50X2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKQorCisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgSFRUUFJlcXVlc3Q7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOworCitjbGFzcyBXZWJTb2NrZXRTZXJ2
ZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYlNvY2tldFNlcnZlckNsaWVudCgp
IHsgfQorCisgICAgLy8gUmVjZWl2ZWQgYW4gSFRUUCByZXF1ZXN0IGJ1dCBkb24ndCBrbm93IHdo
YXQgdG8gZG8gd2l0aCBpdC4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVVucmVjb2duaXpl
ZEhUVFBSZXF1ZXN0KFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qLCBQYXNzUmVmUHRyPFdlYkNv
cmU6OkhUVFBSZXF1ZXN0PikgeyB9CisKKyAgICAvLyBSZWNlaXZlZCBhIFdlYlNvY2tldCBVcGdy
YWRlIEhUVFAgcmVxdWVzdC4gQXNrIGlmIHdlIHNob3VsZCBoYW5kbGUgaXQgYW5kIHVwZ3JhZGUu
CisgICAgdmlydHVhbCBib29sIGRpZFJlY2VpdmVXZWJTb2NrZXRVcGdyYWRlSFRUUFJlcXVlc3Qo
V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbiosIFBhc3NSZWZQdHI8V2ViQ29yZTo6SFRUUFJlcXVl
c3Q+KSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBFc3RhYmxpc2hlZCBhIFdlYlNvY2tldCBD
b25uZWN0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBkaWRFc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0
aW9uKFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkhUVFBS
ZXF1ZXN0PikgeyB9CisKKyAgICAvLyBSZWNlaXZlZCBhIFdlYlNvY2tldCBtZXNzYWdlLgorICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlV2ViU29ja2V0TWVzc2FnZShXZWJTb2NrZXRTZXJ2ZXJD
b25uZWN0aW9uKiwgY29uc3QgU3RyaW5nJikgeyB9CisKKyAgICAvLyBXZWJTb2NrZXQgQ29ubmVj
dGlvbiBjbG9zZWQuCisgICAgdmlydHVhbCB2b2lkIGRpZENsb3NlV2ViU29ja2V0Q29ubmVjdGlv
bihXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKikgeyB9Cit9OworCit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKKworI2VuZGlmIC8vIFdlYlNvY2tldFNlcnZlckNsaWVu
dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVy
L1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41NzRhNmFjMzlhNzhjODYzODE2MDQ0NDUxYzQ3YWQ3MzE1ZGM2MGQzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRT
ZXJ2ZXJDb25uZWN0aW9uLmNwcApAQCAtMCwwICsxLDI0NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKQorCisjaW5jbHVkZSAiV2ViU29ja2V0
U2VydmVyQ29ubmVjdGlvbi5oIgorCisjaW5jbHVkZSAiV2ViU29ja2V0U2VydmVyLmgiCisjaW5j
bHVkZSAiV2ViU29ja2V0U2VydmVyQ2xpZW50LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVFRQUmVx
dWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1NvY2tldFN0cmVhbUVycm9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Tb2NrZXRTdHJl
YW1IYW5kbGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1dlYlNvY2tldENoYW5uZWwuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1dlYlNvY2tldEhhbmRzaGFrZS5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQ
YXJhbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6V2ViU29ja2V0U2VydmVy
Q29ubmVjdGlvbihQYXNzUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gc29ja2V0LCBXZWJTb2Nr
ZXRTZXJ2ZXJDbGllbnQqIGNsaWVudCwgV2ViU29ja2V0U2VydmVyKiBzZXJ2ZXIpCisgICAgOiBt
X2lkZW50aWZpZXIoMCkKKyAgICAsIG1fbW9kZShIVFRQKQorICAgICwgbV9zb2NrZXQoc29ja2V0
KQorICAgICwgbV9zZXJ2ZXIoc2VydmVyKQorICAgICwgbV9jbGllbnQoY2xpZW50KQoreworICAg
IG1fc29ja2V0LT5zZXRDbGllbnQodGhpcyk7Cit9CisKK1dlYlNvY2tldFNlcnZlckNvbm5lY3Rp
b246On5XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKCkKK3sKKyAgICBzaHV0ZG93bk5vdygpOwor
fQorCit2b2lkIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OnNodXRkb3duTm93KCkKK3sKKyAg
ICBpZiAoIW1fc29ja2V0KQorICAgICAgICByZXR1cm47CisgICAgUmVmUHRyPFNvY2tldFN0cmVh
bUhhbmRsZT4gc29ja2V0ID0gbV9zb2NrZXQucmVsZWFzZSgpOworICAgIHNvY2tldC0+Y2xvc2Uo
KTsKK30KKwordm9pZCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpzaHV0ZG93bkFmdGVyU2Vu
ZE9yTm93KCkKK3sKKyAgICAvLyBJZiB0aGlzIEFTU0VSVCBoYXBwZW5zIG9uIGFueSBwbGF0Zm9y
bSB0aGVuIHRoZWlyIFNvY2tldFN0cmVhbUhhbmRsZTo6c2VuZAorICAgIC8vIGZvbGxvd2VkIGJ5
IGEgU29ja2V0U3RyZWFtSGFuZGxlOjpjbG9zZSBpcyBub3QgZ3VhcmVudGVlZCB0byBoYXZlIHNl
bnQgYWxsCisgICAgLy8gZGF0YS4gSWYgdGhpcyBoYXBwZW5zLCB3ZSBuZWVkIHRvIHNsaWdodGx5
IGNoYW5nZSB0aGUgZGVzaWduIHRvIGluY2x1ZGUgYQorICAgIC8vIFNvY2tldFN0cmVhbUhhbmRs
ZUNsaWVudDo6ZGlkU2VuZCwgaGFuZGxlIGl0IGhlcmUsIGFuZCBhZGQgYW4gbV9zaHV0ZG93bkFm
dGVyU2VuZAorICAgIC8vIHN0YXRlIG9uIHRoaXMgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi4K
KyAgICBBU1NFUlQoIW1fc29ja2V0LT5idWZmZXJlZEFtb3VudCgpKTsKKworICAgIHNodXRkb3du
Tm93KCk7Cit9CisKK3ZvaWQgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6c2VuZFdlYlNvY2tl
dE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIENTdHJpbmcgcGF5bG9hZCA9
IG1lc3NhZ2UudXRmOCgpOworICAgIFdlYlNvY2tldEZyYW1lIGZyYW1lKFdlYlNvY2tldEZyYW1l
OjpPcENvZGVUZXh0LCB0cnVlLCBmYWxzZSwgZmFsc2UsIHBheWxvYWQuZGF0YSgpLCBwYXlsb2Fk
Lmxlbmd0aCgpKTsKKworICAgIFZlY3RvcjxjaGFyPiBmcmFtZURhdGE7CisgICAgZnJhbWUubWFr
ZUZyYW1lRGF0YShmcmFtZURhdGEpOworCisgICAgbV9zb2NrZXQtPnNlbmQoZnJhbWVEYXRhLmRh
dGEoKSwgZnJhbWVEYXRhLnNpemUoKSk7Cit9CisKK3ZvaWQgV2ViU29ja2V0U2VydmVyQ29ubmVj
dGlvbjo6c2VuZEhUVFBSZXNwb25zZUhlYWRlcihpbnQgc3RhdHVzQ29kZSwgY29uc3QgU3RyaW5n
JiBzdGF0dXNUZXh0LCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJGaWVsZHMpCit7CisgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCJIVFRQLzEuMSAiKTsK
KyAgICBidWlsZGVyLmFwcGVuZChTdHJpbmc6Om51bWJlcihzdGF0dXNDb2RlKSk7CisgICAgYnVp
bGRlci5hcHBlbmQoIiAiKTsKKyAgICBidWlsZGVyLmFwcGVuZChzdGF0dXNUZXh0KTsKKyAgICBi
dWlsZGVyLmFwcGVuZCgiXHJcbiIpOworICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGhlYWRlckZpZWxkcy5lbmQoKTsKKyAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBoZWFkZXJGaWVsZHMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRl
cikgeworICAgICAgICBidWlsZGVyLmFwcGVuZChpdGVyLT5maXJzdCk7CisgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCI6ICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZChpdGVyLT5zZWNvbmQgKyAi
XHJcbiIpOworICAgIH0KKyAgICBidWlsZGVyLmFwcGVuZCgiXHJcbiIpOworCisgICAgQ1N0cmlu
ZyBoZWFkZXIgPSBidWlsZGVyLnRvU3RyaW5nKCkubGF0aW4xKCk7CisgICAgbV9zb2NrZXQtPnNl
bmQoaGVhZGVyLmRhdGEoKSwgaGVhZGVyLmxlbmd0aCgpKTsKK30KKwordm9pZCBXZWJTb2NrZXRT
ZXJ2ZXJDb25uZWN0aW9uOjpzZW5kUmF3RGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVu
Z3RoKQoreworICAgIG1fc29ja2V0LT5zZW5kKGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgV2Vi
U29ja2V0U2VydmVyQ29ubmVjdGlvbjo6ZGlkQ2xvc2VTb2NrZXRTdHJlYW0oU29ja2V0U3RyZWFt
SGFuZGxlKikKK3sKKyAgICAvLyBXZWIgU29ja2V0IE1vZGUuCisgICAgaWYgKG1fbW9kZSA9PSBX
ZWJTb2NrZXQpCisgICAgICAgIG1fY2xpZW50LT5kaWRDbG9zZVdlYlNvY2tldENvbm5lY3Rpb24o
dGhpcyk7CisKKyAgICAvLyBUZWxsIHRoZSBzZXJ2ZXIgdG8gZ2V0IHJpZCBvZiB0aGlzLgorICAg
IG1fc2VydmVyLT5kaWRDbG9zZVdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24odGhpcyk7Cit9CisK
K3ZvaWQgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZVNvY2tldFN0cmVhbURh
dGEoU29ja2V0U3RyZWFtSGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sK
KyAgICAvLyBFYWNoIGRpZFJlY2VpdmVEYXRhIGNhbGwgYWRkcyBtb3JlIGRhdGEgdG8gb3VyIGJ1
ZmZlci4KKyAgICAvLyBXZSBjbGVhciB0aGUgYnVmZmVyIHdoZW4gd2UgaGF2ZSBoYW5kbGVkIGRh
dGEgZnJvbSBpdC4KKyAgICBtX2J1ZmZlcmVkRGF0YS5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsKKwor
ICAgIC8vIEhUVFAgTW9kZS4KKyAgICBpZiAobV9tb2RlID09IEhUVFApIHsKKyAgICAgICAgcmVh
ZEhUVFBNZXNzYWdlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZWIgU29j
a2V0IE1vZGUuCisgICAgaWYgKG1fbW9kZSA9PSBXZWJTb2NrZXQpIHsKKyAgICAgICAgcmVhZFdl
YlNvY2tldEZyYW1lcygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRm9yIGFu
eSBuZXcgbW9kZXMgYWRkZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKwordm9pZCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpkaWRGYWlsU29ja2V0U3Ry
ZWFtKFNvY2tldFN0cmVhbUhhbmRsZSosIGNvbnN0IFNvY2tldFN0cmVhbUVycm9yJikKK3sKKyAg
ICAvLyBQb3NzaWJsZSByZWFkIG9yIHdyaXRlIGVycm9yLgorfQorCit2b2lkIFdlYlNvY2tldFNl
cnZlckNvbm5lY3Rpb246OnJlYWRIVFRQTWVzc2FnZSgpCit7CisgICAgU3RyaW5nIGZhaWx1cmVS
ZWFzb247CisgICAgUmVmUHRyPEhUVFBSZXF1ZXN0PiByZXF1ZXN0ID0gSFRUUFJlcXVlc3Q6OnBh
cnNlSFRUUFJlcXVlc3RGcm9tQnVmZmVyKG1fYnVmZmVyZWREYXRhLmRhdGEoKSwgbV9idWZmZXJl
ZERhdGEuc2l6ZSgpLCBmYWlsdXJlUmVhc29uKTsKKyAgICBpZiAoIXJlcXVlc3QpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIEFzc3VtZSBhbGwgdGhlIGlucHV0IGhhcyBiZWVuIHJlYWQgaWYg
d2UgYXJlIHJlYWRpbmcgYW4gSFRUUCBSZXF1ZXN0LgorICAgIG1fYnVmZmVyZWREYXRhLmNsZWFy
KCk7CisKKyAgICAvLyBJZiB0aGlzIGlzIGEgV2ViU29ja2V0IHJlcXVlc3QsIHBlcmZvcm0gdGhl
IFdlYlNvY2tldCBIYW5kc2hha2UuCisgICAgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycyA9
IHJlcXVlc3QtPmhlYWRlckZpZWxkcygpOworICAgIFN0cmluZyB1cGdyYWRlSGVhZGVyVmFsdWUg
PSBoZWFkZXJzLmdldCgiVXBncmFkZSIpOworICAgIGlmICh1cGdyYWRlSGVhZGVyVmFsdWUgPT0g
IndlYnNvY2tldCIpIHsKKyAgICAgICAgdXBncmFkZVRvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlv
bihyZXF1ZXN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodXBncmFkZUhlYWRl
clZhbHVlID09ICJXZWJTb2NrZXQiKQorICAgICAgICBMT0dfRVJST1IoIldlYlNvY2tldCBwcm90
b2NvbCB2ZXJzaW9uIDwgSHliaS0xMCBub3Qgc3VwcG9ydGVkLiBVcGdyYWRlIHlvdXIgY2xpZW50
LiIpOworCisgICAgLy8gT3RoZXJ3aXNlLCB0aGlzIGlzIGFuIEhUVFAgUmVxdWVzdCB3ZSBkb24n
dCBrbm93IGhvdyB0byBkZWFsIHdpdGguCisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVVbnJlY29n
bml6ZWRIVFRQUmVxdWVzdCh0aGlzLCByZXF1ZXN0KTsKK30KKwordm9pZCBXZWJTb2NrZXRTZXJ2
ZXJDb25uZWN0aW9uOjp1cGdyYWRlVG9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKFBhc3NSZWZQ
dHI8SFRUUFJlcXVlc3Q+IHJlcXVlc3QpCit7CisgICAgQVNTRVJUKHJlcXVlc3QpOworICAgIEFT
U0VSVChtX21vZGUgPT0gSFRUUCk7CisgICAgbV9tb2RlID0gV2ViU29ja2V0OworICAgIFJlZlB0
cjxIVFRQUmVxdWVzdD4gcHJvdGVjdGVkUmVxdWVzdChyZXF1ZXN0KTsKKworICAgIC8vIEFzayB0
aGUgY2xpZW50IGlmIHdlIHNob3VsZCB1cGdyYWRlIGZvciB0aGlzIG9yIG5vdC4KKyAgICBpZiAo
IW1fY2xpZW50LT5kaWRSZWNlaXZlV2ViU29ja2V0VXBncmFkZUhUVFBSZXF1ZXN0KHRoaXMsIHBy
b3RlY3RlZFJlcXVlc3QpKSB7CisgICAgICAgIHNodXRkb3duTm93KCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBCdWlsZCBhbmQgc2VuZCB0aGUgV2ViU29ja2V0IGhhbmRzaGFr
ZSByZXNwb25zZS4KKyAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiByZXF1ZXN0SGVhZGVycyA9IHBy
b3RlY3RlZFJlcXVlc3QtPmhlYWRlckZpZWxkcygpOworICAgIFN0cmluZyBhY2NlcHQgPSBXZWJT
b2NrZXRIYW5kc2hha2U6OmdldEV4cGVjdGVkV2ViU29ja2V0QWNjZXB0KHJlcXVlc3RIZWFkZXJz
LmdldCgiU2VjLVdlYlNvY2tldC1LZXkiKSk7CisgICAgSFRUUEhlYWRlck1hcCByZXNwb25zZUhl
YWRlcnM7CisgICAgcmVzcG9uc2VIZWFkZXJzLmFkZCgiVXBncmFkZSIsIHJlcXVlc3RIZWFkZXJz
LmdldCgiVXBncmFkZSIpKTsKKyAgICByZXNwb25zZUhlYWRlcnMuYWRkKCJDb25uZWN0aW9uIiwg
cmVxdWVzdEhlYWRlcnMuZ2V0KCJDb25uZWN0aW9uIikpOworICAgIHJlc3BvbnNlSGVhZGVycy5h
ZGQoIlNlYy1XZWJTb2NrZXQtQWNjZXB0IiwgYWNjZXB0KTsKKworICAgIHNlbmRIVFRQUmVzcG9u
c2VIZWFkZXIoMTAxLCAiV2ViU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZSIsIHJlc3BvbnNlSGVh
ZGVycyk7CisKKyAgICBtX2NsaWVudC0+ZGlkRXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbih0
aGlzLCBwcm90ZWN0ZWRSZXF1ZXN0KTsKK30KKwordm9pZCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0
aW9uOjpyZWFkV2ViU29ja2V0RnJhbWVzKCkKK3sKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAg
ICBib29sIGRpZFJlYWRPbmVGcmFtZSA9IHJlYWRXZWJTb2NrZXRGcmFtZSgpOworICAgICAgICBp
ZiAoIWRpZFJlYWRPbmVGcmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAobV9i
dWZmZXJlZERhdGEuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiti
b29sIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OnJlYWRXZWJTb2NrZXRGcmFtZSgpCit7Cisg
ICAgV2ViU29ja2V0RnJhbWUgZnJhbWU7CisgICAgY29uc3QgY2hhciogZnJhbWVFbmQ7CisgICAg
U3RyaW5nIGVycm9yU3RyaW5nOworICAgIFdlYlNvY2tldEZyYW1lOjpQYXJzZUZyYW1lUmVzdWx0
IHJlc3VsdCA9IFdlYlNvY2tldEZyYW1lOjpwYXJzZUZyYW1lKG1fYnVmZmVyZWREYXRhLmRhdGEo
KSwgbV9idWZmZXJlZERhdGEuc2l6ZSgpLCBmcmFtZSwgZnJhbWVFbmQsIGVycm9yU3RyaW5nKTsK
KworICAgIC8vIEluY29tcGxldGUgZnJhbWUuIFdhaXQgdG8gcmVjZWl2ZSBtb3JlIGRhdGEuCisg
ICAgaWYgKHJlc3VsdCA9PSBXZWJTb2NrZXRGcmFtZTo6RnJhbWVJbmNvbXBsZXRlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAocmVzdWx0ID09IFdlYlNvY2tldEZyYW1lOjpGcmFt
ZUVycm9yKSB7CisgICAgICAgIHNodXRkb3duTm93KCk7CisgICAgfSBlbHNlIGlmIChmcmFtZS5v
cENvZGUgPT0gV2ViU29ja2V0RnJhbWU6Ok9wQ29kZVRleHQpIHsKKyAgICAgICAgLy8gRGVsZWdh
dGUgVGV4dCBmcmFtZXMgdG8gb3VyIGNsaWVudC4KKyAgICAgICAgU3RyaW5nIG1zZyA9IFN0cmlu
Zzo6ZnJvbVVURjgoZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCk7CisgICAgICAg
IG1fY2xpZW50LT5kaWRSZWNlaXZlV2ViU29ja2V0TWVzc2FnZSh0aGlzLCBtc2cpOworICAgIH0g
ZWxzZQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworCisgICAgLy8gUmVtb3ZlIHRoZSBmcmFt
ZSBmcm9tIG91ciBidWZmZXIuCisgICAgbV9idWZmZXJlZERhdGEucmVtb3ZlKDAsIGZyYW1lRW5k
IC0gbV9idWZmZXJlZERhdGEuZGF0YSgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9CisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlv
bi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRT
ZXJ2ZXJDb25uZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWM0YjVjMGM3YjY5NTg4OTc5ZmMzYWZmMzUw
YWU2NGI3ZGE4Nzg5YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5oCkBAIC0wLDAgKzEs
OTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb25faAorI2RlZmluZSBXZWJT
b2NrZXRTZXJ2ZXJDb25uZWN0aW9uX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKQor
CisjaW5jbHVkZSA8V2ViQ29yZS9Tb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK2NsYXNzIEhUVFBIZWFkZXJNYXA7CitjbGFzcyBIVFRQUmVxdWVzdDsKK2Ns
YXNzIFNvY2tldFN0cmVhbUhhbmRsZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFdlYlNvY2tldFNlcnZlcjsKK2NsYXNzIFdlYlNvY2tldFNlcnZlckNsaWVudDsKKworY2xhc3Mg
V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbiA6IHB1YmxpYyBXZWJDb3JlOjpTb2NrZXRTdHJlYW1I
YW5kbGVDbGllbnQgeworcHVibGljOgorICAgIGVudW0gV2ViU29ja2V0U2VydmVyTW9kZSB7IEhU
VFAsIFdlYlNvY2tldCB9OworICAgIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24oUGFzc1JlZlB0
cjxXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU+LCBXZWJTb2NrZXRTZXJ2ZXJDbGllbnQqLCBX
ZWJTb2NrZXRTZXJ2ZXIqKTsKKyAgICB2aXJ0dWFsIH5XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9u
KCk7CisKKyAgICB1bnNpZ25lZCBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlm
aWVyOyB9CisgICAgdm9pZCBzZXRJZGVudGlmaWVyKHVuc2lnbmVkIGlkKSB7IG1faWRlbnRpZmll
ciA9IGlkOyB9CisKKyAgICAvLyBTZW5kaW5nIGRhdGEgb3ZlciB0aGUgY29ubmVjdGlvbi4KKyAg
ICB2b2lkIHNlbmRXZWJTb2NrZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAg
dm9pZCBzZW5kSFRUUFJlc3BvbnNlSGVhZGVyKGludCBzdGF0dXNDb2RlLCBjb25zdCBTdHJpbmcm
IHN0YXR1c1RleHQsIGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmIGhlYWRlckZpZWxkcyk7
CisgICAgdm9pZCBzZW5kUmF3RGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsK
KworICAgIC8vIFRlcm1pbmF0aW5nIHRoZSBjb25uZWN0aW9uLgorICAgIHZvaWQgc2h1dGRvd25O
b3coKTsKKyAgICB2b2lkIHNodXRkb3duQWZ0ZXJTZW5kT3JOb3coKTsKKworICAgIC8vIFNvY2tl
dFN0cmVhbUhhbmRsZUNsaWVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgZGlk
Q2xvc2VTb2NrZXRTdHJlYW0oV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlKik7CisgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVTb2NrZXRTdHJlYW1EYXRhKFdlYkNvcmU6OlNvY2tldFN0cmVh
bUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRGYWlsU29ja2V0U3RyZWFtKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZSosIGNvbnN0
IFdlYkNvcmU6OlNvY2tldFN0cmVhbUVycm9yJik7CisKK3ByaXZhdGU6CisgICAgLy8gSFRUUCBN
b2RlLgorICAgIHZvaWQgcmVhZEhUVFBNZXNzYWdlKCk7CisKKyAgICAvLyBXZWJTb2NrZXQgTW9k
ZS4KKyAgICB2b2lkIHVwZ3JhZGVUb1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24oUGFzc1JlZlB0
cjxXZWJDb3JlOjpIVFRQUmVxdWVzdD4pOworICAgIHZvaWQgcmVhZFdlYlNvY2tldEZyYW1lcygp
OworICAgIGJvb2wgcmVhZFdlYlNvY2tldEZyYW1lKCk7CisKK3Byb3RlY3RlZDoKKyAgICB1bnNp
Z25lZCBtX2lkZW50aWZpZXI7CisgICAgVmVjdG9yPGNoYXI+IG1fYnVmZmVyZWREYXRhOworICAg
IFdlYlNvY2tldFNlcnZlck1vZGUgbV9tb2RlOworICAgIFJlZlB0cjxXZWJDb3JlOjpTb2NrZXRT
dHJlYW1IYW5kbGU+IG1fc29ja2V0OworICAgIFdlYlNvY2tldFNlcnZlciogbV9zZXJ2ZXI7Cisg
ICAgV2ViU29ja2V0U2VydmVyQ2xpZW50KiBtX2NsaWVudDsKK307CisKK30KKworI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKQorCisjZW5kaWYgLy8gV2ViU29ja2V0U2VydmVyQ29u
bmVjdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9y
U2VydmVyL3F0L1dlYlNvY2tldFNlcnZlclF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9JbnNwZWN0b3JTZXJ2ZXIvcXQvV2ViU29ja2V0U2VydmVyUXQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQx
ZWM1MjZlOGNjNGQxZmQwMGI5YmMyY2IzMjBiODJmNmI3Mzc2OTUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYlNvY2tldFNl
cnZlclF0LmNwcApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViU29ja2V0U2VydmVyUXQuaCIKKworI2luY2x1ZGUg
IldlYlNvY2tldFNlcnZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU29ja2V0U3RyZWFtSGFuZGxl
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFdlYlNvY2tldFNlcnZlcjo6cGxhdGZv
cm1Jbml0aWFsaXplKCkKK3sKKyAgICBtX3RjcFNlcnZlckhhbmRsZXIgPSBhZG9wdFB0cihuZXcg
UXRUY3BTZXJ2ZXJIYW5kbGVyKHRoaXMpKTsKK30KKworYm9vbCBXZWJTb2NrZXRTZXJ2ZXI6OnBs
YXRmb3JtTGlzdGVuKGNvbnN0IFN0cmluZyYgYmluZEFkZHJlc3MsIHVuc2lnbmVkIHNob3J0IHBv
cnQpCit7CisgICAgcmV0dXJuIG1fdGNwU2VydmVySGFuZGxlci0+bGlzdGVuKGJpbmRBZGRyZXNz
LCBwb3J0KTsKK30KKwordm9pZCBXZWJTb2NrZXRTZXJ2ZXI6OnBsYXRmb3JtQ2xvc2UoKQorewor
ICAgIG1fdGNwU2VydmVySGFuZGxlci0+Y2xvc2UoKTsKK30KKworUXRUY3BTZXJ2ZXJIYW5kbGVy
OjpRdFRjcFNlcnZlckhhbmRsZXIoV2ViU29ja2V0U2VydmVyKiB3ZWJTb2NrZXRTZXJ2ZXIpCis6
IG1fd2ViU29ja2V0U2VydmVyKHdlYlNvY2tldFNlcnZlcikKK3sKKyAgICBjb25uZWN0KCZtX3Nl
cnZlclNvY2tldCwgU0lHTkFMKG5ld0Nvbm5lY3Rpb24oKSksIFNMT1QoaGFuZGxlTmV3Q29ubmVj
dGlvbigpKSk7Cit9CisKK3ZvaWQgUXRUY3BTZXJ2ZXJIYW5kbGVyOjpoYW5kbGVOZXdDb25uZWN0
aW9uKCkKK3sKKyAgICBRVGNwU29ja2V0KiBzb2NrZXQgPSBtX3NlcnZlclNvY2tldC5uZXh0UGVu
ZGluZ0Nvbm5lY3Rpb24oKTsKKyAgICBBU1NFUlQoc29ja2V0KTsKKyAgICBtX3dlYlNvY2tldFNl
cnZlci0+ZGlkQWNjZXB0Q29ubmVjdGlvbihTb2NrZXRTdHJlYW1IYW5kbGU6OmNyZWF0ZShzb2Nr
ZXQsIDApKTsKK30KKworYm9vbCBRdFRjcFNlcnZlckhhbmRsZXI6Omxpc3Rlbihjb25zdCBTdHJp
bmcmIGJpbmRBZGRyZXNzLCB1bnNpZ25lZCBzaG9ydCBwb3J0KQoreworICAgIEFTU0VSVCghYmlu
ZEFkZHJlc3MuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQocG9ydCk7CisgICAgYm9vbCBzdWNjZXNz
ID0gbV9zZXJ2ZXJTb2NrZXQubGlzdGVuKFFIb3N0QWRkcmVzcyhiaW5kQWRkcmVzcyksIHBvcnQp
OworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgTE9HX0VSUk9SKCJDYW4ndCBvcGVuIHNlcnZl
ciBzb2NrZXQgb24gJXM6JWQgWyVzXSIsIHFQcmludGFibGUoYmluZEFkZHJlc3MpLCBwb3J0LCBx
UHJpbnRhYmxlKG1fc2VydmVyU29ja2V0LmVycm9yU3RyaW5nKCkpKTsKKyAgICByZXR1cm4gc3Vj
Y2VzczsKK30KKwordm9pZCBRdFRjcFNlcnZlckhhbmRsZXI6OmNsb3NlKCkKK3sKKyAgICBtX3Nl
cnZlclNvY2tldC5jbG9zZSgpOworfQorCit9CisKKyNpbmNsdWRlICJtb2NfV2ViU29ja2V0U2Vy
dmVyUXQuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3Rv
clNlcnZlci9xdC9XZWJTb2NrZXRTZXJ2ZXJRdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0luc3BlY3RvclNlcnZlci9xdC9XZWJTb2NrZXRTZXJ2ZXJRdC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3ZTBm
MmY2MDk2ZjVhMjVlN2VjNWM5Nzg4ZGE2ODE2YWEwZWY2YzYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYlNvY2tldFNlcnZl
clF0LmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViU29ja2V0U2VydmVyUXRfaAorI2Rl
ZmluZSBXZWJTb2NrZXRTZXJ2ZXJRdF9oCisKKyNpbmNsdWRlIDxRVGNwU2VydmVyPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
V2ViU29ja2V0U2VydmVyOworCitjbGFzcyBRdFRjcFNlcnZlckhhbmRsZXIgOiBwdWJsaWMgUU9i
amVjdCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBRdFRjcFNlcnZlckhhbmRsZXIoV2Vi
U29ja2V0U2VydmVyKik7CisgICAgYm9vbCBsaXN0ZW4oY29uc3QgU3RyaW5nJiBiaW5kQWRkcmVz
cywgdW5zaWduZWQgc2hvcnQgcG9ydCk7CisgICAgdm9pZCBjbG9zZSgpOworCitwcml2YXRlIHNs
b3RzOgorICAgIHZvaWQgaGFuZGxlTmV3Q29ubmVjdGlvbigpOworCitwcml2YXRlOgorICAgIFFU
Y3BTZXJ2ZXIgbV9zZXJ2ZXJTb2NrZXQ7CisgICAgV2ViU29ja2V0U2VydmVyKiBtX3dlYlNvY2tl
dFNlcnZlcjsKK307CisKK30KKworI2VuZGlmIC8vIFdlYlNvY2tldFNlcnZlclF0X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpIGIvU291cmNlL1dlYktpdDIvV2ViS2l0
Mi5wcmkKaW5kZXggNjQ4ZjRkY2UzN2M3M2I5NTE5ZGZkNDlhYWZmOWRlNzBiNzc5NGJiOC4uMjRj
YzVhMjE2NGU2ZTZmYjkxZGQ2MTk3MGFiMGE2YzIwMjdjYzY3NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViS2l0Mi5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKQEAg
LTI3LDYgKzI3LDggQEAgSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJUi9VSVByb2Nl
c3MvQVBJL3F0IFwKICAgICAkJFNPVVJDRV9ESVIvVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uIFwK
ICAgICAkJFNPVVJDRV9ESVIvVUlQcm9jZXNzL0Rvd25sb2FkcyBcCisgICAgJCRTT1VSQ0VfRElS
L1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIgXAorICAgICQkU09VUkNFX0RJUi9VSVByb2Nlc3Mv
SW5zcGVjdG9yU2VydmVyL3F0IFwKICAgICAkJFNPVVJDRV9ESVIvVUlQcm9jZXNzL0xhdW5jaGVy
IFwKICAgICAkJFNPVVJDRV9ESVIvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMgXAogICAgICQkU09V
UkNFX0RJUi9VSVByb2Nlc3MvUGx1Z2lucyBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9j
b25maWcuaCBiL1NvdXJjZS9XZWJLaXQyL2NvbmZpZy5oCmluZGV4IDdkYjc2YzAyMDE4ZTc1YTc1
NDg4ZWI2ZmFkMmMxZjhhZDE5YzljZjUuLmZmMzhmMzAzYTU1NjBkNjJhYzY0OTYzNGJiNTM3ODYy
MmY2MzM2MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL2NvbmZpZy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL2NvbmZpZy5oCkBAIC0xMzUsMyArMTM1LDkgQEAgc3RhdGljIGNvbnN0IHR5cGUm
IG5hbWUoKSBcCiAjZW5kaWYKIAogI2RlZmluZSBQTFVHSU5fQVJDSElURUNUVVJFKEFSQ0gpIChk
ZWZpbmVkIFBMVUdJTl9BUkNISVRFQ1RVUkVfIyNBUkNIICYmIFBMVUdJTl9BUkNISVRFQ1RVUkVf
IyNBUkNIKQorCisjaWZuZGVmIEVOQUJMRV9JTlNQRUNUT1JfU0VSVkVSCisjaWYgUExBVEZPUk0o
UVQpCisjZGVmaW5lIEVOQUJMRV9JTlNQRUNUT1JfU0VSVkVSIDEKKyNlbmRpZgorI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135097</attachid>
            <date>2012-04-02 07:33:55 -0700</date>
            <delta_ts>2012-04-03 03:34:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73093-20120402163130.patch</filename>
            <type>text/plain</type>
            <size>42391</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDNhOTBlNmM2MWZlNjNj
NjRlNDBiNDJlYTI3MWZjMDRkZGEwN2M1My4uNDk2NDQ3ZWRiYzc0MmYxYjlmOTAzZWUxZTBiN2Jk
OGMzN2UwNTU2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAzLTI5ICBKb3Nl
cGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+IGFuZCBKb2NlbHluIFR1cmNvdHRlICA8
am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CisKKyAgICAgICAgQWRkIGEgR2VuZXJpYyBXZWJT
b2NrZXQgU2VydmVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzMwOTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBbGxvdyBTb2NrZXRTdHJlYW1IYW5kbGUgZm9yIHRoZSBRdCBwb3J0IHRvIHRha2UgYW4g
ZXhpc3RpbmcgUVRjcFNvY2tldCBpbiBpdHMgY29uc3RydWN0b3IuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL3F0L1NvY2tldFN0cmVhbUhhbmRsZS5oOgorICAgICAgICAoV2ViQ29yZTo6
U29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGUpOgorICAgICAgICAoU29ja2V0U3RyZWFtSGFuZGxl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3F0L1NvY2tldFN0cmVhbUhhbmRsZVByaXZh
dGUuaDoKKyAgICAgICAgKFNvY2tldFN0cmVhbUhhbmRsZVByaXZhdGUpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvcXQvU29ja2V0U3RyZWFtSGFuZGxlUXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZTo6U29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0
ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhh
bmRsZVByaXZhdGU6OmluaXRDb25uZWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRT
dHJlYW1IYW5kbGVQcml2YXRlOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZSk6CisKIDIwMTItMDQtMDEgIEpvY2VseW4gVHVy
Y290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4KIAogICAgICAgICBFeHBvc2UgcmV1
c2FibGUgV2ViU29ja2V0IGNvZGUgZm9yIFdlYlNvY2tldFNlcnZlci4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA3
MjY4MjFkMDk3NDVmYjgzOTA3YmIxNTQwYjZkOWM5NjkxNDY4MzAxLi5lMjkwYjIzYzU4M2M2ZmRk
ODUxMTljN2Y4Mzk1ZTc2MmE1ZTg2NTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTYgQEAKKzIw
MTItMDMtMjkgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4gYW5kIEpvY2Vs
eW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4KKworICAgICAgICBBZGQg
YSBHZW5lcmljIFdlYlNvY2tldCBTZXJ2ZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03MzA5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoZSBJbnNwZWN0b3IgU2VydmVyIHdpbGwgYmUgYSBXZWJTb2Nr
ZXQgU2VydmVyIHRoYXQgYWxzbyByZXNwb25kcyB0bworICAgICAgICBub24tV2ViU29ja2V0LVVw
Z3JhZGUgSFRUUCBSZXF1ZXN0cy4gVGhpcyBpcyBhIGdlbmVyaWMgV2ViU29ja2V0IHNlcnZlcgor
ICAgICAgICB0aGF0IHBhc3NlcyBvbiB3aGF0IGl0IGRvZXNuJ3Qga25vdyBvbiB0byBpdHMgY2xp
ZW50IGZvciBleHRlbmRlZAorICAgICAgICBmdW5jdGlvbmFsaXR5LiBUaGlzIGNvZGUgaXMgd3Jh
cHBlZCBpbiBhIG5ldyBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikgZmxhZy4KKworICAgICAgICBU
aGVyZSBhcmUgbm8gdGVzdHMgeWV0IGZvciBhIGJ1aWx0LWluIFdlYlNvY2tldCBzZXJ2ZXIuCisg
ICAgICAgIFRoaXMgd2lsbCBiZSBjb3ZlcmVkIGJ5IEFQSSBsZXZlbCB0ZXN0cyBpbiBhIGxhdGVy
IHBhdGNoLgorCisgICAgICAgICogVGFyZ2V0LnByaToKKworICAgICAgICAgIFdlYlNvY2tldFNl
cnZlciBpcyBhIHNpbXBsZSBzZXJ2ZXIuIENhbGxpbmcgbGlzdGVuLCBvciBjbG9zZSwKKyAgICAg
ICAgICBtdWx0aXBsZSB0aW1lcyBpcyBzYWZlLiBTdWJjbGFzc2luZyBpcyBleHBlY3RlZC4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRTZXJ2
ZXI6OldlYlNvY2tldFNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFNlcnZlcjo6
fldlYlNvY2tldFNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFNlcnZlcjo6bGlz
dGVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0U2VydmVyOjpjbG9zZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlNvY2tldFNlcnZlcjo6ZGlkQWNjZXB0Q29ubmVjdGlvbik6CisgICAgICAg
IChXZWJLaXQ6OldlYlNvY2tldFNlcnZlcjo6ZGlkQ2xvc2VXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0
aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZl
ci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYlNvY2tldFNlcnZlcik6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3RvclNlcnZl
ci9XZWJTb2NrZXRTZXJ2ZXJDbGllbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJTb2NrZXRTZXJ2ZXJDbGllbnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTb2NrZXRTZXJ2ZXJDbGllbnQ6On5XZWJTb2NrZXRTZXJ2ZXJDbGllbnQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRTZXJ2ZXJDbGllbnQ6OmRpZFJlY2VpdmVVbnJl
Y29nbml6ZWRIVFRQUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFNlcnZlckNs
aWVudDo6ZGlkUmVjZWl2ZVdlYlNvY2tldFVwZ3JhZGVIVFRQUmVxdWVzdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNvY2tldFNlcnZlckNsaWVudDo6ZGlkRXN0YWJsaXNoV2ViU29ja2V0Q29ubmVj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFNlcnZlckNsaWVudDo6ZGlkUmVjZWl2
ZVdlYlNvY2tldE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRTZXJ2ZXJDbGll
bnQ6OmRpZENsb3NlV2ViU29ja2V0Q29ubmVjdGlvbik6CisKKyAgICAgICAgICBFYWNoIFdlYlNv
Y2tldENvbm5lY3Rpb246CisKKyAgICAgICAgICAgLSBQYXNzZXMgdW5rbm93biBIVFRQIFJlcXVl
c3RzIHRvIHRoZSBzZXJ2ZXIncyBjbGllbnQuCisgICAgICAgICAgIC0gSGFuZGxlcyBXZWJTb2Nr
ZXQgVXBncmFkZSBSZXF1ZXN0cy4KKyAgICAgICAgICAgICAtIEZpcnN0IGFzayB0aGUgY2xpZW50
IGlmIGl0IGlzIG9rYXkuCisgICAgICAgICAgICAgLSBMYXRlciBub3RpZnkgdGhlIGNsaWVudCBh
Ym91dCBhIHN1Y2Nlc3MuCisgICAgICAgICAgIC0gT25jZSB1cGdyYWRlZCB0aGUgY29ubmVjdGlv
biBwYXJzZXMgYW5kIHBhc3NlcyBXZWJTb2NrZXQKKyAgICAgICAgICAgICBmcmFtZXMgdG8gdGhl
IGNsaWVudC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0
U2VydmVyQ29ubmVjdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6V2ViU29ja2V0U2VydmVyQ29ubmVj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246On5XZWJT
b2NrZXRTZXJ2ZXJDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0U2VydmVy
Q29ubmVjdGlvbjo6c2h1dGRvd25Ob3cpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRTZXJ2
ZXJDb25uZWN0aW9uOjpzaHV0ZG93bkFmdGVyU2VuZE9yTm93KTogbWVhbnQgdG8gc2h1dGRvd24g
YWZ0ZXIgYW4gSFRUUCByZXNwb25zZS4gRW5zdXJlIGFsbCBwbGF0Zm9ybXMgd29yayBhcyBleHBl
Y3RlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6c2VuZFdl
YlNvY2tldE1lc3NhZ2UpOiBzZW5kIGEgdGV4dCBtZXNzYWdlIChXZWJTb2NrZXQgbWVzc2FnZSkg
b3ZlciB0aGUgY29ubmVjdGlvbi4KKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0U2VydmVyQ29u
bmVjdGlvbjo6c2VuZEhUVFBSZXNwb25zZUhlYWRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlNv
Y2tldFNlcnZlckNvbm5lY3Rpb246OnNlbmRSYXdEYXRhKTogc2VuZCByYXcgZGF0YSAoSFRUUCBt
ZXNzYWdlKSBvdmVyIHRoZSBjb25uZWN0aW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRT
ZXJ2ZXJDb25uZWN0aW9uOjpkaWRDbG9zZVNvY2tldFN0cmVhbSk6IGhhbmRsZSBzb2NrZXQgY2xv
c2luZyBzY2VuYXJpb3MuCisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rp
b246OmRpZFJlY2VpdmVTb2NrZXRTdHJlYW1EYXRhKTogcGFyc2UgdGhlIGluY29taW5nIGRhdGEg
aW4gSFRUUCAvIFdlYlNvY2tldCBtb2Rlcy4KKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0U2Vy
dmVyQ29ubmVjdGlvbjo6ZGlkRmFpbFNvY2tldFN0cmVhbSk6IGxvZyBlcnJvcnMuCisgICAgICAg
IChXZWJLaXQ6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OnJlYWRIVFRQTWVzc2FnZSk6IHdo
ZW4gc3RhcnRpbmcsIGEgd2ViIHNvY2tldCBjb25uZWN0aW9uIHJlYWRzIGFuIEhUVFAgbWVzc2Fn
ZS4KKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6dXBncmFkZVRv
V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFNl
cnZlckNvbm5lY3Rpb246OnJlYWRXZWJTb2NrZXRGcmFtZXMpOiBwYXJzZSBvdXIgYnVmZmVyIGZv
ciBhcyBtYW55IGZyYW1lcyBhcyBwb3NzaWJsZS4KKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0
U2VydmVyQ29ubmVjdGlvbjo6cmVhZFdlYlNvY2tldEZyYW1lKTogcGFyc2UgYW4gaW5kaXZpZHVh
bCBmcmFtZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNl
cnZlckNvbm5lY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6aWRlbnRpZmllcik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OnNldElkZW50aWZpZXIpOgorCisgICAg
ICAgICAgUXQgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
SW5zcGVjdG9yU2VydmVyL3F0L1dlYlNvY2tldFNlcnZlclF0LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRTZXJ2ZXI6OnBsYXRmb3JtSW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFNlcnZlcjo6cGxhdGZvcm1MaXN0
ZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRTZXJ2ZXI6OnBsYXRmb3JtQ2xvc2UpOgor
ICAgICAgICAoV2ViS2l0OjpRdFRjcFNlcnZlckhhbmRsZXI6OlF0VGNwU2VydmVySGFuZGxlcik6
CisgICAgICAgIChXZWJLaXQ6OlF0VGNwU2VydmVySGFuZGxlcjo6aGFuZGxlTmV3Q29ubmVjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OlF0VGNwU2VydmVySGFuZGxlcjo6bGlzdGVuKToKKyAgICAg
ICAgKFdlYktpdDo6UXRUY3BTZXJ2ZXJIYW5kbGVyOjpjbG9zZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0luc3BlY3RvclNlcnZlci9xdC9XZWJTb2NrZXRTZXJ2ZXJRdC5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdCk6CisgICAgICAgIChRdFRjcFNlcnZlckhhbmRsZXIpOgorCisgICAgICAgICog
V2ViS2l0Mi5wcmk6CisgICAgICAgICogY29uZmlnLmg6IEFkZCBFTkFCTEUoSU5TUEVDVE9SX1NF
UlZFUikgZm9yIFdlYktpdDIuCisKIDIwMTItMDMtMjggIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVy
c2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYSBjcmFzaCBhbmQgYW4gYXNzZXJ0aW9uIHdo
ZW4gcmVjb3ZlcmluZyBmcm9tIGEgd2ViIHByb2Nlc3MgY3Jhc2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvU29ja2V0U3RyZWFtSGFuZGxlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1NvY2tldFN0cmVhbUhhbmRsZS5oCmluZGV4
IGU3MjUzNDQwODNjMGNmNmMzNGUzM2U1MWIwNzM2MDQ2MjY3NTc1YTcuLjllNmVhYzBmYzA1MDll
ZDBjNDgwMjU2ZTU1OTdlODU0NGExZTc0ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvcXQvU29ja2V0U3RyZWFtSGFuZGxlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9xdC9Tb2NrZXRTdHJlYW1IYW5kbGUuaApAQCAtNDIsNiArNDIs
MTAgQEAKICNlcnJvciBUaGlzIHNob3VsZCBvbmx5IGJlIGJ1aWx0IG9uIFF0CiAjZW5kaWYKIAor
UVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRVGNwU29ja2V0OworUVRfRU5EX05BTUVTUEFDRQor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZTsKQEAgLTUyLDYgKzU2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFNvY2tl
dFN0cmVhbUhhbmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNvY2tldFN0cmVhbUhhbmRsZT4sIHB1
YmxpYyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gY3JlYXRlKGNvbnN0IEtVUkwmIHVybCwg
U29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50KiBjbGllbnQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
b2NrZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShRVGNwU29ja2V0KiBzb2NrZXQsIFNvY2tl
dFN0cmVhbUhhbmRsZUNsaWVudCogY2xpZW50KSB7IHJldHVybiBhZG9wdFJlZihuZXcgU29ja2V0
U3RyZWFtSGFuZGxlKHNvY2tldCwgY2xpZW50KSk7IH0KIAogICAgICAgICB2aXJ0dWFsIH5Tb2Nr
ZXRTdHJlYW1IYW5kbGUoKTsKIApAQCAtNjEsNiArNjYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICBwcml2YXRlOgogICAgICAgICBTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgS1VSTCYs
IFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCopOworICAgICAgICBTb2NrZXRTdHJlYW1IYW5kbGUo
UVRjcFNvY2tldCosIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCopOwogCiAgICAgICAgIC8vIE5v
IGF1dGhlbnRpY2F0aW9uIGZvciBzdHJlYW1zIHBlciBzZSwgYnV0IHByb3h5IG1heSBhc2sgZm9y
IGNyZWRlbnRpYWxzLgogICAgICAgICB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9Tb2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1NvY2tldFN0cmVhbUhhbmRsZVBy
aXZhdGUuaAppbmRleCBkMDc0ZjQyNzIxOWYwMjE4NjQ4M2ZmYmM0ZWE5YjRkZGI4Y2FhN2ZjLi4z
MDE5Mjc5MDQ5OTI3Y2Q5ZjViNDJiYzMzMmExYmIzMDdiMTdiNGJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1NvY2tldFN0cmVhbUhhbmRsZVByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1NvY2tldFN0cmVhbUhh
bmRsZVByaXZhdGUuaApAQCAtNDcsNiArNDcsNyBAQCBjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVQ
cml2YXRlIDogcHVibGljIFFPYmplY3QgewogICAgIFFfT0JKRUNUCiBwdWJsaWM6CiAgICAgU29j
a2V0U3RyZWFtSGFuZGxlUHJpdmF0ZShTb2NrZXRTdHJlYW1IYW5kbGUqLCBjb25zdCBLVVJMJik7
CisgICAgU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZShTb2NrZXRTdHJlYW1IYW5kbGUqLCBRVGNw
U29ja2V0Kik7CiAgICAgflNvY2tldFN0cmVhbUhhbmRsZVByaXZhdGUoKTsKIAogcHVibGljIHNs
b3RzOgpAQCAtNjMsNiArNjQsNyBAQCBwdWJsaWMgc2xvdHM6CiAgICAgdm9pZCBzb2NrZXRTc2xF
cnJvcnMoY29uc3QgUUxpc3Q8UVNzbEVycm9yPiYpOwogI2VuZGlmCiBwdWJsaWM6CisgICAgdm9p
ZCBpbml0Q29ubmVjdGlvbnMoKTsKICAgICBRVGNwU29ja2V0KiBtX3NvY2tldDsKICAgICBTb2Nr
ZXRTdHJlYW1IYW5kbGUqIG1fc3RyZWFtSGFuZGxlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvU29ja2V0U3RyZWFtSGFuZGxlUXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9Tb2NrZXRTdHJlYW1IYW5kbGVRdC5jcHAK
aW5kZXggZDQ2MzkwOWU3NWQwZGQwMmIxMGVlY2IwZWFiYWM2MDliZTFiNWI5OS4uMjgxMDFhNjUw
ZjA1ZDc5YTU3NDJkYTRmMzI2NmZkZjhiNjk5ZGU5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9xdC9Tb2NrZXRTdHJlYW1IYW5kbGVRdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9Tb2NrZXRTdHJlYW1IYW5kbGVRdC5jcHAK
QEAgLTQwLDcgKzQwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Tb2NrZXRTdHJlYW1I
YW5kbGVQcml2YXRlOjpTb2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlKFNvY2tldFN0cmVhbUhhbmRs
ZSogc3RyZWFtSGFuZGxlLCBjb25zdCBLVVJMJiB1cmwpIDogUU9iamVjdCgpCitTb2NrZXRTdHJl
YW1IYW5kbGVQcml2YXRlOjpTb2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlKFNvY2tldFN0cmVhbUhh
bmRsZSogc3RyZWFtSGFuZGxlLCBjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAgbV9zdHJlYW1IYW5k
bGUgPSBzdHJlYW1IYW5kbGU7CiAgICAgbV9zb2NrZXQgPSAwOwpAQCAtNTYsMTIgKzU2LDcgQEAg
U29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZTo6U29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZShTb2Nr
ZXRTdHJlYW1IYW5kbGUqIHN0cmVhbUgKICAgICBpZiAoIW1fc29ja2V0KQogICAgICAgICByZXR1
cm47CiAKLSAgICBjb25uZWN0KG1fc29ja2V0LCBTSUdOQUwoY29ubmVjdGVkKCkpLCB0aGlzLCBT
TE9UKHNvY2tldENvbm5lY3RlZCgpKSk7Ci0gICAgY29ubmVjdChtX3NvY2tldCwgU0lHTkFMKHJl
YWR5UmVhZCgpKSwgdGhpcywgU0xPVChzb2NrZXRSZWFkeVJlYWQoKSkpOwotICAgIGNvbm5lY3Qo
bV9zb2NrZXQsIFNJR05BTChkaXNjb25uZWN0ZWQoKSksIHRoaXMsIFNMT1Qoc29ja2V0Q2xvc2Vk
KCkpKTsKLSAgICBjb25uZWN0KG1fc29ja2V0LCBTSUdOQUwoZXJyb3IoUUFic3RyYWN0U29ja2V0
OjpTb2NrZXRFcnJvcikpLCB0aGlzLCBTTE9UKHNvY2tldEVycm9yKFFBYnN0cmFjdFNvY2tldDo6
U29ja2V0RXJyb3IpKSk7Ci0gICAgaWYgKGlzU2VjdXJlKQotICAgICAgICBjb25uZWN0KG1fc29j
a2V0LCBTSUdOQUwoc3NsRXJyb3JzKGNvbnN0IFFMaXN0PFFTc2xFcnJvcj4mKSksIHRoaXMsIFNM
T1Qoc29ja2V0U3NsRXJyb3JzKGNvbnN0IFFMaXN0PFFTc2xFcnJvcj4mKSkpOworICAgIGluaXRD
b25uZWN0aW9ucygpOwogCiAgICAgdW5zaWduZWQgaW50IHBvcnQgPSB1cmwuaGFzUG9ydCgpID8g
dXJsLnBvcnQoKSA6IChpc1NlY3VyZSA/IDQ0MyA6IDgwKTsKIApAQCAtNzQsMTEgKzY5LDM2IEBA
IFNvY2tldFN0cmVhbUhhbmRsZVByaXZhdGU6OlNvY2tldFN0cmVhbUhhbmRsZVByaXZhdGUoU29j
a2V0U3RyZWFtSGFuZGxlKiBzdHJlYW1ICiAgICAgICAgIG1fc29ja2V0LT5jb25uZWN0VG9Ib3N0
KGhvc3QsIHBvcnQpOwogfQogCitTb2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlOjpTb2NrZXRTdHJl
YW1IYW5kbGVQcml2YXRlKFNvY2tldFN0cmVhbUhhbmRsZSogc3RyZWFtSGFuZGxlLCBRVGNwU29j
a2V0KiBzb2NrZXQpCit7CisgICAgbV9zdHJlYW1IYW5kbGUgPSBzdHJlYW1IYW5kbGU7CisgICAg
bV9zb2NrZXQgPSBzb2NrZXQ7CisgICAgaW5pdENvbm5lY3Rpb25zKCk7Cit9CisKIFNvY2tldFN0
cmVhbUhhbmRsZVByaXZhdGU6On5Tb2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlKCkKIHsKICAgICBR
X0FTU0VSVCghKG1fc29ja2V0ICYmIG1fc29ja2V0LT5zdGF0ZSgpID09IFFBYnN0cmFjdFNvY2tl
dDo6Q29ubmVjdGVkU3RhdGUpKTsKIH0KIAordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVQcml2YXRl
Ojppbml0Q29ubmVjdGlvbnMoKQoreworICAgIGNvbm5lY3QobV9zb2NrZXQsIFNJR05BTChjb25u
ZWN0ZWQoKSksIHRoaXMsIFNMT1Qoc29ja2V0Q29ubmVjdGVkKCkpKTsKKyAgICBjb25uZWN0KG1f
c29ja2V0LCBTSUdOQUwocmVhZHlSZWFkKCkpLCB0aGlzLCBTTE9UKHNvY2tldFJlYWR5UmVhZCgp
KSk7CisgICAgY29ubmVjdChtX3NvY2tldCwgU0lHTkFMKGRpc2Nvbm5lY3RlZCgpKSwgdGhpcywg
U0xPVChzb2NrZXRDbG9zZWQoKSkpOworICAgIGNvbm5lY3QobV9zb2NrZXQsIFNJR05BTChlcnJv
cihRQWJzdHJhY3RTb2NrZXQ6OlNvY2tldEVycm9yKSksIHRoaXMsIFNMT1Qoc29ja2V0RXJyb3Io
UUFic3RyYWN0U29ja2V0OjpTb2NrZXRFcnJvcikpKTsKKyNpZm5kZWYgUVRfTk9fT1BFTlNTTAor
ICAgIGlmIChxb2JqZWN0X2Nhc3Q8UVNzbFNvY2tldCo+KG1fc29ja2V0KSkKKyAgICAgICAgY29u
bmVjdChtX3NvY2tldCwgU0lHTkFMKHNzbEVycm9ycyhjb25zdCBRTGlzdDxRU3NsRXJyb3I+Jikp
LCB0aGlzLCBTTE9UKHNvY2tldFNzbEVycm9ycyhjb25zdCBRTGlzdDxRU3NsRXJyb3I+JikpKTsK
KyNlbmRpZgorCisgICAgLy8gQ2hlY2sgZm9yIG1pc3NlZCBzaWduYWxzIGFuZCBjYWxsIHRoZSBz
bG90cyBhc3luY2hyb25vdXNseSB0byBhbGxvdyBhIGNsaWVudCB0byBiZSBzZXQgZmlyc3QuCisg
ICAgaWYgKG1fc29ja2V0LT5zdGF0ZSgpID49IFFBYnN0cmFjdFNvY2tldDo6Q29ubmVjdGVkU3Rh
dGUpCisgICAgICAgIFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2QodGhpcywgInNvY2tldENvbm5l
Y3RlZCIsIFF0OjpRdWV1ZWRDb25uZWN0aW9uKTsKKyAgICBpZiAobV9zb2NrZXQtPmJ5dGVzQXZh
aWxhYmxlKCkpCisgICAgICAgIFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2QodGhpcywgInNvY2tl
dFJlYWR5UmVhZCIsIFF0OjpRdWV1ZWRDb25uZWN0aW9uKTsKK30KKwogdm9pZCBTb2NrZXRTdHJl
YW1IYW5kbGVQcml2YXRlOjpzb2NrZXRDb25uZWN0ZWQoKQogewogICAgIGlmIChtX3N0cmVhbUhh
bmRsZSAmJiBtX3N0cmVhbUhhbmRsZS0+Y2xpZW50KCkpIHsKQEAgLTEwNiw3ICsxMjYsNyBAQCBp
bnQgU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZTo6c2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuKQogCiB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZVByaXZhdGU6OmNsb3NlKCkKIHsKLSAgICBp
ZiAobV9zdHJlYW1IYW5kbGUtPm1fc3RhdGUgPT0gU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6Q29u
bmVjdGluZykgeworICAgIGlmIChtX3N0cmVhbUhhbmRsZSAmJiBtX3N0cmVhbUhhbmRsZS0+bV9z
dGF0ZSA9PSBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpDb25uZWN0aW5nKSB7CiAgICAgICAgIG1f
c29ja2V0LT5hYm9ydCgpOwogICAgICAgICBtX3N0cmVhbUhhbmRsZS0+Y2xpZW50KCktPmRpZENs
b3NlU29ja2V0U3RyZWFtKG1fc3RyZWFtSGFuZGxlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTY2
LDYgKzE4NiwxMyBAQCBTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZShjb25z
dCBLVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudAogICAgIG1fcCA9IG5ldyBTb2Nr
ZXRTdHJlYW1IYW5kbGVQcml2YXRlKHRoaXMsIHVybCk7CiB9CiAKK1NvY2tldFN0cmVhbUhhbmRs
ZTo6U29ja2V0U3RyZWFtSGFuZGxlKFFUY3BTb2NrZXQqIHNvY2tldCwgU29ja2V0U3RyZWFtSGFu
ZGxlQ2xpZW50KiBjbGllbnQpCisgICAgOiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKEtVUkwoKSwg
Y2xpZW50KQoreworICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIG5ldyBj
bGllbnQgJXAiLCB0aGlzLCBtX2NsaWVudCk7CisgICAgbV9wID0gbmV3IFNvY2tldFN0cmVhbUhh
bmRsZVByaXZhdGUodGhpcywgc29ja2V0KTsKK30KKwogU29ja2V0U3RyZWFtSGFuZGxlOjp+U29j
a2V0U3RyZWFtSGFuZGxlKCkKIHsKICAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRs
ZSAlcCBkZWxldGUiLCB0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5w
cmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDE2ZmJhZDRhM2MzZjQ5ZGM3Yjc4
NTk3ZDhiNDE3NDBiYmY2ZTBjYTQuLjcwYzU4MjAzYzFjOTQ4ZGI4MWUyZjIxMTkwYjM1YWY3N2Fh
NDRiODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNl
L1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMjAyLDYgKzIwMiwxMCBAQCBIRUFERVJTICs9IFwKICAg
ICBVSVByb2Nlc3MvR2VuZXJpY0NhbGxiYWNrLmggXAogICAgIFVJUHJvY2Vzcy9HZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9HZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHkuaCBcCisgICAgVUlQcm9jZXNzL0luc3BlY3RvclNl
cnZlci9XZWJTb2NrZXRTZXJ2ZXIuaCBcCisgICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9X
ZWJTb2NrZXRTZXJ2ZXJDbGllbnQuaCBcCisgICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9X
ZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmggXAorICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2
ZXIvcXQvV2ViU29ja2V0U2VydmVyUXQuaCBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nl
c3NMYXVuY2hlci5oIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuaCBc
CiAgICAgVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oIFwKQEAgLTUzNyw2ICs1NDEsOSBA
QCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvRmluZEluZGljYXRvci5jcHAgXAogICAgIFVJ
UHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBcCiAg
ICAgVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eS5jcHAgXAorICAg
IFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyLmNwcCBcCisgICAgVUlQ
cm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmNwcCBcCisg
ICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9xdC9XZWJTb2NrZXRTZXJ2ZXJRdC5jcHAgXAog
ICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuY3BwIFwKICAgICBVSVByb2Nl
c3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIv
cXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xY2NkYmM4ZTZmMjQ3YjFjNmU3NWQyOGVhMzUwZmNiNmEwYjJkZDBmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2Nr
ZXRTZXJ2ZXIuY3BwCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKKworI2luY2x1ZGUgIldlYlNvY2tldFNlcnZlci5o
IgorCisjaW5jbHVkZSAiV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvU29ja2V0U3RyZWFtSGFuZGxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
KworI2lmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgIldlYlNvY2tldFNlcnZlclF0LmgiCisjZW5k
aWYKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitX
ZWJTb2NrZXRTZXJ2ZXI6OldlYlNvY2tldFNlcnZlcihXZWJTb2NrZXRTZXJ2ZXJDbGllbnQqIGNs
aWVudCkKKyAgICA6IG1fc3RhdGUoQ2xvc2VkKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorewor
ICAgIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOworfQorCitXZWJTb2NrZXRTZXJ2ZXI6On5XZWJTb2Nr
ZXRTZXJ2ZXIoKQoreworICAgIGNsb3NlKCk7Cit9CisKK2Jvb2wgV2ViU29ja2V0U2VydmVyOjps
aXN0ZW4oY29uc3QgU3RyaW5nJiBiaW5kQWRkcmVzcywgdW5zaWduZWQgc2hvcnQgcG9ydCkKK3sK
KyAgICBBU1NFUlQocG9ydCk7CisKKyAgICBpZiAobV9zdGF0ZSA9PSBMaXN0ZW5pbmcpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgaXNOb3dMaXN0ZW5pbmcgPSBwbGF0Zm9ybUxp
c3RlbihiaW5kQWRkcmVzcywgcG9ydCk7CisgICAgbV9zdGF0ZSA9IGlzTm93TGlzdGVuaW5nID8g
TGlzdGVuaW5nIDogQ2xvc2VkOworICAgIHJldHVybiBpc05vd0xpc3RlbmluZzsKK30KKwordm9p
ZCBXZWJTb2NrZXRTZXJ2ZXI6OmNsb3NlKCkKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBDbG9zZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIHBsYXRmb3JtQ2xvc2UoKTsKK30KKwordm9pZCBXZWJT
b2NrZXRTZXJ2ZXI6OmRpZEFjY2VwdENvbm5lY3Rpb24oUGFzc1JlZlB0cjxTb2NrZXRTdHJlYW1I
YW5kbGU+IHNvY2tldEhhbmRsZSkKK3sKKyAgICBtX2Nvbm5lY3Rpb25zLmFwcGVuZChhZG9wdFB0
cihuZXcgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbihzb2NrZXRIYW5kbGUsIG1fY2xpZW50LCB0
aGlzKSkpOworfQorCit2b2lkIFdlYlNvY2tldFNlcnZlcjo6ZGlkQ2xvc2VXZWJTb2NrZXRTZXJ2
ZXJDb25uZWN0aW9uKFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCit7Cisg
ICAgRGVxdWU8T3duUHRyPFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24+ID46Oml0ZXJhdG9yIGVu
ZCA9IG1fY29ubmVjdGlvbnMuZW5kKCk7CisgICAgZm9yIChEZXF1ZTxPd25QdHI8V2ViU29ja2V0
U2VydmVyQ29ubmVjdGlvbj4gPjo6aXRlcmF0b3IgaXQgPSBtX2Nvbm5lY3Rpb25zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQtPmdldCgpID09IGNvbm5lY3Rpb24p
IHsKKyAgICAgICAgICAgIG1fY29ubmVjdGlvbnMucmVtb3ZlKGl0KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
fQorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9TRVJWRVIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZlci5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kNjA4MjBlNDM0OGRhZTNjZjg1NTNlNDE0YzI2OGRhZjdhODZmYWQzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZl
ci9XZWJTb2NrZXRTZXJ2ZXIuaApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJTb2NrZXRT
ZXJ2ZXJfaAorI2RlZmluZSBXZWJTb2NrZXRTZXJ2ZXJfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9TRVJWRVIpCisKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShRVCkK
K25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgUXRUY3BTZXJ2ZXJIYW5kbGVyOworfQorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNvY2tldFN0cmVhbUhhbmRsZTsKK30KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlNvY2tldFNlcnZlckNsaWVudDsKK2NsYXNz
IFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb247CisKK2NsYXNzIFdlYlNvY2tldFNlcnZlciB7Citw
dWJsaWM6CisgICAgZW51bSBTZXJ2ZXJTdGF0ZSB7IENsb3NlZCwgTGlzdGVuaW5nIH07CisgICAg
V2ViU29ja2V0U2VydmVyKFdlYlNvY2tldFNlcnZlckNsaWVudCopOworICAgIHZpcnR1YWwgfldl
YlNvY2tldFNlcnZlcigpOworCisgICAgLy8gU2VydmVyIG9wZXJhdGlvbnMuCisgICAgYm9vbCBs
aXN0ZW4oY29uc3QgU3RyaW5nJiBiaW5kQWRkcmVzcywgdW5zaWduZWQgc2hvcnQgcG9ydCk7Cisg
ICAgdm9pZCBjbG9zZSgpOworCisgICAgdm9pZCBkaWRBY2NlcHRDb25uZWN0aW9uKFBhc3NSZWZQ
dHI8V2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlPik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBk
aWRDbG9zZVdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24oV2ViU29ja2V0U2VydmVyQ29ubmVjdGlv
biopOworCisgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKKyAgICBib29sIHBsYXRmb3Jt
TGlzdGVuKGNvbnN0IFN0cmluZyYgYmluZEFkZHJlc3MsIHVuc2lnbmVkIHNob3J0IHBvcnQpOwor
ICAgIHZvaWQgcGxhdGZvcm1DbG9zZSgpOworCisgICAgU2VydmVyU3RhdGUgbV9zdGF0ZTsKKyAg
ICBEZXF1ZTxPd25QdHI8V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbj4gPiBtX2Nvbm5lY3Rpb25z
OworICAgIFdlYlNvY2tldFNlcnZlckNsaWVudCogbV9jbGllbnQ7CisjaWYgUExBVEZPUk0oUVQp
CisgICAgT3duUHRyPFF0VGNwU2VydmVySGFuZGxlcj4gbV90Y3BTZXJ2ZXJIYW5kbGVyOworI2Vu
ZGlmCisgICAgZnJpZW5kIGNsYXNzIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb247Cit9OworCit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKKworI2VuZGlmIC8vIFdlYlNv
Y2tldFNlcnZlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVj
dG9yU2VydmVyL1dlYlNvY2tldFNlcnZlckNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDbGllbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
N2JlM2FiYjdmNjVkYWY1ZjMzMDkwYTY3NjNlOTMwMDA0ZjRmMWI0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2
ZXJDbGllbnQuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJTb2NrZXRTZXJ2ZXJDbGllbnRfaAorI2RlZmlu
ZSBXZWJTb2NrZXRTZXJ2ZXJDbGllbnRfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9TRVJWRVIp
CisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBIVFRQUmVxdWVzdDsKK30KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb247CisK
K2NsYXNzIFdlYlNvY2tldFNlcnZlckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2Vi
U29ja2V0U2VydmVyQ2xpZW50KCkgeyB9CisKKyAgICAvLyBSZWNlaXZlZCBhbiBIVFRQIHJlcXVl
c3QgYnV0IGRpZG4ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCBpdC4KKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZVVucmVjb2duaXplZEhUVFBSZXF1ZXN0KFdlYlNvY2tldFNlcnZlckNvbm5lY3Rp
b24qLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkhUVFBSZXF1ZXN0PikgeyB9CisKKyAgICAvLyBSZWNl
aXZlZCBhIFdlYlNvY2tldCBVcGdyYWRlIEhUVFAgcmVxdWVzdC4gQXNrIGlmIHdlIHNob3VsZCBo
YW5kbGUgaXQgYW5kIHVwZ3JhZGUuCisgICAgdmlydHVhbCBib29sIGRpZFJlY2VpdmVXZWJTb2Nr
ZXRVcGdyYWRlSFRUUFJlcXVlc3QoV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbiosIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6SFRUUFJlcXVlc3Q+KSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBFc3Rh
Ymxpc2hlZCBhIFdlYlNvY2tldCBDb25uZWN0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBkaWRFc3Rh
Ymxpc2hXZWJTb2NrZXRDb25uZWN0aW9uKFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qLCBQYXNz
UmVmUHRyPFdlYkNvcmU6OkhUVFBSZXF1ZXN0PikgeyB9CisKKyAgICAvLyBSZWNlaXZlZCBhIFdl
YlNvY2tldCBtZXNzYWdlLgorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlV2ViU29ja2V0TWVz
c2FnZShXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKiwgY29uc3QgU3RyaW5nJikgeyB9CisKKyAg
ICAvLyBXZWJTb2NrZXQgQ29ubmVjdGlvbiBjbG9zZWQuCisgICAgdmlydHVhbCB2b2lkIGRpZENs
b3NlV2ViU29ja2V0Q29ubmVjdGlvbihXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKikgeyB9Cit9
OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKKworI2VuZGlmIC8v
IFdlYlNvY2tldFNlcnZlckNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25u
ZWN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZmZiYmJlMzZhOGZjY2NhM2RhMzcyYWM1OWJmMjcxMjQ3
ODEyNGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3Bl
Y3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uLmNwcApAQCAtMCwwICsxLDI0NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKQor
CisjaW5jbHVkZSAiV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5oIgorCisjaW5jbHVkZSAiV2Vi
U29ja2V0U2VydmVyLmgiCisjaW5jbHVkZSAiV2ViU29ja2V0U2VydmVyQ2xpZW50LmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9IVFRQUmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVt
ZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NvY2tldFN0cmVhbUVycm9yLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9Tb2NrZXRTdHJlYW1IYW5kbGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1dlYlNv
Y2tldENoYW5uZWwuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1dlYlNvY2tldEhhbmRzaGFrZS5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKworV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6V2ViU29ja2V0U2VydmVyQ29ubmVjdGlv
bihQYXNzUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gc29ja2V0LCBXZWJTb2NrZXRTZXJ2ZXJD
bGllbnQqIGNsaWVudCwgV2ViU29ja2V0U2VydmVyKiBzZXJ2ZXIpCisgICAgOiBtX2lkZW50aWZp
ZXIoMCkKKyAgICAsIG1fbW9kZShIVFRQKQorICAgICwgbV9zb2NrZXQoc29ja2V0KQorICAgICwg
bV9zZXJ2ZXIoc2VydmVyKQorICAgICwgbV9jbGllbnQoY2xpZW50KQoreworICAgIG1fc29ja2V0
LT5zZXRDbGllbnQodGhpcyk7Cit9CisKK1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246On5XZWJT
b2NrZXRTZXJ2ZXJDb25uZWN0aW9uKCkKK3sKKyAgICBzaHV0ZG93bk5vdygpOworfQorCit2b2lk
IFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OnNodXRkb3duTm93KCkKK3sKKyAgICBpZiAoIW1f
c29ja2V0KQorICAgICAgICByZXR1cm47CisgICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4g
c29ja2V0ID0gbV9zb2NrZXQucmVsZWFzZSgpOworICAgIHNvY2tldC0+Y2xvc2UoKTsKK30KKwor
dm9pZCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpzaHV0ZG93bkFmdGVyU2VuZE9yTm93KCkK
K3sKKyAgICAvLyBJZiB0aGlzIEFTU0VSVCBoYXBwZW5zIG9uIGFueSBwbGF0Zm9ybSB0aGVuIHRo
ZWlyIFNvY2tldFN0cmVhbUhhbmRsZTo6c2VuZAorICAgIC8vIGZvbGxvd2VkIGJ5IGEgU29ja2V0
U3RyZWFtSGFuZGxlOjpjbG9zZSBpcyBub3QgZ3VhcmVudGVlZCB0byBoYXZlIHNlbnQgYWxsCisg
ICAgLy8gZGF0YS4gSWYgdGhpcyBoYXBwZW5zLCB3ZSBuZWVkIHRvIHNsaWdodGx5IGNoYW5nZSB0
aGUgZGVzaWduIHRvIGluY2x1ZGUgYQorICAgIC8vIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudDo6
ZGlkU2VuZCwgaGFuZGxlIGl0IGhlcmUsIGFuZCBhZGQgYW4gbV9zaHV0ZG93bkFmdGVyU2VuZAor
ICAgIC8vIHN0YXRlIG9uIHRoaXMgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi4KKyAgICBBU1NF
UlQoIW1fc29ja2V0LT5idWZmZXJlZEFtb3VudCgpKTsKKworICAgIHNodXRkb3duTm93KCk7Cit9
CisKK3ZvaWQgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6c2VuZFdlYlNvY2tldE1lc3NhZ2Uo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIENTdHJpbmcgcGF5bG9hZCA9IG1lc3NhZ2Uu
dXRmOCgpOworICAgIGNvbnN0IGJvb2wgZmluYWwgPSB0cnVlLCBjb21wcmVzcyA9IGZhbHNlLCBt
YXNrZWQgPSBmYWxzZTsKKyAgICBXZWJTb2NrZXRGcmFtZSBmcmFtZShXZWJTb2NrZXRGcmFtZTo6
T3BDb2RlVGV4dCwgZmluYWwsIGNvbXByZXNzLCBtYXNrZWQsIHBheWxvYWQuZGF0YSgpLCBwYXls
b2FkLmxlbmd0aCgpKTsKKworICAgIFZlY3RvcjxjaGFyPiBmcmFtZURhdGE7CisgICAgZnJhbWUu
bWFrZUZyYW1lRGF0YShmcmFtZURhdGEpOworCisgICAgbV9zb2NrZXQtPnNlbmQoZnJhbWVEYXRh
LmRhdGEoKSwgZnJhbWVEYXRhLnNpemUoKSk7Cit9CisKK3ZvaWQgV2ViU29ja2V0U2VydmVyQ29u
bmVjdGlvbjo6c2VuZEhUVFBSZXNwb25zZUhlYWRlcihpbnQgc3RhdHVzQ29kZSwgY29uc3QgU3Ry
aW5nJiBzdGF0dXNUZXh0LCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJGaWVsZHMpCit7Cisg
ICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCJIVFRQLzEuMSAi
KTsKKyAgICBidWlsZGVyLmFwcGVuZChTdHJpbmc6Om51bWJlcihzdGF0dXNDb2RlKSk7CisgICAg
YnVpbGRlci5hcHBlbmQoIiAiKTsKKyAgICBidWlsZGVyLmFwcGVuZChzdGF0dXNUZXh0KTsKKyAg
ICBidWlsZGVyLmFwcGVuZCgiXHJcbiIpOworICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGhlYWRlckZpZWxkcy5lbmQoKTsKKyAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVyRmllbGRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgICAgICBidWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICBidWlsZGVyLmFw
cGVuZCgiOiAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoaXQtPnNlY29uZCArICJcclxuIik7
CisgICAgfQorICAgIGJ1aWxkZXIuYXBwZW5kKCJcclxuIik7CisKKyAgICBDU3RyaW5nIGhlYWRl
ciA9IGJ1aWxkZXIudG9TdHJpbmcoKS5sYXRpbjEoKTsKKyAgICBtX3NvY2tldC0+c2VuZChoZWFk
ZXIuZGF0YSgpLCBoZWFkZXIubGVuZ3RoKCkpOworfQorCit2b2lkIFdlYlNvY2tldFNlcnZlckNv
bm5lY3Rpb246OnNlbmRSYXdEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7
CisgICAgbV9zb2NrZXQtPnNlbmQoZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBXZWJTb2NrZXRT
ZXJ2ZXJDb25uZWN0aW9uOjpkaWRDbG9zZVNvY2tldFN0cmVhbShTb2NrZXRTdHJlYW1IYW5kbGUq
KQoreworICAgIC8vIFdlYiBTb2NrZXQgTW9kZS4KKyAgICBpZiAobV9tb2RlID09IFdlYlNvY2tl
dCkKKyAgICAgICAgbV9jbGllbnQtPmRpZENsb3NlV2ViU29ja2V0Q29ubmVjdGlvbih0aGlzKTsK
KworICAgIC8vIFRlbGwgdGhlIHNlcnZlciB0byBnZXQgcmlkIG9mIHRoaXMuCisgICAgbV9zZXJ2
ZXItPmRpZENsb3NlV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbih0aGlzKTsKK30KKwordm9pZCBX
ZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpkaWRSZWNlaXZlU29ja2V0U3RyZWFtRGF0YShTb2Nr
ZXRTdHJlYW1IYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIC8v
IEVhY2ggZGlkUmVjZWl2ZURhdGEgY2FsbCBhZGRzIG1vcmUgZGF0YSB0byBvdXIgYnVmZmVyLgor
ICAgIC8vIFdlIGNsZWFyIHRoZSBidWZmZXIgd2hlbiB3ZSBoYXZlIGhhbmRsZWQgZGF0YSBmcm9t
IGl0LgorICAgIG1fYnVmZmVyZWREYXRhLmFwcGVuZChkYXRhLCBsZW5ndGgpOworCisgICAgc3dp
dGNoIChtX21vZGUpIHsKKyAgICBjYXNlIEhUVFA6CisgICAgICAgIHJlYWRIVFRQTWVzc2FnZSgp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYlNvY2tldDoKKyAgICAgICAgcmVhZFdlYlNv
Y2tldEZyYW1lcygpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBG
b3IgYW55IG5ldyBtb2RlcyBhZGRlZCBpbiB0aGUgZnV0dXJlLgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6
ZGlkRmFpbFNvY2tldFN0cmVhbShTb2NrZXRTdHJlYW1IYW5kbGUqLCBjb25zdCBTb2NrZXRTdHJl
YW1FcnJvciYpCit7CisgICAgLy8gUG9zc2libGUgcmVhZCBvciB3cml0ZSBlcnJvci4KK30KKwor
dm9pZCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpyZWFkSFRUUE1lc3NhZ2UoKQoreworICAg
IFN0cmluZyBmYWlsdXJlUmVhc29uOworICAgIFJlZlB0cjxIVFRQUmVxdWVzdD4gcmVxdWVzdCA9
IEhUVFBSZXF1ZXN0OjpwYXJzZUhUVFBSZXF1ZXN0RnJvbUJ1ZmZlcihtX2J1ZmZlcmVkRGF0YS5k
YXRhKCksIG1fYnVmZmVyZWREYXRhLnNpemUoKSwgZmFpbHVyZVJlYXNvbik7CisgICAgaWYgKCFy
ZXF1ZXN0KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBBc3N1bWUgYWxsIHRoZSBpbnB1dCBo
YXMgYmVlbiByZWFkIGlmIHdlIGFyZSByZWFkaW5nIGFuIEhUVFAgUmVxdWVzdC4KKyAgICBtX2J1
ZmZlcmVkRGF0YS5jbGVhcigpOworCisgICAgLy8gSWYgdGhpcyBpcyBhIFdlYlNvY2tldCByZXF1
ZXN0LCBwZXJmb3JtIHRoZSBXZWJTb2NrZXQgSGFuZHNoYWtlLgorICAgIGNvbnN0IEhUVFBIZWFk
ZXJNYXAmIGhlYWRlcnMgPSByZXF1ZXN0LT5oZWFkZXJGaWVsZHMoKTsKKyAgICBTdHJpbmcgdXBn
cmFkZUhlYWRlclZhbHVlID0gaGVhZGVycy5nZXQoIlVwZ3JhZGUiKTsKKyAgICBpZiAodXBncmFk
ZUhlYWRlclZhbHVlID09ICJ3ZWJzb2NrZXQiKSB7CisgICAgICAgIHVwZ3JhZGVUb1dlYlNvY2tl
dFNlcnZlckNvbm5lY3Rpb24ocmVxdWVzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKHVwZ3JhZGVIZWFkZXJWYWx1ZSA9PSAiV2ViU29ja2V0IikgeworICAgICAgICBMT0dfRVJS
T1IoIldlYlNvY2tldCBwcm90b2NvbCB2ZXJzaW9uIDwgSHliaS0xMCBub3Qgc3VwcG9ydGVkLiBV
cGdyYWRlIHlvdXIgY2xpZW50LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
T3RoZXJ3aXNlLCB0aGlzIGlzIGFuIEhUVFAgUmVxdWVzdCB3ZSBkb24ndCBrbm93IGhvdyB0byBk
ZWFsIHdpdGguCisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVVbnJlY29nbml6ZWRIVFRQUmVxdWVz
dCh0aGlzLCByZXF1ZXN0KTsKK30KKwordm9pZCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjp1
cGdyYWRlVG9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKFBhc3NSZWZQdHI8SFRUUFJlcXVlc3Q+
IHJlcXVlc3QpCit7CisgICAgQVNTRVJUKHJlcXVlc3QpOworICAgIEFTU0VSVChtX21vZGUgPT0g
SFRUUCk7CisgICAgbV9tb2RlID0gV2ViU29ja2V0OworICAgIFJlZlB0cjxIVFRQUmVxdWVzdD4g
cHJvdGVjdGVkUmVxdWVzdChyZXF1ZXN0KTsKKworICAgIC8vIEFzayB0aGUgY2xpZW50IGlmIHdl
IHNob3VsZCB1cGdyYWRlIGZvciB0aGlzIG9yIG5vdC4KKyAgICBpZiAoIW1fY2xpZW50LT5kaWRS
ZWNlaXZlV2ViU29ja2V0VXBncmFkZUhUVFBSZXF1ZXN0KHRoaXMsIHByb3RlY3RlZFJlcXVlc3Qp
KSB7CisgICAgICAgIHNodXRkb3duTm93KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBCdWlsZCBhbmQgc2VuZCB0aGUgV2ViU29ja2V0IGhhbmRzaGFrZSByZXNwb25zZS4KKyAg
ICBjb25zdCBIVFRQSGVhZGVyTWFwJiByZXF1ZXN0SGVhZGVycyA9IHByb3RlY3RlZFJlcXVlc3Qt
PmhlYWRlckZpZWxkcygpOworICAgIFN0cmluZyBhY2NlcHQgPSBXZWJTb2NrZXRIYW5kc2hha2U6
OmdldEV4cGVjdGVkV2ViU29ja2V0QWNjZXB0KHJlcXVlc3RIZWFkZXJzLmdldCgiU2VjLVdlYlNv
Y2tldC1LZXkiKSk7CisgICAgSFRUUEhlYWRlck1hcCByZXNwb25zZUhlYWRlcnM7CisgICAgcmVz
cG9uc2VIZWFkZXJzLmFkZCgiVXBncmFkZSIsIHJlcXVlc3RIZWFkZXJzLmdldCgiVXBncmFkZSIp
KTsKKyAgICByZXNwb25zZUhlYWRlcnMuYWRkKCJDb25uZWN0aW9uIiwgcmVxdWVzdEhlYWRlcnMu
Z2V0KCJDb25uZWN0aW9uIikpOworICAgIHJlc3BvbnNlSGVhZGVycy5hZGQoIlNlYy1XZWJTb2Nr
ZXQtQWNjZXB0IiwgYWNjZXB0KTsKKworICAgIHNlbmRIVFRQUmVzcG9uc2VIZWFkZXIoMTAxLCAi
V2ViU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZSIsIHJlc3BvbnNlSGVhZGVycyk7CisKKyAgICBt
X2NsaWVudC0+ZGlkRXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbih0aGlzLCBwcm90ZWN0ZWRS
ZXF1ZXN0KTsKK30KKwordm9pZCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpyZWFkV2ViU29j
a2V0RnJhbWVzKCkKK3sKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBib29sIGRpZFJlYWRP
bmVGcmFtZSA9IHJlYWRXZWJTb2NrZXRGcmFtZSgpOworICAgICAgICBpZiAoIWRpZFJlYWRPbmVG
cmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAobV9idWZmZXJlZERhdGEuaXNF
bXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitib29sIFdlYlNvY2tldFNl
cnZlckNvbm5lY3Rpb246OnJlYWRXZWJTb2NrZXRGcmFtZSgpCit7CisgICAgV2ViU29ja2V0RnJh
bWUgZnJhbWU7CisgICAgY29uc3QgY2hhciogZnJhbWVFbmQ7CisgICAgU3RyaW5nIGVycm9yU3Ry
aW5nOworICAgIFdlYlNvY2tldEZyYW1lOjpQYXJzZUZyYW1lUmVzdWx0IHJlc3VsdCA9IFdlYlNv
Y2tldEZyYW1lOjpwYXJzZUZyYW1lKG1fYnVmZmVyZWREYXRhLmRhdGEoKSwgbV9idWZmZXJlZERh
dGEuc2l6ZSgpLCBmcmFtZSwgZnJhbWVFbmQsIGVycm9yU3RyaW5nKTsKKworICAgIC8vIEluY29t
cGxldGUgZnJhbWUuIFdhaXQgdG8gcmVjZWl2ZSBtb3JlIGRhdGEuCisgICAgaWYgKHJlc3VsdCA9
PSBXZWJTb2NrZXRGcmFtZTo6RnJhbWVJbmNvbXBsZXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAocmVzdWx0ID09IFdlYlNvY2tldEZyYW1lOjpGcmFtZUVycm9yKSB7CisgICAg
ICAgIHNodXRkb3duTm93KCk7CisgICAgfSBlbHNlIGlmIChmcmFtZS5vcENvZGUgPT0gV2ViU29j
a2V0RnJhbWU6Ok9wQ29kZVRleHQpIHsKKyAgICAgICAgLy8gRGVsZWdhdGUgVGV4dCBmcmFtZXMg
dG8gb3VyIGNsaWVudC4KKyAgICAgICAgU3RyaW5nIG1zZyA9IFN0cmluZzo6ZnJvbVVURjgoZnJh
bWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCk7CisgICAgICAgIG1fY2xpZW50LT5kaWRS
ZWNlaXZlV2ViU29ja2V0TWVzc2FnZSh0aGlzLCBtc2cpOworICAgIH0gZWxzZQorICAgICAgICBu
b3RJbXBsZW1lbnRlZCgpOworCisgICAgLy8gUmVtb3ZlIHRoZSBmcmFtZSBmcm9tIG91ciBidWZm
ZXIuCisgICAgbV9idWZmZXJlZERhdGEucmVtb3ZlKDAsIGZyYW1lRW5kIC0gbV9idWZmZXJlZERh
dGEuZGF0YSgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX1NFUlZFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9u
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNmNjNzcwMTM3MjgyMTJkODU2ZjMxN2JlNDE0NjFkZTRhNjNiNWRkNQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2
ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb25faAorI2RlZmluZSBXZWJTb2NrZXRTZXJ2ZXJDb25u
ZWN0aW9uX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKQorCisjaW5jbHVkZSA8V2Vi
Q29yZS9Tb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIEhUVFBIZWFkZXJNYXA7CitjbGFzcyBIVFRQUmVxdWVzdDsKK2NsYXNzIFNvY2tldFN0cmVh
bUhhbmRsZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlNvY2tldFNlcnZl
cjsKK2NsYXNzIFdlYlNvY2tldFNlcnZlckNsaWVudDsKKworY2xhc3MgV2ViU29ja2V0U2VydmVy
Q29ubmVjdGlvbiA6IHB1YmxpYyBXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQgewor
cHVibGljOgorICAgIGVudW0gV2ViU29ja2V0U2VydmVyTW9kZSB7IEhUVFAsIFdlYlNvY2tldCB9
OworICAgIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24oUGFzc1JlZlB0cjxXZWJDb3JlOjpTb2Nr
ZXRTdHJlYW1IYW5kbGU+LCBXZWJTb2NrZXRTZXJ2ZXJDbGllbnQqLCBXZWJTb2NrZXRTZXJ2ZXIq
KTsKKyAgICB2aXJ0dWFsIH5XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKCk7CisKKyAgICB1bnNp
Z25lZCBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisgICAgdm9p
ZCBzZXRJZGVudGlmaWVyKHVuc2lnbmVkIGlkKSB7IG1faWRlbnRpZmllciA9IGlkOyB9CisKKyAg
ICAvLyBTZW5kaW5nIGRhdGEgb3ZlciB0aGUgY29ubmVjdGlvbi4KKyAgICB2b2lkIHNlbmRXZWJT
b2NrZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgdm9pZCBzZW5kSFRUUFJl
c3BvbnNlSGVhZGVyKGludCBzdGF0dXNDb2RlLCBjb25zdCBTdHJpbmcmIHN0YXR1c1RleHQsIGNv
bnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmIGhlYWRlckZpZWxkcyk7CisgICAgdm9pZCBzZW5k
UmF3RGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKKworICAgIC8vIFRlcm1p
bmF0aW5nIHRoZSBjb25uZWN0aW9uLgorICAgIHZvaWQgc2h1dGRvd25Ob3coKTsKKyAgICB2b2lk
IHNodXRkb3duQWZ0ZXJTZW5kT3JOb3coKTsKKworICAgIC8vIFNvY2tldFN0cmVhbUhhbmRsZUNs
aWVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xvc2VTb2NrZXRTdHJl
YW0oV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlKik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVTb2NrZXRTdHJlYW1EYXRhKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZSosIGNvbnN0
IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsU29ja2V0
U3RyZWFtKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OlNvY2tl
dFN0cmVhbUVycm9yJik7CisKK3ByaXZhdGU6CisgICAgLy8gSFRUUCBNb2RlLgorICAgIHZvaWQg
cmVhZEhUVFBNZXNzYWdlKCk7CisKKyAgICAvLyBXZWJTb2NrZXQgTW9kZS4KKyAgICB2b2lkIHVw
Z3JhZGVUb1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24oUGFzc1JlZlB0cjxXZWJDb3JlOjpIVFRQ
UmVxdWVzdD4pOworICAgIHZvaWQgcmVhZFdlYlNvY2tldEZyYW1lcygpOworICAgIGJvb2wgcmVh
ZFdlYlNvY2tldEZyYW1lKCk7CisKK3Byb3RlY3RlZDoKKyAgICB1bnNpZ25lZCBtX2lkZW50aWZp
ZXI7CisgICAgVmVjdG9yPGNoYXI+IG1fYnVmZmVyZWREYXRhOworICAgIFdlYlNvY2tldFNlcnZl
ck1vZGUgbV9tb2RlOworICAgIFJlZlB0cjxXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU+IG1f
c29ja2V0OworICAgIFdlYlNvY2tldFNlcnZlciogbV9zZXJ2ZXI7CisgICAgV2ViU29ja2V0U2Vy
dmVyQ2xpZW50KiBtX2NsaWVudDsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfU0VSVkVSKQorCisjZW5kaWYgLy8gV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYlNv
Y2tldFNlcnZlclF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2
ZXIvcXQvV2ViU29ja2V0U2VydmVyUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhOWM1YjM5M2Y2ZjI5Njhh
YWZhZTQ2NzU2ZTk5ZjU2MWFkZDA0NjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYlNvY2tldFNlcnZlclF0LmNwcApAQCAt
MCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViU29ja2V0U2VydmVyUXQuaCIKKworI2luY2x1ZGUgIldlYlNvY2tldFNlcnZl
ci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU29ja2V0U3RyZWFtSGFuZGxlLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCit2b2lkIFdlYlNvY2tldFNlcnZlcjo6cGxhdGZvcm1Jbml0aWFsaXplKCkK
K3sKKyAgICBtX3RjcFNlcnZlckhhbmRsZXIgPSBhZG9wdFB0cihuZXcgUXRUY3BTZXJ2ZXJIYW5k
bGVyKHRoaXMpKTsKK30KKworYm9vbCBXZWJTb2NrZXRTZXJ2ZXI6OnBsYXRmb3JtTGlzdGVuKGNv
bnN0IFN0cmluZyYgYmluZEFkZHJlc3MsIHVuc2lnbmVkIHNob3J0IHBvcnQpCit7CisgICAgcmV0
dXJuIG1fdGNwU2VydmVySGFuZGxlci0+bGlzdGVuKGJpbmRBZGRyZXNzLCBwb3J0KTsKK30KKwor
dm9pZCBXZWJTb2NrZXRTZXJ2ZXI6OnBsYXRmb3JtQ2xvc2UoKQoreworICAgIG1fdGNwU2VydmVy
SGFuZGxlci0+Y2xvc2UoKTsKK30KKworUXRUY3BTZXJ2ZXJIYW5kbGVyOjpRdFRjcFNlcnZlckhh
bmRsZXIoV2ViU29ja2V0U2VydmVyKiB3ZWJTb2NrZXRTZXJ2ZXIpCis6IG1fd2ViU29ja2V0U2Vy
dmVyKHdlYlNvY2tldFNlcnZlcikKK3sKKyAgICBjb25uZWN0KCZtX3NlcnZlclNvY2tldCwgU0lH
TkFMKG5ld0Nvbm5lY3Rpb24oKSksIFNMT1QoaGFuZGxlTmV3Q29ubmVjdGlvbigpKSk7Cit9CisK
K3ZvaWQgUXRUY3BTZXJ2ZXJIYW5kbGVyOjpoYW5kbGVOZXdDb25uZWN0aW9uKCkKK3sKKyAgICBR
VGNwU29ja2V0KiBzb2NrZXQgPSBtX3NlcnZlclNvY2tldC5uZXh0UGVuZGluZ0Nvbm5lY3Rpb24o
KTsKKyAgICBBU1NFUlQoc29ja2V0KTsKKyAgICBtX3dlYlNvY2tldFNlcnZlci0+ZGlkQWNjZXB0
Q29ubmVjdGlvbihTb2NrZXRTdHJlYW1IYW5kbGU6OmNyZWF0ZShzb2NrZXQsIDApKTsKK30KKwor
Ym9vbCBRdFRjcFNlcnZlckhhbmRsZXI6Omxpc3Rlbihjb25zdCBTdHJpbmcmIGJpbmRBZGRyZXNz
LCB1bnNpZ25lZCBzaG9ydCBwb3J0KQoreworICAgIEFTU0VSVCghYmluZEFkZHJlc3MuaXNFbXB0
eSgpKTsKKyAgICBBU1NFUlQocG9ydCk7CisgICAgYm9vbCBzdWNjZXNzID0gbV9zZXJ2ZXJTb2Nr
ZXQubGlzdGVuKFFIb3N0QWRkcmVzcyhiaW5kQWRkcmVzcyksIHBvcnQpOworICAgIGlmICghc3Vj
Y2VzcykKKyAgICAgICAgTE9HX0VSUk9SKCJDYW4ndCBvcGVuIHNlcnZlciBzb2NrZXQgb24gJXM6
JWQgWyVzXSIsIHFQcmludGFibGUoYmluZEFkZHJlc3MpLCBwb3J0LCBxUHJpbnRhYmxlKG1fc2Vy
dmVyU29ja2V0LmVycm9yU3RyaW5nKCkpKTsKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwordm9p
ZCBRdFRjcFNlcnZlckhhbmRsZXI6OmNsb3NlKCkKK3sKKyAgICBtX3NlcnZlclNvY2tldC5jbG9z
ZSgpOworfQorCit9CisKKyNpbmNsdWRlICJtb2NfV2ViU29ja2V0U2VydmVyUXQuY3BwIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9xdC9XZWJT
b2NrZXRTZXJ2ZXJRdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZl
ci9xdC9XZWJTb2NrZXRTZXJ2ZXJRdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1NjU5NzdkOTRkZWZlM2RiOTI4
YjI4ZWJjMDY0NmYxNDYzYWZmMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3F0L1dlYlNvY2tldFNlcnZlclF0LmgKQEAgLTAsMCAr
MSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgV2ViU29ja2V0U2VydmVyUXRfaAorI2RlZmluZSBXZWJTb2NrZXRT
ZXJ2ZXJRdF9oCisKKyNpbmNsdWRlIDxRVGNwU2VydmVyPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViU29ja2V0U2VydmVy
OworCitjbGFzcyBRdFRjcFNlcnZlckhhbmRsZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9P
QkpFQ1QKK3B1YmxpYzoKKyAgICBRdFRjcFNlcnZlckhhbmRsZXIoV2ViU29ja2V0U2VydmVyKik7
CisgICAgYm9vbCBsaXN0ZW4oY29uc3QgU3RyaW5nJiBiaW5kQWRkcmVzcywgdW5zaWduZWQgc2hv
cnQgcG9ydCk7CisgICAgdm9pZCBjbG9zZSgpOworCitwcml2YXRlIHNsb3RzOgorICAgIHZvaWQg
aGFuZGxlTmV3Q29ubmVjdGlvbigpOworCitwcml2YXRlOgorICAgIFFUY3BTZXJ2ZXIgbV9zZXJ2
ZXJTb2NrZXQ7CisgICAgV2ViU29ja2V0U2VydmVyKiBtX3dlYlNvY2tldFNlcnZlcjsKK307CisK
K30KKworI2VuZGlmIC8vIFdlYlNvY2tldFNlcnZlclF0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYktpdDIucHJpIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKaW5kZXggNjQ4
ZjRkY2UzN2M3M2I5NTE5ZGZkNDlhYWZmOWRlNzBiNzc5NGJiOC4uMjRjYzVhMjE2NGU2ZTZmYjkx
ZGQ2MTk3MGFiMGE2YzIwMjdjYzY3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0
Mi5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKQEAgLTI3LDYgKzI3LDggQEAg
SU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJUi9VSVByb2Nlc3MvQVBJL3F0IFwKICAg
ICAkJFNPVVJDRV9ESVIvVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uIFwKICAgICAkJFNPVVJDRV9E
SVIvVUlQcm9jZXNzL0Rvd25sb2FkcyBcCisgICAgJCRTT1VSQ0VfRElSL1VJUHJvY2Vzcy9JbnNw
ZWN0b3JTZXJ2ZXIgXAorICAgICQkU09VUkNFX0RJUi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVy
L3F0IFwKICAgICAkJFNPVVJDRV9ESVIvVUlQcm9jZXNzL0xhdW5jaGVyIFwKICAgICAkJFNPVVJD
RV9ESVIvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMgXAogICAgICQkU09VUkNFX0RJUi9VSVByb2Nl
c3MvUGx1Z2lucyBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaCBiL1NvdXJj
ZS9XZWJLaXQyL2NvbmZpZy5oCmluZGV4IDdkYjc2YzAyMDE4ZTc1YTc1NDg4ZWI2ZmFkMmMxZjhh
ZDE5YzljZjUuLmZmMzhmMzAzYTU1NjBkNjJhYzY0OTYzNGJiNTM3ODYyMmY2MzM2MzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL2NvbmZpZy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL2NvbmZp
Zy5oCkBAIC0xMzUsMyArMTM1LDkgQEAgc3RhdGljIGNvbnN0IHR5cGUmIG5hbWUoKSBcCiAjZW5k
aWYKIAogI2RlZmluZSBQTFVHSU5fQVJDSElURUNUVVJFKEFSQ0gpIChkZWZpbmVkIFBMVUdJTl9B
UkNISVRFQ1RVUkVfIyNBUkNIICYmIFBMVUdJTl9BUkNISVRFQ1RVUkVfIyNBUkNIKQorCisjaWZu
ZGVmIEVOQUJMRV9JTlNQRUNUT1JfU0VSVkVSCisjaWYgUExBVEZPUk0oUVQpCisjZGVmaW5lIEVO
QUJMRV9JTlNQRUNUT1JfU0VSVkVSIDEKKyNlbmRpZgorI2VuZGlmCg==
</data>
<flag name="review"
          id="139513"
          type_id="1"
          status="+"
          setter="hausmann"
    />
    <flag name="commit-queue"
          id="139559"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>