File theseus-add-effect-config.patch of Package theseus-ship

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8d7d8c43a..5f060d1e5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -172,12 +172,18 @@ set_package_properties(Libcap PROPERTIES
 )
 set(HAVE_LIBCAP ${Libcap_FOUND})
 
-option(KWIN_BUILD_KCMS "Enable building of KWin configuration modules." ON)
+option(COMO_BUILD_KCMS "Enable building of COMO configuration modules." ON)
+option(COMO_BUILD_TABBOX "Enable building of COMO Tabbox functionality" ON)
+
+check_symbol_exists(SCHED_RESET_ON_FORK "sched.h" HAVE_SCHED_RESET_ON_FORK)
+add_feature_info("SCHED_RESET_ON_FORK"
+                 HAVE_SCHED_RESET_ON_FORK
+                 "Required for running Wayland session with real-time scheduling")
 
 configure_file(config-theseus-ship.h.cmake config-theseus-ship.h)
 include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR})
 
-if (KWIN_BUILD_KCMS)
+if (COMO_BUILD_KCMS)
     add_subdirectory(kcms)
 endif()
 
@@ -189,10 +195,13 @@ target_link_libraries(kwin_x11
   KF6::Crash
 )
 
-install(TARGETS kwin_x11)
-
+target_compile_definitions(kwin_x11 PRIVATE
+    -DTRANSLATION_DOMAIN=\"kwin\"
+)
 kcoreaddons_target_static_plugins(kwin_x11 NAMESPACE "kwin/effects/plugins")
 
+install(TARGETS kwin_x11)
+
 add_executable(kwin_wayland main_wayland.cpp)
 target_link_libraries(kwin_wayland
   como::desktop-kde-wl
@@ -202,6 +211,12 @@ target_link_libraries(kwin_wayland
   KF6::DBusAddons
 )
 
+target_compile_definitions(kwin_wayland PRIVATE
+    -DTRANSLATION_DOMAIN=\"kwin\"
+)
+
+kcoreaddons_target_static_plugins(kwin_wayland NAMESPACE "kwin/effects/plugins")
+
 install(TARGETS kwin_wayland)
 if (HAVE_LIBCAP)
     install(
@@ -213,8 +228,6 @@ if (HAVE_LIBCAP)
     )
 endif()
 
-kcoreaddons_target_static_plugins(kwin_wayland NAMESPACE "kwin/effects/plugins")
-
 # Required for Plasma Wayland session. It expects a binary with this name to launch on startup.
 add_custom_target(kwin_wayland_wrapper ALL COMMAND
     ${CMAKE_COMMAND} -E create_symlink
diff --git a/cmake/modules/FindLibcap.cmake b/cmake/modules/FindLibcap.cmake
new file mode 100644
index 000000000..f0efa3ebc
--- /dev/null
+++ b/cmake/modules/FindLibcap.cmake
@@ -0,0 +1,38 @@
+# Try to find the setcap binary and cap libraries
+#
+# This will define:
+#
+#   Libcap_FOUND           - system has the cap library and setcap binary
+#   Libcap_LIBRARIES       - cap libraries to link against
+#   SETCAP_EXECUTABLE      - path of the setcap binary
+# In addition, the following targets are defined:
+#
+#   Libcap::SetCapabilities
+#
+
+
+# SPDX-FileCopyrightText: 2014 Hrvoje Senjan <hrvoje.senjan@gmail.com>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
+find_program(SETCAP_EXECUTABLE NAMES setcap DOC "The setcap executable")
+
+find_library(Libcap_LIBRARIES NAMES cap DOC "The cap (capabilities) library")
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Libcap FOUND_VAR Libcap_FOUND
+                                      REQUIRED_VARS SETCAP_EXECUTABLE Libcap_LIBRARIES)
+
+if(Libcap_FOUND AND NOT TARGET Libcap::SetCapabilities)
+    add_executable(Libcap::SetCapabilities IMPORTED)
+    set_target_properties(Libcap::SetCapabilities PROPERTIES
+        IMPORTED_LOCATION "${SETCAP_EXECUTABLE}"
+    )
+endif()
+
+mark_as_advanced(SETCAP_EXECUTABLE Libcap_LIBRARIES)
+
+include(FeatureSummary)
+set_package_properties(Libcap PROPERTIES
+    URL https://sites.google.com/site/fullycapable/
+    DESCRIPTION "Capabilities are a measure to limit the omnipotence of the superuser.")
diff --git a/config-theseus-ship.h.cmake b/config-theseus-ship.h.cmake
index 371aebc22..ddbafa11a 100644
--- a/config-theseus-ship.h.cmake
+++ b/config-theseus-ship.h.cmake
@@ -4,6 +4,9 @@
     SPDX-License-Identifier: GPL-2.0-or-later
 */
 
+#cmakedefine01 HAVE_LIBCAP
+#cmakedefine01 HAVE_SCHED_RESET_ON_FORK
+
 #cmakedefine01 HAVE_BREEZE_DECO
 #if HAVE_BREEZE_DECO
 #define BREEZE_KDECORATION_PLUGIN_ID "${BREEZE_KDECORATION_PLUGIN_ID}"
diff --git a/kcms/CMakeLists.txt b/kcms/CMakeLists.txt
index 0d10808da..95ab9a774 100644
--- a/kcms/CMakeLists.txt
+++ b/kcms/CMakeLists.txt
@@ -14,6 +14,6 @@ add_subdirectory(scripts)
 add_subdirectory(desktop)
 add_subdirectory(effects)
 
-if (KWIN_BUILD_TABBOX)
+if (COMO_BUILD_TABBOX)
     add_subdirectory(tabbox)
 endif()
diff --git a/kcms/common/CMakeLists.txt b/kcms/common/CMakeLists.txt
index 6e92646f7..561e64101 100644
--- a/kcms/common/CMakeLists.txt
+++ b/kcms/common/CMakeLists.txt
@@ -36,7 +36,7 @@ install(TARGETS kcmkwincommon LIBRARY NAMELINK_SKIP)
 set(kcm_kwin4_genericscripted_SRCS generic_scripted_config.cpp)
 
 qt_add_dbus_interface(kcm_kwin4_genericscripted_SRCS
-  ${KWIN_EFFECTS_INTERFACE} kwin_effects_interface
+  ${KWIN_EFFECTS_INTERFACE} kwineffects_interface
 )
 
 add_library(kcm_kwin4_genericscripted MODULE ${kcm_kwin4_genericscripted_SRCS})
diff --git a/kcms/common/effectsmodel.cpp b/kcms/common/effectsmodel.cpp
index 3dd4a484b..89db1a7c4 100644
--- a/kcms/common/effectsmodel.cpp
+++ b/kcms/common/effectsmodel.cpp
@@ -31,7 +31,6 @@ static QString translatedCategory(const QString& category)
     static const QVector<QString> knownCategories
         = {QStringLiteral("Accessibility"),
            QStringLiteral("Appearance"),
-           QStringLiteral("Candy"),
            QStringLiteral("Focus"),
            QStringLiteral("Show Desktop Animation"),
            QStringLiteral("Tools"),
@@ -42,7 +41,6 @@ static QString translatedCategory(const QString& category)
     static const QVector<QString> translatedCategories = {
         i18nc("Category of Desktop Effects, used as section header", "Accessibility"),
         i18nc("Category of Desktop Effects, used as section header", "Appearance"),
-        i18nc("Category of Desktop Effects, used as section header", "Candy"),
         i18nc("Category of Desktop Effects, used as section header", "Focus"),
         i18nc("Category of Desktop Effects, used as section header", "Peek at Desktop Animation"),
         i18nc("Category of Desktop Effects, used as section header", "Tools"),
@@ -332,7 +330,7 @@ void EffectsModel::loadPluginEffects(const KConfigGroup& kwinConfig)
 {
     const auto pluginEffects = KPluginMetaData::findPlugins(QStringLiteral("kwin/effects/plugins"));
     for (const KPluginMetaData& pluginEffect : pluginEffects) {
-        if (!pluginEffect.isValid()) {
+        if (!pluginEffect.isValid() || pluginEffect.name().isEmpty()) {
             continue;
         }
         EffectData effect;
@@ -388,7 +386,7 @@ void EffectsModel::loadPluginEffects(const KConfigGroup& kwinConfig)
 
 void EffectsModel::load(LoadOptions options)
 {
-    KConfigGroup kwinConfig(KSharedConfig::openConfig("kwinrc"), QStringLiteral("Plugins"));
+    KConfigGroup kwinConfig(KSharedConfig::openConfig("theseus-shiprc"), QStringLiteral("Plugins"));
 
     m_pendingEffects.clear();
     loadBuiltInEffects(kwinConfig);
@@ -409,7 +407,7 @@ void EffectsModel::load(LoadOptions options)
 
     auto commit = [this, options] {
         if (options == LoadOptions::KeepDirty) {
-            for (const EffectData& oldEffect : qAsConst(m_effects)) {
+            for (const EffectData& oldEffect : std::as_const(m_effects)) {
                 if (!oldEffect.changed) {
                     continue;
                 }
@@ -440,7 +438,7 @@ void EffectsModel::load(LoadOptions options)
     if (interface.isValid()) {
         QStringList effectNames;
         effectNames.reserve(m_pendingEffects.count());
-        for (const EffectData& data : qAsConst(m_pendingEffects)) {
+        for (const EffectData& data : std::as_const(m_pendingEffects)) {
             effectNames.append(data.serviceName);
         }
 
@@ -501,7 +499,7 @@ void EffectsModel::updateEffectStatus(const QModelIndex& rowIndex, Status effect
 
 void EffectsModel::save()
 {
-    KConfigGroup kwinConfig(KSharedConfig::openConfig("kwinrc"), QStringLiteral("Plugins"));
+    KConfigGroup kwinConfig(KSharedConfig::openConfig("theseus-shiprc"), QStringLiteral("Plugins"));
 
     QVector<EffectData> dirtyEffects;
 
diff --git a/kcms/common/generic_scripted_config.cpp b/kcms/common/generic_scripted_config.cpp
index cd18fd6d2..eed443b7c 100644
--- a/kcms/common/generic_scripted_config.cpp
+++ b/kcms/common/generic_scripted_config.cpp
@@ -5,7 +5,7 @@
 */
 #include "generic_scripted_config.h"
 
-#include <kwin_effects_interface.h>
+#include <kwineffects_interface.h>
 
 #include <KLocalizedString>
 #include <KLocalizedTranslator>
@@ -149,7 +149,7 @@ QString scripted_effect_config::typeName() const
 
 KConfigGroup scripted_effect_config::configGroup()
 {
-    return KSharedConfig::openConfig(QStringLiteral("kwinrc"))
+    return KSharedConfig::openConfig(QStringLiteral("theseus-shiprc"))
         ->group(QLatin1String("Effect-") + packageName());
 }
 
@@ -172,7 +172,7 @@ scripting_config::~scripting_config()
 
 KConfigGroup scripting_config::configGroup()
 {
-    return KSharedConfig::openConfig(QStringLiteral("kwinrc"))
+    return KSharedConfig::openConfig(QStringLiteral("theseus-shiprc"))
         ->group(QLatin1String("Script-") + packageName());
 }
 
diff --git a/kcms/common/generic_scripted_config.json b/kcms/common/generic_scripted_config.json
index 0d02730f8..fa43a2e0c 100644
--- a/kcms/common/generic_scripted_config.json
+++ b/kcms/common/generic_scripted_config.json
@@ -1,7 +1,4 @@
 {
     "Type": "Service",
-    "X-KDE-Library": "kcm_kwin4_genericscripted",
-    "X-KDE-ServiceTypes": [
-        "KCModule"
-    ]
+    "X-KDE-Library": "kcm_kwin4_genericscripted"
 }
diff --git a/kcms/compositing/kwincompositing_setting.kcfg b/kcms/compositing/kwincompositing_setting.kcfg
index 89ca49db1..3714cb2d4 100644
--- a/kcms/compositing/kwincompositing_setting.kcfg
+++ b/kcms/compositing/kwincompositing_setting.kcfg
@@ -10,7 +10,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
        http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
-   <kcfgfile name="kwinrc"/>
+   <kcfgfile name="theseus-shiprc"/>
 
    <group name="KDE">
        <entry name="AnimationDurationFactor" type="Double">
diff --git a/kcms/compositing/main.cpp b/kcms/compositing/main.cpp
index a2678057e..19c50709f 100644
--- a/kcms/compositing/main.cpp
+++ b/kcms/compositing/main.cpp
@@ -240,7 +240,7 @@ void KWinCompositingKCM::save()
     KCModule::save();
 
     // This clears up old entries that are now migrated to kdeglobals
-    KConfig("kwinrc", KConfig::NoGlobals)
+    KConfig("theseus-shiprc", KConfig::NoGlobals)
         .group(QStringLiteral("KDE"))
         .revertToDefault("AnimationDurationFactor");
 
diff --git a/kcms/decoration/kwindecorationsettings.kcfg b/kcms/decoration/kwindecorationsettings.kcfg
index d0bb6a56a..c659c110f 100644
--- a/kcms/decoration/kwindecorationsettings.kcfg
+++ b/kcms/decoration/kwindecorationsettings.kcfg
@@ -11,7 +11,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
       xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
       http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
   <include>config-theseus-ship.h</include>
-  <kcfgfile name="kwinrc" />
+  <kcfgfile name="theseus-shiprc" />
   <group name="org.kde.kdecoration2">
     <entry name="pluginName" key="library" type="String">
       <label>Plugin name</label>
diff --git a/kcms/desktop/animationsmodel.cpp b/kcms/desktop/animationsmodel.cpp
index ca377db99..3ad1cb797 100644
--- a/kcms/desktop/animationsmodel.cpp
+++ b/kcms/desktop/animationsmodel.cpp
@@ -153,7 +153,7 @@ bool AnimationsModel::isDefaults() const
 
 bool AnimationsModel::needsSave() const
 {
-    KConfigGroup kwinConfig(KSharedConfig::openConfig("kwinrc"), QStringLiteral("Plugins"));
+    KConfigGroup kwinConfig(KSharedConfig::openConfig("theseus-shiprc"), QStringLiteral("Plugins"));
 
     for (int i = 0; i < rowCount(); ++i) {
         const QModelIndex index_ = index(i, 0);
diff --git a/kcms/desktop/virtualdesktopssettings.kcfg b/kcms/desktop/virtualdesktopssettings.kcfg
index 08be2faa3..8993f3924 100644
--- a/kcms/desktop/virtualdesktopssettings.kcfg
+++ b/kcms/desktop/virtualdesktopssettings.kcfg
@@ -10,7 +10,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
       http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
-  <kcfgfile name="kwinrc"/>
+  <kcfgfile name="theseus-shiprc"/>
   <group name="Windows">
     <entry name="rollOverDesktops" key="RollOverDesktops" type="bool">
       <label>Whether or not, we circle through the virtual desktop when moving from one to the next</label>
diff --git a/kcms/options/kwinoptions_settings.kcfg b/kcms/options/kwinoptions_settings.kcfg
index 2fe807b07..f27b8b010 100644
--- a/kcms/options/kwinoptions_settings.kcfg
+++ b/kcms/options/kwinoptions_settings.kcfg
@@ -10,7 +10,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
        http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
-   <kcfgfile name="kwinrc"/>
+   <kcfgfile name="theseus-shiprc"/>
 
    <group name="Windows">
     <entry key="BorderSnapZone" type="Int">
diff --git a/kcms/rules/optionsmodel.cpp b/kcms/rules/optionsmodel.cpp
index dc0374bae..80d1c0c4a 100644
--- a/kcms/rules/optionsmodel.cpp
+++ b/kcms/rules/optionsmodel.cpp
@@ -140,7 +140,7 @@ QVariant OptionsModel::allValues() const
     }
 
     QVariantList list;
-    for (const Data& item : qAsConst(m_data)) {
+    for (const Data& item : std::as_const(m_data)) {
         if (item.optionType == NormalOption) {
             list << item.value;
         }
diff --git a/kcms/rules/rulesmodel.cpp b/kcms/rules/rulesmodel.cpp
index 0067f611f..960826c35 100644
--- a/kcms/rules/rulesmodel.cpp
+++ b/kcms/rules/rulesmodel.cpp
@@ -345,7 +345,7 @@ void RulesModel::setSettings(como::win::rules::settings* settings)
 
     m_settings = settings;
 
-    for (RuleItem* rule : qAsConst(m_ruleList)) {
+    for (RuleItem* rule : std::as_const(m_ruleList)) {
         const KConfigSkeletonItem* configItem = m_settings->findItem(rule->key());
         const KConfigSkeletonItem* configPolicyItem = m_settings->findItem(rule->policyKey());
 
diff --git a/kcms/screenedges/kwinscreenedgeeffectsettings.kcfg b/kcms/screenedges/kwinscreenedgeeffectsettings.kcfg
index 969a1d48e..084caec8f 100644
--- a/kcms/screenedges/kwinscreenedgeeffectsettings.kcfg
+++ b/kcms/screenedges/kwinscreenedgeeffectsettings.kcfg
@@ -10,7 +10,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
        http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
-    <kcfgfile name="kwinrc">
+    <kcfgfile name="theseus-shiprc">
         <parameter name="EffectName"/>
     </kcfgfile>
     <group name="Effect-$(EffectName)">
diff --git a/kcms/screenedges/kwinscreenedgescriptsettings.kcfg b/kcms/screenedges/kwinscreenedgescriptsettings.kcfg
index 508bc2d62..50856b2f2 100644
--- a/kcms/screenedges/kwinscreenedgescriptsettings.kcfg
+++ b/kcms/screenedges/kwinscreenedgescriptsettings.kcfg
@@ -10,7 +10,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
        http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
-    <kcfgfile name="kwinrc">
+    <kcfgfile name="theseus-shiprc">
         <parameter name="ScriptName"/>
     </kcfgfile>
     <group name="Script-$(ScriptName)">
diff --git a/kcms/screenedges/kwinscreenedgesettings.kcfg b/kcms/screenedges/kwinscreenedgesettings.kcfg
index cfc1de839..df32f854b 100644
--- a/kcms/screenedges/kwinscreenedgesettings.kcfg
+++ b/kcms/screenedges/kwinscreenedgesettings.kcfg
@@ -10,7 +10,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
        http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
-    <kcfgfile name="kwinrc"/>
+    <kcfgfile name="theseus-shiprc"/>
     <group name="Windows">
         <entry key="ElectricBorders" type="Int">
             <default>0</default>
@@ -68,17 +68,6 @@ SPDX-License-Identifier: GPL-2.0-or-later
             <default>int(como::win::electric_border::none)</default>
         </entry>
     </group>
-    <group name="Effect-Cube">
-        <entry name="BorderActivateCube" key="BorderActivate" type="IntList">
-            <default>int(como::win::electric_border::none)</default>
-        </entry>
-        <entry key="BorderActivateCylinder" type="IntList">
-            <default>int(como::win::electric_border::none)</default>
-        </entry>
-        <entry key="BorderActivateSphere" type="IntList">
-            <default>int(como::win::electric_border::none)</default>
-        </entry>
-    </group>
     <group name="Effect-overview">
         <entry name="BorderActivateOverview" key="BorderActivate" type="IntList">
             <default>int(como::win::electric_border::top_left)</default>
diff --git a/kcms/screenedges/kwintouchscreenedgeeffectsettings.kcfg b/kcms/screenedges/kwintouchscreenedgeeffectsettings.kcfg
index f863776c9..3fc6dc9c8 100644
--- a/kcms/screenedges/kwintouchscreenedgeeffectsettings.kcfg
+++ b/kcms/screenedges/kwintouchscreenedgeeffectsettings.kcfg
@@ -10,7 +10,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
        http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
-    <kcfgfile name="kwinrc">
+    <kcfgfile name="theseus-shiprc">
         <parameter name="EffectName"/>
     </kcfgfile>
     <group name="Effect-$(EffectName)">
diff --git a/kcms/screenedges/kwintouchscreenscriptsettings.kcfg b/kcms/screenedges/kwintouchscreenscriptsettings.kcfg
index d7d78fec9..6b651a694 100644
--- a/kcms/screenedges/kwintouchscreenscriptsettings.kcfg
+++ b/kcms/screenedges/kwintouchscreenscriptsettings.kcfg
@@ -10,7 +10,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
        http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
-    <kcfgfile name="kwinrc">
+    <kcfgfile name="theseus-shiprc">
         <parameter name="ScriptName"/>
     </kcfgfile>
     <group name="Script-$(ScriptName)">
diff --git a/kcms/screenedges/kwintouchscreensettings.kcfg b/kcms/screenedges/kwintouchscreensettings.kcfg
index fc37fd523..f6af3d131 100644
--- a/kcms/screenedges/kwintouchscreensettings.kcfg
+++ b/kcms/screenedges/kwintouchscreensettings.kcfg
@@ -10,7 +10,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
        http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
-    <kcfgfile name="kwinrc"/>
+    <kcfgfile name="theseus-shiprc"/>
     <group name="TouchEdges">
         <entry key="Top" type="String">
             <default>None</default>
@@ -36,17 +36,6 @@ SPDX-License-Identifier: GPL-2.0-or-later
             <default>int(como::win::electric_border::none)</default>
         </entry>
     </group>
-    <group name="Effect-Cube">
-        <entry name="TouchBorderActivateCube" key="TouchBorderActivate" type="IntList">
-            <default>int(como::win::electric_border::none)</default>
-        </entry>
-        <entry key="TouchBorderActivateCylinder" type="IntList">
-            <default>int(como::win::electric_border::none)</default>
-        </entry>
-        <entry key="TouchBorderActivateSphere" type="IntList">
-            <default>int(como::win::electric_border::none)</default>
-        </entry>
-    </group>
     <group name="Effect-overview">
         <entry name="TouchBorderActivateOverview" key="TouchBorderActivate" type="IntList">
             <default>int(como::win::electric_border::none)</default>
diff --git a/kcms/screenedges/main.cpp b/kcms/screenedges/main.cpp
index 4f2679838..811411bf0 100644
--- a/kcms/screenedges/main.cpp
+++ b/kcms/screenedges/main.cpp
@@ -35,7 +35,7 @@ namespace theseus_ship
 KWinScreenEdgesConfig::KWinScreenEdgesConfig(QObject* parent, const KPluginMetaData& data)
     : KCModule(parent, data)
     , m_form(new KWinScreenEdgesConfigForm(widget()))
-    , m_config(KSharedConfig::openConfig("kwinrc"))
+    , m_config(KSharedConfig::openConfig("theseus-shiprc"))
     , m_data(new KWinScreenEdgeData(this))
 {
     QVBoxLayout* layout = new QVBoxLayout(widget());
@@ -66,10 +66,10 @@ void KWinScreenEdgesConfig::load()
 {
     KCModule::load();
     m_data->settings()->load();
-    for (KWinScreenEdgeScriptSettings* setting : qAsConst(m_scriptSettings)) {
+    for (KWinScreenEdgeScriptSettings* setting : std::as_const(m_scriptSettings)) {
         setting->load();
     }
-    for (KWinScreenEdgeEffectSettings* setting : qAsConst(m_effectSettings)) {
+    for (KWinScreenEdgeEffectSettings* setting : std::as_const(m_effectSettings)) {
         setting->load();
     }
 
@@ -88,10 +88,10 @@ void KWinScreenEdgesConfig::save()
     m_data->settings()->setRemainActiveOnFullscreen(m_form->remainActiveOnFullscreen());
     m_data->settings()->setElectricBorderCornerRatio(m_form->electricBorderCornerRatio());
     m_data->settings()->save();
-    for (KWinScreenEdgeScriptSettings* setting : qAsConst(m_scriptSettings)) {
+    for (KWinScreenEdgeScriptSettings* setting : std::as_const(m_scriptSettings)) {
         setting->save();
     }
-    for (KWinScreenEdgeEffectSettings* setting : qAsConst(m_effectSettings)) {
+    for (KWinScreenEdgeEffectSettings* setting : std::as_const(m_effectSettings)) {
         setting->save();
     }
 
@@ -110,9 +110,8 @@ void KWinScreenEdgesConfig::save()
 
     interface.reconfigureEffect(QStringLiteral("overview"));
     interface.reconfigureEffect(QStringLiteral("windowview"));
-    interface.reconfigureEffect(QStringLiteral("cube"));
 
-    for (auto const& effectId : qAsConst(m_effects)) {
+    for (auto const& effectId : std::as_const(m_effects)) {
         interface.reconfigureEffect(effectId);
     }
 
@@ -170,10 +169,6 @@ void KWinScreenEdgesConfig::monitorInit()
     m_form->monitorAddItem(i18n("%1 - All Desktops", presentWindowsName));
     m_form->monitorAddItem(i18n("%1 - Current Desktop", presentWindowsName));
     m_form->monitorAddItem(i18n("%1 - Current Application", presentWindowsName));
-    auto cubeName = QString("Cube");
-    m_form->monitorAddItem(i18n("%1 - Cube", cubeName));
-    m_form->monitorAddItem(i18n("%1 - Cylinder", cubeName));
-    m_form->monitorAddItem(i18n("%1 - Sphere", cubeName));
     m_form->monitorAddItem(i18n("Overview"));
     m_form->monitorAddItem(i18n("Grid"));
 
@@ -264,11 +259,6 @@ void KWinScreenEdgesConfig::monitorLoadSettings()
     m_form->monitorChangeEdge(m_data->settings()->borderActivateOverview(), Overview);
     m_form->monitorChangeEdge(m_data->settings()->borderActivateGrid(), Grid);
 
-    // Desktop Cube
-    m_form->monitorChangeEdge(m_data->settings()->borderActivateCube(), Cube);
-    m_form->monitorChangeEdge(m_data->settings()->borderActivateCylinder(), Cylinder);
-    m_form->monitorChangeEdge(m_data->settings()->borderActivateSphere(), Sphere);
-
     // TabBox
     m_form->monitorChangeEdge(m_data->settings()->borderActivateTabBox(), TabBox);
     // Alternative TabBox
@@ -335,13 +325,6 @@ void KWinScreenEdgesConfig::monitorLoadDefaultSettings()
                                      Overview);
     m_form->monitorChangeDefaultEdge(m_data->settings()->defaultBorderActivateGridValue(), Grid);
 
-    // Desktop Cube
-    m_form->monitorChangeDefaultEdge(m_data->settings()->defaultBorderActivateCubeValue(), Cube);
-    m_form->monitorChangeDefaultEdge(m_data->settings()->defaultBorderActivateCylinderValue(),
-                                     Cylinder);
-    m_form->monitorChangeDefaultEdge(m_data->settings()->defaultBorderActivateSphereValue(),
-                                     Sphere);
-
     // TabBox
     m_form->monitorChangeDefaultEdge(m_data->settings()->defaultBorderActivateTabBoxValue(),
                                      TabBox);
@@ -384,11 +367,6 @@ void KWinScreenEdgesConfig::monitorSaveSettings()
     m_data->settings()->setBorderActivateOverview(m_form->monitorCheckEffectHasEdgeInt(Overview));
     m_data->settings()->setBorderActivateGrid(m_form->monitorCheckEffectHasEdgeInt(Grid));
 
-    // Desktop Cube
-    m_data->settings()->setBorderActivateCube(m_form->monitorCheckEffectHasEdgeInt(Cube));
-    m_data->settings()->setBorderActivateCylinder(m_form->monitorCheckEffectHasEdgeInt(Cylinder));
-    m_data->settings()->setBorderActivateSphere(m_form->monitorCheckEffectHasEdgeInt(Sphere));
-
     // TabBox
     m_data->settings()->setBorderActivateTabBox(m_form->monitorCheckEffectHasEdgeInt(TabBox));
     m_data->settings()->setBorderAlternativeActivate(
@@ -425,12 +403,6 @@ void KWinScreenEdgesConfig::monitorShowEvent()
     m_form->monitorItemSetEnabled(Overview, overviewEnabled);
     m_form->monitorItemSetEnabled(Grid, overviewEnabled);
 
-    // Desktop Cube
-    enabled = config.readEntry("cube", true);
-    m_form->monitorItemSetEnabled(Cube, enabled);
-    m_form->monitorItemSetEnabled(Cylinder, enabled);
-    m_form->monitorItemSetEnabled(Sphere, enabled);
-
     // tabbox, depends on reasonable focus policy.
     KConfigGroup config2(m_config, QStringLiteral("Windows"));
     QString focusPolicy = config2.readEntry("FocusPolicy", QString());
diff --git a/kcms/screenedges/main.h b/kcms/screenedges/main.h
index 8530d48aa..cbe8e4035 100644
--- a/kcms/screenedges/main.h
+++ b/kcms/screenedges/main.h
@@ -47,9 +47,6 @@ private:
             como::win::electric_border_action::count), // Start at the end of built in actions
         PresentWindowsCurrent,
         PresentWindowsClass,
-        Cube,
-        Cylinder,
-        Sphere,
         Overview,
         Grid,
         TabBox,
diff --git a/kcms/screenedges/monitor.cpp b/kcms/screenedges/monitor.cpp
index 7b4fd0ac0..14f2e90e3 100644
--- a/kcms/screenedges/monitor.cpp
+++ b/kcms/screenedges/monitor.cpp
@@ -117,7 +117,7 @@ bool Monitor::edge(int edge) const
 
 void Monitor::setEdgeEnabled(int edge, bool enabled)
 {
-    for (QAction* action : qAsConst(popup_actions[edge])) {
+    for (QAction* action : std::as_const(popup_actions[edge])) {
         action->setEnabled(enabled);
     }
 }
@@ -171,7 +171,7 @@ void Monitor::selectEdgeItem(int edge, int index)
 
 int Monitor::selectedEdgeItem(int edge) const
 {
-    for (auto const& act : qAsConst(popup_actions[edge])) {
+    for (auto const& act : std::as_const(popup_actions[edge])) {
         if (act->isChecked()) {
             return popup_actions[edge].indexOf(act);
         }
diff --git a/kcms/screenedges/touch.cpp b/kcms/screenedges/touch.cpp
index c44aed0cb..981ee57a2 100644
--- a/kcms/screenedges/touch.cpp
+++ b/kcms/screenedges/touch.cpp
@@ -33,7 +33,7 @@ namespace theseus_ship
 KWinScreenEdgesConfig::KWinScreenEdgesConfig(QObject* parent, const KPluginMetaData& data)
     : KCModule(parent, data)
     , m_form(new KWinTouchScreenEdgeConfigForm(widget()))
-    , m_config(KSharedConfig::openConfig("kwinrc"))
+    , m_config(KSharedConfig::openConfig("theseus-shiprc"))
     , m_data(new KWinTouchScreenData(this))
 {
     QVBoxLayout* layout = new QVBoxLayout(widget());
@@ -59,10 +59,10 @@ void KWinScreenEdgesConfig::load()
 {
     KCModule::load();
     m_data->settings()->load();
-    for (KWinTouchScreenScriptSettings* setting : qAsConst(m_scriptSettings)) {
+    for (KWinTouchScreenScriptSettings* setting : std::as_const(m_scriptSettings)) {
         setting->load();
     }
-    for (KWinTouchScreenEdgeEffectSettings* setting : qAsConst(m_effectSettings)) {
+    for (KWinTouchScreenEdgeEffectSettings* setting : std::as_const(m_effectSettings)) {
         setting->load();
     }
 
@@ -75,10 +75,10 @@ void KWinScreenEdgesConfig::save()
 {
     monitorSaveSettings();
     m_data->settings()->save();
-    for (KWinTouchScreenScriptSettings* setting : qAsConst(m_scriptSettings)) {
+    for (KWinTouchScreenScriptSettings* setting : std::as_const(m_scriptSettings)) {
         setting->save();
     }
-    for (KWinTouchScreenEdgeEffectSettings* setting : qAsConst(m_effectSettings)) {
+    for (KWinTouchScreenEdgeEffectSettings* setting : std::as_const(m_effectSettings)) {
         setting->save();
     }
 
@@ -93,8 +93,7 @@ void KWinScreenEdgesConfig::save()
     OrgKdeKwinEffectsInterface interface(
         QStringLiteral("org.kde.KWin"), QStringLiteral("/Effects"), QDBusConnection::sessionBus());
     interface.reconfigureEffect(QStringLiteral("windowview"));
-    interface.reconfigureEffect(QStringLiteral("cube"));
-    for (auto const& effectId : qAsConst(m_effects)) {
+    for (auto const& effectId : std::as_const(m_effects)) {
         interface.reconfigureEffect(effectId);
     }
 
@@ -134,11 +133,6 @@ void KWinScreenEdgesConfig::monitorInit()
     m_form->monitorAddItem(i18n("Overview"));
     m_form->monitorAddItem(i18n("Grid"));
 
-    const QString cubeName = "Cube";
-    m_form->monitorAddItem(i18n("%1 - Cube", cubeName));
-    m_form->monitorAddItem(i18n("%1 - Cylinder", cubeName));
-    m_form->monitorAddItem(i18n("%1 - Sphere", cubeName));
-
     m_form->monitorAddItem(i18n("Toggle window switching"));
     m_form->monitorAddItem(i18n("Toggle alternative window switching"));
 
@@ -215,13 +209,6 @@ void KWinScreenEdgesConfig::monitorLoadSettings()
     m_form->monitorChangeEdge(m_data->settings()->touchBorderActivateOverview(), Overview);
     m_form->monitorChangeEdge(m_data->settings()->touchBorderActivateGrid(), Grid);
 
-    // Desktop Cube BorderActivate
-    m_form->monitorChangeEdge(m_data->settings()->touchBorderActivateCube(), Cube);
-    // Desktop Cube BorderActivateCylinder
-    m_form->monitorChangeEdge(m_data->settings()->touchBorderActivateCylinder(), Cylinder);
-    // Desktop Cube BorderActivateSphere
-    m_form->monitorChangeEdge(m_data->settings()->touchBorderActivateSphere(), Sphere);
-
     // TabBox BorderActivate
     m_form->monitorChangeEdge(m_data->settings()->touchBorderActivateTabBox(), TabBox);
     // Alternative TabBox
@@ -273,16 +260,6 @@ void KWinScreenEdgesConfig::monitorLoadDefaultSettings()
     m_form->monitorChangeDefaultEdge(m_data->settings()->defaultTouchBorderActivateGridValue(),
                                      Grid);
 
-    // Desktop Cube BorderActivate
-    m_form->monitorChangeDefaultEdge(m_data->settings()->defaultTouchBorderActivateCubeValue(),
-                                     Cube);
-    // Desktop Cube BorderActivateCylinder
-    m_form->monitorChangeDefaultEdge(m_data->settings()->defaultTouchBorderActivateCylinderValue(),
-                                     Cylinder);
-    // Desktop Cube BorderActivateSphere
-    m_form->monitorChangeDefaultEdge(m_data->settings()->defaultTouchBorderActivateSphereValue(),
-                                     Sphere);
-
     // TabBox BorderActivate
     m_form->monitorChangeDefaultEdge(m_data->settings()->defaultTouchBorderActivateTabBoxValue(),
                                      TabBox);
@@ -317,12 +294,6 @@ void KWinScreenEdgesConfig::monitorSaveSettings()
     m_data->settings()->setTouchBorderActivateOverview(
         m_form->monitorCheckEffectHasEdgeInt(Overview));
 
-    // Desktop Cube
-    m_data->settings()->setTouchBorderActivateCube(m_form->monitorCheckEffectHasEdgeInt(Cube));
-    m_data->settings()->setTouchBorderActivateCylinder(
-        m_form->monitorCheckEffectHasEdgeInt(Cylinder));
-    m_data->settings()->setTouchBorderActivateSphere(m_form->monitorCheckEffectHasEdgeInt(Sphere));
-
     // TabBox
     m_data->settings()->setTouchBorderActivateTabBox(m_form->monitorCheckEffectHasEdgeInt(TabBox));
     m_data->settings()->setTouchBorderAlternativeActivate(
@@ -359,12 +330,6 @@ void KWinScreenEdgesConfig::monitorShowEvent()
     m_form->monitorItemSetEnabled(Overview, overviewEnabled);
     m_form->monitorItemSetEnabled(Grid, overviewEnabled);
 
-    // Desktop Cube
-    enabled = config.readEntry("cube", true);
-    m_form->monitorItemSetEnabled(Cube, enabled);
-    m_form->monitorItemSetEnabled(Cylinder, enabled);
-    m_form->monitorItemSetEnabled(Sphere, enabled);
-
     // tabbox, depends on reasonable focus policy.
     KConfigGroup config2(m_config, QStringLiteral("Windows"));
     QString focusPolicy = config2.readEntry("FocusPolicy", QString());
diff --git a/kcms/screenedges/touch.h b/kcms/screenedges/touch.h
index 033c47ccf..1552925ec 100644
--- a/kcms/screenedges/touch.h
+++ b/kcms/screenedges/touch.h
@@ -49,9 +49,6 @@ private:
             como::win::electric_border_action::count), // Start at the end of built in actions
         PresentWindowsCurrent,
         PresentWindowsClass,
-        Cube,
-        Cylinder,
-        Sphere,
         Overview,
         Grid,
         TabBox,
diff --git a/kcms/scripts/kwinscriptsdata.cpp b/kcms/scripts/kwinscriptsdata.cpp
index ccc0f4022..3c3c970d1 100644
--- a/kcms/scripts/kwinscriptsdata.cpp
+++ b/kcms/scripts/kwinscriptsdata.cpp
@@ -14,7 +14,7 @@
 
 KWinScriptsData::KWinScriptsData(QObject* parent)
     : KCModuleData(parent)
-    , m_kwinConfig(KSharedConfig::openConfig("kwinrc"))
+    , m_kwinConfig(KSharedConfig::openConfig("theseus-shiprc"))
 {
 }
 
diff --git a/kcms/scripts/module.cpp b/kcms/scripts/module.cpp
index 02043d6ac..c9b677331 100644
--- a/kcms/scripts/module.cpp
+++ b/kcms/scripts/module.cpp
@@ -35,7 +35,7 @@ Module::Module(QObject* parent, const KPluginMetaData& data)
     connect(m_model, &KPluginModel::defaulted, this, [this](bool defaulted) {
         setRepresentsDefaults(defaulted);
     });
-    m_model->setConfig(KSharedConfig::openConfig("kwinrc")->group(QStringLiteral("Plugins")));
+    m_model->setConfig(KSharedConfig::openConfig("theseus-shiprc")->group(QStringLiteral("Plugins")));
 }
 
 void Module::onGHNSEntriesChanged()
@@ -120,7 +120,7 @@ void Module::load()
 void Module::save()
 {
     using namespace KPackage;
-    for (const KPluginMetaData& info : qAsConst(m_pendingDeletions)) {
+    for (const KPluginMetaData& info : std::as_const(m_pendingDeletions)) {
         // We can get the package root from the entry path
         QDir root = QFileInfo(info.fileName()).dir();
         root.cdUp();
diff --git a/kcms/tabbox/kwinpluginssettings.kcfg b/kcms/tabbox/kwinpluginssettings.kcfg
index 8419ac717..431d8d626 100644
--- a/kcms/tabbox/kwinpluginssettings.kcfg
+++ b/kcms/tabbox/kwinpluginssettings.kcfg
@@ -10,7 +10,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
        http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
-    <kcfgfile name="kwinrc" />
+    <kcfgfile name="theseus-shiprc" />
     <group name="Plugins">
         <entry key="highlightwindowEnabled" type="Bool">
             <default>true</default>
diff --git a/kcms/tabbox/kwinswitcheffectsettings.kcfg b/kcms/tabbox/kwinswitcheffectsettings.kcfg
index 92e08b07e..716acacb0 100644
--- a/kcms/tabbox/kwinswitcheffectsettings.kcfg
+++ b/kcms/tabbox/kwinswitcheffectsettings.kcfg
@@ -10,7 +10,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
        http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
-    <kcfgfile name="kwinrc">
+    <kcfgfile name="theseus-shiprc">
         <parameter name="EffectGroup"/>
     </kcfgfile>
     <group name="$(EffectGroup)">
diff --git a/kcms/tabbox/kwintabboxsettings.kcfg b/kcms/tabbox/kwintabboxsettings.kcfg
index b65125588..3b020acf1 100644
--- a/kcms/tabbox/kwintabboxsettings.kcfg
+++ b/kcms/tabbox/kwintabboxsettings.kcfg
@@ -10,7 +10,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
        http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
-    <kcfgfile name="kwinrc">
+    <kcfgfile name="theseus-shiprc">
         <parameter name="TabBoxGroup"/>
     </kcfgfile>
     <group name="$(TabBoxGroup)">
diff --git a/kcms/tabbox/layoutpreview.h b/kcms/tabbox/layoutpreview.h
index 19e7d4822..a99d9b5ee 100644
--- a/kcms/tabbox/layoutpreview.h
+++ b/kcms/tabbox/layoutpreview.h
@@ -3,8 +3,7 @@ SPDX-FileCopyrightText: 2009, 2011 Martin Gräßlin <mgraesslin@kde.org>
 
 SPDX-License-Identifier: GPL-2.0-or-later
 */
-#ifndef KWIN_TABBOX_LAYOUTPREVIEW_H
-#define KWIN_TABBOX_LAYOUTPREVIEW_H
+#pragma once
 
 #include <QAbstractListModel>
 #include <QQuickView>
diff --git a/kcms/tabbox/main.cpp b/kcms/tabbox/main.cpp
index fa7ce8762..82bb9e5b5 100644
--- a/kcms/tabbox/main.cpp
+++ b/kcms/tabbox/main.cpp
@@ -21,6 +21,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
 #include <KPackage/Package>
 #include <KPackage/PackageLoader>
 #include <KPluginFactory>
+#include <KSeparator>
 #include <KTitleWidget>
 #include <QDialog>
 #include <QDialogButtonBox>
@@ -43,7 +44,7 @@ namespace theseus_ship
 
 KWinTabBoxConfig::KWinTabBoxConfig(QObject* parent, const KPluginMetaData& data)
     : KCModule(parent, data)
-    , m_config(KSharedConfig::openConfig("kwinrc"))
+    , m_config(KSharedConfig::openConfig("theseus-shiprc"))
     , m_data(new KWinTabboxData(this))
 {
     QTabWidget* tabWidget = new QTabWidget(widget());
@@ -126,7 +127,7 @@ static QList<KPackage::Package> availableLnFPackages()
         pkg.setFallbackPackage(KPackage::Package());
         if (!pkg.filePath("defaults").isEmpty()) {
             KSharedConfigPtr conf = KSharedConfig::openConfig(pkg.filePath("defaults"));
-            KConfigGroup cg = KConfigGroup(conf, QStringLiteral("kwinrc"));
+            KConfigGroup cg = KConfigGroup(conf, QStringLiteral("theseus-shiprc"));
             cg = KConfigGroup(&cg, QStringLiteral("WindowSwitcher"));
             if (!cg.readEntry("LayoutName", QString()).isEmpty()) {
                 packages << pkg;
diff --git a/kcms/tabbox/shortcutsettings.cpp b/kcms/tabbox/shortcutsettings.cpp
index db820285a..8c3c6586a 100644
--- a/kcms/tabbox/shortcutsettings.cpp
+++ b/kcms/tabbox/shortcutsettings.cpp
@@ -106,7 +106,7 @@ namespace theseus_ship
 
 ShortcutSettings::ShortcutSettings(QObject* parent)
     : KConfigSkeleton(nullptr, parent)
-    , m_actionCollection(new KActionCollection(this, QStringLiteral("kwin")))
+    , m_actionCollection(new KActionCollection(this, QStringLiteral("theseus-ship")))
 {
     m_actionCollection->setConfigGroup("Navigation");
     m_actionCollection->setConfigGlobal(true);
diff --git a/main_wayland.cpp b/main_wayland.cpp
index d48ae06fc..6057954d9 100644
--- a/main_wayland.cpp
+++ b/main_wayland.cpp
@@ -219,7 +219,7 @@ int main(int argc, char* argv[])
 
     using base_t = como::base::wayland::xwl_platform<base_mod>;
     base_t base({
-        .config = como::base::config(KConfig::OpenFlag::FullConfig, "kwinrc"),
+        .config = como::base::config(KConfig::OpenFlag::FullConfig, "theseus-shiprc"),
         .socket_name = parser.value(options.socket).toStdString(),
         .flags = flags,
         .mode = parser.isSet(options.xwl) ? como::base::operation_mode::xwayland
@@ -308,7 +308,7 @@ int main(int argc, char* argv[])
 
     // start the applications passed to us as command line arguments
     if (auto apps = parser.positionalArguments(); !apps.isEmpty()) {
-        for (auto const& app_name : qAsConst(apps)) {
+        for (auto const& app_name : std::as_const(apps)) {
             auto arguments = KShell::splitArgs(app_name);
             if (arguments.isEmpty()) {
                 qWarning("Failed to launch application: %s is an invalid command",
diff --git a/main_x11.cpp b/main_x11.cpp
index 318640beb..595c612a6 100644
--- a/main_x11.cpp
+++ b/main_x11.cpp
@@ -128,7 +128,7 @@ int main(int argc, char* argv[])
     crash_count = parser.value("crashes").toInt();
 
     using base_t = como::base::x11::platform<base_mod>;
-    base_t base(como::base::config(KConfig::OpenFlag::FullConfig, "kwinrc"));
+    base_t base(como::base::config(KConfig::OpenFlag::FullConfig, "theseus-shiprc"));
 
     KCrash::setEmergencySaveFunction(crash_handler);
     como::base::x11::platform_init_crash_count(base, crash_count);
openSUSE Build Service is sponsored by