/** * REST API: WP_REST_Post_Types_Controller class * * @package WordPress * @subpackage REST_API * @since 4.7.0 */ /** * Core class to access post types via the REST API. * * @since 4.7.0 * * @see WP_REST_Controller */ class WP_REST_Post_Types_Controller extends WP_REST_Controller { /** * Constructor. * * @since 4.7.0 */ public function __construct() { $this->namespace = 'wp/v2'; $this->rest_base = 'types'; } /** * Registers the routes for post types. * * @since 4.7.0 * * @see register_rest_route() */ public function register_routes() { register_rest_route( $this->namespace, '/' . $this->rest_base, array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_items' ), 'permission_callback' => array( $this, 'get_items_permissions_check' ), 'args' => $this->get_collection_params(), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P[\w-]+)', array( 'args' => array( 'type' => array( 'description' => __( 'An alphanumeric identifier for the post type.' ), 'type' => 'string', ), ), array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_item' ), 'permission_callback' => '__return_true', 'args' => array( 'context' => $this->get_context_param( array( 'default' => 'view' ) ), ), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); } /** * Checks whether a given request has permission to read types. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access, WP_Error object otherwise. */ public function get_items_permissions_check( $request ) { if ( 'edit' === $request['context'] ) { $types = get_post_types( array( 'show_in_rest' => true ), 'objects' ); foreach ( $types as $type ) { if ( current_user_can( $type->cap->edit_posts ) ) { return true; } } return new WP_Error( 'rest_cannot_view', __( 'Sorry, you are not allowed to edit posts in this post type.' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Retrieves all public post types. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function get_items( $request ) { if ( $request->is_method( 'HEAD' ) ) { // Return early as this handler doesn't add any response headers. return new WP_REST_Response( array() ); } $data = array(); $types = get_post_types( array( 'show_in_rest' => true ), 'objects' ); foreach ( $types as $type ) { if ( 'edit' === $request['context'] && ! current_user_can( $type->cap->edit_posts ) ) { continue; } $post_type = $this->prepare_item_for_response( $type, $request ); $data[ $type->name ] = $this->prepare_response_for_collection( $post_type ); } return rest_ensure_response( $data ); } /** * Retrieves a specific post type. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function get_item( $request ) { $obj = get_post_type_object( $request['type'] ); if ( empty( $obj ) ) { return new WP_Error( 'rest_type_invalid', __( 'Invalid post type.' ), array( 'status' => 404 ) ); } if ( empty( $obj->show_in_rest ) ) { return new WP_Error( 'rest_cannot_read_type', __( 'Cannot view post type.' ), array( 'status' => rest_authorization_required_code() ) ); } if ( 'edit' === $request['context'] && ! current_user_can( $obj->cap->edit_posts ) ) { return new WP_Error( 'rest_forbidden_context', __( 'Sorry, you are not allowed to edit posts in this post type.' ), array( 'status' => rest_authorization_required_code() ) ); } $data = $this->prepare_item_for_response( $obj, $request ); return rest_ensure_response( $data ); } /** * Prepares a post type object for serialization. * * @since 4.7.0 * @since 5.9.0 Renamed `$post_type` to `$item` to match parent class for PHP 8 named parameter support. * * @param WP_Post_Type $item Post type object. * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response Response object. */ public function prepare_item_for_response( $item, $request ) { // Restores the more descriptive, specific name for use within this method. $post_type = $item; // Don't prepare the response body for HEAD requests. if ( $request->is_method( 'HEAD' ) ) { /** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php */ return apply_filters( 'rest_prepare_post_type', new WP_REST_Response( array() ), $post_type, $request ); } $taxonomies = wp_list_filter( get_object_taxonomies( $post_type->name, 'objects' ), array( 'show_in_rest' => true ) ); $taxonomies = wp_list_pluck( $taxonomies, 'name' ); $base = ! empty( $post_type->rest_base ) ? $post_type->rest_base : $post_type->name; $namespace = ! empty( $post_type->rest_namespace ) ? $post_type->rest_namespace : 'wp/v2'; $supports = get_all_post_type_supports( $post_type->name ); $fields = $this->get_fields_for_response( $request ); $data = array(); if ( rest_is_field_included( 'capabilities', $fields ) ) { $data['capabilities'] = $post_type->cap; } if ( rest_is_field_included( 'description', $fields ) ) { $data['description'] = $post_type->description; } if ( rest_is_field_included( 'hierarchical', $fields ) ) { $data['hierarchical'] = $post_type->hierarchical; } if ( rest_is_field_included( 'has_archive', $fields ) ) { $data['has_archive'] = $post_type->has_archive; } if ( rest_is_field_included( 'visibility', $fields ) ) { $data['visibility'] = array( 'show_in_nav_menus' => (bool) $post_type->show_in_nav_menus, 'show_ui' => (bool) $post_type->show_ui, ); } if ( rest_is_field_included( 'viewable', $fields ) ) { $data['viewable'] = is_post_type_viewable( $post_type ); } if ( rest_is_field_included( 'labels', $fields ) ) { $data['labels'] = $post_type->labels; } if ( rest_is_field_included( 'name', $fields ) ) { $data['name'] = $post_type->label; } if ( rest_is_field_included( 'slug', $fields ) ) { $data['slug'] = $post_type->name; } if ( rest_is_field_included( 'icon', $fields ) ) { $data['icon'] = $post_type->menu_icon; } if ( rest_is_field_included( 'supports', $fields ) ) { $data['supports'] = $supports; } if ( rest_is_field_included( 'taxonomies', $fields ) ) { $data['taxonomies'] = array_values( $taxonomies ); } if ( rest_is_field_included( 'rest_base', $fields ) ) { $data['rest_base'] = $base; } if ( rest_is_field_included( 'rest_namespace', $fields ) ) { $data['rest_namespace'] = $namespace; } if ( rest_is_field_included( 'template', $fields ) ) { $data['template'] = $post_type->template ?? array(); } if ( rest_is_field_included( 'template_lock', $fields ) ) { $data['template_lock'] = ! empty( $post_type->template_lock ) ? $post_type->template_lock : false; } $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; $data = $this->add_additional_fields_to_object( $data, $request ); $data = $this->filter_response_by_context( $data, $context ); // Wrap the data in a response object. $response = rest_ensure_response( $data ); if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) { $response->add_links( $this->prepare_links( $post_type ) ); } /** * Filters a post type returned from the REST API. * * Allows modification of the post type data right before it is returned. * * @since 4.7.0 * * @param WP_REST_Response $response The response object. * @param WP_Post_Type $post_type The original post type object. * @param WP_REST_Request $request Request used to generate the response. */ return apply_filters( 'rest_prepare_post_type', $response, $post_type, $request ); } /** * Prepares links for the request. * * @since 6.1.0 * * @param WP_Post_Type $post_type The post type. * @return array Links for the given post type. */ protected function prepare_links( $post_type ) { return array( 'collection' => array( 'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ), ), 'https://api.w.org/items' => array( 'href' => rest_url( rest_get_route_for_post_type_items( $post_type->name ) ), ), ); } /** * Retrieves the post type's schema, conforming to JSON Schema. * * @since 4.7.0 * @since 4.8.0 The `supports` property was added. * @since 5.9.0 The `visibility` and `rest_namespace` properties were added. * @since 6.1.0 The `icon` property was added. * * @return array Item schema data. */ public function get_item_schema() { if ( $this->schema ) { return $this->add_additional_fields_schema( $this->schema ); } $schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'type', 'type' => 'object', 'properties' => array( 'capabilities' => array( 'description' => __( 'All capabilities used by the post type.' ), 'type' => 'object', 'context' => array( 'edit' ), 'readonly' => true, ), 'description' => array( 'description' => __( 'A human-readable description of the post type.' ), 'type' => 'string', 'context' => array( 'view', 'edit' ), 'readonly' => true, ), 'hierarchical' => array( 'description' => __( 'Whether or not the post type should have children.' ), 'type' => 'boolean', 'context' => array( 'view', 'edit' ), 'readonly' => true, ), 'viewable' => array( 'description' => __( 'Whether or not the post type can be viewed.' ), 'type' => 'boolean', 'context' => array( 'edit' ), 'readonly' => true, ), 'labels' => array( 'description' => __( 'Human-readable labels for the post type for various contexts.' ), 'type' => 'object', 'context' => array( 'edit' ), 'readonly' => true, ), 'name' => array( 'description' => __( 'The title for the post type.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), 'slug' => array( 'description' => __( 'An alphanumeric identifier for the post type.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), 'supports' => array( 'description' => __( 'All features, supported by the post type.' ), 'type' => 'object', 'context' => array( 'edit' ), 'readonly' => true, ), 'has_archive' => array( 'description' => __( 'If the value is a string, the value will be used as the archive slug. If the value is false the post type has no archive.' ), 'type' => array( 'string', 'boolean' ), 'context' => array( 'view', 'edit' ), 'readonly' => true, ), 'taxonomies' => array( 'description' => __( 'Taxonomies associated with post type.' ), 'type' => 'array', 'items' => array( 'type' => 'string', ), 'context' => array( 'view', 'edit' ), 'readonly' => true, ), 'rest_base' => array( 'description' => __( 'REST base route for the post type.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), 'rest_namespace' => array( 'description' => __( 'REST route\'s namespace for the post type.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), 'visibility' => array( 'description' => __( 'The visibility settings for the post type.' ), 'type' => 'object', 'context' => array( 'edit' ), 'readonly' => true, 'properties' => array( 'show_ui' => array( 'description' => __( 'Whether to generate a default UI for managing this post type.' ), 'type' => 'boolean', ), 'show_in_nav_menus' => array( 'description' => __( 'Whether to make the post type available for selection in navigation menus.' ), 'type' => 'boolean', ), ), ), 'icon' => array( 'description' => __( 'The icon for the post type.' ), 'type' => array( 'string', 'null' ), 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), 'template' => array( 'type' => array( 'array' ), 'description' => __( 'The block template associated with the post type.' ), 'readonly' => true, 'context' => array( 'view', 'edit', 'embed' ), ), 'template_lock' => array( 'type' => array( 'string', 'boolean' ), 'enum' => array( 'all', 'insert', 'contentOnly', false ), 'description' => __( 'The template_lock associated with the post type, or false if none.' ), 'readonly' => true, 'context' => array( 'view', 'edit', 'embed' ), ), ), ); $this->schema = $schema; return $this->add_additional_fields_schema( $this->schema ); } /** * Retrieves the query params for collections. * * @since 4.7.0 * * @return array Collection parameters. */ public function get_collection_params() { return array( 'context' => $this->get_context_param( array( 'default' => 'view' ) ), ); } } L’été du jeu mobile : comment exploiter les bonus pour surpasser le desktop et maximiser votre bankroll – Chambers Of Vikramaditya

L’été du jeu mobile : comment exploiter les bonus pour surpasser le desktop et maximiser votre bankroll

L’été du jeu mobile : comment exploiter les bonus pour surpasser le desktop et maximiser votre bankroll

L’été s’installe et avec lui une vague de joueurs qui troquent leurs écrans fixes contre leurs smartphones et tablettes. Les températures élevées incitent à quitter le salon pour la terrasse, la plage ou le parc, et les opérateurs de casino en ligne profitent de cette mobilité accrue en proposant des promotions exclusivement conçues pour les appareils portables. Cette tendance n’est pas anodine : les données de trafic montrent que plus de 62 % des sessions de jeu pendant les mois de juillet‑août proviennent d’un dispositif mobile, surpassant ainsi le desktop pour la première fois depuis la pandémie.

Pour découvrir les meilleures offres de jeux en ligne en France, rendez‑vous sur casino en ligne france. Coupdepouceeconomiedenergie.Fr analyse chaque bonus, chaque condition de mise et chaque exigence légale afin que vous puissiez choisir un casino fiable en ligne sans perdre de temps à comparer manuellement les sites.

Dans cet article nous détaillerons comment transformer chaque promotion mobile en avantage concret : comprendre pourquoi le mobile domine l’été, identifier les bonus exclusifs aux smartphones, optimiser votre connexion, choisir les jeux à meilleur RTP, gérer votre bankroll et sécuriser vos dépôts grâce aux outils KYC recommandés par Coupdepouceeconomiedenergie.Fr. Suivez nos étapes et préparez votre agenda pour profiter pleinement des offres estivales avant que la saison ne s’achève.

Pourquoi le mobile domine le desktop cet été

Les vacances d’été modifient profondément les habitudes de jeu. Les joueurs préfèrent la flexibilité d’une session éclair entre deux baignades ou lors d’un pique‑nique sur la pelouse. Les plateformes qui offrent des applications légères voient leurs taux d’activation grimper de 15 % chaque semaine pendant juillet, alors que le trafic desktop stagne voire recule légèrement.

L’accessibilité immédiate est le facteur décisif : il suffit d’un clic sur l’icône d’une appli pour lancer une partie depuis la plage, sans devoir transporter un ordinateur portable encombrant. De plus, les notifications push permettent aux opérateurs d’informer instantanément leurs joueurs des nouvelles promotions, créant ainsi un sentiment d’urgence qui pousse à l’action rapide.

Selon le rapport annuel publié par Coupdepouceeconomiedenergie.Fr, le temps moyen passé sur un jeu mobile passe désormais à 45 minutes par session contre 32 minutes sur desktop pendant les mois chauds. Cette différence se traduit par une hausse du volume de mises de 18 % sur mobile uniquement, un indicateur clé pour les casinos cherchant à maximiser leurs revenus estivaux.

Le rôle du responsive design dans la rétention des joueurs

Un design responsive adapte automatiquement l’interface aux dimensions de l’écran, évitant ainsi les zooms laborieux ou les boutons trop petits qui découragent l’utilisateur. Sur un smartphone, chaque élément doit être optimisé pour une interaction tactile fluide ; sinon le taux de conversion chute rapidement.

Les études menées par Coupdepouceeconomiedenergie.Fr montrent qu’un taux de rebond inférieur à 20 % est atteint lorsqu’une page se charge en moins de deux secondes et que le bouton « Déposer » occupe au moins 44 px². En pratique, cela signifie que les développeurs intègrent des polices légères, compressent les images et utilisent des CDN géolocalisés afin que le joueur français bénéficie d’une expérience quasi instantanée même sur un réseau LTE moyen.

Les types de bonus exclusifs aux appareils mobiles

  • Bonus “départ rapide” : crédit immédiat dès l’ouverture de l’application pour les nouveaux inscrits (exemple : 10 € sans dépôt).
  • Tours gratuits activables via notifications push : souvent limités à 20 tours sur un slot spécifique comme Sunrise Spins.
  • Cashback instantané lié au GPS : lorsqu’un joueur se connecte depuis une zone géographique pré‑définie (plage ou centre-ville), il récupère 5 % de ses pertes sous forme de crédit jouable pendant 24 h.

Ces offres sont conçues pour exploiter la mobilité physique du joueur et créer une boucle d’engagement continue pendant l’été. Le site comparatif Coupdepouceeconomiedenergie.Fr classe chaque promotion selon son taux de conversion réel afin que vous sachiez exactement quel bonus vaut votre temps et vos données mobiles.

Comment activer un bonus push sans spammer son téléphone ?

1️⃣ Ouvrez les réglages de l’application du casino choisi et activez uniquement les notifications « Offres spéciales ».
2️⃣ Dans la section « Gestion des alertes », désactivez les messages marketing généraux qui ne concernent pas les bonus actifs.
3️⃣ Programmez une période « Ne pas déranger » pendant vos heures de sommeil afin que seules les promotions urgentes passent à travers.

En suivant ces trois étapes vous recevrez uniquement les notifications utiles (tours gratuits ou cashback) tout en conservant une batterie saine et une boîte de réception propre.

Optimiser son expérience réseau pour profiter des promotions

  • Wi‑Fi public sécurisé : privilégiez les hotspots protégés par WPA2 dans les cafés ou bibliothèques ; utilisez un VPN pour chiffrer votre trafic et éviter toute interception lors des dépôts rapides.
  • Data mobile LTE/5G : idéal lorsque vous êtes en déplacement; assurez‑vous que votre forfait offre au moins 5 Go/mois pour éviter la coupure après quelques heures de jeu intensif.

Astuces supplémentaires :
Fermez toutes les applications en arrière‑plan avant de lancer votre session afin de réduire la latence à moins de 30 ms, condition indispensable pour que vos tours gratuits ne soient pas annulés par un timeout serveur.
Activez le mode « Haute performance » dans les paramètres Android/iOS pour prioriser la bande passante du jeu plutôt que celle du streaming vidéo simultané.

Sélectionner les jeux mobiles qui offrent les meilleurs retours

Jeu mobile RTP Volatilité Bonus spécial mobile Jackpot max
Sunrise Spins 96,8% Moyenne 20 tours gratuits push €25k
Mojito Madness 97,2% Faible Cashback GPS 5% €15k
Atlantis Treasure 95,5% Haute Départ rapide €10 €50k
Paris Lights (table) 98,1% N/A Bonus dépôt mobile 100% jusqu’à €200 N/A

Coupdepouceeconomiedenergie.Fr recommande particulièrement Mojito Madness pour ceux qui recherchent un RTP supérieur à 97 % tout en profitant d’un cashback lié à la localisation GPS sur la Côte d’Azur pendant la fête nationale du 14 juillet.

Cas pratique : multiplier un tour gratuit sur un slot à volatilité moyenne

1️⃣ Recevez 20 tours gratuits via notification push sur Sunrise Spins.
2️⃣ Placez une mise maximale sur toutes les lignes payantes (0,05 € × 20 lignes = 1 €).
3️⃣ Activez la fonction « Auto‑spin » avec un multiplicateur x3 disponible uniquement pendant la session estivale « Sunburst Summer ».
Résultat attendu : avec un RTP de 96,8 %, chaque tour gratuit génère en moyenne 0,968 €; multiplié par x3 cela donne environ 2,90 € net par tour – soit presque trois fois votre mise initiale sans aucun risque supplémentaire.

Gestion responsable du bankroll grâce aux bonus mobiles

Planifier ses mises quotidiennes autour des offres “recharge” permet d’éviter le piège du dépassement budgétaire tout en maximisant le rendement des bonus reçus via l’application mobile. Par exemple, si vous recevez chaque jour un crédit de recharge équivalent à 20 % du dépôt effectué (minimum €10), fixez une limite quotidienne de dépôt à €30 ; vous obtiendrez ainsi €6 supplémentaires chaque jour sans augmenter votre exposition globale au risque.

Les applications modernes intègrent également des options d’auto‑exclusion temporisée qui bloquent l’accès pendant une période définie (12 h, 24 h ou même plusieurs jours). Coupdepouceeconomiedenergie.Fr souligne que plus de 70 % des joueurs qui utilisent ces limites constatent une amélioration notable de leur contrôle budgétaire et prolongent leur durée moyenne de jeu responsable sur l’ensemble de l’été.

Stratégies promotionnelles que seuls les joueurs mobiles peuvent exploiter

Le programme de fidélité géolocalisé « cercle d’été » récompense chaque visite dans des lieux touristiques partenaires (plages certifiées « Safe Play », festivals musicaux) avec des points convertibles en jetons gratuits ou en crédits cash‑back instantané via QR code affiché sur place. Cette approche crée une synergie entre activité physique et activité ludique tout en renforçant l’engagement client hors ligne.

Les challenges quotidiens via QR code placés dans des cafés branchés ou près des piscines publiques offrent également des missions simples – scanner le code puis jouer cinq tours sur un slot désigné – avec une récompense garantie sous forme d’un jeton gratuit utilisable immédiatement dans l’appareil mobile du joueur français légalement reconnu comme casino en ligne france légal par l’ARJEL+.

Transformer un challenge QR en jeton gratuit : guide étape par étape

1️⃣ Ouvrez l’app du casino recommandé par Coupdepouceeconomiedenergie.Fr et activez la fonction “Scanner QR”.
2️⃣ Pointez votre caméra vers le code affiché au point d’intérêt (exemple : terrasse du Café Riviera).
3️⃣ Un mini‑jeu apparaît ; choisissez “Play Now” et effectuez exactement cinq spins sur Mojito Madness.
4️⃣ Dès que vous avez atteint le nombre requis, le système crédite automatiquement un jeton gratuit d’une valeur équivalente à €0,50 dans votre portefeuille virtuel – utilisable immédiatement ou stocké pour une future promotion estivale.

Sécurité et vérification KYC on mobile : ne laissez rien au hasard

Valider son identité depuis un smartphone est désormais simplifié grâce aux technologies biométriques intégrées aux appareils Android et iOS modernes : reconnaissance faciale ou empreinte digitale permettent d’autoriser instantanément le transfert de documents personnels vers la plateforme du casino sélectionné via une connexion cryptée SSL/TLS end‑to‑end. Coupdepouceeconomiedenergie.Fr conseille d’utiliser l’app officielle du casino plutôt qu’une version web tierce afin d’éviter tout risque d’interception malveillante lors du téléchargement des pièces justificatives (pièce d’identité + justificatif domicile).

Parmi les outils recommandés figurent IDnow et Onfido, deux solutions françaises conformes aux exigences RGPD qui offrent une vérification instantanée sous moins de deux minutes avec possibilité d’enregistrement vidéo sécurisée directement depuis votre caméra frontale – idéal pour satisfaire rapidement la réglementation du casino fiable en ligne tout en restant conforme aux standards européens KYC/AML.

Calendrier estival des promotions : préparer son agenda de jeu

Date Promotion principale Jeu ciblé Bonus offert
14 juillet Fête nationale – Cashback GPS Atlantis Treasure 5 % cashback + 10 tours gratuits
21 août Retour des vacances – Dépôt double Sunrise Spins Dépôt bonus 100 % jusqu’à €200
Dernier week-end Soldes d’été – Programme fidélité “cercle” Tous Points multipliés x2 + jetons QR
Tous les mercredis Challenge quotidien QR Mojito Madness Jeton gratuit €0,50

Programmez vos notifications dans l’app du casino choisi selon ce tableau afin qu’aucune offre ne vous échappe : activez “Rappel avant promotion” trente minutes avant chaque date clé et synchronisez votre agenda Google/Apple avec ces alertes automatiques proposées par Coupdepouceeconomiedenergie.Fr pour rester toujours prêt à jouer au bon moment.

Conclusion

Cet été montre clairement que le jeu mobile dépasse désormais le desktop grâce à sa rapidité d’accès, sa capacité à délivrer des bonus exclusifs et son intégration fluide avec vos déplacements quotidiens. En suivant nos recommandations – choisir un casino fiable en ligne recommandé par Coupdepouceeconomiedenergie.Fr, activer intelligemment chaque promotion push, optimiser votre connexion réseau et sélectionner des jeux à haut RTP – vous transformerez chaque opportunité estivale en gains potentiels réels. Mettez dès maintenant en place le plan décrit ci‑dessus : configurez vos notifications, planifiez vos dépôts recharge et profitez pleinement des offres uniques avant que la saison ne se referme sur le sable chaud et les soirées sous étoiles numériques. Bonne chance et bon été ludique !

Leave a Comment

Your email address will not be published. Required fields are marked *