Skip to content

Commit 440a322

Browse files
committed
Merge branch 'dev' of github.com:biocore/qiita
2 parents 13eafdf + dac87a7 commit 440a322

File tree

202 files changed

+11548
-9096
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

202 files changed

+11548
-9096
lines changed

.github/workflows/qiita-ci.yml

+28-3
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,6 @@ jobs:
154154
155155
echo "5. Setting up qiita"
156156
conda activate qiita
157-
# adapt environment_script for private qiita plugins from travis to github actions.
158-
sed 's#export PATH="/home/travis/miniconda3/bin:$PATH"; source #source /home/runner/.profile; conda #' -i qiita_db/support_files/patches/54.sql
159157
qiita-env make --no-load-ontologies
160158
qiita-test-install
161159
qiita plugins update
@@ -203,7 +201,34 @@ jobs:
203201
QIITA_PID=`cat /tmp/supervisord.pid`
204202
kill $QIITA_PID
205203
sleep 10
206-
if [[ "$COVER_PACKAGE" != *"qiita_db"* ]]; then test_data_studies/commands.sh; all-qiita-cron-job; fi
204+
# due to qiita_db tests being more complex and taking longer than
205+
# the other tests we will only add some extra tests to the run that is
206+
# not testing qiita_db
207+
if [[ "$COVER_PACKAGE" != *"qiita_db"* ]]; then
208+
# 1. testing that we can add some "dummy" studies to the db via
209+
# CLI
210+
test_data_studies/commands.sh;
211+
# 2. making sure that all qiita cron jobs complete as expected
212+
all-qiita-cron-job;
213+
# 3. making sure than a production system has the expected rows
214+
# in all our tables; steps: a. drop test db, b. change $QIITA_CONFIG_FP
215+
# c. create new production system, c. count rows in the db.
216+
qiita-env drop;
217+
cp $QIITA_CONFIG_FP ${QIITA_CONFIG_FP}.bk
218+
sed 's/TEST_ENVIRONMENT = TRUE/TEST_ENVIRONMENT = FALSE/g' ${QIITA_CONFIG_FP}.bk > $QIITA_CONFIG_FP;
219+
qiita-env make --no-load-ontologies;
220+
221+
export PGPASSWORD=postgres
222+
pgport=${{ job.services.postgres.ports[5432] }}
223+
row_counts=`psql -h localhost -U postgres -d qiita_test -p $pgport -c "SELECT SUM(c.reltuples) FROM pg_class c JOIN pg_namespace n on n.oid = c.relnamespace WHERE n.nspname = 'qiita' AND c.relkind = 'r' AND n.nspname NOT IN ('information_schema', 'pg_catalog');"`
224+
if [[ `echo $row_counts` != *" 0 "* ]]; then
225+
echo "***********";
226+
echo "The number of rows in a production system is not what's expected:";
227+
echo $row_counts;
228+
echo "***********";
229+
exit 1
230+
fi
231+
fi
207232
208233
- name: Submit coveralls
209234
uses: AndreMiras/coveralls-python-action@develop

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,6 @@ qiita_pet/*.conf
7272

7373
# jupyter notebooks input data
7474
notebooks/*/*.tsv.gz
75+
76+
# jupyter notebooks input data
77+
notebooks/resource-allocation/data

CHANGELOG.md

+19
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,24 @@
11
# Qiita changelog
22

3+
Version 2024.07
4+
---------------
5+
6+
Deployed on July 15th, 2024
7+
8+
* On June 14th, 2024 we modified the SPP to use ["fastp & minimap2 against GRCh38.p14 + Phi X 174 + T2T-CHM13v2.0, then Movi against GRCh38.p14, T2T-CHM13v2.0 + Human Pangenome Reference Consortium release 2023"](https://github.com/cguccione/human_host_filtration) to filter human-reads.
9+
* Full refactor of the [DB patching system](https://github.com/qiita-spots/qiita/blob/master/CONTRIBUTING.md#patch-91sql) to make sure that a new production deployment has a fully empty database.
10+
* Fully removed Qiimp from Qiita.
11+
* Users can now add `ORCID`, `ResearchGate` and/or `GoogleScholar` information to their profile and the creation (registration) timestamp is kept in the database. Thank you @jlab.
12+
* Admins can now track and purge non-confirmed users from the database via the GUI (`/admin/purge_users/`). Thank you @jlab.
13+
* Added `qiita.slurm_resource_allocations` to store general job resource usage, which can be populated by `qiita_db.util.update_resource_allocation_table`.
14+
* Added `qiita_db.util.resource_allocation_plot` to generate different models to allocate resources from a given software command based on previous jobs, thank you @Gossty !
15+
* The stats page map can be centered via the configuration file; additionally, the Help and Admin emails are defined also via the configuration files, thank you @jlab !
16+
* ``Sequel IIe``, ``Revio``, and ``Onso`` are now valid instruments for the ``PacBio_SMRT`` platform.
17+
* Added `current_human_filtering` to the prep-information and `human_reads_filter_method` to the artifact to keep track of the method that it was used to human reads filter the raw artifact and know if it's up to date with what is expected via the best practices.
18+
* Added `reprocess_job_id` to the prep-information so we keep track if a preparation has been reprocessed with another job.
19+
* Other general fixes, like [#3385](https://github.com/qiita-spots/qiita/pull/3385), [#3397](https://github.com/qiita-spots/qiita/pull/3397), [#3399](https://github.com/qiita-spots/qiita/pull/3399), [#3400](https://github.com/qiita-spots/qiita/pull/3400), [#3409](https://github.com/qiita-spots/qiita/pull/3409), [#3410](https://github.com/qiita-spots/qiita/pull/3410).
20+
21+
322
Version 2024.02
423
---------------
524

CONTRIBUTING.md

+11
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,17 @@ After the initial production release of Qiita, changes to the database schema wi
9494
2. We keep fully patched versions of the DBS and HTML files in the repository
9595
3. We keep a patch file for each patch as required in the `qiita_db/support_files/patches` directory. Note that **the patches will be applied in order based on the natural sort order of their filename** (e.g., `2.sql` will be applied before `10.sql`, and `10.sql` will be applied before `a.sql`)
9696

97+
### Patch 91.sql
98+
99+
In May 2024 we decided to:
100+
* Merge all patches into the main database schema, this means that there are no patches younger than 92.sql.
101+
* Added a new folder `patches/test_db_sql/` where we can store sql files that will only be applied for the test environment.
102+
* Added a test to the GitHub actions to test that the production database has an expected number of rows.
103+
104+
Note that these changes mean:
105+
1. 92.sql is the current first sql file to patch the database.
106+
2. If you need to make changes (like INSERTS) _only_ to the tests database you need to add a patch to `patches/test_db_sql/`.
107+
97108
### Developer Workflow
98109

99110
1. Load the fully patched DBS file (e.g., `qiita-db.dbs`) in [DBSchema](http://www.dbschema.com/)

INSTALL.md

+4-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ You can reboot the system with `sudo reboot` in case any packages were updated.
7878
Next, we need to add the Postgres repository to our system:
7979
```bash
8080
sudo apt update
81-
sudo apt install curl gpg gnupg2 software-properties-common apt-transport-https lsb-release ca-certificates
81+
sudo apt install curl gpg gnupg2 software-properties-common apt-transport-https lsb-release ca-certificates git
8282
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc|sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg
8383
echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" |sudo tee /etc/apt/sources.list.d/pgdg.list
8484
```
@@ -238,6 +238,9 @@ If you are using [NGINX](https://www.nginx.com/) via conda, you are going to nee
238238
mkdir -p ${CONDA_PREFIX}/var/run/nginx/
239239
```
240240

241+
Note that the shipped nginx version from conda, does **not** contain the mod_zip module: https://github.com/evanmiller/mod_zip
242+
This leads to unexpected behaviour when generating a download link for anonymous artefact sharing, i.e. Qiita returns a flat file listing artifact filepaths instead of generating a ZIP archive that contains those files. You need to compile nginx with the additional mod_zip module yourself. (I've invested multiple hours to realize that the configure routine does not properly link shared libraries to the nginx binary. Try adding `--with-ld-opt=" -Wl,-rpath,/home/foo/lib "` to the `./auto/configure` call.)
243+
241244
## Start Qiita
242245

243246
Start postgres (instructions vary depending on operating system and install method).

notebooks/resource-allocation/generate-allocation-summary-arrays.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from qiita_core.util import MaxRSS_helper
1+
from qiita_db.util import MaxRSS_helper
22
from qiita_db.software import Software
33
import datetime
44
from io import StringIO

notebooks/resource-allocation/generate-allocation-summary.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from json import loads
66
from os.path import join
77

8-
from qiita_core.util import MaxRSS_helper
8+
from qiita_db.util import MaxRSS_helper
99
from qiita_db.exceptions import QiitaDBUnknownIDError
1010
from qiita_db.processing_job import ProcessingJob
1111
from qiita_db.software import Software

qiita_core/configuration_manager.py

+72-1
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,12 @@ class ConfigurationManager(object):
109109
The portal subdirectory used in the URL
110110
portal_fp : str
111111
The filepath to the portal styling config file
112+
stats_map_center_latitude : float
113+
The center latitude of the world map, shown on the Stats map.
114+
Defaults to 40.01027 (Boulder, CO, USA)
115+
stats_map_center_longitude : float
116+
The center longitude of the world map, shown on the Stats map.
117+
Defaults to -105.24827 (Boulder, CO, USA)
112118
qiita_env : str
113119
The script used to start the qiita environment
114120
private_launcher : str
@@ -117,6 +123,10 @@ class ConfigurationManager(object):
117123
The script used to start the plugins
118124
plugin_dir : str
119125
The path to the directory containing the plugin configuration files
126+
help_email : str
127+
The email address a user should write to when asking for help
128+
sysadmin_email : str
129+
The email address, Qiita sends internal notifications to a sys admin
120130
121131
Raises
122132
------
@@ -234,6 +244,32 @@ def _get_main(self, config):
234244
self.key_file = join(install_dir, 'qiita_core', 'support_files',
235245
'ci_server.key')
236246

247+
self.help_email = config.get('main', 'HELP_EMAIL')
248+
if not self.help_email:
249+
raise ValueError(
250+
"You did not specify the HELP_EMAIL address in the main "
251+
"section of Qiita's config file. This address is essential "
252+
"for users to ask for help as it is displayed at various "
253+
"location throughout Qiita's web pages.")
254+
if (self.help_email == '[email protected]') and \
255+
(self.test_environment is False):
256+
warnings.warn(
257+
"Using the github fake email for HELP_EMAIL, "
258+
"are you sure this is OK?")
259+
260+
self.sysadmin_email = config.get('main', 'SYSADMIN_EMAIL')
261+
if not self.sysadmin_email:
262+
raise ValueError(
263+
"You did not specify the SYSADMIN_EMAIL address in the main "
264+
"section of Qiita's config file. Serious issues will "
265+
"automatically be reported to a sys admin, an according "
266+
"address is therefore required!")
267+
if (self.sysadmin_email == '[email protected]') and \
268+
(self.test_environment is False):
269+
warnings.warn(
270+
"Using the github fake email for SYSADMIN_EMAIL, "
271+
"are you sure this is OK?")
272+
237273
def _get_job_scheduler(self, config):
238274
"""Get the configuration of the job_scheduler section"""
239275
self.job_scheduler_owner = config.get(
@@ -317,5 +353,40 @@ def _get_portal(self, config):
317353
else:
318354
self.portal_dir = ""
319355

356+
msg = ("The value %s for %s you set in Qiita's configuration file "
357+
"(section 'portal') for the Stats world map cannot be "
358+
"intepreted as a float! %s")
359+
lat_default = 40.01027 # Boulder CO, USA
360+
try:
361+
self.stats_map_center_latitude = config.get(
362+
'portal', 'STATS_MAP_CENTER_LATITUDE', fallback=lat_default)
363+
if self.stats_map_center_latitude == '':
364+
self.stats_map_center_latitude = lat_default
365+
self.stats_map_center_latitude = float(
366+
self.stats_map_center_latitude)
367+
except ValueError as e:
368+
raise ValueError(msg % (self.stats_map_center_latitude,
369+
'STATS_MAP_CENTER_LATITUDE', e))
370+
371+
lon_default = -105.24827 # Boulder CO, USA
372+
try:
373+
self.stats_map_center_longitude = config.get(
374+
'portal', 'STATS_MAP_CENTER_LONGITUDE', fallback=lon_default)
375+
if self.stats_map_center_longitude == '':
376+
self.stats_map_center_longitude = lon_default
377+
self.stats_map_center_longitude = float(
378+
self.stats_map_center_longitude)
379+
except ValueError as e:
380+
raise ValueError(msg % (self.stats_map_center_longitude,
381+
'STATS_MAP_CENTER_LONGITUDE', e))
382+
for (name, val) in [('latitude', self.stats_map_center_latitude),
383+
('longitude', self.stats_map_center_longitude)]:
384+
msg = ("The %s of %s you set in Qiita's configuration file "
385+
"(section 'portal') for the Stats world map cannot be %s!")
386+
if val < -180:
387+
raise ValueError(msg % (name, val, 'smaller than -180°'))
388+
if val > 180:
389+
raise ValueError(msg % (name, val, 'larger than 180°'))
390+
320391
def _iframe(self, config):
321-
self.iframe_qiimp = config.get('iframe', 'QIIMP')
392+
self.iframe_qiimp = config.get('iframe', 'QIIMP', fallback=None)

qiita_core/support_files/cert.conf

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
authorityKeyIdentifier=keyid,issuer
2+
basicConstraints=CA:FALSE
3+
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
4+
subjectAltName = @alt_names
5+
6+
[alt_names]
7+
DNS.1 = localhost
+16-16
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
-----BEGIN CERTIFICATE-----
2-
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
2020
-----END CERTIFICATE-----
+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDC1vjTsLU7DajT
3+
nfeoib2B6tzVpg+iKDR5Wb3WyjkiO1suRJlgZFRqgIX+agWXCfQlZhjvjbbB8OG+
4+
NdNqYrOyBujA2Hxr2tVpDEU65lNaI3ok1jdm1+C2r5jXLo9FQoJv30TYpRenwm7k
5+
a8Q4SPb8BC1UAji8oWCB4dIKlMppkOtX7+a5TWaaRv/l2IdbmAzX1U6KGluP9bkq
6+
Lg1e60io1FK2UpAxhaKm2Zt+rNsBTuygDfpWN2ltUGxAm6s85aqxZB2K8X80WCXg
7+
WyMMR4UIH+hnVId7+KDZyvCtFPtRmOmdmriDiMNp/MY8IFjtpQYROzPfYEw9XY/b
8+
bIqOJw+nAgMBAAECggEAJy8Mg6Y6DFJG7agLMn3g+su89cqbwkTLqMv/fb7VlqjR
9+
QZDSN6x1vaVzTSMNVL7PtuW9hg+9/WrwO0yf4/lNojP5gy8GdrpfyOyKz7macbpI
10+
yje6lJg9vP+7gSr/7THfAZipQ9iP1VEo9A8oOxmRckV0yDxaJLVfrz82+qHJw0jj
11+
Iy/8kkKtQEZ8gN547IDVladRunAGU4xYl9n9hPDfAbA3lPkjNTytzPk8Be4X98kW
12+
K2L4Q0wloRV6/n7qDamyjFsDarswxFA+TXypiESxQHFCdNiSKqAv3DHE6QcYRWQK
13+
vwa5QfCIHFpMsclbmGvB9WSPxC6HcMppcWyf5V9RgQKBgQD/xlK2X0ig1yqn9OMX
14+
oo8XRWZqC4skn3/I8RkeMKS1dBg3o0v3c6uF4RY4i35lMZdPewFtYy8SEQa3XMSk
15+
6z/DCeBKzIbjqxv5pSFrMu2MR72SlmnTkbyq6T4t+OIII75T11XtbQLidDvZNgQI
16+
8lnQQsJfBJZQQ/+ERICNomMGlwKBgQDDAuh6gVic/lF4geCAhkRarjrZlUohWUuD
17+
1jSbSuXs5GoxMZ9+b2JAA2SUxIY3itw/SCT0ASoylmuAcoaZ7OJsjEq5EjJx5uns
18+
GcJ6TDeGIa9ttGwU5FyLLnCdM4ndGtAYAcDdQWAAkGT+gNOQgqX81bnqhEWGNDkY
19+
9LxCL0vxcQKBgGjD90U0Ki+XcqVxLUOVFj9V8ekl6UyK+HB6MOuoyQ56CyFfBdLJ
20+
0kv4Mn3exVr1wSCRJbiEk9c2miWpHfLfWTKubOy2cdn3UHIlLVcXeS2ohQHyEk7S
21+
txDakNmLxCnJWkBFR7EEodXX/luuQGDZw+gGME9zNY6TC6pF1NIu3ZjpAoGAf4HQ
22+
RgF60jPLS1MIWqDv4qbXHdtqPAHpyUru3LcNPWZgNMgwc/gaMqbFRix1Ya2ussXW
23+
O6DjWW5W3gaEEfL8XWMhnH7Ucvs76j8xlMtu5onx7XYx0Ts7c1mrEm5XbzWP6JKE
24+
62ZKgjPnhSzwqCV0qKuKQ1e3KbfNuY6T5WaNblECgYAZs2s3Hw8eBPDFHVqRdHfl
25+
a5+M8cXk2pUytNCGwJZ/Q/OJLUH/M9VOUE6ncHs4iX2XoCrHHqHjwZ2s3wgryS2n
26+
8RJP8Zx0ZQqkgrXrfxxABY8UJsmUQu4X5EksoCYgv6owqNM6NuQBnfSwY6y8TjFs
27+
4+5t5RSoyHDQeIc4OKiCdA==
28+
-----END PRIVATE KEY-----
+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2FB946B7AAF21FDC0387BAA7B5ABF5D91E0D9F4B
1+
2FB946B7AAF21FDC0387BAA7B5ABF5D91E0D9F4C
+17-17
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
-----BEGIN CERTIFICATE-----
2-
MIIDoTCCAomgAwIBAgIUL7lGt6ryH9wDh7qntav12R4Nn0swDQYJKoZIhvcNAQEL
2+
MIIDoTCCAomgAwIBAgIUL7lGt6ryH9wDh7qntav12R4Nn0wwDQYJKoZIhvcNAQEL
33
BQAwNTESMBAGA1UEAwwJbG9jYWxob3N0MQswCQYDVQQGEwJVUzESMBAGA1UEBwwJ
4-
U2FuIERpZWdvMB4XDTIzMDUzMDE4MDQzMloXDTI0MDUyOTE4MDQzMlowbjELMAkG
4+
U2FuIERpZWdvMB4XDTI0MDUzMTEzMjcwNVoXDTMzMDgxNzEzMjcwNVowbjELMAkG
55
A1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExEjAQBgNVBAcMCVNhbiBEaWVn
66
bzENMAsGA1UECgwEVUNTRDETMBEGA1UECwwKS25pZ2h0IExhYjESMBAGA1UEAwwJ
7-
bG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvBP9ojX6
8-
JJQkZQ/awx45BDiqCJTdggCVMhCF1dDwYHpNIADWVLqXosUOml2lPp8QAD3MrklB
9-
+blpPCjvBl/DqVsSqoGN3U3ocFyon4+7XzIXuI2js/Bf42PRCIDvu65WNNpfVmfC
10-
k1Pc4iTe/pIZEErZ4gENsTdhjvFmiWW+UPwGNu3Ud0RpQtQkvs0mKpp/91RZm4Ra
11-
woMa3fapfpLYzToSnAHfqP+1eCabLIpYp3Rsj2b0KsaMqyRO1xtb2lCf5nwEG08+
12-
pctKjObWL03Gza41gcoWn0PGU7Dtks3gNStovcYqTC/roUK5zd+BN6GhdADLEE6r
13-
RGhoJDSEZS9XewIDAQABo3AwbjAfBgNVHSMEGDAWgBR3cV67O03cSg+vFUQ+EKl0
14-
GN4r5zAJBgNVHRMEAjAAMAsGA1UdDwQEAwIE8DAUBgNVHREEDTALgglsb2NhbGhv
15-
c3QwHQYDVR0OBBYEFOk1W4cBT/aN3Q2q4k3OpL6RKgikMA0GCSqGSIb3DQEBCwUA
16-
A4IBAQBuqKdaQTIHU3al0oa1jGISIRs8WjKi0AswzOiKoeiXbGIsAC0csiW8ErcU
17-
nwPOB8dKU4AgMrcTjTE+vKw7yie7yQ8tAg+dkNPsjz6ZCbRAttdxDfvO30/cL3Je
18-
YgIc+A8WAeTUQ4mGWTBlTYZhFG+xMu7La7oPDhvNcAWYQhTj6rUnZ5/ggAygX+wn
19-
UtR8gjSJU4WxFzyFDVNk9KnqeRC2l1mZHsgyUe+ne534EOiUzxa8D07t+L4jt/0X
20-
EWGu1/GFODOwOtn9UzKw1I1jaiff5/e3CvSDzK53RY1lWqbdhqoiaMLLWjanjA2i
21-
KZ/gjVd9s6htU1ede2oLbQ11gRdL
7+
bG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuC9jQSL2
8+
Zt0S8YHc4T42UMgK1o7qtXRG/G3BWkZYXrcFQHD3CFt4kvBOrWpyqulVDvmhMXbI
9+
ZUra/Mw5lcL6c3PV4CWa1O/zfJ7OmitXsXq4iuCgizNOD6ms7bNGWXvDoV8pxZ1N
10+
hKwzWZyKstwgIrutG4GWQbfq1Q+9JsLS4xuPd4+C+0IJpPy6TZ2jswbWjIV1Iikg
11+
S2w8ZQKNXUoM27cR9m/VXcPUNnzpJPfiYw3r4zezR1ce8wjsownx7LuV1V5NQwnn
12+
5vXEQRgm5MfLvJZ7i4cE9LX4PY8luPdPBbrfiMvuHJ+9F9K/Ma1xMolAdupNWCt0
13+
5dfN4/ozEsFYGwIDAQABo3AwbjAfBgNVHSMEGDAWgBRWfa3Zu7StSFvmWxDC8J07
14+
4LdZ3TAJBgNVHRMEAjAAMAsGA1UdDwQEAwIE8DAUBgNVHREEDTALgglsb2NhbGhv
15+
c3QwHQYDVR0OBBYEFKw6A/4GELz92LjFfSZuZZicn5x/MA0GCSqGSIb3DQEBCwUA
16+
A4IBAQA2Rh1+Gwi4Wg2IU2g2lckzVBhQmoNgh2ei806K9P12//9sRUT41fwrzGo7
17+
WHYKJbMP/6l204brq4c6W51xW5QVMtfBHQ4jP3e8Ryq4M/7QNBqfrf7ufzW1cIfj
18+
kFBukbhZx/cmnTNM5j6cUbinx4GVkxQMJqxGRKVt94updY9T/SrKI4IqFVV9SzsW
19+
ElqNpmRGElUs05GujBjN7KryUN0ilM3H8aieEIAZlH3TNncVudcdV5+0A6Mkxw8d
20+
JmsJ1qATnR6ruJmHwjuagY3CYbhDSaQlGbQOKPor7XcT45R36crYuXdWkOh6A0Mx
21+
Q/uy5CFcuPA1ZCfs0jwDpdBjcUm0
2222
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)