<?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>162241</bug_id>
          
          <creation_ts>2016-09-19 15:31:55 -0700</creation_ts>
          <short_desc>Reduce allocations in URLParser</short_desc>
          <delta_ts>2016-10-03 16:03:21 -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>cdumez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1231370</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-19 15:31:55 -0700</bug_when>
    <thetext>Reduce allocations in URLParser</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231374</commentid>
    <comment_count>1</comment_count>
      <attachid>289267</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-19 15:39:20 -0700</bug_when>
    <thetext>Created attachment 289267
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231382</commentid>
    <comment_count>2</comment_count>
      <attachid>289267</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-19 16:07:30 -0700</bug_when>
    <thetext>Comment on attachment 289267
Patch

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

Sorry, I did not have time to do a proper review yet. Just a few comments.

&gt; Source/WebCore/ChangeLog:9
&gt; +        1. When URLParsing fails, use the original String for things like href.

Do we really care about optimizing the failure case?

&gt; Source/WebCore/platform/URLParser.cpp:873
&gt; +        return parse(input, input.characters8(), input.length(), base, encoding);

Passing input in addition to the characters is a bit odd. Since it seems to be used only to optimize the failure case, I am not sure it is worth it.

&gt; Source/WebCore/platform/URLParser.cpp:1543
&gt; +        for (size_t i = 0; i &lt; m_asciiBuffer.size(); ++i)

There is an appendVector().

&gt; Source/WebCore/platform/URLParser.cpp:1546
&gt; +            buffer.uncheckedAppend(m_unicodeFragmentBuffer[i]);

There is an appendVector().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231414</commentid>
    <comment_count>3</comment_count>
      <attachid>289280</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-19 16:40:23 -0700</bug_when>
    <thetext>Created attachment 289280
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231858</commentid>
    <comment_count>4</comment_count>
      <attachid>289280</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-20 14:18:30 -0700</bug_when>
    <thetext>Comment on attachment 289280
Patch

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

r=me

&gt; Source/WebCore/platform/URLParser.cpp:115
&gt; +static void appendCodePoint(UChar32 codePoint, Vector&lt;UChar&gt;&amp; destination)

I think it may look better if we reversed those parameters.

&gt; Source/WebCore/platform/URLParser.cpp:1925
&gt; +            for (size_t i = 0; i &lt; domain.length(); i++)

++i

&gt; Source/WebCore/platform/URLParser.cpp:1926
&gt; +                ascii.uncheckedAppend(toASCIILower(domain.characters8()[i]));

Please cache characters8() before the loop

&gt; Source/WebCore/platform/URLParser.cpp:1929
&gt; +        Vector&lt;LChar, defaultInlineBufferSize&gt; ascii;

Can we refactor so that there is only 1 vector and 1 return statement?

&gt; Source/WebCore/platform/URLParser.cpp:1933
&gt; +            ascii.uncheckedAppend(toASCIILower(domain.characters16()[i]));

Please cache characters16() before the loop</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231874</commentid>
    <comment_count>5</comment_count>
      <attachid>289402</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-20 14:51:45 -0700</bug_when>
    <thetext>Created attachment 289402
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231875</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-20 14:53:04 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/206177</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235970</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-10-03 16:03:21 -0700</bug_when>
    <thetext>*** Bug 162045 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289267</attachid>
            <date>2016-09-19 15:39:20 -0700</date>
            <delta_ts>2016-09-19 16:40:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162241-20160919153635.patch</filename>
            <type>text/plain</type>
            <size>22929</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjEwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDE2LTA5LTE5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVkdWNlIGFs
bG9jYXRpb25zIGluIFVSTFBhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYyMjQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyByZWR1Y2VzIGFsbG9jYXRpb25zIGluIFVSTFBhcnNlciB0d28g
d2F5czoKKyAgICAgICAgMS4gV2hlbiBVUkxQYXJzaW5nIGZhaWxzLCB1c2UgdGhlIG9yaWdpbmFs
IFN0cmluZyBmb3IgdGhpbmdzIGxpa2UgaHJlZi4KKyAgICAgICAgICAgVGhpcyBtYWtlcyBpdCBz
byB3ZSBpbmNyZW1lbnQgYSByZWZjb3VudCBpbnN0ZWFkIG9mIGFsbG9jYXRpbmcgYW5kIGNvcHlp
bmcgYSBTdHJpbmcuCisgICAgICAgIDIuIFVzZSBWZWN0b3JzIGluc3RlYWQgb2YgU3RyaW5nQnVp
bGRlcnMuICBUaGlzIGFsbG93cyB1cyB0byB1c2UgdGhlIGlubGluZSBjYXBhY2l0eQorICAgICAg
ICAgICBmb3Igc2hvcnQgVVJMcyAoPDJLQikgYW5kIGFsc28gYWxsb3dzIHVzIHRvIHNraXAgYnJh
bmNoZXMgYmVjYXVzZSB3ZSBrbm93IHdoZXRoZXIgdGhlCisgICAgICAgICAgIGNvbnRhaW5lZCB0
eXBlIGlzIFVDaGFyIG9yIExDaGFyIGF0IGNvbXBpbGUgdGltZS4gIEl0IGFsc28gYWxsb3dzIHVz
IHRvIHVzZSB1bmNoZWNrZWRBcHBlbmQuCisKKyAgICAgICAgQWRkZWQgbmV3IEFQSSB0ZXN0cyBm
b3IgcGFydHMgdGhhdCB3ZXJlIGxlc3MgdGVzdGVkLCBidXQgdGhlcmUgaXMKKyAgICAgICAgbm8g
Y2hhbmdlIGluIGJlaGF2aW9yIGV4Y2VwdCBmb3IgYSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4K
KworICAgICAgICAqIHBsYXRmb3JtL1VSTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjph
cHBlbmRDb2RlUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlUXVlcnkpOgorICAgICAg
ICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpmYWlsdXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBh
cnNlcjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6cGVyY2VudERlY29kZSk6CisgICAgICAg
IChXZWJDb3JlOjpkb21haW5Ub0FTQ0lJKToKKyAgICAgICAgKFdlYkNvcmU6Omhhc0ludmFsaWRE
b21haW5DaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpwYXJzZUhvc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Zm9ybVVSTERlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpp
c0MwQ29udHJvbCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vVVJMUGFyc2VyLmg6CisK
IDIwMTYtMDktMTkgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAg
IEFkZCBzaXplIGFzc2VydCBmb3IgUmVuZGVyRWxlbWVudApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVVJMUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9VUkxQYXJzZXIuY3BwCShyZXZpc2lvbiAyMDYwNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9VUkxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMCArMzAsNiBAQAog
I2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPHVuaWNvZGUvdWlkbmEuaD4KICNpbmNsdWRlIDx1
bmljb2RlL3V0eXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC0xMTUsNiArMTExLDE3IEBAIGF1dG8gQ29kZVBvaW50SXRlcmF0b3I8VUNoYXI+OjpvcGVy
YXRvcisKICAgICBtX2JlZ2luICs9IGk7CiAgICAgcmV0dXJuICp0aGlzOwogfQorICAgIAorc3Rh
dGljIHZvaWQgYXBwZW5kQ29kZVBvaW50KFVDaGFyMzIgY29kZVBvaW50LCBWZWN0b3I8VUNoYXI+
JiBkZXN0aW5hdGlvbikKK3sKKyAgICBpZiAoVV9JU19CTVAoY29kZVBvaW50KSkgeworICAgICAg
ICBkZXN0aW5hdGlvbi5hcHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+KGNvZGVQb2ludCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGRlc3RpbmF0aW9uLnJlc2VydmVDYXBhY2l0eShkZXN0
aW5hdGlvbi5zaXplKCkgKyAyKTsKKyAgICBkZXN0aW5hdGlvbi51bmNoZWNrZWRBcHBlbmQoVTE2
X0xFQUQoY29kZVBvaW50KSk7CisgICAgZGVzdGluYXRpb24udW5jaGVja2VkQXBwZW5kKFUxNl9U
UkFJTChjb2RlUG9pbnQpKTsKK30KIAogZW51bSBVUkxDaGFyYWN0ZXJDbGFzcyB7CiAgICAgVXNl
ckluZm8gPSAweDEsCkBAIC00NjgsMTAgKzQ3NSwxMCBAQCBpbmxpbmUgc3RhdGljIHZvaWQgdXRm
OFBlcmNlbnRFbmNvZGVRdWVyCiAgICAgfQogfQogICAgIAotaW5saW5lIHN0YXRpYyB2b2lkIGVu
Y29kZVF1ZXJ5KGNvbnN0IFN0cmluZ0J1aWxkZXImIHNvdXJjZSwgVmVjdG9yPExDaGFyPiYgZGVz
dGluYXRpb24sIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCitpbmxpbmUgc3RhdGljIHZv
aWQgZW5jb2RlUXVlcnkoY29uc3QgVmVjdG9yPFVDaGFyPiYgc291cmNlLCBWZWN0b3I8TENoYXI+
JiBkZXN0aW5hdGlvbiwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKIHsKICAgICAvLyBG
SVhNRTogSXQgaXMgdW5jbGVhciBpbiB0aGUgc3BlYyB3aGF0IHRvIGRvIHdoZW4gZW5jb2Rpbmcg
ZmFpbHMuIFRoZSBiZWhhdmlvciBzaG91bGQgYmUgc3BlY2lmaWVkIGFuZCB0ZXN0ZWQuCi0gICAg
Q1N0cmluZyBlbmNvZGVkID0gZW5jb2RpbmcuZW5jb2RlKHNvdXJjZS50b1N0cmluZ1ByZXNlcnZl
Q2FwYWNpdHkoKSwgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICBDU3Ry
aW5nIGVuY29kZWQgPSBlbmNvZGluZy5lbmNvZGUoU3RyaW5nVmlldyhzb3VyY2UuZGF0YSgpLCBz
b3VyY2Uuc2l6ZSgpKSwgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKICAgICBj
b25zdCBjaGFyKiBkYXRhID0gZW5jb2RlZC5kYXRhKCk7CiAgICAgc2l6ZV90IGxlbmd0aCA9IGVu
Y29kZWQubGVuZ3RoKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewpAQCAtODQwLDggKzg0Nyw3IEBAIHZvaWQgVVJMUGFyc2VyOjpwb3BQYXRoKCkKICAgICBtX2Fz
Y2lpQnVmZmVyLnJlc2l6ZShtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaCk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1VUkwgVVJMUGFyc2VyOjpmYWlsdXJlKGNvbnN0
IENoYXJhY3RlclR5cGUqIGlucHV0LCB1bnNpZ25lZCBsZW5ndGgpCitVUkwgVVJMUGFyc2VyOjpm
YWlsdXJlKGNvbnN0IFN0cmluZyYgaW5wdXRTdHJpbmcpCiB7CiAgICAgVVJMIHVybDsKICAgICB1
cmwubV9pc1ZhbGlkID0gZmFsc2U7CkBAIC04NTcsMTkgKzg2MywyMSBAQCBVUkwgVVJMUGFyc2Vy
OjpmYWlsdXJlKGNvbnN0IENoYXJhY3RlclR5CiAgICAgdXJsLm1fcGF0aEVuZCA9IDA7CiAgICAg
dXJsLm1fcXVlcnlFbmQgPSAwOwogICAgIHVybC5tX2ZyYWdtZW50RW5kID0gMDsKLSAgICB1cmwu
bV9zdHJpbmcgPSBTdHJpbmcoaW5wdXQsIGxlbmd0aCk7CisgICAgdXJsLm1fc3RyaW5nID0gaW5w
dXRTdHJpbmc7CiAgICAgcmV0dXJuIHVybDsKIH0KIAogVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29u
c3QgU3RyaW5nJiBpbnB1dCwgY29uc3QgVVJMJiBiYXNlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVu
Y29kaW5nKQogewogICAgIGlmIChpbnB1dC5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIHBhcnNl
KGlucHV0LmNoYXJhY3RlcnM4KCksIGlucHV0Lmxlbmd0aCgpLCBiYXNlLCBlbmNvZGluZyk7Ci0g
ICAgcmV0dXJuIHBhcnNlKGlucHV0LmNoYXJhY3RlcnMxNigpLCBpbnB1dC5sZW5ndGgoKSwgYmFz
ZSwgZW5jb2RpbmcpOworICAgICAgICByZXR1cm4gcGFyc2UoaW5wdXQsIGlucHV0LmNoYXJhY3Rl
cnM4KCksIGlucHV0Lmxlbmd0aCgpLCBiYXNlLCBlbmNvZGluZyk7CisgICAgcmV0dXJuIHBhcnNl
KGlucHV0LCBpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgaW5wdXQubGVuZ3RoKCksIGJhc2UsIGVuY29k
aW5nKTsKIH0KIAorY29uc3Qgc2l6ZV90IGRlZmF1bHRJbmxpbmVCdWZmZXJTaXplID0gMjA0ODsK
KwogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLVVSTCBVUkxQYXJzZXI6OnBhcnNl
KGNvbnN0IENoYXJhY3RlclR5cGUqIGlucHV0LCBjb25zdCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0
IFVSTCYgYmFzZSwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKK1VSTCBVUkxQYXJzZXI6
OnBhcnNlKGNvbnN0IFN0cmluZyYgaW5wdXRTdHJpbmcsIGNvbnN0IENoYXJhY3RlclR5cGUqIGlu
cHV0LCBjb25zdCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFVSTCYgYmFzZSwgY29uc3QgVGV4dEVu
Y29kaW5nJiBlbmNvZGluZykKIHsKICAgICBMT0coVVJMUGFyc2VyLCAiUGFyc2luZyBVUkwgPCVz
PiBiYXNlIDwlcz4iLCBTdHJpbmcoaW5wdXQsIGxlbmd0aCkudXRmOCgpLmRhdGEoKSwgYmFzZS5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICBtX3VybCA9IHsgfTsKQEAgLTg3OCw3ICs4ODYs
NyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgbV9hc2Np
aUJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKICAgICAKICAgICBib29sIGlzVVRGOEVu
Y29kaW5nID0gZW5jb2RpbmcgPT0gVVRGOEVuY29kaW5nKCk7Ci0gICAgU3RyaW5nQnVpbGRlciBx
dWVyeUJ1ZmZlcjsKKyAgICBWZWN0b3I8VUNoYXI+IHF1ZXJ5QnVmZmVyOwogCiAgICAgdW5zaWdu
ZWQgZW5kSW5kZXggPSBsZW5ndGg7CiAgICAgd2hpbGUgKGVuZEluZGV4ICYmIGlzQzBDb250cm9s
T3JTcGFjZShpbnB1dFtlbmRJbmRleCAtIDFdKSkKQEAgLTk5NSw3ICsxMDAzLDcgQEAgVVJMIFVS
TFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICBjYXNlIFN0YXRlOjpO
b1NjaGVtZToKICAgICAgICAgICAgIExPR19TVEFURSgiTm9TY2hlbWUiKTsKICAgICAgICAgICAg
IGlmIChiYXNlLmlzTnVsbCgpIHx8IChiYXNlLm1fY2Fubm90QmVBQmFzZVVSTCAmJiAqYyAhPSAn
IycpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0LCBsZW5ndGgpOworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0U3RyaW5nKTsKICAgICAgICAgICAgIGlm
IChiYXNlLm1fY2Fubm90QmVBQmFzZVVSTCAmJiAqYyA9PSAnIycpIHsKICAgICAgICAgICAgICAg
ICBjb3B5VVJMUGFydHNVbnRpbChiYXNlLCBVUkxQYXJ0OjpRdWVyeUVuZCk7CiAgICAgICAgICAg
ICAgICAgc3RhdGUgPSBTdGF0ZTo6RnJhZ21lbnQ7CkBAIC0xMDE5LDcgKzEwMjcsNyBAQCBVUkwg
VVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICAgICAgd2hp
bGUgKCFjLmF0RW5kKCkgJiYgaXNUYWJPck5ld2xpbmUoKmMpKQogICAgICAgICAgICAgICAgICAg
ICArK2M7CiAgICAgICAgICAgICAgICAgaWYgKGMuYXRFbmQoKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhaWx1cmUoaW5wdXQsIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWlsdXJlKGlucHV0U3RyaW5nKTsKICAgICAgICAgICAgICAgICBpZiAoKmMgPT0gJy8n
KSB7CiAgICAgICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CiAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlNwZWNpYWxBdXRob3JpdHlJZ25vcmVTbGFz
aGVzOwpAQCAtMTExOSw3ICsxMTI3LDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hh
cmFjdGVyVHlwZQogICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX2FzY2lp
QnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9wYXNzd29yZEVuZCA9
IG1fdXJsLm1fdXNlckVuZDsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZUhvc3QoQ29k
ZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4oYXV0aG9yaXR5T3JIb3N0QmVnaW4sIGMpKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0LCBsZW5ndGgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoaW5wdXRTdHJpbmcpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoIWlzU2xhc2gpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3Vy
bC5tX3BhdGhBZnRlckxhc3RTbGFzaCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwpAQCAtMTEzNiw3
ICsxMTQ0LDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAg
ICAgICAgICAgTE9HX1NUQVRFKCJIb3N0Iik7CiAgICAgICAgICAgICBpZiAoKmMgPT0gJy8nIHx8
ICpjID09ICc/JyB8fCAqYyA9PSAnIycpIHsKICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlSG9z
dChDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPihhdXRob3JpdHlPckhvc3RCZWdpbiwg
YykpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoaW5wdXRTdHJpbmcpOwogICAgICAg
ICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlBhdGg7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CkBAIC0xMjY2LDcgKzEyNzQsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShj
b25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlSG9zdChDb2RlUG9pbnRJdGVyYXRv
cjxDaGFyYWN0ZXJUeXBlPihhdXRob3JpdHlPckhvc3RCZWdpbiwgYykpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhaWx1cmUoaW5wdXRTdHJpbmcpOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmIChTdHJpbmdWaWV3KG1fYXNjaWlCdWZmZXIuZGF0YSgpICsgbV91cmwubV9w
YXNzd29yZEVuZCwgbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSBtX3VybC5tX3Bhc3N3b3JkRW5kKSA9
PSAibG9jYWxob3N0IikgIHsKICAgICAgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5zaHJp
bmsobV91cmwubV9wYXNzd29yZEVuZCk7CkBAIC0xMzU2LDcgKzEzNjQsNyBAQCBVUkwgVVJMUGFy
c2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICBpZiAoaXNVVEY4RW5j
b2RpbmcpCiAgICAgICAgICAgICAgICAgdXRmOFBlcmNlbnRFbmNvZGVRdWVyeSgqYywgbV9hc2Np
aUJ1ZmZlcik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcXVlcnlCdWZmZXIu
YXBwZW5kKCpjKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRDb2RlUG9pbnQoKmMsIHF1ZXJ5QnVm
ZmVyKTsKICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IFN0YXRlOjpGcmFnbWVudDoKQEAgLTEzNjQsNyArMTM3Miw3IEBAIFVSTCBVUkxQYXJzZXI6OnBh
cnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgIGlmIChtX3VuaWNvZGVGcmFnbWVu
dEJ1ZmZlci5pc0VtcHR5KCkgJiYgaXNBU0NJSSgqYykpCiAgICAgICAgICAgICAgICAgbV9hc2Np
aUJ1ZmZlci5hcHBlbmQoKmMpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1f
dW5pY29kZUZyYWdtZW50QnVmZmVyLmFwcGVuZCgqYyk7CisgICAgICAgICAgICAgICAgYXBwZW5k
Q29kZVBvaW50KCpjLCBtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlcik7CiAgICAgICAgICAgICArK2M7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTM3NSwxMCArMTM4MywxMCBAQCBV
UkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgIExPR19GSU5B
TF9TVEFURSgiU2NoZW1lU3RhcnQiKTsKICAgICAgICAgaWYgKCFtX2FzY2lpQnVmZmVyLnNpemUo
KSAmJiAhYmFzZS5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVybiBiYXNlOwotICAgICAgICBy
ZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGZhaWx1cmUoaW5w
dXRTdHJpbmcpOwogICAgIGNhc2UgU3RhdGU6OlNjaGVtZToKICAgICAgICAgTE9HX0ZJTkFMX1NU
QVRFKCJTY2hlbWUiKTsKLSAgICAgICAgcmV0dXJuIGZhaWx1cmUoaW5wdXQsIGxlbmd0aCk7Cisg
ICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0U3RyaW5nKTsKICAgICBjYXNlIFN0YXRlOjpOb1Nj
aGVtZToKICAgICAgICAgTE9HX0ZJTkFMX1NUQVRFKCJOb1NjaGVtZSIpOwogICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTQyMCw3ICsxNDI4LDcgQEAgVVJMIFVSTFBh
cnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICBicmVhazsKICAgICBjYXNl
IFN0YXRlOjpTcGVjaWFsQXV0aG9yaXR5SWdub3JlU2xhc2hlczoKICAgICAgICAgTE9HX0ZJTkFM
X1NUQVRFKCJTcGVjaWFsQXV0aG9yaXR5SWdub3JlU2xhc2hlcyIpOwotICAgICAgICByZXR1cm4g
ZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGZhaWx1cmUoaW5wdXRTdHJp
bmcpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFN0YXRlOjpBdXRob3JpdHlPckhvc3Q6CiAg
ICAgICAgIExPR19GSU5BTF9TVEFURSgiQXV0aG9yaXR5T3JIb3N0Iik7CkBAIC0xNDMxLDcgKzE0
MzksNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAg
IGlmIChzdGF0ZSA9PSBTdGF0ZTo6SG9zdCkKICAgICAgICAgICAgIExPR19GSU5BTF9TVEFURSgi
SG9zdCIpOwogICAgICAgICBpZiAoIXBhcnNlSG9zdChhdXRob3JpdHlPckhvc3RCZWdpbikpCi0g
ICAgICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWlsdXJlKGlucHV0U3RyaW5nKTsKICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQo
Jy8nKTsKICAgICAgICAgbV91cmwubV9wYXRoRW5kID0gbV91cmwubV9wb3J0RW5kICsgMTsKICAg
ICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBtX3VybC5tX3BhdGhFbmQ7CkBAIC0x
NDg1LDcgKzE0OTMsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBl
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIXBhcnNlSG9zdChDb2RlUG9pbnRJdGVyYXRvcjxD
aGFyYWN0ZXJUeXBlPihhdXRob3JpdHlPckhvc3RCZWdpbiwgYykpKQotICAgICAgICAgICAgcmV0
dXJuIGZhaWx1cmUoaW5wdXQsIGxlbmd0aCk7CisgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShp
bnB1dFN0cmluZyk7CiAKICAgICAgICAgaWYgKFN0cmluZ1ZpZXcobV9hc2NpaUJ1ZmZlci5kYXRh
KCkgKyBtX3VybC5tX3Bhc3N3b3JkRW5kLCBtX2FzY2lpQnVmZmVyLnNpemUoKSAtIG1fdXJsLm1f
cGFzc3dvcmRFbmQpID09ICJsb2NhbGhvc3QiKSAgewogICAgICAgICAgICAgbV9hc2NpaUJ1ZmZl
ci5zaHJpbmsobV91cmwubV9wYXNzd29yZEVuZCk7CkBAIC0xNTMwLDE2ICsxNTM4LDE3IEBAIFVS
TCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgLy8gRklYTUU6
IFN0cmluZzo6YWRvcHQgc2hvdWxkIHJlcXVpcmUgYSBXVEZNb3ZlLgogICAgICAgICBtX3VybC5t
X3N0cmluZyA9IFN0cmluZzo6YWRvcHQobV9hc2NpaUJ1ZmZlcik7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgICAgICBidWlsZGVyLnJlc2VydmVDYXBh
Y2l0eShtX2FzY2lpQnVmZmVyLnNpemUoKSArIG1fdW5pY29kZUZyYWdtZW50QnVmZmVyLnNpemUo
KSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1fYXNjaWlCdWZmZXIuZGF0YSgpLCBtX2FzY2lp
QnVmZmVyLnNpemUoKSk7CisgICAgICAgIFZlY3RvcjxVQ2hhciwgZGVmYXVsdElubGluZUJ1ZmZl
clNpemU+IGJ1ZmZlcjsKKyAgICAgICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9h
c2NpaUJ1ZmZlci5zaXplKCkgKyBtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlci5zaXplKCkpOworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICBidWZmZXIudW5jaGVja2VkQXBwZW5kKG1fYXNjaWlCdWZmZXJbaV0pOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW5pY29kZUZyYWdtZW50QnVmZmVyLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobV91bmljb2RlRnJhZ21lbnRCdWZm
ZXJbaV0pOwotICAgICAgICBtX3VybC5tX3N0cmluZyA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAg
ICAgICAgICAgIGJ1ZmZlci51bmNoZWNrZWRBcHBlbmQobV91bmljb2RlRnJhZ21lbnRCdWZmZXJb
aV0pOworICAgICAgICBtX3VybC5tX3N0cmluZyA9IFN0cmluZzo6YWRvcHQoYnVmZmVyKTsKICAg
ICB9CiAgICAgbV91cmwubV9pc1ZhbGlkID0gdHJ1ZTsKICAgICBMT0coVVJMUGFyc2VyLCAiUGFy
c2VkIFVSTCA8JXM+IiwgbV91cmwubV9zdHJpbmcudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJu
IG1fdXJsOworICAgIHJldHVybiBXVEZNb3ZlKG1fdXJsKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KQEAgLTE4NTcsMjUgKzE4NjYsMjUgQEAgaW5saW5lIHN0YXRpYyBP
cHRpb25hbDxzdGQ6OmFycmF5PHVpbnQxNgogICAgIHJldHVybiBhZGRyZXNzOwogfQogCi0vLyBG
SVhNRTogVGhpcyBzaG91bGQgcmV0dXJuIGEgQ1N0cmluZy4KLWlubGluZSBzdGF0aWMgU3RyaW5n
IHBlcmNlbnREZWNvZGUoY29uc3QgTENoYXIqIGlucHV0LCBzaXplX3QgbGVuZ3RoKQoraW5saW5l
IHN0YXRpYyBWZWN0b3I8TENoYXIsIGRlZmF1bHRJbmxpbmVCdWZmZXJTaXplPiBwZXJjZW50RGVj
b2RlKGNvbnN0IExDaGFyKiBpbnB1dCwgc2l6ZV90IGxlbmd0aCkKIHsKLSAgICBTdHJpbmdCdWls
ZGVyIG91dHB1dDsKKyAgICBWZWN0b3I8TENoYXIsIGRlZmF1bHRJbmxpbmVCdWZmZXJTaXplPiBv
dXRwdXQ7CisgICAgb3V0cHV0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKICAgICAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIHVpbnQ4
X3QgYnl0ZSA9IGlucHV0W2ldOwogICAgICAgICBpZiAoYnl0ZSAhPSAnJScpCi0gICAgICAgICAg
ICBvdXRwdXQuYXBwZW5kKGJ5dGUpOworICAgICAgICAgICAgb3V0cHV0LnVuY2hlY2tlZEFwcGVu
ZChieXRlKTsKICAgICAgICAgZWxzZSBpZiAoaSA8IGxlbmd0aCAtIDIpIHsKICAgICAgICAgICAg
IGlmIChpc0FTQ0lJSGV4RGlnaXQoaW5wdXRbaSArIDFdKSAmJiBpc0FTQ0lJSGV4RGlnaXQoaW5w
dXRbaSArIDJdKSkgewotICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQodG9BU0NJSUhleFZh
bHVlKGlucHV0W2kgKyAxXSwgaW5wdXRbaSArIDJdKSk7CisgICAgICAgICAgICAgICAgb3V0cHV0
LnVuY2hlY2tlZEFwcGVuZCh0b0FTQ0lJSGV4VmFsdWUoaW5wdXRbaSArIDFdLCBpbnB1dFtpICsg
Ml0pKTsKICAgICAgICAgICAgICAgICBpICs9IDI7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGJ5dGUpOworICAgICAgICAgICAgICAgIG91dHB1dC51
bmNoZWNrZWRBcHBlbmQoYnl0ZSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgb3V0cHV0
LmFwcGVuZChieXRlKTsKKyAgICAgICAgICAgIG91dHB1dC51bmNoZWNrZWRBcHBlbmQoYnl0ZSk7
CiAgICAgfQotICAgIHJldHVybiBvdXRwdXQudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCk7Cisg
ICAgcmV0dXJuIG91dHB1dDsKIH0KIAogaW5saW5lIHN0YXRpYyBib29sIGNvbnRhaW5zT25seUFT
Q0lJKGNvbnN0IFN0cmluZyYgc3RyaW5nKQpAQCAtMTg4NSw0NSArMTg5NCw0OSBAQCBpbmxpbmUg
c3RhdGljIGJvb2wgY29udGFpbnNPbmx5QVNDSUkoY29uCiAgICAgcmV0dXJuIGNoYXJhY3RlcnNB
cmVBbGxBU0NJSShzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSk7CiB9CiAK
LWlubGluZSBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBkb21haW5Ub0FTQ0lJKGNvbnN0IFN0cmlu
ZyYgZG9tYWluKQoraW5saW5lIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8TENoYXIsIGRlZmF1bHRJ
bmxpbmVCdWZmZXJTaXplPj4gZG9tYWluVG9BU0NJSShjb25zdCBTdHJpbmcmIGRvbWFpbikKIHsK
LSAgICBjb25zdCB1bnNpZ25lZCBob3N0bmFtZUJ1ZmZlckxlbmd0aCA9IDIwNDg7Ci0KICAgICBp
ZiAoY29udGFpbnNPbmx5QVNDSUkoZG9tYWluKSkgewotICAgICAgICBpZiAoZG9tYWluLmlzOEJp
dCgpKQotICAgICAgICAgICAgcmV0dXJuIGRvbWFpbi5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgp
OwotICAgICAgICBWZWN0b3I8TENoYXIsIGhvc3RuYW1lQnVmZmVyTGVuZ3RoPiBidWZmZXI7Cisg
ICAgICAgIGlmIChkb21haW4uaXM4Qml0KCkpIHsKKyAgICAgICAgICAgIFZlY3RvcjxMQ2hhciwg
ZGVmYXVsdElubGluZUJ1ZmZlclNpemU+IGFzY2lpOworICAgICAgICAgICAgYXNjaWkucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShkb21haW4ubGVuZ3RoKCkpOworICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBkb21haW4ubGVuZ3RoKCk7IGkrKykKKyAgICAgICAgICAgICAgICBhc2Np
aS51bmNoZWNrZWRBcHBlbmQodG9BU0NJSUxvd2VyKGRvbWFpbi5jaGFyYWN0ZXJzOCgpW2ldKSk7
CisgICAgICAgICAgICByZXR1cm4gYXNjaWk7CisgICAgICAgIH0KKyAgICAgICAgVmVjdG9yPExD
aGFyLCBkZWZhdWx0SW5saW5lQnVmZmVyU2l6ZT4gYXNjaWk7CiAgICAgICAgIHNpemVfdCBsZW5n
dGggPSBkb21haW4ubGVuZ3RoKCk7Ci0gICAgICAgIGJ1ZmZlci5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGxlbmd0aCk7CisgICAgICAgIGFzY2lpLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3Ro
KTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAg
ICAgIGJ1ZmZlci5hcHBlbmQodG9BU0NJSUxvd2VyKGRvbWFpbltpXSkpOwotICAgICAgICByZXR1
cm4gU3RyaW5nKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCk7CisgICAgICAgICAgICBhc2NpaS51bmNo
ZWNrZWRBcHBlbmQodG9BU0NJSUxvd2VyKGRvbWFpbi5jaGFyYWN0ZXJzMTYoKVtpXSkpOworICAg
ICAgICByZXR1cm4gYXNjaWk7CiAgICAgfQogICAgIAotICAgIFVDaGFyIGhvc3RuYW1lQnVmZmVy
W2hvc3RuYW1lQnVmZmVyTGVuZ3RoXTsKKyAgICBVQ2hhciBob3N0bmFtZUJ1ZmZlcltkZWZhdWx0
SW5saW5lQnVmZmVyU2l6ZV07CiAgICAgVUVycm9yQ29kZSBlcnJvciA9IFVfWkVST19FUlJPUjsK
ICAgICAKLSAgICBpbnQzMl90IG51bUNoYXJhY3RlcnNDb252ZXJ0ZWQgPSB1aWRuYV9JRE5Ub0FT
Q0lJKFN0cmluZ1ZpZXcoZG9tYWluKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKSwgZG9tYWluLmxl
bmd0aCgpLCBob3N0bmFtZUJ1ZmZlciwgaG9zdG5hbWVCdWZmZXJMZW5ndGgsIFVJRE5BX0FMTE9X
X1VOQVNTSUdORUQsIG51bGxwdHIsICZlcnJvcik7CisgICAgaW50MzJfdCBudW1DaGFyYWN0ZXJz
Q29udmVydGVkID0gdWlkbmFfSUROVG9BU0NJSShTdHJpbmdWaWV3KGRvbWFpbikudXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCksIGRvbWFpbi5sZW5ndGgoKSwgaG9zdG5hbWVCdWZmZXIsIGRlZmF1bHRJ
bmxpbmVCdWZmZXJTaXplLCBVSUROQV9BTExPV19VTkFTU0lHTkVELCBudWxscHRyLCAmZXJyb3Ip
OworICAgIEFTU0VSVChudW1DaGFyYWN0ZXJzQ29udmVydGVkIDw9IHN0YXRpY19jYXN0PGludDMy
X3Q+KGRlZmF1bHRJbmxpbmVCdWZmZXJTaXplKSk7CiAKICAgICBpZiAoZXJyb3IgPT0gVV9aRVJP
X0VSUk9SKSB7Ci0gICAgICAgIExDaGFyIGJ1ZmZlcltob3N0bmFtZUJ1ZmZlckxlbmd0aF07Cisg
ICAgICAgIFZlY3RvcjxMQ2hhciwgZGVmYXVsdElubGluZUJ1ZmZlclNpemU+IGFzY2lpOworICAg
ICAgICBhc2NpaS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bUNoYXJhY3RlcnNDb252ZXJ0ZWQp
OwogICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBudW1DaGFyYWN0ZXJzQ29udmVydGVk
OyArK2kpIHsKICAgICAgICAgICAgIEFTU0VSVChpc0FTQ0lJKGhvc3RuYW1lQnVmZmVyW2ldKSk7
Ci0gICAgICAgICAgICBidWZmZXJbaV0gPSBob3N0bmFtZUJ1ZmZlcltpXTsKKyAgICAgICAgICAg
IEFTU0VSVCghaXNBU0NJSVVwcGVyKGhvc3RuYW1lQnVmZmVyW2ldKSk7CisgICAgICAgICAgICBh
c2NpaS51bmNoZWNrZWRBcHBlbmQoaG9zdG5hbWVCdWZmZXJbaV0pOwogICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBTdHJpbmcoYnVmZmVyLCBudW1DaGFyYWN0ZXJzQ29udmVydGVkKTsKKyAgICAg
ICAgcmV0dXJuIGFzY2lpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBDaGVjayBmb3IgVV9CVUZG
RVJfT1ZFUkZMT1dfRVJST1IgYW5kIHJldHJ5IHdpdGggYW4gYWxsb2NhdGVkIGJ1ZmZlci4KICAg
ICByZXR1cm4gTnVsbG9wdDsKIH0KIAotaW5saW5lIHN0YXRpYyBib29sIGhhc0ludmFsaWREb21h
aW5DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiBhc2NpaURvbWFpbikKK2lubGluZSBzdGF0aWMgYm9v
bCBoYXNJbnZhbGlkRG9tYWluQ2hhcmFjdGVyKGNvbnN0IFZlY3RvcjxMQ2hhciwgZGVmYXVsdElu
bGluZUJ1ZmZlclNpemU+JiBhc2NpaURvbWFpbikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChhc2Np
aURvbWFpbi5pczhCaXQoKSk7Ci0gICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMgPSBhc2NpaURv
bWFpbi5jaGFyYWN0ZXJzOCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXNjaWlEb21h
aW4ubGVuZ3RoKCk7ICsraSkgewotICAgICAgICBpZiAoaXNJbnZhbGlkRG9tYWluQ2hhcmFjdGVy
KGNoYXJhY3RlcnNbaV0pKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXNjaWlEb21haW4u
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGlzSW52YWxpZERvbWFpbkNoYXJhY3Rlcihhc2Np
aURvbWFpbltpXSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMjAyMCw5ICsyMDMzLDggQEAgYm9vbCBVUkxQYXJzZXI6OnBhcnNlSG9zdChD
b2RlUG9pbnRJdGVyYQogICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2FzY2lpQnVmZmVyLnNp
emUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotCi0gICAgLy8gRklYTUU6IFdlIHBy
b2JhYmx5IGRvbid0IG5lZWQgdG8gbWFrZSBzbyBtYW55IGJ1ZmZlcnMgYW5kIFN0cmluZyBjb3Bp
ZXMuCi0gICAgU3RyaW5nQnVpbGRlciB1dGY4RW5jb2RlZDsKKyAgICAKKyAgICBWZWN0b3I8TENo
YXIsIGRlZmF1bHRJbmxpbmVCdWZmZXJTaXplPiB1dGY4RW5jb2RlZDsKICAgICBmb3IgKDsgIWl0
ZXJhdG9yLmF0RW5kKCk7ICsraXRlcmF0b3IpIHsKICAgICAgICAgaWYgKGlzVGFiT3JOZXdsaW5l
KCppdGVyYXRvcikpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTIwMzYsMTggKzIwNDgsMTUg
QEAgYm9vbCBVUkxQYXJzZXI6OnBhcnNlSG9zdChDb2RlUG9pbnRJdGVyYQogICAgICAgICAvLyBG
SVhNRTogQ2hlY2sgZXJyb3IuCiAgICAgICAgIHV0ZjhFbmNvZGVkLmFwcGVuZChidWZmZXIsIG9m
ZnNldCk7CiAgICAgfQotICAgIFJFTEVBU0VfQVNTRVJUKHV0ZjhFbmNvZGVkLmlzOEJpdCgpKTsK
LSAgICBTdHJpbmcgcGVyY2VudERlY29kZWQgPSBwZXJjZW50RGVjb2RlKHV0ZjhFbmNvZGVkLmNo
YXJhY3RlcnM4KCksIHV0ZjhFbmNvZGVkLmxlbmd0aCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChw
ZXJjZW50RGVjb2RlZC5pczhCaXQoKSk7Ci0gICAgU3RyaW5nIGRvbWFpbiA9IFN0cmluZzo6ZnJv
bVVURjgocGVyY2VudERlY29kZWQuY2hhcmFjdGVyczgoKSwgcGVyY2VudERlY29kZWQubGVuZ3Ro
KCkpOworICAgIFZlY3RvcjxMQ2hhciwgZGVmYXVsdElubGluZUJ1ZmZlclNpemU+IHBlcmNlbnRE
ZWNvZGVkID0gcGVyY2VudERlY29kZSh1dGY4RW5jb2RlZC5kYXRhKCksIHV0ZjhFbmNvZGVkLnNp
emUoKSk7CisgICAgU3RyaW5nIGRvbWFpbiA9IFN0cmluZzo6ZnJvbVVURjgocGVyY2VudERlY29k
ZWQuZGF0YSgpLCBwZXJjZW50RGVjb2RlZC5zaXplKCkpOwogICAgIGF1dG8gYXNjaWlEb21haW4g
PSBkb21haW5Ub0FTQ0lJKGRvbWFpbik7CiAgICAgaWYgKCFhc2NpaURvbWFpbiB8fCBoYXNJbnZh
bGlkRG9tYWluQ2hhcmFjdGVyKGFzY2lpRG9tYWluLnZhbHVlKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgU3RyaW5nJiBhc2NpaURvbWFpblZhbHVlID0gYXNjaWlEb21haW4udmFsdWUo
KTsKLSAgICBSRUxFQVNFX0FTU0VSVChhc2NpaURvbWFpblZhbHVlLmlzOEJpdCgpKTsKLSAgICBj
b25zdCBMQ2hhciogYXNjaWlEb21haW5DaGFyYWN0ZXJzID0gYXNjaWlEb21haW5WYWx1ZS5jaGFy
YWN0ZXJzOCgpOworICAgIFZlY3RvcjxMQ2hhciwgZGVmYXVsdElubGluZUJ1ZmZlclNpemU+JiBh
c2NpaURvbWFpblZhbHVlID0gYXNjaWlEb21haW4udmFsdWUoKTsKKyAgICBjb25zdCBMQ2hhciog
YXNjaWlEb21haW5DaGFyYWN0ZXJzID0gYXNjaWlEb21haW5WYWx1ZS5kYXRhKCk7CiAKLSAgICBp
ZiAoYXV0byBhZGRyZXNzID0gcGFyc2VJUHY0SG9zdChDb2RlUG9pbnRJdGVyYXRvcjxMQ2hhcj4o
YXNjaWlEb21haW5DaGFyYWN0ZXJzLCBhc2NpaURvbWFpbkNoYXJhY3RlcnMgKyBhc2NpaURvbWFp
blZhbHVlLmxlbmd0aCgpKSkpIHsKKyAgICBpZiAoYXV0byBhZGRyZXNzID0gcGFyc2VJUHY0SG9z
dChDb2RlUG9pbnRJdGVyYXRvcjxMQ2hhcj4oYXNjaWlEb21haW5WYWx1ZS5iZWdpbigpLCBhc2Np
aURvbWFpblZhbHVlLmVuZCgpKSkpIHsKICAgICAgICAgc2VyaWFsaXplSVB2NChhZGRyZXNzLnZh
bHVlKCksIG1fYXNjaWlCdWZmZXIpOwogICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2FzY2lp
QnVmZmVyLnNpemUoKTsKICAgICAgICAgaWYgKGl0ZXJhdG9yLmF0RW5kKCkpIHsKQEAgLTIwNTgs
NyArMjA2Nyw3IEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJzZUhvc3QoQ29kZVBvaW50SXRlcmEKICAg
ICAgICAgcmV0dXJuIHBhcnNlUG9ydChpdGVyYXRvcik7CiAgICAgfQogCi0gICAgbV9hc2NpaUJ1
ZmZlci5hcHBlbmQoYXNjaWlEb21haW5DaGFyYWN0ZXJzLCBhc2NpaURvbWFpblZhbHVlLmxlbmd0
aCgpKTsKKyAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZChhc2NpaURvbWFpbkNoYXJhY3RlcnMsIGFz
Y2lpRG9tYWluVmFsdWUuc2l6ZSgpKTsKICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2FzY2lpQnVm
ZmVyLnNpemUoKTsKICAgICBpZiAoIWl0ZXJhdG9yLmF0RW5kKCkpIHsKICAgICAgICAgQVNTRVJU
KCppdGVyYXRvciA9PSAnOicpOwpAQCAtMjA3Nyw4ICsyMDg2LDcgQEAgaW5saW5lIHN0YXRpYyBP
cHRpb25hbDxTdHJpbmc+IGZvcm1VUkxEZQogICAgIGlmICh1dGY4LmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHBlcmNlbnREZWNvZGVkID0gcGVyY2VudERlY29k
ZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4odXRmOC5kYXRhKCkpLCB1dGY4Lmxlbmd0
aCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChwZXJjZW50RGVjb2RlZC5pczhCaXQoKSk7Ci0gICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgocGVyY2VudERlY29kZWQuY2hhcmFjdGVyczgoKSwgcGVy
Y2VudERlY29kZWQubGVuZ3RoKCkpOworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHBlcmNl
bnREZWNvZGVkLmRhdGEoKSwgcGVyY2VudERlY29kZWQuc2l6ZSgpKTsKIH0KIAogYXV0byBVUkxQ
YXJzZXI6OnBhcnNlVVJMRW5jb2RlZEZvcm0oU3RyaW5nVmlldyBpbnB1dCkgLT4gVVJMRW5jb2Rl
ZEZvcm0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCShyZXZpc2lvbiAyMDYw
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUg
IlVSTC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ5LDE1ICs0OCwxNSBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFVSTCBtX3VybDsKICAgICBWZWN0b3I8TENoYXI+IG1f
YXNjaWlCdWZmZXI7Ci0gICAgVmVjdG9yPFVDaGFyMzI+IG1fdW5pY29kZUZyYWdtZW50QnVmZmVy
OworICAgIFZlY3RvcjxVQ2hhcj4gbV91bmljb2RlRnJhZ21lbnRCdWZmZXI7CiAgICAgYm9vbCBt
X3VybElzU3BlY2lhbCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hvc3RIYXNQZXJjZW50T3JOb25B
U0NJSSB7IGZhbHNlIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBV
UkwgcGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZSosIGNvbnN0IHVuc2lnbmVkIGxlbmd0aCwgY29u
c3QgVVJMJiwgY29uc3QgVGV4dEVuY29kaW5nJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gVVJMIHBhcnNlKGNvbnN0IFN0cmluZyYsIGNvbnN0IENoYXJhY3RlclR5cGUq
LCBjb25zdCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFVSTCYsIGNvbnN0IFRleHRFbmNvZGluZyYp
OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgcGFyc2VBdXRob3Jp
dHkoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4pOwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJh
Y3RlclR5cGU+KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBh
cnNlUG9ydChDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiYpOwotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IFVSTCBmYWlsdXJlKGNvbnN0IENoYXJhY3RlclR5cGUq
LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIFVSTCBmYWlsdXJlKGNvbnN0IFN0cmluZyYpOwogCiAg
ICAgZW51bSBjbGFzcyBVUkxQYXJ0OwogICAgIHZvaWQgY29weVVSTFBhcnRzVW50aWwoY29uc3Qg
VVJMJiBiYXNlLCBVUkxQYXJ0KTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjEyMSkKKysrIFRvb2xzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE2LTA5LTE5ICBBbGV4IENocmlzdGVu
c2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVkdWNlIGFsbG9jYXRp
b25zIGluIFVSTFBhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYyMjQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2VyLmNwcDoKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpj
aGVja1VSTCk6CisKIDIwMTYtMDktMTkgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29t
PgogCiAgICAgICAgIFJlbW92ZSBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKSBhdXRvbWF0aWMgdGV4
dCBzaXplIGFkanVzdG1lbnQgY29kZQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL1VSTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL1VSTFBhcnNlci5jcHAJKHJldmlzaW9uIDIwNjA3NSkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9V
UkxQYXJzZXIuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQz
LDcgKzQ0LDcgQEAgc3RydWN0IEV4cGVjdGVkUGFydHMgewogICAgIFN0cmluZyB1c2VyOwogICAg
IFN0cmluZyBwYXNzd29yZDsKICAgICBTdHJpbmcgaG9zdDsKLSAgICB1bnNpZ25lZCBzaG9ydCBw
b3J0OworICAgIHVuc2lnbmVkIHNob3J0IHBvcnQgeyAwIH07CiAgICAgU3RyaW5nIHBhdGg7CiAg
ICAgU3RyaW5nIHF1ZXJ5OwogICAgIFN0cmluZyBmcmFnbWVudDsKQEAgLTQ3MSw2ICs0NzIsOSBA
QCBURVNUX0YoVVJMUGFyc2VyVGVzdCwgUGFyc2VyRGlmZmVyZW5jZXMpCiAgICAgY2hlY2tVUkxE
aWZmZXJlbmNlcygiaHR0cDoiLAogICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICIiLCAwLCAiIiwg
IiIsICIiLCAiaHR0cDoifSwKICAgICAgICAgeyJodHRwIiwgIiIsICIiLCAiIiwgMCwgIi8iLCAi
IiwgIiIsICJodHRwOi8ifSk7CisgICAgY2hlY2tVUkxEaWZmZXJlbmNlcyh3aWRlU3RyaW5nKEwi
aHR0cDovL2hvc3Q/w5/wn5iNI8Of8J+YjSIpLAorICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICJo
b3N0IiwgMCwgIi8iLCAiJUMzJTlGJUYwJTlGJTk4JThEIiwgd2lkZVN0cmluZyhMIsOf8J+YjSIp
LCB3aWRlU3RyaW5nKEwiaHR0cDovL2hvc3QvPyVDMyU5RiVGMCU5RiU5OCU4RCPDn/CfmI0iKX0s
CisgICAgICAgIHsiaHR0cCIsICIiLCAiIiwgImhvc3QiLCAwLCAiLyIsICIlQzMlOUYlRjAlOUYl
OTglOEQiLCAiJUMzJTlGJUYwJTlGJTk4JThEIiwgImh0dHA6Ly9ob3N0Lz8lQzMlOUYlRjAlOUYl
OTglOEQjJUMzJTlGJUYwJTlGJTk4JThEIn0pOwogICAgIAogICAgIC8vIFRoaXMgYmVoYXZpb3Ig
bWF0Y2hlcyBDaHJvbWUgYW5kIEZpcmVmb3gsIGJ1dCBub3QgV2ViS2l0IHVzaW5nIFVSTDo6cGFy
c2UuCiAgICAgLy8gVGhlIGJlaGF2aW9yIG9mIFVSTDo6cGFyc2UgaXMgY2xlYXJseSB3cm9uZyBi
ZWNhdXNlIHJlcGFyc2luZyBmaWxlOi8vcGF0aCB3b3VsZCBtYWtlIHBhdGggdGhlIGhvc3QuCkBA
IC02NTIsNCArNjU2LDI1IEBAIFRFU1RfRihVUkxQYXJzZXJUZXN0LCBBZGRpdGlvbmFsVGVzdHMp
CiAgICAgY2hlY2tSZWxhdGl2ZVVSTCgibm90c3BlY2lhbDoiLCAiaHR0cDovL2V4YW1wbGUub3Jn
L2Zvby9iYXIiLCB7Im5vdHNwZWNpYWwiLCAiIiwgIiIsICIiLCAwLCAiIiwgIiIsICIiLCAibm90
c3BlY2lhbDoifSk7CiB9CiAKK3N0YXRpYyB2b2lkIGNoZWNrVVJMKGNvbnN0IFN0cmluZyYgdXJs
U3RyaW5nLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBjb25zdCBFeHBlY3RlZFBhcnRz
JiBwYXJ0cykKK3sKKyAgICBVUkxQYXJzZXIgcGFyc2VyOworICAgIGF1dG8gdXJsID0gcGFyc2Vy
LnBhcnNlKHVybFN0cmluZywgeyB9LCBlbmNvZGluZyk7CisgICAgRVhQRUNUX1RSVUUoZXEocGFy
dHMucHJvdG9jb2wsIHVybC5wcm90b2NvbCgpKSk7CisgICAgRVhQRUNUX1RSVUUoZXEocGFydHMu
dXNlciwgdXJsLnVzZXIoKSkpOworICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLnBhc3N3b3JkLCB1
cmwucGFzcygpKSk7CisgICAgRVhQRUNUX1RSVUUoZXEocGFydHMuaG9zdCwgdXJsLmhvc3QoKSkp
OworICAgIEVYUEVDVF9FUShwYXJ0cy5wb3J0LCB1cmwucG9ydCgpKTsKKyAgICBFWFBFQ1RfVFJV
RShlcShwYXJ0cy5wYXRoLCB1cmwucGF0aCgpKSk7CisgICAgRVhQRUNUX1RSVUUoZXEocGFydHMu
cXVlcnksIHVybC5xdWVyeSgpKSk7CisgICAgRVhQRUNUX1RSVUUoZXEocGFydHMuZnJhZ21lbnQs
IHVybC5mcmFnbWVudElkZW50aWZpZXIoKSkpOworICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLnN0
cmluZywgdXJsLnN0cmluZygpKSk7Cit9CisKK1RFU1RfRihVUkxQYXJzZXJUZXN0LCBRdWVyeUVu
Y29kaW5nKQoreworICAgIGNoZWNrVVJMKHdpZGVTdHJpbmcoTCJodHRwOi8vaG9zdD/Dn/CfmI0j
w5/wn5iNIiksIFVURjhFbmNvZGluZygpLCB7Imh0dHAiLCAiIiwgIiIsICJob3N0IiwgMCwgIi8i
LCAiJUMzJTlGJUYwJTlGJTk4JThEIiwgd2lkZVN0cmluZyhMIsOf8J+YjSIpLCB3aWRlU3RyaW5n
KEwiaHR0cDovL2hvc3QvPyVDMyU5RiVGMCU5RiU5OCU4RCPDn/CfmI0iKX0pOworICAgIC8vIEZJ
WE1FOiBBZGQgdGVzdHMgd2l0aCBvdGhlciBlbmNvZGluZ3MuCit9CisKIH0gLy8gbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289280</attachid>
            <date>2016-09-19 16:40:23 -0700</date>
            <delta_ts>2016-09-20 14:51:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162241-20160919163737.patch</filename>
            <type>text/plain</type>
            <size>16514</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjEyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE2LTA5LTE5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVkdWNlIGFs
bG9jYXRpb25zIGluIFVSTFBhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYyMjQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXNlIFZlY3RvcnMgaW5zdGVhZCBvZiBTdHJpbmdCdWlsZGVycy4gIFRo
aXMgYWxsb3dzIHVzIHRvIHVzZSB0aGUgaW5saW5lIGNhcGFjaXR5IG9uIHRoZSBzdGFjaworICAg
ICAgICBmb3Igc2hvcnQgVVJMcyAoPDJLQikgYW5kIGFsc28gYWxsb3dzIHVzIHRvIHNraXAgYnJh
bmNoZXMgYmVjYXVzZSB3ZSBrbm93IHdoZXRoZXIgdGhlCisgICAgICAgIGNvbnRhaW5lZCB0eXBl
IGlzIFVDaGFyIG9yIExDaGFyIGF0IGNvbXBpbGUgdGltZS4gIEl0IGFsc28gYWxsb3dzIHVzIHRv
IHVzZSB1bmNoZWNrZWRBcHBlbmQuCisKKyAgICAgICAgQWRkZWQgbmV3IEFQSSB0ZXN0cyBmb3Ig
cGFydHMgdGhhdCB3ZXJlIGxlc3MgdGVzdGVkLCBidXQgdGhlcmUgaXMKKyAgICAgICAgbm8gY2hh
bmdlIGluIGJlaGF2aW9yIGV4Y2VwdCBmb3IgYSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL1VSTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBl
bmRDb2RlUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlUXVlcnkpOgorICAgICAgICAo
V2ViQ29yZTo6VVJMUGFyc2VyOjpmYWlsdXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBhcnNl
cjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6cGVyY2VudERlY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpkb21haW5Ub0FTQ0lJKToKKyAgICAgICAgKFdlYkNvcmU6Omhhc0ludmFsaWREb21h
aW5DaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpwYXJzZUhvc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Zm9ybVVSTERlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjppc0Mw
Q29udHJvbCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vVVJMUGFyc2VyLmg6CisKIDIw
MTYtMDktMTkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBVUkxQYXJzZXIgY2FuIHJlYWQgbWVtb3J5IG91dCBvZiBib3VuZHMKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAkocmV2aXNpb24gMjA2MTI2KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
MTAgKzMwLDYgQEAKICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx1bmljb2RlL3VpZG5hLmg+
CiAjaW5jbHVkZSA8dW5pY29kZS91dHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtMTE1LDYgKzExMSwxNyBAQCBhdXRvIENvZGVQb2ludEl0ZXJhdG9y
PFVDaGFyPjo6b3BlcmF0b3IrCiAgICAgbV9iZWdpbiArPSBpOwogICAgIHJldHVybiAqdGhpczsK
IH0KKyAgICAKK3N0YXRpYyB2b2lkIGFwcGVuZENvZGVQb2ludChVQ2hhcjMyIGNvZGVQb2ludCwg
VmVjdG9yPFVDaGFyPiYgZGVzdGluYXRpb24pCit7CisgICAgaWYgKFVfSVNfQk1QKGNvZGVQb2lu
dCkpIHsKKyAgICAgICAgZGVzdGluYXRpb24uYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPihjb2Rl
UG9pbnQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkZXN0aW5hdGlvbi5yZXNlcnZl
Q2FwYWNpdHkoZGVzdGluYXRpb24uc2l6ZSgpICsgMik7CisgICAgZGVzdGluYXRpb24udW5jaGVj
a2VkQXBwZW5kKFUxNl9MRUFEKGNvZGVQb2ludCkpOworICAgIGRlc3RpbmF0aW9uLnVuY2hlY2tl
ZEFwcGVuZChVMTZfVFJBSUwoY29kZVBvaW50KSk7Cit9CiAKIGVudW0gVVJMQ2hhcmFjdGVyQ2xh
c3MgewogICAgIFVzZXJJbmZvID0gMHgxLApAQCAtNDgyLDEwICs0ODksMTAgQEAgaW5saW5lIHN0
YXRpYyB2b2lkIHV0ZjhQZXJjZW50RW5jb2RlUXVlcgogICAgIH0KIH0KICAgICAKLWlubGluZSBz
dGF0aWMgdm9pZCBlbmNvZGVRdWVyeShjb25zdCBTdHJpbmdCdWlsZGVyJiBzb3VyY2UsIFZlY3Rv
cjxMQ2hhcj4mIGRlc3RpbmF0aW9uLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQoraW5s
aW5lIHN0YXRpYyB2b2lkIGVuY29kZVF1ZXJ5KGNvbnN0IFZlY3RvcjxVQ2hhcj4mIHNvdXJjZSwg
VmVjdG9yPExDaGFyPiYgZGVzdGluYXRpb24sIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2Rpbmcp
CiB7CiAgICAgLy8gRklYTUU6IEl0IGlzIHVuY2xlYXIgaW4gdGhlIHNwZWMgd2hhdCB0byBkbyB3
aGVuIGVuY29kaW5nIGZhaWxzLiBUaGUgYmVoYXZpb3Igc2hvdWxkIGJlIHNwZWNpZmllZCBhbmQg
dGVzdGVkLgotICAgIENTdHJpbmcgZW5jb2RlZCA9IGVuY29kaW5nLmVuY29kZShzb3VyY2UudG9T
dHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCksIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxl
cyk7CisgICAgQ1N0cmluZyBlbmNvZGVkID0gZW5jb2RpbmcuZW5jb2RlKFN0cmluZ1ZpZXcoc291
cmNlLmRhdGEoKSwgc291cmNlLnNpemUoKSksIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2Rh
Ymxlcyk7CiAgICAgY29uc3QgY2hhciogZGF0YSA9IGVuY29kZWQuZGF0YSgpOwogICAgIHNpemVf
dCBsZW5ndGggPSBlbmNvZGVkLmxlbmd0aCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKQEAgLTg5OCw3ICs5MDUsNyBAQCB2b2lkIGluY3JlbWVudEl0ZXJhdG9y
U2tpcHBpbmdUYWJBbmROZXdMCiAgICAgd2hpbGUgKCFzZXJpYWxpemVkICYmICFpdGVyYXRvci5h
dEVuZCgpICYmIGlzVGFiT3JOZXdsaW5lKCppdGVyYXRvcikpCiAgICAgICAgICsraXRlcmF0b3I7
CiB9Ci0gICAgCisKIHRlbXBsYXRlPGJvb2wgc2VyaWFsaXplZCwgdHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUqIGlucHV0LCBj
b25zdCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFVSTCYgYmFzZSwgY29uc3QgVGV4dEVuY29kaW5n
JiBlbmNvZGluZykKIHsKQEAgLTkwOSw3ICs5MTYsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShj
b25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgbV9hc2NpaUJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHkobGVu
Z3RoKTsKICAgICAKICAgICBib29sIGlzVVRGOEVuY29kaW5nID0gZW5jb2RpbmcgPT0gVVRGOEVu
Y29kaW5nKCk7Ci0gICAgU3RyaW5nQnVpbGRlciBxdWVyeUJ1ZmZlcjsKKyAgICBWZWN0b3I8VUNo
YXI+IHF1ZXJ5QnVmZmVyOwogCiAgICAgdW5zaWduZWQgZW5kSW5kZXggPSBsZW5ndGg7CiAgICAg
d2hpbGUgKGVuZEluZGV4ICYmIGlzQzBDb250cm9sT3JTcGFjZShpbnB1dFtlbmRJbmRleCAtIDFd
KSkKQEAgLTEzNzcsNyArMTM4NCw3IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJh
Y3RlclR5cGUKICAgICAgICAgICAgIGlmIChpc1VURjhFbmNvZGluZykKICAgICAgICAgICAgICAg
ICB1dGY4UGVyY2VudEVuY29kZVF1ZXJ5PHNlcmlhbGl6ZWQ+KCpjLCBtX2FzY2lpQnVmZmVyKTsK
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBxdWVyeUJ1ZmZlci5hcHBlbmQoKmMp
OworICAgICAgICAgICAgICAgIGFwcGVuZENvZGVQb2ludCgqYywgcXVlcnlCdWZmZXIpOwogICAg
ICAgICAgICAgKytjOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3RhdGU6OkZy
YWdtZW50OgpAQCAtMTM4NSw3ICsxMzkyLDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3Qg
Q2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgaWYgKG1fdW5pY29kZUZyYWdtZW50QnVmZmVyLmlz
RW1wdHkoKSAmJiBpc0FTQ0lJKCpjKSkKICAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFw
cGVuZCgqYyk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV91bmljb2RlRnJh
Z21lbnRCdWZmZXIuYXBwZW5kKCpjKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRDb2RlUG9pbnQo
KmMsIG1fdW5pY29kZUZyYWdtZW50QnVmZmVyKTsKICAgICAgICAgICAgICsrYzsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xNTUxLDE2ICsxNTU4LDE1IEBAIFVSTCBVUkxQYXJz
ZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgLy8gRklYTUU6IFN0cmluZzo6
YWRvcHQgc2hvdWxkIHJlcXVpcmUgYSBXVEZNb3ZlLgogICAgICAgICBtX3VybC5tX3N0cmluZyA9
IFN0cmluZzo6YWRvcHQobV9hc2NpaUJ1ZmZlcik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyOwotICAgICAgICBidWlsZGVyLnJlc2VydmVDYXBhY2l0eShtX2Fz
Y2lpQnVmZmVyLnNpemUoKSArIG1fdW5pY29kZUZyYWdtZW50QnVmZmVyLnNpemUoKSk7Ci0gICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKG1fYXNjaWlCdWZmZXIuZGF0YSgpLCBtX2FzY2lpQnVmZmVyLnNp
emUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91bmljb2RlRnJhZ21lbnRC
dWZmZXIuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChtX3VuaWNvZGVG
cmFnbWVudEJ1ZmZlcltpXSk7Ci0gICAgICAgIG1fdXJsLm1fc3RyaW5nID0gYnVpbGRlci50b1N0
cmluZygpOworICAgICAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcjsKKyAgICAgICAgYnVmZmVyLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobV9hc2NpaUJ1ZmZlci5zaXplKCkgKyBtX3VuaWNvZGVGcmFn
bWVudEJ1ZmZlci5zaXplKCkpOworICAgICAgICBidWZmZXIuYXBwZW5kVmVjdG9yKG1fYXNjaWlC
dWZmZXIpOworICAgICAgICBidWZmZXIuYXBwZW5kVmVjdG9yKG1fdW5pY29kZUZyYWdtZW50QnVm
ZmVyKTsKKyAgICAgICAgbV91cmwubV9zdHJpbmcgPSBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7CiAg
ICAgfQogICAgIG1fdXJsLm1faXNWYWxpZCA9IHRydWU7CiAgICAgTE9HKFVSTFBhcnNlciwgIlBh
cnNlZCBVUkwgPCVzPiIsIG1fdXJsLm1fc3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVy
biBtX3VybDsKKyAgICByZXR1cm4gV1RGTW92ZShtX3VybCk7CiB9CiAKIHRlbXBsYXRlPGJvb2wg
c2VyaWFsaXplZCwgdHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KQEAgLTE4ODAsMjUgKzE4ODYsMjcg
QEAgaW5saW5lIHN0YXRpYyBPcHRpb25hbDxzdGQ6OmFycmF5PHVpbnQxNgogICAgIHJldHVybiBh
ZGRyZXNzOwogfQogCi0vLyBGSVhNRTogVGhpcyBzaG91bGQgcmV0dXJuIGEgQ1N0cmluZy4KLWlu
bGluZSBzdGF0aWMgU3RyaW5nIHBlcmNlbnREZWNvZGUoY29uc3QgTENoYXIqIGlucHV0LCBzaXpl
X3QgbGVuZ3RoKQorY29uc3Qgc2l6ZV90IGRlZmF1bHRJbmxpbmVCdWZmZXJTaXplID0gMjA0ODsK
KworaW5saW5lIHN0YXRpYyBWZWN0b3I8TENoYXIsIGRlZmF1bHRJbmxpbmVCdWZmZXJTaXplPiBw
ZXJjZW50RGVjb2RlKGNvbnN0IExDaGFyKiBpbnB1dCwgc2l6ZV90IGxlbmd0aCkKIHsKLSAgICBT
dHJpbmdCdWlsZGVyIG91dHB1dDsKKyAgICBWZWN0b3I8TENoYXIsIGRlZmF1bHRJbmxpbmVCdWZm
ZXJTaXplPiBvdXRwdXQ7CisgICAgb3V0cHV0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3Ro
KTsKICAgICAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAg
ICAgIHVpbnQ4X3QgYnl0ZSA9IGlucHV0W2ldOwogICAgICAgICBpZiAoYnl0ZSAhPSAnJScpCi0g
ICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGJ5dGUpOworICAgICAgICAgICAgb3V0cHV0LnVuY2hl
Y2tlZEFwcGVuZChieXRlKTsKICAgICAgICAgZWxzZSBpZiAoaSA8IGxlbmd0aCAtIDIpIHsKICAg
ICAgICAgICAgIGlmIChpc0FTQ0lJSGV4RGlnaXQoaW5wdXRbaSArIDFdKSAmJiBpc0FTQ0lJSGV4
RGlnaXQoaW5wdXRbaSArIDJdKSkgewotICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQodG9B
U0NJSUhleFZhbHVlKGlucHV0W2kgKyAxXSwgaW5wdXRbaSArIDJdKSk7CisgICAgICAgICAgICAg
ICAgb3V0cHV0LnVuY2hlY2tlZEFwcGVuZCh0b0FTQ0lJSGV4VmFsdWUoaW5wdXRbaSArIDFdLCBp
bnB1dFtpICsgMl0pKTsKICAgICAgICAgICAgICAgICBpICs9IDI7CiAgICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGJ5dGUpOworICAgICAgICAgICAgICAg
IG91dHB1dC51bmNoZWNrZWRBcHBlbmQoYnl0ZSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgb3V0cHV0LmFwcGVuZChieXRlKTsKKyAgICAgICAgICAgIG91dHB1dC51bmNoZWNrZWRBcHBl
bmQoYnl0ZSk7CiAgICAgfQotICAgIHJldHVybiBvdXRwdXQudG9TdHJpbmdQcmVzZXJ2ZUNhcGFj
aXR5KCk7CisgICAgcmV0dXJuIG91dHB1dDsKIH0KIAogaW5saW5lIHN0YXRpYyBib29sIGNvbnRh
aW5zT25seUFTQ0lJKGNvbnN0IFN0cmluZyYgc3RyaW5nKQpAQCAtMTkwOCw0NSArMTkxNiw0OSBA
QCBpbmxpbmUgc3RhdGljIGJvb2wgY29udGFpbnNPbmx5QVNDSUkoY29uCiAgICAgcmV0dXJuIGNo
YXJhY3RlcnNBcmVBbGxBU0NJSShzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgo
KSk7CiB9CiAKLWlubGluZSBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBkb21haW5Ub0FTQ0lJKGNv
bnN0IFN0cmluZyYgZG9tYWluKQoraW5saW5lIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8TENoYXIs
IGRlZmF1bHRJbmxpbmVCdWZmZXJTaXplPj4gZG9tYWluVG9BU0NJSShjb25zdCBTdHJpbmcmIGRv
bWFpbikKIHsKLSAgICBjb25zdCB1bnNpZ25lZCBob3N0bmFtZUJ1ZmZlckxlbmd0aCA9IDIwNDg7
Ci0KICAgICBpZiAoY29udGFpbnNPbmx5QVNDSUkoZG9tYWluKSkgewotICAgICAgICBpZiAoZG9t
YWluLmlzOEJpdCgpKQotICAgICAgICAgICAgcmV0dXJuIGRvbWFpbi5jb252ZXJ0VG9BU0NJSUxv
d2VyY2FzZSgpOwotICAgICAgICBWZWN0b3I8TENoYXIsIGhvc3RuYW1lQnVmZmVyTGVuZ3RoPiBi
dWZmZXI7CisgICAgICAgIGlmIChkb21haW4uaXM4Qml0KCkpIHsKKyAgICAgICAgICAgIFZlY3Rv
cjxMQ2hhciwgZGVmYXVsdElubGluZUJ1ZmZlclNpemU+IGFzY2lpOworICAgICAgICAgICAgYXNj
aWkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkb21haW4ubGVuZ3RoKCkpOworICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBkb21haW4ubGVuZ3RoKCk7IGkrKykKKyAgICAgICAgICAg
ICAgICBhc2NpaS51bmNoZWNrZWRBcHBlbmQodG9BU0NJSUxvd2VyKGRvbWFpbi5jaGFyYWN0ZXJz
OCgpW2ldKSk7CisgICAgICAgICAgICByZXR1cm4gYXNjaWk7CisgICAgICAgIH0KKyAgICAgICAg
VmVjdG9yPExDaGFyLCBkZWZhdWx0SW5saW5lQnVmZmVyU2l6ZT4gYXNjaWk7CiAgICAgICAgIHNp
emVfdCBsZW5ndGggPSBkb21haW4ubGVuZ3RoKCk7Ci0gICAgICAgIGJ1ZmZlci5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGxlbmd0aCk7CisgICAgICAgIGFzY2lpLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobGVuZ3RoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkK
LSAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQodG9BU0NJSUxvd2VyKGRvbWFpbltpXSkpOwotICAg
ICAgICByZXR1cm4gU3RyaW5nKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCk7CisgICAgICAgICAgICBh
c2NpaS51bmNoZWNrZWRBcHBlbmQodG9BU0NJSUxvd2VyKGRvbWFpbi5jaGFyYWN0ZXJzMTYoKVtp
XSkpOworICAgICAgICByZXR1cm4gYXNjaWk7CiAgICAgfQogICAgIAotICAgIFVDaGFyIGhvc3Ru
YW1lQnVmZmVyW2hvc3RuYW1lQnVmZmVyTGVuZ3RoXTsKKyAgICBVQ2hhciBob3N0bmFtZUJ1ZmZl
cltkZWZhdWx0SW5saW5lQnVmZmVyU2l6ZV07CiAgICAgVUVycm9yQ29kZSBlcnJvciA9IFVfWkVS
T19FUlJPUjsKICAgICAKLSAgICBpbnQzMl90IG51bUNoYXJhY3RlcnNDb252ZXJ0ZWQgPSB1aWRu
YV9JRE5Ub0FTQ0lJKFN0cmluZ1ZpZXcoZG9tYWluKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKSwg
ZG9tYWluLmxlbmd0aCgpLCBob3N0bmFtZUJ1ZmZlciwgaG9zdG5hbWVCdWZmZXJMZW5ndGgsIFVJ
RE5BX0FMTE9XX1VOQVNTSUdORUQsIG51bGxwdHIsICZlcnJvcik7CisgICAgaW50MzJfdCBudW1D
aGFyYWN0ZXJzQ29udmVydGVkID0gdWlkbmFfSUROVG9BU0NJSShTdHJpbmdWaWV3KGRvbWFpbiku
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCksIGRvbWFpbi5sZW5ndGgoKSwgaG9zdG5hbWVCdWZmZXIs
IGRlZmF1bHRJbmxpbmVCdWZmZXJTaXplLCBVSUROQV9BTExPV19VTkFTU0lHTkVELCBudWxscHRy
LCAmZXJyb3IpOworICAgIEFTU0VSVChudW1DaGFyYWN0ZXJzQ29udmVydGVkIDw9IHN0YXRpY19j
YXN0PGludDMyX3Q+KGRlZmF1bHRJbmxpbmVCdWZmZXJTaXplKSk7CiAKICAgICBpZiAoZXJyb3Ig
PT0gVV9aRVJPX0VSUk9SKSB7Ci0gICAgICAgIExDaGFyIGJ1ZmZlcltob3N0bmFtZUJ1ZmZlckxl
bmd0aF07CisgICAgICAgIFZlY3RvcjxMQ2hhciwgZGVmYXVsdElubGluZUJ1ZmZlclNpemU+IGFz
Y2lpOworICAgICAgICBhc2NpaS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bUNoYXJhY3RlcnND
b252ZXJ0ZWQpOwogICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBudW1DaGFyYWN0ZXJz
Q29udmVydGVkOyArK2kpIHsKICAgICAgICAgICAgIEFTU0VSVChpc0FTQ0lJKGhvc3RuYW1lQnVm
ZmVyW2ldKSk7Ci0gICAgICAgICAgICBidWZmZXJbaV0gPSBob3N0bmFtZUJ1ZmZlcltpXTsKKyAg
ICAgICAgICAgIEFTU0VSVCghaXNBU0NJSVVwcGVyKGhvc3RuYW1lQnVmZmVyW2ldKSk7CisgICAg
ICAgICAgICBhc2NpaS51bmNoZWNrZWRBcHBlbmQoaG9zdG5hbWVCdWZmZXJbaV0pOwogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBTdHJpbmcoYnVmZmVyLCBudW1DaGFyYWN0ZXJzQ29udmVydGVk
KTsKKyAgICAgICAgcmV0dXJuIGFzY2lpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBDaGVjayBm
b3IgVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IgYW5kIHJldHJ5IHdpdGggYW4gYWxsb2NhdGVkIGJ1
ZmZlci4KICAgICByZXR1cm4gTnVsbG9wdDsKIH0KIAotaW5saW5lIHN0YXRpYyBib29sIGhhc0lu
dmFsaWREb21haW5DaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiBhc2NpaURvbWFpbikKK2lubGluZSBz
dGF0aWMgYm9vbCBoYXNJbnZhbGlkRG9tYWluQ2hhcmFjdGVyKGNvbnN0IFZlY3RvcjxMQ2hhciwg
ZGVmYXVsdElubGluZUJ1ZmZlclNpemU+JiBhc2NpaURvbWFpbikKIHsKLSAgICBSRUxFQVNFX0FT
U0VSVChhc2NpaURvbWFpbi5pczhCaXQoKSk7Ci0gICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMg
PSBhc2NpaURvbWFpbi5jaGFyYWN0ZXJzOCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YXNjaWlEb21haW4ubGVuZ3RoKCk7ICsraSkgewotICAgICAgICBpZiAoaXNJbnZhbGlkRG9tYWlu
Q2hhcmFjdGVyKGNoYXJhY3RlcnNbaV0pKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXNj
aWlEb21haW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGlzSW52YWxpZERvbWFpbkNoYXJh
Y3Rlcihhc2NpaURvbWFpbltpXSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMjA0MSw5ICsyMDUzLDggQEAgYm9vbCBVUkxQYXJzZXI6OnBh
cnNlSG9zdChDb2RlUG9pbnRJdGVyYQogICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2FzY2lp
QnVmZmVyLnNpemUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotCi0gICAgLy8gRklY
TUU6IFdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gbWFrZSBzbyBtYW55IGJ1ZmZlcnMgYW5kIFN0
cmluZyBjb3BpZXMuCi0gICAgU3RyaW5nQnVpbGRlciB1dGY4RW5jb2RlZDsKKyAgICAKKyAgICBW
ZWN0b3I8TENoYXIsIGRlZmF1bHRJbmxpbmVCdWZmZXJTaXplPiB1dGY4RW5jb2RlZDsKICAgICBm
b3IgKDsgIWl0ZXJhdG9yLmF0RW5kKCk7ICsraXRlcmF0b3IpIHsKICAgICAgICAgaWYgKCFzZXJp
YWxpemVkICYmIGlzVGFiT3JOZXdsaW5lKCppdGVyYXRvcikpCiAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTIwNTcsMTggKzIwNjgsMTUgQEAgYm9vbCBVUkxQYXJzZXI6OnBhcnNlSG9zdChDb2Rl
UG9pbnRJdGVyYQogICAgICAgICAvLyBGSVhNRTogQ2hlY2sgZXJyb3IuCiAgICAgICAgIHV0ZjhF
bmNvZGVkLmFwcGVuZChidWZmZXIsIG9mZnNldCk7CiAgICAgfQotICAgIFJFTEVBU0VfQVNTRVJU
KHV0ZjhFbmNvZGVkLmlzOEJpdCgpKTsKLSAgICBTdHJpbmcgcGVyY2VudERlY29kZWQgPSBwZXJj
ZW50RGVjb2RlKHV0ZjhFbmNvZGVkLmNoYXJhY3RlcnM4KCksIHV0ZjhFbmNvZGVkLmxlbmd0aCgp
KTsKLSAgICBSRUxFQVNFX0FTU0VSVChwZXJjZW50RGVjb2RlZC5pczhCaXQoKSk7Ci0gICAgU3Ry
aW5nIGRvbWFpbiA9IFN0cmluZzo6ZnJvbVVURjgocGVyY2VudERlY29kZWQuY2hhcmFjdGVyczgo
KSwgcGVyY2VudERlY29kZWQubGVuZ3RoKCkpOworICAgIFZlY3RvcjxMQ2hhciwgZGVmYXVsdElu
bGluZUJ1ZmZlclNpemU+IHBlcmNlbnREZWNvZGVkID0gcGVyY2VudERlY29kZSh1dGY4RW5jb2Rl
ZC5kYXRhKCksIHV0ZjhFbmNvZGVkLnNpemUoKSk7CisgICAgU3RyaW5nIGRvbWFpbiA9IFN0cmlu
Zzo6ZnJvbVVURjgocGVyY2VudERlY29kZWQuZGF0YSgpLCBwZXJjZW50RGVjb2RlZC5zaXplKCkp
OwogICAgIGF1dG8gYXNjaWlEb21haW4gPSBkb21haW5Ub0FTQ0lJKGRvbWFpbik7CiAgICAgaWYg
KCFhc2NpaURvbWFpbiB8fCBoYXNJbnZhbGlkRG9tYWluQ2hhcmFjdGVyKGFzY2lpRG9tYWluLnZh
bHVlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3RyaW5nJiBhc2NpaURvbWFpblZh
bHVlID0gYXNjaWlEb21haW4udmFsdWUoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChhc2NpaURvbWFp
blZhbHVlLmlzOEJpdCgpKTsKLSAgICBjb25zdCBMQ2hhciogYXNjaWlEb21haW5DaGFyYWN0ZXJz
ID0gYXNjaWlEb21haW5WYWx1ZS5jaGFyYWN0ZXJzOCgpOworICAgIFZlY3RvcjxMQ2hhciwgZGVm
YXVsdElubGluZUJ1ZmZlclNpemU+JiBhc2NpaURvbWFpblZhbHVlID0gYXNjaWlEb21haW4udmFs
dWUoKTsKKyAgICBjb25zdCBMQ2hhciogYXNjaWlEb21haW5DaGFyYWN0ZXJzID0gYXNjaWlEb21h
aW5WYWx1ZS5kYXRhKCk7CiAKLSAgICBpZiAoYXV0byBhZGRyZXNzID0gcGFyc2VJUHY0SG9zdChD
b2RlUG9pbnRJdGVyYXRvcjxMQ2hhcj4oYXNjaWlEb21haW5DaGFyYWN0ZXJzLCBhc2NpaURvbWFp
bkNoYXJhY3RlcnMgKyBhc2NpaURvbWFpblZhbHVlLmxlbmd0aCgpKSkpIHsKKyAgICBpZiAoYXV0
byBhZGRyZXNzID0gcGFyc2VJUHY0SG9zdChDb2RlUG9pbnRJdGVyYXRvcjxMQ2hhcj4oYXNjaWlE
b21haW5WYWx1ZS5iZWdpbigpLCBhc2NpaURvbWFpblZhbHVlLmVuZCgpKSkpIHsKICAgICAgICAg
c2VyaWFsaXplSVB2NChhZGRyZXNzLnZhbHVlKCksIG1fYXNjaWlCdWZmZXIpOwogICAgICAgICBt
X3VybC5tX2hvc3RFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgaWYgKGl0ZXJh
dG9yLmF0RW5kKCkpIHsKQEAgLTIwNzksNyArMjA4Nyw3IEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJz
ZUhvc3QoQ29kZVBvaW50SXRlcmEKICAgICAgICAgcmV0dXJuIHBhcnNlUG9ydDxzZXJpYWxpemVk
PihpdGVyYXRvcik7CiAgICAgfQogCi0gICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoYXNjaWlEb21h
aW5DaGFyYWN0ZXJzLCBhc2NpaURvbWFpblZhbHVlLmxlbmd0aCgpKTsKKyAgICBtX2FzY2lpQnVm
ZmVyLmFwcGVuZChhc2NpaURvbWFpbkNoYXJhY3RlcnMsIGFzY2lpRG9tYWluVmFsdWUuc2l6ZSgp
KTsKICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICBpZiAo
IWl0ZXJhdG9yLmF0RW5kKCkpIHsKICAgICAgICAgQVNTRVJUKCppdGVyYXRvciA9PSAnOicpOwpA
QCAtMjA5Niw4ICsyMTA0LDcgQEAgaW5saW5lIHN0YXRpYyBPcHRpb25hbDxTdHJpbmc+IGZvcm1V
UkxEZQogICAgIGlmICh1dGY4LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAg
ICBhdXRvIHBlcmNlbnREZWNvZGVkID0gcGVyY2VudERlY29kZShyZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4odXRmOC5kYXRhKCkpLCB1dGY4Lmxlbmd0aCgpKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChwZXJjZW50RGVjb2RlZC5pczhCaXQoKSk7Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgocGVyY2VudERlY29kZWQuY2hhcmFjdGVyczgoKSwgcGVyY2VudERlY29kZWQubGVuZ3RoKCkp
OworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHBlcmNlbnREZWNvZGVkLmRhdGEoKSwgcGVy
Y2VudERlY29kZWQuc2l6ZSgpKTsKIH0KIAogYXV0byBVUkxQYXJzZXI6OnBhcnNlVVJMRW5jb2Rl
ZEZvcm0oU3RyaW5nVmlldyBpbnB1dCkgLT4gVVJMRW5jb2RlZEZvcm0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1VSTFBhcnNlci5oCShyZXZpc2lvbiAyMDYxMjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAog
I2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUwLDcgKzQ5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBVUkwgbV91cmw7CiAgICAgVmVjdG9yPExDaGFyPiBtX2FzY2lpQnVmZmVyOwotICAgIFZlY3Rv
cjxVQ2hhcjMyPiBtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlcjsKKyAgICBWZWN0b3I8VUNoYXI+IG1f
dW5pY29kZUZyYWdtZW50QnVmZmVyOwogICAgIGJvb2wgbV91cmxJc1NwZWNpYWwgeyBmYWxzZSB9
OwogICAgIGJvb2wgbV9ob3N0SGFzUGVyY2VudE9yTm9uQVNDSUkgeyBmYWxzZSB9OwogCkluZGV4
OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMDYxMjYpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NCBAQAorMjAxNi0wOS0xOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQu
b3JnPgorCisgICAgICAgIFJlZHVjZSBhbGxvY2F0aW9ucyBpbiBVUkxQYXJzZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjI0MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL1VSTFBhcnNlci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNU
X0YpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y2hlY2tVUkwpOgorCiAyMDE2LTA5LTE5ICBB
bGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVVJM
UGFyc2VyIGNhbiByZWFkIG1lbW9yeSBvdXQgb2YgYm91bmRzCkluZGV4OiBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2VyLmNwcAkocmV2aXNpb24gMjA2MTI2
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1VSTFBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlIDxXZWJDb3JlL1VSTFBhcnNlci5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIApAQCAtNDc0LDYgKzQ3NSw5IEBAIFRFU1RfRihVUkxQYXJzZXJUZXN0LCBQYXJzZXJE
aWZmZXJlbmNlcykKICAgICBjaGVja1VSTERpZmZlcmVuY2VzKCJodHRwOiIsCiAgICAgICAgIHsi
aHR0cCIsICIiLCAiIiwgIiIsIDAsICIiLCAiIiwgIiIsICJodHRwOiJ9LAogICAgICAgICB7Imh0
dHAiLCAiIiwgIiIsICIiLCAwLCAiLyIsICIiLCAiIiwgImh0dHA6LyJ9KTsKKyAgICBjaGVja1VS
TERpZmZlcmVuY2VzKHdpZGVTdHJpbmcoTCJodHRwOi8vaG9zdD/Dn/CfmI0jw5/wn5iNIiksCisg
ICAgICAgIHsiaHR0cCIsICIiLCAiIiwgImhvc3QiLCAwLCAiLyIsICIlQzMlOUYlRjAlOUYlOTgl
OEQiLCB3aWRlU3RyaW5nKEwiw5/wn5iNIiksIHdpZGVTdHJpbmcoTCJodHRwOi8vaG9zdC8/JUMz
JTlGJUYwJTlGJTk4JThEI8Of8J+YjSIpfSwKKyAgICAgICAgeyJodHRwIiwgIiIsICIiLCAiaG9z
dCIsIDAsICIvIiwgIiVDMyU5RiVGMCU5RiU5OCU4RCIsICIlQzMlOUYlRjAlOUYlOTglOEQiLCAi
aHR0cDovL2hvc3QvPyVDMyU5RiVGMCU5RiU5OCU4RCMlQzMlOUYlRjAlOUYlOTglOEQifSk7CiAg
ICAgCiAgICAgLy8gVGhpcyBiZWhhdmlvciBtYXRjaGVzIENocm9tZSBhbmQgRmlyZWZveCwgYnV0
IG5vdCBXZWJLaXQgdXNpbmcgVVJMOjpwYXJzZS4KICAgICAvLyBUaGUgYmVoYXZpb3Igb2YgVVJM
OjpwYXJzZSBpcyBjbGVhcmx5IHdyb25nIGJlY2F1c2UgcmVwYXJzaW5nIGZpbGU6Ly9wYXRoIHdv
dWxkIG1ha2UgcGF0aCB0aGUgaG9zdC4KQEAgLTY3MCw0ICs2NzQsMjUgQEAgVEVTVF9GKFVSTFBh
cnNlclRlc3QsIEFkZGl0aW9uYWxUZXN0cykKICAgICBjaGVja1JlbGF0aXZlVVJMKCJub3RzcGVj
aWFsOiIsICJodHRwOi8vZXhhbXBsZS5vcmcvZm9vL2JhciIsIHsibm90c3BlY2lhbCIsICIiLCAi
IiwgIiIsIDAsICIiLCAiIiwgIiIsICJub3RzcGVjaWFsOiJ9KTsKIH0KIAorc3RhdGljIHZvaWQg
Y2hlY2tVUkwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5j
b2RpbmcsIGNvbnN0IEV4cGVjdGVkUGFydHMmIHBhcnRzKQoreworICAgIFVSTFBhcnNlciBwYXJz
ZXI7CisgICAgYXV0byB1cmwgPSBwYXJzZXIucGFyc2UodXJsU3RyaW5nLCB7IH0sIGVuY29kaW5n
KTsKKyAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5wcm90b2NvbCwgdXJsLnByb3RvY29sKCkpKTsK
KyAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy51c2VyLCB1cmwudXNlcigpKSk7CisgICAgRVhQRUNU
X1RSVUUoZXEocGFydHMucGFzc3dvcmQsIHVybC5wYXNzKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShl
cShwYXJ0cy5ob3N0LCB1cmwuaG9zdCgpKSk7CisgICAgRVhQRUNUX0VRKHBhcnRzLnBvcnQsIHVy
bC5wb3J0KCkpOworICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLnBhdGgsIHVybC5wYXRoKCkpKTsK
KyAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5xdWVyeSwgdXJsLnF1ZXJ5KCkpKTsKKyAgICBFWFBF
Q1RfVFJVRShlcShwYXJ0cy5mcmFnbWVudCwgdXJsLmZyYWdtZW50SWRlbnRpZmllcigpKSk7Cisg
ICAgRVhQRUNUX1RSVUUoZXEocGFydHMuc3RyaW5nLCB1cmwuc3RyaW5nKCkpKTsKK30KKworVEVT
VF9GKFVSTFBhcnNlclRlc3QsIFF1ZXJ5RW5jb2RpbmcpCit7CisgICAgY2hlY2tVUkwod2lkZVN0
cmluZyhMImh0dHA6Ly9ob3N0P8Of8J+YjSPDn/CfmI0iKSwgVVRGOEVuY29kaW5nKCksIHsiaHR0
cCIsICIiLCAiIiwgImhvc3QiLCAwLCAiLyIsICIlQzMlOUYlRjAlOUYlOTglOEQiLCB3aWRlU3Ry
aW5nKEwiw5/wn5iNIiksIHdpZGVTdHJpbmcoTCJodHRwOi8vaG9zdC8/JUMzJTlGJUYwJTlGJTk4
JThEI8Of8J+YjSIpfSk7CisgICAgLy8gRklYTUU6IEFkZCB0ZXN0cyB3aXRoIG90aGVyIGVuY29k
aW5ncy4KK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289402</attachid>
            <date>2016-09-20 14:51:45 -0700</date>
            <delta_ts>2016-09-20 14:52:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162241-20160920144859.patch</filename>
            <type>text/plain</type>
            <size>16248</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjE2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE2LTA5LTIwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVkdWNlIGFs
bG9jYXRpb25zIGluIFVSTFBhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYyMjQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXou
CisKKyAgICAgICAgVXNlIFZlY3RvcnMgaW5zdGVhZCBvZiBTdHJpbmdCdWlsZGVycy4gIFRoaXMg
YWxsb3dzIHVzIHRvIHVzZSB0aGUgaW5saW5lIGNhcGFjaXR5IG9uIHRoZSBzdGFjaworICAgICAg
ICBmb3Igc2hvcnQgVVJMcyAoPDJLQikgYW5kIGFsc28gYWxsb3dzIHVzIHRvIHNraXAgYnJhbmNo
ZXMgYmVjYXVzZSB3ZSBrbm93IHdoZXRoZXIgdGhlCisgICAgICAgIGNvbnRhaW5lZCB0eXBlIGlz
IFVDaGFyIG9yIExDaGFyIGF0IGNvbXBpbGUgdGltZS4gIEl0IGFsc28gYWxsb3dzIHVzIHRvIHVz
ZSB1bmNoZWNrZWRBcHBlbmQuCisKKyAgICAgICAgQWRkZWQgbmV3IEFQSSB0ZXN0cyBmb3IgcGFy
dHMgdGhhdCB3ZXJlIGxlc3MgdGVzdGVkLCBidXQgdGhlcmUgaXMKKyAgICAgICAgbm8gY2hhbmdl
IGluIGJlaGF2aW9yIGV4Y2VwdCBmb3IgYSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4KKworICAg
ICAgICAqIHBsYXRmb3JtL1VSTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRD
b2RlUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlUXVlcnkpOgorICAgICAgICAoV2Vi
Q29yZTo6VVJMUGFyc2VyOjpmYWlsdXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6
cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6cGVyY2VudERlY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpkb21haW5Ub0FTQ0lJKToKKyAgICAgICAgKFdlYkNvcmU6Omhhc0ludmFsaWREb21haW5D
aGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpwYXJzZUhvc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Zm9ybVVSTERlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjppc0MwQ29u
dHJvbCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vVVJMUGFyc2VyLmg6CisKIDIwMTYt
MDktMjAgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNhdGFuemFyb0BpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFVSTFBhcnNlcjogdWlkbmFfSUROVG9BU0NJSV81NiBpcyBkZXByZWNhdGVkCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAJKHJldmlzaW9uIDIwNjE2OSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDEwICszMCw2IEBACiAjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8dW5pY29kZS91aWRuYS5o
PgogI2luY2x1ZGUgPHVuaWNvZGUvdXR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
LSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTExNSw2ICsxMTEsMTcgQEAgYXV0byBDb2RlUG9pbnRJdGVyYXRv
cjxVQ2hhcj46Om9wZXJhdG9yKwogICAgIG1fYmVnaW4gKz0gaTsKICAgICByZXR1cm4gKnRoaXM7
CiB9CisgICAgCitzdGF0aWMgdm9pZCBhcHBlbmRDb2RlUG9pbnQoVmVjdG9yPFVDaGFyPiYgZGVz
dGluYXRpb24sIFVDaGFyMzIgY29kZVBvaW50KQoreworICAgIGlmIChVX0lTX0JNUChjb2RlUG9p
bnQpKSB7CisgICAgICAgIGRlc3RpbmF0aW9uLmFwcGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4oY29k
ZVBvaW50KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZGVzdGluYXRpb24ucmVzZXJ2
ZUNhcGFjaXR5KGRlc3RpbmF0aW9uLnNpemUoKSArIDIpOworICAgIGRlc3RpbmF0aW9uLnVuY2hl
Y2tlZEFwcGVuZChVMTZfTEVBRChjb2RlUG9pbnQpKTsKKyAgICBkZXN0aW5hdGlvbi51bmNoZWNr
ZWRBcHBlbmQoVTE2X1RSQUlMKGNvZGVQb2ludCkpOworfQogCiBlbnVtIFVSTENoYXJhY3RlckNs
YXNzIHsKICAgICBVc2VySW5mbyA9IDB4MSwKQEAgLTUwNCwxMCArNTExLDEwIEBAIGlubGluZSBz
dGF0aWMgdm9pZCB1dGY4UGVyY2VudEVuY29kZVF1ZXIKICAgICB9CiB9CiAgICAgCi1pbmxpbmUg
c3RhdGljIHZvaWQgZW5jb2RlUXVlcnkoY29uc3QgU3RyaW5nQnVpbGRlciYgc291cmNlLCBWZWN0
b3I8TENoYXI+JiBkZXN0aW5hdGlvbiwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKK2lu
bGluZSBzdGF0aWMgdm9pZCBlbmNvZGVRdWVyeShjb25zdCBWZWN0b3I8VUNoYXI+JiBzb3VyY2Us
IFZlY3RvcjxMQ2hhcj4mIGRlc3RpbmF0aW9uLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5n
KQogewogICAgIC8vIEZJWE1FOiBJdCBpcyB1bmNsZWFyIGluIHRoZSBzcGVjIHdoYXQgdG8gZG8g
d2hlbiBlbmNvZGluZyBmYWlscy4gVGhlIGJlaGF2aW9yIHNob3VsZCBiZSBzcGVjaWZpZWQgYW5k
IHRlc3RlZC4KLSAgICBDU3RyaW5nIGVuY29kZWQgPSBlbmNvZGluZy5lbmNvZGUoc291cmNlLnRv
U3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpLCBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJs
ZXMpOworICAgIENTdHJpbmcgZW5jb2RlZCA9IGVuY29kaW5nLmVuY29kZShTdHJpbmdWaWV3KHNv
dXJjZS5kYXRhKCksIHNvdXJjZS5zaXplKCkpLCBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29k
YWJsZXMpOwogICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBlbmNvZGVkLmRhdGEoKTsKICAgICBzaXpl
X3QgbGVuZ3RoID0gZW5jb2RlZC5sZW5ndGgoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7CkBAIC05MTIsNyArOTE5LDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2VT
ZXJpYWxpemVkVVJMKGNvbnN0IAogICAgICAgICByZXR1cm4gcGFyc2U8c2VyaWFsaXplZD4oaW5w
dXQuY2hhcmFjdGVyczgoKSwgaW5wdXQubGVuZ3RoKCksIHsgfSwgVVRGOEVuY29kaW5nKCkpOwog
ICAgIHJldHVybiBwYXJzZTxzZXJpYWxpemVkPihpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgaW5wdXQu
bGVuZ3RoKCksIHsgfSwgVVRGOEVuY29kaW5nKCkpOwogfQotICAgIAorCiB0ZW1wbGF0ZTxib29s
IHNlcmlhbGl6ZWQsIHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CiBVUkwgVVJMUGFyc2VyOjpwYXJz
ZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBpbnB1dCwgY29uc3QgdW5zaWduZWQgbGVuZ3RoLCBjb25z
dCBVUkwmIGJhc2UsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCiB7CkBAIC05MjMsNyAr
OTMwLDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgIG1f
YXNjaWlCdWZmZXIucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CiAgICAgCiAgICAgYm9vbCBpc1VU
RjhFbmNvZGluZyA9IGVuY29kaW5nID09IFVURjhFbmNvZGluZygpOwotICAgIFN0cmluZ0J1aWxk
ZXIgcXVlcnlCdWZmZXI7CisgICAgVmVjdG9yPFVDaGFyPiBxdWVyeUJ1ZmZlcjsKIAogICAgIHVu
c2lnbmVkIGVuZEluZGV4ID0gbGVuZ3RoOwogICAgIHdoaWxlIChlbmRJbmRleCAmJiBpc0MwQ29u
dHJvbE9yU3BhY2UoaW5wdXRbZW5kSW5kZXggLSAxXSkpCkBAIC0xNDA4LDcgKzE0MTUsNyBAQCBV
UkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICBpZiAo
aXNVVEY4RW5jb2RpbmcpCiAgICAgICAgICAgICAgICAgdXRmOFBlcmNlbnRFbmNvZGVRdWVyeTxz
ZXJpYWxpemVkPigqYywgbV9hc2NpaUJ1ZmZlcik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgcXVlcnlCdWZmZXIuYXBwZW5kKCpjKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRD
b2RlUG9pbnQocXVlcnlCdWZmZXIsICpjKTsKICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIFN0YXRlOjpGcmFnbWVudDoKQEAgLTE0MTYsNyArMTQyMyw3
IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAg
IGlmIChtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlci5pc0VtcHR5KCkgJiYgaXNBU0NJSSgqYykpCiAg
ICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoKmMpOwogICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIG1fdW5pY29kZUZyYWdtZW50QnVmZmVyLmFwcGVuZCgqYyk7Cisg
ICAgICAgICAgICAgICAgYXBwZW5kQ29kZVBvaW50KG1fdW5pY29kZUZyYWdtZW50QnVmZmVyLCAq
Yyk7CiAgICAgICAgICAgICArK2M7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAt
MTkyNiwyNSArMTkzMywyNyBAQCBpbmxpbmUgc3RhdGljIE9wdGlvbmFsPHN0ZDo6YXJyYXk8dWlu
dDE2CiAgICAgcmV0dXJuIGFkZHJlc3M7CiB9CiAKLS8vIEZJWE1FOiBUaGlzIHNob3VsZCByZXR1
cm4gYSBDU3RyaW5nLgotaW5saW5lIHN0YXRpYyBTdHJpbmcgcGVyY2VudERlY29kZShjb25zdCBM
Q2hhciogaW5wdXQsIHNpemVfdCBsZW5ndGgpCitjb25zdCBzaXplX3QgZGVmYXVsdElubGluZUJ1
ZmZlclNpemUgPSAyMDQ4OworCitpbmxpbmUgc3RhdGljIFZlY3RvcjxMQ2hhciwgZGVmYXVsdElu
bGluZUJ1ZmZlclNpemU+IHBlcmNlbnREZWNvZGUoY29uc3QgTENoYXIqIGlucHV0LCBzaXplX3Qg
bGVuZ3RoKQogewotICAgIFN0cmluZ0J1aWxkZXIgb3V0cHV0OworICAgIFZlY3RvcjxMQ2hhciwg
ZGVmYXVsdElubGluZUJ1ZmZlclNpemU+IG91dHB1dDsKKyAgICBvdXRwdXQucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShsZW5ndGgpOwogICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKICAgICAgICAgdWludDhfdCBieXRlID0gaW5wdXRbaV07CiAgICAgICAgIGlm
IChieXRlICE9ICclJykKLSAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoYnl0ZSk7CisgICAgICAg
ICAgICBvdXRwdXQudW5jaGVja2VkQXBwZW5kKGJ5dGUpOwogICAgICAgICBlbHNlIGlmIChpIDwg
bGVuZ3RoIC0gMikgewogICAgICAgICAgICAgaWYgKGlzQVNDSUlIZXhEaWdpdChpbnB1dFtpICsg
MV0pICYmIGlzQVNDSUlIZXhEaWdpdChpbnB1dFtpICsgMl0pKSB7Ci0gICAgICAgICAgICAgICAg
b3V0cHV0LmFwcGVuZCh0b0FTQ0lJSGV4VmFsdWUoaW5wdXRbaSArIDFdLCBpbnB1dFtpICsgMl0p
KTsKKyAgICAgICAgICAgICAgICBvdXRwdXQudW5jaGVja2VkQXBwZW5kKHRvQVNDSUlIZXhWYWx1
ZShpbnB1dFtpICsgMV0sIGlucHV0W2kgKyAyXSkpOwogICAgICAgICAgICAgICAgIGkgKz0gMjsK
ICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoYnl0ZSk7
CisgICAgICAgICAgICAgICAgb3V0cHV0LnVuY2hlY2tlZEFwcGVuZChieXRlKTsKICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGJ5dGUpOworICAgICAgICAgICAgb3V0
cHV0LnVuY2hlY2tlZEFwcGVuZChieXRlKTsKICAgICB9Ci0gICAgcmV0dXJuIG91dHB1dC50b1N0
cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKTsKKyAgICByZXR1cm4gb3V0cHV0OwogfQogCiBpbmxpbmUg
c3RhdGljIGJvb2wgY29udGFpbnNPbmx5QVNDSUkoY29uc3QgU3RyaW5nJiBzdHJpbmcpCkBAIC0x
OTU0LDIyICsxOTYzLDI2IEBAIGlubGluZSBzdGF0aWMgYm9vbCBjb250YWluc09ubHlBU0NJSShj
b24KICAgICByZXR1cm4gY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHN0cmluZy5jaGFyYWN0ZXJzMTYo
KSwgc3RyaW5nLmxlbmd0aCgpKTsKIH0KIAotaW5saW5lIHN0YXRpYyBPcHRpb25hbDxTdHJpbmc+
IGRvbWFpblRvQVNDSUkoY29uc3QgU3RyaW5nJiBkb21haW4pCitpbmxpbmUgc3RhdGljIE9wdGlv
bmFsPFZlY3RvcjxMQ2hhciwgZGVmYXVsdElubGluZUJ1ZmZlclNpemU+PiBkb21haW5Ub0FTQ0lJ
KGNvbnN0IFN0cmluZyYgZG9tYWluKQogewotICAgIGNvbnN0IHVuc2lnbmVkIGhvc3RuYW1lQnVm
ZmVyTGVuZ3RoID0gMjA0ODsKLQorICAgIFZlY3RvcjxMQ2hhciwgZGVmYXVsdElubGluZUJ1ZmZl
clNpemU+IGFzY2lpOwogICAgIGlmIChjb250YWluc09ubHlBU0NJSShkb21haW4pKSB7Ci0gICAg
ICAgIGlmIChkb21haW4uaXM4Qml0KCkpCi0gICAgICAgICAgICByZXR1cm4gZG9tYWluLmNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlKCk7Ci0gICAgICAgIFZlY3RvcjxMQ2hhciwgaG9zdG5hbWVCdWZm
ZXJMZW5ndGg+IGJ1ZmZlcjsKICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IGRvbWFpbi5sZW5ndGgo
KTsKLSAgICAgICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGJ1ZmZl
ci5hcHBlbmQodG9BU0NJSUxvd2VyKGRvbWFpbltpXSkpOwotICAgICAgICByZXR1cm4gU3RyaW5n
KGJ1ZmZlci5kYXRhKCksIGxlbmd0aCk7CisgICAgICAgIGlmIChkb21haW4uaXM4Qml0KCkpIHsK
KyAgICAgICAgICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzID0gZG9tYWluLmNoYXJhY3RlcnM4
KCk7CisgICAgICAgICAgICBhc2NpaS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7Cisg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAg
ICAgICAgIGFzY2lpLnVuY2hlY2tlZEFwcGVuZCh0b0FTQ0lJTG93ZXIoY2hhcmFjdGVyc1tpXSkp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMg
PSBkb21haW4uY2hhcmFjdGVyczE2KCk7CisgICAgICAgICAgICBhc2NpaS5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGxlbmd0aCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKQorICAgICAgICAgICAgICAgIGFzY2lpLnVuY2hlY2tlZEFwcGVuZCh0b0FTQ0lJ
TG93ZXIoY2hhcmFjdGVyc1tpXSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBhc2NpaTsK
ICAgICB9CiAgICAgCi0gICAgVUNoYXIgaG9zdG5hbWVCdWZmZXJbaG9zdG5hbWVCdWZmZXJMZW5n
dGhdOworICAgIFVDaGFyIGhvc3RuYW1lQnVmZmVyW2RlZmF1bHRJbmxpbmVCdWZmZXJTaXplXTsK
ICAgICBVRXJyb3JDb2RlIGVycm9yID0gVV9aRVJPX0VSUk9SOwogCiAjaWYgQ09NUElMRVIoR0ND
KSB8fCBDT01QSUxFUihDTEFORykKQEAgLTE5NzcsMzAgKzE5OTAsMjkgQEAgaW5saW5lIHN0YXRp
YyBPcHRpb25hbDxTdHJpbmc+IGRvbWFpblRvQQogI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25v
cmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgogI2VuZGlmCiAgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIHVzZSB1aWRuYV9vcGVuVVRTNDYgLyB1aWRuYV9jbG9zZSBpbnN0ZWFkCi0gICAg
aW50MzJfdCBudW1DaGFyYWN0ZXJzQ29udmVydGVkID0gdWlkbmFfSUROVG9BU0NJSShTdHJpbmdW
aWV3KGRvbWFpbikudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCksIGRvbWFpbi5sZW5ndGgoKSwgaG9z
dG5hbWVCdWZmZXIsIGhvc3RuYW1lQnVmZmVyTGVuZ3RoLCBVSUROQV9BTExPV19VTkFTU0lHTkVE
LCBudWxscHRyLCAmZXJyb3IpOworICAgIGludDMyX3QgbnVtQ2hhcmFjdGVyc0NvbnZlcnRlZCA9
IHVpZG5hX0lETlRvQVNDSUkoU3RyaW5nVmlldyhkb21haW4pLnVwY29udmVydGVkQ2hhcmFjdGVy
cygpLCBkb21haW4ubGVuZ3RoKCksIGhvc3RuYW1lQnVmZmVyLCBkZWZhdWx0SW5saW5lQnVmZmVy
U2l6ZSwgVUlETkFfQUxMT1dfVU5BU1NJR05FRCwgbnVsbHB0ciwgJmVycm9yKTsKICNpZiBDT01Q
SUxFUihHQ0MpIHx8IENPTVBJTEVSKENMQU5HKQogI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AK
ICNlbmRpZgorICAgIEFTU0VSVChudW1DaGFyYWN0ZXJzQ29udmVydGVkIDw9IHN0YXRpY19jYXN0
PGludDMyX3Q+KGRlZmF1bHRJbmxpbmVCdWZmZXJTaXplKSk7CiAKICAgICBpZiAoZXJyb3IgPT0g
VV9aRVJPX0VSUk9SKSB7Ci0gICAgICAgIExDaGFyIGJ1ZmZlcltob3N0bmFtZUJ1ZmZlckxlbmd0
aF07CiAgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IG51bUNoYXJhY3RlcnNDb252ZXJ0
ZWQ7ICsraSkgewogICAgICAgICAgICAgQVNTRVJUKGlzQVNDSUkoaG9zdG5hbWVCdWZmZXJbaV0p
KTsKLSAgICAgICAgICAgIGJ1ZmZlcltpXSA9IGhvc3RuYW1lQnVmZmVyW2ldOworICAgICAgICAg
ICAgQVNTRVJUKCFpc0FTQ0lJVXBwZXIoaG9zdG5hbWVCdWZmZXJbaV0pKTsKICAgICAgICAgfQot
ICAgICAgICByZXR1cm4gU3RyaW5nKGJ1ZmZlciwgbnVtQ2hhcmFjdGVyc0NvbnZlcnRlZCk7Cisg
ICAgICAgIGFzY2lpLmFwcGVuZChob3N0bmFtZUJ1ZmZlciwgbnVtQ2hhcmFjdGVyc0NvbnZlcnRl
ZCk7CisgICAgICAgIHJldHVybiBhc2NpaTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogQ2hlY2sg
Zm9yIFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SIGFuZCByZXRyeSB3aXRoIGFuIGFsbG9jYXRlZCBi
dWZmZXIuCiAgICAgcmV0dXJuIE51bGxvcHQ7CiB9CiAKLWlubGluZSBzdGF0aWMgYm9vbCBoYXNJ
bnZhbGlkRG9tYWluQ2hhcmFjdGVyKGNvbnN0IFN0cmluZyYgYXNjaWlEb21haW4pCitpbmxpbmUg
c3RhdGljIGJvb2wgaGFzSW52YWxpZERvbWFpbkNoYXJhY3Rlcihjb25zdCBWZWN0b3I8TENoYXIs
IGRlZmF1bHRJbmxpbmVCdWZmZXJTaXplPiYgYXNjaWlEb21haW4pCiB7Ci0gICAgUkVMRUFTRV9B
U1NFUlQoYXNjaWlEb21haW4uaXM4Qml0KCkpOwotICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJz
ID0gYXNjaWlEb21haW4uY2hhcmFjdGVyczgoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGFzY2lpRG9tYWluLmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGlzSW52YWxpZERvbWFp
bkNoYXJhY3RlcihjaGFyYWN0ZXJzW2ldKSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFz
Y2lpRG9tYWluLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChpc0ludmFsaWREb21haW5DaGFy
YWN0ZXIoYXNjaWlEb21haW5baV0pKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIHJldHVybiBmYWxzZTsKQEAgLTIwOTUsOSArMjEwNyw4IEBAIGJvb2wgVVJMUGFyc2VyOjpw
YXJzZUhvc3RBbmRQb3J0KENvZGVQb2kKICAgICAgICAgbV91cmwubV9wb3J0RW5kID0gbV9hc2Np
aUJ1ZmZlci5zaXplKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLQotICAgIC8vIEZJ
WE1FOiBXZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIG1ha2Ugc28gbWFueSBidWZmZXJzIGFuZCBT
dHJpbmcgY29waWVzLgotICAgIFN0cmluZ0J1aWxkZXIgdXRmOEVuY29kZWQ7CisgICAgCisgICAg
VmVjdG9yPExDaGFyLCBkZWZhdWx0SW5saW5lQnVmZmVyU2l6ZT4gdXRmOEVuY29kZWQ7CiAgICAg
Zm9yICg7ICFpdGVyYXRvci5hdEVuZCgpOyArK2l0ZXJhdG9yKSB7CiAgICAgICAgIGlmICghc2Vy
aWFsaXplZCAmJiBpc1RhYk9yTmV3bGluZSgqaXRlcmF0b3IpKQogICAgICAgICAgICAgY29udGlu
dWU7CkBAIC0yMTExLDE4ICsyMTIyLDE1IEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJzZUhvc3RBbmRQ
b3J0KENvZGVQb2kKICAgICAgICAgLy8gRklYTUU6IENoZWNrIGVycm9yLgogICAgICAgICB1dGY4
RW5jb2RlZC5hcHBlbmQoYnVmZmVyLCBvZmZzZXQpOwogICAgIH0KLSAgICBSRUxFQVNFX0FTU0VS
VCh1dGY4RW5jb2RlZC5pczhCaXQoKSk7Ci0gICAgU3RyaW5nIHBlcmNlbnREZWNvZGVkID0gcGVy
Y2VudERlY29kZSh1dGY4RW5jb2RlZC5jaGFyYWN0ZXJzOCgpLCB1dGY4RW5jb2RlZC5sZW5ndGgo
KSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocGVyY2VudERlY29kZWQuaXM4Qml0KCkpOwotICAgIFN0
cmluZyBkb21haW4gPSBTdHJpbmc6OmZyb21VVEY4KHBlcmNlbnREZWNvZGVkLmNoYXJhY3RlcnM4
KCksIHBlcmNlbnREZWNvZGVkLmxlbmd0aCgpKTsKKyAgICBWZWN0b3I8TENoYXIsIGRlZmF1bHRJ
bmxpbmVCdWZmZXJTaXplPiBwZXJjZW50RGVjb2RlZCA9IHBlcmNlbnREZWNvZGUodXRmOEVuY29k
ZWQuZGF0YSgpLCB1dGY4RW5jb2RlZC5zaXplKCkpOworICAgIFN0cmluZyBkb21haW4gPSBTdHJp
bmc6OmZyb21VVEY4KHBlcmNlbnREZWNvZGVkLmRhdGEoKSwgcGVyY2VudERlY29kZWQuc2l6ZSgp
KTsKICAgICBhdXRvIGFzY2lpRG9tYWluID0gZG9tYWluVG9BU0NJSShkb21haW4pOwogICAgIGlm
ICghYXNjaWlEb21haW4gfHwgaGFzSW52YWxpZERvbWFpbkNoYXJhY3Rlcihhc2NpaURvbWFpbi52
YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyYgYXNjaWlEb21haW5W
YWx1ZSA9IGFzY2lpRG9tYWluLnZhbHVlKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoYXNjaWlEb21h
aW5WYWx1ZS5pczhCaXQoKSk7Ci0gICAgY29uc3QgTENoYXIqIGFzY2lpRG9tYWluQ2hhcmFjdGVy
cyA9IGFzY2lpRG9tYWluVmFsdWUuY2hhcmFjdGVyczgoKTsKKyAgICBWZWN0b3I8TENoYXIsIGRl
ZmF1bHRJbmxpbmVCdWZmZXJTaXplPiYgYXNjaWlEb21haW5WYWx1ZSA9IGFzY2lpRG9tYWluLnZh
bHVlKCk7CisgICAgY29uc3QgTENoYXIqIGFzY2lpRG9tYWluQ2hhcmFjdGVycyA9IGFzY2lpRG9t
YWluVmFsdWUuZGF0YSgpOwogCi0gICAgaWYgKGF1dG8gYWRkcmVzcyA9IHBhcnNlSVB2NEhvc3Qo
Q29kZVBvaW50SXRlcmF0b3I8TENoYXI+KGFzY2lpRG9tYWluQ2hhcmFjdGVycywgYXNjaWlEb21h
aW5DaGFyYWN0ZXJzICsgYXNjaWlEb21haW5WYWx1ZS5sZW5ndGgoKSkpKSB7CisgICAgaWYgKGF1
dG8gYWRkcmVzcyA9IHBhcnNlSVB2NEhvc3QoQ29kZVBvaW50SXRlcmF0b3I8TENoYXI+KGFzY2lp
RG9tYWluVmFsdWUuYmVnaW4oKSwgYXNjaWlEb21haW5WYWx1ZS5lbmQoKSkpKSB7CiAgICAgICAg
IHNlcmlhbGl6ZUlQdjQoYWRkcmVzcy52YWx1ZSgpLCBtX2FzY2lpQnVmZmVyKTsKICAgICAgICAg
bV91cmwubV9ob3N0RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgIGlmIChpdGVy
YXRvci5hdEVuZCgpKSB7CkBAIC0yMTMzLDcgKzIxNDEsNyBAQCBib29sIFVSTFBhcnNlcjo6cGFy
c2VIb3N0QW5kUG9ydChDb2RlUG9pCiAgICAgICAgIHJldHVybiBwYXJzZVBvcnQ8c2VyaWFsaXpl
ZD4oaXRlcmF0b3IpOwogICAgIH0KIAotICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKGFzY2lpRG9t
YWluQ2hhcmFjdGVycywgYXNjaWlEb21haW5WYWx1ZS5sZW5ndGgoKSk7CisgICAgbV9hc2NpaUJ1
ZmZlci5hcHBlbmQoYXNjaWlEb21haW5DaGFyYWN0ZXJzLCBhc2NpaURvbWFpblZhbHVlLnNpemUo
KSk7CiAgICAgbV91cmwubV9ob3N0RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgaWYg
KCFpdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgIEFTU0VSVCgqaXRlcmF0b3IgPT0gJzonKTsK
QEAgLTIxNTAsOCArMjE1OCw3IEBAIGlubGluZSBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBmb3Jt
VVJMRGUKICAgICBpZiAodXRmOC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAg
ICAgYXV0byBwZXJjZW50RGVjb2RlZCA9IHBlcmNlbnREZWNvZGUocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KHV0ZjguZGF0YSgpKSwgdXRmOC5sZW5ndGgoKSk7Ci0gICAgUkVMRUFTRV9B
U1NFUlQocGVyY2VudERlY29kZWQuaXM4Qml0KCkpOwotICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KHBlcmNlbnREZWNvZGVkLmNoYXJhY3RlcnM4KCksIHBlcmNlbnREZWNvZGVkLmxlbmd0aCgp
KTsKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChwZXJjZW50RGVjb2RlZC5kYXRhKCksIHBl
cmNlbnREZWNvZGVkLnNpemUoKSk7CiB9CiAKIGF1dG8gVVJMUGFyc2VyOjpwYXJzZVVSTEVuY29k
ZWRGb3JtKFN0cmluZ1ZpZXcgaW5wdXQpIC0+IFVSTEVuY29kZWRGb3JtCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAkocmV2aXNpb24gMjA2MTYyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVVJMUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBVUkwgbV91cmw7CiAgICAgVmVjdG9yPExDaGFyPiBtX2Fz
Y2lpQnVmZmVyOwotICAgIFZlY3RvcjxVQ2hhcjMyPiBtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlcjsK
KyAgICBWZWN0b3I8VUNoYXI+IG1fdW5pY29kZUZyYWdtZW50QnVmZmVyOwogICAgIGJvb2wgbV91
cmxJc1NwZWNpYWwgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9ob3N0SGFzUGVyY2VudE9yTm9uQVND
SUkgeyBmYWxzZSB9OwogCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDYxNjIpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxNi0wOS0yMCAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFJlZHVjZSBhbGxvY2F0aW9ucyBp
biBVUkxQYXJzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MjI0MQorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1VSTFBhcnNlci5jcHA6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y2hlY2tVUkwp
OgorCiAyMDE2LTA5LTIwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgQWxpZ24gVVJMUGFyc2VyIHdpdGggd2ViIHBsYXRmb3JtIHRlc3RzIHdo
ZW4gcGFyc2luZyBub24tc3BlY2lhbCByZWxhdGl2ZSBVUkxzIGVuZGluZyBpbiBBdXRob3JpdHlP
ckhvc3Qgc3RhdGUKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkxQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9VUkxQYXJzZXIuY3BwCShyZXZpc2lvbiAyMDYxNjIpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvVVJMUGFyc2VyLmg+
CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC01NTgsNiArNTU5LDkg
QEAgVEVTVF9GKFVSTFBhcnNlclRlc3QsIFBhcnNlckRpZmZlcmVuY2VzKQogICAgIGNoZWNrUmVs
YXRpdmVVUkxEaWZmZXJlbmNlcygiZm9vOi8vIiwgImh0dHA6Ly9leGFtcGxlLm9yZy9mb28vYmFy
IiwKICAgICAgICAgeyJmb28iLCAiIiwgIiIsICIiLCAwLCAiLyIsICIiLCAiIiwgImZvbzovLy8i
fSwKICAgICAgICAgeyJmb28iLCAiIiwgIiIsICIiLCAwLCAiLy8iLCAiIiwgIiIsICJmb286Ly8i
fSk7CisgICAgY2hlY2tVUkxEaWZmZXJlbmNlcyh3aWRlU3RyaW5nKEwiaHR0cDovL2hvc3Q/w5/w
n5iNI8Of8J+YjSIpLAorICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICJob3N0IiwgMCwgIi8iLCAi
JUMzJTlGJUYwJTlGJTk4JThEIiwgd2lkZVN0cmluZyhMIsOf8J+YjSIpLCB3aWRlU3RyaW5nKEwi
aHR0cDovL2hvc3QvPyVDMyU5RiVGMCU5RiU5OCU4RCPDn/CfmI0iKX0sCisgICAgICAgIHsiaHR0
cCIsICIiLCAiIiwgImhvc3QiLCAwLCAiLyIsICIlQzMlOUYlRjAlOUYlOTglOEQiLCAiJUMzJTlG
JUYwJTlGJTk4JThEIiwgImh0dHA6Ly9ob3N0Lz8lQzMlOUYlRjAlOUYlOTglOEQjJUMzJTlGJUYw
JTlGJTk4JThEIn0pOwogCiAgICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBzcGVjIGFuZCB3ZWIgcGxh
dGZvcm0gdGVzdHMsIGJ1dCBub3QgQ2hyb21lLCBGaXJlZm94LCBvciBVUkw6OnBhcnNlLgogICAg
IGNoZWNrUmVsYXRpdmVVUkxEaWZmZXJlbmNlcygibm90c3BlY2lhbDovIiwgImFib3V0OmJsYW5r
IiwKQEAgLTY0OSw2ICs2NTMsMTAgQEAgVEVTVF9GKFVSTFBhcnNlclRlc3QsIERlZmF1bHRQb3J0
KQogICAgIGNoZWNrVVJMRGlmZmVyZW5jZXMoInVua25vd246Ly9ob3N0OjgxIiwKICAgICAgICAg
eyJ1bmtub3duIiwgIiIsICIiLCAiaG9zdCIsIDgxLCAiLyIsICIiLCAiIiwgInVua25vd246Ly9o
b3N0OjgxLyJ9LAogICAgICAgICB7InVua25vd24iLCAiIiwgIiIsICJob3N0IiwgODEsICIiLCAi
IiwgIiIsICJ1bmtub3duOi8vaG9zdDo4MSJ9KTsKKyAgICBjaGVja1VSTERpZmZlcmVuY2VzKCJo
dHRwOi8vJTQ4T3NUIiwKKyAgICAgICAgeyJodHRwIiwgIiIsICIiLCAiaG9zdCIsIDAsICIvIiwg
IiIsICIiLCAiaHR0cDovL2hvc3QvIn0sCisgICAgICAgIHsiaHR0cCIsICIiLCAiIiwgIiU0OG9z
dCIsIDAsICIvIiwgIiIsICIiLCAiaHR0cDovLyU0OG9zdC8ifSk7CisKIH0KICAgICAKIHN0YXRp
YyB2b2lkIHNob3VsZEZhaWwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCkBAIC03MTMsNCArNzIx
LDI1IEBAIFRFU1RfRihVUkxQYXJzZXJUZXN0LCBBZGRpdGlvbmFsVGVzdHMpCiAgICAgY2hlY2tS
ZWxhdGl2ZVVSTCgibm90c3BlY2lhbDoiLCAiaHR0cDovL2V4YW1wbGUub3JnL2Zvby9iYXIiLCB7
Im5vdHNwZWNpYWwiLCAiIiwgIiIsICIiLCAwLCAiIiwgIiIsICIiLCAibm90c3BlY2lhbDoifSk7
CiB9CiAKK3N0YXRpYyB2b2lkIGNoZWNrVVJMKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25z
dCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBjb25zdCBFeHBlY3RlZFBhcnRzJiBwYXJ0cykKK3sK
KyAgICBVUkxQYXJzZXIgcGFyc2VyOworICAgIGF1dG8gdXJsID0gcGFyc2VyLnBhcnNlKHVybFN0
cmluZywgeyB9LCBlbmNvZGluZyk7CisgICAgRVhQRUNUX1RSVUUoZXEocGFydHMucHJvdG9jb2ws
IHVybC5wcm90b2NvbCgpKSk7CisgICAgRVhQRUNUX1RSVUUoZXEocGFydHMudXNlciwgdXJsLnVz
ZXIoKSkpOworICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLnBhc3N3b3JkLCB1cmwucGFzcygpKSk7
CisgICAgRVhQRUNUX1RSVUUoZXEocGFydHMuaG9zdCwgdXJsLmhvc3QoKSkpOworICAgIEVYUEVD
VF9FUShwYXJ0cy5wb3J0LCB1cmwucG9ydCgpKTsKKyAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5w
YXRoLCB1cmwucGF0aCgpKSk7CisgICAgRVhQRUNUX1RSVUUoZXEocGFydHMucXVlcnksIHVybC5x
dWVyeSgpKSk7CisgICAgRVhQRUNUX1RSVUUoZXEocGFydHMuZnJhZ21lbnQsIHVybC5mcmFnbWVu
dElkZW50aWZpZXIoKSkpOworICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLnN0cmluZywgdXJsLnN0
cmluZygpKSk7Cit9CisKK1RFU1RfRihVUkxQYXJzZXJUZXN0LCBRdWVyeUVuY29kaW5nKQorewor
ICAgIGNoZWNrVVJMKHdpZGVTdHJpbmcoTCJodHRwOi8vaG9zdD/Dn/CfmI0jw5/wn5iNIiksIFVU
RjhFbmNvZGluZygpLCB7Imh0dHAiLCAiIiwgIiIsICJob3N0IiwgMCwgIi8iLCAiJUMzJTlGJUYw
JTlGJTk4JThEIiwgd2lkZVN0cmluZyhMIsOf8J+YjSIpLCB3aWRlU3RyaW5nKEwiaHR0cDovL2hv
c3QvPyVDMyU5RiVGMCU5RiU5OCU4RCPDn/CfmI0iKX0pOworICAgIC8vIEZJWE1FOiBBZGQgdGVz
dHMgd2l0aCBvdGhlciBlbmNvZGluZ3MuCit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkK
</data>

          </attachment>
      

    </bug>

</bugzilla>