<?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>63231</bug_id>
          
          <creation_ts>2011-06-22 23:59:46 -0700</creation_ts>
          <short_desc>SharedBufferChunkReader does not deal properly with non printable characters</short_desc>
          <delta_ts>2011-06-23 13:07:26 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jay Civelli">jcivelli</reporter>
          <assigned_to name="Jay Civelli">jcivelli</assigned_to>
          <cc>abarth</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>425983</commentid>
    <comment_count>0</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-06-22 23:59:46 -0700</bug_when>
    <thetext>The SharedBUfferChunkReader class currently returns a String when reading a chunk of data.
This does not work well with binary data.
To deal properly with binary data it should use Vector&lt;char&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426001</commentid>
    <comment_count>1</comment_count>
      <attachid>98320</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-06-23 00:50:56 -0700</bug_when>
    <thetext>Created attachment 98320
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426238</commentid>
    <comment_count>2</comment_count>
      <attachid>98320</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-23 09:52:46 -0700</bug_when>
    <thetext>Comment on attachment 98320
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        Fixing the SharedBufferChunkReader API so it works correctly with
&gt; +        binary data (non printable characters).
&gt; +        Also adding a method to peek at the data (this is needed for MHTML
&gt; +        with binary parts).

I&apos;m slightly confused as to what this patch is doing.  Is this changing any observable behavior?  If so, we should add a test.  This patch also appears to introduce some functions that aren&apos;t used.  Is there a subsequent patch that will use these functions?

&gt; Source/WebCore/platform/SharedBufferChunkReader.cpp:84
&gt; +                    chunk.append(m_separator.data(), m_separatorIndex);

Can you add an assert that m_separatorIndex &lt;= m_separator.size() ?

&gt; Source/WebCore/platform/SharedBufferChunkReader.cpp:110
&gt; +    return false; // Compiler is unhappy without this.

Rather than have this comment, we usually ASSERT_NOT_REACHED()

&gt; Source/WebCore/platform/SharedBufferChunkReader.cpp:113
&gt; +String SharedBufferChunkReader::nextChunkAsUTF8String(bool includeSeparator)

Should we say nextChunkAsUTF8StringWithLatin1Fallback ?

&gt; Source/WebCore/platform/SharedBufferChunkReader.h:57
&gt; +    // Reads size bytes at the current location in the buffer, without changing the buffer position.
&gt; +    // Returns the number of bytes read. That number might be less than the specified size if the end of the buffer was reached.
&gt; +    size_t peek(Vector&lt;char&gt;&amp;, size_t);

This function doesn&apos;t appear to be used yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426274</commentid>
    <comment_count>3</comment_count>
      <attachid>98320</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-06-23 10:35:02 -0700</bug_when>
    <thetext>Comment on attachment 98320
Patch

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

&gt;&gt; Source/WebCore/platform/SharedBufferChunkReader.cpp:84
&gt;&gt; +                    chunk.append(m_separator.data(), m_separatorIndex);
&gt; 
&gt; Can you add an assert that m_separatorIndex &lt;= m_separator.size() ?

Done.

&gt;&gt; Source/WebCore/platform/SharedBufferChunkReader.cpp:110
&gt;&gt; +    return false; // Compiler is unhappy without this.
&gt; 
&gt; Rather than have this comment, we usually ASSERT_NOT_REACHED()

Done.

&gt;&gt; Source/WebCore/platform/SharedBufferChunkReader.cpp:113
&gt;&gt; +String SharedBufferChunkReader::nextChunkAsUTF8String(bool includeSeparator)
&gt; 
&gt; Should we say nextChunkAsUTF8StringWithLatin1Fallback ?

Done.

&gt;&gt; Source/WebCore/platform/SharedBufferChunkReader.h:57
&gt;&gt; +    size_t peek(Vector&lt;char&gt;&amp;, size_t);
&gt; 
&gt; This function doesn&apos;t appear to be used yet.

Yes, I need it for the MHTML binary part support.
I have local unittest testing it. As soon as we have the unit-tests for WebCore working I&apos;ll add them.
I&apos;ll upload them my unit-test to this bug so they are not lost.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426282</commentid>
    <comment_count>4</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-06-23 10:38:04 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 98320 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98320&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        Fixing the SharedBufferChunkReader API so it works correctly with
&gt; &gt; +        binary data (non printable characters).
&gt; &gt; +        Also adding a method to peek at the data (this is needed for MHTML
&gt; &gt; +        with binary parts).
&gt; 
&gt; I&apos;m slightly confused as to what this patch is doing.  Is this changing any observable behavior?  If so, we should add a test.  This patch also appears to introduce some functions that aren&apos;t used.  Is there a subsequent patch that will use these functions?

Sorry for the confusion.
My goal here is to change the API so it deals correctly with binary data.
This is needed for an upcoming patch that allows binary parts in MHTML files.
There are several issues with using String in this API when dealing with binary data:
- each byte is transformed to a UTF16 char, using 2 bytes when it could use only one
- when getting the data out of the string non UTF characters get messed up

The peek method is also something I introduce as I&apos;ll need it for my upcoming patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426300</commentid>
    <comment_count>5</comment_count>
      <attachid>98370</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-06-23 10:54:46 -0700</bug_when>
    <thetext>Created attachment 98370
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426306</commentid>
    <comment_count>6</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-06-23 10:58:25 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 98320 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98320&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; &gt; +        Fixing the SharedBufferChunkReader API so it works correctly with
&gt; &gt; &gt; +        binary data (non printable characters).
&gt; &gt; &gt; +        Also adding a method to peek at the data (this is needed for MHTML
&gt; &gt; &gt; +        with binary parts).
&gt; &gt; 
&gt; &gt; I&apos;m slightly confused as to what this patch is doing.  Is this changing any observable behavior?  If so, we should add a test.  This patch also appears to introduce some functions that aren&apos;t used.  Is there a subsequent patch that will use these functions?
&gt; 
&gt; Sorry for the confusion.
&gt; My goal here is to change the API so it deals correctly with binary data.
&gt; This is needed for an upcoming patch that allows binary parts in MHTML files.
&gt; There are several issues with using String in this API when dealing with binary data:
&gt; - each byte is transformed to a UTF16 char, using 2 bytes when it could use only one
&gt; - when getting the data out of the string non UTF characters get messed up
&gt; 
&gt; The peek method is also something I introduce as I&apos;ll need it for my upcoming patch.

And also, this does not change any current behavior and the mhtml layout-tests ensure this did not break the MHTML support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426307</commentid>
    <comment_count>7</comment_count>
      <attachid>98370</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-23 11:01:08 -0700</bug_when>
    <thetext>Comment on attachment 98370
Patch

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426359</commentid>
    <comment_count>8</comment_count>
      <attachid>98370</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-23 12:29:49 -0700</bug_when>
    <thetext>Comment on attachment 98370
Patch

Clearing flags on attachment: 98370

Committed r89599: &lt;http://trac.webkit.org/changeset/89599&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426360</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-23 12:29:53 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426389</commentid>
    <comment_count>10</comment_count>
      <attachid>98384</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-06-23 13:07:26 -0700</bug_when>
    <thetext>Created attachment 98384
Unit-tests

Unit-tests that should be added to TestWebKitAPI once it has the WebCore dependency.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98320</attachid>
            <date>2011-06-23 00:50:56 -0700</date>
            <delta_ts>2011-06-23 10:54:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63231-20110623005053.patch</filename>
            <type>text/plain</type>
            <size>10587</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODkzMzUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjOTVjZDQ4MWNiNjBhZTI3
N2U4NTJhMTgyYzk2NzY1YzQzNzdlZmFlLi4zMGM3NjllNmRjYWZmYzNmYjZmOTdiOTZmZDNhNDFh
Y2ViZTYyNDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDYtMjIgIEpheSBD
aXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeGluZyB0aGUgU2hhcmVkQnVmZmVyQ2h1bmtSZWFk
ZXIgQVBJIHNvIGl0IHdvcmtzIGNvcnJlY3RseSB3aXRoCisgICAgICAgIGJpbmFyeSBkYXRhIChu
b24gcHJpbnRhYmxlIGNoYXJhY3RlcnMpLgorICAgICAgICBBbHNvIGFkZGluZyBhIG1ldGhvZCB0
byBwZWVrIGF0IHRoZSBkYXRhICh0aGlzIGlzIG5lZWRlZCBmb3IgTUhUTUwKKyAgICAgICAgd2l0
aCBiaW5hcnkgcGFydHMpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjMyMzEKKworICAgICAgICAqIGxvYWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFy
c2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNraXBMaW5lc1VudGlsQm91bmRhcnlGb3VuZCk6
CisgICAgICAgIChXZWJDb3JlOjpNSFRNTFBhcnNlcjo6cGFyc2VOZXh0UGFydCk6CisgICAgICAg
ICogbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9TaGFyZWRCdWZmZXJDaHVua1JlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRC
dWZmZXJDaHVua1JlYWRlcjo6U2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXI6OnNldFNlcGFyYXRvcik6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRCdWZmZXJDaHVua1JlYWRlcjo6bmV4dENodW5rKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyOjpuZXh0Q2h1bmtBc1VURjhTdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXI6OnBlZWspOgorICAgICAg
ICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlckNodW5rUmVhZGVyLmg6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJldHJpZXZlS2V5
VmFsdWVQYWlycyk6CisKIDIwMTEtMDYtMjAgIERhaSBNaWt1cnViZSAgPGRtaWt1cnViZUBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNlci5jcHAKaW5kZXgg
ODRhMjZlZDUwMjQ2OThkODQ3MWI3OGQ3NGU5M2U3MTdmZGNkZDA5OS4uNDA5NjIzODc2OWQ2NjMx
MDgwNDE1ODdhNjMxYTQyNmVhNjMzYzUzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcApAQCAtNDYsNyArNDYsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgYm9vbCBza2lwTGluZXNVbnRpbEJvdW5kYXJ5Rm91bmQo
U2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXImIGxpbmVSZWFkZXIsIGNvbnN0IFN0cmluZyYgYm91bmRh
cnkpCiB7CiAgICAgU3RyaW5nIGxpbmU7Ci0gICAgd2hpbGUgKCEobGluZSA9IGxpbmVSZWFkZXIu
bmV4dENodW5rKCkpLmlzTnVsbCgpKSB7CisgICAgd2hpbGUgKCEobGluZSA9IGxpbmVSZWFkZXIu
bmV4dENodW5rQXNVVEY4U3RyaW5nKCkpLmlzTnVsbCgpKSB7CiAgICAgICAgIGlmIChsaW5lID09
IGJvdW5kYXJ5KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTQ3LDcgKzE0
Nyw3IEBAIFBhc3NSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBNSFRNTFBhcnNlcjo6cGFyc2VOZXh0
UGFydChjb25zdCBNSU1FSGVhZGVyJiBtaW1lSGVhCiAgICAgY29uc3QgYm9vbCBjaGVja0JvdW5k
YXJ5ID0gIWVuZE9mUGFydEJvdW5kYXJ5LmlzRW1wdHkoKTsKICAgICBib29sIGVuZE9mUGFydFJl
YWNoZWQgPSBmYWxzZTsKICAgICBTdHJpbmcgbGluZTsKLSAgICB3aGlsZSAoIShsaW5lID0gbV9s
aW5lUmVhZGVyLm5leHRDaHVuaygpKS5pc051bGwoKSkgeworICAgIHdoaWxlICghKGxpbmUgPSBt
X2xpbmVSZWFkZXIubmV4dENodW5rQXNVVEY4U3RyaW5nKCkpLmlzTnVsbCgpKSB7CiAgICAgICAg
IGlmIChjaGVja0JvdW5kYXJ5ICYmIChsaW5lID09IGVuZE9mUGFydEJvdW5kYXJ5IHx8IGxpbmUg
PT0gZW5kT2ZEb2N1bWVudEJvdW5kYXJ5KSkgewogICAgICAgICAgICAgZW5kT2ZBcmNoaXZlUmVh
Y2hlZCA9IChsaW5lID09IGVuZE9mRG9jdW1lbnRCb3VuZGFyeSk7CiAgICAgICAgICAgICBlbmRP
ZlBhcnRSZWFjaGVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9taHRtbC9NSFRNTFBhcnNlci5oCmluZGV4IDA0M2M1MGY0NmI4ZDk1YTFlZTczYWMyNDIxNWJk
ZGRkMTlhNmMyOWQuLjFiZDNmZWVmOGJkYWU4YmYzZTBjZGJmODZlZTE3NmZlNjlhYjNhMTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2Vy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIu
aApAQCAtMzQsNiArMzQsNyBAQAogI2lmIEVOQUJMRShNSFRNTCkKICNpbmNsdWRlICJTaGFyZWRC
dWZmZXJDaHVua1JlYWRlci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1
ZmZlckNodW5rUmVhZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZl
ckNodW5rUmVhZGVyLmNwcAppbmRleCBiODhmODliNjQ1MWViOTMyMGRiMDhmZjU3YjRmODdlM2My
OWQ5ZmYwLi5mMGIyNjk4MjRhYzE0MzZlYWVmOTIwY2NlNTkyYTgyYWU5NzViM2Q3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXJDaHVua1JlYWRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuY3Bw
CkBAIC0zMiwxMSArMzIsMTAgQEAKICNpbmNsdWRlICJTaGFyZWRCdWZmZXJDaHVua1JlYWRlci5o
IgogCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNoYXJlZEJ1ZmZlckNodW5rUmVh
ZGVyOjpTaGFyZWRCdWZmZXJDaHVua1JlYWRlcihTaGFyZWRCdWZmZXIqIGJ1ZmZlciwgY29uc3Qg
U3RyaW5nJiBzZXBhcmF0b3IpCitTaGFyZWRCdWZmZXJDaHVua1JlYWRlcjo6U2hhcmVkQnVmZmVy
Q2h1bmtSZWFkZXIoU2hhcmVkQnVmZmVyKiBidWZmZXIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgc2Vw
YXJhdG9yKQogICAgIDogbV9idWZmZXIoYnVmZmVyKQogICAgICwgbV9idWZmZXJQb3NpdGlvbigw
KQogICAgICwgbV9zZWdtZW50KDApCkBAIC00OCwzNCArNDcsNTIgQEAgU2hhcmVkQnVmZmVyQ2h1
bmtSZWFkZXI6OlNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyKFNoYXJlZEJ1ZmZlciogYnVmZmVyLCBj
b25zdCBTdHIKIHsKIH0KIAotdm9pZCBTaGFyZWRCdWZmZXJDaHVua1JlYWRlcjo6c2V0U2VwYXJh
dG9yKGNvbnN0IFN0cmluZyYgc2VwYXJhdG9yKQorU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXI6OlNo
YXJlZEJ1ZmZlckNodW5rUmVhZGVyKFNoYXJlZEJ1ZmZlciogYnVmZmVyLCBjb25zdCBjaGFyKiBz
ZXBhcmF0b3IpCisgICAgOiBtX2J1ZmZlcihidWZmZXIpCisgICAgLCBtX2J1ZmZlclBvc2l0aW9u
KDApCisgICAgLCBtX3NlZ21lbnQoMCkKKyAgICAsIG1fc2VnbWVudExlbmd0aCgwKQorICAgICwg
bV9zZWdtZW50SW5kZXgoMCkKKyAgICAsIG1fcmVhY2hlZEVuZE9mRmlsZShmYWxzZSkKKyAgICAs
IG1fc2VwYXJhdG9ySW5kZXgoMCkKK3sKKyAgICBzZXRTZXBhcmF0b3Ioc2VwYXJhdG9yKTsKK30K
Kwordm9pZCBTaGFyZWRCdWZmZXJDaHVua1JlYWRlcjo6c2V0U2VwYXJhdG9yKGNvbnN0IFZlY3Rv
cjxjaGFyPiYgc2VwYXJhdG9yKQogewogICAgIG1fc2VwYXJhdG9yID0gc2VwYXJhdG9yOwogfQog
Ci1TdHJpbmcgU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXI6Om5leHRDaHVuayhib29sIGluY2x1ZGVT
ZXBhcmF0b3IpCit2b2lkIFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyOjpzZXRTZXBhcmF0b3IoY29u
c3QgY2hhciogc2VwYXJhdG9yKQoreworICAgIG1fc2VwYXJhdG9yLmNsZWFyKCk7CisgICAgbV9z
ZXBhcmF0b3IuYXBwZW5kKHNlcGFyYXRvciwgc3RybGVuKHNlcGFyYXRvcikpOworfQorCitib29s
IFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyOjpuZXh0Q2h1bmsoVmVjdG9yPGNoYXI+JiBjaHVuaywg
Ym9vbCBpbmNsdWRlU2VwYXJhdG9yKQogewogICAgIGlmIChtX3JlYWNoZWRFbmRPZkZpbGUpCi0g
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3Ry
aW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIGNodW5rLmNsZWFyKCk7CiAgICAgd2hpbGUg
KHRydWUpIHsKICAgICAgICAgd2hpbGUgKG1fc2VnbWVudEluZGV4IDwgbV9zZWdtZW50TGVuZ3Ro
KSB7CiAgICAgICAgICAgICBjaGFyIGN1cnJlbnRDaGFyYWN0ZXIgPSBtX3NlZ21lbnRbbV9zZWdt
ZW50SW5kZXgrK107CiAgICAgICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlciAhPSBtX3NlcGFy
YXRvclttX3NlcGFyYXRvckluZGV4XSkgewotICAgICAgICAgICAgICBpZiAobV9zZXBhcmF0b3JJ
bmRleCA+IDApIHsKLSAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtX3NlcGFy
YXRvci5zdWJzdHJpbmcoMCwgbV9zZXBhcmF0b3JJbmRleCkpOwotICAgICAgICAgICAgICAgIG1f
c2VwYXJhdG9ySW5kZXggPSAwOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKGN1cnJlbnRDaGFyYWN0ZXIpOwotICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICBpZiAobV9zZXBhcmF0b3JJbmRleCA+IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2h1bmsuYXBwZW5kKG1fc2VwYXJhdG9yLmRhdGEoKSwgbV9zZXBhcmF0b3JJ
bmRleCk7CisgICAgICAgICAgICAgICAgICAgIG1fc2VwYXJhdG9ySW5kZXggPSAwOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjaHVuay5hcHBlbmQoY3VycmVudENoYXJhY3Rl
cik7CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBtX3NlcGFyYXRvckluZGV4Kys7Ci0gICAgICAgICAgICBpZiAobV9zZXBhcmF0b3JJbmRleCA9
PSBtX3NlcGFyYXRvci5sZW5ndGgoKSkgewotICAgICAgICAgICAgICBpZiAoaW5jbHVkZVNlcGFy
YXRvcikKLSAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtX3NlcGFyYXRvcik7
Ci0gICAgICAgICAgICAgIG1fc2VwYXJhdG9ySW5kZXggPSAwOwotICAgICAgICAgICAgICByZXR1
cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAgaWYgKG1fc2VwYXJhdG9y
SW5kZXggPT0gbV9zZXBhcmF0b3Iuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGluY2x1
ZGVTZXBhcmF0b3IpCisgICAgICAgICAgICAgICAgICAgIGNodW5rLmFwcGVuZChtX3NlcGFyYXRv
cik7CisgICAgICAgICAgICAgICAgbV9zZXBhcmF0b3JJbmRleCA9IDA7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtODYsMTEgKzEw
Myw0NiBAQCBTdHJpbmcgU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXI6Om5leHRDaHVuayhib29sIGlu
Y2x1ZGVTZXBhcmF0b3IpCiAgICAgICAgIGlmICghbV9zZWdtZW50TGVuZ3RoKSB7CiAgICAgICAg
ICAgICBtX3JlYWNoZWRFbmRPZkZpbGUgPSB0cnVlOwogICAgICAgICAgICAgaWYgKG1fc2VwYXJh
dG9ySW5kZXggPiAwKQotICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtX3NlcGFy
YXRvci5zdWJzdHJpbmcoMCwgbV9zZXBhcmF0b3JJbmRleCkpOwotICAgICAgICAgICAgcmV0dXJu
IHN0cmluZ0J1aWxkZXIubGVuZ3RoKCkgPiAwID8gc3RyaW5nQnVpbGRlci50b1N0cmluZygpIDog
U3RyaW5nKCk7CisgICAgICAgICAgICAgICAgY2h1bmsuYXBwZW5kKG1fc2VwYXJhdG9yLmRhdGEo
KSwgbV9zZXBhcmF0b3JJbmRleCk7CisgICAgICAgICAgICByZXR1cm4gIWNodW5rLmlzRW1wdHko
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7IC8vIENvbXBpbGVyIGlzIHVu
aGFwcHkgd2l0aG91dCB0aGlzLgorfQorCitTdHJpbmcgU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXI6
Om5leHRDaHVua0FzVVRGOFN0cmluZyhib29sIGluY2x1ZGVTZXBhcmF0b3IpCit7CisgICAgVmVj
dG9yPGNoYXI+IGRhdGE7CisgICAgaWYgKCFuZXh0Q2h1bmsoZGF0YSwgaW5jbHVkZVNlcGFyYXRv
cikpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIHJldHVybiBkYXRhLnNpemUoKSA/
IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soZGF0YS5kYXRhKCksIGRhdGEuc2l6
ZSgpKSA6IFN0cmluZygiIik7Cit9CisKK3NpemVfdCBTaGFyZWRCdWZmZXJDaHVua1JlYWRlcjo6
cGVlayhWZWN0b3I8Y2hhcj4mIGRhdGEsIHNpemVfdCByZXF1ZXN0ZWRTaXplKQoreworICAgIGRh
dGEuY2xlYXIoKTsKKyAgICBpZiAocmVxdWVzdGVkU2l6ZSA8PSBtX3NlZ21lbnRMZW5ndGggLSBt
X3NlZ21lbnRJbmRleCkgeworICAgICAgICBkYXRhLmFwcGVuZChtX3NlZ21lbnQgKyBtX3NlZ21l
bnRJbmRleCwgcmVxdWVzdGVkU2l6ZSk7CisgICAgICAgIHJldHVybiByZXF1ZXN0ZWRTaXplOwor
ICAgIH0KKworICAgIHNpemVfdCByZWFkQnl0ZXNDb3VudCA9IG1fc2VnbWVudExlbmd0aCAtIG1f
c2VnbWVudEluZGV4OworICAgIGRhdGEuYXBwZW5kKG1fc2VnbWVudCArIG1fc2VnbWVudEluZGV4
LCByZWFkQnl0ZXNDb3VudCk7CisKKyAgICBzaXplX3QgYnVmZmVyUG9zaXRpb24gPSBtX2J1ZmZl
clBvc2l0aW9uICsgbV9zZWdtZW50TGVuZ3RoOworICAgIGNvbnN0IGNoYXIqIHNlZ21lbnQgPSAw
OworICAgIHdoaWxlIChzaXplX3Qgc2VnbWVudExlbmd0aCA9IG1fYnVmZmVyLT5nZXRTb21lRGF0
YShzZWdtZW50LCBidWZmZXJQb3NpdGlvbikpIHsKKyAgICAgICAgaWYgKHJlcXVlc3RlZFNpemUg
PD0gcmVhZEJ5dGVzQ291bnQgKyBzZWdtZW50TGVuZ3RoKSB7CisgICAgICAgICAgICBkYXRhLmFw
cGVuZChzZWdtZW50LCByZXF1ZXN0ZWRTaXplIC0gcmVhZEJ5dGVzQ291bnQpOworICAgICAgICAg
ICAgcmVhZEJ5dGVzQ291bnQgKz0gKHJlcXVlc3RlZFNpemUgLSByZWFkQnl0ZXNDb3VudCk7Cisg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBkYXRhLmFwcGVuZChzZWdtZW50
LCBzZWdtZW50TGVuZ3RoKTsKKyAgICAgICAgcmVhZEJ5dGVzQ291bnQgKz0gc2VnbWVudExlbmd0
aDsKKyAgICAgICAgYnVmZmVyUG9zaXRpb24gKz0gc2VnbWVudExlbmd0aDsKICAgICB9Ci0gICAg
cmV0dXJuIFN0cmluZygpOyAvLyBDb21waWxlciBpcyB1bmhhcHB5IHdpdGhvdXQgdGhpcy4KKyAg
ICByZXR1cm4gcmVhZEJ5dGVzQ291bnQ7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlckNodW5rUmVhZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TaGFyZWRCdWZmZXJDaHVua1JlYWRlci5oCmluZGV4IDZjNzY3ZDU2NmY1MTNjYmVk
YWE4OTEzODA3MzEwNTZmMzU4NzAzOTYuLmVjYWFmZjczMzY4ZGQ5MjRhNGEzYzYyMjZlMzY2YjYy
YzYzODNiOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZl
ckNodW5rUmVhZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
Q2h1bmtSZWFkZXIuaApAQCAtMzEsMjQgKzMxLDMwIEBACiAjaWZuZGVmIFNoYXJlZEJ1ZmZlckNo
dW5rUmVhZGVyX2gKICNkZWZpbmUgU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXJfaAogCisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi1uYW1l
c3BhY2UgV1RGIHsKLWNsYXNzIFN0cmluZ0J1aWxkZXI7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgU2hhcmVkQnVmZmVyOwogCiBjbGFzcyBTaGFyZWRCdWZmZXJDaHVua1JlYWRl
ciB7CiBwdWJsaWM6Ci0gICAgU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIoU2hhcmVkQnVmZmVyKiwg
Y29uc3QgU3RyaW5nJiBzZXBhcmF0b3IpOworICAgIFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyKFNo
YXJlZEJ1ZmZlciosIGNvbnN0IFZlY3RvcjxjaGFyPiYgc2VwYXJhdG9yKTsKKyAgICBTaGFyZWRC
dWZmZXJDaHVua1JlYWRlcihTaGFyZWRCdWZmZXIqLCBjb25zdCBjaGFyKiBzZXBhcmF0b3IpOwog
Ci0gICAgdm9pZCBzZXRTZXBhcmF0b3IoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXRTZXBh
cmF0b3IoY29uc3QgVmVjdG9yPGNoYXI+Jik7CisgICAgdm9pZCBzZXRTZXBhcmF0b3IoY29uc3Qg
Y2hhciopOworCisgICAgLy8gUmV0dXJucyBmYWxzZSB3aGVuIHRoZSBlbmQgb2YgdGhlIGJ1ZmZl
ciB3YXMgcmVhY2hlZC4KKyAgICBib29sIG5leHRDaHVuayhWZWN0b3I8Y2hhcj4mIGRhdGEsIGJv
b2wgaW5jbHVkZVNlcGFyYXRvciA9IGZhbHNlKTsKIAogICAgIC8vIFJldHVybnMgYSBudWxsIHN0
cmluZyB3aGVuIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBoYXMgYmVlbiByZWFjaGVkLgotICAgIFN0
cmluZyBuZXh0Q2h1bmsoYm9vbCBpbmNsdWRlU2VwYXJhdG9yID0gZmFsc2UpOworICAgIFN0cmlu
ZyBuZXh0Q2h1bmtBc1VURjhTdHJpbmcoYm9vbCBpbmNsdWRlU2VwYXJhdG9yID0gZmFsc2UpOwor
CisgICAgLy8gUmVhZHMgc2l6ZSBieXRlcyBhdCB0aGUgY3VycmVudCBsb2NhdGlvbiBpbiB0aGUg
YnVmZmVyLCB3aXRob3V0IGNoYW5naW5nIHRoZSBidWZmZXIgcG9zaXRpb24uCisgICAgLy8gUmV0
dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuIFRoYXQgbnVtYmVyIG1pZ2h0IGJlIGxlc3Mg
dGhhbiB0aGUgc3BlY2lmaWVkIHNpemUgaWYgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIHdhcyByZWFj
aGVkLgorICAgIHNpemVfdCBwZWVrKFZlY3RvcjxjaGFyPiYsIHNpemVfdCk7CiAKIHByaXZhdGU6
CiAgICAgU2hhcmVkQnVmZmVyKiBtX2J1ZmZlcjsKQEAgLTU3LDcgKzYzLDcgQEAgcHJpdmF0ZToK
ICAgICBzaXplX3QgbV9zZWdtZW50TGVuZ3RoOwogICAgIHNpemVfdCBtX3NlZ21lbnRJbmRleDsK
ICAgICBib29sIG1fcmVhY2hlZEVuZE9mRmlsZTsKLSAgICBTdHJpbmcgbV9zZXBhcmF0b3I7Cisg
ICAgVmVjdG9yPGNoYXI+IG1fc2VwYXJhdG9yOwogICAgIHNpemVfdCBtX3NlcGFyYXRvckluZGV4
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1F
SGVhZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5j
cHAKaW5kZXggZmJjZjgyYzdlNjA1ZWVlZTJmNGQwZDBkNDhlMDI1N2FmZmNjNTNmOS4uZTJhYTdh
YjhlMDA3ZTUxMmJjOWQ3OTdmNDE2ZGJkZTdiMjk3MGNmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwCkBAIC00OSw3ICs0OSw3IEBAIHN0YXRp
YyBLZXlWYWx1ZU1hcCByZXRyaWV2ZUtleVZhbHVlUGFpcnMoV2ViQ29yZTo6U2hhcmVkQnVmZmVy
Q2h1bmtSZWFkZXIqIGJ1ZmZlCiAgICAgU3RyaW5nIGxpbmU7CiAgICAgU3RyaW5nIGtleTsKICAg
ICBTdHJpbmdCdWlsZGVyIHZhbHVlOwotICAgIHdoaWxlICghKGxpbmUgPSBidWZmZXItPm5leHRD
aHVuaygpKS5pc051bGwoKSkgeworICAgIHdoaWxlICghKGxpbmUgPSBidWZmZXItPm5leHRDaHVu
a0FzVVRGOFN0cmluZygpKS5pc051bGwoKSkgewogICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkp
CiAgICAgICAgICAgICBicmVhazsgLy8gRW1wdHkgbGluZSBtZWFucyBlbmQgb2Yga2V5L3ZhbHVl
IHNlY3Rpb24uCiAgICAgICAgIGlmIChsaW5lWzBdID09ICdcdCcpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98370</attachid>
            <date>2011-06-23 10:54:46 -0700</date>
            <delta_ts>2011-06-23 12:29:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63231-20110623105445.patch</filename>
            <type>text/plain</type>
            <size>10754</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODkzMzUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjOTVjZDQ4MWNiNjBhZTI3
N2U4NTJhMTgyYzk2NzY1YzQzNzdlZmFlLi5kYWZkZTdkNTMwY2U4ZGU5NDM4ZmNmZWY0MjFjODgw
ODNmNTYzM2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDYtMjIgIEpheSBD
aXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeGluZyB0aGUgU2hhcmVkQnVmZmVyQ2h1bmtSZWFk
ZXIgQVBJIHNvIGl0IHdvcmtzIGNvcnJlY3RseSB3aXRoCisgICAgICAgIGJpbmFyeSBkYXRhIChu
b24gcHJpbnRhYmxlIGNoYXJhY3RlcnMpLgorICAgICAgICBBbHNvIGFkZGluZyBhIG1ldGhvZCB0
byBwZWVrIGF0IHRoZSBkYXRhICh0aGlzIGlzIG5lZWRlZCBmb3IgTUhUTUwKKyAgICAgICAgd2l0
aCBiaW5hcnkgcGFydHMpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjMyMzEKKworICAgICAgICAqIGxvYWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFy
c2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNraXBMaW5lc1VudGlsQm91bmRhcnlGb3VuZCk6
CisgICAgICAgIChXZWJDb3JlOjpNSFRNTFBhcnNlcjo6cGFyc2VOZXh0UGFydCk6CisgICAgICAg
ICogbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9TaGFyZWRCdWZmZXJDaHVua1JlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRC
dWZmZXJDaHVua1JlYWRlcjo6U2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXI6OnNldFNlcGFyYXRvcik6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRCdWZmZXJDaHVua1JlYWRlcjo6bmV4dENodW5rKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyOjpuZXh0Q2h1bmtBc1VURjhTdHJpbmdXaXRo
TGF0aW4xRmFsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyQ2h1bmtSZWFk
ZXI6OnBlZWspOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlckNodW5rUmVhZGVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnJldHJpZXZlS2V5VmFsdWVQYWlycyk6CisKIDIwMTEtMDYtMjAgIERhaSBNaWt1cnVi
ZSAgPGRtaWt1cnViZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBU
YW11cmEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9N
SFRNTFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRN
TFBhcnNlci5jcHAKaW5kZXggODRhMjZlZDUwMjQ2OThkODQ3MWI3OGQ3NGU5M2U3MTdmZGNkZDA5
OS4uYWNmOWE1YTBiMTc1ZjVkZDFiZmQ1NmMyNWI2N2RkOWIyYTA4ZTQ5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcApAQCAt
NDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgYm9vbCBza2lwTGluZXNV
bnRpbEJvdW5kYXJ5Rm91bmQoU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXImIGxpbmVSZWFkZXIsIGNv
bnN0IFN0cmluZyYgYm91bmRhcnkpCiB7CiAgICAgU3RyaW5nIGxpbmU7Ci0gICAgd2hpbGUgKCEo
bGluZSA9IGxpbmVSZWFkZXIubmV4dENodW5rKCkpLmlzTnVsbCgpKSB7CisgICAgd2hpbGUgKCEo
bGluZSA9IGxpbmVSZWFkZXIubmV4dENodW5rQXNVVEY4U3RyaW5nV2l0aExhdGluMUZhbGxiYWNr
KCkpLmlzTnVsbCgpKSB7CiAgICAgICAgIGlmIChsaW5lID09IGJvdW5kYXJ5KQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIFBhc3NSZWZQdHI8QXJj
aGl2ZVJlc291cmNlPiBNSFRNTFBhcnNlcjo6cGFyc2VOZXh0UGFydChjb25zdCBNSU1FSGVhZGVy
JiBtaW1lSGVhCiAgICAgY29uc3QgYm9vbCBjaGVja0JvdW5kYXJ5ID0gIWVuZE9mUGFydEJvdW5k
YXJ5LmlzRW1wdHkoKTsKICAgICBib29sIGVuZE9mUGFydFJlYWNoZWQgPSBmYWxzZTsKICAgICBT
dHJpbmcgbGluZTsKLSAgICB3aGlsZSAoIShsaW5lID0gbV9saW5lUmVhZGVyLm5leHRDaHVuaygp
KS5pc051bGwoKSkgeworICAgIHdoaWxlICghKGxpbmUgPSBtX2xpbmVSZWFkZXIubmV4dENodW5r
QXNVVEY4U3RyaW5nV2l0aExhdGluMUZhbGxiYWNrKCkpLmlzTnVsbCgpKSB7CiAgICAgICAgIGlm
IChjaGVja0JvdW5kYXJ5ICYmIChsaW5lID09IGVuZE9mUGFydEJvdW5kYXJ5IHx8IGxpbmUgPT0g
ZW5kT2ZEb2N1bWVudEJvdW5kYXJ5KSkgewogICAgICAgICAgICAgZW5kT2ZBcmNoaXZlUmVhY2hl
ZCA9IChsaW5lID09IGVuZE9mRG9jdW1lbnRCb3VuZGFyeSk7CiAgICAgICAgICAgICBlbmRPZlBh
cnRSZWFjaGVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNo
aXZlL21odG1sL01IVE1MUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9t
aHRtbC9NSFRNTFBhcnNlci5oCmluZGV4IDA0M2M1MGY0NmI4ZDk1YTFlZTczYWMyNDIxNWJkZGRk
MTlhNmMyOWQuLjFiZDNmZWVmOGJkYWU4YmYzZTBjZGJmODZlZTE3NmZlNjlhYjNhMTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxQYXJzZXIuaApA
QCAtMzQsNiArMzQsNyBAQAogI2lmIEVOQUJMRShNSFRNTCkKICNpbmNsdWRlICJTaGFyZWRCdWZm
ZXJDaHVua1JlYWRlci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZl
ckNodW5rUmVhZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlckNo
dW5rUmVhZGVyLmNwcAppbmRleCBiODhmODliNjQ1MWViOTMyMGRiMDhmZjU3YjRmODdlM2MyOWQ5
ZmYwLi5lZDFiZDkwZWZmYTZlOWJhZDQwYTUzNjUzYzM1NmE0YTU0ZWEwOTA5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXJDaHVua1JlYWRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuY3BwCkBA
IC0zMiwxMSArMzIsMTAgQEAKICNpbmNsdWRlICJTaGFyZWRCdWZmZXJDaHVua1JlYWRlci5oIgog
CiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNoYXJlZEJ1ZmZlckNodW5rUmVhZGVy
OjpTaGFyZWRCdWZmZXJDaHVua1JlYWRlcihTaGFyZWRCdWZmZXIqIGJ1ZmZlciwgY29uc3QgU3Ry
aW5nJiBzZXBhcmF0b3IpCitTaGFyZWRCdWZmZXJDaHVua1JlYWRlcjo6U2hhcmVkQnVmZmVyQ2h1
bmtSZWFkZXIoU2hhcmVkQnVmZmVyKiBidWZmZXIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgc2VwYXJh
dG9yKQogICAgIDogbV9idWZmZXIoYnVmZmVyKQogICAgICwgbV9idWZmZXJQb3NpdGlvbigwKQog
ICAgICwgbV9zZWdtZW50KDApCkBAIC00OCwzNCArNDcsNTMgQEAgU2hhcmVkQnVmZmVyQ2h1bmtS
ZWFkZXI6OlNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyKFNoYXJlZEJ1ZmZlciogYnVmZmVyLCBjb25z
dCBTdHIKIHsKIH0KIAotdm9pZCBTaGFyZWRCdWZmZXJDaHVua1JlYWRlcjo6c2V0U2VwYXJhdG9y
KGNvbnN0IFN0cmluZyYgc2VwYXJhdG9yKQorU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXI6OlNoYXJl
ZEJ1ZmZlckNodW5rUmVhZGVyKFNoYXJlZEJ1ZmZlciogYnVmZmVyLCBjb25zdCBjaGFyKiBzZXBh
cmF0b3IpCisgICAgOiBtX2J1ZmZlcihidWZmZXIpCisgICAgLCBtX2J1ZmZlclBvc2l0aW9uKDAp
CisgICAgLCBtX3NlZ21lbnQoMCkKKyAgICAsIG1fc2VnbWVudExlbmd0aCgwKQorICAgICwgbV9z
ZWdtZW50SW5kZXgoMCkKKyAgICAsIG1fcmVhY2hlZEVuZE9mRmlsZShmYWxzZSkKKyAgICAsIG1f
c2VwYXJhdG9ySW5kZXgoMCkKK3sKKyAgICBzZXRTZXBhcmF0b3Ioc2VwYXJhdG9yKTsKK30KKwor
dm9pZCBTaGFyZWRCdWZmZXJDaHVua1JlYWRlcjo6c2V0U2VwYXJhdG9yKGNvbnN0IFZlY3Rvcjxj
aGFyPiYgc2VwYXJhdG9yKQogewogICAgIG1fc2VwYXJhdG9yID0gc2VwYXJhdG9yOwogfQogCi1T
dHJpbmcgU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXI6Om5leHRDaHVuayhib29sIGluY2x1ZGVTZXBh
cmF0b3IpCit2b2lkIFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyOjpzZXRTZXBhcmF0b3IoY29uc3Qg
Y2hhciogc2VwYXJhdG9yKQoreworICAgIG1fc2VwYXJhdG9yLmNsZWFyKCk7CisgICAgbV9zZXBh
cmF0b3IuYXBwZW5kKHNlcGFyYXRvciwgc3RybGVuKHNlcGFyYXRvcikpOworfQorCitib29sIFNo
YXJlZEJ1ZmZlckNodW5rUmVhZGVyOjpuZXh0Q2h1bmsoVmVjdG9yPGNoYXI+JiBjaHVuaywgYm9v
bCBpbmNsdWRlU2VwYXJhdG9yKQogewogICAgIGlmIChtX3JlYWNoZWRFbmRPZkZpbGUpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3RyaW5n
QnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIGNodW5rLmNsZWFyKCk7CiAgICAgd2hpbGUgKHRy
dWUpIHsKICAgICAgICAgd2hpbGUgKG1fc2VnbWVudEluZGV4IDwgbV9zZWdtZW50TGVuZ3RoKSB7
CiAgICAgICAgICAgICBjaGFyIGN1cnJlbnRDaGFyYWN0ZXIgPSBtX3NlZ21lbnRbbV9zZWdtZW50
SW5kZXgrK107CiAgICAgICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlciAhPSBtX3NlcGFyYXRv
clttX3NlcGFyYXRvckluZGV4XSkgewotICAgICAgICAgICAgICBpZiAobV9zZXBhcmF0b3JJbmRl
eCA+IDApIHsKLSAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtX3NlcGFyYXRv
ci5zdWJzdHJpbmcoMCwgbV9zZXBhcmF0b3JJbmRleCkpOwotICAgICAgICAgICAgICAgIG1fc2Vw
YXJhdG9ySW5kZXggPSAwOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKGN1cnJlbnRDaGFyYWN0ZXIpOwotICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICBpZiAobV9zZXBhcmF0b3JJbmRleCA+IDApIHsKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKG1fc2VwYXJhdG9ySW5kZXggPD0gbV9zZXBhcmF0b3Iuc2l6ZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgY2h1bmsuYXBwZW5kKG1fc2VwYXJhdG9yLmRhdGEoKSwgbV9z
ZXBhcmF0b3JJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIG1fc2VwYXJhdG9ySW5kZXggPSAw
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjaHVuay5hcHBlbmQoY3VycmVu
dENoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBtX3NlcGFyYXRvckluZGV4Kys7Ci0gICAgICAgICAgICBpZiAobV9zZXBhcmF0
b3JJbmRleCA9PSBtX3NlcGFyYXRvci5sZW5ndGgoKSkgewotICAgICAgICAgICAgICBpZiAoaW5j
bHVkZVNlcGFyYXRvcikKLSAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtX3Nl
cGFyYXRvcik7Ci0gICAgICAgICAgICAgIG1fc2VwYXJhdG9ySW5kZXggPSAwOwotICAgICAgICAg
ICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAgaWYgKG1f
c2VwYXJhdG9ySW5kZXggPT0gbV9zZXBhcmF0b3Iuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGluY2x1ZGVTZXBhcmF0b3IpCisgICAgICAgICAgICAgICAgICAgIGNodW5rLmFwcGVuZCht
X3NlcGFyYXRvcik7CisgICAgICAgICAgICAgICAgbV9zZXBhcmF0b3JJbmRleCA9IDA7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAt
ODYsMTEgKzEwNCw0NyBAQCBTdHJpbmcgU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXI6Om5leHRDaHVu
ayhib29sIGluY2x1ZGVTZXBhcmF0b3IpCiAgICAgICAgIGlmICghbV9zZWdtZW50TGVuZ3RoKSB7
CiAgICAgICAgICAgICBtX3JlYWNoZWRFbmRPZkZpbGUgPSB0cnVlOwogICAgICAgICAgICAgaWYg
KG1fc2VwYXJhdG9ySW5kZXggPiAwKQotICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChtX3NlcGFyYXRvci5zdWJzdHJpbmcoMCwgbV9zZXBhcmF0b3JJbmRleCkpOwotICAgICAgICAg
ICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIubGVuZ3RoKCkgPiAwID8gc3RyaW5nQnVpbGRlci50b1N0
cmluZygpIDogU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgY2h1bmsuYXBwZW5kKG1fc2VwYXJh
dG9yLmRhdGEoKSwgbV9zZXBhcmF0b3JJbmRleCk7CisgICAgICAgICAgICByZXR1cm4gIWNodW5r
LmlzRW1wdHkoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBTaGFyZWRCdWZmZXJDaHVua1JlYWRlcjo6
bmV4dENodW5rQXNVVEY4U3RyaW5nV2l0aExhdGluMUZhbGxiYWNrKGJvb2wgaW5jbHVkZVNlcGFy
YXRvcikKK3sKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICBpZiAoIW5leHRDaHVuayhkYXRh
LCBpbmNsdWRlU2VwYXJhdG9yKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgcmV0
dXJuIGRhdGEuc2l6ZSgpID8gU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhkYXRh
LmRhdGEoKSwgZGF0YS5zaXplKCkpIDogU3RyaW5nKCIiKTsKK30KKworc2l6ZV90IFNoYXJlZEJ1
ZmZlckNodW5rUmVhZGVyOjpwZWVrKFZlY3RvcjxjaGFyPiYgZGF0YSwgc2l6ZV90IHJlcXVlc3Rl
ZFNpemUpCit7CisgICAgZGF0YS5jbGVhcigpOworICAgIGlmIChyZXF1ZXN0ZWRTaXplIDw9IG1f
c2VnbWVudExlbmd0aCAtIG1fc2VnbWVudEluZGV4KSB7CisgICAgICAgIGRhdGEuYXBwZW5kKG1f
c2VnbWVudCArIG1fc2VnbWVudEluZGV4LCByZXF1ZXN0ZWRTaXplKTsKKyAgICAgICAgcmV0dXJu
IHJlcXVlc3RlZFNpemU7CisgICAgfQorCisgICAgc2l6ZV90IHJlYWRCeXRlc0NvdW50ID0gbV9z
ZWdtZW50TGVuZ3RoIC0gbV9zZWdtZW50SW5kZXg7CisgICAgZGF0YS5hcHBlbmQobV9zZWdtZW50
ICsgbV9zZWdtZW50SW5kZXgsIHJlYWRCeXRlc0NvdW50KTsKKworICAgIHNpemVfdCBidWZmZXJQ
b3NpdGlvbiA9IG1fYnVmZmVyUG9zaXRpb24gKyBtX3NlZ21lbnRMZW5ndGg7CisgICAgY29uc3Qg
Y2hhciogc2VnbWVudCA9IDA7CisgICAgd2hpbGUgKHNpemVfdCBzZWdtZW50TGVuZ3RoID0gbV9i
dWZmZXItPmdldFNvbWVEYXRhKHNlZ21lbnQsIGJ1ZmZlclBvc2l0aW9uKSkgeworICAgICAgICBp
ZiAocmVxdWVzdGVkU2l6ZSA8PSByZWFkQnl0ZXNDb3VudCArIHNlZ21lbnRMZW5ndGgpIHsKKyAg
ICAgICAgICAgIGRhdGEuYXBwZW5kKHNlZ21lbnQsIHJlcXVlc3RlZFNpemUgLSByZWFkQnl0ZXND
b3VudCk7CisgICAgICAgICAgICByZWFkQnl0ZXNDb3VudCArPSAocmVxdWVzdGVkU2l6ZSAtIHJl
YWRCeXRlc0NvdW50KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGRh
dGEuYXBwZW5kKHNlZ21lbnQsIHNlZ21lbnRMZW5ndGgpOworICAgICAgICByZWFkQnl0ZXNDb3Vu
dCArPSBzZWdtZW50TGVuZ3RoOworICAgICAgICBidWZmZXJQb3NpdGlvbiArPSBzZWdtZW50TGVu
Z3RoOwogICAgIH0KLSAgICByZXR1cm4gU3RyaW5nKCk7IC8vIENvbXBpbGVyIGlzIHVuaGFwcHkg
d2l0aG91dCB0aGlzLgorICAgIHJldHVybiByZWFkQnl0ZXNDb3VudDsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlckNodW5rUmVhZGVyLmgKaW5kZXgg
NmM3NjdkNTY2ZjUxM2NiZWRhYTg5MTM4MDczMTA1NmYzNTg3MDM5Ni4uNTY4ZWMzY2IxMjg3MjI2
NDRjMDk0YmQ4NjkxZWUyM2Y4MDM2N2UxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TaGFyZWRCdWZmZXJDaHVua1JlYWRlci5oCkBAIC0zMSwyNCArMzEsMzAgQEAKICNpZm5k
ZWYgU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXJfaAogI2RlZmluZSBTaGFyZWRCdWZmZXJDaHVua1Jl
YWRlcl9oCiAKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKLW5hbWVzcGFjZSBXVEYgewotY2xhc3MgU3RyaW5nQnVpbGRlcjsKLX0KLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKIGNsYXNzIFNoYXJl
ZEJ1ZmZlckNodW5rUmVhZGVyIHsKIHB1YmxpYzoKLSAgICBTaGFyZWRCdWZmZXJDaHVua1JlYWRl
cihTaGFyZWRCdWZmZXIqLCBjb25zdCBTdHJpbmcmIHNlcGFyYXRvcik7CisgICAgU2hhcmVkQnVm
ZmVyQ2h1bmtSZWFkZXIoU2hhcmVkQnVmZmVyKiwgY29uc3QgVmVjdG9yPGNoYXI+JiBzZXBhcmF0
b3IpOworICAgIFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyKFNoYXJlZEJ1ZmZlciosIGNvbnN0IGNo
YXIqIHNlcGFyYXRvcik7CiAKLSAgICB2b2lkIHNldFNlcGFyYXRvcihjb25zdCBTdHJpbmcmKTsK
KyAgICB2b2lkIHNldFNlcGFyYXRvcihjb25zdCBWZWN0b3I8Y2hhcj4mKTsKKyAgICB2b2lkIHNl
dFNlcGFyYXRvcihjb25zdCBjaGFyKik7CisKKyAgICAvLyBSZXR1cm5zIGZhbHNlIHdoZW4gdGhl
IGVuZCBvZiB0aGUgYnVmZmVyIHdhcyByZWFjaGVkLgorICAgIGJvb2wgbmV4dENodW5rKFZlY3Rv
cjxjaGFyPiYgZGF0YSwgYm9vbCBpbmNsdWRlU2VwYXJhdG9yID0gZmFsc2UpOwogCiAgICAgLy8g
UmV0dXJucyBhIG51bGwgc3RyaW5nIHdoZW4gdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGhhcyBiZWVu
IHJlYWNoZWQuCi0gICAgU3RyaW5nIG5leHRDaHVuayhib29sIGluY2x1ZGVTZXBhcmF0b3IgPSBm
YWxzZSk7CisgICAgU3RyaW5nIG5leHRDaHVua0FzVVRGOFN0cmluZ1dpdGhMYXRpbjFGYWxsYmFj
ayhib29sIGluY2x1ZGVTZXBhcmF0b3IgPSBmYWxzZSk7CisKKyAgICAvLyBSZWFkcyBzaXplIGJ5
dGVzIGF0IHRoZSBjdXJyZW50IGxvY2F0aW9uIGluIHRoZSBidWZmZXIsIHdpdGhvdXQgY2hhbmdp
bmcgdGhlIGJ1ZmZlciBwb3NpdGlvbi4KKyAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0
ZXMgcmVhZC4gVGhhdCBudW1iZXIgbWlnaHQgYmUgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQgc2l6
ZSBpZiB0aGUgZW5kIG9mIHRoZSBidWZmZXIgd2FzIHJlYWNoZWQuCisgICAgc2l6ZV90IHBlZWso
VmVjdG9yPGNoYXI+Jiwgc2l6ZV90KTsKIAogcHJpdmF0ZToKICAgICBTaGFyZWRCdWZmZXIqIG1f
YnVmZmVyOwpAQCAtNTcsNyArNjMsNyBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX3NlZ21lbnRM
ZW5ndGg7CiAgICAgc2l6ZV90IG1fc2VnbWVudEluZGV4OwogICAgIGJvb2wgbV9yZWFjaGVkRW5k
T2ZGaWxlOwotICAgIFN0cmluZyBtX3NlcGFyYXRvcjsKKyAgICBWZWN0b3I8Y2hhcj4gbV9zZXBh
cmF0b3I7CiAgICAgc2l6ZV90IG1fc2VwYXJhdG9ySW5kZXg7CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcAppbmRleCBmYmNmODJjN2U2MDVl
ZWVlMmY0ZDBkMGQ0OGUwMjU3YWZmY2M1M2Y5Li5kZmIxN2Y5YmQ4NDA0YzQyY2NlNzA2NDE2YmU2
ODY4YmJmNmJmY2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L01JTUVIZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTUlN
RUhlYWRlci5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIEtleVZhbHVlTWFwIHJldHJpZXZl
S2V5VmFsdWVQYWlycyhXZWJDb3JlOjpTaGFyZWRCdWZmZXJDaHVua1JlYWRlciogYnVmZmUKICAg
ICBTdHJpbmcgbGluZTsKICAgICBTdHJpbmcga2V5OwogICAgIFN0cmluZ0J1aWxkZXIgdmFsdWU7
Ci0gICAgd2hpbGUgKCEobGluZSA9IGJ1ZmZlci0+bmV4dENodW5rKCkpLmlzTnVsbCgpKSB7Cisg
ICAgd2hpbGUgKCEobGluZSA9IGJ1ZmZlci0+bmV4dENodW5rQXNVVEY4U3RyaW5nV2l0aExhdGlu
MUZhbGxiYWNrKCkpLmlzTnVsbCgpKSB7CiAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIGJyZWFrOyAvLyBFbXB0eSBsaW5lIG1lYW5zIGVuZCBvZiBrZXkvdmFsdWUgc2Vj
dGlvbi4KICAgICAgICAgaWYgKGxpbmVbMF0gPT0gJ1x0Jykgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>98384</attachid>
            <date>2011-06-23 13:07:26 -0700</date>
            <delta_ts>2011-06-23 13:07:26 -0700</delta_ts>
            <desc>Unit-tests</desc>
            <filename>chunk_reader_unittests.cc</filename>
            <type>application/octet-stream</type>
            <size>11700</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">Ly8gU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIgdW5pdC10ZXN0cyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCgogIHVzaW5nIFdlYkNvcmU6OlNoYXJlZEJ1ZmZlckNodW5rUmVh
ZGVyOwoKICBjbGFzcyBUZXN0U2hhcmVkQnVmZmVyIDogcHVibGljIFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcnsKcHVibGljOgoKVGVzdFNoYXJlZEJ1ZmZlcihjb25zdCBjaGFyKiBkYXRhLCAgdW5zaWdu
ZWQgZGF0YUxlbmd0aCwgdW5zaWduZWQgc2VnbWVudExlbmd0aCkKICAgICAgOiBtX2RhdGEoZGF0
YSkKICAgICAgLCBtX2RhdGFMZW5ndGgoZGF0YUxlbmd0aCkKICAgICAgLCBtX3NlZ21lbnRMZW5n
dGgoc2VnbWVudExlbmd0aCkKewp9CnZpcnR1YWwgdW5zaWduZWQgZ2V0U29tZURhdGEoY29uc3Qg
Y2hhciomIGRhdGEsIHVuc2lnbmVkIHBvc2l0aW9uID0gMCkgY29uc3QKewogIGlmIChwb3NpdGlv
biA+PSBtX2RhdGFMZW5ndGgpCiAgICByZXR1cm4gMDsKICBkYXRhID0gbV9kYXRhICsgcG9zaXRp
b247CiAgdW5zaWduZWQgcmVtYWluaW5nU2l6ZSA9IG1fZGF0YUxlbmd0aCAtIHBvc2l0aW9uOwog
IHJldHVybiByZW1haW5pbmdTaXplIDw9IG1fc2VnbWVudExlbmd0aCA/IHJlbWFpbmluZ1NpemUg
OiBtX3NlZ21lbnRMZW5ndGg7Cn0KCiAgICBwcml2YXRlOgoJY29uc3QgY2hhciogbV9kYXRhOwoJ
dW5zaWduZWQgbV9kYXRhTGVuZ3RoOwoJdW5zaWduZWQgbV9zZWdtZW50TGVuZ3RoOwoKfTsKCiAg
dm9pZCByZWFkQWxsQ2h1bmtzKHN0ZDo6dmVjdG9yPFN0cmluZz4qIGNodW5rcywgVGVzdFNoYXJl
ZEJ1ZmZlciogYnVmZmVyLCBjb25zdCBTdHJpbmcmIHNlcGFyYXRvciA9ICJcclxuIiwgYm9vbCBp
bmNsdWRlU2VwYXJhdG9yID0gZmFsc2UpCnsKICBTaGFyZWRCdWZmZXJDaHVua1JlYWRlciBjaHVu
a1JlYWRlcihidWZmZXIsIHNlcGFyYXRvci51dGY4KCkuZGF0YSgpKTsKICAgIFN0cmluZyBjaHVu
ayA9IGNodW5rUmVhZGVyLm5leHRDaHVua0FzVVRGOFN0cmluZyhpbmNsdWRlU2VwYXJhdG9yKTsK
ICAgIHdoaWxlICghY2h1bmsuaXNOdWxsKCkpIHsKCWNodW5rcy0+cHVzaF9iYWNrKGNodW5rKTsK
CWNodW5rID0gY2h1bmtSZWFkZXIubmV4dENodW5rQXNVVEY4U3RyaW5nKGluY2x1ZGVTZXBhcmF0
b3IpOwogICAgfQp9Cgp2b2lkIHByaW50Q2h1bmtzKGNvbnN0IHN0ZDo6dmVjdG9yPFN0cmluZz4m
IGNodW5rcywgY29uc3QgY2hhciogY29uc3QgZXhwZWN0ZWRDaHVua3NbXSwgc2l6ZV90IGV4cGVj
dGVkU2l6ZSkgewogIExPRyhFUlJPUikgPDwgIkV4cGVjdGVkOiI7CiAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBleHBlY3RlZFNpemU7ICsraSkgewogICAgTE9HKEVSUk9SKSA8PCBpIDw8ICI6ICci
IDw8IFN0cmluZyhleHBlY3RlZENodW5rc1tpXSkuYXNjaWkoKS5kYXRhKCkgPDwgIiciOwogIH0K
ICBMT0coRVJST1IpIDw8ICJBY3R1YWw6IjsKICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNodW5r
cy5zaXplKCk7ICsraSkgewogICAgTE9HKEVSUk9SKSA8PCBpIDw8ICI6ICciIDw8IGNodW5rc1tp
XS5hc2NpaSgpLmRhdGEoKSA8PCAiJyI7CiAgfQp9Cgpib29sIGNoZWNrQ2h1bmtzKGNvbnN0IHN0
ZDo6dmVjdG9yPFN0cmluZz4mIGNodW5rcywgY29uc3QgY2hhciogY29uc3QgZXhwZWN0ZWRDaHVu
a3NbXSwgc2l6ZV90IGV4cGVjdGVkU2l6ZSkKewogIGlmIChjaHVua3Muc2l6ZSgpICE9IGV4cGVj
dGVkU2l6ZSkgewogICAgTE9HKEVSUk9SKSA8PCAiQmFkIGNodW5rIHNpemUsIGV4cGVjdGVkICIg
PDwgZXhwZWN0ZWRTaXplIDw8ICIgZ290ICIgPDwgY2h1bmtzLnNpemUoKTsKICAgIHByaW50Q2h1
bmtzKGNodW5rcywgZXhwZWN0ZWRDaHVua3MsIGV4cGVjdGVkU2l6ZSk7CiAgICByZXR1cm4gZmFs
c2U7CiAgfQogICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaHVua3Muc2l6ZSgpOyArK2kpIHsK
ICAgICAgaWYgKGNodW5rc1tpXSAhPSBleHBlY3RlZENodW5rc1tpXSkgewoJU3RyaW5nIGV4cGVj
dGVkID0gU3RyaW5nKGV4cGVjdGVkQ2h1bmtzW2ldKTsKCVN0cmluZyBhY3R1YWwgPSBjaHVua3Nb
aV07CgkKCUxPRyhFUlJPUikgPDwgIkRpZmZlcmVudCBjaHVuayAjIiA8PCBpOwoJTE9HKEVSUk9S
KSA8PCAiRXhwZWN0ZWQ6ICciIDw8IGV4cGVjdGVkLmFzY2lpKCkuZGF0YSgpIDw8ICInIjsKCUxP
RyhFUlJPUikgPDwgIkFjdHVhbCAgOiAnIiA8PCBhY3R1YWwuYXNjaWkoKS5kYXRhKCkgPDwgIici
OwoKCUxPRyhFUlJPUikgPDwgIkFsbCBjaHVua3M6IjsKCXByaW50Q2h1bmtzKGNodW5rcywgZXhw
ZWN0ZWRDaHVua3MsIGV4cGVjdGVkU2l6ZSk7CglyZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0K
ICAgIHJldHVybiB0cnVlOwp9Cgp2b2lkIGNyYXNoKCkgewogICAgaW50KiBwdHIgPSAwOwogICAg
KnB0ciA9IDA7Cn0KCnZvaWQgY2hlY2tEYXRhSW5SYW5nZShWZWN0b3I8Y2hhcj4gZGF0YSwgc2l6
ZV90IHN0YXJ0LCBzaXplX3QgbGVuZ3RoKQp7CiAgaWYgKGRhdGEuc2l6ZSgpICE9IGxlbmd0aCkg
Y3Jhc2goKTsKICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICBpZiAo
ZGF0YVtpXSAhPSBzdGF0aWNfY2FzdDxjaGFyPihzdGFydCArIGkpKSBjcmFzaCgpOwogIH0KfQoK
c3RhdGljIHZvaWQgdGVzdFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyKCkgewogIC8vIENIZWNrIGJp
bmFyeSBjb250ZW50LgogIHsKICAgIGNoYXIgZGF0YVsyNTZdOwogICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCAyNTY7ICsraSkKICAgICAgZGF0YVtpXSA9IGk7CgogICAgUmVmUHRyPFRlc3RTaGFy
ZWRCdWZmZXI+IHNoYXJlZEJ1ZmZlciA9IGFkb3B0UmVmKG5ldyBUZXN0U2hhcmVkQnVmZmVyKGRh
dGEsIDI1NiwgNSkpOwogICAgU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIgY2h1bmtSZWFkZXIoc2hh
cmVkQnVmZmVyLmdldCgpLCAiXHgxMFx4MTFceDEyIik7CiAgICBWZWN0b3I8Y2hhcj4gb3V0Owog
ICAgaWYgKCFjaHVua1JlYWRlci5uZXh0Q2h1bmsob3V0KSkgY3Jhc2goKTsKICAgIGNoZWNrRGF0
YUluUmFuZ2Uob3V0LCAwLCAxNik7CgogICAgaWYgKCFjaHVua1JlYWRlci5uZXh0Q2h1bmsob3V0
KSkgY3Jhc2goKTsKICAgIGNoZWNrRGF0YUluUmFuZ2Uob3V0LCAxOSwgMjM3KTsKCiAgICBpZiAo
Y2h1bmtSZWFkZXIubmV4dENodW5rKG91dCkpIGNyYXNoKCk7CgogICAgLy8gVGVzdCBpbmNsdWRl
IHNlcGFyYXRvcgogIH0KCgogIC8vIFBlZWsgZGF0YS4KICB7CiAgICBjb25zdCBjaGFyKiBjb25z
dCBzaW1wbGVUZXh0ID0gIlRoaXMgaXMgYSBzdHVwaWQgdGVzdC4iOwogICAgUmVmUHRyPFRlc3RT
aGFyZWRCdWZmZXI+IHNoYXJlZEJ1ZmZlciA9IGFkb3B0UmVmKG5ldyBUZXN0U2hhcmVkQnVmZmVy
KHNpbXBsZVRleHQsIHN0cmxlbihzaW1wbGVUZXh0KSwgNSkpOwogICAgU2hhcmVkQnVmZmVyQ2h1
bmtSZWFkZXIgY2h1bmtSZWFkZXIoc2hhcmVkQnVmZmVyLmdldCgpLCAiaXMiKTsKICAgIFN0cmlu
ZyBjaHVuayA9IGNodW5rUmVhZGVyLm5leHRDaHVua0FzVVRGOFN0cmluZygpOwogICAgaWYgKGNo
dW5rICE9ICJUaCIpIGNyYXNoKCk7CiAgICBWZWN0b3I8Y2hhcj4gZGF0YTsgICAgCiAgICBzaXpl
X3QgcmVhZCA9IGNodW5rUmVhZGVyLnBlZWsoZGF0YSwgMyk7CiAgICBpZiAocmVhZCAhPSAzKSBj
cmFzaCgpOwogICAgaWYgKFN0cmluZyhkYXRhLmRhdGEoKSwgMykgIT0gIiBpcyIpIGNyYXNoKCk7
CgogICAgcmVhZCA9IGNodW5rUmVhZGVyLnBlZWsoZGF0YSwgMTAwMCk7CiAgICBpZiAocmVhZCAh
PSAxOCkgY3Jhc2goKTsKICAgIGlmIChTdHJpbmcoZGF0YS5kYXRhKCksIDE4KSAhPSAiIGlzIGEg
c3R1cGlkIHRlc3QuIikgY3Jhc2goKTsKCiAgICAvLyBFbnN1cmUgdGhlIGN1cnNvciBoYXMgbm90
IGNoYW5nZWQuCiAgICBjaHVuayA9IGNodW5rUmVhZGVyLm5leHRDaHVua0FzVVRGOFN0cmluZygp
OwogICAgaWYgKGNodW5rICE9ICIgIikgY3Jhc2goKTsKICAgIAogICAgY2h1bmsgPSBjaHVua1Jl
YWRlci5uZXh0Q2h1bmtBc1VURjhTdHJpbmcoKTsKICAgIGlmIChjaHVuayAhPSAiIGEgc3R1cGlk
IHRlc3QuIikgY3Jhc2goKTsKCiAgICBjaHVuayA9IGNodW5rUmVhZGVyLm5leHRDaHVua0FzVVRG
OFN0cmluZygpOwogICAgaWYgKCFjaHVuay5pc051bGwoKSkgY3Jhc2goKTsKICB9CgogIHsKICAg
IGNvbnN0IGNoYXIqIGNvbnN0IHNpbXBsZVRleHQgPSAiVGhpcyBpcyB0aGUgbW9zdCByaWRpY3Vs
b3VzIGhpc3RvcnkgdGhlcmUgaXMuIjsKICAgIFJlZlB0cjxUZXN0U2hhcmVkQnVmZmVyPiBzaGFy
ZWRCdWZmZXIgPSBhZG9wdFJlZihuZXcgVGVzdFNoYXJlZEJ1ZmZlcihzaW1wbGVUZXh0LCBzdHJs
ZW4oc2ltcGxlVGV4dCksIDUpKTsKICAgIHN0ZDo6dmVjdG9yPFN0cmluZz4gY2h1bmtzOwogICAg
Y29uc3QgY2hhciogY29uc3QgZXhwZWN0ZWRDaHVua3MxV2l0aG91dFNlcGFyYXRvcltdID0geyAi
VGgiLCAicyAiLCAicyB0aGUgbW9zdCByIiwgImQiLCAiY3Vsb3VzIGgiLCAic3RvcnkgdGhlcmUg
IiwgInMuIiB9OwogICAgcmVhZEFsbENodW5rcygmY2h1bmtzLCBzaGFyZWRCdWZmZXIuZ2V0KCks
ICJpIik7CiAgICBpZiAoIWNoZWNrQ2h1bmtzKGNodW5rcywgZXhwZWN0ZWRDaHVua3MxV2l0aG91
dFNlcGFyYXRvciwgYXJyYXlzaXplKGV4cGVjdGVkQ2h1bmtzMVdpdGhvdXRTZXBhcmF0b3IpKSkK
CSAgICBjcmFzaCgpOwoKICAgIGNodW5rcy5jbGVhcigpOwogICAgY29uc3QgY2hhciogY29uc3Qg
ZXhwZWN0ZWRDaHVua3MxV2l0aFNlcGFyYXRvcltdID0geyAiVGhpIiwgInMgaSIsICJzIHRoZSBt
b3N0IHJpIiwgImRpIiwgImN1bG91cyBoaSIsICJzdG9yeSB0aGVyZSBpIiwgInMuIiB9OwogICAg
cmVhZEFsbENodW5rcygmY2h1bmtzLCBzaGFyZWRCdWZmZXIuZ2V0KCksICJpIiwgdHJ1ZSk7CiAg
ICBpZiAoIWNoZWNrQ2h1bmtzKGNodW5rcywgZXhwZWN0ZWRDaHVua3MxV2l0aFNlcGFyYXRvciwg
YXJyYXlzaXplKGV4cGVjdGVkQ2h1bmtzMVdpdGhTZXBhcmF0b3IpKSkKCSAgICBjcmFzaCgpOwoK
ICAgIGNodW5rcy5jbGVhcigpOwogICAgY29uc3QgY2hhciogY29uc3QgZXhwZWN0ZWRDaHVua3My
V2l0aG91dFNlcGFyYXRvcltdID0geyAiVGgiLCAiICIsICIgdGhlIG1vc3QgcmlkaWN1bG91cyBo
IiwgInRvcnkgdGhlcmUgIiwgIi4iIH07CiAgICByZWFkQWxsQ2h1bmtzKCZjaHVua3MsIHNoYXJl
ZEJ1ZmZlci5nZXQoKSwgImlzIik7CiAgICBpZiAoIWNoZWNrQ2h1bmtzKGNodW5rcywgZXhwZWN0
ZWRDaHVua3MyV2l0aG91dFNlcGFyYXRvciwgYXJyYXlzaXplKGV4cGVjdGVkQ2h1bmtzMldpdGhv
dXRTZXBhcmF0b3IpKSkKCSAgICBjcmFzaCgpOwoKICAgIGNodW5rcy5jbGVhcigpOwogICAgY29u
c3QgY2hhciogY29uc3QgZXhwZWN0ZWRDaHVua3MyV2l0aFNlcGFyYXRvcltdID0geyAiVGhpcyIs
ICIgaXMiLCAiIHRoZSBtb3N0IHJpZGljdWxvdXMgaGlzIiwgInRvcnkgdGhlcmUgaXMiLCAiLiIg
fTsKICAgIHJlYWRBbGxDaHVua3MoJmNodW5rcywgc2hhcmVkQnVmZmVyLmdldCgpLCAiaXMiLCB0
cnVlKTsKICAgIGlmICghY2hlY2tDaHVua3MoY2h1bmtzLCBleHBlY3RlZENodW5rczJXaXRoU2Vw
YXJhdG9yLCBhcnJheXNpemUoZXhwZWN0ZWRDaHVua3MyV2l0aFNlcGFyYXRvcikpKQoJICAgIGNy
YXNoKCk7CgogICAgY2h1bmtzLmNsZWFyKCk7CiAgICBjb25zdCBjaGFyKiBjb25zdCBleHBlY3Rl
ZENodW5rczNXaXRob3V0U2VwYXJhdG9yW10gPSB7ICJUaGlzIGlzIHRoZSBtb3N0IHJpZGljdWxv
dXMgaCIsICJvcnkgdGhlcmUgaXMuIiB9OwogICAgcmVhZEFsbENodW5rcygmY2h1bmtzLCBzaGFy
ZWRCdWZmZXIuZ2V0KCksICJpc3QiKTsKICAgIGlmICghY2hlY2tDaHVua3MoY2h1bmtzLCBleHBl
Y3RlZENodW5rczNXaXRob3V0U2VwYXJhdG9yLCBhcnJheXNpemUoZXhwZWN0ZWRDaHVua3MzV2l0
aG91dFNlcGFyYXRvcikpKQogICAgICBjcmFzaCgpOwoKICAgIGNodW5rcy5jbGVhcigpOwogICAg
Y29uc3QgY2hhciogY29uc3QgZXhwZWN0ZWRDaHVua3MzV2l0aFNlcGFyYXRvcltdID0geyAiVGhp
cyBpcyB0aGUgbW9zdCByaWRpY3Vsb3VzIGhpc3QiLCAib3J5IHRoZXJlIGlzLiIgfTsKICAgIHJl
YWRBbGxDaHVua3MoJmNodW5rcywgc2hhcmVkQnVmZmVyLmdldCgpLCAiaXN0IiwgdHJ1ZSk7CiAg
ICBpZiAoIWNoZWNrQ2h1bmtzKGNodW5rcywgZXhwZWN0ZWRDaHVua3MzV2l0aFNlcGFyYXRvciwg
YXJyYXlzaXplKGV4cGVjdGVkQ2h1bmtzM1dpdGhTZXBhcmF0b3IpKSkKCSAgICBjcmFzaCgpOwog
ICAgCiAgfQoKICAvLyBDaGVjayB0aGF0IGNoYW5naW5nIHNlcGFyYXRvciB3aGlsZSBpdGVyYXRp
bmcgb3ZlciBjaHVua3Mgd29yayBhcyBleHBlY3RlZC4KICAgIHsKICAgICAgICBjb25zdCBjaGFy
KiBjb25zdCBzaW1wbGVUZXh0ID0gIlRoaXMgaXMgdGhlIG1vc3QgcmlkaWN1bG91cyBoaXN0b3J5
IHRoZXJlIGlzLiI7CiAgICAgICAgUmVmUHRyPFRlc3RTaGFyZWRCdWZmZXI+IHNoYXJlZEJ1ZmZl
ciA9IGFkb3B0UmVmKG5ldyBUZXN0U2hhcmVkQnVmZmVyKHNpbXBsZVRleHQsIHN0cmxlbihzaW1w
bGVUZXh0KSwgNSkpOwoJU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIgY2h1bmtSZWFkZXIoc2hhcmVk
QnVmZmVyLmdldCgpLCAiaXMiKTsKCVN0cmluZyBjaHVuayA9IGNodW5rUmVhZGVyLm5leHRDaHVu
a0FzVVRGOFN0cmluZygpOwoJaWYgKGNodW5rICE9ICJUaCIpIGNyYXNoKCk7CgljaHVuayA9IGNo
dW5rUmVhZGVyLm5leHRDaHVua0FzVVRGOFN0cmluZygpOwoJaWYgKGNodW5rICE9ICIgIikgY3Jh
c2goKTsKCWNodW5rUmVhZGVyLnNldFNlcGFyYXRvcigiaGUiKTsKCWNodW5rID0gY2h1bmtSZWFk
ZXIubmV4dENodW5rQXNVVEY4U3RyaW5nKCk7CglpZiAoY2h1bmsgIT0gIiB0IikgY3Jhc2goKTsK
CWNodW5rID0gY2h1bmtSZWFkZXIubmV4dENodW5rQXNVVEY4U3RyaW5nKCk7CglpZiAoY2h1bmsg
IT0gIiBtb3N0IHJpZGljdWxvdXMgaGlzdG9yeSB0IikgY3Jhc2goKTsKCS8vIFNldCBhIG5vbiBl
eGlzdGluZyBzZXBhcmF0b3IuCgljaHVua1JlYWRlci5zZXRTZXBhcmF0b3IoInRjaGludGEiKTsK
CWNodW5rID0gY2h1bmtSZWFkZXIubmV4dENodW5rQXNVVEY4U3RyaW5nKCk7CglpZiAoY2h1bmsg
IT0gInJlIGlzLiIpIGNyYXNoKCk7CgkvLyBXZSBzaG91bGQgYmUgYXQgdGhlIGVuZCBvZiB0aGUg
c3RyaW5nLCBzbyBhbnkgc3Vic2VxdWVudCBjYWxsIHRvIG5leHRDaHVuayBzaG91bGQgcmV0dXJu
IG51bGwuCgljaHVua1JlYWRlci5zZXRTZXBhcmF0b3IoIi4iKTsKCWNodW5rID0gY2h1bmtSZWFk
ZXIubmV4dENodW5rQXNVVEY4U3RyaW5nKHRydWUpOwoJaWYgKCFjaHVuay5pc051bGwoKSkgY3Jh
c2goKTsgCiAgICB9CgogICAgewogICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHNpbXBsZVRleHQg
PSAiZG9nIjsKICAgICAgICBSZWZQdHI8VGVzdFNoYXJlZEJ1ZmZlcj4gc2hhcmVkQnVmZmVyID0g
YWRvcHRSZWYobmV3IFRlc3RTaGFyZWRCdWZmZXIoc2ltcGxlVGV4dCwgc3RybGVuKHNpbXBsZVRl
eHQpLCA1KSk7Cgljb25zdCBjaGFyKiBjb25zdCBleHBlY3RlZENodW5rc1dpdGhvdXRTZXBhcmF0
b3JbXSA9IHsgIiIgfTsKICAgICAgICBzdGQ6OnZlY3RvcjxTdHJpbmc+IGNodW5rczsKCXJlYWRB
bGxDaHVua3MoJmNodW5rcywgc2hhcmVkQnVmZmVyLmdldCgpLCAiZG9nIik7CglpZiAoIWNoZWNr
Q2h1bmtzKGNodW5rcywgZXhwZWN0ZWRDaHVua3NXaXRob3V0U2VwYXJhdG9yLCBhcnJheXNpemUo
ZXhwZWN0ZWRDaHVua3NXaXRob3V0U2VwYXJhdG9yKSkpCgkgICAgY3Jhc2goKTsKCWNodW5rcy5j
bGVhcigpOwoJY29uc3QgY2hhciogY29uc3QgZXhwZWN0ZWRDaHVua3NXaXRoU2VwYXJhdG9yW10g
PSB7ICJkb2ciIH07CglyZWFkQWxsQ2h1bmtzKCZjaHVua3MsIHNoYXJlZEJ1ZmZlci5nZXQoKSwg
ImRvZyIsIHRydWUpOwoJaWYgKCFjaGVja0NodW5rcyhjaHVua3MsIGV4cGVjdGVkQ2h1bmtzV2l0
aFNlcGFyYXRvciwgYXJyYXlzaXplKGV4cGVjdGVkQ2h1bmtzV2l0aFNlcGFyYXRvcikpKQoJICAg
IGNyYXNoKCk7CgogICAgfQogICAgLy8gRW5kcyB3aXRoIHJlcGVhdGVkIHNlcGFyYXRvcnMuCiAg
ICB7CiAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc2ltcGxlVGV4dCA9ICJCZWF1Y291cCBkZSBj
aGF0cyBjYXRjYXRjYXRjYXRjYXQiOwogICAgICAgIFJlZlB0cjxUZXN0U2hhcmVkQnVmZmVyPiBz
aGFyZWRCdWZmZXIgPSBhZG9wdFJlZihuZXcgVGVzdFNoYXJlZEJ1ZmZlcihzaW1wbGVUZXh0LCBz
dHJsZW4oc2ltcGxlVGV4dCksIDUpKTsKCWNvbnN0IGNoYXIqIGNvbnN0IGV4cGVjdGVkQ2h1bmtz
V2l0aG91dFNlcGFyYXRvcltdID0geyAiQmVhdWNvdXAgZGUgY2hhdHMgIiwgIiIsICIiLCAiIiwg
IiIgfTsKICAgICAgICBzdGQ6OnZlY3RvcjxTdHJpbmc+IGNodW5rczsKCXJlYWRBbGxDaHVua3Mo
JmNodW5rcywgc2hhcmVkQnVmZmVyLmdldCgpLCAiY2F0Iik7CglpZiAoIWNoZWNrQ2h1bmtzKGNo
dW5rcywgZXhwZWN0ZWRDaHVua3NXaXRob3V0U2VwYXJhdG9yLCBhcnJheXNpemUoZXhwZWN0ZWRD
aHVua3NXaXRob3V0U2VwYXJhdG9yKSkpCgkgICAgY3Jhc2goKTsKCWNodW5rcy5jbGVhcigpOwoJ
Y29uc3QgY2hhciogY29uc3QgZXhwZWN0ZWRDaHVua3NXaXRoU2VwYXJhdG9yW10gPSB7ICJCZWF1
Y291cCBkZSBjaGF0cyBjYXQiLCAiY2F0IiwgImNhdCIsICJjYXQiLCAiY2F0IiB9OwoJcmVhZEFs
bENodW5rcygmY2h1bmtzLCBzaGFyZWRCdWZmZXIuZ2V0KCksICJjYXQiLCB0cnVlKTsKCWlmICgh
Y2hlY2tDaHVua3MoY2h1bmtzLCBleHBlY3RlZENodW5rc1dpdGhTZXBhcmF0b3IsIGFycmF5c2l6
ZShleHBlY3RlZENodW5rc1dpdGhTZXBhcmF0b3IpKSkKCSAgICBjcmFzaCgpOwogICAgfQogICAg
ewoJY29uc3QgY2hhciogY29uc3Qgc2ltcGxlVGV4dCA9ICJUaGlzIGlzIGEgc2ltcGxlIHRlc3Qu
XHJcbk5vdGhpbmcgc3BlY2lhbC5cclxuIjsKCWNvbnN0IGNoYXIqIGNvbnN0IGV4cGVjdGVkQ2h1
bmtzW10gPSB7ICJUaGlzIGlzIGEgc2ltcGxlIHRlc3QuIiwgIk5vdGhpbmcgc3BlY2lhbC4iIH07
CglSZWZQdHI8VGVzdFNoYXJlZEJ1ZmZlcj4gc2hhcmVkQnVmZmVyID0gYWRvcHRSZWYobmV3IFRl
c3RTaGFyZWRCdWZmZXIoc2ltcGxlVGV4dCwgc3RybGVuKHNpbXBsZVRleHQpLCAxMDI0KSk7Cglz
dGQ6OnZlY3RvcjxTdHJpbmc+IGNodW5rczsKCXJlYWRBbGxDaHVua3MoJmNodW5rcywgc2hhcmVk
QnVmZmVyLmdldCgpKTsKCWlmICghY2hlY2tDaHVua3MoY2h1bmtzLCBleHBlY3RlZENodW5rcywg
YXJyYXlzaXplKGV4cGVjdGVkQ2h1bmtzKSkpCgkgICAgY3Jhc2goKTsKICAgIH0KCiAgICB7Cglj
b25zdCBjaGFyKiBjb25zdCBzaW1wbGVUZXh0ID0gIlRoaXMgaXMgYSBzaW1wbGUgdGVzdC5cclxu
Tm90aGluZyBzcGVjaWFsLiI7Cgljb25zdCBjaGFyKiBjb25zdCBleHBlY3RlZENodW5rc1tdID0g
eyAiVGhpcyBpcyBhIHNpbXBsZSB0ZXN0LiIsICJOb3RoaW5nIHNwZWNpYWwuIiB9OwoJUmVmUHRy
PFRlc3RTaGFyZWRCdWZmZXI+IHNoYXJlZEJ1ZmZlciA9IGFkb3B0UmVmKG5ldyBUZXN0U2hhcmVk
QnVmZmVyKHNpbXBsZVRleHQsIHN0cmxlbihzaW1wbGVUZXh0KSwgMTAyNCkpOwoJc3RkOjp2ZWN0
b3I8U3RyaW5nPiBjaHVua3M7CglyZWFkQWxsQ2h1bmtzKCZjaHVua3MsIHNoYXJlZEJ1ZmZlci5n
ZXQoKSk7CglpZiAoIWNoZWNrQ2h1bmtzKGNodW5rcywgZXhwZWN0ZWRDaHVua3MsIGFycmF5c2l6
ZShleHBlY3RlZENodW5rcykpKQoJICAgIGNyYXNoKCk7CiAgICB9CgogICAgewoJY29uc3QgY2hh
ciogY29uc3Qgc2ltcGxlVGV4dCA9ICJTaW1wbGUgbGluZSB3aXRoIG5vIEVPTC4iOwoJY29uc3Qg
Y2hhciogY29uc3QgZXhwZWN0ZWRDaHVua3NbXSA9IHsgIlNpbXBsZSBsaW5lIHdpdGggbm8gRU9M
LiIgfTsKCVJlZlB0cjxUZXN0U2hhcmVkQnVmZmVyPiBzaGFyZWRCdWZmZXIgPSBhZG9wdFJlZihu
ZXcgVGVzdFNoYXJlZEJ1ZmZlcihzaW1wbGVUZXh0LCBzdHJsZW4oc2ltcGxlVGV4dCksIDUpKTsK
CXN0ZDo6dmVjdG9yPFN0cmluZz4gY2h1bmtzOwoJcmVhZEFsbENodW5rcygmY2h1bmtzLCBzaGFy
ZWRCdWZmZXIuZ2V0KCkpOwoJaWYgKCFjaGVja0NodW5rcyhjaHVua3MsIGV4cGVjdGVkQ2h1bmtz
LCBhcnJheXNpemUoZXhwZWN0ZWRDaHVua3MpKSkKICAgICAgICBjcmFzaCgpOwogICAgfQoKICAg
IHsKICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzaW1wbGVUZXh0ID0gIkxpbmUgdGhhdCBoYXMg
YSBFT0xcclxuYW5kIHRoZW4gZW5kcyB3aXRoIGEgQ1JcciI7CiAgICAgICAgY29uc3QgY2hhciog
Y29uc3QgZXhwZWN0ZWRDaHVua3NbXSA9IHsgIkxpbmUgdGhhdCBoYXMgYSBFT0wiLCAiYW5kIHRo
ZW4gZW5kcyB3aXRoIGEgQ1JcciIgfTsKICAgICAgICBSZWZQdHI8VGVzdFNoYXJlZEJ1ZmZlcj4g
c2hhcmVkQnVmZmVyID0gYWRvcHRSZWYobmV3IFRlc3RTaGFyZWRCdWZmZXIoc2ltcGxlVGV4dCwg
c3RybGVuKHNpbXBsZVRleHQpLCAxMDI0KSk7CiAgICAgICAgc3RkOjp2ZWN0b3I8U3RyaW5nPiBj
aHVua3M7CiAgICAgICAgcmVhZEFsbENodW5rcygmY2h1bmtzLCBzaGFyZWRCdWZmZXIuZ2V0KCkp
OwogICAgICAgIGlmICghY2hlY2tDaHVua3MoY2h1bmtzLCBleHBlY3RlZENodW5rcywgYXJyYXlz
aXplKGV4cGVjdGVkQ2h1bmtzKSkpCiAgICAgICAgICAgIGNyYXNoKCk7CiAgICB9CgogICAgewog
ICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHNpbXBsZVRleHQgPSAiUmVwZWF0ZWQgQ1JzIHNob3Vs
ZCBub3QgY2F1c2UgcHJvYmVtc1xyXHJcclxuU2hvdWxuJ3QgdGhleT8iOwogICAgICAgIGNvbnN0
IGNoYXIqIGNvbnN0IGV4cGVjdGVkQ2h1bmtzW10gPSB7ICJSZXBlYXRlZCBDUnMgc2hvdWxkIG5v
dCBjYXVzZSBwcm9iZW1zXHJcciIsICJTaG91bG4ndCB0aGV5PyIgfTsKICAgICAgICBSZWZQdHI8
VGVzdFNoYXJlZEJ1ZmZlcj4gc2hhcmVkQnVmZmVyID0gYWRvcHRSZWYobmV3IFRlc3RTaGFyZWRC
dWZmZXIoc2ltcGxlVGV4dCwgc3RybGVuKHNpbXBsZVRleHQpLCAxMDI0KSk7CiAgICAgICAgc3Rk
Ojp2ZWN0b3I8U3RyaW5nPiBjaHVua3M7CiAgICAgICAgcmVhZEFsbENodW5rcygmY2h1bmtzLCBz
aGFyZWRCdWZmZXIuZ2V0KCkpOwogICAgICAgIGlmICghY2hlY2tDaHVua3MoY2h1bmtzLCBleHBl
Y3RlZENodW5rcywgYXJyYXlzaXplKGV4cGVjdGVkQ2h1bmtzKSkpCiAgICAgICAgICAgIGNyYXNo
KCk7CiAgICB9CiAgICB7CiAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc2ltcGxlVGV4dCA9ICJF
T0xcclxuIGJldHdlXHJcbmVuIHNlZ21lbnRzIjsKICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBl
eHBlY3RlZENodW5rc1tdID0geyAiRU9MIiwgIiBiZXR3ZSIsICJlbiBzZWdtZW50cyIgfTsKICAg
ICAgICBSZWZQdHI8VGVzdFNoYXJlZEJ1ZmZlcj4gc2hhcmVkQnVmZmVyID0gYWRvcHRSZWYobmV3
IFRlc3RTaGFyZWRCdWZmZXIoc2ltcGxlVGV4dCwgc3RybGVuKHNpbXBsZVRleHQpLCA0KSk7CiAg
ICAgICAgc3RkOjp2ZWN0b3I8U3RyaW5nPiBjaHVua3M7CiAgICAgICAgcmVhZEFsbENodW5rcygm
Y2h1bmtzLCBzaGFyZWRCdWZmZXIuZ2V0KCkpOwogICAgICAgIGlmICghY2hlY2tDaHVua3MoY2h1
bmtzLCBleHBlY3RlZENodW5rcywgYXJyYXlzaXplKGV4cGVjdGVkQ2h1bmtzKSkpCgkgICAgY3Jh
c2goKTsKICAgIH0KfQoK
</data>

          </attachment>
      

    </bug>

</bugzilla>