<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html lang="en" style='--code-editor-font: var(--default-mono-font, "GitLab Mono"), JetBrains Mono, Menlo, DejaVu Sans Mono, Liberation Mono, Consolas, Ubuntu Mono, Courier New, andale mono, lucida console, monospace;'>
<head>
<meta content="text/html; charset=US-ASCII" http-equiv="Content-Type">
<title>
GitLab
</title>
<style data-premailer="ignore" type="text/css">
a { color: #1068bf; }
</style>
<style>img {
max-width: 100%; height: auto;
}
body {
font-size: 0.875rem;
}
body {
-webkit-text-shadow: rgba(255,255,255,0.01) 0 0 1px;
}
body {
font-family: var(--default-regular-font, "GitLab Sans"),-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Noto Sans",Ubuntu,Cantarell,"Helvetica Neue",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"; font-size: inherit;
}
</style>
</head>
<body style='font-size: inherit; -webkit-text-shadow: rgba(255,255,255,0.01) 0 0 1px; font-family: var(--default-regular-font, "GitLab Sans"),-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Noto Sans",Ubuntu,Cantarell,"Helvetica Neue",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";'>
<div class="content">
<h3 style="margin-top: 20px; margin-bottom: 10px;">
Timo Aaltonen pushed to branch master at <a href="https://salsa.debian.org/freeipa-team/389-ds-base">FreeIPA packaging / 389-ds-base</a>
</h3>
<h4 style="margin-top: 10px; margin-bottom: 10px;">
Commits:
</h4>
<ul>
<li>
<strong style="font-weight: bold;"><a href="https://salsa.debian.org/freeipa-team/389-ds-base/-/commit/5830b143f4a689cf1180a60a97dd07e9a167c7ed">5830b143</a></strong>
<div>
<span> by James Chapman </span> <i> at 2023-11-15T14:01:23+00:00 </i>
</div>
<pre class="commit-message" style='white-space: pre-wrap; display: block; font-size: 14px; color: #333238; position: relative; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; word-break: break-all; word-wrap: break-word; background-color: #fbfafd; border-radius: 2px; margin: 0; padding: 8px 12px; border: 1px solid #dcdcde;'>Bump version to 2.4.4
</pre>
</li>
<li>
<strong style="font-weight: bold;"><a href="https://salsa.debian.org/freeipa-team/389-ds-base/-/commit/fd4d4ba20d41b7ac375a93301563e70d43409777">fd4d4ba2</a></strong>
<div>
<span> by progier389 </span> <i> at 2023-11-17T14:47:44+01:00 </i>
</div>
<pre class="commit-message" style='white-space: pre-wrap; display: block; font-size: 14px; color: #333238; position: relative; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; word-break: break-all; word-wrap: break-word; background-color: #fbfafd; border-radius: 2px; margin: 0; padding: 8px 12px; border: 1px solid #dcdcde;'>Issue 5984 - Crash when paged result search are abandoned (#5985)
* Issue 5984 - Crash when paged result search are abandoned
Problem:
Fix #4551 has changed the lock that protects the paged result data
within a connection. But the abandon operation attempts to free
the paged search result with the connection lock.
This leads to race condition and double free causing an heap
corruption and a SIGSEGV.
Solution:
- Get a copy of the operation data that needs to be logged.
- Unlock the connection mutex (to avoid deadlock risk)
- Free the paged result while holding the paged result lock.
Issue: 5984
Reviewed by: @tbordaz (Thanks!)
(cherry picked from commit 06bd0862956672eb76276cab5c1dd906fe5a7eec)
</pre>
</li>
<li>
<strong style="font-weight: bold;"><a href="https://salsa.debian.org/freeipa-team/389-ds-base/-/commit/1b89a3374c725875313d80dae9f11848c7d47088">1b89a337</a></strong>
<div>
<span> by progier389 </span> <i> at 2023-11-21T12:01:19+01:00 </i>
</div>
<pre class="commit-message" style='white-space: pre-wrap; display: block; font-size: 14px; color: #333238; position: relative; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; word-break: break-all; word-wrap: break-word; background-color: #fbfafd; border-radius: 2px; margin: 0; padding: 8px 12px; border: 1px solid #dcdcde;'>Issue 5984 - Crash when paged result search are abandoned - fix2 (#5987)
Chasing several rabbits at the same time is a bad idea !
and I mixed branches and unwillingly pushed one commit for #5980 in #5984
just before the PR #5985 merge ! -:(
Hopefully it does not break anything but just logs some useless crap if instance fails to starts.
Anyway This commit reverts the change about __init.py
and also do a minor code cleanup (removed a trailing space) in abandon.c
Issue #5984
Reviewed by: @tbordaz Thanks !
(cherry picked from commit df7dd8320424f7ab616c9ad8086a6874ff8bf859)
</pre>
</li>
<li>
<strong style="font-weight: bold;"><a href="https://salsa.debian.org/freeipa-team/389-ds-base/-/commit/cd7fc221ec531676e0b6e52d0c0409798192d856">cd7fc221</a></strong>
<div>
<span> by Viktor Ashirov </span> <i> at 2023-12-11T16:16:12+01:00 </i>
</div>
<pre class="commit-message" style='white-space: pre-wrap; display: block; font-size: 14px; color: #333238; position: relative; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; word-break: break-all; word-wrap: break-word; background-color: #fbfafd; border-radius: 2px; margin: 0; padding: 8px 12px; border: 1px solid #dcdcde;'>Issue 5954 - Disable Transparent Huge Pages
Bug Description:
THP can have negative effects on DS performance when large caches are
used.
Fix Description:
* Add a new variable for `ns-slapd` THP_DISABLE.
When THP_DISABLE is set to 1, THP is disabled for `ns-slapd` process
via `prctl(2)`. With any other value, THP settings are untouched.
Before:
```
$ grep THP /proc/$(pidof ns-slapd)/status
THP_enabled: 1
```
After
```
$ grep THP /proc/$(pidof ns-slapd)/status
THP_enabled: 0
```
* Add a new healthcheck linter, that checks if THP is disabled system-wide
or per instance. In case THP is enabled for both the system and the
process, it prints recommendations how to disable THP.
Fixes: https://github.com/389ds/389-ds-base/issues/5954
Reviewed-by: @tbordaz, @Firstyear, @droideck (Thank you all!)
</pre>
</li>
<li>
<strong style="font-weight: bold;"><a href="https://salsa.debian.org/freeipa-team/389-ds-base/-/commit/f9d09a907a043a0cf2faa031b0a167bdaa27f387">f9d09a90</a></strong>
<div>
<span> by tbordaz </span> <i> at 2023-12-11T18:02:50+01:00 </i>
</div>
<pre class="commit-message" style='white-space: pre-wrap; display: block; font-size: 14px; color: #333238; position: relative; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; word-break: break-all; word-wrap: break-word; background-color: #fbfafd; border-radius: 2px; margin: 0; padding: 8px 12px; border: 1px solid #dcdcde;'>Issue 5944 - Reversion of the entry cache should be limited to BETXN plugin failures (#5994)
Bug description:
During an update if an BETXN plugin fails the full TXN is aborted and
the DB returns to the previous state. However potential internal
updates, done by BETXN plugins, are also applied on the entry cache.
Some entries in the entry cache are left in a state that does not
reflect the DB state. To prevent this mismatch, upon BETXN failure,
the fix https://pagure.io/389-ds-base/issue/50260 reverts some entries
in the entry cache .
The problem is that reversion is not limited to the cases of BETXN
failures that was the initial goal. So a "regular" error like schema
violation could trigger revert_cache
Fix description:
The fix flags if the failure is due to BETXN failures and
trigger revert_cache only in that case
relates: #5944
Reviewed by: Pierre Rogier (Thanks!)</pre>
</li>
<li>
<strong style="font-weight: bold;"><a href="https://salsa.debian.org/freeipa-team/389-ds-base/-/commit/75b026b4ac068c94a62bc7d63fad3cd8de74d81f">75b026b4</a></strong>
<div>
<span> by tbordaz </span> <i> at 2023-12-12T12:59:10+01:00 </i>
</div>
<pre class="commit-message" style='white-space: pre-wrap; display: block; font-size: 14px; color: #333238; position: relative; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; word-break: break-all; word-wrap: break-word; background-color: #fbfafd; border-radius: 2px; margin: 0; padding: 8px 12px; border: 1px solid #dcdcde;'>Issue 5939 - During an update, if the target entry is reverted in the entry cache, the server should not retry to lock it (#6007)
Bug description:
During an update if an BETXN plugin fails the full TXN is aborted and the DB
returns to the previous state.
However potential internal updates, done by BETXN plugins, are also applied
on the entry cache.
Even if the TXN is aborted some entries in the entry cache are left in a state
that does not reflect the DB state.
The fix https://pagure.io/389-ds-base/issue/50260 "reverts" those
entries, setting their state to INVALID.
A problem is that reverted entries stay in the entry cache, until refcnt is 0.
During that period, an update targeting that entry fails to retrieve the
entry from the entry cache and fails to add it again as it already exist
the entry.
The update iterates 1000 times, trying to read the entry and to fetch it
from DB.
This is a pure waste as the reverted entry stays too long.
The signature of this issue is a message in the error log: "Retry count exceeded"
Fix description:
The fix consiste in the loops (fetch on DN or NSUNIQUEID) to test if the
entry state is INVALID.
In such case it aborts the loop and return a failure.
relates: #5939
Reviewed by: Pierre Rogier, Simon Pichugin (Thanks !!)</pre>
</li>
<li>
<strong style="font-weight: bold;"><a href="https://salsa.debian.org/freeipa-team/389-ds-base/-/commit/e8dd583685e6143f2027f97569de4cc45ba46e14">e8dd5836</a></strong>
<div>
<span> by tbordaz </span> <i> at 2024-01-12T11:15:39+01:00 </i>
</div>
<pre class="commit-message" style='white-space: pre-wrap; display: block; font-size: 14px; color: #333238; position: relative; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; word-break: break-all; word-wrap: break-word; background-color: #fbfafd; border-radius: 2px; margin: 0; padding: 8px 12px; border: 1px solid #dcdcde;'>Issue 5989 - RFE support of inChain Matching Rule (#5990)
Bug description:
Computation of membership (like 'memberof') is a common issue.
The issue is more expensive to solve when there are nested membership.
For example "gives me all the groups this entry belongs to" or "gives me
all subordinates having this manager".
Either the LDAP client computes the values or dedicated plugin (like 'memberof')
maintains direct membership attribute for the LDAP client.
InChain Matching Rule allow a LDAP client to request the server to compute this membership.
Fix description:
The implementation is designed https://www.port389.org/docs/389ds/design/matching-rule-in-chain.html
A specific fix in aclanom.c because inChain MR adds a acl DENY
on 'cn=config'. There was a bug that cleared anonymous aci
if the it existed a DENY acl anywhere (except a specific
list of entries like 'cn=monitor'). It triggered a failure
on chaining backend suite
relates: #5989
Reviewed by: William Brown, Mark Reynolds, Pierre Rogier, Simon Pichugin (Thanks !)</pre>
</li>
<li>
<strong style="font-weight: bold;"><a href="https://salsa.debian.org/freeipa-team/389-ds-base/-/commit/33c0e0115c03017ba94ee02f144383704de32a25">33c0e011</a></strong>
<div>
<span> by James Chapman </span> <i> at 2024-01-12T12:39:55+00:00 </i>
</div>
<pre class="commit-message" style='white-space: pre-wrap; display: block; font-size: 14px; color: #333238; position: relative; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; word-break: break-all; word-wrap: break-word; background-color: #fbfafd; border-radius: 2px; margin: 0; padding: 8px 12px; border: 1px solid #dcdcde;'>Bump version to 2.4.5
</pre>
</li>
<li>
<strong style="font-weight: bold;"><a href="https://salsa.debian.org/freeipa-team/389-ds-base/-/commit/e2c88b918e999f20159ec1c557bdf85343a39a8d">e2c88b91</a></strong>
<div>
<span> by Timo Aaltonen </span> <i> at 2024-02-11T16:30:12+02:00 </i>
</div>
<pre class="commit-message" style='white-space: pre-wrap; display: block; font-size: 14px; color: #333238; position: relative; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; word-break: break-all; word-wrap: break-word; background-color: #fbfafd; border-radius: 2px; margin: 0; padding: 8px 12px; border: 1px solid #dcdcde;'>control: Migrate to libldap-dev, and drop obsolete B/R/P.
</pre>
</li>
<li>
<strong style="font-weight: bold;"><a href="https://salsa.debian.org/freeipa-team/389-ds-base/-/commit/d4257b0ecabb2ecb38c847dcf99c3f4f113e479d">d4257b0e</a></strong>
<div>
<span> by Timo Aaltonen </span> <i> at 2024-04-14T20:45:42+03:00 </i>
</div>
<pre class="commit-message" style='white-space: pre-wrap; display: block; font-size: 14px; color: #333238; position: relative; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; word-break: break-all; word-wrap: break-word; background-color: #fbfafd; border-radius: 2px; margin: 0; padding: 8px 12px; border: 1px solid #dcdcde;'>Merge tag '389-ds-base-2.4.4' into m
</pre>
</li>
<li>
<strong style="font-weight: bold;"><a href="https://salsa.debian.org/freeipa-team/389-ds-base/-/commit/274f4f8d58629dd03af7e7acc3f492a3f30bacc7">274f4f8d</a></strong>
<div>
<span> by Timo Aaltonen </span> <i> at 2024-04-14T20:46:11+03:00 </i>
</div>
<pre class="commit-message" style='white-space: pre-wrap; display: block; font-size: 14px; color: #333238; position: relative; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; word-break: break-all; word-wrap: break-word; background-color: #fbfafd; border-radius: 2px; margin: 0; padding: 8px 12px; border: 1px solid #dcdcde;'>Merge branch 'master' into m
</pre>
</li>
<li>
<strong style="font-weight: bold;"><a href="https://salsa.debian.org/freeipa-team/389-ds-base/-/commit/02247c70cb95bf2fc3635ee5589fa675ca8f51bf">02247c70</a></strong>
<div>
<span> by Timo Aaltonen </span> <i> at 2024-04-15T18:45:30+03:00 </i>
</div>
<pre class="commit-message" style='white-space: pre-wrap; display: block; font-size: 14px; color: #333238; position: relative; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; word-break: break-all; word-wrap: break-word; background-color: #fbfafd; border-radius: 2px; margin: 0; padding: 8px 12px; border: 1px solid #dcdcde;'>version bump
</pre>
</li>
<li>
<strong style="font-weight: bold;"><a href="https://salsa.debian.org/freeipa-team/389-ds-base/-/commit/be5e970c4714a794cbf4bfbe04fc363d490b32b1">be5e970c</a></strong>
<div>
<span> by Timo Aaltonen </span> <i> at 2024-04-15T18:48:44+03:00 </i>
</div>
<pre class="commit-message" style='white-space: pre-wrap; display: block; font-size: 14px; color: #333238; position: relative; font-family: var(--default-mono-font, "GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; word-break: break-all; word-wrap: break-word; background-color: #fbfafd; border-radius: 2px; margin: 0; padding: 8px 12px; border: 1px solid #dcdcde;'>releasing package 389-ds-base version 2.4.5+dfsg1-1
</pre>
</li>
</ul>
<h4 style="margin-top: 10px; margin-bottom: 10px;">
30 changed files:
</h4>
<ul>
<li class="file-stats">
<a href="#d5b4de16d947214ec306bd57bed1bd23a939b5f9">
Makefile.am
</a>
</li>
<li class="file-stats">
<a href="#d7e560a1b9a915cc82a4a544b31706fd6db5f6fd">
VERSION.sh
</a>
</li>
<li class="file-stats">
<a href="#9c96da0e9f91d7d8937b69b524702c106258f0d1">
debian/changelog
</a>
</li>
<li class="file-stats">
<a href="#58ef006ab62b83b4bec5d81fe5b32c3b4c2d1cc2">
debian/control
</a>
</li>
<li class="file-stats">
<a href="#0d862e5479366a579c86358e4f2b7b400c5e4ae2">
dirsrvtests/tests/suites/betxns/betxn_test.py
</a>
</li>
<li class="file-stats">
<a href="#2a74543836ede72b6a2909e3b758ac8a5f684cba">
<span class="new-file">
+
dirsrvtests/tests/suites/filter/inchain_test.py
</span>
</a>
</li>
<li class="file-stats">
<a href="#49b8a3643546a629798679b63c778c82d7a54447">
<span class="new-file">
+
dirsrvtests/tests/suites/healthcheck/health_tunables_test.py
</span>
</a>
</li>
<li class="file-stats">
<a href="#fc745b7329408642ad5ca2846097fdbbb1cfc158">
dirsrvtests/tests/suites/healthcheck/healthcheck_test.py
</a>
</li>
<li class="file-stats">
<a href="#0d59afce506e6c888e4e3e8be90208a6a8c46c00">
dirsrvtests/tests/suites/paged_results/paged_results_test.py
</a>
</li>
<li class="file-stats">
<a href="#8f37058f4922b92f2643c1d87e6daa36b5ddf715">
ldap/ldif/template-dse-minimal.ldif.in
</a>
</li>
<li class="file-stats">
<a href="#a42d584072620409bd373bc0168cbe6046a9f78c">
ldap/ldif/template-dse.ldif.in
</a>
</li>
<li class="file-stats">
<a href="#d1cc444f58863458428b800758b33b7181675cc9">
ldap/servers/plugins/acl/aclanom.c
</a>
</li>
<li class="file-stats">
<a href="#5c8497eddb03d93bc0dc7c3d2ef41973b95537b3">
<span class="new-file">
+
ldap/servers/plugins/syntaxes/inchain.c
</span>
</a>
</li>
<li class="file-stats">
<a href="#738fbe02d124320ac8db1200be4279e579402cb6">
ldap/servers/slapd/abandon.c
</a>
</li>
<li class="file-stats">
<a href="#bcb813ffdb857f4b37d2cd4befa1137a2995188f">
ldap/servers/slapd/back-ldbm/cache.c
</a>
</li>
<li class="file-stats">
<a href="#8c398724684620f8d2c0fad49d404cc7735a4c65">
ldap/servers/slapd/back-ldbm/filterindex.c
</a>
</li>
<li class="file-stats">
<a href="#dfe9e26e2a88f8eb4fb0828778d4a55df827d572">
ldap/servers/slapd/back-ldbm/findentry.c
</a>
</li>
<li class="file-stats">
<a href="#20dda463977c1587d5b272f1a2fdf737935cc069">
ldap/servers/slapd/back-ldbm/index.c
</a>
</li>
<li class="file-stats">
<a href="#237f4fcd8cc0a5133c4613b4210ed3f27c5318e8">
ldap/servers/slapd/back-ldbm/ldbm_add.c
</a>
</li>
<li class="file-stats">
<a href="#8045a71398359c06534e05568b87e9fd0e267333">
ldap/servers/slapd/back-ldbm/ldbm_delete.c
</a>
</li>
<li class="file-stats">
<a href="#56b35ffbe77e9acf840cb747333b32e5e11f92af">
ldap/servers/slapd/back-ldbm/ldbm_modify.c
</a>
</li>
<li class="file-stats">
<a href="#4870a3e011bb77b5f18f5fd38776191397677460">
ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
</a>
</li>
<li class="file-stats">
<a href="#9aba92f51fa86a4405f79c3432a8dffcd6adbd93">
ldap/servers/slapd/back-ldbm/proto-back-ldbm.h
</a>
</li>
<li class="file-stats">
<a href="#8d2b82fbb50bcbec90db372897d7cafb3dd9c544">
ldap/servers/slapd/main.c
</a>
</li>
<li class="file-stats">
<a href="#96bdff9e65f14a9ffb0030189550617b29940649">
ldap/servers/slapd/opshared.c
</a>
</li>
<li class="file-stats">
<a href="#8fc5e685d81683826eb9c4ac7cdbdcc197c1f8c6">
ldap/servers/slapd/pagedresults.c
</a>
</li>
<li class="file-stats">
<a href="#b4d3ac554cf80abe29c701efb1382f691a66db5e">
ldap/servers/slapd/proto-slap.h
</a>
</li>
<li class="file-stats">
<a href="#4af1ef1ccc5b3f04935da6353890e024903fdc2f">
ldap/servers/slapd/slap.h
</a>
</li>
<li class="file-stats">
<a href="#207b990dc2c75c8e1d4e83ea680ad4790a084e50">
ldap/servers/slapd/slapi-memberof.c
</a>
</li>
<li class="file-stats">
<a href="#d9583a3e0a43705c1cfee9f55e721d8eebdbebd1">
src/lib389/lib389/cli_ctl/health.py
</a>
</li>
</ul>
<h5 style="margin-top: 10px; margin-bottom: 10px; font-size: 0.875rem;">
The diff was not included because it is too large.
</h5>
</div>
<div class="footer" style="margin-top: 10px;">
<p style="font-size: small; color: #737278;">
—
<br>
<a href="https://salsa.debian.org/freeipa-team/389-ds-base/-/compare/1bbc74c4898db324eb4098cd52399e411a02e6a3...be5e970c4714a794cbf4bfbe04fc363d490b32b1">View it on GitLab</a>.
<br>
You're receiving this email because of your account on <a target="_blank" rel="noopener noreferrer" href="https://salsa.debian.org">salsa.debian.org</a>. <a href="https://salsa.debian.org/-/profile/notifications" target="_blank" rel="noopener noreferrer" class="mng-notif-link">Manage all notifications</a> · <a href="https://salsa.debian.org/help" target="_blank" rel="noopener noreferrer" class="help-link">Help</a>
</p>
</div>
</body>
</html>