<?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>162105</bug_id>
          
          <creation_ts>2016-09-16 16:57:40 -0700</creation_ts>
          <short_desc>Optimize URLParser</short_desc>
          <delta_ts>2016-09-21 10:55:48 -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>darin</cc>
    
    <cc>mmaxfield</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1230705</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-16 16:57:40 -0700</bug_when>
    <thetext>Optimize URLParser</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230706</commentid>
    <comment_count>1</comment_count>
      <attachid>289143</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-16 16:58:30 -0700</bug_when>
    <thetext>Created attachment 289143
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230711</commentid>
    <comment_count>2</comment_count>
      <attachid>289143</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-16 17:00:45 -0700</bug_when>
    <thetext>Comment on attachment 289143
Patch

Incomplete and needs tests.
Based partially on feedback from https://bugs.webkit.org/show_bug.cgi?id=161968</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231942</commentid>
    <comment_count>3</comment_count>
      <attachid>289419</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-20 18:18:24 -0700</bug_when>
    <thetext>Created attachment 289419
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231943</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-20 18:19:14 -0700</bug_when>
    <thetext>There&apos;s probably a better way to encode invalid code points.  I&apos;m not familiar with it, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231946</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-20 18:32:54 -0700</bug_when>
    <thetext>By the way, just using the result of U8_APPEND_UNSAFE with invalid code points matches the existing URL::parse.  Should we just keep doing that, or try to match Chrome and Firefox?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231947</commentid>
    <comment_count>6</comment_count>
      <attachid>289421</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-20 18:36:03 -0700</bug_when>
    <thetext>Created attachment 289421
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231953</commentid>
    <comment_count>7</comment_count>
      <attachid>289424</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-20 19:20:50 -0700</bug_when>
    <thetext>Created attachment 289424
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231963</commentid>
    <comment_count>8</comment_count>
      <attachid>289424</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-09-20 20:24:50 -0700</bug_when>
    <thetext>Comment on attachment 289424
Patch

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

r=me

&gt; Source/WebCore/ChangeLog:8
&gt; +        Covered by new API tests.

What&apos;s the benchmark result?

&gt; Source/WebCore/platform/URLParser.cpp:468
&gt; +const size_t replacementCharacterUTF8PercentEncodedLength = 9;

you can use sizeof(replacementCharacterUTF8PercentEncoded) - 1 here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231989</commentid>
    <comment_count>9</comment_count>
      <attachid>289433</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-20 23:30:12 -0700</bug_when>
    <thetext>Created attachment 289433
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231990</commentid>
    <comment_count>10</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-20 23:34:40 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 289424 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=289424&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        Covered by new API tests.
&gt; 
&gt; What&apos;s the benchmark result?
This is about a 5% speedup on my url parsing benchmark.
&gt; 
&gt; &gt; Source/WebCore/platform/URLParser.cpp:468
&gt; &gt; +const size_t replacementCharacterUTF8PercentEncodedLength = 9;
&gt; 
&gt; you can use sizeof(replacementCharacterUTF8PercentEncoded) - 1 here.
replacementCharacterUTF8PercentEncoded is a pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231993</commentid>
    <comment_count>11</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-20 23:36:56 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/206198</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232110</commentid>
    <comment_count>12</comment_count>
      <attachid>289433</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-09-21 10:55:48 -0700</bug_when>
    <thetext>Comment on attachment 289433
Patch

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

&gt; Source/WebCore/platform/URLParser.cpp:467
&gt; +const char* replacementCharacterUTF8PercentEncoded = &quot;%EF%BF%BD&quot;;

Should be either:

    const char* const replacementCharacterUTF8PercentEncoded = &quot;%EF%BF%BD&quot;;

Or:

    const char replacementCharacterUTF8PercentEncoded[] = &quot;%EF%BF%BD&quot;;

&gt; Source/WebCore/platform/URLParser.cpp:468
&gt; +const size_t replacementCharacterUTF8PercentEncodedLength = 9;

This should not be necessary with modern compilers. Instead you should be able to use strlen. The compilers do constant folding if you call strlen on a constant string. However, because of the issue above, replacementCharacterUTF8PercentEncoded was probably not a constant string, which I suppose made this necessary/valuable.

&gt; Source/WebCore/platform/URLParser.cpp:516
&gt; +        if (!U_IS_UNICODE_CHAR(codePoint)) {

I don’t think the test coverage covers all the cases in U_IS_UNICODE_CHAR:

    a) U+D800-U+DFFF
    b) U+FDD0-U+FDEF (new with Unicode 3.1)
    c) U+xxFFFE and U+xxFFFF where xx is 00-10, a total of 34 different code points
    d) any value greater than U+10FFFF

I think we are focusing on (a), but we’d need to try at least some characters in (b), (c), and (d) to be sure we match what the standard calls for and confirm that this is the correct macro to use. And cover some other unusual character to make sure they are not turned into the replacement characters, such as private use characters and characters right next to the range here.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289143</attachid>
            <date>2016-09-16 16:58:30 -0700</date>
            <delta_ts>2016-09-20 18:18:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162105-20160916165549.patch</filename>
            <type>text/plain</type>
            <size>15953</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjA1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDE2LTA5LTE2ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgT3B0aW1pemUg
VVJMUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjIxMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9VUkxQYXJzZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNDMENvbnRyb2wpOgorICAgICAgICAoV2ViQ29yZTo6
aXNDMENvbnRyb2xPclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzVGFiT3JOZXdsaW5lKToK
KyAgICAgICAgKFdlYkNvcmU6OmlzSW5TaW1wbGVFbmNvZGVTZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6aXNJbkRlZmF1bHRFbmNvZGVTZXQpOgorICAgICAgICAoV2ViQ29yZTo6aXNJblVzZXJJbmZv
RW5jb2RlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OmlzSW52YWxpZERvbWFpbkNoYXJhY3Rlcik6
CisgICAgICAgIChXZWJDb3JlOjppc1BlcmNlbnRPck5vbkFTQ0lJKToKKyAgICAgICAgKFdlYkNv
cmU6OmlzU2xhc2hRdWVzdGlvbk9ySGFzaCk6CisgICAgICAgIChXZWJDb3JlOjppc1dpbmRvd3NE
cml2ZUxldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRDb3B5RmlsZVVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpwZXJjZW50RW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnV0ZjhQZXJj
ZW50RW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnV0ZjhQZXJjZW50RW5jb2RlUXVlcnkpOgor
ICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6aXNEZWZh
dWx0UG9ydCk6CisgICAgICAgIChXZWJDb3JlOjppc1NwZWNpYWxTY2hlbWUpOgorICAgICAgICAo
V2ViQ29yZTo6Y29weUFTQ0lJU3RyaW5nVW50aWwpOgorICAgICAgICAoV2ViQ29yZTo6aXNQZXJj
ZW50RW5jb2RlZERvdCk6CisgICAgICAgIChXZWJDb3JlOjppc1NpbmdsZURvdFBhdGhTZWdtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzRG91YmxlRG90UGF0aFNlZ21lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Y29uc3VtZVNpbmdsZURvdFBhdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbnN1bWVEb3VibGVEb3RQYXRoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxp
emVJUHY0KToKKyAgICAgICAgKFdlYkNvcmU6Onplcm9TZXF1ZW5jZUxlbmd0aCk6CisgICAgICAg
IChXZWJDb3JlOjpmaW5kTG9uZ2VzdFplcm9TZXF1ZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpz
ZXJpYWxpemVJUHY2UGllY2UpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplSVB2Nik6Cisg
ICAgICAgIChXZWJDb3JlOjpwYXJzZUlQdjROdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6cG93
MjU2KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSVB2NEhvc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VJUHY2SG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpwZXJjZW50RGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zT25seUFTQ0lJKToKKyAgICAgICAgKFdlYkNvcmU6OmRv
bWFpblRvQVNDSUkpOgorICAgICAgICAoV2ViQ29yZTo6aGFzSW52YWxpZERvbWFpbkNoYXJhY3Rl
cik6CisgICAgICAgIChXZWJDb3JlOjpmb3JtVVJMRGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OnNlcmlhbGl6ZVVSTEVuY29kZWRGb3JtKToKKwogMjAxNi0wOS0xNiAgQW50dGkgS29pdmlzdG8g
IDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHNpemUgYXNzZXJ0IGZvciBSZW5kZXJF
bGVtZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAJKHJldmlzaW9u
IDIwNjA0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM4MywxOSArMzgzLDE5IEBAIHN0YXRpYyBjb25zdCB1aW50OF90IGNoYXJh
Y3RlckNsYXNzVGFibGUKICAgICBRdWVyeVBlcmNlbnQsIC8vIDB4RkYKIH07CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzQzBDb250cm9sKENoYXJhY3Rl
clR5cGUgY2hhcmFjdGVyKSB7IHJldHVybiBjaGFyYWN0ZXIgPD0gMHgxRjsgfQotdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNDMENvbnRyb2xPclNwYWNlKENo
YXJhY3RlclR5cGUgY2hhcmFjdGVyKSB7IHJldHVybiBjaGFyYWN0ZXIgPD0gMHgyMDsgfQotdGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNUYWJPck5ld2xpbmUo
Q2hhcmFjdGVyVHlwZSBjaGFyYWN0ZXIpIHsgcmV0dXJuIGNoYXJhY3RlciA8PSAweEQgJiYgY2hh
cmFjdGVyID49IDB4OSAmJiBjaGFyYWN0ZXIgIT0gMHhCICYmIGNoYXJhY3RlciAhPSAweEM7IH0K
LXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzSW5TaW1wbGVF
bmNvZGVTZXQoQ2hhcmFjdGVyVHlwZSBjaGFyYWN0ZXIpIHsgcmV0dXJuIGNoYXJhY3RlciA+IDB4
N0UgfHwgaXNDMENvbnRyb2woY2hhcmFjdGVyKTsgfQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gc3RhdGljIGJvb2wgaXNJbkRlZmF1bHRFbmNvZGVTZXQoQ2hhcmFjdGVyVHlwZSBj
aGFyYWN0ZXIpIHsgcmV0dXJuIGNoYXJhY3RlciA+IDB4N0UgfHwgY2hhcmFjdGVyQ2xhc3NUYWJs
ZVtjaGFyYWN0ZXJdICYgRGVmYXVsdDsgfQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gc3RhdGljIGJvb2wgaXNJblVzZXJJbmZvRW5jb2RlU2V0KENoYXJhY3RlclR5cGUgY2hhcmFj
dGVyKSB7IHJldHVybiBjaGFyYWN0ZXIgPiAweDdFIHx8IGNoYXJhY3RlckNsYXNzVGFibGVbY2hh
cmFjdGVyXSAmIFVzZXJJbmZvOyB9Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBz
dGF0aWMgYm9vbCBpc0ludmFsaWREb21haW5DaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjaGFyYWN0
ZXIpIHsgcmV0dXJuIGNoYXJhY3RlciA8PSAnXScgJiYgY2hhcmFjdGVyQ2xhc3NUYWJsZVtjaGFy
YWN0ZXJdICYgSW52YWxpZERvbWFpbjsgfQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gc3RhdGljIGJvb2wgaXNQZXJjZW50T3JOb25BU0NJSShDaGFyYWN0ZXJUeXBlIGNoYXJhY3Rl
cikgeyByZXR1cm4gIWlzQVNDSUkoY2hhcmFjdGVyKSB8fCBjaGFyYWN0ZXIgPT0gJyUnOyB9Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc1NsYXNoUXVlc3Rp
b25Pckhhc2goQ2hhcmFjdGVyVHlwZSBjaGFyYWN0ZXIpIHsgcmV0dXJuIGNoYXJhY3RlciA8PSAn
XFwnICYmIGNoYXJhY3RlckNsYXNzVGFibGVbY2hhcmFjdGVyXSAmIFNsYXNoUXVlc3Rpb25Pckhh
c2g7IH0KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBzdGF0aWMgYm9v
bCBpc0MwQ29udHJvbChDaGFyYWN0ZXJUeXBlIGNoYXJhY3RlcikgeyByZXR1cm4gY2hhcmFjdGVy
IDw9IDB4MUY7IH0KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBzdGF0
aWMgYm9vbCBpc0MwQ29udHJvbE9yU3BhY2UoQ2hhcmFjdGVyVHlwZSBjaGFyYWN0ZXIpIHsgcmV0
dXJuIGNoYXJhY3RlciA8PSAweDIwOyB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBpbmxpbmUgc3RhdGljIGJvb2wgaXNUYWJPck5ld2xpbmUoQ2hhcmFjdGVyVHlwZSBjaGFyYWN0
ZXIpIHsgcmV0dXJuIGNoYXJhY3RlciA8PSAweEQgJiYgY2hhcmFjdGVyID49IDB4OSAmJiBjaGFy
YWN0ZXIgIT0gMHhCICYmIGNoYXJhY3RlciAhPSAweEM7IH0KK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGlubGluZSBzdGF0aWMgYm9vbCBpc0luU2ltcGxlRW5jb2RlU2V0KENoYXJh
Y3RlclR5cGUgY2hhcmFjdGVyKSB7IHJldHVybiBjaGFyYWN0ZXIgPiAweDdFIHx8IGlzQzBDb250
cm9sKGNoYXJhY3Rlcik7IH0KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGlubGlu
ZSBzdGF0aWMgYm9vbCBpc0luRGVmYXVsdEVuY29kZVNldChDaGFyYWN0ZXJUeXBlIGNoYXJhY3Rl
cikgeyByZXR1cm4gY2hhcmFjdGVyID4gMHg3RSB8fCBjaGFyYWN0ZXJDbGFzc1RhYmxlW2NoYXJh
Y3Rlcl0gJiBEZWZhdWx0OyB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxp
bmUgc3RhdGljIGJvb2wgaXNJblVzZXJJbmZvRW5jb2RlU2V0KENoYXJhY3RlclR5cGUgY2hhcmFj
dGVyKSB7IHJldHVybiBjaGFyYWN0ZXIgPiAweDdFIHx8IGNoYXJhY3RlckNsYXNzVGFibGVbY2hh
cmFjdGVyXSAmIFVzZXJJbmZvOyB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBp
bmxpbmUgc3RhdGljIGJvb2wgaXNJbnZhbGlkRG9tYWluQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUg
Y2hhcmFjdGVyKSB7IHJldHVybiBjaGFyYWN0ZXIgPD0gJ10nICYmIGNoYXJhY3RlckNsYXNzVGFi
bGVbY2hhcmFjdGVyXSAmIEludmFsaWREb21haW47IH0KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IGlubGluZSBzdGF0aWMgYm9vbCBpc1BlcmNlbnRPck5vbkFTQ0lJKENoYXJhY3Rl
clR5cGUgY2hhcmFjdGVyKSB7IHJldHVybiAhaXNBU0NJSShjaGFyYWN0ZXIpIHx8IGNoYXJhY3Rl
ciA9PSAnJSc7IH0KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBzdGF0
aWMgYm9vbCBpc1NsYXNoUXVlc3Rpb25Pckhhc2goQ2hhcmFjdGVyVHlwZSBjaGFyYWN0ZXIpIHsg
cmV0dXJuIGNoYXJhY3RlciA8PSAnXFwnICYmIGNoYXJhY3RlckNsYXNzVGFibGVbY2hhcmFjdGVy
XSAmIFNsYXNoUXVlc3Rpb25Pckhhc2g7IH0KIHN0YXRpYyBib29sIHNob3VsZFBlcmNlbnRFbmNv
ZGVRdWVyeUJ5dGUodWludDhfdCBieXRlKSB7IHJldHVybiBjaGFyYWN0ZXJDbGFzc1RhYmxlW2J5
dGVdICYgUXVlcnlQZXJjZW50OyB9CiAgICAgCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPgotc3RhdGljIGJvb2wgaXNXaW5kb3dzRHJpdmVMZXR0ZXIoQ29kZVBvaW50SXRlcmF0b3I8
Q2hhcmFjdGVyVHlwZT4gaXRlcmF0b3IpCitpbmxpbmUgc3RhdGljIGJvb2wgaXNXaW5kb3dzRHJp
dmVMZXR0ZXIoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4gaXRlcmF0b3IpCiB7CiAg
ICAgaWYgKGl0ZXJhdG9yLmF0RW5kKCkgfHwgIWlzQVNDSUlBbHBoYSgqaXRlcmF0b3IpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC00MDUsNyArNDA1LDcgQEAgc3RhdGljIGJvb2wgaXNXaW5k
b3dzRHJpdmVMZXR0ZXIoQ29kZVBvaQogICAgIHJldHVybiAqaXRlcmF0b3IgPT0gJzonIHx8ICpp
dGVyYXRvciA9PSAnfCc7CiB9CiAKLXN0YXRpYyBib29sIGlzV2luZG93c0RyaXZlTGV0dGVyKGNv
bnN0IFZlY3RvcjxMQ2hhcj4mIGJ1ZmZlciwgc2l6ZV90IGluZGV4KQoraW5saW5lIHN0YXRpYyBi
b29sIGlzV2luZG93c0RyaXZlTGV0dGVyKGNvbnN0IFZlY3RvcjxMQ2hhcj4mIGJ1ZmZlciwgc2l6
ZV90IGluZGV4KQogewogICAgIGlmIChidWZmZXIuc2l6ZSgpIDwgaW5kZXggKyAyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC00MTMsNyArNDEzLDcgQEAgc3RhdGljIGJvb2wgaXNXaW5kb3dz
RHJpdmVMZXR0ZXIoY29uc3QgVgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
Pgotc3RhdGljIGJvb2wgc2hvdWxkQ29weUZpbGVVUkwoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFj
dGVyVHlwZT4gaXRlcmF0b3IpCitpbmxpbmUgc3RhdGljIGJvb2wgc2hvdWxkQ29weUZpbGVVUkwo
Q29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4gaXRlcmF0b3IpCiB7CiAgICAgaWYgKGlz
V2luZG93c0RyaXZlTGV0dGVyKGl0ZXJhdG9yKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00
MjgsMTQgKzQyOCwxNCBAQCBzdGF0aWMgYm9vbCBzaG91bGRDb3B5RmlsZVVSTChDb2RlUG9pbnRJ
CiAgICAgcmV0dXJuICFpc1NsYXNoUXVlc3Rpb25Pckhhc2goKml0ZXJhdG9yKTsKIH0KIAotc3Rh
dGljIHZvaWQgcGVyY2VudEVuY29kZSh1aW50OF90IGJ5dGUsIFZlY3RvcjxMQ2hhcj4mIGJ1ZmZl
cikKK2lubGluZSBzdGF0aWMgdm9pZCBwZXJjZW50RW5jb2RlKHVpbnQ4X3QgYnl0ZSwgVmVjdG9y
PExDaGFyPiYgYnVmZmVyKQogewogICAgIGJ1ZmZlci5hcHBlbmQoJyUnKTsKICAgICBidWZmZXIu
YXBwZW5kKHVwcGVyTmliYmxlVG9BU0NJSUhleERpZ2l0KGJ5dGUpKTsKICAgICBidWZmZXIuYXBw
ZW5kKGxvd2VyTmliYmxlVG9BU0NJSUhleERpZ2l0KGJ5dGUpKTsKIH0KIAotc3RhdGljIHZvaWQg
dXRmOFBlcmNlbnRFbmNvZGUoVUNoYXIzMiBjb2RlUG9pbnQsIFZlY3RvcjxMQ2hhcj4mIGRlc3Rp
bmF0aW9uLCBib29sKCppc0luQ29kZVNldCkoVUNoYXIzMikpCitpbmxpbmUgc3RhdGljIHZvaWQg
dXRmOFBlcmNlbnRFbmNvZGUoVUNoYXIzMiBjb2RlUG9pbnQsIFZlY3RvcjxMQ2hhcj4mIGRlc3Rp
bmF0aW9uLCBib29sKCppc0luQ29kZVNldCkoVUNoYXIzMikpCiB7CiAgICAgaWYgKGlzSW5Db2Rl
U2V0KGNvZGVQb2ludCkpIHsKICAgICAgICAgdWludDhfdCBidWZmZXJbVThfTUFYX0xFTkdUSF07
CkBAIC00NTEsMTQgKzQ1MSwyMiBAQCBzdGF0aWMgdm9pZCB1dGY4UGVyY2VudEVuY29kZShVQ2hh
cjMyIGNvCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCB1dGY4UGVyY2VudEVuY29kZVF1ZXJ5KFVD
aGFyMzIgY29kZVBvaW50LCBWZWN0b3I8TENoYXI+JiBkZXN0aW5hdGlvbikKK2lubGluZSBzdGF0
aWMgdm9pZCB1dGY4UGVyY2VudEVuY29kZVF1ZXJ5KFVDaGFyMzIgY29kZVBvaW50LCBWZWN0b3I8
TENoYXI+JiBkZXN0aW5hdGlvbikKIHsKKyAgICBpZiAoaXNBU0NJSShjb2RlUG9pbnQpKSB7Cisg
ICAgICAgIGlmIChzaG91bGRQZXJjZW50RW5jb2RlUXVlcnlCeXRlKGNvZGVQb2ludCkpCisgICAg
ICAgICAgICBwZXJjZW50RW5jb2RlKGNvZGVQb2ludCwgZGVzdGluYXRpb24pOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBkZXN0aW5hdGlvbi5hcHBlbmQoY29kZVBvaW50KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoIVVfSVNfVU5JQ09ERV9DSEFSKGNvZGVQb2ludCkpIHsK
KyAgICAgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlIGFuZCB0ZXN0IHRoaXMuCisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAgICAgdWludDhfdCBidWZmZXJbVThfTUFYX0xFTkdUSF07CiAg
ICAgaW50MzJfdCBvZmZzZXQgPSAwOwotICAgIFVCb29sIGVycm9yID0gZmFsc2U7Ci0gICAgVThf
QVBQRU5EKGJ1ZmZlciwgb2Zmc2V0LCBVOF9NQVhfTEVOR1RILCBjb2RlUG9pbnQsIGVycm9yKTsK
LSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihvZmZzZXQgPD0gc3RhdGljX2Nh
c3Q8aW50MzJfdD4oc2l6ZW9mKGJ1ZmZlcikpKTsKLSAgICAvLyBGSVhNRTogQ2hlY2sgZXJyb3Iu
CisgICAgVThfQVBQRU5EX1VOU0FGRShidWZmZXIsIG9mZnNldCwgY29kZVBvaW50KTsKICAgICBm
b3IgKGludDMyX3QgaSA9IDA7IGkgPCBvZmZzZXQ7ICsraSkgewogICAgICAgICBhdXRvIGJ5dGUg
PSBidWZmZXJbaV07CiAgICAgICAgIGlmIChzaG91bGRQZXJjZW50RW5jb2RlUXVlcnlCeXRlKGJ5
dGUpKQpAQCAtNDY4LDcgKzQ3Niw3IEBAIHN0YXRpYyB2b2lkIHV0ZjhQZXJjZW50RW5jb2RlUXVl
cnkoVUNoYXIKICAgICB9CiB9CiAgICAgCi1zdGF0aWMgdm9pZCBlbmNvZGVRdWVyeShjb25zdCBT
dHJpbmdCdWlsZGVyJiBzb3VyY2UsIFZlY3RvcjxMQ2hhcj4mIGRlc3RpbmF0aW9uLCBjb25zdCBU
ZXh0RW5jb2RpbmcmIGVuY29kaW5nKQoraW5saW5lIHN0YXRpYyB2b2lkIGVuY29kZVF1ZXJ5KGNv
bnN0IFN0cmluZ0J1aWxkZXImIHNvdXJjZSwgVmVjdG9yPExDaGFyPiYgZGVzdGluYXRpb24sIGNv
bnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCiB7CiAgICAgLy8gRklYTUU6IEl0IGlzIHVuY2xl
YXIgaW4gdGhlIHNwZWMgd2hhdCB0byBkbyB3aGVuIGVuY29kaW5nIGZhaWxzLiBUaGUgYmVoYXZp
b3Igc2hvdWxkIGJlIHNwZWNpZmllZCBhbmQgdGVzdGVkLgogICAgIENTdHJpbmcgZW5jb2RlZCA9
IGVuY29kaW5nLmVuY29kZShzb3VyY2UudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCksIFVSTEVu
Y29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7CkBAIC00ODMsNyArNDkxLDcgQEAgc3RhdGlj
IHZvaWQgZW5jb2RlUXVlcnkoY29uc3QgU3RyaW5nQnVpbAogICAgIH0KIH0KIAotc3RhdGljIGJv
b2wgaXNEZWZhdWx0UG9ydChTdHJpbmdWaWV3IHNjaGVtZSwgdWludDE2X3QgcG9ydCkKK2lubGlu
ZSBzdGF0aWMgYm9vbCBpc0RlZmF1bHRQb3J0KFN0cmluZ1ZpZXcgc2NoZW1lLCB1aW50MTZfdCBw
b3J0KQogewogICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBmdHBQb3J0ID0gMjE7CiAgICAgc3Rh
dGljIGNvbnN0IHVpbnQxNl90IGdvcGhlclBvcnQgPSA3MDsKQEAgLTU0Myw3ICs1NTEsNyBAQCBz
dGF0aWMgYm9vbCBpc0RlZmF1bHRQb3J0KFN0cmluZ1ZpZXcgc2NoCiAgICAgfQogfQogCi1zdGF0
aWMgYm9vbCBpc1NwZWNpYWxTY2hlbWUoU3RyaW5nVmlldyBzY2hlbWUpCitpbmxpbmUgc3RhdGlj
IGJvb2wgaXNTcGVjaWFsU2NoZW1lKFN0cmluZ1ZpZXcgc2NoZW1lKQogewogICAgIGF1dG8gbGVu
Z3RoID0gc2NoZW1lLmxlbmd0aCgpOwogICAgIGlmICghbGVuZ3RoKQpAQCAtNjM4LDcgKzY0Niw3
IEBAIHNpemVfdCBVUkxQYXJzZXI6OnVybExlbmd0aFVudGlsUGFydChjb24KICAgICByZXR1cm4g
MDsKIH0KIAotc3RhdGljIHZvaWQgY29weUFTQ0lJU3RyaW5nVW50aWwoVmVjdG9yPExDaGFyPiYg
ZGVzdGluYXRpb24sIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXplX3QgbGVuZ3RoSWY4Qml0LCBz
aXplX3QgbGVuZ3RoSWYxNkJpdCkKK2lubGluZSBzdGF0aWMgdm9pZCBjb3B5QVNDSUlTdHJpbmdV
bnRpbChWZWN0b3I8TENoYXI+JiBkZXN0aW5hdGlvbiwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIHNp
emVfdCBsZW5ndGhJZjhCaXQsIHNpemVfdCBsZW5ndGhJZjE2Qml0KQogewogICAgIEFTU0VSVChk
ZXN0aW5hdGlvbi5pc0VtcHR5KCkpOwogICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpIHsKQEAgLTcx
Nyw3ICs3MjUsNyBAQCB2b2lkIFVSTFBhcnNlcjo6Y29weVVSTFBhcnRzVW50aWwoY29uc3QgCiBz
dGF0aWMgY29uc3QgY2hhciogZG90QVNDSUlDb2RlID0gIjJlIjsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBib29sIGlzUGVyY2VudEVuY29kZWREb3QoQ29kZVBv
aW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4gYykKK2lubGluZSBzdGF0aWMgYm9vbCBpc1BlcmNl
bnRFbmNvZGVkRG90KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+IGMpCiB7CiAgICAg
aWYgKGMuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzM1LDcgKzc0Myw3IEBA
IHN0YXRpYyBib29sIGlzUGVyY2VudEVuY29kZWREb3QoQ29kZVBvaW4KIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBib29sIGlzU2luZ2xlRG90UGF0aFNlZ21l
bnQoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4gYykKK2lubGluZSBzdGF0aWMgYm9v
bCBpc1NpbmdsZURvdFBhdGhTZWdtZW50KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+
IGMpCiB7CiAgICAgaWYgKGMuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzU5
LDcgKzc2Nyw3IEBAIHN0YXRpYyBib29sIGlzU2luZ2xlRG90UGF0aFNlZ21lbnQoQ29kZVAKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBib29sIGlzRG91Ymxl
RG90UGF0aFNlZ21lbnQoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4gYykKK2lubGlu
ZSBzdGF0aWMgYm9vbCBpc0RvdWJsZURvdFBhdGhTZWdtZW50KENvZGVQb2ludEl0ZXJhdG9yPENo
YXJhY3RlclR5cGU+IGMpCiB7CiAgICAgaWYgKGMuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNzgzLDcgKzc5MSw3IEBAIHN0YXRpYyBib29sIGlzRG91YmxlRG90UGF0aFNlZ21l
bnQoQ29kZVAKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyB2
b2lkIGNvbnN1bWVTaW5nbGVEb3RQYXRoU2VnbWVudChDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0
ZXJUeXBlPiYgYykKK2lubGluZSBzdGF0aWMgdm9pZCBjb25zdW1lU2luZ2xlRG90UGF0aFNlZ21l
bnQoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4mIGMpCiB7CiAgICAgQVNTRVJUKGlz
U2luZ2xlRG90UGF0aFNlZ21lbnQoYykpOwogICAgIGlmICgqYyA9PSAnLicpIHsKQEAgLTgxMSw3
ICs4MTksNyBAQCBzdGF0aWMgdm9pZCBjb25zdW1lU2luZ2xlRG90UGF0aFNlZ21lbnQoCiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgdm9pZCBjb25zdW1lRG91
YmxlRG90UGF0aFNlZ21lbnQoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4mIGMpCitp
bmxpbmUgc3RhdGljIHZvaWQgY29uc3VtZURvdWJsZURvdFBhdGhTZWdtZW50KENvZGVQb2ludEl0
ZXJhdG9yPENoYXJhY3RlclR5cGU+JiBjKQogewogICAgIEFTU0VSVChpc0RvdWJsZURvdFBhdGhT
ZWdtZW50KGMpKTsKICAgICBpZiAoKmMgPT0gJy4nKQpAQCAtMTU4OCw3ICsxNTk2LDcgQEAgdm9p
ZCBhcHBlbmQoVmVjdG9yPExDaGFyPiYgZGVzdGluYXRpb24sIAogICAgIGRlc3RpbmF0aW9uLmFw
cGVuZChwLCBlbmQgLSBwKTsKIH0KIAotc3RhdGljIHZvaWQgc2VyaWFsaXplSVB2NCh1aW50MzJf
dCBhZGRyZXNzLCBWZWN0b3I8TENoYXI+JiBidWZmZXIpCitpbmxpbmUgc3RhdGljIHZvaWQgc2Vy
aWFsaXplSVB2NCh1aW50MzJfdCBhZGRyZXNzLCBWZWN0b3I8TENoYXI+JiBidWZmZXIpCiB7CiAg
ICAgYXBwZW5kPHVpbnQ4X3Q+KGJ1ZmZlciwgYWRkcmVzcyA+PiAyNCk7CiAgICAgYnVmZmVyLmFw
cGVuZCgnLicpOwpAQCAtMTU5OSw3ICsxNjA3LDcgQEAgc3RhdGljIHZvaWQgc2VyaWFsaXplSVB2
NCh1aW50MzJfdCBhZGRyZQogICAgIGFwcGVuZDx1aW50OF90PihidWZmZXIsIGFkZHJlc3MpOwog
fQogICAgIAotc3RhdGljIHNpemVfdCB6ZXJvU2VxdWVuY2VMZW5ndGgoY29uc3Qgc3RkOjphcnJh
eTx1aW50MTZfdCwgOD4mIGFkZHJlc3MsIHNpemVfdCBiZWdpbikKK2lubGluZSBzdGF0aWMgc2l6
ZV90IHplcm9TZXF1ZW5jZUxlbmd0aChjb25zdCBzdGQ6OmFycmF5PHVpbnQxNl90LCA4PiYgYWRk
cmVzcywgc2l6ZV90IGJlZ2luKQogewogICAgIHNpemVfdCBlbmQgPSBiZWdpbjsKICAgICBmb3Ig
KDsgZW5kIDwgODsgZW5kKyspIHsKQEAgLTE2MDksNyArMTYxNyw3IEBAIHN0YXRpYyBzaXplX3Qg
emVyb1NlcXVlbmNlTGVuZ3RoKGNvbnN0IHMKICAgICByZXR1cm4gZW5kIC0gYmVnaW47CiB9CiAK
LXN0YXRpYyBPcHRpb25hbDxzaXplX3Q+IGZpbmRMb25nZXN0WmVyb1NlcXVlbmNlKGNvbnN0IHN0
ZDo6YXJyYXk8dWludDE2X3QsIDg+JiBhZGRyZXNzKQoraW5saW5lIHN0YXRpYyBPcHRpb25hbDxz
aXplX3Q+IGZpbmRMb25nZXN0WmVyb1NlcXVlbmNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDE2X3Qs
IDg+JiBhZGRyZXNzKQogewogICAgIE9wdGlvbmFsPHNpemVfdD4gbG9uZ2VzdDsKICAgICBzaXpl
X3QgbG9uZ2VzdExlbmd0aCA9IDA7CkBAIC0xNjI2LDcgKzE2MzQsNyBAQCBzdGF0aWMgT3B0aW9u
YWw8c2l6ZV90PiBmaW5kTG9uZ2VzdFplcm9TCiAgICAgcmV0dXJuIGxvbmdlc3Q7CiB9CiAgICAg
Ci1zdGF0aWMgdm9pZCBzZXJpYWxpemVJUHY2UGllY2UodWludDE2X3QgcGllY2UsIFZlY3RvcjxM
Q2hhcj4mIGJ1ZmZlcikKK2lubGluZSBzdGF0aWMgdm9pZCBzZXJpYWxpemVJUHY2UGllY2UodWlu
dDE2X3QgcGllY2UsIFZlY3RvcjxMQ2hhcj4mIGJ1ZmZlcikKIHsKICAgICBib29sIHByaW50ZWQg
PSBmYWxzZTsKICAgICBpZiAoYXV0byBuaWJibGUwID0gcGllY2UgPj4gMTIpIHsKQEAgLTE2NDQs
NyArMTY1Miw3IEBAIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZUlQdjZQaWVjZSh1aW50MTZfdCAKICAg
ICBidWZmZXIuYXBwZW5kKGxvd2VyTmliYmxlVG9Mb3dlcmNhc2VBU0NJSUhleERpZ2l0KHBpZWNl
ICYgMHhGKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNlcmlhbGl6ZUlQdjYoc3RkOjphcnJheTx1aW50
MTZfdCwgOD4gYWRkcmVzcywgVmVjdG9yPExDaGFyPiYgYnVmZmVyKQoraW5saW5lIHN0YXRpYyB2
b2lkIHNlcmlhbGl6ZUlQdjYoc3RkOjphcnJheTx1aW50MTZfdCwgOD4gYWRkcmVzcywgVmVjdG9y
PExDaGFyPiYgYnVmZmVyKQogewogICAgIGJ1ZmZlci5hcHBlbmQoJ1snKTsKICAgICBhdXRvIGNv
bXByZXNzUG9pbnRlciA9IGZpbmRMb25nZXN0WmVyb1NlcXVlbmNlKGFkZHJlc3MpOwpAQCAtMTY2
OCw3ICsxNjc2LDcgQEAgc3RhdGljIHZvaWQgc2VyaWFsaXplSVB2NihzdGQ6OmFycmF5PHVpbgog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIE9wdGlvbmFsPHVp
bnQzMl90PiBwYXJzZUlQdjROdW1iZXIoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4m
IGl0ZXJhdG9yKQoraW5saW5lIHN0YXRpYyBPcHRpb25hbDx1aW50MzJfdD4gcGFyc2VJUHY0TnVt
YmVyKENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+JiBpdGVyYXRvcikKIHsKICAgICAv
LyBGSVhNRTogQ2hlY2sgZm9yIG92ZXJmbG93LgogICAgIGVudW0gY2xhc3MgU3RhdGUgOiB1aW50
OF90IHsKQEAgLTE3MjgsNyArMTczNiw3IEBAIHN0YXRpYyBPcHRpb25hbDx1aW50MzJfdD4gcGFy
c2VJUHY0TnVtYmUKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXN0YXRpYyB1aW50NjRfdCBwb3cy
NTYoc2l6ZV90IGV4cG9uZW50KQoraW5saW5lIHN0YXRpYyB1aW50NjRfdCBwb3cyNTYoc2l6ZV90
IGV4cG9uZW50KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGV4cG9uZW50IDw9IDQpOwogICAgIHVp
bnQ2NF90IHZhbHVlc1s1XSA9IHsxLCAyNTYsIDI1NiAqIDI1NiwgMjU2ICogMjU2ICogMjU2LCAy
NTZ1bGwgKiAyNTYgKiAyNTYgKiAyNTYgfTsKQEAgLTE3MzYsNyArMTc0NCw3IEBAIHN0YXRpYyB1
aW50NjRfdCBwb3cyNTYoc2l6ZV90IGV4cG9uZW50KQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPgotc3RhdGljIE9wdGlvbmFsPHVpbnQzMl90PiBwYXJzZUlQdjRIb3N0KENv
ZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+IGl0ZXJhdG9yKQoraW5saW5lIHN0YXRpYyBP
cHRpb25hbDx1aW50MzJfdD4gcGFyc2VJUHY0SG9zdChDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0
ZXJUeXBlPiBpdGVyYXRvcikKIHsKICAgICBWZWN0b3I8dWludDMyX3QsIDQ+IGl0ZW1zOwogICAg
IGl0ZW1zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoNCk7CkBAIC0xNzY3LDcgKzE3NzUsNyBAQCBz
dGF0aWMgT3B0aW9uYWw8dWludDMyX3Q+IHBhcnNlSVB2NEhvc3QoCiB9CiAgICAgCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIE9wdGlvbmFsPHN0ZDo6YXJyYXk8dWlu
dDE2X3QsIDg+PiBwYXJzZUlQdjZIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+
IGMpCitpbmxpbmUgc3RhdGljIE9wdGlvbmFsPHN0ZDo6YXJyYXk8dWludDE2X3QsIDg+PiBwYXJz
ZUlQdjZIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+IGMpCiB7CiAgICAgaWYg
KGMuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CkBAIC0xODYwLDcgKzE4NjgsNyBA
QCBzdGF0aWMgT3B0aW9uYWw8c3RkOjphcnJheTx1aW50MTZfdCwgOD4+CiB9CiAKIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCByZXR1cm4gYSBDU3RyaW5nLgotc3RhdGljIFN0cmluZyBwZXJjZW50RGVj
b2RlKGNvbnN0IExDaGFyKiBpbnB1dCwgc2l6ZV90IGxlbmd0aCkKK2lubGluZSBzdGF0aWMgU3Ry
aW5nIHBlcmNlbnREZWNvZGUoY29uc3QgTENoYXIqIGlucHV0LCBzaXplX3QgbGVuZ3RoKQogewog
ICAgIFN0cmluZ0J1aWxkZXIgb3V0cHV0OwogICAgIApAQCAtMTg4MCwxNCArMTg4OCwxNCBAQCBz
dGF0aWMgU3RyaW5nIHBlcmNlbnREZWNvZGUoY29uc3QgTENoYXIqCiAgICAgcmV0dXJuIG91dHB1
dC50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKTsKIH0KIAotc3RhdGljIGJvb2wgY29udGFpbnNP
bmx5QVNDSUkoY29uc3QgU3RyaW5nJiBzdHJpbmcpCitpbmxpbmUgc3RhdGljIGJvb2wgY29udGFp
bnNPbmx5QVNDSUkoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgaWYgKHN0cmluZy5pczhC
aXQoKSkKICAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNBcmVBbGxBU0NJSShzdHJpbmcuY2hhcmFj
dGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKICAgICByZXR1cm4gY2hhcmFjdGVyc0FyZUFsbEFT
Q0lJKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpKTsKIH0KIAotc3RhdGlj
IE9wdGlvbmFsPFN0cmluZz4gZG9tYWluVG9BU0NJSShjb25zdCBTdHJpbmcmIGRvbWFpbikKK2lu
bGluZSBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBkb21haW5Ub0FTQ0lJKGNvbnN0IFN0cmluZyYg
ZG9tYWluKQogewogICAgIGNvbnN0IHVuc2lnbmVkIGhvc3RuYW1lQnVmZmVyTGVuZ3RoID0gMjA0
ODsKIApAQCAtMTkyMCw3ICsxOTI4LDcgQEAgc3RhdGljIE9wdGlvbmFsPFN0cmluZz4gZG9tYWlu
VG9BU0NJSShjbwogICAgIHJldHVybiBOdWxsb3B0OwogfQogCi1zdGF0aWMgYm9vbCBoYXNJbnZh
bGlkRG9tYWluQ2hhcmFjdGVyKGNvbnN0IFN0cmluZyYgYXNjaWlEb21haW4pCitpbmxpbmUgc3Rh
dGljIGJvb2wgaGFzSW52YWxpZERvbWFpbkNoYXJhY3Rlcihjb25zdCBTdHJpbmcmIGFzY2lpRG9t
YWluKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGFzY2lpRG9tYWluLmlzOEJpdCgpKTsKICAgICBj
b25zdCBMQ2hhciogY2hhcmFjdGVycyA9IGFzY2lpRG9tYWluLmNoYXJhY3RlcnM4KCk7CkBAIC0y
MDczLDcgKzIwODEsNyBAQCBib29sIFVSTFBhcnNlcjo6cGFyc2VIb3N0KENvZGVQb2ludEl0ZXJh
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxTdHJpbmc+IGZvcm1VUkxE
ZWNvZGUoU3RyaW5nVmlldyBpbnB1dCkKK2lubGluZSBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBm
b3JtVVJMRGVjb2RlKFN0cmluZ1ZpZXcgaW5wdXQpCiB7CiAgICAgYXV0byB1dGY4ID0gaW5wdXQu
dXRmOChTdHJpY3RDb252ZXJzaW9uKTsKICAgICBpZiAodXRmOC5pc051bGwoKSkKQEAgLTIxMDMs
NyArMjExMSw3IEBAIGF1dG8gVVJMUGFyc2VyOjpwYXJzZVVSTEVuY29kZWRGb3JtKFN0cmkKICAg
ICByZXR1cm4gb3V0cHV0OwogfQogCi1zdGF0aWMgdm9pZCBzZXJpYWxpemVVUkxFbmNvZGVkRm9y
bShjb25zdCBTdHJpbmcmIGlucHV0LCBWZWN0b3I8TENoYXI+JiBvdXRwdXQpCitpbmxpbmUgc3Rh
dGljIHZvaWQgc2VyaWFsaXplVVJMRW5jb2RlZEZvcm0oY29uc3QgU3RyaW5nJiBpbnB1dCwgVmVj
dG9yPExDaGFyPiYgb3V0cHV0KQogewogICAgIGF1dG8gdXRmOCA9IGlucHV0LnV0ZjgoU3RyaWN0
Q29udmVyc2lvbik7CiAgICAgY29uc3QgY2hhciogZGF0YSA9IHV0ZjguZGF0YSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289419</attachid>
            <date>2016-09-20 18:18:24 -0700</date>
            <delta_ts>2016-09-20 18:36:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162105-20160920181536.patch</filename>
            <type>text/plain</type>
            <size>8433</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE2LTA5LTIwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgT3B0aW1pemUg
VVJMUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjIxMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IG5ldyBBUEkgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9VUkxQYXJz
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGVyY2VudEVuY29kZUJ5dGUpOgorICAgICAgICAo
V2ViQ29yZTo6dXRmOFBlcmNlbnRFbmNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6dXRmOFF1ZXJ5
RW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNv
cmU6OlVSTFBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplVVJMRW5j
b2RlZEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6cGVyY2VudEVuY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjp1dGY4UGVyY2VudEVuY29kZVF1ZXJ5KTogRGVsZXRlZC4KKwogMjAx
Ni0wOS0yMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAg
ICAgICAgIEZpeCBvY2Nhc2lvbmFsIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNyYXNoZXMg
YWZ0ZXIgcjIwNjE2OC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAko
cmV2aXNpb24gMjA2MTc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDU3LDcgKzQ1Nyw3IEBAIGlubGluZSBzdGF0aWMgYm9vbCBz
aG91bGRDb3B5RmlsZVVSTChDb2QKICAgICByZXR1cm4gIWlzU2xhc2hRdWVzdGlvbk9ySGFzaCgq
aXRlcmF0b3IpOwogfQogCi1pbmxpbmUgc3RhdGljIHZvaWQgcGVyY2VudEVuY29kZSh1aW50OF90
IGJ5dGUsIFZlY3RvcjxMQ2hhcj4mIGJ1ZmZlcikKK2lubGluZSBzdGF0aWMgdm9pZCBwZXJjZW50
RW5jb2RlQnl0ZSh1aW50OF90IGJ5dGUsIFZlY3RvcjxMQ2hhcj4mIGJ1ZmZlcikKIHsKICAgICBi
dWZmZXIuYXBwZW5kKCclJyk7CiAgICAgYnVmZmVyLmFwcGVuZCh1cHBlck5pYmJsZVRvQVNDSUlI
ZXhEaWdpdChieXRlKSk7CkBAIC00NzIsMzkgKzQ3Miw2OCBAQCBpbmxpbmUgc3RhdGljIHZvaWQg
dXRmOFBlcmNlbnRFbmNvZGUoVUNoCiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKCFpc0luQ29kZVNldChjb2RlUG9pbnQpKTsKICAgICAgICAgZGVzdGluYXRpb24uYXBw
ZW5kKGNvZGVQb2ludCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGlzSW5Db2RlU2V0KGNv
ZGVQb2ludCkpIHsKLSAgICAgICAgICAgIHVpbnQ4X3QgYnVmZmVyW1U4X01BWF9MRU5HVEhdOwot
ICAgICAgICAgICAgaW50MzJfdCBvZmZzZXQgPSAwOwotICAgICAgICAgICAgVUJvb2wgZXJyb3Ig
PSBmYWxzZTsKLSAgICAgICAgICAgIFU4X0FQUEVORChidWZmZXIsIG9mZnNldCwgVThfTUFYX0xF
TkdUSCwgY29kZVBvaW50LCBlcnJvcik7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQ2hlY2sgZXJy
b3IuCi0gICAgICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBvZmZzZXQ7ICsraSkKLSAg
ICAgICAgICAgICAgICBwZXJjZW50RW5jb2RlKGJ1ZmZlcltpXSwgZGVzdGluYXRpb24pOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpc0FTQ0lJKGNv
ZGVQb2ludCksICJpc0luQ29kZVNldCBzaG91bGQgYWx3YXlzIHJldHVybiB0cnVlIGZvciBub24t
QVNDSUkgY2hhcmFjdGVycyIpOwotICAgICAgICAgICAgZGVzdGluYXRpb24uYXBwZW5kKGNvZGVQ
b2ludCk7CisgICAgICAgIGlmIChpc0FTQ0lJKGNvZGVQb2ludCkpIHsKKyAgICAgICAgICAgIGlm
IChpc0luQ29kZVNldChjb2RlUG9pbnQpKQorICAgICAgICAgICAgICAgIHBlcmNlbnRFbmNvZGVC
eXRlKGNvZGVQb2ludCwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGRlc3RpbmF0aW9uLmFwcGVuZChjb2RlUG9pbnQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBtYXRjaGVzIENo
cm9tZSBhbmQgRmlyZWZveCBpbiB0aGUgY2FzZSBvZiAweEQ4MDAwMDQxLAorICAgICAgICAvLyBi
dXQgdGhlcmUgYXJlIHByb2JhYmx5IGludmFsaWQgc3Vycm9nYXRlIHBhaXJzIHRoYXQgdGhlIENv
ZGVQb2ludEl0ZXJhdG9yCisgICAgICAgIC8vIGNhbiByZXR1cm4gZm9yIHdoaWNoIHRoaXMgaXMg
bm90IGNvcnJlY3QuCisgICAgICAgIC8vIFdoYXQgc2hvdWxkIEkgZG8gaW4gdGhvc2UgY2FzZXM/
CisgICAgICAgIGlmICghVV9JU19VTklDT0RFX0NIQVIoY29kZVBvaW50KSkKKyAgICAgICAgICAg
IGNvZGVQb2ludCA9IChjb2RlUG9pbnQgJiAweEZGRkYwMDAwKSB8IDB4RkZGRDsKKyAgICAgICAg
QVNTRVJUKFVfSVNfVU5JQ09ERV9DSEFSKGNvZGVQb2ludCkpOworICAgICAgICAKKyAgICAgICAg
dWludDhfdCBidWZmZXJbVThfTUFYX0xFTkdUSF07CisgICAgICAgIGludDMyX3Qgb2Zmc2V0ID0g
MDsKKyAgICAgICAgVThfQVBQRU5EX1VOU0FGRShidWZmZXIsIG9mZnNldCwgY29kZVBvaW50KTsK
KyAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgb2Zmc2V0OyArK2kpIHsKKyAgICAgICAg
ICAgIGF1dG8gYnl0ZSA9IGJ1ZmZlcltpXTsKKyAgICAgICAgICAgIGlmIChzaG91bGRQZXJjZW50
RW5jb2RlUXVlcnlCeXRlKGJ5dGUpKQorICAgICAgICAgICAgICAgIHBlcmNlbnRFbmNvZGVCeXRl
KGJ5dGUsIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UoaXNBU0NJSShjb2RlUG9pbnQpLCAiaXNJbkNvZGVTZXQgc2hv
dWxkIGFsd2F5cyByZXR1cm4gdHJ1ZSBmb3Igbm9uLUFTQ0lJIGNoYXJhY3RlcnMiKTsKKyAgICAg
ICAgICAgICAgICBkZXN0aW5hdGlvbi5hcHBlbmQoYnl0ZSk7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CiB9CiAKIHRlbXBsYXRlPGJvb2wgc2VyaWFsaXplZD4KLWlubGluZSBzdGF0
aWMgdm9pZCB1dGY4UGVyY2VudEVuY29kZVF1ZXJ5KFVDaGFyMzIgY29kZVBvaW50LCBWZWN0b3I8
TENoYXI+JiBkZXN0aW5hdGlvbikKK2lubGluZSBzdGF0aWMgdm9pZCB1dGY4UXVlcnlFbmNvZGUo
VUNoYXIzMiBjb2RlUG9pbnQsIFZlY3RvcjxMQ2hhcj4mIGRlc3RpbmF0aW9uKQogewogICAgIGlm
IChzZXJpYWxpemVkKSB7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KGlzQVNDSUkoY29kZVBvaW50KSk7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKCFzaG91bGRQZXJjZW50RW5jb2RlUXVlcnlCeXRlKGNvZGVQb2ludCkpOwogICAgICAg
ICBkZXN0aW5hdGlvbi5hcHBlbmQoY29kZVBvaW50KTsKICAgICB9IGVsc2UgeworICAgICAgICBp
ZiAoaXNBU0NJSShjb2RlUG9pbnQpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkUGVyY2VudEVu
Y29kZVF1ZXJ5Qnl0ZShjb2RlUG9pbnQpKQorICAgICAgICAgICAgICAgIHBlcmNlbnRFbmNvZGVC
eXRlKGNvZGVQb2ludCwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGRlc3RpbmF0aW9uLmFwcGVuZChjb2RlUG9pbnQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBtYXRjaGVzIENo
cm9tZSBhbmQgRmlyZWZveCBpbiB0aGUgY2FzZSBvZiAweEQ4MDAwMDQxLAorICAgICAgICAvLyBi
dXQgdGhlcmUgYXJlIHByb2JhYmx5IGludmFsaWQgc3Vycm9nYXRlIHBhaXJzIHRoYXQgdGhlIENv
ZGVQb2ludEl0ZXJhdG9yCisgICAgICAgIC8vIGNhbiByZXR1cm4gZm9yIHdoaWNoIHRoaXMgaXMg
bm90IGNvcnJlY3QuCisgICAgICAgIC8vIFdoYXQgc2hvdWxkIEkgZG8gaW4gdGhvc2UgY2FzZXM/
CisgICAgICAgIGlmICghVV9JU19VTklDT0RFX0NIQVIoY29kZVBvaW50KSkKKyAgICAgICAgICAg
IGNvZGVQb2ludCA9IChjb2RlUG9pbnQgJiAweEZGRkYwMDAwKSB8IDB4RkZGRDsKKyAgICAgICAg
QVNTRVJUKFVfSVNfVU5JQ09ERV9DSEFSKGNvZGVQb2ludCkpOworCiAgICAgICAgIHVpbnQ4X3Qg
YnVmZmVyW1U4X01BWF9MRU5HVEhdOwogICAgICAgICBpbnQzMl90IG9mZnNldCA9IDA7Ci0gICAg
ICAgIFVCb29sIGVycm9yID0gZmFsc2U7Ci0gICAgICAgIFU4X0FQUEVORChidWZmZXIsIG9mZnNl
dCwgVThfTUFYX0xFTkdUSCwgY29kZVBvaW50LCBlcnJvcik7Ci0gICAgICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG9mZnNldCA8PSBzdGF0aWNfY2FzdDxpbnQzMl90PihzaXpl
b2YoYnVmZmVyKSkpOwotICAgICAgICAvLyBGSVhNRTogQ2hlY2sgZXJyb3IuCisgICAgICAgIFU4
X0FQUEVORF9VTlNBRkUoYnVmZmVyLCBvZmZzZXQsIGNvZGVQb2ludCk7CiAgICAgICAgIGZvciAo
aW50MzJfdCBpID0gMDsgaSA8IG9mZnNldDsgKytpKSB7CiAgICAgICAgICAgICBhdXRvIGJ5dGUg
PSBidWZmZXJbaV07CiAgICAgICAgICAgICBpZiAoc2hvdWxkUGVyY2VudEVuY29kZVF1ZXJ5Qnl0
ZShieXRlKSkKLSAgICAgICAgICAgICAgICBwZXJjZW50RW5jb2RlKGJ5dGUsIGRlc3RpbmF0aW9u
KTsKKyAgICAgICAgICAgICAgICBwZXJjZW50RW5jb2RlQnl0ZShieXRlLCBkZXN0aW5hdGlvbik7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYXBwZW5kKGJ5
dGUpOwogICAgICAgICB9CkBAIC01MjAsNyArNTQ5LDcgQEAgaW5saW5lIHN0YXRpYyB2b2lkIGVu
Y29kZVF1ZXJ5KGNvbnN0IFZlYwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKICAgICAgICAgdWludDhfdCBieXRlID0gZGF0YVtpXTsKICAgICAgICAgaWYgKHNob3Vs
ZFBlcmNlbnRFbmNvZGVRdWVyeUJ5dGUoYnl0ZSkpCi0gICAgICAgICAgICBwZXJjZW50RW5jb2Rl
KGJ5dGUsIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIHBlcmNlbnRFbmNvZGVCeXRlKGJ5dGUs
IGRlc3RpbmF0aW9uKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZGVzdGluYXRpb24uYXBw
ZW5kKGJ5dGUpOwogICAgIH0KQEAgLTE0MTMsNyArMTQ0Miw3IEBAIFVSTCBVUkxQYXJzZXI6OnBh
cnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmIChpc1VURjhFbmNvZGluZykKLSAgICAgICAgICAgICAgICB1
dGY4UGVyY2VudEVuY29kZVF1ZXJ5PHNlcmlhbGl6ZWQ+KCpjLCBtX2FzY2lpQnVmZmVyKTsKKyAg
ICAgICAgICAgICAgICB1dGY4UXVlcnlFbmNvZGU8c2VyaWFsaXplZD4oKmMsIG1fYXNjaWlCdWZm
ZXIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGFwcGVuZENvZGVQb2ludChx
dWVyeUJ1ZmZlciwgKmMpOwogICAgICAgICAgICAgKytjOwpAQCAtMjE5OCw3ICsyMjI3LDcgQEAg
aW5saW5lIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZVVSTEVuY29kZWRGbwogICAgICAgICAgICAgfHwg
KGJ5dGUgPj0gMHg2MSAmJiBieXRlIDw9IDB4N0EpKQogICAgICAgICAgICAgb3V0cHV0LmFwcGVu
ZChieXRlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcGVyY2VudEVuY29kZShieXRlLCBv
dXRwdXQpOworICAgICAgICAgICAgcGVyY2VudEVuY29kZUJ5dGUoYnl0ZSwgb3V0cHV0KTsKICAg
ICB9CiB9CiAgICAgCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMDYxOTMpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxNi0wOS0yMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFj
aHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIE9wdGltaXplIFVSTFBhcnNlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyMTA1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2VyLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OlRFU1RfRik6CisKIDIwMTYtMDktMjAgIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIGVuYWJsZSByZW1vdGVfYXBpIChmb3IgZGVidWdnaW5nKSBpbiBmbGFr
aW5lc3MgZGFzaGJvYXJkIGFwcApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL1VSTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL1VSTFBhcnNlci5jcHAJKHJldmlzaW9uIDIwNjE3NykKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MTksNiArNzE5LDIwIEBAIFRFU1RfRihVUkxQYXJzZXJUZXN0LCBBZGRpdGlvbmFsVGVzdHMpCiAg
ICAgICAgIHsid3MiLCAiIiwgIiIsICIiLCAwLCAiIiwgIiIsICIiLCAid3M6In0sCiAgICAgICAg
IHsid3MiLCAiIiwgIiIsICIiLCAwLCAiczoiLCAiIiwgIiIsICJ3czpzOiJ9KTsKICAgICBjaGVj
a1JlbGF0aXZlVVJMKCJub3RzcGVjaWFsOiIsICJodHRwOi8vZXhhbXBsZS5vcmcvZm9vL2JhciIs
IHsibm90c3BlY2lhbCIsICIiLCAiIiwgIiIsIDAsICIiLCAiIiwgIiIsICJub3RzcGVjaWFsOiJ9
KTsKKyAgICAKKyAgICAvLyBTdXJyb2dhdGVzIGZvciB1bmljb2RlIGNvZGUgcG9pbnQgVSsxMDE1
NQorICAgIGNoZWNrVVJMKHdpZGVTdHJpbmcoeydoJywgJ3QnLCAndCcsICdwJywgJzonLCAnLycs
ICcvJywgJ3cnLCAnLycsIDB4RDgwMCwgMHhERDU1LCAnXDAnfSksCisgICAgICAgIHsiaHR0cCIs
ICIiLCAiIiwgInciLCAwLCAiLyVGMCU5MCU4NSU5NSIsICIiLCAiIiwgImh0dHA6Ly93LyVGMCU5
MCU4NSU5NSJ9KTsKKyAgICAKKyAgICAvLyBMZWFkaW5nIHN1cnJvZ2F0ZSBmb2xsb3dlZCBieSBu
b24tc3Vycm9nYXRlLiBVUkxQYXJzZXIgbWF0Y2hlcyBDaHJvbWUgYW5kIEZpcmVmb3ggYnV0IG5v
dCBVUkw6OnBhcnNlLgorICAgIGNoZWNrVVJMRGlmZmVyZW5jZXMod2lkZVN0cmluZyh7J2gnLCAn
dCcsICd0JywgJ3AnLCAnOicsICcvJywgJy8nLCAndycsICcvJywgMHhEODAwLCAweDAwNDEsICdc
MCd9KSwKKyAgICAgICAgeyJodHRwIiwgIiIsICIiLCAidyIsIDAsICIvJUVGJUJGJUJEQSIsICIi
LCAiIiwgImh0dHA6Ly93LyVFRiVCRiVCREEifSwKKyAgICAgICAgeyJodHRwIiwgIiIsICIiLCAi
dyIsIDAsICIvJUVEJUEwJTgwQSIsICIiLCAiIiwgImh0dHA6Ly93LyVFRCVBMCU4MEEifSk7Cisg
ICAgY2hlY2tVUkxEaWZmZXJlbmNlcyh3aWRlU3RyaW5nKHsnaCcsICd0JywgJ3QnLCAncCcsICc6
JywgJy8nLCAnLycsICd3JywgJy8nLCAnPycsIDB4RDgwMCwgMHgwMDQxLCAnXDAnfSksCisgICAg
ICAgIHsiaHR0cCIsICIiLCAiIiwgInciLCAwLCAiLyIsICIlRUYlQkYlQkRBIiwgIiIsICJodHRw
Oi8vdy8/JUVGJUJGJUJEQSJ9LAorICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICJ3IiwgMCwgIi8i
LCAiJUVEJUEwJTgwQSIsICIiLCAiaHR0cDovL3cvPyVFRCVBMCU4MEEifSk7CisgICAgCisgICAg
Ly8gRklYTUU6IEFkZCB0ZXN0cyB3aXRoIGludmFsaWQgc3Vycm9nYXRlIHBhaXJzIGluIGRpZmZl
cmVudCByYW5nZXMsIG9ubHkgdGhlIGJlZ2lubmluZyBvZiBhIHN1cnJvZ2F0ZSBwYWlyLCBldGMu
CiB9CiAKIHN0YXRpYyB2b2lkIGNoZWNrVVJMKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25z
dCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBjb25zdCBFeHBlY3RlZFBhcnRzJiBwYXJ0cykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289421</attachid>
            <date>2016-09-20 18:36:03 -0700</date>
            <delta_ts>2016-09-20 19:20:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162105-20160920183316.patch</filename>
            <type>text/plain</type>
            <size>8629</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE2LTA5LTIwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgT3B0aW1pemUg
VVJMUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjIxMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IG5ldyBBUEkgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9VUkxQYXJz
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGVyY2VudEVuY29kZUJ5dGUpOgorICAgICAgICAo
V2ViQ29yZTo6dXRmOFBlcmNlbnRFbmNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6dXRmOFF1ZXJ5
RW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNv
cmU6OlVSTFBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplVVJMRW5j
b2RlZEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6cGVyY2VudEVuY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjp1dGY4UGVyY2VudEVuY29kZVF1ZXJ5KTogRGVsZXRlZC4KKwogMjAx
Ni0wOS0yMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAg
ICAgICAgIEZpeCBvY2Nhc2lvbmFsIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNyYXNoZXMg
YWZ0ZXIgcjIwNjE2OC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAko
cmV2aXNpb24gMjA2MTc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDU3LDcgKzQ1Nyw3IEBAIGlubGluZSBzdGF0aWMgYm9vbCBz
aG91bGRDb3B5RmlsZVVSTChDb2QKICAgICByZXR1cm4gIWlzU2xhc2hRdWVzdGlvbk9ySGFzaCgq
aXRlcmF0b3IpOwogfQogCi1pbmxpbmUgc3RhdGljIHZvaWQgcGVyY2VudEVuY29kZSh1aW50OF90
IGJ5dGUsIFZlY3RvcjxMQ2hhcj4mIGJ1ZmZlcikKK2lubGluZSBzdGF0aWMgdm9pZCBwZXJjZW50
RW5jb2RlQnl0ZSh1aW50OF90IGJ5dGUsIFZlY3RvcjxMQ2hhcj4mIGJ1ZmZlcikKIHsKICAgICBi
dWZmZXIuYXBwZW5kKCclJyk7CiAgICAgYnVmZmVyLmFwcGVuZCh1cHBlck5pYmJsZVRvQVNDSUlI
ZXhEaWdpdChieXRlKSk7CkBAIC00NzIsMzkgKzQ3Miw2OCBAQCBpbmxpbmUgc3RhdGljIHZvaWQg
dXRmOFBlcmNlbnRFbmNvZGUoVUNoCiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKCFpc0luQ29kZVNldChjb2RlUG9pbnQpKTsKICAgICAgICAgZGVzdGluYXRpb24uYXBw
ZW5kKGNvZGVQb2ludCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGlzSW5Db2RlU2V0KGNv
ZGVQb2ludCkpIHsKLSAgICAgICAgICAgIHVpbnQ4X3QgYnVmZmVyW1U4X01BWF9MRU5HVEhdOwot
ICAgICAgICAgICAgaW50MzJfdCBvZmZzZXQgPSAwOwotICAgICAgICAgICAgVUJvb2wgZXJyb3Ig
PSBmYWxzZTsKLSAgICAgICAgICAgIFU4X0FQUEVORChidWZmZXIsIG9mZnNldCwgVThfTUFYX0xF
TkdUSCwgY29kZVBvaW50LCBlcnJvcik7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQ2hlY2sgZXJy
b3IuCi0gICAgICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBvZmZzZXQ7ICsraSkKLSAg
ICAgICAgICAgICAgICBwZXJjZW50RW5jb2RlKGJ1ZmZlcltpXSwgZGVzdGluYXRpb24pOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpc0FTQ0lJKGNv
ZGVQb2ludCksICJpc0luQ29kZVNldCBzaG91bGQgYWx3YXlzIHJldHVybiB0cnVlIGZvciBub24t
QVNDSUkgY2hhcmFjdGVycyIpOwotICAgICAgICAgICAgZGVzdGluYXRpb24uYXBwZW5kKGNvZGVQ
b2ludCk7CisgICAgICAgIGlmIChpc0FTQ0lJKGNvZGVQb2ludCkpIHsKKyAgICAgICAgICAgIGlm
IChpc0luQ29kZVNldChjb2RlUG9pbnQpKQorICAgICAgICAgICAgICAgIHBlcmNlbnRFbmNvZGVC
eXRlKGNvZGVQb2ludCwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGRlc3RpbmF0aW9uLmFwcGVuZChjb2RlUG9pbnQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBtYXRjaGVzIENo
cm9tZSBhbmQgRmlyZWZveCBpbiB0aGUgY2FzZSBvZiAweEQ4MDAwMDQxLAorICAgICAgICAvLyBi
dXQgdGhlcmUgYXJlIHByb2JhYmx5IGludmFsaWQgc3Vycm9nYXRlIHBhaXJzIHRoYXQgdGhlIENv
ZGVQb2ludEl0ZXJhdG9yCisgICAgICAgIC8vIGNhbiByZXR1cm4gZm9yIHdoaWNoIHRoaXMgaXMg
bm90IGNvcnJlY3QuCisgICAgICAgIC8vIFdoYXQgc2hvdWxkIEkgZG8gaW4gdGhvc2UgY2FzZXM/
CisgICAgICAgIGlmICghVV9JU19VTklDT0RFX0NIQVIoY29kZVBvaW50KSkKKyAgICAgICAgICAg
IGNvZGVQb2ludCA9IChjb2RlUG9pbnQgJiAweEZGRkYwMDAwKSB8IDB4RkZGRDsKKyAgICAgICAg
QVNTRVJUKFVfSVNfVU5JQ09ERV9DSEFSKGNvZGVQb2ludCkpOworICAgICAgICAKKyAgICAgICAg
dWludDhfdCBidWZmZXJbVThfTUFYX0xFTkdUSF07CisgICAgICAgIGludDMyX3Qgb2Zmc2V0ID0g
MDsKKyAgICAgICAgVThfQVBQRU5EX1VOU0FGRShidWZmZXIsIG9mZnNldCwgY29kZVBvaW50KTsK
KyAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgb2Zmc2V0OyArK2kpIHsKKyAgICAgICAg
ICAgIGF1dG8gYnl0ZSA9IGJ1ZmZlcltpXTsKKyAgICAgICAgICAgIGlmIChzaG91bGRQZXJjZW50
RW5jb2RlUXVlcnlCeXRlKGJ5dGUpKQorICAgICAgICAgICAgICAgIHBlcmNlbnRFbmNvZGVCeXRl
KGJ5dGUsIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UoaXNBU0NJSShjb2RlUG9pbnQpLCAiaXNJbkNvZGVTZXQgc2hv
dWxkIGFsd2F5cyByZXR1cm4gdHJ1ZSBmb3Igbm9uLUFTQ0lJIGNoYXJhY3RlcnMiKTsKKyAgICAg
ICAgICAgICAgICBkZXN0aW5hdGlvbi5hcHBlbmQoYnl0ZSk7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CiB9CiAKIHRlbXBsYXRlPGJvb2wgc2VyaWFsaXplZD4KLWlubGluZSBzdGF0
aWMgdm9pZCB1dGY4UGVyY2VudEVuY29kZVF1ZXJ5KFVDaGFyMzIgY29kZVBvaW50LCBWZWN0b3I8
TENoYXI+JiBkZXN0aW5hdGlvbikKK2lubGluZSBzdGF0aWMgdm9pZCB1dGY4UXVlcnlFbmNvZGUo
VUNoYXIzMiBjb2RlUG9pbnQsIFZlY3RvcjxMQ2hhcj4mIGRlc3RpbmF0aW9uKQogewogICAgIGlm
IChzZXJpYWxpemVkKSB7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KGlzQVNDSUkoY29kZVBvaW50KSk7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKCFzaG91bGRQZXJjZW50RW5jb2RlUXVlcnlCeXRlKGNvZGVQb2ludCkpOwogICAgICAg
ICBkZXN0aW5hdGlvbi5hcHBlbmQoY29kZVBvaW50KTsKICAgICB9IGVsc2UgeworICAgICAgICBp
ZiAoaXNBU0NJSShjb2RlUG9pbnQpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkUGVyY2VudEVu
Y29kZVF1ZXJ5Qnl0ZShjb2RlUG9pbnQpKQorICAgICAgICAgICAgICAgIHBlcmNlbnRFbmNvZGVC
eXRlKGNvZGVQb2ludCwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGRlc3RpbmF0aW9uLmFwcGVuZChjb2RlUG9pbnQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBtYXRjaGVzIENo
cm9tZSBhbmQgRmlyZWZveCBpbiB0aGUgY2FzZSBvZiAweEQ4MDAwMDQxLAorICAgICAgICAvLyBi
dXQgdGhlcmUgYXJlIHByb2JhYmx5IGludmFsaWQgc3Vycm9nYXRlIHBhaXJzIHRoYXQgdGhlIENv
ZGVQb2ludEl0ZXJhdG9yCisgICAgICAgIC8vIGNhbiByZXR1cm4gZm9yIHdoaWNoIHRoaXMgaXMg
bm90IGNvcnJlY3QuCisgICAgICAgIC8vIFdoYXQgc2hvdWxkIEkgZG8gaW4gdGhvc2UgY2FzZXM/
CisgICAgICAgIGlmICghVV9JU19VTklDT0RFX0NIQVIoY29kZVBvaW50KSkKKyAgICAgICAgICAg
IGNvZGVQb2ludCA9IChjb2RlUG9pbnQgJiAweEZGRkYwMDAwKSB8IDB4RkZGRDsKKyAgICAgICAg
QVNTRVJUKFVfSVNfVU5JQ09ERV9DSEFSKGNvZGVQb2ludCkpOworCiAgICAgICAgIHVpbnQ4X3Qg
YnVmZmVyW1U4X01BWF9MRU5HVEhdOwogICAgICAgICBpbnQzMl90IG9mZnNldCA9IDA7Ci0gICAg
ICAgIFVCb29sIGVycm9yID0gZmFsc2U7Ci0gICAgICAgIFU4X0FQUEVORChidWZmZXIsIG9mZnNl
dCwgVThfTUFYX0xFTkdUSCwgY29kZVBvaW50LCBlcnJvcik7Ci0gICAgICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG9mZnNldCA8PSBzdGF0aWNfY2FzdDxpbnQzMl90PihzaXpl
b2YoYnVmZmVyKSkpOwotICAgICAgICAvLyBGSVhNRTogQ2hlY2sgZXJyb3IuCisgICAgICAgIFU4
X0FQUEVORF9VTlNBRkUoYnVmZmVyLCBvZmZzZXQsIGNvZGVQb2ludCk7CiAgICAgICAgIGZvciAo
aW50MzJfdCBpID0gMDsgaSA8IG9mZnNldDsgKytpKSB7CiAgICAgICAgICAgICBhdXRvIGJ5dGUg
PSBidWZmZXJbaV07CiAgICAgICAgICAgICBpZiAoc2hvdWxkUGVyY2VudEVuY29kZVF1ZXJ5Qnl0
ZShieXRlKSkKLSAgICAgICAgICAgICAgICBwZXJjZW50RW5jb2RlKGJ5dGUsIGRlc3RpbmF0aW9u
KTsKKyAgICAgICAgICAgICAgICBwZXJjZW50RW5jb2RlQnl0ZShieXRlLCBkZXN0aW5hdGlvbik7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYXBwZW5kKGJ5
dGUpOwogICAgICAgICB9CkBAIC01MjAsNyArNTQ5LDcgQEAgaW5saW5lIHN0YXRpYyB2b2lkIGVu
Y29kZVF1ZXJ5KGNvbnN0IFZlYwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKICAgICAgICAgdWludDhfdCBieXRlID0gZGF0YVtpXTsKICAgICAgICAgaWYgKHNob3Vs
ZFBlcmNlbnRFbmNvZGVRdWVyeUJ5dGUoYnl0ZSkpCi0gICAgICAgICAgICBwZXJjZW50RW5jb2Rl
KGJ5dGUsIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIHBlcmNlbnRFbmNvZGVCeXRlKGJ5dGUs
IGRlc3RpbmF0aW9uKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZGVzdGluYXRpb24uYXBw
ZW5kKGJ5dGUpOwogICAgIH0KQEAgLTE0MTMsNyArMTQ0Miw3IEBAIFVSTCBVUkxQYXJzZXI6OnBh
cnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmIChpc1VURjhFbmNvZGluZykKLSAgICAgICAgICAgICAgICB1
dGY4UGVyY2VudEVuY29kZVF1ZXJ5PHNlcmlhbGl6ZWQ+KCpjLCBtX2FzY2lpQnVmZmVyKTsKKyAg
ICAgICAgICAgICAgICB1dGY4UXVlcnlFbmNvZGU8c2VyaWFsaXplZD4oKmMsIG1fYXNjaWlCdWZm
ZXIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGFwcGVuZENvZGVQb2ludChx
dWVyeUJ1ZmZlciwgKmMpOwogICAgICAgICAgICAgKytjOwpAQCAtMjE5OCw3ICsyMjI3LDcgQEAg
aW5saW5lIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZVVSTEVuY29kZWRGbwogICAgICAgICAgICAgfHwg
KGJ5dGUgPj0gMHg2MSAmJiBieXRlIDw9IDB4N0EpKQogICAgICAgICAgICAgb3V0cHV0LmFwcGVu
ZChieXRlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcGVyY2VudEVuY29kZShieXRlLCBv
dXRwdXQpOworICAgICAgICAgICAgcGVyY2VudEVuY29kZUJ5dGUoYnl0ZSwgb3V0cHV0KTsKICAg
ICB9CiB9CiAgICAgCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMDYxOTMpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxNi0wOS0yMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFj
aHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIE9wdGltaXplIFVSTFBhcnNlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyMTA1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2VyLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OlRFU1RfRik6CisKIDIwMTYtMDktMjAgIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIGVuYWJsZSByZW1vdGVfYXBpIChmb3IgZGVidWdnaW5nKSBpbiBmbGFr
aW5lc3MgZGFzaGJvYXJkIGFwcApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL1VSTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL1VSTFBhcnNlci5jcHAJKHJldmlzaW9uIDIwNjE3NykKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MTksNiArNzE5LDIyIEBAIFRFU1RfRihVUkxQYXJzZXJUZXN0LCBBZGRpdGlvbmFsVGVzdHMpCiAg
ICAgICAgIHsid3MiLCAiIiwgIiIsICIiLCAwLCAiIiwgIiIsICIiLCAid3M6In0sCiAgICAgICAg
IHsid3MiLCAiIiwgIiIsICIiLCAwLCAiczoiLCAiIiwgIiIsICJ3czpzOiJ9KTsKICAgICBjaGVj
a1JlbGF0aXZlVVJMKCJub3RzcGVjaWFsOiIsICJodHRwOi8vZXhhbXBsZS5vcmcvZm9vL2JhciIs
IHsibm90c3BlY2lhbCIsICIiLCAiIiwgIiIsIDAsICIiLCAiIiwgIiIsICJub3RzcGVjaWFsOiJ9
KTsKKyAgICAKKyAgICBjb25zdCB3Y2hhcl90IHN1cnJvZ2F0ZUJlZ2luID0gMHhEODAwOworICAg
IGNvbnN0IHdjaGFyX3QgdmFsaWRTdXJyb2dhdGVFbmQgPSAweERENTU7IC8vIFN1cnJvZ2F0ZXMg
Zm9yIHVuaWNvZGUgY29kZSBwb2ludCBVKzEwMTU1CisgICAgY2hlY2tVUkwod2lkZVN0cmluZyh7
J2gnLCAndCcsICd0JywgJ3AnLCAnOicsICcvJywgJy8nLCAndycsICcvJywgc3Vycm9nYXRlQmVn
aW4sIHZhbGlkU3Vycm9nYXRlRW5kLCAnXDAnfSksCisgICAgICAgIHsiaHR0cCIsICIiLCAiIiwg
InciLCAwLCAiLyVGMCU5MCU4NSU5NSIsICIiLCAiIiwgImh0dHA6Ly93LyVGMCU5MCU4NSU5NSJ9
KTsKKyAgICAKKyAgICAvLyBMZWFkaW5nIHN1cnJvZ2F0ZSBmb2xsb3dlZCBieSBub24tc3Vycm9n
YXRlLiBVUkxQYXJzZXIgbWF0Y2hlcyBDaHJvbWUgYW5kIEZpcmVmb3ggYnV0IG5vdCBVUkw6OnBh
cnNlLgorICAgIGNvbnN0IHdjaGFyX3QgaW52YWxpZFN1cnJvZ2F0ZUVuZCA9IDB4MDA0MTsKKyAg
ICBjaGVja1VSTERpZmZlcmVuY2VzKHdpZGVTdHJpbmcoeydoJywgJ3QnLCAndCcsICdwJywgJzon
LCAnLycsICcvJywgJ3cnLCAnLycsIHN1cnJvZ2F0ZUJlZ2luLCBpbnZhbGlkU3Vycm9nYXRlRW5k
LCAnXDAnfSksCisgICAgICAgIHsiaHR0cCIsICIiLCAiIiwgInciLCAwLCAiLyVFRiVCRiVCREEi
LCAiIiwgIiIsICJodHRwOi8vdy8lRUYlQkYlQkRBIn0sCisgICAgICAgIHsiaHR0cCIsICIiLCAi
IiwgInciLCAwLCAiLyVFRCVBMCU4MEEiLCAiIiwgIiIsICJodHRwOi8vdy8lRUQlQTAlODBBIn0p
OworICAgIGNoZWNrVVJMRGlmZmVyZW5jZXMod2lkZVN0cmluZyh7J2gnLCAndCcsICd0JywgJ3An
LCAnOicsICcvJywgJy8nLCAndycsICcvJywgJz8nLCBzdXJyb2dhdGVCZWdpbiwgaW52YWxpZFN1
cnJvZ2F0ZUVuZCwgJ1wwJ30pLAorICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICJ3IiwgMCwgIi8i
LCAiJUVGJUJGJUJEQSIsICIiLCAiaHR0cDovL3cvPyVFRiVCRiVCREEifSwKKyAgICAgICAgeyJo
dHRwIiwgIiIsICIiLCAidyIsIDAsICIvIiwgIiVFRCVBMCU4MEEiLCAiIiwgImh0dHA6Ly93Lz8l
RUQlQTAlODBBIn0pOworICAgIAorICAgIC8vIEZJWE1FOiBBZGQgdGVzdHMgd2l0aCBpbnZhbGlk
IHN1cnJvZ2F0ZSBwYWlycyBpbiBkaWZmZXJlbnQgcmFuZ2VzLCBvbmx5IHRoZSBiZWdpbm5pbmcg
b2YgYSBzdXJyb2dhdGUgcGFpciwgZXRjLgogfQogCiBzdGF0aWMgdm9pZCBjaGVja1VSTChjb25z
dCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgY29uc3Qg
RXhwZWN0ZWRQYXJ0cyYgcGFydHMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289424</attachid>
            <date>2016-09-20 19:20:50 -0700</date>
            <delta_ts>2016-09-20 23:30:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162105-20160920191803.patch</filename>
            <type>text/plain</type>
            <size>8869</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE2LTA5LTIwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgT3B0aW1pemUg
VVJMUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjIxMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IG5ldyBBUEkgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9VUkxQYXJz
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGVyY2VudEVuY29kZUJ5dGUpOgorICAgICAgICAo
V2ViQ29yZTo6dXRmOFBlcmNlbnRFbmNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6dXRmOFF1ZXJ5
RW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNv
cmU6OlVSTFBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplVVJMRW5j
b2RlZEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6cGVyY2VudEVuY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjp1dGY4UGVyY2VudEVuY29kZVF1ZXJ5KTogRGVsZXRlZC4KKwogMjAx
Ni0wOS0yMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAg
ICAgICAgIEZpeCBvY2Nhc2lvbmFsIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNyYXNoZXMg
YWZ0ZXIgcjIwNjE2OC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAko
cmV2aXNpb24gMjA2MTc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDU3LDEzICs0NTcsMTYgQEAgaW5saW5lIHN0YXRpYyBib29s
IHNob3VsZENvcHlGaWxlVVJMKENvZAogICAgIHJldHVybiAhaXNTbGFzaFF1ZXN0aW9uT3JIYXNo
KCppdGVyYXRvcik7CiB9CiAKLWlubGluZSBzdGF0aWMgdm9pZCBwZXJjZW50RW5jb2RlKHVpbnQ4
X3QgYnl0ZSwgVmVjdG9yPExDaGFyPiYgYnVmZmVyKQoraW5saW5lIHN0YXRpYyB2b2lkIHBlcmNl
bnRFbmNvZGVCeXRlKHVpbnQ4X3QgYnl0ZSwgVmVjdG9yPExDaGFyPiYgYnVmZmVyKQogewogICAg
IGJ1ZmZlci5hcHBlbmQoJyUnKTsKICAgICBidWZmZXIuYXBwZW5kKHVwcGVyTmliYmxlVG9BU0NJ
SUhleERpZ2l0KGJ5dGUpKTsKICAgICBidWZmZXIuYXBwZW5kKGxvd2VyTmliYmxlVG9BU0NJSUhl
eERpZ2l0KGJ5dGUpKTsKIH0KIAorY29uc3QgY2hhciogcmVwbGFjZW1lbnRDaGFyYWN0ZXJVVEY4
UGVyY2VudEVuY29kZWQgPSAiJUVGJUJGJUJEIjsKK2NvbnN0IHNpemVfdCByZXBsYWNlbWVudENo
YXJhY3RlclVURjhQZXJjZW50RW5jb2RlZExlbmd0aCA9IDk7CisgICAgCiB0ZW1wbGF0ZTxib29s
IHNlcmlhbGl6ZWQ+CiBpbmxpbmUgc3RhdGljIHZvaWQgdXRmOFBlcmNlbnRFbmNvZGUoVUNoYXIz
MiBjb2RlUG9pbnQsIFZlY3RvcjxMQ2hhcj4mIGRlc3RpbmF0aW9uLCBib29sKCppc0luQ29kZVNl
dCkoVUNoYXIzMikpCiB7CkBAIC00NzIsMzkgKzQ3NSw2MiBAQCBpbmxpbmUgc3RhdGljIHZvaWQg
dXRmOFBlcmNlbnRFbmNvZGUoVUNoCiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKCFpc0luQ29kZVNldChjb2RlUG9pbnQpKTsKICAgICAgICAgZGVzdGluYXRpb24uYXBw
ZW5kKGNvZGVQb2ludCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGlzSW5Db2RlU2V0KGNv
ZGVQb2ludCkpIHsKLSAgICAgICAgICAgIHVpbnQ4X3QgYnVmZmVyW1U4X01BWF9MRU5HVEhdOwot
ICAgICAgICAgICAgaW50MzJfdCBvZmZzZXQgPSAwOwotICAgICAgICAgICAgVUJvb2wgZXJyb3Ig
PSBmYWxzZTsKLSAgICAgICAgICAgIFU4X0FQUEVORChidWZmZXIsIG9mZnNldCwgVThfTUFYX0xF
TkdUSCwgY29kZVBvaW50LCBlcnJvcik7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQ2hlY2sgZXJy
b3IuCi0gICAgICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBvZmZzZXQ7ICsraSkKLSAg
ICAgICAgICAgICAgICBwZXJjZW50RW5jb2RlKGJ1ZmZlcltpXSwgZGVzdGluYXRpb24pOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpc0FTQ0lJKGNv
ZGVQb2ludCksICJpc0luQ29kZVNldCBzaG91bGQgYWx3YXlzIHJldHVybiB0cnVlIGZvciBub24t
QVNDSUkgY2hhcmFjdGVycyIpOwotICAgICAgICAgICAgZGVzdGluYXRpb24uYXBwZW5kKGNvZGVQ
b2ludCk7CisgICAgICAgIGlmIChpc0FTQ0lJKGNvZGVQb2ludCkpIHsKKyAgICAgICAgICAgIGlm
IChpc0luQ29kZVNldChjb2RlUG9pbnQpKQorICAgICAgICAgICAgICAgIHBlcmNlbnRFbmNvZGVC
eXRlKGNvZGVQb2ludCwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGRlc3RpbmF0aW9uLmFwcGVuZChjb2RlUG9pbnQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIVVfSVNfVU5JQ09ERV9DSEFSKGNv
ZGVQb2ludCkpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFwcGVuZChyZXBsYWNlbWVudENo
YXJhY3RlclVURjhQZXJjZW50RW5jb2RlZCwgcmVwbGFjZW1lbnRDaGFyYWN0ZXJVVEY4UGVyY2Vu
dEVuY29kZWRMZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICB1aW50OF90IGJ1ZmZlcltVOF9NQVhfTEVOR1RIXTsKKyAgICAgICAgaW50MzJf
dCBvZmZzZXQgPSAwOworICAgICAgICBVOF9BUFBFTkRfVU5TQUZFKGJ1ZmZlciwgb2Zmc2V0LCBj
b2RlUG9pbnQpOworICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBvZmZzZXQ7ICsraSkg
eworICAgICAgICAgICAgYXV0byBieXRlID0gYnVmZmVyW2ldOworICAgICAgICAgICAgaWYgKHNo
b3VsZFBlcmNlbnRFbmNvZGVRdWVyeUJ5dGUoYnl0ZSkpCisgICAgICAgICAgICAgICAgcGVyY2Vu
dEVuY29kZUJ5dGUoYnl0ZSwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpc0FTQ0lJKGNvZGVQb2ludCksICJpc0lu
Q29kZVNldCBzaG91bGQgYWx3YXlzIHJldHVybiB0cnVlIGZvciBub24tQVNDSUkgY2hhcmFjdGVy
cyIpOworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFwcGVuZChieXRlKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KIAogdGVtcGxhdGU8Ym9vbCBzZXJpYWxpemVkPgot
aW5saW5lIHN0YXRpYyB2b2lkIHV0ZjhQZXJjZW50RW5jb2RlUXVlcnkoVUNoYXIzMiBjb2RlUG9p
bnQsIFZlY3RvcjxMQ2hhcj4mIGRlc3RpbmF0aW9uKQoraW5saW5lIHN0YXRpYyB2b2lkIHV0ZjhR
dWVyeUVuY29kZShVQ2hhcjMyIGNvZGVQb2ludCwgVmVjdG9yPExDaGFyPiYgZGVzdGluYXRpb24p
CiB7CiAgICAgaWYgKHNlcmlhbGl6ZWQpIHsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04oaXNBU0NJSShjb2RlUG9pbnQpKTsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oIXNob3VsZFBlcmNlbnRFbmNvZGVRdWVyeUJ5dGUoY29kZVBvaW50
KSk7CiAgICAgICAgIGRlc3RpbmF0aW9uLmFwcGVuZChjb2RlUG9pbnQpOwogICAgIH0gZWxzZSB7
CisgICAgICAgIGlmIChpc0FTQ0lJKGNvZGVQb2ludCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91
bGRQZXJjZW50RW5jb2RlUXVlcnlCeXRlKGNvZGVQb2ludCkpCisgICAgICAgICAgICAgICAgcGVy
Y2VudEVuY29kZUJ5dGUoY29kZVBvaW50LCBkZXN0aW5hdGlvbik7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYXBwZW5kKGNvZGVQb2ludCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghVV9JU19VTklD
T0RFX0NIQVIoY29kZVBvaW50KSkgeworICAgICAgICAgICAgZGVzdGluYXRpb24uYXBwZW5kKHJl
cGxhY2VtZW50Q2hhcmFjdGVyVVRGOFBlcmNlbnRFbmNvZGVkLCByZXBsYWNlbWVudENoYXJhY3Rl
clVURjhQZXJjZW50RW5jb2RlZExlbmd0aCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKwogICAgICAgICB1aW50OF90IGJ1ZmZlcltVOF9NQVhfTEVOR1RIXTsKICAgICAgICAgaW50
MzJfdCBvZmZzZXQgPSAwOwotICAgICAgICBVQm9vbCBlcnJvciA9IGZhbHNlOwotICAgICAgICBV
OF9BUFBFTkQoYnVmZmVyLCBvZmZzZXQsIFU4X01BWF9MRU5HVEgsIGNvZGVQb2ludCwgZXJyb3Ip
OwotICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihvZmZzZXQgPD0gc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKGJ1ZmZlcikpKTsKLSAgICAgICAgLy8gRklYTUU6IENo
ZWNrIGVycm9yLgorICAgICAgICBVOF9BUFBFTkRfVU5TQUZFKGJ1ZmZlciwgb2Zmc2V0LCBjb2Rl
UG9pbnQpOwogICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBvZmZzZXQ7ICsraSkgewog
ICAgICAgICAgICAgYXV0byBieXRlID0gYnVmZmVyW2ldOwogICAgICAgICAgICAgaWYgKHNob3Vs
ZFBlcmNlbnRFbmNvZGVRdWVyeUJ5dGUoYnl0ZSkpCi0gICAgICAgICAgICAgICAgcGVyY2VudEVu
Y29kZShieXRlLCBkZXN0aW5hdGlvbik7CisgICAgICAgICAgICAgICAgcGVyY2VudEVuY29kZUJ5
dGUoYnl0ZSwgZGVzdGluYXRpb24pOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
IGRlc3RpbmF0aW9uLmFwcGVuZChieXRlKTsKICAgICAgICAgfQpAQCAtNTIwLDcgKzU0Niw3IEBA
IGlubGluZSBzdGF0aWMgdm9pZCBlbmNvZGVRdWVyeShjb25zdCBWZWMKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIHVpbnQ4X3QgYnl0ZSA9IGRhdGFb
aV07CiAgICAgICAgIGlmIChzaG91bGRQZXJjZW50RW5jb2RlUXVlcnlCeXRlKGJ5dGUpKQotICAg
ICAgICAgICAgcGVyY2VudEVuY29kZShieXRlLCBkZXN0aW5hdGlvbik7CisgICAgICAgICAgICBw
ZXJjZW50RW5jb2RlQnl0ZShieXRlLCBkZXN0aW5hdGlvbik7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGRlc3RpbmF0aW9uLmFwcGVuZChieXRlKTsKICAgICB9CkBAIC0xNDEzLDcgKzE0Mzks
NyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNVVEY4RW5jb2Rp
bmcpCi0gICAgICAgICAgICAgICAgdXRmOFBlcmNlbnRFbmNvZGVRdWVyeTxzZXJpYWxpemVkPigq
YywgbV9hc2NpaUJ1ZmZlcik7CisgICAgICAgICAgICAgICAgdXRmOFF1ZXJ5RW5jb2RlPHNlcmlh
bGl6ZWQ+KCpjLCBtX2FzY2lpQnVmZmVyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBhcHBlbmRDb2RlUG9pbnQocXVlcnlCdWZmZXIsICpjKTsKICAgICAgICAgICAgICsrYzsK
QEAgLTIxOTgsNyArMjIyNCw3IEBAIGlubGluZSBzdGF0aWMgdm9pZCBzZXJpYWxpemVVUkxFbmNv
ZGVkRm8KICAgICAgICAgICAgIHx8IChieXRlID49IDB4NjEgJiYgYnl0ZSA8PSAweDdBKSkKICAg
ICAgICAgICAgIG91dHB1dC5hcHBlbmQoYnl0ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHBlcmNlbnRFbmNvZGUoYnl0ZSwgb3V0cHV0KTsKKyAgICAgICAgICAgIHBlcmNlbnRFbmNvZGVC
eXRlKGJ5dGUsIG91dHB1dCk7CiAgICAgfQogfQogICAgIApJbmRleDogVG9vbHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2MTkzKQorKysgVG9v
bHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTYtMDktMjAg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBP
cHRpbWl6ZSBVUkxQYXJzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MjEwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1VSTFBhcnNlci5jcHA6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorCiAyMDE2LTA5LTIwICBBYWthc2ggSmFp
biAgPGFha2FzaF9qYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBlbmFibGUgcmVtb3RlX2FwaSAo
Zm9yIGRlYnVnZ2luZykgaW4gZmxha2luZXNzIGRhc2hib2FyZCBhcHAKSW5kZXg6IFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkxQYXJzZXIuY3BwCShyZXZpc2lvbiAy
MDYxNzcpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzE5LDYgKzcxOSwyNiBAQCBURVNUX0YoVVJMUGFyc2VyVGVz
dCwgQWRkaXRpb25hbFRlc3RzKQogICAgICAgICB7IndzIiwgIiIsICIiLCAiIiwgMCwgIiIsICIi
LCAiIiwgIndzOiJ9LAogICAgICAgICB7IndzIiwgIiIsICIiLCAiIiwgMCwgInM6IiwgIiIsICIi
LCAid3M6czoifSk7CiAgICAgY2hlY2tSZWxhdGl2ZVVSTCgibm90c3BlY2lhbDoiLCAiaHR0cDov
L2V4YW1wbGUub3JnL2Zvby9iYXIiLCB7Im5vdHNwZWNpYWwiLCAiIiwgIiIsICIiLCAwLCAiIiwg
IiIsICIiLCAibm90c3BlY2lhbDoifSk7CisgICAgCisgICAgY29uc3Qgd2NoYXJfdCBzdXJyb2dh
dGVCZWdpbiA9IDB4RDgwMDsKKyAgICBjb25zdCB3Y2hhcl90IHZhbGlkU3Vycm9nYXRlRW5kID0g
MHhERDU1OworICAgIGNvbnN0IHdjaGFyX3QgaW52YWxpZFN1cnJvZ2F0ZUVuZCA9ICdBJzsKKyAg
ICBjaGVja1VSTCh3aWRlU3RyaW5nPDEyPih7J2gnLCAndCcsICd0JywgJ3AnLCAnOicsICcvJywg
Jy8nLCAndycsICcvJywgc3Vycm9nYXRlQmVnaW4sIHZhbGlkU3Vycm9nYXRlRW5kLCAnXDAnfSks
CisgICAgICAgIHsiaHR0cCIsICIiLCAiIiwgInciLCAwLCAiLyVGMCU5MCU4NSU5NSIsICIiLCAi
IiwgImh0dHA6Ly93LyVGMCU5MCU4NSU5NSJ9KTsKKyAgICAKKyAgICAvLyBVUkxQYXJzZXIgbWF0
Y2hlcyBDaHJvbWUgYW5kIEZpcmVmb3ggYnV0IG5vdCBVUkw6OnBhcnNlLgorICAgIGNoZWNrVVJM
RGlmZmVyZW5jZXMod2lkZVN0cmluZzwxMj4oeydoJywgJ3QnLCAndCcsICdwJywgJzonLCAnLycs
ICcvJywgJ3cnLCAnLycsIHN1cnJvZ2F0ZUJlZ2luLCBpbnZhbGlkU3Vycm9nYXRlRW5kfSksCisg
ICAgICAgIHsiaHR0cCIsICIiLCAiIiwgInciLCAwLCAiLyVFRiVCRiVCREEiLCAiIiwgIiIsICJo
dHRwOi8vdy8lRUYlQkYlQkRBIn0sCisgICAgICAgIHsiaHR0cCIsICIiLCAiIiwgInciLCAwLCAi
LyVFRCVBMCU4MEEiLCAiIiwgIiIsICJodHRwOi8vdy8lRUQlQTAlODBBIn0pOworICAgIGNoZWNr
VVJMRGlmZmVyZW5jZXMod2lkZVN0cmluZzwxMz4oeydoJywgJ3QnLCAndCcsICdwJywgJzonLCAn
LycsICcvJywgJ3cnLCAnLycsICc/Jywgc3Vycm9nYXRlQmVnaW4sIGludmFsaWRTdXJyb2dhdGVF
bmQsICdcMCd9KSwKKyAgICAgICAgeyJodHRwIiwgIiIsICIiLCAidyIsIDAsICIvIiwgIiVFRiVC
RiVCREEiLCAiIiwgImh0dHA6Ly93Lz8lRUYlQkYlQkRBIn0sCisgICAgICAgIHsiaHR0cCIsICIi
LCAiIiwgInciLCAwLCAiLyIsICIlRUQlQTAlODBBIiwgIiIsICJodHRwOi8vdy8/JUVEJUEwJTgw
QSJ9KTsKKyAgICBjaGVja1VSTERpZmZlcmVuY2VzKHdpZGVTdHJpbmc8MTE+KHsnaCcsICd0Jywg
J3QnLCAncCcsICc6JywgJy8nLCAnLycsICd3JywgJy8nLCBzdXJyb2dhdGVCZWdpbiwgJ1wwJ30p
LAorICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICJ3IiwgMCwgIi8lRUYlQkYlQkQiLCAiIiwgIiIs
ICJodHRwOi8vdy8lRUYlQkYlQkQifSwKKyAgICAgICAgeyJodHRwIiwgIiIsICIiLCAidyIsIDAs
ICIvJUVEJUEwJTgwIiwgIiIsICIiLCAiaHR0cDovL3cvJUVEJUEwJTgwIn0pOworICAgIGNoZWNr
VVJMRGlmZmVyZW5jZXMod2lkZVN0cmluZzwxMj4oeydoJywgJ3QnLCAndCcsICdwJywgJzonLCAn
LycsICcvJywgJ3cnLCAnLycsICc/Jywgc3Vycm9nYXRlQmVnaW4sICdcMCd9KSwKKyAgICAgICAg
eyJodHRwIiwgIiIsICIiLCAidyIsIDAsICIvIiwgIiVFRiVCRiVCRCIsICIiLCAiaHR0cDovL3cv
PyVFRiVCRiVCRCJ9LAorICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICJ3IiwgMCwgIi8iLCAiJUVE
JUEwJTgwIiwgIiIsICJodHRwOi8vdy8/JUVEJUEwJTgwIn0pOwogfQogCiBzdGF0aWMgdm9pZCBj
aGVja1VSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNv
ZGluZywgY29uc3QgRXhwZWN0ZWRQYXJ0cyYgcGFydHMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289433</attachid>
            <date>2016-09-20 23:30:12 -0700</date>
            <delta_ts>2016-09-20 23:36:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162105-20160920232724.patch</filename>
            <type>text/plain</type>
            <size>10086</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjE5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE2LTA5LTIwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgT3B0aW1pemUg
VVJMUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjIxMDUKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IG5ldyBBUEkgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9VUkxQYXJz
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGVyY2VudEVuY29kZUJ5dGUpOgorICAgICAgICAo
V2ViQ29yZTo6dXRmOFBlcmNlbnRFbmNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6dXRmOFF1ZXJ5
RW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNv
cmU6OlVSTFBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplVVJMRW5j
b2RlZEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6cGVyY2VudEVuY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjp1dGY4UGVyY2VudEVuY29kZVF1ZXJ5KTogRGVsZXRlZC4KKwogMjAx
Ni0wOS0yMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJlcXVpcmUgV1RGTW92ZSBmb3IgU3RyaW5nOjphZG9wdApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9VUkxQYXJzZXIuY3BwCShyZXZpc2lvbiAyMDYxOTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTcsMTMgKzQ1
NywxNiBAQCBpbmxpbmUgc3RhdGljIGJvb2wgc2hvdWxkQ29weUZpbGVVUkwoQ29kCiAgICAgcmV0
dXJuICFpc1NsYXNoUXVlc3Rpb25Pckhhc2goKml0ZXJhdG9yKTsKIH0KIAotaW5saW5lIHN0YXRp
YyB2b2lkIHBlcmNlbnRFbmNvZGUodWludDhfdCBieXRlLCBWZWN0b3I8TENoYXI+JiBidWZmZXIp
CitpbmxpbmUgc3RhdGljIHZvaWQgcGVyY2VudEVuY29kZUJ5dGUodWludDhfdCBieXRlLCBWZWN0
b3I8TENoYXI+JiBidWZmZXIpCiB7CiAgICAgYnVmZmVyLmFwcGVuZCgnJScpOwogICAgIGJ1ZmZl
ci5hcHBlbmQodXBwZXJOaWJibGVUb0FTQ0lJSGV4RGlnaXQoYnl0ZSkpOwogICAgIGJ1ZmZlci5h
cHBlbmQobG93ZXJOaWJibGVUb0FTQ0lJSGV4RGlnaXQoYnl0ZSkpOwogfQogCitjb25zdCBjaGFy
KiByZXBsYWNlbWVudENoYXJhY3RlclVURjhQZXJjZW50RW5jb2RlZCA9ICIlRUYlQkYlQkQiOwor
Y29uc3Qgc2l6ZV90IHJlcGxhY2VtZW50Q2hhcmFjdGVyVVRGOFBlcmNlbnRFbmNvZGVkTGVuZ3Ro
ID0gOTsKKwogdGVtcGxhdGU8Ym9vbCBzZXJpYWxpemVkPgogaW5saW5lIHN0YXRpYyB2b2lkIHV0
ZjhQZXJjZW50RW5jb2RlKFVDaGFyMzIgY29kZVBvaW50LCBWZWN0b3I8TENoYXI+JiBkZXN0aW5h
dGlvbiwgYm9vbCgqaXNJbkNvZGVTZXQpKFVDaGFyMzIpKQogewpAQCAtNDcyLDM5ICs0NzUsNTYg
QEAgaW5saW5lIHN0YXRpYyB2b2lkIHV0ZjhQZXJjZW50RW5jb2RlKFVDaAogICAgICAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighaXNJbkNvZGVTZXQoY29kZVBvaW50KSk7CiAg
ICAgICAgIGRlc3RpbmF0aW9uLmFwcGVuZChjb2RlUG9pbnQpOwogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmIChpc0luQ29kZVNldChjb2RlUG9pbnQpKSB7Ci0gICAgICAgICAgICB1aW50OF90IGJ1
ZmZlcltVOF9NQVhfTEVOR1RIXTsKLSAgICAgICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gMDsKLSAg
ICAgICAgICAgIFVCb29sIGVycm9yID0gZmFsc2U7Ci0gICAgICAgICAgICBVOF9BUFBFTkQoYnVm
ZmVyLCBvZmZzZXQsIFU4X01BWF9MRU5HVEgsIGNvZGVQb2ludCwgZXJyb3IpOwotICAgICAgICAg
ICAgLy8gRklYTUU6IENoZWNrIGVycm9yLgotICAgICAgICAgICAgZm9yIChpbnQzMl90IGkgPSAw
OyBpIDwgb2Zmc2V0OyArK2kpCi0gICAgICAgICAgICAgICAgcGVyY2VudEVuY29kZShidWZmZXJb
aV0sIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UoaXNBU0NJSShjb2RlUG9pbnQpLCAiaXNJbkNvZGVTZXQgc2hvdWxkIGFsd2F5
cyByZXR1cm4gdHJ1ZSBmb3Igbm9uLUFTQ0lJIGNoYXJhY3RlcnMiKTsKLSAgICAgICAgICAgIGRl
c3RpbmF0aW9uLmFwcGVuZChjb2RlUG9pbnQpOworICAgICAgICBpZiAoaXNBU0NJSShjb2RlUG9p
bnQpKSB7CisgICAgICAgICAgICBpZiAoaXNJbkNvZGVTZXQoY29kZVBvaW50KSkKKyAgICAgICAg
ICAgICAgICBwZXJjZW50RW5jb2RlQnl0ZShjb2RlUG9pbnQsIGRlc3RpbmF0aW9uKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5hcHBlbmQoY29kZVBvaW50
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKGlzSW5Db2RlU2V0KGNvZGVQb2ludCksICJpc0luQ29kZVNldCBzaG91bGQgYWx3YXlz
IHJldHVybiB0cnVlIGZvciBub24tQVNDSUkgY2hhcmFjdGVycyIpOworICAgICAgICAKKyAgICAg
ICAgaWYgKCFVX0lTX1VOSUNPREVfQ0hBUihjb2RlUG9pbnQpKSB7CisgICAgICAgICAgICBkZXN0
aW5hdGlvbi5hcHBlbmQocmVwbGFjZW1lbnRDaGFyYWN0ZXJVVEY4UGVyY2VudEVuY29kZWQsIHJl
cGxhY2VtZW50Q2hhcmFjdGVyVVRGOFBlcmNlbnRFbmNvZGVkTGVuZ3RoKTsKKyAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdWludDhfdCBidWZmZXJbVThf
TUFYX0xFTkdUSF07CisgICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gMDsKKyAgICAgICAgVThfQVBQ
RU5EX1VOU0FGRShidWZmZXIsIG9mZnNldCwgY29kZVBvaW50KTsKKyAgICAgICAgZm9yIChpbnQz
Ml90IGkgPSAwOyBpIDwgb2Zmc2V0OyArK2kpCisgICAgICAgICAgICBwZXJjZW50RW5jb2RlQnl0
ZShidWZmZXJbaV0sIGRlc3RpbmF0aW9uKTsKICAgICB9CiB9CiAKIHRlbXBsYXRlPGJvb2wgc2Vy
aWFsaXplZD4KLWlubGluZSBzdGF0aWMgdm9pZCB1dGY4UGVyY2VudEVuY29kZVF1ZXJ5KFVDaGFy
MzIgY29kZVBvaW50LCBWZWN0b3I8TENoYXI+JiBkZXN0aW5hdGlvbikKK2lubGluZSBzdGF0aWMg
dm9pZCB1dGY4UXVlcnlFbmNvZGUoVUNoYXIzMiBjb2RlUG9pbnQsIFZlY3RvcjxMQ2hhcj4mIGRl
c3RpbmF0aW9uKQogewogICAgIGlmIChzZXJpYWxpemVkKSB7CiAgICAgICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlzQVNDSUkoY29kZVBvaW50KSk7CiAgICAgICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFzaG91bGRQZXJjZW50RW5jb2RlUXVlcnlCeXRl
KGNvZGVQb2ludCkpOwogICAgICAgICBkZXN0aW5hdGlvbi5hcHBlbmQoY29kZVBvaW50KTsKICAg
ICB9IGVsc2UgeworICAgICAgICBpZiAoaXNBU0NJSShjb2RlUG9pbnQpKSB7CisgICAgICAgICAg
ICBpZiAoc2hvdWxkUGVyY2VudEVuY29kZVF1ZXJ5Qnl0ZShjb2RlUG9pbnQpKQorICAgICAgICAg
ICAgICAgIHBlcmNlbnRFbmNvZGVCeXRlKGNvZGVQb2ludCwgZGVzdGluYXRpb24pOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFwcGVuZChjb2RlUG9pbnQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
IVVfSVNfVU5JQ09ERV9DSEFSKGNvZGVQb2ludCkpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9u
LmFwcGVuZChyZXBsYWNlbWVudENoYXJhY3RlclVURjhQZXJjZW50RW5jb2RlZCwgcmVwbGFjZW1l
bnRDaGFyYWN0ZXJVVEY4UGVyY2VudEVuY29kZWRMZW5ndGgpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKICAgICAgICAgdWludDhfdCBidWZmZXJbVThfTUFYX0xFTkdUSF07CiAg
ICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gMDsKLSAgICAgICAgVUJvb2wgZXJyb3IgPSBmYWxzZTsK
LSAgICAgICAgVThfQVBQRU5EKGJ1ZmZlciwgb2Zmc2V0LCBVOF9NQVhfTEVOR1RILCBjb2RlUG9p
bnQsIGVycm9yKTsKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ob2Zm
c2V0IDw9IHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihidWZmZXIpKSk7Ci0gICAgICAgIC8v
IEZJWE1FOiBDaGVjayBlcnJvci4KKyAgICAgICAgVThfQVBQRU5EX1VOU0FGRShidWZmZXIsIG9m
ZnNldCwgY29kZVBvaW50KTsKICAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgb2Zmc2V0
OyArK2kpIHsKICAgICAgICAgICAgIGF1dG8gYnl0ZSA9IGJ1ZmZlcltpXTsKICAgICAgICAgICAg
IGlmIChzaG91bGRQZXJjZW50RW5jb2RlUXVlcnlCeXRlKGJ5dGUpKQotICAgICAgICAgICAgICAg
IHBlcmNlbnRFbmNvZGUoYnl0ZSwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgICAgIHBlcmNl
bnRFbmNvZGVCeXRlKGJ5dGUsIGRlc3RpbmF0aW9uKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBkZXN0aW5hdGlvbi5hcHBlbmQoYnl0ZSk7CiAgICAgICAgIH0KQEAgLTUyMCw3
ICs1NDAsNyBAQCBpbmxpbmUgc3RhdGljIHZvaWQgZW5jb2RlUXVlcnkoY29uc3QgVmVjCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICB1aW50OF90IGJ5
dGUgPSBkYXRhW2ldOwogICAgICAgICBpZiAoc2hvdWxkUGVyY2VudEVuY29kZVF1ZXJ5Qnl0ZShi
eXRlKSkKLSAgICAgICAgICAgIHBlcmNlbnRFbmNvZGUoYnl0ZSwgZGVzdGluYXRpb24pOworICAg
ICAgICAgICAgcGVyY2VudEVuY29kZUJ5dGUoYnl0ZSwgZGVzdGluYXRpb24pOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBkZXN0aW5hdGlvbi5hcHBlbmQoYnl0ZSk7CiAgICAgfQpAQCAtMTQx
Myw3ICsxNDMzLDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlz
VVRGOEVuY29kaW5nKQotICAgICAgICAgICAgICAgIHV0ZjhQZXJjZW50RW5jb2RlUXVlcnk8c2Vy
aWFsaXplZD4oKmMsIG1fYXNjaWlCdWZmZXIpOworICAgICAgICAgICAgICAgIHV0ZjhRdWVyeUVu
Y29kZTxzZXJpYWxpemVkPigqYywgbV9hc2NpaUJ1ZmZlcik7CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgYXBwZW5kQ29kZVBvaW50KHF1ZXJ5QnVmZmVyLCAqYyk7CiAgICAgICAg
ICAgICArK2M7CkBAIC0yMTk4LDcgKzIyMTgsNyBAQCBpbmxpbmUgc3RhdGljIHZvaWQgc2VyaWFs
aXplVVJMRW5jb2RlZEZvCiAgICAgICAgICAgICB8fCAoYnl0ZSA+PSAweDYxICYmIGJ5dGUgPD0g
MHg3QSkpCiAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGJ5dGUpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBwZXJjZW50RW5jb2RlKGJ5dGUsIG91dHB1dCk7CisgICAgICAgICAgICBwZXJj
ZW50RW5jb2RlQnl0ZShieXRlLCBvdXRwdXQpOwogICAgIH0KIH0KICAgICAKSW5kZXg6IFRvb2xz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjE5
NikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisy
MDE2LTA5LTIwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgT3B0aW1pemUgVVJMUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIxMDUKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJl
eSBHYXJlbi4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkxQYXJz
ZXIuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKwogMjAxNi0wOS0yMCAg
QWFrYXNoIEphaW4gIDxhYWthc2hfamFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgZW5hYmxlIHJl
bW90ZV9hcGkgKGZvciBkZWJ1Z2dpbmcpIGluIGZsYWtpbmVzcyBkYXNoYm9hcmQgYXBwCkluZGV4
OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2VyLmNwcAko
cmV2aXNpb24gMjA2MTk2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1VS
TFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNSw3ICsyMTUsNiBAQCBURVNUX0YoVVJM
UGFyc2VyVGVzdCwgQmFzaWMpCiAgICAgY2hlY2tVUkwoImh0dHA6Ly8xMjMuMjU2LyIsIHsiaHR0
cCIsICIiLCAiIiwgIjEyMy4yNTYiLCAwLCAiLyIsICIiLCAiIiwgImh0dHA6Ly8xMjMuMjU2LyJ9
KTsKICAgICBjaGVja1VSTCgibm90c3BlY2lhbDovYSIsIHsibm90c3BlY2lhbCIsICIiLCAiIiwg
IiIsIDAsICIvYSIsICIiLCAiIiwgIm5vdHNwZWNpYWw6L2EifSk7CiAgICAgY2hlY2tVUkwoIm5v
dHNwZWNpYWw6IiwgeyJub3RzcGVjaWFsIiwgIiIsICIiLCAiIiwgMCwgIiIsICIiLCAiIiwgIm5v
dHNwZWNpYWw6In0pOwotICAgIC8vIEZJWE1FOiBGaXggYW5kIGFkZCBhIHRlc3Qgd2l0aCBhbiBp
bnZhbGlkIHN1cnJvZ2F0ZSBwYWlyIGF0IHRoZSBlbmQgd2l0aCBhIHNwYWNlIGFzIHRoZSBzZWNv
bmQgY29kZSB1bml0LgogCiAgICAgLy8gVGhpcyBkaXNhZ3JlZXMgd2l0aCB0aGUgd2ViIHBsYXRm
b3JtIHRlc3QgZm9yIGh0dHA6Ly86QHd3dy5leGFtcGxlLmNvbSBidXQgYWdyZWVzIHdpdGggQ2hy
b21lIGFuZCBVUkw6OnBhcnNlLAogICAgIC8vIGFuZCBGaXJlZm94IGZhaWxzIHRoZSB3ZWIgcGxh
dGZvcm0gdGVzdCBkaWZmZXJlbnRseS4gTWF5YmUgdGhlIHdlYiBwbGF0Zm9ybSB0ZXN0IG91Z2h0
IHRvIGJlIGNoYW5nZWQuCkBAIC02NTYsNyArNjU1LDkgQEAgVEVTVF9GKFVSTFBhcnNlclRlc3Qs
IERlZmF1bHRQb3J0KQogICAgIGNoZWNrVVJMRGlmZmVyZW5jZXMoImh0dHA6Ly8lNDhPc1QiLAog
ICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICJob3N0IiwgMCwgIi8iLCAiIiwgIiIsICJodHRwOi8v
aG9zdC8ifSwKICAgICAgICAgeyJodHRwIiwgIiIsICIiLCAiJTQ4b3N0IiwgMCwgIi8iLCAiIiwg
IiIsICJodHRwOi8vJTQ4b3N0LyJ9KTsKLQorICAgIGNoZWNrVVJMRGlmZmVyZW5jZXMoImh0dHA6
Ly9ob3N0L2AiLAorICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICJob3N0IiwgMCwgIi8lNjAiLCAi
IiwgIiIsICJodHRwOi8vaG9zdC8lNjAifSwKKyAgICAgICAgeyJodHRwIiwgIiIsICIiLCAiaG9z
dCIsIDAsICIvYCIsICIiLCAiIiwgImh0dHA6Ly9ob3N0L2AifSk7CiB9CiAgICAgCiBzdGF0aWMg
dm9pZCBzaG91bGRGYWlsKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQpAQCAtNzE5LDYgKzcyMCwy
OSBAQCBURVNUX0YoVVJMUGFyc2VyVGVzdCwgQWRkaXRpb25hbFRlc3RzKQogICAgICAgICB7Indz
IiwgIiIsICIiLCAiIiwgMCwgIiIsICIiLCAiIiwgIndzOiJ9LAogICAgICAgICB7IndzIiwgIiIs
ICIiLCAiIiwgMCwgInM6IiwgIiIsICIiLCAid3M6czoifSk7CiAgICAgY2hlY2tSZWxhdGl2ZVVS
TCgibm90c3BlY2lhbDoiLCAiaHR0cDovL2V4YW1wbGUub3JnL2Zvby9iYXIiLCB7Im5vdHNwZWNp
YWwiLCAiIiwgIiIsICIiLCAwLCAiIiwgIiIsICIiLCAibm90c3BlY2lhbDoifSk7CisgICAgCisg
ICAgY29uc3Qgd2NoYXJfdCBzdXJyb2dhdGVCZWdpbiA9IDB4RDgwMDsKKyAgICBjb25zdCB3Y2hh
cl90IHZhbGlkU3Vycm9nYXRlRW5kID0gMHhERDU1OworICAgIGNvbnN0IHdjaGFyX3QgaW52YWxp
ZFN1cnJvZ2F0ZUVuZCA9ICdBJzsKKyAgICBjaGVja1VSTCh3aWRlU3RyaW5nPDEyPih7J2gnLCAn
dCcsICd0JywgJ3AnLCAnOicsICcvJywgJy8nLCAndycsICcvJywgc3Vycm9nYXRlQmVnaW4sIHZh
bGlkU3Vycm9nYXRlRW5kLCAnXDAnfSksCisgICAgICAgIHsiaHR0cCIsICIiLCAiIiwgInciLCAw
LCAiLyVGMCU5MCU4NSU5NSIsICIiLCAiIiwgImh0dHA6Ly93LyVGMCU5MCU4NSU5NSJ9KTsKKyAg
ICAKKyAgICAvLyBVUkxQYXJzZXIgbWF0Y2hlcyBDaHJvbWUgYW5kIEZpcmVmb3ggYnV0IG5vdCBV
Ukw6OnBhcnNlLgorICAgIGNoZWNrVVJMRGlmZmVyZW5jZXMod2lkZVN0cmluZzwxMj4oeydoJywg
J3QnLCAndCcsICdwJywgJzonLCAnLycsICcvJywgJ3cnLCAnLycsIHN1cnJvZ2F0ZUJlZ2luLCBp
bnZhbGlkU3Vycm9nYXRlRW5kfSksCisgICAgICAgIHsiaHR0cCIsICIiLCAiIiwgInciLCAwLCAi
LyVFRiVCRiVCREEiLCAiIiwgIiIsICJodHRwOi8vdy8lRUYlQkYlQkRBIn0sCisgICAgICAgIHsi
aHR0cCIsICIiLCAiIiwgInciLCAwLCAiLyVFRCVBMCU4MEEiLCAiIiwgIiIsICJodHRwOi8vdy8l
RUQlQTAlODBBIn0pOworICAgIGNoZWNrVVJMRGlmZmVyZW5jZXMod2lkZVN0cmluZzwxMz4oeydo
JywgJ3QnLCAndCcsICdwJywgJzonLCAnLycsICcvJywgJ3cnLCAnLycsICc/Jywgc3Vycm9nYXRl
QmVnaW4sIGludmFsaWRTdXJyb2dhdGVFbmQsICdcMCd9KSwKKyAgICAgICAgeyJodHRwIiwgIiIs
ICIiLCAidyIsIDAsICIvIiwgIiVFRiVCRiVCREEiLCAiIiwgImh0dHA6Ly93Lz8lRUYlQkYlQkRB
In0sCisgICAgICAgIHsiaHR0cCIsICIiLCAiIiwgInciLCAwLCAiLyIsICIlRUQlQTAlODBBIiwg
IiIsICJodHRwOi8vdy8/JUVEJUEwJTgwQSJ9KTsKKyAgICBjaGVja1VSTERpZmZlcmVuY2VzKHdp
ZGVTdHJpbmc8MTE+KHsnaCcsICd0JywgJ3QnLCAncCcsICc6JywgJy8nLCAnLycsICd3JywgJy8n
LCBzdXJyb2dhdGVCZWdpbiwgJ1wwJ30pLAorICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICJ3Iiwg
MCwgIi8lRUYlQkYlQkQiLCAiIiwgIiIsICJodHRwOi8vdy8lRUYlQkYlQkQifSwKKyAgICAgICAg
eyJodHRwIiwgIiIsICIiLCAidyIsIDAsICIvJUVEJUEwJTgwIiwgIiIsICIiLCAiaHR0cDovL3cv
JUVEJUEwJTgwIn0pOworICAgIGNoZWNrVVJMRGlmZmVyZW5jZXMod2lkZVN0cmluZzwxMj4oeydo
JywgJ3QnLCAndCcsICdwJywgJzonLCAnLycsICcvJywgJ3cnLCAnLycsICc/Jywgc3Vycm9nYXRl
QmVnaW4sICdcMCd9KSwKKyAgICAgICAgeyJodHRwIiwgIiIsICIiLCAidyIsIDAsICIvIiwgIiVF
RiVCRiVCRCIsICIiLCAiaHR0cDovL3cvPyVFRiVCRiVCRCJ9LAorICAgICAgICB7Imh0dHAiLCAi
IiwgIiIsICJ3IiwgMCwgIi8iLCAiJUVEJUEwJTgwIiwgIiIsICJodHRwOi8vdy8/JUVEJUEwJTgw
In0pOworICAgIGNoZWNrVVJMRGlmZmVyZW5jZXMod2lkZVN0cmluZzwxMz4oeydoJywgJ3QnLCAn
dCcsICdwJywgJzonLCAnLycsICcvJywgJ3cnLCAnLycsICc/Jywgc3Vycm9nYXRlQmVnaW4sICcg
JywgJ1wwJ30pLAorICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICJ3IiwgMCwgIi8iLCAiJUVGJUJG
JUJEIiwgIiIsICJodHRwOi8vdy8/JUVGJUJGJUJEIn0sCisgICAgICAgIHsiaHR0cCIsICIiLCAi
IiwgInciLCAwLCAiLyIsICIlRUQlQTAlODAiLCAiIiwgImh0dHA6Ly93Lz8lRUQlQTAlODAifSk7
CiB9CiAKIHN0YXRpYyB2b2lkIGNoZWNrVVJMKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25z
dCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBjb25zdCBFeHBlY3RlZFBhcnRzJiBwYXJ0cykK
</data>

          </attachment>
      

    </bug>

</bugzilla>