<?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>160811</bug_id>
          
          <creation_ts>2016-08-12 12:09:10 -0700</creation_ts>
          <short_desc>Initial URLParser implementation</short_desc>
          <delta_ts>2016-08-19 11:38:19 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>beidson</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1219640</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-12 12:09:10 -0700</bug_when>
    <thetext>Initial URLParser implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219641</commentid>
    <comment_count>1</comment_count>
      <attachid>285926</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-12 12:09:58 -0700</bug_when>
    <thetext>Created attachment 285926
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219647</commentid>
    <comment_count>2</comment_count>
      <attachid>285926</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-08-12 12:26:27 -0700</bug_when>
    <thetext>Comment on attachment 285926
Patch

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

r+ is contingent on fixing the buffer safety issues.

&gt; Source/WebCore/platform/URLParser.cpp:40
&gt; +static bool isC0Control(const StringView::CodePoints::Iterator&amp; c) { return *c &lt;= 0x001F; }
&gt; +static bool isC0ControlOrSpace(const StringView::CodePoints::Iterator&amp; c) { return isC0Control(c) || *c == 0x0020; }
&gt; +static bool isTabOrNewline(const StringView::CodePoints::Iterator&amp; c) { return *c == 0x0009 || *c == 0x000A || *c == 0x000D; }
&gt; +static bool isASCIIDigit(const StringView::CodePoints::Iterator&amp; c) { return *c &gt;= 0x0030  &amp;&amp; *c &lt;= 0x0039; }
&gt; +static bool isASCIIAlpha(const StringView::CodePoints::Iterator&amp; c) { return (*c &gt;= 0x0041 &amp;&amp; *c &lt;= 0x005A) || (*c &gt;= 0x0061 &amp;&amp; *c &lt;= 0x007A); }
&gt; +static bool isASCIIAlphanumeric(const StringView::CodePoints::Iterator&amp; c) { return isASCIIDigit(c) || isASCIIAlpha(c); }

Do we seriously not have any of these things anywhere else?

&gt; Source/WebCore/platform/URLParser.cpp:55
&gt; +// 4.2. URL parsing
&gt; +Optional&lt;URL&gt; URLParser::parse(const String&amp; input, const URL&amp; base, const TextEncoding&amp;)

This comment literally repeats what the code on the line below it already says. Not sure it&apos;s useful.

&gt; Source/WebCore/platform/URLParser.cpp:69
&gt; +        SchemeEndCheckForSlashes, // Not explicitly in spec, but in scheme state steps 2. 8.

Not sure this comment is useful/helpful.

&gt; Source/WebCore/platform/URLParser.cpp:117
&gt; +                if (urlScheme == &quot;file&quot;)

ASCIILiteral

&gt; Source/WebCore/platform/URLParser.cpp:153
&gt; +                ++c;
&gt; +                if (*c == &apos;/&apos;) {

Deref&apos;ing c after incrementing it without checking for end. :(

&gt; Source/WebCore/platform/URLParser.cpp:181
&gt; +                ++c;
&gt; +                buffer.append(&apos;/&apos;);
&gt; +                if (*c == &apos;/&apos;) {

Deref&apos;ing c after incrementing it without checking for end. :(

&gt; Source/WebCore/platform/URLParser.cpp:275
&gt; +            if (*c == &apos;/&apos;) {
&gt; +                ++c;
&gt; +                if (*c == &apos;.&apos;) {
&gt; +                    ++c;
&gt; +                    if (*c == &apos;.&apos;)
&gt; +                        notImplemented();

Deref&apos;ing c after incrementing it without checking for end. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219648</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-08-12 12:26:39 -0700</bug_when>
    <thetext>And making the build work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219663</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-12 12:56:44 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Do we seriously not have any of these things anywhere else?
We probably do, but not ones that take these iterators.  We can probably consolidate this code later.
&gt; &gt; Source/WebCore/platform/URLParser.cpp:69
&gt; &gt; +        SchemeEndCheckForSlashes, // Not explicitly in spec, but in scheme state steps 2. 8.
&gt; 
&gt; Not sure this comment is useful/helpful.
It is.  All the other states are specified in the spec.  This one is not.
&gt; ASCIILiteral
That doesn&apos;t compile.  This whole case needs to be rewritten anyways, hence the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219664</commentid>
    <comment_count>5</comment_count>
      <attachid>285934</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-12 12:57:30 -0700</bug_when>
    <thetext>Created attachment 285934
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219671</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-12 13:05:32 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/204417</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219744</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-08-12 15:32:19 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #2)
&gt; &gt; Do we seriously not have any of these things anywhere else?
&gt; We probably do, but not ones that take these iterators.  We can probably
&gt; consolidate this code later.
&gt; &gt; &gt; Source/WebCore/platform/URLParser.cpp:69
&gt; &gt; &gt; +        SchemeEndCheckForSlashes, // Not explicitly in spec, but in scheme state steps 2. 8.
&gt; &gt; 
&gt; &gt; Not sure this comment is useful/helpful.
&gt; It is.  All the other states are specified in the spec.  This one is not.

I understand that, because that&apos;s what the comment says.
I just don&apos;t see how it&apos;s relevant here.
There should be a relatively high bar to breaking up source code with comments, and it&apos;s usually when the code doesn&apos;t explain itself. This name explains itself.

&gt; &gt; ASCIILiteral
&gt; That doesn&apos;t compile.  This whole case needs to be rewritten anyways, hence
&gt; the comment.

Weird, why not?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219748</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-12 15:38:20 -0700</bug_when>
    <thetext>&gt; &gt; &gt; ASCIILiteral
&gt; &gt; That doesn&apos;t compile.  This whole case needs to be rewritten anyways, hence
&gt; &gt; the comment.
&gt; 
&gt; Weird, why not?

/Users/alexchristensen/code/OpenSource/Source/WebCore/platform/URLParser.cpp:115:31: error: use of overloaded operator &apos;==&apos; is ambiguous (with operand types &apos;WTF::String&apos; and &apos;WTF::ASCIILiteral&apos;)
                if (urlScheme == ASCIILiteral(&quot;file&quot;))
                    ~~~~~~~~~ ^  ~~~~~~~~~~~~~~~~~~~~
In file included from /Users/alexchristensen/code/OpenSource/Source/WebCore/platform/URLParser.cpp:27:
In file included from /Users/alexchristensen/code/OpenSource/Source/WebCore/platform/URLParser.h:28:
In file included from /Users/alexchristensen/code/OpenSource/Source/WebCore/platform/text/TextEncoding.h:29:
In file included from /Users/alexchristensen/code/OpenSource/Source/WebCore/platform/text/TextCodec.h:34:
/Users/alexchristensen/code/OpenSource/WebKitBuild/Debug/usr/local/include/wtf/text/WTFString.h:481:13: note: candidate function
inline bool operator==(const String&amp; a, const String&amp; b) { return equal(a.impl(), b.impl()); }
            ^
/Users/alexchristensen/code/OpenSource/WebKitBuild/Debug/usr/local/include/wtf/text/WTFString.h:483:13: note: candidate function
inline bool operator==(const String&amp; a, const char* b) { return equal(a.impl(), reinterpret_cast&lt;const LChar*&gt;(b)); }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220387</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-08-15 23:38:48 -0700</bug_when>
    <thetext>How is this different from the algorithms inside URL.cpp?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220492</commentid>
    <comment_count>10</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-16 10:54:09 -0700</bug_when>
    <thetext>The new URLParser will be more standards compliant.
It is designed around one finite state machine that looks more like the spec, so as the spec evolves it will be easier to make changes to keep up.
It uses code point iterators to ideally just go through the URL once instead of making several copies and looking at different parts of the input multiple times.
The character class table and percent encode table in URL.cpp are wrong.  There are a growing number of security bugs based on the way the current parser works.  I decided it would be better to just start from scratch instead of trying to massage the old URL parser into a new one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221109</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-08-18 10:35:42 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; The new URLParser will be more standards compliant.
&gt; It is designed around one finite state machine that looks more like the
&gt; spec, so as the spec evolves it will be easier to make changes to keep up.
&gt; It uses code point iterators to ideally just go through the URL once instead
&gt; of making several copies and looking at different parts of the input
&gt; multiple times.
&gt; The character class table and percent encode table in URL.cpp are wrong. 
&gt; There are a growing number of security bugs based on the way the current
&gt; parser works.  I decided it would be better to just start from scratch
&gt; instead of trying to massage the old URL parser into a new one.

All that makes sense. But I don’t think it’s OK to end up having two URL parsers. How can we make sure we get rid of the old one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221410</commentid>
    <comment_count>12</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-19 11:38:19 -0700</bug_when>
    <thetext>I plan to develop the new one as the URLParser class until it is good enough to replace the URL::parse and URL::init functions, then replace those functions with the code I&apos;m developing now.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285926</attachid>
            <date>2016-08-12 12:09:58 -0700</date>
            <delta_ts>2016-08-12 12:57:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160811-20160812120818.patch</filename>
            <type>text/plain</type>
            <size>12773</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDM4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE2LTA4LTEyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW5pdGlhbCBV
UkxQYXJzZXIgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MDgxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoZXJlIGFyZSBhIGxvdCBvZiBtaXNzaW5nIHBhcnRzLCBidXQgaXQg
d29ya3MgaW4gb25lIGNhc2UsIHNvIEkgdGVzdCB0aGF0IG9uZSBjYXNlLgorCisgICAgICAgICog
cGxhdGZvcm0vVVJMUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzQzBDb250cm9sKToK
KyAgICAgICAgKFdlYkNvcmU6OmlzQzBDb250cm9sT3JTcGFjZSk6CisgICAgICAgIChXZWJDb3Jl
Ojppc1RhYk9yTmV3bGluZSk6CisgICAgICAgIChXZWJDb3JlOjppc0FTQ0lJRGlnaXQpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNBU0NJSUFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OmlzQVNDSUlB
bHBoYW51bWVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6aXNTcGVjaWFsU2NoZW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6cGFyc2UpOgorCiAyMDE2LTA4LTExICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIFVSTFBhcnNl
ciBzdHViCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAJKHJldmlzaW9u
IDIwNDM4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDEyICsyNSwyOTQgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlVSTFBhcnNlci5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKyNpbmNs
dWRlIDx3dGYvVGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
T3B0aW9uYWw8VVJMPiBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYs
IGNvbnN0IFRleHRFbmNvZGluZyYpCisvLyAxLiBJbmZyYXN0cnVjdHVyZQorc3RhdGljIGJvb2wg
aXNDMENvbnRyb2woY29uc3QgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3ImIGMpIHsg
cmV0dXJuICpjIDw9IDB4MDAxRjsgfQorc3RhdGljIGJvb2wgaXNDMENvbnRyb2xPclNwYWNlKGNv
bnN0IFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yJiBjKSB7IHJldHVybiBpc0MwQ29u
dHJvbChjKSB8fCAqYyA9PSAweDAwMjA7IH0KK3N0YXRpYyBib29sIGlzVGFiT3JOZXdsaW5lKGNv
bnN0IFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yJiBjKSB7IHJldHVybiAqYyA9PSAw
eDAwMDkgfHwgKmMgPT0gMHgwMDBBIHx8ICpjID09IDB4MDAwRDsgfQorc3RhdGljIGJvb2wgaXNB
U0NJSURpZ2l0KGNvbnN0IFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yJiBjKSB7IHJl
dHVybiAqYyA+PSAweDAwMzAgICYmICpjIDw9IDB4MDAzOTsgfQorc3RhdGljIGJvb2wgaXNBU0NJ
SUFscGhhKGNvbnN0IFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yJiBjKSB7IHJldHVy
biAoKmMgPj0gMHgwMDQxICYmICpjIDw9IDB4MDA1QSkgfHwgKCpjID49IDB4MDA2MSAmJiAqYyA8
PSAweDAwN0EpOyB9CitzdGF0aWMgYm9vbCBpc0FTQ0lJQWxwaGFudW1lcmljKGNvbnN0IFN0cmlu
Z1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yJiBjKSB7IHJldHVybiBpc0FTQ0lJRGlnaXQoYykg
fHwgaXNBU0NJSUFscGhhKGMpOyB9CisgICAgCisvLyA0LiBVUkxzCitzdGF0aWMgYm9vbCBpc1Nw
ZWNpYWxTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCit7CisgICAgcmV0dXJuIHNjaGVtZSA9
PSAiZnRwIgorICAgICAgICB8fCBzY2hlbWUgPT0gImZpbGUiCisgICAgICAgIHx8IHNjaGVtZSA9
PSAiZ29waGVyIgorICAgICAgICB8fCBzY2hlbWUgPT0gImh0dHAiCisgICAgICAgIHx8IHNjaGVt
ZSA9PSAiaHR0cHMiCisgICAgICAgIHx8IHNjaGVtZSA9PSAid3MiCisgICAgICAgIHx8IHNjaGVt
ZSA9PSAid3NzIjsKK30KKworLy8gNC4yLiBVUkwgcGFyc2luZworT3B0aW9uYWw8VVJMPiBVUkxQ
YXJzZXI6OnBhcnNlKGNvbnN0IFN0cmluZyYgaW5wdXQsIGNvbnN0IFVSTCYgYmFzZSwgY29uc3Qg
VGV4dEVuY29kaW5nJikKIHsKLSAgICByZXR1cm4gTnVsbG9wdDsKKyAgICBVUkwgdXJsOworICAg
IAorICAgIGF1dG8gY29kZVBvaW50cyA9IFN0cmluZ1ZpZXcoaW5wdXQpLmNvZGVQb2ludHMoKTsK
KyAgICBhdXRvIGMgPSBjb2RlUG9pbnRzLmJlZ2luKCk7CisgICAgYXV0byBlbmQgPSBjb2RlUG9p
bnRzLmVuZCgpOworICAgIFN0cmluZ0J1aWxkZXIgYnVmZmVyOworICAgIHdoaWxlIChpc0MwQ29u
dHJvbE9yU3BhY2UoYykpCisgICAgICAgICsrYzsKKyAgICAKKyAgICBlbnVtIGNsYXNzIFN0YXRl
IDogdWludDhfdCB7CisgICAgICAgIFNjaGVtZVN0YXJ0LAorICAgICAgICBTY2hlbWUsCisgICAg
ICAgIFNjaGVtZUVuZENoZWNrRm9yU2xhc2hlcywgLy8gTm90IGV4cGxpY2l0bHkgaW4gc3BlYywg
YnV0IGluIHNjaGVtZSBzdGF0ZSBzdGVwcyAyLiA4LgorICAgICAgICBOb1NjaGVtZSwKKyAgICAg
ICAgU3BlY2lhbFJlbGF0aXZlT3JBdXRob3JpdHksCisgICAgICAgIFBhdGhPckF1dGhvcml0eSwK
KyAgICAgICAgUmVsYXRpdmUsCisgICAgICAgIFJlbGF0aXZlU2xhc2gsCisgICAgICAgIFNwZWNp
YWxBdXRob3JpdHlTbGFzaGVzLAorICAgICAgICBTcGVjaWFsQXV0aG9yaXR5SWdub3JlU2xhc2hl
cywKKyAgICAgICAgQXV0aG9yaXR5LAorICAgICAgICBIb3N0LAorICAgICAgICBIb3N0bmFtZSwK
KyAgICAgICAgUG9ydCwKKyAgICAgICAgRmlsZSwKKyAgICAgICAgRmlsZVNsYXNoLAorICAgICAg
ICBGaWxlSG9zdCwKKyAgICAgICAgUGF0aFN0YXJ0LAorICAgICAgICBQYXRoLAorICAgICAgICBD
YW5ub3RCZUFCYXNlVVJMUGF0aCwKKyAgICAgICAgUXVlcnksCisgICAgICAgIEZyYWdtZW50LAor
ICAgIH07CisKKyNkZWZpbmUgTE9HX1NUQVRFKHgpCisKKyAgICBTdGF0ZSBzdGF0ZSA9IFN0YXRl
OjpTY2hlbWVTdGFydDsKKyAgICB3aGlsZSAoYyAhPSBlbmQpIHsKKyAgICAgICAgaWYgKGlzVGFi
T3JOZXdsaW5lKGMpKSB7CisgICAgICAgICAgICArK2M7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBTdGF0
ZTo6U2NoZW1lU3RhcnQ6CisgICAgICAgICAgICBMT0dfU1RBVEUoIlNjaGVtZVN0YXJ0Iik7Cisg
ICAgICAgICAgICBpZiAoaXNBU0NJSUFscGhhKGMpKSB7CisgICAgICAgICAgICAgICAgYnVmZmVy
LmFwcGVuZCh0b0FTQ0lJTG93ZXIoKmMpKTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRl
OjpTY2hlbWU7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0
YXRlOjpOb1NjaGVtZTsKKyAgICAgICAgICAgICsrYzsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFN0YXRlOjpTY2hlbWU6CisgICAgICAgICAgICBMT0dfU1RBVEUoIlNjaGVtZSIp
OworICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgKmMgPT0gJysnIHx8
ICpjID09ICctJyB8fCAqYyA9PSAnLicpCisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCh0
b0FTQ0lJTG93ZXIoKmMpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCpjID09ICc6JykgeworICAg
ICAgICAgICAgICAgIHVybC5tX3NjaGVtZUVuZCA9IGJ1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAg
ICAgICAgICBTdHJpbmcgdXJsU2NoZW1lID0gYnVmZmVyLnRvU3RyaW5nKCk7IC8vIEZJWE1FOiBG
aW5kIGEgd2F5IHRvIGRvIHRoaXMgd2l0aG91dCBzaHJpbmtpbmcgdGhlIGJ1ZmZlci4KKyAgICAg
ICAgICAgICAgICBpZiAodXJsU2NoZW1lID09ICJmaWxlIikKKyAgICAgICAgICAgICAgICAgICAg
c3RhdGUgPSBTdGF0ZTo6RmlsZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpc1NwZWNpYWxT
Y2hlbWUodXJsU2NoZW1lKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZS5wcm90b2Nv
bCgpID09IHVybFNjaGVtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6
OlNwZWNpYWxSZWxhdGl2ZU9yQXV0aG9yaXR5OworICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpTcGVjaWFsQXV0aG9yaXR5U2xh
c2hlczsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUg
PSBTdGF0ZTo6U2NoZW1lRW5kQ2hlY2tGb3JTbGFzaGVzOworICAgICAgICAgICAgICAgIGJ1ZmZl
ci5hcHBlbmQoJzonKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnVm
ZmVyLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6Tm9TY2hlbWU7Cisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8gc3RhcnQgb3ZlciBoZXJlLgor
ICAgICAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICArK2M7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBTdGF0ZTo6U2NoZW1lRW5kQ2hlY2tGb3JTbGFzaGVzOgorICAgICAgICAg
ICAgTE9HX1NUQVRFKCJTY2hlbWVFbmRDaGVja0ZvclNsYXNoZXMiKTsKKyAgICAgICAgICAgIGlm
ICgqYyA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpQYXRoT3JBdXRo
b3JpdHk7CisgICAgICAgICAgICAgICAgKytjOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6Q2Fubm90QmVBQmFzZVVSTFBhdGg7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBTdGF0ZTo6Tm9TY2hlbWU6CisgICAgICAgICAgICBMT0df
U1RBVEUoIk5vU2NoZW1lIik7CisgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAg
ICAgICAgKytjOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhdGU6OlNwZWNp
YWxSZWxhdGl2ZU9yQXV0aG9yaXR5OgorICAgICAgICAgICAgTE9HX1NUQVRFKCJTcGVjaWFsUmVs
YXRpdmVPckF1dGhvcml0eSIpOworICAgICAgICAgICAgaWYgKCpjID09ICcvJykgeworICAgICAg
ICAgICAgICAgICsrYzsKKyAgICAgICAgICAgICAgICBpZiAoKmMgPT0gJy8nKSB7CisgICAgICAg
ICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlNwZWNpYWxBdXRob3JpdHlJZ25vcmVTbGFzaGVz
OworICAgICAgICAgICAgICAgICAgICArK2M7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpSZWxhdGl2ZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFN0YXRlOjpQYXRoT3JBdXRob3JpdHk6CisgICAgICAgICAgICBMT0df
U1RBVEUoIlBhdGhPckF1dGhvcml0eSIpOworICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICAgICAgICAgICsrYzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0YXRl
OjpSZWxhdGl2ZToKKyAgICAgICAgICAgIExPR19TVEFURSgiUmVsYXRpdmUiKTsKKyAgICAgICAg
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgICAgICArK2M7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTdGF0ZTo6UmVsYXRpdmVTbGFzaDoKKyAgICAgICAgICAgIExPR19T
VEFURSgiUmVsYXRpdmVTbGFzaCIpOworICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICAgICAgICAgICsrYzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0YXRlOjpT
cGVjaWFsQXV0aG9yaXR5U2xhc2hlczoKKyAgICAgICAgICAgIExPR19TVEFURSgiU3BlY2lhbEF1
dGhvcml0eVNsYXNoZXMiKTsKKyAgICAgICAgICAgIGlmICgqYyA9PSAnLycpIHsKKyAgICAgICAg
ICAgICAgICArK2M7CisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgnLycpOworICAgICAg
ICAgICAgICAgIGlmICgqYyA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFw
cGVuZCgnLycpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpTcGVjaWFsQXV0
aG9yaXR5SWdub3JlU2xhc2hlczsKKyAgICAgICAgICAgICAgICAgICAgKytjOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgICAgICAgICArK2M7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBTdGF0ZTo6U3BlY2lhbEF1dGhvcml0eUlnbm9yZVNsYXNoZXM6CisgICAgICAgICAg
ICBMT0dfU1RBVEUoIlNwZWNpYWxBdXRob3JpdHlJZ25vcmVTbGFzaGVzIik7CisgICAgICAgICAg
ICBpZiAoKmMgIT0gJy8nICYmICpjICE9ICdcXCcpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9
IFN0YXRlOjpBdXRob3JpdHk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICAgICAgKytjOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhdGU6OkF1dGhvcml0eToKKyAgICAgICAgICAg
IExPR19TVEFURSgiQXV0aG9yaXR5Iik7CisgICAgICAgICAgICBpZiAoIXVybC5tX3VzZXJTdGFy
dCkKKyAgICAgICAgICAgICAgICB1cmwubV91c2VyU3RhcnQgPSBidWZmZXIubGVuZ3RoKCk7Cisg
ICAgICAgICAgICBpZiAoKmMgPT0gJ0AnKSB7CisgICAgICAgICAgICAgICAgdXJsLm1fcGFzc3dv
cmRFbmQgPSBidWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgn
QCcpOworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6Okhvc3Q7CisgICAgICAgICAgICAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKmMgPT0gJzonKSB7
CisgICAgICAgICAgICAgICAgdXJsLm1fdXNlckVuZCA9IGJ1ZmZlci5sZW5ndGgoKTsKKyAgICAg
ICAgICAgICAgICBidWZmZXIuYXBwZW5kKCpjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgaWYgKCpjID09ICcvJyB8fCAqYyA9PSAnPycgfHwgKmMgPT0gJyMnKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHVybC5tX3Bhc3N3b3JkRW5kID0gYnVmZmVyLmxlbmd0aCgpOwor
ICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpIb3N0OworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCpjKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICsrYzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0YXRlOjpI
b3N0OgorICAgICAgICBjYXNlIFN0YXRlOjpIb3N0bmFtZToKKyAgICAgICAgICAgIExPR19TVEFU
RSgiSG9zdC9Ib3N0bmFtZSIpOworICAgICAgICAgICAgaWYgKCpjID09ICc6JykgeworICAgICAg
ICAgICAgICAgIHVybC5tX2hvc3RFbmQgPSBidWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAg
ICAgYnVmZmVyLmFwcGVuZCgnOicpOworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlBv
cnQ7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCpjID09ICcvJyB8fCAqYyA9PSAnPycgfHwgKmMg
PT0gJyMnKSB7CisgICAgICAgICAgICAgICAgdXJsLm1faG9zdEVuZCA9IGJ1ZmZlci5sZW5ndGgo
KTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpQYXRoOworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYnVmZmVyLmFw
cGVuZCgqYyk7CisgICAgICAgICAgICArK2M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBTdGF0ZTo6UG9ydDoKKyAgICAgICAgICAgIExPR19TVEFURSgiUG9ydCIpOworICAgICAg
ICAgICAgaWYgKGlzQVNDSUlEaWdpdChjKSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBl
bmQoKmMpOworICAgICAgICAgICAgfSBlbHNlIGlmICgqYyA9PSAnLycgfHwgKmMgPT0gJz8nIHx8
ICpjID09ICcjJykgeworICAgICAgICAgICAgICAgIHVybC5tX3BvcnRFbmQgPSBidWZmZXIubGVu
Z3RoKCk7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6UGF0aFN0YXJ0OworICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
cmV0dXJuIE51bGxvcHQ7CisgICAgICAgICAgICArK2M7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBTdGF0ZTo6RmlsZToKKyAgICAgICAgICAgIExPR19TVEFURSgiRmlsZSIpOwor
ICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgICAgICsrYzsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0YXRlOjpGaWxlU2xhc2g6CisgICAgICAgICAgICBM
T0dfU1RBVEUoIkZpbGVTbGFzaCIpOworICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICAgICAgICAgICsrYzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0YXRlOjpG
aWxlSG9zdDoKKyAgICAgICAgICAgIExPR19TVEFURSgiRmlsZUhvc3QiKTsKKyAgICAgICAgICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgICAgICArK2M7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBTdGF0ZTo6UGF0aFN0YXJ0OgorICAgICAgICAgICAgTE9HX1NUQVRFKCJQ
YXRoU3RhcnQiKTsKKyAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlBhdGg7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBTdGF0ZTo6UGF0aDoKKyAgICAgICAgICAgIExPR19T
VEFURSgiUGF0aCIpOworICAgICAgICAgICAgaWYgKCpjID09ICcvJykgeworICAgICAgICAgICAg
ICAgICsrYzsKKyAgICAgICAgICAgICAgICBpZiAoKmMgPT0gJy4nKSB7CisgICAgICAgICAgICAg
ICAgICAgICsrYzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCpjID09ICcuJykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgICAgICAgICAgICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJ1ZmZl
ci5hcHBlbmQoJy8nKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKmMgPT0gJz8nKSB7CisgICAg
ICAgICAgICAgICAgdXJsLm1fcGF0aEVuZCA9IGJ1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAg
ICAgICBzdGF0ZSA9IFN0YXRlOjpRdWVyeTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoKmMgPT0gJyMnKSB7CisgICAgICAgICAgICAgICAgdXJsLm1f
cGF0aEVuZCA9IGJ1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRl
OjpGcmFnbWVudDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBQZXJjZW50IGVuY29kZSBjCisgICAgICAgICAgICBidWZmZXIu
YXBwZW5kKCpjKTsKKyAgICAgICAgICAgICsrYzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFN0YXRlOjpDYW5ub3RCZUFCYXNlVVJMUGF0aDoKKyAgICAgICAgICAgIExPR19TVEFU
RSgiQ2Fubm90QmVBQmFzZVVSTFBhdGgiKTsKKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgICAgICAgICArK2M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdGF0
ZTo6UXVlcnk6CisgICAgICAgICAgICBMT0dfU1RBVEUoIlF1ZXJ5Iik7CisgICAgICAgICAgICBp
ZiAoKmMgPT0gJyMnKSB7CisgICAgICAgICAgICAgICAgdXJsLm1fcXVlcnlFbmQgPSBidWZmZXIu
bGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6RnJhZ21lbnQ7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBidWZmZXIu
YXBwZW5kKCpjKTsKKyAgICAgICAgICAgICsrYzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFN0YXRlOjpGcmFnbWVudDoKKyAgICAgICAgICAgIExPR19TVEFURSgiRnJhZ21lbnQi
KTsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoKmMpOworICAgICAgICAgICAgKytjOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgdXJsLm1fc3RyaW5nID0gYnVm
ZmVyLnRvU3RyaW5nKCk7CisgICAgcmV0dXJuIHVybDsKIH0KICAgICAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDIwNDQxNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE1IEBACisyMDE2LTA4LTEyICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW5pdGlhbCBVUkxQYXJzZXIgaW1wbGVtZW50
YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MDgxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1VSTFBhcnNlci5jcHA6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjplcSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpjaGVja1VSTCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorCiAyMDE2LTA4LTEyICBCcmFkeSBFaWRzb24g
IDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhlIDMyLWJpdCBNYWMgYnVpbGQg
YWZ0ZXI6CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJM
UGFyc2VyLmNwcAkocmV2aXNpb24gMjA0MzgwKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL1VSTFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDM0IEBA
IHB1YmxpYzoKICAgICB9CiB9OwogCitzdHJ1Y3QgRXhwZWN0ZWRQYXJ0cyB7CisgICAgU3RyaW5n
IHByb3RvY29sOworICAgIFN0cmluZyB1c2VyOworICAgIFN0cmluZyBwYXNzd29yZDsKKyAgICBT
dHJpbmcgaG9zdDsKKyAgICB1bnNpZ25lZCBzaG9ydCBwb3J0OworICAgIFN0cmluZyBwYXRoOwor
ICAgIFN0cmluZyBxdWVyeTsKKyAgICBTdHJpbmcgZnJhZ21lbnQ7Cit9OworICAgIAorc3RhdGlj
IHZvaWQgZXEoY29uc3QgU3RyaW5nJiBzMSwgY29uc3QgU3RyaW5nJiBzMikgeyBFWFBFQ1RfU1RS
RVEoczEudXRmOCgpLmRhdGEoKSwgczIudXRmOCgpLmRhdGEoKSk7IH0KK3N0YXRpYyB2b2lkIGNo
ZWNrVVJMKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBFeHBlY3RlZFBhcnRzJiBwYXJ0cykKK3sKKyAg
ICBlcSh1cmwucHJvdG9jb2woKSwgcGFydHMucHJvdG9jb2wpOworICAgIGVxKHVybC51c2VyKCks
IHBhcnRzLnVzZXIpOworICAgIGVxKHVybC5wYXNzKCksIHBhcnRzLnBhc3N3b3JkKTsKKyAgICBl
cSh1cmwuaG9zdCgpLCBwYXJ0cy5ob3N0KTsKKyAgICBFWFBFQ1RfRVEodXJsLnBvcnQoKSwgcGFy
dHMucG9ydCk7CisgICAgZXEodXJsLnBhdGgoKSwgcGFydHMucGF0aCk7CisgICAgZXEodXJsLnF1
ZXJ5KCksIHBhcnRzLnF1ZXJ5KTsKKyAgICBlcSh1cmwuZnJhZ21lbnRJZGVudGlmaWVyKCksIHBh
cnRzLmZyYWdtZW50KTsKK30KKwogVEVTVF9GKFVSTFBhcnNlclRlc3QsIFBhcnNlKQogewotICAg
IEVYUEVDVF9UUlVFKFdlYkNvcmU6OlVSTFBhcnNlcjo6cGFyc2UoImludmFsaWQiKSA9PSBOdWxs
b3B0KTsKKyAgICBhdXRvIHVybCA9IFVSTFBhcnNlcjo6cGFyc2UoImh0dHA6Ly91c2VyOnBhc3NA
d2Via2l0Lm9yZzoxMjMvcGF0aD9xdWVyeSNmcmFnbWVudCIpOworICAgIGNoZWNrVVJMKHVybC52
YWx1ZSgpLCB7Imh0dHAiLCAidXNlciIsICJwYXNzIiwgIndlYmtpdC5vcmciLCAxMjMsICIvcGF0
aCIsICJxdWVyeSIsICJmcmFnbWVudCJ9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktp
dEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285934</attachid>
            <date>2016-08-12 12:57:30 -0700</date>
            <delta_ts>2016-08-12 13:00:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160811-20160812125551.patch</filename>
            <type>text/plain</type>
            <size>12997</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDM4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE2LTA4LTEyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW5pdGlhbCBV
UkxQYXJzZXIgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MDgxMQorCisgICAgICAgIFJldmlld2VkIGJ5IEJyYWR5IEVpZHNv
bi4KKworICAgICAgICBUaGVyZSBhcmUgYSBsb3Qgb2YgbWlzc2luZyBwYXJ0cywgYnV0IGl0IHdv
cmtzIGluIG9uZSBjYXNlLCBzbyBJIHRlc3QgdGhhdCBvbmUgY2FzZS4KKworICAgICAgICAqIHBs
YXRmb3JtL1VSTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0MwQ29udHJvbCk6Cisg
ICAgICAgIChXZWJDb3JlOjppc0MwQ29udHJvbE9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
aXNUYWJPck5ld2xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6aXNBU0NJSURpZ2l0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmlzQVNDSUlBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjppc0FTQ0lJQWxw
aGFudW1lcmljKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU3BlY2lhbFNjaGVtZSk6CisgICAgICAg
IChXZWJDb3JlOjpVUkxQYXJzZXI6OnBhcnNlKToKKwogMjAxNi0wOC0xMSAgQWxleCBDaHJpc3Rl
bnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBVUkxQYXJzZXIg
c3R1YgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuY3BwCShyZXZpc2lvbiAy
MDQzODApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSwxMiArMjUsMzAxIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJVUkxQYXJzZXIuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLU9w
dGlvbmFsPFVSTD4gVVJMUGFyc2VyOjpwYXJzZShjb25zdCBTdHJpbmcmLCBjb25zdCBVUkwmLCBj
b25zdCBUZXh0RW5jb2RpbmcmKQorLy8gMS4gSW5mcmFzdHJ1Y3R1cmUKK3N0YXRpYyBib29sIGlz
QzBDb250cm9sKGNvbnN0IFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yJiBjKSB7IHJl
dHVybiAqYyA8PSAweDAwMUY7IH0KK3N0YXRpYyBib29sIGlzQzBDb250cm9sT3JTcGFjZShjb25z
dCBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciYgYykgeyByZXR1cm4gaXNDMENvbnRy
b2woYykgfHwgKmMgPT0gMHgwMDIwOyB9CitzdGF0aWMgYm9vbCBpc1RhYk9yTmV3bGluZShjb25z
dCBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciYgYykgeyByZXR1cm4gKmMgPT0gMHgw
MDA5IHx8ICpjID09IDB4MDAwQSB8fCAqYyA9PSAweDAwMEQ7IH0KK3N0YXRpYyBib29sIGlzQVND
SUlEaWdpdChjb25zdCBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciYgYykgeyByZXR1
cm4gKmMgPj0gMHgwMDMwICAmJiAqYyA8PSAweDAwMzk7IH0KK3N0YXRpYyBib29sIGlzQVNDSUlB
bHBoYShjb25zdCBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciYgYykgeyByZXR1cm4g
KCpjID49IDB4MDA0MSAmJiAqYyA8PSAweDAwNUEpIHx8ICgqYyA+PSAweDAwNjEgJiYgKmMgPD0g
MHgwMDdBKTsgfQorc3RhdGljIGJvb2wgaXNBU0NJSUFscGhhbnVtZXJpYyhjb25zdCBTdHJpbmdW
aWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciYgYykgeyByZXR1cm4gaXNBU0NJSURpZ2l0KGMpIHx8
IGlzQVNDSUlBbHBoYShjKTsgfQorICAgIAorLy8gNC4gVVJMcworc3RhdGljIGJvb2wgaXNTcGVj
aWFsU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKQoreworICAgIHJldHVybiBzY2hlbWUgPT0g
ImZ0cCIKKyAgICAgICAgfHwgc2NoZW1lID09ICJmaWxlIgorICAgICAgICB8fCBzY2hlbWUgPT0g
ImdvcGhlciIKKyAgICAgICAgfHwgc2NoZW1lID09ICJodHRwIgorICAgICAgICB8fCBzY2hlbWUg
PT0gImh0dHBzIgorICAgICAgICB8fCBzY2hlbWUgPT0gIndzIgorICAgICAgICB8fCBzY2hlbWUg
PT0gIndzcyI7Cit9CisKK09wdGlvbmFsPFVSTD4gVVJMUGFyc2VyOjpwYXJzZShjb25zdCBTdHJp
bmcmIGlucHV0LCBjb25zdCBVUkwmIGJhc2UsIGNvbnN0IFRleHRFbmNvZGluZyYpCiB7Ci0gICAg
cmV0dXJuIE51bGxvcHQ7CisgICAgVVJMIHVybDsKKyAgICAKKyAgICBhdXRvIGNvZGVQb2ludHMg
PSBTdHJpbmdWaWV3KGlucHV0KS5jb2RlUG9pbnRzKCk7CisgICAgYXV0byBjID0gY29kZVBvaW50
cy5iZWdpbigpOworICAgIGF1dG8gZW5kID0gY29kZVBvaW50cy5lbmQoKTsKKyAgICBTdHJpbmdC
dWlsZGVyIGJ1ZmZlcjsKKyAgICB3aGlsZSAoaXNDMENvbnRyb2xPclNwYWNlKGMpKQorICAgICAg
ICArK2M7CisgICAgCisgICAgZW51bSBjbGFzcyBTdGF0ZSA6IHVpbnQ4X3QgeworICAgICAgICBT
Y2hlbWVTdGFydCwKKyAgICAgICAgU2NoZW1lLAorICAgICAgICBTY2hlbWVFbmRDaGVja0ZvclNs
YXNoZXMsIC8vIFNjaGVtZSBzdGF0ZSBzdGVwcyAyLiA4LgorICAgICAgICBOb1NjaGVtZSwKKyAg
ICAgICAgU3BlY2lhbFJlbGF0aXZlT3JBdXRob3JpdHksCisgICAgICAgIFBhdGhPckF1dGhvcml0
eSwKKyAgICAgICAgUmVsYXRpdmUsCisgICAgICAgIFJlbGF0aXZlU2xhc2gsCisgICAgICAgIFNw
ZWNpYWxBdXRob3JpdHlTbGFzaGVzLAorICAgICAgICBTcGVjaWFsQXV0aG9yaXR5SWdub3JlU2xh
c2hlcywKKyAgICAgICAgQXV0aG9yaXR5LAorICAgICAgICBIb3N0LAorICAgICAgICBIb3N0bmFt
ZSwKKyAgICAgICAgUG9ydCwKKyAgICAgICAgRmlsZSwKKyAgICAgICAgRmlsZVNsYXNoLAorICAg
ICAgICBGaWxlSG9zdCwKKyAgICAgICAgUGF0aFN0YXJ0LAorICAgICAgICBQYXRoLAorICAgICAg
ICBDYW5ub3RCZUFCYXNlVVJMUGF0aCwKKyAgICAgICAgUXVlcnksCisgICAgICAgIEZyYWdtZW50
LAorICAgIH07CisKKyNkZWZpbmUgTE9HX1NUQVRFKHgpCisKKyAgICBTdGF0ZSBzdGF0ZSA9IFN0
YXRlOjpTY2hlbWVTdGFydDsKKyAgICB3aGlsZSAoYyAhPSBlbmQpIHsKKyAgICAgICAgaWYgKGlz
VGFiT3JOZXdsaW5lKGMpKSB7CisgICAgICAgICAgICArK2M7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBT
dGF0ZTo6U2NoZW1lU3RhcnQ6CisgICAgICAgICAgICBMT0dfU1RBVEUoIlNjaGVtZVN0YXJ0Iik7
CisgICAgICAgICAgICBpZiAoaXNBU0NJSUFscGhhKGMpKSB7CisgICAgICAgICAgICAgICAgYnVm
ZmVyLmFwcGVuZCh0b0FTQ0lJTG93ZXIoKmMpKTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0
YXRlOjpTY2hlbWU7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzdGF0ZSA9
IFN0YXRlOjpOb1NjaGVtZTsKKyAgICAgICAgICAgICsrYzsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFN0YXRlOjpTY2hlbWU6CisgICAgICAgICAgICBMT0dfU1RBVEUoIlNjaGVt
ZSIpOworICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgKmMgPT0gJysn
IHx8ICpjID09ICctJyB8fCAqYyA9PSAnLicpCisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVu
ZCh0b0FTQ0lJTG93ZXIoKmMpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCpjID09ICc6Jykgewor
ICAgICAgICAgICAgICAgIHVybC5tX3NjaGVtZUVuZCA9IGJ1ZmZlci5sZW5ndGgoKTsKKyAgICAg
ICAgICAgICAgICBTdHJpbmcgdXJsU2NoZW1lID0gYnVmZmVyLnRvU3RyaW5nKCk7IC8vIEZJWE1F
OiBGaW5kIGEgd2F5IHRvIGRvIHRoaXMgd2l0aG91dCBzaHJpbmtpbmcgdGhlIGJ1ZmZlci4KKyAg
ICAgICAgICAgICAgICBpZiAodXJsU2NoZW1lID09ICJmaWxlIikKKyAgICAgICAgICAgICAgICAg
ICAgc3RhdGUgPSBTdGF0ZTo6RmlsZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpc1NwZWNp
YWxTY2hlbWUodXJsU2NoZW1lKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZS5wcm90
b2NvbCgpID09IHVybFNjaGVtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3Rh
dGU6OlNwZWNpYWxSZWxhdGl2ZU9yQXV0aG9yaXR5OworICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpTcGVjaWFsQXV0aG9yaXR5
U2xhc2hlczsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3Rh
dGUgPSBTdGF0ZTo6U2NoZW1lRW5kQ2hlY2tGb3JTbGFzaGVzOworICAgICAgICAgICAgICAgIGJ1
ZmZlci5hcHBlbmQoJzonKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
YnVmZmVyLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6Tm9TY2hlbWU7
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8gc3RhcnQgb3ZlciBoZXJl
LgorICAgICAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICArK2M7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTdGF0ZTo6U2NoZW1lRW5kQ2hlY2tGb3JTbGFzaGVzOgorICAgICAg
ICAgICAgTE9HX1NUQVRFKCJTY2hlbWVFbmRDaGVja0ZvclNsYXNoZXMiKTsKKyAgICAgICAgICAg
IGlmICgqYyA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpQYXRoT3JB
dXRob3JpdHk7CisgICAgICAgICAgICAgICAgKytjOworICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6Q2Fubm90QmVBQmFzZVVSTFBhdGg7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdGF0ZTo6Tm9TY2hlbWU6CisgICAgICAgICAgICBM
T0dfU1RBVEUoIk5vU2NoZW1lIik7CisgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
ICAgICAgICAgKytjOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhdGU6OlNw
ZWNpYWxSZWxhdGl2ZU9yQXV0aG9yaXR5OgorICAgICAgICAgICAgTE9HX1NUQVRFKCJTcGVjaWFs
UmVsYXRpdmVPckF1dGhvcml0eSIpOworICAgICAgICAgICAgaWYgKCpjID09ICcvJykgeworICAg
ICAgICAgICAgICAgICsrYzsKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSBlbmQpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgICAgICAgICAgICAgIGlmICgqYyA9PSAn
LycpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6U3BlY2lhbEF1dGhvcml0
eUlnbm9yZVNsYXNoZXM7CisgICAgICAgICAgICAgICAgICAgICsrYzsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlJlbGF0aXZlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhdGU6OlBhdGhPckF1dGhvcml0eToKKyAg
ICAgICAgICAgIExPR19TVEFURSgiUGF0aE9yQXV0aG9yaXR5Iik7CisgICAgICAgICAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgICAgICAgICAgKytjOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgU3RhdGU6OlJlbGF0aXZlOgorICAgICAgICAgICAgTE9HX1NUQVRFKCJSZWxhdGl2
ZSIpOworICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgICAgICsrYzsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0YXRlOjpSZWxhdGl2ZVNsYXNoOgorICAg
ICAgICAgICAgTE9HX1NUQVRFKCJSZWxhdGl2ZVNsYXNoIik7CisgICAgICAgICAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgICAgICAgICAgKytjOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgU3RhdGU6OlNwZWNpYWxBdXRob3JpdHlTbGFzaGVzOgorICAgICAgICAgICAgTE9HX1NU
QVRFKCJTcGVjaWFsQXV0aG9yaXR5U2xhc2hlcyIpOworICAgICAgICAgICAgaWYgKCpjID09ICcv
JykgeworICAgICAgICAgICAgICAgICsrYzsKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSBlbmQp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgICAgICAgICAgICAgIGJ1
ZmZlci5hcHBlbmQoJy8nKTsKKyAgICAgICAgICAgICAgICBpZiAoKmMgPT0gJy8nKSB7CisgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoJy8nKTsKKyAgICAgICAgICAgICAgICAgICAg
c3RhdGUgPSBTdGF0ZTo6U3BlY2lhbEF1dGhvcml0eUlnbm9yZVNsYXNoZXM7CisgICAgICAgICAg
ICAgICAgICAgICsrYzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICAgICAgKytjOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhdGU6OlNwZWNpYWxBdXRob3JpdHlJ
Z25vcmVTbGFzaGVzOgorICAgICAgICAgICAgTE9HX1NUQVRFKCJTcGVjaWFsQXV0aG9yaXR5SWdu
b3JlU2xhc2hlcyIpOworICAgICAgICAgICAgaWYgKCpjICE9ICcvJyAmJiAqYyAhPSAnXFwnKSB7
CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6QXV0aG9yaXR5OworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICAgICAgICAgICsrYzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0YXRl
OjpBdXRob3JpdHk6CisgICAgICAgICAgICBMT0dfU1RBVEUoIkF1dGhvcml0eSIpOworICAgICAg
ICAgICAgaWYgKCF1cmwubV91c2VyU3RhcnQpCisgICAgICAgICAgICAgICAgdXJsLm1fdXNlclN0
YXJ0ID0gYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgaWYgKCpjID09ICdAJykgeworICAg
ICAgICAgICAgICAgIHVybC5tX3Bhc3N3b3JkRW5kID0gYnVmZmVyLmxlbmd0aCgpOworICAgICAg
ICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoJ0AnKTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0
YXRlOjpIb3N0OworICAgICAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKCpjID09ICc6JykgeworICAgICAgICAgICAgICAgIHVybC5tX3VzZXJFbmQg
PSBidWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgqYyk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICgqYyA9PSAnLycgfHwgKmMg
PT0gJz8nIHx8ICpjID09ICcjJykgeworICAgICAgICAgICAgICAgICAgICB1cmwubV9wYXNzd29y
ZEVuZCA9IGJ1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0
ZTo6SG9zdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVu
ZCgqYyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICArK2M7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTdGF0ZTo6SG9zdDoKKyAgICAgICAgY2FzZSBTdGF0ZTo6SG9zdG5h
bWU6CisgICAgICAgICAgICBMT0dfU1RBVEUoIkhvc3QvSG9zdG5hbWUiKTsKKyAgICAgICAgICAg
IGlmICgqYyA9PSAnOicpIHsKKyAgICAgICAgICAgICAgICB1cmwubV9ob3N0RW5kID0gYnVmZmVy
Lmxlbmd0aCgpOworICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoJzonKTsKKyAgICAgICAg
ICAgICAgICBzdGF0ZSA9IFN0YXRlOjpQb3J0OworICAgICAgICAgICAgfSBlbHNlIGlmICgqYyA9
PSAnLycgfHwgKmMgPT0gJz8nIHx8ICpjID09ICcjJykgeworICAgICAgICAgICAgICAgIHVybC5t
X2hvc3RFbmQgPSBidWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0
ZTo6UGF0aDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoKmMpOworICAgICAgICAgICAgKytjOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhdGU6OlBvcnQ6CisgICAgICAgICAgICBM
T0dfU1RBVEUoIlBvcnQiKTsKKyAgICAgICAgICAgIGlmIChpc0FTQ0lJRGlnaXQoYykpIHsKKyAg
ICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCpjKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
KmMgPT0gJy8nIHx8ICpjID09ICc/JyB8fCAqYyA9PSAnIycpIHsKKyAgICAgICAgICAgICAgICB1
cmwubV9wb3J0RW5kID0gYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIHN0YXRlID0g
U3RhdGU6OlBhdGhTdGFydDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgICAgICAgICAgKytj
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhdGU6OkZpbGU6CisgICAgICAg
ICAgICBMT0dfU1RBVEUoIkZpbGUiKTsKKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgICAgICAgICArK2M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdGF0ZTo6
RmlsZVNsYXNoOgorICAgICAgICAgICAgTE9HX1NUQVRFKCJGaWxlU2xhc2giKTsKKyAgICAgICAg
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgICAgICArK2M7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTdGF0ZTo6RmlsZUhvc3Q6CisgICAgICAgICAgICBMT0dfU1RBVEUo
IkZpbGVIb3N0Iik7CisgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICAgICAg
KytjOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhdGU6OlBhdGhTdGFydDoK
KyAgICAgICAgICAgIExPR19TVEFURSgiUGF0aFN0YXJ0Iik7CisgICAgICAgICAgICBzdGF0ZSA9
IFN0YXRlOjpQYXRoOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgU3RhdGU6
OlBhdGg6CisgICAgICAgICAgICBMT0dfU1RBVEUoIlBhdGgiKTsKKyAgICAgICAgICAgIGlmICgq
YyA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICArK2M7CisgICAgICAgICAgICAgICAgaWYgKGMg
PT0gZW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAgICAg
ICAgICBpZiAoKmMgPT0gJy4nKSB7CisgICAgICAgICAgICAgICAgICAgICsrYzsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGMgPT0gZW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IE51bGxvcHQ7CisgICAgICAgICAgICAgICAgICAgIGlmICgqYyA9PSAnLicpCisgICAgICAgICAg
ICAgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICAgICAgICAgICAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBidWZmZXIu
YXBwZW5kKCcvJyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCpjID09ICc/JykgeworICAgICAg
ICAgICAgICAgIHVybC5tX3BhdGhFbmQgPSBidWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAg
ICAgc3RhdGUgPSBTdGF0ZTo6UXVlcnk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKCpjID09ICcjJykgeworICAgICAgICAgICAgICAgIHVybC5tX3Bh
dGhFbmQgPSBidWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6
RnJhZ21lbnQ7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAvLyBGSVhNRTogUGVyY2VudCBlbmNvZGUgYworICAgICAgICAgICAgYnVmZmVyLmFw
cGVuZCgqYyk7CisgICAgICAgICAgICArK2M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBTdGF0ZTo6Q2Fubm90QmVBQmFzZVVSTFBhdGg6CisgICAgICAgICAgICBMT0dfU1RBVEUo
IkNhbm5vdEJlQUJhc2VVUkxQYXRoIik7CisgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgICAgICAgICAgKytjOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhdGU6
OlF1ZXJ5OgorICAgICAgICAgICAgTE9HX1NUQVRFKCJRdWVyeSIpOworICAgICAgICAgICAgaWYg
KCpjID09ICcjJykgeworICAgICAgICAgICAgICAgIHVybC5tX3F1ZXJ5RW5kID0gYnVmZmVyLmxl
bmd0aCgpOworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OkZyYWdtZW50OworICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnVmZmVyLmFw
cGVuZCgqYyk7CisgICAgICAgICAgICArK2M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBTdGF0ZTo6RnJhZ21lbnQ6CisgICAgICAgICAgICBMT0dfU1RBVEUoIkZyYWdtZW50Iik7
CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCpjKTsKKyAgICAgICAgICAgICsrYzsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHVybC5tX3N0cmluZyA9IGJ1ZmZl
ci50b1N0cmluZygpOworICAgIHJldHVybiB1cmw7CiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyMDQ0MTYpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNSBAQAorMjAxNi0wOC0xMiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEluaXRpYWwgVVJMUGFyc2VyIGltcGxlbWVudGF0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA4
MTEKKworICAgICAgICBSZXZpZXdlZCBieSBCcmFkeSBFaWRzb24uCisKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2VyLmNwcDoKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OmVxKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNoZWNrVVJMKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisKIDIwMTYtMDgtMTIgIEJyYWR5IEVpZHNvbiAgPGJl
aWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aGUgMzItYml0IE1hYyBidWlsZCBhZnRl
cjoKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkxQYXJzZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkxQYXJz
ZXIuY3BwCShyZXZpc2lvbiAyMDQzODApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvVVJMUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsMzQgQEAgcHVi
bGljOgogICAgIH0KIH07CiAKK3N0cnVjdCBFeHBlY3RlZFBhcnRzIHsKKyAgICBTdHJpbmcgcHJv
dG9jb2w7CisgICAgU3RyaW5nIHVzZXI7CisgICAgU3RyaW5nIHBhc3N3b3JkOworICAgIFN0cmlu
ZyBob3N0OworICAgIHVuc2lnbmVkIHNob3J0IHBvcnQ7CisgICAgU3RyaW5nIHBhdGg7CisgICAg
U3RyaW5nIHF1ZXJ5OworICAgIFN0cmluZyBmcmFnbWVudDsKK307CisgICAgCitzdGF0aWMgdm9p
ZCBlcShjb25zdCBTdHJpbmcmIHMxLCBjb25zdCBTdHJpbmcmIHMyKSB7IEVYUEVDVF9TVFJFUShz
MS51dGY4KCkuZGF0YSgpLCBzMi51dGY4KCkuZGF0YSgpKTsgfQorc3RhdGljIHZvaWQgY2hlY2tV
UkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0IEV4cGVjdGVkUGFydHMmIHBhcnRzKQoreworICAgIGVx
KHVybC5wcm90b2NvbCgpLCBwYXJ0cy5wcm90b2NvbCk7CisgICAgZXEodXJsLnVzZXIoKSwgcGFy
dHMudXNlcik7CisgICAgZXEodXJsLnBhc3MoKSwgcGFydHMucGFzc3dvcmQpOworICAgIGVxKHVy
bC5ob3N0KCksIHBhcnRzLmhvc3QpOworICAgIEVYUEVDVF9FUSh1cmwucG9ydCgpLCBwYXJ0cy5w
b3J0KTsKKyAgICBlcSh1cmwucGF0aCgpLCBwYXJ0cy5wYXRoKTsKKyAgICBlcSh1cmwucXVlcnko
KSwgcGFydHMucXVlcnkpOworICAgIGVxKHVybC5mcmFnbWVudElkZW50aWZpZXIoKSwgcGFydHMu
ZnJhZ21lbnQpOworfQorCiBURVNUX0YoVVJMUGFyc2VyVGVzdCwgUGFyc2UpCiB7Ci0gICAgRVhQ
RUNUX1RSVUUoV2ViQ29yZTo6VVJMUGFyc2VyOjpwYXJzZSgiaW52YWxpZCIpID09IE51bGxvcHQp
OworICAgIGF1dG8gdXJsID0gVVJMUGFyc2VyOjpwYXJzZSgiaHR0cDovL3VzZXI6cGFzc0B3ZWJr
aXQub3JnOjEyMy9wYXRoP3F1ZXJ5I2ZyYWdtZW50Iik7CisgICAgY2hlY2tVUkwodXJsLnZhbHVl
KCksIHsiaHR0cCIsICJ1c2VyIiwgInBhc3MiLCAid2Via2l0Lm9yZyIsIDEyMywgIi9wYXRoIiwg
InF1ZXJ5IiwgImZyYWdtZW50In0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJ
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>