diff --git a/composer.lock b/composer.lock
index ddd64ce042e0a1a5085285d2e806ec546d66d648..4e39b70777fc954e43e339a061e9f0262f32e27f 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "6d65787286d3536ae02fa1586bdc22ba",
+    "content-hash": "b0cfa461a1ac992d8c05aff98bfa21f1",
     "packages": [
         {
             "name": "asm89/stack-cors",
@@ -41,7 +41,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Alexander",
@@ -50,7 +52,10 @@
             ],
             "description": "Cross-origin resource sharing library and stack middleware",
             "homepage": "https://github.com/asm89/stack-cors",
-            "keywords": ["cors", "stack"],
+            "keywords": [
+                "cors",
+                "stack"
+            ],
             "support": {
                 "issues": "https://github.com/asm89/stack-cors/issues",
                 "source": "https://github.com/asm89/stack-cors/tree/v2.1.1"
@@ -107,7 +112,9 @@
                 "symfony/yaml": "^6.3",
                 "vimeo/psalm": "^5.14.0"
             },
-            "bin": ["bin/dcg"],
+            "bin": [
+                "bin/dcg"
+            ],
             "type": "library",
             "autoload": {
                 "psr-4": {
@@ -115,7 +122,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "description": "Drupal code generator",
             "support": {
                 "issues": "https://github.com/Chi-teck/drupal-code-generator/issues",
@@ -180,7 +189,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Kyle Robinson Young",
@@ -320,7 +331,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Nils Adermann",
@@ -339,7 +352,12 @@
                 }
             ],
             "description": "Semver library that offers utilities, version constraint parsing and validation.",
-            "keywords": ["semantic", "semver", "validation", "versioning"],
+            "keywords": [
+                "semantic",
+                "semver",
+                "validation",
+                "versioning"
+            ],
             "support": {
                 "irc": "irc://irc.freenode.org/composer",
                 "issues": "https://github.com/composer/semver/issues",
@@ -401,7 +419,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Greg Anderson",
@@ -459,7 +479,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Greg Anderson",
@@ -508,7 +530,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Greg Anderson",
@@ -557,7 +581,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Greg Anderson",
@@ -609,7 +635,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Greg Anderson",
@@ -670,7 +698,9 @@
                 "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively.",
                 "totten/lurkerlite": "For monitoring filesystem changes in taskWatch"
             },
-            "bin": ["robo"],
+            "bin": [
+                "robo"
+            ],
             "type": "library",
             "autoload": {
                 "psr-4": {
@@ -678,7 +708,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Davert",
@@ -712,7 +744,9 @@
                 "symfony/console": "^2.8 || ^3 || ^4 || ^5 || ^6",
                 "symfony/filesystem": "^2.5 || ^3 || ^4 || ^5 || ^6"
             },
-            "bin": ["scripts/release"],
+            "bin": [
+                "scripts/release"
+            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -725,7 +759,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Alexander Menk",
@@ -782,7 +818,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Greg Anderson",
@@ -837,7 +875,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Greg Anderson",
@@ -887,7 +927,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["BSD-3-Clause"],
+            "license": [
+                "BSD-3-Clause"
+            ],
             "authors": [
                 {
                     "name": "Cameron Eagans",
@@ -956,7 +998,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Dragonfly Development Inc.",
@@ -981,7 +1025,12 @@
             ],
             "description": "Given a deep data structure, access data by dot notation.",
             "homepage": "https://github.com/dflydev/dflydev-dot-access-data",
-            "keywords": ["access", "data", "dot", "notation"],
+            "keywords": [
+                "access",
+                "data",
+                "dot",
+                "notation"
+            ],
             "support": {
                 "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues",
                 "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2"
@@ -1050,7 +1099,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Guilherme Blanco",
@@ -1075,7 +1126,11 @@
             ],
             "description": "Docblock Annotations Parser",
             "homepage": "https://www.doctrine-project.org/projects/annotations.html",
-            "keywords": ["annotations", "docblock", "parser"],
+            "keywords": [
+                "annotations",
+                "docblock",
+                "parser"
+            ],
             "support": {
                 "issues": "https://github.com/doctrine/annotations/issues",
                 "source": "https://github.com/doctrine/annotations/tree/1.14.3"
@@ -1118,7 +1173,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
             "homepage": "https://www.doctrine-project.org/",
             "support": {
@@ -1159,7 +1216,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Guilherme Blanco",
@@ -1176,7 +1235,13 @@
             ],
             "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
             "homepage": "https://www.doctrine-project.org/projects/lexer.html",
-            "keywords": ["annotations", "docblock", "lexer", "parser", "php"],
+            "keywords": [
+                "annotations",
+                "docblock",
+                "lexer",
+                "parser",
+                "php"
+            ],
             "support": {
                 "issues": "https://github.com/doctrine/lexer/issues",
                 "source": "https://github.com/doctrine/lexer/tree/2.1.0"
@@ -1226,7 +1291,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "anand.toshniwal93",
@@ -1295,7 +1362,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Wilfrid Roze (eme)",
@@ -1333,7 +1402,10 @@
             ],
             "description": "Provides a drop-down menu interface to the core Drupal Toolbar.",
             "homepage": "http://drupal.org/project/admin_toolbar",
-            "keywords": ["Drupal", "Toolbar"],
+            "keywords": [
+                "Drupal",
+                "Toolbar"
+            ],
             "support": {
                 "source": "https://git.drupalcode.org/project/admin_toolbar",
                 "issues": "https://www.drupal.org/project/issues/admin_toolbar"
@@ -1369,7 +1441,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0+"],
+            "license": [
+                "GPL-2.0+"
+            ],
             "authors": [
                 {
                     "name": "ANDiTKO",
@@ -1424,7 +1498,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "AdamPS",
@@ -1474,7 +1550,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Northern Commerce (formerly Digital Echidna)",
@@ -1534,7 +1612,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Dylan Donkersgoed",
@@ -1588,7 +1668,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Mike Keran",
@@ -1655,7 +1737,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "acbramley",
@@ -1717,7 +1801,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0+"],
+            "license": [
+                "GPL-2.0+"
+            ],
             "authors": [
                 {
                     "name": "jefuri",
@@ -1775,7 +1861,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Joshua Roberson",
@@ -1825,7 +1913,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Mark Carver (markcarver)",
@@ -1887,7 +1977,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "asgorobets",
@@ -1936,7 +2028,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Anybody",
@@ -2011,7 +2105,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0+"],
+            "license": [
+                "GPL-2.0+"
+            ],
             "authors": [
                 {
                     "name": "Christian Meilinger (meichr)",
@@ -2025,7 +2121,9 @@
             ],
             "description": "Provides integration of the CKEditor IndentBlock plugin with CKEditor.",
             "homepage": "https://www.drupal.org/project/ckeditor_indentblock",
-            "keywords": ["Drupal"],
+            "keywords": [
+                "Drupal"
+            ],
             "support": {
                 "source": "http://cgit.drupalcode.org/ckeditor_indentblock/",
                 "issues": "https://www.drupal.org/project/issues/ckeditor_indentblock"
@@ -2064,7 +2162,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0+"],
+            "license": [
+                "GPL-2.0+"
+            ],
             "authors": [
                 {
                     "name": "Tommy Lynge Jørgensen",
@@ -2118,7 +2218,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "eelkeblok",
@@ -2133,16 +2235,16 @@
         },
         {
             "name": "drupal/core",
-            "version": "10.1.6",
+            "version": "10.1.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drupal/core.git",
-                "reference": "33695caf467e3e1e8c75d42215df57bee31be9ec"
+                "reference": "54415049a721ede65318e3980b402af59bc35913"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drupal/core/zipball/33695caf467e3e1e8c75d42215df57bee31be9ec",
-                "reference": "33695caf467e3e1e8c75d42215df57bee31be9ec",
+                "url": "https://api.github.com/repos/drupal/core/zipball/54415049a721ede65318e3980b402af59bc35913",
+                "reference": "54415049a721ede65318e3980b402af59bc35913",
                 "shasum": ""
             },
             "require": {
@@ -2250,7 +2352,9 @@
                 }
             },
             "autoload": {
-                "files": ["includes/bootstrap.inc"],
+                "files": [
+                    "includes/bootstrap.inc"
+                ],
                 "psr-4": {
                     "Drupal\\Core\\": "lib/Drupal/Core",
                     "Drupal\\Component\\": "lib/Drupal/Component"
@@ -2280,25 +2384,27 @@
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "description": "Drupal is an open source content management platform powering millions of websites and applications.",
             "support": {
-                "source": "https://github.com/drupal/core/tree/10.1.6"
+                "source": "https://github.com/drupal/core/tree/10.1.7"
             },
-            "time": "2023-11-01T11:59:20+00:00"
+            "time": "2023-12-06T09:22:56+00:00"
         },
         {
             "name": "drupal/core-composer-scaffold",
-            "version": "10.1.6",
+            "version": "10.1.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drupal/core-composer-scaffold.git",
-                "reference": "1ccd7db5ff8a5425b5bbba9b9a05e366363c0a51"
+                "reference": "6a2d817ccb59fdb7e6b3720a1478b0d00b475445"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drupal/core-composer-scaffold/zipball/1ccd7db5ff8a5425b5bbba9b9a05e366363c0a51",
-                "reference": "1ccd7db5ff8a5425b5bbba9b9a05e366363c0a51",
+                "url": "https://api.github.com/repos/drupal/core-composer-scaffold/zipball/6a2d817ccb59fdb7e6b3720a1478b0d00b475445",
+                "reference": "6a2d817ccb59fdb7e6b3720a1478b0d00b475445",
                 "shasum": ""
             },
             "require": {
@@ -2324,27 +2430,31 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "description": "A flexible Composer project scaffold builder.",
             "homepage": "https://www.drupal.org/project/drupal",
-            "keywords": ["drupal"],
+            "keywords": [
+                "drupal"
+            ],
             "support": {
-                "source": "https://github.com/drupal/core-composer-scaffold/tree/10.1.6"
+                "source": "https://github.com/drupal/core-composer-scaffold/tree/10.1.7"
             },
-            "time": "2023-04-30T16:15:32+00:00"
+            "time": "2023-11-15T23:23:43+00:00"
         },
         {
             "name": "drupal/core-recommended",
-            "version": "10.1.6",
+            "version": "10.1.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drupal/core-recommended.git",
-                "reference": "13f5968854fe8bc02e659d8a4facc04a1a576ce5"
+                "reference": "e4726a4a0173a4b9acdac8cab5d4009d6085fd2e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drupal/core-recommended/zipball/13f5968854fe8bc02e659d8a4facc04a1a576ce5",
-                "reference": "13f5968854fe8bc02e659d8a4facc04a1a576ce5",
+                "url": "https://api.github.com/repos/drupal/core-recommended/zipball/e4726a4a0173a4b9acdac8cab5d4009d6085fd2e",
+                "reference": "e4726a4a0173a4b9acdac8cab5d4009d6085fd2e",
                 "shasum": ""
             },
             "require": {
@@ -2353,7 +2463,7 @@
                 "doctrine/annotations": "~1.14.3",
                 "doctrine/deprecations": "~v1.1.1",
                 "doctrine/lexer": "~2.1.0",
-                "drupal/core": "10.1.6",
+                "drupal/core": "10.1.7",
                 "egulias/email-validator": "~4.0.1",
                 "guzzlehttp/guzzle": "~7.7.0",
                 "guzzlehttp/psr7": "~2.5.0",
@@ -2405,12 +2515,14 @@
             },
             "type": "metapackage",
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "description": "Core and its dependencies with known-compatible minor versions. Require this project INSTEAD OF drupal/core.",
             "support": {
-                "source": "https://github.com/drupal/core-recommended/tree/10.1.6"
+                "source": "https://github.com/drupal/core-recommended/tree/10.1.7"
             },
-            "time": "2023-11-01T11:59:20+00:00"
+            "time": "2023-12-06T09:22:56+00:00"
         },
         {
             "name": "drupal/crop",
@@ -2441,7 +2553,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Drupal Media Team",
@@ -2499,7 +2613,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Kris Vanderwater (EclipseGc)",
@@ -2587,7 +2703,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "bkosborne",
@@ -2633,7 +2751,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "DuaelFr",
@@ -2678,7 +2798,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "cs_shadow",
@@ -2749,7 +2871,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0+"],
+            "license": [
+                "GPL-2.0+"
+            ],
             "authors": [
                 {
                     "name": "Janez Urevc",
@@ -2819,7 +2943,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Berdir",
@@ -2899,7 +3025,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "colan",
@@ -2966,7 +3094,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "cs_shadow",
@@ -3044,7 +3174,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Berdir",
@@ -3098,7 +3230,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "heddn",
@@ -3148,7 +3282,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Sven Decabooter",
@@ -3200,7 +3336,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Anybody",
@@ -3266,7 +3404,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "japerry",
@@ -3331,7 +3471,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Alexander Ross (bleen)",
@@ -3386,7 +3528,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "See contributors",
@@ -3449,7 +3593,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "acquia",
@@ -3510,7 +3656,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Jeff Geerling",
@@ -3578,7 +3726,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "bojanz",
@@ -3664,7 +3814,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "bnjmnm",
@@ -3760,7 +3912,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "bnjmnm",
@@ -3823,7 +3977,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "bnjmnm",
@@ -3886,7 +4042,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "bnjmnm",
@@ -3937,7 +4095,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "bnjmnm",
@@ -4000,7 +4160,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "bnjmnm",
@@ -4052,7 +4214,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Naveen Valecha",
@@ -4066,7 +4230,10 @@
             ],
             "description": "Provides jQuery UI Touch Punch library.",
             "homepage": "https://www.drupal.org/project/jquery_ui_touch_punch",
-            "keywords": ["Drupal", "jquery_ui_touch_punch"],
+            "keywords": [
+                "Drupal",
+                "jquery_ui_touch_punch"
+            ],
             "support": {
                 "source": "https://www.drupal.org/project/jquery_ui_touch_punch",
                 "issues": "https://www.drupal.org/project/issues/jquery_ui_touch_punch"
@@ -4101,7 +4268,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "joseph.olstad",
@@ -4169,7 +4338,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "larowlan",
@@ -4178,7 +4349,9 @@
             ],
             "description": "Provides a widget to allow settings of link attributes for menu links.",
             "homepage": "https://www.drupal.org/project/link_attributes",
-            "keywords": ["Drupal"],
+            "keywords": [
+                "Drupal"
+            ],
             "support": {
                 "source": "https://git.drupalcode.org/project/link_attributes",
                 "issues": "https://www.drupal.org/project/issues/link_attributes"
@@ -4217,7 +4390,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Emil Stjerneman",
@@ -4270,7 +4445,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "cilefen",
@@ -4330,7 +4507,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "acbramley",
@@ -4396,7 +4575,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "bkosborne",
@@ -4442,7 +4623,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0+"],
+            "license": [
+                "GPL-2.0+"
+            ],
             "authors": [
                 {
                     "name": "ahebrank",
@@ -4451,7 +4634,9 @@
             ],
             "description": "Add an edit button to the Media Library widget when an item is selected.",
             "homepage": "https://www.drupal.org/project/media_library_edit",
-            "keywords": ["Drupal"],
+            "keywords": [
+                "Drupal"
+            ],
             "support": {
                 "source": "http://cgit.drupalcode.org/media_library_edit",
                 "issues": "https://www.drupal.org/project/issues/media_library_edit"
@@ -4486,7 +4671,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Dave Reid",
@@ -4548,7 +4735,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "aaron",
@@ -4622,7 +4811,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "See contributors",
@@ -4636,7 +4827,10 @@
             ],
             "description": "Manage meta tags for all entities.",
             "homepage": "https://www.drupal.org/project/metatag",
-            "keywords": ["Drupal", "seo"],
+            "keywords": [
+                "Drupal",
+                "seo"
+            ],
             "support": {
                 "source": "https://git.drupalcode.org/project/metatag",
                 "issues": "https://www.drupal.org/project/issues/metatag",
@@ -4673,7 +4867,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0+"],
+            "license": [
+                "GPL-2.0+"
+            ],
             "authors": [
                 {
                     "name": "Matthew Donadio (mpdonadio)",
@@ -4729,7 +4925,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "andrey.troeglazov",
@@ -4782,7 +4980,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "RandalV",
@@ -4824,7 +5024,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "asghar",
@@ -4891,9 +5093,13 @@
                     "phpcbf --report=full --extensions=php,module,inc,theme,info,install --standard=vendor/drupal/coder/coder_sniffer/Drupal tests/modules",
                     "phpcbf  tests/behat  --standard=PSR2"
                 ],
-                "phpunit": ["phpunit tests --colors=always"]
+                "phpunit": [
+                    "phpunit tests --colors=always"
+                ]
             },
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "David Strauss",
@@ -4971,7 +5177,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Berdir",
@@ -5043,7 +5251,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Berdir",
@@ -5099,7 +5309,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Evgenii Nikitin (sinn)",
@@ -5157,7 +5369,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0+"],
+            "license": [
+                "GPL-2.0+"
+            ],
             "authors": [
                 {
                     "name": "hass",
@@ -5236,7 +5450,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "leymannx",
@@ -5280,7 +5496,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0+"],
+            "license": [
+                "GPL-2.0+"
+            ],
             "authors": [
                 {
                     "name": "hass",
@@ -5361,7 +5579,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "B-Prod",
@@ -5411,7 +5631,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Berdir",
@@ -5465,7 +5687,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "joseph.olstad",
@@ -5530,7 +5754,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Eric Schaefer (Eric Schaefer)",
@@ -5589,7 +5815,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "bnjmnm",
@@ -5650,7 +5878,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "martin107",
@@ -5698,7 +5928,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Pawel Ginalski (gbyte)",
@@ -5749,7 +5981,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0+"],
+            "license": [
+                "GPL-2.0+"
+            ],
             "authors": [
                 {
                     "name": "Berdir",
@@ -5822,7 +6056,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "japerry",
@@ -5894,7 +6130,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0+"],
+            "license": [
+                "GPL-2.0+"
+            ],
             "authors": [
                 {
                     "name": "Takim Islam",
@@ -5947,7 +6185,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Neslee Canil Pinto",
@@ -5997,7 +6237,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0+"],
+            "license": [
+                "GPL-2.0+"
+            ],
             "authors": [
                 {
                     "name": "Yaroslav Lushnikov",
@@ -6050,7 +6292,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Berdir",
@@ -6112,7 +6356,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "bizar1984",
@@ -6174,7 +6420,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Chi",
@@ -6183,7 +6431,10 @@
             ],
             "description": "A Twig extension with some useful functions and filters for Drupal development.",
             "homepage": "https://www.drupal.org/project/twig_tweak",
-            "keywords": ["Drupal", "Twig"],
+            "keywords": [
+                "Drupal",
+                "Twig"
+            ],
             "support": {
                 "source": "https://git.drupalcode.org/project/twig_tweak",
                 "issues": "https://www.drupal.org/project/issues/twig_tweak"
@@ -6223,7 +6474,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0+"],
+            "license": [
+                "GPL-2.0+"
+            ],
             "authors": [
                 {
                     "name": "arnested",
@@ -6288,7 +6541,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0+"],
+            "license": [
+                "GPL-2.0+"
+            ],
             "authors": [
                 {
                     "name": "karschsp",
@@ -6301,7 +6556,10 @@
             ],
             "description": "Allows admins to protect users from being edited or cancelled, on a per-user basis.",
             "homepage": "https://www.drupal.org/project/userprotect",
-            "keywords": ["Drupal", "User Management"],
+            "keywords": [
+                "Drupal",
+                "User Management"
+            ],
             "support": {
                 "source": "http://cgit.drupalcode.org/userprotect",
                 "issues": "https://www.drupal.org/project/issues/userprotect"
@@ -6341,7 +6599,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "abhinesh",
@@ -6395,7 +6655,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Agnes Chisholm",
@@ -6458,7 +6720,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "amateescu",
@@ -6516,7 +6780,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "colan",
@@ -6537,7 +6803,10 @@
             ],
             "description": "Add autocomplete functionality to the views filter text fields.",
             "homepage": "https://www.drupal.org/project/views_autocomplete_filters",
-            "keywords": ["Drupal", "views_autocomplete_filters"],
+            "keywords": [
+                "Drupal",
+                "views_autocomplete_filters"
+            ],
             "support": {
                 "source": "https://git.drupalcode.org/project/views_autocomplete_filters",
                 "issues": "https://www.drupal.org/project/issues/views_autocomplete_filters"
@@ -6572,7 +6841,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Dmitry Demenchuk",
@@ -6648,7 +6919,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Marcin Grabias",
@@ -6700,7 +6973,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "pifagor",
@@ -6755,7 +7030,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Anybody",
@@ -6867,7 +7144,9 @@
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Jacob Rockowitz (jrockowitz)",
@@ -6921,10 +7200,16 @@
             },
             "type": "drupal-drush",
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "description": "Drush commandfile for use with drupal/drupal-driver.",
             "homepage": "https://github.com/drush-ops/behat-drush-endpoint",
-            "keywords": ["Behat", "Drush", "testing"],
+            "keywords": [
+                "Behat",
+                "Drush",
+                "testing"
+            ],
             "support": {
                 "issues": "https://github.com/drush-ops/behat-drush-endpoint/issues",
                 "source": "https://github.com/drush-ops/behat-drush-endpoint/tree/no-phpunit"
@@ -6983,18 +7268,36 @@
                 "rector/rector": "^0.12",
                 "squizlabs/php_codesniffer": "^3.7"
             },
-            "bin": ["drush"],
+            "bin": [
+                "drush"
+            ],
             "type": "library",
             "extra": {
                 "installer-paths": {
-                    "sut/core": ["type:drupal-core"],
-                    "sut/libraries/{$name}": ["type:drupal-library"],
-                    "sut/modules/unish/{$name}": ["drupal/devel"],
-                    "sut/themes/unish/{$name}": ["drupal/empty_theme"],
-                    "sut/modules/contrib/{$name}": ["type:drupal-module"],
-                    "sut/profiles/contrib/{$name}": ["type:drupal-profile"],
-                    "sut/themes/contrib/{$name}": ["type:drupal-theme"],
-                    "sut/drush/contrib/{$name}": ["type:drupal-drush"]
+                    "sut/core": [
+                        "type:drupal-core"
+                    ],
+                    "sut/libraries/{$name}": [
+                        "type:drupal-library"
+                    ],
+                    "sut/modules/unish/{$name}": [
+                        "drupal/devel"
+                    ],
+                    "sut/themes/unish/{$name}": [
+                        "drupal/empty_theme"
+                    ],
+                    "sut/modules/contrib/{$name}": [
+                        "type:drupal-module"
+                    ],
+                    "sut/profiles/contrib/{$name}": [
+                        "type:drupal-profile"
+                    ],
+                    "sut/themes/contrib/{$name}": [
+                        "type:drupal-theme"
+                    ],
+                    "sut/drush/contrib/{$name}": [
+                        "type:drupal-drush"
+                    ]
                 }
             },
             "autoload": {
@@ -7003,7 +7306,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Moshe Weitzman",
@@ -7093,7 +7398,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Eduardo Gulias Davis"
@@ -7150,7 +7457,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Daryll Doyle",
@@ -7180,7 +7489,9 @@
             },
             "type": "library",
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Matias Meno",
@@ -7190,7 +7501,12 @@
             ],
             "description": "Handles drag and drop of files for you.",
             "homepage": "http://www.dropzonejs.com",
-            "keywords": ["drag and drop", "dragndrop", "file upload", "upload"],
+            "keywords": [
+                "drag and drop",
+                "dragndrop",
+                "file upload",
+                "upload"
+            ],
             "support": {
                 "issues": "https://github.com/dropzone/dropzone-packagist/issues",
                 "source": "https://github.com/dropzone/dropzone-packagist/tree/v5.9.3"
@@ -7226,14 +7542,20 @@
             },
             "type": "library",
             "autoload": {
-                "files": ["library/HTMLPurifier.composer.php"],
+                "files": [
+                    "library/HTMLPurifier.composer.php"
+                ],
                 "psr-0": {
                     "HTMLPurifier": "library/"
                 },
-                "exclude-from-classmap": ["/library/HTMLPurifier/Language/"]
+                "exclude-from-classmap": [
+                    "/library/HTMLPurifier/Language/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["LGPL-2.1-or-later"],
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
             "authors": [
                 {
                     "name": "Edward Z. Yang",
@@ -7243,7 +7565,9 @@
             ],
             "description": "Standards compliant HTML filter written in PHP",
             "homepage": "http://htmlpurifier.org/",
-            "keywords": ["html"],
+            "keywords": [
+                "html"
+            ],
             "support": {
                 "issues": "https://github.com/ezyang/htmlpurifier/issues",
                 "source": "https://github.com/ezyang/htmlpurifier/tree/v4.16.0"
@@ -7292,7 +7616,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Oscar Otero",
@@ -7303,7 +7629,14 @@
             ],
             "description": "PHP gettext manager",
             "homepage": "https://github.com/php-gettext/Gettext",
-            "keywords": ["JS", "gettext", "i18n", "mo", "po", "translation"],
+            "keywords": [
+                "JS",
+                "gettext",
+                "i18n",
+                "mo",
+                "po",
+                "translation"
+            ],
             "support": {
                 "email": "oom@oscarotero.com",
                 "issues": "https://github.com/php-gettext/Gettext/issues",
@@ -7345,7 +7678,9 @@
             "require-dev": {
                 "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5 || ^8.4"
             },
-            "bin": ["bin/export-plural-rules"],
+            "bin": [
+                "bin/export-plural-rules"
+            ],
             "type": "library",
             "autoload": {
                 "psr-4": {
@@ -7353,7 +7688,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Michele Locati",
@@ -7429,7 +7766,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Oscar Otero",
@@ -7440,7 +7779,12 @@
             ],
             "description": "Gettext translator functions",
             "homepage": "https://github.com/php-gettext/Translator",
-            "keywords": ["gettext", "i18n", "php", "translator"],
+            "keywords": [
+                "gettext",
+                "i18n",
+                "php",
+                "translator"
+            ],
             "support": {
                 "email": "oom@oscarotero.com",
                 "issues": "https://github.com/php-gettext/Translator/issues",
@@ -7496,10 +7840,17 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["BSD-3-Clause"],
+            "license": [
+                "BSD-3-Clause"
+            ],
             "description": "Client library for reCAPTCHA, a free service that protects websites from spam and abuse.",
             "homepage": "https://www.google.com/recaptcha/",
-            "keywords": ["Abuse", "captcha", "recaptcha", "spam"],
+            "keywords": [
+                "Abuse",
+                "captcha",
+                "recaptcha",
+                "spam"
+            ],
             "support": {
                 "forum": "https://groups.google.com/forum/#!forum/recaptcha",
                 "issues": "https://github.com/google/recaptcha/issues",
@@ -7544,7 +7895,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Matthew Grasmick"
@@ -7583,7 +7936,9 @@
                 "phpunit/phpunit": "^9",
                 "squizlabs/php_codesniffer": "^3.0"
             },
-            "bin": ["bin/yaml-cli"],
+            "bin": [
+                "bin/yaml-cli"
+            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -7596,7 +7951,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Matthew Grasmick"
@@ -7655,13 +8012,17 @@
                 }
             },
             "autoload": {
-                "files": ["src/functions_include.php"],
+                "files": [
+                    "src/functions_include.php"
+                ],
                 "psr-4": {
                     "GuzzleHttp\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Graham Campbell",
@@ -7765,7 +8126,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Graham Campbell",
@@ -7789,7 +8152,9 @@
                 }
             ],
             "description": "Guzzle promises library",
-            "keywords": ["promise"],
+            "keywords": [
+                "promise"
+            ],
             "support": {
                 "issues": "https://github.com/guzzle/promises/issues",
                 "source": "https://github.com/guzzle/promises/tree/2.0.2"
@@ -7855,7 +8220,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Graham Campbell",
@@ -7973,7 +8340,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Phil Bennett",
@@ -8037,7 +8406,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Matt Butcher",
@@ -8102,7 +8473,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["BSD-3-Clause"],
+            "license": [
+                "BSD-3-Clause"
+            ],
             "authors": [
                 {
                     "name": "Marco Marchiò",
@@ -8141,10 +8514,14 @@
                 "psr-0": {
                     "Detection": "namespaced/"
                 },
-                "classmap": ["Mobile_Detect.php"]
+                "classmap": [
+                    "Mobile_Detect.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Serban Ghita",
@@ -8196,7 +8573,9 @@
                 "ircmaxell/php-yacc": "^0.0.7",
                 "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
             },
-            "bin": ["bin/php-parse"],
+            "bin": [
+                "bin/php-parse"
+            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -8209,14 +8588,19 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["BSD-3-Clause"],
+            "license": [
+                "BSD-3-Clause"
+            ],
             "authors": [
                 {
                     "name": "Nikita Popov"
                 }
             ],
             "description": "A PHP parser written in PHP",
-            "keywords": ["parser", "php"],
+            "keywords": [
+                "parser",
+                "php"
+            ],
             "support": {
                 "issues": "https://github.com/nikic/PHP-Parser/issues",
                 "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1"
@@ -8257,7 +8641,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Stephen Beemsterboer",
@@ -8297,7 +8683,9 @@
             },
             "type": "quicksilver-script",
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "description": "Push commits made via the Pantheon dashboard back to original GitHub repository.",
             "support": {
                 "issues": "https://github.com/pantheon-systems/quicksilver-pushback/issues",
@@ -8343,8 +8731,12 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "include-path": ["./"],
-            "license": ["BSD-3-Clause"],
+            "include-path": [
+                "./"
+            ],
+            "license": [
+                "BSD-3-Clause"
+            ],
             "authors": [
                 {
                     "name": "Vincent Blavet",
@@ -8361,7 +8753,10 @@
             ],
             "description": "Tar file management class with compression support (gzip, bzip2, lzma2)",
             "homepage": "https://github.com/pear/Archive_Tar",
-            "keywords": ["archive", "tar"],
+            "keywords": [
+                "archive",
+                "tar"
+            ],
             "support": {
                 "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Archive_Tar",
                 "source": "https://github.com/pear/Archive_Tar"
@@ -8399,8 +8794,12 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "include-path": ["./"],
-            "license": ["BSD-2-Clause"],
+            "include-path": [
+                "./"
+            ],
+            "license": [
+                "BSD-2-Clause"
+            ],
             "authors": [
                 {
                     "name": "Andrei Zmievski",
@@ -8454,8 +8853,12 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "include-path": ["src/"],
-            "license": ["BSD-3-Clause"],
+            "include-path": [
+                "src/"
+            ],
+            "license": [
+                "BSD-3-Clause"
+            ],
             "authors": [
                 {
                     "name": "Christian Weiske",
@@ -8497,11 +8900,17 @@
                 }
             },
             "autoload": {
-                "classmap": ["PEAR/"]
+                "classmap": [
+                    "PEAR/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "include-path": ["."],
-            "license": ["BSD-2-Clause"],
+            "include-path": [
+                "."
+            ],
+            "license": [
+                "BSD-2-Clause"
+            ],
             "authors": [
                 {
                     "name": "Helgi Thormar",
@@ -8514,7 +8923,9 @@
             ],
             "description": "The PEAR Exception base class.",
             "homepage": "https://github.com/pear/PEAR_Exception",
-            "keywords": ["exception"],
+            "keywords": [
+                "exception"
+            ],
             "support": {
                 "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=PEAR_Exception",
                 "source": "https://github.com/pear/PEAR_Exception"
@@ -8546,7 +8957,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Thomas Gossmann",
@@ -8600,7 +9013,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Thomas Gossmann",
@@ -8609,7 +9024,12 @@
             ],
             "description": "Missing PHP language constructs",
             "homepage": "https://phootwork.github.io/lang/",
-            "keywords": ["array", "comparator", "comparison", "string"],
+            "keywords": [
+                "array",
+                "comparator",
+                "comparison",
+                "string"
+            ],
             "support": {
                 "issues": "https://github.com/phootwork/phootwork/issues",
                 "source": "https://github.com/phootwork/lang/tree/v3.2.2"
@@ -8664,7 +9084,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["LGPL-2.1-only"],
+            "license": [
+                "LGPL-2.1-only"
+            ],
             "authors": [
                 {
                     "name": "Marcus Bointon",
@@ -8726,7 +9148,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Thomas Gossmann",
@@ -8734,7 +9158,11 @@
                 }
             ],
             "description": "PHP Docblock parser and generator. An API to read and write Docblocks.",
-            "keywords": ["docblock", "generator", "parser"],
+            "keywords": [
+                "docblock",
+                "generator",
+                "parser"
+            ],
             "support": {
                 "issues": "https://github.com/phpowermove/docblock/issues",
                 "source": "https://github.com/phpowermove/docblock/tree/v4.0"
@@ -8757,7 +9185,9 @@
             },
             "type": "drupal-library",
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Dave Furfero",
@@ -8766,7 +9196,11 @@
             ],
             "description": "Extension to jQuery UI for mobile touch event support.",
             "homepage": "http://touchpunch.furf.com/",
-            "keywords": ["gestures", "mobile", "touch"],
+            "keywords": [
+                "gestures",
+                "mobile",
+                "touch"
+            ],
             "support": {
                 "issues": "https://github.com/politsin/jquery-ui-touch-punch/issues",
                 "source": "https://github.com/politsin/jquery-ui-touch-punch/tree/1.0"
@@ -8802,7 +9236,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "PHP-FIG",
@@ -8810,7 +9246,11 @@
                 }
             ],
             "description": "Common interface for caching libraries",
-            "keywords": ["cache", "psr", "psr-6"],
+            "keywords": [
+                "cache",
+                "psr",
+                "psr-6"
+            ],
             "support": {
                 "source": "https://github.com/php-fig/cache/tree/3.0.0"
             },
@@ -8845,7 +9285,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "PHP-FIG",
@@ -8896,7 +9338,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "PHP-FIG",
@@ -8904,7 +9348,11 @@
                 }
             ],
             "description": "Standard interfaces for event handling.",
-            "keywords": ["events", "psr", "psr-14"],
+            "keywords": [
+                "events",
+                "psr",
+                "psr-14"
+            ],
             "support": {
                 "issues": "https://github.com/php-fig/event-dispatcher/issues",
                 "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
@@ -8941,7 +9389,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "PHP-FIG",
@@ -8950,7 +9400,12 @@
             ],
             "description": "Common interface for HTTP clients",
             "homepage": "https://github.com/php-fig/http-client",
-            "keywords": ["http", "http-client", "psr", "psr-18"],
+            "keywords": [
+                "http",
+                "http-client",
+                "psr",
+                "psr-18"
+            ],
             "support": {
                 "source": "https://github.com/php-fig/http-client"
             },
@@ -8986,7 +9441,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "PHP-FIG",
@@ -9038,7 +9495,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "PHP-FIG",
@@ -9089,7 +9548,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "PHP-FIG",
@@ -9098,7 +9559,11 @@
             ],
             "description": "Common interface for logging libraries",
             "homepage": "https://github.com/php-fig/log",
-            "keywords": ["log", "psr", "psr-3"],
+            "keywords": [
+                "log",
+                "psr",
+                "psr-3"
+            ],
             "support": {
                 "source": "https://github.com/php-fig/log/tree/3.0.0"
             },
@@ -9138,7 +9603,9 @@
                 "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.",
                 "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history."
             },
-            "bin": ["bin/psysh"],
+            "bin": [
+                "bin/psysh"
+            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -9150,13 +9617,17 @@
                 }
             },
             "autoload": {
-                "files": ["src/functions.php"],
+                "files": [
+                    "src/functions.php"
+                ],
                 "psr-4": {
                     "Psy\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Justin Hileman",
@@ -9166,7 +9637,12 @@
             ],
             "description": "An interactive shell for modern PHP.",
             "homepage": "http://psysh.org",
-            "keywords": ["REPL", "console", "interactive", "shell"],
+            "keywords": [
+                "REPL",
+                "console",
+                "interactive",
+                "shell"
+            ],
             "support": {
                 "issues": "https://github.com/bobthecow/psysh/issues",
                 "source": "https://github.com/bobthecow/psysh/tree/v0.11.22"
@@ -9196,10 +9672,14 @@
             },
             "type": "library",
             "autoload": {
-                "files": ["src/getallheaders.php"]
+                "files": [
+                    "src/getallheaders.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Ralph Khattar",
@@ -9238,10 +9718,17 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["BSD-3-Clause"],
+            "license": [
+                "BSD-3-Clause"
+            ],
             "description": "A PHP library for XML Security",
             "homepage": "https://github.com/robrichards/xmlseclibs",
-            "keywords": ["security", "signature", "xml", "xmldsig"],
+            "keywords": [
+                "security",
+                "signature",
+                "xml",
+                "xmldsig"
+            ],
             "support": {
                 "issues": "https://github.com/robrichards/xmlseclibs/issues",
                 "source": "https://github.com/robrichards/xmlseclibs/tree/3.1.1"
@@ -9276,10 +9763,14 @@
                 }
             },
             "autoload": {
-                "classmap": ["src/"]
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["BSD-3-Clause"],
+            "license": [
+                "BSD-3-Clause"
+            ],
             "authors": [
                 {
                     "name": "Sebastian Bergmann",
@@ -9292,7 +9783,12 @@
             ],
             "description": "Diff implementation",
             "homepage": "https://github.com/sebastianbergmann/diff",
-            "keywords": ["diff", "udiff", "unidiff", "unified diff"],
+            "keywords": [
+                "diff",
+                "udiff",
+                "unidiff",
+                "unified diff"
+            ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/diff/issues",
                 "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5"
@@ -9342,7 +9838,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["LGPL-2.1-or-later"],
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
             "authors": [
                 {
                     "name": "Tim van Dijen",
@@ -9393,7 +9891,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["LGPL-2.1-only"],
+            "license": [
+                "LGPL-2.1-only"
+            ],
             "description": "A Composer plugin that allows installing SimpleSAMLphp modules through Composer.",
             "support": {
                 "issues": "https://github.com/simplesamlphp/composer-module-installer/issues",
@@ -9443,7 +9943,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["LGPL-2.1-or-later"],
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
             "authors": [
                 {
                     "name": "Andreas Åkre Solberg",
@@ -9537,7 +10039,9 @@
                 }
             },
             "autoload": {
-                "files": ["src/_autoload_modules.php"],
+                "files": [
+                    "src/_autoload_modules.php"
+                ],
                 "psr-4": {
                     "SimpleSAML\\": "src/SimpleSAML",
                     "SimpleSAML\\Module\\core\\": "modules/core/src",
@@ -9549,7 +10053,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["LGPL-2.1-or-later"],
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
             "authors": [
                 {
                     "name": "Andreas Åkre Solberg",
@@ -9600,7 +10106,9 @@
             },
             "type": "simplesamlphp-module",
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["LGPL-2.1-or-later"],
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
             "authors": [
                 {
                     "name": "Tim van Dijen",
@@ -9644,7 +10152,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["LGPL-3.0-or-later"],
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Olav Morken",
@@ -9652,7 +10162,10 @@
                 }
             ],
             "description": "This module provides authentication against password hashes or .htpasswd files",
-            "keywords": ["authcrypt", "simplesamlphp"],
+            "keywords": [
+                "authcrypt",
+                "simplesamlphp"
+            ],
             "support": {
                 "issues": "https://github.com/tvdijen/simplesamlphp-module-authcrypt/issues",
                 "source": "https://github.com/tvdijen/simplesamlphp-module-authcrypt"
@@ -9691,7 +10204,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["LGPL-2.1-or-later"],
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
             "authors": [
                 {
                     "name": "Andreas Åkre Solberg",
@@ -9699,7 +10214,10 @@
                 }
             ],
             "description": "The metarefresh module will download and parse metadata documents and store them locally",
-            "keywords": ["metarefresh", "simplesamlphp"],
+            "keywords": [
+                "metarefresh",
+                "simplesamlphp"
+            ],
             "support": {
                 "issues": "https://github.com/simplesamlphp/simplesamlphp-module-metarefresh/issues",
                 "source": "https://github.com/simplesamlphp/simplesamlphp-module-metarefresh"
@@ -9740,7 +10258,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["LGPL-2.1-or-later"],
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
             "authors": [
                 {
                     "name": "Jaime Perez",
@@ -9753,7 +10273,10 @@
             ],
             "description": "A library with classes and utilities for handling XML structures.",
             "homepage": "http://simplesamlphp.org",
-            "keywords": ["saml", "xml"],
+            "keywords": [
+                "saml",
+                "xml"
+            ],
             "support": {
                 "issues": "https://github.com/simplesamlphp/xml-common/issues",
                 "source": "https://github.com/simplesamlphp/xml-common"
@@ -9810,11 +10333,17 @@
                 "psr-4": {
                     "Symfony\\Component\\Cache\\": ""
                 },
-                "classmap": ["Traits/ValueWrapper.php"],
-                "exclude-from-classmap": ["/Tests/"]
+                "classmap": [
+                    "Traits/ValueWrapper.php"
+                ],
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Nicolas Grekas",
@@ -9827,7 +10356,10 @@
             ],
             "description": "Provides extended PSR-6, PSR-16 (and tags) implementations",
             "homepage": "https://symfony.com",
-            "keywords": ["caching", "psr6"],
+            "keywords": [
+                "caching",
+                "psr6"
+            ],
             "support": {
                 "source": "https://github.com/symfony/cache/tree/v6.3.8"
             },
@@ -9881,7 +10413,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Nicolas Grekas",
@@ -9957,10 +10491,14 @@
                 "psr-4": {
                     "Symfony\\Component\\Config\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Fabien Potencier",
@@ -10037,10 +10575,14 @@
                 "psr-4": {
                     "Symfony\\Component\\Console\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Fabien Potencier",
@@ -10053,7 +10595,12 @@
             ],
             "description": "Eases the creation of beautiful and testable command line interfaces",
             "homepage": "https://symfony.com",
-            "keywords": ["cli", "command-line", "console", "terminal"],
+            "keywords": [
+                "cli",
+                "command-line",
+                "console",
+                "terminal"
+            ],
             "support": {
                 "source": "https://github.com/symfony/console/tree/v6.3.9"
             },
@@ -10115,10 +10662,14 @@
                 "psr-4": {
                     "Symfony\\Component\\DependencyInjection\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Fabien Potencier",
@@ -10178,10 +10729,14 @@
                 }
             },
             "autoload": {
-                "files": ["function.php"]
+                "files": [
+                    "function.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Nicolas Grekas",
@@ -10240,16 +10795,22 @@
                 "symfony/http-kernel": "^5.4|^6.0",
                 "symfony/serializer": "^5.4|^6.0"
             },
-            "bin": ["Resources/bin/patch-type-declarations"],
+            "bin": [
+                "Resources/bin/patch-type-declarations"
+            ],
             "type": "library",
             "autoload": {
                 "psr-4": {
                     "Symfony\\Component\\ErrorHandler\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Fabien Potencier",
@@ -10322,10 +10883,14 @@
                 "psr-4": {
                     "Symfony\\Component\\EventDispatcher\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Fabien Potencier",
@@ -10391,7 +10956,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Nicolas Grekas",
@@ -10455,10 +11022,14 @@
                 "psr-4": {
                     "Symfony\\Component\\Filesystem\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Fabien Potencier",
@@ -10515,10 +11086,14 @@
                 "psr-4": {
                     "Symfony\\Component\\Finder\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Fabien Potencier",
@@ -10655,10 +11230,14 @@
                 "psr-4": {
                     "Symfony\\Bundle\\FrameworkBundle\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Fabien Potencier",
@@ -10728,10 +11307,14 @@
                 "psr-4": {
                     "Symfony\\Component\\HttpFoundation\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Fabien Potencier",
@@ -10837,10 +11420,14 @@
                 "psr-4": {
                     "Symfony\\Component\\HttpKernel\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Fabien Potencier",
@@ -10899,10 +11486,14 @@
                 "psr-4": {
                     "Symfony\\Component\\Intl\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Bernhard Schussek",
@@ -10991,10 +11582,14 @@
                 "psr-4": {
                     "Symfony\\Component\\Mime\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Fabien Potencier",
@@ -11007,7 +11602,10 @@
             ],
             "description": "Allows manipulating MIME messages",
             "homepage": "https://symfony.com",
-            "keywords": ["mime", "mime-type"],
+            "keywords": [
+                "mime",
+                "mime-type"
+            ],
             "support": {
                 "source": "https://github.com/symfony/mime/tree/v6.3.5"
             },
@@ -11061,13 +11659,17 @@
                 }
             },
             "autoload": {
-                "files": ["bootstrap.php"],
+                "files": [
+                    "bootstrap.php"
+                ],
                 "psr-4": {
                     "Symfony\\Polyfill\\Ctype\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Gert de Pagter",
@@ -11080,7 +11682,12 @@
             ],
             "description": "Symfony polyfill for ctype functions",
             "homepage": "https://symfony.com",
-            "keywords": ["compatibility", "ctype", "polyfill", "portable"],
+            "keywords": [
+                "compatibility",
+                "ctype",
+                "polyfill",
+                "portable"
+            ],
             "support": {
                 "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0"
             },
@@ -11134,13 +11741,17 @@
                 }
             },
             "autoload": {
-                "files": ["bootstrap.php"],
+                "files": [
+                    "bootstrap.php"
+                ],
                 "psr-4": {
                     "Symfony\\Polyfill\\Iconv\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Nicolas Grekas",
@@ -11210,13 +11821,17 @@
                 }
             },
             "autoload": {
-                "files": ["bootstrap.php"],
+                "files": [
+                    "bootstrap.php"
+                ],
                 "psr-4": {
                     "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Nicolas Grekas",
@@ -11289,13 +11904,17 @@
                 }
             },
             "autoload": {
-                "files": ["bootstrap.php"],
+                "files": [
+                    "bootstrap.php"
+                ],
                 "psr-4": {
                     "Symfony\\Polyfill\\Intl\\Idn\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Laurent Bassin",
@@ -11370,14 +11989,20 @@
                 }
             },
             "autoload": {
-                "files": ["bootstrap.php"],
+                "files": [
+                    "bootstrap.php"
+                ],
                 "psr-4": {
                     "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
                 },
-                "classmap": ["Resources/stubs"]
+                "classmap": [
+                    "Resources/stubs"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Nicolas Grekas",
@@ -11451,13 +12076,17 @@
                 }
             },
             "autoload": {
-                "files": ["bootstrap.php"],
+                "files": [
+                    "bootstrap.php"
+                ],
                 "psr-4": {
                     "Symfony\\Polyfill\\Mbstring\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Nicolas Grekas",
@@ -11524,13 +12153,17 @@
                 }
             },
             "autoload": {
-                "files": ["bootstrap.php"],
+                "files": [
+                    "bootstrap.php"
+                ],
                 "psr-4": {
                     "Symfony\\Polyfill\\Php72\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Nicolas Grekas",
@@ -11543,7 +12176,12 @@
             ],
             "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
             "homepage": "https://symfony.com",
-            "keywords": ["compatibility", "polyfill", "portable", "shim"],
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
             "support": {
                 "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0"
             },
@@ -11591,14 +12229,20 @@
                 }
             },
             "autoload": {
-                "files": ["bootstrap.php"],
+                "files": [
+                    "bootstrap.php"
+                ],
                 "psr-4": {
                     "Symfony\\Polyfill\\Php80\\": ""
                 },
-                "classmap": ["Resources/stubs"]
+                "classmap": [
+                    "Resources/stubs"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Ion Bazan",
@@ -11615,7 +12259,12 @@
             ],
             "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
             "homepage": "https://symfony.com",
-            "keywords": ["compatibility", "polyfill", "portable", "shim"],
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
             "support": {
                 "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0"
             },
@@ -11663,14 +12312,20 @@
                 }
             },
             "autoload": {
-                "files": ["bootstrap.php"],
+                "files": [
+                    "bootstrap.php"
+                ],
                 "psr-4": {
                     "Symfony\\Polyfill\\Php81\\": ""
                 },
-                "classmap": ["Resources/stubs"]
+                "classmap": [
+                    "Resources/stubs"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Nicolas Grekas",
@@ -11683,7 +12338,12 @@
             ],
             "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
             "homepage": "https://symfony.com",
-            "keywords": ["compatibility", "polyfill", "portable", "shim"],
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
             "support": {
                 "source": "https://github.com/symfony/polyfill-php81/tree/v1.28.0"
             },
@@ -11732,13 +12392,17 @@
                 }
             },
             "autoload": {
-                "files": ["bootstrap.php"],
+                "files": [
+                    "bootstrap.php"
+                ],
                 "psr-4": {
                     "Symfony\\Polyfill\\Php83\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Nicolas Grekas",
@@ -11751,7 +12415,12 @@
             ],
             "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions",
             "homepage": "https://symfony.com",
-            "keywords": ["compatibility", "polyfill", "portable", "shim"],
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
             "support": {
                 "source": "https://github.com/symfony/polyfill-php83/tree/v1.27.0"
             },
@@ -11793,10 +12462,14 @@
                 "psr-4": {
                     "Symfony\\Component\\Process\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Fabien Potencier",
@@ -11870,10 +12543,14 @@
                 "psr-4": {
                     "Symfony\\Bridge\\PsrHttpMessage\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Fabien Potencier",
@@ -11886,7 +12563,12 @@
             ],
             "description": "PSR HTTP message bridge",
             "homepage": "http://symfony.com",
-            "keywords": ["http", "http-message", "psr-17", "psr-7"],
+            "keywords": [
+                "http",
+                "http-message",
+                "psr-17",
+                "psr-7"
+            ],
             "support": {
                 "issues": "https://github.com/symfony/psr-http-message-bridge/issues",
                 "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.2.0"
@@ -11945,10 +12627,14 @@
                 "psr-4": {
                     "Symfony\\Component\\Routing\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Fabien Potencier",
@@ -11961,7 +12647,12 @@
             ],
             "description": "Maps an HTTP request to a set of configuration variables",
             "homepage": "https://symfony.com",
-            "keywords": ["router", "routing", "uri", "url"],
+            "keywords": [
+                "router",
+                "routing",
+                "uri",
+                "url"
+            ],
             "support": {
                 "source": "https://github.com/symfony/routing/tree/v6.3.10"
             },
@@ -12036,10 +12727,14 @@
                 "psr-4": {
                     "Symfony\\Component\\Serializer\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Fabien Potencier",
@@ -12106,10 +12801,14 @@
                 "psr-4": {
                     "Symfony\\Contracts\\Service\\": ""
                 },
-                "exclude-from-classmap": ["/Test/"]
+                "exclude-from-classmap": [
+                    "/Test/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Nicolas Grekas",
@@ -12182,14 +12881,20 @@
             },
             "type": "library",
             "autoload": {
-                "files": ["Resources/functions.php"],
+                "files": [
+                    "Resources/functions.php"
+                ],
                 "psr-4": {
                     "Symfony\\Component\\String\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Nicolas Grekas",
@@ -12260,10 +12965,14 @@
                 "psr-4": {
                     "Symfony\\Contracts\\Translation\\": ""
                 },
-                "exclude-from-classmap": ["/Test/"]
+                "exclude-from-classmap": [
+                    "/Test/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Nicolas Grekas",
@@ -12372,10 +13081,14 @@
                 "psr-4": {
                     "Symfony\\Bridge\\Twig\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Fabien Potencier",
@@ -12464,10 +13177,14 @@
                 "psr-4": {
                     "Symfony\\Component\\Validator\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Fabien Potencier",
@@ -12529,17 +13246,25 @@
                 "symfony/uid": "^5.4|^6.0",
                 "twig/twig": "^2.13|^3.0.4"
             },
-            "bin": ["Resources/bin/var-dump-server"],
+            "bin": [
+                "Resources/bin/var-dump-server"
+            ],
             "type": "library",
             "autoload": {
-                "files": ["Resources/functions/dump.php"],
+                "files": [
+                    "Resources/functions/dump.php"
+                ],
                 "psr-4": {
                     "Symfony\\Component\\VarDumper\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Nicolas Grekas",
@@ -12552,7 +13277,10 @@
             ],
             "description": "Provides mechanisms for walking through any arbitrary PHP variable",
             "homepage": "https://symfony.com",
-            "keywords": ["debug", "dump"],
+            "keywords": [
+                "debug",
+                "dump"
+            ],
             "support": {
                 "source": "https://github.com/symfony/var-dumper/tree/v6.3.8"
             },
@@ -12597,10 +13325,14 @@
                 "psr-4": {
                     "Symfony\\Component\\VarExporter\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Nicolas Grekas",
@@ -12667,16 +13399,22 @@
             "require-dev": {
                 "symfony/console": "^5.4|^6.0"
             },
-            "bin": ["Resources/bin/yaml-lint"],
+            "bin": [
+                "Resources/bin/yaml-lint"
+            ],
             "type": "library",
             "autoload": {
                 "psr-4": {
                     "Symfony\\Component\\Yaml\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Fabien Potencier",
@@ -12735,10 +13473,14 @@
                 "psr-4": {
                     "Twig\\Extra\\Intl\\": ""
                 },
-                "exclude-from-classmap": ["/Tests/"]
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Fabien Potencier",
@@ -12749,7 +13491,10 @@
             ],
             "description": "A Twig extension for Intl",
             "homepage": "https://twig.symfony.com",
-            "keywords": ["intl", "twig"],
+            "keywords": [
+                "intl",
+                "twig"
+            ],
             "support": {
                 "source": "https://github.com/twigphp/intl-extra/tree/v3.8.0"
             },
@@ -12795,7 +13540,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["BSD-3-Clause"],
+            "license": [
+                "BSD-3-Clause"
+            ],
             "authors": [
                 {
                     "name": "Fabien Potencier",
@@ -12815,7 +13562,9 @@
             ],
             "description": "Twig, the flexible, fast, and secure template language for PHP",
             "homepage": "https://twig.symfony.com",
-            "keywords": ["templating"],
+            "keywords": [
+                "templating"
+            ],
             "support": {
                 "issues": "https://github.com/twigphp/Twig/issues",
                 "source": "https://github.com/twigphp/Twig/tree/v3.6.1"
@@ -12894,7 +13643,9 @@
                     }
                 }
             },
-            "license": ["None"],
+            "license": [
+                "None"
+            ],
             "description": "Simplesamlphp configuration and utilities for wcm sites."
         },
         {
@@ -12920,10 +13671,14 @@
             },
             "type": "library",
             "autoload": {
-                "classmap": ["src/DrupalFinder.php"]
+                "classmap": [
+                    "src/DrupalFinder.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["GPL-2.0-or-later"],
+            "license": [
+                "GPL-2.0-or-later"
+            ],
             "authors": [
                 {
                     "name": "Florian Weber",
@@ -12974,7 +13729,9 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "license": ["MIT"],
+            "license": [
+                "MIT"
+            ],
             "authors": [
                 {
                     "name": "Bernhard Schussek",
@@ -12982,7 +13739,11 @@
                 }
             ],
             "description": "Assertions to validate method input/output with nice error messages.",
-            "keywords": ["assert", "check", "validate"],
+            "keywords": [
+                "assert",
+                "check",
+                "validate"
+            ],
             "support": {
                 "issues": "https://github.com/webmozarts/assert/issues",
                 "source": "https://github.com/webmozarts/assert/tree/1.11.0"
diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
index 6db4b85ca9e462291b28f909bd5ecfc104974e23..b50eb9b24d5197c598cb1d437f3eacb58b1786fc 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -1787,6 +1787,8 @@
     'Drupal\\Core\\Language\\LanguageManager' => $baseDir . '/web/core/lib/Drupal/Core/Language/LanguageManager.php',
     'Drupal\\Core\\Language\\LanguageManagerInterface' => $baseDir . '/web/core/lib/Drupal/Core/Language/LanguageManagerInterface.php',
     'Drupal\\Core\\Layout\\Annotation\\Layout' => $baseDir . '/web/core/lib/Drupal/Core/Layout/Annotation/Layout.php',
+    'Drupal\\Core\\Layout\\Icon\\IconBuilderInterface' => $baseDir . '/web/core/lib/Drupal/Core/Layout/Icon/IconBuilderInterface.php',
+    'Drupal\\Core\\Layout\\Icon\\SvgIconBuilder' => $baseDir . '/web/core/lib/Drupal/Core/Layout/Icon/SvgIconBuilder.php',
     'Drupal\\Core\\Layout\\LayoutDefault' => $baseDir . '/web/core/lib/Drupal/Core/Layout/LayoutDefault.php',
     'Drupal\\Core\\Layout\\LayoutDefinition' => $baseDir . '/web/core/lib/Drupal/Core/Layout/LayoutDefinition.php',
     'Drupal\\Core\\Layout\\LayoutInterface' => $baseDir . '/web/core/lib/Drupal/Core/Layout/LayoutInterface.php',
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
index 7888cc2c10d98238a6a497516c4357f31007b192..6661619c25224a7c025d083e5b9489a5a2646860 100644
--- a/vendor/composer/autoload_static.php
+++ b/vendor/composer/autoload_static.php
@@ -2421,6 +2421,8 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Core\\Language\\LanguageManager' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Language/LanguageManager.php',
         'Drupal\\Core\\Language\\LanguageManagerInterface' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Language/LanguageManagerInterface.php',
         'Drupal\\Core\\Layout\\Annotation\\Layout' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Layout/Annotation/Layout.php',
+        'Drupal\\Core\\Layout\\Icon\\IconBuilderInterface' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Layout/Icon/IconBuilderInterface.php',
+        'Drupal\\Core\\Layout\\Icon\\SvgIconBuilder' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Layout/Icon/SvgIconBuilder.php',
         'Drupal\\Core\\Layout\\LayoutDefault' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Layout/LayoutDefault.php',
         'Drupal\\Core\\Layout\\LayoutDefinition' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Layout/LayoutDefinition.php',
         'Drupal\\Core\\Layout\\LayoutInterface' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Layout/LayoutInterface.php',
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index ffa3354efa8fa6c9b12bc4239043c6f0f0619bed..f3f026ac506f5cb372d9c93290d49a3f5fa99fa0 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -2341,17 +2341,17 @@
         },
         {
             "name": "drupal/core",
-            "version": "10.1.6",
-            "version_normalized": "10.1.6.0",
+            "version": "10.1.7",
+            "version_normalized": "10.1.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drupal/core.git",
-                "reference": "33695caf467e3e1e8c75d42215df57bee31be9ec"
+                "reference": "54415049a721ede65318e3980b402af59bc35913"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drupal/core/zipball/33695caf467e3e1e8c75d42215df57bee31be9ec",
-                "reference": "33695caf467e3e1e8c75d42215df57bee31be9ec",
+                "url": "https://api.github.com/repos/drupal/core/zipball/54415049a721ede65318e3980b402af59bc35913",
+                "reference": "54415049a721ede65318e3980b402af59bc35913",
                 "shasum": ""
             },
             "require": {
@@ -2428,7 +2428,7 @@
             "suggest": {
                 "ext-zip": "Needed to extend the plugin.manager.archiver service capability with the handling of files in the ZIP format."
             },
-            "time": "2023-11-01T11:59:20+00:00",
+            "time": "2023-12-06T09:22:56+00:00",
             "type": "drupal-core",
             "extra": {
                 "drupal-scaffold": {
@@ -2501,23 +2501,23 @@
             ],
             "description": "Drupal is an open source content management platform powering millions of websites and applications.",
             "support": {
-                "source": "https://github.com/drupal/core/tree/10.1.6"
+                "source": "https://github.com/drupal/core/tree/10.1.7"
             },
             "install-path": "../../web/core"
         },
         {
             "name": "drupal/core-composer-scaffold",
-            "version": "10.1.6",
-            "version_normalized": "10.1.6.0",
+            "version": "10.1.7",
+            "version_normalized": "10.1.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drupal/core-composer-scaffold.git",
-                "reference": "1ccd7db5ff8a5425b5bbba9b9a05e366363c0a51"
+                "reference": "6a2d817ccb59fdb7e6b3720a1478b0d00b475445"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drupal/core-composer-scaffold/zipball/1ccd7db5ff8a5425b5bbba9b9a05e366363c0a51",
-                "reference": "1ccd7db5ff8a5425b5bbba9b9a05e366363c0a51",
+                "url": "https://api.github.com/repos/drupal/core-composer-scaffold/zipball/6a2d817ccb59fdb7e6b3720a1478b0d00b475445",
+                "reference": "6a2d817ccb59fdb7e6b3720a1478b0d00b475445",
                 "shasum": ""
             },
             "require": {
@@ -2530,7 +2530,7 @@
             "require-dev": {
                 "composer/composer": "^1.8@stable"
             },
-            "time": "2023-04-30T16:15:32+00:00",
+            "time": "2023-11-15T23:23:43+00:00",
             "type": "composer-plugin",
             "extra": {
                 "class": "Drupal\\Composer\\Plugin\\Scaffold\\Plugin",
@@ -2554,23 +2554,23 @@
                 "drupal"
             ],
             "support": {
-                "source": "https://github.com/drupal/core-composer-scaffold/tree/10.1.6"
+                "source": "https://github.com/drupal/core-composer-scaffold/tree/10.1.7"
             },
             "install-path": "../drupal/core-composer-scaffold"
         },
         {
             "name": "drupal/core-recommended",
-            "version": "10.1.6",
-            "version_normalized": "10.1.6.0",
+            "version": "10.1.7",
+            "version_normalized": "10.1.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drupal/core-recommended.git",
-                "reference": "13f5968854fe8bc02e659d8a4facc04a1a576ce5"
+                "reference": "e4726a4a0173a4b9acdac8cab5d4009d6085fd2e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drupal/core-recommended/zipball/13f5968854fe8bc02e659d8a4facc04a1a576ce5",
-                "reference": "13f5968854fe8bc02e659d8a4facc04a1a576ce5",
+                "url": "https://api.github.com/repos/drupal/core-recommended/zipball/e4726a4a0173a4b9acdac8cab5d4009d6085fd2e",
+                "reference": "e4726a4a0173a4b9acdac8cab5d4009d6085fd2e",
                 "shasum": ""
             },
             "require": {
@@ -2579,7 +2579,7 @@
                 "doctrine/annotations": "~1.14.3",
                 "doctrine/deprecations": "~v1.1.1",
                 "doctrine/lexer": "~2.1.0",
-                "drupal/core": "10.1.6",
+                "drupal/core": "10.1.7",
                 "egulias/email-validator": "~4.0.1",
                 "guzzlehttp/guzzle": "~7.7.0",
                 "guzzlehttp/psr7": "~2.5.0",
@@ -2629,7 +2629,7 @@
             "conflict": {
                 "webflo/drupal-core-strict": "*"
             },
-            "time": "2023-11-01T11:59:20+00:00",
+            "time": "2023-12-06T09:22:56+00:00",
             "type": "metapackage",
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -2637,7 +2637,7 @@
             ],
             "description": "Core and its dependencies with known-compatible minor versions. Require this project INSTEAD OF drupal/core.",
             "support": {
-                "source": "https://github.com/drupal/core-recommended/tree/10.1.6"
+                "source": "https://github.com/drupal/core-recommended/tree/10.1.7"
             },
             "install-path": null
         },
diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php
index 901804c77fa7dff78d32d3fa8c5f5fb41bc85ddb..e3fcd7984fb6db8dfc67f89a8503e9d830da3fdb 100644
--- a/vendor/composer/installed.php
+++ b/vendor/composer/installed.php
@@ -3,7 +3,7 @@
         'name' => 'osu-asc-webservices/d8-upstream',
         'pretty_version' => 'dev-main',
         'version' => 'dev-main',
-        'reference' => '8af06bbba89858bf4993340c07ccc65d6910aec4',
+        'reference' => 'edbfaf1ddccdb6a39283b7a9eb6645dc02a2fe18',
         'type' => 'project',
         'install_path' => __DIR__ . '/../../',
         'aliases' => array(),
@@ -368,9 +368,9 @@
             'dev_requirement' => false,
         ),
         'drupal/core' => array(
-            'pretty_version' => '10.1.6',
-            'version' => '10.1.6.0',
-            'reference' => '33695caf467e3e1e8c75d42215df57bee31be9ec',
+            'pretty_version' => '10.1.7',
+            'version' => '10.1.7.0',
+            'reference' => '54415049a721ede65318e3980b402af59bc35913',
             'type' => 'drupal-core',
             'install_path' => __DIR__ . '/../../web/core',
             'aliases' => array(),
@@ -379,25 +379,25 @@
         'drupal/core-annotation' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-assertion' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-class-finder' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-composer-scaffold' => array(
-            'pretty_version' => '10.1.6',
-            'version' => '10.1.6.0',
-            'reference' => '1ccd7db5ff8a5425b5bbba9b9a05e366363c0a51',
+            'pretty_version' => '10.1.7',
+            'version' => '10.1.7.0',
+            'reference' => '6a2d817ccb59fdb7e6b3720a1478b0d00b475445',
             'type' => 'composer-plugin',
             'install_path' => __DIR__ . '/../drupal/core-composer-scaffold',
             'aliases' => array(),
@@ -406,97 +406,97 @@
         'drupal/core-datetime' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-dependency-injection' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-diff' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-discovery' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-event-dispatcher' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-file-cache' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-file-security' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-filesystem' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-front-matter' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-gettext' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-graph' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-http-foundation' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-php-storage' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-plugin' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-proxy-builder' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-recommended' => array(
-            'pretty_version' => '10.1.6',
-            'version' => '10.1.6.0',
-            'reference' => '13f5968854fe8bc02e659d8a4facc04a1a576ce5',
+            'pretty_version' => '10.1.7',
+            'version' => '10.1.7.0',
+            'reference' => 'e4726a4a0173a4b9acdac8cab5d4009d6085fd2e',
             'type' => 'metapackage',
             'install_path' => NULL,
             'aliases' => array(),
@@ -505,37 +505,37 @@
         'drupal/core-render' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-serialization' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-transliteration' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-utility' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-uuid' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/core-version' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '10.1.6',
+                0 => '10.1.7',
             ),
         ),
         'drupal/crop' => array(
@@ -1402,7 +1402,7 @@
         'osu-asc-webservices/d8-upstream' => array(
             'pretty_version' => 'dev-main',
             'version' => 'dev-main',
-            'reference' => '8af06bbba89858bf4993340c07ccc65d6910aec4',
+            'reference' => 'edbfaf1ddccdb6a39283b7a9eb6645dc02a2fe18',
             'type' => 'project',
             'install_path' => __DIR__ . '/../../',
             'aliases' => array(),
diff --git a/vendor/drupal/core-composer-scaffold/README.md b/vendor/drupal/core-composer-scaffold/README.md
index 0d37c5db68b72f6bb0c3c8a7d64899ba5a23c69f..32bd25c37d90611b68ffce639c5372cf7a3817a5 100644
--- a/vendor/drupal/core-composer-scaffold/README.md
+++ b/vendor/drupal/core-composer-scaffold/README.md
@@ -1,9 +1,14 @@
 # Drupal Composer Scaffold
 
-This project provides a composer plugin for placing scaffold files (like
-`index.php`, `update.php`, …) from the `drupal/core` project into their desired
-location inside the web root. Only individual files may be scaffolded with this
-plugin.
+This project provides a composer plugin making the Drupal core Composer package
+work correctly in a Composer project.
+
+This takes care of:
+  - Placing scaffold files (like `index.php`, `update.php`, …) from the
+    `drupal/core` project into their desired location inside the web root. Only
+    individual files may be scaffolded with this plugin.
+  - Writing an autoload.php file to the web root, which includes the Composer
+    autoload.php file.
 
 The purpose of scaffolding files is to allow Drupal sites to be fully managed by
 Composer, and still allow individual asset files to be placed in arbitrary
diff --git a/web/core/MAINTAINERS.txt b/web/core/MAINTAINERS.txt
index a32c745e669ff1a0e3708f5dfe1c893843f115fe..473f79d82d889921f2aea6b9c5ec6c41017ca3b8 100644
--- a/web/core/MAINTAINERS.txt
+++ b/web/core/MAINTAINERS.txt
@@ -38,9 +38,9 @@ Framework managers
 
 Release managers
 - Nathaniel Catchpole 'catch' https://www.drupal.org/u/catch
+- Dave Long 'longwave' https://www.drupal.org/u/longwave
 - Jess Myrbo 'xjm' https://www.drupal.org/u/xjm
 - Victoria Spagnolo 'quietone' https://www.drupal.org/u/quietone
-- (provisional) Dave Long 'longwave' https://www.drupal.org/u/longwave
 
 Core JavaScript packages
 - Théodore Biadala 'nod_' https://www.drupal.org/u/nod_
@@ -426,6 +426,7 @@ Update Manager
 
 User
 - Moshe Weitzman 'moshe weitzman' https://www.drupal.org/u/moshe-weitzman
+- Kristiaan Van den Eynde 'kristiaanvandeneynde' https://www.drupal.org/u/kristiaanvandeneynde
 
 Views
 - Daniel Wehner 'dawehner' https://www.drupal.org/u/dawehner
diff --git a/web/core/includes/theme.inc b/web/core/includes/theme.inc
index 7d8bc8a3ed46fa354d1c5f9a30a6dff0716989b7..222f05a21c9b29d4cc5cbfb84614fc2de59b0f06 100644
--- a/web/core/includes/theme.inc
+++ b/web/core/includes/theme.inc
@@ -26,6 +26,7 @@
 use Drupal\Core\Render\Element;
 use Drupal\Core\Render\Markup;
 use Drupal\Core\Utility\TableSort;
+use Drupal\Core\Installer\InstallerKernel;
 
 /**
  * @defgroup content_flags Content markers
@@ -1505,13 +1506,18 @@ function template_preprocess_maintenance_page(&$variables) {
  * @see template_preprocess_maintenance_page()
  */
 function template_preprocess_install_page(&$variables) {
+  $installer_active_task = NULL;
+  if (defined('MAINTENANCE_MODE') && MAINTENANCE_MODE === 'install' && InstallerKernel::installationAttempted()) {
+    $installer_active_task = $GLOBALS['install_state']['active_task'];
+  }
+
   template_preprocess_maintenance_page($variables);
 
   // Override the site name that is displayed on the page, since Drupal is
   // still in the process of being installed.
   $distribution_name = drupal_install_profile_distribution_name();
   $variables['site_name'] = $distribution_name;
-  $variables['site_version'] = drupal_install_profile_distribution_version();
+  $variables['site_version'] = $installer_active_task ? drupal_install_profile_distribution_version() : '';
 }
 
 /**
diff --git a/web/core/lib/Drupal.php b/web/core/lib/Drupal.php
index 0dfbd6316d62bf70c9db379879176db6280e11b0..0eb13fc9dca6adff3ddcc516b0fba881bb64d1d8 100644
--- a/web/core/lib/Drupal.php
+++ b/web/core/lib/Drupal.php
@@ -75,7 +75,7 @@ class Drupal {
   /**
    * The current system version.
    */
-  const VERSION = '10.1.6';
+  const VERSION = '10.1.7';
 
   /**
    * Core API compatibility.
diff --git a/web/core/lib/Drupal/Component/Plugin/Factory/FactoryInterface.php b/web/core/lib/Drupal/Component/Plugin/Factory/FactoryInterface.php
index 8cf046b9c0dff87c801ab49e5d8cb4f7dbe15a0d..4b1c2ad5af44c52627b3472f7786a56b3270b26b 100644
--- a/web/core/lib/Drupal/Component/Plugin/Factory/FactoryInterface.php
+++ b/web/core/lib/Drupal/Component/Plugin/Factory/FactoryInterface.php
@@ -8,7 +8,7 @@
 interface FactoryInterface {
 
   /**
-   * Creates a pre-configured instance of a plugin.
+   * Creates a plugin instance based on the provided ID and configuration.
    *
    * @param string $plugin_id
    *   The ID of the plugin being instantiated.
diff --git a/web/core/lib/Drupal/Component/Plugin/Mapper/MapperInterface.php b/web/core/lib/Drupal/Component/Plugin/Mapper/MapperInterface.php
index 9b01a374a50708efe2ba2e36e26048bb96bae70e..a53b14e7f53d82be21161c2bafa792e283df53e4 100644
--- a/web/core/lib/Drupal/Component/Plugin/Mapper/MapperInterface.php
+++ b/web/core/lib/Drupal/Component/Plugin/Mapper/MapperInterface.php
@@ -14,7 +14,7 @@
 interface MapperInterface {
 
   /**
-   * Gets a preconfigured instance of a plugin.
+   * Gets or creates a plugin instance that satisfies the given options.
    *
    * @param array $options
    *   An array of options that can be used to determine a suitable plugin to
diff --git a/web/core/lib/Drupal/Component/Utility/Html.php b/web/core/lib/Drupal/Component/Utility/Html.php
index 99427ea7973035a8b155c0b7c631cec68735562a..749a479636d4f35ba9d8364bbea7395d6e5bd820 100644
--- a/web/core/lib/Drupal/Component/Utility/Html.php
+++ b/web/core/lib/Drupal/Component/Utility/Html.php
@@ -480,11 +480,10 @@ public static function transformRootRelativeUrlsToAbsolute($html, $scheme_and_ho
         // @see https://html.spec.whatwg.org/multipage/embedded-content.html#attr-img-srcset
         // @see https://html.spec.whatwg.org/multipage/embedded-content.html#image-candidate-string
         $image_candidate_strings = explode(',', $node->getAttribute('srcset'));
-        $image_candidate_strings = array_map('trim', $image_candidate_strings);
-        for ($i = 0; $i < count($image_candidate_strings); $i++) {
-          $image_candidate_string = $image_candidate_strings[$i];
+        $image_candidate_strings = array_filter(array_map('trim', $image_candidate_strings));
+        foreach ($image_candidate_strings as $key => $image_candidate_string) {
           if ($image_candidate_string[0] === '/' && $image_candidate_string[1] !== '/') {
-            $image_candidate_strings[$i] = $scheme_and_host . $image_candidate_string;
+            $image_candidate_strings[$key] = $scheme_and_host . $image_candidate_string;
           }
         }
         $node->setAttribute('srcset', implode(', ', $image_candidate_strings));
diff --git a/web/core/lib/Drupal/Core/Asset/LibraryDependencyResolver.php b/web/core/lib/Drupal/Core/Asset/LibraryDependencyResolver.php
index 4c31c1b124bac0162339365143d209df8623fa09..153801aa902862984428e61ba011e3526f2ab432 100644
--- a/web/core/lib/Drupal/Core/Asset/LibraryDependencyResolver.php
+++ b/web/core/lib/Drupal/Core/Asset/LibraryDependencyResolver.php
@@ -86,7 +86,7 @@ public function getMinimalRepresentativeSubset(array $libraries) {
     foreach ($libraries as $library) {
       $with_deps = $this->getLibrariesWithDependencies([$library]);
       // We don't need library itself listed in the dependencies.
-      $all_dependencies += array_diff($with_deps, [$library]);
+      $all_dependencies = array_unique(array_merge($all_dependencies, array_diff($with_deps, [$library])));
     }
 
     return array_values(array_diff($libraries, array_intersect($all_dependencies, $libraries)));
diff --git a/web/core/lib/Drupal/Core/Config/ConfigImporter.php b/web/core/lib/Drupal/Core/Config/ConfigImporter.php
index 3be2b32273e520803ebce610db70f4b62423f150..7c161a5f247e1c268c44a872d6d8ad47f4478cd4 100644
--- a/web/core/lib/Drupal/Core/Config/ConfigImporter.php
+++ b/web/core/lib/Drupal/Core/Config/ConfigImporter.php
@@ -992,13 +992,13 @@ protected function importConfig($collection, $op, $name) {
     else {
       $config = new Config($name, $this->storageComparer->getTargetStorage($collection), $this->eventDispatcher, $this->typedConfigManager);
     }
+    if ($old_data = $this->storageComparer->getTargetStorage($collection)->read($name)) {
+      $config->initWithData($old_data);
+    }
     if ($op == 'delete') {
       $config->delete();
     }
     else {
-      if ($old_data = $this->storageComparer->getTargetStorage($collection)->read($name)) {
-        $config->initWithData($old_data);
-      }
       $data = $this->storageComparer->getSourceStorage($collection)->read($name);
       $config->setData($data ? $data : []);
       $config->save();
diff --git a/web/core/lib/Drupal/Core/Config/DatabaseStorage.php b/web/core/lib/Drupal/Core/Config/DatabaseStorage.php
index c40e70ee224cc4704e550e0f0e4380cc51615b08..4430298da39ed91119d22da0384ac73c8ac9a719 100644
--- a/web/core/lib/Drupal/Core/Config/DatabaseStorage.php
+++ b/web/core/lib/Drupal/Core/Config/DatabaseStorage.php
@@ -72,8 +72,11 @@ public function exists($name) {
       ], $this->options)->fetchField();
     }
     catch (\Exception $e) {
-      // If we attempt a read without actually having the database or the table
-      // available, just return FALSE so the caller can handle it.
+      if ($this->connection->schema()->tableExists($this->table)) {
+        throw $e;
+      }
+      // If we attempt a read without actually having the table available,
+      // return false so the caller can handle it.
       return FALSE;
     }
   }
@@ -90,8 +93,11 @@ public function read($name) {
       }
     }
     catch (\Exception $e) {
-      // If we attempt a read without actually having the database or the table
-      // available, just return FALSE so the caller can handle it.
+      if ($this->connection->schema()->tableExists($this->table)) {
+        throw $e;
+      }
+      // If we attempt a read without actually having the table available,
+      // return false so the caller can handle it.
     }
     return $data;
   }
@@ -108,8 +114,11 @@ public function readMultiple(array $names) {
       }
     }
     catch (\Exception $e) {
-      // If we attempt a read without actually having the database or the table
-      // available, just return an empty array so the caller can handle it.
+      if ($this->connection->schema()->tableExists($this->table)) {
+        throw $e;
+      }
+      // If we attempt a read without actually having the table available,
+      // return an empty array so the caller can handle it.
     }
     return $list;
   }
@@ -277,6 +286,11 @@ public function listAll($prefix = '') {
       return $query->execute()->fetchCol();
     }
     catch (\Exception $e) {
+      if ($this->connection->schema()->tableExists($this->table)) {
+        throw $e;
+      }
+      // If we attempt a read without actually having the table available,
+      // return an empty array so the caller can handle it.
       return [];
     }
   }
@@ -295,6 +309,11 @@ public function deleteAll($prefix = '') {
         ->execute();
     }
     catch (\Exception $e) {
+      if ($this->connection->schema()->tableExists($this->table)) {
+        throw $e;
+      }
+      // If we attempt a delete without actually having the table available,
+      // return false so the caller can handle it.
       return FALSE;
     }
   }
@@ -328,6 +347,11 @@ public function getAllCollectionNames() {
       ])->fetchCol();
     }
     catch (\Exception $e) {
+      if ($this->connection->schema()->tableExists($this->table)) {
+        throw $e;
+      }
+      // If we attempt a read without actually having the table available,
+      // return an empty array so the caller can handle it.
       return [];
     }
   }
diff --git a/web/core/lib/Drupal/Core/Config/StorageInterface.php b/web/core/lib/Drupal/Core/Config/StorageInterface.php
index fe6857a10626a25560f23b83543eb0498d60e204..b2e6d4abb0892b32697a1962e640510c32b8b741 100644
--- a/web/core/lib/Drupal/Core/Config/StorageInterface.php
+++ b/web/core/lib/Drupal/Core/Config/StorageInterface.php
@@ -32,7 +32,7 @@ public function exists($name);
    * @param string $name
    *   The name of a configuration object to load.
    *
-   * @return array|bool
+   * @return array|false
    *   The configuration data stored for the configuration object name. If no
    *   configuration data exists for the given name, FALSE is returned.
    */
diff --git a/web/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php b/web/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php
index 36cd99d586db4a189dd2b30f3731bfb61d727610..96679d5f17a9ed22048d3eb95b45d764b8a6551f 100644
--- a/web/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php
+++ b/web/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php
@@ -446,8 +446,8 @@ private function validate($content, $file)
             throw new InvalidArgumentException(sprintf('The service file "%s" is not valid. It should contain an array. Check your YAML syntax.', $file));
         }
 
-        if ($invalid_keys = array_diff_key($content, array('parameters' => 1, 'services' => 1))) {
-            throw new InvalidArgumentException(sprintf('The service file "%s" is not valid: it contains invalid keys %s. Services have to be added under "services" and Parameters under "parameters".', $file, $invalid_keys));
+        if ($invalid_keys = array_keys(array_diff_key($content, array('parameters' => 1, 'services' => 1)))) {
+            throw new InvalidArgumentException(sprintf('The service file "%s" is not valid: it contains invalid root key(s) "%s". Services have to be added under "services" and Parameters under "parameters".', $file, implode('", "', $invalid_keys)));
         }
 
         return $content;
diff --git a/web/core/lib/Drupal/Core/Entity/EntityFieldManager.php b/web/core/lib/Drupal/Core/Entity/EntityFieldManager.php
index 4fc6c0b4ea5bc64a4f326eece876849e9c5a8b90..666b81f575af250a04f145a6dc4515b6a5ab598f 100644
--- a/web/core/lib/Drupal/Core/Entity/EntityFieldManager.php
+++ b/web/core/lib/Drupal/Core/Entity/EntityFieldManager.php
@@ -408,7 +408,7 @@ protected function buildBundleFieldDefinitions($entity_type_id, $bundle, array $
       }
     }
 
-    // Retrieve base field definitions from modules.
+    // Retrieve bundle field definitions from modules.
     $this->moduleHandler->invokeAllWith(
       'entity_bundle_field_info',
       function (callable $hook, string $module) use (&$bundle_field_definitions, $entity_type, $bundle, $base_field_definitions) {
diff --git a/web/core/lib/Drupal/Core/Entity/EntityRepositoryInterface.php b/web/core/lib/Drupal/Core/Entity/EntityRepositoryInterface.php
index f8623afcaed906c9fda07e899f7cde51866ca21f..27cfa7255921b59e641b7b1ba2db5277420075d1 100644
--- a/web/core/lib/Drupal/Core/Entity/EntityRepositoryInterface.php
+++ b/web/core/lib/Drupal/Core/Entity/EntityRepositoryInterface.php
@@ -64,8 +64,9 @@ public function loadEntityByConfigTarget($entity_type_id, $target);
    *   (optional) An associative array of arbitrary data that can be useful to
    *   determine the proper fallback sequence.
    *
-   * @return \Drupal\Core\Entity\EntityInterface
-   *   An entity object for the translated data.
+   * @return \Drupal\Core\Entity\EntityInterface|null
+   *   An entity object for the translated data, or NULL if the requested
+   *   translation is missing, forbidden, or unavailable.
    *
    * @see \Drupal\Core\Language\LanguageManagerInterface::getFallbackCandidates()
    */
diff --git a/web/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php b/web/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php
index aef9fb0018dd0fb8fae6bee66376a76d5e3f4e11..641654673ee7ec2eac6ce81bc0240c7ce5d1ef36 100644
--- a/web/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php
+++ b/web/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php
@@ -123,7 +123,7 @@ public function validate($value, Constraint $constraint) {
     if ($target_ids) {
       // Get a list of pre-existing references.
       $previously_referenced_ids = [];
-      if ($value->getParent() && ($entity = $value->getEntity()) && !$entity->isNew()) {
+      if ($entity && !$entity->isNew()) {
         $existing_entity = $this->entityTypeManager->getStorage($entity->getEntityTypeId())->loadUnchanged($entity->id());
         foreach ($existing_entity->{$value->getFieldDefinition()->getName()}->getValue() as $item) {
           $previously_referenced_ids[$item['target_id']] = $item['target_id'];
diff --git a/web/core/lib/Drupal/Core/EventSubscriber/ExceptionLoggingSubscriber.php b/web/core/lib/Drupal/Core/EventSubscriber/ExceptionLoggingSubscriber.php
index 8adc67a6c969b4e512e3e29b8d25bd77ef81c572..31b45d5e58aa2ed8c1e7df54523d03135fd23588 100644
--- a/web/core/lib/Drupal/Core/EventSubscriber/ExceptionLoggingSubscriber.php
+++ b/web/core/lib/Drupal/Core/EventSubscriber/ExceptionLoggingSubscriber.php
@@ -88,7 +88,7 @@ public function onClientError(ExceptionEvent $event) {
       'status_code' => $exception->getStatusCode(),
     ];
     $this->logger->get('client error')
-      ->log($error['severity_level'], Error::DEFAULT_ERROR_MESSAGE, $error);
+      ->warning(Error::DEFAULT_ERROR_MESSAGE, $error);
   }
 
   /**
diff --git a/web/core/lib/Drupal/Core/Render/theme.api.php b/web/core/lib/Drupal/Core/Render/theme.api.php
index 36f1c096987366221c962e51395be162b9dd0502..58a930a8b9532baa339e1b8e59d2193bb7e56973 100644
--- a/web/core/lib/Drupal/Core/Render/theme.api.php
+++ b/web/core/lib/Drupal/Core/Render/theme.api.php
@@ -668,6 +668,7 @@ function hook_theme_suggestions_HOOK(array $variables) {
  *
  * In the following example, we provide an alternative template suggestion to
  * node and taxonomy term templates based on the user being logged in.
+ *
  * @code
  * function MYMODULE_theme_suggestions_alter(array &$suggestions, array $variables, $hook) {
  *   if (\Drupal::currentUser()->isAuthenticated() && in_array($hook, array('node', 'taxonomy_term'))) {
@@ -677,8 +678,9 @@ function hook_theme_suggestions_HOOK(array $variables) {
  *
  * @endcode
  *
- * @param array $suggestions
- *   An array of alternate, more specific names for template files.
+ * @param array &$suggestions
+ *   An array of alternate, more specific names for template files, passed by
+ *   reference.
  * @param array $variables
  *   An array of variables passed to the theme hook. Note that this hook is
  *   invoked before any variable preprocessing.
diff --git a/web/core/lib/Drupal/Core/TypedData/TypedData.php b/web/core/lib/Drupal/Core/TypedData/TypedData.php
index 438494b48cf5c62354f5c3448559a64de9f224d8..27dd1d57344d0cfb8ecf0216fac01cb4683b8cf1 100644
--- a/web/core/lib/Drupal/Core/TypedData/TypedData.php
+++ b/web/core/lib/Drupal/Core/TypedData/TypedData.php
@@ -175,6 +175,10 @@ public function getPropertyPath() {
       // The property path of this data object is the parent's path appended
       // by this object's name.
       $prefix = $this->parent->getPropertyPath();
+      // Variables in double quotes used to leverage fast string concatenation.
+      // In PHP 7+ concatenation with variable inside string is the fastest.
+      // @see https://blog.blackfire.io/php-7-performance-improvements-encapsed-strings-optimization.html
+      // This is being done because the code can run in the critical path.
       return $prefix !== '' ? "{$prefix}.{$this->name}" : $this->name;
     }
     // If no parent is set, this is the root of the data tree. Thus the property
diff --git a/web/core/misc/cspell/dictionary.txt b/web/core/misc/cspell/dictionary.txt
index 1f5411e117022eed5c4c19f3e36eea0eb446c29e..1bd124449c6d091e8227cd4ea115748e88b9bcde 100644
--- a/web/core/misc/cspell/dictionary.txt
+++ b/web/core/misc/cspell/dictionary.txt
@@ -212,7 +212,6 @@ cochez
 codesniffer
 colgroups
 colinodell
-collegehumor
 colonpos
 colour
 colspans
@@ -259,6 +258,7 @@ customly
 customrequest
 cweagans
 cádiz
+dailymotion
 databasefilename
 databasename
 datas
diff --git a/web/core/modules/ban/tests/src/Unit/BanMiddlewareTest.php b/web/core/modules/ban/tests/src/Unit/BanMiddlewareTest.php
index 7f12b37e5dbf9ba24947c2d003b56d65db25660e..42d61eee5ae4ffc5a358cd80887ccee0eb135f22 100644
--- a/web/core/modules/ban/tests/src/Unit/BanMiddlewareTest.php
+++ b/web/core/modules/ban/tests/src/Unit/BanMiddlewareTest.php
@@ -78,7 +78,7 @@ public function testUnbannedIp() {
 
     $request = Request::create('/test-path');
     $request->server->set('REMOTE_ADDR', $unbanned_ip);
-    $expected_response = new Response(200);
+    $expected_response = new Response(status: 200);
     $this->kernel->expects($this->once())
       ->method('handle')
       ->with($request, HttpKernelInterface::MAIN_REQUEST, TRUE)
diff --git a/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5OffCanvasTest.php b/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5OffCanvasTest.php
index 2cec1138d2e79ab40f17ec3016e4b7a3e0a28bf5..6c4effb5e989aaf8bf3cafec5a3f8e71636ff4ff 100644
--- a/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5OffCanvasTest.php
+++ b/web/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5OffCanvasTest.php
@@ -37,7 +37,7 @@ public function testOffCanvasStyles() {
     $assert_session->assertWaitOnAjaxRequest();
 
     $styles = $assert_session->elementExists('css', 'style#ckeditor5-off-canvas-reset');
-    $this->stringContains('#drupal-off-canvas-wrapper [data-drupal-ck-style-fence]', $styles->getText());
+    $this->assertStringContainsString('#drupal-off-canvas-wrapper [data-drupal-ck-style-fence]', $styles->getHtml());
 
     $assert_session->elementExists('css', '.ck');
 
diff --git a/web/core/modules/config_translation/tests/src/Unit/ConfigNamesMapperTest.php b/web/core/modules/config_translation/tests/src/Unit/ConfigNamesMapperTest.php
index 97ed1a83d2f94fc3b5fe5d7ab9fce49978959480..fc2791fb1de10978d73076c217af195e81e68201 100644
--- a/web/core/modules/config_translation/tests/src/Unit/ConfigNamesMapperTest.php
+++ b/web/core/modules/config_translation/tests/src/Unit/ConfigNamesMapperTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\config_translation\Unit\ConfigNamesMapperTest.
- */
-
 namespace Drupal\Tests\config_translation\Unit;
 
 use Drupal\config_translation\ConfigNamesMapper;
diff --git a/web/core/modules/contact/tests/src/Functional/ContactLanguageTest.php b/web/core/modules/contact/tests/src/Functional/ContactLanguageTest.php
index 045dd60e91d304aca14111b82a7f1148a352066b..dc864a290a0be415bc0bc186d15fb6d58411b858 100644
--- a/web/core/modules/contact/tests/src/Functional/ContactLanguageTest.php
+++ b/web/core/modules/contact/tests/src/Functional/ContactLanguageTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\contact\Functional;
 
+use Drupal\Core\Language\LanguageInterface;
+use Drupal\language\Entity\ContentLanguageSettings;
 use Drupal\Tests\BrowserTestBase;
 
 /**
@@ -54,12 +56,11 @@ public function testContactLanguage() {
     $this->assertSession()->statusCodeEquals(200);
     $this->assertSession()->fieldNotExists('edit-langcode-0-value');
 
-    // Enable language select from content language settings page.
-    $settings_path = 'admin/config/regional/content-language';
-    $edit['entity_types[contact_message]'] = TRUE;
-    $edit['settings[contact_message][feedback][settings][language][language_alterable]'] = TRUE;
-    $this->drupalGet($settings_path);
-    $this->submitForm($edit, 'Save configuration');
+    // Enable language select.
+    $config = ContentLanguageSettings::loadByEntityTypeBundle('contact_message', 'feedback');
+    $config->setDefaultLangcode(LanguageInterface::LANGCODE_SITE_DEFAULT);
+    $config->setLanguageAlterable(TRUE);
+    $config->save();
 
     // Ensure that contact form now shows the language select.
     $this->drupalGet('contact');
diff --git a/web/core/modules/content_translation/tests/src/Functional/ContentTranslationUntranslatableFieldsTest.php b/web/core/modules/content_translation/tests/src/Functional/ContentTranslationUntranslatableFieldsTest.php
index 07470bc7e9a0930077fe178673628d8e623d6412..40070e17387d750a88f4a0933227091ea7701ada 100644
--- a/web/core/modules/content_translation/tests/src/Functional/ContentTranslationUntranslatableFieldsTest.php
+++ b/web/core/modules/content_translation/tests/src/Functional/ContentTranslationUntranslatableFieldsTest.php
@@ -32,11 +32,9 @@ protected function setUp(): void {
 
     // Configure one field as untranslatable.
     $this->drupalLogin($this->administrator);
-    $edit = [
-      'settings[' . $this->entityTypeId . '][' . $this->bundle . '][fields][' . $this->fieldName . ']' => 0,
-    ];
-    $this->drupalGet('admin/config/regional/content-language');
-    $this->submitForm($edit, 'Save configuration');
+
+    $field = FieldConfig::loadByName($this->entityTypeId, $this->bundle, $this->fieldName);
+    $field->setTranslatable(FALSE)->save();
 
     /** @var \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager */
     $entity_field_manager = $this->container->get('entity_field.manager');
diff --git a/web/core/modules/dblog/dblog.install b/web/core/modules/dblog/dblog.install
index 2a9f05dd39318d498633deb4bf3b2192b844b18b..0a581226b414f3a86a09986f61ab27bb7fa137a6 100644
--- a/web/core/modules/dblog/dblog.install
+++ b/web/core/modules/dblog/dblog.install
@@ -5,8 +5,6 @@
  * Install, update and uninstall functions for the dblog module.
  */
 
-use Drupal\Core\Database\Database;
-
 /**
  * Implements hook_schema().
  */
@@ -123,15 +121,15 @@ function dblog_update_10100(&$sandbox = NULL) {
  * Converts the 'wid' of the 'watchdog' table to a big integer.
  */
 function dblog_update_10101(&$sandbox = NULL) {
-  $schema = Database::getConnection()->schema();
-
-  // Increase the size of the field.
-  $new_specification = [
-    'size' => 'big',
-    'type' => 'serial',
-    'not null' => TRUE,
-    'description' => 'Primary Key: Unique watchdog event ID.',
-  ];
-  $schema->changeField('watchdog', 'wid', 'wid', $new_specification);
-
+  $connection = \Drupal::database();
+  if ($connection->databaseType() != 'sqlite') {
+    // Increase the size of the field.
+    $new_specification = [
+      'size' => 'big',
+      'type' => 'serial',
+      'not null' => TRUE,
+      'description' => 'Primary Key: Unique watchdog event ID.',
+    ];
+    $connection->schema()->changeField('watchdog', 'wid', 'wid', $new_specification);
+  }
 }
diff --git a/web/core/modules/field/tests/src/Unit/FieldConfigEntityUnitTest.php b/web/core/modules/field/tests/src/Unit/FieldConfigEntityUnitTest.php
index 3cab469051f59987da839fb0c94fd67dd181abbb..99c7b0c89b5916d21a72e50af2dae2a1f165afe1 100644
--- a/web/core/modules/field/tests/src/Unit/FieldConfigEntityUnitTest.php
+++ b/web/core/modules/field/tests/src/Unit/FieldConfigEntityUnitTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\field\Unit\FieldConfigEntityUnitTest.
- */
-
 namespace Drupal\Tests\field\Unit;
 
 use Drupal\Core\Entity\EntityType;
diff --git a/web/core/modules/field/tests/src/Unit/FieldStorageConfigEntityUnitTest.php b/web/core/modules/field/tests/src/Unit/FieldStorageConfigEntityUnitTest.php
index f750e4c62f5beb6c454c9ae445014ce4e32cedc3..f510bf7b08f5a2fcd9ce6b7d159291bb14e6ecd8 100644
--- a/web/core/modules/field/tests/src/Unit/FieldStorageConfigEntityUnitTest.php
+++ b/web/core/modules/field/tests/src/Unit/FieldStorageConfigEntityUnitTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\field\Unit\FieldStorageConfigEntityUnitTest.
- */
-
 namespace Drupal\Tests\field\Unit;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
diff --git a/web/core/modules/field_ui/tests/src/FunctionalJavascript/ManageDisplayTest.php b/web/core/modules/field_ui/tests/src/FunctionalJavascript/ManageDisplayTest.php
index 59e70d11d5eba21cd18f7401b7fdb83d544a1d4a..d87e78d06fbaa884ecc236ce3361f239dca64356 100644
--- a/web/core/modules/field_ui/tests/src/FunctionalJavascript/ManageDisplayTest.php
+++ b/web/core/modules/field_ui/tests/src/FunctionalJavascript/ManageDisplayTest.php
@@ -204,7 +204,7 @@ public function testFormatterUI() {
     $field_test_format_type->setValue('field_empty_setting');
     $assert_session->assertWaitOnAjaxRequest();
     $assert_session->responseNotContains('Default empty setting now has a value.');
-    $this->assertTrue($field_test_settings->isVisible(), TRUE);
+    $this->assertTrue($field_test_settings->isVisible());
 
     // Set the empty_setting option to a non-empty value again and validate
     // the formatting summary now display's this correctly.
@@ -237,7 +237,7 @@ public function testFormatterUI() {
 
     // Ensure the button is still there after the module has been disabled.
     $this->drupalGet($manage_display);
-    $this->assertTrue($field_test_settings->isVisible(), TRUE);
+    $this->assertTrue($field_test_settings->isVisible());
 
     // Ensure that third-party form elements are not present anymore.
     $field_test_settings->click();
diff --git a/web/core/modules/file/src/Plugin/Field/FieldWidget/FileWidget.php b/web/core/modules/file/src/Plugin/Field/FieldWidget/FileWidget.php
index e5a48e65751e49f06b6e02b965982a25ca2dbf1a..c97a4d20b389cf051a8981cf9d71103d50c46625 100644
--- a/web/core/modules/file/src/Plugin/Field/FieldWidget/FileWidget.php
+++ b/web/core/modules/file/src/Plugin/Field/FieldWidget/FileWidget.php
@@ -318,10 +318,18 @@ public function extractFormValues(FieldItemListInterface $items, array $form, Fo
    */
   public static function value($element, $input, FormStateInterface $form_state) {
     if ($input) {
-      // Checkboxes lose their value when empty.
-      // If the display field is present make sure its unchecked value is saved.
       if (empty($input['display'])) {
-        $input['display'] = $element['#display_field'] ? 0 : 1;
+        // Updates the display field with the default value because
+        // #display_field is invisible.
+        if (empty($input['fids'])) {
+          $input['display'] = $element['#display_default'];
+        }
+        // Checkboxes lose their value when empty.
+        // If the display field is present, make sure its unchecked value is
+        // saved.
+        else {
+          $input['display'] = $element['#display_field'] ? 0 : 1;
+        }
       }
     }
 
diff --git a/web/core/modules/file/tests/src/Functional/FileFieldCreationTrait.php b/web/core/modules/file/tests/src/Functional/FileFieldCreationTrait.php
index 905cf6c325c8a3e28fc82d98b5cde4c7fb2f944a..7f31eba6d65837d99c4afae4fb1f16cba0e59d17 100644
--- a/web/core/modules/file/tests/src/Functional/FileFieldCreationTrait.php
+++ b/web/core/modules/file/tests/src/Functional/FileFieldCreationTrait.php
@@ -14,7 +14,8 @@ trait FileFieldCreationTrait {
    * Creates a new file field.
    *
    * @param string $name
-   *   The name of the new field (all lowercase), exclude the "field_" prefix.
+   *   The name of the new field (all lowercase). The Field UI 'field_' prefix
+   *   is not added to the field name.
    * @param string $entity_type
    *   The entity type.
    * @param string $bundle
@@ -47,7 +48,8 @@ public function createFileField($name, $entity_type, $bundle, $storage_settings
    * Attaches a file field to an entity.
    *
    * @param string $name
-   *   The name of the new field (all lowercase), exclude the "field_" prefix.
+   *   The name of the new field (all lowercase). The Field UI 'field_' prefix
+   *   is not added to the field name.
    * @param string $entity_type
    *   The entity type this field will be added to.
    * @param string $bundle
diff --git a/web/core/modules/file/tests/src/FunctionalJavascript/FileFieldWidgetClaroThemeTest.php b/web/core/modules/file/tests/src/FunctionalJavascript/FileFieldWidgetClaroThemeTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..69bbaf3bf1ede574fec450036d6e6b2ba3f20ae0
--- /dev/null
+++ b/web/core/modules/file/tests/src/FunctionalJavascript/FileFieldWidgetClaroThemeTest.php
@@ -0,0 +1,104 @@
+<?php
+
+namespace Drupal\Tests\file\FunctionalJavascript;
+
+use Drupal\Core\Url;
+
+/**
+ * Tests the widget visibility settings for the Claro theme.
+ *
+ * The widget is intentionally tested with Claro as the default theme to test
+ * the changes added in _claro_preprocess_file_and_image_widget().
+ *
+ * @see _claro_preprocess_file_and_image_widget()
+ *
+ * @group file
+ */
+class FileFieldWidgetClaroThemeTest extends FileFieldWidgetTest {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'claro';
+
+  /**
+   * Tests that the field widget visibility settings are respected on the form.
+   */
+  public function testWidgetDefaultVisibilitySettings(): void {
+    // Set up an article node with all field storage settings set to TRUE.
+    $type_name = 'article';
+    $field_name = 'test_file_field_1';
+    $field_storage_settings = [
+      'display_field' => TRUE,
+      'display_default' => TRUE,
+    ];
+    $field_settings = [];
+    $widget_settings = [];
+    $field_storage = $this->createFileField($field_name, 'node', $type_name, $field_storage_settings, $field_settings, $widget_settings);
+
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    $test_file = current($this->getTestFiles('text'));
+    $test_file_path = \Drupal::service('file_system')->realpath($test_file->uri);
+
+    // Fill out the form accordingly.
+    $this->drupalGet("node/add/$type_name");
+    $title = 'Fake Article Name 01';
+    $page->findField('title[0][value]')->setValue($title);
+    $page->attachFileToField('files[' . $field_name . '_0]', $test_file_path);
+    $remove_button = $assert_session->waitForElementVisible('css', '[name="' . $field_name . '_0_remove_button"]');
+    $this->assertNotNull($remove_button);
+    $type = $assert_session->fieldExists("{$field_name}[0][display]")->getAttribute('type');
+    $this->assertEquals($type, 'checkbox');
+    $assert_session->checkboxChecked("{$field_name}[0][display]");
+
+    // Now, submit the same form and ensure that value is retained.
+    $this->submitForm([], 'Save');
+    $node = $this->drupalGetNodeByTitle($title, TRUE);
+    $this->assertEquals(1, $node->get($field_name)->getValue()[0]['display'], 'The checkbox is enabled.');
+    $this->drupalGet(Url::fromRoute('entity.node.edit_form', ['node' => $node->id()]));
+    $assert_session->checkboxChecked("{$field_name}[0][display]");
+
+    // Submit the form again with the disabled value of the checkbox.
+    $this->submitForm([
+      "{$field_name}[0][display]" => FALSE,
+    ], 'Save');
+    $node = $this->drupalGetNodeByTitle($title, TRUE);
+    $this->assertEquals(0, $node->get($field_name)->getValue()[0]['display'], 'The checkbox is disabled.');
+    $this->drupalGet(Url::fromRoute('entity.node.edit_form', ['node' => $node->id()]));
+    $assert_session->checkboxNotChecked("{$field_name}[0][display]");
+
+    // Disable the field settings and ensure that the form is updated.
+    $field_storage->setSetting('display_default', FALSE);
+    $field_storage->save();
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+    $this->drupalGet("node/add/$type_name");
+    $title = 'Fake Article Name 02';
+    $page->findField('title[0][value]')->setValue($title);
+    $page->attachFileToField('files[' . $field_name . '_0]', $test_file_path);
+    $remove_button = $assert_session->waitForElementVisible('css', '[name="' . $field_name . '_0_remove_button"]');
+    $this->assertNotNull($remove_button);
+    $type = $assert_session->fieldExists("{$field_name}[0][display]")->getAttribute('type');
+    $this->assertEquals($type, 'checkbox');
+    $assert_session->checkboxNotChecked("{$field_name}[0][display]");
+
+    // Submit the same form and ensure that value is retained.
+    $this->submitForm([], 'Save');
+    $node = $this->drupalGetNodeByTitle($title, TRUE);
+    $this->assertEquals(0, $node->get($field_name)->getValue()[0]['display'], 'The checkbox is disabled.');
+    $this->drupalGet(Url::fromRoute('entity.node.edit_form', ['node' => $node->id()]));
+    $assert_session->checkboxNotChecked("{$field_name}[0][display]");
+
+    // Check the checkbox and ensure that it is submitted properly.
+    $this->submitForm([
+      "{$field_name}[0][display]" => TRUE,
+    ], 'Save');
+    $node = $this->drupalGetNodeByTitle($title, TRUE);
+    $this->assertEquals(1, $node->get($field_name)->getValue()[0]['display'], 'The checkbox is disabled because display_default option is marked as false.');
+    $this->drupalGet(Url::fromRoute('entity.node.edit_form', ['node' => $node->id()]));
+    $assert_session->checkboxChecked("{$field_name}[0][display]");
+  }
+
+}
diff --git a/web/core/modules/file/tests/src/FunctionalJavascript/FileFieldWidgetTest.php b/web/core/modules/file/tests/src/FunctionalJavascript/FileFieldWidgetTest.php
index cc4a03cee099c44df7965447f8074843e4bd0361..9f3a8d87ad52dd878b4a038bf18b18c9274f3bdd 100644
--- a/web/core/modules/file/tests/src/FunctionalJavascript/FileFieldWidgetTest.php
+++ b/web/core/modules/file/tests/src/FunctionalJavascript/FileFieldWidgetTest.php
@@ -2,7 +2,6 @@
 
 namespace Drupal\Tests\file\FunctionalJavascript;
 
-use Drupal\Component\Render\FormattableMarkup;
 use Drupal\file\Entity\File;
 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
 use Drupal\Tests\field_ui\Traits\FieldUiTestTrait;
@@ -100,7 +99,7 @@ public function testMultiValuedWidget() {
         // Ensure we have the expected number of Remove buttons, and that they
         // are numbered sequentially.
         $buttons = $this->xpath('//input[@type="submit" and @value="Remove"]');
-        $this->assertCount($num_expected_remove_buttons, $buttons, new FormattableMarkup('There are %n "Remove" buttons displayed.', ['%n' => $num_expected_remove_buttons]));
+        $this->assertCount($num_expected_remove_buttons, $buttons, 'There are ' . $num_expected_remove_buttons . ' "Remove" buttons displayed.');
         foreach ($buttons as $i => $button) {
           $key = $i >= $remaining ? $i - $remaining : $i;
           $check_field_name = $field_name2;
diff --git a/web/core/modules/file/tests/src/FunctionalJavascript/MaximumFileSizeExceededUploadTest.php b/web/core/modules/file/tests/src/FunctionalJavascript/MaximumFileSizeExceededUploadTest.php
index ca30daefbd32e1c5a0608d3192c4b8543de232e9..323fdd18e42832db0449e8266b5c2a214b367fc3 100644
--- a/web/core/modules/file/tests/src/FunctionalJavascript/MaximumFileSizeExceededUploadTest.php
+++ b/web/core/modules/file/tests/src/FunctionalJavascript/MaximumFileSizeExceededUploadTest.php
@@ -99,11 +99,11 @@ public function testUploadFileExceedingMaximumFileSize() {
     $session = $this->getSession();
 
     // Create a test file that exceeds the maximum POST size with 1 kilobyte.
-    $post_max_size = Bytes::toNumber(ini_get('post_max_size'));
+    $post_max_size = (int) Bytes::toNumber(ini_get('post_max_size'));
     $invalid_file = 'public://exceeding_post_max_size.bin';
     $file = fopen($invalid_file, 'wb');
     fseek($file, $post_max_size + 1024);
-    fwrite($file, 0x0);
+    fwrite($file, '0');
     fclose($file);
 
     // Go to the node creation form and try to upload the test file.
diff --git a/web/core/modules/filter/tests/src/Kernel/FilterKernelTest.php b/web/core/modules/filter/tests/src/Kernel/FilterKernelTest.php
index 0fa0d28854600294e6bc08fc02da1642a4f21d64..2460e186a2137d0fe9a29cae61a19a4c6e5c69e7 100644
--- a/web/core/modules/filter/tests/src/Kernel/FilterKernelTest.php
+++ b/web/core/modules/filter/tests/src/Kernel/FilterKernelTest.php
@@ -391,7 +391,7 @@ public function testLineBreakFilter() {
     $this->assertFilteredString($filter, $tests);
 
     // Very long string hitting PCRE limits.
-    $limit = max(ini_get('pcre.backtrack_limit'), ini_get('pcre.recursion_limit'));
+    $limit = max((int) ini_get('pcre.backtrack_limit'), (int) ini_get('pcre.recursion_limit'));
     $source = $this->randomMachineName($limit);
     $result = _filter_autop($source);
     $this->assertEquals($result, '<p>' . $source . "</p>\n", 'Line break filter can process very long strings.');
diff --git a/web/core/modules/image/tests/src/Kernel/ImageFieldCreationTrait.php b/web/core/modules/image/tests/src/Kernel/ImageFieldCreationTrait.php
index a528dfe47cc045ef37dbdf630c139a46fe9cf689..8f7c91a8940fa92d6ed91048bef8c72cc9e273a2 100644
--- a/web/core/modules/image/tests/src/Kernel/ImageFieldCreationTrait.php
+++ b/web/core/modules/image/tests/src/Kernel/ImageFieldCreationTrait.php
@@ -14,7 +14,8 @@ trait ImageFieldCreationTrait {
    * Create a new image field.
    *
    * @param string $name
-   *   The name of the new field (all lowercase), exclude the "field_" prefix.
+   *   The name of the new field (all lowercase). The Field UI 'field_' prefix
+   *   is not added to the field name.
    * @param string $type_name
    *   The node type that this field will be added to.
    * @param array $storage_settings
diff --git a/web/core/modules/media/src/MediaSourceEntityConstraintsInterface.php b/web/core/modules/media/src/MediaSourceEntityConstraintsInterface.php
index 29c6e92b37e62c73dcabb512bb1fd3e8232212e2..2d860e19d09d9cf10b4c0d4d6797bc9ef556fc3a 100644
--- a/web/core/modules/media/src/MediaSourceEntityConstraintsInterface.php
+++ b/web/core/modules/media/src/MediaSourceEntityConstraintsInterface.php
@@ -20,7 +20,8 @@ interface MediaSourceEntityConstraintsInterface extends MediaSourceInterface {
    * Gets media source-specific validation constraints for a media item.
    *
    * @return \Symfony\Component\Validator\Constraint[]
-   *   An array of validation constraint definitions, keyed by constraint name.
+   *   An array of validation constraint definitions, keyed by plugin IDs. The
+   *   corresponding values are options for each validation plugin.
    *   Each constraint definition can be used for instantiating
    *   \Symfony\Component\Validator\Constraint objects.
    */
diff --git a/web/core/modules/media/src/MediaSourceFieldConstraintsInterface.php b/web/core/modules/media/src/MediaSourceFieldConstraintsInterface.php
index b6b535f2fceea35891eff22f3fe32f26ca6fc74f..cbbed25834186f2a42365d8bb1908435a8b4da13 100644
--- a/web/core/modules/media/src/MediaSourceFieldConstraintsInterface.php
+++ b/web/core/modules/media/src/MediaSourceFieldConstraintsInterface.php
@@ -20,7 +20,8 @@ interface MediaSourceFieldConstraintsInterface extends MediaSourceInterface {
    * Gets media source-specific validation constraints for a source field.
    *
    * @return \Symfony\Component\Validator\Constraint[]
-   *   An array of validation constraint definitions, keyed by constraint name.
+   *   An array of validation constraint definitions, keyed by plugin IDs. The
+   *   corresponding values are options for each validation plugin.
    *   Each constraint definition can be used for instantiating
    *   \Symfony\Component\Validator\Constraint objects.
    */
diff --git a/web/core/modules/media/tests/fixtures/oembed/providers.json b/web/core/modules/media/tests/fixtures/oembed/providers.json
index 9791d7378dc5b3f0559ecb03ef001df3560135d7..9988ac1f1aad51df6acf88480af18143ff89bbe0 100644
--- a/web/core/modules/media/tests/fixtures/oembed/providers.json
+++ b/web/core/modules/media/tests/fixtures/oembed/providers.json
@@ -27,19 +27,18 @@
           "https:\/\/*.twitter.com\/*\/status\/*"
         ],
         "url": "https:\/\/publish.twitter.com\/oembed"
-
       }
     ]
   },
   {
-    "provider_name": "CollegeHumor",
-    "provider_url": "http:\/\/www.collegehumor.com\/",
+    "provider_name": "Dailymotion",
+    "provider_url": "https:\/\/www.dailymotion.com\/",
     "endpoints": [
       {
         "schemes": [
-          "http:\/\/www.collegehumor.com\/video\/*"
+          "https:\/\/www.dailymotion.com\/video\/*"
         ],
-        "url": "http:\/\/www.collegehumor.com\/oembed.{format}",
+        "url": "https:\/\/www.dailymotion.com\/services\/oembed",
         "discovery": true
       }
     ]
diff --git a/web/core/modules/media/tests/fixtures/oembed/video_collegehumor.html b/web/core/modules/media/tests/fixtures/oembed/video_collegehumor.html
deleted file mode 100644
index fc2fdfba52469a28ec37e9585ca64e4929e1220e..0000000000000000000000000000000000000000
--- a/web/core/modules/media/tests/fixtures/oembed/video_collegehumor.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-  <link rel="alternate" href="video_collegehumor.xml"
-        type="application/xml+oembed" title="Let&#039;s Not Get a Drink Sometime">
-</head>
-<body></body>
-</html>
diff --git a/web/core/modules/media/tests/fixtures/oembed/video_dailymotion.html b/web/core/modules/media/tests/fixtures/oembed/video_dailymotion.html
new file mode 100644
index 0000000000000000000000000000000000000000..b8ca7fe64c75f76d2cc725045f06e0e1cc6133a0
--- /dev/null
+++ b/web/core/modules/media/tests/fixtures/oembed/video_dailymotion.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<html lang="de">
+<head>
+  <link rel="alternate" href="video_dailymotion.xml"
+        type="application/xml+oembed" title="#d8rules - Support the Rules module for Drupal 8">
+</head>
+<body></body>
+</html>
diff --git a/web/core/modules/media/tests/fixtures/oembed/video_collegehumor.xml b/web/core/modules/media/tests/fixtures/oembed/video_dailymotion.xml
similarity index 63%
rename from web/core/modules/media/tests/fixtures/oembed/video_collegehumor.xml
rename to web/core/modules/media/tests/fixtures/oembed/video_dailymotion.xml
index 0894cafcf97e34f6789f0a6a6f63ddd426146bed..14ce13b88b47e7a264fc647492d301926fa37dcb 100644
--- a/web/core/modules/media/tests/fixtures/oembed/video_collegehumor.xml
+++ b/web/core/modules/media/tests/fixtures/oembed/video_dailymotion.xml
@@ -2,15 +2,15 @@
 <oembed>
   <type>video</type>
   <version>1.0</version>
-  <title>Let's Not Get a Drink Sometime</title>
+  <title>#d8rules - Support the Rules module for Drupal 8</title>
   <https/>
-  <author_name>CollegeHumor</author_name>
-  <author_url>http://www.collegehumor.com</author_url>
-  <provider_name>CollegeHumor</provider_name>
-  <provider_url>http://www.collegehumor.com</provider_url>
+  <author_name>Leepchic</author_name>
+  <author_url>https://www.dailymotion.com/leepchic</author_url>
+  <provider_name>Dailymotion</provider_name>
+  <provider_url>https://www.dailymotion.com</provider_url>
   <width>610</width>
   <height>343</height>
-  <html><h1>By the power of Grayskull, CollegeHumor works!</h1>
+  <html><h1>Dailymotion works!</h1>
   </html>
   <!-- The thumbnail URL does not contain a file extension, so we use
   this to test the oEmbed source plugin's thumbnail handling;
diff --git a/web/core/modules/media/tests/src/Functional/ResourceFetcherTest.php b/web/core/modules/media/tests/src/Functional/ResourceFetcherTest.php
index e1e20ff8d9e3121f4d86c3e10c37f483fc3f733c..b83f7b9fa885b69f14299c36e2dfcf9eff7acfd9 100644
--- a/web/core/modules/media/tests/src/Functional/ResourceFetcherTest.php
+++ b/web/core/modules/media/tests/src/Functional/ResourceFetcherTest.php
@@ -43,9 +43,9 @@ public function providerFetchResource() {
         'Drupal Rap Video - Schipulcon09',
       ],
       'XML resource' => [
-        'video_collegehumor.xml',
-        'CollegeHumor',
-        "Let's Not Get a Drink Sometime",
+        'video_dailymotion.xml',
+        'Dailymotion',
+        "#d8rules - Support the Rules module for Drupal 8",
       ],
     ];
   }
diff --git a/web/core/modules/media/tests/src/Functional/UrlResolverTest.php b/web/core/modules/media/tests/src/Functional/UrlResolverTest.php
index b2e1672b9cc80569b26dfe09ef28054b4f0372b2..cb9ab4e17b5565418d46c97718aebab3deb67f54 100644
--- a/web/core/modules/media/tests/src/Functional/UrlResolverTest.php
+++ b/web/core/modules/media/tests/src/Functional/UrlResolverTest.php
@@ -46,9 +46,9 @@ public function providerEndpointMatching() {
         'https://vimeo.com/14782834',
         'https://vimeo.com/api/oembed.json?url=https://vimeo.com/14782834',
       ],
-      'match by endpoint: CollegeHumor' => [
-        'http://www.collegehumor.com/video/40002870/lets-not-get-a-drink-sometime',
-        'http://www.collegehumor.com/oembed.json?url=http://www.collegehumor.com/video/40002870/lets-not-get-a-drink-sometime',
+      'match by endpoint: Dailymotion' => [
+        'https://www.dailymotion.com/video/x2vzluh',
+        'https://www.dailymotion.com/services/oembed?url=https://www.dailymotion.com/video/x2vzluh',
       ],
       'match by endpoint: Facebook' => [
         'https://www.facebook.com/facebook/videos/10153231379946729/',
@@ -105,13 +105,8 @@ public function providerUrlDiscovery() {
         'https://vimeo.com/api/oembed.json?url=video_vimeo.html',
       ],
       'XML resource' => [
-        'video_collegehumor.html',
-        // The endpoint does not explicitly declare that it supports XML, so
-        // only JSON support is assumed, which is why the discovered URL
-        // contains '.json'. However, the fetched HTML file contains a
-        // relationship to an XML representation of the resource, with the
-        // application/xml+oembed MIME type.
-        'http://www.collegehumor.com/oembed.json?url=video_collegehumor.html',
+        'video_dailymotion.html',
+        'https://www.dailymotion.com/services/oembed?url=video_dailymotion.html',
       ],
     ];
   }
diff --git a/web/core/modules/media/tests/src/FunctionalJavascript/MediaSourceOEmbedVideoTest.php b/web/core/modules/media/tests/src/FunctionalJavascript/MediaSourceOEmbedVideoTest.php
index 62b7500be83356bde64cbbdf49d4a5b221bb3d5b..593920ca3ad61615f7cd13afac3833cd56193757 100644
--- a/web/core/modules/media/tests/src/FunctionalJavascript/MediaSourceOEmbedVideoTest.php
+++ b/web/core/modules/media/tests/src/FunctionalJavascript/MediaSourceOEmbedVideoTest.php
@@ -160,22 +160,22 @@ public function testMediaOEmbedVideoSource() {
 
     // Try to create a media asset from a disallowed provider.
     $this->drupalGet("media/add/$media_type_id");
-    $assert_session->fieldExists('Remote video URL')->setValue('http://www.collegehumor.com/video/40003213/grant-and-katie-are-starting-their-own-company');
+    $assert_session->fieldExists('Remote video URL')->setValue('https://www.dailymotion.com/video/x2vzluh');
     $page->pressButton('Save');
 
-    $assert_session->pageTextContains('The CollegeHumor provider is not allowed.');
+    $assert_session->pageTextContains('The Dailymotion provider is not allowed.');
 
-    // Register a CollegeHumor video as a second oEmbed resource. Note that its
+    // Register a Dailymotion video as a second oEmbed resource. Note that its
     // thumbnail URL does not have a file extension.
     $media_type = MediaType::load($media_type_id);
     $source_configuration = $media_type->getSource()->getConfiguration();
-    $source_configuration['providers'][] = 'CollegeHumor';
+    $source_configuration['providers'][] = 'Dailymotion';
     $media_type->getSource()->setConfiguration($source_configuration);
     $media_type->save();
-    $video_url = 'http://www.collegehumor.com/video/40003213/let-not-get-a-drink-sometime';
-    ResourceController::setResourceUrl($video_url, $this->getFixturesDirectory() . '/video_collegehumor.xml');
+    $video_url = 'https://www.dailymotion.com/video/x2vzluh';
+    ResourceController::setResourceUrl($video_url, $this->getFixturesDirectory() . '/video_dailymotion.xml');
 
-    // Create a new media item using a CollegeHumor video.
+    // Create a new media item using a Dailymotion video.
     $this->drupalGet("media/add/$media_type_id");
     $assert_session->fieldExists('Remote video URL')->setValue($video_url);
     $assert_session->buttonExists('Save')->press();
diff --git a/web/core/modules/menu_ui/tests/src/Functional/MenuUiNodeTest.php b/web/core/modules/menu_ui/tests/src/Functional/MenuUiNodeTest.php
index 08ac7b331d71d7167564914e64712563a902d01a..340b9e45bc8ea89b49d39f3988d4cc438975397a 100644
--- a/web/core/modules/menu_ui/tests/src/Functional/MenuUiNodeTest.php
+++ b/web/core/modules/menu_ui/tests/src/Functional/MenuUiNodeTest.php
@@ -2,7 +2,9 @@
 
 namespace Drupal\Tests\menu_ui\Functional;
 
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\language\Entity\ConfigurableLanguage;
+use Drupal\language\Entity\ContentLanguageSettings;
 use Drupal\menu_link_content\Entity\MenuLinkContent;
 use Drupal\node\Entity\Node;
 use Drupal\Tests\BrowserTestBase;
@@ -294,30 +296,36 @@ public function testMultilingualMenuNodeFormWidget() {
     $config->set('url.prefixes.' . $langcodes[0], $langcodes[0]);
     $config->save();
 
-    $this->rebuildContainer();
-
     $languages = [];
     foreach ($langcodes as $langcode) {
       $languages[$langcode] = ConfigurableLanguage::load($langcode);
     }
 
-    // Use a UI form submission to make the node type and menu link content entity translatable.
-    $this->drupalLogout();
-    $this->drupalLogin($this->rootUser);
-    $edit = [
-      'entity_types[node]' => TRUE,
-      'entity_types[menu_link_content]' => TRUE,
-      'settings[node][page][settings][language][language_alterable]' => TRUE,
-      'settings[node][page][translatable]' => TRUE,
-      'settings[node][page][fields][title]' => TRUE,
-      'settings[menu_link_content][menu_link_content][translatable]' => TRUE,
-    ];
-    $this->drupalGet('admin/config/regional/content-language');
-    $this->submitForm($edit, 'Save configuration');
+    // Enable translation for page.
+    $config = ContentLanguageSettings::loadByEntityTypeBundle('node', 'page');
+    $config->setDefaultLangcode(LanguageInterface::LANGCODE_SITE_DEFAULT);
+    $config->setLanguageAlterable(TRUE);
+    $config->save();
 
-    // Log out and back in as normal user.
-    $this->drupalLogout();
-    $this->drupalLogin($this->editor);
+    $content_translation_manager = $this->container->get('content_translation.manager');
+    $content_translation_manager->setEnabled('node', 'page', TRUE);
+    $content_translation_manager->setBundleTranslationSettings('node', 'page', [
+      'untranslatable_fields_hide' => FALSE,
+    ]);
+
+    // Enable translation for menu_link_content.
+    $config = ContentLanguageSettings::loadByEntityTypeBundle('menu_link_content', 'menu_link_content');
+    $config->setDefaultLangcode(LanguageInterface::LANGCODE_SITE_DEFAULT);
+    $config->setLanguageAlterable(TRUE);
+    $config->save();
+
+    $content_translation_manager = $this->container->get('content_translation.manager');
+    $content_translation_manager->setEnabled('menu_link_content', 'menu_link_content', TRUE);
+    $content_translation_manager->setBundleTranslationSettings('menu_link_content', 'menu_link_content', [
+      'untranslatable_fields_hide' => FALSE,
+    ]);
+
+    $this->rebuildContainer();
 
     // Create a node.
     $node_title = $this->randomMachineName(8);
diff --git a/web/core/modules/migrate/src/Plugin/MigrationPluginManager.php b/web/core/modules/migrate/src/Plugin/MigrationPluginManager.php
index df1915372242c9ee0807cfa1a7e1d15c8f94d336..5f05d6dd4af02b5c081df006ddc434933920aff7 100644
--- a/web/core/modules/migrate/src/Plugin/MigrationPluginManager.php
+++ b/web/core/modules/migrate/src/Plugin/MigrationPluginManager.php
@@ -145,7 +145,7 @@ public function expandPluginIds(array $migration_ids) {
     $plugin_ids = [];
     $all_ids = array_keys($this->getDefinitions());
     foreach ($migration_ids as $id) {
-      $plugin_ids += preg_grep('/^' . preg_quote($id, '/') . PluginBase::DERIVATIVE_SEPARATOR . '/', $all_ids);
+      $plugin_ids = array_merge($plugin_ids, preg_grep('/^' . preg_quote($id, '/') . PluginBase::DERIVATIVE_SEPARATOR . '/', $all_ids));
       if ($this->hasDefinition($id)) {
         $plugin_ids[] = $id;
       }
diff --git a/web/core/modules/migrate/tests/src/Kernel/MigrateTestBase.php b/web/core/modules/migrate/tests/src/Kernel/MigrateTestBase.php
index efd707aa0ac5f00d90d7e91bab00e0179c71264e..4b7d569a8d938ae6b042ac126246360e7115df67 100644
--- a/web/core/modules/migrate/tests/src/Kernel/MigrateTestBase.php
+++ b/web/core/modules/migrate/tests/src/Kernel/MigrateTestBase.php
@@ -186,12 +186,8 @@ protected function executeMigration($migration) {
    */
   protected function executeMigrations(array $ids) {
     $manager = $this->container->get('plugin.manager.migration');
-    array_walk($ids, function ($id) use ($manager) {
-      // This is possibly a base plugin ID and we want to run all derivatives.
-      $instances = $manager->createInstances($id);
-      $this->assertNotEmpty($instances, sprintf("No migrations created for id '%s'.", $id));
-      array_walk($instances, [$this, 'executeMigration']);
-    });
+    $instances = $manager->createInstances($ids);
+    array_walk($instances, [$this, 'executeMigration']);
   }
 
   /**
diff --git a/web/core/modules/migrate/tests/src/Kernel/SqlBaseTest.php b/web/core/modules/migrate/tests/src/Kernel/SqlBaseTest.php
index 105d2c1cb98af5689e15927bb435a41402747852..87dd77ba918b8838991c154600754e4dd168c18d 100644
--- a/web/core/modules/migrate/tests/src/Kernel/SqlBaseTest.php
+++ b/web/core/modules/migrate/tests/src/Kernel/SqlBaseTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\migrate\Kernel\SqlBaseTest.
- */
-
 namespace Drupal\Tests\migrate\Kernel;
 
 use Drupal\Core\Database\Query\ConditionInterface;
diff --git a/web/core/modules/migrate/tests/src/Unit/MigrateSourceTest.php b/web/core/modules/migrate/tests/src/Unit/MigrateSourceTest.php
index 9042419f86c5ec3161d0ecbf775e84c654781022..833a6f7e9ed5916960e0ff59d50fddf792849d18 100644
--- a/web/core/modules/migrate/tests/src/Unit/MigrateSourceTest.php
+++ b/web/core/modules/migrate/tests/src/Unit/MigrateSourceTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\migrate\Unit\MigrateSourceTest.
- */
-
 namespace Drupal\Tests\migrate\Unit;
 
 use Drupal\Core\Cache\CacheBackendInterface;
diff --git a/web/core/modules/migrate/tests/src/Unit/MigrationPluginManagerTest.php b/web/core/modules/migrate/tests/src/Unit/MigrationPluginManagerTest.php
index 1744878220337bdc359e55c731f68e9e510e4d18..0982d783336fd33451a0bb0d97b604dc6ecef2c3 100644
--- a/web/core/modules/migrate/tests/src/Unit/MigrationPluginManagerTest.php
+++ b/web/core/modules/migrate/tests/src/Unit/MigrationPluginManagerTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\migrate\Unit;
 
+use Drupal\Core\Cache\CacheBackendInterface;
 use Drupal\migrate\Plugin\Migration;
 use Drupal\migrate\Plugin\MigrationPluginManager;
 use Drupal\Tests\UnitTestCase;
@@ -65,6 +66,25 @@ public function testDependencyBuilding($migrations_data, $result_ids) {
     }
   }
 
+  /**
+   * Tests that expandPluginIds returns all derivatives.
+   */
+  public function testExpandPluginIds() {
+    $backend = $this->prophesize(CacheBackendInterface::class);
+    $cache = new \stdClass();
+    $cache->data = [
+      'a:a' => ['provider' => 'core'],
+      'a:b' => ['provider' => 'core'],
+      'b' => ['provider' => 'core'],
+    ];
+    $backend->get('migration_plugins')->willReturn($cache);
+    $this->pluginManager->setCacheBackend($backend->reveal(), 'migration_plugins');
+    $plugin_ids = $this->pluginManager->expandPluginIds(['b', 'a']);
+    $this->assertContains('a:a', $plugin_ids);
+    $this->assertContains('a:b', $plugin_ids);
+    $this->assertContains('b', $plugin_ids);
+  }
+
   /**
    * Provide dependency data for testing.
    */
diff --git a/web/core/modules/migrate/tests/src/Unit/MigrationTest.php b/web/core/modules/migrate/tests/src/Unit/MigrationTest.php
index cd4378520a60f5e3686cc4c82274d1abdab819f5..5bf5d79e5aa3141b243e84acdbba35921e8a2c92 100644
--- a/web/core/modules/migrate/tests/src/Unit/MigrationTest.php
+++ b/web/core/modules/migrate/tests/src/Unit/MigrationTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\migrate\Unit\MigrationTest.
- */
-
 namespace Drupal\Tests\migrate\Unit;
 
 use Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException;
diff --git a/web/core/modules/migrate/tests/src/Unit/Plugin/migrate/destination/EntityContentBaseTest.php b/web/core/modules/migrate/tests/src/Unit/Plugin/migrate/destination/EntityContentBaseTest.php
index 3319b71a19d23909bea285f375fc21990321022f..592391abf3e75817a0731c631a6c8a019e5bfb56 100644
--- a/web/core/modules/migrate/tests/src/Unit/Plugin/migrate/destination/EntityContentBaseTest.php
+++ b/web/core/modules/migrate/tests/src/Unit/Plugin/migrate/destination/EntityContentBaseTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\migrate\Unit\Plugin\migrate\destination\EntityContentBaseTest.
- */
-
 namespace Drupal\Tests\migrate\Unit\Plugin\migrate\destination;
 
 use Drupal\Core\Entity\ContentEntityInterface;
diff --git a/web/core/modules/migrate/tests/src/Unit/Plugin/migrate/destination/EntityTestBase.php b/web/core/modules/migrate/tests/src/Unit/Plugin/migrate/destination/EntityTestBase.php
index 4a5ff3d8a1e207a2f71c107a0d8093fba6f9d325..e88ac677fb32d86abe810afeccea981d629459a7 100644
--- a/web/core/modules/migrate/tests/src/Unit/Plugin/migrate/destination/EntityTestBase.php
+++ b/web/core/modules/migrate/tests/src/Unit/Plugin/migrate/destination/EntityTestBase.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\migrate\Unit\Plugin\migrate\destination\EntityTestBase.
- */
-
 namespace Drupal\Tests\migrate\Unit\Plugin\migrate\destination;
 
 use Drupal\Core\Entity\EntityFieldManagerInterface;
diff --git a/web/core/modules/migrate/tests/src/Unit/SqlBaseTest.php b/web/core/modules/migrate/tests/src/Unit/SqlBaseTest.php
index 749d9937f04b54dbd89405f10affd47d1018268e..3ad88c6296c4f665da9a973890879029ea0db98d 100644
--- a/web/core/modules/migrate/tests/src/Unit/SqlBaseTest.php
+++ b/web/core/modules/migrate/tests/src/Unit/SqlBaseTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\migrate\Unit\SqlBaseTest.
- */
-
 namespace Drupal\Tests\migrate\Unit;
 
 use Drupal\migrate\Plugin\MigrationInterface;
diff --git a/web/core/modules/migrate/tests/src/Unit/destination/EntityRevisionTest.php b/web/core/modules/migrate/tests/src/Unit/destination/EntityRevisionTest.php
index 374db8a94613cdef3e1f9d75a066c48edd03e2c7..4e25817d3e147f84172a8f445fc220c8ba6d8e86 100644
--- a/web/core/modules/migrate/tests/src/Unit/destination/EntityRevisionTest.php
+++ b/web/core/modules/migrate/tests/src/Unit/destination/EntityRevisionTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\migrate\Unit\destination\EntityRevisionTest.
- */
-
 namespace Drupal\Tests\migrate\Unit\destination;
 
 use Drupal\Core\Entity\ContentEntityInterface;
diff --git a/web/core/modules/migrate/tests/src/Unit/destination/PerComponentEntityDisplayTest.php b/web/core/modules/migrate/tests/src/Unit/destination/PerComponentEntityDisplayTest.php
index 83290a9d65e222f1bbed207972775a09326839ca..4a401bc3434f5fe4864dfa9807d432d8768e501c 100644
--- a/web/core/modules/migrate/tests/src/Unit/destination/PerComponentEntityDisplayTest.php
+++ b/web/core/modules/migrate/tests/src/Unit/destination/PerComponentEntityDisplayTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\migrate\Unit\destination\PerComponentEntityDisplayTest.
- */
-
 namespace Drupal\Tests\migrate\Unit\destination;
 
 use Drupal\migrate\Plugin\migrate\destination\ComponentEntityDisplayBase;
diff --git a/web/core/modules/migrate/tests/src/Unit/destination/PerComponentEntityFormDisplayTest.php b/web/core/modules/migrate/tests/src/Unit/destination/PerComponentEntityFormDisplayTest.php
index eb0996fc0c8e11244e70032b59d3fdb65f016e71..ceea7010bac27e6da4025e1611a4750890787afd 100644
--- a/web/core/modules/migrate/tests/src/Unit/destination/PerComponentEntityFormDisplayTest.php
+++ b/web/core/modules/migrate/tests/src/Unit/destination/PerComponentEntityFormDisplayTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\migrate\Unit\destination\PerComponentEntityFormDisplayTest.
- */
-
 namespace Drupal\Tests\migrate\Unit\destination;
 
 use Drupal\migrate\Plugin\migrate\destination\PerComponentEntityFormDisplay;
diff --git a/web/core/modules/migrate/tests/src/Unit/process/ConcatTest.php b/web/core/modules/migrate/tests/src/Unit/process/ConcatTest.php
index d504bc7285a767c3eab9f36bedf6285eedc74289..d45ff4bab9c4b98aea1cdfde851be0dae037ff12 100644
--- a/web/core/modules/migrate/tests/src/Unit/process/ConcatTest.php
+++ b/web/core/modules/migrate/tests/src/Unit/process/ConcatTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\migrate\Unit\process\ConcatTest.
- */
-
 namespace Drupal\Tests\migrate\Unit\process;
 
 use Drupal\migrate\MigrateException;
diff --git a/web/core/modules/migrate_drupal/tests/src/Unit/MigrationStateUnitTest.php b/web/core/modules/migrate_drupal/tests/src/Unit/MigrationStateUnitTest.php
index ea4b54356ea665bc835426235bb22d15233f3d4b..1dd8f926960f2a97dc7e6141f4066cd0729a8b3e 100644
--- a/web/core/modules/migrate_drupal/tests/src/Unit/MigrationStateUnitTest.php
+++ b/web/core/modules/migrate_drupal/tests/src/Unit/MigrationStateUnitTest.php
@@ -48,7 +48,7 @@ public function testGetUpgradeStates($modules_to_enable, $files, $field_plugins,
 
     foreach ($files as $module => $contents) {
       $path = $url . '/' . $module . '/migrations/state';
-      mkdir($path, '0755', TRUE);
+      mkdir($path, 0755, TRUE);
       file_put_contents($path . '/' . $module . '.migrate_drupal.yml', $contents);
     }
     $moduleHandler->getModuleDirectories()
diff --git a/web/core/modules/migrate_drupal/tests/src/Unit/source/d6/Drupal6SqlBaseTest.php b/web/core/modules/migrate_drupal/tests/src/Unit/source/d6/Drupal6SqlBaseTest.php
index bc27bb0fc5b0ff636fffd2e4e4bb6bef3f5fa570..470af2de0680f66dfa99d2cb2cb818aba31d4fce 100644
--- a/web/core/modules/migrate_drupal/tests/src/Unit/source/d6/Drupal6SqlBaseTest.php
+++ b/web/core/modules/migrate_drupal/tests/src/Unit/source/d6/Drupal6SqlBaseTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\migrate_drupal\Unit\source\d6\Drupal6SqlBaseTest.
- */
-
 namespace Drupal\Tests\migrate_drupal\Unit\source\d6;
 
 use Drupal\Tests\migrate\Unit\MigrateTestCase;
diff --git a/web/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTest.php b/web/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTest.php
index 3947f11ef82ebda263b910f16f16bf09b1294480..8245e832a6268671b2d98cf230fa813355c8f538 100644
--- a/web/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTest.php
+++ b/web/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTest.php
@@ -60,8 +60,8 @@ protected function setUp(): void {
       'd7_language_content_settings',
       'd7_comment_field',
       'd7_comment_field_instance',
-      'd7_node',
       'd7_node_translation',
+      'd7_node',
       'd7_entity_translation_settings',
       'd7_taxonomy_term_entity_translation',
       'd7_node_entity_translation',
diff --git a/web/core/modules/path/tests/src/Functional/PathContentModerationTest.php b/web/core/modules/path/tests/src/Functional/PathContentModerationTest.php
index 44577276946ea35d511ff2a8c0e227a1b7edeece..af792531872d3b960bae3fe72b351d62426b2690 100644
--- a/web/core/modules/path/tests/src/Functional/PathContentModerationTest.php
+++ b/web/core/modules/path/tests/src/Functional/PathContentModerationTest.php
@@ -2,7 +2,9 @@
 
 namespace Drupal\Tests\path\Functional;
 
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\language\Entity\ConfigurableLanguage;
+use Drupal\language\Entity\ContentLanguageSettings;
 use Drupal\Tests\BrowserTestBase;
 use Drupal\Tests\content_moderation\Traits\ContentModerationTestTrait;
 
@@ -59,17 +61,17 @@ protected function setUp(): void {
     $this->drupalGet('admin/config/regional/language/detection');
     $this->submitForm($edit, 'Save settings');
 
-    // Enable translation for moderated node.
-    $edit = [
-      'entity_types[node]' => 1,
-      'settings[node][moderated][translatable]' => 1,
-      'settings[node][moderated][fields][path]' => 1,
-      'settings[node][moderated][fields][body]' => 1,
-      'settings[node][moderated][settings][language][language_alterable]' => 1,
-    ];
-    $this->drupalGet('admin/config/regional/content-language');
-    $this->submitForm($edit, 'Save configuration');
-    \Drupal::entityTypeManager()->clearCachedDefinitions();
+    // Enable translation for page.
+    $config = ContentLanguageSettings::loadByEntityTypeBundle('node', 'moderated');
+    $config->setDefaultLangcode(LanguageInterface::LANGCODE_SITE_DEFAULT);
+    $config->setLanguageAlterable(TRUE);
+    $config->save();
+
+    $content_translation_manager = $this->container->get('content_translation.manager');
+    $content_translation_manager->setEnabled('node', 'moderated', TRUE);
+    $content_translation_manager->setBundleTranslationSettings('node', 'moderated', [
+      'untranslatable_fields_hide' => FALSE,
+    ]);
   }
 
   /**
diff --git a/web/core/modules/phpass/tests/src/Unit/PasswordVerifyTest.php b/web/core/modules/phpass/tests/src/Unit/PasswordVerifyTest.php
index f080bd2396deff3b6516a04f6bdb86d703218ddc..c130029ee185887b15b0d5e21683fd3c9f9fb985 100644
--- a/web/core/modules/phpass/tests/src/Unit/PasswordVerifyTest.php
+++ b/web/core/modules/phpass/tests/src/Unit/PasswordVerifyTest.php
@@ -149,7 +149,7 @@ public function providerLongPasswords() {
 
     // Check a string of 3-byte UTF-8 characters, 510 byte long password is
     // allowed.
-    $len = floor(PasswordInterface::PASSWORD_MAX_LENGTH / 3);
+    $len = (int) floor(PasswordInterface::PASSWORD_MAX_LENGTH / 3);
     $diff = PasswordInterface::PASSWORD_MAX_LENGTH % 3;
     $passwords['utf8'] = [str_repeat('€', $len), TRUE];
     // 512 byte long password is allowed.
diff --git a/web/core/modules/search/tests/src/Unit/SearchPageRepositoryTest.php b/web/core/modules/search/tests/src/Unit/SearchPageRepositoryTest.php
index 0781e2989529c852f57e918de6fd78b1e5be106c..d551495120d572316d167117b967119698e15709 100644
--- a/web/core/modules/search/tests/src/Unit/SearchPageRepositoryTest.php
+++ b/web/core/modules/search/tests/src/Unit/SearchPageRepositoryTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\search\Unit\SearchPageRepositoryTest.
- */
-
 namespace Drupal\Tests\search\Unit;
 
 use Drupal\Core\Entity\EntityTypeInterface;
diff --git a/web/core/modules/serialization/tests/src/Unit/Normalizer/ComplexDataNormalizerTest.php b/web/core/modules/serialization/tests/src/Unit/Normalizer/ComplexDataNormalizerTest.php
index 876dca0a11f5b57670444e08f2b43ad564ad7805..ebf5b65bab75e285d1fb804f4976ce1d887240e4 100644
--- a/web/core/modules/serialization/tests/src/Unit/Normalizer/ComplexDataNormalizerTest.php
+++ b/web/core/modules/serialization/tests/src/Unit/Normalizer/ComplexDataNormalizerTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\serialization\Unit\Normalizer\ComplexDataNormalizerTest.
- */
-
 namespace Drupal\Tests\serialization\Unit\Normalizer;
 
 use Drupal\Core\TypedData\ComplexDataInterface;
diff --git a/web/core/modules/serialization/tests/src/Unit/Normalizer/NormalizerBaseTest.php b/web/core/modules/serialization/tests/src/Unit/Normalizer/NormalizerBaseTest.php
index 0a568093ba5b9bf8c83307294dce6025779ea7dc..175e26eaa713aa94e51c3894ecb51a9fafcdc303 100644
--- a/web/core/modules/serialization/tests/src/Unit/Normalizer/NormalizerBaseTest.php
+++ b/web/core/modules/serialization/tests/src/Unit/Normalizer/NormalizerBaseTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\serialization\Unit\Normalizer\NormalizerBaseTest.
- */
-
 namespace Drupal\Tests\serialization\Unit\Normalizer;
 
 use Drupal\Tests\UnitTestCase;
diff --git a/web/core/modules/system/system.install b/web/core/modules/system/system.install
index 635f152ea214eb927efe395c3796bb35f1c7cb17..82a2f32d0b81c1bd8fbd12cdbc9baca67f844441 100644
--- a/web/core/modules/system/system.install
+++ b/web/core/modules/system/system.install
@@ -338,7 +338,7 @@ function system_requirements($phase) {
     // errors, so warn about that when running Drupal on those versions.
     // @todo Remove this when \Drupal::MINIMUM_PHP is at least 8.1.6 in
     //   https://www.drupal.org/i/3305726.
-    if (version_compare(\Drupal::MINIMUM_PHP, '8.1.6') < 0) {
+    if (version_compare($phpversion, '8.1.6') < 0) {
       $requirements['php']['description'] = t('PHP %version has <a href=":bug_url">an OPcache bug that can cause fatal errors with class autoloading</a>. This can be fixed by upgrading to PHP 8.1.6 or later. See <a href="http://php.net/supported-versions.php">PHP\'s version support documentation</a> and the <a href=":php_requirements">Drupal PHP requirements</a> page for more information.', [
         '%version' => $phpversion,
         ':bug_url' => 'https://github.com/php/php-src/issues/8164',
diff --git a/web/core/modules/system/tests/src/Functional/System/PhpRequirementTest.php b/web/core/modules/system/tests/src/Functional/System/PhpRequirementTest.php
index 905087ffc24a67287c95cf0ecd177bd6e7e17be8..a8010ecf2cfa8046dc97419850b284ed71171cfe 100644
--- a/web/core/modules/system/tests/src/Functional/System/PhpRequirementTest.php
+++ b/web/core/modules/system/tests/src/Functional/System/PhpRequirementTest.php
@@ -76,7 +76,7 @@ public function testStatusPage() {
       // bug in OPcache.
       // @todo Remove this when \Drupal::MINIMUM_PHP is at least 8.1.6 in
       //   https://www.drupal.org/i/3305726.
-      if (version_compare(\Drupal::MINIMUM_PHP, '8.1.6') < 0) {
+      if (version_compare($phpversion, '8.1.6') < 0) {
         $this->assertSession()->pageTextContains("PHP $phpversion has an OPcache bug that can cause fatal errors with class autoloading. This can be fixed by upgrading to PHP 8.1.6 or later.");
         $this->assertSession()->linkExists('an OPcache bug that can cause fatal errors with class autoloading');
       }
diff --git a/web/core/modules/system/tests/src/FunctionalJavascript/FrameworkTest.php b/web/core/modules/system/tests/src/FunctionalJavascript/FrameworkTest.php
index f6c21f89f04780eda6dbedc03c6bf708f8f10adf..360930cc2e2bc0d11809cc77791c2623c58a5510 100644
--- a/web/core/modules/system/tests/src/FunctionalJavascript/FrameworkTest.php
+++ b/web/core/modules/system/tests/src/FunctionalJavascript/FrameworkTest.php
@@ -2,7 +2,6 @@
 
 namespace Drupal\Tests\system\FunctionalJavascript;
 
-use Drupal\Component\Render\FormattableMarkup;
 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
 
 /**
@@ -43,9 +42,9 @@ public function testLazyLoad() {
 
     // Verify that the base page doesn't have the settings and files that are to
     // be lazy loaded as part of the next requests.
-    $this->assertTrue(!isset($original_settings[$expected['setting_name']]), new FormattableMarkup('Page originally lacks the %setting, as expected.', ['%setting' => $expected['setting_name']]));
-    $this->assertNotContains($expected['library_1'], $original_libraries, new FormattableMarkup('Page originally lacks the %library library, as expected.', ['%library' => $expected['library_1']]));
-    $this->assertNotContains($expected['library_2'], $original_libraries, new FormattableMarkup('Page originally lacks the %library library, as expected.', ['%library' => $expected['library_2']]));
+    $this->assertTrue(!isset($original_settings[$expected['setting_name']]), "Page originally lacks the {$expected['setting_name']}, as expected.");
+    $this->assertNotContains($expected['library_1'], $original_libraries, "Page originally lacks the {$expected['library_1']} library, as expected.");
+    $this->assertNotContains($expected['library_2'], $original_libraries, "Page originally lacks the {$expected['library_2']} library, as expected.");
 
     // Submit the AJAX request without triggering files getting added.
     $page->pressButton('Submit');
@@ -54,9 +53,9 @@ public function testLazyLoad() {
     $new_libraries = explode(',', $new_settings['ajaxPageState']['libraries']);
 
     // Verify the setting was not added when not expected.
-    $this->assertTrue(!isset($new_settings[$expected['setting_name']]), new FormattableMarkup('Page still lacks the %setting, as expected.', ['%setting' => $expected['setting_name']]));
-    $this->assertNotContains($expected['library_1'], $new_libraries, new FormattableMarkup('Page still lacks the %library library, as expected.', ['%library' => $expected['library_1']]));
-    $this->assertNotContains($expected['library_2'], $new_libraries, new FormattableMarkup('Page still lacks the %library library, as expected.', ['%library' => $expected['library_2']]));
+    $this->assertTrue(!isset($new_settings[$expected['setting_name']]), "Page still lacks the {$expected['setting_name']}, as expected.");
+    $this->assertNotContains($expected['library_1'], $new_libraries, "Page still lacks the {$expected['library_1']} library, as expected.");
+    $this->assertNotContains($expected['library_2'], $new_libraries, "Page still lacks the {$expected['library_2']} library, as expected.");
 
     // Submit the AJAX request and trigger adding files.
     $page->checkField('add_files');
@@ -67,11 +66,11 @@ public function testLazyLoad() {
 
     // Verify the expected setting was added, both to drupalSettings, and as
     // the first AJAX command.
-    $this->assertSame($expected['setting_value'], $new_settings[$expected['setting_name']], new FormattableMarkup('Page now has the %setting.', ['%setting' => $expected['setting_name']]));
+    $this->assertSame($expected['setting_value'], $new_settings[$expected['setting_name']], "Page now has the {$expected['setting_name']}.");
 
     // Verify the expected CSS file was added, both to drupalSettings, and as
     // the second AJAX command for inclusion into the HTML.
-    $this->assertContains($expected['library_1'], $new_libraries, new FormattableMarkup('Page state now has the %library library.', ['%library' => $expected['library_1']]));
+    $this->assertContains($expected['library_1'], $new_libraries, "Page state now has the {$expected['library_1']} library.");
 
     // Verify the expected JS file was added, both to drupalSettings, and as
     // the third AJAX command for inclusion into the HTML. By testing for an
@@ -79,7 +78,7 @@ public function testLazyLoad() {
     // unexpected JavaScript code, such as a jQuery.extend() that would
     // potentially clobber rather than properly merge settings, didn't
     // accidentally get added.
-    $this->assertContains($expected['library_2'], $new_libraries, new FormattableMarkup('Page state now has the %library library.', ['%library' => $expected['library_2']]));
+    $this->assertContains($expected['library_2'], $new_libraries, "Page state now has the {$expected['library_2']} library.");
   }
 
   /**
diff --git a/web/core/modules/system/tests/src/FunctionalJavascript/OffCanvasTest.php b/web/core/modules/system/tests/src/FunctionalJavascript/OffCanvasTest.php
index 6663a276665324a2ec5f4303beb078a08f6229be..9e3a21977e715a6113709510b933f48a16e3972c 100644
--- a/web/core/modules/system/tests/src/FunctionalJavascript/OffCanvasTest.php
+++ b/web/core/modules/system/tests/src/FunctionalJavascript/OffCanvasTest.php
@@ -52,10 +52,10 @@ public function testOffCanvasLinks($theme) {
     // Make sure tray updates to new content.
     // Check the first link again to make sure the empty title class is
     // removed.
-    foreach (['1', '2', '1'] as $link_index) {
+    foreach ([1, 2, 1] as $link_index) {
       $this->assertOffCanvasDialog($link_index, 'side');
       $header_text = $this->getOffCanvasDialog()->find('css', '.ui-dialog-title')->getText();
-      if ($link_index == '2') {
+      if ($link_index === 2) {
         // Check no title behavior.
         $web_assert->elementExists('css', '.ui-dialog-empty-title');
         $this->assertEquals(' ', $header_text);
diff --git a/web/core/modules/system/tests/src/Kernel/Scripts/DbCommandBaseTest.php b/web/core/modules/system/tests/src/Kernel/Scripts/DbCommandBaseTest.php
index 8f08d88dd0dff2894ece2549d1847aecd9e2e001..5fddc84c0a80a7f3b1f8f01ea4f5ec80eeacecd8 100644
--- a/web/core/modules/system/tests/src/Kernel/Scripts/DbCommandBaseTest.php
+++ b/web/core/modules/system/tests/src/Kernel/Scripts/DbCommandBaseTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\system\Kernel\Scripts\DbCommandBaseTest.
- */
-
 namespace Drupal\Tests\system\Kernel\Scripts;
 
 use Drupal\Core\Command\DbCommandBase;
diff --git a/web/core/modules/system/tests/src/Unit/Breadcrumbs/PathBasedBreadcrumbBuilderTest.php b/web/core/modules/system/tests/src/Unit/Breadcrumbs/PathBasedBreadcrumbBuilderTest.php
index 2f366bfef6af195a813ada4a1aefa7b7561ed427..78dd3fdeb3e5a706875de4888171aa39565f8fe8 100644
--- a/web/core/modules/system/tests/src/Unit/Breadcrumbs/PathBasedBreadcrumbBuilderTest.php
+++ b/web/core/modules/system/tests/src/Unit/Breadcrumbs/PathBasedBreadcrumbBuilderTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\system\Unit\Breadcrumbs\PathBasedBreadcrumbBuilderTest.
- */
-
 namespace Drupal\Tests\system\Unit\Breadcrumbs;
 
 use Drupal\Core\Access\AccessResult;
diff --git a/web/core/modules/taxonomy/src/Entity/Term.php b/web/core/modules/taxonomy/src/Entity/Term.php
index 5b4d8dbdb952adddac3829d27d0fa5a408cc2e36..5d52df611163875fc1dc295b1e1f2e6fb6da6a74 100644
--- a/web/core/modules/taxonomy/src/Entity/Term.php
+++ b/web/core/modules/taxonomy/src/Entity/Term.php
@@ -252,7 +252,7 @@ public function setFormat($format) {
    * {@inheritdoc}
    */
   public function getName() {
-    return $this->label();
+    return $this->label() ?? '';
   }
 
   /**
diff --git a/web/core/modules/taxonomy/tests/src/Functional/TaxonomyImageTest.php b/web/core/modules/taxonomy/tests/src/Functional/TaxonomyImageTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..3afc39a17c2040d41fd39e530683dcb1dfa167d0
--- /dev/null
+++ b/web/core/modules/taxonomy/tests/src/Functional/TaxonomyImageTest.php
@@ -0,0 +1,94 @@
+<?php
+
+namespace Drupal\Tests\taxonomy\Functional;
+
+use Drupal\Tests\TestFileCreationTrait;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\taxonomy\VocabularyInterface;
+
+/**
+ * Tests image upload on taxonomy terms.
+ *
+ * @group taxonomy
+ */
+class TaxonomyImageTest extends TaxonomyTestBase {
+
+  use TestFileCreationTrait {
+    getTestFiles as drupalGetTestFiles;
+    compareFiles as drupalCompareFiles;
+  }
+
+  /**
+   * The taxonomy vocabulary used for the test.
+   *
+   * @var \Drupal\taxonomy\VocabularyInterface
+   */
+  protected VocabularyInterface $vocabulary;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = ['image'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp(): void {
+    parent::setUp();
+
+    $this->vocabulary = $this->createVocabulary();
+    $entity_type = 'taxonomy_term';
+    $name = 'field_test';
+    FieldStorageConfig::create([
+      'field_name' => $name,
+      'entity_type' => $entity_type,
+      'type' => 'image',
+    ])->save();
+    FieldConfig::create([
+      'field_name' => $name,
+      'entity_type' => $entity_type,
+      'bundle' => $this->vocabulary->id(),
+      'settings' => [],
+    ])->save();
+    /** @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface $display_repository */
+    $display_repository = \Drupal::service('entity_display.repository');
+    $display_repository->getFormDisplay($entity_type, $this->vocabulary->id())
+      ->setComponent($name, [
+        'type' => 'image_image',
+        'settings' => [],
+      ])
+      ->save();
+  }
+
+  /**
+   * Tests that a file can be uploaded before the taxonomy term has a name.
+   */
+  public function testTaxonomyImageUpload(): void {
+    $user = $this->drupalCreateUser(['administer taxonomy']);
+    $this->drupalLogin($user);
+
+    $files = $this->drupalGetTestFiles('image');
+    $image = array_pop($files);
+
+    // Ensure that a file can be uploaded before taxonomy term has a name.
+    $edit = [
+      'files[field_test_0]' => \Drupal::service('file_system')->realpath($image->uri),
+    ];
+    $this->drupalGet('admin/structure/taxonomy/manage/' . $this->vocabulary->id() . '/add');
+    $this->submitForm($edit, 'Upload');
+
+    $edit = [
+      'name[0][value]' => $this->randomMachineName(),
+      'field_test[0][alt]' => $this->randomMachineName(),
+    ];
+    $this->submitForm($edit, 'Save');
+    $this->assertSession()->pageTextContains('Created new term');
+  }
+
+}
diff --git a/web/core/modules/update/tests/src/Unit/UpdateFetcherTest.php b/web/core/modules/update/tests/src/Unit/UpdateFetcherTest.php
index cde0a60c3dedc5baf367a1aba700a03155436709..2c1256e9f94ae43f801f5e9399be3ea9470d4790 100644
--- a/web/core/modules/update/tests/src/Unit/UpdateFetcherTest.php
+++ b/web/core/modules/update/tests/src/Unit/UpdateFetcherTest.php
@@ -178,7 +178,7 @@ public function testUpdateFetcherNoFallback() {
     // First, try without the HTTP fallback setting, and HTTPS mocked to fail.
     $settings = new Settings([]);
     $this->mockClient(
-      new Response('500', [], 'HTTPS failed'),
+      new Response(500, [], 'HTTPS failed'),
     );
     $update_fetcher = new UpdateFetcher($this->mockConfigFactory, $this->mockHttpClient, $settings, $this->logger);
 
@@ -206,8 +206,8 @@ public function testUpdateFetcherNoFallback() {
   public function testUpdateFetcherHttpFallback() {
     $settings = new Settings(['update_fetch_with_http_fallback' => TRUE]);
     $this->mockClient(
-      new Response('500', [], 'HTTPS failed'),
-      new Response('200', [], 'HTTP worked'),
+      new Response(500, [], 'HTTPS failed'),
+      new Response(200, [], 'HTTP worked'),
     );
     $update_fetcher = new UpdateFetcher($this->mockConfigFactory, $this->mockHttpClient, $settings, $this->logger);
 
diff --git a/web/core/modules/user/tests/src/Traits/UserCreationTrait.php b/web/core/modules/user/tests/src/Traits/UserCreationTrait.php
index 683ba355c8ad4e8a5e567730c94ac3d84e092e80..9237d13b13e48fd9fc04d4e45ebf3a1b51d2e0a5 100644
--- a/web/core/modules/user/tests/src/Traits/UserCreationTrait.php
+++ b/web/core/modules/user/tests/src/Traits/UserCreationTrait.php
@@ -2,7 +2,6 @@
 
 namespace Drupal\Tests\user\Traits;
 
-use Drupal\Component\Render\FormattableMarkup;
 use Drupal\Core\Database\DatabaseExceptionWrapper;
 use Drupal\Core\Database\SchemaObjectExistsException;
 use Drupal\Core\Entity\EntityStorageException;
@@ -191,7 +190,7 @@ protected function createUser(array $permissions = [], $name = NULL, $admin = FA
     $account->save();
 
     $valid_user = $account->id() !== NULL;
-    $this->assertTrue($valid_user, new FormattableMarkup('User created with name %name and pass %pass', ['%name' => $edit['name'], '%pass' => $edit['pass']]));
+    $this->assertTrue($valid_user, "User created with name {$edit['name']} and pass {$edit['pass']}");
     if (!$valid_user) {
       return FALSE;
     }
@@ -271,7 +270,7 @@ protected function createRole(array $permissions, $rid = NULL, $name = NULL, $we
     }
     $result = $role->save();
 
-    $this->assertSame(SAVED_NEW, $result, new FormattableMarkup('Created role ID @rid with name @name.', ['@name' => var_export($role->label(), TRUE), '@rid' => var_export($role->id(), TRUE)]));
+    $this->assertSame(SAVED_NEW, $result, "Created role ID {$role->id()} with name {$role->label()}.");
 
     if ($result === SAVED_NEW) {
       // Grant the specified permissions to the role, if any.
@@ -302,7 +301,7 @@ protected function checkPermissions(array $permissions) {
     $valid = TRUE;
     foreach ($permissions as $permission) {
       if (!in_array($permission, $available)) {
-        $this->fail(new FormattableMarkup('Invalid permission %permission.', ['%permission' => $permission]));
+        $this->fail("Invalid permission $permission.");
         $valid = FALSE;
       }
     }
diff --git a/web/core/modules/user/tests/src/Unit/PermissionHandlerTest.php b/web/core/modules/user/tests/src/Unit/PermissionHandlerTest.php
index 050895a073254cde36bd46821cd242a45f551bf3..50eb4790c5e9c3c43e019b560840bbf6a693a2e8 100644
--- a/web/core/modules/user/tests/src/Unit/PermissionHandlerTest.php
+++ b/web/core/modules/user/tests/src/Unit/PermissionHandlerTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\user\Unit\PermissionHandlerTest.
- */
-
 namespace Drupal\Tests\user\Unit;
 
 use Drupal\Core\Extension\Extension;
diff --git a/web/core/modules/views/tests/src/Kernel/Plugin/PluginBaseTest.php b/web/core/modules/views/tests/src/Kernel/Plugin/PluginBaseTest.php
index d02e657a897576ba8c32a8cdc341a85ea1c444c7..720b0f1ce9ad233250b0b2b4ee40ee650d08ef3e 100644
--- a/web/core/modules/views/tests/src/Kernel/Plugin/PluginBaseTest.php
+++ b/web/core/modules/views/tests/src/Kernel/Plugin/PluginBaseTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\views\Tests\Plugin\PluginBaseTest.
- */
-
 namespace Drupal\Tests\views\Kernel\Plugin;
 
 use Drupal\Core\Render\RenderContext;
diff --git a/web/core/modules/views/tests/src/Unit/EventSubscriber/RouteSubscriberTest.php b/web/core/modules/views/tests/src/Unit/EventSubscriber/RouteSubscriberTest.php
index 9975f9e63099a8a2859c35729a4f72bdc0aefa96..a458bddafba70bab74bd21837852397399e0c411 100644
--- a/web/core/modules/views/tests/src/Unit/EventSubscriber/RouteSubscriberTest.php
+++ b/web/core/modules/views/tests/src/Unit/EventSubscriber/RouteSubscriberTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\views\Unit\EventSubscriber\RouteSubscriberTest.
- */
-
 namespace Drupal\Tests\views\Unit\EventSubscriber;
 
 use Drupal\Core\Entity\EntityTypeManagerInterface;
diff --git a/web/core/modules/views/tests/src/Unit/Plugin/Derivative/ViewsLocalTaskTest.php b/web/core/modules/views/tests/src/Unit/Plugin/Derivative/ViewsLocalTaskTest.php
index 6ef6dee2e96fcdb9407b1fbedaf7771698bb3c0b..be6c2851d63e7357dea09b7ccb1208537401b539 100644
--- a/web/core/modules/views/tests/src/Unit/Plugin/Derivative/ViewsLocalTaskTest.php
+++ b/web/core/modules/views/tests/src/Unit/Plugin/Derivative/ViewsLocalTaskTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\views\Unit\Plugin\Derivative\ViewsLocalTaskTest.
- */
-
 namespace Drupal\Tests\views\Unit\Plugin\Derivative;
 
 use Drupal\Tests\UnitTestCase;
diff --git a/web/core/modules/views/tests/src/Unit/Plugin/HandlerBaseTest.php b/web/core/modules/views/tests/src/Unit/Plugin/HandlerBaseTest.php
index f3468a0763c4e6f251b086ab995c9bd759f56024..52cd88de7952e7b734bf27f2fa4d9e919ae7029c 100644
--- a/web/core/modules/views/tests/src/Unit/Plugin/HandlerBaseTest.php
+++ b/web/core/modules/views/tests/src/Unit/Plugin/HandlerBaseTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\views\Unit\Plugin\HandlerBaseTest.
- */
-
 namespace Drupal\Tests\views\Unit\Plugin;
 
 use Drupal\Tests\UnitTestCase;
diff --git a/web/core/modules/views/tests/src/Unit/Plugin/display/PathPluginBaseTest.php b/web/core/modules/views/tests/src/Unit/Plugin/display/PathPluginBaseTest.php
index e4a24f61144068f35f10c0e35d6d08da9f7e0789..d77f21a42d34658e29d21d2655542eece20d2963 100644
--- a/web/core/modules/views/tests/src/Unit/Plugin/display/PathPluginBaseTest.php
+++ b/web/core/modules/views/tests/src/Unit/Plugin/display/PathPluginBaseTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\views\Unit\Plugin\display\PathPluginBaseTest.
- */
-
 namespace Drupal\Tests\views\Unit\Plugin\display;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
diff --git a/web/core/modules/views/tests/src/Unit/Plugin/field/FieldPluginBaseTest.php b/web/core/modules/views/tests/src/Unit/Plugin/field/FieldPluginBaseTest.php
index a02816727a31f301dc2060e0d518e0feff0d18e2..4ddf6ab5644eacb373e0fd6b138020ef2810b4bc 100644
--- a/web/core/modules/views/tests/src/Unit/Plugin/field/FieldPluginBaseTest.php
+++ b/web/core/modules/views/tests/src/Unit/Plugin/field/FieldPluginBaseTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\views\Unit\Plugin\field\FieldPluginBaseTest.
- */
-
 namespace Drupal\Tests\views\Unit\Plugin\field;
 
 use Drupal\Core\GeneratedUrl;
diff --git a/web/core/modules/views/tests/src/Unit/Plugin/field/FieldTest.php b/web/core/modules/views/tests/src/Unit/Plugin/field/FieldTest.php
index c60e91447f0fc1ae6a14fc5a4c0306ce5f13fefd..b1ad678df2b914818f084355a1db2410706ab834 100644
--- a/web/core/modules/views/tests/src/Unit/Plugin/field/FieldTest.php
+++ b/web/core/modules/views/tests/src/Unit/Plugin/field/FieldTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\views\Unit\Plugin\field\FieldTest.
- */
-
 namespace Drupal\Tests\views\Unit\Plugin\field;
 
 use Drupal\Core\Entity\EntityFieldManagerInterface;
diff --git a/web/core/modules/views/tests/src/Unit/Plugin/pager/PagerPluginBaseTest.php b/web/core/modules/views/tests/src/Unit/Plugin/pager/PagerPluginBaseTest.php
index 72b1e661e94695bae6c03ba5403567f2e38bc3fa..89dbc931d3b08a412481581416d5e9380ed68471 100644
--- a/web/core/modules/views/tests/src/Unit/Plugin/pager/PagerPluginBaseTest.php
+++ b/web/core/modules/views/tests/src/Unit/Plugin/pager/PagerPluginBaseTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\views\Unit\Plugin\pager\PagerPluginBaseTest.
- */
-
 namespace Drupal\Tests\views\Unit\Plugin\pager;
 
 use Drupal\Tests\UnitTestCase;
diff --git a/web/core/modules/views_ui/tests/src/Unit/ViewListBuilderTest.php b/web/core/modules/views_ui/tests/src/Unit/ViewListBuilderTest.php
index b576cb7b01a8d42fbbf691c6d62673428286bbd4..9ebb0fc5b437704fe5e633ff0e6e85e9c7d5d216 100644
--- a/web/core/modules/views_ui/tests/src/Unit/ViewListBuilderTest.php
+++ b/web/core/modules/views_ui/tests/src/Unit/ViewListBuilderTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\views_ui\Unit\ViewListBuilderTest.
- */
-
 namespace Drupal\Tests\views_ui\Unit;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
diff --git a/web/core/scripts/run-tests.sh b/web/core/scripts/run-tests.sh
index 19766d2a19e178c0e81e1166352bfc6e041f8718..6b4c456fcfb83936f38fdbf8e34cc6139cd5d7f5 100755
--- a/web/core/scripts/run-tests.sh
+++ b/web/core/scripts/run-tests.sh
@@ -335,6 +335,14 @@ function simpletest_script_help() {
               will be used. The default is that any unexpected silenced
               deprecation error will fail tests.
 
+  --ci-parallel-node-total
+
+              The total number of instances of this job running in parallel.
+
+  --ci-parallel-node-index
+
+              The index of the job in the job set.
+
   <test1>[,<test2>[,<test3> ...]]
 
               One or more tests to be run. By default, these are interpreted
diff --git a/web/core/tests/Drupal/FunctionalJavascriptTests/Ajax/DialogTest.php b/web/core/tests/Drupal/FunctionalJavascriptTests/Ajax/DialogTest.php
index 1a537175db5c43fb991f68a57bec3a97592cb664..ad4d2e33cc8001c24a67fadf6638e93c5c20afe7 100644
--- a/web/core/tests/Drupal/FunctionalJavascriptTests/Ajax/DialogTest.php
+++ b/web/core/tests/Drupal/FunctionalJavascriptTests/Ajax/DialogTest.php
@@ -3,7 +3,6 @@
 namespace Drupal\FunctionalJavascriptTests\Ajax;
 
 use Drupal\ajax_test\Controller\AjaxTestController;
-use Drupal\Component\Render\FormattableMarkup;
 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
 
 /**
@@ -72,7 +71,7 @@ public function testDialog() {
     $dialog = $this->assertSession()->waitForElementVisible('css', 'div.ui-dialog');
     $this->assertNotNull($dialog, 'Link was used to open a dialog ( non-modal, with options )');
     $style = $dialog->getAttribute('style');
-    $this->assertStringContainsString('width: 400px;', $style, new FormattableMarkup('Modal respected the dialog-options width parameter.  Style = style', ['%style' => $style]));
+    $this->assertStringContainsString('width: 400px;', $style, "Modal respected the dialog-options width parameter.  Style = $style");
 
     // Reset: Return to the dialog links page.
     $this->drupalGet('ajax-test/dialog');
diff --git a/web/core/tests/Drupal/FunctionalJavascriptTests/TableDrag/TableDragTest.php b/web/core/tests/Drupal/FunctionalJavascriptTests/TableDrag/TableDragTest.php
index 9288ddaf7288895a5196d7eadfc1bf20e36e5840..8609cabc8fa06a72d3ca5d9dd9ac14e27b997d3a 100644
--- a/web/core/tests/Drupal/FunctionalJavascriptTests/TableDrag/TableDragTest.php
+++ b/web/core/tests/Drupal/FunctionalJavascriptTests/TableDrag/TableDragTest.php
@@ -163,11 +163,11 @@ public function testKeyboardAccessibility() {
    */
   protected function assertKeyboardAccessibility(string $drupal_path = 'tabledrag_test', ?array $structure = NULL): void {
     $expected_table = $structure ?: [
-      ['id' => 1, 'weight' => 0, 'parent' => '', 'indentation' => 0, 'changed' => FALSE],
-      ['id' => 2, 'weight' => 0, 'parent' => '', 'indentation' => 0, 'changed' => FALSE],
-      ['id' => 3, 'weight' => 0, 'parent' => '', 'indentation' => 0, 'changed' => FALSE],
-      ['id' => 4, 'weight' => 0, 'parent' => '', 'indentation' => 0, 'changed' => FALSE],
-      ['id' => 5, 'weight' => 0, 'parent' => '', 'indentation' => 0, 'changed' => FALSE],
+      ['id' => '1', 'weight' => 0, 'parent' => '', 'indentation' => 0, 'changed' => FALSE],
+      ['id' => '2', 'weight' => 0, 'parent' => '', 'indentation' => 0, 'changed' => FALSE],
+      ['id' => '3', 'weight' => 0, 'parent' => '', 'indentation' => 0, 'changed' => FALSE],
+      ['id' => '4', 'weight' => 0, 'parent' => '', 'indentation' => 0, 'changed' => FALSE],
+      ['id' => '5', 'weight' => 0, 'parent' => '', 'indentation' => 0, 'changed' => FALSE],
     ];
     if (!empty($drupal_path)) {
       $this->state->set('tabledrag_test_table', array_flip(range(1, 5)));
@@ -177,45 +177,45 @@ protected function assertKeyboardAccessibility(string $drupal_path = 'tabledrag_
 
     // Nest the row with id 2 as child of row 1.
     $this->moveRowWithKeyboard($this->findRowById(2), 'right');
-    $expected_table[1] = ['id' => 2, 'weight' => -10, 'parent' => 1, 'indentation' => 1, 'changed' => TRUE];
+    $expected_table[1] = ['id' => '2', 'weight' => -10, 'parent' => '1', 'indentation' => 1, 'changed' => TRUE];
     $this->assertDraggableTable($expected_table);
 
     // Nest the row with id 3 as child of row 1.
     $this->moveRowWithKeyboard($this->findRowById(3), 'right');
-    $expected_table[2] = ['id' => 3, 'weight' => -9, 'parent' => 1, 'indentation' => 1, 'changed' => TRUE];
+    $expected_table[2] = ['id' => '3', 'weight' => -9, 'parent' => '1', 'indentation' => 1, 'changed' => TRUE];
     $this->assertDraggableTable($expected_table);
 
     // Nest the row with id 3 as child of row 2.
     $this->moveRowWithKeyboard($this->findRowById(3), 'right');
-    $expected_table[2] = ['id' => 3, 'weight' => -10, 'parent' => 2, 'indentation' => 2, 'changed' => TRUE];
+    $expected_table[2] = ['id' => '3', 'weight' => -10, 'parent' => '2', 'indentation' => 2, 'changed' => TRUE];
     $this->assertDraggableTable($expected_table);
 
     // Nesting should be allowed to maximum level 2.
     $this->moveRowWithKeyboard($this->findRowById(4), 'right', 4);
-    $expected_table[3] = ['id' => 4, 'weight' => -9, 'parent' => 2, 'indentation' => 2, 'changed' => TRUE];
+    $expected_table[3] = ['id' => '4', 'weight' => -9, 'parent' => '2', 'indentation' => 2, 'changed' => TRUE];
     $this->assertDraggableTable($expected_table);
 
     // Re-order children of row 1.
     $this->moveRowWithKeyboard($this->findRowById(4), 'up');
-    $expected_table[2] = ['id' => 4, 'weight' => -10, 'parent' => 2, 'indentation' => 2, 'changed' => TRUE];
-    $expected_table[3] = ['id' => 3, 'weight' => -9, 'parent' => 2, 'indentation' => 2, 'changed' => TRUE];
+    $expected_table[2] = ['id' => '4', 'weight' => -10, 'parent' => '2', 'indentation' => 2, 'changed' => TRUE];
+    $expected_table[3] = ['id' => '3', 'weight' => -9, 'parent' => '2', 'indentation' => 2, 'changed' => TRUE];
     $this->assertDraggableTable($expected_table);
 
     // Move back the row 3 to the 1st level.
     $this->moveRowWithKeyboard($this->findRowById(3), 'left');
-    $expected_table[3] = ['id' => 3, 'weight' => -9, 'parent' => 1, 'indentation' => 1, 'changed' => TRUE];
+    $expected_table[3] = ['id' => '3', 'weight' => -9, 'parent' => '1', 'indentation' => 1, 'changed' => TRUE];
     $this->assertDraggableTable($expected_table);
 
     $this->moveRowWithKeyboard($this->findRowById(3), 'left');
-    $expected_table[0] = ['id' => 1, 'weight' => -10, 'parent' => '', 'indentation' => 0, 'changed' => FALSE];
-    $expected_table[3] = ['id' => 3, 'weight' => -9, 'parent' => '', 'indentation' => 0, 'changed' => TRUE];
-    $expected_table[4] = ['id' => 5, 'weight' => -8, 'parent' => '', 'indentation' => 0, 'changed' => FALSE];
+    $expected_table[0] = ['id' => '1', 'weight' => -10, 'parent' => '', 'indentation' => 0, 'changed' => FALSE];
+    $expected_table[3] = ['id' => '3', 'weight' => -9, 'parent' => '', 'indentation' => 0, 'changed' => TRUE];
+    $expected_table[4] = ['id' => '5', 'weight' => -8, 'parent' => '', 'indentation' => 0, 'changed' => FALSE];
     $this->assertDraggableTable($expected_table);
 
     // Move row 3 to the last position.
     $this->moveRowWithKeyboard($this->findRowById(3), 'down');
-    $expected_table[3] = ['id' => 5, 'weight' => -9, 'parent' => '', 'indentation' => 0, 'changed' => FALSE];
-    $expected_table[4] = ['id' => 3, 'weight' => -8, 'parent' => '', 'indentation' => 0, 'changed' => TRUE];
+    $expected_table[3] = ['id' => '5', 'weight' => -9, 'parent' => '', 'indentation' => 0, 'changed' => FALSE];
+    $expected_table[4] = ['id' => '3', 'weight' => -8, 'parent' => '', 'indentation' => 0, 'changed' => TRUE];
     $this->assertDraggableTable($expected_table);
 
     // Nothing happens when trying to move the last row further down.
@@ -224,7 +224,7 @@ protected function assertKeyboardAccessibility(string $drupal_path = 'tabledrag_
 
     // Nest row 3 under 5. The max depth allowed should be 1.
     $this->moveRowWithKeyboard($this->findRowById(3), 'right', 3);
-    $expected_table[4] = ['id' => 3, 'weight' => -10, 'parent' => 5, 'indentation' => 1, 'changed' => TRUE];
+    $expected_table[4] = ['id' => '3', 'weight' => -10, 'parent' => '5', 'indentation' => 1, 'changed' => TRUE];
     $this->assertDraggableTable($expected_table);
 
     // The first row of the table cannot be nested.
@@ -235,11 +235,11 @@ protected function assertKeyboardAccessibility(string $drupal_path = 'tabledrag_
     // with nesting preserved. Swap the order of the top-level rows by moving
     // row 1 to after row 3.
     $this->moveRowWithKeyboard($this->findRowById(1), 'down', 2);
-    $expected_table[0] = ['id' => 5, 'weight' => -10, 'parent' => '', 'indentation' => 0, 'changed' => FALSE];
+    $expected_table[0] = ['id' => '5', 'weight' => -10, 'parent' => '', 'indentation' => 0, 'changed' => FALSE];
     $expected_table[3] = $expected_table[1];
     $expected_table[1] = $expected_table[4];
     $expected_table[4] = $expected_table[2];
-    $expected_table[2] = ['id' => 1, 'weight' => -9, 'parent' => '', 'indentation' => 0, 'changed' => TRUE];
+    $expected_table[2] = ['id' => '1', 'weight' => -9, 'parent' => '', 'indentation' => 0, 'changed' => TRUE];
     $this->assertDraggableTable($expected_table);
   }
 
@@ -257,11 +257,11 @@ public function testRootLeafDraggableRowsWithKeyboard() {
 
     $this->drupalGet('tabledrag_test');
     $expected_table = [
-      ['id' => 1, 'weight' => 0, 'parent' => '', 'indentation' => 0, 'changed' => FALSE],
-      ['id' => 2, 'weight' => 0, 'parent' => 1, 'indentation' => 1, 'changed' => FALSE],
-      ['id' => 3, 'weight' => 0, 'parent' => 1, 'indentation' => 1, 'changed' => FALSE],
-      ['id' => 4, 'weight' => 0, 'parent' => '', 'indentation' => 0, 'changed' => FALSE],
-      ['id' => 5, 'weight' => 0, 'parent' => '', 'indentation' => 0, 'changed' => FALSE],
+      ['id' => '1', 'weight' => 0, 'parent' => '', 'indentation' => 0, 'changed' => FALSE],
+      ['id' => '2', 'weight' => 0, 'parent' => '1', 'indentation' => 1, 'changed' => FALSE],
+      ['id' => '3', 'weight' => 0, 'parent' => '1', 'indentation' => 1, 'changed' => FALSE],
+      ['id' => '4', 'weight' => 0, 'parent' => '', 'indentation' => 0, 'changed' => FALSE],
+      ['id' => '5', 'weight' => 0, 'parent' => '', 'indentation' => 0, 'changed' => FALSE],
     ];
     $this->assertDraggableTable($expected_table);
 
@@ -278,9 +278,9 @@ public function testRootLeafDraggableRowsWithKeyboard() {
     $this->moveRowWithKeyboard($this->findRowById(2), 'down');
     $this->moveRowWithKeyboard($this->findRowById(2), 'left');
     $expected_table[0]['weight'] = -10;
-    $expected_table[1]['id'] = 3;
+    $expected_table[1]['id'] = '3';
     $expected_table[1]['weight'] = -10;
-    $expected_table[2] = ['id' => 2, 'weight' => -9, 'parent' => '', 'indentation' => 0, 'changed' => TRUE];
+    $expected_table[2] = ['id' => '2', 'weight' => -9, 'parent' => '', 'indentation' => 0, 'changed' => TRUE];
     $expected_table[3]['weight'] = -8;
     $expected_table[4]['weight'] = -7;
     $this->assertDraggableTable($expected_table);
@@ -288,8 +288,8 @@ public function testRootLeafDraggableRowsWithKeyboard() {
     // Root rows can have children.
     $this->moveRowWithKeyboard($this->findRowById(4), 'down');
     $this->moveRowWithKeyboard($this->findRowById(4), 'right');
-    $expected_table[3]['id'] = 5;
-    $expected_table[4] = ['id' => 4, 'weight' => -10, 'parent' => 5, 'indentation' => 1, 'changed' => TRUE];
+    $expected_table[3]['id'] = '5';
+    $expected_table[4] = ['id' => '4', 'weight' => -10, 'parent' => '5', 'indentation' => 1, 'changed' => TRUE];
     $this->assertDraggableTable($expected_table);
   }
 
@@ -437,37 +437,37 @@ public function testNestedDraggableTables() {
     // Re-test the nested draggable table.
     $expected_child_table_structure = [
       [
-        'id' => 5,
+        'id' => '5',
         'weight' => -10,
         'parent' => '',
         'indentation' => 0,
         'changed' => FALSE,
       ],
       [
-        'id' => 3,
+        'id' => '3',
         'weight' => -10,
-        'parent' => 5,
+        'parent' => '5',
         'indentation' => 1,
         'changed' => TRUE,
       ],
       [
-        'id' => 1,
+        'id' => '1',
         'weight' => -9,
         'parent' => '',
         'indentation' => 0,
         'changed' => TRUE,
       ],
       [
-        'id' => 2,
+        'id' => '2',
         'weight' => -10,
-        'parent' => 1,
+        'parent' => '1',
         'indentation' => 1,
         'changed' => TRUE,
       ],
       [
-        'id' => 4,
+        'id' => '4',
         'weight' => -10,
-        'parent' => 2,
+        'parent' => '2',
         'indentation' => 2,
         'changed' => TRUE,
       ],
diff --git a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingInstallationTest.php b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingInstallationTest.php
index 8906a2fa4da01dedc7ca5fb56adbebdddbceeeeb..8090b99bae89cb78454cee5cc2c9880766cd0560 100644
--- a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingInstallationTest.php
+++ b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingInstallationTest.php
@@ -22,6 +22,9 @@ public function testInstaller() {
     $this->visitInstaller();
     $this->assertSession()->pageTextContains('Drupal already installed');
 
+    // Verify that Drupal version is not displayed.
+    $this->assertSession()->pageTextNotContains(\Drupal::VERSION);
+
     // Delete settings.php and attempt to reinstall again.
     unlink($this->siteDirectory . '/settings.php');
     $this->visitInstaller();
diff --git a/web/core/tests/Drupal/KernelTests/Core/Config/ConfigImporterTest.php b/web/core/tests/Drupal/KernelTests/Core/Config/ConfigImporterTest.php
index e7f13b762552961e0ecf07b8d79d02009f6ce504..2710f39d46946329e04f0270ace705beccbd260a 100644
--- a/web/core/tests/Drupal/KernelTests/Core/Config/ConfigImporterTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/Config/ConfigImporterTest.php
@@ -918,6 +918,16 @@ public function testConfigEvents(): void {
     $this->assertSame(['key' => 'bar'], $event['current_config_data']);
     $this->assertSame(['key' => 'bar'], $event['raw_config_data']);
     $this->assertSame(['key' => 'foo'], $event['original_config_data']);
+
+    // Import the configuration that deletes 'config_events_test.test'.
+    $this->container->get('config.storage.sync')->delete('config_events_test.test');
+    $this->configImporter()->import();
+    $this->assertFalse($this->container->get('config.storage')->exists('config_events_test.test'));
+    $event = \Drupal::state()->get('config_events_test.event', []);
+    $this->assertSame(ConfigEvents::DELETE, $event['event_name']);
+    $this->assertSame([], $event['current_config_data']);
+    $this->assertSame([], $event['raw_config_data']);
+    $this->assertSame(['key' => 'bar'], $event['original_config_data']);
   }
 
   /**
diff --git a/web/core/tests/Drupal/KernelTests/Core/Config/Storage/DatabaseStorageTest.php b/web/core/tests/Drupal/KernelTests/Core/Config/Storage/DatabaseStorageTest.php
index 11e827bf73a4e68cbfe0d1dda47d59756dd7b537..5f6e787c41d0dca6a22dd33f1cde6174c74338b0 100644
--- a/web/core/tests/Drupal/KernelTests/Core/Config/Storage/DatabaseStorageTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/Config/Storage/DatabaseStorageTest.php
@@ -4,6 +4,7 @@
 
 use Drupal\Core\Config\DatabaseStorage;
 use Drupal\Core\Database\Database;
+use Drupal\Core\Database\DatabaseExceptionWrapper;
 
 /**
  * Tests DatabaseStorage operations.
@@ -39,4 +40,87 @@ protected function delete($name) {
     Database::getConnection()->delete('config')->condition('name', $name)->execute();
   }
 
+  /**
+   * Tests that operations throw exceptions if the query fails.
+   */
+  public function testExceptionIsThrownIfQueryFails() {
+    $connection = Database::getConnection();
+    if ($connection->databaseType() === 'sqlite') {
+      // See: https://www.drupal.org/project/drupal/issues/3349286
+      $this->markTestSkipped('SQLite cannot allow detection of exceptions due to double quoting.');
+      return;
+    }
+
+    Database::getConnection()->schema()->dropTable('config');
+    // In order to simulate database issue create a table with an incorrect
+    // specification.
+    $table_specification = [
+      'fields' => [
+        'id'  => [
+          'type' => 'int',
+          'default' => NULL,
+        ],
+      ],
+    ];
+    Database::getConnection()->schema()->createTable('config', $table_specification);
+
+    try {
+      $this->storage->exists('config.settings');
+      $this->fail('Expected exception not thrown from exists()');
+    }
+    catch (DatabaseExceptionWrapper $e) {
+      // Exception was expected
+    }
+
+    try {
+      $this->storage->read('config.settings');
+      $this->fail('Expected exception not thrown from read()');
+    }
+    catch (DatabaseExceptionWrapper $e) {
+      // Exception was expected
+    }
+
+    try {
+      $this->storage->readMultiple(['config.settings', 'config.settings2']);
+      $this->fail('Expected exception not thrown from readMultiple()');
+    }
+    catch (DatabaseExceptionWrapper $e) {
+      // Exception was expected
+    }
+
+    try {
+      $this->storage->write('config.settings', ['data' => '']);
+      $this->fail('Expected exception not thrown from deleteAll()');
+    }
+    catch (DatabaseExceptionWrapper $e) {
+      // Exception was expected
+    }
+
+    try {
+      $this->storage->listAll();
+      $this->fail('Expected exception not thrown from listAll()');
+    }
+    catch (DatabaseExceptionWrapper $e) {
+      // Exception was expected
+    }
+
+    try {
+      $this->storage->deleteAll();
+      $this->fail('Expected exception not thrown from deleteAll()');
+    }
+    catch (DatabaseExceptionWrapper $e) {
+      // Exception was expected
+    }
+
+    try {
+      $this->storage->getAllCollectionNames();
+      $this->fail('Expected exception not thrown from getAllCollectionNames()');
+    }
+    catch (DatabaseExceptionWrapper $e) {
+      // Exception was expected
+    }
+
+    $this->assertTrue(TRUE);
+  }
+
 }
diff --git a/web/core/tests/Drupal/KernelTests/Core/EventSubscriber/ExceptionLoggingSubscriberTest.php b/web/core/tests/Drupal/KernelTests/Core/EventSubscriber/ExceptionLoggingSubscriberTest.php
index b15ecff3f0fee6678689f2519ed90e357583bf57..9bd4d57950565f0c57624b3f5e2eef4315109c5d 100644
--- a/web/core/tests/Drupal/KernelTests/Core/EventSubscriber/ExceptionLoggingSubscriberTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/EventSubscriber/ExceptionLoggingSubscriberTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\KernelTests\Core\EventSubscriber;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
+use Drupal\Core\Logger\RfcLogLevel;
 use Drupal\KernelTests\KernelTestBase;
 use Symfony\Component\ErrorHandler\BufferingLogger;
 use Symfony\Component\HttpFoundation\Request;
@@ -47,6 +48,18 @@ public function testExceptionLogging() {
       503 => 'php',
     ];
 
+    $level_map = [
+      400 => RfcLogLevel::WARNING,
+      401 => RfcLogLevel::WARNING,
+      403 => RfcLogLevel::WARNING,
+      404 => RfcLogLevel::WARNING,
+      405 => RfcLogLevel::WARNING,
+      408 => RfcLogLevel::WARNING,
+      501 => RfcLogLevel::ERROR,
+      502 => RfcLogLevel::ERROR,
+      503 => RfcLogLevel::ERROR,
+    ];
+
     // Ensure that noting is logged.
     $this->assertEmpty($this->container->get($this->testLogServiceName)->cleanLogs());
 
@@ -60,11 +73,12 @@ public function testExceptionLogging() {
     ini_set('error_log', $error_log);
 
     $expected_channels = array_values($channel_map);
+    $expected_levels = array_values($level_map);
 
     $logs = $this->container->get($this->testLogServiceName)->cleanLogs();
     foreach ($expected_channels as $key => $expected_channel) {
-      $log_message = $logs[$key][2]['channel'];
-      $this->assertEquals($expected_channel, $log_message);
+      $this->assertEquals($expected_channel, $logs[$key][2]['channel']);
+      $this->assertEquals($expected_levels[$key], $logs[$key][0]);
     }
   }
 
diff --git a/web/core/tests/Drupal/KernelTests/Core/Routing/RouteProviderTest.php b/web/core/tests/Drupal/KernelTests/Core/Routing/RouteProviderTest.php
index cb30230de412447f61ac615661db6d3cd823fc67..3eb0d3e0ed66a7be07b4053b344ef05099cbfa81 100644
--- a/web/core/tests/Drupal/KernelTests/Core/Routing/RouteProviderTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/Routing/RouteProviderTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\KernelTests\Core\Routing\RouteProviderTest.
- */
-
 namespace Drupal\KernelTests\Core\Routing;
 
 use ColinODell\PsrTestLogger\TestLogger;
diff --git a/web/core/tests/Drupal/KernelTests/Core/Theme/ThemeRenderAndAutoescapeTest.php b/web/core/tests/Drupal/KernelTests/Core/Theme/ThemeRenderAndAutoescapeTest.php
index 5c47f174a78d63241ca7f58f181b4cb0b70ec818..d545e6b9f42351af2a6d6d4f69cc5b6c7079b6f6 100644
--- a/web/core/tests/Drupal/KernelTests/Core/Theme/ThemeRenderAndAutoescapeTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/Theme/ThemeRenderAndAutoescapeTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\KernelTests\Core\Theme\ThemeRenderAndAutoescapeTest.
- */
-
 namespace Drupal\KernelTests\Core\Theme;
 
 use Drupal\Component\Utility\Html;
diff --git a/web/core/tests/Drupal/KernelTests/Core/Theme/TwigMarkupInterfaceTest.php b/web/core/tests/Drupal/KernelTests/Core/Theme/TwigMarkupInterfaceTest.php
index fd0d4da97bfd273a2df8d3e22ee9ada9289eeeb7..7d3d40160796088fb5f9455563866eba4dbc3a8b 100644
--- a/web/core/tests/Drupal/KernelTests/Core/Theme/TwigMarkupInterfaceTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/Theme/TwigMarkupInterfaceTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\KernelTests\Core\Theme\TwigMarkupInterfaceTest.
- */
-
 namespace Drupal\KernelTests\Core\Theme;
 
 use Drupal\Component\Render\FormattableMarkup;
diff --git a/web/core/tests/Drupal/Tests/BrowserHtmlDebugTrait.php b/web/core/tests/Drupal/Tests/BrowserHtmlDebugTrait.php
index 9ef1913ab609dd9b814e18a3364c9a8cc1d31945..64c9566a6529ded71efc4c1556c2ec1335b3d1f5 100644
--- a/web/core/tests/Drupal/Tests/BrowserHtmlDebugTrait.php
+++ b/web/core/tests/Drupal/Tests/BrowserHtmlDebugTrait.php
@@ -137,7 +137,7 @@ protected function htmlOutput($message = NULL) {
    */
   protected function initBrowserOutputFile() {
     $browser_output_file = getenv('BROWSERTEST_OUTPUT_FILE');
-    $this->htmlOutputEnabled = is_file($browser_output_file);
+    $this->htmlOutputEnabled = is_string($browser_output_file) && is_file($browser_output_file);
     $this->htmlOutputBaseUrl = getenv('BROWSERTEST_OUTPUT_BASE_URL') ?: $GLOBALS['base_url'];
     if ($this->htmlOutputEnabled) {
       $this->htmlOutputFile = $browser_output_file;
diff --git a/web/core/tests/Drupal/Tests/Component/Assertion/InspectorTest.php b/web/core/tests/Drupal/Tests/Component/Assertion/InspectorTest.php
index b117bcf8bce673e306c00d386f4f3a5755125231..4f79f764634f926c0e63f34e71ed10df28695905 100644
--- a/web/core/tests/Drupal/Tests/Component/Assertion/InspectorTest.php
+++ b/web/core/tests/Drupal/Tests/Component/Assertion/InspectorTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Component\Assertion\InspectorTest.
- */
-
 namespace Drupal\Tests\Component\Assertion;
 
 use PHPUnit\Framework\TestCase;
diff --git a/web/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php b/web/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php
index 9cec9bd721d5c41e1454c0910917fe51e7b5612e..04a925d9d72f32e59795d546d53f91b68f8f5354 100644
--- a/web/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php
+++ b/web/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php
@@ -186,7 +186,7 @@ public function testDateTimestamp($input, array $initial, array $transform) {
    *
    * @param \Drupal\Component\Datetime\DateTimePlus $date
    *   DateTimePlus to test.
-   * @param string $input
+   * @param string|int $input
    *   The original input passed to the test method.
    * @param array $initial
    *   @see testTimestamp()
@@ -195,7 +195,7 @@ public function testDateTimestamp($input, array $initial, array $transform) {
    *
    * @internal
    */
-  public function assertDateTimestamp(DateTimePlus $date, string $input, array $initial, array $transform): void {
+  public function assertDateTimestamp(DateTimePlus $date, string|int $input, array $initial, array $transform): void {
     // Check format.
     $value = $date->format($initial['format']);
     $this->assertEquals($initial['expected_date'], $value, sprintf("Test new DateTimePlus(%s, %s): should be %s, found %s.", $input, $initial['timezone'], $initial['expected_date'], $value));
@@ -694,7 +694,7 @@ public function providerTestDateDiff() {
       ],
       [
         'input1' => DateTimePlus::createFromFormat('U', 3600),
-        'input2' => \DateTime::createFromFormat('U', 0),
+        'input2' => \DateTime::createFromFormat('U', '0'),
         'absolute' => FALSE,
         'expected' => $negative_1_hour,
       ],
@@ -706,7 +706,7 @@ public function providerTestDateDiff() {
       ],
       [
         'input1' => DateTimePlus::createFromFormat('U', 3600),
-        'input2' => \DateTime::createFromFormat('U', 0),
+        'input2' => \DateTime::createFromFormat('U', '0'),
         'absolute' => TRUE,
         'expected' => $positive_1_hour,
       ],
diff --git a/web/core/tests/Drupal/Tests/Component/DependencyInjection/ContainerTest.php b/web/core/tests/Drupal/Tests/Component/DependencyInjection/ContainerTest.php
index 8150946071bb4f15fe01904e200de5f4c6e19c26..23cc8a5572cd5b6676bdf76b00beb9f5ae3ea200 100644
--- a/web/core/tests/Drupal/Tests/Component/DependencyInjection/ContainerTest.php
+++ b/web/core/tests/Drupal/Tests/Component/DependencyInjection/ContainerTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Component\DependencyInjection\ContainerTest.
- */
-
 namespace Drupal\Tests\Component\DependencyInjection;
 
 use Drupal\Component\Utility\Crypt;
diff --git a/web/core/tests/Drupal/Tests/Component/DependencyInjection/Dumper/OptimizedPhpArrayDumperTest.php b/web/core/tests/Drupal/Tests/Component/DependencyInjection/Dumper/OptimizedPhpArrayDumperTest.php
index 5cd26aa6fff1cfeddf28cd34356fc7488581ba9f..9b06e06a8052029710c98e423264db6ae3e54b7d 100644
--- a/web/core/tests/Drupal/Tests/Component/DependencyInjection/Dumper/OptimizedPhpArrayDumperTest.php
+++ b/web/core/tests/Drupal/Tests/Component/DependencyInjection/Dumper/OptimizedPhpArrayDumperTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Component\DependencyInjection\Dumper\OptimizedPhpArrayDumperTest.
- */
-
 namespace Drupal\Tests\Component\DependencyInjection\Dumper {
 
   use Drupal\Component\Utility\Crypt;
@@ -527,7 +522,7 @@ public function publicPrivateDataProvider() {
     public function testGetServiceDefinitionForDecoratedService() {
       $bar_definition = new Definition('\stdClass');
       $bar_definition->setPublic(TRUE);
-      $bar_definition->setDecoratedService(new Reference('foo'));
+      $bar_definition->setDecoratedService((string) new Reference('foo'));
       $services['bar'] = $bar_definition;
 
       $this->containerBuilder->getDefinitions()->willReturn($services);
diff --git a/web/core/tests/Drupal/Tests/Component/HttpFoundation/SecuredRedirectResponseTest.php b/web/core/tests/Drupal/Tests/Component/HttpFoundation/SecuredRedirectResponseTest.php
index a22655c1f986f8b8d5d829a9defede2203945d8e..3cc97464f751dcbe658903dcf2d717c5c37d873e 100644
--- a/web/core/tests/Drupal/Tests/Component/HttpFoundation/SecuredRedirectResponseTest.php
+++ b/web/core/tests/Drupal/Tests/Component/HttpFoundation/SecuredRedirectResponseTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Component\HttpFoundation\SecuredRedirectResponseTest.
- */
-
 namespace Drupal\Tests\Component\HttpFoundation;
 
 use Drupal\Component\HttpFoundation\SecuredRedirectResponse;
diff --git a/web/core/tests/Drupal/Tests/Component/Plugin/Factory/ReflectionFactoryTest.php b/web/core/tests/Drupal/Tests/Component/Plugin/Factory/ReflectionFactoryTest.php
index 0f59ca828d9339701334d2adda692a9e7af10f97..7e19100a81f641494b4e9519d87390a7cddc30b7 100644
--- a/web/core/tests/Drupal/Tests/Component/Plugin/Factory/ReflectionFactoryTest.php
+++ b/web/core/tests/Drupal/Tests/Component/Plugin/Factory/ReflectionFactoryTest.php
@@ -1,12 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Component\Plugin\Factory\ReflectionFactoryTest.
- *
- * Also contains Argument* classes used as data for testing.
- */
-
 namespace Drupal\Tests\Component\Plugin\Factory;
 
 use Drupal\Component\Plugin\Factory\ReflectionFactory;
diff --git a/web/core/tests/Drupal/Tests/Component/ProxyBuilder/ProxyBuilderTest.php b/web/core/tests/Drupal/Tests/Component/ProxyBuilder/ProxyBuilderTest.php
index 92c627a8ada02b2d28f3a06d7a8eb27a5faa13b5..f539886c7c2fe3303fd17d3eebd0c28590db84e6 100644
--- a/web/core/tests/Drupal/Tests/Component/ProxyBuilder/ProxyBuilderTest.php
+++ b/web/core/tests/Drupal/Tests/Component/ProxyBuilder/ProxyBuilderTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Component\ProxyBuilder\ProxyBuilderTest.
- */
-
 namespace Drupal\Tests\Component\ProxyBuilder;
 
 use Drupal\Component\ProxyBuilder\ProxyBuilder;
diff --git a/web/core/tests/Drupal/Tests/Component/Utility/ArgumentsResolverTest.php b/web/core/tests/Drupal/Tests/Component/Utility/ArgumentsResolverTest.php
index 11cc7b36fa300b5c7f2135a1488dbf5be9020faa..3400801bc7042ace921b5fead1a899b35b9d4029 100644
--- a/web/core/tests/Drupal/Tests/Component/Utility/ArgumentsResolverTest.php
+++ b/web/core/tests/Drupal/Tests/Component/Utility/ArgumentsResolverTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Component\Utility\ArgumentsResolverTest.
- */
-
 namespace Drupal\Tests\Component\Utility;
 
 use Drupal\Component\Utility\ArgumentsResolver;
diff --git a/web/core/tests/Drupal/Tests/Component/Utility/HtmlTest.php b/web/core/tests/Drupal/Tests/Component/Utility/HtmlTest.php
index 3bc7f352548638d3e8c714d39b76170fd16a866a..8f74eae06185ebe4d3418495c4b854002fd69d5d 100644
--- a/web/core/tests/Drupal/Tests/Component/Utility/HtmlTest.php
+++ b/web/core/tests/Drupal/Tests/Component/Utility/HtmlTest.php
@@ -379,6 +379,7 @@ public function providerTestTransformRootRelativeUrlsToAbsolute() {
         "$tag_name, srcset, $base_path: root-relative" => ["<$tag_name srcset=\"http://example.com{$base_path}already-absolute 200w, {$base_path}root-relative 300w\">root-relative test</$tag_name>", 'http://example.com', "<$tag_name srcset=\"http://example.com{$base_path}already-absolute 200w, http://example.com{$base_path}root-relative 300w\">root-relative test</$tag_name>"],
         "$tag_name, srcset, $base_path: protocol-relative" => ["<$tag_name srcset=\"http://example.com{$base_path}already-absolute 200w, //example.com{$base_path}protocol-relative 300w\">protocol-relative test</$tag_name>", 'http://example.com', FALSE],
         "$tag_name, srcset, $base_path: absolute" => ["<$tag_name srcset=\"http://example.com{$base_path}already-absolute 200w, http://example.com{$base_path}absolute 300w\">absolute test</$tag_name>", 'http://example.com', FALSE],
+        "$tag_name, empty srcset" => ["<$tag_name srcset=\"\">empty test</$tag_name>", 'http://example.com', FALSE],
       ];
 
       foreach (['href', 'poster', 'src', 'cite', 'data', 'action', 'formaction', 'about'] as $attribute) {
diff --git a/web/core/tests/Drupal/Tests/Component/Utility/VariableTest.php b/web/core/tests/Drupal/Tests/Component/Utility/VariableTest.php
index 01d17fc4bab6dedacb838f3c5ad253d24a4f0a83..0c291029f6f605f9f5bcf3286cbded6457bbe9ca 100644
--- a/web/core/tests/Drupal/Tests/Component/Utility/VariableTest.php
+++ b/web/core/tests/Drupal/Tests/Component/Utility/VariableTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Component\Utility\VariableTest.
- */
-
 namespace Drupal\Tests\Component\Utility;
 
 use Drupal\Component\Utility\Variable;
diff --git a/web/core/tests/Drupal/Tests/Core/Access/AccessManagerTest.php b/web/core/tests/Drupal/Tests/Core/Access/AccessManagerTest.php
index 8a3a71da0b9b66c101f97f2377640f0d8826bae5..568a2b0820f7988ac917e0f5cb30a01e2d781376 100644
--- a/web/core/tests/Drupal/Tests/Core/Access/AccessManagerTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Access/AccessManagerTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Access\AccessManagerTest.
- */
-
 namespace Drupal\Tests\Core\Access;
 
 use Drupal\Core\Access\AccessCheckInterface;
diff --git a/web/core/tests/Drupal/Tests/Core/Access/AccessResultTest.php b/web/core/tests/Drupal/Tests/Core/Access/AccessResultTest.php
index 24ca0617f9c66ed7c7aaf331304c62775e2cc6cf..2234dde14c2935f656ed8d3f6f5ef3685c74ce19 100644
--- a/web/core/tests/Drupal/Tests/Core/Access/AccessResultTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Access/AccessResultTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Access\AccessResultTest.
- */
-
 namespace Drupal\Tests\Core\Access;
 
 use Drupal\Core\Access\AccessResult;
diff --git a/web/core/tests/Drupal/Tests/Core/Access/CustomAccessCheckTest.php b/web/core/tests/Drupal/Tests/Core/Access/CustomAccessCheckTest.php
index 1218df686cc635b3546899ebc654c0d0223246a9..efa15f824e2417dc0cff71ff27103c24f0034f84 100644
--- a/web/core/tests/Drupal/Tests/Core/Access/CustomAccessCheckTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Access/CustomAccessCheckTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Access\CustomAccessCheckTest.
- */
-
 namespace Drupal\Tests\Core\Access;
 
 use Drupal\Core\Access\AccessResult;
diff --git a/web/core/tests/Drupal/Tests/Core/Asset/AssetResolverTest.php b/web/core/tests/Drupal/Tests/Core/Asset/AssetResolverTest.php
index 76ee6d23f870e43654ac2025b117236cafd61704..258716826308f0178d1ba30e5db41ccce55713d5 100644
--- a/web/core/tests/Drupal/Tests/Core/Asset/AssetResolverTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Asset/AssetResolverTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Asset\AssetResolverTest.
- */
-
 namespace Drupal\Tests\Core\Asset;
 
 use Drupal\Core\Asset\AssetResolver;
diff --git a/web/core/tests/Drupal/Tests/Core/Asset/LibraryDependencyResolverTest.php b/web/core/tests/Drupal/Tests/Core/Asset/LibraryDependencyResolverTest.php
index 24f21b35b391a43d069ee7a0eee412e15b1cd0bd..a8425ac20783d4efa8ca18e60ebc9be4f8206030 100644
--- a/web/core/tests/Drupal/Tests/Core/Asset/LibraryDependencyResolverTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Asset/LibraryDependencyResolverTest.php
@@ -41,9 +41,11 @@ class LibraryDependencyResolverTest extends UnitTestCase {
     'no_deps_a' => ['js' => [], 'css' => []],
     'no_deps_b' => ['js' => [], 'css' => []],
     'no_deps_c' => ['js' => [], 'css' => []],
+    'no_deps_d' => ['js' => [], 'css' => []],
     'deps_a' => ['js' => [], 'css' => [], 'dependencies' => ['test/no_deps_a']],
     'deps_b' => ['js' => [], 'css' => [], 'dependencies' => ['test/no_deps_a', 'test/no_deps_b']],
     'deps_c' => ['js' => [], 'css' => [], 'dependencies' => ['test/no_deps_b', 'test/no_deps_a']],
+    'deps_d' => ['js' => [], 'css' => [], 'dependencies' => ['test/no_deps_d']],
     'nested_deps_a' => ['js' => [], 'css' => [], 'dependencies' => ['test/deps_a']],
     'nested_deps_b' => ['js' => [], 'css' => [], 'dependencies' => ['test/nested_deps_a']],
     'nested_deps_c' => ['js' => [], 'css' => [], 'dependencies' => ['test/nested_deps_b']],
@@ -139,6 +141,8 @@ public function providerTestGetMinimalRepresentativeSubset() {
       [['test/deps_b', 'test/deps_a'], ['test/deps_b', 'test/deps_a']],
       [['test/deps_b', 'test/deps_c'], ['test/deps_b', 'test/deps_c']],
       [['test/deps_c', 'test/deps_b'], ['test/deps_c', 'test/deps_b']],
+      [['test/deps_a', 'test/deps_d', 'test/no_deps_a'], ['test/deps_a', 'test/deps_d']],
+      [['test/deps_a', 'test/deps_d', 'test/no_deps_d'], ['test/deps_a', 'test/deps_d']],
       // Multi-level (indirect) dependencies.
       [['test/nested_deps_a'], ['test/nested_deps_a']],
       [['test/nested_deps_b'], ['test/nested_deps_b']],
diff --git a/web/core/tests/Drupal/Tests/Core/Asset/LibraryDiscoveryParserTest.php b/web/core/tests/Drupal/Tests/Core/Asset/LibraryDiscoveryParserTest.php
index e21bf5f47295c136e67e929f18bdfacc3e003e6f..a05a5a0e4cffb54d44b4ae51f57ca43407cd1b84 100644
--- a/web/core/tests/Drupal/Tests/Core/Asset/LibraryDiscoveryParserTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Asset/LibraryDiscoveryParserTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Asset\LibraryDiscoveryParserTest.
- */
-
 namespace Drupal\Tests\Core\Asset;
 
 use Drupal\Core\Asset\Exception\IncompleteLibraryDefinitionException;
diff --git a/web/core/tests/Drupal/Tests/Core/Authentication/AuthenticationCollectorTest.php b/web/core/tests/Drupal/Tests/Core/Authentication/AuthenticationCollectorTest.php
index e3763c88a965d7291c34d3559e17e340378658ca..00cec2a6209fec39803137f2b471a6dac790d58c 100644
--- a/web/core/tests/Drupal/Tests/Core/Authentication/AuthenticationCollectorTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Authentication/AuthenticationCollectorTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Authentication\AuthenticationCollectorTest.
- */
-
 namespace Drupal\Tests\Core\Authentication;
 
 use Drupal\Core\Authentication\AuthenticationCollector;
diff --git a/web/core/tests/Drupal/Tests/Core/Authentication/AuthenticationManagerTest.php b/web/core/tests/Drupal/Tests/Core/Authentication/AuthenticationManagerTest.php
index 6e0ac7c924a317673fdbd0458319f4b7cbd280c7..f1964a2d2a5fac29943ec354ed8186323499c64c 100644
--- a/web/core/tests/Drupal/Tests/Core/Authentication/AuthenticationManagerTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Authentication/AuthenticationManagerTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Authentication\AuthenticationManagerTest.
- */
-
 namespace Drupal\Tests\Core\Authentication;
 
 use Drupal\Core\Authentication\AuthenticationCollector;
diff --git a/web/core/tests/Drupal/Tests/Core/Cache/Context/CacheContextsManagerTest.php b/web/core/tests/Drupal/Tests/Core/Cache/Context/CacheContextsManagerTest.php
index 2066b5ef3fe411e151619687c5c66fd8aaa76441..36b23bf6fc903a5e10e015a68312cc990527b54d 100644
--- a/web/core/tests/Drupal/Tests/Core/Cache/Context/CacheContextsManagerTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Cache/Context/CacheContextsManagerTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Cache\Context\CacheContextsManagerTest.
- */
-
 namespace Drupal\Tests\Core\Cache\Context;
 
 use Drupal\Core\Cache\CacheableMetadata;
diff --git a/web/core/tests/Drupal/Tests/Core/Condition/ConditionAccessResolverTraitTest.php b/web/core/tests/Drupal/Tests/Core/Condition/ConditionAccessResolverTraitTest.php
index 053d30fa6f02a44594e4cbc0729afd325a864c59..82e1c6d551ec4edd8d2d5d2becef166d220543ab 100644
--- a/web/core/tests/Drupal/Tests/Core/Condition/ConditionAccessResolverTraitTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Condition/ConditionAccessResolverTraitTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Condition\ConditionAccessResolverTraitTest.
- */
-
 namespace Drupal\Tests\Core\Condition;
 
 use Drupal\Component\Plugin\Exception\ContextException;
diff --git a/web/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityBaseUnitTest.php b/web/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityBaseUnitTest.php
index 70e7c059c723804b606e25b31ea65c0029dd5bfe..2a50bd6882f1486e97e73100dbe423f68af8a133 100644
--- a/web/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityBaseUnitTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityBaseUnitTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Config\Entity\ConfigEntityBaseUnitTest.
- */
-
 namespace Drupal\Tests\Core\Config\Entity;
 
 use Drupal\Component\Plugin\PluginManagerInterface;
diff --git a/web/core/tests/Drupal/Tests/Core/Controller/ControllerResolverTest.php b/web/core/tests/Drupal/Tests/Core/Controller/ControllerResolverTest.php
index 862d4aa891736c58ea507bba445321b8d5257b1d..050d436b84a8fe481976f6415724009808a36bcc 100644
--- a/web/core/tests/Drupal/Tests/Core/Controller/ControllerResolverTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Controller/ControllerResolverTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Controller\ControllerResolverTest.
- */
-
 namespace Drupal\Tests\Core\Controller;
 
 use Drupal\Core\Controller\ControllerResolver;
diff --git a/web/core/tests/Drupal/Tests/Core/Controller/TitleResolverTest.php b/web/core/tests/Drupal/Tests/Core/Controller/TitleResolverTest.php
index 58ea6315a442469036fba86194dfd8588438b552..2716e4e45ea3c61d11c869eb538c647293448d36 100644
--- a/web/core/tests/Drupal/Tests/Core/Controller/TitleResolverTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Controller/TitleResolverTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Controller\TitleResolverTest.
- */
-
 namespace Drupal\Tests\Core\Controller;
 
 use Drupal\Core\Controller\TitleResolver;
diff --git a/web/core/tests/Drupal/Tests/Core/Datetime/DrupalDateTimeTest.php b/web/core/tests/Drupal/Tests/Core/Datetime/DrupalDateTimeTest.php
index 070aa13b1b0b644615eff6ece4f4e34cbfe625d5..d9d70051a81736979b7a0f438518add8472c5a90 100644
--- a/web/core/tests/Drupal/Tests/Core/Datetime/DrupalDateTimeTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Datetime/DrupalDateTimeTest.php
@@ -109,7 +109,7 @@ public function providerTestDateDiff() {
       ],
       [
         'input1' => DrupalDateTime::createFromFormat('U', 3600, $utc_tz, $settings),
-        'input2' => \DateTime::createFromFormat('U', 0),
+        'input2' => \DateTime::createFromFormat('U', '0'),
         'absolute' => FALSE,
         'expected' => $negative_1_hour,
       ],
@@ -121,7 +121,7 @@ public function providerTestDateDiff() {
       ],
       [
         'input1' => DrupalDateTime::createFromFormat('U', 3600, $utc_tz, $settings),
-        'input2' => \DateTime::createFromFormat('U', 0),
+        'input2' => \DateTime::createFromFormat('U', '0'),
         'absolute' => TRUE,
         'expected' => $positive_1_hour,
       ],
diff --git a/web/core/tests/Drupal/Tests/Core/DependencyInjection/Compiler/BackendCompilerPassTest.php b/web/core/tests/Drupal/Tests/Core/DependencyInjection/Compiler/BackendCompilerPassTest.php
index 0f584772b44939b4a95b01489129917808cecdd9..bd99c0dd1a29cf2ec6bf57196f920defc1cc1939 100644
--- a/web/core/tests/Drupal/Tests/Core/DependencyInjection/Compiler/BackendCompilerPassTest.php
+++ b/web/core/tests/Drupal/Tests/Core/DependencyInjection/Compiler/BackendCompilerPassTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\DependencyInjection\Compiler\BackendCompilerPassTest.
- */
-
 namespace Drupal\Tests\Core\DependencyInjection\Compiler;
 
 use Drupal\Core\DependencyInjection\Compiler\BackendCompilerPass;
diff --git a/web/core/tests/Drupal/Tests/Core/DependencyInjection/Compiler/TaggedHandlersPassTest.php b/web/core/tests/Drupal/Tests/Core/DependencyInjection/Compiler/TaggedHandlersPassTest.php
index 85d20ed284df1b573250926986c5fd3edae03ff7..9ec78bf39eebc18d7c281cf2b7ba7c21b55d12e4 100644
--- a/web/core/tests/Drupal/Tests/Core/DependencyInjection/Compiler/TaggedHandlersPassTest.php
+++ b/web/core/tests/Drupal/Tests/Core/DependencyInjection/Compiler/TaggedHandlersPassTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\DependencyInjection\Compiler\TaggedHandlersPassTest.
- */
-
 namespace Drupal\Tests\Core\DependencyInjection\Compiler;
 
 use Drupal\Core\DependencyInjection\Compiler\TaggedHandlersPass;
diff --git a/web/core/tests/Drupal/Tests/Core/DependencyInjection/DependencySerializationTest.php b/web/core/tests/Drupal/Tests/Core/DependencyInjection/DependencySerializationTest.php
index 0da0cdc548a482469d905f1b6935ae903265069b..bfba22cddc083486c035702bdf5eeebcd995cdae 100644
--- a/web/core/tests/Drupal/Tests/Core/DependencyInjection/DependencySerializationTest.php
+++ b/web/core/tests/Drupal/Tests/Core/DependencyInjection/DependencySerializationTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\DependencyInjection\DependencySerializationTest.
- */
-
 namespace Drupal\Tests\Core\DependencyInjection;
 
 use Drupal\Component\DependencyInjection\ReverseContainer;
diff --git a/web/core/tests/Drupal/Tests/Core/DependencyInjection/YamlFileLoaderTest.php b/web/core/tests/Drupal/Tests/Core/DependencyInjection/YamlFileLoaderTest.php
index 54d996bd07b6813143d65fb5da4d832b93e17180..632edb6d989149b5c9c4deeddf55ba997ecdbf88 100644
--- a/web/core/tests/Drupal/Tests/Core/DependencyInjection/YamlFileLoaderTest.php
+++ b/web/core/tests/Drupal/Tests/Core/DependencyInjection/YamlFileLoaderTest.php
@@ -171,10 +171,16 @@ public function providerTestExceptions() {
       ],
       'YAML must be valid' => [<<<YAML
    do not:
-      do this for the love of Foo Bar!
+      do: this: for the love of Foo Bar!
 YAML,
         'The file "vfs://drupal/modules/example/example.yml" does not contain valid YAML',
       ],
+      'YAML must have expected keys' => [<<<YAML
+      "do not":
+        do: this
+      YAML,
+        'The service file "vfs://drupal/modules/example/example.yml" is not valid: it contains invalid root key(s) "do not". Services have to be added under "services" and Parameters under "parameters".',
+      ],
     ];
   }
 
diff --git a/web/core/tests/Drupal/Tests/Core/Entity/EntityFieldManagerTest.php b/web/core/tests/Drupal/Tests/Core/Entity/EntityFieldManagerTest.php
index 16c4f001380dfa726d7c47c40ecfa7095604ef84..d7e87ff4d78798da5743228e9ec4603f983c9bf2 100644
--- a/web/core/tests/Drupal/Tests/Core/Entity/EntityFieldManagerTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Entity/EntityFieldManagerTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Entity\EntityFieldManagerTest.
- */
-
 namespace Drupal\Tests\Core\Entity;
 
 use Drupal\Component\Plugin\Exception\PluginNotFoundException;
diff --git a/web/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php b/web/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php
index 08d8540889cc4c5ebd9687c549a4a397f1d740c0..d2a2b46716de5e4b96c9253ccd96fb8e7d184a64 100644
--- a/web/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Entity\EntityListBuilderTest.
- */
-
 namespace Drupal\Tests\Core\Entity;
 
 use Drupal\Core\Access\AccessResult;
diff --git a/web/core/tests/Drupal/Tests/Core/Entity/EntityResolverManagerTest.php b/web/core/tests/Drupal/Tests/Core/Entity/EntityResolverManagerTest.php
index 4b218638c1420c76583457ffcd68bb69694959cf..5ef74c2e15008a08442254bc3e41adafa5f511e9 100644
--- a/web/core/tests/Drupal/Tests/Core/Entity/EntityResolverManagerTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Entity/EntityResolverManagerTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Entity\EntityResolverManagerTest.
- */
-
 namespace Drupal\Tests\Core\Entity;
 
 use Drupal\Core\Entity\EntityBase;
diff --git a/web/core/tests/Drupal/Tests/Core/Entity/EntityTypeManagerTest.php b/web/core/tests/Drupal/Tests/Core/Entity/EntityTypeManagerTest.php
index f6a34fc4bdb2dc13edd7513ead02240642226e05..246b925d75777903e622935e926e84bfeecf30ac 100644
--- a/web/core/tests/Drupal/Tests/Core/Entity/EntityTypeManagerTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Entity/EntityTypeManagerTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Entity\EntityTypeManagerTest.
- */
-
 namespace Drupal\Tests\Core\Entity;
 
 use Drupal\Component\Plugin\Discovery\DiscoveryInterface;
diff --git a/web/core/tests/Drupal/Tests/Core/Entity/Routing/DefaultHtmlRouteProviderTest.php b/web/core/tests/Drupal/Tests/Core/Entity/Routing/DefaultHtmlRouteProviderTest.php
index 9c8e310cef9e5d0ab988b7bf21db29c79f8767e8..4a81828189b9f5dd9563339947e692a948d126a1 100644
--- a/web/core/tests/Drupal/Tests/Core/Entity/Routing/DefaultHtmlRouteProviderTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Entity/Routing/DefaultHtmlRouteProviderTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Entity\Routing\DefaultHtmlRouteProviderTest.
- */
-
 namespace Drupal\Tests\Core\Entity\Routing;
 
 use Drupal\Core\Config\Entity\ConfigEntityTypeInterface;
diff --git a/web/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageTest.php b/web/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageTest.php
index 64a278faa2b0117cba680b96f16f4d3f42a9c39a..d9aab845abb23920163bd047cec44c9050e7417b 100644
--- a/web/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Entity\Sql\SqlContentEntityStorageTest.
- */
-
 namespace Drupal\Tests\Core\Entity\Sql;
 
 use Drupal\Core\Cache\MemoryCache\MemoryCache;
diff --git a/web/core/tests/Drupal/Tests/Core/Extension/ThemeHandlerTest.php b/web/core/tests/Drupal/Tests/Core/Extension/ThemeHandlerTest.php
index 4435380e6fc12c446d3a2172c1723b055db1d1e6..2e0012c7a9e0f35cfb5fea1ff0fb86c4e20cec6d 100644
--- a/web/core/tests/Drupal/Tests/Core/Extension/ThemeHandlerTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Extension/ThemeHandlerTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Extension\ThemeHandlerTest.
- */
-
 namespace Drupal\Tests\Core\Extension;
 
 use Composer\Autoload\ClassLoader;
diff --git a/web/core/tests/Drupal/Tests/Core/Field/PluginSettingsBaseTest.php b/web/core/tests/Drupal/Tests/Core/Field/PluginSettingsBaseTest.php
index 1312d861d16f591b70a21fa371d14253dac4f5d5..25327ce3cdd70462b0ef2e64e513583df18d0042 100644
--- a/web/core/tests/Drupal/Tests/Core/Field/PluginSettingsBaseTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Field/PluginSettingsBaseTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Field\PluginSettingsBaseTest.
- */
-
 namespace Drupal\Tests\Core\Field;
 
 use Drupal\Core\Field\PluginSettingsBase;
diff --git a/web/core/tests/Drupal/Tests/Core/Form/EventSubscriber/FormAjaxSubscriberTest.php b/web/core/tests/Drupal/Tests/Core/Form/EventSubscriber/FormAjaxSubscriberTest.php
index d1495335f354af47edcb540ba561475d68ca5fbd..a1b9b3f51937545820ac23f1987619077cc2b11b 100644
--- a/web/core/tests/Drupal/Tests/Core/Form/EventSubscriber/FormAjaxSubscriberTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Form/EventSubscriber/FormAjaxSubscriberTest.php
@@ -195,7 +195,7 @@ public function testOnExceptionBrokenPostRequest() {
     $container->set('renderer', $renderer);
     \Drupal::setContainer($container);
 
-    $exception = new BrokenPostRequestException(32 * 1e6);
+    $exception = new BrokenPostRequestException((int) (32 * 1e6));
     $request = new Request([FormBuilderInterface::AJAX_FORM_REQUEST => TRUE]);
 
     $event = new ExceptionEvent($this->httpKernel, $request, HttpKernelInterface::MAIN_REQUEST, $exception);
diff --git a/web/core/tests/Drupal/Tests/Core/Form/FormBuilderTest.php b/web/core/tests/Drupal/Tests/Core/Form/FormBuilderTest.php
index fa6c899e38fed202ed7319d1b39ce3468056e94a..a89ee1179a4bbd9ce4d94e57eb1cf4f5a982b6ed 100644
--- a/web/core/tests/Drupal/Tests/Core/Form/FormBuilderTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Form/FormBuilderTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Form\FormBuilderTest.
- */
-
 namespace Drupal\Tests\Core\Form;
 
 use Drupal\Component\Utility\Html;
diff --git a/web/core/tests/Drupal/Tests/Core/Form/FormStateTest.php b/web/core/tests/Drupal/Tests/Core/Form/FormStateTest.php
index e553d887cd95a11760aa3d7d04ab96caf38cc333..fbef87046e7fb18a2bc247884dc3876300e77b55 100644
--- a/web/core/tests/Drupal/Tests/Core/Form/FormStateTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Form/FormStateTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Form\FormStateTest.
- */
-
 namespace Drupal\Tests\Core\Form;
 
 use Drupal\Core\Form\FormInterface;
@@ -373,10 +368,10 @@ public function testTemporaryValue() {
     $this->assertFalse($form_state->hasTemporaryValue('rainbow_sparkles'));
     $form_state->setTemporaryValue('rainbow_sparkles', 'yes please');
     $this->assertSame($form_state->getTemporaryValue('rainbow_sparkles'), 'yes please');
-    $this->assertTrue($form_state->hasTemporaryValue('rainbow_sparkles'), TRUE);
+    $this->assertTrue($form_state->hasTemporaryValue('rainbow_sparkles'));
     $form_state->setTemporaryValue(['rainbow_sparkles', 'magic_ponies'], 'yes please');
     $this->assertSame($form_state->getTemporaryValue(['rainbow_sparkles', 'magic_ponies']), 'yes please');
-    $this->assertTrue($form_state->hasTemporaryValue(['rainbow_sparkles', 'magic_ponies']), TRUE);
+    $this->assertTrue($form_state->hasTemporaryValue(['rainbow_sparkles', 'magic_ponies']));
   }
 
   /**
diff --git a/web/core/tests/Drupal/Tests/Core/Logger/LoggerChannelTest.php b/web/core/tests/Drupal/Tests/Core/Logger/LoggerChannelTest.php
index fb4eb47acc0678fedfb3abf5fd335249b6b1f005..fa82a208b96a50b7f4f8491f1b4e2b30588c93d2 100644
--- a/web/core/tests/Drupal/Tests/Core/Logger/LoggerChannelTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Logger/LoggerChannelTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Logger\LoggerChannelTest.
- */
-
 namespace Drupal\Tests\Core\Logger;
 
 use Drupal\Core\Logger\LoggerChannel;
diff --git a/web/core/tests/Drupal/Tests/Core/Mail/MailManagerTest.php b/web/core/tests/Drupal/Tests/Core/Mail/MailManagerTest.php
index b87260d5673a599395108c0928a9fc2c08b55bbc..e358a76fafaa9a3c46617d134731b39dbcf0c376 100644
--- a/web/core/tests/Drupal/Tests/Core/Mail/MailManagerTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Mail/MailManagerTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Mail\MailManagerTest.
- */
-
 namespace Drupal\Tests\Core\Mail;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
diff --git a/web/core/tests/Drupal/Tests/Core/Menu/LocalActionManagerTest.php b/web/core/tests/Drupal/Tests/Core/Menu/LocalActionManagerTest.php
index 11c845484b94aa55600b59e51a3e2c914bbad230..24110f57eb773b47f8ed92d3e4ab13cf2cfe8a5d 100644
--- a/web/core/tests/Drupal/Tests/Core/Menu/LocalActionManagerTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Menu/LocalActionManagerTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Menu\LocalActionManagerTest.
- */
-
 namespace Drupal\Tests\Core\Menu;
 
 use Drupal\Component\Plugin\Discovery\DiscoveryInterface;
diff --git a/web/core/tests/Drupal/Tests/Core/Menu/LocalTaskDefaultTest.php b/web/core/tests/Drupal/Tests/Core/Menu/LocalTaskDefaultTest.php
index 3bd8e91f8a6f24a2ab99f71d9a17c8961cffed33..905107086d2c799c187a55c64018cd672fb62d88 100644
--- a/web/core/tests/Drupal/Tests/Core/Menu/LocalTaskDefaultTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Menu/LocalTaskDefaultTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Menu\LocalTaskDefaultTest.
- */
-
 namespace Drupal\Tests\Core\Menu;
 
 use Drupal\Core\Menu\LocalTaskDefault;
diff --git a/web/core/tests/Drupal/Tests/Core/Password/PhpPasswordTest.php b/web/core/tests/Drupal/Tests/Core/Password/PhpPasswordTest.php
index 21f7266d019ca5230b23d3f5dfa34cb6109aacdc..f781fd7d6e94f7f6c735135d915a6f23ad9d6bb0 100644
--- a/web/core/tests/Drupal/Tests/Core/Password/PhpPasswordTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Password/PhpPasswordTest.php
@@ -112,7 +112,7 @@ public function providerLongPasswords() {
 
     // Check a string of 3-byte UTF-8 characters, 510 byte long password is
     // allowed.
-    $len = floor(PasswordInterface::PASSWORD_MAX_LENGTH / 3);
+    $len = (int) floor(PasswordInterface::PASSWORD_MAX_LENGTH / 3);
     $diff = PasswordInterface::PASSWORD_MAX_LENGTH % 3;
     $passwords['utf8'] = [str_repeat('€', $len), TRUE];
     // 512 byte long password is allowed.
diff --git a/web/core/tests/Drupal/Tests/Core/Plugin/CategorizingPluginManagerTraitTest.php b/web/core/tests/Drupal/Tests/Core/Plugin/CategorizingPluginManagerTraitTest.php
index de59fcf442ec3fcc97f3b144540f092777d32dcf..98c2f40981316297ab156aa54549ba4df09a17ba 100644
--- a/web/core/tests/Drupal/Tests/Core/Plugin/CategorizingPluginManagerTraitTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Plugin/CategorizingPluginManagerTraitTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Plugin\CategorizingPluginManagerTraitTest.
- */
-
 namespace Drupal\Tests\Core\Plugin;
 
 use Drupal\Component\Plugin\CategorizingPluginManagerInterface;
diff --git a/web/core/tests/Drupal/Tests/Core/Plugin/Context/ContextTest.php b/web/core/tests/Drupal/Tests/Core/Plugin/Context/ContextTest.php
index 5db4b9690f9002b5a7983830d81afc77a824ad34..a1c49a6b54f44cfc30a3ff07200927d445a77b81 100644
--- a/web/core/tests/Drupal/Tests/Core/Plugin/Context/ContextTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Plugin/Context/ContextTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Plugin\Context\ContextTest.
- */
-
 namespace Drupal\Tests\Core\Plugin\Context;
 
 use Drupal\Core\Cache\CacheableDependencyInterface;
diff --git a/web/core/tests/Drupal/Tests/Core/Plugin/ContextHandlerTest.php b/web/core/tests/Drupal/Tests/Core/Plugin/ContextHandlerTest.php
index 04a8bed22d74750c89a57bd1b6f12c07d7fdcb91..5548823831778830ce5e25d02a3dca16b8db5dbe 100644
--- a/web/core/tests/Drupal/Tests/Core/Plugin/ContextHandlerTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Plugin/ContextHandlerTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Plugin\ContextHandlerTest.
- */
-
 namespace Drupal\Tests\Core\Plugin;
 
 use Drupal\Component\Plugin\ConfigurableInterface;
diff --git a/web/core/tests/Drupal/Tests/Core/ProxyBuilder/ProxyBuilderTest.php b/web/core/tests/Drupal/Tests/Core/ProxyBuilder/ProxyBuilderTest.php
index 33bdef6f220c72ee98cbe9db53469edcd22babca..1804182b799c835b21706dc76592f56ac53d4b6b 100644
--- a/web/core/tests/Drupal/Tests/Core/ProxyBuilder/ProxyBuilderTest.php
+++ b/web/core/tests/Drupal/Tests/Core/ProxyBuilder/ProxyBuilderTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\ProxyBuilder\ProxyBuilderTest.
- */
-
 namespace Drupal\Tests\Core\ProxyBuilder;
 
 use Drupal\Core\ProxyBuilder\ProxyBuilder;
diff --git a/web/core/tests/Drupal/Tests/Core/Render/ElementInfoManagerTest.php b/web/core/tests/Drupal/Tests/Core/Render/ElementInfoManagerTest.php
index ed06974eec193746800ef4242068cb6233cfa9ac..b53357f7a040682c622737e7fd3fc153884131a0 100644
--- a/web/core/tests/Drupal/Tests/Core/Render/ElementInfoManagerTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Render/ElementInfoManagerTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Render\ElementInfoManagerTest.
- */
-
 namespace Drupal\Tests\Core\Render;
 
 use Drupal\Core\Render\ElementInfoManager;
diff --git a/web/core/tests/Drupal/Tests/Core/Render/RendererBubblingTest.php b/web/core/tests/Drupal/Tests/Core/Render/RendererBubblingTest.php
index e9041d9deaa491be7fc9082329e1f5449850a462..3a31f874e6e293c110200e5bf618a6d4e9731702 100644
--- a/web/core/tests/Drupal/Tests/Core/Render/RendererBubblingTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Render/RendererBubblingTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Render\RendererBubblingTest.
- */
-
 namespace Drupal\Tests\Core\Render;
 
 use Drupal\Core\Cache\MemoryBackend;
@@ -562,7 +557,7 @@ public function testBubblingWithPrerender($test_element) {
     $this->memoryCache->set('cached_nested', ['#markup' => 'Cached nested!', '#attached' => [], '#cache' => ['contexts' => [], 'tags' => []]]);
 
     // Simulate the rendering of an entire response (i.e. a root call).
-    $output = $this->renderer->renderRoot($test_element);
+    $output = (string) $this->renderer->renderRoot($test_element);
 
     // First, assert the render array is of the expected form.
     $this->assertEquals('Cache context!Cache tag!Asset!Placeholder!barquxNested!Cached nested!', trim($output), 'Expected HTML generated.');
diff --git a/web/core/tests/Drupal/Tests/Core/Render/RendererPlaceholdersTest.php b/web/core/tests/Drupal/Tests/Core/Render/RendererPlaceholdersTest.php
index 06685be824ccfa2938527bb523c6d9fdb8964140..9e7cb16171e4918aad26771d6212433ae8c6e2a2 100644
--- a/web/core/tests/Drupal/Tests/Core/Render/RendererPlaceholdersTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Render/RendererPlaceholdersTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Render\RendererPlaceholdersTest.
- */
-
 namespace Drupal\Tests\Core\Render;
 
 use Drupal\Component\Utility\Crypt;
diff --git a/web/core/tests/Drupal/Tests/Core/Render/RendererRecursionTest.php b/web/core/tests/Drupal/Tests/Core/Render/RendererRecursionTest.php
index ce26cf14d906076f12b32a2d526cd53ea733dab5..d9716c39ed298adb063aa6aabd9386163851ac75 100644
--- a/web/core/tests/Drupal/Tests/Core/Render/RendererRecursionTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Render/RendererRecursionTest.php
@@ -70,7 +70,7 @@ public function testRenderRecursionWithNestedRender() {
     $this->setUpRequest();
 
     $callable = function ($markup) {
-      $this->assertStringStartsWith('<drupal-render-placeholder', $markup, 'Rendered complex child output as expected, without the placeholder replaced, i.e. with just the placeholder.');
+      $this->assertStringStartsWith('<drupal-render-placeholder', (string) $markup, 'Rendered complex child output as expected, without the placeholder replaced, i.e. with just the placeholder.');
       return $markup;
     };
 
diff --git a/web/core/tests/Drupal/Tests/Core/Render/RendererTest.php b/web/core/tests/Drupal/Tests/Core/Render/RendererTest.php
index 3a942e829f84bf73a7b3e2d0c4206cd0e5af368c..ad8a85d12de647ffe06bead14399cf742909ab46 100644
--- a/web/core/tests/Drupal/Tests/Core/Render/RendererTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Render/RendererTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Render\RendererTest.
- */
-
 namespace Drupal\Tests\Core\Render;
 
 use Drupal\Component\Render\MarkupInterface;
@@ -501,7 +496,7 @@ public function testRenderSorting() {
         '#markup' => $first,
       ],
     ];
-    $output = $this->renderer->renderRoot($elements);
+    $output = (string) $this->renderer->renderRoot($elements);
 
     // The lowest weight element should appear last in $output.
     $this->assertGreaterThan(strpos($output, $first), strpos($output, $second));
@@ -537,7 +532,7 @@ public function testRenderSortingWithSetHashSorted() {
       ],
       '#sorted' => TRUE,
     ];
-    $output = $this->renderer->renderRoot($elements);
+    $output = (string) $this->renderer->renderRoot($elements);
 
     // The elements should appear in output in the same order as the array.
     $this->assertLessThan(strpos($output, $first), strpos($output, $second));
diff --git a/web/core/tests/Drupal/Tests/Core/Render/RendererTestBase.php b/web/core/tests/Drupal/Tests/Core/Render/RendererTestBase.php
index 4419f04ceb4036a302f4660abb2b684c212b276f..d85a5d34b5850033f7b4efbcc7f07882629e963b 100644
--- a/web/core/tests/Drupal/Tests/Core/Render/RendererTestBase.php
+++ b/web/core/tests/Drupal/Tests/Core/Render/RendererTestBase.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Render\RendererTestBase.
- */
-
 namespace Drupal\Tests\Core\Render;
 
 use Drupal\Core\Cache\Cache;
diff --git a/web/core/tests/Drupal/Tests/Core/Routing/RouteBuilderTest.php b/web/core/tests/Drupal/Tests/Core/Routing/RouteBuilderTest.php
index a9986d55069044f57195182551a832c4237b07ff..a9e33597dfdff6d1d237033a56646017e2887c18 100644
--- a/web/core/tests/Drupal/Tests/Core/Routing/RouteBuilderTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Routing/RouteBuilderTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Routing\RouteBuilderTest.
- */
-
 namespace Drupal\Tests\Core\Routing;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
diff --git a/web/core/tests/Drupal/Tests/Core/StackMiddleware/NegotiationMiddlewareTest.php b/web/core/tests/Drupal/Tests/Core/StackMiddleware/NegotiationMiddlewareTest.php
index a185f100bb1d20bd86b42db6e267fe622eaecb73..5882a20ecbb6f0945947f2eefc8869fad89c4a33 100644
--- a/web/core/tests/Drupal/Tests/Core/StackMiddleware/NegotiationMiddlewareTest.php
+++ b/web/core/tests/Drupal/Tests/Core/StackMiddleware/NegotiationMiddlewareTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\StackMiddleware\NegotiationMiddlewareTest.
- */
-
 namespace Drupal\Tests\Core\StackMiddleware;
 
 use Drupal\Core\StackMiddleware\NegotiationMiddleware;
diff --git a/web/core/tests/Drupal/Tests/Core/StringTranslation/TranslationManagerTest.php b/web/core/tests/Drupal/Tests/Core/StringTranslation/TranslationManagerTest.php
index b2d8e7fac1012b7bcc0fde546b39340a49317f3d..8b2fd2d2907cc44b81b098e437782fd8ca653aad 100644
--- a/web/core/tests/Drupal/Tests/Core/StringTranslation/TranslationManagerTest.php
+++ b/web/core/tests/Drupal/Tests/Core/StringTranslation/TranslationManagerTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\StringTranslation\TranslationManagerTest.
- */
-
 namespace Drupal\Tests\Core\StringTranslation;
 
 use Drupal\Component\Render\MarkupInterface;
diff --git a/web/core/tests/Drupal/Tests/Core/Template/TwigExtensionTest.php b/web/core/tests/Drupal/Tests/Core/Template/TwigExtensionTest.php
index 1aa2da366a1cca8fc61463dd3e4483f6869e4bfb..21b1ffe7bba31679344e9e7a957646c8d27c0664 100644
--- a/web/core/tests/Drupal/Tests/Core/Template/TwigExtensionTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Template/TwigExtensionTest.php
@@ -107,7 +107,7 @@ public function testEscaping($template, $expected) {
     $nodes = $twig->parse($twig->tokenize(new Source($template, $name)));
 
     $this->assertSame($expected, $nodes->getNode('body')
-      ->getNode(0)
+      ->getNode('0')
       ->getNode('expr') instanceof FilterExpression);
   }
 
diff --git a/web/core/tests/Drupal/Tests/Core/Template/TwigSandboxTest.php b/web/core/tests/Drupal/Tests/Core/Template/TwigSandboxTest.php
index c7507dc0f79a73cd0bad890650065858cdeb05dc..318baa8635b6dd754cee3ed04d78ec583a4a7bb8 100644
--- a/web/core/tests/Drupal/Tests/Core/Template/TwigSandboxTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Template/TwigSandboxTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\Template\TwigSandboxTest.
- */
-
 namespace Drupal\Tests\Core\Template;
 
 use Drupal\Core\Template\Attribute;
diff --git a/web/core/tests/Drupal/Tests/Core/UrlTest.php b/web/core/tests/Drupal/Tests/Core/UrlTest.php
index aa0c0cf74e13c161daf47eb83fefe5f6be8d2c3f..054c6c0f13bb9ece285eb1441a26976b875f871b 100644
--- a/web/core/tests/Drupal/Tests/Core/UrlTest.php
+++ b/web/core/tests/Drupal/Tests/Core/UrlTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\Tests\Core\UrlTest.
- */
-
 namespace Drupal\Tests\Core;
 
 use Drupal\Component\Utility\UrlHelper;
diff --git a/web/core/tests/Drupal/Tests/Core/Utility/LinkGeneratorTest.php b/web/core/tests/Drupal/Tests/Core/Utility/LinkGeneratorTest.php
index 16bda9820a313ab53a69b4c09f47eef7dcb99c5e..f91444570f83035e9a3ec8ac732b311905e861b3 100644
--- a/web/core/tests/Drupal/Tests/Core/Utility/LinkGeneratorTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Utility/LinkGeneratorTest.php
@@ -410,7 +410,7 @@ public function testGenerateXss() {
     $url = new Url('test_route_4');
     $url->setUrlGenerator($this->urlGenerator);
     $result = $this->linkGenerator->generate("<script>alert('XSS!')</script>", $url);
-    $this->assertNoXPathResults('//a[@href="/test-route-4"]/script', $result);
+    $this->assertNoXPathResults('//a[@href="/test-route-4"]/script', (string) $result);
   }
 
   /**
@@ -449,7 +449,7 @@ public function testGenerateWithHtml() {
         'tag' => 'em',
       ],
     ], $result);
-    $this->assertStringContainsString('<em>HTML output</em>', $result);
+    $this->assertStringContainsString('<em>HTML output</em>', (string) $result);
   }
 
   /**
@@ -498,7 +498,7 @@ public function testGenerateActive() {
     $url = new Url('test_route_1', [], ['set_active_class' => FALSE]);
     $url->setUrlGenerator($this->urlGenerator);
     $result = $this->linkGenerator->generate('Test', $url);
-    $this->assertNoXPathResults('//a[@data-drupal-link-system-path="test-route-1"]', $result);
+    $this->assertNoXPathResults('//a[@data-drupal-link-system-path="test-route-1"]', (string) $result);
 
     // Render a link with an associated language.
     $url = new Url('test_route_1', [], [
diff --git a/web/core/tests/Drupal/Tests/UiHelperTrait.php b/web/core/tests/Drupal/Tests/UiHelperTrait.php
index 713e98518dcde41e2c9dc118fb1c9c5e2c4d0bcf..78c10d03a5563b6bd7b384c088df4f3b3a455656 100644
--- a/web/core/tests/Drupal/Tests/UiHelperTrait.php
+++ b/web/core/tests/Drupal/Tests/UiHelperTrait.php
@@ -3,7 +3,6 @@
 namespace Drupal\Tests;
 
 use Behat\Mink\Driver\BrowserKitDriver;
-use Drupal\Component\Render\FormattableMarkup;
 use Drupal\Component\Utility\Html;
 use Drupal\Component\Utility\UrlHelper;
 use Drupal\Core\Session\AccountInterface;
@@ -161,7 +160,7 @@ protected function drupalLogin(AccountInterface $account) {
 
     // @see ::drupalUserIsLoggedIn()
     $account->sessionId = $this->getSession()->getCookie(\Drupal::service('session_configuration')->getOptions(\Drupal::request())['name']);
-    $this->assertTrue($this->drupalUserIsLoggedIn($account), new FormattableMarkup('User %name successfully logged in.', ['%name' => $account->getAccountName()]));
+    $this->assertTrue($this->drupalUserIsLoggedIn($account), "User {$account->getAccountName()} successfully logged in.");
 
     $this->loggedInUser = $account;
     $this->container->get('current_user')->setAccount($account);
diff --git a/web/core/themes/claro/claro.theme b/web/core/themes/claro/claro.theme
index 27482188ed4ebe65dbacaa0f08cdafa5da7df20c..160ef878e25f12088d1beb7c7d42e0619bb35133 100644
--- a/web/core/themes/claro/claro.theme
+++ b/web/core/themes/claro/claro.theme
@@ -1383,6 +1383,11 @@ function _claro_preprocess_file_and_image_widget(array &$variables) {
   $variables['has_meta'] = $alt_is_visible || $title_is_visible || $display_is_visible || $description_is_visible;
   $variables['display'] = $display_is_visible;
 
+  // Handle the default checkbox display after the file is uploaded.
+  if (array_key_exists('display', $element)) {
+    $variables['data']['display']['#checked'] = $element['display']['#value'];
+  }
+
   // Render file upload input and upload button (or file name and remove button,
   // if the field is not empty) in an emphasized div.
   foreach ($variables['data'] as $key => $item) {
diff --git a/web/core/themes/olivero/css/base/variables.css b/web/core/themes/olivero/css/base/variables.css
index 750826d028cab05f0124a74b32a1d0c9a7b8536c..0ec1c1dcbc75545c0c19aac6cb64f030f412aa43 100644
--- a/web/core/themes/olivero/css/base/variables.css
+++ b/web/core/themes/olivero/css/base/variables.css
@@ -54,7 +54,9 @@
   --sp2: calc(2 * var(--sp));
   --sp2-5: calc(2.5 * var(--sp));
   --sp3: calc(3 * var(--sp));
+  --sp3-5: calc(3.5 * var(--sp));
   --sp4: calc(4 * var(--sp));
+  --sp4-5: calc(4.5 * var(--sp));
   --sp5: calc(5 * var(--sp));
   --sp6: calc(6 * var(--sp));
   --sp7: calc(7 * var(--sp));
@@ -63,6 +65,7 @@
   --sp10: calc(10 * var(--sp));
   --sp11: calc(11 * var(--sp));
   --sp12: calc(12 * var(--sp));
+  --sp13: calc(13 * var(--sp));
 
   /**
    * Gray colors.
@@ -116,7 +119,7 @@
   --color--green: #3fa21c;
 
   /* Header */
-  --header-height-wide-when-fixed: calc(6 * var(--sp));
+  --header-height-wide-when-fixed: var(--sp6);
 
   /* Width of slide out navigation */
   --mobile-nav-width: 31.25rem;
diff --git a/web/core/themes/olivero/css/base/variables.pcss.css b/web/core/themes/olivero/css/base/variables.pcss.css
index 59a4824f86e19cc5a0f29e8a74df350a7fbb8505..ea24361d9e60ade7e433446e6728d1331c40ae89 100644
--- a/web/core/themes/olivero/css/base/variables.pcss.css
+++ b/web/core/themes/olivero/css/base/variables.pcss.css
@@ -70,7 +70,9 @@
   --sp2: calc(2 * var(--sp));
   --sp2-5: calc(2.5 * var(--sp));
   --sp3: calc(3 * var(--sp));
+  --sp3-5: calc(3.5 * var(--sp));
   --sp4: calc(4 * var(--sp));
+  --sp4-5: calc(4.5 * var(--sp));
   --sp5: calc(5 * var(--sp));
   --sp6: calc(6 * var(--sp));
   --sp7: calc(7 * var(--sp));
@@ -79,6 +81,7 @@
   --sp10: calc(10 * var(--sp));
   --sp11: calc(11 * var(--sp));
   --sp12: calc(12 * var(--sp));
+  --sp13: calc(13 * var(--sp));
 
   /**
    * Gray colors.
@@ -132,7 +135,7 @@
   --color--green: #3fa21c; /* Green */
 
   /* Header */
-  --header-height-wide-when-fixed: calc(6 * var(--sp));
+  --header-height-wide-when-fixed: var(--sp6);
 
   /* Width of slide out navigation */
   --mobile-nav-width: 500px;
diff --git a/web/core/themes/olivero/css/components/header-search-narrow.css b/web/core/themes/olivero/css/components/header-search-narrow.css
index b02f01942bc2d504f03f176f88446f5246c84ee7..3bfcef0fd67e1e12549f9ea88fac2bf8c03e5f44 100644
--- a/web/core/themes/olivero/css/components/header-search-narrow.css
+++ b/web/core/themes/olivero/css/components/header-search-narrow.css
@@ -31,7 +31,7 @@
 
 .block-search-narrow input[type="search"] {
   width: calc(100% + var(--sp2));
-  height: calc(3 * var(--sp));
+  height: var(--sp3);
   padding-block: 0;
   padding-inline-start: var(--sp);
   padding-inline-end: var(--sp);
@@ -57,7 +57,7 @@
 
 @media (min-width: 43.75rem) {
   .block-search-narrow input[type="search"] {
-    height: calc(4 * var(--sp));
+    height: var(--sp4);
     padding-inline-start: var(--sp2);
     padding-inline-end: var(--sp2);
   }
diff --git a/web/core/themes/olivero/css/components/header-search-narrow.pcss.css b/web/core/themes/olivero/css/components/header-search-narrow.pcss.css
index 60b167f1b39db47e653e2f01fbb0d0061ae9d346..5e2ad80e34ea4ae945570f0907f8f3a7c3a1512d 100644
--- a/web/core/themes/olivero/css/components/header-search-narrow.pcss.css
+++ b/web/core/themes/olivero/css/components/header-search-narrow.pcss.css
@@ -25,7 +25,7 @@
 
   & input[type="search"] {
     width: calc(100% + var(--sp2));
-    height: calc(3 * var(--sp));
+    height: var(--sp3);
     padding-block: 0;
     padding-inline-start: var(--sp);
     padding-inline-end: var(--sp);
@@ -49,7 +49,7 @@
     }
 
     @media (--md) {
-      height: calc(4 * var(--sp));
+      height: var(--sp4);
       padding-inline-start: var(--sp2);
       padding-inline-end: var(--sp2);
     }
diff --git a/web/core/themes/olivero/css/components/navigation/nav-primary-wide.css b/web/core/themes/olivero/css/components/navigation/nav-primary-wide.css
index 675d46dd34f80f6d18f121d3343c6a82f14fde72..0662a881e7d175ae0d8b91442cae6787c11ba8d2 100644
--- a/web/core/themes/olivero/css/components/navigation/nav-primary-wide.css
+++ b/web/core/themes/olivero/css/components/navigation/nav-primary-wide.css
@@ -114,7 +114,7 @@
   body:not(.is-always-mobile-nav) .primary-nav__menu--level-2 {
     position: absolute;
     z-index: 105; /* Appear above search container. */
-    top: calc(100% - (0.5 * var(--sp)));
+    top: calc(100% - var(--sp0-5));
     left: 50%;
     visibility: hidden;
     overflow: auto;
@@ -124,7 +124,7 @@
     max-height: calc(100vh - var(--site-header-height-wide) - var(--drupal-displace-offset-top, 0px) - var(--drupal-displace-offset-bottom, 0px) - var(--sp));
     margin-block-start: 0;
     margin-inline-start: 0;
-    padding-block: calc(3 * var(--sp));
+    padding-block: var(--sp3);
     padding-inline-start: var(--sp2);
     padding-inline-end: var(--sp2);
     transition: none;
diff --git a/web/core/themes/olivero/css/components/navigation/nav-primary-wide.pcss.css b/web/core/themes/olivero/css/components/navigation/nav-primary-wide.pcss.css
index 88eed0c1b5c679f631edd5ad1dbd26e582bf6d3f..9e042f3cf06aa7f28abc7481c4588c6da6c374b4 100644
--- a/web/core/themes/olivero/css/components/navigation/nav-primary-wide.pcss.css
+++ b/web/core/themes/olivero/css/components/navigation/nav-primary-wide.pcss.css
@@ -116,7 +116,7 @@ body:not(.is-always-mobile-nav) {
     & .primary-nav__menu--level-2 {
       position: absolute;
       z-index: 105; /* Appear above search container. */
-      top: calc(100% - (0.5 * var(--sp)));
+      top: calc(100% - var(--sp0-5));
       left: 50%;
       visibility: hidden;
       overflow: auto;
@@ -126,7 +126,7 @@ body:not(.is-always-mobile-nav) {
       max-height: calc(100vh - var(--site-header-height-wide) - var(--drupal-displace-offset-top, 0px) - var(--drupal-displace-offset-bottom, 0px) - var(--sp));
       margin-block-start: 0;
       margin-inline-start: 0;
-      padding-block: calc(3 * var(--sp));
+      padding-block: var(--sp3);
       padding-inline-start: var(--sp2);
       padding-inline-end: var(--sp2);
       transition: none;
diff --git a/web/core/themes/olivero/css/components/node-teaser.css b/web/core/themes/olivero/css/components/node-teaser.css
index efaa290ea534d57877ec7676ebd513df5b1fefca..103ca2ec8815cb31e154171345db17827b36ed57 100644
--- a/web/core/themes/olivero/css/components/node-teaser.css
+++ b/web/core/themes/olivero/css/components/node-teaser.css
@@ -57,7 +57,7 @@
 }
 
 :is(.node--view-mode-teaser .primary-image) + .node__title {
-  flex-basis: calc(100% - calc(4.5 * var(--sp)));
+  flex-basis: calc(100% - var(--sp4-5));
 }
 
 @media (min-width: 62.5rem) {
@@ -71,8 +71,8 @@
 }
 
 .node--view-mode-teaser .primary-image img {
-  width: calc(3.5 * var(--sp));
-  height: calc(3.5 * var(--sp));
+  width: var(--sp3-5);
+  height: var(--sp3-5);
   object-fit: cover;
   border-radius: 50%;
 }
diff --git a/web/core/themes/olivero/css/components/node-teaser.pcss.css b/web/core/themes/olivero/css/components/node-teaser.pcss.css
index 6f956afa822ffc52255beab2e31b9d05254a299c..1d045f46d2ea8784d4b1ac625c3383d8c8a15bd8 100644
--- a/web/core/themes/olivero/css/components/node-teaser.pcss.css
+++ b/web/core/themes/olivero/css/components/node-teaser.pcss.css
@@ -47,7 +47,7 @@
 
     /* Ensure title does not wrap under image until necessary. */
     & + .node__title {
-      flex-basis: calc(100% - calc(4.5 * var(--sp)));
+      flex-basis: calc(100% - var(--sp4-5));
 
       @media (--lg) {
         flex-basis: auto;
@@ -59,8 +59,8 @@
     }
 
     & img {
-      width: calc(3.5 * var(--sp));
-      height: calc(3.5 * var(--sp));
+      width: var(--sp3-5);
+      height: var(--sp3-5);
       object-fit: cover;
       border-radius: 50%;
 
diff --git a/web/core/themes/olivero/css/components/text-content.css b/web/core/themes/olivero/css/components/text-content.css
index 7b7832e41afeae2917dbfbd6df158533da6c6c35..2380a187743c29690a8b5a070805a7ba14b7a7e7 100644
--- a/web/core/themes/olivero/css/components/text-content.css
+++ b/web/core/themes/olivero/css/components/text-content.css
@@ -139,7 +139,7 @@
   .text-content blockquote,
   .cke_editable blockquote {
     font-size: 2.5rem;
-    line-height: calc(3.5 * var(--sp));
+    line-height: var(--sp3-5);
   }
 }
 
diff --git a/web/core/themes/olivero/css/components/text-content.pcss.css b/web/core/themes/olivero/css/components/text-content.pcss.css
index 840087bcd790211f298679ee94c72a6952a26e01..7346607ca7c860f41494331fd3860529bf248c80 100644
--- a/web/core/themes/olivero/css/components/text-content.pcss.css
+++ b/web/core/themes/olivero/css/components/text-content.pcss.css
@@ -109,7 +109,7 @@
 
     @media (--lg) {
       font-size: 40px;
-      line-height: calc(3.5 * var(--sp));
+      line-height: var(--sp3-5);
     }
   }
 
diff --git a/web/core/themes/olivero/css/layout/layout-footer.css b/web/core/themes/olivero/css/layout/layout-footer.css
index 17df54dbae1c28546b2c1a5a03ee41b41880e8f4..dac1d348902506c0fa28e98ed06ad27f37867f07 100644
--- a/web/core/themes/olivero/css/layout/layout-footer.css
+++ b/web/core/themes/olivero/css/layout/layout-footer.css
@@ -26,7 +26,7 @@
 
 @media (min-width: 75rem) {
   .site-footer__inner {
-    padding-block: var(--sp4) calc(13 * var(--sp));
+    padding-block: var(--sp4) var(--sp13);
   }
 }
 
diff --git a/web/core/themes/olivero/css/layout/layout-footer.pcss.css b/web/core/themes/olivero/css/layout/layout-footer.pcss.css
index 2e91e4f86ac19f3e85273a556a89b8827da47885..8e57c031d71c2e959b257cb7007cb1174e9551e5 100644
--- a/web/core/themes/olivero/css/layout/layout-footer.pcss.css
+++ b/web/core/themes/olivero/css/layout/layout-footer.pcss.css
@@ -18,7 +18,7 @@
   padding-block: var(--sp2);
 
   @media (--nav) {
-    padding-block: var(--sp4) calc(13 * var(--sp));
+    padding-block: var(--sp4) var(--sp13);
   }
 }
 
diff --git a/web/core/themes/olivero/css/layout/social-bar.css b/web/core/themes/olivero/css/layout/social-bar.css
index 2b5b72eb418b143281b3cc3452fe91d88d18c7a7..9fbcfbf07986fb147e40ade22e714e6784c7070a 100644
--- a/web/core/themes/olivero/css/layout/social-bar.css
+++ b/web/core/themes/olivero/css/layout/social-bar.css
@@ -30,7 +30,7 @@
   .social-bar__inner {
     position: relative;
     width: var(--content-left);
-    padding-block: calc(5 * var(--sp));
+    padding-block: var(--sp5);
     padding-inline-start: 0;
     padding-inline-end: 0;
   }
@@ -39,7 +39,7 @@
     position: fixed;
     inset-block-start: var(--sp6);
     inset-inline-start: 0;
-    height: calc(100vh - 6 * var(--sp));
+    height: calc(100vh - var(--sp6));
   }
 }
 
diff --git a/web/core/themes/olivero/css/layout/social-bar.pcss.css b/web/core/themes/olivero/css/layout/social-bar.pcss.css
index 4116e35600cdf41421d45ab965c82461ef55818e..f52452470074fda3491c09cbe799fe0dccb05f1d 100644
--- a/web/core/themes/olivero/css/layout/social-bar.pcss.css
+++ b/web/core/themes/olivero/css/layout/social-bar.pcss.css
@@ -23,7 +23,7 @@
   @media (--nav) {
     position: relative;
     width: var(--content-left);
-    padding-block: calc(5 * var(--sp));
+    padding-block: var(--sp5);
     padding-inline-start: 0;
     padding-inline-end: 0;
 
@@ -31,7 +31,7 @@
       position: fixed;
       inset-block-start: var(--sp6);
       inset-inline-start: 0;
-      height: calc(100vh - 6 * var(--sp));
+      height: calc(100vh - var(--sp6));
     }
   }
 }