<?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>197229</bug_id>
          
          <creation_ts>2019-04-24 03:09:18 -0700</creation_ts>
          <short_desc>Visited link hash should be computed only once</short_desc>
          <delta_ts>2019-04-26 01:19:26 -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>DOM</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1529935</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-04-24 03:09:18 -0700</bug_when>
    <thetext>Don&apos;t allow URL mutations to affect the hash afterwards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1529936</commentid>
    <comment_count>1</comment_count>
      <attachid>368116</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-04-24 03:10:44 -0700</bug_when>
    <thetext>Created attachment 368116
wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1529947</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-04-24 04:02:53 -0700</bug_when>
    <thetext>Attachment 368116 did not pass style-queue:


ERROR: Source/WebCore/svg/SVGAElement.h:25:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/dom/VisitedLinkState.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1529948</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-04-24 04:05:36 -0700</bug_when>
    <thetext>&lt;rdar://problem/48438924&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1529964</commentid>
    <comment_count>4</comment_count>
      <attachid>368121</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-04-24 06:04:28 -0700</bug_when>
    <thetext>Created attachment 368121
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1529967</commentid>
    <comment_count>5</comment_count>
      <attachid>368122</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-04-24 07:35:20 -0700</bug_when>
    <thetext>Created attachment 368122
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1529972</commentid>
    <comment_count>6</comment_count>
      <attachid>368122</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-04-24 08:17:11 -0700</bug_when>
    <thetext>Comment on attachment 368122
patch

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

&gt; Source/WebCore/html/HTMLAnchorElement.h:119
&gt; +    // This is computed only once and must not be affected by subsequent URL changes.
&gt; +    mutable Optional&lt;SharedStringHash&gt; m_storedVisitedLinkHash;

Would mutable Optional&lt;const SharedStringHash&gt; work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1530008</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-04-24 09:10:55 -0700</bug_when>
    <thetext>&gt; Would mutable Optional&lt;const SharedStringHash&gt; work?

Doesn&apos;t compile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1530010</commentid>
    <comment_count>8</comment_count>
      <attachid>368122</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-24 09:12:44 -0700</bug_when>
    <thetext>Comment on attachment 368122
patch

Rejecting attachment 368122 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-02&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 368122, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Traceback (most recent call last):
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&quot;, line 84, in &lt;module&gt;
    main()
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&quot;, line 79, in main
    WebKitPatch(os.path.abspath(__file__)).main()
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/tool/multicommandtool.py&quot;, line 305, in main
    result = command.check_arguments_and_execute(options, args, self)
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/tool/multicommandtool.py&quot;, line 123, in check_arguments_and_execute
    return self.execute(options, args, tool) or 0
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/tool/commands/abstractsequencedcommand.py&quot;, line 55, in execute
    self._sequence.run_and_handle_errors(tool, options, state)
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/tool/commands/stepsequence.py&quot;, line 73, in run_and_handle_errors
    self._run(tool, options, state)
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/tool/commands/stepsequence.py&quot;, line 67, in _run
    step(tool, options).run(state)
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/tool/steps/validatereviewer.py&quot;, line 54, in run
    if changelog_entry.has_valid_reviewer():
AttributeError: &apos;NoneType&apos; object has no attribute &apos;has_valid_reviewer&apos;

Full output: https://webkit-queues.webkit.org/results/11983672</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1530324</commentid>
    <comment_count>9</comment_count>
      <attachid>368219</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-04-25 00:36:20 -0700</bug_when>
    <thetext>Created attachment 368219
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1530333</commentid>
    <comment_count>10</comment_count>
      <attachid>368219</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-25 02:05:56 -0700</bug_when>
    <thetext>Comment on attachment 368219
patch

Rejecting attachment 368219 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 368219, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Traceback (most recent call last):
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&quot;, line 84, in &lt;module&gt;
    main()
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&quot;, line 79, in main
    WebKitPatch(os.path.abspath(__file__)).main()
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/tool/multicommandtool.py&quot;, line 305, in main
    result = command.check_arguments_and_execute(options, args, self)
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/tool/multicommandtool.py&quot;, line 123, in check_arguments_and_execute
    return self.execute(options, args, tool) or 0
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/tool/commands/abstractsequencedcommand.py&quot;, line 55, in execute
    self._sequence.run_and_handle_errors(tool, options, state)
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/tool/commands/stepsequence.py&quot;, line 73, in run_and_handle_errors
    self._run(tool, options, state)
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/tool/commands/stepsequence.py&quot;, line 67, in _run
    step(tool, options).run(state)
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/tool/steps/validatereviewer.py&quot;, line 54, in run
    if changelog_entry.has_valid_reviewer():
AttributeError: &apos;NoneType&apos; object has no attribute &apos;has_valid_reviewer&apos;

Full output: https://webkit-queues.webkit.org/results/11993303</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1530337</commentid>
    <comment_count>11</comment_count>
      <attachid>368223</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-04-25 02:16:38 -0700</bug_when>
    <thetext>Created attachment 368223
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1530340</commentid>
    <comment_count>12</comment_count>
      <attachid>368223</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-25 02:55:44 -0700</bug_when>
    <thetext>Comment on attachment 368223
patch

Clearing flags on attachment: 368223

Committed r244642: &lt;https://trac.webkit.org/changeset/244642&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1530341</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-25 02:55:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1530384</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-04-25 09:09:49 -0700</bug_when>
    <thetext>Is this change OK from a user experience point of view?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1530394</commentid>
    <comment_count>15</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-04-25 09:35:33 -0700</bug_when>
    <thetext>We believe the user experience won&apos;t change because we believe that non-attacker pages don&apos;t reassign the href value after rendering a link element. If we&apos;re right, this policy is the clearest, and maybe even the easiest to specify in the future.

The most likely failure mode we&apos;ve imagined is a page where all the links turn purple because they start out as href=&quot;&quot; and then JavaScript fills in non-empty href values later. (&quot;&quot; is considered visited because it resolves to the current page.)

If we do find pages with links that start out with href=&quot;a.html&quot; and change to href=&quot;b.html&quot;, alternatives we&apos;ve discussed are: (a) throttle style changes triggered by href changes using a timer; (b) unconditionally force a full style recalc for all href changes, even if nothing has changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1530648</commentid>
    <comment_count>16</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-04-26 01:19:26 -0700</bug_when>
    <thetext>Note that href mutations did not reliably produce correct visited styling before this change either, because we didn&apos;t actually invalidate the style. It only worked if some other change triggered a style recalc (like in the test case).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>368116</attachid>
            <date>2019-04-24 03:10:44 -0700</date>
            <delta_ts>2019-04-24 06:04:28 -0700</delta_ts>
            <desc>wip</desc>
            <filename>visited-link-hash-save.patch</filename>
            <type>text/plain</type>
            <size>7831</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjQ0NTM3KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE4NCwxMyArMzE4
NCw2IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZUJhc2VVUkwoKQogCiAgICAgaWYgKCFtX2Jhc2VV
UkwuaXNWYWxpZCgpKQogICAgICAgICBtX2Jhc2VVUkwgPSBVUkwoKTsKLQotICAgIGlmICghZXF1
YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcihvbGRCYXNlVVJMLCBtX2Jhc2VVUkwpKSB7Ci0g
ICAgICAgIC8vIEJhc2UgVVJMIGNoYW5nZSBjaGFuZ2VzIGFueSByZWxhdGl2ZSB2aXNpdGVkIGxp
bmtzLgotICAgICAgICAvLyBGSVhNRTogVGhlcmUgYXJlIG90aGVyIFVSTHMgaW4gdGhlIHRyZWUg
dGhhdCB3b3VsZCBuZWVkIHRvIGJlIHJlLWV2YWx1YXRlZCBvbiBkeW5hbWljIGJhc2UgVVJMIGNo
YW5nZS4gU3R5bGUgc2hvdWxkIGJlIGludmFsaWRhdGVkIHRvby4KLSAgICAgICAgZm9yIChhdXRv
JiBhbmNob3IgOiBkZXNjZW5kYW50c09mVHlwZTxIVE1MQW5jaG9yRWxlbWVudD4oKnRoaXMpKQot
ICAgICAgICAgICAgYW5jaG9yLmludmFsaWRhdGVDYWNoZWRWaXNpdGVkTGlua0hhc2goKTsKLSAg
ICB9CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnNldEJhc2VVUkxPdmVycmlkZShjb25zdCBVUkwmIHVy
bCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5jcHAJKHJldmlzaW9u
IDI0NDUzNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKKyNp
bmNsdWRlICJTVkdBRWxlbWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJTVkdO
YW1lcy5oIgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RvcmUuaCIKQEAgLTQ0LDEyICs0NSwxMiBA
QCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogaW5saW5lIHN0YXRpYyBjb25zdCBBdG9taWNT
dHJpbmcqIGxpbmtBdHRyaWJ1dGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAo
IWVsZW1lbnQuaXNMaW5rKCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICBpZiAoZWxlbWVudC5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiAm
ZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6aHJlZkF0
dHIpOwogICAgIGlmIChlbGVtZW50LmlzU1ZHRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gJmVs
ZW1lbnQuZ2V0QXR0cmlidXRlKFNWR05hbWVzOjpocmVmQXR0ciwgWExpbmtOYW1lczo6aHJlZkF0
dHIpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBWaXNpdGVkTGlu
a1N0YXRlOjpWaXNpdGVkTGlua1N0YXRlKERvY3VtZW50JiBkb2N1bWVudCkKQEAgLTY3LDEzICs2
OCwxMyBAQCB2b2lkIFZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZvCiAgICAgfQog
fQogCi1pbmxpbmUgc3RhdGljIFNoYXJlZFN0cmluZ0hhc2ggbGlua0hhc2hGb3JFbGVtZW50KERv
Y3VtZW50JiBkb2N1bWVudCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKK2lubGluZSBzdGF0aWMg
T3B0aW9uYWw8U2hhcmVkU3RyaW5nSGFzaD4gbGlua0hhc2hGb3JFbGVtZW50KGNvbnN0IEVsZW1l
bnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50PihlbGVtZW50KSkK
ICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxBbmNob3JFbGVtZW50PihlbGVtZW50KS52aXNp
dGVkTGlua0hhc2goKTsKLSAgICBpZiAoY29uc3QgQXRvbWljU3RyaW5nKiBhdHRyaWJ1dGUgPSBs
aW5rQXR0cmlidXRlKGVsZW1lbnQpKQotICAgICAgICByZXR1cm4gY29tcHV0ZVZpc2l0ZWRMaW5r
SGFzaChkb2N1bWVudC5iYXNlVVJMKCksICphdHRyaWJ1dGUpOwotICAgIHJldHVybiAwOworICAg
IGlmIChpczxTVkdBRWxlbWVudD4oZWxlbWVudCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxT
VkdBRWxlbWVudD4oZWxlbWVudCkudmlzaXRlZExpbmtIYXNoKCk7CisgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIH0KIAogdm9pZCBWaXNpdGVkTGlua1N0YXRlOjppbnZhbGlkYXRlU3R5bGVGb3JM
aW5rKFNoYXJlZFN0cmluZ0hhc2ggbGlua0hhc2gpCkBAIC04MSw3ICs4Miw3IEBAIHZvaWQgVmlz
aXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm8KICAgICBpZiAoIW1fbGlua3NDaGVja2Vk
Rm9yVmlzaXRlZFN0YXRlLmNvbnRhaW5zKGxpbmtIYXNoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGZvciAoYXV0byYgZWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KG1fZG9jdW1l
bnQpKSB7Ci0gICAgICAgIGlmIChsaW5rSGFzaEZvckVsZW1lbnQobV9kb2N1bWVudCwgZWxlbWVu
dCkgPT0gbGlua0hhc2gpCisgICAgICAgIGlmIChsaW5rSGFzaEZvckVsZW1lbnQoZWxlbWVudCkg
PT0gbGlua0hhc2gpCiAgICAgICAgICAgICBlbGVtZW50LmludmFsaWRhdGVTdHlsZUZvclN1YnRy
ZWUoKTsKICAgICB9CiB9CkBAIC05NCwxOSArOTUsMTcgQEAgSW5zaWRlTGluayBWaXNpdGVkTGlu
a1N0YXRlOjpkZXRlcm1pbmVMaQogICAgIGlmICghYXR0cmlidXRlIHx8IGF0dHJpYnV0ZS0+aXNO
dWxsKCkpCiAgICAgICAgIHJldHVybiBJbnNpZGVMaW5rOjpOb3RJbnNpZGU7CiAKLSAgICAvLyBB
biBlbXB0eSBocmVmIHJlZmVycyB0byB0aGUgZG9jdW1lbnQgaXRzZWxmIHdoaWNoIGlzIGFsd2F5
cyB2aXNpdGVkLiBJdCBpcyB1c2VmdWwgdG8gY2hlY2sgdGhpcyBleHBsaWNpdGx5IHNvCi0gICAg
Ly8gdGhhdCB2aXNpdGVkIGxpbmtzIGNhbiBiZSB0ZXN0ZWQgaW4gcGxhdGZvcm0gaW5kZXBlbmRl
bnQgbWFubmVyLCB3aXRob3V0IGV4cGxpY2l0IHN1cHBvcnQgaW4gdGhlIHRlc3QgaGFybmVzcy4K
LSAgICBpZiAoYXR0cmlidXRlLT5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBJbnNpZGVMaW5r
OjpJbnNpZGVWaXNpdGVkOworICAgIGF1dG8gaGFzaElmRm91bmQgPSBsaW5rSGFzaEZvckVsZW1l
bnQoZWxlbWVudCk7CiAKLSAgICBTaGFyZWRTdHJpbmdIYXNoIGhhc2g7Ci0gICAgaWYgKGlzPEhU
TUxBbmNob3JFbGVtZW50PihlbGVtZW50KSkKLSAgICAgICAgaGFzaCA9IGRvd25jYXN0PEhUTUxB
bmNob3JFbGVtZW50PihlbGVtZW50KS52aXNpdGVkTGlua0hhc2goKTsKLSAgICBlbHNlCi0gICAg
ICAgIGhhc2ggPSBjb21wdXRlVmlzaXRlZExpbmtIYXNoKGVsZW1lbnQuZG9jdW1lbnQoKS5iYXNl
VVJMKCksICphdHRyaWJ1dGUpOworICAgIGlmICghaGFzaElmRm91bmQpCisgICAgICAgIHJldHVy
biBhdHRyaWJ1dGUtPmlzRW1wdHkoKSA/IEluc2lkZUxpbms6Okluc2lkZVZpc2l0ZWQgOiBJbnNp
ZGVMaW5rOjpJbnNpZGVVbnZpc2l0ZWQ7CisKKyAgICBhdXRvIGhhc2ggPSAqaGFzaElmRm91bmQ7
CiAKKyAgICAvLyBBbiBlbXB0eSBocmVmIChoYXNoPT0wKSByZWZlcnMgdG8gdGhlIGRvY3VtZW50
IGl0c2VsZiB3aGljaCBpcyBhbHdheXMgdmlzaXRlZC4gSXQgaXMgdXNlZnVsIHRvIGNoZWNrIHRo
aXMgZXhwbGljaXRseSBzbworICAgIC8vIHRoYXQgdmlzaXRlZCBsaW5rcyBjYW4gYmUgdGVzdGVk
IGluIHBsYXRmb3JtIGluZGVwZW5kZW50IG1hbm5lciwgd2l0aG91dCBleHBsaWNpdCBzdXBwb3J0
IGluIHRoZSB0ZXN0IGhhcm5lc3MuCiAgICAgaWYgKCFoYXNoKQotICAgICAgICByZXR1cm4gSW5z
aWRlTGluazo6SW5zaWRlVW52aXNpdGVkOworICAgICAgICByZXR1cm4gSW5zaWRlTGluazo6SW5z
aWRlVmlzaXRlZDsKIAogICAgIEZyYW1lKiBmcmFtZSA9IGVsZW1lbnQuZG9jdW1lbnQoKS5mcmFt
ZSgpOwogICAgIGlmICghZnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNo
b3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNo
b3JFbGVtZW50LmNwcAkocmV2aXNpb24gMjQ0NTM3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQW5jaG9yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDYgQEAgSFRN
TEFuY2hvckVsZW1lbnQ6OkhUTUxBbmNob3JFbGVtZW50KGNvbgogICAgIDogSFRNTEVsZW1lbnQo
dGFnTmFtZSwgZG9jdW1lbnQpCiAgICAgLCBtX2hhc1Jvb3RFZGl0YWJsZUVsZW1lbnRGb3JTZWxl
Y3Rpb25Pbk1vdXNlRG93bihmYWxzZSkKICAgICAsIG1fd2FzU2hpZnRLZXlEb3duT25Nb3VzZURv
d24oZmFsc2UpCi0gICAgLCBtX2NhY2hlZFZpc2l0ZWRMaW5rSGFzaCgwKQogewogfQogCkBAIC0y
NDgsNyArMjQ3LDYgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoYwog
ICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLmZyYW1lKCktPmxvYWRlcigpLmNsaWVudCgp
LnByZWZldGNoRE5TKGRvY3VtZW50KCkuY29tcGxldGVVUkwocGFyc2VkVVJMKS5ob3N0KCkudG9T
dHJpbmcoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaW52YWxpZGF0ZUNh
Y2hlZFZpc2l0ZWRMaW5rSGFzaCgpOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBuYW1lQXR0ciB8
fCBuYW1lID09IHRpdGxlQXR0cikgewogICAgICAgICAvLyBEbyBub3RoaW5nLgogICAgIH0gZWxz
ZSBpZiAobmFtZSA9PSByZWxBdHRyKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxB
bmNob3JFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5j
aG9yRWxlbWVudC5oCShyZXZpc2lvbiAyNDQ1MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBbmNob3JFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDYgQEAgcHVibGlj
OgogICAgIGJvb2wgaGFzUmVsKFJlbGF0aW9uKSBjb25zdDsKICAgICAKICAgICBTaGFyZWRTdHJp
bmdIYXNoIHZpc2l0ZWRMaW5rSGFzaCgpIGNvbnN0OwotICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hl
ZFZpc2l0ZWRMaW5rSGFzaCgpIHsgbV9jYWNoZWRWaXNpdGVkTGlua0hhc2ggPSAwOyB9CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCBET01Ub2tlbkxpc3QmIHJlbExpc3QoKSBjb25zdDsKIApAQCAtMTE1
LDcgKzExNCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc1Jvb3RFZGl0YWJsZUVsZW1lbnRG
b3JTZWxlY3Rpb25Pbk1vdXNlRG93bjsKICAgICBib29sIG1fd2FzU2hpZnRLZXlEb3duT25Nb3Vz
ZURvd247CiAgICAgT3B0aW9uU2V0PFJlbGF0aW9uPiBtX2xpbmtSZWxhdGlvbnM7Ci0gICAgbXV0
YWJsZSBTaGFyZWRTdHJpbmdIYXNoIG1fY2FjaGVkVmlzaXRlZExpbmtIYXNoOworICAgIG11dGFi
bGUgT3B0aW9uYWw8U2hhcmVkU3RyaW5nSGFzaD4gbV9jYWNoZWRWaXNpdGVkTGlua0hhc2g7CiAK
ICAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxET01Ub2tlbkxpc3Q+IG1fcmVsTGlzdDsKIH07
CkBAIC0xMjQsNyArMTIzLDcgQEAgaW5saW5lIFNoYXJlZFN0cmluZ0hhc2ggSFRNTEFuY2hvckVs
ZW1lbgogewogICAgIGlmICghbV9jYWNoZWRWaXNpdGVkTGlua0hhc2gpCiAgICAgICAgIG1fY2Fj
aGVkVmlzaXRlZExpbmtIYXNoID0gY29tcHV0ZVZpc2l0ZWRMaW5rSGFzaChkb2N1bWVudCgpLmJh
c2VVUkwoKSwgYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OmhyZWZB
dHRyKSk7Ci0gICAgcmV0dXJuIG1fY2FjaGVkVmlzaXRlZExpbmtIYXNoOyAKKyAgICByZXR1cm4g
Km1fY2FjaGVkVmlzaXRlZExpbmtIYXNoOyAKIH0KIAogLy8gRnVuY3Rpb25zIHNoYXJlZCB3aXRo
IHRoZSBvdGhlciBhbmNob3IgZWxlbWVudHMgKGkuZS4sIFNWRykuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBRWxlbWVudC5jcHAJKHJldmlzaW9uIDI0NDUzNykKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNyw0ICsyMTcsMTEgQEAgYm9v
bCBTVkdBRWxlbWVudDo6d2lsbFJlc3BvbmRUb01vdXNlQ2xpYwogICAgIHJldHVybiBpc0xpbmso
KSB8fCBTVkdHcmFwaGljc0VsZW1lbnQ6OndpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCk7
IAogfQogCitTaGFyZWRTdHJpbmdIYXNoIFNWR0FFbGVtZW50Ojp2aXNpdGVkTGlua0hhc2goKSBj
b25zdAoreworICAgIGlmICghbV9jYWNoZWRWaXNpdGVkTGlua0hhc2gpCisgICAgICAgIG1fY2Fj
aGVkVmlzaXRlZExpbmtIYXNoID0gY29tcHV0ZVZpc2l0ZWRMaW5rSGFzaChkb2N1bWVudCgpLmJh
c2VVUkwoKSwgZ2V0QXR0cmlidXRlKFNWR05hbWVzOjpocmVmQXR0ciwgWExpbmtOYW1lczo6aHJl
ZkF0dHIpKTsKKyAgICByZXR1cm4gKm1fY2FjaGVkVmlzaXRlZExpbmtIYXNoOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuaAkocmV2aXNp
b24gMjQ0NTM3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDYgKzIyLDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJTaGFy
ZWRTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5o
IgogI2luY2x1ZGUgIlNWR0dyYXBoaWNzRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1VSSVJlZmVy
ZW5jZS5oIgpAQCAtMzYsNiArMzcsOCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHRhcmdldCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fdGFyZ2V0LT5jdXJyZW50VmFsdWUoKTsgfQogICAgIFJlZjxT
VkdBbmltYXRlZFN0cmluZz4mIHRhcmdldEFuaW1hdGVkKCkgeyByZXR1cm4gbV90YXJnZXQ7IH0K
IAorICAgIFNoYXJlZFN0cmluZ0hhc2ggdmlzaXRlZExpbmtIYXNoKCkgY29uc3Q7CisKIHByaXZh
dGU6CiAgICAgU1ZHQUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAK
QEAgLTYzLDYgKzY2LDcgQEAgcHJpdmF0ZToKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9w
ZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1fdGFy
Z2V0IHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OworICAgIG11dGFibGUgT3B0
aW9uYWw8U2hhcmVkU3RyaW5nSGFzaD4gbV9jYWNoZWRWaXNpdGVkTGlua0hhc2g7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>368121</attachid>
            <date>2019-04-24 06:04:28 -0700</date>
            <delta_ts>2019-04-24 07:35:20 -0700</delta_ts>
            <desc>patch</desc>
            <filename>visited-link-hash-save-2.patch</filename>
            <type>text/plain</type>
            <size>12698</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NDU4NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDIwMTktMDQtMjQgIEFudHRp
IEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFZpc2l0ZWQgbGluayBoYXMg
c2hvdWxkIG5vdCBiZSBtdXRhdGVkIGFmdGVyIGl0IGhhcyBiZWVuIGNvbXB1dGVkCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTcyMjkKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzQ4NDM4OTI0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRlc3Q6IGZhc3QvaGlzdG9yeS92aXNpdGVkLWhyZWYtbXV0YXRp
b24uaHRtbAorCisgICAgICAgIFZpc2l0ZWQgbGluayBzdHlsZSBpcyBub3cgYmFzZWQgb24gdGhl
IGZpcnN0IHRhcmdldCBVUkwgb2YgdGhlIGxpbmsgZWxlbWVudC4gRnVydGhlciBocmVmIG11dGF0
aW9ucyBkb24ndCBhZmZlY3Qgc3R5bGluZy4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlQmFzZVVSTCk6CisgICAgICAgICog
ZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlua0F0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpsaW5rSGFzaEZvckVsZW1lbnQpOgorCisgICAgICAgIFZp
c2l0ZWQgbGluayBzdXBwb3J0IGlzIG5vdyBsaW1pdGVkIHRvIEhUTUwgYW5kIFNWRyA8YT4gZWxl
bWVudHMuCisKKyAgICAgICAgKFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVT
dHlsZUZvckxpbmspOgorICAgICAgICAoV2ViQ29yZTo6VmlzaXRlZExpbmtTdGF0ZTo6ZGV0ZXJt
aW5lTGlua1N0YXRlU2xvd0Nhc2UpOgorICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OkhUTUxBbmNob3JFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZSk6CisgICAgICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnZpc2l0ZWRMaW5rSGFzaCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6aW52YWxpZGF0ZUNhY2hlZFZpc2l0ZWRMaW5rSGFz
aCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0FFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FFbGVtZW50Ojp2aXNpdGVkTGlua0hhc2ggY29uc3QpOgorICAgICAgICAqIHN2
Zy9TVkdBRWxlbWVudC5oOgorCiAyMDE5LTA0LTI0ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1h
bmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1N0cmVhbWVyXSBDcmFzaCBpbiBBdWRpb1RyYWNr
UHJpdmF0ZSB3aXRoIHBsYXliaW4zIGVuYWJsZWQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAkocmV2aXNpb24gMjQ0NTM3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzE4NCwxMyArMzE4NCw2IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0
ZUJhc2VVUkwoKQogCiAgICAgaWYgKCFtX2Jhc2VVUkwuaXNWYWxpZCgpKQogICAgICAgICBtX2Jh
c2VVUkwgPSBVUkwoKTsKLQotICAgIGlmICghZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmll
cihvbGRCYXNlVVJMLCBtX2Jhc2VVUkwpKSB7Ci0gICAgICAgIC8vIEJhc2UgVVJMIGNoYW5nZSBj
aGFuZ2VzIGFueSByZWxhdGl2ZSB2aXNpdGVkIGxpbmtzLgotICAgICAgICAvLyBGSVhNRTogVGhl
cmUgYXJlIG90aGVyIFVSTHMgaW4gdGhlIHRyZWUgdGhhdCB3b3VsZCBuZWVkIHRvIGJlIHJlLWV2
YWx1YXRlZCBvbiBkeW5hbWljIGJhc2UgVVJMIGNoYW5nZS4gU3R5bGUgc2hvdWxkIGJlIGludmFs
aWRhdGVkIHRvby4KLSAgICAgICAgZm9yIChhdXRvJiBhbmNob3IgOiBkZXNjZW5kYW50c09mVHlw
ZTxIVE1MQW5jaG9yRWxlbWVudD4oKnRoaXMpKQotICAgICAgICAgICAgYW5jaG9yLmludmFsaWRh
dGVDYWNoZWRWaXNpdGVkTGlua0hhc2goKTsKLSAgICB9CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnNl
dEJhc2VVUkxPdmVycmlkZShjb25zdCBVUkwmIHVybCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9WaXNpdGVkTGlua1N0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
VmlzaXRlZExpbmtTdGF0ZS5jcHAJKHJldmlzaW9uIDI0NDUzNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9WaXNpdGVkTGlua1N0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBA
QAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKICNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU1ZHQUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdO
YW1lcy5oIgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RvcmUuaCIKICNpbmNsdWRlICJYTGlua05h
bWVzLmgiCkBAIC00NCwxMiArNDUsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIGlu
bGluZSBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nKiBsaW5rQXR0cmlidXRlKGNvbnN0IEVsZW1l
bnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKCFlbGVtZW50LmlzTGluaygpKQotICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKGVsZW1lbnQuaXNIVE1MRWxl
bWVudCgpKQogICAgICAgICByZXR1cm4gJmVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihIVE1MTmFtZXM6OmhyZWZBdHRyKTsKICAgICBpZiAoZWxlbWVudC5pc1NWR0VsZW1l
bnQoKSkKICAgICAgICAgcmV0dXJuICZlbGVtZW50LmdldEF0dHJpYnV0ZShTVkdOYW1lczo6aHJl
ZkF0dHIsIFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAogVmlzaXRlZExpbmtTdGF0ZTo6VmlzaXRlZExpbmtTdGF0ZShEb2N1bWVu
dCYgZG9jdW1lbnQpCkBAIC02NywxMyArNjgsMTMgQEAgdm9pZCBWaXNpdGVkTGlua1N0YXRlOjpp
bnZhbGlkYXRlU3R5bGVGbwogICAgIH0KIH0KIAotaW5saW5lIHN0YXRpYyBTaGFyZWRTdHJpbmdI
YXNoIGxpbmtIYXNoRm9yRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IEVsZW1lbnQm
IGVsZW1lbnQpCitpbmxpbmUgc3RhdGljIE9wdGlvbmFsPFNoYXJlZFN0cmluZ0hhc2g+IGxpbmtI
YXNoRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmIChpczxIVE1M
QW5jaG9yRWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MQW5j
aG9yRWxlbWVudD4oZWxlbWVudCkudmlzaXRlZExpbmtIYXNoKCk7Ci0gICAgaWYgKGNvbnN0IEF0
b21pY1N0cmluZyogYXR0cmlidXRlID0gbGlua0F0dHJpYnV0ZShlbGVtZW50KSkKLSAgICAgICAg
cmV0dXJuIGNvbXB1dGVWaXNpdGVkTGlua0hhc2goZG9jdW1lbnQuYmFzZVVSTCgpLCAqYXR0cmli
dXRlKTsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoaXM8U1ZHQUVsZW1lbnQ+KGVsZW1lbnQpKQor
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHQUVsZW1lbnQ+KGVsZW1lbnQpLnZpc2l0ZWRMaW5r
SGFzaCgpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIHZvaWQgVmlzaXRlZExpbmtT
dGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm9yTGluayhTaGFyZWRTdHJpbmdIYXNoIGxpbmtIYXNoKQpA
QCAtODEsNyArODIsNyBAQCB2b2lkIFZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZv
CiAgICAgaWYgKCFtX2xpbmtzQ2hlY2tlZEZvclZpc2l0ZWRTdGF0ZS5jb250YWlucyhsaW5rSGFz
aCkpCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBkZXNjZW5kYW50
c09mVHlwZTxFbGVtZW50PihtX2RvY3VtZW50KSkgewotICAgICAgICBpZiAobGlua0hhc2hGb3JF
bGVtZW50KG1fZG9jdW1lbnQsIGVsZW1lbnQpID09IGxpbmtIYXNoKQorICAgICAgICBpZiAobGlu
a0hhc2hGb3JFbGVtZW50KGVsZW1lbnQpID09IGxpbmtIYXNoKQogICAgICAgICAgICAgZWxlbWVu
dC5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgfQogfQpAQCAtOTQsMTkgKzk1LDE3
IEBAIEluc2lkZUxpbmsgVmlzaXRlZExpbmtTdGF0ZTo6ZGV0ZXJtaW5lTGkKICAgICBpZiAoIWF0
dHJpYnV0ZSB8fCBhdHRyaWJ1dGUtPmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gSW5zaWRlTGlu
azo6Tm90SW5zaWRlOwogCi0gICAgLy8gQW4gZW1wdHkgaHJlZiByZWZlcnMgdG8gdGhlIGRvY3Vt
ZW50IGl0c2VsZiB3aGljaCBpcyBhbHdheXMgdmlzaXRlZC4gSXQgaXMgdXNlZnVsIHRvIGNoZWNr
IHRoaXMgZXhwbGljaXRseSBzbwotICAgIC8vIHRoYXQgdmlzaXRlZCBsaW5rcyBjYW4gYmUgdGVz
dGVkIGluIHBsYXRmb3JtIGluZGVwZW5kZW50IG1hbm5lciwgd2l0aG91dCBleHBsaWNpdCBzdXBw
b3J0IGluIHRoZSB0ZXN0IGhhcm5lc3MuCi0gICAgaWYgKGF0dHJpYnV0ZS0+aXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gSW5zaWRlTGluazo6SW5zaWRlVmlzaXRlZDsKKyAgICBhdXRvIGhhc2hJ
ZkZvdW5kID0gbGlua0hhc2hGb3JFbGVtZW50KGVsZW1lbnQpOwogCi0gICAgU2hhcmVkU3RyaW5n
SGFzaCBoYXNoOwotICAgIGlmIChpczxIVE1MQW5jaG9yRWxlbWVudD4oZWxlbWVudCkpCi0gICAg
ICAgIGhhc2ggPSBkb3duY2FzdDxIVE1MQW5jaG9yRWxlbWVudD4oZWxlbWVudCkudmlzaXRlZExp
bmtIYXNoKCk7Ci0gICAgZWxzZQotICAgICAgICBoYXNoID0gY29tcHV0ZVZpc2l0ZWRMaW5rSGFz
aChlbGVtZW50LmRvY3VtZW50KCkuYmFzZVVSTCgpLCAqYXR0cmlidXRlKTsKKyAgICBpZiAoIWhh
c2hJZkZvdW5kKQorICAgICAgICByZXR1cm4gYXR0cmlidXRlLT5pc0VtcHR5KCkgPyBJbnNpZGVM
aW5rOjpJbnNpZGVWaXNpdGVkIDogSW5zaWRlTGluazo6SW5zaWRlVW52aXNpdGVkOworCisgICAg
YXV0byBoYXNoID0gKmhhc2hJZkZvdW5kOwogCisgICAgLy8gQW4gZW1wdHkgaHJlZiAoaGFzaD09
MCkgcmVmZXJzIHRvIHRoZSBkb2N1bWVudCBpdHNlbGYgd2hpY2ggaXMgYWx3YXlzIHZpc2l0ZWQu
IEl0IGlzIHVzZWZ1bCB0byBjaGVjayB0aGlzIGV4cGxpY2l0bHkgc28KKyAgICAvLyB0aGF0IHZp
c2l0ZWQgbGlua3MgY2FuIGJlIHRlc3RlZCBpbiBwbGF0Zm9ybSBpbmRlcGVuZGVudCBtYW5uZXIs
IHdpdGhvdXQgZXhwbGljaXQgc3VwcG9ydCBpbiB0aGUgdGVzdCBoYXJuZXNzLgogICAgIGlmICgh
aGFzaCkKLSAgICAgICAgcmV0dXJuIEluc2lkZUxpbms6Okluc2lkZVVudmlzaXRlZDsKKyAgICAg
ICAgcmV0dXJuIEluc2lkZUxpbms6Okluc2lkZVZpc2l0ZWQ7CiAKICAgICBGcmFtZSogZnJhbWUg
PSBlbGVtZW50LmRvY3VtZW50KCkuZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDI0NDUzNykK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02OCw3ICs2OCw2IEBAIEhUTUxBbmNob3JFbGVtZW50OjpIVE1MQW5jaG9yRWxlbWVu
dChjb24KICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQogICAgICwgbV9oYXNS
b290RWRpdGFibGVFbGVtZW50Rm9yU2VsZWN0aW9uT25Nb3VzZURvd24oZmFsc2UpCiAgICAgLCBt
X3dhc1NoaWZ0S2V5RG93bk9uTW91c2VEb3duKGZhbHNlKQotICAgICwgbV9jYWNoZWRWaXNpdGVk
TGlua0hhc2goMCkKIHsKIH0KIApAQCAtMjQ4LDcgKzI0Nyw2IEBAIHZvaWQgSFRNTEFuY2hvckVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGMKICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS5m
cmFtZSgpLT5sb2FkZXIoKS5jbGllbnQoKS5wcmVmZXRjaEROUyhkb2N1bWVudCgpLmNvbXBsZXRl
VVJMKHBhcnNlZFVSTCkuaG9zdCgpLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGludmFsaWRhdGVDYWNoZWRWaXNpdGVkTGlua0hhc2goKTsKICAgICB9IGVs
c2UgaWYgKG5hbWUgPT0gbmFtZUF0dHIgfHwgbmFtZSA9PSB0aXRsZUF0dHIpIHsKICAgICAgICAg
Ly8gRG8gbm90aGluZy4KICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gcmVsQXR0cikgewpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuaAkocmV2aXNpb24gMjQ0NTM3KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Niw3ICs2Niw2IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1JlbChSZWxhdGlvbikgY29u
c3Q7CiAgICAgCiAgICAgU2hhcmVkU3RyaW5nSGFzaCB2aXNpdGVkTGlua0hhc2goKSBjb25zdDsK
LSAgICB2b2lkIGludmFsaWRhdGVDYWNoZWRWaXNpdGVkTGlua0hhc2goKSB7IG1fY2FjaGVkVmlz
aXRlZExpbmtIYXNoID0gMDsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgRE9NVG9rZW5MaXN0JiBy
ZWxMaXN0KCkgY29uc3Q7CiAKQEAgLTExNSwxNiArMTE0LDE4IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2hhc1Jvb3RFZGl0YWJsZUVsZW1lbnRGb3JTZWxlY3Rpb25Pbk1vdXNlRG93bjsKICAgICBi
b29sIG1fd2FzU2hpZnRLZXlEb3duT25Nb3VzZURvd247CiAgICAgT3B0aW9uU2V0PFJlbGF0aW9u
PiBtX2xpbmtSZWxhdGlvbnM7Ci0gICAgbXV0YWJsZSBTaGFyZWRTdHJpbmdIYXNoIG1fY2FjaGVk
VmlzaXRlZExpbmtIYXNoOworCisgICAgLy8gVGhpcyBpcyBjb21wdXRlZCBvbmx5IG9uY2UgYW5k
IG11c3Qgbm90IGJlIGFmZmVjdGVkIGJ5IHN1YnNlcXVlbnQgVVJMIGNoYW5nZXMuCisgICAgbXV0
YWJsZSBPcHRpb25hbDxTaGFyZWRTdHJpbmdIYXNoPiBtX3N0b3JlZFZpc2l0ZWRMaW5rSGFzaDsK
IAogICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPERPTVRva2VuTGlzdD4gbV9yZWxMaXN0Owog
fTsKIAogaW5saW5lIFNoYXJlZFN0cmluZ0hhc2ggSFRNTEFuY2hvckVsZW1lbnQ6OnZpc2l0ZWRM
aW5rSGFzaCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2NhY2hlZFZpc2l0ZWRMaW5rSGFzaCkKLSAg
ICAgICAgbV9jYWNoZWRWaXNpdGVkTGlua0hhc2ggPSBjb21wdXRlVmlzaXRlZExpbmtIYXNoKGRv
Y3VtZW50KCkuYmFzZVVSTCgpLCBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxO
YW1lczo6aHJlZkF0dHIpKTsKLSAgICByZXR1cm4gbV9jYWNoZWRWaXNpdGVkTGlua0hhc2g7IAor
ICAgIGlmICghbV9zdG9yZWRWaXNpdGVkTGlua0hhc2gpCisgICAgICAgIG1fc3RvcmVkVmlzaXRl
ZExpbmtIYXNoID0gY29tcHV0ZVZpc2l0ZWRMaW5rSGFzaChkb2N1bWVudCgpLmJhc2VVUkwoKSwg
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OmhyZWZBdHRyKSk7Cisg
ICAgcmV0dXJuICptX3N0b3JlZFZpc2l0ZWRMaW5rSGFzaDsKIH0KIAogLy8gRnVuY3Rpb25zIHNo
YXJlZCB3aXRoIHRoZSBvdGhlciBhbmNob3IgZWxlbWVudHMgKGkuZS4sIFNWRykuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5jcHAJKHJldmlzaW9uIDI0NDUzNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNyw0ICsyMTcs
MTEgQEAgYm9vbCBTVkdBRWxlbWVudDo6d2lsbFJlc3BvbmRUb01vdXNlQ2xpYwogICAgIHJldHVy
biBpc0xpbmsoKSB8fCBTVkdHcmFwaGljc0VsZW1lbnQ6OndpbGxSZXNwb25kVG9Nb3VzZUNsaWNr
RXZlbnRzKCk7IAogfQogCitTaGFyZWRTdHJpbmdIYXNoIFNWR0FFbGVtZW50Ojp2aXNpdGVkTGlu
a0hhc2goKSBjb25zdAoreworICAgIGlmICghbV9zdG9yZWRWaXNpdGVkTGlua0hhc2gpCisgICAg
ICAgIG1fc3RvcmVkVmlzaXRlZExpbmtIYXNoID0gY29tcHV0ZVZpc2l0ZWRMaW5rSGFzaChkb2N1
bWVudCgpLmJhc2VVUkwoKSwgZ2V0QXR0cmlidXRlKFNWR05hbWVzOjpocmVmQXR0ciwgWExpbmtO
YW1lczo6aHJlZkF0dHIpKTsKKyAgICByZXR1cm4gKm1fc3RvcmVkVmlzaXRlZExpbmtIYXNoOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQu
aAkocmV2aXNpb24gMjQ0NTM3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkLmgiCiAjaW5jbHVkZSAiU1ZHR3JhcGhpY3NFbGVtZW50LmgiCiAjaW5j
bHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiU2hhcmVkU3RyaW5nSGFzaC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM2LDYgKzM3LDggQEAgcHVibGljOgogICAgIFN0
cmluZyB0YXJnZXQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3RhcmdldC0+Y3VycmVudFZhbHVl
KCk7IH0KICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+JiB0YXJnZXRBbmltYXRlZCgpIHsgcmV0
dXJuIG1fdGFyZ2V0OyB9CiAKKyAgICBTaGFyZWRTdHJpbmdIYXNoIHZpc2l0ZWRMaW5rSGFzaCgp
IGNvbnN0OworCiBwcml2YXRlOgogICAgIFNWR0FFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCYpOwogCkBAIC02Myw2ICs2Niw5IEBAIHByaXZhdGU6CiAKICAgICBQcm9wZXJ0
eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1h
dGVkU3RyaW5nPiBtX3RhcmdldCB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsK
KworICAgIC8vIFRoaXMgaXMgY29tcHV0ZWQgb25seSBvbmNlIGFuZCBtdXN0IG5vdCBiZSBhZmZl
Y3RlZCBieSBzdWJzZXF1ZW50IFVSTCBjaGFuZ2VzLgorICAgIG11dGFibGUgT3B0aW9uYWw8U2hh
cmVkU3RyaW5nSGFzaD4gbV9zdG9yZWRWaXNpdGVkTGlua0hhc2g7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDQ1MzcpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxOS0wNC0yNCAgQW50
dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgVmlzaXRlZCBsaW5rIGhh
cyBzaG91bGQgbm90IGJlIG11dGF0ZWQgYWZ0ZXIgaXQgaGFzIGJlZW4gY29tcHV0ZWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzIyOQorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNDg0Mzg5MjQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2hpc3RvcnkvdmlzaXRlZC1ocmVmLW11dGF0aW9u
LWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlzdG9yeS92aXNpdGVkLWhy
ZWYtbXV0YXRpb24uaHRtbDogQWRkZWQuCisKIDIwMTktMDQtMjIgIFphbGFuIEJ1anRhcyAgPHph
bGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29udGVudENoYW5nZU9ic2VydmVyXSBTb21lIGRy
b3Bkb3duIG1lbnVzIG1heSBjbG9zZSB3aXRob3V0IHVzZXIgZ2VzdHVyZSBvbiBhbWVyaWNhbmV4
cHJlc3MuY29tCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvdmlzaXRlZC1ocmVmLW11
dGF0aW9uLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9oaXN0
b3J5L3Zpc2l0ZWQtaHJlZi1tdXRhdGlvbi1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysr
IExheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS92aXNpdGVkLWhyZWYtbXV0YXRpb24tZXhwZWN0ZWQu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExIEBACis8c3R5bGU+CisuZXhwZWN0ZWQt
dmlzaXRlZCB7IGNvbG9yOmdyZWVuIH0KKzwvc3R5bGU+Cis8YSBocmVmPSJkdW1teSIgY2xhc3M9
ImV4cGVjdGVkLXZpc2l0ZWQiPkNhc2UgMTwvYT4KKzxhIGhyZWY9ImR1bW15IiBjbGFzcz0iZXhw
ZWN0ZWQtdmlzaXRlZCI+Q2FzZSAyPC9hPgorPGEgaHJlZj0iZHVtbXkiIGNsYXNzPSIiPkNhc2Ug
MzwvYT4KKzxhIGhyZWY9ImR1bW15IiBjbGFzcz0iIj5DYXNlIDQ8L2E+Cis8YSBocmVmPSJkdW1t
eSIgY2xhc3M9ImV4cGVjdGVkLXZpc2l0ZWQiPkNhc2UgNTwvYT4KKzxhIGhyZWY9ImR1bW15IiBj
bGFzcz0iZXhwZWN0ZWQtdmlzaXRlZCI+Q2FzZSA2PC9hPgorPGEgaHJlZj0iZHVtbXkiIGNsYXNz
PSIiPkNhc2UgNzwvYT4KKzxhIGhyZWY9ImR1bW15IiBjbGFzcz0iIj5DYXNlIDg8L2E+CkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvdmlzaXRlZC1ocmVmLW11dGF0aW9uLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3Zpc2l0ZWQtaHJlZi1tdXRhdGlv
bi5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS92aXNpdGVk
LWhyZWYtbXV0YXRpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RS
dW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgIHRlc3RSdW5uZXIua2VlcFdlYkhpc3RvcnkoKTsK
K30KKworZnVuY3Rpb24gc2V0SHJlZih0ZXN0Y2FzZSwgdXJsKQoreworICAgIHRlc3RjYXNlLnN0
eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAgdGVzdGNhc2UuaHJlZiA9IHVybDsKKyAgICB0ZXN0
Y2FzZS5zdHlsZS5kaXNwbGF5ID0gImlubGluZSI7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQorewor
ICAgIHNldEhyZWYoY2FzZTIsICJyZXNvdXJjZXMvbm90LXZpc2l0ZWQuaHRtbCIpOworICAgIHNl
dEhyZWYoY2FzZTQsICJyZXNvdXJjZXMvZHVtbXkuaHRtbCIpOworICAgIHNldEhyZWYoY2FzZTYs
ICJyZXNvdXJjZXMvbm90LXZpc2l0ZWQuaHRtbCIpOworICAgIHNldEhyZWYoY2FzZTgsICIiKTsK
KworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7Cit9Cis8L3NjcmlwdD4KKzxzdHlsZT4KK2E6dmlzaXRlZCB7IGNvbG9yOiBncmVlbjsg
fQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0idGVzdCgpIj4KKzxkaXY+Cis8YSBp
ZD0iY2FzZTEiIGhyZWY9InJlc291cmNlcy9kdW1teS5odG1sIj5DYXNlIDE8L2E+Cis8YSBpZD0i
Y2FzZTIiIGhyZWY9InJlc291cmNlcy9kdW1teS5odG1sIj5DYXNlIDI8L2E+Cis8YSBpZD0iY2Fz
ZTMiIGhyZWY9InJlc291cmNlcy9ub3QtdmlzaXRlZC5odG1sIj5DYXNlIDM8L2E+Cis8YSBpZD0i
Y2FzZTQiIGhyZWY9InJlc291cmNlcy9ub3QtdmlzaXRlZC5odG1sIj5DYXNlIDQ8L2E+Cis8YSBp
ZD0iY2FzZTUiIGhyZWY9IiI+Q2FzZSA1PC9hPgorPGEgaWQ9ImNhc2U2IiBocmVmPSIiPkNhc2Ug
NjwvYT4KKzxhIGlkPSJjYXNlNyIgaHJlZj0icmVzb3VyY2VzL25vdC12aXNpdGVkLmh0bWwiPkNh
c2UgNzwvYT4KKzxhIGlkPSJjYXNlOCIgaHJlZj0icmVzb3VyY2VzL25vdC12aXNpdGVkLmh0bWwi
PkNhc2UgODwvYT4KKzwvZGl2PgorPGlmcmFtZSBzcmM9InJlc291cmNlcy9kdW1teS5odG1sIiBz
dHlsZT0idmlzaWJpbGl0eTpoaWRkZW4iPjwvaWZyYW1lPgorPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>368122</attachid>
            <date>2019-04-24 07:35:20 -0700</date>
            <delta_ts>2019-04-25 00:36:20 -0700</delta_ts>
            <desc>patch</desc>
            <filename>visited-link-hash-save-3.patch</filename>
            <type>text/plain</type>
            <size>12660</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NDU4NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDIwMTktMDQtMjQgIEFudHRp
IEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFZpc2l0ZWQgbGluayBoYXNo
IHNob3VsZCBiZSBjb21wdXRlZCBvbmx5IG9uY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzIyOQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDg0
Mzg5MjQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGVzdDogZmFzdC9oaXN0b3J5L3Zpc2l0ZWQtaHJlZi1tdXRhdGlvbi5odG1sCisKKyAgICAgICAg
VmlzaXRlZCBsaW5rIHN0eWxlIGlzIG5vdyBiYXNlZCBvbiB0aGUgZmlyc3QgdGFyZ2V0IFVSTCBv
ZiB0aGUgbGluayBlbGVtZW50LiBGdXJ0aGVyIGhyZWYgbXV0YXRpb25zIGRvbid0IGFmZmVjdCBz
dHlsaW5nLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50Ojp1cGRhdGVCYXNlVVJMKToKKyAgICAgICAgKiBkb20vVmlzaXRlZExpbmtTdGF0
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsaW5rQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmxpbmtIYXNoRm9yRWxlbWVudCk6CisKKyAgICAgICAgVmlzaXRlZCBsaW5rIHN1cHBvcnQg
aXMgbm93IGxpbWl0ZWQgdG8gSFRNTCBhbmQgU1ZHIDxhPiBlbGVtZW50cy4KKworICAgICAgICAo
V2ViQ29yZTo6VmlzaXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm9yTGluayk6CisgICAg
ICAgIChXZWJDb3JlOjpWaXNpdGVkTGlua1N0YXRlOjpkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2Fz
ZSk6CisgICAgICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6SFRNTEFuY2hvckVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1s
L0hUTUxBbmNob3JFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVu
dDo6dmlzaXRlZExpbmtIYXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JF
bGVtZW50OjppbnZhbGlkYXRlQ2FjaGVkVmlzaXRlZExpbmtIYXNoKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBzdmcvU1ZHQUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQUVsZW1lbnQ6
OnZpc2l0ZWRMaW5rSGFzaCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0FFbGVtZW50Lmg6CisK
IDIwMTktMDQtMjQgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHU3RyZWFtZXJdIENyYXNoIGluIEF1ZGlvVHJhY2tQcml2YXRlIHdpdGggcGxheWJp
bjMgZW5hYmxlZApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyNDQ1Mzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTg0LDEzICszMTg0LDYgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlQmFzZVVSTCgpCiAKICAgICBp
ZiAoIW1fYmFzZVVSTC5pc1ZhbGlkKCkpCiAgICAgICAgIG1fYmFzZVVSTCA9IFVSTCgpOwotCi0g
ICAgaWYgKCFlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVyKG9sZEJhc2VVUkwsIG1fYmFz
ZVVSTCkpIHsKLSAgICAgICAgLy8gQmFzZSBVUkwgY2hhbmdlIGNoYW5nZXMgYW55IHJlbGF0aXZl
IHZpc2l0ZWQgbGlua3MuCi0gICAgICAgIC8vIEZJWE1FOiBUaGVyZSBhcmUgb3RoZXIgVVJMcyBp
biB0aGUgdHJlZSB0aGF0IHdvdWxkIG5lZWQgdG8gYmUgcmUtZXZhbHVhdGVkIG9uIGR5bmFtaWMg
YmFzZSBVUkwgY2hhbmdlLiBTdHlsZSBzaG91bGQgYmUgaW52YWxpZGF0ZWQgdG9vLgotICAgICAg
ICBmb3IgKGF1dG8mIGFuY2hvciA6IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxBbmNob3JFbGVtZW50
PigqdGhpcykpCi0gICAgICAgICAgICBhbmNob3IuaW52YWxpZGF0ZUNhY2hlZFZpc2l0ZWRMaW5r
SGFzaCgpOwotICAgIH0KIH0KIAogdm9pZCBEb2N1bWVudDo6c2V0QmFzZVVSTE92ZXJyaWRlKGNv
bnN0IFVSTCYgdXJsKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0ZWRMaW5rU3RhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRlLmNw
cAkocmV2aXNpb24gMjQ0NTM3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0ZWRMaW5rU3Rh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJIVE1MQW5jaG9yRWxlbWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNp
bmNsdWRlICJTVkdBRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAi
VmlzaXRlZExpbmtTdG9yZS5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKQEAgLTQ0LDEyICs0
NSwxMiBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogaW5saW5lIHN0YXRpYyBjb25zdCBB
dG9taWNTdHJpbmcqIGxpbmtBdHRyaWJ1dGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAg
ICBpZiAoIWVsZW1lbnQuaXNMaW5rKCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICBpZiAoZWxlbWVudC5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJl
dHVybiAmZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6
aHJlZkF0dHIpOwogICAgIGlmIChlbGVtZW50LmlzU1ZHRWxlbWVudCgpKQogICAgICAgICByZXR1
cm4gJmVsZW1lbnQuZ2V0QXR0cmlidXRlKFNWR05hbWVzOjpocmVmQXR0ciwgWExpbmtOYW1lczo6
aHJlZkF0dHIpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBWaXNp
dGVkTGlua1N0YXRlOjpWaXNpdGVkTGlua1N0YXRlKERvY3VtZW50JiBkb2N1bWVudCkKQEAgLTY3
LDEzICs2OCwxMyBAQCB2b2lkIFZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZvCiAg
ICAgfQogfQogCi1pbmxpbmUgc3RhdGljIFNoYXJlZFN0cmluZ0hhc2ggbGlua0hhc2hGb3JFbGVt
ZW50KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKK2lubGluZSBz
dGF0aWMgT3B0aW9uYWw8U2hhcmVkU3RyaW5nSGFzaD4gbGlua0hhc2hGb3JFbGVtZW50KGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50PihlbGVt
ZW50KSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxBbmNob3JFbGVtZW50PihlbGVtZW50
KS52aXNpdGVkTGlua0hhc2goKTsKLSAgICBpZiAoY29uc3QgQXRvbWljU3RyaW5nKiBhdHRyaWJ1
dGUgPSBsaW5rQXR0cmlidXRlKGVsZW1lbnQpKQotICAgICAgICByZXR1cm4gY29tcHV0ZVZpc2l0
ZWRMaW5rSGFzaChkb2N1bWVudC5iYXNlVVJMKCksICphdHRyaWJ1dGUpOwotICAgIHJldHVybiAw
OworICAgIGlmIChpczxTVkdBRWxlbWVudD4oZWxlbWVudCkpCisgICAgICAgIHJldHVybiBkb3du
Y2FzdDxTVkdBRWxlbWVudD4oZWxlbWVudCkudmlzaXRlZExpbmtIYXNoKCk7CisgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIH0KIAogdm9pZCBWaXNpdGVkTGlua1N0YXRlOjppbnZhbGlkYXRlU3R5
bGVGb3JMaW5rKFNoYXJlZFN0cmluZ0hhc2ggbGlua0hhc2gpCkBAIC04MSw3ICs4Miw3IEBAIHZv
aWQgVmlzaXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm8KICAgICBpZiAoIW1fbGlua3ND
aGVja2VkRm9yVmlzaXRlZFN0YXRlLmNvbnRhaW5zKGxpbmtIYXNoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KG1f
ZG9jdW1lbnQpKSB7Ci0gICAgICAgIGlmIChsaW5rSGFzaEZvckVsZW1lbnQobV9kb2N1bWVudCwg
ZWxlbWVudCkgPT0gbGlua0hhc2gpCisgICAgICAgIGlmIChsaW5rSGFzaEZvckVsZW1lbnQoZWxl
bWVudCkgPT0gbGlua0hhc2gpCiAgICAgICAgICAgICBlbGVtZW50LmludmFsaWRhdGVTdHlsZUZv
clN1YnRyZWUoKTsKICAgICB9CiB9CkBAIC05NCwxOSArOTUsMTcgQEAgSW5zaWRlTGluayBWaXNp
dGVkTGlua1N0YXRlOjpkZXRlcm1pbmVMaQogICAgIGlmICghYXR0cmlidXRlIHx8IGF0dHJpYnV0
ZS0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBJbnNpZGVMaW5rOjpOb3RJbnNpZGU7CiAKLSAg
ICAvLyBBbiBlbXB0eSBocmVmIHJlZmVycyB0byB0aGUgZG9jdW1lbnQgaXRzZWxmIHdoaWNoIGlz
IGFsd2F5cyB2aXNpdGVkLiBJdCBpcyB1c2VmdWwgdG8gY2hlY2sgdGhpcyBleHBsaWNpdGx5IHNv
Ci0gICAgLy8gdGhhdCB2aXNpdGVkIGxpbmtzIGNhbiBiZSB0ZXN0ZWQgaW4gcGxhdGZvcm0gaW5k
ZXBlbmRlbnQgbWFubmVyLCB3aXRob3V0IGV4cGxpY2l0IHN1cHBvcnQgaW4gdGhlIHRlc3QgaGFy
bmVzcy4KLSAgICBpZiAoYXR0cmlidXRlLT5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBJbnNp
ZGVMaW5rOjpJbnNpZGVWaXNpdGVkOworICAgIGF1dG8gaGFzaElmRm91bmQgPSBsaW5rSGFzaEZv
ckVsZW1lbnQoZWxlbWVudCk7CiAKLSAgICBTaGFyZWRTdHJpbmdIYXNoIGhhc2g7Ci0gICAgaWYg
KGlzPEhUTUxBbmNob3JFbGVtZW50PihlbGVtZW50KSkKLSAgICAgICAgaGFzaCA9IGRvd25jYXN0
PEhUTUxBbmNob3JFbGVtZW50PihlbGVtZW50KS52aXNpdGVkTGlua0hhc2goKTsKLSAgICBlbHNl
Ci0gICAgICAgIGhhc2ggPSBjb21wdXRlVmlzaXRlZExpbmtIYXNoKGVsZW1lbnQuZG9jdW1lbnQo
KS5iYXNlVVJMKCksICphdHRyaWJ1dGUpOworICAgIGlmICghaGFzaElmRm91bmQpCisgICAgICAg
IHJldHVybiBhdHRyaWJ1dGUtPmlzRW1wdHkoKSA/IEluc2lkZUxpbms6Okluc2lkZVZpc2l0ZWQg
OiBJbnNpZGVMaW5rOjpJbnNpZGVVbnZpc2l0ZWQ7CisKKyAgICBhdXRvIGhhc2ggPSAqaGFzaElm
Rm91bmQ7CiAKKyAgICAvLyBBbiBlbXB0eSBocmVmIChoYXNoPT0wKSByZWZlcnMgdG8gdGhlIGRv
Y3VtZW50IGl0c2VsZiB3aGljaCBpcyBhbHdheXMgdmlzaXRlZC4gSXQgaXMgdXNlZnVsIHRvIGNo
ZWNrIHRoaXMgZXhwbGljaXRseSBzbworICAgIC8vIHRoYXQgdmlzaXRlZCBsaW5rcyBjYW4gYmUg
dGVzdGVkIGluIHBsYXRmb3JtIGluZGVwZW5kZW50IG1hbm5lciwgd2l0aG91dCBleHBsaWNpdCBz
dXBwb3J0IGluIHRoZSB0ZXN0IGhhcm5lc3MuCiAgICAgaWYgKCFoYXNoKQotICAgICAgICByZXR1
cm4gSW5zaWRlTGluazo6SW5zaWRlVW52aXNpdGVkOworICAgICAgICByZXR1cm4gSW5zaWRlTGlu
azo6SW5zaWRlVmlzaXRlZDsKIAogICAgIEZyYW1lKiBmcmFtZSA9IGVsZW1lbnQuZG9jdW1lbnQo
KS5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBbmNob3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBbmNob3JFbGVtZW50LmNwcAkocmV2aXNpb24gMjQ0NTM3KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDYg
QEAgSFRNTEFuY2hvckVsZW1lbnQ6OkhUTUxBbmNob3JFbGVtZW50KGNvbgogICAgIDogSFRNTEVs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCiAgICAgLCBtX2hhc1Jvb3RFZGl0YWJsZUVsZW1lbnRG
b3JTZWxlY3Rpb25Pbk1vdXNlRG93bihmYWxzZSkKICAgICAsIG1fd2FzU2hpZnRLZXlEb3duT25N
b3VzZURvd24oZmFsc2UpCi0gICAgLCBtX2NhY2hlZFZpc2l0ZWRMaW5rSGFzaCgwKQogewogfQog
CkBAIC0yNDgsNyArMjQ3LDYgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6cGFyc2VBdHRyaWJ1
dGUoYwogICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLmZyYW1lKCktPmxvYWRlcigpLmNs
aWVudCgpLnByZWZldGNoRE5TKGRvY3VtZW50KCkuY29tcGxldGVVUkwocGFyc2VkVVJMKS5ob3N0
KCkudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaW52YWxp
ZGF0ZUNhY2hlZFZpc2l0ZWRMaW5rSGFzaCgpOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBuYW1l
QXR0ciB8fCBuYW1lID09IHRpdGxlQXR0cikgewogICAgICAgICAvLyBEbyBub3RoaW5nLgogICAg
IH0gZWxzZSBpZiAobmFtZSA9PSByZWxBdHRyKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxBbmNob3JFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQW5jaG9yRWxlbWVudC5oCShyZXZpc2lvbiAyNDQ1MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxBbmNob3JFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDYgQEAg
cHVibGljOgogICAgIGJvb2wgaGFzUmVsKFJlbGF0aW9uKSBjb25zdDsKICAgICAKICAgICBTaGFy
ZWRTdHJpbmdIYXNoIHZpc2l0ZWRMaW5rSGFzaCgpIGNvbnN0OwotICAgIHZvaWQgaW52YWxpZGF0
ZUNhY2hlZFZpc2l0ZWRMaW5rSGFzaCgpIHsgbV9jYWNoZWRWaXNpdGVkTGlua0hhc2ggPSAwOyB9
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBET01Ub2tlbkxpc3QmIHJlbExpc3QoKSBjb25zdDsKIApA
QCAtMTE1LDE2ICsxMTQsMTggQEAgcHJpdmF0ZToKICAgICBib29sIG1faGFzUm9vdEVkaXRhYmxl
RWxlbWVudEZvclNlbGVjdGlvbk9uTW91c2VEb3duOwogICAgIGJvb2wgbV93YXNTaGlmdEtleURv
d25Pbk1vdXNlRG93bjsKICAgICBPcHRpb25TZXQ8UmVsYXRpb24+IG1fbGlua1JlbGF0aW9uczsK
LSAgICBtdXRhYmxlIFNoYXJlZFN0cmluZ0hhc2ggbV9jYWNoZWRWaXNpdGVkTGlua0hhc2g7CisK
KyAgICAvLyBUaGlzIGlzIGNvbXB1dGVkIG9ubHkgb25jZSBhbmQgbXVzdCBub3QgYmUgYWZmZWN0
ZWQgYnkgc3Vic2VxdWVudCBVUkwgY2hhbmdlcy4KKyAgICBtdXRhYmxlIE9wdGlvbmFsPFNoYXJl
ZFN0cmluZ0hhc2g+IG1fc3RvcmVkVmlzaXRlZExpbmtIYXNoOwogCiAgICAgbXV0YWJsZSBzdGQ6
OnVuaXF1ZV9wdHI8RE9NVG9rZW5MaXN0PiBtX3JlbExpc3Q7CiB9OwogCiBpbmxpbmUgU2hhcmVk
U3RyaW5nSGFzaCBIVE1MQW5jaG9yRWxlbWVudDo6dmlzaXRlZExpbmtIYXNoKCkgY29uc3QKIHsK
LSAgICBpZiAoIW1fY2FjaGVkVmlzaXRlZExpbmtIYXNoKQotICAgICAgICBtX2NhY2hlZFZpc2l0
ZWRMaW5rSGFzaCA9IGNvbXB1dGVWaXNpdGVkTGlua0hhc2goZG9jdW1lbnQoKS5iYXNlVVJMKCks
IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpocmVmQXR0cikpOwot
ICAgIHJldHVybiBtX2NhY2hlZFZpc2l0ZWRMaW5rSGFzaDsgCisgICAgaWYgKCFtX3N0b3JlZFZp
c2l0ZWRMaW5rSGFzaCkKKyAgICAgICAgbV9zdG9yZWRWaXNpdGVkTGlua0hhc2ggPSBjb21wdXRl
VmlzaXRlZExpbmtIYXNoKGRvY3VtZW50KCkuYmFzZVVSTCgpLCBhdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKEhUTUxOYW1lczo6aHJlZkF0dHIpKTsKKyAgICByZXR1cm4gKm1fc3RvcmVk
VmlzaXRlZExpbmtIYXNoOwogfQogCiAvLyBGdW5jdGlvbnMgc2hhcmVkIHdpdGggdGhlIG90aGVy
IGFuY2hvciBlbGVtZW50cyAoaS5lLiwgU1ZHKS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVt
ZW50LmNwcAkocmV2aXNpb24gMjQ0NTM3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDQgKzIxNywxMSBAQCBib29sIFNWR0FFbGVt
ZW50Ojp3aWxsUmVzcG9uZFRvTW91c2VDbGljCiAgICAgcmV0dXJuIGlzTGluaygpIHx8IFNWR0dy
YXBoaWNzRWxlbWVudDo6d2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKTsgCiB9CiAKK1No
YXJlZFN0cmluZ0hhc2ggU1ZHQUVsZW1lbnQ6OnZpc2l0ZWRMaW5rSGFzaCgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX3N0b3JlZFZpc2l0ZWRMaW5rSGFzaCkKKyAgICAgICAgbV9zdG9yZWRWaXNpdGVk
TGlua0hhc2ggPSBjb21wdXRlVmlzaXRlZExpbmtIYXNoKGRvY3VtZW50KCkuYmFzZVVSTCgpLCBn
ZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhyZWZBdHRyLCBYTGlua05hbWVzOjpocmVmQXR0cikpOwor
ICAgIHJldHVybiAqbV9zdG9yZWRWaXNpdGVkTGlua0hhc2g7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5oCShyZXZpc2lvbiAyNDQ1Mzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIK
ICNpbmNsdWRlICJTVkdHcmFwaGljc0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdVUklSZWZlcmVu
Y2UuaCIKKyNpbmNsdWRlICJTaGFyZWRTdHJpbmdIYXNoLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMzYsNiArMzcsOCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHRhcmdldCgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fdGFyZ2V0LT5jdXJyZW50VmFsdWUoKTsgfQogICAgIFJlZjxTVkdB
bmltYXRlZFN0cmluZz4mIHRhcmdldEFuaW1hdGVkKCkgeyByZXR1cm4gbV90YXJnZXQ7IH0KIAor
ICAgIFNoYXJlZFN0cmluZ0hhc2ggdmlzaXRlZExpbmtIYXNoKCkgY29uc3Q7CisKIHByaXZhdGU6
CiAgICAgU1ZHQUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKQEAg
LTYzLDYgKzY2LDkgQEAgcHJpdmF0ZToKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0
eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1fdGFyZ2V0
IHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OworCisgICAgLy8gVGhpcyBpcyBj
b21wdXRlZCBvbmx5IG9uY2UgYW5kIG11c3Qgbm90IGJlIGFmZmVjdGVkIGJ5IHN1YnNlcXVlbnQg
VVJMIGNoYW5nZXMuCisgICAgbXV0YWJsZSBPcHRpb25hbDxTaGFyZWRTdHJpbmdIYXNoPiBtX3N0
b3JlZFZpc2l0ZWRMaW5rSGFzaDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDI0NDUzNykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE5LTA0LTI0ICBBbnR0aSBLb2l2aXN0byAgPGFudHRp
QGFwcGxlLmNvbT4KKworICAgICAgICBWaXNpdGVkIGxpbmsgaGFzaCBzaG91bGQgYmUgY29tcHV0
ZWQgb25seSBvbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xOTcyMjkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ4NDM4OTI0PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9oaXN0b3J5L3Zp
c2l0ZWQtaHJlZi1tdXRhdGlvbi1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2hpc3RvcnkvdmlzaXRlZC1ocmVmLW11dGF0aW9uLmh0bWw6IEFkZGVkLgorCiAyMDE5LTA0LTIy
ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvbnRlbnRDaGFu
Z2VPYnNlcnZlcl0gU29tZSBkcm9wZG93biBtZW51cyBtYXkgY2xvc2Ugd2l0aG91dCB1c2VyIGdl
c3R1cmUgb24gYW1lcmljYW5leHByZXNzLmNvbQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9oaXN0
b3J5L3Zpc2l0ZWQtaHJlZi1tdXRhdGlvbi1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvaGlzdG9yeS92aXNpdGVkLWhyZWYtbXV0YXRpb24tZXhwZWN0ZWQuaHRt
bAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvdmlzaXRlZC1ocmVm
LW11dGF0aW9uLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMSBAQAor
PHN0eWxlPgorLmV4cGVjdGVkLXZpc2l0ZWQgeyBjb2xvcjpncmVlbiB9Cis8L3N0eWxlPgorPGEg
aHJlZj0iZHVtbXkiIGNsYXNzPSJleHBlY3RlZC12aXNpdGVkIj5DYXNlIDE8L2E+Cis8YSBocmVm
PSJkdW1teSIgY2xhc3M9ImV4cGVjdGVkLXZpc2l0ZWQiPkNhc2UgMjwvYT4KKzxhIGhyZWY9ImR1
bW15IiBjbGFzcz0iIj5DYXNlIDM8L2E+Cis8YSBocmVmPSJkdW1teSIgY2xhc3M9IiI+Q2FzZSA0
PC9hPgorPGEgaHJlZj0iZHVtbXkiIGNsYXNzPSJleHBlY3RlZC12aXNpdGVkIj5DYXNlIDU8L2E+
Cis8YSBocmVmPSJkdW1teSIgY2xhc3M9ImV4cGVjdGVkLXZpc2l0ZWQiPkNhc2UgNjwvYT4KKzxh
IGhyZWY9ImR1bW15IiBjbGFzcz0iIj5DYXNlIDc8L2E+Cis8YSBocmVmPSJkdW1teSIgY2xhc3M9
IiI+Q2FzZSA4PC9hPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3Zpc2l0ZWQtaHJl
Zi1tdXRhdGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS92
aXNpdGVkLWhyZWYtbXV0YXRpb24uaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2hpc3RvcnkvdmlzaXRlZC1ocmVmLW11dGF0aW9uLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MyBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LnRlc3RS
dW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB0ZXN0UnVubmVy
LmtlZXBXZWJIaXN0b3J5KCk7Cit9CisKK2Z1bmN0aW9uIHNldEhyZWYodGVzdGNhc2UsIHVybCkK
K3sKKyAgICB0ZXN0Y2FzZS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgIHRlc3RjYXNlLmhy
ZWYgPSB1cmw7CisgICAgdGVzdGNhc2Uuc3R5bGUuZGlzcGxheSA9ICJpbmxpbmUiOworfQorCitm
dW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBzZXRIcmVmKGNhc2UyLCAicmVzb3VyY2VzL25vdC12aXNp
dGVkLmh0bWwiKTsKKyAgICBzZXRIcmVmKGNhc2U0LCAicmVzb3VyY2VzL2R1bW15Lmh0bWwiKTsK
KyAgICBzZXRIcmVmKGNhc2U2LCAicmVzb3VyY2VzL25vdC12aXNpdGVkLmh0bWwiKTsKKyAgICBz
ZXRIcmVmKGNhc2U4LCAiIik7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQorPC9zY3JpcHQ+Cis8c3R5bGU+CithOnZpc2l0
ZWQgeyBjb2xvcjogZ3JlZW47IH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InRl
c3QoKSI+Cis8ZGl2PgorPGEgaWQ9ImNhc2UxIiBocmVmPSJyZXNvdXJjZXMvZHVtbXkuaHRtbCI+
Q2FzZSAxPC9hPgorPGEgaWQ9ImNhc2UyIiBocmVmPSJyZXNvdXJjZXMvZHVtbXkuaHRtbCI+Q2Fz
ZSAyPC9hPgorPGEgaWQ9ImNhc2UzIiBocmVmPSJyZXNvdXJjZXMvbm90LXZpc2l0ZWQuaHRtbCI+
Q2FzZSAzPC9hPgorPGEgaWQ9ImNhc2U0IiBocmVmPSJyZXNvdXJjZXMvbm90LXZpc2l0ZWQuaHRt
bCI+Q2FzZSA0PC9hPgorPGEgaWQ9ImNhc2U1IiBocmVmPSIiPkNhc2UgNTwvYT4KKzxhIGlkPSJj
YXNlNiIgaHJlZj0iIj5DYXNlIDY8L2E+Cis8YSBpZD0iY2FzZTciIGhyZWY9InJlc291cmNlcy9u
b3QtdmlzaXRlZC5odG1sIj5DYXNlIDc8L2E+Cis8YSBpZD0iY2FzZTgiIGhyZWY9InJlc291cmNl
cy9ub3QtdmlzaXRlZC5odG1sIj5DYXNlIDg8L2E+Cis8L2Rpdj4KKzxpZnJhbWUgc3JjPSJyZXNv
dXJjZXMvZHVtbXkuaHRtbCIgc3R5bGU9InZpc2liaWxpdHk6aGlkZGVuIj48L2lmcmFtZT4KKzwv
Ym9keT4K
</data>
<flag name="review"
          id="384434"
          type_id="1"
          status="+"
          setter="achristensen"
    />
    <flag name="commit-queue"
          id="384442"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>368219</attachid>
            <date>2019-04-25 00:36:20 -0700</date>
            <delta_ts>2019-04-25 02:16:38 -0700</delta_ts>
            <desc>patch</desc>
            <filename>visited-link-hash-save-4.patch</filename>
            <type>text/plain</type>
            <size>13147</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NDU4NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDIwMTktMDQtMjQgIEFudHRp
IEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFZpc2l0ZWQgbGluayBoYXNo
IHNob3VsZCBiZSBjb21wdXRlZCBvbmx5IG9uY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzIyOQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDg0
Mzg5MjQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAg
ICBUZXN0OiBmYXN0L2hpc3RvcnkvdmlzaXRlZC1ocmVmLW11dGF0aW9uLmh0bWwKKworICAgICAg
ICBWaXNpdGVkIGxpbmsgc3R5bGUgaXMgbm93IGJhc2VkIG9uIHRoZSBmaXJzdCB0YXJnZXQgVVJM
IG9mIHRoZSBsaW5rIGVsZW1lbnQuIEZ1cnRoZXIgaHJlZiBtdXRhdGlvbnMgZG9uJ3QgYWZmZWN0
IHN0eWxpbmcuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OnVwZGF0ZUJhc2VVUkwpOgorICAgICAgICAqIGRvbS9WaXNpdGVkTGlua1N0
YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxpbmtBdHRyaWJ1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6bGlua0hhc2hGb3JFbGVtZW50KToKKworICAgICAgICBWaXNpdGVkIGxpbmsgc3VwcG9y
dCBpcyBub3cgbGltaXRlZCB0byBIVE1MIGFuZCBTVkcgPGE+IGVsZW1lbnRzLgorCisgICAgICAg
IChXZWJDb3JlOjpWaXNpdGVkTGlua1N0YXRlOjppbnZhbGlkYXRlU3R5bGVGb3JMaW5rKToKKyAg
ICAgICAgKFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RhdGU6OmRldGVybWluZUxpbmtTdGF0ZVNsb3dD
YXNlKToKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpIVE1MQW5jaG9yRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0
bWwvSFRNTEFuY2hvckVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVt
ZW50Ojp2aXNpdGVkTGlua0hhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hv
ckVsZW1lbnQ6OmludmFsaWRhdGVDYWNoZWRWaXNpdGVkTGlua0hhc2gpOiBEZWxldGVkLgorICAg
ICAgICAqIHN2Zy9TVkdBRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBRWxlbWVu
dDo6dmlzaXRlZExpbmtIYXNoIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHQUVsZW1lbnQuaDoK
KwogMjAxOS0wNC0yNCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0dTdHJlYW1lcl0gQ3Jhc2ggaW4gQXVkaW9UcmFja1ByaXZhdGUgd2l0aCBwbGF5
YmluMyBlbmFibGVkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDI0NDUz
NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxODQsMTMgKzMxODQsNiBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVCYXNlVVJMKCkKIAogICAg
IGlmICghbV9iYXNlVVJMLmlzVmFsaWQoKSkKICAgICAgICAgbV9iYXNlVVJMID0gVVJMKCk7Ci0K
LSAgICBpZiAoIWVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIob2xkQmFzZVVSTCwgbV9i
YXNlVVJMKSkgewotICAgICAgICAvLyBCYXNlIFVSTCBjaGFuZ2UgY2hhbmdlcyBhbnkgcmVsYXRp
dmUgdmlzaXRlZCBsaW5rcy4KLSAgICAgICAgLy8gRklYTUU6IFRoZXJlIGFyZSBvdGhlciBVUkxz
IGluIHRoZSB0cmVlIHRoYXQgd291bGQgbmVlZCB0byBiZSByZS1ldmFsdWF0ZWQgb24gZHluYW1p
YyBiYXNlIFVSTCBjaGFuZ2UuIFN0eWxlIHNob3VsZCBiZSBpbnZhbGlkYXRlZCB0b28uCi0gICAg
ICAgIGZvciAoYXV0byYgYW5jaG9yIDogZGVzY2VuZGFudHNPZlR5cGU8SFRNTEFuY2hvckVsZW1l
bnQ+KCp0aGlzKSkKLSAgICAgICAgICAgIGFuY2hvci5pbnZhbGlkYXRlQ2FjaGVkVmlzaXRlZExp
bmtIYXNoKCk7Ci0gICAgfQogfQogCiB2b2lkIERvY3VtZW50OjpzZXRCYXNlVVJMT3ZlcnJpZGUo
Y29uc3QgVVJMJiB1cmwpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0ZWRMaW5rU3RhdGUu
Y3BwCShyZXZpc2lvbiAyNDQ1MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtT
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkhUTUxBbmNob3JFbGVtZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgor
I2luY2x1ZGUgIlNWR0FFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRl
ICJWaXNpdGVkTGlua1N0b3JlLmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgpAQCAtNDQsMTIg
KzQ1LDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBpbmxpbmUgc3RhdGljIGNvbnN0
IEF0b21pY1N0cmluZyogbGlua0F0dHJpYnV0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewog
ICAgIGlmICghZWxlbWVudC5pc0xpbmsoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIGlmIChlbGVtZW50LmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAg
cmV0dXJuICZlbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVz
OjpocmVmQXR0cik7CiAgICAgaWYgKGVsZW1lbnQuaXNTVkdFbGVtZW50KCkpCiAgICAgICAgIHJl
dHVybiAmZWxlbWVudC5nZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhyZWZBdHRyLCBYTGlua05hbWVz
OjpocmVmQXR0cik7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFZp
c2l0ZWRMaW5rU3RhdGU6OlZpc2l0ZWRMaW5rU3RhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQpAQCAt
NjcsMTMgKzY4LDEzIEBAIHZvaWQgVmlzaXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm8K
ICAgICB9CiB9CiAKLWlubGluZSBzdGF0aWMgU2hhcmVkU3RyaW5nSGFzaCBsaW5rSGFzaEZvckVs
ZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQoraW5saW5l
IHN0YXRpYyBPcHRpb25hbDxTaGFyZWRTdHJpbmdIYXNoPiBsaW5rSGFzaEZvckVsZW1lbnQoY29u
c3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KGVs
ZW1lbnQpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEFuY2hvckVsZW1lbnQ+KGVsZW1l
bnQpLnZpc2l0ZWRMaW5rSGFzaCgpOwotICAgIGlmIChjb25zdCBBdG9taWNTdHJpbmcqIGF0dHJp
YnV0ZSA9IGxpbmtBdHRyaWJ1dGUoZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBjb21wdXRlVmlz
aXRlZExpbmtIYXNoKGRvY3VtZW50LmJhc2VVUkwoKSwgKmF0dHJpYnV0ZSk7Ci0gICAgcmV0dXJu
IDA7CisgICAgaWYgKGlzPFNWR0FFbGVtZW50PihlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PFNWR0FFbGVtZW50PihlbGVtZW50KS52aXNpdGVkTGlua0hhc2goKTsKKyAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogfQogCiB2b2lkIFZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVT
dHlsZUZvckxpbmsoU2hhcmVkU3RyaW5nSGFzaCBsaW5rSGFzaCkKQEAgLTgxLDcgKzgyLDcgQEAg
dm9pZCBWaXNpdGVkTGlua1N0YXRlOjppbnZhbGlkYXRlU3R5bGVGbwogICAgIGlmICghbV9saW5r
c0NoZWNrZWRGb3JWaXNpdGVkU3RhdGUuY29udGFpbnMobGlua0hhc2gpKQogICAgICAgICByZXR1
cm47CiAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVudD4o
bV9kb2N1bWVudCkpIHsKLSAgICAgICAgaWYgKGxpbmtIYXNoRm9yRWxlbWVudChtX2RvY3VtZW50
LCBlbGVtZW50KSA9PSBsaW5rSGFzaCkKKyAgICAgICAgaWYgKGVsZW1lbnQuaXNMaW5rKCkgJiYg
bGlua0hhc2hGb3JFbGVtZW50KGVsZW1lbnQpID09IGxpbmtIYXNoKQogICAgICAgICAgICAgZWxl
bWVudC5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgfQogfQpAQCAtOTQsMTkgKzk1
LDE3IEBAIEluc2lkZUxpbmsgVmlzaXRlZExpbmtTdGF0ZTo6ZGV0ZXJtaW5lTGkKICAgICBpZiAo
IWF0dHJpYnV0ZSB8fCBhdHRyaWJ1dGUtPmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gSW5zaWRl
TGluazo6Tm90SW5zaWRlOwogCi0gICAgLy8gQW4gZW1wdHkgaHJlZiByZWZlcnMgdG8gdGhlIGRv
Y3VtZW50IGl0c2VsZiB3aGljaCBpcyBhbHdheXMgdmlzaXRlZC4gSXQgaXMgdXNlZnVsIHRvIGNo
ZWNrIHRoaXMgZXhwbGljaXRseSBzbwotICAgIC8vIHRoYXQgdmlzaXRlZCBsaW5rcyBjYW4gYmUg
dGVzdGVkIGluIHBsYXRmb3JtIGluZGVwZW5kZW50IG1hbm5lciwgd2l0aG91dCBleHBsaWNpdCBz
dXBwb3J0IGluIHRoZSB0ZXN0IGhhcm5lc3MuCi0gICAgaWYgKGF0dHJpYnV0ZS0+aXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gSW5zaWRlTGluazo6SW5zaWRlVmlzaXRlZDsKKyAgICBhdXRvIGhh
c2hJZkZvdW5kID0gbGlua0hhc2hGb3JFbGVtZW50KGVsZW1lbnQpOwogCi0gICAgU2hhcmVkU3Ry
aW5nSGFzaCBoYXNoOwotICAgIGlmIChpczxIVE1MQW5jaG9yRWxlbWVudD4oZWxlbWVudCkpCi0g
ICAgICAgIGhhc2ggPSBkb3duY2FzdDxIVE1MQW5jaG9yRWxlbWVudD4oZWxlbWVudCkudmlzaXRl
ZExpbmtIYXNoKCk7Ci0gICAgZWxzZQotICAgICAgICBoYXNoID0gY29tcHV0ZVZpc2l0ZWRMaW5r
SGFzaChlbGVtZW50LmRvY3VtZW50KCkuYmFzZVVSTCgpLCAqYXR0cmlidXRlKTsKKyAgICBpZiAo
IWhhc2hJZkZvdW5kKQorICAgICAgICByZXR1cm4gYXR0cmlidXRlLT5pc0VtcHR5KCkgPyBJbnNp
ZGVMaW5rOjpJbnNpZGVWaXNpdGVkIDogSW5zaWRlTGluazo6SW5zaWRlVW52aXNpdGVkOworCisg
ICAgYXV0byBoYXNoID0gKmhhc2hJZkZvdW5kOwogCisgICAgLy8gQW4gZW1wdHkgaHJlZiAoaGFz
aD09MCkgcmVmZXJzIHRvIHRoZSBkb2N1bWVudCBpdHNlbGYgd2hpY2ggaXMgYWx3YXlzIHZpc2l0
ZWQuIEl0IGlzIHVzZWZ1bCB0byBjaGVjayB0aGlzIGV4cGxpY2l0bHkgc28KKyAgICAvLyB0aGF0
IHZpc2l0ZWQgbGlua3MgY2FuIGJlIHRlc3RlZCBpbiBwbGF0Zm9ybSBpbmRlcGVuZGVudCBtYW5u
ZXIsIHdpdGhvdXQgZXhwbGljaXQgc3VwcG9ydCBpbiB0aGUgdGVzdCBoYXJuZXNzLgogICAgIGlm
ICghaGFzaCkKLSAgICAgICAgcmV0dXJuIEluc2lkZUxpbms6Okluc2lkZVVudmlzaXRlZDsKKyAg
ICAgICAgcmV0dXJuIEluc2lkZUxpbms6Okluc2lkZVZpc2l0ZWQ7CiAKICAgICBGcmFtZSogZnJh
bWUgPSBlbGVtZW50LmRvY3VtZW50KCkuZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDI0NDUz
NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02OCw3ICs2OCw2IEBAIEhUTUxBbmNob3JFbGVtZW50OjpIVE1MQW5jaG9yRWxl
bWVudChjb24KICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQogICAgICwgbV9o
YXNSb290RWRpdGFibGVFbGVtZW50Rm9yU2VsZWN0aW9uT25Nb3VzZURvd24oZmFsc2UpCiAgICAg
LCBtX3dhc1NoaWZ0S2V5RG93bk9uTW91c2VEb3duKGZhbHNlKQotICAgICwgbV9jYWNoZWRWaXNp
dGVkTGlua0hhc2goMCkKIHsKIH0KIApAQCAtMjQ4LDcgKzI0Nyw2IEBAIHZvaWQgSFRNTEFuY2hv
ckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGMKICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQo
KS5mcmFtZSgpLT5sb2FkZXIoKS5jbGllbnQoKS5wcmVmZXRjaEROUyhkb2N1bWVudCgpLmNvbXBs
ZXRlVVJMKHBhcnNlZFVSTCkuaG9zdCgpLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgICAgIGludmFsaWRhdGVDYWNoZWRWaXNpdGVkTGlua0hhc2goKTsKICAgICB9
IGVsc2UgaWYgKG5hbWUgPT0gbmFtZUF0dHIgfHwgbmFtZSA9PSB0aXRsZUF0dHIpIHsKICAgICAg
ICAgLy8gRG8gbm90aGluZy4KICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gcmVsQXR0cikgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuaAkocmV2aXNpb24gMjQ0NTM3
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Niw3ICs2Niw2IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1JlbChSZWxhdGlvbikg
Y29uc3Q7CiAgICAgCiAgICAgU2hhcmVkU3RyaW5nSGFzaCB2aXNpdGVkTGlua0hhc2goKSBjb25z
dDsKLSAgICB2b2lkIGludmFsaWRhdGVDYWNoZWRWaXNpdGVkTGlua0hhc2goKSB7IG1fY2FjaGVk
VmlzaXRlZExpbmtIYXNoID0gMDsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgRE9NVG9rZW5MaXN0
JiByZWxMaXN0KCkgY29uc3Q7CiAKQEAgLTExNSwxNiArMTE0LDE5IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2hhc1Jvb3RFZGl0YWJsZUVsZW1lbnRGb3JTZWxlY3Rpb25Pbk1vdXNlRG93bjsKICAg
ICBib29sIG1fd2FzU2hpZnRLZXlEb3duT25Nb3VzZURvd247CiAgICAgT3B0aW9uU2V0PFJlbGF0
aW9uPiBtX2xpbmtSZWxhdGlvbnM7Ci0gICAgbXV0YWJsZSBTaGFyZWRTdHJpbmdIYXNoIG1fY2Fj
aGVkVmlzaXRlZExpbmtIYXNoOworCisgICAgLy8gVGhpcyBpcyBjb21wdXRlZCBvbmx5IG9uY2Ug
YW5kIG11c3Qgbm90IGJlIGFmZmVjdGVkIGJ5IHN1YnNlcXVlbnQgVVJMIGNoYW5nZXMuCisgICAg
bXV0YWJsZSBPcHRpb25hbDxTaGFyZWRTdHJpbmdIYXNoPiBtX3N0b3JlZFZpc2l0ZWRMaW5rSGFz
aDsKIAogICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPERPTVRva2VuTGlzdD4gbV9yZWxMaXN0
OwogfTsKIAogaW5saW5lIFNoYXJlZFN0cmluZ0hhc2ggSFRNTEFuY2hvckVsZW1lbnQ6OnZpc2l0
ZWRMaW5rSGFzaCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2NhY2hlZFZpc2l0ZWRMaW5rSGFzaCkK
LSAgICAgICAgbV9jYWNoZWRWaXNpdGVkTGlua0hhc2ggPSBjb21wdXRlVmlzaXRlZExpbmtIYXNo
KGRvY3VtZW50KCkuYmFzZVVSTCgpLCBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhU
TUxOYW1lczo6aHJlZkF0dHIpKTsKLSAgICByZXR1cm4gbV9jYWNoZWRWaXNpdGVkTGlua0hhc2g7
IAorICAgIEFTU0VSVChpc0xpbmsoKSk7CisgICAgaWYgKCFtX3N0b3JlZFZpc2l0ZWRMaW5rSGFz
aCkKKyAgICAgICAgbV9zdG9yZWRWaXNpdGVkTGlua0hhc2ggPSBjb21wdXRlVmlzaXRlZExpbmtI
YXNoKGRvY3VtZW50KCkuYmFzZVVSTCgpLCBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KEhUTUxOYW1lczo6aHJlZkF0dHIpKTsKKyAgICByZXR1cm4gKm1fc3RvcmVkVmlzaXRlZExpbmtI
YXNoOwogfQogCiAvLyBGdW5jdGlvbnMgc2hhcmVkIHdpdGggdGhlIG90aGVyIGFuY2hvciBlbGVt
ZW50cyAoaS5lLiwgU1ZHKS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAkocmV2
aXNpb24gMjQ0NTM3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjE3LDQgKzIxNywxMiBAQCBib29sIFNWR0FFbGVtZW50Ojp3aWxsUmVz
cG9uZFRvTW91c2VDbGljCiAgICAgcmV0dXJuIGlzTGluaygpIHx8IFNWR0dyYXBoaWNzRWxlbWVu
dDo6d2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKTsgCiB9CiAKK1NoYXJlZFN0cmluZ0hh
c2ggU1ZHQUVsZW1lbnQ6OnZpc2l0ZWRMaW5rSGFzaCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlz
TGluaygpKTsKKyAgICBpZiAoIW1fc3RvcmVkVmlzaXRlZExpbmtIYXNoKQorICAgICAgICBtX3N0
b3JlZFZpc2l0ZWRMaW5rSGFzaCA9IGNvbXB1dGVWaXNpdGVkTGlua0hhc2goZG9jdW1lbnQoKS5i
YXNlVVJMKCksIGdldEF0dHJpYnV0ZShTVkdOYW1lczo6aHJlZkF0dHIsIFhMaW5rTmFtZXM6Omhy
ZWZBdHRyKSk7CisgICAgcmV0dXJuICptX3N0b3JlZFZpc2l0ZWRMaW5rSGFzaDsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmgJKHJldmlz
aW9uIDI0NDUzNykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZC5oIgogI2luY2x1ZGUgIlNWR0dyYXBoaWNzRWxlbWVudC5oIgogI2luY2x1ZGUgIlNW
R1VSSVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIlNoYXJlZFN0cmluZ0hhc2guaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0zNiw2ICszNyw4IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgdGFy
Z2V0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV90YXJnZXQtPmN1cnJlbnRWYWx1ZSgpOyB9CiAg
ICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiYgdGFyZ2V0QW5pbWF0ZWQoKSB7IHJldHVybiBtX3Rh
cmdldDsgfQogCisgICAgU2hhcmVkU3RyaW5nSGFzaCB2aXNpdGVkTGlua0hhc2goKSBjb25zdDsK
KwogcHJpdmF0ZToKICAgICBTVkdBRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQmKTsKIApAQCAtNjMsNiArNjYsOSBAQCBwcml2YXRlOgogCiAgICAgUHJvcGVydHlSZWdpc3Ry
eSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmlu
Zz4gbV90YXJnZXQgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CisKKyAgICAv
LyBUaGlzIGlzIGNvbXB1dGVkIG9ubHkgb25jZSBhbmQgbXVzdCBub3QgYmUgYWZmZWN0ZWQgYnkg
c3Vic2VxdWVudCBVUkwgY2hhbmdlcy4KKyAgICBtdXRhYmxlIE9wdGlvbmFsPFNoYXJlZFN0cmlu
Z0hhc2g+IG1fc3RvcmVkVmlzaXRlZExpbmtIYXNoOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjQ0NTM3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMDQtMjQgIEFudHRpIEtvaXZp
c3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFZpc2l0ZWQgbGluayBoYXNoIHNob3Vs
ZCBiZSBjb21wdXRlZCBvbmx5IG9uY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE5NzIyOQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDg0Mzg5MjQ+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICAqIGZh
c3QvaGlzdG9yeS92aXNpdGVkLWhyZWYtbXV0YXRpb24tZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9oaXN0b3J5L3Zpc2l0ZWQtaHJlZi1tdXRhdGlvbi5odG1sOiBBZGRlZC4K
KwogMjAxOS0wNC0yMiAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFtDb250ZW50Q2hhbmdlT2JzZXJ2ZXJdIFNvbWUgZHJvcGRvd24gbWVudXMgbWF5IGNsb3NlIHdp
dGhvdXQgdXNlciBnZXN0dXJlIG9uIGFtZXJpY2FuZXhwcmVzcy5jb20KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvaGlzdG9yeS92aXNpdGVkLWhyZWYtbXV0YXRpb24tZXhwZWN0ZWQuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvdmlzaXRlZC1ocmVmLW11dGF0aW9u
LWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5
L3Zpc2l0ZWQtaHJlZi1tdXRhdGlvbi1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTUgQEAKKzxzdHlsZT4KKy5leHBlY3RlZC1saW5rIHsgY29sb3I6Ymx1ZSB9CisuZXhw
ZWN0ZWQtdmlzaXRlZCB7IGNvbG9yOmdyZWVuIH0KKzwvc3R5bGU+Cis8YSBocmVmPSJkdW1teSIg
Y2xhc3M9ImV4cGVjdGVkLXZpc2l0ZWQiPkNhc2UgMTwvYT4KKzxhIGhyZWY9ImR1bW15IiBjbGFz
cz0iZXhwZWN0ZWQtdmlzaXRlZCI+Q2FzZSAyPC9hPgorPGEgaHJlZj0iZHVtbXkiIGNsYXNzPSJl
eHBlY3RlZC1saW5rIj5DYXNlIDM8L2E+Cis8YSBocmVmPSJkdW1teSIgY2xhc3M9ImV4cGVjdGVk
LWxpbmsiPkNhc2UgNDwvYT4KKzxhIGhyZWY9ImR1bW15IiBjbGFzcz0iZXhwZWN0ZWQtdmlzaXRl
ZCI+Q2FzZSA1PC9hPgorPGEgaHJlZj0iZHVtbXkiIGNsYXNzPSJleHBlY3RlZC12aXNpdGVkIj5D
YXNlIDY8L2E+Cis8YSBocmVmPSJkdW1teSIgY2xhc3M9ImV4cGVjdGVkLWxpbmsiPkNhc2UgNzwv
YT4KKzxhIGhyZWY9ImR1bW15IiBjbGFzcz0iZXhwZWN0ZWQtbGluayI+Q2FzZSA4PC9hPgorPGEg
Y2xhc3M9IiI+Q2FzZSA5PC9hPgorPGEgaHJlZj0iZHVtbXkiIGNsYXNzPSJleHBlY3RlZC12aXNp
dGVkIj5DYXNlIDEwPC9hPgorPGEgaHJlZj0iZHVtbXkiIGNsYXNzPSJleHBlY3RlZC1saW5rIj5D
YXNlIDExPC9hPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3Zpc2l0ZWQtaHJlZi1t
dXRhdGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS92aXNp
dGVkLWhyZWYtbXV0YXRpb24uaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2hpc3RvcnkvdmlzaXRlZC1ocmVmLW11dGF0aW9uLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0OSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LnRlc3RSdW5u
ZXIpIHsKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB0ZXN0UnVubmVyLmtl
ZXBXZWJIaXN0b3J5KCk7Cit9CisKK2Z1bmN0aW9uIHNldEhyZWYodGVzdGNhc2UsIHVybCkKK3sK
KyAgICB0ZXN0Y2FzZS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgIHRlc3RjYXNlLmhyZWYg
PSB1cmw7CisgICAgdGVzdGNhc2Uuc3R5bGUuZGlzcGxheSA9ICJpbmxpbmUiOworfQorCitmdW5j
dGlvbiB0ZXN0KCkKK3sKKyAgICBzZXRIcmVmKGNhc2UyLCAicmVzb3VyY2VzL25vdC12aXNpdGVk
Lmh0bWwiKTsKKyAgICBzZXRIcmVmKGNhc2U0LCAicmVzb3VyY2VzL2R1bW15Lmh0bWwiKTsKKyAg
ICBzZXRIcmVmKGNhc2U2LCAicmVzb3VyY2VzL25vdC12aXNpdGVkLmh0bWwiKTsKKyAgICBzZXRI
cmVmKGNhc2U4LCAiIik7CisgICAgc2V0SHJlZihjYXNlMTAsICJyZXNvdXJjZXMvZHVtbXkuaHRt
bCIpOworICAgIHNldEhyZWYoY2FzZTExLCAicmVzb3VyY2VzL25vdC12aXNpdGVkLmh0bWwiKTsK
KworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7Cit9Cis8L3NjcmlwdD4KKzxzdHlsZT4KK2E6bGluayB7IGNvbG9yOiBibHVlOyB9Cith
OnZpc2l0ZWQgeyBjb2xvcjogZ3JlZW47IH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxv
YWQ9InRlc3QoKSI+Cis8ZGl2PgorPGEgaWQ9ImNhc2UxIiBocmVmPSJyZXNvdXJjZXMvZHVtbXku
aHRtbCI+Q2FzZSAxPC9hPgorPGEgaWQ9ImNhc2UyIiBocmVmPSJyZXNvdXJjZXMvZHVtbXkuaHRt
bCI+Q2FzZSAyPC9hPgorPGEgaWQ9ImNhc2UzIiBocmVmPSJyZXNvdXJjZXMvbm90LXZpc2l0ZWQu
aHRtbCI+Q2FzZSAzPC9hPgorPGEgaWQ9ImNhc2U0IiBocmVmPSJyZXNvdXJjZXMvbm90LXZpc2l0
ZWQuaHRtbCI+Q2FzZSA0PC9hPgorPGEgaWQ9ImNhc2U1IiBocmVmPSIiPkNhc2UgNTwvYT4KKzxh
IGlkPSJjYXNlNiIgaHJlZj0iIj5DYXNlIDY8L2E+Cis8YSBpZD0iY2FzZTciIGhyZWY9InJlc291
cmNlcy9ub3QtdmlzaXRlZC5odG1sIj5DYXNlIDc8L2E+Cis8YSBpZD0iY2FzZTgiIGhyZWY9InJl
c291cmNlcy9ub3QtdmlzaXRlZC5odG1sIj5DYXNlIDg8L2E+Cis8YSBpZD0iY2FzZTkiPkNhc2Ug
OTwvYT4KKzxhIGlkPSJjYXNlMTAiPkNhc2UgMTA8L2E+Cis8YSBpZD0iY2FzZTExIj5DYXNlIDEx
PC9hPgorPC9kaXY+Cis8aWZyYW1lIHNyYz0icmVzb3VyY2VzL2R1bW15Lmh0bWwiIHN0eWxlPSJ2
aXNpYmlsaXR5OmhpZGRlbiI+PC9pZnJhbWU+Cis8L2JvZHk+Cg==
</data>
<flag name="commit-queue"
          id="384527"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>368223</attachid>
            <date>2019-04-25 02:16:38 -0700</date>
            <delta_ts>2019-04-25 02:55:44 -0700</delta_ts>
            <desc>patch</desc>
            <filename>visited-link-hash-save-5.patch</filename>
            <type>text/plain</type>
            <size>13145</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NDU4NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDE5LTA0LTI0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBWaXNpdGVkIGxpbmsgaGFzaCBz
aG91bGQgYmUgY29tcHV0ZWQgb25seSBvbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTcyMjkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ4NDM4
OTI0PgorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAg
VGVzdDogZmFzdC9oaXN0b3J5L3Zpc2l0ZWQtaHJlZi1tdXRhdGlvbi5odG1sCisKKyAgICAgICAg
VmlzaXRlZCBsaW5rIHN0eWxlIGlzIG5vdyBiYXNlZCBvbiB0aGUgZmlyc3QgdGFyZ2V0IFVSTCBv
ZiB0aGUgbGluayBlbGVtZW50LiBGdXJ0aGVyIGhyZWYgbXV0YXRpb25zIGRvbid0IGFmZmVjdCBz
dHlsaW5nLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50Ojp1cGRhdGVCYXNlVVJMKToKKyAgICAgICAgKiBkb20vVmlzaXRlZExpbmtTdGF0
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsaW5rQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmxpbmtIYXNoRm9yRWxlbWVudCk6CisKKyAgICAgICAgVmlzaXRlZCBsaW5rIHN1cHBvcnQg
aXMgbm93IGxpbWl0ZWQgdG8gSFRNTCBhbmQgU1ZHIDxhPiBlbGVtZW50cy4KKworICAgICAgICAo
V2ViQ29yZTo6VmlzaXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm9yTGluayk6CisgICAg
ICAgIChXZWJDb3JlOjpWaXNpdGVkTGlua1N0YXRlOjpkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2Fz
ZSk6CisgICAgICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6SFRNTEFuY2hvckVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1s
L0hUTUxBbmNob3JFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVu
dDo6dmlzaXRlZExpbmtIYXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JF
bGVtZW50OjppbnZhbGlkYXRlQ2FjaGVkVmlzaXRlZExpbmtIYXNoKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBzdmcvU1ZHQUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQUVsZW1lbnQ6
OnZpc2l0ZWRMaW5rSGFzaCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0FFbGVtZW50Lmg6CisK
IDIwMTktMDQtMjQgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHU3RyZWFtZXJdIENyYXNoIGluIEF1ZGlvVHJhY2tQcml2YXRlIHdpdGggcGxheWJp
bjMgZW5hYmxlZApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyNDQ1Mzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTg0LDEzICszMTg0LDYgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlQmFzZVVSTCgpCiAKICAgICBp
ZiAoIW1fYmFzZVVSTC5pc1ZhbGlkKCkpCiAgICAgICAgIG1fYmFzZVVSTCA9IFVSTCgpOwotCi0g
ICAgaWYgKCFlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVyKG9sZEJhc2VVUkwsIG1fYmFz
ZVVSTCkpIHsKLSAgICAgICAgLy8gQmFzZSBVUkwgY2hhbmdlIGNoYW5nZXMgYW55IHJlbGF0aXZl
IHZpc2l0ZWQgbGlua3MuCi0gICAgICAgIC8vIEZJWE1FOiBUaGVyZSBhcmUgb3RoZXIgVVJMcyBp
biB0aGUgdHJlZSB0aGF0IHdvdWxkIG5lZWQgdG8gYmUgcmUtZXZhbHVhdGVkIG9uIGR5bmFtaWMg
YmFzZSBVUkwgY2hhbmdlLiBTdHlsZSBzaG91bGQgYmUgaW52YWxpZGF0ZWQgdG9vLgotICAgICAg
ICBmb3IgKGF1dG8mIGFuY2hvciA6IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxBbmNob3JFbGVtZW50
PigqdGhpcykpCi0gICAgICAgICAgICBhbmNob3IuaW52YWxpZGF0ZUNhY2hlZFZpc2l0ZWRMaW5r
SGFzaCgpOwotICAgIH0KIH0KIAogdm9pZCBEb2N1bWVudDo6c2V0QmFzZVVSTE92ZXJyaWRlKGNv
bnN0IFVSTCYgdXJsKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0ZWRMaW5rU3RhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9WaXNpdGVkTGlua1N0YXRlLmNw
cAkocmV2aXNpb24gMjQ0NTM3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0ZWRMaW5rU3Rh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJIVE1MQW5jaG9yRWxlbWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNp
bmNsdWRlICJTVkdBRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAi
VmlzaXRlZExpbmtTdG9yZS5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKQEAgLTQ0LDEyICs0
NSwxMiBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogaW5saW5lIHN0YXRpYyBjb25zdCBB
dG9taWNTdHJpbmcqIGxpbmtBdHRyaWJ1dGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAg
ICBpZiAoIWVsZW1lbnQuaXNMaW5rKCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICBpZiAoZWxlbWVudC5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJl
dHVybiAmZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6
aHJlZkF0dHIpOwogICAgIGlmIChlbGVtZW50LmlzU1ZHRWxlbWVudCgpKQogICAgICAgICByZXR1
cm4gJmVsZW1lbnQuZ2V0QXR0cmlidXRlKFNWR05hbWVzOjpocmVmQXR0ciwgWExpbmtOYW1lczo6
aHJlZkF0dHIpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBWaXNp
dGVkTGlua1N0YXRlOjpWaXNpdGVkTGlua1N0YXRlKERvY3VtZW50JiBkb2N1bWVudCkKQEAgLTY3
LDEzICs2OCwxMyBAQCB2b2lkIFZpc2l0ZWRMaW5rU3RhdGU6OmludmFsaWRhdGVTdHlsZUZvCiAg
ICAgfQogfQogCi1pbmxpbmUgc3RhdGljIFNoYXJlZFN0cmluZ0hhc2ggbGlua0hhc2hGb3JFbGVt
ZW50KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKK2lubGluZSBz
dGF0aWMgT3B0aW9uYWw8U2hhcmVkU3RyaW5nSGFzaD4gbGlua0hhc2hGb3JFbGVtZW50KGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKGlzPEhUTUxBbmNob3JFbGVtZW50PihlbGVt
ZW50KSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxBbmNob3JFbGVtZW50PihlbGVtZW50
KS52aXNpdGVkTGlua0hhc2goKTsKLSAgICBpZiAoY29uc3QgQXRvbWljU3RyaW5nKiBhdHRyaWJ1
dGUgPSBsaW5rQXR0cmlidXRlKGVsZW1lbnQpKQotICAgICAgICByZXR1cm4gY29tcHV0ZVZpc2l0
ZWRMaW5rSGFzaChkb2N1bWVudC5iYXNlVVJMKCksICphdHRyaWJ1dGUpOwotICAgIHJldHVybiAw
OworICAgIGlmIChpczxTVkdBRWxlbWVudD4oZWxlbWVudCkpCisgICAgICAgIHJldHVybiBkb3du
Y2FzdDxTVkdBRWxlbWVudD4oZWxlbWVudCkudmlzaXRlZExpbmtIYXNoKCk7CisgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIH0KIAogdm9pZCBWaXNpdGVkTGlua1N0YXRlOjppbnZhbGlkYXRlU3R5
bGVGb3JMaW5rKFNoYXJlZFN0cmluZ0hhc2ggbGlua0hhc2gpCkBAIC04MSw3ICs4Miw3IEBAIHZv
aWQgVmlzaXRlZExpbmtTdGF0ZTo6aW52YWxpZGF0ZVN0eWxlRm8KICAgICBpZiAoIW1fbGlua3ND
aGVja2VkRm9yVmlzaXRlZFN0YXRlLmNvbnRhaW5zKGxpbmtIYXNoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KG1f
ZG9jdW1lbnQpKSB7Ci0gICAgICAgIGlmIChsaW5rSGFzaEZvckVsZW1lbnQobV9kb2N1bWVudCwg
ZWxlbWVudCkgPT0gbGlua0hhc2gpCisgICAgICAgIGlmIChlbGVtZW50LmlzTGluaygpICYmIGxp
bmtIYXNoRm9yRWxlbWVudChlbGVtZW50KSA9PSBsaW5rSGFzaCkKICAgICAgICAgICAgIGVsZW1l
bnQuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgIH0KIH0KQEAgLTk0LDE5ICs5NSwx
NyBAQCBJbnNpZGVMaW5rIFZpc2l0ZWRMaW5rU3RhdGU6OmRldGVybWluZUxpCiAgICAgaWYgKCFh
dHRyaWJ1dGUgfHwgYXR0cmlidXRlLT5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIEluc2lkZUxp
bms6Ok5vdEluc2lkZTsKIAotICAgIC8vIEFuIGVtcHR5IGhyZWYgcmVmZXJzIHRvIHRoZSBkb2N1
bWVudCBpdHNlbGYgd2hpY2ggaXMgYWx3YXlzIHZpc2l0ZWQuIEl0IGlzIHVzZWZ1bCB0byBjaGVj
ayB0aGlzIGV4cGxpY2l0bHkgc28KLSAgICAvLyB0aGF0IHZpc2l0ZWQgbGlua3MgY2FuIGJlIHRl
c3RlZCBpbiBwbGF0Zm9ybSBpbmRlcGVuZGVudCBtYW5uZXIsIHdpdGhvdXQgZXhwbGljaXQgc3Vw
cG9ydCBpbiB0aGUgdGVzdCBoYXJuZXNzLgotICAgIGlmIChhdHRyaWJ1dGUtPmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIEluc2lkZUxpbms6Okluc2lkZVZpc2l0ZWQ7CisgICAgYXV0byBoYXNo
SWZGb3VuZCA9IGxpbmtIYXNoRm9yRWxlbWVudChlbGVtZW50KTsKIAotICAgIFNoYXJlZFN0cmlu
Z0hhc2ggaGFzaDsKLSAgICBpZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KGVsZW1lbnQpKQotICAg
ICAgICBoYXNoID0gZG93bmNhc3Q8SFRNTEFuY2hvckVsZW1lbnQ+KGVsZW1lbnQpLnZpc2l0ZWRM
aW5rSGFzaCgpOwotICAgIGVsc2UKLSAgICAgICAgaGFzaCA9IGNvbXB1dGVWaXNpdGVkTGlua0hh
c2goZWxlbWVudC5kb2N1bWVudCgpLmJhc2VVUkwoKSwgKmF0dHJpYnV0ZSk7CisgICAgaWYgKCFo
YXNoSWZGb3VuZCkKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZS0+aXNFbXB0eSgpID8gSW5zaWRl
TGluazo6SW5zaWRlVmlzaXRlZCA6IEluc2lkZUxpbms6Okluc2lkZVVudmlzaXRlZDsKKworICAg
IGF1dG8gaGFzaCA9ICpoYXNoSWZGb3VuZDsKIAorICAgIC8vIEFuIGVtcHR5IGhyZWYgKGhhc2g9
PTApIHJlZmVycyB0byB0aGUgZG9jdW1lbnQgaXRzZWxmIHdoaWNoIGlzIGFsd2F5cyB2aXNpdGVk
LiBJdCBpcyB1c2VmdWwgdG8gY2hlY2sgdGhpcyBleHBsaWNpdGx5IHNvCisgICAgLy8gdGhhdCB2
aXNpdGVkIGxpbmtzIGNhbiBiZSB0ZXN0ZWQgaW4gcGxhdGZvcm0gaW5kZXBlbmRlbnQgbWFubmVy
LCB3aXRob3V0IGV4cGxpY2l0IHN1cHBvcnQgaW4gdGhlIHRlc3QgaGFybmVzcy4KICAgICBpZiAo
IWhhc2gpCi0gICAgICAgIHJldHVybiBJbnNpZGVMaW5rOjpJbnNpZGVVbnZpc2l0ZWQ7CisgICAg
ICAgIHJldHVybiBJbnNpZGVMaW5rOjpJbnNpZGVWaXNpdGVkOwogCiAgICAgRnJhbWUqIGZyYW1l
ID0gZWxlbWVudC5kb2N1bWVudCgpLmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNDQ1Mzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjgsNyArNjgsNiBAQCBIVE1MQW5jaG9yRWxlbWVudDo6SFRNTEFuY2hvckVsZW1l
bnQoY29uCiAgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKICAgICAsIG1faGFz
Um9vdEVkaXRhYmxlRWxlbWVudEZvclNlbGVjdGlvbk9uTW91c2VEb3duKGZhbHNlKQogICAgICwg
bV93YXNTaGlmdEtleURvd25Pbk1vdXNlRG93bihmYWxzZSkKLSAgICAsIG1fY2FjaGVkVmlzaXRl
ZExpbmtIYXNoKDApCiB7CiB9CiAKQEAgLTI0OCw3ICsyNDcsNiBAQCB2b2lkIEhUTUxBbmNob3JF
bGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjCiAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50KCku
ZnJhbWUoKS0+bG9hZGVyKCkuY2xpZW50KCkucHJlZmV0Y2hETlMoZG9jdW1lbnQoKS5jb21wbGV0
ZVVSTChwYXJzZWRVUkwpLmhvc3QoKS50b1N0cmluZygpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQotICAgICAgICBpbnZhbGlkYXRlQ2FjaGVkVmlzaXRlZExpbmtIYXNoKCk7CiAgICAgfSBl
bHNlIGlmIChuYW1lID09IG5hbWVBdHRyIHx8IG5hbWUgPT0gdGl0bGVBdHRyKSB7CiAgICAgICAg
IC8vIERvIG5vdGhpbmcuCiAgICAgfSBlbHNlIGlmIChuYW1lID09IHJlbEF0dHIpIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmgJKHJldmlzaW9uIDI0NDUzNykK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNjYsNyArNjYsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNSZWwoUmVsYXRpb24pIGNv
bnN0OwogICAgIAogICAgIFNoYXJlZFN0cmluZ0hhc2ggdmlzaXRlZExpbmtIYXNoKCkgY29uc3Q7
Ci0gICAgdm9pZCBpbnZhbGlkYXRlQ2FjaGVkVmlzaXRlZExpbmtIYXNoKCkgeyBtX2NhY2hlZFZp
c2l0ZWRMaW5rSGFzaCA9IDA7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIERPTVRva2VuTGlzdCYg
cmVsTGlzdCgpIGNvbnN0OwogCkBAIC0xMTUsMTYgKzExNCwxOSBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9oYXNSb290RWRpdGFibGVFbGVtZW50Rm9yU2VsZWN0aW9uT25Nb3VzZURvd247CiAgICAg
Ym9vbCBtX3dhc1NoaWZ0S2V5RG93bk9uTW91c2VEb3duOwogICAgIE9wdGlvblNldDxSZWxhdGlv
bj4gbV9saW5rUmVsYXRpb25zOwotICAgIG11dGFibGUgU2hhcmVkU3RyaW5nSGFzaCBtX2NhY2hl
ZFZpc2l0ZWRMaW5rSGFzaDsKKworICAgIC8vIFRoaXMgaXMgY29tcHV0ZWQgb25seSBvbmNlIGFu
ZCBtdXN0IG5vdCBiZSBhZmZlY3RlZCBieSBzdWJzZXF1ZW50IFVSTCBjaGFuZ2VzLgorICAgIG11
dGFibGUgT3B0aW9uYWw8U2hhcmVkU3RyaW5nSGFzaD4gbV9zdG9yZWRWaXNpdGVkTGlua0hhc2g7
CiAKICAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxET01Ub2tlbkxpc3Q+IG1fcmVsTGlzdDsK
IH07CiAKIGlubGluZSBTaGFyZWRTdHJpbmdIYXNoIEhUTUxBbmNob3JFbGVtZW50Ojp2aXNpdGVk
TGlua0hhc2goKSBjb25zdAogewotICAgIGlmICghbV9jYWNoZWRWaXNpdGVkTGlua0hhc2gpCi0g
ICAgICAgIG1fY2FjaGVkVmlzaXRlZExpbmtIYXNoID0gY29tcHV0ZVZpc2l0ZWRMaW5rSGFzaChk
b2N1bWVudCgpLmJhc2VVUkwoKSwgYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1M
TmFtZXM6OmhyZWZBdHRyKSk7Ci0gICAgcmV0dXJuIG1fY2FjaGVkVmlzaXRlZExpbmtIYXNoOyAK
KyAgICBBU1NFUlQoaXNMaW5rKCkpOworICAgIGlmICghbV9zdG9yZWRWaXNpdGVkTGlua0hhc2gp
CisgICAgICAgIG1fc3RvcmVkVmlzaXRlZExpbmtIYXNoID0gY29tcHV0ZVZpc2l0ZWRMaW5rSGFz
aChkb2N1bWVudCgpLmJhc2VVUkwoKSwgYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihI
VE1MTmFtZXM6OmhyZWZBdHRyKSk7CisgICAgcmV0dXJuICptX3N0b3JlZFZpc2l0ZWRMaW5rSGFz
aDsKIH0KIAogLy8gRnVuY3Rpb25zIHNoYXJlZCB3aXRoIHRoZSBvdGhlciBhbmNob3IgZWxlbWVu
dHMgKGkuZS4sIFNWRykuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5jcHAJKHJldmlz
aW9uIDI0NDUzNykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxNyw0ICsyMTcsMTIgQEAgYm9vbCBTVkdBRWxlbWVudDo6d2lsbFJlc3Bv
bmRUb01vdXNlQ2xpYwogICAgIHJldHVybiBpc0xpbmsoKSB8fCBTVkdHcmFwaGljc0VsZW1lbnQ6
OndpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCk7IAogfQogCitTaGFyZWRTdHJpbmdIYXNo
IFNWR0FFbGVtZW50Ojp2aXNpdGVkTGlua0hhc2goKSBjb25zdAoreworICAgIEFTU0VSVChpc0xp
bmsoKSk7CisgICAgaWYgKCFtX3N0b3JlZFZpc2l0ZWRMaW5rSGFzaCkKKyAgICAgICAgbV9zdG9y
ZWRWaXNpdGVkTGlua0hhc2ggPSBjb21wdXRlVmlzaXRlZExpbmtIYXNoKGRvY3VtZW50KCkuYmFz
ZVVSTCgpLCBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhyZWZBdHRyLCBYTGlua05hbWVzOjpocmVm
QXR0cikpOworICAgIHJldHVybiAqbV9zdG9yZWRWaXNpdGVkTGlua0hhc2g7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5oCShyZXZpc2lv
biAyNDQ1MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQuaCIKICNpbmNsdWRlICJTVkdHcmFwaGljc0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdV
UklSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJTaGFyZWRTdHJpbmdIYXNoLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtMzYsNiArMzcsOCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHRhcmdl
dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdGFyZ2V0LT5jdXJyZW50VmFsdWUoKTsgfQogICAg
IFJlZjxTVkdBbmltYXRlZFN0cmluZz4mIHRhcmdldEFuaW1hdGVkKCkgeyByZXR1cm4gbV90YXJn
ZXQ7IH0KIAorICAgIFNoYXJlZFN0cmluZ0hhc2ggdmlzaXRlZExpbmtIYXNoKCkgY29uc3Q7CisK
IHByaXZhdGU6CiAgICAgU1ZHQUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Jik7CiAKQEAgLTYzLDYgKzY2LDkgQEAgcHJpdmF0ZToKIAogICAgIFByb3BlcnR5UmVnaXN0cnkg
bV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+
IG1fdGFyZ2V0IHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OworCisgICAgLy8g
VGhpcyBpcyBjb21wdXRlZCBvbmx5IG9uY2UgYW5kIG11c3Qgbm90IGJlIGFmZmVjdGVkIGJ5IHN1
YnNlcXVlbnQgVVJMIGNoYW5nZXMuCisgICAgbXV0YWJsZSBPcHRpb25hbDxTaGFyZWRTdHJpbmdI
YXNoPiBtX3N0b3JlZFZpc2l0ZWRMaW5rSGFzaDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NDUzNykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE5LTA0LTI0ICBBbnR0aSBLb2l2aXN0
byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBWaXNpdGVkIGxpbmsgaGFzaCBzaG91bGQg
YmUgY29tcHV0ZWQgb25seSBvbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTcyMjkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ4NDM4OTI0Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgKiBmYXN0
L2hpc3RvcnkvdmlzaXRlZC1ocmVmLW11dGF0aW9uLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvaGlzdG9yeS92aXNpdGVkLWhyZWYtbXV0YXRpb24uaHRtbDogQWRkZWQuCisK
IDIwMTktMDQtMjIgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBb
Q29udGVudENoYW5nZU9ic2VydmVyXSBTb21lIGRyb3Bkb3duIG1lbnVzIG1heSBjbG9zZSB3aXRo
b3V0IHVzZXIgZ2VzdHVyZSBvbiBhbWVyaWNhbmV4cHJlc3MuY29tCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2hpc3RvcnkvdmlzaXRlZC1ocmVmLW11dGF0aW9uLWV4cGVjdGVkLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3Zpc2l0ZWQtaHJlZi1tdXRhdGlvbi1l
eHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS92
aXNpdGVkLWhyZWYtbXV0YXRpb24tZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE1IEBACis8c3R5bGU+CisuZXhwZWN0ZWQtbGluayB7IGNvbG9yOmJsdWUgfQorLmV4cGVj
dGVkLXZpc2l0ZWQgeyBjb2xvcjpncmVlbiB9Cis8L3N0eWxlPgorPGEgaHJlZj0iZHVtbXkiIGNs
YXNzPSJleHBlY3RlZC12aXNpdGVkIj5DYXNlIDE8L2E+Cis8YSBocmVmPSJkdW1teSIgY2xhc3M9
ImV4cGVjdGVkLXZpc2l0ZWQiPkNhc2UgMjwvYT4KKzxhIGhyZWY9ImR1bW15IiBjbGFzcz0iZXhw
ZWN0ZWQtbGluayI+Q2FzZSAzPC9hPgorPGEgaHJlZj0iZHVtbXkiIGNsYXNzPSJleHBlY3RlZC1s
aW5rIj5DYXNlIDQ8L2E+Cis8YSBocmVmPSJkdW1teSIgY2xhc3M9ImV4cGVjdGVkLXZpc2l0ZWQi
PkNhc2UgNTwvYT4KKzxhIGhyZWY9ImR1bW15IiBjbGFzcz0iZXhwZWN0ZWQtdmlzaXRlZCI+Q2Fz
ZSA2PC9hPgorPGEgaHJlZj0iZHVtbXkiIGNsYXNzPSJleHBlY3RlZC1saW5rIj5DYXNlIDc8L2E+
Cis8YSBocmVmPSJkdW1teSIgY2xhc3M9ImV4cGVjdGVkLWxpbmsiPkNhc2UgODwvYT4KKzxhIGNs
YXNzPSIiPkNhc2UgOTwvYT4KKzxhIGhyZWY9ImR1bW15IiBjbGFzcz0iZXhwZWN0ZWQtdmlzaXRl
ZCI+Q2FzZSAxMDwvYT4KKzxhIGhyZWY9ImR1bW15IiBjbGFzcz0iZXhwZWN0ZWQtbGluayI+Q2Fz
ZSAxMTwvYT4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS92aXNpdGVkLWhyZWYtbXV0
YXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvdmlzaXRl
ZC1ocmVmLW11dGF0aW9uLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9o
aXN0b3J5L3Zpc2l0ZWQtaHJlZi1tdXRhdGlvbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDkgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy50ZXN0UnVubmVy
KSB7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgdGVzdFJ1bm5lci5rZWVw
V2ViSGlzdG9yeSgpOworfQorCitmdW5jdGlvbiBzZXRIcmVmKHRlc3RjYXNlLCB1cmwpCit7Cisg
ICAgdGVzdGNhc2Uuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICB0ZXN0Y2FzZS5ocmVmID0g
dXJsOworICAgIHRlc3RjYXNlLnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lIjsKK30KKworZnVuY3Rp
b24gdGVzdCgpCit7CisgICAgc2V0SHJlZihjYXNlMiwgInJlc291cmNlcy9ub3QtdmlzaXRlZC5o
dG1sIik7CisgICAgc2V0SHJlZihjYXNlNCwgInJlc291cmNlcy9kdW1teS5odG1sIik7CisgICAg
c2V0SHJlZihjYXNlNiwgInJlc291cmNlcy9ub3QtdmlzaXRlZC5odG1sIik7CisgICAgc2V0SHJl
ZihjYXNlOCwgIiIpOworICAgIHNldEhyZWYoY2FzZTEwLCAicmVzb3VyY2VzL2R1bW15Lmh0bWwi
KTsKKyAgICBzZXRIcmVmKGNhc2UxMSwgInJlc291cmNlcy9ub3QtdmlzaXRlZC5odG1sIik7CisK
KyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOworfQorPC9zY3JpcHQ+Cis8c3R5bGU+CithOmxpbmsgeyBjb2xvcjogYmx1ZTsgfQorYTp2
aXNpdGVkIHsgY29sb3I6IGdyZWVuOyB9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2Fk
PSJ0ZXN0KCkiPgorPGRpdj4KKzxhIGlkPSJjYXNlMSIgaHJlZj0icmVzb3VyY2VzL2R1bW15Lmh0
bWwiPkNhc2UgMTwvYT4KKzxhIGlkPSJjYXNlMiIgaHJlZj0icmVzb3VyY2VzL2R1bW15Lmh0bWwi
PkNhc2UgMjwvYT4KKzxhIGlkPSJjYXNlMyIgaHJlZj0icmVzb3VyY2VzL25vdC12aXNpdGVkLmh0
bWwiPkNhc2UgMzwvYT4KKzxhIGlkPSJjYXNlNCIgaHJlZj0icmVzb3VyY2VzL25vdC12aXNpdGVk
Lmh0bWwiPkNhc2UgNDwvYT4KKzxhIGlkPSJjYXNlNSIgaHJlZj0iIj5DYXNlIDU8L2E+Cis8YSBp
ZD0iY2FzZTYiIGhyZWY9IiI+Q2FzZSA2PC9hPgorPGEgaWQ9ImNhc2U3IiBocmVmPSJyZXNvdXJj
ZXMvbm90LXZpc2l0ZWQuaHRtbCI+Q2FzZSA3PC9hPgorPGEgaWQ9ImNhc2U4IiBocmVmPSJyZXNv
dXJjZXMvbm90LXZpc2l0ZWQuaHRtbCI+Q2FzZSA4PC9hPgorPGEgaWQ9ImNhc2U5Ij5DYXNlIDk8
L2E+Cis8YSBpZD0iY2FzZTEwIj5DYXNlIDEwPC9hPgorPGEgaWQ9ImNhc2UxMSI+Q2FzZSAxMTwv
YT4KKzwvZGl2PgorPGlmcmFtZSBzcmM9InJlc291cmNlcy9kdW1teS5odG1sIiBzdHlsZT0idmlz
aWJpbGl0eTpoaWRkZW4iPjwvaWZyYW1lPgorPC9ib2R5Pgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>