<?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>85880</bug_id>
          
          <creation_ts>2012-05-08 06:33:29 -0700</creation_ts>
          <short_desc>[SOUP] Allow sending URI request data in chunks</short_desc>
          <delta_ts>2012-05-11 01:13:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk, Soup</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>84133</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>danw</cc>
    
    <cc>gustavo</cc>
    
    <cc>levin+threading</cc>
    
    <cc>mrobinson</cc>
    
    <cc>philn</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>618456</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-08 06:33:29 -0700</bug_when>
    <thetext>Currently we have a single IPC message that sends all the uri request data in a single chunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618467</commentid>
    <comment_count>1</comment_count>
      <attachid>140703</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-08 06:44:33 -0700</bug_when>
    <thetext>Created attachment 140703
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618488</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-08 07:00:26 -0700</bug_when>
    <thetext>It seems g_pollable_source_new_full() is too new.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618532</commentid>
    <comment_count>3</comment_count>
      <attachid>140703</attachid>
    <who name="Dan Winship">danw</who>
    <bug_when>2012-05-08 08:12:13 -0700</bug_when>
    <thetext>Comment on attachment 140703
Patch

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

&gt; Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp:43
&gt; +    GRefPtr&lt;GSource&gt; baseSource = adoptGRef(g_timeout_source_new(0));

That means the source will always trigger immediately, and so if there&apos;s not actually any data available, the reader will spin in a tight loop. When the stream is &quot;empty&quot; but not finished, you have to return a source that won&apos;t trigger until after the next time webkitSoupRequestInputStreamAddData() has been called.

One way to do that would be to have a &quot;GCancellable *waiting_for_data;&quot; in priv, and create a source with g_cancellable_create_source(). Then do g_cancellable_cancel(priv-&gt;waiting_for_data) in webkitSoupRequestInputStreamAddData() and g_cancellable_reset(priv-&gt;waiting_for_data) in webkitSoupRequestInputStreamPollableReadNonblocking(). (Using GCancellable for this is semantically backwards, but... it works.)

&gt; Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp:44
&gt; +    return g_pollable_source_new_full(stream, baseSource.get(), cancellable);

as you noted, g_pollable_source_new_full() is very new. but you can just reimplement it by hand; it&apos;s just a small wrapper around g_pollable_source_new(), which is older.

&gt; Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp:82
&gt; +static void webkit_soup_request_input_stream_class_init(WebKitSoupRequestInputStreamClass* requestStreamClass)

Since you&apos;re not overriding GInputStreamClass-&gt;read_fn, it will use GMemoryInputStream&apos;s implementation, which won&apos;t deal with streaming data correctly. It *can&apos;t* deal with it correctly, but it seems like it might be better to have it either return G_IO_ERROR_NOT_SUPPORTED, or else do g_return_val_if_reached(-1);

&gt; Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp:108
&gt; +    return stream-&gt;priv-&gt;bytesAdded == stream-&gt;priv-&gt;contentLength;

Hm... what about for chunked data, when the final length won&apos;t be known in advance? What does WebKit2 do in that case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618536</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-08 08:24:46 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 140703 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=140703&amp;action=review

Thanks for looking at it!

&gt; &gt; Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp:43
&gt; &gt; +    GRefPtr&lt;GSource&gt; baseSource = adoptGRef(g_timeout_source_new(0));
&gt; 
&gt; That means the source will always trigger immediately, and so if there&apos;s not actually any data available, the reader will spin in a tight loop. When the stream is &quot;empty&quot; but not finished, you have to return a source that won&apos;t trigger until after the next time webkitSoupRequestInputStreamAddData() has been called.

Yeah, I thought about it, but assumed the ui client would send more data soon. I agree we should use a custom GSource to implement it properly. 

&gt; One way to do that would be to have a &quot;GCancellable *waiting_for_data;&quot; in priv, and create a source with g_cancellable_create_source(). Then do g_cancellable_cancel(priv-&gt;waiting_for_data) in webkitSoupRequestInputStreamAddData() and g_cancellable_reset(priv-&gt;waiting_for_data) in webkitSoupRequestInputStreamPollableReadNonblocking(). (Using GCancellable for this is semantically backwards, but... it works.)

It&apos;s a bit tricky, but easier than implementing a new GSource.

&gt; &gt; Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp:44
&gt; &gt; +    return g_pollable_source_new_full(stream, baseSource.get(), cancellable);
&gt; 
&gt; as you noted, g_pollable_source_new_full() is very new. but you can just reimplement it by hand; it&apos;s just a small wrapper around g_pollable_source_new(), which is older.

Yes, I was looking at the latest changes in gio.

&gt; &gt; Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp:82
&gt; &gt; +static void webkit_soup_request_input_stream_class_init(WebKitSoupRequestInputStreamClass* requestStreamClass)
&gt; 
&gt; Since you&apos;re not overriding GInputStreamClass-&gt;read_fn, it will use GMemoryInputStream&apos;s implementation, which won&apos;t deal with streaming data correctly. It *can&apos;t* deal with it correctly, but it seems like it might be better to have it either return G_IO_ERROR_NOT_SUPPORTED, or else do g_return_val_if_reached(-1);

Yes, I assumed it was not going to be used, since this input stream is not a generic object in the end, and will only be used by ResourceHandleSoup.

&gt; &gt; Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp:108
&gt; &gt; +    return stream-&gt;priv-&gt;bytesAdded == stream-&gt;priv-&gt;contentLength;
&gt; 
&gt; Hm... what about for chunked data, when the final length won&apos;t be known in advance? What does WebKit2 do in that case?

The API always has to provide the content_length in advance, doesn&apos;t SoupRequest also require to set content_length before finish()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618600</commentid>
    <comment_count>5</comment_count>
      <attachid>140735</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-08 10:19:21 -0700</bug_when>
    <thetext>Created attachment 140735
Updated patch

Use a different approach for our custom stream that should work with previous versions of glib.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618654</commentid>
    <comment_count>6</comment_count>
    <who name="Dan Winship">danw</who>
    <bug_when>2012-05-08 11:25:59 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; Hm... what about for chunked data, when the final length won&apos;t be known in advance? What does WebKit2 do in that case?
&gt; 
&gt; The API always has to provide the content_length in advance, doesn&apos;t SoupRequest also require to set content_length before finish()?

Yes, if it&apos;s known. But the docs explicitly say soup_request_get_content_length() can return -1 too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620123</commentid>
    <comment_count>7</comment_count>
      <attachid>140735</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-09 17:59:23 -0700</bug_when>
    <thetext>Comment on attachment 140735
Updated patch

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

This looks pretty good to me! I have a few outstanding questions though, before I feel comfortable giving an r+.

&gt; Source/WebKit2/ChangeLog:7
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +

It&apos;s probably a good idea to write a couple sentences describing this change in general, for the sake of future readers.

&gt; Source/WebKit2/UIProcess/soup/WebSoupRequestManagerProxy.cpp:78
&gt;      if (!m_client.didReceiveURIRequest(this, WebURL::create(uriString).get(), requestID))
&gt; -        handleURIRequest(WebData::create(0, 0).get(), String(), requestID);
&gt; +        handleURIRequest(WebData::create(0, 0).get(), 0, String(), requestID);

Hrm. Perhaps this should return an error?

&gt; Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp:45
&gt; +    uint64_t bytesAdded;

bytesReceivedFromWebProcess or bytesReceived? bytesAdded could easily refer to &quot;bytes added to the output.&quot;

&gt; Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp:48
&gt; +    Mutex readLock;

I&apos;m a little confused as to what exactly this mutex is protecting. Is it protecting just the data in this private structure or any operations at all?

&gt; Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp:81
&gt; +        stream-&gt;priv-&gt;asyncReadData = adoptPtr(new AsyncReadData(result.get(), buffer, count, cancellable));

Won&apos;t this break if g_input_stream_read_async is called twice in a row?

&gt; Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp:135
&gt; +    if (webkitSoupRequestInputStreamFinished(stream))
&gt; +        return;

Does this need to be protected by the mutex or can the mutex be locked after this early return¿

&gt; Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp:137
&gt; +    if (stream-&gt;priv-&gt;bytesAdded + dataLength &gt; stream-&gt;priv-&gt;contentLength)
&gt; +        dataLength = stream-&gt;priv-&gt;contentLength - stream-&gt;priv-&gt;bytesAdded;

Dan should confirm, but is it really an error to pass more data to soup than specified by the content length? What about the case where contentLength = -1 that he mentioned above?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620127</commentid>
    <comment_count>8</comment_count>
      <attachid>140735</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-09 18:03:52 -0700</bug_when>
    <thetext>Comment on attachment 140735
Updated patch

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

&gt; Source/WebKit2/WebProcess/soup/WebSoupRequestManager.h:58
&gt; +    void handleURIRequest(const CoreIPC::DataReference&amp;, uint64_t contentLength, const String&amp; mimeType, uint64_t requestID);
&gt; +    void addDataToURIRequest(const CoreIPC::DataReference&amp;, uint64_t requestID);

Another quick comment here... Perhaps these names should be similar to the names that WebCore uses in these situations, like handleURISchemeResponseReceived and handleURISchemeResponseData or something even better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620294</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-09 23:52:45 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 140735 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=140735&amp;action=review
&gt; 
&gt; This looks pretty good to me! I have a few outstanding questions though, before I feel comfortable giving an r+.

Thanks!

&gt; &gt; Source/WebKit2/ChangeLog:7
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; 
&gt; It&apos;s probably a good idea to write a couple sentences describing this change in general, for the sake of future readers.

Fair enough

&gt; &gt; Source/WebKit2/UIProcess/soup/WebSoupRequestManagerProxy.cpp:78
&gt; &gt;      if (!m_client.didReceiveURIRequest(this, WebURL::create(uriString).get(), requestID))
&gt; &gt; -        handleURIRequest(WebData::create(0, 0).get(), String(), requestID);
&gt; &gt; +        handleURIRequest(WebData::create(0, 0).get(), 0, String(), requestID);
&gt; 
&gt; Hrm. Perhaps this should return an error?

No, this is handled in the web process, and indeed an error is shown, the same error that if you type foo:bar and foo is not handled.

&gt; &gt; Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp:45
&gt; &gt; +    uint64_t bytesAdded;
&gt; 
&gt; bytesReceivedFromWebProcess or bytesReceived? bytesAdded could easily refer to &quot;bytes added to the output.&quot;

Ok, I&apos;ll think a better name.

&gt; &gt; Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp:48
&gt; &gt; +    Mutex readLock;
&gt; 
&gt; I&apos;m a little confused as to what exactly this mutex is protecting. Is it protecting just the data in this private structure or any operations at all?

GLib will run read_async in a thread, so webkitSoupRequestInputStreamReadAsync() and webkitSoupRequestInputStreamAddData() can be run at the same time. We need to protect bytesAdded, asyncReadData, etc.

&gt; &gt; Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp:81
&gt; &gt; +        stream-&gt;priv-&gt;asyncReadData = adoptPtr(new AsyncReadData(result.get(), buffer, count, cancellable));
&gt; 
&gt; Won&apos;t this break if g_input_stream_read_async is called twice in a row?

You are not supposed to call read_async twice in a row, in such case, our read_async is not called because g_input_stream_read_async() returns early with the error G_IO_ERROR_PENDING.

&gt; &gt; Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp:135
&gt; &gt; +    if (webkitSoupRequestInputStreamFinished(stream))
&gt; &gt; +        return;
&gt; 
&gt; Does this need to be protected by the mutex or can the mutex be locked after this early return¿

That reads bytesAdded that is only written by this method, so it can probably be moved after the early return.

&gt; &gt; Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp:137
&gt; &gt; +    if (stream-&gt;priv-&gt;bytesAdded + dataLength &gt; stream-&gt;priv-&gt;contentLength)
&gt; &gt; +        dataLength = stream-&gt;priv-&gt;contentLength - stream-&gt;priv-&gt;bytesAdded;
&gt; 
&gt; Dan should confirm, but is it really an error to pass more data to soup than specified by the content length?

That&apos;s not actually an error, the data is simply truncated.

&gt; What about the case where contentLength = -1 that he mentioned above?

We are not supporting such case, we need to now when more data is expected. We could implement that case by always sending a 0 bytes data message when contentLength is -1 and all data has been read from the input stream.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620297</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-09 23:56:38 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 140735 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=140735&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/soup/WebSoupRequestManager.h:58
&gt; &gt; +    void handleURIRequest(const CoreIPC::DataReference&amp;, uint64_t contentLength, const String&amp; mimeType, uint64_t requestID);
&gt; &gt; +    void addDataToURIRequest(const CoreIPC::DataReference&amp;, uint64_t requestID);
&gt; 
&gt; Another quick comment here... Perhaps these names should be similar to the names that WebCore uses in these situations, like handleURISchemeResponseReceived and handleURISchemeResponseData or something even better.

Yes, I don&apos;t like the names either, but I couldn&apos;t think of a better name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620439</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-10 03:54:39 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #8)
&gt; &gt; (From update of attachment 140735 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=140735&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/WebProcess/soup/WebSoupRequestManager.h:58
&gt; &gt; &gt; +    void handleURIRequest(const CoreIPC::DataReference&amp;, uint64_t contentLength, const String&amp; mimeType, uint64_t requestID);
&gt; &gt; &gt; +    void addDataToURIRequest(const CoreIPC::DataReference&amp;, uint64_t requestID);
&gt; &gt; 
&gt; &gt; Another quick comment here... Perhaps these names should be similar to the names that WebCore uses in these situations, like handleURISchemeResponseReceived and handleURISchemeResponseData or something even better.
&gt; 
&gt; Yes, I don&apos;t like the names either, but I couldn&apos;t think of a better name.

The names are indeed confusing, the request is handled by the UI process, so sending a message to the web process called HandleFoo makes me think the web process is supposeed to handle it. So, I think DidHandleURIRequest and DidReceiveURIREquestData make more sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620456</commentid>
    <comment_count>12</comment_count>
      <attachid>141142</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-10 04:12:19 -0700</bug_when>
    <thetext>Created attachment 141142
Updated patch according to review comments

Addressed all review comments and also added support for unknown content length and mime type for compatibility with soup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620751</commentid>
    <comment_count>13</comment_count>
      <attachid>141142</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-10 11:21:55 -0700</bug_when>
    <thetext>Comment on attachment 141142
Updated patch according to review comments

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

Okay! Thanks for addressing my comments above. Before landing please consider the following simplification and clean up. I think it will make the code a lot more readable. I had some small difficulty understanding this partly because (1) I&apos;m an idiot and (2) It&apos;s tricky to keep track of &quot;bytes read out&quot; and &quot;bytes received&quot; especially when their names both conjure images of bytes coming in.

&gt; Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp:83
&gt; +    // There is data in the memory stream to read.
&gt; +    if (stream-&gt;priv-&gt;bytesRead &lt; stream-&gt;priv-&gt;bytesReceived) {
&gt; +        webkitSoupRequestInputStreamReadAsyncResultComplete(stream, result.get(), buffer, count, cancellable);
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    // We are expecting more data to be added.
&gt; +    if (!webkitSoupRequestInputStreamFinished(stream)) {
&gt; +        stream-&gt;priv-&gt;asyncReadData = adoptPtr(new AsyncReadData(result.get(), buffer, count, cancellable));
&gt; +        return;
&gt; +    }

I feel that it might be slightly simpler to unconditionally create stream-&gt;priv-&gt;asyncReadData here. You could do something like:

bool moreDataToSendForRead = stream-&gt;priv-&gt;bytesRead &lt; stream-&gt;priv-&gt;bytesReceived;
if (!moreDataToSendForRead &amp;&amp; webkitSoupRequestInputStreamFinished(stream)) {
    g_simple_async_result_set_op_res_gssize(result.get(), 0);
    g_simple_async_result_complete_in_idle(result.get());
    return;
}

stream-&gt;priv-&gt;asyncReadData = adoptPtr(new AsyncReadData(result.get(), buffer, count, cancellable));
if (moreDataToSendForRead)
    webkitSoupRequestInputStreamReadAsyncResultComplete(stream, cancellable);


This way webkitSoupRequestInputStreamReadAsyncResultComplete would be responsible for calling stream-&gt;priv-&gt;asyncReadData.clear(), which seems to make more sense since it consumes it.

Also, instead of adding a comment like:
// We are expecting more data to be added.
if (!webkitSoupRequestInputStreamFinished(stream)) {

I think it makes sense to simply rename webkitSoupRequestInputStreamFinished to webkitSoupRequestWaitingForMoreDataToBeAdded or something better. I recommend doing the same for stream-&gt;priv-&gt;bytesRead &lt; stream-&gt;priv-&gt;bytesReceived by creating a helper like webkitSoupRequestSentAllDataForPendingRead or something similar. Helper methods with good names are almost always better than comments, I&apos;d say.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621358</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-11 00:40:15 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 141142 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141142&amp;action=review
&gt; 
&gt; Okay! Thanks for addressing my comments above. Before landing please consider the following simplification and clean up. I think it will make the code a lot more readable. I had some small difficulty understanding this partly because (1) I&apos;m an idiot and (2) It&apos;s tricky to keep track of &quot;bytes read out&quot; and &quot;bytes received&quot; especially when their names both conjure images of bytes coming in.
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp:83
&gt; &gt; +    // There is data in the memory stream to read.
&gt; &gt; +    if (stream-&gt;priv-&gt;bytesRead &lt; stream-&gt;priv-&gt;bytesReceived) {
&gt; &gt; +        webkitSoupRequestInputStreamReadAsyncResultComplete(stream, result.get(), buffer, count, cancellable);
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    // We are expecting more data to be added.
&gt; &gt; +    if (!webkitSoupRequestInputStreamFinished(stream)) {
&gt; &gt; +        stream-&gt;priv-&gt;asyncReadData = adoptPtr(new AsyncReadData(result.get(), buffer, count, cancellable));
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; 
&gt; I feel that it might be slightly simpler to unconditionally create stream-&gt;priv-&gt;asyncReadData here.

That would mean adding an unnecessary alloc/dealloc in the case where we already have the data ready in the stream to read from. AsyncReadData is to postpone the async result completion until we have more data in the stream to read from.

&gt; You could do something like:
&gt; 
&gt; bool moreDataToSendForRead = stream-&gt;priv-&gt;bytesRead &lt; stream-&gt;priv-&gt;bytesReceived;
&gt; if (!moreDataToSendForRead &amp;&amp; webkitSoupRequestInputStreamFinished(stream)) {
&gt;     g_simple_async_result_set_op_res_gssize(result.get(), 0);
&gt;     g_simple_async_result_complete_in_idle(result.get());
&gt;     return;
&gt; }
&gt; 
&gt; stream-&gt;priv-&gt;asyncReadData = adoptPtr(new AsyncReadData(result.get(), buffer, count, cancellable));
&gt; if (moreDataToSendForRead)
&gt;     webkitSoupRequestInputStreamReadAsyncResultComplete(stream, cancellable);
&gt; 
&gt; 
&gt; This way webkitSoupRequestInputStreamReadAsyncResultComplete would be responsible for calling stream-&gt;priv-&gt;asyncReadData.clear(), which seems to make more sense since it consumes it.
&gt; 
&gt; Also, instead of adding a comment like:
&gt; // We are expecting more data to be added.
&gt; if (!webkitSoupRequestInputStreamFinished(stream)) {
&gt; 
&gt; I think it makes sense to simply rename webkitSoupRequestInputStreamFinished to webkitSoupRequestWaitingForMoreDataToBeAdded or something better. I recommend doing the same for stream-&gt;priv-&gt;bytesRead &lt; stream-&gt;priv-&gt;bytesReceived by creating a helper like webkitSoupRequestSentAllDataForPendingRead or something similar. Helper methods with good names are almost always better than comments, I&apos;d say.

I&apos;ll try to use better names</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621367</commentid>
    <comment_count>15</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-11 01:06:36 -0700</bug_when>
    <thetext>(In reply to comment #14)

&gt; That would mean adding an unnecessary alloc/dealloc in the case where we already have the data ready in the stream to read from. AsyncReadData is to postpone the async result completion until we have more data in the stream to read from.

The allocation in this case is very cheap, but one way to avoid it would be to add a method to AsyncReadData to mark it as invalid and never allocate and deallocate it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621371</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-11 01:13:58 -0700</bug_when>
    <thetext>Committed r116738: &lt;http://trac.webkit.org/changeset/116738&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140703</attachid>
            <date>2012-05-08 06:44:33 -0700</date>
            <delta_ts>2012-05-08 10:19:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-soup-uri-request-chunks.diff</filename>
            <type>text/plain</type>
            <size>21793</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBiMjY0NzA1Li5kN2RiZmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTYg
QEAKKzIwMTItMDUtMDggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtTT1VQXSBBbGxvdyBzZW5kaW5nIFVSSSByZXF1ZXN0IGRhdGEgaW4gY2h1
bmtzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTg4
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05V
bWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL3NvdXAvV0tTb3VwUmVxdWVzdE1hbmFnZXIuY3BwOgorICAgICAgICAoV0tT
b3VwUmVxdWVzdE1hbmFnZXJIYW5kbGVVUklSZXF1ZXN0KTogQWRkIGNvbnRlbnRMZW5ndGggcGFy
YW1ldGVyLgorICAgICAgICAoV0tTb3VwUmVxdWVzdE1hbmFnZXJBZGREYXRhVG9VUklSZXF1ZXN0
KTogTmV3IG1ldGhvZCB0byBzZW5kIG1vcmUKKyAgICAgICAgZGF0YSBmb3IgdGhlIHVyaSByZXF1
ZXN0IHRvIHRoZSB3ZWIgcHJvY2Vzcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Mvc291cC9X
S1NvdXBSZXF1ZXN0TWFuYWdlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9zb3VwL1dlYlNvdXBS
ZXF1ZXN0TWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU291cFJlcXVlc3RN
YW5hZ2VyUHJveHk6OmhhbmRsZVVSSVJlcXVlc3QpOiBBZGQKKyAgICAgICAgY29udGVudExlbmd0
aCBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJLaXQ6OldlYlNvdXBSZXF1ZXN0TWFuYWdlclByb3h5
OjphZGREYXRhVG9VUklSZXF1ZXN0KTogU2VuZAorICAgICAgICBBZGREYXRhVG9VUklSZXF1ZXN0
IG1lc3NhZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlNvdXBSZXF1ZXN0TWFuYWdlclByb3h5Ojpk
aWRSZWNlaXZlVVJJUmVxdWVzdCk6CisgICAgICAgICogVUlQcm9jZXNzL3NvdXAvV2ViU291cFJl
cXVlc3RNYW5hZ2VyUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL3NvdXAvV2ViS2l0U291
cFJlcXVlc3RJbnB1dFN0cmVhbS5jcHA6IEFkZGVkLgorICAgICAgICAod2Via2l0U291cFJlcXVl
c3RJbnB1dFN0cmVhbVBvbGxhYmxlSXNSZWFkYWJsZSk6IFJldHVybiBUUlVFLgorICAgICAgICAo
d2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVBvbGxhYmxlQ3JlYXRlU291cmNlKTogQ3JlYXRl
IGEKKyAgICAgICAgR1NvdXJjZSBmb3IgdGhlIGlucHV0IHN0cmVhbS4KKyAgICAgICAgKHdlYmtp
dFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1Qb2xsYWJsZVJlYWROb25ibG9ja2luZyk6IFJlYWQgZGF0
YQorICAgICAgICBmcm9tIG1lbW9yeSBpbnB1dCBzdHJlYW0gcmV0dXJuaW5nIEVBR0FJTiBpZiB0
aGVyZSdzIG5vIG1vcmUgZGF0YQorICAgICAgICBpbiB0aGUgbWVtb3J5IGlucHV0IHN0cmVhbSwg
YnV0IHdlIGFyZSBleHBlY3RpbmcgbW9yZSBkYXRhIGZyb20KKyAgICAgICAgdGhlIFVJIHByb2Nl
c3MuCisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUG9sbGFibGVJZmFjZUlu
aXQpOiBJbml0aWFsaXplCisgICAgICAgIEdQb2xsYWJsZUlucHV0U3RyZWFtIGludGVyZmFjZS4K
KyAgICAgICAgKHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1GaW5hbGl6ZSk6CisgICAgICAg
ICh3ZWJraXRfc291cF9yZXF1ZXN0X2lucHV0X3N0cmVhbV9pbml0KToKKyAgICAgICAgKHdlYmtp
dF9zb3VwX3JlcXVlc3RfaW5wdXRfc3RyZWFtX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0
U291cFJlcXVlc3RJbnB1dFN0cmVhbU5ldyk6IENyZWF0ZSBhIG5ldyBpbnB1dCBzdHJlYW0gd2l0
aAorICAgICAgICBhIGZpeGVkIHNpemUuCisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVzdElucHV0
U3RyZWFtQWRkRGF0YSk6IEFkZCBtb3JlIGRhdGEgdG8gdGhlCisgICAgICAgIHN0cmVhbS4KKyAg
ICAgICAgKHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1GaW5pc2hlZCk6IFdoZXRoZXIgYWxs
IGRhdGEgZXhwZWN0ZWQKKyAgICAgICAgYnkgdGhlIHN0cmVhbSBoYXMgYmVlbiBhZGRlZC4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbS5oOiBB
ZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViU291cFJlcXVlc3RNYW5hZ2VyOjpoYW5kbGVVUklSZXF1
ZXN0KTogQ3JlYXRlIGEKKyAgICAgICAgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSBpcyB3
ZSBoYXZlbid0IHJlY2VpdmVkIGFsbCB0aGUKKyAgICAgICAgcmVxdWVzdCBkYXRhIGluIHRoZSBI
YW5kbGVVUklSZXF1ZXN0IG1lc3NhZ2UuIE90aGVyd2lzZSBqdXN0CisgICAgICAgIGNyZWF0ZSBh
IG1lbW9yeSBpbnB1dCBzdHJlYW0gd2l0aCBhbGwgdGhlIGRhdGEuCisgICAgICAgIChXZWJLaXQ6
OldlYlNvdXBSZXF1ZXN0TWFuYWdlcjo6YWRkRGF0YVRvVVJJUmVxdWVzdCk6IEFkZCB0aGUgZGF0
YQorICAgICAgICByZWNlaXZlZCB0byB0aGUgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSBh
c3NvY2lhdGVkIHRvIHRoZQorICAgICAgICBnaXZlbiByZXF1ZXN0IGlkZW50aWZpZXIuCisgICAg
ICAgICogV2ViUHJvY2Vzcy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdlci5oOgorICAgICAgICAq
IFdlYlByb2Nlc3Mvc291cC9XZWJTb3VwUmVxdWVzdE1hbmFnZXIubWVzc2FnZXMuaW46IEFkZAor
ICAgICAgICBjb250ZW50TGVuZ3RoIHBhcmFtZXRlciB0byBIYW5kbGVVUklSZXF1ZXN0IG1lc3Nh
Z2UgYW5kIGFkZAorICAgICAgICBBZGREYXRhVG9VUklSZXF1ZXN0IG1lc3NhZ2UuCisKIDIwMTIt
MDUtMDcgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmVmYWN0b3Igd2luZG93Q2xpcFJlY3RGb3JMYXllciB0byByZW1vdmUgdGhlIGV4cGxpY2l0
IFJlbmRlckxheWVyIGRlcGVuZGVuY3kKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1h
a2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggYTZiNDJhNi4u
NGQwODc5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIv
U291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTk0OCw2ICs5NDgsOCBAQCB3ZWJraXQy
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJTb3VwUmVx
dWVzdE1hbmFnZXIuaCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNv
dXBSZXF1ZXN0R2VuZXJpYy5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9X
ZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuaCBcCisJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9z
b3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbS5oIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJDb250ZXh0TWVudUNsaWVu
dEd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3Rr
L1dlYkRyYWdDbGllbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9zb3VwL1dLU291cFJlcXVlc3RNYW5hZ2VyLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9zb3VwL1dLU291cFJlcXVlc3RNYW5hZ2Vy
LmNwcAppbmRleCAxODdkN2ZkLi5kYzExMGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0Mvc291cC9XS1NvdXBSZXF1ZXN0TWFuYWdlci5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3NvdXAvV0tTb3VwUmVxdWVzdE1hbmFnZXIuY3BwCkBA
IC00Niw3ICs0NiwxMiBAQCB2b2lkIFdLU291cFJlcXVlc3RNYW5hZ2VyUmVnaXN0ZXJVUklTY2hl
bWUoV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYgc291cFJlcXVlc3RNYQogICAgIHRvSW1wbChzb3Vw
UmVxdWVzdE1hbmFnZXJSZWYpLT5yZWdpc3RlclVSSVNjaGVtZSh0b0ltcGwoc2NoZW1lUmVmKS0+
c3RyaW5nKCkpOwogfQogCi12b2lkIFdLU291cFJlcXVlc3RNYW5hZ2VySGFuZGxlVVJJUmVxdWVz
dChXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZiBzb3VwUmVxdWVzdE1hbmFnZXJSZWYsIFdLRGF0YVJl
ZiBkYXRhLCBXS1N0cmluZ1JlZiBtaW1lVHlwZVJlZiwgdWludDY0X3QgcmVxdWVzdElEKQordm9p
ZCBXS1NvdXBSZXF1ZXN0TWFuYWdlckhhbmRsZVVSSVJlcXVlc3QoV0tTb3VwUmVxdWVzdE1hbmFn
ZXJSZWYgc291cFJlcXVlc3RNYW5hZ2VyUmVmLCBXS0RhdGFSZWYgZGF0YSwgdWludDY0X3QgY29u
dGVudExlbmd0aCwgV0tTdHJpbmdSZWYgbWltZVR5cGVSZWYsIHVpbnQ2NF90IHJlcXVlc3RJRCkK
IHsKLSAgICB0b0ltcGwoc291cFJlcXVlc3RNYW5hZ2VyUmVmKS0+aGFuZGxlVVJJUmVxdWVzdCh0
b0ltcGwoZGF0YSksIHRvSW1wbChtaW1lVHlwZVJlZiktPnN0cmluZygpLCByZXF1ZXN0SUQpOwor
ICAgIHRvSW1wbChzb3VwUmVxdWVzdE1hbmFnZXJSZWYpLT5oYW5kbGVVUklSZXF1ZXN0KHRvSW1w
bChkYXRhKSwgY29udGVudExlbmd0aCwgdG9JbXBsKG1pbWVUeXBlUmVmKS0+c3RyaW5nKCksIHJl
cXVlc3RJRCk7Cit9CisKK3ZvaWQgV0tTb3VwUmVxdWVzdE1hbmFnZXJBZGREYXRhVG9VUklSZXF1
ZXN0KFdLU291cFJlcXVlc3RNYW5hZ2VyUmVmIHNvdXBSZXF1ZXN0TWFuYWdlclJlZiwgV0tEYXRh
UmVmIGRhdGEsIHVpbnQ2NF90IHJlcXVlc3RJRCkKK3sKKyAgICB0b0ltcGwoc291cFJlcXVlc3RN
YW5hZ2VyUmVmKS0+YWRkRGF0YVRvVVJJUmVxdWVzdCh0b0ltcGwoZGF0YSksIHJlcXVlc3RJRCk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvc291cC9XS1Nv
dXBSZXF1ZXN0TWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3NvdXAv
V0tTb3VwUmVxdWVzdE1hbmFnZXIuaAppbmRleCA3NGI0ZmEwLi4yOTlmNzRhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvc291cC9XS1NvdXBSZXF1ZXN0TWFuYWdl
ci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9zb3VwL1dLU291cFJlcXVl
c3RNYW5hZ2VyLmgKQEAgLTQ4LDcgKzQ4LDggQEAgV0tfRVhQT1JUIFdLVHlwZUlEIFdLU291cFJl
cXVlc3RNYW5hZ2VyR2V0VHlwZUlEKCk7CiAKIFdLX0VYUE9SVCB2b2lkIFdLU291cFJlcXVlc3RN
YW5hZ2VyU2V0Q2xpZW50KFdLU291cFJlcXVlc3RNYW5hZ2VyUmVmLCBjb25zdCBXS1NvdXBSZXF1
ZXN0TWFuYWdlckNsaWVudCogY2xpZW50KTsKIFdLX0VYUE9SVCB2b2lkIFdLU291cFJlcXVlc3RN
YW5hZ2VyUmVnaXN0ZXJVUklTY2hlbWUoV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYsIFdLU3RyaW5n
UmVmIHNjaGVtZVJlZik7Ci1XS19FWFBPUlQgdm9pZCBXS1NvdXBSZXF1ZXN0TWFuYWdlckhhbmRs
ZVVSSVJlcXVlc3QoV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYsIFdLRGF0YVJlZiwgV0tTdHJpbmdS
ZWYgbWltZVR5cGVSZWYsIHVpbnQ2NF90IHJlcXVlc3RJRCk7CitXS19FWFBPUlQgdm9pZCBXS1Nv
dXBSZXF1ZXN0TWFuYWdlckhhbmRsZVVSSVJlcXVlc3QoV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYs
IFdLRGF0YVJlZiwgdWludDY0X3QgY29udGVudExlbmd0aCwgV0tTdHJpbmdSZWYgbWltZVR5cGVS
ZWYsIHVpbnQ2NF90IHJlcXVlc3RJRCk7CitXS19FWFBPUlQgdm9pZCBXS1NvdXBSZXF1ZXN0TWFu
YWdlckFkZERhdGFUb1VSSVJlcXVlc3QoV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYsIFdLRGF0YVJl
ZiwgdWludDY0X3QgcmVxdWVzdElEKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvc291cC9XZWJTb3VwUmVxdWVzdE1hbmFnZXJQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvc291cC9XZWJTb3VwUmVxdWVzdE1h
bmFnZXJQcm94eS5jcHAKaW5kZXggMjBjNWM0Zi4uNjhjMzBlZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdlclBy
b3h5LmNwcApAQCAtNjAsMTYgKzYwLDIyIEBAIHZvaWQgV2ViU291cFJlcXVlc3RNYW5hZ2VyUHJv
eHk6OnJlZ2lzdGVyVVJJU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKQogICAgIG1fd2ViQ29u
dGV4dC0+c2VuZFRvQWxsUHJvY2Vzc2VzUmVsYXVuY2hpbmdUaGVtSWZOZWNlc3NhcnkoTWVzc2Fn
ZXM6OldlYlNvdXBSZXF1ZXN0TWFuYWdlcjo6UmVnaXN0ZXJVUklTY2hlbWUoc2NoZW1lKSk7CiB9
CiAKLXZvaWQgV2ViU291cFJlcXVlc3RNYW5hZ2VyUHJveHk6OmhhbmRsZVVSSVJlcXVlc3QoY29u
c3QgV2ViRGF0YSogcmVxdWVzdERhdGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHVpbnQ2NF90
IHJlcXVlc3RJRCkKK3ZvaWQgV2ViU291cFJlcXVlc3RNYW5hZ2VyUHJveHk6OmhhbmRsZVVSSVJl
cXVlc3QoY29uc3QgV2ViRGF0YSogcmVxdWVzdERhdGEsIHVpbnQ2NF90IGNvbnRlbnRMZW5ndGgs
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHVpbnQ2NF90IHJlcXVlc3RJRCkKIHsKICAgICBBU1NF
UlQobV93ZWJDb250ZXh0KTsKLSAgICBtX3dlYkNvbnRleHQtPnNlbmRUb0FsbFByb2Nlc3NlcyhN
ZXNzYWdlczo6V2ViU291cFJlcXVlc3RNYW5hZ2VyOjpIYW5kbGVVUklSZXF1ZXN0KHJlcXVlc3RE
YXRhLT5kYXRhUmVmZXJlbmNlKCksIG1pbWVUeXBlLCByZXF1ZXN0SUQpKTsKKyAgICBtX3dlYkNv
bnRleHQtPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViU291cFJlcXVlc3RNYW5hZ2Vy
OjpIYW5kbGVVUklSZXF1ZXN0KHJlcXVlc3REYXRhLT5kYXRhUmVmZXJlbmNlKCksIGNvbnRlbnRM
ZW5ndGgsIG1pbWVUeXBlLCByZXF1ZXN0SUQpKTsKK30KKwordm9pZCBXZWJTb3VwUmVxdWVzdE1h
bmFnZXJQcm94eTo6YWRkRGF0YVRvVVJJUmVxdWVzdChjb25zdCBXZWJEYXRhKiByZXF1ZXN0RGF0
YSwgdWludDY0X3QgcmVxdWVzdElEKQoreworICAgIEFTU0VSVChtX3dlYkNvbnRleHQpOworICAg
IG1fd2ViQ29udGV4dC0+c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJTb3VwUmVxdWVz
dE1hbmFnZXI6OkFkZERhdGFUb1VSSVJlcXVlc3QocmVxdWVzdERhdGEtPmRhdGFSZWZlcmVuY2Uo
KSwgcmVxdWVzdElEKSk7CiB9CiAKIHZvaWQgV2ViU291cFJlcXVlc3RNYW5hZ2VyUHJveHk6OmRp
ZFJlY2VpdmVVUklSZXF1ZXN0KGNvbnN0IFN0cmluZyYgdXJpU3RyaW5nLCB1aW50NjRfdCByZXF1
ZXN0SUQpCiB7CiAgICAgaWYgKCFtX2NsaWVudC5kaWRSZWNlaXZlVVJJUmVxdWVzdCh0aGlzLCBX
ZWJVUkw6OmNyZWF0ZSh1cmlTdHJpbmcpLmdldCgpLCByZXF1ZXN0SUQpKQotICAgICAgICBoYW5k
bGVVUklSZXF1ZXN0KFdlYkRhdGE6OmNyZWF0ZSgwLCAwKS5nZXQoKSwgU3RyaW5nKCksIHJlcXVl
c3RJRCk7CisgICAgICAgIGhhbmRsZVVSSVJlcXVlc3QoV2ViRGF0YTo6Y3JlYXRlKDAsIDApLmdl
dCgpLCAwLCBTdHJpbmcoKSwgcmVxdWVzdElEKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvc291cC9XZWJTb3VwUmVxdWVz
dE1hbmFnZXJQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3NvdXAvV2ViU291cFJl
cXVlc3RNYW5hZ2VyUHJveHkuaAppbmRleCAyYWEzZTk5Li5kMDM1MzQyZGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdlclByb3h5
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5h
Z2VyUHJveHkuaApAQCAtNTAsNyArNTAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbml0aWFsaXpl
Q2xpZW50KGNvbnN0IFdLU291cFJlcXVlc3RNYW5hZ2VyQ2xpZW50Kik7CiAKICAgICB2b2lkIHJl
Z2lzdGVyVVJJU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKTsKLSAgICB2b2lkIGhhbmRsZVVS
SVJlcXVlc3QoY29uc3QgV2ViRGF0YSosIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHVpbnQ2NF90
IHJlcXVlc3RJRCk7CisgICAgdm9pZCBoYW5kbGVVUklSZXF1ZXN0KGNvbnN0IFdlYkRhdGEqLCB1
aW50NjRfdCBjb250ZW50TGVuZ3RoLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCB1aW50NjRfdCBy
ZXF1ZXN0SUQpOworICAgIHZvaWQgYWRkRGF0YVRvVVJJUmVxdWVzdChjb25zdCBXZWJEYXRhKiwg
dWludDY0X3QgcmVxdWVzdElEKTsKIAogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQ
Qzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJL
aXRTb3VwUmVxdWVzdElucHV0U3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
c291cC9XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4zYzVmNmM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uY3BwCkBAIC0w
LDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtLmgi
CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4K
Kworc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUHJpdmF0ZSB7CisgICAgdWlu
dDY0X3QgY29udGVudExlbmd0aDsKKyAgICB1aW50NjRfdCBieXRlc0FkZGVkOworfTsKKworc3Rh
dGljIHZvaWQgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVBvbGxhYmxlSWZhY2VJbml0KEdQ
b2xsYWJsZUlucHV0U3RyZWFtSW50ZXJmYWNlKik7CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RF
KFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0sIHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5wdXRf
c3RyZWFtLCBHX1RZUEVfTUVNT1JZX0lOUFVUX1NUUkVBTSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShHX1RZUEVfUE9MTEFCTEVfSU5QVVRfU1RSRUFNLCB3
ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUG9sbGFibGVJZmFjZUluaXQpOykKKworc3RhdGlj
IGdib29sZWFuIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1Qb2xsYWJsZUlzUmVhZGFibGUo
R1BvbGxhYmxlSW5wdXRTdHJlYW0qKQoreworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMg
R1NvdXJjZSogd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVBvbGxhYmxlQ3JlYXRlU291cmNl
KEdQb2xsYWJsZUlucHV0U3RyZWFtKiBzdHJlYW0sIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUp
Cit7CisgICAgR1JlZlB0cjxHU291cmNlPiBiYXNlU291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91
dF9zb3VyY2VfbmV3KDApKTsKKyAgICByZXR1cm4gZ19wb2xsYWJsZV9zb3VyY2VfbmV3X2Z1bGwo
c3RyZWFtLCBiYXNlU291cmNlLmdldCgpLCBjYW5jZWxsYWJsZSk7Cit9CisKK3N0YXRpYyBnc3Np
emUgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVBvbGxhYmxlUmVhZE5vbmJsb2NraW5nKEdQ
b2xsYWJsZUlucHV0U3RyZWFtKiBzdHJlYW0sIHZvaWQqIGJ1ZmZlciwgZ3NpemUgY291bnQsIEdF
cnJvcioqIGVycm9yKQoreworICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBHX0lOUFVUX1NUUkVBTV9H
RVRfQ0xBU1Moc3RyZWFtKS0+cmVhZF9mbihHX0lOUFVUX1NUUkVBTShzdHJlYW0pLCBidWZmZXIs
IGNvdW50LCAwLCBlcnJvcik7CisgICAgaWYgKCFieXRlc1JlYWQpIHsKKyAgICAgICAgLy8gQ2hl
Y2sgaWYgd2UgYXJlIGV4cGVjdGluZyBtb3JlIGRhdGEuCisgICAgICAgIGlmICh3ZWJraXRTb3Vw
UmVxdWVzdElucHV0U3RyZWFtRmluaXNoZWQoV0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJF
QU0oc3RyZWFtKSkpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBnX3NldF9lcnJv
cl9saXRlcmFsKGVycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX1dPVUxEX0JMT0NLLCBnX3N0
cmVycm9yKEVBR0FJTikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJu
IGJ5dGVzUmVhZDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVh
bVBvbGxhYmxlSWZhY2VJbml0KEdQb2xsYWJsZUlucHV0U3RyZWFtSW50ZXJmYWNlKiBpZmFjZSkK
K3sKKyAgICBpZmFjZS0+aXNfcmVhZGFibGUgPSB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFt
UG9sbGFibGVJc1JlYWRhYmxlOworICAgIGlmYWNlLT5jcmVhdGVfc291cmNlID0gd2Via2l0U291
cFJlcXVlc3RJbnB1dFN0cmVhbVBvbGxhYmxlQ3JlYXRlU291cmNlOworICAgIGlmYWNlLT5yZWFk
X25vbmJsb2NraW5nID0gd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVBvbGxhYmxlUmVhZE5v
bmJsb2NraW5nOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFt
RmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdFQktJVF9TT1VQX1JFUVVFU1RfSU5Q
VVRfU1RSRUFNKG9iamVjdCktPnByaXYtPn5XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUHJp
dmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5wdXRfc3Ry
ZWFtX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9zb3VwX3JlcXVlc3RfaW5wdXRfc3RyZWFtX2luaXQoV2ViS2l0U291cFJlcXVlc3RJbnB1
dFN0cmVhbSogc3RyZWFtKQoreworICAgIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1Qcml2
YXRlKiBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKHN0cmVhbSwgV0VCS0lUX1RZ
UEVfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTSwgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVh
bVByaXZhdGUpOworICAgIHN0cmVhbS0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2KSBXZWJL
aXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUHJpdmF0ZSgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfc291cF9yZXF1ZXN0X2lucHV0X3N0cmVhbV9jbGFzc19pbml0KFdlYktpdFNvdXBSZXF1ZXN0
SW5wdXRTdHJlYW1DbGFzcyogcmVxdWVzdFN0cmVhbUNsYXNzKQoreworICAgIEdPYmplY3RDbGFz
cyogZ09iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdFN0cmVhbUNsYXNzKTsKKyAg
ICBnT2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUZp
bmFsaXplOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShyZXF1ZXN0U3RyZWFtQ2xhc3Ms
IHNpemVvZihXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUHJpdmF0ZSkpOworfQorCitHSW5w
dXRTdHJlYW0qIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1OZXcodWludDY0X3QgY29udGVu
dExlbmd0aCkKK3sKKyAgICBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKiBzdHJlYW0gPSBX
RUJLSVRfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVf
U09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTSwgTlVMTCkpOworICAgIHN0cmVhbS0+cHJpdi0+Y29u
dGVudExlbmd0aCA9IGNvbnRlbnRMZW5ndGg7CisgICAgcmV0dXJuIEdfSU5QVVRfU1RSRUFNKHN0
cmVhbSk7Cit9CisKK3ZvaWQgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUFkZERhdGEoV2Vi
S2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSogc3RyZWFtLCBjb25zdCB2b2lkKiBkYXRhLCBzaXpl
X3QgZGF0YUxlbmd0aCkKK3sKKyAgICBpZiAod2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUZp
bmlzaGVkKHN0cmVhbSkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoc3RyZWFtLT5wcml2LT5i
eXRlc0FkZGVkICsgZGF0YUxlbmd0aCA+IHN0cmVhbS0+cHJpdi0+Y29udGVudExlbmd0aCkKKyAg
ICAgICAgZGF0YUxlbmd0aCA9IHN0cmVhbS0+cHJpdi0+Y29udGVudExlbmd0aCAtIHN0cmVhbS0+
cHJpdi0+Ynl0ZXNBZGRlZDsKKyAgICBzdHJlYW0tPnByaXYtPmJ5dGVzQWRkZWQgKz0gZGF0YUxl
bmd0aDsKKyAgICBnX21lbW9yeV9pbnB1dF9zdHJlYW1fYWRkX2RhdGEoR19NRU1PUllfSU5QVVRf
U1RSRUFNKHN0cmVhbSksIGdfbWVtZHVwKGRhdGEsIGRhdGFMZW5ndGgpLCBkYXRhTGVuZ3RoLCBn
X2ZyZWUpOworfQorCitib29sIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1GaW5pc2hlZChX
ZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKiBzdHJlYW0pCit7CisgICAgcmV0dXJuIHN0cmVh
bS0+cHJpdi0+Ynl0ZXNBZGRlZCA9PSBzdHJlYW0tPnByaXYtPmNvbnRlbnRMZW5ndGg7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViS2l0U291cFJlcXVl
c3RJbnB1dFN0cmVhbS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNv
dXBSZXF1ZXN0SW5wdXRTdHJlYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5mNzk1ZTY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9z
b3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uaApAQCAtMCwwICsxLDU1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0U291cFJlcXVl
c3RJbnB1dFN0cmVhbV9oCisjZGVmaW5lIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1faAor
CisjaW5jbHVkZSA8Z2lvL2dpby5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lU
X1RZUEVfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTSAgICAgICAgICAgICh3ZWJraXRfc291cF9y
ZXF1ZXN0X2lucHV0X3N0cmVhbV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFV
RVNUX0lOUFVUX1NUUkVBTShvYmplY3QpICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUKChvYmplY3QpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNLCBXZWJL
aXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVT
VF9JTlBVVF9TVFJFQU0ob2JqZWN0KSAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgo
b2JqZWN0KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTSkpCisjZGVmaW5l
IFdFQktJVF9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0lOUFVU
X1NUUkVBTSwgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUNsYXNzKSkKKyNkZWZpbmUgV0VC
S0lUX0lTX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU1fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSU5QVVRfU1RS
RUFNKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU1fR0VUX0NMQVNT
KG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQ
X1JFUVVFU1RfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtQ2xhc3Mp
KQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSBXZWJLaXRT
b3VwUmVxdWVzdElucHV0U3RyZWFtOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0
SW5wdXRTdHJlYW1DbGFzcyBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtQ2xhc3M7Cit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZhdGUgV2ViS2l0U291
cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RJ
bnB1dFN0cmVhbSB7CisgICAgR01lbW9yeUlucHV0U3RyZWFtIHBhcmVudDsKKworICAgIFdlYktp
dFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1Qcml2YXRlKiBwcml2OworfTsKKworc3RydWN0IF9XZWJL
aXRTb3VwUmVxdWVzdElucHV0U3RyZWFtQ2xhc3MgeworICAgIEdNZW1vcnlJbnB1dFN0cmVhbUNs
YXNzIHBhcmVudDsKK307CisKK0dUeXBlIHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5wdXRfc3RyZWFt
X2dldF90eXBlKCk7CitHSW5wdXRTdHJlYW0qIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1O
ZXcoZ3VpbnQ2NCBjb250ZW50TGVuZ3RoKTsKK3ZvaWQgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0
cmVhbUFkZERhdGEoV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSosIGNvbnN0IHZvaWQqIGRh
dGEsIHNpemVfdCBkYXRhTGVuZ3RoKTsKK2Jvb2wgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVh
bUZpbmlzaGVkKFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0qKTsKKworR19FTkRfREVDTFMK
KworI2VuZGlmIC8vIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1faApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyLmNw
cAppbmRleCA4YzQ4NGM3Li4yYWVjODIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyLmNwcApAQCAtMjMsNiArMjMs
NyBAQAogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJNZXNzYWdlSUQuaCIK
ICNpbmNsdWRlICJXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuaCIKKyNpbmNsdWRlICJXZWJLaXRT
b3VwUmVxdWVzdElucHV0U3RyZWFtLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1
ZGUgIldlYlNvdXBSZXF1ZXN0TWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlIDxXZWJD
b3JlL0Vycm9yc0d0ay5oPgpAQCAtNzUsMTYgKzc2LDI1IEBAIHZvaWQgV2ViU291cFJlcXVlc3RN
YW5hZ2VyOjpyZWdpc3RlclVSSVNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSkKICAgICBzb3Vw
X3Nlc3Npb25fZmVhdHVyZV9hZGRfZmVhdHVyZShTT1VQX1NFU1NJT05fRkVBVFVSRShyZXF1ZXN0
ZXIuZ2V0KCkpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfR0VORVJJQyk7CiB9CiAKLXZvaWQg
V2ViU291cFJlcXVlc3RNYW5hZ2VyOjpoYW5kbGVVUklSZXF1ZXN0KGNvbnN0IENvcmVJUEM6OkRh
dGFSZWZlcmVuY2UmIHJlcXVlc3REYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCB1aW50NjRf
dCByZXF1ZXN0SUQpCit2b2lkIFdlYlNvdXBSZXF1ZXN0TWFuYWdlcjo6aGFuZGxlVVJJUmVxdWVz
dChjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiByZXF1ZXN0RGF0YSwgdWludDY0X3QgY29u
dGVudExlbmd0aCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgdWludDY0X3QgcmVxdWVzdElEKQog
ewogICAgIEdSZWZQdHI8R1NpbXBsZUFzeW5jUmVzdWx0PiByZXN1bHQgPSBhZG9wdEdSZWYobV9y
ZXF1ZXN0TWFwLnRha2UocmVxdWVzdElEKSk7CiAgICAgQVNTRVJUKHJlc3VsdC5nZXQoKSk7CiAK
ICAgICBHUmVmUHRyPFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYz4gcmVxdWVzdCA9IGFkb3B0R1Jl
ZihXRUJLSVRfU09VUF9SRVFVRVNUX0dFTkVSSUMoZ19hc3luY19yZXN1bHRfZ2V0X3NvdXJjZV9v
YmplY3QoR19BU1lOQ19SRVNVTFQocmVzdWx0LmdldCgpKSkpKTsKLSAgICBpZiAocmVxdWVzdERh
dGEuc2l6ZSgpKSB7CisgICAgaWYgKHJlcXVlc3REYXRhLnNpemUoKSAmJiBjb250ZW50TGVuZ3Ro
KSB7CiAgICAgICAgIHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1NldENvbnRlbnRMZW5ndGgocmVx
dWVzdC5nZXQoKSwgcmVxdWVzdERhdGEuc2l6ZSgpKTsKICAgICAgICAgd2Via2l0U291cFJlcXVl
c3RHZW5lcmljU2V0Q29udGVudFR5cGUocmVxdWVzdC5nZXQoKSwgbWltZVR5cGUudXRmOCgpLmRh
dGEoKSk7Ci0gICAgICAgIEdJbnB1dFN0cmVhbSogZGF0YVN0cmVhbSA9IGdfbWVtb3J5X2lucHV0
X3N0cmVhbV9uZXdfZnJvbV9kYXRhKHJlcXVlc3REYXRhLmRhdGEoKSwgcmVxdWVzdERhdGEuc2l6
ZSgpLCAwKTsKKworICAgICAgICBHSW5wdXRTdHJlYW0qIGRhdGFTdHJlYW07CisgICAgICAgIGlm
IChyZXF1ZXN0RGF0YS5zaXplKCkgPT0gY29udGVudExlbmd0aCkgeworICAgICAgICAgICAgLy8g
V2UgZG9uJ3QgZXhwZWN0IG1vcmUgZGF0YSwgc28gd2UgY2FuIGp1c3QgY3JlYXRlIGEgR01lbW9y
eUlucHV0U3RyZWFtIHdpdGggYWxsIHRoZSBkYXRhLgorICAgICAgICAgICAgZGF0YVN0cmVhbSA9
IGdfbWVtb3J5X2lucHV0X3N0cmVhbV9uZXdfZnJvbV9kYXRhKGdfbWVtZHVwKHJlcXVlc3REYXRh
LmRhdGEoKSwgcmVxdWVzdERhdGEuc2l6ZSgpKSwgY29udGVudExlbmd0aCwgZ19mcmVlKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRhdGFTdHJlYW0gPSB3ZWJraXRTb3VwUmVxdWVz
dElucHV0U3RyZWFtTmV3KGNvbnRlbnRMZW5ndGgpOworICAgICAgICAgICAgd2Via2l0U291cFJl
cXVlc3RJbnB1dFN0cmVhbUFkZERhdGEoV0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0o
ZGF0YVN0cmVhbSksIHJlcXVlc3REYXRhLmRhdGEoKSwgcmVxdWVzdERhdGEuc2l6ZSgpKTsKKyAg
ICAgICAgICAgIG1fcmVxdWVzdFN0cmVhbU1hcC5zZXQocmVxdWVzdElELCBkYXRhU3RyZWFtKTsK
KyAgICAgICAgfQogICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19ncG9p
bnRlcihyZXN1bHQuZ2V0KCksIGRhdGFTdHJlYW0sIGdfb2JqZWN0X3VucmVmKTsKICAgICB9IGVs
c2UgewogICAgICAgICBHT3duUHRyPGNoYXI+IHVyaVN0cmluZyhzb3VwX3VyaV90b19zdHJpbmco
c291cF9yZXF1ZXN0X2dldF91cmkoU09VUF9SRVFVRVNUKHJlcXVlc3QuZ2V0KCkpKSwgRkFMU0Up
KTsKQEAgLTk2LDYgKzEwNiwxNSBAQCB2b2lkIFdlYlNvdXBSZXF1ZXN0TWFuYWdlcjo6aGFuZGxl
VVJJUmVxdWVzdChjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiByZXF1ZQogICAgIGdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZShyZXN1bHQuZ2V0KCkpOwogfQogCit2b2lkIFdlYlNv
dXBSZXF1ZXN0TWFuYWdlcjo6YWRkRGF0YVRvVVJJUmVxdWVzdChjb25zdCBDb3JlSVBDOjpEYXRh
UmVmZXJlbmNlJiByZXF1ZXN0RGF0YSwgdWludDY0X3QgcmVxdWVzdElEKQoreworICAgIEdJbnB1
dFN0cmVhbSogZGF0YVN0cmVhbSA9IG1fcmVxdWVzdFN0cmVhbU1hcC5nZXQocmVxdWVzdElEKTsK
KyAgICBBU1NFUlQoZGF0YVN0cmVhbSk7CisgICAgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVh
bUFkZERhdGEoV0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0oZGF0YVN0cmVhbSksIHJl
cXVlc3REYXRhLmRhdGEoKSwgcmVxdWVzdERhdGEuc2l6ZSgpKTsKKyAgICBpZiAod2Via2l0U291
cFJlcXVlc3RJbnB1dFN0cmVhbUZpbmlzaGVkKFdFQktJVF9TT1VQX1JFUVVFU1RfSU5QVVRfU1RS
RUFNKGRhdGFTdHJlYW0pKSkKKyAgICAgICAgbV9yZXF1ZXN0U3RyZWFtTWFwLnJlbW92ZShyZXF1
ZXN0SUQpOworfQorCiB2b2lkIFdlYlNvdXBSZXF1ZXN0TWFuYWdlcjo6c2VuZChHU2ltcGxlQXN5
bmNSZXN1bHQqIHJlc3VsdCkKIHsKICAgICBHUmVmUHRyPFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJp
Yz4gcmVxdWVzdCA9IGFkb3B0R1JlZihXRUJLSVRfU09VUF9SRVFVRVNUX0dFTkVSSUMoZ19hc3lu
Y19yZXN1bHRfZ2V0X3NvdXJjZV9vYmplY3QoR19BU1lOQ19SRVNVTFQocmVzdWx0KSkpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJTb3VwUmVxdWVzdE1h
bmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJTb3VwUmVxdWVzdE1h
bmFnZXIuaAppbmRleCAwNjQzMTYxLi5hNzk2ZjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdlci5oCkBAIC01NCwxMSAr
NTQsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZFJlY2VpdmVXZWJTb3VwUmVxdWVzdE1hbmFn
ZXJNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJ
UEM6OkFyZ3VtZW50RGVjb2RlciopOwogCiAgICAgdm9pZCByZWdpc3RlclVSSVNjaGVtZShjb25z
dCBTdHJpbmcmIHNjaGVtZSk7Ci0gICAgdm9pZCBoYW5kbGVVUklSZXF1ZXN0KGNvbnN0IENvcmVJ
UEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCB1aW50NjRfdCByZXF1
ZXN0SUQpOworICAgIHZvaWQgaGFuZGxlVVJJUmVxdWVzdChjb25zdCBDb3JlSVBDOjpEYXRhUmVm
ZXJlbmNlJiwgdWludDY0X3QgY29udGVudExlbmd0aCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
dWludDY0X3QgcmVxdWVzdElEKTsKKyAgICB2b2lkIGFkZERhdGFUb1VSSVJlcXVlc3QoY29uc3Qg
Q29yZUlQQzo6RGF0YVJlZmVyZW5jZSYsIHVpbnQ2NF90IHJlcXVlc3RJRCk7CiAKICAgICBXZWJQ
cm9jZXNzKiBtX3Byb2Nlc3M7CiAgICAgR1JlZlB0cjxHUHRyQXJyYXk+IG1fc2NoZW1lczsKICAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBHU2ltcGxlQXN5bmNSZXN1bHQqPiBtX3JlcXVlc3RNYXA7Cisg
ICAgSGFzaE1hcDx1aW50NjRfdCwgR0lucHV0U3RyZWFtKj4gbV9yZXF1ZXN0U3RyZWFtTWFwOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyLm1lc3NhZ2VzLmluIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdlci5tZXNzYWdlcy5p
bgppbmRleCAwM2ZjOTY1Li5kYWQzZTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJTb3VwUmVxdWVzdE1hbmFnZXIubWVzc2FnZXMu
aW4KQEAgLTIyLDUgKzIyLDYgQEAKIAogbWVzc2FnZXMgLT4gV2ViU291cFJlcXVlc3RNYW5hZ2Vy
IHsKICAgICBSZWdpc3RlclVSSVNjaGVtZShXVEY6OlN0cmluZyB1cmlTY2hlbWUpOwotICAgIEhh
bmRsZVVSSVJlcXVlc3QoQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSByZXF1ZXN0RGF0YSwgV1RGOjpT
dHJpbmcgbWltZVR5cGUsIHVpbnQ2NF90IHJlcXVlc3RJRCk7CisgICAgSGFuZGxlVVJJUmVxdWVz
dChDb3JlSVBDOjpEYXRhUmVmZXJlbmNlIHJlcXVlc3REYXRhLCB1aW50NjRfdCBjb250ZW50TGVu
Z3RoLCBXVEY6OlN0cmluZyBtaW1lVHlwZSwgdWludDY0X3QgcmVxdWVzdElEKTsKKyAgICBBZGRE
YXRhVG9VUklSZXF1ZXN0KENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgcmVxdWVzdERhdGEsIHVpbnQ2
NF90IHJlcXVlc3RJRCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140735</attachid>
            <date>2012-05-08 10:19:21 -0700</date>
            <delta_ts>2012-05-10 04:12:19 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-uir-request-chunks2.diff</filename>
            <type>text/plain</type>
            <size>23737</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBiMjY0NzA1Li4wYWE0YWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkg
QEAKKzIwMTItMDUtMDggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtTT1VQXSBBbGxvdyBzZW5kaW5nIFVSSSByZXF1ZXN0IGRhdGEgaW4gY2h1
bmtzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTg4
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05V
bWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0Mvc291cC9XS1NvdXBSZXF1ZXN0TWFuYWdlci5jcHA6CisgICAgICAgIChXS1Nv
dXBSZXF1ZXN0TWFuYWdlckhhbmRsZVVSSVJlcXVlc3QpOiBBZGQgY29udGVudExlbmd0aCBwYXJh
bWV0ZXIuCisgICAgICAgIChXS1NvdXBSZXF1ZXN0TWFuYWdlckFkZERhdGFUb1VSSVJlcXVlc3Qp
OiBOZXcgbWV0aG9kIHRvIHNlbmQgbW9yZQorICAgICAgICBkYXRhIGZvciB0aGUgdXJpIHJlcXVl
c3QgdG8gdGhlIHdlYiBwcm9jZXNzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9zb3VwL1dL
U291cFJlcXVlc3RNYW5hZ2VyLmg6CisgICAgICAgICogVUlQcm9jZXNzL3NvdXAvV2ViU291cFJl
cXVlc3RNYW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTb3VwUmVxdWVzdE1h
bmFnZXJQcm94eTo6aGFuZGxlVVJJUmVxdWVzdCk6IEFkZAorICAgICAgICBjb250ZW50TGVuZ3Ro
IHBhcmFtZXRlci4KKyAgICAgICAgKFdlYktpdDo6V2ViU291cFJlcXVlc3RNYW5hZ2VyUHJveHk6
OmFkZERhdGFUb1VSSVJlcXVlc3QpOiBTZW5kCisgICAgICAgIEFkZERhdGFUb1VSSVJlcXVlc3Qg
bWVzc2FnZS4KKyAgICAgICAgKFdlYktpdDo6V2ViU291cFJlcXVlc3RNYW5hZ2VyUHJveHk6OmRp
ZFJlY2VpdmVVUklSZXF1ZXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3Mvc291cC9XZWJTb3VwUmVx
dWVzdE1hbmFnZXJQcm94eS5oOgorICAgICAgICAoV2ViU291cFJlcXVlc3RNYW5hZ2VyUHJveHkp
OgorICAgICAgICAqIFdlYlByb2Nlc3Mvc291cC9XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFt
LmNwcDogQWRkZWQuCisgICAgICAgIChBc3luY1JlYWREYXRhOjpBc3luY1JlYWREYXRhKTogSGVs
cGVyIHN0cnVjdCB0byBzdG9yZSBpbmZvcm1hdGlvbgorICAgICAgICBhYm91dCBwZW5kaW5nIGFz
eW5jIHJlYWQgb3BlcmF0aW9ucy4KKyAgICAgICAgKHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJl
YW1SZWFkQXN5bmNSZXN1bHRDb21wbGV0ZSk6IFJlYWQgdGhlCisgICAgICAgIGRhdGEgZnJvbSB0
aGUgbWVtb3J5IGlucHV0IHN0cmVhbSBhbmQgY29tcGxldGUgdGhlIGFzeW5jIHJlYWQKKyAgICAg
ICAgb3BlcmF0aW9uLgorICAgICAgICAod2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVJlYWRB
c3luYyk6IFJlYWQgdGhlIGRhdGEgZnJvbSB0aGUKKyAgICAgICAgbWVtb3J5IGlucHV0IHN0cmVh
bSBhbmQgY29tcGxldGUgdGhlIGFzeW5jIHJlYWQgb3BlcmF0aW9uIGlmCisgICAgICAgIHRoZXJl
J3MgZGF0YSB0byByZWFkLCBvciBzYXZlIHRoZSBhc3luYyByZXN1bHQgdG8gYmUgY29tcGxldGVk
CisgICAgICAgIHdoZW4gbW9yZSBkYXRhIGlzIGFkZGVkIHRvIHRoZSBzdHJlYW0uCisgICAgICAg
ICh3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVhZEZpbmlzaCk6IEZpbmlzaCBhbiBhc3lu
YyByZWFkCisgICAgICAgIHN0YXJ0ZWQgd2l0aCB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFt
UmVhZEFzeW5jLgorICAgICAgICAod2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUZpbmFsaXpl
KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5wdXRfc3RyZWFtX2luaXQpOgorICAg
ICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9pbnB1dF9zdHJlYW1fY2xhc3NfaW5pdCk6CisgICAg
ICAgICh3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtTmV3KTogQ3JlYXRlIGEgbmV3IGlucHV0
IHN0cmVhbSB3aXRoCisgICAgICAgIGEgZml4ZWQgc2l6ZS4KKyAgICAgICAgKHdlYmtpdFNvdXBS
ZXF1ZXN0SW5wdXRTdHJlYW1BZGREYXRhKTogQWRkIG1vcmUgZGF0YSB0byB0aGUKKyAgICAgICAg
c3RyZWFtIGFuZCBjb21wbGV0ZSBhbnkgcGVuZGluZyBhc3luYyByZWFkLgorICAgICAgICAod2Vi
a2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUZpbmlzaGVkKTogV2hldGhlciBhbGwgZGF0YSBleHBl
Y3RlZAorICAgICAgICBieSB0aGUgc3RyZWFtIGhhcyBiZWVuIGFkZGVkLgorICAgICAgICAqIFdl
YlByb2Nlc3Mvc291cC9XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtLmg6IEFkZGVkLgorICAg
ICAgICAqIFdlYlByb2Nlc3Mvc291cC9XZWJTb3VwUmVxdWVzdE1hbmFnZXIuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTb3VwUmVxdWVzdE1hbmFnZXI6OmhhbmRsZVVSSVJlcXVlc3QpOiBDcmVh
dGUgYQorICAgICAgICBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtIGlzIHdlIGhhdmVuJ3Qg
cmVjZWl2ZWQgYWxsIHRoZQorICAgICAgICByZXF1ZXN0IGRhdGEgaW4gdGhlIEhhbmRsZVVSSVJl
cXVlc3QgbWVzc2FnZS4gT3RoZXJ3aXNlIGp1c3QKKyAgICAgICAgY3JlYXRlIGEgbWVtb3J5IGlu
cHV0IHN0cmVhbSB3aXRoIGFsbCB0aGUgZGF0YS4KKyAgICAgICAgKFdlYktpdDo6V2ViU291cFJl
cXVlc3RNYW5hZ2VyOjphZGREYXRhVG9VUklSZXF1ZXN0KTogQWRkIHRoZSBkYXRhCisgICAgICAg
IHJlY2VpdmVkIHRvIHRoZSBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtIGFzc29jaWF0ZWQg
dG8gdGhlCisgICAgICAgIGdpdmVuIHJlcXVlc3QgaWRlbnRpZmllci4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyLmg6CisgICAgICAgICogV2ViUHJvY2Vz
cy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdlci5tZXNzYWdlcy5pbjogQWRkCisgICAgICAgIGNv
bnRlbnRMZW5ndGggcGFyYW1ldGVyIHRvIEhhbmRsZVVSSVJlcXVlc3QgbWVzc2FnZSBhbmQgYWRk
CisgICAgICAgIEFkZERhdGFUb1VSSVJlcXVlc3QgbWVzc2FnZS4KKwogMjAxMi0wNS0wNyAgSnVs
aWVuIENoYWZmcmFpeCAgPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZWZhY3Rv
ciB3aW5kb3dDbGlwUmVjdEZvckxheWVyIHRvIHJlbW92ZSB0aGUgZXhwbGljaXQgUmVuZGVyTGF5
ZXIgZGVwZW5kZW5jeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCBhNmI0MmE2Li40ZDA4NzlhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtOTQ4LDYgKzk0OCw4IEBAIHdlYmtpdDJfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdl
ci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RH
ZW5lcmljLmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBS
ZXF1ZXN0R2VuZXJpYy5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViS2l0
U291cFJlcXVlc3RJbnB1dFN0cmVhbS5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
c291cC9XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtLmggXAogCVNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkNvbnRleHRNZW51Q2xpZW50R3RrLmNwcCBc
CiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRHJhZ0Ns
aWVudEd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
Z3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL3NvdXAvV0tTb3VwUmVxdWVzdE1hbmFnZXIuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL3NvdXAvV0tTb3VwUmVxdWVzdE1hbmFnZXIuY3BwCmluZGV4
IDE4N2Q3ZmQuLmRjMTEwZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9zb3VwL1dLU291cFJlcXVlc3RNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0Mvc291cC9XS1NvdXBSZXF1ZXN0TWFuYWdlci5jcHAKQEAgLTQ2LDcgKzQ2
LDEyIEBAIHZvaWQgV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWdpc3RlclVSSVNjaGVtZShXS1NvdXBS
ZXF1ZXN0TWFuYWdlclJlZiBzb3VwUmVxdWVzdE1hCiAgICAgdG9JbXBsKHNvdXBSZXF1ZXN0TWFu
YWdlclJlZiktPnJlZ2lzdGVyVVJJU2NoZW1lKHRvSW1wbChzY2hlbWVSZWYpLT5zdHJpbmcoKSk7
CiB9CiAKLXZvaWQgV0tTb3VwUmVxdWVzdE1hbmFnZXJIYW5kbGVVUklSZXF1ZXN0KFdLU291cFJl
cXVlc3RNYW5hZ2VyUmVmIHNvdXBSZXF1ZXN0TWFuYWdlclJlZiwgV0tEYXRhUmVmIGRhdGEsIFdL
U3RyaW5nUmVmIG1pbWVUeXBlUmVmLCB1aW50NjRfdCByZXF1ZXN0SUQpCit2b2lkIFdLU291cFJl
cXVlc3RNYW5hZ2VySGFuZGxlVVJJUmVxdWVzdChXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZiBzb3Vw
UmVxdWVzdE1hbmFnZXJSZWYsIFdLRGF0YVJlZiBkYXRhLCB1aW50NjRfdCBjb250ZW50TGVuZ3Ro
LCBXS1N0cmluZ1JlZiBtaW1lVHlwZVJlZiwgdWludDY0X3QgcmVxdWVzdElEKQogewotICAgIHRv
SW1wbChzb3VwUmVxdWVzdE1hbmFnZXJSZWYpLT5oYW5kbGVVUklSZXF1ZXN0KHRvSW1wbChkYXRh
KSwgdG9JbXBsKG1pbWVUeXBlUmVmKS0+c3RyaW5nKCksIHJlcXVlc3RJRCk7CisgICAgdG9JbXBs
KHNvdXBSZXF1ZXN0TWFuYWdlclJlZiktPmhhbmRsZVVSSVJlcXVlc3QodG9JbXBsKGRhdGEpLCBj
b250ZW50TGVuZ3RoLCB0b0ltcGwobWltZVR5cGVSZWYpLT5zdHJpbmcoKSwgcmVxdWVzdElEKTsK
K30KKwordm9pZCBXS1NvdXBSZXF1ZXN0TWFuYWdlckFkZERhdGFUb1VSSVJlcXVlc3QoV0tTb3Vw
UmVxdWVzdE1hbmFnZXJSZWYgc291cFJlcXVlc3RNYW5hZ2VyUmVmLCBXS0RhdGFSZWYgZGF0YSwg
dWludDY0X3QgcmVxdWVzdElEKQoreworICAgIHRvSW1wbChzb3VwUmVxdWVzdE1hbmFnZXJSZWYp
LT5hZGREYXRhVG9VUklSZXF1ZXN0KHRvSW1wbChkYXRhKSwgcmVxdWVzdElEKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9zb3VwL1dLU291cFJlcXVlc3RN
YW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvc291cC9XS1NvdXBSZXF1
ZXN0TWFuYWdlci5oCmluZGV4IDc0YjRmYTAuLjI5OWY3NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9zb3VwL1dLU291cFJlcXVlc3RNYW5hZ2VyLmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3NvdXAvV0tTb3VwUmVxdWVzdE1hbmFnZXIu
aApAQCAtNDgsNyArNDgsOCBAQCBXS19FWFBPUlQgV0tUeXBlSUQgV0tTb3VwUmVxdWVzdE1hbmFn
ZXJHZXRUeXBlSUQoKTsKIAogV0tfRVhQT1JUIHZvaWQgV0tTb3VwUmVxdWVzdE1hbmFnZXJTZXRD
bGllbnQoV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYsIGNvbnN0IFdLU291cFJlcXVlc3RNYW5hZ2Vy
Q2xpZW50KiBjbGllbnQpOwogV0tfRVhQT1JUIHZvaWQgV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWdp
c3RlclVSSVNjaGVtZShXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZiwgV0tTdHJpbmdSZWYgc2NoZW1l
UmVmKTsKLVdLX0VYUE9SVCB2b2lkIFdLU291cFJlcXVlc3RNYW5hZ2VySGFuZGxlVVJJUmVxdWVz
dChXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZiwgV0tEYXRhUmVmLCBXS1N0cmluZ1JlZiBtaW1lVHlw
ZVJlZiwgdWludDY0X3QgcmVxdWVzdElEKTsKK1dLX0VYUE9SVCB2b2lkIFdLU291cFJlcXVlc3RN
YW5hZ2VySGFuZGxlVVJJUmVxdWVzdChXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZiwgV0tEYXRhUmVm
LCB1aW50NjRfdCBjb250ZW50TGVuZ3RoLCBXS1N0cmluZ1JlZiBtaW1lVHlwZVJlZiwgdWludDY0
X3QgcmVxdWVzdElEKTsKK1dLX0VYUE9SVCB2b2lkIFdLU291cFJlcXVlc3RNYW5hZ2VyQWRkRGF0
YVRvVVJJUmVxdWVzdChXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZiwgV0tEYXRhUmVmLCB1aW50NjRf
dCByZXF1ZXN0SUQpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdlclByb3h5
LmNwcAppbmRleCAyMGM1YzRmLi42OGMzMGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3Mvc291cC9XZWJTb3VwUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCkBA
IC02MCwxNiArNjAsMjIgQEAgdm9pZCBXZWJTb3VwUmVxdWVzdE1hbmFnZXJQcm94eTo6cmVnaXN0
ZXJVUklTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCiAgICAgbV93ZWJDb250ZXh0LT5zZW5k
VG9BbGxQcm9jZXNzZXNSZWxhdW5jaGluZ1RoZW1JZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViU291
cFJlcXVlc3RNYW5hZ2VyOjpSZWdpc3RlclVSSVNjaGVtZShzY2hlbWUpKTsKIH0KIAotdm9pZCBX
ZWJTb3VwUmVxdWVzdE1hbmFnZXJQcm94eTo6aGFuZGxlVVJJUmVxdWVzdChjb25zdCBXZWJEYXRh
KiByZXF1ZXN0RGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgdWludDY0X3QgcmVxdWVzdElE
KQordm9pZCBXZWJTb3VwUmVxdWVzdE1hbmFnZXJQcm94eTo6aGFuZGxlVVJJUmVxdWVzdChjb25z
dCBXZWJEYXRhKiByZXF1ZXN0RGF0YSwgdWludDY0X3QgY29udGVudExlbmd0aCwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgdWludDY0X3QgcmVxdWVzdElEKQogewogICAgIEFTU0VSVChtX3dlYkNv
bnRleHQpOwotICAgIG1fd2ViQ29udGV4dC0+c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpX
ZWJTb3VwUmVxdWVzdE1hbmFnZXI6OkhhbmRsZVVSSVJlcXVlc3QocmVxdWVzdERhdGEtPmRhdGFS
ZWZlcmVuY2UoKSwgbWltZVR5cGUsIHJlcXVlc3RJRCkpOworICAgIG1fd2ViQ29udGV4dC0+c2Vu
ZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJTb3VwUmVxdWVzdE1hbmFnZXI6OkhhbmRsZVVS
SVJlcXVlc3QocmVxdWVzdERhdGEtPmRhdGFSZWZlcmVuY2UoKSwgY29udGVudExlbmd0aCwgbWlt
ZVR5cGUsIHJlcXVlc3RJRCkpOworfQorCit2b2lkIFdlYlNvdXBSZXF1ZXN0TWFuYWdlclByb3h5
OjphZGREYXRhVG9VUklSZXF1ZXN0KGNvbnN0IFdlYkRhdGEqIHJlcXVlc3REYXRhLCB1aW50NjRf
dCByZXF1ZXN0SUQpCit7CisgICAgQVNTRVJUKG1fd2ViQ29udGV4dCk7CisgICAgbV93ZWJDb250
ZXh0LT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlNvdXBSZXF1ZXN0TWFuYWdlcjo6
QWRkRGF0YVRvVVJJUmVxdWVzdChyZXF1ZXN0RGF0YS0+ZGF0YVJlZmVyZW5jZSgpLCByZXF1ZXN0
SUQpKTsKIH0KIAogdm9pZCBXZWJTb3VwUmVxdWVzdE1hbmFnZXJQcm94eTo6ZGlkUmVjZWl2ZVVS
SVJlcXVlc3QoY29uc3QgU3RyaW5nJiB1cmlTdHJpbmcsIHVpbnQ2NF90IHJlcXVlc3RJRCkKIHsK
ICAgICBpZiAoIW1fY2xpZW50LmRpZFJlY2VpdmVVUklSZXF1ZXN0KHRoaXMsIFdlYlVSTDo6Y3Jl
YXRlKHVyaVN0cmluZykuZ2V0KCksIHJlcXVlc3RJRCkpCi0gICAgICAgIGhhbmRsZVVSSVJlcXVl
c3QoV2ViRGF0YTo6Y3JlYXRlKDAsIDApLmdldCgpLCBTdHJpbmcoKSwgcmVxdWVzdElEKTsKKyAg
ICAgICAgaGFuZGxlVVJJUmVxdWVzdChXZWJEYXRhOjpjcmVhdGUoMCwgMCkuZ2V0KCksIDAsIFN0
cmluZygpLCByZXF1ZXN0SUQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdlclBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvc291cC9XZWJTb3VwUmVxdWVzdE1hbmFn
ZXJQcm94eS5oCmluZGV4IDJhYTNlOTkuLmQwMzUzNDJkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvc291cC9XZWJTb3VwUmVxdWVzdE1hbmFnZXJQcm94eS5o
CkBAIC01MCw3ICs1MCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGluaXRpYWxpemVDbGllbnQoY29u
c3QgV0tTb3VwUmVxdWVzdE1hbmFnZXJDbGllbnQqKTsKIAogICAgIHZvaWQgcmVnaXN0ZXJVUklT
Y2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpOwotICAgIHZvaWQgaGFuZGxlVVJJUmVxdWVzdChj
b25zdCBXZWJEYXRhKiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgdWludDY0X3QgcmVxdWVzdElE
KTsKKyAgICB2b2lkIGhhbmRsZVVSSVJlcXVlc3QoY29uc3QgV2ViRGF0YSosIHVpbnQ2NF90IGNv
bnRlbnRMZW5ndGgsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHVpbnQ2NF90IHJlcXVlc3RJRCk7
CisgICAgdm9pZCBhZGREYXRhVG9VUklSZXF1ZXN0KGNvbnN0IFdlYkRhdGEqLCB1aW50NjRfdCBy
ZXF1ZXN0SUQpOwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0
aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1
ZXN0SW5wdXRTdHJlYW0uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktp
dFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjZjMzgzMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbS5jcHAKQEAgLTAsMCArMSwxNTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uaCIKKworI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK3N0
cnVjdCBBc3luY1JlYWREYXRhIHsKKyAgICBBc3luY1JlYWREYXRhKEdTaW1wbGVBc3luY1Jlc3Vs
dCogcmVzdWx0LCB2b2lkKiBidWZmZXIsIGdzaXplIGNvdW50LCBHQ2FuY2VsbGFibGUqIGNhbmNl
bGxhYmxlKQorICAgICAgICA6IHJlc3VsdChyZXN1bHQpCisgICAgICAgICwgYnVmZmVyKGJ1ZmZl
cikKKyAgICAgICAgLCBjb3VudChjb3VudCkKKyAgICAgICAgLCBjYW5jZWxsYWJsZShjYW5jZWxs
YWJsZSkKKyAgICB7CisgICAgfQorCisgICAgR1JlZlB0cjxHU2ltcGxlQXN5bmNSZXN1bHQ+IHJl
c3VsdDsKKyAgICB2b2lkKiBidWZmZXI7CisgICAgc2l6ZV90IGNvdW50OworICAgIEdSZWZQdHI8
R0NhbmNlbGxhYmxlPiBjYW5jZWxsYWJsZTsKK307CisKK3N0cnVjdCBfV2ViS2l0U291cFJlcXVl
c3RJbnB1dFN0cmVhbVByaXZhdGUgeworICAgIHVpbnQ2NF90IGNvbnRlbnRMZW5ndGg7CisgICAg
dWludDY0X3QgYnl0ZXNBZGRlZDsKKyAgICB1aW50NjRfdCBieXRlc1JlYWQ7CisKKyAgICBNdXRl
eCByZWFkTG9jazsKKyAgICBPd25QdHI8QXN5bmNSZWFkRGF0YT4gYXN5bmNSZWFkRGF0YTsKK307
CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSwgd2Via2l0X3Nv
dXBfcmVxdWVzdF9pbnB1dF9zdHJlYW0sIEdfVFlQRV9NRU1PUllfSU5QVVRfU1RSRUFNKQorCitz
dGF0aWMgdm9pZCB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVhZEFzeW5jUmVzdWx0Q29t
cGxldGUoV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSogc3RyZWFtLCBHU2ltcGxlQXN5bmNS
ZXN1bHQqIHJlc3VsdCwgdm9pZCogYnVmZmVyLCBnc2l6ZSBjb3VudCwgR0NhbmNlbGxhYmxlKiBj
YW5jZWxsYWJsZSkKK3sKKyAgICBHRXJyb3IqIGVycm9yID0gMDsKKyAgICBnc3NpemUgYnl0ZXNS
ZWFkID0gR19JTlBVVF9TVFJFQU1fR0VUX0NMQVNTKHN0cmVhbSktPnJlYWRfZm4oR19JTlBVVF9T
VFJFQU0oc3RyZWFtKSwgYnVmZmVyLCBjb3VudCwgY2FuY2VsbGFibGUsICZlcnJvcik7CisgICAg
aWYgKCFlcnJvcikgeworICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19n
c3NpemUocmVzdWx0LCBieXRlc1JlYWQpOworICAgICAgICBzdHJlYW0tPnByaXYtPmJ5dGVzUmVh
ZCArPSBieXRlc1JlYWQ7CisgICAgfSBlbHNlCisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3Vs
dF90YWtlX2Vycm9yKHJlc3VsdCwgZXJyb3IpOworICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9j
b21wbGV0ZV9pbl9pZGxlKHJlc3VsdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFNvdXBSZXF1
ZXN0SW5wdXRTdHJlYW1SZWFkQXN5bmMoR0lucHV0U3RyZWFtKiBpbnB1dFN0cmVhbSwgdm9pZCog
YnVmZmVyLCBnc2l6ZSBjb3VudCwgaW50IHByaW9yaXR5LCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxh
YmxlLCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkKK3sK
KyAgICBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKiBzdHJlYW0gPSBXRUJLSVRfU09VUF9S
RVFVRVNUX0lOUFVUX1NUUkVBTShpbnB1dFN0cmVhbSk7CisgICAgR1JlZlB0cjxHU2ltcGxlQXN5
bmNSZXN1bHQ+IHJlc3VsdCA9IGFkb3B0R1JlZihnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3KEdf
T0JKRUNUKHN0cmVhbSksIGNhbGxiYWNrLCB1c2VyRGF0YSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4od2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVJlYWRBc3luYykpKTsKKworICAgIE11dGV4
TG9ja2VyIGxvY2tlcihzdHJlYW0tPnByaXYtPnJlYWRMb2NrKTsKKworICAgIC8vIFRoZXJlIGlz
IGRhdGEgaW4gdGhlIG1lbW9yeSBzdHJlYW0gdG8gcmVhZC4KKyAgICBpZiAoc3RyZWFtLT5wcml2
LT5ieXRlc1JlYWQgPCBzdHJlYW0tPnByaXYtPmJ5dGVzQWRkZWQpIHsKKyAgICAgICAgd2Via2l0
U291cFJlcXVlc3RJbnB1dFN0cmVhbVJlYWRBc3luY1Jlc3VsdENvbXBsZXRlKHN0cmVhbSwgcmVz
dWx0LmdldCgpLCBidWZmZXIsIGNvdW50LCBjYW5jZWxsYWJsZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBXZSBhcmUgZXhwZWN0aW5nIG1vcmUgZGF0YSB0byBiZSBhZGRlZC4K
KyAgICBpZiAoIXdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1GaW5pc2hlZChzdHJlYW0pKSB7
CisgICAgICAgIHN0cmVhbS0+cHJpdi0+YXN5bmNSZWFkRGF0YSA9IGFkb3B0UHRyKG5ldyBBc3lu
Y1JlYWREYXRhKHJlc3VsdC5nZXQoKSwgYnVmZmVyLCBjb3VudCwgY2FuY2VsbGFibGUpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIGFyZSBkb25lLCBqdXN0IHJldHVybiAw
LgorICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dzc2l6ZShyZXN1bHQuZ2V0
KCksIDApOworICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlKHJlc3Vs
dC5nZXQoKSk7Cit9CisKK3N0YXRpYyBnc3NpemUgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVh
bVJlYWRGaW5pc2goR0lucHV0U3RyZWFtKiBpbnB1dFN0cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1
bHQsIEdFcnJvcioqIGVycm9yKQoreworICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogc2ltcGxlUmVz
dWx0ID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUKHJlc3VsdCk7CisgICAgZ193YXJuX2lmX2ZhaWwo
Z19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9zb3VyY2VfdGFnKHNpbXBsZVJlc3VsdCkgPT0gd2Vi
a2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVJlYWRBc3luYyk7CisKKyAgICByZXR1cm4gZ19zaW1w
bGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3NzaXplKHNpbXBsZVJlc3VsdCk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1GaW5hbGl6ZShHT2JqZWN0KiBv
YmplY3QpCit7CisgICAgV0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0ob2JqZWN0KS0+
cHJpdi0+fldlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1Qcml2YXRlKCk7CisgICAgR19PQkpF
Q1RfQ0xBU1Mod2Via2l0X3NvdXBfcmVxdWVzdF9pbnB1dF9zdHJlYW1fcGFyZW50X2NsYXNzKS0+
ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfcmVxdWVzdF9p
bnB1dF9zdHJlYW1faW5pdChXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKiBzdHJlYW0pCit7
CisgICAgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZhdGUqIHByaXYgPSBHX1RZUEVf
SU5TVEFOQ0VfR0VUX1BSSVZBVEUoc3RyZWFtLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSU5Q
VVRfU1RSRUFNLCBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUHJpdmF0ZSk7CisgICAgc3Ry
ZWFtLT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRT
dHJlYW1Qcml2YXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5w
dXRfc3RyZWFtX2NsYXNzX2luaXQoV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUNsYXNzKiBy
ZXF1ZXN0U3RyZWFtQ2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnT2JqZWN0Q2xhc3MgPSBH
X09CSkVDVF9DTEFTUyhyZXF1ZXN0U3RyZWFtQ2xhc3MpOworICAgIGdPYmplY3RDbGFzcy0+Zmlu
YWxpemUgPSB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtRmluYWxpemU7CisKKyAgICBHSW5w
dXRTdHJlYW1DbGFzcyogaW5wdXRTdHJlYW1DbGFzcyA9IEdfSU5QVVRfU1RSRUFNX0NMQVNTKHJl
cXVlc3RTdHJlYW1DbGFzcyk7CisgICAgaW5wdXRTdHJlYW1DbGFzcy0+cmVhZF9hc3luYyA9IHdl
YmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1SZWFkQXN5bmM7CisgICAgaW5wdXRTdHJlYW1DbGFz
cy0+cmVhZF9maW5pc2ggPSB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVhZEZpbmlzaDsK
KworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShyZXF1ZXN0U3RyZWFtQ2xhc3MsIHNpemVv
ZihXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUHJpdmF0ZSkpOworfQorCitHSW5wdXRTdHJl
YW0qIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1OZXcodWludDY0X3QgY29udGVudExlbmd0
aCkKK3sKKyAgICBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKiBzdHJlYW0gPSBXRUJLSVRf
U09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfU09VUF9S
RVFVRVNUX0lOUFVUX1NUUkVBTSwgTlVMTCkpOworICAgIHN0cmVhbS0+cHJpdi0+Y29udGVudExl
bmd0aCA9IGNvbnRlbnRMZW5ndGg7CisgICAgcmV0dXJuIEdfSU5QVVRfU1RSRUFNKHN0cmVhbSk7
Cit9CisKK3ZvaWQgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUFkZERhdGEoV2ViS2l0U291
cFJlcXVlc3RJbnB1dFN0cmVhbSogc3RyZWFtLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0
YUxlbmd0aCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIoc3RyZWFtLT5wcml2LT5yZWFkTG9j
ayk7CisKKyAgICBpZiAod2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUZpbmlzaGVkKHN0cmVh
bSkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoc3RyZWFtLT5wcml2LT5ieXRlc0FkZGVkICsg
ZGF0YUxlbmd0aCA+IHN0cmVhbS0+cHJpdi0+Y29udGVudExlbmd0aCkKKyAgICAgICAgZGF0YUxl
bmd0aCA9IHN0cmVhbS0+cHJpdi0+Y29udGVudExlbmd0aCAtIHN0cmVhbS0+cHJpdi0+Ynl0ZXNB
ZGRlZDsKKyAgICBzdHJlYW0tPnByaXYtPmJ5dGVzQWRkZWQgKz0gZGF0YUxlbmd0aDsKKyAgICBn
X21lbW9yeV9pbnB1dF9zdHJlYW1fYWRkX2RhdGEoR19NRU1PUllfSU5QVVRfU1RSRUFNKHN0cmVh
bSksIGdfbWVtZHVwKGRhdGEsIGRhdGFMZW5ndGgpLCBkYXRhTGVuZ3RoLCBnX2ZyZWUpOworCisg
ICAgaWYgKHN0cmVhbS0+cHJpdi0+YXN5bmNSZWFkRGF0YSkgeworICAgICAgICBBc3luY1JlYWRE
YXRhKiBkYXRhID0gc3RyZWFtLT5wcml2LT5hc3luY1JlYWREYXRhLmdldCgpOworICAgICAgICB3
ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVhZEFzeW5jUmVzdWx0Q29tcGxldGUoc3RyZWFt
LCBkYXRhLT5yZXN1bHQuZ2V0KCksIGRhdGEtPmJ1ZmZlciwgZGF0YS0+Y291bnQsIGRhdGEtPmNh
bmNlbGxhYmxlLmdldCgpKTsKKyAgICAgICAgc3RyZWFtLT5wcml2LT5hc3luY1JlYWREYXRhLmNs
ZWFyKCk7CisgICAgfQorfQorCitib29sIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1GaW5p
c2hlZChXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKiBzdHJlYW0pCit7CisgICAgcmV0dXJu
IHN0cmVhbS0+cHJpdi0+Ynl0ZXNBZGRlZCA9PSBzdHJlYW0tPnByaXYtPmNvbnRlbnRMZW5ndGg7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViS2l0U291
cFJlcXVlc3RJbnB1dFN0cmVhbS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dl
YktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5mNzk1ZTY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uaApAQCAtMCwwICsxLDU1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0U291
cFJlcXVlc3RJbnB1dFN0cmVhbV9oCisjZGVmaW5lIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJl
YW1faAorCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUg
V0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTSAgICAgICAgICAgICh3ZWJraXRf
c291cF9yZXF1ZXN0X2lucHV0X3N0cmVhbV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfU09V
UF9SRVFVRVNUX0lOUFVUX1NUUkVBTShvYmplY3QpICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUKChvYmplY3QpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFN
LCBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBf
UkVRVUVTVF9JTlBVVF9TVFJFQU0ob2JqZWN0KSAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqZWN0KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTSkpCisj
ZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNX0NMQVNTKGtsYXNzKSAgICAo
R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNU
X0lOUFVUX1NUUkVBTSwgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUNsYXNzKSkKKyNkZWZp
bmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU1fQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSU5Q
VVRfU1RSRUFNKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU1fR0VU
X0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCBXRUJLSVRfVFlQ
RV9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFt
Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSBX
ZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBS
ZXF1ZXN0SW5wdXRTdHJlYW1DbGFzcyBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtQ2xhc3M7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZhdGUgV2Vi
S2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0U291cFJl
cXVlc3RJbnB1dFN0cmVhbSB7CisgICAgR01lbW9yeUlucHV0U3RyZWFtIHBhcmVudDsKKworICAg
IFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1Qcml2YXRlKiBwcml2OworfTsKKworc3RydWN0
IF9XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtQ2xhc3MgeworICAgIEdNZW1vcnlJbnB1dFN0
cmVhbUNsYXNzIHBhcmVudDsKK307CisKK0dUeXBlIHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5wdXRf
c3RyZWFtX2dldF90eXBlKCk7CitHSW5wdXRTdHJlYW0qIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRT
dHJlYW1OZXcoZ3VpbnQ2NCBjb250ZW50TGVuZ3RoKTsKK3ZvaWQgd2Via2l0U291cFJlcXVlc3RJ
bnB1dFN0cmVhbUFkZERhdGEoV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSosIGNvbnN0IHZv
aWQqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKTsKK2Jvb2wgd2Via2l0U291cFJlcXVlc3RJbnB1
dFN0cmVhbUZpbmlzaGVkKFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0qKTsKKworR19FTkRf
REVDTFMKKworI2VuZGlmIC8vIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1faApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5h
Z2VyLmNwcAppbmRleCA4YzQ4NGM3Li4yYWVjODIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyLmNwcApAQCAtMjMs
NiArMjMsNyBAQAogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJNZXNzYWdl
SUQuaCIKICNpbmNsdWRlICJXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuaCIKKyNpbmNsdWRlICJX
ZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgog
I2luY2x1ZGUgIldlYlNvdXBSZXF1ZXN0TWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0Vycm9yc0d0ay5oPgpAQCAtNzUsMTYgKzc2LDI1IEBAIHZvaWQgV2ViU291cFJl
cXVlc3RNYW5hZ2VyOjpyZWdpc3RlclVSSVNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSkKICAg
ICBzb3VwX3Nlc3Npb25fZmVhdHVyZV9hZGRfZmVhdHVyZShTT1VQX1NFU1NJT05fRkVBVFVSRShy
ZXF1ZXN0ZXIuZ2V0KCkpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfR0VORVJJQyk7CiB9CiAK
LXZvaWQgV2ViU291cFJlcXVlc3RNYW5hZ2VyOjpoYW5kbGVVUklSZXF1ZXN0KGNvbnN0IENvcmVJ
UEM6OkRhdGFSZWZlcmVuY2UmIHJlcXVlc3REYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCB1
aW50NjRfdCByZXF1ZXN0SUQpCit2b2lkIFdlYlNvdXBSZXF1ZXN0TWFuYWdlcjo6aGFuZGxlVVJJ
UmVxdWVzdChjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiByZXF1ZXN0RGF0YSwgdWludDY0
X3QgY29udGVudExlbmd0aCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgdWludDY0X3QgcmVxdWVz
dElEKQogewogICAgIEdSZWZQdHI8R1NpbXBsZUFzeW5jUmVzdWx0PiByZXN1bHQgPSBhZG9wdEdS
ZWYobV9yZXF1ZXN0TWFwLnRha2UocmVxdWVzdElEKSk7CiAgICAgQVNTRVJUKHJlc3VsdC5nZXQo
KSk7CiAKICAgICBHUmVmUHRyPFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYz4gcmVxdWVzdCA9IGFk
b3B0R1JlZihXRUJLSVRfU09VUF9SRVFVRVNUX0dFTkVSSUMoZ19hc3luY19yZXN1bHRfZ2V0X3Nv
dXJjZV9vYmplY3QoR19BU1lOQ19SRVNVTFQocmVzdWx0LmdldCgpKSkpKTsKLSAgICBpZiAocmVx
dWVzdERhdGEuc2l6ZSgpKSB7CisgICAgaWYgKHJlcXVlc3REYXRhLnNpemUoKSAmJiBjb250ZW50
TGVuZ3RoKSB7CiAgICAgICAgIHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1NldENvbnRlbnRMZW5n
dGgocmVxdWVzdC5nZXQoKSwgcmVxdWVzdERhdGEuc2l6ZSgpKTsKICAgICAgICAgd2Via2l0U291
cFJlcXVlc3RHZW5lcmljU2V0Q29udGVudFR5cGUocmVxdWVzdC5nZXQoKSwgbWltZVR5cGUudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgIEdJbnB1dFN0cmVhbSogZGF0YVN0cmVhbSA9IGdfbWVtb3J5
X2lucHV0X3N0cmVhbV9uZXdfZnJvbV9kYXRhKHJlcXVlc3REYXRhLmRhdGEoKSwgcmVxdWVzdERh
dGEuc2l6ZSgpLCAwKTsKKworICAgICAgICBHSW5wdXRTdHJlYW0qIGRhdGFTdHJlYW07CisgICAg
ICAgIGlmIChyZXF1ZXN0RGF0YS5zaXplKCkgPT0gY29udGVudExlbmd0aCkgeworICAgICAgICAg
ICAgLy8gV2UgZG9uJ3QgZXhwZWN0IG1vcmUgZGF0YSwgc28gd2UgY2FuIGp1c3QgY3JlYXRlIGEg
R01lbW9yeUlucHV0U3RyZWFtIHdpdGggYWxsIHRoZSBkYXRhLgorICAgICAgICAgICAgZGF0YVN0
cmVhbSA9IGdfbWVtb3J5X2lucHV0X3N0cmVhbV9uZXdfZnJvbV9kYXRhKGdfbWVtZHVwKHJlcXVl
c3REYXRhLmRhdGEoKSwgcmVxdWVzdERhdGEuc2l6ZSgpKSwgY29udGVudExlbmd0aCwgZ19mcmVl
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRhdGFTdHJlYW0gPSB3ZWJraXRTb3Vw
UmVxdWVzdElucHV0U3RyZWFtTmV3KGNvbnRlbnRMZW5ndGgpOworICAgICAgICAgICAgd2Via2l0
U291cFJlcXVlc3RJbnB1dFN0cmVhbUFkZERhdGEoV0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9T
VFJFQU0oZGF0YVN0cmVhbSksIHJlcXVlc3REYXRhLmRhdGEoKSwgcmVxdWVzdERhdGEuc2l6ZSgp
KTsKKyAgICAgICAgICAgIG1fcmVxdWVzdFN0cmVhbU1hcC5zZXQocmVxdWVzdElELCBkYXRhU3Ry
ZWFtKTsKKyAgICAgICAgfQogICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jl
c19ncG9pbnRlcihyZXN1bHQuZ2V0KCksIGRhdGFTdHJlYW0sIGdfb2JqZWN0X3VucmVmKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBHT3duUHRyPGNoYXI+IHVyaVN0cmluZyhzb3VwX3VyaV90b19z
dHJpbmcoc291cF9yZXF1ZXN0X2dldF91cmkoU09VUF9SRVFVRVNUKHJlcXVlc3QuZ2V0KCkpKSwg
RkFMU0UpKTsKQEAgLTk2LDYgKzEwNiwxNSBAQCB2b2lkIFdlYlNvdXBSZXF1ZXN0TWFuYWdlcjo6
aGFuZGxlVVJJUmVxdWVzdChjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiByZXF1ZQogICAg
IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZShyZXN1bHQuZ2V0KCkpOwogfQogCit2b2lk
IFdlYlNvdXBSZXF1ZXN0TWFuYWdlcjo6YWRkRGF0YVRvVVJJUmVxdWVzdChjb25zdCBDb3JlSVBD
OjpEYXRhUmVmZXJlbmNlJiByZXF1ZXN0RGF0YSwgdWludDY0X3QgcmVxdWVzdElEKQoreworICAg
IEdJbnB1dFN0cmVhbSogZGF0YVN0cmVhbSA9IG1fcmVxdWVzdFN0cmVhbU1hcC5nZXQocmVxdWVz
dElEKTsKKyAgICBBU1NFUlQoZGF0YVN0cmVhbSk7CisgICAgd2Via2l0U291cFJlcXVlc3RJbnB1
dFN0cmVhbUFkZERhdGEoV0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0oZGF0YVN0cmVh
bSksIHJlcXVlc3REYXRhLmRhdGEoKSwgcmVxdWVzdERhdGEuc2l6ZSgpKTsKKyAgICBpZiAod2Vi
a2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUZpbmlzaGVkKFdFQktJVF9TT1VQX1JFUVVFU1RfSU5Q
VVRfU1RSRUFNKGRhdGFTdHJlYW0pKSkKKyAgICAgICAgbV9yZXF1ZXN0U3RyZWFtTWFwLnJlbW92
ZShyZXF1ZXN0SUQpOworfQorCiB2b2lkIFdlYlNvdXBSZXF1ZXN0TWFuYWdlcjo6c2VuZChHU2lt
cGxlQXN5bmNSZXN1bHQqIHJlc3VsdCkKIHsKICAgICBHUmVmUHRyPFdlYktpdFNvdXBSZXF1ZXN0
R2VuZXJpYz4gcmVxdWVzdCA9IGFkb3B0R1JlZihXRUJLSVRfU09VUF9SRVFVRVNUX0dFTkVSSUMo
Z19hc3luY19yZXN1bHRfZ2V0X3NvdXJjZV9vYmplY3QoR19BU1lOQ19SRVNVTFQocmVzdWx0KSkp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJTb3VwUmVx
dWVzdE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJTb3VwUmVx
dWVzdE1hbmFnZXIuaAppbmRleCAwNjQzMTYxLi5hNzk2ZjVkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyLmgKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdlci5oCkBAIC01
NCwxMSArNTQsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZFJlY2VpdmVXZWJTb3VwUmVxdWVz
dE1hbmFnZXJNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQs
IENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwogCiAgICAgdm9pZCByZWdpc3RlclVSSVNjaGVt
ZShjb25zdCBTdHJpbmcmIHNjaGVtZSk7Ci0gICAgdm9pZCBoYW5kbGVVUklSZXF1ZXN0KGNvbnN0
IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCB1aW50NjRf
dCByZXF1ZXN0SUQpOworICAgIHZvaWQgaGFuZGxlVVJJUmVxdWVzdChjb25zdCBDb3JlSVBDOjpE
YXRhUmVmZXJlbmNlJiwgdWludDY0X3QgY29udGVudExlbmd0aCwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgdWludDY0X3QgcmVxdWVzdElEKTsKKyAgICB2b2lkIGFkZERhdGFUb1VSSVJlcXVlc3Qo
Y29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYsIHVpbnQ2NF90IHJlcXVlc3RJRCk7CiAKICAg
ICBXZWJQcm9jZXNzKiBtX3Byb2Nlc3M7CiAgICAgR1JlZlB0cjxHUHRyQXJyYXk+IG1fc2NoZW1l
czsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBHU2ltcGxlQXN5bmNSZXN1bHQqPiBtX3JlcXVlc3RN
YXA7CisgICAgSGFzaE1hcDx1aW50NjRfdCwgR0lucHV0U3RyZWFtKj4gbV9yZXF1ZXN0U3RyZWFt
TWFwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyLm1lc3NhZ2VzLmluIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdlci5tZXNz
YWdlcy5pbgppbmRleCAwM2ZjOTY1Li5kYWQzZTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyLm1lc3NhZ2VzLmluCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJTb3VwUmVxdWVzdE1hbmFnZXIubWVz
c2FnZXMuaW4KQEAgLTIyLDUgKzIyLDYgQEAKIAogbWVzc2FnZXMgLT4gV2ViU291cFJlcXVlc3RN
YW5hZ2VyIHsKICAgICBSZWdpc3RlclVSSVNjaGVtZShXVEY6OlN0cmluZyB1cmlTY2hlbWUpOwot
ICAgIEhhbmRsZVVSSVJlcXVlc3QoQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSByZXF1ZXN0RGF0YSwg
V1RGOjpTdHJpbmcgbWltZVR5cGUsIHVpbnQ2NF90IHJlcXVlc3RJRCk7CisgICAgSGFuZGxlVVJJ
UmVxdWVzdChDb3JlSVBDOjpEYXRhUmVmZXJlbmNlIHJlcXVlc3REYXRhLCB1aW50NjRfdCBjb250
ZW50TGVuZ3RoLCBXVEY6OlN0cmluZyBtaW1lVHlwZSwgdWludDY0X3QgcmVxdWVzdElEKTsKKyAg
ICBBZGREYXRhVG9VUklSZXF1ZXN0KENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgcmVxdWVzdERhdGEs
IHVpbnQ2NF90IHJlcXVlc3RJRCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141142</attachid>
            <date>2012-05-10 04:12:19 -0700</date>
            <delta_ts>2012-05-10 11:21:55 -0700</delta_ts>
            <desc>Updated patch according to review comments</desc>
            <filename>wk2-uri-request-chunks3.diff</filename>
            <type>text/plain</type>
            <size>25517</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA0MmFjMDQyLi4zNGUyMzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjkg
QEAKKzIwMTItMDUtMTAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtTT1VQXSBBbGxvdyBzZW5kaW5nIFVSSSByZXF1ZXN0IGRhdGEgaW4gY2h1
bmtzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTg4
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBB
UEkgdG8gaGFuZGxlIGN1c3RvbSBVUkkgc2NoZW1lcyB3aWxsIHJlY2VpdmUgYW4gaW5wdXQgc3Ry
ZWFtCisgICAgICAgIHRvIHJlYWQgZnJvbS4gQ3VycmVudCBjb2RlIHJlcXVpcmVzIHRvIGJ1ZmZl
ciB0aGUgd2hvbGUgc3RyZWFtCisgICAgICAgIGJlZm9yZSBzZW5kaW5nIGl0IHRvIHRoZSBXZWJQ
cm9jZXNzLiBUaGlzIHBhdGNoIGFsbG93cyB0byBzZW5kIHRoZQorICAgICAgICBkYXRhIGluIGNo
dW5rcyB3aGlsZSBpdCdzIHJlYWQgZnJvbSB0aGUgc3RyZWFtLgorCisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbTogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQy9zb3VwL1dLU291cFJlcXVlc3RNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdL
U291cFJlcXVlc3RNYW5hZ2VyUmVnaXN0ZXJVUklTY2hlbWUpOiBVc2UgdG9XVEZTdHJpbmcoKSB0
bworICAgICAgICBjb252ZXJ0IGZyb20gV0tTdHJpbmcgdG8gV1RGU3RyaW5nLgorICAgICAgICAo
V0tTb3VwUmVxdWVzdE1hbmFnZXJEaWRIYW5kbGVVUklSZXF1ZXN0KTogVXNlIGRpZEhhbmRsZVVS
SVJlcXVlc3QKKyAgICAgICAgYXMgaXQgaGFzIGJlZW4gcmVuYW1lZC4KKyAgICAgICAgKFdLU291
cFJlcXVlc3RNYW5hZ2VyRGlkUmVjZWl2ZVVSSVJlcXVlc3REYXRhKTogTmV3IG1ldGhvZCB0byBz
ZW5kCisgICAgICAgIG1vcmUgZGF0YSBmb3IgdGhlIHVyaSByZXF1ZXN0IHRvIHRoZSB3ZWIgcHJv
Y2Vzcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Mvc291cC9XS1NvdXBSZXF1ZXN0TWFuYWdl
ci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdlclByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU291cFJlcXVlc3RNYW5hZ2VyUHJveHk6OmRpZEhh
bmRsZVVSSVJlcXVlc3QpOgorICAgICAgICBIYW5kbGVVUklSZXF1ZXN0IGhhcyBiZWVuIHJlbmFt
ZWQgdG8gRGlkSGFuZGxlVVJJUmVxdWVzdC4KKyAgICAgICAgKFdlYktpdDo6V2ViU291cFJlcXVl
c3RNYW5hZ2VyUHJveHk6OmRpZFJlY2VpdmVVUklSZXF1ZXN0RGF0YSk6CisgICAgICAgIFNlbmQg
RGlkUmVjZWl2ZVVSSVJlcXVlc3REYXRhIG1lc3NhZ2UgdG8gdGhlIHdlYiBwcm9jZXNzLgorICAg
ICAgICAoV2ViS2l0OjpXZWJTb3VwUmVxdWVzdE1hbmFnZXJQcm94eTo6ZGlkUmVjZWl2ZVVSSVJl
cXVlc3QpOiBVc2UKKyAgICAgICAgZGlkSGFuZGxlVVJJUmVxdWVzdCBhcyBpdCBoYXMgYmVlbiBy
ZW5hbWVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdlclBy
b3h5Lmg6CisgICAgICAgIChXZWJTb3VwUmVxdWVzdE1hbmFnZXJQcm94eSk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uY3BwOiBBZGRlZC4K
KyAgICAgICAgKEFzeW5jUmVhZERhdGE6OkFzeW5jUmVhZERhdGEpOiBIZWxwZXIgc3RydWN0IHRv
IHN0b3JlIGluZm9ybWF0aW9uCisgICAgICAgIGFib3V0IHBlbmRpbmcgYXN5bmMgcmVhZCBvcGVy
YXRpb25zLgorICAgICAgICAoX1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1Qcml2YXRlKToK
KyAgICAgICAgKHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1SZWFkQXN5bmNSZXN1bHRDb21w
bGV0ZSk6IFJlYWQgdGhlCisgICAgICAgIGRhdGEgZnJvbSB0aGUgbWVtb3J5IGlucHV0IHN0cmVh
bSBhbmQgY29tcGxldGUgdGhlIGFzeW5jIHJlYWQKKyAgICAgICAgb3BlcmF0aW9uLgorICAgICAg
ICAod2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVJlYWRBc3luYyk6IFJlYWQgdGhlIGRhdGEg
ZnJvbSB0aGUKKyAgICAgICAgbWVtb3J5IGlucHV0IHN0cmVhbSBhbmQgY29tcGxldGUgdGhlIGFz
eW5jIHJlYWQgb3BlcmF0aW9uIGlmCisgICAgICAgIHRoZXJlJ3MgZGF0YSB0byByZWFkLCBvciBz
YXZlIHRoZSBhc3luYyByZXN1bHQgdG8gYmUgY29tcGxldGVkCisgICAgICAgIHdoZW4gbW9yZSBk
YXRhIGlzIGFkZGVkIHRvIHRoZSBzdHJlYW0uCisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVzdElu
cHV0U3RyZWFtUmVhZEZpbmlzaCk6IEZpbmlzaCBhbiBhc3luYyByZWFkCisgICAgICAgIHN0YXJ0
ZWQgd2l0aCB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVhZEFzeW5jLgorICAgICAgICAo
d2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9z
b3VwX3JlcXVlc3RfaW5wdXRfc3RyZWFtX2luaXQpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVx
dWVzdF9pbnB1dF9zdHJlYW1fY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVz
dElucHV0U3RyZWFtTmV3KTogQ3JlYXRlIGEgbmV3IGlucHV0IHN0cmVhbSB3aXRoCisgICAgICAg
IGEgZml4ZWQgc2l6ZSBvciAwIGlmIGNvbnRlbnQgbGVuZ3RoIGlzIG5vdCBrbm93bi4KKyAgICAg
ICAgKHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1BZGREYXRhKTogQWRkIG1vcmUgZGF0YSB0
byB0aGUKKyAgICAgICAgc3RyZWFtIGFuZCBjb21wbGV0ZSBhbnkgcGVuZGluZyBhc3luYyByZWFk
LgorICAgICAgICAod2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUZpbmlzaGVkKTogV2hldGhl
ciBhbGwgZGF0YSBleHBlY3RlZAorICAgICAgICBieSB0aGUgc3RyZWFtIGhhcyBiZWVuIHJlY2Vp
dmVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mvc291cC9XZWJLaXRTb3VwUmVxdWVzdElucHV0U3Ry
ZWFtLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mvc291cC9XZWJTb3VwUmVxdWVzdE1h
bmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTb3VwUmVxdWVzdE1hbmFnZXI6OmRpZEhh
bmRsZVVSSVJlcXVlc3QpOiBDcmVhdGUgYQorICAgICAgICBXZWJLaXRTb3VwUmVxdWVzdElucHV0
U3RyZWFtIGlmIHdlIGhhdmVuJ3QgcmVjZWl2ZWQgYWxsIHRoZQorICAgICAgICByZXF1ZXN0IGRh
dGEgaW4gdGhlIEhhbmRsZVVSSVJlcXVlc3QgbWVzc2FnZS4gT3RoZXJ3aXNlIGp1c3QKKyAgICAg
ICAgY3JlYXRlIGEgbWVtb3J5IGlucHV0IHN0cmVhbSB3aXRoIGFsbCB0aGUgZGF0YS4KKyAgICAg
ICAgKFdlYktpdDo6V2ViU291cFJlcXVlc3RNYW5hZ2VyOjpkaWRSZWNlaXZlVVJJUmVxdWVzdERh
dGEpOiBBZGQgdGhlIGRhdGEKKyAgICAgICAgcmVjZWl2ZWQgdG8gdGhlIFdlYktpdFNvdXBSZXF1
ZXN0SW5wdXRTdHJlYW0gYXNzb2NpYXRlZCB0byB0aGUKKyAgICAgICAgZ2l2ZW4gcmVxdWVzdCBp
ZGVudGlmaWVyLgorICAgICAgICAqIFdlYlByb2Nlc3Mvc291cC9XZWJTb3VwUmVxdWVzdE1hbmFn
ZXIuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyLm1l
c3NhZ2VzLmluOiBBZGQKKyAgICAgICAgY29udGVudExlbmd0aCBwYXJhbWV0ZXIgdG8gRGlkSGFu
ZGxlVVJJUmVxdWVzdCBtZXNzYWdlIGFuZCBhZGQKKyAgICAgICAgRGlkUmVjZWl2ZVVSSVJlcXVl
c3REYXRhIG1lc3NhZ2UuCisKIDIwMTItMDUtMDkgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtp
bUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBNb3ZlIHN1c3BlbmRBbmltYXRpb25zIHRvIHVzZSBJ
bnRlcm5hbHMgaW50ZXJmYWNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZp
bGUubGlzdC5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZDQ1
NzgzZi4uZDg3ZTA5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlz
dC5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC05MzksNiAr
OTM5LDggQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyLmggXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3Mvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RHZW5lcmljLmggXAorCVNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3Mvc291cC9XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtLmNwcCBcCisJ
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJl
YW0uaCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2Vi
Q29udGV4dE1lbnVDbGllbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvc291cC9XS1NvdXBSZXF1
ZXN0TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvc291cC9XS1Nv
dXBSZXF1ZXN0TWFuYWdlci5jcHAKaW5kZXggMTg3ZDdmZC4uMWNiZjc2NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3NvdXAvV0tTb3VwUmVxdWVzdE1hbmFnZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9zb3VwL1dLU291cFJlcXVl
c3RNYW5hZ2VyLmNwcApAQCAtNDMsMTAgKzQzLDE1IEBAIHZvaWQgV0tTb3VwUmVxdWVzdE1hbmFn
ZXJTZXRDbGllbnQoV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYgc291cFJlcXVlc3RNYW5hZ2VyUmVm
CiAKIHZvaWQgV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWdpc3RlclVSSVNjaGVtZShXS1NvdXBSZXF1
ZXN0TWFuYWdlclJlZiBzb3VwUmVxdWVzdE1hbmFnZXJSZWYsIFdLU3RyaW5nUmVmIHNjaGVtZVJl
ZikKIHsKLSAgICB0b0ltcGwoc291cFJlcXVlc3RNYW5hZ2VyUmVmKS0+cmVnaXN0ZXJVUklTY2hl
bWUodG9JbXBsKHNjaGVtZVJlZiktPnN0cmluZygpKTsKKyAgICB0b0ltcGwoc291cFJlcXVlc3RN
YW5hZ2VyUmVmKS0+cmVnaXN0ZXJVUklTY2hlbWUodG9XVEZTdHJpbmcoc2NoZW1lUmVmKSk7CiB9
CiAKLXZvaWQgV0tTb3VwUmVxdWVzdE1hbmFnZXJIYW5kbGVVUklSZXF1ZXN0KFdLU291cFJlcXVl
c3RNYW5hZ2VyUmVmIHNvdXBSZXF1ZXN0TWFuYWdlclJlZiwgV0tEYXRhUmVmIGRhdGEsIFdLU3Ry
aW5nUmVmIG1pbWVUeXBlUmVmLCB1aW50NjRfdCByZXF1ZXN0SUQpCit2b2lkIFdLU291cFJlcXVl
c3RNYW5hZ2VyRGlkSGFuZGxlVVJJUmVxdWVzdChXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZiBzb3Vw
UmVxdWVzdE1hbmFnZXJSZWYsIFdLRGF0YVJlZiBkYXRhLCB1aW50NjRfdCBjb250ZW50TGVuZ3Ro
LCBXS1N0cmluZ1JlZiBtaW1lVHlwZVJlZiwgdWludDY0X3QgcmVxdWVzdElEKQogewotICAgIHRv
SW1wbChzb3VwUmVxdWVzdE1hbmFnZXJSZWYpLT5oYW5kbGVVUklSZXF1ZXN0KHRvSW1wbChkYXRh
KSwgdG9JbXBsKG1pbWVUeXBlUmVmKS0+c3RyaW5nKCksIHJlcXVlc3RJRCk7CisgICAgdG9JbXBs
KHNvdXBSZXF1ZXN0TWFuYWdlclJlZiktPmRpZEhhbmRsZVVSSVJlcXVlc3QodG9JbXBsKGRhdGEp
LCBjb250ZW50TGVuZ3RoLCB0b1dURlN0cmluZyhtaW1lVHlwZVJlZiksIHJlcXVlc3RJRCk7Cit9
CisKK3ZvaWQgV0tTb3VwUmVxdWVzdE1hbmFnZXJEaWRSZWNlaXZlVVJJUmVxdWVzdERhdGEoV0tT
b3VwUmVxdWVzdE1hbmFnZXJSZWYgc291cFJlcXVlc3RNYW5hZ2VyUmVmLCBXS0RhdGFSZWYgZGF0
YSwgdWludDY0X3QgcmVxdWVzdElEKQoreworICAgIHRvSW1wbChzb3VwUmVxdWVzdE1hbmFnZXJS
ZWYpLT5kaWRSZWNlaXZlVVJJUmVxdWVzdERhdGEodG9JbXBsKGRhdGEpLCByZXF1ZXN0SUQpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3NvdXAvV0tTb3Vw
UmVxdWVzdE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9zb3VwL1dL
U291cFJlcXVlc3RNYW5hZ2VyLmgKaW5kZXggNzRiNGZhMC4uMjczZWI3YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3NvdXAvV0tTb3VwUmVxdWVzdE1hbmFnZXIu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvc291cC9XS1NvdXBSZXF1ZXN0
TWFuYWdlci5oCkBAIC00OCw3ICs0OCw4IEBAIFdLX0VYUE9SVCBXS1R5cGVJRCBXS1NvdXBSZXF1
ZXN0TWFuYWdlckdldFR5cGVJRCgpOwogCiBXS19FWFBPUlQgdm9pZCBXS1NvdXBSZXF1ZXN0TWFu
YWdlclNldENsaWVudChXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZiwgY29uc3QgV0tTb3VwUmVxdWVz
dE1hbmFnZXJDbGllbnQqIGNsaWVudCk7CiBXS19FWFBPUlQgdm9pZCBXS1NvdXBSZXF1ZXN0TWFu
YWdlclJlZ2lzdGVyVVJJU2NoZW1lKFdLU291cFJlcXVlc3RNYW5hZ2VyUmVmLCBXS1N0cmluZ1Jl
ZiBzY2hlbWVSZWYpOwotV0tfRVhQT1JUIHZvaWQgV0tTb3VwUmVxdWVzdE1hbmFnZXJIYW5kbGVV
UklSZXF1ZXN0KFdLU291cFJlcXVlc3RNYW5hZ2VyUmVmLCBXS0RhdGFSZWYsIFdLU3RyaW5nUmVm
IG1pbWVUeXBlUmVmLCB1aW50NjRfdCByZXF1ZXN0SUQpOworV0tfRVhQT1JUIHZvaWQgV0tTb3Vw
UmVxdWVzdE1hbmFnZXJEaWRIYW5kbGVVUklSZXF1ZXN0KFdLU291cFJlcXVlc3RNYW5hZ2VyUmVm
LCBXS0RhdGFSZWYsIHVpbnQ2NF90IGNvbnRlbnRMZW5ndGgsIFdLU3RyaW5nUmVmIG1pbWVUeXBl
UmVmLCB1aW50NjRfdCByZXF1ZXN0SUQpOworV0tfRVhQT1JUIHZvaWQgV0tTb3VwUmVxdWVzdE1h
bmFnZXJEaWRSZWNlaXZlVVJJUmVxdWVzdERhdGEoV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYsIFdL
RGF0YVJlZiwgdWludDY0X3QgcmVxdWVzdElEKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvc291cC9XZWJTb3VwUmVxdWVzdE1h
bmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvc291cC9XZWJTb3VwUmVx
dWVzdE1hbmFnZXJQcm94eS5jcHAKaW5kZXggMjBjNWM0Zi4uNTEyMzM0NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFu
YWdlclByb3h5LmNwcApAQCAtNjAsMTYgKzYwLDIyIEBAIHZvaWQgV2ViU291cFJlcXVlc3RNYW5h
Z2VyUHJveHk6OnJlZ2lzdGVyVVJJU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKQogICAgIG1f
d2ViQ29udGV4dC0+c2VuZFRvQWxsUHJvY2Vzc2VzUmVsYXVuY2hpbmdUaGVtSWZOZWNlc3Nhcnko
TWVzc2FnZXM6OldlYlNvdXBSZXF1ZXN0TWFuYWdlcjo6UmVnaXN0ZXJVUklTY2hlbWUoc2NoZW1l
KSk7CiB9CiAKLXZvaWQgV2ViU291cFJlcXVlc3RNYW5hZ2VyUHJveHk6OmhhbmRsZVVSSVJlcXVl
c3QoY29uc3QgV2ViRGF0YSogcmVxdWVzdERhdGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHVp
bnQ2NF90IHJlcXVlc3RJRCkKK3ZvaWQgV2ViU291cFJlcXVlc3RNYW5hZ2VyUHJveHk6OmRpZEhh
bmRsZVVSSVJlcXVlc3QoY29uc3QgV2ViRGF0YSogcmVxdWVzdERhdGEsIHVpbnQ2NF90IGNvbnRl
bnRMZW5ndGgsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHVpbnQ2NF90IHJlcXVlc3RJRCkKIHsK
ICAgICBBU1NFUlQobV93ZWJDb250ZXh0KTsKLSAgICBtX3dlYkNvbnRleHQtPnNlbmRUb0FsbFBy
b2Nlc3NlcyhNZXNzYWdlczo6V2ViU291cFJlcXVlc3RNYW5hZ2VyOjpIYW5kbGVVUklSZXF1ZXN0
KHJlcXVlc3REYXRhLT5kYXRhUmVmZXJlbmNlKCksIG1pbWVUeXBlLCByZXF1ZXN0SUQpKTsKKyAg
ICBtX3dlYkNvbnRleHQtPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViU291cFJlcXVl
c3RNYW5hZ2VyOjpEaWRIYW5kbGVVUklSZXF1ZXN0KHJlcXVlc3REYXRhLT5kYXRhUmVmZXJlbmNl
KCksIGNvbnRlbnRMZW5ndGgsIG1pbWVUeXBlLCByZXF1ZXN0SUQpKTsKK30KKwordm9pZCBXZWJT
b3VwUmVxdWVzdE1hbmFnZXJQcm94eTo6ZGlkUmVjZWl2ZVVSSVJlcXVlc3REYXRhKGNvbnN0IFdl
YkRhdGEqIHJlcXVlc3REYXRhLCB1aW50NjRfdCByZXF1ZXN0SUQpCit7CisgICAgQVNTRVJUKG1f
d2ViQ29udGV4dCk7CisgICAgbV93ZWJDb250ZXh0LT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2Fn
ZXM6OldlYlNvdXBSZXF1ZXN0TWFuYWdlcjo6RGlkUmVjZWl2ZVVSSVJlcXVlc3REYXRhKHJlcXVl
c3REYXRhLT5kYXRhUmVmZXJlbmNlKCksIHJlcXVlc3RJRCkpOwogfQogCiB2b2lkIFdlYlNvdXBS
ZXF1ZXN0TWFuYWdlclByb3h5OjpkaWRSZWNlaXZlVVJJUmVxdWVzdChjb25zdCBTdHJpbmcmIHVy
aVN0cmluZywgdWludDY0X3QgcmVxdWVzdElEKQogewogICAgIGlmICghbV9jbGllbnQuZGlkUmVj
ZWl2ZVVSSVJlcXVlc3QodGhpcywgV2ViVVJMOjpjcmVhdGUodXJpU3RyaW5nKS5nZXQoKSwgcmVx
dWVzdElEKSkKLSAgICAgICAgaGFuZGxlVVJJUmVxdWVzdChXZWJEYXRhOjpjcmVhdGUoMCwgMCku
Z2V0KCksIFN0cmluZygpLCByZXF1ZXN0SUQpOworICAgICAgICBkaWRIYW5kbGVVUklSZXF1ZXN0
KFdlYkRhdGE6OmNyZWF0ZSgwLCAwKS5nZXQoKSwgMCwgU3RyaW5nKCksIHJlcXVlc3RJRCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdlclByb3h5LmgKaW5kZXggMmFhM2U5
OS4uZjQzZjdjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3NvdXAvV2Vi
U291cFJlcXVlc3RNYW5hZ2VyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
c291cC9XZWJTb3VwUmVxdWVzdE1hbmFnZXJQcm94eS5oCkBAIC01MCw3ICs1MCw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGluaXRpYWxpemVDbGllbnQoY29uc3QgV0tTb3VwUmVxdWVzdE1hbmFnZXJD
bGllbnQqKTsKIAogICAgIHZvaWQgcmVnaXN0ZXJVUklTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hl
bWUpOwotICAgIHZvaWQgaGFuZGxlVVJJUmVxdWVzdChjb25zdCBXZWJEYXRhKiwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgdWludDY0X3QgcmVxdWVzdElEKTsKKyAgICB2b2lkIGRpZEhhbmRsZVVS
SVJlcXVlc3QoY29uc3QgV2ViRGF0YSosIHVpbnQ2NF90IGNvbnRlbnRMZW5ndGgsIGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIHVpbnQ2NF90IHJlcXVlc3RJRCk7CisgICAgdm9pZCBkaWRSZWNlaXZl
VVJJUmVxdWVzdERhdGEoY29uc3QgV2ViRGF0YSosIHVpbnQ2NF90IHJlcXVlc3RJRCk7CiAKICAg
ICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpN
ZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RJbnB1
dFN0cmVhbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU1NjYxZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJLaXRT
b3VwUmVxdWVzdElucHV0U3RyZWFtLmNwcApAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbS5oIgorCisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworc3RydWN0IEFzeW5jUmVhZERh
dGEgeworICAgIEFzeW5jUmVhZERhdGEoR1NpbXBsZUFzeW5jUmVzdWx0KiByZXN1bHQsIHZvaWQq
IGJ1ZmZlciwgZ3NpemUgY291bnQsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUpCisgICAgICAg
IDogcmVzdWx0KHJlc3VsdCkKKyAgICAgICAgLCBidWZmZXIoYnVmZmVyKQorICAgICAgICAsIGNv
dW50KGNvdW50KQorICAgICAgICAsIGNhbmNlbGxhYmxlKGNhbmNlbGxhYmxlKQorICAgIHsKKyAg
ICB9CisKKyAgICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gcmVzdWx0OworICAgIHZvaWQq
IGJ1ZmZlcjsKKyAgICBzaXplX3QgY291bnQ7CisgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IGNh
bmNlbGxhYmxlOworfTsKKworc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUHJp
dmF0ZSB7CisgICAgdWludDY0X3QgY29udGVudExlbmd0aDsKKyAgICB1aW50NjRfdCBieXRlc1Jl
Y2VpdmVkOworICAgIHVpbnQ2NF90IGJ5dGVzUmVhZDsKKworICAgIE11dGV4IHJlYWRMb2NrOwor
ICAgIE93blB0cjxBc3luY1JlYWREYXRhPiBhc3luY1JlYWREYXRhOworfTsKKworR19ERUZJTkVf
VFlQRShXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtLCB3ZWJraXRfc291cF9yZXF1ZXN0X2lu
cHV0X3N0cmVhbSwgR19UWVBFX01FTU9SWV9JTlBVVF9TVFJFQU0pCisKK3N0YXRpYyB2b2lkIHdl
YmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1SZWFkQXN5bmNSZXN1bHRDb21wbGV0ZShXZWJLaXRT
b3VwUmVxdWVzdElucHV0U3RyZWFtKiBzdHJlYW0sIEdTaW1wbGVBc3luY1Jlc3VsdCogcmVzdWx0
LCB2b2lkKiBidWZmZXIsIGdzaXplIGNvdW50LCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlKQor
eworICAgIEdFcnJvciogZXJyb3IgPSAwOworICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBHX0lOUFVU
X1NUUkVBTV9HRVRfQ0xBU1Moc3RyZWFtKS0+cmVhZF9mbihHX0lOUFVUX1NUUkVBTShzdHJlYW0p
LCBidWZmZXIsIGNvdW50LCBjYW5jZWxsYWJsZSwgJmVycm9yKTsKKyAgICBpZiAoIWVycm9yKSB7
CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dzc2l6ZShyZXN1bHQs
IGJ5dGVzUmVhZCk7CisgICAgICAgIHN0cmVhbS0+cHJpdi0+Ynl0ZXNSZWFkICs9IGJ5dGVzUmVh
ZDsKKyAgICB9IGVsc2UKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Rha2VfZXJyb3Io
cmVzdWx0LCBlcnJvcik7CisgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lk
bGUocmVzdWx0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVh
bVJlYWRBc3luYyhHSW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtLCB2b2lkKiBidWZmZXIsIGdzaXpl
IGNvdW50LCBpbnQgcHJpb3JpdHksIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1Jl
YWR5Q2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIFdlYktpdFNv
dXBSZXF1ZXN0SW5wdXRTdHJlYW0qIHN0cmVhbSA9IFdFQktJVF9TT1VQX1JFUVVFU1RfSU5QVVRf
U1RSRUFNKGlucHV0U3RyZWFtKTsKKyAgICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gcmVz
dWx0ID0gYWRvcHRHUmVmKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcoR19PQkpFQ1Qoc3RyZWFt
KSwgY2FsbGJhY2ssIHVzZXJEYXRhLCByZWludGVycHJldF9jYXN0PHZvaWQqPih3ZWJraXRTb3Vw
UmVxdWVzdElucHV0U3RyZWFtUmVhZEFzeW5jKSkpOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KHN0cmVhbS0+cHJpdi0+cmVhZExvY2spOworCisgICAgLy8gVGhlcmUgaXMgZGF0YSBpbiB0aGUg
bWVtb3J5IHN0cmVhbSB0byByZWFkLgorICAgIGlmIChzdHJlYW0tPnByaXYtPmJ5dGVzUmVhZCA8
IHN0cmVhbS0+cHJpdi0+Ynl0ZXNSZWNlaXZlZCkgeworICAgICAgICB3ZWJraXRTb3VwUmVxdWVz
dElucHV0U3RyZWFtUmVhZEFzeW5jUmVzdWx0Q29tcGxldGUoc3RyZWFtLCByZXN1bHQuZ2V0KCks
IGJ1ZmZlciwgY291bnQsIGNhbmNlbGxhYmxlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIFdlIGFyZSBleHBlY3RpbmcgbW9yZSBkYXRhIHRvIGJlIGFkZGVkLgorICAgIGlmICgh
d2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUZpbmlzaGVkKHN0cmVhbSkpIHsKKyAgICAgICAg
c3RyZWFtLT5wcml2LT5hc3luY1JlYWREYXRhID0gYWRvcHRQdHIobmV3IEFzeW5jUmVhZERhdGEo
cmVzdWx0LmdldCgpLCBidWZmZXIsIGNvdW50LCBjYW5jZWxsYWJsZSkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gV2UgYXJlIGRvbmUsIGp1c3QgcmV0dXJuIDAuCisgICAgZ19z
aW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3NzaXplKHJlc3VsdC5nZXQoKSwgMCk7Cisg
ICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUocmVzdWx0LmdldCgpKTsK
K30KKworc3RhdGljIGdzc2l6ZSB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVhZEZpbmlz
aChHSW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgR0Vycm9y
KiogZXJyb3IpCit7CisgICAgR1NpbXBsZUFzeW5jUmVzdWx0KiBzaW1wbGVSZXN1bHQgPSBHX1NJ
TVBMRV9BU1lOQ19SRVNVTFQocmVzdWx0KTsKKyAgICBnX3dhcm5faWZfZmFpbChnX3NpbXBsZV9h
c3luY19yZXN1bHRfZ2V0X3NvdXJjZV90YWcoc2ltcGxlUmVzdWx0KSA9PSB3ZWJraXRTb3VwUmVx
dWVzdElucHV0U3RyZWFtUmVhZEFzeW5jKTsKKworICAgIHJldHVybiBnX3NpbXBsZV9hc3luY19y
ZXN1bHRfZ2V0X29wX3Jlc19nc3NpemUoc2ltcGxlUmVzdWx0KTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBXRUJLSVRfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTShvYmplY3QpLT5wcml2LT5+V2Vi
S2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3
ZWJraXRfc291cF9yZXF1ZXN0X2lucHV0X3N0cmVhbV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShv
YmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0X2lucHV0X3N0cmVh
bV9pbml0KFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0qIHN0cmVhbSkKK3sKKyAgICBXZWJL
aXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURShzdHJlYW0sIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0s
IFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1Qcml2YXRlKTsKKyAgICBzdHJlYW0tPnByaXYg
PSBwcml2OworICAgIG5ldyAocHJpdikgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZh
dGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfcmVxdWVzdF9pbnB1dF9zdHJlYW1f
Y2xhc3NfaW5pdChXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtQ2xhc3MqIHJlcXVlc3RTdHJl
YW1DbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdPYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NM
QVNTKHJlcXVlc3RTdHJlYW1DbGFzcyk7CisgICAgZ09iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdl
YmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1GaW5hbGl6ZTsKKworICAgIEdJbnB1dFN0cmVhbUNs
YXNzKiBpbnB1dFN0cmVhbUNsYXNzID0gR19JTlBVVF9TVFJFQU1fQ0xBU1MocmVxdWVzdFN0cmVh
bUNsYXNzKTsKKyAgICBpbnB1dFN0cmVhbUNsYXNzLT5yZWFkX2FzeW5jID0gd2Via2l0U291cFJl
cXVlc3RJbnB1dFN0cmVhbVJlYWRBc3luYzsKKyAgICBpbnB1dFN0cmVhbUNsYXNzLT5yZWFkX2Zp
bmlzaCA9IHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1SZWFkRmluaXNoOworCisgICAgZ190
eXBlX2NsYXNzX2FkZF9wcml2YXRlKHJlcXVlc3RTdHJlYW1DbGFzcywgc2l6ZW9mKFdlYktpdFNv
dXBSZXF1ZXN0SW5wdXRTdHJlYW1Qcml2YXRlKSk7Cit9CisKK0dJbnB1dFN0cmVhbSogd2Via2l0
U291cFJlcXVlc3RJbnB1dFN0cmVhbU5ldyh1aW50NjRfdCBjb250ZW50TGVuZ3RoKQoreworICAg
IFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0qIHN0cmVhbSA9IFdFQktJVF9TT1VQX1JFUVVF
U1RfSU5QVVRfU1RSRUFNKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSU5Q
VVRfU1RSRUFNLCBOVUxMKSk7CisgICAgc3RyZWFtLT5wcml2LT5jb250ZW50TGVuZ3RoID0gY29u
dGVudExlbmd0aDsKKyAgICByZXR1cm4gR19JTlBVVF9TVFJFQU0oc3RyZWFtKTsKK30KKwordm9p
ZCB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtQWRkRGF0YShXZWJLaXRTb3VwUmVxdWVzdElu
cHV0U3RyZWFtKiBzdHJlYW0sIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKQor
eworICAgIGlmICh3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtRmluaXNoZWQoc3RyZWFtKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHN0cmVhbS0+cHJpdi0+
cmVhZExvY2spOworCisgICAgaWYgKGRhdGFMZW5ndGgpIHsKKyAgICAgICAgLy8gVHJ1bmNhdGUg
dGhlIGRhdGFMZW5ndGggdG8gdGhlIGNvbnRlbnRMZW5ndGggaWYgaXQncyBrbm93bi4KKyAgICAg
ICAgaWYgKHN0cmVhbS0+cHJpdi0+Y29udGVudExlbmd0aCAmJiBzdHJlYW0tPnByaXYtPmJ5dGVz
UmVjZWl2ZWQgKyBkYXRhTGVuZ3RoID4gc3RyZWFtLT5wcml2LT5jb250ZW50TGVuZ3RoKQorICAg
ICAgICAgICAgZGF0YUxlbmd0aCA9IHN0cmVhbS0+cHJpdi0+Y29udGVudExlbmd0aCAtIHN0cmVh
bS0+cHJpdi0+Ynl0ZXNSZWNlaXZlZDsKKyAgICAgICAgc3RyZWFtLT5wcml2LT5ieXRlc1JlY2Vp
dmVkICs9IGRhdGFMZW5ndGg7CisgICAgICAgIGdfbWVtb3J5X2lucHV0X3N0cmVhbV9hZGRfZGF0
YShHX01FTU9SWV9JTlBVVF9TVFJFQU0oc3RyZWFtKSwgZ19tZW1kdXAoZGF0YSwgZGF0YUxlbmd0
aCksIGRhdGFMZW5ndGgsIGdfZnJlZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2UgaGF2
ZSByZWNlaXZlZCBhbGwgdGhlIGRhdGEsIHNldCBjb250ZW50TGVuZ3RoIHRvIGJ5dGVzUmVjZWl2
ZWQgdG8gaW5kaWNhdGUgd2UgaGF2ZSBmaW5pc2hlZC4KKyAgICAgICAgc3RyZWFtLT5wcml2LT5j
b250ZW50TGVuZ3RoID0gc3RyZWFtLT5wcml2LT5ieXRlc1JlY2VpdmVkOworICAgICAgICAvLyBJ
ZiB0aGVyZSdzIGEgcGVuZGluZyByZWFkIHRvIGNvbXBsZXRlLCByZWFkX2ZuIHdpbGwgcmV0dXJu
IDAgYmVjYXVzZSB3ZSBoYXZlbid0IGFkZGVkIG1vcmUgZGF0YSB0byB0aGUKKyAgICAgICAgLy8g
bWVtb3J5IGlucHV0IHN0cmVhbS4gQW5kIGlmIHRoZXJlIGlzbid0IGEgcGVuZGluZyByZWFkLCB0
aGUgbmV4dCBjYWxsIHRvIHJlYWRfYXN5bmMgd2lsbCByZXR1cm4gMCB0b28sIGJlY2F1c2UKKyAg
ICAgICAgLy8gd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUZpbmlzaGVkKCkgaXMgbm93IFRS
VUUuCisgICAgfQorCisgICAgaWYgKHN0cmVhbS0+cHJpdi0+YXN5bmNSZWFkRGF0YSkgeworICAg
ICAgICBBc3luY1JlYWREYXRhKiBkYXRhID0gc3RyZWFtLT5wcml2LT5hc3luY1JlYWREYXRhLmdl
dCgpOworICAgICAgICB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVhZEFzeW5jUmVzdWx0
Q29tcGxldGUoc3RyZWFtLCBkYXRhLT5yZXN1bHQuZ2V0KCksIGRhdGEtPmJ1ZmZlciwgZGF0YS0+
Y291bnQsIGRhdGEtPmNhbmNlbGxhYmxlLmdldCgpKTsKKyAgICAgICAgc3RyZWFtLT5wcml2LT5h
c3luY1JlYWREYXRhLmNsZWFyKCk7CisgICAgfQorfQorCitib29sIHdlYmtpdFNvdXBSZXF1ZXN0
SW5wdXRTdHJlYW1GaW5pc2hlZChXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKiBzdHJlYW0p
Cit7CisgICAgcmV0dXJuIHN0cmVhbS0+cHJpdi0+Y29udGVudExlbmd0aCAmJiBzdHJlYW0tPnBy
aXYtPmJ5dGVzUmVjZWl2ZWQgPT0gc3RyZWFtLT5wcml2LT5jb250ZW50TGVuZ3RoOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0
SW5wdXRTdHJlYW0uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJLaXRTb3Vw
UmVxdWVzdElucHV0U3RyZWFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
Zjc5NWU2NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291
cC9XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdFNvdXBSZXF1ZXN0
SW5wdXRTdHJlYW1faAorI2RlZmluZSBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtX2gKKwor
I2luY2x1ZGUgPGdpby9naW8uaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9U
WVBFX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0gICAgICAgICAgICAod2Via2l0X3NvdXBfcmVx
dWVzdF9pbnB1dF9zdHJlYW1fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVT
VF9JTlBVVF9TVFJFQU0ob2JqZWN0KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FT
VCgob2JqZWN0KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTSwgV2ViS2l0
U291cFJlcXVlc3RJbnB1dFN0cmVhbSkpCisjZGVmaW5lIFdFQktJVF9JU19TT1VQX1JFUVVFU1Rf
SU5QVVRfU1RSRUFNKG9iamVjdCkgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9i
amVjdCksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0pKQorI2RlZmluZSBX
RUJLSVRfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9JTlBVVF9T
VFJFQU0sIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1DbGFzcykpCisjZGVmaW5lIFdFQktJ
VF9JU19TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNL
X0NMQVNTX1RZUEUoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVB
TSkpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNX0dFVF9DTEFTUyhv
YmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9S
RVFVRVNUX0lOUFVUX1NUUkVBTSwgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUNsYXNzKSkK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0gV2ViS2l0U291
cFJlcXVlc3RJbnB1dFN0cmVhbTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdElu
cHV0U3RyZWFtQ2xhc3MgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUNsYXNzOwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1Qcml2YXRlIFdlYktpdFNvdXBS
ZXF1ZXN0SW5wdXRTdHJlYW1Qcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0SW5w
dXRTdHJlYW0geworICAgIEdNZW1vcnlJbnB1dFN0cmVhbSBwYXJlbnQ7CisKKyAgICBXZWJLaXRT
b3VwUmVxdWVzdElucHV0U3RyZWFtUHJpdmF0ZSogcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0
U291cFJlcXVlc3RJbnB1dFN0cmVhbUNsYXNzIHsKKyAgICBHTWVtb3J5SW5wdXRTdHJlYW1DbGFz
cyBwYXJlbnQ7Cit9OworCitHVHlwZSB3ZWJraXRfc291cF9yZXF1ZXN0X2lucHV0X3N0cmVhbV9n
ZXRfdHlwZSgpOworR0lucHV0U3RyZWFtKiB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtTmV3
KGd1aW50NjQgY29udGVudExlbmd0aCk7Cit2b2lkIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJl
YW1BZGREYXRhKFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0qLCBjb25zdCB2b2lkKiBkYXRh
LCBzaXplX3QgZGF0YUxlbmd0aCk7Citib29sIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1G
aW5pc2hlZChXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKik7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZiAvLyBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJTb3VwUmVxdWVzdE1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdlci5jcHAK
aW5kZXggOGM0ODRjNy4uMWUxMGJhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdlci5jcHAKQEAgLTIzLDYgKzIzLDcg
QEAKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUlELmgiCiAj
aW5jbHVkZSAiV2ViS2l0U291cFJlcXVlc3RHZW5lcmljLmgiCisjaW5jbHVkZSAiV2ViS2l0U291
cFJlcXVlc3RJbnB1dFN0cmVhbS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRl
ICJXZWJTb3VwUmVxdWVzdE1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9FcnJvcnNHdGsuaD4KQEAgLTc1LDE2ICs3NiwyNSBAQCB2b2lkIFdlYlNvdXBSZXF1ZXN0TWFu
YWdlcjo6cmVnaXN0ZXJVUklTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCiAgICAgc291cF9z
ZXNzaW9uX2ZlYXR1cmVfYWRkX2ZlYXR1cmUoU09VUF9TRVNTSU9OX0ZFQVRVUkUocmVxdWVzdGVy
LmdldCgpKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0dFTkVSSUMpOwogfQogCi12b2lkIFdl
YlNvdXBSZXF1ZXN0TWFuYWdlcjo6aGFuZGxlVVJJUmVxdWVzdChjb25zdCBDb3JlSVBDOjpEYXRh
UmVmZXJlbmNlJiByZXF1ZXN0RGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgdWludDY0X3Qg
cmVxdWVzdElEKQordm9pZCBXZWJTb3VwUmVxdWVzdE1hbmFnZXI6OmRpZEhhbmRsZVVSSVJlcXVl
c3QoY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYgcmVxdWVzdERhdGEsIHVpbnQ2NF90IGNv
bnRlbnRMZW5ndGgsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHVpbnQ2NF90IHJlcXVlc3RJRCkK
IHsKICAgICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gcmVzdWx0ID0gYWRvcHRHUmVmKG1f
cmVxdWVzdE1hcC50YWtlKHJlcXVlc3RJRCkpOwogICAgIEFTU0VSVChyZXN1bHQuZ2V0KCkpOwog
CiAgICAgR1JlZlB0cjxXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWM+IHJlcXVlc3QgPSBhZG9wdEdS
ZWYoV0VCS0lUX1NPVVBfUkVRVUVTVF9HRU5FUklDKGdfYXN5bmNfcmVzdWx0X2dldF9zb3VyY2Vf
b2JqZWN0KEdfQVNZTkNfUkVTVUxUKHJlc3VsdC5nZXQoKSkpKSk7CiAgICAgaWYgKHJlcXVlc3RE
YXRhLnNpemUoKSkgewotICAgICAgICB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNTZXRDb250ZW50
TGVuZ3RoKHJlcXVlc3QuZ2V0KCksIHJlcXVlc3REYXRhLnNpemUoKSk7Ci0gICAgICAgIHdlYmtp
dFNvdXBSZXF1ZXN0R2VuZXJpY1NldENvbnRlbnRUeXBlKHJlcXVlc3QuZ2V0KCksIG1pbWVUeXBl
LnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBHSW5wdXRTdHJlYW0qIGRhdGFTdHJlYW0gPSBnX21l
bW9yeV9pbnB1dF9zdHJlYW1fbmV3X2Zyb21fZGF0YShyZXF1ZXN0RGF0YS5kYXRhKCksIHJlcXVl
c3REYXRhLnNpemUoKSwgMCk7CisgICAgICAgIHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1NldENv
bnRlbnRMZW5ndGgocmVxdWVzdC5nZXQoKSwgY29udGVudExlbmd0aCA/IGNvbnRlbnRMZW5ndGgg
OiAtMSk7CisgICAgICAgIHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1NldENvbnRlbnRUeXBlKHJl
cXVlc3QuZ2V0KCksICFtaW1lVHlwZS5pc0VtcHR5KCkgPyBtaW1lVHlwZS51dGY4KCkuZGF0YSgp
IDogMCk7CisKKyAgICAgICAgR0lucHV0U3RyZWFtKiBkYXRhU3RyZWFtOworICAgICAgICBpZiAo
cmVxdWVzdERhdGEuc2l6ZSgpID09IGNvbnRlbnRMZW5ndGgpIHsKKyAgICAgICAgICAgIC8vIFdl
IGRvbid0IGV4cGVjdCBtb3JlIGRhdGEsIHNvIHdlIGNhbiBqdXN0IGNyZWF0ZSBhIEdNZW1vcnlJ
bnB1dFN0cmVhbSB3aXRoIGFsbCB0aGUgZGF0YS4KKyAgICAgICAgICAgIGRhdGFTdHJlYW0gPSBn
X21lbW9yeV9pbnB1dF9zdHJlYW1fbmV3X2Zyb21fZGF0YShnX21lbWR1cChyZXF1ZXN0RGF0YS5k
YXRhKCksIHJlcXVlc3REYXRhLnNpemUoKSksIGNvbnRlbnRMZW5ndGgsIGdfZnJlZSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkYXRhU3RyZWFtID0gd2Via2l0U291cFJlcXVlc3RJ
bnB1dFN0cmVhbU5ldyhjb250ZW50TGVuZ3RoKTsKKyAgICAgICAgICAgIHdlYmtpdFNvdXBSZXF1
ZXN0SW5wdXRTdHJlYW1BZGREYXRhKFdFQktJVF9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNKGRh
dGFTdHJlYW0pLCByZXF1ZXN0RGF0YS5kYXRhKCksIHJlcXVlc3REYXRhLnNpemUoKSk7CisgICAg
ICAgICAgICBtX3JlcXVlc3RTdHJlYW1NYXAuc2V0KHJlcXVlc3RJRCwgZGF0YVN0cmVhbSk7Cisg
ICAgICAgIH0KICAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3BvaW50
ZXIocmVzdWx0LmdldCgpLCBkYXRhU3RyZWFtLCBnX29iamVjdF91bnJlZik7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgR093blB0cjxjaGFyPiB1cmlTdHJpbmcoc291cF91cmlfdG9fc3RyaW5nKHNv
dXBfcmVxdWVzdF9nZXRfdXJpKFNPVVBfUkVRVUVTVChyZXF1ZXN0LmdldCgpKSksIEZBTFNFKSk7
CkBAIC05Niw2ICsxMDYsMTUgQEAgdm9pZCBXZWJTb3VwUmVxdWVzdE1hbmFnZXI6OmhhbmRsZVVS
SVJlcXVlc3QoY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYgcmVxdWUKICAgICBnX3NpbXBs
ZV9hc3luY19yZXN1bHRfY29tcGxldGUocmVzdWx0LmdldCgpKTsKIH0KIAordm9pZCBXZWJTb3Vw
UmVxdWVzdE1hbmFnZXI6OmRpZFJlY2VpdmVVUklSZXF1ZXN0RGF0YShjb25zdCBDb3JlSVBDOjpE
YXRhUmVmZXJlbmNlJiByZXF1ZXN0RGF0YSwgdWludDY0X3QgcmVxdWVzdElEKQoreworICAgIEdJ
bnB1dFN0cmVhbSogZGF0YVN0cmVhbSA9IG1fcmVxdWVzdFN0cmVhbU1hcC5nZXQocmVxdWVzdElE
KTsKKyAgICBBU1NFUlQoZGF0YVN0cmVhbSk7CisgICAgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0
cmVhbUFkZERhdGEoV0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0oZGF0YVN0cmVhbSks
IHJlcXVlc3REYXRhLmRhdGEoKSwgcmVxdWVzdERhdGEuc2l6ZSgpKTsKKyAgICBpZiAod2Via2l0
U291cFJlcXVlc3RJbnB1dFN0cmVhbUZpbmlzaGVkKFdFQktJVF9TT1VQX1JFUVVFU1RfSU5QVVRf
U1RSRUFNKGRhdGFTdHJlYW0pKSkKKyAgICAgICAgbV9yZXF1ZXN0U3RyZWFtTWFwLnJlbW92ZShy
ZXF1ZXN0SUQpOworfQorCiB2b2lkIFdlYlNvdXBSZXF1ZXN0TWFuYWdlcjo6c2VuZChHU2ltcGxl
QXN5bmNSZXN1bHQqIHJlc3VsdCkKIHsKICAgICBHUmVmUHRyPFdlYktpdFNvdXBSZXF1ZXN0R2Vu
ZXJpYz4gcmVxdWVzdCA9IGFkb3B0R1JlZihXRUJLSVRfU09VUF9SRVFVRVNUX0dFTkVSSUMoZ19h
c3luY19yZXN1bHRfZ2V0X3NvdXJjZV9vYmplY3QoR19BU1lOQ19SRVNVTFQocmVzdWx0KSkpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJTb3VwUmVxdWVz
dE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJTb3VwUmVxdWVz
dE1hbmFnZXIuaAppbmRleCAwNjQzMTYxLi4yZmE3YTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyLmgKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdlci5oCkBAIC01NCwx
MSArNTQsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZFJlY2VpdmVXZWJTb3VwUmVxdWVzdE1h
bmFnZXJNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENv
cmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwogCiAgICAgdm9pZCByZWdpc3RlclVSSVNjaGVtZShj
b25zdCBTdHJpbmcmIHNjaGVtZSk7Ci0gICAgdm9pZCBoYW5kbGVVUklSZXF1ZXN0KGNvbnN0IENv
cmVJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCB1aW50NjRfdCBy
ZXF1ZXN0SUQpOworICAgIHZvaWQgZGlkSGFuZGxlVVJJUmVxdWVzdChjb25zdCBDb3JlSVBDOjpE
YXRhUmVmZXJlbmNlJiwgdWludDY0X3QgY29udGVudExlbmd0aCwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgdWludDY0X3QgcmVxdWVzdElEKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVVUklSZXF1ZXN0
RGF0YShjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiwgdWludDY0X3QgcmVxdWVzdElEKTsK
IAogICAgIFdlYlByb2Nlc3MqIG1fcHJvY2VzczsKICAgICBHUmVmUHRyPEdQdHJBcnJheT4gbV9z
Y2hlbWVzOwogICAgIEhhc2hNYXA8dWludDY0X3QsIEdTaW1wbGVBc3luY1Jlc3VsdCo+IG1fcmVx
dWVzdE1hcDsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBHSW5wdXRTdHJlYW0qPiBtX3JlcXVlc3RT
dHJlYW1NYXA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJTb3VwUmVxdWVzdE1hbmFnZXIubWVzc2FnZXMu
aW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2Vy
Lm1lc3NhZ2VzLmluCmluZGV4IDAzZmM5NjUuLjBhMzg2NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJTb3VwUmVxdWVzdE1hbmFnZXIubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdl
ci5tZXNzYWdlcy5pbgpAQCAtMjIsNSArMjIsNiBAQAogCiBtZXNzYWdlcyAtPiBXZWJTb3VwUmVx
dWVzdE1hbmFnZXIgewogICAgIFJlZ2lzdGVyVVJJU2NoZW1lKFdURjo6U3RyaW5nIHVyaVNjaGVt
ZSk7Ci0gICAgSGFuZGxlVVJJUmVxdWVzdChDb3JlSVBDOjpEYXRhUmVmZXJlbmNlIHJlcXVlc3RE
YXRhLCBXVEY6OlN0cmluZyBtaW1lVHlwZSwgdWludDY0X3QgcmVxdWVzdElEKTsKKyAgICBEaWRI
YW5kbGVVUklSZXF1ZXN0KENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgcmVxdWVzdERhdGEsIHVpbnQ2
NF90IGNvbnRlbnRMZW5ndGgsIFdURjo6U3RyaW5nIG1pbWVUeXBlLCB1aW50NjRfdCByZXF1ZXN0
SUQpOworICAgIERpZFJlY2VpdmVVUklSZXF1ZXN0RGF0YShDb3JlSVBDOjpEYXRhUmVmZXJlbmNl
IHJlcXVlc3REYXRhLCB1aW50NjRfdCByZXF1ZXN0SUQpOwogfQo=
</data>
<flag name="review"
          id="147220"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>