<?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>25084</bug_id>
          
          <creation_ts>2009-04-07 16:01:28 -0700</creation_ts>
          <short_desc>Upstream changes to support V8 bindings for XHR in worker context.</short_desc>
          <delta_ts>2009-04-09 15:43:11 -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 Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jian Li">jianli</reporter>
          <assigned_to name="Jian Li">jianli</assigned_to>
          <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>116816</commentid>
    <comment_count>0</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-04-07 16:01:28 -0700</bug_when>
    <thetext>Upstream changes to support V8 bindings for XHR in worker context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116819</commentid>
    <comment_count>1</comment_count>
      <attachid>29319</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-04-07 16:26:29 -0700</bug_when>
    <thetext>Created attachment 29319
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116862</commentid>
    <comment_count>2</comment_count>
      <attachid>29319</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-08 04:02:34 -0700</bug_when>
    <thetext>Comment on attachment 29319
Proposed Patch

A more descriptive ChangeLog would be helpful.

It&apos;s strange to leave &quot;FindOrCreate...&quot; with a leading capital letter.

We use 0 instead of NULL in WebKit C++ code, see http://webkit.org/coding/coding-style.html

A comment documenting when it&apos;s OK for global.IsEmpty() to return true would be nice.  Maybe there is still an ASSERT we should add there?  Or is it always true that a dom wrapper lookup can fail for the worker context now?

findOrCreateEventListenerHelper
Helper isn&apos;t very descriptive.  Why are these helpers and not listeners?  Don&apos;t they inherit from V8EventListener?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116915</commentid>
    <comment_count>3</comment_count>
      <attachid>29342</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-04-08 12:12:25 -0700</bug_when>
    <thetext>Created attachment 29342
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116918</commentid>
    <comment_count>4</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-04-08 12:22:07 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 29319 [review])
&gt; A more descriptive ChangeLog would be helpful.
&gt; 
What do I need to add to ChangeLog. Maybe something like the following:
  Upstream changes to V8 bindings for XHR so that it can work under either DOMWindow or WorkerContext.

How do you think? If agreed, I will update the ChangeLog.
&gt; It&apos;s strange to leave &quot;FindOrCreate...&quot; with a leading capital letter.
&gt; 
Yes, this is strange but I have to keep that unchanged because all these FindOrCreate*** are used by some files that have not been upstreamed yet (you can see the comment there).

For the new methods I have added, I use the WebKit style name.

&gt; We use 0 instead of NULL in WebKit C++ code, see
&gt; http://webkit.org/coding/coding-style.html
&gt; 
Thanks for reminding. Fixed.
&gt; A comment documenting when it&apos;s OK for global.IsEmpty() to return true would be
&gt; nice.  Maybe there is still an ASSERT we should add there?  Or is it always
&gt; true that a dom wrapper lookup can fail for the worker context now?
&gt; 
I added the comment in .h file. I think we should not have ASSERT for WorkerContextExecutionProxy::retrieve() because we rely on it to return 0 to indicate if it is in worker context.
&gt; findOrCreateEventListenerHelper
&gt; Helper isn&apos;t very descriptive.  Why are these helpers and not listeners?  Don&apos;t
&gt; they inherit from V8EventListener?
&gt; 
I agree that Helper is not really a good name. Do you have any better name to suggest? The reason for using this Helper is to put the common code in this Helper so that it could be called by either FindOrCreateEventListener or findOrCreateObjectEventListener.

V8WorkerContextEventListener inherits from V8EventListener and V8WorkerContextObjectEventListener inherits from V8WorkerContextEventListener. They could only be found or created by the methods in WorkerContextExecutionProxy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117079</commentid>
    <comment_count>5</comment_count>
      <attachid>29342</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-09 15:00:42 -0700</bug_when>
    <thetext>Comment on attachment 29342
Proposed Patch

Seems OK to me.  I&apos;m not the be-all, end-all expert here, but this also looks like an &quot;intermediate step&quot; towards better bindings, since not all is upstreamed yet.  Having commetns closer to the actual logic would be more helpful in some case, like the if (global.isEmpty()) having a comment right before it saying *why* we return 0 there.

Or having a comment right next to the funny function names Find vs. find in the .cpp file which explains that the Find version shoudl be removed ASAP.

In general, looks fine to my eyes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117082</commentid>
    <comment_count>6</comment_count>
      <attachid>29373</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-04-09 15:18:03 -0700</bug_when>
    <thetext>Created attachment 29373
Proposed Patch

This is the new patch with one more comment added per last feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117086</commentid>
    <comment_count>7</comment_count>
      <attachid>29373</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-04-09 15:24:59 -0700</bug_when>
    <thetext>Comment on attachment 29373
Proposed Patch

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117093</commentid>
    <comment_count>8</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-04-09 15:43:11 -0700</bug_when>
    <thetext>Landed: http://trac.webkit.org/changeset/42373
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29319</attachid>
            <date>2009-04-07 16:26:29 -0700</date>
            <delta_ts>2009-04-08 12:12:25 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>25084</filename>
            <type>text/plain</type>
            <size>13733</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTg0ZmViOC4uZWE4MjRkMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAwOS0wNC0wNyAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXBzdHJlYW0gY2hhbmdlcyB0byBzdXBwb3J0IFY4IGJpbmRpbmdzIGZvciBY
SFIgaW4gd29ya2VyIGNvbnRleHQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNTA4NAorCisgICAgICAgICogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eTo6cmV0cmlldmUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5OjpmaW5kT3JDcmVhdGVFdmVudExpc3RlbmVySGVscGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6RmluZE9yQ3JlYXRlRXZlbnRM
aXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6
OmZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhYTUxI
dHRwUmVxdWVzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRFdmVudExpc3RlbmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX1NFVFRFUik6CisgICAgICAgIChXZWJDb3Jl
OjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorCiAyMDA5LTA0LTA3ICBEYXZpZCBMZXZpbiAgPGxldmlu
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBCdWlsZCBmaXguCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKaW5kZXggZDA2MWVhMi4u
OTk3NjU3NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHkuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5LmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIlY4UHJveHkuaCIK
ICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIlY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVu
ZXIuaCIKKyNpbmNsdWRlICJWOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyLmgiCiAj
aW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIldvcmtlckxvY2F0aW9uLmgiCiAj
aW5jbHVkZSAiV29ya2VyTmF2aWdhdG9yLmgiCkBAIC0xMTUsNyArMTE2LDggQEAgV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5KiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnJldHJpZXZl
KCkKICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gdjg6OkNvbnRleHQ6Okdl
dEN1cnJlbnQoKTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCA9IGNvbnRleHQt
Pkdsb2JhbCgpOwogICAgIGdsb2JhbCA9IFY4UHJveHk6Okxvb2t1cERPTVdyYXBwZXIoVjhDbGFz
c0luZGV4OjpXT1JLRVJDT05URVhULCBnbG9iYWwpOwotICAgIEFTU0VSVCghZ2xvYmFsLklzRW1w
dHkoKSk7CisgICAgaWYgKGdsb2JhbC5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBOVUxMOwog
ICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVj
dDxXb3JrZXJDb250ZXh0PihWOENsYXNzSW5kZXg6OldPUktFUkNPTlRFWFQsIGdsb2JhbCk7CiAg
ICAgcmV0dXJuIHdvcmtlckNvbnRleHQtPnNjcmlwdCgpLT5wcm94eSgpOwogfQpAQCAtMzMwLDcg
KzMzMiw3IEBAIHY4OjpMb2NhbDx2ODo6VmFsdWU+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eTo6cnVuU2NyaXB0KHY4OjpIYW5kbGU8djg6OlNjcmlwCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotUGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eTo6RmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6OlZhbHVlPiBvYmplY3Qs
IGJvb2wgaXNJbmxpbmUsIGJvb2wgZmluZE9ubHkpCitQYXNzUmVmUHRyPFY4RXZlbnRMaXN0ZW5l
cj4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpmaW5kT3JDcmVhdGVFdmVudExpc3RlbmVy
SGVscGVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+IG9iamVjdCwgYm9vbCBpc0lubGluZSwgYm9vbCBm
aW5kT25seSwgYm9vbCBjcmVhdGVPYmplY3RFdmVudExpc3RlbmVyKQogewogICAgIGlmICghb2Jq
ZWN0LT5Jc09iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTM0MCw3ICszNDIsMTEgQEAg
UGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6
RmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW4KICAgICAgICAgcmV0dXJuIGxpc3RlbmVyOwogCiAgICAg
Ly8gQ3JlYXRlIGEgbmV3IG9uZSwgYW5kIGFkZCB0byBjYWNoZS4KLSAgICBSZWZQdHI8VjhXb3Jr
ZXJDb250ZXh0RXZlbnRMaXN0ZW5lcj4gbmV3TGlzdGVuZXIgPSBWOFdvcmtlckNvbnRleHRFdmVu
dExpc3RlbmVyOjpjcmVhdGUodGhpcywgdjg6OkxvY2FsPHY4OjpPYmplY3Q+OjpDYXN0KG9iamVj
dCksIGlzSW5saW5lKTsKKyAgICBSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBuZXdMaXN0ZW5lcjsK
KyAgICBpZiAoY3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5lcikKKyAgICAgICAgbmV3TGlzdGVuZXIg
PSBWOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyOjpjcmVhdGUodGhpcywgdjg6Okxv
Y2FsPHY4OjpPYmplY3Q+OjpDYXN0KG9iamVjdCksIGlzSW5saW5lKTsKKyAgICBlbHNlCisgICAg
ICAgIG5ld0xpc3RlbmVyID0gVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKHRo
aXMsIHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6Q2FzdChvYmplY3QpLCBpc0lubGluZSk7CiAgICAg
ewogICAgICAgICAvLyBOZWVkIHRvIHVzZSBsb2NrIHNpbmNlIFY4RXZlbnRMaXN0ZW5lckxpc3Q6
OmFkZCgpIGNyZWF0ZXMgSGFuZGxlU2NvcGUuCiAgICAgICAgIHY4OjpMb2NrZXIgbG9ja2VyOwpA
QCAtMzUwLDYgKzM1NiwxNiBAQCBQYXNzUmVmUHRyPFY4RXZlbnRMaXN0ZW5lcj4gV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5OjpGaW5kT3JDcmVhdGVFdmVudExpc3RlbgogICAgIHJldHVybiBu
ZXdMaXN0ZW5lci5yZWxlYXNlKCk7CiB9CiAKK1Bhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBX
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OkZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuZXIodjg6
OkxvY2FsPHY4OjpWYWx1ZT4gb2JqZWN0LCBib29sIGlzSW5saW5lLCBib29sIGZpbmRPbmx5KQor
eworICAgIHJldHVybiBmaW5kT3JDcmVhdGVFdmVudExpc3RlbmVySGVscGVyKG9iamVjdCwgaXNJ
bmxpbmUsIGZpbmRPbmx5LCBmYWxzZSk7Cit9CisKK1Bhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVy
PiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlz
dGVuZXIodjg6OkxvY2FsPHY4OjpWYWx1ZT4gb2JqZWN0LCBib29sIGlzSW5saW5lLCBib29sIGZp
bmRPbmx5KQoreworICAgIHJldHVybiBmaW5kT3JDcmVhdGVFdmVudExpc3RlbmVySGVscGVyKG9i
amVjdCwgaXNJbmxpbmUsIGZpbmRPbmx5LCB0cnVlKTsKK30KKwogdm9pZCBXb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHk6OlJlbW92ZUV2ZW50TGlzdGVuZXIoVjhFdmVudExpc3RlbmVyKiBsaXN0
ZW5lcikKIHsKICAgICAvLyBOZWVkIHRvIHVzZSBsb2NrIHNpbmNlIFY4RXZlbnRMaXN0ZW5lckxp
c3Q6OnJlbW92ZSgpIGNyZWF0ZXMgSGFuZGxlU2NvcGUuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIGIvV2ViQ29yZS9iaW5kaW5n
cy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaAppbmRleCA3MGY5ZmM1Li5hNTAxODJk
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5LmgKQEAgLTY0LDYgKzY0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IEV2ZW50VGFyZ2V0VG9WOE9iamVjdChFdmVudFRhcmdl
dCogdGFyZ2V0KTsKICAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBXb3JrZXJD
b250ZXh0VG9WOE9iamVjdChXb3JrZXJDb250ZXh0KiB3Yyk7CiAKKyAgICAgICAgLy8gRmluZHMv
Y3JlYXRlcyBldmVudCBsaXN0ZW5lciB3cmFwcGVycy4KKyAgICAgICAgUGFzc1JlZlB0cjxWOEV2
ZW50TGlzdGVuZXI+IGZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIodjg6OkxvY2FsPHY4
OjpWYWx1ZT4gb2JqZWN0LCBib29sIGlzSW5saW5lLCBib29sIGZpbmRPbmx5KTsKKwogICAgICAg
ICAvLyBUcmFjayB0aGUgZXZlbnQgc28gdGhhdCB3ZSBjYW4gZGV0YWNoIGl0IGZyb20gdGhlIEpT
IHdyYXBwZXIgd2hlbiBhIHdvcmtlcgogICAgICAgICAvLyB0ZXJtaW5hdGVzLiBUaGlzIGlzIG5l
ZWRlZCBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBkaXNwb3NlIHRoZXNlCiAgICAgICAg
IC8vIGV2ZW50cyBhbmQgcmVsZWFzZXMgcmVmZXJlbmNlcyB0byB0aGVpciBldmVudCB0YXJnZXRz
OiBXb3JrZXJDb250ZXh0LgpAQCAtODUsNiArODgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBpbml0Q29udGV4dElmTmVlZGVkKCk7CiAgICAgICAg
IHZvaWQgZGlzcG9zZSgpOworICAgICAgICBQYXNzUmVmUHRyPFY4RXZlbnRMaXN0ZW5lcj4gZmlu
ZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lckhlbHBlcih2ODo6TG9jYWw8djg6OlZhbHVlPiBvYmplY3Qs
IGJvb2wgaXNJbmxpbmUsIGJvb2wgZmluZE9ubHksIGJvb2wgY3JlYXRlT2JqZWN0RXZlbnRMaXN0
ZW5lcik7CiAKICAgICAgICAgLy8gUnVuIGFuIGFscmVhZHkgY29tcGlsZWQgc2NyaXB0LgogICAg
ICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBydW5TY3JpcHQodjg6OkhhbmRsZTx2ODo6U2NyaXB0
Pik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1
ZXN0Q29uc3RydWN0b3IuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRw
UmVxdWVzdENvbnN0cnVjdG9yLmNwcAppbmRleCA2YjU1MjM4Li4wOTA4MzdlIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3Iu
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDb25z
dHJ1Y3Rvci5jcHAKQEAgLTM2LDYgKzM2LDggQEAKICNpbmNsdWRlICJWOE9iamVjdEV2ZW50TGlz
dGVuZXIuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3Qu
aCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDgsOCArNTAsMTUg
QEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IpCiAKICAgICAv
LyBFeHBlY3Qgbm8gcGFyYW1ldGVycy4KICAgICAvLyBBbGxvY2F0ZSBhIFhNTEh0dHBSZXF1ZXN0
IG9iamVjdCBhcyBpdHMgaW50ZXJuYWwgZmllbGQuCi0gICAgRG9jdW1lbnQqIGRvYyA9IFY4UHJv
eHk6OnJldHJpZXZlRnJhbWUoKS0+ZG9jdW1lbnQoKTsKLSAgICBSZWZQdHI8WE1MSHR0cFJlcXVl
c3Q+IHhtbEh0dHBSZXF1ZXN0ID0gWE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZShkb2MpOworICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBOVUxMOworI2lmIEVOQUJMRShXT1JLRVJT
KQorICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSogcHJveHkgPSBXb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHk6OnJldHJpZXZlKCk7CisgICAgaWYgKHByb3h5KQorICAgICAgICBjb250
ZXh0ID0gcHJveHktPndvcmtlckNvbnRleHQoKTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAg
Y29udGV4dCA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICBSZWZQ
dHI8WE1MSHR0cFJlcXVlc3Q+IHhtbEh0dHBSZXF1ZXN0ID0gWE1MSHR0cFJlcXVlc3Q6OmNyZWF0
ZShjb250ZXh0KTsKICAgICBWOFByb3h5OjpTZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIFY4
Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCksIHhtbEh0dHBS
ZXF1ZXN0LmdldCgpKTsKIAogICAgIC8vIEFkZCBvYmplY3QgdG8gdGhlIHdyYXBwZXIgbWFwLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdEN1
c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3Vz
dG9tLmNwcAppbmRleCBlYTY5ZjBiLi4yYTNkNWQ2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcApAQCAtMzksOSArMzks
MjYgQEAKICNpbmNsdWRlICJWOE9iamVjdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJWOFBy
b3h5LmgiCiAjaW5jbHVkZSAiVjhYTUxIdHRwUmVxdWVzdFV0aWxpdGllcy5oIgorI2luY2x1ZGUg
IldvcmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHku
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGdl
dEV2ZW50TGlzdGVuZXIoWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0LCB2ODo6TG9jYWw8
djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBmaW5kT25seSkKK3sKKyNpZiBFTkFCTEUoV09SS0VSUykK
KyAgICBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHdvcmtlckNvbnRleHRQcm94eSA9IFdv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cmV0cmlldmUoKTsKKyAgICBpZiAod29ya2VyQ29u
dGV4dFByb3h5KQorICAgICAgICByZXR1cm4gd29ya2VyQ29udGV4dFByb3h5LT5maW5kT3JDcmVh
dGVPYmplY3RFdmVudExpc3RlbmVyKHZhbHVlLCBmYWxzZSwgZmluZE9ubHkpOworI2VuZGlmCisK
KyAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKHhtbEh0dHBSZXF1ZXN0LT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIGlmIChwcm94eSkKKyAgICAgICAgcmV0dXJu
IGZpbmRPbmx5ID8gcHJveHktPkZpbmRPYmplY3RFdmVudExpc3RlbmVyKHZhbHVlLCBmYWxzZSkg
OiBwcm94eS0+RmluZE9yQ3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5lcih2YWx1ZSwgZmFsc2UpOwor
CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4oKTsKK30KKwogQUNDRVNTT1Jf
R0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25hYm9ydCkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5YTUxI
dHRwUmVxdWVzdC5vbmFib3J0Ll9nZXQiKTsKQEAgLTY4LDExICs4NSw3IEBAIEFDQ0VTU09SX1NF
VFRFUihYTUxIdHRwUmVxdWVzdE9uYWJvcnQpCiAgICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5l
ci4KICAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNldE9uYWJvcnQoMCk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZSh4bWxIdHRwUmVxdWVz
dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICAgICAgaWYgKCFwcm94eSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIg
PSBwcm94eS0+RmluZE9yQ3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5lcih2YWx1ZSwgZmFsc2UpOwor
ICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVy
KHhtbEh0dHBSZXF1ZXN0LCB2YWx1ZSwgZmFsc2UpOwogICAgICAgICBpZiAobGlzdGVuZXIpIHsK
ICAgICAgICAgICAgIHhtbEh0dHBSZXF1ZXN0LT5zZXRPbmFib3J0KGxpc3RlbmVyKTsKICAgICAg
ICAgICAgIGNyZWF0ZUhpZGRlblhIUkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdmFsdWUpOwpA
QCAtMTA2LDExICsxMTksNyBAQCBBQ0NFU1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RPbmVycm9y
KQogICAgICAgICAvLyBDbGVhciB0aGUgbGlzdGVuZXIuCiAgICAgICAgIHhtbEh0dHBSZXF1ZXN0
LT5zZXRPbmVycm9yKDApOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFY4UHJveHkqIHByb3h5ID0g
VjhQcm94eTo6cmV0cmlldmUoeG1sSHR0cFJlcXVlc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSk7Ci0gICAgICAgIGlmICghcHJveHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gcHJveHktPkZpbmRPckNyZWF0ZU9iamVj
dEV2ZW50TGlzdGVuZXIodmFsdWUsIGZhbHNlKTsKKyAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih4bWxIdHRwUmVxdWVzdCwgdmFsdWUsIGZh
bHNlKTsKICAgICAgICAgaWYgKGxpc3RlbmVyKSB7CiAgICAgICAgICAgICB4bWxIdHRwUmVxdWVz
dC0+c2V0T25lcnJvcihsaXN0ZW5lcik7CiAgICAgICAgICAgICBjcmVhdGVIaWRkZW5YSFJEZXBl
bmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVlKTsKQEAgLTE0NCwxMSArMTUzLDcgQEAgQUNDRVNT
T1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25sb2FkKQogICAgICAgICB4bWxIdHRwUmVxdWVzdC0+
c2V0T25sb2FkKDApOwogCiAgICAgfSBlbHNlIHsKLSAgICAgICAgVjhQcm94eSogcHJveHkgPSBW
OFByb3h5OjpyZXRyaWV2ZSh4bWxIdHRwUmVxdWVzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KTsKLSAgICAgICAgaWYgKCFwcm94eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+RmluZE9yQ3JlYXRlT2JqZWN0
RXZlbnRMaXN0ZW5lcih2YWx1ZSwgZmFsc2UpOworICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVyKHhtbEh0dHBSZXF1ZXN0LCB2YWx1ZSwgZmFs
c2UpOwogICAgICAgICBpZiAobGlzdGVuZXIpIHsKICAgICAgICAgICAgIHhtbEh0dHBSZXF1ZXN0
LT5zZXRPbmxvYWQobGlzdGVuZXIuZ2V0KCkpOwogICAgICAgICAgICAgY3JlYXRlSGlkZGVuWEhS
RGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSk7CkBAIC0xODIsMTEgKzE4Nyw3IEBAIEFD
Q0VTU09SX1NFVFRFUihYTUxIdHRwUmVxdWVzdE9ubG9hZHN0YXJ0KQogICAgICAgICAvLyBDbGVh
ciB0aGUgbGlzdGVuZXIuCiAgICAgICAgIHhtbEh0dHBSZXF1ZXN0LT5zZXRPbmxvYWRzdGFydCgw
KTsKICAgICB9IGVsc2UgewotICAgICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJp
ZXZlKHhtbEh0dHBSZXF1ZXN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgICAgICBp
ZiAoIXByb3h5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFJlZlB0cjxFdmVudExp
c3RlbmVyPiBsaXN0ZW5lciA9IHByb3h5LT5GaW5kT3JDcmVhdGVPYmplY3RFdmVudExpc3RlbmVy
KHZhbHVlLCBmYWxzZSk7CisgICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9
IGdldEV2ZW50TGlzdGVuZXIoeG1sSHR0cFJlcXVlc3QsIHZhbHVlLCBmYWxzZSk7CiAgICAgICAg
IGlmIChsaXN0ZW5lcikgewogICAgICAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNldE9ubG9hZHN0
YXJ0KGxpc3RlbmVyKTsKICAgICAgICAgICAgIGNyZWF0ZUhpZGRlblhIUkRlcGVuZGVuY3koaW5m
by5Ib2xkZXIoKSwgdmFsdWUpOwpAQCAtMjIwLDExICsyMjEsNyBAQCBBQ0NFU1NPUl9TRVRURVIo
WE1MSHR0cFJlcXVlc3RPbnByb2dyZXNzKQogICAgICAgICAvLyBDbGVhciB0aGUgbGlzdGVuZXIu
CiAgICAgICAgIHhtbEh0dHBSZXF1ZXN0LT5zZXRPbnByb2dyZXNzKDApOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoeG1sSHR0cFJlcXVl
c3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgICAgIGlmICghcHJveHkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVy
ID0gcHJveHktPkZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIodmFsdWUsIGZhbHNlKTsK
KyAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5l
cih4bWxIdHRwUmVxdWVzdCwgdmFsdWUsIGZhbHNlKTsKICAgICAgICAgaWYgKGxpc3RlbmVyKSB7
CiAgICAgICAgICAgICB4bWxIdHRwUmVxdWVzdC0+c2V0T25wcm9ncmVzcyhsaXN0ZW5lcik7CiAg
ICAgICAgICAgICBjcmVhdGVIaWRkZW5YSFJEZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVl
KTsKQEAgLTI1OCwxMSArMjU1LDcgQEAgQUNDRVNTT1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25y
ZWFkeXN0YXRlY2hhbmdlKQogICAgICAgICAvLyBDbGVhciB0aGUgbGlzdGVuZXIuCiAgICAgICAg
IHhtbEh0dHBSZXF1ZXN0LT5zZXRPbnJlYWR5c3RhdGVjaGFuZ2UoMCk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZSh4bWxIdHRwUmVxdWVz
dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICAgICAgaWYgKCFwcm94eSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIg
PSBwcm94eS0+RmluZE9yQ3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5lcih2YWx1ZSwgZmFsc2UpOwor
ICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVy
KHhtbEh0dHBSZXF1ZXN0LCB2YWx1ZSwgZmFsc2UpOwogICAgICAgICBpZiAobGlzdGVuZXIpIHsK
ICAgICAgICAgICAgIHhtbEh0dHBSZXF1ZXN0LT5zZXRPbnJlYWR5c3RhdGVjaGFuZ2UobGlzdGVu
ZXIuZ2V0KCkpOwogICAgICAgICAgICAgY3JlYXRlSGlkZGVuWEhSRGVwZW5kZW5jeShpbmZvLkhv
bGRlcigpLCB2YWx1ZSk7CkBAIC0yODQsMTEgKzI3Nyw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChY
TUxIdHRwUmVxdWVzdEFkZEV2ZW50TGlzdGVuZXIpCiAgICAgSU5DX1NUQVRTKCJET00uWE1MSHR0
cFJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigpIik7CiAgICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0
dHBSZXF1ZXN0ID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xh
c3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgVjhQcm94eSog
cHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZSh4bWxIdHRwUmVxdWVzdC0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKTsKLSAgICBpZiAoIXByb3h5KQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOwotCi0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gcHJveHktPkZpbmRP
ckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIoYXJnc1sxXSwgZmFsc2UpOworICAgIFJlZlB0cjxF
dmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdldEV2ZW50TGlzdGVuZXIoeG1sSHR0cFJlcXVlc3Qs
IGFyZ3NbMV0sIGZhbHNlKTsKICAgICBpZiAobGlzdGVuZXIpIHsKICAgICAgICAgU3RyaW5nIHR5
cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAgICAgIGJvb2wgdXNlQ2FwdHVyZSA9
IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwpAQCAtMzA0LDEyICsyOTMsNyBAQCBDQUxMQkFDS19G
VU5DX0RFQ0woWE1MSHR0cFJlcXVlc3RSZW1vdmVFdmVudExpc3RlbmVyKQogICAgIElOQ19TVEFU
UygiRE9NLlhNTEh0dHBSZXF1ZXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoKSIpOwogICAgIFhNTEh0
dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PFhNTEh0
dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBhcmdzLkhvbGRlcigpKTsK
IAotICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoeG1sSHR0cFJlcXVlc3Qt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgaWYgKCFwcm94eSkKLSAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsgLy8gUHJvYmFibHkgbGVha2VkLgotCi0gICAgUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gcHJveHktPkZpbmRPYmplY3RFdmVudExpc3RlbmVyKGFy
Z3NbMV0sIGZhbHNlKTsKLQorICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdl
dEV2ZW50TGlzdGVuZXIoeG1sSHR0cFJlcXVlc3QsIGFyZ3NbMV0sIHRydWUpOwogICAgIGlmIChs
aXN0ZW5lcikgewogICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBd
KTsKICAgICAgICAgYm9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7CkBA
IC0zMzcsOCArMzIxLDE1IEBAIENBTExCQUNLX0ZVTkNfREVDTChYTUxIdHRwUmVxdWVzdE9wZW4p
CiAKICAgICBTdHJpbmcgbWV0aG9kID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgIFN0
cmluZyB1cmxzdHJpbmcgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1sxXSk7Ci0gICAgVjhQcm94eSog
cHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZSgpOwotICAgIEtVUkwgdXJsID0gcHJveHktPmZyYW1l
KCktPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybHN0cmluZyk7CisgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCA9IE5VTEw7CisjaWYgRU5BQkxFKFdPUktFUlMpCisgICAgV29y
a2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBwcm94eSA9IFdvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eTo6cmV0cmlldmUoKTsKKyAgICBpZiAocHJveHkpCisgICAgICAgIGNvbnRleHQgPSBwcm94
eS0+d29ya2VyQ29udGV4dCgpOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBjb250ZXh0ID0g
VjhQcm94eTo6cmV0cmlldmUoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICBLVVJMIHVybCA9
IGNvbnRleHQtPmNvbXBsZXRlVVJMKHVybHN0cmluZyk7CiAKICAgICBib29sIGFzeW5jID0gKGFy
Z3MuTGVuZ3RoKCkgPCAzKSA/IHRydWUgOiBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29342</attachid>
            <date>2009-04-08 12:12:25 -0700</date>
            <delta_ts>2009-04-09 15:18:03 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>25084_2</filename>
            <type>text/plain</type>
            <size>15058</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTg0ZmViOC4uZWE4MjRkMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAwOS0wNC0wNyAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXBzdHJlYW0gY2hhbmdlcyB0byBzdXBwb3J0IFY4IGJpbmRpbmdzIGZvciBY
SFIgaW4gd29ya2VyIGNvbnRleHQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNTA4NAorCisgICAgICAgICogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eTo6cmV0cmlldmUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5OjpmaW5kT3JDcmVhdGVFdmVudExpc3RlbmVySGVscGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6RmluZE9yQ3JlYXRlRXZlbnRM
aXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6
OmZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhYTUxI
dHRwUmVxdWVzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRFdmVudExpc3RlbmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX1NFVFRFUik6CisgICAgICAgIChXZWJDb3Jl
OjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorCiAyMDA5LTA0LTA3ICBEYXZpZCBMZXZpbiAgPGxldmlu
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBCdWlsZCBmaXguCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKaW5kZXggZDA2MWVhMi4u
OWE1YmJiOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHkuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5LmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIlY4UHJveHkuaCIK
ICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIlY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVu
ZXIuaCIKKyNpbmNsdWRlICJWOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyLmgiCiAj
aW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIldvcmtlckxvY2F0aW9uLmgiCiAj
aW5jbHVkZSAiV29ya2VyTmF2aWdhdG9yLmgiCkBAIC0xMDYsNyArMTA3LDcgQEAgdm9pZCBXb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmRpc3Bvc2UoKQogICAgIHY4OjpIYW5kbGVTY29wZSBz
Y29wZTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZG9tT2JqZWN0
TWFwKCkuZ2V0KG1fd29ya2VyQ29udGV4dCk7CiAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkK
LSAgICAgICAgVjhQcm94eTo6U2V0RE9NV3JhcHBlcih3cmFwcGVyLCBWOENsYXNzSW5kZXg6OklO
VkFMSURfQ0xBU1NfSU5ERVgsIE5VTEwpOworICAgICAgICBWOFByb3h5OjpTZXRET01XcmFwcGVy
KHdyYXBwZXIsIFY4Q2xhc3NJbmRleDo6SU5WQUxJRF9DTEFTU19JTkRFWCwgMCk7CiAgICAgZG9t
T2JqZWN0TWFwKCkuZm9yZ2V0KG1fd29ya2VyQ29udGV4dCk7CiB9CiAKQEAgLTExNSw3ICsxMTYs
OCBAQCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIFdvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eTo6cmV0cmlldmUoKQogICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSB2
ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xv
YmFsID0gY29udGV4dC0+R2xvYmFsKCk7CiAgICAgZ2xvYmFsID0gVjhQcm94eTo6TG9va3VwRE9N
V3JhcHBlcihWOENsYXNzSW5kZXg6OldPUktFUkNPTlRFWFQsIGdsb2JhbCk7Ci0gICAgQVNTRVJU
KCFnbG9iYWwuSXNFbXB0eSgpKTsKKyAgICBpZiAoZ2xvYmFsLklzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIDA7CiAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4UHJveHk6OlRv
TmF0aXZlT2JqZWN0PFdvcmtlckNvbnRleHQ+KFY4Q2xhc3NJbmRleDo6V09SS0VSQ09OVEVYVCwg
Z2xvYmFsKTsKICAgICByZXR1cm4gd29ya2VyQ29udGV4dC0+c2NyaXB0KCktPnByb3h5KCk7CiB9
CkBAIC0xMjgsNyArMTMwLDcgQEAgdm9pZCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6Omlu
aXRDb250ZXh0SWZOZWVkZWQoKQogCiAgICAgLy8gQ3JlYXRlIGEgbmV3IGVudmlyb25tZW50CiAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdFRlbXBsYXRlPiBnbG9iYWxUZW1wbGF0ZTsKLSAg
ICBtX2NvbnRleHQgPSB2ODo6Q29udGV4dDo6TmV3KE5VTEwsIGdsb2JhbFRlbXBsYXRlKTsKKyAg
ICBtX2NvbnRleHQgPSB2ODo6Q29udGV4dDo6TmV3KDAsIGdsb2JhbFRlbXBsYXRlKTsKIAogICAg
IC8vIFN0YXJ0aW5nIGZyb20gbm93LCB1c2UgbG9jYWwgY29udGV4dCBvbmx5LgogICAgIHY4OjpM
b2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyht
X2NvbnRleHQpOwpAQCAtMzMwLDcgKzMzMiw3IEBAIHY4OjpMb2NhbDx2ODo6VmFsdWU+IFdvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cnVuU2NyaXB0KHY4OjpIYW5kbGU8djg6OlNjcmlwCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IFdvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eTo6RmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lcih2ODo6TG9j
YWw8djg6OlZhbHVlPiBvYmplY3QsIGJvb2wgaXNJbmxpbmUsIGJvb2wgZmluZE9ubHkpCitQYXNz
UmVmUHRyPFY4RXZlbnRMaXN0ZW5lcj4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpmaW5k
T3JDcmVhdGVFdmVudExpc3RlbmVySGVscGVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+IG9iamVjdCwg
Ym9vbCBpc0lubGluZSwgYm9vbCBmaW5kT25seSwgYm9vbCBjcmVhdGVPYmplY3RFdmVudExpc3Rl
bmVyKQogewogICAgIGlmICghb2JqZWN0LT5Jc09iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsK
QEAgLTM0MCw3ICszNDIsMTEgQEAgUGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IFdvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eTo6RmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW4KICAgICAgICAgcmV0
dXJuIGxpc3RlbmVyOwogCiAgICAgLy8gQ3JlYXRlIGEgbmV3IG9uZSwgYW5kIGFkZCB0byBjYWNo
ZS4KLSAgICBSZWZQdHI8VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcj4gbmV3TGlzdGVuZXIg
PSBWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyOjpjcmVhdGUodGhpcywgdjg6OkxvY2FsPHY4
OjpPYmplY3Q+OjpDYXN0KG9iamVjdCksIGlzSW5saW5lKTsKKyAgICBSZWZQdHI8VjhFdmVudExp
c3RlbmVyPiBuZXdMaXN0ZW5lcjsKKyAgICBpZiAoY3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5lcikK
KyAgICAgICAgbmV3TGlzdGVuZXIgPSBWOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVy
OjpjcmVhdGUodGhpcywgdjg6OkxvY2FsPHY4OjpPYmplY3Q+OjpDYXN0KG9iamVjdCksIGlzSW5s
aW5lKTsKKyAgICBlbHNlCisgICAgICAgIG5ld0xpc3RlbmVyID0gVjhXb3JrZXJDb250ZXh0RXZl
bnRMaXN0ZW5lcjo6Y3JlYXRlKHRoaXMsIHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6Q2FzdChvYmpl
Y3QpLCBpc0lubGluZSk7CiAgICAgewogICAgICAgICAvLyBOZWVkIHRvIHVzZSBsb2NrIHNpbmNl
IFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmFkZCgpIGNyZWF0ZXMgSGFuZGxlU2NvcGUuCiAgICAgICAg
IHY4OjpMb2NrZXIgbG9ja2VyOwpAQCAtMzUwLDYgKzM1NiwxNiBAQCBQYXNzUmVmUHRyPFY4RXZl
bnRMaXN0ZW5lcj4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpGaW5kT3JDcmVhdGVFdmVu
dExpc3RlbgogICAgIHJldHVybiBuZXdMaXN0ZW5lci5yZWxlYXNlKCk7CiB9CiAKK1Bhc3NSZWZQ
dHI8VjhFdmVudExpc3RlbmVyPiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OkZpbmRPckNy
ZWF0ZUV2ZW50TGlzdGVuZXIodjg6OkxvY2FsPHY4OjpWYWx1ZT4gb2JqZWN0LCBib29sIGlzSW5s
aW5lLCBib29sIGZpbmRPbmx5KQoreworICAgIHJldHVybiBmaW5kT3JDcmVhdGVFdmVudExpc3Rl
bmVySGVscGVyKG9iamVjdCwgaXNJbmxpbmUsIGZpbmRPbmx5LCBmYWxzZSk7Cit9CisKK1Bhc3NS
ZWZQdHI8VjhFdmVudExpc3RlbmVyPiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmZpbmRP
ckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIodjg6OkxvY2FsPHY4OjpWYWx1ZT4gb2JqZWN0LCBi
b29sIGlzSW5saW5lLCBib29sIGZpbmRPbmx5KQoreworICAgIHJldHVybiBmaW5kT3JDcmVhdGVF
dmVudExpc3RlbmVySGVscGVyKG9iamVjdCwgaXNJbmxpbmUsIGZpbmRPbmx5LCB0cnVlKTsKK30K
Kwogdm9pZCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OlJlbW92ZUV2ZW50TGlzdGVuZXIo
VjhFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAgICAvLyBOZWVkIHRvIHVzZSBsb2NrIHNp
bmNlIFY4RXZlbnRMaXN0ZW5lckxpc3Q6OnJlbW92ZSgpIGNyZWF0ZXMgSGFuZGxlU2NvcGUuCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaApp
bmRleCA3MGY5ZmM1Li4zZjA3Mzc3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29y
a2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgKQEAgLTY0LDYgKzY0LDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IEV2ZW50VGFyZ2V0
VG9WOE9iamVjdChFdmVudFRhcmdldCogdGFyZ2V0KTsKICAgICAgICAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0VG9WOE9iamVjdChXb3JrZXJDb250ZXh0KiB3Yyk7
CiAKKyAgICAgICAgLy8gRmluZHMvY3JlYXRlcyBldmVudCBsaXN0ZW5lciB3cmFwcGVycy4KKyAg
ICAgICAgUGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IGZpbmRPckNyZWF0ZU9iamVjdEV2ZW50
TGlzdGVuZXIodjg6OkxvY2FsPHY4OjpWYWx1ZT4gb2JqZWN0LCBib29sIGlzSW5saW5lLCBib29s
IGZpbmRPbmx5KTsKKwogICAgICAgICAvLyBUcmFjayB0aGUgZXZlbnQgc28gdGhhdCB3ZSBjYW4g
ZGV0YWNoIGl0IGZyb20gdGhlIEpTIHdyYXBwZXIgd2hlbiBhIHdvcmtlcgogICAgICAgICAvLyB0
ZXJtaW5hdGVzLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBk
aXNwb3NlIHRoZXNlCiAgICAgICAgIC8vIGV2ZW50cyBhbmQgcmVsZWFzZXMgcmVmZXJlbmNlcyB0
byB0aGVpciBldmVudCB0YXJnZXRzOiBXb3JrZXJDb250ZXh0LgpAQCAtNzUsNyArNzgsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFJldHVybnMgV29ya2VyQ29udGV4dCBvYmpl
Y3QuCiAgICAgICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQoKSB7IHJldHVybiBtX3dv
cmtlckNvbnRleHQ7IH0KIAotICAgICAgICAvLyBSZXR1cm5zIFdvcmtlckNvbnRleHRFeGVjdXRp
b25Qcm94eSBvYmplY3Qgb2YgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgY29udGV4dC4KKyAgICAg
ICAgLy8gUmV0dXJucyBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkgb2JqZWN0IG9mIHRoZSBj
dXJyZW50bHkgZXhlY3V0aW5nIGNvbnRleHQuIDAgd2lsbCBiZSByZXR1cm5lZCBpZiB0aGUgY3Vy
cmVudCBleGVjdXRpbmcgY29udGV4dCBpcyBub3QgdGhlIHdvcmtlciBjb250ZXh0LgogICAgICAg
ICBzdGF0aWMgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiByZXRyaWV2ZSgpOwogCiAgICAg
ICAgIC8vIEVuYWJsZXMgSFRNTDUgd29ya2VyIHN1cHBvcnQuCkBAIC04NSw2ICs4OCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGluaXRDb250ZXh0
SWZOZWVkZWQoKTsKICAgICAgICAgdm9pZCBkaXNwb3NlKCk7CisgICAgICAgIFBhc3NSZWZQdHI8
VjhFdmVudExpc3RlbmVyPiBmaW5kT3JDcmVhdGVFdmVudExpc3RlbmVySGVscGVyKHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IG9iamVjdCwgYm9vbCBpc0lubGluZSwgYm9vbCBmaW5kT25seSwgYm9vbCBj
cmVhdGVPYmplY3RFdmVudExpc3RlbmVyKTsKIAogICAgICAgICAvLyBSdW4gYW4gYWxyZWFkeSBj
b21waWxlZCBzY3JpcHQuCiAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHJ1blNjcmlwdCh2
ODo6SGFuZGxlPHY4OjpTY3JpcHQ+KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwCmluZGV4IDZiNTUyMzgu
LmM5MTNjMDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0
cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcApAQCAtMzYsNiArMzYsOCBAQAogI2luY2x1
ZGUgIlY4T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNs
dWRlICJYTUxIdHRwUmVxdWVzdC5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKKyNpbmNs
dWRlICJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC00OCw4ICs1MCwxNSBAQCBDQUxMQkFDS19GVU5DX0RFQ0woWE1MSHR0cFJlcXVlc3RD
b25zdHJ1Y3RvcikKIAogICAgIC8vIEV4cGVjdCBubyBwYXJhbWV0ZXJzLgogICAgIC8vIEFsbG9j
YXRlIGEgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0IGFzIGl0cyBpbnRlcm5hbCBmaWVsZC4KLSAgICBE
b2N1bWVudCogZG9jID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZSgpLT5kb2N1bWVudCgpOwotICAg
IFJlZlB0cjxYTUxIdHRwUmVxdWVzdD4geG1sSHR0cFJlcXVlc3QgPSBYTUxIdHRwUmVxdWVzdDo6
Y3JlYXRlKGRvYyk7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IDA7Cisj
aWYgRU5BQkxFKFdPUktFUlMpCisgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBwcm94
eSA9IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cmV0cmlldmUoKTsKKyAgICBpZiAocHJv
eHkpCisgICAgICAgIGNvbnRleHQgPSBwcm94eS0+d29ya2VyQ29udGV4dCgpOworICAgIGVsc2UK
KyNlbmRpZgorICAgICAgICBjb250ZXh0ID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZSgpLT5kb2N1
bWVudCgpOworICAgIFJlZlB0cjxYTUxIdHRwUmVxdWVzdD4geG1sSHR0cFJlcXVlc3QgPSBYTUxI
dHRwUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQpOwogICAgIFY4UHJveHk6OlNldERPTVdyYXBwZXIo
YXJncy5Ib2xkZXIoKSwgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OlhNTEhUVFBS
RVFVRVNUKSwgeG1sSHR0cFJlcXVlc3QuZ2V0KCkpOwogCiAgICAgLy8gQWRkIG9iamVjdCB0byB0
aGUgd3JhcHBlciBtYXAuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCmluZGV4IGVhNjlmMGIuLmE4MGNmNTEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDdXN0b20uY3Bw
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDdXN0b20u
Y3BwCkBAIC0zOSw5ICszOSwyNiBAQAogI2luY2x1ZGUgIlY4T2JqZWN0RXZlbnRMaXN0ZW5lci5o
IgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFhNTEh0dHBSZXF1ZXN0VXRpbGl0
aWVzLmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRl
eHRFeGVjdXRpb25Qcm94eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK1Bhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5lcihYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJl
cXVlc3QsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBib29sIGZpbmRPbmx5KQoreworI2lm
IEVOQUJMRShXT1JLRVJTKQorICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSogd29ya2Vy
Q29udGV4dFByb3h5ID0gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpyZXRyaWV2ZSgpOwor
ICAgIGlmICh3b3JrZXJDb250ZXh0UHJveHkpCisgICAgICAgIHJldHVybiB3b3JrZXJDb250ZXh0
UHJveHktPmZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIodmFsdWUsIGZhbHNlLCBmaW5k
T25seSk7CisjZW5kaWYKKworICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUo
eG1sSHR0cFJlcXVlc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgaWYgKHByb3h5
KQorICAgICAgICByZXR1cm4gZmluZE9ubHkgPyBwcm94eS0+RmluZE9iamVjdEV2ZW50TGlzdGVu
ZXIodmFsdWUsIGZhbHNlKSA6IHByb3h5LT5GaW5kT3JDcmVhdGVPYmplY3RFdmVudExpc3RlbmVy
KHZhbHVlLCBmYWxzZSk7CisKKyAgICByZXR1cm4gUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPigp
OworfQorCiBBQ0NFU1NPUl9HRVRURVIoWE1MSHR0cFJlcXVlc3RPbmFib3J0KQogewogICAgIElO
Q19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0Lm9uYWJvcnQuX2dldCIpOwpAQCAtNjgsMTEgKzg1
LDcgQEAgQUNDRVNTT1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25hYm9ydCkKICAgICAgICAgLy8g
Q2xlYXIgdGhlIGxpc3RlbmVyLgogICAgICAgICB4bWxIdHRwUmVxdWVzdC0+c2V0T25hYm9ydCgw
KTsKICAgICB9IGVsc2UgewotICAgICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJp
ZXZlKHhtbEh0dHBSZXF1ZXN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgICAgICBp
ZiAoIXByb3h5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFJlZlB0cjxFdmVudExp
c3RlbmVyPiBsaXN0ZW5lciA9IHByb3h5LT5GaW5kT3JDcmVhdGVPYmplY3RFdmVudExpc3RlbmVy
KHZhbHVlLCBmYWxzZSk7CisgICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9
IGdldEV2ZW50TGlzdGVuZXIoeG1sSHR0cFJlcXVlc3QsIHZhbHVlLCBmYWxzZSk7CiAgICAgICAg
IGlmIChsaXN0ZW5lcikgewogICAgICAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNldE9uYWJvcnQo
bGlzdGVuZXIpOwogICAgICAgICAgICAgY3JlYXRlSGlkZGVuWEhSRGVwZW5kZW5jeShpbmZvLkhv
bGRlcigpLCB2YWx1ZSk7CkBAIC0xMDYsMTEgKzExOSw3IEBAIEFDQ0VTU09SX1NFVFRFUihYTUxI
dHRwUmVxdWVzdE9uZXJyb3IpCiAgICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4KICAgICAg
ICAgeG1sSHR0cFJlcXVlc3QtPnNldE9uZXJyb3IoMCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
VjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZSh4bWxIdHRwUmVxdWVzdC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICAgICAgaWYgKCFwcm94eSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+
RmluZE9yQ3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5lcih2YWx1ZSwgZmFsc2UpOworICAgICAgICBS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVyKHhtbEh0dHBS
ZXF1ZXN0LCB2YWx1ZSwgZmFsc2UpOwogICAgICAgICBpZiAobGlzdGVuZXIpIHsKICAgICAgICAg
ICAgIHhtbEh0dHBSZXF1ZXN0LT5zZXRPbmVycm9yKGxpc3RlbmVyKTsKICAgICAgICAgICAgIGNy
ZWF0ZUhpZGRlblhIUkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdmFsdWUpOwpAQCAtMTQ0LDEx
ICsxNTMsNyBAQCBBQ0NFU1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RPbmxvYWQpCiAgICAgICAg
IHhtbEh0dHBSZXF1ZXN0LT5zZXRPbmxvYWQoMCk7CiAKICAgICB9IGVsc2UgewotICAgICAgICBW
OFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKHhtbEh0dHBSZXF1ZXN0LT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpOwotICAgICAgICBpZiAoIXByb3h5KQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IHByb3h5LT5G
aW5kT3JDcmVhdGVPYmplY3RFdmVudExpc3RlbmVyKHZhbHVlLCBmYWxzZSk7CisgICAgICAgIFJl
ZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdldEV2ZW50TGlzdGVuZXIoeG1sSHR0cFJl
cXVlc3QsIHZhbHVlLCBmYWxzZSk7CiAgICAgICAgIGlmIChsaXN0ZW5lcikgewogICAgICAgICAg
ICAgeG1sSHR0cFJlcXVlc3QtPnNldE9ubG9hZChsaXN0ZW5lci5nZXQoKSk7CiAgICAgICAgICAg
ICBjcmVhdGVIaWRkZW5YSFJEZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVlKTsKQEAgLTE4
MiwxMSArMTg3LDcgQEAgQUNDRVNTT1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25sb2Fkc3RhcnQp
CiAgICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4KICAgICAgICAgeG1sSHR0cFJlcXVlc3Qt
PnNldE9ubG9hZHN0YXJ0KDApOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFY4UHJveHkqIHByb3h5
ID0gVjhQcm94eTo6cmV0cmlldmUoeG1sSHR0cFJlcXVlc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSk7Ci0gICAgICAgIGlmICghcHJveHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gcHJveHktPkZpbmRPckNyZWF0ZU9i
amVjdEV2ZW50TGlzdGVuZXIodmFsdWUsIGZhbHNlKTsKKyAgICAgICAgUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih4bWxIdHRwUmVxdWVzdCwgdmFsdWUs
IGZhbHNlKTsKICAgICAgICAgaWYgKGxpc3RlbmVyKSB7CiAgICAgICAgICAgICB4bWxIdHRwUmVx
dWVzdC0+c2V0T25sb2Fkc3RhcnQobGlzdGVuZXIpOwogICAgICAgICAgICAgY3JlYXRlSGlkZGVu
WEhSRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSk7CkBAIC0yMjAsMTEgKzIyMSw3IEBA
IEFDQ0VTU09SX1NFVFRFUihYTUxIdHRwUmVxdWVzdE9ucHJvZ3Jlc3MpCiAgICAgICAgIC8vIENs
ZWFyIHRoZSBsaXN0ZW5lci4KICAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNldE9ucHJvZ3Jlc3Mo
MCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRy
aWV2ZSh4bWxIdHRwUmVxdWVzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICAgICAg
aWYgKCFwcm94eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+RmluZE9yQ3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5l
cih2YWx1ZSwgZmFsc2UpOworICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIg
PSBnZXRFdmVudExpc3RlbmVyKHhtbEh0dHBSZXF1ZXN0LCB2YWx1ZSwgZmFsc2UpOwogICAgICAg
ICBpZiAobGlzdGVuZXIpIHsKICAgICAgICAgICAgIHhtbEh0dHBSZXF1ZXN0LT5zZXRPbnByb2dy
ZXNzKGxpc3RlbmVyKTsKICAgICAgICAgICAgIGNyZWF0ZUhpZGRlblhIUkRlcGVuZGVuY3koaW5m
by5Ib2xkZXIoKSwgdmFsdWUpOwpAQCAtMjU4LDExICsyNTUsNyBAQCBBQ0NFU1NPUl9TRVRURVIo
WE1MSHR0cFJlcXVlc3RPbnJlYWR5c3RhdGVjaGFuZ2UpCiAgICAgICAgIC8vIENsZWFyIHRoZSBs
aXN0ZW5lci4KICAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNldE9ucmVhZHlzdGF0ZWNoYW5nZSgw
KTsKICAgICB9IGVsc2UgewotICAgICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJp
ZXZlKHhtbEh0dHBSZXF1ZXN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgICAgICBp
ZiAoIXByb3h5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFJlZlB0cjxFdmVudExp
c3RlbmVyPiBsaXN0ZW5lciA9IHByb3h5LT5GaW5kT3JDcmVhdGVPYmplY3RFdmVudExpc3RlbmVy
KHZhbHVlLCBmYWxzZSk7CisgICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9
IGdldEV2ZW50TGlzdGVuZXIoeG1sSHR0cFJlcXVlc3QsIHZhbHVlLCBmYWxzZSk7CiAgICAgICAg
IGlmIChsaXN0ZW5lcikgewogICAgICAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNldE9ucmVhZHlz
dGF0ZWNoYW5nZShsaXN0ZW5lci5nZXQoKSk7CiAgICAgICAgICAgICBjcmVhdGVIaWRkZW5YSFJE
ZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVlKTsKQEAgLTI4NCwxMSArMjc3LDcgQEAgQ0FM
TEJBQ0tfRlVOQ19ERUNMKFhNTEh0dHBSZXF1ZXN0QWRkRXZlbnRMaXN0ZW5lcikKICAgICBJTkNf
U1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCkiKTsKICAgICBYTUxI
dHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxYTUxI
dHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgYXJncy5Ib2xkZXIoKSk7
CiAKLSAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKHhtbEh0dHBSZXF1ZXN0
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIGlmICghcHJveHkpCi0gICAgICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVu
ZXIgPSBwcm94eS0+RmluZE9yQ3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5lcihhcmdzWzFdLCBmYWxz
ZSk7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5l
cih4bWxIdHRwUmVxdWVzdCwgYXJnc1sxXSwgZmFsc2UpOwogICAgIGlmIChsaXN0ZW5lcikgewog
ICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKICAgICAgICAg
Ym9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7CkBAIC0zMDQsMTIgKzI5
Myw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChYTUxIdHRwUmVxdWVzdFJlbW92ZUV2ZW50TGlzdGVu
ZXIpCiAgICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3QucmVtb3ZlRXZlbnRMaXN0ZW5l
cigpIik7CiAgICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhQcm94eTo6VG9O
YXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1Qs
IGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2
ZSh4bWxIdHRwUmVxdWVzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBpZiAoIXBy
b3h5KQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOyAvLyBQcm9iYWJseSBsZWFrZWQu
Ci0KLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+RmluZE9iamVj
dEV2ZW50TGlzdGVuZXIoYXJnc1sxXSwgZmFsc2UpOwotCisgICAgUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih4bWxIdHRwUmVxdWVzdCwgYXJnc1sxXSwg
dHJ1ZSk7CiAgICAgaWYgKGxpc3RlbmVyKSB7CiAgICAgICAgIFN0cmluZyB0eXBlID0gdG9XZWJD
b3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgICAgICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5C
b29sZWFuVmFsdWUoKTsKQEAgLTMzNyw4ICszMjEsMTUgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFhN
TEh0dHBSZXF1ZXN0T3BlbikKIAogICAgIFN0cmluZyBtZXRob2QgPSB0b1dlYkNvcmVTdHJpbmco
YXJnc1swXSk7CiAgICAgU3RyaW5nIHVybHN0cmluZyA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzFd
KTsKLSAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKCk7Ci0gICAgS1VSTCB1
cmwgPSBwcm94eS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsc3RyaW5nKTsK
KyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gMDsKKyNpZiBFTkFCTEUoV09S
S0VSUykKKyAgICBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHByb3h5ID0gV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5OjpyZXRyaWV2ZSgpOworICAgIGlmIChwcm94eSkKKyAgICAgICAg
Y29udGV4dCA9IHByb3h5LT53b3JrZXJDb250ZXh0KCk7CisgICAgZWxzZQorI2VuZGlmCisgICAg
ICAgIGNvbnRleHQgPSBWOFByb3h5OjpyZXRyaWV2ZSgpLT5mcmFtZSgpLT5kb2N1bWVudCgpOwor
ICAgIEtVUkwgdXJsID0gY29udGV4dC0+Y29tcGxldGVVUkwodXJsc3RyaW5nKTsKIAogICAgIGJv
b2wgYXN5bmMgPSAoYXJncy5MZW5ndGgoKSA8IDMpID8gdHJ1ZSA6IGFyZ3NbMl0tPkJvb2xlYW5W
YWx1ZSgpOwogCg==
</data>
<flag name="review"
          id="14583"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29373</attachid>
            <date>2009-04-09 15:18:03 -0700</date>
            <delta_ts>2009-04-09 15:24:59 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>25084_3</filename>
            <type>text/plain</type>
            <size>15313</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NWU3MWFlYi4uZTRhNmYxMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAwOS0wNC0wOSAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXBzdHJlYW0gY2hhbmdlcyB0byBWOCBiaW5kaW5ncyBmb3IgWEhSIHNvIHRo
YXQgaXQgY2FuIHdvcmsgdW5kZXIgZWl0aGVyIERPTVdpbmRvdyBvciBXb3JrZXJDb250ZXh0Lgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUwODQKKwor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmRpc3Bvc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpyZXRyaWV2ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmluaXRDb250
ZXh0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5OjpmaW5kT3JDcmVhdGVFdmVudExpc3RlbmVySGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6RmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lcik6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmZpbmRPckNy
ZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFhN
TEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tf
RlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVz
dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRFdmVudExpc3RlbmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFDQ0VTU09SX1NFVFRFUik6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFD
S19GVU5DX0RFQ0wpOgorCiAyMDA5LTA0LTA5ICBKb2huIEdyYWJvd3NraSAgPGpyZ0BjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCmluZGV4IGQw
NjFlYTIuLjZhZGZkYmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eS5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJWOFBy
b3h5LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJWOFdvcmtlckNvbnRleHRFdmVu
dExpc3RlbmVyLmgiCisjaW5jbHVkZSAiVjhXb3JrZXJDb250ZXh0T2JqZWN0RXZlbnRMaXN0ZW5l
ci5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXJMb2NhdGlv
bi5oIgogI2luY2x1ZGUgIldvcmtlck5hdmlnYXRvci5oIgpAQCAtMTA2LDcgKzEwNyw3IEBAIHZv
aWQgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpkaXNwb3NlKCkKICAgICB2ODo6SGFuZGxl
U2NvcGUgc2NvcGU7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlciA9IGRv
bU9iamVjdE1hcCgpLmdldChtX3dvcmtlckNvbnRleHQpOwogICAgIGlmICghd3JhcHBlci5Jc0Vt
cHR5KCkpCi0gICAgICAgIFY4UHJveHk6OlNldERPTVdyYXBwZXIod3JhcHBlciwgVjhDbGFzc0lu
ZGV4OjpJTlZBTElEX0NMQVNTX0lOREVYLCBOVUxMKTsKKyAgICAgICAgVjhQcm94eTo6U2V0RE9N
V3JhcHBlcih3cmFwcGVyLCBWOENsYXNzSW5kZXg6OklOVkFMSURfQ0xBU1NfSU5ERVgsIDApOwog
ICAgIGRvbU9iamVjdE1hcCgpLmZvcmdldChtX3dvcmtlckNvbnRleHQpOwogfQogCkBAIC0xMTUs
NyArMTE2LDkgQEAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHk6OnJldHJpZXZlKCkKICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250
ZXh0ID0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IGdsb2JhbCA9IGNvbnRleHQtPkdsb2JhbCgpOwogICAgIGdsb2JhbCA9IFY4UHJveHk6Okxv
b2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpXT1JLRVJDT05URVhULCBnbG9iYWwpOwotICAg
IEFTU0VSVCghZ2xvYmFsLklzRW1wdHkoKSk7CisgICAgLy8gUmV0dXJuIDAgaWYgdGhlIGN1cnJl
bnQgZXhlY3V0aW5nIGNvbnRleHQgaXMgbm90IHRoZSB3b3JrZXIgY29udGV4dC4KKyAgICBpZiAo
Z2xvYmFsLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgV29ya2VyQ29udGV4dCog
d29ya2VyQ29udGV4dCA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PFdvcmtlckNvbnRleHQ+KFY4
Q2xhc3NJbmRleDo6V09SS0VSQ09OVEVYVCwgZ2xvYmFsKTsKICAgICByZXR1cm4gd29ya2VyQ29u
dGV4dC0+c2NyaXB0KCktPnByb3h5KCk7CiB9CkBAIC0xMjgsNyArMTMxLDcgQEAgdm9pZCBXb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmluaXRDb250ZXh0SWZOZWVkZWQoKQogCiAgICAgLy8g
Q3JlYXRlIGEgbmV3IGVudmlyb25tZW50CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdFRl
bXBsYXRlPiBnbG9iYWxUZW1wbGF0ZTsKLSAgICBtX2NvbnRleHQgPSB2ODo6Q29udGV4dDo6TmV3
KE5VTEwsIGdsb2JhbFRlbXBsYXRlKTsKKyAgICBtX2NvbnRleHQgPSB2ODo6Q29udGV4dDo6TmV3
KDAsIGdsb2JhbFRlbXBsYXRlKTsKIAogICAgIC8vIFN0YXJ0aW5nIGZyb20gbm93LCB1c2UgbG9j
YWwgY29udGV4dCBvbmx5LgogICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IHY4
OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhtX2NvbnRleHQpOwpAQCAtMzMwLDcgKzMzMyw3IEBA
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cnVuU2Ny
aXB0KHY4OjpIYW5kbGU8djg6OlNjcmlwCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUGFzc1Jl
ZlB0cjxWOEV2ZW50TGlzdGVuZXI+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6RmluZE9y
Q3JlYXRlRXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6OlZhbHVlPiBvYmplY3QsIGJvb2wgaXNJ
bmxpbmUsIGJvb2wgZmluZE9ubHkpCitQYXNzUmVmUHRyPFY4RXZlbnRMaXN0ZW5lcj4gV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5OjpmaW5kT3JDcmVhdGVFdmVudExpc3RlbmVySGVscGVyKHY4
OjpMb2NhbDx2ODo6VmFsdWU+IG9iamVjdCwgYm9vbCBpc0lubGluZSwgYm9vbCBmaW5kT25seSwg
Ym9vbCBjcmVhdGVPYmplY3RFdmVudExpc3RlbmVyKQogewogICAgIGlmICghb2JqZWN0LT5Jc09i
amVjdCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTM0MCw3ICszNDMsMTEgQEAgUGFzc1JlZlB0
cjxWOEV2ZW50TGlzdGVuZXI+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6RmluZE9yQ3Jl
YXRlRXZlbnRMaXN0ZW4KICAgICAgICAgcmV0dXJuIGxpc3RlbmVyOwogCiAgICAgLy8gQ3JlYXRl
IGEgbmV3IG9uZSwgYW5kIGFkZCB0byBjYWNoZS4KLSAgICBSZWZQdHI8VjhXb3JrZXJDb250ZXh0
RXZlbnRMaXN0ZW5lcj4gbmV3TGlzdGVuZXIgPSBWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVy
OjpjcmVhdGUodGhpcywgdjg6OkxvY2FsPHY4OjpPYmplY3Q+OjpDYXN0KG9iamVjdCksIGlzSW5s
aW5lKTsKKyAgICBSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBuZXdMaXN0ZW5lcjsKKyAgICBpZiAo
Y3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5lcikKKyAgICAgICAgbmV3TGlzdGVuZXIgPSBWOFdvcmtl
ckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyOjpjcmVhdGUodGhpcywgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+OjpDYXN0KG9iamVjdCksIGlzSW5saW5lKTsKKyAgICBlbHNlCisgICAgICAgIG5ld0xp
c3RlbmVyID0gVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKHRoaXMsIHY4OjpM
b2NhbDx2ODo6T2JqZWN0Pjo6Q2FzdChvYmplY3QpLCBpc0lubGluZSk7CiAgICAgewogICAgICAg
ICAvLyBOZWVkIHRvIHVzZSBsb2NrIHNpbmNlIFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmFkZCgpIGNy
ZWF0ZXMgSGFuZGxlU2NvcGUuCiAgICAgICAgIHY4OjpMb2NrZXIgbG9ja2VyOwpAQCAtMzUwLDYg
KzM1NywxNiBAQCBQYXNzUmVmUHRyPFY4RXZlbnRMaXN0ZW5lcj4gV29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5OjpGaW5kT3JDcmVhdGVFdmVudExpc3RlbgogICAgIHJldHVybiBuZXdMaXN0ZW5l
ci5yZWxlYXNlKCk7CiB9CiAKK1Bhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBXb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHk6OkZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuZXIodjg6OkxvY2FsPHY4
OjpWYWx1ZT4gb2JqZWN0LCBib29sIGlzSW5saW5lLCBib29sIGZpbmRPbmx5KQoreworICAgIHJl
dHVybiBmaW5kT3JDcmVhdGVFdmVudExpc3RlbmVySGVscGVyKG9iamVjdCwgaXNJbmxpbmUsIGZp
bmRPbmx5LCBmYWxzZSk7Cit9CisKK1Bhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBXb3JrZXJD
b250ZXh0RXhlY3V0aW9uUHJveHk6OmZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIodjg6
OkxvY2FsPHY4OjpWYWx1ZT4gb2JqZWN0LCBib29sIGlzSW5saW5lLCBib29sIGZpbmRPbmx5KQor
eworICAgIHJldHVybiBmaW5kT3JDcmVhdGVFdmVudExpc3RlbmVySGVscGVyKG9iamVjdCwgaXNJ
bmxpbmUsIGZpbmRPbmx5LCB0cnVlKTsKK30KKwogdm9pZCBXb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHk6OlJlbW92ZUV2ZW50TGlzdGVuZXIoVjhFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKIHsK
ICAgICAvLyBOZWVkIHRvIHVzZSBsb2NrIHNpbmNlIFY4RXZlbnRMaXN0ZW5lckxpc3Q6OnJlbW92
ZSgpIGNyZWF0ZXMgSGFuZGxlU2NvcGUuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaAppbmRleCA3MGY5ZmM1Li4zZjA3Mzc3IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgKQEAg
LTY0LDYgKzY0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IEV2ZW50VGFyZ2V0VG9WOE9iamVjdChFdmVudFRhcmdldCogdGFyZ2V0
KTsKICAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0VG9W
OE9iamVjdChXb3JrZXJDb250ZXh0KiB3Yyk7CiAKKyAgICAgICAgLy8gRmluZHMvY3JlYXRlcyBl
dmVudCBsaXN0ZW5lciB3cmFwcGVycy4KKyAgICAgICAgUGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVu
ZXI+IGZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIodjg6OkxvY2FsPHY4OjpWYWx1ZT4g
b2JqZWN0LCBib29sIGlzSW5saW5lLCBib29sIGZpbmRPbmx5KTsKKwogICAgICAgICAvLyBUcmFj
ayB0aGUgZXZlbnQgc28gdGhhdCB3ZSBjYW4gZGV0YWNoIGl0IGZyb20gdGhlIEpTIHdyYXBwZXIg
d2hlbiBhIHdvcmtlcgogICAgICAgICAvLyB0ZXJtaW5hdGVzLiBUaGlzIGlzIG5lZWRlZCBiZWNh
dXNlIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBkaXNwb3NlIHRoZXNlCiAgICAgICAgIC8vIGV2ZW50
cyBhbmQgcmVsZWFzZXMgcmVmZXJlbmNlcyB0byB0aGVpciBldmVudCB0YXJnZXRzOiBXb3JrZXJD
b250ZXh0LgpAQCAtNzUsNyArNzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8v
IFJldHVybnMgV29ya2VyQ29udGV4dCBvYmplY3QuCiAgICAgICAgIFdvcmtlckNvbnRleHQqIHdv
cmtlckNvbnRleHQoKSB7IHJldHVybiBtX3dvcmtlckNvbnRleHQ7IH0KIAotICAgICAgICAvLyBS
ZXR1cm5zIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSBvYmplY3Qgb2YgdGhlIGN1cnJlbnRs
eSBleGVjdXRpbmcgY29udGV4dC4KKyAgICAgICAgLy8gUmV0dXJucyBXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHkgb2JqZWN0IG9mIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGNvbnRleHQuIDAg
d2lsbCBiZSByZXR1cm5lZCBpZiB0aGUgY3VycmVudCBleGVjdXRpbmcgY29udGV4dCBpcyBub3Qg
dGhlIHdvcmtlciBjb250ZXh0LgogICAgICAgICBzdGF0aWMgV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5KiByZXRyaWV2ZSgpOwogCiAgICAgICAgIC8vIEVuYWJsZXMgSFRNTDUgd29ya2VyIHN1
cHBvcnQuCkBAIC04NSw2ICs4OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcml2YXRl
OgogICAgICAgICB2b2lkIGluaXRDb250ZXh0SWZOZWVkZWQoKTsKICAgICAgICAgdm9pZCBkaXNw
b3NlKCk7CisgICAgICAgIFBhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBmaW5kT3JDcmVhdGVF
dmVudExpc3RlbmVySGVscGVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+IG9iamVjdCwgYm9vbCBpc0lu
bGluZSwgYm9vbCBmaW5kT25seSwgYm9vbCBjcmVhdGVPYmplY3RFdmVudExpc3RlbmVyKTsKIAog
ICAgICAgICAvLyBSdW4gYW4gYWxyZWFkeSBjb21waWxlZCBzY3JpcHQuCiAgICAgICAgIHY4OjpM
b2NhbDx2ODo6VmFsdWU+IHJ1blNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+KTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDb25zdHJ1
Y3Rvci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29u
c3RydWN0b3IuY3BwCmluZGV4IDZiNTUyMzguLmM5MTNjMDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHAKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNw
cApAQCAtMzYsNiArMzYsOCBAQAogI2luY2x1ZGUgIlY4T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgog
I2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdC5oIgorI2luY2x1
ZGUgIldvcmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJv
eHkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00OCw4ICs1MCwxNSBAQCBDQUxMQkFD
S19GVU5DX0RFQ0woWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvcikKIAogICAgIC8vIEV4cGVjdCBu
byBwYXJhbWV0ZXJzLgogICAgIC8vIEFsbG9jYXRlIGEgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0IGFz
IGl0cyBpbnRlcm5hbCBmaWVsZC4KLSAgICBEb2N1bWVudCogZG9jID0gVjhQcm94eTo6cmV0cmll
dmVGcmFtZSgpLT5kb2N1bWVudCgpOwotICAgIFJlZlB0cjxYTUxIdHRwUmVxdWVzdD4geG1sSHR0
cFJlcXVlc3QgPSBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlKGRvYyk7CisgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCA9IDA7CisjaWYgRU5BQkxFKFdPUktFUlMpCisgICAgV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5KiBwcm94eSA9IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eTo6cmV0cmlldmUoKTsKKyAgICBpZiAocHJveHkpCisgICAgICAgIGNvbnRleHQgPSBwcm94eS0+
d29ya2VyQ29udGV4dCgpOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBjb250ZXh0ID0gVjhQ
cm94eTo6cmV0cmlldmVGcmFtZSgpLT5kb2N1bWVudCgpOworICAgIFJlZlB0cjxYTUxIdHRwUmVx
dWVzdD4geG1sSHR0cFJlcXVlc3QgPSBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQpOwog
ICAgIFY4UHJveHk6OlNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgVjhDbGFzc0luZGV4OjpU
b0ludChWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUKSwgeG1sSHR0cFJlcXVlc3QuZ2V0KCkp
OwogCiAgICAgLy8gQWRkIG9iamVjdCB0byB0aGUgd3JhcHBlciBtYXAuCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcCBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCmluZGV4
IGVhNjlmMGIuLmE4MGNmNTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCkBAIC0zOSw5ICszOSwyNiBAQAogI2luY2x1
ZGUgIlY4T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNs
dWRlICJWOFhNTEh0dHBSZXF1ZXN0VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4
dC5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK1Bhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5l
cihYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZh
bHVlLCBib29sIGZpbmRPbmx5KQoreworI2lmIEVOQUJMRShXT1JLRVJTKQorICAgIFdvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eSogd29ya2VyQ29udGV4dFByb3h5ID0gV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5OjpyZXRyaWV2ZSgpOworICAgIGlmICh3b3JrZXJDb250ZXh0UHJveHkpCisg
ICAgICAgIHJldHVybiB3b3JrZXJDb250ZXh0UHJveHktPmZpbmRPckNyZWF0ZU9iamVjdEV2ZW50
TGlzdGVuZXIodmFsdWUsIGZhbHNlLCBmaW5kT25seSk7CisjZW5kaWYKKworICAgIFY4UHJveHkq
IHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoeG1sSHR0cFJlcXVlc3QtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSk7CisgICAgaWYgKHByb3h5KQorICAgICAgICByZXR1cm4gZmluZE9ubHkgPyBw
cm94eS0+RmluZE9iamVjdEV2ZW50TGlzdGVuZXIodmFsdWUsIGZhbHNlKSA6IHByb3h5LT5GaW5k
T3JDcmVhdGVPYmplY3RFdmVudExpc3RlbmVyKHZhbHVlLCBmYWxzZSk7CisKKyAgICByZXR1cm4g
UGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPigpOworfQorCiBBQ0NFU1NPUl9HRVRURVIoWE1MSHR0
cFJlcXVlc3RPbmFib3J0KQogewogICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0Lm9u
YWJvcnQuX2dldCIpOwpAQCAtNjgsMTEgKzg1LDcgQEAgQUNDRVNTT1JfU0VUVEVSKFhNTEh0dHBS
ZXF1ZXN0T25hYm9ydCkKICAgICAgICAgLy8gQ2xlYXIgdGhlIGxpc3RlbmVyLgogICAgICAgICB4
bWxIdHRwUmVxdWVzdC0+c2V0T25hYm9ydCgwKTsKICAgICB9IGVsc2UgewotICAgICAgICBWOFBy
b3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKHhtbEh0dHBSZXF1ZXN0LT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpOwotICAgICAgICBpZiAoIXByb3h5KQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IHByb3h5LT5GaW5k
T3JDcmVhdGVPYmplY3RFdmVudExpc3RlbmVyKHZhbHVlLCBmYWxzZSk7CisgICAgICAgIFJlZlB0
cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdldEV2ZW50TGlzdGVuZXIoeG1sSHR0cFJlcXVl
c3QsIHZhbHVlLCBmYWxzZSk7CiAgICAgICAgIGlmIChsaXN0ZW5lcikgewogICAgICAgICAgICAg
eG1sSHR0cFJlcXVlc3QtPnNldE9uYWJvcnQobGlzdGVuZXIpOwogICAgICAgICAgICAgY3JlYXRl
SGlkZGVuWEhSRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSk7CkBAIC0xMDYsMTEgKzEx
OSw3IEBAIEFDQ0VTU09SX1NFVFRFUihYTUxIdHRwUmVxdWVzdE9uZXJyb3IpCiAgICAgICAgIC8v
IENsZWFyIHRoZSBsaXN0ZW5lci4KICAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNldE9uZXJyb3Io
MCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRy
aWV2ZSh4bWxIdHRwUmVxdWVzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICAgICAg
aWYgKCFwcm94eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+RmluZE9yQ3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5l
cih2YWx1ZSwgZmFsc2UpOworICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIg
PSBnZXRFdmVudExpc3RlbmVyKHhtbEh0dHBSZXF1ZXN0LCB2YWx1ZSwgZmFsc2UpOwogICAgICAg
ICBpZiAobGlzdGVuZXIpIHsKICAgICAgICAgICAgIHhtbEh0dHBSZXF1ZXN0LT5zZXRPbmVycm9y
KGxpc3RlbmVyKTsKICAgICAgICAgICAgIGNyZWF0ZUhpZGRlblhIUkRlcGVuZGVuY3koaW5mby5I
b2xkZXIoKSwgdmFsdWUpOwpAQCAtMTQ0LDExICsxNTMsNyBAQCBBQ0NFU1NPUl9TRVRURVIoWE1M
SHR0cFJlcXVlc3RPbmxvYWQpCiAgICAgICAgIHhtbEh0dHBSZXF1ZXN0LT5zZXRPbmxvYWQoMCk7
CiAKICAgICB9IGVsc2UgewotICAgICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJp
ZXZlKHhtbEh0dHBSZXF1ZXN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgICAgICBp
ZiAoIXByb3h5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFJlZlB0cjxFdmVudExp
c3RlbmVyPiBsaXN0ZW5lciA9IHByb3h5LT5GaW5kT3JDcmVhdGVPYmplY3RFdmVudExpc3RlbmVy
KHZhbHVlLCBmYWxzZSk7CisgICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9
IGdldEV2ZW50TGlzdGVuZXIoeG1sSHR0cFJlcXVlc3QsIHZhbHVlLCBmYWxzZSk7CiAgICAgICAg
IGlmIChsaXN0ZW5lcikgewogICAgICAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNldE9ubG9hZChs
aXN0ZW5lci5nZXQoKSk7CiAgICAgICAgICAgICBjcmVhdGVIaWRkZW5YSFJEZXBlbmRlbmN5KGlu
Zm8uSG9sZGVyKCksIHZhbHVlKTsKQEAgLTE4MiwxMSArMTg3LDcgQEAgQUNDRVNTT1JfU0VUVEVS
KFhNTEh0dHBSZXF1ZXN0T25sb2Fkc3RhcnQpCiAgICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5l
ci4KICAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNldE9ubG9hZHN0YXJ0KDApOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoeG1sSHR0cFJl
cXVlc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgICAgIGlmICghcHJveHkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3Rl
bmVyID0gcHJveHktPkZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIodmFsdWUsIGZhbHNl
KTsKKyAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0
ZW5lcih4bWxIdHRwUmVxdWVzdCwgdmFsdWUsIGZhbHNlKTsKICAgICAgICAgaWYgKGxpc3RlbmVy
KSB7CiAgICAgICAgICAgICB4bWxIdHRwUmVxdWVzdC0+c2V0T25sb2Fkc3RhcnQobGlzdGVuZXIp
OwogICAgICAgICAgICAgY3JlYXRlSGlkZGVuWEhSRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2
YWx1ZSk7CkBAIC0yMjAsMTEgKzIyMSw3IEBAIEFDQ0VTU09SX1NFVFRFUihYTUxIdHRwUmVxdWVz
dE9ucHJvZ3Jlc3MpCiAgICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4KICAgICAgICAgeG1s
SHR0cFJlcXVlc3QtPnNldE9ucHJvZ3Jlc3MoMCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgVjhQ
cm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZSh4bWxIdHRwUmVxdWVzdC0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKTsKLSAgICAgICAgaWYgKCFwcm94eSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+Rmlu
ZE9yQ3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5lcih2YWx1ZSwgZmFsc2UpOworICAgICAgICBSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVyKHhtbEh0dHBSZXF1
ZXN0LCB2YWx1ZSwgZmFsc2UpOwogICAgICAgICBpZiAobGlzdGVuZXIpIHsKICAgICAgICAgICAg
IHhtbEh0dHBSZXF1ZXN0LT5zZXRPbnByb2dyZXNzKGxpc3RlbmVyKTsKICAgICAgICAgICAgIGNy
ZWF0ZUhpZGRlblhIUkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdmFsdWUpOwpAQCAtMjU4LDEx
ICsyNTUsNyBAQCBBQ0NFU1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RPbnJlYWR5c3RhdGVjaGFu
Z2UpCiAgICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4KICAgICAgICAgeG1sSHR0cFJlcXVl
c3QtPnNldE9ucmVhZHlzdGF0ZWNoYW5nZSgwKTsKICAgICB9IGVsc2UgewotICAgICAgICBWOFBy
b3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKHhtbEh0dHBSZXF1ZXN0LT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpOwotICAgICAgICBpZiAoIXByb3h5KQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IHByb3h5LT5GaW5k
T3JDcmVhdGVPYmplY3RFdmVudExpc3RlbmVyKHZhbHVlLCBmYWxzZSk7CisgICAgICAgIFJlZlB0
cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdldEV2ZW50TGlzdGVuZXIoeG1sSHR0cFJlcXVl
c3QsIHZhbHVlLCBmYWxzZSk7CiAgICAgICAgIGlmIChsaXN0ZW5lcikgewogICAgICAgICAgICAg
eG1sSHR0cFJlcXVlc3QtPnNldE9ucmVhZHlzdGF0ZWNoYW5nZShsaXN0ZW5lci5nZXQoKSk7CiAg
ICAgICAgICAgICBjcmVhdGVIaWRkZW5YSFJEZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVl
KTsKQEAgLTI4NCwxMSArMjc3LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFhNTEh0dHBSZXF1ZXN0
QWRkRXZlbnRMaXN0ZW5lcikKICAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdC5hZGRF
dmVudExpc3RlbmVyKCkiKTsKICAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBW
OFByb3h5OjpUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxI
VFRQUkVRVUVTVCwgYXJncy5Ib2xkZXIoKSk7CiAKLSAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJv
eHk6OnJldHJpZXZlKHhtbEh0dHBSZXF1ZXN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwot
ICAgIGlmICghcHJveHkpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+RmluZE9yQ3JlYXRlT2JqZWN0
RXZlbnRMaXN0ZW5lcihhcmdzWzFdLCBmYWxzZSk7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih4bWxIdHRwUmVxdWVzdCwgYXJnc1sxXSwgZmFs
c2UpOwogICAgIGlmIChsaXN0ZW5lcikgewogICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29y
ZVN0cmluZyhhcmdzWzBdKTsKICAgICAgICAgYm9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9v
bGVhblZhbHVlKCk7CkBAIC0zMDQsMTIgKzI5Myw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChYTUxI
dHRwUmVxdWVzdFJlbW92ZUV2ZW50TGlzdGVuZXIpCiAgICAgSU5DX1NUQVRTKCJET00uWE1MSHR0
cFJlcXVlc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigpIik7CiAgICAgWE1MSHR0cFJlcXVlc3QqIHht
bEh0dHBSZXF1ZXN0ID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4
Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgVjhQcm94
eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZSh4bWxIdHRwUmVxdWVzdC0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKTsKLSAgICBpZiAoIXByb3h5KQotICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOyAvLyBQcm9iYWJseSBsZWFrZWQuCi0KLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
bGlzdGVuZXIgPSBwcm94eS0+RmluZE9iamVjdEV2ZW50TGlzdGVuZXIoYXJnc1sxXSwgZmFsc2Up
OwotCisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5l
cih4bWxIdHRwUmVxdWVzdCwgYXJnc1sxXSwgdHJ1ZSk7CiAgICAgaWYgKGxpc3RlbmVyKSB7CiAg
ICAgICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgICAgICBi
b29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKQEAgLTMzNyw4ICszMjEs
MTUgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFhNTEh0dHBSZXF1ZXN0T3BlbikKIAogICAgIFN0cmlu
ZyBtZXRob2QgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAgU3RyaW5nIHVybHN0cmlu
ZyA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzFdKTsKLSAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJv
eHk6OnJldHJpZXZlKCk7Ci0gICAgS1VSTCB1cmwgPSBwcm94eS0+ZnJhbWUoKS0+ZG9jdW1lbnQo
KS0+Y29tcGxldGVVUkwodXJsc3RyaW5nKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0ID0gMDsKKyNpZiBFTkFCTEUoV09SS0VSUykKKyAgICBXb3JrZXJDb250ZXh0RXhlY3V0
aW9uUHJveHkqIHByb3h5ID0gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpyZXRyaWV2ZSgp
OworICAgIGlmIChwcm94eSkKKyAgICAgICAgY29udGV4dCA9IHByb3h5LT53b3JrZXJDb250ZXh0
KCk7CisgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGNvbnRleHQgPSBWOFByb3h5OjpyZXRyaWV2
ZSgpLT5mcmFtZSgpLT5kb2N1bWVudCgpOworICAgIEtVUkwgdXJsID0gY29udGV4dC0+Y29tcGxl
dGVVUkwodXJsc3RyaW5nKTsKIAogICAgIGJvb2wgYXN5bmMgPSAoYXJncy5MZW5ndGgoKSA8IDMp
ID8gdHJ1ZSA6IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwogCg==
</data>
<flag name="review"
          id="14604"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>