<?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>54799</bug_id>
          
          <creation_ts>2011-02-19 00:06:59 -0800</creation_ts>
          <short_desc>Teach Content Security Policy how to parse source-list</short_desc>
          <delta_ts>2011-03-26 05:00:00 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>53572</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>jochen</cc>
    
    <cc>webkit-ews</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>354087</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-19 00:06:59 -0800</bug_when>
    <thetext>Teach Content Security Policy how to parse origin-patterns</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354095</commentid>
    <comment_count>1</comment_count>
      <attachid>83064</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-19 00:13:56 -0800</bug_when>
    <thetext>Created attachment 83064
Needs tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354096</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-19 00:19:54 -0800</bug_when>
    <thetext>Spec (although I haven&apos;t filled in all the details yet):
http://www.w3.org/Security/wiki/Content_Security_Policies</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354115</commentid>
    <comment_count>3</comment_count>
      <attachid>83066</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-19 02:05:38 -0800</bug_when>
    <thetext>Created attachment 83066
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369196</commentid>
    <comment_count>4</comment_count>
      <attachid>83066</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-17 12:01:38 -0700</bug_when>
    <thetext>Comment on attachment 83066
Patch

The grammar in the spec has been updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370292</commentid>
    <comment_count>5</comment_count>
      <attachid>86298</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-20 23:44:30 -0700</bug_when>
    <thetext>Created attachment 86298
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370359</commentid>
    <comment_count>6</comment_count>
      <attachid>83066</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-21 07:04:33 -0700</bug_when>
    <thetext>Comment on attachment 83066
Patch

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

Not sure the status of this patch since the review flag is gone from it. I read some of it and have a few comments.

&gt; Source/WebCore/page/ContentSecurityPolicy.cpp:32
&gt; +namespace {

In this project we have been using static to give functions internal linkage instead of using anonymous namespaces. You’ve mentioned a couple time that you can’t remember that. Is that really the issue or do you prefer doing it this way.

&gt; Source/WebCore/page/ContentSecurityPolicy.cpp:36
&gt; +    return isASCIIAlpha(c) || isASCIIDigit(c) || c == &apos;+&apos; || c == &apos;-&apos; || c == &apos;.&apos;;

You can use isASCIIAlphanumeric here instead of isASCIIAlpha || isASCIIDigit.

&gt; Source/WebCore/page/ContentSecurityPolicy.cpp:39
&gt; +bool extractScheme(const UChar*&amp; pos, const UChar* end, String&amp; result)

I prefer words like &quot;position&quot; to abbreviations like &quot;pos&quot;.

&gt; Source/WebCore/page/ContentSecurityPolicy.cpp:55
&gt; +    UChar currentCharater = *pos;
&gt; +    while (isSchemeCharacter(currentCharater)) {
&gt; +        scheme.append(toASCIILower(currentCharater));
&gt; +        ++pos;
&gt; +        if (pos == end)
&gt; +            break;
&gt; +        currentCharater = *pos;
&gt; +    }

Typo here, current “charater”. The compiler will eliminate common subexpressions; I think you can write this in a way that reads better without the local variable:

    while (pos &lt; end &amp;&amp; isSchemeCharacter(*pos))
        scheme.append(toASCIILower(*pos++)

&gt; Source/WebCore/page/ContentSecurityPolicy.cpp:112
&gt; +        port *= 10;
&gt; +        port += currentCharacter - &apos;0&apos;;

What about overflow?

&gt; Source/WebCore/page/ContentSecurityPolicy.cpp:156
&gt; +            if (end - pos &lt; 3
&gt; +                || *pos++ != &apos;:&apos;
&gt; +                || *pos++ != &apos;/&apos;
&gt; +                || *pos++ != &apos;/&apos;) {

I think this predicate would read better on a single line or with a helper function.

This will do the wrong thing if some characters match and others don&apos;t, advancing past some characters even if the string doesn’t match.

&gt; Source/WebCore/page/ContentSecurityPolicy.cpp:170
&gt; +            if (pos == end
&gt; +                || *pos++ != &apos;.&apos;
&gt; +                || pos == end)

I think this predicate would read better on a single line or with a helper function. It advances pos even if it does not match the &apos;.&apos;, which I think is a bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370462</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-21 10:47:51 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 83066 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=83066&amp;action=review
&gt; 
&gt; Not sure the status of this patch since the review flag is gone from it. I read some of it and have a few comments.

Thanks for the comments.  The Mozilla folks have posted a new version of the spec that specifies the parsing rules more clearly, so I&apos;ve scrapped this version of the patch and started on a new one (called work-in-progress above).

Many of your comments apply to the new patch as well, so they&apos;re useful and I&apos;ll apply them there.

&gt; &gt; Source/WebCore/page/ContentSecurityPolicy.cpp:32
&gt; &gt; +namespace {
&gt; 
&gt; In this project we have been using static to give functions internal linkage instead of using anonymous namespaces. You’ve mentioned a couple time that you can’t remember that. Is that really the issue or do you prefer doing it this way.

The problem is that different projects I contribute to have different opinions on this topic.  It doesn&apos;t come up that often, so I sometimes forget which is which.  In any case, the new version of the patch correctly uses static.

&gt; &gt; Source/WebCore/page/ContentSecurityPolicy.cpp:112
&gt; &gt; +        port *= 10;
&gt; &gt; +        port += currentCharacter - &apos;0&apos;;
&gt; 
&gt; What about overflow?

I believe the correct thing to do here is to call String::toIntStrict, but I&apos;ll look into how that handles overflow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370467</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-03-21 10:53:20 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; &gt; Source/WebCore/page/ContentSecurityPolicy.cpp:32
&gt; &gt; &gt; +namespace {
&gt; &gt; 
&gt; &gt; In this project we have been using static to give functions internal linkage instead of using anonymous namespaces. You’ve mentioned a couple time that you can’t remember that. Is that really the issue or do you prefer doing it this way.
&gt; 
&gt; The problem is that different projects I contribute to have different opinions on this topic.  It doesn&apos;t come up that often, so I sometimes forget which is which.  In any case, the new version of the patch correctly uses static.

Would someone please update the style guide and check-webkit-style if we have consensus here?
http://www.webkit.org/coding/coding-style.html
It says nothing about anonymous namespaces as far as I can tell.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370470</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-21 10:56:08 -0700</bug_when>
    <thetext>&gt; Would someone please update the style guide and check-webkit-style if we have consensus here?
&gt; http://www.webkit.org/coding/coding-style.html
&gt; It says nothing about anonymous namespaces as far as I can tell.

Sure.  I&apos;ll write up a patch for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370847</commentid>
    <comment_count>10</comment_count>
      <attachid>86356</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-21 12:59:39 -0700</bug_when>
    <thetext>Created attachment 86356
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373325</commentid>
    <comment_count>11</comment_count>
      <attachid>86886</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-24 22:48:12 -0700</bug_when>
    <thetext>Created attachment 86886
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373774</commentid>
    <comment_count>12</comment_count>
      <attachid>86886</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-03-25 16:16:56 -0700</bug_when>
    <thetext>Comment on attachment 86886
Patch

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

Seems there is a lot of code and not very much testing of said code.  I think we need more than 10 tests for this new parser.

&gt; Source/WebCore/page/ContentSecurityPolicy.cpp:37
&gt; +// templete parameters.

templete :)

&gt; Source/WebCore/page/ContentSecurityPolicy.cpp:45
&gt; -static bool isDirectiveValueCharacter(UChar c)
&gt; +bool isDirectiveValueCharacter(UChar c)

I doubt darin will like the removal of static, but i&apos;m not sure.  Again, I don&apos;t really undertand the rule or style, etc.

&gt; Source/WebCore/page/ContentSecurityPolicy.cpp:154
&gt; +    explicit CSPSourceList(SecurityOrigin* self);

self?  Should just be removed.

&gt; Source/WebCore/page/ContentSecurityPolicy.cpp:169
&gt; +    SecurityOrigin* m_self;

I&apos;m confused what &quot;self&quot; means here.

&gt; Source/WebCore/page/ContentSecurityPolicy.cpp:226
&gt; +//                   / &quot;&apos;self&apos;&quot;

I see, it&apos;s a spec term?

&gt; Source/WebCore/page/ContentSecurityPolicy.cpp:283
&gt; +        ASSERT_NOT_REACHED();

I take it we should never get here because we&apos;ll fall out somewhere earlier?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373777</commentid>
    <comment_count>13</comment_count>
      <attachid>86886</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-25 16:22:16 -0700</bug_when>
    <thetext>Comment on attachment 86886
Patch

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

&gt;&gt; Source/WebCore/page/ContentSecurityPolicy.cpp:45
&gt;&gt; -static bool isDirectiveValueCharacter(UChar c)
&gt;&gt; +bool isDirectiveValueCharacter(UChar c)
&gt; 
&gt; I doubt darin will like the removal of static, but i&apos;m not sure.  Again, I don&apos;t really undertand the rule or style, etc.

Right, that&apos;s why I wrote a big comment explaining why.  The compiler doesn&apos;t allow static functions as template parameters but functions in an anonymous namespace are ok.

&gt;&gt; Source/WebCore/page/ContentSecurityPolicy.cpp:154
&gt;&gt; +    explicit CSPSourceList(SecurityOrigin* self);
&gt; 
&gt; self?  Should just be removed.

yep

&gt;&gt; Source/WebCore/page/ContentSecurityPolicy.cpp:169
&gt;&gt; +    SecurityOrigin* m_self;
&gt; 
&gt; I&apos;m confused what &quot;self&quot; means here.

I can just rename it to m_securityOrigin.

&gt;&gt; Source/WebCore/page/ContentSecurityPolicy.cpp:226
&gt;&gt; +//                   / &quot;&apos;self&apos;&quot;
&gt; 
&gt; I see, it&apos;s a spec term?

Yes.  I agree that it&apos;s confusing to use that name for the variable names though.

&gt;&gt; Source/WebCore/page/ContentSecurityPolicy.cpp:283
&gt;&gt; +        ASSERT_NOT_REACHED();
&gt; 
&gt; I take it we should never get here because we&apos;ll fall out somewhere earlier?

Yes, we&apos;ve already verified that we&apos;re not at the end and that *position is &apos;:&apos;.  The ASSERT is just to catch future bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373848</commentid>
    <comment_count>14</comment_count>
      <attachid>87007</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-25 21:53:32 -0700</bug_when>
    <thetext>Created attachment 87007
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373851</commentid>
    <comment_count>15</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-03-25 22:09:28 -0700</bug_when>
    <thetext>Attachment 87007 did not build on qt:
Build output: http://queues.webkit.org/results/8252404</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373852</commentid>
    <comment_count>16</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-25 22:23:09 -0700</bug_when>
    <thetext>Attachment 87007 did not build on win:
Build output: http://queues.webkit.org/results/8252410</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373855</commentid>
    <comment_count>17</comment_count>
      <attachid>87010</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-25 22:33:00 -0700</bug_when>
    <thetext>Created attachment 87010
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373856</commentid>
    <comment_count>18</comment_count>
      <attachid>87010</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-03-25 22:36:16 -0700</bug_when>
    <thetext>Comment on attachment 87010
Patch

This looks reasonable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373858</commentid>
    <comment_count>19</comment_count>
      <attachid>87010</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-25 22:54:36 -0700</bug_when>
    <thetext>Comment on attachment 87010
Patch

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373889</commentid>
    <comment_count>20</comment_count>
      <attachid>87010</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-26 04:59:55 -0700</bug_when>
    <thetext>Comment on attachment 87010
Patch

Clearing flags on attachment: 87010

Committed r82028: &lt;http://trac.webkit.org/changeset/82028&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373890</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-26 05:00:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83064</attachid>
            <date>2011-02-19 00:13:56 -0800</date>
            <delta_ts>2011-02-19 02:05:36 -0800</delta_ts>
            <desc>Needs tests</desc>
            <filename>bug-54799-20110219001355.patch</filename>
            <type>text/plain</type>
            <size>6837</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzkwNDUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1YzYzYWNhZWFkZjgzNmQx
NmIwMGI5MmZhY2VhMmMxZWI5YWY0MWIzLi41NTA2ZDA3ZjM1OTRiODZlOTQ2MDRlMTcxYTQ4Y2Fi
MDllY2UyYzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDItMTkgIEFkYW0g
QmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUZWFjaCBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBob3cgdG8g
cGFyc2Ugb3JpZ2luLXBhdHRlcm5zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01NDc5OQorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisg
ICAgICAgICogcGFnZS9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6T3JpZ2luUGF0dGVybjo6T3JpZ2luUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpPcmln
aW5QYXR0ZXJuOjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpPcmlnaW5QYXR0ZXJuOjptYXRj
aGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZTo6Q1NQRGlyZWN0aXZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZTo6YWxsb3dzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTUERpcmVjdGl2ZTo6cGFyc2UpOgorCiAyMDExLTAyLTE4ICBBZGFtIEJhcnRoICA8YWJhcnRo
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKaW5kZXggOTdjZDQ0
NzBlY2I5NjEyMDA3NzFjOGU2ZThiNGE2NTNkZDk1ZjliNy4uZTQyYWM3NzBhZjQ4ODkyNWU2MDI5
OTY0YWI2MzIxZThhYzI0NDRmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250
ZW50U2VjdXJpdHlQb2xpY3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGVudFNl
Y3VyaXR5UG9saWN5LmNwcApAQCAtMjksMjAgKzI5LDIzNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK25hbWVzcGFjZSB7CisKK2lubGluZSBib29sIGlzU2NoZW1lQ2hhcmFjdGVyKFVDaGFy
IGMpCit7CisgICAgcmV0dXJuIGlzQVNDSUlBbHBoYShjKSB8fCBpc0FTQ0lJRGlnaXQoYykgfHwg
YyA9PSAnKycgfHwgYyA9PSAnLScgfHwgYyA9PSAnLic7Cit9CisKK2Jvb2wgZXh0cmFjdFNjaGVt
ZShjb25zdCBVQ2hhciomIHBvcywgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiByZXN1bHQpCit7
CisgICAgQVNTRVJUKHBvcyA8IGVuZCk7CisKKyAgICBpZiAoIWlzQVNDSUlBbHBoYSgqcG9zKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmVjdG9yPFVDaGFyLCAzMj4gc2NoZW1lOwor
CisgICAgVUNoYXIgY3VycmVudENoYXJhdGVyID0gKnBvczsKKyAgICB3aGlsZSAoaXNTY2hlbWVD
aGFyYWN0ZXIoY3VycmVudENoYXJhdGVyKSkgeworICAgICAgICBzY2hlbWUuYXBwZW5kKHRvQVND
SUlMb3dlcihjdXJyZW50Q2hhcmF0ZXIpKTsKKyAgICAgICAgKytwb3M7CisgICAgICAgIGlmIChw
b3MgPT0gZW5kKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGN1cnJlbnRDaGFyYXRlciA9
ICpwb3M7CisgICAgfQorCisgICAgcmVzdWx0ID0gU3RyaW5nKHNjaGVtZSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2lubGluZSBib29sIGlzSG9zdENvbnRpbnVlQ2hhcmFjdGVyKFVDaGFyIGMp
Cit7CisgICAgcmV0dXJuICFpc0FTQ0lJU3BhY2UoYykgJiYgYyAhPSAnOicgJiYgYyAhPSAnLyc7
Cit9CisKK2lubGluZSBib29sIGlzSG9zdFN0YXJ0Q2hhcmFjdGVyKFVDaGFyIGMpCit7CisgICAg
cmV0dXJuIGlzSG9zdENvbnRpbnVlQ2hhcmFjdGVyKGMpICYmIGMgIT0gJyonOworfQorCitib29s
IGV4dHJhY3RIb3N0KGNvbnN0IFVDaGFyKiYgcG9zLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcm
IHJlc3VsdCkKK3sKKyAgICBBU1NFUlQocG9zIDwgZW5kKTsKKworICAgIGlmICghaXNIb3N0U3Rh
cnRDaGFyYWN0ZXIoKnBvcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZlY3RvcjxV
Q2hhciwgMzI+IGhvc3Q7CisKKyAgICBVQ2hhciBjdXJyZW50Q2hhcmFjdGVyID0gKnBvczsKKyAg
ICB3aGlsZSAoaXNIb3N0Q29udGludWVDaGFyYWN0ZXIoY3VycmVudENoYXJhY3RlcikpIHsKKyAg
ICAgICAgaG9zdC5hcHBlbmQodG9BU0NJSUxvd2VyKGN1cnJlbnRDaGFyYWN0ZXIpKTsKKyAgICAg
ICAgKytwb3M7CisgICAgICAgIGlmIChwb3MgPT0gZW5kKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGN1cnJlbnRDaGFyYWN0ZXIgPSAqcG9zOworICAgIH0KKworICAgIHJlc3VsdCA9IFN0
cmluZyhob3N0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBleHRyYWN0UG9ydChjb25z
dCBVQ2hhciomIHBvcywgY29uc3QgVUNoYXIqIGVuZCwgdW5zaWduZWQmIHJlc3VsdCkKK3sKKyAg
ICBBU1NFUlQocG9zIDwgZW5kKTsKKworICAgIGlmICgqcG9zICE9ICc6JykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisKKyAgICArK3BvczsKKworICAgIHVuc2lnbmVkIHBvcnQgPSAwOworCisg
ICAgaWYgKHBvcyA9PSBlbmQpIHsKKyAgICAgICAgcmVzdWx0ID0gcG9ydDsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgVUNoYXIgY3VycmVudENoYXJhY3RlciA9ICpwb3M7Cisg
ICAgd2hpbGUgKGlzQVNDSUlEaWdpdChjdXJyZW50Q2hhcmFjdGVyKSkKKyAgICAgICAgcG9ydCAq
PSAxMDsKKyAgICAgICAgcG9ydCArPSBjdXJyZW50Q2hhcmFjdGVyIC0gJzAnOworICAgICAgICAr
K3BvczsKKyAgICAgICAgaWYgKHBvcyA9PSBlbmQpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY3VycmVudENoYXJhY3RlciA9ICpwb3M7CisgICAgfQorCisgICAgcmVzdWx0ID0gcG9ydDsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQorCitjbGFzcyBPcmlnaW5QYXR0ZXJuIHsKK3B1Ymxp
YzoKKyAgICBPcmlnaW5QYXR0ZXJuKCkKKyAgICAgICAgOiBtX3BvcnQoMCkKKyAgICAgICAgLCBt
X2hhc1dpbGRjYXJkKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBPcmlnaW5QYXR0ZXJuKGNv
bnN0IFN0cmluZyYgc2NoZW1lLCBjb25zdCBTdHJpbmcmIGhvc3QsIHVuc2lnbmVkIHBvcnQsIGJv
b2wgaGFzV2lsZGNhcmQpCisgICAgICAgIDogbV9zY2hlbWUoc2NoZW1lKQorICAgICAgICAsIG1f
aG9zdChob3N0KQorICAgICAgICAsIG1fcG9ydChwb3J0KQorICAgICAgICAsIG1faGFzV2lsZGNh
cmQoaGFzV2lsZGNhcmQpCisgICAgeworICAgICAgICBBU1NFUlQobV9zY2hlbWUubG93ZXIoKSA9
PSBtX3NjaGVtZSk7CisgICAgICAgIEFTU0VSVChtX2hvc3QubG93ZXIoKSA9PSBtX2hvc3QpOwor
ICAgIH0KKworICAgIHN0YXRpYyBib29sIHBhcnNlKGNvbnN0IFVDaGFyKiYgcG9zLCBjb25zdCBV
Q2hhciogZW5kLCBPcmlnaW5QYXR0ZXJuJiByZXN1bHQpCisgICAgeworICAgICAgICBjb25zdCBV
Q2hhciogc3RhcnQgPSBwb3M7CisKKyAgICAgICAgU3RyaW5nIHNjaGVtZTsKKyAgICAgICAgU3Ry
aW5nIGhvc3Q7CisgICAgICAgIHVuc2lnbmVkIHBvcnQgPSAwOworICAgICAgICBib29sIGhhc1dp
bGRjYXJkID0gZmFsc2U7CisKKyAgICAgICAgaWYgKGV4dHJhY3RTY2hlbWUocG9zLCBlbmQsIHNj
aGVtZSkpIHsKKyAgICAgICAgICAgIGlmIChlbmQgLSBwb3MgPCAzCisgICAgICAgICAgICAgICAg
fHwgKnBvcysrICE9ICc6JworICAgICAgICAgICAgICAgIHx8ICpwb3MrKyAhPSAnLycKKyAgICAg
ICAgICAgICAgICB8fCAqcG9zKysgIT0gJy8nKSB7CisgICAgICAgICAgICAgICAgcG9zID0gc3Rh
cnQ7CisgICAgICAgICAgICAgICAgc2NoZW1lID0gU3RyaW5nKCk7CisgICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHBvcyA9PSBlbmQpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgaWYgKCpwb3MgPT0gJyonKSB7CisgICAgICAgICAgICBoYXNXaWxk
Y2FyZCA9IHRydWU7CisgICAgICAgICAgICArK3BvczsKKyAgICAgICAgICAgIGlmIChwb3MgPT0g
ZW5kCisgICAgICAgICAgICAgICAgfHwgKnBvcysrICE9ICcuJworICAgICAgICAgICAgICAgIHx8
IHBvcyA9PSBlbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCFleHRyYWN0SG9zdChwb3MsIGVuZCwgaG9zdCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKHBvcyAhPSBlbmQgJiYgIWV4dHJhY3RQb3J0KHBv
cywgZW5kLCBwb3J0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAo
cG9zICE9IGVuZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXN1bHQg
PSBPcmlnaW5QYXR0ZXJuKHNjaGVtZSwgaG9zdCwgcG9ydCwgaGFzV2lsZGNhcmQpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIG1hdGNoZXMoY29uc3QgS1VSTCYgdXJs
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX3NjaGVtZS5pc0VtcHR5KCkgJiYgdXJsLnByb3RvY29s
KCkubG93ZXIoKSAhPSBtX3NjaGVtZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIGlmICghbV9oYXNXaWxkY2FyZCAmJiAhZXF1YWxJZ25vcmluZ0Nhc2UobV9o
b3N0LCB1cmwuaG9zdCgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChtX2hhc1dpbGRjYXJkKSB7CisgICAgICAgICAgICBTdHJpbmcgbG93ZXJjYXNl
SG9zdCA9IHVybC5ob3N0KCkubG93ZXIoKTsKKyAgICAgICAgICAgIGlmICghbG93ZXJjYXNlSG9z
dC5lbmRzV2l0aChtX2hvc3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKG1faG9zdC5sZW5ndGgoKSA8IGxvd2VyY2FzZUhvc3Qu
bGVuZ3RoKCkKKyAgICAgICAgICAgICAgICAmJiBsb3dlcmNhc2VIb3N0W2xvd2VyY2FzZUhvc3Qu
bGVuZ3RoKCkgLSBtX2hvc3QubGVuZ3RoKCkgLSAxXSAhPSAnLicpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9wb3J0ICYm
IHVybC5wb3J0KCkgIT0gbV9wb3J0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAKKyAgICAgICAgaWYgKCFtX3BvcnQgJiYgIWlzRGVmYXVsdFBvcnRGb3JQcm90b2NvbCh1cmwu
cG9ydCgpLCB1cmwucHJvdG9jb2woKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5n
IG1fc2NoZW1lOworICAgIFN0cmluZyBtX2hvc3Q7CisgICAgdW5zaWduZWQgbV9wb3J0OworICAg
IGJvb2wgbV9oYXNXaWxkY2FyZDsKK307CisKIGNsYXNzIENTUERpcmVjdGl2ZSB7CiBwdWJsaWM6
CiAgICAgZXhwbGljaXQgQ1NQRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAg
IDogbV92YWx1ZSh2YWx1ZSkKICAgICB7CisgICAgICAgIHBhcnNlKHZhbHVlKTsKICAgICB9CiAK
LSAgICBib29sIGFsbG93cyhjb25zdCBLVVJMJikKKyAgICBib29sIGFsbG93cyhjb25zdCBLVVJM
JiB1cmwpCiAgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGF0dGVybnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX3BhdHRlcm5zW2ldLm1hdGNoZXModXJs
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCiBwcml2YXRlOgotICAgIFN0cmluZyBtX3ZhbHVlOworICAgIHZv
aWQgcGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGNvbnN0IFVDaGFy
KiBwb3MgPSB2YWx1ZS5jaGFyYWN0ZXJzKCk7CisgICAgICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBw
b3MgKyB2YWx1ZS5sZW5ndGgoKTsKKworICAgICAgICB3aGlsZSAocG9zIDwgZW5kKSB7CisgICAg
ICAgICAgICB3aGlsZSAocG9zIDwgZW5kICYmIGlzQVNDSUlTcGFjZSgqcG9zKSkKKyAgICAgICAg
ICAgICAgICArK3BvczsKKworICAgICAgICAgICAgaWYgKHBvcyA9PSBlbmQpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBwYXR0ZXJuU3RhcnQgPSBw
b3M7CisgICAgICAgICAgICB3aGlsZSAocG9zIDwgZW5kICYmICFpc0FTQ0lJU3BhY2UoKnBvcykp
CisgICAgICAgICAgICAgICAgKytwb3M7CisgICAgICAgICAgICBjb25zdCBVQ2hhciogcGF0dGVy
bkVuZCA9IHBvczsKKworICAgICAgICAgICAgT3JpZ2luUGF0dGVybiBwYXR0ZXJuOworICAgICAg
ICAgICAgaWYgKE9yaWdpblBhdHRlcm46OnBhcnNlKHBhdHRlcm5TdGFydCwgcGF0dGVybkVuZCwg
cGF0dGVybikpCisgICAgICAgICAgICAgICAgbV9wYXR0ZXJucy5hcHBlbmQocGF0dGVybik7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBWZWN0b3I8T3JpZ2luUGF0dGVybj4gbV9wYXR0ZXJuczsK
IH07CiAKIENvbnRlbnRTZWN1cml0eVBvbGljeTo6Q29udGVudFNlY3VyaXR5UG9saWN5KCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83066</attachid>
            <date>2011-02-19 02:05:38 -0800</date>
            <delta_ts>2011-03-21 07:04:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54799-20110219020537.patch</filename>
            <type>text/plain</type>
            <size>11975</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzkwNDUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA5N2E3YWQzYTI0ZTA2YzI4NmNlMTA4
OTNlMzQ4ZmZlOGUwMDFkYjM4Li4yNDk1MzJlMjFkZDVhOGQyMWU1ZWM5YjRkMGU3ODlmYzQ2ODc3
MDc3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDItMTkgIEFkYW0gQmFydGggIDxhYmFy
dGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUZWFjaCBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBob3cgdG8gcGFyc2Ugb3JpZ2lu
LXBhdHRlcm5zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01NDc5OQorCisgICAgICAgIFRlc3QgYSB2YXJpZXR5IG9mIHNjcmlwdC1zcmMgY2FzZXMuICBU
aGVyZSdzIGEgbG90IG1vcmUgd2UgY2FuIHRlc3QKKyAgICAgICAgdy5yLnQuIHNjcmlwdC1zcmMs
IGJ1dCB0aGlzIGlzIGEgc3RhcnQuICBJdCdzIHBhdGNoZXMgbGlrZSB0aGVzZSB0aGF0CisgICAg
ICAgIG1ha2UgbWUgd2lzaCBmb3IgYSB1bml0IHRlc3RpbmcgZnJhbWV3b3JrLgorCisgICAgICAg
ICogaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvc2NyaXB0LXNyYy1v
cmlnaW4tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5
L2NvbnRlbnRTZWN1cml0eVBvbGljeS9zY3JpcHQtc3JjLW9yaWdpbi5odG1sOiBBZGRlZC4KKwog
MjAxMS0wMi0xOCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvc2NyaXB0LXNyYy1vcmlnaW4tZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJp
dHlQb2xpY3kvc2NyaXB0LXNyYy1vcmlnaW4tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhN2Ex
OTg3YTNjNjNlOTMxZGY2MDcyZmEyMjQ1MzU5NTUwNTNkZWMKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9zY3Jp
cHQtc3JjLW9yaWdpbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0MyBAQAorTG9hZHMgYW4gaWZy
YW1lIHdoaWNoIGluIHR1cm5zIHRyaWVzIHRvIGxvYWQgYW4gZXh0ZXJuYWwgc2NyaXB0LiBUaGUg
aWZyYW1lIGhhcyBhIGNvbnRlbnQgc2VjdXJpdHkgcG9saWN5IGRpc2FibGluZyBleHRlcm5hbCBz
Y3JpcHRzLiBTbyB0aGUgc2NyaXB0IHNob3VsZCBub3QgZ2V0IGV4ZWN1dGVkLgorCisgICAgICAg
ICAgIAorCistLS0tLS0tLQorRnJhbWU6ICc8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMC0tPi0t
PicKKy0tLS0tLS0tCitQQVNTCisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88
IS0tZnJhbWUxLS0+LS0+JworLS0tLS0tLS0KK1BBU1MKKworLS0tLS0tLS0KK0ZyYW1lOiAnPCEt
LWZyYW1lUGF0aCAvLzwhLS1mcmFtZTItLT4tLT4nCistLS0tLS0tLQorUEFTUworCistLS0tLS0t
LQorRnJhbWU6ICc8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMy0tPi0tPicKKy0tLS0tLS0tCitQ
QVNTCisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWU0LS0+LS0+
JworLS0tLS0tLS0KK1BBU1MKKworLS0tLS0tLS0KK0ZyYW1lOiAnPCEtLWZyYW1lUGF0aCAvLzwh
LS1mcmFtZTUtLT4tLT4nCistLS0tLS0tLQorUEFTUworCistLS0tLS0tLQorRnJhbWU6ICc8IS0t
ZnJhbWVQYXRoIC8vPCEtLWZyYW1lNi0tPi0tPicKKy0tLS0tLS0tCitQQVNTCisKKy0tLS0tLS0t
CitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWU3LS0+LS0+JworLS0tLS0tLS0KK1BB
U1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNl
Y3VyaXR5UG9saWN5L3NjcmlwdC1zcmMtb3JpZ2luLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9zY3JpcHQtc3JjLW9yaWdpbi5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjBkMTczYzFiYjMzNGMwOGM2MmQ2ZWE0YmI3OTczMGMxOGZjN2VlNDcKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRT
ZWN1cml0eVBvbGljeS9zY3JpcHQtc3JjLW9yaWdpbi5odG1sCkBAIC0wLDAgKzEsMjQgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7Cit9Cis8L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICA8cD4KKyAgICBMb2FkcyBhbiBpZnJhbWUgd2hpY2gg
aW4gdHVybnMgdHJpZXMgdG8gbG9hZCBhbiBleHRlcm5hbCBzY3JpcHQuIFRoZSBpZnJhbWUgaGFz
IGEgY29udGVudCBzZWN1cml0eSBwb2xpY3kgZGlzYWJsaW5nIGV4dGVybmFsIHNjcmlwdHMuIFNv
IHRoZSBzY3JpcHQgc2hvdWxkIG5vdCBnZXQgZXhlY3V0ZWQuCisgIDwvcD4KKyAgPGlmcmFtZSBz
cmM9Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kv
cmVzb3VyY2VzL2VjaG8tc2NyaXB0LXNyYy5wbD9zaG91bGRfcnVuPXllcyZxPWh0dHA6Ly8xMjcu
MC4wLjE6ODAwMC9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvcmVzb3VyY2VzL3Njcmlw
dC5qcyZjc3A9YWxsb3clMjAqJTNCJTIwc2NyaXB0LXNyYyUyMGh0dHA6Ly8xMjcuMC4wLjE6ODAw
MCI+PC9pZnJhbWU+CisgIDxpZnJhbWUgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjgwMDAvc2VjdXJp
dHkvY29udGVudFNlY3VyaXR5UG9saWN5L3Jlc291cmNlcy9lY2hvLXNjcmlwdC1zcmMucGw/c2hv
dWxkX3J1bj15ZXMmcT1odHRwOi8vMTI3LjAuMC4xOjgwMDAvc2VjdXJpdHkvY29udGVudFNlY3Vy
aXR5UG9saWN5L3Jlc291cmNlcy9zY3JpcHQuanMmY3NwPWFsbG93JTIwKiUzQiUyMHNjcmlwdC1z
cmMlMjBodHRwOi8vKi4wLjAuMTo4MDAwIj48L2lmcmFtZT4KKyAgPGlmcmFtZSBzcmM9Imh0dHA6
Ly8xMjcuMC4wLjE6ODAwMC9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvcmVzb3VyY2Vz
L2VjaG8tc2NyaXB0LXNyYy5wbD9zaG91bGRfcnVuPXllcyZxPWh0dHA6Ly8xMjcuMC4wLjE6ODAw
MC9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvcmVzb3VyY2VzL3NjcmlwdC5qcyZjc3A9
YWxsb3clMjAqJTNCJTIwc2NyaXB0LXNyYyUyMDEyNy4wLjAuMTo4MDAwIj48L2lmcmFtZT4KKyAg
PGlmcmFtZSBzcmM9Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9zZWN1cml0eS9jb250ZW50U2VjdXJp
dHlQb2xpY3kvcmVzb3VyY2VzL2VjaG8tc2NyaXB0LXNyYy5wbD9zaG91bGRfcnVuPXllcyZxPWh0
dHA6Ly8xMjcuMC4wLjE6ODAwMC9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvcmVzb3Vy
Y2VzL3NjcmlwdC5qcyZjc3A9YWxsb3clMjAqJTNCJTIwc2NyaXB0LXNyYyUyMCouMC4wLjE6ODAw
MCI+PC9pZnJhbWU+CisgIDxpZnJhbWUgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjgwMDAvc2VjdXJp
dHkvY29udGVudFNlY3VyaXR5UG9saWN5L3Jlc291cmNlcy9lY2hvLXNjcmlwdC1zcmMucGw/c2hv
dWxkX3J1bj15ZXMmcT1odHRwOi8vMTI3LjAuMC4xOjgwMDAvc2VjdXJpdHkvY29udGVudFNlY3Vy
aXR5UG9saWN5L3Jlc291cmNlcy9zY3JpcHQuanMmY3NwPWFsbG93JTIwKiUzQiUyMHNjcmlwdC1z
cmMlMjBodHRwOi8vMTI3LjAuMC4xOjgwMDAlMjAlMjAiPjwvaWZyYW1lPgorICA8aWZyYW1lIHNy
Yz0iaHR0cDovLzEyNy4wLjAuMTo4MDAwL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9y
ZXNvdXJjZXMvZWNoby1zY3JpcHQtc3JjLnBsP3Nob3VsZF9ydW49eWVzJnE9aHR0cDovLzEyNy4w
LjAuMTo4MDAwL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9yZXNvdXJjZXMvc2NyaXB0
LmpzJmNzcD1hbGxvdyUyMColM0IlMjBzY3JpcHQtc3JjJTIwaHR0cDovLzEyNy4wLjAuMTo4MDAw
JTIwOyUyMCI+PC9pZnJhbWU+CisgIDxpZnJhbWUgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjgwMDAv
c2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3Jlc291cmNlcy9lY2hvLXNjcmlwdC1zcmMu
cGw/c2hvdWxkX3J1bj15ZXMmcT1odHRwOi8vMTI3LjAuMC4xOjgwMDAvc2VjdXJpdHkvY29udGVu
dFNlY3VyaXR5UG9saWN5L3Jlc291cmNlcy9zY3JpcHQuanMmY3NwPWFsbG93JTIwKiUzQiUyMHNj
cmlwdC1zcmMlMjBleGFtcGxlLmNvbSUyMGh0dHA6Ly8xMjcuMC4wLjE6ODAwMCUyMDslMjAiPjwv
aWZyYW1lPgorICA8aWZyYW1lIHNyYz0iaHR0cDovLzEyNy4wLjAuMTo4MDAwL3NlY3VyaXR5L2Nv
bnRlbnRTZWN1cml0eVBvbGljeS9yZXNvdXJjZXMvZWNoby1zY3JpcHQtc3JjLnBsP3Nob3VsZF9y
dW49bm8mcT1odHRwOi8vMTI3LjAuMC4xOjgwMDAvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9s
aWN5L3Jlc291cmNlcy9zY3JpcHQuanMmY3NwPWFsbG93JTIwKiUzQiUyMHNjcmlwdC1zcmMlMjBo
dHRwczovLzEyNy4wLjAuMTo4MDAwIj48L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCA1YzYzYWNhZWFkZjgzNmQxNmIwMGI5MmZhY2VhMmMxZWI5YWY0MWIzLi5hNjMzMTI5
ZjdmYmU5ODA4OWI5ZDY5YWE3MGJiOTkzNzhmYTlmZjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjMgQEAKKzIwMTEtMDItMTkgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZWFjaCBDb250ZW50
IFNlY3VyaXR5IFBvbGljeSBob3cgdG8gcGFyc2Ugb3JpZ2luLXBhdHRlcm5zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDc5OQorCisgICAgICAgIFRo
aXMgaXMgYSBmaXJzdC1kcmFmdCBvZiBhIHBhcnNlciBmb3Igc2NyaXB0LXNyYy4gIFRoZXJlIGFy
ZSBzdGlsbCBzb21lCisgICAgICAgIHBpZWNlcyBvZiBzeW50YXggdGhhdCB3ZSBoYXZlbid0IGlt
cGxlbWVudGVkIHlldCwgYnV0IHRoaXMgaXMgYSBzdGFydC4KKworICAgICAgICBUZXN0OiBodHRw
L3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9zY3JpcHQtc3JjLW9yaWdpbi5o
dG1sCisKKyAgICAgICAgKiBwYWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpPcmlnaW5QYXR0ZXJuOjpPcmlnaW5QYXR0ZXJuKToKKyAgICAgICAgKFdlYkNv
cmU6Ok9yaWdpblBhdHRlcm46OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9yaWdpblBhdHRl
cm46Om1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NQRGlyZWN0aXZlOjpDU1BEaXJlY3Rp
dmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NQRGlyZWN0aXZlOjphbGxvd3MpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NQRGlyZWN0aXZlOjpwYXJzZSk6CisKIDIwMTEtMDItMTggIEFkYW0gQmFydGgg
IDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGVudFNlY3VyaXR5UG9saWN5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAppbmRl
eCA5N2NkNDQ3MGVjYjk2MTIwMDc3MWM4ZTZlOGI0YTY1M2RkOTVmOWI3Li43NGQ0MDU1NzYwNDE4
ODEwMTlkMjY1Yzk1MzQ2N2Y2YjQ1NmY4MzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9D
b250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCkBAIC0yOSwyMCArMjksMjM2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNlIHsKKworaW5saW5lIGJvb2wgaXNTY2hlbWVDaGFyYWN0
ZXIoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gaXNBU0NJSUFscGhhKGMpIHx8IGlzQVNDSUlEaWdp
dChjKSB8fCBjID09ICcrJyB8fCBjID09ICctJyB8fCBjID09ICcuJzsKK30KKworYm9vbCBleHRy
YWN0U2NoZW1lKGNvbnN0IFVDaGFyKiYgcG9zLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIHJl
c3VsdCkKK3sKKyAgICBBU1NFUlQocG9zIDwgZW5kKTsKKworICAgIGlmICghaXNBU0NJSUFscGhh
KCpwb3MpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8VUNoYXIsIDMyPiBz
Y2hlbWU7CisKKyAgICBVQ2hhciBjdXJyZW50Q2hhcmF0ZXIgPSAqcG9zOworICAgIHdoaWxlIChp
c1NjaGVtZUNoYXJhY3RlcihjdXJyZW50Q2hhcmF0ZXIpKSB7CisgICAgICAgIHNjaGVtZS5hcHBl
bmQodG9BU0NJSUxvd2VyKGN1cnJlbnRDaGFyYXRlcikpOworICAgICAgICArK3BvczsKKyAgICAg
ICAgaWYgKHBvcyA9PSBlbmQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY3VycmVudENo
YXJhdGVyID0gKnBvczsKKyAgICB9CisKKyAgICByZXN1bHQgPSBTdHJpbmcoc2NoZW1lKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgaXNIb3N0Q29udGludWVDaGFyYWN0ZXIo
VUNoYXIgYykKK3sKKyAgICByZXR1cm4gIWlzQVNDSUlTcGFjZShjKSAmJiBjICE9ICc6JyAmJiBj
ICE9ICcvJzsKK30KKworaW5saW5lIGJvb2wgaXNIb3N0U3RhcnRDaGFyYWN0ZXIoVUNoYXIgYykK
K3sKKyAgICByZXR1cm4gaXNIb3N0Q29udGludWVDaGFyYWN0ZXIoYykgJiYgYyAhPSAnKic7Cit9
CisKK2Jvb2wgZXh0cmFjdEhvc3QoY29uc3QgVUNoYXIqJiBwb3MsIGNvbnN0IFVDaGFyKiBlbmQs
IFN0cmluZyYgcmVzdWx0KQoreworICAgIEFTU0VSVChwb3MgPCBlbmQpOworCisgICAgaWYgKCFp
c0hvc3RTdGFydENoYXJhY3RlcigqcG9zKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
VmVjdG9yPFVDaGFyLCAzMj4gaG9zdDsKKworICAgIFVDaGFyIGN1cnJlbnRDaGFyYWN0ZXIgPSAq
cG9zOworICAgIHdoaWxlIChpc0hvc3RDb250aW51ZUNoYXJhY3RlcihjdXJyZW50Q2hhcmFjdGVy
KSkgeworICAgICAgICBob3N0LmFwcGVuZCh0b0FTQ0lJTG93ZXIoY3VycmVudENoYXJhY3Rlcikp
OworICAgICAgICArK3BvczsKKyAgICAgICAgaWYgKHBvcyA9PSBlbmQpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY3VycmVudENoYXJhY3RlciA9ICpwb3M7CisgICAgfQorCisgICAgcmVz
dWx0ID0gU3RyaW5nKGhvc3QpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIGV4dHJhY3RQ
b3J0KGNvbnN0IFVDaGFyKiYgcG9zLCBjb25zdCBVQ2hhciogZW5kLCB1bnNpZ25lZCYgcmVzdWx0
KQoreworICAgIEFTU0VSVChwb3MgPCBlbmQpOworCisgICAgaWYgKCpwb3MgIT0gJzonKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICArK3BvczsKKworICAgIHVuc2lnbmVkIHBvcnQgPSAw
OworCisgICAgaWYgKHBvcyA9PSBlbmQpIHsKKyAgICAgICAgcmVzdWx0ID0gcG9ydDsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgVUNoYXIgY3VycmVudENoYXJhY3RlciA9ICpw
b3M7CisgICAgd2hpbGUgKGlzQVNDSUlEaWdpdChjdXJyZW50Q2hhcmFjdGVyKSkgeworICAgICAg
ICBwb3J0ICo9IDEwOworICAgICAgICBwb3J0ICs9IGN1cnJlbnRDaGFyYWN0ZXIgLSAnMCc7Cisg
ICAgICAgICsrcG9zOworICAgICAgICBpZiAocG9zID09IGVuZCkKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjdXJyZW50Q2hhcmFjdGVyID0gKnBvczsKKyAgICB9CisKKyAgICByZXN1bHQg
PSBwb3J0OworICAgIHJldHVybiB0cnVlOworfQorCit9CisKK2NsYXNzIE9yaWdpblBhdHRlcm4g
eworcHVibGljOgorICAgIE9yaWdpblBhdHRlcm4oKQorICAgICAgICA6IG1fcG9ydCgwKQorICAg
ICAgICAsIG1faGFzV2lsZGNhcmQoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIE9yaWdpblBh
dHRlcm4oY29uc3QgU3RyaW5nJiBzY2hlbWUsIGNvbnN0IFN0cmluZyYgaG9zdCwgdW5zaWduZWQg
cG9ydCwgYm9vbCBoYXNXaWxkY2FyZCkKKyAgICAgICAgOiBtX3NjaGVtZShzY2hlbWUpCisgICAg
ICAgICwgbV9ob3N0KGhvc3QpCisgICAgICAgICwgbV9wb3J0KHBvcnQpCisgICAgICAgICwgbV9o
YXNXaWxkY2FyZChoYXNXaWxkY2FyZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3NjaGVtZS5s
b3dlcigpID09IG1fc2NoZW1lKTsKKyAgICAgICAgQVNTRVJUKG1faG9zdC5sb3dlcigpID09IG1f
aG9zdCk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgcGFyc2UoY29uc3QgVUNoYXIqJiBwb3Ms
IGNvbnN0IFVDaGFyKiBlbmQsIE9yaWdpblBhdHRlcm4mIHJlc3VsdCkKKyAgICB7CisgICAgICAg
IGNvbnN0IFVDaGFyKiBzdGFydCA9IHBvczsKKworICAgICAgICBTdHJpbmcgc2NoZW1lOworICAg
ICAgICBTdHJpbmcgaG9zdDsKKyAgICAgICAgdW5zaWduZWQgcG9ydCA9IDA7CisgICAgICAgIGJv
b2wgaGFzV2lsZGNhcmQgPSBmYWxzZTsKKworICAgICAgICBpZiAoZXh0cmFjdFNjaGVtZShwb3Ms
IGVuZCwgc2NoZW1lKSkgeworICAgICAgICAgICAgaWYgKGVuZCAtIHBvcyA8IDMKKyAgICAgICAg
ICAgICAgICB8fCAqcG9zKysgIT0gJzonCisgICAgICAgICAgICAgICAgfHwgKnBvcysrICE9ICcv
JworICAgICAgICAgICAgICAgIHx8ICpwb3MrKyAhPSAnLycpIHsKKyAgICAgICAgICAgICAgICBw
b3MgPSBzdGFydDsKKyAgICAgICAgICAgICAgICBzY2hlbWUgPSBTdHJpbmcoKTsKKyAgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAocG9zID09IGVuZCkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoKnBvcyA9PSAnKicpIHsKKyAgICAgICAgICAg
IGhhc1dpbGRjYXJkID0gdHJ1ZTsKKyAgICAgICAgICAgICsrcG9zOworICAgICAgICAgICAgaWYg
KHBvcyA9PSBlbmQKKyAgICAgICAgICAgICAgICB8fCAqcG9zKysgIT0gJy4nCisgICAgICAgICAg
ICAgICAgfHwgcG9zID09IGVuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIWV4dHJhY3RIb3N0KHBvcywgZW5kLCBob3N0KSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAocG9zICE9IGVuZCAmJiAhZXh0cmFj
dFBvcnQocG9zLCBlbmQsIHBvcnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIGlmIChwb3MgIT0gZW5kKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IHJlc3VsdCA9IE9yaWdpblBhdHRlcm4oc2NoZW1lLCBob3N0LCBwb3J0LCBoYXNXaWxkY2FyZCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBL
VVJMJiB1cmwpCisgICAgeworICAgICAgICBpZiAoIW1fc2NoZW1lLmlzRW1wdHkoKSAmJiB1cmwu
cHJvdG9jb2woKS5sb3dlcigpICE9IG1fc2NoZW1lKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAKKyAgICAgICAgaWYgKCFtX2hhc1dpbGRjYXJkICYmICFlcXVhbElnbm9yaW5n
Q2FzZShtX2hvc3QsIHVybC5ob3N0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAKKyAgICAgICAgaWYgKG1faGFzV2lsZGNhcmQpIHsKKyAgICAgICAgICAgIFN0cmluZyBs
b3dlcmNhc2VIb3N0ID0gdXJsLmhvc3QoKS5sb3dlcigpOworICAgICAgICAgICAgaWYgKCFsb3dl
cmNhc2VIb3N0LmVuZHNXaXRoKG1faG9zdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9ob3N0Lmxlbmd0aCgpIDwgbG93ZXJj
YXNlSG9zdC5sZW5ndGgoKQorICAgICAgICAgICAgICAgICYmIGxvd2VyY2FzZUhvc3RbbG93ZXJj
YXNlSG9zdC5sZW5ndGgoKSAtIG1faG9zdC5sZW5ndGgoKSAtIDFdICE9ICcuJykKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICht
X3BvcnQgJiYgdXJsLnBvcnQoKSAhPSBtX3BvcnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICBpZiAoIW1fcG9ydCAmJiAhaXNEZWZhdWx0UG9ydEZvclByb3Rv
Y29sKHVybC5wb3J0KCksIHVybC5wcm90b2NvbCgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBTdHJpbmcgbV9zY2hlbWU7CisgICAgU3RyaW5nIG1faG9zdDsKKyAgICB1bnNpZ25lZCBtX3Bv
cnQ7CisgICAgYm9vbCBtX2hhc1dpbGRjYXJkOworfTsKKwogY2xhc3MgQ1NQRGlyZWN0aXZlIHsK
IHB1YmxpYzoKICAgICBleHBsaWNpdCBDU1BEaXJlY3RpdmUoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LSAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQogICAgIHsKKyAgICAgICAgcGFyc2UodmFsdWUpOwog
ICAgIH0KIAotICAgIGJvb2wgYWxsb3dzKGNvbnN0IEtVUkwmKQorICAgIGJvb2wgYWxsb3dzKGNv
bnN0IEtVUkwmIHVybCkKICAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9w
YXR0ZXJucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKG1fcGF0dGVybnNbaV0ubWF0
Y2hlcyh1cmwpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nIG1fdmFsdWU7
CisgICAgdm9pZCBwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgY29u
c3QgVUNoYXIqIHBvcyA9IHZhbHVlLmNoYXJhY3RlcnMoKTsKKyAgICAgICAgY29uc3QgVUNoYXIq
IGVuZCA9IHBvcyArIHZhbHVlLmxlbmd0aCgpOworCisgICAgICAgIHdoaWxlIChwb3MgPCBlbmQp
IHsKKyAgICAgICAgICAgIHdoaWxlIChwb3MgPCBlbmQgJiYgaXNBU0NJSVNwYWNlKCpwb3MpKQor
ICAgICAgICAgICAgICAgICsrcG9zOworCisgICAgICAgICAgICBpZiAocG9zID09IGVuZCkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY29uc3QgVUNoYXIqIHBhdHRlcm5T
dGFydCA9IHBvczsKKyAgICAgICAgICAgIHdoaWxlIChwb3MgPCBlbmQgJiYgIWlzQVNDSUlTcGFj
ZSgqcG9zKSkKKyAgICAgICAgICAgICAgICArK3BvczsKKyAgICAgICAgICAgIGNvbnN0IFVDaGFy
KiBwYXR0ZXJuRW5kID0gcG9zOworCisgICAgICAgICAgICBPcmlnaW5QYXR0ZXJuIHBhdHRlcm47
CisgICAgICAgICAgICBpZiAoT3JpZ2luUGF0dGVybjo6cGFyc2UocGF0dGVyblN0YXJ0LCBwYXR0
ZXJuRW5kLCBwYXR0ZXJuKSkKKyAgICAgICAgICAgICAgICBtX3BhdHRlcm5zLmFwcGVuZChwYXR0
ZXJuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZlY3RvcjxPcmlnaW5QYXR0ZXJuPiBtX3Bh
dHRlcm5zOwogfTsKIAogQ29udGVudFNlY3VyaXR5UG9saWN5OjpDb250ZW50U2VjdXJpdHlQb2xp
Y3koKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86298</attachid>
            <date>2011-03-20 23:44:30 -0700</date>
            <delta_ts>2011-03-21 12:59:36 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-54799-20110320234429.patch</filename>
            <type>text/plain</type>
            <size>5031</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAJ
KHJldmlzaW9uIDgxNTUwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZW50U2VjdXJpdHlQ
b2xpY3kuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMiArMzksMTMxIEBAIHN0YXRpYyBib29s
IGlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXIoVUMKICAgICByZXR1cm4gaXNBU0NJSVNwYWNlKGMp
IHx8IChjID49IDB4MjEgJiYgYyA8PSAweDdlKTsgLy8gV2hpdGVzcGFjZSArIFZDSEFSCiB9CiAK
LXN0YXRpYyB2b2lkIGFkdmFuY2VVbnRpbChjb25zdCBVQ2hhciomIHBvcywgY29uc3QgVUNoYXIq
IGVuZCwgVUNoYXIgZGVsaW1pdGVyKQorc3RhdGljIGJvb2wgaXNTb3VyY2VDaGFyYWN0ZXIoVUNo
YXIgYykKIHsKKyAgICByZXR1cm4gIWlzQVNDSUlTcGFjZShjKTsKK30KKworc3RhdGljIHZvaWQg
c2tpcFV0aWwoY29uc3QgVUNoYXIqJiBwb3MsIGNvbnN0IFVDaGFyKiBlbmQsIFVDaGFyIGRlbGlt
aXRlcikKK3sKKyAgICB3aGlsZSAocG9zIDwgZW5kICYmICpwb3MgIT0gZGVsaW1pdGVyKQorICAg
ICAgICArK3BvczsKK30KKwordGVtcGxhdGU8Ym9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoVUNoYXIp
Pgorc3RhdGljIHZvaWQgc2tpcExlYWRpbmcoY29uc3QgVUNoYXIqJiBwb3MsIGNvbnN0IFVDaGFy
KiBlbmQpCit7CisgICAgd2hpbGUgKHBvcyA8IGVuZCAmJiBjaGFyYWN0ZXJQcmVkaWNhdGUoKnBv
cykpCisgICAgICAgICsrcG9zOworfQorCitzdGF0aWMgdm9pZCBhZHZhbmNlUGFzdChjb25zdCBV
Q2hhciomIHBvcywgY29uc3QgVUNoYXIqIGVuZCwgVUNoYXIgZGVsaW1pdGVyKQoreworICAgIHNr
aXBVbnRpbChwb3MsIGVuZCwgZGVsaW1pdGVyKTsKKyAgICBpZiAocG9zIDwgZW5kKSB7CisgICAg
ICAgIEFTU0VSVCgqcG9zID09IGRlbGltaXRlcik7CisgICAgICAgICsrcG9zOworICAgIH0KK30K
KworY2xhc3MgQ1NQU291cmNlTGlzdCB7CitwdWJsaWM6CisgICAgdm9pZCBwYXJzZShjb25zdCBV
Q2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpOworICAgIHZvaWQgcGFyc2VTb3VyY2UoY29u
c3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKTsKK307CisKKworLy8gc291cmNlLWxp
c3QgICAgICAgPSAqV1NQIFsgc291cmNlICooIDEqV1NQIHNvdXJjZSApICpXU1AgXQorLy8gICAg
ICAgICAgICAgICAgICAgLyAqV1NQICInbm9uZSciICpXU1AKKy8vIHNvdXJjZSAgICAgICAgICAg
ID0gc2NoZW1lICI6IgorLy8gICAgICAgICAgICAgICAgICAgLyAoIFsgc2NoZW1lICI6Ly8iIF0g
aG9zdCBbIHBvcnQgXSApCisvLyAgICAgICAgICAgICAgICAgICAvICInc2VsZiciCisvLyAgICAg
ICAgICAgICAgICAgICAgIDsgPHNjaGVtZT4gcHJvZHVjdGlvbiBmcm9tIFJGQyAzOTg2CisvLyBo
b3N0ICAgICAgICAgICAgICA9IFsgIiouIiBdIDEqaG9zdC1jaGFyICooICIuIiAxKmhvc3QtY2hh
ciApCisvLyAgICAgICAgICAgICAgICAgICAvICIqIgorLy8gaG9zdC1jaGFyICAgICAgICAgPSBB
TFBIQSAvIERJR0lUIC8gIi0iCisvLyBwb3J0ICAgICAgICAgICAgICA9ICI6IiAoIDEqRElHSVQg
LyAiKiIgKQorLy8KK3ZvaWQgQ1NQU291cmNlTGlzdDo6cGFyc2UoY29uc3QgVUNoYXIqIGJlZ2lu
LCBjb25zdCBVQ2hhciogZW5kKQoreworICAgIGNvbnN0IFVDaGFyKiBwb3MgPSBiZWdpbjsKKwog
ICAgIHdoaWxlIChwb3MgPCBlbmQpIHsKLSAgICAgICAgaWYgKCpwb3MrKyA9PSBkZWxpbWl0ZXIp
CisgICAgICAgIHNraXBMZWFkaW5nPGlzQVNDSUlTcGFjZT4ocG9zLCBlbmQpOworICAgICAgICBj
b25zdCBVQ2hhciogYmVnaW5Tb3VyY2UgPSBwb3M7CisgICAgICAgIHNraXBMZWFkaW5nPGlzU291
cmNlQ2hhcmFjdGVyPihwb3MsIGVuZCk7CisgICAgICAgIHBhcnNlU291cmNlKGJlZ2luU291cmNl
LCBwb3MpOworICAgICAgICBBU1NFUlQocG9zID09IGVuZCB8fCBpc0FTQ0lJU3BhY2UoKnBvcykp
OworICAgICB9Cit9CisKKy8vIHNvdXJjZSAgICAgICAgICAgID0gc2NoZW1lICI6IgorLy8gICAg
ICAgICAgICAgICAgICAgLyAoIFsgc2NoZW1lICI6Ly8iIF0gaG9zdCBbIHBvcnQgXSApCisvLyAg
ICAgICAgICAgICAgICAgICAvICInc2VsZiciCisvLyAgICAgICAgICAgICAgICAgICAgIDsgPHNj
aGVtZT4gcHJvZHVjdGlvbiBmcm9tIFJGQyAzOTg2CisvLyBob3N0ICAgICAgICAgICAgICA9IFsg
IiouIiBdIDEqaG9zdC1jaGFyICooICIuIiAxKmhvc3QtY2hhciApCisvLyAgICAgICAgICAgICAg
ICAgICAvICIqIgorLy8gaG9zdC1jaGFyICAgICAgICAgPSBBTFBIQSAvIERJR0lUIC8gIi0iCisv
LyBwb3J0ICAgICAgICAgICAgICA9ICI6IiAoIDEqRElHSVQgLyAiKiIgKQorLy8KK3ZvaWQgQ1NQ
U291cmNlTGlzdDo6cGFyc2VTb3VyY2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciog
ZW5kKQoreworICAgIGlmIChiZWdpbiA9PSBlbmQpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZSgiJ25vbmUnIiwgYmVnaW4sIGVuZCAtIGJlZ2luKSkgeworICAg
ICAgICBlbWl0ZU5vbmVTb3VyY2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZSgiJ3NlbGYnIiwgYmVnaW4sIGVuZCAtIGJlZ2luKSkgeworICAg
ICAgICBlbWl0U2VsZlNvdXJjZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29u
c3QgVUNoYXIqIHBvcyA9IGJlZ2luOworCisgICAgc2tpcFV0aWwocG9zLCBlbmQsICc6Jyk7Cisg
ICAgaWYgKHBvcyA9PSBlbmQpIHsKKyAgICAgICAgLy8gVGhpcyBtdXN0IGJlIGEgaG9zdC1vbmx5
IHNvdXJjZS4KKyAgICAgICAgZW1pdFNvdXJjZShTdHJpbmcoKSwgU3RyaW5nKGJlZ2luLCBlbmQg
LSBiZWdpbiksIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGVuZCAtIHBv
cyA9PSAxKSB7CisgICAgICAgIEFTU0VSVCgqcG9zID09ICc6Jyk7CisgICAgICAgIC8vIFRoaXMg
bXVzdCBiZSBhIHNjaGVtZS1vbmx5IHNvdXJjZS4KKyAgICAgICAgZW1pdFNvdXJjZShTdHJpbmco
YmVnaW4sIHBvcyAtIGJlZ2luKSwgU3RyaW5nKCksIDApOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgU3RyaW5nIHNjaGVtZTsKKworICAgIEFTU0VSVChlbmQgLSBwb3MgPj0gMik7Cisg
ICAgaWYgKHBvc1sxXSA9PSAnLycpIHsKKyAgICAgICAgc2NoZW1lID0gU3RyaW5nKGJlZ2luLCBw
b3MgLSBiZWdpbik7CisKKyAgICAgICAgaWYgKCFza2lwUGFzdChwb3MsIGVuZCwgJzonKQorICAg
ICAgICAgICAgfHwgIXNraXBQYXN0KHBvcywgZW5kLCAnLycpCisgICAgICAgICAgICB8fCAhc2tp
cFBhc3QocG9zLCBlbmQsICcvJykpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAg
Y29uc3QgVUNoYXIqIGJlZ2luSG9zdCA9IHBvczsKKyAgICBza2lwVXRpbChwb3MsIGVuZCwgJzon
KTsKKworICAgIGlmIChwb3MgPT0gYmVnaW5Ib3N0KQorICAgICAgICByZXR1cm47CisKKyAgICBT
dHJpbmcgaG9zdChiZWdpbkhvc3QsIHBvcyA9IGJlZ2luSG9zdCk7CisKKyAgICBpbnQgcG9ydCA9
IDA7CisgICAgaWYgKHBvcyA8IGVuZCkgeworICAgICAgICBpZiAoIXNraXBQYXN0KHBvcywgZW5k
LCAnOicpKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KIH0KIAogY2xhc3MgQ1NQRGlyZWN0aXZlIHsKQEAg
LTEyMyw4ICsyNDIsNyBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6cGFyc2VEaXJlY3Rp
CiAgICAgQVNTRVJUKG5hbWUuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQodmFsdWUuaXNFbXB0eSgp
KTsKIAotICAgIHdoaWxlIChwb3MgPCBlbmQgJiYgaXNBU0NJSVNwYWNlKCpwb3MpKQotICAgICAg
ICBwb3MrKzsKKyAgICBhZHZhbmNlUGFzdFdoaXRlc3BhY2UocG9zLCBlbmQpOwogCiAgICAgd2hp
bGUgKHBvcyA8IGVuZCkgewogICAgICAgICBVQ2hhciBjdXJyZW50Q2hhcmFjdGVyID0gKnBvczsK
QEAgLTEzMywxNSArMjUxLDE0IEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjpwYXJzZURp
cmVjdGkKICAgICAgICAgaWYgKGlzQVNDSUlTcGFjZShjdXJyZW50Q2hhcmFjdGVyKSkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBpZiAoIWlzRGlyZWN0aXZlTmFtZUNoYXJhY3RlcihjdXJy
ZW50Q2hhcmFjdGVyKSkgewotICAgICAgICAgICAgYWR2YW5jZVVudGlsKHBvcywgZW5kLCAnOycp
OworICAgICAgICAgICAgYWR2YW5jZVBhc3QocG9zLCBlbmQsICc7Jyk7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgbmFtZS5hcHBlbmQoY3VycmVudENoYXJh
Y3Rlcik7CiAgICAgICAgIHBvcysrOwogICAgIH0KIAotICAgIHdoaWxlIChwb3MgPCBlbmQgJiYg
aXNBU0NJSVNwYWNlKCpwb3MpKQotICAgICAgICBwb3MrKzsKKyAgICBhZHZhbmNlUGFzdFdoaXRl
c3BhY2UocG9zLCBlbmQpOwogCiAgICAgaWYgKHBvcyA8IGVuZCAmJiAqcG9zID09ICc7Jykgewog
ICAgICAgICBwb3MrKzsKQEAgLTE1Myw3ICsyNzAsNyBAQCBib29sIENvbnRlbnRTZWN1cml0eVBv
bGljeTo6cGFyc2VEaXJlY3RpCiAgICAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyID09ICc7JykK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAoIWlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0
ZXIoY3VycmVudENoYXJhY3RlcikpIHsKLSAgICAgICAgICAgIGFkdmFuY2VVbnRpbChwb3MsIGVu
ZCwgJzsnKTsKKyAgICAgICAgICAgIGFkdmFuY2VQYXN0KHBvcywgZW5kLCAnOycpOwogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHZhbHVlLmFwcGVuZChjdXJy
ZW50Q2hhcmFjdGVyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86356</attachid>
            <date>2011-03-21 12:59:39 -0700</date>
            <delta_ts>2011-03-24 22:48:08 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-54799-20110321125938.patch</filename>
            <type>text/plain</type>
            <size>11901</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAJ
KHJldmlzaW9uIDgxNTkxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZW50U2VjdXJpdHlQ
b2xpY3kuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwzOCArMjksMjY3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgaXNEaXJlY3RpdmVOYW1lQ2hhcmFjdGVyKFVDaGFy
IGMpCisvLyBOb3JtYWxseSBXZWJLaXQgdXNlcyAic3RhdGljIiBmb3IgaW50ZXJuYWwgbGlua2Fn
ZSwgYnV0IHVzaW5nICJzdGF0aWMiIGZvcgorLy8gdGhlc2UgZnVuY3Rpb25zIGNhdXNlcyBhIGNv
bXBpbGUgZXJyb3IgYmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgYXMKKy8vIHRlbXBs
ZXRlIHBhcmFtZXRlcnMuCituYW1lc3BhY2UgeworCitib29sIGlzRGlyZWN0aXZlTmFtZUNoYXJh
Y3RlcihVQ2hhciBjKQogewotICAgIHJldHVybiBpc0FTQ0lJQWxwaGEoYykgfHwgaXNBU0NJSURp
Z2l0KGMpIHx8IGMgPT0gJy0nOworICAgIHJldHVybiBpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8
IGMgPT0gJy0nOwogfQogCi1zdGF0aWMgYm9vbCBpc0RpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVyKFVD
aGFyIGMpCitib29sIGlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXIoVUNoYXIgYykKIHsKICAgICBy
ZXR1cm4gaXNBU0NJSVNwYWNlKGMpIHx8IChjID49IDB4MjEgJiYgYyA8PSAweDdlKTsgLy8gV2hp
dGVzcGFjZSArIFZDSEFSCiB9CiAKLXN0YXRpYyB2b2lkIGFkdmFuY2VVbnRpbChjb25zdCBVQ2hh
ciomIHBvcywgY29uc3QgVUNoYXIqIGVuZCwgVUNoYXIgZGVsaW1pdGVyKQorYm9vbCBpc1NvdXJj
ZUNoYXJhY3RlcihVQ2hhciBjKQoreworICAgIHJldHVybiAhaXNBU0NJSVNwYWNlKGMpOworfQor
Cit9IC8vIG5hbWVzcGFjZQorCitzdGF0aWMgYm9vbCBza2lwRXhhY3RseShjb25zdCBVQ2hhciom
IHBvc2l0aW9uLCBjb25zdCBVQ2hhciogZW5kLCBVQ2hhciBkZWxpbWl0ZXIpCit7CisgICAgaWYg
KHBvc2l0aW9uIDwgZW5kICYmICpwb3NpdGlvbiA9PSBkZWxpbWl0ZXIpIHsKKyAgICAgICAgKytw
b3NpdGlvbjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKworc3RhdGljIHZvaWQgc2tpcFV0aWwoY29uc3QgVUNoYXIqJiBwb3NpdGlvbiwgY29uc3Qg
VUNoYXIqIGVuZCwgVUNoYXIgZGVsaW1pdGVyKQoreworICAgIHdoaWxlIChwb3NpdGlvbiA8IGVu
ZCAmJiAqcG9zaXRpb24gIT0gZGVsaW1pdGVyKQorICAgICAgICArK3Bvc2l0aW9uOworfQorCit0
ZW1wbGF0ZTxib29sIGNoYXJhY3RlclByZWRpY2F0ZShVQ2hhcik+CitzdGF0aWMgdm9pZCBza2lw
TGVhZGluZyhjb25zdCBVQ2hhciomIHBvc2l0aW9uLCBjb25zdCBVQ2hhciogZW5kKQoreworICAg
IHdoaWxlIChwb3NpdGlvbiA8IGVuZCAmJiBjaGFyYWN0ZXJQcmVkaWNhdGUoKnBvc2l0aW9uKSkK
KyAgICAgICAgKytwb3NpdGlvbjsKK30KKworc3RhdGljIHZvaWQgYWR2YW5jZVBhc3QoY29uc3Qg
VUNoYXIqJiBwb3NpdGlvbiwgY29uc3QgVUNoYXIqIGVuZCwgVUNoYXIgZGVsaW1pdGVyKQorewor
ICAgIHNraXBVdGlsKHBvc2l0aW9uLCBlbmQsIGRlbGltaXRlcik7CisgICAgaWYgKHBvc2l0aW9u
IDwgZW5kKSB7CisgICAgICAgIEFTU0VSVCgqcG9zaXRpb24gPT0gZGVsaW1pdGVyKTsKKyAgICAg
ICAgKytwb3NpdGlvbjsKKyAgICB9Cit9CisKK2NsYXNzIENTUFNvdXJjZSB7CitwdWJsaWM6Cisg
ICAgQ1NQU291cmNlKGNvbnN0IFN0cmluZyYgc2NoZW1lLCBjb25zdCBTdHJpbmcmIGhvc3QsIGlu
dCBwb3J0KQorICAgICAgICA6IG1fc2NoZW1lKHNjaGVtZSkKKyAgICAgICAgLCBtX2hvc3QoaG9z
dCkKKyAgICAgICAgLCBtX3BvcnQocG9ydCkKKyAgICAgICAgLCBtX3BvcnRIYXNXaWxkY2FyZChm
YWxzZSkKKyAgICB7CisgICAgfQorCisgICAgQ1NQU291cmNlKGNvbnN0IFN0cmluZyYgc2NoZW1l
LCBjb25zdCBTdHJpbmcmIGhvc3QpCisgICAgICAgIDogbV9zY2hlbWUoc2NoZW1lKQorICAgICAg
ICAsIG1faG9zdChob3N0Lmxvd2VyKCkpCisgICAgICAgICwgbV9wb3J0KDApCisgICAgICAgICwg
bV9wb3J0SGFzV2lsZGNhcmQodHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBtYXRjaGVz
KGNvbnN0IEtVUkwmIHVybCkKKyAgICB7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh1
cmwucHJvdG9jb2woKSwgbV9zY2hlbWUpCisgICAgICAgICAgICAmJiBlcXVhbElnbm9yaW5nQ2Fz
ZSh1cmwuaG9zdCgpLCBtX2hvc3QpCisgICAgICAgICAgICAmJiAobV9wb3J0SGFzV2lsZGNhcmQg
fHwgdXJsLnBvcnQoKSA9PSBtX3BvcnQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fc2NoZW1l
OworICAgIFN0cmluZyBtX2hvc3Q7CisgICAgaW50IG1fcG9ydDsKKworICAgIC8vIEZJWE1FOiBB
ZGQgc3VwcG9ydCBmb3IgaG9zdHMgd2l0aCBhIHdpbGRjYXJkLgorICAgIGJvb2wgbV9wb3J0SGFz
V2lsZGNhcmQ7Cit9OworCitjbGFzcyBDU1BTb3VyY2VMaXN0IHsKK3B1YmxpYzoKKyAgICB2b2lk
IHBhcnNlKGNvbnN0IFN0cmluZyYpOworICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBLVVJMJik7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBwYXJzZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFy
KiBlbmQpOworICAgIHZvaWQgcGFyc2VTb3VyY2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBV
Q2hhciogZW5kKTsKKworICAgIHZvaWQgYWRkU291cmNlU2VsZigpOworICAgIHZvaWQgYWRkU291
cmNlKGNvbnN0IFN0cmluZyYgc2NoZW1lLCBjb25zdCBTdHJpbmcmIGhvc3QsIGludCBwb3J0KTsK
KyAgICB2b2lkIGFkZFNvdXJjZVdpdGhXaWxkY2FyZFBvcnQoY29uc3QgU3RyaW5nJiBzY2hlbWUs
IGNvbnN0IFN0cmluZyYgaG9zdCk7CisKKyAgICBWZWN0b3I8Q1NQU291cmNlPiBtX3NvdXJjZUxp
c3Q7Cit9OworCit2b2lkIENTUFNvdXJjZUxpc3Q6OnBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit7CisgICAgcGFyc2UodmFsdWUuY2hhcmFjdGVycygpLCB2YWx1ZS5jaGFyYWN0ZXJzKCkgKyB2
YWx1ZS5sZW5ndGgoKSk7Cit9CisKK2Jvb2wgQ1NQU291cmNlTGlzdDo6bWF0Y2hlcyhjb25zdCBL
VVJMJiB1cmwpCiB7Ci0gICAgd2hpbGUgKHBvcyA8IGVuZCkgewotICAgICAgICBpZiAoKnBvcysr
ID09IGRlbGltaXRlcikKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc291cmNlTGlzdC5z
aXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9zb3VyY2VMaXN0W2ldLm1hdGNoZXModXJsKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
Ky8vIHNvdXJjZS1saXN0ICAgICAgID0gKldTUCBbIHNvdXJjZSAqKCAxKldTUCBzb3VyY2UgKSAq
V1NQIF0KKy8vICAgICAgICAgICAgICAgICAgIC8gKldTUCAiJ25vbmUnIiAqV1NQCisvLyBzb3Vy
Y2UgICAgICAgICAgICA9IHNjaGVtZSAiOiIKKy8vICAgICAgICAgICAgICAgICAgIC8gKCBbIHNj
aGVtZSAiOi8vIiBdIGhvc3QgWyBwb3J0IF0gKQorLy8gICAgICAgICAgICAgICAgICAgLyAiJ3Nl
bGYnIgorLy8gICAgICAgICAgICAgICAgICAgICA7IDxzY2hlbWU+IHByb2R1Y3Rpb24gZnJvbSBS
RkMgMzk4NgorLy8gaG9zdCAgICAgICAgICAgICAgPSBbICIqLiIgXSAxKmhvc3QtY2hhciAqKCAi
LiIgMSpob3N0LWNoYXIgKQorLy8gICAgICAgICAgICAgICAgICAgLyAiKiIKKy8vIGhvc3QtY2hh
ciAgICAgICAgID0gQUxQSEEgLyBESUdJVCAvICItIgorLy8gcG9ydCAgICAgICAgICAgICAgPSAi
OiIgKCAxKkRJR0lUIC8gIioiICkKKy8vCit2b2lkIENTUFNvdXJjZUxpc3Q6OnBhcnNlKGNvbnN0
IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCkKK3sKKyAgICBjb25zdCBVQ2hhciogcG9z
aXRpb24gPSBiZWdpbjsKKworICAgIGJvb2wgaXNGaXJzdFNvdXJjZUluTGlzdCA9IHRydWU7Cisg
ICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7CisgICAgICAgIHNraXBMZWFkaW5nPGlzQVNDSUlT
cGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgICAgIGNvbnN0IFVDaGFyKiBiZWdpblNvdXJjZSA9
IHBvc2l0aW9uOworICAgICAgICBza2lwTGVhZGluZzxpc1NvdXJjZUNoYXJhY3Rlcj4ocG9zaXRp
b24sIGVuZCk7CisKKyAgICAgICAgaWYgKGlzRmlyc3RTb3VyY2VJbkxpc3QgJiYgZXF1YWxJZ25v
cmluZ0Nhc2UoIidub25lJyIsIGJlZ2luU291cmNlLCBwb3NpdGlvbiAtIGJlZ2luU291cmNlKSkK
KyAgICAgICAgICAgIHJldHVybjsgLy8gV2UgcmVwcmVzZW50ICdub25lJyBhcyBhbiBlbXB0eSBt
X3NvdXJjZUxpc3QuCisgICAgICAgIGlzRmlyc3RTb3VyY2VJbkxpc3QgPSBmYWxzZTsKKworICAg
ICAgICBwYXJzZVNvdXJjZShiZWdpblNvdXJjZSwgcG9zaXRpb24pOworICAgICAgICBBU1NFUlQo
cG9zaXRpb24gPT0gZW5kIHx8IGlzQVNDSUlTcGFjZSgqcG9zaXRpb24pKTsKKyAgICAgfQorfQor
CisvLyBzb3VyY2UgICAgICAgICAgICA9IHNjaGVtZSAiOiIKKy8vICAgICAgICAgICAgICAgICAg
IC8gKCBbIHNjaGVtZSAiOi8vIiBdIGhvc3QgWyBwb3J0IF0gKQorLy8gICAgICAgICAgICAgICAg
ICAgLyAiJ3NlbGYnIgorLy8gICAgICAgICAgICAgICAgICAgICA7IDxzY2hlbWU+IHByb2R1Y3Rp
b24gZnJvbSBSRkMgMzk4NgorLy8gaG9zdCAgICAgICAgICAgICAgPSBbICIqLiIgXSAxKmhvc3Qt
Y2hhciAqKCAiLiIgMSpob3N0LWNoYXIgKQorLy8gICAgICAgICAgICAgICAgICAgLyAiKiIKKy8v
IGhvc3QtY2hhciAgICAgICAgID0gQUxQSEEgLyBESUdJVCAvICItIgorLy8gcG9ydCAgICAgICAg
ICAgICAgPSAiOiIgKCAxKkRJR0lUIC8gIioiICkKKy8vCit2b2lkIENTUFNvdXJjZUxpc3Q6OnBh
cnNlU291cmNlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCkKK3sKKyAgICBp
ZiAoYmVnaW4gPT0gZW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UoIidzZWxmJyIsIGJlZ2luLCBlbmQgLSBiZWdpbikpIHsKKyAgICAgICAgYWRkU291cmNl
U2VsZigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgVUNoYXIqIHBvc2l0
aW9uID0gYmVnaW47CisKKyAgICBza2lwVXRpbChwb3NpdGlvbiwgZW5kLCAnOicpOworICAgIGlm
IChwb3NpdGlvbiA9PSBlbmQpIHsKKyAgICAgICAgLy8gVGhpcyBtdXN0IGJlIGEgaG9zdC1vbmx5
IHNvdXJjZS4KKyAgICAgICAgYWRkU291cmNlKFN0cmluZygpLCBTdHJpbmcoYmVnaW4sIGVuZCAt
IGJlZ2luKSwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZW5kIC0gcG9z
aXRpb24gPT0gMSkgeworICAgICAgICBBU1NFUlQoKnBvc2l0aW9uID09ICc6Jyk7CisgICAgICAg
IC8vIFRoaXMgbXVzdCBiZSBhIHNjaGVtZS1vbmx5IHNvdXJjZS4KKyAgICAgICAgYWRkU291cmNl
KFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbiksIFN0cmluZygpLCAwKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFN0cmluZyBzY2hlbWU7CisKKyAgICBBU1NFUlQoZW5kIC0g
cG9zaXRpb24gPj0gMik7CisgICAgaWYgKHBvc2l0aW9uWzFdID09ICcvJykgeworICAgICAgICBz
Y2hlbWUgPSBTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pOworCisgICAgICAgIGlmICgh
c2tpcEV4YWN0bHkocG9zaXRpb24sIGVuZCwgJzonKQorICAgICAgICAgICAgfHwgIXNraXBFeGFj
dGx5KHBvc2l0aW9uLCBlbmQsICcvJykKKyAgICAgICAgICAgIHx8ICFza2lwRXhhY3RseShwb3Np
dGlvbiwgZW5kLCAnLycpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0
IFVDaGFyKiBiZWdpbkhvc3QgPSBwb3NpdGlvbjsKKyAgICBza2lwVXRpbChwb3NpdGlvbiwgZW5k
LCAnOicpOworCisgICAgaWYgKHBvc2l0aW9uID09IGJlZ2luSG9zdCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgU3RyaW5nIGhvc3QoYmVnaW5Ib3N0LCBwb3NpdGlvbiAtIGJlZ2luSG9zdCk7CisK
KyAgICBpbnQgcG9ydCA9IDA7CisgICAgaWYgKHBvc2l0aW9uIDwgZW5kKSB7CisgICAgICAgIEFT
U0VSVCgqcG9zaXRpb24gPT0gJzsnKTsKKyAgICAgICAgKytwb3NpdGlvbjsKKworICAgICAgICBp
ZiAocG9zaXRpb24gPT0gZW5kKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChl
bmQgLSBwb3NpdGlvbiA9PSAxICYmICpwb3NpdGlvbiA9PSAnKicpIHsKKyAgICAgICAgICAgIGFk
ZFNvdXJjZVdpdGhXaWxkY2FyZFBvcnQoc2NoZW1lLCBob3N0KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFVDaGFyKiBwb3J0QmVnaW4gPSBwb3NpdGlv
bjsKKyAgICAgICAgc2tpcExlYWRpbmc8aXNBU0NJSURpZ2l0Pihwb3NpdGlvbiwgZW5kKTsKKwor
ICAgICAgICBpZiAocG9zaXRpb24gIT0gZW5kKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGJvb2wgb2s7CisgICAgICAgIHBvcnQgPSBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QocG9ydEJl
Z2luLCBlbmQgLSBwb3J0QmVnaW4sICZvayk7CisgICAgICAgIGlmICghb2spCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgfQorCisgICAgYWRkU291cmNlKHNjaGVtZSwgaG9zdCwgcG9ydCk7Cit9
CisKK3ZvaWQgQ1NQU291cmNlTGlzdDo6YWRkU291cmNlU2VsZigpCit7CisgICAgLy8gRklYTUU6
IEluaGVyaXQgdGhlIHNjaGVtZSwgaG9zdCwgYW5kIHBvcnQgZnJvbSB0aGUgY3VycmVudCBVUkwu
Cit9CisKK3ZvaWQgQ1NQU291cmNlTGlzdDo6YWRkU291cmNlKGNvbnN0IFN0cmluZyYgc2NoZW1l
LCBjb25zdCBTdHJpbmcmIGhvc3QsIGludCBwb3J0KQoreworICAgIG1fc291cmNlTGlzdC5hcHBl
bmQoQ1NQU291cmNlKHNjaGVtZSwgaG9zdCwgcG9ydCkpOworfQorCit2b2lkIENTUFNvdXJjZUxp
c3Q6OmFkZFNvdXJjZVdpdGhXaWxkY2FyZFBvcnQoY29uc3QgU3RyaW5nJiBzY2hlbWUsIGNvbnN0
IFN0cmluZyYgaG9zdCkKK3sKKyAgICBtX3NvdXJjZUxpc3QuYXBwZW5kKENTUFNvdXJjZShzY2hl
bWUsIGhvc3QpKTsKIH0KIAogY2xhc3MgQ1NQRGlyZWN0aXZlIHsKIHB1YmxpYzoKICAgICBleHBs
aWNpdCBDU1BEaXJlY3RpdmUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgOiBtX3ZhbHVl
KHZhbHVlKQogICAgIHsKKyAgICAgICAgbV9zb3VyY2VMaXN0LnBhcnNlKHZhbHVlKTsKICAgICB9
CiAKLSAgICBib29sIGFsbG93cyhjb25zdCBLVVJMJikKKyAgICBib29sIGFsbG93cyhjb25zdCBL
VVJMJiB1cmwpCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBt
X3NvdXJjZUxpc3QubWF0Y2hlcyh1cmwpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBTdHJpbmcg
bV92YWx1ZTsKKyAgICBDU1BTb3VyY2VMaXN0IG1fc291cmNlTGlzdDsKIH07CiAKIENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6Q29udGVudFNlY3VyaXR5UG9saWN5KCkKQEAgLTk4LDc3ICszMjcsNjYg
QEAgdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnBhcnNlKGNvbnN0IAogICAgIGlmIChwb2xp
Y3kuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBVQ2hhciogcG9zID0g
cG9saWN5LmNoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcG9zICsgcG9saWN5
Lmxlbmd0aCgpOworICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IHBvbGljeS5jaGFyYWN0ZXJz
KCk7CisgICAgY29uc3QgVUNoYXIqIGVuZCA9IHBvc2l0aW9uICsgcG9saWN5Lmxlbmd0aCgpOwog
Ci0gICAgd2hpbGUgKHBvcyA8IGVuZCkgewotICAgICAgICBWZWN0b3I8VUNoYXIsIDMyPiBuYW1l
OwotICAgICAgICBWZWN0b3I8VUNoYXIsIDY0PiB2YWx1ZTsKKyAgICB3aGlsZSAocG9zaXRpb24g
PCBlbmQpIHsKKyAgICAgICAgU3RyaW5nIG5hbWU7CisgICAgICAgIFN0cmluZyB2YWx1ZTsKIAot
ICAgICAgICBpZiAoIXBhcnNlRGlyZWN0aXZlKHBvcywgZW5kLCBuYW1lLCB2YWx1ZSkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKG5hbWUuaXNFbXB0eSgpKQorICAgICAgICBp
ZiAoIXBhcnNlRGlyZWN0aXZlKHBvc2l0aW9uLCBlbmQsIG5hbWUsIHZhbHVlKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgIC8vIFdlIHVzZSBhIGNvcHkgaGVyZSBpbnN0ZWFkIG9m
IFN0cmluZzo6YWRvcHQgYmVjYXVzZSB3ZSBleHBlY3QKLSAgICAgICAgLy8gdGhlIG5hbWUgYW5k
IHRoZSB2YWx1ZSB0byBiZSByZWxhdGl2ZWx5IHNob3J0LCBzbyB0aGUgY29weSB3aWxsCi0gICAg
ICAgIC8vIGJlIGNoZWFwZXIgdGhhbiB0aGUgZXh0cmEgbWFsbG9jLgotICAgICAgICBlbWl0RGly
ZWN0aXZlKFN0cmluZyhuYW1lKSwgU3RyaW5nKHZhbHVlKSk7CisgICAgICAgIEFTU0VSVCghbmFt
ZS5pc0VtcHR5KCkpOworICAgICAgICBhZGREaXJlY3RpdmUobmFtZSwgdmFsdWUpOwogICAgIH0K
IH0KIAotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnBhcnNlRGlyZWN0aXZlKGNvbnN0IFVD
aGFyKiYgcG9zLCBjb25zdCBVQ2hhciogZW5kLCBWZWN0b3I8VUNoYXIsIDMyPiYgbmFtZSwgVmVj
dG9yPFVDaGFyLCA2ND4mIHZhbHVlKQorYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnBhcnNl
RGlyZWN0aXZlKGNvbnN0IFVDaGFyKiYgcG9zaXRpb24sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmlu
ZyYgbmFtZSwgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQocG9zIDwgZW5kKTsKKyAgICBB
U1NFUlQocG9zaXRpb24gPCBlbmQpOwogICAgIEFTU0VSVChuYW1lLmlzRW1wdHkoKSk7CiAgICAg
QVNTRVJUKHZhbHVlLmlzRW1wdHkoKSk7CiAKLSAgICB3aGlsZSAocG9zIDwgZW5kICYmIGlzQVND
SUlTcGFjZSgqcG9zKSkKLSAgICAgICAgcG9zKys7CisgICAgc2tpcExlYWRpbmc8aXNBU0NJSVNw
YWNlPihwb3NpdGlvbiwgZW5kKTsKIAotICAgIHdoaWxlIChwb3MgPCBlbmQpIHsKLSAgICAgICAg
VUNoYXIgY3VycmVudENoYXJhY3RlciA9ICpwb3M7Ci0gICAgICAgIGlmIChjdXJyZW50Q2hhcmFj
dGVyID09ICc7JykKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoaXNBU0NJSVNwYWNl
KGN1cnJlbnRDaGFyYWN0ZXIpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICghaXNE
aXJlY3RpdmVOYW1lQ2hhcmFjdGVyKGN1cnJlbnRDaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAgICBh
ZHZhbmNlVW50aWwocG9zLCBlbmQsICc7Jyk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICAgICAgbmFtZS5hcHBlbmQoY3VycmVudENoYXJhY3Rlcik7Ci0gICAgICAg
IHBvcysrOworICAgIGNvbnN0IFVDaGFyKiBuYW1lQmVnaW4gPSBwb3NpdGlvbjsKKyAgICBza2lw
TGVhZGluZzxpc0RpcmVjdGl2ZU5hbWVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOworCisgICAg
aWYgKG5hbWVCZWdpbiA9PSBwb3NpdGlvbikgeworICAgICAgICBhZHZhbmNlUGFzdChwb3NpdGlv
biwgZW5kLCAnOycpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHBv
c2l0aW9uIDwgZW5kICYmICpwb3NpdGlvbiAhPSAnOycgJiYgIWlzQVNDSUlTcGFjZSgqcG9zaXRp
b24pKSB7CisgICAgICAgIGFkdmFuY2VQYXN0KHBvc2l0aW9uLCBlbmQsICc7Jyk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICB3aGlsZSAocG9zIDwgZW5kICYmIGlzQVNDSUlT
cGFjZSgqcG9zKSkKLSAgICAgICAgcG9zKys7CisgICAgbmFtZSA9IFN0cmluZyhuYW1lQmVnaW4s
IHBvc2l0aW9uIC0gbmFtZUJlZ2luKTsKKworICAgIHNraXBMZWFkaW5nPGlzQVNDSUlTcGFjZT4o
cG9zaXRpb24sIGVuZCk7CiAKLSAgICBpZiAocG9zIDwgZW5kICYmICpwb3MgPT0gJzsnKSB7Ci0g
ICAgICAgIHBvcysrOworICAgIGlmIChza2lwRXhhY3RseShwb3NpdGlvbiwgZW5kLCAnOycpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CiAKLSAgICB3aGlsZSAocG9zIDwgZW5kKSB7Ci0g
ICAgICAgIFVDaGFyIGN1cnJlbnRDaGFyYWN0ZXIgPSAqcG9zOwotICAgICAgICBpZiAoY3VycmVu
dENoYXJhY3RlciA9PSAnOycpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKCFpc0Rp
cmVjdGl2ZVZhbHVlQ2hhcmFjdGVyKGN1cnJlbnRDaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAgICBh
ZHZhbmNlVW50aWwocG9zLCBlbmQsICc7Jyk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICAgICAgdmFsdWUuYXBwZW5kKGN1cnJlbnRDaGFyYWN0ZXIpOwotICAgICAg
ICBwb3MrKzsKKyAgICBjb25zdCBVQ2hhciogdmFsdWVCZWdpbiA9IHBvc2l0aW9uOworICAgIHNr
aXBMZWFkaW5nPGlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOworCisg
ICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICpwb3NpdGlvbiAhPSAnOycpIHsKKyAgICAgICAgYWR2
YW5jZVBhc3QocG9zaXRpb24sIGVuZCwgJzsnKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAotICAgIGlmIChwb3MgPCBlbmQgJiYgKnBvcyA9PSAnOycpIHsKLSAgICAgICAgcG9zKys7
CisgICAgdmFsdWUgPSBTdHJpbmcodmFsdWVCZWdpbiwgcG9zaXRpb24gLSB2YWx1ZUJlZ2luKTsK
KworICAgIGlmIChza2lwRXhhY3RseShwb3NpdGlvbiwgZW5kLCAnOycpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBDb250ZW50U2Vj
dXJpdHlQb2xpY3k6OmVtaXREaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQordm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFkZERpcmVjdGl2ZShjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChTdHJpbmcsIHNjcmlwdFNyYywgKCJzY3JpcHQtc3JjIikpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvQ29udGVudFNlY3VyaXR5UG9saWN5LmgJKHJldmlzaW9uIDgxNTkx
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZW50U2VjdXJpdHlQb2xpY3kuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsOCArNDgsOCBAQCBwcml2YXRlOgogICAgIENvbnRlbnRTZWN1cml0eVBv
bGljeSgpOwogCiAgICAgdm9pZCBwYXJzZShjb25zdCBTdHJpbmcmKTsKLSAgICBib29sIHBhcnNl
RGlyZWN0aXZlKGNvbnN0IFVDaGFyKiYgcG9zLCBjb25zdCBVQ2hhciogZW5kLCBWZWN0b3I8VUNo
YXIsIDMyPiYgbmFtZSwgVmVjdG9yPFVDaGFyLCA2ND4mIHZhbHVlKTsKLSAgICB2b2lkIGVtaXRE
aXJlY3RpdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICBi
b29sIHBhcnNlRGlyZWN0aXZlKGNvbnN0IFVDaGFyKiYgcG9zLCBjb25zdCBVQ2hhciogZW5kLCBT
dHJpbmcmIG5hbWUsIFN0cmluZyYgdmFsdWUpOworICAgIHZvaWQgYWRkRGlyZWN0aXZlKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAKICAgICBib29sIG1faGF2ZVBv
bGljeTsKICAgICBPd25QdHI8Q1NQRGlyZWN0aXZlPiBtX3NjcmlwdFNyYzsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86886</attachid>
            <date>2011-03-24 22:48:12 -0700</date>
            <delta_ts>2011-03-25 21:53:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54799-20110324224811.patch</filename>
            <type>text/plain</type>
            <size>27795</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxOTM5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzcgQEAKKzIwMTEtMDMtMjQgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUZWFjaCBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBob3cgdG8gcGFy
c2Ugc291cmNlLWxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU0Nzk5CisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBsYXJnZXIgdGhhbiBJIHdvdWxk
IGxpa2UsIGJ1dCBJIHdhc24ndCBzdXJlIGhvdyB0byBtYWtlCisgICAgICAgIGl0IGFueSBzbWFs
bGVyIHdoaWxlIHN0aWxsIGJlaW5nIHJlYXNvbmFibHkgdGVzdGFibGUuICBJJ3ZlIGxlZnQgb3V0
CisgICAgICAgIHNvbWUgZmVhdHVyZXMgKHN1Y2ggYXMgaG9zdCB3aWxkY2FyZGluZyBhbmQgJ3Nl
bGYnKSBzbyBJIGNhbiBhZGQgdGhlbQorICAgICAgICBpbiBsYXRlciBwYXRjaGVzIHdpdGggdGVz
dHMuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQ
b2xpY3kvc291cmNlLWxpc3QtcGFyc2luZy5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9TY3Jp
cHRDb250cm9sbGVyQmFzZS5jcHA6CisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuY3BwOgor
ICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgICog
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgICAgIC0gQWRkIGluY2x1ZGUgZXhwbGlj
aXRseSBub3cgdGhhdCB3ZSdyZSBub3Qgc3BhbW1pbmcgdGhlIGluY2x1ZGUKKyAgICAgICAgICAg
ICAgZXZlcnl3aGVyZS4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OmluaXRTZWN1cml0eUNvbnRleHQpOgorICAgICAgICAgICAgLSBXZSBu
ZWVkIHRvIHBhc3MgdGhlIFNlY3VyaXR5T3JpZ2luIG9iamVjdCB0bworICAgICAgICAgICAgICBD
b250ZW50U2VjdXJpdHlQb2xpY3kgc28gdGhhdCBpdCBjYW4gcmVzb2x2ZSBpbXBsaWNpdCBwYXJ0
cyBvZgorICAgICAgICAgICAgICBzb3VyY2UgcGF0dGVybnMsIHN1Y2ggYXMgdGhlIHNjaGVtZS4K
KyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgICAgIC0gRm9yd2FyZCBkZWNsYXJl
IENvbnRlbnRTZWN1cml0eVBvbGljeSByYXRoZXIgdGhhbiBpbmNsdWRpbmcgdGhlCisgICAgICAg
ICAgICAgIGhlYWRlci4gIFRlY2huaWNhbGx5IHRoaXMgY291bGQgYmUgYSBzZXBhcmF0ZSBjaGFu
Z2UsIGJ1dCBJIHdhcworICAgICAgICAgICAgICBnZXR0aW5nIGFubm95ZWQgYXQgdGhlIHdvcmxk
IHJlLWJ1aWxkcy4KKyAgICAgICAgKiBwYWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpza2lwRXhhY3RseSk6CisgICAgICAgIChXZWJDb3JlOjpza2lwVXRp
bCk6CisgICAgICAgIChXZWJDb3JlOjpza2lwV2hpbGUpOgorICAgICAgICAgICAgLSBDbGVhbiB1
cCB0aGVzZSBwYXJzZXIgaGVscGVyIGZ1bmN0aW9ucy4gIFdlIG1pZ2h0IGNvbnNpZGVyIG1vdmlu
ZworICAgICAgICAgICAgICB0aGVtIHRvIGEgbW9yZSBnZW5lcmFsIGxvY2F0aW9uLiAgVGhleSdy
ZSB2ZXJ5IGhlbHBmdWwgZm9yCisgICAgICAgICAgICAgIHdyaXRpbmcgc2VjdXJlIEhUVFAgaGVh
ZGVyIHBhcnNlcnMuCisgICAgICAgIChXZWJDb3JlOjpDU1BTb3VyY2U6OkNTUFNvdXJjZSk6Cisg
ICAgICAgICAgICAtIE5ldyBjbGFzcyB0byByZXByZXNlbnQgb25lIHNvdXJjZSBpbiBhIHNvdXJj
ZS1saXN0LgorICAgICAgICAoV2ViQ29yZTo6Q1NQU291cmNlOjptYXRjaGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTUFNvdXJjZTo6c2NoZW1lTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1BTb3VyY2U6Omhvc3RNYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTUFNvdXJjZTo6cG9y
dE1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NQU291cmNlOjppc1NjaGVtZU9ubHkpOgor
ICAgICAgICAgICAgLSBDdXJyZW50bHkgd2UgcmVwcmVzZW50IHNjaGVtZS1vbmx5IHNvdXJjZXMg
dXNpbmcgd2l0aCBhbiBlbXB0eQorICAgICAgICAgICAgICBtX2hvc3QuICBBbm90aGVyIGFwcHJv
YWNoIEkgY29uc2lkZXJlZCB3YXMgdXNpbmcgYW5vdGhlciBib29sLAorICAgICAgICAgICAgICBi
dXQgdGhhdCBzZWVtZWQgc2xpZ2hseSBtZXNzaWVyLgorICAgICAgICAoV2ViQ29yZTo6Q1NQU291
cmNlTGlzdDo6Q1NQU291cmNlTGlzdCk6CisgICAgICAgICAgICAtIENTUFNvdXJjZUxpc3QgZG9l
c24ndCBuZWVkIHRvIHJlZiBTZWN1cml0eU9yaWdpbiBiZWNhdXNlCisgICAgICAgICAgICAgIENT
UFNvdXJjZUxpc3QgaXMgb3duZWQgYnkgQ29udGVudFNlY3VyaXR5UG9saWN5LCB3aGljaCBob2xk
cyBhCisgICAgICAgICAgICAgIHJlZi4KKyAgICAgICAgKFdlYkNvcmU6OkNTUFNvdXJjZUxpc3Q6
OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTUFNvdXJjZUxpc3Q6Om1hdGNoZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NQU291cmNlTGlzdDo6cGFyc2VTb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NQU291cmNlTGlzdDo6cGFyc2VTY2hlbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NQ
U291cmNlTGlzdDo6cGFyc2VIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTUFNvdXJjZUxpc3Q6
OnBhcnNlUG9ydCk6CisgICAgICAgICAgICAtIEEgYmFzaWMgInNlZ21lbnQgYW5kIHJlY3Vyc2Ui
IHBhcnNlci4gIFRoaXMgcGFyc2VyIGNhdXNlcyB1cyB0bworICAgICAgICAgICAgICB0YWtlIG1v
cmUgYnJhbmNoZXMgdGhhbiB3ZSBuZWVkLCBidXQgSSBkb24ndCB0aGluayB3ZSBuZWVkIHRvCisg
ICAgICAgICAgICAgIHNxdWVlemUgZXZlcnkgbGFzdCBvdWNoIG9mIHBlcmZvcm1hbmNlIG91dCBv
ZiB0aGlzIHBhcnNlci4gIFRoaXMKKyAgICAgICAgICAgICAgYXBwcm9hY2ggaXMgbW9yZSBzaW1w
bGUgdGhhbiBzb21lIG9mIHRoZSBvdGhlciBhcHByb2FjaGVzIEkKKyAgICAgICAgICAgICAgdHJp
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1BTb3VyY2VMaXN0OjphZGRTb3VyY2VTZWxmKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZTo6Q1NQRGlyZWN0aXZlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTUERpcmVjdGl2ZTo6YWxsb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRT
ZWN1cml0eVBvbGljeTo6Q29udGVudFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dFNlY3VyaXR5UG9saWN5OjpwYXJzZURpcmVjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50U2VjdXJpdHlQb2xpY3k6OmFkZERpcmVjdGl2ZSk6CisgICAgICAgICAgICAtIEkgY291bGRu
J3QgcmVzaXN0IHJlLXdyaXRpbmcgdGhpcyBwYXJzZXIgdG8gdXNlIHRoZSBoZWxwZXIKKyAgICAg
ICAgICAgICAgZnVuY3Rpb25zIGFuZCB0byBtYXRjaCB0aGUgc3R5bGUgb2YgdGhlIHNvdXJjZS1s
aXN0IHBhcnNlci4KKyAgICAgICAgKiBwYWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjpjcmVhdGUpOgorICAgICAgICAg
ICAgLSBBY2NlcHQgYSBTZWN1cml0eU9yaWdpbiBjb250ZXh0IG9iamVjdC4KKwogMjAxMS0wMy0y
NCAgU3RlcGhhbmllIExld2lzICA8c2xld2lzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBHZW9mZiBHYXJlbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL1NjcmlwdENv
bnRyb2xsZXJCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9T
Y3JpcHRDb250cm9sbGVyQmFzZS5jcHAJKHJldmlzaW9uIDgxODk4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJv
bGxlci5oIgogCisjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyQ2xpZW50LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDgxODk4
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkNvbW1l
bnQuaCIKICNpbmNsdWRlICJDb25zb2xlLmgiCisjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9s
aWN5LmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiQ3VzdG9tRXZlbnQuaCIK
ICNpbmNsdWRlICJEYXRlQ29tcG9uZW50cy5oIgpAQCAtNDUwMCw3ICs0NTAxLDcgQEAgdm9pZCBE
b2N1bWVudDo6aW5pdFNlY3VyaXR5Q29udGV4dCgpCiAgICAgLy8gbG9hZGluZyBVUkwgd2l0aCBh
IGZyZXNoIGNvbnRlbnQgc2VjdXJpdHkgcG9saWN5LgogICAgIG1fY29va2llVVJMID0gbV91cmw7
CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c2V0U2VjdXJpdHlPcmlnaW4oU2VjdXJpdHlP
cmlnaW46OmNyZWF0ZShtX3VybCwgbV9mcmFtZS0+bG9hZGVyKCktPnNhbmRib3hGbGFncygpKSk7
Ci0gICAgbV9jb250ZW50U2VjdXJpdHlQb2xpY3kgPSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmNy
ZWF0ZSgpOworICAgIG1fY29udGVudFNlY3VyaXR5UG9saWN5ID0gQ29udGVudFNlY3VyaXR5UG9s
aWN5OjpjcmVhdGUoc2VjdXJpdHlPcmlnaW4oKSk7CiAKICAgICBpZiAoU2VjdXJpdHlPcmlnaW46
OmFsbG93U3Vic3RpdHV0ZURhdGFBY2Nlc3NUb0xvY2FsKCkpIHsKICAgICAgICAgLy8gSWYgdGhp
cyBkb2N1bWVudCB3YXMgbG9hZGVkIHdpdGggc3Vic3RpdHV0ZURhdGEsIHRoZW4gdGhlIGRvY3Vt
ZW50IGNhbgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDgxODk4KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYg
QEAKICNpbmNsdWRlICJDb2xsZWN0aW9uVHlwZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5j
bHVkZSAiQ29udGFpbmVyTm9kZS5oIgotI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5o
IgogI2luY2x1ZGUgIkRPTVRpbWVTdGFtcC5oIgogI2luY2x1ZGUgIkRvY3VtZW50T3JkZXJlZE1h
cC5oIgogI2luY2x1ZGUgIkRvY3VtZW50VGltaW5nLmgiCkBAIC01MSwxOSArNTAsMjAgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBBdHRyOwogY2xhc3MgQVhPYmplY3RDYWNoZTsK
K2NsYXNzIEF0dHI7CiBjbGFzcyBDREFUQVNlY3Rpb247CitjbGFzcyBDU1NQcmltaXRpdmVWYWx1
ZUNhY2hlOworY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKK2NsYXNzIENTU1N0eWxlU2VsZWN0
b3I7CitjbGFzcyBDU1NTdHlsZVNoZWV0OwogY2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldDsKIGNs
YXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwogY2xhc3MgQ2FjaGVkU2NyaXB0OwogY2xhc3MgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDsKIGNsYXNzIENoYXJhY3RlckRhdGE7Ci1jbGFzcyBDU1NQcmlt
aXRpdmVWYWx1ZUNhY2hlOwotY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKLWNsYXNzIENTU1N0
eWxlU2VsZWN0b3I7Ci1jbGFzcyBDU1NTdHlsZVNoZWV0OwogY2xhc3MgQ29tbWVudDsKK2NsYXNz
IENvbnRlbnRTZWN1cml0eVBvbGljeTsKIGNsYXNzIERPTUltcGxlbWVudGF0aW9uOwogY2xhc3Mg
RE9NU2VsZWN0aW9uOwogY2xhc3MgRE9NV2luZG93OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1NjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TY3Jp
cHRFbGVtZW50LmNwcAkocmV2aXNpb24gODE4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2Ny
aXB0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1
ZGUgIkNhY2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisj
aW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJEb2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAJ
KHJldmlzaW9uIDgxODk4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3Vt
ZW50UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudFBhcnNlci5oIgogCisjaW5jbHVkZSAi
Q29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgog
I2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA4MTg5OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcg
QEAKICNpbmNsdWRlICJDYWNoZWRQYWdlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xp
Y3kuaCIKICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkRPTVdpbmRv
dy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nv
bnRlbnRTZWN1cml0eVBvbGljeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCShyZXZpc2lvbiA4MTg5OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNDYgKzI1LDM5MCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29udGVu
dFNlY3VyaXR5UG9saWN5LmgiCisKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBpc0RpcmVjdGl2ZU5hbWVDaGFyYWN0ZXIoVUNoYXIg
YykKKy8vIE5vcm1hbGx5IFdlYktpdCB1c2VzICJzdGF0aWMiIGZvciBpbnRlcm5hbCBsaW5rYWdl
LCBidXQgdXNpbmcgInN0YXRpYyIgZm9yCisvLyB0aGVzZSBmdW5jdGlvbnMgY2F1c2VzIGEgY29t
cGlsZSBlcnJvciBiZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBhcworLy8gdGVtcGxl
dGUgcGFyYW1ldGVycy4KK25hbWVzcGFjZSB7CisKK2Jvb2wgaXNEaXJlY3RpdmVOYW1lQ2hhcmFj
dGVyKFVDaGFyIGMpCiB7Ci0gICAgcmV0dXJuIGlzQVNDSUlBbHBoYShjKSB8fCBpc0FTQ0lJRGln
aXQoYykgfHwgYyA9PSAnLSc7CisgICAgcmV0dXJuIGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwg
YyA9PSAnLSc7CiB9CiAKLXN0YXRpYyBib29sIGlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXIoVUNo
YXIgYykKK2Jvb2wgaXNEaXJlY3RpdmVWYWx1ZUNoYXJhY3RlcihVQ2hhciBjKQogewogICAgIHJl
dHVybiBpc0FTQ0lJU3BhY2UoYykgfHwgKGMgPj0gMHgyMSAmJiBjIDw9IDB4N2UpOyAvLyBXaGl0
ZXNwYWNlICsgVkNIQVIKIH0KIAotc3RhdGljIHZvaWQgYWR2YW5jZVVudGlsKGNvbnN0IFVDaGFy
KiYgcG9zLCBjb25zdCBVQ2hhciogZW5kLCBVQ2hhciBkZWxpbWl0ZXIpCitib29sIGlzU291cmNl
Q2hhcmFjdGVyKFVDaGFyIGMpCit7CisgICAgcmV0dXJuICFpc0FTQ0lJU3BhY2UoYyk7Cit9CisK
K2Jvb2wgaXNIb3N0Q2hhcmFjdGVyKFVDaGFyIGMpCiB7Ci0gICAgd2hpbGUgKHBvcyA8IGVuZCkg
ewotICAgICAgICBpZiAoKnBvcysrID09IGRlbGltaXRlcikKLSAgICAgICAgICAgIHJldHVybjsK
KyAgICByZXR1cm4gaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09ICctJzsKK30KKworYm9v
bCBpc1NjaGVtZUNvbnRpbnVhdGlvbkNoYXJhY3RlcihVQ2hhciBjKQoreworICAgIHJldHVybiBp
c0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IGMgPT0gJysnIHx8IGMgPT0gJy0nIHx8IGMgPT0gJy4n
OworfQorCit9IC8vIG5hbWVzcGFjZQorCitzdGF0aWMgYm9vbCBza2lwRXhhY3RseShjb25zdCBV
Q2hhciomIHBvc2l0aW9uLCBjb25zdCBVQ2hhciogZW5kLCBVQ2hhciBkZWxpbWl0ZXIpCit7Cisg
ICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICpwb3NpdGlvbiA9PSBkZWxpbWl0ZXIpIHsKKyAgICAg
ICAgKytwb3NpdGlvbjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgIHJldHVybiBm
YWxzZTsKIH0KIAotY2xhc3MgQ1NQRGlyZWN0aXZlIHsKK3RlbXBsYXRlPGJvb2wgY2hhcmFjdGVy
UHJlZGljYXRlKFVDaGFyKT4KK3N0YXRpYyBib29sIHNraXBFeGFjdGx5KGNvbnN0IFVDaGFyKiYg
cG9zaXRpb24sIGNvbnN0IFVDaGFyKiBlbmQpCit7CisgICAgaWYgKHBvc2l0aW9uIDwgZW5kICYm
IGNoYXJhY3RlclByZWRpY2F0ZSgqcG9zaXRpb24pKSB7CisgICAgICAgICsrcG9zaXRpb247Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRp
YyB2b2lkIHNraXBVdGlsKGNvbnN0IFVDaGFyKiYgcG9zaXRpb24sIGNvbnN0IFVDaGFyKiBlbmQs
IFVDaGFyIGRlbGltaXRlcikKK3sKKyAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0
aW9uICE9IGRlbGltaXRlcikKKyAgICAgICAgKytwb3NpdGlvbjsKK30KKwordGVtcGxhdGU8Ym9v
bCBjaGFyYWN0ZXJQcmVkaWNhdGUoVUNoYXIpPgorc3RhdGljIHZvaWQgc2tpcFdoaWxlKGNvbnN0
IFVDaGFyKiYgcG9zaXRpb24sIGNvbnN0IFVDaGFyKiBlbmQpCit7CisgICAgd2hpbGUgKHBvc2l0
aW9uIDwgZW5kICYmIGNoYXJhY3RlclByZWRpY2F0ZSgqcG9zaXRpb24pKQorICAgICAgICArK3Bv
c2l0aW9uOworfQorCitjbGFzcyBDU1BTb3VyY2UgewogcHVibGljOgotICAgIGV4cGxpY2l0IENT
UERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICA6IG1fdmFsdWUodmFsdWUp
CisgICAgQ1NQU291cmNlKGNvbnN0IFN0cmluZyYgc2NoZW1lLCBjb25zdCBTdHJpbmcmIGhvc3Qs
IGludCBwb3J0LCBib29sIGhvc3RIYXNXaWxkY2FyZCwgYm9vbCBwb3J0SGFzV2lsZGNhcmQpCisg
ICAgICAgIDogbV9zY2hlbWUoc2NoZW1lKQorICAgICAgICAsIG1faG9zdChob3N0KQorICAgICAg
ICAsIG1fcG9ydChwb3J0KQorICAgICAgICAsIG1faG9zdEhhc1dpbGRjYXJkKGhvc3RIYXNXaWxk
Y2FyZCkKKyAgICAgICAgLCBtX3BvcnRIYXNXaWxkY2FyZChwb3J0SGFzV2lsZGNhcmQpCiAgICAg
ewogICAgIH0KIAotICAgIGJvb2wgYWxsb3dzKGNvbnN0IEtVUkwmKQorICAgIGJvb2wgbWF0Y2hl
cyhjb25zdCBLVVJMJiB1cmwpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAoIXNjaGVtZU1hdGNo
ZXModXJsKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGlzU2NoZW1l
T25seSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBob3N0TWF0
Y2hlcyh1cmwpICYmIHBvcnRNYXRjaGVzKHVybCk7CisgICAgfQorCitwcml2YXRlOgorICAgIGJv
b2wgc2NoZW1lTWF0Y2hlcyhjb25zdCBLVVJMJiB1cmwpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UodXJsLnByb3RvY29sKCksIG1fc2NoZW1lKTsKKyAgICB9
CisKKyAgICBib29sIGhvc3RNYXRjaGVzKGNvbnN0IEtVUkwmIHVybCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChtX2hvc3RIYXNXaWxkY2FyZCkKKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVk
KCk7CisKKyAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKHVybC5ob3N0KCksIG1faG9z
dCk7CisgICAgfQorCisgICAgYm9vbCBwb3J0TWF0Y2hlcyhjb25zdCBLVVJMJiB1cmwpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAobV9wb3J0SGFzV2lsZGNhcmQpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgICAgICAvLyBGSVhNRTogSGFuZGxlIGV4cGxpY2l0IGRlZmF1bHQgcG9y
dHMgY29ycmVjdGx5LgorICAgICAgICByZXR1cm4gdXJsLnBvcnQoKSA9PSBtX3BvcnQ7CisgICAg
fQorCisgICAgYm9vbCBpc1NjaGVtZU9ubHkoKSBjb25zdCB7IHJldHVybiBtX2hvc3QuaXNFbXB0
eSgpOyB9CisKKyAgICBTdHJpbmcgbV9zY2hlbWU7CisgICAgU3RyaW5nIG1faG9zdDsKKyAgICBp
bnQgbV9wb3J0OworCisgICAgYm9vbCBtX2hvc3RIYXNXaWxkY2FyZDsKKyAgICBib29sIG1fcG9y
dEhhc1dpbGRjYXJkOworfTsKKworY2xhc3MgQ1NQU291cmNlTGlzdCB7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgQ1NQU291cmNlTGlzdChTZWN1cml0eU9yaWdpbiogc2VsZik7CisKKyAgICB2b2lk
IHBhcnNlKGNvbnN0IFN0cmluZyYpOworICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBLVVJMJik7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBwYXJzZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFy
KiBlbmQpOworCisgICAgYm9vbCBwYXJzZVNvdXJjZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0
IFVDaGFyKiBlbmQsIFN0cmluZyYgc2NoZW1lLCBTdHJpbmcmIGhvc3QsIGludCYgcG9ydCwgYm9v
bCYgaG9zdEhhc1dpbGRjYXJkLCBib29sJiBwb3J0SGFzV2lsZGNhcmQpOworICAgIGJvb2wgcGFy
c2VTY2hlbWUoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIHNj
aGVtZSk7CisgICAgYm9vbCBwYXJzZUhvc3QoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hh
ciogZW5kLCBTdHJpbmcmIGhvc3QsIGJvb2wmIGhvc3RIYXNXaWxkY2FyZCk7CisgICAgYm9vbCBw
YXJzZVBvcnQoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBpbnQmIHBvcnQs
IGJvb2wmIHBvcnRIYXNXaWxkY2FyZCk7CisKKyAgICB2b2lkIGFkZFNvdXJjZVNlbGYoKTsKKwor
ICAgIFNlY3VyaXR5T3JpZ2luKiBtX3NlbGY7CisgICAgVmVjdG9yPENTUFNvdXJjZT4gbV9saXN0
OworfTsKKworQ1NQU291cmNlTGlzdDo6Q1NQU291cmNlTGlzdChTZWN1cml0eU9yaWdpbiogc2Vs
ZikKKyAgICA6IG1fc2VsZihzZWxmKQoreworfQorCit2b2lkIENTUFNvdXJjZUxpc3Q6OnBhcnNl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgcGFyc2UodmFsdWUuY2hhcmFjdGVycygpLCB2
YWx1ZS5jaGFyYWN0ZXJzKCkgKyB2YWx1ZS5sZW5ndGgoKSk7Cit9CisKK2Jvb2wgQ1NQU291cmNl
TGlzdDo6bWF0Y2hlcyhjb25zdCBLVVJMJiB1cmwpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2xpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fbGlzdFtpXS5tYXRjaGVz
KHVybCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCisvLyBzb3VyY2UtbGlzdCAgICAgICA9ICpXU1AgWyBzb3VyY2UgKiggMSpXU1Agc291
cmNlICkgKldTUCBdCisvLyAgICAgICAgICAgICAgICAgICAvICpXU1AgIidub25lJyIgKldTUAor
Ly8KK3ZvaWQgQ1NQU291cmNlTGlzdDo6cGFyc2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBV
Q2hhciogZW5kKQoreworICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOworCisgICAg
Ym9vbCBpc0ZpcnN0U291cmNlSW5MaXN0ID0gdHJ1ZTsKKyAgICB3aGlsZSAocG9zaXRpb24gPCBl
bmQpIHsKKyAgICAgICAgc2tpcFdoaWxlPGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Cisg
ICAgICAgIGNvbnN0IFVDaGFyKiBiZWdpblNvdXJjZSA9IHBvc2l0aW9uOworICAgICAgICBza2lw
V2hpbGU8aXNTb3VyY2VDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOworCisgICAgICAgIGlmIChp
c0ZpcnN0U291cmNlSW5MaXN0ICYmIGVxdWFsSWdub3JpbmdDYXNlKCInbm9uZSciLCBiZWdpblNv
dXJjZSwgcG9zaXRpb24gLSBiZWdpblNvdXJjZSkpCisgICAgICAgICAgICByZXR1cm47IC8vIFdl
IHJlcHJlc2VudCAnbm9uZScgYXMgYW4gZW1wdHkgbV9saXN0LgorICAgICAgICBpc0ZpcnN0U291
cmNlSW5MaXN0ID0gZmFsc2U7CisKKyAgICAgICAgU3RyaW5nIHNjaGVtZSwgaG9zdDsKKyAgICAg
ICAgaW50IHBvcnQgPSAwOworICAgICAgICBib29sIGhvc3RIYXNXaWxkY2FyZCA9IGZhbHNlOwor
ICAgICAgICBib29sIHBvcnRIYXNXaWxkY2FyZCA9IGZhbHNlOworCisgICAgICAgIGlmIChwYXJz
ZVNvdXJjZShiZWdpblNvdXJjZSwgcG9zaXRpb24sIHNjaGVtZSwgaG9zdCwgcG9ydCwgaG9zdEhh
c1dpbGRjYXJkLCBwb3J0SGFzV2lsZGNhcmQpKSB7CisgICAgICAgICAgICBpZiAoc2NoZW1lLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICBzY2hlbWUgPSBtX3NlbGYtPnByb3RvY29sKCk7Cisg
ICAgICAgICAgICBtX2xpc3QuYXBwZW5kKENTUFNvdXJjZShzY2hlbWUsIGhvc3QsIHBvcnQsIGhv
c3RIYXNXaWxkY2FyZCwgcG9ydEhhc1dpbGRjYXJkKSk7CisgICAgICAgIH0KKworICAgICAgICBB
U1NFUlQocG9zaXRpb24gPT0gZW5kIHx8IGlzQVNDSUlTcGFjZSgqcG9zaXRpb24pKTsKKyAgICAg
fQorfQorCisvLyBzb3VyY2UgICAgICAgICAgICA9IHNjaGVtZSAiOiIKKy8vICAgICAgICAgICAg
ICAgICAgIC8gKCBbIHNjaGVtZSAiOi8vIiBdIGhvc3QgWyBwb3J0IF0gKQorLy8gICAgICAgICAg
ICAgICAgICAgLyAiJ3NlbGYnIgorLy8KK2Jvb2wgQ1NQU291cmNlTGlzdDo6cGFyc2VTb3VyY2Uo
Y29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTdHJpbmcmIHNjaGVtZSwgU3RyaW5nJiBob3N0LCBpbnQmIHBvcnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIGhvc3RIYXNXaWxkY2FyZCwgYm9v
bCYgcG9ydEhhc1dpbGRjYXJkKQoreworICAgIGlmIChiZWdpbiA9PSBlbmQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSgiJ3NlbGYnIiwgYmVnaW4s
IGVuZCAtIGJlZ2luKSkgeworICAgICAgICBhZGRTb3VyY2VTZWxmKCk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKKyAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKKwor
ICAgIGNvbnN0IFVDaGFyKiBiZWdpbkhvc3QgPSBiZWdpbjsKKyAgICBza2lwVXRpbChwb3NpdGlv
biwgZW5kLCAnOicpOworCisgICAgaWYgKHBvc2l0aW9uID09IGVuZCkgeworICAgICAgICAvLyBU
aGlzIG11c3QgYmUgYSBob3N0LW9ubHkgc291cmNlLgorICAgICAgICBpZiAoIXBhcnNlSG9zdChi
ZWdpbkhvc3QsIHBvc2l0aW9uLCBob3N0LCBob3N0SGFzV2lsZGNhcmQpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoZW5k
IC0gcG9zaXRpb24gPT0gMSkgeworICAgICAgICBBU1NFUlQoKnBvc2l0aW9uID09ICc6Jyk7Cisg
ICAgICAgIC8vIFRoaXMgbXVzdCBiZSBhIHNjaGVtZS1vbmx5IHNvdXJjZS4KKyAgICAgICAgaWYg
KCFwYXJzZVNjaGVtZShiZWdpbiwgcG9zaXRpb24sIHNjaGVtZSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEFTU0VSVChlbmQg
LSBwb3NpdGlvbiA+PSAyKTsKKyAgICBpZiAocG9zaXRpb25bMV0gPT0gJy8nKSB7CisgICAgICAg
IGlmICghcGFyc2VTY2hlbWUoYmVnaW4sIHBvc2l0aW9uLCBzY2hlbWUpCisgICAgICAgICAgICB8
fCAhc2tpcEV4YWN0bHkocG9zaXRpb24sIGVuZCwgJzonKQorICAgICAgICAgICAgfHwgIXNraXBF
eGFjdGx5KHBvc2l0aW9uLCBlbmQsICcvJykKKyAgICAgICAgICAgIHx8ICFza2lwRXhhY3RseShw
b3NpdGlvbiwgZW5kLCAnLycpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBi
ZWdpbkhvc3QgPSBwb3NpdGlvbjsKKyAgICAgICAgc2tpcFV0aWwocG9zaXRpb24sIGVuZCwgJzon
KTsKKyAgICB9CisKKyAgICBpZiAocG9zaXRpb24gPT0gYmVnaW5Ib3N0KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoIXBhcnNlSG9zdChiZWdpbkhvc3QsIHBvc2l0aW9uLCBob3N0
LCBob3N0SGFzV2lsZGNhcmQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAocG9z
aXRpb24gPT0gZW5kKSB7CisgICAgICAgIHBvcnQgPSAwOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBpZiAoIXNraXBFeGFjdGx5KHBvc2l0aW9uLCBlbmQsICc6JykpCisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgaWYgKCFwYXJzZVBvcnQocG9zaXRpb24s
IGVuZCwgcG9ydCwgcG9ydEhhc1dpbGRjYXJkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKy8vICAgICAgICAgICAgICAgICAgICAgOyA8c2NoZW1lPiBw
cm9kdWN0aW9uIGZyb20gUkZDIDM5ODYKKy8vIHNjaGVtZSAgICAgID0gQUxQSEEgKiggQUxQSEEg
LyBESUdJVCAvICIrIiAvICItIiAvICIuIiApCisvLworYm9vbCBDU1BTb3VyY2VMaXN0OjpwYXJz
ZVNjaGVtZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgc2No
ZW1lKQoreworICAgIEFTU0VSVChiZWdpbiA8PSBlbmQpOworICAgIEFTU0VSVChzY2hlbWUuaXNF
bXB0eSgpKTsKKworICAgIGlmIChiZWdpbiA9PSBlbmQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOworCisgICAgaWYgKCFza2lwRXhh
Y3RseTxpc0FTQ0lJQWxwaGE+KHBvc2l0aW9uLCBlbmQpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBza2lwV2hpbGU8aXNTY2hlbWVDb250aW51YXRpb25DaGFyYWN0ZXI+KHBvc2l0aW9u
LCBlbmQpOworCisgICAgaWYgKHBvc2l0aW9uICE9IGVuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgc2NoZW1lID0gU3RyaW5nKGJlZ2luLCBlbmQgLSBiZWdpbik7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKKy8vIGhvc3QgICAgICAgICAgICAgID0gWyAiKi4iIF0gMSpob3N0LWNoYXIg
KiggIi4iIDEqaG9zdC1jaGFyICkKKy8vICAgICAgICAgICAgICAgICAgIC8gIioiCisvLyBob3N0
LWNoYXIgICAgICAgICA9IEFMUEhBIC8gRElHSVQgLyAiLSIKKy8vCitib29sIENTUFNvdXJjZUxp
c3Q6OnBhcnNlSG9zdChjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmlu
ZyYgaG9zdCwgYm9vbCYgaG9zdEhhc1dpbGRjYXJkKQoreworICAgIEFTU0VSVChiZWdpbiA8PSBl
bmQpOworICAgIEFTU0VSVChob3N0LmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKCFob3N0SGFzV2ls
ZGNhcmQpOworCisgICAgaWYgKGJlZ2luID09IGVuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47CisKKyAgICBpZiAoc2tpcEV4YWN0
bHkocG9zaXRpb24sIGVuZCwgJyonKSkgeworICAgICAgICBob3N0SGFzV2lsZGNhcmQgPSB0cnVl
OworCisgICAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgICAgICBpZiAoIXNraXBFeGFjdGx5KHBvc2l0aW9uLCBlbmQsICcuJykpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY29uc3QgVUNoYXIqIGhvc3RCZWdp
biA9IHBvc2l0aW9uOworCisgICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7CisgICAgICAgIGlm
ICghc2tpcEV4YWN0bHk8aXNIb3N0Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBza2lwV2hpbGU8aXNIb3N0Q2hhcmFjdGVyPihw
b3NpdGlvbiwgZW5kKTsKKworICAgICAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgIXNraXBFeGFj
dGx5KHBvc2l0aW9uLCBlbmQsICcuJykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgQVNTRVJUKHBvc2l0aW9uID09IGVuZCk7CisgICAgaG9zdCA9IFN0cmluZyhob3N0
QmVnaW4sIGVuZCAtIGhvc3RCZWdpbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIHBvcnQg
ICAgICAgICAgICAgID0gIjoiICggMSpESUdJVCAvICIqIiApCisvLworYm9vbCBDU1BTb3VyY2VM
aXN0OjpwYXJzZVBvcnQoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBpbnQm
IHBvcnQsIGJvb2wmIHBvcnRIYXNXaWxkY2FyZCkKK3sKKyAgICBBU1NFUlQoYmVnaW4gPD0gZW5k
KTsKKyAgICBBU1NFUlQoIXBvcnQpOworICAgIEFTU0VSVCghcG9ydEhhc1dpbGRjYXJkKTsKKwor
ICAgIGlmIChiZWdpbiA9PSBlbmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChl
bmQgLSBiZWdpbiA9PSAxICYmICpiZWdpbiA9PSAnKicpIHsKKyAgICAgICAgcG9ydCA9IDA7Cisg
ICAgICAgIHBvcnRIYXNXaWxkY2FyZCA9IHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOworICAgIHNraXBXaGlsZTxp
c0FTQ0lJRGlnaXQ+KHBvc2l0aW9uLCBlbmQpOworCisgICAgaWYgKHBvc2l0aW9uICE9IGVuZCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBvazsKKyAgICBwb3J0ID0gY2hhcmFj
dGVyc1RvSW50U3RyaWN0KGJlZ2luLCBlbmQgLSBiZWdpbiwgJm9rKTsKKyAgICByZXR1cm4gb2s7
Cit9CisKK3ZvaWQgQ1NQU291cmNlTGlzdDo6YWRkU291cmNlU2VsZigpCit7CisgICAgLy8gRklY
TUU6IEluaGVyaXQgdGhlIHNjaGVtZSwgaG9zdCwgYW5kIHBvcnQgZnJvbSB0aGUgY3VycmVudCBV
UkwuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworY2xhc3MgQ1NQRGlyZWN0aXZlIHsKK3B1
YmxpYzoKKyAgICBDU1BEaXJlY3RpdmUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgU2VjdXJpdHlPcmln
aW4qIHNlbGYpCisgICAgICAgIDogbV9zb3VyY2VMaXN0KHNlbGYpCisgICAgeworICAgICAgICBt
X3NvdXJjZUxpc3QucGFyc2UodmFsdWUpOworICAgIH0KKworICAgIGJvb2wgYWxsb3dzKGNvbnN0
IEtVUkwmIHVybCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NvdXJjZUxpc3QubWF0Y2hlcyh1
cmwpOworICAgIH0KKwogcHJpdmF0ZToKLSAgICBTdHJpbmcgbV92YWx1ZTsKKyAgICBDU1BTb3Vy
Y2VMaXN0IG1fc291cmNlTGlzdDsKIH07CiAKLUNvbnRlbnRTZWN1cml0eVBvbGljeTo6Q29udGVu
dFNlY3VyaXR5UG9saWN5KCkKK0NvbnRlbnRTZWN1cml0eVBvbGljeTo6Q29udGVudFNlY3VyaXR5
UG9saWN5KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiAgICAgOiBtX2hhdmVQb2xpY3koZmFsc2Up
CisgICAgLCBtX3NlbGYob3JpZ2luKQogewogfQogCkBAIC05MSw2ICs0MzUsOSBAQCBib29sIENv
bnRlbnRTZWN1cml0eVBvbGljeTo6Y2FuTG9hZEV4dGVyCiAgICAgcmV0dXJuICFtX3NjcmlwdFNy
YyB8fCBtX3NjcmlwdFNyYy0+YWxsb3dzKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpKTsKIH0K
IAorLy8gcG9saWN5ICAgICAgICAgICAgPSBkaXJlY3RpdmUtbGlzdAorLy8gZGlyZWN0aXZlLWxp
c3QgICAgPSBbIGRpcmVjdGl2ZSAqKCAiOyIgWyBkaXJlY3RpdmUgXSApIF0KKy8vCiB2b2lkIENv
bnRlbnRTZWN1cml0eVBvbGljeTo6cGFyc2UoY29uc3QgU3RyaW5nJiBwb2xpY3kpCiB7CiAgICAg
QVNTRVJUKCFtX2hhdmVQb2xpY3kpOwpAQCAtOTgsODQgKzQ0NSw3NSBAQCB2b2lkIENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6cGFyc2UoY29uc3QgCiAgICAgaWYgKHBvbGljeS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IFVDaGFyKiBwb3MgPSBwb2xpY3kuY2hhcmFjdGVy
cygpOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwb3MgKyBwb2xpY3kubGVuZ3RoKCk7CisgICAg
Y29uc3QgVUNoYXIqIHBvc2l0aW9uID0gcG9saWN5LmNoYXJhY3RlcnMoKTsKKyAgICBjb25zdCBV
Q2hhciogZW5kID0gcG9zaXRpb24gKyBwb2xpY3kubGVuZ3RoKCk7CiAKLSAgICB3aGlsZSAocG9z
IDwgZW5kKSB7Ci0gICAgICAgIFZlY3RvcjxVQ2hhciwgMzI+IG5hbWU7Ci0gICAgICAgIFZlY3Rv
cjxVQ2hhciwgNjQ+IHZhbHVlOwotCi0gICAgICAgIGlmICghcGFyc2VEaXJlY3RpdmUocG9zLCBl
bmQsIG5hbWUsIHZhbHVlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAobmFt
ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICB3aGlsZSAocG9zaXRpb24g
PCBlbmQpIHsKKyAgICAgICAgY29uc3QgVUNoYXIqIGRpcmVjdGl2ZUJlZ2luID0gcG9zaXRpb247
CisgICAgICAgIHNraXBVdGlsKHBvc2l0aW9uLCBlbmQsICc7Jyk7CisKKyAgICAgICAgU3RyaW5n
IG5hbWUsIHZhbHVlOworICAgICAgICBpZiAocGFyc2VEaXJlY3RpdmUoZGlyZWN0aXZlQmVnaW4s
IHBvc2l0aW9uLCBuYW1lLCB2YWx1ZSkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbmFtZS5pc0Vt
cHR5KCkpOworICAgICAgICAgICAgYWRkRGlyZWN0aXZlKG5hbWUsIHZhbHVlKTsKKyAgICAgICAg
fQogCi0gICAgICAgIC8vIFdlIHVzZSBhIGNvcHkgaGVyZSBpbnN0ZWFkIG9mIFN0cmluZzo6YWRv
cHQgYmVjYXVzZSB3ZSBleHBlY3QKLSAgICAgICAgLy8gdGhlIG5hbWUgYW5kIHRoZSB2YWx1ZSB0
byBiZSByZWxhdGl2ZWx5IHNob3J0LCBzbyB0aGUgY29weSB3aWxsCi0gICAgICAgIC8vIGJlIGNo
ZWFwZXIgdGhhbiB0aGUgZXh0cmEgbWFsbG9jLgotICAgICAgICBlbWl0RGlyZWN0aXZlKFN0cmlu
ZyhuYW1lKSwgU3RyaW5nKHZhbHVlKSk7CisgICAgICAgIEFTU0VSVChwb3NpdGlvbiA9PSBlbmQg
fHwgKnBvc2l0aW9uID09ICc7Jyk7CisgICAgICAgIHNraXBFeGFjdGx5KHBvc2l0aW9uLCBlbmQs
ICc7Jyk7CiAgICAgfQogfQogCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6cGFyc2VEaXJl
Y3RpdmUoY29uc3QgVUNoYXIqJiBwb3MsIGNvbnN0IFVDaGFyKiBlbmQsIFZlY3RvcjxVQ2hhciwg
MzI+JiBuYW1lLCBWZWN0b3I8VUNoYXIsIDY0PiYgdmFsdWUpCisvLyBkaXJlY3RpdmUgICAgICAg
ICA9ICpXU1AgWyBkaXJlY3RpdmUtbmFtZSBbIFdTUCBkaXJlY3RpdmUtdmFsdWUgXSBdCisvLyBk
aXJlY3RpdmUtbmFtZSAgICA9IDEqKCBBTFBIQSAvIERJR0lUIC8gIi0iICkKKy8vIGRpcmVjdGl2
ZS12YWx1ZSAgID0gKiggV1NQIC8gPFZDSEFSIGV4Y2VwdCAiOyI+ICkKKy8vCitib29sIENvbnRl
bnRTZWN1cml0eVBvbGljeTo6cGFyc2VEaXJlY3RpdmUoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25z
dCBVQ2hhciogZW5kLCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgQVNTRVJU
KHBvcyA8IGVuZCk7CiAgICAgQVNTRVJUKG5hbWUuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQodmFs
dWUuaXNFbXB0eSgpKTsKIAotICAgIHdoaWxlIChwb3MgPCBlbmQgJiYgaXNBU0NJSVNwYWNlKCpw
b3MpKQotICAgICAgICBwb3MrKzsKKyAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsK
KyAgICBza2lwV2hpbGU8aXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKIAotICAgIHdoaWxl
IChwb3MgPCBlbmQpIHsKLSAgICAgICAgVUNoYXIgY3VycmVudENoYXJhY3RlciA9ICpwb3M7Ci0g
ICAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyID09ICc7JykKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBpZiAoaXNBU0NJSVNwYWNlKGN1cnJlbnRDaGFyYWN0ZXIpKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGlmICghaXNEaXJlY3RpdmVOYW1lQ2hhcmFjdGVyKGN1cnJlbnRDaGFy
YWN0ZXIpKSB7Ci0gICAgICAgICAgICBhZHZhbmNlVW50aWwocG9zLCBlbmQsICc7Jyk7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgbmFtZS5hcHBlbmQoY3Vy
cmVudENoYXJhY3Rlcik7Ci0gICAgICAgIHBvcysrOwotICAgIH0KKyAgICBjb25zdCBVQ2hhciog
bmFtZUJlZ2luID0gcG9zaXRpb247CisgICAgc2tpcFdoaWxlPGlzRGlyZWN0aXZlTmFtZUNoYXJh
Y3Rlcj4ocG9zaXRpb24sIGVuZCk7CisKKyAgICAvLyBUaGUgZGlyZWN0aXZlLW5hbWUgbXVzdCBi
ZSBub24tZW1wdHkuCisgICAgaWYgKG5hbWVCZWdpbiA9PSBwb3NpdGlvbikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgd2hpbGUgKHBvcyA8IGVuZCAmJiBpc0FTQ0lJU3BhY2UoKnBvcykp
Ci0gICAgICAgIHBvcysrOworICAgIG5hbWUgPSBTdHJpbmcobmFtZUJlZ2luLCBwb3NpdGlvbiAt
IG5hbWVCZWdpbik7CiAKLSAgICBpZiAocG9zIDwgZW5kICYmICpwb3MgPT0gJzsnKSB7Ci0gICAg
ICAgIHBvcysrOworICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCiAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KIAotICAgIHdoaWxlIChwb3MgPCBlbmQpIHsKLSAgICAgICAgVUNoYXIgY3VycmVu
dENoYXJhY3RlciA9ICpwb3M7Ci0gICAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyID09ICc7JykK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoIWlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0
ZXIoY3VycmVudENoYXJhY3RlcikpIHsKLSAgICAgICAgICAgIGFkdmFuY2VVbnRpbChwb3MsIGVu
ZCwgJzsnKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICB2
YWx1ZS5hcHBlbmQoY3VycmVudENoYXJhY3Rlcik7Ci0gICAgICAgIHBvcysrOwotICAgIH0KKyAg
ICBpZiAoIXNraXBFeGFjdGx5PGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmIChwb3MgPCBlbmQgJiYgKnBvcyA9PSAnOycpIHsKLSAg
ICAgICAgcG9zKys7CisgICAgc2tpcFdoaWxlPGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7
CisKKyAgICBjb25zdCBVQ2hhciogdmFsdWVCZWdpbiA9IHBvc2l0aW9uOworICAgIHNraXBXaGls
ZTxpc0RpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKworICAgIGlmIChw
b3NpdGlvbiAhPSBlbmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRoZSBkaXJl
Y3RpdmUtdmFsdWUgbWF5IGJlIGVtcHR5LgorICAgIGlmICh2YWx1ZUJlZ2luID09IHBvc2l0aW9u
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CiAKKyAgICB2YWx1ZSA9IFN0cmluZyh2YWx1
ZUJlZ2luLCBwb3NpdGlvbiAtIHZhbHVlQmVnaW4pOwogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeTo6ZW1pdERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWRk
RGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgc2NyaXB0U3JjLCAoInNjcmlwdC1zcmMiKSk7
CiAKICAgICBBU1NFUlQoIW5hbWUuaXNFbXB0eSgpKTsKIAogICAgIGlmICghbV9zY3JpcHRTcmMg
JiYgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgc2NyaXB0U3JjKSkKLSAgICAgICAgbV9zY3JpcHRT
cmMgPSBhZG9wdFB0cihuZXcgQ1NQRGlyZWN0aXZlKHZhbHVlKSk7CisgICAgICAgIG1fc2NyaXB0
U3JjID0gYWRvcHRQdHIobmV3IENTUERpcmVjdGl2ZSh2YWx1ZSwgbV9zZWxmLmdldCgpKSk7CiB9
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGVudFNlY3VyaXR5UG9saWN5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZW50U2VjdXJpdHlQb2xpY3ku
aAkocmV2aXNpb24gODE4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRlbnRTZWN1cml0
eVBvbGljeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMCArMzIsMTQgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgQ1NQRGlyZWN0aXZlOworY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAK
IGNsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeSA6IHB1YmxpYyBSZWZDb3VudGVkPENvbnRlbnRT
ZWN1cml0eVBvbGljeT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvbnRlbnRT
ZWN1cml0eVBvbGljeT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENvbnRlbnRTZWN1
cml0eVBvbGljeSk7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb250ZW50U2VjdXJpdHlQb2xp
Y3k+IGNyZWF0ZShTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gMCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ29udGVudFNlY3VyaXR5UG9saWN5KG9yaWdpbikpOworICAgIH0K
ICAgICB+Q29udGVudFNlY3VyaXR5UG9saWN5KCk7CiAKICAgICB2b2lkIGRpZFJlY2VpdmVIZWFk
ZXIoY29uc3QgU3RyaW5nJik7CkBAIC00NSwxMyArNDksMTQgQEAgcHVibGljOgogICAgIGJvb2wg
Y2FuTG9hZEV4dGVybmFsU2NyaXB0RnJvbVNyYyhjb25zdCBTdHJpbmcmIHVybCkgY29uc3Q7CiAK
IHByaXZhdGU6Ci0gICAgQ29udGVudFNlY3VyaXR5UG9saWN5KCk7CisgICAgZXhwbGljaXQgQ29u
dGVudFNlY3VyaXR5UG9saWN5KFNlY3VyaXR5T3JpZ2luKik7CiAKICAgICB2b2lkIHBhcnNlKGNv
bnN0IFN0cmluZyYpOwotICAgIGJvb2wgcGFyc2VEaXJlY3RpdmUoY29uc3QgVUNoYXIqJiBwb3Ms
IGNvbnN0IFVDaGFyKiBlbmQsIFZlY3RvcjxVQ2hhciwgMzI+JiBuYW1lLCBWZWN0b3I8VUNoYXIs
IDY0PiYgdmFsdWUpOwotICAgIHZvaWQgZW1pdERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIGJvb2wgcGFyc2VEaXJlY3RpdmUoY29uc3QgVUNo
YXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgdmFsdWUp
OworICAgIHZvaWQgYWRkRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSk7CiAKICAgICBib29sIG1faGF2ZVBvbGljeTsKKyAgICBSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IG1fc2VsZjsKICAgICBPd25QdHI8Q1NQRGlyZWN0aXZlPiBtX3NjcmlwdFNyYzsKIH07
CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxOTM5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDMtMjQgIEFkYW0gQmFydGggIDxh
YmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUZWFjaCBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBob3cgdG8gcGFyc2Ugc291
cmNlLWxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU0Nzk5CisKKyAgICAgICAgVGVzdCBhIHZhcmlldHkgb2Ygc291cmNlLWxpc3QgcGFyc2luZyBj
YXNlcy4gIFRoZXJlJ3MgYSBidW5jaCBtb3JlCisgICAgICAgIGNhc2VzIHdlIGNvdWxkIGJlIHRl
c3RpbmcuICBXZSdsbCBhZGQgbW9yZSBvdmVyIHRpbWUuCisKKyAgICAgICAgKiBodHRwL3Rlc3Rz
L3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9zb3VyY2UtbGlzdC1wYXJzaW5nLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2Vj
dXJpdHlQb2xpY3kvc291cmNlLWxpc3QtcGFyc2luZy5odG1sOiBBZGRlZC4KKwogMjAxMS0wMy0y
NCAgSWx5YSBTaGVybWFuICA8aXNoZXJtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEFkYW0gUm9iZW4uCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L2NvbnRlbnRTZWN1cml0eVBvbGljeS9zb3VyY2UtbGlzdC1wYXJzaW5nLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1
cml0eVBvbGljeS9zb3VyY2UtbGlzdC1wYXJzaW5nLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5
L3NvdXJjZS1saXN0LXBhcnNpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDUzIEBACitOb25lIG9mIHRoZXNlIHNjcmlwdHMgc2hvdWxkIGV4ZWN1dGUgZXZlbiB0aG91Z2gg
dGhlcmUgYXJlIHBhcnNlIGVycm9ycyBpbiB0aGUgcG9saWN5LgorCisgICAgICAgICAKKworLS0t
LS0tLS0KK0ZyYW1lOiAnPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTAtLT4tLT4nCistLS0tLS0t
LQorUEFTUworCistLS0tLS0tLQorRnJhbWU6ICc8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMS0t
Pi0tPicKKy0tLS0tLS0tCitQQVNTCisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1mcmFtZVBhdGgg
Ly88IS0tZnJhbWUyLS0+LS0+JworLS0tLS0tLS0KK1BBU1MKKworLS0tLS0tLS0KK0ZyYW1lOiAn
PCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTMtLT4tLT4nCistLS0tLS0tLQorUEFTUworCistLS0t
LS0tLQorRnJhbWU6ICc8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lNC0tPi0tPicKKy0tLS0tLS0t
CitQQVNTCisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWU1LS0+
LS0+JworLS0tLS0tLS0KK1BBU1MKKworLS0tLS0tLS0KK0ZyYW1lOiAnPCEtLWZyYW1lUGF0aCAv
LzwhLS1mcmFtZTYtLT4tLT4nCistLS0tLS0tLQorUEFTUworCistLS0tLS0tLQorRnJhbWU6ICc8
IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lNy0tPi0tPicKKy0tLS0tLS0tCitQQVNTCisKKy0tLS0t
LS0tCitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWU4LS0+LS0+JworLS0tLS0tLS0K
K1BBU1MKKworLS0tLS0tLS0KK0ZyYW1lOiAnPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTktLT4t
LT4nCistLS0tLS0tLQorUEFTUwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvc291cmNlLWxpc3QtcGFyc2luZy5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9s
aWN5L3NvdXJjZS1saXN0LXBhcnNpbmcuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3NvdXJjZS1saXN0LXBh
cnNpbmcuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQ2hpbGRGcmFtZXNBc1RleHQoKTsKK30KKzwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+CisgIDxwPgorICAgIE5vbmUgb2YgdGhlc2Ugc2NyaXB0cyBzaG91bGQgZXhlY3V0
ZSBldmVuIHRob3VnaCB0aGVyZSBhcmUgcGFyc2UgZXJyb3JzIGluIHRoZSBwb2xpY3kuCisgIDwv
cD4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0ZXN0KHNob3VsZFJ1biwgcG9saWN5KSB7CisgICAgZG9j
dW1lbnQud3JpdGUoJzxpZnJhbWUgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjgwMDAvc2VjdXJpdHkv
Y29udGVudFNlY3VyaXR5UG9saWN5L3Jlc291cmNlcy9lY2hvLXNjcmlwdC1zcmMucGw/c2hvdWxk
X3J1bj0nKTsKKyAgICBkb2N1bWVudC53cml0ZShzaG91bGRSdW4pOworICAgIGRvY3VtZW50Lndy
aXRlKCcmcT1odHRwOi8vMTI3LjAuMC4xOjgwMDAvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9s
aWN5L3Jlc291cmNlcy9zY3JpcHQuanMmY3NwPScpOworICAgIGRvY3VtZW50LndyaXRlKGVzY2Fw
ZShwb2xpY3kpKTsKKyAgICBkb2N1bWVudC53cml0ZSgnIj48L2lmcmFtZT5cbicpOworfQorCisK
K3Rlc3QoJ3llcycsICdzY3JpcHQtc3JjIDEyNy4wLjAuMTo4MDAwJyk7Cit0ZXN0KCd5ZXMnLCAn
c2NyaXB0LXNyYyBodHRwOi8vMTI3LjAuMC4xOjgwMDAnKTsKK3Rlc3QoJ3llcycsICdzY3JpcHQt
c3JjXHRodHRwOi8vMTI3LjAuMC4xOjgwMDAnKTsKK3Rlc3QoJ3llcycsICdzY3JpcHQtc3JjIGh0
dHA6Ly8xMjcuMC4wLjE6ODAwMCAgIFx0ICcpOwordGVzdCgneWVzJywgJ3NjcmlwdC1zcmMgaHR0
cDonKTsKK3Rlc3QoJ25vJywgICdzY3JpcHQtc3JjIGh0dHBzOicpOwordGVzdCgnbm8nLCAgJ3Nj
cmlwdC1zcmMgaHR0cHM6ICB0YWNvJyk7Cit0ZXN0KCd5ZXMnLCAnc2NyaXB0LXNyYyBodHRwczog
IFx4MDgnKTsKK3Rlc3QoJ25vJywgICdzY3JpcHQtc3JjIFwnbm9uZVwnJyk7Cit0ZXN0KCd5ZXMn
LCAnXHRcdFx0c2NyaXB0LXNyYyAgICBodHRwOi8vMTI3LjAuMC4xOjgwMDAgIFx0XHQgIGh0dHBz
OicpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87007</attachid>
            <date>2011-03-25 21:53:32 -0700</date>
            <delta_ts>2011-03-25 22:32:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54799-20110325215331.patch</filename>
            <type>text/plain</type>
            <size>27808</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxOTM5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzcgQEAKKzIwMTEtMDMtMjQgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUZWFjaCBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBob3cgdG8gcGFy
c2Ugc291cmNlLWxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU0Nzk5CisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBsYXJnZXIgdGhhbiBJIHdvdWxk
IGxpa2UsIGJ1dCBJIHdhc24ndCBzdXJlIGhvdyB0byBtYWtlCisgICAgICAgIGl0IGFueSBzbWFs
bGVyIHdoaWxlIHN0aWxsIGJlaW5nIHJlYXNvbmFibHkgdGVzdGFibGUuICBJJ3ZlIGxlZnQgb3V0
CisgICAgICAgIHNvbWUgZmVhdHVyZXMgKHN1Y2ggYXMgaG9zdCB3aWxkY2FyZGluZyBhbmQgJ3Nl
bGYnKSBzbyBJIGNhbiBhZGQgdGhlbQorICAgICAgICBpbiBsYXRlciBwYXRjaGVzIHdpdGggdGVz
dHMuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQ
b2xpY3kvc291cmNlLWxpc3QtcGFyc2luZy5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9TY3Jp
cHRDb250cm9sbGVyQmFzZS5jcHA6CisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuY3BwOgor
ICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgICog
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgICAgIC0gQWRkIGluY2x1ZGUgZXhwbGlj
aXRseSBub3cgdGhhdCB3ZSdyZSBub3Qgc3BhbW1pbmcgdGhlIGluY2x1ZGUKKyAgICAgICAgICAg
ICAgZXZlcnl3aGVyZS4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OmluaXRTZWN1cml0eUNvbnRleHQpOgorICAgICAgICAgICAgLSBXZSBu
ZWVkIHRvIHBhc3MgdGhlIFNlY3VyaXR5T3JpZ2luIG9iamVjdCB0bworICAgICAgICAgICAgICBD
b250ZW50U2VjdXJpdHlQb2xpY3kgc28gdGhhdCBpdCBjYW4gcmVzb2x2ZSBpbXBsaWNpdCBwYXJ0
cyBvZgorICAgICAgICAgICAgICBzb3VyY2UgcGF0dGVybnMsIHN1Y2ggYXMgdGhlIHNjaGVtZS4K
KyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgICAgIC0gRm9yd2FyZCBkZWNsYXJl
IENvbnRlbnRTZWN1cml0eVBvbGljeSByYXRoZXIgdGhhbiBpbmNsdWRpbmcgdGhlCisgICAgICAg
ICAgICAgIGhlYWRlci4gIFRlY2huaWNhbGx5IHRoaXMgY291bGQgYmUgYSBzZXBhcmF0ZSBjaGFu
Z2UsIGJ1dCBJIHdhcworICAgICAgICAgICAgICBnZXR0aW5nIGFubm95ZWQgYXQgdGhlIHdvcmxk
IHJlLWJ1aWxkcy4KKyAgICAgICAgKiBwYWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpza2lwRXhhY3RseSk6CisgICAgICAgIChXZWJDb3JlOjpza2lwVXRp
bCk6CisgICAgICAgIChXZWJDb3JlOjpza2lwV2hpbGUpOgorICAgICAgICAgICAgLSBDbGVhbiB1
cCB0aGVzZSBwYXJzZXIgaGVscGVyIGZ1bmN0aW9ucy4gIFdlIG1pZ2h0IGNvbnNpZGVyIG1vdmlu
ZworICAgICAgICAgICAgICB0aGVtIHRvIGEgbW9yZSBnZW5lcmFsIGxvY2F0aW9uLiAgVGhleSdy
ZSB2ZXJ5IGhlbHBmdWwgZm9yCisgICAgICAgICAgICAgIHdyaXRpbmcgc2VjdXJlIEhUVFAgaGVh
ZGVyIHBhcnNlcnMuCisgICAgICAgIChXZWJDb3JlOjpDU1BTb3VyY2U6OkNTUFNvdXJjZSk6Cisg
ICAgICAgICAgICAtIE5ldyBjbGFzcyB0byByZXByZXNlbnQgb25lIHNvdXJjZSBpbiBhIHNvdXJj
ZS1saXN0LgorICAgICAgICAoV2ViQ29yZTo6Q1NQU291cmNlOjptYXRjaGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTUFNvdXJjZTo6c2NoZW1lTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1BTb3VyY2U6Omhvc3RNYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTUFNvdXJjZTo6cG9y
dE1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NQU291cmNlOjppc1NjaGVtZU9ubHkpOgor
ICAgICAgICAgICAgLSBDdXJyZW50bHkgd2UgcmVwcmVzZW50IHNjaGVtZS1vbmx5IHNvdXJjZXMg
dXNpbmcgd2l0aCBhbiBlbXB0eQorICAgICAgICAgICAgICBtX2hvc3QuICBBbm90aGVyIGFwcHJv
YWNoIEkgY29uc2lkZXJlZCB3YXMgdXNpbmcgYW5vdGhlciBib29sLAorICAgICAgICAgICAgICBi
dXQgdGhhdCBzZWVtZWQgc2xpZ2hseSBtZXNzaWVyLgorICAgICAgICAoV2ViQ29yZTo6Q1NQU291
cmNlTGlzdDo6Q1NQU291cmNlTGlzdCk6CisgICAgICAgICAgICAtIENTUFNvdXJjZUxpc3QgZG9l
c24ndCBuZWVkIHRvIHJlZiBTZWN1cml0eU9yaWdpbiBiZWNhdXNlCisgICAgICAgICAgICAgIENT
UFNvdXJjZUxpc3QgaXMgb3duZWQgYnkgQ29udGVudFNlY3VyaXR5UG9saWN5LCB3aGljaCBob2xk
cyBhCisgICAgICAgICAgICAgIHJlZi4KKyAgICAgICAgKFdlYkNvcmU6OkNTUFNvdXJjZUxpc3Q6
OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTUFNvdXJjZUxpc3Q6Om1hdGNoZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NQU291cmNlTGlzdDo6cGFyc2VTb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NQU291cmNlTGlzdDo6cGFyc2VTY2hlbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NQ
U291cmNlTGlzdDo6cGFyc2VIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTUFNvdXJjZUxpc3Q6
OnBhcnNlUG9ydCk6CisgICAgICAgICAgICAtIEEgYmFzaWMgInNlZ21lbnQgYW5kIHJlY3Vyc2Ui
IHBhcnNlci4gIFRoaXMgcGFyc2VyIGNhdXNlcyB1cyB0bworICAgICAgICAgICAgICB0YWtlIG1v
cmUgYnJhbmNoZXMgdGhhbiB3ZSBuZWVkLCBidXQgSSBkb24ndCB0aGluayB3ZSBuZWVkIHRvCisg
ICAgICAgICAgICAgIHNxdWVlemUgZXZlcnkgbGFzdCBvdWNoIG9mIHBlcmZvcm1hbmNlIG91dCBv
ZiB0aGlzIHBhcnNlci4gIFRoaXMKKyAgICAgICAgICAgICAgYXBwcm9hY2ggaXMgbW9yZSBzaW1w
bGUgdGhhbiBzb21lIG9mIHRoZSBvdGhlciBhcHByb2FjaGVzIEkKKyAgICAgICAgICAgICAgdHJp
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1BTb3VyY2VMaXN0OjphZGRTb3VyY2VTZWxmKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZTo6Q1NQRGlyZWN0aXZlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTUERpcmVjdGl2ZTo6YWxsb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRT
ZWN1cml0eVBvbGljeTo6Q29udGVudFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dFNlY3VyaXR5UG9saWN5OjpwYXJzZURpcmVjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50U2VjdXJpdHlQb2xpY3k6OmFkZERpcmVjdGl2ZSk6CisgICAgICAgICAgICAtIEkgY291bGRu
J3QgcmVzaXN0IHJlLXdyaXRpbmcgdGhpcyBwYXJzZXIgdG8gdXNlIHRoZSBoZWxwZXIKKyAgICAg
ICAgICAgICAgZnVuY3Rpb25zIGFuZCB0byBtYXRjaCB0aGUgc3R5bGUgb2YgdGhlIHNvdXJjZS1s
aXN0IHBhcnNlci4KKyAgICAgICAgKiBwYWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjpjcmVhdGUpOgorICAgICAgICAg
ICAgLSBBY2NlcHQgYSBTZWN1cml0eU9yaWdpbiBjb250ZXh0IG9iamVjdC4KKwogMjAxMS0wMy0y
NCAgU3RlcGhhbmllIExld2lzICA8c2xld2lzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBHZW9mZiBHYXJlbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL1NjcmlwdENv
bnRyb2xsZXJCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9T
Y3JpcHRDb250cm9sbGVyQmFzZS5jcHAJKHJldmlzaW9uIDgxODk4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJv
bGxlci5oIgogCisjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyQ2xpZW50LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDgxODk4
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkNvbW1l
bnQuaCIKICNpbmNsdWRlICJDb25zb2xlLmgiCisjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9s
aWN5LmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiQ3VzdG9tRXZlbnQuaCIK
ICNpbmNsdWRlICJEYXRlQ29tcG9uZW50cy5oIgpAQCAtNDUwMCw3ICs0NTAxLDcgQEAgdm9pZCBE
b2N1bWVudDo6aW5pdFNlY3VyaXR5Q29udGV4dCgpCiAgICAgLy8gbG9hZGluZyBVUkwgd2l0aCBh
IGZyZXNoIGNvbnRlbnQgc2VjdXJpdHkgcG9saWN5LgogICAgIG1fY29va2llVVJMID0gbV91cmw7
CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c2V0U2VjdXJpdHlPcmlnaW4oU2VjdXJpdHlP
cmlnaW46OmNyZWF0ZShtX3VybCwgbV9mcmFtZS0+bG9hZGVyKCktPnNhbmRib3hGbGFncygpKSk7
Ci0gICAgbV9jb250ZW50U2VjdXJpdHlQb2xpY3kgPSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmNy
ZWF0ZSgpOworICAgIG1fY29udGVudFNlY3VyaXR5UG9saWN5ID0gQ29udGVudFNlY3VyaXR5UG9s
aWN5OjpjcmVhdGUoc2VjdXJpdHlPcmlnaW4oKSk7CiAKICAgICBpZiAoU2VjdXJpdHlPcmlnaW46
OmFsbG93U3Vic3RpdHV0ZURhdGFBY2Nlc3NUb0xvY2FsKCkpIHsKICAgICAgICAgLy8gSWYgdGhp
cyBkb2N1bWVudCB3YXMgbG9hZGVkIHdpdGggc3Vic3RpdHV0ZURhdGEsIHRoZW4gdGhlIGRvY3Vt
ZW50IGNhbgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDgxODk4KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYg
QEAKICNpbmNsdWRlICJDb2xsZWN0aW9uVHlwZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5j
bHVkZSAiQ29udGFpbmVyTm9kZS5oIgotI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5o
IgogI2luY2x1ZGUgIkRPTVRpbWVTdGFtcC5oIgogI2luY2x1ZGUgIkRvY3VtZW50T3JkZXJlZE1h
cC5oIgogI2luY2x1ZGUgIkRvY3VtZW50VGltaW5nLmgiCkBAIC01MSwxOSArNTAsMjAgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBBdHRyOwogY2xhc3MgQVhPYmplY3RDYWNoZTsK
K2NsYXNzIEF0dHI7CiBjbGFzcyBDREFUQVNlY3Rpb247CitjbGFzcyBDU1NQcmltaXRpdmVWYWx1
ZUNhY2hlOworY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKK2NsYXNzIENTU1N0eWxlU2VsZWN0
b3I7CitjbGFzcyBDU1NTdHlsZVNoZWV0OwogY2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldDsKIGNs
YXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwogY2xhc3MgQ2FjaGVkU2NyaXB0OwogY2xhc3MgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDsKIGNsYXNzIENoYXJhY3RlckRhdGE7Ci1jbGFzcyBDU1NQcmlt
aXRpdmVWYWx1ZUNhY2hlOwotY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKLWNsYXNzIENTU1N0
eWxlU2VsZWN0b3I7Ci1jbGFzcyBDU1NTdHlsZVNoZWV0OwogY2xhc3MgQ29tbWVudDsKK2NsYXNz
IENvbnRlbnRTZWN1cml0eVBvbGljeTsKIGNsYXNzIERPTUltcGxlbWVudGF0aW9uOwogY2xhc3Mg
RE9NU2VsZWN0aW9uOwogY2xhc3MgRE9NV2luZG93OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1NjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TY3Jp
cHRFbGVtZW50LmNwcAkocmV2aXNpb24gODE4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2Ny
aXB0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1
ZGUgIkNhY2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisj
aW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJEb2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAJ
KHJldmlzaW9uIDgxODk4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3Vt
ZW50UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudFBhcnNlci5oIgogCisjaW5jbHVkZSAi
Q29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgog
I2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA4MTg5OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcg
QEAKICNpbmNsdWRlICJDYWNoZWRQYWdlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xp
Y3kuaCIKICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkRPTVdpbmRv
dy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nv
bnRlbnRTZWN1cml0eVBvbGljeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCShyZXZpc2lvbiA4MTg5OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNDYgKzI1LDM5MCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29udGVu
dFNlY3VyaXR5UG9saWN5LmgiCisKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBpc0RpcmVjdGl2ZU5hbWVDaGFyYWN0ZXIoVUNoYXIg
YykKKy8vIE5vcm1hbGx5IFdlYktpdCB1c2VzICJzdGF0aWMiIGZvciBpbnRlcm5hbCBsaW5rYWdl
LCBidXQgdXNpbmcgInN0YXRpYyIgZm9yCisvLyB0aGVzZSBmdW5jdGlvbnMgY2F1c2VzIGEgY29t
cGlsZSBlcnJvciBiZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBhcworLy8gdGVtcGxh
dGUgcGFyYW1ldGVycy4KK25hbWVzcGFjZSB7CisKK2Jvb2wgaXNEaXJlY3RpdmVOYW1lQ2hhcmFj
dGVyKFVDaGFyIGMpCiB7Ci0gICAgcmV0dXJuIGlzQVNDSUlBbHBoYShjKSB8fCBpc0FTQ0lJRGln
aXQoYykgfHwgYyA9PSAnLSc7CisgICAgcmV0dXJuIGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwg
YyA9PSAnLSc7CiB9CiAKLXN0YXRpYyBib29sIGlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXIoVUNo
YXIgYykKK2Jvb2wgaXNEaXJlY3RpdmVWYWx1ZUNoYXJhY3RlcihVQ2hhciBjKQogewogICAgIHJl
dHVybiBpc0FTQ0lJU3BhY2UoYykgfHwgKGMgPj0gMHgyMSAmJiBjIDw9IDB4N2UpOyAvLyBXaGl0
ZXNwYWNlICsgVkNIQVIKIH0KIAotc3RhdGljIHZvaWQgYWR2YW5jZVVudGlsKGNvbnN0IFVDaGFy
KiYgcG9zLCBjb25zdCBVQ2hhciogZW5kLCBVQ2hhciBkZWxpbWl0ZXIpCitib29sIGlzU291cmNl
Q2hhcmFjdGVyKFVDaGFyIGMpCit7CisgICAgcmV0dXJuICFpc0FTQ0lJU3BhY2UoYyk7Cit9CisK
K2Jvb2wgaXNIb3N0Q2hhcmFjdGVyKFVDaGFyIGMpCiB7Ci0gICAgd2hpbGUgKHBvcyA8IGVuZCkg
ewotICAgICAgICBpZiAoKnBvcysrID09IGRlbGltaXRlcikKLSAgICAgICAgICAgIHJldHVybjsK
KyAgICByZXR1cm4gaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09ICctJzsKK30KKworYm9v
bCBpc1NjaGVtZUNvbnRpbnVhdGlvbkNoYXJhY3RlcihVQ2hhciBjKQoreworICAgIHJldHVybiBp
c0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IGMgPT0gJysnIHx8IGMgPT0gJy0nIHx8IGMgPT0gJy4n
OworfQorCit9IC8vIG5hbWVzcGFjZQorCitzdGF0aWMgYm9vbCBza2lwRXhhY3RseShjb25zdCBV
Q2hhciomIHBvc2l0aW9uLCBjb25zdCBVQ2hhciogZW5kLCBVQ2hhciBkZWxpbWl0ZXIpCit7Cisg
ICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICpwb3NpdGlvbiA9PSBkZWxpbWl0ZXIpIHsKKyAgICAg
ICAgKytwb3NpdGlvbjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgIHJldHVybiBm
YWxzZTsKIH0KIAotY2xhc3MgQ1NQRGlyZWN0aXZlIHsKK3RlbXBsYXRlPGJvb2wgY2hhcmFjdGVy
UHJlZGljYXRlKFVDaGFyKT4KK3N0YXRpYyBib29sIHNraXBFeGFjdGx5KGNvbnN0IFVDaGFyKiYg
cG9zaXRpb24sIGNvbnN0IFVDaGFyKiBlbmQpCit7CisgICAgaWYgKHBvc2l0aW9uIDwgZW5kICYm
IGNoYXJhY3RlclByZWRpY2F0ZSgqcG9zaXRpb24pKSB7CisgICAgICAgICsrcG9zaXRpb247Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRp
YyB2b2lkIHNraXBVdGlsKGNvbnN0IFVDaGFyKiYgcG9zaXRpb24sIGNvbnN0IFVDaGFyKiBlbmQs
IFVDaGFyIGRlbGltaXRlcikKK3sKKyAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0
aW9uICE9IGRlbGltaXRlcikKKyAgICAgICAgKytwb3NpdGlvbjsKK30KKwordGVtcGxhdGU8Ym9v
bCBjaGFyYWN0ZXJQcmVkaWNhdGUoVUNoYXIpPgorc3RhdGljIHZvaWQgc2tpcFdoaWxlKGNvbnN0
IFVDaGFyKiYgcG9zaXRpb24sIGNvbnN0IFVDaGFyKiBlbmQpCit7CisgICAgd2hpbGUgKHBvc2l0
aW9uIDwgZW5kICYmIGNoYXJhY3RlclByZWRpY2F0ZSgqcG9zaXRpb24pKQorICAgICAgICArK3Bv
c2l0aW9uOworfQorCitjbGFzcyBDU1BTb3VyY2UgewogcHVibGljOgotICAgIGV4cGxpY2l0IENT
UERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICA6IG1fdmFsdWUodmFsdWUp
CisgICAgQ1NQU291cmNlKGNvbnN0IFN0cmluZyYgc2NoZW1lLCBjb25zdCBTdHJpbmcmIGhvc3Qs
IGludCBwb3J0LCBib29sIGhvc3RIYXNXaWxkY2FyZCwgYm9vbCBwb3J0SGFzV2lsZGNhcmQpCisg
ICAgICAgIDogbV9zY2hlbWUoc2NoZW1lKQorICAgICAgICAsIG1faG9zdChob3N0KQorICAgICAg
ICAsIG1fcG9ydChwb3J0KQorICAgICAgICAsIG1faG9zdEhhc1dpbGRjYXJkKGhvc3RIYXNXaWxk
Y2FyZCkKKyAgICAgICAgLCBtX3BvcnRIYXNXaWxkY2FyZChwb3J0SGFzV2lsZGNhcmQpCiAgICAg
ewogICAgIH0KIAotICAgIGJvb2wgYWxsb3dzKGNvbnN0IEtVUkwmKQorICAgIGJvb2wgbWF0Y2hl
cyhjb25zdCBLVVJMJiB1cmwpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAoIXNjaGVtZU1hdGNo
ZXModXJsKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGlzU2NoZW1l
T25seSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBob3N0TWF0
Y2hlcyh1cmwpICYmIHBvcnRNYXRjaGVzKHVybCk7CisgICAgfQorCitwcml2YXRlOgorICAgIGJv
b2wgc2NoZW1lTWF0Y2hlcyhjb25zdCBLVVJMJiB1cmwpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UodXJsLnByb3RvY29sKCksIG1fc2NoZW1lKTsKKyAgICB9
CisKKyAgICBib29sIGhvc3RNYXRjaGVzKGNvbnN0IEtVUkwmIHVybCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChtX2hvc3RIYXNXaWxkY2FyZCkKKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVk
KCk7CisKKyAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKHVybC5ob3N0KCksIG1faG9z
dCk7CisgICAgfQorCisgICAgYm9vbCBwb3J0TWF0Y2hlcyhjb25zdCBLVVJMJiB1cmwpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAobV9wb3J0SGFzV2lsZGNhcmQpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgICAgICAvLyBGSVhNRTogSGFuZGxlIGV4cGxpY2l0IGRlZmF1bHQgcG9y
dHMgY29ycmVjdGx5LgorICAgICAgICByZXR1cm4gdXJsLnBvcnQoKSA9PSBtX3BvcnQ7CisgICAg
fQorCisgICAgYm9vbCBpc1NjaGVtZU9ubHkoKSBjb25zdCB7IHJldHVybiBtX2hvc3QuaXNFbXB0
eSgpOyB9CisKKyAgICBTdHJpbmcgbV9zY2hlbWU7CisgICAgU3RyaW5nIG1faG9zdDsKKyAgICBp
bnQgbV9wb3J0OworCisgICAgYm9vbCBtX2hvc3RIYXNXaWxkY2FyZDsKKyAgICBib29sIG1fcG9y
dEhhc1dpbGRjYXJkOworfTsKKworY2xhc3MgQ1NQU291cmNlTGlzdCB7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgQ1NQU291cmNlTGlzdChTZWN1cml0eU9yaWdpbiopOworCisgICAgdm9pZCBwYXJz
ZShjb25zdCBTdHJpbmcmKTsKKyAgICBib29sIG1hdGNoZXMoY29uc3QgS1VSTCYpOworCitwcml2
YXRlOgorICAgIHZvaWQgcGFyc2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5k
KTsKKworICAgIGJvb2wgcGFyc2VTb3VyY2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hh
ciogZW5kLCBTdHJpbmcmIHNjaGVtZSwgU3RyaW5nJiBob3N0LCBpbnQmIHBvcnQsIGJvb2wmIGhv
c3RIYXNXaWxkY2FyZCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKTsKKyAgICBib29sIHBhcnNlU2No
ZW1lKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUp
OworICAgIGJvb2wgcGFyc2VIb3N0KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVu
ZCwgU3RyaW5nJiBob3N0LCBib29sJiBob3N0SGFzV2lsZGNhcmQpOworICAgIGJvb2wgcGFyc2VQ
b3J0KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgaW50JiBwb3J0LCBib29s
JiBwb3J0SGFzV2lsZGNhcmQpOworCisgICAgdm9pZCBhZGRTb3VyY2VTZWxmKCk7CisKKyAgICBT
ZWN1cml0eU9yaWdpbiogbV9vcmlnaW47CisgICAgVmVjdG9yPENTUFNvdXJjZT4gbV9saXN0Owor
fTsKKworQ1NQU291cmNlTGlzdDo6Q1NQU291cmNlTGlzdChTZWN1cml0eU9yaWdpbiogb3JpZ2lu
KQorICAgIDogbV9vcmlnaW4ob3JpZ2luKQoreworfQorCit2b2lkIENTUFNvdXJjZUxpc3Q6OnBh
cnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgcGFyc2UodmFsdWUuY2hhcmFjdGVycygp
LCB2YWx1ZS5jaGFyYWN0ZXJzKCkgKyB2YWx1ZS5sZW5ndGgoKSk7Cit9CisKK2Jvb2wgQ1NQU291
cmNlTGlzdDo6bWF0Y2hlcyhjb25zdCBLVVJMJiB1cmwpCit7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2xpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fbGlzdFtpXS5tYXRj
aGVzKHVybCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCisvLyBzb3VyY2UtbGlzdCAgICAgICA9ICpXU1AgWyBzb3VyY2UgKiggMSpXU1Ag
c291cmNlICkgKldTUCBdCisvLyAgICAgICAgICAgICAgICAgICAvICpXU1AgIidub25lJyIgKldT
UAorLy8KK3ZvaWQgQ1NQU291cmNlTGlzdDo6cGFyc2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25z
dCBVQ2hhciogZW5kKQoreworICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOworCisg
ICAgYm9vbCBpc0ZpcnN0U291cmNlSW5MaXN0ID0gdHJ1ZTsKKyAgICB3aGlsZSAocG9zaXRpb24g
PCBlbmQpIHsKKyAgICAgICAgc2tpcFdoaWxlPGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7
CisgICAgICAgIGNvbnN0IFVDaGFyKiBiZWdpblNvdXJjZSA9IHBvc2l0aW9uOworICAgICAgICBz
a2lwV2hpbGU8aXNTb3VyY2VDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOworCisgICAgICAgIGlm
IChpc0ZpcnN0U291cmNlSW5MaXN0ICYmIGVxdWFsSWdub3JpbmdDYXNlKCInbm9uZSciLCBiZWdp
blNvdXJjZSwgcG9zaXRpb24gLSBiZWdpblNvdXJjZSkpCisgICAgICAgICAgICByZXR1cm47IC8v
IFdlIHJlcHJlc2VudCAnbm9uZScgYXMgYW4gZW1wdHkgbV9saXN0LgorICAgICAgICBpc0ZpcnN0
U291cmNlSW5MaXN0ID0gZmFsc2U7CisKKyAgICAgICAgU3RyaW5nIHNjaGVtZSwgaG9zdDsKKyAg
ICAgICAgaW50IHBvcnQgPSAwOworICAgICAgICBib29sIGhvc3RIYXNXaWxkY2FyZCA9IGZhbHNl
OworICAgICAgICBib29sIHBvcnRIYXNXaWxkY2FyZCA9IGZhbHNlOworCisgICAgICAgIGlmIChw
YXJzZVNvdXJjZShiZWdpblNvdXJjZSwgcG9zaXRpb24sIHNjaGVtZSwgaG9zdCwgcG9ydCwgaG9z
dEhhc1dpbGRjYXJkLCBwb3J0SGFzV2lsZGNhcmQpKSB7CisgICAgICAgICAgICBpZiAoc2NoZW1l
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBzY2hlbWUgPSBtX29yaWdpbi0+cHJvdG9jb2wo
KTsKKyAgICAgICAgICAgIG1fbGlzdC5hcHBlbmQoQ1NQU291cmNlKHNjaGVtZSwgaG9zdCwgcG9y
dCwgaG9zdEhhc1dpbGRjYXJkLCBwb3J0SGFzV2lsZGNhcmQpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEFTU0VSVChwb3NpdGlvbiA9PSBlbmQgfHwgaXNBU0NJSVNwYWNlKCpwb3NpdGlvbikpOwor
ICAgICB9Cit9CisKKy8vIHNvdXJjZSAgICAgICAgICAgID0gc2NoZW1lICI6IgorLy8gICAgICAg
ICAgICAgICAgICAgLyAoIFsgc2NoZW1lICI6Ly8iIF0gaG9zdCBbIHBvcnQgXSApCisvLyAgICAg
ICAgICAgICAgICAgICAvICInc2VsZiciCisvLworYm9vbCBDU1BTb3VyY2VMaXN0OjpwYXJzZVNv
dXJjZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFN0cmluZyYgc2NoZW1lLCBTdHJpbmcmIGhvc3QsIGludCYgcG9y
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgaG9zdEhhc1dpbGRjYXJk
LCBib29sJiBwb3J0SGFzV2lsZGNhcmQpCit7CisgICAgaWYgKGJlZ2luID09IGVuZCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKCInc2VsZiciLCBi
ZWdpbiwgZW5kIC0gYmVnaW4pKSB7CisgICAgICAgIGFkZFNvdXJjZVNlbGYoKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2lu
OworCisgICAgY29uc3QgVUNoYXIqIGJlZ2luSG9zdCA9IGJlZ2luOworICAgIHNraXBVdGlsKHBv
c2l0aW9uLCBlbmQsICc6Jyk7CisKKyAgICBpZiAocG9zaXRpb24gPT0gZW5kKSB7CisgICAgICAg
IC8vIFRoaXMgbXVzdCBiZSBhIGhvc3Qtb25seSBzb3VyY2UuCisgICAgICAgIGlmICghcGFyc2VI
b3N0KGJlZ2luSG9zdCwgcG9zaXRpb24sIGhvc3QsIGhvc3RIYXNXaWxkY2FyZCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlm
IChlbmQgLSBwb3NpdGlvbiA9PSAxKSB7CisgICAgICAgIEFTU0VSVCgqcG9zaXRpb24gPT0gJzon
KTsKKyAgICAgICAgLy8gVGhpcyBtdXN0IGJlIGEgc2NoZW1lLW9ubHkgc291cmNlLgorICAgICAg
ICBpZiAoIXBhcnNlU2NoZW1lKGJlZ2luLCBwb3NpdGlvbiwgc2NoZW1lKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQVNTRVJU
KGVuZCAtIHBvc2l0aW9uID49IDIpOworICAgIGlmIChwb3NpdGlvblsxXSA9PSAnLycpIHsKKyAg
ICAgICAgaWYgKCFwYXJzZVNjaGVtZShiZWdpbiwgcG9zaXRpb24sIHNjaGVtZSkKKyAgICAgICAg
ICAgIHx8ICFza2lwRXhhY3RseShwb3NpdGlvbiwgZW5kLCAnOicpCisgICAgICAgICAgICB8fCAh
c2tpcEV4YWN0bHkocG9zaXRpb24sIGVuZCwgJy8nKQorICAgICAgICAgICAgfHwgIXNraXBFeGFj
dGx5KHBvc2l0aW9uLCBlbmQsICcvJykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGJlZ2luSG9zdCA9IHBvc2l0aW9uOworICAgICAgICBza2lwVXRpbChwb3NpdGlvbiwgZW5k
LCAnOicpOworICAgIH0KKworICAgIGlmIChwb3NpdGlvbiA9PSBiZWdpbkhvc3QpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghcGFyc2VIb3N0KGJlZ2luSG9zdCwgcG9zaXRpb24s
IGhvc3QsIGhvc3RIYXNXaWxkY2FyZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
IChwb3NpdGlvbiA9PSBlbmQpIHsKKyAgICAgICAgcG9ydCA9IDA7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIGlmICghc2tpcEV4YWN0bHkocG9zaXRpb24sIGVuZCwgJzonKSkK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBpZiAoIXBhcnNlUG9ydChwb3Np
dGlvbiwgZW5kLCBwb3J0LCBwb3J0SGFzV2lsZGNhcmQpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gICAgICAgICAgICAgICAgICAgICA7IDxzY2hl
bWU+IHByb2R1Y3Rpb24gZnJvbSBSRkMgMzk4NgorLy8gc2NoZW1lICAgICAgPSBBTFBIQSAqKCBB
TFBIQSAvIERJR0lUIC8gIisiIC8gIi0iIC8gIi4iICkKKy8vCitib29sIENTUFNvdXJjZUxpc3Q6
OnBhcnNlU2NoZW1lKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5n
JiBzY2hlbWUpCit7CisgICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7CisgICAgQVNTRVJUKHNjaGVt
ZS5pc0VtcHR5KCkpOworCisgICAgaWYgKGJlZ2luID09IGVuZCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47CisKKyAgICBpZiAoIXNr
aXBFeGFjdGx5PGlzQVNDSUlBbHBoYT4ocG9zaXRpb24sIGVuZCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHNraXBXaGlsZTxpc1NjaGVtZUNvbnRpbnVhdGlvbkNoYXJhY3Rlcj4ocG9z
aXRpb24sIGVuZCk7CisKKyAgICBpZiAocG9zaXRpb24gIT0gZW5kKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBzY2hlbWUgPSBTdHJpbmcoYmVnaW4sIGVuZCAtIGJlZ2luKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworLy8gaG9zdCAgICAgICAgICAgICAgPSBbICIqLiIgXSAxKmhvc3Qt
Y2hhciAqKCAiLiIgMSpob3N0LWNoYXIgKQorLy8gICAgICAgICAgICAgICAgICAgLyAiKiIKKy8v
IGhvc3QtY2hhciAgICAgICAgID0gQUxQSEEgLyBESUdJVCAvICItIgorLy8KK2Jvb2wgQ1NQU291
cmNlTGlzdDo6cGFyc2VIb3N0KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwg
U3RyaW5nJiBob3N0LCBib29sJiBob3N0SGFzV2lsZGNhcmQpCit7CisgICAgQVNTRVJUKGJlZ2lu
IDw9IGVuZCk7CisgICAgQVNTRVJUKGhvc3QuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIWhvc3RI
YXNXaWxkY2FyZCk7CisKKyAgICBpZiAoYmVnaW4gPT0gZW5kKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKKworICAgIGlmIChza2lw
RXhhY3RseShwb3NpdGlvbiwgZW5kLCAnKicpKSB7CisgICAgICAgIGhvc3RIYXNXaWxkY2FyZCA9
IHRydWU7CisKKyAgICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgICAgIGlmICghc2tpcEV4YWN0bHkocG9zaXRpb24sIGVuZCwgJy4nKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBVQ2hhciogaG9z
dEJlZ2luID0gcG9zaXRpb247CisKKyAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKKyAgICAg
ICAgaWYgKCFza2lwRXhhY3RseTxpc0hvc3RDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHNraXBXaGlsZTxpc0hvc3RDaGFyYWN0
ZXI+KHBvc2l0aW9uLCBlbmQpOworCisgICAgICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAhc2tp
cEV4YWN0bHkocG9zaXRpb24sIGVuZCwgJy4nKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kKTsKKyAgICBob3N0ID0gU3RyaW5n
KGhvc3RCZWdpbiwgZW5kIC0gaG9zdEJlZ2luKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8g
cG9ydCAgICAgICAgICAgICAgPSAiOiIgKCAxKkRJR0lUIC8gIioiICkKKy8vCitib29sIENTUFNv
dXJjZUxpc3Q6OnBhcnNlUG9ydChjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQs
IGludCYgcG9ydCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKQoreworICAgIEFTU0VSVChiZWdpbiA8
PSBlbmQpOworICAgIEFTU0VSVCghcG9ydCk7CisgICAgQVNTRVJUKCFwb3J0SGFzV2lsZGNhcmQp
OworCisgICAgaWYgKGJlZ2luID09IGVuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKGVuZCAtIGJlZ2luID09IDEgJiYgKmJlZ2luID09ICcqJykgeworICAgICAgICBwb3J0ID0g
MDsKKyAgICAgICAgcG9ydEhhc1dpbGRjYXJkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47CisgICAgc2tpcFdo
aWxlPGlzQVNDSUlEaWdpdD4ocG9zaXRpb24sIGVuZCk7CisKKyAgICBpZiAocG9zaXRpb24gIT0g
ZW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIG9rOworICAgIHBvcnQgPSBj
aGFyYWN0ZXJzVG9JbnRTdHJpY3QoYmVnaW4sIGVuZCAtIGJlZ2luLCAmb2spOworICAgIHJldHVy
biBvazsKK30KKwordm9pZCBDU1BTb3VyY2VMaXN0OjphZGRTb3VyY2VTZWxmKCkKK3sKKyAgICAv
LyBGSVhNRTogSW5oZXJpdCB0aGUgc2NoZW1lLCBob3N0LCBhbmQgcG9ydCBmcm9tIHRoZSBjdXJy
ZW50IFVSTC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitjbGFzcyBDU1BEaXJlY3RpdmUg
eworcHVibGljOgorICAgIENTUERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIHZhbHVlLCBTZWN1cml0
eU9yaWdpbiogb3JpZ2luKQorICAgICAgICA6IG1fc291cmNlTGlzdChvcmlnaW4pCisgICAgewor
ICAgICAgICBtX3NvdXJjZUxpc3QucGFyc2UodmFsdWUpOworICAgIH0KKworICAgIGJvb2wgYWxs
b3dzKGNvbnN0IEtVUkwmIHVybCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NvdXJjZUxpc3Qu
bWF0Y2hlcyh1cmwpOworICAgIH0KKwogcHJpdmF0ZToKLSAgICBTdHJpbmcgbV92YWx1ZTsKKyAg
ICBDU1BTb3VyY2VMaXN0IG1fc291cmNlTGlzdDsKIH07CiAKLUNvbnRlbnRTZWN1cml0eVBvbGlj
eTo6Q29udGVudFNlY3VyaXR5UG9saWN5KCkKK0NvbnRlbnRTZWN1cml0eVBvbGljeTo6Q29udGVu
dFNlY3VyaXR5UG9saWN5KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiAgICAgOiBtX2hhdmVQb2xp
Y3koZmFsc2UpCisgICAgLCBtX29yaWdpbihvcmlnaW4pCiB7CiB9CiAKQEAgLTkxLDYgKzQzNSw5
IEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjpjYW5Mb2FkRXh0ZXIKICAgICByZXR1cm4g
IW1fc2NyaXB0U3JjIHx8IG1fc2NyaXB0U3JjLT5hbGxvd3MoS1VSTChQYXJzZWRVUkxTdHJpbmcs
IHVybCkpOwogfQogCisvLyBwb2xpY3kgICAgICAgICAgICA9IGRpcmVjdGl2ZS1saXN0CisvLyBk
aXJlY3RpdmUtbGlzdCAgICA9IFsgZGlyZWN0aXZlICooICI7IiBbIGRpcmVjdGl2ZSBdICkgXQor
Ly8KIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjpwYXJzZShjb25zdCBTdHJpbmcmIHBvbGlj
eSkKIHsKICAgICBBU1NFUlQoIW1faGF2ZVBvbGljeSk7CkBAIC05OCw4NCArNDQ1LDc1IEBAIHZv
aWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjpwYXJzZShjb25zdCAKICAgICBpZiAocG9saWN5Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgVUNoYXIqIHBvcyA9IHBvbGlj
eS5jaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHBvcyArIHBvbGljeS5sZW5n
dGgoKTsKKyAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBwb2xpY3kuY2hhcmFjdGVycygpOwor
ICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwb3NpdGlvbiArIHBvbGljeS5sZW5ndGgoKTsKIAotICAg
IHdoaWxlIChwb3MgPCBlbmQpIHsKLSAgICAgICAgVmVjdG9yPFVDaGFyLCAzMj4gbmFtZTsKLSAg
ICAgICAgVmVjdG9yPFVDaGFyLCA2ND4gdmFsdWU7Ci0KLSAgICAgICAgaWYgKCFwYXJzZURpcmVj
dGl2ZShwb3MsIGVuZCwgbmFtZSwgdmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgIHdoaWxl
IChwb3NpdGlvbiA8IGVuZCkgeworICAgICAgICBjb25zdCBVQ2hhciogZGlyZWN0aXZlQmVnaW4g
PSBwb3NpdGlvbjsKKyAgICAgICAgc2tpcFV0aWwocG9zaXRpb24sIGVuZCwgJzsnKTsKKworICAg
ICAgICBTdHJpbmcgbmFtZSwgdmFsdWU7CisgICAgICAgIGlmIChwYXJzZURpcmVjdGl2ZShkaXJl
Y3RpdmVCZWdpbiwgcG9zaXRpb24sIG5hbWUsIHZhbHVlKSkgeworICAgICAgICAgICAgQVNTRVJU
KCFuYW1lLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBhZGREaXJlY3RpdmUobmFtZSwgdmFsdWUp
OworICAgICAgICB9CiAKLSAgICAgICAgLy8gV2UgdXNlIGEgY29weSBoZXJlIGluc3RlYWQgb2Yg
U3RyaW5nOjphZG9wdCBiZWNhdXNlIHdlIGV4cGVjdAotICAgICAgICAvLyB0aGUgbmFtZSBhbmQg
dGhlIHZhbHVlIHRvIGJlIHJlbGF0aXZlbHkgc2hvcnQsIHNvIHRoZSBjb3B5IHdpbGwKLSAgICAg
ICAgLy8gYmUgY2hlYXBlciB0aGFuIHRoZSBleHRyYSBtYWxsb2MuCi0gICAgICAgIGVtaXREaXJl
Y3RpdmUoU3RyaW5nKG5hbWUpLCBTdHJpbmcodmFsdWUpKTsKKyAgICAgICAgQVNTRVJUKHBvc2l0
aW9uID09IGVuZCB8fCAqcG9zaXRpb24gPT0gJzsnKTsKKyAgICAgICAgc2tpcEV4YWN0bHkocG9z
aXRpb24sIGVuZCwgJzsnKTsKICAgICB9CiB9CiAKLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5
OjpwYXJzZURpcmVjdGl2ZShjb25zdCBVQ2hhciomIHBvcywgY29uc3QgVUNoYXIqIGVuZCwgVmVj
dG9yPFVDaGFyLCAzMj4mIG5hbWUsIFZlY3RvcjxVQ2hhciwgNjQ+JiB2YWx1ZSkKKy8vIGRpcmVj
dGl2ZSAgICAgICAgID0gKldTUCBbIGRpcmVjdGl2ZS1uYW1lIFsgV1NQIGRpcmVjdGl2ZS12YWx1
ZSBdIF0KKy8vIGRpcmVjdGl2ZS1uYW1lICAgID0gMSooIEFMUEhBIC8gRElHSVQgLyAiLSIgKQor
Ly8gZGlyZWN0aXZlLXZhbHVlICAgPSAqKCBXU1AgLyA8VkNIQVIgZXhjZXB0ICI7Ij4gKQorLy8K
K2Jvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjpwYXJzZURpcmVjdGl2ZShjb25zdCBVQ2hhciog
YmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgbmFtZSwgU3RyaW5nJiB2YWx1ZSkKIHsK
LSAgICBBU1NFUlQocG9zIDwgZW5kKTsKICAgICBBU1NFUlQobmFtZS5pc0VtcHR5KCkpOwogICAg
IEFTU0VSVCh2YWx1ZS5pc0VtcHR5KCkpOwogCi0gICAgd2hpbGUgKHBvcyA8IGVuZCAmJiBpc0FT
Q0lJU3BhY2UoKnBvcykpCi0gICAgICAgIHBvcysrOworICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlv
biA9IGJlZ2luOworICAgIHNraXBXaGlsZTxpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwog
Ci0gICAgd2hpbGUgKHBvcyA8IGVuZCkgewotICAgICAgICBVQ2hhciBjdXJyZW50Q2hhcmFjdGVy
ID0gKnBvczsKLSAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIgPT0gJzsnKQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGlmIChpc0FTQ0lJU3BhY2UoY3VycmVudENoYXJhY3RlcikpCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKCFpc0RpcmVjdGl2ZU5hbWVDaGFyYWN0ZXIo
Y3VycmVudENoYXJhY3RlcikpIHsKLSAgICAgICAgICAgIGFkdmFuY2VVbnRpbChwb3MsIGVuZCwg
JzsnKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBuYW1l
LmFwcGVuZChjdXJyZW50Q2hhcmFjdGVyKTsKLSAgICAgICAgcG9zKys7Ci0gICAgfQorICAgIGNv
bnN0IFVDaGFyKiBuYW1lQmVnaW4gPSBwb3NpdGlvbjsKKyAgICBza2lwV2hpbGU8aXNEaXJlY3Rp
dmVOYW1lQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKworICAgIC8vIFRoZSBkaXJlY3RpdmUt
bmFtZSBtdXN0IGJlIG5vbi1lbXB0eS4KKyAgICBpZiAobmFtZUJlZ2luID09IHBvc2l0aW9uKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB3aGlsZSAocG9zIDwgZW5kICYmIGlzQVNDSUlT
cGFjZSgqcG9zKSkKLSAgICAgICAgcG9zKys7CisgICAgbmFtZSA9IFN0cmluZyhuYW1lQmVnaW4s
IHBvc2l0aW9uIC0gbmFtZUJlZ2luKTsKIAotICAgIGlmIChwb3MgPCBlbmQgJiYgKnBvcyA9PSAn
OycpIHsKLSAgICAgICAgcG9zKys7CisgICAgaWYgKHBvc2l0aW9uID09IGVuZCkKICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQogCi0gICAgd2hpbGUgKHBvcyA8IGVuZCkgewotICAgICAgICBV
Q2hhciBjdXJyZW50Q2hhcmFjdGVyID0gKnBvczsKLSAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0
ZXIgPT0gJzsnKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICghaXNEaXJlY3RpdmVW
YWx1ZUNoYXJhY3RlcihjdXJyZW50Q2hhcmFjdGVyKSkgewotICAgICAgICAgICAgYWR2YW5jZVVu
dGlsKHBvcywgZW5kLCAnOycpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIHZhbHVlLmFwcGVuZChjdXJyZW50Q2hhcmFjdGVyKTsKLSAgICAgICAgcG9zKys7
Ci0gICAgfQorICAgIGlmICghc2tpcEV4YWN0bHk8aXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5k
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHBvcyA8IGVuZCAmJiAqcG9zID09
ICc7JykgewotICAgICAgICBwb3MrKzsKKyAgICBza2lwV2hpbGU8aXNBU0NJSVNwYWNlPihwb3Np
dGlvbiwgZW5kKTsKKworICAgIGNvbnN0IFVDaGFyKiB2YWx1ZUJlZ2luID0gcG9zaXRpb247Cisg
ICAgc2tpcFdoaWxlPGlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwor
CisgICAgaWYgKHBvc2l0aW9uICE9IGVuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ly8gVGhlIGRpcmVjdGl2ZS12YWx1ZSBtYXkgYmUgZW1wdHkuCisgICAgaWYgKHZhbHVlQmVnaW4g
PT0gcG9zaXRpb24pCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KIAorICAgIHZhbHVlID0g
U3RyaW5nKHZhbHVlQmVnaW4sIHBvc2l0aW9uIC0gdmFsdWVCZWdpbik7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjplbWl0RGlyZWN0aXZlKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgQ29udGVudFNlY3VyaXR5
UG9saWN5OjphZGREaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBzY3JpcHRTcmMsICgic2Ny
aXB0LXNyYyIpKTsKIAogICAgIEFTU0VSVCghbmFtZS5pc0VtcHR5KCkpOwogCiAgICAgaWYgKCFt
X3NjcmlwdFNyYyAmJiBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCBzY3JpcHRTcmMpKQotICAgICAg
ICBtX3NjcmlwdFNyYyA9IGFkb3B0UHRyKG5ldyBDU1BEaXJlY3RpdmUodmFsdWUpKTsKKyAgICAg
ICAgbV9zY3JpcHRTcmMgPSBhZG9wdFB0cihuZXcgQ1NQRGlyZWN0aXZlKHZhbHVlLCBtX29yaWdp
bi5nZXQoKSkpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRlbnRTZWN1
cml0eVBvbGljeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGVudFNl
Y3VyaXR5UG9saWN5LmgJKHJldmlzaW9uIDgxODk4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9D
b250ZW50U2VjdXJpdHlQb2xpY3kuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDE0IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTUERpcmVjdGl2ZTsKK2NsYXNzIFNlY3Vy
aXR5T3JpZ2luOwogCiBjbGFzcyBDb250ZW50U2VjdXJpdHlQb2xpY3kgOiBwdWJsaWMgUmVmQ291
bnRlZDxDb250ZW50U2VjdXJpdHlQb2xpY3k+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDb250ZW50U2VjdXJpdHlQb2xpY3k+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDb250ZW50U2VjdXJpdHlQb2xpY3kpOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29udGVu
dFNlY3VyaXR5UG9saWN5PiBjcmVhdGUoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IDApCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbnRlbnRTZWN1cml0eVBvbGljeShvcmln
aW4pKTsKKyAgICB9CiAgICAgfkNvbnRlbnRTZWN1cml0eVBvbGljeSgpOwogCiAgICAgdm9pZCBk
aWRSZWNlaXZlSGVhZGVyKGNvbnN0IFN0cmluZyYpOwpAQCAtNDUsMTMgKzQ5LDE0IEBAIHB1Ymxp
YzoKICAgICBib29sIGNhbkxvYWRFeHRlcm5hbFNjcmlwdEZyb21TcmMoY29uc3QgU3RyaW5nJiB1
cmwpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIENvbnRlbnRTZWN1cml0eVBvbGljeSgpOworICAg
IGV4cGxpY2l0IENvbnRlbnRTZWN1cml0eVBvbGljeShTZWN1cml0eU9yaWdpbiopOwogCiAgICAg
dm9pZCBwYXJzZShjb25zdCBTdHJpbmcmKTsKLSAgICBib29sIHBhcnNlRGlyZWN0aXZlKGNvbnN0
IFVDaGFyKiYgcG9zLCBjb25zdCBVQ2hhciogZW5kLCBWZWN0b3I8VUNoYXIsIDMyPiYgbmFtZSwg
VmVjdG9yPFVDaGFyLCA2ND4mIHZhbHVlKTsKLSAgICB2b2lkIGVtaXREaXJlY3RpdmUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICBib29sIHBhcnNlRGlyZWN0
aXZlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBuYW1lLCBT
dHJpbmcmIHZhbHVlKTsKKyAgICB2b2lkIGFkZERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmFsdWUpOwogCiAgICAgYm9vbCBtX2hhdmVQb2xpY3k7CisgICAgUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiBtX3NlbGY7CiAgICAgT3duUHRyPENTUERpcmVjdGl2ZT4gbV9z
Y3JpcHRTcmM7CiB9OwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MTkzOSkKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDExLTAzLTI0ICBB
ZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGVhY2ggQ29udGVudCBTZWN1cml0eSBQb2xpY3kgaG93
IHRvIHBhcnNlIHNvdXJjZS1saXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01NDc5OQorCisgICAgICAgIFRlc3QgYSB2YXJpZXR5IG9mIHNvdXJjZS1s
aXN0IHBhcnNpbmcgY2FzZXMuICBUaGVyZSdzIGEgYnVuY2ggbW9yZQorICAgICAgICBjYXNlcyB3
ZSBjb3VsZCBiZSB0ZXN0aW5nLiAgV2UnbGwgYWRkIG1vcmUgb3ZlciB0aW1lLgorCisgICAgICAg
ICogaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvc291cmNlLWxpc3Qt
cGFyc2luZy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJp
dHkvY29udGVudFNlY3VyaXR5UG9saWN5L3NvdXJjZS1saXN0LXBhcnNpbmcuaHRtbDogQWRkZWQu
CisKIDIwMTEtMDMtMjQgIElseWEgU2hlcm1hbiAgPGlzaGVybWFuQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvc291cmNlLWxpc3QtcGFyc2luZy1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvc291cmNlLWxpc3QtcGFyc2luZy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRT
ZWN1cml0eVBvbGljeS9zb3VyY2UtbGlzdC1wYXJzaW5nLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1MyBAQAorTm9uZSBvZiB0aGVzZSBzY3JpcHRzIHNob3VsZCBleGVjdXRl
IGV2ZW4gdGhvdWdoIHRoZXJlIGFyZSBwYXJzZSBlcnJvcnMgaW4gdGhlIHBvbGljeS4KKworICAg
ICAgICAgCisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUwLS0+
LS0+JworLS0tLS0tLS0KK1BBU1MKKworLS0tLS0tLS0KK0ZyYW1lOiAnPCEtLWZyYW1lUGF0aCAv
LzwhLS1mcmFtZTEtLT4tLT4nCistLS0tLS0tLQorUEFTUworCistLS0tLS0tLQorRnJhbWU6ICc8
IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMi0tPi0tPicKKy0tLS0tLS0tCitQQVNTCisKKy0tLS0t
LS0tCitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUzLS0+LS0+JworLS0tLS0tLS0K
K1BBU1MKKworLS0tLS0tLS0KK0ZyYW1lOiAnPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTQtLT4t
LT4nCistLS0tLS0tLQorUEFTUworCistLS0tLS0tLQorRnJhbWU6ICc8IS0tZnJhbWVQYXRoIC8v
PCEtLWZyYW1lNS0tPi0tPicKKy0tLS0tLS0tCitQQVNTCisKKy0tLS0tLS0tCitGcmFtZTogJzwh
LS1mcmFtZVBhdGggLy88IS0tZnJhbWU2LS0+LS0+JworLS0tLS0tLS0KK1BBU1MKKworLS0tLS0t
LS0KK0ZyYW1lOiAnPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTctLT4tLT4nCistLS0tLS0tLQor
UEFTUworCistLS0tLS0tLQorRnJhbWU6ICc8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lOC0tPi0t
PicKKy0tLS0tLS0tCitQQVNTCisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88
IS0tZnJhbWU5LS0+LS0+JworLS0tLS0tLS0KK1BBU1MKSW5kZXg6IExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3NvdXJjZS1saXN0LXBhcnNpbmcu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRl
bnRTZWN1cml0eVBvbGljeS9zb3VyY2UtbGlzdC1wYXJzaW5nLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9z
b3VyY2UtbGlzdC1wYXJzaW5nLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7Cit9Cis8L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICA8cD4KKyAgICBOb25lIG9mIHRoZXNlIHNjcmlwdHMg
c2hvdWxkIGV4ZWN1dGUgZXZlbiB0aG91Z2ggdGhlcmUgYXJlIHBhcnNlIGVycm9ycyBpbiB0aGUg
cG9saWN5LgorICA8L3A+Cis8c2NyaXB0PgorZnVuY3Rpb24gdGVzdChzaG91bGRSdW4sIHBvbGlj
eSkgeworICAgIGRvY3VtZW50LndyaXRlKCc8aWZyYW1lIHNyYz0iaHR0cDovLzEyNy4wLjAuMTo4
MDAwL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9yZXNvdXJjZXMvZWNoby1zY3JpcHQt
c3JjLnBsP3Nob3VsZF9ydW49Jyk7CisgICAgZG9jdW1lbnQud3JpdGUoc2hvdWxkUnVuKTsKKyAg
ICBkb2N1bWVudC53cml0ZSgnJnE9aHR0cDovLzEyNy4wLjAuMTo4MDAwL3NlY3VyaXR5L2NvbnRl
bnRTZWN1cml0eVBvbGljeS9yZXNvdXJjZXMvc2NyaXB0LmpzJmNzcD0nKTsKKyAgICBkb2N1bWVu
dC53cml0ZShlc2NhcGUocG9saWN5KSk7CisgICAgZG9jdW1lbnQud3JpdGUoJyI+PC9pZnJhbWU+
XG4nKTsKK30KKworCit0ZXN0KCd5ZXMnLCAnc2NyaXB0LXNyYyAxMjcuMC4wLjE6ODAwMCcpOwor
dGVzdCgneWVzJywgJ3NjcmlwdC1zcmMgaHR0cDovLzEyNy4wLjAuMTo4MDAwJyk7Cit0ZXN0KCd5
ZXMnLCAnc2NyaXB0LXNyY1x0aHR0cDovLzEyNy4wLjAuMTo4MDAwJyk7Cit0ZXN0KCd5ZXMnLCAn
c2NyaXB0LXNyYyBodHRwOi8vMTI3LjAuMC4xOjgwMDAgICBcdCAnKTsKK3Rlc3QoJ3llcycsICdz
Y3JpcHQtc3JjIGh0dHA6Jyk7Cit0ZXN0KCdubycsICAnc2NyaXB0LXNyYyBodHRwczonKTsKK3Rl
c3QoJ25vJywgICdzY3JpcHQtc3JjIGh0dHBzOiAgdGFjbycpOwordGVzdCgneWVzJywgJ3Njcmlw
dC1zcmMgaHR0cHM6ICBceDA4Jyk7Cit0ZXN0KCdubycsICAnc2NyaXB0LXNyYyBcJ25vbmVcJycp
OwordGVzdCgneWVzJywgJ1x0XHRcdHNjcmlwdC1zcmMgICAgaHR0cDovLzEyNy4wLjAuMTo4MDAw
ICBcdFx0ICBodHRwczonKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87010</attachid>
            <date>2011-03-25 22:33:00 -0700</date>
            <delta_ts>2011-03-26 04:59:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54799-20110325223259.patch</filename>
            <type>text/plain</type>
            <size>28771</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxOTM5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzcgQEAKKzIwMTEtMDMtMjQgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUZWFjaCBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBob3cgdG8gcGFy
c2Ugc291cmNlLWxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU0Nzk5CisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBsYXJnZXIgdGhhbiBJIHdvdWxk
IGxpa2UsIGJ1dCBJIHdhc24ndCBzdXJlIGhvdyB0byBtYWtlCisgICAgICAgIGl0IGFueSBzbWFs
bGVyIHdoaWxlIHN0aWxsIGJlaW5nIHJlYXNvbmFibHkgdGVzdGFibGUuICBJJ3ZlIGxlZnQgb3V0
CisgICAgICAgIHNvbWUgZmVhdHVyZXMgKHN1Y2ggYXMgaG9zdCB3aWxkY2FyZGluZyBhbmQgJ3Nl
bGYnKSBzbyBJIGNhbiBhZGQgdGhlbQorICAgICAgICBpbiBsYXRlciBwYXRjaGVzIHdpdGggdGVz
dHMuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQ
b2xpY3kvc291cmNlLWxpc3QtcGFyc2luZy5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9TY3Jp
cHRDb250cm9sbGVyQmFzZS5jcHA6CisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuY3BwOgor
ICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgICog
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgICAgIC0gQWRkIGluY2x1ZGUgZXhwbGlj
aXRseSBub3cgdGhhdCB3ZSdyZSBub3Qgc3BhbW1pbmcgdGhlIGluY2x1ZGUKKyAgICAgICAgICAg
ICAgZXZlcnl3aGVyZS4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OmluaXRTZWN1cml0eUNvbnRleHQpOgorICAgICAgICAgICAgLSBXZSBu
ZWVkIHRvIHBhc3MgdGhlIFNlY3VyaXR5T3JpZ2luIG9iamVjdCB0bworICAgICAgICAgICAgICBD
b250ZW50U2VjdXJpdHlQb2xpY3kgc28gdGhhdCBpdCBjYW4gcmVzb2x2ZSBpbXBsaWNpdCBwYXJ0
cyBvZgorICAgICAgICAgICAgICBzb3VyY2UgcGF0dGVybnMsIHN1Y2ggYXMgdGhlIHNjaGVtZS4K
KyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgICAgIC0gRm9yd2FyZCBkZWNsYXJl
IENvbnRlbnRTZWN1cml0eVBvbGljeSByYXRoZXIgdGhhbiBpbmNsdWRpbmcgdGhlCisgICAgICAg
ICAgICAgIGhlYWRlci4gIFRlY2huaWNhbGx5IHRoaXMgY291bGQgYmUgYSBzZXBhcmF0ZSBjaGFu
Z2UsIGJ1dCBJIHdhcworICAgICAgICAgICAgICBnZXR0aW5nIGFubm95ZWQgYXQgdGhlIHdvcmxk
IHJlLWJ1aWxkcy4KKyAgICAgICAgKiBwYWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpza2lwRXhhY3RseSk6CisgICAgICAgIChXZWJDb3JlOjpza2lwVXRp
bCk6CisgICAgICAgIChXZWJDb3JlOjpza2lwV2hpbGUpOgorICAgICAgICAgICAgLSBDbGVhbiB1
cCB0aGVzZSBwYXJzZXIgaGVscGVyIGZ1bmN0aW9ucy4gIFdlIG1pZ2h0IGNvbnNpZGVyIG1vdmlu
ZworICAgICAgICAgICAgICB0aGVtIHRvIGEgbW9yZSBnZW5lcmFsIGxvY2F0aW9uLiAgVGhleSdy
ZSB2ZXJ5IGhlbHBmdWwgZm9yCisgICAgICAgICAgICAgIHdyaXRpbmcgc2VjdXJlIEhUVFAgaGVh
ZGVyIHBhcnNlcnMuCisgICAgICAgIChXZWJDb3JlOjpDU1BTb3VyY2U6OkNTUFNvdXJjZSk6Cisg
ICAgICAgICAgICAtIE5ldyBjbGFzcyB0byByZXByZXNlbnQgb25lIHNvdXJjZSBpbiBhIHNvdXJj
ZS1saXN0LgorICAgICAgICAoV2ViQ29yZTo6Q1NQU291cmNlOjptYXRjaGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTUFNvdXJjZTo6c2NoZW1lTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1BTb3VyY2U6Omhvc3RNYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTUFNvdXJjZTo6cG9y
dE1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NQU291cmNlOjppc1NjaGVtZU9ubHkpOgor
ICAgICAgICAgICAgLSBDdXJyZW50bHkgd2UgcmVwcmVzZW50IHNjaGVtZS1vbmx5IHNvdXJjZXMg
dXNpbmcgd2l0aCBhbiBlbXB0eQorICAgICAgICAgICAgICBtX2hvc3QuICBBbm90aGVyIGFwcHJv
YWNoIEkgY29uc2lkZXJlZCB3YXMgdXNpbmcgYW5vdGhlciBib29sLAorICAgICAgICAgICAgICBi
dXQgdGhhdCBzZWVtZWQgc2xpZ2hseSBtZXNzaWVyLgorICAgICAgICAoV2ViQ29yZTo6Q1NQU291
cmNlTGlzdDo6Q1NQU291cmNlTGlzdCk6CisgICAgICAgICAgICAtIENTUFNvdXJjZUxpc3QgZG9l
c24ndCBuZWVkIHRvIHJlZiBTZWN1cml0eU9yaWdpbiBiZWNhdXNlCisgICAgICAgICAgICAgIENT
UFNvdXJjZUxpc3QgaXMgb3duZWQgYnkgQ29udGVudFNlY3VyaXR5UG9saWN5LCB3aGljaCBob2xk
cyBhCisgICAgICAgICAgICAgIHJlZi4KKyAgICAgICAgKFdlYkNvcmU6OkNTUFNvdXJjZUxpc3Q6
OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTUFNvdXJjZUxpc3Q6Om1hdGNoZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NQU291cmNlTGlzdDo6cGFyc2VTb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NQU291cmNlTGlzdDo6cGFyc2VTY2hlbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NQ
U291cmNlTGlzdDo6cGFyc2VIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTUFNvdXJjZUxpc3Q6
OnBhcnNlUG9ydCk6CisgICAgICAgICAgICAtIEEgYmFzaWMgInNlZ21lbnQgYW5kIHJlY3Vyc2Ui
IHBhcnNlci4gIFRoaXMgcGFyc2VyIGNhdXNlcyB1cyB0bworICAgICAgICAgICAgICB0YWtlIG1v
cmUgYnJhbmNoZXMgdGhhbiB3ZSBuZWVkLCBidXQgSSBkb24ndCB0aGluayB3ZSBuZWVkIHRvCisg
ICAgICAgICAgICAgIHNxdWVlemUgZXZlcnkgbGFzdCBvdWNoIG9mIHBlcmZvcm1hbmNlIG91dCBv
ZiB0aGlzIHBhcnNlci4gIFRoaXMKKyAgICAgICAgICAgICAgYXBwcm9hY2ggaXMgbW9yZSBzaW1w
bGUgdGhhbiBzb21lIG9mIHRoZSBvdGhlciBhcHByb2FjaGVzIEkKKyAgICAgICAgICAgICAgdHJp
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1BTb3VyY2VMaXN0OjphZGRTb3VyY2VTZWxmKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZTo6Q1NQRGlyZWN0aXZlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTUERpcmVjdGl2ZTo6YWxsb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRT
ZWN1cml0eVBvbGljeTo6Q29udGVudFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dFNlY3VyaXR5UG9saWN5OjpwYXJzZURpcmVjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50U2VjdXJpdHlQb2xpY3k6OmFkZERpcmVjdGl2ZSk6CisgICAgICAgICAgICAtIEkgY291bGRu
J3QgcmVzaXN0IHJlLXdyaXRpbmcgdGhpcyBwYXJzZXIgdG8gdXNlIHRoZSBoZWxwZXIKKyAgICAg
ICAgICAgICAgZnVuY3Rpb25zIGFuZCB0byBtYXRjaCB0aGUgc3R5bGUgb2YgdGhlIHNvdXJjZS1s
aXN0IHBhcnNlci4KKyAgICAgICAgKiBwYWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjpjcmVhdGUpOgorICAgICAgICAg
ICAgLSBBY2NlcHQgYSBTZWN1cml0eU9yaWdpbiBjb250ZXh0IG9iamVjdC4KKwogMjAxMS0wMy0y
NCAgU3RlcGhhbmllIExld2lzICA8c2xld2lzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBHZW9mZiBHYXJlbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL1NjcmlwdENv
bnRyb2xsZXJCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9T
Y3JpcHRDb250cm9sbGVyQmFzZS5jcHAJKHJldmlzaW9uIDgxODk4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJv
bGxlci5oIgogCisjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyQ2xpZW50LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDgxODk4
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkNvbW1l
bnQuaCIKICNpbmNsdWRlICJDb25zb2xlLmgiCisjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9s
aWN5LmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiQ3VzdG9tRXZlbnQuaCIK
ICNpbmNsdWRlICJEYXRlQ29tcG9uZW50cy5oIgpAQCAtNDUwMCw3ICs0NTAxLDcgQEAgdm9pZCBE
b2N1bWVudDo6aW5pdFNlY3VyaXR5Q29udGV4dCgpCiAgICAgLy8gbG9hZGluZyBVUkwgd2l0aCBh
IGZyZXNoIGNvbnRlbnQgc2VjdXJpdHkgcG9saWN5LgogICAgIG1fY29va2llVVJMID0gbV91cmw7
CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c2V0U2VjdXJpdHlPcmlnaW4oU2VjdXJpdHlP
cmlnaW46OmNyZWF0ZShtX3VybCwgbV9mcmFtZS0+bG9hZGVyKCktPnNhbmRib3hGbGFncygpKSk7
Ci0gICAgbV9jb250ZW50U2VjdXJpdHlQb2xpY3kgPSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmNy
ZWF0ZSgpOworICAgIG1fY29udGVudFNlY3VyaXR5UG9saWN5ID0gQ29udGVudFNlY3VyaXR5UG9s
aWN5OjpjcmVhdGUoc2VjdXJpdHlPcmlnaW4oKSk7CiAKICAgICBpZiAoU2VjdXJpdHlPcmlnaW46
OmFsbG93U3Vic3RpdHV0ZURhdGFBY2Nlc3NUb0xvY2FsKCkpIHsKICAgICAgICAgLy8gSWYgdGhp
cyBkb2N1bWVudCB3YXMgbG9hZGVkIHdpdGggc3Vic3RpdHV0ZURhdGEsIHRoZW4gdGhlIGRvY3Vt
ZW50IGNhbgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDgxODk4KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYg
QEAKICNpbmNsdWRlICJDb2xsZWN0aW9uVHlwZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5j
bHVkZSAiQ29udGFpbmVyTm9kZS5oIgotI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5o
IgogI2luY2x1ZGUgIkRPTVRpbWVTdGFtcC5oIgogI2luY2x1ZGUgIkRvY3VtZW50T3JkZXJlZE1h
cC5oIgogI2luY2x1ZGUgIkRvY3VtZW50VGltaW5nLmgiCkBAIC01MSwxOSArNTAsMjAgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBBdHRyOwogY2xhc3MgQVhPYmplY3RDYWNoZTsK
K2NsYXNzIEF0dHI7CiBjbGFzcyBDREFUQVNlY3Rpb247CitjbGFzcyBDU1NQcmltaXRpdmVWYWx1
ZUNhY2hlOworY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKK2NsYXNzIENTU1N0eWxlU2VsZWN0
b3I7CitjbGFzcyBDU1NTdHlsZVNoZWV0OwogY2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldDsKIGNs
YXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwogY2xhc3MgQ2FjaGVkU2NyaXB0OwogY2xhc3MgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDsKIGNsYXNzIENoYXJhY3RlckRhdGE7Ci1jbGFzcyBDU1NQcmlt
aXRpdmVWYWx1ZUNhY2hlOwotY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKLWNsYXNzIENTU1N0
eWxlU2VsZWN0b3I7Ci1jbGFzcyBDU1NTdHlsZVNoZWV0OwogY2xhc3MgQ29tbWVudDsKK2NsYXNz
IENvbnRlbnRTZWN1cml0eVBvbGljeTsKIGNsYXNzIERPTUltcGxlbWVudGF0aW9uOwogY2xhc3Mg
RE9NU2VsZWN0aW9uOwogY2xhc3MgRE9NV2luZG93OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1NjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TY3Jp
cHRFbGVtZW50LmNwcAkocmV2aXNpb24gODE4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2Ny
aXB0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1
ZGUgIkNhY2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisj
aW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJEb2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAJ
KHJldmlzaW9uIDgxODk4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3Vt
ZW50UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudFBhcnNlci5oIgogCisjaW5jbHVkZSAi
Q29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgog
I2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA4MTg5OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcg
QEAKICNpbmNsdWRlICJDYWNoZWRQYWdlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xp
Y3kuaCIKICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkRPTVdpbmRv
dy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nv
bnRlbnRTZWN1cml0eVBvbGljeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCShyZXZpc2lvbiA4MTg5OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNDYgKzI1LDM5MCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29udGVu
dFNlY3VyaXR5UG9saWN5LmgiCisKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBpc0RpcmVjdGl2ZU5hbWVDaGFyYWN0ZXIoVUNoYXIg
YykKKy8vIE5vcm1hbGx5IFdlYktpdCB1c2VzICJzdGF0aWMiIGZvciBpbnRlcm5hbCBsaW5rYWdl
LCBidXQgdXNpbmcgInN0YXRpYyIgZm9yCisvLyB0aGVzZSBmdW5jdGlvbnMgY2F1c2VzIGEgY29t
cGlsZSBlcnJvciBiZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBhcworLy8gdGVtcGxh
dGUgcGFyYW1ldGVycy4KK25hbWVzcGFjZSB7CisKK2Jvb2wgaXNEaXJlY3RpdmVOYW1lQ2hhcmFj
dGVyKFVDaGFyIGMpCiB7Ci0gICAgcmV0dXJuIGlzQVNDSUlBbHBoYShjKSB8fCBpc0FTQ0lJRGln
aXQoYykgfHwgYyA9PSAnLSc7CisgICAgcmV0dXJuIGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwg
YyA9PSAnLSc7CiB9CiAKLXN0YXRpYyBib29sIGlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXIoVUNo
YXIgYykKK2Jvb2wgaXNEaXJlY3RpdmVWYWx1ZUNoYXJhY3RlcihVQ2hhciBjKQogewogICAgIHJl
dHVybiBpc0FTQ0lJU3BhY2UoYykgfHwgKGMgPj0gMHgyMSAmJiBjIDw9IDB4N2UpOyAvLyBXaGl0
ZXNwYWNlICsgVkNIQVIKIH0KIAotc3RhdGljIHZvaWQgYWR2YW5jZVVudGlsKGNvbnN0IFVDaGFy
KiYgcG9zLCBjb25zdCBVQ2hhciogZW5kLCBVQ2hhciBkZWxpbWl0ZXIpCitib29sIGlzU291cmNl
Q2hhcmFjdGVyKFVDaGFyIGMpCit7CisgICAgcmV0dXJuICFpc0FTQ0lJU3BhY2UoYyk7Cit9CisK
K2Jvb2wgaXNIb3N0Q2hhcmFjdGVyKFVDaGFyIGMpCiB7Ci0gICAgd2hpbGUgKHBvcyA8IGVuZCkg
ewotICAgICAgICBpZiAoKnBvcysrID09IGRlbGltaXRlcikKLSAgICAgICAgICAgIHJldHVybjsK
KyAgICByZXR1cm4gaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09ICctJzsKK30KKworYm9v
bCBpc1NjaGVtZUNvbnRpbnVhdGlvbkNoYXJhY3RlcihVQ2hhciBjKQoreworICAgIHJldHVybiBp
c0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IGMgPT0gJysnIHx8IGMgPT0gJy0nIHx8IGMgPT0gJy4n
OworfQorCit9IC8vIG5hbWVzcGFjZQorCitzdGF0aWMgYm9vbCBza2lwRXhhY3RseShjb25zdCBV
Q2hhciomIHBvc2l0aW9uLCBjb25zdCBVQ2hhciogZW5kLCBVQ2hhciBkZWxpbWl0ZXIpCit7Cisg
ICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICpwb3NpdGlvbiA9PSBkZWxpbWl0ZXIpIHsKKyAgICAg
ICAgKytwb3NpdGlvbjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgIHJldHVybiBm
YWxzZTsKIH0KIAotY2xhc3MgQ1NQRGlyZWN0aXZlIHsKK3RlbXBsYXRlPGJvb2wgY2hhcmFjdGVy
UHJlZGljYXRlKFVDaGFyKT4KK3N0YXRpYyBib29sIHNraXBFeGFjdGx5KGNvbnN0IFVDaGFyKiYg
cG9zaXRpb24sIGNvbnN0IFVDaGFyKiBlbmQpCit7CisgICAgaWYgKHBvc2l0aW9uIDwgZW5kICYm
IGNoYXJhY3RlclByZWRpY2F0ZSgqcG9zaXRpb24pKSB7CisgICAgICAgICsrcG9zaXRpb247Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRp
YyB2b2lkIHNraXBVdGlsKGNvbnN0IFVDaGFyKiYgcG9zaXRpb24sIGNvbnN0IFVDaGFyKiBlbmQs
IFVDaGFyIGRlbGltaXRlcikKK3sKKyAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0
aW9uICE9IGRlbGltaXRlcikKKyAgICAgICAgKytwb3NpdGlvbjsKK30KKwordGVtcGxhdGU8Ym9v
bCBjaGFyYWN0ZXJQcmVkaWNhdGUoVUNoYXIpPgorc3RhdGljIHZvaWQgc2tpcFdoaWxlKGNvbnN0
IFVDaGFyKiYgcG9zaXRpb24sIGNvbnN0IFVDaGFyKiBlbmQpCit7CisgICAgd2hpbGUgKHBvc2l0
aW9uIDwgZW5kICYmIGNoYXJhY3RlclByZWRpY2F0ZSgqcG9zaXRpb24pKQorICAgICAgICArK3Bv
c2l0aW9uOworfQorCitjbGFzcyBDU1BTb3VyY2UgewogcHVibGljOgotICAgIGV4cGxpY2l0IENT
UERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICA6IG1fdmFsdWUodmFsdWUp
CisgICAgQ1NQU291cmNlKGNvbnN0IFN0cmluZyYgc2NoZW1lLCBjb25zdCBTdHJpbmcmIGhvc3Qs
IGludCBwb3J0LCBib29sIGhvc3RIYXNXaWxkY2FyZCwgYm9vbCBwb3J0SGFzV2lsZGNhcmQpCisg
ICAgICAgIDogbV9zY2hlbWUoc2NoZW1lKQorICAgICAgICAsIG1faG9zdChob3N0KQorICAgICAg
ICAsIG1fcG9ydChwb3J0KQorICAgICAgICAsIG1faG9zdEhhc1dpbGRjYXJkKGhvc3RIYXNXaWxk
Y2FyZCkKKyAgICAgICAgLCBtX3BvcnRIYXNXaWxkY2FyZChwb3J0SGFzV2lsZGNhcmQpCiAgICAg
ewogICAgIH0KIAotICAgIGJvb2wgYWxsb3dzKGNvbnN0IEtVUkwmKQorICAgIGJvb2wgbWF0Y2hl
cyhjb25zdCBLVVJMJiB1cmwpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAoIXNjaGVtZU1hdGNo
ZXModXJsKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGlzU2NoZW1l
T25seSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBob3N0TWF0
Y2hlcyh1cmwpICYmIHBvcnRNYXRjaGVzKHVybCk7CisgICAgfQorCitwcml2YXRlOgorICAgIGJv
b2wgc2NoZW1lTWF0Y2hlcyhjb25zdCBLVVJMJiB1cmwpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UodXJsLnByb3RvY29sKCksIG1fc2NoZW1lKTsKKyAgICB9
CisKKyAgICBib29sIGhvc3RNYXRjaGVzKGNvbnN0IEtVUkwmIHVybCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChtX2hvc3RIYXNXaWxkY2FyZCkKKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVk
KCk7CisKKyAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKHVybC5ob3N0KCksIG1faG9z
dCk7CisgICAgfQorCisgICAgYm9vbCBwb3J0TWF0Y2hlcyhjb25zdCBLVVJMJiB1cmwpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAobV9wb3J0SGFzV2lsZGNhcmQpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgICAgICAvLyBGSVhNRTogSGFuZGxlIGV4cGxpY2l0IGRlZmF1bHQgcG9y
dHMgY29ycmVjdGx5LgorICAgICAgICByZXR1cm4gdXJsLnBvcnQoKSA9PSBtX3BvcnQ7CisgICAg
fQorCisgICAgYm9vbCBpc1NjaGVtZU9ubHkoKSBjb25zdCB7IHJldHVybiBtX2hvc3QuaXNFbXB0
eSgpOyB9CisKKyAgICBTdHJpbmcgbV9zY2hlbWU7CisgICAgU3RyaW5nIG1faG9zdDsKKyAgICBp
bnQgbV9wb3J0OworCisgICAgYm9vbCBtX2hvc3RIYXNXaWxkY2FyZDsKKyAgICBib29sIG1fcG9y
dEhhc1dpbGRjYXJkOworfTsKKworY2xhc3MgQ1NQU291cmNlTGlzdCB7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgQ1NQU291cmNlTGlzdChTZWN1cml0eU9yaWdpbiopOworCisgICAgdm9pZCBwYXJz
ZShjb25zdCBTdHJpbmcmKTsKKyAgICBib29sIG1hdGNoZXMoY29uc3QgS1VSTCYpOworCitwcml2
YXRlOgorICAgIHZvaWQgcGFyc2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5k
KTsKKworICAgIGJvb2wgcGFyc2VTb3VyY2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hh
ciogZW5kLCBTdHJpbmcmIHNjaGVtZSwgU3RyaW5nJiBob3N0LCBpbnQmIHBvcnQsIGJvb2wmIGhv
c3RIYXNXaWxkY2FyZCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKTsKKyAgICBib29sIHBhcnNlU2No
ZW1lKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUp
OworICAgIGJvb2wgcGFyc2VIb3N0KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVu
ZCwgU3RyaW5nJiBob3N0LCBib29sJiBob3N0SGFzV2lsZGNhcmQpOworICAgIGJvb2wgcGFyc2VQ
b3J0KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgaW50JiBwb3J0LCBib29s
JiBwb3J0SGFzV2lsZGNhcmQpOworCisgICAgdm9pZCBhZGRTb3VyY2VTZWxmKCk7CisKKyAgICBT
ZWN1cml0eU9yaWdpbiogbV9vcmlnaW47CisgICAgVmVjdG9yPENTUFNvdXJjZT4gbV9saXN0Owor
fTsKKworQ1NQU291cmNlTGlzdDo6Q1NQU291cmNlTGlzdChTZWN1cml0eU9yaWdpbiogb3JpZ2lu
KQorICAgIDogbV9vcmlnaW4ob3JpZ2luKQoreworfQorCit2b2lkIENTUFNvdXJjZUxpc3Q6OnBh
cnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgcGFyc2UodmFsdWUuY2hhcmFjdGVycygp
LCB2YWx1ZS5jaGFyYWN0ZXJzKCkgKyB2YWx1ZS5sZW5ndGgoKSk7Cit9CisKK2Jvb2wgQ1NQU291
cmNlTGlzdDo6bWF0Y2hlcyhjb25zdCBLVVJMJiB1cmwpCit7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2xpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fbGlzdFtpXS5tYXRj
aGVzKHVybCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCisvLyBzb3VyY2UtbGlzdCAgICAgICA9ICpXU1AgWyBzb3VyY2UgKiggMSpXU1Ag
c291cmNlICkgKldTUCBdCisvLyAgICAgICAgICAgICAgICAgICAvICpXU1AgIidub25lJyIgKldT
UAorLy8KK3ZvaWQgQ1NQU291cmNlTGlzdDo6cGFyc2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25z
dCBVQ2hhciogZW5kKQoreworICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOworCisg
ICAgYm9vbCBpc0ZpcnN0U291cmNlSW5MaXN0ID0gdHJ1ZTsKKyAgICB3aGlsZSAocG9zaXRpb24g
PCBlbmQpIHsKKyAgICAgICAgc2tpcFdoaWxlPGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7
CisgICAgICAgIGNvbnN0IFVDaGFyKiBiZWdpblNvdXJjZSA9IHBvc2l0aW9uOworICAgICAgICBz
a2lwV2hpbGU8aXNTb3VyY2VDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOworCisgICAgICAgIGlm
IChpc0ZpcnN0U291cmNlSW5MaXN0ICYmIGVxdWFsSWdub3JpbmdDYXNlKCInbm9uZSciLCBiZWdp
blNvdXJjZSwgcG9zaXRpb24gLSBiZWdpblNvdXJjZSkpCisgICAgICAgICAgICByZXR1cm47IC8v
IFdlIHJlcHJlc2VudCAnbm9uZScgYXMgYW4gZW1wdHkgbV9saXN0LgorICAgICAgICBpc0ZpcnN0
U291cmNlSW5MaXN0ID0gZmFsc2U7CisKKyAgICAgICAgU3RyaW5nIHNjaGVtZSwgaG9zdDsKKyAg
ICAgICAgaW50IHBvcnQgPSAwOworICAgICAgICBib29sIGhvc3RIYXNXaWxkY2FyZCA9IGZhbHNl
OworICAgICAgICBib29sIHBvcnRIYXNXaWxkY2FyZCA9IGZhbHNlOworCisgICAgICAgIGlmIChw
YXJzZVNvdXJjZShiZWdpblNvdXJjZSwgcG9zaXRpb24sIHNjaGVtZSwgaG9zdCwgcG9ydCwgaG9z
dEhhc1dpbGRjYXJkLCBwb3J0SGFzV2lsZGNhcmQpKSB7CisgICAgICAgICAgICBpZiAoc2NoZW1l
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBzY2hlbWUgPSBtX29yaWdpbi0+cHJvdG9jb2wo
KTsKKyAgICAgICAgICAgIG1fbGlzdC5hcHBlbmQoQ1NQU291cmNlKHNjaGVtZSwgaG9zdCwgcG9y
dCwgaG9zdEhhc1dpbGRjYXJkLCBwb3J0SGFzV2lsZGNhcmQpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEFTU0VSVChwb3NpdGlvbiA9PSBlbmQgfHwgaXNBU0NJSVNwYWNlKCpwb3NpdGlvbikpOwor
ICAgICB9Cit9CisKKy8vIHNvdXJjZSAgICAgICAgICAgID0gc2NoZW1lICI6IgorLy8gICAgICAg
ICAgICAgICAgICAgLyAoIFsgc2NoZW1lICI6Ly8iIF0gaG9zdCBbIHBvcnQgXSApCisvLyAgICAg
ICAgICAgICAgICAgICAvICInc2VsZiciCisvLworYm9vbCBDU1BTb3VyY2VMaXN0OjpwYXJzZVNv
dXJjZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFN0cmluZyYgc2NoZW1lLCBTdHJpbmcmIGhvc3QsIGludCYgcG9y
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgaG9zdEhhc1dpbGRjYXJk
LCBib29sJiBwb3J0SGFzV2lsZGNhcmQpCit7CisgICAgaWYgKGJlZ2luID09IGVuZCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKCInc2VsZiciLCBi
ZWdpbiwgZW5kIC0gYmVnaW4pKSB7CisgICAgICAgIGFkZFNvdXJjZVNlbGYoKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2lu
OworCisgICAgY29uc3QgVUNoYXIqIGJlZ2luSG9zdCA9IGJlZ2luOworICAgIHNraXBVdGlsKHBv
c2l0aW9uLCBlbmQsICc6Jyk7CisKKyAgICBpZiAocG9zaXRpb24gPT0gZW5kKSB7CisgICAgICAg
IC8vIFRoaXMgbXVzdCBiZSBhIGhvc3Qtb25seSBzb3VyY2UuCisgICAgICAgIGlmICghcGFyc2VI
b3N0KGJlZ2luSG9zdCwgcG9zaXRpb24sIGhvc3QsIGhvc3RIYXNXaWxkY2FyZCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlm
IChlbmQgLSBwb3NpdGlvbiA9PSAxKSB7CisgICAgICAgIEFTU0VSVCgqcG9zaXRpb24gPT0gJzon
KTsKKyAgICAgICAgLy8gVGhpcyBtdXN0IGJlIGEgc2NoZW1lLW9ubHkgc291cmNlLgorICAgICAg
ICBpZiAoIXBhcnNlU2NoZW1lKGJlZ2luLCBwb3NpdGlvbiwgc2NoZW1lKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQVNTRVJU
KGVuZCAtIHBvc2l0aW9uID49IDIpOworICAgIGlmIChwb3NpdGlvblsxXSA9PSAnLycpIHsKKyAg
ICAgICAgaWYgKCFwYXJzZVNjaGVtZShiZWdpbiwgcG9zaXRpb24sIHNjaGVtZSkKKyAgICAgICAg
ICAgIHx8ICFza2lwRXhhY3RseShwb3NpdGlvbiwgZW5kLCAnOicpCisgICAgICAgICAgICB8fCAh
c2tpcEV4YWN0bHkocG9zaXRpb24sIGVuZCwgJy8nKQorICAgICAgICAgICAgfHwgIXNraXBFeGFj
dGx5KHBvc2l0aW9uLCBlbmQsICcvJykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGJlZ2luSG9zdCA9IHBvc2l0aW9uOworICAgICAgICBza2lwVXRpbChwb3NpdGlvbiwgZW5k
LCAnOicpOworICAgIH0KKworICAgIGlmIChwb3NpdGlvbiA9PSBiZWdpbkhvc3QpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghcGFyc2VIb3N0KGJlZ2luSG9zdCwgcG9zaXRpb24s
IGhvc3QsIGhvc3RIYXNXaWxkY2FyZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
IChwb3NpdGlvbiA9PSBlbmQpIHsKKyAgICAgICAgcG9ydCA9IDA7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIGlmICghc2tpcEV4YWN0bHkocG9zaXRpb24sIGVuZCwgJzonKSkK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBpZiAoIXBhcnNlUG9ydChwb3Np
dGlvbiwgZW5kLCBwb3J0LCBwb3J0SGFzV2lsZGNhcmQpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gICAgICAgICAgICAgICAgICAgICA7IDxzY2hl
bWU+IHByb2R1Y3Rpb24gZnJvbSBSRkMgMzk4NgorLy8gc2NoZW1lICAgICAgPSBBTFBIQSAqKCBB
TFBIQSAvIERJR0lUIC8gIisiIC8gIi0iIC8gIi4iICkKKy8vCitib29sIENTUFNvdXJjZUxpc3Q6
OnBhcnNlU2NoZW1lKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5n
JiBzY2hlbWUpCit7CisgICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7CisgICAgQVNTRVJUKHNjaGVt
ZS5pc0VtcHR5KCkpOworCisgICAgaWYgKGJlZ2luID09IGVuZCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47CisKKyAgICBpZiAoIXNr
aXBFeGFjdGx5PGlzQVNDSUlBbHBoYT4ocG9zaXRpb24sIGVuZCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHNraXBXaGlsZTxpc1NjaGVtZUNvbnRpbnVhdGlvbkNoYXJhY3Rlcj4ocG9z
aXRpb24sIGVuZCk7CisKKyAgICBpZiAocG9zaXRpb24gIT0gZW5kKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBzY2hlbWUgPSBTdHJpbmcoYmVnaW4sIGVuZCAtIGJlZ2luKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworLy8gaG9zdCAgICAgICAgICAgICAgPSBbICIqLiIgXSAxKmhvc3Qt
Y2hhciAqKCAiLiIgMSpob3N0LWNoYXIgKQorLy8gICAgICAgICAgICAgICAgICAgLyAiKiIKKy8v
IGhvc3QtY2hhciAgICAgICAgID0gQUxQSEEgLyBESUdJVCAvICItIgorLy8KK2Jvb2wgQ1NQU291
cmNlTGlzdDo6cGFyc2VIb3N0KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwg
U3RyaW5nJiBob3N0LCBib29sJiBob3N0SGFzV2lsZGNhcmQpCit7CisgICAgQVNTRVJUKGJlZ2lu
IDw9IGVuZCk7CisgICAgQVNTRVJUKGhvc3QuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIWhvc3RI
YXNXaWxkY2FyZCk7CisKKyAgICBpZiAoYmVnaW4gPT0gZW5kKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKKworICAgIGlmIChza2lw
RXhhY3RseShwb3NpdGlvbiwgZW5kLCAnKicpKSB7CisgICAgICAgIGhvc3RIYXNXaWxkY2FyZCA9
IHRydWU7CisKKyAgICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgICAgIGlmICghc2tpcEV4YWN0bHkocG9zaXRpb24sIGVuZCwgJy4nKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBVQ2hhciogaG9z
dEJlZ2luID0gcG9zaXRpb247CisKKyAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKKyAgICAg
ICAgaWYgKCFza2lwRXhhY3RseTxpc0hvc3RDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHNraXBXaGlsZTxpc0hvc3RDaGFyYWN0
ZXI+KHBvc2l0aW9uLCBlbmQpOworCisgICAgICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAhc2tp
cEV4YWN0bHkocG9zaXRpb24sIGVuZCwgJy4nKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kKTsKKyAgICBob3N0ID0gU3RyaW5n
KGhvc3RCZWdpbiwgZW5kIC0gaG9zdEJlZ2luKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8g
cG9ydCAgICAgICAgICAgICAgPSAiOiIgKCAxKkRJR0lUIC8gIioiICkKKy8vCitib29sIENTUFNv
dXJjZUxpc3Q6OnBhcnNlUG9ydChjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQs
IGludCYgcG9ydCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKQoreworICAgIEFTU0VSVChiZWdpbiA8
PSBlbmQpOworICAgIEFTU0VSVCghcG9ydCk7CisgICAgQVNTRVJUKCFwb3J0SGFzV2lsZGNhcmQp
OworCisgICAgaWYgKGJlZ2luID09IGVuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKGVuZCAtIGJlZ2luID09IDEgJiYgKmJlZ2luID09ICcqJykgeworICAgICAgICBwb3J0ID0g
MDsKKyAgICAgICAgcG9ydEhhc1dpbGRjYXJkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47CisgICAgc2tpcFdo
aWxlPGlzQVNDSUlEaWdpdD4ocG9zaXRpb24sIGVuZCk7CisKKyAgICBpZiAocG9zaXRpb24gIT0g
ZW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIG9rOworICAgIHBvcnQgPSBj
aGFyYWN0ZXJzVG9JbnRTdHJpY3QoYmVnaW4sIGVuZCAtIGJlZ2luLCAmb2spOworICAgIHJldHVy
biBvazsKK30KKwordm9pZCBDU1BTb3VyY2VMaXN0OjphZGRTb3VyY2VTZWxmKCkKK3sKKyAgICAv
LyBGSVhNRTogSW5oZXJpdCB0aGUgc2NoZW1lLCBob3N0LCBhbmQgcG9ydCBmcm9tIHRoZSBjdXJy
ZW50IFVSTC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitjbGFzcyBDU1BEaXJlY3RpdmUg
eworcHVibGljOgorICAgIENTUERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIHZhbHVlLCBTZWN1cml0
eU9yaWdpbiogb3JpZ2luKQorICAgICAgICA6IG1fc291cmNlTGlzdChvcmlnaW4pCisgICAgewor
ICAgICAgICBtX3NvdXJjZUxpc3QucGFyc2UodmFsdWUpOworICAgIH0KKworICAgIGJvb2wgYWxs
b3dzKGNvbnN0IEtVUkwmIHVybCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NvdXJjZUxpc3Qu
bWF0Y2hlcyh1cmwpOworICAgIH0KKwogcHJpdmF0ZToKLSAgICBTdHJpbmcgbV92YWx1ZTsKKyAg
ICBDU1BTb3VyY2VMaXN0IG1fc291cmNlTGlzdDsKIH07CiAKLUNvbnRlbnRTZWN1cml0eVBvbGlj
eTo6Q29udGVudFNlY3VyaXR5UG9saWN5KCkKK0NvbnRlbnRTZWN1cml0eVBvbGljeTo6Q29udGVu
dFNlY3VyaXR5UG9saWN5KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiAgICAgOiBtX2hhdmVQb2xp
Y3koZmFsc2UpCisgICAgLCBtX29yaWdpbihvcmlnaW4pCiB7CiB9CiAKQEAgLTkxLDYgKzQzNSw5
IEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjpjYW5Mb2FkRXh0ZXIKICAgICByZXR1cm4g
IW1fc2NyaXB0U3JjIHx8IG1fc2NyaXB0U3JjLT5hbGxvd3MoS1VSTChQYXJzZWRVUkxTdHJpbmcs
IHVybCkpOwogfQogCisvLyBwb2xpY3kgICAgICAgICAgICA9IGRpcmVjdGl2ZS1saXN0CisvLyBk
aXJlY3RpdmUtbGlzdCAgICA9IFsgZGlyZWN0aXZlICooICI7IiBbIGRpcmVjdGl2ZSBdICkgXQor
Ly8KIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjpwYXJzZShjb25zdCBTdHJpbmcmIHBvbGlj
eSkKIHsKICAgICBBU1NFUlQoIW1faGF2ZVBvbGljeSk7CkBAIC05OCw4NCArNDQ1LDc1IEBAIHZv
aWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjpwYXJzZShjb25zdCAKICAgICBpZiAocG9saWN5Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgVUNoYXIqIHBvcyA9IHBvbGlj
eS5jaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHBvcyArIHBvbGljeS5sZW5n
dGgoKTsKKyAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBwb2xpY3kuY2hhcmFjdGVycygpOwor
ICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwb3NpdGlvbiArIHBvbGljeS5sZW5ndGgoKTsKIAotICAg
IHdoaWxlIChwb3MgPCBlbmQpIHsKLSAgICAgICAgVmVjdG9yPFVDaGFyLCAzMj4gbmFtZTsKLSAg
ICAgICAgVmVjdG9yPFVDaGFyLCA2ND4gdmFsdWU7Ci0KLSAgICAgICAgaWYgKCFwYXJzZURpcmVj
dGl2ZShwb3MsIGVuZCwgbmFtZSwgdmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgIHdoaWxl
IChwb3NpdGlvbiA8IGVuZCkgeworICAgICAgICBjb25zdCBVQ2hhciogZGlyZWN0aXZlQmVnaW4g
PSBwb3NpdGlvbjsKKyAgICAgICAgc2tpcFV0aWwocG9zaXRpb24sIGVuZCwgJzsnKTsKKworICAg
ICAgICBTdHJpbmcgbmFtZSwgdmFsdWU7CisgICAgICAgIGlmIChwYXJzZURpcmVjdGl2ZShkaXJl
Y3RpdmVCZWdpbiwgcG9zaXRpb24sIG5hbWUsIHZhbHVlKSkgeworICAgICAgICAgICAgQVNTRVJU
KCFuYW1lLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBhZGREaXJlY3RpdmUobmFtZSwgdmFsdWUp
OworICAgICAgICB9CiAKLSAgICAgICAgLy8gV2UgdXNlIGEgY29weSBoZXJlIGluc3RlYWQgb2Yg
U3RyaW5nOjphZG9wdCBiZWNhdXNlIHdlIGV4cGVjdAotICAgICAgICAvLyB0aGUgbmFtZSBhbmQg
dGhlIHZhbHVlIHRvIGJlIHJlbGF0aXZlbHkgc2hvcnQsIHNvIHRoZSBjb3B5IHdpbGwKLSAgICAg
ICAgLy8gYmUgY2hlYXBlciB0aGFuIHRoZSBleHRyYSBtYWxsb2MuCi0gICAgICAgIGVtaXREaXJl
Y3RpdmUoU3RyaW5nKG5hbWUpLCBTdHJpbmcodmFsdWUpKTsKKyAgICAgICAgQVNTRVJUKHBvc2l0
aW9uID09IGVuZCB8fCAqcG9zaXRpb24gPT0gJzsnKTsKKyAgICAgICAgc2tpcEV4YWN0bHkocG9z
aXRpb24sIGVuZCwgJzsnKTsKICAgICB9CiB9CiAKLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5
OjpwYXJzZURpcmVjdGl2ZShjb25zdCBVQ2hhciomIHBvcywgY29uc3QgVUNoYXIqIGVuZCwgVmVj
dG9yPFVDaGFyLCAzMj4mIG5hbWUsIFZlY3RvcjxVQ2hhciwgNjQ+JiB2YWx1ZSkKKy8vIGRpcmVj
dGl2ZSAgICAgICAgID0gKldTUCBbIGRpcmVjdGl2ZS1uYW1lIFsgV1NQIGRpcmVjdGl2ZS12YWx1
ZSBdIF0KKy8vIGRpcmVjdGl2ZS1uYW1lICAgID0gMSooIEFMUEhBIC8gRElHSVQgLyAiLSIgKQor
Ly8gZGlyZWN0aXZlLXZhbHVlICAgPSAqKCBXU1AgLyA8VkNIQVIgZXhjZXB0ICI7Ij4gKQorLy8K
K2Jvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjpwYXJzZURpcmVjdGl2ZShjb25zdCBVQ2hhciog
YmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgbmFtZSwgU3RyaW5nJiB2YWx1ZSkKIHsK
LSAgICBBU1NFUlQocG9zIDwgZW5kKTsKICAgICBBU1NFUlQobmFtZS5pc0VtcHR5KCkpOwogICAg
IEFTU0VSVCh2YWx1ZS5pc0VtcHR5KCkpOwogCi0gICAgd2hpbGUgKHBvcyA8IGVuZCAmJiBpc0FT
Q0lJU3BhY2UoKnBvcykpCi0gICAgICAgIHBvcysrOworICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlv
biA9IGJlZ2luOworICAgIHNraXBXaGlsZTxpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwog
Ci0gICAgd2hpbGUgKHBvcyA8IGVuZCkgewotICAgICAgICBVQ2hhciBjdXJyZW50Q2hhcmFjdGVy
ID0gKnBvczsKLSAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIgPT0gJzsnKQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGlmIChpc0FTQ0lJU3BhY2UoY3VycmVudENoYXJhY3RlcikpCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKCFpc0RpcmVjdGl2ZU5hbWVDaGFyYWN0ZXIo
Y3VycmVudENoYXJhY3RlcikpIHsKLSAgICAgICAgICAgIGFkdmFuY2VVbnRpbChwb3MsIGVuZCwg
JzsnKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBuYW1l
LmFwcGVuZChjdXJyZW50Q2hhcmFjdGVyKTsKLSAgICAgICAgcG9zKys7Ci0gICAgfQorICAgIGNv
bnN0IFVDaGFyKiBuYW1lQmVnaW4gPSBwb3NpdGlvbjsKKyAgICBza2lwV2hpbGU8aXNEaXJlY3Rp
dmVOYW1lQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKworICAgIC8vIFRoZSBkaXJlY3RpdmUt
bmFtZSBtdXN0IGJlIG5vbi1lbXB0eS4KKyAgICBpZiAobmFtZUJlZ2luID09IHBvc2l0aW9uKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB3aGlsZSAocG9zIDwgZW5kICYmIGlzQVNDSUlT
cGFjZSgqcG9zKSkKLSAgICAgICAgcG9zKys7CisgICAgbmFtZSA9IFN0cmluZyhuYW1lQmVnaW4s
IHBvc2l0aW9uIC0gbmFtZUJlZ2luKTsKIAotICAgIGlmIChwb3MgPCBlbmQgJiYgKnBvcyA9PSAn
OycpIHsKLSAgICAgICAgcG9zKys7CisgICAgaWYgKHBvc2l0aW9uID09IGVuZCkKICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQogCi0gICAgd2hpbGUgKHBvcyA8IGVuZCkgewotICAgICAgICBV
Q2hhciBjdXJyZW50Q2hhcmFjdGVyID0gKnBvczsKLSAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0
ZXIgPT0gJzsnKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICghaXNEaXJlY3RpdmVW
YWx1ZUNoYXJhY3RlcihjdXJyZW50Q2hhcmFjdGVyKSkgewotICAgICAgICAgICAgYWR2YW5jZVVu
dGlsKHBvcywgZW5kLCAnOycpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIHZhbHVlLmFwcGVuZChjdXJyZW50Q2hhcmFjdGVyKTsKLSAgICAgICAgcG9zKys7
Ci0gICAgfQorICAgIGlmICghc2tpcEV4YWN0bHk8aXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5k
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHBvcyA8IGVuZCAmJiAqcG9zID09
ICc7JykgewotICAgICAgICBwb3MrKzsKKyAgICBza2lwV2hpbGU8aXNBU0NJSVNwYWNlPihwb3Np
dGlvbiwgZW5kKTsKKworICAgIGNvbnN0IFVDaGFyKiB2YWx1ZUJlZ2luID0gcG9zaXRpb247Cisg
ICAgc2tpcFdoaWxlPGlzRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwor
CisgICAgaWYgKHBvc2l0aW9uICE9IGVuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ly8gVGhlIGRpcmVjdGl2ZS12YWx1ZSBtYXkgYmUgZW1wdHkuCisgICAgaWYgKHZhbHVlQmVnaW4g
PT0gcG9zaXRpb24pCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KIAorICAgIHZhbHVlID0g
U3RyaW5nKHZhbHVlQmVnaW4sIHBvc2l0aW9uIC0gdmFsdWVCZWdpbik7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjplbWl0RGlyZWN0aXZlKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgQ29udGVudFNlY3VyaXR5
UG9saWN5OjphZGREaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBzY3JpcHRTcmMsICgic2Ny
aXB0LXNyYyIpKTsKIAogICAgIEFTU0VSVCghbmFtZS5pc0VtcHR5KCkpOwogCiAgICAgaWYgKCFt
X3NjcmlwdFNyYyAmJiBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCBzY3JpcHRTcmMpKQotICAgICAg
ICBtX3NjcmlwdFNyYyA9IGFkb3B0UHRyKG5ldyBDU1BEaXJlY3RpdmUodmFsdWUpKTsKKyAgICAg
ICAgbV9zY3JpcHRTcmMgPSBhZG9wdFB0cihuZXcgQ1NQRGlyZWN0aXZlKHZhbHVlLCBtX29yaWdp
bi5nZXQoKSkpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRlbnRTZWN1
cml0eVBvbGljeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGVudFNl
Y3VyaXR5UG9saWN5LmgJKHJldmlzaW9uIDgxODk4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9D
b250ZW50U2VjdXJpdHlQb2xpY3kuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDE0IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTUERpcmVjdGl2ZTsKK2NsYXNzIFNlY3Vy
aXR5T3JpZ2luOwogCiBjbGFzcyBDb250ZW50U2VjdXJpdHlQb2xpY3kgOiBwdWJsaWMgUmVmQ291
bnRlZDxDb250ZW50U2VjdXJpdHlQb2xpY3k+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDb250ZW50U2VjdXJpdHlQb2xpY3k+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDb250ZW50U2VjdXJpdHlQb2xpY3kpOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29udGVu
dFNlY3VyaXR5UG9saWN5PiBjcmVhdGUoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IDApCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbnRlbnRTZWN1cml0eVBvbGljeShvcmln
aW4pKTsKKyAgICB9CiAgICAgfkNvbnRlbnRTZWN1cml0eVBvbGljeSgpOwogCiAgICAgdm9pZCBk
aWRSZWNlaXZlSGVhZGVyKGNvbnN0IFN0cmluZyYpOwpAQCAtNDUsMTMgKzQ5LDE0IEBAIHB1Ymxp
YzoKICAgICBib29sIGNhbkxvYWRFeHRlcm5hbFNjcmlwdEZyb21TcmMoY29uc3QgU3RyaW5nJiB1
cmwpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIENvbnRlbnRTZWN1cml0eVBvbGljeSgpOworICAg
IGV4cGxpY2l0IENvbnRlbnRTZWN1cml0eVBvbGljeShTZWN1cml0eU9yaWdpbiopOwogCiAgICAg
dm9pZCBwYXJzZShjb25zdCBTdHJpbmcmKTsKLSAgICBib29sIHBhcnNlRGlyZWN0aXZlKGNvbnN0
IFVDaGFyKiYgcG9zLCBjb25zdCBVQ2hhciogZW5kLCBWZWN0b3I8VUNoYXIsIDMyPiYgbmFtZSwg
VmVjdG9yPFVDaGFyLCA2ND4mIHZhbHVlKTsKLSAgICB2b2lkIGVtaXREaXJlY3RpdmUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICBib29sIHBhcnNlRGlyZWN0
aXZlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBuYW1lLCBT
dHJpbmcmIHZhbHVlKTsKKyAgICB2b2lkIGFkZERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmFsdWUpOwogCiAgICAgYm9vbCBtX2hhdmVQb2xpY3k7CisgICAgUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiBtX29yaWdpbjsKICAgICBPd25QdHI8Q1NQRGlyZWN0aXZlPiBt
X3NjcmlwdFNyYzsKIH07CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxOTM5KQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDMtMjQg
IEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZWFjaCBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBo
b3cgdG8gcGFyc2Ugc291cmNlLWxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU0Nzk5CisKKyAgICAgICAgVGVzdCBhIHZhcmlldHkgb2Ygc291cmNl
LWxpc3QgcGFyc2luZyBjYXNlcy4gIFRoZXJlJ3MgYSBidW5jaCBtb3JlCisgICAgICAgIGNhc2Vz
IHdlIGNvdWxkIGJlIHRlc3RpbmcuICBXZSdsbCBhZGQgbW9yZSBvdmVyIHRpbWUuCisKKyAgICAg
ICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9zb3VyY2UtbGlz
dC1wYXJzaW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1
cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvc291cmNlLWxpc3QtcGFyc2luZy5odG1sOiBBZGRl
ZC4KKwogMjAxMS0wMy0yNCAgSWx5YSBTaGVybWFuICA8aXNoZXJtYW5AY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9zb3VyY2UtbGlzdC1wYXJzaW5n
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3Vy
aXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9zb3VyY2UtbGlzdC1wYXJzaW5nLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVu
dFNlY3VyaXR5UG9saWN5L3NvdXJjZS1saXN0LXBhcnNpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDkzIEBACitOb25lIG9mIHRoZXNlIHNjcmlwdHMgc2hvdWxkIGV4ZWN1
dGUgZXZlbiB0aG91Z2ggdGhlcmUgYXJlIHBhcnNlIGVycm9ycyBpbiB0aGUgcG9saWN5LgorCisg
ICAgICAgICAgICAgICAgIAorCistLS0tLS0tLQorRnJhbWU6ICc8IS0tZnJhbWVQYXRoIC8vPCEt
LWZyYW1lMC0tPi0tPicKKy0tLS0tLS0tCitQQVNTCisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1m
cmFtZVBhdGggLy88IS0tZnJhbWUxLS0+LS0+JworLS0tLS0tLS0KK1BBU1MKKworLS0tLS0tLS0K
K0ZyYW1lOiAnPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTItLT4tLT4nCistLS0tLS0tLQorUEFT
UworCistLS0tLS0tLQorRnJhbWU6ICc8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMy0tPi0tPicK
Ky0tLS0tLS0tCitQQVNTCisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88IS0t
ZnJhbWU0LS0+LS0+JworLS0tLS0tLS0KK1BBU1MKKworLS0tLS0tLS0KK0ZyYW1lOiAnPCEtLWZy
YW1lUGF0aCAvLzwhLS1mcmFtZTUtLT4tLT4nCistLS0tLS0tLQorUEFTUworCistLS0tLS0tLQor
RnJhbWU6ICc8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lNi0tPi0tPicKKy0tLS0tLS0tCitQQVNT
CisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWU3LS0+LS0+Jwor
LS0tLS0tLS0KK1BBU1MKKworLS0tLS0tLS0KK0ZyYW1lOiAnPCEtLWZyYW1lUGF0aCAvLzwhLS1m
cmFtZTgtLT4tLT4nCistLS0tLS0tLQorUEFTUworCistLS0tLS0tLQorRnJhbWU6ICc8IS0tZnJh
bWVQYXRoIC8vPCEtLWZyYW1lOS0tPi0tPicKKy0tLS0tLS0tCitQQVNTCisKKy0tLS0tLS0tCitG
cmFtZTogJzwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUxMC0tPi0tPicKKy0tLS0tLS0tCitQQVNT
CisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUxMS0tPi0tPicK
Ky0tLS0tLS0tCitQQVNTCisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88IS0t
ZnJhbWUxMi0tPi0tPicKKy0tLS0tLS0tCitQQVNTCisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1m
cmFtZVBhdGggLy88IS0tZnJhbWUxMy0tPi0tPicKKy0tLS0tLS0tCitQQVNTCisKKy0tLS0tLS0t
CitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUxNC0tPi0tPicKKy0tLS0tLS0tCitQ
QVNTCisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUxNS0tPi0t
PicKKy0tLS0tLS0tCitQQVNTCisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88
IS0tZnJhbWUxNi0tPi0tPicKKy0tLS0tLS0tCitQQVNTCisKKy0tLS0tLS0tCitGcmFtZTogJzwh
LS1mcmFtZVBhdGggLy88IS0tZnJhbWUxNy0tPi0tPicKKy0tLS0tLS0tCitQQVNTCkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9zb3Vy
Y2UtbGlzdC1wYXJzaW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvc291cmNlLWxpc3QtcGFyc2luZy5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50
U2VjdXJpdHlQb2xpY3kvc291cmNlLWxpc3QtcGFyc2luZy5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQ2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0Pgor
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBDaGlsZEZyYW1lc0Fz
VGV4dCgpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgPHA+CisgICAgTm9uZSBv
ZiB0aGVzZSBzY3JpcHRzIHNob3VsZCBleGVjdXRlIGV2ZW4gdGhvdWdoIHRoZXJlIGFyZSBwYXJz
ZSBlcnJvcnMgaW4gdGhlIHBvbGljeS4KKyAgPC9wPgorPHNjcmlwdD4KK2Z1bmN0aW9uIHRlc3Qo
c2hvdWxkUnVuLCBwb2xpY3kpIHsKKyAgICBkb2N1bWVudC53cml0ZSgnPGlmcmFtZSBzcmM9Imh0
dHA6Ly8xMjcuMC4wLjE6ODAwMC9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvcmVzb3Vy
Y2VzL2VjaG8tc2NyaXB0LXNyYy5wbD9zaG91bGRfcnVuPScpOworICAgIGRvY3VtZW50LndyaXRl
KHNob3VsZFJ1bik7CisgICAgZG9jdW1lbnQud3JpdGUoJyZxPWh0dHA6Ly8xMjcuMC4wLjE6ODAw
MC9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvcmVzb3VyY2VzL3NjcmlwdC5qcyZjc3A9
Jyk7CisgICAgZG9jdW1lbnQud3JpdGUoZXNjYXBlKHBvbGljeSkpOworICAgIGRvY3VtZW50Lndy
aXRlKCciPjwvaWZyYW1lPlxuJyk7Cit9CisKKwordGVzdCgneWVzJywgJ3NjcmlwdC1zcmMgMTI3
LjAuMC4xOjgwMDAnKTsKK3Rlc3QoJ3llcycsICdzY3JpcHQtc3JjIGh0dHA6Ly8xMjcuMC4wLjE6
ODAwMCcpOwordGVzdCgnbm8nLCAgJ3NjcmlwdC1zcmMgaHR0cHM6Ly8xMjcuMC4wLjE6ODAwMCcp
OwordGVzdCgnbm8nLCAgJ3NjcmlwdC1zcmMgaHR0cHM6Ly8xMjcuMC4wLjE6KicpOwordGVzdCgn
bm8nLCAgJ3NjcmlwdC1zcmMgaHR0cHM6Ly8xMjcuMC4wLjE6KiAgJyk7Cit0ZXN0KCdubycsICAn
c2NyaXB0LXNyYyBodHRwczovLzEyNy4/LjAuMToqJyk7Cit0ZXN0KCd5ZXMnLCAnc2NyaXB0LXNy
YyBodHRwczovLzEyNy4wLjAuMTpcdCogICcpOwordGVzdCgneWVzJywgJ3NjcmlwdC1zcmNcdGh0
dHA6Ly8xMjcuMC4wLjE6ODAwMCcpOwordGVzdCgneWVzJywgJ3NjcmlwdC1zcmMgaHR0cDovLzEy
Ny4wLjAuMTo4MDAwICAgXHQgJyk7Cit0ZXN0KCd5ZXMnLCAnc2NyaXB0LXNyYyBodHRwOi8vMTI3
LjAuMC4xOiogJyk7Cit0ZXN0KCd5ZXMnLCAnc2NyaXB0LXNyYyBodHRwOicpOwordGVzdCgnbm8n
LCAgJ3NjcmlwdC1zcmMgaHR0cHM6Jyk7Cit0ZXN0KCdubycsICAnc2NyaXB0LXNyYyAgICBodHRw
czogICcpOwordGVzdCgnbm8nLCAgJ3NjcmlwdC1zcmMgICAgaHR0cHM6Ly8nKTsKK3Rlc3QoJ25v
JywgICdzY3JpcHQtc3JjIGh0dHBzOiAgdGFjbycpOwordGVzdCgneWVzJywgJ3NjcmlwdC1zcmMg
aHR0cHM6ICBceDA4Jyk7Cit0ZXN0KCdubycsICAnc2NyaXB0LXNyYyBcJ25vbmVcJycpOwordGVz
dCgneWVzJywgJ1x0XHRcdHNjcmlwdC1zcmMgICAgaHR0cDovLzEyNy4wLjAuMTo4MDAwICBcdFx0
ICBodHRwczonKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>