<?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>28839</bug_id>
          
          <creation_ts>2009-08-30 23:14:24 -0700</creation_ts>
          <short_desc>Need to update v8 bindings to support passing multiple ports to postMessage()</short_desc>
          <delta_ts>2009-09-03 11:37:55 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>28460</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrew Wilson">atwilson</reporter>
          <assigned_to name="Andrew Wilson">atwilson</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>143575</commentid>
    <comment_count>0</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-08-30 23:14:24 -0700</bug_when>
    <thetext>The HTML5 spec not supports passing multiple ports to postMessage() - we need to update the v8 bindings accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143578</commentid>
    <comment_count>1</comment_count>
      <attachid>38801</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-08-30 23:21:30 -0700</bug_when>
    <thetext>Created attachment 38801
proposed patch

v8 bindings portion of bug 28460</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143596</commentid>
    <comment_count>2</comment_count>
      <attachid>38801</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-31 02:59:56 -0700</bug_when>
    <thetext>Comment on attachment 38801
proposed patch

Would be even better to list what tests now pass after this change:
 10         No new tests (tests for JSC bindings are sufficient)

I looked briefly, but it seems you&apos;ll need a v8 expert here.  Geez v8 bindings are so wordy/ugly!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143682</commentid>
    <comment_count>3</comment_count>
      <attachid>38801</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-08-31 11:13:34 -0700</bug_when>
    <thetext>Comment on attachment 38801
proposed patch

These are all style nits:

&gt; +        if (!fillWebCoreMessagePortArray(args[1], portArray))
&gt; +            return v8::Undefined();

if (!getMessagePortArray(.. is the common convention in WebKit. No need to use WebCore in prefix. It&apos;s in String conv methods only because there are two ambiguous string types.

&gt; +        if (!fillWebCoreMessagePortArray(args[1], portArray))

ditto.

&gt; +    if (ec)
&gt; +        V8Proxy::setDOMException(ec);

return throwError(ec);

&gt; +
&gt; +CALLBACK_FUNC_DECL(MessageEventInitMessageEvent)
&gt; +{
&gt; +    INC_STATS(&quot;DOM.MessageEvent.initMessageEvent&quot;);
&gt; +    MessageEvent* event = V8DOMWrapper::convertToNativeObject&lt;MessageEvent&gt;(V8ClassIndex::MESSAGEEVENT, args.Holder());
&gt; +    String typeArg = v8ValueToWebCoreString(args[0]);
&gt; +    bool canBubbleArg = args[1]-&gt;BooleanValue();
&gt; +    bool cancelableArg = args[2]-&gt;BooleanValue();
&gt; +    String dataArg = v8ValueToWebCoreString(args[3]);
&gt; +    String originArg = v8ValueToWebCoreString(args[4]);
&gt; +    String lastEventIdArg = v8ValueToWebCoreString(args[5]);
&gt; +    DOMWindow* sourceArg = V8DOMWindow::HasInstance(args[6]) ? V8DOMWrapper::convertToNativeObject&lt;DOMWindow&gt;(V8ClassIndex::DOMWINDOW, v8::Handle&lt;v8::Object&gt;::Cast(args[6])) : 0;

I am surprised there&apos;s no arg checking here. Is this correct?

&gt; +    if (ec)
&gt; +        V8Proxy::setDOMException(ec);

return throwError(ec);

&gt; +bool fillWebCoreMessagePortArray(v8::Local&lt;v8::Value&gt; value, MessagePortArray&amp; portArray)

bool getMessagePortArray(v8::Local&lt;v8::Value&gt; value, MessagePortArray&amp; portArray)

&gt; +    if (!value-&gt;IsObject()) {
&gt; +        V8Proxy::throwError(V8Proxy::TypeError, &quot;MessagePortArray argument must be an object&quot;);
&gt; +        return false;

throwError(&quot;MessagePortArray argument must be an object&quot;);
return false;

&gt; +        v8::Local&lt;v8::Value&gt; sequenceLength = ports-&gt;Get(v8::String::New(&quot;length&quot;));
&gt; +        if (!sequenceLength-&gt;IsNumber()) {
&gt; +            V8Proxy::throwError(V8Proxy::TypeError, &quot;MessagePortArray argument has no length attribute&quot;);
&gt; +            return false;

throwError(&quot;MessagePortArray argument has no length attribute&quot;);
return false;

&gt; +            V8Proxy::setDOMException(INVALID_STATE_ERR);
&gt; +            return false;


throwError(ec);
return false;

&gt; +            V8Proxy::throwError(V8Proxy::TypeError, &quot;MessagePortArray argument must contain only MessagePorts&quot;);
&gt; +            return false;

ditto.

&gt; +    if (ec)
&gt; +        V8Proxy::setDOMException(ec);

return throwError(ec);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143685</commentid>
    <comment_count>4</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-08-31 11:22:08 -0700</bug_when>
    <thetext>(In reply to comment #3)

&gt; 
&gt; &gt; +
&gt; &gt; +CALLBACK_FUNC_DECL(MessageEventInitMessageEvent)
&gt; &gt; +{
&gt; &gt; +    INC_STATS(&quot;DOM.MessageEvent.initMessageEvent&quot;);
&gt; &gt; +    MessageEvent* event = V8DOMWrapper::convertToNativeObject&lt;MessageEvent&gt;(V8ClassIndex::MESSAGEEVENT, args.Holder());
&gt; &gt; +    String typeArg = v8ValueToWebCoreString(args[0]);
&gt; &gt; +    bool canBubbleArg = args[1]-&gt;BooleanValue();
&gt; &gt; +    bool cancelableArg = args[2]-&gt;BooleanValue();
&gt; &gt; +    String dataArg = v8ValueToWebCoreString(args[3]);
&gt; &gt; +    String originArg = v8ValueToWebCoreString(args[4]);
&gt; &gt; +    String lastEventIdArg = v8ValueToWebCoreString(args[5]);
&gt; &gt; +    DOMWindow* sourceArg = V8DOMWindow::HasInstance(args[6]) ? V8DOMWrapper::convertToNativeObject&lt;DOMWindow&gt;(V8ClassIndex::DOMWINDOW, v8::Handle&lt;v8::Object&gt;::Cast(args[6])) : 0;
&gt; 
&gt; I am surprised there&apos;s no arg checking here. Is this correct?

This is basically the verbatim code from the generated bindings (before I made this a custom binding).

I guess it&apos;s because pretty much anything (including an undefined argument) can be cast to a string/boolean, so the only arg checking that needs to be done is for the DOMWindow argument.

I&apos;ll make those other changes as suggested - thanks for the quick turnaround!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144061</commentid>
    <comment_count>5</comment_count>
      <attachid>38901</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-09-01 17:09:05 -0700</bug_when>
    <thetext>Created attachment 38901
patch addressing review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144331</commentid>
    <comment_count>6</comment_count>
      <attachid>38901</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-09-02 16:25:52 -0700</bug_when>
    <thetext>Comment on attachment 38901
patch addressing review comments

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144553</commentid>
    <comment_count>7</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-09-03 11:37:55 -0700</bug_when>
    <thetext>Committed as r48026</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38801</attachid>
            <date>2009-08-30 23:21:30 -0700</date>
            <delta_ts>2009-09-01 17:09:05 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>y</filename>
            <type>text/plain</type>
            <size>17668</size>
            <attacher name="Andrew Wilson">atwilson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDIwNmEwZS4uODVkYzRjNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAwOS0wOC0zMCAgRHJldyBXaWxzb24g
IDxhdHdpbHNvbkBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE5lZWQgdG8gdXBkYXRlIHY4IGJpbmRpbmdzIHRvIHN1cHBvcnQgcGFz
c2luZyBtdWx0aXBsZSBwb3J0cyB0byBwb3N0TWVzc2FnZSgpCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODgzOQorCisgICAgICAgIEFkZGVkIHN1cHBv
cnQgZm9yIHBhc3NpbmcgTWVzc2FnZVBvcnRBcnJheSB0byB2OCBiaW5kaW5ncy4KKworICAgICAg
ICBObyBuZXcgdGVzdHMgKHRlc3RzIGZvciBKU0MgYmluZGluZ3MgYXJlIHN1ZmZpY2llbnQpCisK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgIEFkZGVkIFY4TWVzc2FnZUV2ZW50Q3Vz
dG9tLmNwcCBhbmQgVjhNZXNzYWdlUG9ydEN1c3RvbS5oCisgICAgICAgICogYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oOgorICAgICAgICBBZGRlZCBjdXN0b20gcG9zdE1lc3Nh
Z2UoKSBoYW5kbGVycyBmb3IgdmFyaW91cyBjbGFzc2VzLgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5k
b3dQb3N0TWVzc2FnZSk6CisgICAgICAgIEFkZGVkIGN1c3RvbSBoYW5kbGVyIHRoYXQgc3VwcG9y
dHMgTWVzc2FnZVBvcnRBcnJheS4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhEZWRp
Y2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlZGljYXRl
ZFdvcmtlckNvbnRleHRQb3N0TWVzc2FnZSk6CisgICAgICAgIEFkZGVkIGN1c3RvbSBoYW5kbGVy
IHRoYXQgc3VwcG9ydHMgTWVzc2FnZVBvcnRBcnJheS4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhNZXNzYWdlRXZlbnRDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lc3NhZ2VFdmVudFBvcnRzKToKKyAgICAgICAgQWRkZWQgZ2V0dGVyIGZvciBwb3J0cyBhdHRy
aWJ1dGUuCisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlRXZlbnRJbml0TWVzc2FnZUV2ZW50KToK
KyAgICAgICAgQWRkZWQgY3VzdG9tIGhhbmRsZXIgdGhhdCBzdXBwb3J0cyBNZXNzYWdlUG9ydEFy
cmF5LgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0UG9zdE1lc3NhZ2UpOgorICAgICAgICBB
ZGRlZCBjdXN0b20gaGFuZGxlciB0aGF0IHN1cHBvcnRzIE1lc3NhZ2VQb3J0QXJyYXkuCisgICAg
ICAgIChXZWJDb3JlOjpmaWxsV2ViQ29yZU1lc3NhZ2VQb3J0QXJyYXkpOgorICAgICAgICBBZGRl
ZCBoZWxwZXIgZnVuY3Rpb24gdGhhdCBzdXBwb3J0cyBjb252ZXJ0aW5nIGZyb20gYSBzZXF1ZW5j
ZS1saWtlIG9iamVjdCB0byBhIE1lc3NhZ2VQb3J0QXJyYXkuCisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4TWVzc2FnZVBvcnRDdXN0b20uaDogQWRkZWQuCisgICAgICAgIEFkZGVkIGRl
Y2xhcmF0aW9uIGZvciBmaWxsV2ViQ29yZU1lc3NhZ2VQb3J0QXJyYXkoKS4KKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyUG9zdE1lc3NhZ2UpOgorICAgICAgICBBZGRlZCBjdXN0b20gaGFuZGxlciB0aGF0IHN1
cHBvcnRzIE1lc3NhZ2VQb3J0QXJyYXkuCisKIDIwMDktMDgtMjkgIERyZXcgV2lsc29uICA8YXR3
aWxzb25AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggZDJjNTE4YS4uMzc5MWRiNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTY1OSw3ICs2NTksOSBAQAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3Iu
Y3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlRXZlbnRDdXN0
b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlUG9ydEN1
c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0
Q3VzdG9tLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hbWVkTm9kZU1h
cEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hbWVkTm9k
ZXNDb2xsZWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TmFt
ZWROb2Rlc0NvbGxlY3Rpb24uaCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEN1c3RvbUJpbmRpbmcuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3Vz
dG9tQmluZGluZy5oCmluZGV4IDJjNTQyODYuLjA3N2UzMGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oCkBAIC00NjAsMTEgKzQ2MCwxNSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIo
Q2FudmFzUGl4ZWxBcnJheSk7CiAgICAgICAgIERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9TRVRU
RVIoQ2FudmFzUGl4ZWxBcnJheSk7CiAKKyAgICAgICAgREVDTEFSRV9QUk9QRVJUWV9BQ0NFU1NP
Ul9HRVRURVIoTWVzc2FnZUV2ZW50UG9ydHMpOworICAgICAgICBERUNMQVJFX0NBTExCQUNLKE1l
c3NhZ2VFdmVudEluaXRNZXNzYWdlRXZlbnQpOworCiAgICAgICAgIERFQ0xBUkVfUFJPUEVSVFlf
QUNDRVNTT1IoTWVzc2FnZVBvcnRPbm1lc3NhZ2UpOwogICAgICAgICBERUNMQVJFX1BST1BFUlRZ
X0FDQ0VTU09SKE1lc3NhZ2VQb3J0T25jbG9zZSk7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0so
TWVzc2FnZVBvcnRTdGFydENvbnZlcnNhdGlvbik7CiAgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0so
TWVzc2FnZVBvcnRBZGRFdmVudExpc3RlbmVyKTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhN
ZXNzYWdlUG9ydFBvc3RNZXNzYWdlKTsKICAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhNZXNzYWdl
UG9ydFJlbW92ZUV2ZW50TGlzdGVuZXIpOworICAgICAgICBERUNMQVJFX0NBTExCQUNLKE1lc3Nh
Z2VQb3J0U3RhcnRDb252ZXJzYXRpb24pOwogCiAgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soRGF0
YWJhc2VDaGFuZ2VWZXJzaW9uKTsKICAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhEYXRhYmFzZVRy
YW5zYWN0aW9uKTsKQEAgLTUwNCw4ICs1MDgsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBERUNMQVJFX0NBTExCQUNLKEFic3RyYWN0V29ya2VyUmVtb3ZlRXZlbnRMaXN0ZW5lcik7
CiAKICAgICAgICAgREVDTEFSRV9QUk9QRVJUWV9BQ0NFU1NPUihEZWRpY2F0ZWRXb3JrZXJDb250
ZXh0T25tZXNzYWdlKTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhEZWRpY2F0ZWRXb3JrZXJD
b250ZXh0UG9zdE1lc3NhZ2UpOwogCiAgICAgICAgIERFQ0xBUkVfUFJPUEVSVFlfQUNDRVNTT1Io
V29ya2VyT25tZXNzYWdlKTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhXb3JrZXJQb3N0TWVz
c2FnZSk7CiAgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soV29ya2VyQ29uc3RydWN0b3IpOwogCiAg
ICAgICAgIERFQ0xBUkVfUFJPUEVSVFlfQUNDRVNTT1JfR0VUVEVSKFdvcmtlckNvbnRleHRTZWxm
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3Vz
dG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNw
cAppbmRleCBjMTRiZGViLi4wNGU5ZmU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAi
VjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhD
dXN0b21FdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiVjhNZXNzYWdlUG9ydEN1c3RvbS5oIgog
I2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgogCkBAIC0yOTUs
NyArMjk2LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd1Bvc3RNZXNzYWdlKQogCiAg
ICAgdjg6OlRyeUNhdGNoIHRyeUNhdGNoOwogICAgIFN0cmluZyBtZXNzYWdlID0gdG9XZWJDb3Jl
U3RyaW5nKGFyZ3NbMF0pOwotICAgIE1lc3NhZ2VQb3J0KiBwb3J0ID0gMDsKKyAgICBNZXNzYWdl
UG9ydEFycmF5IHBvcnRBcnJheTsKICAgICBTdHJpbmcgdGFyZ2V0T3JpZ2luOwogCiAgICAgLy8g
VGhpcyBmdW5jdGlvbiBoYXMgdmFyaWFibGUgYXJndW1lbnRzIGFuZCBjYW4gZWl0aGVyIGJlOgpA
QCAtMzAzLDggKzMwNCw4IEBAIENBTExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dQb3N0TWVzc2Fn
ZSkKICAgICAvLyBvcgogICAgIC8vICAgcG9zdE1lc3NhZ2UobWVzc2FnZSwgdGFyZ2V0T3JpZ2lu
KTsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDIpIHsKLSAgICAgICAgaWYgKFY4RE9NV3JhcHBl
cjo6aXNXcmFwcGVyT2ZUeXBlKGFyZ3NbMV0sIFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQpKQot
ICAgICAgICAgICAgcG9ydCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE1l
c3NhZ2VQb3J0PihWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+OjpDYXN0KGFyZ3NbMV0pKTsKKyAgICAgICAgaWYgKCFmaWxsV2ViQ29yZU1lc3NhZ2VQb3J0
QXJyYXkoYXJnc1sxXSwgcG9ydEFycmF5KSkKKyAgICAgICAgICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7CiAgICAgICAgIHRhcmdldE9yaWdpbiA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JV
bmRlZmluZWRDaGVjayhhcmdzWzJdKTsKICAgICB9IGVsc2UgewogICAgICAgICB0YXJnZXRPcmln
aW4gPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJnc1sxXSk7CkBA
IC0zMTQsNyArMzE1LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd1Bvc3RNZXNzYWdl
KQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgd2luZG93LT5wb3N0TWVzc2FnZShtZXNzYWdlLCBwb3J0LCB0YXJnZXRPcmln
aW4sIHNvdXJjZSwgZWMpOworICAgIHdpbmRvdy0+cG9zdE1lc3NhZ2UobWVzc2FnZSwgJnBvcnRB
cnJheSwgdGFyZ2V0T3JpZ2luLCBzb3VyY2UsIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIFY4
UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4RGVkaWNhdGVkV29ya2VyQ29udGV4dEN1c3RvbS5jcHAgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERlZGljYXRlZFdvcmtlckNvbnRleHRDdXN0b20uY3BwCmlu
ZGV4IGYxM2U0NWUuLjViMTQ3OGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RGVkaWNhdGVkV29ya2VyQ29udGV4dEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcApAQCAtMzUs
NiArMzUsOCBAQAogI2luY2x1ZGUgIldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIgogCiAj
aW5jbHVkZSAiRGVkaWNhdGVkV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUgIlY4QmluZGluZy5o
IgorI2luY2x1ZGUgIlY4TWVzc2FnZVBvcnRDdXN0b20uaCIKICNpbmNsdWRlICJWOFByb3h5Lmgi
CiAjaW5jbHVkZSAiVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5oIgogCkBAIC03OSw2ICs4
MSwyNCBAQCBBQ0NFU1NPUl9TRVRURVIoRGVkaWNhdGVkV29ya2VyQ29udGV4dE9ubWVzc2FnZSkK
ICAgICB9CiB9CiAKK0NBTExCQUNLX0ZVTkNfREVDTChEZWRpY2F0ZWRXb3JrZXJDb250ZXh0UG9z
dE1lc3NhZ2UpCit7CisgICAgSU5DX1NUQVRTKEwiRE9NLkRlZGljYXRlZFdvcmtlckNvbnRleHQu
cG9zdE1lc3NhZ2UiKTsKKyAgICBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RGVkaWNhdGVkV29ya2VyQ29u
dGV4dD4oVjhDbGFzc0luZGV4OjpERURJQ0FURURXT1JLRVJDT05URVhULCBhcmdzLkhvbGRlcigp
KTsKKyAgICBTdHJpbmcgbWVzc2FnZSA9IHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7
CisgICAgTWVzc2FnZVBvcnRBcnJheSBwb3J0QXJyYXk7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkg
PiAxKSB7CisgICAgICAgIGlmICghZmlsbFdlYkNvcmVNZXNzYWdlUG9ydEFycmF5KGFyZ3NbMV0s
IHBvcnRBcnJheSkpCisgICAgICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIH0K
KyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICB3b3JrZXJDb250ZXh0LT5wb3N0TWVzc2Fn
ZShtZXNzYWdlLCAmcG9ydEFycmF5LCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICBWOFByb3h5
OjpzZXRET01FeGNlcHRpb24oZWMpOworCisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VFdmVudEN1c3Rv
bS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VFdmVudEN1c3RvbS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZiOGNlYgotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUV2ZW50Q3VzdG9t
LmNwcApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lc3Nh
Z2VFdmVudC5oIgorCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDdXN0b21C
aW5kaW5nLmgiCisjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKKyNpbmNsdWRlICJWOE1lc3NhZ2VQ
b3J0Q3VzdG9tLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0FDQ0VTU09SX0dFVFRFUihNZXNzYWdlRXZlbnRQb3J0cykKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5NZXNzYWdlRXZlbnQucG9ydHMiKTsKKyAgICBNZXNzYWdlRXZlbnQqIGV2ZW50ID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TWVzc2FnZUV2ZW50PihWOENsYXNzSW5k
ZXg6Ok1FU1NBR0VFVkVOVCwgaW5mby5Ib2xkZXIoKSk7CisKKyAgICBNZXNzYWdlUG9ydEFycmF5
KiBwb3J0cyA9IGV2ZW50LT5wb3J0cygpOworICAgIGlmICghcG9ydHMgfHwgcG9ydHMtPmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisKKyAgICB2ODo6TG9jYWw8djg6OkFy
cmF5PiBwb3J0QXJyYXkgPSB2ODo6QXJyYXk6Ok5ldyhwb3J0cy0+c2l6ZSgpKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHBvcnRzLT5zaXplKCk7ICsraSkKKyAgICAgICAgcG9ydEFycmF5
LT5TZXQodjg6OkludGVnZXI6Ok5ldyhpKSwgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVj
dChWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCAoKnBvcnRzKVtpXS5nZXQoKSkpOworCisgICAg
cmV0dXJuIHBvcnRBcnJheTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKE1lc3NhZ2VFdmVudElu
aXRNZXNzYWdlRXZlbnQpCit7CisgICAgSU5DX1NUQVRTKCJET00uTWVzc2FnZUV2ZW50LmluaXRN
ZXNzYWdlRXZlbnQiKTsKKyAgICBNZXNzYWdlRXZlbnQqIGV2ZW50ID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8TWVzc2FnZUV2ZW50PihWOENsYXNzSW5kZXg6Ok1FU1NBR0VF
VkVOVCwgYXJncy5Ib2xkZXIoKSk7CisgICAgU3RyaW5nIHR5cGVBcmcgPSB2OFZhbHVlVG9XZWJD
b3JlU3RyaW5nKGFyZ3NbMF0pOworICAgIGJvb2wgY2FuQnViYmxlQXJnID0gYXJnc1sxXS0+Qm9v
bGVhblZhbHVlKCk7CisgICAgYm9vbCBjYW5jZWxhYmxlQXJnID0gYXJnc1syXS0+Qm9vbGVhblZh
bHVlKCk7CisgICAgU3RyaW5nIGRhdGFBcmcgPSB2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKGFyZ3Nb
M10pOworICAgIFN0cmluZyBvcmlnaW5BcmcgPSB2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKGFyZ3Nb
NF0pOworICAgIFN0cmluZyBsYXN0RXZlbnRJZEFyZyA9IHY4VmFsdWVUb1dlYkNvcmVTdHJpbmco
YXJnc1s1XSk7CisgICAgRE9NV2luZG93KiBzb3VyY2VBcmcgPSBWOERPTVdpbmRvdzo6SGFzSW5z
dGFuY2UoYXJnc1s2XSkgPyBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01X
aW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpD
YXN0KGFyZ3NbNl0pKSA6IDA7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0QXJyYXk+IHBvcnRBcnJh
eTsKKworICAgIGlmICghaXNVbmRlZmluZWRPck51bGwoYXJnc1s3XSkpIHsKKyAgICAgICAgcG9y
dEFycmF5ID0gbmV3IE1lc3NhZ2VQb3J0QXJyYXkoKTsKKyAgICAgICAgaWYgKCFmaWxsV2ViQ29y
ZU1lc3NhZ2VQb3J0QXJyYXkoYXJnc1s3XSwgKnBvcnRBcnJheSkpCisgICAgICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIH0KKyAgICBldmVudC0+aW5pdE1lc3NhZ2VFdmVudCh0
eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIGRhdGFBcmcsIG9yaWdpbkFyZywg
bGFzdEV2ZW50SWRBcmcsIHNvdXJjZUFyZywgcG9ydEFycmF5LnJlbGVhc2UoKSk7CisgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9tLmNw
cCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZVBvcnRDdXN0b20uY3BwCmlu
ZGV4IDk1ZDI0OGMuLjlmYjhiNTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4TWVzc2FnZVBvcnRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4TWVzc2FnZVBvcnRDdXN0b20uY3BwCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSAi
TWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3Rv
bUJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOE1lc3NhZ2VQb3J0Q3VzdG9tLmgiCisjaW5jbHVkZSAi
VjhNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIlY4T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgogI2lu
Y2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgpAQCAtMTE4LDQgKzEy
MCw2NyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woTWVzc2FnZVBvcnRSZW1vdmVFdmVudExpc3RlbmVy
KQogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKK0NBTExCQUNLX0ZVTkNfREVDTChN
ZXNzYWdlUG9ydFBvc3RNZXNzYWdlKQoreworICAgIElOQ19TVEFUUygiRE9NLk1lc3NhZ2VQb3J0
LnBvc3RNZXNzYWdlIik7CisgICAgTWVzc2FnZVBvcnQqIG1lc3NhZ2VQb3J0ID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TWVzc2FnZVBvcnQ+KFY4Q2xhc3NJbmRleDo6TUVT
U0FHRVBPUlQsIGFyZ3MuSG9sZGVyKCkpOworICAgIFN0cmluZyBtZXNzYWdlID0gdG9XZWJDb3Jl
U3RyaW5nKGFyZ3NbMF0pOworICAgIE1lc3NhZ2VQb3J0QXJyYXkgcG9ydEFycmF5OworICAgIGlm
IChhcmdzLkxlbmd0aCgpID4gMSkgeworICAgICAgICBpZiAoIWZpbGxXZWJDb3JlTWVzc2FnZVBv
cnRBcnJheShhcmdzWzFdLCBwb3J0QXJyYXkpKQorICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKKyAgICB9CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgbWVzc2FnZVBv
cnQtPnBvc3RNZXNzYWdlKG1lc3NhZ2UsICZwb3J0QXJyYXksIGVjKTsKKyAgICBpZiAoZWMpCisg
ICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CisKKyAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOworfQorCitib29sIGZpbGxXZWJDb3JlTWVzc2FnZVBvcnRBcnJheSh2ODo6TG9j
YWw8djg6OlZhbHVlPiB2YWx1ZSwgTWVzc2FnZVBvcnRBcnJheSYgcG9ydEFycmF5KQoreworICAg
IGlmIChpc1VuZGVmaW5lZE9yTnVsbCh2YWx1ZSkpIHsKKyAgICAgICAgcG9ydEFycmF5LnJlc2l6
ZSgwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCF2YWx1ZS0+SXNP
YmplY3QoKSkgeworICAgICAgICBWOFByb3h5Ojp0aHJvd0Vycm9yKFY4UHJveHk6OlR5cGVFcnJv
ciwgIk1lc3NhZ2VQb3J0QXJyYXkgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QiKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICB1aW50MzJfdCBsZW5ndGggPSAwOworICAgIHY4
OjpMb2NhbDx2ODo6T2JqZWN0PiBwb3J0cyA9IHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6Q2FzdCh2
YWx1ZSk7CisKKyAgICBpZiAodmFsdWUtPklzQXJyYXkoKSkgeworICAgICAgICB2ODo6TG9jYWw8
djg6OkFycmF5PiBhcnJheSA9IHY4OjpMb2NhbDx2ODo6QXJyYXk+OjpDYXN0KHZhbHVlKTsKKyAg
ICAgICAgbGVuZ3RoID0gYXJyYXktPkxlbmd0aCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IFNlcXVlbmNlLXR5cGUgb2JqZWN0IC0gZ2V0IHRoZSBsZW5ndGggYXR0cmlidXRlCisgICAgICAg
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHNlcXVlbmNlTGVuZ3RoID0gcG9ydHMtPkdldCh2ODo6U3Ry
aW5nOjpOZXcoImxlbmd0aCIpKTsKKyAgICAgICAgaWYgKCFzZXF1ZW5jZUxlbmd0aC0+SXNOdW1i
ZXIoKSkgeworICAgICAgICAgICAgVjhQcm94eTo6dGhyb3dFcnJvcihWOFByb3h5OjpUeXBlRXJy
b3IsICJNZXNzYWdlUG9ydEFycmF5IGFyZ3VtZW50IGhhcyBubyBsZW5ndGggYXR0cmlidXRlIik7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgbGVuZ3RoID0g
c2VxdWVuY2VMZW5ndGgtPlVpbnQzMlZhbHVlKCk7CisgICAgfQorICAgIHBvcnRBcnJheS5yZXNp
emUobGVuZ3RoKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcG9ydCA9IHBvcnRzLT5HZXQodjg6
OkludGVnZXI6Ok5ldyhpKSk7CisgICAgICAgIC8vIFZhbGlkYXRpb24gb2Ygbm9uLW51bGwgb2Jq
ZWN0cywgcGVyIEhUTUw1IHNwZWMgOC4zLjMuCisgICAgICAgIGlmIChpc1VuZGVmaW5lZE9yTnVs
bChwb3J0KSkgeworICAgICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKElOVkFMSURf
U1RBVEVfRVJSKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBWYWxpZGF0aW9uIG9mIE9iamVjdHMgaW1wbGVtZW50aW5nIGFuIGludGVyZmFjZSwgcGVy
IFdlYklETCBzcGVjIDQuMS4xNS4KKyAgICAgICAgaWYgKCFWOE1lc3NhZ2VQb3J0OjpIYXNJbnN0
YW5jZShwb3J0KSkgeworICAgICAgICAgICAgVjhQcm94eTo6dGhyb3dFcnJvcihWOFByb3h5OjpU
eXBlRXJyb3IsICJNZXNzYWdlUG9ydEFycmF5IGFyZ3VtZW50IG11c3QgY29udGFpbiBvbmx5IE1l
c3NhZ2VQb3J0cyIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIHBvcnRBcnJheVtpXSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE1l
c3NhZ2VQb3J0PihWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+OjpDYXN0KHBvcnQpKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
TWVzc2FnZVBvcnRDdXN0b20uaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2Fn
ZVBvcnRDdXN0b20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjU4ODI0
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdl
UG9ydEN1c3RvbS5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgs
IDIwMDkgR29vZ2xlIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBWOE1lc3NhZ2VQ
b3J0Q3VzdG9tX2gKKyNkZWZpbmUgVjhNZXNzYWdlUG9ydEN1c3RvbV9oCisKKyNpbmNsdWRlIDx2
OC5oPgorCisjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHdoaWNoIHB1bGxzIHRoZSB2YWx1ZXMgb3V0IG9mIGEg
SlMgc2VxdWVuY2UgYW5kIGludG8gYSBNZXNzYWdlUG9ydEFycmF5LgorICAgIC8vIEFsc28gdmFs
aWRhdGVzIHRoZSBlbGVtZW50cyBwZXIgc2VjdGlvbnMgNC4xLjEzIGFuZCA0LjEuMTUgb2YgdGhl
IFdlYklETCBzcGVjIGFuZCBzZWN0aW9uIDguMy4zIG9mIHRoZSBIVE1MNSBzcGVjIGFuZCBnZW5l
cmF0ZXMgZXhjZXB0aW9ucyBhcyBhcHByb3ByaWF0ZS4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIGFycmF5IHdhcyBmaWxsZWQsIG9yIGZhbHNlIGlmIHRoZSBwYXNzZWQgdmFsdWUgd2FzIG5v
dCBvZiBhbiBhcHByb3ByaWF0ZSB0eXBlLgorICAgIGJvb2wgZmlsbFdlYkNvcmVNZXNzYWdlUG9y
dEFycmF5KHY4OjpMb2NhbDx2ODo6VmFsdWU+LCBNZXNzYWdlUG9ydEFycmF5Jik7CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFY4TWVzc2FnZVBvcnRDdXN0b21faApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3BwCmluZGV4IDMyNDUw
YjguLjJiNGM2MjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29y
a2VyQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckN1
c3RvbS5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1ZGUgIlY4
TWVzc2FnZVBvcnRDdXN0b20uaCIKICNpbmNsdWRlICJWOE9iamVjdEV2ZW50TGlzdGVuZXIuaCIK
ICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKQEAgLTE0OSw2
ICsxNTAsMjQgQEAgQUNDRVNTT1JfU0VUVEVSKFdvcmtlck9ubWVzc2FnZSkKICAgICB9CiB9CiAK
K0NBTExCQUNLX0ZVTkNfREVDTChXb3JrZXJQb3N0TWVzc2FnZSkKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5Xb3JrZXIucG9zdE1lc3NhZ2UiKTsKKyAgICBXb3JrZXIqIHdvcmtlciA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlcj4oVjhDbGFzc0luZGV4OjpXT1JLRVIs
IGFyZ3MuSG9sZGVyKCkpOworICAgIFN0cmluZyBtZXNzYWdlID0gdG9XZWJDb3JlU3RyaW5nKGFy
Z3NbMF0pOworICAgIE1lc3NhZ2VQb3J0QXJyYXkgcG9ydEFycmF5OworICAgIGlmIChhcmdzLkxl
bmd0aCgpID4gMSkgeworICAgICAgICBpZiAoIWZpbGxXZWJDb3JlTWVzc2FnZVBvcnRBcnJheShh
cmdzWzFdLCBwb3J0QXJyYXkpKQorICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
KyAgICB9CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgd29ya2VyLT5wb3N0TWVzc2Fn
ZShtZXNzYWdlLCAmcG9ydEFycmF5LCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICBWOFByb3h5
OjpzZXRET01FeGNlcHRpb24oZWMpOworCisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCg==
</data>
<flag name="review"
          id="19786"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38901</attachid>
            <date>2009-09-01 17:09:05 -0700</date>
            <delta_ts>2009-09-02 16:25:51 -0700</delta_ts>
            <desc>patch addressing review comments</desc>
            <filename>y</filename>
            <type>text/plain</type>
            <size>17572</size>
            <attacher name="Andrew Wilson">atwilson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODRkNWViZC4uN2Q4MTZjMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAwOS0wOC0zMCAgRHJldyBXaWxzb24g
IDxhdHdpbHNvbkBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE5lZWQgdG8gdXBkYXRlIHY4IGJpbmRpbmdzIHRvIHN1cHBvcnQgcGFz
c2luZyBtdWx0aXBsZSBwb3J0cyB0byBwb3N0TWVzc2FnZSgpCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODgzOQorCisgICAgICAgIEFkZGVkIHN1cHBv
cnQgZm9yIHBhc3NpbmcgTWVzc2FnZVBvcnRBcnJheSB0byB2OCBiaW5kaW5ncy4KKworICAgICAg
ICBOZXcgdGVzdHMgdGhhdCBub3cgcGFzcyB3aXRoIFY4OgorICAgICAgICAgICAgICAgZmFzdC9l
dmVudHMvbWVzc2FnZS1wb3J0LW11bHRpLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qvd29ya2Vy
cy93b3JrZXItY29udGV4dC1tdWx0aS1wb3J0Lmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qvd29y
a2Vycy93b3JrZXItbXVsdGktcG9ydC5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgIEFkZGVkIFY4TWVzc2FnZUV2ZW50Q3VzdG9tLmNwcCBhbmQgVjhNZXNzYWdlUG9ydEN1
c3RvbS5oCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oOgor
ICAgICAgICBBZGRlZCBjdXN0b20gcG9zdE1lc3NhZ2UoKSBoYW5kbGVycyBmb3IgdmFyaW91cyBj
bGFzc2VzLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3dQb3N0TWVzc2FnZSk6CisgICAgICAgIEFk
ZGVkIGN1c3RvbSBoYW5kbGVyIHRoYXQgc3VwcG9ydHMgTWVzc2FnZVBvcnRBcnJheS4KKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRlZGljYXRlZFdvcmtlckNvbnRleHRQb3N0TWVzc2FnZSk6
CisgICAgICAgIEFkZGVkIGN1c3RvbSBoYW5kbGVyIHRoYXQgc3VwcG9ydHMgTWVzc2FnZVBvcnRB
cnJheS4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlRXZlbnRDdXN0b20u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VFdmVudFBvcnRzKToKKyAgICAg
ICAgQWRkZWQgZ2V0dGVyIGZvciBwb3J0cyBhdHRyaWJ1dGUuCisgICAgICAgIChXZWJDb3JlOjpN
ZXNzYWdlRXZlbnRJbml0TWVzc2FnZUV2ZW50KToKKyAgICAgICAgQWRkZWQgY3VzdG9tIGhhbmRs
ZXIgdGhhdCBzdXBwb3J0cyBNZXNzYWdlUG9ydEFycmF5LgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3Nh
Z2VQb3J0UG9zdE1lc3NhZ2UpOgorICAgICAgICBBZGRlZCBjdXN0b20gaGFuZGxlciB0aGF0IHN1
cHBvcnRzIE1lc3NhZ2VQb3J0QXJyYXkuCisgICAgICAgIChXZWJDb3JlOjpnZXRNZXNzYWdlUG9y
dEFycmF5KToKKyAgICAgICAgQWRkZWQgaGVscGVyIGZ1bmN0aW9uIHRoYXQgc3VwcG9ydHMgY29u
dmVydGluZyBmcm9tIGEgc2VxdWVuY2UtbGlrZSBvYmplY3QgdG8gYSBNZXNzYWdlUG9ydEFycmF5
LgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9tLmg6IEFk
ZGVkLgorICAgICAgICBBZGRlZCBkZWNsYXJhdGlvbiBmb3IgZ2V0TWVzc2FnZVBvcnRBcnJheSgp
LgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJQb3N0TWVzc2FnZSk6CisgICAgICAgIEFkZGVkIGN1c3RvbSBo
YW5kbGVyIHRoYXQgc3VwcG9ydHMgTWVzc2FnZVBvcnRBcnJheS4KKwogMjAwOS0wOC0yOSAgRHJl
dyBXaWxzb24gIDxhdHdpbHNvbkBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQppbmRleCBjY2RiOTU1Li43ODg2MDVhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNjU5LDcgKzY1OSw5
IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yQmFja2VuZEN1
c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3Vz
dG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5u
ZWxDb25zdHJ1Y3Rvci5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1l
c3NhZ2VFdmVudEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OE1lc3NhZ2VQb3J0Q3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9t
L1Y4TWVzc2FnZVBvcnRDdXN0b20uaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9t
L1Y4TmFtZWROb2RlTWFwQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4TmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92
OC9jdXN0b20vVjhOYW1lZE5vZGVzQ29sbGVjdGlvbi5oJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgKaW5kZXggMmM1NDI4Ni4uMDc3ZTMwZSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgKQEAgLTQ2MCwxMSAr
NDYwLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BS
T1BFUlRZX0dFVFRFUihDYW52YXNQaXhlbEFycmF5KTsKICAgICAgICAgREVDTEFSRV9JTkRFWEVE
X1BST1BFUlRZX1NFVFRFUihDYW52YXNQaXhlbEFycmF5KTsKIAorICAgICAgICBERUNMQVJFX1BS
T1BFUlRZX0FDQ0VTU09SX0dFVFRFUihNZXNzYWdlRXZlbnRQb3J0cyk7CisgICAgICAgIERFQ0xB
UkVfQ0FMTEJBQ0soTWVzc2FnZUV2ZW50SW5pdE1lc3NhZ2VFdmVudCk7CisKICAgICAgICAgREVD
TEFSRV9QUk9QRVJUWV9BQ0NFU1NPUihNZXNzYWdlUG9ydE9ubWVzc2FnZSk7CiAgICAgICAgIERF
Q0xBUkVfUFJPUEVSVFlfQUNDRVNTT1IoTWVzc2FnZVBvcnRPbmNsb3NlKTsKLSAgICAgICAgREVD
TEFSRV9DQUxMQkFDSyhNZXNzYWdlUG9ydFN0YXJ0Q29udmVyc2F0aW9uKTsKICAgICAgICAgREVD
TEFSRV9DQUxMQkFDSyhNZXNzYWdlUG9ydEFkZEV2ZW50TGlzdGVuZXIpOworICAgICAgICBERUNM
QVJFX0NBTExCQUNLKE1lc3NhZ2VQb3J0UG9zdE1lc3NhZ2UpOwogICAgICAgICBERUNMQVJFX0NB
TExCQUNLKE1lc3NhZ2VQb3J0UmVtb3ZlRXZlbnRMaXN0ZW5lcik7CisgICAgICAgIERFQ0xBUkVf
Q0FMTEJBQ0soTWVzc2FnZVBvcnRTdGFydENvbnZlcnNhdGlvbik7CiAKICAgICAgICAgREVDTEFS
RV9DQUxMQkFDSyhEYXRhYmFzZUNoYW5nZVZlcnNpb24pOwogICAgICAgICBERUNMQVJFX0NBTExC
QUNLKERhdGFiYXNlVHJhbnNhY3Rpb24pOwpAQCAtNTA0LDggKzUwOCwxMCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQWJzdHJhY3RXb3JrZXJSZW1vdmVF
dmVudExpc3RlbmVyKTsKIAogICAgICAgICBERUNMQVJFX1BST1BFUlRZX0FDQ0VTU09SKERlZGlj
YXRlZFdvcmtlckNvbnRleHRPbm1lc3NhZ2UpOworICAgICAgICBERUNMQVJFX0NBTExCQUNLKERl
ZGljYXRlZFdvcmtlckNvbnRleHRQb3N0TWVzc2FnZSk7CiAKICAgICAgICAgREVDTEFSRV9QUk9Q
RVJUWV9BQ0NFU1NPUihXb3JrZXJPbm1lc3NhZ2UpOworICAgICAgICBERUNMQVJFX0NBTExCQUNL
KFdvcmtlclBvc3RNZXNzYWdlKTsKICAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhXb3JrZXJDb25z
dHJ1Y3Rvcik7CiAKICAgICAgICAgREVDTEFSRV9QUk9QRVJUWV9BQ0NFU1NPUl9HRVRURVIoV29y
a2VyQ29udGV4dFNlbGYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhET01XaW5kb3dDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01X
aW5kb3dDdXN0b20uY3BwCmluZGV4IDIyOWNhYzQuLjYwMDliZDkgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJWOEN1c3RvbUV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJWOE1lc3NhZ2VQ
b3J0Q3VzdG9tLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVz
LmgiCiAKQEAgLTI5NSw3ICsyOTYsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93UG9z
dE1lc3NhZ2UpCiAKICAgICB2ODo6VHJ5Q2F0Y2ggdHJ5Q2F0Y2g7CiAgICAgU3RyaW5nIG1lc3Nh
Z2UgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7Ci0gICAgTWVzc2FnZVBvcnQqIHBvcnQgPSAw
OworICAgIE1lc3NhZ2VQb3J0QXJyYXkgcG9ydEFycmF5OwogICAgIFN0cmluZyB0YXJnZXRPcmln
aW47CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGhhcyB2YXJpYWJsZSBhcmd1bWVudHMgYW5kIGNh
biBlaXRoZXIgYmU6CkBAIC0zMDMsOCArMzA0LDggQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdp
bmRvd1Bvc3RNZXNzYWdlKQogICAgIC8vIG9yCiAgICAgLy8gICBwb3N0TWVzc2FnZShtZXNzYWdl
LCB0YXJnZXRPcmlnaW4pOwogICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMikgewotICAgICAgICBp
ZiAoVjhET01XcmFwcGVyOjppc1dyYXBwZXJPZlR5cGUoYXJnc1sxXSwgVjhDbGFzc0luZGV4OjpN
RVNTQUdFUE9SVCkpCi0gICAgICAgICAgICBwb3J0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8TWVzc2FnZVBvcnQ+KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQsIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1sxXSkpOworICAgICAgICBpZiAoIWdldE1lc3Nh
Z2VQb3J0QXJyYXkoYXJnc1sxXSwgcG9ydEFycmF5KSkKKyAgICAgICAgICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7CiAgICAgICAgIHRhcmdldE9yaWdpbiA9IHRvV2ViQ29yZVN0cmluZ1dpdGhO
dWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzJdKTsKICAgICB9IGVsc2UgewogICAgICAgICB0YXJn
ZXRPcmlnaW4gPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJnc1sx
XSk7CkBAIC0zMTQsMTEgKzMxNSw4IEBAIENBTExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dQb3N0
TWVzc2FnZSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIHdpbmRvdy0+cG9zdE1lc3NhZ2UobWVzc2FnZSwgcG9ydCwgdGFy
Z2V0T3JpZ2luLCBzb3VyY2UsIGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIFY4UHJveHk6OnNl
dERPTUV4Y2VwdGlvbihlYyk7Ci0KLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIHdp
bmRvdy0+cG9zdE1lc3NhZ2UobWVzc2FnZSwgJnBvcnRBcnJheSwgdGFyZ2V0T3JpZ2luLCBzb3Vy
Y2UsIGVjKTsKKyAgICByZXR1cm4gdGhyb3dFcnJvcihlYyk7CiB9CiAKIENBTExCQUNLX0ZVTkNf
REVDTChET01XaW5kb3dBdG9iKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4RGVkaWNhdGVkV29ya2VyQ29udGV4dEN1c3RvbS5jcHAKaW5kZXggZjEzZTQ1
ZS4uNzdlMmZhNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEZWRp
Y2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOERlZGljYXRlZFdvcmtlckNvbnRleHRDdXN0b20uY3BwCkBAIC0zNSw2ICszNSw4IEBA
CiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgiCiAKICNpbmNsdWRlICJE
ZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVk
ZSAiVjhNZXNzYWdlUG9ydEN1c3RvbS5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRl
ICJWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyLmgiCiAKQEAgLTc5LDYgKzgxLDIxIEBAIEFD
Q0VTU09SX1NFVFRFUihEZWRpY2F0ZWRXb3JrZXJDb250ZXh0T25tZXNzYWdlKQogICAgIH0KIH0K
IAorQ0FMTEJBQ0tfRlVOQ19ERUNMKERlZGljYXRlZFdvcmtlckNvbnRleHRQb3N0TWVzc2FnZSkK
K3sKKyAgICBJTkNfU1RBVFMoTCJET00uRGVkaWNhdGVkV29ya2VyQ29udGV4dC5wb3N0TWVzc2Fn
ZSIpOworICAgIERlZGljYXRlZFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxEZWRpY2F0ZWRXb3JrZXJDb250ZXh0PihWOENs
YXNzSW5kZXg6OkRFRElDQVRFRFdPUktFUkNPTlRFWFQsIGFyZ3MuSG9sZGVyKCkpOworICAgIFN0
cmluZyBtZXNzYWdlID0gdjhWYWx1ZVRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKKyAgICBNZXNz
YWdlUG9ydEFycmF5IHBvcnRBcnJheTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEpIHsKKyAg
ICAgICAgaWYgKCFnZXRNZXNzYWdlUG9ydEFycmF5KGFyZ3NbMV0sIHBvcnRBcnJheSkpCisgICAg
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIH0KKyAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICB3b3JrZXJDb250ZXh0LT5wb3N0TWVzc2FnZShtZXNzYWdlLCAmcG9ydEFy
cmF5LCBlYyk7CisgICAgcmV0dXJuIHRocm93RXJyb3IoZWMpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUV2ZW50Q3VzdG9tLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUV2ZW50Q3VzdG9tLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzhkZjEwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlRXZlbnRDdXN0b20uY3BwCkBAIC0wLDAgKzEs
ODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCisKKyNp
bmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNs
dWRlICJWOERPTVdpbmRvdy5oIgorI2luY2x1ZGUgIlY4TWVzc2FnZVBvcnRDdXN0b20uaCIKKyNp
bmNsdWRlICJWOFByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQUNDRVNTT1JfR0VU
VEVSKE1lc3NhZ2VFdmVudFBvcnRzKQoreworICAgIElOQ19TVEFUUygiRE9NLk1lc3NhZ2VFdmVu
dC5wb3J0cyIpOworICAgIE1lc3NhZ2VFdmVudCogZXZlbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxNZXNzYWdlRXZlbnQ+KFY4Q2xhc3NJbmRleDo6TUVTU0FHRUVWRU5U
LCBpbmZvLkhvbGRlcigpKTsKKworICAgIE1lc3NhZ2VQb3J0QXJyYXkqIHBvcnRzID0gZXZlbnQt
PnBvcnRzKCk7CisgICAgaWYgKCFwb3J0cyB8fCBwb3J0cy0+aXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gdjg6Ok51bGwoKTsKKworICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHBvcnRBcnJheSA9
IHY4OjpBcnJheTo6TmV3KHBvcnRzLT5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcG9ydHMtPnNpemUoKTsgKytpKQorICAgICAgICBwb3J0QXJyYXktPlNldCh2ODo6SW50ZWdl
cjo6TmV3KGkpLCBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6
TUVTU0FHRVBPUlQsICgqcG9ydHMpW2ldLmdldCgpKSk7CisKKyAgICByZXR1cm4gcG9ydEFycmF5
OworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woTWVzc2FnZUV2ZW50SW5pdE1lc3NhZ2VFdmVudCkK
K3sKKyAgICBJTkNfU1RBVFMoIkRPTS5NZXNzYWdlRXZlbnQuaW5pdE1lc3NhZ2VFdmVudCIpOwor
ICAgIE1lc3NhZ2VFdmVudCogZXZlbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxNZXNzYWdlRXZlbnQ+KFY4Q2xhc3NJbmRleDo6TUVTU0FHRUVWRU5ULCBhcmdzLkhvbGRl
cigpKTsKKyAgICBTdHJpbmcgdHlwZUFyZyA9IHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcoYXJnc1sw
XSk7CisgICAgYm9vbCBjYW5CdWJibGVBcmcgPSBhcmdzWzFdLT5Cb29sZWFuVmFsdWUoKTsKKyAg
ICBib29sIGNhbmNlbGFibGVBcmcgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKKyAgICBTdHJp
bmcgZGF0YUFyZyA9IHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcoYXJnc1szXSk7CisgICAgU3RyaW5n
IG9yaWdpbkFyZyA9IHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcoYXJnc1s0XSk7CisgICAgU3RyaW5n
IGxhc3RFdmVudElkQXJnID0gdjhWYWx1ZVRvV2ViQ29yZVN0cmluZyhhcmdzWzVdKTsKKyAgICBE
T01XaW5kb3cqIHNvdXJjZUFyZyA9IFY4RE9NV2luZG93OjpIYXNJbnN0YW5jZShhcmdzWzZdKSA/
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0lu
ZGV4OjpET01XSU5ET1csIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1s2XSkpIDog
MDsKKyAgICBPd25QdHI8TWVzc2FnZVBvcnRBcnJheT4gcG9ydEFycmF5OworCisgICAgaWYgKCFp
c1VuZGVmaW5lZE9yTnVsbChhcmdzWzddKSkgeworICAgICAgICBwb3J0QXJyYXkgPSBuZXcgTWVz
c2FnZVBvcnRBcnJheSgpOworICAgICAgICBpZiAoIWdldE1lc3NhZ2VQb3J0QXJyYXkoYXJnc1s3
XSwgKnBvcnRBcnJheSkpCisgICAgICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAg
IH0KKyAgICBldmVudC0+aW5pdE1lc3NhZ2VFdmVudCh0eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNh
bmNlbGFibGVBcmcsIGRhdGFBcmcsIG9yaWdpbkFyZywgbGFzdEV2ZW50SWRBcmcsIHNvdXJjZUFy
ZywgcG9ydEFycmF5LnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAg
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4TWVzc2FnZVBvcnRDdXN0b20uY3BwCmluZGV4IDk1ZDI0OGMuLjA2MTZjYzggMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZVBvcnRDdXN0b20u
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZVBvcnRDdXN0b20u
Y3BwCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRl
ICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJW
OE1lc3NhZ2VQb3J0Q3VzdG9tLmgiCisjaW5jbHVkZSAiVjhNZXNzYWdlUG9ydC5oIgogI2luY2x1
ZGUgIlY4T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNs
dWRlICJWOFV0aWxpdGllcy5oIgpAQCAtMTE4LDQgKzEyMCw2NCBAQCBDQUxMQkFDS19GVU5DX0RF
Q0woTWVzc2FnZVBvcnRSZW1vdmVFdmVudExpc3RlbmVyKQogICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7CiB9CiAKK0NBTExCQUNLX0ZVTkNfREVDTChNZXNzYWdlUG9ydFBvc3RNZXNzYWdlKQor
eworICAgIElOQ19TVEFUUygiRE9NLk1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlIik7CisgICAgTWVz
c2FnZVBvcnQqIG1lc3NhZ2VQb3J0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8TWVzc2FnZVBvcnQ+KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQsIGFyZ3MuSG9sZGVyKCkp
OworICAgIFN0cmluZyBtZXNzYWdlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOworICAgIE1l
c3NhZ2VQb3J0QXJyYXkgcG9ydEFycmF5OworICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMSkgewor
ICAgICAgICBpZiAoIWdldE1lc3NhZ2VQb3J0QXJyYXkoYXJnc1sxXSwgcG9ydEFycmF5KSkKKyAg
ICAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgfQorICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIG1lc3NhZ2VQb3J0LT5wb3N0TWVzc2FnZShtZXNzYWdlLCAmcG9ydEFy
cmF5LCBlYyk7CisgICAgcmV0dXJuIHRocm93RXJyb3IoZWMpOworfQorCitib29sIGdldE1lc3Nh
Z2VQb3J0QXJyYXkodjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIE1lc3NhZ2VQb3J0QXJyYXkm
IHBvcnRBcnJheSkKK3sKKyAgICBpZiAoaXNVbmRlZmluZWRPck51bGwodmFsdWUpKSB7CisgICAg
ICAgIHBvcnRBcnJheS5yZXNpemUoMCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIGlmICghdmFsdWUtPklzT2JqZWN0KCkpIHsKKyAgICAgICAgdGhyb3dFcnJvcigiTWVzc2Fn
ZVBvcnRBcnJheSBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIHVpbnQzMl90IGxlbmd0aCA9IDA7CisgICAgdjg6OkxvY2FsPHY4
OjpPYmplY3Q+IHBvcnRzID0gdjg6OkxvY2FsPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKTsKKwor
ICAgIGlmICh2YWx1ZS0+SXNBcnJheSgpKSB7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+
IGFycmF5ID0gdjg6OkxvY2FsPHY4OjpBcnJheT46OkNhc3QodmFsdWUpOworICAgICAgICBsZW5n
dGggPSBhcnJheS0+TGVuZ3RoKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gU2VxdWVuY2Ut
dHlwZSBvYmplY3QgLSBnZXQgdGhlIGxlbmd0aCBhdHRyaWJ1dGUKKyAgICAgICAgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gc2VxdWVuY2VMZW5ndGggPSBwb3J0cy0+R2V0KHY4OjpTdHJpbmc6Ok5ldygi
bGVuZ3RoIikpOworICAgICAgICBpZiAoIXNlcXVlbmNlTGVuZ3RoLT5Jc051bWJlcigpKSB7Cisg
ICAgICAgICAgICB0aHJvd0Vycm9yKCJNZXNzYWdlUG9ydEFycmF5IGFyZ3VtZW50IGhhcyBubyBs
ZW5ndGggYXR0cmlidXRlIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgbGVuZ3RoID0gc2VxdWVuY2VMZW5ndGgtPlVpbnQzMlZhbHVlKCk7CisgICAgfQor
ICAgIHBvcnRBcnJheS5yZXNpemUobGVuZ3RoKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcG9y
dCA9IHBvcnRzLT5HZXQodjg6OkludGVnZXI6Ok5ldyhpKSk7CisgICAgICAgIC8vIFZhbGlkYXRp
b24gb2Ygbm9uLW51bGwgb2JqZWN0cywgcGVyIEhUTUw1IHNwZWMgOC4zLjMuCisgICAgICAgIGlm
IChpc1VuZGVmaW5lZE9yTnVsbChwb3J0KSkgeworICAgICAgICAgICAgdGhyb3dFcnJvcihJTlZB
TElEX1NUQVRFX0VSUik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gVmFsaWRhdGlvbiBvZiBPYmplY3RzIGltcGxlbWVudGluZyBhbiBpbnRlcmZhY2Us
IHBlciBXZWJJREwgc3BlYyA0LjEuMTUuCisgICAgICAgIGlmICghVjhNZXNzYWdlUG9ydDo6SGFz
SW5zdGFuY2UocG9ydCkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3IoIk1lc3NhZ2VQb3J0QXJy
YXkgYXJndW1lbnQgbXVzdCBjb250YWluIG9ubHkgTWVzc2FnZVBvcnRzIik7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcG9ydEFycmF5W2ldID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TWVzc2FnZVBvcnQ+KFY4Q2xhc3NJbmRleDo6
TUVTU0FHRVBPUlQsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QocG9ydCkpOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlUG9ydEN1c3RvbS5oIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlUG9ydEN1c3RvbS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYjUwMmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9tLmgKQEAgLTAsMCArMSw0
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSBHb29nbGUgSW5jLgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFY4TWVzc2FnZVBvcnRDdXN0b21faAorI2RlZmluZSBWOE1l
c3NhZ2VQb3J0Q3VzdG9tX2gKKworI2luY2x1ZGUgPHY4Lmg+CisKKyNpbmNsdWRlICJNZXNzYWdl
UG9ydC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
d2hpY2ggcHVsbHMgdGhlIHZhbHVlcyBvdXQgb2YgYSBKUyBzZXF1ZW5jZSBhbmQgaW50byBhIE1l
c3NhZ2VQb3J0QXJyYXkuCisgICAgLy8gQWxzbyB2YWxpZGF0ZXMgdGhlIGVsZW1lbnRzIHBlciBz
ZWN0aW9ucyA0LjEuMTMgYW5kIDQuMS4xNSBvZiB0aGUgV2ViSURMIHNwZWMgYW5kIHNlY3Rpb24g
OC4zLjMgb2YgdGhlIEhUTUw1IHNwZWMgYW5kIGdlbmVyYXRlcyBleGNlcHRpb25zIGFzIGFwcHJv
cHJpYXRlLgorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXJyYXkgd2FzIGZpbGxlZCwgb3Ig
ZmFsc2UgaWYgdGhlIHBhc3NlZCB2YWx1ZSB3YXMgbm90IG9mIGFuIGFwcHJvcHJpYXRlIHR5cGUu
CisgICAgYm9vbCBnZXRNZXNzYWdlUG9ydEFycmF5KHY4OjpMb2NhbDx2ODo6VmFsdWU+LCBNZXNz
YWdlUG9ydEFycmF5Jik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFY4
TWVzc2FnZVBvcnRDdXN0b21faApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhXb3JrZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3Jr
ZXJDdXN0b20uY3BwCmluZGV4IDMyNDUwYjguLmFjZmNhY2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4Q3VzdG9t
QmluZGluZy5oIgorI2luY2x1ZGUgIlY4TWVzc2FnZVBvcnRDdXN0b20uaCIKICNpbmNsdWRlICJW
OE9iamVjdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAi
VjhVdGlsaXRpZXMuaCIKQEAgLTE0OSw2ICsxNTAsMjEgQEAgQUNDRVNTT1JfU0VUVEVSKFdvcmtl
ck9ubWVzc2FnZSkKICAgICB9CiB9CiAKK0NBTExCQUNLX0ZVTkNfREVDTChXb3JrZXJQb3N0TWVz
c2FnZSkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5Xb3JrZXIucG9zdE1lc3NhZ2UiKTsKKyAgICBX
b3JrZXIqIHdvcmtlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtl
cj4oVjhDbGFzc0luZGV4OjpXT1JLRVIsIGFyZ3MuSG9sZGVyKCkpOworICAgIFN0cmluZyBtZXNz
YWdlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOworICAgIE1lc3NhZ2VQb3J0QXJyYXkgcG9y
dEFycmF5OworICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMSkgeworICAgICAgICBpZiAoIWdldE1l
c3NhZ2VQb3J0QXJyYXkoYXJnc1sxXSwgcG9ydEFycmF5KSkKKyAgICAgICAgICAgIHJldHVybiB2
ODo6VW5kZWZpbmVkKCk7CisgICAgfQorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIHdv
cmtlci0+cG9zdE1lc3NhZ2UobWVzc2FnZSwgJnBvcnRBcnJheSwgZWMpOworICAgIHJldHVybiB0
aHJvd0Vycm9yKGVjKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RU5BQkxFKFdPUktFUlMpCg==
</data>
<flag name="review"
          id="19886"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
    <flag name="commit-queue"
          id="19955"
          type_id="3"
          status="-"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>