<?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>36010</bug_id>
          
          <creation_ts>2010-03-11 04:17:25 -0800</creation_ts>
          <short_desc>RenderText::m_text should be a String, not RefPtr&lt;StringImpl&gt;</short_desc>
          <delta_ts>2010-03-16 00:48:08 -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>
          
          <blocked>24906</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Shinichiro Hamaji">hamaji</reporter>
          <assigned_to name="Shinichiro Hamaji">hamaji</assigned_to>
          <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>198548</commentid>
    <comment_count>0</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-03-11 04:17:25 -0800</bug_when>
    <thetext>This was suggested by Darin in Bug 24906.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198549</commentid>
    <comment_count>1</comment_count>
      <attachid>50486</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-03-11 04:18:55 -0800</bug_when>
    <thetext>Created attachment 50486
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199105</commentid>
    <comment_count>2</comment_count>
      <attachid>50486</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-03-12 09:58:18 -0800</bug_when>
    <thetext>Comment on attachment 50486
Patch v1

The main thing we need to do here is do performance testing to be sure we didn&apos;t slow anything down.

&gt; +bool charactersAreAllASCII(const UChar*, size_t);

I think we should move all the UChar* operations to the top of the file here instead of moving up just this one. If we can come up with a good file name we also might want to move them into a separate header.

&gt; -            char c = (*m_text)[i];
&gt; +            char c = m_text[i];

It&apos;s kind of inefficient to go through the String -&gt; StringImpl -&gt; characters thing each time through the loop. It would be better to get a pointer to the characters outside the loop. But only if this has a measurable performance effect.

&gt;              case CAPITALIZE: {
&gt; -                m_text = m_text-&gt;capitalize(previousCharacter());
&gt; +                m_text = m_text.impl()-&gt;capitalize(previousCharacter());
&gt;                  break;
&gt;              }

No need for the braces here. Do we have a guarantee that m_text.impl() is not 0? We should add this function to PlatformString.h so we don&apos;t have to go down to the StringImpl level.

&gt;              case UPPERCASE:
&gt; -                m_text = m_text-&gt;upper();
&gt; +                m_text = m_text.impl()-&gt;upper();
&gt;                  break;
&gt;              case LOWERCASE:
&gt; -                m_text = m_text-&gt;lower();
&gt; +                m_text = m_text.impl()-&gt;lower();
&gt;                  break;

&gt;              case TSCIRCLE:
&gt; -                m_text = m_text-&gt;secure(whiteBullet);
&gt; +                m_text = m_text.impl()-&gt;secure(whiteBullet);
&gt;                  break;
&gt;              case TSDISC:
&gt; -                m_text = m_text-&gt;secure(bullet);
&gt; +                m_text = m_text.impl()-&gt;secure(bullet);
&gt;                  break;
&gt;              case TSSQUARE:
&gt; -                m_text = m_text-&gt;secure(blackSquare);
&gt; +                m_text = m_text.impl()-&gt;secure(blackSquare);

Do we have a guarantee that m_text.impl() is not 0? We should add these functions to PlatformString.h so we don&apos;t have to go down to the StringImpl level.

&gt; -    StringImpl* text() const { return m_text.get(); }
&gt; +    StringImpl* text() const { return m_text.impl(); }

I think we should change this method to return a const String&amp;, but in a later patch.

&gt; -    const UChar* characters() const { return m_text-&gt;characters(); }
&gt; -    unsigned textLength() const { return m_text-&gt;length(); } // non virtual implementation of length()
&gt; +    const UChar* characters() const { return m_text.characters(); }
&gt; +    unsigned textLength() const { return m_text.length(); } // non virtual implementation of length()

I think we should consider removing one or both of these since we already have text(), but in a separate patch.

I&apos;m going to say review+ but the &quot;impl non-0&quot; concern and the performance concern are both things that need to be checked somehow before landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199579</commentid>
    <comment_count>3</comment_count>
      <attachid>50693</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-03-15 01:53:15 -0700</bug_when>
    <thetext>Created attachment 50693
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199581</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-15 01:58:30 -0700</bug_when>
    <thetext>Attachment 50693 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/text/PlatformString.h:157:  More than one command on the same line in if  [whitespace/parens] [4]
WebCore/platform/text/PlatformString.h:158:  More than one command on the same line in if  [whitespace/parens] [4]
WebCore/platform/text/PlatformString.h:159:  More than one command on the same line in if  [whitespace/parens] [4]
WebCore/platform/text/PlatformString.h:160:  More than one command on the same line in if  [whitespace/parens] [4]
WebCore/platform/text/StringImpl.h:191:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 5 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199583</commentid>
    <comment_count>5</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-03-15 02:05:02 -0700</bug_when>
    <thetext>Thanks for the review! Could you take a look again?

I think style checker will complain about this patch, but I think they would be OK. This is another instance of Bug 33814.

&gt; It&apos;s kind of inefficient to go through the String -&gt; StringImpl -&gt; characters
&gt; thing each time through the loop. It would be better to get a pointer to the
&gt; characters outside the loop. But only if this has a measurable performance
&gt; effect.

I see. I found there are a small difference between StringImpl::operator[] and String::operator[]. The former ASSERTs the specified index is smaller than the length of string, and the latter just returns zero. I think the former would be more informative when someone actually meets the overflow. I rewrote all String::operator[] calls in loops with StringImpl::operator[] calls. So, there should be no performance issue anymore (but it&apos;s very nice if you told me the good or standard way to measure the performances for this kind of changes in this chance).

&gt; Do we have a guarantee that m_text.impl() is not 0? We should add these
&gt; functions to PlatformString.h so we don&apos;t have to go down to the StringImpl
&gt; level.

Yes, there is ASSERT(m_text) in the beginning of this function, but I agree we want these functions in PlatformString.h. I&apos;ve added make(Lower|Upper|Secure|Capitalized) as lower and upper have already been defined and have different semantics. I&apos;m not sure if they are standard WebKit naming. Please let me know if you know better names.

&gt; I think we should change this method to return a const String&amp;, but in a later
&gt; patch.
&gt;
&gt; I think we should consider removing one or both of these since we already have
&gt; text(), but in a separate patch.

I agree.

I found many functions in StringImpl should be const functions. I&apos;d like to do this refactoring in a later patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199658</commentid>
    <comment_count>6</comment_count>
      <attachid>50693</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-03-15 08:16:15 -0700</bug_when>
    <thetext>Comment on attachment 50693
Patch v2

&gt; +    void makeLower() { if (m_impl) m_impl = m_impl-&gt;lower(); }
&gt; +    void makeUpper() { if (m_impl) m_impl = m_impl-&gt;upper(); }
&gt; +    void makeSecure(UChar aChar) { if (m_impl) m_impl = m_impl-&gt;secure(aChar); }
&gt; +    void makeCapitalized(UChar previousCharacter) { if (m_impl) m_impl = m_impl-&gt;capitalize(previousCharacter); }

When it&apos;s unclear whether the function name is a verb or some other part of speech, I think it&apos;s good to choose something that is clearer. In the case of &quot;capitalize&quot; I don&apos;t think &quot;makeCapitalized&quot; is any better.

But lets go with these as-is. Should be easy to rename them later.

&gt; +    bool charactersAreAllASCII() const { return WebCore::charactersAreAllASCII(characters(), length()); }

For boolean members we try to name them so they complete a phrase &quot;string &lt;xxx&gt;&quot;. Given that, the function name should be something more like containsOnlyASCIICharacters or containsOnlyASCII.

&gt; -UChar32 StringImpl::characterStartingAt(unsigned i)
&gt; +UChar32 StringImpl::characterStartingAt(unsigned i) const

&gt; -    UChar operator[](unsigned i) { ASSERT(i &lt; m_length); return m_data[i]; }
&gt; -    UChar32 characterStartingAt(unsigned);
&gt; +    UChar operator[](unsigned i) const { ASSERT(i &lt; m_length); return m_data[i]; }
&gt; +    UChar32 characterStartingAt(unsigned) const;

StringImpl member functions should not be marked const. Because all StringImpl are immutable, all functions could be marked const. Any that change the string return a new StringImpl*. Our design choice for StringImpl was to never use const StringImpl* at all and to leave them all non-const. So it&apos;s strange that you decided to make these const.

&gt; +        const StringImpl&amp; text = *m_text.impl();

&gt; +    const StringImpl&amp; text = *m_text.impl();

&gt; +    const StringImpl&amp; text = *m_text.impl();

There&apos;s no reason for the const here. StringImpl objects are all immutable. If we do want to use const with StringImpl then we need to make all the member functions const, since none of them change the state.

Patch is OK as-is, but it would be better not to tamper with the const on StringImpl.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199897</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-15 15:58:08 -0700</bug_when>
    <thetext>Attachment 50693 was posted by a committer and has review+, assigning to Shinichiro Hamaji for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200049</commentid>
    <comment_count>8</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-03-16 00:39:44 -0700</bug_when>
    <thetext>Committed r56047: &lt;http://trac.webkit.org/changeset/56047&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200054</commentid>
    <comment_count>9</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-03-16 00:48:08 -0700</bug_when>
    <thetext>&gt; StringImpl member functions should not be marked const. Because all StringImpl
&gt; are immutable, all functions could be marked const. Any that change the string
&gt; return a new StringImpl*. Our design choice for StringImpl was to never use
&gt; const StringImpl* at all and to leave them all non-const. So it&apos;s strange that
&gt; you decided to make these const.

Ah, I didn&apos;t notice that we are trying not to mark members of StringImpl as const. Thanks for the info. It seems we may want to remove all consts from StringImpl&apos;s member functions. I&apos;d like to fix this in a later patch. It will remove the unnecessary consts and add a few comment about this policy.

I landed the patch with this change and another change for s/charactersAreAllASCII/containsOnlyASCII/ . I&apos;m sorry I did the same mistake (boolean methods should make sense as an English sentence) again.

Thanks again for your review!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50486</attachid>
            <date>2010-03-11 04:18:55 -0800</date>
            <delta_ts>2010-03-15 01:53:10 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-36010-20100311041853.patch</filename>
            <type>text/plain</type>
            <size>12164</size>
            <attacher name="Shinichiro Hamaji">hamaji</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2U0YTcyZS4uYjY0ZTk2OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMC0wMy0xMSAgU2hpbmljaGlybyBI
YW1hamkgIDxoYW1hamlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlbmRlclRleHQ6Om1fdGV4dCBzaG91bGQgYmUgYSBTdHJp
bmcsIG5vdCBSZWZQdHI8U3RyaW5nSW1wbD4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM2MDEwCisKKyAgICAgICAgUmVmYWN0b3Jpbmcgb25seSwgc28g
bm8gbmV3IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5o
OgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjpjaGFyYWN0ZXJzQXJlQWxsQVNDSUkpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHQ6OlJlbmRlclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6d2lkdGhG
cm9tQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6dHJpbW1lZFByZWZXaWR0
aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y29udGFpbnNPbmx5V2hpdGVzcGFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpzZXRUZXh0SW50ZXJuYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6c2V0VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUZXh0OjpwcmV2aW91c09mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
OjpwcmV2aW91c09mZnNldEZvckJhY2t3YXJkRGVsZXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dDo6bmV4dE9mZnNldCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dDo6Y2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
Ojp0ZXh0TGVuZ3RoKToKKwogMjAxMC0wMy0xMSAgWm9sdGFuIEhvcnZhdGggIDx6b2x0YW5Ad2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmgKaW5kZXggOGEzNzliZS4uZDJlNDI5ZCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmgKQEAgLTYzLDYgKzYzLDggQEAgY2xhc3Mg
Q1N0cmluZzsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIHN0cnVjdCBTdHJpbmdIYXNoOwogCitib29s
IGNoYXJhY3RlcnNBcmVBbGxBU0NJSShjb25zdCBVQ2hhciosIHNpemVfdCk7CisKIGNsYXNzIFN0
cmluZyB7CiBwdWJsaWM6CiAgICAgU3RyaW5nKCkgeyB9IC8vIGdpdmVzIG51bGwgc3RyaW5nLCBk
aXN0aW5ndWlzaGFibGUgZnJvbSBhbiBlbXB0eSBzdHJpbmcKQEAgLTI1Niw2ICsyNTgsOCBAQCBw
dWJsaWM6CiAgICAgLy8gdGhlIHNwZWNpZmllZCBncmFwaGVtZSBjbHVzdGVyIGxlbmd0aC4KICAg
ICB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZXJzKHVuc2lnbmVkKSBjb25z
dDsKIAorICAgIGJvb2wgY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKCkgY29uc3QgeyByZXR1cm4gV2Vi
Q29yZTo6Y2hhcmFjdGVyc0FyZUFsbEFTQ0lJKGNoYXJhY3RlcnMoKSwgbGVuZ3RoKCkpOyB9CisK
IHByaXZhdGU6CiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1faW1wbDsKIH07CkBAIC0yOTYsOCAr
MzAwLDYgQEAgaW5saW5lIHZvaWQgc3dhcChTdHJpbmcmIGEsIFN0cmluZyYgYikgeyBhLnN3YXAo
Yik7IH0KIAogLy8gU3RyaW5nIE9wZXJhdGlvbnMKIAotYm9vbCBjaGFyYWN0ZXJzQXJlQWxsQVND
SUkoY29uc3QgVUNoYXIqLCBzaXplX3QpOwotCiBpbnQgY2hhcmFjdGVyc1RvSW50U3RyaWN0KGNv
bnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IDAsIGludCBiYXNlID0gMTApOwogdW5zaWdu
ZWQgY2hhcmFjdGVyc1RvVUludFN0cmljdChjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sg
PSAwLCBpbnQgYmFzZSA9IDEwKTsKIGludDY0X3QgY2hhcmFjdGVyc1RvSW50NjRTdHJpY3QoY29u
c3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCwgaW50IGJhc2UgPSAxMCk7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHQuY3BwCmluZGV4IDQ2NTMyNzMuLmJlNzljNzcgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuY3BwCkBAIC00OCwxMiArNDgsNiBAQCB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBGSVhNRTogTW92ZSB0byBTdHJpbmdJbXBsLmggZXZl
bnR1YWxseS4KLXN0YXRpYyBpbmxpbmUgYm9vbCBjaGFyYWN0ZXJzQXJlQWxsQVNDSUkoU3RyaW5n
SW1wbCogdGV4dCkKLXsKLSAgICByZXR1cm4gY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHRleHQtPmNo
YXJhY3RlcnMoKSwgdGV4dC0+bGVuZ3RoKCkpOwotfQotCiBSZW5kZXJUZXh0OjpSZW5kZXJUZXh0
KE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc3RyKQogICAgICA6IFJlbmRlck9i
amVjdChub2RlKQogICAgICAsIG1fbWluV2lkdGgoLTEpCkBAIC02Niw3ICs2MCw3IEBAIFJlbmRl
clRleHQ6OlJlbmRlclRleHQoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBzdHIp
CiAgICAgICwgbV9oYXNUYWIoZmFsc2UpCiAgICAgICwgbV9saW5lc0RpcnR5KGZhbHNlKQogICAg
ICAsIG1fY29udGFpbnNSZXZlcnNlZFRleHQoZmFsc2UpCi0gICAgICwgbV9pc0FsbEFTQ0lJKGNo
YXJhY3RlcnNBcmVBbGxBU0NJSShtX3RleHQuZ2V0KCkpKQorICAgICAsIG1faXNBbGxBU0NJSSht
X3RleHQuY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKCkpCiAgICAgICwgbV9rbm93bk5vdFRvVXNlRmFs
bGJhY2tGb250cyhmYWxzZSkKIHsKICAgICBBU1NFUlQobV90ZXh0KTsKQEAgLTQ0Myw3ICs0Mzcs
NyBAQCBBTFdBWVNfSU5MSU5FIGludCBSZW5kZXJUZXh0Ojp3aWR0aEZyb21DYWNoZShjb25zdCBG
b250JiBmLCBpbnQgc3RhcnQsIGludCBsZW4sCiAgICAgICAgIGJvb2wgaXNTcGFjZTsKICAgICAg
ICAgYm9vbCBwcmV2aW91c0NoYXJXYXNTcGFjZSA9IHRydWU7IC8vIEZJWE1FOiBQcmVzZXJ2ZXMg
aGlzdG9yaWNhbCBiZWhhdmlvciwgYnV0IHNlZW1zIHdyb25nIGZvciBzdGFydCA+IDAuCiAgICAg
ICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgbGVuOyBpKyspIHsKLSAgICAgICAg
ICAgIGNoYXIgYyA9ICgqbV90ZXh0KVtpXTsKKyAgICAgICAgICAgIGNoYXIgYyA9IG1fdGV4dFtp
XTsKICAgICAgICAgICAgIGlmIChjIDw9ICcgJykgewogICAgICAgICAgICAgICAgIGlmIChjID09
ICcgJyB8fCBjID09ICdcbicpIHsKICAgICAgICAgICAgICAgICAgICAgdyArPSBtb25vc3BhY2VD
aGFyYWN0ZXJXaWR0aDsKQEAgLTQ4Niw3ICs0ODAsNyBAQCB2b2lkIFJlbmRlclRleHQ6OnRyaW1t
ZWRQcmVmV2lkdGhzKGludCBsZWFkV2lkdGgsCiAKICAgICBpbnQgbGVuID0gdGV4dExlbmd0aCgp
OwogCi0gICAgaWYgKCFsZW4gfHwgKHN0cmlwRnJvbnRTcGFjZXMgJiYgbV90ZXh0LT5jb250YWlu
c09ubHlXaGl0ZXNwYWNlKCkpKSB7CisgICAgaWYgKCFsZW4gfHwgKHN0cmlwRnJvbnRTcGFjZXMg
JiYgdGV4dCgpLT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpKSB7CiAgICAgICAgIGJlZ2luTWlu
VyA9IDA7CiAgICAgICAgIGVuZE1pblcgPSAwOwogICAgICAgICBiZWdpbk1heFcgPSAwOwpAQCAt
NTA2LDcgKzUwMCw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6dHJpbW1lZFByZWZXaWR0aHMoaW50IGxl
YWRXaWR0aCwKICAgICBoYXNCcmVha2FibGVDaGFyID0gbV9oYXNCcmVha2FibGVDaGFyOwogICAg
IGhhc0JyZWFrID0gbV9oYXNCcmVhazsKIAotICAgIGlmICgoKm1fdGV4dClbMF0gPT0gJyAnIHx8
ICgoKm1fdGV4dClbMF0gPT0gJ1xuJyAmJiAhc3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkpIHx8
ICgqbV90ZXh0KVswXSA9PSAnXHQnKSB7CisgICAgaWYgKG1fdGV4dFswXSA9PSAnICcgfHwgKG1f
dGV4dFswXSA9PSAnXG4nICYmICFzdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKSkgfHwgbV90ZXh0
WzBdID09ICdcdCcpIHsKICAgICAgICAgY29uc3QgRm9udCYgZiA9IHN0eWxlKCktPmZvbnQoKTsg
Ly8gRklYTUU6IFRoaXMgaWdub3JlcyBmaXJzdC1saW5lLgogICAgICAgICBpZiAoc3RyaXBGcm9u
dFNwYWNlcykgewogICAgICAgICAgICAgY29uc3QgVUNoYXIgc3BhY2UgPSAnICc7CkBAIC01Mjks
NyArNTIzLDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojp0cmltbWVkUHJlZldpZHRocyhpbnQgbGVhZFdp
ZHRoLAogICAgICAgICBlbmRNYXhXID0gbWF4VzsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBsZW47IGkrKykgewogICAgICAgICAgICAgaW50IGxpbmVsZW4gPSAwOwotICAgICAgICAgICAg
d2hpbGUgKGkgKyBsaW5lbGVuIDwgbGVuICYmICgqbV90ZXh0KVtpICsgbGluZWxlbl0gIT0gJ1xu
JykKKyAgICAgICAgICAgIHdoaWxlIChpICsgbGluZWxlbiA8IGxlbiAmJiBtX3RleHRbaSArIGxp
bmVsZW5dICE9ICdcbicpCiAgICAgICAgICAgICAgICAgbGluZWxlbisrOwogCiAgICAgICAgICAg
ICBpZiAobGluZWxlbikgewpAQCAtNzc5LDcgKzc3Myw3IEBAIGJvb2wgUmVuZGVyVGV4dDo6Y29u
dGFpbnNPbmx5V2hpdGVzcGFjZSh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4pIGNvbnN0CiB7
CiAgICAgdW5zaWduZWQgY3VyclBvczsKICAgICBmb3IgKGN1cnJQb3MgPSBmcm9tOwotICAgICAg
ICAgY3VyclBvcyA8IGZyb20gKyBsZW4gJiYgKCgqbV90ZXh0KVtjdXJyUG9zXSA9PSAnXG4nIHx8
ICgqbV90ZXh0KVtjdXJyUG9zXSA9PSAnICcgfHwgKCptX3RleHQpW2N1cnJQb3NdID09ICdcdCcp
OworICAgICAgICAgY3VyclBvcyA8IGZyb20gKyBsZW4gJiYgKG1fdGV4dFtjdXJyUG9zXSA9PSAn
XG4nIHx8IG1fdGV4dFtjdXJyUG9zXSA9PSAnICcgfHwgbV90ZXh0W2N1cnJQb3NdID09ICdcdCcp
OwogICAgICAgICAgY3VyclBvcysrKSB7IH0KICAgICByZXR1cm4gY3VyclBvcyA+PSAoZnJvbSAr
IGxlbik7CiB9CkBAIC05NTIsNyArOTQ2LDcgQEAgdm9pZCBSZW5kZXJUZXh0OjpzZXRUZXh0SW50
ZXJuYWwoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB0ZXh0KQogICAgICAgICAgICAgLy8gY2hhcmFj
dGVycyBpbnRvIHNwYWNlIGNoYXJhY3RlcnMuIFRoZW4sIGl0IHdpbGwgZHJhdyBhbGwgc3BhY2Ug
Y2hhcmFjdGVycywgaW5jbHVkaW5nCiAgICAgICAgICAgICAvLyBsZWFkaW5nLCB0cmFpbGluZyBh
bmQgbXVsdGlwbGUgY29udGlndW91cyBzcGFjZSBjaGFyYWN0ZXJzLgogCi0gICAgICAgICAgICBt
X3RleHQgPSBtX3RleHQtPnJlcGxhY2UoJ1xuJywgJyAnKTsKKyAgICAgICAgICAgIG1fdGV4dC5y
ZXBsYWNlKCdcbicsICcgJyk7CiAKICAgICAgICAgICAgIC8vIElmIHhtbDpzcGFjZT0icHJlc2Vy
dmUiIGlzIHNldCwgd2hpdGUtc3BhY2UgaXMgc2V0IHRvICJwcmUiLCB3aGljaAogICAgICAgICAg
ICAgLy8gcHJlc2VydmVzIGxlYWRpbmcsIHRyYWlsaW5nICYgY29udGlndW91cyBzcGFjZSBjaGFy
YWN0ZXIgZm9yIHVzLgpAQCAtOTYzLDEzICs5NTcsMTMgQEAgdm9pZCBSZW5kZXJUZXh0OjpzZXRU
ZXh0SW50ZXJuYWwoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB0ZXh0KQogICAgICAgICAgICAgLy8g
VGhlbiwgaXQgd2lsbCBzdHJpcCBvZmYgYWxsIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlIGNo
YXJhY3RlcnMuCiAgICAgICAgICAgICAvLyBUaGVuLCBhbGwgY29udGlndW91cyBzcGFjZSBjaGFy
YWN0ZXJzIHdpbGwgYmUgY29uc29saWRhdGVkLiAgICAKIAotICAgICAgICAgICBtX3RleHQgPSBt
X3RleHQtPnJlcGxhY2UoJ1xuJywgU3RyaW5nSW1wbDo6ZW1wdHkoKSk7CisgICAgICAgICAgIG1f
dGV4dC5yZXBsYWNlKCdcbicsIFN0cmluZ0ltcGw6OmVtcHR5KCkpOwogCiAgICAgICAgICAgIC8v
IElmIHhtbDpzcGFjZT0iZGVmYXVsdCIgaXMgc2V0LCB3aGl0ZS1zcGFjZSBpcyBzZXQgdG8gIm5v
d3JhcCIsIHdoaWNoIGhhbmRsZXMKICAgICAgICAgICAgLy8gbGVhZGluZywgdHJhaWxpbmcgJiBj
b250aWd1b3VzIHNwYWNlIGNoYXJhY3RlciByZW1vdmFsIGZvciB1cy4KICAgICAgICAgfQogCi0g
ICAgICAgIG1fdGV4dCA9IG1fdGV4dC0+cmVwbGFjZSgnXHQnLCAnICcpOworICAgICAgICBtX3Rl
eHQucmVwbGFjZSgnXHQnLCAnICcpOwogICAgIH0KICNlbmRpZgogCkBAIC05NzgsMTQgKzk3Miwx
NCBAQCB2b2lkIFJlbmRlclRleHQ6OnNldFRleHRJbnRlcm5hbChQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IHRleHQpCiAgICAgICAgICAgICBjYXNlIFRUTk9ORToKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgQ0FQSVRBTElaRTogewotICAgICAgICAgICAgICAgIG1fdGV4
dCA9IG1fdGV4dC0+Y2FwaXRhbGl6ZShwcmV2aW91c0NoYXJhY3RlcigpKTsKKyAgICAgICAgICAg
ICAgICBtX3RleHQgPSBtX3RleHQuaW1wbCgpLT5jYXBpdGFsaXplKHByZXZpb3VzQ2hhcmFjdGVy
KCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Y2FzZSBVUFBFUkNBU0U6Ci0gICAgICAgICAgICAgICAgbV90ZXh0ID0gbV90ZXh0LT51cHBlcigp
OworICAgICAgICAgICAgICAgIG1fdGV4dCA9IG1fdGV4dC5pbXBsKCktPnVwcGVyKCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIExPV0VSQ0FTRToKLSAgICAgICAg
ICAgICAgICBtX3RleHQgPSBtX3RleHQtPmxvd2VyKCk7CisgICAgICAgICAgICAgICAgbV90ZXh0
ID0gbV90ZXh0LmltcGwoKS0+bG93ZXIoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogCkBAIC05OTUsMjcgKzk4OSwyNyBAQCB2b2lkIFJlbmRlclRleHQ6OnNldFRleHRJbnRl
cm5hbChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRleHQpCiAgICAgICAgICAgICBjYXNlIFRTTk9O
RToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVFNDSVJDTEU6Ci0g
ICAgICAgICAgICAgICAgbV90ZXh0ID0gbV90ZXh0LT5zZWN1cmUod2hpdGVCdWxsZXQpOworICAg
ICAgICAgICAgICAgIG1fdGV4dCA9IG1fdGV4dC5pbXBsKCktPnNlY3VyZSh3aGl0ZUJ1bGxldCk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFRTRElTQzoKLSAgICAg
ICAgICAgICAgICBtX3RleHQgPSBtX3RleHQtPnNlY3VyZShidWxsZXQpOworICAgICAgICAgICAg
ICAgIG1fdGV4dCA9IG1fdGV4dC5pbXBsKCktPnNlY3VyZShidWxsZXQpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBUU1NRVUFSRToKLSAgICAgICAgICAgICAgICBt
X3RleHQgPSBtX3RleHQtPnNlY3VyZShibGFja1NxdWFyZSk7CisgICAgICAgICAgICAgICAgbV90
ZXh0ID0gbV90ZXh0LmltcGwoKS0+c2VjdXJlKGJsYWNrU3F1YXJlKTsKICAgICAgICAgfQogICAg
IH0KIAogICAgIEFTU0VSVChtX3RleHQpOwotICAgIEFTU0VSVCghaXNCUigpIHx8ICh0ZXh0TGVu
Z3RoKCkgPT0gMSAmJiAoKm1fdGV4dClbMF0gPT0gJ1xuJykpOworICAgIEFTU0VSVCghaXNCUigp
IHx8ICh0ZXh0TGVuZ3RoKCkgPT0gMSAmJiBtX3RleHRbMF0gPT0gJ1xuJykpOwogCi0gICAgbV9p
c0FsbEFTQ0lJID0gY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKG1fdGV4dC5nZXQoKSk7CisgICAgbV9p
c0FsbEFTQ0lJID0gbV90ZXh0LmNoYXJhY3RlcnNBcmVBbGxBU0NJSSgpOwogfQogCiB2b2lkIFJl
bmRlclRleHQ6OnNldFRleHQoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB0ZXh0LCBib29sIGZvcmNl
KQogewogICAgIEFTU0VSVCh0ZXh0KTsKIAotICAgIGlmICghZm9yY2UgJiYgZXF1YWwobV90ZXh0
LmdldCgpLCB0ZXh0LmdldCgpKSkKKyAgICBpZiAoIWZvcmNlICYmIGVxdWFsKG1fdGV4dC5pbXBs
KCksIHRleHQuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRUZXh0SW50ZXJuYWwo
dGV4dCk7CkBAIC0xMjQ1LDcgKzEyMzksNyBAQCB1bnNpZ25lZCBSZW5kZXJUZXh0OjpjYXJldE1h
eFJlbmRlcmVkT2Zmc2V0KCkgY29uc3QKIAogaW50IFJlbmRlclRleHQ6OnByZXZpb3VzT2Zmc2V0
KGludCBjdXJyZW50KSBjb25zdAogewotICAgIFN0cmluZ0ltcGwqIHNpID0gbV90ZXh0LmdldCgp
OworICAgIFN0cmluZ0ltcGwqIHNpID0gbV90ZXh0LmltcGwoKTsKICAgICBUZXh0QnJlYWtJdGVy
YXRvciogaXRlcmF0b3IgPSBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKHNpLT5jaGFyYWN0ZXJzKCks
IHNpLT5sZW5ndGgoKSk7CiAgICAgaWYgKCFpdGVyYXRvcikKICAgICAgICAgcmV0dXJuIGN1cnJl
bnQgLSAxOwpAQCAtMTI5NSwxMiArMTI4OSwxMiBAQCBpbnQgUmVuZGVyVGV4dDo6cHJldmlvdXNP
ZmZzZXRGb3JCYWNrd2FyZERlbGV0aW9uKGludCBjdXJyZW50KSBjb25zdAogI2lmIFBMQVRGT1JN
KE1BQykKICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKICAgICB3aGlsZSAoY3VycmVudCA+IDApIHsK
LSAgICAgICAgaWYgKFUxNl9JU19UUkFJTCgoKm1fdGV4dClbLS1jdXJyZW50XSkpCisgICAgICAg
IGlmIChVMTZfSVNfVFJBSUwobV90ZXh0Wy0tY3VycmVudF0pKQogICAgICAgICAgICAgLS1jdXJy
ZW50OwogICAgICAgICBpZiAoY3VycmVudCA8IDApCiAgICAgICAgICAgICBicmVhazsKIAotICAg
ICAgICBVQ2hhcjMyIGNoYXJhY3RlciA9IG1fdGV4dC0+Y2hhcmFjdGVyU3RhcnRpbmdBdChjdXJy
ZW50KTsKKyAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSBtX3RleHQuY2hhcmFjdGVyU3RhcnRp
bmdBdChjdXJyZW50KTsKIAogICAgICAgICAvLyBXZSBkb24ndCBjb21iaW5lIGNoYXJhY3RlcnMg
aW4gQXJtZW5pYW4gLi4uIExpbWJ1IHJhbmdlIGZvciBiYWNrd2FyZCBkZWxldGlvbi4KICAgICAg
ICAgaWYgKChjaGFyYWN0ZXIgPj0gMHgwNTMwKSAmJiAoY2hhcmFjdGVyIDwgMHgxOTUwKSkKQEAg
LTEzMTQsNyArMTMwOCw3IEBAIGludCBSZW5kZXJUZXh0OjpwcmV2aW91c09mZnNldEZvckJhY2t3
YXJkRGVsZXRpb24oaW50IGN1cnJlbnQpIGNvbnN0CiAgICAgICAgIHJldHVybiBjdXJyZW50Owog
CiAgICAgLy8gSGFuZ3VsCi0gICAgY2hhcmFjdGVyID0gbV90ZXh0LT5jaGFyYWN0ZXJTdGFydGlu
Z0F0KGN1cnJlbnQpOworICAgIGNoYXJhY3RlciA9IG1fdGV4dC5jaGFyYWN0ZXJTdGFydGluZ0F0
KGN1cnJlbnQpOwogICAgIGlmICgoKGNoYXJhY3RlciA+PSBIQU5HVUxfQ0hPU0VPTkdfU1RBUlQp
ICYmIChjaGFyYWN0ZXIgPD0gSEFOR1VMX0pPTkdTRU9OR19FTkQpKSB8fCAoKGNoYXJhY3RlciA+
PSBIQU5HVUxfU1lMTEFCTEVfU1RBUlQpICYmIChjaGFyYWN0ZXIgPD0gSEFOR1VMX1NZTExBQkxF
X0VORCkpKSB7CiAgICAgICAgIEhhbmd1bFN0YXRlIHN0YXRlOwogICAgICAgICBIYW5ndWxTdGF0
ZSBpbml0aWFsU3RhdGU7CkBAIC0xMzMwLDcgKzEzMjQsNyBAQCBpbnQgUmVuZGVyVGV4dDo6cHJl
dmlvdXNPZmZzZXRGb3JCYWNrd2FyZERlbGV0aW9uKGludCBjdXJyZW50KSBjb25zdAogCiAgICAg
ICAgIGluaXRpYWxTdGF0ZSA9IHN0YXRlOwogCi0gICAgICAgIHdoaWxlIChjdXJyZW50ID4gMCAm
JiAoKGNoYXJhY3RlciA9IG1fdGV4dC0+Y2hhcmFjdGVyU3RhcnRpbmdBdChjdXJyZW50IC0gMSkp
ID49IEhBTkdVTF9DSE9TRU9OR19TVEFSVCkgJiYgKGNoYXJhY3RlciA8PSBIQU5HVUxfU1lMTEFC
TEVfRU5EKSAmJiAoKGNoYXJhY3RlciA8PSBIQU5HVUxfSk9OR1NFT05HX0VORCkgfHwgKGNoYXJh
Y3RlciA+PSBIQU5HVUxfU1lMTEFCTEVfU1RBUlQpKSkgeworICAgICAgICB3aGlsZSAoY3VycmVu
dCA+IDAgJiYgKChjaGFyYWN0ZXIgPSBtX3RleHQuY2hhcmFjdGVyU3RhcnRpbmdBdChjdXJyZW50
IC0gMSkpID49IEhBTkdVTF9DSE9TRU9OR19TVEFSVCkgJiYgKGNoYXJhY3RlciA8PSBIQU5HVUxf
U1lMTEFCTEVfRU5EKSAmJiAoKGNoYXJhY3RlciA8PSBIQU5HVUxfSk9OR1NFT05HX0VORCkgfHwg
KGNoYXJhY3RlciA+PSBIQU5HVUxfU1lMTEFCTEVfU1RBUlQpKSkgewogICAgICAgICAgICAgc3dp
dGNoIChzdGF0ZSkgewogICAgICAgICAgICAgY2FzZSBIYW5ndWxTdGF0ZVY6CiAgICAgICAgICAg
ICAgICAgaWYgKGNoYXJhY3RlciA8PSBIQU5HVUxfQ0hPU0VPTkdfRU5EKQpAQCAtMTM2OCw3ICsx
MzYyLDcgQEAgaW50IFJlbmRlclRleHQ6OnByZXZpb3VzT2Zmc2V0Rm9yQmFja3dhcmREZWxldGlv
bihpbnQgY3VycmVudCkgY29uc3QKIAogaW50IFJlbmRlclRleHQ6Om5leHRPZmZzZXQoaW50IGN1
cnJlbnQpIGNvbnN0CiB7Ci0gICAgU3RyaW5nSW1wbCogc2kgPSBtX3RleHQuZ2V0KCk7CisgICAg
U3RyaW5nSW1wbCogc2kgPSBtX3RleHQuaW1wbCgpOwogICAgIFRleHRCcmVha0l0ZXJhdG9yKiBp
dGVyYXRvciA9IGN1cnNvck1vdmVtZW50SXRlcmF0b3Ioc2ktPmNoYXJhY3RlcnMoKSwgc2ktPmxl
bmd0aCgpKTsKICAgICBpZiAoIWl0ZXJhdG9yKQogICAgICAgICByZXR1cm4gY3VycmVudCArIDE7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmggYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmgKaW5kZXggZDQ2YmNlOS4uZTllZDE0NyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHQuaApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZGVzdHJveSgpOwogCi0gICAgU3RyaW5nSW1wbCogdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4
dC5nZXQoKTsgfQorICAgIFN0cmluZ0ltcGwqIHRleHQoKSBjb25zdCB7IHJldHVybiBtX3RleHQu
aW1wbCgpOyB9CiAKICAgICBJbmxpbmVUZXh0Qm94KiBjcmVhdGVJbmxpbmVUZXh0Qm94KCk7CiAg
ICAgdm9pZCBkaXJ0eUxpbmVCb3hlcyhib29sIGZ1bGxMYXlvdXQpOwpAQCAtNjMsOCArNjMsOCBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50
KGNvbnN0IEludFBvaW50Jik7CiAKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0
IHsgcmV0dXJuIG1fdGV4dC0+Y2hhcmFjdGVycygpOyB9Ci0gICAgdW5zaWduZWQgdGV4dExlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dC0+bGVuZ3RoKCk7IH0gLy8gbm9uIHZpcnR1YWwgaW1w
bGVtZW50YXRpb24gb2YgbGVuZ3RoKCkKKyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNv
bnN0IHsgcmV0dXJuIG1fdGV4dC5jaGFyYWN0ZXJzKCk7IH0KKyAgICB1bnNpZ25lZCB0ZXh0TGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Lmxlbmd0aCgpOyB9IC8vIG5vbiB2aXJ0dWFsIGlt
cGxlbWVudGF0aW9uIG9mIGxlbmd0aCgpCiAgICAgdm9pZCBwb3NpdGlvbkxpbmVCb3goSW5saW5l
Qm94Kik7CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2ln
bmVkIGxlbiwgY29uc3QgRm9udCYsIGludCB4UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnRE
YXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKSBjb25zdDsKQEAgLTE1MSw3ICsxNTEsNyBAQCBwcml2
YXRlOgogCiAgICAgaW50IG1fbWluV2lkdGg7IC8vIGhlcmUgdG8gbWluaW1pemUgcGFkZGluZyBp
biA2NC1iaXQuCiAKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV90ZXh0OworICAgIFN0cmluZyBt
X3RleHQ7CiAKICAgICBJbmxpbmVUZXh0Qm94KiBtX2ZpcnN0VGV4dEJveDsKICAgICBJbmxpbmVU
ZXh0Qm94KiBtX2xhc3RUZXh0Qm94Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50693</attachid>
            <date>2010-03-15 01:53:15 -0700</date>
            <delta_ts>2010-03-15 08:16:15 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>bug-36010-20100315015313.patch</filename>
            <type>text/plain</type>
            <size>16676</size>
            <attacher name="Shinichiro Hamaji">hamaji</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NWJiYTEwMS4uMzJiMjM3MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMC0wMy0xMSAgU2hpbmljaGlybyBI
YW1hamkgIDxoYW1hamlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlbmRlclRleHQ6Om1fdGV4dCBzaG91bGQgYmUgYSBTdHJp
bmcsIG5vdCBSZWZQdHI8U3RyaW5nSW1wbD4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM2MDEwCisKKyAgICAgICAgUmVmYWN0b3Jpbmcgb25seSwgc28g
bm8gbmV3IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5o
OgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjpjaGFyYWN0ZXJzQXJlQWxsQVNDSUkpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHQ6OlJlbmRlclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6d2lkdGhG
cm9tQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6dHJpbW1lZFByZWZXaWR0
aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y29udGFpbnNPbmx5V2hpdGVzcGFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpzZXRUZXh0SW50ZXJuYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6c2V0VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUZXh0OjpwcmV2aW91c09mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
OjpwcmV2aW91c09mZnNldEZvckJhY2t3YXJkRGVsZXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dDo6bmV4dE9mZnNldCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dDo6Y2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
Ojp0ZXh0TGVuZ3RoKToKKwogMjAxMC0wMy0xNCAgWXV6byBGdWppc2hpbWEgIDx5dXpvQGdvb2ds
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2hpbmljaGlybyBIYW1hamkuCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCmluZGV4IDhhMzc5YmUuLmUxMGI3NTkgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCkBAIC02Myw2ICs2MywyNyBAQCBjbGFz
cyBDU3RyaW5nOwogY2xhc3MgU2hhcmVkQnVmZmVyOwogc3RydWN0IFN0cmluZ0hhc2g7CiAKKy8v
IERlY2xhcmF0aW9ucyBvZiBzdHJpbmcgb3BlcmF0aW9ucworCitib29sIGNoYXJhY3RlcnNBcmVB
bGxBU0NJSShjb25zdCBVQ2hhciosIHNpemVfdCk7CitpbnQgY2hhcmFjdGVyc1RvSW50U3RyaWN0
KGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IDAsIGludCBiYXNlID0gMTApOwordW5z
aWduZWQgY2hhcmFjdGVyc1RvVUludFN0cmljdChjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCog
b2sgPSAwLCBpbnQgYmFzZSA9IDEwKTsKK2ludDY0X3QgY2hhcmFjdGVyc1RvSW50NjRTdHJpY3Qo
Y29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCwgaW50IGJhc2UgPSAxMCk7Cit1aW50
NjRfdCBjaGFyYWN0ZXJzVG9VSW50NjRTdHJpY3QoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wq
IG9rID0gMCwgaW50IGJhc2UgPSAxMCk7CitpbnRwdHJfdCBjaGFyYWN0ZXJzVG9JbnRQdHJTdHJp
Y3QoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCwgaW50IGJhc2UgPSAxMCk7CisK
K2ludCBjaGFyYWN0ZXJzVG9JbnQoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCk7
IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQordW5zaWduZWQgY2hhcmFjdGVyc1RvVUludChj
b25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSAwKTsgLy8gaWdub3JlcyB0cmFpbGluZyBn
YXJiYWdlCitpbnQ2NF90IGNoYXJhY3RlcnNUb0ludDY0KGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBi
b29sKiBvayA9IDApOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKK3VpbnQ2NF90IGNoYXJh
Y3RlcnNUb1VJbnQ2NChjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSAwKTsgLy8gaWdu
b3JlcyB0cmFpbGluZyBnYXJiYWdlCitpbnRwdHJfdCBjaGFyYWN0ZXJzVG9JbnRQdHIoY29uc3Qg
VUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCk7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFn
ZQorCitkb3VibGUgY2hhcmFjdGVyc1RvRG91YmxlKGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29s
KiBvayA9IDApOworZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXQoY29uc3QgVUNoYXIqLCBzaXplX3Qs
IGJvb2wqIG9rID0gMCk7CisKK2ludCBmaW5kKGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBVQ2hhciwg
aW50IHN0YXJ0UG9zaXRpb24gPSAwKTsKK2ludCByZXZlcnNlRmluZChjb25zdCBVQ2hhciosIHNp
emVfdCwgVUNoYXIsIGludCBzdGFydFBvc2l0aW9uID0gLTEpOworCiBjbGFzcyBTdHJpbmcgewog
cHVibGljOgogICAgIFN0cmluZygpIHsgfSAvLyBnaXZlcyBudWxsIHN0cmluZywgZGlzdGluZ3Vp
c2hhYmxlIGZyb20gYW4gZW1wdHkgc3RyaW5nCkBAIC0xMzMsNiArMTU0LDExIEBAIHB1YmxpYzoK
ICAgICBTdHJpbmcmIHJlcGxhY2UoY29uc3QgU3RyaW5nJiBhLCBjb25zdCBTdHJpbmcmIGIpIHsg
aWYgKG1faW1wbCkgbV9pbXBsID0gbV9pbXBsLT5yZXBsYWNlKGEuaW1wbCgpLCBiLmltcGwoKSk7
IHJldHVybiAqdGhpczsgfQogICAgIFN0cmluZyYgcmVwbGFjZSh1bnNpZ25lZCBpbmRleCwgdW5z
aWduZWQgbGVuLCBjb25zdCBTdHJpbmcmIGIpIHsgaWYgKG1faW1wbCkgbV9pbXBsID0gbV9pbXBs
LT5yZXBsYWNlKGluZGV4LCBsZW4sIGIuaW1wbCgpKTsgcmV0dXJuICp0aGlzOyB9CiAKKyAgICB2
b2lkIG1ha2VMb3dlcigpIHsgaWYgKG1faW1wbCkgbV9pbXBsID0gbV9pbXBsLT5sb3dlcigpOyB9
CisgICAgdm9pZCBtYWtlVXBwZXIoKSB7IGlmIChtX2ltcGwpIG1faW1wbCA9IG1faW1wbC0+dXBw
ZXIoKTsgfQorICAgIHZvaWQgbWFrZVNlY3VyZShVQ2hhciBhQ2hhcikgeyBpZiAobV9pbXBsKSBt
X2ltcGwgPSBtX2ltcGwtPnNlY3VyZShhQ2hhcik7IH0KKyAgICB2b2lkIG1ha2VDYXBpdGFsaXpl
ZChVQ2hhciBwcmV2aW91c0NoYXJhY3RlcikgeyBpZiAobV9pbXBsKSBtX2ltcGwgPSBtX2ltcGwt
PmNhcGl0YWxpemUocHJldmlvdXNDaGFyYWN0ZXIpOyB9CisKICAgICB2b2lkIHRydW5jYXRlKHVu
c2lnbmVkIGxlbik7CiAgICAgdm9pZCByZW1vdmUodW5zaWduZWQgcG9zLCBpbnQgbGVuID0gMSk7
CiAKQEAgLTI1Niw2ICsyODIsOCBAQCBwdWJsaWM6CiAgICAgLy8gdGhlIHNwZWNpZmllZCBncmFw
aGVtZSBjbHVzdGVyIGxlbmd0aC4KICAgICB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzSW5HcmFwaGVt
ZUNsdXN0ZXJzKHVuc2lnbmVkKSBjb25zdDsKIAorICAgIGJvb2wgY2hhcmFjdGVyc0FyZUFsbEFT
Q0lJKCkgY29uc3QgeyByZXR1cm4gV2ViQ29yZTo6Y2hhcmFjdGVyc0FyZUFsbEFTQ0lJKGNoYXJh
Y3RlcnMoKSwgbGVuZ3RoKCkpOyB9CisKIHByaXZhdGU6CiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+
IG1faW1wbDsKIH07CkBAIC0yOTQsMjcgKzMyMiw3IEBAIGlubGluZSBib29sIG9wZXJhdG9yIShj
b25zdCBTdHJpbmcmIHN0cikgeyByZXR1cm4gc3RyLmlzTnVsbCgpOyB9CiAKIGlubGluZSB2b2lk
IHN3YXAoU3RyaW5nJiBhLCBTdHJpbmcmIGIpIHsgYS5zd2FwKGIpOyB9CiAKLS8vIFN0cmluZyBP
cGVyYXRpb25zCi0KLWJvb2wgY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKGNvbnN0IFVDaGFyKiwgc2l6
ZV90KTsKLQotaW50IGNoYXJhY3RlcnNUb0ludFN0cmljdChjb25zdCBVQ2hhciosIHNpemVfdCwg
Ym9vbCogb2sgPSAwLCBpbnQgYmFzZSA9IDEwKTsKLXVuc2lnbmVkIGNoYXJhY3RlcnNUb1VJbnRT
dHJpY3QoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCwgaW50IGJhc2UgPSAxMCk7
Ci1pbnQ2NF90IGNoYXJhY3RlcnNUb0ludDY0U3RyaWN0KGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBi
b29sKiBvayA9IDAsIGludCBiYXNlID0gMTApOwotdWludDY0X3QgY2hhcmFjdGVyc1RvVUludDY0
U3RyaWN0KGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IDAsIGludCBiYXNlID0gMTAp
OwotaW50cHRyX3QgY2hhcmFjdGVyc1RvSW50UHRyU3RyaWN0KGNvbnN0IFVDaGFyKiwgc2l6ZV90
LCBib29sKiBvayA9IDAsIGludCBiYXNlID0gMTApOwotCi1pbnQgY2hhcmFjdGVyc1RvSW50KGNv
bnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IDApOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdh
cmJhZ2UKLXVuc2lnbmVkIGNoYXJhY3RlcnNUb1VJbnQoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJv
b2wqIG9rID0gMCk7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQotaW50NjRfdCBjaGFyYWN0
ZXJzVG9JbnQ2NChjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSAwKTsgLy8gaWdub3Jl
cyB0cmFpbGluZyBnYXJiYWdlCi11aW50NjRfdCBjaGFyYWN0ZXJzVG9VSW50NjQoY29uc3QgVUNo
YXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCk7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQot
aW50cHRyX3QgY2hhcmFjdGVyc1RvSW50UHRyKGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBv
ayA9IDApOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKLQotZG91YmxlIGNoYXJhY3RlcnNU
b0RvdWJsZShjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSAwKTsKLWZsb2F0IGNoYXJh
Y3RlcnNUb0Zsb2F0KGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IDApOwotCi1pbnQg
ZmluZChjb25zdCBVQ2hhciosIHNpemVfdCwgVUNoYXIsIGludCBzdGFydFBvc2l0aW9uID0gMCk7
Ci1pbnQgcmV2ZXJzZUZpbmQoY29uc3QgVUNoYXIqLCBzaXplX3QsIFVDaGFyLCBpbnQgc3RhcnRQ
b3NpdGlvbiA9IC0xKTsKKy8vIERlZmluaXRpb25zIG9mIHN0cmluZyBvcGVyYXRpb25zCiAKICNp
ZmRlZiBfX09CSkNfXwogLy8gVGhpcyBpcyBmb3Igc2l0dWF0aW9ucyBpbiBXZWJLaXQgd2hlcmUg
dGhlIGxvbmcgc3RhbmRpbmcgYmVoYXZpb3IgaGFzIGJlZW4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJp
bmdJbXBsLmNwcAppbmRleCBiZDA0YTUxLi5kZmMyOGJiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0
cmluZ0ltcGwuY3BwCkBAIC0xNzMsNyArMTczLDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBT
dHJpbmdJbXBsOjpzdWJzdHJpbmcodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCkKICAg
ICByZXR1cm4gY3JlYXRlKG1fZGF0YSArIHN0YXJ0LCBsZW5ndGgpOwogfQogCi1VQ2hhcjMyIFN0
cmluZ0ltcGw6OmNoYXJhY3RlclN0YXJ0aW5nQXQodW5zaWduZWQgaSkKK1VDaGFyMzIgU3RyaW5n
SW1wbDo6Y2hhcmFjdGVyU3RhcnRpbmdBdCh1bnNpZ25lZCBpKSBjb25zdAogewogICAgIGlmIChV
MTZfSVNfU0lOR0xFKG1fZGF0YVtpXSkpCiAgICAgICAgIHJldHVybiBtX2RhdGFbaV07CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaAppbmRleCBhZjlkNjUwLi41YjYyMmYzIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9TdHJpbmdJbXBsLmgKQEAgLTE4OCw4ICsxODgsOCBAQCBwdWJsaWM6CiAKICAgICBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IHN1YnN0cmluZyh1bnNpZ25lZCBwb3MsIHVuc2lnbmVkIGxl
biA9IFVJTlRfTUFYKTsKIAotICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaSkgeyBBU1NF
UlQoaSA8IG1fbGVuZ3RoKTsgcmV0dXJuIG1fZGF0YVtpXTsgfQotICAgIFVDaGFyMzIgY2hhcmFj
dGVyU3RhcnRpbmdBdCh1bnNpZ25lZCk7CisgICAgVUNoYXIgb3BlcmF0b3JbXSh1bnNpZ25lZCBp
KSBjb25zdCB7IEFTU0VSVChpIDwgbV9sZW5ndGgpOyByZXR1cm4gbV9kYXRhW2ldOyB9CisgICAg
VUNoYXIzMiBjaGFyYWN0ZXJTdGFydGluZ0F0KHVuc2lnbmVkKSBjb25zdDsKIAogICAgIGJvb2wg
Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCmluZGV4
IDExMWQ1MTAuLjA0NWE3NDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHQuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCkBAIC00OCwxMiAr
NDgsNiBAQCB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0vLyBGSVhNRTogTW92ZSB0byBTdHJpbmdJbXBsLmggZXZlbnR1YWxseS4KLXN0YXRpYyBpbmxp
bmUgYm9vbCBjaGFyYWN0ZXJzQXJlQWxsQVNDSUkoU3RyaW5nSW1wbCogdGV4dCkKLXsKLSAgICBy
ZXR1cm4gY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHRleHQtPmNoYXJhY3RlcnMoKSwgdGV4dC0+bGVu
Z3RoKCkpOwotfQotCiBSZW5kZXJUZXh0OjpSZW5kZXJUZXh0KE5vZGUqIG5vZGUsIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gc3RyKQogICAgICA6IFJlbmRlck9iamVjdChub2RlKQogICAgICAsIG1f
bWluV2lkdGgoLTEpCkBAIC02Niw3ICs2MCw3IEBAIFJlbmRlclRleHQ6OlJlbmRlclRleHQoTm9k
ZSogbm9kZSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBzdHIpCiAgICAgICwgbV9oYXNUYWIoZmFs
c2UpCiAgICAgICwgbV9saW5lc0RpcnR5KGZhbHNlKQogICAgICAsIG1fY29udGFpbnNSZXZlcnNl
ZFRleHQoZmFsc2UpCi0gICAgICwgbV9pc0FsbEFTQ0lJKGNoYXJhY3RlcnNBcmVBbGxBU0NJSSht
X3RleHQuZ2V0KCkpKQorICAgICAsIG1faXNBbGxBU0NJSShtX3RleHQuY2hhcmFjdGVyc0FyZUFs
bEFTQ0lJKCkpCiAgICAgICwgbV9rbm93bk5vdFRvVXNlRmFsbGJhY2tGb250cyhmYWxzZSkKIHsK
ICAgICBBU1NFUlQobV90ZXh0KTsKQEAgLTQ0Miw4ICs0MzYsMTAgQEAgQUxXQVlTX0lOTElORSBp
bnQgUmVuZGVyVGV4dDo6d2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udCYgZiwgaW50IHN0YXJ0LCBp
bnQgbGVuLAogICAgICAgICBpbnQgdyA9IDA7CiAgICAgICAgIGJvb2wgaXNTcGFjZTsKICAgICAg
ICAgYm9vbCBwcmV2aW91c0NoYXJXYXNTcGFjZSA9IHRydWU7IC8vIEZJWE1FOiBQcmVzZXJ2ZXMg
aGlzdG9yaWNhbCBiZWhhdmlvciwgYnV0IHNlZW1zIHdyb25nIGZvciBzdGFydCA+IDAuCisgICAg
ICAgIEFTU0VSVChtX3RleHQpOworICAgICAgICBjb25zdCBTdHJpbmdJbXBsJiB0ZXh0ID0gKm1f
dGV4dC5pbXBsKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgbGVu
OyBpKyspIHsKLSAgICAgICAgICAgIGNoYXIgYyA9ICgqbV90ZXh0KVtpXTsKKyAgICAgICAgICAg
IGNoYXIgYyA9IHRleHRbaV07CiAgICAgICAgICAgICBpZiAoYyA8PSAnICcpIHsKICAgICAgICAg
ICAgICAgICBpZiAoYyA9PSAnICcgfHwgYyA9PSAnXG4nKSB7CiAgICAgICAgICAgICAgICAgICAg
IHcgKz0gbW9ub3NwYWNlQ2hhcmFjdGVyV2lkdGg7CkBAIC00ODYsNyArNDgyLDcgQEAgdm9pZCBS
ZW5kZXJUZXh0Ojp0cmltbWVkUHJlZldpZHRocyhpbnQgbGVhZFdpZHRoLAogCiAgICAgaW50IGxl
biA9IHRleHRMZW5ndGgoKTsKIAotICAgIGlmICghbGVuIHx8IChzdHJpcEZyb250U3BhY2VzICYm
IG1fdGV4dC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSkgeworICAgIGlmICghbGVuIHx8IChz
dHJpcEZyb250U3BhY2VzICYmIHRleHQoKS0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSkgewog
ICAgICAgICBiZWdpbk1pblcgPSAwOwogICAgICAgICBlbmRNaW5XID0gMDsKICAgICAgICAgYmVn
aW5NYXhXID0gMDsKQEAgLTUwNiw3ICs1MDIsOSBAQCB2b2lkIFJlbmRlclRleHQ6OnRyaW1tZWRQ
cmVmV2lkdGhzKGludCBsZWFkV2lkdGgsCiAgICAgaGFzQnJlYWthYmxlQ2hhciA9IG1faGFzQnJl
YWthYmxlQ2hhcjsKICAgICBoYXNCcmVhayA9IG1faGFzQnJlYWs7CiAKLSAgICBpZiAoKCptX3Rl
eHQpWzBdID09ICcgJyB8fCAoKCptX3RleHQpWzBdID09ICdcbicgJiYgIXN0eWxlKCktPnByZXNl
cnZlTmV3bGluZSgpKSB8fCAoKm1fdGV4dClbMF0gPT0gJ1x0JykgeworICAgIEFTU0VSVChtX3Rl
eHQpOworICAgIGNvbnN0IFN0cmluZ0ltcGwmIHRleHQgPSAqbV90ZXh0LmltcGwoKTsKKyAgICBp
ZiAodGV4dFswXSA9PSAnICcgfHwgKHRleHRbMF0gPT0gJ1xuJyAmJiAhc3R5bGUoKS0+cHJlc2Vy
dmVOZXdsaW5lKCkpIHx8IHRleHRbMF0gPT0gJ1x0JykgewogICAgICAgICBjb25zdCBGb250JiBm
ID0gc3R5bGUoKS0+Zm9udCgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUuCiAg
ICAgICAgIGlmIChzdHJpcEZyb250U3BhY2VzKSB7CiAgICAgICAgICAgICBjb25zdCBVQ2hhciBz
cGFjZSA9ICcgJzsKQEAgLTUyOSw3ICs1MjcsNyBAQCB2b2lkIFJlbmRlclRleHQ6OnRyaW1tZWRQ
cmVmV2lkdGhzKGludCBsZWFkV2lkdGgsCiAgICAgICAgIGVuZE1heFcgPSBtYXhXOwogICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICBpbnQgbGluZWxl
biA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAoaSArIGxpbmVsZW4gPCBsZW4gJiYgKCptX3RleHQp
W2kgKyBsaW5lbGVuXSAhPSAnXG4nKQorICAgICAgICAgICAgd2hpbGUgKGkgKyBsaW5lbGVuIDwg
bGVuICYmIHRleHRbaSArIGxpbmVsZW5dICE9ICdcbicpCiAgICAgICAgICAgICAgICAgbGluZWxl
bisrOwogCiAgICAgICAgICAgICBpZiAobGluZWxlbikgewpAQCAtNzc3LDkgKzc3NSwxMSBAQCBi
b29sIFJlbmRlclRleHQ6OmlzQWxsQ29sbGFwc2libGVXaGl0ZXNwYWNlKCkKICAgICAKIGJvb2wg
UmVuZGVyVGV4dDo6Y29udGFpbnNPbmx5V2hpdGVzcGFjZSh1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCBsZW4pIGNvbnN0CiB7CisgICAgQVNTRVJUKG1fdGV4dCk7CisgICAgY29uc3QgU3RyaW5nSW1w
bCYgdGV4dCA9ICptX3RleHQuaW1wbCgpOwogICAgIHVuc2lnbmVkIGN1cnJQb3M7CiAgICAgZm9y
IChjdXJyUG9zID0gZnJvbTsKLSAgICAgICAgIGN1cnJQb3MgPCBmcm9tICsgbGVuICYmICgoKm1f
dGV4dClbY3VyclBvc10gPT0gJ1xuJyB8fCAoKm1fdGV4dClbY3VyclBvc10gPT0gJyAnIHx8ICgq
bV90ZXh0KVtjdXJyUG9zXSA9PSAnXHQnKTsKKyAgICAgICAgIGN1cnJQb3MgPCBmcm9tICsgbGVu
ICYmICh0ZXh0W2N1cnJQb3NdID09ICdcbicgfHwgdGV4dFtjdXJyUG9zXSA9PSAnICcgfHwgdGV4
dFtjdXJyUG9zXSA9PSAnXHQnKTsKICAgICAgICAgIGN1cnJQb3MrKykgeyB9CiAgICAgcmV0dXJu
IGN1cnJQb3MgPj0gKGZyb20gKyBsZW4pOwogfQpAQCAtOTUyLDcgKzk1Miw3IEBAIHZvaWQgUmVu
ZGVyVGV4dDo6c2V0VGV4dEludGVybmFsKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdGV4dCkKICAg
ICAgICAgICAgIC8vIGNoYXJhY3RlcnMgaW50byBzcGFjZSBjaGFyYWN0ZXJzLiBUaGVuLCBpdCB3
aWxsIGRyYXcgYWxsIHNwYWNlIGNoYXJhY3RlcnMsIGluY2x1ZGluZwogICAgICAgICAgICAgLy8g
bGVhZGluZywgdHJhaWxpbmcgYW5kIG11bHRpcGxlIGNvbnRpZ3VvdXMgc3BhY2UgY2hhcmFjdGVy
cy4KIAotICAgICAgICAgICAgbV90ZXh0ID0gbV90ZXh0LT5yZXBsYWNlKCdcbicsICcgJyk7Cisg
ICAgICAgICAgICBtX3RleHQucmVwbGFjZSgnXG4nLCAnICcpOwogCiAgICAgICAgICAgICAvLyBJ
ZiB4bWw6c3BhY2U9InByZXNlcnZlIiBpcyBzZXQsIHdoaXRlLXNwYWNlIGlzIHNldCB0byAicHJl
Iiwgd2hpY2gKICAgICAgICAgICAgIC8vIHByZXNlcnZlcyBsZWFkaW5nLCB0cmFpbGluZyAmIGNv
bnRpZ3VvdXMgc3BhY2UgY2hhcmFjdGVyIGZvciB1cy4KQEAgLTk2MywxMyArOTYzLDEzIEBAIHZv
aWQgUmVuZGVyVGV4dDo6c2V0VGV4dEludGVybmFsKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdGV4
dCkKICAgICAgICAgICAgIC8vIFRoZW4sIGl0IHdpbGwgc3RyaXAgb2ZmIGFsbCBsZWFkaW5nIGFu
ZCB0cmFpbGluZyBzcGFjZSBjaGFyYWN0ZXJzLgogICAgICAgICAgICAgLy8gVGhlbiwgYWxsIGNv
bnRpZ3VvdXMgc3BhY2UgY2hhcmFjdGVycyB3aWxsIGJlIGNvbnNvbGlkYXRlZC4gICAgCiAKLSAg
ICAgICAgICAgbV90ZXh0ID0gbV90ZXh0LT5yZXBsYWNlKCdcbicsIFN0cmluZ0ltcGw6OmVtcHR5
KCkpOworICAgICAgICAgICBtX3RleHQucmVwbGFjZSgnXG4nLCBTdHJpbmdJbXBsOjplbXB0eSgp
KTsKIAogICAgICAgICAgICAvLyBJZiB4bWw6c3BhY2U9ImRlZmF1bHQiIGlzIHNldCwgd2hpdGUt
c3BhY2UgaXMgc2V0IHRvICJub3dyYXAiLCB3aGljaCBoYW5kbGVzCiAgICAgICAgICAgIC8vIGxl
YWRpbmcsIHRyYWlsaW5nICYgY29udGlndW91cyBzcGFjZSBjaGFyYWN0ZXIgcmVtb3ZhbCBmb3Ig
dXMuCiAgICAgICAgIH0KIAotICAgICAgICBtX3RleHQgPSBtX3RleHQtPnJlcGxhY2UoJ1x0Jywg
JyAnKTsKKyAgICAgICAgbV90ZXh0LnJlcGxhY2UoJ1x0JywgJyAnKTsKICAgICB9CiAjZW5kaWYK
IApAQCAtOTc3LDE1ICs5NzcsMTQgQEAgdm9pZCBSZW5kZXJUZXh0OjpzZXRUZXh0SW50ZXJuYWwo
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB0ZXh0KQogICAgICAgICBzd2l0Y2ggKHN0eWxlKCktPnRl
eHRUcmFuc2Zvcm0oKSkgewogICAgICAgICAgICAgY2FzZSBUVE5PTkU6CiAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENBUElUQUxJWkU6IHsKLSAgICAgICAgICAgICAg
ICBtX3RleHQgPSBtX3RleHQtPmNhcGl0YWxpemUocHJldmlvdXNDaGFyYWN0ZXIoKSk7CisgICAg
ICAgICAgICBjYXNlIENBUElUQUxJWkU6CisgICAgICAgICAgICAgICAgbV90ZXh0Lm1ha2VDYXBp
dGFsaXplZChwcmV2aW91c0NoYXJhY3RlcigpKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgVVBQRVJDQVNFOgotICAgICAgICAgICAgICAg
IG1fdGV4dCA9IG1fdGV4dC0+dXBwZXIoKTsKKyAgICAgICAgICAgICAgICBtX3RleHQubWFrZVVw
cGVyKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIExPV0VSQ0FT
RToKLSAgICAgICAgICAgICAgICBtX3RleHQgPSBtX3RleHQtPmxvd2VyKCk7CisgICAgICAgICAg
ICAgICAgbV90ZXh0Lm1ha2VMb3dlcigpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKQEAgLTk5NSwyNyArOTk0LDI3IEBAIHZvaWQgUmVuZGVyVGV4dDo6c2V0VGV4dEludGVy
bmFsKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdGV4dCkKICAgICAgICAgICAgIGNhc2UgVFNOT05F
OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBUU0NJUkNMRToKLSAg
ICAgICAgICAgICAgICBtX3RleHQgPSBtX3RleHQtPnNlY3VyZSh3aGl0ZUJ1bGxldCk7CisgICAg
ICAgICAgICAgICAgbV90ZXh0Lm1ha2VTZWN1cmUod2hpdGVCdWxsZXQpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBUU0RJU0M6Ci0gICAgICAgICAgICAgICAgbV90
ZXh0ID0gbV90ZXh0LT5zZWN1cmUoYnVsbGV0KTsKKyAgICAgICAgICAgICAgICBtX3RleHQubWFr
ZVNlY3VyZShidWxsZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBUU1NRVUFSRToKLSAgICAgICAgICAgICAgICBtX3RleHQgPSBtX3RleHQtPnNlY3VyZShibGFj
a1NxdWFyZSk7CisgICAgICAgICAgICAgICAgbV90ZXh0Lm1ha2VTZWN1cmUoYmxhY2tTcXVhcmUp
OwogICAgICAgICB9CiAgICAgfQogCiAgICAgQVNTRVJUKG1fdGV4dCk7Ci0gICAgQVNTRVJUKCFp
c0JSKCkgfHwgKHRleHRMZW5ndGgoKSA9PSAxICYmICgqbV90ZXh0KVswXSA9PSAnXG4nKSk7Cisg
ICAgQVNTRVJUKCFpc0JSKCkgfHwgKHRleHRMZW5ndGgoKSA9PSAxICYmIG1fdGV4dFswXSA9PSAn
XG4nKSk7CiAKLSAgICBtX2lzQWxsQVNDSUkgPSBjaGFyYWN0ZXJzQXJlQWxsQVNDSUkobV90ZXh0
LmdldCgpKTsKKyAgICBtX2lzQWxsQVNDSUkgPSBtX3RleHQuY2hhcmFjdGVyc0FyZUFsbEFTQ0lJ
KCk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dDo6c2V0VGV4dChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IHRleHQsIGJvb2wgZm9yY2UpCiB7CiAgICAgQVNTRVJUKHRleHQpOwogCi0gICAgaWYgKCFmb3Jj
ZSAmJiBlcXVhbChtX3RleHQuZ2V0KCksIHRleHQuZ2V0KCkpKQorICAgIGlmICghZm9yY2UgJiYg
ZXF1YWwobV90ZXh0LmltcGwoKSwgdGV4dC5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IHNldFRleHRJbnRlcm5hbCh0ZXh0KTsKQEAgLTEyNDUsNyArMTI0NCw3IEBAIHVuc2lnbmVkIFJl
bmRlclRleHQ6OmNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSBjb25zdAogCiBpbnQgUmVuZGVyVGV4
dDo6cHJldmlvdXNPZmZzZXQoaW50IGN1cnJlbnQpIGNvbnN0CiB7Ci0gICAgU3RyaW5nSW1wbCog
c2kgPSBtX3RleHQuZ2V0KCk7CisgICAgU3RyaW5nSW1wbCogc2kgPSBtX3RleHQuaW1wbCgpOwog
ICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IGN1cnNvck1vdmVtZW50SXRlcmF0b3Io
c2ktPmNoYXJhY3RlcnMoKSwgc2ktPmxlbmd0aCgpKTsKICAgICBpZiAoIWl0ZXJhdG9yKQogICAg
ICAgICByZXR1cm4gY3VycmVudCAtIDE7CkBAIC0xMjkzLDE0ICsxMjkyLDE2IEBAIGlubGluZSBi
b29sIGlzSGFuZ3VsTFZUKFVDaGFyMzIgY2hhcmFjdGVyKQogaW50IFJlbmRlclRleHQ6OnByZXZp
b3VzT2Zmc2V0Rm9yQmFja3dhcmREZWxldGlvbihpbnQgY3VycmVudCkgY29uc3QKIHsKICNpZiBQ
TEFURk9STShNQUMpCisgICAgQVNTRVJUKG1fdGV4dCk7CisgICAgY29uc3QgU3RyaW5nSW1wbCYg
dGV4dCA9ICptX3RleHQuaW1wbCgpOwogICAgIFVDaGFyMzIgY2hhcmFjdGVyOwogICAgIHdoaWxl
IChjdXJyZW50ID4gMCkgewotICAgICAgICBpZiAoVTE2X0lTX1RSQUlMKCgqbV90ZXh0KVstLWN1
cnJlbnRdKSkKKyAgICAgICAgaWYgKFUxNl9JU19UUkFJTCh0ZXh0Wy0tY3VycmVudF0pKQogICAg
ICAgICAgICAgLS1jdXJyZW50OwogICAgICAgICBpZiAoY3VycmVudCA8IDApCiAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlciA9IG1fdGV4dC0+Y2hhcmFjdGVy
U3RhcnRpbmdBdChjdXJyZW50KTsKKyAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSB0ZXh0LmNo
YXJhY3RlclN0YXJ0aW5nQXQoY3VycmVudCk7CiAKICAgICAgICAgLy8gV2UgZG9uJ3QgY29tYmlu
ZSBjaGFyYWN0ZXJzIGluIEFybWVuaWFuIC4uLiBMaW1idSByYW5nZSBmb3IgYmFja3dhcmQgZGVs
ZXRpb24uCiAgICAgICAgIGlmICgoY2hhcmFjdGVyID49IDB4MDUzMCkgJiYgKGNoYXJhY3RlciA8
IDB4MTk1MCkpCkBAIC0xMzE0LDcgKzEzMTUsNyBAQCBpbnQgUmVuZGVyVGV4dDo6cHJldmlvdXNP
ZmZzZXRGb3JCYWNrd2FyZERlbGV0aW9uKGludCBjdXJyZW50KSBjb25zdAogICAgICAgICByZXR1
cm4gY3VycmVudDsKIAogICAgIC8vIEhhbmd1bAotICAgIGNoYXJhY3RlciA9IG1fdGV4dC0+Y2hh
cmFjdGVyU3RhcnRpbmdBdChjdXJyZW50KTsKKyAgICBjaGFyYWN0ZXIgPSB0ZXh0LmNoYXJhY3Rl
clN0YXJ0aW5nQXQoY3VycmVudCk7CiAgICAgaWYgKCgoY2hhcmFjdGVyID49IEhBTkdVTF9DSE9T
RU9OR19TVEFSVCkgJiYgKGNoYXJhY3RlciA8PSBIQU5HVUxfSk9OR1NFT05HX0VORCkpIHx8ICgo
Y2hhcmFjdGVyID49IEhBTkdVTF9TWUxMQUJMRV9TVEFSVCkgJiYgKGNoYXJhY3RlciA8PSBIQU5H
VUxfU1lMTEFCTEVfRU5EKSkpIHsKICAgICAgICAgSGFuZ3VsU3RhdGUgc3RhdGU7CiAgICAgICAg
IEhhbmd1bFN0YXRlIGluaXRpYWxTdGF0ZTsKQEAgLTEzMzAsNyArMTMzMSw3IEBAIGludCBSZW5k
ZXJUZXh0OjpwcmV2aW91c09mZnNldEZvckJhY2t3YXJkRGVsZXRpb24oaW50IGN1cnJlbnQpIGNv
bnN0CiAKICAgICAgICAgaW5pdGlhbFN0YXRlID0gc3RhdGU7CiAKLSAgICAgICAgd2hpbGUgKGN1
cnJlbnQgPiAwICYmICgoY2hhcmFjdGVyID0gbV90ZXh0LT5jaGFyYWN0ZXJTdGFydGluZ0F0KGN1
cnJlbnQgLSAxKSkgPj0gSEFOR1VMX0NIT1NFT05HX1NUQVJUKSAmJiAoY2hhcmFjdGVyIDw9IEhB
TkdVTF9TWUxMQUJMRV9FTkQpICYmICgoY2hhcmFjdGVyIDw9IEhBTkdVTF9KT05HU0VPTkdfRU5E
KSB8fCAoY2hhcmFjdGVyID49IEhBTkdVTF9TWUxMQUJMRV9TVEFSVCkpKSB7CisgICAgICAgIHdo
aWxlIChjdXJyZW50ID4gMCAmJiAoKGNoYXJhY3RlciA9IHRleHQuY2hhcmFjdGVyU3RhcnRpbmdB
dChjdXJyZW50IC0gMSkpID49IEhBTkdVTF9DSE9TRU9OR19TVEFSVCkgJiYgKGNoYXJhY3RlciA8
PSBIQU5HVUxfU1lMTEFCTEVfRU5EKSAmJiAoKGNoYXJhY3RlciA8PSBIQU5HVUxfSk9OR1NFT05H
X0VORCkgfHwgKGNoYXJhY3RlciA+PSBIQU5HVUxfU1lMTEFCTEVfU1RBUlQpKSkgewogICAgICAg
ICAgICAgc3dpdGNoIChzdGF0ZSkgewogICAgICAgICAgICAgY2FzZSBIYW5ndWxTdGF0ZVY6CiAg
ICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA8PSBIQU5HVUxfQ0hPU0VPTkdfRU5EKQpAQCAt
MTM2OCw3ICsxMzY5LDcgQEAgaW50IFJlbmRlclRleHQ6OnByZXZpb3VzT2Zmc2V0Rm9yQmFja3dh
cmREZWxldGlvbihpbnQgY3VycmVudCkgY29uc3QKIAogaW50IFJlbmRlclRleHQ6Om5leHRPZmZz
ZXQoaW50IGN1cnJlbnQpIGNvbnN0CiB7Ci0gICAgU3RyaW5nSW1wbCogc2kgPSBtX3RleHQuZ2V0
KCk7CisgICAgU3RyaW5nSW1wbCogc2kgPSBtX3RleHQuaW1wbCgpOwogICAgIFRleHRCcmVha0l0
ZXJhdG9yKiBpdGVyYXRvciA9IGN1cnNvck1vdmVtZW50SXRlcmF0b3Ioc2ktPmNoYXJhY3RlcnMo
KSwgc2ktPmxlbmd0aCgpKTsKICAgICBpZiAoIWl0ZXJhdG9yKQogICAgICAgICByZXR1cm4gY3Vy
cmVudCArIDE7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmggYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKaW5kZXggZDQ2YmNlOS4uZTllZDE0NyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHQuaApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgZGVzdHJveSgpOwogCi0gICAgU3RyaW5nSW1wbCogdGV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGV4dC5nZXQoKTsgfQorICAgIFN0cmluZ0ltcGwqIHRleHQoKSBjb25zdCB7IHJldHVy
biBtX3RleHQuaW1wbCgpOyB9CiAKICAgICBJbmxpbmVUZXh0Qm94KiBjcmVhdGVJbmxpbmVUZXh0
Qm94KCk7CiAgICAgdm9pZCBkaXJ0eUxpbmVCb3hlcyhib29sIGZ1bGxMYXlvdXQpOwpAQCAtNjMs
OCArNjMsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlv
bkZvclBvaW50KGNvbnN0IEludFBvaW50Jik7CiAKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cygpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dC0+Y2hhcmFjdGVycygpOyB9Ci0gICAgdW5zaWduZWQg
dGV4dExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dC0+bGVuZ3RoKCk7IH0gLy8gbm9uIHZp
cnR1YWwgaW1wbGVtZW50YXRpb24gb2YgbGVuZ3RoKCkKKyAgICBjb25zdCBVQ2hhciogY2hhcmFj
dGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dC5jaGFyYWN0ZXJzKCk7IH0KKyAgICB1bnNpZ25l
ZCB0ZXh0TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Lmxlbmd0aCgpOyB9IC8vIG5vbiB2
aXJ0dWFsIGltcGxlbWVudGF0aW9uIG9mIGxlbmd0aCgpCiAgICAgdm9pZCBwb3NpdGlvbkxpbmVC
b3goSW5saW5lQm94Kik7CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHdpZHRoKHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udCYsIGludCB4UG9zLCBIYXNoU2V0PGNvbnN0IFNp
bXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKSBjb25zdDsKQEAgLTE1MSw3ICsxNTEs
NyBAQCBwcml2YXRlOgogCiAgICAgaW50IG1fbWluV2lkdGg7IC8vIGhlcmUgdG8gbWluaW1pemUg
cGFkZGluZyBpbiA2NC1iaXQuCiAKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV90ZXh0OworICAg
IFN0cmluZyBtX3RleHQ7CiAKICAgICBJbmxpbmVUZXh0Qm94KiBtX2ZpcnN0VGV4dEJveDsKICAg
ICBJbmxpbmVUZXh0Qm94KiBtX2xhc3RUZXh0Qm94Owo=
</data>
<flag name="review"
          id="33861"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>