<?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>150857</bug_id>
          
          <creation_ts>2015-11-03 14:23:26 -0800</creation_ts>
          <short_desc>Create a NetworkSession for each SessionID</short_desc>
          <delta_ts>2015-11-03 16:51:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit 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>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>150834</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>andersca</cc>
    
    <cc>cdumez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1139083</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-03 14:23:26 -0800</bug_when>
    <thetext>Allow multiple NetworkSessions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139088</commentid>
    <comment_count>1</comment_count>
      <attachid>264726</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-03 14:29:34 -0800</bug_when>
    <thetext>Created attachment 264726
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139093</commentid>
    <comment_count>2</comment_count>
      <attachid>264728</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-03 14:37:53 -0800</bug_when>
    <thetext>Created attachment 264728
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139098</commentid>
    <comment_count>3</comment_count>
      <attachid>264731</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-03 14:47:09 -0800</bug_when>
    <thetext>Created attachment 264731
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139103</commentid>
    <comment_count>4</comment_count>
      <attachid>264728</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-11-03 14:51:02 -0800</bug_when>
    <thetext>Comment on attachment 264728
Patch

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

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:195
&gt; +    RELEASE_ASSERT(networkSession);

Why do we need to assert here at all? Particularly, why a RELEASE_ASSERT?

&gt; Source/WebKit2/NetworkProcess/NetworkSession.h:95
&gt; +    explicit NetworkDataTask(NetworkSession&amp;, NetworkSessionTaskClient&amp;, RetainPtr&lt;NSURLSessionDataTask&gt;);

The argument to this function should just be NSURLSessionDataTask *, not a RetainPtr. If you were trying to save retain count churn, maybe RetainPtr&amp;&amp;.

&gt; Source/WebKit2/NetworkProcess/NetworkSession.h:115
&gt; +    NetworkSession(Type, WebCore::SessionID);
&gt; +    ~NetworkSession();

A little non-standard in style to declare the constructor and destructor after declaring other member functions.

&gt; Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm:177
&gt; +static std::unique_ptr&lt;NetworkSession&gt;&amp; defaultNetworkSession()
&gt; +{
&gt; +    ASSERT(isMainThread());
&gt; +    static NeverDestroyed&lt;std::unique_ptr&lt;NetworkSession&gt;&gt; session;
&gt; +    return session;
&gt; +}

No need for this helper function.

&gt; Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm:183
&gt; +    if (!defaultNetworkSession())
&gt; +        defaultNetworkSession() = std::make_unique&lt;NetworkSession&gt;(NetworkSession::Type::Normal, WebCore::SessionID::defaultSessionID());
&gt; +    return *defaultNetworkSession();

No helper function or make_unique needed:

    ASSERT(isMainThread());
    static NeverDestroyed&lt;NetworkSession&gt; session(NetworkSession::Type::Normal, WebCore::SessionID::defaultSessionID());
    return session;

&gt; Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm:202
&gt; +        RELEASE_ASSERT(dataTask);

Why do we need to assert here at all? Particularly, why a RELEASE_ASSERT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139122</commentid>
    <comment_count>5</comment_count>
      <attachid>264738</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-03 15:26:20 -0800</bug_when>
    <thetext>Created attachment 264738
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139124</commentid>
    <comment_count>6</comment_count>
      <attachid>264739</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-03 15:28:40 -0800</bug_when>
    <thetext>Created attachment 264739
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139151</commentid>
    <comment_count>7</comment_count>
      <attachid>264739</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-03 15:57:05 -0800</bug_when>
    <thetext>Comment on attachment 264739
Patch

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

&gt; Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm:195
&gt; +    for (auto* dataTask : m_dataTaskMap.values())
&gt; +        dataTask-&gt;cancel();

I&apos;m not sure if this is correct.  I had an ASSERT(m_dataTaskMap.isEmpty()) before, but I wasn&apos;t sure that will always be true.  Now I think it might.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139174</commentid>
    <comment_count>8</comment_count>
      <attachid>264753</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-03 16:36:11 -0800</bug_when>
    <thetext>Created attachment 264753
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139179</commentid>
    <comment_count>9</comment_count>
      <attachid>264753</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-11-03 16:41:48 -0800</bug_when>
    <thetext>Comment on attachment 264753
Patch

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

&gt; Source/WebKit2/NetworkProcess/NetworkSession.h:103
&gt; +    friend class NetworkDataTask;

Why friend?

&gt; Source/WebKit2/Shared/SessionTracker.cpp:85
&gt; +    return map.get();

I think you can just return map here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139188</commentid>
    <comment_count>10</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-03 16:49:30 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 264753 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=264753&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/NetworkSession.h:103
&gt; &gt; +    friend class NetworkDataTask;
&gt; 
&gt; Why friend?
A NetworkDataTask adds itself to m_dataTaskMap in its constructor and removes itself in the destructor.
&gt; 
&gt; &gt; Source/WebKit2/Shared/SessionTracker.cpp:85
&gt; &gt; +    return map.get();
&gt; 
&gt; I think you can just return map here.
Yep, and a few other places in this file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139190</commentid>
    <comment_count>11</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-03 16:51:31 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/191998</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264726</attachid>
            <date>2015-11-03 14:29:34 -0800</date>
            <delta_ts>2015-11-03 14:37:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150857-20151103142837.patch</filename>
            <type>text/plain</type>
            <size>26474</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTk3OSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDE1LTExLTAzICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ3JlYXRlIGEg
TmV0d29ya1Nlc3Npb24gZm9yIGVhY2ggU2Vzc2lvbklECisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbmFtZXMgU2Vzc2lvblRyYWNr
ZXI6OnNlc3Npb24gdG8gc3RvcmFnZVNlc3Npb24gYW5kIG1ha2VzIGEgcGFyYWxsZWwKKyAgICAg
ICAgc3RydWN0dXJlIGZvciBOZXR3b3JrU2Vzc2lvbnMuICBOZXR3b3JrU2Vzc2lvbiBhbmQgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uIHNob3VsZCBldmVudHVhbGx5CisgICAgICAgIGJlY29tZSB0aGUg
c2FtZSBjbGFzcyBpbiBXZWJDb3JlLiAgQmVjYXVzZSBub3QgZXZlcnlib2R5IHVzZXMgTmV0d29y
a1Nlc3Npb25zIHlldCwKKyAgICAgICAgd2Uga2VlcCB0aGVtIHNlcGFyYXRlIGJ1dCBjcmVhdGVk
LCBkZXN0cm95ZWQsIGFuZCBtYW5hZ2VkIHRvZ2V0aGVyLgorCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpzdG9yYWdlU2Vzc2lvbik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0
YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9y
aWdpbnMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnROZXR3b3Jr
TG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YWJvcnQpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmg6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtTZXNzaW9uVGFza0NsaWVudDo6fk5ldHdvcmtTZXNzaW9uVGFza0NsaWVudCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrOjpjbGVhckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtp
bmdEYXRhVGFzazo6Y2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2lu
Z0RhdGFUYXNrOjpjbGVhckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtTZXNzaW9uOjp+TmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OmNv
bmZpZ3VyYXRpb25Gb3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6ZGVmYXVsdE5ldHdvcmtTZXNz
aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpjcmVhdGVEYXRhVGFza1dpdGhSZXF1ZXN0KToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmRhdGFUYXNrRm9ySWRlbnRpZmllcik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFUYXNrKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
RGF0YVRhc2s6OnJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6dGFz
a0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OnNpbmdsZXRvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFzazo6TmV0d29ya2luZ0Rh
dGFUYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2luZ0RhdGFUYXNrOjp+
TmV0d29ya2luZ0RhdGFUYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2lu
Z0RhdGFUYXNrOjpzdXNwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2lu
Z0RhdGFUYXNrOjpyZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JraW5n
RGF0YVRhc2s6OnRhc2tJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZU5ldHdvcmtpbmdDb250ZXh0OjpzdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKToK
KyAgICAgICAgKiBTaGFyZWQvU2Vzc2lvblRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViS2l0Ojpz
dGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCk6CisgICAgICAgIChXZWJLaXQ6OmlkZW50aWZpZXJCYXNl
KToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uTWFwKToK
KyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OmdldElkZW50aWZpZXJCYXNlKToKKyAg
ICAgICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAg
KFdlYktpdDo6c3RhdGljU2Vzc2lvbk1hcCk6CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25UcmFj
a2VyOjpuZXR3b3JrU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpz
ZXNzaW9uSUQpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbik6
CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpkZXN0cm95U2Vzc2lvbik6CisgICAg
ICAgIChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpzZXNzaW9uTWFwKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OnNlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAq
IFNoYXJlZC9TZXNzaW9uVHJhY2tlci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRDb29raWVB
Y2NlcHRQb2xpY3lGb3JBbGxDb250ZXh0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQ6OnN0b3JhZ2VTZXNzaW9uKToKKwogMjAxNS0xMS0wMyAgQW5kZXJzIENh
cmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5IC1bX1dLUmVt
b3RlT2JqZWN0UmVnaXN0cnkgX2ludm9rZU1ldGhvZDpdCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwCShyZXZpc2lvbiAxOTE5NDMpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2OCw5ICsxNjgsOSBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpw
cmVmCiBzdGF0aWMgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzdG9yYWdlU2Vzc2lvbihTZXNzaW9u
SUQgc2Vzc2lvbklEKQogewogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkgewotICAg
ICAgICBOZXR3b3JrU3RvcmFnZVNlc3Npb24qIHByaXZhdGVTZXNzaW9uID0gU2Vzc2lvblRyYWNr
ZXI6OnNlc3Npb24oc2Vzc2lvbklEKTsKLSAgICAgICAgaWYgKHByaXZhdGVTZXNzaW9uKQotICAg
ICAgICAgICAgcmV0dXJuICpwcml2YXRlU2Vzc2lvbjsKKyAgICAgICAgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKiBwcml2YXRlU3RvcmFnZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c3RvcmFnZVNl
c3Npb24oc2Vzc2lvbklEKTsKKyAgICAgICAgaWYgKHByaXZhdGVTdG9yYWdlU2Vzc2lvbikKKyAg
ICAgICAgICAgIHJldHVybiAqcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uOwogICAgICAgICAvLyBTb21l
IHJlcXVlc3RzIHdpdGggcHJpdmF0ZSBicm93c2luZyBtb2RlIHJlcXVlc3RlZCBtYXkgc3RpbGwg
YmUgY29taW5nIHNob3J0bHkgYWZ0ZXIgTmV0d29ya1Byb2Nlc3Mgd2FzIHRvbGQgdG8gZGVzdHJv
eSBpdHMgc2Vzc2lvbi4KICAgICAgICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8gdHJhY2sgcHJp
dmF0ZSBicm93c2luZyBzZXNzaW9ucyBtb3JlIHJpZ29yb3VzbHkuCiAgICAgICAgIExPR19FUlJP
UigiUHJpdmF0ZSBicm93c2luZyB3YXMgcmVxdWVzdGVkLCBidXQgdGhlcmUgd2FzIG5vIHNlc3Np
b24gZm9yIGl0LiBQbGVhc2UgZmlsZSBhIGJ1ZyB1bmxlc3MgeW91IGp1c3QgZGlzYWJsZWQgcHJp
dmF0ZSBicm93c2luZywgaW4gd2hpY2ggY2FzZSBpdCdzIGFuIGV4cGVjdGVkIHJhY2UuIik7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwCShyZXZpc2lvbiAxOTE5NDMpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNyw3ICszMzcsNyBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKFNlCiAgICAgfSkpOwogCiAgICAgaWYg
KHdlYnNpdGVEYXRhVHlwZXMgJiBXZWJzaXRlRGF0YVR5cGVDb29raWVzKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBuZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbihz
ZXNzaW9uSUQpKQorICAgICAgICBpZiAoYXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gU2Vz
c2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgICAgICBnZXRI
b3N0bmFtZXNXaXRoQ29va2llcygqbmV0d29ya1N0b3JhZ2VTZXNzaW9uLCBjYWxsYmFja0FnZ3Jl
Z2F0b3ItPm1fd2Vic2l0ZURhdGEuaG9zdE5hbWVzV2l0aENvb2tpZXMpOwogICAgIH0KIApAQCAt
MzUyLDEzICszNTIsMTMgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGEo
UwogewogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzICYgV2Vi
c2l0ZURhdGFUeXBlSFNUU0NhY2hlKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU3RvcmFn
ZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbihzZXNzaW9uSUQpKQorICAgICAgICBp
ZiAoYXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VT
ZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgICAgICBjbGVhckhTVFNDYWNoZSgqbmV0d29ya1N0
b3JhZ2VTZXNzaW9uLCBtb2RpZmllZFNpbmNlKTsKICAgICB9CiAjZW5kaWYKIAogICAgIGlmICh3
ZWJzaXRlRGF0YVR5cGVzICYgV2Vic2l0ZURhdGFUeXBlQ29va2llcykgewotICAgICAgICBpZiAo
YXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6OnNlc3Npb24oc2Vz
c2lvbklEKSkKKyAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IFNlc3Np
b25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQogICAgICAgICAgICAgZGVsZXRl
QWxsQ29va2llc01vZGlmaWVkU2luY2UoKm5ldHdvcmtTdG9yYWdlU2Vzc2lvbiwgbW9kaWZpZWRT
aW5jZSk7CiAgICAgfQogCkBAIC00MTgsNyArNDE4LDcgQEAgc3RhdGljIHZvaWQgY2xlYXJEaXNr
Q2FjaGVFbnRyaWVzKGNvbnN0IAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURh
dGFGb3JPcmlnaW5zKFNlc3Npb25JRCBzZXNzaW9uSUQsIHVpbnQ2NF90IHdlYnNpdGVEYXRhVHlw
ZXMsIGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiBvcmlnaW5zLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgY29va2llSG9zdE5hbWVzLCB1aW50NjRfdCBjYWxsYmFja0lEKQogewogICAg
IGlmICh3ZWJzaXRlRGF0YVR5cGVzICYgV2Vic2l0ZURhdGFUeXBlQ29va2llcykgewotICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6OnNlc3Np
b24oc2Vzc2lvbklEKSkKKyAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9
IFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQogICAgICAgICAgICAg
ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcygqbmV0d29ya1N0b3JhZ2VTZXNzaW9uLCBjb29raWVI
b3N0TmFtZXMpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAxOTE5NDMp
CisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiTmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2Fk
UGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgiCisjaW5j
bHVkZSAiU2Vzc2lvblRyYWNrZXIuaCIKICNpbmNsdWRlICJTaGFyZWFibGVSZXNvdXJjZS5oIgog
I2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVy
cy5oIgpAQCAtMTg5LDcgKzE5MCwxMCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3Rh
cnROZXR3b3JrCiAgICAgYm9vbCBzaG91bGRTbmlmZiA9IG1fcGFyYW1ldGVycy5jb250ZW50U25p
ZmZpbmdQb2xpY3kgPT0gU25pZmZDb250ZW50OwogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAg
ICAgVU5VU0VEX1BBUkFNKHNob3VsZFNuaWZmKTsgLy8gRklYTUU6IFVzZSB0aGlzLgotICAgIG1f
dGFzayA9IE5ldHdvcmtTZXNzaW9uOjpzaW5nbGV0b24oKS0+Y3JlYXRlRGF0YVRhc2tXaXRoUmVx
dWVzdChtX2N1cnJlbnRSZXF1ZXN0LCAqdGhpcyk7CisKKyAgICBhdXRvKiBuZXR3b3JrU2Vzc2lv
biA9IFNlc3Npb25UcmFja2VyOjpuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQoKSk7CisgICAgUkVM
RUFTRV9BU1NFUlQobmV0d29ya1Nlc3Npb24pOworICAgIG1fdGFzayA9IG5ldHdvcmtTZXNzaW9u
LT5jcmVhdGVEYXRhVGFza1dpdGhSZXF1ZXN0KG1fY3VycmVudFJlcXVlc3QsICp0aGlzKTsKICAg
ICBtX3Rhc2stPnJlc3VtZSgpOwogI2Vsc2UKICAgICBtX2hhbmRsZSA9IFJlc291cmNlSGFuZGxl
OjpjcmVhdGUobV9uZXR3b3JraW5nQ29udGV4dC5nZXQoKSwgbV9jdXJyZW50UmVxdWVzdCwgdGhp
cywgbV9kZWZlcnNMb2FkaW5nLCBzaG91bGRTbmlmZik7CkBAIC0yNTIsNyArMjU2LDcgQEAgdm9p
ZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmFib3J0KCkKIAogI2lmIFVTRShORVRXT1JLX1NFU1NJ
T04pCiAgICAgaWYgKG1fdGFzaykKLSAgICAgICAgbV90YXNrLT5zdXNwZW5kKCk7CisgICAgICAg
IG1fdGFzay0+Y2FuY2VsKCk7CiAgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyB3aXRoIHRoZSBu
ZXR3b3JrIGNhY2hlIGhlcmUuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICNlbHNlCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VM
b2FkZXIuaAkocmV2aXNpb24gMTkxOTQzKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMs
NyBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0PiBtX25l
dHdvcmtpbmdDb250ZXh0OwogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgUmVmUHRyPE5l
dHdvcmtpbmdEYXRhVGFzaz4gbV90YXNrOworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IG1f
dGFzazsKICNlbHNlCiAgICAgUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlSGFuZGxlPiBtX2hhbmRs
ZTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nl
c3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrU2Vzc2lvbi5oCShyZXZpc2lvbiAxOTE5NDMpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
IE9CSkNfQ0xBU1MgTlNVUkxTZXNzaW9uRGF0YVRhc2s7CiBPQkpDX0NMQVNTIE5TT3BlcmF0aW9u
UXVldWU7CiBPQkpDX0NMQVNTIE5ldHdvcmtTZXNzaW9uRGVsZWdhdGU7CiAKKyNpbmNsdWRlIDxX
ZWJDb3JlL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC03NCw0NiArNzUsNDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgfk5ldHdvcmtTZXNzaW9uVGFza0NsaWVudCgpIHsgfQog
fTsKIAotY2xhc3MgTmV0d29ya2luZ0RhdGFUYXNrIDogcHVibGljIFJlZkNvdW50ZWQ8TmV0d29y
a2luZ0RhdGFUYXNrPiB7CitjbGFzcyBOZXR3b3JrRGF0YVRhc2sgOiBwdWJsaWMgUmVmQ291bnRl
ZDxOZXR3b3JrRGF0YVRhc2s+IHsKICAgICBmcmllbmQgY2xhc3MgTmV0d29ya1Nlc3Npb247CiBw
dWJsaWM6Ci0gICAgdm9pZCBzdXNwZW5kKCk7CisgICAgdm9pZCBjYW5jZWwoKTsKICAgICB2b2lk
IHJlc3VtZSgpOwogCiAgICAgdWludDY0X3QgdGFza0lkZW50aWZpZXIoKTsKIAotICAgIH5OZXR3
b3JraW5nRGF0YVRhc2soKTsKKyAgICB+TmV0d29ya0RhdGFUYXNrKCk7CiAKICAgICBOZXR3b3Jr
U2Vzc2lvblRhc2tDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAgICAgdm9p
ZCBjbGVhckNsaWVudCgpIHsgbV9jbGllbnQgPSBudWxscHRyOyB9CiAKIHByaXZhdGU6Ci0gICAg
ZXhwbGljaXQgTmV0d29ya2luZ0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiwgTmV0d29ya1Nlc3Np
b25UYXNrQ2xpZW50JiwgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFUYXNrPik7CisgICAgZXhw
bGljaXQgTmV0d29ya0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiwgTmV0d29ya1Nlc3Npb25UYXNr
Q2xpZW50JiwgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFUYXNrPik7CiAKICAgICBOZXR3b3Jr
U2Vzc2lvbiYgbV9zZXNzaW9uOwogICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb25EYXRhVGFzaz4g
bV90YXNrOwogICAgIE5ldHdvcmtTZXNzaW9uVGFza0NsaWVudCogbV9jbGllbnQ7CiB9OwogCi1j
bGFzcyBOZXR3b3JrU2Vzc2lvbiA6IHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtTZXNzaW9uPiB7
Ci0gICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtpbmdEYXRhVGFzazsKK2NsYXNzIE5ldHdvcmtTZXNz
aW9uIHsKKyAgICBmcmllbmQgY2xhc3MgTmV0d29ya0RhdGFUYXNrOwogcHVibGljOgogICAgIGVu
dW0gY2xhc3MgVHlwZSB7CiAgICAgICAgIE5vcm1hbCwKICAgICAgICAgRXBoZW1lcmFsCiAgICAg
fTsKIAotICAgIFJlZjxOZXR3b3JraW5nRGF0YVRhc2s+IGNyZWF0ZURhdGFUYXNrV2l0aFJlcXVl
c3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgTmV0d29ya1Nlc3Npb25UYXNrQ2xp
ZW50Jik7CisgICAgc3RhdGljIE5ldHdvcmtTZXNzaW9uJiBkZWZhdWx0U2Vzc2lvbigpOworICAg
IAorICAgIFJlZjxOZXR3b3JrRGF0YVRhc2s+IGNyZWF0ZURhdGFUYXNrV2l0aFJlcXVlc3QoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgTmV0d29ya1Nlc3Npb25UYXNrQ2xpZW50Jik7
CiAKLSAgICBzdGF0aWMgUmVmPE5ldHdvcmtTZXNzaW9uPiBzaW5nbGV0b24oKTsgLy8gRklYTUU6
IFRoaXMgc2hvdWxkbid0IGFjdHVhbGx5IGJlIGEgc2luZ2xldG9uLgotICAgIE5ldHdvcmtpbmdE
YXRhVGFzayogZGF0YVRhc2tGb3JJZGVudGlmaWVyKHVpbnQ2NF90KTsKKyAgICBOZXR3b3JrRGF0
YVRhc2sqIGRhdGFUYXNrRm9ySWRlbnRpZmllcih1aW50NjRfdCk7CiAKLSAgICB+TmV0d29ya1Nl
c3Npb24oKSB7IEFTU0VSVChtX2RhdGFUYXNrTWFwLmlzRW1wdHkoKSk7IH0KLXByaXZhdGU6Ci0g
ICAgc3RhdGljIFJlZjxOZXR3b3JrU2Vzc2lvbj4gY3JlYXRlKFR5cGUpOworICAgIE5ldHdvcmtT
ZXNzaW9uKFR5cGUsIFdlYkNvcmU6OlNlc3Npb25JRCk7CisgICAgfk5ldHdvcmtTZXNzaW9uKCk7
CiAKLSAgICBOZXR3b3JrU2Vzc2lvbihUeXBlKTsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBOZXR3
b3JraW5nRGF0YVRhc2sqPiBtX2RhdGFUYXNrTWFwOworcHJpdmF0ZToKKyAgICBXZWJDb3JlOjpT
ZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CisgICAgSGFzaE1hcDx1aW50NjRfdCwgTmV0d29ya0RhdGFU
YXNrKj4gbV9kYXRhVGFza01hcDsKICAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uPiBtX3Nlc3Np
b247CiAgICAgUmV0YWluUHRyPE5ldHdvcmtTZXNzaW9uRGVsZWdhdGU+IG1fc2Vzc2lvbkRlbGVn
YXRlOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdv
cmtTZXNzaW9uQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQkocmV2aXNpb24gMTkxOTQzKQorKysg
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9BdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9DRk5ldHdvcmtTUEkuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvQ3JlZGVudGlhbC5oPgorI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3Jr
U3RvcmFnZVNlc3Npb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgogI2lt
cG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVzb3Vy
Y2VSZXNwb25zZS5oPgpAQCAtMTU4LDE3ICsxNTksNiBAQCAtICh2b2lkKVVSTFNlc3Npb246KE5T
VVJMU2Vzc2lvbiAqKXNlc3NpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIAotUmVmPE5ldHdv
cmtTZXNzaW9uPiBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKFR5cGUgdHlwZSkKLXsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrU2Vzc2lvbih0eXBlKSk7Ci19Ci0KLVJlZjxOZXR3b3Jr
U2Vzc2lvbj4gTmV0d29ya1Nlc3Npb246OnNpbmdsZXRvbigpCi17Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFJlZjxOZXR3b3JrU2Vzc2lvbj4+IHNoYXJlZEluc3RhbmNlKE5ldHdvcmtTZXNz
aW9uOjpjcmVhdGUoVHlwZTo6Tm9ybWFsKSk7Ci0gICAgcmV0dXJuIHNoYXJlZEluc3RhbmNlLmdl
dCgpLmNvcHlSZWYoKTsKLX0KLSAgICAKIHN0YXRpYyBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9u
ICpjb25maWd1cmF0aW9uRm9yVHlwZShOZXR3b3JrU2Vzc2lvbjo6VHlwZSB0eXBlKQogewogICAg
IHN3aXRjaCAodHlwZSkgewpAQCAtMTc5LDMxICsxNjksNTMgQEAgc3RhdGljIE5TVVJMU2Vzc2lv
bkNvbmZpZ3VyYXRpb24gKmNvbmZpZwogICAgIH0KIH0KIAotTmV0d29ya1Nlc3Npb246Ok5ldHdv
cmtTZXNzaW9uKFR5cGUgdHlwZSkKK3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Np
b24+JiBkZWZhdWx0TmV0d29ya1Nlc3Npb24oKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vz
c2lvbj4+IHNlc3Npb247CisgICAgcmV0dXJuIHNlc3Npb247Cit9CisKK05ldHdvcmtTZXNzaW9u
JiBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKQoreworICAgIGlmICghZGVmYXVsdE5l
dHdvcmtTZXNzaW9uKCkpCisgICAgICAgIGRlZmF1bHROZXR3b3JrU2Vzc2lvbigpID0gc3RkOjpt
YWtlX3VuaXF1ZTxOZXR3b3JrU2Vzc2lvbj4oTmV0d29ya1Nlc3Npb246OlR5cGU6Ok5vcm1hbCwg
V2ViQ29yZTo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOworICAgIHJldHVybiAqZGVm
YXVsdE5ldHdvcmtTZXNzaW9uKCk7Cit9CisKK05ldHdvcmtTZXNzaW9uOjpOZXR3b3JrU2Vzc2lv
bihUeXBlIHR5cGUsIFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQpCisgICAgOiBtX3Nlc3Np
b25JRChzZXNzaW9uSUQpCiB7CiAgICAgbV9zZXNzaW9uRGVsZWdhdGUgPSBhZG9wdE5TKFtbTmV0
d29ya1Nlc3Npb25EZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjoqdGhpc10p
OwogCiAgICAgTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IGNvbmZp
Z3VyYXRpb25Gb3JUeXBlKHR5cGUpOwotICAgIC8vIEZJWE1FOiBVc2UgU2Vzc2lvblRyYWNrZXIg
dG8gbWFrZSBzdXJlIHRoZSBjb3JyZWN0IGNvb2tpZSBzdG9yYWdlIGlzIHVzZWQgb25jZSB0aGVy
ZSBpcyBtb3JlIHRoYW4gb25lIE5ldHdvcmtTZXNzaW9uLgotICAgIGlmIChhdXRvKiBzZXNzaW9u
ID0gU2Vzc2lvblRyYWNrZXI6OnNlc3Npb24oV2ViQ29yZTo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCkpKSB7Ci0gICAgICAgIGlmIChDRkhUVFBDb29raWVTdG9yYWdlUmVmIHN0b3JhZ2Ug
PSBzZXNzaW9uLT5jb29raWVTdG9yYWdlKCkuZ2V0KCkpCisgICAgaWYgKGF1dG8qIHN0b3JhZ2VT
ZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpIHsKKyAg
ICAgICAgaWYgKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgc3RvcmFnZSA9IHN0b3JhZ2VTZXNzaW9u
LT5jb29raWVTdG9yYWdlKCkuZ2V0KCkpCiAgICAgICAgICAgICBjb25maWd1cmF0aW9uLkhUVFBD
b29raWVTdG9yYWdlID0gW1tbTlNIVFRQQ29va2llU3RvcmFnZSBhbGxvY10gX2luaXRXaXRoQ0ZI
VFRQQ29va2llU3RvcmFnZTpzdG9yYWdlXSBhdXRvcmVsZWFzZV07CiAgICAgfQogICAgIG1fc2Vz
c2lvbiA9IFtOU1VSTFNlc3Npb24gc2Vzc2lvbldpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRp
b24gZGVsZWdhdGU6c3RhdGljX2Nhc3Q8aWQ+KG1fc2Vzc2lvbkRlbGVnYXRlLmdldCgpKSBkZWxl
Z2F0ZVF1ZXVlOltOU09wZXJhdGlvblF1ZXVlIG1haW5RdWV1ZV1dOwogfQogCi1SZWY8TmV0d29y
a2luZ0RhdGFUYXNrPiBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlRGF0YVRhc2tXaXRoUmVxdWVzdChj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIE5ldHdvcmtTZXNzaW9uVGFz
a0NsaWVudCYgY2xpZW50KQorTmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbigpCit7Cisg
ICAgZm9yIChhdXRvKiBkYXRhVGFzayA6IG1fZGF0YVRhc2tNYXAudmFsdWVzKCkpIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZGF0YVRhc2spOworICAgICAgICBkYXRhVGFzay0+Y2FuY2VsKCk7
CisgICAgfQorfQorCitSZWY8TmV0d29ya0RhdGFUYXNrPiBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRl
RGF0YVRhc2tXaXRoUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIE5ldHdvcmtTZXNzaW9uVGFza0NsaWVudCYgY2xpZW50KQogewotICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IE5ldHdvcmtpbmdEYXRhVGFzaygqdGhpcywgY2xpZW50LCBbbV9zZXNzaW9uIGRh
dGFUYXNrV2l0aFJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6VXBkYXRlSFRU
UEJvZHkpXSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtEYXRhVGFzaygqdGhp
cywgY2xpZW50LCBbbV9zZXNzaW9uIGRhdGFUYXNrV2l0aFJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJl
cXVlc3QoV2ViQ29yZTo6VXBkYXRlSFRUUEJvZHkpXSkpOwogfQogCi1OZXR3b3JraW5nRGF0YVRh
c2sqIE5ldHdvcmtTZXNzaW9uOjpkYXRhVGFza0ZvcklkZW50aWZpZXIodWludDY0X3QgdGFza0lk
ZW50aWZpZXIpCitOZXR3b3JrRGF0YVRhc2sqIE5ldHdvcmtTZXNzaW9uOjpkYXRhVGFza0Zvcklk
ZW50aWZpZXIodWludDY0X3QgdGFza0lkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKICAgICByZXR1cm4gbV9kYXRhVGFza01hcC5nZXQodGFza0lkZW50aWZpZXIpOwog
fQogCi1OZXR3b3JraW5nRGF0YVRhc2s6Ok5ldHdvcmtpbmdEYXRhVGFzayhOZXR3b3JrU2Vzc2lv
biYgc2Vzc2lvbiwgTmV0d29ya1Nlc3Npb25UYXNrQ2xpZW50JiBjbGllbnQsIFJldGFpblB0cjxO
U1VSTFNlc3Npb25EYXRhVGFzaz4gdGFzaykKK05ldHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFU
YXNrKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQmIGNs
aWVudCwgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFUYXNrPiB0YXNrKQogICAgIDogbV9zZXNz
aW9uKHNlc3Npb24pCiAgICAgLCBtX3Rhc2sodGFzaykKICAgICAsIG1fY2xpZW50KCZjbGllbnQp
CkBAIC0yMTMsNyArMjI1LDcgQEAgTmV0d29ya2luZ0RhdGFUYXNrOjpOZXR3b3JraW5nRGF0YVRh
c2soTgogICAgIG1fc2Vzc2lvbi5tX2RhdGFUYXNrTWFwLmFkZCh0YXNrSWRlbnRpZmllcigpLCB0
aGlzKTsKIH0KIAotTmV0d29ya2luZ0RhdGFUYXNrOjp+TmV0d29ya2luZ0RhdGFUYXNrKCkKK05l
dHdvcmtEYXRhVGFzazo6fk5ldHdvcmtEYXRhVGFzaygpCiB7CiAgICAgQVNTRVJUKG1fc2Vzc2lv
bi5tX2RhdGFUYXNrTWFwLmNvbnRhaW5zKHRhc2tJZGVudGlmaWVyKCkpKTsKICAgICBBU1NFUlQo
bV9zZXNzaW9uLm1fZGF0YVRhc2tNYXAuZ2V0KHRhc2tJZGVudGlmaWVyKCkpID09IHRoaXMpOwpA
QCAtMjIxLDE3ICsyMzMsMTcgQEAgTmV0d29ya2luZ0RhdGFUYXNrOjp+TmV0d29ya2luZ0RhdGFU
YXNrKAogICAgIG1fc2Vzc2lvbi5tX2RhdGFUYXNrTWFwLnJlbW92ZSh0YXNrSWRlbnRpZmllcigp
KTsKIH0KIAotdm9pZCBOZXR3b3JraW5nRGF0YVRhc2s6OnN1c3BlbmQoKQordm9pZCBOZXR3b3Jr
RGF0YVRhc2s6OmNhbmNlbCgpCiB7Ci0gICAgW21fdGFzayBzdXNwZW5kXTsKKyAgICBbbV90YXNr
IGNhbmNlbF07CiB9CiAKLXZvaWQgTmV0d29ya2luZ0RhdGFUYXNrOjpyZXN1bWUoKQordm9pZCBO
ZXR3b3JrRGF0YVRhc2s6OnJlc3VtZSgpCiB7CiAgICAgW21fdGFzayByZXN1bWVdOwogfQogCi11
aW50NjRfdCBOZXR3b3JraW5nRGF0YVRhc2s6OnRhc2tJZGVudGlmaWVyKCkKK3VpbnQ2NF90IE5l
dHdvcmtEYXRhVGFzazo6dGFza0lkZW50aWZpZXIoKQogewogICAgIHJldHVybiBbbV90YXNrIHRh
c2tJZGVudGlmaWVyXTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21h
Yy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0JKHJldmlzaW9u
IDE5MTk0MykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3
b3JraW5nQ29udGV4dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2ltcG9y
dCAiUmVtb3RlTmV0d29ya2luZ0NvbnRleHQuaCIKIAogI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3Mu
aCIKKyNpbXBvcnQgIk5ldHdvcmtTZXNzaW9uLmgiCiAjaW1wb3J0ICJTZXNzaW9uVHJhY2tlci5o
IgogI2ltcG9ydCAiV2ViRXJyb3JzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlRXJyb3Iu
aD4KQEAgLTU1LDcgKzU2LDcgQEAgYm9vbCBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6bG9jYWxG
aWxlQwogCiBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0Ojpz
dG9yYWdlU2Vzc2lvbigpIGNvbnN0CiB7Ci0gICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzZXNz
aW9uID0gU2Vzc2lvblRyYWNrZXI6OnNlc3Npb24obV9zZXNzaW9uSUQpOworICAgIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbiogc2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbiht
X3Nlc3Npb25JRCk7CiAgICAgaWYgKHNlc3Npb24pCiAgICAgICAgIHJldHVybiAqc2Vzc2lvbjsK
ICAgICAvLyBTb21lIHJlcXVlc3RzIG1heSBzdGlsbCBiZSBjb21pbmcgc2hvcnRseSBhZnRlciBO
ZXR3b3JrUHJvY2VzcyB3YXMgdG9sZCB0byBkZXN0cm95IGl0cyBzZXNzaW9uLgpAQCAtODksMTEg
KzkwLDE1IEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXYKIHsKICAg
ICBBU1NFUlQoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpOwogCi0gICAgaWYgKFNlc3Npb25UcmFj
a2VyOjpzZXNzaW9uKHNlc3Npb25JRCkpCisgICAgaWYgKFNlc3Npb25UcmFja2VyOjpzdG9yYWdl
U2Vzc2lvbihzZXNzaW9uSUQpKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQoIVNlc3Np
b25UcmFja2VyOjpnZXRJZGVudGlmaWVyQmFzZSgpLmlzTnVsbCgpKTsKLSAgICBTZXNzaW9uVHJh
Y2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRl
UHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihTZXNzaW9uVHJhY2tlcjo6Z2V0SWRlbnRpZmllckJhc2Uo
KSArICcuJyArIFN0cmluZzo6bnVtYmVyKHNlc3Npb25JRC5zZXNzaW9uSUQoKSkpKTsKKyAgICBT
ZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTdG9yYWdlU2Vzc2lv
bjo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihTZXNzaW9uVHJhY2tlcjo6Z2V0SWRlbnRp
ZmllckJhc2UoKSArICcuJyArIFN0cmluZzo6bnVtYmVyKHNlc3Npb25JRC5zZXNzaW9uSUQoKSkp
CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICAgICAgLCBzdGQ6Om1ha2VfdW5pcXVlPE5l
dHdvcmtTZXNzaW9uPihOZXR3b3JrU2Vzc2lvbjo6VHlwZTo6RXBoZW1lcmFsLCBzZXNzaW9uSUQp
CisjZW5kaWYKKyAgICApOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2Vz
c2lvblRyYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZXNz
aW9uVHJhY2tlci5jcHAJKHJldmlzaW9uIDE5MTk0MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9TZXNzaW9uVHJhY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTZXNzaW9uVHJhY2tlci5oIgogCisjaW5jbHVk
ZSAiTmV0d29ya1Nlc3Npb24uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vz
c2lvbi5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9S
dW5Mb29wLmg+CiAKQEAgLTMzLDcgKzM1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMgSGFzaE1hcDxTZXNzaW9uSUQsIHN0ZDo6dW5p
cXVlX3B0cjxOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiYgc3RhdGljU2Vzc2lvbk1hcCgpCitzdGF0
aWMgSGFzaE1hcDxTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU3RvcmFnZVNlc3Np
b24+PiYgc3RhdGljU3RvcmFnZVNlc3Npb25NYXAoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAKQEAgLTU3LDkgKzU5LDkgQEAgc3RhdGljIFN0cmluZyYgaWRlbnRpZmllckJh
c2UoKQogICAgIHJldHVybiBiYXNlOwogfQogCi1jb25zdCBIYXNoTWFwPFNlc3Npb25JRCwgc3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4+JiBTZXNzaW9uVHJhY2tlcjo6c2Vz
c2lvbk1hcCgpCitjb25zdCBIYXNoTWFwPFNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbj4+JiBTZXNzaW9uVHJhY2tlcjo6c3RvcmFnZVNlc3Npb25NYXAoKQog
ewotICAgIHJldHVybiBzdGF0aWNTZXNzaW9uTWFwKCk7CisgICAgcmV0dXJuIHN0YXRpY1N0b3Jh
Z2VTZXNzaW9uTWFwKCk7CiB9CiAKIGNvbnN0IFN0cmluZyYgU2Vzc2lvblRyYWNrZXI6OmdldElk
ZW50aWZpZXJCYXNlKCkKQEAgLTY3LDEyICs2OSwyOSBAQCBjb25zdCBTdHJpbmcmIFNlc3Npb25U
cmFja2VyOjpnZXRJZGVudGlmCiAgICAgcmV0dXJuIGlkZW50aWZpZXJCYXNlKCk7CiB9CiAKLU5l
dHdvcmtTdG9yYWdlU2Vzc2lvbiogU2Vzc2lvblRyYWNrZXI6OnNlc3Npb24oU2Vzc2lvbklEIHNl
c3Npb25JRCkKK05ldHdvcmtTdG9yYWdlU2Vzc2lvbiogU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VT
ZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQpCiB7CiAgICAgaWYgKHNlc3Npb25JRCA9PSBTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKICAgICAgICAgcmV0dXJuICZOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOworICAgIHJldHVybiBzdGF0aWNTdG9y
YWdlU2Vzc2lvbk1hcCgpLmdldChzZXNzaW9uSUQpOworfQorCisjaWYgVVNFKE5FVFdPUktfU0VT
U0lPTikKK3N0YXRpYyBIYXNoTWFwPFNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtT
ZXNzaW9uPj4mIHN0YXRpY1Nlc3Npb25NYXAoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CisgICAgCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U2Vzc2lvbklE
LCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Npb24+Pj4gbWFwOworICAgIHJldHVybiBtYXAu
Z2V0KCk7Cit9CisKK05ldHdvcmtTZXNzaW9uKiBTZXNzaW9uVHJhY2tlcjo6bmV0d29ya1Nlc3Np
b24oU2Vzc2lvbklEIHNlc3Npb25JRCkKK3sKKyAgICBpZiAoc2Vzc2lvbklEID09IFNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKQorICAgICAgICByZXR1cm4gJk5ldHdvcmtTZXNzaW9uOjpk
ZWZhdWx0U2Vzc2lvbigpOwogICAgIHJldHVybiBzdGF0aWNTZXNzaW9uTWFwKCkuZ2V0KHNlc3Np
b25JRCk7CiB9CisjZW5kaWYKIAogU2Vzc2lvbklEIFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQo
Y29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uKQogewpAQCAtODEsMTkgKzEwMCwz
MiBAQCBTZXNzaW9uSUQgU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25JRChjb25zCiAgICAgcmV0dXJu
IHN0b3JhZ2VTZXNzaW9uVG9JRCgpLmdldCgmc2Vzc2lvbik7CiB9CiAKLXZvaWQgU2Vzc2lvblRy
YWNrZXI6OnNldFNlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbj4gc2Vzc2lvbikKK3ZvaWQgU2Vzc2lvblRyYWNrZXI6OnNldFNl
c3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbj4gc3RvcmFnZVNlc3Npb24KKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgICwg
c3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTZXNzaW9uPiBzZXNzaW9uCisjZW5kaWYKKykKIHsKKyAg
ICBBU1NFUlQoc3RvcmFnZVNlc3Npb24pOwogICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gU2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotICAgIHN0b3JhZ2VTZXNzaW9uVG9JRCgpLnNldChz
ZXNzaW9uLmdldCgpLCBzZXNzaW9uSUQpOworICAgIHN0b3JhZ2VTZXNzaW9uVG9JRCgpLnNldChz
dG9yYWdlU2Vzc2lvbi5nZXQoKSwgc2Vzc2lvbklEKTsKKyAgICBzdGF0aWNTdG9yYWdlU2Vzc2lv
bk1hcCgpLnNldChzZXNzaW9uSUQsIFdURjo6bW92ZShzdG9yYWdlU2Vzc2lvbikpOworI2lmIFVT
RShORVRXT1JLX1NFU1NJT04pCisgICAgQVNTRVJUKHNlc3Npb24pOwogICAgIHN0YXRpY1Nlc3Np
b25NYXAoKS5zZXQoc2Vzc2lvbklELCBXVEY6Om1vdmUoc2Vzc2lvbikpOworI2VuZGlmCiB9CiAK
IHZvaWQgU2Vzc2lvblRyYWNrZXI6OmRlc3Ryb3lTZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQp
CiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBpZiAoc3RhdGljU2Vzc2lv
bk1hcCgpLmNvbnRhaW5zKHNlc3Npb25JRCkpIHsKLSAgICAgICAgc3RvcmFnZVNlc3Npb25Ub0lE
KCkucmVtb3ZlKHNlc3Npb24oc2Vzc2lvbklEKSk7CisgICAgaWYgKHN0YXRpY1N0b3JhZ2VTZXNz
aW9uTWFwKCkuY29udGFpbnMoc2Vzc2lvbklEKSkgeworI2lmIFVTRShORVRXT1JLX1NFU1NJT04p
CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uoc3RhdGljU2Vzc2lvbk1hcCgpLmNvbnRhaW5z
KHNlc3Npb25JRCksICJOZXR3b3JrU2Vzc2lvbnMgYW5kIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbnMg
c2hvdWxkIGFsd2F5cyBiZSBjcmVhdGVkLCBkZWxldGVkLCBhbmQgbWFuYWdlZCBhcyBwYWlycyIp
OwogICAgICAgICBzdGF0aWNTZXNzaW9uTWFwKCkucmVtb3ZlKHNlc3Npb25JRCk7CisjZW5kaWYK
KyAgICAgICAgc3RvcmFnZVNlc3Npb25Ub0lEKCkucmVtb3ZlKHN0b3JhZ2VTZXNzaW9uKHNlc3Np
b25JRCkpOworICAgICAgICBzdGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCgpLnJlbW92ZShzZXNzaW9u
SUQpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1Nlc3Npb25UcmFj
a2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1Nlc3Npb25UcmFja2Vy
LmgJKHJldmlzaW9uIDE5MTk0MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZXNzaW9uVHJh
Y2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyNSArMjYsNDAgQEAKICNpZm5kZWYgU2Vzc2lv
blRyYWNrZXJfaAogI2RlZmluZSBTZXNzaW9uVHJhY2tlcl9oCiAKLSNpbmNsdWRlIDxXZWJDb3Jl
L05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOworfQorCiAjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIE5ldHdvcmtTZXNzaW9uOworCiBj
bGFzcyBTZXNzaW9uVHJhY2tlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2Vzc2lvblRy
YWNrZXIpOwogcHVibGljOgotICAgIC8vIEZJWE1FOiBzZXNzaW9uTWFwKCkncyByZXR1cm5lZCBt
YXAgZG9lcyBub3QgaW5jbHVkZSBkZWZhdWx0IHNlc3Npb24uCi0gICAgc3RhdGljIGNvbnN0IEhh
c2hNYXA8V2ViQ29yZTo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uPj4mIHNlc3Npb25NYXAoKTsKKyAgICAvLyBGSVhNRTogc3RvcmFnZVNl
c3Npb25NYXAoKSdzIHJldHVybmVkIG1hcCBkb2VzIG5vdCBpbmNsdWRlIGRlZmF1bHQgc2Vzc2lv
bi4KKyAgICBzdGF0aWMgY29uc3QgSGFzaE1hcDxXZWJDb3JlOjpTZXNzaW9uSUQsIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiYgc3RvcmFnZVNlc3Npb25N
YXAoKTsKKwogICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIGdldElkZW50aWZpZXJCYXNlKCk7Ci0g
ICAgc3RhdGljIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc2Vzc2lvbihXZWJDb3Jl
OjpTZXNzaW9uSUQpOworICAgIHN0YXRpYyBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24q
IHN0b3JhZ2VTZXNzaW9uKFdlYkNvcmU6OlNlc3Npb25JRCk7CiAgICAgc3RhdGljIFdlYkNvcmU6
OlNlc3Npb25JRCBzZXNzaW9uSUQoY29uc3QgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
Jik7Ci0gICAgc3RhdGljIHZvaWQgc2V0U2Vzc2lvbihXZWJDb3JlOjpTZXNzaW9uSUQsIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KTsKKyAgICBzdGF0aWMg
dm9pZCBzZXRTZXNzaW9uKFdlYkNvcmU6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4KKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAg
ICAgICAsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4KKyNlbmRpZgorICAgICk7CiAg
ICAgc3RhdGljIHZvaWQgZGVzdHJveVNlc3Npb24oV2ViQ29yZTo6U2Vzc2lvbklEKTsKICAgICBz
dGF0aWMgdm9pZCBzZXRJZGVudGlmaWVyQmFzZShjb25zdCBTdHJpbmcmKTsKKyAgICAKKyNpZiBV
U0UoTkVUV09SS19TRVNTSU9OKQorICAgIC8vIEZJWE1FOiBBIE5ldHdvcmtTZXNzaW9uIGFuZCBh
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiBzaG91bGQgYmUgdGhlIHNhbWUgb2JqZWN0IG9uY2UgTkVU
V09SS19TRVNTSU9OIGlzIHVzZWQgYnkgZGVmYXVsdC4KKyAgICBzdGF0aWMgTmV0d29ya1Nlc3Np
b24qIG5ldHdvcmtTZXNzaW9uKFdlYkNvcmU6OlNlc3Npb25JRCk7CisjZW5kaWYKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0Lm1tCShyZXZpc2lvbiAxOTE5NDMpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIgogCisjaW5jbHVkZSAiTmV0d29y
a1Nlc3Npb24uaCIKICNpbmNsdWRlICJTZXNzaW9uVHJhY2tlci5oIgogI2luY2x1ZGUgIldlYkNv
b2tpZU1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCkBAIC00Nyw3ICs0OCw3IEBAIHZv
aWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHIKIHsKICAgICBBU1NFUlQoc2Vz
c2lvbklELmlzRXBoZW1lcmFsKCkpOwogCi0gICAgaWYgKFNlc3Npb25UcmFja2VyOjpzZXNzaW9u
KHNlc3Npb25JRCkpCisgICAgaWYgKFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbihzZXNz
aW9uSUQpKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgYmFzZTsKQEAgLTU2LDcgKzU3
LDExIEBAIHZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHIKICAgICBlbHNl
CiAgICAgICAgIGJhc2UgPSBTZXNzaW9uVHJhY2tlcjo6Z2V0SWRlbnRpZmllckJhc2UoKTsKIAot
ICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKGJhc2UgKyAnLicgKyBTdHJpbmc6
Om51bWJlcihzZXNzaW9uSUQuc2Vzc2lvbklEKCkpKSk7CisgICAgU2Vzc2lvblRyYWNrZXI6OnNl
dFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0ZVByaXZhdGVC
cm93c2luZ1Nlc3Npb24oYmFzZSArICcuJyArIFN0cmluZzo6bnVtYmVyKHNlc3Npb25JRC5zZXNz
aW9uSUQoKSkpCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICAgICAgLCBzdGQ6Om1ha2Vf
dW5pcXVlPE5ldHdvcmtTZXNzaW9uPihOZXR3b3JrU2Vzc2lvbjo6VHlwZTo6RXBoZW1lcmFsLCBz
ZXNzaW9uSUQpCisjZW5kaWYKKyAgICApOwogfQogCiB2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0Nv
bnRleHQ6OnNldENvb2tpZUFjY2VwdFBvbGljeUZvckFsbENvbnRleHRzKEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kgcG9saWN5KQpAQCAtNjYsNyArNzEsNyBAQCB2b2lkIFdlYkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQ6OnNldENvb2tpCiAgICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdl
UmVmPiBjb29raWVTdG9yYWdlID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFn
ZVNlc3Npb24oKS5jb29raWVTdG9yYWdlKCkpCiAgICAgICAgIFdLU2V0SFRUUENvb2tpZUFjY2Vw
dFBvbGljeShjb29raWVTdG9yYWdlLmdldCgpLCBwb2xpY3kpOwogCi0gICAgZm9yIChjb25zdCBh
dXRvJiBzZXNzaW9uIDogU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25NYXAoKS52YWx1ZXMoKSkgewor
ICAgIGZvciAoY29uc3QgYXV0byYgc2Vzc2lvbiA6IFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vz
c2lvbk1hcCgpLnZhbHVlcygpKSB7CiAgICAgICAgIGlmIChzZXNzaW9uKQogICAgICAgICAgICAg
V0tTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHNlc3Npb24tPmNvb2tpZVN0b3JhZ2UoKS5nZXQo
KSwgcG9saWN5KTsKICAgICB9CkBAIC0xMTAsOCArMTE1LDggQEAgTmV0d29ya1N0b3JhZ2VTZXNz
aW9uJiBXZWJGcmFtZU5ldHdvcmtpbgogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAgICAgaWYgKGZyYW1lKCkpIHsKLSAgICAgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiog
c2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpzZXNzaW9uKGZyYW1lKCktPnBhZ2UoKS0+c2Vzc2lv
bklEKCkpKQotICAgICAgICAgICAgcmV0dXJuICpzZXNzaW9uOworICAgICAgICBpZiAoYXV0byog
c3RvcmFnZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c3RvcmFnZVNlc3Npb24oZnJhbWUoKS0+
cGFnZSgpLT5zZXNzaW9uSUQoKSkpCisgICAgICAgICAgICByZXR1cm4gKnN0b3JhZ2VTZXNzaW9u
OwogICAgICAgICAvLyBTb21lIHJlcXVlc3RzIG1heSBzdGlsbCBiZSBjb21pbmcgc2hvcnRseSBh
ZnRlciBXZWJQcm9jZXNzIHdhcyB0b2xkIHRvIGRlc3Ryb3kgaXRzIHNlc3Npb24uCiAgICAgICAg
IExPR19FUlJPUigiSW52YWxpZCBzZXNzaW9uIElELiBQbGVhc2UgZmlsZSBhIGJ1ZyB1bmxlc3Mg
eW91IGp1c3QgZGlzYWJsZWQgcHJpdmF0ZSBicm93c2luZywgaW4gd2hpY2ggY2FzZSBpdCdzIGFu
IGV4cGVjdGVkIHJhY2UuIik7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264728</attachid>
            <date>2015-11-03 14:37:53 -0800</date>
            <delta_ts>2015-11-03 14:47:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150857-20151103143657.patch</filename>
            <type>text/plain</type>
            <size>26602</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTk4MCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDE1LTExLTAzICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ3JlYXRlIGEg
TmV0d29ya1Nlc3Npb24gZm9yIGVhY2ggU2Vzc2lvbklECisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbmFtZXMgU2Vzc2lvblRyYWNr
ZXI6OnNlc3Npb24gdG8gc3RvcmFnZVNlc3Npb24gYW5kIG1ha2VzIGEgcGFyYWxsZWwKKyAgICAg
ICAgc3RydWN0dXJlIGZvciBOZXR3b3JrU2Vzc2lvbnMuICBOZXR3b3JrU2Vzc2lvbiBhbmQgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uIHNob3VsZCBldmVudHVhbGx5CisgICAgICAgIGJlY29tZSB0aGUg
c2FtZSBjbGFzcyBpbiBXZWJDb3JlLiAgQmVjYXVzZSBub3QgZXZlcnlib2R5IHVzZXMgTmV0d29y
a1Nlc3Npb25zIHlldCwKKyAgICAgICAgd2Uga2VlcCB0aGVtIHNlcGFyYXRlIGJ1dCBjcmVhdGVk
LCBkZXN0cm95ZWQsIGFuZCBtYW5hZ2VkIHRvZ2V0aGVyLgorCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpzdG9yYWdlU2Vzc2lvbik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0
YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9y
aWdpbnMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnROZXR3b3Jr
TG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YWJvcnQpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmg6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtTZXNzaW9uVGFza0NsaWVudDo6fk5ldHdvcmtTZXNzaW9uVGFza0NsaWVudCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrOjpjbGVhckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtp
bmdEYXRhVGFzazo6Y2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2lu
Z0RhdGFUYXNrOjpjbGVhckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtTZXNzaW9uOjp+TmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OmNv
bmZpZ3VyYXRpb25Gb3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6ZGVmYXVsdE5ldHdvcmtTZXNz
aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpjcmVhdGVEYXRhVGFza1dpdGhSZXF1ZXN0KToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmRhdGFUYXNrRm9ySWRlbnRpZmllcik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFUYXNrKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
RGF0YVRhc2s6OnJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6dGFz
a0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OnNpbmdsZXRvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFzazo6TmV0d29ya2luZ0Rh
dGFUYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2luZ0RhdGFUYXNrOjp+
TmV0d29ya2luZ0RhdGFUYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2lu
Z0RhdGFUYXNrOjpzdXNwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2lu
Z0RhdGFUYXNrOjpyZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JraW5n
RGF0YVRhc2s6OnRhc2tJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZU5ldHdvcmtpbmdDb250ZXh0OjpzdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKToK
KyAgICAgICAgKiBTaGFyZWQvU2Vzc2lvblRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViS2l0Ojpz
dGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCk6CisgICAgICAgIChXZWJLaXQ6OmlkZW50aWZpZXJCYXNl
KToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uTWFwKToK
KyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OmdldElkZW50aWZpZXJCYXNlKToKKyAg
ICAgICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAg
KFdlYktpdDo6c3RhdGljU2Vzc2lvbk1hcCk6CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25UcmFj
a2VyOjpuZXR3b3JrU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpz
ZXNzaW9uSUQpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbik6
CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpkZXN0cm95U2Vzc2lvbik6CisgICAg
ICAgIChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpzZXNzaW9uTWFwKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OnNlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAq
IFNoYXJlZC9TZXNzaW9uVHJhY2tlci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRDb29raWVB
Y2NlcHRQb2xpY3lGb3JBbGxDb250ZXh0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQ6OnN0b3JhZ2VTZXNzaW9uKToKKwogMjAxNS0xMS0wMyAgQW5kZXJzIENh
cmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5IC1bX1dLUmVt
b3RlT2JqZWN0UmVnaXN0cnkgX2ludm9rZU1ldGhvZDpdCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwCShyZXZpc2lvbiAxOTE5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2OCw5ICsxNjgsOSBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpw
cmVmCiBzdGF0aWMgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzdG9yYWdlU2Vzc2lvbihTZXNzaW9u
SUQgc2Vzc2lvbklEKQogewogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkgewotICAg
ICAgICBOZXR3b3JrU3RvcmFnZVNlc3Npb24qIHByaXZhdGVTZXNzaW9uID0gU2Vzc2lvblRyYWNr
ZXI6OnNlc3Npb24oc2Vzc2lvbklEKTsKLSAgICAgICAgaWYgKHByaXZhdGVTZXNzaW9uKQotICAg
ICAgICAgICAgcmV0dXJuICpwcml2YXRlU2Vzc2lvbjsKKyAgICAgICAgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKiBwcml2YXRlU3RvcmFnZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c3RvcmFnZVNl
c3Npb24oc2Vzc2lvbklEKTsKKyAgICAgICAgaWYgKHByaXZhdGVTdG9yYWdlU2Vzc2lvbikKKyAg
ICAgICAgICAgIHJldHVybiAqcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uOwogICAgICAgICAvLyBTb21l
IHJlcXVlc3RzIHdpdGggcHJpdmF0ZSBicm93c2luZyBtb2RlIHJlcXVlc3RlZCBtYXkgc3RpbGwg
YmUgY29taW5nIHNob3J0bHkgYWZ0ZXIgTmV0d29ya1Byb2Nlc3Mgd2FzIHRvbGQgdG8gZGVzdHJv
eSBpdHMgc2Vzc2lvbi4KICAgICAgICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8gdHJhY2sgcHJp
dmF0ZSBicm93c2luZyBzZXNzaW9ucyBtb3JlIHJpZ29yb3VzbHkuCiAgICAgICAgIExPR19FUlJP
UigiUHJpdmF0ZSBicm93c2luZyB3YXMgcmVxdWVzdGVkLCBidXQgdGhlcmUgd2FzIG5vIHNlc3Np
b24gZm9yIGl0LiBQbGVhc2UgZmlsZSBhIGJ1ZyB1bmxlc3MgeW91IGp1c3QgZGlzYWJsZWQgcHJp
dmF0ZSBicm93c2luZywgaW4gd2hpY2ggY2FzZSBpdCdzIGFuIGV4cGVjdGVkIHJhY2UuIik7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwCShyZXZpc2lvbiAxOTE5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNyw3ICszMzcsNyBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKFNlCiAgICAgfSkpOwogCiAgICAgaWYg
KHdlYnNpdGVEYXRhVHlwZXMgJiBXZWJzaXRlRGF0YVR5cGVDb29raWVzKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBuZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbihz
ZXNzaW9uSUQpKQorICAgICAgICBpZiAoYXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gU2Vz
c2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgICAgICBnZXRI
b3N0bmFtZXNXaXRoQ29va2llcygqbmV0d29ya1N0b3JhZ2VTZXNzaW9uLCBjYWxsYmFja0FnZ3Jl
Z2F0b3ItPm1fd2Vic2l0ZURhdGEuaG9zdE5hbWVzV2l0aENvb2tpZXMpOwogICAgIH0KIApAQCAt
MzUyLDEzICszNTIsMTMgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGEo
UwogewogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzICYgV2Vi
c2l0ZURhdGFUeXBlSFNUU0NhY2hlKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU3RvcmFn
ZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbihzZXNzaW9uSUQpKQorICAgICAgICBp
ZiAoYXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VT
ZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgICAgICBjbGVhckhTVFNDYWNoZSgqbmV0d29ya1N0
b3JhZ2VTZXNzaW9uLCBtb2RpZmllZFNpbmNlKTsKICAgICB9CiAjZW5kaWYKIAogICAgIGlmICh3
ZWJzaXRlRGF0YVR5cGVzICYgV2Vic2l0ZURhdGFUeXBlQ29va2llcykgewotICAgICAgICBpZiAo
YXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6OnNlc3Npb24oc2Vz
c2lvbklEKSkKKyAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IFNlc3Np
b25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQogICAgICAgICAgICAgZGVsZXRl
QWxsQ29va2llc01vZGlmaWVkU2luY2UoKm5ldHdvcmtTdG9yYWdlU2Vzc2lvbiwgbW9kaWZpZWRT
aW5jZSk7CiAgICAgfQogCkBAIC00MTgsNyArNDE4LDcgQEAgc3RhdGljIHZvaWQgY2xlYXJEaXNr
Q2FjaGVFbnRyaWVzKGNvbnN0IAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURh
dGFGb3JPcmlnaW5zKFNlc3Npb25JRCBzZXNzaW9uSUQsIHVpbnQ2NF90IHdlYnNpdGVEYXRhVHlw
ZXMsIGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiBvcmlnaW5zLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgY29va2llSG9zdE5hbWVzLCB1aW50NjRfdCBjYWxsYmFja0lEKQogewogICAg
IGlmICh3ZWJzaXRlRGF0YVR5cGVzICYgV2Vic2l0ZURhdGFUeXBlQ29va2llcykgewotICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6OnNlc3Np
b24oc2Vzc2lvbklEKSkKKyAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9
IFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQogICAgICAgICAgICAg
ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcygqbmV0d29ya1N0b3JhZ2VTZXNzaW9uLCBjb29raWVI
b3N0TmFtZXMpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAxOTE5ODAp
CisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiTmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2Fk
UGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgiCisjaW5j
bHVkZSAiU2Vzc2lvblRyYWNrZXIuaCIKICNpbmNsdWRlICJTaGFyZWFibGVSZXNvdXJjZS5oIgog
I2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVy
cy5oIgpAQCAtMTg5LDcgKzE5MCwxMCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3Rh
cnROZXR3b3JrCiAgICAgYm9vbCBzaG91bGRTbmlmZiA9IG1fcGFyYW1ldGVycy5jb250ZW50U25p
ZmZpbmdQb2xpY3kgPT0gU25pZmZDb250ZW50OwogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAg
ICAgVU5VU0VEX1BBUkFNKHNob3VsZFNuaWZmKTsgLy8gRklYTUU6IFVzZSB0aGlzLgotICAgIG1f
dGFzayA9IE5ldHdvcmtTZXNzaW9uOjpzaW5nbGV0b24oKS0+Y3JlYXRlRGF0YVRhc2tXaXRoUmVx
dWVzdChtX2N1cnJlbnRSZXF1ZXN0LCAqdGhpcyk7CisKKyAgICBhdXRvKiBuZXR3b3JrU2Vzc2lv
biA9IFNlc3Npb25UcmFja2VyOjpuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQoKSk7CisgICAgUkVM
RUFTRV9BU1NFUlQobmV0d29ya1Nlc3Npb24pOworICAgIG1fdGFzayA9IG5ldHdvcmtTZXNzaW9u
LT5jcmVhdGVEYXRhVGFza1dpdGhSZXF1ZXN0KG1fY3VycmVudFJlcXVlc3QsICp0aGlzKTsKICAg
ICBtX3Rhc2stPnJlc3VtZSgpOwogI2Vsc2UKICAgICBtX2hhbmRsZSA9IFJlc291cmNlSGFuZGxl
OjpjcmVhdGUobV9uZXR3b3JraW5nQ29udGV4dC5nZXQoKSwgbV9jdXJyZW50UmVxdWVzdCwgdGhp
cywgbV9kZWZlcnNMb2FkaW5nLCBzaG91bGRTbmlmZik7CkBAIC0yNTIsNyArMjU2LDcgQEAgdm9p
ZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmFib3J0KCkKIAogI2lmIFVTRShORVRXT1JLX1NFU1NJ
T04pCiAgICAgaWYgKG1fdGFzaykKLSAgICAgICAgbV90YXNrLT5zdXNwZW5kKCk7CisgICAgICAg
IG1fdGFzay0+Y2FuY2VsKCk7CiAgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyB3aXRoIHRoZSBu
ZXR3b3JrIGNhY2hlIGhlcmUuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICNlbHNlCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VM
b2FkZXIuaAkocmV2aXNpb24gMTkxOTgwKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMs
NyBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0PiBtX25l
dHdvcmtpbmdDb250ZXh0OwogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgUmVmUHRyPE5l
dHdvcmtpbmdEYXRhVGFzaz4gbV90YXNrOworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IG1f
dGFzazsKICNlbHNlCiAgICAgUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlSGFuZGxlPiBtX2hhbmRs
ZTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nl
c3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrU2Vzc2lvbi5oCShyZXZpc2lvbiAxOTE5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
IE9CSkNfQ0xBU1MgTlNVUkxTZXNzaW9uRGF0YVRhc2s7CiBPQkpDX0NMQVNTIE5TT3BlcmF0aW9u
UXVldWU7CiBPQkpDX0NMQVNTIE5ldHdvcmtTZXNzaW9uRGVsZWdhdGU7CiAKKyNpbmNsdWRlIDxX
ZWJDb3JlL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC03NCw0OCArNzUsNTIg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgfk5ldHdvcmtTZXNzaW9uVGFza0NsaWVudCgpIHsgfQog
fTsKIAotY2xhc3MgTmV0d29ya2luZ0RhdGFUYXNrIDogcHVibGljIFJlZkNvdW50ZWQ8TmV0d29y
a2luZ0RhdGFUYXNrPiB7CitjbGFzcyBOZXR3b3JrRGF0YVRhc2sgOiBwdWJsaWMgUmVmQ291bnRl
ZDxOZXR3b3JrRGF0YVRhc2s+IHsKICAgICBmcmllbmQgY2xhc3MgTmV0d29ya1Nlc3Npb247CiBw
dWJsaWM6Ci0gICAgdm9pZCBzdXNwZW5kKCk7CisgICAgdm9pZCBjYW5jZWwoKTsKICAgICB2b2lk
IHJlc3VtZSgpOwogCiAgICAgdWludDY0X3QgdGFza0lkZW50aWZpZXIoKTsKIAotICAgIH5OZXR3
b3JraW5nRGF0YVRhc2soKTsKKyAgICB+TmV0d29ya0RhdGFUYXNrKCk7CiAKICAgICBOZXR3b3Jr
U2Vzc2lvblRhc2tDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAgICAgdm9p
ZCBjbGVhckNsaWVudCgpIHsgbV9jbGllbnQgPSBudWxscHRyOyB9CiAKIHByaXZhdGU6Ci0gICAg
ZXhwbGljaXQgTmV0d29ya2luZ0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiwgTmV0d29ya1Nlc3Np
b25UYXNrQ2xpZW50JiwgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFUYXNrPik7Ci0KICAgICBO
ZXR3b3JrU2Vzc2lvbiYgbV9zZXNzaW9uOwotICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb25EYXRh
VGFzaz4gbV90YXNrOwogICAgIE5ldHdvcmtTZXNzaW9uVGFza0NsaWVudCogbV9jbGllbnQ7Cisj
aWYgUExBVEZPUk0oQ09DT0EpCisgICAgZXhwbGljaXQgTmV0d29ya0RhdGFUYXNrKE5ldHdvcmtT
ZXNzaW9uJiwgTmV0d29ya1Nlc3Npb25UYXNrQ2xpZW50JiwgUmV0YWluUHRyPE5TVVJMU2Vzc2lv
bkRhdGFUYXNrPik7CisgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFUYXNrPiBtX3Rhc2s7
CisjZW5kaWYKIH07CiAKLWNsYXNzIE5ldHdvcmtTZXNzaW9uIDogcHVibGljIFJlZkNvdW50ZWQ8
TmV0d29ya1Nlc3Npb24+IHsKLSAgICBmcmllbmQgY2xhc3MgTmV0d29ya2luZ0RhdGFUYXNrOwor
Y2xhc3MgTmV0d29ya1Nlc3Npb24geworICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JrRGF0YVRhc2s7
CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBUeXBlIHsKICAgICAgICAgTm9ybWFsLAogICAgICAg
ICBFcGhlbWVyYWwKICAgICB9OwogCi0gICAgUmVmPE5ldHdvcmtpbmdEYXRhVGFzaz4gY3JlYXRl
RGF0YVRhc2tXaXRoUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBOZXR3
b3JrU2Vzc2lvblRhc2tDbGllbnQmKTsKKyAgICBzdGF0aWMgTmV0d29ya1Nlc3Npb24mIGRlZmF1
bHRTZXNzaW9uKCk7CisgICAgCisgICAgUmVmPE5ldHdvcmtEYXRhVGFzaz4gY3JlYXRlRGF0YVRh
c2tXaXRoUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBOZXR3b3JrU2Vz
c2lvblRhc2tDbGllbnQmKTsKIAotICAgIHN0YXRpYyBSZWY8TmV0d29ya1Nlc3Npb24+IHNpbmds
ZXRvbigpOyAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYWN0dWFsbHkgYmUgYSBzaW5nbGV0b24u
Ci0gICAgTmV0d29ya2luZ0RhdGFUYXNrKiBkYXRhVGFza0ZvcklkZW50aWZpZXIodWludDY0X3Qp
OworICAgIE5ldHdvcmtEYXRhVGFzayogZGF0YVRhc2tGb3JJZGVudGlmaWVyKHVpbnQ2NF90KTsK
IAotICAgIH5OZXR3b3JrU2Vzc2lvbigpIHsgQVNTRVJUKG1fZGF0YVRhc2tNYXAuaXNFbXB0eSgp
KTsgfQotcHJpdmF0ZToKLSAgICBzdGF0aWMgUmVmPE5ldHdvcmtTZXNzaW9uPiBjcmVhdGUoVHlw
ZSk7CisgICAgTmV0d29ya1Nlc3Npb24oVHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklEKTsKKyAgICB+
TmV0d29ya1Nlc3Npb24oKTsKIAotICAgIE5ldHdvcmtTZXNzaW9uKFR5cGUpOwotICAgIEhhc2hN
YXA8dWludDY0X3QsIE5ldHdvcmtpbmdEYXRhVGFzayo+IG1fZGF0YVRhc2tNYXA7Citwcml2YXRl
OgorICAgIFdlYkNvcmU6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKKyAgICBIYXNoTWFwPHVpbnQ2
NF90LCBOZXR3b3JrRGF0YVRhc2sqPiBtX2RhdGFUYXNrTWFwOworI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb24+IG1fc2Vzc2lvbjsKICAgICBSZXRhaW5QdHI8
TmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gbV9zZXNzaW9uRGVsZWdhdGU7CisjZW5kaWYKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCShyZXZpc2lv
biAxOTE5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
U2Vzc2lvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0
IDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NG
TmV0d29ya1NQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9DcmVkZW50aWFsLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJj
ZUVycm9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CkBAIC0xNTgsMTcgKzE1OSw2IEBAIC0gKHZvaWQp
VVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2kKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAg
ICAgCi1SZWY8TmV0d29ya1Nlc3Npb24+IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoVHlwZSB0eXBl
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtTZXNzaW9uKHR5cGUpKTsKLX0K
LQotUmVmPE5ldHdvcmtTZXNzaW9uPiBOZXR3b3JrU2Vzc2lvbjo6c2luZ2xldG9uKCkKLXsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmPE5ldHdvcmtTZXNzaW9uPj4gc2hhcmVkSW5zdGFu
Y2UoTmV0d29ya1Nlc3Npb246OmNyZWF0ZShUeXBlOjpOb3JtYWwpKTsKLSAgICByZXR1cm4gc2hh
cmVkSW5zdGFuY2UuZ2V0KCkuY29weVJlZigpOwotfQotICAgIAogc3RhdGljIE5TVVJMU2Vzc2lv
bkNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb25Gb3JUeXBlKE5ldHdvcmtTZXNzaW9uOjpUeXBl
IHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0xNzksMzEgKzE2OSw1MyBAQCBzdGF0
aWMgTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiAqY29uZmlnCiAgICAgfQogfQogCi1OZXR3b3Jr
U2Vzc2lvbjo6TmV0d29ya1Nlc3Npb24oVHlwZSB0eXBlKQorc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxOZXR3b3JrU2Vzc2lvbj4mIGRlZmF1bHROZXR3b3JrU2Vzc2lvbigpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3RkOjp1bmlxdWVf
cHRyPE5ldHdvcmtTZXNzaW9uPj4gc2Vzc2lvbjsKKyAgICByZXR1cm4gc2Vzc2lvbjsKK30KKwor
TmV0d29ya1Nlc3Npb24mIE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigpCit7CisgICAg
aWYgKCFkZWZhdWx0TmV0d29ya1Nlc3Npb24oKSkKKyAgICAgICAgZGVmYXVsdE5ldHdvcmtTZXNz
aW9uKCkgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTZXNzaW9uPihOZXR3b3JrU2Vzc2lvbjo6
VHlwZTo6Tm9ybWFsLCBXZWJDb3JlOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Cisg
ICAgcmV0dXJuICpkZWZhdWx0TmV0d29ya1Nlc3Npb24oKTsKK30KKworTmV0d29ya1Nlc3Npb246
Ok5ldHdvcmtTZXNzaW9uKFR5cGUgdHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCkK
KyAgICA6IG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKIHsKICAgICBtX3Nlc3Npb25EZWxlZ2F0ZSA9
IGFkb3B0TlMoW1tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aE5ldHdvcmtT
ZXNzaW9uOip0aGlzXSk7CiAKICAgICBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uICpjb25maWd1
cmF0aW9uID0gY29uZmlndXJhdGlvbkZvclR5cGUodHlwZSk7Ci0gICAgLy8gRklYTUU6IFVzZSBT
ZXNzaW9uVHJhY2tlciB0byBtYWtlIHN1cmUgdGhlIGNvcnJlY3QgY29va2llIHN0b3JhZ2UgaXMg
dXNlZCBvbmNlIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgTmV0d29ya1Nlc3Npb24uCi0gICAgaWYg
KGF1dG8qIHNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbihXZWJDb3JlOjpTZXNzaW9u
SUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkpIHsKLSAgICAgICAgaWYgKENGSFRUUENvb2tpZVN0b3Jh
Z2VSZWYgc3RvcmFnZSA9IHNlc3Npb24tPmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSkKKyAgICBpZiAo
YXV0byogc3RvcmFnZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c3RvcmFnZVNlc3Npb24oc2Vz
c2lvbklEKSkgeworICAgICAgICBpZiAoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBzdG9yYWdlID0g
c3RvcmFnZVNlc3Npb24tPmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSkKICAgICAgICAgICAgIGNvbmZp
Z3VyYXRpb24uSFRUUENvb2tpZVN0b3JhZ2UgPSBbW1tOU0hUVFBDb29raWVTdG9yYWdlIGFsbG9j
XSBfaW5pdFdpdGhDRkhUVFBDb29raWVTdG9yYWdlOnN0b3JhZ2VdIGF1dG9yZWxlYXNlXTsKICAg
ICB9CiAgICAgbV9zZXNzaW9uID0gW05TVVJMU2Vzc2lvbiBzZXNzaW9uV2l0aENvbmZpZ3VyYXRp
b246Y29uZmlndXJhdGlvbiBkZWxlZ2F0ZTpzdGF0aWNfY2FzdDxpZD4obV9zZXNzaW9uRGVsZWdh
dGUuZ2V0KCkpIGRlbGVnYXRlUXVldWU6W05TT3BlcmF0aW9uUXVldWUgbWFpblF1ZXVlXV07CiB9
CiAKLVJlZjxOZXR3b3JraW5nRGF0YVRhc2s+IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGVEYXRhVGFz
a1dpdGhSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgTmV0
d29ya1Nlc3Npb25UYXNrQ2xpZW50JiBjbGllbnQpCitOZXR3b3JrU2Vzc2lvbjo6fk5ldHdvcmtT
ZXNzaW9uKCkKK3sKKyAgICBmb3IgKGF1dG8qIGRhdGFUYXNrIDogbV9kYXRhVGFza01hcC52YWx1
ZXMoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChkYXRhVGFzayk7CisgICAgICAgIGRhdGFU
YXNrLT5jYW5jZWwoKTsKKyAgICB9Cit9CisKK1JlZjxOZXR3b3JrRGF0YVRhc2s+IE5ldHdvcmtT
ZXNzaW9uOjpjcmVhdGVEYXRhVGFza1dpdGhSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgTmV0d29ya1Nlc3Npb25UYXNrQ2xpZW50JiBjbGllbnQpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya2luZ0RhdGFUYXNrKCp0aGlzLCBjbGllbnQs
IFttX3Nlc3Npb24gZGF0YVRhc2tXaXRoUmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdChXZWJD
b3JlOjpVcGRhdGVIVFRQQm9keSldKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29y
a0RhdGFUYXNrKCp0aGlzLCBjbGllbnQsIFttX3Nlc3Npb24gZGF0YVRhc2tXaXRoUmVxdWVzdDpy
ZXF1ZXN0Lm5zVVJMUmVxdWVzdChXZWJDb3JlOjpVcGRhdGVIVFRQQm9keSldKSk7CiB9CiAKLU5l
dHdvcmtpbmdEYXRhVGFzayogTmV0d29ya1Nlc3Npb246OmRhdGFUYXNrRm9ySWRlbnRpZmllcih1
aW50NjRfdCB0YXNrSWRlbnRpZmllcikKK05ldHdvcmtEYXRhVGFzayogTmV0d29ya1Nlc3Npb246
OmRhdGFUYXNrRm9ySWRlbnRpZmllcih1aW50NjRfdCB0YXNrSWRlbnRpZmllcikKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIHJldHVybiBtX2RhdGFUYXNrTWFwLmdldCh0YXNr
SWRlbnRpZmllcik7CiB9CiAKLU5ldHdvcmtpbmdEYXRhVGFzazo6TmV0d29ya2luZ0RhdGFUYXNr
KE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQmIGNsaWVu
dCwgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFUYXNrPiB0YXNrKQorTmV0d29ya0RhdGFUYXNr
OjpOZXR3b3JrRGF0YVRhc2soTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtTZXNzaW9u
VGFza0NsaWVudCYgY2xpZW50LCBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0YVRhc2s+IHRhc2sp
CiAgICAgOiBtX3Nlc3Npb24oc2Vzc2lvbikKICAgICAsIG1fdGFzayh0YXNrKQogICAgICwgbV9j
bGllbnQoJmNsaWVudCkKQEAgLTIxMyw3ICsyMjUsNyBAQCBOZXR3b3JraW5nRGF0YVRhc2s6Ok5l
dHdvcmtpbmdEYXRhVGFzayhOCiAgICAgbV9zZXNzaW9uLm1fZGF0YVRhc2tNYXAuYWRkKHRhc2tJ
ZGVudGlmaWVyKCksIHRoaXMpOwogfQogCi1OZXR3b3JraW5nRGF0YVRhc2s6On5OZXR3b3JraW5n
RGF0YVRhc2soKQorTmV0d29ya0RhdGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKCkKIHsKICAgICBB
U1NFUlQobV9zZXNzaW9uLm1fZGF0YVRhc2tNYXAuY29udGFpbnModGFza0lkZW50aWZpZXIoKSkp
OwogICAgIEFTU0VSVChtX3Nlc3Npb24ubV9kYXRhVGFza01hcC5nZXQodGFza0lkZW50aWZpZXIo
KSkgPT0gdGhpcyk7CkBAIC0yMjEsMTcgKzIzMywxNyBAQCBOZXR3b3JraW5nRGF0YVRhc2s6On5O
ZXR3b3JraW5nRGF0YVRhc2soCiAgICAgbV9zZXNzaW9uLm1fZGF0YVRhc2tNYXAucmVtb3ZlKHRh
c2tJZGVudGlmaWVyKCkpOwogfQogCi12b2lkIE5ldHdvcmtpbmdEYXRhVGFzazo6c3VzcGVuZCgp
Cit2b2lkIE5ldHdvcmtEYXRhVGFzazo6Y2FuY2VsKCkKIHsKLSAgICBbbV90YXNrIHN1c3BlbmRd
OworICAgIFttX3Rhc2sgY2FuY2VsXTsKIH0KIAotdm9pZCBOZXR3b3JraW5nRGF0YVRhc2s6OnJl
c3VtZSgpCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVzdW1lKCkKIHsKICAgICBbbV90YXNrIHJl
c3VtZV07CiB9CiAKLXVpbnQ2NF90IE5ldHdvcmtpbmdEYXRhVGFzazo6dGFza0lkZW50aWZpZXIo
KQordWludDY0X3QgTmV0d29ya0RhdGFUYXNrOjp0YXNrSWRlbnRpZmllcigpCiB7CiAgICAgcmV0
dXJuIFttX3Rhc2sgdGFza0lkZW50aWZpZXJdOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4
dC5tbQkocmV2aXNpb24gMTkxOTgwKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
bWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAjaW1wb3J0ICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIgogCiAjaW1wb3J0ICJO
ZXR3b3JrUHJvY2Vzcy5oIgorI2ltcG9ydCAiTmV0d29ya1Nlc3Npb24uaCIKICNpbXBvcnQgIlNl
c3Npb25UcmFja2VyLmgiCiAjaW1wb3J0ICJXZWJFcnJvcnMuaCIKICNpbXBvcnQgPFdlYkNvcmUv
UmVzb3VyY2VFcnJvci5oPgpAQCAtNTUsNyArNTYsNyBAQCBib29sIFJlbW90ZU5ldHdvcmtpbmdD
b250ZXh0Ojpsb2NhbEZpbGVDCiAKIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgUmVtb3RlTmV0d29y
a2luZ0NvbnRleHQ6OnN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKIHsKLSAgICBOZXR3b3JrU3RvcmFn
ZVNlc3Npb24qIHNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbihtX3Nlc3Npb25JRCk7
CisgICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6OnN0
b3JhZ2VTZXNzaW9uKG1fc2Vzc2lvbklEKTsKICAgICBpZiAoc2Vzc2lvbikKICAgICAgICAgcmV0
dXJuICpzZXNzaW9uOwogICAgIC8vIFNvbWUgcmVxdWVzdHMgbWF5IHN0aWxsIGJlIGNvbWluZyBz
aG9ydGx5IGFmdGVyIE5ldHdvcmtQcm9jZXNzIHdhcyB0b2xkIHRvIGRlc3Ryb3kgaXRzIHNlc3Np
b24uCkBAIC04OSwxMSArOTAsMTUgQEAgdm9pZCBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5z
dXJlUHJpdgogewogICAgIEFTU0VSVChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSk7CiAKLSAgICBp
ZiAoU2Vzc2lvblRyYWNrZXI6OnNlc3Npb24oc2Vzc2lvbklEKSkKKyAgICBpZiAoU2Vzc2lvblRy
YWNrZXI6OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IEFTU0VSVCghU2Vzc2lvblRyYWNrZXI6OmdldElkZW50aWZpZXJCYXNlKCkuaXNOdWxsKCkpOwot
ICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25UcmFja2VyOjpnZXRJ
ZGVudGlmaWVyQmFzZSgpICsgJy4nICsgU3RyaW5nOjpudW1iZXIoc2Vzc2lvbklELnNlc3Npb25J
RCgpKSkpOworICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25UcmFj
a2VyOjpnZXRJZGVudGlmaWVyQmFzZSgpICsgJy4nICsgU3RyaW5nOjpudW1iZXIoc2Vzc2lvbklE
LnNlc3Npb25JRCgpKSkKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgICAgICAsIHN0ZDo6
bWFrZV91bmlxdWU8TmV0d29ya1Nlc3Npb24+KE5ldHdvcmtTZXNzaW9uOjpUeXBlOjpFcGhlbWVy
YWwsIHNlc3Npb25JRCkKKyNlbmRpZgorICAgICk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9TZXNzaW9uVHJhY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL1Nlc3Npb25UcmFja2VyLmNwcAkocmV2aXNpb24gMTkxOTgwKQorKysgU291cmNl
L1dlYktpdDIvU2hhcmVkL1Nlc3Npb25UcmFja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNlc3Npb25UcmFja2Vy
LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvTmV0
d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAj
aW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KIApAQCAtMzMsNyArMzUsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyBIYXNoTWFwPFNlc3Np
b25JRCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4+JiBzdGF0aWNTZXNz
aW9uTWFwKCkKK3N0YXRpYyBIYXNoTWFwPFNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbj4+JiBzdGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCgpCiB7CiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNTcsOSArNTksOSBAQCBzdGF0aWMgU3RyaW5n
JiBpZGVudGlmaWVyQmFzZSgpCiAgICAgcmV0dXJuIGJhc2U7CiB9CiAKLWNvbnN0IEhhc2hNYXA8
U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4mIFNlc3Np
b25UcmFja2VyOjpzZXNzaW9uTWFwKCkKK2NvbnN0IEhhc2hNYXA8U2Vzc2lvbklELCBzdGQ6OnVu
aXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4mIFNlc3Npb25UcmFja2VyOjpzdG9yYWdl
U2Vzc2lvbk1hcCgpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY1Nlc3Npb25NYXAoKTsKKyAgICByZXR1
cm4gc3RhdGljU3RvcmFnZVNlc3Npb25NYXAoKTsKIH0KIAogY29uc3QgU3RyaW5nJiBTZXNzaW9u
VHJhY2tlcjo6Z2V0SWRlbnRpZmllckJhc2UoKQpAQCAtNjcsMTIgKzY5LDI5IEBAIGNvbnN0IFN0
cmluZyYgU2Vzc2lvblRyYWNrZXI6OmdldElkZW50aWYKICAgICByZXR1cm4gaWRlbnRpZmllckJh
c2UoKTsKIH0KIAotTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBTZXNzaW9uVHJhY2tlcjo6c2Vzc2lv
bihTZXNzaW9uSUQgc2Vzc2lvbklEKQorTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBTZXNzaW9uVHJh
Y2tlcjo6c3RvcmFnZVNlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKICAgICBpZiAoc2Vz
c2lvbklEID09IFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICAgICByZXR1cm4g
Jk5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7CisgICAgcmV0
dXJuIHN0YXRpY1N0b3JhZ2VTZXNzaW9uTWFwKCkuZ2V0KHNlc3Npb25JRCk7Cit9CisKKyNpZiBV
U0UoTkVUV09SS19TRVNTSU9OKQorc3RhdGljIEhhc2hNYXA8U2Vzc2lvbklELCBzdGQ6OnVuaXF1
ZV9wdHI8TmV0d29ya1Nlc3Npb24+PiYgc3RhdGljU2Vzc2lvbk1hcCgpCit7CisgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFz
aE1hcDxTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+PiBtYXA7Cisg
ICAgcmV0dXJuIG1hcC5nZXQoKTsKK30KKworTmV0d29ya1Nlc3Npb24qIFNlc3Npb25UcmFja2Vy
OjpuZXR3b3JrU2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklEKQoreworICAgIGlmIChzZXNzaW9u
SUQgPT0gU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCisgICAgICAgIHJldHVybiAmTmV0
d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCk7CiAgICAgcmV0dXJuIHN0YXRpY1Nlc3Npb25N
YXAoKS5nZXQoc2Vzc2lvbklEKTsKIH0KKyNlbmRpZgogCiBTZXNzaW9uSUQgU2Vzc2lvblRyYWNr
ZXI6OnNlc3Npb25JRChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24pCiB7CkBA
IC04MSwxOSArMTAwLDMyIEBAIFNlc3Npb25JRCBTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKGNv
bnMKICAgICByZXR1cm4gc3RvcmFnZVNlc3Npb25Ub0lEKCkuZ2V0KCZzZXNzaW9uKTsKIH0KIAot
dm9pZCBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklELCBzdGQ6
OnVuaXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBzZXNzaW9uKQordm9pZCBTZXNzaW9u
VHJhY2tlcjo6c2V0U2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBzdG9yYWdlU2Vzc2lvbgorI2lmIFVTRShORVRXT1JLX1NF
U1NJT04pCisgICAgLCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Npb24+IHNlc3Npb24KKyNl
bmRpZgorKQogeworICAgIEFTU0VSVChzdG9yYWdlU2Vzc2lvbik7CiAgICAgQVNTRVJUKHNlc3Np
b25JRCAhPSBTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0gICAgc3RvcmFnZVNlc3Np
b25Ub0lEKCkuc2V0KHNlc3Npb24uZ2V0KCksIHNlc3Npb25JRCk7CisgICAgc3RvcmFnZVNlc3Np
b25Ub0lEKCkuc2V0KHN0b3JhZ2VTZXNzaW9uLmdldCgpLCBzZXNzaW9uSUQpOworICAgIHN0YXRp
Y1N0b3JhZ2VTZXNzaW9uTWFwKCkuc2V0KHNlc3Npb25JRCwgV1RGOjptb3ZlKHN0b3JhZ2VTZXNz
aW9uKSk7CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICBBU1NFUlQoc2Vzc2lvbik7CiAg
ICAgc3RhdGljU2Vzc2lvbk1hcCgpLnNldChzZXNzaW9uSUQsIFdURjo6bW92ZShzZXNzaW9uKSk7
CisjZW5kaWYKIH0KIAogdm9pZCBTZXNzaW9uVHJhY2tlcjo6ZGVzdHJveVNlc3Npb24oU2Vzc2lv
bklEIHNlc3Npb25JRCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIGlm
IChzdGF0aWNTZXNzaW9uTWFwKCkuY29udGFpbnMoc2Vzc2lvbklEKSkgewotICAgICAgICBzdG9y
YWdlU2Vzc2lvblRvSUQoKS5yZW1vdmUoc2Vzc2lvbihzZXNzaW9uSUQpKTsKKyAgICBpZiAoc3Rh
dGljU3RvcmFnZVNlc3Npb25NYXAoKS5jb250YWlucyhzZXNzaW9uSUQpKSB7CisjaWYgVVNFKE5F
VFdPUktfU0VTU0lPTikKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShzdGF0aWNTZXNzaW9u
TWFwKCkuY29udGFpbnMoc2Vzc2lvbklEKSwgIk5ldHdvcmtTZXNzaW9ucyBhbmQgTmV0d29ya1N0
b3JhZ2VTZXNzaW9ucyBzaG91bGQgYWx3YXlzIGJlIGNyZWF0ZWQsIGRlbGV0ZWQsIGFuZCBtYW5h
Z2VkIGFzIHBhaXJzIik7CiAgICAgICAgIHN0YXRpY1Nlc3Npb25NYXAoKS5yZW1vdmUoc2Vzc2lv
bklEKTsKKyNlbmRpZgorICAgICAgICBzdG9yYWdlU2Vzc2lvblRvSUQoKS5yZW1vdmUoc3RvcmFn
ZVNlc3Npb24oc2Vzc2lvbklEKSk7CisgICAgICAgIHN0YXRpY1N0b3JhZ2VTZXNzaW9uTWFwKCku
cmVtb3ZlKHNlc3Npb25JRCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvU2Vzc2lvblRyYWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
U2Vzc2lvblRyYWNrZXIuaAkocmV2aXNpb24gMTkxOTgwKQorKysgU291cmNlL1dlYktpdDIvU2hh
cmVkL1Nlc3Npb25UcmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI1ICsyNiw0MCBAQAog
I2lmbmRlZiBTZXNzaW9uVHJhY2tlcl9oCiAjZGVmaW5lIFNlc3Npb25UcmFja2VyX2gKIAotI2lu
Y2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBOZXR3b3JrU3RvcmFnZVNlc3Npb247Cit9CisKICNpbmNsdWRlIDxXZWJDb3Jl
L1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgTmV0d29y
a1Nlc3Npb247CisKIGNsYXNzIFNlc3Npb25UcmFja2VyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShTZXNzaW9uVHJhY2tlcik7CiBwdWJsaWM6Ci0gICAgLy8gRklYTUU6IHNlc3Npb25NYXAo
KSdzIHJldHVybmVkIG1hcCBkb2VzIG5vdCBpbmNsdWRlIGRlZmF1bHQgc2Vzc2lvbi4KLSAgICBz
dGF0aWMgY29uc3QgSGFzaE1hcDxXZWJDb3JlOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiYgc2Vzc2lvbk1hcCgpOworICAgIC8vIEZJ
WE1FOiBzdG9yYWdlU2Vzc2lvbk1hcCgpJ3MgcmV0dXJuZWQgbWFwIGRvZXMgbm90IGluY2x1ZGUg
ZGVmYXVsdCBzZXNzaW9uLgorICAgIHN0YXRpYyBjb25zdCBIYXNoTWFwPFdlYkNvcmU6OlNlc3Np
b25JRCwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4+JiBz
dG9yYWdlU2Vzc2lvbk1hcCgpOworCiAgICAgc3RhdGljIGNvbnN0IFN0cmluZyYgZ2V0SWRlbnRp
ZmllckJhc2UoKTsKLSAgICBzdGF0aWMgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBz
ZXNzaW9uKFdlYkNvcmU6OlNlc3Npb25JRCk7CisgICAgc3RhdGljIFdlYkNvcmU6Ok5ldHdvcmtT
dG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNlc3Npb24oV2ViQ29yZTo6U2Vzc2lvbklEKTsKICAgICBz
dGF0aWMgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRChjb25zdCBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRTZXNzaW9uKFdlYkNvcmU6OlNl
c3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4p
OworICAgIHN0YXRpYyB2b2lkIHNldFNlc3Npb24oV2ViQ29yZTo6U2Vzc2lvbklELCBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPgorI2lmIFVTRShORVRXT1JL
X1NFU1NJT04pCisgICAgICAgICwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTZXNzaW9uPgorI2Vu
ZGlmCisgICAgKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95U2Vzc2lvbihXZWJDb3JlOjpTZXNz
aW9uSUQpOwogICAgIHN0YXRpYyB2b2lkIHNldElkZW50aWZpZXJCYXNlKGNvbnN0IFN0cmluZyYp
OworICAgIAorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgLy8gRklYTUU6IEEgTmV0d29y
a1Nlc3Npb24gYW5kIGEgTmV0d29ya1N0b3JhZ2VTZXNzaW9uIHNob3VsZCBiZSB0aGUgc2FtZSBv
YmplY3Qgb25jZSBORVRXT1JLX1NFU1NJT04gaXMgdXNlZCBieSBkZWZhdWx0LgorICAgIHN0YXRp
YyBOZXR3b3JrU2Vzc2lvbiogbmV0d29ya1Nlc3Npb24oV2ViQ29yZTo6U2Vzc2lvbklEKTsKKyNl
bmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
bWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0JKHJldmlzaW9uIDE5MTk4MCkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAKKyNp
bmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgIlNlc3Npb25UcmFja2VyLmgiCiAj
aW5jbHVkZSAiV2ViQ29va2llTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKQEAgLTQ3
LDcgKzQ4LDcgQEAgdm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcgogewog
ICAgIEFTU0VSVChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSk7CiAKLSAgICBpZiAoU2Vzc2lvblRy
YWNrZXI6OnNlc3Npb24oc2Vzc2lvbklEKSkKKyAgICBpZiAoU2Vzc2lvblRyYWNrZXI6OnN0b3Jh
Z2VTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBiYXNl
OwpAQCAtNTYsNyArNTcsMTEgQEAgdm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1
cmVQcgogICAgIGVsc2UKICAgICAgICAgYmFzZSA9IFNlc3Npb25UcmFja2VyOjpnZXRJZGVudGlm
aWVyQmFzZSgpOwogCi0gICAgU2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24oc2Vzc2lvbklELCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oYmFzZSAr
ICcuJyArIFN0cmluZzo6bnVtYmVyKHNlc3Npb25JRC5zZXNzaW9uSUQoKSkpKTsKKyAgICBTZXNz
aW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6
Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihiYXNlICsgJy4nICsgU3RyaW5nOjpudW1iZXIo
c2Vzc2lvbklELnNlc3Npb25JRCgpKSkKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgICAg
ICAsIHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya1Nlc3Npb24+KE5ldHdvcmtTZXNzaW9uOjpUeXBl
OjpFcGhlbWVyYWwsIHNlc3Npb25JRCkKKyNlbmRpZgorICAgICk7CiB9CiAKIHZvaWQgV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dDo6c2V0Q29va2llQWNjZXB0UG9saWN5Rm9yQWxsQ29udGV4dHMo
SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCkBAIC02Niw3ICs3MSw3IEBAIHZvaWQgV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2V0Q29va2kKICAgICBpZiAoUmV0YWluUHRyPENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246
OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLmNvb2tpZVN0b3JhZ2UoKSkKICAgICAgICAgV0tTZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHBvbGljeSk7CiAKLSAg
ICBmb3IgKGNvbnN0IGF1dG8mIHNlc3Npb24gOiBTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbk1hcCgp
LnZhbHVlcygpKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBzZXNzaW9uIDogU2Vzc2lvblRyYWNr
ZXI6OnN0b3JhZ2VTZXNzaW9uTWFwKCkudmFsdWVzKCkpIHsKICAgICAgICAgaWYgKHNlc3Npb24p
CiAgICAgICAgICAgICBXS1NldEhUVFBDb29raWVBY2NlcHRQb2xpY3koc2Vzc2lvbi0+Y29va2ll
U3RvcmFnZSgpLmdldCgpLCBwb2xpY3kpOwogICAgIH0KQEAgLTExMCw4ICsxMTUsOCBAQCBOZXR3
b3JrU3RvcmFnZVNlc3Npb24mIFdlYkZyYW1lTmV0d29ya2luCiB7CiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKICAgICBpZiAoZnJhbWUoKSkgewotICAgICAgICBpZiAoTmV0d29ya1N0
b3JhZ2VTZXNzaW9uKiBzZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6OnNlc3Npb24oZnJhbWUoKS0+
cGFnZSgpLT5zZXNzaW9uSUQoKSkpCi0gICAgICAgICAgICByZXR1cm4gKnNlc3Npb247CisgICAg
ICAgIGlmIChhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vz
c2lvbihmcmFtZSgpLT5wYWdlKCktPnNlc3Npb25JRCgpKSkKKyAgICAgICAgICAgIHJldHVybiAq
c3RvcmFnZVNlc3Npb247CiAgICAgICAgIC8vIFNvbWUgcmVxdWVzdHMgbWF5IHN0aWxsIGJlIGNv
bWluZyBzaG9ydGx5IGFmdGVyIFdlYlByb2Nlc3Mgd2FzIHRvbGQgdG8gZGVzdHJveSBpdHMgc2Vz
c2lvbi4KICAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIHNlc3Npb24gSUQuIFBsZWFzZSBmaWxl
IGEgYnVnIHVubGVzcyB5b3UganVzdCBkaXNhYmxlZCBwcml2YXRlIGJyb3dzaW5nLCBpbiB3aGlj
aCBjYXNlIGl0J3MgYW4gZXhwZWN0ZWQgcmFjZS4iKTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264731</attachid>
            <date>2015-11-03 14:47:09 -0800</date>
            <delta_ts>2015-11-03 15:26:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150857-20151103144612.patch</filename>
            <type>text/plain</type>
            <size>28543</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTk4MCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDE1LTExLTAzICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ3JlYXRlIGEg
TmV0d29ya1Nlc3Npb24gZm9yIGVhY2ggU2Vzc2lvbklECisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbmFtZXMgU2Vzc2lvblRyYWNr
ZXI6OnNlc3Npb24gdG8gc3RvcmFnZVNlc3Npb24gYW5kIG1ha2VzIGEgcGFyYWxsZWwKKyAgICAg
ICAgc3RydWN0dXJlIGZvciBOZXR3b3JrU2Vzc2lvbnMuICBOZXR3b3JrU2Vzc2lvbiBhbmQgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uIHNob3VsZCBldmVudHVhbGx5CisgICAgICAgIGJlY29tZSB0aGUg
c2FtZSBjbGFzcyBpbiBXZWJDb3JlLiAgQmVjYXVzZSBub3QgZXZlcnlib2R5IHVzZXMgTmV0d29y
a1Nlc3Npb25zIHlldCwKKyAgICAgICAgd2Uga2VlcCB0aGVtIHNlcGFyYXRlIGJ1dCBjcmVhdGVk
LCBkZXN0cm95ZWQsIGFuZCBtYW5hZ2VkIHRvZ2V0aGVyLgorCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpzdG9yYWdlU2Vzc2lvbik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0
YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9y
aWdpbnMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnROZXR3b3Jr
TG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YWJvcnQpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmg6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtTZXNzaW9uVGFza0NsaWVudDo6fk5ldHdvcmtTZXNzaW9uVGFza0NsaWVudCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrOjpjbGVhckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtp
bmdEYXRhVGFzazo6Y2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2lu
Z0RhdGFUYXNrOjpjbGVhckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtTZXNzaW9uOjp+TmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OmNv
bmZpZ3VyYXRpb25Gb3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6ZGVmYXVsdE5ldHdvcmtTZXNz
aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpjcmVhdGVEYXRhVGFza1dpdGhSZXF1ZXN0KToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmRhdGFUYXNrRm9ySWRlbnRpZmllcik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFUYXNrKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
RGF0YVRhc2s6OnJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6dGFz
a0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OnNpbmdsZXRvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFzazo6TmV0d29ya2luZ0Rh
dGFUYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2luZ0RhdGFUYXNrOjp+
TmV0d29ya2luZ0RhdGFUYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2lu
Z0RhdGFUYXNrOjpzdXNwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2lu
Z0RhdGFUYXNrOjpyZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JraW5n
RGF0YVRhc2s6OnRhc2tJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZU5ldHdvcmtpbmdDb250ZXh0OjpzdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKToK
KyAgICAgICAgKiBTaGFyZWQvU2Vzc2lvblRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViS2l0Ojpz
dGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCk6CisgICAgICAgIChXZWJLaXQ6OmlkZW50aWZpZXJCYXNl
KToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uTWFwKToK
KyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OmdldElkZW50aWZpZXJCYXNlKToKKyAg
ICAgICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAg
KFdlYktpdDo6c3RhdGljU2Vzc2lvbk1hcCk6CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25UcmFj
a2VyOjpuZXR3b3JrU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpz
ZXNzaW9uSUQpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbik6
CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpkZXN0cm95U2Vzc2lvbik6CisgICAg
ICAgIChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpzZXNzaW9uTWFwKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OnNlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAq
IFNoYXJlZC9TZXNzaW9uVHJhY2tlci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRDb29raWVB
Y2NlcHRQb2xpY3lGb3JBbGxDb250ZXh0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQ6OnN0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2lu
Z1Nlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojpz
ZXRDb29raWVBY2NlcHRQb2xpY3lGb3JBbGxDb250ZXh0cyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnN0b3JhZ2VTZXNzaW9uKToKKwogMjAxNS0xMS0wMyAg
QW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5
IC1bX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnkgX2ludm9rZU1ldGhvZDpdCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiAxOTE5ODApCisrKyBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2OCw5ICsxNjgsOSBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpwcmVmCiBzdGF0aWMgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzdG9yYWdlU2Vzc2lv
bihTZXNzaW9uSUQgc2Vzc2lvbklEKQogewogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwo
KSkgewotICAgICAgICBOZXR3b3JrU3RvcmFnZVNlc3Npb24qIHByaXZhdGVTZXNzaW9uID0gU2Vz
c2lvblRyYWNrZXI6OnNlc3Npb24oc2Vzc2lvbklEKTsKLSAgICAgICAgaWYgKHByaXZhdGVTZXNz
aW9uKQotICAgICAgICAgICAgcmV0dXJuICpwcml2YXRlU2Vzc2lvbjsKKyAgICAgICAgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uKiBwcml2YXRlU3RvcmFnZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6
c3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKTsKKyAgICAgICAgaWYgKHByaXZhdGVTdG9yYWdlU2Vz
c2lvbikKKyAgICAgICAgICAgIHJldHVybiAqcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uOwogICAgICAg
ICAvLyBTb21lIHJlcXVlc3RzIHdpdGggcHJpdmF0ZSBicm93c2luZyBtb2RlIHJlcXVlc3RlZCBt
YXkgc3RpbGwgYmUgY29taW5nIHNob3J0bHkgYWZ0ZXIgTmV0d29ya1Byb2Nlc3Mgd2FzIHRvbGQg
dG8gZGVzdHJveSBpdHMgc2Vzc2lvbi4KICAgICAgICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8g
dHJhY2sgcHJpdmF0ZSBicm93c2luZyBzZXNzaW9ucyBtb3JlIHJpZ29yb3VzbHkuCiAgICAgICAg
IExPR19FUlJPUigiUHJpdmF0ZSBicm93c2luZyB3YXMgcmVxdWVzdGVkLCBidXQgdGhlcmUgd2Fz
IG5vIHNlc3Npb24gZm9yIGl0LiBQbGVhc2UgZmlsZSBhIGJ1ZyB1bmxlc3MgeW91IGp1c3QgZGlz
YWJsZWQgcHJpdmF0ZSBicm93c2luZywgaW4gd2hpY2ggY2FzZSBpdCdzIGFuIGV4cGVjdGVkIHJh
Y2UuIik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwCShyZXZpc2lvbiAxOTE5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNyw3ICszMzcs
NyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKFNlCiAgICAgfSkpOwog
CiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMgJiBXZWJzaXRlRGF0YVR5cGVDb29raWVzKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6
c2Vzc2lvbihzZXNzaW9uSUQpKQorICAgICAgICBpZiAoYXV0byogbmV0d29ya1N0b3JhZ2VTZXNz
aW9uID0gU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAg
ICAgICBnZXRIb3N0bmFtZXNXaXRoQ29va2llcygqbmV0d29ya1N0b3JhZ2VTZXNzaW9uLCBjYWxs
YmFja0FnZ3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEuaG9zdE5hbWVzV2l0aENvb2tpZXMpOwogICAg
IH0KIApAQCAtMzUyLDEzICszNTIsMTMgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vi
c2l0ZURhdGEoUwogewogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmICh3ZWJzaXRlRGF0YVR5
cGVzICYgV2Vic2l0ZURhdGFUeXBlSFNUU0NhY2hlKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3
b3JrU3RvcmFnZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbihzZXNzaW9uSUQpKQor
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6
OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgICAgICBjbGVhckhTVFNDYWNoZSgq
bmV0d29ya1N0b3JhZ2VTZXNzaW9uLCBtb2RpZmllZFNpbmNlKTsKICAgICB9CiAjZW5kaWYKIAog
ICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzICYgV2Vic2l0ZURhdGFUeXBlQ29va2llcykgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6OnNl
c3Npb24oc2Vzc2lvbklEKSkKKyAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTdG9yYWdlU2Vzc2lv
biA9IFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQogICAgICAgICAg
ICAgZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoKm5ldHdvcmtTdG9yYWdlU2Vzc2lvbiwg
bW9kaWZpZWRTaW5jZSk7CiAgICAgfQogCkBAIC00MTgsNyArNDE4LDcgQEAgc3RhdGljIHZvaWQg
Y2xlYXJEaXNrQ2FjaGVFbnRyaWVzKGNvbnN0IAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRl
V2Vic2l0ZURhdGFGb3JPcmlnaW5zKFNlc3Npb25JRCBzZXNzaW9uSUQsIHVpbnQ2NF90IHdlYnNp
dGVEYXRhVHlwZXMsIGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiBvcmlnaW5zLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgY29va2llSG9zdE5hbWVzLCB1aW50NjRfdCBjYWxsYmFja0lE
KQogewogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzICYgV2Vic2l0ZURhdGFUeXBlQ29va2llcykg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gU2Vzc2lvblRyYWNr
ZXI6OnNlc3Npb24oc2Vzc2lvbklEKSkKKyAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQogICAg
ICAgICAgICAgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcygqbmV0d29ya1N0b3JhZ2VTZXNzaW9u
LCBjb29raWVIb3N0TmFtZXMpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lv
biAxOTE5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVz
b3VyY2VMb2FkUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0
LmgiCisjaW5jbHVkZSAiU2Vzc2lvblRyYWNrZXIuaCIKICNpbmNsdWRlICJTaGFyZWFibGVSZXNv
dXJjZS5oIgogI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1
bWVudENvZGVycy5oIgpAQCAtMTg5LDcgKzE5MCwxMCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6c3RhcnROZXR3b3JrCiAgICAgYm9vbCBzaG91bGRTbmlmZiA9IG1fcGFyYW1ldGVycy5j
b250ZW50U25pZmZpbmdQb2xpY3kgPT0gU25pZmZDb250ZW50OwogI2lmIFVTRShORVRXT1JLX1NF
U1NJT04pCiAgICAgVU5VU0VEX1BBUkFNKHNob3VsZFNuaWZmKTsgLy8gRklYTUU6IFVzZSB0aGlz
LgotICAgIG1fdGFzayA9IE5ldHdvcmtTZXNzaW9uOjpzaW5nbGV0b24oKS0+Y3JlYXRlRGF0YVRh
c2tXaXRoUmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0LCAqdGhpcyk7CisKKyAgICBhdXRvKiBuZXR3
b3JrU2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQoKSk7
CisgICAgUkVMRUFTRV9BU1NFUlQobmV0d29ya1Nlc3Npb24pOworICAgIG1fdGFzayA9IG5ldHdv
cmtTZXNzaW9uLT5jcmVhdGVEYXRhVGFza1dpdGhSZXF1ZXN0KG1fY3VycmVudFJlcXVlc3QsICp0
aGlzKTsKICAgICBtX3Rhc2stPnJlc3VtZSgpOwogI2Vsc2UKICAgICBtX2hhbmRsZSA9IFJlc291
cmNlSGFuZGxlOjpjcmVhdGUobV9uZXR3b3JraW5nQ29udGV4dC5nZXQoKSwgbV9jdXJyZW50UmVx
dWVzdCwgdGhpcywgbV9kZWZlcnNMb2FkaW5nLCBzaG91bGRTbmlmZik7CkBAIC0yNTIsNyArMjU2
LDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmFib3J0KCkKIAogI2lmIFVTRShORVRX
T1JLX1NFU1NJT04pCiAgICAgaWYgKG1fdGFzaykKLSAgICAgICAgbV90YXNrLT5zdXNwZW5kKCk7
CisgICAgICAgIG1fdGFzay0+Y2FuY2VsKCk7CiAgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyB3
aXRoIHRoZSBuZXR3b3JrIGNhY2hlIGhlcmUuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICNlbHNl
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2Fk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UmVzb3VyY2VMb2FkZXIuaAkocmV2aXNpb24gMTkxOTgwKQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIx
Myw3ICsyMTMsNyBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPFJlbW90ZU5ldHdvcmtpbmdDb250
ZXh0PiBtX25ldHdvcmtpbmdDb250ZXh0OwogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAg
UmVmUHRyPE5ldHdvcmtpbmdEYXRhVGFzaz4gbV90YXNrOworICAgIFJlZlB0cjxOZXR3b3JrRGF0
YVRhc2s+IG1fdGFzazsKICNlbHNlCiAgICAgUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
PiBtX2hhbmRsZTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Nlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCShyZXZpc2lvbiAxOTE5ODApCisrKyBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw3IEBAIE9CSkNfQ0xBU1MgTlNVUkxTZXNzaW9uRGF0YVRhc2s7CiBPQkpDX0NMQVNTIE5T
T3BlcmF0aW9uUXVldWU7CiBPQkpDX0NMQVNTIE5ldHdvcmtTZXNzaW9uRGVsZWdhdGU7CiAKKyNp
bmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC03NCw0
OCArNzUsNTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfk5ldHdvcmtTZXNzaW9uVGFza0NsaWVu
dCgpIHsgfQogfTsKIAotY2xhc3MgTmV0d29ya2luZ0RhdGFUYXNrIDogcHVibGljIFJlZkNvdW50
ZWQ8TmV0d29ya2luZ0RhdGFUYXNrPiB7CitjbGFzcyBOZXR3b3JrRGF0YVRhc2sgOiBwdWJsaWMg
UmVmQ291bnRlZDxOZXR3b3JrRGF0YVRhc2s+IHsKICAgICBmcmllbmQgY2xhc3MgTmV0d29ya1Nl
c3Npb247CiBwdWJsaWM6Ci0gICAgdm9pZCBzdXNwZW5kKCk7CisgICAgdm9pZCBjYW5jZWwoKTsK
ICAgICB2b2lkIHJlc3VtZSgpOwogCiAgICAgdWludDY0X3QgdGFza0lkZW50aWZpZXIoKTsKIAot
ICAgIH5OZXR3b3JraW5nRGF0YVRhc2soKTsKKyAgICB+TmV0d29ya0RhdGFUYXNrKCk7CiAKICAg
ICBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9
CiAgICAgdm9pZCBjbGVhckNsaWVudCgpIHsgbV9jbGllbnQgPSBudWxscHRyOyB9CiAKIHByaXZh
dGU6Ci0gICAgZXhwbGljaXQgTmV0d29ya2luZ0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiwgTmV0
d29ya1Nlc3Npb25UYXNrQ2xpZW50JiwgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFUYXNrPik7
Ci0KICAgICBOZXR3b3JrU2Vzc2lvbiYgbV9zZXNzaW9uOwotICAgIFJldGFpblB0cjxOU1VSTFNl
c3Npb25EYXRhVGFzaz4gbV90YXNrOwogICAgIE5ldHdvcmtTZXNzaW9uVGFza0NsaWVudCogbV9j
bGllbnQ7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgZXhwbGljaXQgTmV0d29ya0RhdGFUYXNr
KE5ldHdvcmtTZXNzaW9uJiwgTmV0d29ya1Nlc3Npb25UYXNrQ2xpZW50JiwgUmV0YWluUHRyPE5T
VVJMU2Vzc2lvbkRhdGFUYXNrPik7CisgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFUYXNr
PiBtX3Rhc2s7CisjZW5kaWYKIH07CiAKLWNsYXNzIE5ldHdvcmtTZXNzaW9uIDogcHVibGljIFJl
ZkNvdW50ZWQ8TmV0d29ya1Nlc3Npb24+IHsKLSAgICBmcmllbmQgY2xhc3MgTmV0d29ya2luZ0Rh
dGFUYXNrOworY2xhc3MgTmV0d29ya1Nlc3Npb24geworICAgIGZyaWVuZCBjbGFzcyBOZXR3b3Jr
RGF0YVRhc2s7CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBUeXBlIHsKICAgICAgICAgTm9ybWFs
LAogICAgICAgICBFcGhlbWVyYWwKICAgICB9OwogCi0gICAgUmVmPE5ldHdvcmtpbmdEYXRhVGFz
az4gY3JlYXRlRGF0YVRhc2tXaXRoUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmLCBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQmKTsKKyAgICBzdGF0aWMgTmV0d29ya1Nlc3Np
b24mIGRlZmF1bHRTZXNzaW9uKCk7CisgICAgCisgICAgUmVmPE5ldHdvcmtEYXRhVGFzaz4gY3Jl
YXRlRGF0YVRhc2tXaXRoUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBO
ZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQmKTsKIAotICAgIHN0YXRpYyBSZWY8TmV0d29ya1Nlc3Np
b24+IHNpbmdsZXRvbigpOyAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYWN0dWFsbHkgYmUgYSBz
aW5nbGV0b24uCi0gICAgTmV0d29ya2luZ0RhdGFUYXNrKiBkYXRhVGFza0ZvcklkZW50aWZpZXIo
dWludDY0X3QpOworICAgIE5ldHdvcmtEYXRhVGFzayogZGF0YVRhc2tGb3JJZGVudGlmaWVyKHVp
bnQ2NF90KTsKIAotICAgIH5OZXR3b3JrU2Vzc2lvbigpIHsgQVNTRVJUKG1fZGF0YVRhc2tNYXAu
aXNFbXB0eSgpKTsgfQotcHJpdmF0ZToKLSAgICBzdGF0aWMgUmVmPE5ldHdvcmtTZXNzaW9uPiBj
cmVhdGUoVHlwZSk7CisgICAgTmV0d29ya1Nlc3Npb24oVHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklE
KTsKKyAgICB+TmV0d29ya1Nlc3Npb24oKTsKIAotICAgIE5ldHdvcmtTZXNzaW9uKFR5cGUpOwot
ICAgIEhhc2hNYXA8dWludDY0X3QsIE5ldHdvcmtpbmdEYXRhVGFzayo+IG1fZGF0YVRhc2tNYXA7
Citwcml2YXRlOgorICAgIFdlYkNvcmU6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKKyAgICBIYXNo
TWFwPHVpbnQ2NF90LCBOZXR3b3JrRGF0YVRhc2sqPiBtX2RhdGFUYXNrTWFwOworI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb24+IG1fc2Vzc2lvbjsKICAgICBS
ZXRhaW5QdHI8TmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gbV9zZXNzaW9uRGVsZWdhdGU7CisjZW5k
aWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1t
CShyZXZpc2lvbiAxOTE5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2Nv
YS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBA
CiAjaW1wb3J0IDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0NGTmV0d29ya1NQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9DcmVkZW50aWFsLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9SZXNvdXJjZUVycm9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgog
I2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CkBAIC0xNTgsMTcgKzE1OSw2IEBA
IC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2kKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAgICAgCi1SZWY8TmV0d29ya1Nlc3Npb24+IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUo
VHlwZSB0eXBlKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtTZXNzaW9uKHR5
cGUpKTsKLX0KLQotUmVmPE5ldHdvcmtTZXNzaW9uPiBOZXR3b3JrU2Vzc2lvbjo6c2luZ2xldG9u
KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmPE5ldHdvcmtTZXNzaW9uPj4gc2hh
cmVkSW5zdGFuY2UoTmV0d29ya1Nlc3Npb246OmNyZWF0ZShUeXBlOjpOb3JtYWwpKTsKLSAgICBy
ZXR1cm4gc2hhcmVkSW5zdGFuY2UuZ2V0KCkuY29weVJlZigpOwotfQotICAgIAogc3RhdGljIE5T
VVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb25Gb3JUeXBlKE5ldHdvcmtTZXNz
aW9uOjpUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0xNzksMzEgKzE2OSw1
MyBAQCBzdGF0aWMgTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiAqY29uZmlnCiAgICAgfQogfQog
Ci1OZXR3b3JrU2Vzc2lvbjo6TmV0d29ya1Nlc3Npb24oVHlwZSB0eXBlKQorc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4mIGRlZmF1bHROZXR3b3JrU2Vzc2lvbigpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtTZXNzaW9uPj4gc2Vzc2lvbjsKKyAgICByZXR1cm4gc2Vzc2lv
bjsKK30KKworTmV0d29ya1Nlc3Npb24mIE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigp
Cit7CisgICAgaWYgKCFkZWZhdWx0TmV0d29ya1Nlc3Npb24oKSkKKyAgICAgICAgZGVmYXVsdE5l
dHdvcmtTZXNzaW9uKCkgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTZXNzaW9uPihOZXR3b3Jr
U2Vzc2lvbjo6VHlwZTo6Tm9ybWFsLCBXZWJDb3JlOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSk7CisgICAgcmV0dXJuICpkZWZhdWx0TmV0d29ya1Nlc3Npb24oKTsKK30KKworTmV0d29y
a1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKFR5cGUgdHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklEIHNl
c3Npb25JRCkKKyAgICA6IG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKIHsKICAgICBtX3Nlc3Npb25E
ZWxlZ2F0ZSA9IGFkb3B0TlMoW1tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIGFsbG9jXSBpbml0V2l0
aE5ldHdvcmtTZXNzaW9uOip0aGlzXSk7CiAKICAgICBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9u
ICpjb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbkZvclR5cGUodHlwZSk7Ci0gICAgLy8gRklY
TUU6IFVzZSBTZXNzaW9uVHJhY2tlciB0byBtYWtlIHN1cmUgdGhlIGNvcnJlY3QgY29va2llIHN0
b3JhZ2UgaXMgdXNlZCBvbmNlIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgTmV0d29ya1Nlc3Npb24u
Ci0gICAgaWYgKGF1dG8qIHNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbihXZWJDb3Jl
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkpIHsKLSAgICAgICAgaWYgKENGSFRUUENv
b2tpZVN0b3JhZ2VSZWYgc3RvcmFnZSA9IHNlc3Npb24tPmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSkK
KyAgICBpZiAoYXV0byogc3RvcmFnZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c3RvcmFnZVNl
c3Npb24oc2Vzc2lvbklEKSkgeworICAgICAgICBpZiAoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBz
dG9yYWdlID0gc3RvcmFnZVNlc3Npb24tPmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSkKICAgICAgICAg
ICAgIGNvbmZpZ3VyYXRpb24uSFRUUENvb2tpZVN0b3JhZ2UgPSBbW1tOU0hUVFBDb29raWVTdG9y
YWdlIGFsbG9jXSBfaW5pdFdpdGhDRkhUVFBDb29raWVTdG9yYWdlOnN0b3JhZ2VdIGF1dG9yZWxl
YXNlXTsKICAgICB9CiAgICAgbV9zZXNzaW9uID0gW05TVVJMU2Vzc2lvbiBzZXNzaW9uV2l0aENv
bmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbiBkZWxlZ2F0ZTpzdGF0aWNfY2FzdDxpZD4obV9zZXNz
aW9uRGVsZWdhdGUuZ2V0KCkpIGRlbGVnYXRlUXVldWU6W05TT3BlcmF0aW9uUXVldWUgbWFpblF1
ZXVlXV07CiB9CiAKLVJlZjxOZXR3b3JraW5nRGF0YVRhc2s+IE5ldHdvcmtTZXNzaW9uOjpjcmVh
dGVEYXRhVGFza1dpdGhSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgTmV0d29ya1Nlc3Npb25UYXNrQ2xpZW50JiBjbGllbnQpCitOZXR3b3JrU2Vzc2lvbjo6
fk5ldHdvcmtTZXNzaW9uKCkKK3sKKyAgICBmb3IgKGF1dG8qIGRhdGFUYXNrIDogbV9kYXRhVGFz
a01hcC52YWx1ZXMoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChkYXRhVGFzayk7CisgICAg
ICAgIGRhdGFUYXNrLT5jYW5jZWwoKTsKKyAgICB9Cit9CisKK1JlZjxOZXR3b3JrRGF0YVRhc2s+
IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGVEYXRhVGFza1dpdGhSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgTmV0d29ya1Nlc3Npb25UYXNrQ2xpZW50JiBjbGll
bnQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya2luZ0RhdGFUYXNrKCp0aGlz
LCBjbGllbnQsIFttX3Nlc3Npb24gZGF0YVRhc2tXaXRoUmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVx
dWVzdChXZWJDb3JlOjpVcGRhdGVIVFRQQm9keSldKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgTmV0d29ya0RhdGFUYXNrKCp0aGlzLCBjbGllbnQsIFttX3Nlc3Npb24gZGF0YVRhc2tXaXRo
UmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdChXZWJDb3JlOjpVcGRhdGVIVFRQQm9keSldKSk7
CiB9CiAKLU5ldHdvcmtpbmdEYXRhVGFzayogTmV0d29ya1Nlc3Npb246OmRhdGFUYXNrRm9ySWRl
bnRpZmllcih1aW50NjRfdCB0YXNrSWRlbnRpZmllcikKK05ldHdvcmtEYXRhVGFzayogTmV0d29y
a1Nlc3Npb246OmRhdGFUYXNrRm9ySWRlbnRpZmllcih1aW50NjRfdCB0YXNrSWRlbnRpZmllcikK
IHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIHJldHVybiBtX2RhdGFUYXNrTWFw
LmdldCh0YXNrSWRlbnRpZmllcik7CiB9CiAKLU5ldHdvcmtpbmdEYXRhVGFzazo6TmV0d29ya2lu
Z0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrU2Vzc2lvblRhc2tDbGll
bnQmIGNsaWVudCwgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFUYXNrPiB0YXNrKQorTmV0d29y
a0RhdGFUYXNrOjpOZXR3b3JrRGF0YVRhc2soTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdv
cmtTZXNzaW9uVGFza0NsaWVudCYgY2xpZW50LCBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0YVRh
c2s+IHRhc2spCiAgICAgOiBtX3Nlc3Npb24oc2Vzc2lvbikKICAgICAsIG1fdGFzayh0YXNrKQog
ICAgICwgbV9jbGllbnQoJmNsaWVudCkKQEAgLTIxMyw3ICsyMjUsNyBAQCBOZXR3b3JraW5nRGF0
YVRhc2s6Ok5ldHdvcmtpbmdEYXRhVGFzayhOCiAgICAgbV9zZXNzaW9uLm1fZGF0YVRhc2tNYXAu
YWRkKHRhc2tJZGVudGlmaWVyKCksIHRoaXMpOwogfQogCi1OZXR3b3JraW5nRGF0YVRhc2s6On5O
ZXR3b3JraW5nRGF0YVRhc2soKQorTmV0d29ya0RhdGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKCkK
IHsKICAgICBBU1NFUlQobV9zZXNzaW9uLm1fZGF0YVRhc2tNYXAuY29udGFpbnModGFza0lkZW50
aWZpZXIoKSkpOwogICAgIEFTU0VSVChtX3Nlc3Npb24ubV9kYXRhVGFza01hcC5nZXQodGFza0lk
ZW50aWZpZXIoKSkgPT0gdGhpcyk7CkBAIC0yMjEsMTcgKzIzMywxNyBAQCBOZXR3b3JraW5nRGF0
YVRhc2s6On5OZXR3b3JraW5nRGF0YVRhc2soCiAgICAgbV9zZXNzaW9uLm1fZGF0YVRhc2tNYXAu
cmVtb3ZlKHRhc2tJZGVudGlmaWVyKCkpOwogfQogCi12b2lkIE5ldHdvcmtpbmdEYXRhVGFzazo6
c3VzcGVuZCgpCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6Y2FuY2VsKCkKIHsKLSAgICBbbV90YXNr
IHN1c3BlbmRdOworICAgIFttX3Rhc2sgY2FuY2VsXTsKIH0KIAotdm9pZCBOZXR3b3JraW5nRGF0
YVRhc2s6OnJlc3VtZSgpCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVzdW1lKCkKIHsKICAgICBb
bV90YXNrIHJlc3VtZV07CiB9CiAKLXVpbnQ2NF90IE5ldHdvcmtpbmdEYXRhVGFzazo6dGFza0lk
ZW50aWZpZXIoKQordWludDY0X3QgTmV0d29ya0RhdGFUYXNrOjp0YXNrSWRlbnRpZmllcigpCiB7
CiAgICAgcmV0dXJuIFttX3Rhc2sgdGFza0lkZW50aWZpZXJdOwogfQpJbmRleDogU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3Jr
aW5nQ29udGV4dC5tbQkocmV2aXNpb24gMTkxOTgwKQorKysgU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW1wb3J0ICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIgogCiAj
aW1wb3J0ICJOZXR3b3JrUHJvY2Vzcy5oIgorI2ltcG9ydCAiTmV0d29ya1Nlc3Npb24uaCIKICNp
bXBvcnQgIlNlc3Npb25UcmFja2VyLmgiCiAjaW1wb3J0ICJXZWJFcnJvcnMuaCIKICNpbXBvcnQg
PFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgpAQCAtNTUsNyArNTYsNyBAQCBib29sIFJlbW90ZU5l
dHdvcmtpbmdDb250ZXh0Ojpsb2NhbEZpbGVDCiAKIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgUmVt
b3RlTmV0d29ya2luZ0NvbnRleHQ6OnN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKIHsKLSAgICBOZXR3
b3JrU3RvcmFnZVNlc3Npb24qIHNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbihtX3Nl
c3Npb25JRCk7CisgICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzZXNzaW9uID0gU2Vzc2lvblRy
YWNrZXI6OnN0b3JhZ2VTZXNzaW9uKG1fc2Vzc2lvbklEKTsKICAgICBpZiAoc2Vzc2lvbikKICAg
ICAgICAgcmV0dXJuICpzZXNzaW9uOwogICAgIC8vIFNvbWUgcmVxdWVzdHMgbWF5IHN0aWxsIGJl
IGNvbWluZyBzaG9ydGx5IGFmdGVyIE5ldHdvcmtQcm9jZXNzIHdhcyB0b2xkIHRvIGRlc3Ryb3kg
aXRzIHNlc3Npb24uCkBAIC04OSwxMSArOTAsMTUgQEAgdm9pZCBSZW1vdGVOZXR3b3JraW5nQ29u
dGV4dDo6ZW5zdXJlUHJpdgogewogICAgIEFTU0VSVChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSk7
CiAKLSAgICBpZiAoU2Vzc2lvblRyYWNrZXI6OnNlc3Npb24oc2Vzc2lvbklEKSkKKyAgICBpZiAo
U2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEFTU0VSVCghU2Vzc2lvblRyYWNrZXI6OmdldElkZW50aWZpZXJCYXNlKCkuaXNO
dWxsKCkpOwotICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25UcmFj
a2VyOjpnZXRJZGVudGlmaWVyQmFzZSgpICsgJy4nICsgU3RyaW5nOjpudW1iZXIoc2Vzc2lvbklE
LnNlc3Npb25JRCgpKSkpOworICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25J
RCwgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNl
c3Npb25UcmFja2VyOjpnZXRJZGVudGlmaWVyQmFzZSgpICsgJy4nICsgU3RyaW5nOjpudW1iZXIo
c2Vzc2lvbklELnNlc3Npb25JRCgpKSkKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgICAg
ICAsIHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya1Nlc3Npb24+KE5ldHdvcmtTZXNzaW9uOjpUeXBl
OjpFcGhlbWVyYWwsIHNlc3Npb25JRCkKKyNlbmRpZgorICAgICk7CiB9CiAKIH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9TZXNzaW9uVHJhY2tlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvU2hhcmVkL1Nlc3Npb25UcmFja2VyLmNwcAkocmV2aXNpb24gMTkxOTgwKQor
KysgU291cmNlL1dlYktpdDIvU2hhcmVkL1Nlc3Npb25UcmFja2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNlc3Np
b25UcmFja2VyLmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KIApAQCAtMzMsNyArMzUsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyBIYXNo
TWFwPFNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4+JiBz
dGF0aWNTZXNzaW9uTWFwKCkKK3N0YXRpYyBIYXNoTWFwPFNlc3Npb25JRCwgc3RkOjp1bmlxdWVf
cHRyPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4+JiBzdGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCgpCiB7
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNTcsOSArNTksOSBAQCBzdGF0
aWMgU3RyaW5nJiBpZGVudGlmaWVyQmFzZSgpCiAgICAgcmV0dXJuIGJhc2U7CiB9CiAKLWNvbnN0
IEhhc2hNYXA8U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VTZXNzaW9u
Pj4mIFNlc3Npb25UcmFja2VyOjpzZXNzaW9uTWFwKCkKK2NvbnN0IEhhc2hNYXA8U2Vzc2lvbklE
LCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4mIFNlc3Npb25UcmFja2Vy
OjpzdG9yYWdlU2Vzc2lvbk1hcCgpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY1Nlc3Npb25NYXAoKTsK
KyAgICByZXR1cm4gc3RhdGljU3RvcmFnZVNlc3Npb25NYXAoKTsKIH0KIAogY29uc3QgU3RyaW5n
JiBTZXNzaW9uVHJhY2tlcjo6Z2V0SWRlbnRpZmllckJhc2UoKQpAQCAtNjcsMTIgKzY5LDI5IEBA
IGNvbnN0IFN0cmluZyYgU2Vzc2lvblRyYWNrZXI6OmdldElkZW50aWYKICAgICByZXR1cm4gaWRl
bnRpZmllckJhc2UoKTsKIH0KIAotTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBTZXNzaW9uVHJhY2tl
cjo6c2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklEKQorTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBT
ZXNzaW9uVHJhY2tlcjo6c3RvcmFnZVNlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKICAg
ICBpZiAoc2Vzc2lvbklEID09IFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICAg
ICByZXR1cm4gJk5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7
CisgICAgcmV0dXJuIHN0YXRpY1N0b3JhZ2VTZXNzaW9uTWFwKCkuZ2V0KHNlc3Npb25JRCk7Cit9
CisKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorc3RhdGljIEhhc2hNYXA8U2Vzc2lvbklELCBz
dGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Npb24+PiYgc3RhdGljU2Vzc2lvbk1hcCgpCit7Cisg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8SGFzaE1hcDxTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+
PiBtYXA7CisgICAgcmV0dXJuIG1hcC5nZXQoKTsKK30KKworTmV0d29ya1Nlc3Npb24qIFNlc3Np
b25UcmFja2VyOjpuZXR3b3JrU2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklEKQoreworICAgIGlm
IChzZXNzaW9uSUQgPT0gU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCisgICAgICAgIHJl
dHVybiAmTmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCk7CiAgICAgcmV0dXJuIHN0YXRp
Y1Nlc3Npb25NYXAoKS5nZXQoc2Vzc2lvbklEKTsKIH0KKyNlbmRpZgogCiBTZXNzaW9uSUQgU2Vz
c2lvblRyYWNrZXI6OnNlc3Npb25JRChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Np
b24pCiB7CkBAIC04MSwxOSArMTAwLDMyIEBAIFNlc3Npb25JRCBTZXNzaW9uVHJhY2tlcjo6c2Vz
c2lvbklEKGNvbnMKICAgICByZXR1cm4gc3RvcmFnZVNlc3Npb25Ub0lEKCkuZ2V0KCZzZXNzaW9u
KTsKIH0KIAotdm9pZCBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lv
bklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBzZXNzaW9uKQordm9p
ZCBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklELCBzdGQ6OnVu
aXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBzdG9yYWdlU2Vzc2lvbgorI2lmIFVTRShO
RVRXT1JLX1NFU1NJT04pCisgICAgLCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Npb24+IHNl
c3Npb24KKyNlbmRpZgorKQogeworICAgIEFTU0VSVChzdG9yYWdlU2Vzc2lvbik7CiAgICAgQVNT
RVJUKHNlc3Npb25JRCAhPSBTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0gICAgc3Rv
cmFnZVNlc3Npb25Ub0lEKCkuc2V0KHNlc3Npb24uZ2V0KCksIHNlc3Npb25JRCk7CisgICAgc3Rv
cmFnZVNlc3Npb25Ub0lEKCkuc2V0KHN0b3JhZ2VTZXNzaW9uLmdldCgpLCBzZXNzaW9uSUQpOwor
ICAgIHN0YXRpY1N0b3JhZ2VTZXNzaW9uTWFwKCkuc2V0KHNlc3Npb25JRCwgV1RGOjptb3ZlKHN0
b3JhZ2VTZXNzaW9uKSk7CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICBBU1NFUlQoc2Vz
c2lvbik7CiAgICAgc3RhdGljU2Vzc2lvbk1hcCgpLnNldChzZXNzaW9uSUQsIFdURjo6bW92ZShz
ZXNzaW9uKSk7CisjZW5kaWYKIH0KIAogdm9pZCBTZXNzaW9uVHJhY2tlcjo6ZGVzdHJveVNlc3Np
b24oU2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwotICAgIGlmIChzdGF0aWNTZXNzaW9uTWFwKCkuY29udGFpbnMoc2Vzc2lvbklEKSkgewotICAg
ICAgICBzdG9yYWdlU2Vzc2lvblRvSUQoKS5yZW1vdmUoc2Vzc2lvbihzZXNzaW9uSUQpKTsKKyAg
ICBpZiAoc3RhdGljU3RvcmFnZVNlc3Npb25NYXAoKS5jb250YWlucyhzZXNzaW9uSUQpKSB7Cisj
aWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShzdGF0
aWNTZXNzaW9uTWFwKCkuY29udGFpbnMoc2Vzc2lvbklEKSwgIk5ldHdvcmtTZXNzaW9ucyBhbmQg
TmV0d29ya1N0b3JhZ2VTZXNzaW9ucyBzaG91bGQgYWx3YXlzIGJlIGNyZWF0ZWQsIGRlbGV0ZWQs
IGFuZCBtYW5hZ2VkIGFzIHBhaXJzIik7CiAgICAgICAgIHN0YXRpY1Nlc3Npb25NYXAoKS5yZW1v
dmUoc2Vzc2lvbklEKTsKKyNlbmRpZgorICAgICAgICBzdG9yYWdlU2Vzc2lvblRvSUQoKS5yZW1v
dmUoc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKSk7CisgICAgICAgIHN0YXRpY1N0b3JhZ2VTZXNz
aW9uTWFwKCkucmVtb3ZlKHNlc3Npb25JRCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvU2Vzc2lvblRyYWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvU2Vzc2lvblRyYWNrZXIuaAkocmV2aXNpb24gMTkxOTgwKQorKysgU291cmNlL1dl
YktpdDIvU2hhcmVkL1Nlc3Npb25UcmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI1ICsy
Niw0MCBAQAogI2lmbmRlZiBTZXNzaW9uVHJhY2tlcl9oCiAjZGVmaW5lIFNlc3Npb25UcmFja2Vy
X2gKIAotI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitjbGFzcyBOZXR3b3JrU3RvcmFnZVNlc3Npb247Cit9CisKICNpbmNsdWRl
IDxXZWJDb3JlL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xh
c3MgTmV0d29ya1Nlc3Npb247CisKIGNsYXNzIFNlc3Npb25UcmFja2VyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShTZXNzaW9uVHJhY2tlcik7CiBwdWJsaWM6Ci0gICAgLy8gRklYTUU6IHNl
c3Npb25NYXAoKSdzIHJldHVybmVkIG1hcCBkb2VzIG5vdCBpbmNsdWRlIGRlZmF1bHQgc2Vzc2lv
bi4KLSAgICBzdGF0aWMgY29uc3QgSGFzaE1hcDxXZWJDb3JlOjpTZXNzaW9uSUQsIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiYgc2Vzc2lvbk1hcCgpOwor
ICAgIC8vIEZJWE1FOiBzdG9yYWdlU2Vzc2lvbk1hcCgpJ3MgcmV0dXJuZWQgbWFwIGRvZXMgbm90
IGluY2x1ZGUgZGVmYXVsdCBzZXNzaW9uLgorICAgIHN0YXRpYyBjb25zdCBIYXNoTWFwPFdlYkNv
cmU6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbj4+JiBzdG9yYWdlU2Vzc2lvbk1hcCgpOworCiAgICAgc3RhdGljIGNvbnN0IFN0cmluZyYg
Z2V0SWRlbnRpZmllckJhc2UoKTsKLSAgICBzdGF0aWMgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKiBzZXNzaW9uKFdlYkNvcmU6OlNlc3Npb25JRCk7CisgICAgc3RhdGljIFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNlc3Npb24oV2ViQ29yZTo6U2Vzc2lvbklE
KTsKICAgICBzdGF0aWMgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRChjb25zdCBXZWJDb3Jl
OjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRTZXNzaW9uKFdl
YkNvcmU6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbj4pOworICAgIHN0YXRpYyB2b2lkIHNldFNlc3Npb24oV2ViQ29yZTo6U2Vzc2lvbklE
LCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPgorI2lmIFVT
RShORVRXT1JLX1NFU1NJT04pCisgICAgICAgICwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTZXNz
aW9uPgorI2VuZGlmCisgICAgKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95U2Vzc2lvbihXZWJD
b3JlOjpTZXNzaW9uSUQpOwogICAgIHN0YXRpYyB2b2lkIHNldElkZW50aWZpZXJCYXNlKGNvbnN0
IFN0cmluZyYpOworICAgIAorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgLy8gRklYTUU6
IEEgTmV0d29ya1Nlc3Npb24gYW5kIGEgTmV0d29ya1N0b3JhZ2VTZXNzaW9uIHNob3VsZCBiZSB0
aGUgc2FtZSBvYmplY3Qgb25jZSBORVRXT1JLX1NFU1NJT04gaXMgdXNlZCBieSBkZWZhdWx0Lgor
ICAgIHN0YXRpYyBOZXR3b3JrU2Vzc2lvbiogbmV0d29ya1Nlc3Npb24oV2ViQ29yZTo6U2Vzc2lv
bklEKTsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdD
b250ZXh0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0JKHJldmlzaW9uIDE5MTk4
MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZy
YW1lTmV0d29ya2luZ0NvbnRleHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgIlNlc3Npb25UcmFj
a2VyLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYlBhZ2Uu
aCIKQEAgLTQ3LDcgKzQ4LDcgQEAgdm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1
cmVQcgogewogICAgIEFTU0VSVChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSk7CiAKLSAgICBpZiAo
U2Vzc2lvblRyYWNrZXI6OnNlc3Npb24oc2Vzc2lvbklEKSkKKyAgICBpZiAoU2Vzc2lvblRyYWNr
ZXI6OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0
cmluZyBiYXNlOwpAQCAtNTYsNyArNTcsMTEgQEAgdm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0OjplbnN1cmVQcgogICAgIGVsc2UKICAgICAgICAgYmFzZSA9IFNlc3Npb25UcmFja2VyOjpn
ZXRJZGVudGlmaWVyQmFzZSgpOwogCi0gICAgU2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24oc2Vz
c2lvbklELCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Np
b24oYmFzZSArICcuJyArIFN0cmluZzo6bnVtYmVyKHNlc3Npb25JRC5zZXNzaW9uSUQoKSkpKTsK
KyAgICBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihiYXNlICsgJy4nICsgU3RyaW5n
OjpudW1iZXIoc2Vzc2lvbklELnNlc3Npb25JRCgpKSkKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9O
KQorICAgICAgICAsIHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya1Nlc3Npb24+KE5ldHdvcmtTZXNz
aW9uOjpUeXBlOjpFcGhlbWVyYWwsIHNlc3Npb25JRCkKKyNlbmRpZgorICAgICk7CiB9CiAKIHZv
aWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2V0Q29va2llQWNjZXB0UG9saWN5Rm9yQWxs
Q29udGV4dHMoSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCkBAIC02Niw3ICs3MSw3IEBA
IHZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2V0Q29va2kKICAgICBpZiAoUmV0YWlu
UHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLmNvb2tpZVN0b3JhZ2UoKSkKICAgICAg
ICAgV0tTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHBvbGlj
eSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHNlc3Npb24gOiBTZXNzaW9uVHJhY2tlcjo6c2Vz
c2lvbk1hcCgpLnZhbHVlcygpKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBzZXNzaW9uIDogU2Vz
c2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uTWFwKCkudmFsdWVzKCkpIHsKICAgICAgICAgaWYg
KHNlc3Npb24pCiAgICAgICAgICAgICBXS1NldEhUVFBDb29raWVBY2NlcHRQb2xpY3koc2Vzc2lv
bi0+Y29va2llU3RvcmFnZSgpLmdldCgpLCBwb2xpY3kpOwogICAgIH0KQEAgLTExMCw4ICsxMTUs
OCBAQCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIFdlYkZyYW1lTmV0d29ya2luCiB7CiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBpZiAoZnJhbWUoKSkgewotICAgICAgICBpZiAo
TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6OnNlc3Npb24o
ZnJhbWUoKS0+cGFnZSgpLT5zZXNzaW9uSUQoKSkpCi0gICAgICAgICAgICByZXR1cm4gKnNlc3Np
b247CisgICAgICAgIGlmIChhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpz
dG9yYWdlU2Vzc2lvbihmcmFtZSgpLT5wYWdlKCktPnNlc3Npb25JRCgpKSkKKyAgICAgICAgICAg
IHJldHVybiAqc3RvcmFnZVNlc3Npb247CiAgICAgICAgIC8vIFNvbWUgcmVxdWVzdHMgbWF5IHN0
aWxsIGJlIGNvbWluZyBzaG9ydGx5IGFmdGVyIFdlYlByb2Nlc3Mgd2FzIHRvbGQgdG8gZGVzdHJv
eSBpdHMgc2Vzc2lvbi4KICAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIHNlc3Npb24gSUQuIFBs
ZWFzZSBmaWxlIGEgYnVnIHVubGVzcyB5b3UganVzdCBkaXNhYmxlZCBwcml2YXRlIGJyb3dzaW5n
LCBpbiB3aGljaCBjYXNlIGl0J3MgYW4gZXhwZWN0ZWQgcmFjZS4iKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3
b3JraW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwCShyZXZp
c2lvbiAxOTE5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDcgKzQ1LDcgQEAgdm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcgogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBpZiAoU2Vzc2lvblRyYWNrZXI6OnNl
c3Npb24oc2Vzc2lvbklEKSkKKyAgICBpZiAoU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9u
KHNlc3Npb25JRCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFNlc3Npb25UcmFja2VyOjpzZXRT
ZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJv
d3NpbmdTZXNzaW9uKFN0cmluZzo6bnVtYmVyKHNlc3Npb25JRC5zZXNzaW9uSUQoKSkpKTsKQEAg
LTcyLDcgKzcyLDcgQEAgdm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRDb29raQog
ICAgIFNvdXBOZXR3b3JrU2Vzc2lvbiYgc291cFNlc3Npb24gPSBOZXR3b3JrU3RvcmFnZVNlc3Np
b246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLnNvdXBOZXR3b3JrU2Vzc2lvbigpOwogICAgIHNv
dXBfY29va2llX2phcl9zZXRfYWNjZXB0X3BvbGljeShzb3VwU2Vzc2lvbi5jb29raWVKYXIoKSwg
c291cFBvbGljeSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHNlc3Npb24gOiBTZXNzaW9uVHJh
Y2tlcjo6c2Vzc2lvbk1hcCgpLnZhbHVlcygpKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBzZXNz
aW9uIDogU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uTWFwKCkudmFsdWVzKCkpIHsKICAg
ICAgICAgaWYgKHNlc3Npb24pCiAgICAgICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfc2V0X2FjY2Vw
dF9wb2xpY3koc2Vzc2lvbi0+c291cE5ldHdvcmtTZXNzaW9uKCkuY29va2llSmFyKCksIHNvdXBQ
b2xpY3kpOwogICAgIH0KQEAgLTg2LDcgKzg2LDcgQEAgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dDo6V2ViRnJhbWVOZXR3bwogTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBXZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0OjpzdG9yYWdlU2Vzc2lvbigpIGNvbnN0CiB7CiAgICAgaWYgKGZyYW1lKCkgJiYg
ZnJhbWUoKS0+cGFnZSgpLT51c2VzRXBoZW1lcmFsU2Vzc2lvbigpKQotICAgICAgICByZXR1cm4g
KlNlc3Npb25UcmFja2VyOjpzZXNzaW9uKFNlc3Npb25JRDo6bGVnYWN5UHJpdmF0ZVNlc3Npb25J
RCgpKTsKKyAgICAgICAgcmV0dXJuICpTZXNzaW9uVHJhY2tlcjo6c3RvcmFnZVNlc3Npb24oU2Vz
c2lvbklEOjpsZWdhY3lQcml2YXRlU2Vzc2lvbklEKCkpOwogCiAgICAgcmV0dXJuIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264738</attachid>
            <date>2015-11-03 15:26:20 -0800</date>
            <delta_ts>2015-11-03 15:28:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150857-20151103152523.patch</filename>
            <type>text/plain</type>
            <size>28622</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTk4MCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDE1LTExLTAzICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ3JlYXRlIGEg
TmV0d29ya1Nlc3Npb24gZm9yIGVhY2ggU2Vzc2lvbklECisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbmFtZXMgU2Vzc2lvblRyYWNr
ZXI6OnNlc3Npb24gdG8gc3RvcmFnZVNlc3Npb24gYW5kIG1ha2VzIGEgcGFyYWxsZWwKKyAgICAg
ICAgc3RydWN0dXJlIGZvciBOZXR3b3JrU2Vzc2lvbnMuICBOZXR3b3JrU2Vzc2lvbiBhbmQgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uIHNob3VsZCBldmVudHVhbGx5CisgICAgICAgIGJlY29tZSB0aGUg
c2FtZSBjbGFzcyBpbiBXZWJDb3JlLiAgQmVjYXVzZSBub3QgZXZlcnlib2R5IHVzZXMgTmV0d29y
a1Nlc3Npb25zIHlldCwKKyAgICAgICAgd2Uga2VlcCB0aGVtIHNlcGFyYXRlIGJ1dCBjcmVhdGVk
LCBkZXN0cm95ZWQsIGFuZCBtYW5hZ2VkIHRvZ2V0aGVyLgorCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpzdG9yYWdlU2Vzc2lvbik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0
YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9y
aWdpbnMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnROZXR3b3Jr
TG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YWJvcnQpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmg6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtTZXNzaW9uVGFza0NsaWVudDo6fk5ldHdvcmtTZXNzaW9uVGFza0NsaWVudCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrOjpjbGVhckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtp
bmdEYXRhVGFzazo6Y2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2lu
Z0RhdGFUYXNrOjpjbGVhckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtTZXNzaW9uOjp+TmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OmNv
bmZpZ3VyYXRpb25Gb3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6ZGVmYXVsdE5ldHdvcmtTZXNz
aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpjcmVhdGVEYXRhVGFza1dpdGhSZXF1ZXN0KToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmRhdGFUYXNrRm9ySWRlbnRpZmllcik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFUYXNrKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
RGF0YVRhc2s6OnJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6dGFz
a0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OnNpbmdsZXRvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFzazo6TmV0d29ya2luZ0Rh
dGFUYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2luZ0RhdGFUYXNrOjp+
TmV0d29ya2luZ0RhdGFUYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2lu
Z0RhdGFUYXNrOjpzdXNwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2lu
Z0RhdGFUYXNrOjpyZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JraW5n
RGF0YVRhc2s6OnRhc2tJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZU5ldHdvcmtpbmdDb250ZXh0OjpzdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKToK
KyAgICAgICAgKiBTaGFyZWQvU2Vzc2lvblRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViS2l0Ojpz
dGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCk6CisgICAgICAgIChXZWJLaXQ6OmlkZW50aWZpZXJCYXNl
KToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uTWFwKToK
KyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OmdldElkZW50aWZpZXJCYXNlKToKKyAg
ICAgICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAg
KFdlYktpdDo6c3RhdGljU2Vzc2lvbk1hcCk6CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25UcmFj
a2VyOjpuZXR3b3JrU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpz
ZXNzaW9uSUQpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbik6
CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpkZXN0cm95U2Vzc2lvbik6CisgICAg
ICAgIChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpzZXNzaW9uTWFwKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OnNlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAq
IFNoYXJlZC9TZXNzaW9uVHJhY2tlci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRDb29raWVB
Y2NlcHRQb2xpY3lGb3JBbGxDb250ZXh0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQ6OnN0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2lu
Z1Nlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojpz
ZXRDb29raWVBY2NlcHRQb2xpY3lGb3JBbGxDb250ZXh0cyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnN0b3JhZ2VTZXNzaW9uKToKKwogMjAxNS0xMS0wMyAg
QW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5
IC1bX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnkgX2ludm9rZU1ldGhvZDpdCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9jb25maWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9jb25maWcuaAko
cmV2aXNpb24gMTkxOTgwKQorKysgU291cmNlL1dlYktpdDIvY29uZmlnLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc0LDcgKzc0LDcgQEAKICNkZWZpbmUgSEFWRV9XSU5ET1dfU0VSVkVSX09DQ0xVU0lP
Tl9OT1RJRklDQVRJT05TIDEKICNlbmRpZgogI2lmbmRlZiBVU0VfTkVUV09SS19TRVNTSU9OCi0j
ZGVmaW5lIFVTRV9ORVRXT1JLX1NFU1NJT04gMAorI2RlZmluZSBVU0VfTkVUV09SS19TRVNTSU9O
IDEKICNlbmRpZgogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJ
KHJldmlzaW9uIDE5MTk4MCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDkgKzE2
OCw5IEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnByZWYKIHN0YXRpYyBO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mIHN0b3JhZ2VTZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQp
CiB7CiAgICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7Ci0gICAgICAgIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbiogcHJpdmF0ZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbihz
ZXNzaW9uSUQpOwotICAgICAgICBpZiAocHJpdmF0ZVNlc3Npb24pCi0gICAgICAgICAgICByZXR1
cm4gKnByaXZhdGVTZXNzaW9uOworICAgICAgICBOZXR3b3JrU3RvcmFnZVNlc3Npb24qIHByaXZh
dGVTdG9yYWdlU2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9u
SUQpOworICAgICAgICBpZiAocHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKQorICAgICAgICAgICAgcmV0
dXJuICpwcml2YXRlU3RvcmFnZVNlc3Npb247CiAgICAgICAgIC8vIFNvbWUgcmVxdWVzdHMgd2l0
aCBwcml2YXRlIGJyb3dzaW5nIG1vZGUgcmVxdWVzdGVkIG1heSBzdGlsbCBiZSBjb21pbmcgc2hv
cnRseSBhZnRlciBOZXR3b3JrUHJvY2VzcyB3YXMgdG9sZCB0byBkZXN0cm95IGl0cyBzZXNzaW9u
LgogICAgICAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byB0cmFjayBwcml2YXRlIGJyb3dzaW5n
IHNlc3Npb25zIG1vcmUgcmlnb3JvdXNseS4KICAgICAgICAgTE9HX0VSUk9SKCJQcml2YXRlIGJy
b3dzaW5nIHdhcyByZXF1ZXN0ZWQsIGJ1dCB0aGVyZSB3YXMgbm8gc2Vzc2lvbiBmb3IgaXQuIFBs
ZWFzZSBmaWxlIGEgYnVnIHVubGVzcyB5b3UganVzdCBkaXNhYmxlZCBwcml2YXRlIGJyb3dzaW5n
LCBpbiB3aGljaCBjYXNlIGl0J3MgYW4gZXhwZWN0ZWQgcmFjZS4iKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHJldmlzaW9u
IDE5MTk4MCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM3LDcgKzMzNyw3IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmZldGNoV2Vic2l0ZURhdGEoU2UKICAgICB9KSk7CiAKICAgICBpZiAod2Vic2l0ZURhdGFU
eXBlcyAmIFdlYnNpdGVEYXRhVHlwZUNvb2tpZXMpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpzZXNzaW9uKHNlc3Npb25JRCkpCisg
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6
c3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKSkKICAgICAgICAgICAgIGdldEhvc3RuYW1lc1dpdGhD
b29raWVzKCpuZXR3b3JrU3RvcmFnZVNlc3Npb24sIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJz
aXRlRGF0YS5ob3N0TmFtZXNXaXRoQ29va2llcyk7CiAgICAgfQogCkBAIC0zNTIsMTMgKzM1Miwx
MyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YShTCiB7CiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMgJiBXZWJzaXRlRGF0YVR5cGVI
U1RTQ2FjaGUpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IFNl
c3Npb25UcmFja2VyOjpzZXNzaW9uKHNlc3Npb25JRCkpCisgICAgICAgIGlmIChhdXRvKiBuZXR3
b3JrU3RvcmFnZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c3RvcmFnZVNlc3Npb24oc2Vzc2lv
bklEKSkKICAgICAgICAgICAgIGNsZWFySFNUU0NhY2hlKCpuZXR3b3JrU3RvcmFnZVNlc3Npb24s
IG1vZGlmaWVkU2luY2UpOwogICAgIH0KICNlbmRpZgogCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlw
ZXMgJiBXZWJzaXRlRGF0YVR5cGVDb29raWVzKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3Jr
U3RvcmFnZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbihzZXNzaW9uSUQpKQorICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6OnN0
b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgICAgICBkZWxldGVBbGxDb29raWVzTW9k
aWZpZWRTaW5jZSgqbmV0d29ya1N0b3JhZ2VTZXNzaW9uLCBtb2RpZmllZFNpbmNlKTsKICAgICB9
CiAKQEAgLTQxOCw3ICs0MTgsNyBAQCBzdGF0aWMgdm9pZCBjbGVhckRpc2tDYWNoZUVudHJpZXMo
Y29uc3QgCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMo
U2Vzc2lvbklEIHNlc3Npb25JRCwgdWludDY0X3Qgd2Vic2l0ZURhdGFUeXBlcywgY29uc3QgVmVj
dG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbnMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBj
b29raWVIb3N0TmFtZXMsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7CiAgICAgaWYgKHdlYnNpdGVE
YXRhVHlwZXMgJiBXZWJzaXRlRGF0YVR5cGVDb29raWVzKSB7Ci0gICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbihzZXNzaW9uSUQp
KQorICAgICAgICBpZiAoYXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gU2Vzc2lvblRyYWNr
ZXI6OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgICAgICBkZWxldGVDb29raWVz
Rm9ySG9zdG5hbWVzKCpuZXR3b3JrU3RvcmFnZVNlc3Npb24sIGNvb2tpZUhvc3ROYW1lcyk7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDE5MTk4MCkKKysrIFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b25NZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmgi
CiAjaW5jbHVkZSAiUmVtb3RlTmV0d29ya2luZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJTZXNzaW9u
VHJhY2tlci5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiU2hh
cmVkTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCkBAIC0xODks
NyArMTkwLDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0TmV0d29yawogICAg
IGJvb2wgc2hvdWxkU25pZmYgPSBtX3BhcmFtZXRlcnMuY29udGVudFNuaWZmaW5nUG9saWN5ID09
IFNuaWZmQ29udGVudDsKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIFVOVVNFRF9QQVJB
TShzaG91bGRTbmlmZik7IC8vIEZJWE1FOiBVc2UgdGhpcy4KLSAgICBtX3Rhc2sgPSBOZXR3b3Jr
U2Vzc2lvbjo6c2luZ2xldG9uKCktPmNyZWF0ZURhdGFUYXNrV2l0aFJlcXVlc3QobV9jdXJyZW50
UmVxdWVzdCwgKnRoaXMpOworICAgIG1fdGFzayA9IFNlc3Npb25UcmFja2VyOjpuZXR3b3JrU2Vz
c2lvbihzZXNzaW9uSUQoKSktPmNyZWF0ZURhdGFUYXNrV2l0aFJlcXVlc3QobV9jdXJyZW50UmVx
dWVzdCwgKnRoaXMpOwogICAgIG1fdGFzay0+cmVzdW1lKCk7CiAjZWxzZQogICAgIG1faGFuZGxl
ID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShtX25ldHdvcmtpbmdDb250ZXh0LmdldCgpLCBtX2N1
cnJlbnRSZXF1ZXN0LCB0aGlzLCBtX2RlZmVyc0xvYWRpbmcsIHNob3VsZFNuaWZmKTsKQEAgLTI1
Miw3ICsyNTMsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YWJvcnQoKQogCiAjaWYg
VVNFKE5FVFdPUktfU0VTU0lPTikKICAgICBpZiAobV90YXNrKQotICAgICAgICBtX3Rhc2stPnN1
c3BlbmQoKTsKKyAgICAgICAgbV90YXNrLT5jYW5jZWwoKTsKICAgICAvLyBGSVhNRTogRG8gc29t
ZXRoaW5nIHdpdGggdGhlIG5ldHdvcmsgY2FjaGUgaGVyZS4KICAgICBub3RJbXBsZW1lbnRlZCgp
OwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNv
dXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiAxOTE5ODApCisrKyBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjEzLDcgKzIxMyw3IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8UmVtb3RlTmV0d29y
a2luZ0NvbnRleHQ+IG1fbmV0d29ya2luZ0NvbnRleHQ7CiAjaWYgVVNFKE5FVFdPUktfU0VTU0lP
TikKLSAgICBSZWZQdHI8TmV0d29ya2luZ0RhdGFUYXNrPiBtX3Rhc2s7CisgICAgUmVmUHRyPE5l
dHdvcmtEYXRhVGFzaz4gbV90YXNrOwogI2Vsc2UKICAgICBSZWZQdHI8V2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGU+IG1faGFuZGxlOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmgJKHJldmlzaW9uIDE5MTk4MCkKKysrIFNvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAgT0JKQ19DTEFTUyBOU1VSTFNlc3Npb25EYXRhVGFzazsKIE9CSkNf
Q0xBU1MgTlNPcGVyYXRpb25RdWV1ZTsKIE9CSkNfQ0xBU1MgTmV0d29ya1Nlc3Npb25EZWxlZ2F0
ZTsKIAorI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lvbklELmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
QEAgLTc0LDQ4ICs3NSw1MSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+TmV0d29ya1Nlc3Npb25U
YXNrQ2xpZW50KCkgeyB9CiB9OwogCi1jbGFzcyBOZXR3b3JraW5nRGF0YVRhc2sgOiBwdWJsaWMg
UmVmQ291bnRlZDxOZXR3b3JraW5nRGF0YVRhc2s+IHsKK2NsYXNzIE5ldHdvcmtEYXRhVGFzayA6
IHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtEYXRhVGFzaz4gewogICAgIGZyaWVuZCBjbGFzcyBO
ZXR3b3JrU2Vzc2lvbjsKIHB1YmxpYzoKLSAgICB2b2lkIHN1c3BlbmQoKTsKKyAgICB2b2lkIGNh
bmNlbCgpOwogICAgIHZvaWQgcmVzdW1lKCk7CiAKICAgICB1aW50NjRfdCB0YXNrSWRlbnRpZmll
cigpOwogCi0gICAgfk5ldHdvcmtpbmdEYXRhVGFzaygpOworICAgIH5OZXR3b3JrRGF0YVRhc2so
KTsKIAogICAgIE5ldHdvcmtTZXNzaW9uVGFza0NsaWVudCogY2xpZW50KCkgeyByZXR1cm4gbV9j
bGllbnQ7IH0KICAgICB2b2lkIGNsZWFyQ2xpZW50KCkgeyBtX2NsaWVudCA9IG51bGxwdHI7IH0K
IAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBOZXR3b3JraW5nRGF0YVRhc2soTmV0d29ya1Nlc3Np
b24mLCBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQmLCBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0
YVRhc2s+KTsKLQogICAgIE5ldHdvcmtTZXNzaW9uJiBtX3Nlc3Npb247Ci0gICAgUmV0YWluUHRy
PE5TVVJMU2Vzc2lvbkRhdGFUYXNrPiBtX3Rhc2s7CiAgICAgTmV0d29ya1Nlc3Npb25UYXNrQ2xp
ZW50KiBtX2NsaWVudDsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBleHBsaWNpdCBOZXR3b3Jr
RGF0YVRhc2soTmV0d29ya1Nlc3Npb24mLCBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQmLCBSZXRh
aW5QdHI8TlNVUkxTZXNzaW9uRGF0YVRhc2s+JiYpOworICAgIFJldGFpblB0cjxOU1VSTFNlc3Np
b25EYXRhVGFzaz4gbV90YXNrOworI2VuZGlmCiB9OwogCi1jbGFzcyBOZXR3b3JrU2Vzc2lvbiA6
IHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtTZXNzaW9uPiB7Ci0gICAgZnJpZW5kIGNsYXNzIE5l
dHdvcmtpbmdEYXRhVGFzazsKK2NsYXNzIE5ldHdvcmtTZXNzaW9uIHsKKyAgICBmcmllbmQgY2xh
c3MgTmV0d29ya0RhdGFUYXNrOwogcHVibGljOgogICAgIGVudW0gY2xhc3MgVHlwZSB7CiAgICAg
ICAgIE5vcm1hbCwKICAgICAgICAgRXBoZW1lcmFsCiAgICAgfTsKKyAgICBOZXR3b3JrU2Vzc2lv
bihUeXBlLCBXZWJDb3JlOjpTZXNzaW9uSUQpOworICAgIH5OZXR3b3JrU2Vzc2lvbigpOwogCi0g
ICAgUmVmPE5ldHdvcmtpbmdEYXRhVGFzaz4gY3JlYXRlRGF0YVRhc2tXaXRoUmVxdWVzdChjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQmKTsK
KyAgICBzdGF0aWMgTmV0d29ya1Nlc3Npb24mIGRlZmF1bHRTZXNzaW9uKCk7CisgICAgCisgICAg
UmVmPE5ldHdvcmtEYXRhVGFzaz4gY3JlYXRlRGF0YVRhc2tXaXRoUmVxdWVzdChjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQmKTsKIAotICAg
IHN0YXRpYyBSZWY8TmV0d29ya1Nlc3Npb24+IHNpbmdsZXRvbigpOyAvLyBGSVhNRTogVGhpcyBz
aG91bGRuJ3QgYWN0dWFsbHkgYmUgYSBzaW5nbGV0b24uCi0gICAgTmV0d29ya2luZ0RhdGFUYXNr
KiBkYXRhVGFza0ZvcklkZW50aWZpZXIodWludDY0X3QpOworICAgIE5ldHdvcmtEYXRhVGFzayog
ZGF0YVRhc2tGb3JJZGVudGlmaWVyKHVpbnQ2NF90KTsKIAotICAgIH5OZXR3b3JrU2Vzc2lvbigp
IHsgQVNTRVJUKG1fZGF0YVRhc2tNYXAuaXNFbXB0eSgpKTsgfQogcHJpdmF0ZToKLSAgICBzdGF0
aWMgUmVmPE5ldHdvcmtTZXNzaW9uPiBjcmVhdGUoVHlwZSk7Ci0KLSAgICBOZXR3b3JrU2Vzc2lv
bihUeXBlKTsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBOZXR3b3JraW5nRGF0YVRhc2sqPiBtX2Rh
dGFUYXNrTWFwOworICAgIFdlYkNvcmU6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKKyAgICBIYXNo
TWFwPHVpbnQ2NF90LCBOZXR3b3JrRGF0YVRhc2sqPiBtX2RhdGFUYXNrTWFwOworI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb24+IG1fc2Vzc2lvbjsKICAgICBS
ZXRhaW5QdHI8TmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gbV9zZXNzaW9uRGVsZWdhdGU7CisjZW5k
aWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1t
CShyZXZpc2lvbiAxOTE5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2Nv
YS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBA
CiAjaW1wb3J0IDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0NGTmV0d29ya1NQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9DcmVkZW50aWFsLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9SZXNvdXJjZUVycm9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgog
I2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CkBAIC0xNTgsMTcgKzE1OSw2IEBA
IC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2kKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAgICAgCi1SZWY8TmV0d29ya1Nlc3Npb24+IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUo
VHlwZSB0eXBlKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtTZXNzaW9uKHR5
cGUpKTsKLX0KLQotUmVmPE5ldHdvcmtTZXNzaW9uPiBOZXR3b3JrU2Vzc2lvbjo6c2luZ2xldG9u
KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmPE5ldHdvcmtTZXNzaW9uPj4gc2hh
cmVkSW5zdGFuY2UoTmV0d29ya1Nlc3Npb246OmNyZWF0ZShUeXBlOjpOb3JtYWwpKTsKLSAgICBy
ZXR1cm4gc2hhcmVkSW5zdGFuY2UuZ2V0KCkuY29weVJlZigpOwotfQotICAgIAogc3RhdGljIE5T
VVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb25Gb3JUeXBlKE5ldHdvcmtTZXNz
aW9uOjpUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0xNzksNDEgKzE2OSw1
NCBAQCBzdGF0aWMgTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiAqY29uZmlnCiAgICAgfQogfQog
Ci1OZXR3b3JrU2Vzc2lvbjo6TmV0d29ya1Nlc3Npb24oVHlwZSB0eXBlKQorTmV0d29ya1Nlc3Np
b24mIE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TmV0d29ya1Nlc3Npb24+IHNl
c3Npb24oTmV0d29ya1Nlc3Npb246OlR5cGU6Ok5vcm1hbCwgV2ViQ29yZTo6U2Vzc2lvbklEOjpk
ZWZhdWx0U2Vzc2lvbklEKCkpOworICAgIHJldHVybiBzZXNzaW9uOworfQorCitOZXR3b3JrU2Vz
c2lvbjo6TmV0d29ya1Nlc3Npb24oVHlwZSB0eXBlLCBXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lv
bklEKQorICAgIDogbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQogewogICAgIG1fc2Vzc2lvbkRlbGVn
YXRlID0gYWRvcHROUyhbW05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoTmV0
d29ya1Nlc3Npb246KnRoaXNdKTsKIAogICAgIE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmNv
bmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uRm9yVHlwZSh0eXBlKTsKLSAgICAvLyBGSVhNRTog
VXNlIFNlc3Npb25UcmFja2VyIHRvIG1ha2Ugc3VyZSB0aGUgY29ycmVjdCBjb29raWUgc3RvcmFn
ZSBpcyB1c2VkIG9uY2UgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBOZXR3b3JrU2Vzc2lvbi4KLSAg
ICBpZiAoYXV0byogc2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpzZXNzaW9uKFdlYkNvcmU6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSkgewotICAgICAgICBpZiAoQ0ZIVFRQQ29va2ll
U3RvcmFnZVJlZiBzdG9yYWdlID0gc2Vzc2lvbi0+Y29va2llU3RvcmFnZSgpLmdldCgpKQorICAg
IGlmIChhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lv
bihzZXNzaW9uSUQpKSB7CisgICAgICAgIGlmIChDRkhUVFBDb29raWVTdG9yYWdlUmVmIHN0b3Jh
Z2UgPSBzdG9yYWdlU2Vzc2lvbi0+Y29va2llU3RvcmFnZSgpLmdldCgpKQogICAgICAgICAgICAg
Y29uZmlndXJhdGlvbi5IVFRQQ29va2llU3RvcmFnZSA9IFtbW05TSFRUUENvb2tpZVN0b3JhZ2Ug
YWxsb2NdIF9pbml0V2l0aENGSFRUUENvb2tpZVN0b3JhZ2U6c3RvcmFnZV0gYXV0b3JlbGVhc2Vd
OwogICAgIH0KICAgICBtX3Nlc3Npb24gPSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmln
dXJhdGlvbjpjb25maWd1cmF0aW9uIGRlbGVnYXRlOnN0YXRpY19jYXN0PGlkPihtX3Nlc3Npb25E
ZWxlZ2F0ZS5nZXQoKSkgZGVsZWdhdGVRdWV1ZTpbTlNPcGVyYXRpb25RdWV1ZSBtYWluUXVldWVd
XTsKIH0KIAotUmVmPE5ldHdvcmtpbmdEYXRhVGFzaz4gTmV0d29ya1Nlc3Npb246OmNyZWF0ZURh
dGFUYXNrV2l0aFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQmIGNsaWVudCkKK05ldHdvcmtTZXNzaW9uOjp+TmV0
d29ya1Nlc3Npb24oKQoreworICAgIGZvciAoYXV0byogZGF0YVRhc2sgOiBtX2RhdGFUYXNrTWFw
LnZhbHVlcygpKQorICAgICAgICBkYXRhVGFzay0+Y2FuY2VsKCk7Cit9CisKK1JlZjxOZXR3b3Jr
RGF0YVRhc2s+IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGVEYXRhVGFza1dpdGhSZXF1ZXN0KGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgTmV0d29ya1Nlc3Npb25UYXNrQ2xp
ZW50JiBjbGllbnQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya2luZ0RhdGFU
YXNrKCp0aGlzLCBjbGllbnQsIFttX3Nlc3Npb24gZGF0YVRhc2tXaXRoUmVxdWVzdDpyZXF1ZXN0
Lm5zVVJMUmVxdWVzdChXZWJDb3JlOjpVcGRhdGVIVFRQQm9keSldKSk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgTmV0d29ya0RhdGFUYXNrKCp0aGlzLCBjbGllbnQsIFttX3Nlc3Npb24gZGF0
YVRhc2tXaXRoUmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdChXZWJDb3JlOjpVcGRhdGVIVFRQ
Qm9keSldKSk7CiB9CiAKLU5ldHdvcmtpbmdEYXRhVGFzayogTmV0d29ya1Nlc3Npb246OmRhdGFU
YXNrRm9ySWRlbnRpZmllcih1aW50NjRfdCB0YXNrSWRlbnRpZmllcikKK05ldHdvcmtEYXRhVGFz
ayogTmV0d29ya1Nlc3Npb246OmRhdGFUYXNrRm9ySWRlbnRpZmllcih1aW50NjRfdCB0YXNrSWRl
bnRpZmllcikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIHJldHVybiBtX2Rh
dGFUYXNrTWFwLmdldCh0YXNrSWRlbnRpZmllcik7CiB9CiAKLU5ldHdvcmtpbmdEYXRhVGFzazo6
TmV0d29ya2luZ0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrU2Vzc2lv
blRhc2tDbGllbnQmIGNsaWVudCwgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFUYXNrPiB0YXNr
KQorTmV0d29ya0RhdGFUYXNrOjpOZXR3b3JrRGF0YVRhc2soTmV0d29ya1Nlc3Npb24mIHNlc3Np
b24sIE5ldHdvcmtTZXNzaW9uVGFza0NsaWVudCYgY2xpZW50LCBSZXRhaW5QdHI8TlNVUkxTZXNz
aW9uRGF0YVRhc2s+JiYgdGFzaykKICAgICA6IG1fc2Vzc2lvbihzZXNzaW9uKQotICAgICwgbV90
YXNrKHRhc2spCiAgICAgLCBtX2NsaWVudCgmY2xpZW50KQorICAgICwgbV90YXNrKFdURjo6bW92
ZSh0YXNrKSkKIHsKICAgICBBU1NFUlQoIW1fc2Vzc2lvbi5tX2RhdGFUYXNrTWFwLmNvbnRhaW5z
KHRhc2tJZGVudGlmaWVyKCkpKTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIG1f
c2Vzc2lvbi5tX2RhdGFUYXNrTWFwLmFkZCh0YXNrSWRlbnRpZmllcigpLCB0aGlzKTsKIH0KIAot
TmV0d29ya2luZ0RhdGFUYXNrOjp+TmV0d29ya2luZ0RhdGFUYXNrKCkKK05ldHdvcmtEYXRhVGFz
azo6fk5ldHdvcmtEYXRhVGFzaygpCiB7CiAgICAgQVNTRVJUKG1fc2Vzc2lvbi5tX2RhdGFUYXNr
TWFwLmNvbnRhaW5zKHRhc2tJZGVudGlmaWVyKCkpKTsKICAgICBBU1NFUlQobV9zZXNzaW9uLm1f
ZGF0YVRhc2tNYXAuZ2V0KHRhc2tJZGVudGlmaWVyKCkpID09IHRoaXMpOwpAQCAtMjIxLDE3ICsy
MjQsMTcgQEAgTmV0d29ya2luZ0RhdGFUYXNrOjp+TmV0d29ya2luZ0RhdGFUYXNrKAogICAgIG1f
c2Vzc2lvbi5tX2RhdGFUYXNrTWFwLnJlbW92ZSh0YXNrSWRlbnRpZmllcigpKTsKIH0KIAotdm9p
ZCBOZXR3b3JraW5nRGF0YVRhc2s6OnN1c3BlbmQoKQordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNh
bmNlbCgpCiB7Ci0gICAgW21fdGFzayBzdXNwZW5kXTsKKyAgICBbbV90YXNrIGNhbmNlbF07CiB9
CiAKLXZvaWQgTmV0d29ya2luZ0RhdGFUYXNrOjpyZXN1bWUoKQordm9pZCBOZXR3b3JrRGF0YVRh
c2s6OnJlc3VtZSgpCiB7CiAgICAgW21fdGFzayByZXN1bWVdOwogfQogCi11aW50NjRfdCBOZXR3
b3JraW5nRGF0YVRhc2s6OnRhc2tJZGVudGlmaWVyKCkKK3VpbnQ2NF90IE5ldHdvcmtEYXRhVGFz
azo6dGFza0lkZW50aWZpZXIoKQogewogICAgIHJldHVybiBbbV90YXNrIHRhc2tJZGVudGlmaWVy
XTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3
b3JraW5nQ29udGV4dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0JKHJldmlzaW9uIDE5MTk4MCkKKysr
IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4
dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2ltcG9ydCAiUmVtb3RlTmV0
d29ya2luZ0NvbnRleHQuaCIKIAogI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3MuaCIKKyNpbXBvcnQg
Ik5ldHdvcmtTZXNzaW9uLmgiCiAjaW1wb3J0ICJTZXNzaW9uVHJhY2tlci5oIgogI2ltcG9ydCAi
V2ViRXJyb3JzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KQEAgLTU1LDcg
KzU2LDcgQEAgYm9vbCBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6bG9jYWxGaWxlQwogCiBOZXR3
b3JrU3RvcmFnZVNlc3Npb24mIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjpzdG9yYWdlU2Vzc2lv
bigpIGNvbnN0CiB7Ci0gICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzZXNzaW9uID0gU2Vzc2lv
blRyYWNrZXI6OnNlc3Npb24obV9zZXNzaW9uSUQpOworICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lv
biogc2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbihtX3Nlc3Npb25JRCk7
CiAgICAgaWYgKHNlc3Npb24pCiAgICAgICAgIHJldHVybiAqc2Vzc2lvbjsKICAgICAvLyBTb21l
IHJlcXVlc3RzIG1heSBzdGlsbCBiZSBjb21pbmcgc2hvcnRseSBhZnRlciBOZXR3b3JrUHJvY2Vz
cyB3YXMgdG9sZCB0byBkZXN0cm95IGl0cyBzZXNzaW9uLgpAQCAtODksMTEgKzkwLDE1IEBAIHZv
aWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXYKIHsKICAgICBBU1NFUlQoc2Vz
c2lvbklELmlzRXBoZW1lcmFsKCkpOwogCi0gICAgaWYgKFNlc3Npb25UcmFja2VyOjpzZXNzaW9u
KHNlc3Npb25JRCkpCisgICAgaWYgKFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbihzZXNz
aW9uSUQpKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQoIVNlc3Npb25UcmFja2VyOjpn
ZXRJZGVudGlmaWVyQmFzZSgpLmlzTnVsbCgpKTsKLSAgICBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vz
c2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlUHJpdmF0ZUJyb3dz
aW5nU2Vzc2lvbihTZXNzaW9uVHJhY2tlcjo6Z2V0SWRlbnRpZmllckJhc2UoKSArICcuJyArIFN0
cmluZzo6bnVtYmVyKHNlc3Npb25JRC5zZXNzaW9uSUQoKSkpKTsKKyAgICBTZXNzaW9uVHJhY2tl
cjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlUHJp
dmF0ZUJyb3dzaW5nU2Vzc2lvbihTZXNzaW9uVHJhY2tlcjo6Z2V0SWRlbnRpZmllckJhc2UoKSAr
ICcuJyArIFN0cmluZzo6bnVtYmVyKHNlc3Npb25JRC5zZXNzaW9uSUQoKSkpCisjaWYgVVNFKE5F
VFdPUktfU0VTU0lPTikKKyAgICAgICAgLCBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTZXNzaW9u
PihOZXR3b3JrU2Vzc2lvbjo6VHlwZTo6RXBoZW1lcmFsLCBzZXNzaW9uSUQpCisjZW5kaWYKKyAg
ICApOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2Vzc2lvblRyYWNrZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZXNzaW9uVHJhY2tlci5j
cHAJKHJldmlzaW9uIDE5MTk4MCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZXNzaW9uVHJh
Y2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJTZXNzaW9uVHJhY2tlci5oIgogCisjaW5jbHVkZSAiTmV0d29ya1Nl
c3Npb24uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAK
QEAgLTMzLDcgKzM1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1zdGF0aWMgSGFzaE1hcDxTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3
b3JrU3RvcmFnZVNlc3Npb24+PiYgc3RhdGljU2Vzc2lvbk1hcCgpCitzdGF0aWMgSGFzaE1hcDxT
ZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiYgc3RhdGlj
U3RvcmFnZVNlc3Npb25NYXAoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAK
QEAgLTU3LDkgKzU5LDkgQEAgc3RhdGljIFN0cmluZyYgaWRlbnRpZmllckJhc2UoKQogICAgIHJl
dHVybiBiYXNlOwogfQogCi1jb25zdCBIYXNoTWFwPFNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRy
PE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4+JiBTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbk1hcCgpCitj
b25zdCBIYXNoTWFwPFNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbj4+JiBTZXNzaW9uVHJhY2tlcjo6c3RvcmFnZVNlc3Npb25NYXAoKQogewotICAgIHJldHVy
biBzdGF0aWNTZXNzaW9uTWFwKCk7CisgICAgcmV0dXJuIHN0YXRpY1N0b3JhZ2VTZXNzaW9uTWFw
KCk7CiB9CiAKIGNvbnN0IFN0cmluZyYgU2Vzc2lvblRyYWNrZXI6OmdldElkZW50aWZpZXJCYXNl
KCkKQEAgLTY3LDEyICs2OSwyOSBAQCBjb25zdCBTdHJpbmcmIFNlc3Npb25UcmFja2VyOjpnZXRJ
ZGVudGlmCiAgICAgcmV0dXJuIGlkZW50aWZpZXJCYXNlKCk7CiB9CiAKLU5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiogU2Vzc2lvblRyYWNrZXI6OnNlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCkKK05l
dHdvcmtTdG9yYWdlU2Vzc2lvbiogU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKFNlc3Np
b25JRCBzZXNzaW9uSUQpCiB7CiAgICAgaWYgKHNlc3Npb25JRCA9PSBTZXNzaW9uSUQ6OmRlZmF1
bHRTZXNzaW9uSUQoKSkKICAgICAgICAgcmV0dXJuICZOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRl
ZmF1bHRTdG9yYWdlU2Vzc2lvbigpOworICAgIHJldHVybiBzdGF0aWNTdG9yYWdlU2Vzc2lvbk1h
cCgpLmdldChzZXNzaW9uSUQpOworfQorCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKK3N0YXRp
YyBIYXNoTWFwPFNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTZXNzaW9uPj4mIHN0
YXRpY1Nlc3Npb25NYXAoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAg
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U2Vzc2lvbklELCBzdGQ6OnVuaXF1
ZV9wdHI8TmV0d29ya1Nlc3Npb24+Pj4gbWFwOworICAgIHJldHVybiBtYXAuZ2V0KCk7Cit9CisK
K05ldHdvcmtTZXNzaW9uKiBTZXNzaW9uVHJhY2tlcjo6bmV0d29ya1Nlc3Npb24oU2Vzc2lvbklE
IHNlc3Npb25JRCkKK3sKKyAgICBpZiAoc2Vzc2lvbklEID09IFNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKQorICAgICAgICByZXR1cm4gJk5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lv
bigpOwogICAgIHJldHVybiBzdGF0aWNTZXNzaW9uTWFwKCkuZ2V0KHNlc3Npb25JRCk7CiB9Cisj
ZW5kaWYKIAogU2Vzc2lvbklEIFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoY29uc3QgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uKQogewpAQCAtODEsMTkgKzEwMCwzMiBAQCBTZXNzaW9u
SUQgU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25JRChjb25zCiAgICAgcmV0dXJuIHN0b3JhZ2VTZXNz
aW9uVG9JRCgpLmdldCgmc2Vzc2lvbik7CiB9CiAKLXZvaWQgU2Vzc2lvblRyYWNrZXI6OnNldFNl
c3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbj4gc2Vzc2lvbikKK3ZvaWQgU2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24oU2Vzc2lv
bklEIHNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gc3Rv
cmFnZVNlc3Npb24KKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgICwgc3RkOjp1bmlxdWVf
cHRyPE5ldHdvcmtTZXNzaW9uPiBzZXNzaW9uCisjZW5kaWYKKykKIHsKKyAgICBBU1NFUlQoc3Rv
cmFnZVNlc3Npb24pOwogICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gU2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCkpOwotICAgIHN0b3JhZ2VTZXNzaW9uVG9JRCgpLnNldChzZXNzaW9uLmdldCgp
LCBzZXNzaW9uSUQpOworICAgIHN0b3JhZ2VTZXNzaW9uVG9JRCgpLnNldChzdG9yYWdlU2Vzc2lv
bi5nZXQoKSwgc2Vzc2lvbklEKTsKKyAgICBzdGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCgpLnNldChz
ZXNzaW9uSUQsIFdURjo6bW92ZShzdG9yYWdlU2Vzc2lvbikpOworI2lmIFVTRShORVRXT1JLX1NF
U1NJT04pCisgICAgQVNTRVJUKHNlc3Npb24pOwogICAgIHN0YXRpY1Nlc3Npb25NYXAoKS5zZXQo
c2Vzc2lvbklELCBXVEY6Om1vdmUoc2Vzc2lvbikpOworI2VuZGlmCiB9CiAKIHZvaWQgU2Vzc2lv
blRyYWNrZXI6OmRlc3Ryb3lTZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQpCiB7CiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBpZiAoc3RhdGljU2Vzc2lvbk1hcCgpLmNvbnRh
aW5zKHNlc3Npb25JRCkpIHsKLSAgICAgICAgc3RvcmFnZVNlc3Npb25Ub0lEKCkucmVtb3ZlKHNl
c3Npb24oc2Vzc2lvbklEKSk7CisgICAgaWYgKHN0YXRpY1N0b3JhZ2VTZXNzaW9uTWFwKCkuY29u
dGFpbnMoc2Vzc2lvbklEKSkgeworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgICAgIEFT
U0VSVF9XSVRIX01FU1NBR0Uoc3RhdGljU2Vzc2lvbk1hcCgpLmNvbnRhaW5zKHNlc3Npb25JRCks
ICJOZXR3b3JrU2Vzc2lvbnMgYW5kIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbnMgc2hvdWxkIGFsd2F5
cyBiZSBjcmVhdGVkLCBkZWxldGVkLCBhbmQgbWFuYWdlZCBhcyBwYWlycyIpOwogICAgICAgICBz
dGF0aWNTZXNzaW9uTWFwKCkucmVtb3ZlKHNlc3Npb25JRCk7CisjZW5kaWYKKyAgICAgICAgc3Rv
cmFnZVNlc3Npb25Ub0lEKCkucmVtb3ZlKHN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpOworICAg
ICAgICBzdGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCgpLnJlbW92ZShzZXNzaW9uSUQpOwogICAgIH0K
IH0KIApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1Nlc3Npb25UcmFja2VyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1Nlc3Npb25UcmFja2VyLmgJKHJldmlzaW9u
IDE5MTk4MCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZXNzaW9uVHJhY2tlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiwyNSArMjYsNDAgQEAKICNpZm5kZWYgU2Vzc2lvblRyYWNrZXJfaAog
I2RlZmluZSBTZXNzaW9uVHJhY2tlcl9oCiAKLSNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9y
YWdlU2Vzc2lvbi5oPgorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOworfQorCiAjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIE5ldHdvcmtTZXNzaW9uOworCiBjbGFzcyBTZXNzaW9u
VHJhY2tlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2Vzc2lvblRyYWNrZXIpOwogcHVi
bGljOgotICAgIC8vIEZJWE1FOiBzZXNzaW9uTWFwKCkncyByZXR1cm5lZCBtYXAgZG9lcyBub3Qg
aW5jbHVkZSBkZWZhdWx0IHNlc3Npb24uCi0gICAgc3RhdGljIGNvbnN0IEhhc2hNYXA8V2ViQ29y
ZTo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPj4mIHNlc3Npb25NYXAoKTsKKyAgICAvLyBGSVhNRTogc3RvcmFnZVNlc3Npb25NYXAoKSdz
IHJldHVybmVkIG1hcCBkb2VzIG5vdCBpbmNsdWRlIGRlZmF1bHQgc2Vzc2lvbi4KKyAgICBzdGF0
aWMgY29uc3QgSGFzaE1hcDxXZWJDb3JlOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiYgc3RvcmFnZVNlc3Npb25NYXAoKTsKKwogICAg
IHN0YXRpYyBjb25zdCBTdHJpbmcmIGdldElkZW50aWZpZXJCYXNlKCk7Ci0gICAgc3RhdGljIFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc2Vzc2lvbihXZWJDb3JlOjpTZXNzaW9uSUQp
OworICAgIHN0YXRpYyBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIHN0b3JhZ2VTZXNz
aW9uKFdlYkNvcmU6OlNlc3Npb25JRCk7CiAgICAgc3RhdGljIFdlYkNvcmU6OlNlc3Npb25JRCBz
ZXNzaW9uSUQoY29uc3QgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik7Ci0gICAgc3Rh
dGljIHZvaWQgc2V0U2Vzc2lvbihXZWJDb3JlOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRTZXNz
aW9uKFdlYkNvcmU6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtT
dG9yYWdlU2Vzc2lvbj4KKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgICAgICAsIHN0ZDo6
dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4KKyNlbmRpZgorICAgICk7CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveVNlc3Npb24oV2ViQ29yZTo6U2Vzc2lvbklEKTsKICAgICBzdGF0aWMgdm9pZCBz
ZXRJZGVudGlmaWVyQmFzZShjb25zdCBTdHJpbmcmKTsKKyAgICAKKyNpZiBVU0UoTkVUV09SS19T
RVNTSU9OKQorICAgIC8vIEZJWE1FOiBBIE5ldHdvcmtTZXNzaW9uIGFuZCBhIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiBzaG91bGQgYmUgdGhlIHNhbWUgb2JqZWN0IG9uY2UgTkVUV09SS19TRVNTSU9O
IGlzIHVzZWQgYnkgZGVmYXVsdC4KKyAgICBzdGF0aWMgTmV0d29ya1Nlc3Npb24qIG5ldHdvcmtT
ZXNzaW9uKFdlYkNvcmU6OlNlc3Npb25JRCk7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9t
YWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0Lm1tCShyZXZpc2lvbiAxOTE5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIgogCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIK
ICNpbmNsdWRlICJTZXNzaW9uVHJhY2tlci5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXIu
aCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCkBAIC00Nyw3ICs0OCw3IEBAIHZvaWQgV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHIKIHsKICAgICBBU1NFUlQoc2Vzc2lvbklELmlzRXBo
ZW1lcmFsKCkpOwogCi0gICAgaWYgKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uKHNlc3Npb25JRCkp
CisgICAgaWYgKFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgYmFzZTsKQEAgLTU2LDcgKzU3LDExIEBAIHZvaWQg
V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHIKICAgICBlbHNlCiAgICAgICAgIGJh
c2UgPSBTZXNzaW9uVHJhY2tlcjo6Z2V0SWRlbnRpZmllckJhc2UoKTsKIAotICAgIFNlc3Npb25U
cmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVh
dGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKGJhc2UgKyAnLicgKyBTdHJpbmc6Om51bWJlcihzZXNz
aW9uSUQuc2Vzc2lvbklEKCkpKSk7CisgICAgU2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24oc2Vz
c2lvbklELCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Np
b24oYmFzZSArICcuJyArIFN0cmluZzo6bnVtYmVyKHNlc3Npb25JRC5zZXNzaW9uSUQoKSkpCisj
aWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICAgICAgLCBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdv
cmtTZXNzaW9uPihOZXR3b3JrU2Vzc2lvbjo6VHlwZTo6RXBoZW1lcmFsLCBzZXNzaW9uSUQpCisj
ZW5kaWYKKyAgICApOwogfQogCiB2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNldENv
b2tpZUFjY2VwdFBvbGljeUZvckFsbENvbnRleHRzKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9s
aWN5KQpAQCAtNjYsNyArNzEsNyBAQCB2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNl
dENvb2tpCiAgICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVT
dG9yYWdlID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5j
b29raWVTdG9yYWdlKCkpCiAgICAgICAgIFdLU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShjb29r
aWVTdG9yYWdlLmdldCgpLCBwb2xpY3kpOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBzZXNzaW9u
IDogU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25NYXAoKS52YWx1ZXMoKSkgeworICAgIGZvciAoY29u
c3QgYXV0byYgc2Vzc2lvbiA6IFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbk1hcCgpLnZh
bHVlcygpKSB7CiAgICAgICAgIGlmIChzZXNzaW9uKQogICAgICAgICAgICAgV0tTZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KHNlc3Npb24tPmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgcG9saWN5KTsK
ICAgICB9CkBAIC0xMTAsOCArMTE1LDggQEAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBXZWJGcmFt
ZU5ldHdvcmtpbgogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgaWYgKGZy
YW1lKCkpIHsKLSAgICAgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc2Vzc2lvbiA9IFNl
c3Npb25UcmFja2VyOjpzZXNzaW9uKGZyYW1lKCktPnBhZ2UoKS0+c2Vzc2lvbklEKCkpKQotICAg
ICAgICAgICAgcmV0dXJuICpzZXNzaW9uOworICAgICAgICBpZiAoYXV0byogc3RvcmFnZVNlc3Np
b24gPSBTZXNzaW9uVHJhY2tlcjo6c3RvcmFnZVNlc3Npb24oZnJhbWUoKS0+cGFnZSgpLT5zZXNz
aW9uSUQoKSkpCisgICAgICAgICAgICByZXR1cm4gKnN0b3JhZ2VTZXNzaW9uOwogICAgICAgICAv
LyBTb21lIHJlcXVlc3RzIG1heSBzdGlsbCBiZSBjb21pbmcgc2hvcnRseSBhZnRlciBXZWJQcm9j
ZXNzIHdhcyB0b2xkIHRvIGRlc3Ryb3kgaXRzIHNlc3Npb24uCiAgICAgICAgIExPR19FUlJPUigi
SW52YWxpZCBzZXNzaW9uIElELiBQbGVhc2UgZmlsZSBhIGJ1ZyB1bmxlc3MgeW91IGp1c3QgZGlz
YWJsZWQgcHJpdmF0ZSBicm93c2luZywgaW4gd2hpY2ggY2FzZSBpdCdzIGFuIGV4cGVjdGVkIHJh
Y2UuIik7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9zb3VwL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291cC9XZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTkxOTgwKQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHZvaWQgV2ViRnJhbWVOZXR3b3JraW5n
Q29udGV4dDo6ZW5zdXJlUHIKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAg
aWYgKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uKHNlc3Npb25JRCkpCisgICAgaWYgKFNlc3Npb25U
cmFja2VyOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihTdHJpbmc6Om51bWJlcihzZXNzaW9u
SUQuc2Vzc2lvbklEKCkpKSk7CkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgV2ViRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dDo6c2V0Q29va2kKICAgICBTb3VwTmV0d29ya1Nlc3Npb24mIHNvdXBTZXNzaW9u
ID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5zb3VwTmV0
d29ya1Nlc3Npb24oKTsKICAgICBzb3VwX2Nvb2tpZV9qYXJfc2V0X2FjY2VwdF9wb2xpY3koc291
cFNlc3Npb24uY29va2llSmFyKCksIHNvdXBQb2xpY3kpOwogCi0gICAgZm9yIChjb25zdCBhdXRv
JiBzZXNzaW9uIDogU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25NYXAoKS52YWx1ZXMoKSkgeworICAg
IGZvciAoY29uc3QgYXV0byYgc2Vzc2lvbiA6IFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lv
bk1hcCgpLnZhbHVlcygpKSB7CiAgICAgICAgIGlmIChzZXNzaW9uKQogICAgICAgICAgICAgc291
cF9jb29raWVfamFyX3NldF9hY2NlcHRfcG9saWN5KHNlc3Npb24tPnNvdXBOZXR3b3JrU2Vzc2lv
bigpLmNvb2tpZUphcigpLCBzb3VwUG9saWN5KTsKICAgICB9CkBAIC04Niw3ICs4Niw3IEBAIFdl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OldlYkZyYW1lTmV0d28KIE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c3RvcmFnZVNlc3Npb24oKSBjb25zdAog
ewogICAgIGlmIChmcmFtZSgpICYmIGZyYW1lKCktPnBhZ2UoKS0+dXNlc0VwaGVtZXJhbFNlc3Np
b24oKSkKLSAgICAgICAgcmV0dXJuICpTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbihTZXNzaW9uSUQ6
OmxlZ2FjeVByaXZhdGVTZXNzaW9uSUQoKSk7CisgICAgICAgIHJldHVybiAqU2Vzc2lvblRyYWNr
ZXI6OnN0b3JhZ2VTZXNzaW9uKFNlc3Npb25JRDo6bGVnYWN5UHJpdmF0ZVNlc3Npb25JRCgpKTsK
IAogICAgIHJldHVybiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lv
bigpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264739</attachid>
            <date>2015-11-03 15:28:40 -0800</date>
            <delta_ts>2015-11-03 16:36:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150857-20151103152743.patch</filename>
            <type>text/plain</type>
            <size>28245</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTk4MCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDE1LTExLTAzICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ3JlYXRlIGEg
TmV0d29ya1Nlc3Npb24gZm9yIGVhY2ggU2Vzc2lvbklECisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbmFtZXMgU2Vzc2lvblRyYWNr
ZXI6OnNlc3Npb24gdG8gc3RvcmFnZVNlc3Npb24gYW5kIG1ha2VzIGEgcGFyYWxsZWwKKyAgICAg
ICAgc3RydWN0dXJlIGZvciBOZXR3b3JrU2Vzc2lvbnMuICBOZXR3b3JrU2Vzc2lvbiBhbmQgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uIHNob3VsZCBldmVudHVhbGx5CisgICAgICAgIGJlY29tZSB0aGUg
c2FtZSBjbGFzcyBpbiBXZWJDb3JlLiAgQmVjYXVzZSBub3QgZXZlcnlib2R5IHVzZXMgTmV0d29y
a1Nlc3Npb25zIHlldCwKKyAgICAgICAgd2Uga2VlcCB0aGVtIHNlcGFyYXRlIGJ1dCBjcmVhdGVk
LCBkZXN0cm95ZWQsIGFuZCBtYW5hZ2VkIHRvZ2V0aGVyLgorCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpzdG9yYWdlU2Vzc2lvbik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0
YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9y
aWdpbnMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnROZXR3b3Jr
TG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YWJvcnQpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmg6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtTZXNzaW9uVGFza0NsaWVudDo6fk5ldHdvcmtTZXNzaW9uVGFza0NsaWVudCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrOjpjbGVhckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtp
bmdEYXRhVGFzazo6Y2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2lu
Z0RhdGFUYXNrOjpjbGVhckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtTZXNzaW9uOjp+TmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OmNv
bmZpZ3VyYXRpb25Gb3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6ZGVmYXVsdE5ldHdvcmtTZXNz
aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpjcmVhdGVEYXRhVGFza1dpdGhSZXF1ZXN0KToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmRhdGFUYXNrRm9ySWRlbnRpZmllcik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFUYXNrKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
RGF0YVRhc2s6OnJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6dGFz
a0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OnNpbmdsZXRvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFzazo6TmV0d29ya2luZ0Rh
dGFUYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2luZ0RhdGFUYXNrOjp+
TmV0d29ya2luZ0RhdGFUYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2lu
Z0RhdGFUYXNrOjpzdXNwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2lu
Z0RhdGFUYXNrOjpyZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JraW5n
RGF0YVRhc2s6OnRhc2tJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZU5ldHdvcmtpbmdDb250ZXh0OjpzdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKToK
KyAgICAgICAgKiBTaGFyZWQvU2Vzc2lvblRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViS2l0Ojpz
dGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCk6CisgICAgICAgIChXZWJLaXQ6OmlkZW50aWZpZXJCYXNl
KToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uTWFwKToK
KyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OmdldElkZW50aWZpZXJCYXNlKToKKyAg
ICAgICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAg
KFdlYktpdDo6c3RhdGljU2Vzc2lvbk1hcCk6CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25UcmFj
a2VyOjpuZXR3b3JrU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpz
ZXNzaW9uSUQpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbik6
CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpkZXN0cm95U2Vzc2lvbik6CisgICAg
ICAgIChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpzZXNzaW9uTWFwKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OnNlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAq
IFNoYXJlZC9TZXNzaW9uVHJhY2tlci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRDb29raWVB
Y2NlcHRQb2xpY3lGb3JBbGxDb250ZXh0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQ6OnN0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2lu
Z1Nlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojpz
ZXRDb29raWVBY2NlcHRQb2xpY3lGb3JBbGxDb250ZXh0cyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnN0b3JhZ2VTZXNzaW9uKToKKwogMjAxNS0xMS0wMyAg
QW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5
IC1bX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnkgX2ludm9rZU1ldGhvZDpdCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiAxOTE5ODApCisrKyBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2OCw5ICsxNjgsOSBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpwcmVmCiBzdGF0aWMgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzdG9yYWdlU2Vzc2lv
bihTZXNzaW9uSUQgc2Vzc2lvbklEKQogewogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwo
KSkgewotICAgICAgICBOZXR3b3JrU3RvcmFnZVNlc3Npb24qIHByaXZhdGVTZXNzaW9uID0gU2Vz
c2lvblRyYWNrZXI6OnNlc3Npb24oc2Vzc2lvbklEKTsKLSAgICAgICAgaWYgKHByaXZhdGVTZXNz
aW9uKQotICAgICAgICAgICAgcmV0dXJuICpwcml2YXRlU2Vzc2lvbjsKKyAgICAgICAgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uKiBwcml2YXRlU3RvcmFnZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6
c3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKTsKKyAgICAgICAgaWYgKHByaXZhdGVTdG9yYWdlU2Vz
c2lvbikKKyAgICAgICAgICAgIHJldHVybiAqcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uOwogICAgICAg
ICAvLyBTb21lIHJlcXVlc3RzIHdpdGggcHJpdmF0ZSBicm93c2luZyBtb2RlIHJlcXVlc3RlZCBt
YXkgc3RpbGwgYmUgY29taW5nIHNob3J0bHkgYWZ0ZXIgTmV0d29ya1Byb2Nlc3Mgd2FzIHRvbGQg
dG8gZGVzdHJveSBpdHMgc2Vzc2lvbi4KICAgICAgICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8g
dHJhY2sgcHJpdmF0ZSBicm93c2luZyBzZXNzaW9ucyBtb3JlIHJpZ29yb3VzbHkuCiAgICAgICAg
IExPR19FUlJPUigiUHJpdmF0ZSBicm93c2luZyB3YXMgcmVxdWVzdGVkLCBidXQgdGhlcmUgd2Fz
IG5vIHNlc3Npb24gZm9yIGl0LiBQbGVhc2UgZmlsZSBhIGJ1ZyB1bmxlc3MgeW91IGp1c3QgZGlz
YWJsZWQgcHJpdmF0ZSBicm93c2luZywgaW4gd2hpY2ggY2FzZSBpdCdzIGFuIGV4cGVjdGVkIHJh
Y2UuIik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwCShyZXZpc2lvbiAxOTE5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNyw3ICszMzcs
NyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKFNlCiAgICAgfSkpOwog
CiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMgJiBXZWJzaXRlRGF0YVR5cGVDb29raWVzKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6
c2Vzc2lvbihzZXNzaW9uSUQpKQorICAgICAgICBpZiAoYXV0byogbmV0d29ya1N0b3JhZ2VTZXNz
aW9uID0gU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAg
ICAgICBnZXRIb3N0bmFtZXNXaXRoQ29va2llcygqbmV0d29ya1N0b3JhZ2VTZXNzaW9uLCBjYWxs
YmFja0FnZ3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEuaG9zdE5hbWVzV2l0aENvb2tpZXMpOwogICAg
IH0KIApAQCAtMzUyLDEzICszNTIsMTMgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vi
c2l0ZURhdGEoUwogewogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmICh3ZWJzaXRlRGF0YVR5
cGVzICYgV2Vic2l0ZURhdGFUeXBlSFNUU0NhY2hlKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3
b3JrU3RvcmFnZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbihzZXNzaW9uSUQpKQor
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6
OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgICAgICBjbGVhckhTVFNDYWNoZSgq
bmV0d29ya1N0b3JhZ2VTZXNzaW9uLCBtb2RpZmllZFNpbmNlKTsKICAgICB9CiAjZW5kaWYKIAog
ICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzICYgV2Vic2l0ZURhdGFUeXBlQ29va2llcykgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6OnNl
c3Npb24oc2Vzc2lvbklEKSkKKyAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTdG9yYWdlU2Vzc2lv
biA9IFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQogICAgICAgICAg
ICAgZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoKm5ldHdvcmtTdG9yYWdlU2Vzc2lvbiwg
bW9kaWZpZWRTaW5jZSk7CiAgICAgfQogCkBAIC00MTgsNyArNDE4LDcgQEAgc3RhdGljIHZvaWQg
Y2xlYXJEaXNrQ2FjaGVFbnRyaWVzKGNvbnN0IAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRl
V2Vic2l0ZURhdGFGb3JPcmlnaW5zKFNlc3Npb25JRCBzZXNzaW9uSUQsIHVpbnQ2NF90IHdlYnNp
dGVEYXRhVHlwZXMsIGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiBvcmlnaW5zLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgY29va2llSG9zdE5hbWVzLCB1aW50NjRfdCBjYWxsYmFja0lE
KQogewogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzICYgV2Vic2l0ZURhdGFUeXBlQ29va2llcykg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gU2Vzc2lvblRyYWNr
ZXI6OnNlc3Npb24oc2Vzc2lvbklEKSkKKyAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQogICAg
ICAgICAgICAgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcygqbmV0d29ya1N0b3JhZ2VTZXNzaW9u
LCBjb29raWVIb3N0TmFtZXMpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lv
biAxOTE5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVz
b3VyY2VMb2FkUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0
LmgiCisjaW5jbHVkZSAiU2Vzc2lvblRyYWNrZXIuaCIKICNpbmNsdWRlICJTaGFyZWFibGVSZXNv
dXJjZS5oIgogI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1
bWVudENvZGVycy5oIgpAQCAtMTg5LDcgKzE5MCw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9h
ZGVyOjpzdGFydE5ldHdvcmsKICAgICBib29sIHNob3VsZFNuaWZmID0gbV9wYXJhbWV0ZXJzLmNv
bnRlbnRTbmlmZmluZ1BvbGljeSA9PSBTbmlmZkNvbnRlbnQ7CiAjaWYgVVNFKE5FVFdPUktfU0VT
U0lPTikKICAgICBVTlVTRURfUEFSQU0oc2hvdWxkU25pZmYpOyAvLyBGSVhNRTogVXNlIHRoaXMu
Ci0gICAgbV90YXNrID0gTmV0d29ya1Nlc3Npb246OnNpbmdsZXRvbigpLT5jcmVhdGVEYXRhVGFz
a1dpdGhSZXF1ZXN0KG1fY3VycmVudFJlcXVlc3QsICp0aGlzKTsKKyAgICBtX3Rhc2sgPSBTZXNz
aW9uVHJhY2tlcjo6bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKCkpLT5jcmVhdGVEYXRhVGFza1dp
dGhSZXF1ZXN0KG1fY3VycmVudFJlcXVlc3QsICp0aGlzKTsKICAgICBtX3Rhc2stPnJlc3VtZSgp
OwogI2Vsc2UKICAgICBtX2hhbmRsZSA9IFJlc291cmNlSGFuZGxlOjpjcmVhdGUobV9uZXR3b3Jr
aW5nQ29udGV4dC5nZXQoKSwgbV9jdXJyZW50UmVxdWVzdCwgdGhpcywgbV9kZWZlcnNMb2FkaW5n
LCBzaG91bGRTbmlmZik7CkBAIC0yNTIsNyArMjUzLDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmFib3J0KCkKIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgaWYgKG1fdGFz
aykKLSAgICAgICAgbV90YXNrLT5zdXNwZW5kKCk7CisgICAgICAgIG1fdGFzay0+Y2FuY2VsKCk7
CiAgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyB3aXRoIHRoZSBuZXR3b3JrIGNhY2hlIGhlcmUu
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICNlbHNlCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAkocmV2aXNpb24g
MTkxOTgwKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNl
TG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMsNyBAQCBwcml2YXRlOgogCiAg
ICAgUmVmUHRyPFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0PiBtX25ldHdvcmtpbmdDb250ZXh0Owog
I2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgUmVmUHRyPE5ldHdvcmtpbmdEYXRhVGFzaz4g
bV90YXNrOworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IG1fdGFzazsKICNlbHNlCiAgICAg
UmVmUHRyPFdlYkNvcmU6OlJlc291cmNlSGFuZGxlPiBtX2hhbmRsZTsKICNlbmRpZgpJbmRleDog
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCShyZXZp
c2lvbiAxOTE5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vz
c2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBAIE9CSkNfQ0xBU1MgTlNVUkxT
ZXNzaW9uRGF0YVRhc2s7CiBPQkpDX0NMQVNTIE5TT3BlcmF0aW9uUXVldWU7CiBPQkpDX0NMQVNT
IE5ldHdvcmtTZXNzaW9uRGVsZWdhdGU7CiAKKyNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC03NCw0OCArNzUsNTEgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgfk5ldHdvcmtTZXNzaW9uVGFza0NsaWVudCgpIHsgfQogfTsKIAotY2xhc3MgTmV0d29y
a2luZ0RhdGFUYXNrIDogcHVibGljIFJlZkNvdW50ZWQ8TmV0d29ya2luZ0RhdGFUYXNrPiB7Citj
bGFzcyBOZXR3b3JrRGF0YVRhc2sgOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrRGF0YVRhc2s+
IHsKICAgICBmcmllbmQgY2xhc3MgTmV0d29ya1Nlc3Npb247CiBwdWJsaWM6Ci0gICAgdm9pZCBz
dXNwZW5kKCk7CisgICAgdm9pZCBjYW5jZWwoKTsKICAgICB2b2lkIHJlc3VtZSgpOwogCiAgICAg
dWludDY0X3QgdGFza0lkZW50aWZpZXIoKTsKIAotICAgIH5OZXR3b3JraW5nRGF0YVRhc2soKTsK
KyAgICB+TmV0d29ya0RhdGFUYXNrKCk7CiAKICAgICBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQq
IGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAgICAgdm9pZCBjbGVhckNsaWVudCgpIHsg
bV9jbGllbnQgPSBudWxscHRyOyB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgTmV0d29ya2lu
Z0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiwgTmV0d29ya1Nlc3Npb25UYXNrQ2xpZW50JiwgUmV0
YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFUYXNrPik7Ci0KICAgICBOZXR3b3JrU2Vzc2lvbiYgbV9z
ZXNzaW9uOwotICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb25EYXRhVGFzaz4gbV90YXNrOwogICAg
IE5ldHdvcmtTZXNzaW9uVGFza0NsaWVudCogbV9jbGllbnQ7CisjaWYgUExBVEZPUk0oQ09DT0Ep
CisgICAgZXhwbGljaXQgTmV0d29ya0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiwgTmV0d29ya1Nl
c3Npb25UYXNrQ2xpZW50JiwgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFUYXNrPiYmKTsKKyAg
ICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0YVRhc2s+IG1fdGFzazsKKyNlbmRpZgogfTsKIAot
Y2xhc3MgTmV0d29ya1Nlc3Npb24gOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrU2Vzc2lvbj4g
ewotICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JraW5nRGF0YVRhc2s7CitjbGFzcyBOZXR3b3JrU2Vz
c2lvbiB7CisgICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtEYXRhVGFzazsKIHB1YmxpYzoKICAgICBl
bnVtIGNsYXNzIFR5cGUgewogICAgICAgICBOb3JtYWwsCiAgICAgICAgIEVwaGVtZXJhbAogICAg
IH07CisgICAgTmV0d29ya1Nlc3Npb24oVHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklEKTsKKyAgICB+
TmV0d29ya1Nlc3Npb24oKTsKIAotICAgIFJlZjxOZXR3b3JraW5nRGF0YVRhc2s+IGNyZWF0ZURh
dGFUYXNrV2l0aFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgTmV0d29y
a1Nlc3Npb25UYXNrQ2xpZW50Jik7CisgICAgc3RhdGljIE5ldHdvcmtTZXNzaW9uJiBkZWZhdWx0
U2Vzc2lvbigpOworICAgIAorICAgIFJlZjxOZXR3b3JrRGF0YVRhc2s+IGNyZWF0ZURhdGFUYXNr
V2l0aFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgTmV0d29ya1Nlc3Np
b25UYXNrQ2xpZW50Jik7CiAKLSAgICBzdGF0aWMgUmVmPE5ldHdvcmtTZXNzaW9uPiBzaW5nbGV0
b24oKTsgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGFjdHVhbGx5IGJlIGEgc2luZ2xldG9uLgot
ICAgIE5ldHdvcmtpbmdEYXRhVGFzayogZGF0YVRhc2tGb3JJZGVudGlmaWVyKHVpbnQ2NF90KTsK
KyAgICBOZXR3b3JrRGF0YVRhc2sqIGRhdGFUYXNrRm9ySWRlbnRpZmllcih1aW50NjRfdCk7CiAK
LSAgICB+TmV0d29ya1Nlc3Npb24oKSB7IEFTU0VSVChtX2RhdGFUYXNrTWFwLmlzRW1wdHkoKSk7
IH0KIHByaXZhdGU6Ci0gICAgc3RhdGljIFJlZjxOZXR3b3JrU2Vzc2lvbj4gY3JlYXRlKFR5cGUp
OwotCi0gICAgTmV0d29ya1Nlc3Npb24oVHlwZSk7Ci0gICAgSGFzaE1hcDx1aW50NjRfdCwgTmV0
d29ya2luZ0RhdGFUYXNrKj4gbV9kYXRhVGFza01hcDsKKyAgICBXZWJDb3JlOjpTZXNzaW9uSUQg
bV9zZXNzaW9uSUQ7CisgICAgSGFzaE1hcDx1aW50NjRfdCwgTmV0d29ya0RhdGFUYXNrKj4gbV9k
YXRhVGFza01hcDsKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICBSZXRhaW5QdHI8TlNVUkxTZXNz
aW9uPiBtX3Nlc3Npb247CiAgICAgUmV0YWluUHRyPE5ldHdvcmtTZXNzaW9uRGVsZWdhdGU+IG1f
c2Vzc2lvbkRlbGVnYXRlOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29j
b2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Nlc3Npb25Db2NvYS5tbQkocmV2aXNpb24gMTkxOTgwKQorKysgU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9BdXRoZW50aWNhdGlvbkNo
YWxsZW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9DRk5ldHdvcmtTUEkuaD4KICNpbXBvcnQgPFdl
YkNvcmUvQ3JlZGVudGlhbC5oPgorI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Np
b24uaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5o
PgpAQCAtMTU4LDE3ICsxNTksNiBAQCAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAq
KXNlc3NpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIAotUmVmPE5ldHdvcmtTZXNzaW9uPiBO
ZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKFR5cGUgdHlwZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBOZXR3b3JrU2Vzc2lvbih0eXBlKSk7Ci19Ci0KLVJlZjxOZXR3b3JrU2Vzc2lvbj4gTmV0
d29ya1Nlc3Npb246OnNpbmdsZXRvbigpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJl
ZjxOZXR3b3JrU2Vzc2lvbj4+IHNoYXJlZEluc3RhbmNlKE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUo
VHlwZTo6Tm9ybWFsKSk7Ci0gICAgcmV0dXJuIHNoYXJlZEluc3RhbmNlLmdldCgpLmNvcHlSZWYo
KTsKLX0KLSAgICAKIHN0YXRpYyBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uICpjb25maWd1cmF0
aW9uRm9yVHlwZShOZXR3b3JrU2Vzc2lvbjo6VHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlw
ZSkgewpAQCAtMTc5LDQxICsxNjksNTQgQEAgc3RhdGljIE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRp
b24gKmNvbmZpZwogICAgIH0KIH0KIAotTmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKFR5
cGUgdHlwZSkKK05ldHdvcmtTZXNzaW9uJiBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24o
KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPE5ldHdvcmtTZXNzaW9uPiBzZXNzaW9uKE5ldHdvcmtTZXNzaW9uOjpUeXBlOjpOb3JtYWws
IFdlYkNvcmU6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKKyAgICByZXR1cm4gc2Vz
c2lvbjsKK30KKworTmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKFR5cGUgdHlwZSwgV2Vi
Q29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCkKKyAgICA6IG1fc2Vzc2lvbklEKHNlc3Npb25JRCkK
IHsKICAgICBtX3Nlc3Npb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tOZXR3b3JrU2Vzc2lvbkRlbGVn
YXRlIGFsbG9jXSBpbml0V2l0aE5ldHdvcmtTZXNzaW9uOip0aGlzXSk7CiAKICAgICBOU1VSTFNl
c3Npb25Db25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbkZvclR5cGUo
dHlwZSk7Ci0gICAgLy8gRklYTUU6IFVzZSBTZXNzaW9uVHJhY2tlciB0byBtYWtlIHN1cmUgdGhl
IGNvcnJlY3QgY29va2llIHN0b3JhZ2UgaXMgdXNlZCBvbmNlIHRoZXJlIGlzIG1vcmUgdGhhbiBv
bmUgTmV0d29ya1Nlc3Npb24uCi0gICAgaWYgKGF1dG8qIHNlc3Npb24gPSBTZXNzaW9uVHJhY2tl
cjo6c2Vzc2lvbihXZWJDb3JlOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkpIHsKLSAg
ICAgICAgaWYgKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgc3RvcmFnZSA9IHNlc3Npb24tPmNvb2tp
ZVN0b3JhZ2UoKS5nZXQoKSkKKyAgICBpZiAoYXV0byogc3RvcmFnZVNlc3Npb24gPSBTZXNzaW9u
VHJhY2tlcjo6c3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKSkgeworICAgICAgICBpZiAoQ0ZIVFRQ
Q29va2llU3RvcmFnZVJlZiBzdG9yYWdlID0gc3RvcmFnZVNlc3Npb24tPmNvb2tpZVN0b3JhZ2Uo
KS5nZXQoKSkKICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uSFRUUENvb2tpZVN0b3JhZ2UgPSBb
W1tOU0hUVFBDb29raWVTdG9yYWdlIGFsbG9jXSBfaW5pdFdpdGhDRkhUVFBDb29raWVTdG9yYWdl
OnN0b3JhZ2VdIGF1dG9yZWxlYXNlXTsKICAgICB9CiAgICAgbV9zZXNzaW9uID0gW05TVVJMU2Vz
c2lvbiBzZXNzaW9uV2l0aENvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbiBkZWxlZ2F0ZTpzdGF0
aWNfY2FzdDxpZD4obV9zZXNzaW9uRGVsZWdhdGUuZ2V0KCkpIGRlbGVnYXRlUXVldWU6W05TT3Bl
cmF0aW9uUXVldWUgbWFpblF1ZXVlXV07CiB9CiAKLVJlZjxOZXR3b3JraW5nRGF0YVRhc2s+IE5l
dHdvcmtTZXNzaW9uOjpjcmVhdGVEYXRhVGFza1dpdGhSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgTmV0d29ya1Nlc3Npb25UYXNrQ2xpZW50JiBjbGllbnQp
CitOZXR3b3JrU2Vzc2lvbjo6fk5ldHdvcmtTZXNzaW9uKCkKK3sKKyAgICBmb3IgKGF1dG8qIGRh
dGFUYXNrIDogbV9kYXRhVGFza01hcC52YWx1ZXMoKSkKKyAgICAgICAgZGF0YVRhc2stPmNhbmNl
bCgpOworfQorCitSZWY8TmV0d29ya0RhdGFUYXNrPiBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlRGF0
YVRhc2tXaXRoUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IE5ldHdvcmtTZXNzaW9uVGFza0NsaWVudCYgY2xpZW50KQogewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IE5ldHdvcmtpbmdEYXRhVGFzaygqdGhpcywgY2xpZW50LCBbbV9zZXNzaW9uIGRhdGFU
YXNrV2l0aFJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6VXBkYXRlSFRUUEJv
ZHkpXSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtEYXRhVGFzaygqdGhpcywg
Y2xpZW50LCBbbV9zZXNzaW9uIGRhdGFUYXNrV2l0aFJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVl
c3QoV2ViQ29yZTo6VXBkYXRlSFRUUEJvZHkpXSkpOwogfQogCi1OZXR3b3JraW5nRGF0YVRhc2sq
IE5ldHdvcmtTZXNzaW9uOjpkYXRhVGFza0ZvcklkZW50aWZpZXIodWludDY0X3QgdGFza0lkZW50
aWZpZXIpCitOZXR3b3JrRGF0YVRhc2sqIE5ldHdvcmtTZXNzaW9uOjpkYXRhVGFza0ZvcklkZW50
aWZpZXIodWludDY0X3QgdGFza0lkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKICAgICByZXR1cm4gbV9kYXRhVGFza01hcC5nZXQodGFza0lkZW50aWZpZXIpOwogfQog
Ci1OZXR3b3JraW5nRGF0YVRhc2s6Ok5ldHdvcmtpbmdEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYg
c2Vzc2lvbiwgTmV0d29ya1Nlc3Npb25UYXNrQ2xpZW50JiBjbGllbnQsIFJldGFpblB0cjxOU1VS
TFNlc3Npb25EYXRhVGFzaz4gdGFzaykKK05ldHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFUYXNr
KE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQmIGNsaWVu
dCwgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFUYXNrPiYmIHRhc2spCiAgICAgOiBtX3Nlc3Np
b24oc2Vzc2lvbikKLSAgICAsIG1fdGFzayh0YXNrKQogICAgICwgbV9jbGllbnQoJmNsaWVudCkK
KyAgICAsIG1fdGFzayhXVEY6Om1vdmUodGFzaykpCiB7CiAgICAgQVNTRVJUKCFtX3Nlc3Npb24u
bV9kYXRhVGFza01hcC5jb250YWlucyh0YXNrSWRlbnRpZmllcigpKSk7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKICAgICBtX3Nlc3Npb24ubV9kYXRhVGFza01hcC5hZGQodGFza0lkZW50
aWZpZXIoKSwgdGhpcyk7CiB9CiAKLU5ldHdvcmtpbmdEYXRhVGFzazo6fk5ldHdvcmtpbmdEYXRh
VGFzaygpCitOZXR3b3JrRGF0YVRhc2s6On5OZXR3b3JrRGF0YVRhc2soKQogewogICAgIEFTU0VS
VChtX3Nlc3Npb24ubV9kYXRhVGFza01hcC5jb250YWlucyh0YXNrSWRlbnRpZmllcigpKSk7CiAg
ICAgQVNTRVJUKG1fc2Vzc2lvbi5tX2RhdGFUYXNrTWFwLmdldCh0YXNrSWRlbnRpZmllcigpKSA9
PSB0aGlzKTsKQEAgLTIyMSwxNyArMjI0LDE3IEBAIE5ldHdvcmtpbmdEYXRhVGFzazo6fk5ldHdv
cmtpbmdEYXRhVGFzaygKICAgICBtX3Nlc3Npb24ubV9kYXRhVGFza01hcC5yZW1vdmUodGFza0lk
ZW50aWZpZXIoKSk7CiB9CiAKLXZvaWQgTmV0d29ya2luZ0RhdGFUYXNrOjpzdXNwZW5kKCkKK3Zv
aWQgTmV0d29ya0RhdGFUYXNrOjpjYW5jZWwoKQogewotICAgIFttX3Rhc2sgc3VzcGVuZF07Cisg
ICAgW21fdGFzayBjYW5jZWxdOwogfQogCi12b2lkIE5ldHdvcmtpbmdEYXRhVGFzazo6cmVzdW1l
KCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXN1bWUoKQogewogICAgIFttX3Rhc2sgcmVzdW1l
XTsKIH0KIAotdWludDY0X3QgTmV0d29ya2luZ0RhdGFUYXNrOjp0YXNrSWRlbnRpZmllcigpCit1
aW50NjRfdCBOZXR3b3JrRGF0YVRhc2s6OnRhc2tJZGVudGlmaWVyKCkKIHsKICAgICByZXR1cm4g
W21fdGFzayB0YXNrSWRlbnRpZmllcl07CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1t
CShyZXZpc2lvbiAxOTE5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMv
UmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcg
QEAKICNpbXBvcnQgIlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAKICNpbXBvcnQgIk5ldHdv
cmtQcm9jZXNzLmgiCisjaW1wb3J0ICJOZXR3b3JrU2Vzc2lvbi5oIgogI2ltcG9ydCAiU2Vzc2lv
blRyYWNrZXIuaCIKICNpbXBvcnQgIldlYkVycm9ycy5oIgogI2ltcG9ydCA8V2ViQ29yZS9SZXNv
dXJjZUVycm9yLmg+CkBAIC01NSw3ICs1Niw3IEBAIGJvb2wgUmVtb3RlTmV0d29ya2luZ0NvbnRl
eHQ6OmxvY2FsRmlsZUMKIAogTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBSZW1vdGVOZXR3b3JraW5n
Q29udGV4dDo6c3RvcmFnZVNlc3Npb24oKSBjb25zdAogewotICAgIE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiogc2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpzZXNzaW9uKG1fc2Vzc2lvbklEKTsKKyAg
ICBOZXR3b3JrU3RvcmFnZVNlc3Npb24qIHNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c3RvcmFn
ZVNlc3Npb24obV9zZXNzaW9uSUQpOwogICAgIGlmIChzZXNzaW9uKQogICAgICAgICByZXR1cm4g
KnNlc3Npb247CiAgICAgLy8gU29tZSByZXF1ZXN0cyBtYXkgc3RpbGwgYmUgY29taW5nIHNob3J0
bHkgYWZ0ZXIgTmV0d29ya1Byb2Nlc3Mgd2FzIHRvbGQgdG8gZGVzdHJveSBpdHMgc2Vzc2lvbi4K
QEAgLTg5LDExICs5MCwxNSBAQCB2b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQ
cml2CiB7CiAgICAgQVNTRVJUKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKTsKIAotICAgIGlmIChT
ZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbihzZXNzaW9uSUQpKQorICAgIGlmIChTZXNzaW9uVHJhY2tl
cjo6c3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNT
RVJUKCFTZXNzaW9uVHJhY2tlcjo6Z2V0SWRlbnRpZmllckJhc2UoKS5pc051bGwoKSk7Ci0gICAg
U2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU3RvcmFnZVNlc3Np
b246OmNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lvblRyYWNrZXI6OmdldElkZW50
aWZpZXJCYXNlKCkgKyAnLicgKyBTdHJpbmc6Om51bWJlcihzZXNzaW9uSUQuc2Vzc2lvbklEKCkp
KSk7CisgICAgU2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU3Rv
cmFnZVNlc3Npb246OmNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lvblRyYWNrZXI6
OmdldElkZW50aWZpZXJCYXNlKCkgKyAnLicgKyBTdHJpbmc6Om51bWJlcihzZXNzaW9uSUQuc2Vz
c2lvbklEKCkpKQorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgICAgICwgc3RkOjptYWtl
X3VuaXF1ZTxOZXR3b3JrU2Vzc2lvbj4oTmV0d29ya1Nlc3Npb246OlR5cGU6OkVwaGVtZXJhbCwg
c2Vzc2lvbklEKQorI2VuZGlmCisgICAgKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYktpdDIv
U2hhcmVkL1Nlc3Npb25UcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvU2Vzc2lvblRyYWNrZXIuY3BwCShyZXZpc2lvbiAxOTE5ODApCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvU2Vzc2lvblRyYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsy
Niw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2Vzc2lvblRyYWNrZXIuaCIK
IAorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3Jr
U3RvcmFnZVNlc3Npb24uaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNs
dWRlIDx3dGYvUnVuTG9vcC5oPgogCkBAIC0zMyw3ICszNSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotc3RhdGljIEhhc2hNYXA8U2Vzc2lvbklE
LCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4mIHN0YXRpY1Nlc3Npb25N
YXAoKQorc3RhdGljIEhhc2hNYXA8U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1N0
b3JhZ2VTZXNzaW9uPj4mIHN0YXRpY1N0b3JhZ2VTZXNzaW9uTWFwKCkKIHsKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC01Nyw5ICs1OSw5IEBAIHN0YXRpYyBTdHJpbmcmIGlk
ZW50aWZpZXJCYXNlKCkKICAgICByZXR1cm4gYmFzZTsKIH0KIAotY29uc3QgSGFzaE1hcDxTZXNz
aW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiYgU2Vzc2lvblRy
YWNrZXI6OnNlc3Npb25NYXAoKQorY29uc3QgSGFzaE1hcDxTZXNzaW9uSUQsIHN0ZDo6dW5pcXVl
X3B0cjxOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiYgU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNz
aW9uTWFwKCkKIHsKLSAgICByZXR1cm4gc3RhdGljU2Vzc2lvbk1hcCgpOworICAgIHJldHVybiBz
dGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCgpOwogfQogCiBjb25zdCBTdHJpbmcmIFNlc3Npb25UcmFj
a2VyOjpnZXRJZGVudGlmaWVyQmFzZSgpCkBAIC02NywxMiArNjksMjkgQEAgY29uc3QgU3RyaW5n
JiBTZXNzaW9uVHJhY2tlcjo6Z2V0SWRlbnRpZgogICAgIHJldHVybiBpZGVudGlmaWVyQmFzZSgp
OwogfQogCi1OZXR3b3JrU3RvcmFnZVNlc3Npb24qIFNlc3Npb25UcmFja2VyOjpzZXNzaW9uKFNl
c3Npb25JRCBzZXNzaW9uSUQpCitOZXR3b3JrU3RvcmFnZVNlc3Npb24qIFNlc3Npb25UcmFja2Vy
OjpzdG9yYWdlU2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklEKQogewogICAgIGlmIChzZXNzaW9u
SUQgPT0gU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgICAgIHJldHVybiAmTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKKyAgICByZXR1cm4g
c3RhdGljU3RvcmFnZVNlc3Npb25NYXAoKS5nZXQoc2Vzc2lvbklEKTsKK30KKworI2lmIFVTRShO
RVRXT1JLX1NFU1NJT04pCitzdGF0aWMgSGFzaE1hcDxTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0
cjxOZXR3b3JrU2Vzc2lvbj4+JiBzdGF0aWNTZXNzaW9uTWFwKCkKK3sKKyAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOworICAgIAorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFw
PFNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTZXNzaW9uPj4+IG1hcDsKKyAgICBy
ZXR1cm4gbWFwLmdldCgpOworfQorCitOZXR3b3JrU2Vzc2lvbiogU2Vzc2lvblRyYWNrZXI6Om5l
dHdvcmtTZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAgaWYgKHNlc3Npb25JRCA9
PSBTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKKyAgICAgICAgcmV0dXJuICZOZXR3b3Jr
U2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKTsKICAgICByZXR1cm4gc3RhdGljU2Vzc2lvbk1hcCgp
LmdldChzZXNzaW9uSUQpOwogfQorI2VuZGlmCiAKIFNlc3Npb25JRCBTZXNzaW9uVHJhY2tlcjo6
c2Vzc2lvbklEKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbikKIHsKQEAgLTgx
LDE5ICsxMDAsMzIgQEAgU2Vzc2lvbklEIFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoY29ucwog
ICAgIHJldHVybiBzdG9yYWdlU2Vzc2lvblRvSUQoKS5nZXQoJnNlc3Npb24pOwogfQogCi12b2lk
IFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQsIHN0ZDo6dW5p
cXVlX3B0cjxOZXR3b3JrU3RvcmFnZVNlc3Npb24+IHNlc3Npb24pCit2b2lkIFNlc3Npb25UcmFj
a2VyOjpzZXRTZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3
b3JrU3RvcmFnZVNlc3Npb24+IHN0b3JhZ2VTZXNzaW9uCisjaWYgVVNFKE5FVFdPUktfU0VTU0lP
TikKKyAgICAsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4gc2Vzc2lvbgorI2VuZGlm
CispCiB7CisgICAgQVNTRVJUKHN0b3JhZ2VTZXNzaW9uKTsKICAgICBBU1NFUlQoc2Vzc2lvbklE
ICE9IFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLSAgICBzdG9yYWdlU2Vzc2lvblRv
SUQoKS5zZXQoc2Vzc2lvbi5nZXQoKSwgc2Vzc2lvbklEKTsKKyAgICBzdG9yYWdlU2Vzc2lvblRv
SUQoKS5zZXQoc3RvcmFnZVNlc3Npb24uZ2V0KCksIHNlc3Npb25JRCk7CisgICAgc3RhdGljU3Rv
cmFnZVNlc3Npb25NYXAoKS5zZXQoc2Vzc2lvbklELCBXVEY6Om1vdmUoc3RvcmFnZVNlc3Npb24p
KTsKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIEFTU0VSVChzZXNzaW9uKTsKICAgICBz
dGF0aWNTZXNzaW9uTWFwKCkuc2V0KHNlc3Npb25JRCwgV1RGOjptb3ZlKHNlc3Npb24pKTsKKyNl
bmRpZgogfQogCiB2b2lkIFNlc3Npb25UcmFja2VyOjpkZXN0cm95U2Vzc2lvbihTZXNzaW9uSUQg
c2Vzc2lvbklEKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgaWYgKHN0
YXRpY1Nlc3Npb25NYXAoKS5jb250YWlucyhzZXNzaW9uSUQpKSB7Ci0gICAgICAgIHN0b3JhZ2VT
ZXNzaW9uVG9JRCgpLnJlbW92ZShzZXNzaW9uKHNlc3Npb25JRCkpOworICAgIGlmIChzdGF0aWNT
dG9yYWdlU2Vzc2lvbk1hcCgpLmNvbnRhaW5zKHNlc3Npb25JRCkpIHsKKyNpZiBVU0UoTkVUV09S
S19TRVNTSU9OKQorICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHN0YXRpY1Nlc3Npb25NYXAo
KS5jb250YWlucyhzZXNzaW9uSUQpLCAiTmV0d29ya1Nlc3Npb25zIGFuZCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb25zIHNob3VsZCBhbHdheXMgYmUgY3JlYXRlZCwgZGVsZXRlZCwgYW5kIG1hbmFnZWQg
YXMgcGFpcnMiKTsKICAgICAgICAgc3RhdGljU2Vzc2lvbk1hcCgpLnJlbW92ZShzZXNzaW9uSUQp
OworI2VuZGlmCisgICAgICAgIHN0b3JhZ2VTZXNzaW9uVG9JRCgpLnJlbW92ZShzdG9yYWdlU2Vz
c2lvbihzZXNzaW9uSUQpKTsKKyAgICAgICAgc3RhdGljU3RvcmFnZVNlc3Npb25NYXAoKS5yZW1v
dmUoc2Vzc2lvbklEKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9T
ZXNzaW9uVHJhY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZXNz
aW9uVHJhY2tlci5oCShyZXZpc2lvbiAxOTE5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
U2Vzc2lvblRyYWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjUgKzI2LDQwIEBACiAjaWZu
ZGVmIFNlc3Npb25UcmFja2VyX2gKICNkZWZpbmUgU2Vzc2lvblRyYWNrZXJfaAogCi0jaW5jbHVk
ZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjsKK30KKwogI2luY2x1ZGUgPFdlYkNvcmUvU2Vz
c2lvbklELmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBOZXR3b3JrU2Vz
c2lvbjsKKwogY2xhc3MgU2Vzc2lvblRyYWNrZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFNlc3Npb25UcmFja2VyKTsKIHB1YmxpYzoKLSAgICAvLyBGSVhNRTogc2Vzc2lvbk1hcCgpJ3Mg
cmV0dXJuZWQgbWFwIGRvZXMgbm90IGluY2x1ZGUgZGVmYXVsdCBzZXNzaW9uLgotICAgIHN0YXRp
YyBjb25zdCBIYXNoTWFwPFdlYkNvcmU6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4+JiBzZXNzaW9uTWFwKCk7CisgICAgLy8gRklYTUU6
IHN0b3JhZ2VTZXNzaW9uTWFwKCkncyByZXR1cm5lZCBtYXAgZG9lcyBub3QgaW5jbHVkZSBkZWZh
dWx0IHNlc3Npb24uCisgICAgc3RhdGljIGNvbnN0IEhhc2hNYXA8V2ViQ29yZTo6U2Vzc2lvbklE
LCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4mIHN0b3Jh
Z2VTZXNzaW9uTWFwKCk7CisKICAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBnZXRJZGVudGlmaWVy
QmFzZSgpOwotICAgIHN0YXRpYyBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIHNlc3Np
b24oV2ViQ29yZTo6U2Vzc2lvbklEKTsKKyAgICBzdGF0aWMgV2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbihXZWJDb3JlOjpTZXNzaW9uSUQpOwogICAgIHN0YXRp
YyBXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklEKGNvbnN0IFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiYpOwotICAgIHN0YXRpYyB2b2lkIHNldFNlc3Npb24oV2ViQ29yZTo6U2Vzc2lv
bklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPik7Cisg
ICAgc3RhdGljIHZvaWQgc2V0U2Vzc2lvbihXZWJDb3JlOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+CisjaWYgVVNFKE5FVFdPUktfU0VT
U0lPTikKKyAgICAgICAgLCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Npb24+CisjZW5kaWYK
KyAgICApOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lTZXNzaW9uKFdlYkNvcmU6OlNlc3Npb25J
RCk7CiAgICAgc3RhdGljIHZvaWQgc2V0SWRlbnRpZmllckJhc2UoY29uc3QgU3RyaW5nJik7Cisg
ICAgCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICAvLyBGSVhNRTogQSBOZXR3b3JrU2Vz
c2lvbiBhbmQgYSBOZXR3b3JrU3RvcmFnZVNlc3Npb24gc2hvdWxkIGJlIHRoZSBzYW1lIG9iamVj
dCBvbmNlIE5FVFdPUktfU0VTU0lPTiBpcyB1c2VkIGJ5IGRlZmF1bHQuCisgICAgc3RhdGljIE5l
dHdvcmtTZXNzaW9uKiBuZXR3b3JrU2Vzc2lvbihXZWJDb3JlOjpTZXNzaW9uSUQpOworI2VuZGlm
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMv
V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbQkocmV2aXNpb24gMTkxOTgwKQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3b3JraW5n
Q29udGV4dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKIAorI2luY2x1
ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCiAjaW5jbHVkZSAiU2Vzc2lvblRyYWNrZXIuaCIKICNpbmNs
dWRlICJXZWJDb29raWVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgpAQCAtNDcsNyAr
NDgsNyBAQCB2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByCiB7CiAgICAg
QVNTRVJUKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKTsKIAotICAgIGlmIChTZXNzaW9uVHJhY2tl
cjo6c2Vzc2lvbihzZXNzaW9uSUQpKQorICAgIGlmIChTZXNzaW9uVHJhY2tlcjo6c3RvcmFnZVNl
c3Npb24oc2Vzc2lvbklEKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGJhc2U7CkBA
IC01Niw3ICs1NywxMSBAQCB2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVBy
CiAgICAgZWxzZQogICAgICAgICBiYXNlID0gU2Vzc2lvblRyYWNrZXI6OmdldElkZW50aWZpZXJC
YXNlKCk7CiAKLSAgICBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihiYXNlICsgJy4n
ICsgU3RyaW5nOjpudW1iZXIoc2Vzc2lvbklELnNlc3Npb25JRCgpKSkpOworICAgIFNlc3Npb25U
cmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVh
dGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKGJhc2UgKyAnLicgKyBTdHJpbmc6Om51bWJlcihzZXNz
aW9uSUQuc2Vzc2lvbklEKCkpKQorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgICAgICwg
c3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrU2Vzc2lvbj4oTmV0d29ya1Nlc3Npb246OlR5cGU6OkVw
aGVtZXJhbCwgc2Vzc2lvbklEKQorI2VuZGlmCisgICAgKTsKIH0KIAogdm9pZCBXZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0OjpzZXRDb29raWVBY2NlcHRQb2xpY3lGb3JBbGxDb250ZXh0cyhIVFRQ
Q29va2llQWNjZXB0UG9saWN5IHBvbGljeSkKQEAgLTY2LDcgKzcxLDcgQEAgdm9pZCBXZWJGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRDb29raQogICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29v
a2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVm
YXVsdFN0b3JhZ2VTZXNzaW9uKCkuY29va2llU3RvcmFnZSgpKQogICAgICAgICBXS1NldEhUVFBD
b29raWVBY2NlcHRQb2xpY3koY29va2llU3RvcmFnZS5nZXQoKSwgcG9saWN5KTsKIAotICAgIGZv
ciAoY29uc3QgYXV0byYgc2Vzc2lvbiA6IFNlc3Npb25UcmFja2VyOjpzZXNzaW9uTWFwKCkudmFs
dWVzKCkpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHNlc3Npb24gOiBTZXNzaW9uVHJhY2tlcjo6
c3RvcmFnZVNlc3Npb25NYXAoKS52YWx1ZXMoKSkgewogICAgICAgICBpZiAoc2Vzc2lvbikKICAg
ICAgICAgICAgIFdLU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShzZXNzaW9uLT5jb29raWVTdG9y
YWdlKCkuZ2V0KCksIHBvbGljeSk7CiAgICAgfQpAQCAtMTEwLDggKzExNSw4IEBAIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbiYgV2ViRnJhbWVOZXR3b3JraW4KIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogICAgIGlmIChmcmFtZSgpKSB7Ci0gICAgICAgIGlmIChOZXR3b3JrU3RvcmFn
ZVNlc3Npb24qIHNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbihmcmFtZSgpLT5wYWdl
KCktPnNlc3Npb25JRCgpKSkKLSAgICAgICAgICAgIHJldHVybiAqc2Vzc2lvbjsKKyAgICAgICAg
aWYgKGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9u
KGZyYW1lKCktPnBhZ2UoKS0+c2Vzc2lvbklEKCkpKQorICAgICAgICAgICAgcmV0dXJuICpzdG9y
YWdlU2Vzc2lvbjsKICAgICAgICAgLy8gU29tZSByZXF1ZXN0cyBtYXkgc3RpbGwgYmUgY29taW5n
IHNob3J0bHkgYWZ0ZXIgV2ViUHJvY2VzcyB3YXMgdG9sZCB0byBkZXN0cm95IGl0cyBzZXNzaW9u
LgogICAgICAgICBMT0dfRVJST1IoIkludmFsaWQgc2Vzc2lvbiBJRC4gUGxlYXNlIGZpbGUgYSBi
dWcgdW5sZXNzIHlvdSBqdXN0IGRpc2FibGVkIHByaXZhdGUgYnJvd3NpbmcsIGluIHdoaWNoIGNh
c2UgaXQncyBhbiBleHBlY3RlZCByYWNlLiIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291cC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE5MTk4MCkK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291cC9XZWJGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCB2
b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKIAotICAgIGlmIChTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbihzZXNzaW9u
SUQpKQorICAgIGlmIChTZXNzaW9uVHJhY2tlcjo6c3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgU2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24oc2Vzc2lv
bklELCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24o
U3RyaW5nOjpudW1iZXIoc2Vzc2lvbklELnNlc3Npb25JRCgpKSkpOwpAQCAtNzIsNyArNzIsNyBA
QCB2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNldENvb2tpCiAgICAgU291cE5ldHdv
cmtTZXNzaW9uJiBzb3VwU2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0
b3JhZ2VTZXNzaW9uKCkuc291cE5ldHdvcmtTZXNzaW9uKCk7CiAgICAgc291cF9jb29raWVfamFy
X3NldF9hY2NlcHRfcG9saWN5KHNvdXBTZXNzaW9uLmNvb2tpZUphcigpLCBzb3VwUG9saWN5KTsK
IAotICAgIGZvciAoY29uc3QgYXV0byYgc2Vzc2lvbiA6IFNlc3Npb25UcmFja2VyOjpzZXNzaW9u
TWFwKCkudmFsdWVzKCkpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHNlc3Npb24gOiBTZXNzaW9u
VHJhY2tlcjo6c3RvcmFnZVNlc3Npb25NYXAoKS52YWx1ZXMoKSkgewogICAgICAgICBpZiAoc2Vz
c2lvbikKICAgICAgICAgICAgIHNvdXBfY29va2llX2phcl9zZXRfYWNjZXB0X3BvbGljeShzZXNz
aW9uLT5zb3VwTmV0d29ya1Nlc3Npb24oKS5jb29raWVKYXIoKSwgc291cFBvbGljeSk7CiAgICAg
fQpAQCAtODYsNyArODYsNyBAQCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpXZWJGcmFtZU5l
dHdvCiBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnN0
b3JhZ2VTZXNzaW9uKCkgY29uc3QKIHsKICAgICBpZiAoZnJhbWUoKSAmJiBmcmFtZSgpLT5wYWdl
KCktPnVzZXNFcGhlbWVyYWxTZXNzaW9uKCkpCi0gICAgICAgIHJldHVybiAqU2Vzc2lvblRyYWNr
ZXI6OnNlc3Npb24oU2Vzc2lvbklEOjpsZWdhY3lQcml2YXRlU2Vzc2lvbklEKCkpOworICAgICAg
ICByZXR1cm4gKlNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbihTZXNzaW9uSUQ6OmxlZ2Fj
eVByaXZhdGVTZXNzaW9uSUQoKSk7CiAKICAgICByZXR1cm4gTmV0d29ya1N0b3JhZ2VTZXNzaW9u
OjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264753</attachid>
            <date>2015-11-03 16:36:11 -0800</date>
            <delta_ts>2015-11-03 16:41:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150857-20151103163514.patch</filename>
            <type>text/plain</type>
            <size>28259</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTk5MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDE1LTExLTAzICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ3JlYXRlIGEg
TmV0d29ya1Nlc3Npb24gZm9yIGVhY2ggU2Vzc2lvbklECisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbmFtZXMgU2Vzc2lvblRyYWNr
ZXI6OnNlc3Npb24gdG8gc3RvcmFnZVNlc3Npb24gYW5kIG1ha2VzIGEgcGFyYWxsZWwKKyAgICAg
ICAgc3RydWN0dXJlIGZvciBOZXR3b3JrU2Vzc2lvbnMuICBOZXR3b3JrU2Vzc2lvbiBhbmQgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uIHNob3VsZCBldmVudHVhbGx5CisgICAgICAgIGJlY29tZSB0aGUg
c2FtZSBjbGFzcyBpbiBXZWJDb3JlLiAgQmVjYXVzZSBub3QgZXZlcnlib2R5IHVzZXMgTmV0d29y
a1Nlc3Npb25zIHlldCwKKyAgICAgICAgd2Uga2VlcCB0aGVtIHNlcGFyYXRlIGJ1dCBjcmVhdGVk
LCBkZXN0cm95ZWQsIGFuZCBtYW5hZ2VkIHRvZ2V0aGVyLgorCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpzdG9yYWdlU2Vzc2lvbik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0
YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9y
aWdpbnMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnROZXR3b3Jr
TG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YWJvcnQpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmg6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtTZXNzaW9uVGFza0NsaWVudDo6fk5ldHdvcmtTZXNzaW9uVGFza0NsaWVudCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrOjpjbGVhckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtp
bmdEYXRhVGFzazo6Y2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2lu
Z0RhdGFUYXNrOjpjbGVhckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtTZXNzaW9uOjp+TmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OmNv
bmZpZ3VyYXRpb25Gb3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6ZGVmYXVsdE5ldHdvcmtTZXNz
aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpjcmVhdGVEYXRhVGFza1dpdGhSZXF1ZXN0KToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmRhdGFUYXNrRm9ySWRlbnRpZmllcik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFUYXNrKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
RGF0YVRhc2s6OnJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6dGFz
a0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OnNpbmdsZXRvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtpbmdEYXRhVGFzazo6TmV0d29ya2luZ0Rh
dGFUYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2luZ0RhdGFUYXNrOjp+
TmV0d29ya2luZ0RhdGFUYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2lu
Z0RhdGFUYXNrOjpzdXNwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya2lu
Z0RhdGFUYXNrOjpyZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JraW5n
RGF0YVRhc2s6OnRhc2tJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZU5ldHdvcmtpbmdDb250ZXh0OjpzdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKToK
KyAgICAgICAgKiBTaGFyZWQvU2Vzc2lvblRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViS2l0Ojpz
dGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCk6CisgICAgICAgIChXZWJLaXQ6OmlkZW50aWZpZXJCYXNl
KToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uTWFwKToK
KyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OmdldElkZW50aWZpZXJCYXNlKToKKyAg
ICAgICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAg
KFdlYktpdDo6c3RhdGljU2Vzc2lvbk1hcCk6CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25UcmFj
a2VyOjpuZXR3b3JrU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpz
ZXNzaW9uSUQpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbik6
CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpkZXN0cm95U2Vzc2lvbik6CisgICAg
ICAgIChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpzZXNzaW9uTWFwKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OnNlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAq
IFNoYXJlZC9TZXNzaW9uVHJhY2tlci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRDb29raWVB
Y2NlcHRQb2xpY3lGb3JBbGxDb250ZXh0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQ6OnN0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2lu
Z1Nlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojpz
ZXRDb29raWVBY2NlcHRQb2xpY3lGb3JBbGxDb250ZXh0cyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnN0b3JhZ2VTZXNzaW9uKToKKwogMjAxNS0xMS0wMyAg
Unl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAbmF2ZXJjb3JwLmNvbT4KIAogICAgICAgICBbQ29vcmRp
bmF0ZWRHcmFwaGljc10gaW52aXNpYmxlIHdlYnZpZXcgc2hvdWxkIG5vdCBwYWludCB0aGUgY29u
dGVudApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTkxOTkz
KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsOSArMTY4LDkgQEAgdm9pZCBOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cHJlZgogc3RhdGljIE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgc3RvcmFnZVNlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKICAgICBpZiAoc2Vz
c2lvbklELmlzRXBoZW1lcmFsKCkpIHsKLSAgICAgICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBw
cml2YXRlU2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpzZXNzaW9uKHNlc3Npb25JRCk7Ci0gICAg
ICAgIGlmIChwcml2YXRlU2Vzc2lvbikKLSAgICAgICAgICAgIHJldHVybiAqcHJpdmF0ZVNlc3Np
b247CisgICAgICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogcHJpdmF0ZVN0b3JhZ2VTZXNzaW9u
ID0gU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCk7CisgICAgICAgIGlm
IChwcml2YXRlU3RvcmFnZVNlc3Npb24pCisgICAgICAgICAgICByZXR1cm4gKnByaXZhdGVTdG9y
YWdlU2Vzc2lvbjsKICAgICAgICAgLy8gU29tZSByZXF1ZXN0cyB3aXRoIHByaXZhdGUgYnJvd3Np
bmcgbW9kZSByZXF1ZXN0ZWQgbWF5IHN0aWxsIGJlIGNvbWluZyBzaG9ydGx5IGFmdGVyIE5ldHdv
cmtQcm9jZXNzIHdhcyB0b2xkIHRvIGRlc3Ryb3kgaXRzIHNlc3Npb24uCiAgICAgICAgIC8vIEZJ
WE1FOiBGaW5kIGEgd2F5IHRvIHRyYWNrIHByaXZhdGUgYnJvd3Npbmcgc2Vzc2lvbnMgbW9yZSBy
aWdvcm91c2x5LgogICAgICAgICBMT0dfRVJST1IoIlByaXZhdGUgYnJvd3Npbmcgd2FzIHJlcXVl
c3RlZCwgYnV0IHRoZXJlIHdhcyBubyBzZXNzaW9uIGZvciBpdC4gUGxlYXNlIGZpbGUgYSBidWcg
dW5sZXNzIHlvdSBqdXN0IGRpc2FibGVkIHByaXZhdGUgYnJvd3NpbmcsIGluIHdoaWNoIGNhc2Ug
aXQncyBhbiBleHBlY3RlZCByYWNlLiIpOwpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkocmV2aXNpb24gMTkxOTkzKQorKysgU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMzcsNyArMzM3LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJzaXRl
RGF0YShTZQogICAgIH0pKTsKIAogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzICYgV2Vic2l0ZURh
dGFUeXBlQ29va2llcykgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9u
ID0gU2Vzc2lvblRyYWNrZXI6OnNlc3Npb24oc2Vzc2lvbklEKSkKKyAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbihz
ZXNzaW9uSUQpKQogICAgICAgICAgICAgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoKm5ldHdvcmtT
dG9yYWdlU2Vzc2lvbiwgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmhvc3ROYW1l
c1dpdGhDb29raWVzKTsKICAgICB9CiAKQEAgLTM1MiwxMyArMzUyLDEzIEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKFMKIHsKICNpZiBQTEFURk9STShDT0NPQSkKICAg
ICBpZiAod2Vic2l0ZURhdGFUeXBlcyAmIFdlYnNpdGVEYXRhVHlwZUhTVFNDYWNoZSkgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6OnNl
c3Npb24oc2Vzc2lvbklEKSkKKyAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTdG9yYWdlU2Vzc2lv
biA9IFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQogICAgICAgICAg
ICAgY2xlYXJIU1RTQ2FjaGUoKm5ldHdvcmtTdG9yYWdlU2Vzc2lvbiwgbW9kaWZpZWRTaW5jZSk7
CiAgICAgfQogI2VuZGlmCiAKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcyAmIFdlYnNpdGVEYXRh
VHlwZUNvb2tpZXMpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9
IFNlc3Npb25UcmFja2VyOjpzZXNzaW9uKHNlc3Npb25JRCkpCisgICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c3RvcmFnZVNlc3Npb24oc2Vz
c2lvbklEKSkKICAgICAgICAgICAgIGRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKCpuZXR3
b3JrU3RvcmFnZVNlc3Npb24sIG1vZGlmaWVkU2luY2UpOwogICAgIH0KIApAQCAtNDE4LDcgKzQx
OCw3IEBAIHN0YXRpYyB2b2lkIGNsZWFyRGlza0NhY2hlRW50cmllcyhjb25zdCAKIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhTZXNzaW9uSUQgc2Vzc2lv
bklELCB1aW50NjRfdCB3ZWJzaXRlRGF0YVR5cGVzLCBjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmln
aW5EYXRhPiYgb3JpZ2lucywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGNvb2tpZUhvc3ROYW1lcywg
dWludDY0X3QgY2FsbGJhY2tJRCkKIHsKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcyAmIFdlYnNp
dGVEYXRhVHlwZUNvb2tpZXMpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiA9IFNlc3Npb25UcmFja2VyOjpzZXNzaW9uKHNlc3Npb25JRCkpCisgICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c3RvcmFnZVNlc3Np
b24oc2Vzc2lvbklEKSkKICAgICAgICAgICAgIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoKm5l
dHdvcmtTdG9yYWdlU2Vzc2lvbiwgY29va2llSG9zdE5hbWVzKTsKICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNl
TG9hZGVyLmNwcAkocmV2aXNpb24gMTkxOTkzKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiAr
MzgsNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmgiCiAj
aW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJSZW1v
dGVOZXR3b3JraW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIlNlc3Npb25UcmFja2VyLmgiCiAjaW5j
bHVkZSAiU2hhcmVhYmxlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKQEAgLTE4OSw3ICsxOTAsNyBAQCB2b2lk
IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnROZXR3b3JrCiAgICAgYm9vbCBzaG91bGRTbmlm
ZiA9IG1fcGFyYW1ldGVycy5jb250ZW50U25pZmZpbmdQb2xpY3kgPT0gU25pZmZDb250ZW50Owog
I2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgVU5VU0VEX1BBUkFNKHNob3VsZFNuaWZmKTsg
Ly8gRklYTUU6IFVzZSB0aGlzLgotICAgIG1fdGFzayA9IE5ldHdvcmtTZXNzaW9uOjpzaW5nbGV0
b24oKS0+Y3JlYXRlRGF0YVRhc2tXaXRoUmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0LCAqdGhpcyk7
CisgICAgbV90YXNrID0gU2Vzc2lvblRyYWNrZXI6Om5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCgp
KS0+Y3JlYXRlRGF0YVRhc2tXaXRoUmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0LCAqdGhpcyk7CiAg
ICAgbV90YXNrLT5yZXN1bWUoKTsKICNlbHNlCiAgICAgbV9oYW5kbGUgPSBSZXNvdXJjZUhhbmRs
ZTo6Y3JlYXRlKG1fbmV0d29ya2luZ0NvbnRleHQuZ2V0KCksIG1fY3VycmVudFJlcXVlc3QsIHRo
aXMsIG1fZGVmZXJzTG9hZGluZywgc2hvdWxkU25pZmYpOwpAQCAtMjUyLDcgKzI1Myw3IEBAIHZv
aWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydCgpCiAKICNpZiBVU0UoTkVUV09SS19TRVNT
SU9OKQogICAgIGlmIChtX3Rhc2spCi0gICAgICAgIG1fdGFzay0+c3VzcGVuZCgpOworICAgICAg
ICBtX3Rhc2stPmNhbmNlbCgpOwogICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgd2l0aCB0aGUg
bmV0d29yayBjYWNoZSBoZXJlLgogICAgIG5vdEltcGxlbWVudGVkKCk7CiAjZWxzZQpJbmRleDog
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNl
TG9hZGVyLmgJKHJldmlzaW9uIDE5MTk5MykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNyArMjEz
LDcgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxSZW1vdGVOZXR3b3JraW5nQ29udGV4dD4gbV9u
ZXR3b3JraW5nQ29udGV4dDsKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIFJlZlB0cjxO
ZXR3b3JraW5nRGF0YVRhc2s+IG1fdGFzazsKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBt
X3Rhc2s7CiAjZWxzZQogICAgIFJlZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZT4gbV9oYW5k
bGU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtT
ZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Nlc3Npb24uaAkocmV2aXNpb24gMTkxOTkzKQorKysgU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBA
QCBPQkpDX0NMQVNTIE5TVVJMU2Vzc2lvbkRhdGFUYXNrOwogT0JKQ19DTEFTUyBOU09wZXJhdGlv
blF1ZXVlOwogT0JKQ19DTEFTUyBOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlOwogCisjaW5jbHVkZSA8
V2ViQ29yZS9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNzQsNDggKzc1LDUz
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5OZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQoKSB7IH0K
IH07CiAKLWNsYXNzIE5ldHdvcmtpbmdEYXRhVGFzayA6IHB1YmxpYyBSZWZDb3VudGVkPE5ldHdv
cmtpbmdEYXRhVGFzaz4geworY2xhc3MgTmV0d29ya0RhdGFUYXNrIDogcHVibGljIFJlZkNvdW50
ZWQ8TmV0d29ya0RhdGFUYXNrPiB7CiAgICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtTZXNzaW9uOwog
cHVibGljOgotICAgIHZvaWQgc3VzcGVuZCgpOworICAgIHZvaWQgY2FuY2VsKCk7CiAgICAgdm9p
ZCByZXN1bWUoKTsKIAogICAgIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyKCk7CiAKLSAgICB+TmV0
d29ya2luZ0RhdGFUYXNrKCk7CisgICAgfk5ldHdvcmtEYXRhVGFzaygpOwogCiAgICAgTmV0d29y
a1Nlc3Npb25UYXNrQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogICAgIHZv
aWQgY2xlYXJDbGllbnQoKSB7IG1fY2xpZW50ID0gbnVsbHB0cjsgfQogCiBwcml2YXRlOgotICAg
IGV4cGxpY2l0IE5ldHdvcmtpbmdEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYsIE5ldHdvcmtTZXNz
aW9uVGFza0NsaWVudCYsIFJldGFpblB0cjxOU1VSTFNlc3Npb25EYXRhVGFzaz4pOwotCiAgICAg
TmV0d29ya1Nlc3Npb24mIG1fc2Vzc2lvbjsKLSAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0
YVRhc2s+IG1fdGFzazsKICAgICBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQqIG1fY2xpZW50Owor
I2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGV4cGxpY2l0IE5ldHdvcmtEYXRhVGFzayhOZXR3b3Jr
U2Vzc2lvbiYsIE5ldHdvcmtTZXNzaW9uVGFza0NsaWVudCYsIFJldGFpblB0cjxOU1VSTFNlc3Np
b25EYXRhVGFzaz4mJik7CisgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFUYXNrPiBtX3Rh
c2s7CisjZWxzZQorICAgIGV4cGxpY2l0IE5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYs
IE5ldHdvcmtTZXNzaW9uVGFza0NsaWVudCYpOworI2VuZGlmCiB9OwogCi1jbGFzcyBOZXR3b3Jr
U2Vzc2lvbiA6IHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtTZXNzaW9uPiB7Ci0gICAgZnJpZW5k
IGNsYXNzIE5ldHdvcmtpbmdEYXRhVGFzazsKK2NsYXNzIE5ldHdvcmtTZXNzaW9uIHsKKyAgICBm
cmllbmQgY2xhc3MgTmV0d29ya0RhdGFUYXNrOwogcHVibGljOgogICAgIGVudW0gY2xhc3MgVHlw
ZSB7CiAgICAgICAgIE5vcm1hbCwKICAgICAgICAgRXBoZW1lcmFsCiAgICAgfTsKKyAgICBOZXR3
b3JrU2Vzc2lvbihUeXBlLCBXZWJDb3JlOjpTZXNzaW9uSUQpOworICAgIH5OZXR3b3JrU2Vzc2lv
bigpIHsgQVNTRVJUKG1fZGF0YVRhc2tNYXAuaXNFbXB0eSgpKTsgfQogCi0gICAgUmVmPE5ldHdv
cmtpbmdEYXRhVGFzaz4gY3JlYXRlRGF0YVRhc2tXaXRoUmVxdWVzdChjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmLCBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQmKTsKKyAgICBzdGF0aWMg
TmV0d29ya1Nlc3Npb24mIGRlZmF1bHRTZXNzaW9uKCk7CisgICAgCisgICAgUmVmPE5ldHdvcmtE
YXRhVGFzaz4gY3JlYXRlRGF0YVRhc2tXaXRoUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmLCBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQmKTsKIAotICAgIHN0YXRpYyBSZWY8
TmV0d29ya1Nlc3Npb24+IHNpbmdsZXRvbigpOyAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYWN0
dWFsbHkgYmUgYSBzaW5nbGV0b24uCi0gICAgTmV0d29ya2luZ0RhdGFUYXNrKiBkYXRhVGFza0Zv
cklkZW50aWZpZXIodWludDY0X3QpOworICAgIE5ldHdvcmtEYXRhVGFzayogZGF0YVRhc2tGb3JJ
ZGVudGlmaWVyKHVpbnQ2NF90KTsKIAotICAgIH5OZXR3b3JrU2Vzc2lvbigpIHsgQVNTRVJUKG1f
ZGF0YVRhc2tNYXAuaXNFbXB0eSgpKTsgfQogcHJpdmF0ZToKLSAgICBzdGF0aWMgUmVmPE5ldHdv
cmtTZXNzaW9uPiBjcmVhdGUoVHlwZSk7Ci0KLSAgICBOZXR3b3JrU2Vzc2lvbihUeXBlKTsKLSAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBOZXR3b3JraW5nRGF0YVRhc2sqPiBtX2RhdGFUYXNrTWFwOwor
ICAgIFdlYkNvcmU6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKKyAgICBIYXNoTWFwPHVpbnQ2NF90
LCBOZXR3b3JrRGF0YVRhc2sqPiBtX2RhdGFUYXNrTWFwOworI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb24+IG1fc2Vzc2lvbjsKICAgICBSZXRhaW5QdHI8TmV0
d29ya1Nlc3Npb25EZWxlZ2F0ZT4gbV9zZXNzaW9uRGVsZWdhdGU7CisjZW5kaWYKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCShyZXZpc2lvbiAx
OTE5OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vz
c2lvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0IDxX
ZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NGTmV0
d29ya1NQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9DcmVkZW50aWFsLmg+CisjaW1wb3J0IDxXZWJD
b3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUVy
cm9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CkBAIC0xNTgsMTcgKzE1OSw2IEBAIC0gKHZvaWQpVVJM
U2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2kKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAgICAg
Ci1SZWY8TmV0d29ya1Nlc3Npb24+IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoVHlwZSB0eXBlKQot
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtTZXNzaW9uKHR5cGUpKTsKLX0KLQot
UmVmPE5ldHdvcmtTZXNzaW9uPiBOZXR3b3JrU2Vzc2lvbjo6c2luZ2xldG9uKCkKLXsKLSAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmPE5ldHdvcmtTZXNzaW9uPj4gc2hhcmVkSW5zdGFuY2Uo
TmV0d29ya1Nlc3Npb246OmNyZWF0ZShUeXBlOjpOb3JtYWwpKTsKLSAgICByZXR1cm4gc2hhcmVk
SW5zdGFuY2UuZ2V0KCkuY29weVJlZigpOwotfQotICAgIAogc3RhdGljIE5TVVJMU2Vzc2lvbkNv
bmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb25Gb3JUeXBlKE5ldHdvcmtTZXNzaW9uOjpUeXBlIHR5
cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0xNzksNDEgKzE2OSw0OCBAQCBzdGF0aWMg
TlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiAqY29uZmlnCiAgICAgfQogfQogCi1OZXR3b3JrU2Vz
c2lvbjo6TmV0d29ya1Nlc3Npb24oVHlwZSB0eXBlKQorTmV0d29ya1Nlc3Npb24mIE5ldHdvcmtT
ZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TmV0d29ya1Nlc3Npb24+IHNlc3Npb24oTmV0d29y
a1Nlc3Npb246OlR5cGU6Ok5vcm1hbCwgV2ViQ29yZTo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCkpOworICAgIHJldHVybiBzZXNzaW9uOworfQorCitOZXR3b3JrU2Vzc2lvbjo6TmV0d29y
a1Nlc3Npb24oVHlwZSB0eXBlLCBXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQorICAgIDog
bV9zZXNzaW9uSUQoc2Vzc2lvbklEKQogewogICAgIG1fc2Vzc2lvbkRlbGVnYXRlID0gYWRvcHRO
UyhbW05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoTmV0d29ya1Nlc3Npb246
KnRoaXNdKTsKIAogICAgIE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24g
PSBjb25maWd1cmF0aW9uRm9yVHlwZSh0eXBlKTsKLSAgICAvLyBGSVhNRTogVXNlIFNlc3Npb25U
cmFja2VyIHRvIG1ha2Ugc3VyZSB0aGUgY29ycmVjdCBjb29raWUgc3RvcmFnZSBpcyB1c2VkIG9u
Y2UgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBOZXR3b3JrU2Vzc2lvbi4KLSAgICBpZiAoYXV0byog
c2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpzZXNzaW9uKFdlYkNvcmU6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKSkgewotICAgICAgICBpZiAoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBz
dG9yYWdlID0gc2Vzc2lvbi0+Y29va2llU3RvcmFnZSgpLmdldCgpKQorICAgIGlmIChhdXRvKiBz
dG9yYWdlU2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQp
KSB7CisgICAgICAgIGlmIChDRkhUVFBDb29raWVTdG9yYWdlUmVmIHN0b3JhZ2UgPSBzdG9yYWdl
U2Vzc2lvbi0+Y29va2llU3RvcmFnZSgpLmdldCgpKQogICAgICAgICAgICAgY29uZmlndXJhdGlv
bi5IVFRQQ29va2llU3RvcmFnZSA9IFtbW05TSFRUUENvb2tpZVN0b3JhZ2UgYWxsb2NdIF9pbml0
V2l0aENGSFRUUENvb2tpZVN0b3JhZ2U6c3RvcmFnZV0gYXV0b3JlbGVhc2VdOwogICAgIH0KICAg
ICBtX3Nlc3Npb24gPSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmlndXJhdGlvbjpjb25m
aWd1cmF0aW9uIGRlbGVnYXRlOnN0YXRpY19jYXN0PGlkPihtX3Nlc3Npb25EZWxlZ2F0ZS5nZXQo
KSkgZGVsZWdhdGVRdWV1ZTpbTlNPcGVyYXRpb25RdWV1ZSBtYWluUXVldWVdXTsKIH0KIAotUmVm
PE5ldHdvcmtpbmdEYXRhVGFzaz4gTmV0d29ya1Nlc3Npb246OmNyZWF0ZURhdGFUYXNrV2l0aFJl
cXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBOZXR3b3JrU2Vz
c2lvblRhc2tDbGllbnQmIGNsaWVudCkKK1JlZjxOZXR3b3JrRGF0YVRhc2s+IE5ldHdvcmtTZXNz
aW9uOjpjcmVhdGVEYXRhVGFza1dpdGhSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgTmV0d29ya1Nlc3Npb25UYXNrQ2xpZW50JiBjbGllbnQpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya2luZ0RhdGFUYXNrKCp0aGlzLCBjbGllbnQsIFtt
X3Nlc3Npb24gZGF0YVRhc2tXaXRoUmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdChXZWJDb3Jl
OjpVcGRhdGVIVFRQQm9keSldKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya0Rh
dGFUYXNrKCp0aGlzLCBjbGllbnQsIFttX3Nlc3Npb24gZGF0YVRhc2tXaXRoUmVxdWVzdDpyZXF1
ZXN0Lm5zVVJMUmVxdWVzdChXZWJDb3JlOjpVcGRhdGVIVFRQQm9keSldKSk7CiB9CiAKLU5ldHdv
cmtpbmdEYXRhVGFzayogTmV0d29ya1Nlc3Npb246OmRhdGFUYXNrRm9ySWRlbnRpZmllcih1aW50
NjRfdCB0YXNrSWRlbnRpZmllcikKK05ldHdvcmtEYXRhVGFzayogTmV0d29ya1Nlc3Npb246OmRh
dGFUYXNrRm9ySWRlbnRpZmllcih1aW50NjRfdCB0YXNrSWRlbnRpZmllcikKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgIHJldHVybiBtX2RhdGFUYXNrTWFwLmdldCh0YXNrSWRl
bnRpZmllcik7CiB9CiAKLU5ldHdvcmtpbmdEYXRhVGFzazo6TmV0d29ya2luZ0RhdGFUYXNrKE5l
dHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQmIGNsaWVudCwg
UmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFUYXNrPiB0YXNrKQorTmV0d29ya0RhdGFUYXNrOjpO
ZXR3b3JrRGF0YVRhc2soTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtTZXNzaW9uVGFz
a0NsaWVudCYgY2xpZW50LCBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0YVRhc2s+JiYgdGFzaykK
ICAgICA6IG1fc2Vzc2lvbihzZXNzaW9uKQotICAgICwgbV90YXNrKHRhc2spCiAgICAgLCBtX2Ns
aWVudCgmY2xpZW50KQorICAgICwgbV90YXNrKFdURjo6bW92ZSh0YXNrKSkKIHsKICAgICBBU1NF
UlQoIW1fc2Vzc2lvbi5tX2RhdGFUYXNrTWFwLmNvbnRhaW5zKHRhc2tJZGVudGlmaWVyKCkpKTsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIG1fc2Vzc2lvbi5tX2RhdGFUYXNrTWFw
LmFkZCh0YXNrSWRlbnRpZmllcigpLCB0aGlzKTsKIH0KIAotTmV0d29ya2luZ0RhdGFUYXNrOjp+
TmV0d29ya2luZ0RhdGFUYXNrKCkKK05ldHdvcmtEYXRhVGFzazo6fk5ldHdvcmtEYXRhVGFzaygp
CiB7CiAgICAgQVNTRVJUKG1fc2Vzc2lvbi5tX2RhdGFUYXNrTWFwLmNvbnRhaW5zKHRhc2tJZGVu
dGlmaWVyKCkpKTsKICAgICBBU1NFUlQobV9zZXNzaW9uLm1fZGF0YVRhc2tNYXAuZ2V0KHRhc2tJ
ZGVudGlmaWVyKCkpID09IHRoaXMpOwpAQCAtMjIxLDE3ICsyMTgsMTcgQEAgTmV0d29ya2luZ0Rh
dGFUYXNrOjp+TmV0d29ya2luZ0RhdGFUYXNrKAogICAgIG1fc2Vzc2lvbi5tX2RhdGFUYXNrTWFw
LnJlbW92ZSh0YXNrSWRlbnRpZmllcigpKTsKIH0KIAotdm9pZCBOZXR3b3JraW5nRGF0YVRhc2s6
OnN1c3BlbmQoKQordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNhbmNlbCgpCiB7Ci0gICAgW21fdGFz
ayBzdXNwZW5kXTsKKyAgICBbbV90YXNrIGNhbmNlbF07CiB9CiAKLXZvaWQgTmV0d29ya2luZ0Rh
dGFUYXNrOjpyZXN1bWUoKQordm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlc3VtZSgpCiB7CiAgICAg
W21fdGFzayByZXN1bWVdOwogfQogCi11aW50NjRfdCBOZXR3b3JraW5nRGF0YVRhc2s6OnRhc2tJ
ZGVudGlmaWVyKCkKK3VpbnQ2NF90IE5ldHdvcmtEYXRhVGFzazo6dGFza0lkZW50aWZpZXIoKQog
ewogICAgIHJldHVybiBbbV90YXNrIHRhc2tJZGVudGlmaWVyXTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29y
a2luZ0NvbnRleHQubW0JKHJldmlzaW9uIDE5MTk5MykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsNyBAQAogI2ltcG9ydCAiUmVtb3RlTmV0d29ya2luZ0NvbnRleHQuaCIKIAog
I2ltcG9ydCAiTmV0d29ya1Byb2Nlc3MuaCIKKyNpbXBvcnQgIk5ldHdvcmtTZXNzaW9uLmgiCiAj
aW1wb3J0ICJTZXNzaW9uVHJhY2tlci5oIgogI2ltcG9ydCAiV2ViRXJyb3JzLmgiCiAjaW1wb3J0
IDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KQEAgLTU1LDcgKzU2LDcgQEAgYm9vbCBSZW1vdGVO
ZXR3b3JraW5nQ29udGV4dDo6bG9jYWxGaWxlQwogCiBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIFJl
bW90ZU5ldHdvcmtpbmdDb250ZXh0OjpzdG9yYWdlU2Vzc2lvbigpIGNvbnN0CiB7Ci0gICAgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uKiBzZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6OnNlc3Npb24obV9z
ZXNzaW9uSUQpOworICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc2Vzc2lvbiA9IFNlc3Npb25U
cmFja2VyOjpzdG9yYWdlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CiAgICAgaWYgKHNlc3Npb24pCiAg
ICAgICAgIHJldHVybiAqc2Vzc2lvbjsKICAgICAvLyBTb21lIHJlcXVlc3RzIG1heSBzdGlsbCBi
ZSBjb21pbmcgc2hvcnRseSBhZnRlciBOZXR3b3JrUHJvY2VzcyB3YXMgdG9sZCB0byBkZXN0cm95
IGl0cyBzZXNzaW9uLgpAQCAtODksMTEgKzkwLDE1IEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQ6OmVuc3VyZVByaXYKIHsKICAgICBBU1NFUlQoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkp
OwogCi0gICAgaWYgKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uKHNlc3Npb25JRCkpCisgICAgaWYg
KFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQogICAgICAgICByZXR1
cm47CiAKICAgICBBU1NFUlQoIVNlc3Npb25UcmFja2VyOjpnZXRJZGVudGlmaWVyQmFzZSgpLmlz
TnVsbCgpKTsKLSAgICBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihTZXNzaW9uVHJh
Y2tlcjo6Z2V0SWRlbnRpZmllckJhc2UoKSArICcuJyArIFN0cmluZzo6bnVtYmVyKHNlc3Npb25J
RC5zZXNzaW9uSUQoKSkpKTsKKyAgICBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9u
SUQsIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihT
ZXNzaW9uVHJhY2tlcjo6Z2V0SWRlbnRpZmllckJhc2UoKSArICcuJyArIFN0cmluZzo6bnVtYmVy
KHNlc3Npb25JRC5zZXNzaW9uSUQoKSkpCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICAg
ICAgLCBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTZXNzaW9uPihOZXR3b3JrU2Vzc2lvbjo6VHlw
ZTo6RXBoZW1lcmFsLCBzZXNzaW9uSUQpCisjZW5kaWYKKyAgICApOwogfQogCiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2Vzc2lvblRyYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9TZXNzaW9uVHJhY2tlci5jcHAJKHJldmlzaW9uIDE5MTk5MykK
KysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZXNzaW9uVHJhY2tlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTZXNz
aW9uVHJhY2tlci5oIgogCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAKQEAgLTMzLDcgKzM1LDcgQEAgdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMgSGFz
aE1hcDxTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiYg
c3RhdGljU2Vzc2lvbk1hcCgpCitzdGF0aWMgSGFzaE1hcDxTZXNzaW9uSUQsIHN0ZDo6dW5pcXVl
X3B0cjxOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiYgc3RhdGljU3RvcmFnZVNlc3Npb25NYXAoKQog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTU3LDkgKzU5LDkgQEAgc3Rh
dGljIFN0cmluZyYgaWRlbnRpZmllckJhc2UoKQogICAgIHJldHVybiBiYXNlOwogfQogCi1jb25z
dCBIYXNoTWFwPFNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2Vzc2lv
bj4+JiBTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbk1hcCgpCitjb25zdCBIYXNoTWFwPFNlc3Npb25J
RCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4+JiBTZXNzaW9uVHJhY2tl
cjo6c3RvcmFnZVNlc3Npb25NYXAoKQogewotICAgIHJldHVybiBzdGF0aWNTZXNzaW9uTWFwKCk7
CisgICAgcmV0dXJuIHN0YXRpY1N0b3JhZ2VTZXNzaW9uTWFwKCk7CiB9CiAKIGNvbnN0IFN0cmlu
ZyYgU2Vzc2lvblRyYWNrZXI6OmdldElkZW50aWZpZXJCYXNlKCkKQEAgLTY3LDEyICs2OSwyOSBA
QCBjb25zdCBTdHJpbmcmIFNlc3Npb25UcmFja2VyOjpnZXRJZGVudGlmCiAgICAgcmV0dXJuIGlk
ZW50aWZpZXJCYXNlKCk7CiB9CiAKLU5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogU2Vzc2lvblRyYWNr
ZXI6OnNlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCkKK05ldHdvcmtTdG9yYWdlU2Vzc2lvbiog
U2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQpCiB7CiAg
ICAgaWYgKHNlc3Npb25JRCA9PSBTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKICAgICAg
ICAgcmV0dXJuICZOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigp
OworICAgIHJldHVybiBzdGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCgpLmdldChzZXNzaW9uSUQpOwor
fQorCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKK3N0YXRpYyBIYXNoTWFwPFNlc3Npb25JRCwg
c3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTZXNzaW9uPj4mIHN0YXRpY1Nlc3Npb25NYXAoKQorewor
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgCisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEhhc2hNYXA8U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Npb24+
Pj4gbWFwOworICAgIHJldHVybiBtYXAuZ2V0KCk7Cit9CisKK05ldHdvcmtTZXNzaW9uKiBTZXNz
aW9uVHJhY2tlcjo6bmV0d29ya1Nlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCkKK3sKKyAgICBp
ZiAoc2Vzc2lvbklEID09IFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQorICAgICAgICBy
ZXR1cm4gJk5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigpOwogICAgIHJldHVybiBzdGF0
aWNTZXNzaW9uTWFwKCkuZ2V0KHNlc3Npb25JRCk7CiB9CisjZW5kaWYKIAogU2Vzc2lvbklEIFNl
c3Npb25UcmFja2VyOjpzZXNzaW9uSUQoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNz
aW9uKQogewpAQCAtODEsMTkgKzEwMCwzMiBAQCBTZXNzaW9uSUQgU2Vzc2lvblRyYWNrZXI6OnNl
c3Npb25JRChjb25zCiAgICAgcmV0dXJuIHN0b3JhZ2VTZXNzaW9uVG9JRCgpLmdldCgmc2Vzc2lv
bik7CiB9CiAKLXZvaWQgU2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24oU2Vzc2lvbklEIHNlc3Np
b25JRCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gc2Vzc2lvbikKK3Zv
aWQgU2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCwgc3RkOjp1
bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gc3RvcmFnZVNlc3Npb24KKyNpZiBVU0Uo
TkVUV09SS19TRVNTSU9OKQorICAgICwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTZXNzaW9uPiBz
ZXNzaW9uCisjZW5kaWYKKykKIHsKKyAgICBBU1NFUlQoc3RvcmFnZVNlc3Npb24pOwogICAgIEFT
U0VSVChzZXNzaW9uSUQgIT0gU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotICAgIHN0
b3JhZ2VTZXNzaW9uVG9JRCgpLnNldChzZXNzaW9uLmdldCgpLCBzZXNzaW9uSUQpOworICAgIHN0
b3JhZ2VTZXNzaW9uVG9JRCgpLnNldChzdG9yYWdlU2Vzc2lvbi5nZXQoKSwgc2Vzc2lvbklEKTsK
KyAgICBzdGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCgpLnNldChzZXNzaW9uSUQsIFdURjo6bW92ZShz
dG9yYWdlU2Vzc2lvbikpOworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgQVNTRVJUKHNl
c3Npb24pOwogICAgIHN0YXRpY1Nlc3Npb25NYXAoKS5zZXQoc2Vzc2lvbklELCBXVEY6Om1vdmUo
c2Vzc2lvbikpOworI2VuZGlmCiB9CiAKIHZvaWQgU2Vzc2lvblRyYWNrZXI6OmRlc3Ryb3lTZXNz
aW9uKFNlc3Npb25JRCBzZXNzaW9uSUQpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKLSAgICBpZiAoc3RhdGljU2Vzc2lvbk1hcCgpLmNvbnRhaW5zKHNlc3Npb25JRCkpIHsKLSAg
ICAgICAgc3RvcmFnZVNlc3Npb25Ub0lEKCkucmVtb3ZlKHNlc3Npb24oc2Vzc2lvbklEKSk7Cisg
ICAgaWYgKHN0YXRpY1N0b3JhZ2VTZXNzaW9uTWFwKCkuY29udGFpbnMoc2Vzc2lvbklEKSkgewor
I2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uoc3Rh
dGljU2Vzc2lvbk1hcCgpLmNvbnRhaW5zKHNlc3Npb25JRCksICJOZXR3b3JrU2Vzc2lvbnMgYW5k
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbnMgc2hvdWxkIGFsd2F5cyBiZSBjcmVhdGVkLCBkZWxldGVk
LCBhbmQgbWFuYWdlZCBhcyBwYWlycyIpOwogICAgICAgICBzdGF0aWNTZXNzaW9uTWFwKCkucmVt
b3ZlKHNlc3Npb25JRCk7CisjZW5kaWYKKyAgICAgICAgc3RvcmFnZVNlc3Npb25Ub0lEKCkucmVt
b3ZlKHN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpOworICAgICAgICBzdGF0aWNTdG9yYWdlU2Vz
c2lvbk1hcCgpLnJlbW92ZShzZXNzaW9uSUQpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dl
YktpdDIvU2hhcmVkL1Nlc3Npb25UcmFja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL1Nlc3Npb25UcmFja2VyLmgJKHJldmlzaW9uIDE5MTk5MykKKysrIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9TZXNzaW9uVHJhY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyNSAr
MjYsNDAgQEAKICNpZm5kZWYgU2Vzc2lvblRyYWNrZXJfaAogI2RlZmluZSBTZXNzaW9uVHJhY2tl
cl9oCiAKLSNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgorbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOworfQorCiAjaW5jbHVk
ZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2Ns
YXNzIE5ldHdvcmtTZXNzaW9uOworCiBjbGFzcyBTZXNzaW9uVHJhY2tlciB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoU2Vzc2lvblRyYWNrZXIpOwogcHVibGljOgotICAgIC8vIEZJWE1FOiBz
ZXNzaW9uTWFwKCkncyByZXR1cm5lZCBtYXAgZG9lcyBub3QgaW5jbHVkZSBkZWZhdWx0IHNlc3Np
b24uCi0gICAgc3RhdGljIGNvbnN0IEhhc2hNYXA8V2ViQ29yZTo6U2Vzc2lvbklELCBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4mIHNlc3Npb25NYXAoKTsK
KyAgICAvLyBGSVhNRTogc3RvcmFnZVNlc3Npb25NYXAoKSdzIHJldHVybmVkIG1hcCBkb2VzIG5v
dCBpbmNsdWRlIGRlZmF1bHQgc2Vzc2lvbi4KKyAgICBzdGF0aWMgY29uc3QgSGFzaE1hcDxXZWJD
b3JlOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+PiYgc3RvcmFnZVNlc3Npb25NYXAoKTsKKwogICAgIHN0YXRpYyBjb25zdCBTdHJpbmcm
IGdldElkZW50aWZpZXJCYXNlKCk7Ci0gICAgc3RhdGljIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiogc2Vzc2lvbihXZWJDb3JlOjpTZXNzaW9uSUQpOworICAgIHN0YXRpYyBXZWJDb3Jl
OjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIHN0b3JhZ2VTZXNzaW9uKFdlYkNvcmU6OlNlc3Npb25J
RCk7CiAgICAgc3RhdGljIFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQoY29uc3QgV2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik7Ci0gICAgc3RhdGljIHZvaWQgc2V0U2Vzc2lvbihX
ZWJDb3JlOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb24+KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRTZXNzaW9uKFdlYkNvcmU6OlNlc3Npb25J
RCwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4KKyNpZiBV
U0UoTkVUV09SS19TRVNTSU9OKQorICAgICAgICAsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vz
c2lvbj4KKyNlbmRpZgorICAgICk7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveVNlc3Npb24oV2Vi
Q29yZTo6U2Vzc2lvbklEKTsKICAgICBzdGF0aWMgdm9pZCBzZXRJZGVudGlmaWVyQmFzZShjb25z
dCBTdHJpbmcmKTsKKyAgICAKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIC8vIEZJWE1F
OiBBIE5ldHdvcmtTZXNzaW9uIGFuZCBhIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiBzaG91bGQgYmUg
dGhlIHNhbWUgb2JqZWN0IG9uY2UgTkVUV09SS19TRVNTSU9OIGlzIHVzZWQgYnkgZGVmYXVsdC4K
KyAgICBzdGF0aWMgTmV0d29ya1Nlc3Npb24qIG5ldHdvcmtTZXNzaW9uKFdlYkNvcmU6OlNlc3Np
b25JRCk7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3b3JraW5n
Q29udGV4dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tCShyZXZpc2lvbiAxOTE5
OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dC5oIgogCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKICNpbmNsdWRlICJTZXNzaW9uVHJh
Y2tlci5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJQYWdl
LmgiCkBAIC00Nyw3ICs0OCw3IEBAIHZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZW5z
dXJlUHIKIHsKICAgICBBU1NFUlQoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpOwogCi0gICAgaWYg
KFNlc3Npb25UcmFja2VyOjpzZXNzaW9uKHNlc3Npb25JRCkpCisgICAgaWYgKFNlc3Npb25UcmFj
a2VyOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQogICAgICAgICByZXR1cm47CiAKICAgICBT
dHJpbmcgYmFzZTsKQEAgLTU2LDcgKzU3LDExIEBAIHZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29u
dGV4dDo6ZW5zdXJlUHIKICAgICBlbHNlCiAgICAgICAgIGJhc2UgPSBTZXNzaW9uVHJhY2tlcjo6
Z2V0SWRlbnRpZmllckJhc2UoKTsKIAotICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKHNl
c3Npb25JRCwgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNz
aW9uKGJhc2UgKyAnLicgKyBTdHJpbmc6Om51bWJlcihzZXNzaW9uSUQuc2Vzc2lvbklEKCkpKSk7
CisgICAgU2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oYmFzZSArICcuJyArIFN0cmlu
Zzo6bnVtYmVyKHNlc3Npb25JRC5zZXNzaW9uSUQoKSkpCisjaWYgVVNFKE5FVFdPUktfU0VTU0lP
TikKKyAgICAgICAgLCBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTZXNzaW9uPihOZXR3b3JrU2Vz
c2lvbjo6VHlwZTo6RXBoZW1lcmFsLCBzZXNzaW9uSUQpCisjZW5kaWYKKyAgICApOwogfQogCiB2
b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNldENvb2tpZUFjY2VwdFBvbGljeUZvckFs
bENvbnRleHRzKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KQpAQCAtNjYsNyArNzEsNyBA
QCB2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNldENvb2tpCiAgICAgaWYgKFJldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVTdG9yYWdlKCkpCiAgICAg
ICAgIFdLU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShjb29raWVTdG9yYWdlLmdldCgpLCBwb2xp
Y3kpOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBzZXNzaW9uIDogU2Vzc2lvblRyYWNrZXI6OnNl
c3Npb25NYXAoKS52YWx1ZXMoKSkgeworICAgIGZvciAoY29uc3QgYXV0byYgc2Vzc2lvbiA6IFNl
c3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbk1hcCgpLnZhbHVlcygpKSB7CiAgICAgICAgIGlm
IChzZXNzaW9uKQogICAgICAgICAgICAgV0tTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHNlc3Np
b24tPmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgcG9saWN5KTsKICAgICB9CkBAIC0xMTAsOCArMTE1
LDggQEAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBXZWJGcmFtZU5ldHdvcmtpbgogewogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgaWYgKGZyYW1lKCkpIHsKLSAgICAgICAgaWYg
KE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpzZXNzaW9u
KGZyYW1lKCktPnBhZ2UoKS0+c2Vzc2lvbklEKCkpKQotICAgICAgICAgICAgcmV0dXJuICpzZXNz
aW9uOworICAgICAgICBpZiAoYXV0byogc3RvcmFnZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6
c3RvcmFnZVNlc3Npb24oZnJhbWUoKS0+cGFnZSgpLT5zZXNzaW9uSUQoKSkpCisgICAgICAgICAg
ICByZXR1cm4gKnN0b3JhZ2VTZXNzaW9uOwogICAgICAgICAvLyBTb21lIHJlcXVlc3RzIG1heSBz
dGlsbCBiZSBjb21pbmcgc2hvcnRseSBhZnRlciBXZWJQcm9jZXNzIHdhcyB0b2xkIHRvIGRlc3Ry
b3kgaXRzIHNlc3Npb24uCiAgICAgICAgIExPR19FUlJPUigiSW52YWxpZCBzZXNzaW9uIElELiBQ
bGVhc2UgZmlsZSBhIGJ1ZyB1bmxlc3MgeW91IGp1c3QgZGlzYWJsZWQgcHJpdmF0ZSBicm93c2lu
ZywgaW4gd2hpY2ggY2FzZSBpdCdzIGFuIGV4cGVjdGVkIHJhY2UuIik7CiAgICAgfQpJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvc291cC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcAkocmV2
aXNpb24gMTkxOTkzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9zb3VwL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NSw3ICs0NSw3IEBAIHZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHIKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYgKFNlc3Npb25UcmFja2VyOjpz
ZXNzaW9uKHNlc3Npb25JRCkpCisgICAgaWYgKFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lv
bihzZXNzaW9uSUQpKQogICAgICAgICByZXR1cm47CiAKICAgICBTZXNzaW9uVHJhY2tlcjo6c2V0
U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlUHJpdmF0ZUJy
b3dzaW5nU2Vzc2lvbihTdHJpbmc6Om51bWJlcihzZXNzaW9uSUQuc2Vzc2lvbklEKCkpKSk7CkBA
IC03Miw3ICs3Miw3IEBAIHZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2V0Q29va2kK
ICAgICBTb3VwTmV0d29ya1Nlc3Npb24mIHNvdXBTZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VTZXNz
aW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5zb3VwTmV0d29ya1Nlc3Npb24oKTsKICAgICBz
b3VwX2Nvb2tpZV9qYXJfc2V0X2FjY2VwdF9wb2xpY3koc291cFNlc3Npb24uY29va2llSmFyKCks
IHNvdXBQb2xpY3kpOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBzZXNzaW9uIDogU2Vzc2lvblRy
YWNrZXI6OnNlc3Npb25NYXAoKS52YWx1ZXMoKSkgeworICAgIGZvciAoY29uc3QgYXV0byYgc2Vz
c2lvbiA6IFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbk1hcCgpLnZhbHVlcygpKSB7CiAg
ICAgICAgIGlmIChzZXNzaW9uKQogICAgICAgICAgICAgc291cF9jb29raWVfamFyX3NldF9hY2Nl
cHRfcG9saWN5KHNlc3Npb24tPnNvdXBOZXR3b3JrU2Vzc2lvbigpLmNvb2tpZUphcigpLCBzb3Vw
UG9saWN5KTsKICAgICB9CkBAIC04Niw3ICs4Niw3IEBAIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRl
eHQ6OldlYkZyYW1lTmV0d28KIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgV2ViRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dDo6c3RvcmFnZVNlc3Npb24oKSBjb25zdAogewogICAgIGlmIChmcmFtZSgpICYm
IGZyYW1lKCktPnBhZ2UoKS0+dXNlc0VwaGVtZXJhbFNlc3Npb24oKSkKLSAgICAgICAgcmV0dXJu
ICpTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbihTZXNzaW9uSUQ6OmxlZ2FjeVByaXZhdGVTZXNzaW9u
SUQoKSk7CisgICAgICAgIHJldHVybiAqU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKFNl
c3Npb25JRDo6bGVnYWN5UHJpdmF0ZVNlc3Npb25JRCgpKTsKIAogICAgIHJldHVybiBOZXR3b3Jr
U3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwogfQo=
</data>
<flag name="review"
          id="289859"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>